Commit 5aa999d3c0af469edac577440022072997cad4e6

Thomas de Grivel 2024-03-19T07:14:01

fix bug with log returning nil instead of empty list

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
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037
2038
2039
2040
2041
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167
2168
2169
2170
2171
2172
2173
2174
2175
2176
2177
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2464
2465
2466
2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2603
2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662
2663
2664
2665
2666
2667
2668
2669
2670
2671
2672
2673
2674
2675
2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741
2742
2743
2744
2745
2746
2747
2748
2749
2750
2751
2752
2753
2754
2755
2756
2757
2758
2759
2760
2761
2762
2763
2764
2765
2766
2767
2768
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799
2800
2801
2802
2803
2804
2805
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823
2824
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839
2840
2841
2842
2843
2844
2845
2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894
2895
2896
2897
2898
2899
2900
2901
2902
2903
2904
2905
2906
2907
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116
3117
3118
3119
3120
3121
3122
3123
3124
3125
3126
3127
3128
3129
3130
3131
3132
3133
3134
3135
3136
3137
3138
3139
3140
3141
3142
3143
3144
3145
3146
3147
3148
3149
3150
3151
3152
3153
3154
3155
3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196
3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259
3260
3261
3262
3263
3264
3265
3266
3267
3268
3269
3270
3271
3272
3273
3274
3275
3276
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3298
3299
3300
3301
3302
3303
3304
3305
3306
3307
3308
3309
3310
3311
3312
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324
3325
3326
3327
3328
3329
3330
3331
3332
3333
3334
3335
3336
3337
3338
3339
3340
3341
3342
3343
3344
3345
3346
3347
3348
3349
3350
3351
3352
3353
3354
3355
3356
3357
3358
3359
3360
3361
3362
3363
3364
3365
3366
3367
3368
3369
3370
3371
3372
3373
3374
3375
3376
3377
3378
3379
3380
3381
3382
3383
3384
3385
3386
3387
3388
3389
3390
3391
3392
3393
3394
3395
3396
3397
3398
3399
3400
3401
3402
3403
3404
3405
3406
3407
3408
3409
3410
3411
3412
3413
3414
3415
3416
3417
3418
3419
3420
3421
3422
3423
3424
3425
3426
3427
3428
3429
3430
3431
3432
3433
3434
3435
3436
3437
3438
3439
3440
3441
3442
3443
3444
3445
3446
3447
3448
3449
3450
3451
3452
3453
3454
3455
3456
3457
3458
3459
3460
3461
3462
3463
3464
3465
3466
3467
3468
3469
3470
3471
3472
3473
3474
3475
3476
3477
3478
3479
3480
3481
3482
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493
3494
3495
3496
3497
3498
3499
3500
3501
3502
3503
3504
3505
3506
3507
3508
3509
3510
3511
3512
3513
3514
3515
3516
3517
3518
3519
3520
3521
3522
3523
3524
3525
3526
3527
3528
3529
3530
3531
3532
3533
3534
3535
3536
3537
3538
3539
3540
3541
3542
3543
3544
3545
3546
3547
3548
3549
3550
3551
3552
3553
3554
3555
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570
3571
3572
3573
3574
3575
3576
3577
3578
3579
3580
3581
3582
3583
3584
3585
3586
3587
3588
3589
3590
3591
3592
3593
3594
3595
3596
3597
3598
3599
3600
3601
3602
3603
3604
3605
3606
3607
3608
3609
3610
3611
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635
3636
3637
3638
3639
3640
3641
3642
3643
3644
3645
3646
3647
3648
3649
3650
3651
3652
3653
3654
3655
3656
3657
3658
3659
3660
3661
3662
3663
3664
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704
3705
3706
3707
3708
3709
3710
3711
3712
3713
3714
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770
3771
3772
3773
3774
3775
3776
3777
3778
3779
3780
3781
3782
3783
3784
3785
3786
3787
3788
3789
3790
3791
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3839
3840
3841
3842
3843
3844
3845
3846
3847
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
3879
3880
3881
3882
3883
3884
3885
3886
3887
3888
3889
3890
3891
3892
3893
3894
3895
3896
3897
3898
3899
3900
3901
3902
3903
3904
3905
3906
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3925
3926
3927
3928
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954
3955
3956
3957
3958
3959
3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977
3978
3979
3980
3981
3982
3983
3984
3985
3986
3987
3988
3989
3990
3991
3992
3993
3994
3995
3996
3997
3998
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033
4034
4035
4036
4037
4038
4039
4040
4041
4042
4043
4044
4045
4046
4047
4048
4049
4050
4051
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066
4067
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085
4086
4087
4088
4089
4090
4091
4092
4093
4094
4095
4096
4097
4098
4099
4100
4101
4102
4103
4104
4105
4106
4107
4108
4109
4110
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4126
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144
4145
4146
4147
4148
4149
4150
4151
4152
4153
4154
4155
4156
4157
4158
4159
4160
4161
4162
4163
4164
4165
4166
4167
4168
4169
4170
4171
4172
4173
4174
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222
4223
4224
4225
4226
4227
4228
4229
4230
4231
4232
4233
4234
4235
4236
4237
4238
4239
4240
4241
4242
4243
4244
4245
4246
4247
4248
4249
4250
4251
4252
4253
4254
4255
4256
4257
4258
4259
4260
4261
4262
4263
4264
4265
4266
4267
4268
4269
4270
4271
4272
4273
4274
4275
4276
4277
4278
4279
4280
4281
4282
4283
4284
4285
4286
4287
4288
4289
4290
4291
4292
4293
4294
4295
4296
4297
4298
4299
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353
4354
4355
4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384
4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462
4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493
4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524
4525
4526
4527
4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551
4552
4553
4554
4555
4556
4557
4558
4559
4560
4561
4562
4563
4564
4565
4566
4567
4568
4569
4570
4571
4572
4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587
4588
4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
4623
4624
4625
4626
4627
4628
4629
4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644
4645
4646
4647
4648
4649
4650
4651
4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
diff --git a/assets/package-lock.json b/assets/package-lock.json
index ff6d8b8..65d52f7 100644
--- a/assets/package-lock.json
+++ b/assets/package-lock.json
@@ -22,9 +22,9 @@
       }
     },
     "node_modules/bootstrap": {
-      "version": "5.3.2",
-      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.2.tgz",
-      "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==",
+      "version": "5.3.3",
+      "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.3.3.tgz",
+      "integrity": "sha512-8HLCdWgyoMguSO9o+aH+iuZ+aht+mzW0u3HIMzVu7Srrpv7EBBxTnrFlSCskwdY1+EOFQSm7uMJhNQHkdPcmjg==",
       "funding": [
         {
           "type": "github",
diff --git a/lib/kmxgit/git.ex b/lib/kmxgit/git.ex
index 11ea6f2..15cbe8f 100644
--- a/lib/kmxgit/git.ex
+++ b/lib/kmxgit/git.ex
@@ -156,7 +156,7 @@ defmodule Kmxgit.Git do
     dir = git_dir(repo)
     # [%{author: author, author_email: email, hash: hash, date: date, message: msg}]
     #IO.inspect({:log_nif, dir, tree, path, skip, limit})
-    log_nif(dir, tree, path, skip, limit)
+    log_nif(dir, tree, path, skip, limit) || []
   end
 
   def log_nif(_repo, _tree, _path, _skip, _limit) do
diff --git a/priv/static/_assets/app.css b/priv/static/_assets/app.css
index dff4b59..cea2fe7 100644
--- a/priv/static/_assets/app.css
+++ b/priv/static/_assets/app.css
@@ -1,5 +1,6 @@
 @charset "UTF-8";
-/* This file is for your main application CSS */ /**
+/* This file is for your main application CSS */
+/**
  * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
  * Based on https://github.com/chriskempson/tomorrow-theme
  * @author Rose Pritchard
@@ -297,8 +298,8 @@ explicitly, e.g.
   font-style: normal;
 }
 /*!
- * Bootstrap  v5.3.2 (https://getbootstrap.com/)
- * Copyright 2011-2023 The Bootstrap Authors
+ * Bootstrap  v5.3.3 (https://getbootstrap.com/)
+ * Copyright 2011-2024 The Bootstrap Authors
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  */
 :root,
@@ -3252,6 +3253,9 @@ textarea.form-control-lg {
 .btn-check:checked + .btn:focus-visible, :not(.btn-check) + .btn:active:focus-visible, .btn:first-child:active:focus-visible, .btn.active:focus-visible, .btn.show:focus-visible {
   box-shadow: var(--bs-btn-focus-box-shadow);
 }
+.btn-check:checked:focus-visible + .btn {
+  box-shadow: var(--bs-btn-focus-box-shadow);
+}
 .btn:disabled, .btn.disabled, fieldset:disabled .btn {
   color: var(--bs-btn-disabled-color);
   pointer-events: none;
@@ -4783,12 +4787,11 @@ textarea.form-control-lg {
   --bs-accordion-btn-padding-y: 1rem;
   --bs-accordion-btn-color: var(--bs-body-color);
   --bs-accordion-btn-bg: var(--bs-accordion-bg);
-  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  --bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='%23212529' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
   --bs-accordion-btn-icon-width: 1.25rem;
   --bs-accordion-btn-icon-transform: rotate(-180deg);
   --bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;
-  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='black'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
-  --bs-accordion-btn-focus-border-color: gray;
+  --bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='none' stroke='black' stroke-linecap='round' stroke-linejoin='round'%3e%3cpath d='M2 5L8 11L14 5'/%3e%3c/svg%3e");
   --bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(0, 0, 0, 0.25);
   --bs-accordion-body-padding-x: 1.25rem;
   --bs-accordion-body-padding-y: 1rem;
@@ -4846,7 +4849,6 @@ textarea.form-control-lg {
 }
 .accordion-button:focus {
   z-index: 3;
-  border-color: var(--bs-accordion-btn-focus-border-color);
   outline: 0;
   box-shadow: var(--bs-accordion-btn-focus-box-shadow);
 }
@@ -4864,7 +4866,7 @@ textarea.form-control-lg {
   border-top-left-radius: var(--bs-accordion-border-radius);
   border-top-right-radius: var(--bs-accordion-border-radius);
 }
-.accordion-item:first-of-type .accordion-button {
+.accordion-item:first-of-type > .accordion-header .accordion-button {
   border-top-left-radius: var(--bs-accordion-inner-border-radius);
   border-top-right-radius: var(--bs-accordion-inner-border-radius);
 }
@@ -4875,11 +4877,11 @@ textarea.form-control-lg {
   border-bottom-right-radius: var(--bs-accordion-border-radius);
   border-bottom-left-radius: var(--bs-accordion-border-radius);
 }
-.accordion-item:last-of-type .accordion-button.collapsed {
+.accordion-item:last-of-type > .accordion-header .accordion-button.collapsed {
   border-bottom-right-radius: var(--bs-accordion-inner-border-radius);
   border-bottom-left-radius: var(--bs-accordion-inner-border-radius);
 }
-.accordion-item:last-of-type .accordion-collapse {
+.accordion-item:last-of-type > .accordion-collapse {
   border-bottom-right-radius: var(--bs-accordion-border-radius);
   border-bottom-left-radius: var(--bs-accordion-border-radius);
 }
@@ -4888,21 +4890,21 @@ textarea.form-control-lg {
   padding: var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x);
 }
 
-.accordion-flush .accordion-collapse {
-  border-width: 0;
-}
-.accordion-flush .accordion-item {
+.accordion-flush > .accordion-item {
   border-right: 0;
   border-left: 0;
   border-radius: 0;
 }
-.accordion-flush .accordion-item:first-child {
+.accordion-flush > .accordion-item:first-child {
   border-top: 0;
 }
-.accordion-flush .accordion-item:last-child {
+.accordion-flush > .accordion-item:last-child {
   border-bottom: 0;
 }
-.accordion-flush .accordion-item .accordion-button, .accordion-flush .accordion-item .accordion-button.collapsed {
+.accordion-flush > .accordion-item > .accordion-header .accordion-button, .accordion-flush > .accordion-item > .accordion-header .accordion-button.collapsed {
+  border-radius: 0;
+}
+.accordion-flush > .accordion-item > .accordion-collapse {
   border-radius: 0;
 }
 
@@ -5784,7 +5786,6 @@ textarea.form-control-lg {
   display: flex;
   flex-shrink: 0;
   align-items: center;
-  justify-content: space-between;
   padding: var(--bs-modal-header-padding);
   border-bottom: var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);
   border-top-left-radius: var(--bs-modal-inner-border-radius);
@@ -6349,20 +6350,12 @@ textarea.form-control-lg {
   background-size: 100% 100%;
 }
 
-/* rtl:options: {
-  "autoRename": true,
-  "stringMap":[ {
-    "name"    : "prev-next",
-    "search"  : "prev",
-    "replace" : "next"
-  } ]
-} */
 .carousel-control-prev-icon {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")*/;
 }
 
 .carousel-control-next-icon {
-  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");
+  background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e") /*rtl:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")*/;
 }
 
 .carousel-indicators {
@@ -6545,8 +6538,6 @@ textarea.form-control-lg {
     border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(-100%);
   }
-}
-@media (max-width: 575.98px) {
   .offcanvas-sm.offcanvas-end {
     top: 0;
     right: 0;
@@ -6554,8 +6545,6 @@ textarea.form-control-lg {
     border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(100%);
   }
-}
-@media (max-width: 575.98px) {
   .offcanvas-sm.offcanvas-top {
     top: 0;
     right: 0;
@@ -6565,8 +6554,6 @@ textarea.form-control-lg {
     border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(-100%);
   }
-}
-@media (max-width: 575.98px) {
   .offcanvas-sm.offcanvas-bottom {
     right: 0;
     left: 0;
@@ -6575,13 +6562,9 @@ textarea.form-control-lg {
     border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(100%);
   }
-}
-@media (max-width: 575.98px) {
   .offcanvas-sm.showing, .offcanvas-sm.show:not(.hiding) {
     transform: none;
   }
-}
-@media (max-width: 575.98px) {
   .offcanvas-sm.showing, .offcanvas-sm.hiding, .offcanvas-sm.show {
     visibility: visible;
   }
@@ -6633,8 +6616,6 @@ textarea.form-control-lg {
     border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(-100%);
   }
-}
-@media (max-width: 767.98px) {
   .offcanvas-md.offcanvas-end {
     top: 0;
     right: 0;
@@ -6642,8 +6623,6 @@ textarea.form-control-lg {
     border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(100%);
   }
-}
-@media (max-width: 767.98px) {
   .offcanvas-md.offcanvas-top {
     top: 0;
     right: 0;
@@ -6653,8 +6632,6 @@ textarea.form-control-lg {
     border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(-100%);
   }
-}
-@media (max-width: 767.98px) {
   .offcanvas-md.offcanvas-bottom {
     right: 0;
     left: 0;
@@ -6663,13 +6640,9 @@ textarea.form-control-lg {
     border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(100%);
   }
-}
-@media (max-width: 767.98px) {
   .offcanvas-md.showing, .offcanvas-md.show:not(.hiding) {
     transform: none;
   }
-}
-@media (max-width: 767.98px) {
   .offcanvas-md.showing, .offcanvas-md.hiding, .offcanvas-md.show {
     visibility: visible;
   }
@@ -6721,8 +6694,6 @@ textarea.form-control-lg {
     border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(-100%);
   }
-}
-@media (max-width: 991.98px) {
   .offcanvas-lg.offcanvas-end {
     top: 0;
     right: 0;
@@ -6730,8 +6701,6 @@ textarea.form-control-lg {
     border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(100%);
   }
-}
-@media (max-width: 991.98px) {
   .offcanvas-lg.offcanvas-top {
     top: 0;
     right: 0;
@@ -6741,8 +6710,6 @@ textarea.form-control-lg {
     border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(-100%);
   }
-}
-@media (max-width: 991.98px) {
   .offcanvas-lg.offcanvas-bottom {
     right: 0;
     left: 0;
@@ -6751,13 +6718,9 @@ textarea.form-control-lg {
     border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(100%);
   }
-}
-@media (max-width: 991.98px) {
   .offcanvas-lg.showing, .offcanvas-lg.show:not(.hiding) {
     transform: none;
   }
-}
-@media (max-width: 991.98px) {
   .offcanvas-lg.showing, .offcanvas-lg.hiding, .offcanvas-lg.show {
     visibility: visible;
   }
@@ -6809,8 +6772,6 @@ textarea.form-control-lg {
     border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(-100%);
   }
-}
-@media (max-width: 1199.98px) {
   .offcanvas-xl.offcanvas-end {
     top: 0;
     right: 0;
@@ -6818,8 +6779,6 @@ textarea.form-control-lg {
     border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(100%);
   }
-}
-@media (max-width: 1199.98px) {
   .offcanvas-xl.offcanvas-top {
     top: 0;
     right: 0;
@@ -6829,8 +6788,6 @@ textarea.form-control-lg {
     border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(-100%);
   }
-}
-@media (max-width: 1199.98px) {
   .offcanvas-xl.offcanvas-bottom {
     right: 0;
     left: 0;
@@ -6839,13 +6796,9 @@ textarea.form-control-lg {
     border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(100%);
   }
-}
-@media (max-width: 1199.98px) {
   .offcanvas-xl.showing, .offcanvas-xl.show:not(.hiding) {
     transform: none;
   }
-}
-@media (max-width: 1199.98px) {
   .offcanvas-xl.showing, .offcanvas-xl.hiding, .offcanvas-xl.show {
     visibility: visible;
   }
@@ -6897,8 +6850,6 @@ textarea.form-control-lg {
     border-right: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(-100%);
   }
-}
-@media (max-width: 1399.98px) {
   .offcanvas-xxl.offcanvas-end {
     top: 0;
     right: 0;
@@ -6906,8 +6857,6 @@ textarea.form-control-lg {
     border-left: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateX(100%);
   }
-}
-@media (max-width: 1399.98px) {
   .offcanvas-xxl.offcanvas-top {
     top: 0;
     right: 0;
@@ -6917,8 +6866,6 @@ textarea.form-control-lg {
     border-bottom: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(-100%);
   }
-}
-@media (max-width: 1399.98px) {
   .offcanvas-xxl.offcanvas-bottom {
     right: 0;
     left: 0;
@@ -6927,13 +6874,9 @@ textarea.form-control-lg {
     border-top: var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);
     transform: translateY(100%);
   }
-}
-@media (max-width: 1399.98px) {
   .offcanvas-xxl.showing, .offcanvas-xxl.show:not(.hiding) {
     transform: none;
   }
-}
-@media (max-width: 1399.98px) {
   .offcanvas-xxl.showing, .offcanvas-xxl.hiding, .offcanvas-xxl.show {
     visibility: visible;
   }
@@ -7032,14 +6975,11 @@ textarea.form-control-lg {
 .offcanvas-header {
   display: flex;
   align-items: center;
-  justify-content: space-between;
   padding: var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);
 }
 .offcanvas-header .btn-close {
   padding: calc(var(--bs-offcanvas-padding-y) * 0.5) calc(var(--bs-offcanvas-padding-x) * 0.5);
-  margin-top: calc(-0.5 * var(--bs-offcanvas-padding-y));
-  margin-right: calc(-0.5 * var(--bs-offcanvas-padding-x));
-  margin-bottom: calc(-0.5 * var(--bs-offcanvas-padding-y));
+  margin: calc(-0.5 * var(--bs-offcanvas-padding-y)) calc(-0.5 * var(--bs-offcanvas-padding-x)) calc(-0.5 * var(--bs-offcanvas-padding-y)) auto;
 }
 
 .offcanvas-title {
diff --git a/priv/static/_assets/app.js b/priv/static/_assets/app.js
index 7b90c5a..edca510 100644
--- a/priv/static/_assets/app.js
+++ b/priv/static/_assets/app.js
@@ -112,7 +112,7 @@
           }
           return typeof obj === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj;
         }
-        var version = "3.6.0", jQuery = function(selector, context) {
+        var version = "3.7.1", rhtmlSuffix = /HTML$/i, jQuery = function(selector, context) {
           return new jQuery.fn.init(selector, context);
         };
         jQuery.fn = jQuery.prototype = {
@@ -272,6 +272,25 @@
             }
             return obj;
           },
+          // Retrieve the text value of an array of DOM nodes
+          text: function(elem) {
+            var node, ret = "", i = 0, nodeType = elem.nodeType;
+            if (!nodeType) {
+              while (node = elem[i++]) {
+                ret += jQuery.text(node);
+              }
+            }
+            if (nodeType === 1 || nodeType === 11) {
+              return elem.textContent;
+            }
+            if (nodeType === 9) {
+              return elem.documentElement.textContent;
+            }
+            if (nodeType === 3 || nodeType === 4) {
+              return elem.nodeValue;
+            }
+            return ret;
+          },
           // results is for internal usage only
           makeArray: function(arr2, results) {
             var ret = results || [];
@@ -290,6 +309,10 @@
           inArray: function(elem, arr2, i) {
             return arr2 == null ? -1 : indexOf.call(arr2, elem, i);
           },
+          isXMLDoc: function(elem) {
+            var namespace = elem && elem.namespaceURI, docElem = elem && (elem.ownerDocument || elem).documentElement;
+            return !rhtmlSuffix.test(namespace || docElem && docElem.nodeName || "HTML");
+          },
           // Support: Android <=4.0 only, PhantomJS 1 only
           // push.apply(_, arraylike) throws on ancient WebKit
           merge: function(first, second) {
@@ -353,1322 +376,1182 @@
           }
           return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
         }
-        var Sizzle = (
-          /*!
-           * Sizzle CSS Selector Engine v2.3.6
-           * https://sizzlejs.com/
-           *
-           * Copyright JS Foundation and other contributors
-           * Released under the MIT license
-           * https://js.foundation/
-           *
-           * Date: 2021-02-16
-           */
-          function(window3) {
-            var i, support2, Expr, getText, isXML, tokenize, compile, select, outermostContext, sortInput, hasDuplicate, setDocument, document3, docElem, documentIsHTML, rbuggyQSA, rbuggyMatches, matches, contains2, expando = "sizzle" + 1 * /* @__PURE__ */ new Date(), preferredDoc = window3.document, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
-              if (a === b) {
-                hasDuplicate = true;
-              }
-              return 0;
-            }, hasOwn2 = {}.hasOwnProperty, arr2 = [], pop = arr2.pop, pushNative = arr2.push, push2 = arr2.push, slice2 = arr2.slice, indexOf2 = function(list, elem) {
-              var i2 = 0, len = list.length;
-              for (; i2 < len; i2++) {
-                if (list[i2] === elem) {
-                  return i2;
-                }
-              }
-              return -1;
-            }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", whitespace = "[\\x20\\t\\r\\n\\f]", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
-            "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5]
-            // or strings [capture 3 or capture 4]"
-            `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rtrim2 = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
-              "ID": new RegExp("^#(" + identifier + ")"),
-              "CLASS": new RegExp("^\\.(" + identifier + ")"),
-              "TAG": new RegExp("^(" + identifier + "|[*])"),
-              "ATTR": new RegExp("^" + attributes),
-              "PSEUDO": new RegExp("^" + pseudos),
-              "CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
-              "bool": new RegExp("^(?:" + booleans + ")$", "i"),
-              // For use in libraries implementing .is()
-              // We use this for POS matching in `select`
-              "needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
-            }, rhtml2 = /HTML$/i, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rnative = /^[^{]+\{\s*\[native \w/, rquickExpr2 = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) {
-              var high = "0x" + escape.slice(1) - 65536;
-              return nonHex ? (
-                // Strip the backslash prefix from a non-hex escape sequence
-                nonHex
-              ) : (
-                // Replace a hexadecimal escape sequence with the encoded Unicode code point
-                // Support: IE <=11+
-                // For values outside the Basic Multilingual Plane (BMP), manually construct a
-                // surrogate pair
-                high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320)
-              );
-            }, rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, fcssescape = function(ch, asCodePoint) {
-              if (asCodePoint) {
-                if (ch === "\0") {
-                  return "\uFFFD";
-                }
-                return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
-              }
-              return "\\" + ch;
-            }, unloadHandler = function() {
-              setDocument();
-            }, inDisabledFieldset = addCombinator(
-              function(elem) {
-                return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset";
-              },
-              { dir: "parentNode", next: "legend" }
-            );
+        function nodeName(elem, name) {
+          return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+        }
+        var pop = arr.pop;
+        var sort = arr.sort;
+        var splice = arr.splice;
+        var whitespace = "[\\x20\\t\\r\\n\\f]";
+        var rtrimCSS = new RegExp(
+          "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$",
+          "g"
+        );
+        jQuery.contains = function(a, b) {
+          var bup = b && b.parentNode;
+          return a === bup || !!(bup && bup.nodeType === 1 && // Support: IE 9 - 11+
+          // IE doesn't have `contains` on SVG.
+          (a.contains ? a.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
+        };
+        var rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;
+        function fcssescape(ch, asCodePoint) {
+          if (asCodePoint) {
+            if (ch === "\0") {
+              return "\uFFFD";
+            }
+            return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
+          }
+          return "\\" + ch;
+        }
+        jQuery.escapeSelector = function(sel) {
+          return (sel + "").replace(rcssescape, fcssescape);
+        };
+        var preferredDoc = document2, pushNative = push;
+        (function() {
+          var i, Expr, outermostContext, sortInput, hasDuplicate, push2 = pushNative, document3, documentElement2, documentIsHTML, rbuggyQSA, matches, expando = jQuery.expando, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), nonnativeSelectorCache = createCache(), sortOrder = function(a, b) {
+            if (a === b) {
+              hasDuplicate = true;
+            }
+            return 0;
+          }, booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2)
+          "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+          `*(?:'((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)"|(` + identifier + "))|)" + whitespace + "*\\]", pseudos = ":(" + identifier + `)(?:\\((('((?:\\\\.|[^\\\\'])*)'|"((?:\\\\.|[^\\\\"])*)")|((?:\\\\.|[^\\\\()[\\]]|` + attributes + ")*)|.*)\\)|)", rwhitespace = new RegExp(whitespace + "+", "g"), rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"), rleadingCombinator = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"), rdescend = new RegExp(whitespace + "|>"), rpseudo = new RegExp(pseudos), ridentifier = new RegExp("^" + identifier + "$"), matchExpr = {
+            ID: new RegExp("^#(" + identifier + ")"),
+            CLASS: new RegExp("^\\.(" + identifier + ")"),
+            TAG: new RegExp("^(" + identifier + "|[*])"),
+            ATTR: new RegExp("^" + attributes),
+            PSEUDO: new RegExp("^" + pseudos),
+            CHILD: new RegExp(
+              "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)",
+              "i"
+            ),
+            bool: new RegExp("^(?:" + booleans + ")$", "i"),
+            // For use in libraries implementing .is()
+            // We use this for POS matching in `select`
+            needsContext: new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
+          }, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rquickExpr2 = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rsibling = /[+~]/, runescape = new RegExp("\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g"), funescape = function(escape, nonHex) {
+            var high = "0x" + escape.slice(1) - 65536;
+            if (nonHex) {
+              return nonHex;
+            }
+            return high < 0 ? String.fromCharCode(high + 65536) : String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);
+          }, unloadHandler = function() {
+            setDocument();
+          }, inDisabledFieldset = addCombinator(
+            function(elem) {
+              return elem.disabled === true && nodeName(elem, "fieldset");
+            },
+            { dir: "parentNode", next: "legend" }
+          );
+          function safeActiveElement() {
             try {
-              push2.apply(
-                arr2 = slice2.call(preferredDoc.childNodes),
-                preferredDoc.childNodes
-              );
-              arr2[preferredDoc.childNodes.length].nodeType;
-            } catch (e) {
-              push2 = {
-                apply: arr2.length ? (
-                  // Leverage slice if possible
-                  function(target, els) {
-                    pushNative.apply(target, slice2.call(els));
-                  }
-                ) : (
-                  // Support: IE<9
-                  // Otherwise append directly
-                  function(target, els) {
-                    var j = target.length, i2 = 0;
-                    while (target[j++] = els[i2++]) {
-                    }
-                    target.length = j - 1;
-                  }
-                )
-              };
+              return document3.activeElement;
+            } catch (err) {
             }
-            function Sizzle2(selector, context, results, seed) {
-              var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
-              results = results || [];
-              if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
-                return results;
-              }
-              if (!seed) {
-                setDocument(context);
-                context = context || document3;
-                if (documentIsHTML) {
-                  if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) {
-                    if (m = match[1]) {
-                      if (nodeType === 9) {
-                        if (elem = context.getElementById(m)) {
-                          if (elem.id === m) {
-                            results.push(elem);
-                            return results;
-                          }
-                        } else {
+          }
+          try {
+            push2.apply(
+              arr = slice.call(preferredDoc.childNodes),
+              preferredDoc.childNodes
+            );
+            arr[preferredDoc.childNodes.length].nodeType;
+          } catch (e) {
+            push2 = {
+              apply: function(target, els) {
+                pushNative.apply(target, slice.call(els));
+              },
+              call: function(target) {
+                pushNative.apply(target, slice.call(arguments, 1));
+              }
+            };
+          }
+          function find(selector, context, results, seed) {
+            var m, i2, elem, nid, match, groups, newSelector, newContext = context && context.ownerDocument, nodeType = context ? context.nodeType : 9;
+            results = results || [];
+            if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
+              return results;
+            }
+            if (!seed) {
+              setDocument(context);
+              context = context || document3;
+              if (documentIsHTML) {
+                if (nodeType !== 11 && (match = rquickExpr2.exec(selector))) {
+                  if (m = match[1]) {
+                    if (nodeType === 9) {
+                      if (elem = context.getElementById(m)) {
+                        if (elem.id === m) {
+                          push2.call(results, elem);
                           return results;
                         }
                       } else {
-                        if (newContext && (elem = newContext.getElementById(m)) && contains2(context, elem) && elem.id === m) {
-                          results.push(elem);
-                          return results;
-                        }
+                        return results;
+                      }
+                    } else {
+                      if (newContext && (elem = newContext.getElementById(m)) && find.contains(context, elem) && elem.id === m) {
+                        push2.call(results, elem);
+                        return results;
                       }
-                    } else if (match[2]) {
-                      push2.apply(results, context.getElementsByTagName(selector));
-                      return results;
-                    } else if ((m = match[3]) && support2.getElementsByClassName && context.getElementsByClassName) {
-                      push2.apply(results, context.getElementsByClassName(m));
-                      return results;
                     }
+                  } else if (match[2]) {
+                    push2.apply(results, context.getElementsByTagName(selector));
+                    return results;
+                  } else if ((m = match[3]) && context.getElementsByClassName) {
+                    push2.apply(results, context.getElementsByClassName(m));
+                    return results;
                   }
-                  if (support2.qsa && !nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && // Support: IE 8 only
-                  // Exclude object elements
-                  (nodeType !== 1 || context.nodeName.toLowerCase() !== "object")) {
-                    newSelector = selector;
-                    newContext = context;
-                    if (nodeType === 1 && (rdescend.test(selector) || rcombinators.test(selector))) {
-                      newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
-                      if (newContext !== context || !support2.scope) {
-                        if (nid = context.getAttribute("id")) {
-                          nid = nid.replace(rcssescape, fcssescape);
-                        } else {
-                          context.setAttribute("id", nid = expando);
-                        }
-                      }
-                      groups = tokenize(selector);
-                      i2 = groups.length;
-                      while (i2--) {
-                        groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]);
+                }
+                if (!nonnativeSelectorCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
+                  newSelector = selector;
+                  newContext = context;
+                  if (nodeType === 1 && (rdescend.test(selector) || rleadingCombinator.test(selector))) {
+                    newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
+                    if (newContext != context || !support.scope) {
+                      if (nid = context.getAttribute("id")) {
+                        nid = jQuery.escapeSelector(nid);
+                      } else {
+                        context.setAttribute("id", nid = expando);
                       }
-                      newSelector = groups.join(",");
                     }
-                    try {
-                      push2.apply(
-                        results,
-                        newContext.querySelectorAll(newSelector)
-                      );
-                      return results;
-                    } catch (qsaError) {
-                      nonnativeSelectorCache(selector, true);
-                    } finally {
-                      if (nid === expando) {
-                        context.removeAttribute("id");
-                      }
+                    groups = tokenize(selector);
+                    i2 = groups.length;
+                    while (i2--) {
+                      groups[i2] = (nid ? "#" + nid : ":scope") + " " + toSelector(groups[i2]);
+                    }
+                    newSelector = groups.join(",");
+                  }
+                  try {
+                    push2.apply(
+                      results,
+                      newContext.querySelectorAll(newSelector)
+                    );
+                    return results;
+                  } catch (qsaError) {
+                    nonnativeSelectorCache(selector, true);
+                  } finally {
+                    if (nid === expando) {
+                      context.removeAttribute("id");
                     }
                   }
                 }
               }
-              return select(selector.replace(rtrim2, "$1"), context, results, seed);
-            }
-            function createCache() {
-              var keys = [];
-              function cache(key, value) {
-                if (keys.push(key + " ") > Expr.cacheLength) {
-                  delete cache[keys.shift()];
-                }
-                return cache[key + " "] = value;
-              }
-              return cache;
-            }
-            function markFunction(fn2) {
-              fn2[expando] = true;
-              return fn2;
             }
-            function assert(fn2) {
-              var el = document3.createElement("fieldset");
-              try {
-                return !!fn2(el);
-              } catch (e) {
-                return false;
-              } finally {
-                if (el.parentNode) {
-                  el.parentNode.removeChild(el);
-                }
-                el = null;
+            return select(selector.replace(rtrimCSS, "$1"), context, results, seed);
+          }
+          function createCache() {
+            var keys = [];
+            function cache(key, value) {
+              if (keys.push(key + " ") > Expr.cacheLength) {
+                delete cache[keys.shift()];
               }
+              return cache[key + " "] = value;
             }
-            function addHandle(attrs, handler) {
-              var arr3 = attrs.split("|"), i2 = arr3.length;
-              while (i2--) {
-                Expr.attrHandle[arr3[i2]] = handler;
+            return cache;
+          }
+          function markFunction(fn2) {
+            fn2[expando] = true;
+            return fn2;
+          }
+          function assert(fn2) {
+            var el = document3.createElement("fieldset");
+            try {
+              return !!fn2(el);
+            } catch (e) {
+              return false;
+            } finally {
+              if (el.parentNode) {
+                el.parentNode.removeChild(el);
               }
+              el = null;
             }
-            function siblingCheck(a, b) {
-              var cur = b && a, diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;
-              if (diff) {
-                return diff;
-              }
-              if (cur) {
-                while (cur = cur.nextSibling) {
-                  if (cur === b) {
-                    return -1;
+          }
+          function createInputPseudo(type) {
+            return function(elem) {
+              return nodeName(elem, "input") && elem.type === type;
+            };
+          }
+          function createButtonPseudo(type) {
+            return function(elem) {
+              return (nodeName(elem, "input") || nodeName(elem, "button")) && elem.type === type;
+            };
+          }
+          function createDisabledPseudo(disabled) {
+            return function(elem) {
+              if ("form" in elem) {
+                if (elem.parentNode && elem.disabled === false) {
+                  if ("label" in elem) {
+                    if ("label" in elem.parentNode) {
+                      return elem.parentNode.disabled === disabled;
+                    } else {
+                      return elem.disabled === disabled;
+                    }
                   }
+                  return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
+                  elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
                 }
+                return elem.disabled === disabled;
+              } else if ("label" in elem) {
+                return elem.disabled === disabled;
               }
-              return a ? 1 : -1;
-            }
-            function createInputPseudo(type) {
-              return function(elem) {
-                var name = elem.nodeName.toLowerCase();
-                return name === "input" && elem.type === type;
-              };
-            }
-            function createButtonPseudo(type) {
-              return function(elem) {
-                var name = elem.nodeName.toLowerCase();
-                return (name === "input" || name === "button") && elem.type === type;
-              };
-            }
-            function createDisabledPseudo(disabled) {
-              return function(elem) {
-                if ("form" in elem) {
-                  if (elem.parentNode && elem.disabled === false) {
-                    if ("label" in elem) {
-                      if ("label" in elem.parentNode) {
-                        return elem.parentNode.disabled === disabled;
-                      } else {
-                        return elem.disabled === disabled;
-                      }
-                    }
-                    return elem.isDisabled === disabled || // Where there is no isDisabled, check manually
-                    /* jshint -W018 */
-                    elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;
+              return false;
+            };
+          }
+          function createPositionalPseudo(fn2) {
+            return markFunction(function(argument) {
+              argument = +argument;
+              return markFunction(function(seed, matches2) {
+                var j, matchIndexes = fn2([], seed.length, argument), i2 = matchIndexes.length;
+                while (i2--) {
+                  if (seed[j = matchIndexes[i2]]) {
+                    seed[j] = !(matches2[j] = seed[j]);
                   }
-                  return elem.disabled === disabled;
-                } else if ("label" in elem) {
-                  return elem.disabled === disabled;
                 }
-                return false;
-              };
-            }
-            function createPositionalPseudo(fn2) {
-              return markFunction(function(argument) {
-                argument = +argument;
-                return markFunction(function(seed, matches2) {
-                  var j, matchIndexes = fn2([], seed.length, argument), i2 = matchIndexes.length;
-                  while (i2--) {
-                    if (seed[j = matchIndexes[i2]]) {
-                      seed[j] = !(matches2[j] = seed[j]);
-                    }
-                  }
-                });
               });
+            });
+          }
+          function testContext(context) {
+            return context && typeof context.getElementsByTagName !== "undefined" && context;
+          }
+          function setDocument(node) {
+            var subWindow, doc2 = node ? node.ownerDocument || node : preferredDoc;
+            if (doc2 == document3 || doc2.nodeType !== 9 || !doc2.documentElement) {
+              return document3;
             }
-            function testContext(context) {
-              return context && typeof context.getElementsByTagName !== "undefined" && context;
-            }
-            support2 = Sizzle2.support = {};
-            isXML = Sizzle2.isXML = function(elem) {
-              var namespace = elem && elem.namespaceURI, docElem2 = elem && (elem.ownerDocument || elem).documentElement;
-              return !rhtml2.test(namespace || docElem2 && docElem2.nodeName || "HTML");
-            };
-            setDocument = Sizzle2.setDocument = function(node) {
-              var hasCompare, subWindow, doc2 = node ? node.ownerDocument || node : preferredDoc;
-              if (doc2 == document3 || doc2.nodeType !== 9 || !doc2.documentElement) {
-                return document3;
-              }
-              document3 = doc2;
-              docElem = document3.documentElement;
-              documentIsHTML = !isXML(document3);
-              if (preferredDoc != document3 && (subWindow = document3.defaultView) && subWindow.top !== subWindow) {
-                if (subWindow.addEventListener) {
-                  subWindow.addEventListener("unload", unloadHandler, false);
-                } else if (subWindow.attachEvent) {
-                  subWindow.attachEvent("onunload", unloadHandler);
-                }
-              }
-              support2.scope = assert(function(el) {
-                docElem.appendChild(el).appendChild(document3.createElement("div"));
-                return typeof el.querySelectorAll !== "undefined" && !el.querySelectorAll(":scope fieldset div").length;
-              });
-              support2.attributes = assert(function(el) {
-                el.className = "i";
-                return !el.getAttribute("className");
-              });
-              support2.getElementsByTagName = assert(function(el) {
-                el.appendChild(document3.createComment(""));
-                return !el.getElementsByTagName("*").length;
-              });
-              support2.getElementsByClassName = rnative.test(document3.getElementsByClassName);
-              support2.getById = assert(function(el) {
-                docElem.appendChild(el).id = expando;
-                return !document3.getElementsByName || !document3.getElementsByName(expando).length;
-              });
-              if (support2.getById) {
-                Expr.filter["ID"] = function(id) {
-                  var attrId = id.replace(runescape, funescape);
-                  return function(elem) {
-                    return elem.getAttribute("id") === attrId;
-                  };
-                };
-                Expr.find["ID"] = function(id, context) {
-                  if (typeof context.getElementById !== "undefined" && documentIsHTML) {
-                    var elem = context.getElementById(id);
-                    return elem ? [elem] : [];
-                  }
+            document3 = doc2;
+            documentElement2 = document3.documentElement;
+            documentIsHTML = !jQuery.isXMLDoc(document3);
+            matches = documentElement2.matches || documentElement2.webkitMatchesSelector || documentElement2.msMatchesSelector;
+            if (documentElement2.msMatchesSelector && // Support: IE 11+, Edge 17 - 18+
+            // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
+            // two documents; shallow comparisons work.
+            // eslint-disable-next-line eqeqeq
+            preferredDoc != document3 && (subWindow = document3.defaultView) && subWindow.top !== subWindow) {
+              subWindow.addEventListener("unload", unloadHandler);
+            }
+            support.getById = assert(function(el) {
+              documentElement2.appendChild(el).id = jQuery.expando;
+              return !document3.getElementsByName || !document3.getElementsByName(jQuery.expando).length;
+            });
+            support.disconnectedMatch = assert(function(el) {
+              return matches.call(el, "*");
+            });
+            support.scope = assert(function() {
+              return document3.querySelectorAll(":scope");
+            });
+            support.cssHas = assert(function() {
+              try {
+                document3.querySelector(":has(*,:jqfake)");
+                return false;
+              } catch (e) {
+                return true;
+              }
+            });
+            if (support.getById) {
+              Expr.filter.ID = function(id) {
+                var attrId = id.replace(runescape, funescape);
+                return function(elem) {
+                  return elem.getAttribute("id") === attrId;
                 };
-              } else {
-                Expr.filter["ID"] = function(id) {
-                  var attrId = id.replace(runescape, funescape);
-                  return function(elem) {
-                    var node2 = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
-                    return node2 && node2.value === attrId;
-                  };
+              };
+              Expr.find.ID = function(id, context) {
+                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+                  var elem = context.getElementById(id);
+                  return elem ? [elem] : [];
+                }
+              };
+            } else {
+              Expr.filter.ID = function(id) {
+                var attrId = id.replace(runescape, funescape);
+                return function(elem) {
+                  var node2 = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
+                  return node2 && node2.value === attrId;
                 };
-                Expr.find["ID"] = function(id, context) {
-                  if (typeof context.getElementById !== "undefined" && documentIsHTML) {
-                    var node2, i2, elems, elem = context.getElementById(id);
-                    if (elem) {
+              };
+              Expr.find.ID = function(id, context) {
+                if (typeof context.getElementById !== "undefined" && documentIsHTML) {
+                  var node2, i2, elems, elem = context.getElementById(id);
+                  if (elem) {
+                    node2 = elem.getAttributeNode("id");
+                    if (node2 && node2.value === id) {
+                      return [elem];
+                    }
+                    elems = context.getElementsByName(id);
+                    i2 = 0;
+                    while (elem = elems[i2++]) {
                       node2 = elem.getAttributeNode("id");
                       if (node2 && node2.value === id) {
                         return [elem];
                       }
-                      elems = context.getElementsByName(id);
-                      i2 = 0;
-                      while (elem = elems[i2++]) {
-                        node2 = elem.getAttributeNode("id");
-                        if (node2 && node2.value === id) {
-                          return [elem];
-                        }
-                      }
-                    }
-                    return [];
-                  }
-                };
-              }
-              Expr.find["TAG"] = support2.getElementsByTagName ? function(tag, context) {
-                if (typeof context.getElementsByTagName !== "undefined") {
-                  return context.getElementsByTagName(tag);
-                } else if (support2.qsa) {
-                  return context.querySelectorAll(tag);
-                }
-              } : function(tag, context) {
-                var elem, tmp = [], i2 = 0, results = context.getElementsByTagName(tag);
-                if (tag === "*") {
-                  while (elem = results[i2++]) {
-                    if (elem.nodeType === 1) {
-                      tmp.push(elem);
                     }
                   }
-                  return tmp;
-                }
-                return results;
-              };
-              Expr.find["CLASS"] = support2.getElementsByClassName && function(className, context) {
-                if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
-                  return context.getElementsByClassName(className);
+                  return [];
                 }
               };
-              rbuggyMatches = [];
-              rbuggyQSA = [];
-              if (support2.qsa = rnative.test(document3.querySelectorAll)) {
-                assert(function(el) {
-                  var input;
-                  docElem.appendChild(el).innerHTML = "<a id='" + expando + "'></a><select id='" + expando + "-\r\\' msallowcapture=''><option selected=''></option></select>";
-                  if (el.querySelectorAll("[msallowcapture^='']").length) {
-                    rbuggyQSA.push("[*^$]=" + whitespace + `*(?:''|"")`);
-                  }
-                  if (!el.querySelectorAll("[selected]").length) {
-                    rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
-                  }
-                  if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
-                    rbuggyQSA.push("~=");
-                  }
-                  input = document3.createElement("input");
-                  input.setAttribute("name", "");
-                  el.appendChild(input);
-                  if (!el.querySelectorAll("[name='']").length) {
-                    rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`);
-                  }
-                  if (!el.querySelectorAll(":checked").length) {
-                    rbuggyQSA.push(":checked");
-                  }
-                  if (!el.querySelectorAll("a#" + expando + "+*").length) {
-                    rbuggyQSA.push(".#.+[+~]");
-                  }
-                  el.querySelectorAll("\\\f");
-                  rbuggyQSA.push("[\\r\\n\\f]");
-                });
-                assert(function(el) {
-                  el.innerHTML = "<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";
-                  var input = document3.createElement("input");
-                  input.setAttribute("type", "hidden");
-                  el.appendChild(input).setAttribute("name", "D");
-                  if (el.querySelectorAll("[name=d]").length) {
-                    rbuggyQSA.push("name" + whitespace + "*[*^$|!~]?=");
-                  }
-                  if (el.querySelectorAll(":enabled").length !== 2) {
-                    rbuggyQSA.push(":enabled", ":disabled");
-                  }
-                  docElem.appendChild(el).disabled = true;
-                  if (el.querySelectorAll(":disabled").length !== 2) {
-                    rbuggyQSA.push(":enabled", ":disabled");
-                  }
-                  el.querySelectorAll("*,:x");
-                  rbuggyQSA.push(",.*:");
-                });
-              }
-              if (support2.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {
-                assert(function(el) {
-                  support2.disconnectedMatch = matches.call(el, "*");
-                  matches.call(el, "[s!='']:x");
-                  rbuggyMatches.push("!=", pseudos);
-                });
+            }
+            Expr.find.TAG = function(tag, context) {
+              if (typeof context.getElementsByTagName !== "undefined") {
+                return context.getElementsByTagName(tag);
+              } else {
+                return context.querySelectorAll(tag);
               }
-              rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
-              rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join("|"));
-              hasCompare = rnative.test(docElem.compareDocumentPosition);
-              contains2 = hasCompare || rnative.test(docElem.contains) ? function(a, b) {
-                var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode;
-                return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));
-              } : function(a, b) {
-                if (b) {
-                  while (b = b.parentNode) {
-                    if (b === a) {
-                      return true;
-                    }
-                  }
-                }
-                return false;
-              };
-              sortOrder = hasCompare ? function(a, b) {
-                if (a === b) {
-                  hasDuplicate = true;
-                  return 0;
-                }
-                var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
-                if (compare) {
-                  return compare;
-                }
-                compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (
-                  // Otherwise we know they are disconnected
-                  1
-                );
-                if (compare & 1 || !support2.sortDetached && b.compareDocumentPosition(a) === compare) {
-                  if (a == document3 || a.ownerDocument == preferredDoc && contains2(preferredDoc, a)) {
-                    return -1;
-                  }
-                  if (b == document3 || b.ownerDocument == preferredDoc && contains2(preferredDoc, b)) {
-                    return 1;
-                  }
-                  return sortInput ? indexOf2(sortInput, a) - indexOf2(sortInput, b) : 0;
-                }
-                return compare & 4 ? -1 : 1;
-              } : function(a, b) {
-                if (a === b) {
-                  hasDuplicate = true;
-                  return 0;
-                }
-                var cur, i2 = 0, aup = a.parentNode, bup = b.parentNode, ap = [a], bp = [b];
-                if (!aup || !bup) {
-                  return a == document3 ? -1 : b == document3 ? 1 : (
-                    /* eslint-enable eqeqeq */
-                    aup ? -1 : bup ? 1 : sortInput ? indexOf2(sortInput, a) - indexOf2(sortInput, b) : 0
-                  );
-                } else if (aup === bup) {
-                  return siblingCheck(a, b);
-                }
-                cur = a;
-                while (cur = cur.parentNode) {
-                  ap.unshift(cur);
-                }
-                cur = b;
-                while (cur = cur.parentNode) {
-                  bp.unshift(cur);
-                }
-                while (ap[i2] === bp[i2]) {
-                  i2++;
-                }
-                return i2 ? (
-                  // Do a sibling check if the nodes have a common ancestor
-                  siblingCheck(ap[i2], bp[i2])
-                ) : (
-                  // Otherwise nodes in our document sort first
-                  // Support: IE 11+, Edge 17 - 18+
-                  // IE/Edge sometimes throw a "Permission denied" error when strict-comparing
-                  // two documents; shallow comparisons work.
-                  /* eslint-disable eqeqeq */
-                  ap[i2] == preferredDoc ? -1 : bp[i2] == preferredDoc ? 1 : (
-                    /* eslint-enable eqeqeq */
-                    0
-                  )
-                );
-              };
-              return document3;
             };
-            Sizzle2.matches = function(expr, elements) {
-              return Sizzle2(expr, null, null, elements);
-            };
-            Sizzle2.matchesSelector = function(elem, expr) {
-              setDocument(elem);
-              if (support2.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
-                try {
-                  var ret = matches.call(elem, expr);
-                  if (ret || support2.disconnectedMatch || // As well, disconnected nodes are said to be in a document
-                  // fragment in IE 9
-                  elem.document && elem.document.nodeType !== 11) {
-                    return ret;
-                  }
-                } catch (e) {
-                  nonnativeSelectorCache(expr, true);
-                }
+            Expr.find.CLASS = function(className, context) {
+              if (typeof context.getElementsByClassName !== "undefined" && documentIsHTML) {
+                return context.getElementsByClassName(className);
               }
-              return Sizzle2(expr, document3, null, [elem]).length > 0;
             };
-            Sizzle2.contains = function(context, elem) {
-              if ((context.ownerDocument || context) != document3) {
-                setDocument(context);
+            rbuggyQSA = [];
+            assert(function(el) {
+              var input;
+              documentElement2.appendChild(el).innerHTML = "<a id='" + expando + "' href='' disabled='disabled'></a><select id='" + expando + "-\r\\' disabled='disabled'><option selected=''></option></select>";
+              if (!el.querySelectorAll("[selected]").length) {
+                rbuggyQSA.push("\\[" + whitespace + "*(?:value|" + booleans + ")");
+              }
+              if (!el.querySelectorAll("[id~=" + expando + "-]").length) {
+                rbuggyQSA.push("~=");
+              }
+              if (!el.querySelectorAll("a#" + expando + "+*").length) {
+                rbuggyQSA.push(".#.+[+~]");
+              }
+              if (!el.querySelectorAll(":checked").length) {
+                rbuggyQSA.push(":checked");
+              }
+              input = document3.createElement("input");
+              input.setAttribute("type", "hidden");
+              el.appendChild(input).setAttribute("name", "D");
+              documentElement2.appendChild(el).disabled = true;
+              if (el.querySelectorAll(":disabled").length !== 2) {
+                rbuggyQSA.push(":enabled", ":disabled");
+              }
+              input = document3.createElement("input");
+              input.setAttribute("name", "");
+              el.appendChild(input);
+              if (!el.querySelectorAll("[name='']").length) {
+                rbuggyQSA.push("\\[" + whitespace + "*name" + whitespace + "*=" + whitespace + `*(?:''|"")`);
               }
-              return contains2(context, elem);
-            };
-            Sizzle2.attr = function(elem, name) {
-              if ((elem.ownerDocument || elem) != document3) {
-                setDocument(elem);
+            });
+            if (!support.cssHas) {
+              rbuggyQSA.push(":has");
+            }
+            rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join("|"));
+            sortOrder = function(a, b) {
+              if (a === b) {
+                hasDuplicate = true;
+                return 0;
               }
-              var fn2 = Expr.attrHandle[name.toLowerCase()], val = fn2 && hasOwn2.call(Expr.attrHandle, name.toLowerCase()) ? fn2(elem, name, !documentIsHTML) : void 0;
-              return val !== void 0 ? val : support2.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
-            };
-            Sizzle2.escape = function(sel) {
-              return (sel + "").replace(rcssescape, fcssescape);
-            };
-            Sizzle2.error = function(msg) {
-              throw new Error("Syntax error, unrecognized expression: " + msg);
-            };
-            Sizzle2.uniqueSort = function(results) {
-              var elem, duplicates = [], j = 0, i2 = 0;
-              hasDuplicate = !support2.detectDuplicates;
-              sortInput = !support2.sortStable && results.slice(0);
-              results.sort(sortOrder);
-              if (hasDuplicate) {
-                while (elem = results[i2++]) {
-                  if (elem === results[i2]) {
-                    j = duplicates.push(i2);
-                  }
+              var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+              if (compare) {
+                return compare;
+              }
+              compare = (a.ownerDocument || a) == (b.ownerDocument || b) ? a.compareDocumentPosition(b) : (
+                // Otherwise we know they are disconnected
+                1
+              );
+              if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {
+                if (a === document3 || a.ownerDocument == preferredDoc && find.contains(preferredDoc, a)) {
+                  return -1;
                 }
-                while (j--) {
-                  results.splice(duplicates[j], 1);
+                if (b === document3 || b.ownerDocument == preferredDoc && find.contains(preferredDoc, b)) {
+                  return 1;
                 }
+                return sortInput ? indexOf.call(sortInput, a) - indexOf.call(sortInput, b) : 0;
               }
-              sortInput = null;
-              return results;
+              return compare & 4 ? -1 : 1;
             };
-            getText = Sizzle2.getText = function(elem) {
-              var node, ret = "", i2 = 0, nodeType = elem.nodeType;
-              if (!nodeType) {
-                while (node = elem[i2++]) {
-                  ret += getText(node);
-                }
-              } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {
-                if (typeof elem.textContent === "string") {
-                  return elem.textContent;
-                } else {
-                  for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                    ret += getText(elem);
-                  }
+            return document3;
+          }
+          find.matches = function(expr, elements) {
+            return find(expr, null, null, elements);
+          };
+          find.matchesSelector = function(elem, expr) {
+            setDocument(elem);
+            if (documentIsHTML && !nonnativeSelectorCache[expr + " "] && (!rbuggyQSA || !rbuggyQSA.test(expr))) {
+              try {
+                var ret = matches.call(elem, expr);
+                if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document
+                // fragment in IE 9
+                elem.document && elem.document.nodeType !== 11) {
+                  return ret;
                 }
-              } else if (nodeType === 3 || nodeType === 4) {
-                return elem.nodeValue;
+              } catch (e) {
+                nonnativeSelectorCache(expr, true);
               }
-              return ret;
-            };
-            Expr = Sizzle2.selectors = {
-              // Can be adjusted by the user
-              cacheLength: 50,
-              createPseudo: markFunction,
-              match: matchExpr,
-              attrHandle: {},
-              find: {},
-              relative: {
-                ">": { dir: "parentNode", first: true },
-                " ": { dir: "parentNode" },
-                "+": { dir: "previousSibling", first: true },
-                "~": { dir: "previousSibling" }
+            }
+            return find(expr, document3, null, [elem]).length > 0;
+          };
+          find.contains = function(context, elem) {
+            if ((context.ownerDocument || context) != document3) {
+              setDocument(context);
+            }
+            return jQuery.contains(context, elem);
+          };
+          find.attr = function(elem, name) {
+            if ((elem.ownerDocument || elem) != document3) {
+              setDocument(elem);
+            }
+            var fn2 = Expr.attrHandle[name.toLowerCase()], val = fn2 && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn2(elem, name, !documentIsHTML) : void 0;
+            if (val !== void 0) {
+              return val;
+            }
+            return elem.getAttribute(name);
+          };
+          find.error = function(msg) {
+            throw new Error("Syntax error, unrecognized expression: " + msg);
+          };
+          jQuery.uniqueSort = function(results) {
+            var elem, duplicates = [], j = 0, i2 = 0;
+            hasDuplicate = !support.sortStable;
+            sortInput = !support.sortStable && slice.call(results, 0);
+            sort.call(results, sortOrder);
+            if (hasDuplicate) {
+              while (elem = results[i2++]) {
+                if (elem === results[i2]) {
+                  j = duplicates.push(i2);
+                }
+              }
+              while (j--) {
+                splice.call(results, duplicates[j], 1);
+              }
+            }
+            sortInput = null;
+            return results;
+          };
+          jQuery.fn.uniqueSort = function() {
+            return this.pushStack(jQuery.uniqueSort(slice.apply(this)));
+          };
+          Expr = jQuery.expr = {
+            // Can be adjusted by the user
+            cacheLength: 50,
+            createPseudo: markFunction,
+            match: matchExpr,
+            attrHandle: {},
+            find: {},
+            relative: {
+              ">": { dir: "parentNode", first: true },
+              " ": { dir: "parentNode" },
+              "+": { dir: "previousSibling", first: true },
+              "~": { dir: "previousSibling" }
+            },
+            preFilter: {
+              ATTR: function(match) {
+                match[1] = match[1].replace(runescape, funescape);
+                match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
+                if (match[2] === "~=") {
+                  match[3] = " " + match[3] + " ";
+                }
+                return match.slice(0, 4);
               },
-              preFilter: {
-                "ATTR": function(match) {
-                  match[1] = match[1].replace(runescape, funescape);
-                  match[3] = (match[3] || match[4] || match[5] || "").replace(runescape, funescape);
-                  if (match[2] === "~=") {
-                    match[3] = " " + match[3] + " ";
+              CHILD: function(match) {
+                match[1] = match[1].toLowerCase();
+                if (match[1].slice(0, 3) === "nth") {
+                  if (!match[3]) {
+                    find.error(match[0]);
                   }
-                  return match.slice(0, 4);
-                },
-                "CHILD": function(match) {
-                  match[1] = match[1].toLowerCase();
-                  if (match[1].slice(0, 3) === "nth") {
-                    if (!match[3]) {
-                      Sizzle2.error(match[0]);
-                    }
-                    match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
-                    match[5] = +(match[7] + match[8] || match[3] === "odd");
-                  } else if (match[3]) {
-                    Sizzle2.error(match[0]);
+                  match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === "even" || match[3] === "odd"));
+                  match[5] = +(match[7] + match[8] || match[3] === "odd");
+                } else if (match[3]) {
+                  find.error(match[0]);
+                }
+                return match;
+              },
+              PSEUDO: function(match) {
+                var excess, unquoted = !match[6] && match[2];
+                if (matchExpr.CHILD.test(match[0])) {
+                  return null;
+                }
+                if (match[3]) {
+                  match[2] = match[4] || match[5] || "";
+                } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)
+                (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis
+                (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
+                  match[0] = match[0].slice(0, excess);
+                  match[2] = unquoted.slice(0, excess);
+                }
+                return match.slice(0, 3);
+              }
+            },
+            filter: {
+              TAG: function(nodeNameSelector) {
+                var expectedNodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();
+                return nodeNameSelector === "*" ? function() {
+                  return true;
+                } : function(elem) {
+                  return nodeName(elem, expectedNodeName);
+                };
+              },
+              CLASS: function(className) {
+                var pattern = classCache[className + " "];
+                return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(className, function(elem) {
+                  return pattern.test(
+                    typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""
+                  );
+                });
+              },
+              ATTR: function(name, operator, check) {
+                return function(elem) {
+                  var result = find.attr(elem, name);
+                  if (result == null) {
+                    return operator === "!=";
                   }
-                  return match;
-                },
-                "PSEUDO": function(match) {
-                  var excess, unquoted = !match[6] && match[2];
-                  if (matchExpr["CHILD"].test(match[0])) {
-                    return null;
+                  if (!operator) {
+                    return true;
                   }
-                  if (match[3]) {
-                    match[2] = match[4] || match[5] || "";
-                  } else if (unquoted && rpseudo.test(unquoted) && // Get excess from tokenize (recursively)
-                  (excess = tokenize(unquoted, true)) && // advance to the next closing parenthesis
-                  (excess = unquoted.indexOf(")", unquoted.length - excess) - unquoted.length)) {
-                    match[0] = match[0].slice(0, excess);
-                    match[2] = unquoted.slice(0, excess);
+                  result += "";
+                  if (operator === "=") {
+                    return result === check;
                   }
-                  return match.slice(0, 3);
-                }
+                  if (operator === "!=") {
+                    return result !== check;
+                  }
+                  if (operator === "^=") {
+                    return check && result.indexOf(check) === 0;
+                  }
+                  if (operator === "*=") {
+                    return check && result.indexOf(check) > -1;
+                  }
+                  if (operator === "$=") {
+                    return check && result.slice(-check.length) === check;
+                  }
+                  if (operator === "~=") {
+                    return (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1;
+                  }
+                  if (operator === "|=") {
+                    return result === check || result.slice(0, check.length + 1) === check + "-";
+                  }
+                  return false;
+                };
               },
-              filter: {
-                "TAG": function(nodeNameSelector) {
-                  var nodeName2 = nodeNameSelector.replace(runescape, funescape).toLowerCase();
-                  return nodeNameSelector === "*" ? function() {
-                    return true;
-                  } : function(elem) {
-                    return elem.nodeName && elem.nodeName.toLowerCase() === nodeName2;
-                  };
-                },
-                "CLASS": function(className) {
-                  var pattern = classCache[className + " "];
-                  return pattern || (pattern = new RegExp("(^|" + whitespace + ")" + className + "(" + whitespace + "|$)")) && classCache(
-                    className,
-                    function(elem) {
-                      return pattern.test(
-                        typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || ""
-                      );
-                    }
-                  );
-                },
-                "ATTR": function(name, operator, check) {
-                  return function(elem) {
-                    var result = Sizzle2.attr(elem, name);
-                    if (result == null) {
-                      return operator === "!=";
-                    }
-                    if (!operator) {
+              CHILD: function(type, what, _argument, first, last) {
+                var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
+                return first === 1 && last === 0 ? (
+                  // Shortcut for :nth-*(n)
+                  function(elem) {
+                    return !!elem.parentNode;
+                  }
+                ) : function(elem, _context, xml) {
+                  var cache, outerCache, node, nodeIndex, start2, dir2 = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
+                  if (parent) {
+                    if (simple) {
+                      while (dir2) {
+                        node = elem;
+                        while (node = node[dir2]) {
+                          if (ofType ? nodeName(node, name) : node.nodeType === 1) {
+                            return false;
+                          }
+                        }
+                        start2 = dir2 = type === "only" && !start2 && "nextSibling";
+                      }
                       return true;
                     }
-                    result += "";
-                    return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf(check) === 0 : operator === "*=" ? check && result.indexOf(check) > -1 : operator === "$=" ? check && result.slice(-check.length) === check : operator === "~=" ? (" " + result.replace(rwhitespace, " ") + " ").indexOf(check) > -1 : operator === "|=" ? result === check || result.slice(0, check.length + 1) === check + "-" : false;
-                  };
-                },
-                "CHILD": function(type, what, _argument, first, last) {
-                  var simple = type.slice(0, 3) !== "nth", forward = type.slice(-4) !== "last", ofType = what === "of-type";
-                  return first === 1 && last === 0 ? (
-                    // Shortcut for :nth-*(n)
-                    function(elem) {
-                      return !!elem.parentNode;
-                    }
-                  ) : function(elem, _context, xml) {
-                    var cache, uniqueCache, outerCache, node, nodeIndex, start2, dir2 = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType, diff = false;
-                    if (parent) {
-                      if (simple) {
-                        while (dir2) {
-                          node = elem;
-                          while (node = node[dir2]) {
-                            if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {
-                              return false;
-                            }
-                          }
-                          start2 = dir2 = type === "only" && !start2 && "nextSibling";
+                    start2 = [forward ? parent.firstChild : parent.lastChild];
+                    if (forward && useCache) {
+                      outerCache = parent[expando] || (parent[expando] = {});
+                      cache = outerCache[type] || [];
+                      nodeIndex = cache[0] === dirruns && cache[1];
+                      diff = nodeIndex && cache[2];
+                      node = nodeIndex && parent.childNodes[nodeIndex];
+                      while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start
+                      (diff = nodeIndex = 0) || start2.pop()) {
+                        if (node.nodeType === 1 && ++diff && node === elem) {
+                          outerCache[type] = [dirruns, nodeIndex, diff];
+                          break;
                         }
-                        return true;
                       }
-                      start2 = [forward ? parent.firstChild : parent.lastChild];
-                      if (forward && useCache) {
-                        node = parent;
-                        outerCache = node[expando] || (node[expando] = {});
-                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                        cache = uniqueCache[type] || [];
+                    } else {
+                      if (useCache) {
+                        outerCache = elem[expando] || (elem[expando] = {});
+                        cache = outerCache[type] || [];
                         nodeIndex = cache[0] === dirruns && cache[1];
-                        diff = nodeIndex && cache[2];
-                        node = nodeIndex && parent.childNodes[nodeIndex];
-                        while (node = ++nodeIndex && node && node[dir2] || // Fallback to seeking `elem` from the start
-                        (diff = nodeIndex = 0) || start2.pop()) {
-                          if (node.nodeType === 1 && ++diff && node === elem) {
-                            uniqueCache[type] = [dirruns, nodeIndex, diff];
-                            break;
-                          }
-                        }
-                      } else {
-                        if (useCache) {
-                          node = elem;
-                          outerCache = node[expando] || (node[expando] = {});
-                          uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                          cache = uniqueCache[type] || [];
-                          nodeIndex = cache[0] === dirruns && cache[1];
-                          diff = nodeIndex;
-                        }
-                        if (diff === false) {
-                          while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start2.pop()) {
-                            if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {
-                              if (useCache) {
-                                outerCache = node[expando] || (node[expando] = {});
-                                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});
-                                uniqueCache[type] = [dirruns, diff];
-                              }
-                              if (node === elem) {
-                                break;
-                              }
+                        diff = nodeIndex;
+                      }
+                      if (diff === false) {
+                        while (node = ++nodeIndex && node && node[dir2] || (diff = nodeIndex = 0) || start2.pop()) {
+                          if ((ofType ? nodeName(node, name) : node.nodeType === 1) && ++diff) {
+                            if (useCache) {
+                              outerCache = node[expando] || (node[expando] = {});
+                              outerCache[type] = [dirruns, diff];
+                            }
+                            if (node === elem) {
+                              break;
                             }
                           }
                         }
                       }
-                      diff -= last;
-                      return diff === first || diff % first === 0 && diff / first >= 0;
                     }
-                  };
-                },
-                "PSEUDO": function(pseudo, argument) {
-                  var args, fn2 = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle2.error("unsupported pseudo: " + pseudo);
-                  if (fn2[expando]) {
-                    return fn2(argument);
+                    diff -= last;
+                    return diff === first || diff % first === 0 && diff / first >= 0;
                   }
-                  if (fn2.length > 1) {
-                    args = [pseudo, pseudo, "", argument];
-                    return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) {
-                      var idx, matched = fn2(seed, argument), i2 = matched.length;
-                      while (i2--) {
-                        idx = indexOf2(seed, matched[i2]);
-                        seed[idx] = !(matches2[idx] = matched[i2]);
-                      }
-                    }) : function(elem) {
-                      return fn2(elem, 0, args);
-                    };
-                  }
-                  return fn2;
-                }
+                };
               },
-              pseudos: {
-                // Potentially complex pseudos
-                "not": markFunction(function(selector) {
-                  var input = [], results = [], matcher = compile(selector.replace(rtrim2, "$1"));
-                  return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) {
-                    var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;
+              PSEUDO: function(pseudo, argument) {
+                var args, fn2 = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || find.error("unsupported pseudo: " + pseudo);
+                if (fn2[expando]) {
+                  return fn2(argument);
+                }
+                if (fn2.length > 1) {
+                  args = [pseudo, pseudo, "", argument];
+                  return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function(seed, matches2) {
+                    var idx, matched = fn2(seed, argument), i2 = matched.length;
                     while (i2--) {
-                      if (elem = unmatched[i2]) {
-                        seed[i2] = !(matches2[i2] = elem);
-                      }
+                      idx = indexOf.call(seed, matched[i2]);
+                      seed[idx] = !(matches2[idx] = matched[i2]);
                     }
-                  }) : function(elem, _context, xml) {
-                    input[0] = elem;
-                    matcher(input, null, xml, results);
-                    input[0] = null;
-                    return !results.pop();
-                  };
-                }),
-                "has": markFunction(function(selector) {
-                  return function(elem) {
-                    return Sizzle2(selector, elem).length > 0;
-                  };
-                }),
-                "contains": markFunction(function(text) {
-                  text = text.replace(runescape, funescape);
-                  return function(elem) {
-                    return (elem.textContent || getText(elem)).indexOf(text) > -1;
-                  };
-                }),
-                // "Whether an element is represented by a :lang() selector
-                // is based solely on the element's language value
-                // being equal to the identifier C,
-                // or beginning with the identifier C immediately followed by "-".
-                // The matching of C against the element's language value is performed case-insensitively.
-                // The identifier C does not have to be a valid language name."
-                // http://www.w3.org/TR/selectors/#lang-pseudo
-                "lang": markFunction(function(lang) {
-                  if (!ridentifier.test(lang || "")) {
-                    Sizzle2.error("unsupported lang: " + lang);
-                  }
-                  lang = lang.replace(runescape, funescape).toLowerCase();
-                  return function(elem) {
-                    var elemLang;
-                    do {
-                      if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
-                        elemLang = elemLang.toLowerCase();
-                        return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
-                      }
-                    } while ((elem = elem.parentNode) && elem.nodeType === 1);
-                    return false;
+                  }) : function(elem) {
+                    return fn2(elem, 0, args);
                   };
-                }),
-                // Miscellaneous
-                "target": function(elem) {
-                  var hash3 = window3.location && window3.location.hash;
-                  return hash3 && hash3.slice(1) === elem.id;
-                },
-                "root": function(elem) {
-                  return elem === docElem;
-                },
-                "focus": function(elem) {
-                  return elem === document3.activeElement && (!document3.hasFocus || document3.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
-                },
-                // Boolean properties
-                "enabled": createDisabledPseudo(false),
-                "disabled": createDisabledPseudo(true),
-                "checked": function(elem) {
-                  var nodeName2 = elem.nodeName.toLowerCase();
-                  return nodeName2 === "input" && !!elem.checked || nodeName2 === "option" && !!elem.selected;
-                },
-                "selected": function(elem) {
-                  if (elem.parentNode) {
-                    elem.parentNode.selectedIndex;
-                  }
-                  return elem.selected === true;
-                },
-                // Contents
-                "empty": function(elem) {
-                  for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
-                    if (elem.nodeType < 6) {
-                      return false;
+                }
+                return fn2;
+              }
+            },
+            pseudos: {
+              // Potentially complex pseudos
+              not: markFunction(function(selector) {
+                var input = [], results = [], matcher = compile(selector.replace(rtrimCSS, "$1"));
+                return matcher[expando] ? markFunction(function(seed, matches2, _context, xml) {
+                  var elem, unmatched = matcher(seed, null, xml, []), i2 = seed.length;
+                  while (i2--) {
+                    if (elem = unmatched[i2]) {
+                      seed[i2] = !(matches2[i2] = elem);
                     }
                   }
-                  return true;
-                },
-                "parent": function(elem) {
-                  return !Expr.pseudos["empty"](elem);
-                },
-                // Element/input types
-                "header": function(elem) {
-                  return rheader.test(elem.nodeName);
-                },
-                "input": function(elem) {
-                  return rinputs.test(elem.nodeName);
-                },
-                "button": function(elem) {
-                  var name = elem.nodeName.toLowerCase();
-                  return name === "input" && elem.type === "button" || name === "button";
-                },
-                "text": function(elem) {
-                  var attr;
-                  return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && // Support: IE<8
-                  // New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
-                  ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
-                },
-                // Position-in-collection
-                "first": createPositionalPseudo(function() {
-                  return [0];
-                }),
-                "last": createPositionalPseudo(function(_matchIndexes, length) {
-                  return [length - 1];
-                }),
-                "eq": createPositionalPseudo(function(_matchIndexes, length, argument) {
-                  return [argument < 0 ? argument + length : argument];
-                }),
-                "even": createPositionalPseudo(function(matchIndexes, length) {
-                  var i2 = 0;
-                  for (; i2 < length; i2 += 2) {
-                    matchIndexes.push(i2);
-                  }
-                  return matchIndexes;
-                }),
-                "odd": createPositionalPseudo(function(matchIndexes, length) {
-                  var i2 = 1;
-                  for (; i2 < length; i2 += 2) {
-                    matchIndexes.push(i2);
-                  }
-                  return matchIndexes;
-                }),
-                "lt": createPositionalPseudo(function(matchIndexes, length, argument) {
-                  var i2 = argument < 0 ? argument + length : argument > length ? length : argument;
-                  for (; --i2 >= 0; ) {
-                    matchIndexes.push(i2);
-                  }
-                  return matchIndexes;
-                }),
-                "gt": createPositionalPseudo(function(matchIndexes, length, argument) {
-                  var i2 = argument < 0 ? argument + length : argument;
-                  for (; ++i2 < length; ) {
-                    matchIndexes.push(i2);
-                  }
-                  return matchIndexes;
-                })
-              }
-            };
-            Expr.pseudos["nth"] = Expr.pseudos["eq"];
-            for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
-              Expr.pseudos[i] = createInputPseudo(i);
-            }
-            for (i in { submit: true, reset: true }) {
-              Expr.pseudos[i] = createButtonPseudo(i);
-            }
-            function setFilters() {
-            }
-            setFilters.prototype = Expr.filters = Expr.pseudos;
-            Expr.setFilters = new setFilters();
-            tokenize = Sizzle2.tokenize = function(selector, parseOnly) {
-              var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
-              if (cached) {
-                return parseOnly ? 0 : cached.slice(0);
-              }
-              soFar = selector;
-              groups = [];
-              preFilters = Expr.preFilter;
-              while (soFar) {
-                if (!matched || (match = rcomma.exec(soFar))) {
-                  if (match) {
-                    soFar = soFar.slice(match[0].length) || soFar;
+                }) : function(elem, _context, xml) {
+                  input[0] = elem;
+                  matcher(input, null, xml, results);
+                  input[0] = null;
+                  return !results.pop();
+                };
+              }),
+              has: markFunction(function(selector) {
+                return function(elem) {
+                  return find(selector, elem).length > 0;
+                };
+              }),
+              contains: markFunction(function(text) {
+                text = text.replace(runescape, funescape);
+                return function(elem) {
+                  return (elem.textContent || jQuery.text(elem)).indexOf(text) > -1;
+                };
+              }),
+              // "Whether an element is represented by a :lang() selector
+              // is based solely on the element's language value
+              // being equal to the identifier C,
+              // or beginning with the identifier C immediately followed by "-".
+              // The matching of C against the element's language value is performed case-insensitively.
+              // The identifier C does not have to be a valid language name."
+              // https://www.w3.org/TR/selectors/#lang-pseudo
+              lang: markFunction(function(lang) {
+                if (!ridentifier.test(lang || "")) {
+                  find.error("unsupported lang: " + lang);
+                }
+                lang = lang.replace(runescape, funescape).toLowerCase();
+                return function(elem) {
+                  var elemLang;
+                  do {
+                    if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute("xml:lang") || elem.getAttribute("lang")) {
+                      elemLang = elemLang.toLowerCase();
+                      return elemLang === lang || elemLang.indexOf(lang + "-") === 0;
+                    }
+                  } while ((elem = elem.parentNode) && elem.nodeType === 1);
+                  return false;
+                };
+              }),
+              // Miscellaneous
+              target: function(elem) {
+                var hash3 = window2.location && window2.location.hash;
+                return hash3 && hash3.slice(1) === elem.id;
+              },
+              root: function(elem) {
+                return elem === documentElement2;
+              },
+              focus: function(elem) {
+                return elem === safeActiveElement() && document3.hasFocus() && !!(elem.type || elem.href || ~elem.tabIndex);
+              },
+              // Boolean properties
+              enabled: createDisabledPseudo(false),
+              disabled: createDisabledPseudo(true),
+              checked: function(elem) {
+                return nodeName(elem, "input") && !!elem.checked || nodeName(elem, "option") && !!elem.selected;
+              },
+              selected: function(elem) {
+                if (elem.parentNode) {
+                  elem.parentNode.selectedIndex;
+                }
+                return elem.selected === true;
+              },
+              // Contents
+              empty: function(elem) {
+                for (elem = elem.firstChild; elem; elem = elem.nextSibling) {
+                  if (elem.nodeType < 6) {
+                    return false;
                   }
-                  groups.push(tokens = []);
                 }
-                matched = false;
-                if (match = rcombinators.exec(soFar)) {
+                return true;
+              },
+              parent: function(elem) {
+                return !Expr.pseudos.empty(elem);
+              },
+              // Element/input types
+              header: function(elem) {
+                return rheader.test(elem.nodeName);
+              },
+              input: function(elem) {
+                return rinputs.test(elem.nodeName);
+              },
+              button: function(elem) {
+                return nodeName(elem, "input") && elem.type === "button" || nodeName(elem, "button");
+              },
+              text: function(elem) {
+                var attr;
+                return nodeName(elem, "input") && elem.type === "text" && // Support: IE <10 only
+                // New HTML5 attribute values (e.g., "search") appear
+                // with elem.type === "text"
+                ((attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text");
+              },
+              // Position-in-collection
+              first: createPositionalPseudo(function() {
+                return [0];
+              }),
+              last: createPositionalPseudo(function(_matchIndexes, length) {
+                return [length - 1];
+              }),
+              eq: createPositionalPseudo(function(_matchIndexes, length, argument) {
+                return [argument < 0 ? argument + length : argument];
+              }),
+              even: createPositionalPseudo(function(matchIndexes, length) {
+                var i2 = 0;
+                for (; i2 < length; i2 += 2) {
+                  matchIndexes.push(i2);
+                }
+                return matchIndexes;
+              }),
+              odd: createPositionalPseudo(function(matchIndexes, length) {
+                var i2 = 1;
+                for (; i2 < length; i2 += 2) {
+                  matchIndexes.push(i2);
+                }
+                return matchIndexes;
+              }),
+              lt: createPositionalPseudo(function(matchIndexes, length, argument) {
+                var i2;
+                if (argument < 0) {
+                  i2 = argument + length;
+                } else if (argument > length) {
+                  i2 = length;
+                } else {
+                  i2 = argument;
+                }
+                for (; --i2 >= 0; ) {
+                  matchIndexes.push(i2);
+                }
+                return matchIndexes;
+              }),
+              gt: createPositionalPseudo(function(matchIndexes, length, argument) {
+                var i2 = argument < 0 ? argument + length : argument;
+                for (; ++i2 < length; ) {
+                  matchIndexes.push(i2);
+                }
+                return matchIndexes;
+              })
+            }
+          };
+          Expr.pseudos.nth = Expr.pseudos.eq;
+          for (i in { radio: true, checkbox: true, file: true, password: true, image: true }) {
+            Expr.pseudos[i] = createInputPseudo(i);
+          }
+          for (i in { submit: true, reset: true }) {
+            Expr.pseudos[i] = createButtonPseudo(i);
+          }
+          function setFilters() {
+          }
+          setFilters.prototype = Expr.filters = Expr.pseudos;
+          Expr.setFilters = new setFilters();
+          function tokenize(selector, parseOnly) {
+            var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[selector + " "];
+            if (cached) {
+              return parseOnly ? 0 : cached.slice(0);
+            }
+            soFar = selector;
+            groups = [];
+            preFilters = Expr.preFilter;
+            while (soFar) {
+              if (!matched || (match = rcomma.exec(soFar))) {
+                if (match) {
+                  soFar = soFar.slice(match[0].length) || soFar;
+                }
+                groups.push(tokens = []);
+              }
+              matched = false;
+              if (match = rleadingCombinator.exec(soFar)) {
+                matched = match.shift();
+                tokens.push({
+                  value: matched,
+                  // Cast descendant combinators to space
+                  type: match[0].replace(rtrimCSS, " ")
+                });
+                soFar = soFar.slice(matched.length);
+              }
+              for (type in Expr.filter) {
+                if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
                   matched = match.shift();
                   tokens.push({
                     value: matched,
-                    // Cast descendant combinators to space
-                    type: match[0].replace(rtrim2, " ")
+                    type,
+                    matches: match
                   });
                   soFar = soFar.slice(matched.length);
                 }
-                for (type in Expr.filter) {
-                  if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {
-                    matched = match.shift();
-                    tokens.push({
-                      value: matched,
-                      type,
-                      matches: match
-                    });
-                    soFar = soFar.slice(matched.length);
+              }
+              if (!matched) {
+                break;
+              }
+            }
+            if (parseOnly) {
+              return soFar.length;
+            }
+            return soFar ? find.error(selector) : (
+              // Cache the tokens
+              tokenCache(selector, groups).slice(0)
+            );
+          }
+          function toSelector(tokens) {
+            var i2 = 0, len = tokens.length, selector = "";
+            for (; i2 < len; i2++) {
+              selector += tokens[i2].value;
+            }
+            return selector;
+          }
+          function addCombinator(matcher, combinator, base) {
+            var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key === "parentNode", doneName = done++;
+            return combinator.first ? (
+              // Check against closest ancestor/preceding element
+              function(elem, context, xml) {
+                while (elem = elem[dir2]) {
+                  if (elem.nodeType === 1 || checkNonElements) {
+                    return matcher(elem, context, xml);
                   }
                 }
-                if (!matched) {
-                  break;
-                }
+                return false;
               }
-              return parseOnly ? soFar.length : soFar ? Sizzle2.error(selector) : (
-                // Cache the tokens
-                tokenCache(selector, groups).slice(0)
-              );
-            };
-            function toSelector(tokens) {
-              var i2 = 0, len = tokens.length, selector = "";
-              for (; i2 < len; i2++) {
-                selector += tokens[i2].value;
-              }
-              return selector;
-            }
-            function addCombinator(matcher, combinator, base) {
-              var dir2 = combinator.dir, skip = combinator.next, key = skip || dir2, checkNonElements = base && key === "parentNode", doneName = done++;
-              return combinator.first ? (
-                // Check against closest ancestor/preceding element
-                function(elem, context, xml) {
+            ) : (
+              // Check against all ancestor/preceding elements
+              function(elem, context, xml) {
+                var oldCache, outerCache, newCache = [dirruns, doneName];
+                if (xml) {
                   while (elem = elem[dir2]) {
                     if (elem.nodeType === 1 || checkNonElements) {
-                      return matcher(elem, context, xml);
+                      if (matcher(elem, context, xml)) {
+                        return true;
+                      }
                     }
                   }
-                  return false;
-                }
-              ) : (
-                // Check against all ancestor/preceding elements
-                function(elem, context, xml) {
-                  var oldCache, uniqueCache, outerCache, newCache = [dirruns, doneName];
-                  if (xml) {
-                    while (elem = elem[dir2]) {
-                      if (elem.nodeType === 1 || checkNonElements) {
-                        if (matcher(elem, context, xml)) {
+                } else {
+                  while (elem = elem[dir2]) {
+                    if (elem.nodeType === 1 || checkNonElements) {
+                      outerCache = elem[expando] || (elem[expando] = {});
+                      if (skip && nodeName(elem, skip)) {
+                        elem = elem[dir2] || elem;
+                      } else if ((oldCache = outerCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
+                        return newCache[2] = oldCache[2];
+                      } else {
+                        outerCache[key] = newCache;
+                        if (newCache[2] = matcher(elem, context, xml)) {
                           return true;
                         }
                       }
                     }
-                  } else {
-                    while (elem = elem[dir2]) {
-                      if (elem.nodeType === 1 || checkNonElements) {
-                        outerCache = elem[expando] || (elem[expando] = {});
-                        uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});
-                        if (skip && skip === elem.nodeName.toLowerCase()) {
-                          elem = elem[dir2] || elem;
-                        } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {
-                          return newCache[2] = oldCache[2];
-                        } else {
-                          uniqueCache[key] = newCache;
-                          if (newCache[2] = matcher(elem, context, xml)) {
-                            return true;
-                          }
-                        }
-                      }
-                    }
                   }
-                  return false;
                 }
-              );
-            }
-            function elementMatcher(matchers) {
-              return matchers.length > 1 ? function(elem, context, xml) {
-                var i2 = matchers.length;
-                while (i2--) {
-                  if (!matchers[i2](elem, context, xml)) {
-                    return false;
-                  }
+                return false;
+              }
+            );
+          }
+          function elementMatcher(matchers) {
+            return matchers.length > 1 ? function(elem, context, xml) {
+              var i2 = matchers.length;
+              while (i2--) {
+                if (!matchers[i2](elem, context, xml)) {
+                  return false;
                 }
-                return true;
-              } : matchers[0];
-            }
-            function multipleContexts(selector, contexts, results) {
-              var i2 = 0, len = contexts.length;
-              for (; i2 < len; i2++) {
-                Sizzle2(selector, contexts[i2], results);
               }
-              return results;
-            }
-            function condense(unmatched, map, filter, context, xml) {
-              var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map != null;
-              for (; i2 < len; i2++) {
-                if (elem = unmatched[i2]) {
-                  if (!filter || filter(elem, context, xml)) {
-                    newUnmatched.push(elem);
-                    if (mapped) {
-                      map.push(i2);
-                    }
+              return true;
+            } : matchers[0];
+          }
+          function multipleContexts(selector, contexts, results) {
+            var i2 = 0, len = contexts.length;
+            for (; i2 < len; i2++) {
+              find(selector, contexts[i2], results);
+            }
+            return results;
+          }
+          function condense(unmatched, map, filter, context, xml) {
+            var elem, newUnmatched = [], i2 = 0, len = unmatched.length, mapped = map != null;
+            for (; i2 < len; i2++) {
+              if (elem = unmatched[i2]) {
+                if (!filter || filter(elem, context, xml)) {
+                  newUnmatched.push(elem);
+                  if (mapped) {
+                    map.push(i2);
                   }
                 }
               }
-              return newUnmatched;
             }
-            function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
-              if (postFilter && !postFilter[expando]) {
-                postFilter = setMatcher(postFilter);
-              }
-              if (postFinder && !postFinder[expando]) {
-                postFinder = setMatcher(postFinder, postSelector);
-              }
-              return markFunction(function(seed, results, context, xml) {
-                var temp, i2, elem, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(
-                  selector || "*",
-                  context.nodeType ? [context] : context,
+            return newUnmatched;
+          }
+          function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {
+            if (postFilter && !postFilter[expando]) {
+              postFilter = setMatcher(postFilter);
+            }
+            if (postFinder && !postFinder[expando]) {
+              postFinder = setMatcher(postFinder, postSelector);
+            }
+            return markFunction(function(seed, results, context, xml) {
+              var temp, i2, elem, matcherOut, preMap = [], postMap = [], preexisting = results.length, elems = seed || multipleContexts(
+                selector || "*",
+                context.nodeType ? [context] : context,
+                []
+              ), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems;
+              if (matcher) {
+                matcherOut = postFinder || (seed ? preFilter : preexisting || postFilter) ? (
+                  // ...intermediate processing is necessary
                   []
-                ), matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems, matcherOut = matcher ? (
-                  // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
-                  postFinder || (seed ? preFilter : preexisting || postFilter) ? (
-                    // ...intermediate processing is necessary
-                    []
-                  ) : (
-                    // ...otherwise use results directly
-                    results
-                  )
-                ) : matcherIn;
-                if (matcher) {
-                  matcher(matcherIn, matcherOut, context, xml);
-                }
-                if (postFilter) {
-                  temp = condense(matcherOut, postMap);
-                  postFilter(temp, [], context, xml);
-                  i2 = temp.length;
-                  while (i2--) {
-                    if (elem = temp[i2]) {
-                      matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);
-                    }
+                ) : (
+                  // ...otherwise use results directly
+                  results
+                );
+                matcher(matcherIn, matcherOut, context, xml);
+              } else {
+                matcherOut = matcherIn;
+              }
+              if (postFilter) {
+                temp = condense(matcherOut, postMap);
+                postFilter(temp, [], context, xml);
+                i2 = temp.length;
+                while (i2--) {
+                  if (elem = temp[i2]) {
+                    matcherOut[postMap[i2]] = !(matcherIn[postMap[i2]] = elem);
                   }
                 }
-                if (seed) {
-                  if (postFinder || preFilter) {
-                    if (postFinder) {
-                      temp = [];
-                      i2 = matcherOut.length;
-                      while (i2--) {
-                        if (elem = matcherOut[i2]) {
-                          temp.push(matcherIn[i2] = elem);
-                        }
-                      }
-                      postFinder(null, matcherOut = [], temp, xml);
-                    }
+              }
+              if (seed) {
+                if (postFinder || preFilter) {
+                  if (postFinder) {
+                    temp = [];
                     i2 = matcherOut.length;
                     while (i2--) {
-                      if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf2(seed, elem) : preMap[i2]) > -1) {
-                        seed[temp] = !(results[temp] = elem);
+                      if (elem = matcherOut[i2]) {
+                        temp.push(matcherIn[i2] = elem);
                       }
                     }
+                    postFinder(null, matcherOut = [], temp, xml);
                   }
-                } else {
-                  matcherOut = condense(
-                    matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut
-                  );
-                  if (postFinder) {
-                    postFinder(null, results, matcherOut, xml);
-                  } else {
-                    push2.apply(results, matcherOut);
+                  i2 = matcherOut.length;
+                  while (i2--) {
+                    if ((elem = matcherOut[i2]) && (temp = postFinder ? indexOf.call(seed, elem) : preMap[i2]) > -1) {
+                      seed[temp] = !(results[temp] = elem);
+                    }
                   }
                 }
-              });
-            }
-            function matcherFromTokens(tokens) {
-              var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
-                return elem === checkContext;
-              }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
-                return indexOf2(checkContext, elem) > -1;
-              }, implicitRelative, true), matchers = [function(elem, context, xml) {
-                var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
-                checkContext = null;
-                return ret;
-              }];
-              for (; i2 < len; i2++) {
-                if (matcher = Expr.relative[tokens[i2].type]) {
-                  matchers = [addCombinator(elementMatcher(matchers), matcher)];
+              } else {
+                matcherOut = condense(
+                  matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut
+                );
+                if (postFinder) {
+                  postFinder(null, results, matcherOut, xml);
                 } else {
-                  matcher = Expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);
-                  if (matcher[expando]) {
-                    j = ++i2;
-                    for (; j < len; j++) {
-                      if (Expr.relative[tokens[j].type]) {
-                        break;
-                      }
-                    }
-                    return setMatcher(
-                      i2 > 1 && elementMatcher(matchers),
-                      i2 > 1 && toSelector(
-                        // If the preceding token was a descendant combinator, insert an implicit any-element `*`
-                        tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === " " ? "*" : "" })
-                      ).replace(rtrim2, "$1"),
-                      matcher,
-                      i2 < j && matcherFromTokens(tokens.slice(i2, j)),
-                      j < len && matcherFromTokens(tokens = tokens.slice(j)),
-                      j < len && toSelector(tokens)
-                    );
-                  }
-                  matchers.push(matcher);
+                  push2.apply(results, matcherOut);
                 }
               }
-              return elementMatcher(matchers);
-            }
-            function matcherFromGroupMatchers(elementMatchers, setMatchers) {
-              var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
-                var elem, j, matcher, matchedCount = 0, i2 = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find["TAG"]("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;
-                if (outermost) {
-                  outermostContext = context == document3 || context || outermost;
-                }
-                for (; i2 !== len && (elem = elems[i2]) != null; i2++) {
-                  if (byElement && elem) {
-                    j = 0;
-                    if (!context && elem.ownerDocument != document3) {
-                      setDocument(elem);
-                      xml = !documentIsHTML;
-                    }
-                    while (matcher = elementMatchers[j++]) {
-                      if (matcher(elem, context || document3, xml)) {
-                        results.push(elem);
-                        break;
-                      }
-                    }
-                    if (outermost) {
-                      dirruns = dirrunsUnique;
-                    }
-                  }
-                  if (bySet) {
-                    if (elem = !matcher && elem) {
-                      matchedCount--;
-                    }
-                    if (seed) {
-                      unmatched.push(elem);
+            });
+          }
+          function matcherFromTokens(tokens) {
+            var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[tokens[0].type], implicitRelative = leadingRelative || Expr.relative[" "], i2 = leadingRelative ? 1 : 0, matchContext = addCombinator(function(elem) {
+              return elem === checkContext;
+            }, implicitRelative, true), matchAnyContext = addCombinator(function(elem) {
+              return indexOf.call(checkContext, elem) > -1;
+            }, implicitRelative, true), matchers = [function(elem, context, xml) {
+              var ret = !leadingRelative && (xml || context != outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml));
+              checkContext = null;
+              return ret;
+            }];
+            for (; i2 < len; i2++) {
+              if (matcher = Expr.relative[tokens[i2].type]) {
+                matchers = [addCombinator(elementMatcher(matchers), matcher)];
+              } else {
+                matcher = Expr.filter[tokens[i2].type].apply(null, tokens[i2].matches);
+                if (matcher[expando]) {
+                  j = ++i2;
+                  for (; j < len; j++) {
+                    if (Expr.relative[tokens[j].type]) {
+                      break;
                     }
                   }
+                  return setMatcher(
+                    i2 > 1 && elementMatcher(matchers),
+                    i2 > 1 && toSelector(
+                      // If the preceding token was a descendant combinator, insert an implicit any-element `*`
+                      tokens.slice(0, i2 - 1).concat({ value: tokens[i2 - 2].type === " " ? "*" : "" })
+                    ).replace(rtrimCSS, "$1"),
+                    matcher,
+                    i2 < j && matcherFromTokens(tokens.slice(i2, j)),
+                    j < len && matcherFromTokens(tokens = tokens.slice(j)),
+                    j < len && toSelector(tokens)
+                  );
                 }
-                matchedCount += i2;
-                if (bySet && i2 !== matchedCount) {
+                matchers.push(matcher);
+              }
+            }
+            return elementMatcher(matchers);
+          }
+          function matcherFromGroupMatchers(elementMatchers, setMatchers) {
+            var bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function(seed, context, xml, results, outermost) {
+              var elem, j, matcher, matchedCount = 0, i2 = "0", unmatched = seed && [], setMatched = [], contextBackup = outermostContext, elems = seed || byElement && Expr.find.TAG("*", outermost), dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1, len = elems.length;
+              if (outermost) {
+                outermostContext = context == document3 || context || outermost;
+              }
+              for (; i2 !== len && (elem = elems[i2]) != null; i2++) {
+                if (byElement && elem) {
                   j = 0;
-                  while (matcher = setMatchers[j++]) {
-                    matcher(unmatched, setMatched, context, xml);
+                  if (!context && elem.ownerDocument != document3) {
+                    setDocument(elem);
+                    xml = !documentIsHTML;
                   }
-                  if (seed) {
-                    if (matchedCount > 0) {
-                      while (i2--) {
-                        if (!(unmatched[i2] || setMatched[i2])) {
-                          setMatched[i2] = pop.call(results);
-                        }
-                      }
+                  while (matcher = elementMatchers[j++]) {
+                    if (matcher(elem, context || document3, xml)) {
+                      push2.call(results, elem);
+                      break;
                     }
-                    setMatched = condense(setMatched);
                   }
-                  push2.apply(results, setMatched);
-                  if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
-                    Sizzle2.uniqueSort(results);
+                  if (outermost) {
+                    dirruns = dirrunsUnique;
                   }
                 }
-                if (outermost) {
-                  dirruns = dirrunsUnique;
-                  outermostContext = contextBackup;
-                }
-                return unmatched;
-              };
-              return bySet ? markFunction(superMatcher) : superMatcher;
-            }
-            compile = Sizzle2.compile = function(selector, match) {
-              var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
-              if (!cached) {
-                if (!match) {
-                  match = tokenize(selector);
-                }
-                i2 = match.length;
-                while (i2--) {
-                  cached = matcherFromTokens(match[i2]);
-                  if (cached[expando]) {
-                    setMatchers.push(cached);
-                  } else {
-                    elementMatchers.push(cached);
+                if (bySet) {
+                  if (elem = !matcher && elem) {
+                    matchedCount--;
+                  }
+                  if (seed) {
+                    unmatched.push(elem);
                   }
                 }
-                cached = compilerCache(
-                  selector,
-                  matcherFromGroupMatchers(elementMatchers, setMatchers)
-                );
-                cached.selector = selector;
               }
-              return cached;
-            };
-            select = Sizzle2.select = function(selector, context, results, seed) {
-              var i2, tokens, token, type, find, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
-              results = results || [];
-              if (match.length === 1) {
-                tokens = match[0] = match[0].slice(0);
-                if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
-                  context = (Expr.find["ID"](token.matches[0].replace(runescape, funescape), context) || [])[0];
-                  if (!context) {
-                    return results;
-                  } else if (compiled) {
-                    context = context.parentNode;
-                  }
-                  selector = selector.slice(tokens.shift().value.length);
+              matchedCount += i2;
+              if (bySet && i2 !== matchedCount) {
+                j = 0;
+                while (matcher = setMatchers[j++]) {
+                  matcher(unmatched, setMatched, context, xml);
                 }
-                i2 = matchExpr["needsContext"].test(selector) ? 0 : tokens.length;
-                while (i2--) {
-                  token = tokens[i2];
-                  if (Expr.relative[type = token.type]) {
-                    break;
-                  }
-                  if (find = Expr.find[type]) {
-                    if (seed = find(
-                      token.matches[0].replace(runescape, funescape),
-                      rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
-                    )) {
-                      tokens.splice(i2, 1);
-                      selector = seed.length && toSelector(tokens);
-                      if (!selector) {
-                        push2.apply(results, seed);
-                        return results;
+                if (seed) {
+                  if (matchedCount > 0) {
+                    while (i2--) {
+                      if (!(unmatched[i2] || setMatched[i2])) {
+                        setMatched[i2] = pop.call(results);
                       }
-                      break;
                     }
                   }
+                  setMatched = condense(setMatched);
+                }
+                push2.apply(results, setMatched);
+                if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {
+                  jQuery.uniqueSort(results);
                 }
               }
-              (compiled || compile(selector, match))(
-                seed,
-                context,
-                !documentIsHTML,
-                results,
-                !context || rsibling.test(selector) && testContext(context.parentNode) || context
-              );
-              return results;
+              if (outermost) {
+                dirruns = dirrunsUnique;
+                outermostContext = contextBackup;
+              }
+              return unmatched;
             };
-            support2.sortStable = expando.split("").sort(sortOrder).join("") === expando;
-            support2.detectDuplicates = !!hasDuplicate;
-            setDocument();
-            support2.sortDetached = assert(function(el) {
-              return el.compareDocumentPosition(document3.createElement("fieldset")) & 1;
-            });
-            if (!assert(function(el) {
-              el.innerHTML = "<a href='#'></a>";
-              return el.firstChild.getAttribute("href") === "#";
-            })) {
-              addHandle("type|href|height|width", function(elem, name, isXML2) {
-                if (!isXML2) {
-                  return elem.getAttribute(name, name.toLowerCase() === "type" ? 1 : 2);
+            return bySet ? markFunction(superMatcher) : superMatcher;
+          }
+          function compile(selector, match) {
+            var i2, setMatchers = [], elementMatchers = [], cached = compilerCache[selector + " "];
+            if (!cached) {
+              if (!match) {
+                match = tokenize(selector);
+              }
+              i2 = match.length;
+              while (i2--) {
+                cached = matcherFromTokens(match[i2]);
+                if (cached[expando]) {
+                  setMatchers.push(cached);
+                } else {
+                  elementMatchers.push(cached);
                 }
-              });
-            }
-            if (!support2.attributes || !assert(function(el) {
-              el.innerHTML = "<input/>";
-              el.firstChild.setAttribute("value", "");
-              return el.firstChild.getAttribute("value") === "";
-            })) {
-              addHandle("value", function(elem, _name, isXML2) {
-                if (!isXML2 && elem.nodeName.toLowerCase() === "input") {
-                  return elem.defaultValue;
+              }
+              cached = compilerCache(
+                selector,
+                matcherFromGroupMatchers(elementMatchers, setMatchers)
+              );
+              cached.selector = selector;
+            }
+            return cached;
+          }
+          function select(selector, context, results, seed) {
+            var i2, tokens, token, type, find2, compiled = typeof selector === "function" && selector, match = !seed && tokenize(selector = compiled.selector || selector);
+            results = results || [];
+            if (match.length === 1) {
+              tokens = match[0] = match[0].slice(0);
+              if (tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {
+                context = (Expr.find.ID(
+                  token.matches[0].replace(runescape, funescape),
+                  context
+                ) || [])[0];
+                if (!context) {
+                  return results;
+                } else if (compiled) {
+                  context = context.parentNode;
+                }
+                selector = selector.slice(tokens.shift().value.length);
+              }
+              i2 = matchExpr.needsContext.test(selector) ? 0 : tokens.length;
+              while (i2--) {
+                token = tokens[i2];
+                if (Expr.relative[type = token.type]) {
+                  break;
                 }
-              });
-            }
-            if (!assert(function(el) {
-              return el.getAttribute("disabled") == null;
-            })) {
-              addHandle(booleans, function(elem, name, isXML2) {
-                var val;
-                if (!isXML2) {
-                  return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;
+                if (find2 = Expr.find[type]) {
+                  if (seed = find2(
+                    token.matches[0].replace(runescape, funescape),
+                    rsibling.test(tokens[0].type) && testContext(context.parentNode) || context
+                  )) {
+                    tokens.splice(i2, 1);
+                    selector = seed.length && toSelector(tokens);
+                    if (!selector) {
+                      push2.apply(results, seed);
+                      return results;
+                    }
+                    break;
+                  }
                 }
-              });
+              }
             }
-            return Sizzle2;
-          }(window2)
-        );
-        jQuery.find = Sizzle;
-        jQuery.expr = Sizzle.selectors;
-        jQuery.expr[":"] = jQuery.expr.pseudos;
-        jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
-        jQuery.text = Sizzle.getText;
-        jQuery.isXMLDoc = Sizzle.isXML;
-        jQuery.contains = Sizzle.contains;
-        jQuery.escapeSelector = Sizzle.escape;
+            (compiled || compile(selector, match))(
+              seed,
+              context,
+              !documentIsHTML,
+              results,
+              !context || rsibling.test(selector) && testContext(context.parentNode) || context
+            );
+            return results;
+          }
+          support.sortStable = expando.split("").sort(sortOrder).join("") === expando;
+          setDocument();
+          support.sortDetached = assert(function(el) {
+            return el.compareDocumentPosition(document3.createElement("fieldset")) & 1;
+          });
+          jQuery.find = find;
+          jQuery.expr[":"] = jQuery.expr.pseudos;
+          jQuery.unique = jQuery.uniqueSort;
+          find.compile = compile;
+          find.select = select;
+          find.setDocument = setDocument;
+          find.tokenize = tokenize;
+          find.escape = jQuery.escapeSelector;
+          find.getText = jQuery.text;
+          find.isXML = jQuery.isXMLDoc;
+          find.selectors = jQuery.expr;
+          find.support = jQuery.support;
+          find.uniqueSort = jQuery.uniqueSort;
+        })();
         var dir = function(elem, dir2, until) {
           var matched = [], truncate = until !== void 0;
           while ((elem = elem[dir2]) && elem.nodeType !== 9) {
@@ -1691,9 +1574,6 @@
           return matched;
         };
         var rneedsContext = jQuery.expr.match.needsContext;
-        function nodeName(elem, name) {
-          return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
-        }
         var rsingleTag = /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;
         function winnow(elements, qualifier, not) {
           if (isFunction(qualifier)) {
@@ -1840,7 +1720,7 @@
               for (; i < l; i++) {
                 for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {
                   if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : (
-                    // Don't pass non-elements to Sizzle
+                    // Don't pass non-elements to jQuery#find
                     cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors)
                   ))) {
                     matched.push(cur);
@@ -2206,14 +2086,14 @@
                         }
                         (special || deferred2.resolveWith)(that, args);
                       }
-                    }, process2 = special ? mightThrow : function() {
+                    }, process = special ? mightThrow : function() {
                       try {
                         mightThrow();
                       } catch (e) {
                         if (jQuery.Deferred.exceptionHook) {
                           jQuery.Deferred.exceptionHook(
                             e,
-                            process2.stackTrace
+                            process.error
                           );
                         }
                         if (depth + 1 >= maxDepth) {
@@ -2226,12 +2106,14 @@
                       }
                     };
                     if (depth) {
-                      process2();
+                      process();
                     } else {
-                      if (jQuery.Deferred.getStackHook) {
-                        process2.stackTrace = jQuery.Deferred.getStackHook();
+                      if (jQuery.Deferred.getErrorHook) {
+                        process.error = jQuery.Deferred.getErrorHook();
+                      } else if (jQuery.Deferred.getStackHook) {
+                        process.error = jQuery.Deferred.getStackHook();
                       }
-                      window2.setTimeout(process2);
+                      window2.setTimeout(process);
                     }
                   };
                 }
@@ -2328,9 +2210,13 @@
           }
         });
         var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
-        jQuery.Deferred.exceptionHook = function(error, stack) {
+        jQuery.Deferred.exceptionHook = function(error, asyncError) {
           if (window2.console && window2.console.warn && error && rerrorNames.test(error.name)) {
-            window2.console.warn("jQuery.Deferred exception: " + error.message, error.stack, stack);
+            window2.console.warn(
+              "jQuery.Deferred exception: " + error.message,
+              error.stack,
+              asyncError
+            );
           }
         };
         jQuery.readyException = function(error) {
@@ -2349,7 +2235,7 @@
           // Is the DOM ready to be used? Set to true once it occurs.
           isReady: false,
           // A counter to track how many items to wait for before
-          // the ready event fires. See #6781
+          // the ready event fires. See trac-6781
           readyWait: 1,
           // Handle when the DOM is ready
           ready: function(wait) {
@@ -2937,15 +2823,6 @@
         function returnFalse() {
           return false;
         }
-        function expectSync(elem, type) {
-          return elem === safeActiveElement() === (type === "focus");
-        }
-        function safeActiveElement() {
-          try {
-            return document2.activeElement;
-          } catch (err) {
-          }
-        }
         function on(elem, types, selector, data, fn2, one) {
           var origFn, type;
           if (typeof types === "object") {
@@ -3211,7 +3088,7 @@
               setup: function(data) {
                 var el = this || data;
                 if (rcheckableType.test(el.type) && el.click && nodeName(el, "input")) {
-                  leverageNative(el, "click", returnTrue);
+                  leverageNative(el, "click", true);
                 }
                 return false;
               },
@@ -3238,8 +3115,8 @@
             }
           }
         };
-        function leverageNative(el, type, expectSync2) {
-          if (!expectSync2) {
+        function leverageNative(el, type, isSetup) {
+          if (!isSetup) {
             if (dataPriv.get(el, type) === void 0) {
               jQuery.event.add(el, type, returnTrue);
             }
@@ -3249,38 +3126,30 @@
           jQuery.event.add(el, type, {
             namespace: false,
             handler: function(event) {
-              var notAsync, result, saved = dataPriv.get(this, type);
+              var result, saved = dataPriv.get(this, type);
               if (event.isTrigger & 1 && this[type]) {
-                if (!saved.length) {
+                if (!saved) {
                   saved = slice.call(arguments);
                   dataPriv.set(this, type, saved);
-                  notAsync = expectSync2(this, type);
                   this[type]();
                   result = dataPriv.get(this, type);
-                  if (saved !== result || notAsync) {
-                    dataPriv.set(this, type, false);
-                  } else {
-                    result = {};
-                  }
+                  dataPriv.set(this, type, false);
                   if (saved !== result) {
                     event.stopImmediatePropagation();
                     event.preventDefault();
-                    return result && result.value;
+                    return result;
                   }
                 } else if ((jQuery.event.special[type] || {}).delegateType) {
                   event.stopPropagation();
                 }
-              } else if (saved.length) {
-                dataPriv.set(this, type, {
-                  value: jQuery.event.trigger(
-                    // Support: IE <=9 - 11+
-                    // Extend with the prototype to reset the above stopImmediatePropagation()
-                    jQuery.extend(saved[0], jQuery.Event.prototype),
-                    saved.slice(1),
-                    this
-                  )
-                });
-                event.stopImmediatePropagation();
+              } else if (saved) {
+                dataPriv.set(this, type, jQuery.event.trigger(
+                  saved[0],
+                  saved.slice(1),
+                  this
+                ));
+                event.stopPropagation();
+                event.isImmediatePropagationStopped = returnTrue;
               }
             }
           });
@@ -3374,23 +3243,89 @@
           which: true
         }, jQuery.event.addProp);
         jQuery.each({ focus: "focusin", blur: "focusout" }, function(type, delegateType) {
+          function focusMappedHandler(nativeEvent) {
+            if (document2.documentMode) {
+              var handle = dataPriv.get(this, "handle"), event = jQuery.event.fix(nativeEvent);
+              event.type = nativeEvent.type === "focusin" ? "focus" : "blur";
+              event.isSimulated = true;
+              handle(nativeEvent);
+              if (event.target === event.currentTarget) {
+                handle(event);
+              }
+            } else {
+              jQuery.event.simulate(
+                delegateType,
+                nativeEvent.target,
+                jQuery.event.fix(nativeEvent)
+              );
+            }
+          }
           jQuery.event.special[type] = {
             // Utilize native event if possible so blur/focus sequence is correct
             setup: function() {
-              leverageNative(this, type, expectSync);
-              return false;
+              var attaches;
+              leverageNative(this, type, true);
+              if (document2.documentMode) {
+                attaches = dataPriv.get(this, delegateType);
+                if (!attaches) {
+                  this.addEventListener(delegateType, focusMappedHandler);
+                }
+                dataPriv.set(this, delegateType, (attaches || 0) + 1);
+              } else {
+                return false;
+              }
             },
             trigger: function() {
               leverageNative(this, type);
               return true;
             },
-            // Suppress native focus or blur as it's already being fired
-            // in leverageNative.
-            _default: function() {
-              return true;
+            teardown: function() {
+              var attaches;
+              if (document2.documentMode) {
+                attaches = dataPriv.get(this, delegateType) - 1;
+                if (!attaches) {
+                  this.removeEventListener(delegateType, focusMappedHandler);
+                  dataPriv.remove(this, delegateType);
+                } else {
+                  dataPriv.set(this, delegateType, attaches);
+                }
+              } else {
+                return false;
+              }
+            },
+            // Suppress native focus or blur if we're currently inside
+            // a leveraged native-event stack
+            _default: function(event) {
+              return dataPriv.get(event.target, type);
             },
             delegateType
           };
+          jQuery.event.special[delegateType] = {
+            setup: function() {
+              var doc2 = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc2, attaches = dataPriv.get(dataHolder, delegateType);
+              if (!attaches) {
+                if (document2.documentMode) {
+                  this.addEventListener(delegateType, focusMappedHandler);
+                } else {
+                  doc2.addEventListener(type, focusMappedHandler, true);
+                }
+              }
+              dataPriv.set(dataHolder, delegateType, (attaches || 0) + 1);
+            },
+            teardown: function() {
+              var doc2 = this.ownerDocument || this.document || this, dataHolder = document2.documentMode ? this : doc2, attaches = dataPriv.get(dataHolder, delegateType) - 1;
+              if (!attaches) {
+                if (document2.documentMode) {
+                  this.removeEventListener(delegateType, focusMappedHandler);
+                } else {
+                  doc2.removeEventListener(type, focusMappedHandler, true);
+                }
+                dataPriv.remove(dataHolder, delegateType);
+              } else {
+                dataPriv.set(dataHolder, delegateType, attaches);
+              }
+            }
+          };
         });
         jQuery.each({
           mouseenter: "mouseover",
@@ -3448,7 +3383,7 @@
             });
           }
         });
-        var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+        var rnoInnerhtml = /<script|<style|<link/i, rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, rcleanScript = /^\s*<!\[CDATA\[|\]\]>\s*$/g;
         function manipulationTarget(elem, content) {
           if (nodeName(elem, "table") && nodeName(content.nodeType !== 11 ? content : content.firstChild, "tr")) {
             return jQuery(elem).children("tbody")[0] || elem;
@@ -3738,6 +3673,7 @@
           };
         });
         var rnumnonpx = new RegExp("^(" + pnum + ")(?!px)[a-z%]+$", "i");
+        var rcustomProp = /^--/;
         var getStyles = function(elem) {
           var view = elem.ownerDocument.defaultView;
           if (!view || !view.opener) {
@@ -3824,7 +3760,7 @@
                 tr = document2.createElement("tr");
                 trChild = document2.createElement("div");
                 table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate";
-                tr.style.cssText = "border:1px solid";
+                tr.style.cssText = "box-sizing:content-box;border:1px solid";
                 tr.style.height = "1px";
                 trChild.style.height = "9px";
                 trChild.style.display = "block";
@@ -3838,10 +3774,13 @@
           });
         })();
         function curCSS(elem, name, computed) {
-          var width, minWidth, maxWidth, ret, style = elem.style;
+          var width, minWidth, maxWidth, ret, isCustomProp = rcustomProp.test(name), style = elem.style;
           computed = computed || getStyles(elem);
           if (computed) {
             ret = computed.getPropertyValue(name) || computed[name];
+            if (isCustomProp && ret) {
+              ret = ret.replace(rtrimCSS, "$1") || void 0;
+            }
             if (ret === "" && !isAttached(elem)) {
               ret = jQuery.style(elem, name);
             }
@@ -3893,7 +3832,7 @@
           }
           return vendorProps[name] = vendorPropName(name) || name;
         }
-        var rdisplayswap = /^(none|table(?!-c[ea]).+)/, rcustomProp = /^--/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = {
+        var rdisplayswap = /^(none|table(?!-c[ea]).+)/, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = {
           letterSpacing: "0",
           fontWeight: "400"
         };
@@ -3905,13 +3844,13 @@
           ) : value;
         }
         function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {
-          var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0;
+          var i = dimension === "width" ? 1 : 0, extra = 0, delta = 0, marginDelta = 0;
           if (box === (isBorderBox ? "border" : "content")) {
             return 0;
           }
           for (; i < 4; i += 2) {
             if (box === "margin") {
-              delta += jQuery.css(elem, box + cssExpand[i], true, styles);
+              marginDelta += jQuery.css(elem, box + cssExpand[i], true, styles);
             }
             if (!isBorderBox) {
               delta += jQuery.css(elem, "padding" + cssExpand[i], true, styles);
@@ -3936,7 +3875,7 @@
               // Use an explicit zero to avoid NaN (gh-3964)
             )) || 0;
           }
-          return delta;
+          return delta + marginDelta;
         }
         function getWidthOrHeight(elem, dimension, extra) {
           var styles = getStyles(elem), boxSizingNeeded = !support.boxSizingReliable() || extra, isBorderBox = boxSizingNeeded && jQuery.css(elem, "boxSizing", false, styles) === "border-box", valueIsBorderBox = isBorderBox, val = curCSS(elem, dimension, styles), offsetProp = "offset" + dimension[0].toUpperCase() + dimension.slice(1);
@@ -3988,26 +3927,34 @@
           },
           // Don't automatically add "px" to these possibly-unitless properties
           cssNumber: {
-            "animationIterationCount": true,
-            "columnCount": true,
-            "fillOpacity": true,
-            "flexGrow": true,
-            "flexShrink": true,
-            "fontWeight": true,
-            "gridArea": true,
-            "gridColumn": true,
-            "gridColumnEnd": true,
-            "gridColumnStart": true,
-            "gridRow": true,
-            "gridRowEnd": true,
-            "gridRowStart": true,
-            "lineHeight": true,
-            "opacity": true,
-            "order": true,
-            "orphans": true,
-            "widows": true,
-            "zIndex": true,
-            "zoom": true
+            animationIterationCount: true,
+            aspectRatio: true,
+            borderImageSlice: true,
+            columnCount: true,
+            flexGrow: true,
+            flexShrink: true,
+            fontWeight: true,
+            gridArea: true,
+            gridColumn: true,
+            gridColumnEnd: true,
+            gridColumnStart: true,
+            gridRow: true,
+            gridRowEnd: true,
+            gridRowStart: true,
+            lineHeight: true,
+            opacity: true,
+            order: true,
+            orphans: true,
+            scale: true,
+            widows: true,
+            zIndex: true,
+            zoom: true,
+            // SVG-related
+            fillOpacity: true,
+            floodOpacity: true,
+            stopOpacity: true,
+            strokeMiterlimit: true,
+            strokeOpacity: true
           },
           // Add in properties whose names you wish to fix before
           // setting or getting the value
@@ -4910,84 +4857,83 @@
         }
         jQuery.fn.extend({
           addClass: function(value) {
-            var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;
+            var classNames, cur, curValue, className, i, finalValue;
             if (isFunction(value)) {
-              return this.each(function(j2) {
-                jQuery(this).addClass(value.call(this, j2, getClass(this)));
+              return this.each(function(j) {
+                jQuery(this).addClass(value.call(this, j, getClass(this)));
               });
             }
-            classes = classesToArray(value);
-            if (classes.length) {
-              while (elem = this[i++]) {
-                curValue = getClass(elem);
-                cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
+            classNames = classesToArray(value);
+            if (classNames.length) {
+              return this.each(function() {
+                curValue = getClass(this);
+                cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
                 if (cur) {
-                  j = 0;
-                  while (clazz = classes[j++]) {
-                    if (cur.indexOf(" " + clazz + " ") < 0) {
-                      cur += clazz + " ";
+                  for (i = 0; i < classNames.length; i++) {
+                    className = classNames[i];
+                    if (cur.indexOf(" " + className + " ") < 0) {
+                      cur += className + " ";
                     }
                   }
                   finalValue = stripAndCollapse(cur);
                   if (curValue !== finalValue) {
-                    elem.setAttribute("class", finalValue);
+                    this.setAttribute("class", finalValue);
                   }
                 }
-              }
+              });
             }
             return this;
           },
           removeClass: function(value) {
-            var classes, elem, cur, curValue, clazz, j, finalValue, i = 0;
+            var classNames, cur, curValue, className, i, finalValue;
             if (isFunction(value)) {
-              return this.each(function(j2) {
-                jQuery(this).removeClass(value.call(this, j2, getClass(this)));
+              return this.each(function(j) {
+                jQuery(this).removeClass(value.call(this, j, getClass(this)));
               });
             }
             if (!arguments.length) {
               return this.attr("class", "");
             }
-            classes = classesToArray(value);
-            if (classes.length) {
-              while (elem = this[i++]) {
-                curValue = getClass(elem);
-                cur = elem.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
+            classNames = classesToArray(value);
+            if (classNames.length) {
+              return this.each(function() {
+                curValue = getClass(this);
+                cur = this.nodeType === 1 && " " + stripAndCollapse(curValue) + " ";
                 if (cur) {
-                  j = 0;
-                  while (clazz = classes[j++]) {
-                    while (cur.indexOf(" " + clazz + " ") > -1) {
-                      cur = cur.replace(" " + clazz + " ", " ");
+                  for (i = 0; i < classNames.length; i++) {
+                    className = classNames[i];
+                    while (cur.indexOf(" " + className + " ") > -1) {
+                      cur = cur.replace(" " + className + " ", " ");
                     }
                   }
                   finalValue = stripAndCollapse(cur);
                   if (curValue !== finalValue) {
-                    elem.setAttribute("class", finalValue);
+                    this.setAttribute("class", finalValue);
                   }
                 }
-              }
+              });
             }
             return this;
           },
           toggleClass: function(value, stateVal) {
-            var type = typeof value, isValidValue = type === "string" || Array.isArray(value);
-            if (typeof stateVal === "boolean" && isValidValue) {
-              return stateVal ? this.addClass(value) : this.removeClass(value);
-            }
+            var classNames, className, i, self2, type = typeof value, isValidValue = type === "string" || Array.isArray(value);
             if (isFunction(value)) {
-              return this.each(function(i) {
+              return this.each(function(i2) {
                 jQuery(this).toggleClass(
-                  value.call(this, i, getClass(this), stateVal),
+                  value.call(this, i2, getClass(this), stateVal),
                   stateVal
                 );
               });
             }
+            if (typeof stateVal === "boolean" && isValidValue) {
+              return stateVal ? this.addClass(value) : this.removeClass(value);
+            }
+            classNames = classesToArray(value);
             return this.each(function() {
-              var className, i, self2, classNames;
               if (isValidValue) {
-                i = 0;
                 self2 = jQuery(this);
-                classNames = classesToArray(value);
-                while (className = classNames[i++]) {
+                for (i = 0; i < classNames.length; i++) {
+                  className = classNames[i];
                   if (self2.hasClass(className)) {
                     self2.removeClass(className);
                   } else {
@@ -5071,7 +5017,7 @@
                 var val = jQuery.find.attr(elem, "value");
                 return val != null ? val : (
                   // Support: IE <=10 - 11 only
-                  // option.text throws exceptions (#14686, #14858)
+                  // option.text throws exceptions (trac-14686, trac-14858)
                   // Strip and collapse whitespace
                   // https://html.spec.whatwg.org/#strip-and-collapse-whitespace
                   stripAndCollapse(jQuery.text(elem))
@@ -5129,7 +5075,26 @@
             };
           }
         });
-        support.focusin = "onfocusin" in window2;
+        var location2 = window2.location;
+        var nonce = { guid: Date.now() };
+        var rquery = /\?/;
+        jQuery.parseXML = function(data) {
+          var xml, parserErrorElem;
+          if (!data || typeof data !== "string") {
+            return null;
+          }
+          try {
+            xml = new window2.DOMParser().parseFromString(data, "text/xml");
+          } catch (e) {
+          }
+          parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
+          if (!xml || parserErrorElem) {
+            jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {
+              return el.textContent;
+            }).join("\n") : data));
+          }
+          return xml;
+        };
         var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, stopPropagationCallback = function(e) {
           e.stopPropagation();
         };
@@ -5243,51 +5208,6 @@
             }
           }
         });
-        if (!support.focusin) {
-          jQuery.each({ focus: "focusin", blur: "focusout" }, function(orig, fix) {
-            var handler = function(event) {
-              jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));
-            };
-            jQuery.event.special[fix] = {
-              setup: function() {
-                var doc2 = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc2, fix);
-                if (!attaches) {
-                  doc2.addEventListener(orig, handler, true);
-                }
-                dataPriv.access(doc2, fix, (attaches || 0) + 1);
-              },
-              teardown: function() {
-                var doc2 = this.ownerDocument || this.document || this, attaches = dataPriv.access(doc2, fix) - 1;
-                if (!attaches) {
-                  doc2.removeEventListener(orig, handler, true);
-                  dataPriv.remove(doc2, fix);
-                } else {
-                  dataPriv.access(doc2, fix, attaches);
-                }
-              }
-            };
-          });
-        }
-        var location2 = window2.location;
-        var nonce = { guid: Date.now() };
-        var rquery = /\?/;
-        jQuery.parseXML = function(data) {
-          var xml, parserErrorElem;
-          if (!data || typeof data !== "string") {
-            return null;
-          }
-          try {
-            xml = new window2.DOMParser().parseFromString(data, "text/xml");
-          } catch (e) {
-          }
-          parserErrorElem = xml && xml.getElementsByTagName("parsererror")[0];
-          if (!xml || parserErrorElem) {
-            jQuery.error("Invalid XML: " + (parserErrorElem ? jQuery.map(parserErrorElem.childNodes, function(el) {
-              return el.textContent;
-            }).join("\n") : data));
-          }
-          return xml;
-        };
         var rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i;
         function buildParams(prefix, obj, traditional, add) {
           var name;
@@ -5849,7 +5769,7 @@
         jQuery._evalUrl = function(url, options, doc2) {
           return jQuery.ajax({
             url,
-            // Make this explicit, since user can override this through ajaxSetup (#11264)
+            // Make this explicit, since user can override this through ajaxSetup (trac-11264)
             type: "GET",
             dataType: "script",
             cache: true,
@@ -5932,7 +5852,7 @@
           // File protocol always yields status code 0, assume 200
           0: 200,
           // Support: IE <=9 only
-          // #1450: sometimes IE returns 1223 when it should be 204
+          // trac-1450: sometimes IE returns 1223 when it should be 204
           1223: 204
         }, xhrSupported = jQuery.ajaxSettings.xhr();
         support.cors = !!xhrSupported && "withCredentials" in xhrSupported;
@@ -5975,7 +5895,7 @@
                           complete(0, "error");
                         } else {
                           complete(
-                            // File: protocol always yields status 0; see #8605, #14207
+                            // File: protocol always yields status 0; see trac-8605, trac-14207
                             xhr.status,
                             xhr.statusText
                           );
@@ -6399,7 +6319,7 @@
             return arguments.length === 1 ? this.off(selector, "**") : this.off(types, selector || "**", fn2);
           },
           hover: function(fnOver, fnOut) {
-            return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);
+            return this.on("mouseenter", fnOver).on("mouseleave", fnOut || fnOver);
           }
         });
         jQuery.each(
@@ -6410,7 +6330,7 @@
             };
           }
         );
-        var rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
+        var rtrim = /^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;
         jQuery.proxy = function(fn2, context) {
           var tmp, args, proxy;
           if (typeof context === "string") {
@@ -6451,7 +6371,7 @@
           !isNaN(obj - parseFloat(obj));
         };
         jQuery.trim = function(text) {
-          return text == null ? "" : (text + "").replace(rtrim, "");
+          return text == null ? "" : (text + "").replace(rtrim, "$1");
         };
         if (typeof define === "function" && define.amd) {
           define("jquery", [], function() {
@@ -22193,7 +22113,7 @@
           "punctuation": punctuation,
           "string": string
         };
-        var format2 = {
+        var format = {
           pattern: /\b(?:format|put)\b=?[\w'$.]+/i,
           inside: {
             "keyword": /^(?:format|put)(?==)/i,
@@ -22359,7 +22279,7 @@
               "step": step,
               "keyword": keywords,
               "function": func,
-              "format": format2,
+              "format": format,
               "altformat": altformat,
               "global-statements": globalStatements,
               "number": number,
@@ -22431,7 +22351,7 @@
           "cas-actions": casActions,
           "comment": comment,
           "function": func,
-          "format": format2,
+          "format": format,
           "altformat": altformat,
           "numeric-constant": numericConstant,
           "datetime": {
@@ -26477,7 +26397,7 @@
   // node_modules/@popperjs/core/lib/utils/userAgent.js
   function getUAString() {
     var uaData = navigator.userAgentData;
-    if (uaData != null && uaData.brands) {
+    if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) {
       return uaData.brands.map(function(item) {
         return item.brand + "/" + item.version;
       }).join(" ");
@@ -26721,15 +26641,7 @@
         return;
       }
     }
-    if (true) {
-      if (!isHTMLElement(arrowElement)) {
-        console.error(['Popper: "arrow" element must be an HTMLElement (not an SVGElement).', "To use an SVG arrow, wrap it in an HTMLElement that will be used as", "the arrow."].join(" "));
-      }
-    }
     if (!contains(state.elements.popper, arrowElement)) {
-      if (true) {
-        console.error(['Popper: "arrow" modifier\'s `element` must be a child of the popper', "element."].join(" "));
-      }
       return;
     }
     state.elements.arrow = arrowElement;
@@ -26756,9 +26668,8 @@
     bottom: "auto",
     left: "auto"
   };
-  function roundOffsetsByDPR(_ref) {
+  function roundOffsetsByDPR(_ref, win) {
     var x = _ref.x, y = _ref.y;
-    var win = window;
     var dpr = win.devicePixelRatio || 1;
     return {
       x: round(x * dpr) / dpr || 0,
@@ -26820,7 +26731,7 @@
     var _ref4 = roundOffsets === true ? roundOffsetsByDPR({
       x,
       y
-    }) : {
+    }, getWindow(popper2)) : {
       x,
       y
     };
@@ -26835,14 +26746,6 @@
   function computeStyles(_ref5) {
     var state = _ref5.state, options = _ref5.options;
     var _options$gpuAccelerat = options.gpuAcceleration, gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, _options$adaptive = options.adaptive, adaptive = _options$adaptive === void 0 ? true : _options$adaptive, _options$roundOffsets = options.roundOffsets, roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
-    if (true) {
-      var transitionProperty = getComputedStyle2(state.elements.popper).transitionProperty || "";
-      if (adaptive && ["transform", "top", "right", "bottom", "left"].some(function(property) {
-        return transitionProperty.indexOf(property) >= 0;
-      })) {
-        console.warn(["Popper: Detected CSS transitions on at least one of the following", 'CSS properties: "transform", "top", "right", "bottom", "left".', "\n\n", 'Disable the "computeStyles" modifier\'s `adaptive` option to allow', "for smooth transitions, or remove these properties from the CSS", "transition declaration on the popper element if only transitioning", "opacity or background-color for example.", "\n\n", "We recommend using the popper element as a wrapper around an inner", "element that can have any CSS property transitioned for animations."].join(" "));
-      }
-    }
     var commonStyles = {
       placement: getBasePlacement(state.placement),
       variation: getVariation(state.placement),
@@ -27202,9 +27105,6 @@
     });
     if (allowedPlacements.length === 0) {
       allowedPlacements = placements2;
-      if (true) {
-        console.error(["Popper: The `allowedAutoPlacements` option did not allow any", "placements. Ensure the `placement` option matches the variation", "of the allowed placements.", 'For example, "auto" cannot be used to allow "bottom-start".', 'Use "auto-start" instead.'].join(" "));
-      }
     }
     var overflows = allowedPlacements.reduce(function(acc, placement2) {
       acc[placement2] = detectOverflow(state, {
@@ -27649,92 +27549,6 @@
     };
   }
 
-  // node_modules/@popperjs/core/lib/utils/format.js
-  function format(str) {
-    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
-      args[_key - 1] = arguments[_key];
-    }
-    return [].concat(args).reduce(function(p, c) {
-      return p.replace(/%s/, c);
-    }, str);
-  }
-
-  // node_modules/@popperjs/core/lib/utils/validateModifiers.js
-  var INVALID_MODIFIER_ERROR = 'Popper: modifier "%s" provided an invalid %s property, expected %s but got %s';
-  var MISSING_DEPENDENCY_ERROR = 'Popper: modifier "%s" requires "%s", but "%s" modifier is not available';
-  var VALID_PROPERTIES = ["name", "enabled", "phase", "fn", "effect", "requires", "options"];
-  function validateModifiers(modifiers) {
-    modifiers.forEach(function(modifier) {
-      [].concat(Object.keys(modifier), VALID_PROPERTIES).filter(function(value, index, self2) {
-        return self2.indexOf(value) === index;
-      }).forEach(function(key) {
-        switch (key) {
-          case "name":
-            if (typeof modifier.name !== "string") {
-              console.error(format(INVALID_MODIFIER_ERROR, String(modifier.name), '"name"', '"string"', '"' + String(modifier.name) + '"'));
-            }
-            break;
-          case "enabled":
-            if (typeof modifier.enabled !== "boolean") {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"enabled"', '"boolean"', '"' + String(modifier.enabled) + '"'));
-            }
-            break;
-          case "phase":
-            if (modifierPhases.indexOf(modifier.phase) < 0) {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"phase"', "either " + modifierPhases.join(", "), '"' + String(modifier.phase) + '"'));
-            }
-            break;
-          case "fn":
-            if (typeof modifier.fn !== "function") {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"fn"', '"function"', '"' + String(modifier.fn) + '"'));
-            }
-            break;
-          case "effect":
-            if (modifier.effect != null && typeof modifier.effect !== "function") {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"effect"', '"function"', '"' + String(modifier.fn) + '"'));
-            }
-            break;
-          case "requires":
-            if (modifier.requires != null && !Array.isArray(modifier.requires)) {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requires"', '"array"', '"' + String(modifier.requires) + '"'));
-            }
-            break;
-          case "requiresIfExists":
-            if (!Array.isArray(modifier.requiresIfExists)) {
-              console.error(format(INVALID_MODIFIER_ERROR, modifier.name, '"requiresIfExists"', '"array"', '"' + String(modifier.requiresIfExists) + '"'));
-            }
-            break;
-          case "options":
-          case "data":
-            break;
-          default:
-            console.error('PopperJS: an invalid property has been provided to the "' + modifier.name + '" modifier, valid properties are ' + VALID_PROPERTIES.map(function(s) {
-              return '"' + s + '"';
-            }).join(", ") + '; but "' + key + '" was provided.');
-        }
-        modifier.requires && modifier.requires.forEach(function(requirement) {
-          if (modifiers.find(function(mod) {
-            return mod.name === requirement;
-          }) == null) {
-            console.error(format(MISSING_DEPENDENCY_ERROR, String(modifier.name), requirement, requirement));
-          }
-        });
-      });
-    });
-  }
-
-  // node_modules/@popperjs/core/lib/utils/uniqueBy.js
-  function uniqueBy(arr, fn2) {
-    var identifiers = /* @__PURE__ */ new Set();
-    return arr.filter(function(item) {
-      var identifier = fn2(item);
-      if (!identifiers.has(identifier)) {
-        identifiers.add(identifier);
-        return true;
-      }
-    });
-  }
-
   // node_modules/@popperjs/core/lib/utils/mergeByName.js
   function mergeByName(modifiers) {
     var merged = modifiers.reduce(function(merged2, current) {
@@ -27751,8 +27565,6 @@
   }
 
   // node_modules/@popperjs/core/lib/createPopper.js
-  var INVALID_ELEMENT_ERROR = "Popper: Invalid reference or popper argument provided. They must be either a DOM element or virtual element.";
-  var INFINITE_LOOP_ERROR = "Popper: An infinite loop in the modifiers cycle has been detected! The cycle has been interrupted to prevent a browser crash.";
   var DEFAULT_OPTIONS = {
     placement: "bottom",
     modifiers: [],
@@ -27803,28 +27615,6 @@
           state.orderedModifiers = orderedModifiers.filter(function(m) {
             return m.enabled;
           });
-          if (true) {
-            var modifiers = uniqueBy([].concat(orderedModifiers, state.options.modifiers), function(_ref) {
-              var name = _ref.name;
-              return name;
-            });
-            validateModifiers(modifiers);
-            if (getBasePlacement(state.options.placement) === auto) {
-              var flipModifier = state.orderedModifiers.find(function(_ref2) {
-                var name = _ref2.name;
-                return name === "flip";
-              });
-              if (!flipModifier) {
-                console.error(['Popper: "auto" placements require the "flip" modifier be', "present and enabled to work."].join(" "));
-              }
-            }
-            var _getComputedStyle = getComputedStyle2(popper2), marginTop = _getComputedStyle.marginTop, marginRight = _getComputedStyle.marginRight, marginBottom = _getComputedStyle.marginBottom, marginLeft = _getComputedStyle.marginLeft;
-            if ([marginTop, marginRight, marginBottom, marginLeft].some(function(margin) {
-              return parseFloat(margin);
-            })) {
-              console.warn(['Popper: CSS "margin" styles cannot be used to apply padding', "between the popper and its reference element or boundary.", "To replicate margin, use the `offset` modifier, as well as", "the `padding` option in the `preventOverflow` and `flip`", "modifiers."].join(" "));
-            }
-          }
           runModifierEffects();
           return instance.update();
         },
@@ -27839,9 +27629,6 @@
           }
           var _state$elements = state.elements, reference3 = _state$elements.reference, popper3 = _state$elements.popper;
           if (!areValidElements(reference3, popper3)) {
-            if (true) {
-              console.error(INVALID_ELEMENT_ERROR);
-            }
             return;
           }
           state.rects = {
@@ -27853,15 +27640,7 @@
           state.orderedModifiers.forEach(function(modifier) {
             return state.modifiersData[modifier.name] = Object.assign({}, modifier.data);
           });
-          var __debug_loops__ = 0;
           for (var index = 0; index < state.orderedModifiers.length; index++) {
-            if (true) {
-              __debug_loops__ += 1;
-              if (__debug_loops__ > 100) {
-                console.error(INFINITE_LOOP_ERROR);
-                break;
-              }
-            }
             if (state.reset === true) {
               state.reset = false;
               index = -1;
@@ -27892,9 +27671,6 @@
         }
       };
       if (!areValidElements(reference2, popper2)) {
-        if (true) {
-          console.error(INVALID_ELEMENT_ERROR);
-        }
         return instance;
       }
       instance.setOptions(options).then(function(state2) {
@@ -27903,8 +27679,8 @@
         }
       });
       function runModifierEffects() {
-        state.orderedModifiers.forEach(function(_ref3) {
-          var name = _ref3.name, _ref3$options = _ref3.options, options2 = _ref3$options === void 0 ? {} : _ref3$options, effect4 = _ref3.effect;
+        state.orderedModifiers.forEach(function(_ref) {
+          var name = _ref.name, _ref$options = _ref.options, options2 = _ref$options === void 0 ? {} : _ref$options, effect4 = _ref.effect;
           if (typeof effect4 === "function") {
             var cleanupFn = effect4({
               state,
@@ -27942,9 +27718,45 @@
   });
 
   // node_modules/bootstrap/dist/js/bootstrap.esm.js
+  var elementMap = /* @__PURE__ */ new Map();
+  var Data = {
+    set(element, key, instance) {
+      if (!elementMap.has(element)) {
+        elementMap.set(element, /* @__PURE__ */ new Map());
+      }
+      const instanceMap = elementMap.get(element);
+      if (!instanceMap.has(key) && instanceMap.size !== 0) {
+        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
+        return;
+      }
+      instanceMap.set(key, instance);
+    },
+    get(element, key) {
+      if (elementMap.has(element)) {
+        return elementMap.get(element).get(key) || null;
+      }
+      return null;
+    },
+    remove(element, key) {
+      if (!elementMap.has(element)) {
+        return;
+      }
+      const instanceMap = elementMap.get(element);
+      instanceMap.delete(key);
+      if (instanceMap.size === 0) {
+        elementMap.delete(element);
+      }
+    }
+  };
   var MAX_UID = 1e6;
   var MILLISECONDS_MULTIPLIER = 1e3;
   var TRANSITION_END = "transitionend";
+  var parseSelector = (selector) => {
+    if (selector && window.CSS && window.CSS.escape) {
+      selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`);
+    }
+    return selector;
+  };
   var toType = (object) => {
     if (object === null || object === void 0) {
       return `${object}`;
@@ -27957,31 +27769,6 @@
     } while (document.getElementById(prefix));
     return prefix;
   };
-  var getSelector = (element) => {
-    let selector = element.getAttribute("data-bs-target");
-    if (!selector || selector === "#") {
-      let hrefAttribute = element.getAttribute("href");
-      if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) {
-        return null;
-      }
-      if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) {
-        hrefAttribute = `#${hrefAttribute.split("#")[1]}`;
-      }
-      selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null;
-    }
-    return selector;
-  };
-  var getSelectorFromElement = (element) => {
-    const selector = getSelector(element);
-    if (selector) {
-      return document.querySelector(selector) ? selector : null;
-    }
-    return null;
-  };
-  var getElementFromSelector = (element) => {
-    const selector = getSelector(element);
-    return selector ? document.querySelector(selector) : null;
-  };
   var getTransitionDurationFromElement = (element) => {
     if (!element) {
       return 0;
@@ -28016,7 +27803,7 @@
       return object.jquery ? object[0] : object;
     }
     if (typeof object === "string" && object.length > 0) {
-      return document.querySelector(object);
+      return document.querySelector(parseSelector(object));
     }
     return null;
   };
@@ -28110,10 +27897,8 @@
       }
     });
   };
-  var execute = (callback) => {
-    if (typeof callback === "function") {
-      callback();
-    }
+  var execute = (possibleCallback, args = [], defaultValue = possibleCallback) => {
+    return typeof possibleCallback === "function" ? possibleCallback(...args) : defaultValue;
   };
   var executeAfterTransition = (callback, transitionElement, waitForTransition = true) => {
     if (!waitForTransition) {
@@ -28256,9 +28041,8 @@
   }
   function removeNamespacedHandlers(element, events, typeEvent, namespace) {
     const storeElementEvent = events[typeEvent] || {};
-    for (const handlerKey of Object.keys(storeElementEvent)) {
+    for (const [handlerKey, event] of Object.entries(storeElementEvent)) {
       if (handlerKey.includes(namespace)) {
-        const event = storeElementEvent[handlerKey];
         removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
       }
     }
@@ -28295,10 +28079,9 @@
           removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1));
         }
       }
-      for (const keyHandlers of Object.keys(storeElementEvent)) {
+      for (const [keyHandlers, event] of Object.entries(storeElementEvent)) {
         const handlerKey = keyHandlers.replace(stripUidRegex, "");
         if (!inNamespace || originalTypeEvent.includes(handlerKey)) {
-          const event = storeElementEvent[keyHandlers];
           removeHandler(element, events, typeEvent, event.callable, event.delegationSelector);
         }
       }
@@ -28321,11 +28104,10 @@
         nativeDispatch = !jQueryEvent.isImmediatePropagationStopped();
         defaultPrevented = jQueryEvent.isDefaultPrevented();
       }
-      let evt = new Event(event, {
+      const evt = hydrateObj(new Event(event, {
         bubbles,
         cancelable: true
-      });
-      evt = hydrateObj(evt, args);
+      }), args);
       if (defaultPrevented) {
         evt.preventDefault();
       }
@@ -28338,8 +28120,8 @@
       return evt;
     }
   };
-  function hydrateObj(obj, meta) {
-    for (const [key, value] of Object.entries(meta || {})) {
+  function hydrateObj(obj, meta = {}) {
+    for (const [key, value] of Object.entries(meta)) {
       try {
         obj[key] = value;
       } catch (_unused) {
@@ -28353,36 +28135,6 @@
     }
     return obj;
   }
-  var elementMap = /* @__PURE__ */ new Map();
-  var Data = {
-    set(element, key, instance) {
-      if (!elementMap.has(element)) {
-        elementMap.set(element, /* @__PURE__ */ new Map());
-      }
-      const instanceMap = elementMap.get(element);
-      if (!instanceMap.has(key) && instanceMap.size !== 0) {
-        console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`);
-        return;
-      }
-      instanceMap.set(key, instance);
-    },
-    get(element, key) {
-      if (elementMap.has(element)) {
-        return elementMap.get(element).get(key) || null;
-      }
-      return null;
-    },
-    remove(element, key) {
-      if (!elementMap.has(element)) {
-        return;
-      }
-      const instanceMap = elementMap.get(element);
-      instanceMap.delete(key);
-      if (instanceMap.size === 0) {
-        elementMap.delete(element);
-      }
-    }
-  };
   function normalizeData(value) {
     if (value === "true") {
       return true;
@@ -28457,8 +28209,7 @@
       return __spreadValues(__spreadValues(__spreadValues(__spreadValues({}, this.constructor.Default), typeof jsonConfig === "object" ? jsonConfig : {}), isElement2(element) ? Manipulator.getDataAttributes(element) : {}), typeof config === "object" ? config : {});
     }
     _typeCheckConfig(config, configTypes = this.constructor.DefaultType) {
-      for (const property of Object.keys(configTypes)) {
-        const expectedTypes = configTypes[property];
+      for (const [property, expectedTypes] of Object.entries(configTypes)) {
         const value = config[property];
         const valueType = isElement2(value) ? "element" : toType(value);
         if (!new RegExp(expectedTypes).test(valueType)) {
@@ -28467,7 +28218,7 @@
       }
     }
   };
-  var VERSION = "5.2.3";
+  var VERSION = "5.3.3";
   var BaseComponent = class extends Config {
     constructor(element, config) {
       super();
@@ -28516,98 +28267,20 @@
       return `${name}${this.EVENT_KEY}`;
     }
   };
-  var enableDismissTrigger = (component, method = "hide") => {
-    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
-    const name = component.NAME;
-    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) {
-      if (["A", "AREA"].includes(this.tagName)) {
-        event.preventDefault();
-      }
-      if (isDisabled(this)) {
-        return;
+  var getSelector = (element) => {
+    let selector = element.getAttribute("data-bs-target");
+    if (!selector || selector === "#") {
+      let hrefAttribute = element.getAttribute("href");
+      if (!hrefAttribute || !hrefAttribute.includes("#") && !hrefAttribute.startsWith(".")) {
+        return null;
       }
-      const target = getElementFromSelector(this) || this.closest(`.${name}`);
-      const instance = component.getOrCreateInstance(target);
-      instance[method]();
-    });
-  };
-  var NAME$f = "alert";
-  var DATA_KEY$a = "bs.alert";
-  var EVENT_KEY$b = `.${DATA_KEY$a}`;
-  var EVENT_CLOSE = `close${EVENT_KEY$b}`;
-  var EVENT_CLOSED = `closed${EVENT_KEY$b}`;
-  var CLASS_NAME_FADE$5 = "fade";
-  var CLASS_NAME_SHOW$8 = "show";
-  var Alert = class _Alert extends BaseComponent {
-    // Getters
-    static get NAME() {
-      return NAME$f;
-    }
-    // Public
-    close() {
-      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
-      if (closeEvent.defaultPrevented) {
-        return;
+      if (hrefAttribute.includes("#") && !hrefAttribute.startsWith("#")) {
+        hrefAttribute = `#${hrefAttribute.split("#")[1]}`;
       }
-      this._element.classList.remove(CLASS_NAME_SHOW$8);
-      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
-      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
-    }
-    // Private
-    _destroyElement() {
-      this._element.remove();
-      EventHandler.trigger(this._element, EVENT_CLOSED);
-      this.dispose();
-    }
-    // Static
-    static jQueryInterface(config) {
-      return this.each(function() {
-        const data = _Alert.getOrCreateInstance(this);
-        if (typeof config !== "string") {
-          return;
-        }
-        if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
-          throw new TypeError(`No method named "${config}"`);
-        }
-        data[config](this);
-      });
-    }
-  };
-  enableDismissTrigger(Alert, "close");
-  defineJQueryPlugin(Alert);
-  var NAME$e = "button";
-  var DATA_KEY$9 = "bs.button";
-  var EVENT_KEY$a = `.${DATA_KEY$9}`;
-  var DATA_API_KEY$6 = ".data-api";
-  var CLASS_NAME_ACTIVE$3 = "active";
-  var SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
-  var EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
-  var Button = class _Button extends BaseComponent {
-    // Getters
-    static get NAME() {
-      return NAME$e;
-    }
-    // Public
-    toggle() {
-      this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
-    }
-    // Static
-    static jQueryInterface(config) {
-      return this.each(function() {
-        const data = _Button.getOrCreateInstance(this);
-        if (config === "toggle") {
-          data[config]();
-        }
-      });
+      selector = hrefAttribute && hrefAttribute !== "#" ? hrefAttribute.trim() : null;
     }
+    return selector ? selector.split(",").map((sel) => parseSelector(sel)).join(",") : null;
   };
-  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, (event) => {
-    event.preventDefault();
-    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
-    const data = Button.getOrCreateInstance(button);
-    data.toggle();
-  });
-  defineJQueryPlugin(Button);
   var SelectorEngine = {
     find(selector, element = document.documentElement) {
       return [].concat(...Element.prototype.querySelectorAll.call(element, selector));
@@ -28651,8 +28324,115 @@
     focusableChildren(element) {
       const focusables = ["a", "button", "input", "textarea", "select", "details", "[tabindex]", '[contenteditable="true"]'].map((selector) => `${selector}:not([tabindex^="-"])`).join(",");
       return this.find(focusables, element).filter((el) => !isDisabled(el) && isVisible(el));
+    },
+    getSelectorFromElement(element) {
+      const selector = getSelector(element);
+      if (selector) {
+        return SelectorEngine.findOne(selector) ? selector : null;
+      }
+      return null;
+    },
+    getElementFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.findOne(selector) : null;
+    },
+    getMultipleElementsFromSelector(element) {
+      const selector = getSelector(element);
+      return selector ? SelectorEngine.find(selector) : [];
     }
   };
+  var enableDismissTrigger = (component, method = "hide") => {
+    const clickEvent = `click.dismiss${component.EVENT_KEY}`;
+    const name = component.NAME;
+    EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function(event) {
+      if (["A", "AREA"].includes(this.tagName)) {
+        event.preventDefault();
+      }
+      if (isDisabled(this)) {
+        return;
+      }
+      const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`);
+      const instance = component.getOrCreateInstance(target);
+      instance[method]();
+    });
+  };
+  var NAME$f = "alert";
+  var DATA_KEY$a = "bs.alert";
+  var EVENT_KEY$b = `.${DATA_KEY$a}`;
+  var EVENT_CLOSE = `close${EVENT_KEY$b}`;
+  var EVENT_CLOSED = `closed${EVENT_KEY$b}`;
+  var CLASS_NAME_FADE$5 = "fade";
+  var CLASS_NAME_SHOW$8 = "show";
+  var Alert = class _Alert extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$f;
+    }
+    // Public
+    close() {
+      const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE);
+      if (closeEvent.defaultPrevented) {
+        return;
+      }
+      this._element.classList.remove(CLASS_NAME_SHOW$8);
+      const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5);
+      this._queueCallback(() => this._destroyElement(), this._element, isAnimated);
+    }
+    // Private
+    _destroyElement() {
+      this._element.remove();
+      EventHandler.trigger(this._element, EVENT_CLOSED);
+      this.dispose();
+    }
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function() {
+        const data = _Alert.getOrCreateInstance(this);
+        if (typeof config !== "string") {
+          return;
+        }
+        if (data[config] === void 0 || config.startsWith("_") || config === "constructor") {
+          throw new TypeError(`No method named "${config}"`);
+        }
+        data[config](this);
+      });
+    }
+  };
+  enableDismissTrigger(Alert, "close");
+  defineJQueryPlugin(Alert);
+  var NAME$e = "button";
+  var DATA_KEY$9 = "bs.button";
+  var EVENT_KEY$a = `.${DATA_KEY$9}`;
+  var DATA_API_KEY$6 = ".data-api";
+  var CLASS_NAME_ACTIVE$3 = "active";
+  var SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]';
+  var EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`;
+  var Button = class _Button extends BaseComponent {
+    // Getters
+    static get NAME() {
+      return NAME$e;
+    }
+    // Public
+    toggle() {
+      this._element.setAttribute("aria-pressed", this._element.classList.toggle(CLASS_NAME_ACTIVE$3));
+    }
+    // Static
+    static jQueryInterface(config) {
+      return this.each(function() {
+        const data = _Button.getOrCreateInstance(this);
+        if (config === "toggle") {
+          data[config]();
+        }
+      });
+    }
+  };
+  EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, (event) => {
+    event.preventDefault();
+    const button = event.target.closest(SELECTOR_DATA_TOGGLE$5);
+    const data = Button.getOrCreateInstance(button);
+    data.toggle();
+  });
+  defineJQueryPlugin(Button);
   var NAME$d = "swipe";
   var EVENT_KEY$9 = ".bs.swipe";
   var EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`;
@@ -29050,7 +28830,7 @@
     }
   };
   EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function(event) {
-    const target = getElementFromSelector(this);
+    const target = SelectorEngine.getElementFromSelector(this);
     if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) {
       return;
     }
@@ -29111,7 +28891,7 @@
       this._triggerArray = [];
       const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4);
       for (const elem of toggleList) {
-        const selector = getSelectorFromElement(elem);
+        const selector = SelectorEngine.getSelectorFromElement(elem);
         const filterElement = SelectorEngine.find(selector).filter((foundElement) => foundElement === this._element);
         if (selector !== null && filterElement.length) {
           this._triggerArray.push(elem);
@@ -29195,7 +28975,7 @@
       this._element.classList.add(CLASS_NAME_COLLAPSING);
       this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7);
       for (const trigger of this._triggerArray) {
-        const element = getElementFromSelector(trigger);
+        const element = SelectorEngine.getElementFromSelector(trigger);
         if (element && !this._isShown(element)) {
           this._addAriaAndCollapsedClass([trigger], false);
         }
@@ -29228,7 +29008,7 @@
       }
       const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4);
       for (const element of children) {
-        const selected = getElementFromSelector(element);
+        const selected = SelectorEngine.getElementFromSelector(element);
         if (selected) {
           this._addAriaAndCollapsedClass([element], this._isShown(selected));
         }
@@ -29268,9 +29048,7 @@
     if (event.target.tagName === "A" || event.delegateTarget && event.delegateTarget.tagName === "A") {
       event.preventDefault();
     }
-    const selector = getSelectorFromElement(this);
-    const selectorElements = SelectorEngine.find(selector);
-    for (const element of selectorElements) {
+    for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) {
       Collapse.getOrCreateInstance(element, {
         toggle: false
       }).toggle();
@@ -29497,7 +29275,7 @@
           enabled: false
         }];
       }
-      return __spreadValues(__spreadValues({}, defaultBsPopperConfig), typeof this._config.popperConfig === "function" ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);
+      return __spreadValues(__spreadValues({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));
     }
     _selectMenuItem({
       key,
@@ -29584,80 +29362,6 @@
     Dropdown.getOrCreateInstance(this).toggle();
   });
   defineJQueryPlugin(Dropdown);
-  var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
-  var SELECTOR_STICKY_CONTENT = ".sticky-top";
-  var PROPERTY_PADDING = "padding-right";
-  var PROPERTY_MARGIN = "margin-right";
-  var ScrollBarHelper = class {
-    constructor() {
-      this._element = document.body;
-    }
-    // Public
-    getWidth() {
-      const documentWidth = document.documentElement.clientWidth;
-      return Math.abs(window.innerWidth - documentWidth);
-    }
-    hide() {
-      const width = this.getWidth();
-      this._disableOverFlow();
-      this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
-      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
-      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width);
-    }
-    reset() {
-      this._resetElementAttributes(this._element, "overflow");
-      this._resetElementAttributes(this._element, PROPERTY_PADDING);
-      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
-      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
-    }
-    isOverflowing() {
-      return this.getWidth() > 0;
-    }
-    // Private
-    _disableOverFlow() {
-      this._saveInitialAttribute(this._element, "overflow");
-      this._element.style.overflow = "hidden";
-    }
-    _setElementAttributes(selector, styleProperty, callback) {
-      const scrollbarWidth = this.getWidth();
-      const manipulationCallBack = (element) => {
-        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
-          return;
-        }
-        this._saveInitialAttribute(element, styleProperty);
-        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
-        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
-      };
-      this._applyManipulationCallback(selector, manipulationCallBack);
-    }
-    _saveInitialAttribute(element, styleProperty) {
-      const actualValue = element.style.getPropertyValue(styleProperty);
-      if (actualValue) {
-        Manipulator.setDataAttribute(element, styleProperty, actualValue);
-      }
-    }
-    _resetElementAttributes(selector, styleProperty) {
-      const manipulationCallBack = (element) => {
-        const value = Manipulator.getDataAttribute(element, styleProperty);
-        if (value === null) {
-          element.style.removeProperty(styleProperty);
-          return;
-        }
-        Manipulator.removeDataAttribute(element, styleProperty);
-        element.style.setProperty(styleProperty, value);
-      };
-      this._applyManipulationCallback(selector, manipulationCallBack);
-    }
-    _applyManipulationCallback(selector, callBack) {
-      if (isElement2(selector)) {
-        callBack(selector);
-        return;
-      }
-      for (const sel of SelectorEngine.find(selector, this._element)) {
-        callBack(sel);
-      }
-    }
-  };
   var NAME$9 = "backdrop";
   var CLASS_NAME_FADE$4 = "fade";
   var CLASS_NAME_SHOW$5 = "show";
@@ -29839,6 +29543,80 @@
       this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD;
     }
   };
+  var SELECTOR_FIXED_CONTENT = ".fixed-top, .fixed-bottom, .is-fixed, .sticky-top";
+  var SELECTOR_STICKY_CONTENT = ".sticky-top";
+  var PROPERTY_PADDING = "padding-right";
+  var PROPERTY_MARGIN = "margin-right";
+  var ScrollBarHelper = class {
+    constructor() {
+      this._element = document.body;
+    }
+    // Public
+    getWidth() {
+      const documentWidth = document.documentElement.clientWidth;
+      return Math.abs(window.innerWidth - documentWidth);
+    }
+    hide() {
+      const width = this.getWidth();
+      this._disableOverFlow();
+      this._setElementAttributes(this._element, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
+      this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, (calculatedValue) => calculatedValue + width);
+      this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, (calculatedValue) => calculatedValue - width);
+    }
+    reset() {
+      this._resetElementAttributes(this._element, "overflow");
+      this._resetElementAttributes(this._element, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING);
+      this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN);
+    }
+    isOverflowing() {
+      return this.getWidth() > 0;
+    }
+    // Private
+    _disableOverFlow() {
+      this._saveInitialAttribute(this._element, "overflow");
+      this._element.style.overflow = "hidden";
+    }
+    _setElementAttributes(selector, styleProperty, callback) {
+      const scrollbarWidth = this.getWidth();
+      const manipulationCallBack = (element) => {
+        if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) {
+          return;
+        }
+        this._saveInitialAttribute(element, styleProperty);
+        const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty);
+        element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _saveInitialAttribute(element, styleProperty) {
+      const actualValue = element.style.getPropertyValue(styleProperty);
+      if (actualValue) {
+        Manipulator.setDataAttribute(element, styleProperty, actualValue);
+      }
+    }
+    _resetElementAttributes(selector, styleProperty) {
+      const manipulationCallBack = (element) => {
+        const value = Manipulator.getDataAttribute(element, styleProperty);
+        if (value === null) {
+          element.style.removeProperty(styleProperty);
+          return;
+        }
+        Manipulator.removeDataAttribute(element, styleProperty);
+        element.style.setProperty(styleProperty, value);
+      };
+      this._applyManipulationCallback(selector, manipulationCallBack);
+    }
+    _applyManipulationCallback(selector, callBack) {
+      if (isElement2(selector)) {
+        callBack(selector);
+        return;
+      }
+      for (const sel of SelectorEngine.find(selector, this._element)) {
+        callBack(sel);
+      }
+    }
+  };
   var NAME$7 = "modal";
   var DATA_KEY$4 = "bs.modal";
   var EVENT_KEY$4 = `.${DATA_KEY$4}`;
@@ -29929,9 +29707,8 @@
       this._queueCallback(() => this._hideModal(), this._element, this._isAnimated());
     }
     dispose() {
-      for (const htmlElement of [window, this._dialog]) {
-        EventHandler.off(htmlElement, EVENT_KEY$4);
-      }
+      EventHandler.off(window, EVENT_KEY$4);
+      EventHandler.off(this._dialog, EVENT_KEY$4);
       this._backdrop.dispose();
       this._focustrap.deactivate();
       super.dispose();
@@ -29984,7 +29761,6 @@
           return;
         }
         if (this._config.keyboard) {
-          event.preventDefault();
           this.hide();
           return;
         }
@@ -30083,7 +29859,7 @@
     }
   };
   EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function(event) {
-    const target = getElementFromSelector(this);
+    const target = SelectorEngine.getElementFromSelector(this);
     if (["A", "AREA"].includes(this.tagName)) {
       event.preventDefault();
     }
@@ -30245,11 +30021,11 @@
         if (event.key !== ESCAPE_KEY) {
           return;
         }
-        if (!this._config.keyboard) {
-          EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
+        if (this._config.keyboard) {
+          this.hide();
           return;
         }
-        this.hide();
+        EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED);
       });
     }
     // Static
@@ -30267,7 +30043,7 @@
     }
   };
   EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function(event) {
-    const target = getElementFromSelector(this);
+    const target = SelectorEngine.getElementFromSelector(this);
     if (["A", "AREA"].includes(this.tagName)) {
       event.preventDefault();
     }
@@ -30300,20 +30076,7 @@
   });
   enableDismissTrigger(Offcanvas);
   defineJQueryPlugin(Offcanvas);
-  var uriAttributes = /* @__PURE__ */ new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]);
   var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i;
-  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i;
-  var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;
-  var allowedAttribute = (attribute, allowedAttributeList) => {
-    const attributeName = attribute.nodeName.toLowerCase();
-    if (allowedAttributeList.includes(attributeName)) {
-      if (uriAttributes.has(attributeName)) {
-        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue));
-      }
-      return true;
-    }
-    return allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp).some((regex) => regex.test(attributeName));
-  };
   var DefaultAllowlist = {
     // Global attributes allowed on any supplied element below.
     "*": ["class", "dir", "id", "lang", "role", ARIA_ATTRIBUTE_PATTERN],
@@ -30323,7 +30086,10 @@
     br: [],
     col: [],
     code: [],
+    dd: [],
     div: [],
+    dl: [],
+    dt: [],
     em: [],
     hr: [],
     h1: [],
@@ -30347,6 +30113,18 @@
     u: [],
     ul: []
   };
+  var uriAttributes = /* @__PURE__ */ new Set(["background", "cite", "href", "itemtype", "longdesc", "poster", "src", "xlink:href"]);
+  var SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i;
+  var allowedAttribute = (attribute, allowedAttributeList) => {
+    const attributeName = attribute.nodeName.toLowerCase();
+    if (allowedAttributeList.includes(attributeName)) {
+      if (uriAttributes.has(attributeName)) {
+        return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue));
+      }
+      return true;
+    }
+    return allowedAttributeList.filter((attributeRegex) => attributeRegex instanceof RegExp).some((regex) => regex.test(attributeName));
+  };
   function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) {
     if (!unsafeHtml.length) {
       return unsafeHtml;
@@ -30474,7 +30252,7 @@
       return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg;
     }
     _resolvePossibleFunction(arg) {
-      return typeof arg === "function" ? arg(this) : arg;
+      return execute(arg, [this]);
     }
     _putElementInTemplate(element, templateElement) {
       if (this._config.html) {
@@ -30523,7 +30301,7 @@
     delay: 0,
     fallbackPlacements: ["top", "right", "bottom", "left"],
     html: false,
-    offset: [0, 0],
+    offset: [0, 6],
     placement: "top",
     popperConfig: null,
     sanitize: true,
@@ -30749,7 +30527,7 @@
       return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2);
     }
     _createPopper(tip) {
-      const placement = typeof this._config.placement === "function" ? this._config.placement.call(this, tip, this._element) : this._config.placement;
+      const placement = execute(this._config.placement, [this, tip, this._element]);
       const attachment = AttachmentMap[placement.toUpperCase()];
       return createPopper3(this._element, tip, this._getPopperConfig(attachment));
     }
@@ -30766,7 +30544,7 @@
       return offset2;
     }
     _resolvePossibleFunction(arg) {
-      return typeof arg === "function" ? arg.call(this._element) : arg;
+      return execute(arg, [this._element]);
     }
     _getPopperConfig(attachment) {
       const defaultBsPopperConfig = {
@@ -30800,7 +30578,7 @@
           }
         }]
       };
-      return __spreadValues(__spreadValues({}, defaultBsPopperConfig), typeof this._config.popperConfig === "function" ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig);
+      return __spreadValues(__spreadValues({}, defaultBsPopperConfig), execute(this._config.popperConfig, [defaultBsPopperConfig]));
     }
     _setListeners() {
       const triggers = this._config.trigger.split(" ");
@@ -30904,9 +30682,9 @@
     }
     _getDelegateConfig() {
       const config = {};
-      for (const key in this._config) {
-        if (this.constructor.Default[key] !== this._config[key]) {
-          config[key] = this._config[key];
+      for (const [key, value] of Object.entries(this._config)) {
+        if (this.constructor.Default[key] !== value) {
+          config[key] = value;
         }
       }
       config.selector = false;
@@ -31142,9 +30920,9 @@
         if (!anchor.hash || isDisabled(anchor)) {
           continue;
         }
-        const observableSection = SelectorEngine.findOne(anchor.hash, this._element);
+        const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element);
         if (isVisible(observableSection)) {
-          this._targetLinks.set(anchor.hash, anchor);
+          this._targetLinks.set(decodeURI(anchor.hash), anchor);
           this._observableSections.set(anchor.hash, observableSection);
         }
       }
@@ -31213,13 +30991,15 @@
   var ARROW_RIGHT_KEY = "ArrowRight";
   var ARROW_UP_KEY = "ArrowUp";
   var ARROW_DOWN_KEY = "ArrowDown";
+  var HOME_KEY = "Home";
+  var END_KEY = "End";
   var CLASS_NAME_ACTIVE = "active";
   var CLASS_NAME_FADE$1 = "fade";
   var CLASS_NAME_SHOW$1 = "show";
   var CLASS_DROPDOWN = "dropdown";
   var SELECTOR_DROPDOWN_TOGGLE = ".dropdown-toggle";
   var SELECTOR_DROPDOWN_MENU = ".dropdown-menu";
-  var NOT_SELECTOR_DROPDOWN_TOGGLE = ":not(.dropdown-toggle)";
+  var NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`;
   var SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]';
   var SELECTOR_OUTER = ".nav-item, .list-group-item";
   var SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`;
@@ -31265,7 +31045,7 @@
         return;
       }
       element.classList.add(CLASS_NAME_ACTIVE);
-      this._activate(getElementFromSelector(element));
+      this._activate(SelectorEngine.getElementFromSelector(element));
       const complete = () => {
         if (element.getAttribute("role") !== "tab") {
           element.classList.add(CLASS_NAME_SHOW$1);
@@ -31286,7 +31066,7 @@
       }
       element.classList.remove(CLASS_NAME_ACTIVE);
       element.blur();
-      this._deactivate(getElementFromSelector(element));
+      this._deactivate(SelectorEngine.getElementFromSelector(element));
       const complete = () => {
         if (element.getAttribute("role") !== "tab") {
           element.classList.remove(CLASS_NAME_SHOW$1);
@@ -31302,13 +31082,19 @@
       this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1));
     }
     _keydown(event) {
-      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) {
+      if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) {
         return;
       }
       event.stopPropagation();
       event.preventDefault();
-      const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
-      const nextActiveElement = getNextActiveElement(this._getChildren().filter((element) => !isDisabled(element)), event.target, isNext, true);
+      const children = this._getChildren().filter((element) => !isDisabled(element));
+      let nextActiveElement;
+      if ([HOME_KEY, END_KEY].includes(event.key)) {
+        nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1];
+      } else {
+        const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key);
+        nextActiveElement = getNextActiveElement(children, event.target, isNext, true);
+      }
       if (nextActiveElement) {
         nextActiveElement.focus({
           preventScroll: true
@@ -31343,13 +31129,13 @@
       this._setInitialAttributesOnTargetPanel(child);
     }
     _setInitialAttributesOnTargetPanel(child) {
-      const target = getElementFromSelector(child);
+      const target = SelectorEngine.getElementFromSelector(child);
       if (!target) {
         return;
       }
       this._setAttributeIfNotExists(target, "role", "tabpanel");
       if (child.id) {
-        this._setAttributeIfNotExists(target, "aria-labelledby", `#${child.id}`);
+        this._setAttributeIfNotExists(target, "aria-labelledby", `${child.id}`);
       }
     }
     _toggleDropDown(element, open) {
@@ -36580,24 +36366,21 @@ within:
 
 jquery/dist/jquery.js:
   (*!
-   * jQuery JavaScript Library v3.6.0
+   * jQuery JavaScript Library v3.7.1
    * https://jquery.com/
    *
-   * Includes Sizzle.js
-   * https://sizzlejs.com/
-   *
    * Copyright OpenJS Foundation and other contributors
    * Released under the MIT license
    * https://jquery.org/license
    *
-   * Date: 2021-03-02T17:08Z
+   * Date: 2023-08-28T13:37Z
    *)
 
 bootstrap/dist/js/bootstrap.esm.js:
   (*!
-    * Bootstrap v5.2.3 (https://getbootstrap.com/)
-    * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
+    * Bootstrap v5.3.3 (https://getbootstrap.com/)
+    * Copyright 2011-2024 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)
     * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
     *)
 */
-//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL3ZlbmRvci9wcmlzbS5qcyIsICIuLi8uLi8uLi9hc3NldHMvdmVuZG9yL3RvcGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMvYXBwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9mb3JtYXQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdW5pcXVlQnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VCeU5hbWUuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci1saXRlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3BvcHBlci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9pbmRleC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL2V2ZW50LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2RvbS9kYXRhLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vbWFuaXB1bGF0b3IuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvY29uZmlnLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9iYXNlLWNvbXBvbmVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9hbGVydC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvYnV0dG9uLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vc2VsZWN0b3ItZW5naW5lLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3N3aXBlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9jYXJvdXNlbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvY29sbGFwc2UuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Ryb3Bkb3duLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3Njcm9sbGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9iYWNrZHJvcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL21vZGFsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9vZmZjYW52YXMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3RlbXBsYXRlLWZhY3RvcnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3Rvb2x0aXAuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3BvcG92ZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3Njcm9sbHNweS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdGFiLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90b2FzdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMvcmVwb3NpdG9yeS5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMva214X2FuaW0uanMiLCAiLi4vLi4vLi4vYXNzZXRzL2pzL2tteF9jb2xvcnMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2h0bWwvcHJpdi9zdGF0aWMvcGhvZW5peF9odG1sLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC91dGlscy5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9wdXNoLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC90aW1lci5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvY2hhbm5lbC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvYWpheC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvbG9uZ3BvbGwuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3ByZXNlbmNlLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9zZXJpYWxpemVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9zb2NrZXQuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvY29uc3RhbnRzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2VudHJ5X3VwbG9hZGVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3V0aWxzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2Jyb3dzZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZG9tLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3VwbG9hZF9lbnRyeS5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9saXZlX3VwbG9hZGVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2hvb2tzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2RvbV9wb3N0X21vcnBoX3Jlc3RvcmVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL25vZGVfbW9kdWxlcy9tb3JwaGRvbS9kaXN0L21vcnBoZG9tLWVzbS5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9kb21fcGF0Y2guanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvcmVuZGVyZWQuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdmlld19ob29rLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2pzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L3ZpZXcuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvbGl2ZV9zb2NrZXQuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qIVxuICogalF1ZXJ5IEphdmFTY3JpcHQgTGlicmFyeSB2My42LjBcbiAqIGh0dHBzOi8vanF1ZXJ5LmNvbS9cbiAqXG4gKiBJbmNsdWRlcyBTaXp6bGUuanNcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMS0wMy0wMlQxNzowOFpcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgIzE0NTQ5IGZvciBtb3JlIGluZm8uXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBnbG9iYWwuZG9jdW1lbnQgP1xuXHRcdFx0ZmFjdG9yeSggZ2xvYmFsLCB0cnVlICkgOlxuXHRcdFx0ZnVuY3Rpb24oIHcgKSB7XG5cdFx0XHRcdGlmICggIXcuZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCBcImpRdWVyeSByZXF1aXJlcyBhIHdpbmRvdyB3aXRoIGEgZG9jdW1lbnRcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBmYWN0b3J5KCB3ICk7XG5cdFx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdGZhY3RvcnkoIGdsb2JhbCApO1xuXHR9XG5cbi8vIFBhc3MgdGhpcyBpZiB3aW5kb3cgaXMgbm90IGRlZmluZWQgeWV0XG59ICkoIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB0aGlzLCBmdW5jdGlvbiggd2luZG93LCBub0dsb2JhbCApIHtcblxuLy8gRWRnZSA8PSAxMiAtIDEzKywgRmlyZWZveCA8PTE4IC0gNDUrLCBJRSAxMCAtIDExLCBTYWZhcmkgNS4xIC0gOSssIGlPUyA2IC0gOS4xXG4vLyB0aHJvdyBleGNlcHRpb25zIHdoZW4gbm9uLXN0cmljdCBjb2RlIChlLmcuLCBBU1AuTkVUIDQuNSkgYWNjZXNzZXMgc3RyaWN0IG1vZGVcbi8vIGFyZ3VtZW50cy5jYWxsZWUuY2FsbGVyICh0cmFjLTEzMzM1KS4gQnV0IGFzIG9mIGpRdWVyeSAzLjAgKDIwMTYpLCBzdHJpY3QgbW9kZSBzaG91bGQgYmUgY29tbW9uXG4vLyBlbm91Z2ggdGhhdCBhbGwgc3VjaCBhdHRlbXB0cyBhcmUgZ3VhcmRlZCBpbiBhIHRyeSBibG9jay5cblwidXNlIHN0cmljdFwiO1xuXG52YXIgYXJyID0gW107XG5cbnZhciBnZXRQcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjtcblxudmFyIHNsaWNlID0gYXJyLnNsaWNlO1xuXG52YXIgZmxhdCA9IGFyci5mbGF0ID8gZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmZsYXQuY2FsbCggYXJyYXkgKTtcbn0gOiBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuY29uY2F0LmFwcGx5KCBbXSwgYXJyYXkgKTtcbn07XG5cblxudmFyIHB1c2ggPSBhcnIucHVzaDtcblxudmFyIGluZGV4T2YgPSBhcnIuaW5kZXhPZjtcblxudmFyIGNsYXNzMnR5cGUgPSB7fTtcblxudmFyIHRvU3RyaW5nID0gY2xhc3MydHlwZS50b1N0cmluZztcblxudmFyIGhhc093biA9IGNsYXNzMnR5cGUuaGFzT3duUHJvcGVydHk7XG5cbnZhciBmblRvU3RyaW5nID0gaGFzT3duLnRvU3RyaW5nO1xuXG52YXIgT2JqZWN0RnVuY3Rpb25TdHJpbmcgPSBmblRvU3RyaW5nLmNhbGwoIE9iamVjdCApO1xuXG52YXIgc3VwcG9ydCA9IHt9O1xuXG52YXIgaXNGdW5jdGlvbiA9IGZ1bmN0aW9uIGlzRnVuY3Rpb24oIG9iaiApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTU3LCBGaXJlZm94IDw9NTJcblx0XHQvLyBJbiBzb21lIGJyb3dzZXJzLCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgPG9iamVjdD4gZWxlbWVudHNcblx0XHQvLyAoaS5lLiwgYHR5cGVvZiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9iamVjdFwiICkgPT09IFwiZnVuY3Rpb25cImApLlxuXHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gY2xhc3NpZnkgKmFueSogRE9NIG5vZGUgYXMgYSBmdW5jdGlvbi5cblx0XHQvLyBTdXBwb3J0OiBRdFdlYiA8PTMuOC41LCBXZWJLaXQgPD01MzQuMzQsIHdraHRtbHRvcGRmIHRvb2wgPD0wLjEyLjVcblx0XHQvLyBQbHVzIGZvciBvbGQgV2ViS2l0LCB0eXBlb2YgcmV0dXJucyBcImZ1bmN0aW9uXCIgZm9yIEhUTUwgY29sbGVjdGlvbnNcblx0XHQvLyAoZS5nLiwgYHR5cGVvZiBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRpdlwiKSA9PT0gXCJmdW5jdGlvblwiYCkuIChnaC00NzU2KVxuXHRcdHJldHVybiB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgJiYgdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gXCJudW1iZXJcIiAmJlxuXHRcdFx0dHlwZW9mIG9iai5pdGVtICE9PSBcImZ1bmN0aW9uXCI7XG5cdH07XG5cblxudmFyIGlzV2luZG93ID0gZnVuY3Rpb24gaXNXaW5kb3coIG9iaiApIHtcblx0XHRyZXR1cm4gb2JqICE9IG51bGwgJiYgb2JqID09PSBvYmoud2luZG93O1xuXHR9O1xuXG5cbnZhciBkb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcblxuXG5cblx0dmFyIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgPSB7XG5cdFx0dHlwZTogdHJ1ZSxcblx0XHRzcmM6IHRydWUsXG5cdFx0bm9uY2U6IHRydWUsXG5cdFx0bm9Nb2R1bGU6IHRydWVcblx0fTtcblxuXHRmdW5jdGlvbiBET01FdmFsKCBjb2RlLCBub2RlLCBkb2MgKSB7XG5cdFx0ZG9jID0gZG9jIHx8IGRvY3VtZW50O1xuXG5cdFx0dmFyIGksIHZhbCxcblx0XHRcdHNjcmlwdCA9IGRvYy5jcmVhdGVFbGVtZW50KCBcInNjcmlwdFwiICk7XG5cblx0XHRzY3JpcHQudGV4dCA9IGNvZGU7XG5cdFx0aWYgKCBub2RlICkge1xuXHRcdFx0Zm9yICggaSBpbiBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNjQrLCBFZGdlIDE4K1xuXHRcdFx0XHQvLyBTb21lIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIFwibm9uY2VcIiBwcm9wZXJ0eSBvbiBzY3JpcHRzLlxuXHRcdFx0XHQvLyBPbiB0aGUgb3RoZXIgaGFuZCwganVzdCB1c2luZyBgZ2V0QXR0cmlidXRlYCBpcyBub3QgZW5vdWdoIGFzXG5cdFx0XHRcdC8vIHRoZSBgbm9uY2VgIGF0dHJpYnV0ZSBpcyByZXNldCB0byBhbiBlbXB0eSBzdHJpbmcgd2hlbmV2ZXIgaXRcblx0XHRcdFx0Ly8gYmVjb21lcyBicm93c2luZy1jb250ZXh0IGNvbm5lY3RlZC5cblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvaHRtbC9pc3N1ZXMvMjM2OVxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jbm9uY2UtYXR0cmlidXRlc1xuXHRcdFx0XHQvLyBUaGUgYG5vZGUuZ2V0QXR0cmlidXRlYCBjaGVjayB3YXMgYWRkZWQgZm9yIHRoZSBzYWtlIG9mXG5cdFx0XHRcdC8vIGBqUXVlcnkuZ2xvYmFsRXZhbGAgc28gdGhhdCBpdCBjYW4gZmFrZSBhIG5vbmNlLWNvbnRhaW5pbmcgbm9kZVxuXHRcdFx0XHQvLyB2aWEgYW4gb2JqZWN0LlxuXHRcdFx0XHR2YWwgPSBub2RlWyBpIF0gfHwgbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoIGkgKTtcblx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0c2NyaXB0LnNldEF0dHJpYnV0ZSggaSwgdmFsICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZG9jLmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdCApLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHNjcmlwdCApO1xuXHR9XG5cblxuZnVuY3Rpb24gdG9UeXBlKCBvYmogKSB7XG5cdGlmICggb2JqID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIG9iaiArIFwiXCI7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHkgKGZ1bmN0aW9uaXNoIFJlZ0V4cClcblx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiID9cblx0XHRjbGFzczJ0eXBlWyB0b1N0cmluZy5jYWxsKCBvYmogKSBdIHx8IFwib2JqZWN0XCIgOlxuXHRcdHR5cGVvZiBvYmo7XG59XG4vKiBnbG9iYWwgU3ltYm9sICovXG4vLyBEZWZpbmluZyB0aGlzIGdsb2JhbCBpbiAuZXNsaW50cmMuanNvbiB3b3VsZCBjcmVhdGUgYSBkYW5nZXIgb2YgdXNpbmcgdGhlIGdsb2JhbFxuLy8gdW5ndWFyZGVkIGluIGFub3RoZXIgcGxhY2UsIGl0IHNlZW1zIHNhZmVyIHRvIGRlZmluZSBnbG9iYWwgb25seSBmb3IgdGhpcyBtb2R1bGVcblxuXG5cbnZhclxuXHR2ZXJzaW9uID0gXCIzLjYuMFwiLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXZlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICggaSArIDEgKSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0b2RkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gaSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIHByb3ZpZGVkIGNvbnRleHQ7IGZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBvbmVcblx0Ly8gaWYgbm90IHNwZWNpZmllZC5cblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0bWVyZ2U6IGZ1bmN0aW9uKCBmaXJzdCwgc2Vjb25kICkge1xuXHRcdHZhciBsZW4gPSArc2Vjb25kLmxlbmd0aCxcblx0XHRcdGogPSAwLFxuXHRcdFx0aSA9IGZpcnN0Lmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0Zmlyc3RbIGkrKyBdID0gc2Vjb25kWyBqIF07XG5cdFx0fVxuXG5cdFx0Zmlyc3QubGVuZ3RoID0gaTtcblxuXHRcdHJldHVybiBmaXJzdDtcblx0fSxcblxuXHRncmVwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBpbnZlcnQgKSB7XG5cdFx0dmFyIGNhbGxiYWNrSW52ZXJzZSxcblx0XHRcdG1hdGNoZXMgPSBbXSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoLFxuXHRcdFx0Y2FsbGJhY2tFeHBlY3QgPSAhaW52ZXJ0O1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIG9ubHkgc2F2aW5nIHRoZSBpdGVtc1xuXHRcdC8vIHRoYXQgcGFzcyB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9uXG5cdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRjYWxsYmFja0ludmVyc2UgPSAhY2FsbGJhY2soIGVsZW1zWyBpIF0sIGkgKTtcblx0XHRcdGlmICggY2FsbGJhY2tJbnZlcnNlICE9PSBjYWxsYmFja0V4cGVjdCApIHtcblx0XHRcdFx0bWF0Y2hlcy5wdXNoKCBlbGVtc1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG1hdGNoZXM7XG5cdH0sXG5cblx0Ly8gYXJnIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1hcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgYXJnICkge1xuXHRcdHZhciBsZW5ndGgsIHZhbHVlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRyZXQgPSBbXTtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCB0cmFuc2xhdGluZyBlYWNoIG9mIHRoZSBpdGVtcyB0byB0aGVpciBuZXcgdmFsdWVzXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggZWxlbXMgKSApIHtcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEdvIHRocm91Z2ggZXZlcnkga2V5IG9uIHRoZSBvYmplY3QsXG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gZWxlbXMgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0XHRyZXR1cm4gZmxhdCggcmV0ICk7XG5cdH0sXG5cblx0Ly8gQSBnbG9iYWwgR1VJRCBjb3VudGVyIGZvciBvYmplY3RzXG5cdGd1aWQ6IDEsXG5cblx0Ly8galF1ZXJ5LnN1cHBvcnQgaXMgbm90IHVzZWQgaW4gQ29yZSBidXQgb3RoZXIgcHJvamVjdHMgYXR0YWNoIHRoZWlyXG5cdC8vIHByb3BlcnRpZXMgdG8gaXQgc28gaXQgbmVlZHMgdG8gZXhpc3QuXG5cdHN1cHBvcnQ6IHN1cHBvcnRcbn0gKTtcblxuaWYgKCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cdGpRdWVyeS5mblsgU3ltYm9sLml0ZXJhdG9yIF0gPSBhcnJbIFN5bWJvbC5pdGVyYXRvciBdO1xufVxuXG4vLyBQb3B1bGF0ZSB0aGUgY2xhc3MydHlwZSBtYXBcbmpRdWVyeS5lYWNoKCBcIkJvb2xlYW4gTnVtYmVyIFN0cmluZyBGdW5jdGlvbiBBcnJheSBEYXRlIFJlZ0V4cCBPYmplY3QgRXJyb3IgU3ltYm9sXCIuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0XHRjbGFzczJ0eXBlWyBcIltvYmplY3QgXCIgKyBuYW1lICsgXCJdXCIgXSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblx0fSApO1xuXG5mdW5jdGlvbiBpc0FycmF5TGlrZSggb2JqICkge1xuXG5cdC8vIFN1cHBvcnQ6IHJlYWwgaU9TIDguMiBvbmx5IChub3QgcmVwcm9kdWNpYmxlIGluIHNpbXVsYXRvcilcblx0Ly8gYGluYCBjaGVjayB1c2VkIHRvIHByZXZlbnQgSklUIGVycm9yIChnaC0yMTQ1KVxuXHQvLyBoYXNPd24gaXNuJ3QgdXNlZCBoZXJlIGR1ZSB0byBmYWxzZSBuZWdhdGl2ZXNcblx0Ly8gcmVnYXJkaW5nIE5vZGVsaXN0IGxlbmd0aCBpbiBJRVxuXHR2YXIgbGVuZ3RoID0gISFvYmogJiYgXCJsZW5ndGhcIiBpbiBvYmogJiYgb2JqLmxlbmd0aCxcblx0XHR0eXBlID0gdG9UeXBlKCBvYmogKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIG9iaiApIHx8IGlzV2luZG93KCBvYmogKSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRyZXR1cm4gdHlwZSA9PT0gXCJhcnJheVwiIHx8IGxlbmd0aCA9PT0gMCB8fFxuXHRcdHR5cGVvZiBsZW5ndGggPT09IFwibnVtYmVyXCIgJiYgbGVuZ3RoID4gMCAmJiAoIGxlbmd0aCAtIDEgKSBpbiBvYmo7XG59XG52YXIgU2l6emxlID1cbi8qIVxuICogU2l6emxlIENTUyBTZWxlY3RvciBFbmdpbmUgdjIuMy42XG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanMuZm91bmRhdGlvbi9cbiAqXG4gKiBEYXRlOiAyMDIxLTAyLTE2XG4gKi9cbiggZnVuY3Rpb24oIHdpbmRvdyApIHtcbnZhciBpLFxuXHRzdXBwb3J0LFxuXHRFeHByLFxuXHRnZXRUZXh0LFxuXHRpc1hNTCxcblx0dG9rZW5pemUsXG5cdGNvbXBpbGUsXG5cdHNlbGVjdCxcblx0b3V0ZXJtb3N0Q29udGV4dCxcblx0c29ydElucHV0LFxuXHRoYXNEdXBsaWNhdGUsXG5cblx0Ly8gTG9jYWwgZG9jdW1lbnQgdmFyc1xuXHRzZXREb2N1bWVudCxcblx0ZG9jdW1lbnQsXG5cdGRvY0VsZW0sXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdHJidWdneU1hdGNoZXMsXG5cdG1hdGNoZXMsXG5cdGNvbnRhaW5zLFxuXG5cdC8vIEluc3RhbmNlLXNwZWNpZmljIGRhdGFcblx0ZXhwYW5kbyA9IFwic2l6emxlXCIgKyAxICogbmV3IERhdGUoKSxcblx0cHJlZmVycmVkRG9jID0gd2luZG93LmRvY3VtZW50LFxuXHRkaXJydW5zID0gMCxcblx0ZG9uZSA9IDAsXG5cdGNsYXNzQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHR0b2tlbkNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0Y29tcGlsZXJDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gMDtcblx0fSxcblxuXHQvLyBJbnN0YW5jZSBtZXRob2RzXG5cdGhhc093biA9ICgge30gKS5oYXNPd25Qcm9wZXJ0eSxcblx0YXJyID0gW10sXG5cdHBvcCA9IGFyci5wb3AsXG5cdHB1c2hOYXRpdmUgPSBhcnIucHVzaCxcblx0cHVzaCA9IGFyci5wdXNoLFxuXHRzbGljZSA9IGFyci5zbGljZSxcblxuXHQvLyBVc2UgYSBzdHJpcHBlZC1kb3duIGluZGV4T2YgYXMgaXQncyBmYXN0ZXIgdGhhbiBuYXRpdmVcblx0Ly8gaHR0cHM6Ly9qc3BlcmYuY29tL3Rob3ItaW5kZXhvZi12cy1mb3IvNVxuXHRpbmRleE9mID0gZnVuY3Rpb24oIGxpc3QsIGVsZW0gKSB7XG5cdFx0dmFyIGkgPSAwLFxuXHRcdFx0bGVuID0gbGlzdC5sZW5ndGg7XG5cdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRpZiAoIGxpc3RbIGkgXSA9PT0gZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiAtMTtcblx0fSxcblxuXHRib29sZWFucyA9IFwiY2hlY2tlZHxzZWxlY3RlZHxhc3luY3xhdXRvZm9jdXN8YXV0b3BsYXl8Y29udHJvbHN8ZGVmZXJ8ZGlzYWJsZWR8aGlkZGVufFwiICtcblx0XHRcImlzbWFwfGxvb3B8bXVsdGlwbGV8b3BlbnxyZWFkb25seXxyZXF1aXJlZHxzY29wZWRcIixcblxuXHQvLyBSZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvY3NzMy1zZWxlY3RvcnMvI3doaXRlc3BhY2Vcblx0d2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIixcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jYXR0cmlidXRlLXNlbGVjdG9yc1xuXHRhdHRyaWJ1dGVzID0gXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gT3BlcmF0b3IgKGNhcHR1cmUgMilcblx0XHRcIiooWypeJHwhfl0/PSlcIiArIHdoaXRlc3BhY2UgK1xuXG5cdFx0Ly8gXCJBdHRyaWJ1dGUgdmFsdWVzIG11c3QgYmUgQ1NTIGlkZW50aWZpZXJzIFtjYXB0dXJlIDVdXG5cdFx0Ly8gb3Igc3RyaW5ncyBbY2FwdHVyZSAzIG9yIGNhcHR1cmUgNF1cIlxuXHRcdFwiKig/OicoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcInwoXCIgKyBpZGVudGlmaWVyICsgXCIpKXwpXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIipcXFxcXVwiLFxuXG5cdHBzZXVkb3MgPSBcIjooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XFxcXCgoXCIgK1xuXG5cdFx0Ly8gVG8gcmVkdWNlIHRoZSBudW1iZXIgb2Ygc2VsZWN0b3JzIG5lZWRpbmcgdG9rZW5pemUgaW4gdGhlIHByZUZpbHRlciwgcHJlZmVyIGFyZ3VtZW50czpcblx0XHQvLyAxLiBxdW90ZWQgKGNhcHR1cmUgMzsgY2FwdHVyZSA0IG9yIGNhcHR1cmUgNSlcblx0XHRcIignKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCIpfFwiICtcblxuXHRcdC8vIDIuIHNpbXBsZSAoY2FwdHVyZSA2KVxuXHRcdFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcKClbXFxcXF1dfFwiICsgYXR0cmlidXRlcyArIFwiKSopfFwiICtcblxuXHRcdC8vIDMuIGFueXRoaW5nIGVsc2UgKGNhcHR1cmUgMilcblx0XHRcIi4qXCIgK1xuXHRcdFwiKVxcXFwpfClcIixcblxuXHQvLyBMZWFkaW5nIGFuZCBub24tZXNjYXBlZCB0cmFpbGluZyB3aGl0ZXNwYWNlLCBjYXB0dXJpbmcgc29tZSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXJzIHByZWNlZGluZyB0aGUgbGF0dGVyXG5cdHJ3aGl0ZXNwYWNlID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwiK1wiLCBcImdcIiApLFxuXHRydHJpbSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiK3woKD86XnxbXlxcXFxcXFxcXSkoPzpcXFxcXFxcXC4pKilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKyRcIiwgXCJnXCIgKSxcblxuXHRyY29tbWEgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiosXCIgKyB3aGl0ZXNwYWNlICsgXCIqXCIgKSxcblx0cmNvbWJpbmF0b3JzID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFs+K35dfFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCIqXCIgKSxcblx0cmRlc2NlbmQgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCJ8PlwiICksXG5cblx0cnBzZXVkbyA9IG5ldyBSZWdFeHAoIHBzZXVkb3MgKSxcblx0cmlkZW50aWZpZXIgPSBuZXcgUmVnRXhwKCBcIl5cIiArIGlkZW50aWZpZXIgKyBcIiRcIiApLFxuXG5cdG1hdGNoRXhwciA9IHtcblx0XHRcIklEXCI6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIkNMQVNTXCI6IG5ldyBSZWdFeHAoIFwiXlxcXFwuKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJUQUdcIjogbmV3IFJlZ0V4cCggXCJeKFwiICsgaWRlbnRpZmllciArIFwifFsqXSlcIiApLFxuXHRcdFwiQVRUUlwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRcIlBTRVVET1wiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHBzZXVkb3MgKSxcblx0XHRcIkNISUxEXCI6IG5ldyBSZWdFeHAoIFwiXjoob25seXxmaXJzdHxsYXN0fG50aHxudGgtbGFzdCktKGNoaWxkfG9mLXR5cGUpKD86XFxcXChcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKGV2ZW58b2RkfCgoWystXXwpKFxcXFxkKilufClcIiArIHdoaXRlc3BhY2UgKyBcIiooPzooWystXXwpXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdFwiYm9vbFwiOiBuZXcgUmVnRXhwKCBcIl4oPzpcIiArIGJvb2xlYW5zICsgXCIpJFwiLCBcImlcIiApLFxuXG5cdFx0Ly8gRm9yIHVzZSBpbiBsaWJyYXJpZXMgaW1wbGVtZW50aW5nIC5pcygpXG5cdFx0Ly8gV2UgdXNlIHRoaXMgZm9yIFBPUyBtYXRjaGluZyBpbiBgc2VsZWN0YFxuXHRcdFwibmVlZHNDb250ZXh0XCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIipbPit+XXw6KGV2ZW58b2RkfGVxfGd0fGx0fG50aHxmaXJzdHxsYXN0KSg/OlxcXFwoXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKigoPzotXFxcXGQpP1xcXFxkKilcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpKD89W14tXXwkKVwiLCBcImlcIiApXG5cdH0sXG5cblx0cmh0bWwgPSAvSFRNTCQvaSxcblx0cmlucHV0cyA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJoZWFkZXIgPSAvXmhcXGQkL2ksXG5cblx0cm5hdGl2ZSA9IC9eW157XStcXHtcXHMqXFxbbmF0aXZlIFxcdy8sXG5cblx0Ly8gRWFzaWx5LXBhcnNlYWJsZS9yZXRyaWV2YWJsZSBJRCBvciBUQUcgb3IgQ0xBU1Mgc2VsZWN0b3JzXG5cdHJxdWlja0V4cHIgPSAvXig/OiMoW1xcdy1dKyl8KFxcdyspfFxcLihbXFx3LV0rKSkkLyxcblxuXHRyc2libGluZyA9IC9bK35dLyxcblxuXHQvLyBDU1MgZXNjYXBlc1xuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9DU1MyMS9zeW5kYXRhLmh0bWwjZXNjYXBlZC1jaGFyYWN0ZXJzXG5cdHJ1bmVzY2FwZSA9IG5ldyBSZWdFeHAoIFwiXFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgKyBcIj98XFxcXFxcXFwoW15cXFxcclxcXFxuXFxcXGZdKVwiLCBcImdcIiApLFxuXHRmdW5lc2NhcGUgPSBmdW5jdGlvbiggZXNjYXBlLCBub25IZXggKSB7XG5cdFx0dmFyIGhpZ2ggPSBcIjB4XCIgKyBlc2NhcGUuc2xpY2UoIDEgKSAtIDB4MTAwMDA7XG5cblx0XHRyZXR1cm4gbm9uSGV4ID9cblxuXHRcdFx0Ly8gU3RyaXAgdGhlIGJhY2tzbGFzaCBwcmVmaXggZnJvbSBhIG5vbi1oZXggZXNjYXBlIHNlcXVlbmNlXG5cdFx0XHRub25IZXggOlxuXG5cdFx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExK1xuXHRcdFx0Ly8gRm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBCYXNpYyBNdWx0aWxpbmd1YWwgUGxhbmUgKEJNUCksIG1hbnVhbGx5IGNvbnN0cnVjdCBhXG5cdFx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdFx0aGlnaCA8IDAgP1xuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCA+PiAxMCB8IDB4RDgwMCwgaGlnaCAmIDB4M0ZGIHwgMHhEQzAwICk7XG5cdH0sXG5cblx0Ly8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cblx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNjb21tb24tc2VyaWFsaXppbmctaWRpb21zXG5cdHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXDAtXFx4MWZcXHg3Zi1cXHVGRkZGXFx3LV0vZyxcblx0ZmNzc2VzY2FwZSA9IGZ1bmN0aW9uKCBjaCwgYXNDb2RlUG9pbnQgKSB7XG5cdFx0aWYgKCBhc0NvZGVQb2ludCApIHtcblxuXHRcdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0XHRpZiAoIGNoID09PSBcIlxcMFwiICkge1xuXHRcdFx0XHRyZXR1cm4gXCJcXHVGRkZEXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnRyb2wgY2hhcmFjdGVycyBhbmQgKGRlcGVuZGVudCB1cG9uIHBvc2l0aW9uKSBudW1iZXJzIGdldCBlc2NhcGVkIGFzIGNvZGUgcG9pbnRzXG5cdFx0XHRyZXR1cm4gY2guc2xpY2UoIDAsIC0xICkgKyBcIlxcXFxcIiArXG5cdFx0XHRcdGNoLmNoYXJDb2RlQXQoIGNoLmxlbmd0aCAtIDEgKS50b1N0cmluZyggMTYgKSArIFwiIFwiO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyIHBvdGVudGlhbGx5LXNwZWNpYWwgQVNDSUkgY2hhcmFjdGVycyBnZXQgYmFja3NsYXNoLWVzY2FwZWRcblx0XHRyZXR1cm4gXCJcXFxcXCIgKyBjaDtcblx0fSxcblxuXHQvLyBVc2VkIGZvciBpZnJhbWVzXG5cdC8vIFNlZSBzZXREb2N1bWVudCgpXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRVxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImZpZWxkc2V0XCI7XG5cdFx0fSxcblx0XHR7IGRpcjogXCJwYXJlbnROb2RlXCIsIG5leHQ6IFwibGVnZW5kXCIgfVxuXHQpO1xuXG4vLyBPcHRpbWl6ZSBmb3IgcHVzaC5hcHBseSggXywgTm9kZUxpc3QgKVxudHJ5IHtcblx0cHVzaC5hcHBseShcblx0XHQoIGFyciA9IHNsaWNlLmNhbGwoIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzICkgKSxcblx0XHRwcmVmZXJyZWREb2MuY2hpbGROb2Rlc1xuXHQpO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQ8NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7IGFwcGx5OiBhcnIubGVuZ3RoID9cblxuXHRcdC8vIExldmVyYWdlIHNsaWNlIGlmIHBvc3NpYmxlXG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0cHVzaE5hdGl2ZS5hcHBseSggdGFyZ2V0LCBzbGljZS5jYWxsKCBlbHMgKSApO1xuXHRcdH0gOlxuXG5cdFx0Ly8gU3VwcG9ydDogSUU8OVxuXHRcdC8vIE90aGVyd2lzZSBhcHBlbmQgZGlyZWN0bHlcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHR2YXIgaiA9IHRhcmdldC5sZW5ndGgsXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHQvLyBDYW4ndCB0cnVzdCBOb2RlTGlzdC5sZW5ndGhcblx0XHRcdHdoaWxlICggKCB0YXJnZXRbIGorKyBdID0gZWxzWyBpKysgXSApICkge31cblx0XHRcdHRhcmdldC5sZW5ndGggPSBqIC0gMTtcblx0XHR9XG5cdH07XG59XG5cbmZ1bmN0aW9uIFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBtLCBpLCBlbGVtLCBuaWQsIG1hdGNoLCBncm91cHMsIG5ld1NlbGVjdG9yLFxuXHRcdG5ld0NvbnRleHQgPSBjb250ZXh0ICYmIGNvbnRleHQub3duZXJEb2N1bWVudCxcblxuXHRcdC8vIG5vZGVUeXBlIGRlZmF1bHRzIHRvIDksIHNpbmNlIGNvbnRleHQgZGVmYXVsdHMgdG8gZG9jdW1lbnRcblx0XHRub2RlVHlwZSA9IGNvbnRleHQgPyBjb250ZXh0Lm5vZGVUeXBlIDogOTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBSZXR1cm4gZWFybHkgZnJvbSBjYWxscyB3aXRoIGludmFsaWQgc2VsZWN0b3Igb3IgY29udGV4dFxuXHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiB8fCAhc2VsZWN0b3IgfHxcblx0XHRub2RlVHlwZSAhPT0gMSAmJiBub2RlVHlwZSAhPT0gOSAmJiBub2RlVHlwZSAhPT0gMTEgKSB7XG5cblx0XHRyZXR1cm4gcmVzdWx0cztcblx0fVxuXG5cdC8vIFRyeSB0byBzaG9ydGN1dCBmaW5kIG9wZXJhdGlvbnMgKGFzIG9wcG9zZWQgdG8gZmlsdGVycykgaW4gSFRNTCBkb2N1bWVudHNcblx0aWYgKCAhc2VlZCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHRcdGNvbnRleHQgPSBjb250ZXh0IHx8IGRvY3VtZW50O1xuXG5cdFx0aWYgKCBkb2N1bWVudElzSFRNTCApIHtcblxuXHRcdFx0Ly8gSWYgdGhlIHNlbGVjdG9yIGlzIHN1ZmZpY2llbnRseSBzaW1wbGUsIHRyeSB1c2luZyBhIFwiZ2V0KkJ5KlwiIERPTSBtZXRob2Rcblx0XHRcdC8vIChleGNlcHRpbmcgRG9jdW1lbnRGcmFnbWVudCBjb250ZXh0LCB3aGVyZSB0aGUgbWV0aG9kcyBkb24ndCBleGlzdClcblx0XHRcdGlmICggbm9kZVR5cGUgIT09IDExICYmICggbWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHQvLyBJRCBzZWxlY3RvclxuXHRcdFx0XHRpZiAoICggbSA9IG1hdGNoWyAxIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvY3VtZW50IGNvbnRleHRcblx0XHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSwgT3BlcmEsIFdlYmtpdFxuXHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRjb250YWlucyggY29udGV4dCwgZWxlbSApICYmXG5cdFx0XHRcdFx0XHRcdGVsZW0uaWQgPT09IG0gKSB7XG5cblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUeXBlIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAyIF0gKSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggc2VsZWN0b3IgKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHRcdC8vIENsYXNzIHNlbGVjdG9yXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggbSA9IG1hdGNoWyAzIF0gKSAmJiBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiZcblx0XHRcdFx0XHRjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggc3VwcG9ydC5xc2EgJiZcblx0XHRcdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA4IG9ubHlcblx0XHRcdFx0Ly8gRXhjbHVkZSBvYmplY3QgZWxlbWVudHNcblx0XHRcdFx0KCBub2RlVHlwZSAhPT0gMSB8fCBjb250ZXh0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgIT09IFwib2JqZWN0XCIgKSApIHtcblxuXHRcdFx0XHRuZXdTZWxlY3RvciA9IHNlbGVjdG9yO1xuXHRcdFx0XHRuZXdDb250ZXh0ID0gY29udGV4dDtcblxuXHRcdFx0XHQvLyBxU0EgY29uc2lkZXJzIGVsZW1lbnRzIG91dHNpZGUgYSBzY29waW5nIHJvb3Qgd2hlbiBldmFsdWF0aW5nIGNoaWxkIG9yXG5cdFx0XHRcdC8vIGRlc2NlbmRhbnQgY29tYmluYXRvcnMsIHdoaWNoIGlzIG5vdCB3aGF0IHdlIHdhbnQuXG5cdFx0XHRcdC8vIEluIHN1Y2ggY2FzZXMsIHdlIHdvcmsgYXJvdW5kIHRoZSBiZWhhdmlvciBieSBwcmVmaXhpbmcgZXZlcnkgc2VsZWN0b3IgaW4gdGhlXG5cdFx0XHRcdC8vIGxpc3Qgd2l0aCBhbiBJRCBzZWxlY3RvciByZWZlcmVuY2luZyB0aGUgc2NvcGUgY29udGV4dC5cblx0XHRcdFx0Ly8gVGhlIHRlY2huaXF1ZSBoYXMgdG8gYmUgdXNlZCBhcyB3ZWxsIHdoZW4gYSBsZWFkaW5nIGNvbWJpbmF0b3IgaXMgdXNlZFxuXHRcdFx0XHQvLyBhcyBzdWNoIHNlbGVjdG9ycyBhcmUgbm90IHJlY29nbml6ZWQgYnkgcXVlcnlTZWxlY3RvckFsbC5cblx0XHRcdFx0Ly8gVGhhbmtzIHRvIEFuZHJldyBEdXBvbnQgZm9yIHRoaXMgdGVjaG5pcXVlLlxuXHRcdFx0XHRpZiAoIG5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0KCByZGVzY2VuZC50ZXN0KCBzZWxlY3RvciApIHx8IHJjb21iaW5hdG9ycy50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0XHQvLyBFeHBhbmQgY29udGV4dCBmb3Igc2libGluZyBzZWxlY3RvcnNcblx0XHRcdFx0XHRuZXdDb250ZXh0ID0gcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBXZSBjYW4gdXNlIDpzY29wZSBpbnN0ZWFkIG9mIHRoZSBJRCBoYWNrIGlmIHRoZSBicm93c2VyXG5cdFx0XHRcdFx0Ly8gc3VwcG9ydHMgaXQgJiBpZiB3ZSdyZSBub3QgY2hhbmdpbmcgdGhlIGNvbnRleHQuXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9PSBjb250ZXh0IHx8ICFzdXBwb3J0LnNjb3BlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYXB0dXJlIHRoZSBjb250ZXh0IElELCBzZXR0aW5nIGl0IGZpcnN0IGlmIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFx0aWYgKCAoIG5pZCA9IGNvbnRleHQuZ2V0QXR0cmlidXRlKCBcImlkXCIgKSApICkge1xuXHRcdFx0XHRcdFx0XHRuaWQgPSBuaWQucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Y29udGV4dC5zZXRBdHRyaWJ1dGUoIFwiaWRcIiwgKCBuaWQgPSBleHBhbmRvICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmVmaXggZXZlcnkgc2VsZWN0b3IgaW4gdGhlIGxpc3Rcblx0XHRcdFx0XHRncm91cHMgPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHRcdFx0XHRpID0gZ3JvdXBzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGdyb3Vwc1sgaSBdID0gKCBuaWQgPyBcIiNcIiArIG5pZCA6IFwiOnNjb3BlXCIgKSArIFwiIFwiICtcblx0XHRcdFx0XHRcdFx0dG9TZWxlY3RvciggZ3JvdXBzWyBpIF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bmV3U2VsZWN0b3IgPSBncm91cHMuam9pbiggXCIsXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cyxcblx0XHRcdFx0XHRcdG5ld0NvbnRleHQucXVlcnlTZWxlY3RvckFsbCggbmV3U2VsZWN0b3IgKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH0gY2F0Y2ggKCBxc2FFcnJvciApIHtcblx0XHRcdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRcdGlmICggbmlkID09PSBleHBhbmRvICkge1xuXHRcdFx0XHRcdFx0Y29udGV4dC5yZW1vdmVBdHRyaWJ1dGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFsbCBvdGhlcnNcblx0cmV0dXJuIHNlbGVjdCggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICk7XG59XG5cbi8qKlxuICogQ3JlYXRlIGtleS12YWx1ZSBjYWNoZXMgb2YgbGltaXRlZCBzaXplXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oc3RyaW5nLCBvYmplY3QpfSBSZXR1cm5zIHRoZSBPYmplY3QgZGF0YSBhZnRlciBzdG9yaW5nIGl0IG9uIGl0c2VsZiB3aXRoXG4gKlx0cHJvcGVydHkgbmFtZSB0aGUgKHNwYWNlLXN1ZmZpeGVkKSBzdHJpbmcgYW5kIChpZiB0aGUgY2FjaGUgaXMgbGFyZ2VyIHRoYW4gRXhwci5jYWNoZUxlbmd0aClcbiAqXHRkZWxldGluZyB0aGUgb2xkZXN0IGVudHJ5XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNhY2hlKCkge1xuXHR2YXIga2V5cyA9IFtdO1xuXG5cdGZ1bmN0aW9uIGNhY2hlKCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gVXNlIChrZXkgKyBcIiBcIikgdG8gYXZvaWQgY29sbGlzaW9uIHdpdGggbmF0aXZlIHByb3RvdHlwZSBwcm9wZXJ0aWVzIChzZWUgSXNzdWUgIzE1Nylcblx0XHRpZiAoIGtleXMucHVzaCgga2V5ICsgXCIgXCIgKSA+IEV4cHIuY2FjaGVMZW5ndGggKSB7XG5cblx0XHRcdC8vIE9ubHkga2VlcCB0aGUgbW9zdCByZWNlbnQgZW50cmllc1xuXHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlzLnNoaWZ0KCkgXTtcblx0XHR9XG5cdFx0cmV0dXJuICggY2FjaGVbIGtleSArIFwiIFwiIF0gPSB2YWx1ZSApO1xuXHR9XG5cdHJldHVybiBjYWNoZTtcbn1cblxuLyoqXG4gKiBNYXJrIGEgZnVuY3Rpb24gZm9yIHNwZWNpYWwgdXNlIGJ5IFNpenpsZVxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gVGhlIGZ1bmN0aW9uIHRvIG1hcmtcbiAqL1xuZnVuY3Rpb24gbWFya0Z1bmN0aW9uKCBmbiApIHtcblx0Zm5bIGV4cGFuZG8gXSA9IHRydWU7XG5cdHJldHVybiBmbjtcbn1cblxuLyoqXG4gKiBTdXBwb3J0IHRlc3RpbmcgdXNpbmcgYW4gZWxlbWVudFxuICogQHBhcmFtIHtGdW5jdGlvbn0gZm4gUGFzc2VkIHRoZSBjcmVhdGVkIGVsZW1lbnQgYW5kIHJldHVybnMgYSBib29sZWFuIHJlc3VsdFxuICovXG5mdW5jdGlvbiBhc3NlcnQoIGZuICkge1xuXHR2YXIgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKTtcblxuXHR0cnkge1xuXHRcdHJldHVybiAhIWZuKCBlbCApO1xuXHR9IGNhdGNoICggZSApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH0gZmluYWxseSB7XG5cblx0XHQvLyBSZW1vdmUgZnJvbSBpdHMgcGFyZW50IGJ5IGRlZmF1bHRcblx0XHRpZiAoIGVsLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRlbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBlbCApO1xuXHRcdH1cblxuXHRcdC8vIHJlbGVhc2UgbWVtb3J5IGluIElFXG5cdFx0ZWwgPSBudWxsO1xuXHR9XG59XG5cbi8qKlxuICogQWRkcyB0aGUgc2FtZSBoYW5kbGVyIGZvciBhbGwgb2YgdGhlIHNwZWNpZmllZCBhdHRyc1xuICogQHBhcmFtIHtTdHJpbmd9IGF0dHJzIFBpcGUtc2VwYXJhdGVkIGxpc3Qgb2YgYXR0cmlidXRlc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gaGFuZGxlciBUaGUgbWV0aG9kIHRoYXQgd2lsbCBiZSBhcHBsaWVkXG4gKi9cbmZ1bmN0aW9uIGFkZEhhbmRsZSggYXR0cnMsIGhhbmRsZXIgKSB7XG5cdHZhciBhcnIgPSBhdHRycy5zcGxpdCggXCJ8XCIgKSxcblx0XHRpID0gYXJyLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRFeHByLmF0dHJIYW5kbGVbIGFyclsgaSBdIF0gPSBoYW5kbGVyO1xuXHR9XG59XG5cbi8qKlxuICogQ2hlY2tzIGRvY3VtZW50IG9yZGVyIG9mIHR3byBzaWJsaW5nc1xuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGJcbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFJldHVybnMgbGVzcyB0aGFuIDAgaWYgYSBwcmVjZWRlcyBiLCBncmVhdGVyIHRoYW4gMCBpZiBhIGZvbGxvd3MgYlxuICovXG5mdW5jdGlvbiBzaWJsaW5nQ2hlY2soIGEsIGIgKSB7XG5cdHZhciBjdXIgPSBiICYmIGEsXG5cdFx0ZGlmZiA9IGN1ciAmJiBhLm5vZGVUeXBlID09PSAxICYmIGIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdGEuc291cmNlSW5kZXggLSBiLnNvdXJjZUluZGV4O1xuXG5cdC8vIFVzZSBJRSBzb3VyY2VJbmRleCBpZiBhdmFpbGFibGUgb24gYm90aCBub2Rlc1xuXHRpZiAoIGRpZmYgKSB7XG5cdFx0cmV0dXJuIGRpZmY7XG5cdH1cblxuXHQvLyBDaGVjayBpZiBiIGZvbGxvd3MgYVxuXHRpZiAoIGN1ciApIHtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLm5leHRTaWJsaW5nICkgKSB7XG5cdFx0XHRpZiAoIGN1ciA9PT0gYiApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBhID8gMSA6IC0xO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgaW5wdXQgdHlwZXNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0UHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBidXR0b25zXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVCdXR0b25Qc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gKCBuYW1lID09PSBcImlucHV0XCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIiApICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIDplbmFibGVkLzpkaXNhYmxlZFxuICogQHBhcmFtIHtCb29sZWFufSBkaXNhYmxlZCB0cnVlIGZvciA6ZGlzYWJsZWQ7IGZhbHNlIGZvciA6ZW5hYmxlZFxuICovXG5mdW5jdGlvbiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZGlzYWJsZWQgKSB7XG5cblx0Ly8gS25vd24gOmRpc2FibGVkIGZhbHNlIHBvc2l0aXZlczogZmllbGRzZXRbZGlzYWJsZWRdID4gbGVnZW5kOm50aC1vZi10eXBlKG4rMikgOmNhbi1kaXNhYmxlXG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE9ubHkgY2VydGFpbiBlbGVtZW50cyBjYW4gbWF0Y2ggOmVuYWJsZWQgb3IgOmRpc2FibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZW5hYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWRpc2FibGVkXG5cdFx0aWYgKCBcImZvcm1cIiBpbiBlbGVtICkge1xuXG5cdFx0XHQvLyBDaGVjayBmb3IgaW5oZXJpdGVkIGRpc2FibGVkbmVzcyBvbiByZWxldmFudCBub24tZGlzYWJsZWQgZWxlbWVudHM6XG5cdFx0XHQvLyAqIGxpc3RlZCBmb3JtLWFzc29jaWF0ZWQgZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBmaWVsZHNldFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NhdGVnb3J5LWxpc3RlZFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtZmUtZGlzYWJsZWRcblx0XHRcdC8vICogb3B0aW9uIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LW9wdGlvbi1kaXNhYmxlZFxuXHRcdFx0Ly8gQWxsIHN1Y2ggZWxlbWVudHMgaGF2ZSBhIFwiZm9ybVwiIHByb3BlcnR5LlxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgJiYgZWxlbS5kaXNhYmxlZCA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0Ly8gT3B0aW9uIGVsZW1lbnRzIGRlZmVyIHRvIGEgcGFyZW50IG9wdGdyb3VwIGlmIHByZXNlbnRcblx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5wYXJlbnROb2RlLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDYgLSAxMVxuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHQvKiBqc2hpbnQgLVcwMTggKi9cblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdGluRGlzYWJsZWRGaWVsZHNldCggZWxlbSApID09PSBkaXNhYmxlZDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXG5cdFx0Ly8gVHJ5IHRvIHdpbm5vdyBvdXQgZWxlbWVudHMgdGhhdCBjYW4ndCBiZSBkaXNhYmxlZCBiZWZvcmUgdHJ1c3RpbmcgdGhlIGRpc2FibGVkIHByb3BlcnR5LlxuXHRcdC8vIFNvbWUgdmljdGltcyBnZXQgY2F1Z2h0IGluIG91ciBuZXQgKGxhYmVsLCBsZWdlbmQsIG1lbnUsIHRyYWNrKSwgYnV0IGl0IHNob3VsZG4ndFxuXHRcdC8vIGV2ZW4gZXhpc3Qgb24gdGhlbSwgbGV0IGFsb25lIGhhdmUgYSBib29sZWFuIHZhbHVlLlxuXHRcdH0gZWxzZSBpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdH1cblxuXHRcdC8vIFJlbWFpbmluZyBlbGVtZW50cyBhcmUgbmVpdGhlciA6ZW5hYmxlZCBub3IgOmRpc2FibGVkXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgcG9zaXRpb25hbHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZuICkge1xuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggYXJndW1lbnQgKSB7XG5cdFx0YXJndW1lbnQgPSArYXJndW1lbnQ7XG5cdFx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHR2YXIgaixcblx0XHRcdFx0bWF0Y2hJbmRleGVzID0gZm4oIFtdLCBzZWVkLmxlbmd0aCwgYXJndW1lbnQgKSxcblx0XHRcdFx0aSA9IG1hdGNoSW5kZXhlcy5sZW5ndGg7XG5cblx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIGZvdW5kIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXhlc1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggc2VlZFsgKCBqID0gbWF0Y2hJbmRleGVzWyBpIF0gKSBdICkge1xuXHRcdFx0XHRcdHNlZWRbIGogXSA9ICEoIG1hdGNoZXNbIGogXSA9IHNlZWRbIGogXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9ICk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGEgbm9kZSBmb3IgdmFsaWRpdHkgYXMgYSBTaXp6bGUgY29udGV4dFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdD19IGNvbnRleHRcbiAqIEByZXR1cm5zIHtFbGVtZW50fE9iamVjdHxCb29sZWFufSBUaGUgaW5wdXQgbm9kZSBpZiBhY2NlcHRhYmxlLCBvdGhlcndpc2UgYSBmYWxzeSB2YWx1ZVxuICovXG5mdW5jdGlvbiB0ZXN0Q29udGV4dCggY29udGV4dCApIHtcblx0cmV0dXJuIGNvbnRleHQgJiYgdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29udGV4dDtcbn1cblxuLy8gRXhwb3NlIHN1cHBvcnQgdmFycyBmb3IgY29udmVuaWVuY2VcbnN1cHBvcnQgPSBTaXp6bGUuc3VwcG9ydCA9IHt9O1xuXG4vKipcbiAqIERldGVjdHMgWE1MIG5vZGVzXG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBlbGVtIEFuIGVsZW1lbnQgb3IgYSBkb2N1bWVudFxuICogQHJldHVybnMge0Jvb2xlYW59IFRydWUgaWZmIGVsZW0gaXMgYSBub24tSFRNTCBYTUwgbm9kZVxuICovXG5pc1hNTCA9IFNpenpsZS5pc1hNTCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbmFtZXNwYWNlID0gZWxlbSAmJiBlbGVtLm5hbWVzcGFjZVVSSSxcblx0XHRkb2NFbGVtID0gZWxlbSAmJiAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkuZG9jdW1lbnRFbGVtZW50O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OFxuXHQvLyBBc3N1bWUgSFRNTCB3aGVuIGRvY3VtZW50RWxlbWVudCBkb2Vzbid0IHlldCBleGlzdCwgc3VjaCBhcyBpbnNpZGUgbG9hZGluZyBpZnJhbWVzXG5cdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC80ODMzXG5cdHJldHVybiAhcmh0bWwudGVzdCggbmFtZXNwYWNlIHx8IGRvY0VsZW0gJiYgZG9jRWxlbS5ub2RlTmFtZSB8fCBcIkhUTUxcIiApO1xufTtcblxuLyoqXG4gKiBTZXRzIGRvY3VtZW50LXJlbGF0ZWQgdmFyaWFibGVzIG9uY2UgYmFzZWQgb24gdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IFtkb2NdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbnNldERvY3VtZW50ID0gU2l6emxlLnNldERvY3VtZW50ID0gZnVuY3Rpb24oIG5vZGUgKSB7XG5cdHZhciBoYXNDb21wYXJlLCBzdWJXaW5kb3csXG5cdFx0ZG9jID0gbm9kZSA/IG5vZGUub3duZXJEb2N1bWVudCB8fCBub2RlIDogcHJlZmVycmVkRG9jO1xuXG5cdC8vIFJldHVybiBlYXJseSBpZiBkb2MgaXMgaW52YWxpZCBvciBhbHJlYWR5IHNlbGVjdGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggZG9jID09IGRvY3VtZW50IHx8IGRvYy5ub2RlVHlwZSAhPT0gOSB8fCAhZG9jLmRvY3VtZW50RWxlbWVudCApIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQ7XG5cdH1cblxuXHQvLyBVcGRhdGUgZ2xvYmFsIHZhcmlhYmxlc1xuXHRkb2N1bWVudCA9IGRvYztcblx0ZG9jRWxlbSA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhaXNYTUwoIGRvY3VtZW50ICk7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnMgKGpRdWVyeSAjMTM5MzYpXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggcHJlZmVycmVkRG9jICE9IGRvY3VtZW50ICYmXG5cdFx0KCBzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyApICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExLCBFZGdlXG5cdFx0aWYgKCBzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcInVubG9hZFwiLCB1bmxvYWRIYW5kbGVyLCBmYWxzZSApO1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDEwIG9ubHlcblx0XHR9IGVsc2UgaWYgKCBzdWJXaW5kb3cuYXR0YWNoRXZlbnQgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYXR0YWNoRXZlbnQoIFwib251bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSAxMSssIEVkZ2UgMTIgLSAxOCssIENocm9tZSA8PTE2IC0gMjUgb25seSwgRmlyZWZveCA8PTMuNiAtIDMxIG9ubHksXG5cdC8vIFNhZmFyaSA0IC0gNSBvbmx5LCBPcGVyYSA8PTExLjYgLSAxMi54IG9ubHlcblx0Ly8gSUUvRWRnZSAmIG9sZGVyIGJyb3dzZXJzIGRvbid0IHN1cHBvcnQgdGhlIDpzY29wZSBwc2V1ZG8tY2xhc3MuXG5cdC8vIFN1cHBvcnQ6IFNhZmFyaSA2LjAgb25seVxuXHQvLyBTYWZhcmkgNi4wIHN1cHBvcnRzIDpzY29wZSBidXQgaXQncyBhbiBhbGlhcyBvZiA6cm9vdCB0aGVyZS5cblx0c3VwcG9ydC5zY29wZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXHRcdHJldHVybiB0eXBlb2YgZWwucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0IWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOnNjb3BlIGZpZWxkc2V0IGRpdlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0LyogQXR0cmlidXRlc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gU3VwcG9ydDogSUU8OFxuXHQvLyBWZXJpZnkgdGhhdCBnZXRBdHRyaWJ1dGUgcmVhbGx5IHJldHVybnMgYXR0cmlidXRlcyBhbmQgbm90IHByb3BlcnRpZXNcblx0Ly8gKGV4Y2VwdGluZyBJRTggYm9vbGVhbnMpXG5cdHN1cHBvcnQuYXR0cmlidXRlcyA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmNsYXNzTmFtZSA9IFwiaVwiO1xuXHRcdHJldHVybiAhZWwuZ2V0QXR0cmlidXRlKCBcImNsYXNzTmFtZVwiICk7XG5cdH0gKTtcblxuXHQvKiBnZXRFbGVtZW50KHMpQnkqXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikgcmV0dXJucyBvbmx5IGVsZW1lbnRzXG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlQ29tbWVudCggXCJcIiApICk7XG5cdFx0cmV0dXJuICFlbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCIqXCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRTw5XG5cdHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaWQgPSBleHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHwgIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKCBleHBhbmRvICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gSUQgZmlsdGVyIGFuZCBmaW5kXG5cdGlmICggc3VwcG9ydC5nZXRCeUlkICkge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblx0XHRcdFx0cmV0dXJuIGVsZW0gPyBbIGVsZW0gXSA6IFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gIGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgbm9kZSA9IHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZU5vZGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRyZXR1cm4gbm9kZSAmJiBub2RlLnZhbHVlID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gNyBvbmx5XG5cdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgaXMgbm90IHJlbGlhYmxlIGFzIGEgZmluZCBzaG9ydGN1dFxuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZFsgXCJUQUdcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA/XG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRG9jdW1lbnRGcmFnbWVudCBub2RlcyBkb24ndCBoYXZlIGdFQlROXG5cdFx0XHR9IGVsc2UgaWYgKCBzdXBwb3J0LnFzYSApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0XHR9XG5cdFx0fSA6XG5cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdHRtcCA9IFtdLFxuXHRcdFx0XHRpID0gMCxcblxuXHRcdFx0XHQvLyBCeSBoYXBweSBjb2luY2lkZW5jZSwgYSAoYnJva2VuKSBnRUJUTiBhcHBlYXJzIG9uIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgdG9vXG5cdFx0XHRcdHJlc3VsdHMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgKTtcblxuXHRcdFx0Ly8gRmlsdGVyIG91dCBwb3NzaWJsZSBjb21tZW50c1xuXHRcdFx0aWYgKCB0YWcgPT09IFwiKlwiICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0dG1wLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdG1wO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0fTtcblxuXHQvLyBDbGFzc1xuXHRFeHByLmZpbmRbIFwiQ0xBU1NcIiBdID0gc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmIGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHQvLyBtYXRjaGVzU2VsZWN0b3IoOmFjdGl2ZSkgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKElFOS9PcGVyYSAxMS41KVxuXHRyYnVnZ3lNYXRjaGVzID0gW107XG5cblx0Ly8gcVNhKDpmb2N1cykgcmVwb3J0cyBmYWxzZSB3aGVuIHRydWUgKENocm9tZSAyMSlcblx0Ly8gV2UgYWxsb3cgdGhpcyBiZWNhdXNlIG9mIGEgYnVnIGluIElFOC85IHRoYXQgdGhyb3dzIGFuIGVycm9yXG5cdC8vIHdoZW5ldmVyIGBkb2N1bWVudC5hY3RpdmVFbGVtZW50YCBpcyBhY2Nlc3NlZCBvbiBhbiBpZnJhbWVcblx0Ly8gU28sIHdlIGFsbG93IDpmb2N1cyB0byBwYXNzIHRocm91Z2ggUVNBIGFsbCB0aGUgdGltZSB0byBhdm9pZCB0aGUgSUUgZXJyb3Jcblx0Ly8gU2VlIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM3OFxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHRpZiAoICggc3VwcG9ydC5xc2EgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwgKSApICkge1xuXG5cdFx0Ly8gQnVpbGQgUVNBIHJlZ2V4XG5cdFx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHR2YXIgaW5wdXQ7XG5cblx0XHRcdC8vIFNlbGVjdCBpcyBzZXQgdG8gZW1wdHkgc3RyaW5nIG9uIHB1cnBvc2Vcblx0XHRcdC8vIFRoaXMgaXMgdG8gdGVzdCBJRSdzIHRyZWF0bWVudCBvZiBub3QgZXhwbGljaXRseVxuXHRcdFx0Ly8gc2V0dGluZyBhIGJvb2xlYW4gY29udGVudCBhdHRyaWJ1dGUsXG5cdFx0XHQvLyBzaW5jZSBpdHMgcHJlc2VuY2Ugc2hvdWxkIGJlIGVub3VnaFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEyMzU5XG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlubmVySFRNTCA9IFwiPGEgaWQ9J1wiICsgZXhwYW5kbyArIFwiJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgaWQ9J1wiICsgZXhwYW5kbyArIFwiLVxcclxcXFwnIG1zYWxsb3djYXB0dXJlPScnPlwiICtcblx0XHRcdFx0XCI8b3B0aW9uIHNlbGVjdGVkPScnPjwvb3B0aW9uPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTgsIE9wZXJhIDExLTEyLjE2XG5cdFx0XHQvLyBOb3RoaW5nIHNob3VsZCBiZSBzZWxlY3RlZCB3aGVuIGVtcHR5IHN0cmluZ3MgZm9sbG93IF49IG9yICQ9IG9yICo9XG5cdFx0XHQvLyBUaGUgdGVzdCBhdHRyaWJ1dGUgbXVzdCBiZSB1bmtub3duIGluIE9wZXJhIGJ1dCBcInNhZmVcIiBmb3IgV2luUlRcblx0XHRcdC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaWUvaGg0NjUzODguYXNweCNhdHRyaWJ1dGVfc2VjdGlvblxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlttc2FsbG93Y2FwdHVyZV49JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlsqXiRdPVwiICsgd2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gQm9vbGVhbiBhdHRyaWJ1dGVzIGFuZCBcInZhbHVlXCIgYXJlIG5vdCB0cmVhdGVkIGNvcnJlY3RseVxuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbc2VsZWN0ZWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86dmFsdWV8XCIgKyBib29sZWFucyArIFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZTwyOSwgQW5kcm9pZDw0LjQsIFNhZmFyaTw3LjArLCBpT1M8Ny4wKywgUGhhbnRvbUpTPDEuOS44K1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwifj1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHRcdC8vIElFIDExL0VkZ2UgZG9uJ3QgZmluZCBlbGVtZW50cyBvbiBhIGBbbmFtZT0nJ11gIHF1ZXJ5IGluIHNvbWUgY2FzZXMuXG5cdFx0XHQvLyBBZGRpbmcgYSB0ZW1wb3JhcnkgYXR0cmlidXRlIHRvIHRoZSBkb2N1bWVudCBiZWZvcmUgdGhlIHNlbGVjdGlvbiB3b3Jrc1xuXHRcdFx0Ly8gYXJvdW5kIHRoZSBpc3N1ZS5cblx0XHRcdC8vIEludGVyZXN0aW5nbHksIElFIDEwICYgb2xkZXIgZG9uJ3Qgc2VlbSB0byBoYXZlIHRoZSBpc3N1ZS5cblx0XHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIlwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9JyddXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqbmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKj1cIiArXG5cdFx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKig/OicnfFxcXCJcXFwiKVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFdlYmtpdC9PcGVyYSAtIDpjaGVja2VkIHNob3VsZCByZXR1cm4gc2VsZWN0ZWQgb3B0aW9uIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmNoZWNrZWRcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmNoZWNrZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCssIGlPUyA4K1xuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdFx0Ly8gSW4tcGFnZSBgc2VsZWN0b3IjaWQgc2libGluZy1jb21iaW5hdG9yIHNlbGVjdG9yYCBmYWlsc1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJhI1wiICsgZXhwYW5kbyArIFwiKypcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLiMuK1srfl1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9My42IC0gNSBvbmx5XG5cdFx0XHQvLyBPbGQgRmlyZWZveCBkb2Vzbid0IHRocm93IG9uIGEgYmFkbHktZXNjYXBlZCBpZGVudGlmaWVyLlxuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCJcXFxcXFxmXCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIltcXFxcclxcXFxuXFxcXGZdXCIgKTtcblx0XHR9ICk7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nJyBkaXNhYmxlZD0nZGlzYWJsZWQnPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBkaXNhYmxlZD0nZGlzYWJsZWQnPjxvcHRpb24vPjwvc2VsZWN0PlwiO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBXaW5kb3dzIDggTmF0aXZlIEFwcHNcblx0XHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdFx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcImhpZGRlblwiICk7XG5cdFx0XHRlbC5hcHBlbmRDaGlsZCggaW5wdXQgKS5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIkRcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEVuZm9yY2UgY2FzZS1zZW5zaXRpdml0eSBvZiBuYW1lIGF0dHJpYnV0ZVxuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPWRdXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIipbKl4kfCF+XT89XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRkYgMy41IC0gOmVuYWJsZWQvOmRpc2FibGVkIGFuZCBoaWRkZW4gZWxlbWVudHMgKGhpZGRlbiBlbGVtZW50cyBhcmUgc3RpbGwgZW5hYmxlZClcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmVuYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTktMTErXG5cdFx0XHQvLyBJRSdzIDpkaXNhYmxlZCBzZWxlY3RvciBkb2VzIG5vdCBwaWNrIHVwIHRoZSBjaGlsZHJlbiBvZiBkaXNhYmxlZCBmaWVsZHNldHNcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpkaXNhYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IE9wZXJhIDEwIC0gMTEgb25seVxuXHRcdFx0Ly8gT3BlcmEgMTAtMTEgZG9lcyBub3QgdGhyb3cgb24gcG9zdC1jb21tYSBpbnZhbGlkIHBzZXVkb3Ncblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiKiw6eFwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIsLio6XCIgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgPSBybmF0aXZlLnRlc3QoICggbWF0Y2hlcyA9IGRvY0VsZW0ubWF0Y2hlcyB8fFxuXHRcdGRvY0VsZW0ud2Via2l0TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tb3pNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm9NYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1zTWF0Y2hlc1NlbGVjdG9yICkgKSApICkge1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdC8vIENoZWNrIHRvIHNlZSBpZiBpdCdzIHBvc3NpYmxlIHRvIGRvIG1hdGNoZXNTZWxlY3RvclxuXHRcdFx0Ly8gb24gYSBkaXNjb25uZWN0ZWQgbm9kZSAoSUUgOSlcblx0XHRcdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBtYXRjaGVzLmNhbGwoIGVsLCBcIipcIiApO1xuXG5cdFx0XHQvLyBUaGlzIHNob3VsZCBmYWlsIHdpdGggYW4gZXhjZXB0aW9uXG5cdFx0XHQvLyBHZWNrbyBkb2VzIG5vdCBlcnJvciwgcmV0dXJucyBmYWxzZSBpbnN0ZWFkXG5cdFx0XHRtYXRjaGVzLmNhbGwoIGVsLCBcIltzIT0nJ106eFwiICk7XG5cdFx0XHRyYnVnZ3lNYXRjaGVzLnB1c2goIFwiIT1cIiwgcHNldWRvcyApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJidWdneVFTQSA9IHJidWdneVFTQS5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5UVNBLmpvaW4oIFwifFwiICkgKTtcblx0cmJ1Z2d5TWF0Y2hlcyA9IHJidWdneU1hdGNoZXMubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneU1hdGNoZXMuam9pbiggXCJ8XCIgKSApO1xuXG5cdC8qIENvbnRhaW5zXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblx0aGFzQ29tcGFyZSA9IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiApO1xuXG5cdC8vIEVsZW1lbnQgY29udGFpbnMgYW5vdGhlclxuXHQvLyBQdXJwb3NlZnVsbHkgc2VsZi1leGNsdXNpdmVcblx0Ly8gQXMgaW4sIGFuIGVsZW1lbnQgZG9lcyBub3QgY29udGFpbiBpdHNlbGZcblx0Y29udGFpbnMgPSBoYXNDb21wYXJlIHx8IHJuYXRpdmUudGVzdCggZG9jRWxlbS5jb250YWlucyApID9cblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdHZhciBhZG93biA9IGEubm9kZVR5cGUgPT09IDkgPyBhLmRvY3VtZW50RWxlbWVudCA6IGEsXG5cdFx0XHRcdGJ1cCA9IGIgJiYgYi5wYXJlbnROb2RlO1xuXHRcdFx0cmV0dXJuIGEgPT09IGJ1cCB8fCAhISggYnVwICYmIGJ1cC5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGFkb3duLmNvbnRhaW5zID9cblx0XHRcdFx0XHRhZG93bi5jb250YWlucyggYnVwICkgOlxuXHRcdFx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gJiYgYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYnVwICkgJiAxNlxuXHRcdFx0KSApO1xuXHRcdH0gOlxuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0aWYgKCBiICkge1xuXHRcdFx0XHR3aGlsZSAoICggYiA9IGIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0XHRcdGlmICggYiA9PT0gYSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBoYXNDb21wYXJlID9cblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBGbGFnIGZvciBkdXBsaWNhdGUgcmVtb3ZhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHQvLyBTb3J0IG9uIG1ldGhvZCBleGlzdGVuY2UgaWYgb25seSBvbmUgaW5wdXQgaGFzIGNvbXBhcmVEb2N1bWVudFBvc2l0aW9uXG5cdFx0dmFyIGNvbXBhcmUgPSAhYS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAtICFiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uO1xuXHRcdGlmICggY29tcGFyZSApIHtcblx0XHRcdHJldHVybiBjb21wYXJlO1xuXHRcdH1cblxuXHRcdC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBpZiBib3RoIGlucHV0cyBiZWxvbmcgdG8gdGhlIHNhbWUgZG9jdW1lbnRcblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdGNvbXBhcmUgPSAoIGEub3duZXJEb2N1bWVudCB8fCBhICkgPT0gKCBiLm93bmVyRG9jdW1lbnQgfHwgYiApID9cblx0XHRcdGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGIgKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBrbm93IHRoZXkgYXJlIGRpc2Nvbm5lY3RlZFxuXHRcdFx0MTtcblxuXHRcdC8vIERpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdGlmICggY29tcGFyZSAmIDEgfHxcblx0XHRcdCggIXN1cHBvcnQuc29ydERldGFjaGVkICYmIGIuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGEgKSA9PT0gY29tcGFyZSApICkge1xuXG5cdFx0XHQvLyBDaG9vc2UgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyByZWxhdGVkIHRvIG91ciBwcmVmZXJyZWQgZG9jdW1lbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGEgPT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBhICkgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYiA9PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGIgKSApIHtcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1haW50YWluIG9yaWdpbmFsIG9yZGVyXG5cdFx0XHRyZXR1cm4gc29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fSA6XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRXhpdCBlYXJseSBpZiB0aGUgbm9kZXMgYXJlIGlkZW50aWNhbFxuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0XHRyZXR1cm4gMDtcblx0XHR9XG5cblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRhdXAgPSBhLnBhcmVudE5vZGUsXG5cdFx0XHRidXAgPSBiLnBhcmVudE5vZGUsXG5cdFx0XHRhcCA9IFsgYSBdLFxuXHRcdFx0YnAgPSBbIGIgXTtcblxuXHRcdC8vIFBhcmVudGxlc3Mgbm9kZXMgYXJlIGVpdGhlciBkb2N1bWVudHMgb3IgZGlzY29ubmVjdGVkXG5cdFx0aWYgKCAhYXVwIHx8ICFidXAgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdHJldHVybiBhID09IGRvY3VtZW50ID8gLTEgOlxuXHRcdFx0XHRiID09IGRvY3VtZW50ID8gMSA6XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHRcdGF1cCA/IC0xIDpcblx0XHRcdFx0YnVwID8gMSA6XG5cdFx0XHRcdHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblxuXHRcdC8vIElmIHRoZSBub2RlcyBhcmUgc2libGluZ3MsIHdlIGNhbiBkbyBhIHF1aWNrIGNoZWNrXG5cdFx0fSBlbHNlIGlmICggYXVwID09PSBidXAgKSB7XG5cdFx0XHRyZXR1cm4gc2libGluZ0NoZWNrKCBhLCBiICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlIHdlIG5lZWQgZnVsbCBsaXN0cyBvZiB0aGVpciBhbmNlc3RvcnMgZm9yIGNvbXBhcmlzb25cblx0XHRjdXIgPSBhO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YXAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXHRcdGN1ciA9IGI7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRicC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cblx0XHQvLyBXYWxrIGRvd24gdGhlIHRyZWUgbG9va2luZyBmb3IgYSBkaXNjcmVwYW5jeVxuXHRcdHdoaWxlICggYXBbIGkgXSA9PT0gYnBbIGkgXSApIHtcblx0XHRcdGkrKztcblx0XHR9XG5cblx0XHRyZXR1cm4gaSA/XG5cblx0XHRcdC8vIERvIGEgc2libGluZyBjaGVjayBpZiB0aGUgbm9kZXMgaGF2ZSBhIGNvbW1vbiBhbmNlc3RvclxuXHRcdFx0c2libGluZ0NoZWNrKCBhcFsgaSBdLCBicFsgaSBdICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugbm9kZXMgaW4gb3VyIGRvY3VtZW50IHNvcnQgZmlyc3Rcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBlcWVxZXEgKi9cblx0XHRcdGFwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gLTEgOlxuXHRcdFx0YnBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAxIDpcblx0XHRcdC8qIGVzbGludC1lbmFibGUgZXFlcWVxICovXG5cdFx0XHQwO1xuXHR9O1xuXG5cdHJldHVybiBkb2N1bWVudDtcbn07XG5cblNpenpsZS5tYXRjaGVzID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1lbnRzICkge1xuXHRyZXR1cm4gU2l6emxlKCBleHByLCBudWxsLCBudWxsLCBlbGVtZW50cyApO1xufTtcblxuU2l6emxlLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHRzZXREb2N1bWVudCggZWxlbSApO1xuXG5cdGlmICggc3VwcG9ydC5tYXRjaGVzU2VsZWN0b3IgJiYgZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lNYXRjaGVzIHx8ICFyYnVnZ3lNYXRjaGVzLnRlc3QoIGV4cHIgKSApICYmXG5cdFx0KCAhcmJ1Z2d5UVNBICAgICB8fCAhcmJ1Z2d5UVNBLnRlc3QoIGV4cHIgKSApICkge1xuXG5cdFx0dHJ5IHtcblx0XHRcdHZhciByZXQgPSBtYXRjaGVzLmNhbGwoIGVsZW0sIGV4cHIgKTtcblxuXHRcdFx0Ly8gSUUgOSdzIG1hdGNoZXNTZWxlY3RvciByZXR1cm5zIGZhbHNlIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuXHRcdFx0aWYgKCByZXQgfHwgc3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCB8fFxuXG5cdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdC8vIGZyYWdtZW50IGluIElFIDlcblx0XHRcdFx0ZWxlbS5kb2N1bWVudCAmJiBlbGVtLmRvY3VtZW50Lm5vZGVUeXBlICE9PSAxMSApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIGV4cHIsIHRydWUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gU2l6emxlKCBleHByLCBkb2N1bWVudCwgbnVsbCwgWyBlbGVtIF0gKS5sZW5ndGggPiAwO1xufTtcblxuU2l6emxlLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICk7XG59O1xuXG5TaXp6bGUuYXR0ciA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHR9XG5cblx0dmFyIGZuID0gRXhwci5hdHRySGFuZGxlWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSxcblxuXHRcdC8vIERvbid0IGdldCBmb29sZWQgYnkgT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzIChqUXVlcnkgIzEzODA3KVxuXHRcdHZhbCA9IGZuICYmIGhhc093bi5jYWxsKCBFeHByLmF0dHJIYW5kbGUsIG5hbWUudG9Mb3dlckNhc2UoKSApID9cblx0XHRcdGZuKCBlbGVtLCBuYW1lLCAhZG9jdW1lbnRJc0hUTUwgKSA6XG5cdFx0XHR1bmRlZmluZWQ7XG5cblx0cmV0dXJuIHZhbCAhPT0gdW5kZWZpbmVkID9cblx0XHR2YWwgOlxuXHRcdHN1cHBvcnQuYXR0cmlidXRlcyB8fCAhZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKSA6XG5cdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdG51bGw7XG59O1xuXG5TaXp6bGUuZXNjYXBlID0gZnVuY3Rpb24oIHNlbCApIHtcblx0cmV0dXJuICggc2VsICsgXCJcIiApLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcbn07XG5cblNpenpsZS5lcnJvciA9IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdHRocm93IG5ldyBFcnJvciggXCJTeW50YXggZXJyb3IsIHVucmVjb2duaXplZCBleHByZXNzaW9uOiBcIiArIG1zZyApO1xufTtcblxuLyoqXG4gKiBEb2N1bWVudCBzb3J0aW5nIGFuZCByZW1vdmluZyBkdXBsaWNhdGVzXG4gKiBAcGFyYW0ge0FycmF5TGlrZX0gcmVzdWx0c1xuICovXG5TaXp6bGUudW5pcXVlU29ydCA9IGZ1bmN0aW9uKCByZXN1bHRzICkge1xuXHR2YXIgZWxlbSxcblx0XHRkdXBsaWNhdGVzID0gW10sXG5cdFx0aiA9IDAsXG5cdFx0aSA9IDA7XG5cblx0Ly8gVW5sZXNzIHdlICprbm93KiB3ZSBjYW4gZGV0ZWN0IGR1cGxpY2F0ZXMsIGFzc3VtZSB0aGVpciBwcmVzZW5jZVxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHJlc3VsdHMuc2xpY2UoIDAgKTtcblx0cmVzdWx0cy5zb3J0KCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHJlc3VsdHMuc3BsaWNlKCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgdGV4dCB2YWx1ZSBvZiBhbiBhcnJheSBvZiBET00gbm9kZXNcbiAqIEBwYXJhbSB7QXJyYXl8RWxlbWVudH0gZWxlbVxuICovXG5nZXRUZXh0ID0gU2l6emxlLmdldFRleHQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5vZGUsXG5cdFx0cmV0ID0gXCJcIixcblx0XHRpID0gMCxcblx0XHRub2RlVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0aWYgKCAhbm9kZVR5cGUgKSB7XG5cblx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdHdoaWxlICggKCBub2RlID0gZWxlbVsgaSsrIF0gKSApIHtcblxuXHRcdFx0Ly8gRG8gbm90IHRyYXZlcnNlIGNvbW1lbnQgbm9kZXNcblx0XHRcdHJldCArPSBnZXRUZXh0KCBub2RlICk7XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMSB8fCBub2RlVHlwZSA9PT0gOSB8fCBub2RlVHlwZSA9PT0gMTEgKSB7XG5cblx0XHQvLyBVc2UgdGV4dENvbnRlbnQgZm9yIGVsZW1lbnRzXG5cdFx0Ly8gaW5uZXJUZXh0IHVzYWdlIHJlbW92ZWQgZm9yIGNvbnNpc3RlbmN5IG9mIG5ldyBsaW5lcyAoalF1ZXJ5ICMxMTE1Mylcblx0XHRpZiAoIHR5cGVvZiBlbGVtLnRleHRDb250ZW50ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0udGV4dENvbnRlbnQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gVHJhdmVyc2UgaXRzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0cmV0ICs9IGdldFRleHQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVWYWx1ZTtcblx0fVxuXG5cdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdHJldHVybiByZXQ7XG59O1xuXG5FeHByID0gU2l6emxlLnNlbGVjdG9ycyA9IHtcblxuXHQvLyBDYW4gYmUgYWRqdXN0ZWQgYnkgdGhlIHVzZXJcblx0Y2FjaGVMZW5ndGg6IDUwLFxuXG5cdGNyZWF0ZVBzZXVkbzogbWFya0Z1bmN0aW9uLFxuXG5cdG1hdGNoOiBtYXRjaEV4cHIsXG5cblx0YXR0ckhhbmRsZToge30sXG5cblx0ZmluZDoge30sXG5cblx0cmVsYXRpdmU6IHtcblx0XHRcIj5cIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiIFwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIgfSxcblx0XHRcIitcIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCJ+XCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiIH1cblx0fSxcblxuXHRwcmVGaWx0ZXI6IHtcblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0Ly8gTW92ZSB0aGUgZ2l2ZW4gdmFsdWUgdG8gbWF0Y2hbM10gd2hldGhlciBxdW90ZWQgb3IgdW5xdW90ZWRcblx0XHRcdG1hdGNoWyAzIF0gPSAoIG1hdGNoWyAzIF0gfHwgbWF0Y2hbIDQgXSB8fFxuXHRcdFx0XHRtYXRjaFsgNSBdIHx8IFwiXCIgKS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAyIF0gPT09IFwifj1cIiApIHtcblx0XHRcdFx0bWF0Y2hbIDMgXSA9IFwiIFwiICsgbWF0Y2hbIDMgXSArIFwiIFwiO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDQgKTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cblx0XHRcdC8qIG1hdGNoZXMgZnJvbSBtYXRjaEV4cHJbXCJDSElMRFwiXVxuXHRcdFx0XHQxIHR5cGUgKG9ubHl8bnRofC4uLilcblx0XHRcdFx0MiB3aGF0IChjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHQzIGFyZ3VtZW50IChldmVufG9kZHxcXGQqfFxcZCpuKFsrLV1cXGQrKT98Li4uKVxuXHRcdFx0XHQ0IHhuLWNvbXBvbmVudCBvZiB4bit5IGFyZ3VtZW50IChbKy1dP1xcZCpufClcblx0XHRcdFx0NSBzaWduIG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ2IHggb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDcgc2lnbiBvZiB5LWNvbXBvbmVudFxuXHRcdFx0XHQ4IHkgb2YgeS1jb21wb25lbnRcblx0XHRcdCovXG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0XHRpZiAoIG1hdGNoWyAxIF0uc2xpY2UoIDAsIDMgKSA9PT0gXCJudGhcIiApIHtcblxuXHRcdFx0XHQvLyBudGgtKiByZXF1aXJlcyBhcmd1bWVudFxuXHRcdFx0XHRpZiAoICFtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gbnVtZXJpYyB4IGFuZCB5IHBhcmFtZXRlcnMgZm9yIEV4cHIuZmlsdGVyLkNISUxEXG5cdFx0XHRcdC8vIHJlbWVtYmVyIHRoYXQgZmFsc2UvdHJ1ZSBjYXN0IHJlc3BlY3RpdmVseSB0byAwLzFcblx0XHRcdFx0bWF0Y2hbIDQgXSA9ICsoIG1hdGNoWyA0IF0gP1xuXHRcdFx0XHRcdG1hdGNoWyA1IF0gKyAoIG1hdGNoWyA2IF0gfHwgMSApIDpcblx0XHRcdFx0XHQyICogKCBtYXRjaFsgMyBdID09PSBcImV2ZW5cIiB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICkgKTtcblx0XHRcdFx0bWF0Y2hbIDUgXSA9ICsoICggbWF0Y2hbIDcgXSArIG1hdGNoWyA4IF0gKSB8fCBtYXRjaFsgMyBdID09PSBcIm9kZFwiICk7XG5cblx0XHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFsgNiBdICYmIG1hdGNoWyAyIF07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByWyBcIkNISUxEXCIgXS50ZXN0KCBtYXRjaFsgMCBdICkgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBY2NlcHQgcXVvdGVkIGFyZ3VtZW50cyBhcy1pc1xuXHRcdFx0aWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gbWF0Y2hbIDQgXSB8fCBtYXRjaFsgNSBdIHx8IFwiXCI7XG5cblx0XHRcdC8vIFN0cmlwIGV4Y2VzcyBjaGFyYWN0ZXJzIGZyb20gdW5xdW90ZWQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCB1bnF1b3RlZCAmJiBycHNldWRvLnRlc3QoIHVucXVvdGVkICkgJiZcblxuXHRcdFx0XHQvLyBHZXQgZXhjZXNzIGZyb20gdG9rZW5pemUgKHJlY3Vyc2l2ZWx5KVxuXHRcdFx0XHQoIGV4Y2VzcyA9IHRva2VuaXplKCB1bnF1b3RlZCwgdHJ1ZSApICkgJiZcblxuXHRcdFx0XHQvLyBhZHZhbmNlIHRvIHRoZSBuZXh0IGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0KCBleGNlc3MgPSB1bnF1b3RlZC5pbmRleE9mKCBcIilcIiwgdW5xdW90ZWQubGVuZ3RoIC0gZXhjZXNzICkgLSB1bnF1b3RlZC5sZW5ndGggKSApIHtcblxuXHRcdFx0XHQvLyBleGNlc3MgaXMgYSBuZWdhdGl2ZSBpbmRleFxuXHRcdFx0XHRtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSB1bnF1b3RlZC5zbGljZSggMCwgZXhjZXNzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldHVybiBvbmx5IGNhcHR1cmVzIG5lZWRlZCBieSB0aGUgcHNldWRvIGZpbHRlciBtZXRob2QgKHR5cGUgYW5kIGFyZ3VtZW50KVxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCAzICk7XG5cdFx0fVxuXHR9LFxuXG5cdGZpbHRlcjoge1xuXG5cdFx0XCJUQUdcIjogZnVuY3Rpb24oIG5vZGVOYW1lU2VsZWN0b3IgKSB7XG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBub2RlTmFtZTtcblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDTEFTU1wiOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcdFx0XCIpXCIgKyBjbGFzc05hbWUgKyBcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkgKSAmJiBjbGFzc0NhY2hlKFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdHRlcm4udGVzdChcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHxcblx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdFx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fFxuXHRcdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fSApO1xuXHRcdH0sXG5cblx0XHRcIkFUVFJcIjogZnVuY3Rpb24oIG5hbWUsIG9wZXJhdG9yLCBjaGVjayApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHJlc3VsdCA9IFNpenpsZS5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHRcdFx0aWYgKCByZXN1bHQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiIT1cIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoICFvcGVyYXRvciApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdCArPSBcIlwiO1xuXG5cdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0XHRyZXR1cm4gb3BlcmF0b3IgPT09IFwiPVwiID8gcmVzdWx0ID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiIT1cIiA/IHJlc3VsdCAhPT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIl49XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA9PT0gMCA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiKj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiQ9XCIgPyBjaGVjayAmJiByZXN1bHQuc2xpY2UoIC1jaGVjay5sZW5ndGggKSA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIn49XCIgPyAoIFwiIFwiICsgcmVzdWx0LnJlcGxhY2UoIHJ3aGl0ZXNwYWNlLCBcIiBcIiApICsgXCIgXCIgKS5pbmRleE9mKCBjaGVjayApID4gLTEgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcInw9XCIgPyByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiIDpcblx0XHRcdFx0XHRmYWxzZTtcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIHR5cGUsIHdoYXQsIF9hcmd1bWVudCwgZmlyc3QsIGxhc3QgKSB7XG5cdFx0XHR2YXIgc2ltcGxlID0gdHlwZS5zbGljZSggMCwgMyApICE9PSBcIm50aFwiLFxuXHRcdFx0XHRmb3J3YXJkID0gdHlwZS5zbGljZSggLTQgKSAhPT0gXCJsYXN0XCIsXG5cdFx0XHRcdG9mVHlwZSA9IHdoYXQgPT09IFwib2YtdHlwZVwiO1xuXG5cdFx0XHRyZXR1cm4gZmlyc3QgPT09IDEgJiYgbGFzdCA9PT0gMCA/XG5cblx0XHRcdFx0Ly8gU2hvcnRjdXQgZm9yIDpudGgtKihuKVxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gISFlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRcdH0gOlxuXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBjYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBub2RlWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBSZXZlcnNlIGRpcmVjdGlvbiBmb3IgOm9ubHktKiAoaWYgd2UgaGF2ZW4ndCB5ZXQgZG9uZSBzbylcblx0XHRcdFx0XHRcdFx0XHRzdGFydCA9IGRpciA9IHR5cGUgPT09IFwib25seVwiICYmICFzdGFydCAmJiBcIm5leHRTaWJsaW5nXCI7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXJ0ID0gWyBmb3J3YXJkID8gcGFyZW50LmZpcnN0Q2hpbGQgOiBwYXJlbnQubGFzdENoaWxkIF07XG5cblx0XHRcdFx0XHRcdC8vIG5vbi14bWwgOm50aC1jaGlsZCguLi4pIHN0b3JlcyBjYWNoZSBkYXRhIG9uIGBwYXJlbnRgXG5cdFx0XHRcdFx0XHRpZiAoIGZvcndhcmQgJiYgdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU2VlayBgZWxlbWAgZnJvbSBhIHByZXZpb3VzbHktY2FjaGVkIGluZGV4XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRub2RlID0gcGFyZW50O1xuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleCAmJiBjYWNoZVsgMiBdO1xuXHRcdFx0XHRcdFx0XHRub2RlID0gbm9kZUluZGV4ICYmIHBhcmVudC5jaGlsZE5vZGVzWyBub2RlSW5kZXggXTtcblxuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEZhbGxiYWNrIHRvIHNlZWtpbmcgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBXaGVuIGZvdW5kLCBjYWNoZSBpbmRleGVzIG9uIGBwYXJlbnRgIGFuZCBicmVha1xuXHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZS5ub2RlVHlwZSA9PT0gMSAmJiArK2RpZmYgJiYgbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdFx0ZGlmZiA9IG5vZGVJbmRleDtcblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIHhtbCA6bnRoLWNoaWxkKC4uLilcblx0XHRcdFx0XHRcdFx0Ly8gb3IgOm50aC1sYXN0LWNoaWxkKC4uLikgb3IgOm50aCgtbGFzdCk/LW9mLXR5cGUoLi4uKVxuXHRcdFx0XHRcdFx0XHRpZiAoIGRpZmYgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gVXNlIHRoZSBzYW1lIGxvb3AgYXMgYWJvdmUgdG8gc2VlayBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9ICsrbm9kZUluZGV4ICYmIG5vZGUgJiYgbm9kZVsgZGlyIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCsrZGlmZiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBDYWNoZSB0aGUgaW5kZXggb2YgZWFjaCBlbmNvdW50ZXJlZCBlbGVtZW50XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIHBzZXVkbywgYXJndW1lbnQgKSB7XG5cblx0XHRcdC8vIHBzZXVkby1jbGFzcyBuYW1lcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIHBzZXVkbzogXCIgKyBwc2V1ZG8gKTtcblxuXHRcdFx0Ly8gVGhlIHVzZXIgbWF5IHVzZSBjcmVhdGVQc2V1ZG8gdG8gaW5kaWNhdGUgdGhhdFxuXHRcdFx0Ly8gYXJndW1lbnRzIGFyZSBuZWVkZWQgdG8gY3JlYXRlIHRoZSBmaWx0ZXIgZnVuY3Rpb25cblx0XHRcdC8vIGp1c3QgYXMgU2l6emxlIGRvZXNcblx0XHRcdGlmICggZm5bIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0cmV0dXJuIGZuKCBhcmd1bWVudCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBCdXQgbWFpbnRhaW4gc3VwcG9ydCBmb3Igb2xkIHNpZ25hdHVyZXNcblx0XHRcdGlmICggZm4ubGVuZ3RoID4gMSApIHtcblx0XHRcdFx0YXJncyA9IFsgcHNldWRvLCBwc2V1ZG8sIFwiXCIsIGFyZ3VtZW50IF07XG5cdFx0XHRcdHJldHVybiBFeHByLnNldEZpbHRlcnMuaGFzT3duUHJvcGVydHkoIHBzZXVkby50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMgKSB7XG5cdFx0XHRcdFx0XHR2YXIgaWR4LFxuXHRcdFx0XHRcdFx0XHRtYXRjaGVkID0gZm4oIHNlZWQsIGFyZ3VtZW50ICksXG5cdFx0XHRcdFx0XHRcdGkgPSBtYXRjaGVkLmxlbmd0aDtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZHggPSBpbmRleE9mKCBzZWVkLCBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdFwibm90XCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXG5cdFx0XHQvLyBUcmltIHRoZSBzZWxlY3RvciBwYXNzZWQgdG8gY29tcGlsZVxuXHRcdFx0Ly8gdG8gYXZvaWQgdHJlYXRpbmcgbGVhZGluZyBhbmQgdHJhaWxpbmdcblx0XHRcdC8vIHNwYWNlcyBhcyBjb21iaW5hdG9yc1xuXHRcdFx0dmFyIGlucHV0ID0gW10sXG5cdFx0XHRcdHJlc3VsdHMgPSBbXSxcblx0XHRcdFx0bWF0Y2hlciA9IGNvbXBpbGUoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSApO1xuXG5cdFx0XHRyZXR1cm4gbWF0Y2hlclsgZXhwYW5kbyBdID9cblx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcywgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0XHRcdHVubWF0Y2hlZCA9IG1hdGNoZXIoIHNlZWQsIG51bGwsIHhtbCwgW10gKSxcblx0XHRcdFx0XHRcdGkgPSBzZWVkLmxlbmd0aDtcblxuXHRcdFx0XHRcdC8vIE1hdGNoIGVsZW1lbnRzIHVubWF0Y2hlZCBieSBgbWF0Y2hlcmBcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaSBdID0gISggbWF0Y2hlc1sgaSBdID0gZWxlbSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApIDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0bWF0Y2hlciggaW5wdXQsIG51bGwsIHhtbCwgcmVzdWx0cyApO1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3Qga2VlcCB0aGUgZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gbnVsbDtcblx0XHRcdFx0XHRyZXR1cm4gIXJlc3VsdHMucG9wKCk7XG5cdFx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJoYXNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBTaXp6bGUoIHNlbGVjdG9yLCBlbGVtICkubGVuZ3RoID4gMDtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0XCJjb250YWluc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0dGV4dCA9IHRleHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS50ZXh0Q29udGVudCB8fCBnZXRUZXh0KCBlbGVtICkgKS5pbmRleE9mKCB0ZXh0ICkgPiAtMTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gXCJXaGV0aGVyIGFuIGVsZW1lbnQgaXMgcmVwcmVzZW50ZWQgYnkgYSA6bGFuZygpIHNlbGVjdG9yXG5cdFx0Ly8gaXMgYmFzZWQgc29sZWx5IG9uIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWVcblx0XHQvLyBiZWluZyBlcXVhbCB0byB0aGUgaWRlbnRpZmllciBDLFxuXHRcdC8vIG9yIGJlZ2lubmluZyB3aXRoIHRoZSBpZGVudGlmaWVyIEMgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgXCItXCIuXG5cdFx0Ly8gVGhlIG1hdGNoaW5nIG9mIEMgYWdhaW5zdCB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlIGlzIHBlcmZvcm1lZCBjYXNlLWluc2Vuc2l0aXZlbHkuXG5cdFx0Ly8gVGhlIGlkZW50aWZpZXIgQyBkb2VzIG5vdCBoYXZlIHRvIGJlIGEgdmFsaWQgbGFuZ3VhZ2UgbmFtZS5cIlxuXHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRcImxhbmdcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggbGFuZyApIHtcblxuXHRcdFx0Ly8gbGFuZyB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaWRlbnRpZmllclxuXHRcdFx0aWYgKCAhcmlkZW50aWZpZXIudGVzdCggbGFuZyB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcInhtbDpsYW5nXCIgKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSggXCJsYW5nXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKCBlbGVtID0gZWxlbS5wYXJlbnROb2RlICkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHRcInRhcmdldFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBoYXNoID0gd2luZG93LmxvY2F0aW9uICYmIHdpbmRvdy5sb2NhdGlvbi5oYXNoO1xuXHRcdFx0cmV0dXJuIGhhc2ggJiYgaGFzaC5zbGljZSggMSApID09PSBlbGVtLmlkO1xuXHRcdH0sXG5cblx0XHRcInJvb3RcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jRWxlbTtcblx0XHR9LFxuXG5cdFx0XCJmb2N1c1wiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICYmXG5cdFx0XHRcdCggIWRvY3VtZW50Lmhhc0ZvY3VzIHx8IGRvY3VtZW50Lmhhc0ZvY3VzKCkgKSAmJlxuXHRcdFx0XHQhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRcImVuYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGZhbHNlICksXG5cdFx0XCJkaXNhYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggdHJ1ZSApLFxuXG5cdFx0XCJjaGVja2VkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHR2YXIgbm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmICEhZWxlbS5jaGVja2VkICkgfHxcblx0XHRcdFx0KCBub2RlTmFtZSA9PT0gXCJvcHRpb25cIiAmJiAhIWVsZW0uc2VsZWN0ZWQgKTtcblx0XHR9LFxuXG5cdFx0XCJzZWxlY3RlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gQWNjZXNzaW5nIHRoaXMgcHJvcGVydHkgbWFrZXMgc2VsZWN0ZWQtYnktZGVmYXVsdFxuXHRcdFx0Ly8gb3B0aW9ucyBpbiBTYWZhcmkgd29yayBwcm9wZXJseVxuXHRcdFx0aWYgKCBlbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0XHRcdFx0ZWxlbS5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLnNlbGVjdGVkID09PSB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBDb250ZW50c1xuXHRcdFwiZW1wdHlcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jZW1wdHktcHNldWRvXG5cdFx0XHQvLyA6ZW1wdHkgaXMgbmVnYXRlZCBieSBlbGVtZW50ICgxKSBvciBjb250ZW50IG5vZGVzICh0ZXh0OiAzOyBjZGF0YTogNDsgZW50aXR5IHJlZjogNSksXG5cdFx0XHQvLyAgIGJ1dCBub3QgYnkgb3RoZXJzIChjb21tZW50OiA4OyBwcm9jZXNzaW5nIGluc3RydWN0aW9uOiA3OyBldGMuKVxuXHRcdFx0Ly8gbm9kZVR5cGUgPCA2IHdvcmtzIGJlY2F1c2UgYXR0cmlidXRlcyAoMikgZG8gbm90IGFwcGVhciBhcyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA8IDYgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0XCJwYXJlbnRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gIUV4cHIucHNldWRvc1sgXCJlbXB0eVwiIF0oIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdFwiaGVhZGVyXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJoZWFkZXIudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImlucHV0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIHJpbnB1dHMudGVzdCggZWxlbS5ub2RlTmFtZSApO1xuXHRcdH0sXG5cblx0XHRcImJ1dHRvblwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5hbWUgPT09IFwiaW5wdXRcIiAmJiBlbGVtLnR5cGUgPT09IFwiYnV0dG9uXCIgfHwgbmFtZSA9PT0gXCJidXR0b25cIjtcblx0XHR9LFxuXG5cdFx0XCJ0ZXh0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgJiZcblx0XHRcdFx0ZWxlbS50eXBlID09PSBcInRleHRcIiAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFPDhcblx0XHRcdFx0Ly8gTmV3IEhUTUw1IGF0dHJpYnV0ZSB2YWx1ZXMgKGUuZy4sIFwic2VhcmNoXCIpIGFwcGVhciB3aXRoIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCJcblx0XHRcdFx0KCAoIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSApID09IG51bGwgfHxcblx0XHRcdFx0XHRhdHRyLnRvTG93ZXJDYXNlKCkgPT09IFwidGV4dFwiICk7XG5cdFx0fSxcblxuXHRcdC8vIFBvc2l0aW9uLWluLWNvbGxlY3Rpb25cblx0XHRcImZpcnN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIFsgMCBdO1xuXHRcdH0gKSxcblxuXHRcdFwibGFzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXFcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHRyZXR1cm4gWyBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50IF07XG5cdFx0fSApLFxuXG5cdFx0XCJldmVuXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcIm9kZFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJsdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgP1xuXHRcdFx0XHRhcmd1bWVudCArIGxlbmd0aCA6XG5cdFx0XHRcdGFyZ3VtZW50ID4gbGVuZ3RoID9cblx0XHRcdFx0XHRsZW5ndGggOlxuXHRcdFx0XHRcdGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyAtLWkgPj0gMDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwiZ3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgKytpIDwgbGVuZ3RoOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApXG5cdH1cbn07XG5cbkV4cHIucHNldWRvc1sgXCJudGhcIiBdID0gRXhwci5wc2V1ZG9zWyBcImVxXCIgXTtcblxuLy8gQWRkIGJ1dHRvbi9pbnB1dCB0eXBlIHBzZXVkb3NcbmZvciAoIGkgaW4geyByYWRpbzogdHJ1ZSwgY2hlY2tib3g6IHRydWUsIGZpbGU6IHRydWUsIHBhc3N3b3JkOiB0cnVlLCBpbWFnZTogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUlucHV0UHNldWRvKCBpICk7XG59XG5mb3IgKCBpIGluIHsgc3VibWl0OiB0cnVlLCByZXNldDogdHJ1ZSB9ICkge1xuXHRFeHByLnBzZXVkb3NbIGkgXSA9IGNyZWF0ZUJ1dHRvblBzZXVkbyggaSApO1xufVxuXG4vLyBFYXN5IEFQSSBmb3IgY3JlYXRpbmcgbmV3IHNldEZpbHRlcnNcbmZ1bmN0aW9uIHNldEZpbHRlcnMoKSB7fVxuc2V0RmlsdGVycy5wcm90b3R5cGUgPSBFeHByLmZpbHRlcnMgPSBFeHByLnBzZXVkb3M7XG5FeHByLnNldEZpbHRlcnMgPSBuZXcgc2V0RmlsdGVycygpO1xuXG50b2tlbml6ZSA9IFNpenpsZS50b2tlbml6ZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKCBtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWyAwIF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKCB0b2tlbnMgPSBbXSApICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoICggbWF0Y2ggPSByY29tYmluYXRvcnMuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbSwgXCIgXCIgKVxuXHRcdFx0fSApO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KCBtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSApICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRyZXR1cm4gcGFyc2VPbmx5ID9cblx0XHRzb0Zhci5sZW5ndGggOlxuXHRcdHNvRmFyID9cblx0XHRcdFNpenpsZS5lcnJvciggc2VsZWN0b3IgKSA6XG5cblx0XHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHRcdHRva2VuQ2FjaGUoIHNlbGVjdG9yLCBncm91cHMgKS5zbGljZSggMCApO1xufTtcblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLFxuXHRcdFx0XHRuZXdDYWNoZSA9IFsgZGlycnVucywgZG9uZU5hbWUgXTtcblxuXHRcdFx0Ly8gV2UgY2FuJ3Qgc2V0IGFyYml0cmFyeSBkYXRhIG9uIFhNTCBub2Rlcywgc28gdGhleSBkb24ndCBiZW5lZml0IGZyb20gY29tYmluYXRvciBjYWNoaW5nXG5cdFx0XHRpZiAoIHhtbCApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gZWxlbVsgZXhwYW5kbyBdIHx8ICggZWxlbVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIGVsZW0udW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdGlmICggc2tpcCAmJiBza2lwID09PSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdGVsZW0gPSBlbGVtWyBkaXIgXSB8fCBlbGVtO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICggKCBvbGRDYWNoZSA9IHVuaXF1ZUNhY2hlWyBrZXkgXSApICYmXG5cdFx0XHRcdFx0XHRcdG9sZENhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgb2xkQ2FjaGVbIDEgXSA9PT0gZG9uZU5hbWUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQXNzaWduIHRvIG5ld0NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0cmV0dXJuICggbmV3Q2FjaGVbIDIgXSA9IG9sZENhY2hlWyAyIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmV1c2UgbmV3Y2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAoIG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzWyBpIF0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbIDAgXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0c1sgaSBdLCByZXN1bHRzICk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdHM7XG59XG5cbmZ1bmN0aW9uIGNvbmRlbnNlKCB1bm1hdGNoZWQsIG1hcCwgZmlsdGVyLCBjb250ZXh0LCB4bWwgKSB7XG5cdHZhciBlbGVtLFxuXHRcdG5ld1VubWF0Y2hlZCA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGxlbiA9IHVubWF0Y2hlZC5sZW5ndGgsXG5cdFx0bWFwcGVkID0gbWFwICE9IG51bGw7XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0aWYgKCAhZmlsdGVyIHx8IGZpbHRlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdG5ld1VubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdGlmICggbWFwcGVkICkge1xuXHRcdFx0XHRcdG1hcC5wdXNoKCBpICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3VW5tYXRjaGVkO1xufVxuXG5mdW5jdGlvbiBzZXRNYXRjaGVyKCBwcmVGaWx0ZXIsIHNlbGVjdG9yLCBtYXRjaGVyLCBwb3N0RmlsdGVyLCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKSB7XG5cdGlmICggcG9zdEZpbHRlciAmJiAhcG9zdEZpbHRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaWx0ZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmlsdGVyICk7XG5cdH1cblx0aWYgKCBwb3N0RmluZGVyICYmICFwb3N0RmluZGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbmRlciA9IHNldE1hdGNoZXIoIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApO1xuXHR9XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCByZXN1bHRzLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0dmFyIHRlbXAsIGksIGVsZW0sXG5cdFx0XHRwcmVNYXAgPSBbXSxcblx0XHRcdHBvc3RNYXAgPSBbXSxcblx0XHRcdHByZWV4aXN0aW5nID0gcmVzdWx0cy5sZW5ndGgsXG5cblx0XHRcdC8vIEdldCBpbml0aWFsIGVsZW1lbnRzIGZyb20gc2VlZCBvciBjb250ZXh0XG5cdFx0XHRlbGVtcyA9IHNlZWQgfHwgbXVsdGlwbGVDb250ZXh0cyhcblx0XHRcdFx0c2VsZWN0b3IgfHwgXCIqXCIsXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsXG5cdFx0XHRcdFtdXG5cdFx0XHQpLFxuXG5cdFx0XHQvLyBQcmVmaWx0ZXIgdG8gZ2V0IG1hdGNoZXIgaW5wdXQsIHByZXNlcnZpbmcgYSBtYXAgZm9yIHNlZWQtcmVzdWx0cyBzeW5jaHJvbml6YXRpb25cblx0XHRcdG1hdGNoZXJJbiA9IHByZUZpbHRlciAmJiAoIHNlZWQgfHwgIXNlbGVjdG9yICkgP1xuXHRcdFx0XHRjb25kZW5zZSggZWxlbXMsIHByZU1hcCwgcHJlRmlsdGVyLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdGVsZW1zLFxuXG5cdFx0XHRtYXRjaGVyT3V0ID0gbWF0Y2hlciA/XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBhIHBvc3RGaW5kZXIsIG9yIGZpbHRlcmVkIHNlZWQsIG9yIG5vbi1zZWVkIHBvc3RGaWx0ZXIgb3IgcHJlZXhpc3RpbmcgcmVzdWx0cyxcblx0XHRcdFx0cG9zdEZpbmRlciB8fCAoIHNlZWQgPyBwcmVGaWx0ZXIgOiBwcmVleGlzdGluZyB8fCBwb3N0RmlsdGVyICkgP1xuXG5cdFx0XHRcdFx0Ly8gLi4uaW50ZXJtZWRpYXRlIHByb2Nlc3NpbmcgaXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdFx0Ly8gLi4ub3RoZXJ3aXNlIHVzZSByZXN1bHRzIGRpcmVjdGx5XG5cdFx0XHRcdFx0cmVzdWx0cyA6XG5cdFx0XHRcdG1hdGNoZXJJbjtcblxuXHRcdC8vIEZpbmQgcHJpbWFyeSBtYXRjaGVzXG5cdFx0aWYgKCBtYXRjaGVyICkge1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKCBtYXRjaGVySW5bIGkgXSA9IGVsZW0gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJlxuXHRcdFx0XHRcdFx0KCB0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YoIHNlZWQsIGVsZW0gKSA6IHByZU1hcFsgaSBdICkgPiAtMSApIHtcblxuXHRcdFx0XHRcdFx0c2VlZFsgdGVtcCBdID0gISggcmVzdWx0c1sgdGVtcCBdID0gZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gQWRkIGVsZW1lbnRzIHRvIHJlc3VsdHMsIHRocm91Z2ggcG9zdEZpbmRlciBpZiBkZWZpbmVkXG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXJPdXQgPSBjb25kZW5zZShcblx0XHRcdFx0bWF0Y2hlck91dCA9PT0gcmVzdWx0cyA/XG5cdFx0XHRcdFx0bWF0Y2hlck91dC5zcGxpY2UoIHByZWV4aXN0aW5nLCBtYXRjaGVyT3V0Lmxlbmd0aCApIDpcblx0XHRcdFx0XHRtYXRjaGVyT3V0XG5cdFx0XHQpO1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCByZXN1bHRzLCBtYXRjaGVyT3V0LCB4bWwgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIG1hdGNoZXJPdXQgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Ub2tlbnMoIHRva2VucyApIHtcblx0dmFyIGNoZWNrQ29udGV4dCwgbWF0Y2hlciwgaixcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdGxlYWRpbmdSZWxhdGl2ZSA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMCBdLnR5cGUgXSxcblx0XHRpbXBsaWNpdFJlbGF0aXZlID0gbGVhZGluZ1JlbGF0aXZlIHx8IEV4cHIucmVsYXRpdmVbIFwiIFwiIF0sXG5cdFx0aSA9IGxlYWRpbmdSZWxhdGl2ZSA/IDEgOiAwLFxuXG5cdFx0Ly8gVGhlIGZvdW5kYXRpb25hbCBtYXRjaGVyIGVuc3VyZXMgdGhhdCBlbGVtZW50cyBhcmUgcmVhY2hhYmxlIGZyb20gdG9wLWxldmVsIGNvbnRleHQocylcblx0XHRtYXRjaENvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBjaGVja0NvbnRleHQ7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoQW55Q29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YoIGNoZWNrQ29udGV4dCwgZWxlbSApID4gLTE7XG5cdFx0fSwgaW1wbGljaXRSZWxhdGl2ZSwgdHJ1ZSApLFxuXHRcdG1hdGNoZXJzID0gWyBmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIHJldCA9ICggIWxlYWRpbmdSZWxhdGl2ZSAmJiAoIHhtbCB8fCBjb250ZXh0ICE9PSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdCggY2hlY2tDb250ZXh0ID0gY29udGV4dCApLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0Y2hlY2tDb250ZXh0ID0gbnVsbDtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fSBdO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBtYXRjaGVyID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBpIF0udHlwZSBdICkgKSB7XG5cdFx0XHRtYXRjaGVycyA9IFsgYWRkQ29tYmluYXRvciggZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksIG1hdGNoZXIgKSBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyID0gRXhwci5maWx0ZXJbIHRva2Vuc1sgaSBdLnR5cGUgXS5hcHBseSggbnVsbCwgdG9rZW5zWyBpIF0ubWF0Y2hlcyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gc3BlY2lhbCB1cG9uIHNlZWluZyBhIHBvc2l0aW9uYWwgbWF0Y2hlclxuXHRcdFx0aWYgKCBtYXRjaGVyWyBleHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0Ly8gRmluZCB0aGUgbmV4dCByZWxhdGl2ZSBvcGVyYXRvciAoaWYgYW55KSBmb3IgcHJvcGVyIGhhbmRsaW5nXG5cdFx0XHRcdGogPSArK2k7XG5cdFx0XHRcdGZvciAoIDsgaiA8IGxlbjsgaisrICkge1xuXHRcdFx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyBqIF0udHlwZSBdICkge1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBzZXRNYXRjaGVyKFxuXHRcdFx0XHRcdGkgPiAxICYmIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLFxuXHRcdFx0XHRcdGkgPiAxICYmIHRvU2VsZWN0b3IoXG5cblx0XHRcdFx0XHQvLyBJZiB0aGUgcHJlY2VkaW5nIHRva2VuIHdhcyBhIGRlc2NlbmRhbnQgY29tYmluYXRvciwgaW5zZXJ0IGFuIGltcGxpY2l0IGFueS1lbGVtZW50IGAqYFxuXHRcdFx0XHRcdHRva2Vuc1xuXHRcdFx0XHRcdFx0LnNsaWNlKCAwLCBpIC0gMSApXG5cdFx0XHRcdFx0XHQuY29uY2F0KCB7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSApXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kWyBcIlRBR1wiIF0oIFwiKlwiLCBvdXRlcm1vc3QgKSxcblxuXHRcdFx0XHQvLyBVc2UgaW50ZWdlciBkaXJydW5zIGlmZiB0aGlzIGlzIHRoZSBvdXRlcm1vc3QgbWF0Y2hlclxuXHRcdFx0XHRkaXJydW5zVW5pcXVlID0gKCBkaXJydW5zICs9IGNvbnRleHRCYWNrdXAgPT0gbnVsbCA/IDEgOiBNYXRoLnJhbmRvbSgpIHx8IDAuMSApLFxuXHRcdFx0XHRsZW4gPSBlbGVtcy5sZW5ndGg7XG5cblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0ID09IGRvY3VtZW50IHx8IGNvbnRleHQgfHwgb3V0ZXJtb3N0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgZWxlbWVudHMgcGFzc2luZyBlbGVtZW50TWF0Y2hlcnMgZGlyZWN0bHkgdG8gcmVzdWx0c1xuXHRcdFx0Ly8gU3VwcG9ydDogSUU8OSwgU2FmYXJpXG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmcgZWxlbWVudHMgYnkgaWRcblx0XHRcdGZvciAoIDsgaSAhPT0gbGVuICYmICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggYnlFbGVtZW50ICYmIGVsZW0gKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRcdGlmICggIWNvbnRleHQgJiYgZWxlbS5vd25lckRvY3VtZW50ICE9IGRvY3VtZW50ICkge1xuXHRcdFx0XHRcdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0XHRcdFx0XHRcdHhtbCA9ICFkb2N1bWVudElzSFRNTDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBlbGVtZW50TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQgfHwgZG9jdW1lbnQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHJhY2sgdW5tYXRjaGVkIGVsZW1lbnRzIGZvciBzZXQgZmlsdGVyc1xuXHRcdFx0XHRpZiAoIGJ5U2V0ICkge1xuXG5cdFx0XHRcdFx0Ly8gVGhleSB3aWxsIGhhdmUgZ29uZSB0aHJvdWdoIGFsbCBwb3NzaWJsZSBtYXRjaGVyc1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gIW1hdGNoZXIgJiYgZWxlbSApICkge1xuXHRcdFx0XHRcdFx0bWF0Y2hlZENvdW50LS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gTGVuZ3RoZW4gdGhlIGFycmF5IGZvciBldmVyeSBlbGVtZW50LCBtYXRjaGVkIG9yIG5vdFxuXHRcdFx0XHRcdGlmICggc2VlZCApIHtcblx0XHRcdFx0XHRcdHVubWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIGBpYCBpcyBub3cgdGhlIGNvdW50IG9mIGVsZW1lbnRzIHZpc2l0ZWQgYWJvdmUsIGFuZCBhZGRpbmcgaXQgdG8gYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIG1ha2VzIHRoZSBsYXR0ZXIgbm9ubmVnYXRpdmUuXG5cdFx0XHRtYXRjaGVkQ291bnQgKz0gaTtcblxuXHRcdFx0Ly8gQXBwbHkgc2V0IGZpbHRlcnMgdG8gdW5tYXRjaGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBOT1RFOiBUaGlzIGNhbiBiZSBza2lwcGVkIGlmIHRoZXJlIGFyZSBubyB1bm1hdGNoZWQgZWxlbWVudHMgKGkuZS4sIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBlcXVhbHMgYGlgKSwgdW5sZXNzIHdlIGRpZG4ndCB2aXNpdCBfYW55XyBlbGVtZW50cyBpbiB0aGUgYWJvdmUgbG9vcCBiZWNhdXNlIHdlIGhhdmVcblx0XHRcdC8vIG5vIGVsZW1lbnQgbWF0Y2hlcnMgYW5kIG5vIHNlZWQuXG5cdFx0XHQvLyBJbmNyZW1lbnRpbmcgYW4gaW5pdGlhbGx5LXN0cmluZyBcIjBcIiBgaWAgYWxsb3dzIGBpYCB0byByZW1haW4gYSBzdHJpbmcgb25seSBpbiB0aGF0XG5cdFx0XHQvLyBjYXNlLCB3aGljaCB3aWxsIHJlc3VsdCBpbiBhIFwiMDBcIiBgbWF0Y2hlZENvdW50YCB0aGF0IGRpZmZlcnMgZnJvbSBgaWAgYnV0IGlzIGFsc29cblx0XHRcdC8vIG51bWVyaWNhbGx5IHplcm8uXG5cdFx0XHRpZiAoIGJ5U2V0ICYmIGkgIT09IG1hdGNoZWRDb3VudCApIHtcblx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gc2V0TWF0Y2hlcnNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlciggdW5tYXRjaGVkLCBzZXRNYXRjaGVkLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICggc2VlZCApIHtcblxuXHRcdFx0XHRcdC8vIFJlaW50ZWdyYXRlIGVsZW1lbnQgbWF0Y2hlcyB0byBlbGltaW5hdGUgdGhlIG5lZWQgZm9yIHNvcnRpbmdcblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRDb3VudCA+IDAgKSB7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCAhKCB1bm1hdGNoZWRbIGkgXSB8fCBzZXRNYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRzZXRNYXRjaGVkWyBpIF0gPSBwb3AuY2FsbCggcmVzdWx0cyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRGlzY2FyZCBpbmRleCBwbGFjZWhvbGRlciB2YWx1ZXMgdG8gZ2V0IG9ubHkgYWN0dWFsIG1hdGNoZXNcblx0XHRcdFx0XHRzZXRNYXRjaGVkID0gY29uZGVuc2UoIHNldE1hdGNoZWQgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFkZCBtYXRjaGVzIHRvIHJlc3VsdHNcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2V0TWF0Y2hlZCApO1xuXG5cdFx0XHRcdC8vIFNlZWRsZXNzIHNldCBtYXRjaGVzIHN1Y2NlZWRpbmcgbXVsdGlwbGUgc3VjY2Vzc2Z1bCBtYXRjaGVycyBzdGlwdWxhdGUgc29ydGluZ1xuXHRcdFx0XHRpZiAoIG91dGVybW9zdCAmJiAhc2VlZCAmJiBzZXRNYXRjaGVkLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHQoIG1hdGNoZWRDb3VudCArIHNldE1hdGNoZXJzLmxlbmd0aCApID4gMSApIHtcblxuXHRcdFx0XHRcdFNpenpsZS51bmlxdWVTb3J0KCByZXN1bHRzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gT3ZlcnJpZGUgbWFuaXB1bGF0aW9uIG9mIGdsb2JhbHMgYnkgbmVzdGVkIG1hdGNoZXJzXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0ZGlycnVucyA9IGRpcnJ1bnNVbmlxdWU7XG5cdFx0XHRcdG91dGVybW9zdENvbnRleHQgPSBjb250ZXh0QmFja3VwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdW5tYXRjaGVkO1xuXHRcdH07XG5cblx0cmV0dXJuIGJ5U2V0ID9cblx0XHRtYXJrRnVuY3Rpb24oIHN1cGVyTWF0Y2hlciApIDpcblx0XHRzdXBlck1hdGNoZXI7XG59XG5cbmNvbXBpbGUgPSBTaXp6bGUuY29tcGlsZSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFsgaSBdICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKFxuXHRcdFx0c2VsZWN0b3IsXG5cdFx0XHRtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKVxuXHRcdCk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufTtcblxuLyoqXG4gKiBBIGxvdy1sZXZlbCBzZWxlY3Rpb24gZnVuY3Rpb24gdGhhdCB3b3JrcyB3aXRoIFNpenpsZSdzIGNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb25zXG4gKiBAcGFyYW0ge1N0cmluZ3xGdW5jdGlvbn0gc2VsZWN0b3IgQSBzZWxlY3RvciBvciBhIHByZS1jb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uIGJ1aWx0IHdpdGggU2l6emxlLmNvbXBpbGVcbiAqIEBwYXJhbSB7RWxlbWVudH0gY29udGV4dFxuICogQHBhcmFtIHtBcnJheX0gW3Jlc3VsdHNdXG4gKiBAcGFyYW0ge0FycmF5fSBbc2VlZF0gQSBzZXQgb2YgZWxlbWVudHMgdG8gbWF0Y2ggYWdhaW5zdFxuICovXG5zZWxlY3QgPSBTaXp6bGUuc2VsZWN0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgaSwgdG9rZW5zLCB0b2tlbiwgdHlwZSwgZmluZCxcblx0XHRjb21waWxlZCA9IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICYmIHNlbGVjdG9yLFxuXHRcdG1hdGNoID0gIXNlZWQgJiYgdG9rZW5pemUoICggc2VsZWN0b3IgPSBjb21waWxlZC5zZWxlY3RvciB8fCBzZWxlY3RvciApICk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gVHJ5IHRvIG1pbmltaXplIG9wZXJhdGlvbnMgaWYgdGhlcmUgaXMgb25seSBvbmUgc2VsZWN0b3IgaW4gdGhlIGxpc3QgYW5kIG5vIHNlZWRcblx0Ly8gKHRoZSBsYXR0ZXIgb2Ygd2hpY2ggZ3VhcmFudGVlcyB1cyBjb250ZXh0KVxuXHRpZiAoIG1hdGNoLmxlbmd0aCA9PT0gMSApIHtcblxuXHRcdC8vIFJlZHVjZSBjb250ZXh0IGlmIHRoZSBsZWFkaW5nIGNvbXBvdW5kIHNlbGVjdG9yIGlzIGFuIElEXG5cdFx0dG9rZW5zID0gbWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAgKTtcblx0XHRpZiAoIHRva2Vucy5sZW5ndGggPiAyICYmICggdG9rZW4gPSB0b2tlbnNbIDAgXSApLnR5cGUgPT09IFwiSURcIiAmJlxuXHRcdFx0Y29udGV4dC5ub2RlVHlwZSA9PT0gOSAmJiBkb2N1bWVudElzSFRNTCAmJiBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDEgXS50eXBlIF0gKSB7XG5cblx0XHRcdGNvbnRleHQgPSAoIEV4cHIuZmluZFsgXCJJRFwiIF0oIHRva2VuLm1hdGNoZXNbIDAgXVxuXHRcdFx0XHQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSwgY29udGV4dCApIHx8IFtdIClbIDAgXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHJbIFwibmVlZHNDb250ZXh0XCIgXS50ZXN0KCBzZWxlY3RvciApID8gMCA6IHRva2Vucy5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0b2tlbiA9IHRva2Vuc1sgaSBdO1xuXG5cdFx0XHQvLyBBYm9ydCBpZiB3ZSBoaXQgYSBjb21iaW5hdG9yXG5cdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbICggdHlwZSA9IHRva2VuLnR5cGUgKSBdICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggKCBmaW5kID0gRXhwci5maW5kWyB0eXBlIF0gKSApIHtcblxuXHRcdFx0XHQvLyBTZWFyY2gsIGV4cGFuZGluZyBjb250ZXh0IGZvciBsZWFkaW5nIHNpYmxpbmcgY29tYmluYXRvcnNcblx0XHRcdFx0aWYgKCAoIHNlZWQgPSBmaW5kKFxuXHRcdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRcdHJzaWJsaW5nLnRlc3QoIHRva2Vuc1sgMCBdLnR5cGUgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHxcblx0XHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KSApICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgc2VlZCBpcyBlbXB0eSBvciBubyB0b2tlbnMgcmVtYWluLCB3ZSBjYW4gcmV0dXJuIGVhcmx5XG5cdFx0XHRcdFx0dG9rZW5zLnNwbGljZSggaSwgMSApO1xuXHRcdFx0XHRcdHNlbGVjdG9yID0gc2VlZC5sZW5ndGggJiYgdG9TZWxlY3RvciggdG9rZW5zICk7XG5cdFx0XHRcdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZWVkICk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENvbXBpbGUgYW5kIGV4ZWN1dGUgYSBmaWx0ZXJpbmcgZnVuY3Rpb24gaWYgb25lIGlzIG5vdCBwcm92aWRlZFxuXHQvLyBQcm92aWRlIGBtYXRjaGAgdG8gYXZvaWQgcmV0b2tlbml6YXRpb24gaWYgd2UgbW9kaWZpZWQgdGhlIHNlbGVjdG9yIGFib3ZlXG5cdCggY29tcGlsZWQgfHwgY29tcGlsZSggc2VsZWN0b3IsIG1hdGNoICkgKShcblx0XHRzZWVkLFxuXHRcdGNvbnRleHQsXG5cdFx0IWRvY3VtZW50SXNIVE1MLFxuXHRcdHJlc3VsdHMsXG5cdFx0IWNvbnRleHQgfHwgcnNpYmxpbmcudGVzdCggc2VsZWN0b3IgKSAmJiB0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHQpO1xuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbi8vIE9uZS10aW1lIGFzc2lnbm1lbnRzXG5cbi8vIFNvcnQgc3RhYmlsaXR5XG5zdXBwb3J0LnNvcnRTdGFibGUgPSBleHBhbmRvLnNwbGl0KCBcIlwiICkuc29ydCggc29ydE9yZGVyICkuam9pbiggXCJcIiApID09PSBleHBhbmRvO1xuXG4vLyBTdXBwb3J0OiBDaHJvbWUgMTQtMzUrXG4vLyBBbHdheXMgYXNzdW1lIGR1cGxpY2F0ZXMgaWYgdGhleSBhcmVuJ3QgcGFzc2VkIHRvIHRoZSBjb21wYXJpc29uIGZ1bmN0aW9uXG5zdXBwb3J0LmRldGVjdER1cGxpY2F0ZXMgPSAhIWhhc0R1cGxpY2F0ZTtcblxuLy8gSW5pdGlhbGl6ZSBhZ2FpbnN0IHRoZSBkZWZhdWx0IGRvY3VtZW50XG5zZXREb2N1bWVudCgpO1xuXG4vLyBTdXBwb3J0OiBXZWJraXQ8NTM3LjMyIC0gU2FmYXJpIDYuMC4zL0Nocm9tZSAyNSAoZml4ZWQgaW4gQ2hyb21lIDI3KVxuLy8gRGV0YWNoZWQgbm9kZXMgY29uZm91bmRpbmdseSBmb2xsb3cgKmVhY2ggb3RoZXIqXG5zdXBwb3J0LnNvcnREZXRhY2hlZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdC8vIFNob3VsZCByZXR1cm4gMSwgYnV0IHJldHVybnMgNCAoZm9sbG93aW5nKVxuXHRyZXR1cm4gZWwuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApICkgJiAxO1xufSApO1xuXG4vLyBTdXBwb3J0OiBJRTw4XG4vLyBQcmV2ZW50IGF0dHJpYnV0ZS9wcm9wZXJ0eSBcImludGVycG9sYXRpb25cIlxuLy8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9tczUzNjQyOSUyOFZTLjg1JTI5LmFzcHhcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JyMnPjwvYT5cIjtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcImhyZWZcIiApID09PSBcIiNcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInR5cGV8aHJlZnxoZWlnaHR8d2lkdGhcIiwgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwidHlwZVwiID8gMSA6IDIgKTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGRlZmF1bHRWYWx1ZSBpbiBwbGFjZSBvZiBnZXRBdHRyaWJ1dGUoXCJ2YWx1ZVwiKVxuaWYgKCAhc3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8aW5wdXQvPlwiO1xuXHRlbC5maXJzdENoaWxkLnNldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiLCBcIlwiICk7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IFwiXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ2YWx1ZVwiLCBmdW5jdGlvbiggZWxlbSwgX25hbWUsIGlzWE1MICkge1xuXHRcdGlmICggIWlzWE1MICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGVmYXVsdFZhbHVlO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZ2V0QXR0cmlidXRlTm9kZSB0byBmZXRjaCBib29sZWFucyB3aGVuIGdldEF0dHJpYnV0ZSBsaWVzXG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0cmV0dXJuIGVsLmdldEF0dHJpYnV0ZSggXCJkaXNhYmxlZFwiICkgPT0gbnVsbDtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBib29sZWFucywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciB2YWw7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdID09PSB0cnVlID8gbmFtZS50b0xvd2VyQ2FzZSgpIDpcblx0XHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHRcdHZhbC52YWx1ZSA6XG5cdFx0XHRcdFx0bnVsbDtcblx0XHR9XG5cdH0gKTtcbn1cblxucmV0dXJuIFNpenpsZTtcblxufSApKCB3aW5kb3cgKTtcblxuXG5cbmpRdWVyeS5maW5kID0gU2l6emxlO1xualF1ZXJ5LmV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWUgPSBTaXp6bGUudW5pcXVlU29ydDtcbmpRdWVyeS50ZXh0ID0gU2l6emxlLmdldFRleHQ7XG5qUXVlcnkuaXNYTUxEb2MgPSBTaXp6bGUuaXNYTUw7XG5qUXVlcnkuY29udGFpbnMgPSBTaXp6bGUuY29udGFpbnM7XG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBTaXp6bGUuZXNjYXBlO1xuXG5cblxuXG52YXIgZGlyID0gZnVuY3Rpb24oIGVsZW0sIGRpciwgdW50aWwgKSB7XG5cdHZhciBtYXRjaGVkID0gW10sXG5cdFx0dHJ1bmNhdGUgPSB1bnRpbCAhPT0gdW5kZWZpbmVkO1xuXG5cdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSAmJiBlbGVtLm5vZGVUeXBlICE9PSA5ICkge1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGlmICggdHJ1bmNhdGUgJiYgalF1ZXJ5KCBlbGVtICkuaXMoIHVudGlsICkgKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlZC5wdXNoKCBlbGVtICk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgc2libGluZ3MgPSBmdW5jdGlvbiggbiwgZWxlbSApIHtcblx0dmFyIG1hdGNoZWQgPSBbXTtcblxuXHRmb3IgKCA7IG47IG4gPSBuLm5leHRTaWJsaW5nICkge1xuXHRcdGlmICggbi5ub2RlVHlwZSA9PT0gMSAmJiBuICE9PSBlbGVtICkge1xuXHRcdFx0bWF0Y2hlZC5wdXNoKCBuICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBybmVlZHNDb250ZXh0ID0galF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0O1xuXG5cblxuZnVuY3Rpb24gbm9kZU5hbWUoIGVsZW0sIG5hbWUgKSB7XG5cblx0cmV0dXJuIGVsZW0ubm9kZU5hbWUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cbn1cbnZhciByc2luZ2xlVGFnID0gKCAvXjwoW2Etel1bXlxcL1xcMD46XFx4MjBcXHRcXHJcXG5cXGZdKilbXFx4MjBcXHRcXHJcXG5cXGZdKlxcLz8+KD86PFxcL1xcMT58KSQvaSApO1xuXG5cblxuLy8gSW1wbGVtZW50IHRoZSBpZGVudGljYWwgZnVuY3Rpb25hbGl0eSBmb3IgZmlsdGVyIGFuZCBub3RcbmZ1bmN0aW9uIHdpbm5vdyggZWxlbWVudHMsIHF1YWxpZmllciwgbm90ICkge1xuXHRpZiAoIGlzRnVuY3Rpb24oIHF1YWxpZmllciApICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICEhcXVhbGlmaWVyLmNhbGwoIGVsZW0sIGksIGVsZW0gKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIFNpbmdsZSBlbGVtZW50XG5cdGlmICggcXVhbGlmaWVyLm5vZGVUeXBlICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggZWxlbSA9PT0gcXVhbGlmaWVyICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBBcnJheWxpa2Ugb2YgZWxlbWVudHMgKGpRdWVyeSwgYXJndW1lbnRzLCBBcnJheSlcblx0aWYgKCB0eXBlb2YgcXVhbGlmaWVyICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ3JlcCggZWxlbWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICggaW5kZXhPZi5jYWxsKCBxdWFsaWZpZXIsIGVsZW0gKSA+IC0xICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBGaWx0ZXJlZCBkaXJlY3RseSBmb3IgYm90aCBzaW1wbGUgYW5kIGNvbXBsZXggc2VsZWN0b3JzXG5cdHJldHVybiBqUXVlcnkuZmlsdGVyKCBxdWFsaWZpZXIsIGVsZW1lbnRzLCBub3QgKTtcbn1cblxualF1ZXJ5LmZpbHRlciA9IGZ1bmN0aW9uKCBleHByLCBlbGVtcywgbm90ICkge1xuXHR2YXIgZWxlbSA9IGVsZW1zWyAwIF07XG5cblx0aWYgKCBub3QgKSB7XG5cdFx0ZXhwciA9IFwiOm5vdChcIiArIGV4cHIgKyBcIilcIjtcblx0fVxuXG5cdGlmICggZWxlbXMubGVuZ3RoID09PSAxICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZWxlbSwgZXhwciApID8gWyBlbGVtIF0gOiBbXTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzKCBleHByLCBqUXVlcnkuZ3JlcCggZWxlbXMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBlbGVtLm5vZGVUeXBlID09PSAxO1xuXHR9ICkgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmluZDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBpLCByZXQsXG5cdFx0XHRsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdHNlbGYgPSB0aGlzO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeSggc2VsZWN0b3IgKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCBzZWxmWyBpIF0sIHRoaXMgKSApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSApICk7XG5cdFx0fVxuXG5cdFx0cmV0ID0gdGhpcy5wdXNoU3RhY2soIFtdICk7XG5cblx0XHRmb3IgKCBpID0gMDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQoIHNlbGVjdG9yLCBzZWxmWyBpIF0sIHJldCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBsZW4gPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIHJldCApIDogcmV0O1xuXHR9LFxuXHRmaWx0ZXI6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIGZhbHNlICkgKTtcblx0fSxcblx0bm90OiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCB0cnVlICkgKTtcblx0fSxcblx0aXM6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gISF3aW5ub3coXG5cdFx0XHR0aGlzLFxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgcG9zaXRpb25hbC9yZWxhdGl2ZSBzZWxlY3RvciwgY2hlY2sgbWVtYmVyc2hpcCBpbiB0aGUgcmV0dXJuZWQgc2V0XG5cdFx0XHQvLyBzbyAkKFwicDpmaXJzdFwiKS5pcyhcInA6bGFzdFwiKSB3b24ndCByZXR1cm4gdHJ1ZSBmb3IgYSBkb2Mgd2l0aCB0d28gXCJwXCIuXG5cdFx0XHR0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgJiYgcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApID9cblx0XHRcdFx0alF1ZXJ5KCBzZWxlY3RvciApIDpcblx0XHRcdFx0c2VsZWN0b3IgfHwgW10sXG5cdFx0XHRmYWxzZVxuXHRcdCkubGVuZ3RoO1xuXHR9XG59ICk7XG5cblxuLy8gSW5pdGlhbGl6ZSBhIGpRdWVyeSBvYmplY3RcblxuXG4vLyBBIGNlbnRyYWwgcmVmZXJlbmNlIHRvIHRoZSByb290IGpRdWVyeShkb2N1bWVudClcbnZhciByb290alF1ZXJ5LFxuXG5cdC8vIEEgc2ltcGxlIHdheSB0byBjaGVjayBmb3IgSFRNTCBzdHJpbmdzXG5cdC8vIFByaW9yaXRpemUgI2lkIG92ZXIgPHRhZz4gdG8gYXZvaWQgWFNTIHZpYSBsb2NhdGlvbi5oYXNoICgjOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKCMxMTI5MDogbXVzdCBzdGFydCB3aXRoIDwpXG5cdC8vIFNob3J0Y3V0IHNpbXBsZSAjaWQgY2FzZSBmb3Igc3BlZWRcblx0cnF1aWNrRXhwciA9IC9eKD86XFxzKig8W1xcd1xcV10rPilbXj5dKnwjKFtcXHctXSspKSQvLFxuXG5cdGluaXQgPSBqUXVlcnkuZm4uaW5pdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcm9vdCApIHtcblx0XHR2YXIgbWF0Y2gsIGVsZW07XG5cblx0XHQvLyBIQU5ETEU6ICQoXCJcIiksICQobnVsbCksICQodW5kZWZpbmVkKSwgJChmYWxzZSlcblx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblxuXHRcdC8vIE1ldGhvZCBpbml0KCkgYWNjZXB0cyBhbiBhbHRlcm5hdGUgcm9vdGpRdWVyeVxuXHRcdC8vIHNvIG1pZ3JhdGUgY2FuIHN1cHBvcnQgalF1ZXJ5LnN1YiAoZ2gtMjEwMSlcblx0XHRyb290ID0gcm9vdCB8fCByb290alF1ZXJ5O1xuXG5cdFx0Ly8gSGFuZGxlIEhUTUwgc3RyaW5nc1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0aWYgKCBzZWxlY3RvclsgMCBdID09PSBcIjxcIiAmJlxuXHRcdFx0XHRzZWxlY3Rvclsgc2VsZWN0b3IubGVuZ3RoIC0gMSBdID09PSBcIj5cIiAmJlxuXHRcdFx0XHRzZWxlY3Rvci5sZW5ndGggPj0gMyApIHtcblxuXHRcdFx0XHQvLyBBc3N1bWUgdGhhdCBzdHJpbmdzIHRoYXQgc3RhcnQgYW5kIGVuZCB3aXRoIDw+IGFyZSBIVE1MIGFuZCBza2lwIHRoZSByZWdleCBjaGVja1xuXHRcdFx0XHRtYXRjaCA9IFsgbnVsbCwgc2VsZWN0b3IsIG51bGwgXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0bWF0Y2ggPSBycXVpY2tFeHByLmV4ZWMoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1hdGNoIGh0bWwgb3IgbWFrZSBzdXJlIG5vIGNvbnRleHQgaXMgc3BlY2lmaWVkIGZvciAjaWRcblx0XHRcdGlmICggbWF0Y2ggJiYgKCBtYXRjaFsgMSBdIHx8ICFjb250ZXh0ICkgKSB7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwpIC0+ICQoYXJyYXkpXG5cdFx0XHRcdGlmICggbWF0Y2hbIDEgXSApIHtcblx0XHRcdFx0XHRjb250ZXh0ID0gY29udGV4dCBpbnN0YW5jZW9mIGpRdWVyeSA/IGNvbnRleHRbIDAgXSA6IGNvbnRleHQ7XG5cblx0XHRcdFx0XHQvLyBPcHRpb24gdG8gcnVuIHNjcmlwdHMgaXMgdHJ1ZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0XHQvLyBJbnRlbnRpb25hbGx5IGxldCB0aGUgZXJyb3IgYmUgdGhyb3duIGlmIHBhcnNlSFRNTCBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcywgalF1ZXJ5LnBhcnNlSFRNTChcblx0XHRcdFx0XHRcdG1hdGNoWyAxIF0sXG5cdFx0XHRcdFx0XHRjb250ZXh0ICYmIGNvbnRleHQubm9kZVR5cGUgPyBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCA6IGRvY3VtZW50LFxuXHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdCkgKTtcblxuXHRcdFx0XHRcdC8vIEhBTkRMRTogJChodG1sLCBwcm9wcylcblx0XHRcdFx0XHRpZiAoIHJzaW5nbGVUYWcudGVzdCggbWF0Y2hbIDEgXSApICYmIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb250ZXh0ICkgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCBtYXRjaCBpbiBjb250ZXh0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFByb3BlcnRpZXMgb2YgY29udGV4dCBhcmUgY2FsbGVkIGFzIG1ldGhvZHMgaWYgcG9zc2libGVcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGlzWyBtYXRjaCBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpc1sgbWF0Y2ggXSggY29udGV4dFsgbWF0Y2ggXSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBvdGhlcndpc2Ugc2V0IGFzIGF0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmF0dHIoIG1hdGNoLCBjb250ZXh0WyBtYXRjaCBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoI2lkKVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGVsZW0gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCggbWF0Y2hbIDIgXSApO1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJbmplY3QgdGhlIGVsZW1lbnQgZGlyZWN0bHkgaW50byB0aGUgalF1ZXJ5IG9iamVjdFxuXHRcdFx0XHRcdFx0dGhpc1sgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsICQoLi4uKSlcblx0XHRcdH0gZWxzZSBpZiAoICFjb250ZXh0IHx8IGNvbnRleHQuanF1ZXJ5ICkge1xuXHRcdFx0XHRyZXR1cm4gKCBjb250ZXh0IHx8IHJvb3QgKS5maW5kKCBzZWxlY3RvciApO1xuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgY29udGV4dClcblx0XHRcdC8vICh3aGljaCBpcyBqdXN0IGVxdWl2YWxlbnQgdG86ICQoY29udGV4dCkuZmluZChleHByKVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuY29uc3RydWN0b3IoIGNvbnRleHQgKS5maW5kKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSEFORExFOiAkKERPTUVsZW1lbnQpXG5cdFx0fSBlbHNlIGlmICggc2VsZWN0b3Iubm9kZVR5cGUgKSB7XG5cdFx0XHR0aGlzWyAwIF0gPSBzZWxlY3Rvcjtcblx0XHRcdHRoaXMubGVuZ3RoID0gMTtcblx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0Ly8gSEFORExFOiAkKGZ1bmN0aW9uKVxuXHRcdC8vIFNob3J0Y3V0IGZvciBkb2N1bWVudCByZWFkeVxuXHRcdH0gZWxzZSBpZiAoIGlzRnVuY3Rpb24oIHNlbGVjdG9yICkgKSB7XG5cdFx0XHRyZXR1cm4gcm9vdC5yZWFkeSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0cm9vdC5yZWFkeSggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gRXhlY3V0ZSBpbW1lZGlhdGVseSBpZiByZWFkeSBpcyBub3QgcHJlc2VudFxuXHRcdFx0XHRzZWxlY3RvciggalF1ZXJ5ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tYWtlQXJyYXkoIHNlbGVjdG9yLCB0aGlzICk7XG5cdH07XG5cbi8vIEdpdmUgdGhlIGluaXQgZnVuY3Rpb24gdGhlIGpRdWVyeSBwcm90b3R5cGUgZm9yIGxhdGVyIGluc3RhbnRpYXRpb25cbmluaXQucHJvdG90eXBlID0galF1ZXJ5LmZuO1xuXG4vLyBJbml0aWFsaXplIGNlbnRyYWwgcmVmZXJlbmNlXG5yb290alF1ZXJ5ID0galF1ZXJ5KCBkb2N1bWVudCApO1xuXG5cbnZhciBycGFyZW50c3ByZXYgPSAvXig/OnBhcmVudHN8cHJldig/OlVudGlsfEFsbCkpLyxcblxuXHQvLyBNZXRob2RzIGd1YXJhbnRlZWQgdG8gcHJvZHVjZSBhIHVuaXF1ZSBzZXQgd2hlbiBzdGFydGluZyBmcm9tIGEgdW5pcXVlIHNldFxuXHRndWFyYW50ZWVkVW5pcXVlID0ge1xuXHRcdGNoaWxkcmVuOiB0cnVlLFxuXHRcdGNvbnRlbnRzOiB0cnVlLFxuXHRcdG5leHQ6IHRydWUsXG5cdFx0cHJldjogdHJ1ZVxuXHR9O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGhhczogZnVuY3Rpb24oIHRhcmdldCApIHtcblx0XHR2YXIgdGFyZ2V0cyA9IGpRdWVyeSggdGFyZ2V0LCB0aGlzICksXG5cdFx0XHRsID0gdGFyZ2V0cy5sZW5ndGg7XG5cblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggdGhpcywgdGFyZ2V0c1sgaSBdICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Y2xvc2VzdDogZnVuY3Rpb24oIHNlbGVjdG9ycywgY29udGV4dCApIHtcblx0XHR2YXIgY3VyLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRtYXRjaGVkID0gW10sXG5cdFx0XHR0YXJnZXRzID0gdHlwZW9mIHNlbGVjdG9ycyAhPT0gXCJzdHJpbmdcIiAmJiBqUXVlcnkoIHNlbGVjdG9ycyApO1xuXG5cdFx0Ly8gUG9zaXRpb25hbCBzZWxlY3RvcnMgbmV2ZXIgbWF0Y2gsIHNpbmNlIHRoZXJlJ3Mgbm8gX3NlbGVjdGlvbl8gY29udGV4dFxuXHRcdGlmICggIXJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3JzICkgKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZvciAoIGN1ciA9IHRoaXNbIGkgXTsgY3VyICYmIGN1ciAhPT0gY29udGV4dDsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cblx0XHRcdFx0XHQvLyBBbHdheXMgc2tpcCBkb2N1bWVudCBmcmFnbWVudHNcblx0XHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA8IDExICYmICggdGFyZ2V0cyA/XG5cdFx0XHRcdFx0XHR0YXJnZXRzLmluZGV4KCBjdXIgKSA+IC0xIDpcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcGFzcyBub24tZWxlbWVudHMgdG8gU2l6emxlXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy40LjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02MVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBwb3N0LXJlc29sdXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKyAxID49IG1heERlcHRoICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gVGhyb3dlciApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgZSBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4xXG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU3XG5cdFx0XHRcdFx0XHRcdC8vIFJlLXJlc29sdmUgcHJvbWlzZXMgaW1tZWRpYXRlbHkgdG8gZG9kZ2UgZmFsc2UgcmVqZWN0aW9uIGZyb21cblx0XHRcdFx0XHRcdFx0Ly8gc3Vic2VxdWVudCBlcnJvcnNcblx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzKCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDYWxsIGFuIG9wdGlvbmFsIGhvb2sgdG8gcmVjb3JkIHRoZSBzdGFjaywgaW4gY2FzZSBvZiBleGNlcHRpb25cblx0XHRcdFx0XHRcdFx0XHQvLyBzaW5jZSBpdCdzIG90aGVyd2lzZSBsb3N0IHdoZW4gZXhlY3V0aW9uIGdvZXMgYXN5bmNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgPSBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBwcm9jZXNzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXG5cdFx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUHJvZ3Jlc3MgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblByb2dyZXNzIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLm5vdGlmeVdpdGhcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMSBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25GdWxmaWxsZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvbkZ1bGZpbGxlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eVxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDIgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uUmVqZWN0ZWQgKSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRvblJlamVjdGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdFRocm93ZXJcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEdldCBhIHByb21pc2UgZm9yIHRoaXMgZGVmZXJyZWRcblx0XHRcdFx0Ly8gSWYgb2JqIGlzIHByb3ZpZGVkLCB0aGUgcHJvbWlzZSBhc3BlY3QgaXMgYWRkZWQgdG8gdGhlIG9iamVjdFxuXHRcdFx0XHRwcm9taXNlOiBmdW5jdGlvbiggb2JqICkge1xuXHRcdFx0XHRcdHJldHVybiBvYmogIT0gbnVsbCA/IGpRdWVyeS5leHRlbmQoIG9iaiwgcHJvbWlzZSApIDogcHJvbWlzZTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGRlZmVycmVkID0ge307XG5cblx0XHQvLyBBZGQgbGlzdC1zcGVjaWZpYyBtZXRob2RzXG5cdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIGksIHR1cGxlICkge1xuXHRcdFx0dmFyIGxpc3QgPSB0dXBsZVsgMiBdLFxuXHRcdFx0XHRzdGF0ZVN0cmluZyA9IHR1cGxlWyA1IF07XG5cblx0XHRcdC8vIHByb21pc2UucHJvZ3Jlc3MgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5kb25lID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZmFpbCA9IGxpc3QuYWRkXG5cdFx0XHRwcm9taXNlWyB0dXBsZVsgMSBdIF0gPSBsaXN0LmFkZDtcblxuXHRcdFx0Ly8gSGFuZGxlIHN0YXRlXG5cdFx0XHRpZiAoIHN0YXRlU3RyaW5nICkge1xuXHRcdFx0XHRsaXN0LmFkZChcblx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlc29sdmVkXCIgKGkuZS4sIGZ1bGZpbGxlZClcblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZWplY3RlZFwiXG5cdFx0XHRcdFx0XHRzdGF0ZSA9IHN0YXRlU3RyaW5nO1xuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9jYWxsYmFja3MuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMiBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDMgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfY2FsbGJhY2tzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMiBdLmxvY2ssXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5sb2NrXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5maXJlXG5cdFx0XHQvLyByZWplY3RlZF9oYW5kbGVycy5maXJlXG5cdFx0XHRsaXN0LmFkZCggdHVwbGVbIDMgXS5maXJlICk7XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5ub3RpZnlXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZSA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZXNvbHZlV2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdCA9IGZ1bmN0aW9uKCkgeyBkZWZlcnJlZC5yZWplY3RXaXRoKC4uLikgfVxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oIHRoaXMgPT09IGRlZmVycmVkID8gdW5kZWZpbmVkIDogdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmVXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0V2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSA9IGxpc3QuZmlyZVdpdGg7XG5cdFx0fSApO1xuXG5cdFx0Ly8gTWFrZSB0aGUgZGVmZXJyZWQgYSBwcm9taXNlXG5cdFx0cHJvbWlzZS5wcm9taXNlKCBkZWZlcnJlZCApO1xuXG5cdFx0Ly8gQ2FsbCBnaXZlbiBmdW5jIGlmIGFueVxuXHRcdGlmICggZnVuYyApIHtcblx0XHRcdGZ1bmMuY2FsbCggZGVmZXJyZWQsIGRlZmVycmVkICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsIGRvbmUhXG5cdFx0cmV0dXJuIGRlZmVycmVkO1xuXHR9LFxuXG5cdC8vIERlZmVycmVkIGhlbHBlclxuXHR3aGVuOiBmdW5jdGlvbiggc2luZ2xlVmFsdWUgKSB7XG5cdFx0dmFyXG5cblx0XHRcdC8vIGNvdW50IG9mIHVuY29tcGxldGVkIHN1Ym9yZGluYXRlc1xuXHRcdFx0cmVtYWluaW5nID0gYXJndW1lbnRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5wcm9jZXNzZWQgYXJndW1lbnRzXG5cdFx0XHRpID0gcmVtYWluaW5nLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBmdWxmaWxsbWVudCBkYXRhXG5cdFx0XHRyZXNvbHZlQ29udGV4dHMgPSBBcnJheSggaSApLFxuXHRcdFx0cmVzb2x2ZVZhbHVlcyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApLFxuXG5cdFx0XHQvLyB0aGUgcHJpbWFyeSBEZWZlcnJlZFxuXHRcdFx0cHJpbWFyeSA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXG5cdFx0XHQvLyBzdWJvcmRpbmF0ZSBjYWxsYmFjayBmYWN0b3J5XG5cdFx0XHR1cGRhdGVGdW5jID0gZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdHJldHVybiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmVzb2x2ZUNvbnRleHRzWyBpIF0gPSB0aGlzO1xuXHRcdFx0XHRcdHJlc29sdmVWYWx1ZXNbIGkgXSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxID8gc2xpY2UuY2FsbCggYXJndW1lbnRzICkgOiB2YWx1ZTtcblx0XHRcdFx0XHRpZiAoICEoIC0tcmVtYWluaW5nICkgKSB7XG5cdFx0XHRcdFx0XHRwcmltYXJ5LnJlc29sdmVXaXRoKCByZXNvbHZlQ29udGV4dHMsIHJlc29sdmVWYWx1ZXMgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0XHR9O1xuXG5cdFx0Ly8gU2luZ2xlLSBhbmQgZW1wdHkgYXJndW1lbnRzIGFyZSBhZG9wdGVkIGxpa2UgUHJvbWlzZS5yZXNvbHZlXG5cdFx0aWYgKCByZW1haW5pbmcgPD0gMSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHNpbmdsZVZhbHVlLCBwcmltYXJ5LmRvbmUoIHVwZGF0ZUZ1bmMoIGkgKSApLnJlc29sdmUsIHByaW1hcnkucmVqZWN0LFxuXHRcdFx0XHQhcmVtYWluaW5nICk7XG5cblx0XHRcdC8vIFVzZSAudGhlbigpIHRvIHVud3JhcCBzZWNvbmRhcnkgdGhlbmFibGVzIChjZi4gZ2gtMzAwMClcblx0XHRcdGlmICggcHJpbWFyeS5zdGF0ZSgpID09PSBcInBlbmRpbmdcIiB8fFxuXHRcdFx0XHRpc0Z1bmN0aW9uKCByZXNvbHZlVmFsdWVzWyBpIF0gJiYgcmVzb2x2ZVZhbHVlc1sgaSBdLnRoZW4gKSApIHtcblxuXHRcdFx0XHRyZXR1cm4gcHJpbWFyeS50aGVuKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gTXVsdGlwbGUgYXJndW1lbnRzIGFyZSBhZ2dyZWdhdGVkIGxpa2UgUHJvbWlzZS5hbGwgYXJyYXkgZWxlbWVudHNcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGFkb3B0VmFsdWUoIHJlc29sdmVWYWx1ZXNbIGkgXSwgdXBkYXRlRnVuYyggaSApLCBwcmltYXJ5LnJlamVjdCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBwcmltYXJ5LnByb21pc2UoKTtcblx0fVxufSApO1xuXG5cbi8vIFRoZXNlIHVzdWFsbHkgaW5kaWNhdGUgYSBwcm9ncmFtbWVyIG1pc3Rha2UgZHVyaW5nIGRldmVsb3BtZW50LFxuLy8gd2FybiBhYm91dCB0aGVtIEFTQVAgcmF0aGVyIHRoYW4gc3dhbGxvd2luZyB0aGVtIGJ5IGRlZmF1bHQuXG52YXIgcmVycm9yTmFtZXMgPSAvXihFdmFsfEludGVybmFsfFJhbmdlfFJlZmVyZW5jZXxTeW50YXh8VHlwZXxVUkkpRXJyb3IkLztcblxualF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgPSBmdW5jdGlvbiggZXJyb3IsIHN0YWNrICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDggLSA5IG9ubHlcblx0Ly8gQ29uc29sZSBleGlzdHMgd2hlbiBkZXYgdG9vbHMgYXJlIG9wZW4sIHdoaWNoIGNhbiBoYXBwZW4gYXQgYW55IHRpbWVcblx0aWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS53YXJuICYmIGVycm9yICYmIHJlcnJvck5hbWVzLnRlc3QoIGVycm9yLm5hbWUgKSApIHtcblx0XHR3aW5kb3cuY29uc29sZS53YXJuKCBcImpRdWVyeS5EZWZlcnJlZCBleGNlcHRpb246IFwiICsgZXJyb3IubWVzc2FnZSwgZXJyb3Iuc3RhY2ssIHN0YWNrICk7XG5cdH1cbn07XG5cblxuXG5cbmpRdWVyeS5yZWFkeUV4Y2VwdGlvbiA9IGZ1bmN0aW9uKCBlcnJvciApIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdHRocm93IGVycm9yO1xuXHR9ICk7XG59O1xuXG5cblxuXG4vLyBUaGUgZGVmZXJyZWQgdXNlZCBvbiBET00gcmVhZHlcbnZhciByZWFkeUxpc3QgPSBqUXVlcnkuRGVmZXJyZWQoKTtcblxualF1ZXJ5LmZuLnJlYWR5ID0gZnVuY3Rpb24oIGZuICkge1xuXG5cdHJlYWR5TGlzdFxuXHRcdC50aGVuKCBmbiApXG5cblx0XHQvLyBXcmFwIGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiBpbiBhIGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGxvb2t1cFxuXHRcdC8vIGhhcHBlbnMgYXQgdGhlIHRpbWUgb2YgZXJyb3IgaGFuZGxpbmcgaW5zdGVhZCBvZiBjYWxsYmFja1xuXHRcdC8vIHJlZ2lzdHJhdGlvbi5cblx0XHQuY2F0Y2goIGZ1bmN0aW9uKCBlcnJvciApIHtcblx0XHRcdGpRdWVyeS5yZWFkeUV4Y2VwdGlvbiggZXJyb3IgKTtcblx0XHR9ICk7XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gSXMgdGhlIERPTSByZWFkeSB0byBiZSB1c2VkPyBTZXQgdG8gdHJ1ZSBvbmNlIGl0IG9jY3Vycy5cblx0aXNSZWFkeTogZmFsc2UsXG5cblx0Ly8gQSBjb3VudGVyIHRvIHRyYWNrIGhvdyBtYW55IGl0ZW1zIHRvIHdhaXQgZm9yIGJlZm9yZVxuXHQvLyB0aGUgcmVhZHkgZXZlbnQgZmlyZXMuIFNlZSAjNjc4MVxuXHRyZWFkeVdhaXQ6IDEsXG5cblx0Ly8gSGFuZGxlIHdoZW4gdGhlIERPTSBpcyByZWFkeVxuXHRyZWFkeTogZnVuY3Rpb24oIHdhaXQgKSB7XG5cblx0XHQvLyBBYm9ydCBpZiB0aGVyZSBhcmUgcGVuZGluZyBob2xkcyBvciB3ZSdyZSBhbHJlYWR5IHJlYWR5XG5cdFx0aWYgKCB3YWl0ID09PSB0cnVlID8gLS1qUXVlcnkucmVhZHlXYWl0IDogalF1ZXJ5LmlzUmVhZHkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtZW1iZXIgdGhhdCB0aGUgRE9NIGlzIHJlYWR5XG5cdFx0alF1ZXJ5LmlzUmVhZHkgPSB0cnVlO1xuXG5cdFx0Ly8gSWYgYSBub3JtYWwgRE9NIFJlYWR5IGV2ZW50IGZpcmVkLCBkZWNyZW1lbnQsIGFuZCB3YWl0IGlmIG5lZWQgYmVcblx0XHRpZiAoIHdhaXQgIT09IHRydWUgJiYgLS1qUXVlcnkucmVhZHlXYWl0ID4gMCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGVyZSBhcmUgZnVuY3Rpb25zIGJvdW5kLCB0byBleGVjdXRlXG5cdFx0cmVhZHlMaXN0LnJlc29sdmVXaXRoKCBkb2N1bWVudCwgWyBqUXVlcnkgXSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5yZWFkeS50aGVuID0gcmVhZHlMaXN0LnRoZW47XG5cbi8vIFRoZSByZWFkeSBldmVudCBoYW5kbGVyIGFuZCBzZWxmIGNsZWFudXAgbWV0aG9kXG5mdW5jdGlvbiBjb21wbGV0ZWQoKSB7XG5cdGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblx0d2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcblx0alF1ZXJ5LnJlYWR5KCk7XG59XG5cbi8vIENhdGNoIGNhc2VzIHdoZXJlICQoZG9jdW1lbnQpLnJlYWR5KCkgaXMgY2FsbGVkXG4vLyBhZnRlciB0aGUgYnJvd3NlciBldmVudCBoYXMgYWxyZWFkeSBvY2N1cnJlZC5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDEwIG9ubHlcbi8vIE9sZGVyIElFIHNvbWV0aW1lcyBzaWduYWxzIFwiaW50ZXJhY3RpdmVcIiB0b28gc29vblxuaWYgKCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIgfHxcblx0KCBkb2N1bWVudC5yZWFkeVN0YXRlICE9PSBcImxvYWRpbmdcIiAmJiAhZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRvU2Nyb2xsICkgKSB7XG5cblx0Ly8gSGFuZGxlIGl0IGFzeW5jaHJvbm91c2x5IHRvIGFsbG93IHNjcmlwdHMgdGhlIG9wcG9ydHVuaXR5IHRvIGRlbGF5IHJlYWR5XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBqUXVlcnkucmVhZHkgKTtcblxufSBlbHNlIHtcblxuXHQvLyBVc2UgdGhlIGhhbmR5IGV2ZW50IGNhbGxiYWNrXG5cdGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIFwiRE9NQ29udGVudExvYWRlZFwiLCBjb21wbGV0ZWQgKTtcblxuXHQvLyBBIGZhbGxiYWNrIHRvIHdpbmRvdy5vbmxvYWQsIHRoYXQgd2lsbCBhbHdheXMgd29ya1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xufVxuXG5cblxuXG4vLyBNdWx0aWZ1bmN0aW9uYWwgbWV0aG9kIHRvIGdldCBhbmQgc2V0IHZhbHVlcyBvZiBhIGNvbGxlY3Rpb25cbi8vIFRoZSB2YWx1ZS9zIGNhbiBvcHRpb25hbGx5IGJlIGV4ZWN1dGVkIGlmIGl0J3MgYSBmdW5jdGlvblxudmFyIGFjY2VzcyA9IGZ1bmN0aW9uKCBlbGVtcywgZm4sIGtleSwgdmFsdWUsIGNoYWluYWJsZSwgZW1wdHlHZXQsIHJhdyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGVsZW1zLmxlbmd0aCxcblx0XHRidWxrID0ga2V5ID09IG51bGw7XG5cblx0Ly8gU2V0cyBtYW55IHZhbHVlc1xuXHRpZiAoIHRvVHlwZSgga2V5ICkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblx0XHRmb3IgKCBpIGluIGtleSApIHtcblx0XHRcdGFjY2VzcyggZWxlbXMsIGZuLCBpLCBrZXlbIGkgXSwgdHJ1ZSwgZW1wdHlHZXQsIHJhdyApO1xuXHRcdH1cblxuXHQvLyBTZXRzIG9uZSB2YWx1ZVxuXHR9IGVsc2UgaWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cblx0XHRpZiAoICFpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmF3ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGJ1bGsgKSB7XG5cblx0XHRcdC8vIEJ1bGsgb3BlcmF0aW9ucyBydW4gYWdhaW5zdCB0aGUgZW50aXJlIHNldFxuXHRcdFx0aWYgKCByYXcgKSB7XG5cdFx0XHRcdGZuLmNhbGwoIGVsZW1zLCB2YWx1ZSApO1xuXHRcdFx0XHRmbiA9IG51bGw7XG5cblx0XHRcdC8vIC4uLmV4Y2VwdCB3aGVuIGV4ZWN1dGluZyBmdW5jdGlvbiB2YWx1ZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGJ1bGsgPSBmbjtcblx0XHRcdFx0Zm4gPSBmdW5jdGlvbiggZWxlbSwgX2tleSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGJ1bGsuY2FsbCggalF1ZXJ5KCBlbGVtICksIHZhbHVlICk7XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRmbihcblx0XHRcdFx0XHRlbGVtc1sgaSBdLCBrZXksIHJhdyA/XG5cdFx0XHRcdFx0XHR2YWx1ZSA6XG5cdFx0XHRcdFx0XHR2YWx1ZS5jYWxsKCBlbGVtc1sgaSBdLCBpLCBmbiggZWxlbXNbIGkgXSwga2V5ICkgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggY2hhaW5hYmxlICkge1xuXHRcdHJldHVybiBlbGVtcztcblx0fVxuXG5cdC8vIEdldHNcblx0aWYgKCBidWxrICkge1xuXHRcdHJldHVybiBmbi5jYWxsKCBlbGVtcyApO1xuXHR9XG5cblx0cmV0dXJuIGxlbiA/IGZuKCBlbGVtc1sgMCBdLCBrZXkgKSA6IGVtcHR5R2V0O1xufTtcblxuXG4vLyBNYXRjaGVzIGRhc2hlZCBzdHJpbmcgZm9yIGNhbWVsaXppbmdcbnZhciBybXNQcmVmaXggPSAvXi1tcy0vLFxuXHRyZGFzaEFscGhhID0gLy0oW2Etel0pL2c7XG5cbi8vIFVzZWQgYnkgY2FtZWxDYXNlIGFzIGNhbGxiYWNrIHRvIHJlcGxhY2UoKVxuZnVuY3Rpb24gZmNhbWVsQ2FzZSggX2FsbCwgbGV0dGVyICkge1xuXHRyZXR1cm4gbGV0dGVyLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8vIENvbnZlcnQgZGFzaGVkIHRvIGNhbWVsQ2FzZTsgdXNlZCBieSB0aGUgY3NzIGFuZCBkYXRhIG1vZHVsZXNcbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcbi8vIE1pY3Jvc29mdCBmb3Jnb3QgdG8gaHVtcCB0aGVpciB2ZW5kb3IgcHJlZml4ICgjOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlICM4MzM1LlxuXHRcdFx0Ly8gQWx3YXlzIHJldHVybiBhbiBlbXB0eSBvYmplY3QuXG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIG93bmVyICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgaXQgaXMgYSBub2RlIHVubGlrZWx5IHRvIGJlIHN0cmluZ2lmeS1lZCBvciBsb29wZWQgb3ZlclxuXHRcdFx0XHQvLyB1c2UgcGxhaW4gYXNzaWdubWVudFxuXHRcdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHZhbHVlO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBzZWN1cmUgaXQgaW4gYSBub24tZW51bWVyYWJsZSBwcm9wZXJ0eVxuXHRcdFx0XHQvLyBjb25maWd1cmFibGUgbXVzdCBiZSB0cnVlIHRvIGFsbG93IHRoZSBwcm9wZXJ0eSB0byBiZVxuXHRcdFx0XHQvLyBkZWxldGVkIHdoZW4gZGF0YSBpcyByZW1vdmVkXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBvd25lciwgdGhpcy5leHBhbmRvLCB7XG5cdFx0XHRcdFx0XHR2YWx1ZTogdmFsdWUsXG5cdFx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWVcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsdWU7XG5cdH0sXG5cdHNldDogZnVuY3Rpb24oIG93bmVyLCBkYXRhLCB2YWx1ZSApIHtcblx0XHR2YXIgcHJvcCxcblx0XHRcdGNhY2hlID0gdGhpcy5jYWNoZSggb3duZXIgKTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwga2V5LCB2YWx1ZSBdIGFyZ3Ncblx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIGRhdGEgKSBdID0gdmFsdWU7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIHsgcHJvcGVydGllcyB9IF0gYXJnc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvcHkgdGhlIHByb3BlcnRpZXMgb25lLWJ5LW9uZSB0byB0aGUgY2FjaGUgb2JqZWN0XG5cdFx0XHRmb3IgKCBwcm9wIGluIGRhdGEgKSB7XG5cdFx0XHRcdGNhY2hlWyBjYW1lbENhc2UoIHByb3AgKSBdID0gZGF0YVsgcHJvcCBdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gY2FjaGU7XG5cdH0sXG5cdGdldDogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0cmV0dXJuIGtleSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMuY2FjaGUoIG93bmVyICkgOlxuXG5cdFx0XHQvLyBBbHdheXMgdXNlIGNhbWVsQ2FzZSBrZXkgKGdoLTIyNTcpXG5cdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gJiYgb3duZXJbIHRoaXMuZXhwYW5kbyBdWyBjYW1lbENhc2UoIGtleSApIF07XG5cdH0sXG5cdGFjY2VzczogZnVuY3Rpb24oIG93bmVyLCBrZXksIHZhbHVlICkge1xuXG5cdFx0Ly8gSW4gY2FzZXMgd2hlcmUgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBObyBrZXkgd2FzIHNwZWNpZmllZFxuXHRcdC8vICAgMi4gQSBzdHJpbmcga2V5IHdhcyBzcGVjaWZpZWQsIGJ1dCBubyB2YWx1ZSBwcm92aWRlZFxuXHRcdC8vXG5cdFx0Ly8gVGFrZSB0aGUgXCJyZWFkXCIgcGF0aCBhbmQgYWxsb3cgdGhlIGdldCBtZXRob2QgdG8gZGV0ZXJtaW5lXG5cdFx0Ly8gd2hpY2ggdmFsdWUgdG8gcmV0dXJuLCByZXNwZWN0aXZlbHkgZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBUaGUgZW50aXJlIGNhY2hlIG9iamVjdFxuXHRcdC8vICAgMi4gVGhlIGRhdGEgc3RvcmVkIGF0IHRoZSBrZXlcblx0XHQvL1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0KCAoIGtleSAmJiB0eXBlb2Yga2V5ID09PSBcInN0cmluZ1wiICkgJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApICkge1xuXG5cdFx0XHRyZXR1cm4gdGhpcy5nZXQoIG93bmVyLCBrZXkgKTtcblx0XHR9XG5cblx0XHQvLyBXaGVuIHRoZSBrZXkgaXMgbm90IGEgc3RyaW5nLCBvciBib3RoIGEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vIGFyZSBzcGVjaWZpZWQsIHNldCBvciBleHRlbmQgKGV4aXN0aW5nIG9iamVjdHMpIHdpdGggZWl0aGVyOlxuXHRcdC8vXG5cdFx0Ly8gICAxLiBBbiBvYmplY3Qgb2YgcHJvcGVydGllc1xuXHRcdC8vICAgMi4gQSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly9cblx0XHR0aGlzLnNldCggb3duZXIsIGtleSwgdmFsdWUgKTtcblxuXHRcdC8vIFNpbmNlIHRoZSBcInNldFwiIHBhdGggY2FuIGhhdmUgdHdvIHBvc3NpYmxlIGVudHJ5IHBvaW50c1xuXHRcdC8vIHJldHVybiB0aGUgZXhwZWN0ZWQgZGF0YSBiYXNlZCBvbiB3aGljaCBwYXRoIHdhcyB0YWtlblsqXVxuXHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiBrZXk7XG5cdH0sXG5cdHJlbW92ZTogZnVuY3Rpb24oIG93bmVyLCBrZXkgKSB7XG5cdFx0dmFyIGksXG5cdFx0XHRjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdGlmICggY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIGtleSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0IGFycmF5IG9yIHNwYWNlIHNlcGFyYXRlZCBzdHJpbmcgb2Yga2V5c1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBrZXkgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBrZXkgaXMgYW4gYXJyYXkgb2Yga2V5cy4uLlxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc2V0IGNhbWVsQ2FzZSBrZXlzLCBzbyByZW1vdmUgdGhhdC5cblx0XHRcdFx0a2V5ID0ga2V5Lm1hcCggY2FtZWxDYXNlICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRrZXkgPSBjYW1lbENhc2UoIGtleSApO1xuXG5cdFx0XHRcdC8vIElmIGEga2V5IHdpdGggdGhlIHNwYWNlcyBleGlzdHMsIHVzZSBpdC5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBjcmVhdGUgYW4gYXJyYXkgYnkgbWF0Y2hpbmcgbm9uLXdoaXRlc3BhY2Vcblx0XHRcdFx0a2V5ID0ga2V5IGluIGNhY2hlID9cblx0XHRcdFx0XHRbIGtleSBdIDpcblx0XHRcdFx0XHQoIGtleS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdICk7XG5cdFx0XHR9XG5cblx0XHRcdGkgPSBrZXkubGVuZ3RoO1xuXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0ZGVsZXRlIGNhY2hlWyBrZXlbIGkgXSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgZXhwYW5kbyBpZiB0aGVyZSdzIG5vIG1vcmUgZGF0YVxuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgfHwgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICkgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDVcblx0XHRcdC8vIFdlYmtpdCAmIEJsaW5rIHBlcmZvcm1hbmNlIHN1ZmZlcnMgd2hlbiBkZWxldGluZyBwcm9wZXJ0aWVzXG5cdFx0XHQvLyBmcm9tIERPTSBub2Rlcywgc28gc2V0IHRvIHVuZGVmaW5lZCBpbnN0ZWFkXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zNzg2MDcgKGJ1ZyByZXN0cmljdGVkKVxuXHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVsZXRlIG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBvd25lciApIHtcblx0XHR2YXIgY2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0cmV0dXJuIGNhY2hlICE9PSB1bmRlZmluZWQgJiYgIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApO1xuXHR9XG59O1xudmFyIGRhdGFQcml2ID0gbmV3IERhdGEoKTtcblxudmFyIGRhdGFVc2VyID0gbmV3IERhdGEoKTtcblxuXG5cbi8vXHRJbXBsZW1lbnRhdGlvbiBTdW1tYXJ5XG4vL1xuLy9cdDEuIEVuZm9yY2UgQVBJIHN1cmZhY2UgYW5kIHNlbWFudGljIGNvbXBhdGliaWxpdHkgd2l0aCAxLjkueCBicmFuY2hcbi8vXHQyLiBJbXByb3ZlIHRoZSBtb2R1bGUncyBtYWludGFpbmFiaWxpdHkgYnkgcmVkdWNpbmcgdGhlIHN0b3JhZ2Vcbi8vXHRcdHBhdGhzIHRvIGEgc2luZ2xlIG1lY2hhbmlzbS5cbi8vXHQzLiBVc2UgdGhlIHNhbWUgc2luZ2xlIG1lY2hhbmlzbSB0byBzdXBwb3J0IFwicHJpdmF0ZVwiIGFuZCBcInVzZXJcIiBkYXRhLlxuLy9cdDQuIF9OZXZlcl8gZXhwb3NlIFwicHJpdmF0ZVwiIGRhdGEgdG8gdXNlciBjb2RlIChUT0RPOiBEcm9wIF9kYXRhLCBfcmVtb3ZlRGF0YSlcbi8vXHQ1LiBBdm9pZCBleHBvc2luZyBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIG9uIHVzZXIgb2JqZWN0cyAoZWcuIGV4cGFuZG8gcHJvcGVydGllcylcbi8vXHQ2LiBQcm92aWRlIGEgY2xlYXIgcGF0aCBmb3IgaW1wbGVtZW50YXRpb24gdXBncmFkZSB0byBXZWFrTWFwIGluIDIwMTRcblxudmFyIHJicmFjZSA9IC9eKD86XFx7W1xcd1xcV10qXFx9fFxcW1tcXHdcXFddKlxcXSkkLyxcblx0cm11bHRpRGFzaCA9IC9bQS1aXS9nO1xuXG5mdW5jdGlvbiBnZXREYXRhKCBkYXRhICkge1xuXHRpZiAoIGRhdGEgPT09IFwidHJ1ZVwiICkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcImZhbHNlXCIgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKCBkYXRhID09PSBcIm51bGxcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIE9ubHkgY29udmVydCB0byBhIG51bWJlciBpZiBpdCBkb2Vzbid0IGNoYW5nZSB0aGUgc3RyaW5nXG5cdGlmICggZGF0YSA9PT0gK2RhdGEgKyBcIlwiICkge1xuXHRcdHJldHVybiArZGF0YTtcblx0fVxuXG5cdGlmICggcmJyYWNlLnRlc3QoIGRhdGEgKSApIHtcblx0XHRyZXR1cm4gSlNPTi5wYXJzZSggZGF0YSApO1xuXHR9XG5cblx0cmV0dXJuIGRhdGE7XG59XG5cbmZ1bmN0aW9uIGRhdGFBdHRyKCBlbGVtLCBrZXksIGRhdGEgKSB7XG5cdHZhciBuYW1lO1xuXG5cdC8vIElmIG5vdGhpbmcgd2FzIGZvdW5kIGludGVybmFsbHksIHRyeSB0byBmZXRjaCBhbnlcblx0Ly8gZGF0YSBmcm9tIHRoZSBIVE1MNSBkYXRhLSogYXR0cmlidXRlXG5cdGlmICggZGF0YSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0bmFtZSA9IFwiZGF0YS1cIiArIGtleS5yZXBsYWNlKCBybXVsdGlEYXNoLCBcIi0kJlwiICkudG9Mb3dlckNhc2UoKTtcblx0XHRkYXRhID0gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcblxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRkYXRhID0gZ2V0RGF0YSggZGF0YSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgd2Ugc2V0IHRoZSBkYXRhIHNvIGl0IGlzbid0IGNoYW5nZWQgbGF0ZXJcblx0XHRcdGRhdGFVc2VyLnNldCggZWxlbSwga2V5LCBkYXRhICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBkYXRhO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGhhc0RhdGE6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5oYXNEYXRhKCBlbGVtICkgfHwgZGF0YVByaXYuaGFzRGF0YSggZWxlbSApO1xuXHR9LFxuXG5cdGRhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhVXNlci5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhVXNlci5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fSxcblxuXHQvLyBUT0RPOiBOb3cgdGhhdCBhbGwgY2FsbHMgdG8gX2RhdGEgYW5kIF9yZW1vdmVEYXRhIGhhdmUgYmVlbiByZXBsYWNlZFxuXHQvLyB3aXRoIGRpcmVjdCBjYWxscyB0byBkYXRhUHJpdiBtZXRob2RzLCB0aGVzZSBjYW4gYmUgZGVwcmVjYXRlZC5cblx0X2RhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBkYXRhICkge1xuXHRcdHJldHVybiBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIG5hbWUsIGRhdGEgKTtcblx0fSxcblxuXHRfcmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkYXRhOiBmdW5jdGlvbigga2V5LCB2YWx1ZSApIHtcblx0XHR2YXIgaSwgbmFtZSwgZGF0YSxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRhdHRycyA9IGVsZW0gJiYgZWxlbS5hdHRyaWJ1dGVzO1xuXG5cdFx0Ly8gR2V0cyBhbGwgdmFsdWVzXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdGhpcy5sZW5ndGggKSB7XG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0gKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgIWRhdGFQcml2LmdldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiApICkge1xuXHRcdFx0XHRcdGkgPSBhdHRycy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdFx0XHRcdC8vIFRoZSBhdHRycyBlbGVtZW50cyBjYW4gYmUgbnVsbCAoIzE0ODk0KVxuXHRcdFx0XHRcdFx0aWYgKCBhdHRyc1sgaSBdICkge1xuXHRcdFx0XHRcdFx0XHRuYW1lID0gYXR0cnNbIGkgXS5uYW1lO1xuXHRcdFx0XHRcdFx0XHRpZiAoIG5hbWUuaW5kZXhPZiggXCJkYXRhLVwiICkgPT09IDAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bmFtZSA9IGNhbWVsQ2FzZSggbmFtZS5zbGljZSggNSApICk7XG5cdFx0XHRcdFx0XHRcdFx0ZGF0YUF0dHIoIGVsZW0sIG5hbWUsIGRhdGFbIG5hbWUgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJoYXNEYXRhQXR0cnNcIiwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBkYXRhO1xuXHRcdH1cblxuXHRcdC8vIFNldHMgbXVsdGlwbGUgdmFsdWVzXG5cdFx0aWYgKCB0eXBlb2Yga2V5ID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5ICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGRhdGE7XG5cblx0XHRcdC8vIFRoZSBjYWxsaW5nIGpRdWVyeSBvYmplY3QgKGVsZW1lbnQgbWF0Y2hlcykgaXMgbm90IGVtcHR5XG5cdFx0XHQvLyAoYW5kIHRoZXJlZm9yZSBoYXMgYW4gZWxlbWVudCBhcHBlYXJzIGF0IHRoaXNbIDAgXSkgYW5kIHRoZVxuXHRcdFx0Ly8gYHZhbHVlYCBwYXJhbWV0ZXIgd2FzIG5vdCB1bmRlZmluZWQuIEFuIGVtcHR5IGpRdWVyeSBvYmplY3Rcblx0XHRcdC8vIHdpbGwgcmVzdWx0IGluIGB1bmRlZmluZWRgIGZvciBlbGVtID0gdGhpc1sgMCBdIHdoaWNoIHdpbGxcblx0XHRcdC8vIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhbiBhdHRlbXB0IHRvIHJlYWQgYSBkYXRhIGNhY2hlIGlzIG1hZGUuXG5cdFx0XHRpZiAoIGVsZW0gJiYgdmFsdWUgPT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIGdldCBkYXRhIGZyb20gdGhlIGNhY2hlXG5cdFx0XHRcdC8vIFRoZSBrZXkgd2lsbCBhbHdheXMgYmUgY2FtZWxDYXNlZCBpbiBEYXRhXG5cdFx0XHRcdGRhdGEgPSBkYXRhVXNlci5nZXQoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gXCJkaXNjb3ZlclwiIHRoZSBkYXRhIGluXG5cdFx0XHRcdC8vIEhUTUw1IGN1c3RvbSBkYXRhLSogYXR0cnNcblx0XHRcdFx0ZGF0YSA9IGRhdGFBdHRyKCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBXZSB0cmllZCByZWFsbHkgaGFyZCwgYnV0IHRoZSBkYXRhIGRvZXNuJ3QgZXhpc3QuXG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IHRoZSBkYXRhLi4uXG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzdG9yZSB0aGUgY2FtZWxDYXNlZCBrZXlcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXksIHZhbHVlICk7XG5cdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxLCBudWxsLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGtleSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRhdGFVc2VyLnJlbW92ZSggdGhpcywga2V5ICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHF1ZXVlO1xuXG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0dHlwZSA9ICggdHlwZSB8fCBcImZ4XCIgKSArIFwicXVldWVcIjtcblx0XHRcdHF1ZXVlID0gZGF0YVByaXYuZ2V0KCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdC8vIFNwZWVkIHVwIGRlcXVldWUgYnkgZ2V0dGluZyBvdXQgcXVpY2tseSBpZiB0aGlzIGlzIGp1c3QgYSBsb29rdXBcblx0XHRcdGlmICggZGF0YSApIHtcblx0XHRcdFx0aWYgKCAhcXVldWUgfHwgQXJyYXkuaXNBcnJheSggZGF0YSApICkge1xuXHRcdFx0XHRcdHF1ZXVlID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCB0eXBlLCBqUXVlcnkubWFrZUFycmF5KCBkYXRhICkgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBkYXRhICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBxdWV1ZSB8fCBbXTtcblx0XHR9XG5cdH0sXG5cblx0ZGVxdWV1ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCBlbGVtLCB0eXBlICksXG5cdFx0XHRzdGFydExlbmd0aCA9IHF1ZXVlLmxlbmd0aCxcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKSxcblx0XHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCB0eXBlICksXG5cdFx0XHRuZXh0ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCBlbGVtLCB0eXBlICk7XG5cdFx0XHR9O1xuXG5cdFx0Ly8gSWYgdGhlIGZ4IHF1ZXVlIGlzIGRlcXVldWVkLCBhbHdheXMgcmVtb3ZlIHRoZSBwcm9ncmVzcyBzZW50aW5lbFxuXHRcdGlmICggZm4gPT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0c3RhcnRMZW5ndGgtLTtcblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXG5cdFx0XHQvLyBBZGQgYSBwcm9ncmVzcyBzZW50aW5lbCB0byBwcmV2ZW50IHRoZSBmeCBxdWV1ZSBmcm9tIGJlaW5nXG5cdFx0XHQvLyBhdXRvbWF0aWNhbGx5IGRlcXVldWVkXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiApIHtcblx0XHRcdFx0cXVldWUudW5zaGlmdCggXCJpbnByb2dyZXNzXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2xlYXIgdXAgdGhlIGxhc3QgcXVldWUgc3RvcCBmdW5jdGlvblxuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRmbi5jYWxsKCBlbGVtLCBuZXh0LCBob29rcyApO1xuXHRcdH1cblxuXHRcdGlmICggIXN0YXJ0TGVuZ3RoICYmIGhvb2tzICkge1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdH1cblx0fSxcblxuXHQvLyBOb3QgcHVibGljIC0gZ2VuZXJhdGUgYSBxdWV1ZUhvb2tzIG9iamVjdCwgb3IgcmV0dXJuIHRoZSBjdXJyZW50IG9uZVxuXHRfcXVldWVIb29rczogZnVuY3Rpb24oIGVsZW0sIHR5cGUgKSB7XG5cdFx0dmFyIGtleSA9IHR5cGUgKyBcInF1ZXVlSG9va3NcIjtcblx0XHRyZXR1cm4gZGF0YVByaXYuZ2V0KCBlbGVtLCBrZXkgKSB8fCBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIGtleSwge1xuXHRcdFx0ZW1wdHk6IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLmFkZCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgWyB0eXBlICsgXCJxdWV1ZVwiLCBrZXkgXSApO1xuXHRcdFx0fSApXG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBzZXR0ZXIgPSAyO1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGRhdGEgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IFwiZnhcIjtcblx0XHRcdHNldHRlci0tO1xuXHRcdH1cblxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCA8IHNldHRlciApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucXVldWUoIHRoaXNbIDAgXSwgdHlwZSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBkYXRhID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcyA6XG5cdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIGRhdGEgKTtcblxuXHRcdFx0XHQvLyBFbnN1cmUgYSBob29rcyBmb3IgdGhpcyBxdWV1ZVxuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiZnhcIiAmJiBxdWV1ZVsgMCBdICE9PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdH0sXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHR9ICk7XG5cdH0sXG5cdGNsZWFyUXVldWU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0fSxcblxuXHQvLyBHZXQgYSBwcm9taXNlIHJlc29sdmVkIHdoZW4gcXVldWVzIG9mIGEgY2VydGFpbiB0eXBlXG5cdC8vIGFyZSBlbXB0aWVkIChmeCBpcyB0aGUgdHlwZSBieSBkZWZhdWx0KVxuXHRwcm9taXNlOiBmdW5jdGlvbiggdHlwZSwgb2JqICkge1xuXHRcdHZhciB0bXAsXG5cdFx0XHRjb3VudCA9IDEsXG5cdFx0XHRkZWZlciA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0ZWxlbWVudHMgPSB0aGlzLFxuXHRcdFx0aSA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0cmVzb2x2ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICEoIC0tY291bnQgKSApIHtcblx0XHRcdFx0XHRkZWZlci5yZXNvbHZlV2l0aCggZWxlbWVudHMsIFsgZWxlbWVudHMgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG9iaiA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRtcCA9IGRhdGFQcml2LmdldCggZWxlbWVudHNbIGkgXSwgdHlwZSArIFwicXVldWVIb29rc1wiICk7XG5cdFx0XHRpZiAoIHRtcCAmJiB0bXAuZW1wdHkgKSB7XG5cdFx0XHRcdGNvdW50Kys7XG5cdFx0XHRcdHRtcC5lbXB0eS5hZGQoIHJlc29sdmUgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmVzb2x2ZSgpO1xuXHRcdHJldHVybiBkZWZlci5wcm9taXNlKCBvYmogKTtcblx0fVxufSApO1xudmFyIHBudW0gPSAoIC9bKy1dPyg/OlxcZCpcXC58KVxcZCsoPzpbZUVdWystXT9cXGQrfCkvICkuc291cmNlO1xuXG52YXIgcmNzc051bSA9IG5ldyBSZWdFeHAoIFwiXig/OihbKy1dKT18KShcIiArIHBudW0gKyBcIikoW2EteiVdKikkXCIsIFwiaVwiICk7XG5cblxudmFyIGNzc0V4cGFuZCA9IFsgXCJUb3BcIiwgXCJSaWdodFwiLCBcIkJvdHRvbVwiLCBcIkxlZnRcIiBdO1xuXG52YXIgZG9jdW1lbnRFbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXG5cblxuXHR2YXIgaXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICk7XG5cdFx0fSxcblx0XHRjb21wb3NlZCA9IHsgY29tcG9zZWQ6IHRydWUgfTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBpT1MgMTAuMCAtIDEwLjIgb25seVxuXHQvLyBDaGVjayBhdHRhY2htZW50IGFjcm9zcyBzaGFkb3cgRE9NIGJvdW5kYXJpZXMgd2hlbiBwb3NzaWJsZSAoZ2gtMzUwNClcblx0Ly8gU3VwcG9ydDogaU9TIDEwLjAtMTAuMiBvbmx5XG5cdC8vIEVhcmx5IGlPUyAxMCB2ZXJzaW9ucyBzdXBwb3J0IGBhdHRhY2hTaGFkb3dgIGJ1dCBub3QgYGdldFJvb3ROb2RlYCxcblx0Ly8gbGVhZGluZyB0byBlcnJvcnMuIFdlIG5lZWQgdG8gY2hlY2sgZm9yIGBnZXRSb290Tm9kZWAuXG5cdGlmICggZG9jdW1lbnRFbGVtZW50LmdldFJvb3ROb2RlICkge1xuXHRcdGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Um9vdE5vZGUoIGNvbXBvc2VkICkgPT09IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHR9O1xuXHR9XG52YXIgaXNIaWRkZW5XaXRoaW5UcmVlID0gZnVuY3Rpb24oIGVsZW0sIGVsICkge1xuXG5cdFx0Ly8gaXNIaWRkZW5XaXRoaW5UcmVlIG1pZ2h0IGJlIGNhbGxlZCBmcm9tIGpRdWVyeSNmaWx0ZXIgZnVuY3Rpb247XG5cdFx0Ly8gaW4gdGhhdCBjYXNlLCBlbGVtZW50IHdpbGwgYmUgc2Vjb25kIGFyZ3VtZW50XG5cdFx0ZWxlbSA9IGVsIHx8IGVsZW07XG5cblx0XHQvLyBJbmxpbmUgc3R5bGUgdHJ1bXBzIGFsbFxuXHRcdHJldHVybiBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwibm9uZVwiIHx8XG5cdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiZcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlLCBjaGVjayBjb21wdXRlZCBzdHlsZVxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQzIC0gNDVcblx0XHRcdC8vIERpc2Nvbm5lY3RlZCBlbGVtZW50cyBjYW4gaGF2ZSBjb21wdXRlZCBkaXNwbGF5OiBub25lLCBzbyBmaXJzdCBjb25maXJtIHRoYXQgZWxlbSBpc1xuXHRcdFx0Ly8gaW4gdGhlIGRvY3VtZW50LlxuXHRcdFx0aXNBdHRhY2hlZCggZWxlbSApICYmXG5cblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgPT09IFwibm9uZVwiO1xuXHR9O1xuXG5cblxuZnVuY3Rpb24gYWRqdXN0Q1NTKCBlbGVtLCBwcm9wLCB2YWx1ZVBhcnRzLCB0d2VlbiApIHtcblx0dmFyIGFkanVzdGVkLCBzY2FsZSxcblx0XHRtYXhJdGVyYXRpb25zID0gMjAsXG5cdFx0Y3VycmVudFZhbHVlID0gdHdlZW4gP1xuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5jdXIoKTtcblx0XHRcdH0gOlxuXHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wLCBcIlwiICk7XG5cdFx0XHR9LFxuXHRcdGluaXRpYWwgPSBjdXJyZW50VmFsdWUoKSxcblx0XHR1bml0ID0gdmFsdWVQYXJ0cyAmJiB2YWx1ZVBhcnRzWyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICksXG5cblx0XHQvLyBTdGFydGluZyB2YWx1ZSBjb21wdXRhdGlvbiBpcyByZXF1aXJlZCBmb3IgcG90ZW50aWFsIHVuaXQgbWlzbWF0Y2hlc1xuXHRcdGluaXRpYWxJblVuaXQgPSBlbGVtLm5vZGVUeXBlICYmXG5cdFx0XHQoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSB8fCB1bml0ICE9PSBcInB4XCIgJiYgK2luaXRpYWwgKSAmJlxuXHRcdFx0cmNzc051bS5leGVjKCBqUXVlcnkuY3NzKCBlbGVtLCBwcm9wICkgKTtcblxuXHRpZiAoIGluaXRpYWxJblVuaXQgJiYgaW5pdGlhbEluVW5pdFsgMyBdICE9PSB1bml0ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdFx0Ly8gSGFsdmUgdGhlIGl0ZXJhdGlvbiB0YXJnZXQgdmFsdWUgdG8gcHJldmVudCBpbnRlcmZlcmVuY2UgZnJvbSBDU1MgdXBwZXIgYm91bmRzIChnaC0yMTQ0KVxuXHRcdGluaXRpYWwgPSBpbml0aWFsIC8gMjtcblxuXHRcdC8vIFRydXN0IHVuaXRzIHJlcG9ydGVkIGJ5IGpRdWVyeS5jc3Ncblx0XHR1bml0ID0gdW5pdCB8fCBpbml0aWFsSW5Vbml0WyAzIF07XG5cblx0XHQvLyBJdGVyYXRpdmVseSBhcHByb3hpbWF0ZSBmcm9tIGEgbm9uemVybyBzdGFydGluZyBwb2ludFxuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbCB8fCAxO1xuXG5cdFx0d2hpbGUgKCBtYXhJdGVyYXRpb25zLS0gKSB7XG5cblx0XHRcdC8vIEV2YWx1YXRlIGFuZCB1cGRhdGUgb3VyIGJlc3QgZ3Vlc3MgKGRvdWJsaW5nIGd1ZXNzZXMgdGhhdCB6ZXJvIG91dCkuXG5cdFx0XHQvLyBGaW5pc2ggaWYgdGhlIHNjYWxlIGVxdWFscyBvciBjcm9zc2VzIDEgKG1ha2luZyB0aGUgb2xkKm5ldyBwcm9kdWN0IG5vbi1wb3NpdGl2ZSkuXG5cdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cdFx0XHRpZiAoICggMSAtIHNjYWxlICkgKiAoIDEgLSAoIHNjYWxlID0gY3VycmVudFZhbHVlKCkgLyBpbml0aWFsIHx8IDAuNSApICkgPD0gMCApIHtcblx0XHRcdFx0bWF4SXRlcmF0aW9ucyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAvIHNjYWxlO1xuXG5cdFx0fVxuXG5cdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgKiAyO1xuXHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB3ZSB1cGRhdGUgdGhlIHR3ZWVuIHByb3BlcnRpZXMgbGF0ZXIgb25cblx0XHR2YWx1ZVBhcnRzID0gdmFsdWVQYXJ0cyB8fCBbXTtcblx0fVxuXG5cdGlmICggdmFsdWVQYXJ0cyApIHtcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWxJblVuaXQgfHwgK2luaXRpYWwgfHwgMDtcblxuXHRcdC8vIEFwcGx5IHJlbGF0aXZlIG9mZnNldCAoKz0vLT0pIGlmIHNwZWNpZmllZFxuXHRcdGFkanVzdGVkID0gdmFsdWVQYXJ0c1sgMSBdID9cblx0XHRcdGluaXRpYWxJblVuaXQgKyAoIHZhbHVlUGFydHNbIDEgXSArIDEgKSAqIHZhbHVlUGFydHNbIDIgXSA6XG5cdFx0XHQrdmFsdWVQYXJ0c1sgMiBdO1xuXHRcdGlmICggdHdlZW4gKSB7XG5cdFx0XHR0d2Vlbi51bml0ID0gdW5pdDtcblx0XHRcdHR3ZWVuLnN0YXJ0ID0gaW5pdGlhbEluVW5pdDtcblx0XHRcdHR3ZWVuLmVuZCA9IGFkanVzdGVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gYWRqdXN0ZWQ7XG59XG5cblxudmFyIGRlZmF1bHREaXNwbGF5TWFwID0ge307XG5cbmZ1bmN0aW9uIGdldERlZmF1bHREaXNwbGF5KCBlbGVtICkge1xuXHR2YXIgdGVtcCxcblx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQsXG5cdFx0bm9kZU5hbWUgPSBlbGVtLm5vZGVOYW1lLFxuXHRcdGRpc3BsYXkgPSBkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXTtcblxuXHRpZiAoIGRpc3BsYXkgKSB7XG5cdFx0cmV0dXJuIGRpc3BsYXk7XG5cdH1cblxuXHR0ZW1wID0gZG9jLmJvZHkuYXBwZW5kQ2hpbGQoIGRvYy5jcmVhdGVFbGVtZW50KCBub2RlTmFtZSApICk7XG5cdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCB0ZW1wLCBcImRpc3BsYXlcIiApO1xuXG5cdHRlbXAucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggdGVtcCApO1xuXG5cdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0ZGlzcGxheSA9IFwiYmxvY2tcIjtcblx0fVxuXHRkZWZhdWx0RGlzcGxheU1hcFsgbm9kZU5hbWUgXSA9IGRpc3BsYXk7XG5cblx0cmV0dXJuIGRpc3BsYXk7XG59XG5cbmZ1bmN0aW9uIHNob3dIaWRlKCBlbGVtZW50cywgc2hvdyApIHtcblx0dmFyIGRpc3BsYXksIGVsZW0sXG5cdFx0dmFsdWVzID0gW10sXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGVsZW1lbnRzLmxlbmd0aDtcblxuXHQvLyBEZXRlcm1pbmUgbmV3IGRpc3BsYXkgdmFsdWUgZm9yIGVsZW1lbnRzIHRoYXQgbmVlZCB0byBjaGFuZ2Vcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRlbGVtID0gZWxlbWVudHNbIGluZGV4IF07XG5cdFx0aWYgKCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGRpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXk7XG5cdFx0aWYgKCBzaG93ICkge1xuXG5cdFx0XHQvLyBTaW5jZSB3ZSBmb3JjZSB2aXNpYmlsaXR5IHVwb24gY2FzY2FkZS1oaWRkZW4gZWxlbWVudHMsIGFuIGltbWVkaWF0ZSAoYW5kIHNsb3cpXG5cdFx0XHQvLyBjaGVjayBpcyByZXF1aXJlZCBpbiB0aGlzIGZpcnN0IGxvb3AgdW5sZXNzIHdlIGhhdmUgYSBub25lbXB0eSBkaXNwbGF5IHZhbHVlIChlaXRoZXJcblx0XHRcdC8vIGlubGluZSBvciBhYm91dC10by1iZS1yZXN0b3JlZClcblx0XHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKSB8fCBudWxsO1xuXHRcdFx0XHRpZiAoICF2YWx1ZXNbIGluZGV4IF0gKSB7XG5cdFx0XHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKCBlbGVtLnN0eWxlLmRpc3BsYXkgPT09IFwiXCIgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICkgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IGdldERlZmF1bHREaXNwbGF5KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICggZGlzcGxheSAhPT0gXCJub25lXCIgKSB7XG5cdFx0XHRcdHZhbHVlc1sgaW5kZXggXSA9IFwibm9uZVwiO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHdoYXQgd2UncmUgb3ZlcndyaXRpbmdcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImRpc3BsYXlcIiwgZGlzcGxheSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFNldCB0aGUgZGlzcGxheSBvZiB0aGUgZWxlbWVudHMgaW4gYSBzZWNvbmQgbG9vcCB0byBhdm9pZCBjb25zdGFudCByZWZsb3dcblx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoIHZhbHVlc1sgaW5kZXggXSAhPSBudWxsICkge1xuXHRcdFx0ZWxlbWVudHNbIGluZGV4IF0uc3R5bGUuZGlzcGxheSA9IHZhbHVlc1sgaW5kZXggXTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudHM7XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2hvdzogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzLCB0cnVlICk7XG5cdH0sXG5cdGhpZGU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcyApO1xuXHR9LFxuXHR0b2dnbGU6IGZ1bmN0aW9uKCBzdGF0ZSApIHtcblx0XHRpZiAoIHR5cGVvZiBzdGF0ZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGUgPyB0aGlzLnNob3coKSA6IHRoaXMuaGlkZSgpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc0hpZGRlbldpdGhpblRyZWUoIHRoaXMgKSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuc2hvdygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuaGlkZSgpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xudmFyIHJjaGVja2FibGVUeXBlID0gKCAvXig/OmNoZWNrYm94fHJhZGlvKSQvaSApO1xuXG52YXIgcnRhZ05hbWUgPSAoIC88KFthLXpdW15cXC9cXDA+XFx4MjBcXHRcXHJcXG5cXGZdKikvaSApO1xuXG52YXIgcnNjcmlwdFR5cGUgPSAoIC9eJHxebW9kdWxlJHxcXC8oPzpqYXZhfGVjbWEpc2NyaXB0L2kgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBmcmFnbWVudCA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRkaXYgPSBmcmFnbWVudC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICksXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5XG5cdC8vIENoZWNrIHN0YXRlIGxvc3QgaWYgdGhlIG5hbWUgaXMgc2V0ICgjMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICgjMTQ5MDEpXG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwicmFkaW9cIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwiY2hlY2tlZFwiLCBcImNoZWNrZWRcIiApO1xuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcInRcIiApO1xuXG5cdGRpdi5hcHBlbmRDaGlsZCggaW5wdXQgKTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIG9ubHlcblx0Ly8gT2xkZXIgV2ViS2l0IGRvZXNuJ3QgY2xvbmUgY2hlY2tlZCBzdGF0ZSBjb3JyZWN0bHkgaW4gZnJhZ21lbnRzXG5cdHN1cHBvcnQuY2hlY2tDbG9uZSA9IGRpdi5jbG9uZU5vZGUoIHRydWUgKS5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuY2hlY2tlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTWFrZSBzdXJlIHRleHRhcmVhIChhbmQgY2hlY2tib3gpIGRlZmF1bHRWYWx1ZSBpcyBwcm9wZXJseSBjbG9uZWRcblx0ZGl2LmlubmVySFRNTCA9IFwiPHRleHRhcmVhPng8L3RleHRhcmVhPlwiO1xuXHRzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkID0gISFkaXYuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmRlZmF1bHRWYWx1ZTtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHQvLyBJRSA8PTkgcmVwbGFjZXMgPG9wdGlvbj4gdGFncyB3aXRoIHRoZWlyIGNvbnRlbnRzIHdoZW4gaW5zZXJ0ZWQgb3V0c2lkZSBvZlxuXHQvLyB0aGUgc2VsZWN0IGVsZW1lbnQuXG5cdGRpdi5pbm5lckhUTUwgPSBcIjxvcHRpb24+PC9vcHRpb24+XCI7XG5cdHN1cHBvcnQub3B0aW9uID0gISFkaXYubGFzdENoaWxkO1xufSApKCk7XG5cblxuLy8gV2UgaGF2ZSB0byBjbG9zZSB0aGVzZSB0YWdzIHRvIHN1cHBvcnQgWEhUTUwgKCMxMzIwMClcbnZhciB3cmFwTWFwID0ge1xuXG5cdC8vIFhIVE1MIHBhcnNlcnMgZG8gbm90IG1hZ2ljYWxseSBpbnNlcnQgZWxlbWVudHMgaW4gdGhlXG5cdC8vIHNhbWUgd2F5IHRoYXQgdGFnIHNvdXAgcGFyc2VycyBkby4gU28gd2UgY2Fubm90IHNob3J0ZW5cblx0Ly8gdGhpcyBieSBvbWl0dGluZyA8dGJvZHk+IG9yIG90aGVyIHJlcXVpcmVkIGVsZW1lbnRzLlxuXHR0aGVhZDogWyAxLCBcIjx0YWJsZT5cIiwgXCI8L3RhYmxlPlwiIF0sXG5cdGNvbDogWyAyLCBcIjx0YWJsZT48Y29sZ3JvdXA+XCIsIFwiPC9jb2xncm91cD48L3RhYmxlPlwiIF0sXG5cdHRyOiBbIDIsIFwiPHRhYmxlPjx0Ym9keT5cIiwgXCI8L3Rib2R5PjwvdGFibGU+XCIgXSxcblx0dGQ6IFsgMywgXCI8dGFibGU+PHRib2R5Pjx0cj5cIiwgXCI8L3RyPjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXG5cdF9kZWZhdWx0OiBbIDAsIFwiXCIsIFwiXCIgXVxufTtcblxud3JhcE1hcC50Ym9keSA9IHdyYXBNYXAudGZvb3QgPSB3cmFwTWFwLmNvbGdyb3VwID0gd3JhcE1hcC5jYXB0aW9uID0gd3JhcE1hcC50aGVhZDtcbndyYXBNYXAudGggPSB3cmFwTWFwLnRkO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuaWYgKCAhc3VwcG9ydC5vcHRpb24gKSB7XG5cdHdyYXBNYXAub3B0Z3JvdXAgPSB3cmFwTWFwLm9wdGlvbiA9IFsgMSwgXCI8c2VsZWN0IG11bHRpcGxlPSdtdWx0aXBsZSc+XCIsIFwiPC9zZWxlY3Q+XCIgXTtcbn1cblxuXG5mdW5jdGlvbiBnZXRBbGwoIGNvbnRleHQsIHRhZyApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFVzZSB0eXBlb2YgdG8gYXZvaWQgemVyby1hcmd1bWVudCBtZXRob2QgaW52b2NhdGlvbiBvbiBob3N0IG9iamVjdHMgKCMxNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKCMxMjM5Milcblx0XHRcdFx0dG1wLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZW1vdmUgd3JhcHBlciBmcm9tIGZyYWdtZW50XG5cdGZyYWdtZW50LnRleHRDb250ZW50ID0gXCJcIjtcblxuXHRpID0gMDtcblx0d2hpbGUgKCAoIGVsZW0gPSBub2Rlc1sgaSsrIF0gKSApIHtcblxuXHRcdC8vIFNraXAgZWxlbWVudHMgYWxyZWFkeSBpbiB0aGUgY29udGV4dCBjb2xsZWN0aW9uICh0cmFjLTQwODcpXG5cdFx0aWYgKCBzZWxlY3Rpb24gJiYgalF1ZXJ5LmluQXJyYXkoIGVsZW0sIHNlbGVjdGlvbiApID4gLTEgKSB7XG5cdFx0XHRpZiAoIGlnbm9yZWQgKSB7XG5cdFx0XHRcdGlnbm9yZWQucHVzaCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0YXR0YWNoZWQgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBBcHBlbmQgdG8gZnJhZ21lbnRcblx0XHR0bXAgPSBnZXRBbGwoIGZyYWdtZW50LmFwcGVuZENoaWxkKCBlbGVtICksIFwic2NyaXB0XCIgKTtcblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRpZiAoIGF0dGFjaGVkICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggdG1wICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FwdHVyZSBleGVjdXRhYmxlc1xuXHRcdGlmICggc2NyaXB0cyApIHtcblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0bXBbIGorKyBdICkgKSB7XG5cdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggZWxlbS50eXBlIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0XHRzY3JpcHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBmcmFnbWVudDtcbn1cblxuXG52YXIgcnR5cGVuYW1lc3BhY2UgPSAvXihbXi5dKikoPzpcXC4oLispfCkvO1xuXG5mdW5jdGlvbiByZXR1cm5UcnVlKCkge1xuXHRyZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gcmV0dXJuRmFsc2UoKSB7XG5cdHJldHVybiBmYWxzZTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTErXG4vLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91cywgZXhjZXB0IHdoZW4gdGhleSBhcmUgbm8tb3AuXG4vLyBTbyBleHBlY3QgZm9jdXMgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBhbHJlYWR5IGFjdGl2ZSxcbi8vIGFuZCBibHVyIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgbm90IGFscmVhZHkgYWN0aXZlLlxuLy8gKGZvY3VzIGFuZCBibHVyIGFyZSBhbHdheXMgc3luY2hyb25vdXMgaW4gb3RoZXIgc3VwcG9ydGVkIGJyb3dzZXJzLFxuLy8gdGhpcyBqdXN0IGRlZmluZXMgd2hlbiB3ZSBjYW4gY291bnQgb24gaXQpLlxuZnVuY3Rpb24gZXhwZWN0U3luYyggZWxlbSwgdHlwZSApIHtcblx0cmV0dXJuICggZWxlbSA9PT0gc2FmZUFjdGl2ZUVsZW1lbnQoKSApID09PSAoIHR5cGUgPT09IFwiZm9jdXNcIiApO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gQWNjZXNzaW5nIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIHRocm93IHVuZXhwZWN0ZWRseVxuLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzkzXG5mdW5jdGlvbiBzYWZlQWN0aXZlRWxlbWVudCgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblx0fSBjYXRjaCAoIGVyciApIHsgfVxufVxuXG5mdW5jdGlvbiBvbiggZWxlbSwgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgb25lICkge1xuXHR2YXIgb3JpZ0ZuLCB0eXBlO1xuXG5cdC8vIFR5cGVzIGNhbiBiZSBhIG1hcCBvZiB0eXBlcy9oYW5kbGVyc1xuXHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vICggdHlwZXMtT2JqZWN0LCBzZWxlY3RvciwgZGF0YSApXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtT2JqZWN0LCBkYXRhIClcblx0XHRcdGRhdGEgPSBkYXRhIHx8IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRvbiggZWxlbSwgdHlwZSwgc2VsZWN0b3IsIGRhdGEsIHR5cGVzWyB0eXBlIF0sIG9uZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggZGF0YSA9PSBudWxsICYmIGZuID09IG51bGwgKSB7XG5cblx0XHQvLyAoIHR5cGVzLCBmbiApXG5cdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRkYXRhID0gc2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoIGZuID09IG51bGwgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMsIHNlbGVjdG9yLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vICggdHlwZXMsIGRhdGEsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHR9IGVsc2UgaWYgKCAhZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIG9uZSA9PT0gMSApIHtcblx0XHRvcmlnRm4gPSBmbjtcblx0XHRmbiA9IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0Ly8gQ2FuIHVzZSBhbiBlbXB0eSBzZXQsIHNpbmNlIGV2ZW50IGNvbnRhaW5zIHRoZSBpbmZvXG5cdFx0XHRqUXVlcnkoKS5vZmYoIGV2ZW50ICk7XG5cdFx0XHRyZXR1cm4gb3JpZ0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9O1xuXG5cdFx0Ly8gVXNlIHNhbWUgZ3VpZCBzbyBjYWxsZXIgY2FuIHJlbW92ZSB1c2luZyBvcmlnRm5cblx0XHRmbi5ndWlkID0gb3JpZ0ZuLmd1aWQgfHwgKCBvcmlnRm4uZ3VpZCA9IGpRdWVyeS5ndWlkKysgKTtcblx0fVxuXHRyZXR1cm4gZWxlbS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRqUXVlcnkuZXZlbnQuYWRkKCB0aGlzLCB0eXBlcywgZm4sIGRhdGEsIHNlbGVjdG9yICk7XG5cdH0gKTtcbn1cblxuLypcbiAqIEhlbHBlciBmdW5jdGlvbnMgZm9yIG1hbmFnaW5nIGV2ZW50cyAtLSBub3QgcGFydCBvZiB0aGUgcHVibGljIGludGVyZmFjZS5cbiAqIFByb3BzIHRvIERlYW4gRWR3YXJkcycgYWRkRXZlbnQgbGlicmFyeSBmb3IgbWFueSBvZiB0aGUgaWRlYXMuXG4gKi9cbmpRdWVyeS5ldmVudCA9IHtcblxuXHRnbG9iYWw6IHt9LFxuXG5cdGFkZDogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBkYXRhLCBzZWxlY3RvciApIHtcblxuXHRcdHZhciBoYW5kbGVPYmpJbiwgZXZlbnRIYW5kbGUsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdC8vIE9ubHkgYXR0YWNoIGV2ZW50cyB0byBvYmplY3RzIHRoYXQgYWNjZXB0IGRhdGFcblx0XHRpZiAoICFhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGFuIG9iamVjdCBvZiBjdXN0b20gZGF0YSBpbiBsaWV1IG9mIHRoZSBoYW5kbGVyXG5cdFx0aWYgKCBoYW5kbGVyLmhhbmRsZXIgKSB7XG5cdFx0XHRoYW5kbGVPYmpJbiA9IGhhbmRsZXI7XG5cdFx0XHRoYW5kbGVyID0gaGFuZGxlT2JqSW4uaGFuZGxlcjtcblx0XHRcdHNlbGVjdG9yID0gaGFuZGxlT2JqSW4uc2VsZWN0b3I7XG5cdFx0fVxuXG5cdFx0Ly8gRW5zdXJlIHRoYXQgaW52YWxpZCBzZWxlY3RvcnMgdGhyb3cgZXhjZXB0aW9ucyBhdCBhdHRhY2ggdGltZVxuXHRcdC8vIEV2YWx1YXRlIGFnYWluc3QgZG9jdW1lbnRFbGVtZW50IGluIGNhc2UgZWxlbSBpcyBhIG5vbi1lbGVtZW50IG5vZGUgKGUuZy4sIGRvY3VtZW50KVxuXHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGRvY3VtZW50RWxlbWVudCwgc2VsZWN0b3IgKTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB0aGUgaGFuZGxlciBoYXMgYSB1bmlxdWUgSUQsIHVzZWQgdG8gZmluZC9yZW1vdmUgaXQgbGF0ZXJcblx0XHRpZiAoICFoYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRoYW5kbGVyLmd1aWQgPSBqUXVlcnkuZ3VpZCsrO1xuXHRcdH1cblxuXHRcdC8vIEluaXQgdGhlIGVsZW1lbnQncyBldmVudCBzdHJ1Y3R1cmUgYW5kIG1haW4gaGFuZGxlciwgaWYgdGhpcyBpcyB0aGUgZmlyc3Rcblx0XHRpZiAoICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0ZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzID0gT2JqZWN0LmNyZWF0ZSggbnVsbCApO1xuXHRcdH1cblx0XHRpZiAoICEoIGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlICkgKSB7XG5cdFx0XHRldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSA9IGZ1bmN0aW9uKCBlICkge1xuXG5cdFx0XHRcdC8vIERpc2NhcmQgdGhlIHNlY29uZCBldmVudCBvZiBhIGpRdWVyeS5ldmVudC50cmlnZ2VyKCkgYW5kXG5cdFx0XHRcdC8vIHdoZW4gYW4gZXZlbnQgaXMgY2FsbGVkIGFmdGVyIGEgcGFnZSBoYXMgdW5sb2FkZWRcblx0XHRcdFx0cmV0dXJuIHR5cGVvZiBqUXVlcnkgIT09IFwidW5kZWZpbmVkXCIgJiYgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCAhPT0gZS50eXBlID9cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuZGlzcGF0Y2guYXBwbHkoIGVsZW0sIGFyZ3VtZW50cyApIDogdW5kZWZpbmVkO1xuXHRcdFx0fTtcblx0XHR9XG5cblx0XHQvLyBIYW5kbGUgbXVsdGlwbGUgZXZlbnRzIHNlcGFyYXRlZCBieSBhIHNwYWNlXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFRoZXJlICptdXN0KiBiZSBhIHR5cGUsIG5vIGF0dGFjaGluZyBuYW1lc3BhY2Utb25seSBoYW5kbGVyc1xuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGV2ZW50IGNoYW5nZXMgaXRzIHR5cGUsIHVzZSB0aGUgc3BlY2lhbCBldmVudCBoYW5kbGVycyBmb3IgdGhlIGNoYW5nZWQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIElmIHNlbGVjdG9yIGRlZmluZWQsIGRldGVybWluZSBzcGVjaWFsIGV2ZW50IGFwaSB0eXBlLCBvdGhlcndpc2UgZ2l2ZW4gdHlwZVxuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBVcGRhdGUgc3BlY2lhbCBiYXNlZCBvbiBuZXdseSByZXNldCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gaGFuZGxlT2JqIGlzIHBhc3NlZCB0byBhbGwgZXZlbnQgaGFuZGxlcnNcblx0XHRcdGhhbmRsZU9iaiA9IGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0b3JpZ1R5cGU6IG9yaWdUeXBlLFxuXHRcdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0XHRoYW5kbGVyOiBoYW5kbGVyLFxuXHRcdFx0XHRndWlkOiBoYW5kbGVyLmd1aWQsXG5cdFx0XHRcdHNlbGVjdG9yOiBzZWxlY3Rvcixcblx0XHRcdFx0bmVlZHNDb250ZXh0OiBzZWxlY3RvciAmJiBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSxcblx0XHRcdFx0bmFtZXNwYWNlOiBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiIClcblx0XHRcdH0sIGhhbmRsZU9iakluICk7XG5cblx0XHRcdC8vIEluaXQgdGhlIGV2ZW50IGhhbmRsZXIgcXVldWUgaWYgd2UncmUgdGhlIGZpcnN0XG5cdFx0XHRpZiAoICEoIGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gKSApIHtcblx0XHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSA9IFtdO1xuXHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50ID0gMDtcblxuXHRcdFx0XHQvLyBPbmx5IHVzZSBhZGRFdmVudExpc3RlbmVyIGlmIHRoZSBzcGVjaWFsIGV2ZW50cyBoYW5kbGVyIHJldHVybnMgZmFsc2Vcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC5zZXR1cCB8fFxuXHRcdFx0XHRcdHNwZWNpYWwuc2V0dXAuY2FsbCggZWxlbSwgZGF0YSwgbmFtZXNwYWNlcywgZXZlbnRIYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0uYWRkRXZlbnRMaXN0ZW5lciApIHtcblx0XHRcdFx0XHRcdGVsZW0uYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgZXZlbnRIYW5kbGUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBzcGVjaWFsLmFkZCApIHtcblx0XHRcdFx0c3BlY2lhbC5hZGQuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cblx0XHRcdFx0aWYgKCAhaGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlci5ndWlkID0gaGFuZGxlci5ndWlkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0byB0aGUgZWxlbWVudCdzIGhhbmRsZXIgbGlzdCwgZGVsZWdhdGVzIGluIGZyb250XG5cdFx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGhhbmRsZXJzLmRlbGVnYXRlQ291bnQrKywgMCwgaGFuZGxlT2JqICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRoYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gS2VlcCB0cmFjayBvZiB3aGljaCBldmVudHMgaGF2ZSBldmVyIGJlZW4gdXNlZCwgZm9yIGV2ZW50IG9wdGltaXphdGlvblxuXHRcdFx0alF1ZXJ5LmV2ZW50Lmdsb2JhbFsgdHlwZSBdID0gdHJ1ZTtcblx0XHR9XG5cblx0fSxcblxuXHQvLyBEZXRhY2ggYW4gZXZlbnQgb3Igc2V0IG9mIGV2ZW50cyBmcm9tIGFuIGVsZW1lbnRcblx0cmVtb3ZlOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIHNlbGVjdG9yLCBtYXBwZWRUeXBlcyApIHtcblxuXHRcdHZhciBqLCBvcmlnQ291bnQsIHRtcCxcblx0XHRcdGV2ZW50cywgdCwgaGFuZGxlT2JqLFxuXHRcdFx0c3BlY2lhbCwgaGFuZGxlcnMsIHR5cGUsIG5hbWVzcGFjZXMsIG9yaWdUeXBlLFxuXHRcdFx0ZWxlbURhdGEgPSBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICkgJiYgZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHRpZiAoICFlbGVtRGF0YSB8fCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBPbmNlIGZvciBlYWNoIHR5cGUubmFtZXNwYWNlIGluIHR5cGVzOyB0eXBlIG1heSBiZSBvbWl0dGVkXG5cdFx0dHlwZXMgPSAoIHR5cGVzIHx8IFwiXCIgKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXHRcdHQgPSB0eXBlcy5sZW5ndGg7XG5cdFx0d2hpbGUgKCB0LS0gKSB7XG5cdFx0XHR0bXAgPSBydHlwZW5hbWVzcGFjZS5leGVjKCB0eXBlc1sgdCBdICkgfHwgW107XG5cdFx0XHR0eXBlID0gb3JpZ1R5cGUgPSB0bXBbIDEgXTtcblx0XHRcdG5hbWVzcGFjZXMgPSAoIHRtcFsgMiBdIHx8IFwiXCIgKS5zcGxpdCggXCIuXCIgKS5zb3J0KCk7XG5cblx0XHRcdC8vIFVuYmluZCBhbGwgZXZlbnRzIChvbiB0aGlzIG5hbWVzcGFjZSwgaWYgcHJvdmlkZWQpIGZvciB0aGUgZWxlbWVudFxuXHRcdFx0aWYgKCAhdHlwZSApIHtcblx0XHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSArIHR5cGVzWyB0IF0sIGhhbmRsZXIsIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdFx0dHlwZSA9ICggc2VsZWN0b3IgPyBzcGVjaWFsLmRlbGVnYXRlVHlwZSA6IHNwZWNpYWwuYmluZFR5cGUgKSB8fCB0eXBlO1xuXHRcdFx0aGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSB8fCBbXTtcblx0XHRcdHRtcCA9IHRtcFsgMiBdICYmXG5cdFx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApO1xuXG5cdFx0XHQvLyBSZW1vdmUgbWF0Y2hpbmcgZXZlbnRzXG5cdFx0XHRvcmlnQ291bnQgPSBqID0gaGFuZGxlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBqIF07XG5cblx0XHRcdFx0aWYgKCAoIG1hcHBlZFR5cGVzIHx8IG9yaWdUeXBlID09PSBoYW5kbGVPYmoub3JpZ1R5cGUgKSAmJlxuXHRcdFx0XHRcdCggIWhhbmRsZXIgfHwgaGFuZGxlci5ndWlkID09PSBoYW5kbGVPYmouZ3VpZCApICYmXG5cdFx0XHRcdFx0KCAhdG1wIHx8IHRtcC50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSAmJlxuXHRcdFx0XHRcdCggIXNlbGVjdG9yIHx8IHNlbGVjdG9yID09PSBoYW5kbGVPYmouc2VsZWN0b3IgfHxcblx0XHRcdFx0XHRcdHNlbGVjdG9yID09PSBcIioqXCIgJiYgaGFuZGxlT2JqLnNlbGVjdG9yICkgKSB7XG5cdFx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBqLCAxICk7XG5cblx0XHRcdFx0XHRpZiAoIGhhbmRsZU9iai5zZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzcGVjaWFsLnJlbW92ZSApIHtcblx0XHRcdFx0XHRcdHNwZWNpYWwucmVtb3ZlLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZW1vdmUgZ2VuZXJpYyBldmVudCBoYW5kbGVyIGlmIHdlIHJlbW92ZWQgc29tZXRoaW5nIGFuZCBubyBtb3JlIGhhbmRsZXJzIGV4aXN0XG5cdFx0XHQvLyAoYXZvaWRzIHBvdGVudGlhbCBmb3IgZW5kbGVzcyByZWN1cnNpb24gZHVyaW5nIHJlbW92YWwgb2Ygc3BlY2lhbCBldmVudCBoYW5kbGVycylcblx0XHRcdGlmICggb3JpZ0NvdW50ICYmICFoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdGlmICggIXNwZWNpYWwudGVhcmRvd24gfHxcblx0XHRcdFx0XHRzcGVjaWFsLnRlYXJkb3duLmNhbGwoIGVsZW0sIG5hbWVzcGFjZXMsIGVsZW1EYXRhLmhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZWxlbURhdGEuaGFuZGxlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZXZlbnRzWyB0eXBlIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIGRhdGEgYW5kIHRoZSBleHBhbmRvIGlmIGl0J3Mgbm8gbG9uZ2VyIHVzZWRcblx0XHRpZiAoIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBldmVudHMgKSApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblx0XHR9XG5cdH0sXG5cblx0ZGlzcGF0Y2g6IGZ1bmN0aW9uKCBuYXRpdmVFdmVudCApIHtcblxuXHRcdHZhciBpLCBqLCByZXQsIG1hdGNoZWQsIGhhbmRsZU9iaiwgaGFuZGxlclF1ZXVlLFxuXHRcdFx0YXJncyA9IG5ldyBBcnJheSggYXJndW1lbnRzLmxlbmd0aCApLFxuXG5cdFx0XHQvLyBNYWtlIGEgd3JpdGFibGUgalF1ZXJ5LkV2ZW50IGZyb20gdGhlIG5hdGl2ZSBldmVudCBvYmplY3Rcblx0XHRcdGV2ZW50ID0galF1ZXJ5LmV2ZW50LmZpeCggbmF0aXZlRXZlbnQgKSxcblxuXHRcdFx0aGFuZGxlcnMgPSAoXG5cdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKVxuXHRcdFx0KVsgZXZlbnQudHlwZSBdIHx8IFtdLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyBldmVudC50eXBlIF0gfHwge307XG5cblx0XHQvLyBVc2UgdGhlIGZpeC1lZCBqUXVlcnkuRXZlbnQgcmF0aGVyIHRoYW4gdGhlIChyZWFkLW9ubHkpIG5hdGl2ZSBldmVudFxuXHRcdGFyZ3NbIDAgXSA9IGV2ZW50O1xuXG5cdFx0Zm9yICggaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRhcmdzWyBpIF0gPSBhcmd1bWVudHNbIGkgXTtcblx0XHR9XG5cblx0XHRldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRoaXM7XG5cblx0XHQvLyBDYWxsIHRoZSBwcmVEaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGUsIGFuZCBsZXQgaXQgYmFpbCBpZiBkZXNpcmVkXG5cdFx0aWYgKCBzcGVjaWFsLnByZURpc3BhdGNoICYmIHNwZWNpYWwucHJlRGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGhhbmRsZXJzXG5cdFx0aGFuZGxlclF1ZXVlID0galF1ZXJ5LmV2ZW50LmhhbmRsZXJzLmNhbGwoIHRoaXMsIGV2ZW50LCBoYW5kbGVycyApO1xuXG5cdFx0Ly8gUnVuIGRlbGVnYXRlcyBmaXJzdDsgdGhleSBtYXkgd2FudCB0byBzdG9wIHByb3BhZ2F0aW9uIGJlbmVhdGggdXNcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggbWF0Y2hlZCA9IGhhbmRsZXJRdWV1ZVsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGV2ZW50LmN1cnJlbnRUYXJnZXQgPSBtYXRjaGVkLmVsZW07XG5cblx0XHRcdGogPSAwO1xuXHRcdFx0d2hpbGUgKCAoIGhhbmRsZU9iaiA9IG1hdGNoZWQuaGFuZGxlcnNbIGorKyBdICkgJiZcblx0XHRcdFx0IWV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGV2ZW50IGlzIG5hbWVzcGFjZWQsIHRoZW4gZWFjaCBoYW5kbGVyIGlzIG9ubHkgaW52b2tlZCBpZiBpdCBpc1xuXHRcdFx0XHQvLyBzcGVjaWFsbHkgdW5pdmVyc2FsIG9yIGl0cyBuYW1lc3BhY2VzIGFyZSBhIHN1cGVyc2V0IG9mIHRoZSBldmVudCdzLlxuXHRcdFx0XHRpZiAoICFldmVudC5ybmFtZXNwYWNlIHx8IGhhbmRsZU9iai5uYW1lc3BhY2UgPT09IGZhbHNlIHx8XG5cdFx0XHRcdFx0ZXZlbnQucm5hbWVzcGFjZS50ZXN0KCBoYW5kbGVPYmoubmFtZXNwYWNlICkgKSB7XG5cblx0XHRcdFx0XHRldmVudC5oYW5kbGVPYmogPSBoYW5kbGVPYmo7XG5cdFx0XHRcdFx0ZXZlbnQuZGF0YSA9IGhhbmRsZU9iai5kYXRhO1xuXG5cdFx0XHRcdFx0cmV0ID0gKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyBoYW5kbGVPYmoub3JpZ1R5cGUgXSB8fCB7fSApLmhhbmRsZSB8fFxuXHRcdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIgKS5hcHBseSggbWF0Y2hlZC5lbGVtLCBhcmdzICk7XG5cblx0XHRcdFx0XHRpZiAoIHJldCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGV2ZW50LnJlc3VsdCA9IHJldCApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbCB0aGUgcG9zdERpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZVxuXHRcdGlmICggc3BlY2lhbC5wb3N0RGlzcGF0Y2ggKSB7XG5cdFx0XHRzcGVjaWFsLnBvc3REaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApO1xuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0aGFuZGxlcnM6IGZ1bmN0aW9uKCBldmVudCwgaGFuZGxlcnMgKSB7XG5cdFx0dmFyIGksIGhhbmRsZU9iaiwgc2VsLCBtYXRjaGVkSGFuZGxlcnMsIG1hdGNoZWRTZWxlY3RvcnMsXG5cdFx0XHRoYW5kbGVyUXVldWUgPSBbXSxcblx0XHRcdGRlbGVnYXRlQ291bnQgPSBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LFxuXHRcdFx0Y3VyID0gZXZlbnQudGFyZ2V0O1xuXG5cdFx0Ly8gRmluZCBkZWxlZ2F0ZSBoYW5kbGVyc1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTlcblx0XHRcdC8vIEJsYWNrLWhvbGUgU1ZHIDx1c2U+IGluc3RhbmNlIHRyZWVzICh0cmFjLTEzMTgwKVxuXHRcdFx0Y3VyLm5vZGVUeXBlICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MlxuXHRcdFx0Ly8gU3VwcHJlc3Mgc3BlYy12aW9sYXRpbmcgY2xpY2tzIGluZGljYXRpbmcgYSBub24tcHJpbWFyeSBwb2ludGVyIGJ1dHRvbiAodHJhYy0zODYxKVxuXHRcdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnQtdHlwZS1jbGlja1xuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0Ly8gLi4uYnV0IG5vdCBhcnJvdyBrZXkgXCJjbGlja3NcIiBvZiByYWRpbyBpbnB1dHMsIHdoaWNoIGNhbiBoYXZlIGBidXR0b25gIC0xIChnaC0yMzQzKVxuXHRcdFx0ISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGV2ZW50LmJ1dHRvbiA+PSAxICkgKSB7XG5cblx0XHRcdGZvciAoIDsgY3VyICE9PSB0aGlzOyBjdXIgPSBjdXIucGFyZW50Tm9kZSB8fCB0aGlzICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNoZWNrIG5vbi1lbGVtZW50cyAoIzEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAoIzY5MTEsICM4MTY1LCAjMTEzODIsICMxMTc2NClcblx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPT09IDEgJiYgISggZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiICYmIGN1ci5kaXNhYmxlZCA9PT0gdHJ1ZSApICkge1xuXHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycyA9IFtdO1xuXHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnMgPSB7fTtcblx0XHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGRlbGVnYXRlQ291bnQ7IGkrKyApIHtcblx0XHRcdFx0XHRcdGhhbmRsZU9iaiA9IGhhbmRsZXJzWyBpIF07XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IGNvbmZsaWN0IHdpdGggT2JqZWN0LnByb3RvdHlwZSBwcm9wZXJ0aWVzICgjMTMyMDMpXG5cdFx0XHRcdFx0XHRzZWwgPSBoYW5kbGVPYmouc2VsZWN0b3IgKyBcIiBcIjtcblxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSA9IGhhbmRsZU9iai5uZWVkc0NvbnRleHQgP1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeSggc2VsLCB0aGlzICkuaW5kZXgoIGN1ciApID4gLTEgOlxuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kKCBzZWwsIHRoaXMsIG51bGwsIFsgY3VyIF0gKS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdICkge1xuXHRcdFx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggbWF0Y2hlZEhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IG1hdGNoZWRIYW5kbGVycyB9ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQWRkIHRoZSByZW1haW5pbmcgKGRpcmVjdGx5LWJvdW5kKSBoYW5kbGVyc1xuXHRcdGN1ciA9IHRoaXM7XG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50IDwgaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogaGFuZGxlcnMuc2xpY2UoIGRlbGVnYXRlQ291bnQgKSB9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGhhbmRsZXJRdWV1ZTtcblx0fSxcblxuXHRhZGRQcm9wOiBmdW5jdGlvbiggbmFtZSwgaG9vayApIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIGpRdWVyeS5FdmVudC5wcm90b3R5cGUsIG5hbWUsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cblx0XHRcdGdldDogaXNGdW5jdGlvbiggaG9vayApID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaG9vayggdGhpcy5vcmlnaW5hbEV2ZW50ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vcmlnaW5hbEV2ZW50WyBuYW1lIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCB0aGlzLCBuYW1lLCB7XG5cdFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb25maWd1cmFibGU6IHRydWUsXG5cdFx0XHRcdFx0d3JpdGFibGU6IHRydWUsXG5cdFx0XHRcdFx0dmFsdWU6IHZhbHVlXG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0Zml4OiBmdW5jdGlvbiggb3JpZ2luYWxFdmVudCApIHtcblx0XHRyZXR1cm4gb3JpZ2luYWxFdmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRvcmlnaW5hbEV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIG9yaWdpbmFsRXZlbnQgKTtcblx0fSxcblxuXHRzcGVjaWFsOiB7XG5cdFx0bG9hZDoge1xuXG5cdFx0XHQvLyBQcmV2ZW50IHRyaWdnZXJlZCBpbWFnZS5sb2FkIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIHdpbmRvdy5sb2FkXG5cdFx0XHRub0J1YmJsZTogdHJ1ZVxuXHRcdH0sXG5cdFx0Y2xpY2s6IHtcblxuXHRcdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgdG8gZW5zdXJlIGNvcnJlY3Qgc3RhdGUgZm9yIGNoZWNrYWJsZSBpbnB1dHNcblx0XHRcdHNldHVwOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdC8vIGRhdGFQcml2LnNldCggZWwsIFwiY2xpY2tcIiwgLi4uIClcblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiwgcmV0dXJuVHJ1ZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJpbmcgYSBjbGlja1xuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHRsZXZlcmFnZU5hdGl2ZSggZWwsIFwiY2xpY2tcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH0sXG5cblx0XHRcdC8vIEZvciBjcm9zcy1icm93c2VyIGNvbnNpc3RlbmN5LCBzdXBwcmVzcyBuYXRpdmUgLmNsaWNrKCkgb24gbGlua3Ncblx0XHRcdC8vIEFsc28gcHJldmVudCBpdCBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlIGEgbGV2ZXJhZ2VkIG5hdGl2ZS1ldmVudCBzdGFja1xuXHRcdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldDtcblx0XHRcdFx0cmV0dXJuIHJjaGVja2FibGVUeXBlLnRlc3QoIHRhcmdldC50eXBlICkgJiZcblx0XHRcdFx0XHR0YXJnZXQuY2xpY2sgJiYgbm9kZU5hbWUoIHRhcmdldCwgXCJpbnB1dFwiICkgJiZcblx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRhcmdldCwgXCJjbGlja1wiICkgfHxcblx0XHRcdFx0XHRub2RlTmFtZSggdGFyZ2V0LCBcImFcIiApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRiZWZvcmV1bmxvYWQ6IHtcblx0XHRcdHBvc3REaXNwYXRjaDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMjArXG5cdFx0XHRcdC8vIEZpcmVmb3ggZG9lc24ndCBhbGVydCBpZiB0aGUgcmV0dXJuVmFsdWUgZmllbGQgaXMgbm90IHNldC5cblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgIT09IHVuZGVmaW5lZCAmJiBldmVudC5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdGV2ZW50Lm9yaWdpbmFsRXZlbnQucmV0dXJuVmFsdWUgPSBldmVudC5yZXN1bHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIEVuc3VyZSB0aGUgcHJlc2VuY2Ugb2YgYW4gZXZlbnQgbGlzdGVuZXIgdGhhdCBoYW5kbGVzIG1hbnVhbGx5LXRyaWdnZXJlZFxuLy8gc3ludGhldGljIGV2ZW50cyBieSBpbnRlcnJ1cHRpbmcgcHJvZ3Jlc3MgdW50aWwgcmVpbnZva2VkIGluIHJlc3BvbnNlIHRvXG4vLyAqbmF0aXZlKiBldmVudHMgdGhhdCBpdCBmaXJlcyBkaXJlY3RseSwgZW5zdXJpbmcgdGhhdCBzdGF0ZSBjaGFuZ2VzIGhhdmVcbi8vIGFscmVhZHkgb2NjdXJyZWQgYmVmb3JlIG90aGVyIGxpc3RlbmVycyBhcmUgaW52b2tlZC5cbmZ1bmN0aW9uIGxldmVyYWdlTmF0aXZlKCBlbCwgdHlwZSwgZXhwZWN0U3luYyApIHtcblxuXHQvLyBNaXNzaW5nIGV4cGVjdFN5bmMgaW5kaWNhdGVzIGEgdHJpZ2dlciBjYWxsLCB3aGljaCBtdXN0IGZvcmNlIHNldHVwIHRocm91Z2ggalF1ZXJ5LmV2ZW50LmFkZFxuXHRpZiAoICFleHBlY3RTeW5jICkge1xuXHRcdGlmICggZGF0YVByaXYuZ2V0KCBlbCwgdHlwZSApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwgcmV0dXJuVHJ1ZSApO1xuXHRcdH1cblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZWdpc3RlciB0aGUgY29udHJvbGxlciBhcyBhIHNwZWNpYWwgdW5pdmVyc2FsIGhhbmRsZXIgZm9yIGFsbCBldmVudCBuYW1lc3BhY2VzXG5cdGRhdGFQcml2LnNldCggZWwsIHR5cGUsIGZhbHNlICk7XG5cdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCB7XG5cdFx0bmFtZXNwYWNlOiBmYWxzZSxcblx0XHRoYW5kbGVyOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgbm90QXN5bmMsIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0Ly8gU2F2ZWQgZGF0YSBzaG91bGQgYmUgZmFsc2UgaW4gc3VjaCBjYXNlcywgYnV0IG1pZ2h0IGJlIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3Rcblx0XHRcdFx0Ly8gZnJvbSBhbiBhc3luYyBuYXRpdmUgaGFuZGxlciAoZ2gtNDM1MClcblx0XHRcdFx0aWYgKCAhc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgYXJndW1lbnRzIGZvciB1c2Ugd2hlbiBoYW5kbGluZyB0aGUgaW5uZXIgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdFx0Ly8gVGhlcmUgd2lsbCBhbHdheXMgYmUgYXQgbGVhc3Qgb25lIGFyZ3VtZW50IChhbiBldmVudCBvYmplY3QpLCBzbyB0aGlzIGFycmF5XG5cdFx0XHRcdFx0Ly8gd2lsbCBub3QgYmUgY29uZnVzZWQgd2l0aCBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0LlxuXHRcdFx0XHRcdHNhdmVkID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBzYXZlZCApO1xuXG5cdFx0XHRcdFx0Ly8gVHJpZ2dlciB0aGUgbmF0aXZlIGV2ZW50IGFuZCBjYXB0dXJlIGl0cyByZXN1bHRcblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHQvLyBmb2N1cygpIGFuZCBibHVyKCkgYXJlIGFzeW5jaHJvbm91c1xuXHRcdFx0XHRcdG5vdEFzeW5jID0gZXhwZWN0U3luYyggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCB8fCBub3RBc3luYyApIHtcblx0XHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0cmVzdWx0ID0ge307XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHRcdFx0Ly8gSW4gQ2hyb21lLCBpZiBhbiBlbGVtZW50IGhhdmluZyBhIGZvY3Vzb3V0IGhhbmRsZXIgaXMgYmx1cnJlZCBieVxuXHRcdFx0XHRcdFx0Ly8gY2xpY2tpbmcgb3V0c2lkZSBvZiBpdCwgaXQgaW52b2tlcyB0aGUgaGFuZGxlciBzeW5jaHJvbm91c2x5LiBJZlxuXHRcdFx0XHRcdFx0Ly8gdGhhdCBoYW5kbGVyIGNhbGxzIGAucmVtb3ZlKClgIG9uIHRoZSBlbGVtZW50LCB0aGUgZGF0YSBpcyBjbGVhcmVkLFxuXHRcdFx0XHRcdFx0Ly8gbGVhdmluZyBgcmVzdWx0YCB1bmRlZmluZWQuIFdlIG5lZWQgdG8gZ3VhcmQgYWdhaW5zdCB0aGlzLlxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCAmJiByZXN1bHQudmFsdWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoaXMgaXMgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IGZvciBhbiBldmVudCB3aXRoIGEgYnViYmxpbmcgc3Vycm9nYXRlXG5cdFx0XHRcdC8vIChmb2N1cyBvciBibHVyKSwgYXNzdW1lIHRoYXQgdGhlIHN1cnJvZ2F0ZSBhbHJlYWR5IHByb3BhZ2F0ZWQgZnJvbSB0cmlnZ2VyaW5nIHRoZVxuXHRcdFx0XHQvLyBuYXRpdmUgZXZlbnQgYW5kIHByZXZlbnQgdGhhdCBmcm9tIGhhcHBlbmluZyBhZ2FpbiBoZXJlLlxuXHRcdFx0XHQvLyBUaGlzIHRlY2huaWNhbGx5IGdldHMgdGhlIG9yZGVyaW5nIHdyb25nIHcuci50LiB0byBgLnRyaWdnZXIoKWAgKGluIHdoaWNoIHRoZVxuXHRcdFx0XHQvLyBidWJibGluZyBzdXJyb2dhdGUgcHJvcGFnYXRlcyAqYWZ0ZXIqIHRoZSBub24tYnViYmxpbmcgYmFzZSksIGJ1dCB0aGF0IHNlZW1zXG5cdFx0XHRcdC8vIGxlc3MgYmFkIHRoYW4gZHVwbGljYXRpb24uXG5cdFx0XHRcdH0gZWxzZSBpZiAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fSApLmRlbGVnYXRlVHlwZSApIHtcblx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIGlzIGEgbmF0aXZlIGV2ZW50IHRyaWdnZXJlZCBhYm92ZSwgZXZlcnl0aGluZyBpcyBub3cgaW4gb3JkZXJcblx0XHRcdC8vIEZpcmUgYW4gaW5uZXIgc3ludGhldGljIGV2ZW50IHdpdGggdGhlIG9yaWdpbmFsIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggc2F2ZWQubGVuZ3RoICkge1xuXG5cdFx0XHRcdC8vIC4uLmFuZCBjYXB0dXJlIHRoZSByZXN1bHRcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCB7XG5cdFx0XHRcdFx0dmFsdWU6IGpRdWVyeS5ldmVudC50cmlnZ2VyKFxuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcblx0XHRcdFx0XHRcdC8vIEV4dGVuZCB3aXRoIHRoZSBwcm90b3R5cGUgdG8gcmVzZXQgdGhlIGFib3ZlIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpXG5cdFx0XHRcdFx0XHRqUXVlcnkuZXh0ZW5kKCBzYXZlZFsgMCBdLCBqUXVlcnkuRXZlbnQucHJvdG90eXBlICksXG5cdFx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdFx0dGhpc1xuXHRcdFx0XHRcdClcblx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnRcblx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmpRdWVyeS5yZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBoYW5kbGUgKSB7XG5cblx0Ly8gVGhpcyBcImlmXCIgaXMgbmVlZGVkIGZvciBwbGFpbiBvYmplY3RzXG5cdGlmICggZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyICkge1xuXHRcdGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgaGFuZGxlICk7XG5cdH1cbn07XG5cbmpRdWVyeS5FdmVudCA9IGZ1bmN0aW9uKCBzcmMsIHByb3BzICkge1xuXG5cdC8vIEFsbG93IGluc3RhbnRpYXRpb24gd2l0aG91dCB0aGUgJ25ldycga2V5d29yZFxuXHRpZiAoICEoIHRoaXMgaW5zdGFuY2VvZiBqUXVlcnkuRXZlbnQgKSApIHtcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5FdmVudCggc3JjLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gRXZlbnQgb2JqZWN0XG5cdGlmICggc3JjICYmIHNyYy50eXBlICkge1xuXHRcdHRoaXMub3JpZ2luYWxFdmVudCA9IHNyYztcblx0XHR0aGlzLnR5cGUgPSBzcmMudHlwZTtcblxuXHRcdC8vIEV2ZW50cyBidWJibGluZyB1cCB0aGUgZG9jdW1lbnQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgcHJldmVudGVkXG5cdFx0Ly8gYnkgYSBoYW5kbGVyIGxvd2VyIGRvd24gdGhlIHRyZWU7IHJlZmxlY3QgdGhlIGNvcnJlY3QgdmFsdWUuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSBzcmMuZGVmYXVsdFByZXZlbnRlZCB8fFxuXHRcdFx0XHRzcmMuZGVmYXVsdFByZXZlbnRlZCA9PT0gdW5kZWZpbmVkICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5XG5cdFx0XHRcdHNyYy5yZXR1cm5WYWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0cmV0dXJuVHJ1ZSA6XG5cdFx0XHRyZXR1cm5GYWxzZTtcblxuXHRcdC8vIENyZWF0ZSB0YXJnZXQgcHJvcGVydGllc1xuXHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA8PTYgLSA3IG9ubHlcblx0XHQvLyBUYXJnZXQgc2hvdWxkIG5vdCBiZSBhIHRleHQgbm9kZSAoIzUwNCwgIzEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdID0ge1xuXG5cdFx0Ly8gVXRpbGl6ZSBuYXRpdmUgZXZlbnQgaWYgcG9zc2libGUgc28gYmx1ci9mb2N1cyBzZXF1ZW5jZSBpcyBjb3JyZWN0XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIGV4cGVjdFN5bmMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIGZhbHNlIHRvIGFsbG93IG5vcm1hbCBwcm9jZXNzaW5nIGluIHRoZSBjYWxsZXJcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdHRyaWdnZXI6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlclxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIG5vbi1mYWxzZSB0byBhbGxvdyBub3JtYWwgZXZlbnQtcGF0aCBwcm9wYWdhdGlvblxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHByZXNzIG5hdGl2ZSBmb2N1cyBvciBibHVyIGFzIGl0J3MgYWxyZWFkeSBiZWluZyBmaXJlZFxuXHRcdC8vIGluIGxldmVyYWdlTmF0aXZlLlxuXHRcdF9kZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblx0cmNsZWFuU2NyaXB0ID0gL15cXHMqPCEoPzpcXFtDREFUQVxcW3wtLSl8KD86XFxdXFxdfC0tKT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAoIzgwNzApLlxuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRub2RlID0gZnJhZ21lbnQ7XG5cblx0XHRcdFx0aWYgKCBpICE9PSBpTm9DbG9uZSApIHtcblx0XHRcdFx0XHRub2RlID0galF1ZXJ5LmNsb25lKCBub2RlLCB0cnVlLCB0cnVlICk7XG5cblx0XHRcdFx0XHQvLyBLZWVwIHJlZmVyZW5jZXMgdG8gY2xvbmVkIHNjcmlwdHMgZm9yIGxhdGVyIHJlc3RvcmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0XHRcdGpRdWVyeS5tZXJnZSggc2NyaXB0cywgZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjYWxsYmFjay5jYWxsKCBjb2xsZWN0aW9uWyBpIF0sIG5vZGUsIGkgKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBoYXNTY3JpcHRzICkge1xuXHRcdFx0XHRkb2MgPSBzY3JpcHRzWyBzY3JpcHRzLmxlbmd0aCAtIDEgXS5vd25lckRvY3VtZW50O1xuXG5cdFx0XHRcdC8vIFJlZW5hYmxlIHNjcmlwdHNcblx0XHRcdFx0alF1ZXJ5Lm1hcCggc2NyaXB0cywgcmVzdG9yZVNjcmlwdCApO1xuXG5cdFx0XHRcdC8vIEV2YWx1YXRlIGV4ZWN1dGFibGUgc2NyaXB0cyBvbiBmaXJzdCBkb2N1bWVudCBpbnNlcnRpb25cblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBoYXNTY3JpcHRzOyBpKysgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IHNjcmlwdHNbIGkgXTtcblx0XHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIG5vZGUudHlwZSB8fCBcIlwiICkgJiZcblx0XHRcdFx0XHRcdCFkYXRhUHJpdi5hY2Nlc3MoIG5vZGUsIFwiZ2xvYmFsRXZhbFwiICkgJiZcblx0XHRcdFx0XHRcdGpRdWVyeS5jb250YWlucyggZG9jLCBub2RlICkgKSB7XG5cblx0XHRcdFx0XHRcdGlmICggbm9kZS5zcmMgJiYgKCBub2RlLnR5cGUgfHwgXCJcIiApLnRvTG93ZXJDYXNlKCkgICE9PSBcIm1vZHVsZVwiICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE9wdGlvbmFsIEFKQVggZGVwZW5kZW5jeSwgYnV0IHdvbid0IHJ1biBzY3JpcHRzIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5Ll9ldmFsVXJsICYmICFub2RlLm5vTW9kdWxlICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5fZXZhbFVybCggbm9kZS5zcmMsIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5vbmNlOiBub2RlLm5vbmNlIHx8IG5vZGUuZ2V0QXR0cmlidXRlKCBcIm5vbmNlXCIgKVxuXHRcdFx0XHRcdFx0XHRcdH0sIGRvYyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IFNpenpsZSBoZXJlIGZvciBwZXJmb3JtYW5jZSByZWFzb25zOiBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICgjMTUwOTgsICMxNDE1MClcblx0XHQvLyBJRSB0aHJvd3Mgb24gZWxlbWVudHMgY3JlYXRlZCBpbiBwb3B1cHNcblx0XHQvLyBGRiBtZWFud2hpbGUgdGhyb3dzIG9uIGZyYW1lIGVsZW1lbnRzIHRocm91Z2ggXCJkZWZhdWx0Vmlldy5nZXRDb21wdXRlZFN0eWxlXCJcblx0XHR2YXIgdmlldyA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcblxuXHRcdGlmICggIXZpZXcgfHwgIXZpZXcub3BlbmVyICkge1xuXHRcdFx0dmlldyA9IHdpbmRvdztcblx0XHR9XG5cblx0XHRyZXR1cm4gdmlldy5nZXRDb21wdXRlZFN0eWxlKCBlbGVtICk7XG5cdH07XG5cbnZhciBzd2FwID0gZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGNhbGxiYWNrICkge1xuXHR2YXIgcmV0LCBuYW1lLFxuXHRcdG9sZCA9IHt9O1xuXG5cdC8vIFJlbWVtYmVyIHRoZSBvbGQgdmFsdWVzLCBhbmQgaW5zZXJ0IHRoZSBuZXcgb25lc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0b2xkWyBuYW1lIF0gPSBlbGVtLnN0eWxlWyBuYW1lIF07XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb3B0aW9uc1sgbmFtZSBdO1xuXHR9XG5cblx0cmV0ID0gY2FsbGJhY2suY2FsbCggZWxlbSApO1xuXG5cdC8vIFJldmVydCB0aGUgb2xkIHZhbHVlc1xuXHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0ZWxlbS5zdHlsZVsgbmFtZSBdID0gb2xkWyBuYW1lIF07XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufTtcblxuXG52YXIgcmJveFN0eWxlID0gbmV3IFJlZ0V4cCggY3NzRXhwYW5kLmpvaW4oIFwifFwiICksIFwiaVwiICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXG5cdC8vIEV4ZWN1dGluZyBib3RoIHBpeGVsUG9zaXRpb24gJiBib3hTaXppbmdSZWxpYWJsZSB0ZXN0cyByZXF1aXJlIG9ubHkgb25lIGxheW91dFxuXHQvLyBzbyB0aGV5J3JlIGV4ZWN1dGVkIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSB0aGUgc2Vjb25kIGNvbXB1dGF0aW9uLlxuXHRmdW5jdGlvbiBjb21wdXRlU3R5bGVUZXN0cygpIHtcblxuXHRcdC8vIFRoaXMgaXMgYSBzaW5nbGV0b24sIHdlIG5lZWQgdG8gZXhlY3V0ZSBpdCBvbmx5IG9uY2Vcblx0XHRpZiAoICFkaXYgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Y29udGFpbmVyLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7d2lkdGg6NjBweDtcIiArXG5cdFx0XHRcIm1hcmdpbi10b3A6MXB4O3BhZGRpbmc6MDtib3JkZXI6MFwiO1xuXHRcdGRpdi5zdHlsZS5jc3NUZXh0ID1cblx0XHRcdFwicG9zaXRpb246cmVsYXRpdmU7ZGlzcGxheTpibG9jaztib3gtc2l6aW5nOmJvcmRlci1ib3g7b3ZlcmZsb3c6c2Nyb2xsO1wiICtcblx0XHRcdFwibWFyZ2luOmF1dG87Ym9yZGVyOjFweDtwYWRkaW5nOjFweDtcIiArXG5cdFx0XHRcIndpZHRoOjYwJTt0b3A6MSVcIjtcblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGNvbnRhaW5lciApLmFwcGVuZENoaWxkKCBkaXYgKTtcblxuXHRcdHZhciBkaXZTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCBkaXYgKTtcblx0XHRwaXhlbFBvc2l0aW9uVmFsID0gZGl2U3R5bGUudG9wICE9PSBcIjElXCI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBGaXJlZm94IDw9MyAtIDQ0XG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0VmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5tYXJnaW5MZWZ0ICkgPT09IDEyO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgU2FmYXJpIDw9OS4xIC0gMTAuMSwgaU9TIDw9Ny4wIC0gOS4zXG5cdFx0Ly8gU29tZSBzdHlsZXMgY29tZSBiYWNrIHdpdGggcGVyY2VudGFnZSB2YWx1ZXMsIGV2ZW4gdGhvdWdoIHRoZXkgc2hvdWxkbid0XG5cdFx0ZGl2LnN0eWxlLnJpZ2h0ID0gXCI2MCVcIjtcblx0XHRwaXhlbEJveFN0eWxlc1ZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUucmlnaHQgKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHRcdC8vIERldGVjdCBtaXNyZXBvcnRpbmcgb2YgY29udGVudCBkaW1lbnNpb25zIGZvciBib3gtc2l6aW5nOmJvcmRlci1ib3ggZWxlbWVudHNcblx0XHRib3hTaXppbmdSZWxpYWJsZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUud2lkdGggKSA9PT0gMzY7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHQvLyBEZXRlY3Qgb3ZlcmZsb3c6c2Nyb2xsIHNjcmV3aW5lc3MgKGdoLTM2OTkpXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NjRcblx0XHQvLyBEb24ndCBnZXQgdHJpY2tlZCB3aGVuIHpvb20gYWZmZWN0cyBvZmZzZXRXaWR0aCAoZ2gtNDAyOSlcblx0XHRkaXYuc3R5bGUucG9zaXRpb24gPSBcImFic29sdXRlXCI7XG5cdFx0c2Nyb2xsYm94U2l6ZVZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2Lm9mZnNldFdpZHRoIC8gMyApID09PSAxMjtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggY29udGFpbmVyICk7XG5cblx0XHQvLyBOdWxsaWZ5IHRoZSBkaXYgc28gaXQgd291bGRuJ3QgYmUgc3RvcmVkIGluIHRoZSBtZW1vcnkgYW5kXG5cdFx0Ly8gaXQgd2lsbCBhbHNvIGJlIGEgc2lnbiB0aGF0IGNoZWNrcyBhbHJlYWR5IHBlcmZvcm1lZFxuXHRcdGRpdiA9IG51bGw7XG5cdH1cblxuXHRmdW5jdGlvbiByb3VuZFBpeGVsTWVhc3VyZXMoIG1lYXN1cmUgKSB7XG5cdFx0cmV0dXJuIE1hdGgucm91bmQoIHBhcnNlRmxvYXQoIG1lYXN1cmUgKSApO1xuXHR9XG5cblx0dmFyIHBpeGVsUG9zaXRpb25WYWwsIGJveFNpemluZ1JlbGlhYmxlVmFsLCBzY3JvbGxib3hTaXplVmFsLCBwaXhlbEJveFN0eWxlc1ZhbCxcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCwgcmVsaWFibGVNYXJnaW5MZWZ0VmFsLFxuXHRcdGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSxcblx0XHRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0Ly8gRmluaXNoIGVhcmx5IGluIGxpbWl0ZWQgKG5vbi1icm93c2VyKSBlbnZpcm9ubWVudHNcblx0aWYgKCAhZGl2LnN0eWxlICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gU3R5bGUgb2YgY2xvbmVkIGVsZW1lbnQgYWZmZWN0cyBzb3VyY2UgZWxlbWVudCBjbG9uZWQgKCM4OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm9yZGVyOjFweCBzb2xpZFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSGVpZ2h0IHNldCB0aHJvdWdoIGNzc1RleHQgZG9lcyBub3QgZ2V0IGFwcGxpZWQuXG5cdFx0XHRcdC8vIENvbXB1dGVkIGhlaWdodCB0aGVuIGNvbWVzIGJhY2sgYXMgMC5cblx0XHRcdFx0dHIuc3R5bGUuaGVpZ2h0ID0gXCIxcHhcIjtcblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5oZWlnaHQgPSBcIjlweFwiO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgOCBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEluIG91ciBib2R5QmFja2dyb3VuZC5odG1sIGlmcmFtZSxcblx0XHRcdFx0Ly8gZGlzcGxheSBmb3IgYWxsIGRpdiBlbGVtZW50cyBpcyBzZXQgdG8gXCJpbmxpbmVcIixcblx0XHRcdFx0Ly8gd2hpY2ggY2F1c2VzIGEgcHJvYmxlbSBvbmx5IGluIEFuZHJvaWQgOCBDaHJvbWUgODYuXG5cdFx0XHRcdC8vIEVuc3VyaW5nIHRoZSBkaXYgaXMgZGlzcGxheTogYmxvY2tcblx0XHRcdFx0Ly8gZ2V0cyBhcm91bmQgdGhpcyBpc3N1ZS5cblx0XHRcdFx0dHJDaGlsZC5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudFxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdGFibGUgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHIgKVxuXHRcdFx0XHRcdC5hcHBlbmRDaGlsZCggdHJDaGlsZCApO1xuXG5cdFx0XHRcdHRyU3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggdHIgKTtcblx0XHRcdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPSAoIHBhcnNlSW50KCB0clN0eWxlLmhlaWdodCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyVG9wV2lkdGgsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlckJvdHRvbVdpZHRoLCAxMCApICkgPT09IHRyLm9mZnNldEhlaWdodDtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIHRhYmxlICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVUckRpbWVuc2lvbnNWYWw7XG5cdFx0fVxuXHR9ICk7XG59ICkoKTtcblxuXG5mdW5jdGlvbiBjdXJDU1MoIGVsZW0sIG5hbWUsIGNvbXB1dGVkICkge1xuXHR2YXIgd2lkdGgsIG1pbldpZHRoLCBtYXhXaWR0aCwgcmV0LFxuXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA1MStcblx0XHQvLyBSZXRyaWV2aW5nIHN0eWxlIGJlZm9yZSBjb21wdXRlZCBzb21laG93XG5cdFx0Ly8gZml4ZXMgYW4gaXNzdWUgd2l0aCBnZXR0aW5nIHdyb25nIHZhbHVlc1xuXHRcdC8vIG9uIGRldGFjaGVkIGVsZW1lbnRzXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdGNvbXB1dGVkID0gY29tcHV0ZWQgfHwgZ2V0U3R5bGVzKCBlbGVtICk7XG5cblx0Ly8gZ2V0UHJvcGVydHlWYWx1ZSBpcyBuZWVkZWQgZm9yOlxuXHQvLyAgIC5jc3MoJ2ZpbHRlcicpIChJRSA5IG9ubHksICMxMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoIzMxNDQpXG5cdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0cmN1c3RvbVByb3AgPSAvXi0tLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDA7XG5cblx0Ly8gQWRqdXN0bWVudCBtYXkgbm90IGJlIG5lY2Vzc2FyeVxuXHRpZiAoIGJveCA9PT0gKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApICkge1xuXHRcdHJldHVybiAwO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgNDsgaSArPSAyICkge1xuXG5cdFx0Ly8gQm90aCBib3ggbW9kZWxzIGV4Y2x1ZGUgbWFyZ2luXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGE7XG59XG5cbmZ1bmN0aW9uIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKSB7XG5cblx0Ly8gU3RhcnQgd2l0aCBjb21wdXRlZCBzdHlsZVxuXHR2YXIgc3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC00MzIyKS5cblx0XHQvLyBGYWtlIGNvbnRlbnQtYm94IHVudGlsIHdlIGtub3cgaXQncyBuZWVkZWQgdG8ga25vdyB0aGUgdHJ1ZSB2YWx1ZS5cblx0XHRib3hTaXppbmdOZWVkZWQgPSAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpIHx8IGV4dHJhLFxuXHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBpc0JvcmRlckJveCxcblxuXHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgZGltZW5zaW9uLCBzdHlsZXMgKSxcblx0XHRvZmZzZXRQcm9wID0gXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKTtcblxuXHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0Ly8gUmV0dXJuIGEgY29uZm91bmRpbmcgbm9uLXBpeGVsIHZhbHVlIG9yIGZlaWduIGlnbm9yYW5jZSwgYXMgYXBwcm9wcmlhdGUuXG5cdGlmICggcm51bW5vbnB4LnRlc3QoIHZhbCApICkge1xuXHRcdGlmICggIWV4dHJhICkge1xuXHRcdFx0cmV0dXJuIHZhbDtcblx0XHR9XG5cdFx0dmFsID0gXCJhdXRvXCI7XG5cdH1cblxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIFVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIHdoZW4gYm94IHNpemluZyBpcyB1bnJlbGlhYmxlLlxuXHQvLyBJbiB0aG9zZSBjYXNlcywgdGhlIGNvbXB1dGVkIHZhbHVlIGNhbiBiZSB0cnVzdGVkIHRvIGJlIGJvcmRlci1ib3guXG5cdGlmICggKCAhc3VwcG9ydC5ib3hTaXppbmdSZWxpYWJsZSgpICYmIGlzQm9yZGVyQm94IHx8XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMCAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gSW50ZXJlc3RpbmdseSwgaW4gc29tZSBjYXNlcyBJRSA5IGRvZXNuJ3Qgc3VmZmVyIGZyb20gdGhpcyBpc3N1ZS5cblx0XHQhc3VwcG9ydC5yZWxpYWJsZVRyRGltZW5zaW9ucygpICYmIG5vZGVOYW1lKCBlbGVtLCBcInRyXCIgKSB8fFxuXG5cdFx0Ly8gRmFsbCBiYWNrIHRvIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCB3aGVuIHZhbHVlIGlzIFwiYXV0b1wiXG5cdFx0Ly8gVGhpcyBoYXBwZW5zIGZvciBpbmxpbmUgZWxlbWVudHMgd2l0aCBubyBleHBsaWNpdCBzZXR0aW5nIChnaC0zNTcxKVxuXHRcdHZhbCA9PT0gXCJhdXRvXCIgfHxcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgLSA0LjMgb25seVxuXHRcdC8vIEFsc28gdXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3IgbWlzcmVwb3J0ZWQgaW5saW5lIGRpbWVuc2lvbnMgKGdoLTM2MDIpXG5cdFx0IXBhcnNlRmxvYXQoIHZhbCApICYmIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiaW5saW5lXCIgKSAmJlxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHZpc2libGUgJiBjb25uZWN0ZWRcblx0XHRlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXG5cdFx0aXNCb3JkZXJCb3ggPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiO1xuXG5cdFx0Ly8gV2hlcmUgYXZhaWxhYmxlLCBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgYXBwcm94aW1hdGUgYm9yZGVyIGJveCBkaW1lbnNpb25zLlxuXHRcdC8vIFdoZXJlIG5vdCBhdmFpbGFibGUgKGUuZy4sIFNWRyksIGFzc3VtZSB1bnJlbGlhYmxlIGJveC1zaXppbmcgYW5kIGludGVycHJldCB0aGVcblx0XHQvLyByZXRyaWV2ZWQgdmFsdWUgYXMgYSBjb250ZW50IGJveCBkaW1lbnNpb24uXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IG9mZnNldFByb3AgaW4gZWxlbTtcblx0XHRpZiAoIHZhbHVlSXNCb3JkZXJCb3ggKSB7XG5cdFx0XHR2YWwgPSBlbGVtWyBvZmZzZXRQcm9wIF07XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIFwiXCIgYW5kIGF1dG9cblx0dmFsID0gcGFyc2VGbG9hdCggdmFsICkgfHwgMDtcblxuXHQvLyBBZGp1c3QgZm9yIHRoZSBlbGVtZW50J3MgYm94IG1vZGVsXG5cdHJldHVybiAoIHZhbCArXG5cdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0ZWxlbSxcblx0XHRcdGRpbWVuc2lvbixcblx0XHRcdGV4dHJhIHx8ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSxcblx0XHRcdHZhbHVlSXNCb3JkZXJCb3gsXG5cdFx0XHRzdHlsZXMsXG5cblx0XHRcdC8vIFByb3ZpZGUgdGhlIGN1cnJlbnQgY29tcHV0ZWQgc2l6ZSB0byByZXF1ZXN0IHNjcm9sbCBndXR0ZXIgY2FsY3VsYXRpb24gKGdoLTM1ODkpXG5cdFx0XHR2YWxcblx0XHQpXG5cdCkgKyBcInB4XCI7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBBZGQgaW4gc3R5bGUgcHJvcGVydHkgaG9va3MgZm9yIG92ZXJyaWRpbmcgdGhlIGRlZmF1bHRcblx0Ly8gYmVoYXZpb3Igb2YgZ2V0dGluZyBhbmQgc2V0dGluZyBhIHN0eWxlIHByb3BlcnR5XG5cdGNzc0hvb2tzOiB7XG5cdFx0b3BhY2l0eToge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBXZSBzaG91bGQgYWx3YXlzIGdldCBhIG51bWJlciBiYWNrIGZyb20gb3BhY2l0eVxuXHRcdFx0XHRcdHZhciByZXQgPSBjdXJDU1MoIGVsZW0sIFwib3BhY2l0eVwiICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJldCA9PT0gXCJcIiA/IFwiMVwiIDogcmV0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdC8vIERvbid0IGF1dG9tYXRpY2FsbHkgYWRkIFwicHhcIiB0byB0aGVzZSBwb3NzaWJseS11bml0bGVzcyBwcm9wZXJ0aWVzXG5cdGNzc051bWJlcjoge1xuXHRcdFwiYW5pbWF0aW9uSXRlcmF0aW9uQ291bnRcIjogdHJ1ZSxcblx0XHRcImNvbHVtbkNvdW50XCI6IHRydWUsXG5cdFx0XCJmaWxsT3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwiZmxleEdyb3dcIjogdHJ1ZSxcblx0XHRcImZsZXhTaHJpbmtcIjogdHJ1ZSxcblx0XHRcImZvbnRXZWlnaHRcIjogdHJ1ZSxcblx0XHRcImdyaWRBcmVhXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uRW5kXCI6IHRydWUsXG5cdFx0XCJncmlkQ29sdW1uU3RhcnRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dFbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRSb3dTdGFydFwiOiB0cnVlLFxuXHRcdFwibGluZUhlaWdodFwiOiB0cnVlLFxuXHRcdFwib3BhY2l0eVwiOiB0cnVlLFxuXHRcdFwib3JkZXJcIjogdHJ1ZSxcblx0XHRcIm9ycGhhbnNcIjogdHJ1ZSxcblx0XHRcIndpZG93c1wiOiB0cnVlLFxuXHRcdFwiekluZGV4XCI6IHRydWUsXG5cdFx0XCJ6b29tXCI6IHRydWVcblx0fSxcblxuXHQvLyBBZGQgaW4gcHJvcGVydGllcyB3aG9zZSBuYW1lcyB5b3Ugd2lzaCB0byBmaXggYmVmb3JlXG5cdC8vIHNldHRpbmcgb3IgZ2V0dGluZyB0aGUgdmFsdWVcblx0Y3NzUHJvcHM6IHt9LFxuXG5cdC8vIEdldCBhbmQgc2V0IHRoZSBzdHlsZSBwcm9wZXJ0eSBvbiBhIERPTSBOb2RlXG5cdHN0eWxlOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUsIGV4dHJhICkge1xuXG5cdFx0Ly8gRG9uJ3Qgc2V0IHN0eWxlcyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCAhZWxlbSB8fCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggfHwgIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lXG5cdFx0dmFyIHJldCwgdHlwZSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApLFxuXHRcdFx0c3R5bGUgPSBlbGVtLnN0eWxlO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gcXVlcnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBHZXRzIGhvb2sgZm9yIHRoZSBwcmVmaXhlZCB2ZXJzaW9uLCB0aGVuIHVucHJlZml4ZWQgdmVyc2lvblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgd2UncmUgc2V0dGluZyBhIHZhbHVlXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZTtcblxuXHRcdFx0Ly8gQ29udmVydCBcIis9XCIgb3IgXCItPVwiIHRvIHJlbGF0aXZlIG51bWJlcnMgKCM3MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgIzkyMzdcblx0XHRcdFx0dHlwZSA9IFwibnVtYmVyXCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IG51bGwgYW5kIE5hTiB2YWx1ZXMgYXJlbid0IHNldCAoIzcxMTYpXG5cdFx0XHRpZiAoIHZhbHVlID09IG51bGwgfHwgdmFsdWUgIT09IHZhbHVlICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgbnVtYmVyIHdhcyBwYXNzZWQgaW4sIGFkZCB0aGUgdW5pdCAoZXhjZXB0IGZvciBjZXJ0YWluIENTUyBwcm9wZXJ0aWVzKVxuXHRcdFx0Ly8gVGhlIGlzQ3VzdG9tUHJvcCBjaGVjayBjYW4gYmUgcmVtb3ZlZCBpbiBqUXVlcnkgNC4wIHdoZW4gd2Ugb25seSBhdXRvLWFwcGVuZFxuXHRcdFx0Ly8gXCJweFwiIHRvIGEgZmV3IGhhcmRjb2RlZCB2YWx1ZXMuXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwibnVtYmVyXCIgJiYgIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0dmFsdWUgKz0gcmV0ICYmIHJldFsgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgb3JpZ05hbWUgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gYmFja2dyb3VuZC0qIHByb3BzIGFmZmVjdCBvcmlnaW5hbCBjbG9uZSdzIHZhbHVlc1xuXHRcdFx0aWYgKCAhc3VwcG9ydC5jbGVhckNsb25lU3R5bGUgJiYgdmFsdWUgPT09IFwiXCIgJiYgbmFtZS5pbmRleE9mKCBcImJhY2tncm91bmRcIiApID09PSAwICkge1xuXHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gXCJpbmhlcml0XCI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQsIHVzZSB0aGF0IHZhbHVlLCBvdGhlcndpc2UganVzdCBzZXQgdGhlIHNwZWNpZmllZCB2YWx1ZVxuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8XG5cdFx0XHRcdCggdmFsdWUgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRpZiAoIGlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdFx0XHRzdHlsZS5zZXRQcm9wZXJ0eSggbmFtZSwgdmFsdWUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdHlsZVsgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBub24tY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBmYWxzZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIGp1c3QgZ2V0IHRoZSB2YWx1ZSBmcm9tIHRoZSBzdHlsZSBvYmplY3Rcblx0XHRcdHJldHVybiBzdHlsZVsgbmFtZSBdO1xuXHRcdH1cblx0fSxcblxuXHRjc3M6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBleHRyYSwgc3R5bGVzICkge1xuXHRcdHZhciB2YWwsIG51bSwgaG9va3MsXG5cdFx0XHRvcmlnTmFtZSA9IGNhbWVsQ2FzZSggbmFtZSApLFxuXHRcdFx0aXNDdXN0b21Qcm9wID0gcmN1c3RvbVByb3AudGVzdCggbmFtZSApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgd2UncmUgd29ya2luZyB3aXRoIHRoZSByaWdodCBuYW1lLiBXZSBkb24ndFxuXHRcdC8vIHdhbnQgdG8gbW9kaWZ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gVHJ5IHByZWZpeGVkIG5hbWUgZm9sbG93ZWQgYnkgdGhlIHVucHJlZml4ZWQgbmFtZVxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF0gfHwgalF1ZXJ5LmNzc0hvb2tzWyBvcmlnTmFtZSBdO1xuXG5cdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWwgPSBob29rcy5nZXQoIGVsZW0sIHRydWUsIGV4dHJhICk7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXJ3aXNlLCBpZiBhIHdheSB0byBnZXQgdGhlIGNvbXB1dGVkIHZhbHVlIGV4aXN0cywgdXNlIHRoYXRcblx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBuYW1lLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IFwibm9ybWFsXCIgdG8gY29tcHV0ZWQgdmFsdWVcblx0XHRpZiAoIHZhbCA9PT0gXCJub3JtYWxcIiAmJiBuYW1lIGluIGNzc05vcm1hbFRyYW5zZm9ybSApIHtcblx0XHRcdHZhbCA9IGNzc05vcm1hbFRyYW5zZm9ybVsgbmFtZSBdO1xuXHRcdH1cblxuXHRcdC8vIE1ha2UgbnVtZXJpYyBpZiBmb3JjZWQgb3IgYSBxdWFsaWZpZXIgd2FzIHByb3ZpZGVkIGFuZCB2YWwgbG9va3MgbnVtZXJpY1xuXHRcdGlmICggZXh0cmEgPT09IFwiXCIgfHwgZXh0cmEgKSB7XG5cdFx0XHRudW0gPSBwYXJzZUZsb2F0KCB2YWwgKTtcblx0XHRcdHJldHVybiBleHRyYSA9PT0gdHJ1ZSB8fCBpc0Zpbml0ZSggbnVtICkgPyBudW0gfHwgMCA6IHZhbDtcblx0XHR9XG5cblx0XHRyZXR1cm4gdmFsO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiaGVpZ2h0XCIsIFwid2lkdGhcIiBdLCBmdW5jdGlvbiggX2ksIGRpbWVuc2lvbiApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBkaW1lbnNpb24gXSA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCwgZXh0cmEgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdC8vIENlcnRhaW4gZWxlbWVudHMgY2FuIGhhdmUgZGltZW5zaW9uIGluZm8gaWYgd2UgaW52aXNpYmx5IHNob3cgdGhlbVxuXHRcdFx0XHQvLyBidXQgaXQgbXVzdCBoYXZlIGEgY3VycmVudCBkaXNwbGF5IHN0eWxlIHRoYXQgd291bGQgYmVuZWZpdFxuXHRcdFx0XHRyZXR1cm4gcmRpc3BsYXlzd2FwLnRlc3QoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICkgKSAmJlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrXG5cdFx0XHRcdFx0Ly8gVGFibGUgY29sdW1ucyBpbiBTYWZhcmkgaGF2ZSBub24temVybyBvZmZzZXRXaWR0aCAmIHplcm9cblx0XHRcdFx0XHQvLyBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCB1bmxlc3MgZGlzcGxheSBpcyBjaGFuZ2VkLlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdFx0XHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGEgZGlzY29ubmVjdGVkIG5vZGVcblx0XHRcdFx0XHQvLyBpbiBJRSB0aHJvd3MgYW4gZXJyb3IuXG5cdFx0XHRcdFx0KCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCB8fCAhZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCApID9cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCBjc3NTaG93LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBleHRyYSApIHtcblx0XHRcdHZhciBtYXRjaGVzLFxuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdFx0XHQvLyBPbmx5IHJlYWQgc3R5bGVzLnBvc2l0aW9uIGlmIHRoZSB0ZXN0IGhhcyBhIGNoYW5jZSB0byBmYWlsXG5cdFx0XHRcdC8vIHRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3cuXG5cdFx0XHRcdHNjcm9sbGJveFNpemVCdWdneSA9ICFzdXBwb3J0LnNjcm9sbGJveFNpemUoKSAmJlxuXHRcdFx0XHRcdHN0eWxlcy5wb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiLFxuXG5cdFx0XHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTM5OTEpXG5cdFx0XHRcdGJveFNpemluZ05lZWRlZCA9IHNjcm9sbGJveFNpemVCdWdneSB8fCBleHRyYSxcblx0XHRcdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImJveFNpemluZ1wiLCBmYWxzZSwgc3R5bGVzICkgPT09IFwiYm9yZGVyLWJveFwiLFxuXHRcdFx0XHRzdWJ0cmFjdCA9IGV4dHJhID9cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRcdFx0XHRlbGVtLFxuXHRcdFx0XHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0XHRcdFx0ZXh0cmEsXG5cdFx0XHRcdFx0XHRpc0JvcmRlckJveCxcblx0XHRcdFx0XHRcdHN0eWxlc1xuXHRcdFx0XHRcdCkgOlxuXHRcdFx0XHRcdDA7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHVucmVsaWFibGUgYm9yZGVyLWJveCBkaW1lbnNpb25zIGJ5IGNvbXBhcmluZyBvZmZzZXQqIHRvIGNvbXB1dGVkIGFuZFxuXHRcdFx0Ly8gZmFraW5nIGEgY29udGVudC1ib3ggdG8gZ2V0IGJvcmRlciBhbmQgcGFkZGluZyAoZ2gtMzY5OSlcblx0XHRcdGlmICggaXNCb3JkZXJCb3ggJiYgc2Nyb2xsYm94U2l6ZUJ1Z2d5ICkge1xuXHRcdFx0XHRzdWJ0cmFjdCAtPSBNYXRoLmNlaWwoXG5cdFx0XHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdFx0XHRwYXJzZUZsb2F0KCBzdHlsZXNbIGRpbWVuc2lvbiBdICkgLVxuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBcImJvcmRlclwiLCBmYWxzZSwgc3R5bGVzICkgLVxuXHRcdFx0XHRcdDAuNVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IHRvIHBpeGVscyBpZiB2YWx1ZSBhZGp1c3RtZW50IGlzIG5lZWRlZFxuXHRcdFx0aWYgKCBzdWJ0cmFjdCAmJiAoIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJlxuXHRcdFx0XHQoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSAhPT0gXCJweFwiICkge1xuXG5cdFx0XHRcdGVsZW0uc3R5bGVbIGRpbWVuc2lvbiBdID0gdmFsdWU7XG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5LmNzcyggZWxlbSwgZGltZW5zaW9uICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzZXRQb3NpdGl2ZU51bWJlciggZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICk7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuY3NzSG9va3MubWFyZ2luTGVmdCA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5yZWxpYWJsZU1hcmdpbkxlZnQsXG5cdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0cmV0dXJuICggcGFyc2VGbG9hdCggY3VyQ1NTKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiApICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0IC1cblx0XHRcdFx0XHRzd2FwKCBlbGVtLCB7IG1hcmdpbkxlZnQ6IDAgfSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuXHRcdFx0XHRcdH0gKVxuXHRcdFx0KSArIFwicHhcIjtcblx0XHR9XG5cdH1cbik7XG5cbi8vIFRoZXNlIGhvb2tzIGFyZSB1c2VkIGJ5IGFuaW1hdGUgdG8gZXhwYW5kIHByb3BlcnRpZXNcbmpRdWVyeS5lYWNoKCB7XG5cdG1hcmdpbjogXCJcIixcblx0cGFkZGluZzogXCJcIixcblx0Ym9yZGVyOiBcIldpZHRoXCJcbn0sIGZ1bmN0aW9uKCBwcmVmaXgsIHN1ZmZpeCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXSA9IHtcblx0XHRleHBhbmQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBpID0gMCxcblx0XHRcdFx0ZXhwYW5kZWQgPSB7fSxcblxuXHRcdFx0XHQvLyBBc3N1bWVzIGEgc2luZ2xlIG51bWJlciBpZiBub3QgYSBzdHJpbmdcblx0XHRcdFx0cGFydHMgPSB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgPyB2YWx1ZS5zcGxpdCggXCIgXCIgKSA6IFsgdmFsdWUgXTtcblxuXHRcdFx0Zm9yICggOyBpIDwgNDsgaSsrICkge1xuXHRcdFx0XHRleHBhbmRlZFsgcHJlZml4ICsgY3NzRXhwYW5kWyBpIF0gKyBzdWZmaXggXSA9XG5cdFx0XHRcdFx0cGFydHNbIGkgXSB8fCBwYXJ0c1sgaSAtIDIgXSB8fCBwYXJ0c1sgMCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZXhwYW5kZWQ7XG5cdFx0fVxuXHR9O1xuXG5cdGlmICggcHJlZml4ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0uc2V0ID0gc2V0UG9zaXRpdmVOdW1iZXI7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRjc3M6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgc3R5bGVzLCBsZW4sXG5cdFx0XHRcdG1hcCA9IHt9LFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCBuYW1lICkgKSB7XG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApO1xuXHRcdFx0XHRsZW4gPSBuYW1lLmxlbmd0aDtcblxuXHRcdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRtYXBbIG5hbWVbIGkgXSBdID0galF1ZXJ5LmNzcyggZWxlbSwgbmFtZVsgaSBdLCBmYWxzZSwgc3R5bGVzICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbWFwO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSwgdmFsdWUgKSA6XG5cdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIG5hbWUgKTtcblx0XHR9LCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fVxufSApO1xuXG5cbmZ1bmN0aW9uIFR3ZWVuKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApIHtcblx0cmV0dXJuIG5ldyBUd2Vlbi5wcm90b3R5cGUuaW5pdCggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKTtcbn1cbmpRdWVyeS5Ud2VlbiA9IFR3ZWVuO1xuXG5Ud2Vlbi5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBUd2Vlbixcblx0aW5pdDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nLCB1bml0ICkge1xuXHRcdHRoaXMuZWxlbSA9IGVsZW07XG5cdFx0dGhpcy5wcm9wID0gcHJvcDtcblx0XHR0aGlzLmVhc2luZyA9IGVhc2luZyB8fCBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0O1xuXHRcdHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG5cdFx0dGhpcy5zdGFydCA9IHRoaXMubm93ID0gdGhpcy5jdXIoKTtcblx0XHR0aGlzLmVuZCA9IGVuZDtcblx0XHR0aGlzLnVuaXQgPSB1bml0IHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApO1xuXHR9LFxuXHRjdXI6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRyZXR1cm4gaG9va3MgJiYgaG9va3MuZ2V0ID9cblx0XHRcdGhvb2tzLmdldCggdGhpcyApIDpcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5nZXQoIHRoaXMgKTtcblx0fSxcblx0cnVuOiBmdW5jdGlvbiggcGVyY2VudCApIHtcblx0XHR2YXIgZWFzZWQsXG5cdFx0XHRob29rcyA9IFR3ZWVuLnByb3BIb29rc1sgdGhpcy5wcm9wIF07XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5kdXJhdGlvbiApIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBqUXVlcnkuZWFzaW5nWyB0aGlzLmVhc2luZyBdKFxuXHRcdFx0XHRwZXJjZW50LCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKiBwZXJjZW50LCAwLCAxLCB0aGlzLm9wdGlvbnMuZHVyYXRpb25cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMucG9zID0gZWFzZWQgPSBwZXJjZW50O1xuXHRcdH1cblx0XHR0aGlzLm5vdyA9ICggdGhpcy5lbmQgLSB0aGlzLnN0YXJ0ICkgKiBlYXNlZCArIHRoaXMuc3RhcnQ7XG5cblx0XHRpZiAoIHRoaXMub3B0aW9ucy5zdGVwICkge1xuXHRcdFx0dGhpcy5vcHRpb25zLnN0ZXAuY2FsbCggdGhpcy5lbGVtLCB0aGlzLm5vdywgdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgaG9va3Muc2V0ICkge1xuXHRcdFx0aG9va3Muc2V0KCB0aGlzICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdFR3ZWVuLnByb3BIb29rcy5fZGVmYXVsdC5zZXQoIHRoaXMgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn07XG5cblR3ZWVuLnByb3RvdHlwZS5pbml0LnByb3RvdHlwZSA9IFR3ZWVuLnByb3RvdHlwZTtcblxuVHdlZW4ucHJvcEhvb2tzID0ge1xuXHRfZGVmYXVsdDoge1xuXHRcdGdldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdFx0dmFyIHJlc3VsdDtcblxuXHRcdFx0Ly8gVXNlIGEgcHJvcGVydHkgb24gdGhlIGVsZW1lbnQgZGlyZWN0bHkgd2hlbiBpdCBpcyBub3QgYSBET00gZWxlbWVudCxcblx0XHRcdC8vIG9yIHdoZW4gdGhlcmUgaXMgbm8gbWF0Y2hpbmcgc3R5bGUgcHJvcGVydHkgdGhhdCBleGlzdHMuXG5cdFx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgIT09IDEgfHxcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdICE9IG51bGwgJiYgdHdlZW4uZWxlbS5zdHlsZVsgdHdlZW4ucHJvcCBdID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiB0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF07XG5cdFx0XHR9XG5cblx0XHRcdC8vIFBhc3NpbmcgYW4gZW1wdHkgc3RyaW5nIGFzIGEgM3JkIHBhcmFtZXRlciB0byAuY3NzIHdpbGwgYXV0b21hdGljYWxseVxuXHRcdFx0Ly8gYXR0ZW1wdCBhIHBhcnNlRmxvYXQgYW5kIGZhbGxiYWNrIHRvIGEgc3RyaW5nIGlmIHRoZSBwYXJzZSBmYWlscy5cblx0XHRcdC8vIFNpbXBsZSB2YWx1ZXMgc3VjaCBhcyBcIjEwcHhcIiBhcmUgcGFyc2VkIHRvIEZsb2F0O1xuXHRcdFx0Ly8gY29tcGxleCB2YWx1ZXMgc3VjaCBhcyBcInJvdGF0ZSgxcmFkKVwiIGFyZSByZXR1cm5lZCBhcy1pcy5cblx0XHRcdHJlc3VsdCA9IGpRdWVyeS5jc3MoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIFwiXCIgKTtcblxuXHRcdFx0Ly8gRW1wdHkgc3RyaW5ncywgbnVsbCwgdW5kZWZpbmVkIGFuZCBcImF1dG9cIiBhcmUgY29udmVydGVkIHRvIDAuXG5cdFx0XHRyZXR1cm4gIXJlc3VsdCB8fCByZXN1bHQgPT09IFwiYXV0b1wiID8gMCA6IHJlc3VsdDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXG5cdFx0XHQvLyBVc2Ugc3RlcCBob29rIGZvciBiYWNrIGNvbXBhdC5cblx0XHRcdC8vIFVzZSBjc3NIb29rIGlmIGl0cyB0aGVyZS5cblx0XHRcdC8vIFVzZSAuc3R5bGUgaWYgYXZhaWxhYmxlIGFuZCB1c2UgcGxhaW4gcHJvcGVydGllcyB3aGVyZSBhdmFpbGFibGUuXG5cdFx0XHRpZiAoIGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS5meC5zdGVwWyB0d2Vlbi5wcm9wIF0oIHR3ZWVuICk7XG5cdFx0XHR9IGVsc2UgaWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0alF1ZXJ5LmNzc0hvb2tzWyB0d2Vlbi5wcm9wIF0gfHxcblx0XHRcdFx0XHR0d2Vlbi5lbGVtLnN0eWxlWyBmaW5hbFByb3BOYW1lKCB0d2Vlbi5wcm9wICkgXSAhPSBudWxsICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5zdHlsZSggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgdHdlZW4ubm93ICsgdHdlZW4udW5pdCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIFBhbmljIGJhc2VkIGFwcHJvYWNoIHRvIHNldHRpbmcgdGhpbmdzIG9uIGRpc2Nvbm5lY3RlZCBub2Rlc1xuVHdlZW4ucHJvcEhvb2tzLnNjcm9sbFRvcCA9IFR3ZWVuLnByb3BIb29rcy5zY3JvbGxMZWZ0ID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgJiYgdHdlZW4uZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0dHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdID0gdHdlZW4ubm93O1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmVhc2luZyA9IHtcblx0bGluZWFyOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gcDtcblx0fSxcblx0c3dpbmc6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiAwLjUgLSBNYXRoLmNvcyggcCAqIE1hdGguUEkgKSAvIDI7XG5cdH0sXG5cdF9kZWZhdWx0OiBcInN3aW5nXCJcbn07XG5cbmpRdWVyeS5meCA9IFR3ZWVuLnByb3RvdHlwZS5pbml0O1xuXG4vLyBCYWNrIGNvbXBhdCA8MS44IGV4dGVuc2lvbiBwb2ludFxualF1ZXJ5LmZ4LnN0ZXAgPSB7fTtcblxuXG5cblxudmFyXG5cdGZ4Tm93LCBpblByb2dyZXNzLFxuXHRyZnh0eXBlcyA9IC9eKD86dG9nZ2xlfHNob3d8aGlkZSkkLyxcblx0cnJ1biA9IC9xdWV1ZUhvb2tzJC87XG5cbmZ1bmN0aW9uIHNjaGVkdWxlKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5oaWRkZW4gPT09IGZhbHNlICYmIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgKSB7XG5cdFx0XHR3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCBzY2hlZHVsZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR3aW5kb3cuc2V0VGltZW91dCggc2NoZWR1bGUsIGpRdWVyeS5meC5pbnRlcnZhbCApO1xuXHRcdH1cblxuXHRcdGpRdWVyeS5meC50aWNrKCk7XG5cdH1cbn1cblxuLy8gQW5pbWF0aW9ucyBjcmVhdGVkIHN5bmNocm9ub3VzbHkgd2lsbCBydW4gc3luY2hyb25vdXNseVxuZnVuY3Rpb24gY3JlYXRlRnhOb3coKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRmeE5vdyA9IHVuZGVmaW5lZDtcblx0fSApO1xuXHRyZXR1cm4gKCBmeE5vdyA9IERhdGUubm93KCkgKTtcbn1cblxuLy8gR2VuZXJhdGUgcGFyYW1ldGVycyB0byBjcmVhdGUgYSBzdGFuZGFyZCBhbmltYXRpb25cbmZ1bmN0aW9uIGdlbkZ4KCB0eXBlLCBpbmNsdWRlV2lkdGggKSB7XG5cdHZhciB3aGljaCxcblx0XHRpID0gMCxcblx0XHRhdHRycyA9IHsgaGVpZ2h0OiB0eXBlIH07XG5cblx0Ly8gSWYgd2UgaW5jbHVkZSB3aWR0aCwgc3RlcCB2YWx1ZSBpcyAxIHRvIGRvIGFsbCBjc3NFeHBhbmQgdmFsdWVzLFxuXHQvLyBvdGhlcndpc2Ugc3RlcCB2YWx1ZSBpcyAyIHRvIHNraXAgb3ZlciBMZWZ0IGFuZCBSaWdodFxuXHRpbmNsdWRlV2lkdGggPSBpbmNsdWRlV2lkdGggPyAxIDogMDtcblx0Zm9yICggOyBpIDwgNDsgaSArPSAyIC0gaW5jbHVkZVdpZHRoICkge1xuXHRcdHdoaWNoID0gY3NzRXhwYW5kWyBpIF07XG5cdFx0YXR0cnNbIFwibWFyZ2luXCIgKyB3aGljaCBdID0gYXR0cnNbIFwicGFkZGluZ1wiICsgd2hpY2ggXSA9IHR5cGU7XG5cdH1cblxuXHRpZiAoIGluY2x1ZGVXaWR0aCApIHtcblx0XHRhdHRycy5vcGFjaXR5ID0gYXR0cnMud2lkdGggPSB0eXBlO1xuXHR9XG5cblx0cmV0dXJuIGF0dHJzO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUd2VlbiggdmFsdWUsIHByb3AsIGFuaW1hdGlvbiApIHtcblx0dmFyIHR3ZWVuLFxuXHRcdGNvbGxlY3Rpb24gPSAoIEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdICkuY29uY2F0KCBBbmltYXRpb24udHdlZW5lcnNbIFwiKlwiIF0gKSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gY29sbGVjdGlvbi5sZW5ndGg7XG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCAoIHR3ZWVuID0gY29sbGVjdGlvblsgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIHByb3AsIHZhbHVlICkgKSApIHtcblxuXHRcdFx0Ly8gV2UncmUgZG9uZSB3aXRoIHRoaXMgcHJvcGVydHlcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdFByZWZpbHRlciggZWxlbSwgcHJvcHMsIG9wdHMgKSB7XG5cdHZhciBwcm9wLCB2YWx1ZSwgdG9nZ2xlLCBob29rcywgb2xkZmlyZSwgcHJvcFR3ZWVuLCByZXN0b3JlRGlzcGxheSwgZGlzcGxheSxcblx0XHRpc0JveCA9IFwid2lkdGhcIiBpbiBwcm9wcyB8fCBcImhlaWdodFwiIGluIHByb3BzLFxuXHRcdGFuaW0gPSB0aGlzLFxuXHRcdG9yaWcgPSB7fSxcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGUsXG5cdFx0aGlkZGVuID0gZWxlbS5ub2RlVHlwZSAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSxcblx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJmeHNob3dcIiApO1xuXG5cdC8vIFF1ZXVlLXNraXBwaW5nIGFuaW1hdGlvbnMgaGlqYWNrIHRoZSBmeCBob29rc1xuXHRpZiAoICFvcHRzLnF1ZXVlICkge1xuXHRcdGhvb2tzID0galF1ZXJ5Ll9xdWV1ZUhvb2tzKCBlbGVtLCBcImZ4XCIgKTtcblx0XHRpZiAoIGhvb2tzLnVucXVldWVkID09IG51bGwgKSB7XG5cdFx0XHRob29rcy51bnF1ZXVlZCA9IDA7XG5cdFx0XHRvbGRmaXJlID0gaG9va3MuZW1wdHkuZmlyZTtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhaG9va3MudW5xdWV1ZWQgKSB7XG5cdFx0XHRcdFx0b2xkZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0XHRob29rcy51bnF1ZXVlZCsrO1xuXG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbnN1cmUgdGhlIGNvbXBsZXRlIGhhbmRsZXIgaXMgY2FsbGVkIGJlZm9yZSB0aGlzIGNvbXBsZXRlc1xuXHRcdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRob29rcy51bnF1ZXVlZC0tO1xuXHRcdFx0XHRpZiAoICFqUXVlcnkucXVldWUoIGVsZW0sIFwiZnhcIiApLmxlbmd0aCApIHtcblx0XHRcdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBEZXRlY3Qgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0Zm9yICggcHJvcCBpbiBwcm9wcyApIHtcblx0XHR2YWx1ZSA9IHByb3BzWyBwcm9wIF07XG5cdFx0aWYgKCByZnh0eXBlcy50ZXN0KCB2YWx1ZSApICkge1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBwcm9wIF07XG5cdFx0XHR0b2dnbGUgPSB0b2dnbGUgfHwgdmFsdWUgPT09IFwidG9nZ2xlXCI7XG5cdFx0XHRpZiAoIHZhbHVlID09PSAoIGhpZGRlbiA/IFwiaGlkZVwiIDogXCJzaG93XCIgKSApIHtcblxuXHRcdFx0XHQvLyBQcmV0ZW5kIHRvIGJlIGhpZGRlbiBpZiB0aGlzIGlzIGEgXCJzaG93XCIgYW5kXG5cdFx0XHRcdC8vIHRoZXJlIGlzIHN0aWxsIGRhdGEgZnJvbSBhIHN0b3BwZWQgc2hvdy9oaWRlXG5cdFx0XHRcdGlmICggdmFsdWUgPT09IFwic2hvd1wiICYmIGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSB0cnVlO1xuXG5cdFx0XHRcdC8vIElnbm9yZSBhbGwgb3RoZXIgbm8tb3Agc2hvdy9oaWRlIGRhdGFcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0b3JpZ1sgcHJvcCBdID0gZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSB8fCBqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBCYWlsIG91dCBpZiB0aGlzIGlzIGEgbm8tb3AgbGlrZSAuaGlkZSgpLmhpZGUoKVxuXHRwcm9wVHdlZW4gPSAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3BzICk7XG5cdGlmICggIXByb3BUd2VlbiAmJiBqUXVlcnkuaXNFbXB0eU9iamVjdCggb3JpZyApICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlc3RyaWN0IFwib3ZlcmZsb3dcIiBhbmQgXCJkaXNwbGF5XCIgc3R5bGVzIGR1cmluZyBib3ggYW5pbWF0aW9uc1xuXHRpZiAoIGlzQm94ICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0Ly8gUmVjb3JkIGFsbCAzIG92ZXJmbG93IGF0dHJpYnV0ZXMgYmVjYXVzZSBJRSBkb2VzIG5vdCBpbmZlciB0aGUgc2hvcnRoYW5kXG5cdFx0Ly8gZnJvbSBpZGVudGljYWxseS12YWx1ZWQgb3ZlcmZsb3dYIGFuZCBvdmVyZmxvd1kgYW5kIEVkZ2UganVzdCBtaXJyb3JzXG5cdFx0Ly8gdGhlIG92ZXJmbG93WCB2YWx1ZSB0aGVyZS5cblx0XHRvcHRzLm92ZXJmbG93ID0gWyBzdHlsZS5vdmVyZmxvdywgc3R5bGUub3ZlcmZsb3dYLCBzdHlsZS5vdmVyZmxvd1kgXTtcblxuXHRcdC8vIElkZW50aWZ5IGEgZGlzcGxheSB0eXBlLCBwcmVmZXJyaW5nIG9sZCBzaG93L2hpZGUgZGF0YSBvdmVyIHRoZSBDU1MgY2FzY2FkZVxuXHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVNob3cgJiYgZGF0YVNob3cuZGlzcGxheTtcblx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFQcml2LmdldCggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHR9XG5cdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgKSB7XG5cdFx0XHRcdGRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gR2V0IG5vbmVtcHR5IHZhbHVlKHMpIGJ5IHRlbXBvcmFyaWx5IGZvcmNpbmcgdmlzaWJpbGl0eVxuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBlbGVtLnN0eWxlLmRpc3BsYXkgfHwgcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBbmltYXRlIGlubGluZSBlbGVtZW50cyBhcyBpbmxpbmUtYmxvY2tcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwiaW5saW5lXCIgfHwgZGlzcGxheSA9PT0gXCJpbmxpbmUtYmxvY2tcIiAmJiByZXN0b3JlRGlzcGxheSAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcImZsb2F0XCIgKSA9PT0gXCJub25lXCIgKSB7XG5cblx0XHRcdFx0Ly8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgZGlzcGxheSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHB1cmUgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0XHRcdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdGRpc3BsYXkgPSBzdHlsZS5kaXNwbGF5O1xuXHRcdFx0XHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkaXNwbGF5ID09PSBcIm5vbmVcIiA/IFwiXCIgOiBkaXNwbGF5O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRzdHlsZS5kaXNwbGF5ID0gXCJpbmxpbmUtYmxvY2tcIjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIG9wdHMub3ZlcmZsb3cgKSB7XG5cdFx0c3R5bGUub3ZlcmZsb3cgPSBcImhpZGRlblwiO1xuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdHN0eWxlLm92ZXJmbG93ID0gb3B0cy5vdmVyZmxvd1sgMCBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dYID0gb3B0cy5vdmVyZmxvd1sgMSBdO1xuXHRcdFx0c3R5bGUub3ZlcmZsb3dZID0gb3B0cy5vdmVyZmxvd1sgMiBdO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEltcGxlbWVudCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRwcm9wVHdlZW4gPSBmYWxzZTtcblx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXG5cdFx0Ly8gR2VuZXJhbCBzaG93L2hpZGUgc2V0dXAgZm9yIHRoaXMgZWxlbWVudCBhbmltYXRpb25cblx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRpZiAoIGRhdGFTaG93ICkge1xuXHRcdFx0XHRpZiAoIFwiaGlkZGVuXCIgaW4gZGF0YVNob3cgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gZGF0YVNob3cuaGlkZGVuO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkYXRhU2hvdyA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgXCJmeHNob3dcIiwgeyBkaXNwbGF5OiByZXN0b3JlRGlzcGxheSB9ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0b3JlIGhpZGRlbi92aXNpYmxlIGZvciB0b2dnbGUgc28gYC5zdG9wKCkudG9nZ2xlKClgIFwicmV2ZXJzZXNcIlxuXHRcdFx0aWYgKCB0b2dnbGUgKSB7XG5cdFx0XHRcdGRhdGFTaG93LmhpZGRlbiA9ICFoaWRkZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNob3cgZWxlbWVudHMgYmVmb3JlIGFuaW1hdGluZyB0aGVtXG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdFx0Ly8gVGhlIGZpbmFsIHN0ZXAgb2YgYSBcImhpZGVcIiBhbmltYXRpb24gaXMgYWN0dWFsbHkgaGlkaW5nIHRoZSBlbGVtZW50XG5cdFx0XHRcdGlmICggIWhpZGRlbiApIHtcblx0XHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiZnhzaG93XCIgKTtcblx0XHRcdFx0Zm9yICggcHJvcCBpbiBvcmlnICkge1xuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgb3JpZ1sgcHJvcCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHQvLyBQZXItcHJvcGVydHkgc2V0dXBcblx0XHRwcm9wVHdlZW4gPSBjcmVhdGVUd2VlbiggaGlkZGVuID8gZGF0YVNob3dbIHByb3AgXSA6IDAsIHByb3AsIGFuaW0gKTtcblx0XHRpZiAoICEoIHByb3AgaW4gZGF0YVNob3cgKSApIHtcblx0XHRcdGRhdGFTaG93WyBwcm9wIF0gPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRpZiAoIGhpZGRlbiApIHtcblx0XHRcdFx0cHJvcFR3ZWVuLmVuZCA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdFx0cHJvcFR3ZWVuLnN0YXJ0ID0gMDtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gcHJvcEZpbHRlciggcHJvcHMsIHNwZWNpYWxFYXNpbmcgKSB7XG5cdHZhciBpbmRleCwgbmFtZSwgZWFzaW5nLCB2YWx1ZSwgaG9va3M7XG5cblx0Ly8gY2FtZWxDYXNlLCBzcGVjaWFsRWFzaW5nIGFuZCBleHBhbmQgY3NzSG9vayBwYXNzXG5cdGZvciAoIGluZGV4IGluIHByb3BzICkge1xuXHRcdG5hbWUgPSBjYW1lbENhc2UoIGluZGV4ICk7XG5cdFx0ZWFzaW5nID0gc3BlY2lhbEVhc2luZ1sgbmFtZSBdO1xuXHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF07XG5cdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0ZWFzaW5nID0gdmFsdWVbIDEgXTtcblx0XHRcdHZhbHVlID0gcHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgMCBdO1xuXHRcdH1cblxuXHRcdGlmICggaW5kZXggIT09IG5hbWUgKSB7XG5cdFx0XHRwcm9wc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRkZWxldGUgcHJvcHNbIGluZGV4IF07XG5cdFx0fVxuXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXTtcblx0XHRpZiAoIGhvb2tzICYmIFwiZXhwYW5kXCIgaW4gaG9va3MgKSB7XG5cdFx0XHR2YWx1ZSA9IGhvb2tzLmV4cGFuZCggdmFsdWUgKTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgbmFtZSBdO1xuXG5cdFx0XHQvLyBOb3QgcXVpdGUgJC5leHRlbmQsIHRoaXMgd29uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGtleXMuXG5cdFx0XHQvLyBSZXVzaW5nICdpbmRleCcgYmVjYXVzZSB3ZSBoYXZlIHRoZSBjb3JyZWN0IFwibmFtZVwiXG5cdFx0XHRmb3IgKCBpbmRleCBpbiB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhKCBpbmRleCBpbiBwcm9wcyApICkge1xuXHRcdFx0XHRcdHByb3BzWyBpbmRleCBdID0gdmFsdWVbIGluZGV4IF07XG5cdFx0XHRcdFx0c3BlY2lhbEVhc2luZ1sgaW5kZXggXSA9IGVhc2luZztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRzcGVjaWFsRWFzaW5nWyBuYW1lIF0gPSBlYXNpbmc7XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIEFuaW1hdGlvbiggZWxlbSwgcHJvcGVydGllcywgb3B0aW9ucyApIHtcblx0dmFyIHJlc3VsdCxcblx0XHRzdG9wcGVkLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBBbmltYXRpb24ucHJlZmlsdGVycy5sZW5ndGgsXG5cdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBEb24ndCBtYXRjaCBlbGVtIGluIHRoZSA6YW5pbWF0ZWQgc2VsZWN0b3Jcblx0XHRcdGRlbGV0ZSB0aWNrLmVsZW07XG5cdFx0fSApLFxuXHRcdHRpY2sgPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdFx0dmFyIGN1cnJlbnRUaW1lID0gZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdFx0cmVtYWluaW5nID0gTWF0aC5tYXgoIDAsIGFuaW1hdGlvbi5zdGFydFRpbWUgKyBhbmltYXRpb24uZHVyYXRpb24gLSBjdXJyZW50VGltZSApLFxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgMi4zIG9ubHlcblx0XHRcdFx0Ly8gQXJjaGFpYyBjcmFzaCBidWcgd29uJ3QgYWxsb3cgdXMgdG8gdXNlIGAxIC0gKCAwLjUgfHwgMCApYCAoIzEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxuLy8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTAwMzI0MDE0NzQ3L2h0dHA6Ly9ibGluZHNpZ25hbHMuY29tL2luZGV4LnBocC8yMDA5LzA3L2pxdWVyeS1kZWxheS9cbmpRdWVyeS5mbi5kZWxheSA9IGZ1bmN0aW9uKCB0aW1lLCB0eXBlICkge1xuXHR0aW1lID0galF1ZXJ5LmZ4ID8galF1ZXJ5LmZ4LnNwZWVkc1sgdGltZSBdIHx8IHRpbWUgOiB0aW1lO1xuXHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUsIGZ1bmN0aW9uKCBuZXh0LCBob29rcyApIHtcblx0XHR2YXIgdGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KCBuZXh0LCB0aW1lICk7XG5cdFx0aG9va3Muc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dCApO1xuXHRcdH07XG5cdH0gKTtcbn07XG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICksXG5cdFx0c2VsZWN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJzZWxlY3RcIiApLFxuXHRcdG9wdCA9IHNlbGVjdC5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvcHRpb25cIiApICk7XG5cblx0aW5wdXQudHlwZSA9IFwiY2hlY2tib3hcIjtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4zIG9ubHlcblx0Ly8gRGVmYXVsdCB2YWx1ZSBmb3IgYSBjaGVja2JveCBzaG91bGQgYmUgXCJvblwiXG5cdHN1cHBvcnQuY2hlY2tPbiA9IGlucHV0LnZhbHVlICE9PSBcIlwiO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNdXN0IGFjY2VzcyBzZWxlY3RlZEluZGV4IHRvIG1ha2UgZGVmYXVsdCBvcHRpb25zIHNlbGVjdFxuXHRzdXBwb3J0Lm9wdFNlbGVjdGVkID0gb3B0LnNlbGVjdGVkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBBbiBpbnB1dCBsb3NlcyBpdHMgdmFsdWUgYWZ0ZXIgYmVjb21pbmcgYSByYWRpb1xuXHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRpbnB1dC52YWx1ZSA9IFwidFwiO1xuXHRpbnB1dC50eXBlID0gXCJyYWRpb1wiO1xuXHRzdXBwb3J0LnJhZGlvVmFsdWUgPSBpbnB1dC52YWx1ZSA9PT0gXCJ0XCI7XG59ICkoKTtcblxuXG52YXIgYm9vbEhvb2ssXG5cdGF0dHJIYW5kbGUgPSBqUXVlcnkuZXhwci5hdHRySGFuZGxlO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkuYXR0ciwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggdGhpcywgbmFtZSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGF0dHI6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgYXR0cmlidXRlcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEZhbGxiYWNrIHRvIHByb3Agd2hlbiBhdHRyaWJ1dGVzIGFyZSBub3Qgc3VwcG9ydGVkXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGUgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnByb3AoIGVsZW0sIG5hbWUsIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXR0cmlidXRlIGhvb2tzIGFyZSBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlcmNhc2UgdmVyc2lvblxuXHRcdC8vIEdyYWIgbmVjZXNzYXJ5IGhvb2sgaWYgb25lIGlzIGRlZmluZWRcblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblx0XHRcdGhvb2tzID0galF1ZXJ5LmF0dHJIb29rc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0KCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnRlc3QoIG5hbWUgKSA/IGJvb2xIb29rIDogdW5kZWZpbmVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gbnVsbCApIHtcblx0XHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgdmFsdWUgKyBcIlwiICk7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0Ly8gTm9uLWV4aXN0ZW50IGF0dHJpYnV0ZXMgcmV0dXJuIG51bGwsIHdlIG5vcm1hbGl6ZSB0byB1bmRlZmluZWRcblx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyB1bmRlZmluZWQgOiByZXQ7XG5cdH0sXG5cblx0YXR0ckhvb2tzOiB7XG5cdFx0dHlwZToge1xuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggIXN1cHBvcnQucmFkaW9WYWx1ZSAmJiB2YWx1ZSA9PT0gXCJyYWRpb1wiICYmXG5cdFx0XHRcdFx0bm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICkge1xuXHRcdFx0XHRcdHZhciB2YWwgPSBlbGVtLnZhbHVlO1xuXHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgdmFsdWUgKTtcblx0XHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRcdGVsZW0udmFsdWUgPSB2YWw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0dmFyIG5hbWUsXG5cdFx0XHRpID0gMCxcblxuXHRcdFx0Ly8gQXR0cmlidXRlIG5hbWVzIGNhbiBjb250YWluIG5vbi1IVE1MIHdoaXRlc3BhY2UgY2hhcmFjdGVyc1xuXHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjYXR0cmlidXRlcy0yXG5cdFx0XHRhdHRyTmFtZXMgPSB2YWx1ZSAmJiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXG5cdFx0aWYgKCBhdHRyTmFtZXMgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdHdoaWxlICggKCBuYW1lID0gYXR0ck5hbWVzWyBpKysgXSApICkge1xuXHRcdFx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggbmFtZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIb29rcyBmb3IgYm9vbGVhbiBhdHRyaWJ1dGVzXG5ib29sSG9vayA9IHtcblx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIG5hbWUgKSB7XG5cdFx0aWYgKCB2YWx1ZSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBib29sZWFuIGF0dHJpYnV0ZXMgd2hlbiBzZXQgdG8gZmFsc2Vcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCBuYW1lICk7XG5cdFx0fVxuXHRcdHJldHVybiBuYW1lO1xuXHR9XG59O1xuXG5qUXVlcnkuZWFjaCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC5zb3VyY2UubWF0Y2goIC9cXHcrL2cgKSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgZ2V0dGVyID0gYXR0ckhhbmRsZVsgbmFtZSBdIHx8IGpRdWVyeS5maW5kLmF0dHI7XG5cblx0YXR0ckhhbmRsZVsgbmFtZSBdID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGlzWE1MICkge1xuXHRcdHZhciByZXQsIGhhbmRsZSxcblx0XHRcdGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRpZiAoICFpc1hNTCApIHtcblxuXHRcdFx0Ly8gQXZvaWQgYW4gaW5maW5pdGUgbG9vcCBieSB0ZW1wb3JhcmlseSByZW1vdmluZyB0aGlzIGZ1bmN0aW9uIGZyb20gdGhlIGdldHRlclxuXHRcdFx0aGFuZGxlID0gYXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gcmV0O1xuXHRcdFx0cmV0ID0gZ2V0dGVyKCBlbGVtLCBuYW1lLCBpc1hNTCApICE9IG51bGwgP1xuXHRcdFx0XHRsb3dlcmNhc2VOYW1lIDpcblx0XHRcdFx0bnVsbDtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IGhhbmRsZTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fTtcbn0gKTtcblxuXG5cblxudmFyIHJmb2N1c2FibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyY2xpY2thYmxlID0gL14oPzphfGFyZWEpJC9pO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBqUXVlcnkucHJvcCwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH0sXG5cblx0cmVtb3ZlUHJvcDogZnVuY3Rpb24oIG5hbWUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkZWxldGUgdGhpc1sgalF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lIF07XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBwcm9wZXJ0aWVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIEZpeCBuYW1lIGFuZCBhdHRhY2ggaG9va3Ncblx0XHRcdG5hbWUgPSBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWU7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5wcm9wSG9va3NbIG5hbWUgXTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIGhvb2tzICYmIFwic2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5zZXQoIGVsZW0sIHZhbHVlLCBuYW1lICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gKCBlbGVtWyBuYW1lIF0gPSB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldHVybiBlbGVtWyBuYW1lIF07XG5cdH0sXG5cblx0cHJvcEhvb2tzOiB7XG5cdFx0dGFiSW5kZXg6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdFx0XHQvLyBlbGVtLnRhYkluZGV4IGRvZXNuJ3QgYWx3YXlzIHJldHVybiB0aGVcblx0XHRcdFx0Ly8gY29ycmVjdCB2YWx1ZSB3aGVuIGl0IGhhc24ndCBiZWVuIGV4cGxpY2l0bHkgc2V0XG5cdFx0XHRcdC8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDE0MTExNjIzMzM0Ny9odHRwOi8vZmx1aWRwcm9qZWN0Lm9yZy9ibG9nLzIwMDgvMDEvMDkvZ2V0dGluZy1zZXR0aW5nLWFuZC1yZW1vdmluZy10YWJpbmRleC12YWx1ZXMtd2l0aC1qYXZhc2NyaXB0L1xuXHRcdFx0XHQvLyBVc2UgcHJvcGVyIGF0dHJpYnV0ZSByZXRyaWV2YWwoIzEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5hZGRDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPCAwICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgKz0gY2xhenogKyBcIiBcIjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHJlbW92ZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkucmVtb3ZlQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5hdHRyKCBcImNsYXNzXCIsIFwiXCIgKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlICphbGwqIGluc3RhbmNlc1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGF6eiArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhenogKyBcIiBcIiwgXCIgXCIgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBPbmx5IGFzc2lnbiBpZiBkaWZmZXJlbnQgdG8gYXZvaWQgdW5uZWVkZWQgcmVuZGVyaW5nLlxuXHRcdFx0XHRcdGZpbmFsVmFsdWUgPSBzdHJpcEFuZENvbGxhcHNlKCBjdXIgKTtcblx0XHRcdFx0XHRpZiAoIGN1clZhbHVlICE9PSBmaW5hbFZhbHVlICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiwgZmluYWxWYWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHRvZ2dsZUNsYXNzOiBmdW5jdGlvbiggdmFsdWUsIHN0YXRlVmFsICkge1xuXHRcdHZhciB0eXBlID0gdHlwZW9mIHZhbHVlLFxuXHRcdFx0aXNWYWxpZFZhbHVlID0gdHlwZSA9PT0gXCJzdHJpbmdcIiB8fCBBcnJheS5pc0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgY2xhc3NOYW1lLCBpLCBzZWxmLCBjbGFzc05hbWVzO1xuXG5cdFx0XHRpZiAoIGlzVmFsaWRWYWx1ZSApIHtcblxuXHRcdFx0XHQvLyBUb2dnbGUgaW5kaXZpZHVhbCBjbGFzcyBuYW1lc1xuXHRcdFx0XHRpID0gMDtcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXHRcdFx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRcdFx0d2hpbGUgKCAoIGNsYXNzTmFtZSA9IGNsYXNzTmFtZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAoIzE0Njg2LCAjMTQ4NTgpXG5cdFx0XHRcdFx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2Vcblx0XHRcdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2Utd2hpdGVzcGFjZVxuXHRcdFx0XHRcdHN0cmlwQW5kQ29sbGFwc2UoIGpRdWVyeS50ZXh0KCBlbGVtICkgKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHNlbGVjdDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIHZhbHVlLCBvcHRpb24sIGksXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHRpbmRleCA9IGVsZW0uc2VsZWN0ZWRJbmRleCxcblx0XHRcdFx0XHRvbmUgPSBlbGVtLnR5cGUgPT09IFwic2VsZWN0LW9uZVwiLFxuXHRcdFx0XHRcdHZhbHVlcyA9IG9uZSA/IG51bGwgOiBbXSxcblx0XHRcdFx0XHRtYXggPSBvbmUgPyBpbmRleCArIDEgOiBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHRpZiAoIGluZGV4IDwgMCApIHtcblx0XHRcdFx0XHRpID0gbWF4O1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aSA9IG9uZSA/IGluZGV4IDogMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIHNlbGVjdGVkIG9wdGlvbnNcblx0XHRcdFx0Zm9yICggOyBpIDwgbWF4OyBpKysgKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHQvLyBJRTgtOSBkb2Vzbid0IHVwZGF0ZSBzZWxlY3RlZCBhZnRlciBmb3JtIHJlc2V0ICgjMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxuXG5cbnN1cHBvcnQuZm9jdXNpbiA9IFwib25mb2N1c2luXCIgaW4gd2luZG93O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICgjOTk1MSlcblx0XHQvLyBCdWJibGUgdXAgdG8gZG9jdW1lbnQsIHRoZW4gdG8gd2luZG93OyB3YXRjaCBmb3IgYSBnbG9iYWwgb3duZXJEb2N1bWVudCB2YXIgKCM5NzI0KVxuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhc3BlY2lhbC5ub0J1YmJsZSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0YnViYmxlVHlwZSA9IHNwZWNpYWwuZGVsZWdhdGVUeXBlIHx8IHR5cGU7XG5cdFx0XHRpZiAoICFyZm9jdXNNb3JwaC50ZXN0KCBidWJibGVUeXBlICsgdHlwZSApICkge1xuXHRcdFx0XHRjdXIgPSBjdXIucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGZvciAoIDsgY3VyOyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIGN1ciApO1xuXHRcdFx0XHR0bXAgPSBjdXI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE9ubHkgYWRkIHdpbmRvdyBpZiB3ZSBnb3QgdG8gZG9jdW1lbnQgKGUuZy4sIG5vdCBwbGFpbiBvYmogb3IgZGV0YWNoZWQgRE9NKVxuXHRcdFx0aWYgKCB0bXAgPT09ICggZWxlbS5vd25lckRvY3VtZW50IHx8IGRvY3VtZW50ICkgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCB0bXAuZGVmYXVsdFZpZXcgfHwgdG1wLnBhcmVudFdpbmRvdyB8fCB3aW5kb3cgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGaXJlIGhhbmRsZXJzIG9uIHRoZSBldmVudCBwYXRoXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGV2ZW50UGF0aFsgaSsrIF0gKSAmJiAhZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdGxhc3RFbGVtZW50ID0gY3VyO1xuXHRcdFx0ZXZlbnQudHlwZSA9IGkgPiAxID9cblx0XHRcdFx0YnViYmxlVHlwZSA6XG5cdFx0XHRcdHNwZWNpYWwuYmluZFR5cGUgfHwgdHlwZTtcblxuXHRcdFx0Ly8galF1ZXJ5IGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9ICggZGF0YVByaXYuZ2V0KCBjdXIsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsICkgKVsgZXZlbnQudHlwZSBdICYmXG5cdFx0XHRcdGRhdGFQcml2LmdldCggY3VyLCBcImhhbmRsZVwiICk7XG5cdFx0XHRpZiAoIGhhbmRsZSApIHtcblx0XHRcdFx0aGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTmF0aXZlIGhhbmRsZXJcblx0XHRcdGhhbmRsZSA9IG9udHlwZSAmJiBjdXJbIG9udHlwZSBdO1xuXHRcdFx0aWYgKCBoYW5kbGUgJiYgaGFuZGxlLmFwcGx5ICYmIGFjY2VwdERhdGEoIGN1ciApICkge1xuXHRcdFx0XHRldmVudC5yZXN1bHQgPSBoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRldmVudC50eXBlID0gdHlwZTtcblxuXHRcdC8vIElmIG5vYm9keSBwcmV2ZW50ZWQgdGhlIGRlZmF1bHQgYWN0aW9uLCBkbyBpdCBub3dcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIWV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpICkge1xuXG5cdFx0XHRpZiAoICggIXNwZWNpYWwuX2RlZmF1bHQgfHxcblx0XHRcdFx0c3BlY2lhbC5fZGVmYXVsdC5hcHBseSggZXZlbnRQYXRoLnBvcCgpLCBkYXRhICkgPT09IGZhbHNlICkgJiZcblx0XHRcdFx0YWNjZXB0RGF0YSggZWxlbSApICkge1xuXG5cdFx0XHRcdC8vIENhbGwgYSBuYXRpdmUgRE9NIG1ldGhvZCBvbiB0aGUgdGFyZ2V0IHdpdGggdGhlIHNhbWUgbmFtZSBhcyB0aGUgZXZlbnQuXG5cdFx0XHRcdC8vIERvbid0IGRvIGRlZmF1bHQgYWN0aW9ucyBvbiB3aW5kb3csIHRoYXQncyB3aGVyZSBnbG9iYWwgdmFyaWFibGVzIGJlICgjNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxuLy8gU3VwcG9ydDogRmlyZWZveCA8PTQ0XG4vLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY4Nzc4N1xuLy9cbi8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuLy8gZm9jdXMoaW4gfCBvdXQpIGV2ZW50cyBmaXJlIGFmdGVyIGZvY3VzICYgYmx1ciBldmVudHMsXG4vLyB3aGljaCBpcyBzcGVjIHZpb2xhdGlvbiAtIGh0dHA6Ly93d3cudzMub3JnL1RSL0RPTS1MZXZlbC0zLUV2ZW50cy8jZXZlbnRzLWZvY3VzZXZlbnQtZXZlbnQtb3JkZXJcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5pZiAoICFzdXBwb3J0LmZvY3VzaW4gKSB7XG5cdGpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cblx0XHQvLyBBdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50IHdoaWxlIHNvbWVvbmUgd2FudHMgZm9jdXNpbi9mb2N1c291dFxuXHRcdHZhciBoYW5kbGVyID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnNpbXVsYXRlKCBmaXgsIGV2ZW50LnRhcmdldCwgalF1ZXJ5LmV2ZW50LmZpeCggZXZlbnQgKSApO1xuXHRcdH07XG5cblx0XHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZml4IF0gPSB7XG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gSGFuZGxlOiByZWd1bGFyIG5vZGVzICh2aWEgYHRoaXMub3duZXJEb2N1bWVudGApLCB3aW5kb3dcblx0XHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MuYWRkRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSxcblx0XHRcdHRlYXJkb3duOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICkgLSAxO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH0gKTtcbn1cbnZhciBsb2NhdGlvbiA9IHdpbmRvdy5sb2NhdGlvbjtcblxudmFyIG5vbmNlID0geyBndWlkOiBEYXRlLm5vdygpIH07XG5cbnZhciBycXVlcnkgPSAoIC9cXD8vICk7XG5cblxuXG4vLyBDcm9zcy1icm93c2VyIHhtbCBwYXJzaW5nXG5qUXVlcnkucGFyc2VYTUwgPSBmdW5jdGlvbiggZGF0YSApIHtcblx0dmFyIHhtbCwgcGFyc2VyRXJyb3JFbGVtO1xuXHRpZiAoICFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gSUUgdGhyb3dzIG9uIHBhcnNlRnJvbVN0cmluZyB3aXRoIGludmFsaWQgaW5wdXQuXG5cdHRyeSB7XG5cdFx0eG1sID0gKCBuZXcgd2luZG93LkRPTVBhcnNlcigpICkucGFyc2VGcm9tU3RyaW5nKCBkYXRhLCBcInRleHQveG1sXCIgKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxuXG5cdHBhcnNlckVycm9yRWxlbSA9IHhtbCAmJiB4bWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwicGFyc2VyZXJyb3JcIiApWyAwIF07XG5cdGlmICggIXhtbCB8fCBwYXJzZXJFcnJvckVsZW0gKSB7XG5cdFx0alF1ZXJ5LmVycm9yKCBcIkludmFsaWQgWE1MOiBcIiArIChcblx0XHRcdHBhcnNlckVycm9yRWxlbSA/XG5cdFx0XHRcdGpRdWVyeS5tYXAoIHBhcnNlckVycm9yRWxlbS5jaGlsZE5vZGVzLCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVsLnRleHRDb250ZW50O1xuXHRcdFx0XHR9ICkuam9pbiggXCJcXG5cIiApIDpcblx0XHRcdFx0ZGF0YVxuXHRcdCkgKTtcblx0fVxuXHRyZXR1cm4geG1sO1xufTtcblxuXG52YXJcblx0cmJyYWNrZXQgPSAvXFxbXFxdJC8sXG5cdHJDUkxGID0gL1xccj9cXG4vZyxcblx0cnN1Ym1pdHRlclR5cGVzID0gL14oPzpzdWJtaXR8YnV0dG9ufGltYWdlfHJlc2V0fGZpbGUpJC9pLFxuXHRyc3VibWl0dGFibGUgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxrZXlnZW4pL2k7XG5cbmZ1bmN0aW9uIGJ1aWxkUGFyYW1zKCBwcmVmaXgsIG9iaiwgdHJhZGl0aW9uYWwsIGFkZCApIHtcblx0dmFyIG5hbWU7XG5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBvYmogKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBhcnJheSBpdGVtLlxuXHRcdGpRdWVyeS5lYWNoKCBvYmosIGZ1bmN0aW9uKCBpLCB2ICkge1xuXHRcdFx0aWYgKCB0cmFkaXRpb25hbCB8fCByYnJhY2tldC50ZXN0KCBwcmVmaXggKSApIHtcblxuXHRcdFx0XHQvLyBUcmVhdCBlYWNoIGFycmF5IGl0ZW0gYXMgYSBzY2FsYXIuXG5cdFx0XHRcdGFkZCggcHJlZml4LCB2ICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gSXRlbSBpcyBub24tc2NhbGFyIChhcnJheSBvciBvYmplY3QpLCBlbmNvZGUgaXRzIG51bWVyaWMgaW5kZXguXG5cdFx0XHRcdGJ1aWxkUGFyYW1zKFxuXHRcdFx0XHRcdHByZWZpeCArIFwiW1wiICsgKCB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIiAmJiB2ICE9IG51bGwgPyBpIDogXCJcIiApICsgXCJdXCIsXG5cdFx0XHRcdFx0dixcblx0XHRcdFx0XHR0cmFkaXRpb25hbCxcblx0XHRcdFx0XHRhZGRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9ICk7XG5cblx0fSBlbHNlIGlmICggIXRyYWRpdGlvbmFsICYmIHRvVHlwZSggb2JqICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgb2JqZWN0IGl0ZW0uXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4ICsgXCJbXCIgKyBuYW1lICsgXCJdXCIsIG9ialsgbmFtZSBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBTZXJpYWxpemUgc2NhbGFyIGl0ZW0uXG5cdFx0YWRkKCBwcmVmaXgsIG9iaiApO1xuXHR9XG59XG5cbi8vIFNlcmlhbGl6ZSBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzIG9yIGEgc2V0IG9mXG4vLyBrZXkvdmFsdWVzIGludG8gYSBxdWVyeSBzdHJpbmdcbmpRdWVyeS5wYXJhbSA9IGZ1bmN0aW9uKCBhLCB0cmFkaXRpb25hbCApIHtcblx0dmFyIHByZWZpeCxcblx0XHRzID0gW10sXG5cdFx0YWRkID0gZnVuY3Rpb24oIGtleSwgdmFsdWVPckZ1bmN0aW9uICkge1xuXG5cdFx0XHQvLyBJZiB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBpbnZva2UgaXQgYW5kIHVzZSBpdHMgcmV0dXJuIHZhbHVlXG5cdFx0XHR2YXIgdmFsdWUgPSBpc0Z1bmN0aW9uKCB2YWx1ZU9yRnVuY3Rpb24gKSA/XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbigpIDpcblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uO1xuXG5cdFx0XHRzWyBzLmxlbmd0aCBdID0gZW5jb2RlVVJJQ29tcG9uZW50KCBrZXkgKSArIFwiPVwiICtcblx0XHRcdFx0ZW5jb2RlVVJJQ29tcG9uZW50KCB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICk7XG5cdFx0fTtcblxuXHRpZiAoIGEgPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fVxuXG5cdC8vIElmIGFuIGFycmF5IHdhcyBwYXNzZWQgaW4sIGFzc3VtZSB0aGF0IGl0IGlzIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMuXG5cdGlmICggQXJyYXkuaXNBcnJheSggYSApIHx8ICggYS5qcXVlcnkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBhICkgKSApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSB0aGUgZm9ybSBlbGVtZW50c1xuXHRcdGpRdWVyeS5lYWNoKCBhLCBmdW5jdGlvbigpIHtcblx0XHRcdGFkZCggdGhpcy5uYW1lLCB0aGlzLnZhbHVlICk7XG5cdFx0fSApO1xuXG5cdH0gZWxzZSB7XG5cblx0XHQvLyBJZiB0cmFkaXRpb25hbCwgZW5jb2RlIHRoZSBcIm9sZFwiIHdheSAodGhlIHdheSAxLjMuMiBvciBvbGRlclxuXHRcdC8vIGRpZCBpdCksIG90aGVyd2lzZSBlbmNvZGUgcGFyYW1zIHJlY3Vyc2l2ZWx5LlxuXHRcdGZvciAoIHByZWZpeCBpbiBhICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCwgYVsgcHJlZml4IF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG5cdHJldHVybiBzLmpvaW4oIFwiJlwiICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNlcmlhbGl6ZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5wYXJhbSggdGhpcy5zZXJpYWxpemVBcnJheSgpICk7XG5cdH0sXG5cdHNlcmlhbGl6ZUFycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBDYW4gYWRkIHByb3BIb29rIGZvciBcImVsZW1lbnRzXCIgdG8gZmlsdGVyIG9yIGFkZCBmb3JtIGVsZW1lbnRzXG5cdFx0XHR2YXIgZWxlbWVudHMgPSBqUXVlcnkucHJvcCggdGhpcywgXCJlbGVtZW50c1wiICk7XG5cdFx0XHRyZXR1cm4gZWxlbWVudHMgPyBqUXVlcnkubWFrZUFycmF5KCBlbGVtZW50cyApIDogdGhpcztcblx0XHR9ICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0eXBlID0gdGhpcy50eXBlO1xuXG5cdFx0XHQvLyBVc2UgLmlzKCBcIjpkaXNhYmxlZFwiICkgc28gdGhhdCBmaWVsZHNldFtkaXNhYmxlZF0gd29ya3Ncblx0XHRcdHJldHVybiB0aGlzLm5hbWUgJiYgIWpRdWVyeSggdGhpcyApLmlzKCBcIjpkaXNhYmxlZFwiICkgJiZcblx0XHRcdFx0cnN1Ym1pdHRhYmxlLnRlc3QoIHRoaXMubm9kZU5hbWUgKSAmJiAhcnN1Ym1pdHRlclR5cGVzLnRlc3QoIHR5cGUgKSAmJlxuXHRcdFx0XHQoIHRoaXMuY2hlY2tlZCB8fCAhcmNoZWNrYWJsZVR5cGUudGVzdCggdHlwZSApICk7XG5cdFx0fSApLm1hcCggZnVuY3Rpb24oIF9pLCBlbGVtICkge1xuXHRcdFx0dmFyIHZhbCA9IGpRdWVyeSggdGhpcyApLnZhbCgpO1xuXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbCApIHtcblx0XHRcdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0fSApLmdldCgpO1xuXHR9XG59ICk7XG5cblxudmFyXG5cdHIyMCA9IC8lMjAvZyxcblx0cmhhc2ggPSAvIy4qJC8sXG5cdHJhbnRpQ2FjaGUgPSAvKFs/Jl0pXz1bXiZdKi8sXG5cdHJoZWFkZXJzID0gL14oLio/KTpbIFxcdF0qKFteXFxyXFxuXSopJC9tZyxcblxuXHQvLyAjNzY1MywgIzgxMjUsICM4MTUyOiBsb2NhbCBwcm90b2NvbCBkZXRlY3Rpb25cblx0cmxvY2FsUHJvdG9jb2wgPSAvXig/OmFib3V0fGFwcHxhcHAtc3RvcmFnZXwuKy1leHRlbnNpb258ZmlsZXxyZXN8d2lkZ2V0KTokLyxcblx0cm5vQ29udGVudCA9IC9eKD86R0VUfEhFQUQpJC8sXG5cdHJwcm90b2NvbCA9IC9eXFwvXFwvLyxcblxuXHQvKiBQcmVmaWx0ZXJzXG5cdCAqIDEpIFRoZXkgYXJlIHVzZWZ1bCB0byBpbnRyb2R1Y2UgY3VzdG9tIGRhdGFUeXBlcyAoc2VlIGFqYXgvanNvbnAuanMgZm9yIGFuIGV4YW1wbGUpXG5cdCAqIDIpIFRoZXNlIGFyZSBjYWxsZWQ6XG5cdCAqICAgIC0gQkVGT1JFIGFza2luZyBmb3IgYSB0cmFuc3BvcnRcblx0ICogICAgLSBBRlRFUiBwYXJhbSBzZXJpYWxpemF0aW9uIChzLmRhdGEgaXMgYSBzdHJpbmcgaWYgcy5wcm9jZXNzRGF0YSBpcyB0cnVlKVxuXHQgKiAzKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDQpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogNSkgZXhlY3V0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gY29udGludWUgZG93biB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHByZWZpbHRlcnMgPSB7fSxcblxuXHQvKiBUcmFuc3BvcnRzIGJpbmRpbmdzXG5cdCAqIDEpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogMikgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiAzKSBzZWxlY3Rpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBnbyB0byBcIipcIiBpZiBuZWVkZWRcblx0ICovXG5cdHRyYW5zcG9ydHMgPSB7fSxcblxuXHQvLyBBdm9pZCBjb21tZW50LXByb2xvZyBjaGFyIHNlcXVlbmNlICgjMTAwOTgpOyBtdXN0IGFwcGVhc2UgbGludCBhbmQgZXZhZGUgY29tcHJlc3Npb25cblx0YWxsVHlwZXMgPSBcIiovXCIuY29uY2F0KCBcIipcIiApLFxuXG5cdC8vIEFuY2hvciB0YWcgZm9yIHBhcnNpbmcgdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvcmlnaW5BbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5vcmlnaW5BbmNob3IuaHJlZiA9IGxvY2F0aW9uLmhyZWY7XG5cbi8vIEJhc2UgXCJjb25zdHJ1Y3RvclwiIGZvciBqUXVlcnkuYWpheFByZWZpbHRlciBhbmQgalF1ZXJ5LmFqYXhUcmFuc3BvcnRcbmZ1bmN0aW9uIGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlICkge1xuXG5cdC8vIGRhdGFUeXBlRXhwcmVzc2lvbiBpcyBvcHRpb25hbCBhbmQgZGVmYXVsdHMgdG8gXCIqXCJcblx0cmV0dXJuIGZ1bmN0aW9uKCBkYXRhVHlwZUV4cHJlc3Npb24sIGZ1bmMgKSB7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZUV4cHJlc3Npb24gIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRmdW5jID0gZGF0YVR5cGVFeHByZXNzaW9uO1xuXHRcdFx0ZGF0YVR5cGVFeHByZXNzaW9uID0gXCIqXCI7XG5cdFx0fVxuXG5cdFx0dmFyIGRhdGFUeXBlLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRkYXRhVHlwZXMgPSBkYXRhVHlwZUV4cHJlc3Npb24udG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBmdW5jICkgKSB7XG5cblx0XHRcdC8vIEZvciBlYWNoIGRhdGFUeXBlIGluIHRoZSBkYXRhVHlwZUV4cHJlc3Npb25cblx0XHRcdHdoaWxlICggKCBkYXRhVHlwZSA9IGRhdGFUeXBlc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHQvLyBQcmVwZW5kIGlmIHJlcXVlc3RlZFxuXHRcdFx0XHRpZiAoIGRhdGFUeXBlWyAwIF0gPT09IFwiK1wiICkge1xuXHRcdFx0XHRcdGRhdGFUeXBlID0gZGF0YVR5cGUuc2xpY2UoIDEgKSB8fCBcIipcIjtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnVuc2hpZnQoIGZ1bmMgKTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYXBwZW5kXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS5wdXNoKCBmdW5jICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbi8vIEJhc2UgaW5zcGVjdGlvbiBmdW5jdGlvbiBmb3IgcHJlZmlsdGVycyBhbmQgdHJhbnNwb3J0c1xuZnVuY3Rpb24gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSwgb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApIHtcblxuXHR2YXIgaW5zcGVjdGVkID0ge30sXG5cdFx0c2Vla2luZ1RyYW5zcG9ydCA9ICggc3RydWN0dXJlID09PSB0cmFuc3BvcnRzICk7XG5cblx0ZnVuY3Rpb24gaW5zcGVjdCggZGF0YVR5cGUgKSB7XG5cdFx0dmFyIHNlbGVjdGVkO1xuXHRcdGluc3BlY3RlZFsgZGF0YVR5cGUgXSA9IHRydWU7XG5cdFx0alF1ZXJ5LmVhY2goIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSwgZnVuY3Rpb24oIF8sIHByZWZpbHRlck9yRmFjdG9yeSApIHtcblx0XHRcdHZhciBkYXRhVHlwZU9yVHJhbnNwb3J0ID0gcHJlZmlsdGVyT3JGYWN0b3J5KCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICk7XG5cdFx0XHRpZiAoIHR5cGVvZiBkYXRhVHlwZU9yVHJhbnNwb3J0ID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzZWVraW5nVHJhbnNwb3J0ICYmICFpbnNwZWN0ZWRbIGRhdGFUeXBlT3JUcmFuc3BvcnQgXSApIHtcblxuXHRcdFx0XHRvcHRpb25zLmRhdGFUeXBlcy51bnNoaWZ0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdGluc3BlY3QoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSBlbHNlIGlmICggc2Vla2luZ1RyYW5zcG9ydCApIHtcblx0XHRcdFx0cmV0dXJuICEoIHNlbGVjdGVkID0gZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0XHRyZXR1cm4gc2VsZWN0ZWQ7XG5cdH1cblxuXHRyZXR1cm4gaW5zcGVjdCggb3B0aW9ucy5kYXRhVHlwZXNbIDAgXSApIHx8ICFpbnNwZWN0ZWRbIFwiKlwiIF0gJiYgaW5zcGVjdCggXCIqXCIgKTtcbn1cblxuLy8gQSBzcGVjaWFsIGV4dGVuZCBmb3IgYWpheCBvcHRpb25zXG4vLyB0aGF0IHRha2VzIFwiZmxhdFwiIG9wdGlvbnMgKG5vdCB0byBiZSBkZWVwIGV4dGVuZGVkKVxuLy8gRml4ZXMgIzk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICgjMTAwOTM6IGNvbnNpc3RlbmN5IHdpdGggb2xkIHNpZ25hdHVyZSlcblx0XHQvLyBXZSBhbHNvIHVzZSB0aGUgdXJsIHBhcmFtZXRlciBpZiBhdmFpbGFibGVcblx0XHRzLnVybCA9ICggKCB1cmwgfHwgcy51cmwgfHwgbG9jYXRpb24uaHJlZiApICsgXCJcIiApXG5cdFx0XHQucmVwbGFjZSggcnByb3RvY29sLCBsb2NhdGlvbi5wcm90b2NvbCArIFwiLy9cIiApO1xuXG5cdFx0Ly8gQWxpYXMgbWV0aG9kIG9wdGlvbiB0byB0eXBlIGFzIHBlciB0aWNrZXQgIzEyMDA0XG5cdFx0cy50eXBlID0gb3B0aW9ucy5tZXRob2QgfHwgb3B0aW9ucy50eXBlIHx8IHMubWV0aG9kIHx8IHMudHlwZTtcblxuXHRcdC8vIEV4dHJhY3QgZGF0YVR5cGVzIGxpc3Rcblx0XHRzLmRhdGFUeXBlcyA9ICggcy5kYXRhVHlwZSB8fCBcIipcIiApLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblxuXHRcdC8vIEEgY3Jvc3MtZG9tYWluIHJlcXVlc3QgaXMgaW4gb3JkZXIgd2hlbiB0aGUgb3JpZ2luIGRvZXNuJ3QgbWF0Y2ggdGhlIGN1cnJlbnQgb3JpZ2luLlxuXHRcdGlmICggcy5jcm9zc0RvbWFpbiA9PSBudWxsICkge1xuXHRcdFx0dXJsQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdFx0Ly8gSUUgdGhyb3dzIGV4Y2VwdGlvbiBvbiBhY2Nlc3NpbmcgdGhlIGhyZWYgcHJvcGVydHkgaWYgdXJsIGlzIG1hbGZvcm1lZCxcblx0XHRcdC8vIGUuZy4gaHR0cDovL2V4YW1wbGUuY29tOjgweC9cblx0XHRcdHRyeSB7XG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gcy51cmw7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD04IC0gMTEgb25seVxuXHRcdFx0XHQvLyBBbmNob3IncyBob3N0IHByb3BlcnR5IGlzbid0IGNvcnJlY3RseSBzZXQgd2hlbiBzLnVybCBpcyByZWxhdGl2ZVxuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHVybEFuY2hvci5ocmVmO1xuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gb3JpZ2luQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgb3JpZ2luQW5jaG9yLmhvc3QgIT09XG5cdFx0XHRcdFx0dXJsQW5jaG9yLnByb3RvY29sICsgXCIvL1wiICsgdXJsQW5jaG9yLmhvc3Q7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhbiBlcnJvciBwYXJzaW5nIHRoZSBVUkwsIGFzc3VtZSBpdCBpcyBjcm9zc0RvbWFpbixcblx0XHRcdFx0Ly8gaXQgY2FuIGJlIHJlamVjdGVkIGJ5IHRoZSB0cmFuc3BvcnQgaWYgaXQgaXMgaW52YWxpZFxuXHRcdFx0XHRzLmNyb3NzRG9tYWluID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb252ZXJ0IGRhdGEgaWYgbm90IGFscmVhZHkgYSBzdHJpbmdcblx0XHRpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmIHR5cGVvZiBzLmRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRzLmRhdGEgPSBqUXVlcnkucGFyYW0oIHMuZGF0YSwgcy50cmFkaXRpb25hbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHByZWZpbHRlcnNcblx0XHRpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGEgcHJlZmlsdGVyLCBzdG9wIHRoZXJlXG5cdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgY2FuIGZpcmUgZ2xvYmFsIGV2ZW50cyBhcyBvZiBub3cgaWYgYXNrZWQgdG9cblx0XHQvLyBEb24ndCBmaXJlIGV2ZW50cyBpZiBqUXVlcnkuZXZlbnQgaXMgdW5kZWZpbmVkIGluIGFuIEFNRC11c2FnZSBzY2VuYXJpbyAoIzE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gIzk2ODI6IHJlbW92ZSBkYXRhIHNvIHRoYXQgaXQncyBub3QgdXNlZCBpbiBhbiBldmVudHVhbCByZXRyeVxuXHRcdFx0XHRkZWxldGUgcy5kYXRhO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgb3IgdXBkYXRlIGFudGktY2FjaGUgcGFyYW0gaWYgbmVlZGVkXG5cdFx0XHRpZiAoIHMuY2FjaGUgPT09IGZhbHNlICkge1xuXHRcdFx0XHRjYWNoZVVSTCA9IGNhY2hlVVJMLnJlcGxhY2UoIHJhbnRpQ2FjaGUsIFwiJDFcIiApO1xuXHRcdFx0XHR1bmNhY2hlZCA9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBcIl89XCIgKyAoIG5vbmNlLmd1aWQrKyApICtcblx0XHRcdFx0XHR1bmNhY2hlZDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUHV0IGhhc2ggYW5kIGFudGktY2FjaGUgb24gdGhlIFVSTCB0aGF0IHdpbGwgYmUgcmVxdWVzdGVkIChnaC0xNzMyKVxuXHRcdFx0cy51cmwgPSBjYWNoZVVSTCArIHVuY2FjaGVkO1xuXG5cdFx0Ly8gQ2hhbmdlICclMjAnIHRvICcrJyBpZiB0aGlzIGlzIGVuY29kZWQgZm9ybSBib2R5IGNvbnRlbnQgKGdoLTI2NTgpXG5cdFx0fSBlbHNlIGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiZcblx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiICkuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICkge1xuXHRcdFx0cy5kYXRhID0gcy5kYXRhLnJlcGxhY2UoIHIyMCwgXCIrXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0aWYgKCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU1vZGlmaWVkLVNpbmNlXCIsIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHRcdGlmICggalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTm9uZS1NYXRjaFwiLCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgY29ycmVjdCBoZWFkZXIsIGlmIGRhdGEgaXMgYmVpbmcgc2VudFxuXHRcdGlmICggcy5kYXRhICYmIHMuaGFzQ29udGVudCAmJiBzLmNvbnRlbnRUeXBlICE9PSBmYWxzZSB8fCBvcHRpb25zLmNvbnRlbnRUeXBlICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJDb250ZW50LVR5cGVcIiwgcy5jb250ZW50VHlwZSApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgQWNjZXB0cyBoZWFkZXIgZm9yIHRoZSBzZXJ2ZXIsIGRlcGVuZGluZyBvbiB0aGUgZGF0YVR5cGVcblx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKFxuXHRcdFx0XCJBY2NlcHRcIixcblx0XHRcdHMuZGF0YVR5cGVzWyAwIF0gJiYgcy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gP1xuXHRcdFx0XHRzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSArXG5cdFx0XHRcdFx0KCBzLmRhdGFUeXBlc1sgMCBdICE9PSBcIipcIiA/IFwiLCBcIiArIGFsbFR5cGVzICsgXCI7IHE9MC4wMVwiIDogXCJcIiApIDpcblx0XHRcdFx0cy5hY2NlcHRzWyBcIipcIiBdXG5cdFx0KTtcblxuXHRcdC8vIENoZWNrIGZvciBoZWFkZXJzIG9wdGlvblxuXHRcdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggaSwgcy5oZWFkZXJzWyBpIF0gKTtcblx0XHR9XG5cblx0XHQvLyBBbGxvdyBjdXN0b20gaGVhZGVycy9taW1ldHlwZXMgYW5kIGVhcmx5IGFib3J0XG5cdFx0aWYgKCBzLmJlZm9yZVNlbmQgJiZcblx0XHRcdCggcy5iZWZvcmVTZW5kLmNhbGwoIGNhbGxiYWNrQ29udGV4dCwganFYSFIsIHMgKSA9PT0gZmFsc2UgfHwgY29tcGxldGVkICkgKSB7XG5cblx0XHRcdC8vIEFib3J0IGlmIG5vdCBkb25lIGFscmVhZHkgYW5kIHJldHVyblxuXHRcdFx0cmV0dXJuIGpxWEhSLmFib3J0KCk7XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnRpbmcgaXMgbm8gbG9uZ2VyIGEgY2FuY2VsbGF0aW9uXG5cdFx0c3RyQWJvcnQgPSBcImFib3J0XCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrcyBvbiBkZWZlcnJlZHNcblx0XHRjb21wbGV0ZURlZmVycmVkLmFkZCggcy5jb21wbGV0ZSApO1xuXHRcdGpxWEhSLmRvbmUoIHMuc3VjY2VzcyApO1xuXHRcdGpxWEhSLmZhaWwoIHMuZXJyb3IgKTtcblxuXHRcdC8vIEdldCB0cmFuc3BvcnRcblx0XHR0cmFuc3BvcnQgPSBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cywgcywgb3B0aW9ucywganFYSFIgKTtcblxuXHRcdC8vIElmIG5vIHRyYW5zcG9ydCwgd2UgYXV0by1hYm9ydFxuXHRcdGlmICggIXRyYW5zcG9ydCApIHtcblx0XHRcdGRvbmUoIC0xLCBcIk5vIFRyYW5zcG9ydFwiICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSAxO1xuXG5cdFx0XHQvLyBTZW5kIGdsb2JhbCBldmVudFxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheFNlbmRcIiwgWyBqcVhIUiwgcyBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHJlcXVlc3Qgd2FzIGFib3J0ZWQgaW5zaWRlIGFqYXhTZW5kLCBzdG9wIHRoZXJlXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaW1lb3V0XG5cdFx0XHRpZiAoIHMuYXN5bmMgJiYgcy50aW1lb3V0ID4gMCApIHtcblx0XHRcdFx0dGltZW91dFRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGpxWEhSLmFib3J0KCBcInRpbWVvdXRcIiApO1xuXHRcdFx0XHR9LCBzLnRpbWVvdXQgKTtcblx0XHRcdH1cblxuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29tcGxldGVkID0gZmFsc2U7XG5cdFx0XHRcdHRyYW5zcG9ydC5zZW5kKCByZXF1ZXN0SGVhZGVycywgZG9uZSApO1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gUmV0aHJvdyBwb3N0LWNvbXBsZXRpb24gZXhjZXB0aW9uc1xuXHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUHJvcGFnYXRlIG90aGVycyBhcyByZXN1bHRzXG5cdFx0XHRcdGRvbmUoIC0xLCBlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gZXZlcnl0aGluZyBpcyBkb25lXG5cdFx0ZnVuY3Rpb24gZG9uZSggc3RhdHVzLCBuYXRpdmVTdGF0dXNUZXh0LCByZXNwb25zZXMsIGhlYWRlcnMgKSB7XG5cdFx0XHR2YXIgaXNTdWNjZXNzLCBzdWNjZXNzLCBlcnJvciwgcmVzcG9uc2UsIG1vZGlmaWVkLFxuXHRcdFx0XHRzdGF0dXNUZXh0ID0gbmF0aXZlU3RhdHVzVGV4dDtcblxuXHRcdFx0Ly8gSWdub3JlIHJlcGVhdCBpbnZvY2F0aW9uc1xuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcGxldGVkID0gdHJ1ZTtcblxuXHRcdFx0Ly8gQ2xlYXIgdGltZW91dCBpZiBpdCBleGlzdHNcblx0XHRcdGlmICggdGltZW91dFRpbWVyICkge1xuXHRcdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0VGltZXIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRGVyZWZlcmVuY2UgdHJhbnNwb3J0IGZvciBlYXJseSBnYXJiYWdlIGNvbGxlY3Rpb25cblx0XHRcdC8vIChubyBtYXR0ZXIgaG93IGxvbmcgdGhlIGpxWEhSIG9iamVjdCB3aWxsIGJlIHVzZWQpXG5cdFx0XHR0cmFuc3BvcnQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIENhY2hlIHJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyA9IGhlYWRlcnMgfHwgXCJcIjtcblxuXHRcdFx0Ly8gU2V0IHJlYWR5U3RhdGVcblx0XHRcdGpxWEhSLnJlYWR5U3RhdGUgPSBzdGF0dXMgPiAwID8gNCA6IDA7XG5cblx0XHRcdC8vIERldGVybWluZSBpZiBzdWNjZXNzZnVsXG5cdFx0XHRpc1N1Y2Nlc3MgPSBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMCB8fCBzdGF0dXMgPT09IDMwNDtcblxuXHRcdFx0Ly8gR2V0IHJlc3BvbnNlIGRhdGFcblx0XHRcdGlmICggcmVzcG9uc2VzICkge1xuXHRcdFx0XHRyZXNwb25zZSA9IGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVXNlIGEgbm9vcCBjb252ZXJ0ZXIgZm9yIG1pc3Npbmcgc2NyaXB0IGJ1dCBub3QgaWYganNvbnBcblx0XHRcdGlmICggIWlzU3VjY2VzcyAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJzY3JpcHRcIiwgcy5kYXRhVHlwZXMgKSA+IC0xICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcImpzb25cIiwgcy5kYXRhVHlwZXMgKSA8IDAgKSB7XG5cdFx0XHRcdHMuY29udmVydGVyc1sgXCJ0ZXh0IHNjcmlwdFwiIF0gPSBmdW5jdGlvbigpIHt9O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb252ZXJ0IG5vIG1hdHRlciB3aGF0ICh0aGF0IHdheSByZXNwb25zZVhYWCBmaWVsZHMgYXJlIGFsd2F5cyBzZXQpXG5cdFx0XHRyZXNwb25zZSA9IGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApO1xuXG5cdFx0XHQvLyBJZiBzdWNjZXNzZnVsLCBoYW5kbGUgdHlwZSBjaGFpbmluZ1xuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cblx0XHRcdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRcdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJMYXN0LU1vZGlmaWVkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcImV0YWdcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSA9IG1vZGlmaWVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGlmIG5vIGNvbnRlbnRcblx0XHRcdFx0aWYgKCBzdGF0dXMgPT09IDIwNCB8fCBzLnR5cGUgPT09IFwiSEVBRFwiICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vY29udGVudFwiO1xuXG5cdFx0XHRcdC8vIGlmIG5vdCBtb2RpZmllZFxuXHRcdFx0XHR9IGVsc2UgaWYgKCBzdGF0dXMgPT09IDMwNCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub3Rtb2RpZmllZFwiO1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgZGF0YSwgbGV0J3MgY29udmVydCBpdFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSByZXNwb25zZS5zdGF0ZTtcblx0XHRcdFx0XHRzdWNjZXNzID0gcmVzcG9uc2UuZGF0YTtcblx0XHRcdFx0XHRlcnJvciA9IHJlc3BvbnNlLmVycm9yO1xuXHRcdFx0XHRcdGlzU3VjY2VzcyA9ICFlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBFeHRyYWN0IGVycm9yIGZyb20gc3RhdHVzVGV4dCBhbmQgbm9ybWFsaXplIGZvciBub24tYWJvcnRzXG5cdFx0XHRcdGVycm9yID0gc3RhdHVzVGV4dDtcblx0XHRcdFx0aWYgKCBzdGF0dXMgfHwgIXN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwiZXJyb3JcIjtcblx0XHRcdFx0XHRpZiAoIHN0YXR1cyA8IDAgKSB7XG5cdFx0XHRcdFx0XHRzdGF0dXMgPSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgZGF0YSBmb3IgdGhlIGZha2UgeGhyIG9iamVjdFxuXHRcdFx0anFYSFIuc3RhdHVzID0gc3RhdHVzO1xuXHRcdFx0anFYSFIuc3RhdHVzVGV4dCA9ICggbmF0aXZlU3RhdHVzVGV4dCB8fCBzdGF0dXNUZXh0ICkgKyBcIlwiO1xuXG5cdFx0XHQvLyBTdWNjZXNzL0Vycm9yXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBzdWNjZXNzLCBzdGF0dXNUZXh0LCBqcVhIUiBdICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQsIGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdGpxWEhSLnN0YXR1c0NvZGUoIHN0YXR1c0NvZGUgKTtcblx0XHRcdHN0YXR1c0NvZGUgPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBpc1N1Y2Nlc3MgPyBcImFqYXhTdWNjZXNzXCIgOiBcImFqYXhFcnJvclwiLFxuXHRcdFx0XHRcdFsganFYSFIsIHMsIGlzU3VjY2VzcyA/IHN1Y2Nlc3MgOiBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbXBsZXRlXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkLmZpcmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsganFYSFIsIHN0YXR1c1RleHQgXSApO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4Q29tcGxldGVcIiwgWyBqcVhIUiwgcyBdICk7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIHRoZSBnbG9iYWwgQUpBWCBjb3VudGVyXG5cdFx0XHRcdGlmICggISggLS1qUXVlcnkuYWN0aXZlICkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0b3BcIiApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpxWEhSO1xuXHR9LFxuXG5cdGdldEpTT046IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIGRhdGEsIGNhbGxiYWNrLCBcImpzb25cIiApO1xuXHR9LFxuXG5cdGdldFNjcmlwdDogZnVuY3Rpb24oIHVybCwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgdW5kZWZpbmVkLCBjYWxsYmFjaywgXCJzY3JpcHRcIiApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwiZ2V0XCIsIFwicG9zdFwiIF0sIGZ1bmN0aW9uKCBfaSwgbWV0aG9kICkge1xuXHRqUXVlcnlbIG1ldGhvZCBdID0gZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2ssIHR5cGUgKSB7XG5cblx0XHQvLyBTaGlmdCBhcmd1bWVudHMgaWYgZGF0YSBhcmd1bWVudCB3YXMgb21pdHRlZFxuXHRcdGlmICggaXNGdW5jdGlvbiggZGF0YSApICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgY2FsbGJhY2s7XG5cdFx0XHRjYWxsYmFjayA9IGRhdGE7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZSB1cmwgY2FuIGJlIGFuIG9wdGlvbnMgb2JqZWN0ICh3aGljaCB0aGVuIG11c3QgaGF2ZSAudXJsKVxuXHRcdHJldHVybiBqUXVlcnkuYWpheCggalF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cdFx0XHR0eXBlOiBtZXRob2QsXG5cdFx0XHRkYXRhVHlwZTogdHlwZSxcblx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRzdWNjZXNzOiBjYWxsYmFja1xuXHRcdH0sIGpRdWVyeS5pc1BsYWluT2JqZWN0KCB1cmwgKSAmJiB1cmwgKSApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdHZhciBpO1xuXHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRpZiAoIGkudG9Mb3dlckNhc2UoKSA9PT0gXCJjb250ZW50LXR5cGVcIiApIHtcblx0XHRcdHMuY29udGVudFR5cGUgPSBzLmhlYWRlcnNbIGkgXSB8fCBcIlwiO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbmpRdWVyeS5fZXZhbFVybCA9IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMsIGRvYyApIHtcblx0cmV0dXJuIGpRdWVyeS5hamF4KCB7XG5cdFx0dXJsOiB1cmwsXG5cblx0XHQvLyBNYWtlIHRoaXMgZXhwbGljaXQsIHNpbmNlIHVzZXIgY2FuIG92ZXJyaWRlIHRoaXMgdGhyb3VnaCBhamF4U2V0dXAgKCMxMTI2NClcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGRhdGFUeXBlOiBcInNjcmlwdFwiLFxuXHRcdGNhY2hlOiB0cnVlLFxuXHRcdGFzeW5jOiBmYWxzZSxcblx0XHRnbG9iYWw6IGZhbHNlLFxuXG5cdFx0Ly8gT25seSBldmFsdWF0ZSB0aGUgcmVzcG9uc2UgaWYgaXQgaXMgc3VjY2Vzc2Z1bCAoZ2gtNDEyNilcblx0XHQvLyBkYXRhRmlsdGVyIGlzIG5vdCBpbnZva2VkIGZvciBmYWlsdXJlIHJlc3BvbnNlcywgc28gdXNpbmcgaXQgaW5zdGVhZFxuXHRcdC8vIG9mIHRoZSBkZWZhdWx0IGNvbnZlcnRlciBpcyBrbHVkZ3kgYnV0IGl0IHdvcmtzLlxuXHRcdGNvbnZlcnRlcnM6IHtcblx0XHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oKSB7fVxuXHRcdH0sXG5cdFx0ZGF0YUZpbHRlcjogZnVuY3Rpb24oIHJlc3BvbnNlICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHJlc3BvbnNlLCBvcHRpb25zLCBkb2MgKTtcblx0XHR9XG5cdH0gKTtcbn07XG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR3cmFwQWxsOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgd3JhcDtcblxuXHRcdGlmICggdGhpc1sgMCBdICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRcdGh0bWwgPSBodG1sLmNhbGwoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUaGUgZWxlbWVudHMgdG8gd3JhcCB0aGUgdGFyZ2V0IGFyb3VuZFxuXHRcdFx0d3JhcCA9IGpRdWVyeSggaHRtbCwgdGhpc1sgMCBdLm93bmVyRG9jdW1lbnQgKS5lcSggMCApLmNsb25lKCB0cnVlICk7XG5cblx0XHRcdGlmICggdGhpc1sgMCBdLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHdyYXAuaW5zZXJ0QmVmb3JlKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcC5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IHRoaXM7XG5cblx0XHRcdFx0d2hpbGUgKCBlbGVtLmZpcnN0RWxlbWVudENoaWxkICkge1xuXHRcdFx0XHRcdGVsZW0gPSBlbGVtLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGVsZW07XG5cdFx0XHR9ICkuYXBwZW5kKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0d3JhcElubmVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwSW5uZXIoIGh0bWwuY2FsbCggdGhpcywgaSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGpRdWVyeSggdGhpcyApLFxuXHRcdFx0XHRjb250ZW50cyA9IHNlbGYuY29udGVudHMoKTtcblxuXHRcdFx0aWYgKCBjb250ZW50cy5sZW5ndGggKSB7XG5cdFx0XHRcdGNvbnRlbnRzLndyYXBBbGwoIGh0bWwgKTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c2VsZi5hcHBlbmQoIGh0bWwgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0d3JhcDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIGh0bWxJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggaHRtbCApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS53cmFwQWxsKCBodG1sSXNGdW5jdGlvbiA/IGh0bWwuY2FsbCggdGhpcywgaSApIDogaHRtbCApO1xuXHRcdH0gKTtcblx0fSxcblxuXHR1bndyYXA6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR0aGlzLnBhcmVudCggc2VsZWN0b3IgKS5ub3QoIFwiYm9keVwiICkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkoIHRoaXMgKS5yZXBsYWNlV2l0aCggdGhpcy5jaGlsZE5vZGVzICk7XG5cdFx0fSApO1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59ICk7XG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5oaWRkZW4gPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICFqUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUoIGVsZW0gKTtcbn07XG5qUXVlcnkuZXhwci5wc2V1ZG9zLnZpc2libGUgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuICEhKCBlbGVtLm9mZnNldFdpZHRoIHx8IGVsZW0ub2Zmc2V0SGVpZ2h0IHx8IGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKTtcbn07XG5cblxuXG5cbmpRdWVyeS5hamF4U2V0dGluZ3MueGhyID0gZnVuY3Rpb24oKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIG5ldyB3aW5kb3cuWE1MSHR0cFJlcXVlc3QoKTtcblx0fSBjYXRjaCAoIGUgKSB7fVxufTtcblxudmFyIHhoclN1Y2Nlc3NTdGF0dXMgPSB7XG5cblx0XHQvLyBGaWxlIHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIGNvZGUgMCwgYXNzdW1lIDIwMFxuXHRcdDA6IDIwMCxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0Ly8gIzE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSAjODYwNSwgIzE0MjA3XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblx0XHRcdFx0XHRcdFx0XHRcdHhoclN1Y2Nlc3NTdGF0dXNbIHhoci5zdGF0dXMgXSB8fCB4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHQsXG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJRTkgaGFzIG5vIFhIUjIgYnV0IHRocm93cyBvbiBiaW5hcnkgKHRyYWMtMTE0MjYpXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBGb3IgWEhSMiBub24tdGV4dCwgbGV0IHRoZSBjYWxsZXIgaGFuZGxlIGl0IChnaC0yNDk4KVxuXHRcdFx0XHRcdFx0XHRcdFx0KCB4aHIucmVzcG9uc2VUeXBlIHx8IFwidGV4dFwiICkgIT09IFwidGV4dFwiICB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHhoci5yZXNwb25zZVRleHQgIT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IGJpbmFyeTogeGhyLnJlc3BvbnNlIH0gOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7IHRleHQ6IHhoci5yZXNwb25zZVRleHQgfSxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuXHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIExpc3RlbiB0byBldmVudHNcblx0XHRcdFx0eGhyLm9ubG9hZCA9IGNhbGxiYWNrKCk7XG5cdFx0XHRcdGVycm9yQ2FsbGJhY2sgPSB4aHIub25lcnJvciA9IHhoci5vbnRpbWVvdXQgPSBjYWxsYmFjayggXCJlcnJvclwiICk7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0XHRcdC8vIFVzZSBvbnJlYWR5c3RhdGVjaGFuZ2UgdG8gcmVwbGFjZSBvbmFib3J0XG5cdFx0XHRcdC8vIHRvIGhhbmRsZSB1bmNhdWdodCBhYm9ydHNcblx0XHRcdFx0aWYgKCB4aHIub25hYm9ydCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHhoci5vbmFib3J0ID0gZXJyb3JDYWxsYmFjaztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIENoZWNrIHJlYWR5U3RhdGUgYmVmb3JlIHRpbWVvdXQgYXMgaXQgY2hhbmdlc1xuXHRcdFx0XHRcdFx0aWYgKCB4aHIucmVhZHlTdGF0ZSA9PT0gNCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBbGxvdyBvbmVycm9yIHRvIGJlIGNhbGxlZCBmaXJzdCxcblx0XHRcdFx0XHRcdFx0Ly8gYnV0IHRoYXQgd2lsbCBub3QgaGFuZGxlIGEgbmF0aXZlIGFib3J0XG5cdFx0XHRcdFx0XHRcdC8vIEFsc28sIHNhdmUgZXJyb3JDYWxsYmFjayB0byBhIHZhcmlhYmxlXG5cdFx0XHRcdFx0XHRcdC8vIGFzIHhoci5vbmVycm9yIGNhbm5vdCBiZSBhY2Nlc3NlZFxuXHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGVycm9yQ2FsbGJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBhYm9ydCBjYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGNhbGxiYWNrKCBcImFib3J0XCIgKTtcblxuXHRcdFx0XHR0cnkge1xuXG5cdFx0XHRcdFx0Ly8gRG8gc2VuZCB0aGUgcmVxdWVzdCAodGhpcyBtYXkgcmFpc2UgYW4gZXhjZXB0aW9uKVxuXHRcdFx0XHRcdHhoci5zZW5kKCBvcHRpb25zLmhhc0NvbnRlbnQgJiYgb3B0aW9ucy5kYXRhIHx8IG51bGwgKTtcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHQvLyAjMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXMubW91c2VlbnRlciggZm5PdmVyICkubW91c2VsZWF2ZSggZm5PdXQgfHwgZm5PdmVyICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goXG5cdCggXCJibHVyIGZvY3VzIGZvY3VzaW4gZm9jdXNvdXQgcmVzaXplIHNjcm9sbCBjbGljayBkYmxjbGljayBcIiArXG5cdFwibW91c2Vkb3duIG1vdXNldXAgbW91c2Vtb3ZlIG1vdXNlb3ZlciBtb3VzZW91dCBtb3VzZWVudGVyIG1vdXNlbGVhdmUgXCIgK1xuXHRcImNoYW5nZSBzZWxlY3Qgc3VibWl0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgY29udGV4dG1lbnVcIiApLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cblx0XHQvLyBIYW5kbGUgZXZlbnQgYmluZGluZ1xuXHRcdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIGRhdGEsIGZuICkge1xuXHRcdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPiAwID9cblx0XHRcdFx0dGhpcy5vbiggbmFtZSwgbnVsbCwgZGF0YSwgZm4gKSA6XG5cdFx0XHRcdHRoaXMudHJpZ2dlciggbmFtZSApO1xuXHRcdH07XG5cdH1cbik7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seVxuLy8gTWFrZSBzdXJlIHdlIHRyaW0gQk9NIGFuZCBOQlNQXG52YXIgcnRyaW0gPSAvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCJcIiApO1xufTtcblxuXG5cbi8vIFJlZ2lzdGVyIGFzIGEgbmFtZWQgQU1EIG1vZHVsZSwgc2luY2UgalF1ZXJ5IGNhbiBiZSBjb25jYXRlbmF0ZWQgd2l0aCBvdGhlclxuLy8gZmlsZXMgdGhhdCBtYXkgdXNlIGRlZmluZSwgYnV0IG5vdCB2aWEgYSBwcm9wZXIgY29uY2F0ZW5hdGlvbiBzY3JpcHQgdGhhdFxuLy8gdW5kZXJzdGFuZHMgYW5vbnltb3VzIEFNRCBtb2R1bGVzLiBBIG5hbWVkIEFNRCBpcyBzYWZlc3QgYW5kIG1vc3Qgcm9idXN0XG4vLyB3YXkgdG8gcmVnaXN0ZXIuIExvd2VyY2FzZSBqcXVlcnkgaXMgdXNlZCBiZWNhdXNlIEFNRCBtb2R1bGUgbmFtZXMgYXJlXG4vLyBkZXJpdmVkIGZyb20gZmlsZSBuYW1lcywgYW5kIGpRdWVyeSBpcyBub3JtYWxseSBkZWxpdmVyZWQgaW4gYSBsb3dlcmNhc2Vcbi8vIGZpbGUgbmFtZS4gRG8gdGhpcyBhZnRlciBjcmVhdGluZyB0aGUgZ2xvYmFsIHNvIHRoYXQgaWYgYW4gQU1EIG1vZHVsZSB3YW50c1xuLy8gdG8gY2FsbCBub0NvbmZsaWN0IHRvIGhpZGUgdGhpcyB2ZXJzaW9uIG9mIGpRdWVyeSwgaXQgd2lsbCB3b3JrLlxuXG4vLyBOb3RlIHRoYXQgZm9yIG1heGltdW0gcG9ydGFiaWxpdHksIGxpYnJhcmllcyB0aGF0IGFyZSBub3QgalF1ZXJ5IHNob3VsZFxuLy8gZGVjbGFyZSB0aGVtc2VsdmVzIGFzIGFub255bW91cyBtb2R1bGVzLCBhbmQgYXZvaWQgc2V0dGluZyBhIGdsb2JhbCBpZiBhblxuLy8gQU1EIGxvYWRlciBpcyBwcmVzZW50LiBqUXVlcnkgaXMgYSBzcGVjaWFsIGNhc2UuIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWVcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9qcmJ1cmtlL3JlcXVpcmVqcy93aWtpL1VwZGF0aW5nLWV4aXN0aW5nLWxpYnJhcmllcyN3aWtpLWFub25cblxuaWYgKCB0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCApIHtcblx0ZGVmaW5lKCBcImpxdWVyeVwiLCBbXSwgZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGpRdWVyeTtcblx0fSApO1xufVxuXG5cblxuXG52YXJcblxuXHQvLyBNYXAgb3ZlciBqUXVlcnkgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0X2pRdWVyeSA9IHdpbmRvdy5qUXVlcnksXG5cblx0Ly8gTWFwIG92ZXIgdGhlICQgaW4gY2FzZSBvZiBvdmVyd3JpdGVcblx0XyQgPSB3aW5kb3cuJDtcblxualF1ZXJ5Lm5vQ29uZmxpY3QgPSBmdW5jdGlvbiggZGVlcCApIHtcblx0aWYgKCB3aW5kb3cuJCA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy4kID0gXyQ7XG5cdH1cblxuXHRpZiAoIGRlZXAgJiYgd2luZG93LmpRdWVyeSA9PT0galF1ZXJ5ICkge1xuXHRcdHdpbmRvdy5qUXVlcnkgPSBfalF1ZXJ5O1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeTtcbn07XG5cbi8vIEV4cG9zZSBqUXVlcnkgYW5kICQgaWRlbnRpZmllcnMsIGV2ZW4gaW4gQU1EXG4vLyAoIzcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICgjMTM1NjYpXG5pZiAoIHR5cGVvZiBub0dsb2JhbCA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0d2luZG93LmpRdWVyeSA9IHdpbmRvdy4kID0galF1ZXJ5O1xufVxuXG5cblxuXG5yZXR1cm4galF1ZXJ5O1xufSApO1xuIiwgIi8qIFByaXNtSlMgMS4yOC4wXG5odHRwczovL3ByaXNtanMuY29tL2Rvd25sb2FkLmh0bWwjdGhlbWVzPXByaXNtLXRvbW9ycm93Jmxhbmd1YWdlcz1tYXJrdXArY3NzK2NsaWtlK2phdmFzY3JpcHQrYWJhcCthYm5mK2FjdGlvbnNjcmlwdCthZGErYWdkYSthbCthbnRscjQrYXBhY2hlY29uZithcGV4K2FwbCthcHBsZXNjcmlwdCthcWwrYXJkdWlubythcmZmK2FybWFzbSthcnR1cm8rYXNjaWlkb2MrYXNwbmV0K2FzbTY1MDIrYXNtYXRtZWwrYXV0b2hvdGtleSthdXRvaXQrYXZpc3ludGgrYXZyby1pZGwrYXdrK2Jhc2grYmFzaWMrYmF0Y2grYmJjb2RlK2JpY2VwK2JpcmIrYmlzb24rYm5mK2JyYWluZnVjayticmlnaHRzY3JpcHQrYnJvK2JzbCtjK2NzaGFycCtjcHArY2ZzY3JpcHQrY2hhaXNjcmlwdCtjaWwrY2xvanVyZStjbWFrZStjb2JvbCtjb2ZmZWVzY3JpcHQrY29uY3VybmFzK2NzcCtjb29rbGFuZytjb3ErY3J5c3RhbCtjc3MtZXh0cmFzK2NzditjdWUrY3lwaGVyK2QrZGFydCtkYXRhd2VhdmUrZGF4K2RoYWxsK2RpZmYrZGphbmdvK2Rucy16b25lLWZpbGUrZG9ja2VyK2RvdCtlYm5mK2VkaXRvcmNvbmZpZytlaWZmZWwrZWpzK2VsaXhpcitlbG0rZXRsdWErZXJiK2VybGFuZytleGNlbC1mb3JtdWxhK2ZzaGFycCtmYWN0b3IrZmFsc2UrZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzK2Zsb3crZm9ydHJhbitmdGwrZ21sK2dhcCtnY29kZStnZHNjcmlwdCtnZWRjb20rZ2V0dGV4dCtnaGVya2luK2dpdCtnbHNsK2duK2xpbmtlci1zY3JpcHQrZ28rZ28tbW9kdWxlK2dyYWRsZStncmFwaHFsK2dyb292eStoYW1sK2hhbmRsZWJhcnMraGFza2VsbCtoYXhlK2hjbCtobHNsK2hvb24raHR0cCtocGtwK2hzdHMraWNoaWdvamFtK2ljb24raWN1LW1lc3NhZ2UtZm9ybWF0K2lkcmlzK2lnbm9yZStpbmZvcm03K2luaStpbytqK2phdmEramF2YWRvYytqYXZhZG9jbGlrZStqYXZhc3RhY2t0cmFjZStqZXhsK2pvbGllK2pxK2pzZG9jK2pzLWV4dHJhcytqc29uK2pzb241K2pzb25wK2pzc3RhY2t0cmFjZStqcy10ZW1wbGF0ZXMranVsaWEra2VlcGFsaXZlZCtrZXltYW4ra290bGluK2t1bWlyK2t1c3RvK2xhdGV4K2xhdHRlK2xlc3MrbGlseXBvbmQrbGlxdWlkK2xpc3ArbGl2ZXNjcmlwdCtsbHZtK2xvZytsb2xjb2RlK2x1YSttYWdtYSttYWtlZmlsZSttYXJrZG93bittYXJrdXAtdGVtcGxhdGluZyttYXRhK21hdGxhYittYXhzY3JpcHQrbWVsK21lcm1haWQrbWl6YXIrbW9uZ29kYittb25rZXkrbW9vbnNjcmlwdCtuMXFsK240anMrbmFuZDJ0ZXRyaXMtaGRsK25hbmlzY3JpcHQrbmFzbStuZW9uK25ldm9kK25naW54K25pbStuaXgrbnNpcytvYmplY3RpdmVjK29jYW1sK29kaW4rb3BlbmNsK29wZW5xYXNtK296K3BhcmlncCtwYXJzZXIrcGFzY2FsK3Bhc2NhbGlnbytwc2wrcGNheGlzK3Blb3BsZWNvZGUrcGVybCtwaHArcGhwZG9jK3BocC1leHRyYXMrcGxhbnQtdW1sK3Bsc3FsK3Bvd2VycXVlcnkrcG93ZXJzaGVsbCtwcm9jZXNzaW5nK3Byb2xvZytwcm9tcWwrcHJvcGVydGllcytwcm90b2J1ZitwdWcrcHVwcGV0K3B1cmUrcHVyZWJhc2ljK3B1cmVzY3JpcHQrcHl0aG9uK3FzaGFycCtxK3FtbCtxb3JlK3IrcmFja2V0K2NzaHRtbCtqc3grdHN4K3JlYXNvbityZWdleCtyZWdvK3JlbnB5K3Jlc2NyaXB0K3Jlc3QrcmlwK3JvYm9jb25mK3JvYm90ZnJhbWV3b3JrK3J1YnkrcnVzdCtzYXMrc2FzcytzY3NzK3NjYWxhK3NjaGVtZStzaGVsbC1zZXNzaW9uK3NtYWxpK3NtYWxsdGFsaytzbWFydHkrc21sK3NvbGlkaXR5K3NvbHV0aW9uLWZpbGUrc295K3NwYXJxbCtzcGx1bmstc3BsK3NxZitzcWwrc3F1aXJyZWwrc3RhbitzdGF0YStpZWNzdCtzdHlsdXMrc3VwZXJjb2xsaWRlcitzd2lmdCtzeXN0ZW1kK3Q0LXRlbXBsYXRpbmcrdDQtY3MrdDQtdmIrdGFwK3RjbCt0dDIrdGV4dGlsZSt0b21sK3RyZW1vcit0dXJ0bGUrdHdpZyt0eXBlc2NyaXB0K3R5cG9zY3JpcHQrdW5yZWFsc2NyaXB0K3VvcmF6b3IrdXJpK3YrdmFsYSt2Ym5ldCt2ZWxvY2l0eSt2ZXJpbG9nK3ZoZGwrdmltK3Zpc3VhbC1iYXNpYyt3YXJwc2NyaXB0K3dhc20rd2ViLWlkbCt3Z3NsK3dpa2krd29sZnJhbSt3cmVuK3hlb3JhK3htbC1kb2MreG9qbyt4cXVlcnkreWFtbCt5YW5nK3ppZyZwbHVnaW5zPWxpbmUtbnVtYmVycytmaWxlLWhpZ2hsaWdodCAqL1xuLy8vIDxyZWZlcmVuY2UgbGliPVwiV2ViV29ya2VyXCIvPlxuXG52YXIgX3NlbGYgPSAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpXG5cdD8gd2luZG93ICAgLy8gaWYgaW4gYnJvd3NlclxuXHQ6IChcblx0XHQodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlICE9PSAndW5kZWZpbmVkJyAmJiBzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUpXG5cdFx0XHQ/IHNlbGYgLy8gaWYgaW4gd29ya2VyXG5cdFx0XHQ6IHt9ICAgLy8gaWYgaW4gbm9kZSBqc1xuXHQpO1xuXG4vKipcbiAqIFByaXNtOiBMaWdodHdlaWdodCwgcm9idXN0LCBlbGVnYW50IHN5bnRheCBoaWdobGlnaHRpbmdcbiAqXG4gKiBAbGljZW5zZSBNSVQgPGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUPlxuICogQGF1dGhvciBMZWEgVmVyb3UgPGh0dHBzOi8vbGVhLnZlcm91Lm1lPlxuICogQG5hbWVzcGFjZVxuICogQHB1YmxpY1xuICovXG52YXIgUHJpc20gPSAoZnVuY3Rpb24gKF9zZWxmKSB7XG5cblx0Ly8gUHJpdmF0ZSBoZWxwZXIgdmFyc1xuXHR2YXIgbGFuZyA9IC8oPzpefFxccylsYW5nKD86dWFnZSk/LShbXFx3LV0rKSg/PVxcc3wkKS9pO1xuXHR2YXIgdW5pcXVlSWQgPSAwO1xuXG5cdC8vIFRoZSBncmFtbWFyIG9iamVjdCBmb3IgcGxhaW50ZXh0XG5cdHZhciBwbGFpblRleHRHcmFtbWFyID0ge307XG5cblxuXHR2YXIgXyA9IHtcblx0XHQvKipcblx0XHQgKiBCeSBkZWZhdWx0LCBQcmlzbSB3aWxsIGF0dGVtcHQgdG8gaGlnaGxpZ2h0IGFsbCBjb2RlIGVsZW1lbnRzIChieSBjYWxsaW5nIHtAbGluayBQcmlzbS5oaWdobGlnaHRBbGx9KSBvbiB0aGVcblx0XHQgKiBjdXJyZW50IHBhZ2UgYWZ0ZXIgdGhlIHBhZ2UgZmluaXNoZWQgbG9hZGluZy4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gaWYgZS5nLiB5b3Ugd2FudGVkIHRvIGFzeW5jaHJvbm91c2x5IGxvYWRcblx0XHQgKiBhZGRpdGlvbmFsIGxhbmd1YWdlcyBvciBwbHVnaW5zIHlvdXJzZWxmLlxuXHRcdCAqXG5cdFx0ICogQnkgc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCwgUHJpc20gd2lsbCBub3QgYXV0b21hdGljYWxseSBoaWdobGlnaHQgYWxsIGNvZGUgZWxlbWVudHMgb24gdGhlIHBhZ2UuXG5cdFx0ICpcblx0XHQgKiBZb3Ugb2J2aW91c2x5IGhhdmUgdG8gY2hhbmdlIHRoaXMgdmFsdWUgYmVmb3JlIHRoZSBhdXRvbWF0aWMgaGlnaGxpZ2h0aW5nIHN0YXJ0ZWQuIFRvIGRvIHRoaXMsIHlvdSBjYW4gYWRkIGFuXG5cdFx0ICogZW1wdHkgUHJpc20gb2JqZWN0IGludG8gdGhlIGdsb2JhbCBzY29wZSBiZWZvcmUgbG9hZGluZyB0aGUgUHJpc20gc2NyaXB0IGxpa2UgdGhpczpcblx0XHQgKlxuXHRcdCAqIGBgYGpzXG5cdFx0ICogd2luZG93LlByaXNtID0gd2luZG93LlByaXNtIHx8IHt9O1xuXHRcdCAqIFByaXNtLm1hbnVhbCA9IHRydWU7XG5cdFx0ICogLy8gYWRkIGEgbmV3IDxzY3JpcHQ+IHRvIGxvYWQgUHJpc20ncyBzY3JpcHRcblx0XHQgKiBgYGBcblx0XHQgKlxuXHRcdCAqIEBkZWZhdWx0IGZhbHNlXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdG1hbnVhbDogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20ubWFudWFsLFxuXHRcdC8qKlxuXHRcdCAqIEJ5IGRlZmF1bHQsIGlmIFByaXNtIGlzIGluIGEgd2ViIHdvcmtlciwgaXQgYXNzdW1lcyB0aGF0IGl0IGlzIGluIGEgd29ya2VyIGl0IGNyZWF0ZWQgaXRzZWxmLCBzbyBpdCB1c2VzXG5cdFx0ICogYGFkZEV2ZW50TGlzdGVuZXJgIHRvIGNvbW11bmljYXRlIHdpdGggaXRzIHBhcmVudCBpbnN0YW5jZS4gSG93ZXZlciwgaWYgeW91J3JlIHVzaW5nIFByaXNtIG1hbnVhbGx5IGluIHlvdXJcblx0XHQgKiBvd24gd29ya2VyLCB5b3UgZG9uJ3Qgd2FudCBpdCB0byBkbyB0aGlzLlxuXHRcdCAqXG5cdFx0ICogQnkgc2V0dGluZyB0aGlzIHZhbHVlIHRvIGB0cnVlYCwgUHJpc20gd2lsbCBub3QgYWRkIGl0cyBvd24gbGlzdGVuZXJzIHRvIHRoZSB3b3JrZXIuXG5cdFx0ICpcblx0XHQgKiBZb3Ugb2J2aW91c2x5IGhhdmUgdG8gY2hhbmdlIHRoaXMgdmFsdWUgYmVmb3JlIFByaXNtIGV4ZWN1dGVzLiBUbyBkbyB0aGlzLCB5b3UgY2FuIGFkZCBhblxuXHRcdCAqIGVtcHR5IFByaXNtIG9iamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgYmVmb3JlIGxvYWRpbmcgdGhlIFByaXNtIHNjcmlwdCBsaWtlIHRoaXM6XG5cdFx0ICpcblx0XHQgKiBgYGBqc1xuXHRcdCAqIHdpbmRvdy5QcmlzbSA9IHdpbmRvdy5QcmlzbSB8fCB7fTtcblx0XHQgKiBQcmlzbS5kaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXIgPSB0cnVlO1xuXHRcdCAqIC8vIExvYWQgUHJpc20ncyBzY3JpcHRcblx0XHQgKiBgYGBcblx0XHQgKlxuXHRcdCAqIEBkZWZhdWx0IGZhbHNlXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcjogX3NlbGYuUHJpc20gJiYgX3NlbGYuUHJpc20uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyLFxuXG5cdFx0LyoqXG5cdFx0ICogQSBuYW1lc3BhY2UgZm9yIHV0aWxpdHkgbWV0aG9kcy5cblx0XHQgKlxuXHRcdCAqIEFsbCBmdW5jdGlvbiBpbiB0aGlzIG5hbWVzcGFjZSB0aGF0IGFyZSBub3QgZXhwbGljaXRseSBtYXJrZWQgYXMgX3B1YmxpY18gYXJlIGZvciBfX2ludGVybmFsIHVzZSBvbmx5X18gYW5kIG1heVxuXHRcdCAqIGNoYW5nZSBvciBkaXNhcHBlYXIgYXQgYW55IHRpbWUuXG5cdFx0ICpcblx0XHQgKiBAbmFtZXNwYWNlXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICovXG5cdFx0dXRpbDoge1xuXHRcdFx0ZW5jb2RlOiBmdW5jdGlvbiBlbmNvZGUodG9rZW5zKSB7XG5cdFx0XHRcdGlmICh0b2tlbnMgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgVG9rZW4odG9rZW5zLnR5cGUsIGVuY29kZSh0b2tlbnMuY29udGVudCksIHRva2Vucy5hbGlhcyk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbnMpKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRva2Vucy5tYXAoZW5jb2RlKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4gdG9rZW5zLnJlcGxhY2UoLyYvZywgJyZhbXA7JykucmVwbGFjZSgvPC9nLCAnJmx0OycpLnJlcGxhY2UoL1xcdTAwYTAvZywgJyAnKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSB0eXBlIG9mIHRoZSBnaXZlbiB2YWx1ZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge2FueX0gb1xuXHRcdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHRcdCAqIEBleGFtcGxlXG5cdFx0XHQgKiB0eXBlKG51bGwpICAgICAgPT09ICdOdWxsJ1xuXHRcdFx0ICogdHlwZSh1bmRlZmluZWQpID09PSAnVW5kZWZpbmVkJ1xuXHRcdFx0ICogdHlwZSgxMjMpICAgICAgID09PSAnTnVtYmVyJ1xuXHRcdFx0ICogdHlwZSgnZm9vJykgICAgID09PSAnU3RyaW5nJ1xuXHRcdFx0ICogdHlwZSh0cnVlKSAgICAgID09PSAnQm9vbGVhbidcblx0XHRcdCAqIHR5cGUoWzEsIDJdKSAgICA9PT0gJ0FycmF5J1xuXHRcdFx0ICogdHlwZSh7fSkgICAgICAgID09PSAnT2JqZWN0J1xuXHRcdFx0ICogdHlwZShTdHJpbmcpICAgID09PSAnRnVuY3Rpb24nXG5cdFx0XHQgKiB0eXBlKC9hYmMrLykgICAgPT09ICdSZWdFeHAnXG5cdFx0XHQgKi9cblx0XHRcdHR5cGU6IGZ1bmN0aW9uIChvKSB7XG5cdFx0XHRcdHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIGEgdW5pcXVlIG51bWJlciBmb3IgdGhlIGdpdmVuIG9iamVjdC4gTGF0ZXIgY2FsbHMgd2lsbCBzdGlsbCByZXR1cm4gdGhlIHNhbWUgbnVtYmVyLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcblx0XHRcdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdFx0XHQgKi9cblx0XHRcdG9iaklkOiBmdW5jdGlvbiAob2JqKSB7XG5cdFx0XHRcdGlmICghb2JqWydfX2lkJ10pIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAnX19pZCcsIHsgdmFsdWU6ICsrdW5pcXVlSWQgfSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG9ialsnX19pZCddO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDcmVhdGVzIGEgZGVlcCBjbG9uZSBvZiB0aGUgZ2l2ZW4gb2JqZWN0LlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZSBtYWluIGludGVuZGVkIHVzZSBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGNsb25lIGxhbmd1YWdlIGRlZmluaXRpb25zLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7VH0gb1xuXHRcdFx0ICogQHBhcmFtIHtSZWNvcmQ8bnVtYmVyLCBhbnk+fSBbdmlzaXRlZF1cblx0XHRcdCAqIEByZXR1cm5zIHtUfVxuXHRcdFx0ICogQHRlbXBsYXRlIFRcblx0XHRcdCAqL1xuXHRcdFx0Y2xvbmU6IGZ1bmN0aW9uIGRlZXBDbG9uZShvLCB2aXNpdGVkKSB7XG5cdFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXG5cdFx0XHRcdHZhciBjbG9uZTsgdmFyIGlkO1xuXHRcdFx0XHRzd2l0Y2ggKF8udXRpbC50eXBlKG8pKSB7XG5cdFx0XHRcdFx0Y2FzZSAnT2JqZWN0Jzpcblx0XHRcdFx0XHRcdGlkID0gXy51dGlsLm9iaklkKG8pO1xuXHRcdFx0XHRcdFx0aWYgKHZpc2l0ZWRbaWRdKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2aXNpdGVkW2lkXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNsb25lID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBhbnk+fSAqLyAoe30pO1xuXHRcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcblxuXHRcdFx0XHRcdFx0Zm9yICh2YXIga2V5IGluIG8pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG8uaGFzT3duUHJvcGVydHkoa2V5KSkge1xuXHRcdFx0XHRcdFx0XHRcdGNsb25lW2tleV0gPSBkZWVwQ2xvbmUob1trZXldLCB2aXNpdGVkKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRyZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovIChjbG9uZSk7XG5cblx0XHRcdFx0XHRjYXNlICdBcnJheSc6XG5cdFx0XHRcdFx0XHRpZCA9IF8udXRpbC5vYmpJZChvKTtcblx0XHRcdFx0XHRcdGlmICh2aXNpdGVkW2lkXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmlzaXRlZFtpZF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdFx0dmlzaXRlZFtpZF0gPSBjbG9uZTtcblxuXHRcdFx0XHRcdFx0KC8qKiBAdHlwZSB7QXJyYXl9ICovKC8qKiBAdHlwZSB7YW55fSAqLyhvKSkpLmZvckVhY2goZnVuY3Rpb24gKHYsIGkpIHtcblx0XHRcdFx0XHRcdFx0Y2xvbmVbaV0gPSBkZWVwQ2xvbmUodiwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIC8qKiBAdHlwZSB7YW55fSAqLyAoY2xvbmUpO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBvO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIFByaXNtIGxhbmd1YWdlIG9mIHRoZSBnaXZlbiBlbGVtZW50IHNldCBieSBhIGBsYW5ndWFnZS14eHh4YCBvciBgbGFuZy14eHh4YCBjbGFzcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBJZiBubyBsYW5ndWFnZSBpcyBzZXQgZm9yIHRoZSBlbGVtZW50IG9yIHRoZSBlbGVtZW50IGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgYG5vbmVgIHdpbGwgYmUgcmV0dXJuZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdFx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHRcdFx0ICovXG5cdFx0XHRnZXRMYW5ndWFnZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdFx0d2hpbGUgKGVsZW1lbnQpIHtcblx0XHRcdFx0XHR2YXIgbSA9IGxhbmcuZXhlYyhlbGVtZW50LmNsYXNzTmFtZSk7XG5cdFx0XHRcdFx0aWYgKG0pIHtcblx0XHRcdFx0XHRcdHJldHVybiBtWzFdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICdub25lJztcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogU2V0cyB0aGUgUHJpc20gYGxhbmd1YWdlLXh4eHhgIGNsYXNzIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdFx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHRcdCAqL1xuXHRcdFx0c2V0TGFuZ3VhZ2U6IGZ1bmN0aW9uIChlbGVtZW50LCBsYW5ndWFnZSkge1xuXHRcdFx0XHQvLyByZW1vdmUgYWxsIGBsYW5ndWFnZS14eHh4YCBjbGFzc2VzXG5cdFx0XHRcdC8vICh0aGlzIG1pZ2h0IGxlYXZlIGJlaGluZCBhIGxlYWRpbmcgc3BhY2UpXG5cdFx0XHRcdGVsZW1lbnQuY2xhc3NOYW1lID0gZWxlbWVudC5jbGFzc05hbWUucmVwbGFjZShSZWdFeHAobGFuZywgJ2dpJyksICcnKTtcblxuXHRcdFx0XHQvLyBhZGQgdGhlIG5ldyBgbGFuZ3VhZ2UteHh4eGAgY2xhc3Ncblx0XHRcdFx0Ly8gKHVzaW5nIGBjbGFzc0xpc3RgIHdpbGwgYXV0b21hdGljYWxseSBjbGVhbiB1cCBzcGFjZXMgZm9yIHVzKVxuXHRcdFx0XHRlbGVtZW50LmNsYXNzTGlzdC5hZGQoJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgdGhlIHNjcmlwdCBlbGVtZW50IHRoYXQgaXMgY3VycmVudGx5IGV4ZWN1dGluZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGRvZXMgX19ub3RfXyB3b3JrIGZvciBsaW5lIHNjcmlwdCBlbGVtZW50LlxuXHRcdFx0ICpcblx0XHRcdCAqIEByZXR1cm5zIHtIVE1MU2NyaXB0RWxlbWVudCB8IG51bGx9XG5cdFx0XHQgKi9cblx0XHRcdGN1cnJlbnRTY3JpcHQ6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0aWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoJ2N1cnJlbnRTY3JpcHQnIGluIGRvY3VtZW50ICYmIDEgPCAyIC8qIGhhY2sgdG8gdHJpcCBUUycgZmxvdyBhbmFseXNpcyAqLykge1xuXHRcdFx0XHRcdHJldHVybiAvKiogQHR5cGUge2FueX0gKi8gKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSUUxMSB3b3JrYXJvdW5kXG5cdFx0XHRcdC8vIHdlJ2xsIGdldCB0aGUgc3JjIG9mIHRoZSBjdXJyZW50IHNjcmlwdCBieSBwYXJzaW5nIElFMTEncyBlcnJvciBzdGFjayB0cmFjZVxuXHRcdFx0XHQvLyB0aGlzIHdpbGwgbm90IHdvcmsgZm9yIGlubGluZSBzY3JpcHRzXG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoKTtcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0Ly8gR2V0IGZpbGUgc3JjIHVybCBmcm9tIHN0YWNrLiBTcGVjaWZpY2FsbHkgd29ya3Mgd2l0aCB0aGUgZm9ybWF0IG9mIHN0YWNrIHRyYWNlcyBpbiBJRS5cblx0XHRcdFx0XHQvLyBBIHN0YWNrIHdpbGwgbG9vayBsaWtlIHRoaXM6XG5cdFx0XHRcdFx0Ly9cblx0XHRcdFx0XHQvLyBFcnJvclxuXHRcdFx0XHRcdC8vICAgIGF0IF8udXRpbC5jdXJyZW50U2NyaXB0IChodHRwOi8vbG9jYWxob3N0L2NvbXBvbmVudHMvcHJpc20tY29yZS5qczoxMTk6NSlcblx0XHRcdFx0XHQvLyAgICBhdCBHbG9iYWwgY29kZSAoaHR0cDovL2xvY2FsaG9zdC9jb21wb25lbnRzL3ByaXNtLWNvcmUuanM6NjA2OjEpXG5cblx0XHRcdFx0XHR2YXIgc3JjID0gKC9hdCBbXihcXHJcXG5dKlxcKCguKik6W146XSs6W146XStcXCkkL2kuZXhlYyhlcnIuc3RhY2spIHx8IFtdKVsxXTtcblx0XHRcdFx0XHRpZiAoc3JjKSB7XG5cdFx0XHRcdFx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3JpcHQnKTtcblx0XHRcdFx0XHRcdGZvciAodmFyIGkgaW4gc2NyaXB0cykge1xuXHRcdFx0XHRcdFx0XHRpZiAoc2NyaXB0c1tpXS5zcmMgPT0gc3JjKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHNjcmlwdHNbaV07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB3aGV0aGVyIGEgZ2l2ZW4gY2xhc3MgaXMgYWN0aXZlIGZvciBgZWxlbWVudGAuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhlIGNsYXNzIGNhbiBiZSBhY3RpdmF0ZWQgaWYgYGVsZW1lbnRgIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgZ2l2ZW4gY2xhc3MgYW5kIGl0IGNhbiBiZSBkZWFjdGl2YXRlZFxuXHRcdFx0ICogaWYgYGVsZW1lbnRgIG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgbmVnYXRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBjbGFzcy4gVGhlIF9uZWdhdGVkIHZlcnNpb25fIG9mIHRoZVxuXHRcdFx0ICogZ2l2ZW4gY2xhc3MgaXMganVzdCB0aGUgZ2l2ZW4gY2xhc3Mgd2l0aCBhIGBuby1gIHByZWZpeC5cblx0XHRcdCAqXG5cdFx0XHQgKiBXaGV0aGVyIHRoZSBjbGFzcyBpcyBhY3RpdmUgaXMgZGV0ZXJtaW5lZCBieSB0aGUgY2xvc2VzdCBhbmNlc3RvciBvZiBgZWxlbWVudGAgKHdoZXJlIGBlbGVtZW50YCBpdHNlbGYgaXNcblx0XHRcdCAqIGNsb3Nlc3QgYW5jZXN0b3IpIHRoYXQgaGFzIHRoZSBnaXZlbiBjbGFzcyBvciB0aGUgbmVnYXRlZCB2ZXJzaW9uIG9mIGl0LiBJZiBuZWl0aGVyIGBlbGVtZW50YCBub3IgYW55IG9mIGl0c1xuXHRcdFx0ICogYW5jZXN0b3JzIGhhdmUgdGhlIGdpdmVuIGNsYXNzIG9yIHRoZSBuZWdhdGVkIHZlcnNpb24gb2YgaXQsIHRoZW4gdGhlIGRlZmF1bHQgYWN0aXZhdGlvbiB3aWxsIGJlIHJldHVybmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEluIHRoZSBwYXJhZG94aWNhbCBzaXR1YXRpb24gd2hlcmUgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgY29udGFpbnMgX19ib3RoX18gdGhlIGdpdmVuIGNsYXNzIGFuZCB0aGUgbmVnYXRlZFxuXHRcdFx0ICogdmVyc2lvbiBvZiBpdCwgdGhlIGNsYXNzIGlzIGNvbnNpZGVyZWQgYWN0aXZlLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGNsYXNzTmFtZVxuXHRcdFx0ICogQHBhcmFtIHtib29sZWFufSBbZGVmYXVsdEFjdGl2YXRpb249ZmFsc2VdXG5cdFx0XHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0XHRcdCAqL1xuXHRcdFx0aXNBY3RpdmU6IGZ1bmN0aW9uIChlbGVtZW50LCBjbGFzc05hbWUsIGRlZmF1bHRBY3RpdmF0aW9uKSB7XG5cdFx0XHRcdHZhciBubyA9ICduby0nICsgY2xhc3NOYW1lO1xuXG5cdFx0XHRcdHdoaWxlIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0dmFyIGNsYXNzTGlzdCA9IGVsZW1lbnQuY2xhc3NMaXN0O1xuXHRcdFx0XHRcdGlmIChjbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChjbGFzc0xpc3QuY29udGFpbnMobm8pKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGVsZW1lbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuICEhZGVmYXVsdEFjdGl2YXRpb247XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgbmFtZXNwYWNlIGNvbnRhaW5zIGFsbCBjdXJyZW50bHkgbG9hZGVkIGxhbmd1YWdlcyBhbmQgdGhlIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyB0byBjcmVhdGUgYW5kIG1vZGlmeSBsYW5ndWFnZXMuXG5cdFx0ICpcblx0XHQgKiBAbmFtZXNwYWNlXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGxhbmd1YWdlczoge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBUaGUgZ3JhbW1hciBmb3IgcGxhaW4sIHVuZm9ybWF0dGVkIHRleHQuXG5cdFx0XHQgKi9cblx0XHRcdHBsYWluOiBwbGFpblRleHRHcmFtbWFyLFxuXHRcdFx0cGxhaW50ZXh0OiBwbGFpblRleHRHcmFtbWFyLFxuXHRcdFx0dGV4dDogcGxhaW5UZXh0R3JhbW1hcixcblx0XHRcdHR4dDogcGxhaW5UZXh0R3JhbW1hcixcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIHRoZSBsYW5ndWFnZSB3aXRoIHRoZSBnaXZlbiBpZCBhbmQgYXBwZW5kcyB0aGUgZ2l2ZW4gdG9rZW5zLlxuXHRcdFx0ICpcblx0XHRcdCAqIElmIGEgdG9rZW4gaW4gYHJlZGVmYCBhbHNvIGFwcGVhcnMgaW4gdGhlIGNvcGllZCBsYW5ndWFnZSwgdGhlbiB0aGUgZXhpc3RpbmcgdG9rZW4gaW4gdGhlIGNvcGllZCBsYW5ndWFnZVxuXHRcdFx0ICogd2lsbCBiZSBvdmVyd3JpdHRlbiBhdCBpdHMgb3JpZ2luYWwgcG9zaXRpb24uXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgQmVzdCBwcmFjdGljZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBTaW5jZSB0aGUgcG9zaXRpb24gb2Ygb3ZlcndyaXRpbmcgdG9rZW5zICh0b2tlbiBpbiBgcmVkZWZgIHRoYXQgb3ZlcndyaXRlIHRva2VucyBpbiB0aGUgY29waWVkIGxhbmd1YWdlKVxuXHRcdFx0ICogZG9lc24ndCBtYXR0ZXIsIHRoZXkgY2FuIHRlY2huaWNhbGx5IGJlIGluIGFueSBvcmRlci4gSG93ZXZlciwgdGhpcyBjYW4gYmUgY29uZnVzaW5nIHRvIG90aGVycyB0aGF0IHRyeWluZyB0b1xuXHRcdFx0ICogdW5kZXJzdGFuZCB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBiZWNhdXNlLCBub3JtYWxseSwgdGhlIG9yZGVyIG9mIHRva2VucyBtYXR0ZXJzIGluIFByaXNtIGdyYW1tYXJzLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZXJlZm9yZSwgaXQgaXMgZW5jb3VyYWdlZCB0byBvcmRlciBvdmVyd3JpdGluZyB0b2tlbnMgYWNjb3JkaW5nIHRvIHRoZSBwb3NpdGlvbnMgb2YgdGhlIG92ZXJ3cml0dGVuIHRva2Vucy5cblx0XHRcdCAqIEZ1cnRoZXJtb3JlLCBhbGwgbm9uLW92ZXJ3cml0aW5nIHRva2VucyBzaG91bGQgYmUgcGxhY2VkIGFmdGVyIHRoZSBvdmVyd3JpdGluZyBvbmVzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBpZCBUaGUgaWQgb2YgdGhlIGxhbmd1YWdlIHRvIGV4dGVuZC4gVGhpcyBoYXMgdG8gYmUgYSBrZXkgaW4gYFByaXNtLmxhbmd1YWdlc2AuXG5cdFx0XHQgKiBAcGFyYW0ge0dyYW1tYXJ9IHJlZGVmIFRoZSBuZXcgdG9rZW5zIHRvIGFwcGVuZC5cblx0XHRcdCAqIEByZXR1cm5zIHtHcmFtbWFyfSBUaGUgbmV3IGxhbmd1YWdlIGNyZWF0ZWQuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzWydjc3Mtd2l0aC1jb2xvcnMnXSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NzcycsIHtcblx0XHRcdCAqICAgICAvLyBQcmlzbS5sYW5ndWFnZXMuY3NzIGFscmVhZHkgaGFzIGEgJ2NvbW1lbnQnIHRva2VuLCBzbyB0aGlzIHRva2VuIHdpbGwgb3ZlcndyaXRlIENTUycgJ2NvbW1lbnQnIHRva2VuXG5cdFx0XHQgKiAgICAgLy8gYXQgaXRzIG9yaWdpbmFsIHBvc2l0aW9uXG5cdFx0XHQgKiAgICAgJ2NvbW1lbnQnOiB7IC4uLiB9LFxuXHRcdFx0ICogICAgIC8vIENTUyBkb2Vzbid0IGhhdmUgYSAnY29sb3InIHRva2VuLCBzbyB0aGlzIHRva2VuIHdpbGwgYmUgYXBwZW5kZWRcblx0XHRcdCAqICAgICAnY29sb3InOiAvXFxiKD86cmVkfGdyZWVufGJsdWUpXFxiL1xuXHRcdFx0ICogfSk7XG5cdFx0XHQgKi9cblx0XHRcdGV4dGVuZDogZnVuY3Rpb24gKGlkLCByZWRlZikge1xuXHRcdFx0XHR2YXIgbGFuZyA9IF8udXRpbC5jbG9uZShfLmxhbmd1YWdlc1tpZF0pO1xuXG5cdFx0XHRcdGZvciAodmFyIGtleSBpbiByZWRlZikge1xuXHRcdFx0XHRcdGxhbmdba2V5XSA9IHJlZGVmW2tleV07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gbGFuZztcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogSW5zZXJ0cyB0b2tlbnMgX2JlZm9yZV8gYW5vdGhlciB0b2tlbiBpbiBhIGxhbmd1YWdlIGRlZmluaXRpb24gb3IgYW55IG90aGVyIGdyYW1tYXIuXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgVXNhZ2Vcblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGhlbHBlciBtZXRob2QgbWFrZXMgaXQgZWFzeSB0byBtb2RpZnkgZXhpc3RpbmcgbGFuZ3VhZ2VzLiBGb3IgZXhhbXBsZSwgdGhlIENTUyBsYW5ndWFnZSBkZWZpbml0aW9uXG5cdFx0XHQgKiBub3Qgb25seSBkZWZpbmVzIENTUyBoaWdobGlnaHRpbmcgZm9yIENTUyBkb2N1bWVudHMsIGJ1dCBhbHNvIG5lZWRzIHRvIGRlZmluZSBoaWdobGlnaHRpbmcgZm9yIENTUyBlbWJlZGRlZFxuXHRcdFx0ICogaW4gSFRNTCB0aHJvdWdoIGA8c3R5bGU+YCBlbGVtZW50cy4gVG8gZG8gdGhpcywgaXQgbmVlZHMgdG8gbW9kaWZ5IGBQcmlzbS5sYW5ndWFnZXMubWFya3VwYCBhbmQgYWRkIHRoZVxuXHRcdFx0ICogYXBwcm9wcmlhdGUgdG9rZW5zLiBIb3dldmVyLCBgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cGAgaXMgYSByZWd1bGFyIEphdmFTY3JpcHQgb2JqZWN0IGxpdGVyYWwsIHNvIGlmIHlvdSBkb1xuXHRcdFx0ICogdGhpczpcblx0XHRcdCAqXG5cdFx0XHQgKiBgYGBqc1xuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5zdHlsZSA9IHtcblx0XHRcdCAqICAgICAvLyB0b2tlblxuXHRcdFx0ICogfTtcblx0XHRcdCAqIGBgYFxuXHRcdFx0ICpcblx0XHRcdCAqIHRoZW4gdGhlIGBzdHlsZWAgdG9rZW4gd2lsbCBiZSBhZGRlZCAoYW5kIHByb2Nlc3NlZCkgYXQgdGhlIGVuZC4gYGluc2VydEJlZm9yZWAgYWxsb3dzIHlvdSB0byBpbnNlcnQgdG9rZW5zXG5cdFx0XHQgKiBiZWZvcmUgZXhpc3RpbmcgdG9rZW5zLiBGb3IgdGhlIENTUyBleGFtcGxlIGFib3ZlLCB5b3Ugd291bGQgdXNlIGl0IGxpa2UgdGhpczpcblx0XHRcdCAqXG5cdFx0XHQgKiBgYGBqc1xuXHRcdFx0ICogUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NkYXRhJywge1xuXHRcdFx0ICogICAgICdzdHlsZSc6IHtcblx0XHRcdCAqICAgICAgICAgLy8gdG9rZW5cblx0XHRcdCAqICAgICB9XG5cdFx0XHQgKiB9KTtcblx0XHRcdCAqIGBgYFxuXHRcdFx0ICpcblx0XHRcdCAqICMjIFNwZWNpYWwgY2FzZXNcblx0XHRcdCAqXG5cdFx0XHQgKiBJZiB0aGUgZ3JhbW1hcnMgb2YgYGluc2lkZWAgYW5kIGBpbnNlcnRgIGhhdmUgdG9rZW5zIHdpdGggdGhlIHNhbWUgbmFtZSwgdGhlIHRva2VucyBpbiBgaW5zaWRlYCdzIGdyYW1tYXJcblx0XHRcdCAqIHdpbGwgYmUgaWdub3JlZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGlzIGJlaGF2aW9yIGNhbiBiZSB1c2VkIHRvIGluc2VydCB0b2tlbnMgYWZ0ZXIgYGJlZm9yZWA6XG5cdFx0XHQgKlxuXHRcdFx0ICogYGBganNcblx0XHRcdCAqIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICdjb21tZW50Jywge1xuXHRcdFx0ICogICAgICdjb21tZW50JzogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5jb21tZW50LFxuXHRcdFx0ICogICAgIC8vIHRva2VucyBhZnRlciAnY29tbWVudCdcblx0XHRcdCAqIH0pO1xuXHRcdFx0ICogYGBgXG5cdFx0XHQgKlxuXHRcdFx0ICogIyMgTGltaXRhdGlvbnNcblx0XHRcdCAqXG5cdFx0XHQgKiBUaGUgbWFpbiBwcm9ibGVtIGBpbnNlcnRCZWZvcmVgIGhhcyB0byBzb2x2ZSBpcyBpdGVyYXRpb24gb3JkZXIuIFNpbmNlIEVTMjAxNSwgdGhlIGl0ZXJhdGlvbiBvcmRlciBmb3Igb2JqZWN0XG5cdFx0XHQgKiBwcm9wZXJ0aWVzIGlzIGd1YXJhbnRlZWQgdG8gYmUgdGhlIGluc2VydGlvbiBvcmRlciAoZXhjZXB0IGZvciBpbnRlZ2VyIGtleXMpIGJ1dCBzb21lIGJyb3dzZXJzIGJlaGF2ZVxuXHRcdFx0ICogZGlmZmVyZW50bHkgd2hlbiBrZXlzIGFyZSBkZWxldGVkIGFuZCByZS1pbnNlcnRlZC4gU28gYGluc2VydEJlZm9yZWAgY2FuJ3QgYmUgaW1wbGVtZW50ZWQgYnkgdGVtcG9yYXJpbHlcblx0XHRcdCAqIGRlbGV0aW5nIHByb3BlcnRpZXMgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGluc2VydCBhdCBhcmJpdHJhcnkgcG9zaXRpb25zLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRvIHNvbHZlIHRoaXMgcHJvYmxlbSwgYGluc2VydEJlZm9yZWAgZG9lc24ndCBhY3R1YWxseSBpbnNlcnQgdGhlIGdpdmVuIHRva2VucyBpbnRvIHRoZSB0YXJnZXQgb2JqZWN0LlxuXHRcdFx0ICogSW5zdGVhZCwgaXQgd2lsbCBjcmVhdGUgYSBuZXcgb2JqZWN0IGFuZCByZXBsYWNlIGFsbCByZWZlcmVuY2VzIHRvIHRoZSB0YXJnZXQgb2JqZWN0IHdpdGggdGhlIG5ldyBvbmUuIFRoaXNcblx0XHRcdCAqIGNhbiBiZSBkb25lIHdpdGhvdXQgdGVtcG9yYXJpbHkgZGVsZXRpbmcgcHJvcGVydGllcywgc28gdGhlIGl0ZXJhdGlvbiBvcmRlciBpcyB3ZWxsLWRlZmluZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogSG93ZXZlciwgb25seSByZWZlcmVuY2VzIHRoYXQgY2FuIGJlIHJlYWNoZWQgZnJvbSBgUHJpc20ubGFuZ3VhZ2VzYCBvciBgaW5zZXJ0YCB3aWxsIGJlIHJlcGxhY2VkLiBJLmUuIGlmXG5cdFx0XHQgKiB5b3UgaG9sZCB0aGUgdGFyZ2V0IG9iamVjdCBpbiBhIHZhcmlhYmxlLCB0aGVuIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgd2lsbCBub3QgY2hhbmdlLlxuXHRcdFx0ICpcblx0XHRcdCAqIGBgYGpzXG5cdFx0XHQgKiB2YXIgb2xkTWFya3VwID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblx0XHRcdCAqIHZhciBuZXdNYXJrdXAgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrdXAnLCAnY29tbWVudCcsIHsgLi4uIH0pO1xuXHRcdFx0ICpcblx0XHRcdCAqIGFzc2VydChvbGRNYXJrdXAgIT09IFByaXNtLmxhbmd1YWdlcy5tYXJrdXApO1xuXHRcdFx0ICogYXNzZXJ0KG5ld01hcmt1cCA9PT0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCk7XG5cdFx0XHQgKiBgYGBcblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaW5zaWRlIFRoZSBwcm9wZXJ0eSBvZiBgcm9vdGAgKGUuZy4gYSBsYW5ndWFnZSBpZCBpbiBgUHJpc20ubGFuZ3VhZ2VzYCkgdGhhdCBjb250YWlucyB0aGVcblx0XHRcdCAqIG9iamVjdCB0byBiZSBtb2RpZmllZC5cblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBiZWZvcmUgVGhlIGtleSB0byBpbnNlcnQgYmVmb3JlLlxuXHRcdFx0ICogQHBhcmFtIHtHcmFtbWFyfSBpbnNlcnQgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGtleS12YWx1ZSBwYWlycyB0byBiZSBpbnNlcnRlZC5cblx0XHRcdCAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gW3Jvb3RdIFRoZSBvYmplY3QgY29udGFpbmluZyBgaW5zaWRlYCwgaS5lLiB0aGUgb2JqZWN0IHRoYXQgY29udGFpbnMgdGhlXG5cdFx0XHQgKiBvYmplY3QgdG8gYmUgbW9kaWZpZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogRGVmYXVsdHMgdG8gYFByaXNtLmxhbmd1YWdlc2AuXG5cdFx0XHQgKiBAcmV0dXJucyB7R3JhbW1hcn0gVGhlIG5ldyBncmFtbWFyIG9iamVjdC5cblx0XHRcdCAqIEBwdWJsaWNcblx0XHRcdCAqL1xuXHRcdFx0aW5zZXJ0QmVmb3JlOiBmdW5jdGlvbiAoaW5zaWRlLCBiZWZvcmUsIGluc2VydCwgcm9vdCkge1xuXHRcdFx0XHRyb290ID0gcm9vdCB8fCAvKiogQHR5cGUge2FueX0gKi8gKF8ubGFuZ3VhZ2VzKTtcblx0XHRcdFx0dmFyIGdyYW1tYXIgPSByb290W2luc2lkZV07XG5cdFx0XHRcdC8qKiBAdHlwZSB7R3JhbW1hcn0gKi9cblx0XHRcdFx0dmFyIHJldCA9IHt9O1xuXG5cdFx0XHRcdGZvciAodmFyIHRva2VuIGluIGdyYW1tYXIpIHtcblx0XHRcdFx0XHRpZiAoZ3JhbW1hci5oYXNPd25Qcm9wZXJ0eSh0b2tlbikpIHtcblxuXHRcdFx0XHRcdFx0aWYgKHRva2VuID09IGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRmb3IgKHZhciBuZXdUb2tlbiBpbiBpbnNlcnQpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoaW5zZXJ0Lmhhc093blByb3BlcnR5KG5ld1Rva2VuKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0W25ld1Rva2VuXSA9IGluc2VydFtuZXdUb2tlbl07XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIERvIG5vdCBpbnNlcnQgdG9rZW4gd2hpY2ggYWxzbyBvY2N1ciBpbiBpbnNlcnQuIFNlZSAjMTUyNVxuXHRcdFx0XHRcdFx0aWYgKCFpbnNlcnQuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG5cdFx0XHRcdFx0XHRcdHJldFt0b2tlbl0gPSBncmFtbWFyW3Rva2VuXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgb2xkID0gcm9vdFtpbnNpZGVdO1xuXHRcdFx0XHRyb290W2luc2lkZV0gPSByZXQ7XG5cblx0XHRcdFx0Ly8gVXBkYXRlIHJlZmVyZW5jZXMgaW4gb3RoZXIgbGFuZ3VhZ2UgZGVmaW5pdGlvbnNcblx0XHRcdFx0Xy5sYW5ndWFnZXMuREZTKF8ubGFuZ3VhZ2VzLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRcdGlmICh2YWx1ZSA9PT0gb2xkICYmIGtleSAhPSBpbnNpZGUpIHtcblx0XHRcdFx0XHRcdHRoaXNba2V5XSA9IHJldDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUcmF2ZXJzZSBhIGxhbmd1YWdlIGRlZmluaXRpb24gd2l0aCBEZXB0aCBGaXJzdCBTZWFyY2hcblx0XHRcdERGUzogZnVuY3Rpb24gREZTKG8sIGNhbGxiYWNrLCB0eXBlLCB2aXNpdGVkKSB7XG5cdFx0XHRcdHZpc2l0ZWQgPSB2aXNpdGVkIHx8IHt9O1xuXG5cdFx0XHRcdHZhciBvYmpJZCA9IF8udXRpbC5vYmpJZDtcblxuXHRcdFx0XHRmb3IgKHZhciBpIGluIG8pIHtcblx0XHRcdFx0XHRpZiAoby5oYXNPd25Qcm9wZXJ0eShpKSkge1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2suY2FsbChvLCBpLCBvW2ldLCB0eXBlIHx8IGkpO1xuXG5cdFx0XHRcdFx0XHR2YXIgcHJvcGVydHkgPSBvW2ldO1xuXHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5VHlwZSA9IF8udXRpbC50eXBlKHByb3BlcnR5KTtcblxuXHRcdFx0XHRcdFx0aWYgKHByb3BlcnR5VHlwZSA9PT0gJ09iamVjdCcgJiYgIXZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSkge1xuXHRcdFx0XHRcdFx0XHR2aXNpdGVkW29iaklkKHByb3BlcnR5KV0gPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRERlMocHJvcGVydHksIGNhbGxiYWNrLCBudWxsLCB2aXNpdGVkKTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAocHJvcGVydHlUeXBlID09PSAnQXJyYXknICYmICF2aXNpdGVkW29iaklkKHByb3BlcnR5KV0pIHtcblx0XHRcdFx0XHRcdFx0dmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0REZTKHByb3BlcnR5LCBjYWxsYmFjaywgaSwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdHBsdWdpbnM6IHt9LFxuXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgbW9zdCBoaWdoLWxldmVsIGZ1bmN0aW9uIGluIFByaXNtXHUyMDE5cyBBUEkuXG5cdFx0ICogSXQgZmV0Y2hlcyBhbGwgdGhlIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIGAubGFuZ3VhZ2UteHh4eGAgY2xhc3MgYW5kIHRoZW4gY2FsbHMge0BsaW5rIFByaXNtLmhpZ2hsaWdodEVsZW1lbnR9IG9uXG5cdFx0ICogZWFjaCBvbmUgb2YgdGhlbS5cblx0XHQgKlxuXHRcdCAqIFRoaXMgaXMgZXF1aXZhbGVudCB0byBgUHJpc20uaGlnaGxpZ2h0QWxsVW5kZXIoZG9jdW1lbnQsIGFzeW5jLCBjYWxsYmFjaylgLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbYXN5bmM9ZmFsc2VdIFNhbWUgYXMgaW4ge0BsaW5rIFByaXNtLmhpZ2hsaWdodEFsbFVuZGVyfS5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIFNhbWUgYXMgaW4ge0BsaW5rIFByaXNtLmhpZ2hsaWdodEFsbFVuZGVyfS5cblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0QWxsOiBmdW5jdGlvbiAoYXN5bmMsIGNhbGxiYWNrKSB7XG5cdFx0XHRfLmhpZ2hsaWdodEFsbFVuZGVyKGRvY3VtZW50LCBhc3luYywgY2FsbGJhY2spO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBGZXRjaGVzIGFsbCB0aGUgZGVzY2VuZGFudHMgb2YgYGNvbnRhaW5lcmAgdGhhdCBoYXZlIGEgYC5sYW5ndWFnZS14eHh4YCBjbGFzcyBhbmQgdGhlbiBjYWxsc1xuXHRcdCAqIHtAbGluayBQcmlzbS5oaWdobGlnaHRFbGVtZW50fSBvbiBlYWNoIG9uZSBvZiB0aGVtLlxuXHRcdCAqXG5cdFx0ICogVGhlIGZvbGxvd2luZyBob29rcyB3aWxsIGJlIHJ1bjpcblx0XHQgKiAxLiBgYmVmb3JlLWhpZ2hsaWdodGFsbGBcblx0XHQgKiAyLiBgYmVmb3JlLWFsbC1lbGVtZW50cy1oaWdobGlnaHRgXG5cdFx0ICogMy4gQWxsIGhvb2tzIG9mIHtAbGluayBQcmlzbS5oaWdobGlnaHRFbGVtZW50fSBmb3IgZWFjaCBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtQYXJlbnROb2RlfSBjb250YWluZXIgVGhlIHJvb3QgZWxlbWVudCwgd2hvc2UgZGVzY2VuZGFudHMgdGhhdCBoYXZlIGEgYC5sYW5ndWFnZS14eHh4YCBjbGFzcyB3aWxsIGJlIGhpZ2hsaWdodGVkLlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPWZhbHNlXSBXaGV0aGVyIGVhY2ggZWxlbWVudCBpcyB0byBiZSBoaWdobGlnaHRlZCBhc3luY2hyb25vdXNseSB1c2luZyBXZWIgV29ya2Vycy5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgb24gZWFjaCBlbGVtZW50IGFmdGVyIGl0cyBoaWdobGlnaHRpbmcgaXMgZG9uZS5cblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0QWxsVW5kZXI6IGZ1bmN0aW9uIChjb250YWluZXIsIGFzeW5jLCBjYWxsYmFjaykge1xuXHRcdFx0dmFyIGVudiA9IHtcblx0XHRcdFx0Y2FsbGJhY2s6IGNhbGxiYWNrLFxuXHRcdFx0XHRjb250YWluZXI6IGNvbnRhaW5lcixcblx0XHRcdFx0c2VsZWN0b3I6ICdjb2RlW2NsYXNzKj1cImxhbmd1YWdlLVwiXSwgW2NsYXNzKj1cImxhbmd1YWdlLVwiXSBjb2RlLCBjb2RlW2NsYXNzKj1cImxhbmctXCJdLCBbY2xhc3MqPVwibGFuZy1cIl0gY29kZSdcblx0XHRcdH07XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0YWxsJywgZW52KTtcblxuXHRcdFx0ZW52LmVsZW1lbnRzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGVudi5jb250YWluZXIucXVlcnlTZWxlY3RvckFsbChlbnYuc2VsZWN0b3IpKTtcblxuXHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1hbGwtZWxlbWVudHMtaGlnaGxpZ2h0JywgZW52KTtcblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGVsZW1lbnQ7IChlbGVtZW50ID0gZW52LmVsZW1lbnRzW2krK10pOykge1xuXHRcdFx0XHRfLmhpZ2hsaWdodEVsZW1lbnQoZWxlbWVudCwgYXN5bmMgPT09IHRydWUsIGVudi5jYWxsYmFjayk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEhpZ2hsaWdodHMgdGhlIGNvZGUgaW5zaWRlIGEgc2luZ2xlIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBUaGUgZm9sbG93aW5nIGhvb2tzIHdpbGwgYmUgcnVuOlxuXHRcdCAqIDEuIGBiZWZvcmUtc2FuaXR5LWNoZWNrYFxuXHRcdCAqIDIuIGBiZWZvcmUtaGlnaGxpZ2h0YFxuXHRcdCAqIDMuIEFsbCBob29rcyBvZiB7QGxpbmsgUHJpc20uaGlnaGxpZ2h0fS4gVGhlc2UgaG9va3Mgd2lsbCBiZSBydW4gYnkgYW4gYXN5bmNocm9ub3VzIHdvcmtlciBpZiBgYXN5bmNgIGlzIGB0cnVlYC5cblx0XHQgKiA0LiBgYmVmb3JlLWluc2VydGBcblx0XHQgKiA1LiBgYWZ0ZXItaGlnaGxpZ2h0YFxuXHRcdCAqIDYuIGBjb21wbGV0ZWBcblx0XHQgKlxuXHRcdCAqIFNvbWUgdGhlIGFib3ZlIGhvb2tzIHdpbGwgYmUgc2tpcHBlZCBpZiB0aGUgZWxlbWVudCBkb2Vzbid0IGNvbnRhaW4gYW55IHRleHQgb3IgdGhlcmUgaXMgbm8gZ3JhbW1hciBsb2FkZWQgZm9yXG5cdFx0ICogdGhlIGVsZW1lbnQncyBsYW5ndWFnZS5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCBjb250YWluaW5nIHRoZSBjb2RlLlxuXHRcdCAqIEl0IG11c3QgaGF2ZSBhIGNsYXNzIG9mIGBsYW5ndWFnZS14eHh4YCB0byBiZSBwcm9jZXNzZWQsIHdoZXJlIGB4eHh4YCBpcyBhIHZhbGlkIGxhbmd1YWdlIGlkZW50aWZpZXIuXG5cdFx0ICogQHBhcmFtIHtib29sZWFufSBbYXN5bmM9ZmFsc2VdIFdoZXRoZXIgdGhlIGVsZW1lbnQgaXMgdG8gYmUgaGlnaGxpZ2h0ZWQgYXN5bmNocm9ub3VzbHkgdXNpbmcgV2ViIFdvcmtlcnNcblx0XHQgKiB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIGFuZCBhdm9pZCBibG9ja2luZyB0aGUgVUkgd2hlbiBoaWdobGlnaHRpbmcgdmVyeSBsYXJnZSBjaHVua3Mgb2YgY29kZS4gVGhpcyBvcHRpb24gaXNcblx0XHQgKiBbZGlzYWJsZWQgYnkgZGVmYXVsdF0oaHR0cHM6Ly9wcmlzbWpzLmNvbS9mYXEuaHRtbCN3aHktaXMtYXN5bmNocm9ub3VzLWhpZ2hsaWdodGluZy1kaXNhYmxlZC1ieS1kZWZhdWx0KS5cblx0XHQgKlxuXHRcdCAqIE5vdGU6IEFsbCBsYW5ndWFnZSBkZWZpbml0aW9ucyByZXF1aXJlZCB0byBoaWdobGlnaHQgdGhlIGNvZGUgbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgbWFpbiBgcHJpc20uanNgIGZpbGUgZm9yXG5cdFx0ICogYXN5bmNocm9ub3VzIGhpZ2hsaWdodGluZyB0byB3b3JrLiBZb3UgY2FuIGJ1aWxkIHlvdXIgb3duIGJ1bmRsZSBvbiB0aGVcblx0XHQgKiBbRG93bmxvYWQgcGFnZV0oaHR0cHM6Ly9wcmlzbWpzLmNvbS9kb3dubG9hZC5odG1sKS5cblx0XHQgKiBAcGFyYW0ge0hpZ2hsaWdodENhbGxiYWNrfSBbY2FsbGJhY2tdIEFuIG9wdGlvbmFsIGNhbGxiYWNrIHRvIGJlIGludm9rZWQgYWZ0ZXIgdGhlIGhpZ2hsaWdodGluZyBpcyBkb25lLlxuXHRcdCAqIE1vc3RseSB1c2VmdWwgd2hlbiBgYXN5bmNgIGlzIGB0cnVlYCwgc2luY2UgaW4gdGhhdCBjYXNlLCB0aGUgaGlnaGxpZ2h0aW5nIGlzIGRvbmUgYXN5bmNocm9ub3VzbHkuXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodEVsZW1lbnQ6IGZ1bmN0aW9uIChlbGVtZW50LCBhc3luYywgY2FsbGJhY2spIHtcblx0XHRcdC8vIEZpbmQgbGFuZ3VhZ2Vcblx0XHRcdHZhciBsYW5ndWFnZSA9IF8udXRpbC5nZXRMYW5ndWFnZShlbGVtZW50KTtcblx0XHRcdHZhciBncmFtbWFyID0gXy5sYW5ndWFnZXNbbGFuZ3VhZ2VdO1xuXG5cdFx0XHQvLyBTZXQgbGFuZ3VhZ2Ugb24gdGhlIGVsZW1lbnQsIGlmIG5vdCBwcmVzZW50XG5cdFx0XHRfLnV0aWwuc2V0TGFuZ3VhZ2UoZWxlbWVudCwgbGFuZ3VhZ2UpO1xuXG5cdFx0XHQvLyBTZXQgbGFuZ3VhZ2Ugb24gdGhlIHBhcmVudCwgZm9yIHN0eWxpbmdcblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtZW50LnBhcmVudEVsZW1lbnQ7XG5cdFx0XHRpZiAocGFyZW50ICYmIHBhcmVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSAncHJlJykge1xuXHRcdFx0XHRfLnV0aWwuc2V0TGFuZ3VhZ2UocGFyZW50LCBsYW5ndWFnZSk7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBjb2RlID0gZWxlbWVudC50ZXh0Q29udGVudDtcblxuXHRcdFx0dmFyIGVudiA9IHtcblx0XHRcdFx0ZWxlbWVudDogZWxlbWVudCxcblx0XHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlLFxuXHRcdFx0XHRncmFtbWFyOiBncmFtbWFyLFxuXHRcdFx0XHRjb2RlOiBjb2RlXG5cdFx0XHR9O1xuXG5cdFx0XHRmdW5jdGlvbiBpbnNlcnRIaWdobGlnaHRlZENvZGUoaGlnaGxpZ2h0ZWRDb2RlKSB7XG5cdFx0XHRcdGVudi5oaWdobGlnaHRlZENvZGUgPSBoaWdobGlnaHRlZENvZGU7XG5cblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1pbnNlcnQnLCBlbnYpO1xuXG5cdFx0XHRcdGVudi5lbGVtZW50LmlubmVySFRNTCA9IGVudi5oaWdobGlnaHRlZENvZGU7XG5cblx0XHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLWhpZ2hsaWdodCcsIGVudik7XG5cdFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG5cdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLXNhbml0eS1jaGVjaycsIGVudik7XG5cblx0XHRcdC8vIHBsdWdpbnMgbWF5IGNoYW5nZS9hZGQgdGhlIHBhcmVudC9lbGVtZW50XG5cdFx0XHRwYXJlbnQgPSBlbnYuZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ByZScgJiYgIXBhcmVudC5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykpIHtcblx0XHRcdFx0cGFyZW50LnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnMCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWVudi5jb2RlKSB7XG5cdFx0XHRcdF8uaG9va3MucnVuKCdjb21wbGV0ZScsIGVudik7XG5cdFx0XHRcdGNhbGxiYWNrICYmIGNhbGxiYWNrLmNhbGwoZW52LmVsZW1lbnQpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaGlnaGxpZ2h0JywgZW52KTtcblxuXHRcdFx0aWYgKCFlbnYuZ3JhbW1hcikge1xuXHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy51dGlsLmVuY29kZShlbnYuY29kZSkpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmIChhc3luYyAmJiBfc2VsZi5Xb3JrZXIpIHtcblx0XHRcdFx0dmFyIHdvcmtlciA9IG5ldyBXb3JrZXIoXy5maWxlbmFtZSk7XG5cblx0XHRcdFx0d29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChldnQpIHtcblx0XHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoZXZ0LmRhdGEpO1xuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdHdvcmtlci5wb3N0TWVzc2FnZShKU09OLnN0cmluZ2lmeSh7XG5cdFx0XHRcdFx0bGFuZ3VhZ2U6IGVudi5sYW5ndWFnZSxcblx0XHRcdFx0XHRjb2RlOiBlbnYuY29kZSxcblx0XHRcdFx0XHRpbW1lZGlhdGVDbG9zZTogdHJ1ZVxuXHRcdFx0XHR9KSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpbnNlcnRIaWdobGlnaHRlZENvZGUoXy5oaWdobGlnaHQoZW52LmNvZGUsIGVudi5ncmFtbWFyLCBlbnYubGFuZ3VhZ2UpKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogTG93LWxldmVsIGZ1bmN0aW9uLCBvbmx5IHVzZSBpZiB5b3Uga25vdyB3aGF0IHlvdVx1MjAxOXJlIGRvaW5nLiBJdCBhY2NlcHRzIGEgc3RyaW5nIG9mIHRleHQgYXMgaW5wdXRcblx0XHQgKiBhbmQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb25zIHRvIHVzZSwgYW5kIHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgSFRNTCBwcm9kdWNlZC5cblx0XHQgKlxuXHRcdCAqIFRoZSBmb2xsb3dpbmcgaG9va3Mgd2lsbCBiZSBydW46XG5cdFx0ICogMS4gYGJlZm9yZS10b2tlbml6ZWBcblx0XHQgKiAyLiBgYWZ0ZXItdG9rZW5pemVgXG5cdFx0ICogMy4gYHdyYXBgOiBPbiBlYWNoIHtAbGluayBUb2tlbn0uXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCBBIHN0cmluZyB3aXRoIHRoZSBjb2RlIHRvIGJlIGhpZ2hsaWdodGVkLlxuXHRcdCAqIEBwYXJhbSB7R3JhbW1hcn0gZ3JhbW1hciBBbiBvYmplY3QgY29udGFpbmluZyB0aGUgdG9rZW5zIHRvIHVzZS5cblx0XHQgKlxuXHRcdCAqIFVzdWFsbHkgYSBsYW5ndWFnZSBkZWZpbml0aW9uIGxpa2UgYFByaXNtLmxhbmd1YWdlcy5tYXJrdXBgLlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbmFtZSBvZiB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBwYXNzZWQgdG8gYGdyYW1tYXJgLlxuXHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBoaWdobGlnaHRlZCBIVE1MLlxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIFByaXNtLmhpZ2hsaWdodCgndmFyIGZvbyA9IHRydWU7JywgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQsICdqYXZhc2NyaXB0Jyk7XG5cdFx0ICovXG5cdFx0aGlnaGxpZ2h0OiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHRcdHZhciBlbnYgPSB7XG5cdFx0XHRcdGNvZGU6IHRleHQsXG5cdFx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG5cdFx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZVxuXHRcdFx0fTtcblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtdG9rZW5pemUnLCBlbnYpO1xuXHRcdFx0aWYgKCFlbnYuZ3JhbW1hcikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsYW5ndWFnZSBcIicgKyBlbnYubGFuZ3VhZ2UgKyAnXCIgaGFzIG5vIGdyYW1tYXIuJyk7XG5cdFx0XHR9XG5cdFx0XHRlbnYudG9rZW5zID0gXy50b2tlbml6ZShlbnYuY29kZSwgZW52LmdyYW1tYXIpO1xuXHRcdFx0Xy5ob29rcy5ydW4oJ2FmdGVyLXRva2VuaXplJywgZW52KTtcblx0XHRcdHJldHVybiBUb2tlbi5zdHJpbmdpZnkoXy51dGlsLmVuY29kZShlbnYudG9rZW5zKSwgZW52Lmxhbmd1YWdlKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogVGhpcyBpcyB0aGUgaGVhcnQgb2YgUHJpc20sIGFuZCB0aGUgbW9zdCBsb3ctbGV2ZWwgZnVuY3Rpb24geW91IGNhbiB1c2UuIEl0IGFjY2VwdHMgYSBzdHJpbmcgb2YgdGV4dCBhcyBpbnB1dFxuXHRcdCAqIGFuZCB0aGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgdG8gdXNlLCBhbmQgcmV0dXJucyBhbiBhcnJheSB3aXRoIHRoZSB0b2tlbml6ZWQgY29kZS5cblx0XHQgKlxuXHRcdCAqIFdoZW4gdGhlIGxhbmd1YWdlIGRlZmluaXRpb24gaW5jbHVkZXMgbmVzdGVkIHRva2VucywgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWN1cnNpdmVseSBvbiBlYWNoIG9mIHRoZXNlIHRva2Vucy5cblx0XHQgKlxuXHRcdCAqIFRoaXMgbWV0aG9kIGNvdWxkIGJlIHVzZWZ1bCBpbiBvdGhlciBjb250ZXh0cyBhcyB3ZWxsLCBhcyBhIHZlcnkgY3J1ZGUgcGFyc2VyLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSBzdHJpbmcgd2l0aCB0aGUgY29kZSB0byBiZSBoaWdobGlnaHRlZC5cblx0XHQgKiBAcGFyYW0ge0dyYW1tYXJ9IGdyYW1tYXIgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRva2VucyB0byB1c2UuXG5cdFx0ICpcblx0XHQgKiBVc3VhbGx5IGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBsaWtlIGBQcmlzbS5sYW5ndWFnZXMubWFya3VwYC5cblx0XHQgKiBAcmV0dXJucyB7VG9rZW5TdHJlYW19IEFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIHRva2VucywgYSB0b2tlbiBzdHJlYW0uXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqIEBleGFtcGxlXG5cdFx0ICogbGV0IGNvZGUgPSBgdmFyIGZvbyA9IDA7YDtcblx0XHQgKiBsZXQgdG9rZW5zID0gUHJpc20udG9rZW5pemUoY29kZSwgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQpO1xuXHRcdCAqIHRva2Vucy5mb3JFYWNoKHRva2VuID0+IHtcblx0XHQgKiAgICAgaWYgKHRva2VuIGluc3RhbmNlb2YgUHJpc20uVG9rZW4gJiYgdG9rZW4udHlwZSA9PT0gJ251bWJlcicpIHtcblx0XHQgKiAgICAgICAgIGNvbnNvbGUubG9nKGBGb3VuZCBudW1lcmljIGxpdGVyYWw6ICR7dG9rZW4uY29udGVudH1gKTtcblx0XHQgKiAgICAgfVxuXHRcdCAqIH0pO1xuXHRcdCAqL1xuXHRcdHRva2VuaXplOiBmdW5jdGlvbiAodGV4dCwgZ3JhbW1hcikge1xuXHRcdFx0dmFyIHJlc3QgPSBncmFtbWFyLnJlc3Q7XG5cdFx0XHRpZiAocmVzdCkge1xuXHRcdFx0XHRmb3IgKHZhciB0b2tlbiBpbiByZXN0KSB7XG5cdFx0XHRcdFx0Z3JhbW1hclt0b2tlbl0gPSByZXN0W3Rva2VuXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBncmFtbWFyLnJlc3Q7XG5cdFx0XHR9XG5cblx0XHRcdHZhciB0b2tlbkxpc3QgPSBuZXcgTGlua2VkTGlzdCgpO1xuXHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCB0b2tlbkxpc3QuaGVhZCwgdGV4dCk7XG5cblx0XHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIHRva2VuTGlzdC5oZWFkLCAwKTtcblxuXHRcdFx0cmV0dXJuIHRvQXJyYXkodG9rZW5MaXN0KTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogQG5hbWVzcGFjZVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRob29rczoge1xuXHRcdFx0YWxsOiB7fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBBZGRzIHRoZSBnaXZlbiBjYWxsYmFjayB0byB0aGUgbGlzdCBvZiBjYWxsYmFja3MgZm9yIHRoZSBnaXZlbiBob29rLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZSBjYWxsYmFjayB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgaG9vayBpdCBpcyByZWdpc3RlcmVkIGZvciBpcyBydW4uXG5cdFx0XHQgKiBIb29rcyBhcmUgdXN1YWxseSBkaXJlY3RseSBydW4gYnkgYSBoaWdobGlnaHQgZnVuY3Rpb24gYnV0IHlvdSBjYW4gYWxzbyBydW4gaG9va3MgeW91cnNlbGYuXG5cdFx0XHQgKlxuXHRcdFx0ICogT25lIGNhbGxiYWNrIGZ1bmN0aW9uIGNhbiBiZSByZWdpc3RlcmVkIHRvIG11bHRpcGxlIGhvb2tzIGFuZCB0aGUgc2FtZSBob29rIG11bHRpcGxlIHRpbWVzLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtIb29rQ2FsbGJhY2t9IGNhbGxiYWNrIFRoZSBjYWxsYmFjayBmdW5jdGlvbiB3aGljaCBpcyBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKi9cblx0XHRcdGFkZDogZnVuY3Rpb24gKG5hbWUsIGNhbGxiYWNrKSB7XG5cdFx0XHRcdHZhciBob29rcyA9IF8uaG9va3MuYWxsO1xuXG5cdFx0XHRcdGhvb2tzW25hbWVdID0gaG9va3NbbmFtZV0gfHwgW107XG5cblx0XHRcdFx0aG9va3NbbmFtZV0ucHVzaChjYWxsYmFjayk7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJ1bnMgYSBob29rIGludm9raW5nIGFsbCByZWdpc3RlcmVkIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG5cdFx0XHQgKlxuXHRcdFx0ICogQ2FsbGJhY2tzIHdpbGwgYmUgaW52b2tlZCBzeW5jaHJvbm91c2x5IGFuZCBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSB3ZXJlIHJlZ2lzdGVyZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhvb2suXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rIHBhc3NlZCB0byBhbGwgY2FsbGJhY2tzIHJlZ2lzdGVyZWQuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKi9cblx0XHRcdHJ1bjogZnVuY3Rpb24gKG5hbWUsIGVudikge1xuXHRcdFx0XHR2YXIgY2FsbGJhY2tzID0gXy5ob29rcy5hbGxbbmFtZV07XG5cblx0XHRcdFx0aWYgKCFjYWxsYmFja3MgfHwgIWNhbGxiYWNrcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKHZhciBpID0gMCwgY2FsbGJhY2s7IChjYWxsYmFjayA9IGNhbGxiYWNrc1tpKytdKTspIHtcblx0XHRcdFx0XHRjYWxsYmFjayhlbnYpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdFRva2VuOiBUb2tlblxuXHR9O1xuXHRfc2VsZi5QcmlzbSA9IF87XG5cblxuXHQvLyBUeXBlc2NyaXB0IG5vdGU6XG5cdC8vIFRoZSBmb2xsb3dpbmcgY2FuIGJlIHVzZWQgdG8gaW1wb3J0IHRoZSBUb2tlbiB0eXBlIGluIEpTRG9jOlxuXHQvL1xuXHQvLyAgIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8aW1wb3J0KFwiLi9wcmlzbS1jb3JlXCIpW1wiVG9rZW5cIl0+fSBUb2tlblxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHRva2VuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSBTZWUge0BsaW5rIFRva2VuI3R5cGUgdHlwZX1cblx0ICogQHBhcmFtIHtzdHJpbmcgfCBUb2tlblN0cmVhbX0gY29udGVudCBTZWUge0BsaW5rIFRva2VuI2NvbnRlbnQgY29udGVudH1cblx0ICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFthbGlhc10gVGhlIGFsaWFzKGVzKSBvZiB0aGUgdG9rZW4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbbWF0Y2hlZFN0cj1cIlwiXSBBIGNvcHkgb2YgdGhlIGZ1bGwgc3RyaW5nIHRoaXMgdG9rZW4gd2FzIGNyZWF0ZWQgZnJvbS5cblx0ICogQGNsYXNzXG5cdCAqIEBnbG9iYWxcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0ZnVuY3Rpb24gVG9rZW4odHlwZSwgY29udGVudCwgYWxpYXMsIG1hdGNoZWRTdHIpIHtcblx0XHQvKipcblx0XHQgKiBUaGUgdHlwZSBvZiB0aGUgdG9rZW4uXG5cdFx0ICpcblx0XHQgKiBUaGlzIGlzIHVzdWFsbHkgdGhlIGtleSBvZiBhIHBhdHRlcm4gaW4gYSB7QGxpbmsgR3JhbW1hcn0uXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nfVxuXHRcdCAqIEBzZWUgR3JhbW1hclRva2VuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMudHlwZSA9IHR5cGU7XG5cdFx0LyoqXG5cdFx0ICogVGhlIHN0cmluZ3Mgb3IgdG9rZW5zIGNvbnRhaW5lZCBieSB0aGlzIHRva2VuLlxuXHRcdCAqXG5cdFx0ICogVGhpcyB3aWxsIGJlIGEgdG9rZW4gc3RyZWFtIGlmIHRoZSBwYXR0ZXJuIG1hdGNoZWQgYWxzbyBkZWZpbmVkIGFuIGBpbnNpZGVgIGdyYW1tYXIuXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nIHwgVG9rZW5TdHJlYW19XG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMuY29udGVudCA9IGNvbnRlbnQ7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGFsaWFzKGVzKSBvZiB0aGUgdG9rZW4uXG5cdFx0ICpcblx0XHQgKiBAdHlwZSB7c3RyaW5nfHN0cmluZ1tdfVxuXHRcdCAqIEBzZWUgR3JhbW1hclRva2VuXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdHRoaXMuYWxpYXMgPSBhbGlhcztcblx0XHQvLyBDb3B5IG9mIHRoZSBmdWxsIHN0cmluZyB0aGlzIHRva2VuIHdhcyBjcmVhdGVkIGZyb21cblx0XHR0aGlzLmxlbmd0aCA9IChtYXRjaGVkU3RyIHx8ICcnKS5sZW5ndGggfCAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEEgdG9rZW4gc3RyZWFtIGlzIGFuIGFycmF5IG9mIHN0cmluZ3MgYW5kIHtAbGluayBUb2tlbiBUb2tlbn0gb2JqZWN0cy5cblx0ICpcblx0ICogVG9rZW4gc3RyZWFtcyBoYXZlIHRvIGZ1bGZpbGwgYSBmZXcgcHJvcGVydGllcyB0aGF0IGFyZSBhc3N1bWVkIGJ5IG1vc3QgZnVuY3Rpb25zIChtb3N0bHkgaW50ZXJuYWwgb25lcykgdGhhdCBwcm9jZXNzXG5cdCAqIHRoZW0uXG5cdCAqXG5cdCAqIDEuIE5vIGFkamFjZW50IHN0cmluZ3MuXG5cdCAqIDIuIE5vIGVtcHR5IHN0cmluZ3MuXG5cdCAqXG5cdCAqICAgIFRoZSBvbmx5IGV4Y2VwdGlvbiBoZXJlIGlzIHRoZSB0b2tlbiBzdHJlYW0gdGhhdCBvbmx5IGNvbnRhaW5zIHRoZSBlbXB0eSBzdHJpbmcgYW5kIG5vdGhpbmcgZWxzZS5cblx0ICpcblx0ICogQHR5cGVkZWYge0FycmF5PHN0cmluZyB8IFRva2VuPn0gVG9rZW5TdHJlYW1cblx0ICogQGdsb2JhbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgZ2l2ZW4gdG9rZW4gb3IgdG9rZW4gc3RyZWFtIHRvIGFuIEhUTUwgcmVwcmVzZW50YXRpb24uXG5cdCAqXG5cdCAqIFRoZSBmb2xsb3dpbmcgaG9va3Mgd2lsbCBiZSBydW46XG5cdCAqIDEuIGB3cmFwYDogT24gZWFjaCB7QGxpbmsgVG9rZW59LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IFRva2VuIHwgVG9rZW5TdHJlYW19IG8gVGhlIHRva2VuIG9yIHRva2VuIHN0cmVhbSB0byBiZSBjb252ZXJ0ZWQuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbmFtZSBvZiBjdXJyZW50IGxhbmd1YWdlLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgSFRNTCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdG9rZW4gb3IgdG9rZW4gc3RyZWFtLlxuXHQgKiBAbWVtYmVyb2YgVG9rZW5cblx0ICogQHN0YXRpY1xuXHQgKi9cblx0VG9rZW4uc3RyaW5naWZ5ID0gZnVuY3Rpb24gc3RyaW5naWZ5KG8sIGxhbmd1YWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBvID09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gbztcblx0XHR9XG5cdFx0aWYgKEFycmF5LmlzQXJyYXkobykpIHtcblx0XHRcdHZhciBzID0gJyc7XG5cdFx0XHRvLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcblx0XHRcdFx0cyArPSBzdHJpbmdpZnkoZSwgbGFuZ3VhZ2UpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gcztcblx0XHR9XG5cblx0XHR2YXIgZW52ID0ge1xuXHRcdFx0dHlwZTogby50eXBlLFxuXHRcdFx0Y29udGVudDogc3RyaW5naWZ5KG8uY29udGVudCwgbGFuZ3VhZ2UpLFxuXHRcdFx0dGFnOiAnc3BhbicsXG5cdFx0XHRjbGFzc2VzOiBbJ3Rva2VuJywgby50eXBlXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHt9LFxuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlXG5cdFx0fTtcblxuXHRcdHZhciBhbGlhc2VzID0gby5hbGlhcztcblx0XHRpZiAoYWxpYXNlcykge1xuXHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcblx0XHRcdFx0QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoZW52LmNsYXNzZXMsIGFsaWFzZXMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZW52LmNsYXNzZXMucHVzaChhbGlhc2VzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRfLmhvb2tzLnJ1bignd3JhcCcsIGVudik7XG5cblx0XHR2YXIgYXR0cmlidXRlcyA9ICcnO1xuXHRcdGZvciAodmFyIG5hbWUgaW4gZW52LmF0dHJpYnV0ZXMpIHtcblx0XHRcdGF0dHJpYnV0ZXMgKz0gJyAnICsgbmFtZSArICc9XCInICsgKGVudi5hdHRyaWJ1dGVzW25hbWVdIHx8ICcnKS5yZXBsYWNlKC9cIi9nLCAnJnF1b3Q7JykgKyAnXCInO1xuXHRcdH1cblxuXHRcdHJldHVybiAnPCcgKyBlbnYudGFnICsgJyBjbGFzcz1cIicgKyBlbnYuY2xhc3Nlcy5qb2luKCcgJykgKyAnXCInICsgYXR0cmlidXRlcyArICc+JyArIGVudi5jb250ZW50ICsgJzwvJyArIGVudi50YWcgKyAnPic7XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7UmVnRXhwfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBwb3Ncblx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHRcblx0ICogQHBhcmFtIHtib29sZWFufSBsb29rYmVoaW5kXG5cdCAqIEByZXR1cm5zIHtSZWdFeHBFeGVjQXJyYXkgfCBudWxsfVxuXHQgKi9cblx0ZnVuY3Rpb24gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIHBvcywgdGV4dCwgbG9va2JlaGluZCkge1xuXHRcdHBhdHRlcm4ubGFzdEluZGV4ID0gcG9zO1xuXHRcdHZhciBtYXRjaCA9IHBhdHRlcm4uZXhlYyh0ZXh0KTtcblx0XHRpZiAobWF0Y2ggJiYgbG9va2JlaGluZCAmJiBtYXRjaFsxXSkge1xuXHRcdFx0Ly8gY2hhbmdlIHRoZSBtYXRjaCB0byByZW1vdmUgdGhlIHRleHQgbWF0Y2hlZCBieSB0aGUgUHJpc20gbG9va2JlaGluZCBncm91cFxuXHRcdFx0dmFyIGxvb2tiZWhpbmRMZW5ndGggPSBtYXRjaFsxXS5sZW5ndGg7XG5cdFx0XHRtYXRjaC5pbmRleCArPSBsb29rYmVoaW5kTGVuZ3RoO1xuXHRcdFx0bWF0Y2hbMF0gPSBtYXRjaFswXS5zbGljZShsb29rYmVoaW5kTGVuZ3RoKTtcblx0XHR9XG5cdFx0cmV0dXJuIG1hdGNoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdDxzdHJpbmcgfCBUb2tlbj59IHRva2VuTGlzdFxuXHQgKiBAcGFyYW0ge2FueX0gZ3JhbW1hclxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPHN0cmluZyB8IFRva2VuPn0gc3RhcnROb2RlXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydFBvc1xuXHQgKiBAcGFyYW0ge1JlbWF0Y2hPcHRpb25zfSBbcmVtYXRjaF1cblx0ICogQHJldHVybnMge3ZvaWR9XG5cdCAqIEBwcml2YXRlXG5cdCAqXG5cdCAqIEB0eXBlZGVmIFJlbWF0Y2hPcHRpb25zXG5cdCAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBjYXVzZVxuXHQgKiBAcHJvcGVydHkge251bWJlcn0gcmVhY2hcblx0ICovXG5cdGZ1bmN0aW9uIG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIHN0YXJ0Tm9kZSwgc3RhcnRQb3MsIHJlbWF0Y2gpIHtcblx0XHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XG5cdFx0XHRpZiAoIWdyYW1tYXIuaGFzT3duUHJvcGVydHkodG9rZW4pIHx8ICFncmFtbWFyW3Rva2VuXSkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0dmFyIHBhdHRlcm5zID0gZ3JhbW1hclt0b2tlbl07XG5cdFx0XHRwYXR0ZXJucyA9IEFycmF5LmlzQXJyYXkocGF0dGVybnMpID8gcGF0dGVybnMgOiBbcGF0dGVybnNdO1xuXG5cdFx0XHRmb3IgKHZhciBqID0gMDsgaiA8IHBhdHRlcm5zLmxlbmd0aDsgKytqKSB7XG5cdFx0XHRcdGlmIChyZW1hdGNoICYmIHJlbWF0Y2guY2F1c2UgPT0gdG9rZW4gKyAnLCcgKyBqKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHBhdHRlcm5PYmogPSBwYXR0ZXJuc1tqXTtcblx0XHRcdFx0dmFyIGluc2lkZSA9IHBhdHRlcm5PYmouaW5zaWRlO1xuXHRcdFx0XHR2YXIgbG9va2JlaGluZCA9ICEhcGF0dGVybk9iai5sb29rYmVoaW5kO1xuXHRcdFx0XHR2YXIgZ3JlZWR5ID0gISFwYXR0ZXJuT2JqLmdyZWVkeTtcblx0XHRcdFx0dmFyIGFsaWFzID0gcGF0dGVybk9iai5hbGlhcztcblxuXHRcdFx0XHRpZiAoZ3JlZWR5ICYmICFwYXR0ZXJuT2JqLnBhdHRlcm4uZ2xvYmFsKSB7XG5cdFx0XHRcdFx0Ly8gV2l0aG91dCB0aGUgZ2xvYmFsIGZsYWcsIGxhc3RJbmRleCB3b24ndCB3b3JrXG5cdFx0XHRcdFx0dmFyIGZsYWdzID0gcGF0dGVybk9iai5wYXR0ZXJuLnRvU3RyaW5nKCkubWF0Y2goL1tpbXN1eV0qJC8pWzBdO1xuXHRcdFx0XHRcdHBhdHRlcm5PYmoucGF0dGVybiA9IFJlZ0V4cChwYXR0ZXJuT2JqLnBhdHRlcm4uc291cmNlLCBmbGFncyArICdnJyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKiogQHR5cGUge1JlZ0V4cH0gKi9cblx0XHRcdFx0dmFyIHBhdHRlcm4gPSBwYXR0ZXJuT2JqLnBhdHRlcm4gfHwgcGF0dGVybk9iajtcblxuXHRcdFx0XHRmb3IgKCAvLyBpdGVyYXRlIHRoZSB0b2tlbiBsaXN0IGFuZCBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IHRva2VuL3N0cmluZyBwb3NpdGlvblxuXHRcdFx0XHRcdHZhciBjdXJyZW50Tm9kZSA9IHN0YXJ0Tm9kZS5uZXh0LCBwb3MgPSBzdGFydFBvcztcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSAhPT0gdG9rZW5MaXN0LnRhaWw7XG5cdFx0XHRcdFx0cG9zICs9IGN1cnJlbnROb2RlLnZhbHVlLmxlbmd0aCwgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5uZXh0XG5cdFx0XHRcdCkge1xuXG5cdFx0XHRcdFx0aWYgKHJlbWF0Y2ggJiYgcG9zID49IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHZhciBzdHIgPSBjdXJyZW50Tm9kZS52YWx1ZTtcblxuXHRcdFx0XHRcdGlmICh0b2tlbkxpc3QubGVuZ3RoID4gdGV4dC5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdC8vIFNvbWV0aGluZyB3ZW50IHRlcnJpYmx5IHdyb25nLCBBQk9SVCwgQUJPUlQhXG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKHN0ciBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcmVtb3ZlQ291bnQgPSAxOyAvLyB0aGlzIGlzIHRoZSB0byBwYXJhbWV0ZXIgb2YgcmVtb3ZlQmV0d2VlblxuXHRcdFx0XHRcdHZhciBtYXRjaDtcblxuXHRcdFx0XHRcdGlmIChncmVlZHkpIHtcblx0XHRcdFx0XHRcdG1hdGNoID0gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIHBvcywgdGV4dCwgbG9va2JlaGluZCk7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoIHx8IG1hdGNoLmluZGV4ID49IHRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4O1xuXHRcdFx0XHRcdFx0dmFyIHRvID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR2YXIgcCA9IHBvcztcblxuXHRcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbm9kZSB0aGF0IGNvbnRhaW5zIHRoZSBtYXRjaFxuXHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoZnJvbSA+PSBwKSB7XG5cdFx0XHRcdFx0XHRcdGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dDtcblx0XHRcdFx0XHRcdFx0cCArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyBhZGp1c3QgcG9zIChhbmQgcClcblx0XHRcdFx0XHRcdHAgLT0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0cG9zID0gcDtcblxuXHRcdFx0XHRcdFx0Ly8gdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFRva2VuLCB0aGVuIHRoZSBtYXRjaCBzdGFydHMgaW5zaWRlIGFub3RoZXIgVG9rZW4sIHdoaWNoIGlzIGludmFsaWRcblx0XHRcdFx0XHRcdGlmIChjdXJyZW50Tm9kZS52YWx1ZSBpbnN0YW5jZW9mIFRva2VuKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBmaW5kIHRoZSBsYXN0IG5vZGUgd2hpY2ggaXMgYWZmZWN0ZWQgYnkgdGhpcyBtYXRjaFxuXHRcdFx0XHRcdFx0Zm9yIChcblx0XHRcdFx0XHRcdFx0dmFyIGsgPSBjdXJyZW50Tm9kZTtcblx0XHRcdFx0XHRcdFx0ayAhPT0gdG9rZW5MaXN0LnRhaWwgJiYgKHAgPCB0byB8fCB0eXBlb2Ygay52YWx1ZSA9PT0gJ3N0cmluZycpO1xuXHRcdFx0XHRcdFx0XHRrID0gay5uZXh0XG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlQ291bnQrKztcblx0XHRcdFx0XHRcdFx0cCArPSBrLnZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdHJlbW92ZUNvdW50LS07XG5cblx0XHRcdFx0XHRcdC8vIHJlcGxhY2Ugd2l0aCB0aGUgbmV3IG1hdGNoXG5cdFx0XHRcdFx0XHRzdHIgPSB0ZXh0LnNsaWNlKHBvcywgcCk7XG5cdFx0XHRcdFx0XHRtYXRjaC5pbmRleCAtPSBwb3M7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdG1hdGNoID0gbWF0Y2hQYXR0ZXJuKHBhdHRlcm4sIDAsIHN0ciwgbG9va2JlaGluZCk7XG5cdFx0XHRcdFx0XHRpZiAoIW1hdGNoKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZWRlY2xhcmVcblx0XHRcdFx0XHR2YXIgZnJvbSA9IG1hdGNoLmluZGV4O1xuXHRcdFx0XHRcdHZhciBtYXRjaFN0ciA9IG1hdGNoWzBdO1xuXHRcdFx0XHRcdHZhciBiZWZvcmUgPSBzdHIuc2xpY2UoMCwgZnJvbSk7XG5cdFx0XHRcdFx0dmFyIGFmdGVyID0gc3RyLnNsaWNlKGZyb20gKyBtYXRjaFN0ci5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0dmFyIHJlYWNoID0gcG9zICsgc3RyLmxlbmd0aDtcblx0XHRcdFx0XHRpZiAocmVtYXRjaCAmJiByZWFjaCA+IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdHJlbWF0Y2gucmVhY2ggPSByZWFjaDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgcmVtb3ZlRnJvbSA9IGN1cnJlbnROb2RlLnByZXY7XG5cblx0XHRcdFx0XHRpZiAoYmVmb3JlKSB7XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCBiZWZvcmUpO1xuXHRcdFx0XHRcdFx0cG9zICs9IGJlZm9yZS5sZW5ndGg7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmVtb3ZlUmFuZ2UodG9rZW5MaXN0LCByZW1vdmVGcm9tLCByZW1vdmVDb3VudCk7XG5cblx0XHRcdFx0XHR2YXIgd3JhcHBlZCA9IG5ldyBUb2tlbih0b2tlbiwgaW5zaWRlID8gXy50b2tlbml6ZShtYXRjaFN0ciwgaW5zaWRlKSA6IG1hdGNoU3RyLCBhbGlhcywgbWF0Y2hTdHIpO1xuXHRcdFx0XHRcdGN1cnJlbnROb2RlID0gYWRkQWZ0ZXIodG9rZW5MaXN0LCByZW1vdmVGcm9tLCB3cmFwcGVkKTtcblxuXHRcdFx0XHRcdGlmIChhZnRlcikge1xuXHRcdFx0XHRcdFx0YWRkQWZ0ZXIodG9rZW5MaXN0LCBjdXJyZW50Tm9kZSwgYWZ0ZXIpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZW1vdmVDb3VudCA+IDEpIHtcblx0XHRcdFx0XHRcdC8vIGF0IGxlYXN0IG9uZSBUb2tlbiBvYmplY3Qgd2FzIHJlbW92ZWQsIHNvIHdlIGhhdmUgdG8gZG8gc29tZSByZW1hdGNoaW5nXG5cdFx0XHRcdFx0XHQvLyB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiB0aGUgY3VycmVudCBwYXR0ZXJuIGlzIGdyZWVkeVxuXG5cdFx0XHRcdFx0XHQvKiogQHR5cGUge1JlbWF0Y2hPcHRpb25zfSAqL1xuXHRcdFx0XHRcdFx0dmFyIG5lc3RlZFJlbWF0Y2ggPSB7XG5cdFx0XHRcdFx0XHRcdGNhdXNlOiB0b2tlbiArICcsJyArIGosXG5cdFx0XHRcdFx0XHRcdHJlYWNoOiByZWFjaFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdG1hdGNoR3JhbW1hcih0ZXh0LCB0b2tlbkxpc3QsIGdyYW1tYXIsIGN1cnJlbnROb2RlLnByZXYsIHBvcywgbmVzdGVkUmVtYXRjaCk7XG5cblx0XHRcdFx0XHRcdC8vIHRoZSByZWFjaCBtaWdodCBoYXZlIGJlZW4gZXh0ZW5kZWQgYmVjYXVzZSBvZiB0aGUgcmVtYXRjaGluZ1xuXHRcdFx0XHRcdFx0aWYgKHJlbWF0Y2ggJiYgbmVzdGVkUmVtYXRjaC5yZWFjaCA+IHJlbWF0Y2gucmVhY2gpIHtcblx0XHRcdFx0XHRcdFx0cmVtYXRjaC5yZWFjaCA9IG5lc3RlZFJlbWF0Y2gucmVhY2g7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEB0eXBlZGVmIExpbmtlZExpc3ROb2RlXG5cdCAqIEBwcm9wZXJ0eSB7VH0gdmFsdWVcblx0ICogQHByb3BlcnR5IHtMaW5rZWRMaXN0Tm9kZTxUPiB8IG51bGx9IHByZXYgVGhlIHByZXZpb3VzIG5vZGUuXG5cdCAqIEBwcm9wZXJ0eSB7TGlua2VkTGlzdE5vZGU8VD4gfCBudWxsfSBuZXh0IFRoZSBuZXh0IG5vZGUuXG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXG5cdC8qKlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblx0ZnVuY3Rpb24gTGlua2VkTGlzdCgpIHtcblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHZhciBoZWFkID0geyB2YWx1ZTogbnVsbCwgcHJldjogbnVsbCwgbmV4dDogbnVsbCB9O1xuXHRcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG5cdFx0dmFyIHRhaWwgPSB7IHZhbHVlOiBudWxsLCBwcmV2OiBoZWFkLCBuZXh0OiBudWxsIH07XG5cdFx0aGVhZC5uZXh0ID0gdGFpbDtcblxuXHRcdC8qKiBAdHlwZSB7TGlua2VkTGlzdE5vZGU8VD59ICovXG5cdFx0dGhpcy5oZWFkID0gaGVhZDtcblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHRoaXMudGFpbCA9IHRhaWw7XG5cdFx0dGhpcy5sZW5ndGggPSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFkZHMgYSBuZXcgbm9kZSB3aXRoIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgbGlzdC5cblx0ICpcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8VD59IG5vZGVcblx0ICogQHBhcmFtIHtUfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7TGlua2VkTGlzdE5vZGU8VD59IFRoZSBhZGRlZCBub2RlLlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKi9cblx0ZnVuY3Rpb24gYWRkQWZ0ZXIobGlzdCwgbm9kZSwgdmFsdWUpIHtcblx0XHQvLyBhc3N1bWVzIHRoYXQgbm9kZSAhPSBsaXN0LnRhaWwgJiYgdmFsdWVzLmxlbmd0aCA+PSAwXG5cdFx0dmFyIG5leHQgPSBub2RlLm5leHQ7XG5cblx0XHR2YXIgbmV3Tm9kZSA9IHsgdmFsdWU6IHZhbHVlLCBwcmV2OiBub2RlLCBuZXh0OiBuZXh0IH07XG5cdFx0bm9kZS5uZXh0ID0gbmV3Tm9kZTtcblx0XHRuZXh0LnByZXYgPSBuZXdOb2RlO1xuXHRcdGxpc3QubGVuZ3RoKys7XG5cblx0XHRyZXR1cm4gbmV3Tm9kZTtcblx0fVxuXHQvKipcblx0ICogUmVtb3ZlcyBgY291bnRgIG5vZGVzIGFmdGVyIHRoZSBnaXZlbiBub2RlLiBUaGUgZ2l2ZW4gbm9kZSB3aWxsIG5vdCBiZSByZW1vdmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3Q8VD59IGxpc3Rcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxUPn0gbm9kZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gY291bnRcblx0ICogQHRlbXBsYXRlIFRcblx0ICovXG5cdGZ1bmN0aW9uIHJlbW92ZVJhbmdlKGxpc3QsIG5vZGUsIGNvdW50KSB7XG5cdFx0dmFyIG5leHQgPSBub2RlLm5leHQ7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudCAmJiBuZXh0ICE9PSBsaXN0LnRhaWw7IGkrKykge1xuXHRcdFx0bmV4dCA9IG5leHQubmV4dDtcblx0XHR9XG5cdFx0bm9kZS5uZXh0ID0gbmV4dDtcblx0XHRuZXh0LnByZXYgPSBub2RlO1xuXHRcdGxpc3QubGVuZ3RoIC09IGk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxuXHQgKiBAcmV0dXJucyB7VFtdfVxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKi9cblx0ZnVuY3Rpb24gdG9BcnJheShsaXN0KSB7XG5cdFx0dmFyIGFycmF5ID0gW107XG5cdFx0dmFyIG5vZGUgPSBsaXN0LmhlYWQubmV4dDtcblx0XHR3aGlsZSAobm9kZSAhPT0gbGlzdC50YWlsKSB7XG5cdFx0XHRhcnJheS5wdXNoKG5vZGUudmFsdWUpO1xuXHRcdFx0bm9kZSA9IG5vZGUubmV4dDtcblx0XHR9XG5cdFx0cmV0dXJuIGFycmF5O1xuXHR9XG5cblxuXHRpZiAoIV9zZWxmLmRvY3VtZW50KSB7XG5cdFx0aWYgKCFfc2VsZi5hZGRFdmVudExpc3RlbmVyKSB7XG5cdFx0XHQvLyBpbiBOb2RlLmpzXG5cdFx0XHRyZXR1cm4gXztcblx0XHR9XG5cblx0XHRpZiAoIV8uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyKSB7XG5cdFx0XHQvLyBJbiB3b3JrZXJcblx0XHRcdF9zZWxmLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRcdHZhciBtZXNzYWdlID0gSlNPTi5wYXJzZShldnQuZGF0YSk7XG5cdFx0XHRcdHZhciBsYW5nID0gbWVzc2FnZS5sYW5ndWFnZTtcblx0XHRcdFx0dmFyIGNvZGUgPSBtZXNzYWdlLmNvZGU7XG5cdFx0XHRcdHZhciBpbW1lZGlhdGVDbG9zZSA9IG1lc3NhZ2UuaW1tZWRpYXRlQ2xvc2U7XG5cblx0XHRcdFx0X3NlbGYucG9zdE1lc3NhZ2UoXy5oaWdobGlnaHQoY29kZSwgXy5sYW5ndWFnZXNbbGFuZ10sIGxhbmcpKTtcblx0XHRcdFx0aWYgKGltbWVkaWF0ZUNsb3NlKSB7XG5cdFx0XHRcdFx0X3NlbGYuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSwgZmFsc2UpO1xuXHRcdH1cblxuXHRcdHJldHVybiBfO1xuXHR9XG5cblx0Ly8gR2V0IGN1cnJlbnQgc2NyaXB0IGFuZCBoaWdobGlnaHRcblx0dmFyIHNjcmlwdCA9IF8udXRpbC5jdXJyZW50U2NyaXB0KCk7XG5cblx0aWYgKHNjcmlwdCkge1xuXHRcdF8uZmlsZW5hbWUgPSBzY3JpcHQuc3JjO1xuXG5cdFx0aWYgKHNjcmlwdC5oYXNBdHRyaWJ1dGUoJ2RhdGEtbWFudWFsJykpIHtcblx0XHRcdF8ubWFudWFsID0gdHJ1ZTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2soKSB7XG5cdFx0aWYgKCFfLm1hbnVhbCkge1xuXHRcdFx0Xy5oaWdobGlnaHRBbGwoKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoIV8ubWFudWFsKSB7XG5cdFx0Ly8gSWYgdGhlIGRvY3VtZW50IHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aGVuIHdlJ2xsIHVzZSBET01Db250ZW50TG9hZGVkLlxuXHRcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImludGVyYWN0aXZlXCIgYW5kIHRoZSBwcmlzbS5qcyBzY3JpcHQgaXMgZGVmZXJyZWQsIHRoZW4gd2UnbGwgYWxzbyB1c2UgdGhlXG5cdFx0Ly8gRE9NQ29udGVudExvYWRlZCBldmVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIHNvbWUgcGx1Z2lucyBvciBsYW5ndWFnZXMgd2hpY2ggaGF2ZSBhbHNvIGJlZW4gZGVmZXJyZWQgYW5kIHRoZXlcblx0XHQvLyBtaWdodCB0YWtlIGxvbmdlciBvbmUgYW5pbWF0aW9uIGZyYW1lIHRvIGV4ZWN1dGUgd2hpY2ggY2FuIGNyZWF0ZSBhIHJhY2UgY29uZGl0aW9uIHdoZXJlIG9ubHkgc29tZSBwbHVnaW5zIGhhdmVcblx0XHQvLyBiZWVuIGxvYWRlZCB3aGVuIFByaXNtLmhpZ2hsaWdodEFsbCgpIGlzIGV4ZWN1dGVkLCBkZXBlbmRpbmcgb24gaG93IGZhc3QgcmVzb3VyY2VzIGFyZSBsb2FkZWQuXG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yMTAyXG5cdFx0dmFyIHJlYWR5U3RhdGUgPSBkb2N1bWVudC5yZWFkeVN0YXRlO1xuXHRcdGlmIChyZWFkeVN0YXRlID09PSAnbG9hZGluZycgfHwgcmVhZHlTdGF0ZSA9PT0gJ2ludGVyYWN0aXZlJyAmJiBzY3JpcHQgJiYgc2NyaXB0LmRlZmVyKSB7XG5cdFx0XHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHtcblx0XHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShoaWdobGlnaHRBdXRvbWF0aWNhbGx5Q2FsbGJhY2spO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrLCAxNik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIF87XG5cbn0oX3NlbGYpKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzKSB7XG5cdG1vZHVsZS5leHBvcnRzID0gUHJpc207XG59XG5cbi8vIGhhY2sgZm9yIGNvbXBvbmVudHMgdG8gd29yayBjb3JyZWN0bHkgaW4gbm9kZS5qc1xuaWYgKHR5cGVvZiBnbG9iYWwgIT09ICd1bmRlZmluZWQnKSB7XG5cdGdsb2JhbC5QcmlzbSA9IFByaXNtO1xufVxuXG4vLyBzb21lIGFkZGl0aW9uYWwgZG9jdW1lbnRhdGlvbi90eXBlc1xuXG4vKipcbiAqIFRoZSBleHBhbnNpb24gb2YgYSBzaW1wbGUgYFJlZ0V4cGAgbGl0ZXJhbCB0byBzdXBwb3J0IGFkZGl0aW9uYWwgcHJvcGVydGllcy5cbiAqXG4gKiBAdHlwZWRlZiBHcmFtbWFyVG9rZW5cbiAqIEBwcm9wZXJ0eSB7UmVnRXhwfSBwYXR0ZXJuIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gb2YgdGhlIHRva2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbbG9va2JlaGluZD1mYWxzZV0gSWYgYHRydWVgLCB0aGVuIHRoZSBmaXJzdCBjYXB0dXJpbmcgZ3JvdXAgb2YgYHBhdHRlcm5gIHdpbGwgKGVmZmVjdGl2ZWx5KVxuICogYmVoYXZlIGFzIGEgbG9va2JlaGluZCBncm91cCBtZWFuaW5nIHRoYXQgdGhlIGNhcHR1cmVkIHRleHQgd2lsbCBub3QgYmUgcGFydCBvZiB0aGUgbWF0Y2hlZCB0ZXh0IG9mIHRoZSBuZXcgdG9rZW4uXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IFtncmVlZHk9ZmFsc2VdIFdoZXRoZXIgdGhlIHRva2VuIGlzIGdyZWVkeS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHN0cmluZ1tdfSBbYWxpYXNdIEFuIG9wdGlvbmFsIGFsaWFzIG9yIGxpc3Qgb2YgYWxpYXNlcy5cbiAqIEBwcm9wZXJ0eSB7R3JhbW1hcn0gW2luc2lkZV0gVGhlIG5lc3RlZCBncmFtbWFyIG9mIHRoaXMgdG9rZW4uXG4gKlxuICogVGhlIGBpbnNpZGVgIGdyYW1tYXIgd2lsbCBiZSB1c2VkIHRvIHRva2VuaXplIHRoZSB0ZXh0IHZhbHVlIG9mIGVhY2ggdG9rZW4gb2YgdGhpcyBraW5kLlxuICpcbiAqIFRoaXMgY2FuIGJlIHVzZWQgdG8gbWFrZSBuZXN0ZWQgYW5kIGV2ZW4gcmVjdXJzaXZlIGxhbmd1YWdlIGRlZmluaXRpb25zLlxuICpcbiAqIE5vdGU6IFRoaXMgY2FuIGNhdXNlIGluZmluaXRlIHJlY3Vyc2lvbi4gQmUgY2FyZWZ1bCB3aGVuIHlvdSBlbWJlZCBkaWZmZXJlbnQgbGFuZ3VhZ2VzIG9yIGV2ZW4gdGhlIHNhbWUgbGFuZ3VhZ2UgaW50b1xuICogZWFjaCBhbm90aGVyLlxuICogQGdsb2JhbFxuICogQHB1YmxpY1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgR3JhbW1hclxuICogQHR5cGUge09iamVjdDxzdHJpbmcsIFJlZ0V4cCB8IEdyYW1tYXJUb2tlbiB8IEFycmF5PFJlZ0V4cCB8IEdyYW1tYXJUb2tlbj4+fVxuICogQHByb3BlcnR5IHtHcmFtbWFyfSBbcmVzdF0gQW4gb3B0aW9uYWwgZ3JhbW1hciBvYmplY3QgdGhhdCB3aWxsIGJlIGFwcGVuZGVkIHRvIHRoaXMgZ3JhbW1hci5cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuXG4vKipcbiAqIEEgZnVuY3Rpb24gd2hpY2ggd2lsbCBpbnZva2VkIGFmdGVyIGFuIGVsZW1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBoaWdobGlnaHRlZC5cbiAqXG4gKiBAY2FsbGJhY2sgSGlnaGxpZ2h0Q2FsbGJhY2tcbiAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCBzdWNjZXNzZnVsbHkgaGlnaGxpZ2h0ZWQuXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBIb29rQ2FsbGJhY2tcbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gZW52IFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgb2YgdGhlIGhvb2suXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuO1xuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzwhLS0oPzooPyE8IS0tKVtcXHNcXFNdKSo/LS0+Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3Byb2xvZyc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcP1tcXHNcXFNdKz9cXD8+Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2RvY3R5cGUnOiB7XG5cdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3htbC8jTlQtZG9jdHlwZWRlY2xcblx0XHRwYXR0ZXJuOiAvPCFET0NUWVBFKD86W14+XCInW1xcXV18XCJbXlwiXSpcInwnW14nXSonKSsoPzpcXFsoPzpbXjxcIidcXF1dfFwiW15cIl0qXCJ8J1teJ10qJ3w8KD8hIS0tKXw8IS0tKD86W14tXXwtKD8hLT4pKSotLT4pKlxcXVxccyopPz4vaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJuYWwtc3Vic2V0Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5bXlxcW10qXFxbKVtcXHNcXFNdKyg/PVxcXT4kKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cIlteXCJdKlwifCdbXiddKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXjwhfD4kfFtbXFxdXS8sXG5cdFx0XHQnZG9jdHlwZS10YWcnOiAvXkRPQ1RZUEUvaSxcblx0XHRcdCduYW1lJzogL1teXFxzPD4nXCJdKy9cblx0XHR9XG5cdH0sXG5cdCdjZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvPCFcXFtDREFUQVxcW1tcXHNcXFNdKj9cXF1cXF0+L2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogLzxcXC8/KD8hXFxkKVteXFxzPlxcLz0kPCVdKyg/Olxccyg/OlxccypbXlxccz5cXC89XSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKD89W1xccz5dKSl8KD89W1xccy8+XSkpKSspP1xccypcXC8/Pi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0cGF0dGVybjogL148XFwvP1teXFxzPlxcL10rLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148XFwvPy8sXG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzcGVjaWFsLWF0dHInOiBbXSxcblx0XHRcdCdhdHRyLXZhbHVlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL149Lyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdhdHRyLWVxdWFscydcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopW1wiJ118W1wiJ10kLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC8/Pi8sXG5cdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW15cXHM+XFwvXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogL15bXlxccz5cXC86XSs6L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9XG5cdH0sXG5cdCdlbnRpdHknOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyZbXFxkYS16XXsxLDh9Oy9pLFxuXHRcdFx0YWxpYXM6ICduYW1lZC1lbnRpdHknXG5cdFx0fSxcblx0XHQvJiN4P1tcXGRhLWZdezEsOH07L2lcblx0XVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10uaW5zaWRlWydlbnRpdHknXSA9XG5cdFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ2VudGl0eSddO1xuUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsnZG9jdHlwZSddLmluc2lkZVsnaW50ZXJuYWwtc3Vic2V0J10uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblxuLy8gUGx1Z2luIHRvIG1ha2UgZW50aXR5IHRpdGxlIHNob3cgdGhlIHJlYWwgZW50aXR5LCBpZGVhIGJ5IFJvbWFuIEtvbWFyb3ZcblByaXNtLmhvb2tzLmFkZCgnd3JhcCcsIGZ1bmN0aW9uIChlbnYpIHtcblxuXHRpZiAoZW52LnR5cGUgPT09ICdlbnRpdHknKSB7XG5cdFx0ZW52LmF0dHJpYnV0ZXNbJ3RpdGxlJ10gPSBlbnYuY29udGVudC5yZXBsYWNlKC8mYW1wOy8sICcmJyk7XG5cdH1cbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcsICdhZGRJbmxpbmVkJywge1xuXHQvKipcblx0ICogQWRkcyBhbiBpbmxpbmVkIGxhbmd1YWdlIHRvIG1hcmt1cC5cblx0ICpcblx0ICogQW4gZXhhbXBsZSBvZiBhbiBpbmxpbmVkIGxhbmd1YWdlIGlzIENTUyB3aXRoIGA8c3R5bGU+YCB0YWdzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnIHRoYXQgY29udGFpbnMgdGhlIGlubGluZWQgbGFuZ3VhZ2UuIFRoaXMgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXNcblx0ICogY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cblx0ICogQGV4YW1wbGVcblx0ICogYWRkSW5saW5lZCgnc3R5bGUnLCAnY3NzJyk7XG5cdCAqL1xuXHR2YWx1ZTogZnVuY3Rpb24gYWRkSW5saW5lZCh0YWdOYW1lLCBsYW5nKSB7XG5cdFx0dmFyIGluY2x1ZGVkQ2RhdGFJbnNpZGUgPSB7fTtcblx0XHRpbmNsdWRlZENkYXRhSW5zaWRlWydsYW5ndWFnZS0nICsgbGFuZ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvKF48IVxcW0NEQVRBXFxbKVtcXHNcXFNdKz8oPz1cXF1cXF0+JCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdH07XG5cdFx0aW5jbHVkZWRDZGF0YUluc2lkZVsnY2RhdGEnXSA9IC9ePCFcXFtDREFUQVxcW3xcXF1cXF0+JC9pO1xuXG5cdFx0dmFyIGluc2lkZSA9IHtcblx0XHRcdCdpbmNsdWRlZC1jZGF0YSc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPi9pLFxuXHRcdFx0XHRpbnNpZGU6IGluY2x1ZGVkQ2RhdGFJbnNpZGVcblx0XHRcdH1cblx0XHR9O1xuXHRcdGluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdH07XG5cblx0XHR2YXIgZGVmID0ge307XG5cdFx0ZGVmW3RhZ05hbWVdID0ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oPF9fW14+XSo+KSg/OjwhXFxbQ0RBVEFcXFsoPzpbXlxcXV18XFxdKD8hXFxdPikpKlxcXVxcXT58KD8hPCFcXFtDREFUQVxcWylbXFxzXFxTXSkqPyg/PTxcXC9fXz4pLy5zb3VyY2UucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFnTmFtZTsgfSksICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBpbnNpZGVcblx0XHR9O1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NkYXRhJywgZGVmKTtcblx0fVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcsICdhZGRBdHRyaWJ1dGUnLCB7XG5cdC8qKlxuXHQgKiBBZGRzIGFuIHBhdHRlcm4gdG8gaGlnaGxpZ2h0IGxhbmd1YWdlcyBlbWJlZGRlZCBpbiBIVE1MIGF0dHJpYnV0ZXMuXG5cdCAqXG5cdCAqIEFuIGV4YW1wbGUgb2YgYW4gaW5saW5lZCBsYW5ndWFnZSBpcyBDU1Mgd2l0aCBgc3R5bGVgIGF0dHJpYnV0ZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhdHRyTmFtZSBUaGUgbmFtZSBvZiB0aGUgdGFnIHRoYXQgY29udGFpbnMgdGhlIGlubGluZWQgbGFuZ3VhZ2UuIFRoaXMgbmFtZSB3aWxsIGJlIHRyZWF0ZWQgYXNcblx0ICogY2FzZSBpbnNlbnNpdGl2ZS5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmcgVGhlIGxhbmd1YWdlIGtleS5cblx0ICogQGV4YW1wbGVcblx0ICogYWRkQXR0cmlidXRlKCdzdHlsZScsICdjc3MnKTtcblx0ICovXG5cdHZhbHVlOiBmdW5jdGlvbiAoYXR0ck5hbWUsIGxhbmcpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVbJ3NwZWNpYWwtYXR0ciddLnB1c2goe1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKF58W1wiJ1xcc10pLy5zb3VyY2UgKyAnKD86JyArIGF0dHJOYW1lICsgJyknICsgL1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIj49XSsoPz1bXFxzPl0pKS8uc291cmNlLFxuXHRcdFx0XHQnaSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHRyLW5hbWUnOiAvXlteXFxzPV0rLyxcblx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLz1bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF49XFxzKihbXCInXXwoPyFbXCInXSkpKVxcU1tcXHNcXFNdKig/PVxcMiQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6IFtsYW5nLCAnbGFuZ3VhZ2UtJyArIGxhbmddLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9ePS8sXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdhdHRyLWVxdWFscydcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0L1wifCcvXG5cdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5QcmlzbS5sYW5ndWFnZXMubWF0aG1sID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblByaXNtLmxhbmd1YWdlcy5zdmcgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuXG5QcmlzbS5sYW5ndWFnZXMueG1sID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuUHJpc20ubGFuZ3VhZ2VzLnNzbWwgPSBQcmlzbS5sYW5ndWFnZXMueG1sO1xuUHJpc20ubGFuZ3VhZ2VzLmF0b20gPSBQcmlzbS5sYW5ndWFnZXMueG1sO1xuUHJpc20ubGFuZ3VhZ2VzLnJzcyA9IFByaXNtLmxhbmd1YWdlcy54bWw7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nID0gLyg/OlwiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcInwnKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W14nXFxcXFxcclxcbl0pKicpLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzID0ge1xuXHRcdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdCdhdHJ1bGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ0BbXFxcXHctXSg/OicgKyAvW147e1xcc1wiJ118XFxzKyg/IVxccykvLnNvdXJjZSArICd8JyArIHN0cmluZy5zb3VyY2UgKyAnKSo/JyArIC8oPzo7fCg/PVxccypcXHspKS8uc291cmNlKSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncnVsZSc6IC9eQFtcXHctXSsvLFxuXHRcdFx0XHQnc2VsZWN0b3ItZnVuY3Rpb24tYXJndW1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXGJzZWxlY3RvclxccypcXChcXHMqKD8hW1xccyldKSkoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkrKD89XFxzKlxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86YW5kfG5vdHxvbmx5fG9yKSg/IVtcXHctXSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTMvI3VybHNcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXFxcXGJ1cmxcXFxcKCg/OicgKyBzdHJpbmcuc291cmNlICsgJ3wnICsgLyg/OlteXFxcXFxcclxcbigpXCInXXxcXFxcW1xcc1xcU10pKi8uc291cmNlICsgJylcXFxcKScsICdpJyksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL151cmwvaSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCh8XFwpJC8sXG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHN0cmluZy5zb3VyY2UgKyAnJCcpLFxuXHRcdFx0XHRcdGFsaWFzOiAndXJsJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhefFt7fVxcXFxzXSlbXnt9XFxcXHNdKD86W157fTtcIlxcJ1xcXFxzXXxcXFxccysoPyFbXFxcXHN7XSl8JyArIHN0cmluZy5zb3VyY2UgKyAnKSooPz1cXFxccypcXFxceyknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiBzdHJpbmcsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi1cXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpWy1fYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKjopL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnaW1wb3J0YW50JzogLyFpbXBvcnRhbnRcXGIvaSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14tYS16MC05XSlbLWEtejAtOV0rKD89XFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9OzosXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzWydhdHJ1bGUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5jc3M7XG5cblx0dmFyIG1hcmt1cCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cdGlmIChtYXJrdXApIHtcblx0XHRtYXJrdXAudGFnLmFkZElubGluZWQoJ3N0eWxlJywgJ2NzcycpO1xuXHRcdG1hcmt1cC50YWcuYWRkQXR0cmlidXRlKCdzdHlsZScsICdjc3MnKTtcblx0fVxuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5jbGlrZSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8dHJhaXQpXFxzK3xcXGJjYXRjaFxccytcXCgpW1xcdy5cXFxcXSsvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1suXFxcXF0vXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXRjaHxjb250aW51ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bmV3fG51bGx8cmV0dXJufHRocm93fHRyeXx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmNsaWtlWydjbGFzcy1uYW1lJ10sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJFxcd1xceEEwLVxcdUZGRkZdKSg/IVxccylbXyRBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXC4oPzpjb25zdHJ1Y3Rvcnxwcm90b3R5cGUpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFx9KVxccyopY2F0Y2hcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteLl18XFwuXFwuXFwuXFxzKilcXGIoPzphc3xhc3NlcnQoPz1cXHMqXFx7KXxhc3luYyg/PVxccyooPzpmdW5jdGlvblxcYnxcXCh8WyRcXHdcXHhBMC1cXHVGRkZGXXwkKSl8YXdhaXR8YnJlYWt8Y2FzZXxjbGFzc3xjb25zdHxjb250aW51ZXxkZWJ1Z2dlcnxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8ZmluYWxseSg/PVxccyooPzpcXHt8JCkpfGZvcnxmcm9tKD89XFxzKig/OlsnXCJdfCQpKXxmdW5jdGlvbnwoPzpnZXR8c2V0KSg/PVxccyooPzpbI1xcWyRcXHdcXHhBMC1cXHVGRkZGXXwkKSl8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzdGF0aWN8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdF0sXG5cdC8vIEFsbG93IGZvciBhbGwgbm9uLUFTQ0lJIGNoYXJhY3RlcnMgKFNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8yMDA4NDQ0KVxuXHQnZnVuY3Rpb24nOiAvIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKig/OlxcLlxccyooPzphcHBseXxiaW5kfGNhbGwpXFxzKik/XFwoKS8sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0LyhefFteXFx3JF0pLy5zb3VyY2UgK1xuXHRcdFx0Jyg/OicgK1xuXHRcdFx0KFxuXHRcdFx0XHQvLyBjb25zdGFudFxuXHRcdFx0XHQvTmFOfEluZmluaXR5Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBiaW5hcnkgaW50ZWdlclxuXHRcdFx0XHQvMFtiQl1bMDFdKyg/Ol9bMDFdKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIG9jdGFsIGludGVnZXJcblx0XHRcdFx0LzBbb09dWzAtN10rKD86X1swLTddKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGhleGFkZWNpbWFsIGludGVnZXJcblx0XHRcdFx0LzBbeFhdW1xcZEEtRmEtZl0rKD86X1tcXGRBLUZhLWZdKykqbj8vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGRlY2ltYWwgYmlnaW50XG5cdFx0XHRcdC9cXGQrKD86X1xcZCspKm4vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIGRlY2ltYWwgbnVtYmVyIChpbnRlZ2VyIG9yIGZsb2F0KSBidXQgbm8gYmlnaW50XG5cdFx0XHRcdC8oPzpcXGQrKD86X1xcZCspKig/OlxcLig/OlxcZCsoPzpfXFxkKykqKT8pP3xcXC5cXGQrKD86X1xcZCspKikoPzpbRWVdWystXT9cXGQrKD86X1xcZCspKik/Ly5zb3VyY2Vcblx0XHRcdCkgK1xuXHRcdFx0JyknICtcblx0XHRcdC8oPyFbXFx3JF0pLy5zb3VyY2Vcblx0XHQpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3xcXCpcXCo9P3w9PnwmJj0/fFxcfFxcfD0/fFshPV09PXw8PD0/fD4+Pj89P3xbLSsqLyUmfF4hPTw+XT0/fFxcLnszfXxcXD9cXD89P3xcXD9cXC4/fFt+Ol0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2NsYXNzLW5hbWUnXVswXS5wYXR0ZXJuID0gLyhcXGIoPzpjbGFzc3xleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxpbnRlcmZhY2V8bmV3KVxccyspW1xcdy5cXFxcXSsvO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHQvLyBsb29rYmVoaW5kXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWR1cGUtY2hhcmFjdGVycy1jaGFyYWN0ZXItY2xhc3Ncblx0XHRcdC8oKD86XnxbXiRcXHdcXHhBMC1cXHVGRkZGLlwiJ1xcXSlcXHNdfFxcYig/OnJldHVybnx5aWVsZCkpXFxzKikvLnNvdXJjZSArXG5cdFx0XHQvLyBSZWdleCBwYXR0ZXJuOlxuXHRcdFx0Ly8gVGhlcmUgYXJlIDIgcmVnZXggcGF0dGVybnMgaGVyZS4gVGhlIFJlZ0V4cCBzZXQgbm90YXRpb24gcHJvcG9zYWwgYWRkZWQgc3VwcG9ydCBmb3IgbmVzdGVkIGNoYXJhY3RlclxuXHRcdFx0Ly8gY2xhc3NlcyBpZiB0aGUgYHZgIGZsYWcgaXMgcHJlc2VudC4gVW5mb3J0dW5hdGVseSwgbmVzdGVkIENDcyBhcmUgYm90aCBjb250ZXh0LWZyZWUgYW5kIGluY29tcGF0aWJsZVxuXHRcdFx0Ly8gd2l0aCB0aGUgb25seSBzeW50YXgsIHNvIHdlIGhhdmUgdG8gZGVmaW5lIDIgZGlmZmVyZW50IHJlZ2V4IHBhdHRlcm5zLlxuXHRcdFx0L1xcLy8uc291cmNlICtcblx0XHRcdCcoPzonICtcblx0XHRcdC8oPzpcXFsoPzpbXlxcXVxcXFxcXHJcXG5dfFxcXFwuKSpcXF18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tkZ2lteXVzXXswLDd9Ly5zb3VyY2UgK1xuXHRcdFx0J3wnICtcblx0XHRcdC8vIGB2YCBmbGFnIHN5bnRheC4gVGhpcyBzdXBwb3J0cyAzIGxldmVscyBvZiBuZXN0ZWQgY2hhcmFjdGVyIGNsYXNzZXMuXG5cdFx0XHQvKD86XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC58XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC58XFxbKD86W15bXFxdXFxcXFxcclxcbl18XFxcXC4pKlxcXSkqXFxdKSpcXF18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tkZ2lteXVzXXswLDd9dltkZ2lteXVzXXswLDd9Ly5zb3VyY2UgK1xuXHRcdFx0JyknICtcblx0XHRcdC8vIGxvb2thaGVhZFxuXHRcdFx0Lyg/PSg/Olxcc3xcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLykqKD86JHxbXFxyXFxuLC47On0pXFxdXXxcXC9cXC8pKS8uc291cmNlXG5cdFx0KSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleC1zb3VyY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFxcLylbXFxzXFxTXSsoPz1cXC9bYS16XSokKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcmVnZXgnLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5yZWdleFxuXHRcdFx0fSxcblx0XHRcdCdyZWdleC1kZWxpbWl0ZXInOiAvXlxcL3xcXC8kLyxcblx0XHRcdCdyZWdleC1mbGFncyc6IC9eW2Etel0rJC8sXG5cdFx0fVxuXHR9LFxuXHQvLyBUaGlzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGtleXdvcmQgYmVjYXVzZSB3ZSB1c2UgXCJmdW5jdGlvblwiIGluc2lkZSB0aGUgbG9vay1mb3J3YXJkXG5cdCdmdW5jdGlvbi12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKls9Ol1cXHMqKD86YXN5bmNcXHMqKT8oPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKVxccyo9PikpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQncGFyYW1ldGVyJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oZnVuY3Rpb24oPzpcXHMrKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKik/XFxzKlxcKFxccyopKD8hXFxzKSg/OlteKClcXHNdfFxccysoPyFbXFxzKV0pfFxcKFteKCldKlxcKSkrKD89XFxzKlxcKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpW18kYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKj0+KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwoXFxzKikoPyFcXHMpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoW14oKV0qXFwpKSsoPz1cXHMqXFwpXFxzKj0+KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLygoPzpcXGJ8XFxzfF4pKD8hKD86YXN8YXN5bmN8YXdhaXR8YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb25zdHxjb250aW51ZXxkZWJ1Z2dlcnxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8ZmluYWxseXxmb3J8ZnJvbXxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnRlcmZhY2V8bGV0fG5ld3xudWxsfG9mfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpKD8hWyRcXHdcXHhBMC1cXHVGRkZGXSkpKD86KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKlxccyopXFwoXFxzKnxcXF1cXHMqXFwoXFxzKikoPyFcXHMpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoW14oKV0qXFwpKSsoPz1cXHMqXFwpXFxzKlxceykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdF0sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aXSg/OltBLVpfXXxcXGR4PykqXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnc3RyaW5nJywge1xuXHQnaGFzaGJhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jIS4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXHQndGVtcGxhdGUtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXFtcXHNcXFNdfFxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfXwoPyFcXCRcXHspW15cXFxcYF0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0ZW1wbGF0ZS1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmctcHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFsse10pWyBcXHRdKikoW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMig/PVxccyo6KS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ29wZXJhdG9yJywge1xuXHQnbGl0ZXJhbC1wcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58Wyx7XSlbIFxcdF0qKSg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqOikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG59KTtcblxuaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcblx0UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcuYWRkSW5saW5lZCgnc2NyaXB0JywgJ2phdmFzY3JpcHQnKTtcblxuXHQvLyBhZGQgYXR0cmlidXRlIHN1cHBvcnQgZm9yIGFsbCBET00gZXZlbnRzLlxuXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9FdmVudHMjU3RhbmRhcmRfZXZlbnRzXG5cdFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLmFkZEF0dHJpYnV0ZShcblx0XHQvb24oPzphYm9ydHxibHVyfGNoYW5nZXxjbGlja3xjb21wb3NpdGlvbig/OmVuZHxzdGFydHx1cGRhdGUpfGRibGNsaWNrfGVycm9yfGZvY3VzKD86aW58b3V0KT98a2V5KD86ZG93bnx1cCl8bG9hZHxtb3VzZSg/OmRvd258ZW50ZXJ8bGVhdmV8bW92ZXxvdXR8b3Zlcnx1cCl8cmVzZXR8cmVzaXplfHNjcm9sbHxzZWxlY3R8c2xvdGNoYW5nZXxzdWJtaXR8dW5sb2FkfHdoZWVsKS8uc291cmNlLFxuXHRcdCdqYXZhc2NyaXB0J1xuXHQpO1xufVxuXG5QcmlzbS5sYW5ndWFnZXMuanMgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLmFiYXAgPSB7XG5cdCdjb21tZW50JzogL15cXCouKi9tLFxuXHQnc3RyaW5nJzogLyhgfCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdCdzdHJpbmctdGVtcGxhdGUnOiB7XG5cdFx0cGF0dGVybjogLyhbfH1dKSg/OlxcXFwufFteXFxcXHx7XFxyXFxuXSkqKD89W3x7XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdC8qIEVuZCBPZiBMaW5lIGNvbW1lbnRzIHNob3VsZCBub3QgaW50ZXJmZXJlIHdpdGggc3RyaW5ncyB3aGVuIHRoZVxuXHRxdW90ZSBjaGFyYWN0ZXIgb2NjdXJzIHdpdGhpbiB0aGVtLiBXZSBhc3N1bWUgYSBzdHJpbmcgYmVpbmcgaGlnaGxpZ2h0ZWRcblx0aW5zaWRlIGFuIEVPTCBjb21tZW50IGlzIG1vcmUgYWNjZXB0YWJsZSB0aGFuIHRoZSBvcHBvc2l0ZS5cblx0Ki9cblx0J2VvbC1jb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXCIuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcc3xcXC58XikoPzpcXCotSU5QVVR8XFw/VE98QUJBUC1TT1VSQ0V8QUJCUkVWSUFURUR8QUJTfEFCU1RSQUNUfEFDQ0VQVHxBQ0NFUFRJTkd8QUNDRVNTUE9MSUNZfEFDQ09SRElOR3xBQ09TfEFDVElWQVRJT058QUNUVUFMfEFERHxBREQtQ09SUkVTUE9ORElOR3xBREpBQ0VOVHxBRlRFUnxBTElBU3xBTElBU0VTfEFMSUdOfEFMTHxBTExPQ0FURXxBTFBIQXxBTkFMWVNJU3xBTkFMWVpFUnxBTkR8QU5ZfEFQUEVORHxBUFBFTkRBR0V8QVBQRU5ESU5HfEFQUExJQ0FUSU9OfEFSQ0hJVkV8QVJFQXxBUklUSE1FVElDfEFTfEFTQ0VORElOR3xBU0lOfEFTUEVDVHxBU1NFUlR8QVNTSUdOfEFTU0lHTkVEfEFTU0lHTklOR3xBU1NPQ0lBVElPTnxBU1lOQ0hST05PVVN8QVR8QVRBTnxBVFRSSUJVVEVTfEFVVEhPUklUWXxBVVRIT1JJVFktQ0hFQ0t8QVZHfEJBQ0t8QkFDS0dST1VORHxCQUNLVVB8QkFDS1dBUkR8QkFESXxCQVNFfEJFRk9SRXxCRUdJTnxCRVRXRUVOfEJJR3xCSU5BUll8QklORElOR3xCSVR8QklULUFORHxCSVQtTk9UfEJJVC1PUnxCSVQtWE9SfEJMQUNLfEJMQU5LfEJMQU5LU3xCTE9CfEJMT0NLfEJMT0NLU3xCTFVFfEJPVU5EfEJPVU5EQVJJRVN8Qk9VTkRTfEJPWEVEfEJSRUFLLVBPSU5UfEJUfEJVRkZFUnxCWXxCWVBBU1NJTkd8QllURXxCWVRFLUNBfEJZVEUtQ058QllURS1DT3xCWVRFLUNTfEJZVEUtTkF8QllURS1OU3xCWVRFLU9SREVSfEN8Q0F8Q0FMTHxDQUxMSU5HfENBU0V8Q0FTVHxDQVNUSU5HfENBVENIfENFSUx8Q0VOVEVSfENFTlRFUkVEfENIQUlOfENIQUlOLUlOUFVUfENIQUlOLVJFUVVFU1R8Q0hBTkdFfENIQU5HSU5HfENIQU5ORUxTfENIQVItVE8tSEVYfENIQVJBQ1RFUnxDSEFSTEVOfENIRUNLfENIRUNLQk9YfENJUkNVTEFSfENJX3xDTEFTU3xDTEFTUy1DT0RJTkd8Q0xBU1MtREFUQXxDTEFTUy1FVkVOVFN8Q0xBU1MtTUVUSE9EU3xDTEFTUy1QT09MfENMRUFOVVB8Q0xFQVJ8Q0xJRU5UfENMT0J8Q0xPQ0t8Q0xPU0V8Q058Q05UfENPfENPQUxFU0NFfENPREV8Q09ESU5HfENPTExFQ1R8Q09MT1J8Q09MVU1OfENPTFVNTlN8Q09MX0JBQ0tHUk9VTkR8Q09MX0dST1VQfENPTF9IRUFESU5HfENPTF9LRVl8Q09MX05FR0FUSVZFfENPTF9OT1JNQUx8Q09MX1BPU0lUSVZFfENPTF9UT1RBTHxDT01NRU5UfENPTU1FTlRTfENPTU1JVHxDT01NT058Q09NTVVOSUNBVElPTnxDT01QQVJJTkd8Q09NUE9ORU5UfENPTVBPTkVOVFN8Q09NUFJFU1NJT058Q09NUFVURXxDT05DQVR8Q09OQ0FURU5BVEV8Q09ORHxDT05ERU5TRXxDT05ESVRJT058Q09OTkVDVHxDT05ORUNUSU9OfENPTlNUQU5UU3xDT05URVhUfENPTlRFWFRTfENPTlRJTlVFfENPTlRST0x8Q09OVFJPTFN8Q09OVnxDT05WRVJTSU9OfENPTlZFUlR8Q09QSUVTfENPUFl8Q09SUkVTUE9ORElOR3xDT1N8Q09TSHxDT1VOVHxDT1VOVFJZfENPVkVSfENQfENQSXxDUkVBVEV8Q1JFQVRJTkd8Q1JJVElDQUx8Q1N8Q1VSUkVOQ1l8Q1VSUkVOQ1lfQ09OVkVSU0lPTnxDVVJSRU5UfENVUlNPUnxDVVJTT1ItU0VMRUNUSU9OfENVU1RPTUVSfENVU1RPTUVSLUZVTkNUSU9OfERBTkdFUk9VU3xEQVRBfERBVEFCQVNFfERBVEFJTkZPfERBVEFTRVR8REFURXxEQVlMSUdIVHxEQk1BWExFTnxERFxcL01NXFwvWVl8RERcXC9NTVxcL1lZWVl8RERNTVlZfERFQUxMT0NBVEV8REVDSU1BTFN8REVDSU1BTF9TSElGVHxERUNMQVJBVElPTlN8REVFUHxERUZBVUxUfERFRkVSUkVEfERFRklORXxERUZJTklOR3xERUZJTklUSU9OfERFTEVURXxERUxFVElOR3xERU1BTkR8REVQQVJUTUVOVHxERVNDRU5ESU5HfERFU0NSSUJFfERFU1RJTkFUSU9OfERFVEFJTHxESUFMT0d8RElSRUNUT1JZfERJU0NPTk5FQ1R8RElTUExBWXxESVNQTEFZLU1PREV8RElTVEFOQ0V8RElTVElOQ1R8RElWfERJVklERXxESVZJREUtQ09SUkVTUE9ORElOR3xESVZJU0lPTnxET3xEVU1NWXxEVVBMSUNBVEV8RFVQTElDQVRFU3xEVVJBVElPTnxEVVJJTkd8RFlOQU1JQ3xEWU5QUk98RXxFQUNIfEVESVR8RURJVE9SLUNBTEx8RUxTRXxFTFNFSUZ8RU1QVFl8RU5BQkxFRHxFTkFCTElOR3xFTkNPRElOR3xFTkR8RU5ELUVOSEFOQ0VNRU5ULVNFQ1RJT058RU5ELUxJTkVTfEVORC1PRi1ERUZJTklUSU9OfEVORC1PRi1GSUxFfEVORC1PRi1QQUdFfEVORC1PRi1TRUxFQ1RJT058RU5EQVR8RU5EQ0FTRXxFTkRDQVRDSHxFTkRDSEFJTnxFTkRDTEFTU3xFTkRET3xFTkRFTkhBTkNFTUVOVHxFTkRFWEVDfEVOREZPUnxFTkRGT1JNfEVOREZVTkNUSU9OfEVORElBTnxFTkRJRnxFTkRJTkd8RU5ESU5URVJGQUNFfEVORExPT1B8RU5ETUVUSE9EfEVORE1PRFVMRXxFTkRPTnxFTkRQUk9WSURFfEVORFNFTEVDVHxFTkRUUll8RU5EV0hJTEV8RU5HSU5FRVJJTkd8RU5IQU5DRU1FTlR8RU5IQU5DRU1FTlQtUE9JTlR8RU5IQU5DRU1FTlQtU0VDVElPTnxFTkhBTkNFTUVOVFN8RU5UUklFU3xFTlRSWXxFTlZJUk9OTUVOVHxFUXxFUVVBTHxFUVVJVnxFUlJPUk1FU1NBR0V8RVJST1JTfEVTQ0FQRXxFU0NBUElOR3xFVkVOVHxFVkVOVFN8RVhBQ1R8RVhDRVBUfEVYQ0VQVElPTnxFWENFUFRJT04tVEFCTEV8RVhDRVBUSU9OU3xFWENMVURFfEVYQ0xVRElOR3xFWEVDfEVYRUNVVEV8RVhJU1RTfEVYSVR8RVhJVC1DT01NQU5EfEVYUHxFWFBBTkR8RVhQQU5ESU5HfEVYUElSQVRJT058RVhQTElDSVR8RVhQT05FTlR8RVhQT1JUfEVYUE9SVElOR3xFWFRFTkR8RVhURU5ERUR8RVhURU5TSU9OfEVYVFJBQ1R8RkFJTHxGRVRDSHxGSUVMRHxGSUVMRC1HUk9VUFN8RklFTEQtU1lNQk9MfEZJRUxELVNZTUJPTFN8RklFTERTfEZJTEV8RklMVEVSfEZJTFRFUi1UQUJMRXxGSUxURVJTfEZJTkFMfEZJTkR8RklSU1R8RklSU1QtTElORXxGSVhFRC1QT0lOVHxGS0VRfEZLR0V8RkxPT1J8RkxVU0h8Rk9OVHxGT1J8Rk9STXxGT1JNQVR8Rk9SV0FSRHxGT1VORHxGUkFDfEZSQU1FfEZSQU1FU3xGUkVFfEZSSUVORFN8RlJPTXxGVU5DVElPTnxGVU5DVElPTi1QT09MfEZVTkNUSU9OQUxJVFl8RlVSVEhFUnxHQVBTfEdFfEdFTkVSQVRFfEdFVHxHSVZJTkd8R0tFUXxHS0dFfEdMT0JBTHxHUkFOVHxHUkVBVEVSfEdSRUVOfEdST1VQfEdST1VQU3xHVHxIQU5ETEV8SEFORExFUnxIQVJNTEVTU3xIQVNIRUR8SEFWSU5HfEhEQnxIRUFELUxJTkVTfEhFQURFUnxIRUFERVJTfEhFQURJTkd8SEVMUC1JRHxIRUxQLVJFUVVFU1R8SElERXxISUdIfEhJTlR8SE9MRHxIT1RTUE9UfEl8SUNPTnxJRHxJREVOVElGSUNBVElPTnxJREVOVElGSUVSfElEU3xJRnxJR05PUkV8SUdOT1JJTkd8SU1NRURJQVRFTFl8SU1QTEVNRU5UQVRJT058SU1QTEVNRU5UQVRJT05TfElNUExFTUVOVEVEfElNUExJQ0lUfElNUE9SVHxJTVBPUlRJTkd8SU58SU5BQ1RJVkV8SU5DTHxJTkNMVURFfElOQ0xVREVTfElOQ0xVRElOR3xJTkNSRU1FTlR8SU5ERVh8SU5ERVgtTElORXxJTkZPVFlQRVN8SU5IRVJJVElOR3xJTklUfElOSVRJQUx8SU5JVElBTElaQVRJT058SU5ORVJ8SU5PVVR8SU5QVVR8SU5TRVJUfElOU1RBTkNFU3xJTlRFTlNJRklFRHxJTlRFUkZBQ0V8SU5URVJGQUNFLVBPT0x8SU5URVJGQUNFU3xJTlRFUk5BTHxJTlRFUlZBTFN8SU5UT3xJTlZFUlNFfElOVkVSVEVELURBVEV8SVN8SVNPfElURVJBVE9SfElUTk98Sk9CfEpPSU58S0VFUHxLRUVQSU5HfEtFUk5FTHxLRVl8S0VZU3xLRVlXT1JEU3xLSU5EfExBTkdVQUdFfExBU1R8TEFURXxMQVlPVVR8TEV8TEVBRElOR3xMRUFWRXxMRUZUfExFRlQtSlVTVElGSUVEfExFRlRQTFVTfExFRlRTUEFDRXxMRUdBQ1l8TEVOR1RIfExFU1N8TEVUfExFVkVMfExFVkVMU3xMSUtFfExJTkV8TElORS1DT1VOVHxMSU5FLVNFTEVDVElPTnxMSU5FLVNJWkV8TElORUZFRUR8TElORVN8TElTVHxMSVNULVBST0NFU1NJTkd8TElTVEJPWHxMSVRUTEV8TExBTkd8TE9BRHxMT0FELU9GLVBST0dSQU18TE9CfExPQ0FMfExPQ0FMRXxMT0NBVE9SfExPR3xMT0ctUE9JTlR8TE9HMTB8TE9HRklMRXxMT0dJQ0FMfExPTkd8TE9PUHxMT1d8TE9XRVJ8TFBBRHxMUEl8TFR8TXxNQUlMfE1BSU58TUFKT1ItSUR8TUFQUElOR3xNQVJHSU58TUFSS3xNQVNLfE1BVENIfE1BVENIQ09ERXxNQVh8TUFYSU1VTXxNRURJVU18TUVNQkVSU3xNRU1PUll8TUVTSHxNRVNTQUdFfE1FU1NBR0UtSUR8TUVTU0FHRVN8TUVTU0FHSU5HfE1FVEhPRHxNRVRIT0RTfE1JTnxNSU5JTVVNfE1JTk9SLUlEfE1NXFwvRERcXC9ZWXxNTVxcL0REXFwvWVlZWXxNTUREWVl8TU9EfE1PREV8TU9ESUZ8TU9ESUZJRVJ8TU9ESUZZfE1PRFVMRXxNT1ZFfE1PVkUtQ09SUkVTUE9ORElOR3xNVUxUSVBMWXxNVUxUSVBMWS1DT1JSRVNQT05ESU5HfE5BfE5BTUV8TkFNRVRBQnxOQVRJVkV8TkJ8TkV8TkVTVEVEfE5FU1RJTkd8TkVXfE5FVy1MSU5FfE5FVy1QQUdFfE5FVy1TRUNUSU9OfE5FWFR8Tk98Tk8tRElTUExBWXxOTy1FWFRFTlNJT058Tk8tR0FQfE5PLUdBUFN8Tk8tR1JPVVBJTkd8Tk8tSEVBRElOR3xOTy1TQ1JPTExJTkd8Tk8tU0lHTnxOTy1USVRMRXxOTy1UT1BPRlBBR0V8Tk8tWkVST3xOT0RFfE5PREVTfE5PTi1VTklDT0RFfE5PTi1VTklRVUV8Tk9UfE5QfE5TfE5VTEx8TlVNQkVSfE5VTU9GQ0hBUnxPfE9CSkVDVHxPQkpFQ1RTfE9CTElHQVRPUll8T0NDVVJSRU5DRXxPQ0NVUlJFTkNFU3xPQ0NVUlN8T0Z8T0ZGfE9GRlNFVHxPTEV8T058T05MWXxPUEVOfE9QVElPTnxPUFRJT05BTHxPUFRJT05TfE9SfE9SREVSfE9USEVSfE9USEVSU3xPVVR8T1VURVJ8T1VUUFVUfE9VVFBVVC1MRU5HVEh8T1ZFUkZMT1d8T1ZFUkxBWXxQQUNLfFBBQ0tBR0V8UEFEfFBBRERJTkd8UEFHRXxQQUdFU3xQQVJBTUVURVJ8UEFSQU1FVEVSLVRBQkxFfFBBUkFNRVRFUlN8UEFSVHxQQVJUSUFMTFl8UEFUVEVSTnxQRVJDRU5UQUdFfFBFUkZPUk18UEVSRk9STUlOR3xQRVJTT058UEZ8UEYtU1RBVFVTfFBJTkt8UExBQ0VTfFBPT0x8UE9TSVRJT058UE9TX0hJR0h8UE9TX0xPV3xQUkFHTUFTfFBSRUNPTVBJTEVEfFBSRUZFUlJFRHxQUkVTRVJWSU5HfFBSSU1BUll8UFJJTlR8UFJJTlQtQ09OVFJPTHxQUklPUklUWXxQUklWQVRFfFBST0NFRFVSRXxQUk9DRVNTfFBST0dSQU18UFJPUEVSVFl8UFJPVEVDVEVEfFBST1ZJREV8UFVCTElDfFBVU0hCVVRUT058UFVUfFFVRVVFLU9OTFl8UVVJQ0tJTkZPfFJBRElPQlVUVE9OfFJBSVNFfFJBSVNJTkd8UkFOR0V8UkFOR0VTfFJBV3xSRUFEfFJFQUQtT05MWXxSRUFERVJ8UkVDRUlWRXxSRUNFSVZFRHxSRUNFSVZFUnxSRUNFSVZJTkd8UkVEfFJFREVGSU5JVElPTnxSRURVQ0V8UkVEVUNFRHxSRUZ8UkVGRVJFTkNFfFJFRlJFU0h8UkVHRVh8UkVKRUNUfFJFTU9URXxSRU5BTUlOR3xSRVBMQUNFfFJFUExBQ0VNRU5UfFJFUExBQ0lOR3xSRVBPUlR8UkVRVUVTVHxSRVFVRVNURUR8UkVTRVJWRXxSRVNFVHxSRVNPTFVUSU9OfFJFU1BFQ1RJTkd8UkVTUE9OU0lCTEV8UkVTVUxUfFJFU1VMVFN8UkVTVU1BQkxFfFJFU1VNRXxSRVRSWXxSRVRVUk58UkVUVVJOQ09ERXxSRVRVUk5JTkd8UklHSFR8UklHSFQtSlVTVElGSUVEfFJJR0hUUExVU3xSSUdIVFNQQUNFfFJJU0t8Uk1DX0NPTU1VTklDQVRJT05fRkFJTFVSRXxSTUNfSU5WQUxJRF9TVEFUVVN8Uk1DX1NZU1RFTV9GQUlMVVJFfFJPTEV8Uk9MTEJBQ0t8Uk9VTkR8Uk9XU3xSVFRJfFJVTnxTQVB8U0FQLVNQT09MfFNBVklOR3xTQ0FMRV9QUkVTRVJWSU5HfFNDQUxFX1BSRVNFUlZJTkdfU0NJRU5USUZJQ3xTQ0FOfFNDSUVOVElGSUN8U0NJRU5USUZJQ19XSVRIX0xFQURJTkdfWkVST3xTQ1JFRU58U0NST0xMfFNDUk9MTC1CT1VOREFSWXxTQ1JPTExJTkd8U0VBUkNIfFNFQ09OREFSWXxTRUNPTkRTfFNFQ1RJT058U0VMRUNUfFNFTEVDVC1PUFRJT05TfFNFTEVDVElPTnxTRUxFQ1RJT04tU0NSRUVOfFNFTEVDVElPTi1TRVR8U0VMRUNUSU9OLVNFVFN8U0VMRUNUSU9OLVRBQkxFfFNFTEVDVElPTlN8U0VMRUNUT1J8U0VORHxTRVBBUkFURXxTRVBBUkFURUR8U0VUfFNIQVJFRHxTSElGVHxTSE9SVHxTSE9SVERVTVAtSUR8U0lHTnxTSUdOX0FTX1BPU1RGSVh8U0lNUExFfFNJTnxTSU5HTEV8U0lOSHxTSVpFfFNLSVB8U0tJUFBJTkd8U01BUlR8U09NRXxTT1JUfFNPUlRBQkxFfFNPUlRFRHxTT1VSQ0V8U1BBQ0V8U1BFQ0lGSUVEfFNQTElUfFNQT09MfFNQT1RTfFNRTHxTUUxTQ1JJUFR8U1FSVHxTVEFCTEV8U1RBTVB8U1RBTkRBUkR8U1RBUlQtT0YtU0VMRUNUSU9OfFNUQVJUSU5HfFNUQVRFfFNUQVRFTUVOVHxTVEFURU1FTlRTfFNUQVRJQ3xTVEFUSUNTfFNUQVRVU0lORk98U1RFUC1MT09QfFNUT1B8U1RSTEVOfFNUUlVDVFVSRXxTVFJVQ1RVUkVTfFNUWUxFfFNVQktFWXxTVUJNQVRDSEVTfFNVQk1JVHxTVUJST1VUSU5FfFNVQlNDUkVFTnxTVUJTVFJJTkd8U1VCVFJBQ1R8U1VCVFJBQ1QtQ09SUkVTUE9ORElOR3xTVUZGSVh8U1VNfFNVTU1BUll8U1VNTUlOR3xTVVBQTElFRHxTVVBQTFl8U1VQUFJFU1N8U1dJVENIfFNXSVRDSFNUQVRFU3xTWU1CT0x8U1lOQ1BPSU5UU3xTWU5UQVh8U1lOVEFYLUNIRUNLfFNZTlRBWC1UUkFDRXxTWVNURU0tQ0FMTHxTWVNURU0tRVhDRVBUSU9OU3xTWVNURU0tRVhJVHxUQUJ8VEFCQkVEfFRBQkxFfFRBQkxFU3xUQUJMRVZJRVd8VEFCU1RSSVB8VEFOfFRBTkh8VEFSR0VUfFRBU0t8VEFTS1N8VEVTVHxURVNUSU5HfFRFWFR8VEVYVFBPT0x8VEhFTnxUSFJPV3xUSU1FfFRJTUVTfFRJTUVTVEFNUHxUSU1FWk9ORXxUSVRMRXxUSVRMRS1MSU5FU3xUSVRMRUJBUnxUT3xUT0tFTklaQVRJT058VE9LRU5TfFRPUC1MSU5FU3xUT1AtT0YtUEFHRXxUUkFDRS1GSUxFfFRSQUNFLVRBQkxFfFRSQUlMSU5HfFRSQU5TQUNUSU9OfFRSQU5TRkVSfFRSQU5TRk9STUFUSU9OfFRSQU5TTEFURXxUUkFOU1BPUlRJTkd8VFJNQUN8VFJVTkN8VFJVTkNBVEV8VFJVTkNBVElPTnxUUll8VFlQRXxUWVBFLVBPT0x8VFlQRS1QT09MU3xUWVBFU3xVTElORXxVTkFTU0lHTnxVTkRFUnxVTklDT0RFfFVOSU9OfFVOSVFVRXxVTklUfFVOSVRfQ09OVkVSU0lPTnxVTklYfFVOUEFDS3xVTlRJTHxVTldJTkR8VVB8VVBEQVRFfFVQUEVSfFVTRVJ8VVNFUi1DT01NQU5EfFVTSU5HfFVURi04fFZBTElEfFZBTFVFfFZBTFVFLVJFUVVFU1R8VkFMVUVTfFZBUll8VkFSWUlOR3xWRVJJRklDQVRJT04tTUVTU0FHRXxWRVJTSU9OfFZJQXxWSUVXfFZJU0lCTEV8V0FJVHxXQVJOSU5HfFdIRU58V0hFTkVWRVJ8V0hFUkV8V0hJTEV8V0lEVEh8V0lORE9XfFdJTkRPV1N8V0lUSHxXSVRILUhFQURJTkd8V0lUSC1USVRMRXxXSVRIT1VUfFdPUkR8V09SS3xXUklURXxXUklURVJ8WHxYTUx8WE9SfFhTRHxYU1RSTEVOfFlFTExPV3xZRVN8WVlNTUREfFp8WkVST3xaT05FKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdC8qIE51bWJlcnMgY2FuIGJlIG9ubHkgaW50ZWdlcnMuIERlY2ltYWwgb3IgSGV4IGFwcGVhciBvbmx5IGFzIHN0cmluZ3MgKi9cblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0LyogT3BlcmF0b3JzIG11c3QgYWx3YXlzIGJlIHN1cnJvdW5kZWQgYnkgd2hpdGVzcGFjZSwgdGhleSBjYW5ub3QgYmUgcHV0XG5cdGFkamFjZW50IHRvIG9wZXJhbmRzLlxuXHQqL1xuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhcXHMpKD86XFwqXFwqP3w8Wz0+XT98Pj0/fFxcPz18Wy0rXFwvPV0pKD89XFxzKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKSYmPyg/PVxccykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0LyogVGhlIG9mZmljaWFsIGVkaXRvciBoaWdobGlnaHRzICovXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQndG9rZW4tb3BlcmF0b3InOiBbe1xuXHRcdC8qIFNwZWNpYWwgb3BlcmF0b3JzIHVzZWQgdG8gYWNjZXNzIHN0cnVjdHVyZSBjb21wb25lbnRzLCBjbGFzcyBtZXRob2RzL2F0dHJpYnV0ZXMsIGV0Yy4gKi9cblx0XHRwYXR0ZXJuOiAvKFxcdykoPzotPj98PT58W358e31dKSg/PVxcdykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSwge1xuXHRcdC8qIFNwZWNpYWwgdG9rZW5zIHVzZWQgZG8gZGVsaW1pdCBzdHJpbmcgdGVtcGxhdGVzICovXG5cdFx0cGF0dGVybjogL1t8e31dLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9XSxcblx0J3B1bmN0dWF0aW9uJzogL1ssLjooKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvcmVSdWxlcyA9ICcoPzpBTFBIQXxCSVR8Q0hBUnxDUnxDUkxGfENUTHxESUdJVHxEUVVPVEV8SEVYRElHfEhUQUJ8TEZ8TFdTUHxPQ1RFVHxTUHxWQ0hBUnxXU1ApJztcblxuXHRQcmlzbS5sYW5ndWFnZXMuYWJuZiA9IHtcblx0XHQnY29tbWVudCc6IC87LiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86JVtpc10pP1wiW15cIlxcblxccl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eJVtpc10vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncmFuZ2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJSg/OmJbMDFdKy1bMDFdK3xkXFxkKy1cXGQrfHhbQS1GXFxkXSstW0EtRlxcZF0rKS9pLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQndGVybWluYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJSg/OmJbMDFdKyg/OlxcLlswMV0rKSp8ZFxcZCsoPzpcXC5cXGQrKSp8eFtBLUZcXGRdKyg/OlxcLltBLUZcXGRdKykqKS9pLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQncmVwZXRpdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OlxcZCpcXCpcXGQqfFxcZCspLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2RlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OlthLXpdW1xcdy1dKnw8W148Plxcclxcbl0qPikoPz1cXHMqPSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC88fD4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29yZS1ydWxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoPzooXnxbXjxcXFxcdy1dKScgKyBjb3JlUnVsZXMgKyAnfDwnICsgY29yZVJ1bGVzICsgJz4pKD8hW1xcXFx3LV0pJywgJ2knKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogWydydWxlJywgJ2NvbnN0YW50J10sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzx8Pi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdydWxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFtePFxcdy1dKVthLXpdW1xcdy1dKnw8W148Plxcclxcbl0qPi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvPHw+L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzogLz1cXC8/fFxcLy8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXV0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFjdGlvbnNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8ZGVmYXVsdHxkZWxldGV8ZG98ZHluYW1pY3xlYWNofGVsc2V8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZvcnxmdW5jdGlvbnxnZXR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5jbHVkZXxpbnN0YW5jZW9mfGludGVyZmFjZXxpbnRlcm5hbHxpc3xuYW1lc3BhY2V8bmF0aXZlfG5ld3xudWxsfG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dXNlfHZhcnx2b2lkfHdoaWxlfHdpdGgpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXwoPzpbK1xcLSpcXC8lXl18JiY/fFxcfFxcfD98PDw/fD4+Pz4/fFshPV09Pyk9P3xbfj9AXS9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmFjdGlvbnNjcmlwdFsnY2xhc3MtbmFtZSddLmFsaWFzID0gJ2Z1bmN0aW9uJztcblxuLy8gZG9lc24ndCB3b3JrIHdpdGggQVMgYmVjYXVzZSBBUyBpcyB0b28gY29tcGxleFxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHRbJ3BhcmFtZXRlciddO1xuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHRbJ2xpdGVyYWwtcHJvcGVydHknXTtcblxuaWYgKFByaXNtLmxhbmd1YWdlcy5tYXJrdXApIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYWN0aW9uc2NyaXB0JywgJ3N0cmluZycsIHtcblx0XHQneG1sJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLl0pPFxcLz9cXHcrKD86XFxzK1teXFxzPlxcLz1dKz0oXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwyKVteXFxcXF0pKlxcMikqXFxzKlxcLz8+Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9XG5cdH0pO1xufVxuO1xuUHJpc20ubGFuZ3VhZ2VzLmFkYSA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKi8sXG5cdCdzdHJpbmcnOiAvXCIoPzpcIlwifFteXCJcXHJcXGZcXG5dKSpcIi8sXG5cdCdudW1iZXInOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYlxcZCg/Ol8/XFxkKSojW1xcZEEtRl0oPzpfP1tcXGRBLUZdKSooPzpcXC5bXFxkQS1GXSg/Ol8/W1xcZEEtRl0pKik/Iyg/OkVbKy1dP1xcZCg/Ol8/XFxkKSopPy9pXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFxkKD86Xz9cXGQpKig/OlxcLlxcZCg/Ol8/XFxkKSopPyg/OkVbKy1dP1xcZCg/Ol8/XFxkKSopP1xcYi9pXG5cdFx0fVxuXHRdLFxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9cXGInXFx3Ky8sXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFib3J0fGFic3xhYnN0cmFjdHxhY2NlcHR8YWNjZXNzfGFsaWFzZWR8YWxsfGFuZHxhcnJheXxhdHxiZWdpbnxib2R5fGNhc2V8Y29uc3RhbnR8ZGVjbGFyZXxkZWxheXxkZWx0YXxkaWdpdHN8ZG98ZWxzZXxlbHNpZnxlbmR8ZW50cnl8ZXhjZXB0aW9ufGV4aXR8Zm9yfGZ1bmN0aW9ufGdlbmVyaWN8Z290b3xpZnxpbnxpbnRlcmZhY2V8aXN8bGltaXRlZHxsb29wfG1vZHxuZXd8bm90fG51bGx8b2Z8b3J8b3RoZXJzfG91dHxvdmVycmlkaW5nfHBhY2thZ2V8cHJhZ21hfHByaXZhdGV8cHJvY2VkdXJlfHByb3RlY3RlZHxyYWlzZXxyYW5nZXxyZWNvcmR8cmVtfHJlbmFtZXN8cmVxdWV1ZXxyZXR1cm58cmV2ZXJzZXxzZWxlY3R8c2VwYXJhdGV8c29tZXxzdWJ0eXBlfHN5bmNocm9uaXplZHx0YWdnZWR8dGFza3x0ZXJtaW5hdGV8dGhlbnx0eXBlfHVudGlsfHVzZXx3aGVufHdoaWxlfHdpdGh8eG9yKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3w9Pj98Oj18XFwvPT98XFwqXFwqP3xbJistXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9cXC5cXC4/fFssOygpOl0vLFxuXHQnY2hhcic6IC8nLicvLFxuXHQndmFyaWFibGUnOiAvXFxiW2Etel0oPzpcXHcpKlxcYi9pXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFnZGEgPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFx7LVtcXHNcXFNdKj8oPzotXFx9fCQpfC0tLiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVx1Mjk4M1x1Mjk4NC47QF0vLFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpkYXRhfHJlY29yZCkgKylcXFMrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/IVxccylbXjpcXHJcXG5dKyg/PTopL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyheXFxzKnxcXHMpKD86Wz18Olx1MjIwMFx1MjE5Mlx1MDNCQlxcXFw/X118LT4pKD89XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86U2V0fGFic3RyYWN0fGNvbnN0cnVjdG9yfGRhdGF8ZXRhLWVxdWFsaXR5fGZpZWxkfGZvcmFsbHxoaWRpbmd8aW1wb3J0fGlufGluZHVjdGl2ZXxpbmZpeHxpbmZpeGx8aW5maXhyfGluc3RhbmNlfGxldHxtYWNyb3xtb2R1bGV8bXV0dWFsfG5vLWV0YS1lcXVhbGl0eXxvcGVufG92ZXJsYXB8cGF0dGVybnxwb3N0dWxhdGV8cHJpbWl0aXZlfHByaXZhdGV8cHVibGljfHF1b3RlfHF1b3RlQ29udGV4dHxxdW90ZUdvYWx8cXVvdGVUZXJtfHJlY29yZHxyZW5hbWluZ3xyZXdyaXRlfHN5bnRheHx0YWN0aWN8dW5xdW90ZXx1bnF1b3RlRGVjbHx1bnF1b3RlRGVmfHVzaW5nfHZhcmlhYmxlfHdoZXJlfHdpdGgpXFxiLyxcblx0fTtcbn0oUHJpc20pKTtcblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9BTC9ibG9iL21hc3Rlci9ncmFtbWFyL2Fsc3ludGF4LnRtbGFuZ3VhZ2VcblxuUHJpc20ubGFuZ3VhZ2VzLmFsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OicnfFteJ1xcclxcbl0pKicoPyEnKXxcIig/OlwiXCJ8W15cIlxcclxcbl0pKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXZlbnR8cHJvY2VkdXJlfHRyaWdnZXIpXFxzK3woPzpefFteLl0pXFwuXFxzKilbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC8vIGtleXdvcmRzXG5cdFx0L1xcYig/OmFycmF5fGFzc2VydGVycm9yfGJlZ2lufGJyZWFrfGNhc2V8ZG98ZG93bnRvfGVsc2V8ZW5kfGV2ZW50fGV4aXR8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258aWZ8aW1wbGVtZW50c3xpbnxpbmRhdGFzZXR8aW50ZXJmYWNlfGludGVybmFsfGxvY2FsfG9mfHByb2NlZHVyZXxwcm9ncmFtfHByb3RlY3RlZHxyZXBlYXR8cnVub25jbGllbnR8c2VjdXJpdHlmaWx0ZXJpbmd8c3VwcHJlc3NkaXNwb3NlfHRlbXBvcmFyeXx0aGVufHRvfHRyaWdnZXJ8dW50aWx8dmFyfHdoaWxlfHdpdGh8d2l0aGV2ZW50cylcXGIvaSxcblx0XHQvLyBvYmplY3RzIGFuZCBtZXRhZGF0YSB0aGF0IGFyZSB1c2VkIGxpa2Uga2V5d29yZHNcblx0XHQvXFxiKD86YWN0aW9ufGFjdGlvbnN8YWRkYWZ0ZXJ8YWRkYmVmb3JlfGFkZGZpcnN0fGFkZGxhc3R8YXJlYXxhc3NlbWJseXxjaGFydHBhcnR8Y29kZXVuaXR8Y29sdW1ufGNvbnRyb2xhZGRpbnxjdWVncm91cHxjdXN0b21pemVzfGRhdGFpdGVtfGRhdGFzZXR8ZG90bmV0fGVsZW1lbnRzfGVudW18ZW51bWV4dGVuc2lvbnxleHRlbmRzfGZpZWxkfGZpZWxkYXR0cmlidXRlfGZpZWxkZWxlbWVudHxmaWVsZGdyb3VwfGZpZWxkZ3JvdXBzfGZpZWxkc3xmaWx0ZXJ8Zml4ZWR8Z3JpZHxncm91cHxrZXl8a2V5c3xsYWJlbHxsYWJlbHN8bGF5b3V0fG1vZGlmeXxtb3ZlYWZ0ZXJ8bW92ZWJlZm9yZXxtb3ZlZmlyc3R8bW92ZWxhc3R8cGFnZXxwYWdlY3VzdG9taXphdGlvbnxwYWdlZXh0ZW5zaW9ufHBhcnR8cHJvZmlsZXxxdWVyeXxyZXBlYXRlcnxyZXBvcnR8cmVxdWVzdHBhZ2V8c2NoZW1hfHNlcGFyYXRvcnxzeXN0ZW1wYXJ0fHRhYmxlfHRhYmxlZWxlbWVudHx0YWJsZWV4dGVuc2lvbnx0ZXh0YXR0cmlidXRlfHRleHRlbGVtZW50fHR5cGV8dXNlcmNvbnRyb2x8dmFsdWV8eG1scG9ydClcXGIvaVxuXHRdLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8pKD86RnxMTD98VSg/OkxMPyk/KT9cXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J3ZhcmlhYmxlJzogL1xcYig/OkN1cnIoPzpGaWVsZE5vfFBhZ2V8UmVwb3J0KXx4P1JlY3xSZXF1ZXN0T3B0aW9uc1BhZ2UpXFxiLyxcblx0J2NsYXNzLW5hbWUnOiAvXFxiKD86YXV0b21hdGlvbnxiaWdpbnRlZ2VyfGJpZ3RleHR8YmxvYnxib29sZWFufGJ5dGV8Y2hhcnxjbGllbnR0eXBlfGNvZGV8Y29tcGxldGlvbnRyaWdnZXJlcnJvcmxldmVsfGNvbm5lY3Rpb250eXBlfGRhdGFiYXNlfGRhdGFjbGFzc2lmaWNhdGlvbnxkYXRhc2NvcGV8ZGF0ZXxkYXRlZm9ybXVsYXxkYXRldGltZXxkZWNpbWFsfGRlZmF1bHRsYXlvdXR8ZGlhbG9nfGRpY3Rpb25hcnl8ZG90bmV0YXNzZW1ibHl8ZG90bmV0dHlwZWRlY2xhcmF0aW9ufGR1cmF0aW9ufGVycm9yaW5mb3xlcnJvcnR5cGV8ZXhlY3V0aW9uY29udGV4dHxleGVjdXRpb25tb2RlfGZpZWxkY2xhc3N8ZmllbGRyZWZ8ZmllbGR0eXBlfGZpbGV8ZmlsdGVycGFnZWJ1aWxkZXJ8Z3VpZHxodHRwY2xpZW50fGh0dHBjb250ZW50fGh0dHBoZWFkZXJzfGh0dHByZXF1ZXN0bWVzc2FnZXxodHRwcmVzcG9uc2VtZXNzYWdlfGluc3RyZWFtfGludGVnZXJ8am9rZXJ8anNvbmFycmF5fGpzb25vYmplY3R8anNvbnRva2VufGpzb252YWx1ZXxrZXlyZWZ8bGlzdHxtb2R1bGVkZXBlbmRlbmN5aW5mb3xtb2R1bGVpbmZvfG5vbmV8bm90aWZpY2F0aW9ufG5vdGlmaWNhdGlvbnNjb3BlfG9iamVjdHR5cGV8b3B0aW9ufG91dHN0cmVhbXxwYWdlcmVzdWx0fHJlY29yZHxyZWNvcmRpZHxyZWNvcmRyZWZ8cmVwb3J0Zm9ybWF0fHNlY3VyaXR5ZmlsdGVyfHNlc3Npb25zZXR0aW5nc3x0YWJsZWNvbm5lY3Rpb250eXBlfHRhYmxlZmlsdGVyfHRlc3RhY3Rpb258dGVzdGZpZWxkfHRlc3RmaWx0ZXJmaWVsZHx0ZXN0cGFnZXx0ZXN0cGVybWlzc2lvbnN8dGVzdHJlcXVlc3RwYWdlfHRleHR8dGV4dGJ1aWxkZXJ8dGV4dGNvbnN0fHRleHRlbmNvZGluZ3x0aW1lfHRyYW5zYWN0aW9ubW9kZWx8dHJhbnNhY3Rpb250eXBlfHZhcmlhbnR8dmVyYm9zaXR5fHZlcnNpb258dmlld3x2aWV3c3x3ZWJzZXJ2aWNlYWN0aW9uY29udGV4dHx3ZWJzZXJ2aWNlYWN0aW9ucmVzdWx0Y29kZXx4bWxhdHRyaWJ1dGV8eG1sYXR0cmlidXRlY29sbGVjdGlvbnx4bWxjZGF0YXx4bWxjb21tZW50fHhtbGRlY2xhcmF0aW9ufHhtbGRvY3VtZW50fHhtbGRvY3VtZW50dHlwZXx4bWxlbGVtZW50fHhtbG5hbWVzcGFjZW1hbmFnZXJ8eG1sbmFtZXRhYmxlfHhtbG5vZGV8eG1sbm9kZWxpc3R8eG1scHJvY2Vzc2luZ2luc3RydWN0aW9ufHhtbHJlYWRvcHRpb25zfHhtbHRleHR8eG1sd3JpdGVvcHRpb25zKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwufDpbPTpdfFstKyovXT0/fDw+fFs8Pl09P3w9fFxcYig/OmFuZHxkaXZ8bW9kfG5vdHxvcnx4b3IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fTouOyxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFudGxyNCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyYWN0ZXItY2xhc3MnOiB7XG5cdFx0cGF0dGVybjogL1xcWyg/OlxcXFwufFteXFxcXFxcXVxcclxcbl0pKlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncmVnZXgnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3JhbmdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFteW118KD86XnxbXlxcXFxdKSg/OlxcXFxcXFxcKSpcXFxcXFxbKS0oPyFcXF0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnZXNjYXBlJzogL1xcXFwoPzp1KD86W2EtZkEtRlxcZF17NH18XFx7W2EtZkEtRlxcZF0rXFx9KXxbcFBdXFx7Wz1cXHctXStcXH18W15cXHJcXG51cFBdKS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vXG5cdFx0fVxuXHR9LFxuXHQnYWN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkqXFx9KSpcXH0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHQvLyB0aGlzIG1pZ2h0IGJlIEMsIEMrKywgUHl0aG9uLCBKYXZhLCBDIywgb3IgYW55IG90aGVyIGxhbmd1YWdlIEFOVExSNCBjb21waWxlcyB0b1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxceylbXFxzXFxTXSsoPz1cXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dL1xuXHRcdH1cblx0fSxcblx0J2NvbW1hbmQnOiB7XG5cdFx0cGF0dGVybjogLygtPlxccyooPyFcXHMpKSg/OlxccyooPzosXFxzKik/XFxiW2Etel1cXHcqKD86XFxzKlxcKFteKClcXHJcXG5dKlxcKSk/KSsoPz1cXHMqOykvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXHMqKD86WywoXXwkKSkvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldL1xuXHRcdH1cblx0fSxcblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0BcXHcrKD86OjpcXHcrKSovLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC8jWyBcXHRdKlxcdysvLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmNhdGNofGNoYW5uZWxzfGZpbmFsbHl8ZnJhZ21lbnR8Z3JhbW1hcnxpbXBvcnR8bGV4ZXJ8bG9jYWxzfG1vZGV8b3B0aW9uc3xwYXJzZXJ8cmV0dXJuc3x0aHJvd3N8dG9rZW5zKVxcYi8sXG5cdCdkZWZpbml0aW9uJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPz1cXHMqOikvLFxuXHRcdFx0YWxpYXM6IFsncnVsZScsICdjbGFzcy1uYW1lJ11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdyooPz1cXHMqOikvLFxuXHRcdFx0YWxpYXM6IFsndG9rZW4nLCAnY29uc3RhbnQnXVxuXHRcdH0sXG5cdF0sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aXVtBLVpfXSpcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwufC0+fFt8fl18WyorP11cXD8/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1s7OigpPV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZzQgPSBQcmlzbS5sYW5ndWFnZXMuYW50bHI0O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXBhY2hlY29uZiA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2RpcmVjdGl2ZS1pbmxpbmUnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKilcXGIoPzpBY2NlcHRGaWx0ZXJ8QWNjZXB0UGF0aEluZm98QWNjZXNzRmlsZU5hbWV8QWN0aW9ufEFkZCg/OkFsdHxBbHRCeUVuY29kaW5nfEFsdEJ5VHlwZXxDaGFyc2V0fERlZmF1bHRDaGFyc2V0fERlc2NyaXB0aW9ufEVuY29kaW5nfEhhbmRsZXJ8SWNvbnxJY29uQnlFbmNvZGluZ3xJY29uQnlUeXBlfElucHV0RmlsdGVyfExhbmd1YWdlfE1vZHVsZUluZm98T3V0cHV0RmlsdGVyfE91dHB1dEZpbHRlckJ5VHlwZXxUeXBlKXxBbGlhc3xBbGlhc01hdGNofEFsbG93KD86Q09OTkVDVHxFbmNvZGVkU2xhc2hlc3xNZXRob2RzfE92ZXJyaWRlfE92ZXJyaWRlTGlzdCk/fEFub255bW91cyg/Ol9Mb2dFbWFpbHxfTXVzdEdpdmVFbWFpbHxfTm9Vc2VySUR8X1ZlcmlmeUVtYWlsKT98QXN5bmNSZXF1ZXN0V29ya2VyRmFjdG9yfEF1dGgoPzpCYXNpY0F1dGhvcml0YXRpdmV8QmFzaWNGYWtlfEJhc2ljUHJvdmlkZXJ8QmFzaWNVc2VEaWdlc3RBbGdvcml0aG18REJEVXNlclBXUXVlcnl8REJEVXNlclJlYWxtUXVlcnl8REJNR3JvdXBGaWxlfERCTVR5cGV8REJNVXNlckZpbGV8RGlnZXN0KD86QWxnb3JpdGhtfERvbWFpbnxOb25jZUxpZmV0aW1lfFByb3ZpZGVyfFFvcHxTaG1lbVNpemUpfEZvcm0oPzpBdXRob3JpdGF0aXZlfEJvZHl8RGlzYWJsZU5vU3RvcmV8RmFrZUJhc2ljQXV0aHxMb2NhdGlvbnxMb2dpblJlcXVpcmVkTG9jYXRpb258TG9naW5TdWNjZXNzTG9jYXRpb258TG9nb3V0TG9jYXRpb258TWV0aG9kfE1pbWV0eXBlfFBhc3N3b3JkfFByb3ZpZGVyfFNpdGVQYXNzcGhyYXNlfFNpemV8VXNlcm5hbWUpfEdyb3VwRmlsZXxMREFQKD86QXV0aG9yaXplUHJlZml4fEJpbmRBdXRob3JpdGF0aXZlfEJpbmRETnxCaW5kUGFzc3dvcmR8Q2hhcnNldENvbmZpZ3xDb21wYXJlQXNVc2VyfENvbXBhcmVETk9uU2VydmVyfERlcmVmZXJlbmNlQWxpYXNlc3xHcm91cEF0dHJpYnV0ZXxHcm91cEF0dHJpYnV0ZUlzRE58SW5pdGlhbEJpbmRBc1VzZXJ8SW5pdGlhbEJpbmRQYXR0ZXJufE1heFN1Ykdyb3VwRGVwdGh8UmVtb3RlVXNlckF0dHJpYnV0ZXxSZW1vdGVVc2VySXNETnxTZWFyY2hBc1VzZXJ8U3ViR3JvdXBBdHRyaWJ1dGV8U3ViR3JvdXBDbGFzc3xVcmwpfE1lcmdpbmd8TmFtZXxuQ2FjaGUoPzpDb250ZXh0fEVuYWJsZXxQcm92aWRlRm9yfFNPQ2FjaGV8VGltZW91dCl8bnpGY2dpQ2hlY2tBdXRoblByb3ZpZGVyfG56RmNnaURlZmluZVByb3ZpZGVyfFR5cGV8VXNlckZpbGV8ekRCRExvZ2luVG9SZWZlcmVyfHpEQkRRdWVyeXx6REJEUmVkaXJlY3RRdWVyeXx6REJNVHlwZXx6U2VuZEZvcmJpZGRlbk9uRmFpbHVyZSl8QmFsYW5jZXJHcm93dGh8QmFsYW5jZXJJbmhlcml0fEJhbGFuY2VyTWVtYmVyfEJhbGFuY2VyUGVyc2lzdHxCcm93c2VyTWF0Y2h8QnJvd3Nlck1hdGNoTm9DYXNlfEJ1ZmZlcmVkTG9nc3xCdWZmZXJTaXplfENhY2hlKD86RGVmYXVsdEV4cGlyZXxEZXRhaWxIZWFkZXJ8RGlyTGVuZ3RofERpckxldmVsc3xEaXNhYmxlfEVuYWJsZXxGaWxlfEhlYWRlcnxJZ25vcmVDYWNoZUNvbnRyb2x8SWdub3JlSGVhZGVyc3xJZ25vcmVOb0xhc3RNb2R8SWdub3JlUXVlcnlTdHJpbmd8SWdub3JlVVJMU2Vzc2lvbklkZW50aWZpZXJzfEtleUJhc2VVUkx8TGFzdE1vZGlmaWVkRmFjdG9yfExvY2t8TG9ja01heEFnZXxMb2NrUGF0aHxNYXhFeHBpcmV8TWF4RmlsZVNpemV8TWluRXhwaXJlfE1pbkZpbGVTaXplfE5lZ290aWF0ZWREb2NzfFF1aWNrSGFuZGxlcnxSZWFkU2l6ZXxSZWFkVGltZXxSb290fFNvY2FjaGUoPzpNYXhTaXplfE1heFRpbWV8TWluVGltZXxSZWFkU2l6ZXxSZWFkVGltZSk/fFN0YWxlT25FcnJvcnxTdG9yZUV4cGlyZWR8U3RvcmVOb1N0b3JlfFN0b3JlUHJpdmF0ZSl8Q0dJRFNjcmlwdFRpbWVvdXR8Q0dJTWFwRXh0ZW5zaW9ufENoYXJzZXREZWZhdWx0fENoYXJzZXRPcHRpb25zfENoYXJzZXRTb3VyY2VFbmN8Q2hlY2tDYXNlT25seXxDaGVja1NwZWxsaW5nfENocm9vdERpcnxDb250ZW50RGlnZXN0fENvb2tpZURvbWFpbnxDb29raWVFeHBpcmVzfENvb2tpZU5hbWV8Q29va2llU3R5bGV8Q29va2llVHJhY2tpbmd8Q29yZUR1bXBEaXJlY3Rvcnl8Q3VzdG9tTG9nfERhdnxEYXZEZXB0aEluZmluaXR5fERhdkdlbmVyaWNMb2NrREJ8RGF2TG9ja0RCfERhdk1pblRpbWVvdXR8REJERXhwdGltZXxEQkRJbml0U1FMfERCREtlZXB8REJETWF4fERCRE1pbnxEQkRQYXJhbXN8REJEUGVyc2lzdHxEQkRQcmVwYXJlU1FMfERCRHJpdmVyfERlZmF1bHRJY29ufERlZmF1bHRMYW5ndWFnZXxEZWZhdWx0UnVudGltZURpcnxEZWZhdWx0VHlwZXxEZWZpbmV8RGVmbGF0ZSg/OkJ1ZmZlclNpemV8Q29tcHJlc3Npb25MZXZlbHxGaWx0ZXJOb3RlfEluZmxhdGVMaW1pdFJlcXVlc3RCb2R5fEluZmxhdGVSYXRpbyg/OkJ1cnN0fExpbWl0KXxNZW1MZXZlbHxXaW5kb3dTaXplKXxEZW55fERpcmVjdG9yeUNoZWNrSGFuZGxlcnxEaXJlY3RvcnlJbmRleHxEaXJlY3RvcnlJbmRleFJlZGlyZWN0fERpcmVjdG9yeVNsYXNofERvY3VtZW50Um9vdHxEVHJhY2VQcml2aWxlZ2VzfER1bXBJT0lucHV0fER1bXBJT091dHB1dHxFbmFibGVFeGNlcHRpb25Ib29rfEVuYWJsZU1NQVB8RW5hYmxlU2VuZGZpbGV8RXJyb3J8RXJyb3JEb2N1bWVudHxFcnJvckxvZ3xFcnJvckxvZ0Zvcm1hdHxFeGFtcGxlfEV4cGlyZXNBY3RpdmV8RXhwaXJlc0J5VHlwZXxFeHBpcmVzRGVmYXVsdHxFeHRlbmRlZFN0YXR1c3xFeHRGaWx0ZXJEZWZpbmV8RXh0RmlsdGVyT3B0aW9uc3xGYWxsYmFja1Jlc291cmNlfEZpbGVFVGFnfEZpbHRlckNoYWlufEZpbHRlckRlY2xhcmV8RmlsdGVyUHJvdG9jb2x8RmlsdGVyUHJvdmlkZXJ8RmlsdGVyVHJhY2V8Rm9yY2VMYW5ndWFnZVByaW9yaXR5fEZvcmNlVHlwZXxGb3JlbnNpY0xvZ3xHcHJvZkRpcnxHcmFjZWZ1bFNodXRkb3duVGltZW91dHxHcm91cHxIZWFkZXJ8SGVhZGVyTmFtZXxIZWFydGJlYXQoPzpBZGRyZXNzfExpc3RlbnxNYXhTZXJ2ZXJzfFN0b3JhZ2UpfEhvc3RuYW1lTG9va3Vwc3xJZGVudGl0eUNoZWNrfElkZW50aXR5Q2hlY2tUaW1lb3V0fEltYXBCYXNlfEltYXBEZWZhdWx0fEltYXBNZW51fEluY2x1ZGV8SW5jbHVkZU9wdGlvbmFsfEluZGV4KD86SGVhZEluc2VydHxJZ25vcmV8SWdub3JlUmVzZXR8T3B0aW9uc3xPcmRlckRlZmF1bHR8U3R5bGVTaGVldCl8SW5wdXRTZWR8SVNBUEkoPzpBcHBlbmRMb2dUb0Vycm9yc3xBcHBlbmRMb2dUb1F1ZXJ5fENhY2hlRmlsZXxGYWtlQXN5bmN8TG9nTm90U3VwcG9ydGVkfFJlYWRBaGVhZEJ1ZmZlcil8S2VlcEFsaXZlfEtlZXBBbGl2ZVRpbWVvdXR8S2VwdEJvZHlTaXplfExhbmd1YWdlUHJpb3JpdHl8TERBUCg/OkNhY2hlRW50cmllc3xDYWNoZVRUTHxDb25uZWN0aW9uUG9vbFRUTHxDb25uZWN0aW9uVGltZW91dHxMaWJyYXJ5RGVidWd8T3BDYWNoZUVudHJpZXN8T3BDYWNoZVRUTHxSZWZlcnJhbEhvcExpbWl0fFJlZmVycmFsc3xSZXRyaWVzfFJldHJ5RGVsYXl8U2hhcmVkQ2FjaGVGaWxlfFNoYXJlZENhY2hlU2l6ZXxUaW1lb3V0fFRydXN0ZWRDbGllbnRDZXJ0fFRydXN0ZWRHbG9iYWxDZXJ0fFRydXN0ZWRNb2RlfFZlcmlmeVNlcnZlckNlcnQpfExpbWl0KD86SW50ZXJuYWxSZWN1cnNpb258UmVxdWVzdCg/OkJvZHl8RmllbGRzfEZpZWxkU2l6ZXxMaW5lKXxYTUxSZXF1ZXN0Qm9keSl8TGlzdGVufExpc3RlbkJhY2tMb2d8TG9hZEZpbGV8TG9hZE1vZHVsZXxMb2dGb3JtYXR8TG9nTGV2ZWx8TG9nTWVzc2FnZXxMdWFBdXRoelByb3ZpZGVyfEx1YUNvZGVDYWNoZXxMdWEoPzpIb29rKD86QWNjZXNzQ2hlY2tlcnxBdXRoQ2hlY2tlcnxDaGVja1VzZXJJRHxGaXh1cHN8SW5zZXJ0RmlsdGVyfExvZ3xNYXBUb1N0b3JhZ2V8VHJhbnNsYXRlTmFtZXxUeXBlQ2hlY2tlcil8SW5oZXJpdHxJbnB1dEZpbHRlcnxNYXBIYW5kbGVyfE91dHB1dEZpbHRlcnxQYWNrYWdlQ1BhdGh8UGFja2FnZVBhdGh8UXVpY2tIYW5kbGVyfFJvb3R8U2NvcGUpfE1heCg/OkNvbm5lY3Rpb25zUGVyQ2hpbGR8S2VlcEFsaXZlUmVxdWVzdHN8TWVtRnJlZXxSYW5nZU92ZXJsYXBzfFJhbmdlUmV2ZXJzYWxzfFJhbmdlc3xSZXF1ZXN0V29ya2Vyc3xTcGFyZVNlcnZlcnN8U3BhcmVUaHJlYWRzfFRocmVhZHMpfE1lcmdlVHJhaWxlcnN8TWV0YURpcnxNZXRhRmlsZXN8TWV0YVN1ZmZpeHxNaW1lTWFnaWNGaWxlfE1pblNwYXJlU2VydmVyc3xNaW5TcGFyZVRocmVhZHN8TU1hcEZpbGV8TW9kZW1TdGFuZGFyZHxNb2RNaW1lVXNlUGF0aEluZm98TXVsdGl2aWV3c01hdGNofE11dGV4fE5hbWVWaXJ0dWFsSG9zdHxOb1Byb3h5fE5XU1NMVHJ1c3RlZENlcnRzfE5XU1NMVXBncmFkZWFibGV8T3B0aW9uc3xPcmRlcnxPdXRwdXRTZWR8UGFzc0VudnxQaWRGaWxlfFByaXZpbGVnZXNNb2RlfFByb3RvY29sfFByb3RvY29sRWNob3xQcm94eSg/OkFkZEhlYWRlcnN8QmFkSGVhZGVyfEJsb2NrfERvbWFpbnxFcnJvck92ZXJyaWRlfEV4cHJlc3NEQk1GaWxlfEV4cHJlc3NEQk1UeXBlfEV4cHJlc3NFbmFibGV8RnRwRGlyQ2hhcnNldHxGdHBFc2NhcGVXaWxkY2FyZHN8RnRwTGlzdE9uV2lsZGNhcmR8SFRNTCg/OkJ1ZlNpemV8Q2hhcnNldE91dHxEb2NUeXBlfEVuYWJsZXxFdmVudHN8RXh0ZW5kZWR8Rml4dXBzfEludGVycHxMaW5rc3xNZXRhfFN0cmlwQ29tbWVudHN8VVJMTWFwKXxJT0J1ZmZlclNpemV8TWF4Rm9yd2FyZHN8UGFzcyg/OkluaGVyaXR8SW50ZXJwb2xhdGVFbnZ8TWF0Y2h8UmV2ZXJzZXxSZXZlcnNlQ29va2llRG9tYWlufFJldmVyc2VDb29raWVQYXRoKT98UHJlc2VydmVIb3N0fFJlY2VpdmVCdWZmZXJTaXplfFJlbW90ZXxSZW1vdGVNYXRjaHxSZXF1ZXN0c3xTQ0dJSW50ZXJuYWxSZWRpcmVjdHxTQ0dJU2VuZGZpbGV8U2V0fFNvdXJjZUFkZHJlc3N8U3RhdHVzfFRpbWVvdXR8VmlhKXxSZWFkbWVOYW1lfFJlY2VpdmVCdWZmZXJTaXplfFJlZGlyZWN0fFJlZGlyZWN0TWF0Y2h8UmVkaXJlY3RQZXJtYW5lbnR8UmVkaXJlY3RUZW1wfFJlZmxlY3RvckhlYWRlcnxSZW1vdGVJUCg/OkhlYWRlcnxJbnRlcm5hbFByb3h5fEludGVybmFsUHJveHlMaXN0fFByb3hpZXNIZWFkZXJ8VHJ1c3RlZFByb3h5fFRydXN0ZWRQcm94eUxpc3QpfFJlbW92ZUNoYXJzZXR8UmVtb3ZlRW5jb2Rpbmd8UmVtb3ZlSGFuZGxlcnxSZW1vdmVJbnB1dEZpbHRlcnxSZW1vdmVMYW5ndWFnZXxSZW1vdmVPdXRwdXRGaWx0ZXJ8UmVtb3ZlVHlwZXxSZXF1ZXN0SGVhZGVyfFJlcXVlc3RSZWFkVGltZW91dHxSZXF1aXJlfFJld3JpdGUoPzpCYXNlfENvbmR8RW5naW5lfE1hcHxPcHRpb25zfFJ1bGUpfFJMaW1pdENQVXxSTGltaXRNRU18UkxpbWl0TlBST0N8U2F0aXNmeXxTY29yZUJvYXJkRmlsZXxTY3JpcHQoPzpBbGlhc3xBbGlhc01hdGNofEludGVycHJldGVyU291cmNlfExvZ3xMb2dCdWZmZXJ8TG9nTGVuZ3RofFNvY2spP3xTZWN1cmVMaXN0ZW58U2VlUmVxdWVzdFRhaWx8U2VuZEJ1ZmZlclNpemV8U2VydmVyKD86QWRtaW58QWxpYXN8TGltaXR8TmFtZXxQYXRofFJvb3R8U2lnbmF0dXJlfFRva2Vucyl8U2Vzc2lvbig/OkNvb2tpZSg/Ok5hbWV8TmFtZTJ8UmVtb3ZlKXxDcnlwdG8oPzpDaXBoZXJ8RHJpdmVyfFBhc3NwaHJhc2V8UGFzc3BocmFzZUZpbGUpfERCRCg/OkNvb2tpZU5hbWV8Q29va2llTmFtZTJ8Q29va2llUmVtb3ZlfERlbGV0ZUxhYmVsfEluc2VydExhYmVsfFBlclVzZXJ8U2VsZWN0TGFiZWx8VXBkYXRlTGFiZWwpfEVudnxFeGNsdWRlfEhlYWRlcnxJbmNsdWRlfE1heEFnZSk/fFNldEVudnxTZXRFbnZJZnxTZXRFbnZJZkV4cHJ8U2V0RW52SWZOb0Nhc2V8U2V0SGFuZGxlcnxTZXRJbnB1dEZpbHRlcnxTZXRPdXRwdXRGaWx0ZXJ8U1NJRW5kVGFnfFNTSUVycm9yTXNnfFNTSUVUYWd8U1NJTGFzdE1vZGlmaWVkfFNTSUxlZ2FjeUV4cHJQYXJzZXJ8U1NJU3RhcnRUYWd8U1NJVGltZUZvcm1hdHxTU0lVbmRlZmluZWRFY2hvfFNTTCg/OkNBQ2VydGlmaWNhdGVGaWxlfENBQ2VydGlmaWNhdGVQYXRofENBRE5SZXF1ZXN0RmlsZXxDQUROUmVxdWVzdFBhdGh8Q0FSZXZvY2F0aW9uQ2hlY2t8Q0FSZXZvY2F0aW9uRmlsZXxDQVJldm9jYXRpb25QYXRofENlcnRpZmljYXRlQ2hhaW5GaWxlfENlcnRpZmljYXRlRmlsZXxDZXJ0aWZpY2F0ZUtleUZpbGV8Q2lwaGVyU3VpdGV8Q29tcHJlc3Npb258Q3J5cHRvRGV2aWNlfEVuZ2luZXxGSVBTfEhvbm9yQ2lwaGVyT3JkZXJ8SW5zZWN1cmVSZW5lZ290aWF0aW9ufE9DU1AoPzpEZWZhdWx0UmVzcG9uZGVyfEVuYWJsZXxPdmVycmlkZVJlc3BvbmRlcnxSZXNwb25kZXJUaW1lb3V0fFJlc3BvbnNlTWF4QWdlfFJlc3BvbnNlVGltZVNrZXd8VXNlUmVxdWVzdE5vbmNlKXxPcGVuU1NMQ29uZkNtZHxPcHRpb25zfFBhc3NQaHJhc2VEaWFsb2d8UHJvdG9jb2x8UHJveHkoPzpDQUNlcnRpZmljYXRlRmlsZXxDQUNlcnRpZmljYXRlUGF0aHxDQVJldm9jYXRpb24oPzpDaGVja3xGaWxlfFBhdGgpfENoZWNrUGVlcig/OkNOfEV4cGlyZXxOYW1lKXxDaXBoZXJTdWl0ZXxFbmdpbmV8TWFjaGluZUNlcnRpZmljYXRlKD86Q2hhaW5GaWxlfEZpbGV8UGF0aCl8UHJvdG9jb2x8VmVyaWZ5fFZlcmlmeURlcHRoKXxSYW5kb21TZWVkfFJlbmVnQnVmZmVyU2l6ZXxSZXF1aXJlfFJlcXVpcmVTU0x8U2Vzc2lvbig/OkNhY2hlfENhY2hlVGltZW91dHxUaWNrZXRLZXlGaWxlfFRpY2tldHMpfFNSUFVua25vd25Vc2VyU2VlZHxTUlBWZXJpZmllckZpbGV8U3RhcGxpbmcoPzpDYWNoZXxFcnJvckNhY2hlVGltZW91dHxGYWtlVHJ5TGF0ZXJ8Rm9yY2VVUkx8UmVzcG9uZGVyVGltZW91dHxSZXNwb25zZU1heEFnZXxSZXNwb25zZVRpbWVTa2V3fFJldHVyblJlc3BvbmRlckVycm9yc3xTdGFuZGFyZENhY2hlVGltZW91dCl8U3RyaWN0U05JVkhvc3RDaGVja3xVc2VyTmFtZXxVc2VTdGFwbGluZ3xWZXJpZnlDbGllbnR8VmVyaWZ5RGVwdGgpfFN0YXJ0U2VydmVyc3xTdGFydFRocmVhZHN8U3Vic3RpdHV0ZXxTdWV4ZWN8U3VleGVjVXNlckdyb3VwfFRocmVhZExpbWl0fFRocmVhZHNQZXJDaGlsZHxUaHJlYWRTdGFja1NpemV8VGltZU91dHxUcmFjZUVuYWJsZXxUcmFuc2ZlckxvZ3xUeXBlc0NvbmZpZ3xVbkRlZmluZXxVbmRlZk1hY3JvfFVuc2V0RW52fFVzZXxVc2VDYW5vbmljYWxOYW1lfFVzZUNhbm9uaWNhbFBoeXNpY2FsUG9ydHxVc2VyfFVzZXJEaXJ8Vkhvc3RDR0lNb2RlfFZIb3N0Q0dJUHJpdnN8Vkhvc3RHcm91cHxWSG9zdFByaXZzfFZIb3N0U2VjdXJlfFZIb3N0VXNlcnxWaXJ0dWFsKD86RG9jdW1lbnRSb290fFNjcmlwdEFsaWFzKSg/OklQKT98V2F0Y2hkb2dJbnRlcnZhbHxYQml0SGFja3x4bWwyRW5jQWxpYXN8eG1sMkVuY0RlZmF1bHR8eG1sMlN0YXJ0UGFyc2UpXFxiL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J2RpcmVjdGl2ZS1ibG9jayc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcLz9cXGIoPzpBdXRoW256XVByb3ZpZGVyQWxpYXN8RGlyZWN0b3J5fERpcmVjdG9yeU1hdGNofEVsc2V8RWxzZUlmfEZpbGVzfEZpbGVzTWF0Y2h8SWZ8SWZEZWZpbmV8SWZNb2R1bGV8SWZWZXJzaW9ufExpbWl0fExpbWl0RXhjZXB0fExvY2F0aW9ufExvY2F0aW9uTWF0Y2h8TWFjcm98UHJveHl8UmVxdWlyZSg/OkFsbHxBbnl8Tm9uZSl8VmlydHVhbEhvc3QpXFxiLio+L2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGlyZWN0aXZlLWJsb2NrJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXjxcXC8/XFx3Ky8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePFxcLz8vXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsaWFzOiAndGFnJ1xuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUtYmxvY2stcGFyYW1ldGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvLipbXj5dLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFwifCcpLipcXDEvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9bJCVdXFx7Pyg/Olxcd1xcLj9bLSs6XT8pK1xcfT8vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLz4vXG5cdFx0fSxcblx0XHRhbGlhczogJ3RhZydcblx0fSxcblx0J2RpcmVjdGl2ZS1mbGFncyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxbKD86W1xcdz1dLD8pK1xcXS8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykuKlxcMS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvWyQlXVxcez8oPzpcXHdcXC4/Wy0rOl0/KStcXH0/L1xuXHRcdH1cblx0fSxcblx0J3ZhcmlhYmxlJzogL1skJV1cXHs/KD86XFx3XFwuP1stKzpdPykrXFx9Py8sXG5cdCdyZWdleCc6IC9cXF4/LipcXCR8XFxeLipcXCQ/L1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNxbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzotLXxcXC9cXC98IykuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9AKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pK1xcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC9AW1xcdy4kXSsvXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteQFxcXFxdKShcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDIpW15cXFxcXXxcXDJcXDIpKlxcMi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteQFxcXFxdKWAoPzpcXFxcW1xcc1xcU118W15gXFxcXF18YGApKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15gfGAkL1xuXHRcdH1cblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OkFWR3xDT1VOVHxGSVJTVHxGT1JNQVR8TEFTVHxMQ0FTRXxMRU58TUFYfE1JRHxNSU58TU9EfE5PV3xST1VORHxTVU18VUNBU0UpKD89XFxzKlxcKCkvaSwgLy8gU2hvdWxkIHdlIGhpZ2hsaWdodCB1c2VyIGRlZmluZWQgZnVuY3Rpb25zIHRvbz9cblx0J2tleXdvcmQnOiAvXFxiKD86QUNUSU9OfEFERHxBRlRFUnxBTEdPUklUSE18QUxMfEFMVEVSfEFOQUxZWkV8QU5ZfEFQUExZfEFTfEFTQ3xBVVRIT1JJWkFUSU9OfEFVVE9fSU5DUkVNRU5UfEJBQ0tVUHxCREJ8QkVHSU58QkVSS0VMRVlEQnxCSUdJTlR8QklOQVJZfEJJVHxCTE9CfEJPT0x8Qk9PTEVBTnxCUkVBS3xCUk9XU0V8QlRSRUV8QlVMS3xCWXxDQUxMfENBU0NBREVEP3xDQVNFfENIQUlOfENIQVIoPzpBQ1RFUnxTRVQpP3xDSEVDSyg/OlBPSU5UKT98Q0xPU0V8Q0xVU1RFUkVEfENPQUxFU0NFfENPTExBVEV8Q09MVU1OUz98Q09NTUVOVHxDT01NSVQoPzpURUQpP3xDT01QVVRFfENPTk5FQ1R8Q09OU0lTVEVOVHxDT05TVFJBSU5UfENPTlRBSU5TKD86VEFCTEUpP3xDT05USU5VRXxDT05WRVJUfENSRUFURXxDUk9TU3xDVVJSRU5UKD86X0RBVEV8X1RJTUV8X1RJTUVTVEFNUHxfVVNFUik/fENVUlNPUnxDWUNMRXxEQVRBKD86QkFTRVM/KT98REFURSg/OlRJTUUpP3xEQVl8REJDQ3xERUFMTE9DQVRFfERFQ3xERUNJTUFMfERFQ0xBUkV8REVGQVVMVHxERUZJTkVSfERFTEFZRUR8REVMRVRFfERFTElNSVRFUlM/fERFTll8REVTQ3xERVNDUklCRXxERVRFUk1JTklTVElDfERJU0FCTEV8RElTQ0FSRHxESVNLfERJU1RJTkNUfERJU1RJTkNUUk9XfERJU1RSSUJVVEVEfERPfERPVUJMRXxEUk9QfERVTU1ZfERVTVAoPzpGSUxFKT98RFVQTElDQVRFfEVMU0UoPzpJRik/fEVOQUJMRXxFTkNMT1NFRHxFTkR8RU5HSU5FfEVOVU18RVJSTFZMfEVSUk9SU3xFU0NBUEVEP3xFWENFUFR8RVhFQyg/OlVURSk/fEVYSVNUU3xFWElUfEVYUExBSU58RVhURU5ERUR8RkVUQ0h8RklFTERTfEZJTEV8RklMTEZBQ1RPUnxGSVJTVHxGSVhFRHxGTE9BVHxGT0xMT1dJTkd8Rk9SKD86IEVBQ0ggUk9XKT98Rk9SQ0V8Rk9SRUlHTnxGUkVFVEVYVCg/OlRBQkxFKT98RlJPTXxGVUxMfEZVTkNUSU9OfEdFT01FVFJZKD86Q09MTEVDVElPTik/fEdMT0JBTHxHT1RPfEdSQU5UfEdST1VQfEhBTkRMRVJ8SEFTSHxIQVZJTkd8SE9MRExPQ0t8SE9VUnxJREVOVElUWSg/OkNPTHxfSU5TRVJUKT98SUZ8SUdOT1JFfElNUE9SVHxJTkRFWHxJTkZJTEV8SU5ORVJ8SU5OT0RCfElOT1VUfElOU0VSVHxJTlR8SU5URUdFUnxJTlRFUlNFQ1R8SU5URVJWQUx8SU5UT3xJTlZPS0VSfElTT0xBVElPTnxJVEVSQVRFfEpPSU58S0VZUz98S0lMTHxMQU5HVUFHRXxMQVNUfExFQVZFfExFRlR8TEVWRUx8TElNSVR8TElORU5PfExJTkVTfExJTkVTVFJJTkd8TE9BRHxMT0NBTHxMT0NLfExPTkcoPzpCTE9CfFRFWFQpfExPT1B8TUFUQ0goPzpFRCk/fE1FRElVTSg/OkJMT0J8SU5UfFRFWFQpfE1FUkdFfE1JRERMRUlOVHxNSU5VVEV8TU9ERXxNT0RJRklFU3xNT0RJRll8TU9OVEh8TVVMVEkoPzpMSU5FU1RSSU5HfFBPSU5UfFBPTFlHT04pfE5BVElPTkFMfE5BVFVSQUx8TkNIQVJ8TkVYVHxOT3xOT05DTFVTVEVSRUR8TlVMTElGfE5VTUVSSUN8T0ZGP3xPRkZTRVRTP3xPTnxPUEVOKD86REFUQVNPVVJDRXxRVUVSWXxST1dTRVQpP3xPUFRJTUlaRXxPUFRJT04oPzpBTExZKT98T1JERVJ8T1VUKD86RVJ8RklMRSk/fE9WRVJ8UEFSVElBTHxQQVJUSVRJT058UEVSQ0VOVHxQSVZPVHxQTEFOfFBPSU5UfFBPTFlHT058UFJFQ0VESU5HfFBSRUNJU0lPTnxQUkVQQVJFfFBSRVZ8UFJJTUFSWXxQUklOVHxQUklWSUxFR0VTfFBST0MoPzpFRFVSRSk/fFBVQkxJQ3xQVVJHRXxRVUlDS3xSQUlTRVJST1J8UkVBRFM/fFJFQUx8UkVDT05GSUdVUkV8UkVGRVJFTkNFU3xSRUxFQVNFfFJFTkFNRXxSRVBFQVQoPzpBQkxFKT98UkVQTEFDRXxSRVBMSUNBVElPTnxSRVFVSVJFfFJFU0lHTkFMfFJFU1RPUkV8UkVTVFJJQ1R8UkVUVVJOKD86SU5HfFMpP3xSRVZPS0V8UklHSFR8Uk9MTEJBQ0t8Uk9VVElORXxST1coPzpDT1VOVHxHVUlEQ09MfFMpP3xSVFJFRXxSVUxFfFNBVkUoPzpQT0lOVCk/fFNDSEVNQXxTRUNPTkR8U0VMRUNUfFNFUklBTCg/OklaQUJMRSk/fFNFU1NJT04oPzpfVVNFUik/fFNFVCg/OlVTRVIpP3xTSEFSRXxTSE9XfFNIVVRET1dOfFNJTVBMRXxTTUFMTElOVHxTTkFQU0hPVHxTT01FfFNPTkFNRXxTUUx8U1RBUlQoPzpJTkcpP3xTVEFUSVNUSUNTfFNUQVRVU3xTVFJJUEVEfFNZU1RFTV9VU0VSfFRBQkxFUz98VEFCTEVTUEFDRXxURU1QKD86T1JBUll8VEFCTEUpP3xURVJNSU5BVEVEfFRFWFQoPzpTSVpFKT98VEhFTnxUSU1FKD86U1RBTVApP3xUSU5ZKD86QkxPQnxJTlR8VEVYVCl8VE9QP3xUUkFOKD86U0FDVElPTlM/KT98VFJJR0dFUnxUUlVOQ0FURXxUU0VRVUFMfFRZUEVTP3xVTkJPVU5ERUR8VU5DT01NSVRURUR8VU5ERUZJTkVEfFVOSU9OfFVOSVFVRXxVTkxPQ0t8VU5QSVZPVHxVTlNJR05FRHxVUERBVEUoPzpURVhUKT98VVNBR0V8VVNFfFVTRVJ8VVNJTkd8VkFMVUVTP3xWQVIoPzpCSU5BUll8Q0hBUnxDSEFSQUNURVJ8WUlORyl8VklFV3xXQUlURk9SfFdBUk5JTkdTfFdIRU58V0hFUkV8V0hJTEV8V0lUSCg/OiBST0xMVVB8SU4pP3xXT1JLfFdSSVRFKD86VEVYVCk/fFlFQVIpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE5VTEx8VFJVRSlcXGIvaSxcblx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnxcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCtcXGIvaSxcblx0J29wZXJhdG9yJzogL1stKypcXC89JV5+XXwmJj98XFx8XFx8P3whPT98PCg/Oj0+P3w8fD4pP3w+Wz49XT98XFxiKD86QU5EfEJFVFdFRU58RElWfElMSUtFfElOfElTfExJS0V8Tk9UfE9SfFJFR0VYUHxSTElLRXxTT1VORFMgTElLRXxYT1IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bO1tcXF0oKWAsLl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmRzID0gL1xcYig/Oig/OmFmdGVyfGJlZm9yZSkoPz1cXHMrW2Etel0pfGFic3RyYWN0fGFjdGl2YXRlfGFuZHxhbnl8YXJyYXl8YXN8YXNjfGF1dG9ub21vdXN8YmVnaW58YmlnZGVjaW1hbHxibG9ifGJvb2xlYW58YnJlYWt8YnVsa3xieXxieXRlfGNhc2V8Y2FzdHxjYXRjaHxjaGFyfGNsYXNzfGNvbGxlY3R8Y29tbWl0fGNvbnN0fGNvbnRpbnVlfGN1cnJlbmN5fGRhdGV8ZGF0ZXRpbWV8ZGVjaW1hbHxkZWZhdWx0fGRlbGV0ZXxkZXNjfGRvfGRvdWJsZXxlbHNlfGVuZHxlbnVtfGV4Y2VwdGlvbnxleGl0fGV4cG9ydHxleHRlbmRzfGZpbmFsfGZpbmFsbHl8ZmxvYXR8Zm9yfGZyb218Z2V0KD89XFxzKlt7fTtdKXxnbG9iYWx8Z290b3xncm91cHxoYXZpbmd8aGludHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbm5lcnxpbnNlcnR8aW5zdGFuY2VvZnxpbnR8aW50ZWdlcnxpbnRlcmZhY2V8aW50b3xqb2lufGxpa2V8bGltaXR8bGlzdHxsb25nfGxvb3B8bWFwfG1lcmdlfG5ld3xub3R8bnVsbHxudWxsc3xudW1iZXJ8b2JqZWN0fG9mfG9ufG9yfG91dGVyfG92ZXJyaWRlfHBhY2thZ2V8cGFyYWxsZWx8cHJhZ21hfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXRyaWV2ZXxyZXR1cm58cm9sbGJhY2t8c2VsZWN0fHNldHxzaG9ydHxzT2JqZWN0fHNvcnR8c3RhdGljfHN0cmluZ3xzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHN5c3RlbXx0ZXN0bWV0aG9kfHRoZW58dGhpc3x0aHJvd3x0aW1lfHRyYW5zYWN0aW9ufHRyYW5zaWVudHx0cmlnZ2VyfHRyeXx1bmRlbGV0ZXx1cGRhdGV8dXBzZXJ0fHVzaW5nfHZpcnR1YWx8dm9pZHx3ZWJzZXJ2aWNlfHdoZW58d2hlcmV8d2hpbGV8KD86aW5oZXJpdGVkfHdpdGh8d2l0aG91dClcXHMrc2hhcmluZylcXGIvaTtcblxuXHR2YXIgY2xhc3NOYW1lID0gL1xcYig/Oig/PVthLXpfXVxcdypcXHMqWzxcXFtdKXwoPyE8a2V5d29yZD4pKVtBLVpfXVxcdyooPzpcXHMqXFwuXFxzKltBLVpfXVxcdyopKlxcYig/OlxccyooPzpcXFtcXHMqXFxdfDwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj4pKSovLnNvdXJjZVxuXHRcdC5yZXBsYWNlKC88a2V5d29yZD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5d29yZHMuc291cmNlOyB9KTtcblx0LyoqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuICovXG5cdGZ1bmN0aW9uIGluc2VydENsYXNzTmFtZShwYXR0ZXJuKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChwYXR0ZXJuLnJlcGxhY2UoLzxDTEFTUy1OQU1FPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjbGFzc05hbWU7IH0pLCAnaScpO1xuXHR9XG5cblx0dmFyIGNsYXNzTmFtZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fTssOi48Pl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFwZXggPSB7XG5cdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuY2xpa2UuY29tbWVudCxcblx0XHQnc3RyaW5nJzogUHJpc20ubGFuZ3VhZ2VzLmNsaWtlLnN0cmluZyxcblx0XHQnc3FsJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpbPSwoezpdfFxcYnJldHVybilcXHMqKVxcW1teXFxbXFxdXSpcXF0vaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNxbCcsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5zcWxcblx0XHR9LFxuXG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFxcdytcXGIvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBpbnNlcnRDbGFzc05hbWUoLyhcXGIoPzpjbGFzc3xlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8dHJpZ2dlclxccytcXHcrXFxzK29uKVxccyspPENMQVNTLU5BTUU+Ly5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gY2FzdFxuXHRcdFx0XHRwYXR0ZXJuOiBpbnNlcnRDbGFzc05hbWUoLyhcXChcXHMqKTxDTEFTUy1OQU1FPig/PVxccypcXClcXHMqW1xcdyhdKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHZhcmlhYmxlL3BhcmFtZXRlciBkZWNsYXJhdGlvbiBhbmQgcmV0dXJuIHR5cGVzXG5cdFx0XHRcdHBhdHRlcm46IGluc2VydENsYXNzTmFtZSgvPENMQVNTLU5BTUU+KD89XFxzKlxcdytcXHMqWzs9LCgpezpdKS8uc291cmNlKSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCd0cmlnZ2VyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJ0cmlnZ2VyXFxzKylcXHcrXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXG5cdFx0J251bWJlcic6IC8oPzpcXEJcXC5cXGQrfFxcYlxcZCsoPzpcXC5cXGQrfEwpPylcXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvWyE9XSg/Oj09Pyk/fFxcP1xcLj98JiZ8XFx8XFx8fC0tfFxcK1xcK3xbLSsqL14mfF09P3w6fDw8Pz0/fD57MSwzfT0/Lyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde307LC5dL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5hcGwgPSB7XG5cdCdjb21tZW50JzogLyg/Olx1MjM1RHwjWyEgXSkuKiQvbSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcclxcbl18JycpKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogL1x1MDBBRj8oPzpcXGQqXFwuP1xcYlxcZCsoPzplWytcdTAwQUZdP1xcZCspP3xcdTAwQUZ8XHUyMjFFKSg/OmpcdTAwQUY/KD86KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OmVbK1x1MDBBRl0/XFxkKyk/fFx1MDBBRnxcdTIyMUUpKT8vaSxcblx0J3N0YXRlbWVudCc6IC86W0EtWl1bYS16XVtBLVphLXpdKlxcYi8sXG5cdCdzeXN0ZW0tZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1x1MjM5NVtBLVpdKy9pLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdjb25zdGFudCc6IC9bXHUyMzZDXHUyMzNFI1x1MjM5NVx1MjM1RV0vLFxuXHQnZnVuY3Rpb24nOiAvWy0rXHUwMEQ3XHUwMEY3XHUyMzA4XHUyMzBBXHUyMjIzfFx1MjM3M1x1MjM3OD8qXHUyMzVGXHUyNUNCIVx1MjMzOTxcdTIyNjQ9Plx1MjI2NVx1MjI2MFx1MjI2MVx1MjI2Mlx1MjIwQVx1MjM3N1x1MjIyQVx1MjIyOX5cdTIyMjhcdTIyMjdcdTIzNzFcdTIzNzJcdTIzNzQsXHUyMzZBXHUyMzNEXHUyMjk2XHUyMzQ5XHUyMTkxXHUyMTkzXHUyMjgyXHUyMjgzXHUyMjg2XHUyMjg3XHUyMzM3XHUyMzRCXHUyMzUyXHUyMkE0XHUyMkE1XHUyMzU1XHUyMzRFXHUyMkEzXHUyMkEyXHUyMzQxXHUyMzQyXHUyMjQ4XHUyMzZGXHUyMTk3XHUwMEE0XHUyMTkyXS8sXG5cdCdtb25hZGljLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC9bXFxcXFxcL1x1MjMzRlx1MjM0MFx1MDBBOFx1MjM2OFx1MjMzNiZcdTIyMjVdLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnZHlhZGljLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC9bLlx1MjM2M1x1MjM2MFx1MjM2NFx1MjIxOFx1MjMzOEBcdTIzM0FcdTIzNjVdLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnYXNzaWdubWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXHUyMTkwLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbO1xcXSgpXHUyNUM3XHUyMkM0XS8sXG5cdCdkZm4nOiB7XG5cdFx0cGF0dGVybjogL1t7fVx1MjM3QVx1MjM3NVx1MjM3Nlx1MjM3OVx1MjIwN1x1MjM2QjpdLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hcHBsZXNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0Ly8gQWxsb3cgb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHQvXFwoXFwqKD86XFwoXFwqKD86W14qXXxcXCooPyFcXCkpKSpcXCpcXCl8KD8hXFwoXFwqKVtcXHNcXFNdKSo/XFwqXFwpLyxcblx0XHQvLS0uKy8sXG5cdFx0LyMuKy9cblx0XSxcblx0J3N0cmluZyc6IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplLT9cXGQrKT9cXGIvaSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9bJj1cdTIyNjBcdTIyNjRcdTIyNjUqK1xcLVxcL1x1MDBGN15dfFs8Pl09Py8sXG5cdFx0L1xcYig/Oig/OmJlZ2lufGVuZHxzdGFydClzPyB3aXRofCg/OmNvbnRhaW5zP3woPzpkb2VzIG5vdHxkb2Vzbid0KSBjb250YWluKXwoPzppc3xpc24ndHxpcyBub3QpICg/OmNvbnRhaW5lZCBieXxpbil8KD86KD86aXN8aXNuJ3R8aXMgbm90KSApPyg/OmdyZWF0ZXJ8bGVzcykgdGhhbig/OiBvciBlcXVhbCk/KD86IHRvKT98KD86Y29tZXN8KD86ZG9lcyBub3R8ZG9lc24ndCkgY29tZSkgKD86YWZ0ZXJ8YmVmb3JlKXwoPzppc3xpc24ndHxpcyBub3QpIGVxdWFsKD86IHRvKT98KD86KD86ZG9lcyBub3R8ZG9lc24ndCkgZXF1YWx8ZXF1YWwgdG98ZXF1YWxzfGlzIG5vdHxpc24ndCl8KD86YSApPyg/OnJlZig/OiB0byk/fHJlZmVyZW5jZSB0byl8KD86YW5kfGFzfGRpdnxtb2R8bm90fG9yKSlcXGIvXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFib3V0fGFib3ZlfGFmdGVyfGFnYWluc3R8YXBhcnQgZnJvbXxhcm91bmR8YXNpZGUgZnJvbXxhdHxiYWNrfGJlZm9yZXxiZWdpbm5pbmd8YmVoaW5kfGJlbG93fGJlbmVhdGh8YmVzaWRlfGJldHdlZW58YnV0fGJ5fGNvbnNpZGVyaW5nfGNvbnRpbnVlfGNvcHl8ZG9lc3xlaWdodGh8ZWxzZXxlbmR8ZXF1YWx8ZXJyb3J8ZXZlcnl8ZXhpdHxmYWxzZXxmaWZ0aHxmaXJzdHxmb3J8Zm91cnRofGZyb218ZnJvbnR8Z2V0fGdpdmVufGdsb2JhbHxpZnxpZ25vcmluZ3xpbnxpbnN0ZWFkIG9mfGludG98aXN8aXR8aXRzfGxhc3R8bG9jYWx8bWV8bWlkZGxlfG15fG5pbnRofG9mfG9ufG9udG98b3V0IG9mfG92ZXJ8cHJvcHxwcm9wZXJ0eXxwdXR8cmVwZWF0fHJldHVybnxyZXR1cm5pbmd8c2Vjb25kfHNldHxzZXZlbnRofHNpbmNlfHNpeHRofHNvbWV8dGVsbHx0ZW50aHx0aGF0fHRoZXx0aGVufHRoaXJkfHRocm91Z2h8dGhydXx0aW1lb3V0fHRpbWVzfHRvfHRyYW5zYWN0aW9ufHRydWV8dHJ5fHVudGlsfHdoZXJlfHdoaWxlfHdob3NlfHdpdGh8d2l0aG91dClcXGIvLFxuXHQnY2xhc3MtbmFtZSc6IC9cXGIoPzpQT1NJWCBmaWxlfFJHQiBjb2xvcnxhbGlhc3xhcHBsaWNhdGlvbnxib29sZWFufGNlbnRpbWV0ZXJzfGNlbnRpbWV0cmVzfGNsYXNzfGNvbnN0YW50fGN1YmljIGNlbnRpbWV0ZXJzfGN1YmljIGNlbnRpbWV0cmVzfGN1YmljIGZlZXR8Y3ViaWMgaW5jaGVzfGN1YmljIG1ldGVyc3xjdWJpYyBtZXRyZXN8Y3ViaWMgeWFyZHN8ZGF0ZXxkZWdyZWVzIENlbHNpdXN8ZGVncmVlcyBGYWhyZW5oZWl0fGRlZ3JlZXMgS2VsdmlufGZlZXR8ZmlsZXxnYWxsb25zfGdyYW1zfGluY2hlc3xpbnRlZ2VyfGtpbG9ncmFtc3xraWxvbWV0ZXJzfGtpbG9tZXRyZXN8bGlzdHxsaXRlcnN8bGl0cmVzfG1ldGVyc3xtZXRyZXN8bWlsZXN8bnVtYmVyfG91bmNlc3xwb3VuZHN8cXVhcnRzfHJlYWx8cmVjb3JkfHJlZmVyZW5jZXxzY3JpcHR8c3F1YXJlIGZlZXR8c3F1YXJlIGtpbG9tZXRlcnN8c3F1YXJlIGtpbG9tZXRyZXN8c3F1YXJlIG1ldGVyc3xzcXVhcmUgbWV0cmVzfHNxdWFyZSBtaWxlc3xzcXVhcmUgeWFyZHN8dGV4dHx5YXJkcylcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KCk6LFx1MDBBQ1x1MDBBQlx1MDBCQlx1MzAwQVx1MzAwQl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXFsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oW3ssXVxccyopKD86KD8hXFxkKVxcdyt8KFtcIidcdTAwQjRgXSkoPzooPyFcXDIpW15cXFxcXFxyXFxuXXxcXFxcLikqXFwyKSg/PVxccyo6KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5dfFxcXFwuKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvKFtcdTAwQjRgXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxcLikqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogL0BAP1xcdysvLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYldJVEhcXHMrKUNPVU5UKD89XFxzK0lOVE9cXGIpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvXFxiKD86QUdHUkVHQVRFfEFMTHxBTkR8QU5ZfEFTQ3xDT0xMRUNUfERFU0N8RElTVElOQ1R8RklMVEVSfEZPUnxHUkFQSHxJTnxJTkJPVU5EfElOU0VSVHxJTlRPfEtfUEFUSFN8S19TSE9SVEVTVF9QQVRIU3xMRVR8TElLRXxMSU1JVHxOT05FfE5PVHxOVUxMfE9SfE9VVEJPVU5EfFJFTU9WRXxSRVBMQUNFfFJFVFVSTnxTSE9SVEVTVF9QQVRIfFNPUlR8VVBEQVRFfFVQU0VSVHxXSU5ET1d8V0lUSClcXGIvaSxcblx0XHQvLyBwc2V1ZG8ga2V5d29yZHMgZ2V0IGEgbG9va2JlaGluZCB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZXNcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuW10pKD86S0VFUHxQUlVORXxTRUFSQ0h8VE8pXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuW10pKD86Q1VSUkVOVHxORVd8T0xEKVxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiT1BUSU9OUyg/PVxccypcXHspL2lcblx0XHR9XG5cdF0sXG5cdCdmdW5jdGlvbic6IC9cXGIoPyFcXGQpXFx3Kyg/PVxccypcXCgpLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J3JhbmdlJzoge1xuXHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcYjBiWzAxXSsvaSxcblx0XHQvXFxiMHhbMC05YS1mXSsvaSxcblx0XHQvKD86XFxCXFwuXFxkK3xcXGIoPzowfFsxLTldXFxkKikoPzpcXC5cXGQrKT8pKD86ZVsrLV0/XFxkKyk/L2lcblx0XSxcblx0J29wZXJhdG9yJzogL1xcKnsyLH18Wz0hXX58WyE9PD5dPT98JiZ8XFx8XFx8fFstKyovJV0vLFxuXHQncHVuY3R1YXRpb24nOiAvOjp8Wz8uOiw7KClbXFxde31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLyg/OlteXFxyXFxuXFxcXF18XFxcXCg/Olxcclxcbj98XFxufCg/IVtcXHJcXG5dKSkpKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHQvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jL2xhbmd1YWdlL3N0cmluZ19saXRlcmFsXG5cdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxzdHJ1Y3QpXFxzKyg/Ol9fYXR0cmlidXRlX19cXHMqXFwoXFwoW1xcc1xcU10qP1xcKVxcKVxccyopPylcXHcrfFxcYlthLXpdXFx3Kl90XFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Ol9BbGlnbmFzfF9BbGlnbm9mfF9BdG9taWN8X0Jvb2x8X0NvbXBsZXh8X0dlbmVyaWN8X0ltYWdpbmFyeXxfTm9yZXR1cm58X1N0YXRpY19hc3NlcnR8X1RocmVhZF9sb2NhbHxfX2F0dHJpYnV0ZV9ffGFzbXxhdXRvfGJyZWFrfGNhc2V8Y2hhcnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZXJufGZsb2F0fGZvcnxnb3RvfGlmfGlubGluZXxpbnR8bG9uZ3xyZWdpc3RlcnxyZXR1cm58c2hvcnR8c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RydWN0fHN3aXRjaHx0eXBlZGVmfHR5cGVvZnx1bmlvbnx1bnNpZ25lZHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0J251bWJlcic6IC8oPzpcXGIweCg/OltcXGRhLWZdKyg/OlxcLltcXGRhLWZdKik/fFxcLltcXGRhLWZdKykoPzpwWystXT9cXGQrKT98KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylbZnVsXXswLDR9L2ksXG5cdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98LT58KFstKyZ8Ol0pXFwxfFs/On5dfFstKyovJSZ8XiE9PD5dPT8vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYycsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2MvbGFuZ3VhZ2UvY2hhcmFjdGVyX2NvbnN0YW50XG5cdFx0cGF0dGVybjogLycoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXidcXFxcXFxyXFxuXSl7MCwzMn0nLyxcblx0XHRncmVlZHk6IHRydWVcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2MnLCAnc3RyaW5nJywge1xuXHQnbWFjcm8nOiB7XG5cdFx0Ly8gYWxsb3cgZm9yIG11bHRpbGluZSBtYWNybyBkZWZpbml0aW9uc1xuXHRcdC8vIHNwYWNlcyBhZnRlciB0aGUgIyBjaGFyYWN0ZXIgY29tcGlsZSBmaW5lIHdpdGggZ2NjXG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikjXFxzKlthLXpdKD86W15cXHJcXG5cXFxcL118XFwvKD8hXFwqKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3xcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0cmluZyc6IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdC8vIGhpZ2hsaWdodCB0aGUgcGF0aCBvZiB0aGUgaW5jbHVkZSBzdGF0ZW1lbnQgYXMgYSBzdHJpbmdcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXigjXFxzKmluY2x1ZGVcXHMqKTxbXj5dKz4vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmNbJ3N0cmluZyddXG5cdFx0XHRdLFxuXHRcdFx0J2NoYXInOiBQcmlzbS5sYW5ndWFnZXMuY1snY2hhciddLFxuXHRcdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuY1snY29tbWVudCddLFxuXHRcdFx0J21hY3JvLW5hbWUnOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/IVxcKCkvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4jXFxzKmRlZmluZVxccyspXFx3K1xcYig/PVxcKCkvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHRcdH1cblx0XHRcdF0sXG5cdFx0XHQvLyBoaWdobGlnaHQgbWFjcm8gZGlyZWN0aXZlcyBhcyBrZXl3b3Jkc1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oI1xccyopW2Etel0rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUtaGFzaCc6IC9eIy8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvIyN8XFxcXCg/PVtcXHJcXG5dKS8sXG5cdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjJywgJ2Z1bmN0aW9uJywge1xuXHQvLyBoaWdobGlnaHQgcHJlZGVmaW5lZCBtYWNyb3MgYXMgY29uc3RhbnRzXG5cdCdjb25zdGFudCc6IC9cXGIoPzpFT0Z8TlVMTHxTRUVLX0NVUnxTRUVLX0VORHxTRUVLX1NFVHxfX0RBVEVfX3xfX0ZJTEVfX3xfX0xJTkVfX3xfX1RJTUVTVEFNUF9ffF9fVElNRV9ffF9fZnVuY19ffHN0ZGVycnxzdGRpbnxzdGRvdXQpXFxiL1xufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuY1snYm9vbGVhbiddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmQgPSAvXFxiKD86YWxpZ25hc3xhbGlnbm9mfGFzbXxhdXRvfGJvb2x8YnJlYWt8Y2FzZXxjYXRjaHxjaGFyfGNoYXIxNl90fGNoYXIzMl90fGNoYXI4X3R8Y2xhc3N8Y29fYXdhaXR8Y29fcmV0dXJufGNvX3lpZWxkfGNvbXBsfGNvbmNlcHR8Y29uc3R8Y29uc3RfY2FzdHxjb25zdGV2YWx8Y29uc3RleHByfGNvbnN0aW5pdHxjb250aW51ZXxkZWNsdHlwZXxkZWZhdWx0fGRlbGV0ZXxkb3xkb3VibGV8ZHluYW1pY19jYXN0fGVsc2V8ZW51bXxleHBsaWNpdHxleHBvcnR8ZXh0ZXJufGZpbmFsfGZsb2F0fGZvcnxmcmllbmR8Z290b3xpZnxpbXBvcnR8aW5saW5lfGludHxpbnQxNl90fGludDMyX3R8aW50NjRfdHxpbnQ4X3R8bG9uZ3xtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vZXhjZXB0fG51bGxwdHJ8b3BlcmF0b3J8b3ZlcnJpZGV8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlZ2lzdGVyfHJlaW50ZXJwcmV0X2Nhc3R8cmVxdWlyZXN8cmV0dXJufHNob3J0fHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0YXRpY19hc3NlcnR8c3RhdGljX2Nhc3R8c3RydWN0fHN3aXRjaHx0ZW1wbGF0ZXx0aGlzfHRocmVhZF9sb2NhbHx0aHJvd3x0cnl8dHlwZWRlZnx0eXBlaWR8dHlwZW5hbWV8dWludDE2X3R8dWludDMyX3R8dWludDY0X3R8dWludDhfdHx1bmlvbnx1bnNpZ25lZHx1c2luZ3x2aXJ0dWFsfHZvaWR8dm9sYXRpbGV8d2NoYXJfdHx3aGlsZSlcXGIvO1xuXHR2YXIgbW9kTmFtZSA9IC9cXGIoPyE8a2V5d29yZD4pXFx3Kyg/OlxccypcXC5cXHMqXFx3KykqXFxiLy5zb3VyY2UucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmQuc291cmNlOyB9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3BwID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiKD86Y2xhc3N8Y29uY2VwdHxlbnVtfHN0cnVjdHx0eXBlbmFtZSlcXHMrKSg/ITxrZXl3b3JkPilcXHcrLy5zb3VyY2Vcblx0XHRcdFx0XHQucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmQuc291cmNlOyB9KSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBUaGlzIGlzIGludGVuZGVkIHRvIGNhcHR1cmUgdGhlIGNsYXNzIG5hbWUgb2YgbWV0aG9kIGltcGxlbWVudGF0aW9ucyBsaWtlOlxuXHRcdFx0Ly8gICB2b2lkIGZvbzo6YmFyKCkgY29uc3Qge31cblx0XHRcdC8vIEhvd2V2ZXIhIFRoZSBgZm9vYCBpbiB0aGUgYWJvdmUgZXhhbXBsZSBjb3VsZCBhbHNvIGJlIGEgbmFtZXNwYWNlLCBzbyB3ZSBvbmx5IGNhcHR1cmUgdGhlIGNsYXNzIG5hbWUgaWZcblx0XHRcdC8vIGl0IHN0YXJ0cyB3aXRoIGFuIHVwcGVyY2FzZSBsZXR0ZXIuIFRoaXMgYXBwcm94aW1hdGlvbiBzaG91bGQgZ2l2ZSBkZWNlbnQgcmVzdWx0cy5cblx0XHRcdC9cXGJbQS1aXVxcdyooPz1cXHMqOjpcXHMqXFx3K1xccypcXCgpLyxcblx0XHRcdC8vIFRoaXMgd2lsbCBjYXB0dXJlIHRoZSBjbGFzcyBuYW1lIGJlZm9yZSBkZXN0cnVjdG9ycyBsaWtlOlxuXHRcdFx0Ly8gICBGb286On5Gb28oKSB7fVxuXHRcdFx0L1xcYltBLVpfXVxcdyooPz1cXHMqOjpcXHMqflxcdytcXHMqXFwoKS9pLFxuXHRcdFx0Ly8gVGhpcyBhbHNvIGludGVuZHMgdG8gY2FwdHVyZSB0aGUgY2xhc3MgbmFtZSBvZiBtZXRob2QgaW1wbGVtZW50YXRpb25zIGJ1dCBoZXJlIHRoZSBjbGFzcyBoYXMgdGVtcGxhdGVcblx0XHRcdC8vIHBhcmFtZXRlcnMsIHNvIGl0IGNhbid0IGJlIGEgbmFtZXNwYWNlICh1bnRpbCBDKysgYWRkcyBnZW5lcmljIG5hbWVzcGFjZXMpLlxuXHRcdFx0L1xcYlxcdysoPz1cXHMqPCg/OltePD5dfDwoPzpbXjw+XXw8W148Pl0qPikqPikqPlxccyo6OlxccypcXHcrXFxzKlxcKCkvXG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmQsXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpcXGIwYlswMSddK3xcXGIweCg/OltcXGRhLWYnXSsoPzpcXC5bXFxkYS1mJ10qKT98XFwuW1xcZGEtZiddKykoPzpwWystXT9bXFxkJ10rKT98KD86XFxiW1xcZCddKyg/OlxcLltcXGQnXSopP3xcXEJcXC5bXFxkJ10rKSg/OmVbKy1dP1tcXGQnXSspPylbZnVsXXswLDR9L2ksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98LT58LS18XFwrXFwrfCYmfFxcfFxcfHxbPzp+XXw8PT58Wy0rKi8lJnxeIT08Pl09P3xcXGIoPzphbmR8YW5kX2VxfGJpdGFuZHxiaXRvcnxub3R8bm90X2VxfG9yfG9yX2VxfHhvcnx4b3JfZXEpXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ3N0cmluZycsIHtcblx0XHQnbW9kdWxlJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL21vZHVsZXNcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhcXGIoPzppbXBvcnR8bW9kdWxlKVxccyspLy5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdC8vIGhlYWRlci1uYW1lXG5cdFx0XHRcdC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCJ8PFtePD5cXHJcXG5dKj4vLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC8vIG1vZHVsZSBuYW1lIG9yIHBhcnRpdGlvbiBvciBib3RoXG5cdFx0XHRcdC88bW9kLW5hbWU+KD86XFxzKjpcXHMqPG1vZC1uYW1lPik/fDpcXHMqPG1vZC1uYW1lPi8uc291cmNlLnJlcGxhY2UoLzxtb2QtbmFtZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbW9kTmFtZTsgfSkgK1xuXHRcdFx0XHQnKSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiAvXls8XCJdW1xcc1xcU10rLyxcblx0XHRcdFx0J29wZXJhdG9yJzogLzovLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3Jhdy1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvUlwiKFteKClcXFxcIF17MCwxNn0pXFwoW1xcc1xcU10qP1xcKVxcMVwiLyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2tleXdvcmQnLCB7XG5cdFx0J2dlbmVyaWMtZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD8hb3BlcmF0b3JcXGIpW2Etel9dXFx3Klxccyo8KD86W148Pl18PFtePD5dKj4pKj4oPz1cXHMqXFwoKS9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eXFx3Ky8sXG5cdFx0XHRcdCdnZW5lcmljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W1xcc1xcU10rLyxcblx0XHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNwcFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjcHAnLCAnb3BlcmF0b3InLCB7XG5cdFx0J2RvdWJsZS1jb2xvbic6IHtcblx0XHRcdHBhdHRlcm46IC86Oi8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0Ly8gdGhlIGJhc2UgY2xhdXNlIGlzIGFuIG9wdGlvbmFsIGxpc3Qgb2YgcGFyZW50IGNsYXNzZXNcblx0XHQvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jcHAvbGFuZ3VhZ2UvY2xhc3Ncblx0XHQnYmFzZS1jbGF1c2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfHN0cnVjdClcXHMrXFx3K1xccyo6XFxzKilbXjt7fVwiJ1xcc10rKD86XFxzK1teO3t9XCInXFxzXSspKig/PVxccypbO3tdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjcHAnLCB7fSlcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdkb3VibGUtY29sb24nLCB7XG5cdFx0Ly8gQWxsIHVudG9rZW5pemVkIHdvcmRzIHRoYXQgYXJlIG5vdCBuYW1lc3BhY2VzIHNob3VsZCBiZSBjbGFzcyBuYW1lc1xuXHRcdCdjbGFzcy1uYW1lJzogL1xcYlthLXpfXVxcdypcXGIoPyFcXHMqOjopL2lcblx0fSwgUHJpc20ubGFuZ3VhZ2VzLmNwcFsnYmFzZS1jbGF1c2UnXSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFyZHVpbm8gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjcHAnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OlN0cmluZ3xhcnJheXxib29sfGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNvbnRpbnVlfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZmluYWxseXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbnxpbnN0YW5jZW9mfGludHxpbnRlZ2VyfGxvbmd8bG9vcHxuZXd8bnVsbHxyZXR1cm58c2V0dXB8c3RyaW5nfHN3aXRjaHx0aHJvd3x0cnl8dm9pZHx3aGlsZXx3b3JkKVxcYi8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpBTkFMT0dfTUVTU0FHRXxERUZBVUxUfERJR0lUQUxfTUVTU0FHRXxFWFRFUk5BTHxGSVJNQVRBX1NUUklOR3xISUdIfElOUFVUfElOUFVUX1BVTExVUHxJTlRFUk5BTHxJTlRFUk5BTDFWMXxJTlRFUk5BTDJWNTZ8TEVEX0JVSUxUSU58TE9XfE9VVFBVVHxSRVBPUlRfQU5BTE9HfFJFUE9SVF9ESUdJVEFMfFNFVF9QSU5fTU9ERXxTWVNFWF9TVEFSVHxTWVNURU1fUkVTRVQpXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86QXVkaW98QlNTSUR8QnJpZGdlfENsaWVudHxDb25zb2xlfEVFUFJPTXxFc3Bsb3JhfEVzcGxvcmFURlR8RXRoZXJuZXR8RXRoZXJuZXRDbGllbnR8RXRoZXJuZXRTZXJ2ZXJ8RXRoZXJuZXRVRFB8RmlsZXxGaWxlSU98RmlsZVN5c3RlbXxGaXJtYXRhfEdQUlN8R1NNfEdTTUJhbmR8R1NNQ2xpZW50fEdTTU1vZGVtfEdTTVBJTnxHU01TY2FubmVyfEdTTVNlcnZlcnxHU01Wb2ljZUNhbGx8R1NNX1NNU3xIdHRwQ2xpZW50fElQQWRkcmVzc3xJUnJlYWR8S2V5Ym9hcmR8S2V5Ym9hcmRDb250cm9sbGVyfExpcXVpZENyeXN0YWx8TGlxdWlkQ3J5c3RhbF9JMkN8TWFpbGJveHxNb3VzZXxNb3VzZUNvbnRyb2xsZXJ8UEltYWdlfFByb2Nlc3N8UlNTSXxSb2JvdENvbnRyb2x8Um9ib3RNb3RvcnxTRHxTUEl8U1NJRHxTY2hlZHVsZXJ8U2VyaWFsfFNlcnZlcnxTZXJ2b3xTb2Z0d2FyZVNlcmlhbHxTdGVwcGVyfFN0cmVhbXxURlR8VGFza3xVU0JIb3N0fFdpRml8V2lGaUNsaWVudHxXaUZpU2VydmVyfFdpRmlVRFB8V2lyZXxZdW5DbGllbnR8WXVuU2VydmVyfGFic3xhZGRQYXJhbWV0ZXJ8YW5hbG9nUmVhZHxhbmFsb2dSZWFkUmVzb2x1dGlvbnxhbmFsb2dSZWZlcmVuY2V8YW5hbG9nV3JpdGV8YW5hbG9nV3JpdGVSZXNvbHV0aW9ufGFuc3dlckNhbGx8YXR0YWNofGF0dGFjaEdQUlN8YXR0YWNoSW50ZXJydXB0fGF0dGFjaGVkfGF1dG9zY3JvbGx8YXZhaWxhYmxlfGJhY2tncm91bmR8YmVlcHxiZWdpbnxiZWdpblBhY2tldHxiZWdpblNEfGJlZ2luU01TfGJlZ2luU3BlYWtlcnxiZWdpblRGVHxiZWdpblRyYW5zbWlzc2lvbnxiZWdpbldyaXRlfGJpdHxiaXRDbGVhcnxiaXRSZWFkfGJpdFNldHxiaXRXcml0ZXxibGlua3xibGlua1ZlcnNpb258YnVmZmVyfGNoYW5nZVBJTnxjaGVja1BJTnxjaGVja1BVS3xjaGVja1JlZ3xjaXJjbGV8Y2l0eU5hbWVSZWFkfGNpdHlOYW1lV3JpdGV8Y2xlYXJ8Y2xlYXJTY3JlZW58Y2xpY2t8Y2xvc2V8Y29tcGFzc1JlYWR8Y29uZmlnfGNvbm5lY3R8Y29ubmVjdGVkfGNvbnN0cmFpbnxjb3N8Y291bnRyeU5hbWVSZWFkfGNvdW50cnlOYW1lV3JpdGV8Y3JlYXRlQ2hhcnxjdXJzb3J8ZGVidWdQcmludHxkZWxheXxkZWxheU1pY3Jvc2Vjb25kc3xkZXRhY2h8ZGV0YWNoSW50ZXJydXB0fGRpZ2l0YWxSZWFkfGRpZ2l0YWxXcml0ZXxkaXNjb25uZWN0fGRpc3BsYXl8ZGlzcGxheUxvZ29zfGRyYXdCTVB8ZHJhd0NvbXBhc3N8ZW5jcnlwdGlvblR5cGV8ZW5kfGVuZFBhY2tldHxlbmRTTVN8ZW5kVHJhbnNtaXNzaW9ufGVuZFdyaXRlfGV4aXN0c3xleGl0VmFsdWV8ZmlsbHxmaW5kfGZpbmRVbnRpbHxmbHVzaHxnYXRld2F5SVB8Z2V0fGdldEFzeW5jaHJvbm91c2x5fGdldEJhbmR8Z2V0QnV0dG9ufGdldEN1cnJlbnRDYXJyaWVyfGdldElNRUl8Z2V0S2V5fGdldE1vZGlmaWVyc3xnZXRPZW1LZXl8Z2V0UElOVXNlZHxnZXRSZXN1bHR8Z2V0U2lnbmFsU3RyZW5ndGh8Z2V0U29ja2V0fGdldFZvaWNlQ2FsbFN0YXR1c3xnZXRYQ2hhbmdlfGdldFlDaGFuZ2V8aGFuZ0NhbGx8aGVpZ2h0fGhpZ2hCeXRlfGhvbWV8aW1hZ2V8aW50ZXJydXB0c3xpc0FjdGlvbkRvbmV8aXNEaXJlY3Rvcnl8aXNMaXN0ZW5pbmd8aXNQSU58aXNQcmVzc2VkfGlzVmFsaWR8a2V5UHJlc3NlZHxrZXlSZWxlYXNlZHxrZXlib2FyZFJlYWR8a25vYlJlYWR8bGVmdFRvUmlnaHR8bGluZXxsaW5lRm9sbG93Q29uZmlnfGxpc3RlbnxsaXN0ZW5PbkxvY2FsaG9zdHxsb2FkSW1hZ2V8bG9jYWxJUHxsb3dCeXRlfG1hY0FkZHJlc3N8bWFpbnRhaW58bWFwfG1heHxtZXNzYWdlQXZhaWxhYmxlfG1pY3Jvc3xtaWxsaXN8bWlufG1rZGlyfG1vdG9yc1N0b3B8bW90b3JzV3JpdGV8bW91c2VEcmFnZ2VkfG1vdXNlTW92ZWR8bW91c2VQcmVzc2VkfG1vdXNlUmVsZWFzZWR8bW92ZXxub0F1dG9zY3JvbGx8bm9CbGlua3xub0J1ZmZlcnxub0N1cnNvcnxub0Rpc3BsYXl8bm9GaWxsfG5vSW50ZXJydXB0c3xub0xpc3Rlbk9uTG9jYWxob3N0fG5vU3Ryb2tlfG5vVG9uZXxvblJlY2VpdmV8b25SZXF1ZXN0fG9wZW58b3Blbk5leHRGaWxlfG92ZXJmbG93fHBhcnNlQ29tbWFuZHxwYXJzZUZsb2F0fHBhcnNlSW50fHBhcnNlUGFja2V0fHBhdXNlTW9kZXxwZWVrfHBpbk1vZGV8cGxheUZpbGV8cGxheU1lbG9keXxwb2ludHxwb2ludFRvfHBvc2l0aW9ufHBvd3xwcmVwYXJlfHByZXNzfHByaW50fHByaW50RmlybXdhcmVWZXJzaW9ufHByaW50VmVyc2lvbnxwcmludGxufHByb2Nlc3N8cHJvY2Vzc0lucHV0fHB1bHNlSW58cHV0fHJhbmRvbXxyYW5kb21TZWVkfHJlYWR8cmVhZEFjY2VsZXJvbWV0ZXJ8cmVhZEJsdWV8cmVhZEJ1dHRvbnxyZWFkQnl0ZXN8cmVhZEJ5dGVzVW50aWx8cmVhZEdyZWVufHJlYWRKb3lzdGlja0J1dHRvbnxyZWFkSm95c3RpY2tTd2l0Y2h8cmVhZEpveXN0aWNrWHxyZWFkSm95c3RpY2tZfHJlYWRMaWdodFNlbnNvcnxyZWFkTWVzc2FnZXxyZWFkTWljcm9waG9uZXxyZWFkTmV0d29ya3N8cmVhZFJlZHxyZWFkU2xpZGVyfHJlYWRTdHJpbmd8cmVhZFN0cmluZ1VudGlsfHJlYWRUZW1wZXJhdHVyZXxyZWFkeXxyZWN0fHJlbGVhc2V8cmVsZWFzZUFsbHxyZW1vdGVJUHxyZW1vdGVOdW1iZXJ8cmVtb3RlUG9ydHxyZW1vdmV8cmVxdWVzdEZyb218cmV0cmlldmVDYWxsaW5nTnVtYmVyfHJld2luZERpcmVjdG9yeXxyaWdodFRvTGVmdHxybWRpcnxyb2JvdE5hbWVSZWFkfHJvYm90TmFtZVdyaXRlfHJ1bnxydW5Bc3luY2hyb25vdXNseXxydW5TaGVsbENvbW1hbmR8cnVuU2hlbGxDb21tYW5kQXN5bmNocm9ub3VzbHl8cnVubmluZ3xzY2FuTmV0d29ya3N8c2Nyb2xsRGlzcGxheUxlZnR8c2Nyb2xsRGlzcGxheVJpZ2h0fHNlZWt8c2VuZEFuYWxvZ3xzZW5kRGlnaXRhbFBvcnRQYWlyfHNlbmREaWdpdGFsUG9ydHN8c2VuZFN0cmluZ3xzZW5kU3lzZXh8c2VyaWFsRXZlbnR8c2V0QmFuZHxzZXRCaXRPcmRlcnxzZXRDbG9ja0RpdmlkZXJ8c2V0Q3Vyc29yfHNldEROU3xzZXREYXRhTW9kZXxzZXRGaXJtd2FyZVZlcnNpb258c2V0TW9kZXxzZXRQSU5Vc2VkfHNldFNwZWVkfHNldFRleHRTaXplfHNldFRpbWVvdXR8c2hpZnRJbnxzaGlmdE91dHxzaHV0ZG93bnxzaW58c2l6ZXxzcXJ0fHN0YXJ0TG9vcHxzdGVwfHN0b3B8c3Ryb2tlfHN1Ym5ldE1hc2t8c3dpdGNoUElOfHRhbnx0ZW1wb1dyaXRlfHRleHR8dG9uZXx0cmFuc2Zlcnx0dW5lV3JpdGV8dHVybnx1cGRhdGVJUnx1c2VyTmFtZVJlYWR8dXNlck5hbWVXcml0ZXx2b2ljZUNhbGx8d2FpdENvbnRpbnVlfHdpZHRofHdyaXRlfHdyaXRlQmx1ZXx3cml0ZUdyZWVufHdyaXRlSlNPTnx3cml0ZU1lc3NhZ2V8d3JpdGVNaWNyb3NlY29uZHN8d3JpdGVSR0J8d3JpdGVSZWR8eWllbGQpXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbm8gPSBQcmlzbS5sYW5ndWFnZXMuYXJkdWlubztcblxuUHJpc20ubGFuZ3VhZ2VzLmFyZmYgPSB7XG5cdCdjb21tZW50JzogLyUuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvQCg/OmF0dHJpYnV0ZXxkYXRhfGVuZHxyZWxhdGlvbilcXGIvaSxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFybWFzbSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcclxcbl18XCJcIikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJF0pKD86XFwkezJ9KSopXFwkXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W14nXFxyXFxuXXswLDR9fCcnKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmVyc2lvbi1zeW1ib2wnOiB7XG5cdFx0cGF0dGVybjogL1xcfFtcXHdAXStcXHwvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfFRSVUUpXFxiLyxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86QUxJQVN8QUxJR058QVJFQXxBUk18QVNTRVJUfEFUVFJ8Q058Q09ERXxDT0RFMTZ8Q09ERTMyfENPTU1PTnxDUHxEQVRBfERDQnxEQ0R8RENET3xEQ0RVfERDRkR8RENGRFV8RENJfERDUXxEQ1FVfERDV3xEQ1dVfEROfEVMSUZ8RUxTRXxFTkR8RU5ERlVOQ3xFTkRJRnxFTkRQfEVOVFJZfEVRVXxFWFBPUlR8RVhQT1JUQVN8RVhURVJOfEZJRUxEfEZJTEx8Rk58RlVOQ1RJT058R0JMQXxHQkxMfEdCTFN8R0VUfEdMT0JBTHxJRnxJTVBPUlR8SU5DQklOfElOQ0xVREV8SU5GT3xLRUVQfExDTEF8TENMTHxMQ0xTfExUT1JHfE1BQ1JPfE1BUHxNRU5EfE1FWElUfE5PRlB8T1BUfFBSRVNFUlZFOHxQUk9DfFFOfFJFQURPTkxZfFJFTE9DfFJFUVVJUkV8UkVRVUlSRTh8UkxJU1R8Uk9VVHxTRVRBfFNFVEx8U0VUU3xTTnxTUEFDRXxTVUJUfFRIVU1CfFRIVU1CWHxUVEx8V0VORHxXSElMRSlcXGIvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdpbnN0cnVjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58KD86XnxbXlxcXFxdKSg/Olxcclxcbj98XFxuKSlbIFxcdF0qKD86KD86W0EtWl1bQS1aMC05X10qW2Etel1cXHcqfFthLXpdXFx3KnxcXGQrKVsgXFx0XSspPylcXGJbQS1aLl0rXFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXG5cdCdudW1iZXInOiAvKD86XFxiWzItOV1fXFxkK3woPzpcXGJcXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZS0/XFxkKyk/fFxcYjAoPzpbZmRdX3x4KVswLTlhLWZdK3wmWzAtOWEtZl0rKVxcYi9pLFxuXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86clxcZHxscilcXGIvLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC88Pnw8PHw+PnwmJnxcXHxcXHx8Wz0hPD4vXT0/fFsrXFwtKiUjPyZ8Xl18OltBLVpdKzovLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzWydhcm0tYXNtJ10gPSBQcmlzbS5sYW5ndWFnZXMuYXJtYXNtO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKi9cblx0dmFyIGNyZWF0ZUxhbmd1YWdlU3RyaW5nID0gZnVuY3Rpb24gKGxhbmcsIHBhdHRlcm4pIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9cXHshLy5zb3VyY2UgKyAnKD86JyArIChwYXR0ZXJuIHx8IGxhbmcpICsgJyknICsgLyRbXFxzXFxTXSpcXH0vLnNvdXJjZSwgJ20nKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZW1iZWRkZWQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFx7IVxcdytcXGIpW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS0nICsgbGFuZyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tsYW5nXVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9O1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hcnR1cm8gPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvOy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY2hhcmFjdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL2AuYC8sXG5cdFx0XHRhbGlhczogJ2NoYXInLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFxkKyg/OlxcLlxcZCsoPzpcXC5cXGQrKD86LVtcXHcrLV0rKT8pPyk/XFxiLyxcblx0XHR9LFxuXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdyZWdleCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtcXC8uKj9cXC9cXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdodG1sLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdodG1sJyksXG5cdFx0J2Nzcy1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnY3NzJyksXG5cdFx0J2pzLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdqcycpLFxuXHRcdCdtZC1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnbWQnKSxcblx0XHQnc3FsLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdzcWwnKSxcblx0XHQnc2gtc3RyaW5nJzogY3JlYXRlTGFuZ3VhZ2VTdHJpbmcoJ3NoZWxsJywgJ3NoJyksXG5cblx0XHQnbXVsdGlzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXHUwMEJCLip8XFx7OltcXHNcXFNdKj86XFx9fFxce1tcXHNcXFNdKj9cXH18Xi17Nn0kW1xcc1xcU10qL20sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2xhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcdytcXGJcXD8/Oi8sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cblx0XHQnbGl0ZXJhbCc6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86XFx3K1xcYlxcPz86PykvLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXG5cdFx0J3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvOig/OlxcdytcXGJcXD8/Oj8pLyxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXG5cdFx0J2NvbG9yJzogLyNcXHcrLyxcblxuXHRcdCdwcmVkaWNhdGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YWxsfGFuZHxhbnl8YXNjaWl8YXR0cnxhdHRyaWJ1dGV8YXR0cmlidXRlTGFiZWx8YmluYXJ5fGJsb2NrfGNoYXJ8Y29udGFpbnN8ZGF0YWJhc2V8ZGF0ZXxkaWN0aW9uYXJ5fGVtcHR5fGVxdWFsfGV2ZW58ZXZlcnl8ZXhpc3RzfGZhbHNlfGZsb2F0aW5nfGZ1bmN0aW9ufGdyZWF0ZXJ8Z3JlYXRlck9yRXF1YWx8aWZ8aW58aW5saW5lfGludGVnZXJ8aXN8a2V5fGxhYmVsfGxlYXB8bGVzc3xsZXNzT3JFcXVhbHxsaXRlcmFsfGxvZ2ljYWx8bG93ZXJ8bmFuZHxuZWdhdGl2ZXxub3J8bm90fG5vdEVxdWFsfG51bGx8bnVtZXJpY3xvZGR8b3J8cGF0aHxwYXRoTGFiZWx8cG9zaXRpdmV8cHJlZml4fHByaW1lfHJlZ2V4fHNhbWV8c2V0fHNvbWV8c29ydGVkfHN0YW5kYWxvbmV8c3RyaW5nfHN1YnNldHxzdWZmaXh8c3VwZXJzZXR8c3ltYm9sfHN5bWJvbExpdGVyYWx8dHJ1ZXx0cnl8dHlwZXx1bmxlc3N8dXBwZXJ8d2hlbnx3aGl0ZXNwYWNlfHdvcmR8eG5vcnx4b3J8emVybylcXD8vLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQnYnVpbHRpbi1mdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzphYnN8YWNvc3xhY29zaHxhY3NlY3xhY3NlY2h8YWN0YW58YWN0YW5ofGFkZHxhZnRlcnxhbGVydHxhbGlhc3xhbmR8YW5nbGV8YXBwZW5kfGFyZ3xhcmdzfGFyaXR5fGFycmF5fGFzfGFzZWN8YXNlY2h8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGF0dHJ8YXR0cnN8YXZlcmFnZXxiZWZvcmV8YmVuY2htYXJrfGJsZW5kfGJyZWFrfGNhbGx8Y2FwaXRhbGl6ZXxjYXNlfGNlaWx8Y2hvcHxjbGVhcnxjbGlwfGNsb3NlfGNvbG9yfGNvbWJpbmV8Y29uanxjb250aW51ZXxjb3B5fGNvc3xjb3NofGNyY3xjc2VjfGNzZWNofGN0YW58Y3Rhbmh8Y3Vyc29yfGRhcmtlbnxkZWN8ZGVjb2RlfGRlZmluZXxkZWxldGV8ZGVzYXR1cmF0ZXxkZXZpYXRpb258ZGlhbG9nfGRpY3Rpb25hcnl8ZGlmZmVyZW5jZXxkaWdlc3R8ZGlnaXRzfGRpdnxkb3xkb3dubG9hZHxkcm9wfGR1cHxlfGVsc2V8ZW1wdHl8ZW5jb2RlfGVuc3VyZXxlbnZ8ZXNjYXBlfGV4ZWN1dGV8ZXhpdHxleHB8ZXh0ZW5kfGV4dHJhY3R8ZmFjdG9yc3xmZGl2fGZpbHRlcnxmaXJzdHxmbGF0dGVufGZsb29yfGZvbGR8ZnJvbXxmdW5jdGlvbnxnYW1tYXxnY2R8Z2V0fGdvdG98aGFzaHxoeXBvdHxpZnxpbmN8aW5kZW50fGluZGV4fGluZmluaXR5fGluZm98aW5wdXR8aW5zZXJ0fGluc3BlY3R8aW50ZXJzZWN0aW9ufGludmVydHxqYXJvfGpvaW58a2V5c3xrdXJ0b3Npc3xsYXN0fGxldHxsZXZlbnNodGVpbnxsaWdodGVufGxpc3R8bG58bG9nfGxvb3B8bG93ZXJ8bWFpbHxtYXB8bWF0Y2h8bWF4fG1lZGlhbnxtaW58bW9kfG1vZHVsZXxtdWx8bmFuZHxuZWd8bmV3fG5vcnxub3JtYWxpemV8bm90fG5vd3xudWxsfG9wZW58b3J8b3V0ZGVudHxwYWR8cGFsZXR0ZXxwYW5pY3xwYXRofHBhdXNlfHBlcm1pc3Npb25zfHBlcm11dGF0ZXxwaXxwb3B8cG9wdXB8cG93fHBvd2Vyc2V0fHBvd21vZHxwcmVmaXh8cHJpbnR8cHJpbnRzfHByb2Nlc3N8cHJvZHVjdHxxdWVyeXxyYW5kb218cmFuZ2V8cmVhZHxyZWxhdGl2ZXxyZW1vdmV8cmVuYW1lfHJlbmRlcnxyZXBlYXR8cmVwbGFjZXxyZXF1ZXN0fHJldHVybnxyZXZlcnNlfHJvdW5kfHNhbXBsZXxzYXR1cmF0ZXxzY3JpcHR8c2VjfHNlY2h8c2VsZWN0fHNlcnZlfHNldHxzaGx8c2hyfHNodWZmbGV8c2lufHNpbmh8c2l6ZXxza2V3bmVzc3xzbGljZXxzb3J0fHNwaW58c3BsaXR8c3FydHxzcXVlZXplfHN0YWNrfHN0cmlwfHN1YnxzdWZmaXh8c3VtfHN3aXRjaHxzeW1ib2xzfHN5bWxpbmt8c3lzfHRha2V8dGFufHRhbmh8dGVybWluYWx8dGVybWluYXRlfHRvfHRydW5jYXRlfHRyeXx0eXBlfHVuY2xpcHx1bmlvbnx1bmlxdWV8dW5sZXNzfHVudGlsfHVuemlwfHVwcGVyfHZhbHVlc3x2YXJ8dmFyaWFuY2V8dm9sdW1lfHdlYnZpZXd8d2hpbGV8d2l0aHx3b3Jkd3JhcHx3cml0ZXx4bm9yfHhvcnx6aXApXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J3N1Z2FyJzoge1xuXHRcdFx0cGF0dGVybjogLy0+fD0+fFxcfHw6Oi8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdLyxcblxuXHRcdCdzeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPDp8LTp8XHUwMEY4fEB8I3xcXCt8XFx8fFxcKnxcXCR8LS0tfC18JXxcXC98XFwuXFwufFxcXnx+fD18PHw+fFxcXFwvXG5cdFx0fSxcblxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmZhbHNlfG1heWJlfHRydWUpXFxiL1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXJ0ID0gUHJpc20ubGFuZ3VhZ2VzWydhcnR1cm8nXTtcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBhdHRyaWJ1dGVzID0ge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFxbKD8hXFxbKSg/OihbXCInJGBdKSg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSpcXDJ8XFxbKD86W15cXFtcXF1cXFxcXXxcXFxcLikqXFxdfFteXFxbXFxdXFxcXFwiJyRgXXxcXFxcLikqXFxdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdxdW90ZWQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oWyRgXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqXFwxLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bJGBdfFskYF0kL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycHJldGVkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxdfFxcXFwuKSonLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14nfCckL1xuXHRcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHQndmFyaWFibGUnOiAvXFx3Kyg/PT0pLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXSR8LC8sXG5cdFx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0XHQvLyBUaGUgbmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBibGFuayBtYXRjaGVzXG5cdFx0XHQnYXR0ci12YWx1ZSc6IC8oPyFeXFxzKyQpLisvXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhc2NpaWRvYyA9IFByaXNtLmxhbmd1YWdlcy5hc2NpaWRvYyA9IHtcblx0XHQnY29tbWVudC1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFxcL3s0LH0pKD86XFxyP1xcbnxcXHIpKD86W1xcc1xcU10qKD86XFxyP1xcbnxcXHIpKT8/XFwxL20sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQndGFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxcfD17Myx9KD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKS4qKSo/KD86XFxyP1xcbnxcXHIpXFx8PXszLH0kL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NwZWNpZmllcnMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/Oig/Oig/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKylbKypdKD86WzxePl0oPzpcXC5bPF4+XSk/fFxcLls8Xj5dKT98WzxePl0oPzpcXC5bPF4+XSk/fFxcLls8Xj5dKVthLXpdKnxbYS16XSspKD89XFx8KS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pW3whXT0qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Bhc3N0aHJvdWdoLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFwrezQsfSkoPzpcXHI/XFxufFxccikoPzpbXFxzXFxTXSooPzpcXHI/XFxufFxccikpPz9cXDEkL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCsrfFxcKyskL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gTGl0ZXJhbCBibG9ja3MgYW5kIGxpc3RpbmcgYmxvY2tzXG5cdFx0J2xpdGVyYWwtYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXigtezQsfXxcXC57NCx9KSg/Olxccj9cXG58XFxyKSg/OltcXHNcXFNdKig/Olxccj9cXG58XFxyKSk/P1xcMSQvbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/Oi0rfFxcLispfCg/Oi0rfFxcLispJC9cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFNpZGViYXIgYmxvY2tzLCBxdW90ZSBibG9ja3MsIGV4YW1wbGUgYmxvY2tzIGFuZCBvcGVuIGJsb2Nrc1xuXHRcdCdvdGhlci1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKC0tfFxcKns0LH18X3s0LH18PXs0LH0pKD86XFxyP1xcbnxcXHIpKD86W1xcc1xcU10qKD86XFxyP1xcbnxcXHIpKT8/XFwxJC9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86LSt8XFwqK3xfK3w9Kyl8KD86LSt8XFwqK3xfK3w9KykkL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBsaXN0LXB1bmN0dWF0aW9uIGFuZCBsaXN0LWxhYmVsIG11c3QgYXBwZWFyIGJlZm9yZSBpbmRlbnRlZC1ibG9ja1xuXHRcdCdsaXN0LXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzotfFxcKnsxLDV9fFxcLnsxLDV9fCg/OlthLXpdfFxcZCspXFwufFt4dmldK1xcKSkoPz0gKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J2xpc3QtbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVthLXpcXGRdLisoPzo6ezIsNH18OzspKD89XFxzKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCdpbmRlbnRlZC1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC8oKFxccj9cXG58XFxyKVxcMikoWyBcXHRdKylcXFMuKig/Oig/Olxccj9cXG58XFxyKVxcMy4rKSooPz1cXDJ7Mn18JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY29tbWVudCc6IC9eXFwvXFwvLiovbSxcblx0XHQndGl0bGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXi4rKD86XFxyP1xcbnxcXHIpKD86PXszLH18LXszLH18fnszLH18XFxeezMsfXxcXCt7Myx9KSR8Xj17MSw1fSAuK3xeXFwuKD8hW1xccy5dKS4qL20sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzpcXC58PSspfCg/Oj0rfC0rfH4rfFxcXit8XFwrKykkL1xuXHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZS1lbnRyeSc6IHtcblx0XHRcdHBhdHRlcm46IC9eOlteOlxcclxcbl0rOig/OiAuKj8oPzogXFwrKD86XFxyP1xcbnxcXHIpLio/KSopPyQvbSxcblx0XHRcdGFsaWFzOiAndGFnJ1xuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZXMnOiBhdHRyaWJ1dGVzLFxuXHRcdCdocic6IHtcblx0XHRcdHBhdHRlcm46IC9eJ3szLH0kL20sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3BhZ2UtYnJlYWsnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjx7Myx9JC9tLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdhZG1vbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpDQVVUSU9OfElNUE9SVEFOVHxOT1RFfFRJUHxXQVJOSU5HKTovbSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdjYWxsb3V0JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKTw/XFxkKj4vbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvPFxcZCs+Lyxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbWFjcm8nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2EtelxcZF1bYS16XFxkLV0qOjo/KD86W15cXHNcXFtcXF1dKlxcWyg/OlteXFxdXFxcXFwiJ118KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSpcXDF8XFxcXC4pKlxcXSkvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eW2EtelxcZC1dKyg/PTopLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL146Oj8vLFxuXHRcdFx0XHQnYXR0cmlidXRlcyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD86XFxbKD86W15cXF1cXFxcXCInXXwoW1wiJ10pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKlxcMXxcXFxcLikqXFxdKS8sXG5cdFx0XHRcdFx0aW5zaWRlOiBhdHRyaWJ1dGVzLmluc2lkZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaW5saW5lJzoge1xuXHRcdFx0Lypcblx0XHRcdFRoZSBpbml0aWFsIGxvb2stYmVoaW5kIHByZXZlbnRzIHRoZSBoaWdobGlnaHRpbmcgb2YgZXNjYXBlZCBxdW90ZWQgdGV4dC5cblxuXHRcdFx0UXVvdGVkIHRleHQgY2FuIGJlIG11bHRpLWxpbmUgYnV0IGNhbm5vdCBzcGFuIGFuIGVtcHR5IGxpbmUuXG5cdFx0XHRBbGwgcXVvdGVkIHRleHQgY2FuIGhhdmUgYXR0cmlidXRlcyBiZWZvcmUgW2Zvb2JhciwgJ2Zvb2JhcicsIGJhej1cImJhclwiXS5cblxuXHRcdFx0Rmlyc3QsIHdlIGhhbmRsZSB0aGUgY29uc3RyYWluZWQgcXVvdGVzLlxuXHRcdFx0VGhvc2UgbXVzdCBiZSBib3VuZGVkIGJ5IG5vbi13b3JkIGNoYXJzIGFuZCBjYW5ub3QgaGF2ZSBzcGFjZXMgYmV0d2VlbiB0aGUgZGVsaW1pdGVyIGFuZCB0aGUgZmlyc3QgY2hhci5cblx0XHRcdFRoZXkgYXJlLCBpbiBvcmRlcjogX2VtcGhhc2lzXywgYGBkb3VibGUgcXVvdGVzJycsIGBzaW5nbGUgcXVvdGVzJywgYG1vbm9zcGFjZWAsICdlbXBoYXNpcycsICpzdHJvbmcqLCArbW9ub3NwYWNlKyBhbmQgI3VucXVvdGVkI1xuXG5cdFx0XHRUaGVuIHdlIGhhbmRsZSB0aGUgdW5jb25zdHJhaW5lZCBxdW90ZXMuXG5cdFx0XHRUaG9zZSBkbyBub3QgaGF2ZSB0aGUgcmVzdHJpY3Rpb25zIG9mIHRoZSBjb25zdHJhaW5lZCBxdW90ZXMuXG5cdFx0XHRUaGV5IGFyZSwgaW4gb3JkZXI6IF9fZW1waGFzaXNfXywgKipzdHJvbmcqKiwgKyttb25vc3BhY2UrKywgKysrcGFzc3Rocm91Z2grKyssICMjdW5xdW90ZWQjIywgJCRwYXNzdGhyb3VnaCQkLCB+c3Vic2NyaXB0fiwgXnN1cGVyc2NyaXB0Xiwge2F0dHJpYnV0ZS1yZWZlcmVuY2V9LCBbW2FuY2hvcl1dLCBbW1tiaWJsaW9ncmFwaHkgYW5jaG9yXV1dLCA8PHhyZWY+PiwgKCgoaW5kZXhlcykpKSBhbmQgKChpbmRleGVzKSlcblx0XHRcdCAqL1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86KD86XFxCXFxbKD86W15cXF1cXFxcXCInXXwoW1wiJ10pKD86KD8hXFwyKVteXFxcXF18XFxcXC4pKlxcMnxcXFxcLikqXFxdKT8oPzpcXGJfKD8hXFxzKSg/OiBffFteX1xcXFxcXHJcXG5dfFxcXFwuKSsoPzooPzpcXHI/XFxufFxccikoPzogX3xbXl9cXFxcXFxyXFxuXXxcXFxcLikrKSpfXFxifFxcQmBgKD8hXFxzKS4rPyg/Oig/Olxccj9cXG58XFxyKS4rPykqJydcXEJ8XFxCYCg/IVxccykoPzpbXmAnXFxzXXxcXHMrXFxTKStbJ2BdXFxCfFxcQihbJyorI10pKD8hXFxzKSg/OiBcXDN8KD8hXFwzKVteXFxcXFxcclxcbl18XFxcXC4pKyg/Oig/Olxccj9cXG58XFxyKSg/OiBcXDN8KD8hXFwzKVteXFxcXFxcclxcbl18XFxcXC4pKykqXFwzXFxCKXwoPzpcXFsoPzpbXlxcXVxcXFxcIiddfChbXCInXSkoPzooPyFcXDQpW15cXFxcXXxcXFxcLikqXFw0fFxcXFwuKSpcXF0pPyg/OihfX3xcXCpcXCp8XFwrXFwrXFwrP3wjI3xcXCRcXCR8W35eXSkuKz8oPzooPzpcXHI/XFxufFxccikuKz8pKlxcNXxcXHtbXn1cXHJcXG5dK1xcfXxcXFtcXFtcXFs/Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSpcXF0/XFxdXFxdfDw8Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSo+PnxcXChcXChcXCg/Lis/KD86KD86XFxyP1xcbnxcXHIpLis/KSpcXCk/XFwpXFwpKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0dHJpYnV0ZXMnOiBhdHRyaWJ1dGVzLFxuXHRcdFx0XHQndXJsJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKD86XFxbXFxbXFxbPy4rP1xcXT9cXF1cXF18PDwuKz8+PikkLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86XFxbXFxbXFxbP3w8PCl8KD86XFxdXFxdXFxdP3w+PikkL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2F0dHJpYnV0ZS1yZWYnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXHsuK1xcfSQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXHspW2EtelxcZCwrXy1dKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXls9PyEjJUAkXXwhKD89Wzp9XSkvLFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHt8XFx9JHw6Oj8vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaXRhbGljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFsnX10pW1xcc1xcU10rXFwxJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/OicnP3xfXz8pfCg/OicnP3xfXz8pJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdib2xkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFwqW1xcc1xcU10rXFwqJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRwdW5jdHVhdGlvbjogL15cXCpcXCo/fFxcKlxcKj8kL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzpgYD98XFwrezEsM318IyM/fFxcJFxcJHxbfl5dfFxcKFxcKFxcKD8pfCg/OicnP3xcXCt7MSwzfXwjIz98XFwkXFwkfFt+XmBdfFxcKT9cXClcXCkpJC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdyZXBsYWNlbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCgoPzpDfFJ8VE0pXFwpLyxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdCdlbnRpdHknOiAvJiM/W1xcZGEtel17MSw4fTsvaSxcblx0XHQnbGluZS1jb250aW51YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58IClcXCskL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH07XG5cblxuXHQvLyBBbGxvdyBzb21lIG5lc3RpbmcuIFRoZXJlIGlzIG5vIHJlY3Vyc2lvbiB0aG91Z2gsIHNvIGNsb25pbmcgc2hvdWxkIG5vdCBiZSBuZWVkZWQuXG5cblx0ZnVuY3Rpb24gY29weUZyb21Bc2NpaURvYyhrZXlzKSB7XG5cdFx0a2V5cyA9IGtleXMuc3BsaXQoJyAnKTtcblxuXHRcdHZhciBvID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0b1trZXlzW2ldXSA9IGFzY2lpZG9jW2tleXNbaV1dO1xuXHRcdH1cblx0XHRyZXR1cm4gbztcblx0fVxuXG5cdGF0dHJpYnV0ZXMuaW5zaWRlWydpbnRlcnByZXRlZCddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnbWFjcm8gaW5saW5lIHJlcGxhY2VtZW50IGVudGl0eScpO1xuXG5cdGFzY2lpZG9jWydwYXNzdGhyb3VnaC1ibG9jayddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnbWFjcm8nKTtcblxuXHRhc2NpaWRvY1snbGl0ZXJhbC1ibG9jayddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnY2FsbG91dCcpO1xuXG5cdGFzY2lpZG9jWyd0YWJsZSddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnY29tbWVudC1ibG9jayBwYXNzdGhyb3VnaC1ibG9jayBsaXRlcmFsLWJsb2NrIG90aGVyLWJsb2NrIGxpc3QtcHVuY3R1YXRpb24gaW5kZW50ZWQtYmxvY2sgY29tbWVudCB0aXRsZSBhdHRyaWJ1dGUtZW50cnkgYXR0cmlidXRlcyBociBwYWdlLWJyZWFrIGFkbW9uaXRpb24gbGlzdC1sYWJlbCBjYWxsb3V0IG1hY3JvIGlubGluZSByZXBsYWNlbWVudCBlbnRpdHkgbGluZS1jb250aW51YXRpb24nKTtcblxuXHRhc2NpaWRvY1snb3RoZXItYmxvY2snXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ3RhYmxlIGxpc3QtcHVuY3R1YXRpb24gaW5kZW50ZWQtYmxvY2sgY29tbWVudCBhdHRyaWJ1dGUtZW50cnkgYXR0cmlidXRlcyBociBwYWdlLWJyZWFrIGFkbW9uaXRpb24gbGlzdC1sYWJlbCBtYWNybyBpbmxpbmUgcmVwbGFjZW1lbnQgZW50aXR5IGxpbmUtY29udGludWF0aW9uJyk7XG5cblx0YXNjaWlkb2NbJ3RpdGxlJ10uaW5zaWRlLnJlc3QgPSBjb3B5RnJvbUFzY2lpRG9jKCdtYWNybyBpbmxpbmUgcmVwbGFjZW1lbnQgZW50aXR5Jyk7XG5cblxuXHQvLyBQbHVnaW4gdG8gbWFrZSBlbnRpdHkgdGl0bGUgc2hvdyB0aGUgcmVhbCBlbnRpdHksIGlkZWEgYnkgUm9tYW4gS29tYXJvdlxuXHRQcmlzbS5ob29rcy5hZGQoJ3dyYXAnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi50eXBlID09PSAnZW50aXR5Jykge1xuXHRcdFx0ZW52LmF0dHJpYnV0ZXNbJ3RpdGxlJ10gPSBlbnYuY29udGVudC5yZXBsYWNlKC8mYW1wOy8sICcmJyk7XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYWRvYyA9IFByaXNtLmxhbmd1YWdlcy5hc2NpaWRvYztcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBSZXBsYWNlcyBhbGwgcGxhY2Vob2xkZXJzIFwiPDxuPj5cIiBvZiBnaXZlbiBwYXR0ZXJuIHdpdGggdGhlIG4tdGggcmVwbGFjZW1lbnQgKHplcm8gYmFzZWQpLlxuXHQgKlxuXHQgKiBOb3RlOiBUaGlzIGlzIGEgc2ltcGxlIHRleHQgYmFzZWQgcmVwbGFjZW1lbnQuIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBiYWNrcmVmZXJlbmNlcyFcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50cyBhIGxpc3Qgb2YgcmVwbGFjZW1lbnQgd2hpY2ggY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwYXR0ZXJuIHdpdGggYWxsIHBsYWNlaG9sZGVycyByZXBsYWNlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnRzLlxuXHQgKiBAZXhhbXBsZSByZXBsYWNlKC9hPDwwPj5hLy5zb3VyY2UsIFsvYisvLnNvdXJjZV0pID09PSAvYSg/OmIrKWEvLnNvdXJjZVxuXHQgKi9cblx0ZnVuY3Rpb24gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpIHtcblx0XHRyZXR1cm4gcGF0dGVybi5yZXBsYWNlKC88PChcXGQrKT4+L2csIGZ1bmN0aW9uIChtLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuICcoPzonICsgcmVwbGFjZW1lbnRzWytpbmRleF0gKyAnKSc7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUocGF0dGVybiwgcmVwbGFjZW1lbnRzLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAocmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpLCBmbGFncyB8fCAnJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5lc3RlZCBwYXR0ZXJuIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc3RyaW5nIGA8PHNlbGY+PmAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHBhdHRlcm4gaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVwdGhMb2cyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQocGF0dGVybiwgZGVwdGhMb2cyKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXB0aExvZzI7IGkrKykge1xuXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblx0fVxuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvbGFuZ3VhZ2UtcmVmZXJlbmNlL2tleXdvcmRzL1xuXHR2YXIga2V5d29yZEtpbmRzID0ge1xuXHRcdC8vIGtleXdvcmRzIHdoaWNoIHJlcHJlc2VudCBhIHJldHVybiBvciB2YXJpYWJsZSB0eXBlXG5cdFx0dHlwZTogJ2Jvb2wgYnl0ZSBjaGFyIGRlY2ltYWwgZG91YmxlIGR5bmFtaWMgZmxvYXQgaW50IGxvbmcgb2JqZWN0IHNieXRlIHNob3J0IHN0cmluZyB1aW50IHVsb25nIHVzaG9ydCB2YXIgdm9pZCcsXG5cdFx0Ly8ga2V5d29yZHMgd2hpY2ggYXJlIHVzZWQgdG8gZGVjbGFyZSBhIHR5cGVcblx0XHR0eXBlRGVjbGFyYXRpb246ICdjbGFzcyBlbnVtIGludGVyZmFjZSByZWNvcmQgc3RydWN0Jyxcblx0XHQvLyBjb250ZXh0dWFsIGtleXdvcmRzXG5cdFx0Ly8gKFwidmFyXCIgYW5kIFwiZHluYW1pY1wiIGFyZSBtaXNzaW5nIGJlY2F1c2UgdGhleSBhcmUgdXNlZCBsaWtlIHR5cGVzKVxuXHRcdGNvbnRleHR1YWw6ICdhZGQgYWxpYXMgYW5kIGFzY2VuZGluZyBhc3luYyBhd2FpdCBieSBkZXNjZW5kaW5nIGZyb20oPz1cXFxccyooPzpcXFxcd3wkKSkgZ2V0IGdsb2JhbCBncm91cCBpbnRvIGluaXQoPz1cXFxccyo7KSBqb2luIGxldCBuYW1lb2Ygbm90IG5vdG51bGwgb24gb3Igb3JkZXJieSBwYXJ0aWFsIHJlbW92ZSBzZWxlY3Qgc2V0IHVubWFuYWdlZCB2YWx1ZSB3aGVuIHdoZXJlIHdpdGgoPz1cXFxccyp7KScsXG5cdFx0Ly8gYWxsIG90aGVyIGtleXdvcmRzXG5cdFx0b3RoZXI6ICdhYnN0cmFjdCBhcyBiYXNlIGJyZWFrIGNhc2UgY2F0Y2ggY2hlY2tlZCBjb25zdCBjb250aW51ZSBkZWZhdWx0IGRlbGVnYXRlIGRvIGVsc2UgZXZlbnQgZXhwbGljaXQgZXh0ZXJuIGZpbmFsbHkgZml4ZWQgZm9yIGZvcmVhY2ggZ290byBpZiBpbXBsaWNpdCBpbiBpbnRlcm5hbCBpcyBsb2NrIG5hbWVzcGFjZSBuZXcgbnVsbCBvcGVyYXRvciBvdXQgb3ZlcnJpZGUgcGFyYW1zIHByaXZhdGUgcHJvdGVjdGVkIHB1YmxpYyByZWFkb25seSByZWYgcmV0dXJuIHNlYWxlZCBzaXplb2Ygc3RhY2thbGxvYyBzdGF0aWMgc3dpdGNoIHRoaXMgdGhyb3cgdHJ5IHR5cGVvZiB1bmNoZWNrZWQgdW5zYWZlIHVzaW5nIHZpcnR1YWwgdm9sYXRpbGUgd2hpbGUgeWllbGQnXG5cdH07XG5cblx0Ly8ga2V5d29yZHNcblx0ZnVuY3Rpb24ga2V5d29yZHNUb1BhdHRlcm4od29yZHMpIHtcblx0XHRyZXR1cm4gJ1xcXFxiKD86JyArIHdvcmRzLnRyaW0oKS5yZXBsYWNlKC8gL2csICd8JykgKyAnKVxcXFxiJztcblx0fVxuXHR2YXIgdHlwZURlY2xhcmF0aW9uS2V5d29yZHMgPSBrZXl3b3Jkc1RvUGF0dGVybihrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uKTtcblx0dmFyIGtleXdvcmRzID0gUmVnRXhwKGtleXdvcmRzVG9QYXR0ZXJuKGtleXdvcmRLaW5kcy50eXBlICsgJyAnICsga2V5d29yZEtpbmRzLnR5cGVEZWNsYXJhdGlvbiArICcgJyArIGtleXdvcmRLaW5kcy5jb250ZXh0dWFsICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKSk7XG5cdHZhciBub25UeXBlS2V5d29yZHMgPSBrZXl3b3Jkc1RvUGF0dGVybihrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uICsgJyAnICsga2V5d29yZEtpbmRzLmNvbnRleHR1YWwgKyAnICcgKyBrZXl3b3JkS2luZHMub3RoZXIpO1xuXHR2YXIgbm9uQ29udGV4dHVhbEtleXdvcmRzID0ga2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGUgKyAnICcgKyBrZXl3b3JkS2luZHMudHlwZURlY2xhcmF0aW9uICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKTtcblxuXHQvLyB0eXBlc1xuXHR2YXIgZ2VuZXJpYyA9IG5lc3RlZCgvPCg/OltePD47PStcXC0qLyUmfF5dfDw8c2VsZj4+KSo+Ly5zb3VyY2UsIDIpOyAvLyB0aGUgaWRlYSBiZWhpbmQgdGhlIG90aGVyIGZvcmJpZGRlbiBjaGFyYWN0ZXJzIGlzIHRvIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLiBTYW1lIGZvciB0dXBsZUVsZW1lbnQuXG5cdHZhciBuZXN0ZWRSb3VuZCA9IG5lc3RlZCgvXFwoKD86W14oKV18PDxzZWxmPj4pKlxcKS8uc291cmNlLCAyKTtcblx0dmFyIG5hbWUgPSAvQD9cXGJbQS1aYS16X11cXHcqXFxiLy5zb3VyY2U7XG5cdHZhciBnZW5lcmljTmFtZSA9IHJlcGxhY2UoLzw8MD4+KD86XFxzKjw8MT4+KT8vLnNvdXJjZSwgW25hbWUsIGdlbmVyaWNdKTtcblx0dmFyIGlkZW50aWZpZXIgPSByZXBsYWNlKC8oPyE8PDA+Pik8PDE+Pig/OlxccypcXC5cXHMqPDwxPj4pKi8uc291cmNlLCBbbm9uVHlwZUtleXdvcmRzLCBnZW5lcmljTmFtZV0pO1xuXHR2YXIgYXJyYXkgPSAvXFxbXFxzKig/OixcXHMqKSpcXF0vLnNvdXJjZTtcblx0dmFyIHR5cGVFeHByZXNzaW9uV2l0aG91dFR1cGxlID0gcmVwbGFjZSgvPDwwPj4oPzpcXHMqKD86XFw/XFxzKik/PDwxPj4pKig/OlxccypcXD8pPy8uc291cmNlLCBbaWRlbnRpZmllciwgYXJyYXldKTtcblx0dmFyIHR1cGxlRWxlbWVudCA9IHJlcGxhY2UoL1teLCgpPD5bXFxdOz0rXFwtKi8lJnxeXXw8PDA+Pnw8PDE+Pnw8PDI+Pi8uc291cmNlLCBbZ2VuZXJpYywgbmVzdGVkUm91bmQsIGFycmF5XSk7XG5cdHZhciB0dXBsZSA9IHJlcGxhY2UoL1xcKDw8MD4+Kyg/Oiw8PDA+PispK1xcKS8uc291cmNlLCBbdHVwbGVFbGVtZW50XSk7XG5cdHZhciB0eXBlRXhwcmVzc2lvbiA9IHJlcGxhY2UoLyg/Ojw8MD4+fDw8MT4+KSg/OlxccyooPzpcXD9cXHMqKT88PDI+PikqKD86XFxzKlxcPyk/Ly5zb3VyY2UsIFt0dXBsZSwgaWRlbnRpZmllciwgYXJyYXldKTtcblxuXHR2YXIgdHlwZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKT8sLjpbXFxdXS9cblx0fTtcblxuXHQvLyBzdHJpbmdzICYgY2hhcmFjdGVyc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9sYW5ndWFnZS1zcGVjaWZpY2F0aW9uL2xleGljYWwtc3RydWN0dXJlI2NoYXJhY3Rlci1saXRlcmFsc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9sYW5ndWFnZS1zcGVjaWZpY2F0aW9uL2xleGljYWwtc3RydWN0dXJlI3N0cmluZy1saXRlcmFsc1xuXHR2YXIgY2hhcmFjdGVyID0gLycoPzpbXlxcclxcbidcXFxcXXxcXFxcLnxcXFxcW1V1eF1bXFxkYS1mQS1GXXsxLDh9KScvLnNvdXJjZTsgLy8gc2ltcGxpZmllZCBwYXR0ZXJuXG5cdHZhciByZWd1bGFyU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8uc291cmNlO1xuXHR2YXIgdmVyYmF0aW1TdHJpbmcgPSAvQFwiKD86XCJcInxcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIig/IVwiKS8uc291cmNlO1xuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaGFycCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXiRcXFxcXSk8PDA+Pi8uc291cmNlLCBbdmVyYmF0aW1TdHJpbmddKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKF58W15AJFxcXFxdKTw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFVzaW5nIHN0YXRpY1xuXHRcdFx0XHQvLyB1c2luZyBzdGF0aWMgU3lzdGVtLk1hdGg7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrc3RhdGljXFxzKyk8PDA+Pig/PVxccyo7KS8uc291cmNlLCBbaWRlbnRpZmllcl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFVzaW5nIGFsaWFzICh0eXBlKVxuXHRcdFx0XHQvLyB1c2luZyBQcm9qZWN0ID0gUEMuTXlDb21wYW55LlByb2plY3Q7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrPDwwPj5cXHMqPVxccyopPDwxPj4oPz1cXHMqOykvLnNvdXJjZSwgW25hbWUsIHR5cGVFeHByZXNzaW9uXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gVXNpbmcgYWxpYXMgKGFsaWFzKVxuXHRcdFx0XHQvLyB1c2luZyBQcm9qZWN0ID0gUEMuTXlDb21wYW55LlByb2plY3Q7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxidXNpbmdcXHMrKTw8MD4+KD89XFxzKj0pLy5zb3VyY2UsIFtuYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFR5cGUgZGVjbGFyYXRpb25zXG5cdFx0XHRcdC8vIGNsYXNzIEZvbzxBLCBCPlxuXHRcdFx0XHQvLyBpbnRlcmZhY2UgRm9vPG91dCBBLCBCPlxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYjw8MD4+XFxzKyk8PDE+Pi8uc291cmNlLCBbdHlwZURlY2xhcmF0aW9uS2V5d29yZHMsIGdlbmVyaWNOYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gU2luZ2xlIGNhdGNoIGV4Y2VwdGlvbiBkZWNsYXJhdGlvblxuXHRcdFx0XHQvLyBjYXRjaChGb28pXG5cdFx0XHRcdC8vICh0aGluZ3MgbGlrZSBjYXRjaChGb28gZSkgaXMgY292ZXJlZCBieSB2YXJpYWJsZSBkZWNsYXJhdGlvbilcblx0XHRcdFx0cGF0dGVybjogcmUoLyhcXGJjYXRjaFxccypcXChcXHMqKTw8MD4+Ly5zb3VyY2UsIFtpZGVudGlmaWVyXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTmFtZSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIgb2YgZ2VuZXJpYyBjb25zdHJhaW50c1xuXHRcdFx0XHQvLyB3aGVyZSBGb28gOiBjbGFzc1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYndoZXJlXFxzKyk8PDA+Pi8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBDYXN0cyBhbmQgY2hlY2tzIHZpYSBhcyBhbmQgaXMuXG5cdFx0XHRcdC8vIGFzIEZvbzxBPiwgaXMgQmFyPEI+XG5cdFx0XHRcdC8vICh0aGluZ3MgbGlrZSBpZihhIGlzIEZvbyBiKSBpcyBjb3ZlcmVkIGJ5IHZhcmlhYmxlIGRlY2xhcmF0aW9uKVxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYig/OmlzKD86XFxzK25vdCk/fGFzKVxccyspPDwwPj4vLnNvdXJjZSwgW3R5cGVFeHByZXNzaW9uV2l0aG91dFR1cGxlXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gVmFyaWFibGUsIGZpZWxkIGFuZCBwYXJhbWV0ZXIgZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gKEZvbyBiYXIsIEJhciBiYXosIEZvb1ssLF0gYmF5LCBGb288QmFyLCBGb29CYXI8QmFyPj4gYmF4KVxuXHRcdFx0XHRwYXR0ZXJuOiByZSgvXFxiPDwwPj4oPz1cXHMrKD8hPDwxPj58d2l0aFxccypcXHspPDwyPj4oPzpcXHMqWz0sOzp7KVxcXV18XFxzKyg/OmlufHdoZW4pXFxiKSkvLnNvdXJjZSwgW3R5cGVFeHByZXNzaW9uLCBub25Db250ZXh0dWFsS2V5d29yZHMsIG5hbWVdKSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvbGFuZ3VhZ2UtcmVmZXJlbmNlL2xhbmd1YWdlLXNwZWNpZmljYXRpb24vbGV4aWNhbC1zdHJ1Y3R1cmUjbGl0ZXJhbHNcblx0XHQnbnVtYmVyJzogLyg/OlxcYjAoPzp4W1xcZGEtZl9dKltcXGRhLWZdfGJbMDFfXSpbMDFdKXwoPzpcXEJcXC5cXGQrKD86XytcXGQrKSp8XFxiXFxkKyg/Ol8rXFxkKykqKD86XFwuXFxkKyg/Ol8rXFxkKykqKT8pKD86ZVstK10/XFxkKyg/Ol8rXFxkKykqKT8pKD86W2RmbG11XXxsdXx1bCk/XFxiL2ksXG5cdFx0J29wZXJhdG9yJzogLz4+PT98PDw9P3xbLT1dPnwoWy0rJnxdKVxcMXx+fFxcP1xcPz0/fFstKyovJSZ8XiE9PD5dPT8vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXD9cXC4/fDo6fFt7fVtcXF07KCksLjpdL1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnbnVtYmVyJywge1xuXHRcdCdyYW5nZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzaGFycCcsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnbmFtZWQtcGFyYW1ldGVyJzoge1xuXHRcdFx0cGF0dGVybjogcmUoLyhbKCxdXFxzKik8PDA+Pig/PVxccyo6KS8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0Ly8gbmFtZXNwYWNlIEZvby5CYXIge31cblx0XHRcdC8vIHVzaW5nIEZvby5CYXI7XG5cdFx0XHRwYXR0ZXJuOiByZSgvKFxcYig/Om5hbWVzcGFjZXx1c2luZylcXHMrKTw8MD4+KD86XFxzKlxcLlxccyo8PDA+PikqKD89XFxzKls7e10pLy5zb3VyY2UsIFtuYW1lXSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndHlwZS1leHByZXNzaW9uJzoge1xuXHRcdFx0Ly8gZGVmYXVsdChGb28pLCB0eXBlb2YoRm9vPEJhcj4pLCBzaXplb2YoaW50KVxuXHRcdFx0cGF0dGVybjogcmUoLyhcXGIoPzpkZWZhdWx0fHNpemVvZnx0eXBlb2YpXFxzKlxcKFxccyooPyFcXHMpKSg/OlteKClcXHNdfFxccyg/IVxccyl8PDwwPj4pKig/PVxccypcXCkpLy5zb3VyY2UsIFtuZXN0ZWRSb3VuZF0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHR9LFxuXHRcdCdyZXR1cm4tdHlwZSc6IHtcblx0XHRcdC8vIEZvbzxCYXI+IEZvckJhcigpOyBGb28gSUZvby5CYXIoKSA9PiAwXG5cdFx0XHQvLyBpbnQgdGhpc1tpbnQgaW5kZXhdID0+IDA7IFQgSVJlYWRPbmx5TGlzdDxUPi50aGlzW2ludCBpbmRleF0gPT4gdGhpc1tpbmRleF07XG5cdFx0XHQvLyBpbnQgRm9vID0+IDA7IGludCBGb28geyBnZXQ7IHNldCB9ID0gMDtcblx0XHRcdHBhdHRlcm46IHJlKC88PDA+Pig/PVxccysoPzo8PDE+PlxccyooPzo9PnxbKHtdfFxcLlxccyp0aGlzXFxzKlxcWyl8dGhpc1xccypcXFspKS8uc291cmNlLCBbdHlwZUV4cHJlc3Npb24sIGlkZW50aWZpZXJdKSxcblx0XHRcdGluc2lkZTogdHlwZUluc2lkZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdjb25zdHJ1Y3Rvci1pbnZvY2F0aW9uJzoge1xuXHRcdFx0Ly8gbmV3IExpc3Q8Rm9vPEJhcltdPj4geyB9XG5cdFx0XHRwYXR0ZXJuOiByZSgvKFxcYm5ld1xccyspPDwwPj4oPz1cXHMqW1soe10pLy5zb3VyY2UsIFt0eXBlRXhwcmVzc2lvbl0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogdHlwZUluc2lkZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdC8qJ2V4cGxpY2l0LWltcGxlbWVudGF0aW9uJzoge1xuXHRcdFx0Ly8gaW50IElGb288Rm9vPi5CYXIgPT4gMDsgdm9pZCBJRm9vPEZvbzxGb28+Pi5Gb288VD4oKTtcblx0XHRcdHBhdHRlcm46IHJlcGxhY2UoL1xcYjw8MD4+KD89XFwuPDwxPj4pLywgY2xhc3NOYW1lLCBtZXRob2RPclByb3BlcnR5RGVjbGFyYXRpb24pLFxuXHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSwqL1xuXHRcdCdnZW5lcmljLW1ldGhvZCc6IHtcblx0XHRcdC8vIGZvbzxCYXI+KClcblx0XHRcdHBhdHRlcm46IHJlKC88PDA+Plxccyo8PDE+Pig/PVxccypcXCgpLy5zb3VyY2UsIFtuYW1lLCBnZW5lcmljXSksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogcmUoL148PDA+Pi8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoZ2VuZXJpYyksXG5cdFx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3R5cGUtbGlzdCc6IHtcblx0XHRcdC8vIFRoZSBsaXN0IG9mIHR5cGVzIGluaGVyaXRlZCBvciBvZiBnZW5lcmljIGNvbnN0cmFpbnRzXG5cdFx0XHQvLyBjbGFzcyBGb288Rj4gOiBCYXIsIElMaXN0PEZvb0Jhcj5cblx0XHRcdC8vIHdoZXJlIEYgOiBCYXIsIElMaXN0PGludD5cblx0XHRcdHBhdHRlcm46IHJlKFxuXHRcdFx0XHQvXFxiKCg/Ojw8MD4+XFxzKzw8MT4+fHJlY29yZFxccys8PDE+Plxccyo8PDU+Pnx3aGVyZVxccys8PDI+PilcXHMqOlxccyopKD86PDwzPj58PDw0Pj58PDwxPj5cXHMqPDw1Pj58PDw2Pj4pKD86XFxzKixcXHMqKD86PDwzPj58PDw0Pj58PDw2Pj4pKSooPz1cXHMqKD86d2hlcmV8W3s7XXw9PnwkKSkvLnNvdXJjZSxcblx0XHRcdFx0W3R5cGVEZWNsYXJhdGlvbktleXdvcmRzLCBnZW5lcmljTmFtZSwgbmFtZSwgdHlwZUV4cHJlc3Npb24sIGtleXdvcmRzLnNvdXJjZSwgbmVzdGVkUm91bmQsIC9cXGJuZXdcXHMqXFwoXFxzKlxcKS8uc291cmNlXVxuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3JlY29yZC1hcmd1bWVudHMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmUoLyheKD8hbmV3XFxzKlxcKCk8PDA+PlxccyopPDwxPj4vLnNvdXJjZSwgW2dlbmVyaWNOYW1lLCBuZXN0ZWRSb3VuZF0pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNzaGFycFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodHlwZUV4cHJlc3Npb24pLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ByZXByb2Nlc3Nvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopIy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gaGlnaGxpZ2h0IHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIGFzIGtleXdvcmRzXG5cdFx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygjKVxcYig/OmRlZmluZXxlbGlmfGVsc2V8ZW5kaWZ8ZW5kcmVnaW9ufGVycm9yfGlmfGxpbmV8bnVsbGFibGV8cHJhZ21hfHJlZ2lvbnx1bmRlZnx3YXJuaW5nKVxcYi8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIGF0dHJpYnV0ZXNcblx0dmFyIHJlZ3VsYXJTdHJpbmdPckNoYXJhY3RlciA9IHJlZ3VsYXJTdHJpbmcgKyAnfCcgKyBjaGFyYWN0ZXI7XG5cdHZhciByZWd1bGFyU3RyaW5nQ2hhcmFjdGVyT3JDb21tZW50ID0gcmVwbGFjZSgvXFwvKD8hWyovXSl8XFwvXFwvW15cXHJcXG5dKltcXHJcXG5dfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvfDw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nT3JDaGFyYWN0ZXJdKTtcblx0dmFyIHJvdW5kRXhwcmVzc2lvbiA9IG5lc3RlZChyZXBsYWNlKC9bXlwiJy8oKV18PDwwPj58XFwoPDxzZWxmPj4qXFwpLy5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nQ2hhcmFjdGVyT3JDb21tZW50XSksIDIpO1xuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2RvdG5ldC9jc2hhcnAvcHJvZ3JhbW1pbmctZ3VpZGUvY29uY2VwdHMvYXR0cmlidXRlcy8jYXR0cmlidXRlLXRhcmdldHNcblx0dmFyIGF0dHJUYXJnZXQgPSAvXFxiKD86YXNzZW1ibHl8ZXZlbnR8ZmllbGR8bWV0aG9kfG1vZHVsZXxwYXJhbXxwcm9wZXJ0eXxyZXR1cm58dHlwZSlcXGIvLnNvdXJjZTtcblx0dmFyIGF0dHIgPSByZXBsYWNlKC88PDA+Pig/OlxccypcXCg8PDE+PipcXCkpPy8uc291cmNlLCBbaWRlbnRpZmllciwgcm91bmRFeHByZXNzaW9uXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J2F0dHJpYnV0ZSc6IHtcblx0XHRcdC8vIEF0dHJpYnV0ZXNcblx0XHRcdC8vIFtGb29dLCBbRm9vKDEpLCBCYXIoMiwgUHJvcCA9IFwiZm9vXCIpXSwgW3JldHVybjogRm9vKDEpLCBCYXIoMildLCBbYXNzZW1ibHk6IEZvbyhCYXIpXVxuXHRcdFx0cGF0dGVybjogcmUoLygoPzpefFteXFxzXFx3Pik/XSlcXHMqXFxbXFxzKikoPzo8PDA+Plxccyo6XFxzKik/PDwxPj4oPzpcXHMqLFxccyo8PDE+PikqKD89XFxzKlxcXSkvLnNvdXJjZSwgW2F0dHJUYXJnZXQsIGF0dHJdKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RhcmdldCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvXjw8MD4+KD89XFxzKjopLy5zb3VyY2UsIFthdHRyVGFyZ2V0XSksXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0cmlidXRlLWFyZ3VtZW50cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvXFwoPDwwPj4qXFwpLy5zb3VyY2UsIFtyb3VuZEV4cHJlc3Npb25dKSxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnBcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGlkZW50aWZpZXIpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bOixdL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblxuXHQvLyBzdHJpbmcgaW50ZXJwb2xhdGlvblxuXHR2YXIgZm9ybWF0U3RyaW5nID0gLzpbXn1cXHJcXG5dKy8uc291cmNlO1xuXHQvLyBtdWx0aSBsaW5lXG5cdHZhciBtSW50ZXJwb2xhdGlvblJvdW5kID0gbmVzdGVkKHJlcGxhY2UoL1teXCInLygpXXw8PDA+PnxcXCg8PHNlbGY+PipcXCkvLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmdDaGFyYWN0ZXJPckNvbW1lbnRdKSwgMik7XG5cdHZhciBtSW50ZXJwb2xhdGlvbiA9IHJlcGxhY2UoL1xceyg/IVxceykoPzooPyFbfTpdKTw8MD4+KSo8PDE+Pj9cXH0vLnNvdXJjZSwgW21JbnRlcnBvbGF0aW9uUm91bmQsIGZvcm1hdFN0cmluZ10pO1xuXHQvLyBzaW5nbGUgbGluZVxuXHR2YXIgc0ludGVycG9sYXRpb25Sb3VuZCA9IG5lc3RlZChyZXBsYWNlKC9bXlwiJy8oKV18XFwvKD8hXFwqKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3w8PDA+PnxcXCg8PHNlbGY+PipcXCkvLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmdPckNoYXJhY3Rlcl0pLCAyKTtcblx0dmFyIHNJbnRlcnBvbGF0aW9uID0gcmVwbGFjZSgvXFx7KD8hXFx7KSg/Oig/IVt9Ol0pPDwwPj4pKjw8MT4+P1xcfS8uc291cmNlLCBbc0ludGVycG9sYXRpb25Sb3VuZCwgZm9ybWF0U3RyaW5nXSk7XG5cblx0ZnVuY3Rpb24gY3JlYXRlSW50ZXJwb2xhdGlvbkluc2lkZShpbnRlcnBvbGF0aW9uLCBpbnRlcnBvbGF0aW9uUm91bmQpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oKD86XnxbXntdKSg/Olxce1xceykqKTw8MD4+Ly5zb3VyY2UsIFtpbnRlcnBvbGF0aW9uXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdmb3JtYXQtc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheXFx7KD86KD8hW306XSk8PDA+PikqKTw8MT4+KD89XFx9JCkvLnNvdXJjZSwgW2ludGVycG9sYXRpb25Sb3VuZCwgZm9ybWF0U3RyaW5nXSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOi9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFx7fFxcfSQvLFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWNzaGFycCcsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnBcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ3N0cmluZycsIHtcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXlxcXFxdKSg/OlxcJEB8QFxcJClcIig/OlwiXCJ8XFxcXFtcXHNcXFNdfFxce1xce3w8PDA+PnxbXlxcXFx7XCJdKSpcIi8uc291cmNlLCBbbUludGVycG9sYXRpb25dKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNyZWF0ZUludGVycG9sYXRpb25JbnNpZGUobUludGVycG9sYXRpb24sIG1JbnRlcnBvbGF0aW9uUm91bmQpLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogcmUoLyhefFteQFxcXFxdKVxcJFwiKD86XFxcXC58XFx7XFx7fDw8MD4+fFteXFxcXFwie10pKlwiLy5zb3VyY2UsIFtzSW50ZXJwb2xhdGlvbl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY3JlYXRlSW50ZXJwb2xhdGlvbkluc2lkZShzSW50ZXJwb2xhdGlvbiwgc0ludGVycG9sYXRpb25Sb3VuZCksXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChjaGFyYWN0ZXIpLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZG90bmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmNzID0gUHJpc20ubGFuZ3VhZ2VzLmNzaGFycDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYXNwbmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHQncGFnZS1kaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLzwlXFxzKkAuKiU+Lyxcblx0XHRhbGlhczogJ3RhZycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncGFnZS1kaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC88JVxccypAXFxzKig/OkFzc2VtYmx5fENvbnRyb2x8SW1wbGVtZW50c3xJbXBvcnR8TWFzdGVyKD86VHlwZSk/fE91dHB1dENhY2hlfFBhZ2V8UHJldmlvdXNQYWdlVHlwZXxSZWZlcmVuY2V8UmVnaXN0ZXIpP3wlPi9pLFxuXHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5pbnNpZGVcblx0XHR9XG5cdH0sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLzwlLiolPi8sXG5cdFx0YWxpYXM6ICd0YWcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwlXFxzKj9bJD0lIzpdezAsMn18JT4vLFxuXHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuY3NoYXJwXG5cdFx0fVxuXHR9XG59KTtcbi8vIFJlZ2V4cCBjb3BpZWQgZnJvbSBwcmlzbS1tYXJrdXAsIHdpdGggYSBuZWdhdGl2ZSBsb29rLWFoZWFkIGFkZGVkXG5QcmlzbS5sYW5ndWFnZXMuYXNwbmV0LnRhZy5wYXR0ZXJuID0gLzwoPyElKVxcLz9bXlxccz5cXC9dKyg/OlxccytbXlxccz5cXC89XSsoPzo9KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKSk/KSpcXHMqXFwvPz4vO1xuXG4vLyBtYXRjaCBkaXJlY3RpdmVzIG9mIGF0dHJpYnV0ZSB2YWx1ZSBmb289XCI8JSBCYXIgJT5cIlxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnZGlyZWN0aXZlJzogUHJpc20ubGFuZ3VhZ2VzLmFzcG5ldFsnZGlyZWN0aXZlJ11cbn0sIFByaXNtLmxhbmd1YWdlcy5hc3BuZXQudGFnLmluc2lkZVsnYXR0ci12YWx1ZSddKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYXNwbmV0JywgJ2NvbW1lbnQnLCB7XG5cdCdhc3AtY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvPCUtLVtcXHNcXFNdKj8tLSU+Lyxcblx0XHRhbGlhczogWydhc3AnLCAnY29tbWVudCddXG5cdH1cbn0pO1xuXG4vLyBzY3JpcHQgcnVuYXQ9XCJzZXJ2ZXJcIiBjb250YWlucyBjc2hhcnAsIG5vdCBqYXZhc2NyaXB0XG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdhc3BuZXQnLCBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCA/ICdzY3JpcHQnIDogJ3RhZycsIHtcblx0J2FzcC1zY3JpcHQnOiB7XG5cdFx0cGF0dGVybjogLyg8c2NyaXB0KD89LipydW5hdD1bJ1wiXT9zZXJ2ZXJcXGIpW14+XSo+KVtcXHNcXFNdKj8oPz08XFwvc2NyaXB0PikvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiBbJ2FzcCcsICdzY3JpcHQnXSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnAgfHwge31cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5hc202NTAyID0ge1xuXHQnY29tbWVudCc6IC87LiovLFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXC5cXHcrKD89ICkvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdzdHJpbmcnOiAvKFtcIidgXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0J29wLWNvZGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFEQ3xBTkR8QVNMfEJDQ3xCQ1N8QkVRfEJJVHxCTUl8Qk5FfEJQTHxCUkt8QlZDfEJWU3xDTEN8Q0xEfENMSXxDTFZ8Q01QfENQWHxDUFl8REVDfERFWHxERVl8RU9SfElOQ3xJTlh8SU5ZfEpNUHxKU1J8TERBfExEWHxMRFl8TFNSfE5PUHxPUkF8UEhBfFBIUHxQTEF8UExQfFJPTHxST1J8UlRJfFJUU3xTQkN8U0VDfFNFRHxTRUl8U1RBfFNUWHxTVFl8VEFYfFRBWXxUU1h8VFhBfFRYU3xUWUF8YWRjfGFuZHxhc2x8YmNjfGJjc3xiZXF8Yml0fGJtaXxibmV8YnBsfGJya3xidmN8YnZzfGNsY3xjbGR8Y2xpfGNsdnxjbXB8Y3B4fGNweXxkZWN8ZGV4fGRleXxlb3J8aW5jfGlueHxpbnl8am1wfGpzcnxsZGF8bGR4fGxkeXxsc3J8bm9wfG9yYXxwaGF8cGhwfHBsYXxwbHB8cm9sfHJvcnxydGl8cnRzfHNiY3xzZWN8c2VkfHNlaXxzdGF8c3R4fHN0eXx0YXh8dGF5fHRzeHx0eGF8dHhzfHR5YSlcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2hleC1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/XFwkW1xcZGEtZl17MSw0fVxcYi9pLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnYmluYXJ5LW51bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvIz8lWzAxXStcXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnZGVjaW1hbC1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/XFxiXFxkK1xcYi8sXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW3h5YV1cXGIvaSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpLDpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFzbWF0bWVsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvOy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86UE9SVFtBLVpdfEREUltBLVpdfCg/OkREfFApW0EtWl0oPzpcXGR8WzAtMl1cXGR8M1swMV0pKVxcYi8sXG5cblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFwuXFx3Kyg/PSApLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnci1yZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxicig/OlxcZHxbMTJdXFxkfDNbMDFdKVxcYi8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J29wLWNvZGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFEQ3xBRER8QURJV3xBTkR8QU5ESXxBU1J8QkNMUnxCTER8QlJCQ3xCUkJTfEJSQ0N8QlJDU3xCUkVBS3xCUkVRfEJSR0V8QlJIQ3xCUkhTfEJSSUR8QlJJRXxCUkxPfEJSTFR8QlJNSXxCUk5FfEJSUEx8QlJTSHxCUlRDfEJSVFN8QlJWQ3xCUlZTfEJTRVR8QlNUfENBTEx8Q0JJfENCUnxDTEN8Q0xIfENMSXxDTE58Q0xSfENMU3xDTFR8Q0xWfENMWnxDT018Q1B8Q1BDfENQSXxDUFNFfERFQ3xERVN8RUlDQUxMfEVJSk1QfEVMUE18RU9SfEZNVUx8Rk1VTFN8Rk1VTFNVfElDQUxMfElKTVB8SU58SU5DfEpNUHxMQUN8TEFTfExBVHxMRHxMRFtBLVphLXowLTldfExQTXxMU0x8TFNSfE1PVnxNT1ZXfE1VTHxNVUxTfE1VTFNVfE5FR3xOT1B8T1J8T1JJfE9VVHxQT1B8UFVTSHxSQ0FMTHxSRVR8UkVUSXxSSk1QfFJPTHxST1J8U0JDfFNCQ0l8U0JJfFNCSUN8U0JJU3xTQklXfFNCUnxTQlJDfFNCUlN8U0VDfFNFSHxTRUl8U0VOfFNFUnxTRVN8U0VUfFNFVnxTRVp8U0xFRVB8U1BNfFNUfFNUW0EtWjAtOV18U1VCfFNVQkl8U1dBUHxUU1R8V0RSfFhDSHxhZGN8YWRkfGFkaXd8YW5kfGFuZGl8YXNyfGJjbHJ8YmxkfGJyYmN8YnJic3xicmNjfGJyY3N8YnJlYWt8YnJlcXxicmdlfGJyaGN8YnJoc3xicmlkfGJyaWV8YnJsb3xicmx0fGJybWl8YnJuZXxicnBsfGJyc2h8YnJ0Y3xicnRzfGJydmN8YnJ2c3xic2V0fGJzdHxjYWxsfGNiaXxjYnJ8Y2xjfGNsaHxjbGl8Y2xufGNscnxjbHN8Y2x0fGNsdnxjbHp8Y29tfGNwfGNwY3xjcGl8Y3BzZXxkZWN8ZGVzfGVpY2FsbHxlaWptcHxlbHBtfGVvcnxmbXVsfGZtdWxzfGZtdWxzdXxpY2FsbHxpam1wfGlufGluY3xqbXB8bGFjfGxhc3xsYXR8bGR8bGRbYS16MC05XXxscG18bHNsfGxzcnxtb3Z8bW92d3xtdWx8bXVsc3xtdWxzdXxuZWd8bm9wfG9yfG9yaXxvdXR8cG9wfHB1c2h8cmNhbGx8cmV0fHJldGl8cmptcHxyb2x8cm9yfHNiY3xzYmNpfHNiaXxzYmljfHNiaXN8c2Jpd3xzYnJ8c2JyY3xzYnJzfHNlY3xzZWh8c2VpfHNlbnxzZXJ8c2VzfHNldHxzZXZ8c2V6fHNsZWVwfHNwbXxzdHxzdFthLXpBLVowLTldfHN1YnxzdWJpfHN3YXB8dHN0fHdkcnx4Y2gpXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdoZXgtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcJFtcXGRhLWZdezIsNH1cXGIvaSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2JpbmFyeS1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/JVswMV0rXFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2RlY2ltYWwtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcYlxcZCtcXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQncmVnaXN0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYlthY3pudnNodGl4eV1cXGIvaSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvPj49P3w8PD0/fCZbJj1dP3xcXHxbXFx8PV0/fFstKyovJV4hPTw+P109Py8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCksOl0vXG59O1xuXG4vLyBOT1RFUyAtIGZvbGxvd3MgZmlyc3QtZmlyc3QgaGlnaGxpZ2h0IG1ldGhvZCwgYmxvY2sgaXMgbG9ja2VkIGFmdGVyIGhpZ2hsaWdodCwgZGlmZmVyZW50IGZyb20gU3ludGF4SGxcblByaXNtLmxhbmd1YWdlcy5hdXRvaG90a2V5ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKTsuKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKVxcL1xcKig/OltcXHJcXG5dKD8hWyBcXHRdKlxcKlxcLyl8W15cXHJcXG5dKSooPzpbXFxyXFxuXVsgXFx0XSpcXCpcXC8pPy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3RhZyc6IHtcblx0XHQvLyBsYWJlbHNcblx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKVteXFxzLGBcIjpdKyg/PTpbIFxcdF0qJCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiAvXCIoPzpbXlwiXFxuXFxyXXxcIlwiKSpcIi8sXG5cdCd2YXJpYWJsZSc6IC8lXFx3KyUvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdLT9cXGQrKT8vLFxuXHQnb3BlcmF0b3InOiAvXFw/fFxcL1xcLz89P3w6PXxcXHxbPXxdP3wmWz0mXT98XFwrWz0rXT98LVs9LV0/fFxcKls9Kl0/fDwoPzo8PT98Pnw9KT98Pj4/PT98Wy5eIT1+XT0/fFxcYig/OkFORHxOT1R8T1IpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBdXRvVHJpbXxCbG9ja0lucHV0fEJyZWFrfENsaWNrfENsaXBXYWl0fENvbnRpbnVlfENvbnRyb2x8Q29udHJvbENsaWNrfENvbnRyb2xGb2N1c3xDb250cm9sR2V0fENvbnRyb2xHZXRGb2N1c3xDb250cm9sR2V0UG9zfENvbnRyb2xHZXRUZXh0fENvbnRyb2xNb3ZlfENvbnRyb2xTZW5kfENvbnRyb2xTZW5kUmF3fENvbnRyb2xTZXRUZXh0fENvb3JkTW9kZXxDcml0aWNhbHxEZXRlY3RIaWRkZW5UZXh0fERldGVjdEhpZGRlbldpbmRvd3N8RHJpdmV8RHJpdmVHZXR8RHJpdmVTcGFjZUZyZWV8RW52QWRkfEVudkRpdnxFbnZHZXR8RW52TXVsdHxFbnZTZXR8RW52U3VifEVudlVwZGF0ZXxFeGl0fEV4aXRBcHB8RmlsZUFwcGVuZHxGaWxlQ29weXxGaWxlQ29weURpcnxGaWxlQ3JlYXRlRGlyfEZpbGVDcmVhdGVTaG9ydGN1dHxGaWxlRGVsZXRlfEZpbGVFbmNvZGluZ3xGaWxlR2V0QXR0cmlifEZpbGVHZXRTaG9ydGN1dHxGaWxlR2V0U2l6ZXxGaWxlR2V0VGltZXxGaWxlR2V0VmVyc2lvbnxGaWxlSW5zdGFsbHxGaWxlTW92ZXxGaWxlTW92ZURpcnxGaWxlUmVhZHxGaWxlUmVhZExpbmV8RmlsZVJlY3ljbGV8RmlsZVJlY3ljbGVFbXB0eXxGaWxlUmVtb3ZlRGlyfEZpbGVTZWxlY3RGaWxlfEZpbGVTZWxlY3RGb2xkZXJ8RmlsZVNldEF0dHJpYnxGaWxlU2V0VGltZXxGb3JtYXRUaW1lfEdldEtleVN0YXRlfEdvc3VifEdvdG98R3JvdXBBY3RpdmF0ZXxHcm91cEFkZHxHcm91cENsb3NlfEdyb3VwRGVhY3RpdmF0ZXxHdWl8R3VpQ29udHJvbHxHdWlDb250cm9sR2V0fEhvdGtleXxJbWFnZVNlYXJjaHxJbmlEZWxldGV8SW5pUmVhZHxJbmlXcml0ZXxJbnB1dHxJbnB1dEJveHxLZXlXYWl0fExpc3RIb3RrZXlzfExpc3RMaW5lc3xMaXN0VmFyc3xMb29wfE1lbnV8TW91c2VDbGlja3xNb3VzZUNsaWNrRHJhZ3xNb3VzZUdldFBvc3xNb3VzZU1vdmV8TXNnQm94fE9uRXhpdHxPdXRwdXREZWJ1Z3xQYXVzZXxQaXhlbEdldENvbG9yfFBpeGVsU2VhcmNofFBvc3RNZXNzYWdlfFByb2Nlc3N8UHJvZ3Jlc3N8UmFuZG9tfFJlZ0RlbGV0ZXxSZWdSZWFkfFJlZ1dyaXRlfFJlbG9hZHxSZXBlYXR8UmV0dXJufFJ1bnxSdW5Bc3xSdW5XYWl0fFNlbmR8U2VuZEV2ZW50fFNlbmRJbnB1dHxTZW5kTWVzc2FnZXxTZW5kTW9kZXxTZW5kUGxheXxTZW5kUmF3fFNldEJhdGNoTGluZXN8U2V0Q2Fwc2xvY2tTdGF0ZXxTZXRDb250cm9sRGVsYXl8U2V0RGVmYXVsdE1vdXNlU3BlZWR8U2V0RW52fFNldEZvcm1hdHxTZXRLZXlEZWxheXxTZXRNb3VzZURlbGF5fFNldE51bWxvY2tTdGF0ZXxTZXRSZWdWaWV3fFNldFNjcm9sbExvY2tTdGF0ZXxTZXRTdG9yZUNhcHNsb2NrTW9kZXxTZXRUaW1lcnxTZXRUaXRsZU1hdGNoTW9kZXxTZXRXaW5EZWxheXxTZXRXb3JraW5nRGlyfFNodXRkb3dufFNsZWVwfFNvcnR8U291bmRCZWVwfFNvdW5kR2V0fFNvdW5kR2V0V2F2ZVZvbHVtZXxTb3VuZFBsYXl8U291bmRTZXR8U291bmRTZXRXYXZlVm9sdW1lfFNwbGFzaEltYWdlfFNwbGFzaFRleHRPZmZ8U3BsYXNoVGV4dE9ufFNwbGl0UGF0aHxTdGF0dXNCYXJHZXRUZXh0fFN0YXR1c0JhcldhaXR8U3RyaW5nQ2FzZVNlbnNlfFN0cmluZ0dldFBvc3xTdHJpbmdMZWZ0fFN0cmluZ0xlbnxTdHJpbmdMb3dlcnxTdHJpbmdNaWR8U3RyaW5nUmVwbGFjZXxTdHJpbmdSaWdodHxTdHJpbmdTcGxpdHxTdHJpbmdUcmltTGVmdHxTdHJpbmdUcmltUmlnaHR8U3RyaW5nVXBwZXJ8U3VzcGVuZHxTeXNHZXR8VGhyZWFkfFRvb2xUaXB8VHJhbnNmb3JtfFRyYXlUaXB8VVJMRG93bmxvYWRUb0ZpbGV8V2luQWN0aXZhdGV8V2luQWN0aXZhdGVCb3R0b218V2luQ2xvc2V8V2luR2V0fFdpbkdldEFjdGl2ZVN0YXRzfFdpbkdldEFjdGl2ZVRpdGxlfFdpbkdldENsYXNzfFdpbkdldFBvc3xXaW5HZXRUZXh0fFdpbkdldFRpdGxlfFdpbkhpZGV8V2luS2lsbHxXaW5NYXhpbWl6ZXxXaW5NZW51U2VsZWN0SXRlbXxXaW5NaW5pbWl6ZXxXaW5NaW5pbWl6ZUFsbHxXaW5NaW5pbWl6ZUFsbFVuZG98V2luTW92ZXxXaW5SZXN0b3JlfFdpblNldHxXaW5TZXRUaXRsZXxXaW5TaG93fFdpbldhaXR8V2luV2FpdEFjdGl2ZXxXaW5XYWl0Q2xvc2V8V2luV2FpdE5vdEFjdGl2ZSlcXGIvaSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHR9LFxuXG5cdCdjb25zdGFudCc6IC9cXGIoPzphX2Foa3BhdGh8YV9haGt2ZXJzaW9ufGFfYXBwZGF0YXxhX2FwcGRhdGFjb21tb258YV9hdXRvdHJpbXxhX2JhdGNobGluZXN8YV9jYXJldHh8YV9jYXJldHl8YV9jb21wdXRlcm5hbWV8YV9jb250cm9sZGVsYXl8YV9jdXJzb3J8YV9kZHxhX2RkZHxhX2RkZGR8YV9kZWZhdWx0bW91c2VzcGVlZHxhX2Rlc2t0b3B8YV9kZXNrdG9wY29tbW9ufGFfZGV0ZWN0aGlkZGVudGV4dHxhX2RldGVjdGhpZGRlbndpbmRvd3N8YV9lbmRjaGFyfGFfZXZlbnRpbmZvfGFfZXhpdHJlYXNvbnxhX2ZpbGVlbmNvZGluZ3xhX2Zvcm1hdGZsb2F0fGFfZm9ybWF0aW50ZWdlcnxhX2d1aXxhX2d1aWNvbnRyb2x8YV9ndWljb250cm9sZXZlbnR8YV9ndWlldmVudHxhX2d1aWhlaWdodHxhX2d1aXdpZHRofGFfZ3VpeHxhX2d1aXl8YV9ob3VyfGFfaWNvbmZpbGV8YV9pY29uaGlkZGVufGFfaWNvbm51bWJlcnxhX2ljb250aXB8YV9pbmRleHxhX2lwYWRkcmVzczF8YV9pcGFkZHJlc3MyfGFfaXBhZGRyZXNzM3xhX2lwYWRkcmVzczR8YV9pczY0Yml0b3N8YV9pc2FkbWlufGFfaXNjb21waWxlZHxhX2lzY3JpdGljYWx8YV9pc3BhdXNlZHxhX2lzc3VzcGVuZGVkfGFfaXN1bmljb2RlfGFfa2V5ZGVsYXl8YV9sYW5ndWFnZXxhX2xhc3RlcnJvcnxhX2xpbmVmaWxlfGFfbGluZW51bWJlcnxhX2xvb3BmaWVsZHxhX2xvb3BmaWxlYXR0cmlifGFfbG9vcGZpbGVkaXJ8YV9sb29wZmlsZWV4dHxhX2xvb3BmaWxlZnVsbHBhdGh8YV9sb29wZmlsZWxvbmdwYXRofGFfbG9vcGZpbGVuYW1lfGFfbG9vcGZpbGVzaG9ydG5hbWV8YV9sb29wZmlsZXNob3J0cGF0aHxhX2xvb3BmaWxlc2l6ZXxhX2xvb3BmaWxlc2l6ZWtifGFfbG9vcGZpbGVzaXplbWJ8YV9sb29wZmlsZXRpbWVhY2Nlc3NlZHxhX2xvb3BmaWxldGltZWNyZWF0ZWR8YV9sb29wZmlsZXRpbWVtb2RpZmllZHxhX2xvb3ByZWFkbGluZXxhX2xvb3ByZWdrZXl8YV9sb29wcmVnbmFtZXxhX2xvb3ByZWdzdWJrZXl8YV9sb29wcmVndGltZW1vZGlmaWVkfGFfbG9vcHJlZ3R5cGV8YV9tZGF5fGFfbWlufGFfbW18YV9tbW18YV9tbW1tfGFfbW9ufGFfbW91c2VkZWxheXxhX21zZWN8YV9teWRvY3VtZW50c3xhX25vd3xhX25vd3V0Y3xhX251bWJhdGNobGluZXN8YV9vc3R5cGV8YV9vc3ZlcnNpb258YV9wcmlvcmhvdGtleXxhX3ByaW9ya2V5fGFfcHJvZ3JhbWZpbGVzfGFfcHJvZ3JhbXN8YV9wcm9ncmFtc2NvbW1vbnxhX3B0cnNpemV8YV9yZWd2aWV3fGFfc2NyZWVuZHBpfGFfc2NyZWVuaGVpZ2h0fGFfc2NyZWVud2lkdGh8YV9zY3JpcHRkaXJ8YV9zY3JpcHRmdWxscGF0aHxhX3NjcmlwdGh3bmR8YV9zY3JpcHRuYW1lfGFfc2VjfGFfc3BhY2V8YV9zdGFydG1lbnV8YV9zdGFydG1lbnVjb21tb258YV9zdGFydHVwfGFfc3RhcnR1cGNvbW1vbnxhX3N0cmluZ2Nhc2VzZW5zZXxhX3RhYnxhX3RlbXB8YV90aGlzZnVuY3xhX3RoaXNob3RrZXl8YV90aGlzbGFiZWx8YV90aGlzbWVudXxhX3RoaXNtZW51aXRlbXxhX3RoaXNtZW51aXRlbXBvc3xhX3RpY2tjb3VudHxhX3RpbWVpZGxlfGFfdGltZWlkbGVwaHlzaWNhbHxhX3RpbWVzaW5jZXByaW9yaG90a2V5fGFfdGltZXNpbmNldGhpc2hvdGtleXxhX3RpdGxlbWF0Y2htb2RlfGFfdGl0bGVtYXRjaG1vZGVzcGVlZHxhX3VzZXJuYW1lfGFfd2RheXxhX3dpbmRlbGF5fGFfd2luZGlyfGFfd29ya2luZ2RpcnxhX3lkYXl8YV95ZWFyfGFfeXdlZWt8YV95eXl5fGNsaXBib2FyZHxjbGlwYm9hcmRhbGx8Y29tc3BlY3xlcnJvcmxldmVsfHByb2dyYW1maWxlcylcXGIvaSxcblxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhc2N8YXNpbnxhdGFufGNlaWx8Y2hyfGNsYXNzfGNvbW9iamFjdGl2ZXxjb21vYmphcnJheXxjb21vYmpjb25uZWN0fGNvbW9iamNyZWF0ZXxjb21vYmplcnJvcnxjb21vYmpmbGFnc3xjb21vYmpnZXR8Y29tb2JqcXVlcnl8Y29tb2JqdHlwZXxjb21vYmp2YWx1ZXxjb3N8ZGxsY2FsbHxleHB8ZmlsZWV4aXN0fEZpbGVvcGVufGZsb29yfGZvcm1hdHxpbF9hZGR8aWxfY3JlYXRlfGlsX2Rlc3Ryb3l8aW5zdHJ8aXNmdW5jfGlzbGFiZWx8SXNPYmplY3R8bG58bG9nfGx0cmltfGx2X2FkZHxsdl9kZWxldGV8bHZfZGVsZXRlY29sfGx2X2dldGNvdW50fGx2X2dldG5leHR8bHZfZ2V0dGV4dHxsdl9pbnNlcnR8bHZfaW5zZXJ0Y29sfGx2X21vZGlmeXxsdl9tb2RpZnljb2x8bHZfc2V0aW1hZ2VsaXN0fG1vZHxudW1nZXR8bnVtcHV0fG9ubWVzc2FnZXxyZWdleG1hdGNofHJlZ2V4cmVwbGFjZXxyZWdpc3RlcmNhbGxiYWNrfHJvdW5kfHJ0cmltfHNiX3NldGljb258c2Jfc2V0cGFydHN8c2Jfc2V0dGV4dHxzaW58c3FydHxzdHJsZW58c3RycmVwbGFjZXxzdHJzcGxpdHxzdWJzdHJ8dGFufHR2X2FkZHx0dl9kZWxldGV8dHZfZ2V0fHR2X2dldGNoaWxkfHR2X2dldGNvdW50fHR2X2dldG5leHR8dHZfZ2V0cGFyZW50fHR2X2dldHByZXZ8dHZfZ2V0c2VsZWN0aW9ufHR2X2dldHRleHR8dHZfbW9kaWZ5fHZhcnNldGNhcGFjaXR5fHdpbmFjdGl2ZXx3aW5leGlzdHxfX0NhbGx8X19HZXR8X19OZXd8X19TZXQpXFxiL2ksXG5cblx0J3N5bWJvbCc6IC9cXGIoPzphbHR8YWx0ZG93bnxhbHR1cHxhcHBza2V5fGJhY2tzcGFjZXxicm93c2VyX2JhY2t8YnJvd3Nlcl9mYXZvcml0ZXN8YnJvd3Nlcl9mb3J3YXJkfGJyb3dzZXJfaG9tZXxicm93c2VyX3JlZnJlc2h8YnJvd3Nlcl9zZWFyY2h8YnJvd3Nlcl9zdG9wfGJzfGNhcHNsb2NrfGN0cmx8Y3RybGJyZWFrfGN0cmxkb3dufGN0cmx1cHxkZWx8ZGVsZXRlfGRvd258ZW5kfGVudGVyfGVzY3xlc2NhcGV8ZjF8ZjEwfGYxMXxmMTJ8ZjEzfGYxNHxmMTV8ZjE2fGYxN3xmMTh8ZjE5fGYyfGYyMHxmMjF8ZjIyfGYyM3xmMjR8ZjN8ZjR8ZjV8ZjZ8Zjd8Zjh8Zjl8aG9tZXxpbnN8aW5zZXJ0fGpveTF8am95MTB8am95MTF8am95MTJ8am95MTN8am95MTR8am95MTV8am95MTZ8am95MTd8am95MTh8am95MTl8am95Mnxqb3kyMHxqb3kyMXxqb3kyMnxqb3kyM3xqb3kyNHxqb3kyNXxqb3kyNnxqb3kyN3xqb3kyOHxqb3kyOXxqb3kzfGpveTMwfGpveTMxfGpveTMyfGpveTR8am95NXxqb3k2fGpveTd8am95OHxqb3k5fGpveWF4ZXN8am95YnV0dG9uc3xqb3lpbmZvfGpveW5hbWV8am95cG92fGpveXJ8am95dXxqb3l2fGpveXh8am95eXxqb3l6fGxhbHR8bGF1bmNoX2FwcDF8bGF1bmNoX2FwcDJ8bGF1bmNoX21haWx8bGF1bmNoX21lZGlhfGxidXR0b258bGNvbnRyb2x8bGN0cmx8bGVmdHxsc2hpZnR8bHdpbnxsd2luZG93bnxsd2ludXB8bWJ1dHRvbnxtZWRpYV9uZXh0fG1lZGlhX3BsYXlfcGF1c2V8bWVkaWFfcHJldnxtZWRpYV9zdG9wfG51bWxvY2t8bnVtcGFkMHxudW1wYWQxfG51bXBhZDJ8bnVtcGFkM3xudW1wYWQ0fG51bXBhZDV8bnVtcGFkNnxudW1wYWQ3fG51bXBhZDh8bnVtcGFkOXxudW1wYWRhZGR8bnVtcGFkY2xlYXJ8bnVtcGFkZGVsfG51bXBhZGRpdnxudW1wYWRkb3R8bnVtcGFkZG93bnxudW1wYWRlbmR8bnVtcGFkZW50ZXJ8bnVtcGFkaG9tZXxudW1wYWRpbnN8bnVtcGFkbGVmdHxudW1wYWRtdWx0fG51bXBhZHBnZG58bnVtcGFkcGd1cHxudW1wYWRyaWdodHxudW1wYWRzdWJ8bnVtcGFkdXB8cGdkbnxwZ3VwfHByaW50c2NyZWVufHJhbHR8cmJ1dHRvbnxyY29udHJvbHxyY3RybHxyaWdodHxyc2hpZnR8cndpbnxyd2luZG93bnxyd2ludXB8c2Nyb2xsbG9ja3xzaGlmdHxzaGlmdGRvd258c2hpZnR1cHxzcGFjZXx0YWJ8dXB8dm9sdW1lX2Rvd258dm9sdW1lX211dGV8dm9sdW1lX3VwfHdoZWVsZG93bnx3aGVlbGxlZnR8d2hlZWxyaWdodHx3aGVlbHVwfHhidXR0b24xfHhidXR0b24yKVxcYi9pLFxuXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyNbYS16XStcXGIvaSxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblxuXHQna2V5d29yZCc6IC9cXGIoPzpBYm9ydHxBYm92ZU5vcm1hbHxBZGR8YWhrX2NsYXNzfGFoa19leGV8YWhrX2dyb3VwfGFoa19pZHxhaGtfcGlkfEFsbHxBbG51bXxBbHBoYXxBbHRTdWJtaXR8QWx0VGFifEFsdFRhYkFuZE1lbnV8QWx0VGFiTWVudXxBbHRUYWJNZW51RGlzbWlzc3xBbHdheXNPblRvcHxBdXRvU2l6ZXxCYWNrZ3JvdW5kfEJhY2tncm91bmRUcmFuc3xCZWxvd05vcm1hbHxiZXR3ZWVufEJpdEFuZHxCaXROb3R8Qml0T3J8Qml0U2hpZnRMZWZ0fEJpdFNoaWZ0UmlnaHR8Qml0WE9yfEJvbGR8Qm9yZGVyfEJ1dHRvbnxCeVJlZnxDYXRjaHxDaGVja2JveHxDaGVja2VkfENoZWNrZWRHcmF5fENob29zZXxDaG9vc2VTdHJpbmd8Q2xvc2V8Q29sb3J8Q29tYm9Cb3h8Q29udGFpbnN8Q29udHJvbExpc3R8Q291bnR8RGF0ZXxEYXRlVGltZXxEYXlzfERETHxEZWZhdWx0fERlbGV0ZUFsbHxEZWxpbWl0ZXJ8RGVyZWZ8RGVzdHJveXxEaWdpdHxEaXNhYmxlfERpc2FibGVkfERyb3BEb3duTGlzdHxFZGl0fEVqZWN0fEVsc2V8RW5hYmxlfEVuYWJsZWR8RXJyb3J8RXhpc3R8RXhwYW5kfEV4U3R5bGV8RmlsZVN5c3RlbXxGaW5hbGx5fEZpcnN0fEZsYXNofEZsb2F0fEZsb2F0RmFzdHxGb2N1c3xGb250fGZvcnxnbG9iYWx8R3JpZHxHcm91cHxHcm91cEJveHxHdWlDbG9zZXxHdWlDb250ZXh0TWVudXxHdWlEcm9wRmlsZXN8R3VpRXNjYXBlfEd1aVNpemV8SGRyfEhpZGRlbnxIaWRlfEhpZ2h8SEtDQ3xIS0NSfEhLQ1V8SEtFWV9DTEFTU0VTX1JPT1R8SEtFWV9DVVJSRU5UX0NPTkZJR3xIS0VZX0NVUlJFTlRfVVNFUnxIS0VZX0xPQ0FMX01BQ0hJTkV8SEtFWV9VU0VSU3xIS0xNfEhLVXxIb3Vyc3xIU2Nyb2xsfEljb258SWNvblNtYWxsfElEfElETGFzdHxJZnxJZkVxdWFsfElmRXhpc3R8SWZHcmVhdGVyfElmR3JlYXRlck9yRXF1YWx8SWZJblN0cmluZ3xJZkxlc3N8SWZMZXNzT3JFcXVhbHxJZk1zZ0JveHxJZk5vdEVxdWFsfElmTm90RXhpc3R8SWZOb3RJblN0cmluZ3xJZldpbkFjdGl2ZXxJZldpbkV4aXN0fElmV2luTm90QWN0aXZlfElmV2luTm90RXhpc3R8SWdub3JlfEltYWdlTGlzdHxpbnxJbnRlZ2VyfEludGVnZXJGYXN0fEludGVycnVwdHxpc3xpdGFsaWN8Sm9pbnxMYWJlbHxMYXN0Rm91bmR8TGFzdEZvdW5kRXhpc3R8TGltaXR8TGluZXN8TGlzdHxMaXN0Qm94fExpc3RWaWV3fGxvY2FsfExvY2t8TG9nb2ZmfExvd3xMb3dlcnxMb3dlcmNhc2V8TWFpbldpbmRvd3xNYXJnaW58TWF4aW1pemV8TWF4aW1pemVCb3h8TWF4U2l6ZXxNaW5pbWl6ZXxNaW5pbWl6ZUJveHxNaW5NYXh8TWluU2l6ZXxNaW51dGVzfE1vbnRoQ2FsfE1vdXNlfE1vdmV8TXVsdGl8TkF8Tm98Tm9BY3RpdmF0ZXxOb0RlZmF1bHR8Tm9IaWRlfE5vSWNvbnxOb01haW5XaW5kb3d8bm9ybXxOb3JtYWx8Tm9Tb3J0fE5vU29ydEhkcnxOb1N0YW5kYXJkfE5vdHxOb1RhYnxOb1RpbWVyc3xOdW1iZXJ8T2ZmfE9rfE9ufE93bkRpYWxvZ3N8T3duZXJ8UGFyc2V8UGFzc3dvcmR8UGljdHVyZXxQaXhlbHxQb3N8UG93fFByaW9yaXR5fFByb2Nlc3NOYW1lfFJhZGlvfFJhbmdlfFJlYWR8UmVhZE9ubHl8UmVhbHRpbWV8UmVkcmF3fFJlZ2lvbnxSRUdfQklOQVJZfFJFR19EV09SRHxSRUdfRVhQQU5EX1NafFJFR19NVUxUSV9TWnxSRUdfU1p8UmVsYXRpdmV8UmVuYW1lfFJlcG9ydHxSZXNpemV8UmVzdG9yZXxSZXRyeXxSR0J8U2NyZWVufFNlY29uZHN8U2VjdGlvbnxTZXJpYWx8U2V0TGFiZWx8U2hpZnRBbHRUYWJ8U2hvd3xTaW5nbGV8U2xpZGVyfFNvcnREZXNjfFN0YW5kYXJkfHN0YXRpY3xTdGF0dXN8U3RhdHVzQmFyfFN0YXR1c0NEfHN0cmlrZXxTdHlsZXxTdWJtaXR8U3lzTWVudXxUYWIyfFRhYlN0b3B8VGV4dHxUaGVtZXxUaHJvd3xUaWxlfFRvZ2dsZUNoZWNrfFRvZ2dsZUVuYWJsZXxUb29sV2luZG93fFRvcHxUb3Btb3N0fFRyYW5zQ29sb3J8VHJhbnNwYXJlbnR8VHJheXxUcmVlVmlld3xUcnl8VHJ5QWdhaW58VHlwZXxVbkNoZWNrfHVuZGVybGluZXxVbmljb2RlfFVubG9ja3xVbnRpbHxVcERvd258VXBwZXJ8VXBwZXJjYXNlfFVzZUVycm9yTGV2ZWx8VmlzfFZpc0ZpcnN0fFZpc2libGV8VlNjcm9sbHxXYWl0fFdhaXRDbG9zZXxXYW50Q3RybEF8V2FudEYyfFdhbnRSZXR1cm58V2hpbGV8V3JhcHxYZGlnaXR8eG18eHB8eHN8WWVzfHltfHlwfHlzKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvW14oKTsgXFx0LFxcbisqXFwtPT8+OlxcXFxcXC88JiVcXFtcXF1dKyg/PVxcKCkvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpOixdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmF1dG9pdCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0LzsuKi8sXG5cdFx0e1xuXHRcdFx0Ly8gVGhlIG11bHRpLWxpbmUgY29tbWVudHMgZGVsaW1pdGVycyBjYW4gYWN0dWFsbHkgYmUgY29tbWVudGVkIG91dCB3aXRoIFwiO1wiXG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSMoPzpjb21tZW50cy1zdGFydHxjcylbXFxzXFxTXSo/XlsgXFx0XSojKD86Y2V8Y29tbWVudHMtZW5kKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3VybCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qI2luY2x1ZGVcXHMrKSg/OjxbXlxcclxcbj5dKz58XCJbXlxcclxcblwiXStcIikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXDFcXDF8KD8hXFwxKVteXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvKFslJEBdKVxcdytcXDEvXG5cdFx0fVxuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopI1tcXHctXSsvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0Ly8gVmFyaWFibGVzIGFuZCBtYWNyb3Ncblx0J3ZhcmlhYmxlJzogL1skQF1cXHcrLyxcblx0J2tleXdvcmQnOiAvXFxiKD86Q2FzZXxDb25zdHxDb250aW51ZSg/OkNhc2V8TG9vcCl8RGVmYXVsdHxEaW18RG98RWxzZSg/OklmKT98RW5kKD86RnVuY3xJZnxTZWxlY3R8U3dpdGNofFdpdGgpfEVudW18RXhpdCg/Okxvb3ApP3xGb3J8RnVuY3xHbG9iYWx8SWZ8SW58TG9jYWx8TmV4dHxOdWxsfFJlRGltfFNlbGVjdHxTdGF0aWN8U3RlcHxTd2l0Y2h8VGhlbnxUb3xVbnRpbHxWb2xhdGlsZXxXRW5kfFdoaWxlfFdpdGgpXFxiL2ksXG5cdCdudW1iZXInOiAvXFxiKD86MHhbXFxkYS1mXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8VHJ1ZSlcXGIvaSxcblx0J29wZXJhdG9yJzogLzxbPT5dP3xbLSsqXFwvPSY+XT0/fFs/Xl18XFxiKD86QW5kfE5vdHxPcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKS4sOl0vXG59O1xuXG4vLyBodHRwOi8vYXZpc3ludGgubmwvaW5kZXgucGhwL1RoZV9mdWxsX0F2aVN5bnRoX2dyYW1tYXJcbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRmdW5jdGlvbiByZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50cykge1xuXHRcdHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoLzw8KFxcZCspPj4vZywgZnVuY3Rpb24gKG0sIGluZGV4KSB7XG5cdFx0XHRyZXR1cm4gcmVwbGFjZW1lbnRzWytpbmRleF07XG5cdFx0fSk7XG5cdH1cblxuXHRmdW5jdGlvbiByZShwYXR0ZXJuLCByZXBsYWNlbWVudHMsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChyZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50cyksIGZsYWdzIHx8ICcnKTtcblx0fVxuXG5cdHZhciB0eXBlcyA9IC9ib29sfGNsaXB8ZmxvYXR8aW50fHN0cmluZ3x2YWwvLnNvdXJjZTtcblx0dmFyIGludGVybmFscyA9IFtcblx0XHQvLyBib29sc1xuXHRcdC9pcyg/OmJvb2x8Y2xpcHxmbG9hdHxpbnR8c3RyaW5nKXxkZWZpbmVkfCg/Oig/OmludGVybmFsKT9mdW5jdGlvbnx2YXIpP2V4aXN0cz8vLnNvdXJjZSxcblx0XHQvLyBjb250cm9sXG5cdFx0L2FwcGx5fGFzc2VydHxkZWZhdWx0fGV2YWx8aW1wb3J0fG5vcHxzZWxlY3R8dW5kZWZpbmVkLy5zb3VyY2UsXG5cdFx0Ly8gZ2xvYmFsXG5cdFx0L29wdF8oPzphbGxvd2Zsb2F0YXVkaW98YXZpcGFkc2NhbmxpbmVzfGR3Y2hhbm5lbG1hc2t8ZW5hYmxlXyg/OmI2NGF8cGxhbmFydG9wYWNrZWRyZ2J8djIxMHx5M18xMF8xMHx5M18xMF8xNil8dXNld2F2ZWV4dGVuc2libGV8dmR1YnBsYW5hcmhhY2spfHNldCg/OmNhY2hlbW9kZXxtYXhjcHV8bWVtb3J5bWF4fHBsYW5hcmxlZ2FjeWFsaWdubWVudHx3b3JraW5nZGlyKS8uc291cmNlLFxuXHRcdC8vIGNvbnZcblx0XHQvaGV4KD86dmFsdWUpP3x2YWx1ZS8uc291cmNlLFxuXHRcdC8vIG51bWVyaWNcblx0XHQvYWJzfGNlaWx8Y29udGludWVkKD86ZGVub21pbmF0b3J8bnVtZXJhdG9yKT98ZXhwfGZsb29yfGZtb2R8ZnJhY3xsb2coPzoxMCk/fG1heHxtaW58bXVsZGl2fHBpfHBvd3xyYW5kfHJvdW5kfHNpZ258c3BsaW5lfHNxcnQvLnNvdXJjZSxcblx0XHQvLyB0cmlnXG5cdFx0L2E/c2luaD98YT9jb3NoP3xhP3RhblsyaF0/Ly5zb3VyY2UsXG5cdFx0Ly8gYml0XG5cdFx0Lyg/OmJpdCg/OmFuZHxub3R8eD9vcnxbbHJdP3NoaWZ0W2FzbHVdP3xzaFtscl18c2FbbHJdfFtscl1yb3RhdGVsP3xyb1tybF18dGU/c3R8c2V0KD86Y291bnQpP3xjbCg/OmVhKT9yfGNoKD86YW4pP2dlPykpLy5zb3VyY2UsXG5cdFx0Ly8gcnVudGltZVxuXHRcdC9hdmVyYWdlKD86W2Jncl18Y2hyb21hW3V2XXxsdW1hKXwoPzpbcmdiXXxjaHJvbWFbdXZdfGx1bWF8cmdifFt5dXZdKD89ZGlmZmVyZW5jZSg/OmZyb21wcmV2aW91c3x0b25leHQpKSlkaWZmZXJlbmNlKD86ZnJvbXByZXZpb3VzfHRvbmV4dCk/fFt5dXZyZ2JdcGxhbmUoPzptZWRpYW58bWlufG1heHxtaW5tYXhkaWZmZXJlbmNlKS8uc291cmNlLFxuXHRcdC8vIHNjcmlwdFxuXHRcdC9nZXRwcm9jZXNzaW5mb3xsb2dtc2d8c2NyaXB0KD86ZGlyKD86dXRmOCk/fGZpbGUoPzp1dGY4KT98bmFtZSg/OnV0ZjgpPyl8c2V0bG9ncGFyYW1zLy5zb3VyY2UsXG5cdFx0Ly8gc3RyaW5nXG5cdFx0L2NocnwoPzpmaWxsfGZpbmR8bGVmdHxtaWR8cmVwbGFjZXxyZXZ8cmlnaHQpc3RyfGZvcm1hdHxbbHVdY2FzZXxvcmR8c3RyKD86Y21waT98ZnJvbXV0Zjh8bGVufHRvdXRmOCl8dGltZXx0cmltKD86YWxsfGxlZnR8cmlnaHQpLy5zb3VyY2UsXG5cdFx0Ly8gdmVyc2lvblxuXHRcdC9pc3ZlcnNpb25vcmdyZWF0ZXJ8dmVyc2lvbig/Om51bWJlcnxzdHJpbmcpLy5zb3VyY2UsXG5cdFx0Ly8gaGVscGVyXG5cdFx0L2J1aWxkcGl4ZWx0eXBlfGNvbG9yc3BhY2VuYW1ldG9waXhlbHR5cGUvLnNvdXJjZSxcblx0XHQvLyBhdnNwbHVzXG5cdFx0L2FkZGF1dG9sb2FkZGlyfG9uKD86Y3B1fGN1ZGEpfHByZWZldGNofHNldGZpbHRlcm10bW9kZS8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgcHJvcGVydGllcyA9IFtcblx0XHQvLyBjb250ZW50XG5cdFx0L2hhcyg/OmF1ZGlvfHZpZGVvKS8uc291cmNlLFxuXHRcdC8vIHJlc29sdXRpb25cblx0XHQvaGVpZ2h0fHdpZHRoLy5zb3VyY2UsXG5cdFx0Ly8gZnJhbWVyYXRlXG5cdFx0L2ZyYW1lKD86Y291bnR8cmF0ZSl8ZnJhbWVyYXRlKD86ZGVub21pbmF0b3J8bnVtZXJhdG9yKS8uc291cmNlLFxuXHRcdC8vIGludGVybGFjaW5nXG5cdFx0L2dldHBhcml0eXxpcyg/OmZpZWxkfGZyYW1lKWJhc2VkLy5zb3VyY2UsXG5cdFx0Ly8gY29sb3IgZm9ybWF0XG5cdFx0L2JpdHNwZXJjb21wb25lbnR8Y29tcG9uZW50c2l6ZXxoYXNhbHBoYXxpcyg/OnBsYW5hcig/OnJnYmE/KT98aW50ZXJsZWF2ZWR8cmdiKD86MjR8MzJ8NDh8NjQpP3x5KD86OHx1KD86dmE/fHkyKSk/fHl2KD86MTJ8MTZ8MjR8NDExKXw0MjB8NDIyfDQ0NHxwYWNrZWRyZ2IpfG51bWNvbXBvbmVudHN8cGl4ZWx0eXBlLy5zb3VyY2UsXG5cdFx0Ly8gYXVkaW9cblx0XHQvYXVkaW8oPzpiaXRzfGNoYW5uZWxzfGR1cmF0aW9ufGxlbmd0aCg/Oltmc118aGl8bG8pP3xyYXRlKXxpc2F1ZGlvKD86ZmxvYXR8aW50KS8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgZmlsdGVycyA9IFtcblx0XHQvLyBzb3VyY2Vcblx0XHQvYXZpKD86ZmlsZSk/c291cmNlfGRpcmVjdHNob3dzb3VyY2V8aW1hZ2UoPzpyZWFkZXJ8c291cmNlfHNvdXJjZWFuaW0pfG9wZW5kbWxzb3VyY2V8c2VnbWVudGVkKD86YXZpc291cmNlfGRpcmVjdHNob3dzb3VyY2UpfHdhdnNvdXJjZS8uc291cmNlLFxuXHRcdC8vIGNvbG9yXG5cdFx0L2NvbG9yeXV2fGNvbnZlcnRiYWNrdG95dXkyfGNvbnZlcnR0byg/OlJHQig/OjI0fDMyfDQ4fDY0KXwoPzpwbGFuYXIpP1JHQkE/fFk4P3xZVig/OjEyfDE2fDI0fDQxMSl8WVVWQT8oPzo0MTF8NDIwfDQyMnw0NDQpfFlVWTIpfGZpeGx1bWluYW5jZXxnclthZV15c2NhbGV8aW52ZXJ0fGxldmVsc3xsaW1pdGVyfG1lcmdlYT9yZ2J8bWVyZ2UoPzpjaHJvbWF8bHVtYSl8cmdiYWRqdXN0fHNob3coPzphbHBoYXxibHVlfGdyZWVufHJlZCl8c3dhcHV2fHR3ZWFrfFt1dl10b3k4P3x5dG91di8uc291cmNlLFxuXHRcdC8vIG92ZXJsYXlcblx0XHQvKD86Y29sb3JrZXl8cmVzZXQpbWFza3xsYXllcnxtYXNrKD86aHMpP3xtZXJnZXxvdmVybGF5fHN1YnRyYWN0Ly5zb3VyY2UsXG5cdFx0Ly8gZ2VvbWV0cnlcblx0XHQvYWRkYm9yZGVyc3woPzpiaWN1YmljfGJpbGluZWFyfGJsYWNrbWFufGdhdXNzfGxhbmN6b3M0fGxhbmN6b3N8cG9pbnR8c2luY3xzcGxpbmUoPzoxNnwzNnw2NCkpcmVzaXplfGNyb3AoPzpib3R0b20pP3xmbGlwKD86aG9yaXpvbnRhbHx2ZXJ0aWNhbCl8KD86aG9yaXpvbnRhbHx2ZXJ0aWNhbCk/cmVkdWNlYnkyfGxldHRlcmJveHxza2V3cm93c3x0dXJuKD86MTgwfGxlZnR8cmlnaHQpLy5zb3VyY2UsXG5cdFx0Ly8gcGl4ZWxcblx0XHQvYmx1cnxmaXhicm9rZW5jaHJvbWF1cHNhbXBsaW5nfGdlbmVyYWxjb252b2x1dGlvbnwoPzpzcGF0aWFsfHRlbXBvcmFsKXNvZnRlbnxzaGFycGVuLy5zb3VyY2UsXG5cdFx0Ly8gdGltZWxpbmVcblx0XHQvdHJpbXwoPzp1bik/YWxpZ25lZHNwbGljZXwoPzphc3N1bWV8YXNzdW1lc2NhbGVkfGNoYW5nZXxjb252ZXJ0KUZQU3woPzpkZWxldGV8ZHVwbGljYXRlKWZyYW1lfGRpc3NvbHZlfGZhZGUoPzppbnxpb3xvdXQpWzAyXT98ZnJlZXplZnJhbWV8aW50ZXJsZWF2ZXxsb29wfHJldmVyc2V8c2VsZWN0KD86ZXZlbnxvZGR8KD86cmFuZ2UpP2V2ZXJ5KS8uc291cmNlLFxuXHRcdC8vIGludGVybGFjZVxuXHRcdC9hc3N1bWVbYnRdZmZ8YXNzdW1lKD86ZmllbGR8ZnJhbWUpYmFzZWR8Ym9ifGNvbXBsZW1lbnRwYXJpdHl8ZG91Ymxld2VhdmV8cGVjdWxpYXJibGVuZHxwdWxsZG93bnxzZXBhcmF0ZSg/OmNvbHVtbnN8ZmllbGRzfHJvd3MpfHN3YXBmaWVsZHN8d2VhdmUoPzpjb2x1bW5zfHJvd3MpPy8uc291cmNlLFxuXHRcdC8vIGF1ZGlvXG5cdFx0L2FtcGxpZnkoPzpkYik/fGFzc3VtZXNhbXBsZXJhdGV8YXVkaW9kdWIoPzpleCk/fGF1ZGlvdHJpbXxjb252ZXJ0YXVkaW90byg/Oig/Ojh8MTZ8MjR8MzIpYml0fGZsb2F0KXxjb252ZXJ0dG9tb25vfGRlbGF5YXVkaW98ZW5zdXJldmJybXAzc3luY3xnZXQoPzpsZWZ0fHJpZ2h0KT9jaGFubmVsfGtpbGwoPzphdWRpb3x2aWRlbyl8bWVyZ2VjaGFubmVsc3xtaXhhdWRpb3xtb25vdG9zdGVyZW98bm9ybWFsaXplfHJlc2FtcGxlYXVkaW98c3NyY3xzdXBlcmVxfHRpbWVzdHJldGNoLy5zb3VyY2UsXG5cdFx0Ly8gY29uZGl0aW9uYWxcblx0XHQvYW5pbWF0ZXxhcHBseXJhbmdlfGNvbmRpdGlvbmFsKD86ZmlsdGVyfHJlYWRlcnxzZWxlY3QpfGZyYW1lZXZhbHVhdGV8c2NyaXB0Y2xpcHx0Y3AoPzpzZXJ2ZXJ8c291cmNlKXx3cml0ZWZpbGUoPzplbmR8aWZ8c3RhcnQpPy8uc291cmNlLFxuXHRcdC8vIGV4cG9ydFxuXHRcdC9pbWFnZXdyaXRlci8uc291cmNlLFxuXHRcdC8vIGRlYnVnXG5cdFx0L2JsYWNrbmVzc3xibGFua2NsaXB8Y29sb3JiYXJzKD86aGQpP3xjb21wYXJlfGR1bXBmaWx0ZXJncmFwaHxlY2hvfGhpc3RvZ3JhbXxpbmZvfG1lc3NhZ2VjbGlwfHByZXJvbGx8c2V0Z3JhcGhhbmFseXNpc3xzaG93KD86ZnJhbWVudW1iZXJ8c21wdGV8dGltZSl8c2hvd2ZpdmV2ZXJzaW9uc3xzdGFjayg/Omhvcml6b250YWx8dmVydGljYWwpfHN1YnRpdGxlfHRvbmV8dmVyc2lvbi8uc291cmNlXG5cdF0uam9pbignfCcpO1xuXHR2YXIgYWxsaW50ZXJuYWxzID0gW2ludGVybmFscywgcHJvcGVydGllcywgZmlsdGVyc10uam9pbignfCcpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hdmlzeW50aCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gTWF0Y2hlcyBbKiAqXSBuZXN0YWJsZSBibG9jayBjb21tZW50cywgYnV0IG9ubHkgc3VwcG9ydHMgMSBsZXZlbCBvZiBuZXN0ZWQgY29tbWVudHNcblx0XHRcdFx0Ly8gL1xcW1xcKig/OlteXFxbKl18XFxbKD8hXFwqKXxcXCooPyFcXF0pfDxzZWxmPikqXFwqXFxdL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXFtcXCooPzpbXlxcWypdfFxcWyg/IVxcKil8XFwqKD8hXFxdKXxcXFtcXCooPzpbXlxcWypdfFxcWyg/IVxcKil8XFwqKD8hXFxdKSkqXFwqXFxdKSpcXCpcXF0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE1hdGNoZXMgLyogKi8gYmxvY2sgY29tbWVudHNcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTWF0Y2hlcyAjIGNvbW1lbnRzXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFwkXSkjLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0Ly8gSGFuZGxlIGJlZm9yZSBzdHJpbmdzIGJlY2F1c2Ugb3B0aW9uYWwgYXJndW1lbnRzIGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXNcblx0XHQnYXJndW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFxiKD86PDwwPj4pXFxzKyhcIj8pXFx3K1xcMS8uc291cmNlLCBbdHlwZXNdLCAnaScpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15cXHcrL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBPcHRpb25hbCBhcmd1bWVudCBhc3NpZ25tZW50XG5cdFx0J2FyZ3VtZW50LWxhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogLyhbLChdW1xcc1xcXFxdKilcXHcrXFxzKj0oPyE9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhcmd1bWVudC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFx3Ky8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLz0kL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyB0cmlwbGUgZG91YmxlLXF1b3RlZFxuXHRcdFx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHNpbmdsZSBkb3VibGUtcXVvdGVkXG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdjb25zdGFudCc6IHtcblx0XHRcdFx0XHRcdC8vIFRoZXNlICphcmUqIGNhc2Utc2Vuc2l0aXZlIVxuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OkRFRkFVTFRfTVRfTU9ERXwoPzpNQUlOU0NSSVBUfFBST0dSQU18U0NSSVBUKURJUnwoPzpNQUNISU5FfFVTRVIpXyg/OkNMQVNTSUN8UExVUylfUExVR0lOUylcXGIvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIFRoZSBzcGVjaWFsIFwibGFzdFwiIHZhcmlhYmxlIHRoYXQgdGFrZXMgdGhlIHZhbHVlIG9mIHRoZSBsYXN0IGltcGxpY2l0bHkgcmV0dXJuZWQgY2xpcFxuXHRcdCd2YXJpYWJsZSc6IC9cXGIoPzpsYXN0KVxcYi9pLFxuXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bm98dHJ1ZXx5ZXMpXFxiL2ksXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzpjYXRjaHxlbHNlfGZvcnxmdW5jdGlvbnxnbG9iYWx8aWZ8cmV0dXJufHRyeXx3aGlsZXxfX0VORF9fKVxcYi9pLFxuXG5cdFx0J2NvbnN0YW50JzogL1xcYk1UXyg/Ok1VTFRJX0lOU1RBTkNFfE5JQ0VfRklMVEVSfFNFUklBTElaRUR8U1BFQ0lBTF9NVClcXGIvLFxuXG5cdFx0Ly8gQXZpU3ludGgncyBpbnRlcm5hbCBmdW5jdGlvbnMsIGZpbHRlcnMsIGFuZCBwcm9wZXJ0aWVzXG5cdFx0J2J1aWx0aW4tZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFxiKD86PDwwPj4pXFxiLy5zb3VyY2UsIFthbGxpbnRlcm5hbHNdLCAnaScpLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0J3R5cGUtY2FzdCc6IHtcblx0XHRcdHBhdHRlcm46IHJlKC9cXGIoPzo8PDA+PikoPz1cXHMqXFwoKS8uc291cmNlLCBbdHlwZXNdLCAnaScpLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQvLyBFeHRlcm5hbC91c2VyLWRlZmluZWQgZmlsdGVyc1xuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCl8KFxcLilbYS16X11cXHcqXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIE1hdGNoZXMgYSBcXCBhcyB0aGUgZmlyc3Qgb3IgbGFzdCBjaGFyYWN0ZXIgb24gYSBsaW5lXG5cdFx0J2xpbmUtY29udGludWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilcXFxcfFxcXFwoPz1bIFxcdF0qJCkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cblx0XHQnbnVtYmVyJzogL1xcQlxcJCg/OltcXGRhLWZdezZ9fFtcXGRhLWZdezh9KVxcYnwoPzooPzpcXGJ8XFxCLSlcXGQrKD86XFwuXFxkKik/XFxifFxcQlxcLlxcZCtcXGIpL2ksXG5cblx0XHQnb3BlcmF0b3InOiAvXFwrXFwrP3xbIT08Pl09P3wmJnxcXHxcXHx8Wz86Ki8lLV0vLFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fVxcW1xcXSgpOywuXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXZzID0gUHJpc20ubGFuZ3VhZ2VzLmF2aXN5bnRoO1xuXG59KFByaXNtKSk7XG5cbi8vIEdpdEh1YjogaHR0cHM6Ly9naXRodWIuY29tL2FwYWNoZS9hdnJvXG4vLyBEb2NzOiBodHRwczovL2F2cm8uYXBhY2hlLm9yZy9kb2NzL2N1cnJlbnQvaWRsLmh0bWxcblxuUHJpc20ubGFuZ3VhZ2VzWydhdnJvLWlkbCddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9AKD86WyRcXHcuLV18YFteXFxyXFxuYF0rYCkrLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2Z1bmN0aW9uLWlkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL2BbXlxcclxcbmBdK2AoPz1cXHMqXFwoKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gW15cXHJcXG5gXStgLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmVudW18ZXJyb3J8cHJvdG9jb2x8cmVjb3JkfHRocm93cylcXGJcXHMrKVskXFx3XSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFycmF5fGJvb2xlYW58Ynl0ZXN8ZGF0ZXxkZWNpbWFsfGRvdWJsZXxlbnVtfGVycm9yfGZhbHNlfGZpeGVkfGZsb2F0fGlkbHxpbXBvcnR8aW50fGxvY2FsX3RpbWVzdGFtcF9tc3xsb25nfG1hcHxudWxsfG9uZXdheXxwcm90b2NvbHxyZWNvcmR8c2NoZW1hfHN0cmluZ3x0aHJvd3N8dGltZV9tc3x0aW1lc3RhbXBfbXN8dHJ1ZXx1bmlvbnx1dWlkfHZvaWQpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdCdudW1iZXInOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pLT8oPzooPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/fDB4KD86W2EtZjAtOV0rKD86XFwuW2EtZjAtOV0qKT98XFwuW2EtZjAtOV0rKSg/OnBbKy1dP1xcZCspPylbZGZsXT8oPyFbXFx3Ll0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLT9cXGIoPzpJbmZpbml0eXxOYU4pXFxiL1xuXHRdLFxuXG5cdCdvcGVyYXRvcic6IC89Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXXt9PD4uOiw7LV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXZkbCA9IFByaXNtLmxhbmd1YWdlc1snYXZyby1pZGwnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmF3ayA9IHtcblx0J2hhc2hiYW5nJzoge1xuXHRcdHBhdHRlcm46IC9eIyEuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlxcXFxcIlxcclxcbl18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFx3XFxzKV0pXFxzKilcXC8oPzpbXlxcL1xcXFxcXHJcXG5dfFxcXFwuKSpcXC8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpCRUdJTnxCRUdJTkZJTEV8RU5EfEVOREZJTEV8YnJlYWt8Y2FzZXxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkb3xlbHNlfGV4aXR8Zm9yfGZ1bmN0aW9ufGdldGxpbmV8aWZ8aW58bmV4dHxuZXh0ZmlsZXxwcmludGY/fHJldHVybnxzd2l0Y2h8d2hpbGUpXFxifEAoPzppbmNsdWRlfGxvYWQpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdCdudW1iZXInOiAvXFxiKD86XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP3wweFthLWZBLUYwLTldKylcXGIvLFxuXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8IT9+fD4mfD4+fDw8fCg/OlxcKlxcKnxbPD4hPStcXC0qLyVeXSk9P3wmJnxcXHxbfCZdfFs/Ol0vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdhd2sgPSBQcmlzbS5sYW5ndWFnZXMuYXdrO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vICQgc2V0IHwgZ3JlcCAnXltBLVpdW15bOnNwYWNlOl1dKj0nIHwgY3V0IC1kPSAtZjEgfCB0ciAnXFxuJyAnfCdcblx0Ly8gKyBMQ19BTEwsIFJBTkRPTSwgUkVQTFksIFNFQ09ORFMuXG5cdC8vICsgbWFrZSBzdXJlIFBTMS4uNCBhcmUgaGVyZSBhcyB0aGV5IGFyZSBub3QgYWx3YXlzIHNldCxcblx0Ly8gLSBzb21lIHVzZWxlc3MgdGhpbmdzLlxuXHR2YXIgZW52VmFycyA9ICdcXFxcYig/OkJBU0h8QkFTSE9QVFN8QkFTSF9BTElBU0VTfEJBU0hfQVJHQ3xCQVNIX0FSR1Z8QkFTSF9DTURTfEJBU0hfQ09NUExFVElPTl9DT01QQVRfRElSfEJBU0hfTElORU5PfEJBU0hfUkVNQVRDSHxCQVNIX1NPVVJDRXxCQVNIX1ZFUlNJTkZPfEJBU0hfVkVSU0lPTnxDT0xPUlRFUk18Q09MVU1OU3xDT01QX1dPUkRCUkVBS1N8REJVU19TRVNTSU9OX0JVU19BRERSRVNTfERFRkFVTFRTX1BBVEh8REVTS1RPUF9TRVNTSU9OfERJUlNUQUNLfERJU1BMQVl8RVVJRHxHRE1TRVNTSU9OfEdETV9MQU5HfEdOT01FX0tFWVJJTkdfQ09OVFJPTHxHTk9NRV9LRVlSSU5HX1BJRHxHUEdfQUdFTlRfSU5GT3xHUk9VUFN8SElTVENPTlRST0x8SElTVEZJTEV8SElTVEZJTEVTSVpFfEhJU1RTSVpFfEhPTUV8SE9TVE5BTUV8SE9TVFRZUEV8SUZTfElOU1RBTkNFfEpPQnxMQU5HfExBTkdVQUdFfExDX0FERFJFU1N8TENfQUxMfExDX0lERU5USUZJQ0FUSU9OfExDX01FQVNVUkVNRU5UfExDX01PTkVUQVJZfExDX05BTUV8TENfTlVNRVJJQ3xMQ19QQVBFUnxMQ19URUxFUEhPTkV8TENfVElNRXxMRVNTQ0xPU0V8TEVTU09QRU58TElORVN8TE9HTkFNRXxMU19DT0xPUlN8TUFDSFRZUEV8TUFJTENIRUNLfE1BTkRBVE9SWV9QQVRIfE5PX0FUX0JSSURHRXxPTERQV0R8T1BURVJSfE9QVElORHxPUkJJVF9TT0NLRVRESVJ8T1NUWVBFfFBBUEVSU0laRXxQQVRIfFBJUEVTVEFUVVN8UFBJRHxQUzF8UFMyfFBTM3xQUzR8UFdEfFJBTkRPTXxSRVBMWXxTRUNPTkRTfFNFTElOVVhfSU5JVHxTRVNTSU9OfFNFU1NJT05UWVBFfFNFU1NJT05fTUFOQUdFUnxTSEVMTHxTSEVMTE9QVFN8U0hMVkx8U1NIX0FVVEhfU09DS3xURVJNfFVJRHxVUFNUQVJUX0VWRU5UU3xVUFNUQVJUX0lOU1RBTkNFfFVQU1RBUlRfSk9CfFVQU1RBUlRfU0VTU0lPTnxVU0VSfFdJTkRPV0lEfFhBVVRIT1JJVFl8WERHX0NPTkZJR19ESVJTfFhER19DVVJSRU5UX0RFU0tUT1B8WERHX0RBVEFfRElSU3xYREdfR1JFRVRFUl9EQVRBX0RJUnxYREdfTUVOVV9QUkVGSVh8WERHX1JVTlRJTUVfRElSfFhER19TRUFUfFhER19TRUFUX1BBVEh8WERHX1NFU1NJT05fREVTS1RPUHxYREdfU0VTU0lPTl9JRHxYREdfU0VTU0lPTl9QQVRIfFhER19TRVNTSU9OX1RZUEV8WERHX1ZUTlJ8WE1PRElGSUVSUylcXFxcYic7XG5cblx0dmFyIGNvbW1hbmRBZnRlckhlcmVkb2MgPSB7XG5cdFx0cGF0dGVybjogLyheKFtcIiddPylcXHcrXFwyKVsgXFx0XStcXFMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJywgLy8gdGhpcyBsb29rcyByZWFzb25hYmx5IHdlbGwgaW4gYWxsIHRoZW1lc1xuXHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0fTtcblxuXHR2YXIgaW5zaWRlU3RyaW5nID0ge1xuXHRcdCdiYXNoJzogY29tbWFuZEFmdGVySGVyZWRvYyxcblx0XHQnZW52aXJvbm1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ1xcXFwkJyArIGVudlZhcnMpLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IFtcblx0XHRcdC8vIFswXTogQXJpdGhtZXRpYyBFbnZpcm9ubWVudFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkP1xcKFxcKFtcXHNcXFNdKz9cXClcXCkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIGEgJCBzaWduIGF0IHRoZSBiZWdpbm5pbmcgaGlnaGxpZ2h0ICQoKCBhbmQgKSkgYXMgdmFyaWFibGVcblx0XHRcdFx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcJFxcKFxcKFtcXHNcXFNdKylcXClcXCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0L15cXCRcXChcXCgvXG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdLT9cXGQrKT8vLFxuXHRcdFx0XHRcdC8vIE9wZXJhdG9ycyBhY2NvcmRpbmcgdG8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9iYXNocmVmLmh0bWwjU2hlbGwtQXJpdGhtZXRpY1xuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PDw9P3w+Pj0/fCYmfFxcfFxcfHxbPSErXFwtKi8lPD5eJnxdPT98Wz9+Ol0vLFxuXHRcdFx0XHRcdC8vIElmIHRoZXJlIGlzIG5vICQgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIGhpZ2hsaWdodCAoKCBhbmQgKSkgYXMgcHVuY3R1YXRpb25cblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwoXFwoP3xcXClcXCk/fCx8Oy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFsxXTogQ29tbWFuZCBTdWJzdGl0dXRpb25cblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxcKCg/OlxcKFteKV0rXFwpfFteKCldKStcXCl8YFteYF0rYC8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogL15cXCRcXCh8XmB8XFwpJHxgJC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFsyXTogQnJhY2UgZXhwYW5zaW9uXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXn1dK1xcfS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J29wZXJhdG9yJzogLzpbLT0/K10/fFshXFwvXXwjIz98JSU/fFxcXlxcXj98LCw/Lyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vLFxuXHRcdFx0XHRcdCdlbnZpcm9ubWVudCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKFxcXFx7KScgKyBlbnZWYXJzKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC9cXCQoPzpcXHcrfFsjPyohQCRdKS9cblx0XHRdLFxuXHRcdC8vIEVzY2FwZSBzZXF1ZW5jZXMgZnJvbSBlY2hvIGFuZCBwcmludGYncyBtYW51YWxzLCBhbmQgZXNjYXBlZCBxdW90ZXMuXG5cdFx0J2VudGl0eSc6IC9cXFxcKD86W2FiY2VFZm5ydHZcXFxcXCJdfE8/WzAtN117MSwzfXxVWzAtOWEtZkEtRl17OH18dVswLTlhLWZBLUZdezR9fHhbMC05YS1mQS1GXXsxLDJ9KS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYmFzaCA9IHtcblx0XHQnc2hlYmFuZyc6IHtcblx0XHRcdHBhdHRlcm46IC9eIyFcXHMqXFwvLiovLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlwie1xcXFwkXSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLW5hbWUnOiBbXG5cdFx0XHQvLyBhKSBmdW5jdGlvbiBmb28ge1xuXHRcdFx0Ly8gYikgZm9vKCkge1xuXHRcdFx0Ly8gYykgZnVuY3Rpb24gZm9vKCkge1xuXHRcdFx0Ly8gYnV0IG5vdCBcdTIwMUNmb28ge1x1MjAxRFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBhKSBhbmQgYylcblx0XHRcdFx0cGF0dGVybjogLyhcXGJmdW5jdGlvblxccyspW1xcdy1dKyg/PSg/OlxccypcXCg/OlxccypcXCkpP1xccypcXHspLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGIpXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJbXFx3LV0rKD89XFxzKlxcKFxccypcXClcXHMqXFx7KS8sXG5cdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBIaWdobGlnaHQgdmFyaWFibGUgbmFtZXMgYXMgdmFyaWFibGVzIGluIGZvciBhbmQgc2VsZWN0IGJlZ2lubmluZ3MuXG5cdFx0J2Zvci1vci1zZWxlY3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmZvcnxzZWxlY3QpXFxzKylcXHcrKD89XFxzK2luXFxzKS8sXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIEhpZ2hsaWdodCB2YXJpYWJsZSBuYW1lcyBhcyB2YXJpYWJsZXMgaW4gdGhlIGxlZnQtaGFuZCBwYXJ0XG5cdFx0Ly8gb2YgYXNzaWdubWVudHMgKFx1MjAxQz1cdTIwMUQgYW5kIFx1MjAxQys9XHUyMDFEKS5cblx0XHQnYXNzaWduLWxlZnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKClcXHcrKD89XFwrPz0pLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZW52aXJvbm1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXnxbXFxcXHM7fCZdfFs8Pl1cXFxcKCknICsgZW52VmFycyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0Ly8gU3VwcG9ydCBmb3IgSGVyZS1kb2N1bWVudHMgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSGVyZV9kb2N1bWVudFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoXFx3KylcXHNbXFxzXFxTXSo/KD86XFxyP1xcbnxcXHIpXFwyLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xuXHRcdFx0fSxcblx0XHRcdC8vIEhlcmUtZG9jdW1lbnQgd2l0aCBxdW90ZXMgYXJvdW5kIHRoZSB0YWdcblx0XHRcdC8vIFx1MjE5MiBObyBleHBhbnNpb24gKHNvIG5vIFx1MjAxQ2luc2lkZVx1MjAxRCkuXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXjxdKTw8LT9cXHMqKShbXCInXSkoXFx3KylcXDJcXHNbXFxzXFxTXSo/KD86XFxyP1xcbnxcXHIpXFwzLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnYmFzaCc6IGNvbW1hbmRBZnRlckhlcmVkb2Ncblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFx1MjAxQ05vcm1hbFx1MjAxRCBzdHJpbmdcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvRG91YmxlLVF1b3Rlcy5odG1sXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKD86XFxcXFxcXFwpKilcIig/OlxcXFxbXFxzXFxTXXxcXCRcXChbXildK1xcKXxcXCQoPyFcXCgpfGBbXmBdK2B8W15cIlxcXFxgJF0pKlwiLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGluc2lkZVN0cmluZ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvU2luZ2xlLVF1b3Rlcy5odG1sXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXFxcXSknW14nXSonLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2h0bWxfbm9kZS9BTlNJXzAwMmRDLVF1b3RpbmcuaHRtbFxuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2VudGl0eSc6IGluc2lkZVN0cmluZy5lbnRpdHlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Vudmlyb25tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcJD8nICsgZW52VmFycyksXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogaW5zaWRlU3RyaW5nLnZhcmlhYmxlLFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmFkZHxhcHJvcG9zfGFwdHxhcHQtY2FjaGV8YXB0LWdldHxhcHRpdHVkZXxhc3BlbGx8YXV0b215c3FsYmFja3VwfGF3a3xiYXNlbmFtZXxiYXNofGJjfGJjb25zb2xlfGJnfGJ6aXAyfGNhbHxjYXR8Y2ZkaXNrfGNoZ3JwfGNoa2NvbmZpZ3xjaG1vZHxjaG93bnxjaHJvb3R8Y2tzdW18Y2xlYXJ8Y21wfGNvbHVtbnxjb21tfGNvbXBvc2VyfGNwfGNyb258Y3JvbnRhYnxjc3BsaXR8Y3VybHxjdXR8ZGF0ZXxkY3xkZHxkZHJlc2N1ZXxkZWJvb3RzdHJhcHxkZnxkaWZmfGRpZmYzfGRpZ3xkaXJ8ZGlyY29sb3JzfGRpcm5hbWV8ZGlyc3xkbWVzZ3xkb2NrZXJ8ZG9ja2VyLWNvbXBvc2V8ZHV8ZWdyZXB8ZWplY3R8ZW52fGV0aHRvb2x8ZXhwYW5kfGV4cGVjdHxleHByfGZkZm9ybWF0fGZkaXNrfGZnfGZncmVwfGZpbGV8ZmluZHxmbXR8Zm9sZHxmb3JtYXR8ZnJlZXxmc2NrfGZ0cHxmdXNlcnxnYXdrfGdpdHxncGFydGVkfGdyZXB8Z3JvdXBhZGR8Z3JvdXBkZWx8Z3JvdXBtb2R8Z3JvdXBzfGdydWItbWtjb25maWd8Z3ppcHxoYWx0fGhlYWR8aGd8aGlzdG9yeXxob3N0fGhvc3RuYW1lfGh0b3B8aWNvbnZ8aWR8aWZjb25maWd8aWZkb3dufGlmdXB8aW1wb3J0fGluc3RhbGx8aXB8am9ic3xqb2lufGtpbGx8a2lsbGFsbHxsZXNzfGxpbmt8bG58bG9jYXRlfGxvZ25hbWV8bG9ncm90YXRlfGxvb2t8bHBjfGxwcnxscHJpbnR8bHByaW50ZHxscHJpbnRxfGxwcm18bHN8bHNvZnxseW54fG1ha2V8bWFufG1jfG1kYWRtfG1rY29uZmlnfG1rZGlyfG1rZTJmc3xta2ZpZm98bWtmc3xta2lzb2ZzfG1rbm9kfG1rc3dhcHxtbXZ8bW9yZXxtb3N0fG1vdW50fG10b29sc3xtdHJ8bXV0dHxtdnxuYW5vfG5jfG5ldHN0YXR8bmljZXxubHxub2RlfG5vaHVwfG5vdGlmeS1zZW5kfG5wbXxuc2xvb2t1cHxvcHxvcGVufHBhcnRlZHxwYXNzd2R8cGFzdGV8cGF0aGNoa3xwaW5nfHBraWxsfHBucG18cG9kbWFufHBvZG1hbi1jb21wb3NlfHBvcGR8cHJ8cHJpbnRjYXB8cHJpbnRlbnZ8cHN8cHVzaGR8cHZ8cXVvdGF8cXVvdGFjaGVja3xxdW90YWN0bHxyYW18cmFyfHJjcHxyZWJvb3R8cmVtc3luY3xyZW5hbWV8cmVuaWNlfHJldnxybXxybWRpcnxycG18cnN5bmN8c2NwfHNjcmVlbnxzZGlmZnxzZWR8c2VuZG1haWx8c2VxfHNlcnZpY2V8c2Z0cHxzaHxzaGVsbGNoZWNrfHNodWZ8c2h1dGRvd258c2xlZXB8c2xvY2F0ZXxzb3J0fHNwbGl0fHNzaHxzdGF0fHN0cmFjZXxzdXxzdWRvfHN1bXxzdXNwZW5kfHN3YXBvbnxzeW5jfHRhY3x0YWlsfHRhcnx0ZWV8dGltZXx0aW1lb3V0fHRvcHx0b3VjaHx0cnx0cmFjZXJvdXRlfHRzb3J0fHR0eXx1bW91bnR8dW5hbWV8dW5leHBhbmR8dW5pcXx1bml0c3x1bnJhcnx1bnNoYXJ8dW56aXB8dXBkYXRlLWdydWJ8dXB0aW1lfHVzZXJhZGR8dXNlcmRlbHx1c2VybW9kfHVzZXJzfHV1ZGVjb2RlfHV1ZW5jb2RlfHZ8dmNwa2d8dmRpcnx2aXx2aW18dmlyc2h8dm1zdGF0fHdhaXR8d2F0Y2h8d2N8d2dldHx3aGVyZWlzfHdoaWNofHdob3x3aG9hbWl8d3JpdGV8eGFyZ3N8eGRnLW9wZW58eWFybnx5ZXN8emVuaXR5fHppcHx6c2h8enlwcGVyKSg/PSR8WylcXHM7fCZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmNhc2V8ZG98ZG9uZXxlbGlmfGVsc2V8ZXNhY3xmaXxmb3J8ZnVuY3Rpb258aWZ8aW58c2VsZWN0fHRoZW58dW50aWx8d2hpbGUpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NoZWxsLUJ1aWx0aW4tQ29tbWFuZHMuaHRtbFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpKD86XFwufDp8YWxpYXN8YmluZHxicmVha3xidWlsdGlufGNhbGxlcnxjZHxjb21tYW5kfGNvbnRpbnVlfGRlY2xhcmV8ZWNob3xlbmFibGV8ZXZhbHxleGVjfGV4aXR8ZXhwb3J0fGdldG9wdHN8aGFzaHxoZWxwfGxldHxsb2NhbHxsb2dvdXR8bWFwZmlsZXxwcmludGZ8cHdkfHJlYWR8cmVhZGFycmF5fHJlYWRvbmx5fHJldHVybnxzZXR8c2hpZnR8c2hvcHR8c291cmNlfHRlc3R8dGltZXN8dHJhcHx0eXBlfHR5cGVzZXR8dWxpbWl0fHVtYXNrfHVuYWxpYXN8dW5zZXQpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHQvLyBBbGlhcyBhZGRlZCB0byBtYWtlIHRob3NlIGVhc2llciB0byBkaXN0aW5ndWlzaCBmcm9tIHN0cmluZ3MuXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OmZhbHNlfHRydWUpKD89JHxbKVxcczt8Jl0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmaWxlLWRlc2NyaXB0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxCJlxcZFxcYi8sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdC8vIExvdHMgb2YgcmVkaXJlY3Rpb25zIGhlcmUsIGJ1dCBub3QganVzdCB0aGF0LlxuXHRcdFx0cGF0dGVybjogL1xcZD88Pnw+XFx8fFxcKz18PVs9fl0/fCE9P3w8PFs8LV0/fFsmXFxkXT8+PnxcXGRbPD5dJj98Wzw+XVsmPV0/fCZbPiZdP3xcXHxbJnxdPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ZpbGUtZGVzY3JpcHRvcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcZC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXCQ/XFwoXFwoP3xcXClcXCk/fFxcLlxcLnxbe31bXFxdO1xcXFxdLyxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpbMS05XVxcZCp8MCkoPzpbLixdXFxkKyk/XFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH07XG5cblx0Y29tbWFuZEFmdGVySGVyZWRvYy5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuYmFzaDtcblxuXHQvKiBQYXR0ZXJucyBpbiBjb21tYW5kIHN1YnN0aXR1dGlvbi4gKi9cblx0dmFyIHRvQmVDb3BpZWQgPSBbXG5cdFx0J2NvbW1lbnQnLFxuXHRcdCdmdW5jdGlvbi1uYW1lJyxcblx0XHQnZm9yLW9yLXNlbGVjdCcsXG5cdFx0J2Fzc2lnbi1sZWZ0Jyxcblx0XHQnc3RyaW5nJyxcblx0XHQnZW52aXJvbm1lbnQnLFxuXHRcdCdmdW5jdGlvbicsXG5cdFx0J2tleXdvcmQnLFxuXHRcdCdidWlsdGluJyxcblx0XHQnYm9vbGVhbicsXG5cdFx0J2ZpbGUtZGVzY3JpcHRvcicsXG5cdFx0J29wZXJhdG9yJyxcblx0XHQncHVuY3R1YXRpb24nLFxuXHRcdCdudW1iZXInXG5cdF07XG5cdHZhciBpbnNpZGUgPSBpbnNpZGVTdHJpbmcudmFyaWFibGVbMV0uaW5zaWRlO1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IHRvQmVDb3BpZWQubGVuZ3RoOyBpKyspIHtcblx0XHRpbnNpZGVbdG9CZUNvcGllZFtpXV0gPSBQcmlzbS5sYW5ndWFnZXMuYmFzaFt0b0JlQ29waWVkW2ldXTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5zaGVsbCA9IFByaXNtLmxhbmd1YWdlcy5iYXNoO1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYmFzaWMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oPzohfFJFTVxcYikuKy9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlJFTS9pXG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8WyEjJCUmJygpKixcXC86Ozw9Pj9eXFx3ICtcXC0uXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpFWystXT9cXGQrKT8vaSxcblx0J2tleXdvcmQnOiAvXFxiKD86QVN8QkVFUHxCTE9BRHxCU0FWRXxDQUxMKD86IEFCU09MVVRFKT98Q0FTRXxDSEFJTnxDSERJUnxDTEVBUnxDTE9TRXxDTFN8Q09NfENPTU1PTnxDT05TVHxEQVRBfERFQ0xBUkV8REVGKD86IEZOfCBTRUd8REJMfElOVHxMTkd8U05HfFNUUil8RElNfERPfERPVUJMRXxFTFNFfEVMU0VJRnxFTkR8RU5WSVJPTnxFUkFTRXxFUlJPUnxFWElUfEZJRUxEfEZJTEVTfEZPUnxGVU5DVElPTnxHRVR8R09TVUJ8R09UT3xJRnxJTlBVVHxJTlRFR0VSfElPQ1RMfEtFWXxLSUxMfExJTkUgSU5QVVR8TE9DQVRFfExPQ0t8TE9OR3xMT09QfExTRVR8TUtESVJ8TkFNRXxORVhUfE9GRnxPTig/OiBDT018IEVSUk9SfCBLRVl8IFRJTUVSKT98T1BFTnxPUFRJT04gQkFTRXxPVVR8UE9LRXxQVVR8UkVBRHxSRURJTXxSRU18UkVTVE9SRXxSRVNVTUV8UkVUVVJOfFJNRElSfFJTRVR8UlVOfFNFTEVDVCBDQVNFfFNIQVJFRHxTSEVMTHxTSU5HTEV8U0xFRVB8U1RBVElDfFNURVB8U1RPUHxTVFJJTkd8U1VCfFNXQVB8U1lTVEVNfFRIRU58VElNRVJ8VE98VFJPRkZ8VFJPTnxUWVBFfFVOTE9DS3xVTlRJTHxVU0lOR3xWSUVXIFBSSU5UfFdBSVR8V0VORHxXSElMRXxXUklURSkoPzpcXCR8XFxiKS9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86QUJTfEFDQ0VTU3xBQ09TfEFOR0xFfEFSRUF8QVJJVEhNRVRJQ3xBUlJBWXxBU0lOfEFTS3xBVHxBVE58QkFTRXxCRUdJTnxCUkVBS3xDQVVTRXxDRUlMfENIUnxDTElQfENPTExBVEV8Q09MT1J8Q09OfENPU3xDT1NIfENPVHxDU0N8REFURXxEQVRVTXxERUJVR3xERUNJTUFMfERFRnxERUd8REVHUkVFU3xERUxFVEV8REVUfERFVklDRXxESVNQTEFZfERPVHxFTEFQU0VEfEVQU3xFUkFTQUJMRXxFWExJTkV8RVhQfEVYVEVSTkFMfEVYVFlQRXxGSUxFVFlQRXxGSVhFRHxGUHxHT3xHUkFQSHxIQU5ETEVSfElETnxJTUFHRXxJTnxJTlR8SU5URVJOQUx8SVB8SVN8S0VZRUR8TEJPVU5EfExDQVNFfExFRlR8TEVOfExFTkdUSHxMRVR8TElORXxMSU5FU3xMT0d8TE9HMTB8TE9HMnxMVFJJTXxNQVJHSU58TUFUfE1BWHxNQVhOVU18TUlEfE1JTnxNSVNTSU5HfE1PRHxOQVRJVkV8TlVMfE5VTUVSSUN8T0Z8T1BUSU9OfE9SRHxPUkdBTklaQVRJT058T1VUSU58T1VUUFVUfFBJfFBPSU5UfFBPSU5URVJ8UE9JTlRTfFBPU3xQUklOVHxQUk9HUkFNfFBST01QVHxSQUR8UkFESUFOU3xSQU5ET01JWkV8UkVDT1JEfFJFQ1NJWkV8UkVDVFlQRXxSRUxBVElWRXxSRU1BSU5ERVJ8UkVQRUFUfFJFU1R8UkVUUll8UkVXUklURXxSSUdIVHxSTkR8Uk9VTkR8UlRSSU18U0FNRXxTRUN8U0VMRUNUfFNFUVVFTlRJQUx8U0VUfFNFVFRFUnxTR058U0lOfFNJTkh8U0laRXxTS0lQfFNRUnxTVEFOREFSRHxTVEFUVVN8U1RSfFNUUkVBTXxTVFlMRXxUQUJ8VEFOfFRBTkh8VEVNUExBVEV8VEVYVHxUSEVSRXxUSU1FfFRJTUVPVVR8VFJBQ0V8VFJBTlNGT1JNfFRSVU5DQVRFfFVCT1VORHxVQ0FTRXxVU0V8VkFMfFZBUklBQkxFfFZJRVdQT1JUfFdIRU58V0lORE9XfFdJVEh8WkVSfFpPTkVXSURUSCkoPzpcXCR8XFxiKS9pLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3xbK1xcLSpcXC9ePSZdfFxcYig/OkFORHxFUVZ8SU1QfE5PVHxPUnxYT1IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bLDs6KCldL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgdmFyaWFibGUgPSAvJSU/W346XFx3XSslP3whXFxTKyEvO1xuXHR2YXIgcGFyYW1ldGVyID0ge1xuXHRcdHBhdHRlcm46IC9cXC9bYS16P10rKD89WyA6XXwkKTo/fC1bYS16XVxcYnwtLVthLXotXStcXGIvaW0sXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzovXG5cdFx0fVxuXHR9O1xuXHR2YXIgc3RyaW5nID0gL1wiKD86W1xcXFxcIl1cInxbXlwiXSkqXCIoPyFcIikvO1xuXHR2YXIgbnVtYmVyID0gLyg/OlxcYnwtKVxcZCtcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5iYXRjaCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdC9eOjouKi9tLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoXSlbIFxcdF0qKXJlbVxcYig/OlteXiYpXFxyXFxuXXxcXF4oPzpcXHJcXG58W1xcc1xcU10pKSovaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdsYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC9eOi4qL20sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEZPUiBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJihdKVsgXFx0XSopZm9yKD86IFxcL1thLXo/XSg/OlsgOl0oPzpcIlteXCJdKlwifFteXFxzXCIvXVxcUyopKT8pKiBcXFMrIGluIFxcKFteKV0rXFwpIGRvL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpkb3xpbilcXGJ8XmZvclxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCknLF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIElGIGNvbW1hbmRcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKilpZig/OiBcXC9bYS16P10oPzpbIDpdKD86XCJbXlwiXSpcInxbXlxcc1wiL11cXFMqKSk/KSogKD86bm90ICk/KD86Y21kZXh0dmVyc2lvbiBcXGQrfGRlZmluZWQgXFx3K3xlcnJvcmxldmVsIFxcZCt8ZXhpc3QgXFxTK3woPzpcIlteXCJdKlwifCg/IVwiKSg/Oig/IT09KVxcUykrKT8oPzo9PXwgKD86ZXF1fGdlcXxndHJ8bGVxfGxzc3xuZXEpICkoPzpcIlteXCJdKlwifFteXFxzXCJdXFxTKikpL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpjbWRleHR2ZXJzaW9ufGRlZmluZWR8ZXJyb3JsZXZlbHxleGlzdHxub3QpXFxifF5pZlxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC9cXF58PT18XFxiKD86ZXF1fGdlcXxndHJ8bGVxfGxzc3xuZXEpXFxiL2lcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gRUxTRSBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJigpXSlbIFxcdF0qKWVsc2VcXGIvaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15lbHNlXFxiL2lcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gU0VUIGNvbW1hbmRcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKilzZXQoPzogXFwvW2Etel0oPzpbIDpdKD86XCJbXlwiXSpcInxbXlxcc1wiL11cXFMqKSk/KSogKD86W15eJilcXHJcXG5dfFxcXig/OlxcclxcbnxbXFxzXFxTXSkpKi9pbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXnNldFxcYi9pLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0XHRcdFx0J3BhcmFtZXRlcic6IHBhcmFtZXRlcixcblx0XHRcdFx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHRcdFx0XHR2YXJpYWJsZSxcblx0XHRcdFx0XHRcdC9cXHcrKD89KD86WypcXC8lK1xcLSZefF18PDx8Pj4pPz0pL1xuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvWypcXC8lK1xcLSZefF09P3w8PD0/fD4+PT98WyF+Xz1dLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpJyxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBPdGhlciBjb21tYW5kc1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoXSlbIFxcdF0qQD8pXFx3K1xcYig/OlwiKD86W1xcXFxcIl1cInxbXlwiXSkqXCIoPyFcIil8W15cIl4mKVxcclxcbl18XFxeKD86XFxyXFxufFtcXHNcXFNdKSkqL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15cXHcrXFxiLyxcblx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0J2xhYmVsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFxzKik6XFxTKy9tLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC9cXF4vXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdvcGVyYXRvcic6IC9bJkBdLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpJ10vXG5cdH07XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5iYmNvZGUgPSB7XG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogL1xcW1xcLz9bXlxccz1cXF1dKyg/Olxccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIlxcXT1dKykpPyg/OlxccytbXlxccz1cXF1dK1xccyo9XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIlxcXT1dKykpKlxccypcXF0vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXFtcXC8/W15cXHM9XFxdXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW1xcLz8vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLz1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiXFxdPV0rKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IFtcblx0XHRcdFx0XHRcdC9ePS8sXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopW1wiJ118W1wiJ10kLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXF0vLFxuXHRcdFx0J2F0dHItbmFtZSc6IC9bXlxccz1cXF1dKy9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zaG9ydGNvZGUgPSBQcmlzbS5sYW5ndWFnZXMuYmJjb2RlO1xuXG4vLyBiYXNlZCBsb29zZWx5IHVwb246IGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9iaWNlcC9ibG9iL21haW4vc3JjL3RleHRtYXRlL2JpY2VwLnRtbGFuZ3VhZ2VcblByaXNtLmxhbmd1YWdlcy5iaWNlcCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gbXVsdGlsaW5lIGNvbW1lbnRzIGVnIC8qIEFTREYgKi9cblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gc2luZ2xlbGluZSBjb21tZW50cyBlZyAvLyBBU0RGXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblxuXHQncHJvcGVydHknOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopW2Etel9dXFx3Kig/PVsgXFx0XSo6KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopJyg/OlxcXFwufFxcJCg/IVxceyl8W14nXFxcXFxcclxcbiRdKSonKD89WyBcXHRdKjopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLycnJ1teJ11bXFxzXFxTXSo/JycnLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXCddKScoPzpcXFxcLnxcXCQoPyFcXHspfFteJ1xcXFxcXHJcXG4kXSkqJy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH1cblx0XSxcblx0J2ludGVycG9sYXRlZC1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXCddKScoPzpcXFxcLnxcXCQoPzooPyFcXHspfFxce1tee31cXHJcXG5dKlxcfSl8W14nXFxcXFxcclxcbiRdKSonLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7W157fVxcclxcbl0qXFx9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cblx0J2RhdGF0eXBlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86b3V0cHV0fHBhcmFtKVxcYlsgXFx0XStcXHcrWyBcXHRdKylcXHcrXFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9BenVyZS9iaWNlcC9ibG9iLzExNGEzMjUxYjRlNmUzMDA4MmE1ODcyOWYxOWE4Y2M0ZTM3NGZmYTYvc3JjL3RleHRtYXRlL2JpY2VwLnRtbGFuZ3VhZ2UjTDE4NFxuXHQna2V5d29yZCc6IC9cXGIoPzpleGlzdGluZ3xmb3J8aWZ8aW58bW9kdWxlfG51bGx8b3V0cHV0fHBhcmFtfHJlc291cmNlfHRhcmdldFNjb3BlfHZhcilcXGIvLFxuXG5cdCdkZWNvcmF0b3InOiAvQFxcdytcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVsgXFx0XSpcXCgpL2ksXG5cblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PT58JiY9P3xcXHxcXHw9P3xbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/XFw/PT98XFw/XFwuP3xbfjpdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy5iaWNlcFsnaW50ZXJwb2xhdGVkLXN0cmluZyddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnZXhwcmVzc2lvbiddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5iaWNlcDtcblxuUHJpc20ubGFuZ3VhZ2VzLmJpcmIgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvcj8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0L1xcYltBLVpdKD86W1xcZF9dKlthLXpBLVpdXFx3Kik/XFxiLyxcblxuXHRcdC8vIG1hdGNoZXMgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHJldHVybiB0eXBlcyAocGFyYW1ldGVycyBhcyB3ZWxsKS5cblx0XHQvXFxiKD86W0EtWl1cXHcqfCg/ISg/OnZhcnx2b2lkKVxcYilbYS16XVxcdyopKD89XFxzK1xcdytcXHMqWzssPSgpXSkvXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzc2VydHxicmVha3xjYXNlfGNsYXNzfGNvbnN0fGRlZmF1bHR8ZWxzZXxlbnVtfGZpbmFsfGZvbGxvd3N8Zm9yfGdyYWJ8aWZ8bmVzdHxuZXd8bmV4dHxub1NlZWJ8cmV0dXJufHN0YXRpY3xzd2l0Y2h8dGhyb3d8dmFyfHZvaWR8d2hpbGUpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXwmJnxcXHxcXHx8PDw9P3w+Pj0/fH4oPzpcXC89Pyk/fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcP3w6Lyxcblx0J3ZhcmlhYmxlJzogL1xcYlthLXpfXVxcdypcXGIvLFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2JpcmInLCAnZnVuY3Rpb24nLCB7XG5cdCdtZXRhZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvPFxcdys+Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuYmlzb24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge30pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdiaXNvbicsICdjb21tZW50Jywge1xuXHQnYmlzb24nOiB7XG5cdFx0Ly8gVGhpcyBzaG91bGQgbWF0Y2ggYWxsIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGVcblx0XHQvLyBpbmNsdWRpbmcgdGhlIHByb2xvZ3VlKHMpLCB0aGUgYmlzb24gZGVjbGFyYXRpb25zIGFuZFxuXHRcdC8vIHRoZSBncmFtbWFyIHJ1bGVzLlxuXHRcdHBhdHRlcm46IC9eKD86W14lXXwlKD8hJSkpKiUlW1xcc1xcU10qPyUlLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjJzoge1xuXHRcdFx0XHQvLyBBbGxvdyBmb3Igb25lIGxldmVsIG9mIG5lc3RlZCBicmFjZXNcblx0XHRcdFx0cGF0dGVybjogLyVcXHtbXFxzXFxTXSo/JVxcfXxcXHsoPzpcXHtbXn1dKlxcfXxbXnt9XSkqXFx9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eJT9cXHt8JT9cXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnYmlzb24tdmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvWyRAXSg/OjxbXlxccz5dKz4pP1tcXHckXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzx8Pi9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5jXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnY29tbWVudCc6IFByaXNtLmxhbmd1YWdlcy5jLmNvbW1lbnQsXG5cdFx0XHQnc3RyaW5nJzogUHJpc20ubGFuZ3VhZ2VzLmMuc3RyaW5nLFxuXHRcdFx0J3Byb3BlcnR5JzogL1xcUysoPz06KS8sXG5cdFx0XHQna2V5d29yZCc6IC8lXFx3Ky8sXG5cdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15AXSlcXGIoPzoweFtcXGRhLWZdK3xcXGQrKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLyVbJT9dfFt8OjtcXFtcXF08Pl0vXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJuZiA9IHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlxcclxcblwiXSpcInwnW15cXHJcXG4nXSonL1xuXHR9LFxuXHQnZGVmaW5pdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPFtePD5cXHJcXG5cXHRdKz4oPz1cXHMqOjo9KS8sXG5cdFx0YWxpYXM6IFsncnVsZScsICdrZXl3b3JkJ10sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXjx8PiQvXG5cdFx0fVxuXHR9LFxuXHQncnVsZSc6IHtcblx0XHRwYXR0ZXJuOiAvPFtePD5cXHJcXG5cXHRdKz4vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL148fD4kL1xuXHRcdH1cblx0fSxcblx0J29wZXJhdG9yJzogLzo6PXxbfCgpW1xcXXt9Kis/XXxcXC57M30vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmJuZiA9IFByaXNtLmxhbmd1YWdlcy5ibmY7XG5cblByaXNtLmxhbmd1YWdlcy5icmFpbmZ1Y2sgPSB7XG5cdCdwb2ludGVyJzoge1xuXHRcdHBhdHRlcm46IC88fD4vLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2luY3JlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwrLyxcblx0XHRhbGlhczogJ2luc2VydGVkJ1xuXHR9LFxuXHQnZGVjcmVtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8tLyxcblx0XHRhbGlhczogJ2RlbGV0ZWQnXG5cdH0sXG5cdCdicmFuY2hpbmcnOiB7XG5cdFx0cGF0dGVybjogL1xcW3xcXF0vLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvWy4sXS8sXG5cdCdjb21tZW50JzogL1xcUysvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYnJpZ2h0c2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC8oPzpcXGJyZW18JykuKi9pLFxuXHQnZGlyZWN0aXZlLXN0YXRlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSMoPzpjb25zdHxlbHNlKD86W1xcdCBdK2lmKT98ZW5kW1xcdCBdK2lmfGVycm9yfGlmKS4qL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZXJyb3ItbWVzc2FnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheI2Vycm9yKS4rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eIyg/OmNvbnN0fGVsc2UoPzpbXFx0IF0raWYpP3xlbmRbXFx0IF0raWZ8ZXJyb3J8aWYpLyxcblx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0fSxcblx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oW1xcclxcbnssXVtcXHQgXSopKD86KD8hXFxkKVxcdyt8XCIoPzpbXlwiXFxyXFxuXXxcIlwiKSpcIig/IVwiKSkoPz1bIFxcdF0qOikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcclxcbl18XCJcIikqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYkFzW1xcdCBdKylcXHcrL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpBc3xEaW18RWFjaHxFbHNlfEVsc2VpZnxFbmR8RXhpdHxGb3J8RnVuY3Rpb258R290b3xJZnxJbnxQcmludHxSZXR1cm58U3RlcHxTdG9wfFN1YnxUaGVufFRvfFdoaWxlKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1bXFx0IF0qXFwoKS8sXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCspPyg/OltlZF1bKy1dXFxkKyk/fCZoW2EtZlxcZF0rKVxcYlslJiEjXT8vaSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3w+Pj0/fDw8PT98PD58Wy0rKi9cXFxcPD5dPT98WzpePT9dfFxcYig/OmFuZHxtb2R8bm90fG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOygpW1xcXXt9XS8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpMSU5FX05VTSlcXGIvaVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJyaWdodHNjcmlwdFsnZGlyZWN0aXZlLXN0YXRlbWVudCddLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5icmlnaHRzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5icm8gPSB7XG5cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXCRdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpdGFsaWMnOiAvXFxiKD86RklYTUV8VE9ET3xYWFgpXFxiL1xuXHRcdH1cblx0fSxcblxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiAvXFxiW1RGXVxcYi8sXG5cblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXZlbnR8ZnVuY3Rpb258aG9vaylbIFxcdF0rKVxcdysoPzo6OlxcdyspPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdidWlsdGluJzogLyg/OkAoPzpsb2FkKD86LSg/OnBsdWdpbnxzaWdzKSk/fHVubG9hZHxwcmVmaXhlc3xpZm4/ZGVmfGVsc2V8KD86ZW5kKT9pZnxESVJ8RklMRU5BTUUpKXwoPzomPyg/OmFkZF9mdW5jfGNyZWF0ZV9leHBpcmV8ZGVmYXVsdHxkZWxldGVfZnVuY3xlbmNyeXB0fGVycm9yX2hhbmRsZXJ8ZXhwaXJlX2Z1bmN8Z3JvdXB8bG9nfG1lcmdlYWJsZXxvcHRpb25hbHxwZXJzaXN0ZW50fHByaW9yaXR5fHJhd19vdXRwdXR8cmVhZF9leHBpcmV8cmVkZWZ8cm90YXRlX2ludGVydmFsfHJvdGF0ZV9zaXplfHN5bmNocm9uaXplZHx0eXBlX2NvbHVtbnx3cml0ZV9leHBpcmUpKS8sXG5cblx0J2NvbnN0YW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxiY29uc3RbIFxcdF0rKVxcdysvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86YWRkfGFkZHJ8YWxhcm18YW55fGJvb2x8YnJlYWt8Y29uc3R8Y29udGludWV8Y291bnR8ZGVsZXRlfGRvdWJsZXxlbHNlfGVudW18ZXZlbnR8ZXhwb3J0fGZpbGV8Zm9yfGZ1bmN0aW9ufGdsb2JhbHxob29rfGlmfGlufGludHxpbnRlcnZhbHxsb2NhbHxtb2R1bGV8bmV4dHxvZnxvcGFxdWV8cGF0dGVybnxwb3J0fHByaW50fHJlY29yZHxyZXR1cm58c2NoZWR1bGV8c2V0fHN0cmluZ3xzdWJuZXR8dGFibGV8dGltZXx0aW1lb3V0fHVzaW5nfHZlY3Rvcnx3aGVuKVxcYi8sXG5cblx0J29wZXJhdG9yJzogLy0tP3xcXCtcXCs/fCE9Pz0/fDw9P3w+PT98PT0/PT98JiZ8XFx8XFx8P3xcXD98XFwqfFxcL3x+fFxcXnwlLyxcblxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcblxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzcyAqL1xuXG4vLyAxQzpFbnRlcnByaXNlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGl2ZXJzdXMyMy9cbi8vXG5QcmlzbS5sYW5ndWFnZXMuYnNsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiBbXG5cdFx0Ly8gXHUwNDIxXHUwNDQyXHUwNDQwXHUwNDNFXHUwNDNBXHUwNDM4XG5cdFx0Ly8gU3RyaW5nc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gXHUwNDE0XHUwNDMwXHUwNDQyXHUwNDMwIFx1MDQzOCBcdTA0MzJcdTA0NDBcdTA0MzVcdTA0M0NcdTA0NEZcblx0XHQvLyBEYXRlICYgdGltZVxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8nKD86W14nXFxyXFxuXFxcXF18XFxcXC4pKicvXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHQvLyBSVVxuXHRcdFx0cGF0dGVybjogLyhefFteXFx3XFx1MDQwMC1cXHUwNDg0XFx1MDQ4Ny1cXHUwNTJmXFx1MWQyYlxcdTFkNzhcXHUyZGUwLVxcdTJkZmZcXHVhNjQwLVxcdWE2OWZcXHVmZTJlXFx1ZmUyZl0pKD86XHUwNDNGXHUwNDNFXHUwNDNBXHUwNDMwfFx1MDQzNFx1MDQzQlx1MDQ0RnxcdTA0M0RcdTA0M0VcdTA0MzJcdTA0NEJcdTA0Mzl8XHUwNDNGXHUwNDQwXHUwNDM1XHUwNDQwXHUwNDMyXHUwNDMwXHUwNDQyXHUwNDRDfFx1MDQzRlx1MDQzRVx1MDQzRlx1MDQ0Qlx1MDQ0Mlx1MDQzQVx1MDQzMHxcdTA0MzhcdTA0NDFcdTA0M0FcdTA0M0JcdTA0NEVcdTA0NDdcdTA0MzVcdTA0M0RcdTA0MzhcdTA0MzV8XHUwNDMyXHUwNDRCXHUwNDM3XHUwNDMyXHUwNDMwXHUwNDQyXHUwNDRDXHUwNDM4XHUwNDQxXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1fFx1MDQzOFx1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNXxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0M0ZcdTA0M0VcdTA0M0ZcdTA0NEJcdTA0NDJcdTA0M0FcdTA0Mzh8XHUwNDNEXHUwNDM1XHUwNDNFXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNEXHUwNDNFfFx1MDQ0NFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQ0RnxcdTA0M0ZcdTA0MzVcdTA0NDBcdTA0MzVcdTA0M0N8XHUwNDMyXHUwNDNFXHUwNDM3XHUwNDMyXHUwNDQwXHUwNDMwXHUwNDQyfFx1MDQzQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQ0NFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQzOHxcdTA0MzVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDM4XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzRlx1MDQ0MFx1MDQzRVx1MDQ0Nlx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQ0MFx1MDQzMHxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0M0ZcdTA0NDBcdTA0M0VcdTA0NDZcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NDBcdTA0NEJ8XHUwNDQyXHUwNDNFXHUwNDMzXHUwNDM0XHUwNDMwfFx1MDQzN1x1MDQzRFx1MDQzMFx1MDQ0N3xcdTA0NERcdTA0M0FcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0NDBcdTA0NDJ8XHUwNDNBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzOFx1MDQzN3xcdTA0M0FcdTA0MzBcdTA0MzZcdTA0MzRcdTA0M0VcdTA0MzNcdTA0M0V8XHUwNDM4XHUwNDQxXHUwNDQyXHUwNDM4XHUwNDNEXHUwNDMwfFx1MDQzQlx1MDQzRVx1MDQzNlx1MDQ0Q3xcdTA0M0ZcdTA0M0V8XHUwNDQ2XHUwNDM4XHUwNDNBXHUwNDNCfFx1MDQzQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQ0Nlx1MDQzOFx1MDQzQVx1MDQzQlx1MDQzMHxcdTA0MzJcdTA0NEJcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0M0RcdTA0MzhcdTA0NDJcdTA0NEMpKD8hW1xcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gRU5cblx0XHRcdHBhdHRlcm46IC9cXGIoPzpicmVha3xkb3xlYWNofGVsc2V8ZWxzZWlmfGVuZGRvfGVuZGZ1bmN0aW9ufGVuZGlmfGVuZHByb2NlZHVyZXxlbmR0cnl8ZXhjZXB0fGV4ZWN1dGV8ZXhwb3J0fGZhbHNlfGZvcnxmdW5jdGlvbnxpZnxpbnxuZXd8bnVsbHxwcm9jZWR1cmV8cmFpc2V8cmV0dXJufHRoZW58dG98dHJ1ZXx0cnl8dW5kZWZpbmVkfHZhbHx2YXJ8d2hpbGUpXFxiL2lcblx0XHR9XG5cdF0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyheKD89XFxkKXxbXlxcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKSg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzpFWystXT9cXGQrKT8vaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvWzw+K1xcLSovXT0/fFslPV0vLFxuXHRcdC8vIFJVXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3XFx1MDQwMC1cXHUwNDg0XFx1MDQ4Ny1cXHUwNTJmXFx1MWQyYlxcdTFkNzhcXHUyZGUwLVxcdTJkZmZcXHVhNjQwLVxcdWE2OWZcXHVmZTJlXFx1ZmUyZl0pKD86XHUwNDM4fFx1MDQzOFx1MDQzQlx1MDQzOHxcdTA0M0RcdTA0MzUpKD8hW1xcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRU5cblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YW5kfG5vdHxvcilcXGIvaVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1xcKFxcLnxcXC5cXCl8WygpXFxbXFxdOjssLl0vLFxuXHQnZGlyZWN0aXZlJzogW1xuXHRcdC8vIFx1MDQyMlx1MDQzNVx1MDQzM1x1MDQzOCBcdTA0M0ZcdTA0NDBcdTA0MzVcdTA0M0ZcdTA0NDBcdTA0M0VcdTA0NDZcdTA0MzVcdTA0NDFcdTA0NDFcdTA0M0VcdTA0NDBcdTA0MzAgXHUwNDMyXHUwNDM4XHUwNDM0XHUwNDMwICZcdTA0MUFcdTA0M0JcdTA0MzhcdTA0MzVcdTA0M0RcdTA0NDIsICZcdTA0MjFcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0NDAsIC4uLlxuXHRcdC8vIFByZXByb2Nlc3NvciB0YWdzIG9mIHRoZSB0eXBlICZDbGllbnQsICZTZXJ2ZXIsIC4uLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopJi4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQvLyBcdTA0MThcdTA0M0RcdTA0NDFcdTA0NDJcdTA0NDBcdTA0NDNcdTA0M0FcdTA0NDZcdTA0MzhcdTA0MzggXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDNFXHUwNDQ2XHUwNDM1XHUwNDQxXHUwNDQxXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzMlx1MDQzOFx1MDQzNFx1MDQzMDpcblx0XHQvLyAjXHUwNDE1XHUwNDQxXHUwNDNCXHUwNDM4IFx1MDQyMVx1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzNVx1MDQ0MCBcdTA0MjJcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzBcblx0XHQvLyAuLi5cblx0XHQvLyAjXHUwNDFBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDE1XHUwNDQxXHUwNDNCXHUwNDM4XG5cdFx0Ly8gUHJlcHJvY2Vzc29yIGluc3RydWN0aW9ucyBvZiB0aGUgZm9ybTpcblx0XHQvLyAjSWYgU2VydmVyIFRoZW5cblx0XHQvLyAuLi5cblx0XHQvLyAjRW5kSWZcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSMuKi9nbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9XG5cdF1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5vc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzWydic2wnXTtcblxuLy8gaHR0cHM6Ly9jZmRvY3Mub3JnL3NjcmlwdFxuUHJpc20ubGFuZ3VhZ2VzLmNmc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD86XnxbXi5dKUBbXFx3XFwuXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxicmVha3xjYXRjaHxjb21wb25lbnR8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8ZnVuY3Rpb258aWZ8aW58aW5jbHVkZXxwYWNrYWdlfHByaXZhdGV8cHJvcGVydHl8cHVibGljfHJlbW90ZXxyZXF1aXJlZHxyZXRocm93fHJldHVybnxzdGF0aWN8c3dpdGNofHRocm93fHRyeXx2YXJ8d2hpbGV8eG1sKVxcYig/IVxccyo9KS8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvXFwrXFwrfC0tfCYmfFxcfFxcfHw6Onw9PnxbIT1dPT18Wy0rKi8lJnxeIT08Pl09P3xcXD8oPzpcXC58Oik/fDovLFxuXHRcdC9cXGIoPzphbmR8Y29udGFpbnN8ZXF8ZXF1YWx8ZXF2fGd0fGd0ZXxpbXB8aXN8bHR8bHRlfG1vZHxub3R8b3J8eG9yKVxcYi9cblx0XSxcblx0J3Njb3BlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphcHBsaWNhdGlvbnxhcmd1bWVudHN8Y2dpfGNsaWVudHxjb29raWV8bG9jYWx8c2Vzc2lvbnxzdXBlcnx0aGlzfHZhcmlhYmxlcylcXGIvLFxuXHRcdGFsaWFzOiAnZ2xvYmFsJ1xuXHR9LFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGFycmF5fGJpbmFyeXxib29sZWFufGRhdGV8Z3VpZHxudW1lcmljfHF1ZXJ5fHN0cmluZ3xzdHJ1Y3R8dXVpZHx2b2lkfHhtbClcXGIvLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2Nmc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdC8vIFRoaXMgbXVzdCBiZSBkZWNsYXJlZCBiZWZvcmUga2V5d29yZCBiZWNhdXNlIHdlIHVzZSBcImZ1bmN0aW9uXCIgaW5zaWRlIHRoZSBsb29rYWhlYWRcblx0J2Z1bmN0aW9uLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC9bXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqWz06XVxccyooPzpcXGJmdW5jdGlvblxcYnwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKVxccyo9PikpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9XG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5jZnNjcmlwdFsnY2xhc3MtbmFtZSddO1xuUHJpc20ubGFuZ3VhZ2VzLmNmYyA9IFByaXNtLmxhbmd1YWdlc1snY2ZzY3JpcHQnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNoYWlzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHR7XG5cdFx0XHQvLyBlLmcuIGNsYXNzIFJlY3RhbmdsZSB7IC4uLiB9XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmNsYXNzXFxzKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGUuZy4gYXR0ciBSZWN0YW5nbGU6OmhlaWdodCwgZGVmIFJlY3RhbmdsZTo6YXJlYSgpIHsgLi4uIH1cblx0XHRcdHBhdHRlcm46IC8oXFxiKD86YXR0cnxkZWYpXFxzKylcXHcrKD89XFxzKjo6KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphdHRyfGF1dG98YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZ8ZGVmYXVsdHxlbHNlfGZpbmFsbHl8Zm9yfGZ1bnxnbG9iYWx8aWZ8cmV0dXJufHN3aXRjaHx0aGlzfHRyeXx2YXJ8d2hpbGUpXFxiLyxcblx0J251bWJlcic6IFtcblx0XHRQcmlzbS5sYW5ndWFnZXMuY3BwLm51bWJlcixcblx0XHQvXFxiKD86SW5maW5pdHl8TmFOKVxcYi9cblx0XSxcblx0J29wZXJhdG9yJzogLz4+PT98PDw9P3xcXHxcXHx8JiZ8Ols6PV0/fC0tfFxcK1xcK3xbPSE8PitcXC0qLyV8Jl5dPT98Wz9+XXxgW15gXFxyXFxuXXsxLDR9YC8sXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY2hhaXNjcmlwdCcsICdvcGVyYXRvcicsIHtcblx0J3BhcmFtZXRlci10eXBlJzoge1xuXHRcdC8vIGUuZy4gZGVmIGZvbyhpbnQgeCwgVmVjdG9yIHkpIHsuLi59XG5cdFx0cGF0dGVybjogLyhbLChdXFxzKilcXHcrKD89XFxzK1xcdykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NoYWlzY3JpcHQnLCAnc3RyaW5nJywge1xuXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlwiJFxcXFxdfFxcXFxbXFxzXFxTXXxcXCQoPyFcXHspfFxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tee31dKlxcfSkqXFx9KSpcXH0pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkXFx7KD86W157fV18XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKlxcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLWV4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNoYWlzY3JpcHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuY2lsID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyhefFxcVylcXC5bYS16XSsoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblxuXHQvLyBBY3R1YWxseSBhbiBhc3NlbWJseSByZWZlcmVuY2Vcblx0J3ZhcmlhYmxlJzogL1xcW1tcXHdcXC5dK1xcXS8sXG5cblxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhbnNpfGFzc2VtYmx5fGF1dG98YXV0b2NoYXJ8YmVmb3JlZmllbGRpbml0fGJvb2x8YnN0cnxieXZhbHN0cnxjYXRjaHxjaGFyfGNpbHxjbGFzc3xjdXJyZW5jeXxkYXRlfGRlY2ltYWx8ZGVmYXVsdHxlbnVtfGVycm9yfGV4cGxpY2l0fGV4dGVuZHN8ZXh0ZXJufGZhbWFuZGFzc2VtfGZhbWlseXxmYW1vcmFzc2VtfGZpbmFsKD86bHkpP3xmbG9hdDMyfGZsb2F0NjR8aGlkZWJ5c2lnfHU/aW50KD86OHwxNnwzMnw2NCk/fGlhbnR8aWRpc3BhdGNofGltcGxlbWVudHN8aW1wb3J0fGluaXRvbmx5fGluc3RhbmNlfGludGVyZmFjZXxpdW5rbm93bnxsaXRlcmFsfGxwc3RyfGxwc3RydWN0fGxwdHN0cnxscHdzdHJ8bWFuYWdlZHxtZXRob2R8bmF0aXZlKD86VHlwZSk/fG5lc3RlZHxuZXdzbG90fG9iamVjdCg/OnJlZik/fHBpbnZva2VpbXBsfHByaXZhdGV8cHJpdmF0ZXNjb3BlfHB1YmxpY3xyZXFzZWNvYmp8cnRzcGVjaWFsbmFtZXxydW50aW1lfHNlYWxlZHxzZXF1ZW50aWFsfHNlcmlhbGl6YWJsZXxzcGVjaWFsbmFtZXxzdGF0aWN8c3RyaW5nfHN0cnVjdHxzeXNjaGFyfHRic3RyfHVuaWNvZGV8dW5tYW5hZ2VkZXhwfHVuc2lnbmVkfHZhbHVlKD86dHlwZSk/fHZhcmlhbnR8dmlydHVhbHx2b2lkKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzogL1xcYig/Oig/OmNvbnN0cmFpbmVkfG5vfHJlYWRvbmx5fHRhaWx8dW5hbGlnbmVkfHZvbGF0aWxlKVxcLik/KD86Y29udlxcLig/OltpdV1bMTI0OF0/fG92ZlxcLltpdV1bMTI0OF0/KD86XFwudW4pP3xyXFwudW58cjR8cjgpfGxkY1xcLig/Omk0KD86XFwuXFxkK3xcXC5bbU1dMXxcXC5zKT98aTh8cjR8cjgpfGxkZWxlbSg/OlxcLltpdV1bMTI0OF0/fFxcLnJbNDhdfFxcLnJlZnxhKT98bGRpbmRcXC4oPzpbaXVdWzEyNDhdP3xyWzQ4XXxyZWYpfHN0ZWxlbVxcLj8oPzppWzEyNDhdP3xyWzQ4XXxyZWYpP3xzdGluZFxcLig/OmlbMTI0OF0/fHJbNDhdfHJlZik/fGVuZCg/OmZhdWx0fGZpbHRlcnxmaW5hbGx5KXxsZGFyZyg/OlxcLlswLTNzXXxhKD86XFwucyk/KT98bGRsb2MoPzpcXC5cXGQrfFxcLnMpP3xzdWIoPzpcXC5vdmYoPzpcXC51bik/KT98bXVsKD86XFwub3ZmKD86XFwudW4pPyk/fGFkZCg/OlxcLm92Zig/OlxcLnVuKT8pP3xzdGxvYyg/OlxcLlswLTNzXSk/fHJlZmFueSg/OnR5cGV8dmFsKXxibHQoPzpcXC51bik/KD86XFwucyk/fGJsZSg/OlxcLnVuKT8oPzpcXC5zKT98Ymd0KD86XFwudW4pPyg/OlxcLnMpP3xiZ2UoPzpcXC51bik/KD86XFwucyk/fHVuYm94KD86XFwuYW55KT98aW5pdCg/OmJsa3xvYmopfGNhbGwoPzppfHZpcnQpP3xicmZhbHNlKD86XFwucyk/fGJuZVxcLnVuKD86XFwucyk/fGxkbG9jYSg/OlxcLnMpP3xicnplcm8oPzpcXC5zKT98YnJ0cnVlKD86XFwucyk/fGJybnVsbCg/OlxcLnMpP3xicmluc3QoPzpcXC5zKT98c3RhcmcoPzpcXC5zKT98bGVhdmUoPzpcXC5zKT98c2hyKD86XFwudW4pP3xyZW0oPzpcXC51bik/fGRpdig/OlxcLnVuKT98Y2x0KD86XFwudW4pP3xhbGlnbm1lbnR8Y2FzdGNsYXNzfGxkdmlydGZ0bnxiZXEoPzpcXC5zKT98Y2tmaW5pdGV8bGRzZmxkYXxsZHRva2VufGxvY2FsbG9jfG1rcmVmYW55fHJldGhyb3d8Y2d0XFwudW58YXJnbGlzdHxzd2l0Y2h8c3RzZmxkfHNpemVvZnxuZXdvYmp8bmV3YXJyfGxkc2ZsZHxsZG51bGx8bGRmbGRhfGlzaW5zdHx0aHJvd3xzdG9ianxzdGZsZHxsZHN0cnxsZG9ianxsZGxlbnxsZGZ0bnxsZGZsZHxjcG9ianxjcGJsa3xicmVha3xiclxcLnN8eG9yfHNobHxyZXR8cG9wfG5vdHxub3B8bmVnfGptcHxkdXB8Y2d0fGNlcXxib3h8YW5kfG9yfGJyKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYi0/KD86MHhbMC05YS1mXSt8XFxkKykoPzpcXC5bMC05YS1mXSspP1xcYi9pLFxuXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLDo9XXxJTF9bMC05QS1aYS16XSsvXG59O1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vamVsdWFyZC9wcmlzbS1jbG9qdXJlXG5QcmlzbS5sYW5ndWFnZXMuY2xvanVyZSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzogL1xcXFxcXHcrLyxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1xccygpXFxbXFxde30sXSk6Oj9bXFx3KishPyc8Pj0vLi1dKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcKCkoPzotfC0+fC0+PnxcXC58XFwuXFwufFxcKnxcXC98XFwrfDx8PD18PXw9PXw+fD49fGFjY2Vzc29yfGFnZW50fGFnZW50LWVycm9yc3xhZ2V0fGFsZW5ndGh8YWxsLW5zfGFsdGVyfGFuZHxhcHBlbmQtY2hpbGR8YXBwbHl8YXJyYXktbWFwfGFzZXR8YXNldC1ib29sZWFufGFzZXQtYnl0ZXxhc2V0LWNoYXJ8YXNldC1kb3VibGV8YXNldC1mbG9hdHxhc2V0LWludHxhc2V0LWxvbmd8YXNldC1zaG9ydHxhc3NlcnR8YXNzb2N8YXdhaXR8YXdhaXQtZm9yfGJlYW58YmluZGluZ3xiaXQtYW5kfGJpdC1ub3R8Yml0LW9yfGJpdC1zaGlmdC1sZWZ0fGJpdC1zaGlmdC1yaWdodHxiaXQteG9yfGJvb2xlYW58YnJhbmNoXFw/fGJ1dGxhc3R8Ynl0ZXxjYXN0fGNoYXJ8Y2hpbGRyZW58Y2xhc3N8Y2xlYXItYWdlbnQtZXJyb3JzfGNvbW1lbnR8Y29tbXV0ZXxjb21wfGNvbXBhcmF0b3J8Y29tcGxlbWVudHxjb25jYXR8Y29uZHxjb25qfGNvbnN8Y29uc3RhbnRseXxjb25zdHJ1Y3QtcHJveHl8Y29udGFpbnNcXD98Y291bnR8Y3JlYXRlLW5zfGNyZWF0ZS1zdHJ1Y3R8Y3ljbGV8ZGVjfGRlY2xhcmV8ZGVmfGRlZi18ZGVmaW5saW5lfGRlZmludGVyZmFjZXxkZWZtYWNyb3xkZWZtZXRob2R8ZGVmbXVsdGl8ZGVmbnxkZWZuLXxkZWZvbmNlfGRlZnByb2plY3R8ZGVmcHJvdG9jb2x8ZGVmcmVjb3JkfGRlZnN0cnVjdHxkZWZ0eXBlfGRlcmVmfGRpZmZlcmVuY2V8ZGlzanxkaXNzb2N8ZGlzdGluY3R8ZG98ZG9hbGx8ZG9jfGRvcnVufGRvc2VxfGRvc3luY3xkb3RpbWVzfGRvdG98ZG91YmxlfGRvd258ZHJvcHxkcm9wLXdoaWxlfGVkaXR8ZW5kXFw/fGVuc3VyZXxldmFsfGV2ZXJ5XFw/fGZhbHNlXFw/fGZmaXJzdHxmaWxlLXNlcXxmaWx0ZXJ8ZmluZHxmaW5kLWRvY3xmaW5kLW5zfGZpbmQtdmFyfGZpcnN0fGZsb2F0fGZsdXNofGZufGZuc2VxfGZvcnxmcmVzdHxnZW5zeW18Z2V0fGdldC1wcm94eS1jbGFzc3xoYXNoLW1hcHxoYXNoLXNldHxpZGVudGljYWxcXD98aWRlbnRpdHl8aWZ8aWYtbGV0fGlmLW5vdHxpbXBvcnR8aW4tbnN8aW5jfGluZGV4fGluc2VydC1jaGlsZHxpbnNlcnQtbGVmdHxpbnNlcnQtcmlnaHR8aW5zcGVjdC10YWJsZXxpbnNwZWN0LXRyZWV8aW5zdGFuY2VcXD98aW50fGludGVybGVhdmV8aW50ZXJzZWN0aW9ufGludG98aW50by1hcnJheXxpdGVyYXRlfGpvaW58a2V5fGtleXN8a2V5d29yZHxrZXl3b3JkXFw/fGxhc3R8bGF6eS1jYXR8bGF6eS1jb25zfGxlZnR8bGVmdHN8bGV0fGxpbmUtc2VxfGxpc3R8bGlzdFxcKnxsb2FkfGxvYWQtZmlsZXxsb2NraW5nfGxvbmd8bG9vcHxtYWNyb2V4cGFuZHxtYWNyb2V4cGFuZC0xfG1ha2UtYXJyYXl8bWFrZS1ub2RlfG1hcHxtYXAtaW52ZXJ0fG1hcFxcP3xtYXBjYXR8bWF4fG1heC1rZXl8bWVtZm58bWVyZ2V8bWVyZ2Utd2l0aHxtZXRhfG1pbnxtaW4ta2V5fG1vbml0b3ItZW50ZXJ8bmFtZXxuYW1lc3BhY2V8bmVnXFw/fG5ld3xuZXdsaW5lfG5leHR8bmlsXFw/fG5vZGV8bm90fG5vdC1hbnlcXD98bm90LWV2ZXJ5XFw/fG5vdD18bnN8bnMtaW1wb3J0c3xucy1pbnRlcm5zfG5zLW1hcHxucy1uYW1lfG5zLXB1YmxpY3N8bnMtcmVmZXJzfG5zLXJlc29sdmV8bnMtdW5tYXB8bnRofG50aHJlc3R8b3J8cGFyc2V8cGFydGlhbHxwYXRofHBlZWt8cG9wfHBvc1xcP3xwcnxwci1zdHJ8cHJpbnR8cHJpbnQtc3RyfHByaW50bG58cHJpbnRsbi1zdHJ8cHJufHBybi1zdHJ8cHJvamVjdHxwcm94eXxwcm94eS1tYXBwaW5nc3xxdW90fHF1b3RlfHJhbmR8cmFuZC1pbnR8cmFuZ2V8cmUtZmluZHxyZS1ncm91cHN8cmUtbWF0Y2hlcnxyZS1tYXRjaGVzfHJlLXBhdHRlcm58cmUtc2VxfHJlYWR8cmVhZC1saW5lfHJlY3VyfHJlZHVjZXxyZWZ8cmVmLXNldHxyZWZlcnxyZW18cmVtb3ZlfHJlbW92ZS1tZXRob2R8cmVtb3ZlLW5zfHJlbmFtZXxyZW5hbWUta2V5c3xyZXBlYXR8cmVwbGFjZXxyZXBsaWNhdGV8cmVzb2x2ZXxyZXN0fHJlc3VsdHNldC1zZXF8cmV2ZXJzZXxyZmlyc3R8cmlnaHR8cmlnaHRzfHJvb3R8cnJlc3R8cnNlcXxzZWNvbmR8c2VsZWN0fHNlbGVjdC1rZXlzfHNlbmR8c2VuZC1vZmZ8c2VxfHNlcS16aXB8c2VxXFw/fHNldHxzZXQhfHNob3J0fHNsdXJwfHNvbWV8c29ydHxzb3J0LWJ5fHNvcnRlZC1tYXB8c29ydGVkLW1hcC1ieXxzb3J0ZWQtc2V0fHNwZWNpYWwtc3ltYm9sXFw/fHNwbGl0LWF0fHNwbGl0LXdpdGh8c3RyfHN0cmluZ1xcP3xzdHJ1Y3R8c3RydWN0LW1hcHxzdWJzfHN1YnZlY3xzeW1ib2x8c3ltYm9sXFw/fHN5bmN8dGFrZXx0YWtlLW50aHx0YWtlLXdoaWxlfHRlc3R8dGhyb3d8dGltZXx0by1hcnJheXx0by1hcnJheS0yZHx0cmVlLXNlcXx0cnVlXFw/fHRyeXx1bmlvbnx1cHx1cGRhdGUtcHJveHl8dmFsfHZhbHN8dmFyfHZhci1nZXR8dmFyLXNldHx2YXJcXD98dmVjdG9yfHZlY3Rvci16aXB8dmVjdG9yXFw/fHdoZW58d2hlbi1maXJzdHx3aGVuLWxldHx3aGVuLW5vdHx3aXRoLWxvY2FsLXZhcnN8d2l0aC1tZXRhfHdpdGgtb3Blbnx3aXRoLW91dC1zdHJ8eG1sLXNlcXx4bWwtemlwfHplcm9cXD98emlwbWFwfHppcHBlcikoPz1bXFxzKV18JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bmlsfHRydWUpXFxiLyxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHckQF0pKD86XFxkKyg/OlsvLl1cXGQrKT8oPzplWystXT9cXGQrKT98MHhbYS1mMC05XSt8WzEtOV1cXGQ/clthLXowLTldKylbbG1uXT8oPyFbXFx3JEBdKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXiddKVxcKClbXFx3KishPyc8Pj0vLi1dKyg/PVtcXHMpXXwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvWyNAXmB+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31cXFtcXF0oKSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNtYWtlID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXFxcXFwiXXxcXFxcLikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7KD86W157fSRdfFxcJFxce1tee30kXSpcXH0pKlxcfS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCRcXHt8XFx9Lyxcblx0XHRcdFx0XHQndmFyaWFibGUnOiAvXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcYig/OkNNQUtFX1xcdyt8XFx3K18oPzooPzpCSU5BUll8U09VUkNFKV9ESVJ8REVTQ1JJUFRJT058SE9NRVBBR0VfVVJMfFJPT1R8VkVSU0lPTig/Ol9NQUpPUnxfTUlOT1J8X1BBVENIfF9UV0VBSyk/KXwoPzpBTkRST0lEfEFQUExFfEJPUkxBTkR8QlVJTERfU0hBUkVEX0xJQlN8Q0FDSEV8Q1BBQ0tfKD86QUJTT0xVVEVfREVTVElOQVRJT05fRklMRVN8Q09NUE9ORU5UX0lOQ0xVREVfVE9QTEVWRUxfRElSRUNUT1JZfEVSUk9SX09OX0FCU09MVVRFX0lOU1RBTExfREVTVElOQVRJT058SU5DTFVERV9UT1BMRVZFTF9ESVJFQ1RPUll8SU5TVEFMTF9ERUZBVUxUX0RJUkVDVE9SWV9QRVJNSVNTSU9OU3xJTlNUQUxMX1NDUklQVHxQQUNLQUdJTkdfSU5TVEFMTF9QUkVGSVh8U0VUX0RFU1RESVJ8V0FSTl9PTl9BQlNPTFVURV9JTlNUQUxMX0RFU1RJTkFUSU9OKXxDVEVTVF8oPzpCSU5BUllfRElSRUNUT1JZfEJVSUxEX0NPTU1BTkR8QlVJTERfTkFNRXxCWlJfQ09NTUFORHxCWlJfVVBEQVRFX09QVElPTlN8Q0hBTkdFX0lEfENIRUNLT1VUX0NPTU1BTkR8Q09ORklHVVJBVElPTl9UWVBFfENPTkZJR1VSRV9DT01NQU5EfENPVkVSQUdFX0NPTU1BTkR8Q09WRVJBR0VfRVhUUkFfRkxBR1N8Q1VSTF9PUFRJT05TfENVU1RPTV8oPzpDT1ZFUkFHRV9FWENMVURFfEVSUk9SX0VYQ0VQVElPTnxFUlJPUl9NQVRDSHxFUlJPUl9QT1NUX0NPTlRFWFR8RVJST1JfUFJFX0NPTlRFWFR8TUFYSU1VTV9GQUlMRURfVEVTVF9PVVRQVVRfU0laRXxNQVhJTVVNX05VTUJFUl9PRl8oPzpFUlJPUlN8V0FSTklOR1MpfE1BWElNVU1fUEFTU0VEX1RFU1RfT1VUUFVUX1NJWkV8TUVNQ0hFQ0tfSUdOT1JFfFBPU1RfTUVNQ0hFQ0t8UE9TVF9URVNUfFBSRV9NRU1DSEVDS3xQUkVfVEVTVHxURVNUU19JR05PUkV8V0FSTklOR19FWENFUFRJT058V0FSTklOR19NQVRDSCl8Q1ZTX0NIRUNLT1VUfENWU19DT01NQU5EfENWU19VUERBVEVfT1BUSU9OU3xEUk9QX0xPQ0FUSU9OfERST1BfTUVUSE9EfERST1BfU0lURXxEUk9QX1NJVEVfQ0RBU0h8RFJPUF9TSVRFX1BBU1NXT1JEfERST1BfU0lURV9VU0VSfEVYVFJBX0NPVkVSQUdFX0dMT0J8R0lUX0NPTU1BTkR8R0lUX0lOSVRfU1VCTU9EVUxFU3xHSVRfVVBEQVRFX0NVU1RPTXxHSVRfVVBEQVRFX09QVElPTlN8SEdfQ09NTUFORHxIR19VUERBVEVfT1BUSU9OU3xMQUJFTFNfRk9SX1NVQlBST0pFQ1RTfE1FTU9SWUNIRUNLXyg/OkNPTU1BTkR8Q09NTUFORF9PUFRJT05TfFNBTklUSVpFUl9PUFRJT05TfFNVUFBSRVNTSU9OU19GSUxFfFRZUEUpfE5JR0hUTFlfU1RBUlRfVElNRXxQNF9DTElFTlR8UDRfQ09NTUFORHxQNF9PUFRJT05TfFA0X1VQREFURV9PUFRJT05TfFJVTl9DVVJSRU5UX1NDUklQVHxTQ1BfQ09NTUFORHxTSVRFfFNPVVJDRV9ESVJFQ1RPUll8U1VCTUlUX1VSTHxTVk5fQ09NTUFORHxTVk5fT1BUSU9OU3xTVk5fVVBEQVRFX09QVElPTlN8VEVTVF9MT0FEfFRFU1RfVElNRU9VVHxUUklHR0VSX1NJVEV8VVBEQVRFX0NPTU1BTkR8VVBEQVRFX09QVElPTlN8VVBEQVRFX1ZFUlNJT05fT05MWXxVU0VfTEFVTkNIRVJTKXxDWUdXSU58RU5WfEVYRUNVVEFCTEVfT1VUUFVUX1BBVEh8R0hTLU1VTFRJfElPU3xMSUJSQVJZX09VVFBVVF9QQVRIfE1JTkdXfE1TVkMoPzoxMHwxMXwxMnwxNHw2MHw3MHw3MXw4MHw5MHxfSURFfF9UT09MU0VUX1ZFUlNJT058X1ZFUlNJT04pP3xNU1lTfFBST0pFQ1RfTkFNRXxVTklYfFdJTjMyfFdJTkNFfFdJTkRPV1NfUEhPTkV8V0lORE9XU19TVE9SRXxYQ09ERSkpXFxiLyxcblx0J3Byb3BlcnR5JzogL1xcYig/OmN4eF9cXHcrfCg/OkFSQ0hJVkVfT1VUUFVUXyg/OkRJUkVDVE9SWXxOQU1FKXxDT01QSUxFX0RFRklOSVRJT05TfENPTVBJTEVfUERCX05BTUV8Q09NUElMRV9QREJfT1VUUFVUX0RJUkVDVE9SWXxFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRHxJTVBPUlRFRF8oPzpJTVBMSUJ8TElCTkFNRXxMSU5LX0RFUEVOREVOVF9MSUJSQVJJRVN8TElOS19JTlRFUkZBQ0VfTEFOR1VBR0VTfExJTktfSU5URVJGQUNFX0xJQlJBUklFU3xMSU5LX0lOVEVSRkFDRV9NVUxUSVBMSUNJVFl8TE9DQVRJT058Tk9fU09OQU1FfE9CSkVDVFN8U09OQU1FKXxJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OfExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWXxMSUJSQVJZX09VVFBVVF9OQU1FfExJTktfRkxBR1N8TElOS19JTlRFUkZBQ0VfTElCUkFSSUVTfExJTktfSU5URVJGQUNFX01VTFRJUExJQ0lUWXxMT0NBVElPTnxNQVBfSU1QT1JURURfQ09ORklHfE9TWF9BUkNISVRFQ1RVUkVTfE9VVFBVVF9OQU1FfFBEQl9OQU1FfFBEQl9PVVRQVVRfRElSRUNUT1JZfFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWXxSVU5USU1FX09VVFBVVF9OQU1FfFNUQVRJQ19MSUJSQVJZX0ZMQUdTfFZTX0NTSEFSUHxWU19ET1RORVRfUkVGRVJFTkNFUFJPUHxWU19ET1RORVRfUkVGRVJFTkNFfFZTX0dMT0JBTF9TRUNUSU9OX1BPU1R8VlNfR0xPQkFMX1NFQ1RJT05fUFJFfFZTX0dMT0JBTHxYQ09ERV9BVFRSSUJVVEUpX1xcdyt8XFx3K18oPzpDTEFOR19USURZfENPTVBJTEVSX0xBVU5DSEVSfENQUENIRUNLfENQUExJTlR8SU5DTFVERV9XSEFUX1lPVV9VU0V8T1VUUFVUX05BTUV8UE9TVEZJWHxWSVNJQklMSVRZX1BSRVNFVCl8QUJTVFJBQ1R8QURESVRJT05BTF9NQUtFX0NMRUFOX0ZJTEVTfEFEVkFOQ0VEfEFMSUFTRURfVEFSR0VUfEFMTE9XX0RVUExJQ0FURV9DVVNUT01fVEFSR0VUU3xBTkRST0lEXyg/OkFOVF9BRERJVElPTkFMX09QVElPTlN8QVBJfEFQSV9NSU58QVJDSHxBU1NFVFNfRElSRUNUT1JJRVN8R1VJfEpBUl9ERVBFTkRFTkNJRVN8TkFUSVZFX0xJQl9ERVBFTkRFTkNJRVN8TkFUSVZFX0xJQl9ESVJFQ1RPUklFU3xQUk9DRVNTX01BWHxQUk9HVUFSRHxQUk9HVUFSRF9DT05GSUdfUEFUSHxTRUNVUkVfUFJPUFNfUEFUSHxTS0lQX0FOVF9TVEVQfFNUTF9UWVBFKXxBUkNISVZFX09VVFBVVF9ESVJFQ1RPUll8QVRUQUNIRURfRklMRVN8QVRUQUNIRURfRklMRVNfT05fRkFJTHxBVVRPR0VOXyg/OkJVSUxEX0RJUnxPUklHSU5fREVQRU5EU3xQQVJBTExFTHxTT1VSQ0VfR1JPVVB8VEFSR0VUU19GT0xERVJ8VEFSR0VUX0RFUEVORFMpfEFVVE9NT0N8QVVUT01PQ18oPzpDT01QSUxFUl9QUkVERUZJTkVTfERFUEVORF9GSUxURVJTfEVYRUNVVEFCTEV8TUFDUk9fTkFNRVN8TU9DX09QVElPTlN8U09VUkNFX0dST1VQfFRBUkdFVFNfRk9MREVSKXxBVVRPUkNDfEFVVE9SQ0NfRVhFQ1VUQUJMRXxBVVRPUkNDX09QVElPTlN8QVVUT1JDQ19TT1VSQ0VfR1JPVVB8QVVUT1VJQ3xBVVRPVUlDX0VYRUNVVEFCTEV8QVVUT1VJQ19PUFRJT05TfEFVVE9VSUNfU0VBUkNIX1BBVEhTfEJJTkFSWV9ESVJ8QlVJTERTWVNURU1fVEFSR0VUU3xCVUlMRF9SUEFUSHxCVUlMRF9SUEFUSF9VU0VfT1JJR0lOfEJVSUxEX1dJVEhfSU5TVEFMTF9OQU1FX0RJUnxCVUlMRF9XSVRIX0lOU1RBTExfUlBBVEh8QlVORExFfEJVTkRMRV9FWFRFTlNJT058Q0FDSEVfVkFSSUFCTEVTfENMRUFOX05PX0NVU1RPTXxDT01NT05fTEFOR1VBR0VfUlVOVElNRXxDT01QQVRJQkxFX0lOVEVSRkFDRV8oPzpCT09MfE5VTUJFUl9NQVh8TlVNQkVSX01JTnxTVFJJTkcpfENPTVBJTEVfKD86REVGSU5JVElPTlN8RkVBVFVSRVN8RkxBR1N8T1BUSU9OU3xQREJfTkFNRXxQREJfT1VUUFVUX0RJUkVDVE9SWSl8Q09TVHxDUEFDS19ERVNLVE9QX1NIT1JUQ1VUU3xDUEFDS19ORVZFUl9PVkVSV1JJVEV8Q1BBQ0tfUEVSTUFORU5UfENQQUNLX1NUQVJUVVBfU0hPUlRDVVRTfENQQUNLX1NUQVJUX01FTlVfU0hPUlRDVVRTfENQQUNLX1dJWF9BQ0x8Q1JPU1NDT01QSUxJTkdfRU1VTEFUT1J8Q1VEQV9FWFRFTlNJT05TfENVREFfUFRYX0NPTVBJTEFUSU9OfENVREFfUkVTT0xWRV9ERVZJQ0VfU1lNQk9MU3xDVURBX1NFUEFSQUJMRV9DT01QSUxBVElPTnxDVURBX1NUQU5EQVJEfENVREFfU1RBTkRBUkRfUkVRVUlSRUR8Q1hYX0VYVEVOU0lPTlN8Q1hYX1NUQU5EQVJEfENYWF9TVEFOREFSRF9SRVFVSVJFRHxDX0VYVEVOU0lPTlN8Q19TVEFOREFSRHxDX1NUQU5EQVJEX1JFUVVJUkVEfERFQlVHX0NPTkZJR1VSQVRJT05TfERFRklORV9TWU1CT0x8REVGSU5JVElPTlN8REVQRU5EU3xERVBMT1lNRU5UX0FERElUSU9OQUxfRklMRVN8REVQTE9ZTUVOVF9SRU1PVEVfRElSRUNUT1JZfERJU0FCTEVEfERJU0FCTEVEX0ZFQVRVUkVTfEVDTElQU0VfRVhUUkFfQ1BST0pFQ1RfQ09OVEVOVFN8RUNMSVBTRV9FWFRSQV9OQVRVUkVTfEVOQUJMRURfRkVBVFVSRVN8RU5BQkxFRF9MQU5HVUFHRVN8RU5BQkxFX0VYUE9SVFN8RU5WSVJPTk1FTlR8RVhDTFVERV9GUk9NX0FMTHxFWENMVURFX0ZST01fREVGQVVMVF9CVUlMRHxFWFBPUlRfTkFNRXxFWFBPUlRfUFJPUEVSVElFU3xFWFRFUk5BTF9PQkpFQ1R8RWNob1N0cmluZ3xGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTnxGSU5EX0xJQlJBUllfVVNFX0xJQjMyX1BBVEhTfEZJTkRfTElCUkFSWV9VU0VfTElCNjRfUEFUSFN8RklORF9MSUJSQVJZX1VTRV9MSUJYMzJfUEFUSFN8RklORF9MSUJSQVJZX1VTRV9PUEVOQlNEX1ZFUlNJT05JTkd8RklYVFVSRVNfQ0xFQU5VUHxGSVhUVVJFU19SRVFVSVJFRHxGSVhUVVJFU19TRVRVUHxGT0xERVJ8RlJBTUVXT1JLfEZvcnRyYW5fRk9STUFUfEZvcnRyYW5fTU9EVUxFX0RJUkVDVE9SWXxHRU5FUkFURUR8R0VORVJBVE9SX0ZJTEVfTkFNRXxHRU5FUkFUT1JfSVNfTVVMVElfQ09ORklHfEdIU19JTlRFR1JJVFlfQVBQfEdIU19OT19TT1VSQ0VfR1JPVVBfRklMRXxHTE9CQUxfREVQRU5EU19ERUJVR19NT0RFfEdMT0JBTF9ERVBFTkRTX05PX0NZQ0xFU3xHTlV0b01TfEhBU19DWFh8SEVBREVSX0ZJTEVfT05MWXxIRUxQU1RSSU5HfElNUExJQ0lUX0RFUEVORFNfSU5DTFVERV9UUkFOU0ZPUk18SU1QT1JURUR8SU1QT1JURURfKD86Q09NTU9OX0xBTkdVQUdFX1JVTlRJTUV8Q09ORklHVVJBVElPTlN8R0xPQkFMfElNUExJQnxMSUJOQU1FfExJTktfREVQRU5ERU5UX0xJQlJBUklFU3xMSU5LX0lOVEVSRkFDRV8oPzpMQU5HVUFHRVN8TElCUkFSSUVTfE1VTFRJUExJQ0lUWSl8TE9DQVRJT058Tk9fU09OQU1FfE9CSkVDVFN8U09OQU1FKXxJTVBPUlRfUFJFRklYfElNUE9SVF9TVUZGSVh8SU5DTFVERV9ESVJFQ1RPUklFU3xJTkNMVURFX1JFR1VMQVJfRVhQUkVTU0lPTnxJTlNUQUxMX05BTUVfRElSfElOU1RBTExfUlBBVEh8SU5TVEFMTF9SUEFUSF9VU0VfTElOS19QQVRIfElOVEVSRkFDRV8oPzpBVVRPVUlDX09QVElPTlN8Q09NUElMRV9ERUZJTklUSU9OU3xDT01QSUxFX0ZFQVRVUkVTfENPTVBJTEVfT1BUSU9OU3xJTkNMVURFX0RJUkVDVE9SSUVTfExJTktfREVQRU5EU3xMSU5LX0RJUkVDVE9SSUVTfExJTktfTElCUkFSSUVTfExJTktfT1BUSU9OU3xQT1NJVElPTl9JTkRFUEVOREVOVF9DT0RFfFNPVVJDRVN8U1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMpfElOVEVSUFJPQ0VEVVJBTF9PUFRJTUlaQVRJT058SU5fVFJZX0NPTVBJTEV8SU9TX0lOU1RBTExfQ09NQklORUR8Sk9CX1BPT0xTfEpPQl9QT09MX0NPTVBJTEV8Sk9CX1BPT0xfTElOS3xLRUVQX0VYVEVOU0lPTnxMQUJFTFN8TEFOR1VBR0V8TElCUkFSWV9PVVRQVVRfRElSRUNUT1JZfExJTktFUl9MQU5HVUFHRXxMSU5LXyg/OkRFUEVORFN8REVQRU5EU19OT19TSEFSRUR8RElSRUNUT1JJRVN8RkxBR1N8SU5URVJGQUNFX0xJQlJBUklFU3xJTlRFUkZBQ0VfTVVMVElQTElDSVRZfExJQlJBUklFU3xPUFRJT05TfFNFQVJDSF9FTkRfU1RBVElDfFNFQVJDSF9TVEFSVF9TVEFUSUN8V0hBVF9ZT1VfVVNFKXxMSVNURklMRV9TVEFDS3xMT0NBVElPTnxNQUNPU1hfQlVORExFfE1BQ09TWF9CVU5ETEVfSU5GT19QTElTVHxNQUNPU1hfRlJBTUVXT1JLX0lORk9fUExJU1R8TUFDT1NYX1BBQ0tBR0VfTE9DQVRJT058TUFDT1NYX1JQQVRIfE1BQ1JPU3xNQU5VQUxMWV9BRERFRF9ERVBFTkRFTkNJRVN8TUVBU1VSRU1FTlR8TU9ESUZJRUR8TkFNRXxOT19TT05BTUV8Tk9fU1lTVEVNX0ZST01fSU1QT1JURUR8T0JKRUNUX0RFUEVORFN8T0JKRUNUX09VVFBVVFN8T1NYX0FSQ0hJVEVDVFVSRVN8T1VUUFVUX05BTUV8UEFDS0FHRVNfRk9VTkR8UEFDS0FHRVNfTk9UX0ZPVU5EfFBBUkVOVF9ESVJFQ1RPUll8UEFTU19SRUdVTEFSX0VYUFJFU1NJT058UERCX05BTUV8UERCX09VVFBVVF9ESVJFQ1RPUll8UE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERXxQT1NUX0lOU1RBTExfU0NSSVBUfFBSRURFRklORURfVEFSR0VUU19GT0xERVJ8UFJFRklYfFBSRV9JTlNUQUxMX1NDUklQVHxQUklWQVRFX0hFQURFUnxQUk9DRVNTT1JTfFBST0NFU1NPUl9BRkZJTklUWXxQUk9KRUNUX0xBQkVMfFBVQkxJQ19IRUFERVJ8UkVQT1JUX1VOREVGSU5FRF9QUk9QRVJUSUVTfFJFUVVJUkVEX0ZJTEVTfFJFU09VUkNFfFJFU09VUkNFX0xPQ0t8UlVMRV9MQVVOQ0hfQ09NUElMRXxSVUxFX0xBVU5DSF9DVVNUT018UlVMRV9MQVVOQ0hfTElOS3xSVUxFX01FU1NBR0VTfFJVTlRJTUVfT1VUUFVUX0RJUkVDVE9SWXxSVU5fU0VSSUFMfFNLSVBfQVVUT0dFTnxTS0lQX0FVVE9NT0N8U0tJUF9BVVRPUkNDfFNLSVBfQVVUT1VJQ3xTS0lQX0JVSUxEX1JQQVRIfFNLSVBfUkVUVVJOX0NPREV8U09VUkNFU3xTT1VSQ0VfRElSfFNPVkVSU0lPTnxTVEFUSUNfTElCUkFSWV9GTEFHU3xTVEFUSUNfTElCUkFSWV9PUFRJT05TfFNUUklOR1N8U1VCRElSRUNUT1JJRVN8U1VGRklYfFNZTUJPTElDfFRBUkdFVF9BUkNISVZFU19NQVlfQkVfU0hBUkVEX0xJQlN8VEFSR0VUX01FU1NBR0VTfFRBUkdFVF9TVVBQT1JUU19TSEFSRURfTElCU3xURVNUU3xURVNUX0lOQ0xVREVfRklMRXxURVNUX0lOQ0xVREVfRklMRVN8VElNRU9VVHxUSU1FT1VUX0FGVEVSX01BVENIfFRZUEV8VVNFX0ZPTERFUlN8VkFMVUV8VkFSSUFCTEVTfFZFUlNJT058VklTSUJJTElUWV9JTkxJTkVTX0hJRERFTnxWU18oPzpDT05GSUdVUkFUSU9OX1RZUEV8Q09QWV9UT19PVVRfRElSfERFQlVHR0VSXyg/OkNPTU1BTkR8Q09NTUFORF9BUkdVTUVOVFN8RU5WSVJPTk1FTlR8V09SS0lOR19ESVJFQ1RPUlkpfERFUExPWU1FTlRfQ09OVEVOVHxERVBMT1lNRU5UX0xPQ0FUSU9OfERPVE5FVF9SRUZFUkVOQ0VTfERPVE5FVF9SRUZFUkVOQ0VTX0NPUFlfTE9DQUx8SU5DTFVERV9JTl9WU0lYfElPVF9TVEFSVFVQX1RBU0t8S0VZV09SRHxSRVNPVVJDRV9HRU5FUkFUT1J8U0NDX0FVWFBBVEh8U0NDX0xPQ0FMUEFUSHxTQ0NfUFJPSkVDVE5BTUV8U0NDX1BST1ZJREVSfFNES19SRUZFUkVOQ0VTfFNIQURFUl8oPzpESVNBQkxFX09QVElNSVpBVElPTlN8RU5BQkxFX0RFQlVHfEVOVFJZUE9JTlR8RkxBR1N8TU9ERUx8T0JKRUNUX0ZJTEVfTkFNRXxPVVRQVVRfSEVBREVSX0ZJTEV8VFlQRXxWQVJJQUJMRV9OQU1FKXxTVEFSVFVQX1BST0pFQ1R8VE9PTF9PVkVSUklERXxVU0VSX1BST1BTfFdJTlJUX0NPTVBPTkVOVHxXSU5SVF9FWFRFTlNJT05TfFdJTlJUX1JFRkVSRU5DRVN8WEFNTF9UWVBFKXxXSUxMX0ZBSUx8V0lOMzJfRVhFQ1VUQUJMRXxXSU5ET1dTX0VYUE9SVF9BTExfU1lNQk9MU3xXT1JLSU5HX0RJUkVDVE9SWXxXUkFQX0VYQ0xVREV8WENPREVfKD86RU1JVF9FRkZFQ1RJVkVfUExBVEZPUk1fTkFNRXxFWFBMSUNJVF9GSUxFX1RZUEV8RklMRV9BVFRSSUJVVEVTfExBU1RfS05PV05fRklMRV9UWVBFfFBST0RVQ1RfVFlQRXxTQ0hFTUVfKD86QUREUkVTU19TQU5JVElaRVJ8QUREUkVTU19TQU5JVElaRVJfVVNFX0FGVEVSX1JFVFVSTnxBUkdVTUVOVFN8RElTQUJMRV9NQUlOX1RIUkVBRF9DSEVDS0VSfERZTkFNSUNfTElCUkFSWV9MT0FEU3xEWU5BTUlDX0xJTktFUl9BUElfVVNBR0V8RU5WSVJPTk1FTlR8RVhFQ1VUQUJMRXxHVUFSRF9NQUxMT0N8TUFJTl9USFJFQURfQ0hFQ0tFUl9TVE9QfE1BTExPQ19HVUFSRF9FREdFU3xNQUxMT0NfU0NSSUJCTEV8TUFMTE9DX1NUQUNLfFRIUkVBRF9TQU5JVElaRVIoPzpfU1RPUCk/fFVOREVGSU5FRF9CRUhBVklPVVJfU0FOSVRJWkVSKD86X1NUT1ApP3xaT01CSUVfT0JKRUNUUykpfFhDVEVTVClcXGIvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphZGRfY29tcGlsZV9kZWZpbml0aW9uc3xhZGRfY29tcGlsZV9vcHRpb25zfGFkZF9jdXN0b21fY29tbWFuZHxhZGRfY3VzdG9tX3RhcmdldHxhZGRfZGVmaW5pdGlvbnN8YWRkX2RlcGVuZGVuY2llc3xhZGRfZXhlY3V0YWJsZXxhZGRfbGlicmFyeXxhZGRfbGlua19vcHRpb25zfGFkZF9zdWJkaXJlY3Rvcnl8YWRkX3Rlc3R8YXV4X3NvdXJjZV9kaXJlY3Rvcnl8YnJlYWt8YnVpbGRfY29tbWFuZHxidWlsZF9uYW1lfGNtYWtlX2hvc3Rfc3lzdGVtX2luZm9ybWF0aW9ufGNtYWtlX21pbmltdW1fcmVxdWlyZWR8Y21ha2VfcGFyc2VfYXJndW1lbnRzfGNtYWtlX3BvbGljeXxjb25maWd1cmVfZmlsZXxjb250aW51ZXxjcmVhdGVfdGVzdF9zb3VyY2VsaXN0fGN0ZXN0X2J1aWxkfGN0ZXN0X2NvbmZpZ3VyZXxjdGVzdF9jb3ZlcmFnZXxjdGVzdF9lbXB0eV9iaW5hcnlfZGlyZWN0b3J5fGN0ZXN0X21lbWNoZWNrfGN0ZXN0X3JlYWRfY3VzdG9tX2ZpbGVzfGN0ZXN0X3J1bl9zY3JpcHR8Y3Rlc3Rfc2xlZXB8Y3Rlc3Rfc3RhcnR8Y3Rlc3Rfc3VibWl0fGN0ZXN0X3Rlc3R8Y3Rlc3RfdXBkYXRlfGN0ZXN0X3VwbG9hZHxkZWZpbmVfcHJvcGVydHl8ZWxzZXxlbHNlaWZ8ZW5hYmxlX2xhbmd1YWdlfGVuYWJsZV90ZXN0aW5nfGVuZGZvcmVhY2h8ZW5kZnVuY3Rpb258ZW5kaWZ8ZW5kbWFjcm98ZW5kd2hpbGV8ZXhlY19wcm9ncmFtfGV4ZWN1dGVfcHJvY2Vzc3xleHBvcnR8ZXhwb3J0X2xpYnJhcnlfZGVwZW5kZW5jaWVzfGZpbGV8ZmluZF9maWxlfGZpbmRfbGlicmFyeXxmaW5kX3BhY2thZ2V8ZmluZF9wYXRofGZpbmRfcHJvZ3JhbXxmbHRrX3dyYXBfdWl8Zm9yZWFjaHxmdW5jdGlvbnxnZXRfY21ha2VfcHJvcGVydHl8Z2V0X2RpcmVjdG9yeV9wcm9wZXJ0eXxnZXRfZmlsZW5hbWVfY29tcG9uZW50fGdldF9wcm9wZXJ0eXxnZXRfc291cmNlX2ZpbGVfcHJvcGVydHl8Z2V0X3RhcmdldF9wcm9wZXJ0eXxnZXRfdGVzdF9wcm9wZXJ0eXxpZnxpbmNsdWRlfGluY2x1ZGVfZGlyZWN0b3JpZXN8aW5jbHVkZV9leHRlcm5hbF9tc3Byb2plY3R8aW5jbHVkZV9ndWFyZHxpbmNsdWRlX3JlZ3VsYXJfZXhwcmVzc2lvbnxpbnN0YWxsfGluc3RhbGxfZmlsZXN8aW5zdGFsbF9wcm9ncmFtc3xpbnN0YWxsX3RhcmdldHN8bGlua19kaXJlY3Rvcmllc3xsaW5rX2xpYnJhcmllc3xsaXN0fGxvYWRfY2FjaGV8bG9hZF9jb21tYW5kfG1hY3JvfG1ha2VfZGlyZWN0b3J5fG1hcmtfYXNfYWR2YW5jZWR8bWF0aHxtZXNzYWdlfG9wdGlvbnxvdXRwdXRfcmVxdWlyZWRfZmlsZXN8cHJvamVjdHxxdF93cmFwX2NwcHxxdF93cmFwX3VpfHJlbW92ZXxyZW1vdmVfZGVmaW5pdGlvbnN8cmV0dXJufHNlcGFyYXRlX2FyZ3VtZW50c3xzZXR8c2V0X2RpcmVjdG9yeV9wcm9wZXJ0aWVzfHNldF9wcm9wZXJ0eXxzZXRfc291cmNlX2ZpbGVzX3Byb3BlcnRpZXN8c2V0X3RhcmdldF9wcm9wZXJ0aWVzfHNldF90ZXN0c19wcm9wZXJ0aWVzfHNpdGVfbmFtZXxzb3VyY2VfZ3JvdXB8c3RyaW5nfHN1YmRpcl9kZXBlbmRzfHN1YmRpcnN8dGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnN8dGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXN8dGFyZ2V0X2NvbXBpbGVfb3B0aW9uc3x0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllc3x0YXJnZXRfbGlua19kaXJlY3Rvcmllc3x0YXJnZXRfbGlua19saWJyYXJpZXN8dGFyZ2V0X2xpbmtfb3B0aW9uc3x0YXJnZXRfc291cmNlc3x0cnlfY29tcGlsZXx0cnlfcnVufHVuc2V0fHVzZV9tYW5nbGVkX21lc2F8dXRpbGl0eV9zb3VyY2V8dmFyaWFibGVfcmVxdWlyZXN8dmFyaWFibGVfd2F0Y2h8d2hpbGV8d3JpdGVfZmlsZSkoPz1cXHMqXFwoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE9GRnxPTnxUUlVFKVxcYi8sXG5cdCduYW1lc3BhY2UnOiAvXFxiKD86SU5URVJGQUNFfFBSSVZBVEV8UFJPUEVSVElFU3xQVUJMSUN8U0hBUkVEfFNUQVRJQ3xUQVJHRVRfT0JKRUNUUylcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFxiKD86QU5EfERFRklORUR8RVFVQUx8R1JFQVRFUnxMRVNTfE1BVENIRVN8Tk9UfE9SfFNUUkVRVUFMfFNUUkdSRUFURVJ8U1RSTEVTU3xWRVJTSU9OX0VRVUFMfFZFUlNJT05fR1JFQVRFUnxWRVJTSU9OX0xFU1MpXFxiLyxcblx0J2luc2VydGVkJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXHcrOjpcXHcrXFxiLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspKlxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKClcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1soKT59XXxcXCRbPHtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNvYm9sID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwqPi4qfCheWyBcXHRdKilcXCouKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1t4emduXT8oPzpcIig/OlteXFxyXFxuXCJdfFwiXCIpKlwiKD8hXCIpfCcoPzpbXlxcclxcbiddfCcnKSonKD8hJykpL2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2xldmVsJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFxkK1xcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRsci9ncmFtbWFycy12NC9ibG9iLzQyZWRkNWI2ODdkMTgzYjVmYTY3OWU4NThhODIyOTdiZDI3MTQxZTcvY29ib2w4NS9Db2JvbDg1Lmc0I0wxMDE1XG5cdFx0cGF0dGVybjogLyhcXGJwaWMoPzp0dXJlKT9cXHMrKSg/Oig/OlstXFx3JC8sOiorPD5dfFxcLig/IVxcc3wkKSkoPzpcXChcXGQrXFwpKT8pKy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClcXGQrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdH1cblx0fSxcblxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSkoPzpBQk9SVHxBQ0NFUFR8QUNDRVNTfEFERHxBRERSRVNTfEFEVkFOQ0lOR3xBRlRFUnxBTElHTkVEfEFMTHxBTFBIQUJFVHxBTFBIQUJFVElDfEFMUEhBQkVUSUMtTE9XRVJ8QUxQSEFCRVRJQy1VUFBFUnxBTFBIQU5VTUVSSUN8QUxQSEFOVU1FUklDLUVESVRFRHxBTFNPfEFMVEVSfEFMVEVSTkFURXxBTll8QVJFfEFSRUF8QVJFQVN8QVN8QVNDRU5ESU5HfEFTQ0lJfEFTU0lHTnxBU1NPQ0lBVEVELURBVEF8QVNTT0NJQVRFRC1EQVRBLUxFTkdUSHxBVHxBVFRSSUJVVEV8QVVUSE9SfEFVVE98QVVUTy1TS0lQfEJBQ0tHUk9VTkQtQ09MT1J8QkFDS0dST1VORC1DT0xPVVJ8QkFTSVN8QkVFUHxCRUZPUkV8QkVHSU5OSU5HfEJFTEx8QklOQVJZfEJJVHxCTEFOS3xCTElOS3xCTE9DS3xCT1RUT018Qk9VTkRTfEJZfEJZRlVOQ1RJT058QllUSVRMRXxDQUxMfENBTkNFTHxDQVBBQkxFfENDU1ZFUlNJT058Q0R8Q0Z8Q0h8Q0hBSU5JTkd8Q0hBTkdFRHxDSEFOTkVMfENIQVJBQ1RFUnxDSEFSQUNURVJTfENMQVNTfENMQVNTLUlEfENMT0NLLVVOSVRTfENMT1NFfENMT1NFLURJU1BPU0lUSU9OfENPQk9MfENPREV8Q09ERS1TRVR8Q09MfENPTExBVElOR3xDT0xVTU58Q09NLVJFR3xDT01NQXxDT01NSVRNRU5UfENPTU1PTnxDT01NVU5JQ0FUSU9OfENPTVB8Q09NUC0xfENPTVAtMnxDT01QLTN8Q09NUC00fENPTVAtNXxDT01QVVRBVElPTkFMfENPTVBVVEFUSU9OQUwtMXxDT01QVVRBVElPTkFMLTJ8Q09NUFVUQVRJT05BTC0zfENPTVBVVEFUSU9OQUwtNHxDT01QVVRBVElPTkFMLTV8Q09NUFVURXxDT05GSUdVUkFUSU9OfENPTlRBSU5TfENPTlRFTlR8Q09OVElOVUV8Q09OVFJPTHxDT05UUk9MLVBPSU5UfENPTlRST0xTfENPTlZFTlRJT058Q09OVkVSVElOR3xDT1BZfENPUlJ8Q09SUkVTUE9ORElOR3xDT1VOVHxDUlVOQ0h8Q1VSUkVOQ1l8Q1VSU09SfERBVEF8REFUQS1CQVNFfERBVEV8REFURS1DT01QSUxFRHxEQVRFLVdSSVRURU58REFZfERBWS1PRi1XRUVLfERCQ1N8REV8REVCVUctQ09OVEVOVFN8REVCVUctSVRFTXxERUJVRy1MSU5FfERFQlVHLU5BTUV8REVCVUctU1VCLTF8REVCVUctU1VCLTJ8REVCVUctU1VCLTN8REVCVUdHSU5HfERFQ0lNQUwtUE9JTlR8REVDTEFSQVRJVkVTfERFRkFVTFR8REVGQVVMVC1ESVNQTEFZfERFRklOSVRJT058REVMRVRFfERFTElNSVRFRHxERUxJTUlURVJ8REVQRU5ESU5HfERFU0NFTkRJTkd8REVTVElOQVRJT058REVUQUlMfERGSFJFU1B8REZIVkFMVUV8RElTQUJMRXxESVNLfERJU1BMQVl8RElTUExBWS0xfERJVklERXxESVZJU0lPTnxET05UQ0FSRXxET1VCTEV8RE9XTnxEVVBMSUNBVEVTfERZTkFNSUN8RUJDRElDfEVHQ1N8RUdJfEVMU0V8RU1JfEVNUFRZLUNIRUNLfEVOQUJMRXxFTkR8RU5ELUFDQ0VQVHxFTkQtQUREfEVORC1DQUxMfEVORC1DT01QVVRFfEVORC1ERUxFVEV8RU5ELURJVklERXxFTkQtRVZBTFVBVEV8RU5ELUlGfEVORC1NVUxUSVBMWXxFTkQtT0YtUEFHRXxFTkQtUEVSRk9STXxFTkQtUkVBRHxFTkQtUkVDRUlWRXxFTkQtUkVUVVJOfEVORC1SRVdSSVRFfEVORC1TRUFSQ0h8RU5ELVNUQVJUfEVORC1TVFJJTkd8RU5ELVNVQlRSQUNUfEVORC1VTlNUUklOR3xFTkQtV1JJVEV8RU5ESU5HfEVOVEVSfEVOVFJZfEVOVFJZLVBST0NFRFVSRXxFTlZJUk9OTUVOVHxFT0x8RU9QfEVPU3xFUkFTRXxFUlJPUnxFU0NBUEV8RVNJfEVWQUxVQVRFfEVWRU5UfEVWRVJZfEVYQ0VQVElPTnxFWENMVVNJVkV8RVhISUJJVHxFWElUfEVYUE9SVHxFWFRFTkR8RVhURU5ERUR8RVhURVJOQUx8RkR8RklMRXxGSUxFLUNPTlRST0x8RklMTEVSfEZJTkFMfEZJUlNUfEZPT1RJTkd8Rk9SfEZPUkVHUk9VTkQtQ09MT1J8Rk9SRUdST1VORC1DT0xPVVJ8RlJPTXxGVUxMfEZVTkNUSU9OfEZVTkNUSU9OLVBPSU5URVJ8RlVOQ1RJT05OQU1FfEdFTkVSQVRFfEdJVklOR3xHTE9CQUx8R098R09CQUNLfEdSSUR8R1JPVVB8SEVBRElOR3xISUdILVZBTFVFfEhJR0gtVkFMVUVTfEhJR0hMSUdIVHxJLU98SS1PLUNPTlRST0x8SUR8SURFTlRJRklDQVRJT058SUZ8SU1QTElDSVR8SU1QT1JUfElOfElOREVYfElOREVYRUR8SU5ESUNBVEV8SU5JVElBTHxJTklUSUFMSVpFfElOSVRJQVRFfElOUFVUfElOUFVULU9VVFBVVHxJTlNQRUNUfElOU1RBTExBVElPTnxJTlRFR0VSfElOVE98SU5WQUxJRHxJTlZPS0V8SVN8SlVTVHxKVVNUSUZJRUR8S0FOSkl8S0VQVHxLRVl8S0VZQk9BUkR8TEFCRUx8TEFOR1VBR0V8TEFTVHxMQnxMRHxMRUFESU5HfExFRlR8TEVGVExJTkV8TEVOR1RIfExFTkdUSC1DSEVDS3xMSUJBQ0NFU1N8TElCUEFSQU1FVEVSfExJQlJBUll8TElNSVR8TElNSVRTfExJTkFHRXxMSU5BR0UtQ09VTlRFUnxMSU5FfExJTkUtQ09VTlRFUnxMSU5FU3xMSU5LQUdFfExJU1R8TE9DQUx8TE9DQUwtU1RPUkFHRXxMT0NLfExPTkctREFURXxMT05HLVRJTUV8TE9XLVZBTFVFfExPVy1WQUxVRVN8TE9XRVJ8TE9XTElHSFR8TUVNT1JZfE1FUkdFfE1FU1NBR0V8TU1ERFlZWVl8TU9ERXxNT0RVTEVTfE1PUkUtTEFCRUxTfE1PVkV8TVVMVElQTEV8TVVMVElQTFl8TkFNRUR8TkFUSU9OQUx8TkFUSU9OQUwtRURJVEVEfE5BVElWRXxORUdBVElWRXxORVRXT1JLfE5FWFR8Tk98Tk8tRUNIT3xOVUxMfE5VTExTfE5VTUJFUnxOVU1FUklDfE5VTUVSSUMtREFURXxOVU1FUklDLUVESVRFRHxOVU1FUklDLVRJTUV8T0JKRUNULUNPTVBVVEVSfE9DQ1VSU3xPRFR8T0Z8T0ZGfE9NSVRURUR8T058T1BFTnxPUFRJT05BTHxPUkRFUnxPUkRFUkxZfE9SR0FOSVpBVElPTnxPVEhFUnxPVVRQVVR8T1ZFUkZMT1d8T1ZFUkxJTkV8T1dOfFBBQ0tFRC1ERUNJTUFMfFBBRERJTkd8UEFHRXxQQUdFLUNPVU5URVJ8UEFTU1dPUkR8UEVSRk9STXxQRnxQSHxQSUN8UElDVFVSRXxQTFVTfFBPSU5URVJ8UE9SVHxQT1NJVElPTnxQT1NJVElWRXxQUklOVEVSfFBSSU5USU5HfFBSSVZBVEV8UFJPQ0VEVVJFfFBST0NFRFVSRS1QT0lOVEVSfFBST0NFRFVSRVN8UFJPQ0VFRHxQUk9DRVNTfFBST0dSQU18UFJPR1JBTS1JRHxQUk9HUkFNLUxJQlJBUll8UFJPTVBUfFBVUkdFfFFVRVVFfFFVT1RFfFFVT1RFU3xSQU5ET018UkR8UkVBRHxSRUFERVJ8UkVBTHxSRUNFSVZFfFJFQ0VJVkVEfFJFQ09SRHxSRUNPUkRJTkd8UkVDT1JEU3xSRUNVUlNJVkV8UkVERUZJTkVTfFJFRUx8UkVGfFJFRkVSRU5DRXxSRUZFUkVOQ0VTfFJFTEFUSVZFfFJFTEVBU0V8UkVNQUlOREVSfFJFTUFSS1N8UkVNT1RFfFJFTU9WQUx8UkVNT1ZFfFJFTkFNRVN8UkVQTEFDRXxSRVBMQUNJTkd8UkVQT1JUfFJFUE9SVElOR3xSRVBPUlRTfFJFUVVJUkVEfFJFUlVOfFJFU0VSVkV8UkVTRVR8UkVUVVJOfFJFVFVSTi1DT0RFfFJFVFVSTklOR3xSRVZFUlNFLVZJREVPfFJFVkVSU0VEfFJFV0lORHxSRVdSSVRFfFJGfFJIfFJJR0hUfFJPVU5ERUR8UlVOfFNBTUV8U0FWRXxTQ1JFRU58U0R8U0VBUkNIfFNFQ1RJT058U0VDVVJFfFNFQ1VSSVRZfFNFR01FTlR8U0VHTUVOVC1MSU1JVHxTRUxFQ1R8U0VORHxTRU5URU5DRXxTRVBBUkFURXxTRVFVRU5DRXxTRVFVRU5USUFMfFNFVHxTSEFSRUR8U0hBUkVEQllBTEx8U0hBUkVEQllSVU5VTklUfFNIQVJJTkd8U0hJRlQtSU58U0hJRlQtT1VUfFNIT1JULURBVEV8U0lHTnxTSVpFfFNPUlR8U09SVC1DT05UUk9MfFNPUlQtQ09SRS1TSVpFfFNPUlQtRklMRS1TSVpFfFNPUlQtTUVSR0V8U09SVC1NRVNTQUdFfFNPUlQtTU9ERS1TSVpFfFNPUlQtUkVUVVJOfFNPVVJDRXxTT1VSQ0UtQ09NUFVURVJ8U1BBQ0V8U1BBQ0VTfFNQRUNJQUwtTkFNRVN8U1RBTkRBUkR8U1RBTkRBUkQtMXxTVEFOREFSRC0yfFNUQVJUfFNUQVRVU3xTVE9QfFNUUklOR3xTVUItUVVFVUUtMXxTVUItUVVFVUUtMnxTVUItUVVFVUUtM3xTVUJUUkFDVHxTVU18U1VQUFJFU1N8U1lNQk9MfFNZTUJPTElDfFNZTkN8U1lOQ0hST05JWkVEfFRBQkxFfFRBTExZfFRBTExZSU5HfFRBUEV8VEFTS3xURVJNSU5BTHxURVJNSU5BVEV8VEVTVHxURVhUfFRIRU58VEhSRUFEfFRIUkVBRC1MT0NBTHxUSFJPVUdIfFRIUlV8VElNRXxUSU1FUnxUSU1FU3xUSVRMRXxUT3xUT0RBWVMtREFURXxUT0RBWVMtTkFNRXxUT1B8VFJBSUxJTkd8VFJVTkNBVEVEfFRZUEV8VFlQRURFRnxVTkRFUkxJTkV8VU5JVHxVTlNUUklOR3xVTlRJTHxVUHxVUE9OfFVTQUdFfFVTRXxVU0lOR3xWQUxVRXxWQUxVRVN8VkFSWUlOR3xWSVJUVUFMfFdBSVR8V0hFTnxXSEVOLUNPTVBJTEVEfFdJVEh8V09SRFN8V09SS0lORy1TVE9SQUdFfFdSSVRFfFlFQVJ8WVlZWURERHxZWVlZTU1ERHxaRVJPLUZJTEx8WkVST0VTfFpFUk9TKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86ZmFsc2V8dHJ1ZSkoPyFbXFx3LV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OlsrLV0/KD86KD86XFxkKyg/OlsuLF1cXGQrKT98Wy4sXVxcZCspKD86ZVsrLV0/XFxkKyk/fHplcm8pKSg/IVtcXHctXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvPD58Wzw+XT0/fFs9KyovJl0vLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/Oi18YW5kfGVxdWFsfGdyZWF0ZXJ8bGVzc3xub3R8b3J8dGhhbikoPyFbXFx3LV0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWy46LCgpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBJZ25vcmUgY29tbWVudHMgc3RhcnRpbmcgd2l0aCB7IHRvIHByaXZpbGVnZSBzdHJpbmcgaW50ZXJwb2xhdGlvbiBoaWdobGlnaHRpbmdcblx0dmFyIGNvbW1lbnQgPSAvIyg/IVxceykuKy87XG5cdHZhciBpbnRlcnBvbGF0aW9uID0ge1xuXHRcdHBhdHRlcm46IC8jXFx7W159XStcXH0vLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNvZmZlZXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7XG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdCdzdHJpbmcnOiBbXG5cblx0XHRcdC8vIFN0cmluZ3MgYXJlIG11bHRpbGluZVxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHQvLyBTdHJpbmdzIGFyZSBtdWx0aWxpbmVcblx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphbmR8YnJlYWt8Ynl8Y2F0Y2h8Y2xhc3N8Y29udGludWV8ZGVidWdnZXJ8ZGVsZXRlfGRvfGVhY2h8ZWxzZXxleHRlbmR8ZXh0ZW5kc3xmYWxzZXxmaW5hbGx5fGZvcnxpZnxpbnxpbnN0YW5jZW9mfGlzfGlzbnR8bGV0fGxvb3B8bmFtZXNwYWNlfG5ld3xub3xub3R8bnVsbHxvZnxvZmZ8b258b3J8b3dufHJldHVybnxzdXBlcnxzd2l0Y2h8dGhlbnx0aGlzfHRocm93fHRydWV8dHJ5fHR5cGVvZnx1bmRlZmluZWR8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8d2luZG93fHdpdGh8eWVzfHlpZWxkKVxcYi8sXG5cdFx0J2NsYXNzLW1lbWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC9AKD8hXFxkKVxcdysvLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdjb21tZW50Jywge1xuXHRcdCdtdWx0aWxpbmUtY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jIyNbXFxzXFxTXSs/IyMjLyxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXG5cdFx0Ly8gQmxvY2sgcmVnZXhwIGNhbiBjb250YWluIGNvbW1lbnRzIGFuZCBpbnRlcnBvbGF0aW9uXG5cdFx0J2Jsb2NrLXJlZ2V4Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL3szfVtcXHNcXFNdKj9cXC97M30vLFxuXHRcdFx0YWxpYXM6ICdyZWdleCcsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb25cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdFx0J2lubGluZS1qYXZhc2NyaXB0Jzoge1xuXHRcdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF0pKmAvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc2NyaXB0Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YXNjcmlwdCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEJsb2NrIHN0cmluZ3Ncblx0XHQnbXVsdGlsaW5lLXN0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycnJ1tcXHNcXFNdKj8nJycvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKj9cIlwiXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0aW50ZXJwb2xhdGlvbjogaW50ZXJwb2xhdGlvblxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvZmZlZXNjcmlwdCcsICdrZXl3b3JkJywge1xuXHRcdC8vIE9iamVjdCBwcm9wZXJ0eVxuXHRcdCdwcm9wZXJ0eSc6IC8oPyFcXGQpXFx3Kyg/PVxccyo6KD8hOikpL1xuXHR9KTtcblxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmNvZmZlZXNjcmlwdFsndGVtcGxhdGUtc3RyaW5nJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNvZmZlZSA9IFByaXNtLmxhbmd1YWdlcy5jb2ZmZWVzY3JpcHQ7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwvXFwvLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbGFuZ2V4dCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3K1xccypcXHxcXHxbXFxzXFxTXSs/XFx8XFx8Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY2xhc3MtbmFtZSc6IC9eXFx3Ky8sXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cXHMqXFx8XFx8KVtcXHNcXFNdKyg/PVxcfFxcfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHxcXHwvXG5cdFx0fVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylkZWZbIFxcdF0rKVthLXpBLVpfXVxcdyooPz1cXHMqXFwoKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhY3RvcnxhbHNvfGFubm90YXRpb258YXNzZXJ0fGFzeW5jfGF3YWl0fGJvb2x8Ym9vbGVhbnxicmVha3xieXRlfGNhc2V8Y2F0Y2h8Y2hhbmdlZHxjaGFyfGNsYXNzfGNsb3NlZHxjb25zdGFudHxjb250aW51ZXxkZWZ8ZGVmYXVsdHxkZWx8ZG91YmxlfGVsaWZ8ZWxzZXxlbnVtfGV2ZXJ5fGV4dGVuZHN8ZmFsc2V8ZmluYWxseXxmbG9hdHxmb3J8ZnJvbXxnbG9iYWx8Z3B1ZGVmfGdwdWtlcm5lbHxpZnxpbXBvcnR8aW58aW5pdHxpbmplY3R8aW50fGxhbWJkYXxsb2NhbHxsb25nfGxvb3B8bWF0Y2h8bmV3fG5vZGVmYXVsdHxudWxsfG9mfG9uY2hhbmdlfG9wZW58b3V0fG92ZXJyaWRlfHBhY2thZ2V8cGFyZm9yfHBhcmZvcnN5bmN8cG9zdHxwcmV8cHJpdmF0ZXxwcm90ZWN0ZWR8cHJvdmlkZXxwcm92aWRlcnxwdWJsaWN8cmV0dXJufHNoYXJlZHxzaG9ydHxzaW5nbGV8c2l6ZV90fHNpemVvZnxzdXBlcnxzeW5jfHRoaXN8dGhyb3d8dHJhaXR8dHJhbnN8dHJhbnNpZW50fHRydWV8dHJ5fHR5cGVkZWZ8dW5jaGVja2VkfHVzaW5nfHZhbHx2YXJ8dm9pZHx3aGlsZXx3aXRoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGIwYlswMV1bMDFfXSpMP1xcYnxcXGIweCg/OltcXGRhLWZfXSpcXC4pP1tcXGRhLWZfcCstXStcXGJ8KD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1xcZFtcXGRfXSopP1tkZmxzXT8vaSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcblx0J29wZXJhdG9yJzogLzw9PXw+PT18PT58LT58PC18PD58Jj09fCY8PnxcXD86P3xcXC5cXD98XFwrXFwrfC0tfFstKyovPTw+XT0/fFshXn5dfFxcYig/OmFuZHxhc3xiYW5kfGJvcnxieG9yfGNvbXB8aXN8aXNub3R8bW9kfG9yKVxcYj0/Lyxcblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0AoPzpcXHcrOik/KD86XFx3K3xcXFtbXlxcXV0rXFxdKT8vLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY29uY3VybmFzJywgJ2xhbmdleHQnLCB7XG5cdCdyZWdleC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJyKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXNcblx0XHRcdH0sXG5cdFx0XHQncmVnZXgnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcblx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8oPzpcXEJ8XFxicykoXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNvbmN1cm5hc1xuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5jb25jID0gUHJpc20ubGFuZ3VhZ2VzLmNvbmN1cm5hcztcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBTY290dCBIZWxtZS5cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9jc3AtY2hlYXQtc2hlZXQvXG4gKlxuICogU3VwcG9ydHMgdGhlIGZvbGxvd2luZzpcbiAqICAtIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AxL1xuICogIC0gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUDIvXG4gKiAgLSBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMy9cbiAqL1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHZhbHVlKHNvdXJjZSkge1xuXHRcdHJldHVybiBSZWdFeHAoLyhbIFxcdF0pLy5zb3VyY2UgKyAnKD86JyArIHNvdXJjZSArICcpJyArIC8oPz1bXFxzO118JCkvLnNvdXJjZSwgJ2knKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5jc3AgPSB7XG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO10pKD86YmFzZS11cml8YmxvY2stYWxsLW1peGVkLWNvbnRlbnR8KD86Y2hpbGR8Y29ubmVjdHxkZWZhdWx0fGZvbnR8ZnJhbWV8aW1nfG1hbmlmZXN0fG1lZGlhfG9iamVjdHxwcmVmZXRjaHxzY3JpcHR8c3R5bGV8d29ya2VyKS1zcmN8ZGlzb3duLW9wZW5lcnxmb3JtLWFjdGlvbnxmcmFtZS0oPzphbmNlc3RvcnN8b3B0aW9ucyl8aW5wdXQtcHJvdGVjdGlvbig/Oi0oPzpjbGlwfHNlbGVjdG9ycykpP3xuYXZpZ2F0ZS10b3xwbHVnaW4tdHlwZXN8cG9saWN5LXVyaXxyZWZlcnJlcnxyZWZsZWN0ZWQteHNzfHJlcG9ydC0oPzp0b3x1cmkpfHJlcXVpcmUtc3JpLWZvcnxzYW5kYm94fCg/OnNjcmlwdHxzdHlsZSktc3JjLSg/OmF0dHJ8ZWxlbSl8dXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cykoPz1bXFxzO118JCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J3NjaGVtZSc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC9bYS16XVthLXowLTkuKy1dKjovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbm9uZSc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC8nbm9uZScvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J25vbmNlJzoge1xuXHRcdFx0cGF0dGVybjogdmFsdWUoLydub25jZS1bLSsvXFx3PV0rJy8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdoYXNoJzoge1xuXHRcdFx0cGF0dGVybjogdmFsdWUoLydzaGEoPzoyNTZ8Mzg0fDUxMiktWy0rL1xcdz1dKycvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnaG9zdCc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKFxuXHRcdFx0XHQvW2Etel1bYS16MC05ListXSo6XFwvXFwvW15cXHM7LCddKi8uc291cmNlICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0L1xcKlteXFxzOywnXSovLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC9bYS16MC05LV0rKD86XFwuW2EtejAtOS1dKykrKD86OltcXGQqXSspPyg/OlxcL1teXFxzOywnXSopPy8uc291cmNlXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndXJsJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW1wb3J0YW50JzogL1xcKi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvJ3Vuc2FmZS1bYS16LV0rJy8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICd1bnNhZmUnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvJ1thLXotXSsnLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3NhZmUnXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzsvXG5cdH07XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY29va2xhbmcvc3BlYy9ibG9iL21haW4vRUJORi5tZFxuXG5cdHZhciBzaW5nbGVfdG9rZW5fc3VmZml4ID0gLyg/Oig/IVxccylbXFxkJCs8PWEtekEtWlxceDgwLVxcdUZGRkZdKSsvLnNvdXJjZTtcblx0dmFyIG11bHRpX3Rva2VuX2luZml4ID0gL1tee31AI10rLy5zb3VyY2U7XG5cdHZhciBtdWx0aV90b2tlbl9zdWZmaXggPSAvXFx7W159I0BdKlxcfS8uc291cmNlO1xuXG5cdHZhciBtdWx0aV90b2tlbiA9IG11bHRpX3Rva2VuX2luZml4ICsgbXVsdGlfdG9rZW5fc3VmZml4O1xuXG5cdHZhciB0aW1lcl91bml0cyA9IC8oPzpofGhvdXJzfGhyc3xtfG1pbnxtaW51dGVzKS8uc291cmNlO1xuXG5cdHZhciBhbW91bnRfZ3JvdXBfaW1wbCA9IHtcblx0XHRwYXR0ZXJuOiAvXFx7W157fV0qXFx9Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhbW91bnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xce3xdKVtee318KiVdKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdH0sXG5cdFx0XHQndW5pdCc6IHtcblx0XHRcdFx0cGF0dGVybjogLyglKVtefV0rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0fSxcblx0XHRcdCdzZXJ2aW5ncy1zY2FsZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCovLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdH0sXG5cdFx0XHQnc2VydmluZ3MtYWx0ZXJuYXRpdmUtc2VwYXJhdG9yJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFx8Lyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0J3VuaXQtc2VwYXJhdG9yJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86JXwoXFwqKSUpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHRcdH1cblx0fTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5jb29rbGFuZyA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdC8vIFstIGNvbW1lbnQgLV1cblx0XHRcdC8vIC0tIGNvbW1lbnRcblx0XHRcdHBhdHRlcm46IC9cXFstW1xcc1xcU10qPy1cXF18LS0uKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQnbWV0YSc6IHsgLy8gPj4ga2V5OiB2YWx1ZVxuXHRcdFx0cGF0dGVybjogLz4+Lio6LiovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwcm9wZXJ0eSc6IHsgLy8ga2V5OlxuXHRcdFx0XHRcdHBhdHRlcm46IC8oPj5cXHMqKVteXFxzOl0oPzpbXjpdKlteXFxzOl0pPy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2Nvb2t3YXJlLWdyb3VwJzogeyAvLyAjLi4uey4uLn0sICMuLi5cblx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoJyMoPzonXG5cdFx0XHRcdCsgbXVsdGlfdG9rZW5cblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0KyBzaW5nbGVfdG9rZW5fc3VmZml4XG5cdFx0XHRcdCsgJyknXG5cdFx0XHQpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb29rd2FyZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCcoXiMpKD86J1xuXHRcdFx0XHRcdFx0KyBtdWx0aV90b2tlbl9pbmZpeFxuXHRcdFx0XHRcdFx0KyAnKSdcblx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb29rd2FyZS1rZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eIy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3F1YW50aXR5LWdyb3VwJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoL1xce1tee31AI10qXFx9LyksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncXVhbnRpdHknOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoLyheXFx7KS8uc291cmNlICsgbXVsdGlfdG9rZW5faW5maXgpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdCdpbmdyZWRpZW50LWdyb3VwJzogeyAvLyBALi4uey4uLn0sIEAuLi5cblx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoJ0AoPzonXG5cdFx0XHRcdCsgbXVsdGlfdG9rZW5cblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0KyBzaW5nbGVfdG9rZW5fc3VmZml4XG5cdFx0XHRcdCsgJyknKSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW5ncmVkaWVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCcoXkApKD86J1xuXHRcdFx0XHRcdFx0KyBtdWx0aV90b2tlbl9pbmZpeFxuXHRcdFx0XHRcdFx0KyAnKScpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbmdyZWRpZW50LWtleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15ALyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYW1vdW50LWdyb3VwJzogYW1vdW50X2dyb3VwX2ltcGwsXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndGltZXItZ3JvdXAnOiB7IC8vIH50aW1lcnsuLi59XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3NvcnQtYWx0ZXJuYXRpdmVzXG5cdFx0XHRwYXR0ZXJuOiAvfig/IVxccylbXkAjfnt9XSpcXHtbXnt9XSpcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0aW1lcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5+KVtee10rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZHVyYXRpb24tZ3JvdXAnOiB7IC8vIHsuLi59XG5cdFx0XHRcdFx0cGF0dGVybjogL1xce1tee31dKlxcfS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW3t9XS8sXG5cdFx0XHRcdFx0XHQndW5pdCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgvKCVcXHMqKS8uc291cmNlICsgdGltZXJfdW5pdHMgKyAvXFxiLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCcsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogLyUvLFxuXHRcdFx0XHRcdFx0J2R1cmF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxkKy8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQndGltZXIta2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXn4vLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2NvcS9jb3FcblxuXHR2YXIgY29tbWVudFNvdXJjZSA9IC9cXChcXCooPzpbXigqXXxcXCgoPyFcXCopfFxcKig/IVxcKSl8PHNlbGY+KSpcXCpcXCkvLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHRjb21tZW50U291cmNlID0gY29tbWVudFNvdXJjZS5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gY29tbWVudFNvdXJjZTsgfSk7XG5cdH1cblx0Y29tbWVudFNvdXJjZSA9IGNvbW1lbnRTb3VyY2UucmVwbGFjZSgvPHNlbGY+L2csICdbXScpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jb3EgPSB7XG5cdFx0J2NvbW1lbnQnOiBSZWdFeHAoY29tbWVudFNvdXJjZSksXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2F0dHJpYnV0ZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8jXFxbKD86W15cXFtcXF0oXCJdfFwiKD86W15cIl18XCJcIikqXCIoPyFcIil8XFwoKD8hXFwqKXw8Y29tbWVudD4pKlxcXS8uc291cmNlXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvPGNvbW1lbnQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1lbnRTb3VyY2U7IH0pXG5cdFx0XHRcdCksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnY29tbWVudCc6IFJlZ0V4cChjb21tZW50U291cmNlKSxcblx0XHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1wiKD86W15cIl18XCJcIikqXCIoPyFcIikvLFxuXHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXiNcXFt8XFxdJHxbLCgpXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OkN1bXVsYXRpdmV8R2xvYmFsfExvY2FsfE1vbm9tb3JwaGljfE5vbkN1bXVsYXRpdmV8UG9seW1vcnBoaWN8UHJpdmF0ZXxQcm9ncmFtKVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzpBYm9ydHxBYm91dHxBZGR8QWRtaXR8QWRtaXR0ZWR8QWxsfEFyZ3VtZW50c3xBc3xBc3N1bXB0aW9uc3xBeGlvbXxBeGlvbXN8QmFja3xCYWNrVG98QmFja3RyYWNlfEJpbk9wfEJpbk9wU3BlY3xCaW5SZWx8QmluZHxCbGFja2xpc3R8Q2Fub25pY2FsfENhc2V8Q2R8Q2hlY2t8Q2xhc3N8Q2xhc3Nlc3xDbG9zZXxDb0ZpeHBvaW50fENvSW5kdWN0aXZlfENvZXJjaW9ufENvZXJjaW9uc3xDb2xsZWN0aW9ufENvbWJpbmVkfENvbXB1dGV8Q29uamVjdHVyZXxDb25qZWN0dXJlc3xDb25zdGFudHxDb25zdGFudHN8Q29uc3RyYWludHxDb25zdHJ1Y3RvcnN8Q29udGV4dHxDb3JvbGxhcnl8Q3JlYXRlfENzdE9wfEN1c3RvbXxDdXR8RGVidWd8RGVjbGFyZXxEZWZpbmVkfERlZmluaXRpb258RGVsaW1pdHxEZXBlbmRlbmNpZXN8RGVwZW5kZW50fERlcml2ZXxEaWZmc3xEcm9wfEVsaW1pbmF0aW9ufEVuZHxFbnRyeXxFcXVhbGl0eXxFdmFsfEV4YW1wbGV8RXhpc3RlbnRpYWx8RXhpc3RlbnRpYWxzfEV4aXN0aW5nfEV4cG9ydHxFeHRlcm58RXh0cmFjdGlvbnxGYWN0fEZhaWx8RmllbGR8RmlsZXxGaXJzdG9yZGVyfEZpeHBvaW50fEZsYWdzfEZvY3VzfEZyb218RnVuY2xhc3N8RnVuY3Rpb258RnVuY3Rpb25hbHxHQ3xHZW5lcmFsaXphYmxlfEdvYWx8R3JhYnxHcmFtbWFyfEdyYXBofEd1YXJkZWR8SGFza2VsbHxIZWFwfEhpZGV8SGludHxIaW50RGJ8SGludHN8SHlwb3RoZXNlc3xIeXBvdGhlc2lzfElGfElkZW50aXR5fEltbWVkaWF0ZXxJbXBsaWNpdHxJbXBsaWNpdHN8SW1wb3J0fEluY2x1ZGV8SW5kdWN0aW9ufEluZHVjdGl2ZXxJbmZpeHxJbmZvfEluaXRpYWx8SW5qVHlwfElubGluZXxJbnNwZWN0fEluc3RhbmNlfEluc3RhbmNlc3xJbnRyb3xJbnRyb3N8SW52ZXJzaW9ufEludmVyc2lvbl9jbGVhcnxKU09OfExhbmd1YWdlfExlZnR8TGVtbWF8TGV0fExpYXxMaWJyYXJpZXN8TGlicmFyeXxMb2FkfExvYWRQYXRofExvY2F0ZXxMdGFjfEx0YWMyfE1MfE1hdGNofE1ldGhvZHxNaW5pbWFsaXR5fE1vZHVsZXxNb2R1bGVzfE1vcnBoaXNtfE5leHR8Tm9JbmxpbmV8Tm90YXRpb258TnVtYmVyfE9DYW1sfE9ibGlnYXRpb258T2JsaWdhdGlvbnN8T3BhcXVlfE9wZW58T3B0aW1pemV8UGFyYW1ldGVyfFBhcmFtZXRlcnN8UGFyYW1ldHJpY3xQYXRofFBhdGhzfFByZW5leHxQcmV0ZXJtfFByaW1pdGl2ZXxQcmludHxQcm9maWxlfFByb2plY3Rpb25zfFByb29mfFByb3B8UHJvcEJpbk9wfFByb3BPcHxQcm9wVU9wfFByb3BlcnR5fFByb3Bvc2l0aW9ufFB3ZHxRZWR8UXVpdHxSZWN8UmVjb3JkfFJlY3Vyc2l2ZXxSZWRpcmVjdHxSZWR1Y3Rpb258UmVnaXN0ZXJ8UmVsYXRpb258UmVtYXJrfFJlbW92ZXxSZXF1aXJlfFJlc2VydmVkfFJlc2V0fFJlc29sdmV8UmVzdGFydHxSZXdyaXRlfFJpZ2h0fFJpbmd8UmluZ3N8U1Byb3B8U2F0dXJhdGV8U2F2ZXxTY2hlbWV8U2NvcGV8U2NvcGVzfFNlYXJjaHxTZWFyY2hIZWFkfFNlYXJjaFBhdHRlcm58U2VhcmNoUmV3cml0ZXxTZWN0aW9ufFNlcGFyYXRlfFNldHxTZXRvaWR8U2hvd3xTaWduYXR1cmVzfFNvbHZlfFNvbHZlcnxTb3J0fFNvcnRjbGFzc3xTb3J0ZWR8U3BlY3xTdGVwfFN0cmF0ZWdpZXN8U3RyYXRlZ3l8U3RyaW5nfFN0cnVjdHVyZXxTdWJDbGFzc3xTdWJncmFwaHxTdWNoVGhhdHxUYWN0aWN8VGVybXxUZXN0Q29tcGlsZXxUaGVvcmVtfFRpbWV8VGltZW91dHxUb3xUcmFuc3BhcmVudHxUeXBlfFR5cGVjbGFzc2VzfFR5cGVzfFR5cGluZ3xVbk9wfFVuT3BTcGVjfFVuZGVsaW1pdHxVbmRvfFVuZm9jdXN8VW5mb2N1c2VkfFVuZm9sZHxVbml2ZXJzZXxVbml2ZXJzZXN8VW5zaGVsdmV8VmFyaWFibGV8VmFyaWFibGVzfFZhcmlhbnR8VmVyYm9zZXxWaWV3fFZpc2liaWxpdHl8WmlmeXxffGFwcGx5fGFzfGF0fGJ5fGNvZml4fGVsc2V8ZW5kfGV4aXN0c3xleGlzdHMyfGZpeHxmb3J8Zm9yYWxsfGZ1bnxpZnxpbnxsZXR8bWF0Y2h8bWVhc3VyZXxtb3ZlfHJlbW92ZWR8cmV0dXJufHN0cnVjdHx0aGVufHVzaW5nfHdmfHdoZXJlfHdpdGgpXFxiLyxcblxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mMC05XVthLWYwLTlfXSooPzpcXC5bYS1mMC05X10rKT8oPzpwWystXT9cXGRbXFxkX10qKT98XFxkW1xcZF9dKig/OlxcLltcXGRfXSspPyg/OmVbKy1dP1xcZFtcXGRfXSopPylcXGIvaSxcblxuXHRcdCdwdW5jdCc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFx7fFxce1xcfHxcXFs9fDo+Lyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvXFwvXFxcXHxcXFxcXFwvfFxcLnsyLDN9fDp7MSwyfT18XFwqXFwqfFstPV0+fDwoPzotPj98Wys6PT5dfDw6KXw+KD86PXwtPil8XFx8Wy18XT98Wy0hJSYqKy88PT4/QF5+J10vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXC5cXCh8YFxcKHxAXFx7fGBcXHt8XFx7XFx8fFxcWz18Oj58WzouLDsoKXt9XFxbXFxdXS9cblx0fTtcblxufShQcmlzbSkpO1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IFNhbXVlbCBGbG9yZXNcbiAqXG4gKiBBZGRzIHRoZSBmb2xsb3dpbmcgbmV3IHRva2VuIGNsYXNzZXM6XG4gKiAgICAgY29uc3RhbnQsIGJ1aWx0aW4sIHZhcmlhYmxlLCBzeW1ib2wsIHJlZ2V4XG4gKi9cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnJ1YnkgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jLip8Xj1iZWdpblxcc1tcXHNcXFNdKj9ePWVuZC9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8bW9kdWxlKVxccyt8XFxiY2F0Y2hcXHMrXFwoKVtcXHcuXFxcXF0rfFxcYltBLVpfXVxcdyooPz1cXHMqXFwuXFxzKm5ld1xcYikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWy5cXFxcXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJFR0lOfEVORHxhbGlhc3xhbmR8YmVnaW58YnJlYWt8Y2FzZXxjbGFzc3xkZWZ8ZGVmaW5lX21ldGhvZHxkZWZpbmVkfGRvfGVhY2h8ZWxzZXxlbHNpZnxlbmR8ZW5zdXJlfGV4dGVuZHxmb3J8aWZ8aW58aW5jbHVkZXxtb2R1bGV8bmV3fG5leHR8bmlsfG5vdHxvcnxwcmVwZW5kfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyYWlzZXxyZWRvfHJlcXVpcmV8cmVzY3VlfHJldHJ5fHJldHVybnxzZWxmfHN1cGVyfHRoZW58dGhyb3d8dW5kZWZ8dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8eWllbGQpXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuezIsM318JlxcLnw9PT18PD89PnxbIT1dP358KD86JiZ8XFx8XFx8fDw8fD4+fFxcKlxcKnxbK1xcLSovJTw+IV4mfD1dKT0/fFs/Ol0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0uLDtdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncnVieScsICdvcGVyYXRvcicsIHtcblx0XHQnZG91YmxlLWNvbG9uJzoge1xuXHRcdFx0cGF0dGVybjogLzo6Lyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0fSk7XG5cblx0dmFyIGludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKSNcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXigjXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0fSxcblx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5ydWJ5LmZ1bmN0aW9uO1xuXG5cdHZhciBwZXJjZW50RXhwcmVzc2lvbiA9ICcoPzonICsgW1xuXHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzw9XSkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8uc291cmNlLFxuXHRcdC9cXCgoPzpbXigpXFxcXF18XFxcXFtcXHNcXFNdfFxcKCg/OlteKClcXFxcXXxcXFxcW1xcc1xcU10pKlxcKSkqXFwpLy5zb3VyY2UsXG5cdFx0L1xceyg/Oltee31cXFxcXXxcXFxcW1xcc1xcU118XFx7KD86W157fVxcXFxdfFxcXFxbXFxzXFxTXSkqXFx9KSpcXH0vLnNvdXJjZSxcblx0XHQvXFxbKD86W15cXFtcXF1cXFxcXXxcXFxcW1xcc1xcU118XFxbKD86W15cXFtcXF1cXFxcXXxcXFxcW1xcc1xcU10pKlxcXSkqXFxdLy5zb3VyY2UsXG5cdFx0LzwoPzpbXjw+XFxcXF18XFxcXFtcXHNcXFNdfDwoPzpbXjw+XFxcXF18XFxcXFtcXHNcXFNdKSo+KSo+Ly5zb3VyY2Vcblx0XS5qb2luKCd8JykgKyAnKSc7XG5cblx0dmFyIHN5bWJvbE5hbWUgPSAvKD86XCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifCg/OlxcYlthLXpBLVpfXVxcdyp8W15cXHNcXDAtXFx4N0ZdKylbPyFdP3xcXCQuKS8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAna2V5d29yZCcsIHtcblx0XHQncmVnZXgtbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8lci8uc291cmNlICsgcGVyY2VudEV4cHJlc3Npb24gKyAvW2VnaW1ub3N1eF17MCw2fS8uc291cmNlKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdFx0J3JlZ2V4JzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteL10pXFwvKD8hXFwvKSg/OlxcW1teXFxyXFxuXFxdXStcXF18XFxcXC58W15bL1xcXFxcXHJcXG5dKStcXC9bZWdpbW5vc3V4XXswLDZ9KD89XFxzKig/OiR8W1xcclxcbiwuO30pI10pKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdyZWdleCc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCd2YXJpYWJsZSc6IC9bQCRdK1thLXpBLVpfXVxcdyooPzpbPyFdfFxcYikvLFxuXHRcdCdzeW1ib2wnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W146XSk6Ly5zb3VyY2UgKyBzeW1ib2xOYW1lKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhbXFxyXFxueygsXVsgXFx0XSopLy5zb3VyY2UgKyBzeW1ib2xOYW1lICsgLyg/PTooPyE6KSkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdtZXRob2QtZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiZGVmXFxzKylcXHcrKD86XFxzKlxcLlxccypcXHcrKT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXFxiXFx3KyQvLFxuXHRcdFx0XHQna2V5d29yZCc6IC9ec2VsZlxcYi8sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogL15cXHcrLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAnc3RyaW5nJywge1xuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8lW3FRaUl3V3NdPy8uc291cmNlICsgcGVyY2VudEV4cHJlc3Npb24pLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcInwnKSg/OiNcXHtbXn1dK1xcfXwjKD8hXFx7KXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcI1xcclxcbl0pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvPDxbLX5dPyhbYS16X11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1tcXHQgXSpcXDEvaSxcblx0XHRcdFx0YWxpYXM6ICdoZXJlZG9jLXN0cmluZycsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9ePDxbLX5dP1thLXpfXVxcdyp8XFxiW2Etel9dXFx3KiQvaSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnc3ltYm9sJzogL1xcYlxcdysvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8Wy1+XT8vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC88PFstfl0/JyhbYS16X11cXHcqKSdbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9bXFx0IF0qXFwxL2ksXG5cdFx0XHRcdGFsaWFzOiAnaGVyZWRvYy1zdHJpbmcnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8Wy1+XT8nW2Etel9dXFx3Kid8XFxiW2Etel9dXFx3KiQvaSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnc3ltYm9sJzogL1xcYlxcdysvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8Wy1+XT8nfCckLyxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY29tbWFuZC1saXRlcmFsJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyV4Ly5zb3VyY2UgKyBwZXJjZW50RXhwcmVzc2lvbiksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdjb21tYW5kJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9gKD86I1xce1tefV0rXFx9fCMoPyFcXHspfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXGAjXFxyXFxuXSkqYC8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdjb21tYW5kJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdXG5cdH0pO1xuXG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMucnVieS5zdHJpbmc7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncnVieScsICdudW1iZXInLCB7XG5cdFx0J2J1aWx0aW4nOiAvXFxiKD86QXJyYXl8QmlnbnVtfEJpbmRpbmd8Q2xhc3N8Q29udGludWF0aW9ufERpcnxFeGNlcHRpb258RmFsc2VDbGFzc3xGaWxlfEZpeG51bXxGbG9hdHxIYXNofElPfEludGVnZXJ8TWF0Y2hEYXRhfE1ldGhvZHxNb2R1bGV8TmlsQ2xhc3N8TnVtZXJpY3xPYmplY3R8UHJvY3xSYW5nZXxSZWdleHB8U3RhdHxTdHJpbmd8U3RydWN0fFN5bWJvbHxUTVN8VGhyZWFkfFRocmVhZEdyb3VwfFRpbWV8VHJ1ZUNsYXNzKVxcYi8sXG5cdFx0J2NvbnN0YW50JzogL1xcYltBLVpdW0EtWjAtOV9dKig/Ols/IV18XFxiKS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJiID0gUHJpc20ubGFuZ3VhZ2VzLnJ1Ynk7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmNyeXN0YWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdydWJ5Jywge1xuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0L1xcYig/Ol9fRElSX198X19FTkRfTElORV9ffF9fRklMRV9ffF9fTElORV9ffGFic3RyYWN0fGFsaWFzfGFubm90YXRpb258YXN8YXNtfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRvfGVsc2V8ZWxzaWZ8ZW5kfGVuc3VyZXxlbnVtfGV4dGVuZHxmb3J8ZnVufGlmfGlmZGVmfGluY2x1ZGV8aW5zdGFuY2Vfc2l6ZW9mfGxpYnxtYWNyb3xtb2R1bGV8bmV4dHxvZnxvdXR8cG9pbnRlcm9mfHByaXZhdGV8cHJvdGVjdGVkfHB0cnxyZXF1aXJlfHJlc2N1ZXxyZXR1cm58c2VsZWN0fHNlbGZ8c2l6ZW9mfHN0cnVjdHxzdXBlcnx0aGVufHR5cGV8dHlwZW9mfHVuZGVmfHVuaW5pdGlhbGl6ZWR8dW5pb258dW5sZXNzfHVudGlsfHdoZW58d2hpbGV8d2l0aHx5aWVsZClcXGIvLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcLlxccyopKD86aXNfYXxyZXNwb25kc190bylcXD8vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbnVtYmVyJzogL1xcYig/OjBiWzAxX10qWzAxXXwwb1swLTdfXSpbMC03XXwweFtcXGRhLWZBLUZfXSpbXFxkYS1mQS1GXXwoPzpcXGQoPzpbXFxkX10qXFxkKT8pKD86XFwuW1xcZF9dKlxcZCk/KD86W2VFXVsrLV0/W1xcZF9dKlxcZCk/KSg/Ol8oPzpbdWlmXSg/Ojh8MTZ8MzJ8NjQpKT8pP1xcYi8sXG5cdFx0J29wZXJhdG9yJzogW1xuXHRcdFx0Ly0+Lyxcblx0XHRcdFByaXNtLmxhbmd1YWdlcy5ydWJ5Lm9wZXJhdG9yLFxuXHRcdF0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXS4sO1xcXFxdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3J5c3RhbCcsICdzdHJpbmctbGl0ZXJhbCcsIHtcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogL0BcXFsuKj9cXF0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15AXFxbfFxcXSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilcXHcrLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2FyZ3MnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jcnlzdGFsXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZXhwYW5zaW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xceyg/Olxcey4qP1xcfXwlLio/JSlcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcey4pW1xcc1xcU10rKD89LlxcfSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNyeXN0YWxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxce1tcXHslXXxbXFx9JV1cXH0kLyxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86W15cXFxcXFxyXFxuXXsxLDJ9fFxcXFwoPzoufHUoPzpbQS1GYS1mMC05XXsxLDR9fFxce1tBLUZhLWYwLTldezEsNn1cXH0pKSknLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzdHJpbmcgPSAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cdHZhciBzZWxlY3Rvckluc2lkZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NzLnNlbGVjdG9yID0ge1xuXHRcdHBhdHRlcm46IFByaXNtLmxhbmd1YWdlcy5jc3Muc2VsZWN0b3IucGF0dGVybixcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZTogc2VsZWN0b3JJbnNpZGUgPSB7XG5cdFx0XHQncHNldWRvLWVsZW1lbnQnOiAvOig/OmFmdGVyfGJlZm9yZXxmaXJzdC1sZXR0ZXJ8Zmlyc3QtbGluZXxzZWxlY3Rpb24pfDo6Wy1cXHddKy8sXG5cdFx0XHQncHNldWRvLWNsYXNzJzogLzpbLVxcd10rLyxcblx0XHRcdCdjbGFzcyc6IC9cXC5bLVxcd10rLyxcblx0XHRcdCdpZCc6IC8jWy1cXHddKy8sXG5cdFx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ1xcXFxbKD86W15bXFxcXF1cIlxcJ118JyArIHN0cmluZy5zb3VyY2UgKyAnKSpcXFxcXScpLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXSQvLFxuXHRcdFx0XHRcdCdjYXNlLXNlbnNpdGl2aXR5Jzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpW3NpXSQvaSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKikoPzooPyFcXHMpWy0qXFx3XFx4QTAtXFx1RkZGRl0pKlxcfCg/IT0pLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfCQvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKikoPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkrLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdhdHRyLXZhbHVlJzogW1xuXHRcdFx0XHRcdFx0c3RyaW5nLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKSg/Oig/IVxccylbLVxcd1xceEEwLVxcdUZGRkZdKSsoPz1cXHMqJCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvW3x+Kl4kXT89L1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J24tdGgnOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKFxccyopWystXT9cXGQqW1xcZG5dKD86XFxzKlsrLV1cXHMqXFxkKyk/KD89XFxzKlxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnbnVtYmVyJzogL1tcXGRuXSsvLFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogL1srLV0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXChcXHMqKSg/OmV2ZW58b2RkKSg/PVxccypcXCkpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0J2NvbWJpbmF0b3InOiAvPnxcXCt8fnxcXHxcXHwvLFxuXG5cdFx0XHQvLyB0aGUgYHRhZ2AgdG9rZW4gaGFzIGJlZW4gZXhpc3RlZCBhbmQgcmVtb3ZlZC5cblx0XHRcdC8vIGJlY2F1c2Ugd2UgY2FuJ3QgZmluZCBhIHBlcmZlY3QgdG9rZW5pemUgdG8gbWF0Y2ggaXQuXG5cdFx0XHQvLyBpZiB5b3Ugd2FudCB0byBhZGQgaXQsIHBsZWFzZSByZWFkIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL3B1bGwvMjM3MyBmaXJzdC5cblxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdLyxcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzc1snYXRydWxlJ10uaW5zaWRlWydzZWxlY3Rvci1mdW5jdGlvbi1hcmd1bWVudCddLmluc2lkZSA9IHNlbGVjdG9ySW5zaWRlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzcycsICdwcm9wZXJ0eScsIHtcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14tXFx3XFx4QTAtXFx1RkZGRl0pLS0oPyFcXHMpWy1fYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkqL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgdW5pdCA9IHtcblx0XHRwYXR0ZXJuOiAvKFxcYlxcZCspKD86JXxbYS16XSsoPyFbXFx3LV0pKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9O1xuXHQvLyAxMjMgLTEyMyAuMTIzIC0uMTIzIDEyLjMgLTEyLjNcblx0dmFyIG51bWJlciA9IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pLT8oPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NzJywgJ2Z1bmN0aW9uJywge1xuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxzKVsrXFwtKlxcL10oPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIENBUkVGVUwhXG5cdFx0Ly8gUHJldmlld2VycyBhbmQgSW5saW5lIGNvbG9yIHVzZSBoZXhjb2RlIGFuZCBjb2xvci5cblx0XHQnaGV4Y29kZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXEIjW1xcZGEtZl17Myw4fVxcYi9pLFxuXHRcdFx0YWxpYXM6ICdjb2xvcidcblx0XHR9LFxuXHRcdCdjb2xvcic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86QWxpY2VCbHVlfEFudGlxdWVXaGl0ZXxBcXVhfEFxdWFtYXJpbmV8QXp1cmV8QmVpZ2V8QmlzcXVlfEJsYWNrfEJsYW5jaGVkQWxtb25kfEJsdWV8Qmx1ZVZpb2xldHxCcm93bnxCdXJseVdvb2R8Q2FkZXRCbHVlfENoYXJ0cmV1c2V8Q2hvY29sYXRlfENvcmFsfENvcm5mbG93ZXJCbHVlfENvcm5zaWxrfENyaW1zb258Q3lhbnxEYXJrQmx1ZXxEYXJrQ3lhbnxEYXJrR29sZGVuUm9kfERhcmtHclthZV15fERhcmtHcmVlbnxEYXJrS2hha2l8RGFya01hZ2VudGF8RGFya09saXZlR3JlZW58RGFya09yYW5nZXxEYXJrT3JjaGlkfERhcmtSZWR8RGFya1NhbG1vbnxEYXJrU2VhR3JlZW58RGFya1NsYXRlQmx1ZXxEYXJrU2xhdGVHclthZV15fERhcmtUdXJxdW9pc2V8RGFya1Zpb2xldHxEZWVwUGlua3xEZWVwU2t5Qmx1ZXxEaW1HclthZV15fERvZGdlckJsdWV8RmlyZUJyaWNrfEZsb3JhbFdoaXRlfEZvcmVzdEdyZWVufEZ1Y2hzaWF8R2FpbnNib3JvfEdob3N0V2hpdGV8R29sZHxHb2xkZW5Sb2R8R3JbYWVdeXxHcmVlbnxHcmVlblllbGxvd3xIb25leURld3xIb3RQaW5rfEluZGlhblJlZHxJbmRpZ298SXZvcnl8S2hha2l8TGF2ZW5kZXJ8TGF2ZW5kZXJCbHVzaHxMYXduR3JlZW58TGVtb25DaGlmZm9ufExpZ2h0Qmx1ZXxMaWdodENvcmFsfExpZ2h0Q3lhbnxMaWdodEdvbGRlblJvZFllbGxvd3xMaWdodEdyW2FlXXl8TGlnaHRHcmVlbnxMaWdodFBpbmt8TGlnaHRTYWxtb258TGlnaHRTZWFHcmVlbnxMaWdodFNreUJsdWV8TGlnaHRTbGF0ZUdyW2FlXXl8TGlnaHRTdGVlbEJsdWV8TGlnaHRZZWxsb3d8TGltZXxMaW1lR3JlZW58TGluZW58TWFnZW50YXxNYXJvb258TWVkaXVtQXF1YU1hcmluZXxNZWRpdW1CbHVlfE1lZGl1bU9yY2hpZHxNZWRpdW1QdXJwbGV8TWVkaXVtU2VhR3JlZW58TWVkaXVtU2xhdGVCbHVlfE1lZGl1bVNwcmluZ0dyZWVufE1lZGl1bVR1cnF1b2lzZXxNZWRpdW1WaW9sZXRSZWR8TWlkbmlnaHRCbHVlfE1pbnRDcmVhbXxNaXN0eVJvc2V8TW9jY2FzaW58TmF2YWpvV2hpdGV8TmF2eXxPbGRMYWNlfE9saXZlfE9saXZlRHJhYnxPcmFuZ2V8T3JhbmdlUmVkfE9yY2hpZHxQYWxlR29sZGVuUm9kfFBhbGVHcmVlbnxQYWxlVHVycXVvaXNlfFBhbGVWaW9sZXRSZWR8UGFwYXlhV2hpcHxQZWFjaFB1ZmZ8UGVydXxQaW5rfFBsdW18UG93ZGVyQmx1ZXxQdXJwbGV8UmViZWNjYVB1cnBsZXxSZWR8Um9zeUJyb3dufFJveWFsQmx1ZXxTYWRkbGVCcm93bnxTYWxtb258U2FuZHlCcm93bnxTZWFHcmVlbnxTZWFTaGVsbHxTaWVubmF8U2lsdmVyfFNreUJsdWV8U2xhdGVCbHVlfFNsYXRlR3JbYWVdeXxTbm93fFNwcmluZ0dyZWVufFN0ZWVsQmx1ZXxUYW58VGVhbHxUaGlzdGxlfFRvbWF0b3xUcmFuc3BhcmVudHxUdXJxdW9pc2V8VmlvbGV0fFdoZWF0fFdoaXRlfFdoaXRlU21va2V8WWVsbG93fFllbGxvd0dyZWVuKSg/IVtcXHctXSkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OmhzbHxyZ2IpXFwoXFxzKlxcZHsxLDN9XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKlxcZHsxLDN9JT9cXHMqXFwpXFxCfFxcYig/OmhzbHxyZ2IpYVxcKFxccypcXGR7MSwzfVxccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqKD86MHwwP1xcLlxcZCt8MSlcXHMqXFwpXFxCL2ksXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCd1bml0JzogdW5pdCxcblx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdCdmdW5jdGlvbic6IC9bXFx3LV0rKD89XFwoKS8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBpdCdzIGltcG9ydGFudCB0aGF0IHRoZXJlIGlzIG5vIGJvdW5kYXJ5IGFzc2VydGlvbiBhZnRlciB0aGUgaGV4IGRpZ2l0c1xuXHRcdCdlbnRpdHknOiAvXFxcXFtcXGRhLWZdezEsOH0vaSxcblx0XHQndW5pdCc6IHVuaXQsXG5cdFx0J251bWJlcic6IG51bWJlclxuXHR9KTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDE4MFxuXG5QcmlzbS5sYW5ndWFnZXMuY3N2ID0ge1xuXHQndmFsdWUnOiAvW15cXHJcXG4sXCJdK3xcIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0J3B1bmN0dWF0aW9uJzogLywvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly9jdWVsYW5nLm9yZy9kb2NzL3JlZmVyZW5jZXMvc3BlYy9cblxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHR2YXIgc3RyaW5nRXNjYXBlID0gL1xcXFwoPzooPyFcXDIpfFxcMig/OlteKClcXHJcXG5dfFxcKFteKCldKlxcKSkpLy5zb3VyY2U7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdHZhciBzdHJpbmdUeXBlcyA9IC9cIlwiXCIoPzpbXlxcXFxcIl18XCIoPyFcIlwiXFwyKXw8ZXNjPikqXCJcIlwiLy5zb3VyY2UgK1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0J3wnICsgLycnJyg/OlteXFxcXCddfCcoPyEnJ1xcMil8PGVzYz4pKicnJy8uc291cmNlICtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdCd8JyArIC9cIig/OlteXFxcXFxcclxcblwiXXxcIig/IVxcMil8PGVzYz4pKlwiLy5zb3VyY2UgK1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0J3wnICsgLycoPzpbXlxcXFxcXHJcXG4nXXwnKD8hXFwyKXw8ZXNjPikqJy8uc291cmNlO1xuXHR2YXIgc3RyaW5nTGl0ZXJhbCA9ICcoPzonICsgc3RyaW5nVHlwZXMucmVwbGFjZSgvPGVzYz4vZywgc3RyaW5nRXNjYXBlKSArICcpJztcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3VlID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W14jXCInXFxcXF0pKCMqKS8uc291cmNlICsgc3RyaW5nTGl0ZXJhbCArIC8oPyFbXCInXSlcXDIvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEknbSB1c2luZyBkaXJ0eSBoYWNrIGhlcmUuIFdlIGhhdmUgdG8ga25vdyB0aGUgbnVtYmVyIGhhc2hlcyBhdCB0aGUgc3RhcnQgb2YgdGhlIHN0cmluZyBzb21laG93LFxuXHRcdFx0XHQvLyBidXQgd2UgY2FuJ3QgbG9vayBiYWNrLiBTbyBpbnN0ZWFkLCB3ZSB3aWxsIHVzZSBhIGxvb2thaGVhZCwgZ28gdG8gdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBhbmRcblx0XHRcdFx0Ly8gY2FwdHVyZSB0aGUgaGFzaGVzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZy5cblx0XHRcdFx0J2VzY2FwZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD89W1xcc1xcU10qW1wiJ10oIyopJClcXFxcXFwxKD86VVthLWZBLUYwLTldezEsOH18dVthLWZBLUYwLTldezEsNH18eFthLWZBLUYwLTldezEsMn18XFxkezIsM318W14oXSkvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/PVtcXHNcXFNdKltcIiddKCMqKSQpXFxcXFxcMVxcKFteKCldKlxcKS8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFxcIypcXCh8XFwpJC8sXG5cdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pKD86Zm9yfGlmfGltcG9ydHxpbnxsZXR8bnVsbHxwYWNrYWdlKSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHckXSkoPzpmYWxzZXx0cnVlKSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2J1aWx0aW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHckXSkoPzpib29sfGJ5dGVzfGZsb2F0fGZsb2F0KD86MzJ8NjQpfHU/aW50KD86OHwxNnwzMnw2NHwxMjgpP3xudW1iZXJ8cnVuZXxzdHJpbmcpKD8hW1xcdyRdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFtcXHckXSsoPz1cXHMqXFwoKS8sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pW2Etel8kXVtcXHckXSooPz1cXHMqXFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JC5dKSg/OjBiWzAxXSsoPzpfWzAxXSspKnwwb1swLTddKyg/Ol9bMC03XSspKnwwW3hYXVswLTlBLUZhLWZdKyg/Ol9bMC05QS1GYS1mXSspKnwoPzpcXGQrKD86X1xcZCspKig/OlxcLig/OlxcZCsoPzpfXFxkKykqKT8pP3xcXC5cXGQrKD86X1xcZCspKikoPzpbZUVdWystXT9cXGQrKD86X1xcZCspKik/KD86W0tNR1RQXWk/KT8pKD8hW1xcdyRdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdvcGVyYXRvcic6IC9cXC57M318X1xcfF98JiY/fFxcfFxcfD98Wz0hXX58Wzw+PSFdPT98WytcXC0qLz9dLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LC46XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY3VlWydzdHJpbmctbGl0ZXJhbCddLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5jdWU7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmN5cGhlciA9IHtcblx0Ly8gaHR0cHM6Ly9uZW80ai5jb20vZG9jcy9jeXBoZXItbWFudWFsL2N1cnJlbnQvc3ludGF4L2NvbW1lbnRzL1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXC4pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKDpcXHMqKSg/Olxcdyt8YCg/OlteYFxcXFxcXHJcXG5dKSpgKSg/PVxccypbeyk6XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdyZWxhdGlvbnNoaXAnOiB7XG5cdFx0cGF0dGVybjogLygtXFxbXFxzKig/OlxcdytcXHMqfGAoPzpbXmBcXFxcXFxyXFxuXSkqYFxccyopPzpcXHMqfFxcfFxccyo6XFxzKikoPzpcXHcrfGAoPzpbXmBcXFxcXFxyXFxuXSkqYCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gKD86W15gXFxcXFxcclxcbl0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHcrLyxcblxuXHQvLyBodHRwczovL25lbzRqLmNvbS9kb2NzL2N5cGhlci1tYW51YWwvY3VycmVudC9zeW50YXgvcmVzZXJ2ZWQvXG5cdCdrZXl3b3JkJzogL1xcYig/OkFERHxBTEx8QU5EfEFTfEFTQ3xBU0NFTkRJTkd8QVNTRVJUfEJZfENBTEx8Q0FTRXxDT01NSVR8Q09OU1RSQUlOVHxDT05UQUlOU3xDUkVBVEV8Q1NWfERFTEVURXxERVNDfERFU0NFTkRJTkd8REVUQUNIfERJU1RJTkNUfERPfERST1B8RUxTRXxFTkR8RU5EU3xFWElTVFN8Rk9SfEZPUkVBQ0h8SU58SU5ERVh8SVN8Sk9JTnxLRVl8TElNSVR8TE9BRHxNQU5EQVRPUll8TUFUQ0h8TUVSR0V8Tk9ERXxOT1R8T0Z8T058T1BUSU9OQUx8T1J8T1JERVIoPz1cXHMrQlkpfFBFUklPRElDfFJFTU9WRXxSRVFVSVJFfFJFVFVSTnxTQ0FMQVJ8U0NBTnxTRVR8U0tJUHxTVEFSVHxTVEFSVFN8VEhFTnxVTklPTnxVTklRVUV8VU5XSU5EfFVTSU5HfFdIRU58V0hFUkV8V0lUSHxYT1J8WUlFTEQpXFxiL2ksXG5cblx0J2Z1bmN0aW9uJzogL1xcYlxcdytcXGIoPz1cXHMqXFwoKS8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi9pLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZkEtRl0rfFxcZCsoPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT8pXFxiLyxcblx0Ly8gaHR0cHM6Ly9uZW80ai5jb20vZG9jcy9jeXBoZXItbWFudWFsL2N1cnJlbnQvc3ludGF4L29wZXJhdG9ycy9cblx0J29wZXJhdG9yJzogLzp8PC0tP3wtLT8+P3w8Pnw9fj98Wzw+XT0/fFsrKi8lXnxdfFxcLlxcLlxcLj8vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDsuXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5kID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdC8vIFNoZWJhbmdcblx0XHRcdHBhdHRlcm46IC9eXFxzKiMhLisvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteXFxcXF0pLy5zb3VyY2UgKyAnKD86JyArIFtcblx0XHRcdFx0Ly8gLysgY29tbWVudCArL1xuXHRcdFx0XHQvLyBBbGxvdyBvbmUgbGV2ZWwgb2YgbmVzdGluZ1xuXHRcdFx0XHQvXFwvXFwrKD86XFwvXFwrKD86W14rXXxcXCsoPyFcXC8pKSpcXCtcXC98KD8hXFwvXFwrKVtcXHNcXFNdKSo/XFwrXFwvLy5zb3VyY2UsXG5cdFx0XHRcdC8vIC8vIGNvbW1lbnRcblx0XHRcdFx0L1xcL1xcLy4qLy5zb3VyY2UsXG5cdFx0XHRcdC8vIC8qIGNvbW1lbnQgKi9cblx0XHRcdFx0L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLnNvdXJjZVxuXHRcdFx0XS5qb2luKCd8JykgKyAnKScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoW1xuXHRcdFx0XHQvLyByXCJcIiwgeFwiXCJcblx0XHRcdFx0L1xcYltyeF1cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiW2N3ZF0/Ly5zb3VyY2UsXG5cblx0XHRcdFx0Ly8gcVwiW11cIiwgcVwiKClcIiwgcVwiPD5cIiwgcVwie31cIlxuXHRcdFx0XHQvXFxicVwiKD86XFxbW1xcc1xcU10qP1xcXXxcXChbXFxzXFxTXSo/XFwpfDxbXFxzXFxTXSo/PnxcXHtbXFxzXFxTXSo/XFx9KVwiLy5zb3VyY2UsXG5cblx0XHRcdFx0Ly8gcVwiSURFTlRcblx0XHRcdFx0Ly8gLi4uXG5cdFx0XHRcdC8vIElERU5UXCJcblx0XHRcdFx0L1xcYnFcIigoPyFcXGQpXFx3KykkW1xcc1xcU10qP15cXDFcIi8uc291cmNlLFxuXG5cdFx0XHRcdC8vIHFcIi8vXCIsIHFcInx8XCIsIGV0Yy5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0L1xcYnFcIiguKVtcXHNcXFNdKj9cXDJcIi8uc291cmNlLFxuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdC8oW1wiYF0pKD86XFxcXFtcXHNcXFNdfCg/IVxcMylbXlxcXFxdKSpcXDNbY3dkXT8vLnNvdXJjZVxuXHRcdFx0XS5qb2luKCd8JyksICdtJyksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJxXFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd0b2tlbi1zdHJpbmcnXG5cdFx0fVxuXHRdLFxuXG5cdC8vIEluIG9yZGVyOiAkLCBrZXl3b3JkcyBhbmQgc3BlY2lhbCB0b2tlbnMsIGdsb2JhbGx5IGRlZmluZWQgc3ltYm9sc1xuXHQna2V5d29yZCc6IC9cXCR8XFxiKD86X18oPzooPzpEQVRFfEVPRnxGSUxFfEZVTkNUSU9OfExJTkV8TU9EVUxFfFBSRVRUWV9GVU5DVElPTnxUSU1FU1RBTVB8VElNRXxWRU5ET1J8VkVSU0lPTilfX3xnc2hhcmVkfHBhcmFtZXRlcnN8dHJhaXRzfHZlY3Rvcil8YWJzdHJhY3R8YWxpYXN8YWxpZ258YXNtfGFzc2VydHxhdXRvfGJvZHl8Ym9vbHxicmVha3xieXRlfGNhc2V8Y2FzdHxjYXRjaHxjZG91YmxlfGNlbnR8Y2Zsb2F0fGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8Y3JlYWx8ZGNoYXJ8ZGVidWd8ZGVmYXVsdHxkZWxlZ2F0ZXxkZWxldGV8ZGVwcmVjYXRlZHxkb3xkb3VibGV8ZHN0cmluZ3xlbHNlfGVudW18ZXhwb3J0fGV4dGVybnxmYWxzZXxmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxmb3JlYWNofGZvcmVhY2hfcmV2ZXJzZXxmdW5jdGlvbnxnb3RvfGlkb3VibGV8aWZ8aWZsb2F0fGltbXV0YWJsZXxpbXBvcnR8aW5vdXR8aW50fGludGVyZmFjZXxpbnZhcmlhbnR8aXJlYWx8bGF6eXxsb25nfG1hY3JvfG1peGlufG1vZHVsZXxuZXd8bm90aHJvd3xudWxsfG91dHxvdmVycmlkZXxwYWNrYWdlfHByYWdtYXxwcml2YXRlfHByb3RlY3RlZHxwdHJkaWZmX3R8cHVibGljfHB1cmV8cmVhbHxyZWZ8cmV0dXJufHNjb3BlfHNoYXJlZHxzaG9ydHxzaXplX3R8c3RhdGljfHN0cmluZ3xzdHJ1Y3R8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHx0ZW1wbGF0ZXx0aGlzfHRocm93fHRydWV8dHJ5fHR5cGVkZWZ8dHlwZWlkfHR5cGVvZnx1Ynl0ZXx1Y2VudHx1aW50fHVsb25nfHVuaW9ufHVuaXR0ZXN0fHVzaG9ydHx2ZXJzaW9ufHZvaWR8dm9sYXRpbGV8d2NoYXJ8d2hpbGV8d2l0aHx3c3RyaW5nKVxcYi8sXG5cblx0J251bWJlcic6IFtcblx0XHQvLyBUaGUgbG9va2JlaGluZCBhbmQgdGhlIG5lZ2F0aXZlIGxvb2stYWhlYWQgdHJ5IHRvIHByZXZlbnQgYmFkIGhpZ2hsaWdodGluZyBvZiB0aGUgLi4gb3BlcmF0b3Jcblx0XHQvLyBIZXhhZGVjaW1hbCBudW1iZXJzIG11c3QgYmUgaGFuZGxlZCBzZXBhcmF0ZWx5IHRvIGF2b2lkIHByb2JsZW1zIHdpdGggZXhwb25lbnQgXCJlXCJcblx0XHQvXFxiMHhcXC4/W2EtZlxcZF9dKyg/Oig/IVxcLlxcLilcXC5bYS1mXFxkX10qKT8oPzpwWystXT9bYS1mXFxkX10rKT9bdWxmaV17MCw0fS9pLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oKD86XFwuXFwuKT8pKD86XFxiMGJcXC4/fFxcYnxcXC4pXFxkW1xcZF9dKig/Oig/IVxcLlxcLilcXC5bXFxkX10qKT8oPzplWystXT9cXGRbXFxkX10qKT9bdWxmaV17MCw0fS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblxuXHQnb3BlcmF0b3InOiAvXFx8W3w9XT98JlsmPV0/fFxcK1srPV0/fC1bLT1dP3xcXC4/XFwuXFwufD1bPj1dP3whKD86aVtuc11cXGJ8PD4/PT98Pj0/fD0pP3xcXGJpW25zXVxcYnwoPzo8Wzw+XT98Pj4/Pj98XFxeXFxefFsqXFwvJV5+XSk9Py9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkJywgJ3N0cmluZycsIHtcblx0Ly8gQ2hhcmFjdGVyc1xuXHQvLyAnYScsICdcXFxcJywgJ1xcbicsICdcXHhGRicsICdcXDM3NycsICdcXHVGRkZGJywgJ1xcVTAwMTBGRkZGJywgJ1xccXVvdCdcblx0J2NoYXInOiAvJyg/OlxcXFwoPzpcXFd8XFx3Kyl8W15cXFxcXSknL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2QnLCAna2V5d29yZCcsIHtcblx0J3Byb3BlcnR5JzogL1xcQkBcXHcqL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2QnLCAnZnVuY3Rpb24nLCB7XG5cdCdyZWdpc3Rlcic6IHtcblx0XHQvLyBJYXNtIHJlZ2lzdGVyc1xuXHRcdHBhdHRlcm46IC9cXGIoPzpbQUJDRF1bTEhYXXxFPyg/OkJQfERJfFNJfFNQKXxbQlNdUEx8W0VDU0RHRl1TfENSWzAyMzRdfFtEU11JTHxEUlswMTIzNjddfEVbQUJDRF1YfFg/TU1bMC03XXxSKD86MVswLTVdfFs4OV0pW0JXRF0/fFJbQUJDRF1YfFJbQlNdUHxSW0RTXUl8VFJbMy03XXxYTU0oPzoxWzAtNV18Wzg5XSl8WU1NKD86MVswLTVdfFxcZCkpXFxifFxcYlNUKD86XFwoWzAtN11cXCl8XFxiKS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIGtleXdvcmRzID0gW1xuXHRcdC9cXGIoPzphc3luY3xzeW5jfHlpZWxkKVxcKi8sXG5cdFx0L1xcYig/OmFic3RyYWN0fGFzc2VydHxhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnRpbnVlfGNvdmFyaWFudHxkZWZhdWx0fGRlZmVycmVkfGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGV4dGVuc2lvbnxleHRlcm5hbHxmYWN0b3J5fGZpbmFsfGZpbmFsbHl8Zm9yfGdldHxoaWRlfGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGludGVyZmFjZXxsaWJyYXJ5fG1peGlufG5ld3xudWxsfG9ufG9wZXJhdG9yfHBhcnR8cmV0aHJvd3xyZXR1cm58c2V0fHNob3d8c3RhdGljfHN1cGVyfHN3aXRjaHxzeW5jfHRoaXN8dGhyb3d8dHJ5fHR5cGVkZWZ8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvXG5cdF07XG5cblx0Ly8gSGFuZGxlcyBuYW1lZCBpbXBvcnRzLCBzdWNoIGFzIGh0dHAuQ2xpZW50XG5cdHZhciBwYWNrYWdlUHJlZml4ID0gLyhefFteXFx3Ll0pKD86W2Etel1cXHcqXFxzKlxcLlxccyopKig/OltBLVpdXFx3KlxccypcXC5cXHMqKSovLnNvdXJjZTtcblxuXHQvLyBiYXNlZCBvbiB0aGUgZGFydCBuYW1pbmcgY29udmVudGlvbnNcblx0dmFyIGNsYXNzTmFtZSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAocGFja2FnZVByZWZpeCArIC9bQS1aXSg/OltcXGRfQS1aXSpbYS16XVxcdyopP1xcYi8uc291cmNlKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16XVxcdyooPzpcXHMqXFwuXFxzKlthLXpdXFx3KikqKD86XFxzKlxcLik/Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRhcnQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gdmFyaWFibGVzIGFuZCBwYXJhbWV0ZXJzXG5cdFx0XHRcdC8vIHRoaXMgdG8gc3VwcG9ydCBjbGFzcyBuYW1lcyAob3IgZ2VuZXJpYyBwYXJhbWV0ZXJzKSB3aGljaCBkbyBub3QgY29udGFpbiBhIGxvd2VyIGNhc2UgbGV0dGVyIChhbHNvIHdvcmtzIGZvciBtZXRob2RzKVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFja2FnZVByZWZpeCArIC9bQS1aXVxcdyooPz1cXHMrXFx3K1xccypbOyw9KCldKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWUuaW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdvcGVyYXRvcic6IC9cXGJpcyF8XFxiKD86YXN8aXMpXFxifFxcK1xcK3wtLXwmJnxcXHxcXHx8PDw9P3w+Pj0/fH4oPzpcXC89Pyk/fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcPy9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZGFydCcsICdzdHJpbmcnLCB7XG5cdFx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdFx0cGF0dGVybjogL3I/KD86KFwiXCJcInwnJycpW1xcc1xcU10qP1xcMXwoW1wiJ10pKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMig/IVxcMikpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkKD86XFx3K3xcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmRhcnRcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHVuZGVmaW5lZFxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkYXJ0JywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J21ldGFkYXRhJzoge1xuXHRcdFx0cGF0dGVybjogL0BcXHcrLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkYXJ0JywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J2dlbmVyaWNzJzoge1xuXHRcdFx0cGF0dGVybjogLzwoPzpbXFx3XFxzLC4mP118PCg/OltcXHdcXHMsLiY/XXw8KD86W1xcd1xccywuJj9dfDxbXFx3XFxzLC4mP10qPikqPikqPikqPi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiBjbGFzc05hbWUsXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKSwuOl0vLFxuXHRcdFx0XHQnb3BlcmF0b3InOiAvWz8mfF0vXG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmRhdGF3ZWF2ZSA9IHtcblx0XHQndXJsJzogL1xcYltBLVphLXpdKzpcXC9cXC9bXFx3LzouPz0mLV0rfFxcYnVybjpbXFx3Oi4/PSYtXSsvLFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpcXGJcXHcrIyk/KD86XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwifFxcYlxcdyspKD89XFxzKls6QF0pLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J21pbWUtdHlwZSc6IC9cXGIoPzphcHBsaWNhdGlvbnxhdWRpb3xpbWFnZXxtdWx0aXBhcnR8dGV4dHx2aWRlbylcXC9bXFx3Ky1dKy8sXG5cdFx0J2RhdGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx8W1xcdzorLV0rXFx8Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3JlZ2V4Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcLyg/OlteXFxcXFxcL1xcclxcbl18XFxcXFteXFxyXFxuXSkrXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGF0fGNhc2V8ZG98ZWxzZXxmdW58aWZ8aW5wdXR8aXN8bWF0Y2h8bm90fG5zfG51bGx8b3J8b3V0cHV0fHR5cGV8dW5sZXNzfHVwZGF0ZXx1c2luZ3x2YXIpXFxiLyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW0EtWl9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0J251bWJlcic6IC8tP1xcYlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT9cXGIvaSxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOkBdLyxcblx0XHQnb3BlcmF0b3InOiAvPDx8Pj58LT58Wzw+fj1dPT98IT18LS0/LT98XFwrXFwrP3whfFxcPy8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5kYXggPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98KD86LS18XFwvXFwvKS4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZGF0YS1maWVsZCc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ118JycpKicoPyEnKSg/OlxcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdKT98XFx3K1xcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J21lYXN1cmUnOiB7XG5cdFx0cGF0dGVybjogL1xcW1sgXFx3XFx4QTAtXFx1RkZGRl0rXFxdLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OkFCU3xBQ09TfEFDT1NIfEFDT1R8QUNPVEh8QUREQ09MVU1OU3xBRERNSVNTSU5HSVRFTVN8QUxMfEFMTENST1NTRklMVEVSRUR8QUxMRVhDRVBUfEFMTE5PQkxBTktST1d8QUxMU0VMRUNURUR8QU5EfEFQUFJPWElNQVRFRElTVElOQ1RDT1VOVHxBU0lOfEFTSU5IfEFUQU58QVRBTkh8QVZFUkFHRXxBVkVSQUdFQXxBVkVSQUdFWHxCRVRBXFwuRElTVHxCRVRBXFwuSU5WfEJMQU5LfENBTENVTEFURXxDQUxDVUxBVEVUQUJMRXxDQUxFTkRBUnxDQUxFTkRBUkFVVE98Q0VJTElOR3xDSElTUVxcLkRJU1R8Q0hJU1FcXC5ESVNUXFwuUlR8Q0hJU1FcXC5JTlZ8Q0hJU1FcXC5JTlZcXC5SVHxDTE9TSU5HQkFMQU5DRU1PTlRIfENMT1NJTkdCQUxBTkNFUVVBUlRFUnxDTE9TSU5HQkFMQU5DRVlFQVJ8Q09BTEVTQ0V8Q09NQklOfENPTUJJTkF8Q09NQklORVZBTFVFU3xDT05DQVRFTkFURXxDT05DQVRFTkFURVh8Q09ORklERU5DRVxcLk5PUk18Q09ORklERU5DRVxcLlR8Q09OVEFJTlN8Q09OVEFJTlNST1d8Q09OVEFJTlNTVFJJTkd8Q09OVEFJTlNTVFJJTkdFWEFDVHxDT05WRVJUfENPU3xDT1NIfENPVHxDT1RIfENPVU5UfENPVU5UQXxDT1VOVEFYfENPVU5UQkxBTkt8Q09VTlRST1dTfENPVU5UWHxDUk9TU0ZJTFRFUnxDUk9TU0pPSU58Q1VSUkVOQ1l8Q1VSUkVOVEdST1VQfENVU1RPTURBVEF8REFUQVRBQkxFfERBVEV8REFURUFERHxEQVRFRElGRnxEQVRFU0JFVFdFRU58REFURVNJTlBFUklPRHxEQVRFU01URHxEQVRFU1FURHxEQVRFU1lURHxEQVRFVkFMVUV8REFZfERFR1JFRVN8REVUQUlMUk9XU3xESVNUSU5DVHxESVNUSU5DVENPVU5UfERJU1RJTkNUQ09VTlROT0JMQU5LfERJVklERXxFQVJMSUVSfEVBUkxJRVNUfEVEQVRFfEVORE9GTU9OVEh8RU5ET0ZRVUFSVEVSfEVORE9GWUVBUnxFT01PTlRIfEVSUk9SfEVWRU58RVhBQ1R8RVhDRVBUfEVYUHxFWFBPTlxcLkRJU1R8RkFDVHxGQUxTRXxGSUxURVJ8RklMVEVSU3xGSU5EfEZJUlNUREFURXxGSVJTVE5PTkJMQU5LfEZJUlNUTk9OQkxBTktWQUxVRXxGSVhFRHxGTE9PUnxGT1JNQVR8R0NEfEdFTkVSQVRFfEdFTkVSQVRFQUxMfEdFTkVSQVRFU0VSSUVTfEdFT01FQU58R0VPTUVBTlh8R1JPVVBCWXxIQVNPTkVGSUxURVJ8SEFTT05FVkFMVUV8SE9VUnxJRnxJRlxcLkVBR0VSfElGRVJST1J8SUdOT1JFfElOVHxJTlRFUlNFQ1R8SVNCTEFOS3xJU0NST1NTRklMVEVSRUR8SVNFTVBUWXxJU0VSUk9SfElTRVZFTnxJU0ZJTFRFUkVEfElTSU5TQ09QRXxJU0xPR0lDQUx8SVNOT05URVhUfElTTlVNQkVSfElTT1xcLkNFSUxJTkd8SVNPRER8SVNPTk9SQUZURVJ8SVNTRUxFQ1RFRE1FQVNVUkV8SVNTVUJUT1RBTHxJU1RFWFR8S0VFUEZJTFRFUlN8S0VZV09SRE1BVENIfExBU1REQVRFfExBU1ROT05CTEFOS3xMQVNUTk9OQkxBTktWQUxVRXxMQ018TEVGVHxMRU58TE58TE9HfExPRzEwfExPT0tVUFZBTFVFfExPV0VSfE1BWHxNQVhBfE1BWFh8TUVESUFOfE1FRElBTlh8TUlEfE1JTnxNSU5BfE1JTlVURXxNSU5YfE1PRHxNT05USHxNUk9VTkR8TkFUVVJBTElOTkVSSk9JTnxOQVRVUkFMTEVGVE9VVEVSSk9JTnxORVhUREFZfE5FWFRNT05USHxORVhUUVVBUlRFUnxORVhUWUVBUnxOT05WSVNVQUx8Tk9STVxcLkRJU1R8Tk9STVxcLklOVnxOT1JNXFwuU1xcLkRJU1R8Tk9STVxcLlNcXC5JTlZ8Tk9UfE5PV3xPRER8T1BFTklOR0JBTEFOQ0VNT05USHxPUEVOSU5HQkFMQU5DRVFVQVJURVJ8T1BFTklOR0JBTEFOQ0VZRUFSfE9SfFBBUkFMTEVMUEVSSU9EfFBBVEh8UEFUSENPTlRBSU5TfFBBVEhJVEVNfFBBVEhJVEVNUkVWRVJTRXxQQVRITEVOR1RIfFBFUkNFTlRJTEVcXC5FWEN8UEVSQ0VOVElMRVxcLklOQ3xQRVJDRU5USUxFWFxcLkVYQ3xQRVJDRU5USUxFWFxcLklOQ3xQRVJNVVR8UEl8UE9JU1NPTlxcLkRJU1R8UE9XRVJ8UFJFVklPVVNEQVl8UFJFVklPVVNNT05USHxQUkVWSU9VU1FVQVJURVJ8UFJFVklPVVNZRUFSfFBST0RVQ1R8UFJPRFVDVFh8UVVBUlRFUnxRVU9USUVOVHxSQURJQU5TfFJBTkR8UkFOREJFVFdFRU58UkFOS1xcLkVRfFJBTktYfFJFTEFURUR8UkVMQVRFRFRBQkxFfFJFTU9WRUZJTFRFUlN8UkVQTEFDRXxSRVBUfFJJR0hUfFJPTExVUHxST0xMVVBBRERJU1NVQlRPVEFMfFJPTExVUEdST1VQfFJPTExVUElTU1VCVE9UQUx8Uk9VTkR8Uk9VTkRET1dOfFJPVU5EVVB8Uk9XfFNBTUVQRVJJT0RMQVNUWUVBUnxTQU1QTEV8U0VBUkNIfFNFQ09ORHxTRUxFQ1RDT0xVTU5TfFNFTEVDVEVETUVBU1VSRXxTRUxFQ1RFRE1FQVNVUkVGT1JNQVRTVFJJTkd8U0VMRUNURURNRUFTVVJFTkFNRXxTRUxFQ1RFRFZBTFVFfFNJR058U0lOfFNJTkh8U1FSVHxTUVJUUEl8U1RBUlRPRk1PTlRIfFNUQVJUT0ZRVUFSVEVSfFNUQVJUT0ZZRUFSfFNUREVWXFwuUHxTVERFVlxcLlN8U1RERVZYXFwuUHxTVERFVlhcXC5TfFNVQlNUSVRVVEV8U1VCU1RJVFVURVdJVEhJTkRFWHxTVU18U1VNTUFSSVpFfFNVTU1BUklaRUNPTFVNTlN8U1VNWHxTV0lUQ0h8VFxcLkRJU1R8VFxcLkRJU1RcXC4yVHxUXFwuRElTVFxcLlJUfFRcXC5JTlZ8VFxcLklOVlxcLjJUfFRBTnxUQU5IfFRJTUV8VElNRVZBTFVFfFRPREFZfFRPUE58VE9QTlBFUkxFVkVMfFRPUE5TS0lQfFRPVEFMTVREfFRPVEFMUVREfFRPVEFMWVREfFRSRUFUQVN8VFJJTXxUUlVFfFRSVU5DfFVOSUNIQVJ8VU5JQ09ERXxVTklPTnxVUFBFUnxVU0VSRUxBVElPTlNISVB8VVNFUk5BTUV8VVNFUk9CSkVDVElEfFVTRVJQUklOQ0lQQUxOQU1FfFVUQ05PV3xVVENUT0RBWXxWQUxVRXxWQUxVRVN8VkFSXFwuUHxWQVJcXC5TfFZBUlhcXC5QfFZBUlhcXC5TfFdFRUtEQVl8V0VFS05VTXxYSVJSfFhOUFZ8WUVBUnxZRUFSRlJBQykoPz1cXHMqXFwoKS9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzpERUZJTkV8RVZBTFVBVEV8TUVBU1VSRXxPUkRFUlxccytCWXxSRVRVUk58VkFSfFNUQVJUXFxzK0FUfEFTQ3xERVNDKVxcYi9pLFxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86RkFMU0V8TlVMTHxUUlVFKVxcYi9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrXFxiLyxcblx0J29wZXJhdG9yJzogLzo9fFstKypcXC89Xl18JiY/fFxcfFxcfHw8KD86PT4/fDx8Pik/fD5bPj1dP3xcXGIoPzpJTnxOT1QpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bO1xcW1xcXSgpe31gLC5dL1xufTtcblxuLy8gQUJORiBncmFtbWFyOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RoYWxsLWxhbmcvZGhhbGwtbGFuZy9ibG9iL21hc3Rlci9zdGFuZGFyZC9kaGFsbC5hYm5mXG5cblByaXNtLmxhbmd1YWdlcy5kaGFsbCA9IHtcblx0Ly8gTXVsdGktbGluZSBjb21tZW50cyBjYW4gYmUgbmVzdGVkLiBFLmcuIHstIGZvbyB7LSBiYXIgLX0gLX1cblx0Ly8gVGhlIG11bHRpLWxpbmUgcGF0dGVybiBpcyBlc3NlbnRpYWxseSB0aGlzOlxuXHQvLyAgIFxcey0oPzpbXi17XXwtKD8hXFx9KXxcXHsoPyEtKXw8U0VMRj4pKi1cXH1cblx0J2NvbW1lbnQnOiAvLS0uKnxcXHstKD86W14te118LSg/IVxcfSl8XFx7KD8hLSl8XFx7LSg/OlteLXtdfC0oPyFcXH0pfFxceyg/IS0pKSotXFx9KSotXFx9Lyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifCcnKD86W14nXXwnKD8hJyl8JycnfCcnXFwkXFx7KSonJyg/ISd8XFwkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXnt9XSpcXH0vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcJFxceylbXFxzXFxTXSsoPz1cXH0kKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1kaGFsbCcsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJsb3dcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCRcXHt8XFx9L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogL2BbXmBdKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndXJsJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDU5NlxuXHRcdHBhdHRlcm46IC9cXGJodHRwcz86XFwvXFwvW1xcdy46JSEkJicqKzs9QH4tXSsoPzpcXC9bXFx3LjolISQmJyorOz1Afi1dKikqKD86XFw/Wy8/XFx3LjolISQmJyorOz1Afi1dKik/Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Vudic6IHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZGhhbGwtbGFuZy9kaGFsbC1sYW5nL2Jsb2IvNWZkZThlZjFiZWFkNmZiNGU5OTlkM2MxZmZlNzA0NGNkMDE5ZDYzYS9zdGFuZGFyZC9kaGFsbC5hYm5mI0w2NjFcblx0XHRwYXR0ZXJuOiAvXFxiZW52Oig/Oig/IVxcZClcXHcrfFwiKD86W15cIlxcXFw9XXxcXFxcLikqXCIpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvXmVudi8sXG5cdFx0XHQnb3BlcmF0b3InOiAvXjovLFxuXHRcdFx0J3ZhcmlhYmxlJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdoYXNoJzoge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDcyNVxuXHRcdHBhdHRlcm46IC9cXGJzaGEyNTY6W1xcZGEtZkEtRl17NjR9XFxiLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmdW5jdGlvbic6IC9zaGEyNTYvLFxuXHRcdFx0J29wZXJhdG9yJzogLzovLFxuXHRcdFx0J251bWJlcic6IC9bXFxkYS1mQS1GXXs2NH0vXG5cdFx0fVxuXHR9LFxuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi81ZmRlOGVmMWJlYWQ2ZmI0ZTk5OWQzYzFmZmU3MDQ0Y2QwMTlkNjNhL3N0YW5kYXJkL2RoYWxsLmFibmYjTDM1OVxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xhc3NlcnR8ZWxzZXxmb3JhbGx8aWZ8aW58bGV0fG1lcmdlfG1pc3Npbmd8dGhlbnx0b01hcHx1c2luZ3x3aXRoKVxcYnxcXHUyMjAwLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86Tm9uZXxTb21lKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8VHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYk5hTlxcYnwtP1xcYkluZmluaXR5XFxifFsrLV0/XFxiKD86MHhbXFxkYS1mQS1GXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwvXFxcXHxcXC9cXC9cXFxcXFxcXHwmJnxcXHxcXHx8PT09fFshPV09fFxcL1xcL3wtPnxcXCtcXCt8Ojp8WysqI0A9Oj88PnxcXFxcXFx1MjIyN1xcdTJhNTNcXHUyMjYxXFx1MmFmZFxcdTAzYmJcXHUyMTkyXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9cXC5cXC58W3t9XFxbXFxdKCksLi9dLyxcblxuXHQvLyB3ZSdsbCBqdXN0IGFzc3VtZSB0aGF0IGV2ZXJ5IGNhcGl0YWwgd29yZCBsZWZ0IGlzIGEgdHlwZSBuYW1lXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5kaGFsbC5zdHJpbmcuaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmRoYWxsO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRpZmYgPSB7XG5cdFx0J2Nvb3JkJzogW1xuXHRcdFx0Ly8gTWF0Y2ggYWxsIGtpbmRzIG9mIGNvb3JkIGxpbmVzIChwcmVmaXhlZCBieSBcIisrK1wiLCBcIi0tLVwiIG9yIFwiKioqXCIpLlxuXHRcdFx0L14oPzpcXCp7M318LXszfXxcXCt7M30pLiokL20sXG5cdFx0XHQvLyBNYXRjaCBcIkBAIC4uLiBAQFwiIGNvb3JkIGxpbmVzIGluIHVuaWZpZWQgZGlmZi5cblx0XHRcdC9eQEAuKkBAJC9tLFxuXHRcdFx0Ly8gTWF0Y2ggY29vcmQgbGluZXMgaW4gbm9ybWFsIGRpZmYgKHN0YXJ0cyB3aXRoIGEgbnVtYmVyKS5cblx0XHRcdC9eXFxkLiokL21cblx0XHRdXG5cblx0XHQvLyBkZWxldGVkLCBpbnNlcnRlZCwgdW5jaGFuZ2VkLCBkaWZmXG5cdH07XG5cblx0LyoqXG5cdCAqIEEgbWFwIGZyb20gdGhlIG5hbWUgb2YgYSBibG9jayB0byBpdHMgbGluZSBwcmVmaXguXG5cdCAqXG5cdCAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fVxuXHQgKi9cblx0dmFyIFBSRUZJWEVTID0ge1xuXHRcdCdkZWxldGVkLXNpZ24nOiAnLScsXG5cdFx0J2RlbGV0ZWQtYXJyb3cnOiAnPCcsXG5cdFx0J2luc2VydGVkLXNpZ24nOiAnKycsXG5cdFx0J2luc2VydGVkLWFycm93JzogJz4nLFxuXHRcdCd1bmNoYW5nZWQnOiAnICcsXG5cdFx0J2RpZmYnOiAnIScsXG5cdH07XG5cblx0Ly8gYWRkIGEgdG9rZW4gZm9yIGVhY2ggcHJlZml4XG5cdE9iamVjdC5rZXlzKFBSRUZJWEVTKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG5cdFx0dmFyIHByZWZpeCA9IFBSRUZJWEVTW25hbWVdO1xuXG5cdFx0dmFyIGFsaWFzID0gW107XG5cdFx0aWYgKCEvXlxcdyskLy50ZXN0KG5hbWUpKSB7IC8vIFwiZGVsZXRlZC1zaWduXCIgLT4gXCJkZWxldGVkXCJcblx0XHRcdGFsaWFzLnB1c2goL1xcdysvLmV4ZWMobmFtZSlbMF0pO1xuXHRcdH1cblx0XHRpZiAobmFtZSA9PT0gJ2RpZmYnKSB7XG5cdFx0XHRhbGlhcy5wdXNoKCdib2xkJyk7XG5cdFx0fVxuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmRpZmZbbmFtZV0gPSB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oPzpbJyArIHByZWZpeCArICddLiooPzpcXHJcXG4/fFxcbnwoPyFbXFxcXHNcXFxcU10pKSkrJywgJ20nKSxcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnbGluZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKC4pKD89W1xcc1xcU10pLiooPzpcXHJcXG4/fFxcbik/Lyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwcmVmaXgnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdLyxcblx0XHRcdFx0XHRhbGlhczogL1xcdysvLmV4ZWMobmFtZSlbMF1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0fSk7XG5cblx0Ly8gbWFrZSBwcmVmaXhlcyBhdmFpbGFibGUgdG8gRGlmZiBwbHVnaW5cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5kaWZmLCAnUFJFRklYRVMnLCB7XG5cdFx0dmFsdWU6IFBSRUZJWEVTXG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGxhY2Vob2xkZXIgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZSBpZCBhbmQgaW5kZXguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGluZGV4XG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgaW5kZXgpIHtcblx0XHRyZXR1cm4gJ19fXycgKyBsYW5ndWFnZS50b1VwcGVyQ2FzZSgpICsgaW5kZXggKyAnX19fJztcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXSA9IHt9LCB7XG5cdFx0YnVpbGRQbGFjZWhvbGRlcnM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogVG9rZW5pemUgYWxsIGlubGluZSB0ZW1wbGF0aW5nIGV4cHJlc3Npb25zIG1hdGNoaW5nIGBwbGFjZWhvbGRlclBhdHRlcm5gLlxuXHRcdFx0ICpcblx0XHRcdCAqIElmIGByZXBsYWNlRmlsdGVyYCBpcyBwcm92aWRlZCwgb25seSBtYXRjaGVzIG9mIGBwbGFjZWhvbGRlclBhdHRlcm5gIGZvciB3aGljaCBgcmVwbGFjZUZpbHRlcmAgcmV0dXJuc1xuXHRcdFx0ICogYHRydWVgIHdpbGwgYmUgcmVwbGFjZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtvYmplY3R9IGVudiBUaGUgZW52aXJvbm1lbnQgb2YgdGhlIGBiZWZvcmUtdG9rZW5pemVgIGhvb2suXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGlkLlxuXHRcdFx0ICogQHBhcmFtIHtSZWdFeHB9IHBsYWNlaG9sZGVyUGF0dGVybiBUaGUgbWF0Y2hlcyBvZiB0aGlzIHBhdHRlcm4gd2lsbCBiZSByZXBsYWNlZCBieSBwbGFjZWhvbGRlcnMuXG5cdFx0XHQgKiBAcGFyYW0geyhtYXRjaDogc3RyaW5nKSA9PiBib29sZWFufSBbcmVwbGFjZUZpbHRlcl1cblx0XHRcdCAqL1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChlbnYsIGxhbmd1YWdlLCBwbGFjZWhvbGRlclBhdHRlcm4sIHJlcGxhY2VGaWx0ZXIpIHtcblx0XHRcdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gbGFuZ3VhZ2UpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdG9rZW5TdGFjayA9IGVudi50b2tlblN0YWNrID0gW107XG5cblx0XHRcdFx0ZW52LmNvZGUgPSBlbnYuY29kZS5yZXBsYWNlKHBsYWNlaG9sZGVyUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiByZXBsYWNlRmlsdGVyID09PSAnZnVuY3Rpb24nICYmICFyZXBsYWNlRmlsdGVyKG1hdGNoKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YXIgaSA9IHRva2VuU3RhY2subGVuZ3RoO1xuXHRcdFx0XHRcdHZhciBwbGFjZWhvbGRlcjtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGZvciBleGlzdGluZyBzdHJpbmdzXG5cdFx0XHRcdFx0d2hpbGUgKGVudi5jb2RlLmluZGV4T2YocGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgaSkpICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0KytpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBhIHNwYXJzZSBhcnJheVxuXHRcdFx0XHRcdHRva2VuU3RhY2tbaV0gPSBtYXRjaDtcblxuXHRcdFx0XHRcdHJldHVybiBwbGFjZWhvbGRlcjtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gU3dpdGNoIHRoZSBncmFtbWFyIHRvIG1hcmt1cFxuXHRcdFx0XHRlbnYuZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0b2tlbml6ZVBsYWNlaG9sZGVyczoge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXBsYWNlIHBsYWNlaG9sZGVycyB3aXRoIHByb3BlciB0b2tlbnMgYWZ0ZXIgdG9rZW5pemluZy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge29iamVjdH0gZW52IFRoZSBlbnZpcm9ubWVudCBvZiB0aGUgYGFmdGVyLXRva2VuaXplYCBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBpZC5cblx0XHRcdCAqL1xuXHRcdFx0dmFsdWU6IGZ1bmN0aW9uIChlbnYsIGxhbmd1YWdlKSB7XG5cdFx0XHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09IGxhbmd1YWdlIHx8ICFlbnYudG9rZW5TdGFjaykge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN3aXRjaCB0aGUgZ3JhbW1hciBiYWNrXG5cdFx0XHRcdGVudi5ncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblxuXHRcdFx0XHR2YXIgaiA9IDA7XG5cdFx0XHRcdHZhciBrZXlzID0gT2JqZWN0LmtleXMoZW52LnRva2VuU3RhY2spO1xuXG5cdFx0XHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRcdC8vIGFsbCBwbGFjZWhvbGRlcnMgYXJlIHJlcGxhY2VkIGFscmVhZHlcblx0XHRcdFx0XHRcdGlmIChqID49IGtleXMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyB8fCAodG9rZW4uY29udGVudCAmJiB0eXBlb2YgdG9rZW4uY29udGVudCA9PT0gJ3N0cmluZycpKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBrID0ga2V5c1tqXTtcblx0XHRcdFx0XHRcdFx0dmFyIHQgPSBlbnYudG9rZW5TdGFja1trXTtcblx0XHRcdFx0XHRcdFx0dmFyIHMgPSB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiB0b2tlbi5jb250ZW50O1xuXHRcdFx0XHRcdFx0XHR2YXIgcGxhY2Vob2xkZXIgPSBnZXRQbGFjZWhvbGRlcihsYW5ndWFnZSwgayk7XG5cblx0XHRcdFx0XHRcdFx0dmFyIGluZGV4ID0gcy5pbmRleE9mKHBsYWNlaG9sZGVyKTtcblx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHQrK2o7XG5cblx0XHRcdFx0XHRcdFx0XHR2YXIgYmVmb3JlID0gcy5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBtaWRkbGUgPSBuZXcgUHJpc20uVG9rZW4obGFuZ3VhZ2UsIFByaXNtLnRva2VuaXplKHQsIGVudi5ncmFtbWFyKSwgJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSwgdCk7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIGFmdGVyID0gcy5zdWJzdHJpbmcoaW5kZXggKyBwbGFjZWhvbGRlci5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJlcGxhY2VtZW50ID0gW107XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaC5hcHBseShyZXBsYWNlbWVudCwgd2Fsa1Rva2VucyhbYmVmb3JlXSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKG1pZGRsZSk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGFmdGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoLmFwcGx5KHJlcGxhY2VtZW50LCB3YWxrVG9rZW5zKFthZnRlcl0pKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpLCAxXS5jb25jYXQocmVwbGFjZW1lbnQpKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0dG9rZW4uY29udGVudCA9IHJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0b2tlbi5jb250ZW50IC8qICYmIHR5cGVvZiB0b2tlbi5jb250ZW50ICE9PSAnc3RyaW5nJyAqLykge1xuXHRcdFx0XHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0b2tlbnM7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuLy8gRGphbmdvL0ppbmphMiBzeW50YXggZGVmaW5pdGlvbiBmb3IgUHJpc20uanMgPGh0dHA6Ly9wcmlzbWpzLmNvbT4gc3ludGF4IGhpZ2hsaWdodGVyLlxuLy8gTW9zdGx5IGl0IHdvcmtzIE9LIGJ1dCBjYW4gcGFpbnQgY29kZSBpbmNvcnJlY3RseSBvbiBjb21wbGV4IGh0bWwvdGVtcGxhdGUgdGFnIGNvbWJpbmF0aW9ucy5cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5kamFuZ28gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXlxceyNbXFxzXFxTXSo/I1xcfSQvLFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHslWystXT9cXHMqKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxce1t7JV1bKy1dP3xbKy1dP1t9JV1cXH0kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZmlsdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHwpXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCd0ZXN0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJpc1xccysoPzpub3RcXHMrKT8pKD8hbm90XFxiKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kyg/PVxccypcXCgpL2ksXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGJ5fGVsc2V8Zm9yfGlmfGltcG9ydHxpbnxpc3xsb29wfG5vdHxvcnxyZWN1cnNpdmV8d2l0aHx3aXRob3V0KVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1stKyU9XT0/fCE9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHRcdCdib29sZWFuJzogL1tGZl1hbHNlfFtObl1vbmV8W1R0XXJ1ZS8sXG5cdFx0J3ZhcmlhYmxlJzogL1xcYlxcdytcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCksLjo7XS9cblx0fTtcblxuXG5cdHZhciBwYXR0ZXJuID0gL1xce1xce1tcXHNcXFNdKj9cXH1cXH18XFx7JVtcXHNcXFNdKj8lXFx9fFxceyNbXFxzXFxTXSo/I1xcfS9nO1xuXHR2YXIgbWFya3VwVGVtcGxhdGluZyA9IFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2RqYW5nbycsIHBhdHRlcm4pO1xuXHR9KTtcblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2RqYW5nbycpO1xuXHR9KTtcblxuXHQvLyBBZGQgYW4gSmluamEyIGFsaWFzXG5cdFByaXNtLmxhbmd1YWdlcy5qaW5qYTIgPSBQcmlzbS5sYW5ndWFnZXMuZGphbmdvO1xuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2ppbmphMicsIHBhdHRlcm4pO1xuXHR9KTtcblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRtYXJrdXBUZW1wbGF0aW5nLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2ppbmphMicpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2Rucy16b25lLWZpbGUnXSA9IHtcblx0J2NvbW1lbnQnOiAvOy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlxcJE9SSUdJTlsgXFx0XSspXFxTKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpQCg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXlxcJCg/OklOQ0xVREV8T1JJR0lOfFRUTCkoPz1cXHN8JCkvbSxcblx0J2NsYXNzJzoge1xuXHRcdC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMxMDM1I3BhZ2UtMTNcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OkNIfENTfEhTfElOKSg/PVxcc3wkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCd0eXBlJzoge1xuXHRcdC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfRE5TX3JlY29yZF90eXBlc1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86QXxBNnxBQUFBfEFGU0RCfEFQTHxBVE1BfENBQXxDRE5TS0VZfENEU3xDRVJUfENOQU1FfERIQ0lEfERMVnxETkFNRXxETlNLRVl8RFN8RUlEfEdJRHxHUE9TfEhJTkZPfEhJUHxJUFNFQ0tFWXxJU0ROfEtFWXxLWHxMT0N8TUFJTEF8TUFJTEJ8TUJ8TUR8TUZ8TUd8TUlORk98TVJ8TVh8TkFQVFJ8TkJ8TkJTVEFUfE5JTUxPQ3xOSU5GT3xOU3xOU0FQfE5TQVAtUFRSfE5TRUN8TlNFQzN8TlNFQzNQQVJBTXxOVUxMfE5YVHxPUEVOUEdQS0VZfFBUUnxQWHxSS0VZfFJQfFJSU0lHfFJUfFNJR3xTSU5LfFNNSU1FQXxTT0F8U1BGfFNSVnxTU0hGUHxUQXxUS0VZfFRMU0F8VFNJR3xUWFR8VUlEfFVJTkZPfFVOU1BFQ3xVUkl8V0tTfFgyNSkoPz1cXHN8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1snZG5zLXpvbmUnXSA9IFByaXNtLmxhbmd1YWdlc1snZG5zLXpvbmUtZmlsZSddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gTWFueSBvZiB0aGUgZm9sbG93aW5nIHJlZ2V4ZXMgd2lsbCBjb250YWluIG5lZ2F0ZWQgbG9va2FoZWFkcyBsaWtlIGBbIFxcdF0rKD8hWyBcXHRdKWAuIFRoaXMgaXMgYSB0cmljayB0byBlbnN1cmVcblx0Ly8gdGhhdCBxdWFudGlmaWVycyBiZWhhdmUgKmF0b21pY2FsbHkqLiBBdG9taWMgcXVhbnRpZmllcnMgYXJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGV4cG9uZW50aWFsIGJhY2t0cmFja2luZy5cblxuXHR2YXIgc3BhY2VBZnRlckJhY2tTbGFzaCA9IC9cXFxcW1xcclxcbl0oPzpcXHN8XFxcXFtcXHJcXG5dfCMuKig/IS4pKSooPyFbXFxzI118XFxcXFtcXHJcXG5dKS8uc291cmNlO1xuXHQvLyBBdCBsZWFzdCBvbmUgc3BhY2UsIGNvbW1lbnQsIG9yIGxpbmUgYnJlYWtcblx0dmFyIHNwYWNlID0gLyg/OlsgXFx0XSsoPyFbIFxcdF0pKD86PFNQX0JTPik/fDxTUF9CUz4pLy5zb3VyY2Vcblx0XHQucmVwbGFjZSgvPFNQX0JTPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzcGFjZUFmdGVyQmFja1NsYXNoOyB9KTtcblxuXHR2YXIgc3RyaW5nID0gL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKicvLnNvdXJjZTtcblx0dmFyIG9wdGlvbiA9IC8tLVtcXHctXSs9KD86PFNUUj58KD8hW1wiJ10pKD86W15cXHNcXFxcXXxcXFxcLikrKS8uc291cmNlLnJlcGxhY2UoLzxTVFI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZzsgfSk7XG5cblx0dmFyIHN0cmluZ1J1bGUgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZyksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cdHZhciBjb21tZW50UnVsZSA9IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiByZShzb3VyY2UsIGZsYWdzKSB7XG5cdFx0c291cmNlID0gc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPE9QVD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gb3B0aW9uOyB9KVxuXHRcdFx0LnJlcGxhY2UoLzxTUD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3BhY2U7IH0pO1xuXG5cdFx0cmV0dXJuIFJlZ0V4cChzb3VyY2UsIGZsYWdzKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5kb2NrZXIgPSB7XG5cdFx0J2luc3RydWN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzpBRER8QVJHfENNRHxDT1BZfEVOVFJZUE9JTlR8RU5WfEVYUE9TRXxGUk9NfEhFQUxUSENIRUNLfExBQkVMfE1BSU5UQUlORVJ8T05CVUlMRHxSVU58U0hFTEx8U1RPUFNJR05BTHxVU0VSfFZPTFVNRXxXT1JLRElSKSg/PVxccykoPzpcXFxcLnxbXlxcclxcblxcXFxdKSooPzpcXFxcJCg/Olxcc3wjLiokKSooPyFbXFxzI10pKD86XFxcXC58W15cXHJcXG5cXFxcXSkqKSovaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvcHRpb25zJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXig/Ok9OQlVJTEQ8U1A+KT9cXHcrPFNQPik8T1BUPig/OjxTUD48T1BUPikqLy5zb3VyY2UsICdpJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpLS1bXFx3LV0rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdzdHJpbmcnOiBbXG5cdFx0XHRcdFx0XHRcdHN0cmluZ1J1bGUsXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD0pKD8hW1wiJ10pKD86W15cXHNcXFxcXXxcXFxcLikrLyxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFxcXCQvbSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC89L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNoZWFsdGhjaGVja1xuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheKD86T05CVUlMRDxTUD4pP0hFQUxUSENIRUNLPFNQPig/OjxPUFQ+PFNQPikqKSg/OkNNRHxOT05FKVxcYi8uc291cmNlLCAnaScpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLmRvY2tlci5jb20vZW5naW5lL3JlZmVyZW5jZS9idWlsZGVyLyNmcm9tXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvKF4oPzpPTkJVSUxEPFNQPik/RlJPTTxTUD4oPzo8T1BUPjxTUD4pKig/IS0tKVteIFxcdFxcXFxdKzxTUD4pQVMvLnNvdXJjZSwgJ2knKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jb25idWlsZFxuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheT05CVUlMRDxTUD4pXFx3Ky8uc291cmNlLCAnaScpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXHcrLyxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50UnVsZSxcblx0XHRcdFx0J3N0cmluZyc6IHN0cmluZ1J1bGUsXG5cdFx0XHRcdCd2YXJpYWJsZSc6IC9cXCQoPzpcXHcrfFxce1tee31cIidcXFxcXSpcXH0pLyxcblx0XHRcdFx0J29wZXJhdG9yJzogL1xcXFwkL21cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb21tZW50JzogY29tbWVudFJ1bGVcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZG9ja2VyZmlsZSA9IFByaXNtLmxhbmd1YWdlcy5kb2NrZXI7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly93d3cuZ3JhcGh2aXoub3JnL2RvYy9pbmZvL2xhbmcuaHRtbFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIElEID0gJyg/OicgKyBbXG5cdFx0Ly8gYW4gaWRlbnRpZmllclxuXHRcdC9bYS16QS1aX1xceDgwLVxcdUZGRkZdW1xcd1xceDgwLVxcdUZGRkZdKi8uc291cmNlLFxuXHRcdC8vIGEgbnVtYmVyXG5cdFx0Ly0/KD86XFwuXFxkK3xcXGQrKD86XFwuXFxkKik/KS8uc291cmNlLFxuXHRcdC8vIGEgZG91YmxlLXF1b3RlZCBzdHJpbmdcblx0XHQvXCJbXlwiXFxcXF0qKD86XFxcXFtcXHNcXFNdW15cIlxcXFxdKikqXCIvLnNvdXJjZSxcblx0XHQvLyBIVE1MLWxpa2Ugc3RyaW5nXG5cdFx0LzwoPzpbXjw+XXwoPyE8IS0tKTwoPzpbXjw+XCInXXxcIlteXCJdKlwifCdbXiddKicpKz58PCEtLSg/OlteLV18LSg/IS0+KSkqLS0+KSo+Ly5zb3VyY2Vcblx0XS5qb2luKCd8JykgKyAnKSc7XG5cblx0dmFyIElESW5zaWRlID0ge1xuXHRcdCdtYXJrdXAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF48KVtcXHNcXFNdKyg/PT4kKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6IFsnbGFuZ3VhZ2UtbWFya3VwJywgJ2xhbmd1YWdlLWh0bWwnLCAnbGFuZ3VhZ2UteG1sJ10sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9XG5cdH07XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiB3aXRoSUQoc291cmNlLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAoc291cmNlLnJlcGxhY2UoLzxJRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gSUQ7IH0pLCBmbGFncyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuZG90ID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC98XiMuKi9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZ3JhcGgtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IHdpdGhJRCgvKFxcYig/OmRpZ3JhcGh8Z3JhcGh8c3ViZ3JhcGgpWyBcXHRcXHJcXG5dKyk8SUQ+Ly5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdGluc2lkZTogSURJbnNpZGVcblx0XHR9LFxuXHRcdCdhdHRyLXZhbHVlJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElEKC8oPVsgXFx0XFxyXFxuXSopPElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElEKC8oW1xcWzssIFxcdFxcclxcbl0pPElEPig/PVsgXFx0XFxyXFxuXSo9KS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpkaWdyYXBofGVkZ2V8Z3JhcGh8bm9kZXxzdHJpY3R8c3ViZ3JhcGgpXFxiL2ksXG5cdFx0J2NvbXBhc3MtcG9pbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKDpbIFxcdFxcclxcbl0qKSg/Oltld2NfXXxbbnNdW2V3XT8pKD8hW1xcd1xceDgwLVxcdUZGRkZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdH0sXG5cdFx0J25vZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3aXRoSUQoLyhefFteLS5cXHdcXHg4MC1cXHVGRkZGXFxcXF0pPElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvWz06XXwtWy0+XS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fTssXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ3YgPSBQcmlzbS5sYW5ndWFnZXMuZG90O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lYm5mID0ge1xuXHQnY29tbWVudCc6IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3NwZWNpYWwnOiB7XG5cdFx0cGF0dGVybjogL1xcP1teP1xcclxcbl0qXFw/Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXG5cdCdkZWZpbml0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopW2Etel1cXHcqKD86WyBcXHRdK1thLXpdXFx3KikqKD89XFxzKj0pL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6IFsncnVsZScsICdrZXl3b3JkJ11cblx0fSxcblx0J3J1bGUnOiAvXFxiW2Etel1cXHcqKD86WyBcXHRdK1thLXpdXFx3KikqXFxiL2ksXG5cblx0J3B1bmN0dWF0aW9uJzogL1xcKFs6L118WzovXVxcKXxbLiw7KClbXFxde31dLyxcblx0J29wZXJhdG9yJzogL1stPXwqLyFdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVkaXRvcmNvbmZpZyA9IHtcblx0Ly8gaHR0cHM6Ly9lZGl0b3Jjb25maWctc3BlY2lmaWNhdGlvbi5yZWFkdGhlZG9jcy5pb1xuXHQnY29tbWVudCc6IC9bOyNdLiovLFxuXHQnc2VjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVxcWy4rXFxdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleCc6IC9cXFxcXFxcXFtcXFtcXF17fSwhPy4qXS8sIC8vIEVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMgd2l0aCAnXFxcXCdcblx0XHRcdCdvcGVyYXRvcic6IC9bIT9dfFxcLlxcLnxcXCp7MSwyfS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXXt9LF0vXG5cdFx0fVxuXHR9LFxuXHQna2V5Jzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopW15cXHM9XSsoPz1bIFxcdF0qPSkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLz0uKi8sXG5cdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePS9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5laWZmZWwgPSB7XG5cdCdjb21tZW50JzogLy0tLiovLFxuXHQnc3RyaW5nJzogW1xuXHRcdC8vIEFsaWduZWQtdmVyYmF0aW0tc3RyaW5nc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIihbXltdKilcXFtbXFxzXFxTXSo/XFxdXFwxXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvLyBOb24tYWxpZ25lZC12ZXJiYXRpbS1zdHJpbmdzXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiKFtee10qKVxce1tcXHNcXFNdKj9cXH1cXDFcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC8vIFNpbmdsZS1saW5lIHN0cmluZ1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OiUoPzooPyFcXG4pXFxzKSpcXG5cXHMqJXwlXFxTfFteJVwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQvLyBub3JtYWwgY2hhciB8IHNwZWNpYWwgY2hhciB8IGNoYXIgY29kZVxuXHQnY2hhcic6IC8nKD86JS58W14lJ1xcclxcbl0pKycvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphY3Jvc3N8YWdlbnR8YWxpYXN8YWxsfGFuZHxhc3xhc3NpZ258YXR0YWNoZWR8YXR0cmlidXRlfGNoZWNrfGNsYXNzfGNvbnZlcnR8Y3JlYXRlfEN1cnJlbnR8ZGVidWd8ZGVmZXJyZWR8ZGV0YWNoYWJsZXxkb3xlbHNlfGVsc2VpZnxlbmR8ZW5zdXJlfGV4cGFuZGVkfGV4cG9ydHxleHRlcm5hbHxmZWF0dXJlfGZyb218ZnJvemVufGlmfGltcGxpZXN8aW5oZXJpdHxpbnNwZWN0fGludmFyaWFudHxsaWtlfGxvY2FsfGxvb3B8bm90fG5vdGV8b2Jzb2xldGV8b2xkfG9uY2V8b3J8UHJlY3Vyc29yfHJlZGVmaW5lfHJlbmFtZXxyZXF1aXJlfHJlc2N1ZXxSZXN1bHR8cmV0cnl8c2VsZWN0fHNlcGFyYXRlfHNvbWV8dGhlbnx1bmRlZmluZXx1bnRpbHx2YXJpYW50fFZvaWR8d2hlbnx4b3IpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiL2ksXG5cdC8vIENvbnZlbnRpb246IGNsYXNzLW5hbWVzIGFyZSBhbHdheXMgYWxsIHVwcGVyLWNhc2UgY2hhcmFjdGVyc1xuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVtcXGRBLVpfXSpcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGhleGEgfCBvY3RhbCB8IGJpblxuXHRcdC9cXGIwW3hjYl1bXFxkYS1mXSg/Ol8qW1xcZGEtZl0pKlxcYi9pLFxuXHRcdC8vIERlY2ltYWxcblx0XHQvKD86XFxiXFxkKD86XypcXGQpKik/XFwuKD86KD86XFxkKD86XypcXGQpKik/ZVsrLV0/KT9cXGQoPzpfKlxcZCkqXFxifFxcYlxcZCg/Ol8qXFxkKSpcXGJcXC4/L2lcblx0XSxcblx0J3B1bmN0dWF0aW9uJzogLzo9fDw8fD4+fFxcKFxcfHxcXHxcXCl8LT58XFwuKD89XFx3KXxbe31bXFxdOygpLDo/XS8sXG5cdCdvcGVyYXRvcic6IC9cXFxcXFxcXHxcXHxcXC5cXC5cXHx8XFwuXFwufFxcL1t+XFwvPV0/fFs+PF09P3xbLSsqXj1+XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZWpzID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjwlWy1fPV0/fFstX10/JT4kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IC9eI1tcXHNcXFNdKi8sXG5cdFx0J2xhbmd1YWdlLWphdmFzY3JpcHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIGVqc1BhdHRlcm4gPSAvPCUoPyElKVtcXHNcXFNdKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdlanMnLCBlanNQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZWpzJyk7XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ldGEgPSBQcmlzbS5sYW5ndWFnZXMuZWpzO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lbGl4aXIgPSB7XG5cdCdkb2MnOiB7XG5cdFx0cGF0dGVybjogL0AoPzpkb2N8bW9kdWxlZG9jKVxccysoPzooXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxfChcInwnKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIpLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdHRyaWJ1dGUnOiAvXkBcXHcrLyxcblx0XHRcdCdzdHJpbmcnOiAvWydcIl1bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gfnJcIlwiXCJmb29cIlwiXCIgKG11bHRpLWxpbmUpLCB+cicnJ2ZvbycnJyAobXVsdGktbGluZSksIH5yL2Zvby8sIH5yfGZvb3wsIH5yXCJmb29cIiwgfnInZm9vJywgfnIoZm9vKSwgfnJbZm9vXSwgfnJ7Zm9vfSwgfnI8Zm9vPlxuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogL35bclJdKD86KFwiXCJcInwnJycpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKStcXDF8KFtcXC98XCInXSkoPzpcXFxcLnwoPyFcXDIpW15cXFxcXFxyXFxuXSkrXFwyfFxcKCg/OlxcXFwufFteXFxcXClcXHJcXG5dKStcXCl8XFxbKD86XFxcXC58W15cXFxcXFxdXFxyXFxuXSkrXFxdfFxceyg/OlxcXFwufFteXFxcXH1cXHJcXG5dKStcXH18PCg/OlxcXFwufFteXFxcXD5cXHJcXG5dKSs+KVt1aXNteGZyXSovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdC8vIH5zXCJcIlwiZm9vXCJcIlwiIChtdWx0aS1saW5lKSwgfnMnJydmb28nJycgKG11bHRpLWxpbmUpLCB+cy9mb28vLCB+c3xmb298LCB+c1wiZm9vXCIsIH5zJ2ZvbycsIH5zKGZvbyksIH5zW2Zvb10sIH5ze2Zvb30gKHdpdGggaW50ZXJwb2xhdGlvbiBjYXJlKSwgfnM8Zm9vPlxuXHRcdFx0cGF0dGVybjogL35bY0NzU3dXXSg/OihcIlwiXCJ8JycnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkrXFwxfChbXFwvfFwiJ10pKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pK1xcMnxcXCgoPzpcXFxcLnxbXlxcXFwpXFxyXFxuXSkrXFwpfFxcWyg/OlxcXFwufFteXFxcXFxcXVxcclxcbl0pK1xcXXxcXHsoPzpcXFxcLnwjXFx7W159XStcXH18Iyg/IVxceyl8W14jXFxcXH1cXHJcXG5dKStcXH18PCg/OlxcXFwufFteXFxcXD5cXHJcXG5dKSs+KVtjc2FdPy8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQvLyBTZWUgaW50ZXJwb2xhdGlvbiBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gTXVsdGktbGluZSBzdHJpbmdzIGFyZSBhbGxvd2VkXG5cdFx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cdCdhdG9tJzoge1xuXHRcdC8vIExvb2stYmVoaW5kIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlIDo6IG9wZXJhdG9yXG5cdFx0cGF0dGVybjogLyhefFteOl0pOlxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdtb2R1bGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYltBLVpdXFx3KlxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQvLyBMb29rLWFoZWFkIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlIDo6IG9wZXJhdG9yXG5cdCdhdHRyLW5hbWUnOiAvXFxiXFx3K1xcPz86KD8hOikvLFxuXHQnYXJndW1lbnQnOiB7XG5cdFx0Ly8gTG9vay1iZWhpbmQgcHJldmVudHMgYmFkIGhpZ2hsaWdodGluZyBvZiB0aGUgJiYgb3BlcmF0b3Jcblx0XHRwYXR0ZXJuOiAvKF58W14mXSkmXFxkKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3Ky8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYltfYS16QS1aXVxcdypbPyFdPyg/Oig/PVxccyooPzpcXC5cXHMqKT9cXCgpfCg/PVxcL1xcZCkpLyxcblx0J251bWJlcic6IC9cXGIoPzowW2JveF1bYS1mXFxkX10rfFxcZFtcXGRfXSopKD86XFwuW1xcZF9dKyk/KD86ZVsrLV0/W1xcZF9dKyk/XFxiL2ksXG5cdCdrZXl3b3JkJzogL1xcYig/OmFmdGVyfGFsaWFzfGFuZHxjYXNlfGNhdGNofGNvbmR8ZGVmKD86Y2FsbGJhY2t8ZGVsZWdhdGV8ZXhjZXB0aW9ufGltcGx8bWFjcm98bW9kdWxlfG58bnB8cHxwcm90b2NvbHxzdHJ1Y3QpP3xkb3xlbHNlfGVuZHxmbnxmb3J8aWZ8aW1wb3J0fG5vdHxvcnxxdW90ZXxyYWlzZXxyZXF1aXJlfHJlc2N1ZXx0cnl8dW5sZXNzfHVucXVvdGV8dXNlfHdoZW4pXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bmlsfHRydWUpXFxiLyxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXGJpblxcYnwmJj98XFx8W3w+XT98XFxcXFxcXFx8Ojp8XFwuXFwuXFwuP3xcXCtcXCs/fC1bLT5dP3w8Wy09Pl18Pj18IT09P3xcXEIhfD0oPzo9PT98Wz5+XSk/fFsqXFwvXl0vLFxuXHRcdHtcblx0XHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggPDxcblx0XHRcdHBhdHRlcm46IC8oW148XSk8KD8hPCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCA+PlxuXHRcdFx0cGF0dGVybjogLyhbXj5dKT4oPyE+KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvPDx8Pj58Wy4sJVxcW1xcXXt9KCldL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVsaXhpci5zdHJpbmcuZm9yRWFjaChmdW5jdGlvbiAobykge1xuXHRvLmluc2lkZSA9IHtcblx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8jXFx7W159XStcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14jXFx7fFxcfSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5lbGl4aXJcblx0XHRcdH1cblx0XHR9XG5cdH07XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmVsbSA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKnxcXHstW1xcc1xcU10qPy1cXH0vLFxuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteXFxcXCdcXHJcXG5dfFxcXFwoPzpbYWJmbnJ0dlxcXFwnXXxcXGQrfHhbMC05YS1mQS1GXSt8dVxce1swLTlhLWZBLUZdK1xcfSkpJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gTXVsdGlsaW5lIHN0cmluZ3MgYXJlIHdyYXBwZWQgaW4gdHJpcGxlIFwiLiBRdW90ZXMgbWF5IGFwcGVhciB1bmVzY2FwZWQuXG5cdFx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXFxcXFwiXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzK1tBLVpdXFx3Kig/OlxcLltBLVpdXFx3KikqKD86XFxzK2FzXFxzKyg/OltBLVpdXFx3KikoPzpcXC5bQS1aXVxcdyopKik/KD86XFxzK2V4cG9zaW5nXFxzKyk/L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmFzfGV4cG9zaW5nfGltcG9ydClcXGIvXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphbGlhc3xhc3xjYXNlfGVsc2V8ZXhwb3Npbmd8aWZ8aW58aW5maXhsfGluZml4cnxsZXR8bW9kdWxlfG9mfHRoZW58dHlwZSlcXGIvLFxuXHQvLyBUaGVzZSBhcmUgYnVpbHRpbiB2YXJpYWJsZXMgb25seS4gQ29uc3RydWN0b3JzIGFyZSBoaWdobGlnaHRlZCBsYXRlciBhcyBhIGNvbnN0YW50LlxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhbHdheXN8YXNpbnxhdGFufGF0YW4yfGNlaWxpbmd8Y2xhbXB8Y29tcGFyZXxjb3N8Y3Vycnl8ZGVncmVlc3xlfGZsaXB8Zmxvb3J8ZnJvbVBvbGFyfGlkZW50aXR5fGlzSW5maW5pdGV8aXNOYU58bG9nQmFzZXxtYXh8bWlufG5lZ2F0ZXxuZXZlcnxub3R8cGl8cmFkaWFuc3xyZW18cm91bmR8c2lufHNxcnR8dGFufHRvRmxvYXR8dG9Qb2xhcnx0b1N0cmluZ3x0cnVuY2F0ZXx0dXJuc3x1bmN1cnJ5fHhvcilcXGIvLFxuXHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHwgaGV4YWRlY2ltYWwgaW50ZWdlcnNcblx0J251bWJlcic6IC9cXGIoPzpcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/fDB4WzAtOWEtZl0rKVxcYi9pLFxuXHQvLyBNb3N0IG9mIHRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugb2YgdGhlIG1lYW5pbmcgb2YgYSBzaW5nbGUgJy4nLlxuXHQvLyBJZiBpdCBzdGFuZHMgYWxvbmUgZnJlZWx5LCBpdCBpcyB0aGUgZnVuY3Rpb24gY29tcG9zaXRpb24uXG5cdC8vIEl0IG1heSBhbHNvIGJlIGEgc2VwYXJhdG9yIGJldHdlZW4gYSBtb2R1bGUgbmFtZSBhbmQgYW4gaWRlbnRpZmllciA9PiBub1xuXHQvLyBvcGVyYXRvci4gSWYgaXQgY29tZXMgdG9nZXRoZXIgd2l0aCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgaXQgaXMgYW5cblx0Ly8gb3BlcmF0b3IgdG9vLlxuXHQvLyBWYWxpZCBvcGVyYXRvciBjaGFyYWN0ZXJzIGluIDAuMTg6ICstLyo9LiQ8PjomfF4/JSNAfiFcblx0Ly8gUmVmOiBodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLyMhbXNnL2VsbS1kZXYvMEFIU25EZGtTa1EvRTBTVlU3MEpFUUFKXG5cdCdvcGVyYXRvcic6IC9cXHNcXC5cXHN8WytcXC0vKj0uJDw+OiZ8Xj8lI0B+IV17Mix9fFsrXFwtLyo9JDw+OiZ8Xj8lI0B+IV0vLFxuXHQvLyBJbiBFbG0sIG5lYXJseSBldmVyeXRoaW5nIGlzIGEgdmFyaWFibGUsIGRvIG5vdCBoaWdobGlnaHQgdGhlc2UuXG5cdCdodmFyaWFibGUnOiAvXFxiKD86W0EtWl1cXHcqXFwuKSpbYS16XVxcdypcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86W0EtWl1cXHcqXFwuKSpbQS1aXVxcdypcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXXwoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubHVhID0ge1xuXHQnY29tbWVudCc6IC9eIyEuK3wtLSg/OlxcWyg9KilcXFtbXFxzXFxTXSo/XFxdXFwxXFxdfC4qKS9tLFxuXHQvLyBcXHogbWF5IGJlIHVzZWQgdG8gc2tpcCB0aGUgZm9sbG93aW5nIHNwYWNlXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxceig/OlxcclxcbnxcXHMpfFxcXFwoPzpcXHJcXG58W156XSkpKlxcMXxcXFsoPSopXFxbW1xcc1xcU10qP1xcXVxcMlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiMHhbYS1mXFxkXSsoPzpcXC5bYS1mXFxkXSopPyg/OnBbKy1dP1xcZCspP1xcYnxcXGJcXGQrKD86XFwuXFxCfCg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspP1xcYil8XFxCXFwuXFxkKyg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YnJlYWt8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGZhbHNlfGZvcnxmdW5jdGlvbnxnb3RvfGlmfGlufGxvY2FsfG5pbHxub3R8b3J8cmVwZWF0fHJldHVybnx0aGVufHRydWV8dW50aWx8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzogLyg/IVxcZClcXHcrKD89XFxzKig/Olsoe10pKS8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvWy0rKiVeJnwjXXxcXC9cXC8/fDxbPD1dP3w+Wz49XT98Wz1+XT0/Lyxcblx0XHR7XG5cdFx0XHQvLyBNYXRjaCBcIi4uXCIgYnV0IGRvbid0IGJyZWFrIFwiLi4uXCJcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKVxcLlxcLig/IVxcLikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9LDtdfFxcLit8OisvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmV0bHVhID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjwlWy09XT98LT8lPiQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdsYW5ndWFnZS1sdWEnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmx1YVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgcGF0dGVybiA9IC88JVtcXHNcXFNdKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdldGx1YScsIHBhdHRlcm4pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdldGx1YScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmVyYiA9IHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFxzKik8JT0/fCU+KD89XFxzKiQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3J1YnknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLXJ1YnknLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgZXJiUGF0dGVybiA9IC88JT0/KD86W15cXHJcXG5dfFtcXHJcXG5dKD8hPWJlZ2luKXxbXFxyXFxuXT1iZWdpblxccyg/OlteXFxyXFxuXXxbXFxyXFxuXSg/IT1lbmQpKSpbXFxyXFxuXT1lbmQpKz8lPi9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdlcmInLCBlcmJQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZXJiJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5lcmxhbmcgPSB7XG5cdCdjb21tZW50JzogLyUuKy8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdxdW90ZWQtZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkrJyg/PVxcKCkvLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdxdW90ZWQtYXRvbSc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteXFxcXCdcXHJcXG5dKSsnLyxcblx0XHRhbGlhczogJ2F0b20nXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWZ0ZXJ8YmVnaW58Y2FzZXxjYXRjaHxlbmR8ZnVufGlmfG9mfHJlY2VpdmV8dHJ5fHdoZW4pXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvXFwkXFxcXD8uLyxcblx0XHQvXFxiXFxkKyNbYS16MC05XSsvaSxcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pXG5cdF0sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16XVtcXHdAXSooPz1cXCgpLyxcblx0J3ZhcmlhYmxlJzoge1xuXHRcdC8vIExvb2stYmVoaW5kIGlzIHVzZWQgdG8gcHJldmVudCB3cm9uZyBoaWdobGlnaHRpbmcgb2YgYXRvbXMgY29udGFpbmluZyBcIkBcIlxuXHRcdHBhdHRlcm46IC8oXnxbXkBdKSg/OlxcYnxcXD8pW0EtWl9dW1xcd0BdKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0L1s9XFwvPD46XT18PVs6XFwvXT18XFwrXFwrP3wtLT98Wz0qXFwvIV18XFxiKD86YW5kfGFuZGFsc298YmFuZHxibm90fGJvcnxic2x8YnNyfGJ4b3J8ZGl2fG5vdHxvcnxvcmVsc2V8cmVtfHhvcilcXGIvLFxuXHRcdHtcblx0XHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggPDxcblx0XHRcdHBhdHRlcm46IC8oXnxbXjxdKTwoPyE8KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoID4+XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14+XSk+KD8hPikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2F0b20nOiAvXFxiW2Etel1bXFx3QF0qLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fTo7LC4jfF18PDx8Pj4vXG5cbn07XG5cblByaXNtLmxhbmd1YWdlc1snZXhjZWwtZm9ybXVsYSddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYk5cXChcXHMqKVwiKD86W15cIl18XCJcIikqXCIoPz1cXHMqXFwpKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIl18XCJcIikqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncmVmZXJlbmNlJzoge1xuXHRcdC8vIGh0dHBzOi8vd3d3LmFibGViaXRzLmNvbS9vZmZpY2UtYWRkaW5zLWJsb2cvMjAxNS8xMi8wOC9leGNlbC1yZWZlcmVuY2UtYW5vdGhlci1zaGVldC13b3JrYm9vay9cblxuXHRcdC8vIFNhbGVzIUIyXG5cdFx0Ly8gJ1dpbnRlciBzYWxlcychQjJcblx0XHQvLyBbU2FsZXMueGxzeF1KYW4hQjI6QjVcblx0XHQvLyBEOlxcUmVwb3J0c1xcW1NhbGVzLnhsc3hdSmFuIUIyOkI1XG5cdFx0Ly8gJ1tTYWxlcy54bHN4XUphbiBzYWxlcychQjI6QjVcblx0XHQvLyAnRDpcXFJlcG9ydHNcXFtTYWxlcy54bHN4XUphbiBzYWxlcychQjI6QjVcblxuXHRcdHBhdHRlcm46IC8oPzonW14nXSonfCg/OlteXFxzKClbXFxde308Pio/XCInOywkJl0qXFxbW15eXFxzKClbXFxde308Pio/XCInXStcXF0pP1xcdyspIS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC8hJC8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvJy8sXG5cdFx0XHQnc2hlZXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXltcXF1dKyQvLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdmaWxlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxbW15bXFxdXStcXF0kLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tbXFxdXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwYXRoJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdmdW5jdGlvbi1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdyooPz1cXCgpL2ksXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQncmFuZ2UnOiB7XG5cdFx0cGF0dGVybjogL1xcJD9cXGIoPzpbQS1aXStcXCQ/XFxkKzpcXCQ/W0EtWl0rXFwkP1xcZCt8W0EtWl0rOlxcJD9bQS1aXSt8XFxkKzpcXCQ/XFxkKylcXGIvaSxcblx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdCdjZWxsJzogL1xcJD9bQS1aXStcXCQ/XFxkKy9pLFxuXHRcdFx0J2NvbHVtbic6IC9cXCQ/W0EtWl0rL2ksXG5cdFx0XHQncm93JzogL1xcJD9cXGQrL1xuXHRcdH1cblx0fSxcblx0J2NlbGwnOiB7XG5cdFx0Ly8gRXhjZWwgaXMgY2FzZSBpbnNlbnNpdGl2ZSwgc28gdGhlIHN0cmluZyBcImZvbzFcIiBjb3VsZCBiZSBlaXRoZXIgYSB2YXJpYWJsZSBvciBhIGNlbGwuXG5cdFx0Ly8gVG8gY29tYmF0IHRoaXMsIHdlIG1hdGNoIGNlbGxzIGNhc2UgaW5zZW5zaXRpdmUsIGlmIHRoZSBjb250YWluIGF0IGxlYXN0IG9uZSBcIiRcIiwgYW5kIGNhc2Ugc2Vuc2l0aXZlIG90aGVyd2lzZS5cblx0XHRwYXR0ZXJuOiAvXFxiW0EtWl0rXFxkK1xcYnxcXCRbQS1aYS16XStcXCQ/XFxkK1xcYnxcXGJbQS1aYS16XStcXCRcXGQrXFxiLyxcblx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT9cXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1stKyovXiU9JixdfDxbPT5dP3w+PT8vLFxuXHQncHVuY3R1YXRpb24nOiAvW1tcXF0oKTt7fXxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzWyd4bHN4J10gPSBQcmlzbS5sYW5ndWFnZXNbJ3hscyddID0gUHJpc20ubGFuZ3VhZ2VzWydleGNlbC1mb3JtdWxhJ107XG5cblByaXNtLmxhbmd1YWdlcy5mc2hhcnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwoXFwqKD8hXFwpKVtcXHNcXFNdKj9cXCpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OlwiXCJcIltcXHNcXFNdKj9cIlwiXCJ8QFwiKD86XCJcInxbXlwiXSkqXCJ8XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIilCPy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZXhjZXB0aW9ufGluaGVyaXR8aW50ZXJmYWNlfG5ld3xvZnx0eXBlKVxccyt8XFx3XFxzKjpcXHMqfFxcczpcXD8/PlxccyopWy5cXHddK1xcYig/OlxccyooPzotPnxcXCopXFxzKlsuXFx3XStcXGIpKig/IVxccypbOi5dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC8tPnxcXCovLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmxldHxyZXR1cm58dXNlfHlpZWxkKSg/OiFcXEJ8XFxiKXxcXGIoPzphYnN0cmFjdHxhbmR8YXN8YXNyfGFzc2VydHxhdG9taWN8YmFzZXxiZWdpbnxicmVha3xjaGVja2VkfGNsYXNzfGNvbXBvbmVudHxjb25zdHxjb25zdHJhaW50fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGRlZmF1bHR8ZGVsZWdhdGV8ZG98ZG9uZXxkb3duY2FzdHxkb3dudG98ZWFnZXJ8ZWxpZnxlbHNlfGVuZHxldmVudHxleGNlcHRpb258ZXh0ZXJufGV4dGVybmFsfGZhbHNlfGZpbmFsbHl8Zml4ZWR8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGdsb2JhbHxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5saW5lfGludGVyZmFjZXxpbnRlcm5hbHxsYW5kfGxhenl8bG9yfGxzbHxsc3J8bHhvcnxtYXRjaHxtZW1iZXJ8bWV0aG9kfG1peGlufG1vZHxtb2R1bGV8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vdHxudWxsfG9iamVjdHxvZnxvcGVufG9yfG92ZXJyaWRlfHBhcmFsbGVsfHByaXZhdGV8cHJvY2Vzc3xwcm90ZWN0ZWR8cHVibGljfHB1cmV8cmVjfHNlYWxlZHxzZWxlY3R8c2lnfHN0YXRpY3xzdHJ1Y3R8dGFpbGNhbGx8dGhlbnx0b3x0cmFpdHx0cnVlfHRyeXx0eXBlfHVwY2FzdHx2YWx8dmlydHVhbHx2b2lkfHZvbGF0aWxlfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGIweFtcXGRhLWZBLUZdKyg/OkxGfGxmfHVuKT9cXGIvLFxuXHRcdC9cXGIwYlswMV0rKD86dXl8eSk/XFxiLyxcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltmbV18ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdFx0L1xcYlxcZCsoPzpbSWxMc3ldfFVMfHVbbHN5XT8pP1xcYi9cblx0XSxcblx0J29wZXJhdG9yJzogLyhbPD5+Jl5dKVxcMVxcMXwoWyouOjw+Jl0pXFwyfDwtfC0+fFshPTpdPXw8P1xcfHsxLDN9Pj98XFw/Pyg/Ojw9fD49fDw+fFstKyovJT08Pl0pXFw/P3xbIT9eJl18flsrfi1dfDo+fDpcXD8+Py9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZnNoYXJwJywgJ2tleXdvcmQnLCB7XG5cdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikjLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheIylcXGIoPzplbHNlfGVuZGlmfGlmfGxpZ2h0fGxpbmV8bm93YXJuKVxcYi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZnNoYXJwJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnY29tcHV0YXRpb24tZXhwcmVzc2lvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW19hLXpdXFx3Kig/PVxccypcXHspL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9XG59KTtcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2ZzaGFycCcsICdzdHJpbmcnLCB7XG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXFs8Lis/PlxcXS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFs8fD5cXF0kLyxcblx0XHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcdyskfChefDtcXHMqKVtBLVpdXFx3Kig/PVxcKCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2Fubm90YXRpb24tY29udGVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmZzaGFycFxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXlxcXFwnXXxcXFxcKD86LnxcXGR7M318eFthLWZBLUZcXGRdezJ9fHVbYS1mQS1GXFxkXXs0fXxVW2EtZkEtRlxcZF17OH0pKSdCPy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnRfaW5zaWRlID0ge1xuXHRcdCdmdW5jdGlvbic6IC9cXGIoPzpCVUdTP3xGSVgoPzpNRVM/KT98Tk9URVM/fFRPRE9TP3xYWCt8SEFDS1M/fFdBUk4oPzpJTkcpP3xcXD97Mix9fCF7Mix9KVxcYi9cblx0fTtcblx0dmFyIHN0cmluZ19pbnNpZGUgPSB7XG5cdFx0J251bWJlcic6IC9cXFxcW15cXHMnXXwlXFx3L1xuXHR9O1xuXG5cdHZhciBmYWN0b3IgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vICEgc2luZ2xlLWxpbmUgZXhjbGFtYXRpb24gcG9pbnQgY29tbWVudHMgd2l0aCB3aGl0ZXNwYWNlIGFmdGVyL2Fyb3VuZCB0aGUgIVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OiEgLip8ISQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjb21tZW50X2luc2lkZVxuXHRcdFx0fSxcblxuXHRcdFx0LyogZnJvbSBiYXNpcy9tdWx0aWxpbmU6ICovXG5cdFx0XHR7XG5cdFx0XHRcdC8vIC8qIGNvbW1lbnQgKi8sIC8qIGNvbW1lbnQqL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcL1xcKlxcc1tcXHNcXFNdKj9cXCpcXC8oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY29tbWVudF9pbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vICFbWyBjb21tZW50IF1dICwgIVs9PT1bIGNvbW1lbnRdPT09XVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSFcXFsoPXswLDZ9KVxcW1xcc1tcXHNcXFNdKj9cXF1cXDJcXF0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY29tbWVudF9pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J251bWJlcic6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gYmFzaWMgYmFzZSAxMCBpbnRlZ2VycyA5LCAtOVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/XFxkKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGJhc2UgcHJlZml4IGludGVnZXJzIDBiMDEwIDBvNzAgMHhhZCAwZDEwIDBYQUQgLTB4YTlcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylbKy1dPzAoPzpiWzAxXSt8b1swLTddK3xkXFxkK3x4W1xcZEEtRl0rKSg/PVxcc3wkKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBmcmFjdGlvbmFsIHJhdGlvcyAxLzUgLTEvNSBhbmQgdGhlIGxpdGVyYWwgZmxvYXQgYXBwcm94aW1hdGlvbnMgMS81LiAtMS81LlxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/XFxkK1xcL1xcZCtcXC4/KD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gcG9zaXRpdmUgbWl4ZWQgbnVtYmVycyAyMysxLzUgKzIzKzEvNVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcKz9cXGQrXFwrXFxkK1xcL1xcZCsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBuZWdhdGl2ZSBtaXhlZCBudW1iZXJzIC0yMy0xLzVcblx0XHRcdFx0cGF0dGVybjogLyhefFxccyktXFxkKy1cXGQrXFwvXFxkKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGJhc2ljIGRlY2ltYWwgZmxvYXRzIC0wLjAxIDAuIC4wIC4xIC0uMSAtMS4gLTEyLjEzICsxMi4xM1xuXHRcdFx0XHQvLyBhbmQgc2NpZW50aWZpYyBub3RhdGlvbiB3aXRoIGJhc2UgMTAgZXhwb25lbnRzIDNlNCAzZS00IC4zZS00XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpWystXT8oPzpcXGQqXFwuXFxkK3xcXGQrXFwuXFxkKnxcXGQrKSg/OmVbKy1dP1xcZCspPyg/PVxcc3wkKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBOQU4gbGl0ZXJhbCBzeW50YXggTkFOOiA4MDAwMGRlYWRiZWVmLCBOQU46IGFcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylOQU46XFxzK1tcXGRhLWZBLUZdKyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8qXG5cdFx0XHRcdFx0YmFzZSBwcmVmaXggZmxvYXRzIDB4MS4wcDMgKDguMCkgMGIxLjAxMHAyICg1LjApIDB4MS5wMSAwYjEuMTExMTExMTFwMTExMTEuLi5cblx0XHRcdFx0XHRcIlRoZSBub3JtYWxpemVkIGhleCBmb3JtIFx1MDBCMTB4MS5NTU1NTU1NTU1NTU1NW3BQXVx1MDBCMUVFRUUgYWxsb3dzIGFueSBmbG9hdGluZy1wb2ludCBudW1iZXIgdG8gYmUgc3BlY2lmaWVkIHByZWNpc2VseS5cblx0XHRcdFx0XHRUaGUgdmFsdWVzIG9mIE1NTU1NTU1NTU1NTU0gYW5kIEVFRUUgbWFwIGRpcmVjdGx5IHRvIHRoZSBtYW50aXNzYSBhbmQgZXhwb25lbnQgZmllbGRzIG9mIHRoZSBiaW5hcnkgSUVFRSA3NTQgcmVwcmVzZW50YXRpb24uXCJcblx0XHRcdFx0XHQ8aHR0cHM6Ly9kb2NzLmZhY3RvcmNvZGUub3JnL2NvbnRlbnQvYXJ0aWNsZS1zeW50YXgtZmxvYXRzLmh0bWw+XG5cdFx0XHRcdCovXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpWystXT8wKD86YjFcXC5bMDFdKnxvMVxcLlswLTddKnxkMVxcLlxcZCp8eDFcXC5bXFxkQS1GXSopcFxcZCsoPz1cXHN8JCkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvLyBSLyByZWdleHA/XFwvXFxcXC9cblx0XHQncmVnZXhwJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccylSXFwvXFxzKD86XFxcXFxcU3xbXlxcXFwvXSkqXFwvKD86W2lkbXNyXSp8W2lkbXNyXSstW2lkbXNyXSspKD89XFxzfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhcmlhYmxlJzogL1xcXFxcXFMvLFxuXHRcdFx0XHQna2V5d29yZCc6IC9bKz8qXFxbXFxdXiQoKXt9LnxdLyxcblx0XHRcdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFwvKVtpZG1zcl0rKD86LVtpZG1zcl0rKT8vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpW3RmXSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIFNCVUZcIiBhc2RcIiwgVVJMXCIgOi8vLi4uXCIsIFBcIiAvZXRjL1wiXG5cdFx0J2N1c3RvbS1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVtBLVowLTlcXC1dK1wiXFxzKD86XFxcXFxcU3xbXlwiXFxcXF0pKlwiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J251bWJlcic6IC9cXFxcXFxTfCVcXHd8XFwvL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbXVsdGlsaW5lLXN0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gU1RSSU5HOiBuYW1lIFxcbiBjb250ZW50IFxcbiA7IC0+IENPTlNUQU5UOiBuYW1lIFwiY29udGVudFwiIChzeW1ib2wpXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpU1RSSU5HOlxccytcXFMrKD86XFxufFxcclxcbikuKig/OlxcbnxcXHJcXG4pXFxzKjsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J251bWJlcic6IHN0cmluZ19pbnNpZGUubnVtYmVyLFxuXHRcdFx0XHRcdC8vIHRyYWlsaW5nIHNlbWljb2xvbiBvbiBpdHMgb3duIGxpbmVcblx0XHRcdFx0XHQnc2VtaWNvbG9uLW9yLXNldGxvY2FsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXVsgXFx0XSopOyg/PVxcc3wkKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEhFUkVET0M6IG1hcmtlciBcXG4gY29udGVudCBcXG4gbWFya2VyIDsgLT4gXCJjb250ZW50XCIgKGltbWVkaWF0ZSlcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylIRVJFRE9DOlxccytcXFMrKD86XFxufFxcclxcbikuKig/OlxcbnxcXHJcXG4pXFxzKlxcUysoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiBzdHJpbmdfaW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBbWyBzdHJpbmcgXV0sIFs9PVsgc3RyaW5nXT09XVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcWyg9ezAsNn0pXFxbXFxzW1xcc1xcU10qP1xcXVxcMlxcXSg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0XHRpbnNpZGU6IHN0cmluZ19pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J3NwZWNpYWwtdXNpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVVTSU5HOig/Olxcc1xcUyspKig/PVxccys7KD86XFxzfCQpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gdGhpcyBpcyBlc3NlbnRpYWxseSBhIHJlZ2V4IGZvciB2b2NhYiBuYW1lcywgd2hpY2ggaSBkb24ndCB3YW50IHRvIHNwZWNpZnlcblx0XHRcdFx0Ly8gYnV0IHRoZSBVU0lORzogZ2V0cyBwaWNrZWQgdXAgYXMgYSB2b2NhYiBuYW1lXG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpW146XFxzXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKiB0aGlzIGRlc2NyaXB0aW9uIG9mIHN0YWNrIGVmZmVjdCBsaXRlcmFsIHN5bnRheCBpcyBub3QgY29tcGxldGUgYW5kIG5vdCBhcyBzcGVjaWZpYyBhcyB0aGVvcmV0aWNhbGx5IHBvc3NpYmxlXG5cdFx0XHR0cnlpbmcgdG8gZG8gYmV0dGVyIGlzIG1vcmUgd29yayBhbmQgcmVnZXgtY29tcHV0YXRpb24tdGltZSB0aGFuIGl0J3Mgd29ydGggdGhvdWdoLlxuXHRcdFx0LSB3ZSdkIGxpa2UgdG8gaGF2ZSB0aGUgXCJkZWxpbWl0ZXJcIiBwYXJ0cyBvZiB0aGUgc3RhY2sgZWZmZWN0IFsgKCwgLS0sIGFuZCApIF0gYmUgYSBkaWZmZXJlbnQgKGxlc3MtaW1wb3J0YW50IG9yIGNvbW1lbnQtbGlrZSkgY29sb3VyIHRvIHRoZSBzdGFjayBlZmZlY3QgY29udGVudHNcblx0XHRcdC0gd2UnZCBsaWtlIGlmIG5lc3RlZCBzdGFjayBlZmZlY3RzIHdlcmUgdHJlYXRlZCBhcyBzdWNoIHJhdGhlciB0aGFuIGp1c3QgYXBwZWFyaW5nIGZsYXQgKHdpdGggYGluc2lkZWApXG5cdFx0XHQtIHdlJ2QgbGlrZSBpZiB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIG5hbWUgY29udmVudGlvbnMgd2VyZSByZWNvZ25pc2VkIHNwZWNpZmljYWxseTpcblx0XHRcdFx0c3BlY2lhbCByb3cgdmFyaWFibGVzID0gLi5hIGIuLlxuXHRcdFx0XHR0eXBlIGFuZCBzdGFjayBlZmZlY3QgYW5ub3RhdGlvbnMgZW5kIHdpdGggYSBjb2xvbiA9ICggcXVvdDogKCBhOiAoIC0tICkgLS0gYiApIC0tIHggKSwgKCB4OiBudW1iZXIgLS0gKVxuXHRcdFx0XHR3b3JkIHRocm93cyB1bmNvbmRpdGlvbmFsIGVycm9yID0gKlxuXHRcdFx0XHRhbnkgb3RoZXIgd29yZC1saWtlIHZhcmlhYmxlIG5hbWUgPSBhID8gcScgZXRjXG5cblx0XHRcdGh0dHBzOi8vZG9jcy5mYWN0b3Jjb2RlLm9yZy9jb250ZW50L2FydGljbGUtZWZmZWN0cy5odG1sXG5cblx0XHRcdHRoZXNlIGFyZSBwcmV0dHkgY29tcGxpY2F0ZWQgdG8gaGlnaGxpZ2h0IHByb3Blcmx5IHdpdGhvdXQgYSByZWFsIHBhcnNlciwgYW5kIHRoZXJlZm9yZSBvdXQgb2Ygc2NvcGVcblx0XHRcdHRoZSBvbGQgcGF0dGVybiwgd2hpY2ggbWF5IGJlIGxhdGVyIHVzZWZ1bCwgd2FzOiAoXnxcXHMpKD86Y2FsbHxleGVjdXRlfGV2YWwpP1xcKCg/OlxccytbXlwiXFxyXFxuXFx0IF1cXFMqKSo/XFxzKy0tKD86XFxzK1teXCJcXG5cXHQgXVxcUyopKj9cXHMrXFwpKD89XFxzfCQpXG5cdFx0Ki9cblxuXHRcdC8vIGN1cnJlbnQgc29sdXRpb24gaXMgbm90IGdyZWF0XG5cdFx0J3N0YWNrLWVmZmVjdC1kZWxpbWl0ZXInOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG9wZW5pbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0cGF0dGVybjogLyhefFxccykoPzpjYWxsfGV2YWx8ZXhlY3V0ZSk/XFwoKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBtaWRkbGUgLS1cblx0XHRcdFx0cGF0dGVybjogLyhcXHMpLS0oPz1cXHMpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNsb3NpbmcgcGFyZW50aGVzaXNcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpXFwpKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J2NvbWJpbmF0b3JzJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdrZXJuZWwtYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXG5cdFx0J3NlcXVlbmNlcy1idWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cblx0XHQnbWF0aC1idWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cblx0XHQnY29uc3RydWN0b3Itd29yZCc6IHtcblx0XHRcdC8vIDxhcnJheT4gYnV0IG5vdCA8PT5cblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpPCg/IT0rPnwtKz4pXFxTKz4oPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J290aGVyLWJ1aWx0aW4tc3ludGF4Jzoge1xuXHRcdFx0cGF0dGVybjogbnVsbCxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQvKlxuXHRcdFx0ZnVsbCBsaXN0IG9mIHN1cHBvcnRlZCB3b3JkIG5hbWluZyBjb252ZW50aW9uczogKHRoZSBjb252ZW50aW9uIGFwcGVhcnMgb3V0c2lkZSBvZiB0aGUgW2JyYWNrZXRzXSlcblx0XHRcdFx0c2V0LVt4XVxuXHRcdFx0XHRjaGFuZ2UtW3hdXG5cdFx0XHRcdHdpdGgtW3hdXG5cdFx0XHRcdG5ldy1beF1cblx0XHRcdFx0PltzdHJpbmddXG5cdFx0XHRcdFtiYXNlXT5cblx0XHRcdFx0W3N0cmluZ10+W251bWJlcl1cblx0XHRcdFx0K1tzeW1ib2xdK1xuXHRcdFx0XHRbYm9vbGVhbi13b3JkXT9cblx0XHRcdFx0P1tvZl1cblx0XHRcdFx0W3Nsb3QtcmVhZGVyXT4+XG5cdFx0XHRcdD4+W3Nsb3Qtc2V0dGVyXVxuXHRcdFx0XHRbc2xvdC13cml0ZXJdPDxcblx0XHRcdFx0KFtpbXBsZW1lbnRhdGlvbi1kZXRhaWxdKVxuXHRcdFx0XHRbbXV0YXRlcl0hXG5cdFx0XHRcdFt2YXJpYW50XSpcblx0XHRcdFx0W3ByZXR0eXByaW50XS5cblx0XHRcdFx0JFtoZWxwLW1hcmt1cF1cblxuXHRcdFx0PGNvbnN0cnVjdG9ycz4sIFNZTlRBWDosIGV0YyBhcmUgc3VwcG9ydGVkIGJ5IHRoZWlyIG93biBwYXR0ZXJucy5cblxuXHRcdFx0YHdpdGhgIGFuZCBgbmV3YCBmcm9tIGBrZXJuZWxgIGFyZSB0aGVpciBvd24gYnVpbHRpbnMuXG5cblx0XHRcdHNlZSA8aHR0cHM6Ly9kb2NzLmZhY3RvcmNvZGUub3JnL2NvbnRlbnQvYXJ0aWNsZS1jb252ZW50aW9ucy5odG1sPlxuXHRcdCovXG5cdFx0J2NvbnZlbnRpb25hbGx5LW5hbWVkLXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/IVwiKSg/Oig/OmNoYW5nZXxuZXd8c2V0fHdpdGgpLVxcUyt8XFwkXFxTK3w+W14+XFxzXSt8W146Plxcc10rPnxbXj5cXHNdKz5bXj5cXHNdK3xcXCtbXitcXHNdK1xcK3xbXj9cXHNdK1xcP3xcXD9bXj9cXHNdK3xbXj5cXHNdKz4+fD4+W14+XFxzXSt8W148XFxzXSs8PHxcXChbXigpXFxzXStcXCl8W14hXFxzXSshfFteKlxcc11cXFMqXFwqfFteLlxcc11cXFMqXFwuKSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQnY29sb24tc3ludGF4Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpbQS1aMC05XFwtXSsjPyk/OnsxLDJ9XFxzKyg/OjtcXFMrfCg/ITspXFxTKykoPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdzZW1pY29sb24tb3Itc2V0bG9jYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzo7fDo+KSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0Ly8gZG8gbm90IGhpZ2hsaWdodCBsZWFkaW5nIH0gb3IgdHJhaWxpbmcgWHsgYXQgdGhlIGJlZ2luL2VuZCBvZiB0aGUgZmlsZSBhcyBpdCdzIGludmFsaWQgc3ludGF4XG5cdFx0J2N1cmx5LWJyYWNlLWxpdGVyYWwtZGVsaW1pdGVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpW2Etel0qXFx7KD89XFxzKS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gY2xvc2luZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXH0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblxuXHRcdF0sXG5cblx0XHQvLyBkbyBub3QgaGlnaGxpZ2h0IGxlYWRpbmcgXSBvciB0cmFpbGluZyBbIGF0IHRoZSBiZWdpbi9lbmQgb2YgdGhlIGZpbGUgYXMgaXQncyBpbnZhbGlkIHN5bnRheFxuXHRcdCdxdW90YXRpb24tZGVsaW1pdGVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFxbKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjbG9zaW5nXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcXSg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdF0sXG5cblx0XHQnbm9ybWFsLXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVteXCJcXHNdXFxTKig/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qXG5cdFx0XHRiYXNpYyBmaXJzdC1jbGFzcyBzdHJpbmcgXCJhXCJcblx0XHRcdFx0d2l0aCBlc2NhcGVkIGRvdWJsZS1xdW90ZSBcImFcXFwiXCJcblx0XHRcdFx0ZXNjYXBlZCBiYWNrc2xhc2ggXCJcXFxcXCJcblx0XHRcdFx0YW5kIGdlbmVyYWwgZXNjYXBlcyBzaW5jZSBGYWN0b3IgaGFzIHNvIG1hbnkgXCJcXE5cIlxuXG5cdFx0XHRzeW50YXggdGhhdCB3b3JrcyBpbiB0aGUgcmVmZXJlbmNlIGltcGxlbWVudGF0aW9uIHRoYXQgaXNuJ3QgZnVsbHlcblx0XHRcdHN1cHBvcnRlZCBiZWNhdXNlIGl0J3MgYW4gaW1wbGVtZW50YXRpb24gZGV0YWlsOlxuXHRcdFx0XHRcInN0cmluZyAxXCJcInN0cmluZyAyXCIgLT4gMiBzdHJpbmdzICh3b3JrcyBhbnl3YXkpXG5cdFx0XHRcdFwic3RyaW5nXCI1IC0+IHN0cmluZywgNVxuXHRcdFx0XHRcInN0cmluZ1wiWyBdIC0+IHN0cmluZywgcXVvdGF0aW9uXG5cdFx0XHRcdHsgXCJhXCJ9IC0+IGFycmF5PHN0cmluZz5cblxuXHRcdFx0dGhlIHJlc3Qgb2YgdGhvc2UgZXhhbXBsZXMgYWxsIHByb3Blcmx5IHJlY29nbmlzZSB0aGUgc3RyaW5nLCBidXQgbm90XG5cdFx0XHRcdHRoZSBvdGhlciBvYmplY3QgKG51bWJlciwgcXVvdGF0aW9uLCBldGMpXG5cdFx0XHR0aGlzIGlzIGZpbmUgZm9yIGEgcmVnZXgtb25seSBpbXBsZW1lbnRhdGlvbi5cblx0XHQqL1xuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcXFxTfFteXCJcXFxcXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBzdHJpbmdfaW5zaWRlXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBlc2NhcGUgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdFx0cmV0dXJuIChzdHIgKyAnJykucmVwbGFjZSgvKFsuPyorXFxeJFxcW1xcXVxcXFwoKXt9fFxcLV0pL2csICdcXFxcJDEnKTtcblx0fTtcblxuXHR2YXIgYXJyVG9Xb3Jkc1JlZ0V4cCA9IGZ1bmN0aW9uIChhcnIpIHtcblx0XHRyZXR1cm4gbmV3IFJlZ0V4cChcblx0XHRcdCcoXnxcXFxccykoPzonICsgYXJyLm1hcChlc2NhcGUpLmpvaW4oJ3wnKSArICcpKD89XFxcXHN8JCknXG5cdFx0KTtcblx0fTtcblxuXHR2YXIgYnVpbHRpbnMgPSB7XG5cdFx0J2tlcm5lbC1idWlsdGluJzogW1xuXHRcdFx0J29yJywgJzJuaXBkJywgJzRkcm9wJywgJ3R1Y2snLCAnd3JhcHBlcicsICduaXAnLCAnd3JhcHBlcj8nLCAnY2FsbHN0YWNrPmFycmF5JywgJ2RpZScsICdkdXBkJywgJ2NhbGxzdGFjaycsICdjYWxsc3RhY2s/JywgJzNkdXAnLCAnaGFzaGNvZGUnLCAncGljaycsICc0bmlwJywgJ2J1aWxkJywgJz5ib29sZWFuJywgJ25pcGQnLCAnY2xvbmUnLCAnNW5pcCcsICdlcT8nLCAnPycsICc9JywgJ3N3YXBkJywgJzJvdmVyJywgJ2NsZWFyJywgJzJkdXAnLCAnZ2V0LXJldGFpbnN0YWNrJywgJ25vdCcsICd0dXBsZT8nLCAnZHVwJywgJzNuaXBkJywgJ2NhbGwnLCAnLXJvdGQnLCAnb2JqZWN0JywgJ2Ryb3AnLCAnYXNzZXJ0PScsICdhc3NlcnQ/JywgJy1yb3QnLCAnZXhlY3V0ZScsICdib2EnLCAnZ2V0LWNhbGxzdGFjaycsICdjdXJyaWVkPycsICczZHJvcCcsICdwaWNrZCcsICdvdmVyZCcsICdvdmVyJywgJ3JvbGwnLCAnM25pcCcsICdzd2FwJywgJ2FuZCcsICcybmlwJywgJ3JvdGQnLCAndGhyb3cnLCAnKGNsb25lKScsICdoYXNoY29kZSonLCAnc3BpbicsICdyZWFjaCcsICc0ZHVwJywgJ2VxdWFsPycsICdnZXQtZGF0YXN0YWNrJywgJ2Fzc2VydCcsICcyZHJvcCcsICc8d3JhcHBlcj4nLCAnYm9vbGVhbj8nLCAnaWRlbnRpdHktaGFzaGNvZGUnLCAnaWRlbnRpdHktdHVwbGU/JywgJ251bGwnLCAnY29tcG9zZWQ/JywgJ25ldycsICc1ZHJvcCcsICdyb3QnLCAnLXJvbGwnLCAneG9yJywgJ2lkZW50aXR5LXR1cGxlJywgJ2Jvb2xlYW4nXG5cdFx0XSxcblx0XHQnb3RoZXItYnVpbHRpbi1zeW50YXgnOiBbXG5cdFx0XHQvLyBzeW50YXhcblx0XHRcdCc9PT09PT09JywgJ3JlY3Vyc2l2ZScsICdmbHVzaGFibGUnLCAnPj4nLCAnPDw8PDw8JywgJ01cXFxcJywgJ0InLCAnUFJJVkFURT4nLCAnXFxcXCcsICc9PT09PT0nLCAnZmluYWwnLCAnaW5saW5lJywgJ2RlbGltaXRlcicsICdkZXByZWNhdGVkJywgJzxQUklWQVRFJywgJz4+Pj4+PicsICc8PDw8PDw8JywgJ3BhcnNlLWNvbXBsZXgnLCAnbWFsZm9ybWVkLWNvbXBsZXgnLCAncmVhZC1vbmx5JywgJz4+Pj4+Pj4nLCAnY2FsbC1uZXh0LW1ldGhvZCcsICc8PCcsICdmb2xkYWJsZScsXG5cdFx0XHQvLyBsaXRlcmFsc1xuXHRcdFx0JyQnLCAnJFsnLCAnJHsnXG5cdFx0XSxcblx0XHQnc2VxdWVuY2VzLWJ1aWx0aW4nOiBbXG5cdFx0XHQnbWVtYmVyLWVxPycsICdtaXNtYXRjaCcsICdhcHBlbmQnLCAnYXNzZXJ0LXNlcXVlbmNlPScsICdsb25nZXInLCAncmVwZXRpdGlvbicsICdjbG9uZS1saWtlJywgJzNzZXF1ZW5jZScsICdhc3NlcnQtc2VxdWVuY2U/JywgJ2xhc3QtaW5kZXgtZnJvbScsICdyZXZlcnNlZCcsICdpbmRleC1mcm9tJywgJ2N1dConLCAncGFkLXRhaWwnLCAnam9pbi1hcycsICdyZW1vdmUtZXEhJywgJ2NvbmNhdC1hcycsICdidXQtbGFzdCcsICdzbmlwJywgJ250aHMnLCAnbnRoJywgJ3NlcXVlbmNlJywgJ2xvbmdlc3QnLCAnc2xpY2U/JywgJzxzbGljZT4nLCAncmVtb3ZlLW50aCcsICd0YWlsLXNsaWNlJywgJ2VtcHR5PycsICd0YWlsKicsICdtZW1iZXI/JywgJ3ZpcnR1YWwtc2VxdWVuY2U/JywgJ3NldC1sZW5ndGgnLCAnZHJvcC1wcmVmaXgnLCAnaW90YScsICd1bmNsaXAnLCAnYm91bmRzLWVycm9yPycsICd1bmNsaXAtbGFzdC1zbGljZScsICdub24tbmVnYXRpdmUtaW50ZWdlci1leHBlY3RlZCcsICdub24tbmVnYXRpdmUtaW50ZWdlci1leHBlY3RlZD8nLCAnbWlkcG9pbnRAJywgJ2xvbmdlcj8nLCAnP3NldC1udGgnLCAnP2ZpcnN0JywgJ3Jlc3Qtc2xpY2UnLCAncHJlcGVuZC1hcycsICdwcmVwZW5kJywgJ2ZvdXJ0aCcsICdzaWZ0JywgJ3N1YnNlcS1zdGFydCcsICduZXctc2VxdWVuY2UnLCAnP2xhc3QnLCAnbGlrZScsICdmaXJzdDQnLCAnMXNlcXVlbmNlJywgJ3JldmVyc2UnLCAnc2xpY2UnLCAndmlydHVhbEAnLCAncmVwZXRpdGlvbj8nLCAnc2V0LWxhc3QnLCAnaW5kZXgnLCAnNHNlcXVlbmNlJywgJ21heC1sZW5ndGgnLCAnc2V0LXNlY29uZCcsICdpbW11dGFibGUtc2VxdWVuY2UnLCAnZmlyc3QyJywgJ2ZpcnN0MycsICdzdXByZW11bScsICd1bmNsaXAtc2xpY2UnLCAnc3VmZml4IScsICdpbnNlcnQtbnRoJywgJ3RhaWwnLCAnM2FwcGVuZCcsICdzaG9ydCcsICdzdWZmaXgnLCAnY29uY2F0JywgJ2ZsaXAnLCAnaW1tdXRhYmxlPycsICdyZXZlcnNlIScsICcyc2VxdWVuY2UnLCAnc3VtJywgJ2RlbGV0ZS1hbGwnLCAnaW5kaWNlcycsICdzbmlwLXNsaWNlJywgJzxpb3RhPicsICdjaGVjay1zbGljZScsICdzZXF1ZW5jZT8nLCAnaGVhZCcsICdhcHBlbmQtYXMnLCAnaGFsdmVzJywgJ3NlcXVlbmNlPScsICdjb2xsYXBzZS1zbGljZScsICc/c2Vjb25kJywgJ3NsaWNlLWVycm9yPycsICdwcm9kdWN0JywgJ2JvdW5kcy1jaGVjaz8nLCAnYm91bmRzLWNoZWNrJywgJ2ltbXV0YWJsZScsICd2aXJ0dWFsLWV4ZW1wbGFyJywgJ2hhcnZlc3QnLCAncmVtb3ZlJywgJ3BhZC1oZWFkJywgJ2xhc3QnLCAnc2V0LWZvdXJ0aCcsICdjYXJ0ZXNpYW4tcHJvZHVjdCcsICdyZW1vdmUtZXEnLCAnc2hvcnRlbicsICdzaG9ydGVyJywgJ3JldmVyc2VkPycsICdzaG9ydGVyPycsICdzaG9ydGVzdCcsICdoZWFkLXNsaWNlJywgJ3BvcConLCAndGFpbC1zbGljZSonLCAnYnV0LWxhc3Qtc2xpY2UnLCAnaW90YT8nLCAnYXBwZW5kIScsICdjdXQtc2xpY2UnLCAnbmV3LXJlc2l6YWJsZScsICdoZWFkLXNsaWNlKicsICdzZXF1ZW5jZS1oYXNoY29kZScsICdwb3AnLCAnc2V0LW50aCcsICc/bnRoJywgJ3NlY29uZCcsICdqb2luJywgJ2ltbXV0YWJsZS1zZXF1ZW5jZT8nLCAnPHJldmVyc2VkPicsICczYXBwZW5kLWFzJywgJ3ZpcnR1YWwtc2VxdWVuY2UnLCAnc3Vic2VxPycsICdyZW1vdmUtbnRoIScsICdsZW5ndGgnLCAnbGFzdC1pbmRleCcsICdsZW5ndGhlbicsICdhc3NlcnQtc2VxdWVuY2UnLCAnY29weScsICdtb3ZlJywgJ3RoaXJkJywgJ2ZpcnN0JywgJ3RhaWw/JywgJ3NldC1maXJzdCcsICdwcmVmaXgnLCAnYm91bmRzLWVycm9yJywgJzxyZXBldGl0aW9uPicsICdleGNoYW5nZScsICdzdXJyb3VuZCcsICdjdXQnLCAnbWluLWxlbmd0aCcsICdzZXQtdGhpcmQnLCAncHVzaC1hbGwnLCAnaGVhZD8nLCAnc3Vic2VxLXN0YXJ0LWZyb20nLCAnZGVsZXRlLXNsaWNlJywgJ3Jlc3QnLCAnc3VtLWxlbmd0aHMnLCAnaGVhZConLCAnaW5maW11bScsICdyZW1vdmUhJywgJ2dsdWUnLCAnc2xpY2UtZXJyb3InLCAnc3Vic2VxJywgJ3B1c2gnLCAncmVwbGFjZS1zbGljZScsICdzdWJzZXEtYXMnLCAndW5jbGlwLWxhc3QnXG5cdFx0XSxcblx0XHQnbWF0aC1idWlsdGluJzogW1xuXHRcdFx0J251bWJlcj0nLCAnbmV4dC1wb3dlci1vZi0yJywgJz8xKycsICdmcC1zcGVjaWFsPycsICdpbWFnaW5hcnktcGFydCcsICdmbG9hdD5iaXRzJywgJ251bWJlcj8nLCAnZnAtaW5maW5pdHk/JywgJ2JpZ251bT8nLCAnZnAtc25hbj8nLCAnZGVub21pbmF0b3InLCAnZ2NkJywgJyonLCAnKycsICdmcC1iaXR3aXNlPScsICctJywgJ3U+PScsICcvJywgJz49JywgJ2JpdGFuZCcsICdwb3dlci1vZi0yPycsICdsb2cyLWV4cGVjdHMtcG9zaXRpdmUnLCAnbmVnPycsICc8JywgJ2xvZzInLCAnPicsICdpbnRlZ2VyPycsICdudW1iZXInLCAnYml0cz5kb3VibGUnLCAnMi8nLCAnemVybz8nLCAnYml0cz5mbG9hdCcsICdmbG9hdD8nLCAnc2hpZnQnLCAncmF0aW8/JywgJ3JlY3Q+JywgJ2V2ZW4/JywgJ3JhdGlvJywgJ2ZwLXNpZ24nLCAnYml0bm90JywgJz5maXhudW0nLCAnY29tcGxleD8nLCAnL2knLCAnaW50ZWdlcj5maXhudW0nLCAnL2YnLCAnc2duJywgJz5iaWdudW0nLCAnbmV4dC1mbG9hdCcsICd1PCcsICd1PicsICdtb2QnLCAncmVjaXAnLCAncmF0aW9uYWwnLCAnPmZsb2F0JywgJzJeJywgJ2ludGVnZXInLCAnZml4bnVtPycsICduZWcnLCAnZml4bnVtJywgJ3NxJywgJ2JpZ251bScsICc+cmVjdCcsICdiaXQ/JywgJ2ZwLXFuYW4/JywgJ3NpbXBsZS1nY2QnLCAnY29tcGxleCcsICc8ZnAtbmFuPicsICdyZWFsJywgJz5mcmFjdGlvbicsICdkb3VibGU+Yml0cycsICdiaXRvcicsICdyZW0nLCAnZnAtbmFuLXBheWxvYWQnLCAncmVhbC1wYXJ0JywgJ2xvZzItZXhwZWN0cy1wb3NpdGl2ZT8nLCAncHJldi1mbG9hdCcsICdhbGlnbicsICd1bm9yZGVyZWQ/JywgJ2Zsb2F0JywgJ2ZwLW5hbj8nLCAnYWJzJywgJ2JpdHhvcicsICdpbnRlZ2VyPmZpeG51bS1zdHJpY3QnLCAndTw9JywgJ29kZD8nLCAnPD0nLCAnL21vZCcsICc+aW50ZWdlcicsICdyZWFsPycsICdyYXRpb25hbD8nLCAnbnVtZXJhdG9yJ1xuXHRcdF1cblx0XHQvLyB0aGF0J3MgYWxsIGZvciBub3dcblx0fTtcblxuXHRPYmplY3Qua2V5cyhidWlsdGlucykuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuXHRcdGZhY3RvcltrXS5wYXR0ZXJuID0gYXJyVG9Xb3Jkc1JlZ0V4cChidWlsdGluc1trXSk7XG5cdH0pO1xuXG5cdHZhciBjb21iaW5hdG9ycyA9IFtcblx0XHQvLyBrZXJuZWxcblx0XHQnMmJpJywgJ3doaWxlJywgJzJ0cmknLCAnYmkqJywgJzRkaXAnLCAnYm90aD8nLCAnc2FtZT8nLCAndHJpQCcsICdjdXJyeScsICdwcmVwb3NlJywgJzNiaScsICc/aWYnLCAndHJpKicsICcya2VlcCcsICcza2VlcCcsICdjdXJyaWVkJywgJzJrZWVwZCcsICd3aGVuJywgJzJiaSonLCAnMnRyaSonLCAnNGtlZXAnLCAnYmlAJywgJ2tlZXBkZCcsICdkbycsICd1bmxlc3MqJywgJ3RyaS1jdXJyeScsICdpZionLCAnbG9vcCcsICdiaS1jdXJyeSonLCAnd2hlbionLCAnMmJpQCcsICcydHJpQCcsICd3aXRoJywgJzJ3aXRoJywgJ2VpdGhlcj8nLCAnYmknLCAndW50aWwnLCAnM2RpcCcsICczY3VycnknLCAndHJpLWN1cnJ5KicsICd0cmktY3VycnlAJywgJ2JpLWN1cnJ5JywgJ2tlZXBkJywgJ2NvbXBvc2UnLCAnMmRpcCcsICdpZicsICczdHJpJywgJ3VubGVzcycsICd0dXBsZScsICdrZWVwJywgJzJjdXJyeScsICd0cmknLCAnbW9zdCcsICd3aGlsZSonLCAnZGlwJywgJ2NvbXBvc2VkJywgJ2JpLWN1cnJ5QCcsXG5cdFx0Ly8gc2VxdWVuY2VzXG5cdFx0J2ZpbmQtbGFzdC1mcm9tJywgJ3RyaW0taGVhZC1zbGljZScsICdtYXAtYXMnLCAnZWFjaC1mcm9tJywgJ25vbmU/JywgJ3RyaW0tdGFpbCcsICdwYXJ0aXRpb24nLCAnaWYtZW1wdHknLCAnYWNjdW11bGF0ZSonLCAncmVqZWN0IScsICdmaW5kLWZyb20nLCAnYWNjdW11bGF0ZS1hcycsICdjb2xsZWN0b3ItZm9yLWFzJywgJ3JlamVjdCcsICdtYXAnLCAnbWFwLXN1bScsICdhY2N1bXVsYXRlIScsICcyZWFjaC1mcm9tJywgJ2ZvbGxvdycsICdzdXByZW11bS1ieScsICdtYXAhJywgJ3VubGVzcy1lbXB0eScsICdjb2xsZWN0b3InLCAncGFkZGluZycsICdyZWR1Y2UtaW5kZXgnLCAncmVwbGljYXRlLWFzJywgJ2luZmltdW0tYnknLCAndHJpbS10YWlsLXNsaWNlJywgJ2NvdW50JywgJ2ZpbmQtaW5kZXgnLCAnZmlsdGVyJywgJ2FjY3VtdWxhdGUqIScsICdyZWplY3QtYXMnLCAnbWFwLWludGVnZXJzJywgJ21hcC1maW5kJywgJ3JlZHVjZScsICdzZWxlY3RvcicsICdpbnRlcmxlYXZlJywgJzJtYXAnLCAnZmlsdGVyLWFzJywgJ2JpbmFyeS1yZWR1Y2UnLCAnbWFwLWluZGV4LWFzJywgJ2ZpbmQnLCAncHJvZHVjZScsICdmaWx0ZXIhJywgJ3JlcGxpY2F0ZScsICdjYXJ0ZXNpYW4tbWFwJywgJ2NhcnRlc2lhbi1lYWNoJywgJ2ZpbmQtaW5kZXgtZnJvbScsICdtYXAtZmluZC1sYXN0JywgJzNtYXAtYXMnLCAnM21hcCcsICdmaW5kLWxhc3QnLCAnc2VsZWN0b3ItYXMnLCAnMm1hcC1hcycsICcybWFwLXJlZHVjZScsICdhY2N1bXVsYXRlJywgJ2VhY2gnLCAnZWFjaC1pbmRleCcsICdhY2N1bXVsYXRlKi1hcycsICd3aGVuLWVtcHR5JywgJ2FsbD8nLCAnY29sbGVjdG9yLWFzJywgJ3B1c2gtZWl0aGVyJywgJ25ldy1saWtlJywgJ2NvbGxlY3Rvci1mb3InLCAnMnNlbGVjdG9yJywgJ3B1c2gtaWYnLCAnMmFsbD8nLCAnbWFwLXJlZHVjZScsICczZWFjaCcsICdhbnk/JywgJ3RyaW0tc2xpY2UnLCAnMnJlZHVjZScsICdjaGFuZ2UtbnRoJywgJ3Byb2R1Y2UtYXMnLCAnMmVhY2gnLCAndHJpbScsICd0cmltLWhlYWQnLCAnY2FydGVzaWFuLWZpbmQnLCAnbWFwLWluZGV4Jyxcblx0XHQvLyBtYXRoXG5cdFx0J2lmLXplcm8nLCAnZWFjaC1pbnRlZ2VyJywgJ3VubGVzcy16ZXJvJywgJyhmaW5kLWludGVnZXIpJywgJ3doZW4temVybycsICdmaW5kLWxhc3QtaW50ZWdlcicsICcoYWxsLWludGVnZXJzPyknLCAndGltZXMnLCAnKGVhY2gtaW50ZWdlciknLCAnZmluZC1pbnRlZ2VyJywgJ2FsbC1pbnRlZ2Vycz8nLFxuXHRcdC8vIG1hdGguY29tYmluYXRvcnNcblx0XHQndW5sZXNzLW5lZ2F0aXZlJywgJ2lmLXBvc2l0aXZlJywgJ3doZW4tcG9zaXRpdmUnLCAnd2hlbi1uZWdhdGl2ZScsICd1bmxlc3MtcG9zaXRpdmUnLCAnaWYtbmVnYXRpdmUnLFxuXHRcdC8vIGNvbWJpbmF0b3JzXG5cdFx0J2Nhc2UnLCAnMmNsZWF2ZScsICdjb25kPnF1b3QnLCAnY2FzZT5xdW90JywgJzNjbGVhdmUnLCAnd3JvbmctdmFsdWVzJywgJ3RvLWZpeGVkLXBvaW50JywgJ2FsaXN0PnF1b3QnLCAnY29uZCcsICdjbGVhdmUnLCAnY2FsbC1lZmZlY3QnLCAncmVjdXJzaXZlLWhhc2hjb2RlJywgJ3NwcmVhZCcsICdkZWVwLXNwcmVhZD5xdW90Jyxcblx0XHQvLyBjb21iaW5hdG9ycy5zaG9ydC1jaXJjdWl0XG5cdFx0JzJ8fCcsICcwfHwnLCAnbnx8JywgJzAmJicsICcyJiYnLCAnM3x8JywgJzF8fCcsICcxJiYnLCAnbiYmJywgJzMmJicsXG5cdFx0Ly8gY29tYmluYXRvcnMuc21hcnRcblx0XHQnc21hcnQtdW5sZXNzKicsICdrZWVwLWlucHV0cycsICdyZWR1Y2Utb3V0cHV0cycsICdzbWFydC13aGVuKicsICdjbGVhdmU+YXJyYXknLCAnc21hcnQtd2l0aCcsICdzbWFydC1hcHBseScsICdzbWFydC1pZicsICdpbnB1dHMvb3V0cHV0cycsICdvdXRwdXQ+c2VxdWVuY2UtbicsICdtYXAtb3V0cHV0cycsICdtYXAtcmVkdWNlLW91dHB1dHMnLCAnZHJvcHBpbmcnLCAnb3V0cHV0PmFycmF5JywgJ3NtYXJ0LW1hcC1yZWR1Y2UnLCAnc21hcnQtMm1hcC1yZWR1Y2UnLCAnb3V0cHV0PmFycmF5LW4nLCAnbnVsbGFyeScsICdpbnB1dDxzZXF1ZW5jZScsICdhcHBlbmQtb3V0cHV0cycsICdkcm9wLWlucHV0cycsICdpbnB1dHMnLCAnc21hcnQtMnJlZHVjZScsICdkcm9wLW91dHB1dHMnLCAnc21hcnQtcmVkdWNlJywgJ3ByZXNlcnZpbmcnLCAnc21hcnQtd2hlbicsICdvdXRwdXRzJywgJ2FwcGVuZC1vdXRwdXRzLWFzJywgJ3NtYXJ0LXVubGVzcycsICdzbWFydC1pZionLCAnc3VtLW91dHB1dHMnLCAnaW5wdXQ8c2VxdWVuY2UtdW5zYWZlJywgJ291dHB1dD5zZXF1ZW5jZScsXG5cdFx0Ly8gdGFmblxuXHRdO1xuXG5cdGZhY3Rvci5jb21iaW5hdG9ycy5wYXR0ZXJuID0gYXJyVG9Xb3Jkc1JlZ0V4cChjb21iaW5hdG9ycyk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmZhY3RvciA9IGZhY3RvcjtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qKlxuXHQgKiBCYXNlZCBvbiB0aGUgbWFudWFsIGJ5IFdvdXRlciB2YW4gT29ydG1lcnNzZW4uXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yODAxI2lzc3VlLTgyOTcxNzUwNH1cblx0ICovXG5cdFByaXNtLmxhbmd1YWdlc1snZmFsc2UnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtbXn1dKlxcfS9cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjaGFyYWN0ZXItY29kZSc6IHtcblx0XHRcdHBhdHRlcm46IC8nKD86W15cXHJdfFxcclxcbj8pLyxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J2Fzc2VtYmxlci1jb2RlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcZCtgLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGQrLyxcblx0XHQnb3BlcmF0b3InOiAvWy0hIyQlJicqKywuLzo7PT4/QFxcXFxeX2B8flx1MDBERlx1MDBGOF0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdLyxcblx0XHQndmFyaWFibGUnOiAvW2Etel0vLFxuXHRcdCdub24tc3RhbmRhcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvWygpPEJET1x1MDBBRV0vLFxuXHRcdFx0YWxpYXM6ICdib2xkJ1xuXHRcdH1cblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzWydmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnXSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFsbG93fGZ1bmN0aW9ufGlmfG1hdGNofG51bGx8cmV0dXJufHJ1bGVzX3ZlcnNpb258c2VydmljZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvJiZ8XFx8XFx8fFs8PiE9XT0/fFstKyovJV18XFxiKD86aW58aXMpXFxiLyxcbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzWydmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnXVsnY2xhc3MtbmFtZSddO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdmaXJlc3RvcmUtc2VjdXJpdHktcnVsZXMnLCAna2V5d29yZCcsIHtcblx0J3BhdGgnOiB7XG5cdFx0cGF0dGVybjogLyhefFtcXHMoKSxdKSg/OlxcLyg/OltcXHdcXHhBMC1cXHVGRkZGXSt8XFx7W1xcd1xceEEwLVxcdUZGRkZdKyg/Oj1cXCpcXCopP1xcfXxcXCRcXChbXFx3XFx4QTAtXFx1RkZGRi5dK1xcKSkpKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXHtbXFx3XFx4QTAtXFx1RkZGRl0rKD86PVxcKlxcKik/XFx9fFxcJFxcKFtcXHdcXHhBMC1cXHVGRkZGLl0rXFwpLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J29wZXJhdG9yJzogLz0vLFxuXHRcdFx0XHRcdCdrZXl3b3JkJzogL1xcKlxcKi8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1suJCgpe31dL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLy9cblx0XHR9XG5cdH0sXG5cdCdtZXRob2QnOiB7XG5cdFx0Ly8gdG8gbWFrZSB0aGUgcGF0dGVybiBzaG9ydGVyLCB0aGUgYWN0dWFsIG1ldGhvZCBuYW1lcyBhcmUgb21pdHRlZFxuXHRcdHBhdHRlcm46IC8oXFxiYWxsb3dcXHMrKVthLXpdKyg/OlxccyosXFxzKlthLXpdKykqKD89XFxzKls6O10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYnVpbHRpbicsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHR9XG5cdH0sXG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMuZmxvdyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZmxvdycsICdrZXl3b3JkJywge1xuXHRcdCd0eXBlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W0JiXW9vbGVhbnxGdW5jdGlvbnxbTm5ddW1iZXJ8W1NzXXRyaW5nfFtTc115bWJvbHxhbnl8bWl4ZWR8bnVsbHx2b2lkKVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdH1cblx0XHRdXG5cdH0pO1xuXHRQcmlzbS5sYW5ndWFnZXMuZmxvd1snZnVuY3Rpb24tdmFyaWFibGUnXS5wYXR0ZXJuID0gLyg/IVxccylbXyRhLXpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqPVxccyooPzpmdW5jdGlvblxcYnwoPzpcXChbXigpXSpcXCkoPzpcXHMqOlxccypcXHcrKT98KD8hXFxzKVtfJGEtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKilcXHMqPT4pKS9pO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmZsb3dbJ3BhcmFtZXRlciddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2Zsb3cnLCAnb3BlcmF0b3InLCB7XG5cdFx0J2Zsb3ctcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx7XFx8fFxcfFxcfS8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0aWYgKCFBcnJheS5pc0FycmF5KFByaXNtLmxhbmd1YWdlcy5mbG93LmtleXdvcmQpKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmZsb3cua2V5d29yZCA9IFtQcmlzbS5sYW5ndWFnZXMuZmxvdy5rZXl3b3JkXTtcblx0fVxuXHRQcmlzbS5sYW5ndWFnZXMuZmxvdy5rZXl3b3JkLnVuc2hpZnQoXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJF1cXGIpKD86Q2xhc3N8ZGVjbGFyZXxvcGFxdWV8dHlwZSlcXGIoPyFcXCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRdXFxCKVxcJCg/OkRpZmZ8RW51bXxFeGFjdHxLZXlzfE9iak1hcHxQcm9wZXJ0eVR5cGV8UmVjb3JkfFNoYXBlfFN1YnR5cGV8U3VwZXJ0eXBlfGF3YWl0KVxcYig/IVxcJCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0KTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmZvcnRyYW4gPSB7XG5cdCdxdW90ZWQtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC9bQk9aXShbJ1wiXSlbQS1GMC05XStcXDEvaSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86XFxiXFx3K18pPyhbJ1wiXSkoPzpcXDFcXDF8Jig/Olxcclxcbj98XFxuKSg/OlsgXFx0XSohLiooPzpcXHJcXG4/fFxcbil8KD8hWyBcXHRdKiEpKXwoPyFcXDEpLikqKD86XFwxfCYpLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb21tZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCYoPzpcXHJcXG4/fFxcbilcXHMqKSEuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8hLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYm9vbGVhbic6IC9cXC4oPzpGQUxTRXxUUlVFKVxcLig/Ol9cXHcrKT8vaSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VEXVsrLV0/XFxkKyk/KD86X1xcdyspPy9pLFxuXHQna2V5d29yZCc6IFtcblx0XHQvLyBUeXBlc1xuXHRcdC9cXGIoPzpDSEFSQUNURVJ8Q09NUExFWHxET1VCTEUgP1BSRUNJU0lPTnxJTlRFR0VSfExPR0lDQUx8UkVBTClcXGIvaSxcblx0XHQvLyBFTkQgc3RhdGVtZW50c1xuXHRcdC9cXGIoPzpFTkQgPyk/KD86QkxPQ0sgP0RBVEF8RE98RklMRXxGT1JBTEx8RlVOQ1RJT058SUZ8SU5URVJGQUNFfE1PRFVMRSg/ISBQUk9DRURVUkUpfFBST0dSQU18U0VMRUNUfFNVQlJPVVRJTkV8VFlQRXxXSEVSRSlcXGIvaSxcblx0XHQvLyBTdGF0ZW1lbnRzXG5cdFx0L1xcYig/OkFMTE9DQVRBQkxFfEFMTE9DQVRFfEJBQ0tTUEFDRXxDQUxMfENBU0V8Q0xPU0V8Q09NTU9OfENPTlRBSU5TfENPTlRJTlVFfENZQ0xFfERBVEF8REVBTExPQ0FURXxESU1FTlNJT058RE98RU5EfEVRVUlWQUxFTkNFfEVYSVR8RVhURVJOQUx8Rk9STUFUfEdPID9UT3xJTVBMSUNJVCg/OiBOT05FKT98SU5RVUlSRXxJTlRFTlR8SU5UUklOU0lDfE1PRFVMRSBQUk9DRURVUkV8TkFNRUxJU1R8TlVMTElGWXxPUEVOfE9QVElPTkFMfFBBUkFNRVRFUnxQT0lOVEVSfFBSSU5UfFBSSVZBVEV8UFVCTElDfFJFQUR8UkVUVVJOfFJFV0lORHxTQVZFfFNFTEVDVHxTVE9QfFRBUkdFVHxXSElMRXxXUklURSlcXGIvaSxcblx0XHQvLyBPdGhlcnNcblx0XHQvXFxiKD86QVNTSUdOTUVOVHxERUZBVUxUfEVMRU1FTlRBTHxFTFNFfEVMU0VJRnxFTFNFV0hFUkV8RU5UUll8SU58SU5DTFVERXxJTk9VVHxLSU5EfE5VTEx8T05MWXxPUEVSQVRPUnxPVVR8UFVSRXxSRUNVUlNJVkV8UkVTVUxUfFNFUVVFTkNFfFNUQVR8VEhFTnxVU0UpXFxiL2lcblx0XSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXCpcXCp8XFwvXFwvfD0+fFs9XFwvXT18Wzw+XT0/fDo6fFsrXFwtKj0lXXxcXC5bQS1aXStcXC4vaSxcblx0XHR7XG5cdFx0XHQvLyBVc2UgbG9va2JlaGluZCB0byBwcmV2ZW50IGNvbmZ1c2lvbiB3aXRoICgvIC8pXG5cdFx0XHRwYXR0ZXJuOiAvKF58KD8hXFwoKS4pXFwvKD8hXFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvXFwoXFwvfFxcL1xcKXxbKCksOzomXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBodHRwczovL2ZyZWVtYXJrZXIuYXBhY2hlLm9yZy9kb2NzL2RndWlfdGVtcGxhdGVfZXhwLmh0bWxcblxuXHQvLyBGVEwgZXhwcmVzc2lvbiB3aXRoIDQgbGV2ZWxzIG9mIG5lc3Rpbmcgc3VwcG9ydGVkXG5cdHZhciBGVExfRVhQUiA9IC9bXjwoKVwiJ118XFwoKD86PGV4cHI+KSpcXCl8PCg/ISMtLSl8PCMtLSg/OlteLV18LSg/IS0+KSkqLS0+fFwiKD86W15cXFxcXCJdfFxcXFwuKSpcInwnKD86W15cXFxcJ118XFxcXC4pKicvLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHRGVExfRVhQUiA9IEZUTF9FWFBSLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBGVExfRVhQUjsgfSk7XG5cdH1cblx0RlRMX0VYUFIgPSBGVExfRVhQUi5yZXBsYWNlKC88ZXhwcj4vZywgL1teXFxzXFxTXS8uc291cmNlKTtcblxuXHR2YXIgZnRsID0ge1xuXHRcdCdjb21tZW50JzogLzwjLS1bXFxzXFxTXSo/LS0+Lyxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyByYXcgc3RyaW5nXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJyKFwifCcpKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXCJ8JykoPzooPyFcXDF8XFwkXFx7KVteXFxcXF18XFxcXC58XFwkXFx7KD86KD8hXFx9KSg/OjxleHByPikpKlxcfSkqXFwxLy5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKilcXCRcXHsoPzooPyFcXH0pKD86PGV4cHI+KSkqXFx9Ly5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdHJlc3Q6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFzKVxcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdidWlsdGluLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteP10pXFw/XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXHMqXFwoKS8sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuXFwuWzwqIV0/fC0+fC0tfFxcK1xcK3wmJnxcXHxcXHx8XFw/ezEsMn18Wy0rKi8lIT08Pl09P3xcXGIoPzpndHxndGV8bHR8bHRlKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1ssOy46KClbXFxde31dL1xuXHR9O1xuXG5cdGZ0bC5zdHJpbmdbMV0uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLnJlc3QgPSBmdGw7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmZ0bCA9IHtcblx0XHQnZnRsLWNvbW1lbnQnOiB7XG5cdFx0XHQvLyB0aGUgcGF0dGVybiBpcyBzaG9ydGVuZWQgdG8gYmUgbW9yZSBlZmZpY2llbnRcblx0XHRcdHBhdHRlcm46IC9ePCMtLVtcXHNcXFNdKi8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQnZnRsLWRpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC9ePFtcXHNcXFNdKz4kLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXjxcXC8/KVsjQF1bYS16XVxcdyovaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148XFwvP3xcXC8/PiQvLFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdmdGwnLFxuXHRcdFx0XHRcdGluc2lkZTogZnRsXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdmdGwtaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFwkXFx7W1xcc1xcU10qXFx9JC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXHMqXFxTW1xcc1xcU10qLyxcblx0XHRcdFx0XHRhbGlhczogJ2Z0bCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBmdGxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtbGF6eVxuXHRcdHZhciBwYXR0ZXJuID0gUmVnRXhwKC88Iy0tW1xcc1xcU10qPy0tPnw8XFwvP1sjQF1bYS16QS1aXSg/OjxleHByPikqPz58XFwkXFx7KD86PGV4cHI+KSo/XFx9Ly5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIEZUTF9FWFBSOyB9KSwgJ2dpJyk7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2Z0bCcsIHBhdHRlcm4pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdmdGwnKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdhbWVtYWtlcmxhbmd1YWdlID0gUHJpc20ubGFuZ3VhZ2VzLmdtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxlbnVtfGV4aXR8Zm9yfGdsb2JhbHZhcnxpZnxyZXBlYXR8cmV0dXJufHN3aXRjaHx1bnRpbHx2YXJ8d2hpbGUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIweFtcXGRhLWZdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KVt1bGZdezAsNH0vaSxcblx0J29wZXJhdG9yJzogLy0tfFxcK1xcK3xbLSslLz1dPT98IT18XFwqXFwqPz0/fDxbPD0+XT98Pls9Pl0/fCYmP3xcXF5cXF4/fFxcfFxcfD98fnxcXGIoPzphbmR8YXR8bm90fG9yfHdpdGh8eG9yKVxcYi8sXG5cdCdjb25zdGFudCc6IC9cXGIoPzpHTV9idWlsZF9kYXRlfEdNX3ZlcnNpb258YWN0aW9uXyg/OmNvbnRpbnVlfHJlc3RhcnR8cmV2ZXJzZXxzdG9wKXxhbGx8Z2FtZXNwZWVkXyg/OmZwc3xtaWNyb3NlY29uZHMpfGdsb2JhbHxsb2NhbHxub29uZXxvdGhlcnxwaXxwb2ludGVyXyg/OmludmFsaWR8bnVsbCl8c2VsZnx0aW1lem9uZV8oPzpsb2NhbHx1dGMpfHVuZGVmaW5lZHxldl8oPzpjcmVhdGV8ZGVzdHJveXxzdGVwfGFsYXJtfGtleWJvYXJkfG1vdXNlfGNvbGxpc2lvbnxvdGhlcnxkcmF3fGRyYXdfKD86YmVnaW58ZW5kfHBvc3R8cHJlKXxrZXlwcmVzc3xrZXlyZWxlYXNlfHRyaWdnZXJ8KD86bGVmdHxtaWRkbGV8bm98cmlnaHQpX2J1dHRvbnwoPzpsZWZ0fG1pZGRsZXxyaWdodClfcHJlc3N8KD86bGVmdHxtaWRkbGV8cmlnaHQpX3JlbGVhc2V8bW91c2VfKD86ZW50ZXJ8bGVhdmV8d2hlZWxfZG93bnx3aGVlbF91cCl8Z2xvYmFsXyg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9idXR0b258Z2xvYmFsXyg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9wcmVzc3xnbG9iYWxfKD86bGVmdHxtaWRkbGV8cmlnaHQpX3JlbGVhc2V8am95c3RpY2soPzoxfDIpXyg/OmJ1dHRvbjF8YnV0dG9uMnxidXR0b24zfGJ1dHRvbjR8YnV0dG9uNXxidXR0b242fGJ1dHRvbjd8YnV0dG9uOHxkb3dufGxlZnR8cmlnaHR8dXApfG91dHNpZGV8Ym91bmRhcnl8Z2FtZV9zdGFydHxnYW1lX2VuZHxyb29tX3N0YXJ0fHJvb21fZW5kfG5vX21vcmVfbGl2ZXN8YW5pbWF0aW9uX2VuZHxlbmRfb2ZfcGF0aHxub19tb3JlX2hlYWx0aHx1c2VyXFxkfGd1aXxndWlfYmVnaW58Z3VpX2VuZHxzdGVwXyg/OmJlZ2lufGVuZHxub3JtYWwpKXx2a18oPzphbHR8YW55a2V5fGJhY2tzcGFjZXxjb250cm9sfGRlbGV0ZXxkb3dufGVuZHxlbnRlcnxlc2NhcGV8aG9tZXxpbnNlcnR8bGVmdHxub2tleXxwYWdlZG93bnxwYWdldXB8cGF1c2V8cHJpbnRzY3JlZW58cmV0dXJufHJpZ2h0fHNoaWZ0fHNwYWNlfHRhYnx1cHxmXFxkfG51bXBhZFxcZHxhZGR8ZGVjaW1hbHxkaXZpZGV8bGFsdHxsY29udHJvbHxsc2hpZnR8bXVsdGlwbHl8cmFsdHxyY29udHJvbHxyc2hpZnR8c3VidHJhY3QpfGFjaGlldmVtZW50Xyg/OmZpbHRlcl8oPzphbGxfcGxheWVyc3xmYXZvcml0ZXNfb25seXxmcmllbmRzX29ubHkpfGZyaWVuZHNfaW5mb3xpbmZvfGxlYWRlcmJvYXJkX2luZm98b3VyX2luZm98cGljX2xvYWRlZHxzaG93Xyg/OmFjaGlldmVtZW50fGJhbmt8ZnJpZW5kX3BpY2tlcnxsZWFkZXJib2FyZHxwcm9maWxlfHB1cmNoYXNlX3Byb21wdHx1aSl8dHlwZV9jaGFsbGVuZ2V8dHlwZV9zY29yZV9jaGFsbGVuZ2UpfGFzc2V0Xyg/OmZvbnR8b2JqZWN0fHBhdGh8cm9vbXxzY3JpcHR8c2hhZGVyfHNvdW5kfHNwcml0ZXx0aWxlc3x0aW1lbGluZXx1bmtub3duKXxhdWRpb18oPzozZHxmYWxsb2ZmXyg/OmV4cG9uZW50X2Rpc3RhbmNlfGV4cG9uZW50X2Rpc3RhbmNlX2NsYW1wZWR8aW52ZXJzZV9kaXN0YW5jZXxpbnZlcnNlX2Rpc3RhbmNlX2NsYW1wZWR8bGluZWFyX2Rpc3RhbmNlfGxpbmVhcl9kaXN0YW5jZV9jbGFtcGVkfG5vbmUpfG1vbm98bmV3X3N5c3RlbXxvbGRfc3lzdGVtfHN0ZXJlbyl8Ym1fKD86YWRkfGNvbXBsZXh8ZGVzdF9hbHBoYXxkZXN0X2NvbG9yfGRlc3RfY29sb3VyfGludl9kZXN0X2FscGhhfGludl9kZXN0X2NvbG9yfGludl9kZXN0X2NvbG91cnxpbnZfc3JjX2FscGhhfGludl9zcmNfY29sb3J8aW52X3NyY19jb2xvdXJ8bWF4fG5vcm1hbHxvbmV8c3JjX2FscGhhfHNyY19hbHBoYV9zYXR8c3JjX2NvbG9yfHNyY19jb2xvdXJ8c3VidHJhY3R8emVybyl8YnJvd3Nlcl8oPzpjaHJvbWV8ZmlyZWZveHxpZXxpZV9tb2JpbGV8bm90X2FfYnJvd3NlcnxvcGVyYXxzYWZhcml8c2FmYXJpX21vYmlsZXx0aXplbnx1bmtub3dufHdpbmRvd3Nfc3RvcmUpfGJ1ZmZlcl8oPzpib29sfGYxNnxmMzJ8ZjY0fGZhc3R8Zml4ZWR8Z2VuZXJhbGVycm9yfGdyb3d8aW52YWxpZHR5cGV8bmV0d29ya3xvdXRvZmJvdW5kc3xvdXRvZnNwYWNlfHMxNnxzMzJ8czh8c2Vla19lbmR8c2Vla19yZWxhdGl2ZXxzZWVrX3N0YXJ0fHN0cmluZ3x0ZXh0fHUxNnx1MzJ8dTY0fHU4fHZidWZmZXJ8d3JhcCl8Y18oPzphcXVhfGJsYWNrfGJsdWV8ZGtncmF5fGZ1Y2hzaWF8Z3JheXxncmVlbnxsaW1lfGx0Z3JheXxtYXJvb258bmF2eXxvbGl2ZXxvcmFuZ2V8cHVycGxlfHJlZHxzaWx2ZXJ8dGVhbHx3aGl0ZXx5ZWxsb3cpfGNtcGZ1bmNfKD86YWx3YXlzfGVxdWFsfGdyZWF0ZXJ8Z3JlYXRlcmVxdWFsfGxlc3N8bGVzc2VxdWFsfG5ldmVyfG5vdGVxdWFsKXxjcl8oPzphcHBzdGFydHxhcnJvd3xiZWFtfGNyb3NzfGRlZmF1bHR8ZHJhZ3xoYW5kcG9pbnR8aG91cmdsYXNzfG5vbmV8c2l6ZV9hbGx8c2l6ZV9uZXN3fHNpemVfbnN8c2l6ZV9ud3NlfHNpemVfd2V8dXBhcnJvdyl8Y3VsbF8oPzpjbG9ja3dpc2V8Y291bnRlcmNsb2Nrd2lzZXxub2N1bGxpbmcpfGRldmljZV8oPzplbXVsYXRvcnx0YWJsZXQpfGRldmljZV9pb3NfKD86aXBhZHxpcGFkX3JldGluYXxpcGhvbmV8aXBob25lNXxpcGhvbmU2fGlwaG9uZTZwbHVzfGlwaG9uZV9yZXRpbmF8dW5rbm93bil8ZGlzcGxheV8oPzpsYW5kc2NhcGV8bGFuZHNjYXBlX2ZsaXBwZWR8cG9ydHJhaXR8cG9ydHJhaXRfZmxpcHBlZCl8ZGxsXyg/OmNkZWNsfGNkZWx8c3RkY2FsbCl8ZHNfdHlwZV8oPzpncmlkfGxpc3R8bWFwfHByaW9yaXR5fHF1ZXVlfHN0YWNrKXxlZl8oPzpjbG91ZHxlbGxpcHNlfGV4cGxvc2lvbnxmaXJld29ya3xmbGFyZXxyYWlufHJpbmd8c21va2V8c21va2V1cHxzbm93fHNwYXJrfHN0YXIpfGZhXyg/OmFyY2hpdmV8Ym90dG9tfGNlbnRlcnxkaXJlY3Rvcnl8aGlkZGVufGxlZnR8bWlkZGxlfHJlYWRvbmx5fHJpZ2h0fHN5c2ZpbGV8dG9wfHZvbHVtZWlkKXxmYl9sb2dpbl8oPzpkZWZhdWx0fGZhbGxiYWNrX3RvX3dlYnZpZXd8Zm9yY2luZ19zYWZhcml8Zm9yY2luZ193ZWJ2aWV3fG5vX2ZhbGxiYWNrX3RvX3dlYnZpZXd8dXNlX3N5c3RlbV9hY2NvdW50KXxpYXBfKD86YXZhaWxhYmxlfGNhbmNlbGVkfGV2X2NvbnN1bWV8ZXZfcHJvZHVjdHxldl9wdXJjaGFzZXxldl9yZXN0b3JlfGV2X3N0b3JlbG9hZHxmYWlsZWR8cHVyY2hhc2VkfHJlZnVuZGVkfHN0YXR1c19hdmFpbGFibGV8c3RhdHVzX2xvYWRpbmd8c3RhdHVzX3Byb2Nlc3Npbmd8c3RhdHVzX3Jlc3RvcmluZ3xzdGF0dXNfdW5hdmFpbGFibGV8c3RhdHVzX3VuaW5pdGlhbGlzZWR8c3RvcmVsb2FkX2ZhaWxlZHxzdG9yZWxvYWRfb2t8dW5hdmFpbGFibGUpfGxlYWRlcmJvYXJkX3R5cGVfKD86bnVtYmVyfHRpbWVfbWluc19zZWNzKXxsaWdodHR5cGVfKD86ZGlyfHBvaW50KXxtYXRyaXhfKD86cHJvamVjdGlvbnx2aWV3fHdvcmxkKXxtYl8oPzphbnl8bGVmdHxtaWRkbGV8bm9uZXxyaWdodCl8bmV0d29ya18oPzpjb25maWdfKD86Y29ubmVjdF90aW1lb3V0fGRpc2FibGVfcmVsaWFibGVfdWRwfGVuYWJsZV9yZWxpYWJsZV91ZHB8dXNlX25vbl9ibG9ja2luZ19zb2NrZXQpfHNvY2tldF8oPzpibHVldG9vdGh8dGNwfHVkcCl8dHlwZV8oPzpjb25uZWN0fGRhdGF8ZGlzY29ubmVjdHxub25fYmxvY2tpbmdfY29ubmVjdCkpfG9mX2NoYWxsZW5nZV8oPzpsb3NlfHRpZXx3aW4pfG9zXyg/OmFuZHJvaWR8aW9zfGxpbnV4fG1hY29zeHxwczN8cHM0fHBzdml0YXx1bmtub3dufHV3cHx3aW4zMnx3aW44bmF0aXZlfHdpbmRvd3N8d2lucGhvbmV8eGJveG9uZSl8cGh5X2RlYnVnX3JlbmRlcl8oPzphYWJifGNvbGxpc2lvbl9wYWlyc3xjb21zfGNvcmVfc2hhcGVzfGpvaW50c3xvYmJ8c2hhcGVzKXxwaHlfam9pbnRfKD86YW5jaG9yXzFfeHxhbmNob3JfMV95fGFuY2hvcl8yX3h8YW5jaG9yXzJfeXxhbmdsZXxhbmdsZV9saW1pdHN8ZGFtcGluZ19yYXRpb3xmcmVxdWVuY3l8bGVuZ3RoXzF8bGVuZ3RoXzJ8bG93ZXJfYW5nbGVfbGltaXR8bWF4X2ZvcmNlfG1heF9sZW5ndGh8bWF4X21vdG9yX2ZvcmNlfG1heF9tb3Rvcl90b3JxdWV8bWF4X3RvcnF1ZXxtb3Rvcl9mb3JjZXxtb3Rvcl9zcGVlZHxtb3Rvcl90b3JxdWV8cmVhY3Rpb25fZm9yY2VfeHxyZWFjdGlvbl9mb3JjZV95fHJlYWN0aW9uX3RvcnF1ZXxzcGVlZHx0cmFuc2xhdGlvbnx1cHBlcl9hbmdsZV9saW1pdCl8cGh5X3BhcnRpY2xlX2RhdGFfZmxhZ18oPzpjYXRlZ29yeXxjb2xvcnxjb2xvdXJ8cG9zaXRpb258dHlwZWZsYWdzfHZlbG9jaXR5KXxwaHlfcGFydGljbGVfZmxhZ18oPzpjb2xvcm1peGluZ3xjb2xvdXJtaXhpbmd8ZWxhc3RpY3xwb3dkZXJ8c3ByaW5nfHRlbnNpbGV8dmlzY291c3x3YWxsfHdhdGVyfHpvbWJpZSl8cGh5X3BhcnRpY2xlX2dyb3VwX2ZsYWdfKD86cmlnaWR8c29saWQpfHByXyg/OmxpbmVsaXN0fGxpbmVzdHJpcHxwb2ludGxpc3R8dHJpYW5nbGVmYW58dHJpYW5nbGVsaXN0fHRyaWFuZ2xlc3RyaXApfHBzXyg/OmRpc3RyfHNoYXBlKV8oPzpkaWFtb25kfGVsbGlwc2V8Z2F1c3NpYW58aW52Z2F1c3NpYW58bGluZXxsaW5lYXJ8cmVjdGFuZ2xlKXxwdF9zaGFwZV8oPzpjaXJjbGV8Y2xvdWR8ZGlza3xleHBsb3Npb258ZmxhcmV8bGluZXxwaXhlbHxyaW5nfHNtb2tlfHNub3d8c3Bhcmt8c3BoZXJlfHNxdWFyZXxzdGFyKXx0eV8oPzpyZWFsfHN0cmluZyl8Z3BfKD86ZmFjZVxcZHxheGlzbGh8YXhpc2x2fGF4aXNyaHxheGlzcnZ8cGFkZHxwYWRsfHBhZHJ8cGFkdXxzZWxlY3R8c2hvdWxkZXJsfHNob3VsZGVybGJ8c2hvdWxkZXJyfHNob3VsZGVycmJ8c3RhcnR8c3RpY2tsfHN0aWNrcil8bGJfZGlzcF8oPzpub25lfG51bWVyaWN8dGltZV9tc3x0aW1lX3NlYyl8bGJfc29ydF8oPzphc2NlbmRpbmd8ZGVzY2VuZGluZ3xub25lKXxvdl8oPzphY2hpZXZlbWVudHN8Y29tbXVuaXR5fGZyaWVuZHN8Z2FtZWdyb3VwfHBsYXllcnN8c2V0dGluZ3MpfHVnY18oPzpmaWxldHlwZV8oPzpjb21tdW5pdHl8bWljcm90cmFucyl8bGlzdF8oPzpGYXZvcml0ZWR8Rm9sbG93ZWR8UHVibGlzaGVkfFN1YnNjcmliZWR8VXNlZE9yUGxheWVkfFZvdGVkRG93bnxWb3RlZE9ufFZvdGVkVXB8V2lsbFZvdGVMYXRlcil8bWF0Y2hfKD86QWxsR3VpZGVzfEFydHdvcmt8Q29sbGVjdGlvbnN8Q29udHJvbGxlckJpbmRpbmdzfEludGVncmF0ZWRHdWlkZXN8SXRlbXN8SXRlbXNfTXR4fEl0ZW1zX1JlYWR5VG9Vc2V8U2NyZWVuc2hvdHN8VXNhYmxlSW5HYW1lfFZpZGVvc3xXZWJHdWlkZXMpfHF1ZXJ5Xyg/OkFjY2VwdGVkRm9yR2FtZVJhbmtlZEJ5QWNjZXB0YW5jZURhdGV8Q3JlYXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlfEZhdm9yaXRlZEJ5RnJpZW5kc1JhbmtlZEJ5UHVibGljYXRpb25EYXRlfE5vdFlldFJhdGVkKXxxdWVyeV9SYW5rZWRCeSg/Ok51bVRpbWVzUmVwb3J0ZWR8UHVibGljYXRpb25EYXRlfFRleHRTZWFyY2h8VG90YWxWb3Rlc0FzY3xUcmVuZHxWb3RlfFZvdGVzVXApfHJlc3VsdF9zdWNjZXNzfHNvcnRvcmRlcl9DcmVhdGlvbk9yZGVyKD86QXNjfERlc2MpfHNvcnRvcmRlcl8oPzpGb3JNb2RlcmF0aW9ufExhc3RVcGRhdGVkRGVzY3xTdWJzY3JpcHRpb25EYXRlRGVzY3xUaXRsZUFzY3xWb3RlU2NvcmVEZXNjKXx2aXNpYmlsaXR5Xyg/OmZyaWVuZHNfb25seXxwcml2YXRlfHB1YmxpYykpfHZlcnRleF91c2FnZV8oPzpiaW5vcm1hbHxibGVuZGluZGljZXN8YmxlbmR3ZWlnaHR8Y29sb3J8Y29sb3VyfGRlcHRofGZvZ3xub3JtYWx8cG9zaXRpb258cHNpemV8c2FtcGxlfHRhbmdlbnR8dGV4Y29vcmR8dGV4dGNvb3JkKXx2ZXJ0ZXhfdHlwZV8oPzpmbG9hdFxcZHxjb2xvcnxjb2xvdXJ8dWJ5dGU0KXxpbnB1dF90eXBlfGxheWVyZWxlbWVudHR5cGVfKD86YmFja2dyb3VuZHxpbnN0YW5jZXxvbGR0aWxlbWFwfHBhcnRpY2xlc3lzdGVtfHNwcml0ZXx0aWxlfHRpbGVtYXB8dW5kZWZpbmVkKXxzZV8oPzpjaG9ydXN8Y29tcHJlc3NvcnxlY2hvfGVxdWFsaXplcnxmbGFuZ2VyfGdhcmdsZXxub25lfHJldmVyYil8dGV4dF90eXBlfHRpbGVfKD86ZmxpcHxpbmRleF9tYXNrfG1pcnJvcnxyb3RhdGUpfCg/Om9ianxybXxzY3J8c3ByKVxcdyspXFxiLyxcblx0J3ZhcmlhYmxlJzogL1xcYig/OmFsYXJtfGFwcGxpY2F0aW9uX3N1cmZhY2V8YXN5bmNfbG9hZHxiYWNrZ3JvdW5kXyg/OmFscGhhfGJsZW5kfGNvbG9yfGNvbG91cnxmb3JlZ3JvdW5kfGhlaWdodHxoc3BlZWR8aHRpbGVkfGluZGV4fHNob3djb2xvcnxzaG93Y29sb3VyfHZpc2libGV8dnNwZWVkfHZ0aWxlZHx3aWR0aHx4fHhzY2FsZXx5fHlzY2FsZSl8YmJveF8oPzpib3R0b218bGVmdHxyaWdodHx0b3ApfGJyb3dzZXJfKD86aGVpZ2h0fHdpZHRoKXxjYXB0aW9uXyg/OmhlYWx0aHxsaXZlc3xzY29yZSl8Y3VycmVudF8oPzpkYXl8aG91cnxtaW51dGV8bW9udGh8c2Vjb25kfHRpbWV8d2Vla2RheXx5ZWFyKXxjdXJzb3Jfc3ByaXRlfGRlYnVnX21vZGV8ZGVsdGFfdGltZXxkaXJlY3Rpb258ZGlzcGxheV9hYXxlcnJvcl8oPzpsYXN0fG9jY3VycmVkKXxldmVudF8oPzphY3Rpb258bnVtYmVyfG9iamVjdHx0eXBlKXxmcHN8ZnBzX3JlYWx8ZnJpY3Rpb258Z2FtZV8oPzpkaXNwbGF5fHByb2plY3R8c2F2ZSlfKD86aWR8bmFtZSl8Z2FtZW1ha2VyXyg/OnByb3xyZWdpc3RlcmVkfHZlcnNpb24pfGdyYXZpdHl8Z3Jhdml0eV9kaXJlY3Rpb258KD86aHx2KXNwZWVkfGhlYWx0aHxpYXBfZGF0YXxpZHxpbWFnZV8oPzphbHBoYXxhbmdsZXxibGVuZHxkZXB0aHxpbmRleHxudW1iZXJ8c3BlZWR8eHNjYWxlfHlzY2FsZSl8aW5zdGFuY2VfKD86Y291bnR8aWQpfGtleWJvYXJkXyg/OmtleXxsYXN0Y2hhcnxsYXN0a2V5fHN0cmluZyl8bGF5ZXJ8bGl2ZXN8bWFza19pbmRleHxtb3VzZV8oPzpidXR0b258bGFzdGJ1dHRvbnx4fHkpfG9iamVjdF9pbmRleHxvc18oPzpicm93c2VyfGRldmljZXx0eXBlfHZlcnNpb24pfHBhdGhfKD86ZW5kYWN0aW9ufGluZGV4fG9yaWVudGF0aW9ufHBvc2l0aW9ufHBvc2l0aW9ucHJldmlvdXN8c2NhbGV8c3BlZWQpfHBlcnNpc3RlbnR8cGh5Xyg/OnJvdGF0aW9ufCg/OmNvbF9ub3JtYWx8Y29sbGlzaW9ufGNvbXxsaW5lYXJfdmVsb2NpdHl8cG9zaXRpb258c3BlZWQpXyg/Onh8eSl8YW5ndWxhcl8oPzpkYW1waW5nfHZlbG9jaXR5KXxwb3NpdGlvbl8oPzp4fHkpcHJldmlvdXN8c3BlZWR8bGluZWFyX2RhbXBpbmd8YnVsbGV0fGZpeGVkX3JvdGF0aW9ufGFjdGl2ZXxtYXNzfGluZXJ0aWF8ZHluYW1pY3xraW5lbWF0aWN8c2xlZXBpbmd8Y29sbGlzaW9uX3BvaW50cyl8cG9pbnRlcl8oPzppbnZhbGlkfG51bGwpfHJvb218cm9vbV8oPzpjYXB0aW9ufGZpcnN0fGhlaWdodHxsYXN0fHBlcnNpc3RlbnR8c3BlZWR8d2lkdGgpfHNjb3JlfHNlY3VyZV9tb2RlfHNob3dfKD86aGVhbHRofGxpdmVzfHNjb3JlKXxzb2xpZHxzcGVlZHxzcHJpdGVfKD86aGVpZ2h0fGluZGV4fHdpZHRofHhvZmZzZXR8eW9mZnNldCl8dGVtcF9kaXJlY3Rvcnl8dGltZWxpbmVfKD86aW5kZXh8bG9vcHxwb3NpdGlvbnxydW5uaW5nfHNwZWVkKXx0cmFuc2l0aW9uXyg/OmNvbG9yfGtpbmR8c3RlcHMpfHVuZGVmaW5lZHx2aWV3Xyg/OmFuZ2xlfGN1cnJlbnR8ZW5hYmxlZHwoPzpofHYpKD86Ym9yZGVyfHNwZWVkKXwoPzpofHd8eHx5KXBvcnR8KD86aHx3fHh8eSl2aWV3fG9iamVjdHxzdXJmYWNlX2lkfHZpc2libGUpfHZpc2libGV8d2ViZ2xfZW5hYmxlZHx3b3JraW5nX2RpcmVjdG9yeXwoPzp4fHkpKD86cHJldmlvdXN8c3RhcnQpfHh8eXxhcmd1bWVudCg/Ol9yZWxpdGl2ZXxfY291bnR8XFxkKXxhcmd1bWVudHxnbG9iYWx8bG9jYWx8b3RoZXJ8c2VsZilcXGIvXG59KTtcblxuLy8gaHR0cHM6Ly93d3cuZ2FwLXN5c3RlbS5vcmcvTWFudWFscy9kb2MvcmVmL2NoYXA0Lmh0bWxcbi8vIGh0dHBzOi8vd3d3LmdhcC1zeXN0ZW0ub3JnL01hbnVhbHMvZG9jL3JlZi9jaGFwMjcuaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMuZ2FwID0ge1xuXHQnc2hlbGwnOiB7XG5cdFx0cGF0dGVybjogL15nYXA+W1xcc1xcU10qPyg/PV5nYXA+fCQoPyFbXFxzXFxTXSkpL20sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2dhcCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oZ2FwPikuKyg/Oig/Olxccig/OlxcbnwoPyFcXG4pKXxcXG4pPi4qKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15nYXA+L1xuXHRcdH1cblx0fSxcblxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcJ1wiXSkoPzonKD86W15cXHJcXG5cXFxcJ118XFxcXC4pezEsMTB9J3xcIig/OlteXFxyXFxuXFxcXFwiXXxcXFxcLikqXCIoPyFcIil8XCJcIlwiW1xcc1xcU10qP1wiXCJcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NvbnRpbnVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSk+Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86QXNzZXJ0fEluZm98SXNCb3VuZHxRVUlUfFRyeU5leHRNZXRob2R8VW5iaW5kfGFuZHxhdG9taWN8YnJlYWt8Y29udGludWV8ZG98ZWxpZnxlbHNlfGVuZHxmaXxmb3J8ZnVuY3Rpb258aWZ8aW58bG9jYWx8bW9kfG5vdHxvZHxvcnxxdWl0fHJlYWRvbmx5fHJlYWR3cml0ZXxyZWN8cmVwZWF0fHJldHVybnx0aGVufHVudGlsfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXXxcXC5cXC4pKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyg/Ol9bYS16XT8pPyg/PSR8W15cXHcuXXxcXC5cXC4pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2NvbnRpbnVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dKT4vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J29wZXJhdG9yJzogLy0+fFstKyovXn49IV18PD58Wzw+XT0/fDo9fFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde30sOy46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nYXAuc2hlbGwuaW5zaWRlLmdhcC5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZ2FwO1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2NvZGUgPSB7XG5cdCdjb21tZW50JzogLzsuKnxcXEJcXCguKj9cXClcXEIvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiW0dNXVxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQncHJvcGVydHknOiAvXFxiW0EtWl0vLFxuXHQnY2hlY2tzdW0nOiB7XG5cdFx0cGF0dGVybjogLyhcXCopXFxkKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0Ly8gVDA6MDowXG5cdCdwdW5jdHVhdGlvbic6IC9bOipdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdkc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9APyg/OihcInwnKSg/Oig/IVxcMSlbXlxcblxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxKD8hXCJ8Jyl8XCJcIlwiKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj9cIlwiXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0Ly8gY2xhc3NfbmFtZSBGb28sIGV4dGVuZHMgQmFyLCBjbGFzcyBJbm5lckNsYXNzXG5cdFx0Ly8gZXhwb3J0KGludCkgdmFyIGJheiwgZXhwb3J0KGludCwgMCkgdmFyIGlcblx0XHQvLyBhcyBOb2RlXG5cdFx0Ly8gY29uc3QgRk9POiBpbnQgPSA5LCB2YXIgYmFyOiBib29sID0gdHJ1ZVxuXHRcdC8vIGZ1bmMgYWRkKHJlZmVyZW5jZTogSXRlbSwgYW1vdW50OiBpbnQpIC0+IEl0ZW06XG5cdFx0cGF0dGVybjogLyheKD86Y2xhc3N8Y2xhc3NfbmFtZXxleHRlbmRzKVsgXFx0XSt8XmV4cG9ydFxcKFsgXFx0XSp8XFxiYXNbIFxcdF0rfCg/OlxcYig/OmNvbnN0fHZhcilbIFxcdF18WywoXSlbIFxcdF0qXFx3K1sgXFx0XSo6WyBcXHRdKnwtPlsgXFx0XSopW2EtekEtWl9dXFx3Ki9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGFzc2VydHxicmVha3xicmVha3BvaW50fGNsYXNzfGNsYXNzX25hbWV8Y29uc3R8Y29udGludWV8ZWxpZnxlbHNlfGVudW18ZXhwb3J0fGV4dGVuZHN8Zm9yfGZ1bmN8aWZ8aW58aXN8bWFzdGVyfG1hc3RlcnN5bmN8bWF0Y2h8bm90fG51bGx8b25yZWFkeXxvcnxwYXNzfHByZWxvYWR8cHVwcGV0fHB1cHBldHN5bmN8cmVtb3RlfHJlbW90ZXN5bmN8cmV0dXJufHNlbGZ8c2V0Z2V0fHNpZ25hbHxzdGF0aWN8dG9vbHx2YXJ8d2hpbGV8eWllbGQpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1bIFxcdF0qXFwoKS9pLFxuXHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcYjBiWzAxX10rXFxifFxcYjB4W1xcZGEtZkEtRl9dK1xcYnwoPzpcXGJcXGRbXFxkX10qKD86XFwuW1xcZF9dKik/fFxcQlxcLltcXGRfXSspKD86ZVsrLV0/W1xcZF9dKyk/XFxiLyxcblx0XHQvXFxiKD86SU5GfE5BTnxQSXxUQVUpXFxiL1xuXHRdLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aX1xcZF0qXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvLT58Oj18JiZ8XFx8XFx8fDw8fD4+fFstKyovJSZ8ITw+PV09P3xbfl5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1suOiw7KClbXFxde31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdlZGNvbSA9IHtcblx0J2xpbmUtdmFsdWUnOiB7XG5cdFx0Ly8gUHJlY2VkZWQgYnkgbGV2ZWwsIG9wdGlvbmFsIHBvaW50ZXIsIGFuZCB0YWdcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFxkKyArKD86QFxcd1tcXHchXCIkJSYnKCkqKyxcXC0uLzo7PD0+P1tcXFxcXFxdXmB7fH1+XFx4ODAtXFx4ZmUgI10qQCArKT9cXHcrICkuKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncG9pbnRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogL15AXFx3W1xcdyFcIiQlJicoKSorLFxcLS4vOjs8PT4/W1xcXFxcXF1eYHt8fX5cXHg4MC1cXHhmZSAjXSpAJC8sXG5cdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQncmVjb3JkJzoge1xuXHRcdC8vIFByZWNlZGVkIGJ5IGxldmVsIGFuZCBvcHRpb25hbCBwb2ludGVyXG5cdFx0cGF0dGVybjogLyheW1xcdCBdKlxcZCsgKyg/OkBcXHdbXFx3IVwiJCUmJygpKissXFwtLi86Ozw9Pj9bXFxcXFxcXV5ge3x9flxceDgwLVxceGZlICNdKkAgKyk/KVxcdysvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndGFnJ1xuXHR9LFxuXHQnbGV2ZWwnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKilcXGQrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J3BvaW50ZXInOiB7XG5cdFx0cGF0dGVybjogL0BcXHdbXFx3IVwiJCUmJygpKissXFwtLi86Ozw9Pj9bXFxcXFxcXV5ge3x9flxceDgwLVxceGZlICNdKkAvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nZXR0ZXh0ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvIyAuKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3RyYW5zbGF0b3ItY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jXFwuLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdleHRyYWN0ZWQtY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jOi4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncmVmZXJlbmNlLWNvbW1lbnQnXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvIywuKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ZsYWctY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jXFx8LiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcmV2aW91c2x5LXVudHJhbnNsYXRlZC1jb21tZW50J1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXm1zZyg/OmN0eHR8aWR8aWRfcGx1cmFsfHN0cilcXGIvbSxcblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBvID0gUHJpc20ubGFuZ3VhZ2VzLmdldHRleHQ7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgdGFibGVSb3cgPSAvKD86XFxyP1xcbnxcXHIpWyBcXHRdKlxcfC4rXFx8KD86KD8hXFx8KS4pKi8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5naGVya2luID0ge1xuXHRcdCdweXN0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXCJcIlwifCcnJylbXFxzXFxTXSs/XFwxLyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3RhZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopQFxcUyovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmZWF0dXJlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVsgXFx0XSopKD86QWJpbGl0eXxBaG95IG1hdGV5IXxBcndlZGR8QXNwZWt0fEJlc2lnaGVpZCBCZWhvZWZ0ZXxCdXNpbmVzcyBOZWVkfENhcmFjdGVyaXN0aWNhfENhcmFjdGVyXHUwMEVEc3RpY2F8RWdlbnNrYWJ8RWdlbnNrYXB8RWlnaW5sZWlraXxGZWF0dXJlfEZcdTAxMkJcdTAxMERhfEZpdHVyfEZvbmN0aW9ubmFsaXRcdTAwRTl8Rm9ua3N5b25hbGl0ZXxGdW5jaW9uYWxpZGFkZXxGdW5jaW9uYWxpdGF0fEZ1bmN0aW9uYWxpdGF0ZXxGdW5jXHUwMTYzaW9uYWxpdGF0ZXxGdW5jXHUwMjFCaW9uYWxpdGF0ZXxGdW5jdGlvbmFsaXRlaXR8RnVuZ3NpfEZ1bmtjaWF8RnVua2NpamF8RnVua2Npb25hbGl0XHUwMTAxdGV8RnVua2Npb25hbG5vc3R8RnVua2NqYXxGdW5rc2llfEZ1bmt0aW9uYWxpdFx1MDBFNHR8RnVua3Rpb25hbGl0XHUwMEU5aXR8RnVuemlvbmFsaXRcdTAwRTB8SHdhZXR8SHdcdTAwRTZ0fEplbGxlbXpcdTAxNTF8S2FyYWt0ZXJpc3Rpa3xMYXN0bm9zdHxNYWt8TW9ndWNub3N0fGxhSHxNb2d1XHUwMTA3bm9zdHxNb3pub3N0aXxNb1x1MDE3RW5vc3RpfE9IIEhBSXxPbWFkdXN8T21pbmFpc3V1c3xPc29iaW5hfFx1MDBENnplbGxpa3xQb3RyemViYSBiaXpuZXNvd2F8cGVyYm9naHxwb1Fib2doIG1hbGphJ3xQb1x1MDE3RWFkYXZla3xQb1x1MDE3RWlhZGF2a2F8UHJldHR5IG11Y2h8UWFwfFF1J21lSCAndXR8U2F2eWJcdTAxMTd8VFx1MDBFRG5oIG5cdTAxMDNuZ3xUcmFqdG98VmVybW9cdTAwRUJ8Vmxhc3Rub3NcdTAxNjV8V1x1MDE0MmFcdTAxNUJjaXdvXHUwMTVCXHUwMTA3fFpuYVx1MDEwRGlsbm9zdHxcdTAzOTRcdTAzQzVcdTAzQkRcdTAzQjFcdTAzQzRcdTAzQ0NcdTAzQzRcdTAzQjdcdTAzQzRcdTAzQjF8XHUwMzlCXHUwM0I1XHUwM0I5XHUwM0M0XHUwM0JGXHUwM0M1XHUwM0MxXHUwM0IzXHUwM0FGXHUwM0IxfFx1MDQxQ1x1MDQzRVx1MDQzM1x1MDQ0M1x1MDQ1Qlx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MnxcdTA0MUNcdTA0RTlcdTA0M0NcdTA0M0FcdTA0MzhcdTA0M0RcdTA0M0JcdTA0MzVcdTA0M0F8XHUwNDFFXHUwNDQxXHUwNDNFXHUwNDMxXHUwNDM4XHUwNDNEXHUwNDMwfFx1MDQyMVx1MDQzMlx1MDQzRVx1MDQzOVx1MDQ0MVx1MDQ0Mlx1MDQzMlx1MDQzRXxcdTA0QUVcdTA0MzdcdTA0MzVcdTA0M0RcdTA0NDdcdTA0RDlcdTA0M0JcdTA0MzVcdTA0M0FcdTA0M0JcdTA0MzVcdTA0M0JcdTA0MzVcdTA0M0F8XHUwNDI0XHUwNDQzXHUwNDNEXHUwNDNBXHUwNDQ2XHUwNDM4XHUwNDNFXHUwNDNEXHUwNDMwXHUwNDNCfFx1MDQyNFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQzRVx1MDQzRFx1MDQzMFx1MDQzQlx1MDQzRFx1MDQzRVx1MDQ0MVx1MDQ0MnxcdTA0MjRcdTA0NDNcdTA0M0RcdTA0M0FcdTA0NDZcdTA0MzhcdTA0NEZ8XHUwNDI0XHUwNDQzXHUwNDNEXHUwNDNBXHUwNDQ2XHUwNDU2XHUwNDNFXHUwNDNEXHUwNDMwXHUwNDNCfFx1MDVFQVx1MDVEQlx1MDVENVx1MDVFMFx1MDVENHxcdTA2MkVcdTA2MjdcdTA2MzVcdTA2NEFcdTA2Mjl8XHUwNjJFXHUwNjM1XHUwNjQ4XHUwNjM1XHUwNkNDXHUwNjJBfFx1MDYzNVx1MDY0NFx1MDYyN1x1MDYyRFx1MDZDQ1x1MDYyQXxcdTA2QTlcdTA2MjdcdTA2MzFcdTA2NDhcdTA2MjhcdTA2MjdcdTA2MzEgXHUwNkE5XHUwNkNDIFx1MDYzNlx1MDYzMVx1MDY0OFx1MDYzMVx1MDYyQXxcdTA2NDhcdTA2NTBcdTA2Q0NcdTA2OThcdTA2QUZcdTA2Q0N8XHUwOTMwXHUwOTQyXHUwOTJBIFx1MDkzMlx1MDk0N1x1MDkxNnxcdTBBMTZcdTBBM0VcdTBBMzhcdTBBNDBcdTBBMDVcdTBBMjR8XHUwQTI4XHUwQTE1XHUwQTM2IFx1MEEyOFx1MEE0MVx1MEEzOVx1MEEzRVx1MEEzMHxcdTBBMkVcdTBBNDFcdTBBMzlcdTBBM0VcdTBBMDJcdTBBMjZcdTBBMzBcdTBBM0V8XHUwQzE3XHUwQzQxXHUwQzIzXHUwQzJFXHUwQzQxfFx1MENCOVx1MENDNlx1MEM5QVx1MENDRFx1MEM5QVx1MENCM3xcdTBFMDRcdTBFMjdcdTBFMzJcdTBFMjFcdTBFMTVcdTBFNDlcdTBFMkRcdTBFMDdcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTdcdTBFMzJcdTBFMDdcdTBFMThcdTBFMzhcdTBFMjNcdTBFMDFcdTBFMzRcdTBFMDh8XHUwRTA0XHUwRTI3XHUwRTMyXHUwRTIxXHUwRTJBXHUwRTMyXHUwRTIxXHUwRTMyXHUwRTIzXHUwRTE2fFx1MEU0Mlx1MEUwNFx1MEUyM1x1MEUwN1x1MEUyQlx1MEUyNVx1MEUzMVx1MEUwMXxcdUFFMzBcdUIyQTV8XHUzMEQ1XHUzMEEzXHUzMEZDXHUzMEMxXHUzMEUzfFx1NTI5Rlx1ODBGRHxcdTZBNUZcdTgwRkQpOig/OlteOlxcclxcbl0rKD86XFxyP1xcbnxcXHJ8JCkpKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbXBvcnRhbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg6KVteXFxyXFxuXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiAvW146XFxyXFxuXSs6L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3NjZW5hcmlvJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzpBYnN0cmFjdCBTY2VuYXJpb3xBYnN0cmFrdCBTY2VuYXJpb3xBY2h0ZXJncm9uZHxBZXJ8XHUwMEM2cnxBZ3Rlcmdyb25kfEFsbCB5J2FsbHxBbnRlY2VkZW50ZXN8QW50ZWNlZGVudHN8QXRidXJcdTAwRjBhclx1MDBFMXN8QXRidXJcdTAwRjBhclx1MDBFMXNpcnxBd3d3LCBsb29rIG1hdGV8QjR8QmFja2dyb3VuZHxCYWdncnVuZHxCYWtncnVuZHxCYWtncnVubnxCYWtncnVubnVyfEJlaXNwaWVsZXxCZWlzcGlsbGVyfEJcdTFFRDFpIGNcdTFFQTNuaHxDZWZuZGlyfENlbmFyaW98Q2VuXHUwMEUxcmlvfENlbmFyaW8gZGUgRnVuZG98Q2VuXHUwMEUxcmlvIGRlIEZ1bmRvfENlbmFyaW9zfENlblx1MDBFMXJpb3N8Q29udGVzdG98Q29udGV4dHxDb250ZXh0ZXxDb250ZXh0b3xDb250b3xDb250b2h8Q29udG9uZXxEXHUwMEU2bWl8RGFzYXJ8RGVhZCBtZW4gdGVsbCBubyB0YWxlc3xEZWxpbmVhY2FvIGRvIENlbmFyaW98RGVsaW5lYVx1MDBFN1x1MDBFM28gZG8gQ2VuXHUwMEUxcmlvfERpcyBpcyB3aGF0IHdlbnQgZG93bnxEXHUxRUVGIGxpXHUxRUM3dXxEeWFncmFtIFNlbmFyeW98RHlhZ3JhbSBzZW5hcnlvfEVnemFucHxFamVtcGxvc3xFa3NlbXBsZXJ8RWt6ZW1wbG9qfEVuZ2hyZWlmZnRpYXV8RXNib3pvIGRvIGVzY2VuYXJpb3xFc2NlbmFyaXxFc2NlbmFyaW98RXNlbXBpfEVzcXVlbWEgZGUgbCdlc2NlbmFyaXxFc3F1ZW1hIGRlbCBlc2NlbmFyaW98RXNxdWVtYSBkbyBDZW5hcmlvfEVzcXVlbWEgZG8gQ2VuXHUwMEUxcmlvfEVYQU1QTFp8RXhhbXBsZXN8RXhlbXBlbHxFeGVtcGxlfEV4ZW1wbGVzfEV4ZW1wbG9zfEZpcnN0IG9mZnxGb25vfEZvcmdhdFx1MDBGM2tcdTAwRjZueXZ8Rm9yZ2F0XHUwMEYza1x1MDBGNm55diB2XHUwMEUxemxhdHxGdW5kb3xHZVx1MDBFN21pXHUwMTVGfEdydW5kbGFnZXxIYW5uZXJncm9uZHxnaGFudG9IfEhcdTAwRTF0dFx1MDBFOXJ8SGVhdmUgdG98SXN0b3Jpa3xKdWh0dW1pZHxLZWFkYWFufEtodW5nIGtcdTFFQ0JjaCBiXHUxRUEzbnxLaHVuZyB0XHUwMEVDbmggaHVcdTFFRDFuZ3xLXHUxRUNCY2ggYlx1MUVBM258S29uY2VwdHxLb25zZXAgc2tlbmFyaW98S29udFx1MDBFOGtzfEtvbnRla3N0fEtvbnRla3N0YXN8S29udGVrc3RzfEtvbnRleHR8S29udHVybyBkZSBsYSBzY2VuYXJvfExhdGFyIEJlbGFrYW5nfGx1dCBjaG92bmF0bGh8bHV0fGx1dG1leXxMXHUwMEZEc2luZyBBdGJ1clx1MDBGMGFyXHUwMEUxc2FyfExcdTAwRkRzaW5nIERcdTAwRTZtYXxNSVNIVU4gU1JTTFl8TUlTSFVOfE1lbmdnYXJpc2thbiBTZW5hcmlvfG1vJ3xOXHUwMEUxXHUwMTBEcnQgU2Nlblx1MDBFMXJhfE5cdTAwRTFcdTAxMERydCBTY1x1MDBFOW5cdTAwRTFcdTAxNTllfE5cdTAwRTFcdTAxMERydCBTY2VuXHUwMEUxcnV8T3JpcyBzY2VuYXJpamF8XHUwMEQ2cm5la2xlcnxPc25vdmF8T3Nub3ZhIFNjZW5cdTAwRTFyYXxPc25vdmEgc2NcdTAwRTluXHUwMEUxXHUwMTU5ZXxPc251dGVrfE96YWRqZXxQYXJhdWdzfFBhdnl6ZFx1MDE3RWlhaXxQXHUwMEU5bGRcdTAwRTFrfFBpZW1cdTAxMTNyaXxQbGFuIGR1IHNjXHUwMEU5bmFyaW98UGxhbiBkdSBTY1x1MDBFOW5hcmlvfFBsYW4gU2VuYXJ5b3xQbGFuIHNlbmFyeW98UGxhbmcgdnVtIFN6ZW5hcmlvfFBvemFkXHUwMEVEfFBvemFkaWV8UG96YWRpbmF8UHJcdTAwRURrbGFkeXxQXHUwMTU5XHUwMEVEa2xhZHl8UHJpbWVyfFByaW1lcml8UHJpbWplcml8UHJ6eWtcdTAxNDJhZHl8UmFhbXN0c2VuYWFyaXVtfFJlY2tvbiBpdCdzIGxpa2V8UmVyZWZvbnN8U2Nlblx1MDBFMXJ8U2NcdTAwRTluXHUwMEUxXHUwMTU5fFNjZW5hcmllfFNjZW5hcmlqfFNjZW5hcmlqYWl8U2NlbmFyaWphdXMgXHUwMTYxYWJsb25hc3xTY2VuYXJpaml8U2Nlblx1MDEwMXJpanN8U2Nlblx1MDEwMXJpanMgcFx1MDExM2MgcGFyYXVnYXxTY2VuYXJpanVzfFNjZW5hcmlvfFNjXHUwMEU5bmFyaW98U2NlbmFyaW8gQW1saW5lbGxvbHxTY2VuYXJpbyBPdXRsaW5lfFNjZW5hcmlvIFRlbXBsYXRlfFNjZW5hcmlvbWFsfFNjZW5hcmlvbWFsbHxTY2VuYXJpb3N8U2NlbmFyaXV8U2NlbmFyaXVzenxTY2VuYXJvfFNjaGVtYSBkZWxsbyBzY2VuYXJpb3xTZSBcdTAwRjBlfFNlIHRoZXxTZSBcdTAwRkVlfFNlbmFyaW98U2VuYXJ5byBEZXNrcmlwc3lvbnxTZW5hcnlvIGRlc2tyaXBzeW9ufFNlbmFyeW98U2VuYXJ5byB0YXNsYVx1MDExRlx1MDEzMXxTaGl2ZXIgbWUgdGltYmVyc3xTaXR1XHUwMTAxY2lqYXxTaXR1YWl8U2l0dWFzaWUgVWl0ZWVuc2V0dGluZ3xTaXR1YXNpZXxTa2VuYXJpbyBrb25zZXB8U2tlbmFyaW98U2tpY2F8U3RydWN0dXJhIHNjZW5hcml1fFN0cnVjdHVyXHUwMTAzIHNjZW5hcml1fFN0cnVrdHVyYSBzY2VuYXJpamF8U3RzZW5hYXJpdW18U3dhIGh3YWVyIHN3YXxTd2F8U3dhIGh3XHUwMEU2ciBzd2F8U3phYmxvbiBzY2VuYXJpdXN6YXxTemVuYXJpb3xTemVuYXJpb2dydW5kcmlzc3xUYXBhdWtzZXR8VGFwYXVzfFRhcGF1c2FpaGlvfFRhdXN0fFRhdXN0YXxUZW1wbGF0ZSBLZWFkYWFufFRlbXBsYXRlIFNlbmFyaW98VGVtcGxhdGUgU2l0dWFpfFRoZSB0aGluZyBvZiBpdCBpc3xUXHUwMEVDbmggaHVcdTFFRDFuZ3xWYXJpYW50YWl8Vm9vcmJlZWxkZXxWb29yYmVlbGRlbnxXaGFycmltZWFuIGlzfFlvLWhvLWhvfFlvdSdsbCB3YW5uYXxaYVx1MDE0Mm9cdTAxN0NlbmlhfFx1MDNBMFx1MDNCMVx1MDNDMVx1MDNCMVx1MDNCNFx1MDNCNVx1MDNBRlx1MDNCM1x1MDNCQ1x1MDNCMVx1MDNDNFx1MDNCMXxcdTAzQTBcdTAzQjVcdTAzQzFcdTAzQjlcdTAzQjNcdTAzQzFcdTAzQjFcdTAzQzZcdTAzQUUgXHUwM0EzXHUwM0I1XHUwM0JEXHUwM0IxXHUwM0MxXHUwM0FGXHUwM0JGXHUwM0M1fFx1MDNBM1x1MDNCNVx1MDNCRFx1MDNBQ1x1MDNDMVx1MDNCOVx1MDNCMXxcdTAzQTNcdTAzQjVcdTAzQkRcdTAzQUNcdTAzQzFcdTAzQjlcdTAzQkZ8XHUwM0E1XHUwM0MwXHUwM0NDXHUwM0IyXHUwM0IxXHUwM0I4XHUwM0MxXHUwM0JGfFx1MDQxQVx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQ0OHxcdTA0MUFcdTA0M0VcdTA0M0RcdTA0NDJcdTA0MzVcdTA0M0FcdTA0NDFcdTA0NDJ8XHUwNDFBXHUwNDNFXHUwNDNEXHUwNDQ2XHUwNDM1XHUwNDNGXHUwNDQyfFx1MDQxQ1x1MDQzOFx1MDQ0MVx1MDQzMFx1MDQzQlx1MDQzQlx1MDQzMFx1MDQ0MHxcdTA0MUNcdTA0MzhcdTA0NDFcdTA0M0VcdTA0M0JcdTA0M0JcdTA0MzBcdTA0NDB8XHUwNDFFXHUwNDQxXHUwNDNEXHUwNDNFXHUwNDMyXHUwNDMwfFx1MDQxRlx1MDQzNVx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0M1x1MDQzQ1x1MDQzRVx1MDQzMlx1MDQzMHxcdTA0MUZcdTA0M0VcdTA0MzdcdTA0MzBcdTA0MzRcdTA0MzhcdTA0M0RcdTA0MzB8XHUwNDFGXHUwNDQwXHUwNDM1XHUwNDM0XHUwNDM4XHUwNDQxXHUwNDQyXHUwNDNFXHUwNDQwXHUwNDM4XHUwNDRGfFx1MDQxRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQ0Qlx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQ0MFx1MDQzOFx1MDQ0RnxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0FcdTA0M0JcdTA0MzBcdTA0MzRcdTA0Mzh8XHUwNDFGXHUwNDQwXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQwfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzQ1x1MDQzNVx1MDQ0MFx1MDQzOHxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0NDBcdTA0NEJ8XHUwNDIwXHUwNDMwXHUwNDNDXHUwNDNBXHUwNDMwIFx1MDQzRFx1MDQzMCBcdTA0NDFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0Mzl8XHUwNDIxXHUwNDNBXHUwNDM4XHUwNDQ2XHUwNDMwfFx1MDQyMVx1MDQ0Mlx1MDQ0MFx1MDQ0M1x1MDQzQVx1MDQ0Mlx1MDQ0M1x1MDQ0MFx1MDQzMCBcdTA0NDFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0NThcdTA0MzB8XHUwNDIxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQyXHUwNDQzXHUwNDQwXHUwNDMwIFx1MDQ0MVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQ0RnxcdTA0MjFcdTA0NDJcdTA0NDBcdTA0NDNcdTA0M0FcdTA0NDJcdTA0NDNcdTA0NDBcdTA0MzAgXHUwNDQxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDU2XHUwNDRFfFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzOXxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0MzkgXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQyXHUwNDQzXHUwNDQwXHUwNDMwXHUwNDQxXHUwNDM4fFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzOVx1MDQzRFx1MDQ0Qlx1MDRBMyBcdTA0NDJcdTA0RTlcdTA0MzdcdTA0MzVcdTA0M0JcdTA0MzVcdTA0NDhcdTA0MzV8XHUwNDIxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDU4XHUwNDM4fFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQzRXxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0NTZcdTA0Mzl8XHUwNDIyXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDQ1fFx1MDRBRVx1MDQ0MFx1MDQzRFx1MDREOVx1MDQzQVx1MDQzQlx1MDREOVx1MDQ0MHxcdTA1RDNcdTA1RDVcdTA1RDJcdTA1REVcdTA1RDBcdTA1RDVcdTA1RUF8XHUwNUU4XHUwNUU3XHUwNUUyfFx1MDVFQVx1MDVEMVx1MDVFMFx1MDVEOVx1MDVFQSBcdTA1RUFcdTA1RThcdTA1RDdcdTA1RDlcdTA1RTl8XHUwNUVBXHUwNUU4XHUwNUQ3XHUwNUQ5XHUwNUU5fFx1MDYyN1x1MDY0NFx1MDYyRVx1MDY0NFx1MDY0MVx1MDY0QVx1MDYyOXxcdTA2MjdcdTA2NDRcdTA2QUZcdTA2NDhcdTA2Q0MgXHUwNjMzXHUwNjQ2XHUwNjI3XHUwNjMxXHUwNkNDXHUwNjQ4fFx1MDYyN1x1MDY0NVx1MDYyQlx1MDY0NFx1MDYyOXxcdTA2N0VcdTA2MzMgXHUwNjQ1XHUwNjQ2XHUwNjM4XHUwNjMxfFx1MDYzMlx1MDY0NVx1MDZDQ1x1MDY0Nlx1MDY0N3xcdTA2MzNcdTA2NDZcdTA2MjdcdTA2MzFcdTA2Q0NcdTA2NDh8XHUwNjMzXHUwNjRBXHUwNjQ2XHUwNjI3XHUwNjMxXHUwNjRBXHUwNjQ4fFx1MDYzM1x1MDY0QVx1MDY0Nlx1MDYyN1x1MDYzMVx1MDY0QVx1MDY0OCBcdTA2NDVcdTA2MkVcdTA2MzdcdTA2Mzd8XHUwNjQ1XHUwNjJCXHUwNjI3XHUwNjQ0XHUwNkNDXHUwNkJBfFx1MDY0NVx1MDY0Nlx1MDYzOFx1MDYzMSBcdTA2NDZcdTA2MjdcdTA2NDVcdTA2RDIgXHUwNkE5XHUwNjI3IFx1MDYyRVx1MDYyN1x1MDZBOVx1MDZDMXxcdTA2NDVcdTA2NDZcdTA2MzhcdTA2MzFcdTA2NDZcdTA2MjdcdTA2NDVcdTA2QzF8XHUwNjQ2XHUwNjQ1XHUwNjQ4XHUwNjQ2XHUwNjQ3IFx1MDY0N1x1MDYyN3xcdTA5MDlcdTA5MjZcdTA5M0VcdTA5MzlcdTA5MzBcdTA5MjN8XHUwOTJBXHUwOTMwXHUwOTNGXHUwOTI2XHUwOTQzXHUwOTM2XHUwOTREXHUwOTJGfFx1MDkyQVx1MDkzMFx1MDkzRlx1MDkyNlx1MDk0M1x1MDkzNlx1MDk0RFx1MDkyRiBcdTA5MzBcdTA5NDJcdTA5MkFcdTA5MzBcdTA5NDdcdTA5MTZcdTA5M0V8XHUwOTJBXHUwOTQzXHUwOTM3XHUwOTREXHUwOTIwXHUwOTJEXHUwOTQyXHUwOTJFXHUwOTNGfFx1MEEwOVx1MEEyNlx1MEEzRVx1MEEzOVx1MEEzMFx1MEEyOFx1MEEzRVx1MEEwMnxcdTBBMkFcdTBBMUZcdTBBMTVcdTBBMjVcdTBBM0V8XHUwQTJBXHUwQTFGXHUwQTE1XHUwQTI1XHUwQTNFIFx1MEEyMlx1MEEzRVx1MEEwMlx1MEExQVx1MEEzRXxcdTBBMkFcdTBBMUZcdTBBMTVcdTBBMjVcdTBBM0UgXHUwQTMwXHUwQTQyXHUwQTJBIFx1MEEzMFx1MEE0N1x1MEExNlx1MEEzRXxcdTBBMkFcdTBBM0ZcdTBBMUJcdTBBNEJcdTBBMTVcdTBBNUN8XHUwQzA5XHUwQzI2XHUwQzNFXHUwQzM5XHUwQzMwXHUwQzIzXHUwQzMyXHUwQzQxfFx1MEMxNVx1MEMyNVx1MEMyOFx1MEMwMnxcdTBDMjhcdTBDNDdcdTBDMkFcdTBDMjVcdTBDNERcdTBDMkZcdTBDMDJ8XHUwQzM4XHUwQzI4XHUwQzREXHUwQzI4XHUwQzNGXHUwQzM1XHUwQzQ3XHUwQzM2XHUwQzAyfFx1MEM4OVx1MENBNlx1MENCRVx1MENCOVx1MENCMFx1MENBM1x1MENDNlx1MEM5N1x1MENCM1x1MENDMXxcdTBDOTVcdTBDQTVcdTBDQkVcdTBDQjhcdTBDQkVcdTBDQjBcdTBDQkVcdTBDODJcdTBDQjZ8XHUwQ0I1XHUwQ0JGXHUwQ0I1XHUwQ0IwXHUwQ0EzXHUwQ0M2fFx1MENCOVx1MENCRlx1MENBOFx1MENDRFx1MENBOFx1MENDNlx1MENCMlx1MENDNnxcdTBFNDJcdTBFMDRcdTBFMjNcdTBFMDdcdTBFMkFcdTBFMjNcdTBFNDlcdTBFMzJcdTBFMDdcdTBFMDJcdTBFMkRcdTBFMDdcdTBFNDBcdTBFMkJcdTBFMTVcdTBFMzhcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTNcdTBFNEN8XHUwRTBBXHUwRTM4XHUwRTE0XHUwRTAyXHUwRTJEXHUwRTA3XHUwRTE1XHUwRTMxXHUwRTI3XHUwRTJEXHUwRTIyXHUwRTQ4XHUwRTMyXHUwRTA3fFx1MEUwQVx1MEUzOFx1MEUxNFx1MEUwMlx1MEUyRFx1MEUwN1x1MEU0MFx1MEUyQlx1MEUxNVx1MEUzOFx1MEUwMVx1MEUzMlx1MEUyM1x1MEUxM1x1MEU0Q3xcdTBFNDFcdTBFMTlcdTBFMjdcdTBFMDRcdTBFMzRcdTBFMTR8XHUwRTJBXHUwRTIzXHUwRTM4XHUwRTFCXHUwRTQwXHUwRTJCXHUwRTE1XHUwRTM4XHUwRTAxXHUwRTMyXHUwRTIzXHUwRTEzXHUwRTRDfFx1MEU0MFx1MEUyQlx1MEUxNVx1MEUzOFx1MEUwMVx1MEUzMlx1MEUyM1x1MEUxM1x1MEU0Q3xcdUJDMzBcdUFDQkR8XHVDMkRDXHVCMDk4XHVCOUFDXHVDNjI0fFx1QzJEQ1x1QjA5OFx1QjlBQ1x1QzYyNCBcdUFDMUNcdUM2OTR8XHVDNjA4fFx1MzBCNVx1MzBGM1x1MzBEN1x1MzBFQnxcdTMwQjdcdTMwQ0FcdTMwRUFcdTMwQUF8XHUzMEI3XHUzMENBXHUzMEVBXHUzMEFBXHUzMEEyXHUzMEE2XHUzMEM4XHUzMEU5XHUzMEE0XHUzMEYzfFx1MzBCN1x1MzBDQVx1MzBFQVx1MzBBQVx1MzBDNlx1MzBGM1x1MzBEN1x1MzBFQ3xcdTMwQjdcdTMwQ0FcdTMwRUFcdTMwQUFcdTMwQzZcdTMwRjNcdTMwRDdcdTMwRUNcdTMwRkNcdTMwQzh8XHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDfFx1NEY4QnxcdTRGOEJcdTVCNTB8XHU1MjY3XHU2NzJDfFx1NTI2N1x1NjcyQ1x1NTkyN1x1N0VCMnxcdTUyODdcdTY3MkN8XHU1Mjg3XHU2NzJDXHU1OTI3XHU3REIxfFx1NTczQVx1NjY2RnxcdTU3M0FcdTY2NkZcdTU5MjdcdTdFQjJ8XHU1ODM0XHU2NjZGfFx1NTgzNFx1NjY2Rlx1NTkyN1x1N0RCMXxcdTgwQ0NcdTY2NkYpOlteOlxcclxcbl0qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbXBvcnRhbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg6KVteXFxyXFxuXSovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiAvW146XFxyXFxuXSs6L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RhYmxlLWJvZHknOiB7XG5cdFx0XHQvLyBMb29rLWJlaGluZCBpcyB1c2VkIHRvIHNraXAgdGhlIHRhYmxlIGhlYWQsIHdoaWNoIGhhcyB0aGUgc2FtZSBmb3JtYXQgYXMgYW55IHRhYmxlIHJvd1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoJyArIHRhYmxlUm93ICsgJykoPzonICsgdGFibGVSb3cgKyAnKSsnKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J291dGxpbmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLzxbXj5dKz4vLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd0ZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlteXFxzfF1bXnxdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndGFibGUtaGVhZCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZVJvdyksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXHMqW15cXHN8XVtefF0qLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2F0cnVsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSspKD86J2F8J2FjaHwnZWp8N3xhfEEgdGFrXHUwMEU5fEEgdGFrdGllXHUwMTdFfEEgdGllXHUwMTdFfEEgelx1MDBFMXJvdmVcdTAxNDh8QWJlcnxBY3xBZG90dHxBa2tvcnxBa3xBbGVzaG9yZXN8QWxlfEFsaXxBbGxvcmF8QWxvcnN8QWxzfEFtYXxBbWVubnlpYmVufEFtaWtvcnxBbXBha3xhbnxBTnxBbmFuZ2luZ3xBbmQgeSdhbGx8QW5kfEFuZ2Vub21tZW58QW5yaGVnZWRpZyBhfEFufEFwYWJpbGF8QXRcdTAwRThzfEF0ZXNhfEF0dW5jaXxBdmFzdCF8QXllfEF8YXdlcnxCYWdpfEJhbmp1cnxCZXR8QmlcdTFFQkZ0fEJsaW1leSF8QnVofEJ1dCBhdCB0aGUgZW5kIG9mIHRoZSBkYXkgSSByZWNrb258QnV0IHknYWxsfEJ1dHxCVVR8Q2FsfENcdTAwRTJuZHxDYW5kfENhbmRvfENlfEN1YW5kb3xcdTAxMENlfFx1MDBEMGEgXHUwMEYwZXxcdTAwRDBhfERhZGFzfERhZGF8RGFkb3N8RGFkb3xEYUggZ2h1JyBiZWpsdSd8ZGFubnxEYW5ufERhbm98RGFufERhcnxEYXQgZmlpbmR8RGF0YXxEYXRlIGZpaW5kfERhdGV8RGF0aSBmaWluZHxEYXRpfERhXHUwMTYzaSBmaWluZHxEYVx1MDIxQmkgZmlpbmR8REVOfERhdG98RGV8RGVuIHlvdXNlIGdvdHRhfERlbmdhbnxEaWJlcml8RGl5ZWxpbSBraXxEb25hZGF8RG9uYXR8RG9uaXRhXHUwMTM1b3xEb3xEdW58RHVvdGF8XHUwMEQwdXJofEVlbGRhZGVzfEVmfEVcdTAxMUZlciBraXxFbnRhb3xFbnRcdTAwRTNvfEVudFx1MDBGM258RXxFbnxFbnRvbmNlc3xFcGl8XHUwMEM5c3xFdGFudCBkb25uXHUwMEU5ZXxFdGFudCBkb25uXHUwMEU5fEV0fFx1MDBDOXRhbnQgZG9ublx1MDBFOWVzfFx1MDBDOXRhbnQgZG9ublx1MDBFOWV8XHUwMEM5dGFudCBkb25uXHUwMEU5fEV0YW50IGRvbm5cdTAwRTllc3xFdGFudCBkb25uXHUwMEU5c3xcdTAwQzl0YW50IGRvbm5cdTAwRTlzfEZha2F0fEdhbmd3YXkhfEdkeXxHZWdlYmVuIHNlaWVufEdlZ2ViZW4gc2VpfEdlZ2V2ZW58R2VnZXdlfGdodScgbm9ibHUnfEdpdHR8R2l2ZW4geSdhbGx8R2l2ZW58R2l2ZXR8R2l2dW58SGF8Q2hvfEkgQ0FOIEhBWnxJbnxJcnxJdCdzIGp1c3QgdW5iZWxpZXZhYmxlfEl8SmF8SmVcdTAxNUJsaXxKZVx1MDE3Q2VsaXxLYWR8S2FkYXxLYWRhcnxLYWl8S2FqfEtkeVx1MDE3RXxLZVx1MDEwRnxLZW11ZGlhbnxLZXRpa2F8S2hpfEtpZWR5fEtvfEt1aWR8S3VpfEt1bnxMYW58bGF0bGh8TGUgc2EgYXxMZXQgZ28gYW5kIGhhdWx8TGV8TFx1MDBFOCBzYSBhfExcdTAwRTh8TG9nb3xMb3JzcXUnPHxMb3JzcXVlfG1cdTAwRTR8TWFhcnxNYWlzfE1halx1MDEwNWN8TWF8TWFqZHxNYWthfE1hbmF3YXxNYXN8TWVufE1lbmF3YXxNdXR0YXxOYWxpa2F8TmFsaWthbmluZ3xOYW5naW5nfE5cdTAwRTVyfE5cdTAwRTRyfE5hdG98TmhcdTAxQjBuZ3xOaWlufE5qdWt8TyB6YW1hbnxPY2h8T2d8T2xldGV0YWFufE9uZHxPbmRhfE9yYXp8UGFrfFBlcm98UGVyXHUwMEYyfFBvZGFub3xQb2tpYVx1MDEzRXxQb2t1ZHxQb3RlbXxQb3RvbXxQcml2emV0b3xQcnlkfFF1YW58UXVhbmR8UXVhbmRvfHFhU0RJJ3xTXHUwMEU1fFNlZHxTZXxTaWlzfFNpcG96ZSBrZXxTaXBvemUgS2V8U2lwb3plfFNpfFx1MDE1RWl8XHUwMjE4aXxTb2l0fFN0ZWx8VGFkYXxUYWR8VGFrcmF0fFRha3xUYXBpfFRlcnxUZXRhcGl8VGhhIHRoZXxUaGF8VGhlbiB5J2FsbHxUaGVufFRoXHUwMEVDfFRodXJofFRvZGF8VG9vIHJpZ2h0fFVufFVuZHx1Z2Vob2xsfFZcdTAwRTB8dmFqfFZlbmRhcnxWZXx3YW5ufFdhbm5lZXJ8V0VOfFdlbm58V2hlbiB5J2FsbHxXaGVufFd0ZWR5fFd1bnxZJ2tub3d8WWVhaCBuYWh8WW5hfFlvdXNlIGtub3cgbGlrZSB3aGVufFlvdXNlIGtub3cgd2hlbiB5b3VzZSBnb3R8WXxaYSBwcmVkcG9rbGFkdXxaYSBwXHUwMTU5ZWRwb2tsYWR1fFphZGFufFphZGFuaXxaYWRhbm98WmFkYXRlfFphZGF0b3xaYWtcdTAxNDJhZGFqXHUwMTA1Y3xaYXJhZGl8WmF0YXRpfFx1MDBERWEgXHUwMEZFZXxcdTAwREVhfFx1MDBERVx1MDBFMXxcdTAwREVlZ2FyfFx1MDBERXVyaHxcdTAzOTFcdTAzQkJcdTAzQkJcdTAzQUN8XHUwMzk0XHUwM0I1XHUwM0I0XHUwM0JGXHUwM0JDXHUwM0FEXHUwM0JEXHUwM0JGXHUwM0M1fFx1MDM5QVx1MDNCMVx1MDNCOXxcdTAzOENcdTAzQzRcdTAzQjFcdTAzQkR8XHUwM0E0XHUwM0NDXHUwM0M0XHUwM0I1fFx1MDQxMCBcdTA0NDJcdTA0MzBcdTA0M0FcdTA0M0VcdTA0MzZ8XHUwNDEwXHUwNDMzXHUwNDMwXHUwNDQwfFx1MDQxMFx1MDQzQlx1MDQzNXxcdTA0MTBcdTA0M0JcdTA0Mzh8XHUwNDEwXHUwNDNDXHUwNDNDXHUwNDNFfFx1MDQxMHxcdTA0RDhcdTA0MzNcdTA0RDlcdTA0NDB8XHUwNEQ4XHUwNDM5XHUwNDQyXHUwNDM4XHUwNDNBfFx1MDREOFx1MDQzQ1x1MDQzQ1x1MDQzMHxcdTA0MTFcdTA0MzhcdTA0NDBcdTA0M0VcdTA0M0F8XHUwNDEyXHUwNDMwfFx1MDQxMlx1MDREOXxcdTA0MTRcdTA0MzBcdTA0MzRcdTA0MzVcdTA0M0RcdTA0M0V8XHUwNDE0XHUwNDMwXHUwNDNEXHUwNDNFfFx1MDQxNFx1MDQzRVx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ3xcdTA0MTVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDE3XHUwNDMwXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDM1fFx1MDQxN1x1MDQzMFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQzOHxcdTA0MTdcdTA0MzBcdTA0MzRcdTA0MzBcdTA0NDJcdTA0M0V8XHUwNDE4fFx1MDQwNnxcdTA0MUEgXHUwNDQyXHUwNDNFXHUwNDNDXHUwNDQzIFx1MDQzNlx1MDQzNXxcdTA0MUFcdTA0MzBcdTA0MzRcdTA0MzB8XHUwNDFBXHUwNDMwXHUwNDM0fFx1MDQxQVx1MDQzRVx1MDQzM1x1MDQzMFx1MDQ0Mlx1MDQzRXxcdTA0MUFcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzB8XHUwNDFBXHUwNDNFXHUwNDNCXHUwNDM4fFx1MDQxQlx1MDREOVx1MDQzQVx1MDQzOFx1MDQzRHxcdTA0MUJcdTA0MzVcdTA0M0FcdTA0MzhcdTA0M0R8XHUwNDFEXHUwNEQ5XHUwNDQyXHUwNDM4XHUwNDk3XHUwNEQ5XHUwNDM0XHUwNEQ5fFx1MDQxRFx1MDQzNVx1MDQ0NVx1MDQzMFx1MDQzOXxcdTA0MURcdTA0M0V8XHUwNDFFXHUwNDNEXHUwNDM0XHUwNDMwfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ1x1MDQzRSwgXHUwNDQ5XHUwNDNFfFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzRlx1MDQ0M1x1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzQ1x1MDQzRXxcdTA0MUZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0NEN8XHUwNDIyXHUwNDMwXHUwNDNBXHUwNDM2XHUwNDM1fFx1MDQyMlx1MDQzMHxcdTA0MjJcdTA0M0VcdTA0MzNcdTA0MzRcdTA0MzB8XHUwNDIyXHUwNDNFXHUwNDM0XHUwNDU2fFx1MDQyMlx1MDQzRXxcdTA0MjNcdTA0M0RcdTA0MzRcdTA0MzB8XHUwNEJBXHUwNEQ5XHUwNDNDfFx1MDQyRlx1MDQzQVx1MDQ0OVx1MDQzRXxcdTA1RDBcdTA1RDFcdTA1REN8XHUwNUQwXHUwNUQ2XHUwNUQ5fFx1MDVEMFx1MDVENnxcdTA1RDFcdTA1RDRcdTA1RDlcdTA1RTBcdTA1RUFcdTA1REZ8XHUwNUQ1XHUwNUQyXHUwNUREfFx1MDVEQlx1MDVEMFx1MDVFOVx1MDVFOHxcdTA2MjJcdTA2NDZcdTA2QUZcdTA2MjdcdTA2NDd8XHUwNjI3XHUwNjMwXHUwNjI3XHUwNjRCfFx1MDYyN1x1MDZBRlx1MDYzMXxcdTA2MjdcdTA2NDVcdTA2Mjd8XHUwNjI3XHUwNjQ4XHUwNjMxfFx1MDYyOFx1MDYyNyBcdTA2NDFcdTA2MzFcdTA2MzZ8XHUwNjI4XHUwNjI3XHUwNjQ0XHUwNjQxXHUwNjMxXHUwNjM2fFx1MDYyOFx1MDY0MVx1MDYzMVx1MDYzNnxcdTA2N0VcdTA2QkVcdTA2MzF8XHUwNjJBXHUwNjI4fFx1MDYyQlx1MDY0NXxcdTA2MkNcdTA2Mjh8XHUwNjM5XHUwNjQ2XHUwNjJGXHUwNjQ1XHUwNjI3fFx1MDY0MVx1MDYzMVx1MDYzNiBcdTA2QTlcdTA2Q0NcdTA2Mjd8XHUwNjQ0XHUwNjQzXHUwNjQ2fFx1MDY0NFx1MDZDQ1x1MDZBOVx1MDY0NnxcdTA2NDVcdTA2MkFcdTA2NDl8XHUwNjQ3XHUwNjQ2XHUwNkFGXHUwNjI3XHUwNjQ1XHUwNkNDfFx1MDY0OHxcdTA5MDVcdTA5MTdcdTA5MzB8XHUwOTE0XHUwOTMwfFx1MDkxNVx1MDkyNlx1MDkzRXxcdTA5MTVcdTA5M0ZcdTA5MjhcdTA5NERcdTA5MjRcdTA5NDF8XHUwOTFBXHUwOTQyXHUwOTAyXHUwOTE1XHUwOTNGfFx1MDkxQ1x1MDkyQ3xcdTA5MjRcdTA5MjVcdTA5M0V8XHUwOTI0XHUwOTI2XHUwOTNFfFx1MDkyNFx1MDkyQ3xcdTA5MkFcdTA5MzBcdTA5MjhcdTA5NERcdTA5MjRcdTA5NDF8XHUwOTJBXHUwOTMwfFx1MDkyRlx1MDkyNlx1MDkzRnxcdTBBMDVcdTBBMjRcdTBBNDd8XHUwQTFDXHUwQTI2XHUwQTRCXHUwQTAyfFx1MEExQ1x1MEEzRlx1MEEzNVx1MEE0N1x1MEEwMiBcdTBBMTVcdTBBM0Z8XHUwQTFDXHUwQTQ3XHUwQTE1XHUwQTMwfFx1MEEyNFx1MEEyNnxcdTBBMkFcdTBBMzB8XHUwQzA1XHUwQzJBXHUwQzREXHUwQzJBXHUwQzQxXHUwQzIxXHUwQzQxfFx1MEMwOCBcdTBDMkFcdTBDMzBcdTBDM0ZcdTBDMzhcdTBDNERcdTBDMjVcdTBDM0ZcdTBDMjRcdTBDM0ZcdTBDMzJcdTBDNEJ8XHUwQzE1XHUwQzNFXHUwQzI4XHUwQzNGfFx1MEMxQVx1MEM0Nlx1MEMyQVx1MEM0RFx1MEMyQVx1MEMyQ1x1MEMyMVx1MEMzRlx1MEMyOFx1MEMyNlx1MEMzRnxcdTBDMkVcdTBDMzBcdTBDM0ZcdTBDMkZcdTBDNDF8XHUwQzg2XHUwQ0E2XHUwQ0IwXHUwQ0M2fFx1MENBOFx1MEM4Mlx1MENBNFx1MENCMHxcdTBDQThcdTBDQkZcdTBDRDVcdTBDQTFcdTBDQkZcdTBDQTZ8XHUwQ0FFXHUwQ0E0XHUwQ0NEXHUwQ0E0XHUwQ0MxfFx1MENCOFx1MENDRFx1MENBNVx1MENCRlx1MENBNFx1MENCRlx1MENBRlx1MENBOFx1MENDRFx1MENBOFx1MENDMXxcdTBFMDFcdTBFMzNcdTBFMkJcdTBFMTlcdTBFMTRcdTBFNDNcdTBFMkJcdTBFNDl8XHUwRTE0XHUwRTMxXHUwRTA3XHUwRTE5XHUwRTMxXHUwRTQ5XHUwRTE5fFx1MEU0MVx1MEUxNVx1MEU0OHxcdTBFNDBcdTBFMjFcdTBFMzdcdTBFNDhcdTBFMkR8XHUwRTQxXHUwRTI1XHUwRTMwfFx1QURGOFx1QjdFQ1x1QkE3NDx8XHVBREY4XHVCOUFDXHVBQ0UwPHxcdUIyRTg8fFx1QjlDQ1x1QzU3RDx8XHVCOUNDXHVDNzdDPHxcdUJBM0NcdUM4MDA8fFx1Qzg3MFx1QUM3NDx8XHVENTU4XHVDOUMwXHVCOUNDPHxcdTMwNEJcdTMwNjQ8fFx1MzA1N1x1MzA0Qlx1MzA1Nzx8XHUzMDVGXHUzMDYwXHUzMDU3PHxcdTMwNkFcdTMwODlcdTMwNzA8fFx1MzA4Mlx1MzA1Nzx8XHU0RTI2XHU0RTE0PHxcdTRGNDZcdTMwNTc8fFx1NEY0Nlx1NjYyRjx8XHU1MDQ3XHU1OTgyPHxcdTUwNDdcdTVCOUE8fFx1NTA0N1x1OEEyRDx8XHU1MDQ3XHU4QkJFPHxcdTUyNERcdTYzRDA8fFx1NTQwQ1x1NjVGNjx8XHU1NDBDXHU2NjQyPHxcdTVFNzZcdTRFMTQ8fFx1NUY1Mzx8XHU3NTc2PHxcdTgwMENcdTRFMTQ8fFx1OTBBM1x1NEU0ODx8XHU5MEEzXHU5RUJDPCkoPz1bIFxcdF0pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcInwnKD86XFxcXC58W14nXFxcXFxcclxcbl0pKicvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvdXRsaW5lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W14+XSs+Lyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3V0bGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC88W14+XSs+Lyxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fVxuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5naXQgPSB7XG5cdC8qXG5cdCAqIEEgc2ltcGxlIG9uZSBsaW5lIGNvbW1lbnQgbGlrZSBpbiBhIGdpdCBzdGF0dXMgY29tbWFuZFxuXHQgKiBGb3IgaW5zdGFuY2U6XG5cdCAqICQgZ2l0IHN0YXR1c1xuXHQgKiAjIE9uIGJyYW5jaCBpbmZpbml0ZS1zY3JvbGxcblx0ICogIyBZb3VyIGJyYW5jaCBhbmQgJ29yaWdpbi9zaGFyZWRCcmFuY2hlcy9mcm9udGVuZFRlYW0vaW5maW5pdGUtc2Nyb2xsJyBoYXZlIGRpdmVyZ2VkLFxuXHQgKiAjIGFuZCBoYXZlIDEgYW5kIDIgZGlmZmVyZW50IGNvbW1pdHMgZWFjaCwgcmVzcGVjdGl2ZWx5LlxuXHQgKiBub3RoaW5nIHRvIGNvbW1pdCAod29ya2luZyBkaXJlY3RvcnkgY2xlYW4pXG5cdCAqL1xuXHQnY29tbWVudCc6IC9eIy4qL20sXG5cblx0Lypcblx0ICogUmVnZXhwIHRvIG1hdGNoIHRoZSBjaGFuZ2VkIGxpbmVzIGluIGEgZ2l0IGRpZmYgb3V0cHV0LiBDaGVjayB0aGUgZXhhbXBsZSBiZWxvdy5cblx0ICovXG5cdCdkZWxldGVkJzogL15bLVx1MjAxM10uKi9tLFxuXHQnaW5zZXJ0ZWQnOiAvXlxcKy4qL20sXG5cblx0Lypcblx0ICogYSBzdHJpbmcgKGRvdWJsZSBhbmQgc2ltcGxlIHF1b3RlKVxuXHQgKi9cblx0J3N0cmluZyc6IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblxuXHQvKlxuXHQgKiBhIGdpdCBjb21tYW5kLiBJdCBzdGFydHMgd2l0aCBhIHJhbmRvbSBwcm9tcHQgZmluaXNoaW5nIGJ5IGEgJCwgdGhlbiBcImdpdFwiIHRoZW4gc29tZSBvdGhlciBwYXJhbWV0ZXJzXG5cdCAqIEZvciBpbnN0YW5jZTpcblx0ICogJCBnaXQgYWRkIGZpbGUudHh0XG5cdCAqL1xuXHQnY29tbWFuZCc6IHtcblx0XHRwYXR0ZXJuOiAvXi4qXFwkIGdpdCAuKiQvbSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdC8qXG5cdFx0XHQgKiBBIGdpdCBjb21tYW5kIGNhbiBjb250YWluIGEgcGFyYW1ldGVyIHN0YXJ0aW5nIGJ5IGEgc2luZ2xlIG9yIGEgZG91YmxlIGRhc2ggZm9sbG93ZWQgYnkgYSBzdHJpbmdcblx0XHRcdCAqIEZvciBpbnN0YW5jZTpcblx0XHRcdCAqICQgZ2l0IGRpZmYgLS1jYWNoZWRcblx0XHRcdCAqICQgZ2l0IGxvZyAtcFxuXHRcdFx0ICovXG5cdFx0XHQncGFyYW1ldGVyJzogL1xccy0tP1xcdysvXG5cdFx0fVxuXHR9LFxuXG5cdC8qXG5cdCAqIENvb3JkaW5hdGVzIGRpc3BsYXllZCBpbiBhIGdpdCBkaWZmIGNvbW1hbmRcblx0ICogRm9yIGluc3RhbmNlOlxuXHQgKiAkIGdpdCBkaWZmXG5cdCAqIGRpZmYgLS1naXQgZmlsZS50eHQgZmlsZS50eHRcblx0ICogaW5kZXggNjIxNDk1My4uMWQ1NGE1MiAxMDA2NDRcblx0ICogLS0tIGZpbGUudHh0XG5cdCAqICsrKyBmaWxlLnR4dFxuXHQgKiBAQCAtMSArMSwyIEBAXG5cdCAqIC1IZXJlJ3MgbXkgdGV0eCBmaWxlXG5cdCAqICtIZXJlJ3MgbXkgdGV4dCBmaWxlXG5cdCAqICtBbmQgdGhpcyBpcyB0aGUgc2Vjb25kIGxpbmVcblx0ICovXG5cdCdjb29yZCc6IC9eQEAuKkBAJC9tLFxuXG5cdC8qXG5cdCAqIE1hdGNoIGEgXCJjb21taXQgW1NIQTFdXCIgbGluZSBpbiBhIGdpdCBsb2cgb3V0cHV0LlxuXHQgKiBGb3IgaW5zdGFuY2U6XG5cdCAqICQgZ2l0IGxvZ1xuXHQgKiBjb21taXQgYTExYTE0ZWY3ZTI2ZjJjYTYyZDRiMzVlYWM0NTVjZTYzNmQwZGMwOVxuXHQgKiBBdXRob3I6IGxnaXJhdWRlbFxuXHQgKiBEYXRlOiAgIE1vbiBGZWIgMTcgMTE6MTg6MzQgMjAxNCArMDEwMFxuXHQgKlxuXHQgKiAgICAgQWRkIG9mIGEgbmV3IGxpbmVcblx0ICovXG5cdCdjb21taXQtc2hhMSc6IC9eY29tbWl0IFxcd3s0MH0kL21cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nbHNsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YWN0aXZlfGFzbXxhdG9taWNfdWludHxhdHRyaWJ1dGV8W2liZHVdP3ZlY1syMzRdfGJvb2x8YnJlYWt8YnVmZmVyfGNhc2V8Y2FzdHxjZW50cm9pZHxjbGFzc3xjb2hlcmVudHxjb21tb258Y29uc3R8Y29udGludWV8ZD9tYXRbMjM0XSg/OnhbMjM0XSk/fGRlZmF1bHR8ZGlzY2FyZHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVybnxleHRlcm5hbHxmYWxzZXxmaWx0ZXJ8Zml4ZWR8ZmxhdHxmbG9hdHxmb3J8ZnZlY1syMzRdfGdvdG98aGFsZnxoaWdocHxodmVjWzIzNF18W2l1XT9zYW1wbGVyMkRNUyg/OkFycmF5KT98W2l1XT9zYW1wbGVyMkRSZWN0fFtpdV0/c2FtcGxlckJ1ZmZlcnxbaXVdP3NhbXBsZXJDdWJlfFtpdV0/c2FtcGxlckN1YmVBcnJheXxbaXVdP3NhbXBsZXJbMTIzXUR8W2l1XT9zYW1wbGVyWzEyXURBcnJheXxbaXVdP2ltYWdlMkRNUyg/OkFycmF5KT98W2l1XT9pbWFnZTJEUmVjdHxbaXVdP2ltYWdlQnVmZmVyfFtpdV0/aW1hZ2VDdWJlfFtpdV0/aW1hZ2VDdWJlQXJyYXl8W2l1XT9pbWFnZVsxMjNdRHxbaXVdP2ltYWdlWzEyXURBcnJheXxpZnxpbnxpbmxpbmV8aW5vdXR8aW5wdXR8aW50fGludGVyZmFjZXxpbnZhcmlhbnR8bGF5b3V0fGxvbmd8bG93cHxtZWRpdW1wfG5hbWVzcGFjZXxub2lubGluZXxub3BlcnNwZWN0aXZlfG91dHxvdXRwdXR8cGFydGl0aW9ufHBhdGNofHByZWNpc2V8cHJlY2lzaW9ufHB1YmxpY3xyZWFkb25seXxyZXNvdXJjZXxyZXN0cmljdHxyZXR1cm58c2FtcGxlfHNhbXBsZXJbMTJdREFycmF5U2hhZG93fHNhbXBsZXJbMTJdRFNoYWRvd3xzYW1wbGVyMkRSZWN0U2hhZG93fHNhbXBsZXIzRFJlY3R8c2FtcGxlckN1YmVBcnJheVNoYWRvd3xzYW1wbGVyQ3ViZVNoYWRvd3xzaGFyZWR8c2hvcnR8c2l6ZW9mfHNtb290aHxzdGF0aWN8c3RydWN0fHN1YnJvdXRpbmV8c3VwZXJwfHN3aXRjaHx0ZW1wbGF0ZXx0aGlzfHRydWV8dHlwZWRlZnx1aW50fHVuaWZvcm18dW5pb258dW5zaWduZWR8dXNpbmd8dmFyeWluZ3x2b2lkfHZvbGF0aWxlfHdoaWxlfHdyaXRlb25seSlcXGIvXG59KTtcblxuLy8gaHR0cHM6Ly9nbi5nb29nbGVzb3VyY2UuY29tL2duLysvcmVmcy9oZWFkcy9tYWluL2RvY3MvcmVmZXJlbmNlLm1kI2dyYW1tYXJcblxuUHJpc20ubGFuZ3VhZ2VzLmduID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcIl0pXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkKD86XFx7W1xcc1xcU10qP1xcfXxbYS16QS1aX11cXHcqfDB4W2EtZkEtRjAtOV17Mn0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J251bWJlcic6IC9eXFwkMHhbXFxzXFxTXXsyfSQvLFxuXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFwkXFx3KyQvLFxuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86ZWxzZXxpZilcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdidWlsdGluLWZ1bmN0aW9uJzoge1xuXHRcdC8vIGEgZmV3IGZ1bmN0aW9ucyBnZXQgc3BlY2lhbCBoaWdobGlnaHRpbmcgdG8gaW1wcm92ZSByZWFkYWJpbGl0eVxuXHRcdHBhdHRlcm46IC9cXGIoPzphc3NlcnR8ZGVmaW5lZHxmb3JlYWNofGltcG9ydHxwb29sfHByaW50fHRlbXBsYXRlfHRvb2x8dG9vbGNoYWluKSg/PVxccypcXCgpL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdCdjb25zdGFudCc6IC9cXGIoPzpjdXJyZW50X2NwdXxjdXJyZW50X29zfGN1cnJlbnRfdG9vbGNoYWlufGRlZmF1bHRfdG9vbGNoYWlufGhvc3RfY3B1fGhvc3Rfb3N8cm9vdF9idWlsZF9kaXJ8cm9vdF9nZW5fZGlyfHJvb3Rfb3V0X2Rpcnx0YXJnZXRfY3B1fHRhcmdldF9nZW5fZGlyfHRhcmdldF9vc3x0YXJnZXRfb3V0X2RpcilcXGIvLFxuXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrXFxiLyxcblxuXHQnb3BlcmF0b3InOiAvWy0rIT08Pl09P3wmJnxcXHxcXHwvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdLC5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmduWydzdHJpbmctbGl0ZXJhbCddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnZXhwcmVzc2lvbiddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5nbjtcblxuUHJpc20ubGFuZ3VhZ2VzLmduaSA9IFByaXNtLmxhbmd1YWdlcy5nbjtcblxuUHJpc20ubGFuZ3VhZ2VzWydsaW5rZXItc2NyaXB0J10gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXFwvXFwqW1xcc1xcU10qPyg/OiR8XFwqXFwvKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdsb2NhdGlvbi1jb3VudGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXEJcXC5cXEIvLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXG5cdCdzZWN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdypdKVxcLlxcdytcXGIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiW0EtWl1bQS1aX10qKD89XFxzKlxcKCkvLFxuXG5cdCdudW1iZXInOiAvXFxiKD86MFt4WF1bYS1mQS1GMC05XSt8XFxkKylbS01dP1xcYi8sXG5cblx0J29wZXJhdG9yJzogLz4+PT98PDw9P3wtPnxcXCtcXCt8LS18JiZ8XFx8XFx8fDo6fFs/On5dfFstKyovJSZ8XiE9PD5dPT8vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe30sO10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2xkJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ2xpbmtlci1zY3JpcHQnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdvID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifGBbXmBdKmAvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGNhc2V8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmVyfGVsc2V8ZmFsbHRocm91Z2h8Zm9yfGZ1bmN8Z28oPzp0byk/fGlmfGltcG9ydHxpbnRlcmZhY2V8bWFwfHBhY2thZ2V8cmFuZ2V8cmV0dXJufHNlbGVjdHxzdHJ1Y3R8c3dpdGNofHR5cGV8dmFyKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/Ol98ZmFsc2V8aW90YXxuaWx8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGJpbmFyeSBhbmQgb2N0YWwgaW50ZWdlcnNcblx0XHQvXFxiMCg/OmJbMDFfXSt8b1swLTdfXSspaT9cXGIvaSxcblx0XHQvLyBoZXhhZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRzXG5cdFx0L1xcYjB4KD86W2EtZlxcZF9dKyg/OlxcLlthLWZcXGRfXSopP3xcXC5bYS1mXFxkX10rKSg/OnBbKy1dP1xcZCsoPzpfXFxkKykqKT9pPyg/IVxcdykvaSxcblx0XHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdHNcblx0XHQvKD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1tcXGRfXSspP2k/KD8hXFx3KS9pXG5cdF0sXG5cdCdvcGVyYXRvcic6IC9bKlxcLyVeIT1dPT98XFwrWz0rXT98LVs9LV0/fFxcfFs9fF0/fCYoPzo9fCZ8XFxePT8pP3w+KD86Pj0/fD0pP3w8KD86PD0/fD18LSk/fDo9fFxcLlxcLlxcLi8sXG5cdCdidWlsdGluJzogL1xcYig/OmFwcGVuZHxib29sfGJ5dGV8Y2FwfGNsb3NlfGNvbXBsZXh8Y29tcGxleCg/OjY0fDEyOCl8Y29weXxkZWxldGV8ZXJyb3J8ZmxvYXQoPzozMnw2NCl8dT9pbnQoPzo4fDE2fDMyfDY0KT98aW1hZ3xsZW58bWFrZXxuZXd8cGFuaWN8cHJpbnQoPzpsbik/fHJlYWx8cmVjb3ZlcnxydW5lfHN0cmluZ3x1aW50cHRyKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdnbycsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXC58W14nXFxcXFxcclxcbl0pezAsMTB9Jy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmdvWydjbGFzcy1uYW1lJ107XG5cbi8vIGh0dHBzOi8vZ28uZGV2L3JlZi9tb2QjZ28tbW9kLWZpbGUtbW9kdWxlXG5cblByaXNtLmxhbmd1YWdlc1snZ28tbW9kJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ2dvLW1vZHVsZSddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmVyc2lvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1xccygpW1xcXSxdKXZcXGQrXFwuXFxkK1xcLlxcZCsoPzpbKy1dWy0rLlxcd10qKT8oPyFbXlxccygpW1xcXSxdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2dvLXZlcnNpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylnb1xccyspXFxkKyg/OlxcLlxcZCspezEsMn0vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD86ZXhjbHVkZXxnb3xtb2R1bGV8cmVwbGFjZXxyZXF1aXJlfHJldHJhY3QpXFxiL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvPT4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcJF0pKD86XFxcXHsyfSkqKVxcJCg/Olxcdyt8XFx7W157fV0qXFx9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nLFxuXHRcdFx0fSxcblx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ncmFkbGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLycnJyg/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/JycnfCcoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkqJy8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQna2V5d29yZCc6XG5cdFx0XHQvXFxiKD86YXBwbHl8ZGVmfGRlcGVuZGVuY2llc3xlbHNlfGlmfGltcGxlbWVudGF0aW9ufGltcG9ydHxwbHVnaW58cGx1Z2luc3xwcm9qZWN0fHJlcG9zaXRvcmllc3xyZXBvc2l0b3J5fHNvdXJjZVNldHN8dGFza3N8dmFsKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dK3wweFtcXGRhLWZfXSsoPzpcXC5bXFxkYS1mX3BcXC1dKyk/fFtcXGRfXSsoPzpcXC5bXFxkX10rKT8oPzplWystXT9cXGQrKT8pW2dsaWRmXT9cXGIvaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOlxuXHRcdFx0XHQvKF58W14uXSkoPzp+fD09P34/fFxcP1suOl0/fFxcKig/OlsuPV18XFwqPT8pP3xcXC5bQCZdfFxcLlxcLjx8XFwuXFwuKD8hXFwuKXwtWy09Pl0/fFxcK1srPV0/fCE9P3w8KD86PD0/fD0+Pyk/fD4oPzo+Pj89P3w9KT98JlsmPV0/fFxcfFt8PV0/fFxcLz0/fFxcXj0/fCU9PykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXC4rfFt7fVtcXF07KCksOiRdLyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3JhZGxlJywgJ3N0cmluZycsIHtcblx0XHQnc2hlYmFuZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jIS4rLyxcblx0XHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOlxuXHRcdFx0XHQvXCJcIlwiKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj9cIlwiXCJ8KFtcIi9dKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDF8XFwkXFwvKD86W14vJF18XFwkKD86Wy8kXXwoPyFbLyRdKSl8XFwvKD8hXFwkKSkqXFwvXFwkLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rLyxcblx0XHRcdH0sXG5cdFx0fSxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3JhZGxlJywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCdzcG9jay1ibG9jayc6IC9cXGIoPzphbmR8Y2xlYW51cHxleHBlY3R8Z2l2ZW58c2V0dXB8dGhlbnx3aGVufHdoZXJlKTovLFxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncmFkbGUnLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlAXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0fSxcblx0fSk7XG5cblx0aW50ZXJwb2xhdGlvbi5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZ3JhZGxlO1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZ3JhcGhxbCA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2Rlc2NyaXB0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oPzpcIlwiXCIoPzpbXlwiXXwoPyFcIlwiXCIpXCIpKlwiXCJcInxcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIpKD89XFxzKlthLXpfXSkvaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2xhbmd1YWdlLW1hcmtkb3duJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cIig/OlwiXCIpPykoPyFcXDEpW1xcc1xcU10rKD89XFwxJCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiKD86W15cIl18KD8hXCJcIlwiKVwiKSpcIlwiXCJ8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC8oPzpcXEItfFxcYilcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J3ZhcmlhYmxlJzogL1xcJFthLXpfXVxcdyovaSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFthLXpfXVxcdyovaSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnYXR0ci1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKig/OlxcKCg/OlteKClcIl18XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKSpcXCkpPzopL2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdhdG9tLWlucHV0Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdypJbnB1dFxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnc2NhbGFyJzogL1xcYig/OkJvb2xlYW58RmxvYXR8SUR8SW50fFN0cmluZylcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aX1xcZF0qXFxiLyxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfGltcGxlbWVudHN8aW50ZXJmYWNlfG9ufHNjYWxhcnx0eXBlfHVuaW9uKVxccyt8Jlxccyp8Olxccyp8XFxbKVtBLVpfXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2ZyYWdtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxiZnJhZ21lbnRcXHMrfFxcLnszfVxccyooPyFvblxcYikpW2EtekEtWl9dXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnZGVmaW5pdGlvbi1tdXRhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYm11dGF0aW9uXFxzKylbYS16QS1aX11cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdkZWZpbml0aW9uLXF1ZXJ5Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxicXVlcnlcXHMrKVthLXpBLVpfXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86ZGlyZWN0aXZlfGVudW18ZXh0ZW5kfGZyYWdtZW50fGltcGxlbWVudHN8aW5wdXR8aW50ZXJmYWNlfG11dGF0aW9ufG9ufHF1ZXJ5fHJlcGVhdGFibGV8c2NhbGFyfHNjaGVtYXxzdWJzY3JpcHRpb258dHlwZXx1bmlvbilcXGIvLFxuXHQnb3BlcmF0b3InOiAvWyE9fCZdfFxcLnszfS8sXG5cdCdwcm9wZXJ0eS1xdWVyeSc6IC9cXHcrKD89XFxzKlxcKCkvLFxuXHQnb2JqZWN0JzogL1xcdysoPz1cXHMqXFx7KS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bISgpe31cXFtcXF06PSxdLyxcblx0J3Byb3BlcnR5JzogL1xcdysvXG59O1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gYWZ0ZXJUb2tlbml6ZUdyYXBocWwoZW52KSB7XG5cdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdncmFwaHFsJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8qKlxuXHQgKiBnZXQgdGhlIGdyYXBocWwgdG9rZW4gc3RyZWFtIHRoYXQgd2Ugd2FudCB0byBjdXN0b21pemVcblx0ICpcblx0ICogQHR5cGVkZWYge0luc3RhbmNlVHlwZTxpbXBvcnQoXCIuL3ByaXNtLWNvcmVcIilbXCJUb2tlblwiXT59IFRva2VuXG5cdCAqIEB0eXBlIHtUb2tlbltdfVxuXHQgKi9cblx0dmFyIHZhbGlkVG9rZW5zID0gZW52LnRva2Vucy5maWx0ZXIoZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0cmV0dXJuIHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycgJiYgdG9rZW4udHlwZSAhPT0gJ2NvbW1lbnQnICYmIHRva2VuLnR5cGUgIT09ICdzY2FsYXInO1xuXHR9KTtcblxuXHR2YXIgY3VycmVudEluZGV4ID0gMDtcblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoZSB0b2tlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpbmRleCBoYXMgdGhlIGdpdmVuIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBvZmZzZXRcblx0ICogQHJldHVybnMge1Rva2VuIHwgdW5kZWZpbmVkfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0VG9rZW4ob2Zmc2V0KSB7XG5cdFx0cmV0dXJuIHZhbGlkVG9rZW5zW2N1cnJlbnRJbmRleCArIG9mZnNldF07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB3aGV0aGVyIHRoZSB0b2tlbiByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBpbmRleCBoYXMgdGhlIGdpdmVuIHR5cGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7cmVhZG9ubHkgc3RyaW5nW119IHR5cGVzXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBbb2Zmc2V0PTBdXG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZnVuY3Rpb24gaXNUb2tlblR5cGUodHlwZXMsIG9mZnNldCkge1xuXHRcdG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdHlwZXMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB0b2tlbiA9IGdldFRva2VuKGkgKyBvZmZzZXQpO1xuXHRcdFx0aWYgKCF0b2tlbiB8fCB0b2tlbi50eXBlICE9PSB0eXBlc1tpXSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjbG9zaW5nIGJyYWNrZXQgdG8gYW4gb3BlbmluZyBicmFja2V0LlxuXHQgKlxuXHQgKiBJdCBpcyBhc3N1bWVkIHRoYXQgYHRva2VuW2N1cnJlbnRJbmRleCAtIDFdYCBpcyBhbiBvcGVuaW5nIGJyYWNrZXQuXG5cdCAqXG5cdCAqIElmIG5vIGNsb3NpbmcgYnJhY2tldCBjb3VsZCBiZSBmb3VuZCwgYC0xYCB3aWxsIGJlIHJldHVybmVkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1JlZ0V4cH0gb3BlblxuXHQgKiBAcGFyYW0ge1JlZ0V4cH0gY2xvc2Vcblx0ICogQHJldHVybnMge251bWJlcn1cblx0ICovXG5cdGZ1bmN0aW9uIGZpbmRDbG9zaW5nQnJhY2tldChvcGVuLCBjbG9zZSkge1xuXHRcdHZhciBzdGFja0hlaWdodCA9IDE7XG5cblx0XHRmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgdmFsaWRUb2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB0b2tlbiA9IHZhbGlkVG9rZW5zW2ldO1xuXHRcdFx0dmFyIGNvbnRlbnQgPSB0b2tlbi5jb250ZW50O1xuXG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0eXBlb2YgY29udGVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKG9wZW4udGVzdChjb250ZW50KSkge1xuXHRcdFx0XHRcdHN0YWNrSGVpZ2h0Kys7XG5cdFx0XHRcdH0gZWxzZSBpZiAoY2xvc2UudGVzdChjb250ZW50KSkge1xuXHRcdFx0XHRcdHN0YWNrSGVpZ2h0LS07XG5cblx0XHRcdFx0XHRpZiAoc3RhY2tIZWlnaHQgPT09IDApIHtcblx0XHRcdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAtMTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGFuIGFsaWFzIHRvIHRoZSBnaXZlbiB0b2tlbi5cblx0ICpcblx0ICogQHBhcmFtIHtUb2tlbn0gdG9rZW5cblx0ICogQHBhcmFtIHtzdHJpbmd9IGFsaWFzXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRkQWxpYXModG9rZW4sIGFsaWFzKSB7XG5cdFx0dmFyIGFsaWFzZXMgPSB0b2tlbi5hbGlhcztcblx0XHRpZiAoIWFsaWFzZXMpIHtcblx0XHRcdHRva2VuLmFsaWFzID0gYWxpYXNlcyA9IFtdO1xuXHRcdH0gZWxzZSBpZiAoIUFycmF5LmlzQXJyYXkoYWxpYXNlcykpIHtcblx0XHRcdHRva2VuLmFsaWFzID0gYWxpYXNlcyA9IFthbGlhc2VzXTtcblx0XHR9XG5cdFx0YWxpYXNlcy5wdXNoKGFsaWFzKTtcblx0fVxuXG5cdGZvciAoOyBjdXJyZW50SW5kZXggPCB2YWxpZFRva2Vucy5sZW5ndGg7KSB7XG5cdFx0dmFyIHN0YXJ0VG9rZW4gPSB2YWxpZFRva2Vuc1tjdXJyZW50SW5kZXgrK107XG5cblx0XHQvLyBhZGQgc3BlY2lhbCBhbGlhc2VzIGZvciBtdXRhdGlvbiB0b2tlbnNcblx0XHRpZiAoc3RhcnRUb2tlbi50eXBlID09PSAna2V5d29yZCcgJiYgc3RhcnRUb2tlbi5jb250ZW50ID09PSAnbXV0YXRpb24nKSB7XG5cdFx0XHQvLyBhbnkgYXJyYXkgb2YgdGhlIG5hbWVzIG9mIGFsbCBpbnB1dCB2YXJpYWJsZXMgKGlmIGFueSlcblx0XHRcdHZhciBpbnB1dFZhcmlhYmxlcyA9IFtdO1xuXG5cdFx0XHRpZiAoaXNUb2tlblR5cGUoWydkZWZpbml0aW9uLW11dGF0aW9uJywgJ3B1bmN0dWF0aW9uJ10pICYmIGdldFRva2VuKDEpLmNvbnRlbnQgPT09ICcoJykge1xuXHRcdFx0XHQvLyBkZWZpbml0aW9uXG5cblx0XHRcdFx0Y3VycmVudEluZGV4ICs9IDI7IC8vIHNraXAgJ2RlZmluaXRpb24tbXV0YXRpb24nIGFuZCAncHVuY3R1YXRpb24nXG5cblx0XHRcdFx0dmFyIGRlZmluaXRpb25FbmQgPSBmaW5kQ2xvc2luZ0JyYWNrZXQoL15cXCgkLywgL15cXCkkLyk7XG5cdFx0XHRcdGlmIChkZWZpbml0aW9uRW5kID09PSAtMSkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZmluZCBhbGwgaW5wdXQgdmFyaWFibGVzXG5cdFx0XHRcdGZvciAoOyBjdXJyZW50SW5kZXggPCBkZWZpbml0aW9uRW5kOyBjdXJyZW50SW5kZXgrKykge1xuXHRcdFx0XHRcdHZhciB0ID0gZ2V0VG9rZW4oMCk7XG5cdFx0XHRcdFx0aWYgKHQudHlwZSA9PT0gJ3ZhcmlhYmxlJykge1xuXHRcdFx0XHRcdFx0YWRkQWxpYXModCwgJ3ZhcmlhYmxlLWlucHV0Jyk7XG5cdFx0XHRcdFx0XHRpbnB1dFZhcmlhYmxlcy5wdXNoKHQuY29udGVudCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y3VycmVudEluZGV4ID0gZGVmaW5pdGlvbkVuZCArIDE7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc1Rva2VuVHlwZShbJ3B1bmN0dWF0aW9uJywgJ3Byb3BlcnR5LXF1ZXJ5J10pICYmIGdldFRva2VuKDApLmNvbnRlbnQgPT09ICd7Jykge1xuXHRcdFx0XHRjdXJyZW50SW5kZXgrKzsgLy8gc2tpcCBvcGVuaW5nIGJyYWNrZXRcblxuXHRcdFx0XHRhZGRBbGlhcyhnZXRUb2tlbigwKSwgJ3Byb3BlcnR5LW11dGF0aW9uJyk7XG5cblx0XHRcdFx0aWYgKGlucHV0VmFyaWFibGVzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHR2YXIgbXV0YXRpb25FbmQgPSBmaW5kQ2xvc2luZ0JyYWNrZXQoL15cXHskLywgL15cXH0kLyk7XG5cdFx0XHRcdFx0aWYgKG11dGF0aW9uRW5kID09PSAtMSkge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gZ2l2ZSByZWZlcmVuY2VzIHRvIGlucHV0IHZhcmlhYmxlcyBhIHNwZWNpYWwgYWxpYXNcblx0XHRcdFx0XHRmb3IgKHZhciBpID0gY3VycmVudEluZGV4OyBpIDwgbXV0YXRpb25FbmQ7IGkrKykge1xuXHRcdFx0XHRcdFx0dmFyIHZhclRva2VuID0gdmFsaWRUb2tlbnNbaV07XG5cdFx0XHRcdFx0XHRpZiAodmFyVG9rZW4udHlwZSA9PT0gJ3ZhcmlhYmxlJyAmJiBpbnB1dFZhcmlhYmxlcy5pbmRleE9mKHZhclRva2VuLmNvbnRlbnQpID49IDApIHtcblx0XHRcdFx0XHRcdFx0YWRkQWxpYXModmFyVG9rZW4sICd2YXJpYWJsZS1pbnB1dCcpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcJF0pKD86XFxcXHsyfSkqKVxcJCg/Olxcdyt8XFx7W157fV0qXFx9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9LFxuXHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ncm9vdnkgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9ncm9vdnktbGFuZy5vcmcvc3ludGF4Lmh0bWwjX2RvbGxhcl9zbGFzaHlfc3RyaW5nXG5cdFx0XHRwYXR0ZXJuOiAvJycnKD86W15cXFxcXXxcXFxcW1xcc1xcU10pKj8nJyd8Jyg/OlxcXFwufFteXFxcXCdcXHJcXG5dKSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YXN8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8ZmxvYXR8Zm9yfGdvdG98aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5zdGFuY2VvZnxpbnR8aW50ZXJmYWNlfGxvbmd8bmF0aXZlfG5ld3xwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2hvcnR8c3RhdGljfHN0cmljdGZwfHN1cGVyfHN3aXRjaHxzeW5jaHJvbml6ZWR8dGhpc3x0aHJvd3x0aHJvd3N8dHJhaXR8dHJhbnNpZW50fHRyeXx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dK3wweFtcXGRhLWZfXSsoPzpcXC5bXFxkYS1mX3BcXC1dKyk/fFtcXGRfXSsoPzpcXC5bXFxkX10rKT8oPzplWystXT9cXGQrKT8pW2dsaWRmXT9cXGIvaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSkoPzp+fD09P34/fFxcP1suOl0/fFxcKig/OlsuPV18XFwqPT8pP3xcXC5bQCZdfFxcLlxcLjx8XFwuXFwuKD8hXFwuKXwtWy09Pl0/fFxcK1srPV0/fCE9P3w8KD86PD0/fD0+Pyk/fD4oPzo+Pj89P3w9KT98JlsmPV0/fFxcfFt8PV0/fFxcLz0/fFxcXj0/fCU9PykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1xcLit8W3t9W1xcXTsoKSw6JF0vXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyb292eScsICdzdHJpbmcnLCB7XG5cdFx0J3NoZWJhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyEuKy8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHQvLyBUT0RPOiBTbGFzaCBzdHJpbmdzIChlLmcuIC9mb28vKSBjYW4gY29udGFpbiBsaW5lIGJyZWFrcyBidXQgdGhpcyB3aWxsIGNhdXNlIGEgbG90IG9mIHRyb3VibGUgd2l0aFxuXHRcdFx0Ly8gc2ltcGxlIGRpdmlzaW9uIChzZWUgSlMgcmVnZXgpLCBzbyBmaW5kIGEgZml4IG1heWJlP1xuXHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/XCJcIlwifChbXCIvXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxfFxcJFxcLyg/OlteLyRdfFxcJCg/OlsvJF18KD8hWy8kXSkpfFxcLyg/IVxcJCkpKlxcL1xcJC8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyb292eScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnc3BvY2stYmxvY2snOiAvXFxiKD86YW5kfGNsZWFudXB8ZXhwZWN0fGdpdmVufHNldHVwfHRoZW58d2hlbnx3aGVyZSk6L1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncm9vdnknLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlAXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdGludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmdyb292eTtcblxufShQcmlzbSkpO1xuXG4vKiBUT0RPXG5cdEhhbmRsZSBtdWx0aWxpbmUgY29kZSBhZnRlciB0YWdcblx0ICAgICVmb289IHNvbWUgfFxuXHRcdFx0bXVsdGlsaW5lIHxcblx0XHRcdGNvZGUgfFxuKi9cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5oYW1sID0ge1xuXHRcdC8vIE11bHRpbGluZSBzdHVmZiBzaG91bGQgYXBwZWFyIGJlZm9yZSB0aGUgcmVzdFxuXG5cdFx0J211bHRpbGluZS1jb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSkoPzpcXC98LSMpLiooPzooPzpcXHI/XFxufFxccilcXDJbXFx0IF0uKykqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblxuXHRcdCdtdWx0aWxpbmUtY29kZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSg/Olt+LV18WyYhXT89KSkuKixbXFx0IF0qKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLiosW1xcdCBdKikqKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLispLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSg/Olt+LV18WyYhXT89KSkuKlxcfFtcXHQgXSooPzooPzpcXHI/XFxufFxccilcXDJbXFx0IF0uKlxcfFtcXHQgXSopKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0Ly8gU2VlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgZm9yIGtub3duIGZpbHRlcnNcblx0XHQnZmlsdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKShbXFx0IF0qKSk6W1xcdy1dKyg/Oig/Olxccj9cXG58XFxyKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ZpbHRlci1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eOltcXHctXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdtYXJrdXAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKik8LisvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFxuXHRcdH0sXG5cdFx0J2RvY3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKikhISEoPzogLispPy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndGFnJzoge1xuXHRcdFx0Ly8gQWxsb3dzIGZvciBvbmUgbmVzdGVkIGdyb3VwIG9mIGJyYWNlc1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSopWyUuI11bXFx3XFwtIy5dKltcXHdcXC1dKD86XFwoW14pXStcXCl8XFx7KD86XFx7W159XStcXH18W157fV0pK1xcfXxcXFtbXlxcXV0rXFxdKSpbXFwvPD5dKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHRyaWJ1dGVzJzogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIExvb2tiZWhpbmQgdHJpZXMgdG8gcHJldmVudCBpbnRlcnBvbGF0aW9ucyBmcm9tIGJyZWFraW5nIGl0IGFsbFxuXHRcdFx0XHRcdFx0Ly8gQWxsb3dzIGZvciBvbmUgbmVzdGVkIGdyb3VwIG9mIGJyYWNlc1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhefFteI10pXFx7KD86XFx7W159XStcXH18W157fV0pK1xcfS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKSg/OlwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxbXilcXHNdKykvLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2F0dHItbmFtZSc6IC9bXFx3Oi1dKyg/PVxccyohPz18XFxzKlssKV0pLyxcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1s9KCksXS9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXFtbXlxcXV0rXFxdLyxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD5dL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKig/Olt+LV18WyYhXT89KSkuKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdH0sXG5cdFx0Ly8gSW50ZXJwb2xhdGlvbnMgaW4gcGxhaW4gdGV4dFxuXHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXHtbXn1dK1xcfS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiNcXHt8XFx9JC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3J1YnknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucnVieVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxyP1xcbnxcXHIpW1xcdCBdKilbfj1cXC0mIV0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH07XG5cblx0dmFyIGZpbHRlcl9wYXR0ZXJuID0gJygoPzpefFxcXFxyP1xcXFxufFxcXFxyKShbXFxcXHQgXSopKTp7e2ZpbHRlcl9uYW1lfX0oPzooPzpcXFxccj9cXFxcbnxcXFxccikoPzpcXFxcMltcXFxcdCBdLit8XFxcXHMqPyg/PVxcXFxyP1xcXFxufFxcXFxyKSkpKyc7XG5cblx0Ly8gTm9uIGV4aGF1c3RpdmUgbGlzdCBvZiBhdmFpbGFibGUgZmlsdGVycyBhbmQgYXNzb2NpYXRlZCBsYW5ndWFnZXNcblx0dmFyIGZpbHRlcnMgPSBbXG5cdFx0J2NzcycsXG5cdFx0eyBmaWx0ZXI6ICdjb2ZmZWUnLCBsYW5ndWFnZTogJ2NvZmZlZXNjcmlwdCcgfSxcblx0XHQnZXJiJyxcblx0XHQnamF2YXNjcmlwdCcsXG5cdFx0J2xlc3MnLFxuXHRcdCdtYXJrZG93bicsXG5cdFx0J3J1YnknLFxuXHRcdCdzY3NzJyxcblx0XHQndGV4dGlsZSdcblx0XTtcblx0dmFyIGFsbF9maWx0ZXJzID0ge307XG5cdGZvciAodmFyIGkgPSAwLCBsID0gZmlsdGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHR2YXIgZmlsdGVyID0gZmlsdGVyc1tpXTtcblx0XHRmaWx0ZXIgPSB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyA/IHsgZmlsdGVyOiBmaWx0ZXIsIGxhbmd1YWdlOiBmaWx0ZXIgfSA6IGZpbHRlcjtcblx0XHRpZiAoUHJpc20ubGFuZ3VhZ2VzW2ZpbHRlci5sYW5ndWFnZV0pIHtcblx0XHRcdGFsbF9maWx0ZXJzWydmaWx0ZXItJyArIGZpbHRlci5maWx0ZXJdID0ge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoZmlsdGVyX3BhdHRlcm4ucmVwbGFjZSgne3tmaWx0ZXJfbmFtZX19JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyLmZpbHRlcjsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZmlsdGVyLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3RleHQnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiBbZmlsdGVyLmxhbmd1YWdlLCAnbGFuZ3VhZ2UtJyArIGZpbHRlci5sYW5ndWFnZV0sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1tmaWx0ZXIubGFuZ3VhZ2VdXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2hhbWwnLCAnZmlsdGVyJywgYWxsX2ZpbHRlcnMpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaGFuZGxlYmFycyA9IHtcblx0XHQnY29tbWVudCc6IC9cXHtcXHshW1xcc1xcU10qP1xcfVxcfS8sXG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7XFx7XFx7P3xcXH1cXH1cXH0/JC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IC8oW1wiJ10pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXVsrLV0/XFxkKyk/Lyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J2Jsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL14oXFxzKig/On5cXHMqKT8pWyNcXC9dXFxTKz8oPz1cXHMqKD86flxccyopPyR8XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2JyYWNrZXRzJzoge1xuXHRcdFx0cGF0dGVybjogL1xcW1teXFxdXStcXF0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFxbfFxcXS8sXG5cdFx0XHRcdHZhcmlhYmxlOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1shXCIjJSYnOigpKissLlxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9fl0vLFxuXHRcdCd2YXJpYWJsZSc6IC9bXiFcIiMlJicoKSorLFxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9flxcc10rL1xuXHR9O1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciBoYW5kbGViYXJzUGF0dGVybiA9IC9cXHtcXHtcXHtbXFxzXFxTXSs/XFx9XFx9XFx9fFxce1xce1tcXHNcXFNdKz9cXH1cXH0vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnaGFuZGxlYmFycycsIGhhbmRsZWJhcnNQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnaGFuZGxlYmFycycpO1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaGJzID0gUHJpc20ubGFuZ3VhZ2VzLmhhbmRsZWJhcnM7XG5cdFByaXNtLmxhbmd1YWdlcy5tdXN0YWNoZSA9IFByaXNtLmxhbmd1YWdlcy5oYW5kbGViYXJzO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5oYXNrZWxsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXSkoPzotLSg/Oig/PS4pW14tISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXS4qfCQpfFxcey1bXFxzXFxTXSo/LVxcfSkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W15cXFxcJ118XFxcXCg/OlthYmZucnR2XFxcXFwiJyZdfFxcXltBLVpAW1xcXV5fXXxBQ0t8QkVMfEJTfENBTnxDUnxEQzF8REMyfERDM3xEQzR8REVMfERMRXxFTXxFTlF8RU9UfEVTQ3xFVEJ8RVRYfEZGfEZTfEdTfEhUfExGfE5BS3xOVUx8UlN8U0l8U098U09IfFNQfFNUWHxTVUJ8U1lOfFVTfFZUfFxcZCt8b1swLTddK3x4WzAtOWEtZkEtRl0rKSknLyxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIl18XFxcXCg/OlxcU3xcXHMrXFxcXCkpKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86Y2FzZXxjbGFzc3xkYXRhfGRlcml2aW5nfGRvfGVsc2V8aWZ8aW58aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bW9kdWxlfG5ld3R5cGV8b2Z8cHJpbWl0aXZlfHRoZW58dHlwZXx3aGVyZSlcXGIvLFxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzKyg/OnF1YWxpZmllZFxccyspPyg/OltBLVpdW1xcdyddKikoPzpcXC5bQS1aXVtcXHcnXSopKig/Olxccythc1xccysoPzpbQS1aXVtcXHcnXSopKD86XFwuW0EtWl1bXFx3J10qKSopPyg/OlxccytoaWRpbmdcXGIpPy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGIoPzphc3xoaWRpbmd8aW1wb3J0fHF1YWxpZmllZClcXGIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cdC8vIFRoZXNlIGFyZSBidWlsdGluIHZhcmlhYmxlcyBvbmx5LiBDb25zdHJ1Y3RvcnMgYXJlIGhpZ2hsaWdodGVkIGxhdGVyIGFzIGEgY29uc3RhbnQuXG5cdCdidWlsdGluJzogL1xcYig/OmFic3xhY29zfGFjb3NofGFsbHxhbmR8YW55fGFwcGVuZEZpbGV8YXBwcm94UmF0aW9uYWx8YXNUeXBlT2Z8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGJhc2ljSU9SdW58YnJlYWt8Y2F0Y2h8Y2VpbGluZ3xjaHJ8Y29tcGFyZXxjb25jYXR8Y29uY2F0TWFwfGNvbnN0fGNvc3xjb3NofGN1cnJ5fGN5Y2xlfGRlY29kZUZsb2F0fGRlbm9taW5hdG9yfGRpZ2l0VG9JbnR8ZGl2fGRpdk1vZHxkcm9wfGRyb3BXaGlsZXxlaXRoZXJ8ZWxlbXxlbmNvZGVGbG9hdHxlbnVtRnJvbXxlbnVtRnJvbVRoZW58ZW51bUZyb21UaGVuVG98ZW51bUZyb21Ub3xlcnJvcnxldmVufGV4cHxleHBvbmVudHxmYWlsfGZpbHRlcnxmbGlwfGZsb2F0RGlnaXRzfGZsb2F0UmFkaXh8ZmxvYXRSYW5nZXxmbG9vcnxmbWFwfGZvbGRsfGZvbGRsMXxmb2xkcnxmb2xkcjF8ZnJvbURvdWJsZXxmcm9tRW51bXxmcm9tSW50fGZyb21JbnRlZ2VyfGZyb21JbnRlZ3JhbHxmcm9tUmF0aW9uYWx8ZnN0fGdjZHxnZXRDaGFyfGdldENvbnRlbnRzfGdldExpbmV8Z3JvdXB8aGVhZHxpZHxpblJhbmdlfGluZGV4fGluaXR8aW50VG9EaWdpdHxpbnRlcmFjdHxpb0Vycm9yfGlzQWxwaGF8aXNBbHBoYU51bXxpc0FzY2lpfGlzQ29udHJvbHxpc0Rlbm9ybWFsaXplZHxpc0RpZ2l0fGlzSGV4RGlnaXR8aXNJRUVFfGlzSW5maW5pdGV8aXNMb3dlcnxpc05hTnxpc05lZ2F0aXZlWmVyb3xpc09jdERpZ2l0fGlzUHJpbnR8aXNTcGFjZXxpc1VwcGVyfGl0ZXJhdGV8bGFzdHxsY218bGVuZ3RofGxleHxsZXhEaWdpdHN8bGV4TGl0Q2hhcnxsaW5lc3xsb2d8bG9nQmFzZXxsb29rdXB8bWFwfG1hcE18bWFwTV98bWF4fG1heEJvdW5kfG1heGltdW18bWF5YmV8bWlufG1pbkJvdW5kfG1pbmltdW18bW9kfG5lZ2F0ZXxub3R8bm90RWxlbXxudWxsfG51bWVyYXRvcnxvZGR8b3J8b3JkfG90aGVyd2lzZXxwYWNrfHBpfHByZWR8cHJpbUV4aXRXaXRofHByaW50fHByb2R1Y3R8cHJvcGVyRnJhY3Rpb258cHV0Q2hhcnxwdXRTdHJ8cHV0U3RyTG58cXVvdHxxdW90UmVtfHJhbmdlfHJhbmdlU2l6ZXxyZWFkfHJlYWREZWN8cmVhZEZpbGV8cmVhZEZsb2F0fHJlYWRIZXh8cmVhZElPfHJlYWRJbnR8cmVhZExpc3R8cmVhZExpdENoYXJ8cmVhZExufHJlYWRPY3R8cmVhZFBhcmVufHJlYWRTaWduZWR8cmVhZHN8cmVhZHNQcmVjfHJlYWxUb0ZyYWN8cmVjaXB8cmVtfHJlcGVhdHxyZXBsaWNhdGV8cmV0dXJufHJldmVyc2V8cm91bmR8c2NhbGVGbG9hdHxzY2FubHxzY2FubDF8c2NhbnJ8c2NhbnIxfHNlcXxzZXF1ZW5jZXxzZXF1ZW5jZV98c2hvd3xzaG93Q2hhcnxzaG93SW50fHNob3dMaXN0fHNob3dMaXRDaGFyfHNob3dQYXJlbnxzaG93U2lnbmVkfHNob3dTdHJpbmd8c2hvd3N8c2hvd3NQcmVjfHNpZ25pZmljYW5kfHNpZ251bXxzaW58c2luaHxzbmR8c29ydHxzcGFufHNwbGl0QXR8c3FydHxzdWJ0cmFjdHxzdWNjfHN1bXx0YWlsfHRha2V8dGFrZVdoaWxlfHRhbnx0YW5ofHRocmVhZFRvSU9SZXN1bHR8dG9FbnVtfHRvSW50fHRvSW50ZWdlcnx0b0xvd2VyfHRvUmF0aW9uYWx8dG9VcHBlcnx0cnVuY2F0ZXx1bmN1cnJ5fHVuZGVmaW5lZHx1bmxpbmVzfHVudGlsfHVud29yZHN8dW56aXB8dW56aXAzfHVzZXJFcnJvcnx3b3Jkc3x3cml0ZUZpbGV8emlwfHppcDN8emlwV2l0aHx6aXBXaXRoMylcXGIvLFxuXHQvLyBkZWNpbWFsIGludGVnZXJzIGFuZCBmbG9hdGluZyBwb2ludCBudW1iZXJzIHwgb2N0YWwgaW50ZWdlcnMgfCBoZXhhZGVjaW1hbCBpbnRlZ2Vyc1xuXHQnbnVtYmVyJzogL1xcYig/OlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT98MG9bMC03XSt8MHhbMC05YS1mXSspXFxiL2ksXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHQvLyBpbmZpeCBvcGVyYXRvclxuXHRcdFx0cGF0dGVybjogL2AoPzpbQS1aXVtcXHcnXSpcXC4pKltfYS16XVtcXHcnXSpgLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZnVuY3Rpb24gY29tcG9zaXRpb25cblx0XHRcdHBhdHRlcm46IC8oXFxzKVxcLig/PVxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gTW9zdCBvZiB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBtZWFuaW5nIG9mIGEgc2luZ2xlICcuJy5cblx0XHQvLyBJZiBpdCBzdGFuZHMgYWxvbmUgZnJlZWx5LCBpdCBpcyB0aGUgZnVuY3Rpb24gY29tcG9zaXRpb24uXG5cdFx0Ly8gSXQgbWF5IGFsc28gYmUgYSBzZXBhcmF0b3IgYmV0d2VlbiBhIG1vZHVsZSBuYW1lIGFuZCBhbiBpZGVudGlmaWVyID0+IG5vXG5cdFx0Ly8gb3BlcmF0b3IuIElmIGl0IGNvbWVzIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGl0IGlzIGFuXG5cdFx0Ly8gb3BlcmF0b3IgdG9vLlxuXHRcdC8vXG5cdFx0Ly8gVGhpcyByZWdleCBtZWFuczogL1stISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXSsvIHdpdGhvdXQgL1xcLi8uXG5cdFx0L1stISMkJSorPT8mQHx+Ojw+XlxcXFxcXC9dWy0hIyQlKis9PyZAfH4uOjw+XlxcXFxcXC9dKnxcXC5bLSEjJCUqKz0/JkB8fi46PD5eXFxcXFxcL10rLyxcblx0XSxcblx0Ly8gSW4gSGFza2VsbCwgbmVhcmx5IGV2ZXJ5dGhpbmcgaXMgYSB2YXJpYWJsZSwgZG8gbm90IGhpZ2hsaWdodCB0aGVzZS5cblx0J2h2YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86W0EtWl1bXFx3J10qXFwuKSpbX2Etel1bXFx3J10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQnY29uc3RhbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OltBLVpdW1xcdyddKlxcLikqW0EtWl1bXFx3J10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaHMgPSBQcmlzbS5sYW5ndWFnZXMuaGFza2VsbDtcblxuUHJpc20ubGFuZ3VhZ2VzLmhheGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHQvLyBTdHJpbmdzIGNhbiBiZSBtdWx0aS1saW5lXG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmFic3RyYWN0fGNsYXNzfGVudW18ZXh0ZW5kc3xpbXBsZW1lbnRzfGludGVyZmFjZXxuZXd8dHlwZWRlZilcXHMrKVtBLVpfXVxcdyovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdC8vIGJhc2VkIG9uIG5hbWluZyBjb252ZW50aW9uXG5cdFx0L1xcYltBLVpdXFx3Ki9cblx0XSxcblx0Ly8gVGhlIGZpbmFsIGxvb2stYWhlYWQgcHJldmVudHMgaGlnaGxpZ2h0aW5nIG9mIGtleXdvcmRzIGlmIGV4cHJlc3Npb25zIHN1Y2ggYXMgXCJoYXhlLm1hY3JvLkV4cHJcIlxuXHQna2V5d29yZCc6IC9cXGJ0aGlzXFxifFxcYig/OmFic3RyYWN0fGFzfGJyZWFrfGNhc2V8Y2FzdHxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZhdWx0fGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4dGVuZHN8ZXh0ZXJufGZpbmFsfGZvcnxmcm9tfGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGlubGluZXxpbnRlcmZhY2V8bWFjcm98bmV3fG51bGx8b3BlcmF0b3J8b3ZlcmxvYWR8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aHJvd3x0b3x0cnl8dHlwZWRlZnx1bnR5cGVkfHVzaW5nfHZhcnx3aGlsZSkoPyFcXC4pXFxiLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKig/OjxbXjw+XSo+XFxzKik/XFwoKS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvXFwuezN9fFxcK1xcK3wtLXwmJnxcXHxcXHx8LT58PT58KD86PDw/fD57MSwzfXxbLSsqLyUhPSZ8Xl0pPT98Wz86fl0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaGF4ZScsICdzdHJpbmcnLCB7XG5cdCdzdHJpbmctaW50ZXJwb2xhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcJCg/Olxcdyt8XFx7W157fV0rXFx9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5oYXhlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2hheGUnLCAnY2xhc3MtbmFtZScsIHtcblx0J3JlZ2V4Jzoge1xuXHRcdHBhdHRlcm46IC9+XFwvKD86W15cXC9cXFxcXFxyXFxuXXxcXFxcLikrXFwvW2Etel0qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVnZXgtZmxhZ3MnOiAvXFxiW2Etel0rJC8sXG5cdFx0XHQncmVnZXgtc291cmNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXih+XFwvKVtcXHNcXFNdKyg/PVxcLyQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1yZWdleCcsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJlZ2V4XG5cdFx0XHR9LFxuXHRcdFx0J3JlZ2V4LWRlbGltaXRlcic6IC9eflxcL3xcXC8kLyxcblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdoYXhlJywgJ2tleXdvcmQnLCB7XG5cdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0cGF0dGVybjogLyMoPzplbHNlfGVsc2VpZnxlbmR8aWYpXFxiLiovLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdtZXRhZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvQDo/W1xcdy5dKy8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdyZWlmaWNhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFwkKD86XFx3K3woPz1cXHspKS8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaGNsID0ge1xuXHQnY29tbWVudCc6IC8oPzpcXC9cXC98IykuKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0J2hlcmVkb2MnOiB7XG5cdFx0cGF0dGVybjogLzw8LT8oXFx3K1xcYilbXFxzXFxTXSo/XlsgXFx0XSpcXDEvbSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzpkYXRhfHJlc291cmNlKVxccysoPzpcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiKSg/PVxccytcIltcXHctXStcIlxccytcXHspL2ksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3R5cGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhyZXNvdXJjZXxkYXRhfFxccyspKD86XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIikvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzpiYWNrZW5kfG1vZHVsZXxvdXRwdXR8cHJvdmlkZXJ8cHJvdmlzaW9uZXJ8dmFyaWFibGUpXFxzKyg/OltcXHctXSt8XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIilcXHMrKD89XFx7KS9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0eXBlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oYmFja2VuZHxtb2R1bGV8b3V0cHV0fHByb3ZpZGVyfHByb3Zpc2lvbmVyfHZhcmlhYmxlKVxccysoPzpbXFx3LV0rfFwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpXFxzKy9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0L1tcXHctXSsoPz1cXHMrXFx7KS9cblx0XSxcblx0J3Byb3BlcnR5JzogW1xuXHRcdC9bLVxcd1xcLl0rKD89XFxzKj0oPyE9KSkvLFxuXHRcdC9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pK1wiKD89XFxzKls6PV0pLyxcblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFwkXCJdfFxcXFxbXFxzXFxTXXxcXCQoPzooPz1cIil8XFwkKyg/IVxcJCl8W15cIiR7XSl8XFwkXFx7KD86W157fVwiXXxcIig/OlteXFxcXFwiXXxcXFxcW1xcc1xcU10pKlwiKSpcXH0pKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteJF0pXFwkXFx7KD86W157fVwiXXxcIig/OlteXFxcXFwiXXxcXFxcW1xcc1xcU10pKlwiKSpcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndHlwZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y291bnR8ZGF0YXxsb2NhbHxtb2R1bGV8cGF0aHxzZWxmfHRlcnJhZm9ybXx2YXIpXFxiXFwuKVtcXHdcXCpdKy9pLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzpjb3VudHxkYXRhfGxvY2FsfG1vZHVsZXxwYXRofHNlbGZ8dGVycmFmb3JtfHZhcilcXGIvaSxcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxcKCkvLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIi8sXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifFxcYlxcZCsoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT8vaSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyFcXCQjJSYnKCkqKywuXFwvOzw9PkBcXFtcXFxcXFxdXmB7fH1+PzpdLyxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHR9XG5cdH0sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8XFxiXFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspPy9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWz1cXFtcXF17fV0vLFxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmhsc2wgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge1xuXG5cdC8vIFJlZ2FyZGluZyBrZXl3b3JkcyBhbmQgY2xhc3MgbmFtZXM6XG5cdC8vIFRoZSBsaXN0IG9mIGFsbCBrZXl3b3JkcyB3YXMgc3BsaXQgaW50byAna2V5d29yZCcgYW5kICdjbGFzcy1uYW1lJyB0b2tlbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBjYXBpdGFsaXplZC5cblx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9kaXJlY3QzZGhsc2wvZHgtZ3JhcGhpY3MtaGxzbC1hcHBlbmRpeC1rZXl3b3Jkc1xuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2RpcmVjdDNkaGxzbC9keC1ncmFwaGljcy1obHNsLWFwcGVuZGl4LXJlc2VydmVkLXdvcmRzXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdFByaXNtLmxhbmd1YWdlcy5jWydjbGFzcy1uYW1lJ10sXG5cdFx0L1xcYig/OkFwcGVuZFN0cnVjdHVyZWRCdWZmZXJ8QmxlbmRTdGF0ZXxCdWZmZXJ8Qnl0ZUFkZHJlc3NCdWZmZXJ8Q29tcGlsZVNoYWRlcnxDb21wdXRlU2hhZGVyfENvbnN1bWVTdHJ1Y3R1cmVkQnVmZmVyfERlcHRoU3RlbmNpbFN0YXRlfERlcHRoU3RlbmNpbFZpZXd8RG9tYWluU2hhZGVyfEdlb21ldHJ5U2hhZGVyfEh1bGxzaGFkZXJ8SW5wdXRQYXRjaHxMaW5lU3RyZWFtfE91dHB1dFBhdGNofFBpeGVsU2hhZGVyfFBvaW50U3RyZWFtfFJXQnVmZmVyfFJXQnl0ZUFkZHJlc3NCdWZmZXJ8UldTdHJ1Y3R1cmVkQnVmZmVyfFJXVGV4dHVyZSg/OjFEfDFEQXJyYXl8MkR8MkRBcnJheXwzRCl8UmFzdGVyaXplclN0YXRlfFJlbmRlclRhcmdldFZpZXd8U2FtcGxlckNvbXBhcmlzb25TdGF0ZXxTYW1wbGVyU3RhdGV8U3RydWN0dXJlZEJ1ZmZlcnxUZXh0dXJlKD86MUR8MURBcnJheXwyRHwyREFycmF5fDJETVN8MkRNU0FycmF5fDNEfEN1YmV8Q3ViZUFycmF5KXxUcmlhbmdsZVN0cmVhbXxWZXJ0ZXhTaGFkZXIpXFxiL1xuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHQvLyBITFNMIGtleXdvcmRcblx0XHQvXFxiKD86YXNtfGFzbV9mcmFnbWVudHxhdXRvfGJyZWFrfGNhc2V8Y2F0Y2h8Y2J1ZmZlcnxjZW50cm9pZHxjaGFyfGNsYXNzfGNvbHVtbl9tYWpvcnxjb21waWxlfGNvbXBpbGVfZnJhZ21lbnR8Y29uc3R8Y29uc3RfY2FzdHxjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkaXNjYXJkfGRvfGR5bmFtaWNfY2FzdHxlbHNlfGVudW18ZXhwbGljaXR8ZXhwb3J0fGV4dGVybnxmb3J8ZnJpZW5kfGZ4Z3JvdXB8Z290b3xncm91cHNoYXJlZHxpZnxpbnxpbmxpbmV8aW5vdXR8aW50ZXJmYWNlfGxpbmV8bGluZWFkanxsaW5lYXJ8bG9uZ3xtYXRyaXh8bXV0YWJsZXxuYW1lc3BhY2V8bmV3fG5vaW50ZXJwb2xhdGlvbnxub3BlcnNwZWN0aXZlfG9wZXJhdG9yfG91dHxwYWNrb2Zmc2V0fHBhc3N8cGl4ZWxmcmFnbWVudHxwb2ludHxwcmVjaXNlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWdpc3RlcnxyZWludGVycHJldF9jYXN0fHJldHVybnxyb3dfbWFqb3J8c2FtcGxlfHNhbXBsZXJ8c2hhcmVkfHNob3J0fHNpZ25lZHxzaXplb2Z8c25vcm18c3RhdGVibG9ja3xzdGF0ZWJsb2NrX3N0YXRlfHN0YXRpY3xzdGF0aWNfY2FzdHxzdHJpbmd8c3RydWN0fHN3aXRjaHx0YnVmZmVyfHRlY2huaXF1ZXx0ZWNobmlxdWUxMHx0ZWNobmlxdWUxMXx0ZW1wbGF0ZXx0ZXh0dXJlfHRoaXN8dGhyb3d8dHJpYW5nbGV8dHJpYW5nbGVhZGp8dHJ5fHR5cGVkZWZ8dHlwZW5hbWV8dW5pZm9ybXx1bmlvbnx1bm9ybXx1bnNpZ25lZHx1c2luZ3x2ZWN0b3J8dmVydGV4ZnJhZ21lbnR8dmlydHVhbHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYi8sXG5cdFx0Ly8gc2NhbGFyLCB2ZWN0b3IsIGFuZCBtYXRyaXggdHlwZXNcblx0XHQvXFxiKD86Ym9vbHxkb3VibGV8ZHdvcmR8ZmxvYXR8aGFsZnxpbnR8bWluKD86MTBmbG9hdHwxMmludHwxNig/OmZsb2F0fGludHx1aW50KSl8dWludCkoPzpbMS00XSg/OnhbMS00XSk/KT9cXGIvXG5cdF0sXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZGlyZWN0M2RobHNsL2R4LWdyYXBoaWNzLWhsc2wtYXBwZW5kaXgtZ3JhbW1hciNmbG9hdGluZy1wb2ludC1udW1iZXJzXG5cdCdudW1iZXInOiAvKD86KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspP3xcXGIweFtcXGRhLWZBLUZdKylbZkZoSGxMdVVdP1xcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ob29uID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvOjouKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIl0qXCJ8J1teJ10qJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb25zdGFudCc6IC8lKD86XFwuW255XXxbXFx3LV0rKS8sXG5cdCdjbGFzcy1uYW1lJzogL0AoPzpbYS16MC05LV0qW2EtejAtOV0pP3xcXCovaSxcblx0J2Z1bmN0aW9uJzogLyg/OlxcK1stK10gezJ9KT8oPzpbYS16XSg/OlthLXowLTktXSpbYS16MC05XSk/KS8sXG5cdCdrZXl3b3JkJzogL1xcLltcXF5cXCtcXCo9XFw/XXwhWz48OlxcLj1cXD8hXXw9Wz58OixcXC5cXC1cXF48KzsvflxcKlxcP118XFw/Wz58OlxcLlxcLVxcXjxcXCsmfj1AIV18XFx8W1xcJF8lOlxcLlxcLVxcXn5cXCo9QFxcP118XFwrW3xcXCRcXCtcXCpdfDpbX1xcLVxcXlxcK35cXCpdfCVbXzpcXC5cXC1cXF5cXCt+XFwqPV18XFxeW3w6XFwuXFwtXFwrJn5cXCo9XFw/XXxcXCRbfF8lOjw+XFwtXFxeJn5APVxcP118O1s6PFxcKztcXC9+XFwqPV18fls+fFxcJF8lPFxcK1xcLyY9XFw/IV18LS18PT0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBoZWFkZXJWYWx1ZU9mKG5hbWUpIHtcblx0XHRyZXR1cm4gUmVnRXhwKCcoXig/OicgKyBuYW1lICsgJyk6WyBcXHRdKig/IVsgXFx0XSkpW15dKycsICdpJyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuaHR0cCA9IHtcblx0XHQncmVxdWVzdC1saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpDT05ORUNUfERFTEVURXxHRVR8SEVBRHxPUFRJT05TfFBBVENIfFBPU1R8UFJJfFBVVHxTRUFSQ0h8VFJBQ0UpXFxzKD86aHR0cHM/OlxcL1xcL3xcXC8pXFxTKlxcc0hUVFBcXC9bXFxkLl0rL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gSFRUUCBNZXRob2Rcblx0XHRcdFx0J21ldGhvZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXltBLVpdK1xcYi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gUmVxdWVzdCBUYXJnZXQgZS5nLiBodHRwOi8vZXhhbXBsZS5jb20sIC9wYXRoL3RvL2ZpbGVcblx0XHRcdFx0J3JlcXVlc3QtdGFyZ2V0Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccykoPzpodHRwcz86XFwvXFwvfFxcLylcXFMqKD89XFxzKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3VybCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudXJpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIEhUVFAgVmVyc2lvblxuXHRcdFx0XHQnaHR0cC12ZXJzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccylIVFRQXFwvW1xcZC5dKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3Jlc3BvbnNlLXN0YXR1cyc6IHtcblx0XHRcdHBhdHRlcm46IC9eSFRUUFxcL1tcXGQuXSsgXFxkKyAuKy9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEhUVFAgVmVyc2lvblxuXHRcdFx0XHQnaHR0cC12ZXJzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eSFRUUFxcL1tcXGQuXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFN0YXR1cyBDb2RlXG5cdFx0XHRcdCdzdGF0dXMtY29kZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMpXFxkKyg/PVxccykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFJlYXNvbiBQaHJhc2Vcblx0XHRcdFx0J3JlYXNvbi1waHJhc2UnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKS4rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaGVhZGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15bXFx3LV0rOi4rKD86KD86XFxyXFxuP3xcXG4pWyBcXHRdLispKi9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdoZWFkZXItdmFsdWUnOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvQ29udGVudC1TZWN1cml0eS1Qb2xpY3kvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFsnY3NwJywgJ2xhbmd1YWdlcy1jc3AnXSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmNzcFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvUHVibGljLUtleS1QaW5zKD86LVJlcG9ydC1Pbmx5KT8vLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFsnaHBrcCcsICdsYW5ndWFnZXMtaHBrcCddLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuaHBrcFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eS8uc291cmNlKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogWydoc3RzJywgJ2xhbmd1YWdlcy1oc3RzJ10sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5oc3RzXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBoZWFkZXJWYWx1ZU9mKC9bXjpdKy8uc291cmNlKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdoZWFkZXItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlteOl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOi9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0Ly8gQ3JlYXRlIGEgbWFwcGluZyBvZiBDb250ZW50LVR5cGUgaGVhZGVycyB0byBsYW5ndWFnZSBkZWZpbml0aW9uc1xuXHR2YXIgbGFuZ3MgPSBQcmlzbS5sYW5ndWFnZXM7XG5cdHZhciBodHRwTGFuZ3VhZ2VzID0ge1xuXHRcdCdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzogbGFuZ3MuamF2YXNjcmlwdCxcblx0XHQnYXBwbGljYXRpb24vanNvbic6IGxhbmdzLmpzb24gfHwgbGFuZ3MuamF2YXNjcmlwdCxcblx0XHQnYXBwbGljYXRpb24veG1sJzogbGFuZ3MueG1sLFxuXHRcdCd0ZXh0L3htbCc6IGxhbmdzLnhtbCxcblx0XHQndGV4dC9odG1sJzogbGFuZ3MuaHRtbCxcblx0XHQndGV4dC9jc3MnOiBsYW5ncy5jc3MsXG5cdFx0J3RleHQvcGxhaW4nOiBsYW5ncy5wbGFpblxuXHR9O1xuXG5cdC8vIERlY2xhcmUgd2hpY2ggdHlwZXMgY2FuIGFsc28gYmUgc3VmZml4ZXNcblx0dmFyIHN1ZmZpeFR5cGVzID0ge1xuXHRcdCdhcHBsaWNhdGlvbi9qc29uJzogdHJ1ZSxcblx0XHQnYXBwbGljYXRpb24veG1sJzogdHJ1ZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgcGF0dGVybiBmb3IgdGhlIGdpdmVuIGNvbnRlbnQgdHlwZSB3aGljaCBtYXRjaGVzIGl0IGFuZCBhbnkgdHlwZSB3aGljaCBoYXMgaXQgYXMgYSBzdWZmaXguXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50VHlwZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0U3VmZml4UGF0dGVybihjb250ZW50VHlwZSkge1xuXHRcdHZhciBzdWZmaXggPSBjb250ZW50VHlwZS5yZXBsYWNlKC9eW2Etel0rXFwvLywgJycpO1xuXHRcdHZhciBzdWZmaXhQYXR0ZXJuID0gJ1xcXFx3Ky8oPzpbXFxcXHcuLV0rXFxcXCspKycgKyBzdWZmaXggKyAnKD8hWytcXFxcdy4tXSknO1xuXHRcdHJldHVybiAnKD86JyArIGNvbnRlbnRUeXBlICsgJ3wnICsgc3VmZml4UGF0dGVybiArICcpJztcblx0fVxuXG5cdC8vIEluc2VydCBlYWNoIGNvbnRlbnQgdHlwZSBwYXJzZXIgdGhhdCBoYXMgaXRzIGFzc29jaWF0ZWQgbGFuZ3VhZ2Vcblx0Ly8gY3VycmVudGx5IGxvYWRlZC5cblx0dmFyIG9wdGlvbnM7XG5cdGZvciAodmFyIGNvbnRlbnRUeXBlIGluIGh0dHBMYW5ndWFnZXMpIHtcblx0XHRpZiAoaHR0cExhbmd1YWdlc1tjb250ZW50VHlwZV0pIHtcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0XHR2YXIgcGF0dGVybiA9IHN1ZmZpeFR5cGVzW2NvbnRlbnRUeXBlXSA/IGdldFN1ZmZpeFBhdHRlcm4oY29udGVudFR5cGUpIDogY29udGVudFR5cGU7XG5cdFx0XHRvcHRpb25zW2NvbnRlbnRUeXBlLnJlcGxhY2UoL1xcLy9nLCAnLScpXSA9IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdCcoJyArIC9jb250ZW50LXR5cGU6XFxzKi8uc291cmNlICsgcGF0dGVybiArIC8oPzooPzpcXHJcXG4/fFxcbilbXFx3LV0uKikqKD86XFxyKD86XFxufCg/IVxcbikpfFxcbikvLnNvdXJjZSArICcpJyArXG5cdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIGxpdHRsZSBpbnRlcmVzdGluZzpcblx0XHRcdFx0XHQvLyBUaGUgSFRUUCBmb3JtYXQgc3BlYyByZXF1aXJlZCAxIGVtcHR5IGxpbmUgYmVmb3JlIHRoZSBib2R5IHRvIG1ha2UgZXZlcnl0aGluZyB1bmFtYmlndW91cy5cblx0XHRcdFx0XHQvLyBIb3dldmVyLCB3aGVuIHdyaXRpbmcgY29kZSBieSBoYW5kIChlLmcuIHRvIGRpc3BsYXkgb24gYSB3ZWJzaXRlKSBwZW9wbGUgY2FuIGZvcmdldCBhYm91dCB0aGlzLFxuXHRcdFx0XHRcdC8vIHNvIHdlIHdhbnQgdG8gYmUgbGliZXJhbCBoZXJlLiBXZSB3aWxsIGFsbG93IHRoZSBlbXB0eSBsaW5lIHRvIGJlIG9taXR0ZWQgaWYgdGhlIGZpcnN0IGxpbmUgb2Zcblx0XHRcdFx0XHQvLyB0aGUgYm9keSBkb2VzIG5vdCBzdGFydCB3aXRoIGEgW1xcdy1dIGNoYXJhY3RlciAoYXMgaGVhZGVycyBkbykuXG5cdFx0XHRcdFx0L1teIFxcdFxcdy1dW1xcc1xcU10qLy5zb3VyY2UsXG5cdFx0XHRcdFx0J2knXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogaHR0cExhbmd1YWdlc1tjb250ZW50VHlwZV1cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cdGlmIChvcHRpb25zKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaHR0cCcsICdoZWFkZXInLCBvcHRpb25zKTtcblx0fVxuXG59KFByaXNtKSk7XG5cbi8qKlxuICogT3JpZ2luYWwgYnkgU2NvdHQgSGVsbWUuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL3Njb3R0aGVsbWUuY28udWsvaHBrcC1jaGVhdC1zaGVldC9cbiAqL1xuXG5QcmlzbS5sYW5ndWFnZXMuaHBrcCA9IHtcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86aW5jbHVkZVN1YkRvbWFpbnN8bWF4LWFnZXxwaW4tc2hhMjU2fHByZWxvYWR8cmVwb3J0LXRvfHJlcG9ydC11cml8c3RyaWN0KSg/PVtcXHM7PV18JCkvaSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCdwdW5jdHVhdGlvbic6IC87L1xufTtcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBTY290dCBIZWxtZS5cbiAqXG4gKiBSZWZlcmVuY2U6IGh0dHBzOi8vc2NvdHRoZWxtZS5jby51ay9oc3RzLWNoZWF0LXNoZWV0L1xuICovXG5cblByaXNtLmxhbmd1YWdlcy5oc3RzID0ge1xuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzppbmNsdWRlU3ViRG9tYWluc3xtYXgtYWdlfHByZWxvYWQpKD89W1xcczs9XXwkKS9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdvcGVyYXRvcic6IC89Lyxcblx0J3B1bmN0dWF0aW9uJzogLzsvXG59O1xuXG4vLyBhY2NvcmRpbmcgdG8gdGhlIG9mZmljYWwgcmVmZXJlbmNlIChFTilcbi8vIGh0dHBzOi8vaWNoaWdvamFtLm5ldC9JY2hpZ29KYW0tZW4uaHRtbFxuUHJpc20ubGFuZ3VhZ2VzLmljaGlnb2phbSA9IHtcblx0J2NvbW1lbnQnOiAvKD86XFxCJ3xSRU0pKD86W15cXG5cXHJdKikvaSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFshIyQlJicoKSosXFwvOjs8PT4/XlxcdyArXFwtLl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC9cXEIjWzAtOUEtRl0rfFxcQmBbMDFdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdCdrZXl3b3JkJzogL1xcYig/OkJFRVB8QlBTfENBU0V8Q0xFQVJ8Q0xLfENMT3xDTFB8Q0xTfENMVHxDTFZ8Q09OVHxDT1BZfEVMU0V8RU5EfEZJTEV8RklMRVN8Rk9SfEdPU1VCfEdPVE98R1NCfElGfElOUFVUfEtCRHxMRUR8TEVUfExJU1R8TE9BRHxMT0NBVEV8TFJVTnxORVd8TkVYVHxPVVR8UExBWXxQT0tFfFBSSU5UfFBXTXxSRU18UkVOVU18UkVTRVR8UkVUVVJOfFJJR0hUfFJUTnxSVU58U0FWRXxTQ1JPTEx8U0xFRVB8U1JORHxTVEVQfFNUT1B8U1VCfFRFTVBPfFRIRU58VE98VUFSVHxWSURFT3xXQUlUKSg/OlxcJHxcXGIpL2ksXG5cdCdmdW5jdGlvbic6IC9cXGIoPzpBQlN8QU5BfEFTQ3xCSU58QlROfERFQ3xFTkR8RlJFRXxIRUxQfEhFWHxJMkNSfEkyQ1d8SU58SU5LRVl8TEVOfExJTkV8UEVFS3xSTkR8U0NSfFNPVU5EfFNUUnxUSUNLfFVTUnxWRVJ8VlBFRUt8WkVSKSg/OlxcJHxcXGIpL2ksXG5cdCdsYWJlbCc6IC8oPzpcXEJAXFxTKykvLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3xcXHxcXHx8JiZ8WytcXC0qXFwvPXwmXn4hXXxcXGIoPzpBTkR8Tk9UfE9SKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcWyw7OigpXFxdXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5pY29uID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86KD8hXFwxKVteXFxcXFxcclxcbl9dfFxcXFwufF8oPyFcXDEpKD86XFxyXFxufFtcXHNcXFNdKSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC9cXGIoPzpcXGQrclthLXpcXGRdK3xcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/KVxcYnxcXC5cXGQrXFxiL2ksXG5cdCdidWlsdGluLWtleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyYoPzphbGxvY2F0ZWR8YXNjaWl8Y2xvY2t8Y29sbGVjdGlvbnN8Y3NldHxjdXJyZW50fGRhdGV8ZGF0ZWxpbmV8ZGlnaXRzfGR1bXB8ZXxlcnJvcig/Om51bWJlcnx0ZXh0fHZhbHVlKT98ZXJyb3V0fGZhaWx8ZmVhdHVyZXN8ZmlsZXxob3N0fGlucHV0fGxjYXNlfGxldHRlcnN8bGV2ZWx8bGluZXxtYWlufG51bGx8b3V0cHV0fHBoaXxwaXxwb3N8cHJvZ25hbWV8cmFuZG9tfHJlZ2lvbnN8c291cmNlfHN0b3JhZ2V8c3ViamVjdHx0aW1lfHRyYWNlfHVjYXNlfHZlcnNpb24pXFxiLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXCRcXHcrLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGJ5fGNhc2V8Y3JlYXRlfGRlZmF1bHR8ZG98ZWxzZXxlbmR8ZXZlcnl8ZmFpbHxnbG9iYWx8aWZ8aW5pdGlhbHxpbnZvY2FibGV8bGlua3xsb2NhbHxuZXh0fG5vdHxvZnxwcm9jZWR1cmV8cmVjb3JkfHJlcGVhdHxyZXR1cm58c3RhdGljfHN1c3BlbmR8dGhlbnx0b3x1bnRpbHx3aGlsZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1cXHMqWyh7XXxcXHMqIVxccypcXFspLyxcblx0J29wZXJhdG9yJzogL1srLV06KD8hPSl8KD86W1xcLz9AXiUmXXxcXCtcXCs/fC0tP3w9PT89P3x+PT0/PT98XFwqXFwqP3xcXHxcXHxcXHw/fDwoPzotPj98PD89Pyl8Pj4/PT8pKD86Oj0pP3w6KD86PTo/KT98WyEuXFxcXHx+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fSw7XS9cbn07XG5cbi8vIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS91c2VyZ3VpZGUvZm9ybWF0X3BhcnNlL21lc3NhZ2VzL1xuLy8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRqL2NvbS9pYm0vaWN1L3RleHQvTWVzc2FnZUZvcm1hdC5odG1sXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gbGV2ZWxcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIG5lc3RlZChzb3VyY2UsIGxldmVsKSB7XG5cdFx0aWYgKGxldmVsIDw9IDApIHtcblx0XHRcdHJldHVybiAvW10vLnNvdXJjZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHNvdXJjZS5yZXBsYWNlKC88U0VMRj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmVzdGVkKHNvdXJjZSwgbGV2ZWwgLSAxKTsgfSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHN0cmluZ1BhdHRlcm4gPSAvJ1t7fTo9LF0oPzpbXiddfCcnKSonKD8hJykvO1xuXG5cdHZhciBlc2NhcGUgPSB7XG5cdFx0cGF0dGVybjogLycnLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fTtcblx0dmFyIHN0cmluZyA9IHtcblx0XHRwYXR0ZXJuOiBzdHJpbmdQYXR0ZXJuLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdlc2NhcGUnOiBlc2NhcGVcblx0XHR9XG5cdH07XG5cblx0dmFyIGFyZ3VtZW50U291cmNlID0gbmVzdGVkKFxuXHRcdC9cXHsoPzpbXnt9J118Jyg/IVt7fSwnXSl8Jyd8PFNUUj58PFNFTEY+KSpcXH0vLnNvdXJjZVxuXHRcdFx0LnJlcGxhY2UoLzxTVFI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm4uc291cmNlOyB9KSxcblx0XHQ4XG5cdCk7XG5cblx0dmFyIG5lc3RlZE1lc3NhZ2UgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKGFyZ3VtZW50U291cmNlKSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdtZXNzYWdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0J21lc3NhZ2UtZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvLi8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlc1snaWN1LW1lc3NhZ2UtZm9ybWF0J10gPSB7XG5cdFx0J2FyZ3VtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKGFyZ3VtZW50U291cmNlKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnYXJndW1lbnQtbmFtZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2Nob2ljZS1zdHlsZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRjL2NsYXNzaWN1XzFfMUNob2ljZUZvcm1hdC5odG1sI2RldGFpbHNcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKixcXHMqY2hvaWNlXFxzKixcXHMqKVxcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC8sXG5cdFx0XHRcdFx0XHRcdFx0J3JhbmdlJzoge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbKy1dPyg/OlxcZCsoPzpcXC5cXGQqKT98XFx1MjIxZSlcXHMqWzwjXFx1MjI2NF0vLFxuXHRcdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQnb3BlcmF0b3InOiAvWzwjXFx1MjI2NF0vLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQnbnVtYmVyJzogL1xcUysvXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRyZXN0OiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3BsdXJhbC1zdHlsZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRqL2NvbS9pYm0vaWN1L3RleHQvUGx1cmFsRm9ybWF0Lmh0bWwjOn46dGV4dD1QYXR0ZXJucyUyMGFuZCUyMFRoZWlyJTIwSW50ZXJwcmV0YXRpb25cblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKixcXHMqKD86cGx1cmFsfHNlbGVjdG9yZGluYWwpXFxzKixcXHMqKVxcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J29mZnNldCc6IC9eb2Zmc2V0OlxccypcXGQrLyxcblx0XHRcdFx0XHRcdFx0XHQnbmVzdGVkLW1lc3NhZ2UnOiBuZXN0ZWRNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3Rvcic6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC89XFxkK3xbXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL14oPzpmZXd8bWFueXxvbmV8b3RoZXJ8dHdvfHplcm8pJC9cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnc2VsZWN0LXN0eWxlJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3VuaWNvZGUtb3JnLmdpdGh1Yi5pby9pY3UtZG9jcy9hcGlkb2MvcmVsZWFzZWQvaWN1NGovY29tL2libS9pY3UvdGV4dC9TZWxlY3RGb3JtYXQuaHRtbCM6fjp0ZXh0PVBhdHRlcm5zJTIwYW5kJTIwVGhlaXIlMjBJbnRlcnByZXRhdGlvblxuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqLFxccypzZWxlY3RcXHMqLFxccyopXFxTKD86W1xcc1xcU10qXFxTKT8vLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0XHQnbmVzdGVkLW1lc3NhZ2UnOiBuZXN0ZWRNZXNzYWdlLFxuXHRcdFx0XHRcdFx0XHRcdCdzZWxlY3Rvcic6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXnt9Oj0sXFxzXSsvLFxuXHRcdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL15vdGhlciQvXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y2hvaWNlfHBsdXJhbHxzZWxlY3R8c2VsZWN0b3JkaW5hbClcXGIvLFxuXHRcdFx0XHRcdFx0J2FyZy10eXBlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZGF0ZXxkdXJhdGlvbnxudW1iZXJ8b3JkaW5hbHxzcGVsbG91dHx0aW1lKVxcYi8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnYXJnLXNrZWxldG9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKCxcXHMqKTo6W157fTo9LFxcc10rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdhcmctc3R5bGUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oLFxccyopKD86Y3VycmVuY3l8ZnVsbHxpbnRlZ2VyfGxvbmd8bWVkaXVtfHBlcmNlbnR8c2hvcnQpKD89XFxzKiQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdhcmctc3R5bGUtdGV4dCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXlxccyosXFxzKig/PVxcUykpLy5zb3VyY2UgKyBuZXN0ZWQoLyg/Oltee30nXXwnW14nXSonfFxceyg/OjxTRUxGPik/XFx9KSsvLnNvdXJjZSwgOCkgKyAnJCcpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhcmd1bWVudC1kZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLy4vLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0J3N0cmluZyc6IHN0cmluZ1xuXHR9O1xuXG5cdG5lc3RlZE1lc3NhZ2UuaW5zaWRlLm1lc3NhZ2UuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXTtcblx0UHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXS5hcmd1bWVudC5pbnNpZGUuY29udGVudC5pbnNpZGVbJ2Nob2ljZS1zdHlsZSddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzWydpY3UtbWVzc2FnZS1mb3JtYXQnXTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWRyaXMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdoYXNrZWxsJywge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86KD86LS18XFx8XFx8XFx8KS4qJHxcXHstW1xcc1xcU10qPy1cXH0pL20sXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OlR5cGV8Y2FzZXxjbGFzc3xjb2RhdGF8Y29uc3RydWN0b3J8Y29yZWNvcmR8ZGF0YXxkb3xkc2x8ZWxzZXxleHBvcnR8aWZ8aW1wbGVtZW50YXRpb258aW1wbGljaXR8aW1wb3J0fGltcG9zc2libGV8aW58aW5maXh8aW5maXhsfGluZml4cnxpbnN0YW5jZXxpbnRlcmZhY2V8bGV0fG1vZHVsZXxtdXR1YWx8bmFtZXNwYWNlfG9mfHBhcmFtZXRlcnN8cGFydGlhbHxwb3N0dWxhdGV8cHJpdmF0ZXxwcm9vZnxwdWJsaWN8cXVvdGVHb2FsfHJlY29yZHxyZXdyaXRlfHN5bnRheHx0aGVufHRvdGFsfHVzaW5nfHdoZXJlfHdpdGgpXFxiLyxcblx0J2J1aWx0aW4nOiB1bmRlZmluZWRcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpZHJpcycsICdrZXl3b3JkJywge1xuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHMqaW1wb3J0XFxzKykoPzpbQS1aXVtcXHcnXSopKD86XFwuW0EtWl1bXFx3J10qKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWRyID0gUHJpc20ubGFuZ3VhZ2VzLmlkcmlzO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5pZ25vcmUgPSB7XG5cdFx0Ly8gaHR0cHM6Ly9naXQtc2NtLmNvbS9kb2NzL2dpdGlnbm9yZVxuXHRcdCdjb21tZW50JzogL14jLiovbSxcblx0XHQnZW50cnknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxTKD86LiooPzooPzpcXFxcICl8XFxTKSk/Lyxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvXiF8XFwqXFwqP3xcXD8vLFxuXHRcdFx0XHQncmVnZXgnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFxbW15cXFtcXF1dKlxcXS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwvL1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ2l0aWdub3JlID0gUHJpc20ubGFuZ3VhZ2VzLmlnbm9yZTtcblx0UHJpc20ubGFuZ3VhZ2VzLmhnaWdub3JlID0gUHJpc20ubGFuZ3VhZ2VzLmlnbm9yZTtcblx0UHJpc20ubGFuZ3VhZ2VzLm5wbWlnbm9yZSA9IFByaXNtLmxhbmd1YWdlcy5pZ25vcmU7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluZm9ybTcgPSB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N1YnN0aXR1dGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcW1teXFxbXFxdXStcXF0vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcW3xcXF0vLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcW1teXFxbXFxdXStcXF0vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndGl0bGUnOiB7XG5cdFx0cGF0dGVybjogL15bIFxcdF0qKD86Ym9va3xjaGFwdGVyfHBhcnQoPyEgb2YpfHNlY3Rpb258dGFibGV8dm9sdW1lKVxcYi4rL2ltLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKSg/OlxcYlxcZCsoPzpcXC5cXGQrKT8oPzpcXF5cXGQrKT8oPzooPyFcXGQpXFx3Kyk/fFxcYig/OmVpZ2h0fGVsZXZlbnxmaXZlfGZvdXJ8bmluZXxvbmV8c2V2ZW58c2l4fHRlbnx0aHJlZXx0d2VsdmV8dHdvKSlcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3ZlcmInOiB7XG5cdFx0cGF0dGVybjogLyhefFteLV0pXFxiKD86YW5zd2VyaW5nfGFwcGx5aW5nIHRvfGFyZXxhc2tpbmd8YXR0YWNraW5nfGJlKD86aW5nKT98YnVybmluZ3xidXlpbmd8Y2FsbGVkfGNhcnJpZXN8Y2FycnkoPyEgb3V0KXxjYXJyeWluZ3xjbGltYmluZ3xjbG9zaW5nfGNvbmNlYWwoPzppbmd8cyk/fGNvbnN1bHRpbmd8Y29udGFpbig/OmluZ3xzKT98Y3V0dGluZ3xkcmlua2luZ3xkcm9wcGluZ3xlYXRpbmd8ZW5jbG9zKD86ZXM/fGluZyl8ZW50ZXJpbmd8ZXhhbWluaW5nfGV4aXRpbmd8Z2V0dGluZ3xnaXZpbmd8Z29pbmd8aGEoPzpzfHZlfHZpbmcpfGhvbGQoPzppbmd8cyk/fGltcGwoPzppZXN8eSl8aW5jb3Jwb3JhdCg/OmVzP3xpbmcpfGluc2VydGluZ3xpc3xqdW1waW5nfGtpc3Npbmd8bGlzdGVuaW5nfGxvY2tpbmd8bG9va2luZ3xtZWFuKD86aW5nfHMpP3xvcGVuaW5nfHByb3ZpZCg/OmVzP3xpbmcpfHB1bGxpbmd8cHVzaGluZ3xwdXR0aW5nfHJlbGF0KD86ZXM/fGluZyl8cmVtb3Zpbmd8c2VhcmNoaW5nfHNlZSg/OmluZ3xzKT98c2V0dGluZ3xzaG93aW5nfHNpbmdpbmd8c2xlZXBpbmd8c21lbGxpbmd8c3F1ZWV6aW5nfHN1cHBvcnQoPzppbmd8cyk/fHN3ZWFyaW5nfHN3aXRjaGluZ3x0YWtpbmd8dGFzdGluZ3x0ZWxsaW5nfHRoaW5raW5nfHRocm93aW5nfHRvdWNoaW5nfHR1cm5pbmd8dHlpbmd8dW5sb2NrKD86aW5nfHMpP3x2YXIoPzppZXN8eXx5aW5nKXx3YWl0aW5nfHdha2luZ3x3YXZpbmd8d2Vhcig/OmluZ3xzKT8pXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFmdGVyfGJlZm9yZXxjYXJyeSBvdXR8Y2hlY2t8Y29udGludWUgdGhlIGFjdGlvbnxkZWZpbml0aW9uKD89ICo6KXxkbyBub3RoaW5nfGVsc2V8ZW5kICg/OmlmfHRoZSBzdG9yeXx1bmxlc3MpfGV2ZXJ5IHR1cm58aWZ8aW5jbHVkZXxpbnN0ZWFkKD86IG9mKT98bGV0fG1vdmV8bm98bm93fG90aGVyd2lzZXxyZXBlYXR8cmVwb3J0fHJlc3VtZSB0aGUgc3Rvcnl8cnVsZSBmb3J8cnVubmluZyB0aHJvdWdofHNheSg/OmluZyk/fHN0b3AgdGhlIGFjdGlvbnx0ZXN0fHRyeSg/OmluZyk/fHVuZGVyc3RhbmR8dW5sZXNzfHVzZXx3aGVufHdoaWxlfHllcylcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFkamFjZW50KD8hIHRvKXxjYXJyaWVkfGNsb3NlZHxjb25jZWFsZWR8Y29udGFpbmVkfGRhcmt8ZGVzY3JpYmVkfGVkaWJsZXxlbXB0eXxlbmNsb3NlZHxlbnRlcmFibGV8ZXZlbnxmZW1hbGV8Zml4ZWQgaW4gcGxhY2V8ZnVsbHxoYW5kbGVkfGhlbGR8aW1wcm9wZXItbmFtZWR8aW5jb3Jwb3JhdGVkfGluZWRpYmxlfGludmlzaWJsZXxsaWdodGVkfGxpdHxsb2NrKD86YWJsZXxlZCl8bWFsZXxtYXJrZWQgZm9yIGxpc3Rpbmd8bWVudGlvbmVkfG5lZ2F0aXZlfG5ldXRlcnxub24tKD86ZW1wdHl8ZnVsbHxyZWN1cnJpbmcpfG9kZHxvcGFxdWV8b3Blbig/OmFibGUpP3xwbHVyYWwtbmFtZWR8cG9ydGFibGV8cG9zaXRpdmV8cHJpdmF0ZWx5LW5hbWVkfHByb3Blci1uYW1lZHxwcm92aWRlZHxwdWJsaWNhbGx5LW5hbWVkfHB1c2hhYmxlIGJldHdlZW4gcm9vbXN8cmVjdXJyaW5nfHJlbGF0ZWR8cnViYmluZ3xzY2VuZXJ5fHNlZW58c2luZ3VsYXItbmFtZWR8c3VwcG9ydGVkfHN3aW5naW5nfHN3aXRjaCg/OmFibGV8ZWQoPzogb2ZmfCBvbik/KXx0b3VjaCg/OmFibGV8ZWQpfHRyYW5zcGFyZW50fHVuY29uY2VhbGVkfHVuZGVzY3JpYmVkfHVubGl0fHVubG9ja2VkfHVubWFya2VkIGZvciBsaXN0aW5nfHVubWVudGlvbmVkfHVub3BlbmFibGV8dW50b3VjaGFibGV8dW52aXNpdGVkfHZhcmlhYmxlfHZpc2libGV8dmlzaXRlZHx3ZWFyYWJsZXx3b3JuKVxcYig/IS0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J3Bvc2l0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFib3ZlfGFkamFjZW50IHRvfGJhY2sgc2lkZSBvZnxiZWxvd3xiZXR3ZWVufGRvd258ZWFzdHxldmVyeXdoZXJlfGZyb250IHNpZGV8aGVyZXxpbnxpbnNpZGUoPzogZnJvbSk/fG5vcnRoKD86ZWFzdHx3ZXN0KT98bm93aGVyZXxvbig/OiB0b3Agb2YpP3xvdGhlciBzaWRlfG91dHNpZGUoPzogZnJvbSk/fHBhcnRzPyBvZnxyZWdpb25hbGx5IGlufHNvdXRoKD86ZWFzdHx3ZXN0KT98dGhyb3VnaHx1cHx3ZXN0fHdpdGhpbilcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzphY3Rpb25zP3xhY3Rpdml0KD86aWVzfHkpfGFjdG9ycz98YW5pbWFscz98YmFja2Ryb3BzP3xjb250YWluZXJzP3xkZXZpY2VzP3xkaXJlY3Rpb25zP3xkb29ycz98aG9sZGVycz98a2luZHM/fGxpc3RzP3xtW2FlXW58bm9ib2R5fG5vdGhpbmd8bm91bnM/fG51bWJlcnM/fG9iamVjdHM/fHBlb3BsZXxwZXJzb25zP3xwbGF5ZXIoPzoncyBob2xkYWxsKT98cmVnaW9ucz98cmVsYXRpb25zP3xyb29tcz98cnVsZSg/OmJvb2spP3M/fHNjZW5lcz98c29tZW9uZXxzb21ldGhpbmd8c3VwcG9ydGVycz98dGFibGVzP3x0ZXh0cz98dGhpbmdzP3x0aW1lfHZlaGljbGVzP3x3b21bYWVdbilcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1suLDo7KCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5mb3JtN1snc3RyaW5nJ10uaW5zaWRlWydzdWJzdGl0dXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5pbmZvcm03O1xuLy8gV2UgZG9uJ3Qgd2FudCB0aGUgcmVtYWluaW5nIHRleHQgaW4gdGhlIHN1YnN0aXR1dGlvbiB0byBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc3RyaW5nLlxuUHJpc20ubGFuZ3VhZ2VzLmluZm9ybTdbJ3N0cmluZyddLmluc2lkZVsnc3Vic3RpdHV0aW9uJ10uaW5zaWRlLnJlc3QudGV4dCA9IHtcblx0cGF0dGVybjogL1xcUyg/OlxccypcXFMpKi8sXG5cdGFsaWFzOiAnY29tbWVudCdcbn07XG5cblByaXNtLmxhbmd1YWdlcy5pbmkgPSB7XG5cblx0LyoqXG5cdCAqIFRoZSBjb21wb25lbnQgbWltaWNzIHRoZSBiZWhhdmlvciBvZiB0aGUgV2luMzIgQVBJIHBhcnNlci5cblx0ICpcblx0ICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL1ByaXNtSlMvcHJpc20vaXNzdWVzLzI3NzUjaXNzdWVjb21tZW50LTc4NzQ3NzcyM31cblx0ICovXG5cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXGZcXHRcXHZdKilbIztdW15cXG5cXHJdKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3NlY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXGZcXHRcXHZdKilcXFtbXlxcblxcclxcXV0qXFxdPy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnc2VjdGlvbi1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFtbIFxcZlxcdFxcdl0qKVteIFxcZlxcdFxcdlxcXV0rKD86WyBcXGZcXHRcXHZdK1teIFxcZlxcdFxcdlxcXV0rKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdL1xuXHRcdH1cblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcZlxcdFxcdl0qKVteIFxcZlxcblxcclxcdFxcdj1dKyg/OlsgXFxmXFx0XFx2XStbXiBcXGZcXG5cXHJcXHRcXHY9XSspKig/PVsgXFxmXFx0XFx2XSo9KS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdCd2YWx1ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKD1bIFxcZlxcdFxcdl0qKVteIFxcZlxcblxcclxcdFxcdl0rKD86WyBcXGZcXHRcXHZdK1teIFxcZlxcblxcclxcdFxcdl0rKSovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbm5lci12YWx1ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXCJ8JykuKyg/PVxcMSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3B1bmN0dWF0aW9uJzogLz0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW8gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwvXFwvLip8Iy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCIoPzpcXFxcW1xcc1xcU118KD8hXCJcIlwiKVteXFxcXF0pKlwiXCJcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFxcclxcblwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphY3RpdmF0ZXxhY3RpdmVDb3JvQ291bnR8YXNTdHJpbmd8YmxvY2t8YnJlYWt8Y2FsbHxjYXRjaHxjbG9uZXxjb2xsZWN0R2FyYmFnZXxjb21waWxlU3RyaW5nfGNvbnRpbnVlfGRvfGRvRmlsZXxkb01lc3NhZ2V8ZG9TdHJpbmd8ZWxzZXxlbHNlaWZ8ZXhpdHxmb3J8Zm9yZWFjaHxmb3J3YXJkfGdldEVudmlyb25tZW50VmFyaWFibGV8Z2V0U2xvdHxoYXNTbG90fGlmfGlmRmFsc2V8aWZOaWx8aWZOaWxFdmFsfGlmVHJ1ZXxpc0FjdGl2ZXxpc05pbHxpc1Jlc3VtYWJsZXxsaXN0fG1lc3NhZ2V8bWV0aG9kfHBhcmVudHxwYXNzfHBhdXNlfHBlcmZvcm18cGVyZm9ybVdpdGhBcmdMaXN0fHByaW50fHByaW50bG58cHJvdG98cmFpc2V8cmFpc2VSZXN1bWFibGV8cmVtb3ZlU2xvdHxyZXNlbmR8cmVzdW1lfHNjaGVkdWxlclNsZWVwU2Vjb25kc3xzZWxmfHNlbmRlcnxzZXRTY2hlZHVsZXJTbGVlcFNlY29uZHN8c2V0U2xvdHxzaGFsbG93Q29weXxzbG90TmFtZXN8c3VwZXJ8c3lzdGVtfHRoZW58dGhpc0Jsb2NrfHRoaXNDb250ZXh0fHRyeXx0eXBlfHVuaXF1ZUlkfHVwZGF0ZVNsb3R8d2FpdHx3aGlsZXx3cml0ZXx5aWVsZClcXGIvLFxuXHQnYnVpbHRpbic6IC9cXGIoPzpBcnJheXxBdWRpb0RldmljZXxBdWRpb01peGVyfEJpZ051bXxCbG9ja3xCb3h8QnVmZmVyfENGdW5jdGlvbnxDR0l8Q29sb3J8Q3Vyc2VzfERCTXxETlNSZXNvbHZlcnxET0Nvbm5lY3Rpb258RE9Qcm94eXxET1NlcnZlcnxEYXRlfERpcmVjdG9yeXxEdXJhdGlvbnxEeW5MaWJ8RXJyb3J8RXhjZXB0aW9ufEZGVHxGaWxlfEZubWF0Y2h8Rm9udHxGdXR1cmV8R0x8R0xFfEdMU2Npc3NvcnxHTFV8R0xVQ3lsaW5kZXJ8R0xVUXVhZHJpY3xHTFVTcGhlcmV8R0xVVHxIb3N0fEltYWdlfEltcG9ydGVyfExpbmtMaXN0fExpc3R8TG9iYnl8TG9jYWxzfE1ENXxNUDNEZWNvZGVyfE1QM0VuY29kZXJ8TWFwfE1lc3NhZ2V8TW92aWV8Tm90aWZpY2F0aW9ufE51bWJlcnxPYmplY3R8T3BlbkdMfFBvaW50fFByb3Rvc3xSYW5kb218UmVnZXh8U0dNTHxTR01MRWxlbWVudHxTR01MUGFyc2VyfFNRTGl0ZXxTZXF1ZW5jZXxTZXJ2ZXJ8U2hvd01lc3NhZ2V8U2xlZXB5Q2F0fFNsZWVweUNhdEN1cnNvcnxTb2NrZXR8U29ja2V0TWFuYWdlcnxTb3VuZHxTb3VwfFN0b3JlfFN0cmluZ3xUcmVlfFVEUFNlbmRlcnxVUERSZWNlaXZlcnxVUkx8VXNlcnxXYXJuaW5nfFdlYWtMaW5rKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmUtP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWz0hKi8lK1xcLV4mfF09fD4+Pz0/fDw8Pz0/fDo/Oj89fFxcK1xcKz98LS0/fFxcKlxcKj98XFwvXFwvP3wlfFxcfFxcfD98JiY/fFxcYig/OmFuZHxub3R8b3J8cmV0dXJuKVxcYnxAQD98XFw/XFw/P3xcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcYk5CXFwuLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86Jyd8W14nXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Oig/OkNSfExGfGFkdmVyYnxjb25qdW5jdGlvbnxkZWZ8ZGVmaW5lfGR5YWR8bW9uYWR8bm91bnx2ZXJiKVxcYnwoPzphc3NlcnR8YnJlYWt8Y2FzZXxjYXRjaFtkdF0/fGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGVuZHxmY2FzZXxmb3J8Zm9yX1xcdyt8Z290b19cXHcrfGlmfGxhYmVsX1xcdyt8cmV0dXJufHNlbGVjdHx0aHJvd3x0cnl8d2hpbGV8d2hpbHN0KVxcLikvLFxuXHQndmVyYic6IHtcblx0XHQvLyBOZWdhdGl2ZSBsb29rLWFoZWFkIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmdcblx0XHQvLyBvZiBeOiA7LiA9LiA9OiAhLiAhOlxuXHRcdHBhdHRlcm46IC8oPyFcXF46fDtcXC58Wz0hXVsuOl0pKD86XFx7KD86XFwufDo6Pyk/fHAoPzpcXC5cXC4/fDopfFs9IVxcXV18Wzw+KypcXC0lJHwsI11bLjpdP3xbP15dXFwuP3xbO1xcW106P3xbfn1cImldWy46XXxbQUNlRUlqTG9yXVxcLnwoPzpbX1xcL1xcXFxxc3V4XXxfP1xcZCk6KS8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYl8/KD86KD8hXFxkOilcXGQrKD86XFwuXFxkKyk/KD86KD86YWR8YXJ8W2VqcHhdKV8/XFxkKyg/OlxcLlxcZCspPykqKD86Yl8/W1xcZGEtel0rKD86XFwuW1xcZGEtel0rKT8pP3xfXFxiKD8hXFwuKSkvLFxuXHQnYWR2ZXJiJzoge1xuXHRcdHBhdHRlcm46IC9bfn1dfFtcXC9cXFxcXVxcLj98W2JmTV1cXC58dFsuOl0vLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fSxcblx0J29wZXJhdG9yJzogL1s9YV1bLjpdfF9cXC4vLFxuXHQnY29uanVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyYoPzpcXC46P3w6KT98Wy46QF1bLjpdP3xbIURdWy46XXxbO2RIVF1cXC58YDo/fFtcXF5MU106fFwiLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86YWJzdHJhY3R8YXNzZXJ0fGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4cG9ydHN8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGlmfGltcGxlbWVudHN8aW1wb3J0fGluc3RhbmNlb2Z8aW50fGludGVyZmFjZXxsb25nfG1vZHVsZXxuYXRpdmV8bmV3fG5vbi1zZWFsZWR8bnVsbHxvcGVufG9wZW5zfHBhY2thZ2V8cGVybWl0c3xwcml2YXRlfHByb3RlY3RlZHxwcm92aWRlc3xwdWJsaWN8cmVjb3JkKD8hXFxzKlsoKXt9W1xcXTw+PSV+LjosOz8rXFwtKi8mfF5dKXxyZXF1aXJlc3xyZXR1cm58c2VhbGVkfHNob3J0fHN0YXRpY3xzdHJpY3RmcHxzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHRoaXN8dGhyb3d8dGhyb3dzfHRvfHRyYW5zaWVudHx0cmFuc2l0aXZlfHRyeXx1c2VzfHZhcnx2b2lkfHZvbGF0aWxlfHdoaWxlfHdpdGh8eWllbGQpXFxiLztcblxuXHQvLyBmdWxsIHBhY2thZ2UgKG9wdGlvbmFsKSArIHBhcmVudCBjbGFzc2VzIChvcHRpb25hbClcblx0dmFyIGNsYXNzTmFtZVByZWZpeCA9IC8oPzpbYS16XVxcdypcXHMqXFwuXFxzKikqKD86W0EtWl1cXHcqXFxzKlxcLlxccyopKi8uc291cmNlO1xuXG5cdC8vIGJhc2VkIG9uIHRoZSBqYXZhIG5hbWluZyBjb252ZW50aW9uc1xuXHR2YXIgY2xhc3NOYW1lID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W15cXHcuXSkvLnNvdXJjZSArIGNsYXNzTmFtZVByZWZpeCArIC9bQS1aXSg/OltcXGRfQS1aXSpbYS16XVxcdyopP1xcYi8uc291cmNlKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16XVxcdyooPzpcXHMqXFwuXFxzKlthLXpdXFx3KikqKD86XFxzKlxcLik/Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdGNsYXNzTmFtZSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gdmFyaWFibGVzLCBwYXJhbWV0ZXJzLCBhbmQgY29uc3RydWN0b3IgcmVmZXJlbmNlc1xuXHRcdFx0XHQvLyB0aGlzIHRvIHN1cHBvcnQgY2xhc3MgbmFtZXMgKG9yIGdlbmVyaWMgcGFyYW1ldGVycykgd2hpY2ggZG8gbm90IGNvbnRhaW4gYSBsb3dlciBjYXNlIGxldHRlciAoYWxzbyB3b3JrcyBmb3IgbWV0aG9kcylcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbXlxcdy5dKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgL1tBLVpdXFx3Kig/PVxccytcXHcrXFxzKls7LD0oKV18XFxzKig/OlxcW1tcXHMsXSpcXF1cXHMqKT86OlxccypuZXdcXGIpLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZS5pbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNsYXNzIG5hbWVzIGJhc2VkIG9uIGtleXdvcmRcblx0XHRcdFx0Ly8gdGhpcyB0byBzdXBwb3J0IGNsYXNzIG5hbWVzIChvciBnZW5lcmljIHBhcmFtZXRlcnMpIHdoaWNoIGRvIG5vdCBjb250YWluIGEgbG93ZXIgY2FzZSBsZXR0ZXIgKGFsc28gd29ya3MgZm9yIG1ldGhvZHMpXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmNsYXNzfGVudW18ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8aW50ZXJmYWNlfG5ld3xyZWNvcmR8dGhyb3dzKVxccyspLy5zb3VyY2UgKyBjbGFzc05hbWVQcmVmaXggKyAvW0EtWl1cXHcqXFxiLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNsYXNzTmFtZS5pbnNpZGVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmNsaWtlLmZ1bmN0aW9uLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKDo6XFxzKilbYS16X11cXHcqLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J251bWJlcic6IC9cXGIwYlswMV1bMDFfXSpMP1xcYnxcXGIweCg/OlxcLltcXGRhLWZfcCstXSt8W1xcZGEtZl9dKyg/OlxcLltcXGRhLWZfcCstXSspPylcXGJ8KD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5cXGRbXFxkX10qKSg/OmVbKy1dP1xcZFtcXGRfXSopP1tkZmxdPy9pLFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKSg/Ojw8PT98Pj4+Pz0/fC0+fC0tfFxcK1xcK3wmJnxcXHxcXHx8Ojp8Wz86fl18Wy0rKi8lJnxeIT08Pl09PykvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmEnLCAnc3RyaW5nJywge1xuXHRcdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRcdC8vIGh0dHA6Ly9vcGVuamRrLmphdmEubmV0L2plcHMvMzU1I0Rlc2NyaXB0aW9uXG5cdFx0XHRwYXR0ZXJuOiAvXCJcIlwiWyBcXHRdKltcXHJcXG5dKD86KD86XCJ8XCJcIik/KD86XFxcXC58W15cIlxcXFxdKSkqXCJcIlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKXsxLDZ9Jy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmEnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKUBcXHcrKD86XFxzKlxcLlxccypcXHcrKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnZ2VuZXJpY3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPCg/OltcXHdcXHMsLj9dfCYoPyEmKXw8KD86W1xcd1xccywuP118Jig/ISYpfDwoPzpbXFx3XFxzLC4/XXwmKD8hJil8PCg/OltcXHdcXHMsLj9dfCYoPyEmKSkqPikqPikqPikqPi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiBjbGFzc05hbWUsXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKSwuOl0vLFxuXHRcdFx0XHQnb3BlcmF0b3InOiAvWz8mfF0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaW1wb3J0JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGJpbXBvcnRcXHMrKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgLyg/OltBLVpdXFx3KnxcXCopKD89XFxzKjspLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogY2xhc3NOYW1lLmluc2lkZS5uYW1lc3BhY2UsXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi8sXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogL1xcKi8sXG5cdFx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiaW1wb3J0XFxzK3N0YXRpY1xccyspLy5zb3VyY2UgKyBjbGFzc05hbWVQcmVmaXggKyAvKD86XFx3K3xcXCopKD89XFxzKjspLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0YXRpYycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCduYW1lc3BhY2UnOiBjbGFzc05hbWUuaW5zaWRlLm5hbWVzcGFjZSxcblx0XHRcdFx0XHQnc3RhdGljJzogL1xcYlxcdyskLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFwqLyxcblx0XHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9cXHcrL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKFxcYig/OmV4cG9ydHN8aW1wb3J0KD86XFxzK3N0YXRpYyk/fG1vZHVsZXxvcGVufG9wZW5zfHBhY2thZ2V8cHJvdmlkZXN8cmVxdWlyZXN8dG98dHJhbnNpdGl2ZXx1c2VzfHdpdGgpXFxzKykoPyE8a2V5d29yZD4pW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSpcXC4/L1xuXHRcdFx0XHRcdC5zb3VyY2UucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmRzLnNvdXJjZTsgfSkpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xufShQcmlzbSkpO1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IEFhcm9uIEhhcnVuOiBodHRwOi8vYWFoYWNyZWF0aXZlLmNvbS8yMDEyLzA3LzMxL3BocC1zeW50YXgtaGlnaGxpZ2h0aW5nLXByaXNtL1xuICogTW9kaWZpZWQgYnkgTWlsZXMgSm9obnNvbjogaHR0cDovL21pbGVzai5tZVxuICogUmV3cml0dGVuIGJ5IFRvbSBQYXZlbGVjXG4gKlxuICogU3VwcG9ydHMgUEhQIDUuMyAtIDguMFxuICovXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBjb21tZW50ID0gL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLip8Iyg/IVxcWykuKi87XG5cdHZhciBjb25zdGFudCA9IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0XHRcdGFsaWFzOiAnYm9vbGVhbidcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oOjpcXHMqKVxcYlthLXpfXVxcdypcXGIoPyFcXHMqXFwoKS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2FzZXxjb25zdClcXHMrKVxcYlthLXpfXVxcdyooPz1cXHMqWzs9XSkvaSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQvXFxiKD86bnVsbClcXGIvaSxcblx0XHQvXFxiW0EtWl9dW0EtWjAtOV9dKlxcYig/IVxccypcXCgpLyxcblx0XTtcblx0dmFyIG51bWJlciA9IC9cXGIwYlswMV0rKD86X1swMV0rKSpcXGJ8XFxiMG9bMC03XSsoPzpfWzAtN10rKSpcXGJ8XFxiMHhbXFxkYS1mXSsoPzpfW1xcZGEtZl0rKSpcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSpcXC4/KD86XFxkKyg/Ol9cXGQrKSopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pO1xuXHR2YXIgb3BlcmF0b3IgPSAvPD89PnxcXD9cXD89P3xcXC57M318XFw/Py0+fFshPV09Pz0/fDo6fFxcKlxcKj0/fC0tfFxcK1xcK3wmJnxcXHxcXHx8PDx8Pj58Wz9+XXxbL158JSomPD4uKy1dPT8vO1xuXHR2YXIgcHVuY3R1YXRpb24gPSAvW3t9XFxbXFxdKCksOjtdLztcblxuXHRQcmlzbS5sYW5ndWFnZXMucGhwID0ge1xuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFw/PiR8XjxcXD8oPzpwaHAoPz1cXHMpfD0pPy9pLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0J3ZhcmlhYmxlJzogL1xcJCsoPzpcXHcrXFxifCg/PVxceykpLyxcblx0XHQncGFja2FnZSc6IHtcblx0XHRcdHBhdHRlcm46IC8obmFtZXNwYWNlXFxzK3x1c2VcXHMrKD86ZnVuY3Rpb25cXHMrKT8pKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPyFcXFxcKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGVudW18aW50ZXJmYWNlfHRyYWl0KVxccyspXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmZ1bmN0aW9uXFxzKylbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwoXFxzKilcXGIoPzphcnJheXxib29sfGJvb2xlYW58ZmxvYXR8aW50fGludGVnZXJ8b2JqZWN0fHN0cmluZylcXGIoPz1cXHMqXFwpKS9pLFxuXHRcdFx0XHRhbGlhczogJ3R5cGUtY2FzdGluZycsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhbKCw/XVxccyopXFxiKD86YXJyYXkoPyFcXHMqXFwoKXxib29sfGNhbGxhYmxlfCg/OmZhbHNlfG51bGwpKD89XFxzKlxcfCl8ZmxvYXR8aW50fGl0ZXJhYmxlfG1peGVkfG9iamVjdHxzZWxmfHN0YXRpY3xzdHJpbmcpXFxiKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWhpbnQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwpXFxzKjpcXHMqKD86XFw/XFxzKik/KVxcYig/OmFycmF5KD8hXFxzKlxcKCl8Ym9vbHxjYWxsYWJsZXwoPzpmYWxzZXxudWxsKSg/PVxccypcXHwpfGZsb2F0fGludHxpdGVyYWJsZXxtaXhlZHxuZXZlcnxvYmplY3R8c2VsZnxzdGF0aWN8c3RyaW5nfHZvaWQpXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAncmV0dXJuLXR5cGUnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzphcnJheSg/IVxccypcXCgpfGJvb2x8ZmxvYXR8aW50fGl0ZXJhYmxlfG1peGVkfG9iamVjdHxzdHJpbmd8dm9pZClcXGIvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWRlY2xhcmF0aW9uJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFxccyopKD86ZmFsc2V8bnVsbClcXGJ8XFxiKD86ZmFsc2V8bnVsbCkoPz1cXHMqXFx8KS9pLFxuXHRcdFx0XHRhbGlhczogJ3R5cGUtZGVjbGFyYXRpb24nLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpwYXJlbnR8c2VsZnxzdGF0aWMpKD89XFxzKjo6KS9pLFxuXHRcdFx0XHRhbGlhczogJ3N0YXRpYy1jb250ZXh0Jyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyB5aWVsZCBmcm9tXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxieWllbGRcXHMrKWZyb21cXGIvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC8vIGBjbGFzc2AgaXMgYWx3YXlzIGEga2V5d29yZCB1bmxpa2Ugb3RoZXIga2V5d29yZHNcblx0XHRcdC9cXGJjbGFzc1xcYi9pLFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL3d3dy5waHAubmV0L21hbnVhbC9lbi9yZXNlcnZlZC5rZXl3b3Jkcy5waHBcblx0XHRcdFx0Ly9cblx0XHRcdFx0Ly8ga2V5d29yZHMgY2Fubm90IGJlIHByZWNlZGVkIGJ5IFwiLT5cIlxuXHRcdFx0XHQvLyB0aGUgY29tcGxleCBsb29rYmVoaW5kIG1lYW5zIGAoPzwhKD86LT58OjopXFxzKilgXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxccz46XXwoPzpefFteLV0pPnwoPzpefFteOl0pOilcXHMqKVxcYig/OmFic3RyYWN0fGFuZHxhcnJheXxhc3xicmVha3xjYWxsYWJsZXxjYXNlfGNhdGNofGNsb25lfGNvbnN0fGNvbnRpbnVlfGRlY2xhcmV8ZGVmYXVsdHxkaWV8ZG98ZWNob3xlbHNlfGVsc2VpZnxlbXB0eXxlbmRkZWNsYXJlfGVuZGZvcnxlbmRmb3JlYWNofGVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxlbnVtfGV2YWx8ZXhpdHxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm58Zm9yfGZvcmVhY2h8ZnVuY3Rpb258Z2xvYmFsfGdvdG98aWZ8aW1wbGVtZW50c3xpbmNsdWRlfGluY2x1ZGVfb25jZXxpbnN0YW5jZW9mfGluc3RlYWRvZnxpbnRlcmZhY2V8aXNzZXR8bGlzdHxtYXRjaHxuYW1lc3BhY2V8bmV2ZXJ8bmV3fG9yfHBhcmVudHxwcmludHxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVhZG9ubHl8cmVxdWlyZXxyZXF1aXJlX29uY2V8cmV0dXJufHNlbGZ8c3RhdGljfHN3aXRjaHx0aHJvd3x0cmFpdHx0cnl8dW5zZXR8dXNlfHZhcnx3aGlsZXx4b3J8eWllbGR8X19oYWx0X2NvbXBpbGVyKVxcYi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnYXJndW1lbnQtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oWygsXVxccyopXFxiW2Etel9dXFx3Kig/PVxccyo6KD8hOikpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcoPyFcXHMrc2VsZnxcXHMrc3RhdGljKSlcXHMrfFxcYmNhdGNoXFxzKlxcKClcXGJbYS16X11cXHcqKD8hXFxcXClcXGIvaSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFxccyopXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPyFcXFxcKVxcYig/PVxccypcXHwpL2ksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPz1cXHMqXFx8KS9pLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxuZXcoPyFcXHMrc2VsZlxcYnxcXHMrc3RhdGljXFxiKSlcXHMrfFxcYmNhdGNoXFxzKlxcKCkoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiAndHlwZS1kZWNsYXJhdGlvbicsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6IFsnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLCAndHlwZS1kZWNsYXJhdGlvbiddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6OikvaSxcblx0XHRcdFx0YWxpYXM6ICdzdGF0aWMtY29udGV4dCcsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKjo6KS9pLFxuXHRcdFx0XHRhbGlhczogWydjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZCcsICdzdGF0aWMtY29udGV4dCddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFsoLD9dXFxzKilbYS16X11cXHcqKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWhpbnQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oWygsP11cXHMqKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrKD89XFxzKlxcJCkvaSxcblx0XHRcdFx0YWxpYXM6IFsnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLCAndHlwZS1oaW50J10sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwpXFxzKjpcXHMqKD86XFw/XFxzKik/KVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLFxuXHRcdFx0XHRhbGlhczogJ3JldHVybi10eXBlJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKVxccyo6XFxzKig/OlxcP1xccyopPykoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYig/IVxcXFwpL2ksXG5cdFx0XHRcdGFsaWFzOiBbJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJywgJ3JldHVybi10eXBlJ10sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjb25zdGFudCc6IGNvbnN0YW50LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcXHddKVxcXFw/W2Etel9dKD86W1xcd1xcXFxdKlxcdyk/KD89XFxzKlxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKC0+XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0J29wZXJhdG9yJzogb3BlcmF0b3IsXG5cdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb25cblx0fTtcblxuXHR2YXIgc3RyaW5nX2ludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogL1xce1xcJCg/Olxceyg/Olxce1tee31dK1xcfXxbXnt9XSspXFx9fFtee31dKStcXH18KF58W15cXFxce10pXFwkKyg/OlxcdysoPzpcXFtbXlxcclxcblxcW1xcXV0rXFxdfC0+XFx3Kyk/KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5waHBcblx0fTtcblxuXHR2YXIgc3RyaW5nID0gW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88PDwnKFteJ10rKSdbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDE7Lyxcblx0XHRcdGFsaWFzOiAnbm93ZG9jLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8PCdbXiddKyd8W2Etel9dXFx3KjskL2ksXG5cdFx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148PDwnP3xbJztdJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88PDwoPzpcIihbXlwiXSspXCJbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDE7fChbYS16X11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1xcMjspL2ksXG5cdFx0XHRhbGlhczogJ2hlcmVkb2Mtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9ePDw8KD86XCJbXlwiXStcInxbYS16X11cXHcqKXxbYS16X11cXHcqOyQvaSxcblx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCcsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjw8PFwiP3xbXCI7XSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHN0cmluZ19pbnRlcnBvbGF0aW9uXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxbXFxzXFxTXXxbXlxcXFxgXSkqYC8sXG5cdFx0XHRhbGlhczogJ2JhY2t0aWNrLXF1b3RlZC1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJy8sXG5cdFx0XHRhbGlhczogJ3NpbmdsZS1xdW90ZWQtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIvLFxuXHRcdFx0YWxpYXM6ICdkb3VibGUtcXVvdGVkLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBzdHJpbmdfaW50ZXJwb2xhdGlvblxuXHRcdFx0fVxuXHRcdH1cblx0XTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHAnLCAndmFyaWFibGUnLCB7XG5cdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXFsoPzpbXlwiJ1xcLyNdfFxcLyg/IVsqL10pfFxcL1xcLy4qJHwjKD8hXFxbKS4qJHxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3xcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifCcoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKicpK1xcXSg/PVxccypbYS16JCNdKS9pbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0cmlidXRlLWNvbnRlbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oI1xcWylbXFxzXFxTXSsoPz1cXF0kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHQvLyBpbnNpZGUgY2FuIGFwcGVhciBzdWJzZXQgb2YgcGhwXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdFx0J2F0dHJpYnV0ZS1jbGFzcy1uYW1lJzogW1xuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXjpdfF4pXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhbXjpdfF4pKD86XFxcXD9cXGJbYS16X11cXHcqKSsvaSxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0J2NsYXNzLW5hbWUnLFxuXHRcdFx0XHRcdFx0XHRcdFx0J2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJ1xuXHRcdFx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHQnY29uc3RhbnQnOiBjb25zdGFudCxcblx0XHRcdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiBvcGVyYXRvcixcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eI1xcW3xcXF0kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKCEvPFxcPy8udGVzdChlbnYuY29kZSkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgcGhwUGF0dGVybiA9IC88XFw/KD86W15cIicvI118XFwvKD8hWyovXSl8KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8KD86XFwvXFwvfCMoPyFcXFspKSg/OlteP1xcblxccl18XFw/KD8hPikpKig/PSR8XFw/PnxbXFxyXFxuXSl8I1xcW3xcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKig/OlxcKlxcL3wkKSkqPyg/OlxcPz58JCkvZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAncGhwJywgcGhwUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3BocCcpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGphdmFEb2NMaWtlID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlID0ge1xuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKD86XFwvezN9fFxcKnxcXC9cXCpcXCopXFxzKkAoPzphcmd8YXJndW1lbnRzfHBhcmFtKVxccyspXFx3Ky9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHQvLyBrZXl3b3JkcyBhcmUgdGhlIGZpcnN0IHdvcmQgaW4gYSBsaW5lIHByZWNlZGVkIGJlIGFuIGBAYCBvciBzdXJyb3VuZGVkIGJ5IGN1cmx5IGJyYWNlcy5cblx0XHRcdC8vIEB3b3JkLCB7QHdvcmR9XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKD86XFwvezN9fFxcKnxcXC9cXCpcXCopXFxzKnxcXHspQFthLXpdW2EtekEtWi1dK1xcYi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdH07XG5cblxuXHQvKipcblx0ICogQWRkcyBkb2MgY29tbWVudCBzdXBwb3J0IHRvIHRoZSBnaXZlbiBsYW5ndWFnZSBhbmQgY2FsbHMgYSBnaXZlbiBjYWxsYmFjayBvbiBlYWNoIGRvYyBjb21tZW50IHBhdHRlcm4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIHRoZSBsYW5ndWFnZSBhZGQgZG9jIGNvbW1lbnQgc3VwcG9ydCB0by5cblx0ICogQHBhcmFtIHsocGF0dGVybjoge2luc2lkZToge3Jlc3Q6IHVuZGVmaW5lZH19KSA9PiB2b2lkfSBjYWxsYmFjayB0aGUgZnVuY3Rpb24gY2FsbGVkIHdpdGggZWFjaCBkb2MgY29tbWVudCBwYXR0ZXJuIGFzIGFyZ3VtZW50LlxuXHQgKi9cblx0ZnVuY3Rpb24gZG9jQ29tbWVudFN1cHBvcnQobGFuZywgY2FsbGJhY2spIHtcblx0XHR2YXIgdG9rZW5OYW1lID0gJ2RvYy1jb21tZW50JztcblxuXHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmddO1xuXHRcdGlmICghZ3JhbW1hcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR2YXIgdG9rZW4gPSBncmFtbWFyW3Rva2VuTmFtZV07XG5cblx0XHRpZiAoIXRva2VuKSB7XG5cdFx0XHQvLyBhZGQgZG9jIGNvbW1lbnQ6IC8qKiAqL1xuXHRcdFx0dmFyIGRlZmluaXRpb24gPSB7fTtcblx0XHRcdGRlZmluaXRpb25bdG9rZW5OYW1lXSA9IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqXFwqW14vXVtcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0XHR9O1xuXG5cdFx0XHRncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShsYW5nLCAnY29tbWVudCcsIGRlZmluaXRpb24pO1xuXHRcdFx0dG9rZW4gPSBncmFtbWFyW3Rva2VuTmFtZV07XG5cdFx0fVxuXG5cdFx0aWYgKHRva2VuIGluc3RhbmNlb2YgUmVnRXhwKSB7IC8vIGNvbnZlcnQgcmVnZXggdG8gb2JqZWN0XG5cdFx0XHR0b2tlbiA9IGdyYW1tYXJbdG9rZW5OYW1lXSA9IHsgcGF0dGVybjogdG9rZW4gfTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh0b2tlbikpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdG9rZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdGlmICh0b2tlbltpXSBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuXHRcdFx0XHRcdHRva2VuW2ldID0geyBwYXR0ZXJuOiB0b2tlbltpXSB9O1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNhbGxiYWNrKHRva2VuW2ldKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2FsbGJhY2sodG9rZW4pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGRvYy1jb21tZW50IHN1cHBvcnQgdG8gdGhlIGdpdmVuIGxhbmd1YWdlcyBmb3IgdGhlIGdpdmVuIGRvY3VtZW50YXRpb24gbGFuZ3VhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nW118c3RyaW5nfSBsYW5ndWFnZXNcblx0ICogQHBhcmFtIHtPYmplY3R9IGRvY0xhbmd1YWdlXG5cdCAqL1xuXHRmdW5jdGlvbiBhZGRTdXBwb3J0KGxhbmd1YWdlcywgZG9jTGFuZ3VhZ2UpIHtcblx0XHRpZiAodHlwZW9mIGxhbmd1YWdlcyA9PT0gJ3N0cmluZycpIHtcblx0XHRcdGxhbmd1YWdlcyA9IFtsYW5ndWFnZXNdO1xuXHRcdH1cblxuXHRcdGxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5nKSB7XG5cdFx0XHRkb2NDb21tZW50U3VwcG9ydChsYW5nLCBmdW5jdGlvbiAocGF0dGVybikge1xuXHRcdFx0XHRpZiAoIXBhdHRlcm4uaW5zaWRlKSB7XG5cdFx0XHRcdFx0cGF0dGVybi5pbnNpZGUgPSB7fTtcblx0XHRcdFx0fVxuXHRcdFx0XHRwYXR0ZXJuLmluc2lkZS5yZXN0ID0gZG9jTGFuZ3VhZ2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShqYXZhRG9jTGlrZSwgJ2FkZFN1cHBvcnQnLCB7IHZhbHVlOiBhZGRTdXBwb3J0IH0pO1xuXG5cdGphdmFEb2NMaWtlLmFkZFN1cHBvcnQoWydqYXZhJywgJ2phdmFzY3JpcHQnLCAncGhwJ10sIGphdmFEb2NMaWtlKTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvZGVMaW5lUGF0dGVybiA9IC8oXig/OltcXHQgXSooPzpcXCpcXHMqKSopKVteKlxcc10uKiQvbTtcblxuXHR2YXIgbWVtYmVyUmVmZXJlbmNlID0gLyNcXHMqXFx3Kyg/OlxccypcXChbXigpXSpcXCkpPy8uc291cmNlO1xuXHR2YXIgcmVmZXJlbmNlID0gLyg/OlxcYlthLXpBLVpdXFx3K1xccypcXC5cXHMqKSpcXGJbQS1aXVxcdyooPzpcXHMqPG1lbT4pP3w8bWVtPi8uc291cmNlLnJlcGxhY2UoLzxtZW0+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1lbWJlclJlZmVyZW5jZTsgfSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2MgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhZG9jbGlrZScsIHt9KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YWRvYycsICdrZXl3b3JkJywge1xuXHRcdCdyZWZlcmVuY2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhAKD86ZXhjZXB0aW9ufGxpbmt8bGlua3BsYWlufHNlZXx0aHJvd3N8dmFsdWUpXFxzKyg/OlxcKlxccyopPykvLnNvdXJjZSArICcoPzonICsgcmVmZXJlbmNlICsgJyknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oI1xccyopXFx3Kyg/PVxccypcXCgpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdmaWVsZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCNcXHMqKVxcdysvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W2Etel1cXHcqXFxzKlxcLlxccyopKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvXFxiW0EtWl1cXHcqLyxcblx0XHRcdFx0J2tleXdvcmQnOiBQcmlzbS5sYW5ndWFnZXMuamF2YS5rZXl3b3JkLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyMoKVtcXF0sLl0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdC8vIEBwYXJhbSA8VD4gdGhlIGZpcnN0IGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJcblx0XHRcdHBhdHRlcm46IC8oQHBhcmFtXFxzKyk8W0EtWl1cXHcqPi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLjw+XS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlLXNlY3Rpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFx7QGNvZGVcXHMrKD8hXFxzKSkoPzpbXlxcc3t9XXxcXHMrKD8hW1xcc31dKXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkqXFx9KSpcXH0pKyg/PVxccypcXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NvZGUnOiB7XG5cdFx0XHRcdFx0XHQvLyB0aGVyZSBjYW4ndCBiZSBhbnkgSFRNTCBpbnNpZGUgb2Yge0Bjb2RlfSB0YWdzXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBjb2RlTGluZVBhdHRlcm4sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YSdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oPChjb2RlfHByZXx0dCk+KD8hPGNvZGU+KVxccyopXFxTKD86XFxTfFxccytcXFMpKj8oPz1cXHMqPFxcL1xcMj4pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2xpbmUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBjb2RlTGluZVBhdHRlcm4sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGhpZ2hsaWdodCBIVE1MIHRhZ3MgYW5kIGVudGl0aWVzXG5cdFx0XHRcdFx0XHRcdCd0YWcnOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZyxcblx0XHRcdFx0XHRcdFx0J2VudGl0eSc6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAuZW50aXR5LFxuXHRcdFx0XHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRcdFx0XHQvLyBldmVyeXRoaW5nIGVsc2UgaXMgSmF2YSBjb2RlXG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLy4rLyxcblx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YSdcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3RhZyc6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLFxuXHRcdCdlbnRpdHknOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLmVudGl0eSxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlLmFkZFN1cHBvcnQoJ2phdmEnLCBQcmlzbS5sYW5ndWFnZXMuamF2YWRvYyk7XG59KFByaXNtKSk7XG5cbi8vIFNwZWNpZmljYXRpb246XG4vLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9qYXZhL2phdmFzZS8xMy9kb2NzL2FwaS9qYXZhLmJhc2UvamF2YS9sYW5nL1Rocm93YWJsZS5odG1sI3ByaW50U3RhY2tUcmFjZSgpXG5cblByaXNtLmxhbmd1YWdlcy5qYXZhc3RhY2t0cmFjZSA9IHtcblxuXHQvLyBqYXZhLnNxbC5TUUxFeGNlcHRpb246IFZpb2xhdGlvbiBvZiB1bmlxdWUgY29uc3RyYWludCBNWV9FTlRJVFlfVUtfMTogZHVwbGljYXRlIHZhbHVlKHMpIGZvciBjb2x1bW4ocykgTVlfQ09MVU1OIGluIHN0YXRlbWVudCBbLi4uXVxuXHQvLyBDYXVzZWQgYnk6IGphdmEuc3FsLlNRTEV4Y2VwdGlvbjogVmlvbGF0aW9uIG9mIHVuaXF1ZSBjb25zdHJhaW50IE1ZX0VOVElUWV9VS18xOiBkdXBsaWNhdGUgdmFsdWUocykgZm9yIGNvbHVtbihzKSBNWV9DT0xVTU4gaW4gc3RhdGVtZW50IFsuLi5dXG5cdC8vIENhdXNlZCBieTogY29tLmV4YW1wbGUubXlwcm9qZWN0Lk15UHJvamVjdFNlcnZsZXRFeGNlcHRpb25cblx0Ly8gQ2F1c2VkIGJ5OiBNaWRMZXZlbEV4Y2VwdGlvbjogTG93TGV2ZWxFeGNlcHRpb25cblx0Ly8gU3VwcHJlc3NlZDogUmVzb3VyY2UkQ2xvc2VGYWlsRXhjZXB0aW9uOiBSZXNvdXJjZSBJRCA9IDBcblx0J3N1bW1hcnknOiB7XG5cdFx0cGF0dGVybjogL14oW1xcdCBdKikoPzooPzpDYXVzZWQgYnk6fFN1cHByZXNzZWQ6fEV4Y2VwdGlvbiBpbiB0aHJlYWQgXCJbXlwiXSpcIilbXFx0IF0rKT9bXFx3JC5dKyg/OjouKik/JC9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oW1xcdCBdKikoPzooPzpDYXVzZWQgYnl8U3VwcHJlc3NlZCkoPz06KXxFeGNlcHRpb24gaW4gdGhyZWFkKS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyB0aGUgY3VycmVudCB0aHJlYWQgaWYgdGhlIHN1bW1hcnkgc3RhcnRzIHdpdGggJ0V4Y2VwdGlvbiBpbiB0aHJlYWQnXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVwiW15cIl0qXCIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2V4Y2VwdGlvbnMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKDo/XFxzKilbXFx3JC5dKyg/PTp8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9bXFx3JF0rJC8sXG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9cXGJbYS16XVxcdypcXGIvLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnbWVzc2FnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyg6XFxzKilcXFMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdH1cblx0fSxcblxuXHQvLyBhdCBvcmcubW9ydGJheS5qZXR0eS5zZXJ2bGV0LlNlcnZsZXRIYW5kbGVyJENhY2hlZENoYWluLmRvRmlsdGVyKFNlcnZsZXRIYW5kbGVyLmphdmE6MTE2Nilcblx0Ly8gYXQgb3JnLmhzcWxkYi5qZGJjLlV0aWwudGhyb3dFcnJvcihVbmtub3duIFNvdXJjZSkgaGVyZSBjb3VsZCBiZSBzb21lIG5vdGVzXG5cdC8vIGF0IGphdmEuYmFzZS9qYXZhLmxhbmcuQ2xhc3MuZm9yTmFtZTAoTmF0aXZlIE1ldGhvZClcblx0Ly8gYXQgVXRpbC48aW5pdD4oVW5rbm93biBTb3VyY2UpXG5cdC8vIGF0IGNvbS5mb28ubG9hZGVyL2Zvb0A5LjAvY29tLmZvby5NYWluLnJ1bihNYWluLmphdmE6MTAxKVxuXHQvLyBhdCBjb20uZm9vLmxvYWRlci8vY29tLmZvby5iYXIuQXBwLnJ1bihBcHAuamF2YToxMilcblx0Ly8gYXQgYWNtZUAyLjEvb3JnLmFjbWUuTGliLnRlc3QoTGliLmphdmE6ODApXG5cdC8vIGF0IE15Q2xhc3MubWFzaChNeUNsYXNzLmphdmE6OSlcblx0Ly9cblx0Ly8gTW9yZSBpbmZvcm1hdGlvbjpcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTMvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvbGFuZy9TdGFja1RyYWNlRWxlbWVudC5odG1sI3RvU3RyaW5nKClcblx0Ly9cblx0Ly8gQSB2YWxpZCBKYXZhIG1vZHVsZSBuYW1lIGlzIGRlZmluZWQgYXM6XG5cdC8vICAgXCJBIG1vZHVsZSBuYW1lIGNvbnNpc3RzIG9mIG9uZSBvciBtb3JlIEphdmEgaWRlbnRpZmllcnMgKFx1MDBBNzMuOCkgc2VwYXJhdGVkIGJ5IFwiLlwiIHRva2Vucy5cIlxuXHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2Uvc3BlY3MvamxzL3NlOS9odG1sL2pscy02Lmh0bWwjamxzLU1vZHVsZU5hbWVcblx0Ly9cblx0Ly8gQSBKYXZhIG1vZHVsZSB2ZXJzaW9uIGlzIGRlZmluZWQgYnkgdGhpcyBjbGFzczpcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzkvZG9jcy9hcGkvamF2YS9sYW5nL21vZHVsZS9Nb2R1bGVEZXNjcmlwdG9yLlZlcnNpb24uaHRtbFxuXHQvLyBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgYHBhcnNlYCBtZXRob2QgaW4gSkRLMTM6XG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRjZGFjL2pkay9ibG9iLzIzMDVkZjcxZDFiNzcxMDI2NmFlMDk1NmQ3MzkyN2EyMjUxMzJjMGYvc3JjL2phdmEuYmFzZS9zaGFyZS9jbGFzc2VzL2phdmEvbGFuZy9tb2R1bGUvTW9kdWxlRGVzY3JpcHRvci5qYXZhI0wxMTA4XG5cdC8vIEhvd2V2ZXIsIHRvIGtlZXAgdGhpcyBzaW1wbGUsIGEgdmVyc2lvbiB3aWxsIGJlIG1hdGNoZWQgYnkgdGhlIHBhdHRlcm4gL0BbXFx3JC4rLV0qLy5cblx0J3N0YWNrLWZyYW1lJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopYXQgKD86W1xcdyQuL118QFtcXHckListXSpcXC8pKyg/Ojxpbml0Pik/XFwoW14oKV0qXFwpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKWF0KD89ICkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3NvdXJjZSc6IFtcblx0XHRcdFx0Ly8gKE1haW4uamF2YToxNSlcblx0XHRcdFx0Ly8gKE1haW4uc2NhbGE6MTUpXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClcXHcrXFwuXFx3KzpcXGQrKD89XFwpKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdmaWxlJzogL15cXHcrXFwuXFx3Ky8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdFx0XHQnbGluZS1udW1iZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGJcXGQrXFxiLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyAoVW5rbm93biBTb3VyY2UpXG5cdFx0XHRcdC8vIChOYXRpdmUgTWV0aG9kKVxuXHRcdFx0XHQvLyAoLi4uc29tZXRoaW5nLi4uKVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpW14oKV0qKD89XFwpKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL14oPzpOYXRpdmUgTWV0aG9kfFVua25vd24gU291cmNlKSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvW1xcdyRdKyg/PVxcLig/Ojxpbml0PnxbXFx3JF0rKVxcKCkvLFxuXHRcdFx0J2Z1bmN0aW9uJzogLyg/Ojxpbml0PnxbXFx3JF0rKSg/PVxcKCkvLFxuXHRcdFx0J2NsYXNzLWxvYWRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSooPz1cXC9bXFx3QCQuXSpcXC8pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICduYW1lc3BhY2UnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J21vZHVsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxzL10pW2Etel1cXHcqKD86XFwuW2Etel1cXHcqKSooPzpAW1xcdyQuKy1dKik/KD89XFwvKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCd2ZXJzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhAKVtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW0AuXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXGJbYS16XVxcdypcXC4pKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLy5dL1xuXHRcdH1cblx0fSxcblxuXHQvLyAuLi4gMzIgbW9yZVxuXHQvLyAuLi4gMzIgY29tbW9uIGZyYW1lcyBvbWl0dGVkXG5cdCdtb3JlJzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopXFwuezN9IFxcZCsgW2Etel0rKD86IFthLXpdKykqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC57M30vLFxuXHRcdFx0J251bWJlcic6IC9cXGQrLyxcblx0XHRcdCdrZXl3b3JkJzogL1xcYlthLXpdKyg/OiBbYS16XSspKlxcYi9cblx0XHR9XG5cdH1cblxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmpleGwgPSB7XG5cdCdzdHJpbmcnOiAvKFtcIiddKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0J3RyYW5zZm9ybSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcfFxccyopW2EtekEtWlx1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGX1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRiRdW1xcd1x1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGJF0qLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9bYS16QS1aXHUwNDMwLVx1MDQ0Rlx1MDQxMC1cdTA0MkZfXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGJF1bXFx3XHUwNDMwLVx1MDQ0Rlx1MDQxMC1cdTA0MkZcXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAwRkYkXSpcXHMqKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspP1xcYnxcXEJcXC5cXGQrXFxiLyxcblx0J29wZXJhdG9yJzogL1s8PiFdPT98LXxcXCt8JiZ8PT18XFx8XFx8P3xcXC9cXC8/fFs/OipeJV0vLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYmluXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKSwuXS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuam9saWUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFxbXFxzXFxTXXxbXlwiXFxcXF0pKlwiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/OlxcYig/OmFzfGNvdXJpZXJ8ZW1iZWR8aW58aW5wdXRQb3J0fG91dHB1dFBvcnR8c2VydmljZSlcXGJ8QClbIFxcdF0qKVxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YXN8Y0h8Y29tcHxjb25jdXJyZW50fGNvbnN0YW50c3xjb3VyaWVyfGNzZXR8Y3NldHN8ZGVmYXVsdHxkZWZpbmV8ZWxzZXxlbWJlZHxlbWJlZGRlZHxleGVjdXRpb258ZXhpdHxleHRlbmRlcnxmb3J8Zm9yZWFjaHxmb3J3YXJkfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpbmNsdWRlfGluaXR8aW5wdXRQb3J0fGluc3RhbGx8aW5zdGFuY2VvZnxpbnRlcmZhY2V8aXNfZGVmaW5lZHxsaW5rSW58bGlua091dHxtYWlufG5ld3xudWxsUHJvY2Vzc3xvdXRwdXRQb3J0fG92ZXJ8cHJpdmF0ZXxwcm92aWRlfHB1YmxpY3xzY29wZXxzZXF1ZW50aWFsfHNlcnZpY2V8c2luZ2xlfHNwYXdufHN5bmNocm9uaXplZHx0aGlzfHRocm93fHRocm93c3x0eXBlfHVuZGVmfHVudGlsfHdoaWxlfHdpdGgpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1bIFxcdF0qW0AoXSkvaSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/bD8vaSxcblx0J29wZXJhdG9yJzogLy1bLT0+XT98XFwrWys9XT98PFs8PV0/fFs+PSohXT0/fCYmfFxcfFxcfHxbP1xcLyVeQHxdLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSw7LjpdLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86Qnl0ZXxhbnl8Ym9vbHxjaGFyfGRvdWJsZXxlbnVtfGZsb2F0fGludHxsZW5ndGh8bG9uZ3xyYW5nZXN8cmVnZXh8c3RyaW5nfHVuZGVmaW5lZHx2b2lkKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqb2xpZScsICdrZXl3b3JkJywge1xuXHQnYWdncmVnYXRlcyc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYkFnZ3JlZ2F0ZXNcXHMqOlxccyopKD86XFx3Kyg/Olxccyt3aXRoXFxzK1xcdyspP1xccyosXFxzKikqXFx3Kyg/Olxccyt3aXRoXFxzK1xcdyspPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL1xcYndpdGhcXGIvLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHR9XG5cdH0sXG5cdCdyZWRpcmVjdHMnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJSZWRpcmVjdHNcXHMqOlxccyopKD86XFx3K1xccyo9PlxccypcXHcrXFxzKixcXHMqKSooPzpcXHcrXFxzKj0+XFxzKlxcdyspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLywvLFxuXHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky8sXG5cdFx0XHQnb3BlcmF0b3InOiAvPT4vXG5cdFx0fVxuXHR9LFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFnZ3JlZ2F0ZXN8W0lpXW50ZXJmYWNlc3xKYXZhfEphdmFzY3JpcHR8Sm9saWV8W0xsXW9jYXRpb258T25lV2F5fFtQcF1yb3RvY29sfFJlZGlyZWN0c3xSZXF1ZXN0UmVzcG9uc2UpXFxiKD89WyBcXHRdKjopL1xuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uID0gL1xcXFxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKS8uc291cmNlO1xuXHR2YXIgc3RyaW5nID0gUmVnRXhwKC8oXnxbXlxcXFxdKVwiKD86W15cIlxcclxcblxcXFxdfFxcXFxbXlxcclxcbihdfF9fKSpcIi8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGludGVycG9sYXRpb247IH0pKTtcblx0dmFyIHN0cmluZ0ludGVycG9sYXRpb24gPSB7XG5cdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKS8uc291cmNlICsgaW50ZXJwb2xhdGlvbiksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcXFxcXCgpW1xcc1xcU10rKD89XFwpJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcXFxcXCh8XFwpJC9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGpxID0gUHJpc20ubGFuZ3VhZ2VzLmpxID0ge1xuXHRcdCdjb21tZW50JzogLyMuKi8sXG5cdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZy5zb3VyY2UgKyAvKD89XFxzKjooPyE6KSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBzdHJpbmdJbnRlcnBvbGF0aW9uXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogc3RyaW5nSW50ZXJwb2xhdGlvblxuXHRcdH0sXG5cblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmRlZlxccyspW2Etel9dXFx3Ky9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQndmFyaWFibGUnOiAvXFxCXFwkXFx3Ky8sXG5cdFx0J3Byb3BlcnR5LWxpdGVyYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6KD8hOikpL2ksXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8YnJlYWt8Y2F0Y2h8ZGVmfGVsaWZ8ZWxzZXxlbmR8Zm9yZWFjaHxpZnxpbXBvcnR8aW5jbHVkZXxsYWJlbHxtb2R1bGV8bW9kdWxlbWV0YXxudWxsfHJlZHVjZXx0aGVufHRyeXx3aGlsZSlcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnbnVtYmVyJzogLyg/OlxcYlxcZCtcXC58XFxCXFwuKT9cXGJcXGQrKD86W2VFXVsrLV0/XFxkKyk/XFxiLyxcblxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcfD0/Lyxcblx0XHRcdFx0YWxpYXM6ICdwaXBlJ1xuXHRcdFx0fSxcblx0XHRcdC9cXC5cXC58WyE9PD5dPz18XFw/XFwvXFwvfFxcL1xcLz0/fFstKyovJV09P3xbPD4/XXxcXGIoPzphbmR8bm90fG9yKVxcYi9cblx0XHRdLFxuXHRcdCdjLXN0eWxlLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC86OnxbKClcXFtcXF17fSw6O118XFwuKD89XFxzKltcXFtcXHckXSkvLFxuXHRcdCdkb3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH1cblx0fTtcblxuXHRzdHJpbmdJbnRlcnBvbGF0aW9uLmludGVycG9sYXRpb24uaW5zaWRlLmNvbnRlbnQuaW5zaWRlID0ganE7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YXNjcmlwdCcsIHtcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8aW50ZXJmYWNlfG5ld3x0eXBlKVxccyspKD8ha2V5b2ZcXGIpKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/Olxccyo8KD86W148Pl18PCg/OltePD5dfDxbXjw+XSo+KSo+KSo+KT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHR9LFxuXHRcdCdidWlsdGluJzogL1xcYig/OkFycmF5fEZ1bmN0aW9ufFByb21pc2V8YW55fGJvb2xlYW58Y29uc29sZXxuZXZlcnxudW1iZXJ8c3RyaW5nfHN5bWJvbHx1bmtub3duKVxcYi8sXG5cdH0pO1xuXG5cdC8vIFRoZSBrZXl3b3JkcyBUeXBlU2NyaXB0IGFkZHMgdG8gSmF2YVNjcmlwdFxuXHRQcmlzbS5sYW5ndWFnZXMudHlwZXNjcmlwdC5rZXl3b3JkLnB1c2goXG5cdFx0L1xcYig/OmFic3RyYWN0fGRlY2xhcmV8aXN8a2V5b2Z8cmVhZG9ubHl8cmVxdWlyZSlcXGIvLFxuXHRcdC8vIGtleXdvcmRzIHRoYXQgaGF2ZSB0byBiZSBmb2xsb3dlZCBieSBhbiBpZGVudGlmaWVyXG5cdFx0L1xcYig/OmFzc2VydHN8aW5mZXJ8aW50ZXJmYWNlfG1vZHVsZXxuYW1lc3BhY2V8dHlwZSlcXGIoPz1cXHMqKD86W3tfJGEtekEtWlxceEEwLVxcdUZGRkZdfCQpKS8sXG5cdFx0Ly8gVGhpcyBpcyBmb3IgYGltcG9ydCB0eXBlICosIHt9YFxuXHRcdC9cXGJ0eXBlXFxiKD89XFxzKig/OltcXHsqXXwkKSkvXG5cdCk7XG5cblx0Ly8gZG9lc24ndCB3b3JrIHdpdGggVFMgYmVjYXVzZSBUUyBpcyB0b28gY29tcGxleFxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ3BhcmFtZXRlciddO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ2xpdGVyYWwtcHJvcGVydHknXTtcblxuXHQvLyBhIHZlcnNpb24gb2YgdHlwZXNjcmlwdCBzcGVjaWZpY2FsbHkgZm9yIGhpZ2hsaWdodGluZyB0eXBlc1xuXHR2YXIgdHlwZUluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ3R5cGVzY3JpcHQnLCB7fSk7XG5cdGRlbGV0ZSB0eXBlSW5zaWRlWydjbGFzcy1uYW1lJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHRbJ2NsYXNzLW5hbWUnXS5pbnNpZGUgPSB0eXBlSW5zaWRlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3R5cGVzY3JpcHQnLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2RlY29yYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC9AWyRcXHdcXHhBMC1cXHVGRkZGXSsvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXkAvLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2dlbmVyaWMtZnVuY3Rpb24nOiB7XG5cdFx0XHQvLyBlLmcuIGZvbzxUIGV4dGVuZHMgXCJiYXJcIiB8IFwiYmF6XCI+KCAuLi5cblx0XHRcdHBhdHRlcm46IC8jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSpcXHMqPCg/OltePD5dfDwoPzpbXjw+XXw8W148Pl0qPikqPikqPig/PVxccypcXCgpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXiM/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKi8sXG5cdFx0XHRcdCdnZW5lcmljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W1xcc1xcU10rLywgLy8gZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgPFxuXHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy50cyA9IFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgamF2YXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0O1xuXG5cdHZhciB0eXBlID0gL1xceyg/Oltee31dfFxceyg/Oltee31dfFxce1tee31dKlxcfSkqXFx9KStcXH0vLnNvdXJjZTtcblx0dmFyIHBhcmFtZXRlclByZWZpeCA9ICcoQCg/OmFyZ3xhcmd1bWVudHxwYXJhbXxwcm9wZXJ0eSlcXFxccysoPzonICsgdHlwZSArICdcXFxccyspPyknO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qc2RvYyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFkb2NsaWtlJywge1xuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHQvLyBAcGFyYW0ge3N0cmluZ30gZm9vIC0gZm9vIGJhclxuXHRcdFx0cGF0dGVybjogUmVnRXhwKHBhcmFtZXRlclByZWZpeCArIC8oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGLl0pKyg/PVxcc3wkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2pzZG9jJywgJ2tleXdvcmQnLCB7XG5cdFx0J29wdGlvbmFsLXBhcmFtZXRlcic6IHtcblx0XHRcdC8vIEBwYXJhbSB7c3RyaW5nfSBbYmF6LmZvbz1cImJhclwiXSBmb28gYmFyXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyYW1ldGVyUHJlZml4ICsgL1xcWyg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkYuXSkrKD86PVteW1xcXV0rKT9cXF0oPz1cXHN8JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxbKVskXFx3XFx4QTAtXFx1RkZGRlxcLl0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb2RlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPSlbXFxzXFxTXSooPz1cXF0kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IGphdmFzY3JpcHQsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWz1bXFxdXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhAKD86YXVnbWVudHN8Y2xhc3N8ZXh0ZW5kc3xpbnRlcmZhY2V8bWVtYmVyb2YhP3x0ZW1wbGF0ZXx0aGlzfHR5cGVkZWYpXFxzKyg/OjxUWVBFPlxccyspPylbQS1aXVxcdyooPzpcXC5bQS1aXVxcdyopKi8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlOyB9KSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKEBbYS16XStcXFxccyspJyArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnc3RyaW5nJzogamF2YXNjcmlwdC5zdHJpbmcsXG5cdFx0XHRcdFx0J251bWJlcic6IGphdmFzY3JpcHQubnVtYmVyLFxuXHRcdFx0XHRcdCdib29sZWFuJzogamF2YXNjcmlwdC5ib29sZWFuLFxuXHRcdFx0XHRcdCdrZXl3b3JkJzogUHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHQua2V5d29yZCxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvPT58XFwuXFwuXFwufFsmfD86Kl0vLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLiw7PTw+e30oKVtcXF1dL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnZXhhbXBsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oQGV4YW1wbGVcXHMrKD8hXFxzKSkoPzpbXkBcXHNdfFxccysoPyFcXHMpKSs/KD89XFxzKig/OlxcKlxccyopPyg/OkBcXHd8XFwqXFwvKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKD86XFwqXFxzKik/KVxcUy4qJC9tLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBqYXZhc2NyaXB0LFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YXNjcmlwdCdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFkb2NsaWtlLmFkZFN1cHBvcnQoJ2phdmFzY3JpcHQnLCBQcmlzbS5sYW5ndWFnZXMuanNkb2MpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2Z1bmN0aW9uLXZhcmlhYmxlJywge1xuXHRcdCdtZXRob2QtdmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhcXFxcLlxcXFxzKiknICsgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ2Z1bmN0aW9uLXZhcmlhYmxlJ10ucGF0dGVybi5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2Z1bmN0aW9uLXZhcmlhYmxlJywgJ21ldGhvZCcsICdmdW5jdGlvbicsICdwcm9wZXJ0eS1hY2Nlc3MnXVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdmdW5jdGlvbicsIHtcblx0XHQnbWV0aG9kJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXFxcXC5cXFxccyopJyArIFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydmdW5jdGlvbiddLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6IFsnZnVuY3Rpb24nLCAncHJvcGVydHktYWNjZXNzJ11cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnY29uc3RhbnQnLCB7XG5cdFx0J2tub3duLWNsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHN0YW5kYXJkIGJ1aWx0LWluc1xuXHRcdFx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0c1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86RmxvYXQoPzozMnw2NCl8KD86SW50fFVpbnQpKD86OHwxNnwzMil8VWludDhDbGFtcGVkKT9BcnJheXxBcnJheUJ1ZmZlcnxCaWdJbnR8Qm9vbGVhbnxEYXRhVmlld3xEYXRlfEVycm9yfEZ1bmN0aW9ufEludGx8SlNPTnwoPzpXZWFrKT8oPzpNYXB8U2V0KXxNYXRofE51bWJlcnxPYmplY3R8UHJvbWlzZXxQcm94eXxSZWZsZWN0fFJlZ0V4cHxTdHJpbmd8U3ltYm9sfFdlYkFzc2VtYmx5KVxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGVycm9yc1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86W0EtWl1cXHcqKUVycm9yXFxiLyxcblx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdFx0fVxuXHRcdF1cblx0fSk7XG5cblx0LyoqXG5cdCAqIFJlcGxhY2VzIHRoZSBgPElEPmAgcGxhY2Vob2xkZXIgaW4gdGhlIGdpdmVuIHBhdHRlcm4gd2l0aCBhIHBhdHRlcm4gZm9yIGdlbmVyYWwgSlMgaWRlbnRpZmllcnMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHdpdGhJZChzb3VyY2UsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChcblx0XHRcdHNvdXJjZS5yZXBsYWNlKC88SUQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqLy5zb3VyY2U7IH0pLFxuXHRcdFx0ZmxhZ3MpO1xuXHR9XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAna2V5d29yZCcsIHtcblx0XHQnaW1wb3J0cyc6IHtcblx0XHRcdC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaW1wb3J0c1xuXHRcdFx0cGF0dGVybjogd2l0aElkKC8oXFxiaW1wb3J0XFxiXFxzKikoPzo8SUQ+KD86XFxzKixcXHMqKD86XFwqXFxzKmFzXFxzKzxJRD58XFx7W157fV0qXFx9KSk/fFxcKlxccyphc1xccys8SUQ+fFxce1tee31dKlxcfSkoPz1cXHMqXFxiZnJvbVxcYikvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J2V4cG9ydHMnOiB7XG5cdFx0XHQvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWV4cG9ydHNcblx0XHRcdHBhdHRlcm46IHdpdGhJZCgvKFxcYmV4cG9ydFxcYlxccyopKD86XFwqKD86XFxzKmFzXFxzKzxJRD4pPyg/PVxccypcXGJmcm9tXFxiKXxcXHtbXnt9XSpcXH0pLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydrZXl3b3JkJ10udW5zaGlmdChcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YXN8ZGVmYXVsdHxleHBvcnR8ZnJvbXxpbXBvcnQpXFxiLyxcblx0XHRcdGFsaWFzOiAnbW9kdWxlJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmF3YWl0fGJyZWFrfGNhdGNofGNvbnRpbnVlfGRvfGVsc2V8ZmluYWxseXxmb3J8aWZ8cmV0dXJufHN3aXRjaHx0aHJvd3x0cnl8d2hpbGV8eWllbGQpXFxiLyxcblx0XHRcdGFsaWFzOiAnY29udHJvbC1mbG93J1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdFx0YWxpYXM6IFsnbnVsbCcsICduaWwnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYnVuZGVmaW5lZFxcYi8sXG5cdFx0XHRhbGlhczogJ25pbCdcblx0XHR9XG5cdCk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdvcGVyYXRvcicsIHtcblx0XHQnc3ByZWFkJzoge1xuXHRcdFx0cGF0dGVybjogL1xcLnszfS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2Fycm93Jzoge1xuXHRcdFx0cGF0dGVybjogLz0+Lyxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCdwcm9wZXJ0eS1hY2Nlc3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3aXRoSWQoLyhcXC5cXHMqKSM/PElEPi8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdtYXliZS1jbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJFxcd1xceEEwLVxcdUZGRkZdKVtBLVpdWyRcXHdcXHhBMC1cXHVGRkZGXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RvbSc6IHtcblx0XHRcdC8vIHRoaXMgY29udGFpbnMgb25seSBhIGZldyBjb21tb25seSB1c2VkIERPTSB2YXJpYWJsZXNcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpkb2N1bWVudHwoPzpsb2NhbHxzZXNzaW9uKVN0b3JhZ2V8bG9jYXRpb258bmF2aWdhdG9yfHBlcmZvcm1hbmNlfHdpbmRvdylcXGIvLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXHRcdCdjb25zb2xlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYmNvbnNvbGUoPz1cXHMqXFwuKS8sXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fVxuXHR9KTtcblxuXG5cdC8vIGFkZCAnbWF5YmUtY2xhc3MtbmFtZScgdG8gdG9rZW5zIHdoaWNoIG1pZ2h0IGJlIGEgY2xhc3MgbmFtZVxuXHR2YXIgbWF5YmVDbGFzc05hbWVUb2tlbnMgPSBbJ2Z1bmN0aW9uJywgJ2Z1bmN0aW9uLXZhcmlhYmxlJywgJ21ldGhvZCcsICdtZXRob2QtdmFyaWFibGUnLCAncHJvcGVydHktYWNjZXNzJ107XG5cblx0Zm9yICh2YXIgaSA9IDA7IGkgPCBtYXliZUNsYXNzTmFtZVRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdHZhciB0b2tlbiA9IG1heWJlQ2xhc3NOYW1lVG9rZW5zW2ldO1xuXHRcdHZhciB2YWx1ZSA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0W3Rva2VuXTtcblxuXHRcdC8vIGNvbnZlcnQgcmVnZXggdG8gb2JqZWN0XG5cdFx0aWYgKFByaXNtLnV0aWwudHlwZSh2YWx1ZSkgPT09ICdSZWdFeHAnKSB7XG5cdFx0XHR2YWx1ZSA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0W3Rva2VuXSA9IHtcblx0XHRcdFx0cGF0dGVybjogdmFsdWVcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8ga2VlcCBpbiBtaW5kIHRoYXQgd2UgZG9uJ3Qgc3VwcG9ydCBhcnJheXNcblxuXHRcdHZhciBpbnNpZGUgPSB2YWx1ZS5pbnNpZGUgfHwge307XG5cdFx0dmFsdWUuaW5zaWRlID0gaW5zaWRlO1xuXG5cdFx0aW5zaWRlWydtYXliZS1jbGFzcy1uYW1lJ10gPSAvXltBLVpdW1xcc1xcU10qLztcblx0fVxuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3Lmpzb24ub3JnL2pzb24tZW4uaHRtbFxuUHJpc20ubGFuZ3VhZ2VzLmpzb24gPSB7XG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIoPz1cXHMqOikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKD8hXFxzKjopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdLF0vLFxuXHQnb3BlcmF0b3InOiAvOi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bGwnOiB7XG5cdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLndlYm1hbmlmZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmpzb247XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nID0gLyhcInwnKSg/OlxcXFwoPzpcXHJcXG4/fFxcbnwuKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuanNvbjUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqc29uJywge1xuXHRcdCdwcm9wZXJ0eSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZy5zb3VyY2UgKyAnKD89XFxcXHMqOiknKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyo6KS8sXG5cdFx0XHRcdGFsaWFzOiAndW5xdW90ZWQnXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1srLV0/XFxiKD86TmFOfEluZmluaXR5fDB4W2EtZkEtRlxcZF0rKVxcYnxbKy1dPyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbZUVdWystXT9cXGQrXFxiKT8vXG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5qc29ucCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2pzb24nLCB7XG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCk7LC5dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2pzb25wJywgJ3B1bmN0dWF0aW9uJywge1xuXHQnZnVuY3Rpb24nOiAvKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccypcXCgpL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5qc3N0YWNrdHJhY2UgPSB7XG5cdCdlcnJvci1tZXNzYWdlJzoge1xuXHRcdHBhdHRlcm46IC9eXFxTLiovbSxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblxuXHQnc3RhY2stZnJhbWUnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKylhdFsgXFx0XS4qL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdub3QtbXktY29kZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15hdFsgXFx0XSsoPyFcXHMpKD86bm9kZVxcLmpzfDx1bmtub3duPnwuKig/Om5vZGVfbW9kdWxlc3xcXCg8YW5vbnltb3VzPlxcKXxcXCg8dW5rbm93bj58PGFub255bW91cz4kfFxcKGludGVybmFsXFwvfFxcKG5vZGVcXC5qcykpLiovbSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fSxcblxuXHRcdFx0J2ZpbGVuYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYmF0XFxzKyg/IVxccyl8XFwoKSg/OlthLXpBLVpdOik/W14oKTpdKyg/PTopLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICd1cmwnXG5cdFx0XHR9LFxuXG5cdFx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiYXRcXHMrKD86bmV3XFxzKyk/KSg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGPF1bLiRcXHdcXHhBMC1cXHVGRkZGPD5dKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldLyxcblxuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXR8bmV3KVxcYi8sXG5cblx0XHRcdCdhbGlhcyc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcWyg/OmFzXFxzKyk/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdWyRcXHdcXHhBMC1cXHVGRkZGXSpcXF0vLFxuXHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0fSxcblxuXHRcdFx0J2xpbmUtbnVtYmVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvOlxcZCsoPzo6XFxkKyk/XFxiLyxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdH1cblx0fVxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciB0ZW1wbGF0ZVN0cmluZyA9IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0Wyd0ZW1wbGF0ZS1zdHJpbmcnXTtcblxuXHQvLyBzZWUgdGhlIHBhdHRlcm4gaW4gcHJpc20tamF2YXNjcmlwdC5qc1xuXHR2YXIgdGVtcGxhdGVMaXRlcmFsUGF0dGVybiA9IHRlbXBsYXRlU3RyaW5nLnBhdHRlcm4uc291cmNlO1xuXHR2YXIgaW50ZXJwb2xhdGlvbk9iamVjdCA9IHRlbXBsYXRlU3RyaW5nLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddO1xuXHR2YXIgaW50ZXJwb2xhdGlvblB1bmN0dWF0aW9uT2JqZWN0ID0gaW50ZXJwb2xhdGlvbk9iamVjdC5pbnNpZGVbJ2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nXTtcblx0dmFyIGludGVycG9sYXRpb25QYXR0ZXJuID0gaW50ZXJwb2xhdGlvbk9iamVjdC5wYXR0ZXJuLnNvdXJjZTtcblxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHBhdHRlcm4gdG8gbWF0Y2ggYSB0ZW1wbGF0ZSBzdHJpbmcgd2l0aCBhIHNwZWNpYWwgdGFnLlxuXHQgKlxuXHQgKiBUaGlzIHdpbGwgcmV0dXJuIGB1bmRlZmluZWRgIGlmIHRoZXJlIGlzIG5vIGdyYW1tYXIgd2l0aCB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2UgaWQgb2YgdGhlIGVtYmVkZGVkIGxhbmd1YWdlLiBFLmcuIGBtYXJrZG93bmAuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0YWcgVGhlIHJlZ2V4IHBhdHRlcm4gdG8gbWF0Y2ggdGhlIHRhZy5cblx0ICogQHJldHVybnMge29iamVjdCB8IHVuZGVmaW5lZH1cblx0ICogQGV4YW1wbGVcblx0ICogY3JlYXRlVGVtcGxhdGUoJ2NzcycsIC9cXGJjc3MvLnNvdXJjZSk7XG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVUZW1wbGF0ZShsYW5ndWFnZSwgdGFnKSB7XG5cdFx0aWYgKCFQcmlzbS5sYW5ndWFnZXNbbGFuZ3VhZ2VdKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdHJldHVybiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJygoPzonICsgdGFnICsgJylcXFxccyopJyArIHRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndGVtcGxhdGUtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0fSxcblx0XHRcdFx0J2VtYmVkZGVkLWNvZGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6IGxhbmd1YWdlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsndGVtcGxhdGUtc3RyaW5nJ10gPSBbXG5cdFx0Ly8gc3R5bGVkLWpzeDpcblx0XHQvLyAgIGNzc2BhIHsgY29sb3I6ICMyNUY7IH1gXG5cdFx0Ly8gc3R5bGVkLWNvbXBvbmVudHM6XG5cdFx0Ly8gICBzdHlsZWQuaDFgY29sb3I6IHJlZDtgXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ2NzcycsIC9cXGIoPzpzdHlsZWQoPzpcXChbXildKlxcKSk/KD86XFxzKlxcLlxccypcXHcrKD86XFwoW14pXSpcXCkpKikqfGNzcyg/OlxccypcXC5cXHMqKD86Z2xvYmFsfHJlc29sdmUpKT98Y3JlYXRlR2xvYmFsU3R5bGV8a2V5ZnJhbWVzKS8uc291cmNlKSxcblxuXHRcdC8vIGh0bWxgPHA+PC9wPmBcblx0XHQvLyBkaXYuaW5uZXJIVE1MID0gYDxwPjwvcD5gXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ2h0bWwnLCAvXFxiaHRtbHxcXC5cXHMqKD86aW5uZXJ8b3V0ZXIpSFRNTFxccypcXCs/PS8uc291cmNlKSxcblxuXHRcdC8vIHN2Z2A8cGF0aCBmaWxsPVwiI2ZmZlwiIGQ9XCJNNTUuMzcgLi4uXCIvPmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnc3ZnJywgL1xcYnN2Zy8uc291cmNlKSxcblxuXHRcdC8vIG1kYCMgaDFgLCBtYXJrZG93bmAjIyBoMmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnbWFya2Rvd24nLCAvXFxiKD86bWFya2Rvd258bWQpLy5zb3VyY2UpLFxuXG5cdFx0Ly8gZ3FsYC4uLmAsIGdyYXBocWxgLi4uYCwgZ3JhcGhxbC5leHBlcmltZW50YWxgLi4uYFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdncmFwaHFsJywgL1xcYig/OmdxbHxncmFwaHFsKD86XFxzKlxcLlxccypleHBlcmltZW50YWwpPykvLnNvdXJjZSksXG5cblx0XHQvLyBzcWxgLi4uYFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdzcWwnLCAvXFxic3FsLy5zb3VyY2UpLFxuXG5cdFx0Ly8gdmFuaWxsYSB0ZW1wbGF0ZSBzdHJpbmdcblx0XHR0ZW1wbGF0ZVN0cmluZ1xuXHRdLmZpbHRlcihCb29sZWFuKTtcblxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgc3BlY2lmaWMgcGxhY2Vob2xkZXIgbGl0ZXJhbCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gY291bnRlclxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyKGNvdW50ZXIsIGxhbmd1YWdlKSB7XG5cdFx0cmV0dXJuICdfX18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKSArICdfJyArIGNvdW50ZXIgKyAnX19fJztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0b2tlbnMgb2YgYFByaXNtLnRva2VuaXplYCBidXQgYWxzbyBydW5zIHRoZSBgYmVmb3JlLXRva2VuaXplYCBhbmQgYGFmdGVyLXRva2VuaXplYCBob29rcy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcblx0ICogQHBhcmFtIHthbnl9IGdyYW1tYXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEByZXR1cm5zIHsoc3RyaW5nfFRva2VuKVtdfVxuXHQgKi9cblx0ZnVuY3Rpb24gdG9rZW5pemVXaXRoSG9va3MoY29kZSwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHR2YXIgZW52ID0ge1xuXHRcdFx0Y29kZTogY29kZSxcblx0XHRcdGdyYW1tYXI6IGdyYW1tYXIsXG5cdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2Vcblx0XHR9O1xuXHRcdFByaXNtLmhvb2tzLnJ1bignYmVmb3JlLXRva2VuaXplJywgZW52KTtcblx0XHRlbnYudG9rZW5zID0gUHJpc20udG9rZW5pemUoZW52LmNvZGUsIGVudi5ncmFtbWFyKTtcblx0XHRQcmlzbS5ob29rcy5ydW4oJ2FmdGVyLXRva2VuaXplJywgZW52KTtcblx0XHRyZXR1cm4gZW52LnRva2Vucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0b2tlbiBvZiB0aGUgZ2l2ZW4gSmF2YVNjcmlwdCBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24uXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBleHByZXNzaW9uIFRoZSBjb2RlIG9mIHRoZSBleHByZXNzaW9uLiBFLmcuIGBcIiR7NDJ9XCJgXG5cdCAqIEByZXR1cm5zIHtUb2tlbn1cblx0ICovXG5cdGZ1bmN0aW9uIHRva2VuaXplSW50ZXJwb2xhdGlvbkV4cHJlc3Npb24oZXhwcmVzc2lvbikge1xuXHRcdHZhciB0ZW1wR3JhbW1hciA9IHt9O1xuXHRcdHRlbXBHcmFtbWFyWydpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJ10gPSBpbnRlcnBvbGF0aW9uUHVuY3R1YXRpb25PYmplY3Q7XG5cblx0XHQvKiogQHR5cGUge0FycmF5fSAqL1xuXHRcdHZhciB0b2tlbnMgPSBQcmlzbS50b2tlbml6ZShleHByZXNzaW9uLCB0ZW1wR3JhbW1hcik7XG5cdFx0aWYgKHRva2Vucy5sZW5ndGggPT09IDMpIHtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIHRva2VuIGFycmF5IHdpbGwgbG9vayBsaWtlIHRoaXNcblx0XHRcdCAqIFtcblx0XHRcdCAqICAgICBbXCJpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uXCIsIFwiJHtcIl1cblx0XHRcdCAqICAgICBcIi4uLlwiIC8vIEphdmFTY3JpcHQgZXhwcmVzc2lvbiBvZiB0aGUgaW50ZXJwb2xhdGlvblxuXHRcdFx0ICogICAgIFtcImludGVycG9sYXRpb24tcHVuY3R1YXRpb25cIiwgXCJ9XCJdXG5cdFx0XHQgKiBdXG5cdFx0XHQgKi9cblxuXHRcdFx0dmFyIGFyZ3MgPSBbMSwgMV07XG5cdFx0XHRhcmdzLnB1c2guYXBwbHkoYXJncywgdG9rZW5pemVXaXRoSG9va3ModG9rZW5zWzFdLCBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCwgJ2phdmFzY3JpcHQnKSk7XG5cblx0XHRcdHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBhcmdzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmV3IFByaXNtLlRva2VuKCdpbnRlcnBvbGF0aW9uJywgdG9rZW5zLCBpbnRlcnBvbGF0aW9uT2JqZWN0LmFsaWFzLCBleHByZXNzaW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUb2tlbml6ZXMgdGhlIGdpdmVuIGNvZGUgd2l0aCBzdXBwb3J0IGZvciBKYXZhU2NyaXB0IGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMgbWl4ZWQgaW4uXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaGFzIDMgcGhhc2VzOlxuXHQgKlxuXHQgKiAxLiBSZXBsYWNlIGFsbCBKYXZhU2NyaXB0IGludGVycG9sYXRpb24gZXhwcmVzc2lvbiB3aXRoIGEgcGxhY2Vob2xkZXIuXG5cdCAqICAgIFRoZSBwbGFjZWhvbGRlciB3aWxsIGhhdmUgdGhlIHN5bnRheCBvZiBhIGlkZW50aWZ5IG9mIHRoZSB0YXJnZXQgbGFuZ3VhZ2UuXG5cdCAqIDIuIFRva2VuaXplIHRoZSBjb2RlIHdpdGggcGxhY2Vob2xkZXJzLlxuXHQgKiAzLiBUb2tlbml6ZSB0aGUgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9ucyBhbmQgcmUtaW5zZXJ0IHRoZW0gaW50byB0aGUgdG9rZW5pemUgY29kZS5cblx0ICogICAgVGhlIGluc2VydGlvbiBvbmx5IHdvcmtzIGlmIGEgcGxhY2Vob2xkZXIgaGFzbid0IGJlZW4gXCJyaXBwZWQgYXBhcnRcIiBtZWFuaW5nIHRoYXQgdGhlIHBsYWNlaG9sZGVyIGhhcyBiZWVuXG5cdCAqICAgIHRva2VuaXplZCBhcyB0d28gdG9rZW5zIGJ5IHRoZSBncmFtbWFyIG9mIHRoZSBlbWJlZGRlZCBsYW5ndWFnZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGNvZGVcblx0ICogQHBhcmFtIHtvYmplY3R9IGdyYW1tYXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEByZXR1cm5zIHtUb2tlbn1cblx0ICovXG5cdGZ1bmN0aW9uIHRva2VuaXplRW1iZWRkZWQoY29kZSwgZ3JhbW1hciwgbGFuZ3VhZ2UpIHtcblx0XHQvLyAxLiBGaXJzdCBmaWx0ZXIgb3V0IGFsbCBpbnRlcnBvbGF0aW9uc1xuXG5cdFx0Ly8gYmVjYXVzZSB0aGV5IG1pZ2h0IGJlIGVzY2FwZWQsIHdlIG5lZWQgYSBsb29rYmVoaW5kLCBzbyB3ZSB1c2UgUHJpc21cblx0XHQvKiogQHR5cGUgeyhUb2tlbnxzdHJpbmcpW119ICovXG5cdFx0dmFyIF90b2tlbnMgPSBQcmlzbS50b2tlbml6ZShjb2RlLCB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGludGVycG9sYXRpb25QYXR0ZXJuKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gcmVwbGFjZSBhbGwgaW50ZXJwb2xhdGlvbnMgd2l0aCBhIHBsYWNlaG9sZGVyIHdoaWNoIGlzIG5vdCBpbiB0aGUgY29kZSBhbHJlYWR5XG5cdFx0dmFyIHBsYWNlaG9sZGVyQ291bnRlciA9IDA7XG5cdFx0LyoqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBzdHJpbmc+fSAqL1xuXHRcdHZhciBwbGFjZWhvbGRlck1hcCA9IHt9O1xuXHRcdHZhciBlbWJlZGRlZENvZGUgPSBfdG9rZW5zLm1hcChmdW5jdGlvbiAodG9rZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybiB0b2tlbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBpbnRlcnBvbGF0aW9uRXhwcmVzc2lvbiA9IHRva2VuLmNvbnRlbnQ7XG5cblx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyO1xuXHRcdFx0XHR3aGlsZSAoY29kZS5pbmRleE9mKHBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIocGxhY2Vob2xkZXJDb3VudGVyKyssIGxhbmd1YWdlKSkgIT09IC0xKSB7IC8qIG5vb3AgKi8gfVxuXHRcdFx0XHRwbGFjZWhvbGRlck1hcFtwbGFjZWhvbGRlcl0gPSBpbnRlcnBvbGF0aW9uRXhwcmVzc2lvbjtcblx0XHRcdFx0cmV0dXJuIHBsYWNlaG9sZGVyO1xuXHRcdFx0fVxuXHRcdH0pLmpvaW4oJycpO1xuXG5cblx0XHQvLyAyLiBUb2tlbml6ZSB0aGUgZW1iZWRkZWQgY29kZVxuXG5cdFx0dmFyIGVtYmVkZGVkVG9rZW5zID0gdG9rZW5pemVXaXRoSG9va3MoZW1iZWRkZWRDb2RlLCBncmFtbWFyLCBsYW5ndWFnZSk7XG5cblxuXHRcdC8vIDMuIFJlLWluc2VydCB0aGUgaW50ZXJwb2xhdGlvblxuXG5cdFx0dmFyIHBsYWNlaG9sZGVycyA9IE9iamVjdC5rZXlzKHBsYWNlaG9sZGVyTWFwKTtcblx0XHRwbGFjZWhvbGRlckNvdW50ZXIgPSAwO1xuXG5cdFx0LyoqXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhUb2tlbnxzdHJpbmcpW119IHRva2Vuc1xuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxuXHRcdCAqL1xuXHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocGxhY2Vob2xkZXJDb3VudGVyID49IHBsYWNlaG9sZGVycy5sZW5ndGgpIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHRva2VuLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXJzW3BsYWNlaG9sZGVyQ291bnRlcl07XG5cdFx0XHRcdFx0dmFyIHMgPSB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnID8gdG9rZW4gOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHRva2VuLmNvbnRlbnQpO1xuXG5cdFx0XHRcdFx0dmFyIGluZGV4ID0gcy5pbmRleE9mKHBsYWNlaG9sZGVyKTtcblx0XHRcdFx0XHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0XHRcdFx0XHQrK3BsYWNlaG9sZGVyQ291bnRlcjtcblxuXHRcdFx0XHRcdFx0dmFyIGJlZm9yZSA9IHMuc3Vic3RyaW5nKDAsIGluZGV4KTtcblx0XHRcdFx0XHRcdHZhciBtaWRkbGUgPSB0b2tlbml6ZUludGVycG9sYXRpb25FeHByZXNzaW9uKHBsYWNlaG9sZGVyTWFwW3BsYWNlaG9sZGVyXSk7XG5cdFx0XHRcdFx0XHR2YXIgYWZ0ZXIgPSBzLnN1YnN0cmluZyhpbmRleCArIHBsYWNlaG9sZGVyLmxlbmd0aCk7XG5cblx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHRcdFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKGJlZm9yZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoKG1pZGRsZSk7XG5cdFx0XHRcdFx0XHRpZiAoYWZ0ZXIpIHtcblx0XHRcdFx0XHRcdFx0dmFyIGFmdGVyVG9rZW5zID0gW2FmdGVyXTtcblx0XHRcdFx0XHRcdFx0d2Fsa1Rva2VucyhhZnRlclRva2Vucyk7XG5cdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnB1c2guYXBwbHkocmVwbGFjZW1lbnQsIGFmdGVyVG9rZW5zKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZS5hcHBseSh0b2tlbnMsIFtpLCAxXS5jb25jYXQocmVwbGFjZW1lbnQpKTtcblx0XHRcdFx0XHRcdFx0aSArPSByZXBsYWNlbWVudC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0dG9rZW4uY29udGVudCA9IHJlcGxhY2VtZW50O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YXIgY29udGVudCA9IHRva2VuLmNvbnRlbnQ7XG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcblx0XHRcdFx0XHRcdHdhbGtUb2tlbnMoY29udGVudCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHdhbGtUb2tlbnMoW2NvbnRlbnRdKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0d2Fsa1Rva2VucyhlbWJlZGRlZFRva2Vucyk7XG5cblx0XHRyZXR1cm4gbmV3IFByaXNtLlRva2VuKGxhbmd1YWdlLCBlbWJlZGRlZFRva2VucywgJ2xhbmd1YWdlLScgKyBsYW5ndWFnZSwgY29kZSk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGxhbmd1YWdlcyBmb3Igd2hpY2ggSlMgdGVtcGxhdGluZyB3aWxsIGhhbmRsZSB0YWdnZWQgdGVtcGxhdGUgbGl0ZXJhbHMuXG5cdCAqXG5cdCAqIEpTIHRlbXBsYXRpbmcgaXNuJ3QgYWN0aXZlIGZvciBvbmx5IEphdmFTY3JpcHQgYnV0IGFsc28gcmVsYXRlZCBsYW5ndWFnZXMgbGlrZSBUeXBlU2NyaXB0LCBKU1gsIGFuZCBUU1guXG5cdCAqL1xuXHR2YXIgc3VwcG9ydGVkTGFuZ3VhZ2VzID0ge1xuXHRcdCdqYXZhc2NyaXB0JzogdHJ1ZSxcblx0XHQnanMnOiB0cnVlLFxuXHRcdCd0eXBlc2NyaXB0JzogdHJ1ZSxcblx0XHQndHMnOiB0cnVlLFxuXHRcdCdqc3gnOiB0cnVlLFxuXHRcdCd0c3gnOiB0cnVlLFxuXHR9O1xuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmICghKGVudi5sYW5ndWFnZSBpbiBzdXBwb3J0ZWRMYW5ndWFnZXMpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0LyoqXG5cdFx0ICogRmluZHMgYW5kIHRva2VuaXplcyBhbGwgdGVtcGxhdGUgc3RyaW5ncyB3aXRoIGFuIGVtYmVkZGVkIGxhbmd1YWdlcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7KFRva2VuIHwgc3RyaW5nKVtdfSB0b2tlbnNcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRmdW5jdGlvbiBmaW5kVGVtcGxhdGVTdHJpbmdzKHRva2Vucykge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIGNvbnRlbnQgPSB0b2tlbi5jb250ZW50O1xuXHRcdFx0XHRpZiAoIUFycmF5LmlzQXJyYXkoY29udGVudCkpIHtcblx0XHRcdFx0XHRpZiAodHlwZW9mIGNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRmaW5kVGVtcGxhdGVTdHJpbmdzKFtjb250ZW50XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICd0ZW1wbGF0ZS1zdHJpbmcnKSB7XG5cdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0ICogQSBKYXZhU2NyaXB0IHRlbXBsYXRlLXN0cmluZyB0b2tlbiB3aWxsIGxvb2sgbGlrZSB0aGlzOlxuXHRcdFx0XHRcdCAqXG5cdFx0XHRcdFx0ICogW1widGVtcGxhdGUtc3RyaW5nXCIsIFtcblx0XHRcdFx0XHQgKiAgICAgW1widGVtcGxhdGUtcHVuY3R1YXRpb25cIiwgXCJgXCJdLFxuXHRcdFx0XHRcdCAqICAgICAoXG5cdFx0XHRcdFx0ICogICAgICAgICBBbiBhcnJheSBvZiBcInN0cmluZ1wiIGFuZCBcImludGVycG9sYXRpb25cIiB0b2tlbnMuIFRoaXMgaXMgdGhlIHNpbXBsZSBzdHJpbmcgY2FzZS5cblx0XHRcdFx0XHQgKiAgICAgICAgIG9yXG5cdFx0XHRcdFx0ICogICAgICAgICBbXCJlbWJlZGRlZC1jb2RlXCIsIFwiLi4uXCJdIFRoaXMgaXMgdGhlIHRva2VuIGNvbnRhaW5pbmcgdGhlIGVtYmVkZGVkIGNvZGUuXG5cdFx0XHRcdFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSXQgYWxzbyBoYXMgYW4gYWxpYXMgd2hpY2ggaXMgdGhlIGxhbmd1YWdlIG9mIHRoZSBlbWJlZGRlZCBjb2RlLlxuXHRcdFx0XHRcdCAqICAgICApLFxuXHRcdFx0XHRcdCAqICAgICBbXCJ0ZW1wbGF0ZS1wdW5jdHVhdGlvblwiLCBcImBcIl1cblx0XHRcdFx0XHQgKiBdXVxuXHRcdFx0XHRcdCAqL1xuXG5cdFx0XHRcdFx0dmFyIGVtYmVkZGVkID0gY29udGVudFsxXTtcblx0XHRcdFx0XHRpZiAoY29udGVudC5sZW5ndGggPT09IDMgJiYgdHlwZW9mIGVtYmVkZGVkICE9PSAnc3RyaW5nJyAmJiBlbWJlZGRlZC50eXBlID09PSAnZW1iZWRkZWQtY29kZScpIHtcblx0XHRcdFx0XHRcdC8vIGdldCBzdHJpbmcgY29udGVudFxuXHRcdFx0XHRcdFx0dmFyIGNvZGUgPSBzdHJpbmdDb250ZW50KGVtYmVkZGVkKTtcblxuXHRcdFx0XHRcdFx0dmFyIGFsaWFzID0gZW1iZWRkZWQuYWxpYXM7XG5cdFx0XHRcdFx0XHR2YXIgbGFuZ3VhZ2UgPSBBcnJheS5pc0FycmF5KGFsaWFzKSA/IGFsaWFzWzBdIDogYWxpYXM7XG5cblx0XHRcdFx0XHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblx0XHRcdFx0XHRcdGlmICghZ3JhbW1hcikge1xuXHRcdFx0XHRcdFx0XHQvLyB0aGUgZW1iZWRkZWQgbGFuZ3VhZ2UgaXNuJ3QgcmVnaXN0ZXJlZC5cblx0XHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGNvbnRlbnRbMV0gPSB0b2tlbml6ZUVtYmVkZGVkKGNvZGUsIGdyYW1tYXIsIGxhbmd1YWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZmluZFRlbXBsYXRlU3RyaW5ncyhjb250ZW50KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZpbmRUZW1wbGF0ZVN0cmluZ3MoZW52LnRva2Vucyk7XG5cdH0pO1xuXG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHN0cmluZyBjb250ZW50IG9mIGEgdG9rZW4gb3IgdG9rZW4gc3RyZWFtLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IFRva2VuIHwgKHN0cmluZyB8IFRva2VuKVtdfSB2YWx1ZVxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gc3RyaW5nQ29udGVudCh2YWx1ZSkge1xuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuXHRcdFx0cmV0dXJuIHZhbHVlLm1hcChzdHJpbmdDb250ZW50KS5qb2luKCcnKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHN0cmluZ0NvbnRlbnQodmFsdWUuY29udGVudCk7XG5cdFx0fVxuXHR9XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmp1bGlhID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHQvLyBzdXBwb3J0IG9uZSBsZXZlbCBvZiBuZXN0ZWQgY29tbWVudHNcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vSnVsaWFMYW5nL2p1bGlhL3B1bGwvNjEyOFxuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OiM9KD86W14jPV18PSg/ISMpfCMoPyE9KXwjPSg/OlteIz1dfD0oPyEjKXwjKD8hPSkpKj0jKSo9I3wjLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdyZWdleCc6IHtcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvc3RyaW5ncy8jUmVndWxhci1FeHByZXNzaW9ucy0xXG5cdFx0cGF0dGVybjogL3JcIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCJbaW1zeF17MCw0fS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL3N0cmluZ3MvI1N0cmluZy1CYXNpY3MtMVxuXHRcdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9zdHJpbmdzLyNub24tc3RhbmRhcmQtc3RyaW5nLWxpdGVyYWxzLTFcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvcnVubmluZy1leHRlcm5hbC1wcm9ncmFtcy8jUnVubmluZy1FeHRlcm5hbC1Qcm9ncmFtcy0xXG5cdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKz9cIlwiXCJ8KD86XFxiXFx3Kyk/XCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifGAoPzpbXlxcXFxgXFxyXFxuXXxcXFxcLikqYC8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9zdHJpbmdzLyNtYW4tY2hhcmFjdGVycy0xXG5cdFx0cGF0dGVybjogLyhefFteXFx3J10pJyg/OlxcXFxbXlxcclxcbl1bXidcXHJcXG5dKnxbXlxcXFxcXHJcXG5dKScvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGJhcmVtb2R1bGV8YmVnaW58Yml0c3R5cGV8YnJlYWt8Y2F0Y2h8Y2NhbGx8Y29uc3R8Y29udGludWV8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGV4cG9ydHxmaW5hbGx5fGZvcnxmdW5jdGlvbnxnbG9iYWx8aWZ8aW1tdXRhYmxlfGltcG9ydHxpbXBvcnRhbGx8aW58bGV0fGxvY2FsfG1hY3JvfG1vZHVsZXxwcmludHxwcmludGxufHF1b3RlfHJldHVybnxzdHJ1Y3R8dHJ5fHR5cGV8dHlwZWFsaWFzfHVzaW5nfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib3hdKT8oPzpbXFxkYS1mXSsoPzpfW1xcZGEtZl0rKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFwuXFxkKyg/Ol9cXGQrKSopKD86W2VmcF1bKy1dP1xcZCsoPzpfXFxkKykqKT9qPy9pLFxuXHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvbWF0aGVtYXRpY2FsLW9wZXJhdGlvbnMvXG5cdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9tYXRoZW1hdGljYWwtb3BlcmF0aW9ucy8jT3BlcmF0b3ItUHJlY2VkZW5jZS1hbmQtQXNzb2NpYXRpdml0eS0xXG5cdCdvcGVyYXRvcic6IC8mJnxcXHxcXHx8Wy0rKl4lXHUwMEY3XHUyMkJCJiRcXFxcXT0/fFxcL1tcXC89XT98IT0/PT98XFx8Wz0+XT98PCg/Ojw9P3xbPTp8XSk/fD4oPzo9fD4+Pz0/KT98PT0/PT98W35cdTIyNjBcdTIyNjRcdTIyNjUnXHUyMjFBXHUyMjFCXS8sXG5cdCdwdW5jdHVhdGlvbic6IC86Oj98W3t9W1xcXSgpOywuP10vLFxuXHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9iYXNlL251bWJlcnMvI0Jhc2UuaW1cblx0J2NvbnN0YW50JzogL1xcYig/Oig/OkluZnxOYU4pKD86MTZ8MzJ8NjQpP3xpbXxwaSlcXGJ8W1x1MDNDMFx1MjEyRl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMua2VlcGFsaXZlZCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1sjIV0uKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlwiXFxcXFxcclxcbl0pKlwifCcoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXidcXFxcXFxyXFxuXSkqJykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gc3VwcG9ydCBJUHY0LCBJUHY2LCBzdWJuZXQgbWFza1xuXHQnaXAnOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0L1xcYig/Oig/Oig/OltcXGRhLWZdezEsNH06KXs3fVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezZ9OltcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezV9Oig/OltcXGRhLWZdezEsNH06KT9bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs0fTooPzpbXFxkYS1mXXsxLDR9Oil7MCwyfVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezN9Oig/OltcXGRhLWZdezEsNH06KXswLDN9W1xcZGEtZl17MSw0fXwoPzpbXFxkYS1mXXsxLDR9Oil7Mn06KD86W1xcZGEtZl17MSw0fTopezAsNH1bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs2fTxpcHY0PnwoPzpbXFxkYS1mXXsxLDR9Oil7MCw1fTo8aXB2ND58OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw1fTxpcHY0PnxbXFxkYS1mXXsxLDR9OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw1fVtcXGRhLWZdezEsNH18OjooPzpbXFxkYS1mXXsxLDR9Oil7MCw2fVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezEsN306KSg/OlxcL1xcZHsxLDN9KT98PGlwdjQ+KD86XFwvXFxkezEsMn0pPylcXGIvLnNvdXJjZVxuXHRcdFx0XHQucmVwbGFjZSgvPGlwdjQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPzooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldXFxkfFxcZClcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpKS8uc291cmNlOyB9KSxcblx0XHRcdCdpJ1xuXHRcdCksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cblx0Ly8gc3VwcG9ydCAqbml4IC8gV2luZG93cywgZGlyZWN0b3J5IC8gZmlsZVxuXHQncGF0aCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxccylcXC8oPzpbXlxcL1xcc10rXFwvKSpbXlxcL1xcc10qfFxcYlthLXpBLVpdOlxcXFwoPzpbXlxcXFxcXHNdK1xcXFwpKlteXFxcXFxcc10qLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcez9cXHcrXFx9Py8sXG5cdCdlbWFpbCc6IHtcblx0XHRwYXR0ZXJuOiAvW1xcdy1dK0BbXFx3LV0rKD86XFwuW1xcdy1dezIsM30pezEsMn0vLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0fSxcblx0J2NvbmRpdGlvbmFsLWNvbmZpZ3VyYXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0BcXF4/W1xcdy1dKy8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J29wZXJhdG9yJzogLz0vLFxuXG5cdCdwcm9wZXJ0eSc6IC9cXGIoPzpCRkRfQ0hFQ0t8RE5TX0NIRUNLfEZJTEVfQ0hFQ0t8SFRUUF9HRVR8TUlTQ19DSEVDS3xOQU1FfFBJTkdfQ0hFQ0t8U0NSSVBUU3xTTVRQX0NIRUNLfFNTTHxTU0xfR0VUfFRDUF9DSEVDS3xVRFBfQ0hFQ0t8YWNjZXB0fGFkdmVydF9pbnR8YWxwaGF8YXV0aF9wYXNzfGF1dGhfdHlwZXxhdXRoZW50aWNhdGlvbnxiZmRfY3B1X2FmZmluaXR5fGJmZF9pbnN0YW5jZXxiZmRfbm9fc3dhcHxiZmRfcHJpb3JpdHl8YmZkX3Byb2Nlc3NfbmFtZXxiZmRfcmxpbWl0X3J0dGltZXxiZmRfcnRfcHJpb3JpdHl8YmluZF9pZnxiaW5kX3BvcnR8YmluZHRvfGNhfGNlcnRpZmljYXRlfGNoZWNrX3VuaWNhc3Rfc3JjfGNoZWNrZXJ8Y2hlY2tlcl9jcHVfYWZmaW5pdHl8Y2hlY2tlcl9sb2dfYWxsX2ZhaWx1cmVzfGNoZWNrZXJfbm9fc3dhcHxjaGVja2VyX3ByaW9yaXR5fGNoZWNrZXJfcmxpbWl0X3J0dGltZXxjaGVja2VyX3J0X3ByaW9yaXR5fGNoaWxkX3dhaXRfdGltZXxjb25uZWN0X2lwfGNvbm5lY3RfcG9ydHxjb25uZWN0X3RpbWVvdXR8ZGJ1c19zZXJ2aWNlX25hbWV8ZGVidWd8ZGVmYXVsdF9pbnRlcmZhY2V8ZGVsYXl8ZGVsYXlfYmVmb3JlX3JldHJ5fGRlbGF5X2xvb3B8ZGlnZXN0fGRvbnRfdHJhY2tfcHJpbWFyeXxkeW5hbWljfGR5bmFtaWNfaW50ZXJmYWNlc3xlbmFibGVfKD86ZGJ1c3xzY3JpcHRfc2VjdXJpdHl8c25pfHNubXBfY2hlY2tlcnxzbm1wX3JmY3xzbm1wX3JmY3YyfHNubXBfcmZjdjN8c25tcF92cnJwfHRyYXBzKXxlbmR8ZmFsbHxmYXN0X3JlY292ZXJ5fGZpbGV8ZmxhZy1bMTIzXXxmb3JrX2RlbGF5fGZ1bGxfY29tbWFuZHxmd21hcmt8Z2FycF9ncm91cHxnYXJwX2ludGVydmFsfGdhcnBfbG93ZXJfcHJpb19kZWxheXxnYXJwX2xvd2VyX3ByaW9fcmVwZWF0fGdhcnBfbWFzdGVyX2RlbGF5fGdhcnBfbWFzdGVyX3JlZnJlc2h8Z2FycF9tYXN0ZXJfcmVmcmVzaF9yZXBlYXR8Z2FycF9tYXN0ZXJfcmVwZWF0fGdsb2JhbF9kZWZzfGdsb2JhbF90cmFja2luZ3xnbmFfaW50ZXJ2YWx8Z3JvdXB8aGFfc3VzcGVuZHxoYXNoZWR8aGVsb19uYW1lfGhpZ2hlcl9wcmlvX3NlbmRfYWR2ZXJ0fGhvcGxpbWl0fGh0dHBfcHJvdG9jb2x8aHlzdGVyZXNpc3xpZGxlX3R4fGluY2x1ZGV8aW5oaWJpdF9vbl9mYWlsdXJlfGluaXRfZmFpbHxpbml0X2ZpbGV8aW5zdGFuY2V8aW50ZXJmYWNlfGludGVyZmFjZXN8aW50ZXJ2YWx8aXBfZmFtaWx5fGlwdnNfcHJvY2Vzc19uYW1lfGtlZXBhbGl2ZWQuY29uZnxrZXJuZWxfcnhfYnVmX3NpemV8a2V5fGxpbmtiZWF0X2ludGVyZmFjZXN8bGlua2JlYXRfdXNlX3BvbGxpbmd8bG9nX2FsbF9mYWlsdXJlc3xsb2dfdW5rbm93bl92cmlkc3xsb3dlcl9wcmlvX25vX2FkdmVydHxsdGhyZXNob2xkfGx2c19mbHVzaHxsdnNfZmx1c2hfb25zdG9wfGx2c19tZXRob2R8bHZzX25ldGxpbmtfY21kX3Jjdl9idWZzfGx2c19uZXRsaW5rX2NtZF9yY3ZfYnVmc19mb3JjZXxsdnNfbmV0bGlua19tb25pdG9yX3Jjdl9idWZzfGx2c19uZXRsaW5rX21vbml0b3JfcmN2X2J1ZnNfZm9yY2V8bHZzX25vdGlmeV9maWZvfGx2c19ub3RpZnlfZmlmb19zY3JpcHR8bHZzX3NjaGVkfGx2c19zeW5jX2RhZW1vbnxtYXhfYXV0b19wcmlvcml0eXxtYXhfaG9wc3xtY2FzdF9zcmNfaXB8bWgtZmFsbGJhY2t8bWgtcG9ydHxtaW5fYXV0b19wcmlvcml0eV9kZWxheXxtaW5fcnh8bWluX3R4fG1pc2NfZHluYW1pY3xtaXNjX3BhdGh8bWlzY190aW1lb3V0fG11bHRpcGxpZXJ8bmFtZXxuYW1lc3BhY2Vfd2l0aF9pcHNldHN8bmF0aXZlX2lwdjZ8bmVpZ2hib3JfaXB8bmV0X25hbWVzcGFjZXxuZXRfbmFtZXNwYWNlX2lwdnN8bmZ0YWJsZXN8bmZ0YWJsZXNfY291bnRlcnN8bmZ0YWJsZXNfaWZpbmRleHxuZnRhYmxlc19wcmlvcml0eXxub19hY2NlcHR8bm9fY2hlY2tlcl9lbWFpbHN8bm9fZW1haWxfZmF1bHRzfG5vcHJlZW1wdHxub3RpZmljYXRpb25fZW1haWx8bm90aWZpY2F0aW9uX2VtYWlsX2Zyb218bm90aWZ5fG5vdGlmeV9iYWNrdXB8bm90aWZ5X2RlbGV0ZWR8bm90aWZ5X2Rvd258bm90aWZ5X2ZhdWx0fG5vdGlmeV9maWZvfG5vdGlmeV9maWZvX3NjcmlwdHxub3RpZnlfbWFzdGVyfG5vdGlmeV9tYXN0ZXJfcnhfbG93ZXJfcHJpfG5vdGlmeV9wcmlvcml0eV9jaGFuZ2VzfG5vdGlmeV9zdG9wfG5vdGlmeV91cHxvbGRfdW5pY2FzdF9jaGVja3N1bXxvbWVnYXxvcHN8cGFyYW1fbWF0Y2h8cGFzc2l2ZXxwYXNzd29yZHxwYXRofHBlcnNpc3RlbmNlX2VuZ2luZXxwZXJzaXN0ZW5jZV9ncmFudWxhcml0eXxwZXJzaXN0ZW5jZV90aW1lb3V0fHByZWVtcHR8cHJlZW1wdF9kZWxheXxwcmlvcml0eXxwcm9jZXNzfHByb2Nlc3NfbW9uaXRvcl9yY3ZfYnVmc3xwcm9jZXNzX21vbml0b3JfcmN2X2J1ZnNfZm9yY2V8cHJvY2Vzc19uYW1lfHByb2Nlc3NfbmFtZXN8cHJvbW90ZV9zZWNvbmRhcmllc3xwcm90b2NvbHxwcm94eV9hcnB8cHJveHlfYXJwX3B2bGFufHF1b3J1bXxxdW9ydW1fZG93bnxxdW9ydW1fbWF4fHF1b3J1bV91cHxyYW5kb21fc2VlZHxyZWFsX3NlcnZlcnxyZWdleHxyZWdleF9tYXhfb2Zmc2V0fHJlZ2V4X21pbl9vZmZzZXR8cmVnZXhfbm9fbWF0Y2h8cmVnZXhfb3B0aW9uc3xyZWdleF9zdGFja3xyZWxvYWRfcmVwZWF0fHJlbG9hZF90aW1lX2ZpbGV8cmVxdWlyZV9yZXBseXxyZXRyeXxyaXNlfHJvdXRlcl9pZHxyc19pbml0X25vdGlmaWVzfHNjcmlwdHxzY3JpcHRfdXNlcnxzaC1mYWxsYmFja3xzaC1wb3J0fHNodXRkb3duX3NjcmlwdHxzaHV0ZG93bl9zY3JpcHRfdGltZW91dHxza2lwX2NoZWNrX2Fkdl9hZGRyfHNtdHBfYWxlcnR8c210cF9hbGVydF9jaGVja2VyfHNtdHBfYWxlcnRfdnJycHxzbXRwX2Nvbm5lY3RfdGltZW91dHxzbXRwX2hlbG9fbmFtZXxzbXRwX3NlcnZlcnxzbm1wX3NvY2tldHxzb3JyeV9zZXJ2ZXJ8c29ycnlfc2VydmVyX2luaGliaXR8c29ycnlfc2VydmVyX2x2c19tZXRob2R8c291cmNlX2lwfHN0YXJ0fHN0YXJ0dXBfc2NyaXB0fHN0YXJ0dXBfc2NyaXB0X3RpbWVvdXR8c3RhdGV8c3RhdGljX2lwYWRkcmVzc3xzdGF0aWNfcm91dGVzfHN0YXRpY19ydWxlc3xzdGF0dXNfY29kZXxzdGVwfHN0cmljdF9tb2RlfHN5bmNfZ3JvdXBfdHJhY2tpbmdfd2VpZ2h0fHRlcm1pbmF0ZV9kZWxheXx0aW1lb3V0fHRyYWNrX2JmZHx0cmFja19maWxlfHRyYWNrX2dyb3VwfHRyYWNrX2ludGVyZmFjZXx0cmFja19wcm9jZXNzfHRyYWNrX3NjcmlwdHx0cmFja19zcmNfaXB8dHRsfHR5cGV8dW1hc2t8dW5pY2FzdF9wZWVyfHVuaWNhc3Rfc3JjX2lwfHVuaWNhc3RfdHRsfHVybHx1c2VfaXB2bGFufHVzZV9waWRfZGlyfHVzZV92bWFjfHVzZXJ8dXRocmVzaG9sZHx2YWxbMTIzXXx2ZXJzaW9ufHZpcnR1YWxfaXBhZGRyZXNzfHZpcnR1YWxfaXBhZGRyZXNzX2V4Y2x1ZGVkfHZpcnR1YWxfcm91dGVyX2lkfHZpcnR1YWxfcm91dGVzfHZpcnR1YWxfcnVsZXN8dmlydHVhbF9zZXJ2ZXJ8dmlydHVhbF9zZXJ2ZXJfZ3JvdXB8dmlydHVhbGhvc3R8dm1hY194bWl0X2Jhc2V8dnJycHx2cnJwXyg/OmNoZWNrX3VuaWNhc3Rfc3JjfGNwdV9hZmZpbml0eXxnYXJwX2ludGVydmFsfGdhcnBfbG93ZXJfcHJpb19kZWxheXxnYXJwX2xvd2VyX3ByaW9fcmVwZWF0fGdhcnBfbWFzdGVyX2RlbGF5fGdhcnBfbWFzdGVyX3JlZnJlc2h8Z2FycF9tYXN0ZXJfcmVmcmVzaF9yZXBlYXR8Z2FycF9tYXN0ZXJfcmVwZWF0fGduYV9pbnRlcnZhbHxoaWdoZXJfcHJpb19zZW5kX2FkdmVydHxpbnN0YW5jZXxpcHNldHN8aXB0YWJsZXN8bG93ZXJfcHJpb19ub19hZHZlcnR8bWNhc3RfZ3JvdXA0fG1jYXN0X2dyb3VwNnxtaW5fZ2FycHxuZXRsaW5rX2NtZF9yY3ZfYnVmc3xuZXRsaW5rX2NtZF9yY3ZfYnVmc19mb3JjZXxuZXRsaW5rX21vbml0b3JfcmN2X2J1ZnN8bmV0bGlua19tb25pdG9yX3Jjdl9idWZzX2ZvcmNlfG5vX3N3YXB8bm90aWZ5X2ZpZm98bm90aWZ5X2ZpZm9fc2NyaXB0fG5vdGlmeV9wcmlvcml0eV9jaGFuZ2VzfHByaW9yaXR5fHByb2Nlc3NfbmFtZXxybGltaXRfcnR0aW1lfHJ0X3ByaW9yaXR5fHJ4X2J1ZnNfbXVsdGlwbGllcnxyeF9idWZzX3BvbGljeXxzY3JpcHR8c2tpcF9jaGVja19hZHZfYWRkcnxzdGFydHVwX2RlbGF5fHN0cmljdHxzeW5jX2dyb3VwfHRyYWNrX3Byb2Nlc3N8dmVyc2lvbil8d2FybXVwfHdlaWdodClcXGIvLFxuXG5cdCdjb25zdGFudCc6IC9cXGIoPzpBfEFBQUF8QUh8QkFDS1VQfENOQU1FfERSfE1BU1RFUnxNWHxOQVR8TlN8UEFTU3xTQ1RQfFNPQXxUQ1B8VFVOfFRYVHxVRFB8ZGh8Zm98bGJsY3xsYmxjcnxsY3xtaHxucXxvdmZ8cnJ8c2VkfHNofHdsY3x3cnIpXFxiLyxcblxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSktP1xcZCsoPzpcXC5cXGQrKT8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxub3xvZmZ8b258dHJ1ZXx5ZXMpXFxiLyxcblxuXHQncHVuY3R1YXRpb24nOiAvW1xce1xcfV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMua2V5bWFuID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiYyAuKi9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmlydHVhbC1rZXknOiB7XG5cdFx0cGF0dGVybjogL1xcW1xccyooPzooPzpBTFR8Q0FQU3xDVFJMfExBTFR8TENUUkx8TkNBUFN8UkFMVHxSQ1RSTHxTSElGVClcXHMrKSooPzpbVEtVXV9bXFx3P10rfFtBLUVdXFxkXFxkP3xcIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicpXFxzKlxcXS9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cblx0Ly8gaHR0cHM6Ly9oZWxwLmtleW1hbi5jb20vZGV2ZWxvcGVyL2xhbmd1YWdlL2d1aWRlL2hlYWRlcnNcblx0J2hlYWRlci1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8mXFx3Ky8sXG5cdFx0YWxpYXM6ICdib2xkJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cdCdoZWFkZXItc3RhdGVtZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpiaXRtYXB8Yml0bWFwc3xjYXBzIGFsd2F5cyBvZmZ8Y2FwcyBvbiBvbmx5fGNvcHlyaWdodHxob3RrZXl8bGFuZ3VhZ2V8bGF5b3V0fG1lc3NhZ2V8bmFtZXxzaGlmdCBmcmVlcyBjYXBzfHZlcnNpb24pXFxiL2ksXG5cdFx0YWxpYXM6ICdib2xkJyAvLyBhbGlhcyBmb3Igc3R5bGVzXG5cdH0sXG5cblx0J3J1bGUta2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGJhc2VsYXlvdXR8YmVlcHxjYWxsfGNvbnRleHR8ZGVhZGtleXxka3xpZnxpbmRleHxsYXllcnxub3Rhbnl8bnVsfG91dHN8cGxhdGZvcm18cmVzZXR8cmV0dXJufHNhdmV8c2V0fHN0b3JlfHVzZSlcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdzdHJ1Y3R1cmFsLWtleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFuc2l8YmVnaW58Z3JvdXB8bWF0Y2h8bmV3Y29udGV4dHxub21hdGNofHBvc3RrZXlzdHJva2V8cmVhZG9ubHl8dW5pY29kZXx1c2luZyBrZXlzKVxcYi9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblxuXHQnY29tcGlsZS10YXJnZXQnOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OmtleW1hbnxrZXltYW5vbmx5fGtleW1hbndlYnxrbWZsfHdlYXZlcik6L2ksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQvLyBVKyMjIyMsIHgjIyMsIGQjIyMgY2hhcmFjdGVycyBhbmQgbnVtYmVyc1xuXHQnbnVtYmVyJzogL1xcYig/OlVcXCtbXFxkQS1GXSt8ZFxcZCt8eFtcXGRhLWZdK3xcXGQrKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvWys+XFxcXCRdfFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCk9LF0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5rb3RsaW4gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdC8vIFRoZSBsb29rYmVoaW5kIHByZXZlbnRzIHdyb25nIGhpZ2hsaWdodGluZyBvZiBlLmcuIGtvdGxpbi5wcm9wZXJ0aWVzLmdldFxuXHRcdFx0cGF0dGVybjogLyhefFteLl0pXFxiKD86YWJzdHJhY3R8YWN0dWFsfGFubm90YXRpb258YXN8YnJlYWt8Ynl8Y2F0Y2h8Y2xhc3N8Y29tcGFuaW9ufGNvbnN0fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGNyb3NzaW5saW5lfGRhdGF8ZG98ZHluYW1pY3xlbHNlfGVudW18ZXhwZWN0fGV4dGVybmFsfGZpbmFsfGZpbmFsbHl8Zm9yfGZ1bnxnZXR8aWZ8aW1wb3J0fGlufGluZml4fGluaXR8aW5saW5lfGlubmVyfGludGVyZmFjZXxpbnRlcm5hbHxpc3xsYXRlaW5pdHxub2lubGluZXxudWxsfG9iamVjdHxvcGVufG9wZXJhdG9yfG91dHxvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWlmaWVkfHJldHVybnxzZWFsZWR8c2V0fHN1cGVyfHN1c3BlbmR8dGFpbHJlY3x0aGlzfHRocm93fHRvfHRyeXx0eXBlYWxpYXN8dmFsfHZhcnx2YXJhcmd8d2hlbnx3aGVyZXx3aGlsZSlcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86YFteXFxyXFxuYF0rYHxcXGJcXHcrKSg/PVxccypcXCgpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcLikoPzpgW15cXHJcXG5gXStgfFxcdyspKD89XFxzKlxceykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MFt4WF1bXFxkYS1mQS1GXSsoPzpfW1xcZGEtZkEtRl0rKSp8MFtiQl1bMDFdKyg/Ol9bMDFdKykqfFxcZCsoPzpfXFxkKykqKD86XFwuXFxkKyg/Ol9cXGQrKSopPyg/OltlRV1bKy1dP1xcZCsoPzpfXFxkKykqKT9bZkZMXT8pXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwrWys9XT98LVstPT5dP3w9PT89P3whKD86IXw9PT8pP3xbXFwvKiU8Pl09P3xbPzpdOj98XFwuXFwufCYmfFxcfFxcfHxcXGIoPzphbmR8aW52fG9yfHNobHxzaHJ8dXNocnx4b3IpXFxiL1xuXHR9KTtcblxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmtvdGxpblsnY2xhc3MtbmFtZSddO1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uSW5zaWRlID0ge1xuXHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5rb3RsaW5cblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgna290bGluJywgJ3N0cmluZycsIHtcblx0XHQvLyBodHRwczovL2tvdGxpbmxhbmcub3JnL3NwZWMvZXhwcmVzc2lvbnMuaHRtbCNzdHJpbmctaW50ZXJwb2xhdGlvbi1leHByZXNzaW9uc1xuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlteJF18XFwkKD86KD8hXFx7KXxcXHtbXnt9XSpcXH0pKSo/XCJcIlwiLyxcblx0XHRcdFx0YWxpYXM6ICdtdWx0aWxpbmUnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpbYS16X11cXHcqfFxce1tee31dKlxcfSkvaSxcblx0XHRcdFx0XHRcdGluc2lkZTogaW50ZXJwb2xhdGlvbkluc2lkZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuJF18XFxcXC58XFwkKD86KD8hXFx7KXxcXHtbXnt9XSpcXH0pKSpcIi8sXG5cdFx0XHRcdGFsaWFzOiAnc2luZ2xlbGluZScsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJCg/OlthLXpfXVxcdyp8XFx7W157fV0qXFx9KS9pLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogaW50ZXJwb2xhdGlvbkluc2lkZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy9zcGVjL2V4cHJlc3Npb25zLmh0bWwjY2hhcmFjdGVyLWxpdGVyYWxzXG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwoPzoufHVbYS1mQS1GMC05XXswLDR9KSknLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5rb3RsaW5bJ3N0cmluZyddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2tvdGxpbicsICdrZXl3b3JkJywge1xuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcQkAoPzpcXHcrOik/KD86W0EtWl1cXHcqfFxcW1teXFxdXStcXF0pLyxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2tvdGxpbicsICdmdW5jdGlvbicsIHtcblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3K0B8QFxcdytcXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMua3QgPSBQcmlzbS5sYW5ndWFnZXMua290bGluO1xuXHRQcmlzbS5sYW5ndWFnZXMua3RzID0gUHJpc20ubGFuZ3VhZ2VzLmtvdGxpbjtcbn0oUHJpc20pKTtcblxuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLWR1cGUtY2hhcmFjdGVycy1jaGFyYWN0ZXItY2xhc3MgKi9cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmVndWxhciBleHByZXNzaW9uIGZvciBjaGFyYWN0ZXJzIHRoYXQgYXJlIG5vdCBhbGxvd2VkIGluIGlkZW50aWZpZXJzLlxuXHQgKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIG5vbklkID0gL1xcc1xceDAwLVxceDFmXFx4MjItXFx4MmZcXHgzYS1cXHgzZlxceDViLVxceDVlXFx4NjBcXHg3Yi1cXHg3ZS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBTdXJyb3VuZCBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgSURzIHdpdGggcGF0dGVybnMgZm9yIG5vbi1JRCBzZXF1ZW5jZXMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIEEgcmVndWxhciBleHByZXNzaW9uIGZvciBpZGVudGlmaWVycy5cblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc10gVGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiBmbGFncy5cblx0ICogQHJldHVybnMge1JlZ0V4cH0gQSB3cmFwcGVkIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaWRlbnRpZmllcnMuXG5cdCAqL1xuXHRmdW5jdGlvbiB3cmFwSWQocGF0dGVybiwgZmxhZ3MpIHtcblx0XHRyZXR1cm4gUmVnRXhwKHBhdHRlcm4ucmVwbGFjZSgvPG5vbklkPi9nLCBub25JZCksIGZsYWdzKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5rdW1pciA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHwuKi9cblx0XHR9LFxuXG5cdFx0J3Byb2xvZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlxcblxcclwiXSpcInwnW15cXG5cXHInXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzNFx1MDQzMHxcdTA0M0RcdTA0MzVcdTA0NDIpKD89Wzxub25JZD5dfCQpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnb3BlcmF0b3Itd29yZCc6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzOHxcdTA0MzhcdTA0M0JcdTA0Mzh8XHUwNDNEXHUwNDM1KSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdzeXN0ZW0tdmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3cmFwSWQoLyhefFs8bm9uSWQ+XSlcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDcoPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQndHlwZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XHUwNDMyXHUwNDM1XHUwNDQ5fFx1MDQzQlx1MDQzOFx1MDQ0MnxcdTA0M0JcdTA0M0VcdTA0MzN8XHUwNDQxXHUwNDM4XHUwNDNDfFx1MDQ0Nlx1MDQzNVx1MDQzQikoPzpcXHgyMCpcdTA0NDJcdTA0MzBcdTA0MzEpPyg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XHUwNDNBXHUwNDNFXHUwNDNDXHUwNDNGXHUwNDNCfFx1MDQ0MVx1MDQzQVx1MDQzMFx1MDQzRFx1MDQzQVx1MDQzRVx1MDQzNHxcdTA0NDRcdTA0MzBcdTA0MzlcdTA0M0J8XHUwNDQ2XHUwNDMyXHUwNDM1XHUwNDQyKSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciB0eXBlIG5hbWVzIGJlY2F1c2Ugb2YgXCJcdTA0NDJcdTA0MzBcdTA0MzFcIi5cblx0XHQgKiBcIlx1MDQ0Mlx1MDQzMFx1MDQzMVwiIGlzIGEgcmVzZXJ2ZWQgd29yZCwgYnV0IG5ldmVyIHVzZWQgd2l0aG91dCBhIHByZWNlZGluZyB0eXBlIG5hbWUuXG5cdFx0ICogXCJcdTA0MURcdTA0MTBcdTA0MTdcdTA0MURcdTA0MTBcdTA0MjdcdTA0MThcdTA0MjJcdTA0MkNcIiwgXCJcdTA0MjRcdTA0MzJcdTA0MzJcdTA0M0VcdTA0MzRcIiwgYW5kIFwiXHUwNDI0XHUwNDMyXHUwNDRCXHUwNDMyXHUwNDNFXHUwNDM0XCIgYXJlIG5vdCByZXNlcnZlZCB3b3Jkcy5cblx0XHQgKi9cblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzMFx1MDQzQlx1MDQzM3xcdTA0MzBcdTA0NDBcdTA0MzMoPzpcXHgyMCpcdTA0NDBcdTA0MzVcdTA0MzcpP3xcdTA0MzJcdTA0MzJcdTA0M0VcdTA0MzR8XHUwNDEyXHUwNDFBXHUwNDFCXHUwNDJFXHUwNDI3XHUwNDE4XHUwNDIyXHUwNDJDfFx1MDQzMlx1MDQ0MVtcdTA0MzVcdTA0NTFdfFx1MDQzMlx1MDQ0Qlx1MDQzMVx1MDQzRVx1MDQ0MHxcdTA0MzJcdTA0NEJcdTA0MzJcdTA0M0VcdTA0MzR8XHUwNDMyXHUwNDRCXHUwNDQ1XHUwNDNFXHUwNDM0fFx1MDQzNFx1MDQzMFx1MDQzRFx1MDQzRXxcdTA0MzRcdTA0M0JcdTA0NEZ8XHUwNDM0XHUwNDNFfFx1MDQzNFx1MDQ0MXxcdTA0MzVcdTA0NDFcdTA0M0JcdTA0Mzh8XHUwNDM4XHUwNDNEXHUwNDMwXHUwNDQ3XHUwNDM1fFx1MDQzOFx1MDQ0MVx1MDQzRnxcdTA0MzhcdTA0NDFcdTA0M0ZcdTA0M0VcdTA0M0JcdTA0NENcdTA0MzdcdTA0M0VcdTA0MzJcdTA0MzBcdTA0NDJcdTA0NEN8XHUwNDNBXHUwNDNFXHUwNDNEKD86KD86XFx4MjArfF8pXHUwNDM4XHUwNDQxXHUwNDNGKT98XHUwNDNBXHUwNDQ2KD86KD86XFx4MjArfF8pXHUwNDNGXHUwNDQwXHUwNDM4KT98XHUwNDNEXHUwNDMwXHUwNDM0XHUwNDNFfFx1MDQzRFx1MDQzMFx1MDQ0N3xcdTA0M0RcdTA0NDF8XHUwNDNEXHUwNDQ2fFx1MDQzRVx1MDQ0MnxcdTA0M0ZcdTA0MzBcdTA0NDNcdTA0MzdcdTA0MzB8XHUwNDNGXHUwNDNFXHUwNDNBXHUwNDMwfFx1MDQzRlx1MDQ0MFx1MDQzOHxcdTA0NDBcdTA0MzBcdTA0MzdcdTA0MzA/fFx1MDQ0MFx1MDQzNVx1MDQzN3xcdTA0NDFcdTA0NDJcdTA0M0VcdTA0M0Z8XHUwNDQyXHUwNDMwXHUwNDMxfFx1MDQ0Mlx1MDQzRXxcdTA0NDNcdTA0NDJcdTA0MzJ8XHUwNDQ4XHUwNDMwXHUwNDMzKSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0LyoqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciByZXNlcnZlZCB3b3Jkcy4gKi9cblx0XHQnbmFtZSc6IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pW15cXGQ8bm9uSWQ+XVtePG5vbklkPl0qKD86XFx4MjArW148bm9uSWQ+XSspKig/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0LyoqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvciBuYW1lcy4gKi9cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pKD86XFxCXFwkW1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pKD89Wzxub25JZD5dfCQpLy5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qKiBTaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHNlYXJjaGluZyBmb3Igd29yZHMuICovXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo9fFsoKSw6O1xcW1xcXV0vLFxuXG5cdFx0LyoqXG5cdFx0ICogU2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciBzZWFyY2hpbmcgZm9yXG5cdFx0ICogLSBudW1lcmljIGNvbnN0YW50cyAoYmVjYXVzZSBvZiBcIitcIiBhbmQgXCItXCIpO1xuXHRcdCAqIC0gcHVuY3R1YXRpb24gbWFya3MgKGJlY2F1c2Ugb2YgXCI6PVwiIGFuZCBcIj1cIikuXG5cdFx0ICovXG5cdFx0J29wZXJhdG9yLWNoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwqXFwqP3w8Wz0+XT98Pj0/fFstKy89XS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMua3VtID0gUHJpc20ubGFuZ3VhZ2VzLmt1bWlyO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5rdXN0byA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvYGBgW1xcc1xcU10qP2BgYHxbaEhdPyg/OlwiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcInwnKD86W15cXHJcXG5cXFxcJ118XFxcXC4pKid8QCg/OlwiW15cXHJcXG5cIl0qXCJ8J1teXFxyXFxuJ10qJykpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQndmVyYic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcfFxccyopW2Etel1bXFx3LV0qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cblx0J2NvbW1hbmQnOiB7XG5cdFx0cGF0dGVybjogL1xcLlthLXpdW2EtelxcZC1dKlxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OmJvb2x8ZGF0ZXRpbWV8ZGVjaW1hbHxkeW5hbWljfGd1aWR8aW50fGxvbmd8cmVhbHxzdHJpbmd8dGltZXNwYW4pXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWNjZXNzfGFsaWFzfGFuZHxhbnRpfGFzfGFzY3xhdXRvfGJldHdlZW58Ynl8KD86Y29udGFpbnN8KD86ZW5kc3xzdGFydHMpd2l0aHxoYXMoPzpwZXJmaXh8c3VmZml4KT8pKD86X2NzKT98ZGF0YWJhc2V8ZGVjbGFyZXxkZXNjfGV4dGVybmFsfGZyb218ZnVsbG91dGVyfGhhc19hbGx8aW58aW5nZXN0aW9ufGlubGluZXxpbm5lcnxpbm5lcnVuaXF1ZXxpbnRvfCg/OmxlZnR8cmlnaHQpKD86YW50aSg/OnNlbWkpP3xpbm5lcnxvdXRlcnxzZW1pKT98bGV0fGxpa2V8bG9jYWx8bm90fG9mfG9ufG9yfHBhdHRlcm58cHJpbnR8cXVlcnlfcGFyYW1ldGVyc3xyYW5nZXxyZXN0cmljdHxzY2hlbWF8c2V0fHN0ZXB8dGFibGV8dGFibGVzfHRvfHZpZXd8d2hlcmV8d2l0aHxtYXRjaGVzXFxzK3JlZ2V4fG51bGxzXFxzKyg/OmZpcnN0fGxhc3QpKSg/IVtcXHctXSkvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxudWxsfHRydWUpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpLyxcblxuXHQnZGF0ZXRpbWUnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gUkZDIDgyMiArIFJGQyA4NTBcblx0XHRcdHBhdHRlcm46IC9cXGIoPzooPzpGcml8RnJpZGF5fE1vbnxNb25kYXl8U2F0fFNhdHVyZGF5fFN1bnxTdW5kYXl8VGh1fFRodXJzZGF5fFR1ZXxUdWVzZGF5fFdlZHxXZWRuZXNkYXkpXFxzKixcXHMqKT9cXGR7MSwyfSg/Olxccyt8LSkoPzpBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcCkoPzpcXHMrfC0pXFxkezJ9XFxzK1xcZHsyfTpcXGR7Mn0oPzo6XFxkezJ9KT8oPzpcXHMqKD86XFxiKD86W0EtWl18KD86W0VDTVRdW0RTXXxHTXxVKVQpfFsrLV1cXGR7NH0pKT9cXGIvLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBJU08gODYwMVxuXHRcdFx0cGF0dGVybjogL1srLV0/XFxiKD86XFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpbIFRdXFxkezJ9OlxcZHsyfSg/OjpcXGR7Mn0oPzpcXC5cXGQrKT8pPyk/fFxcZHsyfTpcXGR7Mn0oPzo6XFxkezJ9KD86XFwuXFxkKyk/KT8pWj8vLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fVxuXHRdLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOUEtRmEtZl0rfFxcZCsoPzpcXC5cXGQrKT8oPzpbRWVdWystXT9cXGQrKT8pKD86KD86bWlufHNlY3xbbW5cdTAwQjVdc3xbZGhtc118bWljcm9zZWNvbmR8dGljaylcXGIpP3xbKy1dP1xcYmluZlxcYi8sXG5cblx0J29wZXJhdG9yJzogLz0+fFshPV1+fFshPTw+XT0/fFstKyovJXxdfFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fSw7LjpdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgZnVuY1BhdHRlcm4gPSAvXFxcXCg/OlteYS16KClbXFxdXXxbYS16Kl0rKS9pO1xuXHR2YXIgaW5zaWRlRXF1ID0ge1xuXHRcdCdlcXVhdGlvbi1jb21tYW5kJzoge1xuXHRcdFx0cGF0dGVybjogZnVuY1BhdHRlcm4sXG5cdFx0XHRhbGlhczogJ3JlZ2V4J1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMubGF0ZXggPSB7XG5cdFx0J2NvbW1lbnQnOiAvJS4qLyxcblx0XHQvLyB0aGUgdmVyYmF0aW0gZW52aXJvbm1lbnQgcHJpbnRzIHdoaXRlc3BhY2UgdG8gdGhlIGRvY3VtZW50XG5cdFx0J2NkYXRhJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcYmVnaW5cXHsoKD86bHN0bGlzdGluZ3x2ZXJiYXRpbSlcXCo/KVxcfSlbXFxzXFxTXSo/KD89XFxcXGVuZFxce1xcMlxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgKiBlcXVhdGlvbnMgY2FuIGJlIGJldHdlZW4gJCQgJCQgb3IgJCAkIG9yIFxcKCBcXCkgb3IgXFxbIFxcXVxuXHRcdCAqIChhbGwgYXJlIG11bHRpbGluZSlcblx0XHQgKi9cblx0XHQnZXF1YXRpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXCQoPzpcXFxcW1xcc1xcU118W15cXFxcJF0pK1xcJFxcJHxcXCQoPzpcXFxcW1xcc1xcU118W15cXFxcJF0pK1xcJHxcXFxcXFwoW1xcc1xcU10qP1xcXFxcXCl8XFxcXFxcW1tcXHNcXFNdKj9cXFxcXFxdLyxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVFcXUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXFxcYmVnaW5cXHsoKD86YWxpZ258ZXFuYXJyYXl8ZXF1YXRpb258Z2F0aGVyfG1hdGh8bXVsdGxpbmUpXFwqPylcXH0pW1xcc1xcU10qPyg/PVxcXFxlbmRcXHtcXDJcXH0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVFcXUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Lypcblx0XHQgKiBhcmd1bWVudHMgd2hpY2ggYXJlIGtleXdvcmRzIG9yIHJlZmVyZW5jZXMgYXJlIGhpZ2hsaWdodGVkXG5cdFx0ICogYXMga2V5d29yZHNcblx0XHQgKi9cblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxcXCg/OmJlZ2lufGNpdGV8ZG9jdW1lbnRjbGFzc3xlbmR8bGFiZWx8cmVmfHVzZXBhY2thZ2UpKD86XFxbW15cXF1dK1xcXSk/XFx7KVtefV0rKD89XFx9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndXJsJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcdXJsXFx7KVtefV0rKD89XFx9KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvKlxuXHRcdCAqIHNlY3Rpb24gb3IgY2hhcHRlciBoZWFkbGluZXMgYXJlIGhpZ2hsaWdodGVkIGFzIGJvbGQgc28gdGhhdFxuXHRcdCAqIHRoZXkgc3RhbmQgb3V0IG1vcmVcblx0XHQgKi9cblx0XHQnaGVhZGxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcXFwoPzpjaGFwdGVyfGZyYW1ldGl0bGV8cGFyYWdyYXBofHBhcnR8c2VjdGlvbnxzdWJwYXJhZ3JhcGh8c3Vic2VjdGlvbnxzdWJzdWJwYXJhZ3JhcGh8c3Vic3Vic2VjdGlvbnxzdWJzdWJzdWJwYXJhZ3JhcGgpXFwqPyg/OlxcW1teXFxdXStcXF0pP1xceylbXn1dKyg/PVxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IGZ1bmNQYXR0ZXJuLFxuXHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXXt9Jl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnRleCA9IFByaXNtLmxhbmd1YWdlcy5sYXRleDtcblx0UHJpc20ubGFuZ3VhZ2VzLmNvbnRleHQgPSBQcmlzbS5sYW5ndWFnZXMubGF0ZXg7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmxhdHRlID0ge1xuXHRcdCdjb21tZW50JzogL15cXHtcXCpbXFxzXFxTXSovLFxuXHRcdCdsYXR0ZS10YWcnOiB7XG5cdFx0XHQvLyBodHRwczovL2xhdHRlLm5ldHRlLm9yZy9lbi90YWdzXG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHsoPzpcXC8oPz1bYS16XSkpPykoPzpbPV9dfFthLXpdXFx3KlxcYig/IVxcKCkpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXC8/fFxcfSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdwaHAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxTKD86W1xcc1xcU10qXFxTKT8vLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1waHAnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucGhwXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBtYXJrdXBMYXR0ZSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ2F0dHItdmFsdWUnLCB7XG5cdFx0J24tYXR0cic6IHtcblx0XHRcdHBhdHRlcm46IC9uOltcXHctXSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKSk/Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0ci1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eW15cXHM9XSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvPVtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHRcdC9ePS8sXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVtcIiddfFtcIiddJC8sXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0J3BocCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1xcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucGhwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdH0sIG1hcmt1cExhdHRlLnRhZyk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gJ2xhdHRlJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR2YXIgbGF0dGVQYXR0ZXJuID0gL1xce1xcKltcXHNcXFNdKj9cXCpcXH18XFx7W14nXCJcXHN7fSpdKD86W15cIicve31dfFxcLyg/IVsqL10pfChcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXH0vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnbGF0dGUnLCBsYXR0ZVBhdHRlcm4pO1xuXHRcdGVudi5ncmFtbWFyID0gbWFya3VwTGF0dGU7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2xhdHRlJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbi8qIEZJWE1FIDpcbiA6ZXh0ZW5kKCkgaXMgbm90IGhhbmRsZWQgc3BlY2lmaWNhbGx5IDogaXRzIGhpZ2hsaWdodGluZyBpcyBidWdneS5cbiBNaXhpbiB1c2FnZSBtdXN0IGJlIGluc2lkZSBhIHJ1bGVzZXQgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gQXQtcnVsZXMgKGUuZy4gaW1wb3J0KSBjb250YWluaW5nIGludGVycG9sYXRpb25zIGFyZSBidWdneS5cbiBEZXRhY2hlZCBydWxlc2V0cyBhcmUgaGlnaGxpZ2h0ZWQgYXMgYXQtcnVsZXMuXG4gQSBjb21tZW50IGJlZm9yZSBhIG1peGluIHVzYWdlIHByZXZlbnRzIHRoZSBsYXR0ZXIgdG8gYmUgcHJvcGVybHkgaGlnaGxpZ2h0ZWQuXG4gKi9cblxuUHJpc20ubGFuZ3VhZ2VzLmxlc3MgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjc3MnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYXRydWxlJzoge1xuXHRcdHBhdHRlcm46IC9AW1xcdy1dKD86XFwoKD86W14oKXt9XXxcXChbXigpe31dKlxcKSkqXFwpfFteKCl7fTtcXHNdfFxccysoPyFcXHMpKSo/KD89XFxzKlxceykvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1s6KCldL1xuXHRcdH1cblx0fSxcblx0Ly8gc2VsZWN0b3JzIGFuZCBtaXhpbnMgYXJlIGNvbnNpZGVyZWQgdGhlIHNhbWVcblx0J3NlbGVjdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oPzpAXFx7W1xcdy1dK1xcfXxbXnt9O1xcc0BdKSg/OkBcXHtbXFx3LV0rXFx9fFxcKCg/OlteKCl7fV18XFwoW14oKXt9XSpcXCkpKlxcKXxbXigpe307QFxcc118XFxzKyg/IVxccykpKj8oPz1cXHMqXFx7KS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQvLyBtaXhpbiBwYXJhbWV0ZXJzXG5cdFx0XHQndmFyaWFibGUnOiAvQCtbXFx3LV0rL1xuXHRcdH1cblx0fSxcblxuXHQncHJvcGVydHknOiAvKD86QFxce1tcXHctXStcXH18W1xcdy1dKSsoPzpcXCtfPyk/KD89XFxzKjopLyxcblx0J29wZXJhdG9yJzogL1srXFwtKlxcL10vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbGVzcycsICdwcm9wZXJ0eScsIHtcblx0J3ZhcmlhYmxlJzogW1xuXHRcdC8vIFZhcmlhYmxlIGRlY2xhcmF0aW9uICh0aGUgY29sb24gbXVzdCBiZSBjb25zdW1lZCEpXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL0BbXFx3LV0rXFxzKjovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBWYXJpYWJsZSB1c2FnZVxuXHRcdC9AQD9bXFx3LV0rL1xuXHRdLFxuXHQnbWl4aW4tdXNhZ2UnOiB7XG5cdFx0cGF0dGVybjogLyhbeztdXFxzKilbLiNdKD8hXFxkKVtcXHctXS4qPyg/PVsoO10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5zY2hlbWUgPSB7XG5cdFx0Ly8gdGhpcyBzdXBwb3J0cyBcIm5vcm1hbFwiIHNpbmdsZS1saW5lIGNvbW1lbnRzOlxuXHRcdC8vICAgOyBjb21tZW50XG5cdFx0Ly8gYW5kIChwb3RlbnRpYWxseSBuZXN0ZWQpIG11bHRpbGluZSBjb21tZW50czpcblx0XHQvLyAgICN8IGNvbW1lbnQgI3wgbmVzdGVkIHwjIHN0aWxsIGNvbW1lbnQgfCNcblx0XHQvLyAob25seSAxIGxldmVsIG9mIG5lc3RpbmcgaXMgc3VwcG9ydGVkKVxuXHRcdCdjb21tZW50JzogLzsuKnwjO1xccyooPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXFsoPzpbXlxcW1xcXV18XFxbW15cXFtcXF1dKlxcXSkqXFxdKXwjXFx8KD86W14jfF18Iyg/IVxcfCl8XFx8KD8hIyl8I1xcfCg/OlteI3xdfCMoPyFcXHwpfFxcfCg/ISMpKSpcXHwjKSpcXHwjLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJ1teKClcXFtcXF0jJ1xcc10rLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcXFwoPzpbdXhdW2EtZkEtRlxcZF0rXFxifFstYS16QS1aXStcXGJ8W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxcXFMpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2xhbWJkYS1wYXJhbWV0ZXInOiBbXG5cdFx0XHQvLyBodHRwczovL3d3dy5jcy5jbXUuZWR1L0dyb3Vwcy9BSS9odG1sL3I0cnMvcjRyc182Lmh0bWwjU0VDMzBcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW11sYW1iZGFcXHMrKSg/OltefCgpXFxbXFxdJ1xcc10rfFxcfCg/OlteXFxcXHxdfFxcXFwuKSpcXHwpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW11sYW1iZGFcXHMrWyhcXFtdKVteKClcXFtcXF0nXSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdKSg/OmJlZ2lufGNhc2UoPzotbGFtYmRhKT98Y29uZCg/Oi1leHBhbmQpP3xkZWZpbmUoPzotbGlicmFyeXwtbWFjcm98LXJlY29yZC10eXBlfC1zeW50YXh8LXZhbHVlcyk/fGRlZm1hY3JvfGRlbGF5KD86LWZvcmNlKT98ZG98ZWxzZXxleGNlcHR8ZXhwb3J0fGd1YXJkfGlmfGltcG9ydHxpbmNsdWRlKD86LWNpfC1saWJyYXJ5LWRlY2xhcmF0aW9ucyk/fGxhbWJkYXxsZXQoPzpyZWMpPyg/Oi1zeW50YXh8LXZhbHVlc3xcXCopP3xsZXRcXCotdmFsdWVzfG9ubHl8cGFyYW1ldGVyaXplfHByZWZpeHwoPzpxdWFzaS0/KT9xdW90ZXxyZW5hbWV8c2V0IXxzeW50YXgtKD86Y2FzZXxydWxlcyl8dW5sZXNzfHVucXVvdGUoPzotc3BsaWNpbmcpP3x3aGVuKSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2J1aWx0aW4nOiB7XG5cdFx0XHQvLyBhbGwgZnVuY3Rpb25zIG9mIHRoZSBiYXNlIGxpYnJhcnkgb2YgUjdSUyBwbHVzIHNvbWUgb2YgYnVpbHQtaW5zIG9mIFI1UnNcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdKSg/OmFic3xhbmR8YXBwZW5kfGFwcGx5fGFzc29jfGFzc1txdl18YmluYXJ5LXBvcnRcXD98Ym9vbGVhbj0/XFw/fGJ5dGV2ZWN0b3IoPzotYXBwZW5kfC1jb3B5fC1jb3B5IXwtbGVuZ3RofC11OC1yZWZ8LXU4LXNldCF8XFw/KT98Y2FhcnxjYWRyfGNhbGwtd2l0aC0oPzpjdXJyZW50LWNvbnRpbnVhdGlvbnxwb3J0fHZhbHVlcyl8Y2FsbFxcL2NjfGNhcnxjZGFyfGNkZHJ8Y2RyfGNlaWxpbmd8Y2hhcig/Oi0+aW50ZWdlcnwtcmVhZHlcXD98XFw/fDxcXD98PD1cXD98PVxcP3w+XFw/fD49XFw/KXxjbG9zZS0oPzppbnB1dC1wb3J0fG91dHB1dC1wb3J0fHBvcnQpfGNvbXBsZXhcXD98Y29uc3xjdXJyZW50LSg/OmVycm9yfGlucHV0fG91dHB1dCktcG9ydHxkZW5vbWluYXRvcnxkeW5hbWljLXdpbmR8ZW9mLW9iamVjdFxcPz98ZXFcXD98ZXF1YWxcXD98ZXF2XFw/fGVycm9yfGVycm9yLW9iamVjdCg/Oi1pcnJpdGFudHN8LW1lc3NhZ2V8XFw/KXxldmFsfGV2ZW5cXD98ZXhhY3QoPzotaW50ZWdlci1zcXJ0fC1pbnRlZ2VyXFw/fFxcPyk/fGV4cHR8ZmVhdHVyZXN8ZmlsZS1lcnJvclxcP3xmbG9vcig/Oi1xdW90aWVudHwtcmVtYWluZGVyfFxcLyk/fGZsdXNoLW91dHB1dC1wb3J0fGZvci1lYWNofGdjZHxnZXQtb3V0cHV0LSg/OmJ5dGV2ZWN0b3J8c3RyaW5nKXxpbmV4YWN0XFw/P3xpbnB1dC1wb3J0KD86LW9wZW5cXD98XFw/KXxpbnRlZ2VyKD86LT5jaGFyfFxcPyl8bGNtfGxlbmd0aHxsaXN0KD86LT5zdHJpbmd8LT52ZWN0b3J8LWNvcHl8LXJlZnwtc2V0IXwtdGFpbHxcXD8pP3xtYWtlLSg/OmJ5dGV2ZWN0b3J8bGlzdHxwYXJhbWV0ZXJ8c3RyaW5nfHZlY3Rvcil8bWFwfG1heHxtZW1iZXJ8bWVtcXxtZW12fG1pbnxtb2R1bG98bmVnYXRpdmVcXD98bmV3bGluZXxub3R8bnVsbFxcP3xudW1iZXIoPzotPnN0cmluZ3xcXD8pfG51bWVyYXRvcnxvZGRcXD98b3Blbi0oPzppbnB1dHxvdXRwdXQpLSg/OmJ5dGV2ZWN0b3J8c3RyaW5nKXxvcnxvdXRwdXQtcG9ydCg/Oi1vcGVuXFw/fFxcPyl8cGFpclxcP3xwZWVrLWNoYXJ8cGVlay11OHxwb3J0XFw/fHBvc2l0aXZlXFw/fHByb2NlZHVyZVxcP3xxdW90aWVudHxyYWlzZXxyYWlzZS1jb250aW51YWJsZXxyYXRpb25hbFxcP3xyYXRpb25hbGl6ZXxyZWFkLSg/OmJ5dGV2ZWN0b3J8Ynl0ZXZlY3RvciF8Y2hhcnxlcnJvclxcP3xsaW5lfHN0cmluZ3x1OCl8cmVhbFxcP3xyZW1haW5kZXJ8cmV2ZXJzZXxyb3VuZHxzZXQtY1thZF1yIXxzcXVhcmV8c3RyaW5nKD86LT5saXN0fC0+bnVtYmVyfC0+c3ltYm9sfC0+dXRmOHwtPnZlY3RvcnwtYXBwZW5kfC1jb3B5fC1jb3B5IXwtZmlsbCF8LWZvci1lYWNofC1sZW5ndGh8LW1hcHwtcmVmfC1zZXQhfFxcP3w8XFw/fDw9XFw/fD1cXD98PlxcP3w+PVxcPyk/fHN1YnN0cmluZ3xzeW1ib2woPzotPnN0cmluZ3xcXD98PVxcPyl8c3ludGF4LWVycm9yfHRleHR1YWwtcG9ydFxcP3x0cnVuY2F0ZSg/Oi1xdW90aWVudHwtcmVtYWluZGVyfFxcLyk/fHU4LXJlYWR5XFw/fHV0ZjgtPnN0cmluZ3x2YWx1ZXN8dmVjdG9yKD86LT5saXN0fC0+c3RyaW5nfC1hcHBlbmR8LWNvcHl8LWNvcHkhfC1maWxsIXwtZm9yLWVhY2h8LWxlbmd0aHwtbWFwfC1yZWZ8LXNldCF8XFw/KT98d2l0aC1leGNlcHRpb24taGFuZGxlcnx3cml0ZS0oPzpieXRldmVjdG9yfGNoYXJ8c3RyaW5nfHU4KXx6ZXJvXFw/KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW10pKD86Wy0rKiUvXXxbPD5dPT98PT4/KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdC8vIFRoZSBudW1iZXIgcGF0dGVybiBmcm9tIFt0aGUgUjdSUyBzcGVjXShodHRwczovL3NtYWxsLnI3cnMub3JnL2F0dGFjaG1lbnQvcjdycy5wZGYpLlxuXHRcdFx0Ly9cblx0XHRcdC8vIDxudW1iZXI+ICAgICAgOj0gPG51bSAyPnw8bnVtIDg+fDxudW0gMTA+fDxudW0gMTY+XG5cdFx0XHQvLyA8bnVtIFI+ICAgICAgIDo9IDxwcmVmaXggUj48Y29tcGxleCBSPlxuXHRcdFx0Ly8gPGNvbXBsZXggUj4gICA6PSA8cmVhbCBSPig/OkA8cmVhbCBSPnw8aW1hZ2luYXJ5IFI+KT98PGltYWdpbmFyeSBSPlxuXHRcdFx0Ly8gPGltYWdpbmFyeSBSPiA6PSBbKy1dKD86PHVyZWFsIFI+fCg/OmluZnxuYW4pXFwuMCk/aVxuXHRcdFx0Ly8gPHJlYWwgUj4gICAgICA6PSBbKy1dPzx1cmVhbCBSPnxbKy1dKD86aW5mfG5hbilcXC4wXG5cdFx0XHQvLyA8dXJlYWwgUj4gICAgIDo9IDx1aW50IFI+KD86XFwvPHVpbnQgUj4pP1xuXHRcdFx0Ly8gICAgICAgICAgICAgICAgfCA8ZGVjaW1hbCBSPlxuXHRcdFx0Ly9cblx0XHRcdC8vIDxkZWNpbWFsIDEwPiAgOj0gKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspP1xuXHRcdFx0Ly8gPHVpbnQgUj4gICAgICA6PSA8ZGlnaXQgUj4rXG5cdFx0XHQvLyA8cHJlZml4IFI+ICAgIDo9IDxyYWRpeCBSPig/OiNbZWldKT98KD86I1tlaV0pPzxyYWRpeCBSPlxuXHRcdFx0Ly8gPHJhZGl4IDI+ICAgICA6PSAjYlxuXHRcdFx0Ly8gPHJhZGl4IDg+ICAgICA6PSAjb1xuXHRcdFx0Ly8gPHJhZGl4IDEwPiAgICA6PSAoPzojZCk/XG5cdFx0XHQvLyA8cmFkaXggMTY+ICAgIDo9ICN4XG5cdFx0XHQvLyA8ZGlnaXQgMj4gICAgIDo9IFswMV1cblx0XHRcdC8vIDxkaWdpdCA4PiAgICAgOj0gWzAtN11cblx0XHRcdC8vIDxkaWdpdCAxMD4gICAgOj0gXFxkXG5cdFx0XHQvLyA8ZGlnaXQgMTY+ICAgIDo9IFswLTlhLWZdXG5cdFx0XHQvL1xuXHRcdFx0Ly8gVGhlIHByb2JsZW0gd2l0aCB0aGlzIGdyYW1tYXIgaXMgdGhhdCB0aGUgcmVzdWx0aW5nIHJlZ2V4IGlzIHdheSB0byBjb21wbGV4LCBzbyB3ZSBzaW1wbGlmeSBieSBncm91cGluZyBhbGxcblx0XHRcdC8vIG5vbi1kZWNpbWFsIGJhc2VzIHRvZ2V0aGVyLiBUaGlzIHJlc3VsdHMgaW4gYSBkZWNpbWFsIChkZWMpIGFuZCBjb21iaW5lZCBiaW5hcnksIG9jdGFsLCBhbmQgaGV4YWRlY2ltYWwgKGJveClcblx0XHRcdC8vIHBhdHRlcm46XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoU29ydGVkQk5GKHtcblx0XHRcdFx0Jzx1cmVhbCBkZWM+JzogL1xcZCsoPzpcXC9cXGQrKXwoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VzZmRsXVsrLV0/XFxkKyk/Ly5zb3VyY2UsXG5cdFx0XHRcdCc8cmVhbCBkZWM+JzogL1srLV0/PHVyZWFsIGRlYz58WystXSg/OmluZnxuYW4pXFwuMC8uc291cmNlLFxuXHRcdFx0XHQnPGltYWdpbmFyeSBkZWM+JzogL1srLV0oPzo8dXJlYWwgZGVjPnwoPzppbmZ8bmFuKVxcLjApP2kvLnNvdXJjZSxcblx0XHRcdFx0Jzxjb21wbGV4IGRlYz4nOiAvPHJlYWwgZGVjPig/OkA8cmVhbCBkZWM+fDxpbWFnaW5hcnkgZGVjPik/fDxpbWFnaW5hcnkgZGVjPi8uc291cmNlLFxuXHRcdFx0XHQnPG51bSBkZWM+JzogLyg/OiNkKD86I1tlaV0pP3wjW2VpXSg/OiNkKT8pPzxjb21wbGV4IGRlYz4vLnNvdXJjZSxcblxuXHRcdFx0XHQnPHVyZWFsIGJveD4nOiAvWzAtOWEtZl0rKD86XFwvWzAtOWEtZl0rKT8vLnNvdXJjZSxcblx0XHRcdFx0JzxyZWFsIGJveD4nOiAvWystXT88dXJlYWwgYm94PnxbKy1dKD86aW5mfG5hbilcXC4wLy5zb3VyY2UsXG5cdFx0XHRcdCc8aW1hZ2luYXJ5IGJveD4nOiAvWystXSg/Ojx1cmVhbCBib3g+fCg/OmluZnxuYW4pXFwuMCk/aS8uc291cmNlLFxuXHRcdFx0XHQnPGNvbXBsZXggYm94Pic6IC88cmVhbCBib3g+KD86QDxyZWFsIGJveD58PGltYWdpbmFyeSBib3g+KT98PGltYWdpbmFyeSBib3g+Ly5zb3VyY2UsXG5cdFx0XHRcdCc8bnVtIGJveD4nOiAvI1tib3hdKD86I1tlaV0pP3woPzojW2VpXSk/I1tib3hdPGNvbXBsZXggYm94Pi8uc291cmNlLFxuXG5cdFx0XHRcdCc8bnVtYmVyPic6IC8oXnxbKClcXFtcXF1cXHNdKSg/OjxudW0gZGVjPnw8bnVtIGJveD4pKD89WygpXFxbXFxdXFxzXXwkKS8uc291cmNlLFxuXHRcdFx0fSksICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbKClcXFtcXF1cXHNdKSMoPzpbZnRdfGZhbHNlfHRydWUpKD89WygpXFxbXFxdXFxzXXwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W14nYCNdKVsoXFxbXSkoPzpbXnwoKVxcW1xcXSdcXHNdK3xcXHwoPzpbXlxcXFx8XXxcXFxcLikqXFx8KSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2lkZW50aWZpZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58WygpXFxbXFxdXFxzXSlcXHwoPzpbXlxcXFx8XXxcXFxcLikqXFx8KD89WygpXFxbXFxdXFxzXXwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxdJ10vXG5cdH07XG5cblx0LyoqXG5cdCAqIEdpdmVuIGEgdG9wb2xvZ2ljYWxseSBzb3J0ZWQgQk5GIGdyYW1tYXIsIHRoaXMgd2lsbCByZXR1cm4gdGhlIFJlZ0V4cCBzb3VyY2Ugb2YgbGFzdCBydWxlIG9mIHRoZSBncmFtbWFyLlxuXHQgKlxuXHQgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGdyYW1tYXJcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIFNvcnRlZEJORihncmFtbWFyKSB7XG5cdFx0Zm9yICh2YXIga2V5IGluIGdyYW1tYXIpIHtcblx0XHRcdGdyYW1tYXJba2V5XSA9IGdyYW1tYXJba2V5XS5yZXBsYWNlKC88W1xcd1xcc10rPi9nLCBmdW5jdGlvbiAoa2V5KSB7XG5cdFx0XHRcdHJldHVybiAnKD86JyArIGdyYW1tYXJba2V5XS50cmltKCkgKyAnKSc7XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0Ly8gcmV0dXJuIHRoZSBsYXN0IGl0ZW1cblx0XHRyZXR1cm4gZ3JhbW1hcltrZXldO1xuXHR9XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzY2hlbWVFeHByZXNzaW9uID0gL1xcKCg/OlteKCk7XCIjXFxcXF18XFxcXFtcXHNcXFNdfDsuKig/IS4pfFwiKD86W15cIlxcXFxdfFxcXFwuKSpcInwjKD86XFx7KD86KD8hI1xcfSlbXFxzXFxTXSkqI1xcfXxbXntdKXw8ZXhwcj4pKlxcKS8uc291cmNlO1xuXHQvLyBhbGxvdyBmb3IgdXAgdG8gcG93KDIsIHJlY3Vyc2l2ZW5lc3NMb2cyKSBtYW55IGxldmVscyBvZiByZWN1cnNpdmUgYnJhY2UgZXhwcmVzc2lvbnNcblx0Ly8gRm9yIHNvbWUgcmVhc29uLCB0aGlzIGNhbid0IGJlIDRcblx0dmFyIHJlY3Vyc2l2ZW5lc3NMb2cyID0gNTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCByZWN1cnNpdmVuZXNzTG9nMjsgaSsrKSB7XG5cdFx0c2NoZW1lRXhwcmVzc2lvbiA9IHNjaGVtZUV4cHJlc3Npb24ucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVtZUV4cHJlc3Npb247IH0pO1xuXHR9XG5cdHNjaGVtZUV4cHJlc3Npb24gPSBzY2hlbWVFeHByZXNzaW9uLnJlcGxhY2UoLzxleHByPi9nLCAvW15cXHNcXFNdLy5zb3VyY2UpO1xuXG5cblx0dmFyIGxpbHlwb25kID0gUHJpc20ubGFuZ3VhZ2VzLmxpbHlwb25kID0ge1xuXHRcdCdjb21tZW50JzogLyUoPzooPyFcXHspLip8XFx7W1xcc1xcU10qPyVcXH0pLyxcblx0XHQnZW1iZWRkZWQtc2NoZW1lJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbPVxcc10pIyg/OlwiKD86W15cIlxcXFxdfFxcXFwuKSpcInxbXlxccygpXCJdKig/OlteXFxzKCldfDxleHByPikpLy5zb3VyY2UucmVwbGFjZSgvPGV4cHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNjaGVtZUV4cHJlc3Npb247IH0pLCAnbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc2NoZW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKCMpW1xcc1xcU10rJC8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNjaGVtZScsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZW1iZWRkZWQtbGlseXBvbmQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jXFx7W1xcc1xcU10qPyNcXH0vLFxuXHRcdFx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eI1xce3wjXFx9JC8sXG5cdFx0XHRcdFx0XHRcdFx0J2xpbHlwb25kJzoge1xuXHRcdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWxpbHlwb25kJyxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuc2NoZW1lXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvIy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcXFxuZXdcXHMrKVtcXHctXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxcXFthLXpdWy1cXHddKi9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxcXC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC9bPXxdfDw8fD4+Lyxcblx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W2EtelxcZF0pKD86Jyt8LCt8W19eXT8tW19eXT8oPzpbLSteIT4uX118KD89XFxkKSl8W19eXVxcLj98Wy4hXSl8W3t9KClbXFxdPD5efl18XFxcXFsoKVtcXF08PlxcXFwhXXwtLXxfXy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC9cXGQrKT9cXGIvXG5cdH07XG5cblx0bGlseXBvbmRbJ2VtYmVkZGVkLXNjaGVtZSddLmluc2lkZVsnc2NoZW1lJ10uaW5zaWRlWydlbWJlZGRlZC1saWx5cG9uZCddLmluc2lkZVsnbGlseXBvbmQnXS5pbnNpZGUgPSBsaWx5cG9uZDtcblxuXHRQcmlzbS5sYW5ndWFnZXMubHkgPSBsaWx5cG9uZDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubGlxdWlkID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHslXFxzKmNvbW1lbnRcXHMqJVxcfSlbXFxzXFxTXSsoPz1cXHslXFxzKmVuZGNvbW1lbnRcXHMqJVxcfSQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdkZWxpbWl0ZXInOiB7XG5cdFx0cGF0dGVybjogL15cXHsoPzpcXHtcXHt8WyVcXHtdKS0/fC0/KD86XFx9XFx9fFslXFx9XSlcXH0kLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJdKlwifCdbXiddKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xhc3NpZ258YnJlYWt8KD86ZW5kKT8oPzpjYXB0dXJlfGNhc2V8Y29tbWVudHxmb3J8Zm9ybXxpZnxwYWdpbmF0ZXxyYXd8c3R5bGV8dGFibGVyb3d8dW5sZXNzKXxjb250aW51ZXxjeWNsZXxkZWNyZW1lbnR8ZWNob3xlbHNlfGVsc2lmfGlufGluY2x1ZGV8aW5jcmVtZW50fGxpbWl0fGxpcXVpZHxvZmZzZXR8cmFuZ2V8cmVuZGVyfHJldmVyc2VkfHNlY3Rpb258d2hlbnx3aXRoKVxcYi8sXG5cdCdvYmplY3QnOiAvXFxiKD86YWRkcmVzc3xhbGxfY291bnRyeV9vcHRpb25fdGFnc3xhcnRpY2xlfGJsb2NrfGJsb2d8Y2FydHxjaGVja291dHxjb2xsZWN0aW9ufGNvbG9yfGNvdW50cnl8Y291bnRyeV9vcHRpb25fdGFnc3xjdXJyZW5jeXxjdXJyZW50X3BhZ2V8Y3VycmVudF90YWdzfGN1c3RvbWVyfGN1c3RvbWVyX2FkZHJlc3N8ZGF0ZXxkaXNjb3VudF9hbGxvY2F0aW9ufGRpc2NvdW50X2FwcGxpY2F0aW9ufGV4dGVybmFsX3ZpZGVvfGZpbHRlcnxmaWx0ZXJfdmFsdWV8Zm9udHxmb3Jsb29wfGZ1bGZpbGxtZW50fGdlbmVyaWNfZmlsZXxnaWZ0X2NhcmR8Z3JvdXB8aGFuZGxlfGltYWdlfGxpbmVfaXRlbXxsaW5rfGxpbmtsaXN0fGxvY2FsaXphdGlvbnxsb2NhdGlvbnxtZWFzdXJlbWVudHxtZWRpYXxtZXRhZmllbGR8bW9kZWx8bW9kZWxfc291cmNlfG9yZGVyfHBhZ2V8cGFnZV9kZXNjcmlwdGlvbnxwYWdlX2ltYWdlfHBhZ2VfdGl0bGV8cGFydHxwb2xpY3l8cHJvZHVjdHxwcm9kdWN0X29wdGlvbnxyZWNvbW1lbmRhdGlvbnN8cmVxdWVzdHxyb2JvdHN8cm91dGVzfHJ1bGV8c2NyaXB0fHNlYXJjaHxzZWxsaW5nX3BsYW58c2VsbGluZ19wbGFuX2FsbG9jYXRpb258c2VsbGluZ19wbGFuX2dyb3VwfHNoaXBwaW5nX21ldGhvZHxzaG9wfHNob3BfbG9jYWxlfHNpdGVtYXB8c3RvcmVfYXZhaWxhYmlsaXR5fHRheF9saW5lfHRlbXBsYXRlfHRoZW1lfHRyYW5zYWN0aW9ufHVuaXRfcHJpY2VfbWVhc3VyZW1lbnR8dXNlcl9hZ2VudHx2YXJpYW50fHZpZGVvfHZpZGVvX3NvdXJjZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZmlsdGVyJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gYXJyYXkgZnVuY3Rpb25zXG5cdFx0XHRwYXR0ZXJuOiAvKFxcLlxccyopKD86Zmlyc3R8bGFzdHxzaXplKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxuaWx8dHJ1ZSlcXGIvLFxuXHQncmFuZ2UnOiB7XG5cdFx0cGF0dGVybjogL1xcLlxcLi8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL1Nob3BpZnkvbGlxdWlkL2Jsb2IvNjk4ZjVlMGQ5Njc0MjNlMDEzZjYxNjlkOTExMWJkOTY5YmQ3ODMzNy9saWIvbGlxdWlkL2xleGVyLnJiI0wyMVxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnb3BlcmF0b3InOiAvWyE9XT18PD58Wzw+XT0/fFt8Pzo9LV18XFxiKD86YW5kfGNvbnRhaW5zKD89XFxzKXxvcilcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sXFxbXFxdKCldLyxcblx0J2VtcHR5Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJlbXB0eVxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxufTtcblxuUHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdHZhciBsaXF1aWRQYXR0ZXJuID0gL1xceyVcXHMqY29tbWVudFxccyolXFx9W1xcc1xcU10qP1xceyVcXHMqZW5kY29tbWVudFxccyolXFx9fFxceyg/OiVbXFxzXFxTXSo/JXxcXHtcXHtbXFxzXFxTXSo/XFx9XFx9fFxce1tcXHNcXFNdKj9cXH0pXFx9L2c7XG5cdHZhciBpbnNpZGVSYXcgPSBmYWxzZTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnbGlxdWlkJywgbGlxdWlkUGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0dmFyIHRhZ01hdGNoID0gL15cXHslLT9cXHMqKFxcdyspLy5leGVjKG1hdGNoKTtcblx0XHRpZiAodGFnTWF0Y2gpIHtcblx0XHRcdHZhciB0YWcgPSB0YWdNYXRjaFsxXTtcblx0XHRcdGlmICh0YWcgPT09ICdyYXcnICYmICFpbnNpZGVSYXcpIHtcblx0XHRcdFx0aW5zaWRlUmF3ID0gdHJ1ZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9IGVsc2UgaWYgKHRhZyA9PT0gJ2VuZHJhdycpIHtcblx0XHRcdFx0aW5zaWRlUmF3ID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiAhaW5zaWRlUmF3O1xuXHR9KTtcbn0pO1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnbGlxdWlkJyk7XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvKipcblx0ICogRnVuY3Rpb25zIHRvIGNvbnN0cnVjdCByZWd1bGFyIGV4cHJlc3Npb25zXG5cdCAqIGUuZy4gKGludGVyYWN0aXZlIC4uLiBvciAoaW50ZXJhY3RpdmUpXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBzaW1wbGVfZm9ybShuYW1lKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cCgvKFxcKCkvLnNvdXJjZSArICcoPzonICsgbmFtZSArICcpJyArIC8oPz1bXFxzXFwpXSkvLnNvdXJjZSk7XG5cdH1cblx0LyoqXG5cdCAqIGJvb2xlYW5zIGFuZCBudW1iZXJzXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBwcmltaXRpdmUocGF0dGVybikge1xuXHRcdHJldHVybiBSZWdFeHAoLyhbXFxzKFtdKS8uc291cmNlICsgJyg/OicgKyBwYXR0ZXJuICsgJyknICsgLyg/PVtcXHMpXSkvLnNvdXJjZSk7XG5cdH1cblxuXHQvLyBQYXR0ZXJucyBpbiByZWd1bGFyIGV4cHJlc3Npb25zXG5cblx0Ly8gU3ltYm9sIG5hbWUuIFNlZSBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2VtYWNzL21hbnVhbC9odG1sX25vZGUvZWxpc3AvU3ltYm9sLVR5cGUuaHRtbFxuXHQvLyAmIGFuZCA6IGFyZSBleGNsdWRlZCBhcyB0aGV5IGFyZSB1c3VhbGx5IHVzZWQgZm9yIHNwZWNpYWwgcHVycG9zZXNcblx0dmFyIHN5bWJvbCA9IC8oPyFcXGQpWy0rKi9+IUAkJV49PD57fVxcd10rLy5zb3VyY2U7XG5cdC8vIHN5bWJvbCBzdGFydGluZyB3aXRoICYgdXNlZCBpbiBmdW5jdGlvbiBhcmd1bWVudHNcblx0dmFyIG1hcmtlciA9ICcmJyArIHN5bWJvbDtcblx0Ly8gT3BlbiBwYXJlbnRoZXNpcyBmb3IgbG9vay1iZWhpbmRcblx0dmFyIHBhciA9ICcoXFxcXCgpJztcblx0dmFyIGVuZHBhciA9ICcoPz1cXFxcKSknO1xuXHQvLyBFbmQgdGhlIHBhdHRlcm4gd2l0aCBsb29rLWFoZWFkIHNwYWNlXG5cdHZhciBzcGFjZSA9ICcoPz1cXFxccyknO1xuXHR2YXIgbmVzdGVkUGFyID0gLyg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSpcXCkpKlxcKSkqXFwpKSovLnNvdXJjZTtcblxuXHR2YXIgbGFuZ3VhZ2UgPSB7XG5cdFx0Ly8gVGhyZWUgb3IgZm91ciBzZW1pY29sb25zIGFyZSBjb25zaWRlcmVkIGEgaGVhZGluZy5cblx0XHQvLyBTZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy9tYW51YWwvaHRtbF9ub2RlL2VsaXNwL0NvbW1lbnQtVGlwcy5odG1sXG5cdFx0aGVhZGluZzoge1xuXHRcdFx0cGF0dGVybjogLzs7Oy4qLyxcblx0XHRcdGFsaWFzOiBbJ2NvbW1lbnQnLCAndGl0bGUnXVxuXHRcdH0sXG5cdFx0Y29tbWVudDogLzsuKi8sXG5cdFx0c3RyaW5nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRhcmd1bWVudDogL1stQS1aXSsoPz1bLixcXHNdKS8sXG5cdFx0XHRcdHN5bWJvbDogUmVnRXhwKCdgJyArIHN5bWJvbCArIFwiJ1wiKVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3F1b3RlZC1zeW1ib2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXCIjPydcIiArIHN5bWJvbCksXG5cdFx0XHRhbGlhczogWyd2YXJpYWJsZScsICdzeW1ib2wnXVxuXHRcdH0sXG5cdFx0J2xpc3AtcHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJzonICsgc3ltYm9sKSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblx0XHRzcGxpY2U6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnLEA/JyArIHN5bWJvbCksXG5cdFx0XHRhbGlhczogWydzeW1ib2wnLCAndmFyaWFibGUnXVxuXHRcdH0sXG5cdFx0a2V5d29yZDogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdFx0cGFyICtcblx0XHRcdFx0XHRcdCcoPzphbmR8KD86Y2wtKT9sZXRmfGNsLWxvb3B8Y29uZHxjb25zfGVycm9yfGlmfCg/OmxleGljYWwtKT9sZXRcXFxcKj98bWVzc2FnZXxub3R8bnVsbHxvcnxwcm92aWRlfHJlcXVpcmV8c2V0cXx1bmxlc3N8dXNlLXBhY2thZ2V8d2hlbnx3aGlsZSknICtcblx0XHRcdFx0XHRcdHNwYWNlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHRwYXIgKyAnKD86YXBwZW5kfGJ5fGNvbGxlY3R8Y29uY2F0fGRvfGZpbmFsbHl8Zm9yfGlufHJldHVybiknICsgc3BhY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdGRlY2xhcmU6IHtcblx0XHRcdHBhdHRlcm46IHNpbXBsZV9mb3JtKC9kZWNsYXJlLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdGludGVyYWN0aXZlOiB7XG5cdFx0XHRwYXR0ZXJuOiBzaW1wbGVfZm9ybSgvaW50ZXJhY3RpdmUvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0Ym9vbGVhbjoge1xuXHRcdFx0cGF0dGVybjogcHJpbWl0aXZlKC9uaWx8dC8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdG51bWJlcjoge1xuXHRcdFx0cGF0dGVybjogcHJpbWl0aXZlKC9bLStdP1xcZCsoPzpcXC5cXGQqKT8vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHRkZWZ2YXI6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyAnZGVmKD86Y29uc3R8Y3VzdG9tfGdyb3VwfHZhcilcXFxccysnICsgc3ltYm9sKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0a2V5d29yZDogL15kZWZbYS16XSsvLFxuXHRcdFx0XHR2YXJpYWJsZTogUmVnRXhwKHN5bWJvbClcblx0XHRcdH1cblx0XHR9LFxuXHRcdGRlZnVuOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgLyg/OmNsLSk/KD86ZGVmbWFjcm98ZGVmdW5cXCo/KVxccysvLnNvdXJjZSArIHN5bWJvbCArIC9cXHMrXFwoLy5zb3VyY2UgKyBuZXN0ZWRQYXIgKyAvXFwpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRrZXl3b3JkOiAvXig/OmNsLSk/ZGVmXFxTKy8sXG5cdFx0XHRcdC8vIFNlZSBiZWxvdywgdGhpcyBwcm9wZXJ0eSBuZWVkcyB0byBiZSBkZWZpbmVkIGxhdGVyIHNvIHRoYXQgaXQgY2FuXG5cdFx0XHRcdC8vIHJlZmVyZW5jZSB0aGUgbGFuZ3VhZ2Ugb2JqZWN0LlxuXHRcdFx0XHRhcmd1bWVudHM6IG51bGwsXG5cdFx0XHRcdGZ1bmN0aW9uOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXlxcXFxzKScgKyBzeW1ib2wpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0cHVuY3R1YXRpb246IC9bKCldL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0bGFtYmRhOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgJ2xhbWJkYVxcXFxzK1xcXFwoXFxcXHMqKD86Jj8nICsgc3ltYm9sICsgJyg/OlxcXFxzKyY/JyArIHN5bWJvbCArICcpKlxcXFxzKik/XFxcXCknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0a2V5d29yZDogL15sYW1iZGEvLFxuXHRcdFx0XHQvLyBTZWUgYmVsb3csIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgZGVmaW5lZCBsYXRlciBzbyB0aGF0IGl0IGNhblxuXHRcdFx0XHQvLyByZWZlcmVuY2UgdGhlIGxhbmd1YWdlIG9iamVjdC5cblx0XHRcdFx0YXJndW1lbnRzOiBudWxsLFxuXHRcdFx0XHRwdW5jdHVhdGlvbjogL1soKV0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRjYXI6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyBzeW1ib2wpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0cHVuY3R1YXRpb246IFtcblx0XHRcdC8vIG9wZW4gcGFyZW4sIGJyYWNrZXRzLCBhbmQgY2xvc2UgcGFyZW5cblx0XHRcdC8oPzpbJ2AsXT9cXCh8WylcXFtcXF1dKS8sXG5cdFx0XHQvLyBjb25zXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcLig/PVxccykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdF1cblx0fTtcblxuXHR2YXIgYXJnID0ge1xuXHRcdCdsaXNwLW1hcmtlcic6IFJlZ0V4cChtYXJrZXIpLFxuXHRcdCd2YXJmb3JtJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9cXCgvLnNvdXJjZSArIHN5bWJvbCArIC9cXHMrKD89XFxTKS8uc291cmNlICsgbmVzdGVkUGFyICsgL1xcKS8uc291cmNlKSxcblx0XHRcdGluc2lkZTogbGFuZ3VhZ2Vcblx0XHR9LFxuXHRcdCdhcmd1bWVudCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W1xccyhdKS8uc291cmNlICsgc3ltYm9sKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH0sXG5cdFx0cmVzdDogbGFuZ3VhZ2Vcblx0fTtcblxuXHR2YXIgZm9ybXMgPSAnXFxcXFMrKD86XFxcXHMrXFxcXFMrKSonO1xuXG5cdHZhciBhcmdsaXN0ID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChwYXIgKyBuZXN0ZWRQYXIgKyBlbmRwYXIpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVzdC12YXJzJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyYoPzpib2R5fHJlc3QpXFxcXHMrJyArIGZvcm1zKSxcblx0XHRcdFx0aW5zaWRlOiBhcmdcblx0XHRcdH0sXG5cdFx0XHQnb3RoZXItbWFya2VyLXZhcnMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnJig/OmF1eHxvcHRpb25hbClcXFxccysnICsgZm9ybXMpLFxuXHRcdFx0XHRpbnNpZGU6IGFyZ1xuXHRcdFx0fSxcblx0XHRcdGtleXM6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcma2V5XFxcXHMrJyArIGZvcm1zICsgJyg/OlxcXFxzKyZhbGxvdy1vdGhlci1rZXlzKT8nKSxcblx0XHRcdFx0aW5zaWRlOiBhcmdcblx0XHRcdH0sXG5cdFx0XHRhcmd1bWVudDoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoc3ltYm9sKSxcblx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdH0sXG5cdFx0XHRwdW5jdHVhdGlvbjogL1soKV0vXG5cdFx0fVxuXHR9O1xuXG5cdGxhbmd1YWdlWydsYW1iZGEnXS5pbnNpZGUuYXJndW1lbnRzID0gYXJnbGlzdDtcblx0bGFuZ3VhZ2VbJ2RlZnVuJ10uaW5zaWRlLmFyZ3VtZW50cyA9IFByaXNtLnV0aWwuY2xvbmUoYXJnbGlzdCk7XG5cdGxhbmd1YWdlWydkZWZ1biddLmluc2lkZS5hcmd1bWVudHMuaW5zaWRlLnN1Ymxpc3QgPSBhcmdsaXN0O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5saXNwID0gbGFuZ3VhZ2U7XG5cdFByaXNtLmxhbmd1YWdlcy5lbGlzcCA9IGxhbmd1YWdlO1xuXHRQcmlzbS5sYW5ndWFnZXMuZW1hY3MgPSBsYW5ndWFnZTtcblx0UHJpc20ubGFuZ3VhZ2VzWydlbWFjcy1saXNwJ10gPSBsYW5ndWFnZTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmxpdmVzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdpbnRlcnBvbGF0ZWQtc3RyaW5nJzoge1xuXHRcdC8qIExvb2stYmVoaW5kIGFuZCBsb29rLWFoZWFkIHByZXZlbnRzIHdyb25nIGJlaGF2aW9yIG9mIHRoZSBncmVlZHkgcGF0dGVyblxuXHRcdCogZm9yY2luZyBpdCB0byBtYXRjaCBcIlwiXCItcXVvdGVkIHN0cmluZyB3aGVuIGl0IHdvdWxkIG90aGVyd2lzZSBtYXRjaCBcIi1xdW90ZWQgZmlyc3QuICovXG5cdFx0cGF0dGVybjogLyhefFteXCJdKShcIlwiXCJ8XCIpKD86XFxcXFtcXHNcXFNdfCg/IVxcMilbXlxcXFxdKSpcXDIoPyFcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjW2Etel9dKD86LT9bYS16XXxbXFxkX10pKi9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSNcXHtbXn1dK1xcfS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLygnJyd8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC88XFxbW1xcc1xcU10qP1xcXT4vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvXFxcXFteXFxzLDtcXF0pfV0rL1xuXHRdLFxuXHQncmVnZXgnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLyg/OlxcW1teXFxyXFxuXFxdXSpcXF18XFxcXC58KD8hXFwvXFwvKVteXFxcXFxcW10pK1xcL1xcL1tnaW15dV17MCw1fS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXC8oPzpcXFtbXlxcclxcblxcXV0qXFxdfFxcXFwufFteL1xcXFxcXHJcXG5cXFtdKStcXC9bZ2lteXVdezAsNX0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58KD8hLSkuKVxcYig/OmJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xlbHNlfGV4dGVuZHN8ZmFsbHRocm91Z2h8ZmluYWxseXxmb3IoPzogZXZlcik/fGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aXR8bGV0fGxvb3B8bmV3fG51bGx8b3RoZXJ3aXNlfG93bnxyZXR1cm58c3VwZXJ8c3dpdGNofHRoYXR8dGhlbnx0aGlzfHRocm93fHRyeXx1bmxlc3N8dW50aWx8dmFyfHZvaWR8d2hlbnx3aGlsZXx5aWVsZCkoPyEtKVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQtb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhefFteLV0pXFxiKD86KD86ZGVsZXRlfHJlcXVpcmV8dHlwZW9mKSF8KD86YW5kfGJ5fGRlbGV0ZXxleHBvcnR8ZnJvbXxpbXBvcnQoPzogYWxsKT98aW58aW5zdGFuY2VvZnxpcyg/OiBub3R8bnQpP3xub3R8b2Z8b3J8dGlsfHRvfHR5cGVvZnx3aXRofHhvcikoPyEtKVxcYikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmZhbHNlfG5vfG9mZnxvbnx0cnVlfHllcykoPyEtKVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2FyZ3VtZW50Jzoge1xuXHRcdC8vIERvbid0IG1hdGNoIC4mLiBub3IgJiZcblx0XHRwYXR0ZXJuOiAvKF58KD8hXFwuJlxcLilbXiZdKSYoPyEmKVxcZCovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86XFxkK35bXFxkYS16XSt8XFxkW1xcZF9dKig/OlxcLlxcZFtcXGRfXSopPyg/OlthLXpdXFx3Kik/KS9pLFxuXHQnaWRlbnRpZmllcic6IC9bYS16X10oPzotP1thLXpdfFtcXGRfXSkqL2ksXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvLyBTcGFjZWQgLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oIClcXC4oPz0gKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBGdWxsIGxpc3QsIGluIG9yZGVyOlxuXHRcdC8vIC49IC5+IC4uIC4uLlxuXHRcdC8vIC4mLiAuXi4gLjw8LiAuPj4uIC4+Pj4uXG5cdFx0Ly8gOj0gOjogOjo9XG5cdFx0Ly8gJiZcblx0XHQvLyB8fCB8PlxuXHRcdC8vIDwgPDwgPDw8IDw8PDxcblx0XHQvLyA8LSA8LS0gPC0hIDwtLSFcblx0XHQvLyA8fiA8fn4gPH4hIDx+fiFcblx0XHQvLyA8fCA8PSA8P1xuXHRcdC8vID4gPj4gPj0gPj9cblx0XHQvLyAtIC0tIC0+IC0tPlxuXHRcdC8vICsgKytcblx0XHQvLyBAIEBAXG5cdFx0Ly8gJSAlJVxuXHRcdC8vICogKipcblx0XHQvLyAhICE9ICF+PVxuXHRcdC8vICF+PiAhfn4+XG5cdFx0Ly8gIS0+ICEtLT5cblx0XHQvLyB+IH4+IH5+PiB+PVxuXHRcdC8vID0gPT1cblx0XHQvLyBeIF5eXG5cdFx0Ly8gLyA/XG5cdFx0L1xcLig/Ols9fl18XFwuXFwuPyl8XFwuKD86WyZ8Xl18PDx8Pj4+PylcXC58Oig/Oj18Oj0/KXwmJnxcXHxbfD5dfDwoPzo8PD88P3wtLT8hP3x+fj8hP3xbfD0/XSk/fD5bPj0/XT98LSg/Oi0+P3w+KT98XFwrXFwrP3xAQD98JSU/fFxcKlxcKj98ISg/On4/PXwtLT8+fH4/fj4pP3x+KD86fj8+fD0pP3w9PT98XFxeXFxeP3xbXFwvP10vXG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXXwuLDo7YF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubGl2ZXNjcmlwdFsnaW50ZXJwb2xhdGVkLXN0cmluZyddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLmxpdmVzY3JpcHQ7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmxsdm0gPSB7XG5cdFx0J2NvbW1lbnQnOiAvOy4qLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCd2YXJpYWJsZSc6IC9bJUAhI10oPzooPyFcXGQpKD86Wy0kLlxcd118XFxcXFthLWZcXGRdezJ9KSt8XFxkKykvaSxcblx0XHQnbGFiZWwnOiAvKD8hXFxkKSg/OlstJC5cXHddfFxcXFxbYS1mXFxkXXsyfSkrOi9pLFxuXHRcdCd0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmRvdWJsZXxmbG9hdHxmcDEyOHxoYWxmfGlbMS05XVxcZCp8bGFiZWx8bWV0YWRhdGF8cHBjX2ZwMTI4fHRva2VufHZvaWR8eDg2X2ZwODB8eDg2X21teClcXGIvLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYlthLXpfXVthLXpfMC05XSpcXGIvLFxuXHRcdCdudW1iZXInOiAvWystXT9cXGJcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/XFxifFxcYjB4W1xcZEEtRmEtZl0rXFxifFxcYjB4S1tcXGRBLUZhLWZdezIwfVxcYnxcXGIweFtNTF1bXFxkQS1GYS1mXXszMn1cXGJ8XFxiMHhIW1xcZEEtRmEtZl17NH1cXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC4hKj08Pl0vLFxuXHR9O1xufShQcmlzbSkpO1xuXG4vLyBUaGlzIGlzIGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBmb3IgZ2VuZXJpYyBsb2cgZmlsZXMuXG4vLyBTaW5jZSB0aGVyZSBpcyBubyBvbmUgbG9nIGZvcm1hdCwgdGhpcyBsYW5ndWFnZSBkZWZpbml0aW9uIGhhcyB0byBzdXBwb3J0IGFsbCBmb3JtYXRzIHRvIHNvbWUgZGVncmVlLlxuLy9cbi8vIEJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9NVERMOS92aW0tbG9nLWhpZ2hsaWdodGluZ1xuXG5QcmlzbS5sYW5ndWFnZXMubG9nID0ge1xuXHQnc3RyaW5nJzoge1xuXHRcdC8vIFNpbmdsZS1xdW90ZWQgc3RyaW5ncyBtdXN0IG5vdCBiZSBjb25mdXNlZCB3aXRoIHBsYWluIHRleHQuIEUuZy4gQ2FuJ3QgaXNuJ3QgU3VzYW4ncyBDaHJpcycgdG95XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD8hW3N0XSB8IFxcdykoPzpbXidcXFxcXFxyXFxuXXxcXFxcLikqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHR9LFxuXG5cdCdleGNlcHRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Ll0pW2Etel1bXFx3Ll0qKD86RXJyb3J8RXhjZXB0aW9uKTouKig/Oig/Olxcclxcbj98XFxuKVsgXFx0XSooPzphdFsgXFx0XS4rfFxcLnszfS4qfENhdXNlZCBieTouKikpKyg/Oig/Olxcclxcbj98XFxuKVsgXFx0XSpcXC5cXC5cXC4gLiopPy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6IFsnamF2YXN0YWNrdHJhY2UnLCAnbGFuZ3VhZ2UtamF2YXN0YWNrdHJhY2UnXSxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlc1snamF2YXN0YWNrdHJhY2UnXSB8fCB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGJhdFxcYi8sXG5cdFx0XHQnZnVuY3Rpb24nOiAvW2Etel9dW1xcdyRdKig/PVxcKCkvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1suOigpXS9cblx0XHR9XG5cdH0sXG5cblx0J2xldmVsJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpBTEVSVHxDUklUfENSSVRJQ0FMfEVNRVJHfEVNRVJHRU5DWXxFUlJ8RVJST1J8RkFJTFVSRXxGQVRBTHxTRVZFUkUpXFxiLyxcblx0XHRcdGFsaWFzOiBbJ2Vycm9yJywgJ2ltcG9ydGFudCddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86V0FSTnxXQVJOSU5HfFdSTilcXGIvLFxuXHRcdFx0YWxpYXM6IFsnd2FybmluZycsICdpbXBvcnRhbnQnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkRJU1BMQVl8SU5GfElORk98Tk9USUNFfFNUQVRVUylcXGIvLFxuXHRcdFx0YWxpYXM6IFsnaW5mbycsICdrZXl3b3JkJ11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpEQkd8REVCVUd8RklORSlcXGIvLFxuXHRcdFx0YWxpYXM6IFsnZGVidWcnLCAna2V5d29yZCddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86RklORVJ8RklORVNUfFRSQUNFfFRSQ3xWRVJCT1NFfFZSQilcXGIvLFxuXHRcdFx0YWxpYXM6IFsndHJhY2UnLCAnY29tbWVudCddXG5cdFx0fVxuXHRdLFxuXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W1xcXXxdKVsgXFx0XSopW2Etel9dKD86W1xcdy1dfFxcYlxcL1xcYikqKD86Wy4gXVxcKD9cXHcoPzpbXFx3LV18XFxiXFwvXFxiKSpcXCk/KSo6KD89XFxzKS9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J3NlcGFyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tK10pLXszLH18PXszLH18XFwqezMsfXwtIC0gL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdH0sXG5cblx0J3VybCc6IC9cXGIoPzpmaWxlfGZ0cHxodHRwcz8pOlxcL1xcL1teXFxzfCw7J1wiXSpbXlxcc3wsOydcIj4uXS8sXG5cdCdlbWFpbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVstXFx3Ky5dK0BbYS16XVthLXowLTktXSooPzpcXC5bYS16XVthLXowLTktXSopKyg/PVxccykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd1cmwnXG5cdH0sXG5cblx0J2lwLWFkZHJlc3MnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OlxcZHsxLDN9KD86XFwuXFxkezEsM30pezN9KVxcYi8sXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J21hYy1hZGRyZXNzJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS1mMC05XXsyfSg/OjpbYS1mMC05XXsyfSl7NX1cXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnZG9tYWluJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpW2Etel1bYS16MC05LV0qKD86XFwuW2Etel1bYS16MC05LV0qKSpcXC5bYS16XVthLXowLTktXSsoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cblx0J3V1aWQnOiB7XG5cdFx0cGF0dGVybjogL1xcYlswLTlhLWZdezh9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezR9LVswLTlhLWZdezEyfVxcYi9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cdCdoYXNoJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpbYS1mMC05XXszMn0pezEsMn1cXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXG5cdCdmaWxlLXBhdGgnOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpdOltcXFxcL11bXlxcc3wsOzooKXt9XFxbXFxdXCInXSt8KF58W1xcczpcXFtcXF0oPnxdKVxcLnswLDJ9XFwvXFx3W15cXHN8LDs6KCl7fVxcW1xcXVwiJ10qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cblx0J2RhdGUnOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0L1xcYlxcZHs0fVstL11cXGR7Mn1bLS9dXFxkezJ9KD86VCg/PVxcZHsxLDJ9Oil8KD89XFxzXFxkezEsMn06KSkvLnNvdXJjZSArXG5cdFx0XHQnfCcgK1xuXHRcdFx0L1xcYlxcZHsxLDR9Wy0vIF0oPzpcXGR7MSwyfXxBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcClbLS8gXVxcZHsyLDR9VD9cXGIvLnNvdXJjZSArXG5cdFx0XHQnfCcgK1xuXHRcdFx0L1xcYig/Oig/OkZyaXxNb258U2F0fFN1bnxUaHV8VHVlfFdlZCkoPzpcXHN7MSwyfSg/OkFwcnxBdWd8RGVjfEZlYnxKYW58SnVsfEp1bnxNYXJ8TWF5fE5vdnxPY3R8U2VwKSk/fEFwcnxBdWd8RGVjfEZlYnxKYW58SnVsfEp1bnxNYXJ8TWF5fE5vdnxPY3R8U2VwKVxcc3sxLDJ9XFxkezEsMn1cXGIvLnNvdXJjZSxcblx0XHRcdCdpJ1xuXHRcdCksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCd0aW1lJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXGR7MSwyfTpcXGR7MSwyfTpcXGR7MSwyfSg/OlsuLDpdXFxkKyk/KD86XFxzP1srLV1cXGR7Mn06P1xcZHsyfXxaKT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG51bGx8dHJ1ZSlcXGIvaSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14uXFx3XSkoPzoweFthLWYwLTldK3wwb1swLTddK3wwYlswMV0rfHY/XFxkW1xcZGEtZl0qKD86XFwuXFxkKykqKD86ZVsrLV0/XFxkKyk/W2Etel17MCwzfVxcYilcXGIoPyFcXC5cXHcpL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC9bOzo/PD0+fi9AISQlJitcXC18Xigpe30qI10vLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXS4sXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5sb2xjb2RlID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHQvXFxiT0JUV1xcc1tcXHNcXFNdKj9cXHNUTERSXFxiLyxcblx0XHQvXFxiQlRXLisvXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86Oi58W15cIjpdKSpcIi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvOlxce1tefV0rXFx9Lyxcblx0XHRcdCdzeW1ib2wnOiBbXG5cdFx0XHRcdC86XFwoW2EtZlxcZF0rXFwpL2ksXG5cdFx0XHRcdC86XFxbW15cXF1dK1xcXS8sXG5cdFx0XHRcdC86Wyk+b1wiOl0vXG5cdFx0XHRdXG5cdFx0fSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC8oPzpcXEItKT8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspLyxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OkEgKT8oPzpCVUtLSVR8Tk9PQnxOVU1CQVJ8TlVNQlJ8VFJPT0Z8WUFSTikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL0EoPz1cXHMpL1xuXHRcdH1cblx0fSxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpKD86SU0gSU4gWVJ8SU0gT1VUVEEgWVIpIClbYS16QS1aXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKSg/OkhPVyBJWiBJfEkgSVp8SVopIClbYS16QS1aXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPzpBTnxGT1VORCBZUnxHSU1NRUh8R1RGT3xIQUl8SEFTIEF8SE9XIElaIEl8SSBIQVMgQXxJIElafElGIFUgU0FZIFNPfElNIElOIFlSfElNIE9VVFRBIFlSfElTIE5PVyg/OiBBKT98SVRaKD86IEEpP3xJWnxLVEhYfEtUSFhCWUV8TElFSyg/OiBBKT98TUFFS3xNRUJCRXxNS0FZfE5FUkZJTnxOTyBXQUl8TyBIQUkgSU18TyBSTFlcXD98T0lDfE9NR3xPTUdXVEZ8UnxTTU9PU0h8U1JTfFRJTHxVUFBJTnxWSVNJQkxFfFdJTEV8V1RGXFw/fFlBIFJMWXxZUikoPz1cXHN8LHwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvJ1ooPz1cXHN8LHwkKS9cblx0XSxcblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogLyhefFxccykoPzpGQUlMfFdJTikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogLyhefFxccylJVCg/PVxcc3wsfCQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/Ok5PVHxCT1RIIFNBRU18RElGRlJJTlR8KD86QUxMfEFOWXxCSUdHUnxCT1RIfERJRkZ8RUlUSEVSfE1PRHxQUk9EVUtUfFFVT1NIVU5UfFNNQUxMUnxTVU18V09OKSBPRikoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvXFwuezN9fFx1MjAyNnwsfCEvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubWFnbWEgPSB7XG5cdCdvdXRwdXQnOiB7XG5cdFx0cGF0dGVybjogL14oPi4qKD86XFxyKD86XFxufCg/IVxcbikpfFxcbikpKD8hPikoPzouK3woPzpcXHIoPzpcXG58KD8hXFxuKSl8XFxuKSg/IT4pLiopKD86KD86XFxyKD86XFxufCg/IVxcbikpfFxcbikoPyE+KS4qKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCJdKVwiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQvLyBodHRwOi8vbWFnbWEubWF0aHMudXN5ZC5lZHUuYXUvbWFnbWEvaGFuZGJvb2svdGV4dC84MlxuXHQna2V5d29yZCc6IC9cXGIoPzpffGFkanxhbmR8YXNzZXJ0fGFzc2VydDJ8YXNzZXJ0M3xhc3NpZ25lZHxicmVha3xieXxjYXNlfGNhdHxjYXRjaHxjbGVhcnxjbXBlcXxjbXBuZXxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZGVsZXRlfGRpZmZ8ZGl2fGRvfGVsaWZ8ZWxzZXxlbmR8ZXF8ZXJyb3J8ZXZhbHxleGlzdHN8ZXhpdHxmb3J8Zm9yYWxsfGZvcndhcmR8ZnByaW50ZnxmcmVlemV8ZnVuY3Rpb258Z2V8Z3R8aWZ8aWxvYWR8aW1wb3J0fGlufGludHJpbnNpY3xpc3xqb2lufGxlfGxvYWR8bG9jYWx8bHR8bWVldHxtb2R8bmV8bm90fG5vdGFkanxub3Rpbnxub3RzdWJzZXR8b3J8cHJpbnR8cHJpbnRmfHByb2NlZHVyZXxxdWl0fHJhbmRvbXxyZWFkfHJlYWRpfHJlcGVhdHxyZXF1aXJlfHJlcXVpcmVnZXxyZXF1aXJlcmFuZ2V8cmVzdG9yZXxyZXR1cm58c2F2ZXxzZGlmZnxzZWxlY3R8c3Vic2V0fHRoZW58dGltZXx0b3x0cnl8dW50aWx8dnByaW50fHZwcmludGZ8dnRpbWV8d2hlbnx3aGVyZXx3aGlsZXx4b3IpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdnZW5lcmF0b3InOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqPCkvaSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dfFxcLlxcLikoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VFXVsrLV0/XFxkKyk/KD86X1thLXpdPyk/KD89JHxbXlxcdy5dfFxcLlxcLikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnb3BlcmF0b3InOiAvLT58Wy0rKi9efiF8Iz1dfDo9fFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde308Piw7LjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1ha2VmaWxlID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXSkqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnYnVpbHRpbi10YXJnZXQnOiB7XG5cdFx0cGF0dGVybjogL1xcLltBLVpdW146Iz1cXHNdKyg/PVxccyo6KD8hPSkpLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH0sXG5cblx0J3RhcmdldCc6IHtcblx0XHRwYXR0ZXJuOiAvXig/OlteOj1cXHNdfFsgXFx0XSsoPyFbXFxzOl0pKSsoPz1cXHMqOig/IT0pKS9tLFxuXHRcdGFsaWFzOiAnc3ltYm9sJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9cXCQrKD86KD8hXFwkKVteKCl7fTojPVxcc10rfCg/PVsoe10pKS9cblx0XHR9XG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCQrKD86KD8hXFwkKVteKCl7fTojPVxcc10rfFxcKFtAKiU8Xis/XVtERl1cXCl8KD89Wyh7XSkpLyxcblxuXHQvLyBEaXJlY3RpdmVzXG5cdCdrZXl3b3JkJzogLy1pbmNsdWRlXFxifFxcYig/OmRlZmluZXxlbHNlfGVuZGVmfGVuZGlmfGV4cG9ydHxpZm4/ZGVmfGlmbj9lcXxpbmNsdWRlfG92ZXJyaWRlfHByaXZhdGV8c2luY2x1ZGV8dW5kZWZpbmV8dW5leHBvcnR8dnBhdGgpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyhcXCgpKD86YWJzcGF0aHxhZGRzdWZmaXh8YW5kfGJhc2VuYW1lfGNhbGx8ZGlyfGVycm9yfGV2YWx8ZmlsZXxmaWx0ZXIoPzotb3V0KT98ZmluZHN0cmluZ3xmaXJzdHdvcmR8Zmxhdm9yfGZvcmVhY2h8Z3VpbGV8aWZ8aW5mb3xqb2lufGxhc3R3b3JkfGxvYWR8bm90ZGlyfG9yfG9yaWdpbnxwYXRzdWJzdHxyZWFscGF0aHxzaGVsbHxzb3J0fHN0cmlwfHN1YnN0fHN1ZmZpeHx2YWx1ZXx3YXJuaW5nfHdpbGRjYXJkfHdvcmQoPzpsaXN0fHMpPykoPz1bIFxcdF0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8oPzo6OnxbPzorIV0pPz18W3xAXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bOjsoKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBBbGxvdyBvbmx5IG9uZSBsaW5lIGJyZWFrXG5cdHZhciBpbm5lciA9IC8oPzpcXFxcLnxbXlxcXFxcXG5cXHJdfCg/OlxcbnxcXHJcXG4/KSg/IVtcXHJcXG5dKSkvLnNvdXJjZTtcblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIHRoZSBib2xkIG9yIGl0YWxpYyBwYXR0ZXJuLlxuXHQgKlxuXHQgKiBUaGlzIGFsc28gYWRkcyBhIGxvb2tiZWhpbmQgZ3JvdXAgdG8gdGhlIGdpdmVuIHBhdHRlcm4gdG8gZW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gaXMgbm90IGJhY2tzbGFzaC1lc2NhcGVkLlxuXHQgKlxuXHQgKiBfTm90ZTpfIEtlZXAgaW4gbWluZCB0aGF0IHRoaXMgYWRkcyBhIGNhcHR1cmluZyBncm91cC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIGNyZWF0ZUlubGluZShwYXR0ZXJuKSB7XG5cdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPGlubmVyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBpbm5lcjsgfSk7XG5cdFx0cmV0dXJuIFJlZ0V4cCgvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopLy5zb3VyY2UgKyAnKD86JyArIHBhdHRlcm4gKyAnKScpO1xuXHR9XG5cblxuXHR2YXIgdGFibGVDZWxsID0gLyg/OlxcXFwufGBgKD86W15gXFxyXFxuXXxgKD8hYCkpK2BgfGBbXmBcXHJcXG5dK2B8W15cXFxcfFxcclxcbmBdKSsvLnNvdXJjZTtcblx0dmFyIHRhYmxlUm93ID0gL1xcfD9fXyg/OlxcfF9fKStcXHw/KD86KD86XFxufFxcclxcbj8pfCg/IVtcXHNcXFNdKSkvLnNvdXJjZS5yZXBsYWNlKC9fXy9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0YWJsZUNlbGw7IH0pO1xuXHR2YXIgdGFibGVMaW5lID0gL1xcfD9bIFxcdF0qOj8tezMsfTo/WyBcXHRdKig/OlxcfFsgXFx0XSo6Py17Myx9Oj9bIFxcdF0qKStcXHw/KD86XFxufFxcclxcbj8pLy5zb3VyY2U7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMubWFya2Rvd24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7fSk7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmtkb3duJywgJ3Byb2xvZycsIHtcblx0XHQnZnJvbnQtbWF0dGVyLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogLyheKD86XFxzKltcXHJcXG5dKT8pLS0tKD8hLilbXFxzXFxTXSo/W1xcclxcbl0tLS0oPyEuKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eLS0tfC0tLSQvLFxuXHRcdFx0XHQnZnJvbnQtbWF0dGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXFMrKD86XFxzK1xcUyspKi8sXG5cdFx0XHRcdFx0YWxpYXM6IFsneWFtbCcsICdsYW5ndWFnZS15YW1sJ10sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMueWFtbFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYmxvY2txdW90ZSc6IHtcblx0XHRcdC8vID4gLi4uXG5cdFx0XHRwYXR0ZXJuOiAvXj4oPzpbXFx0IF0qPikqL20sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3RhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJyg/OicgKyB0YWJsZVJvdyArICcpKicsICdtJyksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RhYmxlLWRhdGEtcm93cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ14oJyArIHRhYmxlUm93ICsgdGFibGVMaW5lICsgJykoPzonICsgdGFibGVSb3cgKyAnKSokJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWJsZS1kYXRhJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3RhYmxlLWxpbmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArICcpJyArIHRhYmxlTGluZSArICckJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHx8Oj8tezMsfTo/L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3RhYmxlLWhlYWRlci1yb3cnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeJyArIHRhYmxlUm93ICsgJyQnKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWJsZS1oZWFkZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWJsZUNlbGwpLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBQcmVmaXhlZCBieSA0IHNwYWNlcyBvciAxIHRhYiBhbmQgcHJlY2VkZWQgYnkgYW4gZW1wdHkgbGluZVxuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxuKVsgXFx0XSpcXG58KD86XnxcXHJcXG4/KVsgXFx0XSpcXHJcXG4/KSg/OiB7NH18XFx0KS4rKD86KD86XFxufFxcclxcbj8pKD86IHs0fXxcXHQpLispKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGBgYG9wdGlvbmFsIGxhbmd1YWdlXG5cdFx0XHRcdC8vIGNvZGUgYmxvY2tcblx0XHRcdFx0Ly8gYGBgXG5cdFx0XHRcdHBhdHRlcm46IC9eYGBgW1xcc1xcU10qP15gYGAkL20sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NvZGUtYmxvY2snOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGAuKig/OlxcbnxcXHJcXG4/KSlbXFxzXFxTXSs/KD89KD86XFxufFxcclxcbj8pXmBgYCQpL20sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnY29kZS1sYW5ndWFnZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKGBgYCkuKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvYGBgL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQndGl0bGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHRpdGxlIDFcblx0XHRcdFx0Ly8gPT09PT09PVxuXG5cdFx0XHRcdC8vIHRpdGxlIDJcblx0XHRcdFx0Ly8gLS0tLS0tLVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxTLiooPzpcXG58XFxyXFxuPykoPzo9PSt8LS0rKSg/PVsgXFx0XSokKS9tLFxuXHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCcsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdHB1bmN0dWF0aW9uOiAvPT0rJHwtLSskL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyAjIHRpdGxlIDFcblx0XHRcdFx0Ly8gIyMjIyMjIHRpdGxlIDZcblx0XHRcdFx0cGF0dGVybjogLyheXFxzKikjLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRwdW5jdHVhdGlvbjogL14jK3wjKyQvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdocic6IHtcblx0XHRcdC8vICoqKlxuXHRcdFx0Ly8gLS0tXG5cdFx0XHQvLyAqICogKlxuXHRcdFx0Ly8gLS0tLS0tLS0tLS1cblx0XHRcdHBhdHRlcm46IC8oXlxccyopKFsqLV0pKD86W1xcdCBdKlxcMil7Mix9KD89XFxzKiQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdsaXN0Jzoge1xuXHRcdFx0Ly8gKiBpdGVtXG5cdFx0XHQvLyArIGl0ZW1cblx0XHRcdC8vIC0gaXRlbVxuXHRcdFx0Ly8gMS4gaXRlbVxuXHRcdFx0cGF0dGVybjogLyheXFxzKikoPzpbKistXXxcXGQrXFwuKSg/PVtcXHQgXS4pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCd1cmwtcmVmZXJlbmNlJzoge1xuXHRcdFx0Ly8gW2lkXTogaHR0cDovL2V4YW1wbGUuY29tIFwiT3B0aW9uYWwgdGl0bGVcIlxuXHRcdFx0Ly8gW2lkXTogaHR0cDovL2V4YW1wbGUuY29tICdPcHRpb25hbCB0aXRsZSdcblx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAoT3B0aW9uYWwgdGl0bGUpXG5cdFx0XHQvLyBbaWRdOiA8aHR0cDovL2V4YW1wbGUuY29tPiBcIk9wdGlvbmFsIHRpdGxlXCJcblx0XHRcdHBhdHRlcm46IC8hP1xcW1teXFxdXStcXF06W1xcdCBdKyg/OlxcUyt8PCg/OlxcXFwufFtePlxcXFxdKSs+KSg/OltcXHQgXSsoPzpcIig/OlxcXFwufFteXCJcXFxcXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxdKSonfFxcKCg/OlxcXFwufFteKVxcXFxdKSpcXCkpKT8vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXighP1xcWylbXlxcXV0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvKD86XCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwifCcoPzpcXFxcLnxbXidcXFxcXSkqJ3xcXCgoPzpcXFxcLnxbXilcXFxcXSkqXFwpKSQvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXltcXFtcXF0hOl18Wzw+XS9cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ3VybCdcblx0XHR9LFxuXHRcdCdib2xkJzoge1xuXHRcdFx0Ly8gKipzdHJvbmcqKlxuXHRcdFx0Ly8gX19zdHJvbmdfX1xuXG5cdFx0XHQvLyBhbGxvdyBvbmUgbmVzdGVkIGluc3RhbmNlIG9mIGl0YWxpYyB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC9cXGJfXyg/Oig/IV8pPGlubmVyPnxfKD86KD8hXyk8aW5uZXI+KStfKStfX1xcYnxcXCpcXCooPzooPyFcXCopPGlubmVyPnxcXCooPzooPyFcXCopPGlubmVyPikrXFwqKStcXCpcXCovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXi4uKVtcXHNcXFNdKyg/PS4uJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKlxcKnxfXy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdpdGFsaWMnOiB7XG5cdFx0XHQvLyAqZW0qXG5cdFx0XHQvLyBfZW1fXG5cblx0XHRcdC8vIGFsbG93IG9uZSBuZXN0ZWQgaW5zdGFuY2Ugb2YgYm9sZCB0ZXh0IHVzaW5nIHRoZSBzYW1lIGRlbGltaXRlclxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC9cXGJfKD86KD8hXyk8aW5uZXI+fF9fKD86KD8hXyk8aW5uZXI+KStfXykrX1xcYnxcXCooPzooPyFcXCopPGlubmVyPnxcXCpcXCooPzooPyFcXCopPGlubmVyPikrXFwqXFwqKStcXCovLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXi4pW1xcc1xcU10rKD89LiQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKl9dL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmlrZSc6IHtcblx0XHRcdC8vIH5+c3RyaWtlIHRocm91Z2h+flxuXHRcdFx0Ly8gfnN0cmlrZX5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRwYXR0ZXJuOiBjcmVhdGVJbmxpbmUoLyh+fj8pKD86KD8hfik8aW5uZXI+KStcXDIvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXn5+PylbXFxzXFxTXSsoPz1cXDEkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvfn4/L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvZGUtc25pcHBldCc6IHtcblx0XHRcdC8vIGBjb2RlYFxuXHRcdFx0Ly8gYGBjb2RlYGBcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxgXSkoPzpgYFteYFxcclxcbl0rKD86YFteYFxcclxcbl0rKSpgYCg/IWApfGBbXmBcXHJcXG5dK2AoPyFgKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2NvZGUnLCAna2V5d29yZCddXG5cdFx0fSxcblx0XHQndXJsJzoge1xuXHRcdFx0Ly8gW2V4YW1wbGVdKGh0dHA6Ly9leGFtcGxlLmNvbSBcIk9wdGlvbmFsIHRpdGxlXCIpXG5cdFx0XHQvLyBbZXhhbXBsZV1baWRdXG5cdFx0XHQvLyBbZXhhbXBsZV0gW2lkXVxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC8hP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0oPzpcXChbXlxccyldKyg/OltcXHQgXStcIig/OlxcXFwufFteXCJcXFxcXSkqXCIpP1xcKXxbIFxcdF0/XFxbKD86KD8hXFxdKTxpbm5lcj4pK1xcXSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvcGVyYXRvcic6IC9eIS8sXG5cdFx0XHRcdCdjb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcWylbXlxcXV0rKD89XFxdKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxdWyBcXHRdP1xcWylbXlxcXV0rKD89XFxdJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXF1cXCgpW15cXHMpXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0rKVwiKD86XFxcXC58W15cIlxcXFxdKSpcIig/PVxcKSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFsndXJsJywgJ2JvbGQnLCAnaXRhbGljJywgJ3N0cmlrZSddLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0Wyd1cmwnLCAnYm9sZCcsICdpdGFsaWMnLCAnc3RyaWtlJywgJ2NvZGUtc25pcHBldCddLmZvckVhY2goZnVuY3Rpb24gKGluc2lkZSkge1xuXHRcdFx0aWYgKHRva2VuICE9PSBpbnNpZGUpIHtcblx0XHRcdFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duW3Rva2VuXS5pbnNpZGUuY29udGVudC5pbnNpZGVbaW5zaWRlXSA9IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93bltpbnNpZGVdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdtYXJrZG93bicgJiYgZW52Lmxhbmd1YWdlICE9PSAnbWQnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0ZnVuY3Rpb24gd2Fsa1Rva2Vucyh0b2tlbnMpIHtcblx0XHRcdGlmICghdG9rZW5zIHx8IHR5cGVvZiB0b2tlbnMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSB0b2tlbnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblxuXHRcdFx0XHRpZiAodG9rZW4udHlwZSAhPT0gJ2NvZGUnKSB7XG5cdFx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8qXG5cdFx0XHRcdCAqIEFkZCB0aGUgY29ycmVjdCBgbGFuZ3VhZ2UteHh4eGAgY2xhc3MgdG8gdGhpcyBjb2RlIGJsb2NrLiBLZWVwIGluIG1pbmQgdGhhdCB0aGUgYGNvZGUtbGFuZ3VhZ2VgIHRva2VuXG5cdFx0XHRcdCAqIGlzIG9wdGlvbmFsLiBCdXQgdGhlIGdyYW1tYXIgaXMgZGVmaW5lZCBzbyB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGNhc2Ugd2UgaGF2ZSB0byBoYW5kbGU6XG5cdFx0XHRcdCAqXG5cdFx0XHRcdCAqIHRva2VuLmNvbnRlbnQgPSBbXG5cdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cInB1bmN0dWF0aW9uXCI+YGBgPC9zcGFuPixcblx0XHRcdFx0ICogICAgIDxzcGFuIGNsYXNzPVwiY29kZS1sYW5ndWFnZVwiPnh4eHg8L3NwYW4+LFxuXHRcdFx0XHQgKiAgICAgJ1xcbicsIC8vIGV4YWN0bHkgb25lIG5ldyBsaW5lcyAoXFxyIG9yIFxcbiBvciBcXHJcXG4pXG5cdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtYmxvY2tcIj4uLi48L3NwYW4+LFxuXHRcdFx0XHQgKiAgICAgJ1xcbicsIC8vIGV4YWN0bHkgb25lIG5ldyBsaW5lcyBhZ2FpblxuXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJwdW5jdHVhdGlvblwiPmBgYDwvc3Bhbj5cblx0XHRcdFx0ICogXTtcblx0XHRcdFx0ICovXG5cblx0XHRcdFx0dmFyIGNvZGVMYW5nID0gdG9rZW4uY29udGVudFsxXTtcblx0XHRcdFx0dmFyIGNvZGVCbG9jayA9IHRva2VuLmNvbnRlbnRbM107XG5cblx0XHRcdFx0aWYgKGNvZGVMYW5nICYmIGNvZGVCbG9jayAmJlxuXHRcdFx0XHRcdGNvZGVMYW5nLnR5cGUgPT09ICdjb2RlLWxhbmd1YWdlJyAmJiBjb2RlQmxvY2sudHlwZSA9PT0gJ2NvZGUtYmxvY2snICYmXG5cdFx0XHRcdFx0dHlwZW9mIGNvZGVMYW5nLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cblx0XHRcdFx0XHQvLyB0aGlzIG1pZ2h0IGJlIGEgbGFuZ3VhZ2UgdGhhdCBQcmlzbSBkb2VzIG5vdCBzdXBwb3J0XG5cblx0XHRcdFx0XHQvLyBkbyBzb21lIHJlcGxhY2VtZW50cyB0byBzdXBwb3J0IEMrKywgQyMsIGFuZCBGI1xuXHRcdFx0XHRcdHZhciBsYW5nID0gY29kZUxhbmcuY29udGVudC5yZXBsYWNlKC9cXGIjL2csICdzaGFycCcpLnJlcGxhY2UoL1xcYlxcK1xcKy9nLCAncHAnKTtcblx0XHRcdFx0XHQvLyBvbmx5IHVzZSB0aGUgZmlyc3Qgd29yZFxuXHRcdFx0XHRcdGxhbmcgPSAoL1thLXpdW1xcdy1dKi9pLmV4ZWMobGFuZykgfHwgWycnXSlbMF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHR2YXIgYWxpYXMgPSAnbGFuZ3VhZ2UtJyArIGxhbmc7XG5cblx0XHRcdFx0XHQvLyBhZGQgYWxpYXNcblx0XHRcdFx0XHRpZiAoIWNvZGVCbG9jay5hbGlhcykge1xuXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2FsaWFzXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjb2RlQmxvY2suYWxpYXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRjb2RlQmxvY2suYWxpYXMgPSBbY29kZUJsb2NrLmFsaWFzLCBhbGlhc107XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNvZGVCbG9jay5hbGlhcy5wdXNoKGFsaWFzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ3dyYXAnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi50eXBlICE9PSAnY29kZS1ibG9jaycpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgY29kZUxhbmcgPSAnJztcblx0XHRmb3IgKHZhciBpID0gMCwgbCA9IGVudi5jbGFzc2VzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0dmFyIGNscyA9IGVudi5jbGFzc2VzW2ldO1xuXHRcdFx0dmFyIG1hdGNoID0gL2xhbmd1YWdlLSguKykvLmV4ZWMoY2xzKTtcblx0XHRcdGlmIChtYXRjaCkge1xuXHRcdFx0XHRjb2RlTGFuZyA9IG1hdGNoWzFdO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tjb2RlTGFuZ107XG5cblx0XHRpZiAoIWdyYW1tYXIpIHtcblx0XHRcdGlmIChjb2RlTGFuZyAmJiBjb2RlTGFuZyAhPT0gJ25vbmUnICYmIFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlcikge1xuXHRcdFx0XHR2YXIgaWQgPSAnbWQtJyArIG5ldyBEYXRlKCkudmFsdWVPZigpICsgJy0nICsgTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWUxNik7XG5cdFx0XHRcdGVudi5hdHRyaWJ1dGVzWydpZCddID0gaWQ7XG5cblx0XHRcdFx0UHJpc20ucGx1Z2lucy5hdXRvbG9hZGVyLmxvYWRMYW5ndWFnZXMoY29kZUxhbmcsIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHR2YXIgZWxlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuXHRcdFx0XHRcdGlmIChlbGUpIHtcblx0XHRcdFx0XHRcdGVsZS5pbm5lckhUTUwgPSBQcmlzbS5oaWdobGlnaHQoZWxlLnRleHRDb250ZW50LCBQcmlzbS5sYW5ndWFnZXNbY29kZUxhbmddLCBjb2RlTGFuZyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0ZW52LmNvbnRlbnQgPSBQcmlzbS5oaWdobGlnaHQodGV4dENvbnRlbnQoZW52LmNvbnRlbnQpLCBncmFtbWFyLCBjb2RlTGFuZyk7XG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgdGFnUGF0dGVybiA9IFJlZ0V4cChQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5wYXR0ZXJuLnNvdXJjZSwgJ2dpJyk7XG5cblx0LyoqXG5cdCAqIEEgbGlzdCBvZiBrbm93biBlbnRpdHkgbmFtZXMuXG5cdCAqXG5cdCAqIFRoaXMgd2lsbCBhbHdheXMgYmUgaW5jb21wbGV0ZSB0byBzYXZlIHNwYWNlLiBUaGUgY3VycmVudCBsaXN0IGlzIHRoZSBvbmUgdXNlZCBieSBsb3dkYXNoJ3MgdW5lc2NhcGUgZnVuY3Rpb24uXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvMmRhMDI0YzNiNGY5OTQ3YTQ4NTE3NjM5ZGU3NTYwNDU3Y2Q0ZWM2Yy91bmVzY2FwZS5qcyNMMn1cblx0ICovXG5cdHZhciBLTk9XTl9FTlRJVFlfTkFNRVMgPSB7XG5cdFx0J2FtcCc6ICcmJyxcblx0XHQnbHQnOiAnPCcsXG5cdFx0J2d0JzogJz4nLFxuXHRcdCdxdW90JzogJ1wiJyxcblx0fTtcblxuXHQvLyBJRSAxMSBkb2Vzbid0IHN1cHBvcnQgYFN0cmluZy5mcm9tQ29kZVBvaW50YFxuXHR2YXIgZnJvbUNvZGVQb2ludCA9IFN0cmluZy5mcm9tQ29kZVBvaW50IHx8IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHRleHQgY29udGVudCBvZiBhIGdpdmVuIEhUTUwgc291cmNlIGNvZGUgc3RyaW5nLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaHRtbFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gdGV4dENvbnRlbnQoaHRtbCkge1xuXHRcdC8vIHJlbW92ZSBhbGwgdGFnc1xuXHRcdHZhciB0ZXh0ID0gaHRtbC5yZXBsYWNlKHRhZ1BhdHRlcm4sICcnKTtcblxuXHRcdC8vIGRlY29kZSBrbm93biBlbnRpdGllc1xuXHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoLyYoXFx3ezEsOH18I3g/W1xcZGEtZl17MSw4fSk7L2dpLCBmdW5jdGlvbiAobSwgY29kZSkge1xuXHRcdFx0Y29kZSA9IGNvZGUudG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKGNvZGVbMF0gPT09ICcjJykge1xuXHRcdFx0XHR2YXIgdmFsdWU7XG5cdFx0XHRcdGlmIChjb2RlWzFdID09PSAneCcpIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHBhcnNlSW50KGNvZGUuc2xpY2UoMiksIDE2KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IE51bWJlcihjb2RlLnNsaWNlKDEpKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBmcm9tQ29kZVBvaW50KHZhbHVlKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhciBrbm93biA9IEtOT1dOX0VOVElUWV9OQU1FU1tjb2RlXTtcblx0XHRcdFx0aWYgKGtub3duKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGtub3duO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gdW5hYmxlIHRvIGRlY29kZVxuXHRcdFx0XHRyZXR1cm4gbTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdHJldHVybiB0ZXh0O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1kID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3LnN0YXRhLmNvbS9tYW51YWxzL20ucGRmXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgb3JnVHlwZSA9IC9cXGIoPzooPzpjb2x8cm93KT92ZWN0b3J8bWF0cml4fHNjYWxhcilcXGIvLnNvdXJjZTtcblx0dmFyIHR5cGUgPSAvXFxidm9pZFxcYnw8b3JnPnxcXGIoPzpjb21wbGV4fG51bWVyaWN8cG9pbnRlcig/OlxccypcXChbXigpXSpcXCkpP3xyZWFsfHN0cmluZ3woPzpjbGFzc3xzdHJ1Y3QpXFxzK1xcdyt8dHJhbnNtb3JwaGljKSg/Olxccyo8b3JnPik/Ly5zb3VyY2Vcblx0XHQucmVwbGFjZSgvPG9yZz4vZywgb3JnVHlwZSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1hdGEgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8W1x1MjAxOGAnXVwiLio/XCJbXHUyMDE5YCddLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kc3xzdHJ1Y3QpXFxzKylcXHcrKD89XFxzKig/Olxce3xcXGJleHRlbmRzXFxiKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3R5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAodHlwZSksXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldLyxcblx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y2xhc3N8ZnVuY3Rpb258c3RydWN0fHZvaWQpXFxiL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2xhc3N8Y29udGludWV8ZG98ZWxzZXxlbmR8ZXh0ZW5kc3xleHRlcm5hbHxmaW5hbHxmb3J8ZnVuY3Rpb258Z290b3xpZnxwcmFnbWF8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzdGF0aWN8c3RydWN0fHVuc2V0fHVudXNlZHx2ZXJzaW9ufHZpcnR1YWx8d2hpbGUpXFxiLyxcblx0XHQnY29uc3RhbnQnOiAvXFxiTlVMTFxcYi8sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pKD86XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP3xcXGRbYS1mMC05XSooPzpcXC5bYS1mMC05XSspP3hbKy1dP1xcZCspaT8oPyFbXFx3Ll0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWlzc2luZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKSg/OlxcLlthLXpdPykoPyFbXFx3Ll0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdFx0J29wZXJhdG9yJzogL1xcLlxcLnxcXCtcXCt8LS18JiZ8XFx8XFx8fDo/KD86WyE9PD5dPXxbK1xcLSovXjw+Jnw6XSl8WyE/PVxcXFwjXHUyMDE5YCddLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDsuXS9cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubWF0bGFiID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHQvJVxce1tcXHNcXFNdKj9cXH0lLyxcblx0XHQvJS4rL1xuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cXEInKD86Jyd8W14nXFxyXFxuXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIEZJWE1FIFdlIGNvdWxkIGhhbmRsZSBpbWFnaW5hcnkgbnVtYmVycyBhcyBhIHdob2xlXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyg/Oltpal0pP3xcXGJbaWpdXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86TmFOfGJyZWFrfGNhc2V8Y2F0Y2h8Y29udGludWV8ZWxzZXxlbHNlaWZ8ZW5kfGZvcnxmdW5jdGlvbnxpZnxpbmZ8b3RoZXJ3aXNlfHBhcmZvcnxwYXVzZXxwaXxyZXR1cm58c3dpdGNofHRyeXx3aGlsZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1cXHMqXFwoKS8sXG5cdCdvcGVyYXRvcic6IC9cXC4/WypeXFwvXFxcXCddfFsrXFwtOkBdfFs8Pj1+XT0/fCYmP3xcXHxcXHw/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1xcLnszfXxbLiw7XFxbXFxdKCl7fSFdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkcyA9IC9cXGIoPzphYm91dHxhbmR8YW5pbWF0ZXxhc3xhdHxhdHRyaWJ1dGVzfGJ5fGNhc2V8Y2F0Y2h8Y29sbGVjdHxjb250aW51ZXxjb29yZHN5c3xkb3xlbHNlfGV4aXR8Zm58Zm9yfGZyb218ZnVuY3Rpb258Z2xvYmFsfGlmfGlufGxvY2FsfG1hY3Jvc2NyaXB0fG1hcHBlZHxtYXh8bm90fG9mfG9mZnxvbnxvcnxwYXJhbWV0ZXJzfHBlcnNpc3RlbnR8cGx1Z2lufHJjbWVudXxyZXR1cm58cm9sbG91dHxzZXR8c3RydWN0fHRoZW58dGhyb3d8dG98dG9vbHx0cnl8dW5kb3x1dGlsaXR5fHdoZW58d2hlcmV8d2hpbGV8d2l0aClcXGIvaTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5tYXhzY3JpcHQgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKXwtLS4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlwiXFxcXEBdKSg/OlwiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCJ8QFwiW15cIl0qXCIpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwYXRoJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJCg/OltcXHcvXFxcXC4qP118J1teJ10qJykqLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cblx0XHQnZnVuY3Rpb24tY2FsbCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0JygoPzonICsgKFxuXHRcdFx0XHRcdC8vIHN0YXJ0IG9mIGxpbmVcblx0XHRcdFx0XHQvXi8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIG9wZXJhdG9ycyBhbmQgb3RoZXIgbGFuZ3VhZ2UgY29uc3RydWN0c1xuXHRcdFx0XHRcdC9bOz08PitcXC0qL14oe1xcW10vLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyBrZXl3b3JkcyBhcyBwYXJ0IG9mIHN0YXRlbWVudHNcblx0XHRcdFx0XHQvXFxiKD86YW5kfGJ5fGNhc2V8Y2F0Y2h8Y29sbGVjdHxkb3xlbHNlfGlmfGlufG5vdHxvcnxyZXR1cm58dGhlbnx0b3x0cnl8d2hlcmV8d2hpbGV8d2l0aClcXGIvLnNvdXJjZVxuXHRcdFx0XHQpICsgJylbIFxcdF0qKScgK1xuXG5cdFx0XHRcdCcoPyEnICsga2V5d29yZHMuc291cmNlICsgJyknICsgL1thLXpfXVxcdypcXGIvLnNvdXJjZSArXG5cblx0XHRcdFx0Jyg/PVsgXFx0XSooPzonICsgKFxuXHRcdFx0XHRcdC8vIHZhcmlhYmxlXG5cdFx0XHRcdFx0Jyg/IScgKyBrZXl3b3Jkcy5zb3VyY2UgKyAnKScgKyAvW2Etel9dLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCd8JyArXG5cdFx0XHRcdFx0Ly8gbnVtYmVyXG5cdFx0XHRcdFx0L1xcZHwtXFwuP1xcZC8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIG90aGVyIGV4cHJlc3Npb25zIG9yIGxpdGVyYWxzXG5cdFx0XHRcdFx0L1soeydcIiRAIz9dLy5zb3VyY2Vcblx0XHRcdFx0KSArICcpKScsXG5cdFx0XHRcdCdpbSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmZufGZ1bmN0aW9uKVxccyspXFx3K1xcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdhcmd1bWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89OikvaSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdH0sXG5cblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHRcdCd0aW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pKD86KD86KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRWREXVsrLV1cXGQrfFtMUF0pP1ttc2Z0XSkrfFxcZCs6XFxkKyg/OlxcLlxcZCopPykoPyFbXFx3LjpdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXSkoPzooPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86W2VFZERdWystXVxcZCt8W0xQXSk/fDB4W2EtZkEtRjAtOV0rKSg/IVtcXHcuOl0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzplfHBpKVxcYi9cblx0XHRdLFxuXG5cdFx0J2NvbnN0YW50JzogL1xcYig/OmRvbnRjb2xsZWN0fG9rfHNpbGVudFZhbHVlfHVuZGVmaW5lZHx1bnN1cHBsaWVkKVxcYi8sXG5cdFx0J2NvbG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmJsYWNrfGJsdWV8YnJvd258Z3JheXxncmVlbnxvcmFuZ2V8cmVkfHdoaXRlfHllbGxvdylcXGIvaSxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fSxcblxuXHRcdCdvcGVyYXRvcic6IC9bLSsqLzw+PSFdPT98WyZeP118Iyg/IVxcKCkvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fS46LDtdfCMoPz1cXCgpfFxcXFwkL21cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubWVsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb2RlJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXC58W15cXFxcYF0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2l0YWxpYycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXmB8YCQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdzdGF0ZW1lbnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mQS1GXStcXGJ8XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrLyxcblx0J2ZsYWcnOiB7XG5cdFx0cGF0dGVybjogLy1bXlxcZFxcV11cXHcqLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxmbG9hdHxmb3J8Z2xvYmFsfGlmfGlufGludHxtYXRyaXh8cHJvY3xyZXR1cm58c3RyaW5nfHN3aXRjaHx2ZWN0b3J8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbeztdKVsgXFx0XSopW2Etel9dXFx3KlxcYig/IVxccyooPzpcXC4oPyFcXC4pfFtbez1dKSl8XFxiW2Etel9dXFx3Kig/PVsgXFx0XSpcXCgpL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J3RlbnNvci1wdW5jdHVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPDx8Pj4vLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdvcGVyYXRvcic6IC9cXCtbKz1dP3wtWy09XT98JiZ8XFx8XFx8fFs8Pl09P3xbKlxcLyE9XT0/fFslXl0vLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOjs/XFxbXFxdKCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubWVsWydjb2RlJ10uaW5zaWRlWydzdGF0ZW1lbnQnXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubWVsO1xuXG5QcmlzbS5sYW5ndWFnZXMubWVybWFpZCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyUlLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdzdHlsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKD86Y2xhc3NEZWZ8bGlua1N0eWxlfHN0eWxlKVsgXFx0XStbXFx3JC1dK1sgXFx0XSspXFx3LipbXlxccztdL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwcm9wZXJ0eSc6IC9cXGJcXHdbXFx3LV0qKD89WyBcXHRdKjopLyxcblx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC8sL1xuXHRcdH1cblx0fSxcblxuXHQnaW50ZXItYXJyb3ctbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogLyhbXjw+b3guPS1dKSg/Oi1bLS5dfD09KSg/IVs8Pm94Lj0tXSlbIFxcdF0qKD86XCJbXlwiXFxyXFxuXSpcInxbXlxcc1wiLj0tXSg/OlteXFxyXFxuLj0tXSpbXlxccy49LV0pPylbIFxcdF0qKD86XFwuKy0+P3wtLStbLT5dfD09K1s9Pl0pKD8hWzw+b3guPS1dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYXJyb3cnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXC4rLT4/fC0tK1stPl18PT0rWz0+XSkkLyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cdFx0XHQnbGFiZWwnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHNcXFNdezJ9WyBcXHRdKilcXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHR9LFxuXHRcdFx0J2Fycm93LWhlYWQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFxTKy8sXG5cdFx0XHRcdGFsaWFzOiBbJ2Fycm93JywgJ29wZXJhdG9yJ11cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0J2Fycm93JzogW1xuXHRcdC8vIFRoaXMgbWlnaHQgbG9vayBjb21wbGV4IGJ1dCBpdCByZWFsbHkgaXNuJ3QuXG5cdFx0Ly8gVGhlcmUgYXJlIG1hbnkgcG9zc2libGUgYXJyb3dzIChzZWUgdGVzdHMpIGFuZCBpdCdzIGltcG9zc2libGUgdG8gZml0IGFsbCBvZiB0aGVtIGludG8gb25lIHBhdHRlcm4uIFRoZVxuXHRcdC8vIHByb2JsZW0gaXMgdGhhdCB3ZSBvbmx5IGhhdmUgb25lIGxvb2tiZWhpbmQgcGVyIHBhdHRlcm4uIEhvd2V2ZXIsIHdlIGNhbm5vdCBkaXNhbGxvdyB0b28gbWFueSBhcnJvd1xuXHRcdC8vIGNoYXJhY3RlcnMgaW4gdGhlIG9uZSBsb29rYmVoaW5kIGJlY2F1c2UgdGhhdCB3b3VsZCBjcmVhdGUgdG9vIG1hbnkgZmFsc2UgbmVnYXRpdmVzLiBTbyB3ZSBoYXZlIHRvIHNwbGl0IHRoZVxuXHRcdC8vIGFycm93cyBpbnRvIGRpZmZlcmVudCBwYXR0ZXJucy5cblx0XHR7XG5cdFx0XHQvLyBFUiBkaWFncmFtXG5cdFx0XHRwYXR0ZXJuOiAvKF58W157fXxvLi1dKVt8fV1bfG9dKD86LS18XFwuXFwuKVt8b11bfHtdKD8hW3t9fG8uLV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZmxvdyBjaGFydFxuXHRcdFx0Ly8gKD86PT0rfC0tK3wtXFwuKi0pXG5cdFx0XHRwYXR0ZXJuOiAvKF58W148Pm94Lj0tXSkoPzpbPG94XSg/Oj09K3wtLSt8LVxcLiotKVs+b3hdP3woPzo9PSt8LS0rfC1cXC4qLSlbPm94XXw9PT0rfC0tLSt8LVxcListKSg/IVs8Pm94Lj0tXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBzZXF1ZW5jZSBkaWFncmFtXG5cdFx0XHRwYXR0ZXJuOiAvKF58W148PigpeC1dKSg/Oi0tPyg/Oj4+fFt4PildKSg/IVs8PigpeF0pfCg/Ojw8fFt4PChdKS0tPyg/IS0pKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGNsYXNzIGRpYWdyYW1cblx0XHRcdHBhdHRlcm46IC8oXnxbXjw+fCpvLi1dKSg/Olsqb10tLXwtLVsqb118PFxcfD8oPzotLXxcXC5cXC4pfCg/Oi0tfFxcLlxcLilcXHw/PnwtLXxcXC5cXC4pKD8hWzw+fCpvLi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRdLFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W158PF0pXFx8KD86W15cXHJcXG5cInxdfFwiW15cIlxcclxcbl0qXCIpK1xcfC8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQndGV4dCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86WyhcXFt7XSt8XFxiPikoPzpbXlxcclxcblwiKClcXFtcXF17fV18XCJbXlwiXFxyXFxuXSpcIikrKD86WylcXF19XSt8PikvLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvPDwoPzphYnN0cmFjdHxjaG9pY2V8ZW51bWVyYXRpb258Zm9ya3xpbnRlcmZhY2V8am9pbnxzZXJ2aWNlKT4+fFxcW1xcWyg/OmNob2ljZXxmb3JrfGpvaW4pXFxdXFxdL2ksXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cblx0J2tleXdvcmQnOiBbXG5cdFx0Ly8gVGhpcyBsYW5ndWFnZSBoYXMgYm90aCBjYXNlLXNlbnNpdGl2ZSBhbmQgY2FzZS1pbnNlbnNpdGl2ZSBrZXl3b3Jkc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86YWN0aW9ufGNhbGxiYWNrfGNsYXNzfGNsYXNzRGVmfGNsYXNzRGlhZ3JhbXxjbGlja3xkaXJlY3Rpb258ZXJEaWFncmFtfGZsb3djaGFydHxnYW50dHxnaXRHcmFwaHxncmFwaHxqb3VybmV5fGxpbmt8bGlua1N0eWxlfHBpZXxyZXF1aXJlbWVudERpYWdyYW18c2VxdWVuY2VEaWFncmFtfHN0YXRlRGlhZ3JhbXxzdGF0ZURpYWdyYW0tdjJ8c3R5bGV8c3ViZ3JhcGgpKD8hW1xcdyQtXSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86YWN0aXZhdGV8YWx0fGFuZHxhc3xhdXRvbnVtYmVyfGRlYWN0aXZhdGV8ZWxzZXxlbmQoPzpbIFxcdF0rbm90ZSk/fGxvb3B8b3B0fHBhcnxwYXJ0aWNpcGFudHxyZWN0fHN0YXRlfG5vdGVbIFxcdF0rKD86b3ZlcnwoPzpsZWZ0fHJpZ2h0KVsgXFx0XStvZikpKD8hW1xcdyQtXSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXG5cdCdlbnRpdHknOiAvI1thLXowLTldKzsvLFxuXG5cdCdvcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcd1sgXFx0XSopJig/PVsgXFx0XSpcXHcpfDo6Onw6Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fTtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1pemFyID0ge1xuXHQnY29tbWVudCc6IC86Oi4rLyxcblx0J2tleXdvcmQnOiAvQHByb29mXFxifFxcYig/OmFjY29yZGluZ3xhZ2dyZWdhdGV8YWxsfGFuZHxhbnRvbnltfGFyZXxhc3xhc3NvY2lhdGl2aXR5fGFzc3VtZXxhc3ltbWV0cnl8YXR0cnxiZXxiZWdpbnxiZWluZ3xieXxjYW5jZWxlZHxjYXNlfGNhc2VzfGNsdXN0ZXJzP3xjb2hlcmVuY2V8Y29tbXV0YXRpdml0eXxjb21wYXRpYmlsaXR5fGNvbm5lY3RlZG5lc3N8Y29uc2lkZXJ8Y29uc2lzdGVuY3l8Y29uc3RydWN0b3JzfGNvbnRyYWRpY3Rpb258Y29ycmVjdG5lc3N8ZGVmfGRlZmZ1bmN8ZGVmaW5lfGRlZmluaXRpb25zP3xkZWZwcmVkfGRvfGRvZXN8ZW5kfGVudmlyb258ZXF1YWxzfGV4fGV4YWN0bHl8ZXhpc3RlbmNlfGZvcnxmcm9tfGZ1bmN8Z2l2ZW58aGVuY2V8aGVyZWJ5fGhvbGRzfGlkZW1wb3RlbmNlfGlkZW50aXR5fGlmZj98aW1wbGllc3xpbnZvbHV0aXZlbmVzc3xpcnJlZmxleGl2aXR5fGlzfGl0fGxldHxtZWFuc3xtb2RlfG5vbnxub3R8bm90YXRpb25zP3xub3d8b2Z8b3J8b3RoZXJ3aXNlfG92ZXJ8cGVyfHByZWR8cHJlZml4fHByb2plY3Rpdml0eXxwcm9vZnxwcm92aWRlZHxxdWF8cmVjb25zaWRlcnxyZWRlZmluZXxyZWR1Y2V8cmVkdWNpYmlsaXR5fHJlZmxleGl2aXR5fHJlZ2lzdHJhdGlvbnM/fHJlcXVpcmVtZW50c3xyZXNlcnZlfHNjaHxzY2hlbWVzP3xzZWN0aW9ufHNlbGVjdG9yfHNldHxzZXRob29kfHN0fHN0cnVjdHxzdWNofHN1cHBvc2V8c3ltbWV0cnl8c3lub255bXx0YWtlfHRoYXR8dGhlfHRoZW58dGhlb3JlbXM/fHRoZXNpc3x0aHVzfHRvfHRyYW5zaXRpdml0eXx1bmlxdWVuZXNzfHZvY2FidWxhcig/Omllc3x5KXx3aGVufHdoZXJlfHdpdGh8d3J0KVxcYi8sXG5cdCdwYXJhbWV0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OjEwfFxcZCkvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXGJcXHcrKD89OikvLFxuXHQnbnVtYmVyJzogLyg/OlxcYnwtKVxcZCtcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuXFwuXFwufC0+fCZ8XFwuPz0vLFxuXHQncHVuY3R1YXRpb24nOiAvXFwoI3wjXFwpfFssOjtcXFtcXF0oKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgb3BlcmF0b3JzID0gW1xuXHRcdC8vIHF1ZXJ5IGFuZCBwcm9qZWN0aW9uXG5cdFx0JyRlcScsICckZ3QnLCAnJGd0ZScsICckaW4nLCAnJGx0JywgJyRsdGUnLCAnJG5lJywgJyRuaW4nLCAnJGFuZCcsICckbm90JywgJyRub3InLCAnJG9yJyxcblx0XHQnJGV4aXN0cycsICckdHlwZScsICckZXhwcicsICckanNvblNjaGVtYScsICckbW9kJywgJyRyZWdleCcsICckdGV4dCcsICckd2hlcmUnLCAnJGdlb0ludGVyc2VjdHMnLFxuXHRcdCckZ2VvV2l0aGluJywgJyRuZWFyJywgJyRuZWFyU3BoZXJlJywgJyRhbGwnLCAnJGVsZW1NYXRjaCcsICckc2l6ZScsICckYml0c0FsbENsZWFyJywgJyRiaXRzQWxsU2V0Jyxcblx0XHQnJGJpdHNBbnlDbGVhcicsICckYml0c0FueVNldCcsICckY29tbWVudCcsICckZWxlbU1hdGNoJywgJyRtZXRhJywgJyRzbGljZScsXG5cblx0XHQvLyB1cGRhdGVcblx0XHQnJGN1cnJlbnREYXRlJywgJyRpbmMnLCAnJG1pbicsICckbWF4JywgJyRtdWwnLCAnJHJlbmFtZScsICckc2V0JywgJyRzZXRPbkluc2VydCcsICckdW5zZXQnLFxuXHRcdCckYWRkVG9TZXQnLCAnJHBvcCcsICckcHVsbCcsICckcHVzaCcsICckcHVsbEFsbCcsICckZWFjaCcsICckcG9zaXRpb24nLCAnJHNsaWNlJywgJyRzb3J0JywgJyRiaXQnLFxuXG5cdFx0Ly8gYWdncmVnYXRpb24gcGlwZWxpbmUgc3RhZ2VzXG5cdFx0JyRhZGRGaWVsZHMnLCAnJGJ1Y2tldCcsICckYnVja2V0QXV0bycsICckY29sbFN0YXRzJywgJyRjb3VudCcsICckY3VycmVudE9wJywgJyRmYWNldCcsICckZ2VvTmVhcicsXG5cdFx0JyRncmFwaExvb2t1cCcsICckZ3JvdXAnLCAnJGluZGV4U3RhdHMnLCAnJGxpbWl0JywgJyRsaXN0TG9jYWxTZXNzaW9ucycsICckbGlzdFNlc3Npb25zJywgJyRsb29rdXAnLFxuXHRcdCckbWF0Y2gnLCAnJG1lcmdlJywgJyRvdXQnLCAnJHBsYW5DYWNoZVN0YXRzJywgJyRwcm9qZWN0JywgJyRyZWRhY3QnLCAnJHJlcGxhY2VSb290JywgJyRyZXBsYWNlV2l0aCcsXG5cdFx0JyRzYW1wbGUnLCAnJHNldCcsICckc2tpcCcsICckc29ydCcsICckc29ydEJ5Q291bnQnLCAnJHVuaW9uV2l0aCcsICckdW5zZXQnLCAnJHVud2luZCcsICckc2V0V2luZG93RmllbGRzJyxcblxuXHRcdC8vIGFnZ3JlZ2F0aW9uIHBpcGVsaW5lIG9wZXJhdG9yc1xuXHRcdCckYWJzJywgJyRhY2N1bXVsYXRvcicsICckYWNvcycsICckYWNvc2gnLCAnJGFkZCcsICckYWRkVG9TZXQnLCAnJGFsbEVsZW1lbnRzVHJ1ZScsICckYW5kJyxcblx0XHQnJGFueUVsZW1lbnRUcnVlJywgJyRhcnJheUVsZW1BdCcsICckYXJyYXlUb09iamVjdCcsICckYXNpbicsICckYXNpbmgnLCAnJGF0YW4nLCAnJGF0YW4yJyxcblx0XHQnJGF0YW5oJywgJyRhdmcnLCAnJGJpbmFyeVNpemUnLCAnJGJzb25TaXplJywgJyRjZWlsJywgJyRjbXAnLCAnJGNvbmNhdCcsICckY29uY2F0QXJyYXlzJywgJyRjb25kJyxcblx0XHQnJGNvbnZlcnQnLCAnJGNvcycsICckZGF0ZUZyb21QYXJ0cycsICckZGF0ZVRvUGFydHMnLCAnJGRhdGVGcm9tU3RyaW5nJywgJyRkYXRlVG9TdHJpbmcnLCAnJGRheU9mTW9udGgnLFxuXHRcdCckZGF5T2ZXZWVrJywgJyRkYXlPZlllYXInLCAnJGRlZ3JlZXNUb1JhZGlhbnMnLCAnJGRpdmlkZScsICckZXEnLCAnJGV4cCcsICckZmlsdGVyJywgJyRmaXJzdCcsXG5cdFx0JyRmbG9vcicsICckZnVuY3Rpb24nLCAnJGd0JywgJyRndGUnLCAnJGhvdXInLCAnJGlmTnVsbCcsICckaW4nLCAnJGluZGV4T2ZBcnJheScsICckaW5kZXhPZkJ5dGVzJyxcblx0XHQnJGluZGV4T2ZDUCcsICckaXNBcnJheScsICckaXNOdW1iZXInLCAnJGlzb0RheU9mV2VlaycsICckaXNvV2VlaycsICckaXNvV2Vla1llYXInLCAnJGxhc3QnLFxuXHRcdCckbGFzdCcsICckbGV0JywgJyRsaXRlcmFsJywgJyRsbicsICckbG9nJywgJyRsb2cxMCcsICckbHQnLCAnJGx0ZScsICckbHRyaW0nLCAnJG1hcCcsICckbWF4Jyxcblx0XHQnJG1lcmdlT2JqZWN0cycsICckbWV0YScsICckbWluJywgJyRtaWxsaXNlY29uZCcsICckbWludXRlJywgJyRtb2QnLCAnJG1vbnRoJywgJyRtdWx0aXBseScsICckbmUnLFxuXHRcdCckbm90JywgJyRvYmplY3RUb0FycmF5JywgJyRvcicsICckcG93JywgJyRwdXNoJywgJyRyYWRpYW5zVG9EZWdyZWVzJywgJyRyYW5nZScsICckcmVkdWNlJyxcblx0XHQnJHJlZ2V4RmluZCcsICckcmVnZXhGaW5kQWxsJywgJyRyZWdleE1hdGNoJywgJyRyZXBsYWNlT25lJywgJyRyZXBsYWNlQWxsJywgJyRyZXZlcnNlQXJyYXknLCAnJHJvdW5kJyxcblx0XHQnJHJ0cmltJywgJyRzZWNvbmQnLCAnJHNldERpZmZlcmVuY2UnLCAnJHNldEVxdWFscycsICckc2V0SW50ZXJzZWN0aW9uJywgJyRzZXRJc1N1YnNldCcsICckc2V0VW5pb24nLFxuXHRcdCckc2l6ZScsICckc2luJywgJyRzbGljZScsICckc3BsaXQnLCAnJHNxcnQnLCAnJHN0ZERldlBvcCcsICckc3RkRGV2U2FtcCcsICckc3RyY2FzZWNtcCcsICckc3RyTGVuQnl0ZXMnLFxuXHRcdCckc3RyTGVuQ1AnLCAnJHN1YnN0cicsICckc3Vic3RyQnl0ZXMnLCAnJHN1YnN0ckNQJywgJyRzdWJ0cmFjdCcsICckc3VtJywgJyRzd2l0Y2gnLCAnJHRhbicsXG5cdFx0JyR0b0Jvb2wnLCAnJHRvRGF0ZScsICckdG9EZWNpbWFsJywgJyR0b0RvdWJsZScsICckdG9JbnQnLCAnJHRvTG9uZycsICckdG9PYmplY3RJZCcsICckdG9TdHJpbmcnLFxuXHRcdCckdG9Mb3dlcicsICckdG9VcHBlcicsICckdHJpbScsICckdHJ1bmMnLCAnJHR5cGUnLCAnJHdlZWsnLCAnJHllYXInLCAnJHppcCcsICckY291bnQnLCAnJGRhdGVBZGQnLFxuXHRcdCckZGF0ZURpZmYnLCAnJGRhdGVTdWJ0cmFjdCcsICckZGF0ZVRydW5jJywgJyRnZXRGaWVsZCcsICckcmFuZCcsICckc2FtcGxlUmF0ZScsICckc2V0RmllbGQnLCAnJHVuc2V0RmllbGQnLFxuXG5cdFx0Ly8gYWdncmVnYXRpb24gcGlwZWxpbmUgcXVlcnkgbW9kaWZpZXJzXG5cdFx0JyRjb21tZW50JywgJyRleHBsYWluJywgJyRoaW50JywgJyRtYXgnLCAnJG1heFRpbWVNUycsICckbWluJywgJyRvcmRlcmJ5JywgJyRxdWVyeScsXG5cdFx0JyRyZXR1cm5LZXknLCAnJHNob3dEaXNrTG9jJywgJyRuYXR1cmFsJyxcblx0XTtcblxuXHR2YXIgYnVpbHRpbkZ1bmN0aW9ucyA9IFtcblx0XHQnT2JqZWN0SWQnLFxuXHRcdCdDb2RlJyxcblx0XHQnQmluRGF0YScsXG5cdFx0J0RCUmVmJyxcblx0XHQnVGltZXN0YW1wJyxcblx0XHQnTnVtYmVyTG9uZycsXG5cdFx0J051bWJlckRlY2ltYWwnLFxuXHRcdCdNYXhLZXknLFxuXHRcdCdNaW5LZXknLFxuXHRcdCdSZWdFeHAnLFxuXHRcdCdJU09EYXRlJyxcblx0XHQnVVVJRCcsXG5cdF07XG5cblx0b3BlcmF0b3JzID0gb3BlcmF0b3JzLm1hcChmdW5jdGlvbiAob3BlcmF0b3IpIHtcblx0XHRyZXR1cm4gb3BlcmF0b3IucmVwbGFjZSgnJCcsICdcXFxcJCcpO1xuXHR9KTtcblxuXHR2YXIgb3BlcmF0b3JzU291cmNlID0gJyg/OicgKyBvcGVyYXRvcnMuam9pbignfCcpICsgJylcXFxcYic7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1vbmdvZGIgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge30pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21vbmdvZGInLCAnc3RyaW5nJywge1xuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPzooW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMXwoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKSg/PVxccyo6KS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiBSZWdFeHAoJ14oW1xcJ1wiXSk/JyArIG9wZXJhdG9yc1NvdXJjZSArICcoPzpcXFxcMSk/JCcpXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMubW9uZ29kYi5zdHJpbmcuaW5zaWRlID0ge1xuXHRcdHVybDoge1xuXHRcdFx0Ly8gdXJsIHBhdHRlcm5cblx0XHRcdHBhdHRlcm46IC9odHRwcz86XFwvXFwvWy1cXHdAOiUuK34jPV17MSwyNTZ9XFwuW2EtejAtOSgpXXsxLDZ9XFxiWy1cXHcoKUA6JSsufiM/Ji89XSovaSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0ZW50aXR5OiB7XG5cdFx0XHQvLyBpcHY0XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86WzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcLil7M30oPzpbMDFdP1xcZFxcZD98MlswLTRdXFxkfDI1WzAtNV0pXFxiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtb25nb2RiJywgJ2NvbnN0YW50Jywge1xuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcYig/OicgKyBidWlsdGluRnVuY3Rpb25zLmpvaW4oJ3wnKSArICcpXFxcXGInKSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5tb25rZXkgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9eI1JlbVxcc1tcXHNcXFNdKj9eI0VuZHwnLisvaW0sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J3ByZXByb2Nlc3Nvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0J3R5cGUtY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiWz8lIyRdLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXC5cXC4pPykoPzooPzpcXGJ8XFxCLVxcLj98XFxCXFwuKVxcZCsoPzooPyFcXC5cXC4pXFwuXFxkKik/fFxcJFtcXGRhLWZdKykvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OkFic3RyYWN0fEFycmF5fEJvb2x8Q2FzZXxDYXRjaHxDbGFzc3xDb25zdHxDb250aW51ZXxEZWZhdWx0fEVhY2hpbnxFbHNlfEVsc2VJZnxFbmR8RW5kSWZ8RXhpdHxFeHRlbmRzfEV4dGVybnxGYWxzZXxGaWVsZHxGaW5hbHxGbG9hdHxGb3J8Rm9yZXZlcnxGdW5jdGlvbnxHbG9iYWx8SWZ8SW1wbGVtZW50c3xJbXBvcnR8SW5saW5lfEludHxJbnRlcmZhY2V8TG9jYWx8TWV0aG9kfE1vZHVsZXxOZXd8TmV4dHxOdWxsfE9iamVjdHxQcml2YXRlfFByb3BlcnR5fFB1YmxpY3xSZXBlYXR8UmV0dXJufFNlbGVjdHxTZWxmfFN0ZXB8U3RyaWN0fFN0cmluZ3xTdXBlcnxUaGVufFRocm93fFRvfFRydWV8VHJ5fFVudGlsfFZvaWR8V2VuZHxXaGlsZSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1xcLlxcLnw8Wz0+XT98Pj0/fDo/PXwoPzpbK1xcLSpcXC8mfnxdfFxcYig/Ok1vZHxTaGx8U2hyKVxcYik9P3xcXGIoPzpBbmR8Tm90fE9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOjsoKVxcW1xcXV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKi8sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLydbXiddKid8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDFcXF0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyNcXHtbXnt9XSpcXH0vLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vb25zY3JpcHQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXiNcXHspW1xcc1xcU10rKD89XFx9KS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVvd1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xce3xcXH0vLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xleHRlbmRzKVsgXFx0XSspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBjbGFzcy1saWtlIG5hbWVzIHN0YXJ0IHdpdGggYSBjYXBpdGFsIGxldHRlclxuXHRcdC9cXGJbQS1aXVxcdyovXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmNsYXNzfGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGV4cG9ydHxleHRlbmRzfGZvcnxmcm9tfGlmfGltcG9ydHxpbnxsb2NhbHxuaWx8cmV0dXJufHNlbGZ8c3VwZXJ8c3dpdGNofHRoZW58dW5sZXNzfHVzaW5nfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQndmFyaWFibGUnOiAvQEA/XFx3Ki8sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD8hXFxkKVxcdysoPz06KXwoOikoPyFcXGQpXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/Ol9HfF9WRVJTSU9OfGFzc2VydHxjb2xsZWN0Z2FyYmFnZXxjb3JvdXRpbmVcXC4oPzpjcmVhdGV8cmVzdW1lfHJ1bm5pbmd8c3RhdHVzfHdyYXB8eWllbGQpfGRlYnVnXFwuKD86ZGVidWd8Z2V0ZmVudnxnZXRob29rfGdldGluZm98Z2V0bG9jYWx8Z2V0bWV0YXRhYmxlfGdldHJlZ2lzdHJ5fGdldHVwdmFsdWV8c2V0ZmVudnxzZXRob29rfHNldGxvY2FsfHNldG1ldGF0YWJsZXxzZXR1cHZhbHVlfHRyYWNlYmFjayl8ZG9maWxlfGVycm9yfGdldGZlbnZ8Z2V0bWV0YXRhYmxlfGlvXFwuKD86Y2xvc2V8Zmx1c2h8aW5wdXR8bGluZXN8b3BlbnxvdXRwdXR8cG9wZW58cmVhZHxzdGRlcnJ8c3RkaW58c3Rkb3V0fHRtcGZpbGV8dHlwZXx3cml0ZSl8aXBhaXJzfGxvYWR8bG9hZGZpbGV8bG9hZHN0cmluZ3xtYXRoXFwuKD86YWJzfGFjb3N8YXNpbnxhdGFufGF0YW4yfGNlaWx8Y29zfGNvc2h8ZGVnfGV4cHxmbG9vcnxmbW9kfGZyZXhwfGxkZXhwfGxvZ3xsb2cxMHxtYXh8bWlufG1vZGZ8cGl8cG93fHJhZHxyYW5kb218cmFuZG9tc2VlZHxzaW58c2luaHxzcXJ0fHRhbnx0YW5oKXxtb2R1bGV8bmV4dHxvc1xcLig/OmNsb2NrfGRhdGV8ZGlmZnRpbWV8ZXhlY3V0ZXxleGl0fGdldGVudnxyZW1vdmV8cmVuYW1lfHNldGxvY2FsZXx0aW1lfHRtcG5hbWUpfHBhY2thZ2VcXC4oPzpjcGF0aHxsb2FkZWR8bG9hZGxpYnxwYXRofHByZWxvYWR8c2VlYWxsKXxwYWlyc3xwY2FsbHxwcmludHxyYXdlcXVhbHxyYXdnZXR8cmF3c2V0fHJlcXVpcmV8c2VsZWN0fHNldGZlbnZ8c2V0bWV0YXRhYmxlfHN0cmluZ1xcLig/OmJ5dGV8Y2hhcnxkdW1wfGZpbmR8Zm9ybWF0fGdtYXRjaHxnc3VifGxlbnxsb3dlcnxtYXRjaHxyZXB8cmV2ZXJzZXxzdWJ8dXBwZXIpfHRhYmxlXFwuKD86Y29uY2F0fGluc2VydHxtYXhufHJlbW92ZXxzb3J0KXx0b251bWJlcnx0b3N0cmluZ3x0eXBlfHVucGFja3x4cGNhbGwpXFxiLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvKD86XFxCXFwuXFxkK3xcXGJcXGQrXFwuXFxkK3xcXGJcXGQrKD89W2VFXSkpKD86W2VFXVstK10/XFxkKyk/XFxifFxcYig/OjB4W2EtZkEtRlxcZF0rfFxcZCspKD86VT9MTCk/XFxiLyxcblx0J29wZXJhdG9yJzogL1xcLnszfXxbLT1dPnx+PXwoPzpbLSsqLyU8PiE9XXxcXC5cXC4pPT98WzojXl18XFxiKD86YW5kfG9yKVxcYj0/fFxcYig/Om5vdClcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sKClbXFxde31cXFxcXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tb29uc2NyaXB0LnN0cmluZ1sxXS5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUubW9vbnNjcmlwdC5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLm1vb24gPSBQcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdDtcblxuLy8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9pbmRleC5odG1sXG5cblByaXNtLmxhbmd1YWdlcy5uMXFsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qPyg/OiR8XFwqXFwvKXwtLS4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF18XFwxXFwxKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF18YGApKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J3BhcmFtZXRlcic6IC9cXCRbXFx3Ll0rLyxcblx0Ly8gaHR0cHM6Ly9kb2NzLmNvdWNoYmFzZS5jb20vc2VydmVyL2N1cnJlbnQvbjFxbC9uMXFsLWxhbmd1YWdlLXJlZmVyZW5jZS9yZXNlcnZlZHdvcmRzLmh0bWwjbjFxbC1yZXNlcnZlZC13b3Jkc1xuXHQna2V5d29yZCc6IC9cXGIoPzpBRFZJU0V8QUxMfEFMVEVSfEFOQUxZWkV8QVN8QVNDfEFUfEJFR0lOfEJJTkFSWXxCT09MRUFOfEJSRUFLfEJVQ0tFVHxCVUlMRHxCWXxDQUxMfENBU1R8Q0xVU1RFUnxDT0xMQVRFfENPTExFQ1RJT058Q09NTUlUfENPTU1JVFRFRHxDT05ORUNUfENPTlRJTlVFfENPUlJFTEFURXxDT1JSRUxBVEVEfENPVkVSfENSRUFURXxDVVJSRU5UfERBVEFCQVNFfERBVEFTRVR8REFUQVNUT1JFfERFQ0xBUkV8REVDUkVNRU5UfERFTEVURXxERVJJVkVEfERFU0N8REVTQ1JJQkV8RElTVElOQ1R8RE98RFJPUHxFQUNIfEVMRU1FTlR8RVhDRVBUfEVYQ0xVREV8RVhFQ1VURXxFWFBMQUlOfEZFVENIfEZJTFRFUnxGTEFUVEVOfEZMVVNIfEZPTExPV0lOR3xGT1J8Rk9SQ0V8RlJPTXxGVFN8RlVOQ1RJT058R09MQU5HfEdSQU5UfEdST1VQfEdST1VQU3xHU0l8SEFTSHxIQVZJTkd8SUZ8SUdOT1JFfElMSUtFfElOQ0xVREV8SU5DUkVNRU5UfElOREVYfElORkVSfElOTElORXxJTk5FUnxJTlNFUlR8SU5URVJTRUNUfElOVE98SVN8SVNPTEFUSU9OfEpBVkFTQ1JJUFR8Sk9JTnxLRVl8S0VZU3xLRVlTUEFDRXxLTk9XTnxMQU5HVUFHRXxMQVNUfExFRlR8TEVUfExFVFRJTkd8TEVWRUx8TElNSVR8TFNNfE1BUHxNQVBQSU5HfE1BVENIRUR8TUFURVJJQUxJWkVEfE1FUkdFfE1JTlVTfE1JU1NJTkd8TkFNRVNQQUNFfE5FU1R8Tkx8Tk98TlRIX1ZBTFVFfE5VTEx8TlVMTFN8TlVNQkVSfE9CSkVDVHxPRkZTRVR8T058T1BUSU9OfE9QVElPTlN8T1JERVJ8T1RIRVJTfE9VVEVSfE9WRVJ8UEFSU0V8UEFSVElUSU9OfFBBU1NXT1JEfFBBVEh8UE9PTHxQUkVDRURJTkd8UFJFUEFSRXxQUklNQVJZfFBSSVZBVEV8UFJJVklMRUdFfFBST0JFfFBST0NFRFVSRXxQVUJMSUN8UkFOR0V8UkFXfFJFQUxNfFJFRFVDRXxSRU5BTUV8UkVTUEVDVHxSRVRVUk58UkVUVVJOSU5HfFJFVk9LRXxSSUdIVHxST0xFfFJPTExCQUNLfFJPV3xST1dTfFNBVElTRklFU3xTQVZFUE9JTlR8U0NIRU1BfFNDT1BFfFNFTEVDVHxTRUxGfFNFTUl8U0VUfFNIT1d8U09NRXxTVEFSVHxTVEFUSVNUSUNTfFNUUklOR3xTWVNURU18VElFU3xUT3xUUkFOfFRSQU5TQUNUSU9OfFRSSUdHRVJ8VFJVTkNBVEV8VU5CT1VOREVEfFVOREVSfFVOSU9OfFVOSVFVRXxVTktOT1dOfFVOTkVTVHxVTlNFVHxVUERBVEV8VVBTRVJUfFVTRXxVU0VSfFVTSU5HfFZBTElEQVRFfFZBTFVFfFZBTFVFU3xWSUF8VklFV3xXSEVSRXxXSElMRXxXSU5ET1d8V0lUSHxXT1JLfFhPUilcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxUUlVFKVxcYi9pLFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCtcXC58XFxCXFwuKVxcZCtlWytcXC1dP1xcZCtcXGJ8XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqXFwvJV18IT18PT0/fFxcfFxcfHw8Wz49XT98Pj0/fFxcYig/OkFORHxBTll8QVJSQVl8QkVUV0VFTnxDQVNFfEVMU0V8RU5EfEVWRVJZfEVYSVNUU3xGSVJTVHxJTnxMSUtFfE5PVHxPUnxUSEVOfFZBTFVFRHxXSEVOfFdJVEhJTilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1s7W1xcXSgpLC57fTpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm40anMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge1xuXHQvLyBLZXl3b3JkcyBmcm9tIE40SlMgbGFuZ3VhZ2Ugc3BlYzogaHR0cHM6Ly9udW1iZXJmb3VyLmdpdGh1Yi5pby9uNGpzL3NwZWMvTjRKU1NwZWMuaHRtbFxuXHQna2V5d29yZCc6IC9cXGIoPzpBcnJheXxhbnl8Ym9vbGVhbnxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGRlYnVnZ2VyfGRlY2xhcmV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZhbHNlfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxtb2R1bGV8bmV3fG51bGx8bnVtYmVyfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJldHVybnxzZXR8c3RhdGljfHN0cmluZ3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnVlfHRyeXx0eXBlb2Z8dmFyfHZvaWR8d2hpbGV8d2l0aHx5aWVsZClcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbjRqcycsICdjb25zdGFudCcsIHtcblx0Ly8gQW5ub3RhdGlvbnMgaW4gTjRKUyBzcGVjOiBodHRwczovL251bWJlcmZvdXIuZ2l0aHViLmlvL240anMvc3BlYy9ONEpTU3BlYy5odG1sI19hbm5vdGF0aW9uc1xuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvQCtcXHcrLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLm40anNkID0gUHJpc20ubGFuZ3VhZ2VzLm40anM7XG5cblByaXNtLmxhbmd1YWdlc1snbmFuZDJ0ZXRyaXMtaGRsJ10gPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpCVUlMVElOfENISVB8Q0xPQ0tFRHxJTnxPVVR8UEFSVFMpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW0EtWmEtel1bQS1aYS16MC05XSooPz1cXCgpLyxcblx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0J29wZXJhdG9yJzogLz18XFwuXFwuLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksOl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGV4cHJlc3Npb25EZWYgPSAvXFx7W15cXHJcXG5cXFtcXF17fV0qXFx9LztcblxuXHR2YXIgcGFyYW1zID0ge1xuXHRcdCdxdW90ZWQtc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQtcGFyYW0taWQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccylcXHcrOi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdjb21tYW5kLXBhcmFtLXZhbHVlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBleHByZXNzaW9uRGVmLFxuXHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcdCBdKVxcUysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcUyg/Oi4qXFxTKT8vLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdH1cblx0XHRdXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm5hbmlzY3JpcHQgPSB7XG5cdFx0Ly8gOyAuLi5cblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSopOy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0Ly8gPiAuLi5cblx0XHQvLyBEZWZpbmUgaXMgYSBjb250cm9sIGxpbmUgc3RhcnRpbmcgd2l0aCAnPicgZm9sbG93ZWQgYnkgYSB3b3JkLCBhIHNwYWNlIGFuZCBhIHRleHQuXG5cdFx0J2RlZmluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9ePi4rL20sXG5cdFx0XHRhbGlhczogJ3RhZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXj5cXHcrW1xcdCBdKykoPyFcXHMpW157fVxcclxcbl0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhePilcXHcrLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyAjIC4uLlxuXHRcdCdsYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSopI1tcXHQgXSpcXHcrW1xcdCBdKiQvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3JlZ2V4J1xuXHRcdH0sXG5cdFx0J2NvbW1hbmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKUBcXHcrKD89W1xcdCBdfCQpLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29tbWFuZC1uYW1lJzogL15AXFx3Ky8sXG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IGV4cHJlc3Npb25EZWYsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb21tYW5kLXBhcmFtcyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0aW5zaWRlOiBwYXJhbXNcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIEdlbmVyaWMgaXMgYW55IGxpbmUgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggb3BlcmF0b3JzOiA7PiNAXG5cdFx0J2dlbmVyaWMtdGV4dCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopW14jQD47XFxzXS4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gXFx7IC4uLiBcXH0gLi4uIFxcWyAuLi4gXFxdIC4uLiBcXFwiXG5cdFx0XHRcdCdlc2NhcGVkLWNoYXInOiAvXFxcXFt7fVxcW1xcXVwiXS8sXG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IGV4cHJlc3Npb25EZWYsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbmxpbmUtY29tbWFuZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxbW1xcdCBdKlxcd1teXFxyXFxuXFxbXFxdXSpcXF0vLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdjb21tYW5kLXBhcmFtcyc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFxbW1xcdCBdKlxcdytcXGIpW1xcc1xcU10rKD89XFxdJCkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IHBhcmFtc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdjb21tYW5kLXBhcmFtLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxcW1tcXHQgXSopXFx3Ky8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbmFtZScsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3N0YXJ0LXN0b3AtY2hhcic6IC9bXFxbXFxdXS8sXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0UHJpc20ubGFuZ3VhZ2VzLm5hbmkgPSBQcmlzbS5sYW5ndWFnZXNbJ25hbmlzY3JpcHQnXTtcblxuXHQvKiogQHR5cGVkZWYge0luc3RhbmNlVHlwZTxpbXBvcnQoXCIuL3ByaXNtLWNvcmVcIilbXCJUb2tlblwiXT59IFRva2VuICovXG5cblx0LyoqXG5cdCAqIFRoaXMgaG9vayBpcyB1c2VkIHRvIHZhbGlkYXRlIGdlbmVyaWMtdGV4dCB0b2tlbnMgZm9yIGJhbGFuY2VkIGJyYWNrZXRzLlxuXHQgKiBNYXJrIHRva2VuIGFzIGJhZC1saW5lIHdoZW4gY29udGFpbnMgbm90IGJhbGFuY2VkIGJyYWNrZXRzOiB7fSxbXVxuXHQgKi9cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHQvKiogQHR5cGUgeyhUb2tlbiB8IHN0cmluZylbXX0gKi9cblx0XHR2YXIgdG9rZW5zID0gZW52LnRva2Vucztcblx0XHR0b2tlbnMuZm9yRWFjaChmdW5jdGlvbiAodG9rZW4pIHtcblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnICYmIHRva2VuLnR5cGUgPT09ICdnZW5lcmljLXRleHQnKSB7XG5cdFx0XHRcdHZhciBjb250ZW50ID0gZ2V0VGV4dENvbnRlbnQodG9rZW4pO1xuXHRcdFx0XHRpZiAoIWlzQnJhY2tldHNCYWxhbmNlZChjb250ZW50KSkge1xuXHRcdFx0XHRcdHRva2VuLnR5cGUgPSAnYmFkLWxpbmUnO1xuXHRcdFx0XHRcdHRva2VuLmNvbnRlbnQgPSBjb250ZW50O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcblx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdCAqL1xuXHRmdW5jdGlvbiBpc0JyYWNrZXRzQmFsYW5jZWQoaW5wdXQpIHtcblx0XHR2YXIgYnJhY2tldHMgPSAnW117fSc7XG5cdFx0dmFyIHN0YWNrID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIGJyYWNrZXQgPSBpbnB1dFtpXTtcblx0XHRcdHZhciBicmFja2V0c0luZGV4ID0gYnJhY2tldHMuaW5kZXhPZihicmFja2V0KTtcblx0XHRcdGlmIChicmFja2V0c0luZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRpZiAoYnJhY2tldHNJbmRleCAlIDIgPT09IDApIHtcblx0XHRcdFx0XHRzdGFjay5wdXNoKGJyYWNrZXRzSW5kZXggKyAxKTtcblx0XHRcdFx0fSBlbHNlIGlmIChzdGFjay5wb3AoKSAhPT0gYnJhY2tldHNJbmRleCkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gc3RhY2subGVuZ3RoID09PSAwO1xuXHR9XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgVG9rZW4gfCAoc3RyaW5nIHwgVG9rZW4pW119IHRva2VuXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRUZXh0Q29udGVudCh0b2tlbikge1xuXHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdG9rZW47XG5cdFx0fSBlbHNlIGlmIChBcnJheS5pc0FycmF5KHRva2VuKSkge1xuXHRcdFx0cmV0dXJuIHRva2VuLm1hcChnZXRUZXh0Q29udGVudCkuam9pbignJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBnZXRUZXh0Q29udGVudCh0b2tlbi5jb250ZW50KTtcblx0XHR9XG5cdH1cblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubmFzbSA9IHtcblx0J2NvbW1lbnQnOiAvOy4qJC9tLFxuXHQnc3RyaW5nJzogLyhbXCInYF0pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHMqKVtBLVphLXouXz8kXVtcXHcuPyRAfiNdKjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC9cXFs/QklUUyAoPzoxNnwzMnw2NClcXF0/Lyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKXNlY3Rpb25cXHMqW2Etei5dKzo/L2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Lyg/OmV4dGVybnxnbG9iYWwpW147XFxyXFxuXSovaSxcblx0XHQvKD86Q1BVfERFRkFVTFR8RkxPQVQpLiokL21cblx0XSxcblx0J3JlZ2lzdGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpzdFxcZHxbeHl6XW1tXFxkXFxkP3xbY2R0XXJcXGR8clxcZFxcZD9bYndkXT98W2VyXT9bYWJjZF14fFthYmNkXVtobF18W2VyXT8oPzpicHxkaXxzaXxzcCl8W2NkZWZnc11zKVxcYi9pLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxifCg/PVxcJCkpKD86MFtoeF0oPzpcXC5bXFxkYS1mXSt8W1xcZGEtZl0rKD86XFwuW1xcZGEtZl0rKT8pKD86cFsrLV0/XFxkKyk/fFxcZFtcXGRhLWZdK1toeF18XFwkXFxkW1xcZGEtZl0qfDBbb3FdWzAtN10rfFswLTddK1tvcV18MFtieV1bMDFdK3xbMDFdK1tieV18MFtkdF1cXGQrfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpcXC4/ZVsrLV0/XFxkKyk/W2R0XT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bXFxbXFxdKitcXC1cXC8lPD49JnwkIV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubmVvbiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdkYXRldGltZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KD06LFxcc10pXFxkXFxkXFxkXFxkLVxcZFxcZD8tXFxkXFxkPyg/Oig/OltUdF18ICspXFxkXFxkPzpcXGRcXGQ6XFxkXFxkKD86XFwuXFxkKik/ICooPzpafFstK11cXGRcXGQ/KD86Oj9cXGRcXGQpPyk/KT8oPz0kfFtcXF19KSxcXHNdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KCxcXHNdKVteLDo9W1xcXXt9KCknXCJcXHNdKyg/PVxccyo6KD86JHxbXFxdfSksXFxzXSl8XFxzKj0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKVsrLV0/KD86MHhbXFxkYS1mQS1GXSt8MG9bMC03XSt8MGJbMDFdK3woPzpcXGQrKD86XFwuXFxkKik/fFxcLj9cXGQrKSg/OltlRV1bKy1dP1xcZCspPykoPz0kfFtcXF19KSw6PVxcc10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbW3soPTosXFxzXSkoPzpmYWxzZXxub3x0cnVlfHllcykoPz0kfFtcXF19KSw6PVxcc10pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KD06LFxcc10pKD86bnVsbCkoPz0kfFtcXF19KSw6PVxcc10pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKSg/OignJyd8XCJcIlwiKVxccj9cXG4oPzooPzpbXlxcclxcbl18XFxyP1xcbig/IVtcXHQgXSpcXDIpKSpcXHI/XFxuKT9bXFx0IF0qXFwyfCdbXidcXHJcXG5dKid8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2xpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKSg/OlteI1wiJyw6PVtcXF17fSgpXFxzYC1dfFs6LV1bXlwiJyw9W1xcXXt9KClcXHNdKSg/OlteLDo9XFxdfSkoXFxzXXw6KD8hW1xccyxcXF19KV18JCl8WyBcXHRdK1teIyw6PVxcXX0pKFxcc10pKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bLDo9W1xcXXt9KCktXS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubmV2b2QgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfCg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkpLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86XCIoPzpcIlwifFteXCJdKSpcIig/IVwiKXwnKD86Jyd8W14nXSkqJyg/IScpKSE/XFwqPy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0cmluZy1hdHRycyc6IC8hJHwhXFwqJHxcXCokLyxcblx0XHR9LFxuXHR9LFxuXHQnbmFtZXNwYWNlJzoge1xuXHRcdHBhdHRlcm46IC8oQG5hbWVzcGFjZVxccyspW2EtekEtWjAtOVxcLS5dKyg/PVxccypcXHspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHR9LFxuXHQncGF0dGVybic6IHtcblx0XHRwYXR0ZXJuOiAvKEBwYXR0ZXJuXFxzKyk/Iz9bYS16QS1aMC05XFwtLl0rKD86XFxzKlxcKFxccyooPzp+XFxzKik/W2EtekEtWjAtOVxcLS5dK1xccyooPzosXFxzKig/On5cXHMqKT9bYS16QS1aMC05XFwtLl0qKSpcXCkpPyg/PVxccyo9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwYXR0ZXJuLW5hbWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eIz9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdH0sXG5cdFx0XHQnZmllbGRzJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwoLipcXCkvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZmllbGQtbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssKCldLyxcblx0XHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvfi8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2ZpZWxkLWhpZGRlbi1tYXJrJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXHQnc2VhcmNoJzoge1xuXHRcdHBhdHRlcm46IC8oQHNlYXJjaFxccyt8IylbYS16QS1aMC05XFwtLl0rKD86XFwuXFwqKT8oPz1cXHMqOykvLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdH0sXG5cdCdrZXl3b3JkJzogL0AoPzpoYXZpbmd8aW5zaWRlfG5hbWVzcGFjZXxvdXRzaWRlfHBhdHRlcm58cmVxdWlyZXxzZWFyY2h8d2hlcmUpXFxiLyxcblx0J3N0YW5kYXJkLXBhdHRlcm4nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFscGhhfEFscGhhTnVtfEFueXxCbGFua3xFbmR8TGluZUJyZWFrfE51bXxOdW1BbHBoYXxQdW5jdHxTcGFjZXxTdGFydHxTeW1ib2x8V29yZHxXb3JkQnJlYWspXFxiKD86XFwoW2EtekEtWjAtOVxcLS4sXFxzK10qXFwpKT8vLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N0YW5kYXJkLXBhdHRlcm4tbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0YWxpYXM6ICdidWlsdGluJyxcblx0XHRcdH0sXG5cdFx0XHQncXVhbnRpZmllcic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlxcZCsoPzpcXHMqXFwrfFxccyotXFxzKlxcZCspPyg/IVxcdykvLFxuXHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHR9LFxuXHRcdFx0J3N0YW5kYXJkLXBhdHRlcm4tYXR0cic6IHtcblx0XHRcdFx0cGF0dGVybjogL1thLXpBLVowLTlcXC0uXSsvLFxuXHRcdFx0XHRhbGlhczogJ2J1aWx0aW4nLFxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLCgpXS8sXG5cdFx0fSxcblx0fSxcblx0J3F1YW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYlxcZCsoPzpcXHMqXFwrfFxccyotXFxzKlxcZCspPyg/IVxcdykvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0fSxcblx0J29wZXJhdG9yJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC89Lyxcblx0XHRcdGFsaWFzOiAncGF0dGVybi1kZWYnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyYvLFxuXHRcdFx0YWxpYXM6ICdjb25qdW5jdGlvbicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvfi8sXG5cdFx0XHRhbGlhczogJ2V4Y2VwdGlvbicsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFw/Lyxcblx0XHRcdGFsaWFzOiAnb3B0aW9uYWxpdHknLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1tbXFxdXS8sXG5cdFx0XHRhbGlhczogJ3JlcGV0aXRpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1t7fV0vLFxuXHRcdFx0YWxpYXM6ICd2YXJpYXRpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1srX10vLFxuXHRcdFx0YWxpYXM6ICdzZXF1ZW5jZScsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuezIsM30vLFxuXHRcdFx0YWxpYXM6ICdzcGFuJyxcblx0XHR9LFxuXHRdLFxuXHQnZmllbGQtY2FwdHVyZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFthLXpBLVowLTlcXC0uXStcXHMqXFwoKVxccypbYS16QS1aMC05XFwtLl0rXFxzKjpcXHMqW2EtekEtWjAtOVxcLS5dKyg/OlxccyosXFxzKlthLXpBLVowLTlcXC0uXStcXHMqOlxccypbYS16QS1aMC05XFwtLl0rKSooPz1cXHMqXFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWVsZC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbG9uJzogLzovLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rXFxzKjovLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWVsZC1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbG9uJzogLzovLFxuXHRcdFx0fSxcblx0XHR9LFxuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWzo7LCgpXS8sXG5cdCduYW1lJzogL1thLXpBLVowLTlcXC0uXSsvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHZhcmlhYmxlID0gL1xcJCg/Olxcd1thLXpcXGRdKig/Ol9bXlxceDAwLVxceDFGXFxzXCInXFxcXCgpJF0qKT98XFx7W159XFxzXCInXFxcXF0rXFx9KS9pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5uZ2lueCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxze307XSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFx3KD86W147e31cIidcXFxcXFxzXXxcXFxcLnxcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxdfFxcXFwuKSonfFxccysoPzojLiooPyEuKXwoPyFbI1xcc10pKSkqPyg/PVxccypbO3tdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKikoPzpcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxdfFxcXFwuKSonKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZXNjYXBlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxcXFtcIidcXFxcbnJ0XS8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnZW50aXR5J1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29tbWVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxccykjLiovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxTKy8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gb3RoZXIgcGF0dGVybnNcblxuXHRcdFx0XHQnYm9vbGVhbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxccykoPzpvZmZ8b24pKD8hXFxTKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbnVtYmVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcZCtbYS16XSooPyFcXFMpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fTtdL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5uaW0gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdC8vIERvdWJsZS1xdW90ZWQgc3RyaW5ncyBjYW4gYmUgcHJlZml4ZWQgYnkgYW4gaWRlbnRpZmllciAoR2VuZXJhbGl6ZWQgcmF3IHN0cmluZyBsaXRlcmFscylcblx0XHRwYXR0ZXJuOiAvKD86XFxiKD8hXFxkKSg/Olxcd3xcXFxceFs4OWEtZkEtRl1bMC05YS1mQS1GXSkrKT8oPzpcIlwiXCJbXFxzXFxTXSo/XCJcIlwiKD8hXCIpfFwiKD86XFxcXFtcXHNcXFNdfFwiXCJ8W15cIlxcXFxdKSpcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2hhcic6IHtcblx0XHQvLyBDaGFyYWN0ZXIgbGl0ZXJhbHMgYXJlIGhhbmRsZWQgc3BlY2lmaWNhbGx5IHRvIHByZXZlbnQgaXNzdWVzIHdpdGggbnVtZXJpYyB0eXBlIHN1ZmZpeGVzXG5cdFx0cGF0dGVybjogLycoPzpcXFxcKD86XFxkK3x4W1xcZGEtZkEtRl17MCwyfXwuKXxbXiddKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKD86KD8hXFxkKSg/Olxcd3xcXFxceFs4OWEtZkEtRl1bMC05YS1mQS1GXSkrfGBbXmBcXHJcXG5dK2ApXFwqPyg/OlxcW1teXFxdXStcXF0pPyg/PVxccypcXCgpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvXFwqJC9cblx0XHR9XG5cdH0sXG5cdC8vIFdlIGRvbid0IHdhbnQgdG8gaGlnaGxpZ2h0IG9wZXJhdG9ycyAoYW5kIGFueXRoaW5nIHJlYWxseSkgaW5zaWRlIGJhY2t0aWNrc1xuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvYFteYFxcclxcbl0rYC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL2AvXG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRoZSBuZWdhdGl2ZSBsb29rIGFoZWFkIHByZXZlbnRzIHdyb25nIGhpZ2hsaWdodGluZyBvZiB0aGUgLi4gb3BlcmF0b3Jcblx0J251bWJlcic6IC9cXGIoPzowW3hYb09iQl1bXFxkYS1mQS1GX10rfFxcZFtcXGRfXSooPzooPyFcXC5cXC4pXFwuW1xcZF9dKik/KD86W2VFXVsrLV0/XFxkW1xcZF9dKik/KSg/Oic/W2l1Zl1cXGQqKT8vLFxuXHQna2V5d29yZCc6IC9cXGIoPzphZGRyfGFzfGFzbXxhdG9taWN8YmluZHxibG9ja3xicmVha3xjYXNlfGNhc3R8Y29uY2VwdHxjb25zdHxjb250aW51ZXxjb252ZXJ0ZXJ8ZGVmZXJ8ZGlzY2FyZHxkaXN0aW5jdHxkb3xlbGlmfGVsc2V8ZW5kfGVudW18ZXhjZXB0fGV4cG9ydHxmaW5hbGx5fGZvcnxmcm9tfGZ1bmN8Z2VuZXJpY3xpZnxpbXBvcnR8aW5jbHVkZXxpbnRlcmZhY2V8aXRlcmF0b3J8bGV0fG1hY3JvfG1ldGhvZHxtaXhpbnxuaWx8b2JqZWN0fG91dHxwcm9jfHB0cnxyYWlzZXxyZWZ8cmV0dXJufHN0YXRpY3x0ZW1wbGF0ZXx0cnl8dHVwbGV8dHlwZXx1c2luZ3x2YXJ8d2hlbnx3aGlsZXx3aXRofHdpdGhvdXR8eWllbGQpXFxiLyxcblx0J29wZXJhdG9yJzoge1xuXHRcdC8vIExvb2sgYmVoaW5kIGFuZCBsb29rIGFoZWFkIHByZXZlbnQgd3JvbmcgaGlnaGxpZ2h0aW5nIG9mIHB1bmN0dWF0aW9ucyBbLiAuXSB7LiAufSAoLiAuKVxuXHRcdC8vIGJ1dCBhbGxvdyB0aGUgc2xpY2Ugb3BlcmF0b3IgLi4gdG8gdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlbVxuXHRcdC8vIE9uZSBjYW4gZGVmaW5lIGhpcyBvd24gb3BlcmF0b3JzIGluIE5pbSBzbyBhbGwgY29tYmluYXRpb24gb2Ygb3BlcmF0b3JzIG1pZ2h0IGJlIGFuIG9wZXJhdG9yLlxuXHRcdHBhdHRlcm46IC8oXnxbKHtcXFtdKD89XFwuXFwuKXwoPyFbKHtcXFtdXFwuKS4pKD86KD86Wz0rXFwtKlxcLzw+QCR+JiV8IT9eOlxcXFxdfFxcLlxcLnxcXC4oPyFbKX1cXF1dKSkrfFxcYig/OmFuZHxkaXZ8aW58aXN8aXNub3R8bW9kfG5vdHxub3RpbnxvZnxvcnxzaGx8c2hyfHhvcilcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWyh7XFxbXVxcLnxcXC5bKX1cXF1dfFtgKCl7fVxcW1xcXSw6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5uaXggPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCJ8JycoPzooPyEnJylbXFxzXFxTXXwnJyg/Oid8XFxcXHxcXCRcXHspKSonJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdC8vIFRoZSBsb29rYmVoaW5kIGVuc3VyZXMgdGhlICR7fSBpcyBub3QgcHJlY2VkZWQgYnkgXFwgb3IgJydcblx0XHRcdFx0cGF0dGVybjogLyhefCg/Ol58KD8hJycpLilbXlxcXFxdKVxcJFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQndXJsJzogW1xuXHRcdC9cXGIoPzpbYS16XXszLDd9OlxcL1xcLylbXFx3XFwtKyV+XFwvLjojPT8mXSsvLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oW15cXC9dKSg/OltcXHdcXC0rJX4uOiM9PyZdKig/IVxcL1xcLylbXFx3XFwtKyV+XFwvLjojPT8mXSk/KD8hXFwvXFwvKVxcL1tcXHdcXC0rJX5cXC8uOiM9PyZdKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnYW50aXF1b3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFwkKD89XFx7KS8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzc2VydHxidWlsdGluc3xlbHNlfGlmfGlufGluaGVyaXR8bGV0fG51bGx8b3J8dGhlbnx3aXRoKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGIoPzphYm9ydHxhZGR8YWxsfGFueXxhdHRyTmFtZXN8YXR0clZhbHVlc3xiYXNlTmFtZU9mfGNvbXBhcmVWZXJzaW9uc3xjb25jYXRMaXN0c3xjdXJyZW50U3lzdGVtfGRlZXBTZXF8ZGVyaXZhdGlvbnxkaXJPZnxkaXZ8ZWxlbSg/OkF0KT98ZmV0Y2goPzpUYXJiYWxsfHVybCl8ZmlsdGVyKD86U291cmNlKT98ZnJvbUpTT058Z2VuTGlzdHxnZXRBdHRyfGdldEVudnxoYXNBdHRyfGhhc2hTdHJpbmd8aGVhZHxpbXBvcnR8aW50ZXJzZWN0QXR0cnN8aXMoPzpBdHRyc3xCb29sfEZ1bmN0aW9ufEludHxMaXN0fE51bGx8U3RyaW5nKXxsZW5ndGh8bGVzc1RoYW58bGlzdFRvQXR0cnN8bWFwfG11bHxwYXJzZURydk5hbWV8cGF0aEV4aXN0c3xyZWFkKD86RGlyfEZpbGUpfHJlbW92ZUF0dHJzfHJlcGxhY2VTdHJpbmdzfHNlcXxzb3J0fHN0cmluZ0xlbmd0aHxzdWIoPzpzdHJpbmcpP3x0YWlsfHRocm93fHRvKD86RmlsZXxKU09OfFBhdGh8U3RyaW5nfFhNTCl8dHJhY2V8dHlwZU9mKVxcYnxcXGJmb2xkbCdcXEIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9bPSE8Pl09P3xcXCtcXCs/fFxcfFxcfHwmJnxcXC9cXC98LT4/fFs/QF0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KClbXFxdLiw6O10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubml4LnN0cmluZy5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMubml4O1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IEphbiBULiBTb3R0IChodHRwOi8vZ2l0aHViLmNvbS9pZGxlYmVyZylcbiAqXG4gKiBJbmNsdWRlcyBhbGwgY29tbWFuZHMgYW5kIHBsdWctaW5zIHNoaXBwZWQgd2l0aCBOU0lTIDMuMDhcbiAqL1xuUHJpc20ubGFuZ3VhZ2VzLm5zaXMgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98WyM7XS4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86QWJvcnR8QWRkKD86QnJhbmRpbmdJbWFnZXxTaXplKXxBZHZTcGxhc2h8QWxsb3coPzpSb290RGlySW5zdGFsbHxTa2lwRmlsZXMpfEF1dG9DbG9zZVdpbmRvd3xCRyg/OkZvbnR8R3JhZGllbnR8SW1hZ2UpfEJhbm5lcnxCcmFuZGluZ1RleHR8QnJpbmdUb0Zyb250fENSQ0NoZWNrfENhbGwoPzpJbnN0RExMKT98Q2FwdGlvbnxDaGFuZ2VVSXxDaGVja0JpdG1hcHxDbGVhckVycm9yc3xDb21wbGV0ZWRUZXh0fENvbXBvbmVudFRleHR8Q29weUZpbGVzfENyZWF0ZSg/OkRpcmVjdG9yeXxGb250fFNob3J0Q3V0KXxEZWxldGUoPzpJTklTZWN8SU5JU3RyfFJlZ0tleXxSZWdWYWx1ZSk/fERldGFpbCg/OlByaW50fHNCdXR0b25UZXh0KXxEaWFsZXJ8RGlyKD86VGV4dHxWYXJ8VmVyaWZ5KXxFbmFibGVXaW5kb3d8RW51bSg/OlJlZ0tleXxSZWdWYWx1ZSl8RXhjaHxFeGVjKD86U2hlbGwoPzpXYWl0KT98V2FpdCk/fEV4cGFuZEVudlN0cmluZ3N8RmlsZSg/OkJ1ZlNpemV8Q2xvc2V8RXJyb3JUZXh0fE9wZW58UmVhZHxSZWFkQnl0ZXxSZWFkVVRGMTZMRXxSZWFkV29yZHxTZWVrfFdyaXRlfFdyaXRlQnl0ZXxXcml0ZVVURjE2TEV8V3JpdGVXb3JkKT98RmluZCg/OkNsb3NlfEZpcnN0fE5leHR8V2luZG93KXxGbHVzaElOSXxHZXQoPzpDdXJJbnN0VHlwZXxDdXJyZW50QWRkcmVzc3xETExWZXJzaW9uKD86TG9jYWwpP3xEbGdJdGVtfEVycm9yTGV2ZWx8RmlsZVRpbWUoPzpMb2NhbCk/fEZ1bGxQYXRoTmFtZXxGdW5jdGlvbig/OkFkZHJlc3N8RW5kKT98SW5zdERpckVycm9yfExhYmVsQWRkcmVzc3xUZW1wRmlsZU5hbWUpfEdvdG98SGlkZVdpbmRvd3xJY29ufElmKD86QWJvcnR8RXJyb3JzfEZpbGVFeGlzdHN8UmVib290RmxhZ3xTaWxlbnQpfEluaXRQbHVnaW5zRGlyfEluc3RQcm9ncmVzc0ZsYWdzfEluc3QoPzpUeXBlKD86R2V0VGV4dHxTZXRUZXh0KT8pfEluc3RhbGwoPzpCdXR0b25UZXh0fENvbG9yc3xEaXIoPzpSZWdLZXkpPyl8SW50KD86NjR8UHRyKT9DbXBVP3xJbnQoPzo2NCk/Rm10fEludCg/OlB0cik/T3B8SXNXaW5kb3d8TGFuZyg/OkRMTHxTdHJpbmcpfExpY2Vuc2UoPzpCa0NvbG9yfERhdGF8Rm9yY2VTZWxlY3Rpb258TGFuZ1N0cmluZ3xUZXh0KXxMb2FkTGFuZ3VhZ2VGaWxlfExvY2tXaW5kb3d8TG9nKD86U2V0fFRleHQpfE1hbmlmZXN0KD86RFBJQXdhcmV8U3VwcG9ydGVkT1MpfE1hdGh8TWVzc2FnZUJveHxNaXNjQnV0dG9uVGV4dHxOU0lTZGx8TmFtZXxOb3B8T3V0RmlsZXxQRSg/OkRsbENoYXJhY3RlcmlzdGljc3xTdWJzeXNWZXIpfFBhZ2UoPzpDYWxsYmFja3MpP3xQb3B8UHVzaHxRdWl0fFJNRGlyfFJlYWQoPzpFbnZTdHJ8SU5JU3RyfFJlZ0RXT1JEfFJlZ1N0cil8UmVib290fFJlZ0RMTHxSZW5hbWV8UmVxdWVzdEV4ZWN1dGlvbkxldmVsfFJlc2VydmVGaWxlfFJldHVybnxTZWFyY2hQYXRofFNlY3Rpb24oPzpFbmR8R2V0RmxhZ3N8R2V0SW5zdFR5cGVzfEdldFNpemV8R2V0VGV4dHxHcm91cHxJbnxTZXRGbGFnc3xTZXRJbnN0VHlwZXN8U2V0U2l6ZXxTZXRUZXh0KT98U2VuZE1lc3NhZ2V8U2V0KD86QXV0b0Nsb3NlfEJyYW5kaW5nSW1hZ2V8Q29tcHJlc3N8Q29tcHJlc3Nvcig/OkRpY3RTaXplKT98Q3RsQ29sb3JzfEN1ckluc3RUeXBlfERhdGFibG9ja09wdGltaXplfERhdGVTYXZlfERldGFpbHMoPzpQcmludHxWaWV3KXxFcnJvckxldmVsfEVycm9yc3xGaWxlQXR0cmlidXRlc3xGb250fE91dFBhdGh8T3ZlcndyaXRlfFBsdWdpblVubG9hZHxSZWJvb3RGbGFnfFJlZ1ZpZXd8U2hlbGxWYXJDb250ZXh0fFNpbGVudCl8U2hvdyg/Okluc3REZXRhaWxzfFVuaW5zdERldGFpbHN8V2luZG93KXxTaWxlbnQoPzpJbnN0YWxsfFVuSW5zdGFsbCl8U2xlZXB8U3BhY2VUZXh0c3xTcGxhc2h8U3RhcnRNZW51fFN0cig/OkNtcFM/fENweXxMZW4pfFN1YkNhcHRpb258U3lzdGVtfFVuUmVnRExMfFVuaWNvZGV8VW5pbnN0UGFnZXxVbmluc3RhbGwoPzpCdXR0b25UZXh0fENhcHRpb258SWNvbnxTdWJDYXB0aW9ufFRleHQpfFVzZXJJbmZvfFZJKD86QWRkVmVyc2lvbktleXxGaWxlVmVyc2lvbnxQcm9kdWN0VmVyc2lvbil8VlBhdGNofFZhcnxXaW5kb3dJY29ufFdyaXRlKD86SU5JU3RyfFJlZyg/OkJpbnxEV09SRHxFeHBhbmRTdHJ8TXVsdGlTdHJ8Tm9uZXxTdHIpfFVuaW5zdGFsbGVyKXxYUFN0eWxlfG5zKD86RGlhbG9nc3xFeGVjKSlcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdwcm9wZXJ0eSc6IC9cXGIoPzpBUkNISVZFfEZJTEVfKD86QVRUUklCVVRFX0FSQ0hJVkV8QVRUUklCVVRFX05PUk1BTHxBVFRSSUJVVEVfT0ZGTElORXxBVFRSSUJVVEVfUkVBRE9OTFl8QVRUUklCVVRFX1NZU1RFTXxBVFRSSUJVVEVfVEVNUE9SQVJZKXxISyg/Oig/OkNSfENVfExNKSg/OjMyfDY0KT98RER8UER8VSl8SEtFWV8oPzpDTEFTU0VTX1JPT1R8Q1VSUkVOVF9DT05GSUd8Q1VSUkVOVF9VU0VSfERZTl9EQVRBfExPQ0FMX01BQ0hJTkV8UEVSRk9STUFOQ0VfREFUQXxVU0VSUyl8SUQoPzpBQk9SVHxDQU5DRUx8SUdOT1JFfE5PfE9LfFJFVFJZfFlFUyl8TUJfKD86QUJPUlRSRVRSWUlHTk9SRXxERUZCVVRUT04xfERFRkJVVFRPTjJ8REVGQlVUVE9OM3xERUZCVVRUT040fElDT05FWENMQU1BVElPTnxJQ09OSU5GT1JNQVRJT058SUNPTlFVRVNUSU9OfElDT05TVE9QfE9LfE9LQ0FOQ0VMfFJFVFJZQ0FOQ0VMfFJJR0hUfFJUTFJFQURJTkd8U0VURk9SRUdST1VORHxUT1BNT1NUfFVTRVJJQ09OfFlFU05PKXxOT1JNQUx8T0ZGTElORXxSRUFET05MWXxTSENUWHxTSEVMTF9DT05URVhUfFNZU1RFTXxURU1QT1JBUll8YWRtaW58YWxsfGF1dG98Ym90aHxjb2xvcmVkfGZhbHNlfGZvcmNlfGhpZGV8aGlnaGVzdHxsYXN0dXNlZHxsZWF2ZXxsaXN0b25seXxub25lfG5vcm1hbHxub3RzZXR8b2ZmfG9ufG9wZW58cHJpbnR8c2hvd3xzaWxlbnR8c2lsZW50bG9nfHNtb290aHx0ZXh0b25seXx0cnVlfHVzZXIpXFxiLyxcblx0J2NvbnN0YW50JzogL1xcJFxce1shXFx3XFwuOlxcXi1dK1xcfXxcXCRcXChbIVxcd1xcLjpcXF4tXStcXCkvLFxuXHQndmFyaWFibGUnOiAvXFwkXFx3W1xcd1xcLl0qLyxcblx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/Lyxcblx0J29wZXJhdG9yJzogLy0tP3xcXCtcXCs/fDw9P3w+PT98PT0/PT98JiY/fFxcfFxcfD98Wz8qXFwvfl4lXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS8sXG5cdCdpbXBvcnRhbnQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikhKD86YWRkaW5jbHVkZWRpcnxhZGRwbHVnaW5kaXJ8YXBwZW5kZmlsZXxjZHxkZWZpbmV8ZGVsZmlsZXxlY2hvfGVsc2V8ZW5kaWZ8ZXJyb3J8ZXhlY3V0ZXxmaW5hbGl6ZXxnZXRkbGx2ZXJzaW9ufGdldHRsYnZlcnNpb258aWZ8aWZkZWZ8aWZtYWNyb2RlZnxpZm1hY3JvbmRlZnxpZm5kZWZ8aW5jbHVkZXxpbnNlcnRtYWNyb3xtYWNyb3xtYWNyb2VuZHxtYWtlbnNpc3xwYWNraGRyfHByYWdtYXxzZWFyY2hwYXJzZXxzZWFyY2hyZXBsYWNlfHN5c3RlbXx0ZW1wZmlsZXx1bmRlZnx2ZXJib3NlfHdhcm5pbmcpXFxiL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fVxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm9iamVjdGl2ZWMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9AP1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzbXxhdXRvfGJyZWFrfGNhc2V8Y2hhcnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZXJufGZsb2F0fGZvcnxnb3RvfGlmfGlufGlubGluZXxpbnR8bG9uZ3xyZWdpc3RlcnxyZXR1cm58c2VsZnxzaG9ydHxzaWduZWR8c2l6ZW9mfHN0YXRpY3xzdHJ1Y3R8c3VwZXJ8c3dpdGNofHR5cGVkZWZ8dHlwZW9mfHVuaW9ufHVuc2lnbmVkfHZvaWR8dm9sYXRpbGV8d2hpbGUpXFxifCg/OkBpbnRlcmZhY2V8QGVuZHxAaW1wbGVtZW50YXRpb258QHByb3RvY29sfEBjbGFzc3xAcHVibGljfEBwcm90ZWN0ZWR8QHByaXZhdGV8QHByb3BlcnR5fEB0cnl8QGNhdGNofEBmaW5hbGx5fEB0aHJvd3xAc3ludGhlc2l6ZXxAZHluYW1pY3xAc2VsZWN0b3IpXFxiLyxcblx0J29wZXJhdG9yJzogLy1bLT5dP3xcXCtcXCs/fCE9P3w8PD89P3w+Pj89P3w9PT98JiY/fFxcfFxcfD98W35eJT8qXFwvQF0vXG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5vYmplY3RpdmVjWydjbGFzcy1uYW1lJ107XG5cblByaXNtLmxhbmd1YWdlcy5vYmpjID0gUHJpc20ubGFuZ3VhZ2VzLm9iamVjdGl2ZWM7XG5cbi8vIGh0dHBzOi8vb2NhbWwub3JnL21hbnVhbC9sZXguaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMub2NhbWwgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXlxcXFxcXHJcXG4nXXxcXFxcKD86Lnxbb3hdP1swLTlhLWZdezEsM30pKScvaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86W1xcc1xcU118XFxyXFxuKXxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xceyhbYS16X10qKVxcfFtcXHNcXFNdKj9cXHxcXDFcXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnbnVtYmVyJzogW1xuXHRcdC8vIGJpbmFyeSBhbmQgb2N0YWxcblx0XHQvXFxiKD86MGJbMDFdWzAxX10qfDBvWzAtN11bMC03X10qKVxcYi9pLFxuXHRcdC8vIGhleGFkZWNpbWFsXG5cdFx0L1xcYjB4W2EtZjAtOV1bYS1mMC05X10qKD86XFwuW2EtZjAtOV9dKik/KD86cFsrLV0/XFxkW1xcZF9dKik/KD8hXFx3KS9pLFxuXHRcdC8vIGRlY2ltYWxcblx0XHQvXFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopPyg/OmVbKy1dP1xcZFtcXGRfXSopPyg/IVxcdykvaSxcblx0XSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCI1xcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCflxcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCd0eXBlLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC9cXEInXFx3Ky8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3ZhcmlhbnQnOiB7XG5cdFx0cGF0dGVybjogL2BcXHcrLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0Ly8gRm9yIHRoZSBsaXN0IG9mIGtleXdvcmRzIGFuZCBvcGVyYXRvcnMsXG5cdC8vIHNlZTogaHR0cDovL2NhbWwuaW5yaWEuZnIvcHViL2RvY3MvbWFudWFsLW9jYW1sL2xleC5odG1sI3NlYzg0XG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGFzc2VydHxiZWdpbnxjbGFzc3xjb25zdHJhaW50fGRvfGRvbmV8ZG93bnRvfGVsc2V8ZW5kfGV4Y2VwdGlvbnxleHRlcm5hbHxmb3J8ZnVufGZ1bmN0aW9ufGZ1bmN0b3J8aWZ8aW58aW5jbHVkZXxpbmhlcml0fGluaXRpYWxpemVyfGxhenl8bGV0fG1hdGNofG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8bm9ucmVjfG9iamVjdHxvZnxvcGVufHByaXZhdGV8cmVjfHNpZ3xzdHJ1Y3R8dGhlbnx0b3x0cnl8dHlwZXx2YWx8dmFsdWV8dmlydHVhbHx3aGVufHdoZXJlfHdoaWxlfHdpdGgpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdvcGVyYXRvci1saWtlLXB1bmN0dWF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXFtbPD58XXxbPnxdXFxdfFxcezx8PlxcfS8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0Ly8gQ3VzdG9tIG9wZXJhdG9ycyBhcmUgYWxsb3dlZFxuXHQnb3BlcmF0b3InOiAvXFwuWy5+XXw6Wz0+XXxbPTw+QF58JitcXC0qXFwvJCUhP35dWyEkJSYqK1xcLS5cXC86PD0+P0BefH5dKnxcXGIoPzphbmR8YXNyfGxhbmR8bG9yfGxzbHxsc3J8bHhvcnxtb2R8b3IpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogLzs7fDo6fFsoKXt9XFxbXFxdLiw6OyNdfFxcYl9cXGIvXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBlc2NhcGVzID0gL1xcXFwoPzpbXCInXFxcXGFiZWZucnR2XXwwWzAtN117Mn18VVtcXGRBLUZhLWZdezZ9fHVbXFxkQS1GYS1mXXs0fXx4W1xcZEEtRmEtZl17Mn0pLztcblxuXHRQcmlzbS5sYW5ndWFnZXMub2RpbiA9IHtcblx0XHQvKipcblx0XHQgKiBUaGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdXBwb3J0cyBvbmx5IDEgbGV2ZWwgb2YgbmVzdGluZy5cblx0XHQgKlxuXHRcdCAqIEBhdXRob3IgTWljaGFlbCBTY2htaWR0XG5cdFx0ICogQGF1dGhvciBlZHVraXN0b1xuXHRcdCAqL1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvXFwqKD86W14vKl18XFwvKD8hXFwqKXxcXCooPyFcXC8pfFxcL1xcKig/OlxcKig/IVxcLyl8W14qXSkqKD86XFwqXFwvfCQpKSooPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8jIVteXFxuXFxyXSovLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXC9cXC9bXlxcblxccl0qLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3VsZCBiZSBmb3VuZCBiZWZvcmUgc3RyaW5ncyBiZWNhdXNlIG9mICdcIidcIi0gYW5kICdgJ2AtbGlrZSBzZXF1ZW5jZXMuXG5cdFx0ICovXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwoPzoufFswVXV4XVswLTlBLUZhLWZdezEsNn0pfFteXFxuXFxyJ1xcXFxdKScvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzeW1ib2wnOiBlc2NhcGVzXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9gW15gXSpgLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcblxcclwiXFxcXF0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnc3ltYm9sJzogZXNjYXBlc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcdysvLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IC9cXGIwKD86YlswMV9dK3xkW1xcZF9dK3xoXyooPzooPzooPzpbXFxkQS1GYS1mXV8qKXs4fSl7MSwyfXwoPzpbXFxkQS1GYS1mXV8qKXs0fSl8b1swLTdfXSt8eFtcXGRBLUZfYS1mXSt8eltcXGRBQl9hYl0rKVxcYnwoPzpcXGJcXGQrKD86XFwuKD8hXFwuKVxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCopP1tpamtdPyg/IVxcdykvLFxuXG5cdFx0J2Rpc2NhcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiX1xcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdwcm9jZWR1cmUtZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJcXHcrKD89WyBcXHRdKig/OjpcXHMqKXsyfXByb2NcXGIpLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFzbXxhdXRvX2Nhc3R8Yml0X3NldHxicmVha3xjYXNlfGNhc3R8Y29udGV4dHxjb250aW51ZXxkZWZlcnxkaXN0aW5jdHxkb3xkeW5hbWljfGVsc2V8ZW51bXxmYWxsdGhyb3VnaHxmb3J8Zm9yZWlnbnxpZnxpbXBvcnR8aW58bWFwfG1hdHJpeHxub3RfaW58b3JfZWxzZXxvcl9yZXR1cm58cGFja2FnZXxwcm9jfHJldHVybnxzdHJ1Y3R8c3dpdGNofHRyYW5zbXV0ZXx0eXBlaWR8dW5pb258dXNpbmd8d2hlbnx3aGVyZSlcXGIvLFxuXG5cdFx0LyoqXG5cdFx0ICogZmFsc2UsIG5pbCwgdHJ1ZSBjYW4gYmUgdXNlZCBhcyBwcm9jZWR1cmUgbmFtZXMuIFwiX1wiIGFuZCBrZXl3b3JkcyBjYW4ndC5cblx0XHQgKi9cblx0XHQncHJvY2VkdXJlLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3Kyg/PVsgXFx0XSpcXCgpLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cblx0XHQnY29uc3RhbnQtcGFyYW1ldGVyLXNpZ24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cblx0XHQndW5kZWZpbmVkJzoge1xuXHRcdFx0cGF0dGVybjogLy0tLS8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cblx0XHQnYXJyb3cnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvLT4vLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXG5cdFx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXxcXC5cXC5bPD1dP3woPzomfnxbLSEqKy89fl18WyUmPD58XXsxLDJ9KT0/fFs/Xl0vLFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKSwuOjtAXFxbXFxde31dL1xuXHR9O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8qIE9wZW5DTCBrZXJuZWwgbGFuZ3VhZ2UgKi9cblx0UHJpc20ubGFuZ3VhZ2VzLm9wZW5jbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2MnLCB7XG5cdFx0Ly8gRXh0cmFjdGVkIGZyb20gdGhlIG9mZmljaWFsIHNwZWNzICgyLjApIGFuZCBodHRwOi8vc3RyZWFtY29tcHV0aW5nLmV1L2Rvd25sb2Fkcy8/b3BlbmNsLmxhbmcgKG9wZW5jbC1rZXl3b3Jkcywgb3BlbmNsLXR5cGVzKSBhbmQgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhaWQ9Mjk1Nzc5NCZncm91cF9pZD05NTcxNyZhdGlkPTYxMjM4NCAoV29yZHMyLCBwYXJ0bHkgV29yZHMzKVxuXHRcdCdrZXl3b3JkJzogL1xcYig/Oig/Ol9fKT8oPzpjb25zdGFudHxnbG9iYWx8a2VybmVsfGxvY2FsfHByaXZhdGV8cmVhZF9vbmx5fHJlYWRfd3JpdGV8d3JpdGVfb25seSl8X19hdHRyaWJ1dGVfX3xhdXRvfCg/OmJvb2x8dT8oPzpjaGFyfGludHxsb25nfHNob3J0KXxoYWxmfHF1YWQpKD86MnwzfDR8OHwxNik/fGJyZWFrfGNhc2V8Y29tcGxleHxjb25zdHxjb250aW51ZXwoPzpkb3VibGV8ZmxvYXQpKD86MTYoPzp4KD86MXwyfDR8OHwxNikpP3wxeCg/OjF8Mnw0fDh8MTYpfDIoPzp4KD86MXwyfDR8OHwxNikpP3wzfDQoPzp4KD86MXwyfDR8OHwxNikpP3w4KD86eCg/OjF8Mnw0fDh8MTYpKT8pP3xkZWZhdWx0fGRvfGVsc2V8ZW51bXxleHRlcm58Zm9yfGdvdG98aWZ8aW1hZ2luYXJ5fGlubGluZXxwYWNrZWR8cGlwZXxyZWdpc3RlcnxyZXN0cmljdHxyZXR1cm58c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RydWN0fHN3aXRjaHx0eXBlZGVmfHVuaWZvcm18dW5pb258dW5zaWduZWR8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2wubGFuZyAob3BlbmNsLWNvbnN0KVxuXHRcdC8vIE1hdGggQ29uc3RhbnRzOiBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuQ0wvc2RrLzIuMS9kb2NzL21hbi94aHRtbC9tYXRoQ29uc3RhbnRzLmh0bWxcblx0XHQvLyBNYWNyb3MgYW5kIExpbWl0czogaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkNML3Nkay8yLjEvZG9jcy9tYW4veGh0bWwvbWFjcm9MaW1pdHMuaHRtbFxuXHRcdCdudW1iZXInOiAvKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1aGxdezAsNH0vaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J2NvbnN0YW50LW9wZW5jbC1rZXJuZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86Q0hBUl8oPzpCSVR8TUFYfE1JTil8Q0xLXyg/OkFERFJFU1NfKD86Q0xBTVAoPzpfVE9fRURHRSk/fE5PTkV8UkVQRUFUKXxGSUxURVJfKD86TElORUFSfE5FQVJFU1QpfCg/OkdMT0JBTHxMT0NBTClfTUVNX0ZFTkNFfE5PUk1BTElaRURfQ09PUkRTXyg/OkZBTFNFfFRSVUUpKXxDTF8oPzpCR1JBfCg/OkhBTEZfKT9GTE9BVHxJTlRFTlNJVFl8TFVNSU5BTkNFfEE/Uj9HP0I/W0F4XT98KD86KD86VU4pP1NJR05FRHxbVVNdTk9STSlfKD86SU5UKD86OHwxNnwzMikpfFVOT1JNXyg/OklOVF8xMDEwMTB8U0hPUlRfKD86NTU1fDU2NSkpKXwoPzpEQkx8RkxUfEhBTEYpXyg/OkRJR3xFUFNJTE9OfCg/Ok1BWHxNSU4pKD86KD86XzEwKT9fRVhQKT98TUFOVF9ESUcpfEZMVF9SQURJWHxIVUdFX1ZBTEY/fCg/OklOVHxMT05HfFNDSEFSfFNIUlQpXyg/Ok1BWHxNSU4pfElORklOSVRZfE1BWEZMT0FUfE1fKD86WzEyXV9QSXwyX1NRUlRQSXxFfExOKD86MnwxMCl8TE9HKD86MnwxMClFP3xQSSg/Ol9bMjRdKT98U1FSVCg/OjFfMnwyKSkoPzpfRnxfSCk/fE5BTnwoPzpVQ0hBUnxVSU5UfFVMT05HfFVTSFJUKV9NQVgpXFxiLyxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdvcGVuY2wnLCAnY2xhc3MtbmFtZScsIHtcblx0XHQvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuQ0wvc2RrLzIuMS9kb2NzL21hbi94aHRtbC9zY2FsYXJEYXRhVHlwZXMuaHRtbFxuXHRcdC8vIGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5DTC9zZGsvMi4xL2RvY3MvbWFuL3hodG1sL290aGVyRGF0YVR5cGVzLmh0bWxcblx0XHQnYnVpbHRpbi10eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/Ol9jbF8oPzpjb21tYW5kX3F1ZXVlfGNvbnRleHR8ZGV2aWNlX2lkfGV2ZW50fGtlcm5lbHxtZW18cGxhdGZvcm1faWR8cHJvZ3JhbXxzYW1wbGVyKXxjbF8oPzppbWFnZV9mb3JtYXR8bWVtX2ZlbmNlX2ZsYWdzKXxjbGtfZXZlbnRfdHxldmVudF90fGltYWdlKD86MWRfKD86YXJyYXlffGJ1ZmZlcl8pP3R8MmRfKD86YXJyYXlfKD86ZGVwdGhffG1zYWFfZGVwdGhffG1zYWFfKT98ZGVwdGhffG1zYWFfZGVwdGhffG1zYWFfKT90fDNkX3QpfGludHB0cl90fG5kcmFuZ2VfdHxwdHJkaWZmX3R8cXVldWVfdHxyZXNlcnZlX2lkX3R8c2FtcGxlcl90fHNpemVfdHx1aW50cHRyX3QpXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9XG5cdH0pO1xuXG5cdHZhciBhdHRyaWJ1dGVzID0ge1xuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2xfaG9zdC5sYW5nIChvcGVuY2wtdHlwZXMgYW5kIG9wZW5jbC1ob3N0KVxuXHRcdCd0eXBlLW9wZW5jbC1ob3N0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmNsXyg/OkdMZW51bXxHTGludHxHTHVpbnxhZGRyZXNzaW5nX21vZGV8Yml0ZmllbGR8Ym9vbHxidWZmZXJfY3JlYXRlX3R5cGV8YnVpbGRfc3RhdHVzfGNoYW5uZWxfKD86b3JkZXJ8dHlwZSl8KD86dT8oPzpjaGFyfGludHxsb25nfHNob3J0KXxkb3VibGV8ZmxvYXQpKD86MnwzfDR8OHwxNik/fGNvbW1hbmRfKD86cXVldWUoPzpfaW5mb3xfcHJvcGVydGllcyk/fHR5cGUpfGNvbnRleHQoPzpfaW5mb3xfcHJvcGVydGllcyk/fGRldmljZV8oPzpleGVjX2NhcGFiaWxpdGllc3xmcF9jb25maWd8aWR8aW5mb3xsb2NhbF9tZW1fdHlwZXxtZW1fY2FjaGVfdHlwZXx0eXBlKXwoPzpldmVudHxzYW1wbGVyKSg/Ol9pbmZvKT98ZmlsdGVyX21vZGV8aGFsZnxpbWFnZV9pbmZvfGtlcm5lbCg/Ol9pbmZvfF93b3JrX2dyb3VwX2luZm8pP3xtYXBfZmxhZ3N8bWVtKD86X2ZsYWdzfF9pbmZvfF9vYmplY3RfdHlwZSk/fHBsYXRmb3JtXyg/OmlkfGluZm8pfHByb2ZpbGluZ19pbmZvfHByb2dyYW0oPzpfYnVpbGRfaW5mb3xfaW5mbyk/KSlcXGIvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2Jvb2xlYW4tb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiQ0xfKD86RkFMU0V8VFJVRSlcXGIvLFxuXHRcdFx0YWxpYXM6ICdib29sZWFuJ1xuXHRcdH0sXG5cdFx0Ly8gRXh0cmFjdGVkIGZyb20gY2wuaCAoMi4wKSBhbmQgaHR0cDovL3N0cmVhbWNvbXB1dGluZy5ldS9kb3dubG9hZHMvP29wZW5jbF9ob3N0LmxhbmcgKG9wZW5jbC1jb25zdClcblx0XHQnY29uc3RhbnQtb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiQ0xfKD86QXxBQkdSfEFERFJFU1NfKD86Q0xBTVAoPzpfVE9fRURHRSk/fE1JUlJPUkVEX1JFUEVBVHxOT05FfFJFUEVBVCl8QVJHQnxCR1JBfEJMT0NLSU5HfEJVRkZFUl9DUkVBVEVfVFlQRV9SRUdJT058QlVJTERfKD86RVJST1J8SU5fUFJPR1JFU1N8Tk9ORXxQUk9HUkFNX0ZBSUxVUkV8U1VDQ0VTUyl8Q09NTUFORF8oPzpBQ1FVSVJFX0dMX09CSkVDVFN8QkFSUklFUnxDT1BZXyg/OkJVRkZFUig/Ol9SRUNUfF9UT19JTUFHRSk/fElNQUdFKD86X1RPX0JVRkZFUik/KXxGSUxMXyg/OkJVRkZFUnxJTUFHRSl8TUFQKD86X0JVRkZFUnxfSU1BR0UpfE1BUktFUnxNSUdSQVRFKD86X1NWTSk/X01FTV9PQkpFQ1RTfE5BVElWRV9LRVJORUx8TkRSQU5HRV9LRVJORUx8UkVBRF8oPzpCVUZGRVIoPzpfUkVDVCk/fElNQUdFKXxSRUxFQVNFX0dMX09CSkVDVFN8U1ZNXyg/OkZSRUV8TUFQfE1FTUNQWXxNRU1GSUxMfFVOTUFQKXxUQVNLfFVOTUFQX01FTV9PQkpFQ1R8VVNFUnxXUklURV8oPzpCVUZGRVIoPzpfUkVDVCk/fElNQUdFKSl8Q09NUElMRVJfTk9UX0FWQUlMQUJMRXxDT01QSUxFX1BST0dSQU1fRkFJTFVSRXxDT01QTEVURXxDT05URVhUXyg/OkRFVklDRVN8SU5URVJPUF9VU0VSX1NZTkN8TlVNX0RFVklDRVN8UExBVEZPUk18UFJPUEVSVElFU3xSRUZFUkVOQ0VfQ09VTlQpfERFUFRIKD86X1NURU5DSUwpP3xERVZJQ0VfKD86QUREUkVTU19CSVRTfEFGRklOSVRZX0RPTUFJTl8oPzpMWzEtNF1fQ0FDSEV8TkVYVF9QQVJUSVRJT05BQkxFfE5VTUEpfEFWQUlMQUJMRXxCVUlMVF9JTl9LRVJORUxTfENPTVBJTEVSX0FWQUlMQUJMRXxET1VCTEVfRlBfQ09ORklHfEVORElBTl9MSVRUTEV8RVJST1JfQ09SUkVDVElPTl9TVVBQT1JUfEVYRUNVVElPTl9DQVBBQklMSVRJRVN8RVhURU5TSU9OU3xHTE9CQUxfKD86TUVNXyg/OkNBQ0hFTElORV9TSVpFfENBQ0hFX1NJWkV8Q0FDSEVfVFlQRXxTSVpFKXxWQVJJQUJMRV9QUkVGRVJSRURfVE9UQUxfU0laRSl8SE9TVF9VTklGSUVEX01FTU9SWXxJTF9WRVJTSU9OfElNQUdFKD86MkRfTUFYXyg/OkhFSUdIVHxXSURUSCl8M0RfTUFYXyg/OkRFUFRIfEhFSUdIVHxXSURUSCl8X0JBU0VfQUREUkVTU19BTElHTk1FTlR8X01BWF9BUlJBWV9TSVpFfF9NQVhfQlVGRkVSX1NJWkV8X1BJVENIX0FMSUdOTUVOVHxfU1VQUE9SVCl8TElOS0VSX0FWQUlMQUJMRXxMT0NBTF9NRU1fU0laRXxMT0NBTF9NRU1fVFlQRXxNQVhfKD86Q0xPQ0tfRlJFUVVFTkNZfENPTVBVVEVfVU5JVFN8Q09OU1RBTlRfQVJHU3xDT05TVEFOVF9CVUZGRVJfU0laRXxHTE9CQUxfVkFSSUFCTEVfU0laRXxNRU1fQUxMT0NfU0laRXxOVU1fU1VCX0dST1VQU3xPTl9ERVZJQ0VfKD86RVZFTlRTfFFVRVVFUyl8UEFSQU1FVEVSX1NJWkV8UElQRV9BUkdTfFJFQURfSU1BR0VfQVJHU3xSRUFEX1dSSVRFX0lNQUdFX0FSR1N8U0FNUExFUlN8V09SS19HUk9VUF9TSVpFfFdPUktfSVRFTV9ESU1FTlNJT05TfFdPUktfSVRFTV9TSVpFU3xXUklURV9JTUFHRV9BUkdTKXxNRU1fQkFTRV9BRERSX0FMSUdOfE1JTl9EQVRBX1RZUEVfQUxJR05fU0laRXxOQU1FfE5BVElWRV9WRUNUT1JfV0lEVEhfKD86Q0hBUnxET1VCTEV8RkxPQVR8SEFMRnxJTlR8TE9OR3xTSE9SVCl8Tk9UXyg/OkFWQUlMQUJMRXxGT1VORCl8T1BFTkNMX0NfVkVSU0lPTnxQQVJFTlRfREVWSUNFfFBBUlRJVElPTl8oPzpBRkZJTklUWV9ET01BSU58QllfQUZGSU5JVFlfRE9NQUlOfEJZX0NPVU5UU3xCWV9DT1VOVFNfTElTVF9FTkR8RVFVQUxMWXxGQUlMRUR8TUFYX1NVQl9ERVZJQ0VTfFBST1BFUlRJRVN8VFlQRSl8UElQRV9NQVhfKD86QUNUSVZFX1JFU0VSVkFUSU9OU3xQQUNLRVRfU0laRSl8UExBVEZPUk18UFJFRkVSUkVEXyg/OkdMT0JBTF9BVE9NSUNfQUxJR05NRU5UfElOVEVST1BfVVNFUl9TWU5DfExPQ0FMX0FUT01JQ19BTElHTk1FTlR8UExBVEZPUk1fQVRPTUlDX0FMSUdOTUVOVHxWRUNUT1JfV0lEVEhfKD86Q0hBUnxET1VCTEV8RkxPQVR8SEFMRnxJTlR8TE9OR3xTSE9SVCkpfFBSSU5URl9CVUZGRVJfU0laRXxQUk9GSUxFfFBST0ZJTElOR19USU1FUl9SRVNPTFVUSU9OfFFVRVVFXyg/Ok9OXyg/OkRFVklDRV8oPzpNQVhfU0laRXxQUkVGRVJSRURfU0laRXxQUk9QRVJUSUVTKXxIT1NUX1BST1BFUlRJRVMpfFBST1BFUlRJRVMpfFJFRkVSRU5DRV9DT1VOVHxTSU5HTEVfRlBfQ09ORklHfFNVQl9HUk9VUF9JTkRFUEVOREVOVF9GT1JXQVJEX1BST0dSRVNTfFNWTV8oPzpBVE9NSUNTfENBUEFCSUxJVElFU3xDT0FSU0VfR1JBSU5fQlVGRkVSfEZJTkVfR1JBSU5fQlVGRkVSfEZJTkVfR1JBSU5fU1lTVEVNKXxUWVBFKD86X0FDQ0VMRVJBVE9SfF9BTEx8X0NQVXxfQ1VTVE9NfF9ERUZBVUxUfF9HUFUpP3xWRU5ET1IoPzpfSUQpP3xWRVJTSU9OKXxEUklWRVJfVkVSU0lPTnxFVkVOVF8oPzpDT01NQU5EXyg/OkVYRUNVVElPTl9TVEFUVVN8UVVFVUV8VFlQRSl8Q09OVEVYVHxSRUZFUkVOQ0VfQ09VTlQpfEVYRUNfKD86S0VSTkVMfE5BVElWRV9LRVJORUx8U1RBVFVTX0VSUk9SX0ZPUl9FVkVOVFNfSU5fV0FJVF9MSVNUKXxGSUxURVJfKD86TElORUFSfE5FQVJFU1QpfEZMT0FUfEZQXyg/OkNPUlJFQ1RMWV9ST1VOREVEX0RJVklERV9TUVJUfERFTk9STXxGTUF8SU5GX05BTnxST1VORF9UT19JTkZ8Uk9VTkRfVE9fTkVBUkVTVHxST1VORF9UT19aRVJPfFNPRlRfRkxPQVQpfEdMT0JBTHxIQUxGX0ZMT0FUfElNQUdFXyg/OkFSUkFZX1NJWkV8QlVGRkVSfERFUFRIfEVMRU1FTlRfU0laRXxGT1JNQVR8Rk9STUFUX01JU01BVENIfEZPUk1BVF9OT1RfU1VQUE9SVEVEfEhFSUdIVHxOVU1fTUlQX0xFVkVMU3xOVU1fU0FNUExFU3xST1dfUElUQ0h8U0xJQ0VfUElUQ0h8V0lEVEgpfElOVEVOU0lUWXxJTlZBTElEXyg/OkFSR19JTkRFWHxBUkdfU0laRXxBUkdfVkFMVUV8QklOQVJZfEJVRkZFUl9TSVpFfEJVSUxEX09QVElPTlN8Q09NTUFORF9RVUVVRXxDT01QSUxFUl9PUFRJT05TfENPTlRFWFR8REVWSUNFfERFVklDRV9QQVJUSVRJT05fQ09VTlR8REVWSUNFX1FVRVVFfERFVklDRV9UWVBFfEVWRU5UfEVWRU5UX1dBSVRfTElTVHxHTE9CQUxfT0ZGU0VUfEdMT0JBTF9XT1JLX1NJWkV8R0xfT0JKRUNUfEhPU1RfUFRSfElNQUdFX0RFU0NSSVBUT1J8SU1BR0VfRk9STUFUX0RFU0NSSVBUT1J8SU1BR0VfU0laRXxLRVJORUx8S0VSTkVMX0FSR1N8S0VSTkVMX0RFRklOSVRJT058S0VSTkVMX05BTUV8TElOS0VSX09QVElPTlN8TUVNX09CSkVDVHxNSVBfTEVWRUx8T1BFUkFUSU9OfFBJUEVfU0laRXxQTEFURk9STXxQUk9HUkFNfFBST0dSQU1fRVhFQ1VUQUJMRXxQUk9QRVJUWXxRVUVVRV9QUk9QRVJUSUVTfFNBTVBMRVJ8VkFMVUV8V09SS19ESU1FTlNJT058V09SS19HUk9VUF9TSVpFfFdPUktfSVRFTV9TSVpFKXxLRVJORUxfKD86QVJHXyg/OkFDQ0VTU18oPzpOT05FfFFVQUxJRklFUnxSRUFEX09OTFl8UkVBRF9XUklURXxXUklURV9PTkxZKXxBRERSRVNTXyg/OkNPTlNUQU5UfEdMT0JBTHxMT0NBTHxQUklWQVRFfFFVQUxJRklFUil8SU5GT19OT1RfQVZBSUxBQkxFfE5BTUV8VFlQRV8oPzpDT05TVHxOQU1FfE5PTkV8UElQRXxRVUFMSUZJRVJ8UkVTVFJJQ1R8Vk9MQVRJTEUpKXxBVFRSSUJVVEVTfENPTVBJTEVfTlVNX1NVQl9HUk9VUFN8Q09NUElMRV9XT1JLX0dST1VQX1NJWkV8Q09OVEVYVHxFWEVDX0lORk9fU1ZNX0ZJTkVfR1JBSU5fU1lTVEVNfEVYRUNfSU5GT19TVk1fUFRSU3xGVU5DVElPTl9OQU1FfEdMT0JBTF9XT1JLX1NJWkV8TE9DQUxfTUVNX1NJWkV8TE9DQUxfU0laRV9GT1JfU1VCX0dST1VQX0NPVU5UfE1BWF9OVU1fU1VCX0dST1VQU3xNQVhfU1VCX0dST1VQX1NJWkVfRk9SX05EUkFOR0V8TlVNX0FSR1N8UFJFRkVSUkVEX1dPUktfR1JPVVBfU0laRV9NVUxUSVBMRXxQUklWQVRFX01FTV9TSVpFfFBST0dSQU18UkVGRVJFTkNFX0NPVU5UfFNVQl9HUk9VUF9DT1VOVF9GT1JfTkRSQU5HRXxXT1JLX0dST1VQX1NJWkUpfExJTktFUl9OT1RfQVZBSUxBQkxFfExJTktfUFJPR1JBTV9GQUlMVVJFfExPQ0FMfExVTUlOQU5DRXxNQVBfKD86RkFJTFVSRXxSRUFEfFdSSVRFfFdSSVRFX0lOVkFMSURBVEVfUkVHSU9OKXxNRU1fKD86QUxMT0NfSE9TVF9QVFJ8QVNTT0NJQVRFRF9NRU1PQkpFQ1R8Q09OVEVYVHxDT1BZX0hPU1RfUFRSfENPUFlfT1ZFUkxBUHxGTEFHU3xIT1NUX05PX0FDQ0VTU3xIT1NUX1BUUnxIT1NUX1JFQURfT05MWXxIT1NUX1dSSVRFX09OTFl8S0VSTkVMX1JFQURfQU5EX1dSSVRFfE1BUF9DT1VOVHxPQkpFQ1RfKD86QUxMT0NBVElPTl9GQUlMVVJFfEJVRkZFUnxJTUFHRTFEfElNQUdFMURfQVJSQVl8SU1BR0UxRF9CVUZGRVJ8SU1BR0UyRHxJTUFHRTJEX0FSUkFZfElNQUdFM0R8UElQRSl8T0ZGU0VUfFJFQURfT05MWXxSRUFEX1dSSVRFfFJFRkVSRU5DRV9DT1VOVHxTSVpFfFNWTV9BVE9NSUNTfFNWTV9GSU5FX0dSQUlOX0JVRkZFUnxUWVBFfFVTRVNfU1ZNX1BPSU5URVJ8VVNFX0hPU1RfUFRSfFdSSVRFX09OTFkpfE1JR1JBVEVfTUVNX09CSkVDVF8oPzpDT05URU5UX1VOREVGSU5FRHxIT1NUKXxNSVNBTElHTkVEX1NVQl9CVUZGRVJfT0ZGU0VUfE5PTkV8Tk9OX0JMT0NLSU5HfE9VVF9PRl8oPzpIT1NUX01FTU9SWXxSRVNPVVJDRVMpfFBJUEVfKD86TUFYX1BBQ0tFVFN8UEFDS0VUX1NJWkUpfFBMQVRGT1JNXyg/OkVYVEVOU0lPTlN8SE9TVF9USU1FUl9SRVNPTFVUSU9OfE5BTUV8UFJPRklMRXxWRU5ET1J8VkVSU0lPTil8UFJPRklMSU5HXyg/OkNPTU1BTkRfKD86Q09NUExFVEV8RU5EfFFVRVVFRHxTVEFSVHxTVUJNSVQpfElORk9fTk9UX0FWQUlMQUJMRSl8UFJPR1JBTV8oPzpCSU5BUklFU3xCSU5BUllfU0laRVN8QklOQVJZX1RZUEUoPzpfQ09NUElMRURfT0JKRUNUfF9FWEVDVVRBQkxFfF9MSUJSQVJZfF9OT05FKT98QlVJTERfKD86R0xPQkFMX1ZBUklBQkxFX1RPVEFMX1NJWkV8TE9HfE9QVElPTlN8U1RBVFVTKXxDT05URVhUfERFVklDRVN8SUx8S0VSTkVMX05BTUVTfE5VTV9ERVZJQ0VTfE5VTV9LRVJORUxTfFJFRkVSRU5DRV9DT1VOVHxTT1VSQ0UpfFFVRVVFRHxRVUVVRV8oPzpDT05URVhUfERFVklDRXxERVZJQ0VfREVGQVVMVHxPTl9ERVZJQ0V8T05fREVWSUNFX0RFRkFVTFR8T1VUX09GX09SREVSX0VYRUNfTU9ERV9FTkFCTEV8UFJPRklMSU5HX0VOQUJMRXxQUk9QRVJUSUVTfFJFRkVSRU5DRV9DT1VOVHxTSVpFKXxSfFJBfFJFQURfKD86T05MWXxXUklURSlfQ0FDSEV8Ukd8UkdCfFJHQkF8UkdCeHxSR3h8UlVOTklOR3xSeHxTQU1QTEVSXyg/OkFERFJFU1NJTkdfTU9ERXxDT05URVhUfEZJTFRFUl9NT0RFfExPRF9NQVh8TE9EX01JTnxNSVBfRklMVEVSX01PREV8Tk9STUFMSVpFRF9DT09SRFN8UkVGRVJFTkNFX0NPVU5UKXwoPzpVTik/U0lHTkVEX0lOVCg/Ojh8MTZ8MzIpfFNOT1JNX0lOVCg/Ojh8MTYpfFNVQk1JVFRFRHxTVUNDRVNTfFVOT1JNX0lOVCg/Ojh8MTZ8MjR8XzEwMTAxMHxfMTAxMDEwXzIpfFVOT1JNX1NIT1JUXyg/OjU1NXw1NjUpfFZFUlNJT05fKD86MV8wfDFfMXwxXzJ8Ml8wfDJfMSl8c0JHUkF8c1JHQnxzUkdCQXxzUkdCeClcXGIvLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGNsLmggKDIuMCkgYW5kIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2xfaG9zdC5sYW5nIChvcGVuY2wtaG9zdClcblx0XHQnZnVuY3Rpb24tb3BlbmNsLWhvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiY2woPzpCdWlsZFByb2dyYW18Q2xvbmVLZXJuZWx8Q29tcGlsZVByb2dyYW18Q3JlYXRlKD86QnVmZmVyfENvbW1hbmRRdWV1ZSg/OldpdGhQcm9wZXJ0aWVzKT98Q29udGV4dHxDb250ZXh0RnJvbVR5cGV8SW1hZ2V8SW1hZ2UyRHxJbWFnZTNEfEtlcm5lbHxLZXJuZWxzSW5Qcm9ncmFtfFBpcGV8UHJvZ3JhbVdpdGgoPzpCaW5hcnl8QnVpbHRJbktlcm5lbHN8SUx8U291cmNlKXxTYW1wbGVyfFNhbXBsZXJXaXRoUHJvcGVydGllc3xTdWJCdWZmZXJ8U3ViRGV2aWNlc3xVc2VyRXZlbnQpfEVucXVldWUoPzooPzpCYXJyaWVyfE1hcmtlcikoPzpXaXRoV2FpdExpc3QpP3xDb3B5KD86QnVmZmVyKD86UmVjdHxUb0ltYWdlKT98SW1hZ2UoPzpUb0J1ZmZlcik/KXwoPzpGaWxsfE1hcCkoPzpCdWZmZXJ8SW1hZ2UpfE1pZ3JhdGVNZW1PYmplY3RzfE5EUmFuZ2VLZXJuZWx8TmF0aXZlS2VybmVsfCg/OlJlYWR8V3JpdGUpKD86QnVmZmVyKD86UmVjdCk/fEltYWdlKXxTVk0oPzpGcmVlfE1hcHxNZW1GaWxsfE1lbWNweXxNaWdyYXRlTWVtfFVubWFwKXxUYXNrfFVubWFwTWVtT2JqZWN0fFdhaXRGb3JFdmVudHMpfEZpbmlzaHxGbHVzaHxHZXQoPzpDb21tYW5kUXVldWVJbmZvfENvbnRleHRJbmZvfERldmljZSg/OkFuZEhvc3RUaW1lcnxJRHN8SW5mbyl8RXZlbnQoPzpQcm9maWxpbmcpP0luZm98RXh0ZW5zaW9uRnVuY3Rpb25BZGRyZXNzKD86Rm9yUGxhdGZvcm0pP3xIb3N0VGltZXJ8SW1hZ2VJbmZvfEtlcm5lbCg/OkFyZ0luZm98SW5mb3xTdWJHcm91cEluZm98V29ya0dyb3VwSW5mbyl8TWVtT2JqZWN0SW5mb3xQaXBlSW5mb3xQbGF0Zm9ybSg/OklEc3xJbmZvKXxQcm9ncmFtKD86QnVpbGQpP0luZm98U2FtcGxlckluZm98U3VwcG9ydGVkSW1hZ2VGb3JtYXRzKXxMaW5rUHJvZ3JhbXwoPzpSZWxlYXNlfFJldGFpbikoPzpDb21tYW5kUXVldWV8Q29udGV4dHxEZXZpY2V8RXZlbnR8S2VybmVsfE1lbU9iamVjdHxQcm9ncmFtfFNhbXBsZXIpfFNWTSg/OkFsbG9jfEZyZWUpfFNldCg/OkNvbW1hbmRRdWV1ZVByb3BlcnR5fERlZmF1bHREZXZpY2VDb21tYW5kUXVldWV8RXZlbnRDYWxsYmFja3xLZXJuZWx8S2VybmVsKD86QXJnKD86U1ZNUG9pbnRlcik/fEV4ZWNJbmZvKXxNZW1PYmplY3REZXN0cnVjdG9yQ2FsbGJhY2t8VXNlckV2ZW50U3RhdHVzKXxVbmxvYWQoPzpQbGF0Zm9ybSk/Q29tcGlsZXJ8V2FpdEZvckV2ZW50cylcXGIvLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9XG5cdH07XG5cblx0LyogT3BlbkNMIGhvc3QgQVBJICovXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2MnLCAna2V5d29yZCcsIGF0dHJpYnV0ZXMpO1xuXG5cdC8vIEMrKyBpbmNsdWRlcyBldmVyeXRoaW5nIGZyb20gdGhlIE9wZW5DTCBDIGhvc3QgQVBJIHBsdXMgdGhlIGNsYXNzZXMgZGVmaW5lZCBpbiBjbDIuaFxuXHRpZiAoUHJpc20ubGFuZ3VhZ2VzLmNwcCkge1xuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGRveHlnZW4gY2xhc3MgbGlzdCBodHRwOi8vZ2l0aHViLmtocm9ub3Mub3JnL09wZW5DTC1DTEhQUC9hbm5vdGF0ZWQuaHRtbFxuXHRcdGF0dHJpYnV0ZXNbJ3R5cGUtb3BlbmNsLWhvc3QtY3BwJ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86QnVmZmVyfEJ1ZmZlckdMfEJ1ZmZlclJlbmRlckdMfENvbW1hbmRRdWV1ZXxDb250ZXh0fERldmljZXxEZXZpY2VDb21tYW5kUXVldWV8RW5xdWV1ZUFyZ3N8RXZlbnR8SW1hZ2V8SW1hZ2UxRHxJbWFnZTFEQXJyYXl8SW1hZ2UxREJ1ZmZlcnxJbWFnZTJEfEltYWdlMkRBcnJheXxJbWFnZTJER0x8SW1hZ2UzRHxJbWFnZTNER0x8SW1hZ2VGb3JtYXR8SW1hZ2VHTHxLZXJuZWx8S2VybmVsRnVuY3RvcnxMb2NhbFNwYWNlQXJnfE1lbW9yeXxORFJhbmdlfFBpcGV8UGxhdGZvcm18UHJvZ3JhbXxTVk1BbGxvY2F0b3J8U1ZNVHJhaXRBdG9taWN8U1ZNVHJhaXRDb2Fyc2V8U1ZNVHJhaXRGaW5lfFNWTVRyYWl0UmVhZE9ubHl8U1ZNVHJhaXRSZWFkV3JpdGV8U1ZNVHJhaXRXcml0ZU9ubHl8U2FtcGxlcnxVc2VyRXZlbnQpXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9O1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ2tleXdvcmQnLCBhdHRyaWJ1dGVzKTtcblx0fVxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3Fpc2tpdC5naXRodWIuaW8vb3BlbnFhc20vZ3JhbW1hci9pbmRleC5odG1sXG5cblByaXNtLmxhbmd1YWdlcy5vcGVucWFzbSA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcblxcdF0qXCJ8J1teJ1xcclxcblxcdF0qJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86Q1h8T1BFTlFBU018VXxiYXJyaWVyfGJveGFzfGJveHRvfGJyZWFrfGNvbnN0fGNvbnRpbnVlfGN0cmx8ZGVmfGRlZmNhbHxkZWZjYWxncmFtbWFyfGRlbGF5fGVsc2V8ZW5kfGZvcnxnYXRlfGdwaGFzZXxpZnxpbnxpbmNsdWRlfGludnxrZXJuZWx8bGVuZ3Rob2Z8bGV0fG1lYXN1cmV8cG93fHJlc2V0fHJldHVybnxyb3Rhcnl8c3RyZXRjaGluZnx3aGlsZSlcXGJ8I3ByYWdtYVxcYi8sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OmFuZ2xlfGJpdHxib29sfGNyZWd8Zml4ZWR8ZmxvYXR8aW50fGxlbmd0aHxxcmVnfHF1Yml0fHN0cmV0Y2h8dWludClcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86Y29zfGV4cHxsbnxwb3Bjb3VudHxyb3RsfHJvdHJ8c2lufHNxcnR8dGFuKVxcYig/PVxccypcXCgpLyxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86ZXVsZXJ8cGl8dGF1KVxcYnxcdTAzQzB8XHVEODM1XHVERjBGfFx1MjEwNy8sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteLlxcdyRdKSg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8oPzpkdHxuc3x1c3xcdTAwQjVzfG1zfHMpPy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLy0+fD4+PT98PDw9P3wmJnxcXHxcXHx8XFwrXFwrfC0tfFshPTw+Jnx+XitcXC0qLyVdPT98QC8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXTssOi5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFhc20gPSBQcmlzbS5sYW5ndWFnZXMub3BlbnFhc207XG5cblByaXNtLmxhbmd1YWdlcy5veiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98JS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXF18XFxcXFtcXHNcXFNdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdhdG9tJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXCR8XFxbXFxdfFxcYig/Ol98YXR8YXR0cnxjYXNlfGNhdGNofGNob2ljZXxjbGFzc3xjb25kfGRlY2xhcmV8ZGVmaW5lfGRpc3xlbHNlKD86Y2FzZXxpZik/fGVuZHxleHBvcnR8ZmFpbHxmYWxzZXxmZWF0fGZpbmFsbHl8ZnJvbXxmdW58ZnVuY3RvcnxpZnxpbXBvcnR8aW58bG9jYWx8bG9ja3xtZXRofG5pbHxub3R8b2Z8b3J8cHJlcGFyZXxwcm9jfHByb3B8cmFpc2V8cmVxdWlyZXxzZWxmfHNraXB8dGhlbnx0aHJlYWR8dHJ1ZXx0cnl8dW5pdClcXGIvLFxuXHQnZnVuY3Rpb24nOiBbXG5cdFx0L1xcYlthLXpdW0EtWmEtelxcZF0qKD89XFwoKS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHspW0EtWl1bQS1aYS16XFxkXSpcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J251bWJlcic6IC9cXGIoPzowW2J4XVtcXGRhLWZdK3xcXGQrKD86XFwuXFxkKik/KD86ZX4/XFxkKyk/KVxcYnwmKD86W15cXFxcXXxcXFxcKD86XFxkezN9fC4pKS9pLFxuXHQndmFyaWFibGUnOiAvYCg/OlteYFxcXFxdfFxcXFwuKStgLyxcblx0J2F0dHItbmFtZSc6IC9cXGJcXHcrKD89WyBcXHRdKjooPyFbOj1dKSkvLFxuXHQnb3BlcmF0b3InOiAvOig/Oj18Ojo/KXw8Wy06PV0/fD0oPzo9fDw/Oj8pfD49Pzo/fFxcXFw9Oj98ISE/fFt8IytcXC0qXFwvLH5eQF18XFxiKD86YW5kdGhlbnxkaXZ8bW9kfG9yZWxzZSlcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXSgpe30uOjs/XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wYXJpZ3AgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFxcXFxcXFwuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIFBBUkkvR1AgZG9lcyBub3QgY2FyZSBhYm91dCB3aGl0ZSBzcGFjZXMgYXQgYWxsXG5cdC8vIHNvIGxldCdzIHByb2Nlc3MgdGhlIGtleXdvcmRzIHRvIGJ1aWxkIGFuIGFwcHJvcHJpYXRlIHJlZ2V4cFxuXHQvLyAoZS5nLiBcImIgKnIgKmUgKmEgKmtcIiwgZXRjLilcblx0J2tleXdvcmQnOiAoZnVuY3Rpb24gKCkge1xuXHRcdHZhciBrZXl3b3JkcyA9IFtcblx0XHRcdCdicmVha3BvaW50JywgJ2JyZWFrJywgJ2RiZ19kb3duJywgJ2RiZ19lcnInLCAnZGJnX3VwJywgJ2RiZ194Jyxcblx0XHRcdCdmb3Jjb21wb3NpdGUnLCAnZm9yZGl2JywgJ2ZvcmVsbCcsICdmb3JwYXJ0JywgJ2ZvcnByaW1lJyxcblx0XHRcdCdmb3JzdGVwJywgJ2ZvcnN1Ymdyb3VwJywgJ2ZvcnZlYycsICdmb3InLCAnaWZlcnInLCAnaWYnLFxuXHRcdFx0J2xvY2FsJywgJ215JywgJ25leHQnLCAncmV0dXJuJywgJ3VudGlsJywgJ3doaWxlJ1xuXHRcdF07XG5cdFx0a2V5d29yZHMgPSBrZXl3b3Jkcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcblx0XHRcdHJldHVybiBrZXl3b3JkLnNwbGl0KCcnKS5qb2luKCcgKicpO1xuXHRcdH0pLmpvaW4oJ3wnKTtcblx0XHRyZXR1cm4gUmVnRXhwKCdcXFxcYig/OicgKyBrZXl3b3JkcyArICcpXFxcXGInKTtcblx0fSgpKSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdyg/OltcXHcgXSpcXHcpPyg/PSAqXFwoKS8sXG5cdCdudW1iZXInOiB7XG5cdFx0Ly8gVGhlIGxvb2tiZWhpbmQgYW5kIHRoZSBuZWdhdGl2ZSBsb29rYWhlYWQgcHJldmVudCBmcm9tIGJyZWFraW5nIHRoZSAuLiBvcGVyYXRvclxuXHRcdHBhdHRlcm46IC8oKD86XFwuICpcXC4gKik/KSg/OlxcYlxcZCg/OiAqXFxkKSooPzogKig/IVxcLiAqXFwuKVxcLig/OiAqXFxkKSopP3xcXC4gKlxcZCg/OiAqXFxkKSopKD86ICplICooPzpbKy1dICopP1xcZCg/OiAqXFxkKSopPy9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1xcLiAqXFwufFsqXFwvIV0oPzogKj0pP3wlKD86ICo9fCg/OiAqIyk/KD86IConKSopP3xcXCsoPzogKlsrPV0pP3wtKD86ICpbLT0+XSk/fDwoPzogKj58KD86ICo8KT8oPzogKj0pPyk/fD4oPzogKj4pPyg/OiAqPSk/fD0oPzogKj0pezAsMn18XFxcXCg/OiAqXFwvKT8oPzogKj0pP3wmKD86IComKT98XFx8ICpcXHx8Wycjfl5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fSgpLiw6O3xdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBwYXJzZXIgPSBQcmlzbS5sYW5ndWFnZXMucGFyc2VyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXl0pKD86XFxeKD86Y2FzZXxldmFsfGZvcnxpZnxzd2l0Y2h8dGhyb3cpXFxifEAoPzpCQVNFfENMQVNTfEdFVCg/Ol9ERUZBVUxUKT98T1BUSU9OU3xTRVRfREVGQVVMVHxVU0UpXFxiKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15eXSlcXEJcXCQoPzpcXHcrfCg/PVsue10pKSg/Oig/OlxcLnw6Oj8pXFx3KykqKD86XFwufDo6Pyk/Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLnw6Ky9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXl5dKVxcQltAXl1cXHcrKD86KD86XFwufDo6PylcXHcrKSooPzpcXC58Ojo/KT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5AKSg/OkdFVF98U0VUXykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLnw6Ky9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdlc2NhcGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxeKD86WyReO0AoKVxcW1xcXXt9XCInOl18I1thLWZcXGRdKikvaSxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fTtdL1xuXHR9KTtcblxuXHRwYXJzZXIgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwYXJzZXInLCAna2V5d29yZCcsIHtcblx0XHQncGFyc2VyLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0Ly8gQWxsb3cgZm9yIDMgbGV2ZWxzIG9mIGRlcHRoXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15eXSlcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXCgoPzpbXigpXSkqXFwpKSpcXCkpKlxcKS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFteXl0pKFtcIiddKSg/Oig/IVxcMilbXl5dfFxcXltcXHNcXFNdKSpcXDIvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBwYXJzZXIua2V5d29yZCxcblx0XHRcdFx0J3ZhcmlhYmxlJzogcGFyc2VyLnZhcmlhYmxlLFxuXHRcdFx0XHQnZnVuY3Rpb24nOiBwYXJzZXIuZnVuY3Rpb24sXG5cdFx0XHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHRcdFx0J251bWJlcic6IC9cXGIoPzoweFthLWZcXGRdK3xcXGQrKD86XFwuXFxkKik/KD86ZVsrLV0/XFxkKyk/KVxcYi9pLFxuXHRcdFx0XHQnZXNjYXBlJzogcGFyc2VyLmVzY2FwZSxcblx0XHRcdFx0J29wZXJhdG9yJzogL1t+KypcXC9cXFxcJV18ISg/OlxcfFxcfD98PSk/fCYmP3xcXHxcXHw/fD09fDxbPD1dP3w+Wz49XT98LVtmZF0/fFxcYig/OmRlZnxlcXxnZXxndHxpbnxpc3xsZXxsdHxuZSlcXGIvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwYXJzZXIucHVuY3R1YXRpb25cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnZXhwcmVzc2lvbic6IHBhcnNlci5leHByZXNzaW9uLFxuXHRcdCdrZXl3b3JkJzogcGFyc2VyLmtleXdvcmQsXG5cdFx0J3ZhcmlhYmxlJzogcGFyc2VyLnZhcmlhYmxlLFxuXHRcdCdmdW5jdGlvbic6IHBhcnNlci5mdW5jdGlvbixcblx0XHQnZXNjYXBlJzogcGFyc2VyLmVzY2FwZSxcblx0XHQncGFyc2VyLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogcGFyc2VyLnB1bmN0dWF0aW9uLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0sIHBhcnNlclsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10pO1xuXG59KFByaXNtKSk7XG5cbi8vIEJhc2VkIG9uIEZyZWUgUGFzY2FsXG5cbi8qIFRPRE9cblx0U3VwcG9ydCBpbmxpbmUgYXNtID9cbiovXG5cblByaXNtLmxhbmd1YWdlcy5wYXNjYWwgPSB7XG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xce1xcJFtcXHNcXFNdKj9cXH0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogWydtYXJjbycsICdwcm9wZXJ0eSddXG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXChcXCpbXFxzXFxTXSo/XFwqXFwpfFxce1tcXHNcXFNdKj9cXH18XFwvXFwvLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzonKD86Jyd8W14nXFxyXFxuXSkqJyg/IScpfCNbJiQlXT9bYS1mXFxkXSspK3xcXF5bYS16XS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYXNtJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiYXNtXFxiKVtcXHNcXFNdKz8oPz1cXGJlbmRcXHMqWztbXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdC8vIFR1cmJvIFBhc2NhbFxuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86YWJzb2x1dGV8YXJyYXl8YXNtfGJlZ2lufGNhc2V8Y29uc3R8Y29uc3RydWN0b3J8ZGVzdHJ1Y3Rvcnxkb3xkb3dudG98ZWxzZXxlbmR8ZmlsZXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbXBsZW1lbnRhdGlvbnxpbmhlcml0ZWR8aW5saW5lfGludGVyZmFjZXxsYWJlbHxuaWx8b2JqZWN0fG9mfG9wZXJhdG9yfHBhY2tlZHxwcm9jZWR1cmV8cHJvZ3JhbXxyZWNvcmR8cmVpbnRyb2R1Y2V8cmVwZWF0fHNlbGZ8c2V0fHN0cmluZ3x0aGVufHRvfHR5cGV8dW5pdHx1bnRpbHx1c2VzfHZhcnx3aGlsZXx3aXRoKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gRnJlZSBQYXNjYWxcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmRpc3Bvc2V8ZXhpdHxmYWxzZXxuZXd8dHJ1ZSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIE9iamVjdCBQYXNjYWxcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmNsYXNzfGRpc3BpbnRlcmZhY2V8ZXhjZXB0fGV4cG9ydHN8ZmluYWxpemF0aW9ufGZpbmFsbHl8aW5pdGlhbGl6YXRpb258aW5saW5lfGxpYnJhcnl8b258b3V0fHBhY2tlZHxwcm9wZXJ0eXxyYWlzZXxyZXNvdXJjZXN0cmluZ3x0aHJlYWR2YXJ8dHJ5KVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gTW9kaWZpZXJzXG5cdFx0XHRwYXR0ZXJuOiAvKF58W14mXSlcXGIoPzphYnNvbHV0ZXxhYnN0cmFjdHxhbGlhc3xhc3NlbWJsZXJ8Yml0cGFja2VkfGJyZWFrfGNkZWNsfGNvbnRpbnVlfGNwcGRlY2x8Y3ZhcnxkZWZhdWx0fGRlcHJlY2F0ZWR8ZHluYW1pY3xlbnVtZXJhdG9yfGV4cGVyaW1lbnRhbHxleHBvcnR8ZXh0ZXJuYWx8ZmFyfGZhcjE2fGZvcndhcmR8Z2VuZXJpY3xoZWxwZXJ8aW1wbGVtZW50c3xpbmRleHxpbnRlcnJ1cHR8aW9jaGVja3N8bG9jYWx8bWVzc2FnZXxuYW1lfG5lYXJ8bm9kZWZhdWx0fG5vcmV0dXJufG5vc3RhY2tmcmFtZXxvbGRmcGNjYWxsfG90aGVyd2lzZXxvdmVybG9hZHxvdmVycmlkZXxwYXNjYWx8cGxhdGZvcm18cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHB1Ymxpc2hlZHxyZWFkfHJlZ2lzdGVyfHJlaW50cm9kdWNlfHJlc3VsdHxzYWZlY2FsbHxzYXZlcmVnaXN0ZXJzfHNvZnRmbG9hdHxzcGVjaWFsaXplfHN0YXRpY3xzdGRjYWxsfHN0b3JlZHxzdHJpY3R8dW5hbGlnbmVkfHVuaW1wbGVtZW50ZWR8dmFyYXJnc3x2aXJ0dWFsfHdyaXRlKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J251bWJlcic6IFtcblx0XHQvLyBIZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeVxuXHRcdC8oPzpbJiVdXFxkK3xcXCRbYS1mXFxkXSspL2ksXG5cdFx0Ly8gRGVjaW1hbFxuXHRcdC9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/L2lcblx0XSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9cXC5cXC58XFwqXFwqfDo9fDxbPD0+XT98Pls+PV0/fFsrXFwtKlxcL109P3xbQF49XS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86YW5kfGFzfGRpdnxleGNsdWRlfGlufGluY2x1ZGV8aXN8bW9kfG5vdHxvcnxzaGx8c2hyfHhvcilcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1xcKFxcLnxcXC5cXCl8WygpXFxbXFxdOjssLl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucGFzY2FsLmFzbS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdwYXNjYWwnLCB7XG5cdCdhc20nOiB1bmRlZmluZWQsXG5cdCdrZXl3b3JkJzogdW5kZWZpbmVkLFxuXHQnb3BlcmF0b3InOiB1bmRlZmluZWRcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMub2JqZWN0cGFzY2FsID0gUHJpc20ubGFuZ3VhZ2VzLnBhc2NhbDtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIFBhc2NhbGlnbyBpcyBhIGxheWVyIDIgc21hcnQgY29udHJhY3QgbGFuZ3VhZ2UgZm9yIHRoZSB0ZXpvcyBibG9ja2NoYWluXG5cblx0dmFyIGJyYWNlcyA9IC9cXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkqXFwpLy5zb3VyY2U7XG5cdHZhciB0eXBlID0gLyg/OlxcYlxcdysoPzo8YnJhY2VzPik/fDxicmFjZXM+KS8uc291cmNlLnJlcGxhY2UoLzxicmFjZXM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJyYWNlczsgfSk7XG5cblx0dmFyIHBhc2NhbGlnbyA9IFByaXNtLmxhbmd1YWdlcy5wYXNjYWxpZ28gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFwoXFwqW1xcc1xcU10rP1xcKlxcKXxcXC9cXC8uKi8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFxcXlthLXpdL2ksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGJ0eXBlXFxzK1xcdytcXHMraXNcXHMrKTx0eXBlPi8uc291cmNlLnJlcGxhY2UoLzx0eXBlPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlOyB9KSwgJ2knKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC88dHlwZT4oPz1cXHMraXNcXGIpLy5zb3VyY2UucmVwbGFjZSgvPHR5cGU+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGU7IH0pLCAnaScpLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyg6XFxzKik8dHlwZT4vLnNvdXJjZS5yZXBsYWNlKC88dHlwZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZTsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmJlZ2lufGJsb2NrfGNhc2V8Y29uc3R8ZWxzZXxlbmR8ZmFpbHxmb3J8ZnJvbXxmdW5jdGlvbnxpZnxpc3xuaWx8b2Z8cmVtb3ZlfHJldHVybnxza2lwfHRoZW58dHlwZXx2YXJ8d2hpbGV8d2l0aClcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86RmFsc2V8VHJ1ZSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86Ym9vbHxpbnR8bGlzdHxtYXB8bmF0fHJlY29yZHxzdHJpbmd8dW5pdClcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHRcdCdudW1iZXInOiBbXG5cdFx0XHQvLyBIZXhhZGVjaW1hbCwgb2N0YWwgYW5kIGJpbmFyeVxuXHRcdFx0LyVbMDFdK3wmWzAtN10rfFxcJFthLWZcXGRdKy9pLFxuXHRcdFx0Ly8gRGVjaW1hbFxuXHRcdFx0L1xcYlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8oPzptdHp8bik/L2lcblx0XHRdLFxuXHRcdCdvcGVyYXRvcic6IC8tPnw9XFwvPXxcXC5cXC58XFwqXFwqfDo9fDxbPD0+XT98Pls+PV0/fFsrXFwtKlxcL109P3xbQF49fF18XFxiKD86YW5kfG1vZHxvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXChcXC58XFwuXFwpfFsoKVxcW1xcXTo7LC57fV0vXG5cdH07XG5cblx0dmFyIGNsYXNzTmFtZUluc2lkZSA9IFsnY29tbWVudCcsICdrZXl3b3JkJywgJ2J1aWx0aW4nLCAnb3BlcmF0b3InLCAncHVuY3R1YXRpb24nXS5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtLCBrZXkpIHtcblx0XHRhY2N1bVtrZXldID0gcGFzY2FsaWdvW2tleV07XG5cdFx0cmV0dXJuIGFjY3VtO1xuXHR9LCB7fSk7XG5cblx0cGFzY2FsaWdvWydjbGFzcy1uYW1lJ10uZm9yRWFjaChmdW5jdGlvbiAocCkge1xuXHRcdHAuaW5zaWRlID0gY2xhc3NOYW1lSW5zaWRlO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucHNsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnc3ltYm9sJzogL1xcXFxbbnRyYkEtWlwiXFxcXF0vXG5cdFx0fVxuXHR9LFxuXHQnaGVyZWRvYy1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLzw8PChbYS16QS1aX11cXHcqKVtcXHJcXG5dKD86LipbXFxyXFxuXSkqP1xcMVxcYi8sXG5cdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpfX211bHRpfF9fc2luZ2xlfGNhc2V8ZGVmYXVsdHxkb3xlbHNlfGVsc2lmfGV4aXR8ZXhwb3J0fGZvcnxmb3JlYWNofGZ1bmN0aW9ufGlmfGxhc3R8bGluZXxsb2NhbHxuZXh0fHJlcXVpcmVzfHJldHVybnxzd2l0Y2h8dW50aWx8d2hpbGV8d29yZClcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86QUxBUk18Q0hBUlRfQUREX0dSQVBIfENIQVJUX0RFTEVURV9HUkFQSHxDSEFSVF9ERVNUUk9ZfENIQVJUX0xPQUR8Q0hBUlRfUFJJTlR8RU9GfE9GRkxJTkV8T0t8UFNMX1BST0ZfTE9HfFJfQ0hFQ0tfSE9SSVp8Ul9DSEVDS19WRVJUfFJfQ0xJQ0tFUnxSX0NPTFVNTnxSX0ZSQU1FfFJfSUNPTnxSX0xBQkVMfFJfTEFCRUxfQ0VOVEVSfFJfTElTVF9NVUxUSVBMRXxSX0xJU1RfTVVMVElQTEVfTkR8Ul9MSVNUX1NJTkdMRXxSX0xJU1RfU0lOR0xFX05EfFJfTUVOVXxSX1BPUFVQfFJfUE9QVVBfU0NST0xMRUR8Ul9SQURJT19IT1JJWnxSX1JBRElPX1ZFUlR8Ul9ST1d8Ul9TQ0FMRV9IT1JJWnxSX1NDQUxFX1ZFUlR8Ul9TRVBfSE9SSVp8Ul9TRVBfVkVSVHxSX1NQSU5ORVJ8Ul9URVhUX0ZJRUxEfFJfVEVYVF9GSUVMRF9MQUJFTHxSX1RPR0dMRXxUUklNX0xFQURJTkd8VFJJTV9MRUFESU5HX0FORF9UUkFJTElOR3xUUklNX1JFRFVOREFOVHxUUklNX1RSQUlMSU5HfFZPSUR8V0FSTilcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxGYWxzZXxOT3xOb3xUUlVFfFRydWV8WUVTfFllc3xmYWxzZXxub3x0cnVlfHllcylcXGIvLFxuXHQndmFyaWFibGUnOiAvXFxiKD86UHNsRGVidWd8ZXJybm98ZXhpdF9zdGF0dXMpXFxiLyxcblx0J2J1aWx0aW4nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OlBzbEV4ZWN1dGV8UHNsRnVuY3Rpb25DYWxsfFBzbEZ1bmN0aW9uRXhpc3RzfFBzbFNldE9wdGlvbnN8X3NubXBfZGVidWd8YWNvc3xhZGRfZGlhcnl8YW5ub3RhdGV8YW5ub3RhdGVfZ2V0fGFzY2lpX3RvX2ViY2RpY3xhc2N0aW1lfGFzaW58YXRhbnxhdGV4aXR8YmF0Y2hfc2V0fGJsYWNrb3V0fGNhdHxjZWlsfGNoYW5fZXhpc3RzfGNoYW5nZV9zdGF0ZXxjbG9zZXxjb2RlX2N2dHxjb25kX3NpZ25hbHxjb25kX3dhaXR8Y29uc29sZV90eXBlfGNvbnZlcnRfYmFzZXxjb252ZXJ0X2RhdGV8Y29udmVydF9sb2NhbGVfZGF0ZXxjb3N8Y29zaHxjcmVhdGV8ZGF0ZXxkY2dldF90ZXh0fGRlc3Ryb3l8ZGVzdHJveV9sb2NrfGRnZXRfdGV4dHxkaWZmZXJlbmNlfGR1bXBfaGlzdHxlYmNkaWNfdG9fYXNjaWl8ZW5jcnlwdHxldmVudF9hcmNoaXZlfGV2ZW50X2NhdGFsb2dfZ2V0fGV2ZW50X2NoZWNrfGV2ZW50X3F1ZXJ5fGV2ZW50X3JhbmdlX21hbmFnZXxldmVudF9yYW5nZV9xdWVyeXxldmVudF9yZXBvcnR8ZXZlbnRfc2NoZWR1bGV8ZXZlbnRfdHJpZ2dlcnxldmVudF90cmlnZ2VyMnxleGVjdXRlfGV4aXN0c3xleHB8ZmFic3xmaWxlfGZsb29yfGZtb2R8Zm9wZW58ZnNlZWt8ZnRlbGx8ZnVsbF9kaXNjb3Zlcnl8Z2V0fGdldF9jaGFuX2luZm98Z2V0X3Jhbmdlc3xnZXRfdGV4dHxnZXRfdmFyc3xnZXRlbnZ8Z2V0aG9zdGluZm98Z2V0cGlkfGdldHBuYW1lfGdyZXB8aGlzdG9yeXxoaXN0b3J5X2dldF9yZXRlbnRpb258aW5fdHJhbnNpdGlvbnxpbmRleHxpbnR8aW50ZXJuYWx8aW50ZXJzZWN0aW9ufGlzX3Zhcnxpc251bWJlcnxqb2lufGtpbGx8bGVuZ3RofGxpbmVzfGxvY2t8bG9ja19pbmZvfGxvZ3xsb2cxMHxsb2dlfG1hdGNobGluZXxtc2dfY2hlY2t8bXNnX2dldF9mb3JtYXR8bXNnX2dldF9zZXZlcml0eXxtc2dfcHJpbnRmfG1zZ19zcHJpbnRmfG50aGFyZ3xudGhhcmdmfG50aGxpbmV8bnRobGluZWZ8bnVtX2J5dGVzfG51bV9jb25zb2xlc3xwY29uZmlnfHBvcGVufHBvcGxpbmVzfHBvd3xwcmludHxwcmludGZ8cHJvY19leGlzdHN8cHJvY2Vzc3xyYW5kb218cmVhZHxyZWFkbG58cmVmcmVzaF9wYXJhbWV0ZXJzfHJlbW90ZV9jaGVja3xyZW1vdGVfY2xvc2V8cmVtb3RlX2V2ZW50X3F1ZXJ5fHJlbW90ZV9ldmVudF90cmlnZ2VyfHJlbW90ZV9maWxlX3NlbmR8cmVtb3RlX29wZW58cmVtb3ZlfHJlcGxhY2V8cmluZGV4fHNlY19jaGVja19wcml2fHNlY19zdG9yZV9nZXR8c2VjX3N0b3JlX3NldHxzZXR8c2V0X2FsYXJtX3Jhbmdlc3xzZXRfbG9jYWxlfHNoYXJlfHNpbnxzaW5ofHNsZWVwfHNubXBfYWdlbnRfY29uZmlnfHNubXBfYWdlbnRfc3RhcnR8c25tcF9hZ2VudF9zdG9wfHNubXBfY2xvc2V8c25tcF9jb25maWd8c25tcF9nZXR8c25tcF9nZXRfbmV4dHxzbm1wX2hfZ2V0fHNubXBfaF9nZXRfbmV4dHxzbm1wX2hfc2V0fHNubXBfb3Blbnxzbm1wX3NldHxzbm1wX3RyYXBfaWdub3JlfHNubXBfdHJhcF9saXN0ZW58c25tcF90cmFwX3JhaXNlX3N0ZF90cmFwfHNubXBfdHJhcF9yZWNlaXZlfHNubXBfdHJhcF9yZWdpc3Rlcl9pbXxzbm1wX3RyYXBfc2VuZHxzbm1wX3dhbGt8c29wZW58c29ydHxzcGxpdGxpbmV8c3ByaW50ZnxzcXJ0fHNyYW5kb218c3RyX3JlcGVhdHxzdHJjYXNlY21wfHN1YnNldHxzdWJzdHJ8c3lzdGVtfHRhaWx8dGFufHRhbmh8dGV4dF9kb21haW58dGltZXx0bXBuYW18dG9sb3dlcnx0b3VwcGVyfHRyYWNlX3BzbF9wcm9jZXNzfHRyaW18dW5pb258dW5pcXVlfHVubG9ja3x1bnNldHx2YV9hcmd8dmFfc3RhcnR8d3JpdGUpXFxiLyxcblx0XHRhbGlhczogJ2J1aWx0aW4tZnVuY3Rpb24nXG5cdH0sXG5cdCdmb3JlYWNoLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiZm9yZWFjaFxccysoPzooPzpcXHcrXFxifFwiKD86XFxcXC58W15cXFxcXCJdKSpcIilcXHMrKXswLDJ9KVtfYS16QS1aXVxcdyooPz1cXHMqXFwoKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYltfYS16XVxcdypcXGIoPz1cXHMqXFwoKS9pLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOWEtZl0rfFxcZCsoPzpcXC5cXGQrKT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8JiY9P3xcXHxcXHw9P3w8PD0/fD4+PT98Wz0hXX58Wy0rKi8lJnxeIT08Pl09P3xcXC58Wzo/XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXTssXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wY2F4aXMgPSB7XG5cdCdzdHJpbmcnOiAvXCJbXlwiXSpcIi8sXG5cdCdrZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8oKD86Xnw7KVxccyopWy1BLVpcXGRdKyg/OlxccypcXFtbLVxcd10rXFxdKT8oPzpcXHMqXFwoXCJbXlwiXSpcIig/OixcXHMqXCJbXlwiXSpcIikqXFwpKT8oPz1cXHMqPSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlstQS1aXFxkXSsvLFxuXHRcdFx0J2xhbmd1YWdlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVxcW1stXFx3XStcXF0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHQncHJvcGVydHknOiAvWy1cXHddKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdWIta2V5Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCh8XFwpJHwsL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCd0bGlzdCc6IHtcblx0XHRwYXR0ZXJuOiAvVExJU1RcXHMqXFwoXFxzKlxcdysoPzooPzpcXHMqLFxccypcIlteXCJdKlwiKSt8XFxzKixcXHMqXCJbXlwiXSpcIi1cIlteXCJdKlwiKT9cXHMqXFwpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvXlRMSVNULyxcblx0XHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKlxcKFxccyopXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1wiW15cIl0qXCIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdLyxcblx0XHRcdCdvcGVyYXRvcic6IC8tL1xuXHRcdH1cblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1s7LF0vLFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpXFxkKyg/OlxcLlxcZCspPyg/IVxcUykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Jvb2xlYW4nOiAvTk98WUVTLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy5weCA9IFByaXNtLmxhbmd1YWdlcy5wY2F4aXM7XG5cblByaXNtLmxhbmd1YWdlcy5wZW9wbGVjb2RlID0ge1xuXHQnY29tbWVudCc6IFJlZ0V4cChbXG5cdFx0Ly8gQy1zdHlsZSBtdWx0aWxpbmUgY29tbWVudHNcblx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8uc291cmNlLFxuXHRcdC8vIFJFTSBjb21tZW50c1xuXHRcdC9cXGJSRU1bXjtdKjsvLnNvdXJjZSxcblx0XHQvLyBOZXN0ZWQgPCogKj4gY29tbWVudHNcblx0XHQvPFxcKig/OltePCpdfFxcKig/IT4pfDwoPyFcXCopfDxcXCooPzooPyFcXCo+KVtcXHNcXFNdKSpcXCo+KSpcXCo+Ly5zb3VyY2UsXG5cdFx0Ly8gLysgKy8gY29tbWVudHNcblx0XHQvXFwvXFwrW1xcc1xcU10qP1xcK1xcLy8uc291cmNlLFxuXHRdLmpvaW4oJ3wnKSksXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzonJ3xbXidcXHJcXG5dKSonKD8hJyl8XCIoPzpcIlwifFteXCJcXHJcXG5dKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC8lXFx3Ky8sXG5cdCdmdW5jdGlvbi1kZWZpbml0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXlxcdy1dKSg/OmZ1bmN0aW9ufG1ldGhvZClcXHMrKVxcdysvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXi1cXHddKSg/OmFzfGNhdGNofGNsYXNzfGNvbXBvbmVudHxjcmVhdGV8ZXh0ZW5kc3xnbG9iYWx8aW1wbGVtZW50c3xpbnN0YW5jZXxsb2NhbHxvZnxwcm9wZXJ0eXxyZXR1cm5zKVxccyspXFx3Kyg/OjpcXHcrKSovaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzovXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxhbGlhc3xhc3xjYXRjaHxjbGFzc3xjb21wb25lbnR8Y29uc3RhbnR8Y3JlYXRlfGRlY2xhcmV8ZWxzZXxlbmQtKD86Y2xhc3N8ZXZhbHVhdGV8Zm9yfGZ1bmN0aW9ufGdldHxpZnxtZXRob2R8c2V0fHRyeXx3aGlsZSl8ZXZhbHVhdGV8ZXh0ZW5kc3xmb3J8ZnVuY3Rpb258Z2V0fGdsb2JhbHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnN0YW5jZXxsaWJyYXJ5fGxvY2FsfG1ldGhvZHxudWxsfG9mfG91dHxwZW9wbGVDb2RlfHByaXZhdGV8cHJvZ3JhbXxwcm9wZXJ0eXxwcm90ZWN0ZWR8cmVhZG9ubHl8cmVmfHJlcGVhdHxyZXR1cm5zP3xzZXR8c3RlcHx0aGVufHRocm93fHRvfHRyeXx1bnRpbHx2YWx1ZXx3aGVuKD86LW90aGVyKT98d2hpbGUpXFxiL2ksXG5cdCdvcGVyYXRvci1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbmR8bm90fG9yKVxcYi9pLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9bX2Etel1cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnb3BlcmF0b3InOiAvPD58Wzw+XT0/fCE9fFxcKlxcKnxbLSsqL3w9QF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWzouOywoKVtcXF1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBjb2RlID0gUHJpc20ubGFuZ3VhZ2VzLnBlb3BsZWNvZGU7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgYnJhY2tldHMgPSAvKD86XFwoKD86W14oKVxcXFxdfFxcXFxbXFxzXFxTXSkqXFwpfFxceyg/Oltee31cXFxcXXxcXFxcW1xcc1xcU10pKlxcfXxcXFsoPzpbXltcXF1cXFxcXXxcXFxcW1xcc1xcU10pKlxcXXw8KD86W148PlxcXFxdfFxcXFxbXFxzXFxTXSkqPikvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucGVybCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gUE9EXG5cdFx0XHRcdHBhdHRlcm46IC8oXlxccyopPVxcd1tcXHNcXFNdKj89Y3V0LiovbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcJF0pIy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBUT0RPIENvdWxkIGJlIG5pY2UgdG8gaGFuZGxlIEhlcmVkb2MgdG9vLlxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvXFxiKD86cXxxcXxxd3xxeCkoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBxLy4uLi9cblx0XHRcdFx0XHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIHEgYS4uLmFcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0XHQvKFthLXpBLVowLTldKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIHEoLi4uKVxuXHRcdFx0XHRcdFx0Ly8gcXsuLi59XG5cdFx0XHRcdFx0XHQvLyBxWy4uLl1cblx0XHRcdFx0XHRcdC8vIHE8Li4uPlxuXHRcdFx0XHRcdFx0YnJhY2tldHMsXG5cdFx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHRcdCcpJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIFwiLi4uXCIsIGAuLi5gXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXCJ8YCkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblxuXHRcdFx0Ly8gJy4uLidcblx0XHRcdC8vIEZJWE1FIE11bHRpLWxpbmUgc2luZ2xlLXF1b3RlZCBzdHJpbmdzIGFyZSBub3Qgc3VwcG9ydGVkIGFzIHRoZXkgd291bGQgYnJlYWsgdmFyaWFibGVzIGNvbnRhaW5pbmcgJ1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwuKSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncmVnZXgnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvXFxiKD86bXxxcikoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBtLy4uLi9cblx0XHRcdFx0XHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwxLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIG0gYS4uLmFcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0XHQvKFthLXpBLVowLTldKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyLy5zb3VyY2UsXG5cblx0XHRcdFx0XHRcdC8vIG0oLi4uKVxuXHRcdFx0XHRcdFx0Ly8gbXsuLi59XG5cdFx0XHRcdFx0XHQvLyBtWy4uLl1cblx0XHRcdFx0XHRcdC8vIG08Li4uPlxuXHRcdFx0XHRcdFx0YnJhY2tldHMsXG5cdFx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHRcdCcpJyArXG5cdFx0XHRcdFx0L1ttc2l4cG9kdWFsbmdjXSovLnNvdXJjZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRoZSBsb29rYmVoaW5kcyBwcmV2ZW50IC1zIGZyb20gYnJlYWtpbmdcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8oXnxbXi1dKVxcYig/OnN8dHJ8eSkoPyFbYS16QS1aMC05XSlcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCcoPzonICtcblx0XHRcdFx0XHRbXG5cdFx0XHRcdFx0XHQvLyBzLy4uLi8uLi4vXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0XHRcdFx0LyhbXmEtekEtWjAtOVxcc3soXFxbPF0pKD86KD8hXFwyKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDIoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMi8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBzIGEuLi5hLi4uYVxuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0XHRcdC8oW2EtekEtWjAtOV0pKD86KD8hXFwzKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDMoPzooPyFcXDMpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMy8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBzKC4uLikoLi4uKVxuXHRcdFx0XHRcdFx0Ly8gc3suLi59ey4uLn1cblx0XHRcdFx0XHRcdC8vIHNbLi4uXVsuLi5dXG5cdFx0XHRcdFx0XHQvLyBzPC4uLj48Li4uPlxuXHRcdFx0XHRcdFx0Ly8gcyguLi4pWy4uLl1cblx0XHRcdFx0XHRcdGJyYWNrZXRzICsgL1xccyovLnNvdXJjZSArIGJyYWNrZXRzLFxuXHRcdFx0XHRcdF0uam9pbignfCcpICtcblx0XHRcdFx0XHQnKScgK1xuXHRcdFx0XHRcdC9bbXNpeHBvZHVhbG5nY2VyXSovLnNvdXJjZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vIC8uLi4vXG5cdFx0XHQvLyBUaGUgbG9vay1haGVhZCB0cmllcyB0byBwcmV2ZW50IHR3byBkaXZpc2lvbnMgb25cblx0XHRcdC8vIHRoZSBzYW1lIGxpbmUgZnJvbSBiZWluZyBoaWdobGlnaHRlZCBhcyByZWdleC5cblx0XHRcdC8vIFRoaXMgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aS1saW5lIHJlZ2V4LlxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvKD86W15cXC9cXFxcXFxyXFxuXXxcXFxcLikqXFwvW21zaXhwb2R1YWxuZ2NdKig/PVxccyooPzokfFtcXHJcXG4sLjt9KSZ8XFwtKyp+PD4hP15dfCg/OmFuZHxjbXB8ZXF8Z2V8Z3R8bGV8bHR8bmV8bm90fG9yfHh8eG9yKVxcYikpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIEZJWE1FIE5vdCBzdXJlIGFib3V0IHRoZSBoYW5kbGluZyBvZiA6OiwgJywgYW5kICNcblx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHQvLyAke15QT1NUTUFUQ0h9XG5cdFx0XHQvWyYqJEAlXVxce1xcXltBLVpdK1xcfS8sXG5cdFx0XHQvLyAkXlZcblx0XHRcdC9bJiokQCVdXFxeW0EtWl9dLyxcblx0XHRcdC8vICR7Li4ufVxuXHRcdFx0L1smKiRAJV0jPyg/PVxceykvLFxuXHRcdFx0Ly8gJGZvb1xuXHRcdFx0L1smKiRAJV0jPyg/Oig/Ojo6KSonPyg/IVxcZClbXFx3JF0rKD8hW1xcdyRdKSkrKD86OjopKi8sXG5cdFx0XHQvLyAkMVxuXHRcdFx0L1smKiRAJV1cXGQrLyxcblx0XHRcdC8vICRfLCBAXywgJSFcblx0XHRcdC8vIFRoZSBuZWdhdGl2ZSBsb29rYWhlYWQgcHJldmVudHMgZnJvbSBicmVha2luZyB0aGUgJT0gb3BlcmF0b3Jcblx0XHRcdC8oPyElPSlbJEAlXVshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BbXFxcXFxcXV5fYHt8fX5dL1xuXHRcdF0sXG5cdFx0J2ZpbGVoYW5kbGUnOiB7XG5cdFx0XHQvLyA8PiwgPEZPTz4sIF9cblx0XHRcdHBhdHRlcm46IC88KD8hWzw9XSlcXFMqPz58XFxiX1xcYi8sXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCd2LXN0cmluZyc6IHtcblx0XHRcdC8vIHYxLjIsIDEuMi4zXG5cdFx0XHRwYXR0ZXJuOiAvdlxcZCsoPzpcXC5cXGQrKSp8XFxkKyg/OlxcLlxcZCspezIsfS8sXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxic3ViWyBcXHRdKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFueXxicmVha3xjb250aW51ZXxkZWZhdWx0fGRlbGV0ZXxkaWV8ZG98ZWxzZXxlbHNpZnxldmFsfGZvcnxmb3JlYWNofGdpdmVufGdvdG98aWZ8bGFzdHxsb2NhbHxteXxuZXh0fG91cnxwYWNrYWdlfHByaW50fHJlZG98cmVxdWlyZXxyZXR1cm58c2F5fHN0YXRlfHN1Ynxzd2l0Y2h8dW5kZWZ8dW5sZXNzfHVudGlsfHVzZXx3aGVufHdoaWxlKVxcYi8sXG5cdFx0J251bWJlcic6IC9cXGIoPzoweFtcXGRBLUZhLWZdKD86Xz9bXFxkQS1GYS1mXSkqfDBiWzAxXSg/Ol8/WzAxXSkqfCg/Oig/OlxcZCg/Ol8/XFxkKSopP1xcLik/XFxkKD86Xz9cXGQpKig/OltFZV1bKy1dP1xcZCspPylcXGIvLFxuXHRcdCdvcGVyYXRvcic6IC8tW3J3eG9SV1hPZXpzZmRscFNiY3R1Z2tUQk1BQ11cXGJ8XFwrWys9XT98LVstPT5dP3xcXCpcXCo/PT98XFwvXFwvPz0/fD1bPX4+XT98flt+PV0/fFxcfFxcfD89P3wmJj89P3w8KD86PT4/fDw9Pyk/fD4+Pz0/fCFbfj1dP3xbJV5dPT98XFwuKD86PXxcXC5cXC4/KT98W1xcXFw/XXxcXGJ4KD86PXxcXGIpfFxcYig/OmFuZHxjbXB8ZXF8Z2V8Z3R8bGV8bHR8bmV8bm90fG9yfHhvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLDpdL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgdHlwZUV4cHJlc3Npb24gPSAvKD86XFxiW2EtekEtWl1cXHcqfFt8XFxcXFtcXF1dKSsvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucGhwZG9jID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YWRvY2xpa2UnLCB7XG5cdFx0J3BhcmFtZXRlcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKEAoPzpnbG9iYWx8cGFyYW18cHJvcGVydHkoPzotcmVhZHwtd3JpdGUpP3x2YXIpXFxcXHMrKD86JyArIHR5cGVFeHByZXNzaW9uICsgJ1xcXFxzKyk/KVxcXFwkXFxcXHcrJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHBkb2MnLCAna2V5d29yZCcsIHtcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcoQCg/Omdsb2JhbHxwYWNrYWdlfHBhcmFtfHByb3BlcnR5KD86LXJlYWR8LXdyaXRlKT98cmV0dXJufHN1YnBhY2thZ2V8dGhyb3dzfHZhcilcXFxccyspJyArIHR5cGVFeHByZXNzaW9uKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXJyYXl8Ym9vbHxib29sZWFufGNhbGxiYWNrfGRvdWJsZXxmYWxzZXxmbG9hdHxpbnR8aW50ZWdlcnxtaXhlZHxudWxsfG9iamVjdHxyZXNvdXJjZXxzZWxmfHN0cmluZ3x0cnVlfHZvaWQpXFxiLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW3xcXFxcW1xcXSgpXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jbGlrZS5hZGRTdXBwb3J0KCdwaHAnLCBQcmlzbS5sYW5ndWFnZXMucGhwZG9jKTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwaHAnLCAndmFyaWFibGUnLCB7XG5cdCd0aGlzJzoge1xuXHRcdHBhdHRlcm46IC9cXCR0aGlzXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdnbG9iYWwnOiAvXFwkKD86R0xPQkFMU3xIVFRQX1JBV19QT1NUX0RBVEF8Xyg/OkNPT0tJRXxFTlZ8RklMRVN8R0VUfFBPU1R8UkVRVUVTVHxTRVJWRVJ8U0VTU0lPTil8YXJnY3xhcmd2fGh0dHBfcmVzcG9uc2VfaGVhZGVyfHBocF9lcnJvcm1zZylcXGIvLFxuXHQnc2NvcGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYltcXHdcXFxcXSs6Oi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGIoPzpwYXJlbnR8c2VsZnxzdGF0aWMpXFxiLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86OnxcXFxcL1xuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHZhcmlhYmxlID0gL1xcJFxcdyt8JVthLXpdKyUvO1xuXG5cdHZhciBhcnJvd0F0dHIgPSAvXFxbW15bXFxdXSpcXF0vLnNvdXJjZTtcblx0dmFyIGFycm93RGlyZWN0aW9uID0gLyg/Oltkcmx1XXxkb3xkb3dufGxlfGxlZnR8cml8cmlnaHR8dXApLy5zb3VyY2U7XG5cdHZhciBhcnJvd0JvZHkgPSAnKD86LSsnICsgYXJyb3dEaXJlY3Rpb24gKyAnLSt8XFxcXC4rJyArIGFycm93RGlyZWN0aW9uICsgJ1xcXFwuK3wtKyg/OicgKyBhcnJvd0F0dHIgKyAnLSopP3wnICsgYXJyb3dBdHRyICsgJy0rfFxcXFwuKyg/OicgKyBhcnJvd0F0dHIgKyAnXFxcXC4qKT98JyArIGFycm93QXR0ciArICdcXFxcLispJztcblx0dmFyIGFycm93TGVmdCA9IC8oPzo8ezEsMn18XFwvezEsMn18XFxcXHsxLDJ9fDxcXHx8WyMqXit9eG9dKS8uc291cmNlO1xuXHR2YXIgYXJyb3dSaWdodCA9IC8oPzo+ezEsMn18XFwvezEsMn18XFxcXHsxLDJ9fFxcfD58WyMqXit7eG9dKS8uc291cmNlO1xuXHR2YXIgYXJyb3dQcmVmaXggPSAvW1s/XT9bb3hdPy8uc291cmNlO1xuXHR2YXIgYXJyb3dTdWZmaXggPSAvW294XT9bXFxdP10/Ly5zb3VyY2U7XG5cdHZhciBhcnJvdyA9XG5cdFx0YXJyb3dQcmVmaXggK1xuXHRcdCcoPzonICtcblx0XHRhcnJvd0JvZHkgKyBhcnJvd1JpZ2h0ICtcblx0XHQnfCcgK1xuXHRcdGFycm93TGVmdCArIGFycm93Qm9keSArICcoPzonICsgYXJyb3dSaWdodCArICcpPycgK1xuXHRcdCcpJyArXG5cdFx0YXJyb3dTdWZmaXg7XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydwbGFudC11bWwnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86Jy4qfFxcLydbXFxzXFxTXSo/J1xcLykvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSEuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilAKD86ZW5kfHN0YXJ0KXVtbFxcYi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblxuXHRcdCdhcnJvdyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W14tLjw+P3xcXFxcW1xcXW94XSkvLnNvdXJjZSArIGFycm93ICsgLyg/IVstLjw+P3xcXFxcXFxdb3hdKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcWylbXltcXF1dKyg/PVxcXSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbKD89JHxcXF0pfF5cXF0vXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCd0ZXh0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFtbIFxcdF0qW1xcclxcbl0rKD8hW1xcclxcbl0pKVteXFxdXSooPz1cXF0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD86YWJzdHJhY3RcXHMrY2xhc3N8ZW5kXFxzKyg/OmJveHxmb3JrfGdyb3VwfG1lcmdlfG5vdGV8cmVmfHNwbGl0fHRpdGxlKXwoPzpmb3JrfHNwbGl0KSg/OlxccythZ2Fpbik/fGFjdGl2YXRlfGFjdG9yfGFnZW50fGFsdHxhbm5vdGF0aW9ufGFydGlmYWN0fGF1dG9hY3RpdmF0ZXxhdXRvbnVtYmVyfGJhY2t3YXJkfGJpbmFyeXxib3VuZGFyeXxib3h8YnJlYWt8Y2FwdGlvbnxjYXJkfGNhc2V8Y2lyY2xlfGNsYXNzfGNsb2NrfGNsb3VkfGNvbGxlY3Rpb25zfGNvbXBvbmVudHxjb25jaXNlfGNvbnRyb2x8Y3JlYXRlfGNyaXRpY2FsfGRhdGFiYXNlfGRlYWN0aXZhdGV8ZGVzdHJveXxkZXRhY2h8ZGlhbW9uZHxlbHNlfGVsc2VpZnxlbmR8ZW5kW2hyXW5vdGV8ZW5kaWZ8ZW5kc3dpdGNofGVuZHdoaWxlfGVudGl0eXxlbnVtfGZpbGV8Zm9sZGVyfGZvb3RlcnxmcmFtZXxncm91cHxbaHJdP25vdGV8aGVhZGVyfGhleGFnb258aGlkZXxpZnxpbnRlcmZhY2V8bGFiZWx8bGVnZW5kfGxvb3B8bWFwfG5hbWVzcGFjZXxuZXR3b3JrfG5ld3BhZ2V8bm9kZXxud2RpYWd8b2JqZWN0fG9wdHxwYWNrYWdlfHBhZ2V8cGFyfHBhcnRpY2lwYW50fHBlcnNvbnxxdWV1ZXxyZWN0YW5nbGV8cmVmfHJlbW92ZXxyZXBlYXR8cmVzdG9yZXxyZXR1cm58cm9idXN0fHNjYWxlfHNldHxzaG93fHNraW5wYXJhbXxzdGFja3xzdGFydHxzdGF0ZXxzdG9wfHN0b3JhZ2V8c3dpdGNofHRpdGxlfHRvZ2V0aGVyfHVzZWNhc2V8dXNlY2FzZVxcL3x3aGlsZSkoPz1cXHN8JCkvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmVsc2VpZnxlcXVhbHN8bm90fHdoaWxlKSg/PVxccypcXCgpLyxcblx0XHRcdC9cXGIoPzphc3xpc3x0aGVuKVxcYi9cblx0XHRdLFxuXG5cdFx0J2RpdmlkZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXj09Lis9PSQvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cblx0XHQndGltZSc6IHtcblx0XHRcdHBhdHRlcm46IC9AKD86XFxkKyg/Ols6L11cXGQrKXsyfXxbKy1dP1xcZCt8OlthLXpdXFx3Kig/OlsrLV1cXGQrKT8pXFxiL2ksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXG5cdFx0J2NvbG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyMoPzpbYS16X10rfFthLWZBLUYwLTldKylcXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblxuXHRcdCdwdW5jdHVhdGlvbic6IC9bOiw7KClbXFxde31dfFxcLnszfS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3BsYW50LXVtbCddLmFycm93Lmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlc1sncGxhbnQtdW1sJ107XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydwbGFudHVtbCddID0gUHJpc20ubGFuZ3VhZ2VzWydwbGFudC11bWwnXTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucGxzcWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdzcWwnLCB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfC0tLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9kYXRhYmFzZS9vcmFjbGUvb3JhY2xlLWRhdGFiYXNlLzIxL2xucGxzL3Bsc3FsLXJlc2VydmVkLXdvcmRzLWtleXdvcmRzLmh0bWxcblx0J2tleXdvcmQnOiAvXFxiKD86QXxBQ0NFU1NJQkxFfEFERHxBR0VOVHxBR0dSRUdBVEV8QUxMfEFMVEVSfEFORHxBTll8QVJSQVl8QVN8QVNDfEFUfEFUVFJJQlVURXxBVVRISUR8QVZHfEJFR0lOfEJFVFdFRU58QkZJTEVfQkFTRXxCSU5BUll8QkxPQl9CQVNFfEJMT0NLfEJPRFl8Qk9USHxCT1VORHxCVUxLfEJZfEJZVEV8Q3xDQUxMfENBTExJTkd8Q0FTQ0FERXxDQVNFfENIQVJ8Q0hBUkFDVEVSfENIQVJTRVR8Q0hBUlNFVEZPUk18Q0hBUlNFVElEfENIQVJfQkFTRXxDSEVDS3xDTE9CX0JBU0V8Q0xPTkV8Q0xPU0V8Q0xVU1RFUnxDTFVTVEVSU3xDT0xBVVRIfENPTExFQ1R8Q09MVU1OU3xDT01NRU5UfENPTU1JVHxDT01NSVRURUR8Q09NUElMRUR8Q09NUFJFU1N8Q09OTkVDVHxDT05TVEFOVHxDT05TVFJVQ1RPUnxDT05URVhUfENPTlRJTlVFfENPTlZFUlR8Q09VTlR8Q1JBU0h8Q1JFQVRFfENSRURFTlRJQUx8Q1VSUkVOVHxDVVJTT1J8Q1VTVE9NREFUVU18REFOR0xJTkd8REFUQXxEQVRFfERBVEVfQkFTRXxEQVl8REVDTEFSRXxERUZBVUxUfERFRklORXxERUxFVEV8REVTQ3xERVRFUk1JTklTVElDfERJUkVDVE9SWXxESVNUSU5DVHxET1VCTEV8RFJPUHxEVVJBVElPTnxFTEVNRU5UfEVMU0V8RUxTSUZ8RU1QVFl8RU5EfEVTQ0FQRXxFWENFUFR8RVhDRVBUSU9OfEVYQ0VQVElPTlN8RVhDTFVTSVZFfEVYRUNVVEV8RVhJU1RTfEVYSVR8RVhURVJOQUx8RkVUQ0h8RklOQUx8RklSU1R8RklYRUR8RkxPQVR8Rk9SfEZPUkFMTHxGT1JDRXxGUk9NfEZVTkNUSU9OfEdFTkVSQUx8R09UT3xHUkFOVHxHUk9VUHxIQVNIfEhBVklOR3xIRUFQfEhJRERFTnxIT1VSfElERU5USUZJRUR8SUZ8SU1NRURJQVRFfElNTVVUQUJMRXxJTnxJTkNMVURJTkd8SU5ERVh8SU5ERVhFU3xJTkRJQ0FUT1J8SU5ESUNFU3xJTkZJTklURXxJTlNFUlR8SU5TVEFOVElBQkxFfElOVHxJTlRFUkZBQ0V8SU5URVJTRUNUfElOVEVSVkFMfElOVE98SU5WQUxJREFURXxJU3xJU09MQVRJT058SkFWQXxMQU5HVUFHRXxMQVJHRXxMRUFESU5HfExFTkdUSHxMRVZFTHxMSUJSQVJZfExJS0V8TElLRTJ8TElLRTR8TElLRUN8TElNSVR8TElNSVRFRHxMT0NBTHxMT0NLfExPTkd8TE9PUHxNQVB8TUFYfE1BWExFTnxNRU1CRVJ8TUVSR0V8TUlOfE1JTlVTfE1JTlVURXxNT0R8TU9ERXxNT0RJRll8TU9OVEh8TVVMVElTRVR8TVVUQUJMRXxOQU1FfE5BTnxOQVRJT05BTHxOQVRJVkV8TkNIQVJ8TkVXfE5PQ09NUFJFU1N8Tk9DT1BZfE5PVHxOT1dBSVR8TlVMTHxOVU1CRVJfQkFTRXxPQkpFQ1R8T0NJQ09MTHxPQ0lEQVRFfE9DSURBVEVUSU1FfE9DSURVUkFUSU9OfE9DSUlOVEVSVkFMfE9DSUxPQkxPQ0FUT1J8T0NJTlVNQkVSfE9DSVJBV3xPQ0lSRUZ8T0NJUkVGQ1VSU09SfE9DSVJPV0lEfE9DSVNUUklOR3xPQ0lUWVBFfE9GfE9MRHxPTnxPTkxZfE9QQVFVRXxPUEVOfE9QRVJBVE9SfE9QVElPTnxPUnxPUkFDTEV8T1JBREFUQXxPUkRFUnxPUkdBTklaQVRJT058T1JMQU5ZfE9STFZBUll8T1RIRVJTfE9VVHxPVkVSTEFQU3xPVkVSUklESU5HfFBBQ0tBR0V8UEFSQUxMRUxfRU5BQkxFfFBBUkFNRVRFUnxQQVJBTUVURVJTfFBBUkVOVHxQQVJUSVRJT058UEFTQ0FMfFBFUlNJU1RBQkxFfFBJUEV8UElQRUxJTkVEfFBMVUdHQUJMRXxQT0xZTU9SUEhJQ3xQUkFHTUF8UFJFQ0lTSU9OfFBSSU9SfFBSSVZBVEV8UFJPQ0VEVVJFfFBVQkxJQ3xSQUlTRXxSQU5HRXxSQVd8UkVBRHxSRUNPUkR8UkVGfFJFRkVSRU5DRXxSRUxJRVNfT058UkVNfFJFTUFJTkRFUnxSRU5BTUV8UkVTT1VSQ0V8UkVTVUxUfFJFU1VMVF9DQUNIRXxSRVRVUk58UkVUVVJOSU5HfFJFVkVSU0V8UkVWT0tFfFJPTExCQUNLfFJPV3xTQU1QTEV8U0FWRXxTQVZFUE9JTlR8U0IxfFNCMnxTQjR8U0VDT05EfFNFR01FTlR8U0VMRUNUfFNFTEZ8U0VQQVJBVEV8U0VRVUVOQ0V8U0VSSUFMSVpBQkxFfFNFVHxTSEFSRXxTSE9SVHxTSVpFfFNJWkVfVHxTT01FfFNQQVJTRXxTUUx8U1FMQ09ERXxTUUxEQVRBfFNRTE5BTUV8U1FMU1RBVEV8U1RBTkRBUkR8U1RBUlR8U1RBVElDfFNURERFVnxTVE9SRUR8U1RSSU5HfFNUUlVDVHxTVFlMRXxTVUJNVUxUSVNFVHxTVUJQQVJUSVRJT058U1VCU1RJVFVUQUJMRXxTVUJUWVBFfFNVTXxTWU5PTllNfFRBQkFVVEh8VEFCTEV8VERPfFRIRXxUSEVOfFRJTUV8VElNRVNUQU1QfFRJTUVaT05FX0FCQlJ8VElNRVpPTkVfSE9VUnxUSU1FWk9ORV9NSU5VVEV8VElNRVpPTkVfUkVHSU9OfFRPfFRSQUlMSU5HfFRSQU5TQUNUSU9OfFRSQU5TQUNUSU9OQUx8VFJVU1RFRHxUWVBFfFVCMXxVQjJ8VUI0fFVOREVSfFVOSU9OfFVOSVFVRXxVTlBMVUd8VU5TSUdORUR8VU5UUlVTVEVEfFVQREFURXxVU0V8VVNJTkd8VkFMSVNUfFZBTFVFfFZBTFVFU3xWQVJJQUJMRXxWQVJJQU5DRXxWQVJSQVl8VkFSWUlOR3xWSUVXfFZJRVdTfFZPSUR8V0hFTnxXSEVSRXxXSElMRXxXSVRIfFdPUkt8V1JBUFBFRHxXUklURXxZRUFSfFpPTkUpXFxiL2ksXG5cdC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2RhdGFiYXNlL29yYWNsZS9vcmFjbGUtZGF0YWJhc2UvMjEvbG5wbHMvcGxzcWwtbGFuZ3VhZ2UtZnVuZGFtZW50YWxzLmh0bWwjR1VJRC05NkE0MkY3Qy03QTcxLTRCOTAtODI1NS1DQTlDOEJEOTcyMkVcblx0J29wZXJhdG9yJzogLzo9P3w9PnxbPD5efiFdPXxcXC5cXC58XFx8XFx8fFxcKlxcKnxbLSsqLyU8Pj1AXS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwbHNxbCcsICdvcGVyYXRvcicsIHtcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC88PFxccypcXHcrXFxzKj4+Lyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcbn0pO1xuXG4vLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9wb3dlcnF1ZXJ5LW0vcG93ZXItcXVlcnktbS1sYW5ndWFnZS1zcGVjaWZpY2F0aW9uXG5cblByaXNtLmxhbmd1YWdlcy5wb3dlcnF1ZXJ5ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3F1b3RlZC1pZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC8jXCIoPzpbXlwiXFxyXFxuXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OiMhKT9cIig/OlteXCJcXHJcXG5dfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NvbnN0YW50JzogW1xuXHRcdC9cXGJEYXlcXC4oPzpGcmlkYXl8TW9uZGF5fFNhdHVyZGF5fFN1bmRheXxUaHVyc2RheXxUdWVzZGF5fFdlZG5lc2RheSlcXGIvLFxuXHRcdC9cXGJUcmFjZUxldmVsXFwuKD86Q3JpdGljYWx8RXJyb3J8SW5mb3JtYXRpb258VmVyYm9zZXxXYXJuaW5nKVxcYi8sXG5cdFx0L1xcYk9jY3VycmVuY2VcXC4oPzpBbGx8Rmlyc3R8TGFzdClcXGIvLFxuXHRcdC9cXGJPcmRlclxcLig/OkFzY2VuZGluZ3xEZXNjZW5kaW5nKVxcYi8sXG5cdFx0L1xcYlJvdW5kaW5nTW9kZVxcLig/OkF3YXlGcm9tWmVyb3xEb3dufFRvRXZlbnxUb3dhcmRaZXJvfFVwKVxcYi8sXG5cdFx0L1xcYk1pc3NpbmdGaWVsZFxcLig/OkVycm9yfElnbm9yZXxVc2VOdWxsKVxcYi8sXG5cdFx0L1xcYlF1b3RlU3R5bGVcXC4oPzpDc3Z8Tm9uZSlcXGIvLFxuXHRcdC9cXGJKb2luS2luZFxcLig/OkZ1bGxPdXRlcnxJbm5lcnxMZWZ0QW50aXxMZWZ0T3V0ZXJ8UmlnaHRBbnRpfFJpZ2h0T3V0ZXIpXFxiLyxcblx0XHQvXFxiR3JvdXBLaW5kXFwuKD86R2xvYmFsfExvY2FsKVxcYi8sXG5cdFx0L1xcYkV4dHJhVmFsdWVzXFwuKD86RXJyb3J8SWdub3JlfExpc3QpXFxiLyxcblx0XHQvXFxiSm9pbkFsZ29yaXRobVxcLig/OkR5bmFtaWN8TGVmdEhhc2h8TGVmdEluZGV4fFBhaXJ3aXNlSGFzaHxSaWdodEhhc2h8UmlnaHRJbmRleHxTb3J0TWVyZ2UpXFxiLyxcblx0XHQvXFxiSm9pblNpZGVcXC4oPzpMZWZ0fFJpZ2h0KVxcYi8sXG5cdFx0L1xcYlByZWNpc2lvblxcLig/OkRlY2ltYWx8RG91YmxlKVxcYi8sXG5cdFx0L1xcYlJlbGF0aXZlUG9zaXRpb25cXC5Gcm9tKD86RW5kfFN0YXJ0KVxcYi8sXG5cdFx0L1xcYlRleHRFbmNvZGluZ1xcLig/OkFzY2lpfEJpZ0VuZGlhblVuaWNvZGV8VW5pY29kZXxVdGYxNnxVdGY4fFdpbmRvd3MpXFxiLyxcblx0XHQvXFxiKD86QW55fEJpbmFyeXxEYXRlfERhdGVUaW1lfERhdGVUaW1lWm9uZXxEdXJhdGlvbnxGdW5jdGlvbnxJbnQxNnxJbnQzMnxJbnQ2NHxJbnQ4fExpc3R8TG9naWNhbHxOb25lfE51bWJlcnxSZWNvcmR8VGFibGV8VGV4dHxUaW1lKVxcLlR5cGVcXGIvLFxuXHRcdC9cXGJudWxsXFxiL1xuXHRdLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xlYWNofGVsc2V8ZXJyb3J8aWZ8aW58aXN8bGV0fG1ldGF8bm90fG51bGxhYmxlfG9wdGlvbmFsfG9yfG90aGVyd2lzZXxzZWN0aW9ufHNoYXJlZHx0aGVufHRyeXx0eXBlKVxcYnwjKD86YmluYXJ5fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWV6b25lfGR1cmF0aW9ufGluZmluaXR5fG5hbnxzZWN0aW9uc3xzaGFyZWR8dGFibGV8dGltZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteI1xcdy5dKVthLXpfXVtcXHcuXSooPz1cXHMqXFwoKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2RhdGEtdHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW55fGFueW5vbm51bGx8YmluYXJ5fGRhdGV8ZGF0ZXRpbWV8ZGF0ZXRpbWV6b25lfGR1cmF0aW9ufGZ1bmN0aW9ufGxpc3R8bG9naWNhbHxub25lfG51bWJlcnxyZWNvcmR8dGFibGV8dGV4dHx0aW1lKVxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpbKy1dPyg/OlxcYlxcZCtcXC4pP1xcYlxcZCt8WystXVxcLlxcZCt8KF58W14uXSlcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1stKypcXC8mP0BeXXw8KD86PT4/fD4pP3w+PT98PT4/fFxcLlxcLlxcLj8vLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7XFxbXFxdKCl7fV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucHEgPSBQcmlzbS5sYW5ndWFnZXNbJ3Bvd2VycXVlcnknXTtcblByaXNtLmxhbmd1YWdlcy5tc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzWydwb3dlcnF1ZXJ5J107XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgcG93ZXJzaGVsbCA9IFByaXNtLmxhbmd1YWdlcy5wb3dlcnNoZWxsID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15gXSk8I1tcXHNcXFNdKj8jPi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXmBdKSMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OmBbXFxzXFxTXXxbXmBcIl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ118JycpKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdC8vIE1hdGNoZXMgbmFtZSBzcGFjZXMgYXMgd2VsbCBhcyBjYXN0cywgYXR0cmlidXRlIGRlY29yYXRvcnMuIEZvcmNlIHN0YXJ0aW5nIHdpdGggbGV0dGVyIHRvIGF2b2lkIG1hdGNoaW5nIGFycmF5IGluZGljZXNcblx0XHQvLyBTdXBwb3J0cyB0d28gbGV2ZWxzIG9mIG5lc3RlZCBicmFja2V0cyAoZS5nLiBgW091dHB1dFR5cGUoW1N5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkxpc3RbaW50XV0pXWApXG5cdFx0J25hbWVzcGFjZSc6IC9cXFtbYS16XSg/OlxcWyg/OlxcW1teXFxdXSpcXF18W15cXFtcXF1dKSpcXF18W15cXFtcXF1dKSpcXF0vaSxcblx0XHQnYm9vbGVhbic6IC9cXCQoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHRcdCd2YXJpYWJsZSc6IC9cXCRcXHcrXFxiLyxcblx0XHQvLyBDbWRsZXRzIGFuZCBhbGlhc2VzLiBBbGlhc2VzIHNob3VsZCBjb21lIGxhc3QsIG90aGVyd2lzZSBcIndyaXRlXCIgZ2V0cyBwcmVmZXJyZWQgb3ZlciBcIndyaXRlLWhvc3RcIiBmb3IgZXhhbXBsZVxuXHRcdC8vIEdldC1Db21tYW5kIHwgP3sgJF8uTW9kdWxlTmFtZSAtbWF0Y2ggXCJNaWNyb3NvZnQuUG93ZXJTaGVsbC4oVXRpbHxDb3JlfE1hbmFnZW1lbnQpXCIgfVxuXHRcdC8vIEdldC1BbGlhcyB8ID97ICRfLlJlZmVyZW5jZWRDb21tYW5kLk1vZHVsZS5OYW1lIC1tYXRjaCBcIk1pY3Jvc29mdC5Qb3dlclNoZWxsLihVdGlsfENvcmV8TWFuYWdlbWVudClcIiB9XG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0L1xcYig/OkFkZHxBcHByb3ZlfEFzc2VydHxCYWNrdXB8QmxvY2t8Q2hlY2twb2ludHxDbGVhcnxDbG9zZXxDb21wYXJlfENvbXBsZXRlfENvbXByZXNzfENvbmZpcm18Q29ubmVjdHxDb252ZXJ0fENvbnZlcnRGcm9tfENvbnZlcnRUb3xDb3B5fERlYnVnfERlbnl8RGlzYWJsZXxEaXNjb25uZWN0fERpc21vdW50fEVkaXR8RW5hYmxlfEVudGVyfEV4aXR8RXhwYW5kfEV4cG9ydHxGaW5kfEZvckVhY2h8Rm9ybWF0fEdldHxHcmFudHxHcm91cHxIaWRlfEltcG9ydHxJbml0aWFsaXplfEluc3RhbGx8SW52b2tlfEpvaW58TGltaXR8TG9ja3xNZWFzdXJlfE1lcmdlfE1vdmV8TmV3fE9wZW58T3B0aW1pemV8T3V0fFBpbmd8UG9wfFByb3RlY3R8UHVibGlzaHxQdXNofFJlYWR8UmVjZWl2ZXxSZWRvfFJlZ2lzdGVyfFJlbW92ZXxSZW5hbWV8UmVwYWlyfFJlcXVlc3R8UmVzZXR8UmVzaXplfFJlc29sdmV8UmVzdGFydHxSZXN0b3JlfFJlc3VtZXxSZXZva2V8U2F2ZXxTZWFyY2h8U2VsZWN0fFNlbmR8U2V0fFNob3d8U2tpcHxTb3J0fFNwbGl0fFN0YXJ0fFN0ZXB8U3RvcHxTdWJtaXR8U3VzcGVuZHxTd2l0Y2h8U3luY3xUZWV8VGVzdHxUcmFjZXxVbmJsb2NrfFVuZG98VW5pbnN0YWxsfFVubG9ja3xVbnByb3RlY3R8VW5wdWJsaXNofFVucmVnaXN0ZXJ8VXBkYXRlfFVzZXxXYWl0fFdhdGNofFdoZXJlfFdyaXRlKS1bYS16XStcXGIvaSxcblx0XHRcdC9cXGIoPzphY3xjYXR8Y2hkaXJ8Y2xjfGNsaXxjbHB8Y2x2fGNvbXBhcmV8Y29weXxjcHxjcGl8Y3BwfGN2cGF8ZGJwfGRlbHxkaWZmfGRpcnxlYnB8ZWNob3xlcGFsfGVwY3N2fGVwc258ZXJhc2V8ZmN8Zmx8ZnR8Znd8Z2FsfGdicHxnY3xnY2l8Z2NzfGdkcnxnaXxnbHxnbXxncHxncHN8Z3JvdXB8Z3N2fGd1fGd2fGd3bWl8aWV4fGlpfGlwYWx8aXBjc3Z8aXBzbnxpcm18aXdtaXxpd3J8a2lsbHxscHxsc3xtZWFzdXJlfG1pfG1vdW50fG1vdmV8bXB8bXZ8bmFsfG5kcnxuaXxudnxvZ3Z8cG9wZHxwc3xwdXNoZHxwd2R8cmJwfHJkfHJkcnxyZW58cml8cm18cm1kaXJ8cm5pfHJucHxycHxydnxydnBhfHJ3bWl8c2FsfHNhcHN8c2FzdnxzYnB8c2N8c2VsZWN0fHNldHxzaGNtfHNpfHNsfHNsZWVwfHNsc3xzb3J0fHNwfHNwcHN8c3BzdnxzdGFydHxzdnxzd21pfHRlZXx0cmNtfHR5cGV8d3JpdGUpXFxiL2lcblx0XHRdLFxuXHRcdC8vIHBlciBodHRwOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaGg4NDc3NDQuYXNweFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJlZ2lufEJyZWFrfENhdGNofENsYXNzfENvbnRpbnVlfERhdGF8RGVmaW5lfERvfER5bmFtaWNQYXJhbXxFbHNlfEVsc2VJZnxFbmR8RXhpdHxGaWx0ZXJ8RmluYWxseXxGb3J8Rm9yRWFjaHxGcm9tfEZ1bmN0aW9ufElmfElubGluZVNjcmlwdHxQYXJhbGxlbHxQYXJhbXxQcm9jZXNzfFJldHVybnxTZXF1ZW5jZXxTd2l0Y2h8VGhyb3d8VHJhcHxUcnl8VW50aWx8VXNpbmd8VmFyfFdoaWxlfFdvcmtmbG93KVxcYi9pLFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXFcpKD86IXwtKD86Yj8oPzphbmR8eD9vcil8YXN8KD86Tm90KT8oPzpDb250YWluc3xJbnxMaWtlfE1hdGNoKXxlcXxnZXxndHxpcyg/Ok5vdCk/fEpvaW58bGV8bHR8bmV8bm90fFJlcGxhY2V8c2hbbHJdKVxcYnwtWy09XT98XFwrWys9XT98WypcXC8lXT0/KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t8e31bXFxdOygpLC5dL1xuXHR9O1xuXG5cdC8vIFZhcmlhYmxlIGludGVycG9sYXRpb24gaW5zaWRlIHN0cmluZ3MsIGFuZCBuZXN0ZWQgZXhwcmVzc2lvbnNcblx0cG93ZXJzaGVsbC5zdHJpbmdbMF0uaW5zaWRlID0ge1xuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdC8vIEFsbG93IGZvciBvbmUgbGV2ZWwgb2YgbmVzdGluZ1xuXHRcdFx0cGF0dGVybjogLyhefFteYF0pXFwkXFwoKD86XFwkXFwoW15cXHJcXG4oKV0qXFwpfCg/IVxcJFxcKClbXlxcclxcbildKSpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogcG93ZXJzaGVsbFxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiBwb3dlcnNoZWxsLmJvb2xlYW4sXG5cdFx0J3ZhcmlhYmxlJzogcG93ZXJzaGVsbC52YXJpYWJsZSxcblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMucHJvY2Vzc2luZyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnRpbnVlfGRlZmF1bHR8ZWxzZXxleHRlbmRzfGZpbmFsfGZvcnxpZnxpbXBsZW1lbnRzfGltcG9ydHxuZXd8bnVsbHxwcml2YXRlfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRyeXx2b2lkfHdoaWxlKVxcYi8sXG5cdC8vIFNwYWNlcyBhcmUgYWxsb3dlZCBiZXR3ZWVuIGZ1bmN0aW9uIG5hbWUgYW5kIHBhcmVudGhlc2lzXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHQnb3BlcmF0b3InOiAvPFs8PV0/fD5bPj1dP3wmJj98XFx8XFx8P3xbJT9dfFshPStcXC0qXFwvXT0/L1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Byb2Nlc3NpbmcnLCAnbnVtYmVyJywge1xuXHQvLyBTcGVjaWFsIGNhc2U6IFhNTCBpcyBhIHR5cGVcblx0J2NvbnN0YW50JzogL1xcYig/IVhNTFxcYilbQS1aXVtBLVpcXGRfXStcXGIvLFxuXHQndHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86Ym9vbGVhbnxieXRlfGNoYXJ8Y29sb3J8ZG91YmxlfGZsb2F0fGludHxbQS1aXVxcdyopXFxiLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucHJvbG9nID0ge1xuXHQvLyBTeW50YXggZGVwZW5kcyBvbiB0aGUgaW1wbGVtZW50YXRpb25cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98JS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gRGVwZW5kaW5nIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgc3RyaW5ncyBtYXkgYWxsb3cgZXNjYXBlZCBuZXdsaW5lcyBhbmQgcXVvdGUtZXNjYXBlXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXDFcXDF8XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMSg/IVxcMSkvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYnVpbHRpbic6IC9cXGIoPzpmeHxmeXx4Zlt4eV0/fHlmeD8pXFxiLyxcblx0Ly8gRklYTUU6IFNob3VsZCB3ZSBsaXN0IGFsbCBudWxsLWFyeSBwcmVkaWNhdGVzIChub3QgZm9sbG93ZWQgYnkgYSBwYXJlbnRoZXNpcykgbGlrZSBoYWx0LCB0cmFjZSwgZXRjLj9cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpdXFx3Kig/Oig/PVxcKCl8XFwvXFxkKykvLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQqKT8vLFxuXHQvLyBDdXN0b20gb3BlcmF0b3JzIGFyZSBhbGxvd2VkXG5cdCdvcGVyYXRvcic6IC9bOlxcXFw9PjxcXC0/KkBcXC87K158ISQuXSt8XFxiKD86aXN8bW9kfG5vdHx4b3IpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdLF0vXG59O1xuXG4vLyBUaGFua3MgdG86IGh0dHBzOi8vZ2l0aHViLmNvbS9wcm9tZXRoZXVzLWNvbW11bml0eS9tb25hY28tcHJvbXFsL2Jsb2IvbWFzdGVyL3NyYy9wcm9tcWwvcHJvbXFsLnRzXG4vLyBBcyB3ZWxsIGFzOiBodHRwczovL2thdXNhbC5jby9ibG9nL3NsYXRlLXByaXNtLWFkZC1uZXctc3ludGF4LXByb21xbC9cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvLyBQcm9tUUwgQWdncmVnYXRpb24gT3BlcmF0b3JzXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9vcGVyYXRvcnMvI2FnZ3JlZ2F0aW9uLW9wZXJhdG9ycylcblx0dmFyIGFnZ3JlZ2F0aW9ucyA9IFtcblx0XHQnc3VtJyxcblx0XHQnbWluJyxcblx0XHQnbWF4Jyxcblx0XHQnYXZnJyxcblx0XHQnZ3JvdXAnLFxuXHRcdCdzdGRkZXYnLFxuXHRcdCdzdGR2YXInLFxuXHRcdCdjb3VudCcsXG5cdFx0J2NvdW50X3ZhbHVlcycsXG5cdFx0J2JvdHRvbWsnLFxuXHRcdCd0b3BrJyxcblx0XHQncXVhbnRpbGUnXG5cdF07XG5cblx0Ly8gUHJvbVFMIHZlY3RvciBtYXRjaGluZyArIHRoZSBieSBhbmQgd2l0aG91dCBjbGF1c2VzXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9vcGVyYXRvcnMvI3ZlY3Rvci1tYXRjaGluZylcblx0dmFyIHZlY3Rvck1hdGNoaW5nID0gW1xuXHRcdCdvbicsXG5cdFx0J2lnbm9yaW5nJyxcblx0XHQnZ3JvdXBfcmlnaHQnLFxuXHRcdCdncm91cF9sZWZ0Jyxcblx0XHQnYnknLFxuXHRcdCd3aXRob3V0Jyxcblx0XTtcblxuXHQvLyBQcm9tUUwgb2Zmc2V0IG1vZGlmaWVyXG5cdC8vIChodHRwczovL3Byb21ldGhldXMuaW8vZG9jcy9wcm9tZXRoZXVzL2xhdGVzdC9xdWVyeWluZy9iYXNpY3MvI29mZnNldC1tb2RpZmllcilcblx0dmFyIG9mZnNldE1vZGlmaWVyID0gWydvZmZzZXQnXTtcblxuXHR2YXIga2V5d29yZHMgPSBhZ2dyZWdhdGlvbnMuY29uY2F0KHZlY3Rvck1hdGNoaW5nLCBvZmZzZXRNb2RpZmllcik7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnByb21xbCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopIy4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndmVjdG9yLW1hdGNoJzoge1xuXHRcdFx0Ly8gTWF0Y2ggdGhlIGNvbW1hLXNlcGFyYXRlZCBsYWJlbCBsaXN0cyBpbnNpZGUgdmVjdG9yIG1hdGNoaW5nOlxuXHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgnKCg/OicgKyB2ZWN0b3JNYXRjaGluZy5qb2luKCd8JykgKyAnKVxcXFxzKilcXFxcKFteKV0qXFxcXCknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2xhYmVsLWtleSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiW14sXStcXGIvLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdFx0fSxcblx0XHR9LFxuXHRcdCdjb250ZXh0LWxhYmVscyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XSpcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdsYWJlbC1rZXknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqKD86PXwhWz1+XSkpLyxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdsYWJlbC12YWx1ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHt8XFx9fD1+P3whWz1+XXwsLyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHQnY29udGV4dC1yYW5nZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcW1tcXHdcXHM6XStcXF0vLCAvLyBbMW1dXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFt8XFxdfDovLFxuXHRcdFx0XHRcdCdyYW5nZS1kdXJhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpcXGQrKD86W3NtaGR3eV18bXMpKStcXGIvaSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGJvZmZzZXRcXHMrKVxcdysvLCAvLyBvZmZzZXQgMW1cblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3JhbmdlLWR1cmF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OlxcZCsoPzpbc21oZHd5XXxtcykpK1xcYi9pLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH0sXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiBuZXcgUmVnRXhwKCdcXFxcYig/OicgKyBrZXl3b3Jkcy5qb2luKCd8JykgKyAnKVxcXFxiJywgJ2knKSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0J251bWJlcic6IC9bLStdPyg/Oig/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFxCXFwuXFxkKykoPzplWy0rXT9cXGQrKT9cXGJ8XFxiKD86MHhbMC05YS1mXSt8bmFufGluZilcXGIpL2ksXG5cdFx0J29wZXJhdG9yJzogL1tcXF4qLyUrLV18PT18IT18PD18PHw+PXw+fFxcYig/OmFuZHxvcnx1bmxlc3MpXFxiL2ksXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fTsoKWAsLltcXF1dLyxcblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnByb3BlcnRpZXMgPSB7XG5cdCdjb21tZW50JzogL15bIFxcdF0qWyMhXS4qJC9tLFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcczo9XSkrKD86ICpbPTpdICooPyEgKXwgKSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHJcXG5dKSsvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvXlsgXFx0XSooPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHM6PV0pKyg/PSAqWz06XXwgKS9tLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWz06XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgYnVpbHRpblR5cGVzID0gL1xcYig/OmJvb2x8Ynl0ZXN8ZG91YmxlfHM/Zml4ZWQoPzozMnw2NCl8ZmxvYXR8W3N1XT9pbnQoPzozMnw2NCl8c3RyaW5nKVxcYi87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnByb3RvYnVmID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxleHRlbmR8bWVzc2FnZXxzZXJ2aWNlKVxccyspW0EtWmEtel9dXFx3Kig/PVxccypcXHspLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpycGNcXHMrXFx3K3xyZXR1cm5zKVxccypcXChcXHMqKD86c3RyZWFtXFxzKyk/KVxcLj9bQS1aYS16X11cXHcqKD86XFwuW0EtWmEtel9dXFx3KikqKD89XFxzKlxcKSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzplbnVtfGV4dGVuZHxleHRlbnNpb25zfGltcG9ydHxtZXNzYWdlfG9uZW9mfG9wdGlvbnxvcHRpb25hbHxwYWNrYWdlfHB1YmxpY3xyZXBlYXRlZHxyZXF1aXJlZHxyZXNlcnZlZHxyZXR1cm5zfHJwYyg/PVxccytcXHcpfHNlcnZpY2V8c3RyZWFtfHN5bnRheHx0bylcXGIoPyFcXHMqPVxccypcXGQpLyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2lcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHJvdG9idWYnLCAnb3BlcmF0b3InLCB7XG5cdFx0J21hcCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJtYXA8XFxzKltcXHcuXStcXHMqLFxccypbXFx3Ll0rXFxzKj4oPz1cXHMrW2Etel9dXFx3KlxccypbPTtdKS9pLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+LixdLyxcblx0XHRcdFx0J2J1aWx0aW4nOiBidWlsdGluVHlwZXNcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdidWlsdGluJzogYnVpbHRpblR5cGVzLFxuXHRcdCdwb3NpdGlvbmFsLWNsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxifFxcQlxcLilbYS16X11cXHcqKD86XFwuW2Etel9dXFx3KikqKD89XFxzK1thLXpfXVxcdypcXHMqWz07XSkvaSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFtcXHMqKVthLXpfXVxcdyooPz1cXHMqPSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0Ly8gVE9ETzpcblx0Ly8gLSBBZGQgQ1NTIGhpZ2hsaWdodGluZyBpbnNpZGUgPHN0eWxlPiB0YWdzXG5cdC8vIC0gQWRkIHN1cHBvcnQgZm9yIG11bHRpLWxpbmUgY29kZSBibG9ja3Ncblx0Ly8gLSBBZGQgc3VwcG9ydCBmb3IgaW50ZXJwb2xhdGlvbiAje30gYW5kICF7fVxuXHQvLyAtIEFkZCBzdXBwb3J0IGZvciB0YWcgaW50ZXJwb2xhdGlvbiAjW11cblx0Ly8gLSBBZGQgZXhwbGljaXQgc3VwcG9ydCBmb3IgcGxhaW4gdGV4dCB1c2luZyB8XG5cdC8vIC0gQWRkIHN1cHBvcnQgZm9yIG1hcmt1cCBlbWJlZGRlZCBpbiBwbGFpbiB0ZXh0XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnB1ZyA9IHtcblxuXHRcdC8vIE11bHRpbGluZSBzdHVmZiBzaG91bGQgYXBwZWFyIGJlZm9yZSB0aGUgcmVzdFxuXG5cdFx0Ly8gVGhpcyBoYW5kbGVzIGJvdGggc2luZ2xlLWxpbmUgYW5kIG11bHRpLWxpbmUgY29tbWVudHNcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXihbXFx0IF0qKSlcXC9cXC8uKig/Oig/Olxccj9cXG58XFxyKVxcMltcXHQgXS4rKSovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0Ly8gQWxsIHRoZSB0YWctcmVsYXRlZCBwYXJ0IGlzIGluIGxvb2tiZWhpbmRcblx0XHQvLyBzbyB0aGF0IGl0IGNhbiBiZSBoaWdobGlnaHRlZCBieSB0aGUgXCJ0YWdcIiBwYXR0ZXJuXG5cdFx0J211bHRpbGluZS1zY3JpcHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKilzY3JpcHRcXGIuKlxcLltcXHQgXSopKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cblx0XHQvLyBTZWUgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZSBmb3Iga25vd24gZmlsdGVyc1xuXHRcdCdmaWx0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKikpOi4rKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWx0ZXItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQndGV4dCc6IC9cXFNbXFxzXFxTXSovLFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbXVsdGlsaW5lLXBsYWluLXRleHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKilbXFx3XFwtIy5dK1xcLltcXHQgXSopKD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWFya3VwJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKik8LisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9LFxuXHRcdCdkb2N0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxcbilbXFx0IF0qKWRvY3R5cGUoPzogLispPy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIFRoaXMgaGFuZGxlIGFsbCBjb25kaXRpb25hbCBhbmQgbG9vcCBrZXl3b3Jkc1xuXHRcdCdmbG93LWNvbnRyb2wnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OmNhc2V8ZGVmYXVsdHxlYWNofGVsc2V8aWZ8dW5sZXNzfHdoZW58d2hpbGUpXFxiKD86IC4rKT8vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2VhY2gnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15lYWNoIC4rPyBpblxcYi8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGIoPzplYWNofGluKVxcYi8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdicmFuY2gnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oPzpjYXNlfGRlZmF1bHR8ZWxzZXxpZnx1bmxlc3N8d2hlbnx3aGlsZSlcXGIvLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzphcHBlbmR8YmxvY2t8ZXh0ZW5kc3xpbmNsdWRlfHByZXBlbmQpXFxiLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdtaXhpbic6IFtcblx0XHRcdC8vIERlY2xhcmF0aW9uXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopbWl4aW4gLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXm1peGluLyxcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxccypcXCh8XFxzKiQpLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLC5dL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gVXNhZ2Vcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyheW1xcdCBdKilcXCsuKy9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwrXFx3Ky8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3NjcmlwdCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpzY3JpcHQoPzooPzomW14oXSspP1xcKFteKV0rXFwpKSpbXFx0IF0pLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fSxcblxuXHRcdCdwbGFpbi10ZXh0Jzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/IS0pW1xcd1xcLSMuXSpbXFx3XFwtXSg/Oig/OiZbXihdKyk/XFwoW14pXStcXCkpKlxcLz9bXFx0IF0pLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/IS0pW1xcd1xcLSMuXSpbXFx3XFwtXSg/Oig/OiZbXihdKyk/XFwoW14pXStcXCkpKlxcLz86Py9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0cmlidXRlcyc6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvJlteKF0rXFwoW14pXStcXCkvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKD8hXFxzKSkoPzpcXHtbXn1dKlxcfXxbXiwpXFxyXFxuXSspLyxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2F0dHItbmFtZSc6IC9bXFx3LV0rKD89XFxzKiE/PXxcXHMqWywpXSkvLFxuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyE9KCksXSsvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdCdhdHRyLWlkJzogLyNbXFx3XFwtXSsvLFxuXHRcdFx0XHQnYXR0ci1jbGFzcyc6IC9cXC5bXFx3XFwtXSsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29kZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/Oi18IT89KSkuKy9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncHVuY3R1YXRpb24nOiAvWy5cXC0hPXxdKy9cblx0fTtcblxuXHR2YXIgZmlsdGVyX3BhdHRlcm4gPSAvKF4oW1xcdCBdKikpOjxmaWx0ZXJfbmFtZT4oPzooPzpcXHI/XFxufFxccig/IVxcbikpKD86XFwyW1xcdCBdLit8XFxzKj8oPz1cXHI/XFxufFxccikpKSsvLnNvdXJjZTtcblxuXHQvLyBOb24gZXhoYXVzdGl2ZSBsaXN0IG9mIGF2YWlsYWJsZSBmaWx0ZXJzIGFuZCBhc3NvY2lhdGVkIGxhbmd1YWdlc1xuXHR2YXIgZmlsdGVycyA9IFtcblx0XHR7IGZpbHRlcjogJ2F0cGwnLCBsYW5ndWFnZTogJ3R3aWcnIH0sXG5cdFx0eyBmaWx0ZXI6ICdjb2ZmZWUnLCBsYW5ndWFnZTogJ2NvZmZlZXNjcmlwdCcgfSxcblx0XHQnZWpzJyxcblx0XHQnaGFuZGxlYmFycycsXG5cdFx0J2xlc3MnLFxuXHRcdCdsaXZlc2NyaXB0Jyxcblx0XHQnbWFya2Rvd24nLFxuXHRcdHsgZmlsdGVyOiAnc2FzcycsIGxhbmd1YWdlOiAnc2NzcycgfSxcblx0XHQnc3R5bHVzJ1xuXHRdO1xuXHR2YXIgYWxsX2ZpbHRlcnMgPSB7fTtcblx0Zm9yICh2YXIgaSA9IDAsIGwgPSBmaWx0ZXJzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdHZhciBmaWx0ZXIgPSBmaWx0ZXJzW2ldO1xuXHRcdGZpbHRlciA9IHR5cGVvZiBmaWx0ZXIgPT09ICdzdHJpbmcnID8geyBmaWx0ZXI6IGZpbHRlciwgbGFuZ3VhZ2U6IGZpbHRlciB9IDogZmlsdGVyO1xuXHRcdGlmIChQcmlzbS5sYW5ndWFnZXNbZmlsdGVyLmxhbmd1YWdlXSkge1xuXHRcdFx0YWxsX2ZpbHRlcnNbJ2ZpbHRlci0nICsgZmlsdGVyLmZpbHRlcl0gPSB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChmaWx0ZXJfcGF0dGVybi5yZXBsYWNlKCc8ZmlsdGVyX25hbWU+JywgZnVuY3Rpb24gKCkgeyByZXR1cm4gZmlsdGVyLmZpbHRlcjsgfSksICdtJyksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdmaWx0ZXItbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eOltcXHctXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd0ZXh0Jzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1xcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0XHRhbGlhczogW2ZpbHRlci5sYW5ndWFnZSwgJ2xhbmd1YWdlLScgKyBmaWx0ZXIubGFuZ3VhZ2VdLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbZmlsdGVyLmxhbmd1YWdlXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwdWcnLCAnZmlsdGVyJywgYWxsX2ZpbHRlcnMpO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldCA9IHtcblx0XHQnaGVyZWRvYyc6IFtcblx0XHRcdC8vIE1hdGNoZXMgdGhlIGNvbnRlbnQgb2YgYSBxdW90ZWQgaGVyZWRvYyBzdHJpbmcgKHN1YmplY3QgdG8gaW50ZXJwb2xhdGlvbilcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhAXFwoXCIoW15cIlxcclxcblxcLyk6XSspXCIoPzpcXC9bbnJ0cyR1TF0qKT9cXCkuKig/Olxccj9cXG58XFxyKSkoPzouKig/Olxccj9cXG58XFxyKD8hXFxuKSkpKj9bIFxcdF0qKD86XFx8WyBcXHRdKik/KD86LVsgXFx0XSopP1xcMi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0Ly8gTWF0Y2hlcyB0aGUgZW5kIHRhZ1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC8oPz1cXFMpLipcXFMoPz0gKiQpL1xuXHRcdFx0XHRcdC8vIFNlZSBpbnRlcnBvbGF0aW9uIGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBNYXRjaGVzIHRoZSBjb250ZW50IG9mIGFuIHVucXVvdGVkIGhlcmVkb2Mgc3RyaW5nIChubyBpbnRlcnBvbGF0aW9uKVxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKEBcXCgoW15cIlxcclxcblxcLyk6XSspKD86XFwvW25ydHMkdUxdKik/XFwpLiooPzpcXHI/XFxufFxccikpKD86LiooPzpcXHI/XFxufFxccig/IVxcbikpKSo/WyBcXHRdKig/OlxcfFsgXFx0XSopPyg/Oi1bIFxcdF0qKT9cXDIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0Ly8gTWF0Y2hlcyB0aGUgZW5kIHRhZ1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC8oPz1cXFMpLipcXFMoPz0gKiQpL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gTWF0Y2hlcyB0aGUgc3RhcnQgdGFnIG9mIGhlcmVkb2Mgc3RyaW5nc1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvQFxcKFwiPyg/OlteXCJcXHJcXG5cXC8pOl0rKVwiPyg/OlxcL1tucnRzJHVMXSopP1xcKS8sXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpLis/KD89XFwpKS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbXVsdGlsaW5lLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQncmVnZXgnOiB7XG5cdFx0XHQvLyBNdXN0IGJlIHByZWZpeGVkIHdpdGggdGhlIGtleXdvcmQgXCJub2RlXCIgb3IgYSBub24td29yZCBjaGFyXG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcYm5vZGVcXHMrfFt+PVxcKFxcW1xceyxdXFxzKnxbPStdPlxccyp8XlxccyopKVxcLyg/OlteXFwvXFxcXF18XFxcXFtcXHNcXFNdKStcXC8oPzpbaW14XStcXGJ8XFxCKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEV4dGVuZGVkIHJlZ2V4ZXMgbXVzdCBoYXZlIHRoZSB4IGZsYWcuIFRoZXkgY2FuIGNvbnRhaW4gc2luZ2xlLWxpbmUgY29tbWVudHMuXG5cdFx0XHRcdCdleHRlbmRlZC1yZWdleCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcLyg/OlteXFwvXFxcXF18XFxcXFtcXHNcXFNdKStcXC9baW1dKnhbaW1dKiQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2NvbW1lbnQnOiAvIy4qL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHQvLyBBbGxvdyBmb3Igb25lIG5lc3RlZCBsZXZlbCBvZiBkb3VibGUgcXVvdGVzIGluc2lkZSBpbnRlcnBvbGF0aW9uXG5cdFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcJFxceyg/OlteJ1wifV18KFtcIiddKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyKStcXH18XFwkKD8hXFx7KXwoPyFcXDEpW15cXFxcJF18XFxcXFtcXHNcXFNdKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkb3VibGUtcXVvdGVkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXCJbXFxzXFxTXSpcIiQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCQoPzo6Oik/XFx3Kyg/Ojo6XFx3KykqLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOjovXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYXR0ci1uYW1lJzogLyg/OlxcYlxcdyt8XFwqKSg/PVxccyo9PikvLFxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC4pKD8hXFxkKVxcdysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmNvbnRhaW58ZGVidWd8ZXJyfGZhaWx8aW5jbHVkZXxpbmZvfG5vdGljZXxyZWFsaXplfHJlcXVpcmV8dGFnfHdhcm5pbmcpXFxifFxcYig/IVxcZClcXHcrKD89XFwoKS9cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mXFxkXSt8XFxkKyg/OlxcLlxcZCspPyg/OmUtP1xcZCspPylcXGIvaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0Ly8gSW5jbHVkZXMgd29yZHMgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2Vcblx0XHQna2V5d29yZCc6IC9cXGIoPzphcHBsaWNhdGlvbnxhdHRyfGNhc2V8Y2xhc3N8Y29uc3VtZXN8ZGVmYXVsdHxkZWZpbmV8ZWxzZXxlbHNpZnxmdW5jdGlvbnxpZnxpbXBvcnR8aW5oZXJpdHN8bm9kZXxwcml2YXRlfHByb2R1Y2VzfHR5cGV8dW5kZWZ8dW5sZXNzKVxcYi8sXG5cdFx0J2RhdGF0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkFueXxBcnJheXxCb29sZWFufENhbGxhYmxlfENhdGFsb2dlbnRyeXxDbGFzc3xDb2xsZWN0aW9ufERhdGF8RGVmYXVsdHxFbnVtfEZsb2F0fEhhc2h8SW50ZWdlcnxOb3RVbmRlZnxOdW1lcmljfE9wdGlvbmFsfFBhdHRlcm58UmVnZXhwfFJlc291cmNlfFJ1bnRpbWV8U2NhbGFyfFN0cmluZ3xTdHJ1Y3R8VHVwbGV8VHlwZXxVbmRlZnxWYXJpYW50KVxcYi8sXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC89Wz1+Pl0/fCFbPX5dP3w8KD86PFxcfD98Wz1+fC1dKT98Pls+PV0/fC0+P3x+PnxcXHw+Pz4/fFsqXFwvJSs/XXxcXGIoPzphbmR8aW58b3IpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXXt9KCkuLDtdfDorL1xuXHR9O1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uID0gW1xuXHRcdHtcblx0XHRcdC8vIEFsbG93IGZvciBvbmUgbmVzdGVkIGxldmVsIG9mIGJyYWNlcyBpbnNpZGUgaW50ZXJwb2xhdGlvblxuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwkXFx7KD86W14nXCJ7fV18XFx7W159XSpcXH18KFtcIiddKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyKStcXH0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc2hvcnQtdmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0Ly8gTmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50IHdyb25nIGhpZ2hsaWdodGluZyBvZiBmdW5jdGlvbnNcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspKD8hXFx3K1xcKCkoPzo6Oik/XFx3Kyg/Ojo6XFx3KykqLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLnB1cHBldFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwkKD86OjopP1xcdysoPzo6OlxcdyspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0fVxuXHRcdH1cblx0XTtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldFsnaGVyZWRvYyddWzBdLmluc2lkZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcblx0UHJpc20ubGFuZ3VhZ2VzLnB1cHBldFsnc3RyaW5nJ10uaW5zaWRlWydkb3VibGUtcXVvdGVkJ10uaW5zaWRlLmludGVycG9sYXRpb24gPSBpbnRlcnBvbGF0aW9uO1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vIGh0dHBzOi8vYWdyYWVmLmdpdGh1Yi5pby9wdXJlLWRvY3MvcHVyZS5odG1sI2xleGljYWwtbWF0dGVyc1xuXG5cdFByaXNtLmxhbmd1YWdlcy5wdXJlID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC8jIS4rL1xuXHRcdF0sXG5cdFx0J2lubGluZS1sYW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyU8W1xcc1xcU10rPyU+Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnbGFuZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4lPCAqKS1cXCotLis/LVxcKi0vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eJTwuKnwlPiQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdC8vIFRoZSBsb29rLWJlaGluZCBwcmV2ZW50cyB3cm9uZyBoaWdobGlnaHRpbmcgb2YgdGhlIC4uIG9wZXJhdG9yXG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcLlxcLik/KSg/OlxcYig/OmluZnxuYW4pXFxifFxcYjB4W1xcZGEtZl0rfCg/OlxcYig/OjBiKT9cXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/TD8pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpOVUxMfGFuc3xicmVha3xidHxjYXNlfGNhdGNofGNkfGNsZWFyfGNvbnN0fGRlZnxkZWx8ZHVtcHxlbHNlfGVuZHxleGl0fGV4dGVybnxmYWxzZXxmb3JjZXxoZWxwfGlmfGluZml4W2xyXT98aW50ZXJmYWNlfGxldHxsc3xtZW18bmFtZXNwYWNlfG5vbmZpeHxvZnxvdGhlcndpc2V8b3V0Zml4fG92ZXJyaWRlfHBvc3RmaXh8cHJlZml4fHByaXZhdGV8cHVibGljfHB3ZHxxdWl0fHJ1bnxzYXZlfHNob3d8c3RhdHN8dGhlbnx0aHJvd3x0cmFjZXx0cnVlfHR5cGV8dW5kZXJyaWRlfHVzaW5nfHdoZW58d2l0aClcXGIvLFxuXHRcdCdmdW5jdGlvbic6IC9cXGIoPzphYnN8YWRkXyg/OmFkZHJ8Y29uc3RkZWZ8KD86ZnVuZGVmfGludGVyZmFjZXxtYWNkZWZ8dHlwZWRlZikoPzpfYXQpP3x2YXJkZWYpfGFsbHxhbnl8YXBwbHA/fGFyaXR5fGJpZ2ludHA/fGJsb2IoPzpfY3JjfF9zaXplfHApP3xib29scD98Ynl0ZV9jP3N0cmluZyg/Ol9wb2ludGVyKT98Ynl0ZV8oPzptYXRyaXh8cG9pbnRlcil8Y2FsbG9jfGNhdHxjYXRtYXB8Y2VpbHxjaGFyW3BzXT98Y2hlY2tfcHRydGFnfGNocnxjbGVhcl9zZW50cnl8Y2xlYXJzeW18Y2xvc3VyZXA/fGNtYXRyaXhwP3xjb2xzP3xjb2xjYXQoPzptYXApP3xjb2xtYXB8Y29scmV2fGNvbHZlY3Rvcig/OnB8c2VxKT98Y29tcGxleCg/Ol9mbG9hdF8oPzptYXRyaXh8cG9pbnRlcil8X21hdHJpeCg/Ol92aWV3KT98X3BvaW50ZXJ8cCk/fGNvbmp8Y29va2VkcD98Y3N0fGNzdHJpbmcoPzpfKD86ZHVwfGxpc3R8dmVjdG9yKSk/fGN1cnJ5Mz98Y3ljbGVuP3xkZWxfKD86Y29uc3RkZWZ8ZnVuZGVmfGludGVyZmFjZXxtYWNkZWZ8dHlwZWRlZnx2YXJkZWYpfGRlbGV0ZXxkaWFnKD86bWF0KT98ZGltfGRtYXRyaXhwP3xkb3xkb3VibGUoPzpfbWF0cml4KD86X3ZpZXcpP3xfcG9pbnRlcnxwKT98ZG93aXRoMz98ZHJvcHxkcm9wd2hpbGV8ZXZhbCg/OmNtZCk/fGV4YWN0cHxmaWx0ZXJ8Zml4fGZpeGl0eXxmbGlwfGZsb2F0KD86X21hdHJpeHxfcG9pbnRlcil8Zmxvb3J8Zm9sZFtscl0xP3xmcmFjfGZyZWV8ZnVucD98ZnVuY3Rpb25wP3xnY2R8Z2V0KD86Xyg/OmJ5dGV8Y29uc3RkZWZ8ZG91YmxlfGZsb2F0fGZ1bmRlZnxpbnQoPzo2NCk/fGludGVyZmFjZSg/Ol90eXBlZGVmKT98bG9uZ3xtYWNkZWZ8cG9pbnRlcnxwdHJ0YWd8c2VudHJ5fHNob3J0fHN0cmluZ3x0eXBlZGVmfHZhcmRlZikpP3xnbG9ic3ltfGhhc2h8aGVhZHxpZHxpbXxpbWF0cml4cD98aW5kZXh8aW5leGFjdHB8aW5mcHxpbml0fGluc2VydHxpbnQoPzpfbWF0cml4KD86X3ZpZXcpP3xfcG9pbnRlcnxwKT98aW50NjRfKD86bWF0cml4fHBvaW50ZXIpfGludGVnZXJwP3xpdGVyYXRlbj98aXRlcndoaWxlfGpvaW58a2V5cz98bGFtYmRhcD98bGFzdCg/OmVycig/OnBvcyk/KT98bGNkfGxpc3RbMnBdP3xsaXN0bWFwfG1ha2VfcHRydGFnfG1hbGxvY3xtYXB8bWF0Y2F0fG1hdHJpeHA/fG1heHxtZW1iZXJ8bWlufG5hbnB8bmFyZ3N8bm1hdHJpeHA/fG51bGx8bnVtYmVycD98b3JkfHBhY2soPzplZCk/fHBvaW50ZXIoPzpfY2FzdHxfdGFnfF90eXBlfHApP3xwb3d8cHJlZHxwdHJ0YWd8cHV0KD86Xyg/OmJ5dGV8ZG91YmxlfGZsb2F0fGludCg/OjY0KT98bG9uZ3xwb2ludGVyfHNob3J0fHN0cmluZykpP3xyYXRpb25hbHA/fHJlfHJlYWxwP3xyZWFsbG9jfHJlY29yZHA/fHJlZGltfHJlZHVjZSg/Ol93aXRoKT98cmVmcD98cmVwZWF0bj98cmV2ZXJzZXxybGlzdHA/fHJvdW5kfHJvd3M/fHJvd2NhdCg/Om1hcCk/fHJvd21hcHxyb3dyZXZ8cm93dmVjdG9yKD86cHxzZXEpP3xzYW1lfHNjYW5bbHJdMT98c2VudHJ5fHNnbnxzaG9ydF8oPzptYXRyaXh8cG9pbnRlcil8c2xpY2V8c21hdHJpeHA/fHNvcnR8c3BsaXR8c3RyfHN0cmNhdHxzdHJlYW18c3RyaWRlfHN0cmluZyg/Ol8oPzpkdXB8bGlzdHx2ZWN0b3IpfHApP3xzdWJkaWFnKD86bWF0KT98c3VibWF0fHN1YnNlcTI/fHN1YnN0cnxzdWNjfHN1cGRpYWcoPzptYXQpP3xzeW1ib2xwP3x0YWlsfHRha2V8dGFrZXdoaWxlfHRodW5rcD98dHJhbnNwb3NlfHRydW5jfHR1cGxlcD98dHlwZXB8dWJ5dGV8dWludCg/OjY0KT98dWxvbmd8dW5jdXJyeTM/fHVucmVmfHVuemlwMz98dXBkYXRlfHVzaG9ydHx2YWxzP3x2YXJwP3x2ZWN0b3IoPzpwfHNlcSk/fHZvaWR8emlwMz98emlwd2l0aDM/KVxcYi8sXG5cdFx0J3NwZWNpYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiX19bYS16XStfX1xcYi9pLFxuXHRcdFx0YWxpYXM6ICdidWlsdGluJ1xuXHRcdH0sXG5cdFx0Ly8gQW55IGNvbWJpbmF0aW9uIG9mIG9wZXJhdG9yIGNoYXJzIGNhbiBiZSBhbiBvcGVyYXRvclxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1taXNsZWFkaW5nLWNoYXJhY3Rlci1jbGFzc1xuXHRcdCdvcGVyYXRvcic6IC8oPzpbIVwiIyQlJicqKyxcXC0uXFwvOjw9Pj9AXFxcXF5gfH5cXHUwMGExLVxcdTAwYmZcXHUwMGQ3LVxcdTAwZjdcXHUyMGQwLVxcdTJiZmZdfFxcYl8rXFxiKSt8XFxiKD86YW5kfGRpdnxtb2R8bm90fG9yKVxcYi8sXG5cdFx0Ly8gRklYTUU6IEhvdyBjYW4gd2UgcHJldmVudCB8IGFuZCAsIHRvIGJlIGhpZ2hsaWdodGVkIGFzIG9wZXJhdG9yIHdoZW4gdGhleSBhcmUgdXNlZCBhbG9uZT9cblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07LHxdL1xuXHR9O1xuXG5cdHZhciBpbmxpbmVMYW5ndWFnZXMgPSBbXG5cdFx0J2MnLFxuXHRcdHsgbGFuZzogJ2MrKycsIGFsaWFzOiAnY3BwJyB9LFxuXHRcdCdmb3J0cmFuJ1xuXHRdO1xuXHR2YXIgaW5saW5lTGFuZ3VhZ2VSZSA9IC8lPCAqLVxcKi0gKjxsYW5nPlxcZCogKi1cXCotW1xcc1xcU10rPyU+Ly5zb3VyY2U7XG5cblx0aW5saW5lTGFuZ3VhZ2VzLmZvckVhY2goZnVuY3Rpb24gKGxhbmcpIHtcblx0XHR2YXIgYWxpYXMgPSBsYW5nO1xuXHRcdGlmICh0eXBlb2YgbGFuZyAhPT0gJ3N0cmluZycpIHtcblx0XHRcdGFsaWFzID0gbGFuZy5hbGlhcztcblx0XHRcdGxhbmcgPSBsYW5nLmxhbmc7XG5cdFx0fVxuXHRcdGlmIChQcmlzbS5sYW5ndWFnZXNbYWxpYXNdKSB7XG5cdFx0XHR2YXIgbyA9IHt9O1xuXHRcdFx0b1snaW5saW5lLWxhbmctJyArIGFsaWFzXSA9IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGlubGluZUxhbmd1YWdlUmUucmVwbGFjZSgnPGxhbmc+JywgbGFuZy5yZXBsYWNlKC8oWy4rKj9cXC9cXFxcKCl7fVxcW1xcXV0pL2csICdcXFxcJDEnKSksICdpJyksXG5cdFx0XHRcdGluc2lkZTogUHJpc20udXRpbC5jbG9uZShQcmlzbS5sYW5ndWFnZXMucHVyZVsnaW5saW5lLWxhbmcnXS5pbnNpZGUpXG5cdFx0XHR9O1xuXHRcdFx0b1snaW5saW5lLWxhbmctJyArIGFsaWFzXS5pbnNpZGUucmVzdCA9IFByaXNtLnV0aWwuY2xvbmUoUHJpc20ubGFuZ3VhZ2VzW2FsaWFzXSk7XG5cdFx0XHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwdXJlJywgJ2lubGluZS1sYW5nJywgbyk7XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBDIGlzIHRoZSBkZWZhdWx0IGlubGluZSBsYW5ndWFnZVxuXHRpZiAoUHJpc20ubGFuZ3VhZ2VzLmMpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXMucHVyZVsnaW5saW5lLWxhbmcnXS5pbnNpZGUucmVzdCA9IFByaXNtLnV0aWwuY2xvbmUoUHJpc20ubGFuZ3VhZ2VzLmMpO1xuXHR9XG5cbn0oUHJpc20pKTtcblxuLypcbk9yaWdpbmFsIENvZGUgYnkgQmFzIEdyb290aGVkZGVcbiEhTUFOWSBUSEFOS1MhISBJIG5ldmVyIHdvdWxkIGhhdmUgbWFkZSB0aGlzLCByZWdleCBhbmQgbWUgd2lsbCBuZXZlciBiZSBiZXN0IGZyaWVuZHMgOylcbj09PiBodHRwczovL2NvZGVwZW4uaW8vSW1hZ2luZVByb2dyYW1taW5nL2RldGFpbHMvSll5ZEJ5L1xuc2xpZ2h0bHkgY2hhbmdlZCB0byBwYXNzIGFsbCB0ZXN0c1xuKi9cblxuXG4vLyBQdXJlQmFzaWMgc3VwcG9ydCwgc3RlYWwgc3R1ZmYgZnJvbSBhbnNpLWNcblByaXNtLmxhbmd1YWdlcy5wdXJlYmFzaWMgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiAvOy4qLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWxpZ258YW5kfGFzfGJyZWFrfGNhbGxkZWJ1Z2dlcnxjYXNlfGNvbXBpbGVyY2FzZXxjb21waWxlcmRlZmF1bHR8Y29tcGlsZXJlbHNlfGNvbXBpbGVyZWxzZWlmfGNvbXBpbGVyZW5kaWZ8Y29tcGlsZXJlbmRzZWxlY3R8Y29tcGlsZXJlcnJvcnxjb21waWxlcmlmfGNvbXBpbGVyc2VsZWN0fGNvbnRpbnVlfGRhdGF8ZGF0YXNlY3Rpb258ZGVidWd8ZGVidWdsZXZlbHxkZWNsYXJlfGRlY2xhcmVjfGRlY2xhcmVjZGxsfGRlY2xhcmVkbGx8ZGVjbGFyZW1vZHVsZXxkZWZhdWx0fGRlZmluZXxkaW18ZGlzYWJsZWFzbXxkaXNhYmxlZGVidWdnZXJ8ZGlzYWJsZWV4cGxpY2l0fGVsc2V8ZWxzZWlmfGVuYWJsZWFzbXxlbmFibGVkZWJ1Z2dlcnxlbmFibGVleHBsaWNpdHxlbmR8ZW5kZGF0YXNlY3Rpb258ZW5kZGVjbGFyZW1vZHVsZXxlbmRlbnVtZXJhdGlvbnxlbmRpZnxlbmRpbXBvcnR8ZW5kaW50ZXJmYWNlfGVuZG1hY3JvfGVuZG1vZHVsZXxlbmRwcm9jZWR1cmV8ZW5kc2VsZWN0fGVuZHN0cnVjdHVyZXxlbmRzdHJ1Y3R1cmV1bmlvbnxlbmR3aXRofGVudW1lcmF0aW9ufGV4dGVuZHN8ZmFrZXJldHVybnxmb3J8Zm9yZWFjaHxmb3JldmVyfGdsb2JhbHxnb3N1Ynxnb3RvfGlmfGltcG9ydHxpbXBvcnRjfGluY2x1ZGViaW5hcnl8aW5jbHVkZWZpbGV8aW5jbHVkZXBhdGh8aW50ZXJmYWNlfG1hY3JvfG1vZHVsZXxuZXdsaXN0fG5ld21hcHxuZXh0fG5vdHxvcnxwcm9jZWR1cmV8cHJvY2VkdXJlY3xwcm9jZWR1cmVjZGxsfHByb2NlZHVyZWRsbHxwcm9jZWR1cmVyZXR1cm58cHJvdGVjdGVkfHByb3RvdHlwZXxwcm90b3R5cGVjfHJlYWR8cmVkaW18cmVwZWF0fHJlc3RvcmV8cmV0dXJufHJ1bnRpbWV8c2VsZWN0fHNoYXJlZHxzdGF0aWN8c3RlcHxzdHJ1Y3R1cmV8c3RydWN0dXJldW5pb258c3dhcHx0aHJlYWRlZHx0b3x1bnRpbHx3ZW5kfHdoaWxlfHdpdGh8eGluY2x1ZGVmaWxlfHhvcilcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPzpcXC5cXHcrKT9cXHMqKD89XFwoKS8sXG5cdCdudW1iZXInOiAvKD86XFwkW1xcZGEtZl0rfFxcYi0/KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylcXGIvaSxcblx0J29wZXJhdG9yJzogLyg/OkBcXCo/fFxcP3xcXCopXFx3K1xcJD98LVs+LV0/fFxcK1xcKz98IT0/fDw8Pz0/fD4+Pz0/fD09P3wmJj98XFx8P1xcfHxbfl4lPyovQF0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHVyZWJhc2ljJywgJ2tleXdvcmQnLCB7XG5cdCd0YWcnOiAvI1xcdytcXCQ/Lyxcblx0J2FzbSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSEuKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd0YWcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NvbW1lbnQnOiAvOy4qLyxcblx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1wiJ2BdKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBBbm9ueW1vdXMgbGFiZWwgcmVmZXJlbmNlcywgaS5lLjogam1wIEBiXG5cdFx0XHQnbGFiZWwtcmVmZXJlbmNlLWFub255bW91cyc6IHtcblx0XHRcdFx0cGF0dGVybjogLyghXFxzKmpbYS16XStcXHMrKUBbZmJdL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnZmFzbS1sYWJlbCdcblx0XHRcdH0sXG5cdFx0XHQvLyBOYW1lZCBsYWJlbCByZWZlcmVuY2UsIGkuZS46IGpuZSBsYWJlbDFcblx0XHRcdCdsYWJlbC1yZWZlcmVuY2UtYWRkcmVzc2VkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCFcXHMqalthLXpdK1xccyspW0EtWi5fPyRAXVtcXHcuPyRAfiNdKi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Zhc20tbGFiZWwnXG5cdFx0XHR9LFxuXHRcdFx0J2tleXdvcmQnOiBbXG5cdFx0XHRcdC9cXGIoPzpleHRlcm58Z2xvYmFsKVxcYlteO1xcclxcbl0qL2ksXG5cdFx0XHRcdC9cXGIoPzpDUFV8REVGQVVMVHxGTE9BVClcXGIuKi9cblx0XHRcdF0sXG5cdFx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSohXFxzKilbXFxkYS16XSsoPz1cXHN8JCkvaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnZnVuY3Rpb24taW5saW5lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKDpcXHMqKVtcXGRhLXpdKyg/PVxccykvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnbGFiZWwnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSohXFxzKilbQS1aYS16Ll8/JEBdW1xcdy4/JEB+I10qKD89OikvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmYXNtLWxhYmVsJ1xuXHRcdFx0fSxcblx0XHRcdCdyZWdpc3Rlcic6IC9cXGIoPzpzdFxcZHxbeHl6XW1tXFxkXFxkP3xbY2R0XXJcXGR8clxcZFxcZD9bYndkXT98W2VyXT9bYWJjZF14fFthYmNkXVtobF18W2VyXT8oPzpicHxkaXxzaXxzcCl8W2NkZWZnc11zfG1tXFxkKylcXGIvaSxcblx0XHRcdCdudW1iZXInOiAvKD86XFxifC18KD89XFwkKSkoPzowW2h4XSg/OltcXGRhLWZdKlxcLik/W1xcZGEtZl0rKD86cFsrLV0/XFxkKyk/fFxcZFtcXGRhLWZdK1toeF18XFwkXFxkW1xcZGEtZl0qfDBbb3FdWzAtN10rfFswLTddK1tvcV18MFtieV1bMDFdK3xbMDFdK1tieV18MFtkdF1cXGQrfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpcXC4/ZVsrLV0/XFxkKyk/W2R0XT8pXFxiL2ksXG5cdFx0XHQnb3BlcmF0b3InOiAvW1xcW1xcXSorXFwtLyU8Pj0mfCQhLC46XS9cblx0XHR9XG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnB1cmViYXNpY1snY2xhc3MtbmFtZSddO1xuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5wdXJlYmFzaWNbJ2Jvb2xlYW4nXTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBiZmFzbSA9IFByaXNtLmxhbmd1YWdlc1sncHVyZWJhc2ljJ107XG5cblByaXNtLmxhbmd1YWdlcy5wdXJlc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnaGFza2VsbCcsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YWRvfGNhc2V8Y2xhc3N8ZGF0YXxkZXJpdmV8ZG98ZWxzZXxmb3JhbGx8aWZ8aW58aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bW9kdWxlfG5ld3R5cGV8b2Z8cHJpbWl0aXZlfHRoZW58dHlwZXx3aGVyZSlcXGJ8XHUyMjAwLyxcblxuXHQnaW1wb3J0LXN0YXRlbWVudCc6IHtcblx0XHQvLyBUaGUgaW1wb3J0ZWQgb3IgaGlkZGVuIG5hbWVzIGFyZSBub3QgaW5jbHVkZWQgaW4gdGhpcyBpbXBvcnRcblx0XHQvLyBzdGF0ZW1lbnQuIFRoaXMgaXMgYmVjYXVzZSB3ZSB3YW50IHRvIGhpZ2hsaWdodCB0aG9zZSBleGFjdGx5IGxpa2Vcblx0XHQvLyB3ZSBkbyBmb3IgdGhlIG5hbWVzIGluIHRoZSBwcm9ncmFtLlxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopaW1wb3J0XFxzK1tBLVpdW1xcdyddKig/OlxcLltBLVpdW1xcdyddKikqKD86XFxzK2FzXFxzK1tBLVpdW1xcdyddKig/OlxcLltBLVpdW1xcdyddKikqKT8oPzpcXHMraGlkaW5nXFxiKT8vbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8aGlkaW5nfGltcG9ydClcXGIvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cblx0Ly8gVGhlc2UgYXJlIGJ1aWx0aW4gZnVuY3Rpb25zIG9ubHkuIENvbnN0cnVjdG9ycyBhcmUgaGlnaGxpZ2h0ZWQgbGF0ZXIgYXMgYSBjb25zdGFudC5cblx0J2J1aWx0aW4nOiAvXFxiKD86YWJzdXJkfGFkZHxhcHxhcHBlbmR8YXBwbHl8YmV0d2VlbnxiaW5kfGJvdHRvbXxjbGFtcHxjb21wYXJlfGNvbXBhcmluZ3xjb21wb3NlfGNvbmp8Y29uc3R8ZGVncmVlfGRpc2NhcmR8ZGlzanxkaXZ8ZXF8ZmxhcHxmbGlwfGdjZHxpZGVudGl0eXxpZk18am9pbnxsY218bGlmdEExfGxpZnRNMXxtYXB8bWF4fG1lbXB0eXxtaW58bW9kfG11bHxuZWdhdGV8bm90fG5vdEVxfG9uZXxvdGhlcndpc2V8cmVjaXB8c2hvd3xzdWJ8dG9wfHVuaXR8dW5sZXNzfHVubGVzc018dm9pZHx3aGVufHdoZW5NfHplcm8pXFxiLyxcblxuXHQnb3BlcmF0b3InOiBbXG5cdFx0Ly8gSW5maXggb3BlcmF0b3JzXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmhhc2tlbGwub3BlcmF0b3JbMF0sXG5cdFx0Ly8gQVNDSUkgb3BlcmF0b3JzXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmhhc2tlbGwub3BlcmF0b3JbMl0sXG5cdFx0Ly8gQWxsIFVURjE2IFVuaWNvZGUgb3BlcmF0b3Igc3ltYm9sc1xuXHRcdC8vIFRoaXMgcmVnZXggaXMgZXF1aXZhbGVudCB0byAvKD89W1xceDgwLVxcdUZGRkZdKVtcXHB7Z2M9TWF0aF9TeW1ib2x9XFxwe2djPUN1cnJlbmN5X1N5bWJvbH1cXHB7TW9kaWZpZXJfU3ltYm9sfVxccHtPdGhlcl9TeW1ib2x9XS91XG5cdFx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8zMDA2IGZvciBtb3JlIGRldGFpbHMuXG5cdFx0L1tcXHhhMi1cXHhhNlxceGE4XFx4YTlcXHhhY1xceGFlLVxceGIxXFx4YjRcXHhiOFxceGQ3XFx4ZjdcXHUwMmMyLVxcdTAyYzVcXHUwMmQyLVxcdTAyZGZcXHUwMmU1LVxcdTAyZWJcXHUwMmVkXFx1MDJlZi1cXHUwMmZmXFx1MDM3NVxcdTAzODRcXHUwMzg1XFx1MDNmNlxcdTA0ODJcXHUwNThkLVxcdTA1OGZcXHUwNjA2LVxcdTA2MDhcXHUwNjBiXFx1MDYwZVxcdTA2MGZcXHUwNmRlXFx1MDZlOVxcdTA2ZmRcXHUwNmZlXFx1MDdmNlxcdTA3ZmVcXHUwN2ZmXFx1MDlmMlxcdTA5ZjNcXHUwOWZhXFx1MDlmYlxcdTBhZjFcXHUwYjcwXFx1MGJmMy1cXHUwYmZhXFx1MGM3ZlxcdTBkNGZcXHUwZDc5XFx1MGUzZlxcdTBmMDEtXFx1MGYwM1xcdTBmMTNcXHUwZjE1LVxcdTBmMTdcXHUwZjFhLVxcdTBmMWZcXHUwZjM0XFx1MGYzNlxcdTBmMzhcXHUwZmJlLVxcdTBmYzVcXHUwZmM3LVxcdTBmY2NcXHUwZmNlXFx1MGZjZlxcdTBmZDUtXFx1MGZkOFxcdTEwOWVcXHUxMDlmXFx1MTM5MC1cXHUxMzk5XFx1MTY2ZFxcdTE3ZGJcXHUxOTQwXFx1MTlkZS1cXHUxOWZmXFx1MWI2MS1cXHUxYjZhXFx1MWI3NC1cXHUxYjdjXFx1MWZiZFxcdTFmYmYtXFx1MWZjMVxcdTFmY2QtXFx1MWZjZlxcdTFmZGQtXFx1MWZkZlxcdTFmZWQtXFx1MWZlZlxcdTFmZmRcXHUxZmZlXFx1MjA0NFxcdTIwNTJcXHUyMDdhLVxcdTIwN2NcXHUyMDhhLVxcdTIwOGNcXHUyMGEwLVxcdTIwYmZcXHUyMTAwXFx1MjEwMVxcdTIxMDMtXFx1MjEwNlxcdTIxMDhcXHUyMTA5XFx1MjExNFxcdTIxMTYtXFx1MjExOFxcdTIxMWUtXFx1MjEyM1xcdTIxMjVcXHUyMTI3XFx1MjEyOVxcdTIxMmVcXHUyMTNhXFx1MjEzYlxcdTIxNDAtXFx1MjE0NFxcdTIxNGEtXFx1MjE0ZFxcdTIxNGZcXHUyMThhXFx1MjE4YlxcdTIxOTAtXFx1MjMwN1xcdTIzMGMtXFx1MjMyOFxcdTIzMmItXFx1MjQyNlxcdTI0NDAtXFx1MjQ0YVxcdTI0OWMtXFx1MjRlOVxcdTI1MDAtXFx1Mjc2N1xcdTI3OTQtXFx1MjdjNFxcdTI3YzctXFx1MjdlNVxcdTI3ZjAtXFx1Mjk4MlxcdTI5OTktXFx1MjlkN1xcdTI5ZGMtXFx1MjlmYlxcdTI5ZmUtXFx1MmI3M1xcdTJiNzYtXFx1MmI5NVxcdTJiOTctXFx1MmJmZlxcdTJjZTUtXFx1MmNlYVxcdTJlNTBcXHUyZTUxXFx1MmU4MC1cXHUyZTk5XFx1MmU5Yi1cXHUyZWYzXFx1MmYwMC1cXHUyZmQ1XFx1MmZmMC1cXHUyZmZiXFx1MzAwNFxcdTMwMTJcXHUzMDEzXFx1MzAyMFxcdTMwMzZcXHUzMDM3XFx1MzAzZVxcdTMwM2ZcXHUzMDliXFx1MzA5Y1xcdTMxOTBcXHUzMTkxXFx1MzE5Ni1cXHUzMTlmXFx1MzFjMC1cXHUzMWUzXFx1MzIwMC1cXHUzMjFlXFx1MzIyYS1cXHUzMjQ3XFx1MzI1MFxcdTMyNjAtXFx1MzI3ZlxcdTMyOGEtXFx1MzJiMFxcdTMyYzAtXFx1MzNmZlxcdTRkYzAtXFx1NGRmZlxcdWE0OTAtXFx1YTRjNlxcdWE3MDAtXFx1YTcxNlxcdWE3MjBcXHVhNzIxXFx1YTc4OVxcdWE3OGFcXHVhODI4LVxcdWE4MmJcXHVhODM2LVxcdWE4MzlcXHVhYTc3LVxcdWFhNzlcXHVhYjViXFx1YWI2YVxcdWFiNmJcXHVmYjI5XFx1ZmJiMi1cXHVmYmMxXFx1ZmRmY1xcdWZkZmRcXHVmZTYyXFx1ZmU2NC1cXHVmZTY2XFx1ZmU2OVxcdWZmMDRcXHVmZjBiXFx1ZmYxYy1cXHVmZjFlXFx1ZmYzZVxcdWZmNDBcXHVmZjVjXFx1ZmY1ZVxcdWZmZTAtXFx1ZmZlNlxcdWZmZTgtXFx1ZmZlZVxcdWZmZmNcXHVmZmZkXS9cblx0XVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5wdXJzID0gUHJpc20ubGFuZ3VhZ2VzLnB1cmVzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5weXRob24gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZy1pbnRlcnBvbGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oPzpmfGZyfHJmKSg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKj9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pKlxcMikvaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0Ly8gXCJ7XCIgPGV4cHJlc3Npb24+IDxvcHRpb25hbCBcIiFzXCIsIFwiIXJcIiwgb3IgXCIhYVwiPiA8b3B0aW9uYWwgXCI6XCIgZm9ybWF0IHNwZWNpZmllcj4gXCJ9XCJcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFtee10pKD86XFx7XFx7KSopXFx7KD8hXFx7KSg/Oltee31dfFxceyg/IVxceykoPzpbXnt9XXxcXHsoPyFcXHspKD86W157fV0pK1xcfSkrXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZm9ybWF0LXNwZWMnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKDopW146KCl7fV0rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2NvbnZlcnNpb24tb3B0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyFbc3JhXSg/PVs6fV0kKS8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzdDogbnVsbFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQndHJpcGxlLXF1b3RlZC1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OltydWJdfGJyfHJiKT8oXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxL2ksXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzpbcnViXXxicnxyYik/KFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccylkZWZbIFxcdF0rKVthLXpBLVpfXVxcdyooPz1cXHMqXFwoKS9nLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJjbGFzc1xccyspXFx3Ky9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2RlY29yYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKUBcXHcrKD86XFwuXFx3KykqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogWydhbm5vdGF0aW9uJywgJ3B1bmN0dWF0aW9uJ10sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86Xyg/PVxccyo6KXxhbmR8YXN8YXNzZXJ0fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2xhc3N8Y29udGludWV8ZGVmfGRlbHxlbGlmfGVsc2V8ZXhjZXB0fGV4ZWN8ZmluYWxseXxmb3J8ZnJvbXxnbG9iYWx8aWZ8aW1wb3J0fGlufGlzfGxhbWJkYXxtYXRjaHxub25sb2NhbHxub3R8b3J8cGFzc3xwcmludHxyYWlzZXxyZXR1cm58dHJ5fHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86X19pbXBvcnRfX3xhYnN8YWxsfGFueXxhcHBseXxhc2NpaXxiYXNlc3RyaW5nfGJpbnxib29sfGJ1ZmZlcnxieXRlYXJyYXl8Ynl0ZXN8Y2FsbGFibGV8Y2hyfGNsYXNzbWV0aG9kfGNtcHxjb2VyY2V8Y29tcGlsZXxjb21wbGV4fGRlbGF0dHJ8ZGljdHxkaXJ8ZGl2bW9kfGVudW1lcmF0ZXxldmFsfGV4ZWNmaWxlfGZpbGV8ZmlsdGVyfGZsb2F0fGZvcm1hdHxmcm96ZW5zZXR8Z2V0YXR0cnxnbG9iYWxzfGhhc2F0dHJ8aGFzaHxoZWxwfGhleHxpZHxpbnB1dHxpbnR8aW50ZXJufGlzaW5zdGFuY2V8aXNzdWJjbGFzc3xpdGVyfGxlbnxsaXN0fGxvY2Fsc3xsb25nfG1hcHxtYXh8bWVtb3J5dmlld3xtaW58bmV4dHxvYmplY3R8b2N0fG9wZW58b3JkfHBvd3xwcm9wZXJ0eXxyYW5nZXxyYXdfaW5wdXR8cmVkdWNlfHJlbG9hZHxyZXByfHJldmVyc2VkfHJvdW5kfHNldHxzZXRhdHRyfHNsaWNlfHNvcnRlZHxzdGF0aWNtZXRob2R8c3RyfHN1bXxzdXBlcnx0dXBsZXx0eXBlfHVuaWNocnx1bmljb2RlfHZhcnN8eHJhbmdlfHppcClcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGYWxzZXxOb25lfFRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGIwKD86Yig/Ol8/WzAxXSkrfG8oPzpfP1swLTddKSt8eCg/Ol8/W2EtZjAtOV0pKylcXGJ8KD86XFxiXFxkKyg/Ol9cXGQrKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFxCXFwuXFxkKyg/Ol9cXGQrKSopKD86ZVsrLV0/XFxkKyg/Ol9cXGQrKSopP2o/KD8hXFx3KS9pLFxuXHQnb3BlcmF0b3InOiAvWy0rJT1dPT98IT18Oj18XFwqXFwqPz0/fFxcL1xcLz89P3w8Wzw9Pl0/fD5bPT5dP3xbJnxefl0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucHl0aG9uWydzdHJpbmctaW50ZXJwb2xhdGlvbiddLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcblxuUHJpc20ubGFuZ3VhZ2VzLnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnB5dGhvbjtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBSZXBsYWNlcyBhbGwgcGxhY2Vob2xkZXJzIFwiPDxuPj5cIiBvZiBnaXZlbiBwYXR0ZXJuIHdpdGggdGhlIG4tdGggcmVwbGFjZW1lbnQgKHplcm8gYmFzZWQpLlxuXHQgKlxuXHQgKiBOb3RlOiBUaGlzIGlzIGEgc2ltcGxlIHRleHQgYmFzZWQgcmVwbGFjZW1lbnQuIEJlIGNhcmVmdWwgd2hlbiB1c2luZyBiYWNrcmVmZXJlbmNlcyFcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm4gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50cyBhIGxpc3Qgb2YgcmVwbGFjZW1lbnQgd2hpY2ggY2FuIGJlIGluc2VydGVkIGludG8gdGhlIGdpdmVuIHBhdHRlcm4uXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBwYXR0ZXJuIHdpdGggYWxsIHBsYWNlaG9sZGVycyByZXBsYWNlZCB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcgcmVwbGFjZW1lbnRzLlxuXHQgKiBAZXhhbXBsZSByZXBsYWNlKC9hPDwwPj5hLy5zb3VyY2UsIFsvYisvLnNvdXJjZV0pID09PSAvYSg/OmIrKWEvLnNvdXJjZVxuXHQgKi9cblx0ZnVuY3Rpb24gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpIHtcblx0XHRyZXR1cm4gcGF0dGVybi5yZXBsYWNlKC88PChcXGQrKT4+L2csIGZ1bmN0aW9uIChtLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuICcoPzonICsgcmVwbGFjZW1lbnRzWytpbmRleF0gKyAnKSc7XG5cdFx0fSk7XG5cdH1cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7c3RyaW5nW119IHJlcGxhY2VtZW50c1xuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUocGF0dGVybiwgcmVwbGFjZW1lbnRzLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAocmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpLCBmbGFncyB8fCAnJyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5lc3RlZCBwYXR0ZXJuIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc3RyaW5nIGA8PHNlbGY+PmAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHBhdHRlcm4gaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVwdGhMb2cyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQocGF0dGVybiwgZGVwdGhMb2cyKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXB0aExvZzI7IGkrKykge1xuXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDxzZWxmPj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblx0fVxuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2F6dXJlL3F1YW50dW0vdXNlci1ndWlkZS9sYW5ndWFnZS90eXBlc3lzdGVtL1xuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L3FzaGFycC1sYW5ndWFnZS90cmVlL21haW4vU3BlY2lmaWNhdGlvbnMvTGFuZ3VhZ2UvNV9HcmFtbWFyXG5cdHZhciBrZXl3b3JkS2luZHMgPSB7XG5cdFx0Ly8ga2V5d29yZHMgd2hpY2ggcmVwcmVzZW50IGEgcmV0dXJuIG9yIHZhcmlhYmxlIHR5cGVcblx0XHR0eXBlOiAnQWRqIEJpZ0ludCBCb29sIEN0bCBEb3VibGUgZmFsc2UgSW50IE9uZSBQYXVsaSBQYXVsaUkgUGF1bGlYIFBhdWxpWSBQYXVsaVogUXViaXQgUmFuZ2UgUmVzdWx0IFN0cmluZyB0cnVlIFVuaXQgWmVybycsXG5cdFx0Ly8gYWxsIG90aGVyIGtleXdvcmRzXG5cdFx0b3RoZXI6ICdBZGpvaW50IGFkam9pbnQgYXBwbHkgYXMgYXV0byBib2R5IGJvcnJvdyBib3Jyb3dpbmcgQ29udHJvbGxlZCBjb250cm9sbGVkIGRpc3RyaWJ1dGUgZWxpZiBlbHNlIGZhaWwgZml4dXAgZm9yIGZ1bmN0aW9uIGlmIGluIGludGVybmFsIGludHJpbnNpYyBpbnZlcnQgaXMgbGV0IG11dGFibGUgbmFtZXNwYWNlIG5ldyBuZXd0eXBlIG9wZW4gb3BlcmF0aW9uIHJlcGVhdCByZXR1cm4gc2VsZiBzZXQgdW50aWwgdXNlIHVzaW5nIHdoaWxlIHdpdGhpbidcblx0fTtcblx0Ly8ga2V5d29yZHNcblx0ZnVuY3Rpb24ga2V5d29yZHNUb1BhdHRlcm4od29yZHMpIHtcblx0XHRyZXR1cm4gJ1xcXFxiKD86JyArIHdvcmRzLnRyaW0oKS5yZXBsYWNlKC8gL2csICd8JykgKyAnKVxcXFxiJztcblx0fVxuXHR2YXIga2V5d29yZHMgPSBSZWdFeHAoa2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGUgKyAnICcgKyBrZXl3b3JkS2luZHMub3RoZXIpKTtcblxuXHQvLyB0eXBlc1xuXHR2YXIgaWRlbnRpZmllciA9IC9cXGJbQS1aYS16X11cXHcqXFxiLy5zb3VyY2U7XG5cdHZhciBxdWFsaWZpZWROYW1lID0gcmVwbGFjZSgvPDwwPj4oPzpcXHMqXFwuXFxzKjw8MD4+KSovLnNvdXJjZSwgW2lkZW50aWZpZXJdKTtcblxuXHR2YXIgdHlwZUluc2lkZSA9IHtcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bPD4oKT8sLjpbXFxdXS9cblx0fTtcblxuXHQvLyBzdHJpbmdzXG5cdHZhciByZWd1bGFyU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJdKSpcIi8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5xc2hhcnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnY29tbWVudCc6IC9cXC9cXC8uKi8sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogcmUoLyhefFteJFxcXFxdKTw8MD4+Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub247XG5cdFx0XHRcdC8vIG9wZW4gTWljcm9zb2Z0LlF1YW50dW0uQ2Fub24gYXMgQ047XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxiKD86YXN8b3BlbilcXHMrKTw8MD4+KD89XFxzKig/Ojt8YXNcXGIpKS8uc291cmNlLCBbcXVhbGlmaWVkTmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG5hbWVzcGFjZSBRdWFudHVtLkFwcDE7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxibmFtZXNwYWNlXFxzKyk8PDA+Pig/PVxccypcXHspLy5zb3VyY2UsIFtxdWFsaWZpZWROYW1lXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J251bWJlcic6IC8oPzpcXGIwKD86eFtcXGRhLWZdK3xiWzAxXSt8b1swLTddKyl8KD86XFxCXFwuXFxkK3xcXGJcXGQrKD86XFwuXFxkKik/KSg/OmVbLStdP1xcZCspPylsP1xcYi9pLFxuXHRcdCdvcGVyYXRvcic6IC9cXGJhbmQ9fFxcYm9yPXxcXGJhbmRcXGJ8XFxibm90XFxifFxcYm9yXFxifDxbLT1dfFstPV0+fD4+Pj0/fDw8PD0/fFxcXlxcXlxcXj0/fFxcfFxcfFxcfD0/fCYmJj0/fHdcXC89P3x+fn58WypcXC8rXFwtXj0hJV09Py8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo6fFt7fVtcXF07KCksLjpdL1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdxc2hhcnAnLCAnbnVtYmVyJywge1xuXHRcdCdyYW5nZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH0pO1xuXG5cdC8vIHNpbmdsZSBsaW5lXG5cdHZhciBpbnRlcnBvbGF0aW9uRXhwciA9IG5lc3RlZChyZXBsYWNlKC9cXHsoPzpbXlwie31dfDw8MD4+fDw8c2VsZj4+KSpcXH0vLnNvdXJjZSwgW3JlZ3VsYXJTdHJpbmddKSwgMik7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncXNoYXJwJywgJ3N0cmluZycsIHtcblx0XHQnaW50ZXJwb2xhdGlvbi1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFwkXCIoPzpcXFxcLnw8PDA+PnxbXlxcXFxcIntdKSpcIi8uc291cmNlLCBbaW50ZXJwb2xhdGlvbkV4cHJdKSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvKCg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqKTw8MD4+Ly5zb3VyY2UsIFtpbnRlcnBvbGF0aW9uRXhwcl0pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxce3xcXH0kLyxcblx0XHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1xc2hhcnAnLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5xc2hhcnBcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFzID0gUHJpc20ubGFuZ3VhZ2VzLnFzaGFycDtcblxuUHJpc20ubGFuZ3VhZ2VzLnEgPSB7XG5cdCdzdHJpbmcnOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0J2NvbW1lbnQnOiBbXG5cdFx0Ly8gRnJvbSBodHRwOi8vY29kZS5reC5jb20vd2lraS9SZWZlcmVuY2UvU2xhc2g6XG5cdFx0Ly8gV2hlbiAvIGlzIGZvbGxvd2luZyBhIHNwYWNlIChvciBhIHJpZ2h0IHBhcmVudGhlc2lzLCBicmFja2V0LCBvciBicmFjZSksIGl0IGlzIGlnbm9yZWQgd2l0aCB0aGUgcmVzdCBvZiB0aGUgbGluZS5cblx0XHR7XG5cblx0XHRcdHBhdHRlcm46IC8oW1xcdCApXFxdfV0pXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRnJvbSBodHRwOi8vY29kZS5reC5jb20vd2lraS9SZWZlcmVuY2UvU2xhc2g6XG5cdFx0Ly8gQSBsaW5lIHdoaWNoIGhhcyAvIGFzIGl0cyBmaXJzdCBjaGFyYWN0ZXIgYW5kIGNvbnRhaW5zIGF0IGxlYXN0IG9uZSBvdGhlciBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgYSB3aG9sZS1saW5lIGNvbW1lbnQgYW5kIGlzIGlnbm9yZWQgZW50aXJlbHkuXG5cdFx0Ly8gQSAvIG9uIGEgbGluZSBieSBpdHNlbGYgYmVnaW5zIGEgbXVsdGlsaW5lIGNvbW1lbnQgd2hpY2ggaXMgdGVybWluYXRlZCBieSB0aGUgbmV4dCBcXCBvbiBhIGxpbmUgYnkgaXRzZWxmLlxuXHRcdC8vIElmIGEgLyBpcyBub3QgbWF0Y2hlZCBieSBhIFxcLCB0aGUgbXVsdGlsaW5lIGNvbW1lbnQgaXMgdW50ZXJtaW5hdGVkIGFuZCBjb250aW51ZXMgdG8gZW5kIG9mIGZpbGUuXG5cdFx0Ly8gVGhlIC8gYW5kIFxcIG11c3QgYmUgdGhlIGZpcnN0IGNoYXIgb24gdGhlIGxpbmUsIGJ1dCBtYXkgYmUgZm9sbG93ZWQgYnkgYW55IGFtb3VudCBvZiB3aGl0ZXNwYWNlLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHI/XFxufFxccilcXC9bXFx0IF0qKD86KD86XFxyP1xcbnxcXHIpKD86LiooPzpcXHI/XFxufFxccig/IVxcbikpKSo/KD86XFxcXCg/PVtcXHQgXSooPzpcXHI/XFxufFxccikpfCQpfFxcUy4qKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvLyBGcm9tIGh0dHA6Ly9jb2RlLmt4LmNvbS93aWtpL1JlZmVyZW5jZS9TbGFzaDpcblx0XHQvLyBBIFxcIG9uIGEgbGluZSBieSBpdHNlbGYgd2l0aCBubyBwcmVjZWRpbmcgbWF0Y2hpbmcgLyB3aWxsIGNvbW1lbnQgdG8gZW5kIG9mIGZpbGUuXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL15cXFxcW1xcdCBdKig/Olxccj9cXG58XFxyKVtcXHNcXFNdKy9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXiMhLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N5bWJvbCc6IC9gKD86OlxcUyt8W1xcdy5dKikvLFxuXHQnZGF0ZXRpbWUnOiB7XG5cdFx0cGF0dGVybjogLzBOW21kenV2dF18MFdbZHR6XXxcXGR7NH1cXC5cXGRcXGQoPzptfFxcLlxcZFxcZCg/OlQoPzpcXGRcXGQoPzo6XFxkXFxkKD86OlxcZFxcZCg/OlsuOl1cXGRcXGRcXGQpPyk/KT8pPyk/W2R6XT8pfFxcZFxcZDpcXGRcXGQoPzo6XFxkXFxkKD86Wy46XVxcZFxcZFxcZCk/KT9bdXZ0XT8vLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQvLyBUaGUgbmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBiYWQgaGlnaGxpZ2h0aW5nXG5cdC8vIG9mIHZlcmJzIDA6IGFuZCAxOlxuXHQnbnVtYmVyJzogL1xcYig/IVswMV06KSg/OjBOW2hqZV0/fDBXW2hqXT98MFt3bl18MHhbXFxkYS1mQS1GXSt8XFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspP1toamZlYl0/KS8sXG5cdCdrZXl3b3JkJzogL1xcXFxcXHcrXFxifFxcYig/OmFic3xhY29zfGFqMD98YWxsfGFuZHxhbnl8YXNjfGFzaW58YXNvZnxhdGFufGF0dHJ8YXZncz98Ymlucj98Ynl8Y2VpbGluZ3xjb2xzfGNvcnxjb3N8Y291bnR8Y292fGNyb3NzfGNzdnxjdXR8ZGVsZXRlfGRlbHRhc3xkZXNjfGRldnxkaWZmZXJ8ZGlzdGluY3R8ZGl2fGRvfGRzYXZlfGVqfGVubGlzdHxldmFsfGV4Y2VwdHxleGVjfGV4aXR8ZXhwfGZieXxmaWxsc3xmaXJzdHxma2V5c3xmbGlwfGZsb29yfGZyb218Z2V0fGdldGVudnxncm91cHxndGltZXxoY2xvc2V8aGNvdW50fGhkZWx8aG9wZW58aHN5bXxpYXNjfGlkZW50aXR5fGlkZXNjfGlmfGlqfGlufGluc2VydHxpbnRlcnxpbnZ8a2V5cz98bGFzdHxsaWtlfGxpc3R8bGpmP3xsb2FkfGxvZ3xsb3dlcnxsc3F8bHRpbWV8bHRyaW18bWF2Z3xtYXhzP3xtY291bnR8bWQ1fG1kZXZ8bWVkfG1ldGF8bWlucz98bW1heHxtbWlufG1tdXxtb2R8bXN1bXxuZWd8bmV4dHxub3R8bnVsbHxvcnxvdmVyfHBhcnNlfHBlYWNofHBqfHBsaXN0fHByZHM/fHByZXZ8cHJpb3J8cmFuZHxyYW5rfHJhdGlvc3xyYXplfHJlYWQwfHJlYWQxfHJlY2lwcm9jYWx8cmV2YWx8cmV2ZXJzZXxybG9hZHxyb3RhdGV8cnNhdmV8cnRyaW18c2F2ZXxzY2FufHNjb3Z8c2RldnxzZWxlY3R8c2V0fHNldGVudnxzaG93fHNpZ251bXxzaW58c3FydHxzc3I/fHN0cmluZ3xzdWJsaXN0fHN1bXM/fHN2fHN2YXJ8c3lzdGVtfHRhYmxlc3x0YW58dGlsfHRyaW18dHhmfHR5cGV8dWp8dW5ncm91cHx1bmlvbnx1cGRhdGV8dXBwZXJ8dXBzZXJ0fHZhbHVlfHZhcnx2aWV3cz98dnN8d2F2Z3x3aGVyZXx3aGlsZXx3aXRoaW58d2oxP3x3c3VtfHd3fHhhc2N8eGJhcnx4Y29scz98eGRlc2N8eGV4cHx4Z3JvdXB8eGtleXx4bG9nfHhwcmV2fHhyYW5rKVxcYi8sXG5cdCdhZHZlcmInOiB7XG5cdFx0cGF0dGVybjogL1snXFwvXFxcXF06P3xcXGJlYWNoXFxiLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQndmVyYic6IHtcblx0XHRwYXR0ZXJuOiAvKD86XFxCXFwuXFxCfFxcYlswMV06fDxbPT5dP3w+PT98WzorXFwtKiUsIT9+PXwkJiNAXl0pOj98XFxiX1xcYjo/Lyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07Ll0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGpzU3RyaW5nID0gL1wiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInwnKD86XFxcXC58W15cXFxcJ1xcclxcbl0pKicvLnNvdXJjZTtcblx0dmFyIGpzQ29tbWVudCA9IC9cXC9cXC8uKig/IS4pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvLy5zb3VyY2U7XG5cblx0dmFyIGpzRXhwciA9IC8oPzpbXlxcXFwoKVtcXF17fVwiJy9dfDxzdHJpbmc+fFxcLyg/IVsqL10pfDxjb21tZW50PnxcXCg8ZXhwcj4qXFwpfFxcWzxleHByPipcXF18XFx7PGV4cHI+KlxcfXxcXFxcW1xcc1xcU10pL1xuXHRcdC5zb3VyY2UucmVwbGFjZSgvPHN0cmluZz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNTdHJpbmc7IH0pLnJlcGxhY2UoLzxjb21tZW50Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBqc0NvbW1lbnQ7IH0pO1xuXG5cdC8vIHRoZSBwYXR0ZXJuIHdpbGwgYmxvdyB1cCwgc28gb25seSBhIGZldyBpdGVyYXRpb25zXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7XG5cdFx0anNFeHByID0ganNFeHByLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBqc0V4cHI7IH0pO1xuXHR9XG5cdGpzRXhwciA9IGpzRXhwci5yZXBsYWNlKC88ZXhwcj4vZywgJ1teXFxcXHNcXFxcU10nKTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5xbWwgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdqYXZhc2NyaXB0LWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oKD86Xnw7KVsgXFx0XSopZnVuY3Rpb25cXHMrKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKlxccypcXCg8anM+KlxcKVxccypcXHs8anM+KlxcfS8uc291cmNlLnJlcGxhY2UoLzxqcz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNFeHByOyB9KSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58Wzo7XSlbIFxcdF0qKSg/IVxcZClcXHcrKD89WyBcXHRdKlxce3xbIFxcdF0rb25cXGIpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQncHJvcGVydHknOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbO3tdKVsgXFx0XSopKD8hXFxkKVxcdysoPzpcXC5cXHcrKSooPz1bIFxcdF0qOikvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFs7e10pWyBcXHRdKilwcm9wZXJ0eVsgXFx0XSsoPyFcXGQpXFx3Kyg/OlxcLlxcdyspKlsgXFx0XSsoPyFcXGQpXFx3Kyg/OlxcLlxcdyspKig/PVsgXFx0XSo6KS9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9ecHJvcGVydHkvLFxuXHRcdFx0XHRcdCdwcm9wZXJ0eSc6IC9cXHcrKD86XFwuXFx3KykqL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnamF2YXNjcmlwdC1leHByZXNzaW9uJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlsgXFx0XSopKD8hW1xcczt9W10pKD86KD8hJHxbO31dKTxqcz4pKy8uc291cmNlLnJlcGxhY2UoLzxqcz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNFeHByOyB9KSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphc3xpbXBvcnR8b24pXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTo7LF0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnFvcmUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzpcXC9cXC98IykuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0Ly8gT3ZlcnJpZGRlbiB0byBhbGxvdyB1bmVzY2FwZWQgbXVsdGktbGluZSBzdHJpbmdzXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YW55fGFzc2VydHxiaW5hcnl8Ym9vbHxib29sZWFufGJyZWFrfGJ5dGV8Y2FzZXxjYXRjaHxjaGFyfGNsYXNzfGNvZGV8Y29uc3R8Y29udGludWV8ZGF0YXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGhhc2h8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW5oZXJpdHN8aW5zdGFuY2VvZnxpbnR8aW50ZXJmYWNlfGxvbmd8bXl8bmF0aXZlfG5ld3xub3RoaW5nfG51bGx8b2JqZWN0fG91cnxvd258cHJpdmF0ZXxyZWZlcmVuY2V8cmV0aHJvd3xyZXR1cm58c2hvcnR8c29mdCg/OmJvb2x8ZGF0ZXxmbG9hdHxpbnR8bGlzdHxudW1iZXJ8c3RyaW5nKXxzdGF0aWN8c3RyaWN0ZnB8c3RyaW5nfHN1YnxzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHRoaXN8dGhyb3d8dGhyb3dzfHRyYW5zaWVudHx0cnl8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFwkP1xcYig/IVxcZClcXHcrKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiKD86MGJbMDFdK3wweCg/OltcXGRhLWZdKlxcLik/W1xcZGEtZnBcXC1dK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86ZVxcZCspP1tkZl18KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSlcXGIvaSxcblx0J29wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi5dKSg/OlxcK1srPV0/fC1bLT1dP3xbIT1dKD86PT0/fH4pP3w+Pj89P3w8KD86PT4/fDw9Pyk/fCZbJj1dP3xcXHxbfD1dP3xbKlxcLyVeXT0/fFt+P10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCQoPyFcXGQpXFx3K1xcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuciA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFsnXCJdKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncGVyY2VudC1vcGVyYXRvcic6IHtcblx0XHQvLyBJbmNsdWRlcyB1c2VyLWRlZmluZWQgb3BlcmF0b3JzXG5cdFx0Ly8gYW5kICUlLCAlKiUsICUvJSwgJWluJSwgJW8lLCAleCVcblx0XHRwYXR0ZXJuOiAvJVteJVxcc10qJS8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvLFxuXHQnZWxsaXBzaXMnOiAvXFwuXFwuKD86XFwufFxcZCspLyxcblx0J251bWJlcic6IFtcblx0XHQvXFxiKD86SW5mfE5hTilcXGIvLFxuXHRcdC8oPzpcXGIweFtcXGRBLUZhLWZdKyg/OlxcLlxcZCopP3xcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlUHBdWystXT9cXGQrKT9baUxdPy9cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86TkF8TkFfY2hhcmFjdGVyX3xOQV9jb21wbGV4X3xOQV9pbnRlZ2VyX3xOQV9yZWFsX3xOVUxMfGJyZWFrfGVsc2V8Zm9yfGZ1bmN0aW9ufGlmfGlufG5leHR8cmVwZWF0fHdoaWxlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC8tPj8+P3w8KD86PXw8Py0pP3xbPj0hXT0/fDo6P3wmJj98XFx8XFx8P3xbKypcXC9eJEB+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXSw7XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yYWNrZXQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdzY2hlbWUnLCB7XG5cdCdsYW1iZGEtcGFyYW1ldGVyJzoge1xuXHRcdC8vIHRoZSByYWNrZXQgbGFtYmRhIHN5bnRheCBpcyBhIGxvdCBtb3JlIGNvbXBsZXgsIHNvIHdlIHdvbid0IGV2ZW4gYXR0ZW1wdCB0byBjYXB0dXJlIGl0LlxuXHRcdC8vIHRoaXMgd2lsbCBqdXN0IHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzIG9mIHRoZSBgZnVuY3Rpb25gIHBhdHRlcm5cblx0XHRwYXR0ZXJuOiAvKFsoXFxbXWxhbWJkYVxccytbKFxcW10pW14oKVxcW1xcXSdcXHNdKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncmFja2V0JywgJ3N0cmluZycsIHtcblx0J2xhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jbGFuZy4rL20sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ya3QgPSBQcmlzbS5sYW5ndWFnZXMucmFja2V0O1xuXG4vLyBEb2NzOlxuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXNwbmV0L2NvcmUvcmF6b3ItcGFnZXMvP3ZpZXc9YXNwbmV0Y29yZS01LjAmdGFicz12aXN1YWwtc3R1ZGlvXG4vLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9hc3BuZXQvY29yZS9tdmMvdmlld3MvcmF6b3I/dmlldz1hc3BuZXRjb3JlLTUuMFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnRMaWtlID0gL1xcLyg/IVsvKl0pfFxcL1xcLy4qW1xcclxcbl18XFwvXFwqW14qXSooPzpcXCooPyFcXC8pW14qXSopKlxcKlxcLy8uc291cmNlO1xuXHR2YXIgc3RyaW5nTGlrZSA9XG5cdFx0L0AoPyFcIil8XCIoPzpbXlxcclxcblxcXFxcIl18XFxcXC4pKlwifEBcIig/OlteXFxcXFwiXXxcIlwifFxcXFxbXFxzXFxTXSkqXCIoPyFcIikvLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvJyg/Oig/OlteXFxyXFxuJ1xcXFxdfFxcXFwufFxcXFxbVXV4XVtcXGRhLWZBLUZdezEsOH0pJ3woPz1bXlxcXFxdKD8hJykpKS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmVzdGVkIHBhdHRlcm4gd2hlcmUgYWxsIG9jY3VycmVuY2VzIG9mIHRoZSBzdHJpbmcgYDw8c2VsZj4+YCBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgcGF0dGVybiBpdHNlbGYuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEBwYXJhbSB7bnVtYmVyfSBkZXB0aExvZzJcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIG5lc3RlZChwYXR0ZXJuLCBkZXB0aExvZzIpIHtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGRlcHRoTG9nMjsgaSsrKSB7XG5cdFx0XHRwYXR0ZXJuID0gcGF0dGVybi5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXR0ZXJuICsgJyknOyB9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHBhdHRlcm5cblx0XHRcdC5yZXBsYWNlKC88c2VsZj4vZywgJ1teXFxcXHNcXFxcU10nKVxuXHRcdFx0LnJlcGxhY2UoLzxzdHI+L2csICcoPzonICsgc3RyaW5nTGlrZSArICcpJylcblx0XHRcdC5yZXBsYWNlKC88Y29tbWVudD4vZywgJyg/OicgKyBjb21tZW50TGlrZSArICcpJyk7XG5cdH1cblxuXHR2YXIgcm91bmQgPSBuZXN0ZWQoL1xcKCg/OlteKCknXCJAL118PHN0cj58PGNvbW1lbnQ+fDxzZWxmPikqXFwpLy5zb3VyY2UsIDIpO1xuXHR2YXIgc3F1YXJlID0gbmVzdGVkKC9cXFsoPzpbXlxcW1xcXSdcIkAvXXw8c3RyPnw8Y29tbWVudD58PHNlbGY+KSpcXF0vLnNvdXJjZSwgMSk7XG5cdHZhciBjdXJseSA9IG5lc3RlZCgvXFx7KD86W157fSdcIkAvXXw8c3RyPnw8Y29tbWVudD58PHNlbGY+KSpcXH0vLnNvdXJjZSwgMik7XG5cdHZhciBhbmdsZSA9IG5lc3RlZCgvPCg/OltePD4nXCJAL118PGNvbW1lbnQ+fDxzZWxmPikqPi8uc291cmNlLCAxKTtcblxuXHR2YXIgaW5saW5lQ3MgPSAvQC8uc291cmNlICtcblx0XHQvKD86YXdhaXRcXGJcXHMqKT8vLnNvdXJjZSArXG5cdFx0Jyg/OicgKyAvKD8hYXdhaXRcXGIpXFx3K1xcYi8uc291cmNlICsgJ3wnICsgcm91bmQgKyAnKScgK1xuXHRcdCcoPzonICsgL1s/IV0/XFwuXFx3K1xcYi8uc291cmNlICsgJ3wnICsgJyg/OicgKyBhbmdsZSArICcpPycgKyByb3VuZCArICd8JyArIHNxdWFyZSArICcpKicgK1xuXHRcdC8oPyFbPyFcXC4oXFxbXXw8KD8hXFwvKSkvLnNvdXJjZTtcblxuXHQvLyBOb3RlIGFib3V0IHRoZSBhYm92ZSBicmFja2V0IHBhdHRlcm5zOlxuXHQvLyBUaGV5IGFsbCBpZ25vcmUgSFRNTCBleHByZXNzaW9ucyB0aGF0IG1pZ2h0IGJlIGluIHRoZSBDIyBjb2RlLiBUaGlzIGlzIGEgcHJvYmxlbSBiZWNhdXNlIEhUTUwgKGxpa2Ugc3RyaW5ncyBhbmRcblx0Ly8gY29tbWVudHMpIGlzIHBhcnNlZCBkaWZmZXJlbnRseS4gVGhpcyBpcyBhIGh1Z2UgcHJvYmxlbSBiZWNhdXNlIEhUTUwgbWlnaHQgY29udGFpbiBicmFja2V0cyBhbmQgcXVvdGVzIHdoaWNoXG5cdC8vIG1lc3NlcyB1cCB0aGUgYnJhY2tldCBhbmQgc3RyaW5nIGNvdW50aW5nIGltcGxlbWVudGVkIGJ5IHRoZSBhYm92ZSBwYXR0ZXJucy5cblx0Ly9cblx0Ly8gVGhpcyBwcm9ibGVtIGlzIG5vdCBmaXhhYmxlIGJlY2F1c2UgMSkgSFRNTCBleHByZXNzaW9uIGFyZSBoaWdobHkgY29udGV4dCBzZW5zaXRpdmUgYW5kIHZlcnkgZGlmZmljdWx0IHRvIGRldGVjdFxuXHQvLyBhbmQgMikgdGhleSByZXF1aXJlIG9uZSBjYXB0dXJpbmcgZ3JvdXAgYXQgZXZlcnkgbmVzdGVkIGxldmVsLiBTZWUgdGhlIGB0YWdSZWdpb25gIHBhdHRlcm4gdG8gYWRtaXJlIHRoZVxuXHQvLyBjb21wbGV4aXR5IG9mIGFuIEhUTUwgZXhwcmVzc2lvbi5cblx0Ly9cblx0Ly8gVG8gc29tZXdoYXQgYWxsZXZpYXRlIHRoZSBwcm9ibGVtIGEgYml0LCB0aGUgcGF0dGVybnMgZm9yIGNoYXJhY3RlcnMgKGUuZy4gJ2EnKSBpcyB2ZXJ5IHBlcm1pc3NpdmUsIGl0IGFsc29cblx0Ly8gYWxsb3dzIGludmFsaWQgY2hhcmFjdGVycyB0byBzdXBwb3J0IEhUTUwgZXhwcmVzc2lvbnMgbGlrZSB0aGlzOiA8cD5UaGF0J3MgaXQhPC9wPi5cblxuXHR2YXIgdGFnQXR0cklubGluZUNzID0gL0AoPyFbXFx3KCldKS8uc291cmNlICsgJ3wnICsgaW5saW5lQ3M7XG5cdHZhciB0YWdBdHRyVmFsdWUgPSAnKD86JyArXG5cdFx0L1wiW15cIkBdKlwifCdbXidAXSonfFteXFxzJ1wiQD49XSsoPz1bXFxzPl0pLy5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0J1tcIlxcJ11bXlwiXFwnQF0qKD86KD86JyArIHRhZ0F0dHJJbmxpbmVDcyArICcpW15cIlxcJ0BdKikrW1wiXFwnXScgK1xuXHRcdCcpJztcblxuXHR2YXIgdGFnQXR0cnMgPSAvKD86XFxzKD86XFxzKlteXFxzPlxcLz1dKyg/Olxccyo9XFxzKjx0YWdBdHRyVmFsdWU+fCg/PVtcXHMvPl0pKSkrKT8vLnNvdXJjZS5yZXBsYWNlKC88dGFnQXR0clZhbHVlPi8sIHRhZ0F0dHJWYWx1ZSk7XG5cdHZhciB0YWdDb250ZW50ID0gLyg/IVxcZClbXlxccz5cXC89JDwlXSsvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccypcXC8/Pi8uc291cmNlO1xuXHR2YXIgdGFnUmVnaW9uID1cblx0XHQvXFxCQD8vLnNvdXJjZSArXG5cdFx0Jyg/OicgK1xuXHRcdC88KFthLXpBLVpdW1xcdzpdKikvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccyo+Ly5zb3VyY2UgK1xuXHRcdCcoPzonICtcblx0XHQoXG5cdFx0XHQvW148XS8uc291cmNlICtcblx0XHRcdCd8JyArXG5cdFx0XHQvLyBhbGwgdGFncyB0aGF0IGFyZSBub3QgdGhlIHN0YXJ0IHRhZ1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdC88XFwvPyg/IVxcMVxcYikvLnNvdXJjZSArIHRhZ0NvbnRlbnQgK1xuXHRcdFx0J3wnICtcblx0XHRcdC8vIG5lc3RlZCBzdGFydCB0YWdcblx0XHRcdG5lc3RlZChcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0LzxcXDEvLnNvdXJjZSArIHRhZ0F0dHJzICsgL1xccyo+Ly5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdChcblx0XHRcdFx0XHQvW148XS8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIGFsbCB0YWdzIHRoYXQgYXJlIG5vdCB0aGUgc3RhcnQgdGFnXG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0XHQvPFxcLz8oPyFcXDFcXGIpLy5zb3VyY2UgKyB0YWdDb250ZW50ICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdCc8c2VsZj4nXG5cdFx0XHRcdCkgK1xuXHRcdFx0XHQnKSonICtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0LzxcXC9cXDFcXHMqPi8uc291cmNlLFxuXHRcdFx0XHQyXG5cdFx0XHQpXG5cdFx0KSArXG5cdFx0JykqJyArXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHQvPFxcL1xcMVxccyo+Ly5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0LzwvLnNvdXJjZSArIHRhZ0NvbnRlbnQgK1xuXHRcdCcpJztcblxuXHQvLyBOb3cgZm9yIHRoZSBhY3R1YWwgbGFuZ3VhZ2UgZGVmaW5pdGlvbihzKTpcblx0Ly9cblx0Ly8gUmF6b3IgYXMgYSBsYW5ndWFnZSBoYXMgMiBwYXJ0czpcblx0Ly8gIDEpIENTSFRNTDogQSBtYXJrdXAtbGlrZSBsYW5ndWFnZSB0aGF0IGhhcyBiZWVuIGV4dGVuZGVkIHdpdGggaW5saW5lIEMjIGNvZGUgZXhwcmVzc2lvbnMgYW5kIGJsb2Nrcy5cblx0Ly8gIDIpIEMjK0hUTUw6IEEgdmFyaWFudCBvZiBDIyB0aGF0IGNhbiBjb250YWluIENTSFRNTCB0YWdzIGFzIGV4cHJlc3Npb25zLlxuXHQvL1xuXHQvLyBJbiB0aGUgYmVsb3cgY29kZSwgYm90aCBDU0hUTUwgYW5kIEMjK0hUTUwgd2lsbCBiZSBjcmVhdGUgYXMgc2VwYXJhdGUgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgdGhhdCByZWZlcmVuY2UgZWFjaFxuXHQvLyBvdGhlci4gSG93ZXZlciwgb25seSBDU0hUTUwgd2lsbCBiZSBleHBvcnRlZCB2aWEgYFByaXNtLmxhbmd1YWdlc2AuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaHRtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblxuXHR2YXIgY3NoYXJwV2l0aEh0bWwgPSBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAnc3RyaW5nJywge1xuXHRcdCdodG1sJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHRhZ1JlZ2lvbiksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2h0bWxcblx0XHR9LFxuXHR9LCB7IGNzaGFycDogUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NoYXJwJywge30pIH0pO1xuXG5cdHZhciBjcyA9IHtcblx0XHRwYXR0ZXJuOiAvXFxTW1xcc1xcU10qLyxcblx0XHRhbGlhczogJ2xhbmd1YWdlLWNzaGFycCcsXG5cdFx0aW5zaWRlOiBjc2hhcnBXaXRoSHRtbFxuXHR9O1xuXG5cdHZhciBpbmxpbmVWYWx1ZSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteQF0pLy5zb3VyY2UgKyBpbmxpbmVDcyksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eQC8sXG5cdFx0XHQnY3NoYXJwJzogY3Ncblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzaHRtbC50YWcucGF0dGVybiA9IFJlZ0V4cCgvPFxcLz8vLnNvdXJjZSArIHRhZ0NvbnRlbnQpO1xuXHRQcmlzbS5sYW5ndWFnZXMuY3NodG1sLnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXS5wYXR0ZXJuID0gUmVnRXhwKC89XFxzKi8uc291cmNlICsgdGFnQXR0clZhbHVlKTtcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywgeyAndmFsdWUnOiBpbmxpbmVWYWx1ZSB9LCBQcmlzbS5sYW5ndWFnZXMuY3NodG1sLnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NodG1sJywgJ3Byb2xvZycsIHtcblx0XHQncmF6b3ItY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFwqW1xcc1xcU10qP1xcKkAvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cblx0XHQnYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oXnxbXkBdKUAvLnNvdXJjZSArXG5cdFx0XHRcdCcoPzonICtcblx0XHRcdFx0W1xuXHRcdFx0XHRcdC8vIEB7IC4uLiB9XG5cdFx0XHRcdFx0Y3VybHksXG5cdFx0XHRcdFx0Ly8gQGNvZGV7IC4uLiB9XG5cdFx0XHRcdFx0Lyg/OmNvZGV8ZnVuY3Rpb25zKVxccyovLnNvdXJjZSArIGN1cmx5LFxuXHRcdFx0XHRcdC8vIEBmb3IgKC4uLikgeyAuLi4gfVxuXHRcdFx0XHRcdC8oPzpmb3J8Zm9yZWFjaHxsb2NrfHN3aXRjaHx1c2luZ3x3aGlsZSlcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSxcblx0XHRcdFx0XHQvLyBAZG8geyAuLi4gfSB3aGlsZSAoLi4uKTtcblx0XHRcdFx0XHQvZG9cXHMqLy5zb3VyY2UgKyBjdXJseSArIC9cXHMqd2hpbGVcXHMqLy5zb3VyY2UgKyByb3VuZCArIC8oPzpcXHMqOyk/Ly5zb3VyY2UsXG5cdFx0XHRcdFx0Ly8gQHRyeSB7IC4uLiB9IGNhdGNoICguLi4pIHsgLi4uIH0gZmluYWxseSB7IC4uLiB9XG5cdFx0XHRcdFx0L3RyeVxccyovLnNvdXJjZSArIGN1cmx5ICsgL1xccypjYXRjaFxccyovLnNvdXJjZSArIHJvdW5kICsgL1xccyovLnNvdXJjZSArIGN1cmx5ICsgL1xccypmaW5hbGx5XFxzKi8uc291cmNlICsgY3VybHksXG5cdFx0XHRcdFx0Ly8gQGlmICguLi4pIHsuLi59IGVsc2UgaWYgKC4uLikgey4uLn0gZWxzZSB7Li4ufVxuXHRcdFx0XHRcdC9pZlxccyovLnNvdXJjZSArIHJvdW5kICsgL1xccyovLnNvdXJjZSArIGN1cmx5ICsgJyg/OicgKyAvXFxzKmVsc2UvLnNvdXJjZSArICcoPzonICsgL1xccytpZlxccyovLnNvdXJjZSArIHJvdW5kICsgJyk/JyArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSArICcpKicsXG5cdFx0XHRcdFx0Ly8gQGhlbHBlciBJZGVudChwYXJhbXMpIHsgLi4uIH1cblx0XHRcdFx0XHQvaGVscGVyXFxzK1xcdytcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSxcblx0XHRcdFx0XS5qb2luKCd8JykgK1xuXHRcdFx0XHQnKSdcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15AXFx3Ki8sXG5cdFx0XHRcdCdjc2hhcnAnOiBjc1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKilAKD86YWRkVGFnSGVscGVyfGF0dHJpYnV0ZXxpbXBsZW1lbnRzfGluaGVyaXRzfGluamVjdHxsYXlvdXR8bW9kZWx8bmFtZXNwYWNlfHBhZ2V8cHJlc2VydmV3aGl0ZXNwYWNlfHJlbW92ZVRhZ0hlbHBlcnxzZWN0aW9ufHRhZ0hlbHBlclByZWZpeHx1c2luZykoPz1cXHMpLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiAvXkBcXHcrLyxcblx0XHRcdFx0J2NzaGFycCc6IGNzXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCd2YWx1ZSc6IGlubGluZVZhbHVlLFxuXG5cdFx0J2RlbGVnYXRlLW9wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteQF0pQCg/PTwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJhem9yID0gUHJpc20ubGFuZ3VhZ2VzLmNzaHRtbDtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGphdmFzY3JpcHQgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0KTtcblxuXHR2YXIgc3BhY2UgPSAvKD86XFxzfFxcL1xcLy4qKD8hLil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKVxcKlxcLykvLnNvdXJjZTtcblx0dmFyIGJyYWNlcyA9IC8oPzpcXHsoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkqXFx9KS8uc291cmNlO1xuXHR2YXIgc3ByZWFkID0gLyg/OlxcezxTPipcXC57M30oPzpbXnt9XXw8QlJBQ0VTPikqXFx9KS8uc291cmNlO1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqL1xuXHRmdW5jdGlvbiByZShzb3VyY2UsIGZsYWdzKSB7XG5cdFx0c291cmNlID0gc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPFM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNwYWNlOyB9KVxuXHRcdFx0LnJlcGxhY2UoLzxCUkFDRVM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGJyYWNlczsgfSlcblx0XHRcdC5yZXBsYWNlKC88U1BSRUFEPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzcHJlYWQ7IH0pO1xuXHRcdHJldHVybiBSZWdFeHAoc291cmNlLCBmbGFncyk7XG5cdH1cblxuXHRzcHJlYWQgPSByZShzcHJlYWQpLnNvdXJjZTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5qc3ggPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCBqYXZhc2NyaXB0KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcucGF0dGVybiA9IHJlKFxuXHRcdC88XFwvPyg/OltcXHcuOi1dKyg/OjxTPisoPzpbXFx3LjokLV0rKD86PSg/OlwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCJ8Jyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJ3xbXlxcc3snXCIvPj1dK3w8QlJBQ0VTPikpP3w8U1BSRUFEPikpKjxTPipcXC8/KT8+Ly5zb3VyY2Vcblx0KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ3RhZyddLnBhdHRlcm4gPSAvXjxcXC8/W15cXHM+XFwvXSovO1xuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXS5wYXR0ZXJuID0gLz0oPyFcXHspKD86XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcInwnKD86XFxcXFtcXHNcXFNdfFteXFxcXCddKSonfFteXFxzJ1wiPl0rKS87XG5cdFByaXNtLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZVsndGFnJ10uaW5zaWRlWydjbGFzcy1uYW1lJ10gPSAvXltBLVpdXFx3Kig/OlxcLltBLVpdXFx3KikqJC87XG5cdFByaXNtLmxhbmd1YWdlcy5qc3gudGFnLmluc2lkZVsnY29tbWVudCddID0gamF2YXNjcmlwdFsnY29tbWVudCddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdhdHRyLW5hbWUnLCB7XG5cdFx0J3NwcmVhZCc6IHtcblx0XHRcdHBhdHRlcm46IHJlKC88U1BSRUFEPi8uc291cmNlKSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmpzeFxuXHRcdH1cblx0fSwgUHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdzcGVjaWFsLWF0dHInLCB7XG5cdFx0J3NjcmlwdCc6IHtcblx0XHRcdC8vIEFsbG93IGZvciB0d28gbGV2ZWxzIG9mIG5lc3Rpbmdcblx0XHRcdHBhdHRlcm46IHJlKC89PEJSQUNFUz4vLnNvdXJjZSksXG5cdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzY3JpcHQtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL149KD89XFx7KS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmpzeFxuXHRcdFx0fSxcblx0XHR9XG5cdH0sIFByaXNtLmxhbmd1YWdlcy5qc3gudGFnKTtcblxuXHQvLyBUaGUgZm9sbG93aW5nIHdpbGwgaGFuZGxlIHBsYWluIHRleHQgaW5zaWRlIHRhZ3Ncblx0dmFyIHN0cmluZ2lmeVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0aWYgKCF0b2tlbikge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuO1xuXHRcdH1cblx0XHRpZiAodHlwZW9mIHRva2VuLmNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdG9rZW4uY29udGVudDtcblx0XHR9XG5cdFx0cmV0dXJuIHRva2VuLmNvbnRlbnQubWFwKHN0cmluZ2lmeVRva2VuKS5qb2luKCcnKTtcblx0fTtcblxuXHR2YXIgd2Fsa1Rva2VucyA9IGZ1bmN0aW9uICh0b2tlbnMpIHtcblx0XHR2YXIgb3BlbmVkVGFncyA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cdFx0XHR2YXIgbm90VGFnTm9yQnJhY2UgPSBmYWxzZTtcblxuXHRcdFx0aWYgKHR5cGVvZiB0b2tlbiAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICd0YWcnICYmIHRva2VuLmNvbnRlbnRbMF0gJiYgdG9rZW4uY29udGVudFswXS50eXBlID09PSAndGFnJykge1xuXHRcdFx0XHRcdC8vIFdlIGZvdW5kIGEgdGFnLCBub3cgZmluZCBpdHMga2luZFxuXG5cdFx0XHRcdFx0aWYgKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFswXS5jb250ZW50ID09PSAnPC8nKSB7XG5cdFx0XHRcdFx0XHQvLyBDbG9zaW5nIHRhZ1xuXHRcdFx0XHRcdFx0aWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiBvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0udGFnTmFtZSA9PT0gc3RyaW5naWZ5VG9rZW4odG9rZW4uY29udGVudFswXS5jb250ZW50WzFdKSkge1xuXHRcdFx0XHRcdFx0XHQvLyBQb3AgbWF0Y2hpbmcgb3BlbmluZyB0YWdcblx0XHRcdFx0XHRcdFx0b3BlbmVkVGFncy5wb3AoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKHRva2VuLmNvbnRlbnRbdG9rZW4uY29udGVudC5sZW5ndGggLSAxXS5jb250ZW50ID09PSAnLz4nKSB7XG5cdFx0XHRcdFx0XHRcdC8vIEF1dG9jbG9zZWQgdGFnLCBpZ25vcmVcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdC8vIE9wZW5pbmcgdGFnXG5cdFx0XHRcdFx0XHRcdG9wZW5lZFRhZ3MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0dGFnTmFtZTogc3RyaW5naWZ5VG9rZW4odG9rZW4uY29udGVudFswXS5jb250ZW50WzFdKSxcblx0XHRcdFx0XHRcdFx0XHRvcGVuZWRCcmFjZXM6IDBcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiB0b2tlbi50eXBlID09PSAncHVuY3R1YXRpb24nICYmIHRva2VuLmNvbnRlbnQgPT09ICd7Jykge1xuXG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBtaWdodCBoYXZlIGVudGVyZWQgYSBKU1ggY29udGV4dCBpbnNpZGUgYSB0YWdcblx0XHRcdFx0XHRvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzKys7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcyA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAnfScpIHtcblxuXHRcdFx0XHRcdC8vIEhlcmUgd2UgbWlnaHQgaGF2ZSBsZWZ0IGEgSlNYIGNvbnRleHQgaW5zaWRlIGEgdGFnXG5cdFx0XHRcdFx0b3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcy0tO1xuXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bm90VGFnTm9yQnJhY2UgPSB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAobm90VGFnTm9yQnJhY2UgfHwgdHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRpZiAob3BlbmVkVGFncy5sZW5ndGggPiAwICYmIG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMgPT09IDApIHtcblx0XHRcdFx0XHQvLyBIZXJlIHdlIGFyZSBpbnNpZGUgYSB0YWcsIGFuZCBub3QgaW5zaWRlIGEgSlNYIGNvbnRleHQuXG5cdFx0XHRcdFx0Ly8gVGhhdCdzIHBsYWluIHRleHQ6IGRyb3AgYW55IHRva2VucyBtYXRjaGVkLlxuXHRcdFx0XHRcdHZhciBwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbik7XG5cblx0XHRcdFx0XHQvLyBBbmQgbWVyZ2UgdGV4dCB3aXRoIGFkamFjZW50IHRleHRcblx0XHRcdFx0XHRpZiAoaSA8IHRva2Vucy5sZW5ndGggLSAxICYmICh0eXBlb2YgdG9rZW5zW2kgKyAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgKyAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgKz0gc3RyaW5naWZ5VG9rZW4odG9rZW5zW2kgKyAxXSk7XG5cdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGkgPiAwICYmICh0eXBlb2YgdG9rZW5zW2kgLSAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgLSAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbnNbaSAtIDFdKSArIHBsYWluVGV4dDtcblx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoaSAtIDEsIDEpO1xuXHRcdFx0XHRcdFx0aS0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHRva2Vuc1tpXSA9IG5ldyBQcmlzbS5Ub2tlbigncGxhaW4tdGV4dCcsIHBsYWluVGV4dCwgbnVsbCwgcGxhaW5UZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG9rZW4uY29udGVudCAmJiB0eXBlb2YgdG9rZW4uY29udGVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSAnanN4JyAmJiBlbnYubGFuZ3VhZ2UgIT09ICd0c3gnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHdhbGtUb2tlbnMoZW52LnRva2Vucyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHR5cGVzY3JpcHQgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0KTtcblx0UHJpc20ubGFuZ3VhZ2VzLnRzeCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2pzeCcsIHR5cGVzY3JpcHQpO1xuXG5cdC8vIGRvZXNuJ3Qgd29yayB3aXRoIFRTIGJlY2F1c2UgVFMgaXMgdG9vIGNvbXBsZXhcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50c3hbJ3BhcmFtZXRlciddO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnRzeFsnbGl0ZXJhbC1wcm9wZXJ0eSddO1xuXG5cdC8vIFRoaXMgd2lsbCBwcmV2ZW50IGNvbGxpc2lvbnMgYmV0d2VlbiBUU1ggdGFncyBhbmQgVFMgZ2VuZXJpYyB0eXBlcy5cblx0Ly8gSWRlYSBieSBodHRwczovL2dpdGh1Yi5jb20va2FybGhvcmt5XG5cdC8vIERpc2N1c3Npb246IGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yNTk0I2lzc3VlY29tbWVudC03MTA2NjY5Mjhcblx0dmFyIHRhZyA9IFByaXNtLmxhbmd1YWdlcy50c3gudGFnO1xuXHR0YWcucGF0dGVybiA9IFJlZ0V4cCgvKF58W15cXHckXXwoPz08XFwvKSkvLnNvdXJjZSArICcoPzonICsgdGFnLnBhdHRlcm4uc291cmNlICsgJyknLCB0YWcucGF0dGVybi5mbGFncyk7XG5cdHRhZy5sb29rYmVoaW5kID0gdHJ1ZTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJlYXNvbiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcclxcblwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyAnY2xhc3MtbmFtZScgbXVzdCBiZSBtYXRjaGVkICphZnRlciogJ2NvbnN0cnVjdG9yJyBkZWZpbmVkIGJlbG93XG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3Ki8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xhc3NlcnR8YmVnaW58Y2xhc3N8Y29uc3RyYWludHxkb3xkb25lfGRvd250b3xlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJuYWx8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGlmfGlufGluY2x1ZGV8aW5oZXJpdHxpbml0aWFsaXplcnxsYXp5fGxldHxtZXRob2R8bW9kdWxlfG11dGFibGV8bmV3fG5vbnJlY3xvYmplY3R8b2Z8b3Blbnxvcnxwcml2YXRlfHJlY3xzaWd8c3RydWN0fHN3aXRjaHx0aGVufHRvfHRyeXx0eXBlfHZhbHx2aXJ0dWFsfHdoZW58d2hpbGV8d2l0aClcXGIvLFxuXHQnb3BlcmF0b3InOiAvXFwuezN9fDpbOj1dfFxcfD58LT58PSg/Oj09P3w+KT98PD0/fD49P3xbfF4/JyMhfmBdfFsrXFwtKlxcL11cXC4/fFxcYig/OmFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kKVxcYi9cbn0pO1xuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncmVhc29uJywgJ2NsYXNzLW5hbWUnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXHhbXFxkYS1mXXsyfXxcXFxcb1swLTNdWzAtN11bMC03XXxcXFxcXFxkezN9fFxcXFwufFteJ1xcXFxcXHJcXG5dKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBOZWdhdGl2ZSBsb29rLWFoZWFkIHByZXZlbnRzIGZyb20gbWF0Y2hpbmcgdGhpbmdzIGxpa2UgU3RyaW5nLmNhcGl0YWxpemVcblx0J2NvbnN0cnVjdG9yJzogL1xcYltBLVpdXFx3KlxcYig/IVxccypcXC4pLyxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPz06OikvLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9XG59KTtcblxuLy8gV2UgY2FuJ3QgbWF0Y2ggZnVuY3Rpb25zIHByb3BlcnR5LCBzbyBsZXQncyBub3QgZXZlbiB0cnkuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnJlYXNvbi5mdW5jdGlvbjtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBzcGVjaWFsRXNjYXBlID0ge1xuXHRcdHBhdHRlcm46IC9cXFxcW1xcXFwoKXt9W1xcXV4kKyo/fC5dLyxcblx0XHRhbGlhczogJ2VzY2FwZSdcblx0fTtcblx0dmFyIGVzY2FwZSA9IC9cXFxcKD86eFtcXGRhLWZBLUZdezJ9fHVbXFxkYS1mQS1GXXs0fXx1XFx7W1xcZGEtZkEtRl0rXFx9fDBbMC03XXswLDJ9fFsxMjNdWzAtN117Mn18Y1thLXpBLVpdfC4pLztcblx0dmFyIGNoYXJTZXQgPSB7XG5cdFx0cGF0dGVybjogL1xcLnxcXFxcW3dzZF18XFxcXHBcXHtbXnt9XStcXH0vaSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH07XG5cdHZhciBjaGFyU2V0V2l0aG91dERvdCA9IHtcblx0XHRwYXR0ZXJuOiAvXFxcXFt3c2RdfFxcXFxwXFx7W157fV0rXFx9L2ksXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9O1xuXG5cdHZhciByYW5nZUNoYXIgPSAnKD86W15cXFxcXFxcXC1dfCcgKyBlc2NhcGUuc291cmNlICsgJyknO1xuXHR2YXIgcmFuZ2UgPSBSZWdFeHAocmFuZ2VDaGFyICsgJy0nICsgcmFuZ2VDaGFyKTtcblxuXHQvLyB0aGUgbmFtZSBvZiBhIGNhcHR1cmluZyBncm91cFxuXHR2YXIgZ3JvdXBOYW1lID0ge1xuXHRcdHBhdHRlcm46IC8oPHwnKVtePD4nXSsoPz1bPiddJCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucmVnZXggPSB7XG5cdFx0J2NoYXItY2xhc3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqKVxcWyg/OlteXFxcXFxcXV18XFxcXFtcXHNcXFNdKSpcXF0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY2hhci1jbGFzcy1uZWdhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFspXFxeLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjaGFyLWNsYXNzLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxbfFxcXSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdyYW5nZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByYW5nZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0XHRcdFx0XHQncmFuZ2UtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8tLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzcGVjaWFsLWVzY2FwZSc6IHNwZWNpYWxFc2NhcGUsXG5cdFx0XHRcdCdjaGFyLXNldCc6IGNoYXJTZXRXaXRob3V0RG90LFxuXHRcdFx0XHQnZXNjYXBlJzogZXNjYXBlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3BlY2lhbC1lc2NhcGUnOiBzcGVjaWFsRXNjYXBlLFxuXHRcdCdjaGFyLXNldCc6IGNoYXJTZXQsXG5cdFx0J2JhY2tyZWZlcmVuY2UnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGEgYmFja3JlZmVyZW5jZSB3aGljaCBpcyBub3QgYW4gb2N0YWwgZXNjYXBlXG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcKD8hWzEyM11bMC03XXsyfSlbMS05XS8sXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcazxbXjw+J10rPi8sXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdncm91cC1uYW1lJzogZ3JvdXBOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdhbmNob3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvWyReXXxcXFxcW0FCYkdael0vLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdlc2NhcGUnOiBlc2NhcGUsXG5cdFx0J2dyb3VwJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9qYXZhc2UvMTAvZG9jcy9hcGkvamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbFxuXHRcdFx0XHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvc3RhbmRhcmQvYmFzZS10eXBlcy9yZWd1bGFyLWV4cHJlc3Npb24tbGFuZ3VhZ2UtcXVpY2stcmVmZXJlbmNlP3ZpZXc9bmV0ZnJhbWV3b3JrLTQuNy4yI2dyb3VwaW5nLWNvbnN0cnVjdHNcblxuXHRcdFx0XHQvLyAoKSwgKD88bmFtZT4pLCAoPyduYW1lJyksICg/PiksICg/OiksICg/PSksICg/ISksICg/PD0pLCAoPzwhKSwgKD9pcy1tKSwgKD9pLW06KVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFwoKD86XFw/KD86PFtePD4nXSs+fCdbXjw+J10rJ3xbPjpdfDw/Wz0hXXxbaWRtbnN1eFVdKyg/Oi1baWRtbnN1eFVdKyk/Oj8pKT8vLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2dyb3VwLW5hbWUnOiBncm91cE5hbWVcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcKS8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncXVhbnRpZmllcic6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpbKyo/XXxcXHtcXGQrKD86LFxcZCopP1xcfSlbPytdPy8sXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdhbHRlcm5hdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXHwvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH1cblx0fTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3d3dy5vcGVucG9saWN5YWdlbnQub3JnL2RvY3MvbGF0ZXN0L3BvbGljeS1yZWZlcmVuY2UvXG5cblByaXNtLmxhbmd1YWdlcy5yZWdvID0ge1xuXHQnY29tbWVudCc6IC8jLiovLFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXC5dKSg/OlwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxgW15gXSpgfFxcYlthLXpfXVxcdypcXGIpKD89XFxzKjooPyE9KSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxgW15gXSpgLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGRlZmF1bHR8ZWxzZXxpbXBvcnR8bm90fG51bGx8cGFja2FnZXxzZXQoPz1cXHMqXFwoKXxzb21lfHdpdGgpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3KlxcYig/OlxccypcXC5cXHMqXFxiW2Etel9dXFx3KlxcYikqKD89XFxzKlxcKCkvaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCduYW1lc3BhY2UnOiAvXFxiXFx3K1xcYig/PVxccypcXC4pLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXG5cdCdudW1iZXInOiAvLT9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqLyV8Jl18Wzw+Oj1dPT98IT18XFxiX1xcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bLDsuXFxbXFxde30oKV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmVucHkgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcIlwiXCJ8JycnKVtcXHNcXFNdKz9cXDF8KFwifCcpKD86XFxcXC58KD8hXFwyKVteXFxcXF0pKlxcMnwoPzpeIz8oPzooPzpbMC05YS1mQS1GXSl7M318WzAtOWEtZkEtRl17Nn0pJCkvbSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxcKCkvaSxcblxuXHQncHJvcGVydHknOiAvXFxiKD86VXBkYXRlfFVwZGF0ZVZlcnNpb258YWN0aW9ufGFjdGl2YXRlX3NvdW5kfGFkdl9udmxfdHJhbnNpdGlvbnxhZnRlcl9sb2FkX3RyYW5zaXRpb258YWxpZ258YWxwaGF8YWx0fGFuY2hvcnxhbnRpYWxpYXN8YXJlYXxhdXRvfGJhY2tncm91bmR8YmFyX2ludmVydHxiYXJfcmVzaXppbmd8YmFyX3ZlcnRpY2FsfGJsYWNrX2NvbG9yfGJvbGR8Ym90dG9tX2Jhcnxib3R0b21fZ3V0dGVyfGJvdHRvbV9tYXJnaW58Ym90dG9tX3BhZGRpbmd8Ym94X3JldmVyc2V8Ym94X3dyYXB8Y2FuX3VwZGF0ZXxjYXJldHxjaGlsZHxjb2xvcnxjcm9wfGRlZmF1bHRfYWZtX2VuYWJsZXxkZWZhdWx0X2FmbV90aW1lfGRlZmF1bHRfZnVsbHNjcmVlbnxkZWZhdWx0X3RleHRfY3BzfGRldmVsb3BlcnxkaXJlY3RvcnlfbmFtZXxkcmFnX2hhbmRsZXxkcmFnX2pvaW5lZHxkcmFnX25hbWV8ZHJhZ19yYWlzZXxkcmFnZ2FibGV8ZHJhZ2dlZHxkcm9wX3NoYWRvd3xkcm9wX3NoYWRvd19jb2xvcnxkcm9wcGFibGV8ZHJvcHBlZHxlYXNlaW58ZWFzZW91dHxlZGdlc2Nyb2xsfGVuZF9nYW1lX3RyYW5zaXRpb258ZW5kX3NwbGFzaF90cmFuc2l0aW9ufGVudGVyX3JlcGxheV90cmFuc2l0aW9ufGVudGVyX3NvdW5kfGVudGVyX3RyYW5zaXRpb258ZW50ZXJfeWVzbm9fdHJhbnNpdGlvbnxleGVjdXRhYmxlX25hbWV8ZXhpdF9yZXBsYXlfdHJhbnNpdGlvbnxleGl0X3NvdW5kfGV4aXRfdHJhbnNpdGlvbnxleGl0X3llc25vX3RyYW5zaXRpb258ZmFkZWlufGZhZGVvdXR8Zmlyc3RfaW5kZW50fGZpcnN0X3NwYWNpbmd8Zml0X2ZpcnN0fGZvY3VzfGZvY3VzX21hc2t8Zm9udHxmb3JlZ3JvdW5kfGdhbWVfbWFpbl90cmFuc2l0aW9ufGdldF9pbnN0YWxsZWRfcGFja2FnZXN8Z29vZ2xlX3BsYXlfa2V5fGdvb2dsZV9wbGF5X3NhbHR8Z3JvdW5kfGhhc19tdXNpY3xoYXNfc291bmR8aGFzX3ZvaWNlfGhlaWdodHxoZWxwfGhpbnRpbmd8aG92ZXJ8aG92ZXJfYmFja2dyb3VuZHxob3Zlcl9jb2xvcnxob3Zlcl9zb3VuZHxob3ZlcmVkfGh5cGVybGlua19mdW5jdGlvbnN8aWRsZXxpZGxlX2NvbG9yfGltYWdlX3N0eWxlfGluY2x1ZGVfdXBkYXRlfGluc2Vuc2l0aXZlfGluc2Vuc2l0aXZlX2JhY2tncm91bmR8aW5zZW5zaXRpdmVfY29sb3J8aW5zaWRlfGludHJhX3RyYW5zaXRpb258aXRhbGljfGp1c3RpZnl8a2VybmluZ3xrZXlib2FyZF9mb2N1c3xsYW5ndWFnZXxsYXllcl9jbGlwcGluZ3xsYXllcnN8bGF5b3V0fGxlZnRfYmFyfGxlZnRfZ3V0dGVyfGxlZnRfbWFyZ2lufGxlZnRfcGFkZGluZ3xsZW5ndGh8bGluZV9sZWFkaW5nfGxpbmVfb3ZlcmxhcF9zcGxpdHxsaW5lX3NwYWNpbmd8bGluZWFyfG1haW5fZ2FtZV90cmFuc2l0aW9ufG1haW5fbWVudV9tdXNpY3xtYXhpbXVtfG1pbl93aWR0aHxtaW5pbXVtfG1pbndpZHRofG1vZGFsfG1vdXNlfG1vdXNld2hlZWx8bmFtZXxuYXJyYXRvcl9tZW51fG5ld2xpbmVfaW5kZW50fG52bF9hZHZfdHJhbnNpdGlvbnxvZmZzZXR8b3JkZXJfcmV2ZXJzZXxvdXRsaW5lc3xvdmVybGF5X2Z1bmN0aW9uc3xwb3N8cG9zaXRpb258cHJlZml4fHJhZGl1c3xyYW5nZXxyZXN0X2luZGVudHxyaWdodF9iYXJ8cmlnaHRfZ3V0dGVyfHJpZ2h0X21hcmdpbnxyaWdodF9wYWRkaW5nfHJvdGF0ZXxyb3RhdGVfcGFkfHJ1Ynlfc3R5bGV8c2FtcGxlX3NvdW5kfHNhdmVfZGlyZWN0b3J5fHNheV9hdHRyaWJ1dGVfdHJhbnNpdGlvbnxzY3JlZW5faGVpZ2h0fHNjcmVlbl93aWR0aHxzY3JvbGxiYXJzfHNlbGVjdGVkX2hvdmVyfHNlbGVjdGVkX2hvdmVyX2NvbG9yfHNlbGVjdGVkX2lkbGV8c2VsZWN0ZWRfaWRsZV9jb2xvcnxzZWxlY3RlZF9pbnNlbnNpdGl2ZXxzaG93X3NpZGVfaW1hZ2V8c2hvd190d29fd2luZG93fHNpZGVfc3BhY2luZ3xzaWRlX3hwb3N8c2lkZV95cG9zfHNpemV8c2l6ZV9ncm91cHxzbG93X2Nwc3xzbG93X2Nwc19tdWx0aXBsaWVyfHNwYWNpbmd8c3RyaWtldGhyb3VnaHxzdWJwaXhlbHx0ZXh0X2FsaWdufHRleHRfc3R5bGV8dGV4dF94cG9zfHRleHRfeV9mdWRnZXx0ZXh0X3lwb3N8dGh1bWJ8dGh1bWJfb2Zmc2V0fHRodW1iX3NoYWRvd3x0aHVtYm5haWxfaGVpZ2h0fHRodW1ibmFpbF93aWR0aHx0aW1lfHRvcF9iYXJ8dG9wX2d1dHRlcnx0b3BfbWFyZ2lufHRvcF9wYWRkaW5nfHRyYW5zbGF0aW9uc3x1bmRlcmxpbmV8dW5zY3JvbGxhYmxlfHVwZGF0ZXx2YWx1ZXx2ZXJzaW9ufHZlcnNpb25fbmFtZXx2ZXJzaW9uX3R1cGxlfHZlcnRpY2FsfHdpZHRofHdpbmRvd19oaWRlX3RyYW5zaXRpb258d2luZG93X2ljb258d2luZG93X2xlZnRfcGFkZGluZ3x3aW5kb3dfc2hvd190cmFuc2l0aW9ufHdpbmRvd190aXRsZXx3aW5kb3dzX2ljb258eGFkanVzdG1lbnR8eGFsaWdufHhhbmNob3J8eGFuY2hvcmFyb3VuZHx4YXJvdW5kfHhjZW50ZXJ8eGZpbGx8eGluaXRpYWx8eG1hcmdpbnx4bWF4aW11bXx4bWluaW11bXx4b2Zmc2V0fHhvZnNzZXR8eHBhZGRpbmd8eHBvc3x4c2l6ZXx4em9vbXx5YWRqdXN0bWVudHx5YWxpZ258eWFuY2hvcnx5YW5jaG9yYXJvdW5kfHlhcm91bmR8eWNlbnRlcnx5ZmlsbHx5aW5pdGlhbHx5bWFyZ2lufHltYXhpbXVtfHltaW5pbXVtfHlvZmZzZXR8eXBhZGRpbmd8eXBvc3x5c2l6ZXx5c2l6ZXh5c2l6ZXx5em9vbXx6b29tfHpvcmRlcilcXGIvLFxuXG5cdCd0YWcnOiAvXFxiKD86YmFyfGJsb2NrfGJ1dHRvbnxidXR0b3NjcmVlbm58ZHJhZ3xkcmFnZ3JvdXB8Zml4ZWR8ZnJhbWV8Z3JpZHxbaHZdYm94fGhvdGJhcnxob3RzcG90fGltYWdlfGltYWdlYnV0dG9ufGltYWdlbWFwfGlucHV0fGtleXxsYWJlbHxtZW51fG1tX21lbnVfZnJhbWV8bW91c2VhcmVhfG52bHxwYXJhbGxlbHxzY3JlZW58c2VsZnxzaWRlfHRhZ3x0ZXh0fHRleHRidXR0b258dGltZXJ8dmJhcnx2aWV3cG9ydHx3aW5kb3cpXFxifFxcJC8sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86Tm9uZXxhZGR8YWRqdXN0bWVudHxhbGlnbmFyb3VuZHxhbGxvd3xhbmdsZXxhbmltYXRpb258YXJvdW5kfGFzfGFzc2VydHxiZWhpbmR8Ym94X2xheW91dHxicmVha3xidWlsZHxjYWNoZXxjYWxsfGNlbnRlcnxjaGFuZ2VkfGNoaWxkX3NpemV8Y2hvaWNlfGNpcmNsZXN8Y2xhc3N8Y2xlYXJ8Y2xpY2tlZHxjbGlwcGluZ3xjbG9ja3dpc2V8Y29uZmlnfGNvbnRhaW5zfGNvbnRpbnVlfGNvcm5lcjF8Y29ybmVyMnxjb3VudGVyY2xvY2t3aXNlfGRlZnxkZWZhdWx0fGRlZmluZXxkZWx8ZGVsYXl8ZGlzYWJsZWR8ZGlzYWJsZWRfdGV4dHxkaXNzb2x2ZXxlbGlmfGVsc2V8ZXZlbnR8ZXhjZXB0fGV4Y2x1ZGV8ZXhlY3xleHByZXNzaW9ufGZhZGV8ZmluYWxseXxmb3J8ZnJvbXxmdW5jdGlvbnxnbG9iYWx8Z21fcm9vdHxoYXN8aGlkZXxpZHxpZnxpbXBvcnR8aW58aW5pdHxpc3xqdW1wfGtub3R8bGFtYmRhfGxlZnR8bGVzc19yb3VuZGVkfG1tX3Jvb3R8bW92aWV8bXVzaWN8bnVsbHxvbnxvbmxheWVyfHBhc3N8cGF1c2V8cGVyc2lzdGVudHxwbGF5fHByaW50fHB5dGhvbnxxdWV1ZXxyYWlzZXxyYW5kb218cmVucHl8cmVwZWF0fHJldHVybnxyaWdodHxyb3VuZGVkX3dpbmRvd3xzY2VuZXxzY29wZXxzZXR8c2hvd3xzbG93fHNsb3dfYWJvcnRhYmxlfHNsb3dfZG9uZXxzb3VuZHxzdG9wfHN0b3JlfHN0eWxlfHN0eWxlX2dyb3VwfHN1YnN0aXR1dGV8c3VmZml4fHRoZW1lfHRyYW5zZm9ybXx0cmFuc2Zvcm1fYW5jaG9yfHRyYW5zcG9zZXx0cnl8dWl8dW5ob3ZlcmVkfHVwZGF0ZXJ8dXNlfHZvaWNlfHdoaWxlfHdpZGdldHx3aWRnZXRfaG92ZXJ8d2lkZ2V0X3NlbGVjdGVkfHdpZGdldF90ZXh0fHlpZWxkKVxcYi8sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86W0ZmXWFsc2V8W1R0XXJ1ZSlcXGIvLFxuXG5cdCdudW1iZXInOiAvKD86XFxiKD86MFtib10pPyg/Oig/OlxcZHwweFtcXGRhLWZdKVtcXGRhLWZdKig/OlxcLlxcZCopPyl8XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT9qPy9pLFxuXG5cdCdvcGVyYXRvcic6IC9bLSslPV09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XXxcXGIoPzphbmR8YXR8bm90fG9yfHdpdGgpXFxiLyxcblxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucnB5ID0gUHJpc20ubGFuZ3VhZ2VzLnJlbnB5O1xuXG5QcmlzbS5sYW5ndWFnZXMucmVzY3JpcHQgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7IHBhdHRlcm46IC8nKD86W15cXHJcXG5cXFxcXXxcXFxcKD86LnxcXHcrKSknLywgZ3JlZWR5OiB0cnVlIH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KnxAW2Etei5dKnwjW0EtWmEtel1cXHcqfCNcXGQvLFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1thLXpBLVpdXFx3Kig/PVxcKCl8KFxcLilbYS16XVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1bF17MCw0fS9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdhdHRyLXZhbHVlJzogL1tBLVphLXpdXFx3Kig/PT0pLyxcblx0J2NvbnN0YW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXFxidHlwZVxccyspW2Etel1cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd0YWcnOiB7XG5cdFx0cGF0dGVybjogLyg8KVthLXpdXFx3KnwoPzo8XFwvKVthLXpdXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdvcGVyYXRvcic6IC88fD58XFwvLyxcblx0XHR9LFxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YXN8YXNzZXJ0fGJlZ2lufGJvb2x8Y2xhc3N8Y29uc3RyYWludHxkb3xkb25lfGRvd250b3xlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJuYWx8ZmxvYXR8Zm9yfGZ1bnxmdW5jdGlvbnxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5pdGlhbGl6ZXJ8aW50fGxhenl8bGV0fG1ldGhvZHxtb2R1bGV8bXV0YWJsZXxuZXd8bm9ucmVjfG9iamVjdHxvZnxvcGVufG9yfHByaXZhdGV8cmVjfHN0cmluZ3xzd2l0Y2h8dGhlbnx0b3x0cnl8dHlwZXx3aGVufHdoaWxlfHdpdGgpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcLnszfXw6Wzo9XT98XFx8PnwtPnw9KD86PT0/fD4pP3w8PT98Pj0/fFt8Xj8nIyF+YF18WytcXC0qXFwvXVxcLj98XFxiKD86YXNyfGxhbmR8bG9yfGxzbHxsc3J8bHhvcnxtb2QpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXSw7Ll0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdyZXNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdCd0ZW1wbGF0ZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118XFwkXFx7KD86W157fV18XFx7KD86W157fV18XFx7W159XSpcXH0pKlxcfSkrXFx9fCg/IVxcJFxceylbXlxcXFxgXSkqYC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RlbXBsYXRlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXmB8YCQvLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5yZXNjcmlwdFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5yZXMgPSBQcmlzbS5sYW5ndWFnZXMucmVzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5yZXN0ID0ge1xuXHQndGFibGUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpcXCtbPS1dKykrXFwrKD86XFxyP1xcbnxcXHIpKD86XFwxWyt8XS4rWyt8XSg/Olxccj9cXG58XFxyKSkrXFwxKD86XFwrWz0tXSspK1xcKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8fCg/OlxcK1s9LV0rKStcXCsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKT0rIFsgPV0qPSg/Oig/Olxccj9cXG58XFxyKVxcMS4rKSsoPzpcXHI/XFxufFxccilcXDE9KyBbID1dKj0oPz0oPzpcXHI/XFxufFxccil7Mn18XFxzKiQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPS1dKy9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cblx0Ly8gRGlyZWN0aXZlLWxpa2UgcGF0dGVybnNcblxuXHQnc3Vic3RpdHV0aW9uLWRlZic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuIClcXHwoPzpbXnxcXHNdKD86W158XSpbXnxcXHNdKT8pXFx8IFteOl0rOjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N1YnN0aXR1dGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXHwoPzpbXnxcXHNdfFtefFxcc11bXnxdKltefFxcc10pXFx8Lyxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHx8XFx8JC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oICkoPyEgKVteOl0rOjovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6JC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2xpbmstdGFyZ2V0JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKVxcW1teXFxdXStcXF0vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdJC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKV8oPzpgW15gXStgfCg/OlteOlxcXFxdfFxcXFwuKSspOi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXl98OiQvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4gKVteOl0rOjovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6JC9cblx0XHR9XG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdC8vIFRoZSB0d28gYWx0ZXJuYXRpdmVzIHRyeSB0byBwcmV2ZW50IGhpZ2hsaWdodGluZyBvZiBibGFuayBjb21tZW50c1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXC5cXC4pKD86KD86IC4rKT8oPzooPzpcXHI/XFxufFxccikuKykrfCAuKykoPz0oPzpcXHI/XFxufFxccil7Mn18JCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J3RpdGxlJzogW1xuXHRcdC8vIE92ZXJsaW5lZCBhbmQgdW5kZXJsaW5lZFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9eKChbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMispKD86XFxyP1xcbnxcXHIpLisoPzpcXHI/XFxufFxccilcXDEkL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dK3xbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKyQvLFxuXHRcdFx0XHQnaW1wb3J0YW50JzogLy4rL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBVbmRlcmxpbmVkIG9ubHlcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58KD86XFxyP1xcbnxcXHIpezJ9KS4rKD86XFxyP1xcbnxcXHIpKFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pXFwyKyg/PVxccj9cXG58XFxyfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1shXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0rJC8sXG5cdFx0XHRcdCdpbXBvcnRhbnQnOiAvLisvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXHQnaHInOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXHI/XFxufFxccil7Mn0pKFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pXFwyezMsfSg/PSg/Olxccj9cXG58XFxyKXsyfSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J2ZpZWxkJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopOlteOlxcclxcbl0rOig/PSApL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0J2NvbW1hbmQtbGluZS1vcHRpb24nOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpbKy1dW2EtelxcZF18KD86LS18XFwvKVthLXpcXGQtXSspKD86WyA9XSg/OlthLXpdW1xcdy1dKnw8W148Pl0rPikpPyg/OiwgKD86WystXVthLXpcXGRdfCg/Oi0tfFxcLylbYS16XFxkLV0rKSg/OlsgPV0oPzpbYS16XVtcXHctXSp8PFtePD5dKz4pKT8pKig/PSg/Olxccj9cXG58XFxyKT8gezIsfVxcUykvaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblx0J2xpdGVyYWwtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLzo6KD86XFxyP1xcbnxcXHIpezJ9KFsgXFx0XSspKD8hWyBcXHRdKS4rKD86KD86XFxyP1xcbnxcXHIpXFwxLispKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbGl0ZXJhbC1ibG9jay1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL146Oi8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQncXVvdGVkLWxpdGVyYWwtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLzo6KD86XFxyP1xcbnxcXHIpezJ9KFshXCIjJCUmJygpKissXFwtLlxcLzo7PD0+P0BcXFtcXFxcXFxdXl9ge3x9fl0pLiooPzooPzpcXHI/XFxufFxccilcXDEuKikqLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdsaXRlcmFsLWJsb2NrLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXig/Ojo6fChbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMSopL20sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbGlzdC1idWxsZXQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpbKitcXC1cdTIwMjJcdTIwMjNcdTIwNDNdfFxcKD8oPzpcXGQrfFthLXpdfFtpdnhkY2xtXSspXFwpfCg/OlxcZCt8W2Etel18W2l2eGRjbG1dKylcXC4pKD89ICkvaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnZG9jdGVzdC1ibG9jayc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKT4+PiAuKyg/Oig/Olxccj9cXG58XFxyKS4rKSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL14+Pj4vXG5cdFx0fVxuXHR9LFxuXG5cdCdpbmxpbmUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFtcXHNcXC06XFwvJ1wiPChcXFt7XSkoPzo6W146XSs6YC4qP2B8YC4qP2A6W146XSs6fChcXCpcXCo/fGBgP3xcXHwpKD8hXFxzKSg/Oig/IVxcMikuKSpcXFNcXDIoPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFwqXFwqKS4rKD89XFwqXFwqJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2l0YWxpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCopLisoPz1cXCokKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5saW5lLWxpdGVyYWwnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheYGApLisoPz1gYCQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncm9sZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXjpdKzp8OlteOl0rOiQvLFxuXHRcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL146fDokL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycHJldGVkLXRleHQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheYCkuKyg/PWAkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdWJzdGl0dXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFx8KS4rKD89XFx8JCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwqXFwqP3xgYD98XFx8L1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblxuXHQnbGluayc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxbW15cXFtcXF1dK1xcXV8oPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKS8sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdXyQvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxiW2EtelxcZF0rKD86W18uOitdW2EtelxcZF0rKSpfP198YFteYF0rYF8/X3xfYFteYF0rYCkoPz1bXFxzXFwtLiw6OyE/XFxcXFxcLydcIilcXF19XXwkKS9pLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXz9gfGAkfGA/Xz9fJC9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cblx0Ly8gTGluZSBibG9jayBzdGFydCxcblx0Ly8gcXVvdGUgYXR0cmlidXRpb24sXG5cdC8vIGV4cGxpY2l0IG1hcmt1cCBzdGFydCxcblx0Ly8gYW5kIGFub255bW91cyBoeXBlcmxpbmsgdGFyZ2V0IHNob3J0Y3V0IChfXylcblx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86XFx8KD89IHwkKXwoPzotLS0/fFx1MjAxNHxcXC5cXC58X18pKD89ICl8XFwuXFwuJCkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yaXAgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC9cXEJgW15cXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XVxcYi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14vXSlcXC8oPyFcXC8pKD86XFxbW15cXG5cXHJcXF1dKlxcXXxcXFxcLnxbXi9cXFxcXFxyXFxuXFxbXSkrXFwvKD89XFxzKig/OiR8W1xcclxcbiwuO30pXSkpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogLyg/Oj0+fC0+KXxcXGIoPzpjYXNlfGNhdGNofGNsYXNzfGVsc2V8ZXhpdHxmaW5hbGx5fGlmfHJhaXNlfHJldHVybnxzd2l0Y2h8dHJ5KVxcYi8sXG5cblx0J2J1aWx0aW4nOiAvQHxcXGJTeXN0ZW1cXGIvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZGF0ZSc6IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfVxcYi8sXG5cdCd0aW1lJzogL1xcYlxcZHsyfTpcXGR7Mn06XFxkezJ9XFxiLyxcblx0J2RhdGV0aW1lJzogL1xcYlxcZHs0fS1cXGR7Mn0tXFxkezJ9VFxcZHsyfTpcXGR7Mn06XFxkezJ9XFxiLyxcblxuXHQnc3ltYm9sJzogLzpbXlxcZFxcc2AnXCIsLjo7I1xcL1xcXFwoKTw+XFxbXFxde31dW15cXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XSovLFxuXHQnbnVtYmVyJzogL1srLV0/XFxiKD86XFxkK1xcLlxcZCt8XFxkKylcXGIvLFxuXG5cdCdwdW5jdHVhdGlvbic6IC8oPzpcXC57MiwzfSl8W2AsLjo7PVxcL1xcXFwoKTw+XFxbXFxde31dLyxcblxuXHQncmVmZXJlbmNlJzogL1teXFxkXFxzYCdcIiwuOjsjXFwvXFxcXCgpPD5cXFtcXF17fV1bXlxcc2AnXCIsLjo7I1xcL1xcXFwoKTw+XFxbXFxde31dKi9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5yb2JvY29uZiA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J2tleXdvcmQnOiB7XG5cdFx0J3BhdHRlcm4nOiAvKF58XFxzKSg/Oig/OmV4dGVybmFsfGltcG9ydClcXGJ8KD86ZmFjZXR8aW5zdGFuY2Ugb2YpKD89WyBcXHRdK1tcXHctXStbIFxcdF0qXFx7KSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2NvbXBvbmVudCc6IHtcblx0XHRwYXR0ZXJuOiAvW1xcdy1dKyg/PVsgXFx0XSpcXHspLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQncHJvcGVydHknOiAvW1xcdy4tXSsoPz1bIFxcdF0qOikvLFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLyg9WyBcXHRdKig/IVsgXFx0XSkpW14sO10rLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0fSxcblx0J29wdGlvbmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXChvcHRpb25hbFxcKS8sXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQnd2lsZGNhcmQnOiB7XG5cdFx0cGF0dGVybjogLyhcXC4pXFwqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9be30sLjs6PV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKnwgezJ9fFxcdCkjLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdHZhciB2YXJpYWJsZSA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopWyRAJiVdXFx7KD86W157fVxcclxcbl18XFx7W157fVxcclxcbl0qXFx9KSpcXH0vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXlskQCYlXVxce3xcXH0kL1xuXHRcdH1cblx0fTtcblxuXHRmdW5jdGlvbiBjcmVhdGVTZWN0aW9uKG5hbWUsIGluc2lkZSkge1xuXHRcdHZhciBleHRlbmRlY0luc2lkZSA9IHt9O1xuXG5cdFx0ZXh0ZW5kZWNJbnNpZGVbJ3NlY3Rpb24taGVhZGVyJ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvXiA/XFwqezN9Lis/XFwqezN9Lyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9O1xuXG5cdFx0Ly8gY29weSBpbnNpZGUgdG9rZW5zXG5cdFx0Zm9yICh2YXIgdG9rZW4gaW4gaW5zaWRlKSB7XG5cdFx0XHRleHRlbmRlY0luc2lkZVt0b2tlbl0gPSBpbnNpZGVbdG9rZW5dO1xuXHRcdH1cblxuXHRcdGV4dGVuZGVjSW5zaWRlWyd0YWcnXSA9IHtcblx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0oPzogezJ9fFxcdClbIFxcdF0qKVxcW1stXFx3XStcXF0vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS9cblx0XHRcdH1cblx0XHR9O1xuXHRcdGV4dGVuZGVjSW5zaWRlWyd2YXJpYWJsZSddID0gdmFyaWFibGU7XG5cdFx0ZXh0ZW5kZWNJbnNpZGVbJ2NvbW1lbnQnXSA9IGNvbW1lbnQ7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC9eID9cXCp7M31bIFxcdF0qPG5hbWU+WyBcXHRdKlxcKnszfSg/Oi58W1xcclxcbl0oPyFcXCp7M30pKSovLnNvdXJjZS5yZXBsYWNlKC88bmFtZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbmFtZTsgfSksICdpbScpLFxuXHRcdFx0YWxpYXM6ICdzZWN0aW9uJyxcblx0XHRcdGluc2lkZTogZXh0ZW5kZWNJbnNpZGVcblx0XHR9O1xuXHR9XG5cblxuXHR2YXIgZG9jVGFnID0ge1xuXHRcdHBhdHRlcm46IC8oXFxbRG9jdW1lbnRhdGlvblxcXSg/OiB7Mn18XFx0KVsgXFx0XSopKD8hWyBcXHRdfCMpKD86LnwoPzpcXHJcXG4/fFxcbilbIFxcdF0qXFwuezN9KSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH07XG5cblx0dmFyIHRlc3ROYW1lTGlrZSA9IHtcblx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dID8pKD8hIykoPzpcXFMoPzpbIFxcdF1cXFMpKikrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGVcblx0XHR9XG5cdH07XG5cblx0dmFyIHRlc3RQcm9wZXJ0eUxpa2UgPSB7XG5cdFx0cGF0dGVybjogLyhbXFxyXFxuXSg/OiB7Mn18XFx0KVsgXFx0XSopKD8hXFxbfFxcLnszfXwjKSg/OlxcUyg/OlsgXFx0XVxcUykqKSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3JvYm90ZnJhbWV3b3JrJ10gPSB7XG5cdFx0J3NldHRpbmdzJzogY3JlYXRlU2VjdGlvbignU2V0dGluZ3MnLCB7XG5cdFx0XHQnZG9jdW1lbnRhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSA/RG9jdW1lbnRhdGlvbig/OiB7Mn18XFx0KVsgXFx0XSopKD8hWyBcXHRdfCMpKD86LnwoPzpcXHJcXG4/fFxcbilbIFxcdF0qXFwuezN9KSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0gPykoPyFcXC57M318IykoPzpcXFMoPzpbIFxcdF1cXFMpKikrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pLFxuXHRcdCd2YXJpYWJsZXMnOiBjcmVhdGVTZWN0aW9uKCdWYXJpYWJsZXMnKSxcblx0XHQndGVzdC1jYXNlcyc6IGNyZWF0ZVNlY3Rpb24oJ1Rlc3QgQ2FzZXMnLCB7XG5cdFx0XHQndGVzdC1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J2tleXdvcmRzJzogY3JlYXRlU2VjdGlvbignS2V5d29yZHMnLCB7XG5cdFx0XHQna2V5d29yZC1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J3Rhc2tzJzogY3JlYXRlU2VjdGlvbignVGFza3MnLCB7XG5cdFx0XHQndGFzay1uYW1lJzogdGVzdE5hbWVMaWtlLFxuXHRcdFx0J2RvY3VtZW50YXRpb24nOiBkb2NUYWcsXG5cdFx0XHQncHJvcGVydHknOiB0ZXN0UHJvcGVydHlMaWtlXG5cdFx0fSksXG5cdFx0J2NvbW1lbnQnOiBjb21tZW50XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJvYm90ID0gUHJpc20ubGFuZ3VhZ2VzWydyb2JvdGZyYW1ld29yayddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgbXVsdGlsaW5lQ29tbWVudCA9IC9cXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8PHNlbGY+KSpcXCpcXC8vLnNvdXJjZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCAyOyBpKyspIHtcblx0XHQvLyBzdXBwb3J0IDQgbGV2ZWxzIG9mIG5lc3RlZCBjb21tZW50c1xuXHRcdG11bHRpbGluZUNvbW1lbnQgPSBtdWx0aWxpbmVDb21tZW50LnJlcGxhY2UoLzxzZWxmPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtdWx0aWxpbmVDb21tZW50OyB9KTtcblx0fVxuXHRtdWx0aWxpbmVDb21tZW50ID0gbXVsdGlsaW5lQ29tbWVudC5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1teXFxzXFxTXS8uc291cmNlOyB9KTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0ID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteXFxcXF0pLy5zb3VyY2UgKyBtdWx0aWxpbmVDb21tZW50KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYj9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifGI/cigjKilcIig/OlteXCJdfFwiKD8hXFwxKSkqXCJcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2hhcic6IHtcblx0XHRcdHBhdHRlcm46IC9iPycoPzpcXFxcKD86eFswLTddW1xcZGEtZkEtRl18dVxceyg/OltcXGRhLWZBLUZdXyopezEsNn1cXH18Lil8W15cXFxcXFxyXFxuXFx0J10pJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyE/XFxbKD86W15cXFtcXF1cIl18XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIikqXFxdLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQ2xvc3VyZSBwYXJhbXMgc2hvdWxkIG5vdCBiZSBjb25mdXNlZCB3aXRoIGJpdHdpc2UgT1IgfFxuXHRcdCdjbG9zdXJlLXBhcmFtcyc6IHtcblx0XHRcdHBhdHRlcm46IC8oWz0oLDpdXFxzKnxcXGJtb3ZlXFxzKilcXHxbXnxdKlxcfHxcXHxbXnxdKlxcfCg/PVxccyooPzpcXHt8LT4pKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjbG9zdXJlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFx8fFxcfCQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdsaWZldGltZS1hbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLydcXHcrLyxcblx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdH0sXG5cblx0XHQnZnJhZ21lbnQtc3BlY2lmaWVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXCRcXHcrOilbYS16XSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cblx0XHQnZnVuY3Rpb24tZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiZm5cXHMrKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQndHlwZS1kZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfHN0cnVjdHx0cmFpdHx0eXBlfHVuaW9uKVxccyspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J21vZHVsZS1kZWNsYXJhdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGIoPzpjcmF0ZXxtb2QpXFxzKylbYS16XVthLXpfXFxkXSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ25hbWVzcGFjZSdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y3JhdGV8c2VsZnxzdXBlcilcXHMqKTo6XFxzKlthLXpdW2Etel9cXGRdKlxcYig/Olxccyo6Oig/OlxccypbYS16XVthLXpfXFxkXSpcXHMqOjopKik/Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICduYW1lc3BhY2UnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOjovXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZWZlcmVuY2UvYmxvYi9tYXN0ZXIvc3JjL2tleXdvcmRzLm1kXG5cdFx0XHQvXFxiKD86U2VsZnxhYnN0cmFjdHxhc3xhc3luY3xhd2FpdHxiZWNvbWV8Ym94fGJyZWFrfGNvbnN0fGNvbnRpbnVlfGNyYXRlfGRvfGR5bnxlbHNlfGVudW18ZXh0ZXJufGZpbmFsfGZufGZvcnxpZnxpbXBsfGlufGxldHxsb29wfG1hY3JvfG1hdGNofG1vZHxtb3ZlfG11dHxvdmVycmlkZXxwcml2fHB1YnxyZWZ8cmV0dXJufHNlbGZ8c3RhdGljfHN0cnVjdHxzdXBlcnx0cmFpdHx0cnl8dHlwZXx0eXBlb2Z8dW5pb258dW5zYWZlfHVuc2l6ZWR8dXNlfHZpcnR1YWx8d2hlcmV8d2hpbGV8eWllbGQpXFxiLyxcblx0XHRcdC8vIHByaW1pdGl2ZXMgYW5kIHN0clxuXHRcdFx0Ly8gaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvcnVzdC1ieS1leGFtcGxlL3ByaW1pdGl2ZXMuaHRtbFxuXHRcdFx0L1xcYig/OmJvb2x8Y2hhcnxmKD86MzJ8NjQpfFt1aV0oPzo4fDE2fDMyfDY0fDEyOHxzaXplKXxzdHIpXFxiL1xuXHRcdF0sXG5cblx0XHQvLyBmdW5jdGlvbnMgY2FuIHRlY2huaWNhbGx5IHN0YXJ0IHdpdGggYW4gdXBwZXItY2FzZSBsZXR0ZXIsIGJ1dCB0aGlzIHdpbGwgaW50cm9kdWNlIGEgbG90IG9mIGZhbHNlIHBvc2l0aXZlc1xuXHRcdC8vIGFuZCBSdXN0J3MgbmFtaW5nIGNvbnZlbnRpb25zIHJlY29tbWVuZCBzbmFrZV9jYXNlIGFueXdheS5cblx0XHQvLyBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnLzEuMC4wL3N0eWxlL3N0eWxlL25hbWluZy9SRUFETUUuaHRtbFxuXHRcdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKig/Ojo6XFxzKjx8XFwoKSkvLFxuXHRcdCdtYWNybyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJcXHcrIS8sXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J2NvbnN0YW50JzogL1xcYltBLVpfXVtBLVpfXFxkXStcXGIvLFxuXHRcdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi8sXG5cblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogLyg/OlxcYlthLXpdW2Etel9cXGRdKlxccyo6OlxccyopKlxcYlthLXpdW2Etel9cXGRdKlxccyo6Oig/IVxccyo8KS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBIZXgsIG9jdCwgYmluLCBkZWMgbnVtYmVycyB3aXRoIHZpc3VhbCBzZXBhcmF0b3JzIGFuZCB0eXBlIHN1ZmZpeFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbXFxkQS1GYS1mXSg/Ol8/W1xcZEEtRmEtZl0pKnwwb1swLTddKD86Xz9bMC03XSkqfDBiWzAxXSg/Ol8/WzAxXSkqfCg/Oig/OlxcZCg/Ol8/XFxkKSopP1xcLik/XFxkKD86Xz9cXGQpKig/OltFZV1bKy1dP1xcZCspPykoPzpfPyg/OmYzMnxmNjR8W2l1XSg/Ojh8MTZ8MzJ8NjR8c2l6ZSk/KSk/XFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLy0+fFxcLlxcLj18XFwuezEsM318Ojp8W3t9W1xcXTsoKSw6XS8sXG5cdFx0J29wZXJhdG9yJzogL1stKypcXC8lIV5dPT98PVs9Pl0/fCZbJj1dP3xcXHxbfD1dP3w8PD89P3w+Pj89P3xbQD9dL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0WydjbG9zdXJlLXBhcmFtcyddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnJ1c3Q7XG5cdFByaXNtLmxhbmd1YWdlcy5ydXN0WydhdHRyaWJ1dGUnXS5pbnNpZGVbJ3N0cmluZyddID0gUHJpc20ubGFuZ3VhZ2VzLnJ1c3RbJ3N0cmluZyddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nUGF0dGVybiA9IC8oPzpcIig/OlwiXCJ8W15cIl0pKlwiKD8hXCIpfCcoPzonJ3xbXiddKSonKD8hJykpLy5zb3VyY2U7XG5cblx0dmFyIG51bWJlciA9IC9cXGIoPzpcXGRbXFxkYS1mXSp4fFxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8pXFxiL2k7XG5cdHZhciBudW1lcmljQ29uc3RhbnQgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZ1BhdHRlcm4gKyAnW2J4XScpLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9O1xuXG5cdHZhciBtYWNyb1ZhcmlhYmxlID0ge1xuXHRcdHBhdHRlcm46IC8mW2Etel9dXFx3Ki9pXG5cdH07XG5cblx0dmFyIG1hY3JvS2V5d29yZCA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzfD18XFwoKSklKD86QUJPUlR8Qll8Q01TfENPUFl8RElTUExBWXxET3xFTFNFfEVORHxFVkFMfEdMT0JBTHxHT3xHT1RPfElGfElOQ3xJTkNMVURFfElOREVYfElOUFVUfEtUUklNfExFTkdUSHxMRVR8TElTVHxMT0NBTHxQVVR8UUtUUklNfFFTQ0FOfFFTVUJTVFJ8UVNZU0ZVTkN8UVVQQ0FTRXxSRVRVUk58UlVOfFNDQU58U1VCU1RSfFNVUEVSUXxTWU1ERUx8U1lNRVhJU1R8U1lNR0xPQkx8U1lNTE9DQUx8U1lTQ0FMTHxTWVNFVkFMRnxTWVNFWEVDfFNZU0ZVTkN8U1lTR0VUfFNZU1JQVVR8VEhFTnxUT3xUU098VU5RVU9URXxVTlRJTHxVUENBU0V8V0hJTEV8V0lORE9XKVxcYi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9O1xuXG5cdHZhciBzdGVwID0ge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86cHJvY1xccytcXHcrfGRhdGEoPyE9KXxxdWl0fHJ1bilcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fTtcblxuXHR2YXIgY29tbWVudCA9IFtcblx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKnw7XFxzKilcXCpbXjtdKjsvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF07XG5cblx0dmFyIHN0cmluZyA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoc3RyaW5nUGF0dGVybiksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH07XG5cblx0dmFyIHB1bmN0dWF0aW9uID0gL1skJUAuKCl7fVxcW1xcXTssXFxcXF0vO1xuXG5cdHZhciBmdW5jID0ge1xuXHRcdHBhdHRlcm46IC8lP1xcYlxcdysoPz1cXCgpLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH07XG5cblx0dmFyIGFyZ3MgPSB7XG5cdFx0J2Z1bmN0aW9uJzogZnVuYyxcblx0XHQnYXJnLXZhbHVlJzoge1xuXHRcdFx0cGF0dGVybjogLyg9XFxzKilbQS1aXFwuXSsvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHQnbWFjcm8tdmFyaWFibGUnOiBtYWNyb1ZhcmlhYmxlLFxuXHRcdCdhcmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvW0EtWl0rL2ksXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0fTtcblxuXHR2YXIgZm9ybWF0ID0ge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpmb3JtYXR8cHV0KVxcYj0/W1xcdyckLl0rL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eKD86Zm9ybWF0fHB1dCkoPz09KS9pLFxuXHRcdFx0J2VxdWFscyc6IC89Lyxcblx0XHRcdCdmb3JtYXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXHd8XFwkXFxkKStcXC5cXGQ/Lyxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhbHRmb3JtYXQgPSB7XG5cdFx0cGF0dGVybjogL1xcYig/OmZvcm1hdHxwdXQpXFxzK1tcXHcnXSsoPzpcXHMrWyQuXFx3XSspKyg/PTspL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9eKD86Zm9ybWF0fHB1dCkvaSxcblx0XHRcdCdmb3JtYXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFx3JF0rXFwuXFxkPy8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgZ2xvYmFsU3RhdGVtZW50cyA9IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKT0/KSg/OmNhdG5hbWV8Y2hlY2twb2ludCBleGVjdXRlX2Fsd2F5c3xkbXxlbmRzYXN8ZmlsZW5hbWV8Zm9vdG5vdGV8JWluY2x1ZGV8bGlibmFtZXwlbGlzdHxsb2NrfG1pc3Npbmd8b3B0aW9uc3xwYWdlfHJlc2V0bGluZXwlcnVufHNhc2ZpbGV8c2tpcHxzeXNlY2hvfHRpdGxlXFxkPylcXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fTtcblxuXHR2YXIgc3VibWl0U3RhdGVtZW50ID0ge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86c3VibWl0KD86XFxzKyg/OmxvYWR8bm9ydW58cGFyc2Vvbmx5KSk/fGVuZHN1Ym1pdClcXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fTtcblxuXHR2YXIgYWN0aW9uU2V0cyA9IC9hU3RvcmV8YWNjZXNzQ29udHJvbHxhZ2dyZWdhdGlvbnxhdWRpb3xhdXRvdHVuZXxiYXllc2lhbk5ldENsYXNzaWZpZXJ8YmlvTWVkSW1hZ2V8Ym9vbFJ1bGV8YnVpbHRpbnN8Y2FyZGluYWxpdHl8Y2RtfGNsdXN0ZXJpbmd8Y29uZGl0aW9uYWxSYW5kb21GaWVsZHN8Y29uZmlndXJhdGlvbnxjb3B1bGF8Y291bnRyZWd8ZGF0YURpc2NvdmVyeXxkYXRhUHJlcHJvY2Vzc3xkYXRhU2NpZW5jZVBpbG90fGRhdGFTdGVwfGRlY2lzaW9uVHJlZXxkZWR1cGxpY2F0aW9ufGRlZXBMZWFybnxkZWVwTmV1cmFsfGRlZXBSbm58ZHMyfGVjbXxlbnRpdHlSZXN8ZXNwQ2x1c3RlcnxleHBsYWluTW9kZWx8ZmFjdG1hY3xmYXN0S25ufGZjbXBhY3R8ZmVkU3FsfGZyZXFUYWJ8Z1ZhckNsdXN0ZXJ8Z2FtfGdsZWFtfGdyYXBoU2VtaVN1cExlYXJufGhpZGRlbk1hcmtvdk1vZGVsfGh5cGVyR3JvdXB8aWNhfGltYWdlfGltbHxrZXJuYWxQY2F8bGFuZ01vZGVsfGxkYVRvcGljfGxvYWRTdHJlYW1zfG1iY3xtaXhlZHxtbFRvb2xzfG1vZGVsUHVibGlzaGluZ3xuZXR3b3JrfG5ldXJhbE5ldHxubWZ8bm9uUGFyYW1ldHJpY0JheWVzfG5vbmxpbmVhcnxvcHROZXR3b3JrfG9wdGltaXphdGlvbnxwYW5lbHxwY2F8cGVyY2VudGlsZXxwaHJlZ3xwbHN8cWtifHFsaW18cXVhbnRyZWd8cmVjb21tZW5kfHJlZ3Jlc3Npb258cmVpbmZvcmNlbWVudExlYXJufHJvYnVzdFBjYXxydWxlTWluaW5nfHNhbXBsaW5nfHNhbmR3aWNofHNjY2FzbHxzZWFyY2goPzpBbmFseXRpY3MpP3xzZW50aW1lbnRBbmFseXNpc3xzZXF1ZW5jZXxzZXNzaW9uKD86UHJvcCk/fHNldmVyaXR5fHNpbVN5c3RlbXxzaW1wbGV8c21hcnREYXRhfHNwYXJrRW1iZWRkZWRQcm9jZXNzfHNwYXJzZU1MfHNwYXRpYWxyZWd8c3BjfHN0YWJpbGl0eU1vbml0b3Jpbmd8c3ZEYXRhRGVzY3JpcHRpb258c3ZtfHRhYmxlfHRleHQoPzpGaWx0ZXJzfEZyZXF1ZW5jeXxNaW5pbmd8UGFyc2V8UnVsZSg/OkRldmVsb3B8U2NvcmUpfFRvcGljfFV0aWwpfHRpbWVEYXRhfHRyYW5zcG9zZXx0c0luZm98dHNSZWNvbmNpbGV8dW5pVGltZVNlcmllc3x2YXJSZWR1Y2UvLnNvdXJjZTtcblxuXHR2YXIgY2FzQWN0aW9ucyA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFxccykoPzphY3Rpb25cXHMrKT8oPzo8YWN0PilcXC5bYS16XStcXGJbXjtdKy8uc291cmNlLnJlcGxhY2UoLzxhY3Q+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGlvblNldHM7IH0pLCAnaScpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IFJlZ0V4cCgvKD86PGFjdD4pXFwuW2Etel0rXFxiLy5zb3VyY2UucmVwbGFjZSgvPGFjdD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gYWN0aW9uU2V0czsgfSksICdpJyksXG5cdFx0XHQnYWN0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86YWN0aW9uKS9pLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9LFxuXHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0J2Z1bmN0aW9uJzogZnVuYyxcblx0XHRcdCdhcmctdmFsdWUnOiBhcmdzWydhcmctdmFsdWUnXSxcblx0XHRcdCdvcGVyYXRvcic6IGFyZ3Mub3BlcmF0b3IsXG5cdFx0XHQnYXJndW1lbnQnOiBhcmdzLmFyZyxcblx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0J3N0cmluZyc6IHN0cmluZ1xuXHRcdH1cblx0fTtcblxuXHR2YXIga2V5d29yZHMgPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccyk9PykoPzphZnRlcnxhbmFseXNpc3xhbmR8YXJyYXl8YmFyY2hhcnR8YmFyd2lkdGh8YmVnaW5ncmFwaHxieXxjYWxsfGNhc3xjYmFybGluZXxjZmlsbHxjbGFzcyg/Omxldik/fGNsb3NlfGNvbHVtbnxjb21wdXRlZD98Y29udGFpbnN8Y29udGludWV8ZGF0YSg/PT0pfGRlZmluZXxkZWxldGV8ZGVzY3JpYmV8ZG9jdW1lbnR8ZG9cXHMrb3Zlcnxkb3xkb2x8ZHJvcHxkdWx8ZWxzZXxlbmQoPzpjb21wfHNvdXJjZSk/fGVudHJ5VGl0bGV8ZXZhbCg/OnVhdGUpP3xleGVjKD86dXRlKT98ZXhpdHxmaWxlKD86bmFtZSk/fGZpbGwoPzphdHRycyk/fGZsaXN0fGZuY3xmdW5jdGlvbig/Omxpc3QpP3xnbG9iYWx8Z290b3xncm91cCg/OmJ5KT98aGVhZGxpbmV8aGVhZHNraXB8aGlzdG9ncmFtfGlmfGluZmlsZXxrZWVwfGtleWxhYmVsfGtleXdvcmR8bGFiZWx8bGF5b3V0fGxlYXZlfGxlZ2VuZGxhYmVsfGxlbmd0aHxsaWJuYW1lfGxvYWRhY3Rpb25zZXR8bWVyZ2V8bWlkcG9pbnRzfF8/bnVsbF98bmFtZXxub29ic3xub3dkfG9kc3xvcHRpb25zfG9yfG90aGVyd2lzZXxvdXQoPzpwdXQpP3xvdmVyKD86bGF5KT98cGxvdHxwcmludHxwdXR8cmFpc2V8cmFuZXhwfHJhbm5vcnxyYnJlYWt8cmV0YWlufHJldHVybnxzZWxlY3R8c2Vzc2lvbnxzZXNzcmVmfHNldHxzb3VyY2V8c3RhdGdyYXBofHN1bXxzdW1tYXJpemV8dGFibGV8dGVtcHx0ZXJtaW5hdGV8dGhlblxccytkb3x0aGVufHRpdGxlXFxkP3x0b3x2YXJ8d2hlbnx3aGVyZXx4YXhpc29wdHN8eTJheGlzb3B0c3x5YXhpc29wdHMpXFxiL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc2FzID0ge1xuXHRcdCdkYXRhbGluZXMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSg/OmNhcmRzfCg/OmRhdGEpP2xpbmVzKTtbXFxzXFxTXSs/XlsgXFx0XSo7L2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXig/OmNhcmRzfCg/OmRhdGEpP2xpbmVzKS9pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC87L1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQncHJvYy1zcWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5wcm9jXFxzKyg/OmZlZCk/c3FsKD86XFxzK1tcXHd8PV0rKT87KVtcXHNcXFNdKz8oPz1eKD86cHJvY1xccytcXHcrfGRhdGF8cXVpdHxydW4pO3woPyFbXFxzXFxTXSkpL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3FsJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvXlsgXFx0XSooPzpzZWxlY3R8YWx0ZXJcXHMrdGFibGV8KD86Y3JlYXRlfGRlc2NyaWJlfGRyb3ApXFxzKyg/OmluZGV4fHRhYmxlKD86XFxzK2NvbnN0cmFpbnRzKT98dmlldyl8Y3JlYXRlXFxzK3VuaXF1ZVxccytpbmRleHxpbnNlcnRcXHMraW50b3x1cGRhdGUpKD86PHN0cj58W147XCInXSkrOy8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXNxbCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuc3FsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdnbG9iYWwtc3RhdGVtZW50cyc6IGdsb2JhbFN0YXRlbWVudHMsXG5cdFx0XHRcdCdzcWwtc3RhdGVtZW50cyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OmRpc2Nvbm5lY3RcXHMrZnJvbXxiZWdpbnxjb21taXR8ZXhlYyg/OnV0ZSk/fHJlc2V0fHJvbGxiYWNrfHZhbGlkYXRlKVxcYi9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2MtZ3Jvb3Z5Jzoge1xuXHRcdFx0cGF0dGVybjogLyhecHJvY1xccytncm9vdnkoPzpcXHMrW1xcd3w9XSspPzspW1xcc1xcU10rPyg/PV4oPzpwcm9jXFxzK1xcdyt8ZGF0YXxxdWl0fHJ1bik7fCg/IVtcXHNcXFNdKSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J2dyb292eSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyheWyBcXHRdKnN1Ym1pdCg/OlxccysoPzpsb2FkfG5vcnVufHBhcnNlb25seSkpPykoPzo8c3RyPnxbXlwiJ10pKz8oPz1lbmRzdWJtaXQ7KS8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtZ3Jvb3Z5Jyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5ncm9vdnlcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J3N1Ym1pdC1zdGF0ZW1lbnQnOiBzdWJtaXRTdGF0ZW1lbnQsXG5cdFx0XHRcdCdnbG9iYWwtc3RhdGVtZW50cyc6IGdsb2JhbFN0YXRlbWVudHMsXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvbixcblx0XHRcdFx0J3N0cmluZyc6IHN0cmluZ1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQncHJvYy1sdWEnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5wcm9jXFxzK2x1YSg/OlxccytbXFx3fD1dKyk/OylbXFxzXFxTXSs/KD89Xig/OnByb2NcXHMrXFx3K3xkYXRhfHF1aXR8cnVuKTt8KD8hW1xcc1xcU10pKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQnbHVhJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF5bIFxcdF0qc3VibWl0KD86XFxzKyg/OmxvYWR8bm9ydW58cGFyc2Vvbmx5KSk/KSg/OjxzdHI+fFteXCInXSkrPyg/PWVuZHN1Ym1pdDspLy5zb3VyY2UucmVwbGFjZSgvPHN0cj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nUGF0dGVybjsgfSksICdpbScpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1sdWEnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmx1YVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnc3VibWl0LXN0YXRlbWVudCc6IHN1Ym1pdFN0YXRlbWVudCxcblx0XHRcdFx0J2dsb2JhbC1zdGF0ZW1lbnRzJzogZ2xvYmFsU3RhdGVtZW50cyxcblx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0J251bWVyaWMtY29uc3RhbnQnOiBudW1lcmljQ29uc3RhbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwcm9jLWNhcyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnByb2NcXHMrY2FzKD86XFxzK1tcXHd8PV0rKT87KVtcXHNcXFNdKz8oPz1eKD86cHJvY1xccytcXHcrfHF1aXR8ZGF0YSk7fCg/IVtcXHNcXFNdKSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J3N0YXRlbWVudC12YXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFxccyk9PylzYXZlcmVzdWx0XFxzW147XSsvaW0sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblxuXHRcdFx0XHRcdFx0J3N0YXRlbWVudCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15zYXZlcmVzdWx0XFxzK1xcUysvaSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0a2V5d29yZDogL14oPzpzYXZlcmVzdWx0KS9pXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRyZXN0OiBhcmdzXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY2FzLWFjdGlvbnMnOiBjYXNBY3Rpb25zLFxuXHRcdFx0XHQnc3RhdGVtZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHMpPT8pKD86ZGVmYXVsdHwoPzp1bik/c2V0fG9ufG91dHB1dHx1cGxvYWQpW147XSsvaW0sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IGFyZ3Ncblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0ZXAnOiBzdGVwLFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQnZnVuY3Rpb24nOiBmdW5jLFxuXHRcdFx0XHQnZm9ybWF0JzogZm9ybWF0LFxuXHRcdFx0XHQnYWx0Zm9ybWF0JzogYWx0Zm9ybWF0LFxuXHRcdFx0XHQnZ2xvYmFsLXN0YXRlbWVudHMnOiBnbG9iYWxTdGF0ZW1lbnRzLFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2MtYXJncyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF5wcm9jXFxzK1xcdytcXHMrKSg/IVxccykoPzpbXjtcIiddfDxzdHI+KSs7Ly5zb3VyY2UucmVwbGFjZSgvPHN0cj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nUGF0dGVybjsgfSksICdpbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogYXJnc1xuXHRcdH0sXG5cdFx0LypTcGVjaWFsIGtleXdvcmRzIHdpdGhpbiBtYWNyb3MqL1xuXHRcdCdtYWNyby1rZXl3b3JkJzogbWFjcm9LZXl3b3JkLFxuXHRcdCdtYWNyby12YXJpYWJsZSc6IG1hY3JvVmFyaWFibGUsXG5cdFx0J21hY3JvLXN0cmluZy1mdW5jdGlvbnMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzfD0pKSUoPzpCUVVPVEV8TlJCUVVPVEV8TlJRVU9URXxOUlNUUnxRVU9URXxTVFIpXFwoLio/KD86W14lXVxcKSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8lKD86QlFVT1RFfE5SQlFVT1RFfE5SUVVPVEV8TlJTVFJ8UVVPVEV8U1RSKS9pLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J21hY3JvLWtleXdvcmQnOiBtYWNyb0tleXdvcmQsXG5cdFx0XHRcdCdtYWNyby12YXJpYWJsZSc6IG1hY3JvVmFyaWFibGUsXG5cdFx0XHRcdCdlc2NhcGVkLWNoYXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyVbJ1wiKCk8Pj1cdTAwQUNefjssI10vLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvblxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J21hY3JvLWRlY2xhcmF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL14lbWFjcm9bXjtdKyg/PTspL2ltLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogLyVtYWNyby9pLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J21hY3JvLWVuZCc6IHtcblx0XHRcdHBhdHRlcm46IC9eJW1lbmRbXjtdKyg/PTspL2ltLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogLyVtZW5kL2ksXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvKiVfenNjb3JlKGhlYWRjaXIsIF9saGMsIF9taGMsIF9zaGMsIGhlYWRjeiwgaGVhZGNwY3QsIF9GaGVhZGN6KTsgKi9cblx0XHQnbWFjcm8nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJV9cXHcrKD89XFwoKS8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnaW5wdXQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiaW5wdXRcXHNbLVxcd1xccy8qLiQmXSs7L2ksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2lucHV0Jzoge1xuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdFx0cGF0dGVybjogL15pbnB1dC9pLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3B0aW9ucy1hcmdzJzoge1xuXHRcdFx0cGF0dGVybjogLyheb3B0aW9ucylbLSdcInwvXFxcXDw+Kis9OigpXFx3XFxzXSooPz07KS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IGFyZ3Ncblx0XHR9LFxuXHRcdCdjYXMtYWN0aW9ucyc6IGNhc0FjdGlvbnMsXG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdCdmdW5jdGlvbic6IGZ1bmMsXG5cdFx0J2Zvcm1hdCc6IGZvcm1hdCxcblx0XHQnYWx0Zm9ybWF0JzogYWx0Zm9ybWF0LFxuXHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdCdkYXRldGltZSc6IHtcblx0XHRcdC8vICcxamFuMjAxMydkLCAnOToyNToxOXBtJ3QsICcxOGphbjIwMDM6OToyNzowNWFtJ2R0XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoc3RyaW5nUGF0dGVybiArICcoPzpkdD98dCknKSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHQnc3RlcCc6IHN0ZXAsXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQvLyBJbiBTQVMgU3R1ZGlvIHN5bnRheCBoaWdobGlnaHRpbmcsIHRoZXNlIG9wZXJhdG9ycyBhcmUgc3R5bGVkIGxpa2Uga2V5d29yZHNcblx0XHQnb3BlcmF0b3Ita2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzplcXxnZXxndHxpbnxsZXxsdHxuZXxub3QpXFxiL2ksXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0Ly8gRGVjaW1hbCAoMS4yZTIzKSwgaGV4YWRlY2ltYWwgKDBjMXgpXG5cdFx0J251bWJlcic6IG51bWJlcixcblx0XHQnb3BlcmF0b3InOiAvXFwqXFwqP3xcXHxcXHw/fCEhP3xcdTAwQTZcdTAwQTY/fDxbPj1dP3w+Wzw9XT98Wy0rXFwvPSZdfFt+XHUwMEFDXl09Py8sXG5cdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb25cblx0fTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5zYXNzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NzJywge1xuXHRcdC8vIFNhc3MgY29tbWVudHMgZG9uJ3QgbmVlZCB0byBiZSBjbG9zZWQsIG9ubHkgaW5kZW50ZWRcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopXFwvW1xcLypdLiooPzooPzpcXHI/XFxufFxccilcXDFbIFxcdF0uKykqL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzYXNzJywgJ2F0cnVsZScsIHtcblx0XHQvLyBXZSB3YW50IHRvIGNvbnN1bWUgdGhlIHdob2xlIGxpbmVcblx0XHQnYXRydWxlLWxpbmUnOiB7XG5cdFx0XHQvLyBJbmNsdWRlcyBzdXBwb3J0IGZvciA9IGFuZCArIHNob3J0Y3V0c1xuXHRcdFx0cGF0dGVybjogL14oPzpbIFxcdF0qKVtAKz1dLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXRydWxlJzogLyg/OkBbXFx3LV0rfFsrPV0pL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuc2Fzcy5hdHJ1bGU7XG5cblxuXHR2YXIgdmFyaWFibGUgPSAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS87XG5cdHZhciBvcGVyYXRvciA9IFtcblx0XHQvWysqXFwvJV18Wz0hXT18PD0/fD49P3xcXGIoPzphbmR8bm90fG9yKVxcYi8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHMpLSg/PVxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzYXNzJywgJ3Byb3BlcnR5Jywge1xuXHRcdC8vIFdlIHdhbnQgdG8gY29uc3VtZSB0aGUgd2hvbGUgbGluZVxuXHRcdCd2YXJpYWJsZS1saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL15bIFxcdF0qXFwkLisvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlLFxuXHRcdFx0XHQnb3BlcmF0b3InOiBvcGVyYXRvclxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gV2Ugd2FudCB0byBjb25zdW1lIHRoZSB3aG9sZSBsaW5lXG5cdFx0J3Byb3BlcnR5LWxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlsgXFx0XSooPzpbXjpcXHNdKyAqOi4qfDpbXjpcXHNdLiopL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3Byb3BlcnR5JzogW1xuXHRcdFx0XHRcdC9bXjpcXHNdKyg/PVxccyo6KS8sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyg6KVteOlxcc10rLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Lyxcblx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cdFx0XHRcdCdvcGVyYXRvcic6IG9wZXJhdG9yLFxuXHRcdFx0XHQnaW1wb3J0YW50JzogUHJpc20ubGFuZ3VhZ2VzLnNhc3MuaW1wb3J0YW50XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5zYXNzLnByb3BlcnR5O1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNhc3MuaW1wb3J0YW50O1xuXG5cdC8vIE5vdyB0aGF0IHdob2xlIGxpbmVzIGZvciBvdGhlciBwYXR0ZXJucyBhcmUgY29uc3VtZWQsXG5cdC8vIHdoYXQncyBsZWZ0IHNob3VsZCBiZSBzZWxlY3RvcnNcblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2FzcycsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKVxcUyg/OixbXixcXHJcXG5dK3xbXixcXHJcXG5dKikoPzosW14sXFxyXFxuXSspKig/OiwoPzpcXHI/XFxufFxccilcXDFbIFxcdF0rXFxTKD86LFteLFxcclxcbl0rfFteLFxcclxcbl0qKSg/OixbXixcXHJcXG5dKykqKSovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5zY3NzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NzJywge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYXRydWxlJzoge1xuXHRcdHBhdHRlcm46IC9AW1xcdy1dKD86XFwoW14oKV0rXFwpfFteKClcXHNdfFxccysoPyFcXHMpKSo/KD89XFxzK1t7O10pLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdydWxlJzogL0BbXFx3LV0rL1xuXHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHR9XG5cdH0sXG5cdC8vIHVybCwgY29tcGFzc2lmaWVkXG5cdCd1cmwnOiAvKD86Wy1hLXpdKy0pP3VybCg/PVxcKCkvaSxcblx0Ly8gQ1NTIHNlbGVjdG9yIHJlZ2V4IGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgU2Fzc1xuXHQvLyBzaW5jZSB0aGVyZSBjYW4gYmUgbG90IG1vcmUgdGhpbmdzICh2YXIsIEAgZGlyZWN0aXZlLCBuZXN0aW5nLi4pXG5cdC8vIGEgc2VsZWN0b3IgbXVzdCBzdGFydCBhdCB0aGUgZW5kIG9mIGEgcHJvcGVydHkgb3IgYWZ0ZXIgYSBicmFjZSAoZW5kIG9mIG90aGVyIHJ1bGVzIG9yIG5lc3RpbmcpXG5cdC8vIGl0IGNhbiBjb250YWluIHNvbWUgY2hhcmFjdGVycyB0aGF0IGFyZW4ndCB1c2VkIGZvciBkZWZpbmluZyBydWxlcyBvciBlbmQgb2Ygc2VsZWN0b3IsICYgKHBhcmVudCBzZWxlY3RvciksIG9yIGludGVycG9sYXRlZCB2YXJpYWJsZVxuXHQvLyB0aGUgZW5kIG9mIGEgc2VsZWN0b3IgaXMgZm91bmQgd2hlbiB0aGVyZSBpcyBubyBydWxlcyBpbiBpdCAoIHt9IG9yIHtcXHN9KSBvciBpZiB0aGVyZSBpcyBhIHByb3BlcnR5IChiZWNhdXNlIGFuIGludGVycG9sYXRlZCB2YXJcblx0Ly8gY2FuIFwicGFzc1wiIGFzIGEgc2VsZWN0b3ItIGUuZzogcHJvcGVyI3skZXJ0eX0pXG5cdC8vIHRoaXMgb25lIHdhcyBoYXJkIHRvIGRvLCBzbyBwbGVhc2UgYmUgY2FyZWZ1bCBpZiB5b3UgZWRpdCB0aGlzIG9uZSA6KVxuXHQnc2VsZWN0b3InOiB7XG5cdFx0Ly8gSW5pdGlhbCBsb29rLWFoZWFkIGlzIHVzZWQgdG8gcHJldmVudCBtYXRjaGluZyBvZiBibGFuayBzZWxlY3RvcnNcblx0XHRwYXR0ZXJuOiAvKD89XFxTKVteQDt7fSgpXT8oPzpbXkA7e30oKVxcc118XFxzKyg/IVxccyl8I1xce1xcJFstXFx3XStcXH0pKyg/PVxccypcXHsoPzpcXH18XFxzfFtefV1bXjp7fV0qWzp7XVtefV0pKS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncGFyZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvJi8sXG5cdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0fSxcblx0XHRcdCdwbGFjZWhvbGRlcic6IC8lWy1cXHddKy8sXG5cdFx0XHQndmFyaWFibGUnOiAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS9cblx0XHR9XG5cdH0sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKD86Wy1cXHddfFxcJFstXFx3XXwjXFx7XFwkWy1cXHddK1xcfSkrKD89XFxzKjopLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9cXCRbLVxcd10rfCNcXHtcXCRbLVxcd10rXFx9L1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Njc3MnLCAnYXRydWxlJywge1xuXHQna2V5d29yZCc6IFtcblx0XHQvQCg/OmNvbnRlbnR8ZGVidWd8ZWFjaHxlbHNlKD86IGlmKT98ZXh0ZW5kfGZvcnxmb3J3YXJkfGZ1bmN0aW9ufGlmfGltcG9ydHxpbmNsdWRlfG1peGlufHJldHVybnx1c2V8d2Fybnx3aGlsZSlcXGIvaSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCApKD86ZnJvbXx0aHJvdWdoKSg/PSApLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY3NzJywgJ2ltcG9ydGFudCcsIHtcblx0Ly8gdmFyIGFuZCBpbnRlcnBvbGF0ZWQgdmFyc1xuXHQndmFyaWFibGUnOiAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY3NzJywgJ2Z1bmN0aW9uJywge1xuXHQnbW9kdWxlLW1vZGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphc3xoaWRlfHNob3d8d2l0aClcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdwbGFjZWhvbGRlcic6IHtcblx0XHRwYXR0ZXJuOiAvJVstXFx3XSsvLFxuXHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdH0sXG5cdCdzdGF0ZW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcQiEoPzpkZWZhdWx0fG9wdGlvbmFsKVxcYi9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibnVsbFxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhcXHMpKD86Wy0rKlxcLyVdfFs9IV09fDw9P3w+PT98YW5kfG5vdHxvcikoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuc2Nzc1snYXRydWxlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuc2NzcztcblxuUHJpc20ubGFuZ3VhZ2VzLnNjYWxhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YScsIHtcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC88LXw9PnxcXGIoPzphYnN0cmFjdHxjYXNlfGNhdGNofGNsYXNzfGRlZnxkb3xlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8Zm9yU29tZXxpZnxpbXBsaWNpdHxpbXBvcnR8bGF6eXxtYXRjaHxuZXd8bnVsbHxvYmplY3R8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxyZXR1cm58c2VhbGVkfHNlbGZ8c3VwZXJ8dGhpc3x0aHJvd3x0cmFpdHx0cnl8dHlwZXx2YWx8dmFyfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0J251bWJlcic6IC9cXGIweCg/OltcXGRhLWZdKlxcLik/W1xcZGEtZl0rfCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplXFxkKyk/W2RmbF0/L2ksXG5cdCdidWlsdGluJzogL1xcYig/OkFueXxBbnlSZWZ8QW55VmFsfEJvb2xlYW58Qnl0ZXxDaGFyfERvdWJsZXxGbG9hdHxJbnR8TG9uZ3xOb3RoaW5nfFNob3J0fFN0cmluZ3xVbml0KVxcYi8sXG5cdCdzeW1ib2wnOiAvJ1teXFxkXFxzXFxcXF1cXHcqL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NjYWxhJywgJ3RyaXBsZS1xdW90ZWQtc3RyaW5nJywge1xuXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpdXFx3Kig/OlwiXCJcIig/OlteJF18XFwkKD86W157XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkpKj9cIlwiXCJ8XCIoPzpbXiRcIlxcclxcbl18XFwkKD86W157XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkpKlwiKS9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpZCc6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXHcrLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdlc2NhcGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFxcXFwkXCJ8XFwkWyRcIl0vLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0fSxcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86XFx3K3xcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7P3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuc2NhbGFcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNjYWxhWydjbGFzcy1uYW1lJ107XG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNjYWxhWydmdW5jdGlvbiddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gQ0FSRUZVTCFcblx0Ly8gVGhlIGZvbGxvd2luZyBwYXR0ZXJucyBhcmUgY29uY2F0ZW5hdGVkLCBzbyB0aGUgZ3JvdXAgcmVmZXJlbmNlZCBieSBhIGJhY2sgcmVmZXJlbmNlIGlzIG5vbi1vYnZpb3VzIVxuXG5cdHZhciBzdHJpbmdzID0gW1xuXHRcdC8vIG5vcm1hbCBzdHJpbmdcblx0XHQvXCIoPzpcXFxcW1xcc1xcU118XFwkXFwoW14pXStcXCl8XFwkKD8hXFwoKXxgW15gXStgfFteXCJcXFxcYCRdKSpcIi8uc291cmNlLFxuXHRcdC8nW14nXSonLy5zb3VyY2UsXG5cdFx0L1xcJCcoPzpbXidcXFxcXXxcXFxcW1xcc1xcU10pKicvLnNvdXJjZSxcblxuXHRcdC8vIGhlcmUgZG9jXG5cdFx0Ly8gMiBjYXB0dXJpbmcgZ3JvdXBzXG5cdFx0Lzw8LT9cXHMqKFtcIiddPykoXFx3KylcXDFcXHNbXFxzXFxTXSo/W1xcclxcbl1cXDIvLnNvdXJjZVxuXHRdLmpvaW4oJ3wnKTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3NoZWxsLXNlc3Npb24nXSA9IHtcblx0XHQnY29tbWFuZCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0Ly8gdXNlciBpbmZvXG5cdFx0XHRcdC9eLy5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdChcblx0XHRcdFx0XHQvLyA8dXNlcj4gXCI6XCIgKCA8cGF0aD4gKT9cblx0XHRcdFx0XHQvW15cXHNAOiQjJSohL1xcXFxdK0BbXlxcclxcbkA6JCMlKiEvXFxcXF0rKD86OlteXFwwLVxceDFGJCMlKj9cIjw+Ojt8XSspPy8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIDxwYXRoPlxuXHRcdFx0XHRcdC8vIFNpbmNlIHRoZSBwYXRoIHBhdHRlcm4gaXMgcXVpdGUgZ2VuZXJhbCwgd2Ugd2lsbCByZXF1aXJlIGl0IHRvIHN0YXJ0IHdpdGggYSBzcGVjaWFsIGNoYXJhY3RlciB0b1xuXHRcdFx0XHRcdC8vIHByZXZlbnQgZmFsc2UgcG9zaXRpdmVzLlxuXHRcdFx0XHRcdC9bL34uXVteXFwwLVxceDFGJCMlKj9cIjw+QDo7fF0qLy5zb3VyY2Vcblx0XHRcdFx0KSArXG5cdFx0XHRcdCcpPycgK1xuXHRcdFx0XHQvLyBzaGVsbCBzeW1ib2xcblx0XHRcdFx0L1skIyVdKD89XFxzKS8uc291cmNlICtcblx0XHRcdFx0Ly8gYmFzaCBjb21tYW5kXG5cdFx0XHRcdC8oPzpbXlxcXFxcXHJcXG4gXFx0J1wiPCRdfFsgXFx0XSg/Oig/ISMpfCMuKiQpfFxcXFwoPzpbXlxccl18XFxyXFxuPyl8XFwkKD8hJyl8PCg/ITwpfDw8c3RyPj4pKy8uc291cmNlLnJlcGxhY2UoLzw8c3RyPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nczsgfSksXG5cdFx0XHRcdCdtJ1xuXHRcdFx0KSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW5mbyc6IHtcblx0XHRcdFx0XHQvLyBmb29AYmFyOn4vZmlsZXMkIGV4aXRcblx0XHRcdFx0XHQvLyBmb29AYmFyJCBleGl0XG5cdFx0XHRcdFx0Ly8gfi9maWxlcyQgZXhpdFxuXHRcdFx0XHRcdHBhdHRlcm46IC9eW14jJCVdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndXNlcic6IC9eW15cXHNAOiQjJSohL1xcXFxdK0BbXlxcclxcbkA6JCMlKiEvXFxcXF0rLyxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Lyxcblx0XHRcdFx0XHRcdCdwYXRoJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdiYXNoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlskIyVdXFxzKilcXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1iYXNoJyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5iYXNoXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzaGVsbC1zeW1ib2wnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15bJCMlXS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvdXRwdXQnOiAvLig/Oi4qKD86W1xcclxcbl18LiQpKSovXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydzaC1zZXNzaW9uJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ3NoZWxsc2Vzc2lvbiddID0gUHJpc20ubGFuZ3VhZ2VzWydzaGVsbC1zZXNzaW9uJ107XG5cbn0oUHJpc20pKTtcblxuLy8gVGVzdCBmaWxlcyBmb3IgdGhlIHBhcnNlciBpdHNlbGY6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vSmVzdXNGcmVrZS9zbWFsaS90cmVlL21hc3Rlci9zbWFsaS9zcmMvdGVzdC9yZXNvdXJjZXMvTGV4ZXJUZXN0XG5cblByaXNtLmxhbmd1YWdlcy5zbWFsaSA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcclxcblxcXFxcIl18XFxcXC4pKlwifCcoPzpbXlxcclxcblxcXFwnXXxcXFxcKD86Lnx1W1xcZGEtZkEtRl17NH0pKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXkxdKUwoPzooPzpcXHcrfGBbXmBcXHJcXG5dKmApXFwvKSooPzpbXFx3JF0rfGBbXmBcXHJcXG5dKmApKD89XFxzKjspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXkx8XFwvKSg/OltcXHckXSt8YFteYFxcclxcbl0qYCkkLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKEwpKD86KD86XFx3K3xgW15gXFxyXFxuXSpgKVxcLykrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdidWlsdGluJzogL15ML1xuXHRcdH1cblx0fSxcblx0J2J1aWx0aW4nOiBbXG5cdFx0e1xuXHRcdFx0Ly8gUmVmZXJlbmNlOiBodHRwczovL2dpdGh1Yi5jb20vSmVzdXNGcmVrZS9zbWFsaS93aWtpL1R5cGVzTWV0aG9kc0FuZEZpZWxkcyN0eXBlc1xuXHRcdFx0cGF0dGVybjogLyhbKCk7XFxbXSlbQkNERklKU1ZaXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gZS5nLiAuZmllbGQgbVdpZmlPblVpZDpJXG5cdFx0XHRwYXR0ZXJuOiAvKFtcXHckPl06KVtCQ0RGSUpTVlpdLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwuZW5kXFxzKylbXFx3LV0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSlcXC4oPyFcXGQpW1xcdy1dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86YWJzdHJhY3R8YW5ub3RhdGlvbnxicmlkZ2V8Y29uc3RydWN0b3J8ZW51bXxmaW5hbHxpbnRlcmZhY2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJ1bnRpbWV8c3RhdGljfHN5bnRoZXRpY3xzeXN0ZW18dHJhbnNpZW50KSg/IVtcXHcuLV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86XFx3K3w8W1xcdyQtXSs+KSg/PVxcKCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnZmllbGQnOiB7XG5cdFx0cGF0dGVybjogL1tcXHckXSsoPz06KS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3JlZ2lzdGVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSlbdnBdXFxkKD8hW1xcdy4tXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pKD86ZmFsc2V8dHJ1ZSkoPyFbXFx3Li1dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi9cXHcuLV0pLT8oPzpOQU58SU5GSU5JVFl8MHgoPzpbXFxkQS1GXSsoPzpcXC5bXFxkQS1GXSopP3xcXC5bXFxkQS1GXSspKD86cFsrLV0/W1xcZEEtRl0rKT98KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylbZGZsc3RdPyg/IVtcXHcuLV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKDopXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXG5cdCdvcGVyYXRvcic6IC8tPnxcXC5cXC58W1xcWz1dLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpLDs6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zbWFsbHRhbGsgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogL1xcJC4vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86Jyd8W14nXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzeW1ib2wnOiAvI1tcXGRhLXpdK3wjKD86LXwoWytcXC9cXFxcKn48Pj1AJXwmPyFdKVxcMT8pfCMoPz1cXCgpL2ksXG5cdCdibG9jay1hcmd1bWVudHMnOiB7XG5cdFx0cGF0dGVybjogLyhcXFtcXHMqKTpbXlxcW3xdKlxcfC8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC86W1xcZGEtel0rL2ksXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdH1cblx0fSxcblx0J3RlbXBvcmFyeS12YXJpYWJsZXMnOiB7XG5cdFx0cGF0dGVybjogL1xcfFtefF0rXFx8Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IC9bXFxkYS16XSsvaSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpuZXd8bmlsfHNlbGZ8c3VwZXIpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGQrci0/W1xcZEEtWl0rKD86XFwuW1xcZEEtWl0rKT8oPzplLT9cXGQrKT8vLFxuXHRcdC9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZS0/XFxkKyk/L1xuXHRdLFxuXHQnb3BlcmF0b3InOiAvWzw9XT0/fDo9fH5bfj1dfFxcL1xcLz98XFxcXFxcXFx8Pls+PV0/fFshXitcXC0qJnwsQF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWy47Oj9cXFtcXF0oKXt9XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21hcnR5ID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXCpbXFxzXFxTXSo/XFwqXFx9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2VtYmVkZGVkLXBocCc6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7cGhwXFx9W1xcc1xcU10qP1xce1xcL3BocFxcfS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NtYXJ0eSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxce3BocFxcfXxcXHtcXC9waHBcXH0kLyxcblx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwaHAnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1waHAnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnBocFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XSpcXH18YFteYF0qYC8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15be2BdfFtgfV0kLyxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9cXCRcXHcrL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHtcXC8/KVthLXpfXVxcdypcXGIoPyFcXCgpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtcXC8/fFxcfSQvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdFx0J3ZhcmlhYmxlJzogW1xuXHRcdFx0L1xcJCg/IVxcZClcXHcrLyxcblx0XHRcdC8jKD8hXFxkKVxcdysjLyxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC58LT58XFx3XFxzKj0pKD8hXFxkKVxcdytcXGIoPyFcXCgpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXFspKD8hXFxkKVxcdysoPz1cXF0pLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKUA/W2Etel9dXFx3KnxcXGJbYS16X11cXHcqKD89XFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2F0dHItbmFtZSc6IC9cXGJbYS16X11cXHcqKD89XFxzKj0pL2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bm98b2ZmfG9ufHRydWV8eWVzKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9Liw6YF18LT4vLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC9bK1xcLSpcXC8lXXw9PT89P3xbITw+XT0/fCYmfFxcfFxcfD8vLFxuXHRcdFx0L1xcYmlzXFxzKyg/Om5vdFxccyspPyg/OmRpdnxldmVufG9kZCkoPzpcXHMrYnkpP1xcYi8sXG5cdFx0XHQvXFxiKD86YW5kfGVxfGd0P2V8Z3R8bHQ/ZXxsdHxtb2R8bmVxP3xub3R8b3IpXFxiL1xuXHRcdF1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21hcnR5WydlbWJlZGRlZC1waHAnXS5pbnNpZGUuc21hcnR5Lmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zbWFydHk7XG5cdFByaXNtLmxhbmd1YWdlcy5zbWFydHkuc3RyaW5nWzBdLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zbWFydHk7XG5cblx0dmFyIHN0cmluZyA9IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKSonLztcblx0dmFyIHNtYXJ0eVBhdHRlcm4gPSBSZWdFeHAoXG5cdFx0Ly8gY29tbWVudHNcblx0XHQvXFx7XFwqW1xcc1xcU10qP1xcKlxcfS8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdC8vIHBocCB0YWdzXG5cdFx0L1xce3BocFxcfVtcXHNcXFNdKj9cXHtcXC9waHBcXH0vLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvLyBzbWFydHkgYmxvY2tzXG5cdFx0L1xceyg/Oltee31cIiddfDxzdHI+fFxceyg/Oltee31cIiddfDxzdHI+fFxceyg/Oltee31cIiddfDxzdHI+KSpcXH0pKlxcfSkqXFx9Ly5zb3VyY2Vcblx0XHRcdC5yZXBsYWNlKC88c3RyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmcuc291cmNlOyB9KSxcblx0XHQnZydcblx0KTtcblxuXHQvLyBUb2tlbml6ZSBhbGwgaW5saW5lIFNtYXJ0eSBleHByZXNzaW9uc1xuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgc21hcnR5TGl0ZXJhbFN0YXJ0ID0gJ3tsaXRlcmFsfSc7XG5cdFx0dmFyIHNtYXJ0eUxpdGVyYWxFbmQgPSAney9saXRlcmFsfSc7XG5cdFx0dmFyIHNtYXJ0eUxpdGVyYWxNb2RlID0gZmFsc2U7XG5cblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnc21hcnR5Jywgc21hcnR5UGF0dGVybiwgZnVuY3Rpb24gKG1hdGNoKSB7XG5cdFx0XHQvLyBTbWFydHkgdGFncyBpbnNpZGUge2xpdGVyYWx9IGJsb2NrIGFyZSBpZ25vcmVkXG5cdFx0XHRpZiAobWF0Y2ggPT09IHNtYXJ0eUxpdGVyYWxFbmQpIHtcblx0XHRcdFx0c21hcnR5TGl0ZXJhbE1vZGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzbWFydHlMaXRlcmFsTW9kZSkge1xuXHRcdFx0XHRpZiAobWF0Y2ggPT09IHNtYXJ0eUxpdGVyYWxTdGFydCkge1xuXHRcdFx0XHRcdHNtYXJ0eUxpdGVyYWxNb2RlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHQvLyBSZS1pbnNlcnQgdGhlIHRva2VucyBhZnRlciB0b2tlbml6aW5nXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3NtYXJ0eScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3NtbGZhbWlseS5naXRodWIuaW8vc21sOTctZGVmbi5wZGZcbi8vIGh0dHBzOi8vcGVvcGxlLm1waS1zd3Mub3JnL35yb3NzYmVyZy9zbWwuaHRtbFxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkcyA9IC9cXGIoPzphYnN0eXBlfGFuZHxhbmRhbHNvfGFzfGNhc2V8ZGF0YXR5cGV8ZG98ZWxzZXxlbmR8ZXF0eXBlfGV4Y2VwdGlvbnxmbnxmdW58ZnVuY3RvcnxoYW5kbGV8aWZ8aW58aW5jbHVkZXxpbmZpeHxpbmZpeHJ8bGV0fGxvY2FsfG5vbmZpeHxvZnxvcHxvcGVufG9yZWxzZXxyYWlzZXxyZWN8c2hhcmluZ3xzaWd8c2lnbmF0dXJlfHN0cnVjdHxzdHJ1Y3R1cmV8dGhlbnx0eXBlfHZhbHx3aGVyZXx3aGlsZXx3aXRofHdpdGh0eXBlKVxcYi9pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWwgPSB7XG5cdFx0Ly8gYWxsb3cgb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHQnY29tbWVudCc6IC9cXChcXCooPzpbXiooXXxcXCooPyFcXCkpfFxcKCg/IVxcKil8XFwoXFwqKD86W14qKF18XFwqKD8hXFwpKXxcXCgoPyFcXCopKSpcXCpcXCkpKlxcKlxcKS8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8jP1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFRoaXMgaXMgb25seSBhbiBhcHByb3hpbWF0aW9uIHNpbmNlIHRoZSByZWFsIGdyYW1tYXIgaXMgY29udGV4dC1mcmVlXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIFdoeSB0aGUgbWFpbiBsb29wIHNvIGNvbXBsZXg/XG5cdFx0XHRcdC8vIFRoZSBtYWluIGxvb3AgaXMgYXBwcm94aW1hdGVseSB0aGUgc2FtZSBhcyAvKD86XFxzKig/OlsqLF18LT4pXFxzKjxURVJNSU5BTD4pKi8gd2hpY2ggaXMsIG9idmlvdXNseSwgYSBsb3Rcblx0XHRcdFx0Ly8gc2ltcGxlci4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBpZiBhIGNvbW1hIGlzIHRoZSBsYXN0IGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgdGhlbiB0aGUgdGVybWluYWwgbXVzdCBiZVxuXHRcdFx0XHQvLyBmb2xsb3dlZCBieSBhIGxvbmcgaWRlbnRpZmllci5cblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdC8oKD86XnxbXjpdKTpcXHMqKTxURVJNSU5BTD4oPzpcXHMqKD86KD86XFwqfC0+KVxccyo8VEVSTUlOQUw+fCxcXHMqPFRFUk1JTkFMPig/Oig/PTxOT1QtTEFTVD4pfCg/ITxOT1QtTEFTVD4pXFxzKzxMT05HLUlEPikpKSovLnNvdXJjZVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxOT1QtTEFTVD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1xccyooPzpbKixdfC0+KS8uc291cmNlOyB9KVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxURVJNSU5BTD4vZywgZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gLyg/OidbXFx3J10qfDxMT05HLUlEPnxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkoPzpcXHMrPExPTkctSUQ+KSovLnNvdXJjZTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvPExPTkctSUQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC8oPyE8S0VZV09SRD4pW2EtelxcZF9dW1xcdycuXSovLnNvdXJjZTsgfSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC88S0VZV09SRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5d29yZHMuc291cmNlOyB9KSxcblx0XHRcdFx0XHQnaSdcblx0XHRcdFx0KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHcnXSkoPzpkYXRhdHlwZXxleGNlcHRpb258ZnVuY3RvcnxzaWduYXR1cmV8c3RydWN0dXJlfHR5cGUpXFxzKylbYS16X11bXFx3Jy5dKi9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHcnXSlmdW5cXHMrKVthLXpfXVtcXHcnLl0qL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3J10pJ1tcXHcnXSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IC9+P1xcYig/OlxcZCsoPzpcXC5cXGQrKT8oPzplfj9cXGQrKT98MHhbXFxkYS1mXSspXFxiL2ksXG5cdFx0J3dvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiMHcoPzpcXGQrfHhbXFxkYS1mXSspXFxiL2ksXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHRcdCdvcGVyYXRvcic6IC9cXC5cXC5cXC58Ols+PTpdfD0+P3wtPnxbPD5dPT98WyErXFwtKi9eI3xAfl0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXS46LDtdL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWxbJ2NsYXNzLW5hbWUnXVswXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuc21sO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zbWxuaiA9IFByaXNtLmxhbmd1YWdlcy5zbWw7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNvbGlkaXR5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86Y29udHJhY3R8ZW51bXxpbnRlcmZhY2V8bGlicmFyeXxuZXd8c3RydWN0fHVzaW5nKVxccyspKD8hXFxkKVtcXHckXSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86X3xhbm9ueW1vdXN8YXN8YXNzZW1ibHl8YXNzZXJ0fGJyZWFrfGNhbGxkYXRhfGNhc2V8Y29uc3RhbnR8Y29uc3RydWN0b3J8Y29udGludWV8Y29udHJhY3R8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbWl0fGVudW18ZXZlbnR8ZXh0ZXJuYWx8Zm9yfGZyb218ZnVuY3Rpb258aWZ8aW1wb3J0fGluZGV4ZWR8aW5oZXJpdGVkfGludGVyZmFjZXxpbnRlcm5hbHxpc3xsZXR8bGlicmFyeXxtYXBwaW5nfG1lbW9yeXxtb2RpZmllcnxuZXd8cGF5YWJsZXxwcmFnbWF8cHJpdmF0ZXxwdWJsaWN8cHVyZXxyZXF1aXJlfHJldHVybnM/fHJldmVydHxzZWxmZGVzdHJ1Y3R8c29saWRpdHl8c3RvcmFnZXxzdHJ1Y3R8c3VpY2lkZXxzd2l0Y2h8dGhpc3x0aHJvd3x1c2luZ3x2YXJ8dmlld3x3aGlsZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvPT58LT58Oj18PTp8XFwqXFwqfFxcK1xcK3wtLXxcXHxcXHx8JiZ8PDw9P3w+Pj0/fFstKyovJV4mfDw+IT1dPT98W34/XS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzb2xpZGl0eScsICdrZXl3b3JkJywge1xuXHQnYnVpbHRpbic6IC9cXGIoPzphZGRyZXNzfGJvb2x8Ynl0ZXx1P2ludCg/Ojh8MTZ8MjR8MzJ8NDB8NDh8NTZ8NjR8NzJ8ODB8ODh8OTZ8MTA0fDExMnwxMjB8MTI4fDEzNnwxNDR8MTUyfDE2MHwxNjh8MTc2fDE4NHwxOTJ8MjAwfDIwOHwyMTZ8MjI0fDIzMnwyNDB8MjQ4fDI1Nik/fHN0cmluZ3xieXRlcyg/OlsxLTldfFsxMl1cXGR8M1swLTJdKT8pXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NvbGlkaXR5JywgJ251bWJlcicsIHtcblx0J3ZlcnNpb24nOiB7XG5cdFx0cGF0dGVybjogLyhbPD5dPT98XFxeKVxcZCtcXC5cXGQrXFwuXFxkK1xcYi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuc29sID0gUHJpc20ubGFuZ3VhZ2VzLnNvbGlkaXR5O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGd1aWQgPSB7XG5cdFx0Ly8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVW5pdmVyc2FsbHlfdW5pcXVlX2lkZW50aWZpZXIjRm9ybWF0XG5cdFx0cGF0dGVybjogL1xce1tcXGRhLWZdezh9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezR9LVtcXGRhLWZdezEyfVxcfS9pLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlc1snc29sdXRpb24tZmlsZSddID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZ3VpZCc6IGd1aWRcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvYmplY3QnOiB7XG5cdFx0XHQvLyBGb29cblx0XHRcdC8vICAgQmFyKFwiYWJzXCIpID0gOVxuXHRcdFx0Ly8gICBFbmRCYXJcblx0XHRcdC8vICAgUHJvcCA9IFRSVUVcblx0XHRcdC8vIEVuZEZvb1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikoPzooW0EtWl1cXHcqKVxcYig/PS4qKD86XFxyXFxuP3xcXG4pKD86XFwxWyBcXHRdLiooPzpcXHJcXG4/fFxcbikpKlxcMUVuZFxcMig/PVsgXFx0XSokKSl8RW5kW0EtWl1cXHcqKD89WyBcXHRdKiQpKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD8hXFxzKVteXFxyXFxuXCIjPSgpXSpbXlxcc1wiIz0oKV0oPz1cXHMqPSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2d1aWQnOiBndWlkXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZ3VpZCc6IGd1aWQsXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKykqXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxUUlVFKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogLz0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3NsbiddID0gUHJpc20ubGFuZ3VhZ2VzWydzb2x1dGlvbi1maWxlJ107XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgc3RyaW5nUGF0dGVybiA9IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cdHZhciBudW1iZXJQYXR0ZXJuID0gL1xcYlxcZCsoPzpcXC5cXGQrKT8oPzpbZUVdWystXT9cXGQrKT9cXGJ8XFxiMHhbXFxkQS1GXStcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zb3kgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY29tbWFuZC1hcmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/XFxzKig/OmFsaWFzfGNhbGx8ZGVsY2FsbHxkZWxwYWNrYWdlfGRlbHRlbXBsYXRlfG5hbWVzcGFjZXx0ZW1wbGF0ZSlcXHMrKVxcLj9bXFx3Ll0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/XFxzKkA/cGFyYW1cXD8/XFxzKylcXC4/W1xcdy5dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxceytcXC8/W15cXFNcXHJcXG5dKikoPzpcXFxcW25ydF18YWxpYXN8Y2FsbHxjYXNlfGNzc3xkZWZhdWx0fGRlbGNhbGx8ZGVscGFja2FnZXxkZWx0ZW1wbGF0ZXxlbHNlKD86aWYpP3xmYWxsYmFja21zZ3xmb3IoPzplYWNoKT98aWYoPzplbXB0eSk/fGxifGxldHxsaXRlcmFsfG1zZ3xuYW1lc3BhY2V8bmlsfEA/cGFyYW1cXD8/fHJifHNwfHN3aXRjaHx0ZW1wbGF0ZXx4aWQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzphbnl8YXN8YXR0cmlidXRlc3xib29sfGNzc3xmbG9hdHxodG1sfGlufGludHxqc3xsaXN0fG1hcHxudWxsfG51bWJlcnxzdHJpbmd8dXJpKVxcYi9cblx0XHRdLFxuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxceytcXC8/fFxcLz9cXH0rJC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3Byb3BlcnR5JzogL1xcdysoPz09KS8sXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFteXFxXXFxkXVxcdyooPzpcXD8/KD86XFwuXFx3K3xcXFtbXlxcXV0rXFxdKSkqLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHN0cmluZ1BhdHRlcm4sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXJQYXR0ZXJuLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXS4/XS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiBzdHJpbmdQYXR0ZXJuLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiBbXG5cdFx0XHQvXFx3Kyg/PVxcKCkvLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcfFteXFxTXFxyXFxuXSopXFx3Ky8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnbnVtYmVyJzogbnVtYmVyUGF0dGVybixcblx0XHQnb3BlcmF0b3InOiAvXFw/Oj98PD0/fD49P3w9PT98IT18WysqLyUtXXxcXGIoPzphbmR8bm90fG9yKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdfC4sOl0vXG5cdH07XG5cblx0Ly8gVG9rZW5pemUgYWxsIGlubGluZSBTb3kgZXhwcmVzc2lvbnNcblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIHNveVBhdHRlcm4gPSAvXFx7XFx7Lis/XFx9XFx9fFxcey4rP1xcfXxcXHNcXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2c7XG5cdFx0dmFyIHNveUxpdHRlcmFsU3RhcnQgPSAne2xpdGVyYWx9Jztcblx0XHR2YXIgc295TGl0dGVyYWxFbmQgPSAney9saXRlcmFsfSc7XG5cdFx0dmFyIHNveUxpdHRlcmFsTW9kZSA9IGZhbHNlO1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3NveScsIHNveVBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdFx0Ly8gU295IHRhZ3MgaW5zaWRlIHtsaXRlcmFsfSBibG9jayBhcmUgaWdub3JlZFxuXHRcdFx0aWYgKG1hdGNoID09PSBzb3lMaXR0ZXJhbEVuZCkge1xuXHRcdFx0XHRzb3lMaXR0ZXJhbE1vZGUgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFzb3lMaXR0ZXJhbE1vZGUpIHtcblx0XHRcdFx0aWYgKG1hdGNoID09PSBzb3lMaXR0ZXJhbFN0YXJ0KSB7XG5cdFx0XHRcdFx0c295TGl0dGVyYWxNb2RlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0pO1xuXHR9KTtcblxuXHQvLyBSZS1pbnNlcnQgdGhlIHRva2VucyBhZnRlciB0b2tlbml6aW5nXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3NveScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudHVydGxlID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J211bHRpbGluZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiXCJcIig/Oig/OlwiXCI/KT8oPzpbXlwiXFxcXF18XFxcXC4pKSpcIlwiXCJ8JycnKD86KD86Jyc/KT8oPzpbXidcXFxcXXxcXFxcLikpKicnJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb21tZW50JzogLyMuKi9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXFxcXCJcXHJcXG5dfFxcXFwuKSpcInwnKD86W15cXFxcJ1xcclxcbl18XFxcXC4pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndXJsJzoge1xuXHRcdHBhdHRlcm46IC88KD86W15cXHgwMC1cXHgyMDw+XCJ7fXxeYFxcXFxdfFxcXFwoPzp1W1xcZGEtZkEtRl17NH18VVtcXGRhLWZBLUZdezh9KSkqPi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1s8Pl0vXG5cdFx0fVxuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyg/Oig/IVstLlxcZFxceEI3XSlbLS5cXHdcXHhCN1xceEMwLVxcdUZGRkRdKyk/Oig/Oig/IVstLl0pKD86Wy0uOlxcd1xceEMwLVxcdUZGRkRdfCVbXFxkYS1mXXsyfXxcXFxcLikrKT8vaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdsb2NhbC1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFteOl0qOilbXFxzXFxTXSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3ByZWZpeCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnbnVtYmVyJzogL1srLV0/XFxiXFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspPy9pLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9Liw7KClbXFxdXXxcXF5cXF4vLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC8oPzpcXGJhfEBwcmVmaXh8QGJhc2UpXFxifD0vLFxuXHRcdC9cXGIoPzpiYXNlfGdyYXBofHByZWZpeClcXGIvaVxuXHRdLFxuXHQndGFnJzoge1xuXHRcdHBhdHRlcm46IC9AW2Etel0rKD86LVthLXpcXGRdKykqL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvQC9cblx0XHR9XG5cdH1cbn07XG5QcmlzbS5sYW5ndWFnZXMudHJpZyA9IFByaXNtLmxhbmd1YWdlc1sndHVydGxlJ107XG5cblByaXNtLmxhbmd1YWdlcy5zcGFycWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCd0dXJ0bGUnLCB7XG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCd2YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvWz8kXVxcdysvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxufVxuKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc3BhcnFsJywgJ3B1bmN0dWF0aW9uJywge1xuXHQna2V5d29yZCc6IFtcblx0XHQvXFxiKD86QXxBRER8QUxMfEFTfEFTQ3xBU0t8Qk5PREV8Qll8Q0xFQVJ8Q09OU1RSVUNUfENPUFl8Q1JFQVRFfERBVEF8REVGQVVMVHxERUxFVEV8REVTQ3xERVNDUklCRXxESVNUSU5DVHxEUk9QfEVYSVNUU3xGSUxURVJ8RlJPTXxHUk9VUHxIQVZJTkd8SU5TRVJUfElOVE98TElNSVR8TE9BRHxNSU5VU3xNT1ZFfE5BTUVEfE5PVHxOT1d8T0ZGU0VUfE9QVElPTkFMfE9SREVSfFJBTkR8UkVEVUNFRHxTRUxFQ1R8U0VQQVJBVE9SfFNFUlZJQ0V8U0lMRU5UfFNUUlVVSUR8VU5JT058VVNJTkd8VVVJRHxWQUxVRVN8V0hFUkUpXFxiL2ksXG5cdFx0L1xcYig/OkFCU3xBVkd8QklORHxCT1VORHxDRUlMfENPQUxFU0NFfENPTkNBVHxDT05UQUlOU3xDT1VOVHxEQVRBVFlQRXxEQVl8RU5DT0RFX0ZPUl9VUkl8RkxPT1J8R1JPVVBfQ09OQ0FUfEhPVVJTfElGfElSSXxpc0JMQU5LfGlzSVJJfGlzTElURVJBTHxpc05VTUVSSUN8aXNVUkl8TEFOR3xMQU5HTUFUQ0hFU3xMQ0FTRXxNQVh8TUQ1fE1JTnxNSU5VVEVTfE1PTlRIfFJFR0VYfFJFUExBQ0V8Uk9VTkR8c2FtZVRlcm18U0FNUExFfFNFQ09ORFN8U0hBMXxTSEEyNTZ8U0hBMzg0fFNIQTUxMnxTVFJ8U1RSQUZURVJ8U1RSQkVGT1JFfFNUUkRUfFNUUkVORFN8U1RSTEFOR3xTVFJMRU58U1RSU1RBUlRTfFNVQlNUUnxTVU18VElNRVpPTkV8VFp8VUNBU0V8VVJJfFlFQVIpXFxiKD89XFxzKlxcKCkvaSxcblx0XHQvXFxiKD86QkFTRXxHUkFQSHxQUkVGSVgpXFxiL2lcblx0XVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ycSA9IFByaXNtLmxhbmd1YWdlcy5zcGFycWw7XG5cblByaXNtLmxhbmd1YWdlc1snc3BsdW5rLXNwbCddID0ge1xuXHQnY29tbWVudCc6IC9gY29tbWVudFxcKFwiKD86XFxcXC58W15cXFxcXCJdKSpcIlxcKWAvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBodHRwczovL2RvY3Muc3BsdW5rLmNvbS9Eb2N1bWVudGF0aW9uL1NwbHVuay83LjMuMC9TZWFyY2hSZWZlcmVuY2UvTGlzdE9mU2VhcmNoQ29tbWFuZHNcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWNjdW18YWRkY29sdG90YWxzfGFkZGluZm98YWRkdG90YWxzfGFuYWx5emVmaWVsZHN8YW5vbWFsaWVzfGFub21hbG91c3ZhbHVlfGFub21hbHlkZXRlY3Rpb258YXBwZW5kfGFwcGVuZGNvbHN8YXBwZW5kY3N2fGFwcGVuZGxvb2t1cHxhcHBlbmRwaXBlfGFydWxlc3xhc3NvY2lhdGV8YXVkaXR8YXV0b3JlZ3Jlc3N8YmlufGJ1Y2tldHxidWNrZXRkaXJ8Y2hhcnR8Y2x1c3Rlcnxjb2ZpbHRlcnxjb2xsZWN0fGNvbmN1cnJlbmN5fGNvbnRpbmdlbmN5fGNvbnZlcnR8Y29ycmVsYXRlfGRhdGFtb2RlbHxkYmluc3BlY3R8ZGVkdXB8ZGVsZXRlfGRlbHRhfGRpZmZ8ZXJleHxldmFsfGV2ZW50Y291bnR8ZXZlbnRzdGF0c3xleHRyYWN0fGZpZWxkZm9ybWF0fGZpZWxkc3xmaWVsZHN1bW1hcnl8ZmlsbGRvd258ZmlsbG51bGx8ZmluZHR5cGVzfGZvbGRlcml6ZXxmb3JlYWNofGZvcm1hdHxmcm9tfGdhdWdlfGdlbnRpbWVzfGdlb218Z2VvbWZpbHRlcnxnZW9zdGF0c3xoZWFkfGhpZ2hsaWdodHxoaXN0b3J5fGljb25pZnl8aW5wdXR8aW5wdXRjc3Z8aW5wdXRsb29rdXB8aXBsb2NhdGlvbnxqb2lufGttZWFuc3xrdnxrdmZvcm18bG9hZGpvYnxsb2NhbGl6ZXxsb2NhbG9wfGxvb2t1cHxtYWtlY29udGludW91c3xtYWtlbXZ8bWFrZXJlc3VsdHN8bWFwfG1jb2xsZWN0fG1ldGFkYXRhfG1ldGFzZWFyY2h8bWV2ZW50Y29sbGVjdHxtc3RhdHN8bXVsdGlrdnxtdWx0aXNlYXJjaHxtdmNvbWJpbmV8bXZleHBhbmR8bm9tdnxvdXRsaWVyfG91dHB1dGNzdnxvdXRwdXRsb29rdXB8b3V0cHV0dGV4dHxvdmVybGFwfHBpdm90fHByZWRpY3R8cmFuZ2VtYXB8cmFyZXxyZWdleHxyZWxldmFuY3l8cmVsdGltZXxyZW5hbWV8cmVwbGFjZXxyZXN0fHJldHVybnxyZXZlcnNlfHJleHxydG9yZGVyfHJ1bnxzYXZlZHNlYXJjaHxzY3JpcHR8c2NydWJ8c2VhcmNofHNlYXJjaHR4bnxzZWxmam9pbnxzZW5kZW1haWx8c2V0fHNldGZpZWxkc3xzaWNoYXJ0fHNpcmFyZXxzaXN0YXRzfHNpdGltZWNoYXJ0fHNpdG9wfHNvcnR8c3BhdGh8c3RhdHN8c3RyY2F0fHN0cmVhbXN0YXRzfHRhYmxlfHRhZ3N8dGFpbHx0aW1lY2hhcnR8dGltZXdyYXB8dG9wfHRyYW5zYWN0aW9ufHRyYW5zcG9zZXx0cmVuZGxpbmV8dHNjb2xsZWN0fHRzdGF0c3x0eXBlYWhlYWR8dHlwZWxlYXJuZXJ8dHlwZXJ8dW5pb258dW5pcXx1bnRhYmxlfHdoZXJlfHgxMXx4bWxrdnx4bWx1bmVzY2FwZXx4cGF0aHx4eXNlcmllcylcXGIvaSxcblx0J29wZXJhdG9yLXdvcmQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFuZHxhc3xieXxub3R8b3J8eG9yKVxcYi9pLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHQncHJvcGVydHknOiAvXFxiXFx3Kyg/PVxccyo9KD8hPSkpLyxcblx0J2RhdGUnOiB7XG5cdFx0Ly8gTU0vREQvWVlZWSg6SEg6TU06U1MpP1xuXHRcdHBhdHRlcm46IC9cXGJcXGR7MSwyfVxcL1xcZHsxLDJ9XFwvXFxkezEsNH0oPzooPzo6XFxkezEsMn0pezN9KT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmfGZhbHNlfHR8dHJ1ZSlcXGIvaSxcblx0J29wZXJhdG9yJzogL1s8Pj1dPT98Wy0rKi8lfF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXSxdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNxZiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/Oig/OlwiXCIpP1teXCJdKSpcIig/IVwiKXwnKD86W14nXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrT3V0fGJyZWFrVG98Y2FsbHxjYXNlfGNhdGNofGRlZmF1bHR8ZG98ZWNob3xlbHNlfGV4ZWNGU018ZXhlY1ZNfGV4aXRXaXRofGZvcnxmb3JFYWNofGZvckVhY2hNZW1iZXJ8Zm9yRWFjaE1lbWJlckFnZW50fGZvckVhY2hNZW1iZXJUZWFtfGZyb218Z290b3xpZnxuaWx8cHJlcHJvY2Vzc0ZpbGV8cHJlcHJvY2Vzc0ZpbGVMaW5lTnVtYmVyc3xwcml2YXRlfHNjb3BlTmFtZXxzcGF3bnxzdGVwfHN3aXRjaHx0aGVufHRocm93fHRvfHRyeXx3aGlsZXx3aXRoKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86YWJzfGFjY1RpbWV8YWNvc3xhY3Rpb258YWN0aW9uSURzfGFjdGlvbktleXN8YWN0aW9uS2V5c0ltYWdlc3xhY3Rpb25LZXlzTmFtZXN8YWN0aW9uS2V5c05hbWVzQXJyYXl8YWN0aW9uTmFtZXxhY3Rpb25QYXJhbXN8YWN0aXZhdGVBZGRvbnN8YWN0aXZhdGVkQWRkb25zfGFjdGl2YXRlS2V5fGFkZDNERU5Db25uZWN0aW9ufGFkZDNERU5FdmVudEhhbmRsZXJ8YWRkM0RFTkxheWVyfGFkZEFjdGlvbnxhZGRCYWNrcGFja3xhZGRCYWNrcGFja0NhcmdvfGFkZEJhY2twYWNrQ2FyZ29HbG9iYWx8YWRkQmFja3BhY2tHbG9iYWx8YWRkQ2FtU2hha2V8YWRkQ3VyYXRvckFkZG9uc3xhZGRDdXJhdG9yQ2FtZXJhQXJlYXxhZGRDdXJhdG9yRWRpdGFibGVPYmplY3RzfGFkZEN1cmF0b3JFZGl0aW5nQXJlYXxhZGRDdXJhdG9yUG9pbnRzfGFkZEVkaXRvck9iamVjdHxhZGRFdmVudEhhbmRsZXJ8YWRkRm9yY2V8YWRkRm9yY2VHZW5lcmF0b3JSVER8YWRkR29nZ2xlc3xhZGRHcm91cEljb258YWRkSGFuZGd1bkl0ZW18YWRkSGVhZGdlYXJ8YWRkSXRlbXxhZGRJdGVtQ2FyZ298YWRkSXRlbUNhcmdvR2xvYmFsfGFkZEl0ZW1Qb29sfGFkZEl0ZW1Ub0JhY2twYWNrfGFkZEl0ZW1Ub1VuaWZvcm18YWRkSXRlbVRvVmVzdHxhZGRMaXZlU3RhdHN8YWRkTWFnYXppbmV8YWRkTWFnYXppbmVBbW1vQ2FyZ298YWRkTWFnYXppbmVDYXJnb3xhZGRNYWdhemluZUNhcmdvR2xvYmFsfGFkZE1hZ2F6aW5lR2xvYmFsfGFkZE1hZ2F6aW5lUG9vbHxhZGRNYWdhemluZXN8YWRkTWFnYXppbmVUdXJyZXR8YWRkTWVudXxhZGRNZW51SXRlbXxhZGRNaXNzaW9uRXZlbnRIYW5kbGVyfGFkZE1QRXZlbnRIYW5kbGVyfGFkZE11c2ljRXZlbnRIYW5kbGVyfGFkZE93bmVkTWluZXxhZGRQbGF5ZXJTY29yZXN8YWRkUHJpbWFyeVdlYXBvbkl0ZW18YWRkUHVibGljVmFyaWFibGVFdmVudEhhbmRsZXJ8YWRkUmF0aW5nfGFkZFJlc291cmNlc3xhZGRTY29yZXxhZGRTY29yZVNpZGV8YWRkU2Vjb25kYXJ5V2VhcG9uSXRlbXxhZGRTd2l0Y2hhYmxlVW5pdHxhZGRUZWFtTWVtYmVyfGFkZFRvUmVtYWluc0NvbGxlY3RvcnxhZGRUb3JxdWV8YWRkVW5pZm9ybXxhZGRWZWhpY2xlfGFkZFZlc3R8YWRkV2F5cG9pbnR8YWRkV2VhcG9ufGFkZFdlYXBvbkNhcmdvfGFkZFdlYXBvbkNhcmdvR2xvYmFsfGFkZFdlYXBvbkdsb2JhbHxhZGRXZWFwb25JdGVtfGFkZFdlYXBvblBvb2x8YWRkV2VhcG9uVHVycmV0fGFkbWlufGFnZW50fGFnZW50c3xBR0xUb0FTTHxhaW1lZEF0VGFyZ2V0fGFpbVBvc3xhaXJEZW5zaXR5Q3VydmVSVER8YWlyRGVuc2l0eVJURHxhaXJwbGFuZVRocm90dGxlfGFpcnBvcnRTaWRlfEFJU0ZpbmlzaEhlYWx8YWxpdmV8YWxsM0RFTkVudGl0aWVzfGFsbEFpcnBvcnRzfGFsbENvbnRyb2xzfGFsbEN1cmF0b3JzfGFsbEN1dExheWVyc3xhbGxEZWFkfGFsbERlYWRNZW58YWxsRGlzcGxheXN8YWxsR3JvdXBzfGFsbE1hcE1hcmtlcnN8YWxsTWluZXN8YWxsTWlzc2lvbk9iamVjdHN8YWxsb3czRE1vZGV8YWxsb3dDcmV3SW5JbW1vYmlsZXxhbGxvd0N1cmF0b3JMb2dpY0lnbm9yZUFyZWFzfGFsbG93RGFtYWdlfGFsbG93RGFtbWFnZXxhbGxvd0ZpbGVPcGVyYXRpb25zfGFsbG93RmxlZWluZ3xhbGxvd0dldElufGFsbG93U3ByaW50fGFsbFBsYXllcnN8YWxsU2ltcGxlT2JqZWN0c3xhbGxTaXRlc3xhbGxUdXJyZXRzfGFsbFVuaXRzfGFsbFVuaXRzVUFWfGFsbFZhcmlhYmxlc3xhbW1vfGFtbW9PblB5bG9ufGFuaW1hdGV8YW5pbWF0ZUJheXxhbmltYXRlRG9vcnxhbmltYXRlUHlsb258YW5pbWF0ZVNvdXJjZXxhbmltYXRpb25OYW1lc3xhbmltYXRpb25QaGFzZXxhbmltYXRpb25Tb3VyY2VQaGFzZXxhbmltYXRpb25TdGF0ZXxhcHBlbmR8YXBwbHl8YXJtb3J5UG9pbnRzfGFycmF5SW50ZXJzZWN0fGFzaW58QVNMVG9BR0x8QVNMVG9BVEx8YXNzZXJ0fGFzc2lnbkFzQ2FyZ298YXNzaWduQXNDYXJnb0luZGV4fGFzc2lnbkFzQ29tbWFuZGVyfGFzc2lnbkFzRHJpdmVyfGFzc2lnbkFzR3VubmVyfGFzc2lnbkFzVHVycmV0fGFzc2lnbkN1cmF0b3J8YXNzaWduZWRDYXJnb3xhc3NpZ25lZENvbW1hbmRlcnxhc3NpZ25lZERyaXZlcnxhc3NpZ25lZEd1bm5lcnxhc3NpZ25lZEl0ZW1zfGFzc2lnbmVkVGFyZ2V0fGFzc2lnbmVkVGVhbXxhc3NpZ25lZFZlaGljbGV8YXNzaWduZWRWZWhpY2xlUm9sZXxhc3NpZ25JdGVtfGFzc2lnblRlYW18YXNzaWduVG9BaXJwb3J0fGF0YW58YXRhbjJ8YXRnfEFUTFRvQVNMfGF0dGFjaGVkT2JqZWN0fGF0dGFjaGVkT2JqZWN0c3xhdHRhY2hlZFRvfGF0dGFjaE9iamVjdHxhdHRhY2hUb3xhdHRhY2tFbmFibGVkfGJhY2twYWNrfGJhY2twYWNrQ2FyZ298YmFja3BhY2tDb250YWluZXJ8YmFja3BhY2tJdGVtc3xiYWNrcGFja01hZ2F6aW5lc3xiYWNrcGFja1NwYWNlRm9yfGJlaGF2aW91cnxiZW5jaG1hcmt8Ymlub2N1bGFyfGJsdWZvcnxib3VuZGluZ0JveHxib3VuZGluZ0JveFJlYWx8Ym91bmRpbmdDZW50ZXJ8YnJpZWZpbmdOYW1lfGJ1aWxkaW5nRXhpdHxidWlsZGluZ1Bvc3xidWxkb3plcl9FbmFibGVSb2FkRGlhZ3xidWxkb3plcl9Jc0VuYWJsZWRSb2FkRGlhZ3xidWxkb3plcl9Mb2FkTmV3Um9hZHN8YnVsZG96ZXJfcmVsb2FkT3Blck1hcHxidXR0b25BY3Rpb258YnV0dG9uU2V0QWN0aW9ufGNhZGV0TW9kZXxjYWxsRXh0ZW5zaW9ufGNhbUNvbW1hbmR8Y2FtQ29tbWl0fGNhbUNvbW1pdFByZXBhcmVkfGNhbUNvbW1pdHRlZHxjYW1Db25zdHVjdGlvblNldFBhcmFtc3xjYW1DcmVhdGV8Y2FtRGVzdHJveXxjYW1lcmFFZmZlY3R8Y2FtZXJhRWZmZWN0RW5hYmxlSFVEfGNhbWVyYUludGVyZXN0fGNhbWVyYU9ufGNhbWVyYVZpZXd8Y2FtcGFpZ25Db25maWdGaWxlfGNhbVByZWxvYWR8Y2FtUHJlbG9hZGVkfGNhbVByZXBhcmVCYW5rfGNhbVByZXBhcmVEaXJ8Y2FtUHJlcGFyZURpdmV8Y2FtUHJlcGFyZUZvY3VzfGNhbVByZXBhcmVGb3Z8Y2FtUHJlcGFyZUZvdlJhbmdlfGNhbVByZXBhcmVQb3N8Y2FtUHJlcGFyZVJlbFBvc3xjYW1QcmVwYXJlVGFyZ2V0fGNhbVNldEJhbmt8Y2FtU2V0RGlyfGNhbVNldERpdmV8Y2FtU2V0Rm9jdXN8Y2FtU2V0Rm92fGNhbVNldEZvdlJhbmdlfGNhbVNldFBvc3xjYW1TZXRSZWxQb3N8Y2FtU2V0VGFyZ2V0fGNhbVRhcmdldHxjYW1Vc2VOVkd8Y2FuQWRkfGNhbkFkZEl0ZW1Ub0JhY2twYWNrfGNhbkFkZEl0ZW1Ub1VuaWZvcm18Y2FuQWRkSXRlbVRvVmVzdHxjYW5jZWxTaW1wbGVUYXNrRGVzdGluYXRpb258Y2FuRmlyZXxjYW5Nb3ZlfGNhblNsaW5nTG9hZHxjYW5TdGFuZHxjYW5TdXNwZW5kfGNhblRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbnxjYW5VbmxvYWRJbkNvbWJhdHxjYW5WZWhpY2xlQ2FyZ298Y2FwdGl2ZXxjYXB0aXZlTnVtfGNiQ2hlY2tlZHxjYlNldENoZWNrZWR8Y2VpbHxjaGFubmVsRW5hYmxlZHxjaGVhdHNFbmFibGVkfGNoZWNrQUlGZWF0dXJlfGNoZWNrVmlzaWJpbGl0eXxjaXZpbGlhbnxjbGFzc05hbWV8Y2xlYXIzREVOQXR0cmlidXRlfGNsZWFyM0RFTkludmVudG9yeXxjbGVhckFsbEl0ZW1zRnJvbUJhY2twYWNrfGNsZWFyQmFja3BhY2tDYXJnb3xjbGVhckJhY2twYWNrQ2FyZ29HbG9iYWx8Y2xlYXJGb3JjZXNSVER8Y2xlYXJHcm91cEljb25zfGNsZWFySXRlbUNhcmdvfGNsZWFySXRlbUNhcmdvR2xvYmFsfGNsZWFySXRlbVBvb2x8Y2xlYXJNYWdhemluZUNhcmdvfGNsZWFyTWFnYXppbmVDYXJnb0dsb2JhbHxjbGVhck1hZ2F6aW5lUG9vbHxjbGVhck92ZXJsYXl8Y2xlYXJSYWRpb3xjbGVhclZlaGljbGVJbml0fGNsZWFyV2VhcG9uQ2FyZ298Y2xlYXJXZWFwb25DYXJnb0dsb2JhbHxjbGVhcldlYXBvblBvb2x8Y2xpZW50T3duZXJ8Y2xvc2VEaWFsb2d8Y2xvc2VEaXNwbGF5fGNsb3NlT3ZlcmxheXxjb2xsYXBzZU9iamVjdFRyZWV8Y29sbGVjdDNERU5IaXN0b3J5fGNvbGxlY3RpdmVSVER8Y29tYmF0TW9kZXxjb21tYW5kQXJ0aWxsZXJ5RmlyZXxjb21tYW5kQ2hhdHxjb21tYW5kZXJ8Y29tbWFuZEZpcmV8Y29tbWFuZEZvbGxvd3xjb21tYW5kRlNNfGNvbW1hbmRHZXRPdXR8Y29tbWFuZGluZ01lbnV8Y29tbWFuZE1vdmV8Y29tbWFuZFJhZGlvfGNvbW1hbmRTdG9wfGNvbW1hbmRTdXBwcmVzc2l2ZUZpcmV8Y29tbWFuZFRhcmdldHxjb21tYW5kV2F0Y2h8Y29tbWVudHxjb21taXRPdmVybGF5fGNvbXBpbGV8Y29tcGlsZUZpbmFsfGNvbXBsZXRlZEZTTXxjb21wb3NlVGV4dHxjb25maWdDbGFzc2VzfGNvbmZpZ0ZpbGV8Y29uZmlnSGllcmFyY2h5fGNvbmZpZ05hbWV8Y29uZmlnTnVsbHxjb25maWdQcm9wZXJ0aWVzfGNvbmZpZ1NvdXJjZUFkZG9uTGlzdHxjb25maWdTb3VyY2VNb2R8Y29uZmlnU291cmNlTW9kTGlzdHxjb25maXJtU2Vuc29yVGFyZ2V0fGNvbm5lY3RUZXJtaW5hbFRvVUFWfGNvbnRyb2xOdWxsfGNvbnRyb2xzR3JvdXBDdHJsfGNvcHlGcm9tQ2xpcGJvYXJkfGNvcHlUb0NsaXBib2FyZHxjb3B5V2F5cG9pbnRzfGNvc3xjb3VudHxjb3VudEVuZW15fGNvdW50RnJpZW5kbHl8Y291bnRTaWRlfGNvdW50VHlwZXxjb3VudFVua25vd258Y3JlYXRlM0RFTkNvbXBvc2l0aW9ufGNyZWF0ZTNERU5FbnRpdHl8Y3JlYXRlQWdlbnR8Y3JlYXRlQ2VudGVyfGNyZWF0ZURpYWxvZ3xjcmVhdGVEaWFyeUxpbmt8Y3JlYXRlRGlhcnlSZWNvcmR8Y3JlYXRlRGlhcnlTdWJqZWN0fGNyZWF0ZURpc3BsYXl8Y3JlYXRlR2VhckRpYWxvZ3xjcmVhdGVHcm91cHxjcmVhdGVHdWFyZGVkUG9pbnR8Y3JlYXRlTG9jYXRpb258Y3JlYXRlTWFya2VyfGNyZWF0ZU1hcmtlckxvY2FsfGNyZWF0ZU1lbnV8Y3JlYXRlTWluZXxjcmVhdGVNaXNzaW9uRGlzcGxheXxjcmVhdGVNUENhbXBhaWduRGlzcGxheXxjcmVhdGVTaW1wbGVPYmplY3R8Y3JlYXRlU2ltcGxlVGFza3xjcmVhdGVTaXRlfGNyZWF0ZVNvdW5kU291cmNlfGNyZWF0ZVRhc2t8Y3JlYXRlVGVhbXxjcmVhdGVUcmlnZ2VyfGNyZWF0ZVVuaXR8Y3JlYXRlVmVoaWNsZXxjcmVhdGVWZWhpY2xlQ3Jld3xjcmVhdGVWZWhpY2xlTG9jYWx8Y3Jld3xjdEFkZEhlYWRlcnxjdEFkZFJvd3xjdENsZWFyfGN0Q3VyU2VsfGN0RGF0YXxjdEZpbmRIZWFkZXJSb3dzfGN0RmluZFJvd0hlYWRlcnxjdEhlYWRlckNvbnRyb2xzfGN0SGVhZGVyQ291bnR8Y3RSZW1vdmVIZWFkZXJzfGN0UmVtb3ZlUm93c3xjdHJsQWN0aXZhdGV8Y3RybEFkZEV2ZW50SGFuZGxlcnxjdHJsQW5nbGV8Y3RybEF1dG9TY3JvbGxEZWxheXxjdHJsQXV0b1Njcm9sbFJld2luZHxjdHJsQXV0b1Njcm9sbFNwZWVkfGN0cmxDaGVja2VkfGN0cmxDbGFzc05hbWV8Y3RybENvbW1pdHxjdHJsQ29tbWl0dGVkfGN0cmxDcmVhdGV8Y3RybERlbGV0ZXxjdHJsRW5hYmxlfGN0cmxFbmFibGVkfGN0cmxGYWRlfGN0cmxIVE1MTG9hZGVkfGN0cmxJREN8Y3RybElERHxjdHJsTWFwQW5pbUFkZHxjdHJsTWFwQW5pbUNsZWFyfGN0cmxNYXBBbmltQ29tbWl0fGN0cmxNYXBBbmltRG9uZXxjdHJsTWFwQ3Vyc29yfGN0cmxNYXBNb3VzZU92ZXJ8Y3RybE1hcFNjYWxlfGN0cmxNYXBTY3JlZW5Ub1dvcmxkfGN0cmxNYXBXb3JsZFRvU2NyZWVufGN0cmxNb2RlbHxjdHJsTW9kZWxEaXJBbmRVcHxjdHJsTW9kZWxTY2FsZXxjdHJsUGFyZW50fGN0cmxQYXJlbnRDb250cm9sc0dyb3VwfGN0cmxQb3NpdGlvbnxjdHJsUmVtb3ZlQWxsRXZlbnRIYW5kbGVyc3xjdHJsUmVtb3ZlRXZlbnRIYW5kbGVyfGN0cmxTY2FsZXxjdHJsU2V0QWN0aXZlQ29sb3J8Y3RybFNldEFuZ2xlfGN0cmxTZXRBdXRvU2Nyb2xsRGVsYXl8Y3RybFNldEF1dG9TY3JvbGxSZXdpbmR8Y3RybFNldEF1dG9TY3JvbGxTcGVlZHxjdHJsU2V0QmFja2dyb3VuZENvbG9yfGN0cmxTZXRDaGVja2VkfGN0cmxTZXREaXNhYmxlZENvbG9yfGN0cmxTZXRFdmVudEhhbmRsZXJ8Y3RybFNldEZhZGV8Y3RybFNldEZvY3VzfGN0cmxTZXRGb250fGN0cmxTZXRGb250SDF8Y3RybFNldEZvbnRIMUJ8Y3RybFNldEZvbnRIMnxjdHJsU2V0Rm9udEgyQnxjdHJsU2V0Rm9udEgzfGN0cmxTZXRGb250SDNCfGN0cmxTZXRGb250SDR8Y3RybFNldEZvbnRINEJ8Y3RybFNldEZvbnRINXxjdHJsU2V0Rm9udEg1QnxjdHJsU2V0Rm9udEg2fGN0cmxTZXRGb250SDZCfGN0cmxTZXRGb250SGVpZ2h0fGN0cmxTZXRGb250SGVpZ2h0SDF8Y3RybFNldEZvbnRIZWlnaHRIMnxjdHJsU2V0Rm9udEhlaWdodEgzfGN0cmxTZXRGb250SGVpZ2h0SDR8Y3RybFNldEZvbnRIZWlnaHRINXxjdHJsU2V0Rm9udEhlaWdodEg2fGN0cmxTZXRGb250SGVpZ2h0U2Vjb25kYXJ5fGN0cmxTZXRGb250UHxjdHJsU2V0Rm9udFBCfGN0cmxTZXRGb250U2Vjb25kYXJ5fGN0cmxTZXRGb3JlZ3JvdW5kQ29sb3J8Y3RybFNldE1vZGVsfGN0cmxTZXRNb2RlbERpckFuZFVwfGN0cmxTZXRNb2RlbFNjYWxlfGN0cmxTZXRQaXhlbFByZWNpc2lvbnxjdHJsU2V0UG9zaXRpb258Y3RybFNldFNjYWxlfGN0cmxTZXRTdHJ1Y3R1cmVkVGV4dHxjdHJsU2V0VGV4dHxjdHJsU2V0VGV4dENvbG9yfGN0cmxTZXRUZXh0Q29sb3JTZWNvbmRhcnl8Y3RybFNldFRleHRTZWNvbmRhcnl8Y3RybFNldFRvb2x0aXB8Y3RybFNldFRvb2x0aXBDb2xvckJveHxjdHJsU2V0VG9vbHRpcENvbG9yU2hhZGV8Y3RybFNldFRvb2x0aXBDb2xvclRleHR8Y3RybFNob3d8Y3RybFNob3dufGN0cmxUZXh0fGN0cmxUZXh0SGVpZ2h0fGN0cmxUZXh0U2Vjb25kYXJ5fGN0cmxUZXh0V2lkdGh8Y3RybFR5cGV8Y3RybFZpc2libGV8Y3RSb3dDb250cm9sc3xjdFJvd0NvdW50fGN0U2V0Q3VyU2VsfGN0U2V0RGF0YXxjdFNldEhlYWRlclRlbXBsYXRlfGN0U2V0Um93VGVtcGxhdGV8Y3RTZXRWYWx1ZXxjdFZhbHVlfGN1cmF0b3JBZGRvbnN8Y3VyYXRvckNhbWVyYXxjdXJhdG9yQ2FtZXJhQXJlYXxjdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmd8Y3VyYXRvckNvZWZ8Y3VyYXRvckVkaXRhYmxlT2JqZWN0c3xjdXJhdG9yRWRpdGluZ0FyZWF8Y3VyYXRvckVkaXRpbmdBcmVhVHlwZXxjdXJhdG9yTW91c2VPdmVyfGN1cmF0b3JQb2ludHN8Y3VyYXRvclJlZ2lzdGVyZWRPYmplY3RzfGN1cmF0b3JTZWxlY3RlZHxjdXJhdG9yV2F5cG9pbnRDb3N0fGN1cnJlbnQzREVOT3BlcmF0aW9ufGN1cnJlbnRDaGFubmVsfGN1cnJlbnRDb21tYW5kfGN1cnJlbnRNYWdhemluZXxjdXJyZW50TWFnYXppbmVEZXRhaWx8Y3VycmVudE1hZ2F6aW5lRGV0YWlsVHVycmV0fGN1cnJlbnRNYWdhemluZVR1cnJldHxjdXJyZW50TXV6emxlfGN1cnJlbnROYW1lc3BhY2V8Y3VycmVudFRhc2t8Y3VycmVudFRhc2tzfGN1cnJlbnRUaHJvd2FibGV8Y3VycmVudFZpc2lvbk1vZGV8Y3VycmVudFdheXBvaW50fGN1cnJlbnRXZWFwb258Y3VycmVudFdlYXBvbk1vZGV8Y3VycmVudFdlYXBvblR1cnJldHxjdXJyZW50WmVyb2luZ3xjdXJzb3JPYmplY3R8Y3Vyc29yVGFyZ2V0fGN1c3RvbUNoYXR8Y3VzdG9tUmFkaW98Y3V0RmFkZU91dHxjdXRPYmp8Y3V0UnNjfGN1dFRleHR8ZGFtYWdlfGRhdGV8ZGF0ZVRvTnVtYmVyfGRheXRpbWV8ZGVBY3RpdmF0ZUtleXxkZWJyaWVmaW5nVGV4dHxkZWJ1Z0ZTTXxkZWJ1Z0xvZ3xkZWd8ZGVsZXRlM0RFTkVudGl0aWVzfGRlbGV0ZUF0fGRlbGV0ZUNlbnRlcnxkZWxldGVDb2xsZWN0aW9ufGRlbGV0ZUVkaXRvck9iamVjdHxkZWxldGVHcm91cHxkZWxldGVHcm91cFdoZW5FbXB0eXxkZWxldGVJZGVudGl0eXxkZWxldGVMb2NhdGlvbnxkZWxldGVNYXJrZXJ8ZGVsZXRlTWFya2VyTG9jYWx8ZGVsZXRlUmFuZ2V8ZGVsZXRlUmVzb3VyY2VzfGRlbGV0ZVNpdGV8ZGVsZXRlU3RhdHVzfGRlbGV0ZVRlYW18ZGVsZXRlVmVoaWNsZXxkZWxldGVWZWhpY2xlQ3Jld3xkZWxldGVXYXlwb2ludHxkZXRhY2h8ZGV0ZWN0ZWRNaW5lc3xkaWFnX2FjdGl2ZU1pc3Npb25GU01zfGRpYWdfYWN0aXZlU2NyaXB0c3xkaWFnX2FjdGl2ZVNRRlNjcmlwdHN8ZGlhZ19hY3RpdmVTUVNTY3JpcHRzfGRpYWdfY2FwdHVyZUZyYW1lfGRpYWdfY2FwdHVyZUZyYW1lVG9GaWxlfGRpYWdfY2FwdHVyZVNsb3dGcmFtZXxkaWFnX2NvZGVQZXJmb3JtYW5jZXxkaWFnX2RyYXdNb2RlfGRpYWdfZHluYW1pY1NpbXVsYXRpb25FbmR8ZGlhZ19lbmFibGV8ZGlhZ19lbmFibGVkfGRpYWdfZnBzfGRpYWdfZnBzTWlufGRpYWdfZnJhbWVOb3xkaWFnX2xpZ2h0TmV3TG9hZHxkaWFnX2xpc3R8ZGlhZ19sb2d8ZGlhZ19sb2dTbG93RnJhbWV8ZGlhZ19tZXJnZUNvbmZpZ0ZpbGV8ZGlhZ19yZWNvcmRUdXJyZXRMaW1pdHN8ZGlhZ19zZXRMaWdodE5ld3xkaWFnX3RpY2tUaW1lfGRpYWdfdG9nZ2xlfGRpYWxvZ3xkaWFyeVN1YmplY3RFeGlzdHN8ZGlkSklQfGRpZEpJUE93bmVyfGRpZmZpY3VsdHl8ZGlmZmljdWx0eUVuYWJsZWR8ZGlmZmljdWx0eUVuYWJsZWRSVER8ZGlmZmljdWx0eU9wdGlvbnxkaXJlY3Rpb258ZGlyZWN0U2F5fGRpc2FibGVBSXxkaXNhYmxlQ29sbGlzaW9uV2l0aHxkaXNhYmxlQ29udmVyc2F0aW9ufGRpc2FibGVEZWJyaWVmaW5nU3RhdHN8ZGlzYWJsZU1hcEluZGljYXRvcnN8ZGlzYWJsZU5WR0VxdWlwbWVudHxkaXNhYmxlUmVtb3RlU2Vuc29yc3xkaXNhYmxlU2VyaWFsaXphdGlvbnxkaXNhYmxlVElFcXVpcG1lbnR8ZGlzYWJsZVVBVkNvbm5lY3RhYmlsaXR5fGRpc2FibGVVc2VySW5wdXR8ZGlzcGxheUFkZEV2ZW50SGFuZGxlcnxkaXNwbGF5Q3RybHxkaXNwbGF5TnVsbHxkaXNwbGF5UGFyZW50fGRpc3BsYXlSZW1vdmVBbGxFdmVudEhhbmRsZXJzfGRpc3BsYXlSZW1vdmVFdmVudEhhbmRsZXJ8ZGlzcGxheVNldEV2ZW50SGFuZGxlcnxkaXNzb2x2ZVRlYW18ZGlzdGFuY2V8ZGlzdGFuY2UyRHxkaXN0YW5jZVNxcnxkaXN0cmlidXRpb25SZWdpb258ZG8zREVOQWN0aW9ufGRvQXJ0aWxsZXJ5RmlyZXxkb0ZpcmV8ZG9Gb2xsb3d8ZG9GU018ZG9HZXRPdXR8ZG9Nb3ZlfGRvb3JQaGFzZXxkb1N0b3B8ZG9TdXBwcmVzc2l2ZUZpcmV8ZG9UYXJnZXR8ZG9XYXRjaHxkcmF3QXJyb3d8ZHJhd0VsbGlwc2V8ZHJhd0ljb258ZHJhd0ljb24zRHxkcmF3TGluZXxkcmF3TGluZTNEfGRyYXdMaW5rfGRyYXdMb2NhdGlvbnxkcmF3UG9seWdvbnxkcmF3UmVjdGFuZ2xlfGRyYXdUcmlhbmdsZXxkcml2ZXJ8ZHJvcHxkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlfGR5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2VDb2VmfGR5bmFtaWNTaW11bGF0aW9uRW5hYmxlZHxkeW5hbWljU2ltdWxhdGlvblN5c3RlbUVuYWJsZWR8ZWFzdHxlZGl0M0RFTk1pc3Npb25BdHRyaWJ1dGVzfGVkaXRPYmplY3R8ZWRpdG9yU2V0RXZlbnRIYW5kbGVyfGVmZmVjdGl2ZUNvbW1hbmRlcnxlbXB0eVBvc2l0aW9uc3xlbmFibGVBSXxlbmFibGVBSUZlYXR1cmV8ZW5hYmxlQWltUHJlY2lzaW9ufGVuYWJsZUF0dGFja3xlbmFibGVBdWRpb0ZlYXR1cmV8ZW5hYmxlQXV0b1N0YXJ0VXBSVER8ZW5hYmxlQXV0b1RyaW1SVER8ZW5hYmxlQ2FtU2hha2V8ZW5hYmxlQ2F1c3RpY3N8ZW5hYmxlQ2hhbm5lbHxlbmFibGVDb2xsaXNpb25XaXRofGVuYWJsZUNvcGlsb3R8ZW5hYmxlRGVicmllZmluZ1N0YXRzfGVuYWJsZURpYWdMZWdlbmR8ZW5hYmxlRHluYW1pY1NpbXVsYXRpb258ZW5hYmxlRHluYW1pY1NpbXVsYXRpb25TeXN0ZW18ZW5hYmxlRW5kRGlhbG9nfGVuYWJsZUVuZ2luZUFydGlsbGVyeXxlbmFibGVFbnZpcm9ubWVudHxlbmFibGVGYXRpZ3VlfGVuYWJsZUd1bkxpZ2h0c3xlbmFibGVJbmZvUGFuZWxDb21wb25lbnR8ZW5hYmxlSVJMYXNlcnN8ZW5hYmxlTWltaWNzfGVuYWJsZVBlcnNvblR1cnJldHxlbmFibGVSYWRpb3xlbmFibGVSZWxvYWR8ZW5hYmxlUm9wZUF0dGFjaHxlbmFibGVTYXROb3JtYWxPbkRldGFpbHxlbmFibGVTYXZpbmd8ZW5hYmxlU2VudGVuY2VzfGVuYWJsZVNpbXVsYXRpb258ZW5hYmxlU2ltdWxhdGlvbkdsb2JhbHxlbmFibGVTdGFtaW5hfGVuYWJsZVN0cmVzc0RhbWFnZXxlbmFibGVUZWFtU3dpdGNofGVuYWJsZVRyYWZmaWN8ZW5hYmxlVUFWQ29ubmVjdGFiaWxpdHl8ZW5hYmxlVUFWV2F5cG9pbnRzfGVuYWJsZVZlaGljbGVDYXJnb3xlbmFibGVWZWhpY2xlU2Vuc29yfGVuYWJsZVdlYXBvbkRpc2Fzc2VtYmx5fGVuZGx8ZW5kTG9hZGluZ1NjcmVlbnxlbmRNaXNzaW9ufGVuZ2luZU9ufGVuZ2luZXNJc09uUlREfGVuZ2luZXNQb3dlclJURHxlbmdpbmVzUnBtUlREfGVuZ2luZXNUb3JxdWVSVER8ZW50aXRpZXN8ZW52aXJvbm1lbnRFbmFibGVkfGVzdGltYXRlZEVuZFNlcnZlclRpbWV8ZXN0aW1hdGVkVGltZUxlZnR8ZXZhbE9iamVjdEFyZ3VtZW50fGV2ZXJ5QmFja3BhY2t8ZXZlcnlDb250YWluZXJ8ZXhlY3xleGVjRWRpdG9yU2NyaXB0fGV4cHxleHBlY3RlZERlc3RpbmF0aW9ufGV4cG9ydEpJUE1lc3NhZ2VzfGV5ZURpcmVjdGlvbnxleWVQb3N8ZmFjZXxmYWN0aW9ufGZhZGVNdXNpY3xmYWRlUmFkaW98ZmFkZVNvdW5kfGZhZGVTcGVlY2h8ZmFpbE1pc3Npb258ZmlsbFdlYXBvbnNGcm9tUG9vbHxmaW5kfGZpbmRDb3ZlcnxmaW5kRGlzcGxheXxmaW5kRWRpdG9yT2JqZWN0fGZpbmRFbXB0eVBvc2l0aW9ufGZpbmRFbXB0eVBvc2l0aW9uUmVhZHl8ZmluZElmfGZpbmROZWFyZXN0RW5lbXl8ZmluaXNoTWlzc2lvbkluaXR8ZmluaXRlfGZpcmV8ZmlyZUF0VGFyZ2V0fGZpcnN0QmFja3BhY2t8ZmxhZ3xmbGFnQW5pbWF0aW9uUGhhc2V8ZmxhZ093bmVyfGZsYWdTaWRlfGZsYWdUZXh0dXJlfGZsZWVpbmd8Zmxvb3J8Zmx5SW5IZWlnaHR8Zmx5SW5IZWlnaHRBU0x8Zm9nfGZvZ0ZvcmVjYXN0fGZvZ1BhcmFtc3xmb3JjZUFkZFVuaWZvcm18Zm9yY2VBdFBvc2l0aW9uUlREfGZvcmNlZE1hcHxmb3JjZUVuZHxmb3JjZUZsYWdUZXh0dXJlfGZvcmNlRm9sbG93Um9hZHxmb3JjZUdlbmVyYXRvclJURHxmb3JjZU1hcHxmb3JjZVJlc3Bhd258Zm9yY2VTcGVlZHxmb3JjZVdhbGt8Zm9yY2VXZWFwb25GaXJlfGZvcmNlV2VhdGhlckNoYW5nZXxmb3JnZXRUYXJnZXR8Zm9ybWF0fGZvcm1hdGlvbnxmb3JtYXRpb25EaXJlY3Rpb258Zm9ybWF0aW9uTGVhZGVyfGZvcm1hdGlvbk1lbWJlcnN8Zm9ybWF0aW9uUG9zaXRpb258Zm9ybWF0aW9uVGFza3xmb3JtYXRUZXh0fGZvcm1MZWFkZXJ8ZnJlZUxvb2t8ZnJvbUVkaXRvcnxmdWVsfGZ1bGxDcmV3fGdlYXJJRENBbW1vQ291bnR8Z2VhclNsb3RBbW1vQ291bnR8Z2VhclNsb3REYXRhfGdldDNERU5BY3Rpb25TdGF0ZXxnZXQzREVOQXR0cmlidXRlfGdldDNERU5DYW1lcmF8Z2V0M0RFTkNvbm5lY3Rpb25zfGdldDNERU5FbnRpdHl8Z2V0M0RFTkVudGl0eUlEfGdldDNERU5HcmlkfGdldDNERU5JY29uc1Zpc2libGV8Z2V0M0RFTkxheWVyRW50aXRpZXN8Z2V0M0RFTkxpbmVzVmlzaWJsZXxnZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXxnZXQzREVOTW91c2VPdmVyfGdldDNERU5TZWxlY3RlZHxnZXRBaW1pbmdDb2VmfGdldEFsbEVudlNvdW5kQ29udHJvbGxlcnN8Z2V0QWxsSGl0UG9pbnRzRGFtYWdlfGdldEFsbE93bmVkTWluZXN8Z2V0QWxsU291bmRDb250cm9sbGVyc3xnZXRBbW1vQ2FyZ298Z2V0QW5pbUFpbVByZWNpc2lvbnxnZXRBbmltU3BlZWRDb2VmfGdldEFycmF5fGdldEFydGlsbGVyeUFtbW98Z2V0QXJ0aWxsZXJ5Q29tcHV0ZXJTZXR0aW5nc3xnZXRBcnRpbGxlcnlFVEF8Z2V0QXNzaWduZWRDdXJhdG9yTG9naWN8Z2V0QXNzaWduZWRDdXJhdG9yVW5pdHxnZXRCYWNrcGFja0NhcmdvfGdldEJsZWVkaW5nUmVtYWluaW5nfGdldEJ1cm5pbmdWYWx1ZXxnZXRDYW1lcmFWaWV3RGlyZWN0aW9ufGdldENhcmdvSW5kZXh8Z2V0Q2VudGVyT2ZNYXNzfGdldENsaWVudFN0YXRlfGdldENsaWVudFN0YXRlTnVtYmVyfGdldENvbXBhdGlibGVQeWxvbk1hZ2F6aW5lc3xnZXRDb25uZWN0ZWRVQVZ8Z2V0Q29udGFpbmVyTWF4TG9hZHxnZXRDdXJzb3JPYmplY3RQYXJhbXN8Z2V0Q3VzdG9tQWltQ29lZnxnZXREYW1tYWdlfGdldERlc2NyaXB0aW9ufGdldERpcnxnZXREaXJWaXN1YWx8Z2V0RExDQXNzZXRzVXNhZ2V8Z2V0RExDQXNzZXRzVXNhZ2VCeU5hbWV8Z2V0RExDc3xnZXRETENVc2FnZVRpbWV8Z2V0RWRpdG9yQ2FtZXJhfGdldEVkaXRvck1vZGV8Z2V0RWRpdG9yT2JqZWN0U2NvcGV8Z2V0RWxldmF0aW9uT2Zmc2V0fGdldEVuZ2luZVRhcmdldFJwbVJURHxnZXRFbnZTb3VuZENvbnRyb2xsZXJ8Z2V0RmF0aWd1ZXxnZXRGaWVsZE1hbnVhbFN0YXJ0UGFnZXxnZXRGb3JjZWRGbGFnVGV4dHVyZXxnZXRGcmllbmR8Z2V0RlNNVmFyaWFibGV8Z2V0RnVlbENhcmdvfGdldEdyb3VwSWNvbnxnZXRHcm91cEljb25QYXJhbXN8Z2V0R3JvdXBJY29uc3xnZXRIaWRlRnJvbXxnZXRIaXR8Z2V0SGl0SW5kZXh8Z2V0SGl0UG9pbnREYW1hZ2V8Z2V0SXRlbUNhcmdvfGdldE1hZ2F6aW5lQ2FyZ298Z2V0TWFya2VyQ29sb3J8Z2V0TWFya2VyUG9zfGdldE1hcmtlclNpemV8Z2V0TWFya2VyVHlwZXxnZXRNYXNzfGdldE1pc3Npb25Db25maWd8Z2V0TWlzc2lvbkNvbmZpZ1ZhbHVlfGdldE1pc3Npb25ETENzfGdldE1pc3Npb25MYXllckVudGl0aWVzfGdldE1pc3Npb25MYXllcnN8Z2V0TW9kZWxJbmZvfGdldE1vdXNlUG9zaXRpb258Z2V0TXVzaWNQbGF5ZWRUaW1lfGdldE51bWJlcnxnZXRPYmplY3RBcmd1bWVudHxnZXRPYmplY3RDaGlsZHJlbnxnZXRPYmplY3RETEN8Z2V0T2JqZWN0TWF0ZXJpYWxzfGdldE9iamVjdFByb3h5fGdldE9iamVjdFRleHR1cmVzfGdldE9iamVjdFR5cGV8Z2V0T2JqZWN0Vmlld0Rpc3RhbmNlfGdldE94eWdlblJlbWFpbmluZ3xnZXRQZXJzb25Vc2VkRExDc3xnZXRQaWxvdENhbWVyYURpcmVjdGlvbnxnZXRQaWxvdENhbWVyYVBvc2l0aW9ufGdldFBpbG90Q2FtZXJhUm90YXRpb258Z2V0UGlsb3RDYW1lcmFUYXJnZXR8Z2V0UGxhdGVOdW1iZXJ8Z2V0UGxheWVyQ2hhbm5lbHxnZXRQbGF5ZXJTY29yZXN8Z2V0UGxheWVyVUlEfGdldFBsYXllclVJRE9sZHxnZXRQb3N8Z2V0UG9zQVNMfGdldFBvc0FTTFZpc3VhbHxnZXRQb3NBU0xXfGdldFBvc0FUTHxnZXRQb3NBVExWaXN1YWx8Z2V0UG9zVmlzdWFsfGdldFBvc1dvcmxkfGdldFB5bG9uTWFnYXppbmVzfGdldFJlbERpcnxnZXRSZWxQb3N8Z2V0UmVtb3RlU2Vuc29yc0Rpc2FibGVkfGdldFJlcGFpckNhcmdvfGdldFJlc29sdXRpb258Z2V0Um90b3JCcmFrZVJURHxnZXRTaGFkb3dEaXN0YW5jZXxnZXRTaG90UGFyZW50c3xnZXRTbGluZ0xvYWR8Z2V0U291bmRDb250cm9sbGVyfGdldFNvdW5kQ29udHJvbGxlclJlc3VsdHxnZXRTcGVlZHxnZXRTdGFtaW5hfGdldFN0YXRWYWx1ZXxnZXRTdXBwcmVzc2lvbnxnZXRUZXJyYWluR3JpZHxnZXRUZXJyYWluSGVpZ2h0QVNMfGdldFRleHR8Z2V0VG90YWxETENVc2FnZVRpbWV8Z2V0VHJpbU9mZnNldFJURHxnZXRVbml0TG9hZG91dHxnZXRVbml0VHJhaXR8Z2V0VXNlck1GRFRleHR8Z2V0VXNlck1GRFZhbHVlfGdldFZhcmlhYmxlfGdldFZlaGljbGVDYXJnb3xnZXRXZWFwb25DYXJnb3xnZXRXZWFwb25Td2F5fGdldFdpbmdzT3JpZW50YXRpb25SVER8Z2V0V2luZ3NQb3NpdGlvblJURHxnZXRXUFBvc3xnbGFuY2VBdHxnbG9iYWxDaGF0fGdsb2JhbFJhZGlvfGdvZ2dsZXN8Z3JvdXB8Z3JvdXBDaGF0fGdyb3VwRnJvbU5ldElkfGdyb3VwSWNvblNlbGVjdGFibGV8Z3JvdXBJY29uc1Zpc2libGV8Z3JvdXBJZHxncm91cE93bmVyfGdyb3VwUmFkaW98Z3JvdXBTZWxlY3RlZFVuaXRzfGdyb3VwU2VsZWN0VW5pdHxncnBOdWxsfGd1bm5lcnxndXN0c3xoYWx0fGhhbmRndW5JdGVtc3xoYW5kZ3VuTWFnYXppbmV8aGFuZGd1bldlYXBvbnxoYW5kc0hpdHxoYXNJbnRlcmZhY2V8aGFzUGlsb3RDYW1lcmF8aGFzV2VhcG9ufGhjQWxsR3JvdXBzfGhjR3JvdXBQYXJhbXN8aGNMZWFkZXJ8aGNSZW1vdmVBbGxHcm91cHN8aGNSZW1vdmVHcm91cHxoY1NlbGVjdGVkfGhjU2VsZWN0R3JvdXB8aGNTZXRHcm91cHxoY1Nob3dCYXJ8aGNTaG93bkJhcnxoZWFkZ2VhcnxoaWRlQm9keXxoaWRlT2JqZWN0fGhpZGVPYmplY3RHbG9iYWx8aGlkZVNlbGVjdGlvbnxoaW50fGhpbnRDfGhpbnRDYWRldHxoaW50U2lsZW50fGhtZHxob3N0TWlzc2lvbnxodG1sTG9hZHxIVURNb3ZlbWVudExldmVsc3xodW1pZGl0eXxpbWFnZXxpbXBvcnRBbGxHcm91cHN8aW1wb3J0YW5jZXxpbnxpbkFyZWF8aW5BcmVhQXJyYXl8aW5jYXBhY2l0YXRlZFN0YXRlfGluZGVwZW5kZW50fGluZmxhbWV8aW5mbGFtZWR8aW5mb1BhbmVsfGluZm9QYW5lbENvbXBvbmVudEVuYWJsZWR8aW5mb1BhbmVsQ29tcG9uZW50c3xpbmZvUGFuZWxzfGluR2FtZVVJU2V0RXZlbnRIYW5kbGVyfGluaGVyaXRzRnJvbXxpbml0QW1iaWVudExpZmV8aW5Qb2x5Z29ufGlucHV0QWN0aW9ufGluUmFuZ2VPZkFydGlsbGVyeXxpbnNlcnRFZGl0b3JPYmplY3R8aW50ZXJzZWN0fGlzM0RFTnxpczNERU5NdWx0aXBsYXllcnxpc0FibGVUb0JyZWF0aGV8aXNBZ2VudHxpc0FpbVByZWNpc2lvbkVuYWJsZWR8aXNBcnJheXxpc0F1dG9Ib3Zlck9ufGlzQXV0b25vbW91c3xpc0F1dG9TdGFydFVwRW5hYmxlZFJURHxpc0F1dG90ZXN0fGlzQXV0b1RyaW1PblJURHxpc0JsZWVkaW5nfGlzQnVybmluZ3xpc0NsYXNzfGlzQ29sbGlzaW9uTGlnaHRPbnxpc0NvcGlsb3RFbmFibGVkfGlzRGFtYWdlQWxsb3dlZHxpc0RlZGljYXRlZHxpc0RMQ0F2YWlsYWJsZXxpc0VuZ2luZU9ufGlzRXF1YWxUb3xpc0VxdWFsVHlwZXxpc0VxdWFsVHlwZUFsbHxpc0VxdWFsVHlwZUFueXxpc0VxdWFsVHlwZUFycmF5fGlzRXF1YWxUeXBlUGFyYW1zfGlzRmlsZVBhdGNoaW5nRW5hYmxlZHxpc0ZsYXNobGlnaHRPbnxpc0ZsYXRFbXB0eXxpc0ZvcmNlZFdhbGt8aXNGb3JtYXRpb25MZWFkZXJ8aXNHcm91cERlbGV0ZWRXaGVuRW1wdHl8aXNIaWRkZW58aXNJblJlbWFpbnNDb2xsZWN0b3J8aXNJbnN0cnVjdG9yRmlndXJlRW5hYmxlZHxpc0lSTGFzZXJPbnxpc0tleUFjdGl2ZXxpc0tpbmRPZnxpc0xhc2VyT258aXNMaWdodE9ufGlzTG9jYWxpemVkfGlzTWFudWFsRmlyZXxpc01hcmtlZEZvckNvbGxlY3Rpb258aXNNdWx0aXBsYXllcnxpc011bHRpcGxheWVyU29sb3xpc05pbHxpc051bGx8aXNOdW1iZXJ8aXNPYmplY3RIaWRkZW58aXNPYmplY3RSVER8aXNPblJvYWR8aXNQaXBFbmFibGVkfGlzUGxheWVyfGlzUmVhbFRpbWV8aXNSZW1vdGVFeGVjdXRlZHxpc1JlbW90ZUV4ZWN1dGVkSklQfGlzU2VydmVyfGlzU2hvd2luZzNESWNvbnN8aXNTaW1wbGVPYmplY3R8aXNTcHJpbnRBbGxvd2VkfGlzU3RhbWluYUVuYWJsZWR8aXNTdGVhbU1pc3Npb258aXNTdHJlYW1GcmllbmRseVVJRW5hYmxlZHxpc1N0cmVzc0RhbWFnZUVuYWJsZWR8aXNUZXh0fGlzVG91Y2hpbmdHcm91bmR8aXNUdXJuZWRPdXR8aXNUdXRIaW50c0VuYWJsZWR8aXNVQVZDb25uZWN0YWJsZXxpc1VBVkNvbm5lY3RlZHxpc1VJQ29udGV4dHxpc1VuaWZvcm1BbGxvd2VkfGlzVmVoaWNsZUNhcmdvfGlzVmVoaWNsZVJhZGFyT258aXNWZWhpY2xlU2Vuc29yRW5hYmxlZHxpc1dhbGtpbmd8aXNXZWFwb25EZXBsb3llZHxpc1dlYXBvblJlc3RlZHxpdGVtQ2FyZ298aXRlbXN8aXRlbXNXaXRoTWFnYXppbmVzfGpvaW58am9pbkFzfGpvaW5Bc1NpbGVudHxqb2luU2lsZW50fGpvaW5TdHJpbmd8a2JBZGREYXRhYmFzZXxrYkFkZERhdGFiYXNlVGFyZ2V0c3xrYkFkZFRvcGljfGtiSGFzVG9waWN8a2JSZWFjdHxrYlJlbW92ZVRvcGljfGtiVGVsbHxrYldhc1NhaWR8a2V5SW1hZ2V8a2V5TmFtZXxrbm93c0Fib3V0fGxhbmR8bGFuZEF0fGxhbmRSZXN1bHR8bGFuZ3VhZ2V8bGFzZXJUYXJnZXR8bGJBZGR8bGJDbGVhcnxsYkNvbG9yfGxiQ29sb3JSaWdodHxsYkN1clNlbHxsYkRhdGF8bGJEZWxldGV8bGJJc1NlbGVjdGVkfGxiUGljdHVyZXxsYlBpY3R1cmVSaWdodHxsYlNlbGVjdGlvbnxsYlNldENvbG9yfGxiU2V0Q29sb3JSaWdodHxsYlNldEN1clNlbHxsYlNldERhdGF8bGJTZXRQaWN0dXJlfGxiU2V0UGljdHVyZUNvbG9yfGxiU2V0UGljdHVyZUNvbG9yRGlzYWJsZWR8bGJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHxsYlNldFBpY3R1cmVSaWdodHxsYlNldFBpY3R1cmVSaWdodENvbG9yfGxiU2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZHxsYlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWR8bGJTZXRTZWxlY3RDb2xvcnxsYlNldFNlbGVjdENvbG9yUmlnaHR8bGJTZXRTZWxlY3RlZHxsYlNldFRleHR8bGJTZXRUZXh0UmlnaHR8bGJTZXRUb29sdGlwfGxiU2V0VmFsdWV8bGJTaXplfGxiU29ydHxsYlNvcnRCeVZhbHVlfGxiVGV4dHxsYlRleHRSaWdodHxsYlZhbHVlfGxlYWRlcnxsZWFkZXJib2FyZERlSW5pdHxsZWFkZXJib2FyZEdldFJvd3N8bGVhZGVyYm9hcmRJbml0fGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NGcmllbmRzfGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NHbG9iYWx8bGVhZGVyYm9hcmRSZXF1ZXN0Um93c0dsb2JhbEFyb3VuZFVzZXJ8bGVhZGVyYm9hcmRzUmVxdWVzdFVwbG9hZFNjb3JlfGxlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZUtlZXBCZXN0fGxlYWRlcmJvYXJkU3RhdGV8bGVhdmVWZWhpY2xlfGxpYnJhcnlDcmVkaXRzfGxpYnJhcnlEaXNjbGFpbWVyc3xsaWZlU3RhdGV8bGlnaHRBdHRhY2hPYmplY3R8bGlnaHREZXRhY2hPYmplY3R8bGlnaHRJc09ufGxpZ2h0bmluZ3N8bGltaXRTcGVlZHxsaW5lYXJDb252ZXJzaW9ufGxpbmVCcmVha3xsaW5lSW50ZXJzZWN0c3xsaW5lSW50ZXJzZWN0c09ianN8bGluZUludGVyc2VjdHNTdXJmYWNlc3xsaW5lSW50ZXJzZWN0c1dpdGh8bGlua0l0ZW18bGlzdHxsaXN0T2JqZWN0c3xsaXN0UmVtb3RlVGFyZ2V0c3xsaXN0VmVoaWNsZVNlbnNvcnN8bG58bG5iQWRkQXJyYXl8bG5iQWRkQ29sdW1ufGxuYkFkZFJvd3xsbmJDbGVhcnxsbmJDb2xvcnxsbmJDb2xvclJpZ2h0fGxuYkN1clNlbFJvd3xsbmJEYXRhfGxuYkRlbGV0ZUNvbHVtbnxsbmJEZWxldGVSb3d8bG5iR2V0Q29sdW1uc1Bvc2l0aW9ufGxuYlBpY3R1cmV8bG5iUGljdHVyZVJpZ2h0fGxuYlNldENvbG9yfGxuYlNldENvbG9yUmlnaHR8bG5iU2V0Q29sdW1uc1Bvc3xsbmJTZXRDdXJTZWxSb3d8bG5iU2V0RGF0YXxsbmJTZXRQaWN0dXJlfGxuYlNldFBpY3R1cmVDb2xvcnxsbmJTZXRQaWN0dXJlQ29sb3JSaWdodHxsbmJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHxsbmJTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZFJpZ2h0fGxuYlNldFBpY3R1cmVSaWdodHxsbmJTZXRUZXh0fGxuYlNldFRleHRSaWdodHxsbmJTZXRWYWx1ZXxsbmJTaXplfGxuYlNvcnR8bG5iU29ydEJ5VmFsdWV8bG5iVGV4dHxsbmJUZXh0UmlnaHR8bG5iVmFsdWV8bG9hZHxsb2FkQWJzfGxvYWRCYWNrcGFja3xsb2FkRmlsZXxsb2FkR2FtZXxsb2FkSWRlbnRpdHl8bG9hZE1hZ2F6aW5lfGxvYWRPdmVybGF5fGxvYWRTdGF0dXN8bG9hZFVuaWZvcm18bG9hZFZlc3R8bG9jYWx8bG9jYWxpemV8bG9jYXRpb25OdWxsfGxvY2F0aW9uUG9zaXRpb258bG9ja3xsb2NrQ2FtZXJhVG98bG9ja0NhcmdvfGxvY2tEcml2ZXJ8bG9ja2VkfGxvY2tlZENhcmdvfGxvY2tlZERyaXZlcnxsb2NrZWRUdXJyZXR8bG9ja0lkZW50aXR5fGxvY2tUdXJyZXR8bG9ja1dQfGxvZ3xsb2dFbnRpdGllc3xsb2dOZXR3b3JrfGxvZ05ldHdvcmtUZXJtaW5hdGV8bG9va0F0fGxvb2tBdFBvc3xtYWdhemluZUNhcmdvfG1hZ2F6aW5lc3xtYWdhemluZXNBbGxUdXJyZXRzfG1hZ2F6aW5lc0FtbW98bWFnYXppbmVzQW1tb0NhcmdvfG1hZ2F6aW5lc0FtbW9GdWxsfG1hZ2F6aW5lc0RldGFpbHxtYWdhemluZXNEZXRhaWxCYWNrcGFja3xtYWdhemluZXNEZXRhaWxVbmlmb3JtfG1hZ2F6aW5lc0RldGFpbFZlc3R8bWFnYXppbmVzVHVycmV0fG1hZ2F6aW5lVHVycmV0QW1tb3xtYXBBbmltQWRkfG1hcEFuaW1DbGVhcnxtYXBBbmltQ29tbWl0fG1hcEFuaW1Eb25lfG1hcENlbnRlck9uQ2FtZXJhfG1hcEdyaWRQb3NpdGlvbnxtYXJrQXNGaW5pc2hlZE9uU3RlYW18bWFya2VyQWxwaGF8bWFya2VyQnJ1c2h8bWFya2VyQ29sb3J8bWFya2VyRGlyfG1hcmtlclBvc3xtYXJrZXJTaGFwZXxtYXJrZXJTaXplfG1hcmtlclRleHR8bWFya2VyVHlwZXxtYXh8bWVtYmVyc3xtZW51QWN0aW9ufG1lbnVBZGR8bWVudUNoZWNrZWR8bWVudUNsZWFyfG1lbnVDb2xsYXBzZXxtZW51RGF0YXxtZW51RGVsZXRlfG1lbnVFbmFibGV8bWVudUVuYWJsZWR8bWVudUV4cGFuZHxtZW51SG92ZXJ8bWVudVBpY3R1cmV8bWVudVNldEFjdGlvbnxtZW51U2V0Q2hlY2t8bWVudVNldERhdGF8bWVudVNldFBpY3R1cmV8bWVudVNldFZhbHVlfG1lbnVTaG9ydGN1dHxtZW51U2hvcnRjdXRUZXh0fG1lbnVTaXplfG1lbnVTb3J0fG1lbnVUZXh0fG1lbnVVUkx8bWVudVZhbHVlfG1pbnxtaW5lQWN0aXZlfG1pbmVEZXRlY3RlZEJ5fG1pc3Npb25Db25maWdGaWxlfG1pc3Npb25EaWZmaWN1bHR5fG1pc3Npb25OYW1lfG1pc3Npb25OYW1lc3BhY2V8bWlzc2lvblN0YXJ0fG1pc3Npb25WZXJzaW9ufG1vZGVsVG9Xb3JsZHxtb2RlbFRvV29ybGRWaXN1YWx8bW9kZWxUb1dvcmxkVmlzdWFsV29ybGR8bW9kZWxUb1dvcmxkV29ybGR8bW9kUGFyYW1zfG1vb25JbnRlbnNpdHl8bW9vblBoYXNlfG1vcmFsZXxtb3ZlfG1vdmUzREVOQ2FtZXJhfG1vdmVJbkFueXxtb3ZlSW5DYXJnb3xtb3ZlSW5Db21tYW5kZXJ8bW92ZUluRHJpdmVyfG1vdmVJbkd1bm5lcnxtb3ZlSW5UdXJyZXR8bW92ZU9iamVjdFRvRW5kfG1vdmVPdXR8bW92ZVRpbWV8bW92ZVRvfG1vdmVUb0NvbXBsZXRlZHxtb3ZlVG9GYWlsZWR8bXVzaWNWb2x1bWV8bmFtZXxuYW1lU291bmR8bmVhckVudGl0aWVzfG5lYXJlc3RCdWlsZGluZ3xuZWFyZXN0TG9jYXRpb258bmVhcmVzdExvY2F0aW9uc3xuZWFyZXN0TG9jYXRpb25XaXRoRHViYmluZ3xuZWFyZXN0T2JqZWN0fG5lYXJlc3RPYmplY3RzfG5lYXJlc3RUZXJyYWluT2JqZWN0c3xuZWFyT2JqZWN0c3xuZWFyT2JqZWN0c1JlYWR5fG5lYXJSb2Fkc3xuZWFyU3VwcGxpZXN8bmVhclRhcmdldHN8bmVlZFJlbG9hZHxuZXRJZHxuZXRPYmpOdWxsfG5ld092ZXJsYXl8bmV4dE1lbnVJdGVtSW5kZXh8bmV4dFdlYXRoZXJDaGFuZ2V8bk1lbnVJdGVtc3xudW1iZXJPZkVuZ2luZXNSVER8bnVtYmVyVG9EYXRlfG9iamVjdEN1cmF0b3JzfG9iamVjdEZyb21OZXRJZHxvYmplY3RQYXJlbnR8b2JqTnVsbHxvYmpTdGF0dXN8b25CcmllZmluZ0dlYXJ8b25CcmllZmluZ0dyb3VwfG9uQnJpZWZpbmdOb3Rlc3xvbkJyaWVmaW5nUGxhbnxvbkJyaWVmaW5nVGVhbVN3aXRjaHxvbkNvbW1hbmRNb2RlQ2hhbmdlZHxvbkRvdWJsZUNsaWNrfG9uRWFjaEZyYW1lfG9uR3JvdXBJY29uQ2xpY2t8b25Hcm91cEljb25PdmVyRW50ZXJ8b25Hcm91cEljb25PdmVyTGVhdmV8b25IQ0dyb3VwU2VsZWN0aW9uQ2hhbmdlZHxvbk1hcFNpbmdsZUNsaWNrfG9uUGxheWVyQ29ubmVjdGVkfG9uUGxheWVyRGlzY29ubmVjdGVkfG9uUHJlbG9hZEZpbmlzaGVkfG9uUHJlbG9hZFN0YXJ0ZWR8b25TaG93TmV3T2JqZWN0fG9uVGVhbVN3aXRjaHxvcGVuQ3VyYXRvckludGVyZmFjZXxvcGVuRExDUGFnZXxvcGVuRFNJbnRlcmZhY2V8b3Blbk1hcHxvcGVuU3RlYW1BcHB8b3BlbllvdXR1YmVWaWRlb3xvcGZvcnxvcmRlckdldElufG92ZXJjYXN0fG92ZXJjYXN0Rm9yZWNhc3R8b3duZXJ8cGFyYW18cGFyYW1zfHBhcnNlTnVtYmVyfHBhcnNlU2ltcGxlQXJyYXl8cGFyc2VUZXh0fHBhcnNpbmdOYW1lc3BhY2V8cGFydGljbGVzUXVhbGl0eXxwaXxwaWNrV2VhcG9uUG9vbHxwaXRjaHxwaXhlbEdyaWR8cGl4ZWxHcmlkQmFzZXxwaXhlbEdyaWROb1VJU2NhbGV8cGl4ZWxIfHBpeGVsV3xwbGF5YWJsZVNsb3RzTnVtYmVyfHBsYXlhYmxlVW5pdHN8cGxheUFjdGlvbnxwbGF5QWN0aW9uTm93fHBsYXllcnxwbGF5ZXJSZXNwYXduVGltZXxwbGF5ZXJTaWRlfHBsYXllcnNOdW1iZXJ8cGxheUdlc3R1cmV8cGxheU1pc3Npb258cGxheU1vdmV8cGxheU1vdmVOb3d8cGxheU11c2ljfHBsYXlTY3JpcHRlZE1pc3Npb258cGxheVNvdW5kfHBsYXlTb3VuZDNEfHBvc2l0aW9ufHBvc2l0aW9uQ2FtZXJhVG9Xb3JsZHxwb3NTY3JlZW5Ub1dvcmxkfHBvc1dvcmxkVG9TY3JlZW58cHBFZmZlY3RBZGp1c3R8cHBFZmZlY3RDb21taXR8cHBFZmZlY3RDb21taXR0ZWR8cHBFZmZlY3RDcmVhdGV8cHBFZmZlY3REZXN0cm95fHBwRWZmZWN0RW5hYmxlfHBwRWZmZWN0RW5hYmxlZHxwcEVmZmVjdEZvcmNlSW5OVkd8cHJlY2lzaW9ufHByZWxvYWRDYW1lcmF8cHJlbG9hZE9iamVjdHxwcmVsb2FkU291bmR8cHJlbG9hZFRpdGxlT2JqfHByZWxvYWRUaXRsZVJzY3xwcmltYXJ5V2VhcG9ufHByaW1hcnlXZWFwb25JdGVtc3xwcmltYXJ5V2VhcG9uTWFnYXppbmV8cHJpb3JpdHl8cHJvY2Vzc0RpYXJ5TGlua3xwcm9jZXNzSW5pdENvbW1hbmRzfHByb2R1Y3RWZXJzaW9ufHByb2ZpbGVOYW1lfHByb2ZpbGVOYW1lc3BhY2V8cHJvZmlsZU5hbWVTdGVhbXxwcm9ncmVzc0xvYWRpbmdTY3JlZW58cHJvZ3Jlc3NQb3NpdGlvbnxwcm9ncmVzc1NldFBvc2l0aW9ufHB1YmxpY1ZhcmlhYmxlfHB1YmxpY1ZhcmlhYmxlQ2xpZW50fHB1YmxpY1ZhcmlhYmxlU2VydmVyfHB1c2hCYWNrfHB1c2hCYWNrVW5pcXVlfHB1dFdlYXBvblBvb2x8cXVlcnlJdGVtc1Bvb2x8cXVlcnlNYWdhemluZVBvb2x8cXVlcnlXZWFwb25Qb29sfHJhZHxyYWRpb0NoYW5uZWxBZGR8cmFkaW9DaGFubmVsQ3JlYXRlfHJhZGlvQ2hhbm5lbFJlbW92ZXxyYWRpb0NoYW5uZWxTZXRDYWxsU2lnbnxyYWRpb0NoYW5uZWxTZXRMYWJlbHxyYWRpb1ZvbHVtZXxyYWlufHJhaW5ib3d8cmFuZG9tfHJhbmt8cmFua0lkfHJhdGluZ3xyZWN0YW5ndWxhcnxyZWdpc3RlcmVkVGFza3N8cmVnaXN0ZXJUYXNrfHJlbG9hZHxyZWxvYWRFbmFibGVkfHJlbW90ZUNvbnRyb2x8cmVtb3RlRXhlY3xyZW1vdGVFeGVjQ2FsbHxyZW1vdGVFeGVjdXRlZE93bmVyfHJlbW92ZTNERU5Db25uZWN0aW9ufHJlbW92ZTNERU5FdmVudEhhbmRsZXJ8cmVtb3ZlM0RFTkxheWVyfHJlbW92ZUFjdGlvbnxyZW1vdmVBbGwzREVORXZlbnRIYW5kbGVyc3xyZW1vdmVBbGxBY3Rpb25zfHJlbW92ZUFsbEFzc2lnbmVkSXRlbXN8cmVtb3ZlQWxsQ29udGFpbmVyc3xyZW1vdmVBbGxDdXJhdG9yQWRkb25zfHJlbW92ZUFsbEN1cmF0b3JDYW1lcmFBcmVhc3xyZW1vdmVBbGxDdXJhdG9yRWRpdGluZ0FyZWFzfHJlbW92ZUFsbEV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsSGFuZGd1bkl0ZW1zfHJlbW92ZUFsbEl0ZW1zfHJlbW92ZUFsbEl0ZW1zV2l0aE1hZ2F6aW5lc3xyZW1vdmVBbGxNaXNzaW9uRXZlbnRIYW5kbGVyc3xyZW1vdmVBbGxNUEV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsTXVzaWNFdmVudEhhbmRsZXJzfHJlbW92ZUFsbE93bmVkTWluZXN8cmVtb3ZlQWxsUHJpbWFyeVdlYXBvbkl0ZW1zfHJlbW92ZUFsbFdlYXBvbnN8cmVtb3ZlQmFja3BhY2t8cmVtb3ZlQmFja3BhY2tHbG9iYWx8cmVtb3ZlQ3VyYXRvckFkZG9uc3xyZW1vdmVDdXJhdG9yQ2FtZXJhQXJlYXxyZW1vdmVDdXJhdG9yRWRpdGFibGVPYmplY3RzfHJlbW92ZUN1cmF0b3JFZGl0aW5nQXJlYXxyZW1vdmVEcmF3SWNvbnxyZW1vdmVEcmF3TGlua3N8cmVtb3ZlRXZlbnRIYW5kbGVyfHJlbW92ZUZyb21SZW1haW5zQ29sbGVjdG9yfHJlbW92ZUdvZ2dsZXN8cmVtb3ZlR3JvdXBJY29ufHJlbW92ZUhhbmRndW5JdGVtfHJlbW92ZUhlYWRnZWFyfHJlbW92ZUl0ZW18cmVtb3ZlSXRlbUZyb21CYWNrcGFja3xyZW1vdmVJdGVtRnJvbVVuaWZvcm18cmVtb3ZlSXRlbUZyb21WZXN0fHJlbW92ZUl0ZW1zfHJlbW92ZU1hZ2F6aW5lfHJlbW92ZU1hZ2F6aW5lR2xvYmFsfHJlbW92ZU1hZ2F6aW5lc3xyZW1vdmVNYWdhemluZXNUdXJyZXR8cmVtb3ZlTWFnYXppbmVUdXJyZXR8cmVtb3ZlTWVudUl0ZW18cmVtb3ZlTWlzc2lvbkV2ZW50SGFuZGxlcnxyZW1vdmVNUEV2ZW50SGFuZGxlcnxyZW1vdmVNdXNpY0V2ZW50SGFuZGxlcnxyZW1vdmVPd25lZE1pbmV8cmVtb3ZlUHJpbWFyeVdlYXBvbkl0ZW18cmVtb3ZlU2Vjb25kYXJ5V2VhcG9uSXRlbXxyZW1vdmVTaW1wbGVUYXNrfHJlbW92ZVN3aXRjaGFibGVVbml0fHJlbW92ZVRlYW1NZW1iZXJ8cmVtb3ZlVW5pZm9ybXxyZW1vdmVWZXN0fHJlbW92ZVdlYXBvbnxyZW1vdmVXZWFwb25BdHRhY2htZW50Q2FyZ298cmVtb3ZlV2VhcG9uQ2FyZ298cmVtb3ZlV2VhcG9uR2xvYmFsfHJlbW92ZVdlYXBvblR1cnJldHxyZXBvcnRSZW1vdGVUYXJnZXR8cmVxdWlyZWRWZXJzaW9ufHJlc2V0Q2FtU2hha2V8cmVzZXRTdWJncm91cERpcmVjdGlvbnxyZXNpc3RhbmNlfHJlc2l6ZXxyZXNvdXJjZXN8cmVzcGF3blZlaGljbGV8cmVzdGFydEVkaXRvckNhbWVyYXxyZXZlYWx8cmV2ZWFsTWluZXxyZXZlcnNlfHJldmVyc2VkTW91c2VZfHJvYWRBdHxyb2Fkc0Nvbm5lY3RlZFRvfHJvbGVEZXNjcmlwdGlvbnxyb3BlQXR0YWNoZWRPYmplY3RzfHJvcGVBdHRhY2hlZFRvfHJvcGVBdHRhY2hFbmFibGVkfHJvcGVBdHRhY2hUb3xyb3BlQ3JlYXRlfHJvcGVDdXR8cm9wZURlc3Ryb3l8cm9wZURldGFjaHxyb3BlRW5kUG9zaXRpb258cm9wZUxlbmd0aHxyb3Blc3xyb3BlVW53aW5kfHJvcGVVbndvdW5kfHJvdG9yc0ZvcmNlc1JURHxyb3RvcnNScG1SVER8cm91bmR8cnVuSW5pdFNjcmlwdHxzYWZlWm9uZUh8c2FmZVpvbmVXfHNhZmVab25lV0Fic3xzYWZlWm9uZVh8c2FmZVpvbmVYQWJzfHNhZmVab25lWXxzYXZlM0RFTkludmVudG9yeXxzYXZlR2FtZXxzYXZlSWRlbnRpdHl8c2F2ZUpveXN0aWNrc3xzYXZlT3ZlcmxheXxzYXZlUHJvZmlsZU5hbWVzcGFjZXxzYXZlU3RhdHVzfHNhdmVWYXJ8c2F2aW5nRW5hYmxlZHxzYXl8c2F5MkR8c2F5M0R8c2NvcmV8c2NvcmVTaWRlfHNjcmVlbnNob3R8c2NyZWVuVG9Xb3JsZHxzY3JpcHREb25lfHNjcmlwdE5hbWV8c2NyaXB0TnVsbHxzY3VkU3RhdGV8c2Vjb25kYXJ5V2VhcG9ufHNlY29uZGFyeVdlYXBvbkl0ZW1zfHNlY29uZGFyeVdlYXBvbk1hZ2F6aW5lfHNlbGVjdHxzZWxlY3RCZXN0UGxhY2VzfHNlbGVjdERpYXJ5U3ViamVjdHxzZWxlY3RlZEVkaXRvck9iamVjdHN8c2VsZWN0RWRpdG9yT2JqZWN0fHNlbGVjdGlvbk5hbWVzfHNlbGVjdGlvblBvc2l0aW9ufHNlbGVjdExlYWRlcnxzZWxlY3RNYXh8c2VsZWN0TWlufHNlbGVjdE5vUGxheWVyfHNlbGVjdFBsYXllcnxzZWxlY3RSYW5kb218c2VsZWN0UmFuZG9tV2VpZ2h0ZWR8c2VsZWN0V2VhcG9ufHNlbGVjdFdlYXBvblR1cnJldHxzZW5kQVVNZXNzYWdlfHNlbmRTaW1wbGVDb21tYW5kfHNlbmRUYXNrfHNlbmRUYXNrUmVzdWx0fHNlbmRVRFBNZXNzYWdlfHNlcnZlckNvbW1hbmR8c2VydmVyQ29tbWFuZEF2YWlsYWJsZXxzZXJ2ZXJDb21tYW5kRXhlY3V0YWJsZXxzZXJ2ZXJOYW1lfHNlcnZlclRpbWV8c2V0fHNldDNERU5BdHRyaWJ1dGV8c2V0M0RFTkF0dHJpYnV0ZXN8c2V0M0RFTkdyaWR8c2V0M0RFTkljb25zVmlzaWJsZXxzZXQzREVOTGF5ZXJ8c2V0M0RFTkxpbmVzVmlzaWJsZXxzZXQzREVOTG9naWNUeXBlfHNldDNERU5NaXNzaW9uQXR0cmlidXRlfHNldDNERU5NaXNzaW9uQXR0cmlidXRlc3xzZXQzREVOTW9kZWxzVmlzaWJsZXxzZXQzREVOT2JqZWN0VHlwZXxzZXQzREVOU2VsZWN0ZWR8c2V0QWNjVGltZXxzZXRBY3R1YWxDb2xsZWN0aXZlUlREfHNldEFpcnBsYW5lVGhyb3R0bGV8c2V0QWlycG9ydFNpZGV8c2V0QW1tb3xzZXRBbW1vQ2FyZ298c2V0QW1tb09uUHlsb258c2V0QW5pbVNwZWVkQ29lZnxzZXRBcGVydHVyZXxzZXRBcGVydHVyZU5ld3xzZXRBcm1vcnlQb2ludHN8c2V0QXR0cmlidXRlc3xzZXRBdXRvbm9tb3VzfHNldEJlaGF2aW91cnxzZXRCbGVlZGluZ1JlbWFpbmluZ3xzZXRCcmFrZXNSVER8c2V0Q2FtZXJhSW50ZXJlc3R8c2V0Q2FtU2hha2VEZWZQYXJhbXN8c2V0Q2FtU2hha2VQYXJhbXN8c2V0Q2FtVXNlVEl8c2V0Q2FwdGl2ZXxzZXRDZW50ZXJPZk1hc3N8c2V0Q29sbGlzaW9uTGlnaHR8c2V0Q29tYmF0TW9kZXxzZXRDb21wYXNzT3NjaWxsYXRpb258c2V0Q29udm95U2VwYXJhdGlvbnxzZXRDdXJhdG9yQ2FtZXJhQXJlYUNlaWxpbmd8c2V0Q3VyYXRvckNvZWZ8c2V0Q3VyYXRvckVkaXRpbmdBcmVhVHlwZXxzZXRDdXJhdG9yV2F5cG9pbnRDb3N0fHNldEN1cnJlbnRDaGFubmVsfHNldEN1cnJlbnRUYXNrfHNldEN1cnJlbnRXYXlwb2ludHxzZXRDdXN0b21BaW1Db2VmfHNldEN1c3RvbVdlaWdodFJURHxzZXREYW1hZ2V8c2V0RGFtbWFnZXxzZXREYXRlfHNldERlYnJpZWZpbmdUZXh0fHNldERlZmF1bHRDYW1lcmF8c2V0RGVzdGluYXRpb258c2V0RGV0YWlsTWFwQmxlbmRQYXJzfHNldERpcnxzZXREaXJlY3Rpb258c2V0RHJhd0ljb258c2V0RHJpdmVPblBhdGh8c2V0RHJvcEludGVydmFsfHNldER5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2V8c2V0RHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZUNvZWZ8c2V0RWRpdG9yTW9kZXxzZXRFZGl0b3JPYmplY3RTY29wZXxzZXRFZmZlY3RDb25kaXRpb258c2V0RW5naW5lUnBtUlREfHNldEZhY2V8c2V0RmFjZUFuaW1hdGlvbnxzZXRGYXRpZ3VlfHNldEZlYXR1cmVUeXBlfHNldEZsYWdBbmltYXRpb25QaGFzZXxzZXRGbGFnT3duZXJ8c2V0RmxhZ1NpZGV8c2V0RmxhZ1RleHR1cmV8c2V0Rm9nfHNldEZvcmNlR2VuZXJhdG9yUlREfHNldEZvcm1hdGlvbnxzZXRGb3JtYXRpb25UYXNrfHNldEZvcm1EaXJ8c2V0RnJpZW5kfHNldEZyb21FZGl0b3J8c2V0RlNNVmFyaWFibGV8c2V0RnVlbHxzZXRGdWVsQ2FyZ298c2V0R3JvdXBJY29ufHNldEdyb3VwSWNvblBhcmFtc3xzZXRHcm91cEljb25zU2VsZWN0YWJsZXxzZXRHcm91cEljb25zVmlzaWJsZXxzZXRHcm91cElkfHNldEdyb3VwSWRHbG9iYWx8c2V0R3JvdXBPd25lcnxzZXRHdXN0c3xzZXRIaWRlQmVoaW5kfHNldEhpdHxzZXRIaXRJbmRleHxzZXRIaXRQb2ludERhbWFnZXxzZXRIb3Jpem9uUGFyYWxsYXhDb2VmfHNldEhVRE1vdmVtZW50TGV2ZWxzfHNldElkZW50aXR5fHNldEltcG9ydGFuY2V8c2V0SW5mb1BhbmVsfHNldExlYWRlcnxzZXRMaWdodEFtYmllbnR8c2V0TGlnaHRBdHRlbnVhdGlvbnxzZXRMaWdodEJyaWdodG5lc3N8c2V0TGlnaHRDb2xvcnxzZXRMaWdodERheUxpZ2h0fHNldExpZ2h0RmxhcmVNYXhEaXN0YW5jZXxzZXRMaWdodEZsYXJlU2l6ZXxzZXRMaWdodEludGVuc2l0eXxzZXRMaWdodG5pbmdzfHNldExpZ2h0VXNlRmxhcmV8c2V0TG9jYWxXaW5kUGFyYW1zfHNldE1hZ2F6aW5lVHVycmV0QW1tb3xzZXRNYXJrZXJBbHBoYXxzZXRNYXJrZXJBbHBoYUxvY2FsfHNldE1hcmtlckJydXNofHNldE1hcmtlckJydXNoTG9jYWx8c2V0TWFya2VyQ29sb3J8c2V0TWFya2VyQ29sb3JMb2NhbHxzZXRNYXJrZXJEaXJ8c2V0TWFya2VyRGlyTG9jYWx8c2V0TWFya2VyUG9zfHNldE1hcmtlclBvc0xvY2FsfHNldE1hcmtlclNoYXBlfHNldE1hcmtlclNoYXBlTG9jYWx8c2V0TWFya2VyU2l6ZXxzZXRNYXJrZXJTaXplTG9jYWx8c2V0TWFya2VyVGV4dHxzZXRNYXJrZXJUZXh0TG9jYWx8c2V0TWFya2VyVHlwZXxzZXRNYXJrZXJUeXBlTG9jYWx8c2V0TWFzc3xzZXRNaW1pY3xzZXRNb3VzZVBvc2l0aW9ufHNldE11c2ljRWZmZWN0fHNldE11c2ljRXZlbnRIYW5kbGVyfHNldE5hbWV8c2V0TmFtZVNvdW5kfHNldE9iamVjdEFyZ3VtZW50c3xzZXRPYmplY3RNYXRlcmlhbHxzZXRPYmplY3RNYXRlcmlhbEdsb2JhbHxzZXRPYmplY3RQcm94eXxzZXRPYmplY3RUZXh0dXJlfHNldE9iamVjdFRleHR1cmVHbG9iYWx8c2V0T2JqZWN0Vmlld0Rpc3RhbmNlfHNldE92ZXJjYXN0fHNldE93bmVyfHNldE94eWdlblJlbWFpbmluZ3xzZXRQYXJ0aWNsZUNpcmNsZXxzZXRQYXJ0aWNsZUNsYXNzfHNldFBhcnRpY2xlRmlyZXxzZXRQYXJ0aWNsZVBhcmFtc3xzZXRQYXJ0aWNsZVJhbmRvbXxzZXRQaWxvdENhbWVyYURpcmVjdGlvbnxzZXRQaWxvdENhbWVyYVJvdGF0aW9ufHNldFBpbG90Q2FtZXJhVGFyZ2V0fHNldFBpbG90TGlnaHR8c2V0UGlQRWZmZWN0fHNldFBpdGNofHNldFBsYXRlTnVtYmVyfHNldFBsYXlhYmxlfHNldFBsYXllclJlc3Bhd25UaW1lfHNldFBvc3xzZXRQb3NBU0x8c2V0UG9zQVNMMnxzZXRQb3NBU0xXfHNldFBvc0FUTHxzZXRQb3NpdGlvbnxzZXRQb3NXb3JsZHxzZXRQeWxvbkxvYWRPdXR8c2V0UHlsb25zUHJpb3JpdHl8c2V0UmFkaW9Nc2d8c2V0UmFpbnxzZXRSYWluYm93fHNldFJhbmRvbUxpcHxzZXRSYW5rfHNldFJlY3Rhbmd1bGFyfHNldFJlcGFpckNhcmdvfHNldFJvdG9yQnJha2VSVER8c2V0U2hhZG93RGlzdGFuY2V8c2V0U2hvdFBhcmVudHN8c2V0U2lkZXxzZXRTaW1wbGVUYXNrQWx3YXlzVmlzaWJsZXxzZXRTaW1wbGVUYXNrQ3VzdG9tRGF0YXxzZXRTaW1wbGVUYXNrRGVzY3JpcHRpb258c2V0U2ltcGxlVGFza0Rlc3RpbmF0aW9ufHNldFNpbXBsZVRhc2tUYXJnZXR8c2V0U2ltcGxlVGFza1R5cGV8c2V0U2ltdWxXZWF0aGVyTGF5ZXJzfHNldFNpemV8c2V0U2tpbGx8c2V0U2xpbmdMb2FkfHNldFNvdW5kRWZmZWN0fHNldFNwZWFrZXJ8c2V0U3BlZWNofHNldFNwZWVkTW9kZXxzZXRTdGFtaW5hfHNldFN0YW1pbmFTY2hlbWV8c2V0U3RhdFZhbHVlfHNldFN1cHByZXNzaW9ufHNldFN5c3RlbU9mVW5pdHN8c2V0VGFyZ2V0QWdlfHNldFRhc2tNYXJrZXJPZmZzZXR8c2V0VGFza1Jlc3VsdHxzZXRUYXNrU3RhdGV8c2V0VGVycmFpbkdyaWR8c2V0VGV4dHxzZXRUaW1lTXVsdGlwbGllcnxzZXRUaXRsZUVmZmVjdHxzZXRUb25lTWFwcGluZ3xzZXRUb25lTWFwcGluZ1BhcmFtc3xzZXRUcmFmZmljRGVuc2l0eXxzZXRUcmFmZmljRGlzdGFuY2V8c2V0VHJhZmZpY0dhcHxzZXRUcmFmZmljU3BlZWR8c2V0VHJpZ2dlckFjdGl2YXRpb258c2V0VHJpZ2dlckFyZWF8c2V0VHJpZ2dlclN0YXRlbWVudHN8c2V0VHJpZ2dlclRleHR8c2V0VHJpZ2dlclRpbWVvdXR8c2V0VHJpZ2dlclR5cGV8c2V0VHlwZXxzZXRVbmNvbnNjaW91c3xzZXRVbml0QWJpbGl0eXxzZXRVbml0TG9hZG91dHxzZXRVbml0UG9zfHNldFVuaXRQb3NXZWFrfHNldFVuaXRSYW5rfHNldFVuaXRSZWNvaWxDb2VmZmljaWVudHxzZXRVbml0VHJhaXR8c2V0VW5sb2FkSW5Db21iYXR8c2V0VXNlckFjdGlvblRleHR8c2V0VXNlck1GRFRleHR8c2V0VXNlck1GRFZhbHVlfHNldFZhcmlhYmxlfHNldFZlY3RvckRpcnxzZXRWZWN0b3JEaXJBbmRVcHxzZXRWZWN0b3JVcHxzZXRWZWhpY2xlQW1tb3xzZXRWZWhpY2xlQW1tb0RlZnxzZXRWZWhpY2xlQXJtb3J8c2V0VmVoaWNsZUNhcmdvfHNldFZlaGljbGVJZHxzZXRWZWhpY2xlSW5pdHxzZXRWZWhpY2xlTG9ja3xzZXRWZWhpY2xlUG9zaXRpb258c2V0VmVoaWNsZVJhZGFyfHNldFZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0c3xzZXRWZWhpY2xlUmVwb3J0T3duUG9zaXRpb258c2V0VmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHN8c2V0VmVoaWNsZVRJUGFyc3xzZXRWZWhpY2xlVmFyTmFtZXxzZXRWZWxvY2l0eXxzZXRWZWxvY2l0eU1vZGVsU3BhY2V8c2V0VmVsb2NpdHlUcmFuc2Zvcm1hdGlvbnxzZXRWaWV3RGlzdGFuY2V8c2V0VmlzaWJsZUlmVHJlZUNvbGxhcHNlZHxzZXRXYW50ZWRScG1SVER8c2V0V2F2ZXN8c2V0V2F5cG9pbnRCZWhhdmlvdXJ8c2V0V2F5cG9pbnRDb21iYXRNb2RlfHNldFdheXBvaW50Q29tcGxldGlvblJhZGl1c3xzZXRXYXlwb2ludERlc2NyaXB0aW9ufHNldFdheXBvaW50Rm9yY2VCZWhhdmlvdXJ8c2V0V2F5cG9pbnRGb3JtYXRpb258c2V0V2F5cG9pbnRIb3VzZVBvc2l0aW9ufHNldFdheXBvaW50TG9pdGVyUmFkaXVzfHNldFdheXBvaW50TG9pdGVyVHlwZXxzZXRXYXlwb2ludE5hbWV8c2V0V2F5cG9pbnRQb3NpdGlvbnxzZXRXYXlwb2ludFNjcmlwdHxzZXRXYXlwb2ludFNwZWVkfHNldFdheXBvaW50U3RhdGVtZW50c3xzZXRXYXlwb2ludFRpbWVvdXR8c2V0V2F5cG9pbnRUeXBlfHNldFdheXBvaW50VmlzaWJsZXxzZXRXZWFwb25SZWxvYWRpbmdUaW1lfHNldFdpbmR8c2V0V2luZERpcnxzZXRXaW5kRm9yY2V8c2V0V2luZFN0cnxzZXRXaW5nRm9yY2VTY2FsZVJURHxzZXRXUFBvc3xzaG93M0RJY29uc3xzaG93Q2hhdHxzaG93Q2luZW1hQm9yZGVyfHNob3dDb21tYW5kaW5nTWVudXxzaG93Q29tcGFzc3xzaG93Q3VyYXRvckNvbXBhc3N8c2hvd0dQU3xzaG93SFVEfHNob3dMZWdlbmR8c2hvd01hcHxzaG93bkFydGlsbGVyeUNvbXB1dGVyfHNob3duQ2hhdHxzaG93bkNvbXBhc3N8c2hvd25DdXJhdG9yQ29tcGFzc3xzaG93TmV3RWRpdG9yT2JqZWN0fHNob3duR1BTfHNob3duSFVEfHNob3duTWFwfHNob3duUGFkfHNob3duUmFkaW98c2hvd25TY29yZXRhYmxlfHNob3duVUFWRmVlZHxzaG93bldhcnJhbnR8c2hvd25XYXRjaHxzaG93UGFkfHNob3dSYWRpb3xzaG93U2NvcmV0YWJsZXxzaG93U3VidGl0bGVzfHNob3dVQVZGZWVkfHNob3dXYXJyYW50fHNob3dXYXRjaHxzaG93V2F5cG9pbnR8c2hvd1dheXBvaW50c3xzaWRlfHNpZGVBbWJpZW50TGlmZXxzaWRlQ2hhdHxzaWRlRW1wdHl8c2lkZUVuZW15fHNpZGVGcmllbmRseXxzaWRlTG9naWN8c2lkZVJhZGlvfHNpZGVVbmtub3dufHNpbXBsZVRhc2tzfHNpbXVsYXRpb25FbmFibGVkfHNpbXVsQ2xvdWREZW5zaXR5fHNpbXVsQ2xvdWRPY2NsdXNpb258c2ltdWxJbkNsb3Vkc3xzaW11bFdlYXRoZXJTeW5jfHNpbnxzaXplfHNpemVPZnxza2lsbHxza2lsbEZpbmFsfHNraXBUaW1lfHNsZWVwfHNsaWRlclBvc2l0aW9ufHNsaWRlclJhbmdlfHNsaWRlclNldFBvc2l0aW9ufHNsaWRlclNldFJhbmdlfHNsaWRlclNldFNwZWVkfHNsaWRlclNwZWVkfHNsaW5nTG9hZEFzc2lzdGFudFNob3dufHNvbGRpZXJNYWdhemluZXN8c29tZUFtbW98c29ydHxzb3VuZFZvbHVtZXxzcGVha2VyfHNwZWVkfHNwZWVkTW9kZXxzcGxpdFN0cmluZ3xzcXJ0fHNxdWFkUGFyYW1zfHN0YW5jZXxzdGFydExvYWRpbmdTY3JlZW58c3RvcHxzdG9wRW5naW5lUlREfHN0b3BwZWR8c3RyfHN1bk9yTW9vbnxzdXBwb3J0SW5mb3xzdXBwcmVzc0ZvcnxzdXJmYWNlSXNXYXRlcnxzdXJmYWNlTm9ybWFsfHN1cmZhY2VUeXBlfHN3aW1JbkRlcHRofHN3aXRjaGFibGVVbml0c3xzd2l0Y2hBY3Rpb258c3dpdGNoQ2FtZXJhfHN3aXRjaEdlc3R1cmV8c3dpdGNoTGlnaHR8c3dpdGNoTW92ZXxzeW5jaHJvbml6ZWRPYmplY3RzfHN5bmNocm9uaXplZFRyaWdnZXJzfHN5bmNocm9uaXplZFdheXBvaW50c3xzeW5jaHJvbml6ZU9iamVjdHNBZGR8c3luY2hyb25pemVPYmplY3RzUmVtb3ZlfHN5bmNocm9uaXplVHJpZ2dlcnxzeW5jaHJvbml6ZVdheXBvaW50fHN5c3RlbUNoYXR8c3lzdGVtT2ZVbml0c3x0YW58dGFyZ2V0S25vd2xlZGdlfHRhcmdldHN8dGFyZ2V0c0FnZ3JlZ2F0ZXx0YXJnZXRzUXVlcnl8dGFza0Fsd2F5c1Zpc2libGV8dGFza0NoaWxkcmVufHRhc2tDb21wbGV0ZWR8dGFza0N1c3RvbURhdGF8dGFza0Rlc2NyaXB0aW9ufHRhc2tEZXN0aW5hdGlvbnx0YXNrSGludHx0YXNrTWFya2VyT2Zmc2V0fHRhc2tOdWxsfHRhc2tQYXJlbnR8dGFza1Jlc3VsdHx0YXNrU3RhdGV8dGFza1R5cGV8dGVhbU1lbWJlcnx0ZWFtTWVtYmVyTnVsbHx0ZWFtTmFtZXx0ZWFtc3x0ZWFtU3dpdGNofHRlYW1Td2l0Y2hFbmFibGVkfHRlYW1UeXBlfHRlcm1pbmF0ZXx0ZXJyYWluSW50ZXJzZWN0fHRlcnJhaW5JbnRlcnNlY3RBU0x8dGVycmFpbkludGVyc2VjdEF0QVNMfHRleHR8dGV4dExvZ3x0ZXh0TG9nRm9ybWF0fHRnfHRpbWV8dGltZU11bHRpcGxpZXJ8dGl0bGVDdXR8dGl0bGVGYWRlT3V0fHRpdGxlT2JqfHRpdGxlUnNjfHRpdGxlVGV4dHx0b0FycmF5fHRvRml4ZWR8dG9Mb3dlcnx0b1N0cmluZ3x0b1VwcGVyfHRyaWdnZXJBY3RpdmF0ZWR8dHJpZ2dlckFjdGl2YXRpb258dHJpZ2dlckFyZWF8dHJpZ2dlckF0dGFjaGVkVmVoaWNsZXx0cmlnZ2VyQXR0YWNoT2JqZWN0fHRyaWdnZXJBdHRhY2hWZWhpY2xlfHRyaWdnZXJEeW5hbWljU2ltdWxhdGlvbnx0cmlnZ2VyU3RhdGVtZW50c3x0cmlnZ2VyVGV4dHx0cmlnZ2VyVGltZW91dHx0cmlnZ2VyVGltZW91dEN1cnJlbnR8dHJpZ2dlclR5cGV8dHVycmV0TG9jYWx8dHVycmV0T3duZXJ8dHVycmV0VW5pdHx0dkFkZHx0dkNsZWFyfHR2Q29sbGFwc2V8dHZDb2xsYXBzZUFsbHx0dkNvdW50fHR2Q3VyU2VsfHR2RGF0YXx0dkRlbGV0ZXx0dkV4cGFuZHx0dkV4cGFuZEFsbHx0dlBpY3R1cmV8dHZQaWN0dXJlUmlnaHR8dHZTZXRDb2xvcnx0dlNldEN1clNlbHx0dlNldERhdGF8dHZTZXRQaWN0dXJlfHR2U2V0UGljdHVyZUNvbG9yfHR2U2V0UGljdHVyZUNvbG9yRGlzYWJsZWR8dHZTZXRQaWN0dXJlQ29sb3JTZWxlY3RlZHx0dlNldFBpY3R1cmVSaWdodHx0dlNldFBpY3R1cmVSaWdodENvbG9yfHR2U2V0UGljdHVyZVJpZ2h0Q29sb3JEaXNhYmxlZHx0dlNldFBpY3R1cmVSaWdodENvbG9yU2VsZWN0ZWR8dHZTZXRTZWxlY3RDb2xvcnx0dlNldFRleHR8dHZTZXRUb29sdGlwfHR2U2V0VmFsdWV8dHZTb3J0fHR2U29ydEJ5VmFsdWV8dHZUZXh0fHR2VG9vbHRpcHx0dlZhbHVlfHR5cGV8dHlwZU5hbWV8dHlwZU9mfFVBVkNvbnRyb2x8dWlOYW1lc3BhY2V8dWlTbGVlcHx1bmFzc2lnbkN1cmF0b3J8dW5hc3NpZ25JdGVtfHVuYXNzaWduVGVhbXx1bmFzc2lnblZlaGljbGV8dW5kZXJ3YXRlcnx1bmlmb3JtfHVuaWZvcm1Db250YWluZXJ8dW5pZm9ybUl0ZW1zfHVuaWZvcm1NYWdhemluZXN8dW5pdEFkZG9uc3x1bml0QWltUG9zaXRpb258dW5pdEFpbVBvc2l0aW9uVmlzdWFsfHVuaXRCYWNrcGFja3x1bml0SXNVQVZ8dW5pdFBvc3x1bml0UmVhZHl8dW5pdFJlY29pbENvZWZmaWNpZW50fHVuaXRzfHVuaXRzQmVsb3dIZWlnaHR8dW5saW5rSXRlbXx1bmxvY2tBY2hpZXZlbWVudHx1bnJlZ2lzdGVyVGFza3x1cGRhdGVEcmF3SWNvbnx1cGRhdGVNZW51SXRlbXx1cGRhdGVPYmplY3RUcmVlfHVzZUFJT3Blck1hcE9ic3RydWN0aW9uVGVzdHx1c2VBSVN0ZWVyaW5nQ29tcG9uZW50fHVzZUF1ZGlvVGltZUZvck1vdmVzfHVzZXJJbnB1dERpc2FibGVkfHZlY3RvckFkZHx2ZWN0b3JDb3N8dmVjdG9yQ3Jvc3NQcm9kdWN0fHZlY3RvckRpZmZ8dmVjdG9yRGlyfHZlY3RvckRpclZpc3VhbHx2ZWN0b3JEaXN0YW5jZXx2ZWN0b3JEaXN0YW5jZVNxcnx2ZWN0b3JEb3RQcm9kdWN0fHZlY3RvckZyb21Ub3x2ZWN0b3JNYWduaXR1ZGV8dmVjdG9yTWFnbml0dWRlU3FyfHZlY3Rvck1vZGVsVG9Xb3JsZHx2ZWN0b3JNb2RlbFRvV29ybGRWaXN1YWx8dmVjdG9yTXVsdGlwbHl8dmVjdG9yTm9ybWFsaXplZHx2ZWN0b3JVcHx2ZWN0b3JVcFZpc3VhbHx2ZWN0b3JXb3JsZFRvTW9kZWx8dmVjdG9yV29ybGRUb01vZGVsVmlzdWFsfHZlaGljbGV8dmVoaWNsZUNhcmdvRW5hYmxlZHx2ZWhpY2xlQ2hhdHx2ZWhpY2xlUmFkaW98dmVoaWNsZVJlY2VpdmVSZW1vdGVUYXJnZXRzfHZlaGljbGVSZXBvcnRPd25Qb3NpdGlvbnx2ZWhpY2xlUmVwb3J0UmVtb3RlVGFyZ2V0c3x2ZWhpY2xlc3x2ZWhpY2xlVmFyTmFtZXx2ZWxvY2l0eXx2ZWxvY2l0eU1vZGVsU3BhY2V8dmVyaWZ5U2lnbmF0dXJlfHZlc3R8dmVzdENvbnRhaW5lcnx2ZXN0SXRlbXN8dmVzdE1hZ2F6aW5lc3x2aWV3RGlzdGFuY2V8dmlzaWJsZUNvbXBhc3N8dmlzaWJsZUdQU3x2aXNpYmxlTWFwfHZpc2libGVQb3NpdGlvbnx2aXNpYmxlUG9zaXRpb25BU0x8dmlzaWJsZVNjb3JldGFibGV8dmlzaWJsZVdhdGNofHdhaXRVbnRpbHx3YXZlc3x3YXlwb2ludEF0dGFjaGVkT2JqZWN0fHdheXBvaW50QXR0YWNoZWRWZWhpY2xlfHdheXBvaW50QXR0YWNoT2JqZWN0fHdheXBvaW50QXR0YWNoVmVoaWNsZXx3YXlwb2ludEJlaGF2aW91cnx3YXlwb2ludENvbWJhdE1vZGV8d2F5cG9pbnRDb21wbGV0aW9uUmFkaXVzfHdheXBvaW50RGVzY3JpcHRpb258d2F5cG9pbnRGb3JjZUJlaGF2aW91cnx3YXlwb2ludEZvcm1hdGlvbnx3YXlwb2ludEhvdXNlUG9zaXRpb258d2F5cG9pbnRMb2l0ZXJSYWRpdXN8d2F5cG9pbnRMb2l0ZXJUeXBlfHdheXBvaW50TmFtZXx3YXlwb2ludFBvc2l0aW9ufHdheXBvaW50c3x3YXlwb2ludFNjcmlwdHx3YXlwb2ludHNFbmFibGVkVUFWfHdheXBvaW50U2hvd3x3YXlwb2ludFNwZWVkfHdheXBvaW50U3RhdGVtZW50c3x3YXlwb2ludFRpbWVvdXR8d2F5cG9pbnRUaW1lb3V0Q3VycmVudHx3YXlwb2ludFR5cGV8d2F5cG9pbnRWaXNpYmxlfHdlYXBvbkFjY2Vzc29yaWVzfHdlYXBvbkFjY2Vzc29yaWVzQ2FyZ298d2VhcG9uQ2FyZ298d2VhcG9uRGlyZWN0aW9ufHdlYXBvbkluZXJ0aWF8d2VhcG9uTG93ZXJlZHx3ZWFwb25zfHdlYXBvbnNJdGVtc3x3ZWFwb25zSXRlbXNDYXJnb3x3ZWFwb25TdGF0ZXx3ZWFwb25zVHVycmV0fHdlaWdodFJURHx3ZXN0fFdGU2lkZVRleHR8d2luZHx3aW5kRGlyfHdpbmRSVER8d2luZFN0cnx3aW5nc0ZvcmNlc1JURHx3b3JsZE5hbWV8d29ybGRTaXplfHdvcmxkVG9Nb2RlbHx3b3JsZFRvTW9kZWxWaXN1YWx8d29ybGRUb1NjcmVlbilcXGIvaSxcblx0J251bWJlcic6IC8oPzpcXCR8XFxiMHgpW1xcZGEtZl0rXFxifCg/OlxcQlxcLlxcZCt8XFxiXFxkKyg/OlxcLlxcZCspPykoPzplWystXT9cXGQrKT9cXGIvaSxcblx0J29wZXJhdG9yJzogLyMjfD4+fCYmfFxcfFxcfHxbIT08Pl09P3xbLSsqLyUjXl18XFxiKD86YW5kfG1vZHxub3R8b3IpXFxiL2ksXG5cdCdtYWdpYy12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86dGhpc3x0aGlzTGlzdHx0aGlzVHJpZ2dlcnxfZXhjZXB0aW9ufF9mbmNfc2NyaXB0TmFtZXxfZm5jX3NjcmlwdE5hbWVQYXJlbnR8X2ZvckVhY2hJbmRleHxfdGhpc3xfdGhpc0V2ZW50SGFuZGxlcnxfdGhpc0ZTTXxfdGhpc1NjcmlwdHxfeClcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdjb25zdGFudCc6IC9cXGJESUsoPzpfW2EtelxcZF0rKStcXGIvaVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NxZicsICdzdHJpbmcnLCB7XG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSNbYS16XSg/OlteXFxyXFxuXFxcXF18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8jW2Etel0rXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHQnY29tbWVudCc6IFByaXNtLmxhbmd1YWdlcy5zcWYuY29tbWVudFxuXHRcdH1cblx0fVxufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuc3FmWydjbGFzcy1uYW1lJ107XG5cblByaXNtLmxhbmd1YWdlcy5zcXVpcnJlbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IFtcblx0XHRQcmlzbS5sYW5ndWFnZXMuY2xpa2VbJ2NvbW1lbnQnXVswXSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pKD86XFwvXFwvfCMpLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCInQF0pKD86QFwiKD86W15cIl18XCJcIikqXCIoPyFcIil8XCIoPzpbXlxcXFxcXHJcXG5cIl18XFxcXC4pKlwiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGVudW18ZXh0ZW5kc3xpbnN0YW5jZW9mKVxccyspXFx3Kyg/OlxcLlxcdyspKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpfX0ZJTEVfX3xfX0xJTkVfX3xiYXNlfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y2xvbmV8Y29uc3R8Y29uc3RydWN0b3J8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZWxzZXxlbnVtfGV4dGVuZHN8Zm9yfGZvcmVhY2h8ZnVuY3Rpb258aWZ8aW58aW5zdGFuY2VvZnxsb2NhbHxudWxsfHJlc3VtZXxyZXR1cm58c3RhdGljfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8d2hpbGV8eWllbGQpXFxiLyxcblxuXHQnbnVtYmVyJzogL1xcYig/OjB4WzAtOWEtZkEtRl0rfFxcZCsoPzpcXC4oPzpcXGQrfFtlRV1bKy1dP1xcZCspKT8pXFxiLyxcblx0J29wZXJhdG9yJzogL1xcK1xcK3wtLXw8PT58PFstPF18Pj4+P3wmJj98XFx8XFx8P3xbLSsqLyUhPTw+XT0/fFt+Xl18Ojo/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdLDsuXS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzcXVpcnJlbCcsICdzdHJpbmcnLCB7XG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxcIiddKScoPzpbXlxcXFwnXXxcXFxcKD86W3h1VV1bMC05YS1mQS1GXXswLDh9fFtcXHNcXFNdKSknLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc3F1aXJyZWwnLCAnb3BlcmF0b3InLCB7XG5cdCdhdHRyaWJ1dGUtcHVuY3R1YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLzxcXC98XFwvPi8sXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cdCdsYW1iZGEnOiB7XG5cdFx0cGF0dGVybjogL0AoPz1cXCgpLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIGh0dHBzOi8vbWMtc3Rhbi5vcmcvZG9jcy8yXzI4L3JlZmVyZW5jZS1tYW51YWwvYm5mLWdyYW1tYXJzLmh0bWxcblxuXHR2YXIgaGlnaGVyT3JkZXJGdW5jdGlvbnMgPSAvXFxiKD86YWxnZWJyYV9zb2x2ZXJ8YWxnZWJyYV9zb2x2ZXJfbmV3dG9ufGludGVncmF0ZV8xZHxpbnRlZ3JhdGVfb2RlfGludGVncmF0ZV9vZGVfYmRmfGludGVncmF0ZV9vZGVfcms0NXxtYXBfcmVjdHxvZGVfKD86YWRhbXN8YmRmfGNrcmt8cms0NSkoPzpfdG9sKT98b2RlX2Fkam9pbnRfdG9sX2N0bHxyZWR1Y2Vfc3VtfHJlZHVjZV9zdW1fc3RhdGljKVxcYi87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnN0YW4gPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcL3wjKD8haW5jbHVkZSkuKi8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdC8vIFN0cmluZyBsaXRlcmFscyBjYW4gY29udGFpbiBzcGFjZXMgYW5kIGFueSBwcmludGFibGUgQVNDSUkgY2hhcmFjdGVycyBleGNlcHQgZm9yIFwiIGFuZCBcXFxuXHRcdFx0Ly8gaHR0cHM6Ly9tYy1zdGFuLm9yZy9kb2NzLzJfMjQvcmVmZXJlbmNlLW1hbnVhbC9wcmludC1zdGF0ZW1lbnRzLXNlY3Rpb24uaHRtbCNzdHJpbmctbGl0ZXJhbHNcblx0XHRcdHBhdHRlcm46IC9cIltcXHgyMFxceDIxXFx4MjMtXFx4NUJcXHg1RC1cXHg3RV0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikjaW5jbHVkZVxcYi4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uLWFyZyc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0JygnICtcblx0XHRcdFx0aGlnaGVyT3JkZXJGdW5jdGlvbnMuc291cmNlICtcblx0XHRcdFx0L1xccypcXChcXHMqLy5zb3VyY2UgK1xuXHRcdFx0XHQnKScgK1xuXHRcdFx0XHQvW2EtekEtWl1cXHcqLy5zb3VyY2Vcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdjb25zdHJhaW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzppbnR8bWF0cml4fHJlYWx8cm93X3ZlY3Rvcnx2ZWN0b3IpXFxzKik8W148Pl0qPi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPVxccyopXFxTKD86XFxTfFxccysoPyFcXHMpKSo/KD89XFxzKig/Oj4kfCxcXHMqXFx3K1xccyo9KSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHJvcGVydHknOiAvXFxiW2Etel1cXHcqKD89XFxzKj0pL2ksXG5cdFx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148fD4kfCwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYmRhdGEoPz1cXHMqXFx7KXxcXGIoPzpmdW5jdGlvbnN8Z2VuZXJhdGVkfG1vZGVsfHBhcmFtZXRlcnN8cXVhbnRpdGllc3x0cmFuc2Zvcm1lZClcXGIvLFxuXHRcdFx0XHRhbGlhczogJ3Byb2dyYW0tYmxvY2snXG5cdFx0XHR9LFxuXHRcdFx0L1xcYig/OmFycmF5fGJyZWFrfGNob2xlc2t5X2ZhY3Rvcl9jb3JyfGNob2xlc2t5X2ZhY3Rvcl9jb3Z8Y29tcGxleHxjb250aW51ZXxjb3JyX21hdHJpeHxjb3ZfbWF0cml4fGRhdGF8ZWxzZXxmb3J8aWZ8aW58aW5jcmVtZW50X2xvZ19wcm9ifGludHxtYXRyaXh8b3JkZXJlZHxwb3NpdGl2ZV9vcmRlcmVkfHByaW50fHJlYWx8cmVqZWN0fHJldHVybnxyb3dfdmVjdG9yfHNpbXBsZXh8dGFyZ2V0fHVuaXRfdmVjdG9yfHZlY3Rvcnx2b2lkfHdoaWxlKVxcYi8sXG5cdFx0XHQvLyB0aGVzZSBhcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGtub3duIHRvIHRha2UgYW5vdGhlciBmdW5jdGlvbiBhcyB0aGVpciBmaXJzdCBhcmd1bWVudC5cblx0XHRcdGhpZ2hlck9yZGVyRnVuY3Rpb25zXG5cdFx0XSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel1cXHcqKD89XFxzKlxcKCkvaSxcblx0XHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpfXFxkKykqKD86XFwuKD86XFxkKyg/Ol9cXGQrKSopPyk/fFxcQlxcLlxcZCsoPzpfXFxkKykqKSg/OkVbKy1dP1xcZCsoPzpfXFxkKykqKT9pPyg/IVxcdykvaSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0XHQnb3BlcmF0b3InOiAvPC18XFwuWyovXT0/fFxcfFxcfD98JiZ8WyE9PD4rXFwtKi9dPT98WydeJX4/Ol0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fSw7XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc3Rhbi5jb25zdHJhaW50Lmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zdGFuO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3LnN0YXRhLmNvbS9tYW51YWxzL3UucGRmXG4vLyBodHRwczovL3d3dy5zdGF0YS5jb20vbWFudWFscy9wLnBkZlxuXG5QcmlzbS5sYW5ndWFnZXMuc3RhdGEgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFwqLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nLWxpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8W1x1MjAxOGAnXVwiLio/XCJbXHUyMDE5YCddLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxce1tee31dKlxcfXxbXHUyMDE4YCddXFx3W15cdTIwMTlgJ1xcclxcbl0qW1x1MjAxOWAnXS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXG5cdCdtYXRhJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSptYXRhWyBcXHRdKjopW1xcc1xcU10rPyg/PV5lbmRcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS1tYXRhJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXRhXG5cdH0sXG5cdCdqYXZhJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSpqYXZhWyBcXHRdKjopW1xcc1xcU10rPyg/PV5lbmRcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhXG5cdH0sXG5cdCdweXRob24nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKnB5dGhvblsgXFx0XSo6KVtcXHNcXFNdKz8oPz1eZW5kXFxiKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcHl0aG9uJyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5weXRob25cblx0fSxcblxuXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSooPzpcXC5bIFxcdF0rKT8oPzooPzpiYXllc3xib290c3RyYXB8Ynl8Ynlzb3J0fGNhcHR1cmV8Y29sbGVjdHxmbW18ZnB8ZnJhbWV8amFja2tuaWZlfG1mcHxtaXxuZXN0cmVnfG5vaXNpbHl8cGVybXV0ZXxxdWlldGx5fHJvbGxpbmd8c2ltdWxhdGV8c3RhdHNieXxzdGVwd2lzZXxzdnl8dmVyc2lvbnx4aSlcXGJbXjpcXHJcXG5dKjpbIFxcdF0qfCg/OmNhcHR1cmV8bm9pc2lseXxxdWlldGx5fHZlcnNpb24pWyBcXHRdKyk/KVthLXpBLVpdXFx3Ki9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdyt8W1x1MjAxOGAnXVxcd1teXHUyMDE5YCdcXHJcXG5dKltcdTIwMTlgJ10vLFxuXHQna2V5d29yZCc6IC9cXGIoPzpiYXllc3xib290c3RyYXB8Ynl8Ynlzb3J0fGNhcHR1cmV8Y2xlYXJ8Y29sbGVjdHxmbW18ZnB8ZnJhbWV8aWZ8aW58amFja2tuaWZlfG1pWyBcXHRdK2VzdGltYXRlfG1mcHxuZXN0cmVnfG5vaXNpbHl8b2Z8cGVybXV0ZXxxdWlldGx5fHJvbGxpbmd8c2ltdWxhdGV8c29ydHxzdGF0c2J5fHN0ZXB3aXNlfHN2eXx2YXJsaXN0fHZlcnNpb258eGkpXFxiLyxcblxuXG5cdCdib29sZWFuJzogL1xcYig/Om9mZnxvbilcXGIvLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGJ8XFxCXFwuXFxkKy8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFwoKS9pLFxuXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18IyM/fFs8PiE9fl09P3xbK1xcLSpeJnwvXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0sOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc3RhdGFbJ3N0cmluZy1saXRlcmFsJ10uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnN0YXRhO1xuXG5QcmlzbS5sYW5ndWFnZXMuaWVjc3QgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8XFwoXFwqW1xcc1xcU10qPyg/OlxcKlxcKXwkKXxcXHtbXFxzXFxTXSo/KD86XFx9fCQpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0L1xcYig/OkVORF8pPyg/OlBST0dSQU18Q09ORklHVVJBVElPTnxJTlRFUkZBQ0V8RlVOQ1RJT05fQkxPQ0t8RlVOQ1RJT058QUNUSU9OfFRSQU5TSVRJT058VFlQRXxTVFJVQ1R8KD86SU5JVElBTF8pP1NURVB8TkFNRVNQQUNFfExJQlJBUll8Q0hBTk5FTHxGT0xERVJ8UkVTT1VSQ0V8VkFSXyg/OkFDQ0VTU3xDT05GSUd8RVhURVJOQUx8R0xPQkFMfElOUFVUfElOX09VVHxPVVRQVVR8VEVNUCl8VkFSfE1FVEhPRHxQUk9QRVJUWSlcXGIvaSxcblx0XHQvXFxiKD86QVR8Qll8KD86RU5EXyk/KD86Q0FTRXxGT1J8SUZ8UkVQRUFUfFdISUxFKXxDT05TVEFOVHxDT05USU5VRXxET3xFTFNFfEVMU0lGfEVYSVR8RVhURU5EU3xGUk9NfEdFVHxHT1RPfElNUExFTUVOVFN8Sk1QfE5PTl9SRVRBSU58T0Z8UFJJVkFURXxQUk9URUNURUR8UFVCTElDfFJFVEFJTnxSRVRVUk58U0VUfFRBU0t8VEhFTnxUT3xVTlRJTHxVU0lOR3xXSVRIfF9fQ0FUQ0h8X19FTkRUUll8X19GSU5BTExZfF9fVFJZKVxcYi9cblx0XSxcblx0J2NsYXNzLW5hbWUnOiAvXFxiKD86QU5ZfEFSUkFZfEJPT0x8QllURXxVPyg/OkR8THxTKT9JTlR8KD86RHxMKT9XT1JEfERBVEUoPzpfQU5EX1RJTUUpP3xEVHxMP1JFQUx8UE9JTlRFUnxTVFJJTkd8VElNRSg/Ol9PRl9EQVkpP3xUT0QpXFxiLyxcblx0J2FkZHJlc3MnOiB7XG5cdFx0cGF0dGVybjogLyVbSVFNXVtYQldETF1bXFxkLl0qfCVbSVFdW1xcZC5dKi8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86MTYjW1xcZGEtZl0rfDIjWzAxX10rfDB4W1xcZGEtZl0rKVxcYnxcXGIoPzpEfERUfFR8VE9EKSNbXFxkX3NobWQ6XSp8XFxiW0EtWl0qI1tcXGQuLF9dKnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/L2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfE5VTEx8VFJVRSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvUz9SPzo/PT4/fCYmP3xcXCpcXCo/fDxbPT5dP3w+PT98Wy06Xi8rI118XFxiKD86QU5EfEVRfEVYUFR8R0V8R1R8TEV8TFR8TU9EfE5FfE5PVHxPUnxYT1IpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXS4sO10vLFxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgdW5pdCA9IHtcblx0XHRwYXR0ZXJuOiAvKFxcYlxcZCspKD86JXxbYS16XSspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cdC8vIDEyMyAtMTIzIC4xMjMgLS4xMjMgMTIuMyAtMTIuM1xuXHR2YXIgbnVtYmVyID0ge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy4tXSktPyg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fTtcblxuXHR2YXIgaW5zaWRlID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJ1cmxcXCgoW1wiJ10/KS4qP1xcMVxcKS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhcInwnKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbic6IG51bGwsIC8vIFNlZSBiZWxvd1xuXHRcdCdmdW5jJzogbnVsbCwgLy8gU2VlIGJlbG93XG5cdFx0J2ltcG9ydGFudCc6IC9cXEIhKD86aW1wb3J0YW50fG9wdGlvbmFsKVxcYi9pLFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccyspKD86KD86ZWxzZXxmb3J8aWZ8cmV0dXJufHVubGVzcykoPz1cXHN8JCl8QFtcXHctXSspLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdoZXhjb2RlJzogLyNbXFxkYS1mXXszLDZ9L2ksXG5cdFx0J2NvbG9yJzogW1xuXHRcdFx0L1xcYig/OkFsaWNlQmx1ZXxBbnRpcXVlV2hpdGV8QXF1YXxBcXVhbWFyaW5lfEF6dXJlfEJlaWdlfEJpc3F1ZXxCbGFja3xCbGFuY2hlZEFsbW9uZHxCbHVlfEJsdWVWaW9sZXR8QnJvd258QnVybHlXb29kfENhZGV0Qmx1ZXxDaGFydHJldXNlfENob2NvbGF0ZXxDb3JhbHxDb3JuZmxvd2VyQmx1ZXxDb3Juc2lsa3xDcmltc29ufEN5YW58RGFya0JsdWV8RGFya0N5YW58RGFya0dvbGRlblJvZHxEYXJrR3JbYWVdeXxEYXJrR3JlZW58RGFya0toYWtpfERhcmtNYWdlbnRhfERhcmtPbGl2ZUdyZWVufERhcmtPcmFuZ2V8RGFya09yY2hpZHxEYXJrUmVkfERhcmtTYWxtb258RGFya1NlYUdyZWVufERhcmtTbGF0ZUJsdWV8RGFya1NsYXRlR3JbYWVdeXxEYXJrVHVycXVvaXNlfERhcmtWaW9sZXR8RGVlcFBpbmt8RGVlcFNreUJsdWV8RGltR3JbYWVdeXxEb2RnZXJCbHVlfEZpcmVCcmlja3xGbG9yYWxXaGl0ZXxGb3Jlc3RHcmVlbnxGdWNoc2lhfEdhaW5zYm9yb3xHaG9zdFdoaXRlfEdvbGR8R29sZGVuUm9kfEdyW2FlXXl8R3JlZW58R3JlZW5ZZWxsb3d8SG9uZXlEZXd8SG90UGlua3xJbmRpYW5SZWR8SW5kaWdvfEl2b3J5fEtoYWtpfExhdmVuZGVyfExhdmVuZGVyQmx1c2h8TGF3bkdyZWVufExlbW9uQ2hpZmZvbnxMaWdodEJsdWV8TGlnaHRDb3JhbHxMaWdodEN5YW58TGlnaHRHb2xkZW5Sb2RZZWxsb3d8TGlnaHRHclthZV15fExpZ2h0R3JlZW58TGlnaHRQaW5rfExpZ2h0U2FsbW9ufExpZ2h0U2VhR3JlZW58TGlnaHRTa3lCbHVlfExpZ2h0U2xhdGVHclthZV15fExpZ2h0U3RlZWxCbHVlfExpZ2h0WWVsbG93fExpbWV8TGltZUdyZWVufExpbmVufE1hZ2VudGF8TWFyb29ufE1lZGl1bUFxdWFNYXJpbmV8TWVkaXVtQmx1ZXxNZWRpdW1PcmNoaWR8TWVkaXVtUHVycGxlfE1lZGl1bVNlYUdyZWVufE1lZGl1bVNsYXRlQmx1ZXxNZWRpdW1TcHJpbmdHcmVlbnxNZWRpdW1UdXJxdW9pc2V8TWVkaXVtVmlvbGV0UmVkfE1pZG5pZ2h0Qmx1ZXxNaW50Q3JlYW18TWlzdHlSb3NlfE1vY2Nhc2lufE5hdmFqb1doaXRlfE5hdnl8T2xkTGFjZXxPbGl2ZXxPbGl2ZURyYWJ8T3JhbmdlfE9yYW5nZVJlZHxPcmNoaWR8UGFsZUdvbGRlblJvZHxQYWxlR3JlZW58UGFsZVR1cnF1b2lzZXxQYWxlVmlvbGV0UmVkfFBhcGF5YVdoaXB8UGVhY2hQdWZmfFBlcnV8UGlua3xQbHVtfFBvd2RlckJsdWV8UHVycGxlfFJlZHxSb3N5QnJvd258Um95YWxCbHVlfFNhZGRsZUJyb3dufFNhbG1vbnxTYW5keUJyb3dufFNlYUdyZWVufFNlYVNoZWxsfFNpZW5uYXxTaWx2ZXJ8U2t5Qmx1ZXxTbGF0ZUJsdWV8U2xhdGVHclthZV15fFNub3d8U3ByaW5nR3JlZW58U3RlZWxCbHVlfFRhbnxUZWFsfFRoaXN0bGV8VG9tYXRvfFRyYW5zcGFyZW50fFR1cnF1b2lzZXxWaW9sZXR8V2hlYXR8V2hpdGV8V2hpdGVTbW9rZXxZZWxsb3d8WWVsbG93R3JlZW4pXFxiL2ksXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpoc2x8cmdiKVxcKFxccypcXGR7MSwzfVxccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccypcXGR7MSwzfSU/XFxzKlxcKVxcQnxcXGIoPzpoc2x8cmdiKWFcXChcXHMqXFxkezEsM31cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKig/OjB8MD9cXC5cXGQrfDEpXFxzKlxcKVxcQi9pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndW5pdCc6IHVuaXQsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvW1xcdy1dKyg/PVxcKCkvLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2VudGl0eSc6IC9cXFxcW1xcZGEtZl17MSw4fS9pLFxuXHRcdCd1bml0JzogdW5pdCxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogW1xuXHRcdFx0Ly8gV2Ugd2FudCBub24td29yZCBjaGFycyBhcm91bmQgXCItXCIgYmVjYXVzZSBpdCBpc1xuXHRcdFx0Ly8gYWNjZXB0ZWQgaW4gcHJvcGVydHkgbmFtZXMuXG5cdFx0XHQvfnxbKyFcXC8lPD4/PV09P3xbLTpdPXxcXCpbKj1dP3xcXC57MiwzfXwmJnxcXHxcXHx8XFxCLVxcQnxcXGIoPzphbmR8aW58aXMoPzogYXwgZGVmaW5lZHwgbm90fG50KT98bm90fG9yKVxcYi9cblx0XHRdLFxuXHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdOzosXS9cblx0fTtcblxuXHRpbnNpZGVbJ2ludGVycG9sYXRpb24nXSA9IHtcblx0XHRwYXR0ZXJuOiAvXFx7W15cXHJcXG59Ol0rXFx9Lyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFx7fFxcfSQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdH1cblx0fTtcblx0aW5zaWRlWydmdW5jJ10gPSB7XG5cdFx0cGF0dGVybjogL1tcXHctXStcXChbXildKlxcKS4qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmdW5jdGlvbic6IC9eW14oXSsvLFxuXHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zdHlsdXMgPSB7XG5cdFx0J2F0cnVsZS1kZWNsYXJhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopQC4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHJ1bGUnOiAvXkBbXFx3LV0rLyxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndmFyaWFibGUtZGVjbGFyYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVtcXHckLV0rXFxzKi4/PVsgXFx0XSooPzpcXHtbXnt9XSpcXH18XFxTLip8JCkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhcmlhYmxlJzogL15cXFMrLyxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdzdGF0ZW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OmVsc2V8Zm9yfGlmfHJldHVybnx1bmxlc3MpWyBcXHRdLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiAvXlxcUysvLFxuXHRcdFx0XHRyZXN0OiBpbnNpZGVcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQSBwcm9wZXJ0eS92YWx1ZSBwYWlyIGNhbm5vdCBlbmQgd2l0aCBhIGNvbW1hIG9yIGEgYnJhY2Vcblx0XHQvLyBJdCBjYW5ub3QgaGF2ZSBpbmRlbnRlZCBjb250ZW50IHVubGVzcyBpdCBlbmRlZCB3aXRoIGEgc2VtaWNvbG9uXG5cdFx0J3Byb3BlcnR5LWRlY2xhcmF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxceykoWyBcXHRdKikpKD86W1xcdy1dfFxce1tefVxcclxcbl0rXFx9KSsoPzpcXHMqOlxccyp8WyBcXHRdKykoPyFcXHMpW157XFxyXFxuXSooPzo7fFtee1xcclxcbixdJCg/ISg/Olxccj9cXG58XFxyKSg/Olxce3xcXDJbIFxcdF0pKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eW15cXHM6XSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnNpZGUuaW50ZXJwb2xhdGlvblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblxuXG5cdFx0Ly8gQSBzZWxlY3RvciBjYW4gY29udGFpbiBwYXJlbnRoZXNlcyBvbmx5IGFzIHBhcnQgb2YgYSBwc2V1ZG8tZWxlbWVudFxuXHRcdC8vIEl0IGNhbiBzcGFuIG11bHRpcGxlIGxpbmVzLlxuXHRcdC8vIEl0IG11c3QgZW5kIHdpdGggYSBjb21tYSBvciBhbiBhY2NvbGFkZSBvciBoYXZlIGluZGVudGVkIGNvbnRlbnQuXG5cdFx0J3NlbGVjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzooPz1cXFMpKD86W157fVxcclxcbjooKV18Ojo/W1xcdy1dKyg/OlxcKFteKVxcclxcbl0qXFwpfCg/IVtcXHctXSkpfFxce1tefVxcclxcbl0rXFx9KSspKD86KD86XFxyP1xcbnxcXHIpKD86XFwxKD86KD89XFxTKSg/Oltee31cXHJcXG46KCldfDo6P1tcXHctXSsoPzpcXChbXilcXHJcXG5dKlxcKXwoPyFbXFx3LV0pKXxcXHtbXn1cXHJcXG5dK1xcfSkrKSkpKig/OiwkfFxce3woPz0oPzpcXHI/XFxufFxccikoPzpcXHt8XFwxWyBcXHRdKSkpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW5zaWRlLmludGVycG9sYXRpb24sXG5cdFx0XHRcdCdjb21tZW50JzogaW5zaWRlLmNvbW1lbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9be30sXS9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J2Z1bmMnOiBpbnNpZGUuZnVuYyxcblx0XHQnc3RyaW5nJzogaW5zaWRlLnN0cmluZyxcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLiopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdpbnRlcnBvbGF0aW9uJzogaW5zaWRlLmludGVycG9sYXRpb24sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdOzouXS9cblx0fTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnN1cGVyY29sbGlkZXIgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC8pKlxcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpbXlwiXFxcXF18XFxcXFtcXHNcXFNdKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/OlteXFxcXFxcclxcbl18XFxcXC4pLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N5bWJvbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonfFxcXFxcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/Ol98YXJnfGNsYXNzdmFyfGNvbnN0fG5pbHx2YXJ8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyo6KS8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnbnVtYmVyJzogL1xcYig/OmluZnxwaXwweFswLTlhLWZBLUZdK3xcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KD86cGkpP3xcXGQrclswLTlhLXpBLVpdKyg/OlxcLlswLTlhLXpBLVpdKyk/fFxcZCtbc2JdezEsNH1cXGQqKVxcYi8sXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3KlxcYi8sXG5cblx0J29wZXJhdG9yJzogL1xcLnsyLDN9fCMoPyFbW3tdKXwmJnxbIT1dPT0/fFxcKz4+fFxcK3sxLDN9fC1bLT5dfD0+fD4+fFxcP1xcP3xAXFx8P0B8XFx8KD86QHxbIT1dPSk/XFx8fCFcXD98PFshPT5dfFxcKnsxLDJ9fDx7MiwzfVxcKj98Wy0hJSYvPD4/QHw9YF0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KClbXFxdLjosO118I1tbe10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc2NsYW5nID0gUHJpc20ubGFuZ3VhZ2VzLnN1cGVyY29sbGlkZXI7XG5cblByaXNtLmxhbmd1YWdlcy5zd2lmdCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0Ly8gTmVzdGVkIGNvbW1lbnRzIGFyZSBzdXBwb3J0ZWQgdXAgdG8gMiBsZXZlbHNcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pKD86XFwvXFwvLip8XFwvXFwqKD86W14vKl18XFwvKD8hXFwqKXxcXCooPyFcXC8pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nLWxpdGVyYWwnOiBbXG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL0xhbmd1YWdlR3VpZGUvU3RyaW5nc0FuZENoYXJhY3RlcnMuaHRtbFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhefFteXCIjXSkvLnNvdXJjZVxuXHRcdFx0XHQrICcoPzonXG5cdFx0XHRcdC8vIHNpbmdsZS1saW5lIHN0cmluZ1xuXHRcdFx0XHQrIC9cIig/OlxcXFwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14oXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8uc291cmNlXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdC8vIG11bHRpLWxpbmUgc3RyaW5nXG5cdFx0XHRcdCsgL1wiXCJcIig/OlxcXFwoPzpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxbXihdKXxbXlxcXFxcIl18XCIoPyFcIlwiKSkqXCJcIlwiLy5zb3VyY2Vcblx0XHRcdFx0KyAnKSdcblx0XHRcdFx0KyAvKD8hW1wiI10pLy5zb3VyY2Vcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxcXFxcKCkoPzpbXigpXXxcXChbXigpXSpcXCkpKig/PVxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcKXxcXFxcXFwoJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwoPz1bXFxyXFxuXSkvLFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhefFteXCIjXSkoIyspLy5zb3VyY2Vcblx0XHRcdFx0KyAnKD86J1xuXHRcdFx0XHQvLyBzaW5nbGUtbGluZSBzdHJpbmdcblx0XHRcdFx0KyAvXCIoPzpcXFxcKD86IytcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKXxcXHJcXG58W14jXSl8W15cXFxcXFxyXFxuXSkqP1wiLy5zb3VyY2Vcblx0XHRcdFx0KyAnfCdcblx0XHRcdFx0Ly8gbXVsdGktbGluZSBzdHJpbmdcblx0XHRcdFx0KyAvXCJcIlwiKD86XFxcXCg/OiMrXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8W14jXSl8W15cXFxcXSkqP1wiXCJcIi8uc291cmNlXG5cdFx0XHRcdCsgJyknXG5cdFx0XHRcdCsgJ1xcXFwyJ1xuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXFxcIytcXCgpKD86W14oKV18XFwoW14oKV0qXFwpKSooPz1cXCkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXCl8XFxcXCMrXFwoJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XSxcblxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdC8vIGRpcmVjdGl2ZXMgd2l0aCBjb25kaXRpb25zXG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0LyMvLnNvdXJjZVxuXHRcdFx0KyAnKD86J1xuXHRcdFx0KyAoXG5cdFx0XHRcdC8oPzplbHNlaWZ8aWYpXFxiLy5zb3VyY2Vcblx0XHRcdFx0KyAnKD86WyBcXHRdKidcblx0XHRcdFx0Ly8gVGhpcyByZWdleCBpcyBhIGxpdHRsZSBjb21wbGV4LiBJdCdzIGVxdWl2YWxlbnQgdG8gdGhpczpcblx0XHRcdFx0Ly8gICAoPzohWyBcXHRdKik/KD86XFxiXFx3K1xcYig/OlsgXFx0XSo8cm91bmQ+KT98PHJvdW5kPikoPzpbIFxcdF0qKD86JiZ8XFx8XFx8KSk/XG5cdFx0XHRcdC8vIHdoZXJlIDxyb3VuZD4gaXMgYSBnZW5lcmFsIHBhcmVudGhlc2VzIGV4cHJlc3Npb24uXG5cdFx0XHRcdCsgLyg/OiFbIFxcdF0qKT8oPzpcXGJcXHcrXFxiKD86WyBcXHRdKlxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKT98XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkpKD86WyBcXHRdKig/OiYmfFxcfFxcfCkpPy8uc291cmNlXG5cdFx0XHRcdCsgJykrJ1xuXHRcdFx0KVxuXHRcdFx0KyAnfCdcblx0XHRcdCsgLyg/OmVsc2V8ZW5kaWYpXFxiLy5zb3VyY2Vcblx0XHRcdCsgJyknXG5cdFx0KSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUtbmFtZSc6IC9eI1xcdysvLFxuXHRcdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKykqXFxiLyxcblx0XHRcdCdvcGVyYXRvcic6IC8hfCYmfFxcfFxcfHxbPD5dPT8vLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdL1xuXHRcdH1cblx0fSxcblx0J2xpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogLyMoPzpjb2xvckxpdGVyYWx8Y29sdW1ufGRzb2hhbmRsZXxmaWxlKD86SUR8TGl0ZXJhbHxQYXRoKT98ZnVuY3Rpb258aW1hZ2VMaXRlcmFsfGxpbmUpXFxiLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnb3RoZXItZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jXFx3K1xcYi8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3Ky8sXG5cdFx0YWxpYXM6ICdhdHJ1bGUnXG5cdH0sXG5cblx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhcXGJmdW5jXFxzKylcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHQvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svTGFuZ3VhZ2VHdWlkZS9Db250cm9sRmxvdy5odG1sI0lEMTQxXG5cdFx0cGF0dGVybjogL1xcYihicmVha3xjb250aW51ZSlcXHMrXFx3K3xcXGJbYS16QS1aX11cXHcqKD89XFxzKjpcXHMqKD86Zm9yfHJlcGVhdHx3aGlsZSlcXGIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OkFueXxQcm90b2NvbHxTZWxmfFR5cGV8YWN0b3J8YXN8YXNzaWdubWVudHxhc3NvY2lhdGVkdHlwZXxhc3NvY2lhdGl2aXR5fGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29udGludWV8Y29udmVuaWVuY2V8ZGVmYXVsdHxkZWZlcnxkZWluaXR8ZGlkU2V0fGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4dGVuc2lvbnxmYWxsdGhyb3VnaHxmaWxlcHJpdmF0ZXxmaW5hbHxmb3J8ZnVuY3xnZXR8Z3VhcmR8aGlnaGVyVGhhbnxpZnxpbXBvcnR8aW58aW5kaXJlY3R8aW5maXh8aW5pdHxpbm91dHxpbnRlcm5hbHxpc3xpc29sYXRlZHxsYXp5fGxlZnR8bGV0fGxvd2VyVGhhbnxtdXRhdGluZ3xub25lfG5vbmlzb2xhdGVkfG5vbm11dGF0aW5nfG9wZW58b3BlcmF0b3J8b3B0aW9uYWx8b3ZlcnJpZGV8cG9zdGZpeHxwcmVjZWRlbmNlZ3JvdXB8cHJlZml4fHByaXZhdGV8cHJvdG9jb2x8cHVibGljfHJlcGVhdHxyZXF1aXJlZHxyZXRocm93c3xyZXR1cm58cmlnaHR8c2FmZXxzZWxmfHNldHxzb21lfHN0YXRpY3xzdHJ1Y3R8c3Vic2NyaXB0fHN1cGVyfHN3aXRjaHx0aHJvd3x0aHJvd3N8dHJ5fHR5cGVhbGlhc3x1bm93bmVkfHVuc2FmZXx2YXJ8d2Vha3x3aGVyZXx3aGlsZXx3aWxsU2V0KVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J25pbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibmlsXFxiLyxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXG5cdCdzaG9ydC1hcmd1bWVudCc6IC9cXCRcXGQrXFxiLyxcblx0J29taXQnOiB7XG5cdFx0cGF0dGVybjogL1xcYl9cXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J251bWJlcic6IC9cXGIoPzpbXFxkX10rKD86XFwuW1xcZGVfXSspP3wweFthLWYwLTlfXSsoPzpcXC5bYS1mMC05cF9dKyk/fDBiWzAxX10rfDBvWzAtN19dKylcXGIvaSxcblxuXHQvLyBBIGNsYXNzIG5hbWUgbXVzdCBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyIGFuZCBiZSBlaXRoZXIgMSBsZXR0ZXIgbG9uZyBvciBjb250YWluIGEgbG93ZXItY2FzZSBsZXR0ZXIuXG5cdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdKD86W0EtWl9cXGRdKlthLXpdXFx3Kik/XFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86W0EtWl9dezIsfXxrW0EtWl1bQS1aYS16X10rKVxcYi8sXG5cblx0Ly8gT3BlcmF0b3JzIGFyZSBnZW5lcmljIGluIFN3aWZ0LiBEZXZlbG9wZXJzIGNhbiBldmVuIGNyZWF0ZSBuZXcgb3BlcmF0b3JzIChlLmcuICsrKykuXG5cdC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9SZWZlcmVuY2VNYW51YWwvenpTdW1tYXJ5T2ZUaGVHcmFtbWFyLmh0bWwjSUQ0ODFcblx0Ly8gVGhpcyByZWdleCBvbmx5IHN1cHBvcnRzIEFTQ0lJIG9wZXJhdG9ycy5cblx0J29wZXJhdG9yJzogL1stKyovJT0hPD4mfF5+P10rfFxcLlsuXFwtKyovJT0hPD4mfF5+P10rLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKTssLjpcXFxcXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zd2lmdFsnc3RyaW5nLWxpdGVyYWwnXS5mb3JFYWNoKGZ1bmN0aW9uIChydWxlKSB7XG5cdHJ1bGUuaW5zaWRlWydpbnRlcnBvbGF0aW9uJ10uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnN3aWZ0O1xufSk7XG5cbi8vIGh0dHBzOi8vd3d3LmZyZWVkZXNrdG9wLm9yZy9zb2Z0d2FyZS9zeXN0ZW1kL21hbi9zeXN0ZW1kLnN5bnRheC5odG1sXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgY29tbWVudCA9IHtcblx0XHRwYXR0ZXJuOiAvXls7I10uKi9tLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdHZhciBxdW90ZXNTb3VyY2UgPSAvXCIoPzpbXlxcclxcblwiXFxcXF18XFxcXCg/OlteXFxyXXxcXHJcXG4/KSkqXCIoPyFcXFMpLy5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnN5c3RlbWQgPSB7XG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXG5cdFx0J3NlY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxcW1teXFxuXFxyXFxbXFxdXSpcXF0oPz1bIFxcdF0qJCkvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0J3NlY3Rpb24tbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQna2V5Jzoge1xuXHRcdFx0cGF0dGVybjogL15bXlxccz1dKyg/PVsgXFx0XSo9KS9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdFx0fSxcblx0XHQndmFsdWUnOiB7XG5cdFx0XHQvLyBUaGlzIHBhdHRlcm4gaXMgcXVpdGUgY29tcGxleCBiZWNhdXNlIG9mIHR3byBwcm9wZXJ0aWVzOlxuXHRcdFx0Ly8gIDEpIFF1b3RlcyAoc3RyaW5ncykgbXVzdCBiZSBwcmVjZWRlZCBieSBhIHNwYWNlLiBTaW5jZSB3ZSBjYW4ndCB1c2UgbG9va2JlaGluZHMsIHdlIGhhdmUgdG8gXCJyZXNvbHZlXCJcblx0XHRcdC8vICAgICB0aGUgbG9va2JlaGluZC4gWW91IHdpbGwgc2VlIHRoaXMgaW4gdGhlIG1haW4gbG9vcCB3aGVyZSBzcGFjZXMgYXJlIGhhbmRsZWQgc2VwYXJhdGVseS5cblx0XHRcdC8vICAyKSBMaW5lIGNvbnRpbnVhdGlvbnMuXG5cdFx0XHQvLyAgICAgQWZ0ZXIgbGluZSBjb250aW51YXRpb25zLCBlbXB0eSBsaW5lcyBhbmQgY29tbWVudHMgYXJlIGlnbm9yZWQgc28gd2UgaGF2ZSB0byBjb25zdW1lIHRoZW0uXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oPVsgXFx0XSooPyFcXHMpKS8uc291cmNlICtcblx0XHRcdFx0Ly8gdGhlIHZhbHVlIGVpdGhlciBzdGFydHMgd2l0aCBxdW90ZXMgb3Igbm90XG5cdFx0XHRcdCcoPzonICsgcXVvdGVzU291cmNlICsgJ3woPz1bXlwiXFxyXFxuXSkpJyArXG5cdFx0XHRcdC8vIG1haW4gbG9vcFxuXHRcdFx0XHQnKD86JyArIChcblx0XHRcdFx0XHQvW15cXHNcXFxcXS8uc291cmNlICtcblx0XHRcdFx0XHQvLyBoYW5kbGUgc3BhY2VzIHNlcGFyYXRlbHkgYmVjYXVzZSBvZiBxdW90ZXNcblx0XHRcdFx0XHQnfCcgKyAnWyBcXHRdKyg/Oig/IVsgXFx0XCJdKXwnICsgcXVvdGVzU291cmNlICsgJyknICtcblx0XHRcdFx0XHQvLyBsaW5lIGNvbnRpbnVhdGlvblxuXHRcdFx0XHRcdCd8JyArIC9cXFxcW1xcclxcbl0rKD86WyM7XS4qW1xcclxcbl0rKSooPyFbIztdKS8uc291cmNlXG5cdFx0XHRcdCkgK1xuXHRcdFx0XHQnKSonXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQncXVvdGVkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58XFxzKS8uc291cmNlICsgcXVvdGVzU291cmNlKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwkL20sXG5cblx0XHRcdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oPzpmYWxzZXxub3xvZmZ8b258dHJ1ZXx5ZXMpJC8sXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogLz0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZUJsb2NrKHByZWZpeCwgaW5zaWRlLCBjb250ZW50QWxpYXMpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCc8IycgKyBwcmVmaXggKyAnW1xcXFxzXFxcXFNdKj8jPicpLFxuXHRcdFx0YWxpYXM6ICdibG9jaycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ148IycgKyBwcmVmaXggKyAnfCM+JCcpLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRpbnNpZGU6IGluc2lkZSxcblx0XHRcdFx0XHRhbGlhczogY29udGVudEFsaWFzXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0ZnVuY3Rpb24gY3JlYXRlVDQoaW5zaWRlTGFuZykge1xuXHRcdHZhciBncmFtbWFyID0gUHJpc20ubGFuZ3VhZ2VzW2luc2lkZUxhbmddO1xuXHRcdHZhciBjbGFzc05hbWUgPSAnbGFuZ3VhZ2UtJyArIGluc2lkZUxhbmc7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0J2Jsb2NrJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPCNbXFxzXFxTXSs/Iz4vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZGlyZWN0aXZlJzogY3JlYXRlQmxvY2soJ0AnLCB7XG5cdFx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLz0oPzooXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxbXlxccydcIj49XSspLyxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL149fF5bXCInXXxbXCInXSQvXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQna2V5d29yZCc6IC9cXGJcXHcrKD89XFxzKS8sXG5cdFx0XHRcdFx0XHQnYXR0ci1uYW1lJzogL1xcYlxcdysvXG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiBjcmVhdGVCbG9jaygnPScsIGdyYW1tYXIsIGNsYXNzTmFtZSksXG5cdFx0XHRcdFx0J2NsYXNzLWZlYXR1cmUnOiBjcmVhdGVCbG9jaygnXFxcXCsnLCBncmFtbWFyLCBjbGFzc05hbWUpLFxuXHRcdFx0XHRcdCdzdGFuZGFyZCc6IGNyZWF0ZUJsb2NrKCcnLCBncmFtbWFyLCBjbGFzc05hbWUpXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzWyd0NC10ZW1wbGF0aW5nJ10gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdjcmVhdGVUNCcsIHsgdmFsdWU6IGNyZWF0ZVQ0IH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy50NCA9IFByaXNtLmxhbmd1YWdlc1sndDQtY3MnXSA9IFByaXNtLmxhbmd1YWdlc1sndDQtdGVtcGxhdGluZyddLmNyZWF0ZVQ0KCdjc2hhcnAnKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZibmV0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYmFzaWMnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oPzohfFJFTVxcYikuKy9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15SRU0vaVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKScuKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlwiXSlcIig/OlwiXCJ8W15cIl0pKlwiKD8hXCIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC8oPzpcXGIoPzpBRERIQU5ETEVSfEFERFJFU1NPRnxBTElBU3xBTkR8QU5EQUxTT3xBU3xCRUVQfEJMT0FEfEJPT0xFQU58QlNBVkV8QllSRUZ8QllURXxCWVZBTHxDQUxMKD86IEFCU09MVVRFKT98Q0FTRXxDQVRDSHxDQk9PTHxDQllURXxDQ0hBUnxDREFURXxDREJMfENERUN8Q0hBSU58Q0hBUnxDSERJUnxDSU5UfENMQVNTfENMRUFSfENMTkd8Q0xPU0V8Q0xTfENPQkp8Q09NfENPTU1PTnxDT05TVHxDT05USU5VRXxDU0JZVEV8Q1NIT1JUfENTTkd8Q1NUUnxDVFlQRXxDVUlOVHxDVUxOR3xDVVNIT1JUfERBVEF8REFURXxERUNJTUFMfERFQ0xBUkV8REVGKD86IEZOfCBTRUd8REJMfElOVHxMTkd8U05HfFNUUil8REVGQVVMVHxERUxFR0FURXxESU18RElSRUNUQ0FTVHxET3xET1VCTEV8RUxTRXxFTFNFSUZ8RU5EfEVOVU18RU5WSVJPTnxFUkFTRXxFUlJPUnxFVkVOVHxFWElUfEZBTFNFfEZJRUxEfEZJTEVTfEZJTkFMTFl8Rk9SKD86IEVBQ0gpP3xGUklFTkR8RlVOQ1RJT058R0VUfEdFVFRZUEV8R0VUWE1MTkFNRVNQQUNFfEdMT0JBTHxHT1NVQnxHT1RPfEhBTkRMRVN8SUZ8SU1QTEVNRU5UU3xJTVBPUlRTfElOfElOSEVSSVRTfElOUFVUfElOVEVHRVJ8SU5URVJGQUNFfElPQ1RMfElTfElTTk9UfEtFWXxLSUxMfExFVHxMSUJ8TElLRXxMSU5FIElOUFVUfExPQ0FURXxMT0NLfExPTkd8TE9PUHxMU0VUfE1FfE1LRElSfE1PRHxNT0RVTEV8TVVTVElOSEVSSVR8TVVTVE9WRVJSSURFfE1ZQkFTRXxNWUNMQVNTfE5BTUV8TkFNRVNQQUNFfE5BUlJPV0lOR3xORVd8TkVYVHxOT1R8Tk9USElOR3xOT1RJTkhFUklUQUJMRXxOT1RPVkVSUklEQUJMRXxPQkpFQ1R8T0Z8T0ZGfE9OKD86IENPTXwgRVJST1J8IEtFWXwgVElNRVIpP3xPUEVOfE9QRVJBVE9SfE9QVElPTig/OiBCQVNFKT98T1BUSU9OQUx8T1J8T1JFTFNFfE9VVHxPVkVSTE9BRFN8T1ZFUlJJREFCTEV8T1ZFUlJJREVTfFBBUkFNQVJSQVl8UEFSVElBTHxQT0tFfFBSSVZBVEV8UFJPUEVSVFl8UFJPVEVDVEVEfFBVQkxJQ3xQVVR8UkFJU0VFVkVOVHxSRUFEfFJFQURPTkxZfFJFRElNfFJFTXxSRU1PVkVIQU5ETEVSfFJFU1RPUkV8UkVTVU1FfFJFVFVSTnxSTURJUnxSU0VUfFJVTnxTQllURXxTRUxFQ1QoPzogQ0FTRSk/fFNFVHxTSEFET1dTfFNIQVJFRHxTSEVMTHxTSE9SVHxTSU5HTEV8U0xFRVB8U1RBVElDfFNURVB8U1RPUHxTVFJJTkd8U1RSVUNUVVJFfFNVQnxTV0FQfFNZTkNMT0NLfFNZU1RFTXxUSEVOfFRIUk9XfFRJTUVSfFRPfFRST0ZGfFRST058VFJVRXxUUll8VFJZQ0FTVHxUWVBFfFRZUEVPRnxVSU5URUdFUnxVTE9OR3xVTkxPQ0t8VU5USUx8VVNIT1JUfFVTSU5HfFZJRVcgUFJJTlR8V0FJVHxXRU5EfFdIRU58V0hJTEV8V0lERU5JTkd8V0lUSHxXSVRIRVZFTlRTfFdSSVRFfFdSSVRFT05MWXxYT1IpfFxcQig/OiNDT05TVHwjRUxTRXwjRUxTRUlGfCNFTkR8I0lGKSkoPzpcXCR8XFxiKS9pLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7Oigpe31dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlc1sndDQtdmInXSA9IFByaXNtLmxhbmd1YWdlc1sndDQtdGVtcGxhdGluZyddLmNyZWF0ZVQ0KCd2Ym5ldCcpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjYy1ucy1hbmNob3ItcHJvcGVydHlcblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjYy1ucy1hbGlhcy1ub2RlXG5cdHZhciBhbmNob3JPckFsaWFzID0gL1sqJl1bXlxcc1tcXF17fSxdKy87XG5cdC8vIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2MtbnMtdGFnLXByb3BlcnR5XG5cdHZhciB0YWcgPSAvISg/OjxbXFx3XFwtJSM7Lz86QCY9KyQsLiF+KicoKVtcXF1dKz58KD86W2EtekEtWlxcZC1dKiEpP1tcXHdcXC0lIzsvPzpAJj0rJC5+KicoKV0rKT8vO1xuXHQvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNjLW5zLXByb3BlcnRpZXMobixjKVxuXHR2YXIgcHJvcGVydGllcyA9ICcoPzonICsgdGFnLnNvdXJjZSArICcoPzpbIFxcdF0rJyArIGFuY2hvck9yQWxpYXMuc291cmNlICsgJyk/fCdcblx0XHQrIGFuY2hvck9yQWxpYXMuc291cmNlICsgJyg/OlsgXFx0XSsnICsgdGFnLnNvdXJjZSArICcpPyknO1xuXHQvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNucy1wbGFpbihuLGMpXG5cdC8vIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gdGhhdCBkb2Vzbid0IHN1cHBvcnQgXCIjXCIgYW5kIG11bHRpbGluZSBrZXlzXG5cdC8vIEFsbCB0aGVzZSBsb25nIHNjYXJyeSBjaGFyYWN0ZXIgY2xhc3NlcyBhcmUgc2ltcGxpZmllZCB2ZXJzaW9ucyBvZiBZQU1MJ3MgY2hhcmFjdGVyc1xuXHR2YXIgcGxhaW5LZXkgPSAvKD86W15cXHNcXHgwMC1cXHgwOFxceDBlLVxceDFmIVwiIyUmJyosXFwtOj4/QFtcXF1ge3x9XFx4N2YtXFx4ODRcXHg4Ni1cXHg5ZlxcdWQ4MDAtXFx1ZGZmZlxcdWZmZmVcXHVmZmZmXXxbPzotXTxQTEFJTj4pKD86WyBcXHRdKig/Oig/IVsjOl0pPFBMQUlOPnw6PFBMQUlOPikpKi8uc291cmNlXG5cdFx0LnJlcGxhY2UoLzxQTEFJTj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gL1teXFxzXFx4MDAtXFx4MDhcXHgwZS1cXHgxZixbXFxde31cXHg3Zi1cXHg4NFxceDg2LVxceDlmXFx1ZDgwMC1cXHVkZmZmXFx1ZmZmZVxcdWZmZmZdLy5zb3VyY2U7IH0pO1xuXHR2YXIgc3RyaW5nID0gL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXC4pKicvLnNvdXJjZTtcblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVWYWx1ZVBhdHRlcm4odmFsdWUsIGZsYWdzKSB7XG5cdFx0ZmxhZ3MgPSAoZmxhZ3MgfHwgJycpLnJlcGxhY2UoL20vZywgJycpICsgJ20nOyAvLyBhZGQgbSBmbGFnXG5cdFx0dmFyIHBhdHRlcm4gPSAvKFs6XFwtLFt7XVxccyooPzpcXHM8PHByb3A+PlsgXFx0XSspPykoPzo8PHZhbHVlPj4pKD89WyBcXHRdKig/OiR8LHxcXF18XFx9fCg/OltcXHJcXG5dXFxzKik/IykpLy5zb3VyY2Vcblx0XHRcdC5yZXBsYWNlKC88PHByb3A+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wZXJ0aWVzOyB9KS5yZXBsYWNlKC88PHZhbHVlPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdmFsdWU7IH0pO1xuXHRcdHJldHVybiBSZWdFeHAocGF0dGVybiwgZmxhZ3MpO1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnlhbWwgPSB7XG5cdFx0J3NjYWxhcic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFtcXC06XVxccyooPzpcXHM8PHByb3A+PlsgXFx0XSspP1t8Pl0pWyBcXHRdKig/OigoPzpcXHI/XFxufFxccilbIFxcdF0rKVxcU1teXFxyXFxuXSooPzpcXDJbXlxcclxcbl0rKSopLy5zb3VyY2Vcblx0XHRcdFx0LnJlcGxhY2UoLzw8cHJvcD4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHByb3BlcnRpZXM7IH0pKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdjb21tZW50JzogLyMuKi8sXG5cdFx0J2tleSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKCg/Ol58WzpcXC0sW3tcXHJcXG4/XSlbIFxcdF0qKD86PDxwcm9wPj5bIFxcdF0rKT8pPDxrZXk+Pig/PVxccyo6XFxzKS8uc291cmNlXG5cdFx0XHRcdC5yZXBsYWNlKC88PHByb3A+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wZXJ0aWVzOyB9KVxuXHRcdFx0XHQucmVwbGFjZSgvPDxrZXk+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAnKD86JyArIHBsYWluS2V5ICsgJ3wnICsgc3RyaW5nICsgJyknOyB9KSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHJ1bGUnXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKiklLisvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXHRcdCdkYXRldGltZSc6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvXFxkezR9LVxcZFxcZD8tXFxkXFxkPyg/Olt0VF18WyBcXHRdKylcXGRcXGQ/OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQqKT8oPzpbIFxcdF0qKD86WnxbLStdXFxkXFxkPyg/OjpcXGR7Mn0pPykpP3xcXGR7NH0tXFxkezJ9LVxcZHsyfXxcXGRcXGQ/OlxcZHsyfSg/OjpcXGR7Mn0oPzpcXC5cXGQqKT8pPy8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKC9mYWxzZXx0cnVlLy5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnbnVsbCc6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvbnVsbHx+Ly5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKHN0cmluZyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogY3JlYXRlVmFsdWVQYXR0ZXJuKC9bKy1dPyg/OjB4W1xcZGEtZl0rfDBvWzAtN10rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT98XFwuaW5mfFxcLm5hbikvLnNvdXJjZSwgJ2knKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0YWcnOiB0YWcsXG5cdFx0J2ltcG9ydGFudCc6IGFuY2hvck9yQWxpYXMsXG5cdFx0J3B1bmN0dWF0aW9uJzogLy0tLXxbOltcXF17fVxcLSx8Pj9dfFxcLlxcLlxcLi9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMueW1sID0gUHJpc20ubGFuZ3VhZ2VzLnlhbWw7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVGVzdF9Bbnl0aGluZ19Qcm90b2NvbFxuXG5QcmlzbS5sYW5ndWFnZXMudGFwID0ge1xuXHQnZmFpbCc6IC9ub3Qgb2tbXiN7XFxuXFxyXSovLFxuXHQncGFzcyc6IC9va1teI3tcXG5cXHJdKi8sXG5cdCdwcmFnbWEnOiAvcHJhZ21hIFsrLV1bYS16XSsvLFxuXHQnYmFpbG91dCc6IC9iYWlsIG91dCEuKi9pLFxuXHQndmVyc2lvbic6IC9UQVAgdmVyc2lvbiBcXGQrL2ksXG5cdCdwbGFuJzogL1xcYlxcZCtcXC5cXC5cXGQrKD86ICsjLiopPy8sXG5cdCdzdWJ0ZXN0Jzoge1xuXHRcdHBhdHRlcm46IC8jIFN1YnRlc3QoPzo6IC4qKT8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW3t9XS8sXG5cdCdkaXJlY3RpdmUnOiAvIy4qLyxcblx0J3lhbWxpc2gnOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKiktLS1bXFxzXFxTXSo/W1xcclxcbl1bIFxcdF0qXFwuXFwuXFwuJC9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMueWFtbCxcblx0XHRhbGlhczogJ2xhbmd1YWdlLXlhbWwnXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy50Y2wgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXCQpKD86OjopPyg/OlthLXpBLVowLTldKzo6KSpcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwkKVxce1tefV0rXFx9Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSpzZXRbIFxcdF0rKSg/Ojo6KT8oPzpbYS16QS1aMC05XSs6OikqXFx3Ky9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpwcm9jWyBcXHRdKylcXFMrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYnVpbHRpbic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OmJyZWFrfGNsYXNzfGNvbnRpbnVlfGVycm9yfGV2YWx8ZXhpdHxmb3J8Zm9yZWFjaHxpZnxwcm9jfHJldHVybnxzd2l0Y2h8d2hpbGUpXFxiL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvXFxiKD86ZWxzZXxlbHNlaWYpXFxiL1xuXHRdLFxuXHQnc2NvcGUnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpnbG9iYWx8dXB2YXJ8dmFyaWFibGUpXFxiL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qfFxcWykoPzpTYWZlX0Jhc2V8VGNsfGFmdGVyfGFwcGVuZHxhcHBseXxhcnJheXxhdXRvXyg/OmV4ZWNva3xpbXBvcnR8bG9hZHxta2luZGV4fHF1YWxpZnl8cmVzZXQpfGF1dG9ta2luZGV4X29sZHxiZ2Vycm9yfGJpbmFyeXxjYXRjaHxjZHxjaGFufGNsb2NrfGNsb3NlfGNvbmNhdHxkZGV8ZGljdHxlbmNvZGluZ3xlb2Z8ZXhlY3xleHByfGZibG9ja2VkfGZjb25maWd1cmV8ZmNvcHl8ZmlsZSg/OmV2ZW50fG5hbWUpP3xmbHVzaHxnZXRzfGdsb2J8aGlzdG9yeXxodHRwfGluY3J8aW5mb3xpbnRlcnB8am9pbnxsYXBwZW5kfGxhc3NpZ258bGluZGV4fGxpbnNlcnR8bGlzdHxsbGVuZ3RofGxvYWR8bHJhbmdlfGxyZXBlYXR8bHJlcGxhY2V8bHJldmVyc2V8bHNlYXJjaHxsc2V0fGxzb3J0fG1hdGgoPzpmdW5jfG9wKXxtZW1vcnl8bXNnY2F0fG5hbWVzcGFjZXxvcGVufHBhY2thZ2V8cGFycmF5fHBpZHxwa2dfbWtJbmRleHxwbGF0Zm9ybXxwdXRzfHB3ZHxyZV9zeW50YXh8cmVhZHxyZWZjaGFufHJlZ2V4cHxyZWdpc3RyeXxyZWdzdWJ8cmVuYW1lfHNjYW58c2Vla3xzZXR8c29ja2V0fHNvdXJjZXxzcGxpdHxzdHJpbmd8c3Vic3R8dGNsKD86X2VuZE9mV29yZHxfZmluZExpYnJhcnl8c3RhcnRPZig/Ok5leHR8UHJldmlvdXMpV29yZHx0ZXN0fHZhcnN8d29yZEJyZWFrKD86QWZ0ZXJ8QmVmb3JlKSl8dGVsbHx0aW1lfHRtfHRyYWNlfHVua25vd258dW5sb2FkfHVuc2V0fHVwZGF0ZXx1cGxldmVsfHZ3YWl0KVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLyE9P3xcXCpcXCo/fD09fCYmP3xcXHxcXHw/fDxbPTxdP3w+Wz0+XT98Wy0rflxcLyU/Xl18XFxiKD86ZXF8aW58bmV8bmkpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpXFxbXFxdXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHQyID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NvbW1lbnQnOiAvIy4qfFxcWyUjW1xcc1xcU10qPyVcXF0vLFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OkJMT0NLfENBTEx8Q0FTRXxDQVRDSHxDTEVBUnxERUJVR3xERUZBVUxUfEVMU0V8RUxTSUZ8RU5EfEZJTFRFUnxGSU5BTHxGT1JFQUNIfEdFVHxJRnxJTnxJTkNMVURFfElOU0VSVHxMQVNUfE1BQ1JPfE1FVEF8TkVYVHxQRVJMfFBST0NFU1N8UkFXUEVSTHxSRVRVUk58U0VUfFNUT1B8U1dJVENIfFRBR1N8VEhST1d8VFJZfFVOTEVTU3xVU0V8V0hJTEV8V1JBUFBFUilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXXt9LCgpXS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndHQyJywgJ251bWJlcicsIHtcblx0XHQnb3BlcmF0b3InOiAvPVs+PV0/fCE9P3w8PT98Pj0/fCYmfFxcfFxcfD98XFxiKD86YW5kfG5vdHxvcilcXGIvLFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPzpcXHMqXFwuXFxzKig/OlxcZCt8XFwkP1thLXpdXFx3KikpKlxcYi9pXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd0dDInLCAna2V5d29yZCcsIHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL14oPzpcXFslfCUlKS0/fC0/JVxcXSQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3R0MicsICdzdHJpbmcnLCB7XG5cdFx0J3NpbmdsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLydbXlxcXFwnXSooPzpcXFxcW1xcc1xcU11bXlxcXFwnXSopKicvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0fSxcblx0XHQnZG91YmxlLXF1b3RlZC1zdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlxcXFxcIl0qKD86XFxcXFtcXHNcXFNdW15cXFxcXCJdKikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86W2Etel1cXHcqKD86XFwuKD86XFxkK3xcXCQ/W2Etel1cXHcqKSkqKS9pXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdC8vIFRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgVFQyIHN0cmluZ3MgXCJyZXBsYWNlXCIgdGhlIEMtbGlrZSBzdGFuZGFyZCBzdHJpbmdcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50dDIuc3RyaW5nO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciB0dDJQYXR0ZXJuID0gL1xcWyVbXFxzXFxTXSs/JVxcXS9nO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICd0dDInLCB0dDJQYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAndHQyJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0Ly8gV2UgZG9uJ3QgYWxsb3cgZm9yIHBpcGVzIGluc2lkZSBwYXJlbnRoZXNlc1xuXHQvLyB0byBub3QgYnJlYWsgdGFibGUgcGF0dGVybiB8KC4gZm9vIHwpLiBiYXIgfFxuXHR2YXIgbW9kaWZpZXJSZWdleCA9IC9cXChbXnwoKVxcbl0rXFwpfFxcW1teXFxdXFxuXStcXF18XFx7W159XFxuXStcXH0vLnNvdXJjZTtcblx0Ly8gT3BlbmluZyBhbmQgY2xvc2luZyBwYXJlbnRoZXNlcyB3aGljaCBhcmUgbm90IGEgbW9kaWZpZXJcblx0Ly8gVGhpcyBwYXR0ZXJuIGlzIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGV4cG9uZW50aWFsIGJhY2t0cmFja2luZ1xuXHR2YXIgcGFyZW50aGVzZXNSZWdleCA9IC9cXCl8XFwoKD8hW158KClcXG5dK1xcKSkvLnNvdXJjZTtcblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICovXG5cdGZ1bmN0aW9uIHdpdGhNb2RpZmllcihzb3VyY2UsIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChcblx0XHRcdHNvdXJjZVxuXHRcdFx0XHQucmVwbGFjZSgvPE1PRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBtb2RpZmllclJlZ2V4ICsgJyknOyB9KVxuXHRcdFx0XHQucmVwbGFjZSgvPFBBUj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwYXJlbnRoZXNlc1JlZ2V4ICsgJyknOyB9KSxcblx0XHRcdGZsYWdzIHx8ICcnKTtcblx0fVxuXG5cdHZhciBtb2RpZmllclRva2VucyA9IHtcblx0XHQnY3NzJzoge1xuXHRcdFx0cGF0dGVybjogL1xce1tee31dK1xcfS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmNzc1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NsYXNzLWlkJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXCgpW14oKV0rKD89XFwpKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdH0sXG5cdFx0J2xhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcWylbXlxcW1xcXV0rKD89XFxdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdH0sXG5cdFx0Ly8gQW55dGhpbmcgZWxzZSBpcyBwdW5jdHVhdGlvbiAodGhlIGZpcnN0IHBhdHRlcm4gaXMgZm9yIHJvdy9jb2wgc3BhbnMgaW5zaWRlIHRhYmxlcylcblx0XHQncHVuY3R1YXRpb24nOiAvW1xcXFxcXC9dXFxkK3xcXFMvXG5cdH07XG5cblxuXHR2YXIgdGV4dGlsZSA9IFByaXNtLmxhbmd1YWdlcy50ZXh0aWxlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHRcdCdwaHJhc2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxyfFxcbilcXFNbXFxzXFxTXSo/KD89JHxcXHI/XFxuXFxyP1xcbnxcXHJcXHIpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblxuXHRcdFx0XHQvLyBoMS4gSGVhZGVyIDFcblx0XHRcdFx0J2Jsb2NrLXRhZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoL15bYS16XVxcdyooPzo8TU9EPnw8UEFSPnxbPD49XSkqXFwuLy5zb3VyY2UpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheW2Etel1cXHcqKSg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSsoPz1cXC4pLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3RhZyc6IC9eW2Etel1cXHcqLyxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4kL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyAjIExpc3QgaXRlbVxuXHRcdFx0XHQvLyAqIExpc3QgaXRlbVxuXHRcdFx0XHQnbGlzdCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoL15bKiNdKzxNT0Q+KlxccytcXFMuKi8uc291cmNlLCAnbScpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheWyojXSspPE1PRD4rLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bKiNdKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gfCBjZWxsIHwgY2VsbCB8IGNlbGwgfFxuXHRcdFx0XHQndGFibGUnOiB7XG5cdFx0XHRcdFx0Ly8gTW9kaWZpZXJzIGNhbiBiZSBhcHBsaWVkIHRvIHRoZSByb3c6IHtjb2xvcjpyZWR9LnwxfDJ8M3xcblx0XHRcdFx0XHQvLyBvciB0aGUgY2VsbDogfHtjb2xvcjpyZWR9LjF8MnwzfFxuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvXig/Oig/OjxNT0Q+fDxQQVI+fFs8Pj1efl0pK1xcLlxccyopPyg/OlxcfCg/Oig/OjxNT0Q+fDxQQVI+fFs8Pj1efl9dfFtcXFxcL11cXGQrKStcXC58KD8hKD86PE1PRD58PFBBUj58Wzw+PV5+X118W1xcXFwvXVxcZCspK1xcLikpW158XSopK1xcfC8uc291cmNlLCAnbScpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBNb2RpZmllcnMgZm9yIHJvd3MgYWZ0ZXIgdGhlIGZpcnN0IG9uZSBhcmVcblx0XHRcdFx0XHRcdFx0Ly8gcHJlY2VkZWQgYnkgYSBwaXBlIGFuZCBhIGxpbmUgZmVlZFxuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyhefFxcfCg/Olxccj9cXG58XFxyKT8pKD86PE1PRD58PFBBUj58Wzw+PV5+X118W1xcXFwvXVxcZCspKyg/PVxcLikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbW9kaWZpZXJUb2tlbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8fF5cXC4vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdCdpbmxpbmUnOiB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXnxbXmEtekEtWlxcZF0pKFxcKlxcKnxfX3xcXD9cXD98WypfJUArXFwtXn5dKTxNT0Q+Ki4rP1xcMig/IVthLXpBLVpcXGRdKS8uc291cmNlKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0Ly8gTm90ZTogc3VwZXJzY3JpcHRzIGFuZCBzdWJzY3JpcHRzIGFyZSBub3QgaGFuZGxlZCBzcGVjaWZpY2FsbHlcblxuXHRcdFx0XHRcdFx0Ly8gKmJvbGQqLCAqKmJvbGQqKlxuXHRcdFx0XHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheKFxcKlxcKj8pPE1PRD4qKS4rPyg/PVxcMikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vIF9pdGFsaWNfLCBfX2l0YWxpY19fXG5cdFx0XHRcdFx0XHQnaXRhbGljJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXihfXz8pPE1PRD4qKS4rPyg/PVxcMikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vID8/Y2l0ZT8/XG5cdFx0XHRcdFx0XHQnY2l0ZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cXD9cXD88TU9EPiopLis/KD89XFw/XFw/KS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyBAY29kZUBcblx0XHRcdFx0XHRcdCdjb2RlJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXkA8TU9EPiopLis/KD89QCkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vICtpbnNlcnRlZCtcblx0XHRcdFx0XHRcdCdpbnNlcnRlZCc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cXCs8TU9EPiopLis/KD89XFwrKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0Ly8gLWRlbGV0ZWQtXG5cdFx0XHRcdFx0XHQnZGVsZXRlZCc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF4tPE1PRD4qKS4rPyg/PS0pLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyAlc3BhbiVcblx0XHRcdFx0XHRcdCdzcGFuJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXiU8TU9EPiopLis/KD89JSkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlxcKlxcKnxfX3xcXD9cXD98WypfJUArXFwtXn5dKTxNT0Q+Ky8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKl8lP0ArXFwtXn5dKy9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gW2FsaWFzXWh0dHA6Ly9leGFtcGxlLmNvbVxuXHRcdFx0XHQnbGluay1yZWYnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXFtbXlxcXV0rXFxdXFxTKyQvbSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcWylbXlxcXV0rKD89XFxdKS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQndXJsJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXF0pXFxTKyQvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBcInRleHRcIjpodHRwOi8vZXhhbXBsZS5jb21cblx0XHRcdFx0Ly8gXCJ0ZXh0XCI6bGluay1yZWZcblx0XHRcdFx0J2xpbmsnOiB7XG5cdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC9cIjxNT0Q+KlteXCJdK1wiOi4rPyg/PVteXFx3L10/KD86XFxzfCQpKS8uc291cmNlKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0ZXh0Jzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlwiPE1PRD4qKVteXCJdKyg/PVwiKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlwiKTxNT0Q+Ky8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd1cmwnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOikuKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1wiOl0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vICFpbWFnZS5qcGchXG5cdFx0XHRcdC8vICFpbWFnZS5qcGcoVGl0bGUpITpodHRwOi8vZXhhbXBsZS5jb21cblx0XHRcdFx0J2ltYWdlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvISg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSooPyFbPD49XSlbXiFcXHMoKV0rKD86XFwoW14pXStcXCkpPyEoPzo6Lis/KD89W15cXHcvXT8oPzpcXHN8JCkpKT8vLnNvdXJjZSksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnc291cmNlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheISg/OjxNT0Q+fDxQQVI+fFs8Pj1dKSopKD8hWzw+PV0pW14hXFxzKCldKyg/OlxcKFteKV0rXFwpKT8oPz0hKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICd1cmwnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J21vZGlmaWVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheISkoPzo8TU9EPnw8UEFSPnxbPD49XSkrLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg6KS4rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bITpdL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBGb290bm90ZVsxXVxuXHRcdFx0XHQnZm9vdG5vdGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlxcW1xcZCtcXF0vLFxuXHRcdFx0XHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ1NTKENhc2NhZGluZyBTdHlsZSBTaGVldClcblx0XHRcdFx0J2Fjcm9ueW0nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYltBLVpcXGRdK1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdjb21tZW50Jzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcKClbXigpXSsoPz1cXCkpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBQcmlzbShDKVxuXHRcdFx0XHQnbWFyayc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFwoKD86Q3xSfFRNKVxcKS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCldL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0dmFyIHBocmFzZUluc2lkZSA9IHRleHRpbGVbJ3BocmFzZSddLmluc2lkZTtcblx0dmFyIG5lc3RlZFBhdHRlcm5zID0ge1xuXHRcdCdpbmxpbmUnOiBwaHJhc2VJbnNpZGVbJ2lubGluZSddLFxuXHRcdCdsaW5rJzogcGhyYXNlSW5zaWRlWydsaW5rJ10sXG5cdFx0J2ltYWdlJzogcGhyYXNlSW5zaWRlWydpbWFnZSddLFxuXHRcdCdmb290bm90ZSc6IHBocmFzZUluc2lkZVsnZm9vdG5vdGUnXSxcblx0XHQnYWNyb255bSc6IHBocmFzZUluc2lkZVsnYWNyb255bSddLFxuXHRcdCdtYXJrJzogcGhyYXNlSW5zaWRlWydtYXJrJ11cblx0fTtcblxuXHQvLyBPbmx5IGFsbG93IGFscGhhLW51bWVyaWMgSFRNTCB0YWdzLCBub3QgWE1MIHRhZ3Ncblx0dGV4dGlsZS50YWcucGF0dGVybiA9IC88XFwvPyg/IVxcZClbYS16MC05XSsoPzpcXHMrW15cXHM+XFwvPV0rKD86PSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykpPykqXFxzKlxcLz8+L2k7XG5cblx0Ly8gQWxsb3cgc29tZSBuZXN0aW5nXG5cdHZhciBwaHJhc2VJbmxpbmVJbnNpZGUgPSBwaHJhc2VJbnNpZGVbJ2lubGluZSddLmluc2lkZTtcblx0cGhyYXNlSW5saW5lSW5zaWRlWydib2xkJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnaXRhbGljJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnaW5zZXJ0ZWQnXS5pbnNpZGUgPSBuZXN0ZWRQYXR0ZXJucztcblx0cGhyYXNlSW5saW5lSW5zaWRlWydkZWxldGVkJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnc3BhbiddLmluc2lkZSA9IG5lc3RlZFBhdHRlcm5zO1xuXG5cdC8vIEFsbG93IHNvbWUgc3R5bGVzIGluc2lkZSB0YWJsZSBjZWxsc1xuXHR2YXIgcGhyYXNlVGFibGVJbnNpZGUgPSBwaHJhc2VJbnNpZGVbJ3RhYmxlJ10uaW5zaWRlO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnaW5saW5lJ10gPSBuZXN0ZWRQYXR0ZXJuc1snaW5saW5lJ107XG5cdHBocmFzZVRhYmxlSW5zaWRlWydsaW5rJ10gPSBuZXN0ZWRQYXR0ZXJuc1snbGluayddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnaW1hZ2UnXSA9IG5lc3RlZFBhdHRlcm5zWydpbWFnZSddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnZm9vdG5vdGUnXSA9IG5lc3RlZFBhdHRlcm5zWydmb290bm90ZSddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnYWNyb255bSddID0gbmVzdGVkUGF0dGVybnNbJ2Fjcm9ueW0nXTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ21hcmsnXSA9IG5lc3RlZFBhdHRlcm5zWydtYXJrJ107XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXkgPSAvKD86W1xcdy1dK3wnW14nXFxuXFxyXSonfFwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIikvLnNvdXJjZTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICovXG5cdGZ1bmN0aW9uIGluc2VydEtleShwYXR0ZXJuKSB7XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ga2V5OyB9KTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy50b21sID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCd0YWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnNlcnRLZXkoLyheW1xcdCBdKlxcW1xccyooPzpcXFtcXHMqKT8pX18oPzpcXHMqXFwuXFxzKl9fKSooPz1cXHMqXFxdKS8uc291cmNlKSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQna2V5Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKGluc2VydEtleSgvKF5bXFx0IF0qfFt7LF1cXHMqKV9fKD86XFxzKlxcLlxccypfXykqKD89XFxzKj0pLy5zb3VyY2UpLCAnbScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiXCJcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxdKSo/XCJcIlwifCcnJ1tcXHNcXFNdKj8nJyd8J1teJ1xcblxccl0qJ3xcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZGF0ZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gT2Zmc2V0IERhdGUtVGltZSwgTG9jYWwgRGF0ZS1UaW1lLCBMb2NhbCBEYXRlXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfSg/OltUXFxzXVxcZHsyfTpcXGR7Mn06XFxkezJ9KD86XFwuXFxkKyk/KD86WnxbKy1dXFxkezJ9OlxcZHsyfSk/KT9cXGIvaSxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBMb2NhbCBUaW1lXG5cdFx0XHRcdHBhdHRlcm46IC9cXGJcXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspP1xcYi8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J251bWJlcic6IC8oPzpcXGIwKD86eFtcXGRhLXpBLVpdKyg/Ol9bXFxkYS16QS1aXSspKnxvWzAtN10rKD86X1swLTddKykqfGJbMTBdKyg/Ol9bMTBdKykqKSlcXGJ8Wy0rXT9cXGJcXGQrKD86X1xcZCspKig/OlxcLlxcZCsoPzpfXFxkKykqKT8oPzpbZUVdWystXT9cXGQrKD86X1xcZCspKik/XFxifFstK10/XFxiKD86aW5mfG5hbilcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWy4sPVtcXF17fV0vXG5cdH07XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHJlbW9yID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3woPzotLXxcXC9cXC98IykuKikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ludGVycG9sYXRlZC1zdHJpbmcnOiBudWxsLCAvLyBzZWUgYmVsb3dcblx0XHQnZXh0cmFjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdypcXHwoPzpbXlxcclxcblxcXFx8XXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXFx8L2ksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3JlZ2V4Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnJlKVxcfFtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXlxcdysvLFxuXHRcdFx0XHQndmFsdWUnOiAvXFx8W1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2lkZW50aWZpZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYFteYF0qYC8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqKD86OjpcXHMqPHxcXCgpKVxcYi8sXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzphcmdzfGFzfGJ5fGNhc2V8Y29uZmlnfGNvbm5lY3R8Y29ubmVjdG9yfGNvbnN0fGNvcHl8Y3JlYXRlfGRlZmF1bHR8ZGVmaW5lfGRlcGxveXxkcm9wfGVhY2h8ZW1pdHxlbmR8ZXJhc2V8ZXZlbnR8Zmxvd3xmbnxmb3J8ZnJvbXxncm91cHxoYXZpbmd8aW5zZXJ0fGludG98aW50cmluc2ljfGxldHxsaW5rc3xtYXRjaHxtZXJnZXxtb2R8bW92ZXxvZnxvcGVyYXRvcnxwYXRjaHxwaXBlbGluZXxyZWN1cnxzY3JpcHR8c2VsZWN0fHNldHxzbGlkaW5nfHN0YXRlfHN0cmVhbXx0b3x0dW1ibGluZ3x1cGRhdGV8dXNlfHdoZW58d2hlcmV8d2luZG93fHdpdGgpXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxudWxsfHRydWUpXFxiL2ksXG5cblx0XHQnbnVtYmVyJzogL1xcYig/OjBiWzAxX10qfDB4WzAtOWEtZkEtRl9dKnxcXGRbXFxkX10qKD86XFwuXFxkW1xcZF9dKik/KD86W0VlXVsrLV0/W1xcZF9dKyk/KVxcYi8sXG5cblx0XHQncGF0dGVybi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8lKD89Wyh7W10pLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvWy0rKlxcLyV+IV5dPT98PVs9Pl0/fCZbJj1dP3xcXHxbfD1dP3w8PD89P3w+Pj8+Pz0/fCg/OmFic2VudHxhbmR8bm90fG9yfHByZXNlbnR8eG9yKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogLzo6fFs7XFxbXFxdKClcXHtcXH0sLjpdLyxcblx0fTtcblxuXHR2YXIgaW50ZXJwb2xhdGlvblBhdHRlcm4gPSAvI1xceyg/OlteXCJ7fV18XFx7W157fV0qXFx9fFwiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcIikqXFx9Ly5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnRyZW1vclsnaW50ZXJwb2xhdGVkLXN0cmluZyddID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC8oXnxbXlxcXFxdKS8uc291cmNlICtcblx0XHRcdCcoPzonICtcblx0XHRcdCdcIlwiXCIoPzonICsgL1teXCJcXFxcI118XFxcXFtcXHNcXFNdfFwiKD8hXCJcIil8Iyg/IVxceykvLnNvdXJjZSArICd8JyArIGludGVycG9sYXRpb25QYXR0ZXJuICsgJykqXCJcIlwiJyArXG5cdFx0XHQnfCcgK1xuXHRcdFx0J1wiKD86JyArIC9bXlwiXFxcXFxcclxcbiNdfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCMoPyFcXHspLy5zb3VyY2UgKyAnfCcgKyBpbnRlcnBvbGF0aW9uUGF0dGVybiArICcpKlwiJyArXG5cdFx0XHQnKSdcblx0XHQpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnRlcnBvbGF0aW9uUGF0dGVybiksXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudHJlbW9yXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy50cm95ID0gUHJpc20ubGFuZ3VhZ2VzWyd0cmVtb3InXTtcblx0UHJpc20ubGFuZ3VhZ2VzLnRyaWNrbGUgPSBQcmlzbS5sYW5ndWFnZXNbJ3RyZW1vciddO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy50d2lnID0ge1xuXHQnY29tbWVudCc6IC9eXFx7I1tcXHNcXFNdKj8jXFx9JC8sXG5cblx0J3RhZy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXlxceyUtP1xccyopXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdkZWxpbWl0ZXInOiB7XG5cdFx0cGF0dGVybjogL15cXHtbeyVdLT98LT9bJX1dXFx9JC8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWydcIl18WydcIl0kL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86ZXZlbnxpZnxvZGQpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzphbmR8Yi1hbmR8Yi1vcnxiLXhvcnxlbmRzIHdpdGh8aW58aXN8bWF0Y2hlc3xub3R8b3J8c2FtZSBhc3xzdGFydHMgd2l0aCkoPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC9bPTw+XT0/fCE9fFxcKlxcKj98XFwvXFwvP3xcXD86P3xbLSt+JXxdL1xuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde306LixdL1xufTtcblxuUHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdGlmIChlbnYubGFuZ3VhZ2UgIT09ICd0d2lnJykge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdHZhciBwYXR0ZXJuID0gL1xceyg/OiNbXFxzXFxTXSo/I3wlW1xcc1xcU10qPyV8XFx7W1xcc1xcU10qP1xcfSlcXH0vZztcblx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3R3aWcnLCBwYXR0ZXJuKTtcbn0pO1xuXG5QcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAndHdpZycpO1xufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86QUNUfEFDVElGU1VCfENBUlJBWXxDQVNFfENMRUFSR0lGfENPQXxDT0FfSU5UfENPTlNUQU5UU3xDT05URU5UfENVUnxFRElUUEFORUx8RUZGRUNUfEVYVHxGSUxFfEZMVUlEVEVNUExBVEV8Rk9STXxGUkFNRXxGUkFNRVNFVHxHSUZCVUlMREVSfEdNRU5VfEdNRU5VX0ZPTERPVVR8R01FTlVfTEFZRVJTfEdQfEhNRU5VfEhSVUxFUnxIVE1MfElFTlZ8SUZTVUJ8SU1BR0V8SU1HTUVOVXxJTUdNRU5VSVRFTXxJTUdURVhUfElNR19SRVNPVVJDRXxJTkNMVURFX1RZUE9TQ1JJUFR8SlNNRU5VfEpTTUVOVUlURU18TExMfExPQURfUkVHSVNURVJ8Tk98UEFHRXxSRUNPUkRTfFJFU1RPUkVfUkVHSVNURVJ8VEVNUExBVEV8VEVYVHxUTUVOVXxUTUVOVUlURU18VE1FTlVfTEFZRVJTfFVTRVJ8VVNFUl9JTlR8X0dJRkJVSUxERVJ8Z2xvYmFsfGdsb2JhbFN0cmluZ3xnbG9iYWxWYXIpXFxiLztcblxuXHRQcmlzbS5sYW5ndWFnZXMudHlwb3NjcmlwdCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gbXVsdGlsaW5lIGNvbW1lbnRzIC8qICovXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBkb3VibGUtc2xhc2ggY29tbWVudHMgLSBpZ25vcmVkIHdoZW4gYmFja3NsYXNoZXMgb3IgY29sb24gaXMgZm91bmQgaW4gZnJvbnRcblx0XHRcdFx0Ly8gYWxzbyBpZ25vcmVkIHdoZW5ldmVyIGRpcmVjdGx5IGFmdGVyIGFuIGVxdWFsLXNpZ24sIGJlY2F1c2UgaXQgd291bGQgcHJvYmFibHkgYmUgYW4gdXJsIHdpdGhvdXQgcHJvdG9jb2xcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXDo9IFxcdF18KD86XnxbXj0gXFx0XSlbIFxcdF0rKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBoYXNoIGNvbW1lbnRzIC0gaWdub3JlZCB3aGVuIGxlYWRpbmcgcXVvdGUgaXMgZm91bmQgZm9yIGhleCBjb2xvcnMgaW4gc3RyaW5nc1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cIiddKSMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvbGQgaW5jbHVkZSBzdHlsZVxuXHRcdFx0XHRwYXR0ZXJuOiAvPElOQ0xVREVfVFlQT1NDUklQVDpcXHMqc291cmNlXFxzKj1cXHMqKD86XCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonKVxccyo+Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifCdbXidcXHJcXG5dKicvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvSU5DTFVERV9UWVBPU0NSSVBULyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gbmV3IGluY2x1ZGUgc3R5bGVcblx0XHRcdFx0cGF0dGVybjogL0BpbXBvcnRcXHMqKD86XCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdzdHJpbmcnOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXj1dKj1bPCBdPykoPzooPyFcXF1cXG4pLikqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL1xce1xcJC4qXFx9LywgLy8gY29uc3RhbnRzIGluY2x1ZGVcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J251bWJlcic6IC9eXFxkKyQvLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyx8Ol0vLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0Ly8gc3BlY2lhbCBoaWdobGlnaHRpbmcgZm9yIGluZGV4ZXMgb2YgYXJyYXlzIGluIHRhZ3Ncblx0XHRcdHBhdHRlcm46IC9cXGJcXGQrXFxzKlsuez1dLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvWy57PV0vLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RhZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC4/Wy1cXHdcXFxcXStcXC4/Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuLyxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46fF0vLFxuXHRcdCdvcGVyYXRvcic6IC9bPD5dPT98WyE9XT0/PT98LS0/fFxcK1xcKz98JiY/fFxcfFxcfD98Wz8qL35eJV0vLFxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy50c2NvbmZpZyA9IFByaXNtLmxhbmd1YWdlcy50eXBvc2NyaXB0O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy51bnJlYWxzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjYXRlZ29yeSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/Oig/OmF1dG9leHBhbmR8aGlkZXxzaG93KWNhdGVnb3JpZXN8dmFyKVxccypcXCgpW14oKV0rKD89XFwpKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J21ldGFkYXRhJzoge1xuXHRcdHBhdHRlcm46IC8oXFx3XFxzKik8XFxzKlxcdytcXHMqPVtePD58PVxcclxcbl0rKD86XFx8XFxzKlxcdytcXHMqPVtePD58PVxcclxcbl0rKSo+Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwcm9wZXJ0eSc6IC9cXGJcXHcrKD89XFxzKj0pLyxcblx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD58XS9cblx0XHR9XG5cdH0sXG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvYFxcdysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZW51bXxleHRlbmRzfGludGVyZmFjZXxzdGF0ZSg/OlxcKFxcKSk/fHN0cnVjdHx3aXRoaW4pXFxzKylcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWN0b3J8YXJyYXl8YXV0b3xhdXRvZXhwYW5kY2F0ZWdvcmllc3xib29sfGJyZWFrfGJ5dGV8Y2FzZXxjbGFzc3xjbGFzc2dyb3VwfGNsaWVudHxjb2VyY2V8Y29sbGFwc2VjYXRlZ29yaWVzfGNvbmZpZ3xjb25zdHxjb250aW51ZXxkZWZhdWx0fGRlZmF1bHRwcm9wZXJ0aWVzfGRlbGVnYXRlfGRlcGVuZHNvbnxkZXByZWNhdGVkfGRvfGRvbnRjb2xsYXBzZWNhdGVnb3JpZXN8ZWRpdGNvbnN0fGVkaXRpbmxpbmVuZXd8ZWxzZXxlbnVtfGV2ZW50fGV4ZWN8ZXhwb3J0fGV4dGVuZHN8ZmluYWx8ZmxvYXR8Zm9yfGZvcmNlc2NyaXB0b3JkZXJ8Zm9yZWFjaHxmdW5jdGlvbnxnb3RvfGd1aWR8aGlkZWNhdGVnb3JpZXN8aGlkZWRyb3Bkb3dufGlmfGlnbm9yZXN8aW1wbGVtZW50c3xpbmhlcml0c3xpbnB1dHxpbnR8aW50ZXJmYWNlfGl0ZXJhdG9yfGxhdGVudHxsb2NhbHxtYXRlcmlhbHxuYW1lfG5hdGl2ZXxuYXRpdmVyZXBsaWNhdGlvbnxub2V4cG9ydHxub250cmFuc2llbnR8bm90ZWRpdGlubGluZW5ld3xub3RwbGFjZWFibGV8b3BlcmF0b3J8b3B0aW9uYWx8b3V0fHBhd258cGVyb2JqZWN0Y29uZmlnfHBlcm9iamVjdGxvY2FsaXplZHxwbGFjZWFibGV8cG9zdG9wZXJhdG9yfHByZW9wZXJhdG9yfHByaXZhdGV8cHJvdGVjdGVkfHJlbGlhYmxlfHJlcGxpY2F0aW9ufHJldHVybnxzZXJ2ZXJ8c2hvd2NhdGVnb3JpZXN8c2ltdWxhdGVkfHNpbmd1bGFyfHN0YXRlfHN0YXRpY3xzdHJpbmd8c3RydWN0fHN0cnVjdGRlZmF1bHR8c3RydWN0ZGVmYXVsdHByb3BlcnRpZXN8c3dpdGNofHRleHR1cmV8dHJhbnNpZW50fHRyYXZlbHx1bnJlbGlhYmxlfHVudGlsfHZhcnx2ZWN0b3J8d2hpbGV8d2l0aGluKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxuXHQvLyBodHRwczovL2RvY3MudW5yZWFsZW5naW5lLmNvbS91ZGsvVGhyZWUvVW5yZWFsU2NyaXB0RXhwcmVzc2lvbnMuaHRtbFxuXHQnb3BlcmF0b3InOiAvPj58PDx8LS18XFwrXFwrfFxcKlxcKnxbLSsqL34hPTw+JEBdPT98JiY/fFxcfFxcfD98XFxeXFxeP3xbPzolXXxcXGIoPzpDbG9ja3dpc2VGcm9tfENyb3NzfERvdClcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9OywuXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy51YyA9IFByaXNtLmxhbmd1YWdlcy51c2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLnVucmVhbHNjcmlwdDtcblxuUHJpc20ubGFuZ3VhZ2VzLnVvcmF6b3IgPSB7XG5cdCdjb21tZW50LWhhc2gnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NvbW1lbnQtc2xhc2gnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWydcIl18WydcIl0kL1xuXHRcdH0sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzb3VyY2UtbGF5ZXJzJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphcm1zfGJhY2twYWNrfGJsdWV8YnJhY2VsZXR8Y2FuY2VsfGNsZWFyfGNsb2FrfGNyaW1pbmFsfGVhcnJpbmdzfGVuZW15fGZhY2lhbGhhaXJ8ZnJpZW5kfGZyaWVuZGx5fGdsb3Zlc3xncmF5fGdyZXl8Z3JvdW5kfGhhaXJ8aGVhZHxpbm5lcmxlZ3N8aW5uZXJ0b3Jzb3xpbm5vY2VudHxsZWZ0aGFuZHxtaWRkbGV0b3Jzb3xtdXJkZXJlcnxuZWNrfG5vbmZyaWVuZGx5fG9uZWhhbmRlZHNlY29uZGFyeXxvdXRlcmxlZ3N8b3V0ZXJ0b3Jzb3xwYW50c3xyZWR8cmlnaHRoYW5kfHJpbmd8c2VsZnxzaGlydHxzaG9lc3x0YWxpc21hbnx3YWlzdClcXGIvaSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnc291cmNlLWNvbW1hbmRzJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbGxpYW5jZXxhdHRhY2t8Y2FzdHxjbGVhcmFsbHxjbGVhcmlnbm9yZXxjbGVhcmpvdXJuYWx8Y2xlYXJsaXN0fGNsZWFyc3lzbXNnfGNyZWF0ZWxpc3R8Y3JlYXRldGltZXJ8ZGNsaWNrfGRjbGlja3R5cGV8ZGNsaWNrdmFyfGRyZXNzfGRyZXNzY29uZmlnfGRyb3B8ZHJvcHJlbGxvY3xlbW90ZXxnZXRsYWJlbHxndWlsZHxndW1wY2xvc2V8Z3VtcHJlc3BvbnNlfGhvdGtleXxpZ25vcmV8bGFzdHRhcmdldHxsaWZ0fGxpZnR0eXBlfG1lbnV8bWVudXJlc3BvbnNlfG1zZ3xvcmd8b3JnYW5pemV8b3JnYW5pemVyfG92ZXJoZWFkfHBhdXNlfHBvcGxpc3R8cG90aW9ufHByb21wdHJlc3BvbnNlfHB1c2hsaXN0fHJlbW92ZWxpc3R8cmVtb3ZldGltZXJ8cmVuYW1lfHJlc3RvY2t8c2F5fHNjYXZ8c2NhdmVuZ2VyfHNjcmlwdHxzZXRhYmlsaXR5fHNldGxhc3R0YXJnZXR8c2V0c2tpbGx8c2V0dGltZXJ8c2V0dmFyfHN5c21zZ3x0YXJnZXR8dGFyZ2V0bG9jfHRhcmdldHJlbGxvY3x0YXJnZXR0eXBlfHVuZHJlc3N8dW5pZ25vcmV8dW5zZXR2YXJ8dXNlb2JqZWN0fHVzZW9uY2V8dXNlc2tpbGx8dXNldHlwZXx2aXJ0dWV8d2FpdHx3YWl0Zm9yZ3VtcHx3YWl0Zm9ybWVudXx3YWl0Zm9ycHJvbXB0fHdhaXRmb3JzdGF0fHdhaXRmb3JzeXNtc2d8d2FpdGZvcnRhcmdldHx3YWxrfHdmc3lzbXNnfHdmdHx3aGlzcGVyfHllbGwpXFxiLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQndGFnLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyheXFx7JS0/XFxzKilcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2RlbGltaXRlcic6IHtcblx0XHRwYXR0ZXJuOiAvXlxce1t7JV0tP3wtP1slfV1cXH0kLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86YXRsaXN0fGNsb3NlfGNsb3Nlc3R8Y291bnR8Y291bnRlcnxjb3VudHR5cGV8ZGVhZHxkZXh8ZGlmZmhpdHN8ZGlmZm1hbmF8ZGlmZnN0YW18ZGlmZndlaWdodHxmaW5kfGZpbmRidWZmfGZpbmRkZWJ1ZmZ8ZmluZGxheWVyfGZpbmR0eXBlfGZpbmR0eXBlbGlzdHxmb2xsb3dlcnN8Z3VtcGV4aXN0c3xoaWRkZW58aGl0c3xocHxodWV8aHVtYW58aHVtYW5vaWR8aW5ndW1wfGlubGlzdHxpbnN5c21lc3NhZ2V8aW5zeXNtc2d8aW50fGludnVsfGxoYW5kZW1wdHl8bGlzdHxsaXN0ZXhpc3RzfG1hbmF8bWF4aGl0c3xtYXhocHxtYXhtYW5hfG1heHN0YW18bWF4d2VpZ2h0fG1vbnN0ZXJ8bW91bnRlZHxuYW1lfG5leHR8bm90b3xwYXJhbHl6ZWR8cG9pc29uZWR8cG9zaXRpb258cHJldnxwcmV2aW91c3xxdWV1ZWR8cmFuZHxyYW5kb218cmhhbmRlbXB0eXxza2lsbHxzdGFtfHN0cnx0YXJnZXRleGlzdHN8dGltZXJ8dGltZXJleGlzdHN8dmFyZXhpc3R8d2FybW9kZXx3ZWlnaHQpXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGJyZWFrfGNvbnRpbnVlfGVsc2V8ZWxzZWlmfGVuZGZvcnxlbmRpZnxlbmR3aGlsZXxmb3J8aWZ8bG9vcHxub3R8b3J8cmVwbGF5fHN0b3B8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bLStdP1xcZCspPy8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccykoPzphbmR8Yi1hbmR8Yi1vcnxiLXhvcnxlbmRzIHdpdGh8aW58aXN8bWF0Y2hlc3xub3R8b3J8c2FtZSBhc3xzdGFydHMgd2l0aCkoPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC9bPTw+XT0/fCE9fFxcKlxcKj98XFwvXFwvP3xcXD86P3xbLSt+JXxdL1xuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde306LixdL1xufTtcblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuXG5QcmlzbS5sYW5ndWFnZXMudXJpID0ge1xuXHQnc2NoZW1lJzoge1xuXHRcdHBhdHRlcm46IC9eW2Etel1bYS16MC05Ky4tXSo6L2ltLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzY2hlbWUtZGVsaW1pdGVyJzogLzokL1xuXHRcdH1cblx0fSxcblx0J2ZyYWdtZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jW1xcd1xcLS5+ISQmJygpKissOz0lOkAvP10qLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmcmFnbWVudC1kZWxpbWl0ZXInOiAvXiMvXG5cdFx0fVxuXHR9LFxuXHQncXVlcnknOiB7XG5cdFx0cGF0dGVybjogL1xcP1tcXHdcXC0ufiEkJicoKSorLDs9JTpALz9dKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncXVlcnktZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcPy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwYWlyLWRlbGltaXRlcic6IC9bJjtdLyxcblx0XHRcdCdwYWlyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXltePV1bXFxzXFxTXSovLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5JzogL15bXj1dKy8sXG5cdFx0XHRcdFx0J3ZhbHVlJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhePSlbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2F1dGhvcml0eSc6IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHQvXlxcL1xcLy8uc291cmNlXG5cdFx0XHQvLyBbIHVzZXJpbmZvIFwiQFwiIF1cblx0XHRcdCsgLyg/OltcXHdcXC0ufiEkJicoKSorLDs9JTpdKkApPy8uc291cmNlXG5cdFx0XHQvLyBob3N0XG5cdFx0XHQrIChcblx0XHRcdFx0Jyg/Oidcblx0XHRcdFx0Ly8gSVAtbGl0ZXJhbFxuXHRcdFx0XHQrIC9cXFsoPzpbMC05YS1mQS1GOi5dezIsNDh9fHZbMC05YS1mQS1GXStcXC5bXFx3XFwtLn4hJCYnKCkqKyw7PV0rKVxcXS8uc291cmNlXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdC8vIElQdjRhZGRyZXNzIG9yIHJlZ2lzdGVyZWQgbmFtZVxuXHRcdFx0XHQrIC9bXFx3XFwtLn4hJCYnKCkqKyw7PSVdKi8uc291cmNlXG5cdFx0XHRcdCsgJyknXG5cdFx0XHQpXG5cdFx0XHQvLyBbIFwiOlwiIHBvcnQgXVxuXHRcdFx0KyAvKD86OlxcZCopPy8uc291cmNlLFxuXHRcdFx0J20nXG5cdFx0KSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdXRob3JpdHktZGVsaW1pdGVyJzogL15cXC9cXC8vLFxuXHRcdFx0J3VzZXItaW5mby1zZWdtZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXltcXHdcXC0ufiEkJicoKSorLDs9JTpdKkAvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndXNlci1pbmZvLWRlbGltaXRlcic6IC9AJC8sXG5cdFx0XHRcdFx0J3VzZXItaW5mbyc6IC9eW1xcd1xcLS5+ISQmJygpKissOz0lOl0rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3BvcnQtc2VnbWVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogLzpcXGQqJC8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwb3J0LWRlbGltaXRlcic6IC9eOi8sXG5cdFx0XHRcdFx0J3BvcnQnOiAvXlxcZCsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnaG9zdCc6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpcC1saXRlcmFsJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL15cXFtbXFxzXFxTXStcXF0kLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnaXAtbGl0ZXJhbC1kZWxpbWl0ZXInOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHRcdFx0J2lwdi1mdXR1cmUnOiAvXnZbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0XHQnaXB2Ni1hZGRyZXNzJzogL15bXFxzXFxTXSsvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnaXB2NC1hZGRyZXNzJzogL14oPzooPzpbMDMtOV1cXGQ/fFsxMl1cXGR7MCwyfSlcXC4pezN9KD86WzAzLTldXFxkP3xbMTJdXFxkezAsMn0pJC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3BhdGgnOiB7XG5cdFx0cGF0dGVybjogL15bXFx3XFwtLn4hJCYnKCkqKyw7PSU6QC9dKy9tLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3BhdGgtc2VwYXJhdG9yJzogL1xcLy9cblx0XHR9XG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy51cmwgPSBQcmlzbS5sYW5ndWFnZXMudXJpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBpbnRlcnBvbGF0aW9uRXhwciA9IHtcblx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRpbnNpZGU6IG51bGxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMudiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvcj8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0XHRhbGlhczogJ3F1b3RlZC1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCQoPzpcXHtbXnt9XSpcXH18XFx3Kyg/OlxcLlxcdysoPzpcXChbXlxcKFxcKV0qXFwpKT98XFxbW15cXFtcXF1dK1xcXSkqKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcd1tcXHNcXFNdKiQvLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxce3xcXH0kLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1leHByZXNzaW9uJzogaW50ZXJwb2xhdGlvbkV4cHJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfGludGVyZmFjZXxzdHJ1Y3R8dHlwZSlcXHMrKSg/OkNcXC4pP1xcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvKD86XFxiKD86X19nbG9iYWx8YXN8YXNtfGFzc2VydHxhdG9taWN8YnJlYWt8Y2hhbnxjb25zdHxjb250aW51ZXxkZWZlcnxlbHNlfGVtYmVkfGVudW18Zm58Zm9yfGdvKD86dG8pP3xpZnxpbXBvcnR8aW58aW50ZXJmYWNlfGlzfGxvY2t8bWF0Y2h8bW9kdWxlfG11dHxub25lfG9yfHB1YnxyZXR1cm58cmxvY2t8c2VsZWN0fHNoYXJlZHxzaXplb2Z8c3RhdGljfHN0cnVjdHx0eXBlKD86b2YpP3x1bmlvbnx1bnNhZmUpfFxcJCg/OmVsc2V8Zm9yfGlmKXwjKD86ZmxhZ3xpbmNsdWRlKSlcXGIvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mXFxkXSsoPzpfW2EtZlxcZF0rKSp8MGJbMDFdKyg/Ol9bMDFdKykqfDBvWzAtN10rKD86X1swLTddKykqfFxcZCsoPzpfXFxkKykqKD86XFwuXFxkKyg/Ol9cXGQrKSopPylcXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvfnxcXD98WypcXC8lXiE9XT0/fFxcK1s9K10/fC1bPS1dP3xcXHxbPXxdP3wmKD86PXwmfFxcXj0/KT98Pig/Oj49P3w9KT98PCg/Ojw9P3w9fC0pP3w6PXxcXC5cXC5cXC4/Lyxcblx0XHQnYnVpbHRpbic6IC9cXGIoPzphbnkoPzpfZmxvYXR8X2ludCk/fGJvb2x8Ynl0ZSg/OnB0cik/fGNoYXJwdHJ8Zig/OjMyfDY0KXxpKD86OHwxNnw2NHwxMjh8bnQpfHJ1bmV8c2l6ZV90fHN0cmluZ3x1KD86MTZ8MzJ8NjR8MTI4KXx2b2lkcHRyKVxcYi9cblx0fSk7XG5cblx0aW50ZXJwb2xhdGlvbkV4cHIuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnY7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndicsICdzdHJpbmcnLCB7XG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxgfFxcXFw/W15gXXsxLDJ9KWAvLCAvLyB1c2luZyB7MSwyfSBpbnN0ZWFkIG9mIGB1YCBmbGFnIGZvciBjb21wYXRpYmlsaXR5XG5cdFx0XHRhbGlhczogJ3J1bmUnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd2JywgJ29wZXJhdG9yJywge1xuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKVxcWyg/OmRlcHJlY2F0ZWR8ZGlyZWN0X2FycmF5X2FjY2Vzc3xmbGFnfGlubGluZXxsaXZlfHJlZl9vbmx5fHR5cGVkZWZ8dW5zYWZlX2ZufHdpbmRvd3Nfc3RkY2FsbClcXF0vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Fubm90YXRpb24nLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdXS8sXG5cdFx0XHRcdCdrZXl3b3JkJzogL1xcdysvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdHBhdHRlcm46IC88XFx3Kz4oPz1cXHMqW1xcKVxce10pLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+XS8sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogL1xcdysvXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd2JywgJ2Z1bmN0aW9uJywge1xuXHRcdCdnZW5lcmljLWZ1bmN0aW9uJzoge1xuXHRcdFx0Ly8gZS5nLiBmb288VD4oIC4uLlxuXHRcdFx0cGF0dGVybjogL1xcYlxcdytcXHMqPFxcdys+KD89XFwoKS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL15cXHcrLyxcblx0XHRcdFx0J2dlbmVyaWMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLzxcXHcrPi8sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMudi5nZW5lcmljLmluc2lkZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZhbGEgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0Ly8gQ2xhc3NlcyBjb3BpZWQgZnJvbSBwcmlzbS1jc2hhcnBcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gKEZvbyBiYXIsIEJhciBiYXopXG5cdFx0XHRwYXR0ZXJuOiAvXFxiW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiKD89KD86XFw/XFxzK3xcXCo/XFxzK1xcKj8pXFx3KS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBbRm9vXVxuXHRcdFx0cGF0dGVybjogLyhcXFspW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBGb28gOiBCYXJcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8aW50ZXJmYWNlKVxccytbQS1aXVxcdyooPzpcXC5cXHcrKSpcXHMqOlxccyopW0EtWl1cXHcqKD86XFwuXFx3KykqXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0cHVuY3R1YXRpb246IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBGb29cblx0XHRcdHBhdHRlcm46IC8oKD86XFxiKD86Y2xhc3N8ZW51bXxpbnRlcmZhY2V8bmV3fHN0cnVjdClcXHMrKXwoPzpjYXRjaFxccytcXCgpKVtBLVpdXFx3Kig/OlxcLlxcdyspKlxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YXN8YXNzZXJ0fGFzeW5jfGJhc2V8Ym9vbHxicmVha3xjYXNlfGNhdGNofGNoYXJ8Y2xhc3N8Y29uc3R8Y29uc3RydWN0fGNvbnRpbnVlfGRlZmF1bHR8ZGVsZWdhdGV8ZGVsZXRlfGRvfGRvdWJsZXxkeW5hbWljfGVsc2V8ZW5zdXJlc3xlbnVtfGVycm9yZG9tYWlufGV4dGVybnxmaW5hbGx5fGZsb2F0fGZvcnxmb3JlYWNofGdldHxpZnxpbnxpbmxpbmV8aW50fGludDE2fGludDMyfGludDY0fGludDh8aW50ZXJmYWNlfGludGVybmFsfGlzfGxvY2t8bG9uZ3xuYW1lc3BhY2V8bmV3fG51bGx8b3V0fG92ZXJyaWRlfG93bmVkfHBhcmFtc3xwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVmfHJlcXVpcmVzfHJldHVybnxzZXR8c2hvcnR8c2lnbmFsfHNpemVvZnxzaXplX3R8c3NpemVfdHxzdGF0aWN8c3RyaW5nfHN0cnVjdHxzd2l0Y2h8dGhpc3x0aHJvd3x0aHJvd3N8dHJ5fHR5cGVvZnx1Y2hhcnx1aW50fHVpbnQxNnx1aW50MzJ8dWludDY0fHVpbnQ4fHVsb25nfHVuaWNoYXJ8dW5vd25lZHx1c2hvcnR8dXNpbmd8dmFsdWV8dmFyfHZpcnR1YWx8dm9pZHx2b2xhdGlsZXx3ZWFrfHdoaWxlfHlpZWxkKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxccypcXCgpLyxcblx0J251bWJlcic6IC8oPzpcXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KSg/OmZ8dT9sPyk/L2ksXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18JiZ8XFx8XFx8fDw8PT98Pj49P3w9PnwtPnx+fFsrXFwtKlxcLyUmXnw9ITw+XT0/fFxcP1xcPz98XFwuXFwuXFwuLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdLyxcblx0J2NvbnN0YW50JzogL1xcYltBLVowLTlfXStcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndmFsYScsICdzdHJpbmcnLCB7XG5cdCdyYXctc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCd0ZW1wbGF0ZS1zdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL0BcIltcXHNcXFNdKj9cIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpcXChbXildKlxcKXxbYS16QS1aXVxcdyopLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFwoP3xcXCkkLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMudmFsYVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndmFsYScsICdrZXl3b3JkJywge1xuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogL1xcLyg/OlxcWyg/OlteXFxdXFxcXFxcclxcbl18XFxcXC4pKlxcXXxcXFxcLnxbXi9cXFxcXFxbXFxyXFxuXSkrXFwvW2ltc3hdezAsNH0oPz1cXHMqKD86JHxbXFxyXFxuLC47fSlcXF1dKSkvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyZWdleC1zb3VyY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFxcLylbXFxzXFxTXSsoPz1cXC9bYS16XSokKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcmVnZXgnLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5yZWdleFxuXHRcdFx0fSxcblx0XHRcdCdyZWdleC1kZWxpbWl0ZXInOiAvXlxcLy8sXG5cdFx0XHQncmVnZXgtZmxhZ3MnOiAvXlthLXpdKyQvLFxuXHRcdH1cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnZlbG9jaXR5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuXG5cdHZhciB2ZWxvY2l0eSA9IHtcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSg/OlxcXFxcXFxcKSopXFwkIT8oPzpbYS16XVtcXHctXSooPzpcXChbXildKlxcKSk/KD86XFwuW2Etel1bXFx3LV0qKD86XFwoW14pXSpcXCkpP3xcXFtbXlxcXV0rXFxdKSp8XFx7W159XStcXH0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7fSAvLyBTZWUgYmVsb3dcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcInwnW14nXSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1s9ITw+XT0/fFsrKi8lLV18JiZ8XFx8XFx8fFxcLlxcLnxcXGIoPzplcXxnW2V0XXxsW2V0XXxuKD86ZXxvdCkpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdOiwuXS9cblx0fTtcblxuXHR2ZWxvY2l0eS52YXJpYWJsZS5pbnNpZGUgPSB7XG5cdFx0J3N0cmluZyc6IHZlbG9jaXR5WydzdHJpbmcnXSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFteXFx3LV0pW2Etel1bXFx3LV0qKD89XFwoKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogdmVsb2NpdHlbJ251bWJlciddLFxuXHRcdCdib29sZWFuJzogdmVsb2NpdHlbJ2Jvb2xlYW4nXSxcblx0XHQncHVuY3R1YXRpb24nOiB2ZWxvY2l0eVsncHVuY3R1YXRpb24nXVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3ZlbG9jaXR5JywgJ2NvbW1lbnQnLCB7XG5cdFx0J3VucGFyc2VkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pI1xcW1xcW1tcXHNcXFNdKj9cXF1cXF0jLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14jXFxbXFxbfFxcXVxcXSMkL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZlbG9jaXR5LWNvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSNcXCpbXFxzXFxTXSo/XFwqIy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIyMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKD86XFxcXFxcXFwpKikjQD8oPzpbYS16XVtcXHctXSp8XFx7W2Etel1bXFx3LV0qXFx9KSg/OlxccypcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSk/L2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eI0A/KD86W2Etel1bXFx3LV0qfFxce1thLXpdW1xcdy1dKlxcfSl8XFxiaW5cXGIvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXN0OiB2ZWxvY2l0eVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogdmVsb2NpdHlbJ3ZhcmlhYmxlJ11cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnZlbG9jaXR5Wyd0YWcnXS5pbnNpZGVbJ2F0dHItdmFsdWUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy52ZWxvY2l0eTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudmVyaWxvZyA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2VybmVsLWZ1bmN0aW9uJzoge1xuXHRcdC8vIHN1cHBvcnQgZm9yIGFueSBrZXJuZWwgZnVuY3Rpb24gKGV4OiAkZGlzcGxheSgpKVxuXHRcdHBhdHRlcm46IC9cXEJcXCRcXHcrXFxiLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQvLyBzdXBwb3J0IGZvciB1c2VyIGRlZmluZWQgY29uc3RhbnRzIChleDogYGRlZmluZSlcblx0J2NvbnN0YW50JzogL1xcQmBcXHcrXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0Ly8gc3VwcG9ydCBmb3IgdmVyaWxvZyBhbmQgc3lzdGVtIHZlcmlsb2cga2V5d29yZHNcblx0J2tleXdvcmQnOiAvXFxiKD86YWxpYXN8YW5kfGFzc2VydHxhc3NpZ258YXNzdW1lfGF1dG9tYXRpY3xiZWZvcmV8YmVnaW58YmluZHxiaW5zfGJpbnNvZnxiaXR8YnJlYWt8YnVmfGJ1ZmlmMHxidWZpZjF8Ynl0ZXxjYXNlfGNhc2V4fGNhc2V6fGNlbGx8Y2hhbmRsZXxjbGFzc3xjbG9ja2luZ3xjbW9zfGNvbmZpZ3xjb25zdHxjb25zdHJhaW50fGNvbnRleHR8Y29udGludWV8Y292ZXJ8Y292ZXJncm91cHxjb3ZlcnBvaW50fGNyb3NzfGRlYXNzaWdufGRlZmF1bHR8ZGVmcGFyYW18ZGVzaWdufGRpc2FibGV8ZGlzdHxkb3xlZGdlfGVsc2V8ZW5kfGVuZGNhc2V8ZW5kY2xhc3N8ZW5kY2xvY2tpbmd8ZW5kY29uZmlnfGVuZGZ1bmN0aW9ufGVuZGdlbmVyYXRlfGVuZGdyb3VwfGVuZGludGVyZmFjZXxlbmRtb2R1bGV8ZW5kcGFja2FnZXxlbmRwcmltaXRpdmV8ZW5kcHJvZ3JhbXxlbmRwcm9wZXJ0eXxlbmRzZXF1ZW5jZXxlbmRzcGVjaWZ5fGVuZHRhYmxlfGVuZHRhc2t8ZW51bXxldmVudHxleHBlY3R8ZXhwb3J0fGV4dGVuZHN8ZXh0ZXJufGZpbmFsfGZpcnN0X21hdGNofGZvcnxmb3JjZXxmb3JlYWNofGZvcmV2ZXJ8Zm9ya3xmb3Jram9pbnxmdW5jdGlvbnxnZW5lcmF0ZXxnZW52YXJ8aGlnaHowfGhpZ2h6MXxpZnxpZmZ8aWZub25lfGlnbm9yZV9iaW5zfGlsbGVnYWxfYmluc3xpbXBvcnR8aW5jZGlyfGluY2x1ZGV8aW5pdGlhbHxpbm91dHxpbnB1dHxpbnNpZGV8aW5zdGFuY2V8aW50fGludGVnZXJ8aW50ZXJmYWNlfGludGVyc2VjdHxqb2lufGpvaW5fYW55fGpvaW5fbm9uZXxsYXJnZXxsaWJsaXN0fGxpYnJhcnl8bG9jYWx8bG9jYWxwYXJhbXxsb2dpY3xsb25naW50fG1hY3JvbW9kdWxlfG1hdGNoZXN8bWVkaXVtfG1vZHBvcnR8bW9kdWxlfG5hbmR8bmVnZWRnZXxuZXd8bm1vc3xub3J8bm9zaG93Y2FuY2VsbGVkfG5vdHxub3RpZjB8bm90aWYxfG51bGx8b3J8b3V0cHV0fHBhY2thZ2V8cGFja2VkfHBhcmFtZXRlcnxwbW9zfHBvc2VkZ2V8cHJpbWl0aXZlfHByaW9yaXR5fHByb2dyYW18cHJvcGVydHl8cHJvdGVjdGVkfHB1bGwwfHB1bGwxfHB1bGxkb3dufHB1bGx1cHxwdWxzZXN0eWxlX29uZGV0ZWN0fHB1bHNlc3R5bGVfb25ldmVudHxwdXJlfHJhbmR8cmFuZGN8cmFuZGNhc2V8cmFuZHNlcXVlbmNlfHJjbW9zfHJlYWx8cmVhbHRpbWV8cmVmfHJlZ3xyZWxlYXNlfHJlcGVhdHxyZXR1cm58cm5tb3N8cnBtb3N8cnRyYW58cnRyYW5pZjB8cnRyYW5pZjF8c2NhbGFyZWR8c2VxdWVuY2V8c2hvcnRpbnR8c2hvcnRyZWFsfHNob3djYW5jZWxsZWR8c2lnbmVkfHNtYWxsfHNvbHZlfHNwZWNpZnl8c3BlY3BhcmFtfHN0YXRpY3xzdHJpbmd8c3Ryb25nMHxzdHJvbmcxfHN0cnVjdHxzdXBlcnxzdXBwbHkwfHN1cHBseTF8dGFibGV8dGFnZ2VkfHRhc2t8dGhpc3x0aHJvdWdob3V0fHRpbWV8dGltZXByZWNpc2lvbnx0aW1ldW5pdHx0cmFufHRyYW5pZjB8dHJhbmlmMXx0cml8dHJpMHx0cmkxfHRyaWFuZHx0cmlvcnx0cmlyZWd8dHlwZXx0eXBlZGVmfHVuaW9ufHVuaXF1ZXx1bnNpZ25lZHx1c2V8dXdpcmV8dmFyfHZlY3RvcmVkfHZpcnR1YWx8dm9pZHx3YWl0fHdhaXRfb3JkZXJ8d2FuZHx3ZWFrMHx3ZWFrMXx3aGlsZXx3aWxkY2FyZHx3aXJlfHdpdGh8d2l0aGlufHdvcnx4bm9yfHhvcilcXGIvLFxuXHQvLyBib2xkIGhpZ2hsaWdodGluZyBmb3IgYWxsIHZlcmlsb2cgYW5kIHN5c3RlbSB2ZXJpbG9nIGxvZ2ljIGJsb2Nrc1xuXHQnaW1wb3J0YW50JzogL1xcYig/OmFsd2F5c3xhbHdheXNfY29tYnxhbHdheXNfZmZ8YWx3YXlzX2xhdGNoKVxcYig/OiAqQCk/Lyxcblx0Ly8gc3VwcG9ydCBmb3IgdGltZSB0aWNrcywgdmVjdG9ycywgYW5kIHJlYWwgbnVtYmVyc1xuXHQnbnVtYmVyJzogL1xcQiMjP1xcZCt8KD86XFxiXFxkKyk/J1tvZGJoXSA/W1xcZGEtZnp4Xz9dK3xcXGIoPzpcXGQqWy5fXSk/XFxkKyg/OmVbLStdP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvWy0re31efiUqXFwvPz0hPD4mfF0rLyxcblx0J3B1bmN0dWF0aW9uJzogL1tbXFxdOygpLC46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy52aGRsID0ge1xuXHQnY29tbWVudCc6IC8tLS4rLyxcblx0Ly8gc3VwcG9ydCBmb3IgYWxsIGxvZ2ljIHZlY3RvcnNcblx0J3ZoZGwtdmVjdG9ycyc6IHtcblx0XHQncGF0dGVybic6IC9cXGJbb3hiXVwiW1xcZGEtZl9dK1wifFwiWzAxdXh6d2xoLV0rXCIvaSxcblx0XHQnYWxpYXMnOiAnbnVtYmVyJ1xuXHR9LFxuXHQvLyBzdXBwb3J0IGZvciBvcGVyYXRvciBvdmVybG9hZGluZyBpbmNsdWRlZFxuXHQncXVvdGVkLWZ1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cIlxcUys/XCIoPz1cXCgpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnc3RyaW5nJzogL1wiKD86W15cXFxcXCJcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSpcIi8sXG5cdCdhdHRyaWJ1dGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYidcXHcrLyxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0Ly8gc3VwcG9ydCBmb3IgcHJlZGVmaW5lZCBhdHRyaWJ1dGVzIGluY2x1ZGVkXG5cdCdrZXl3b3JkJzogL1xcYig/OmFjY2Vzc3xhZnRlcnxhbGlhc3xhbGx8YXJjaGl0ZWN0dXJlfGFycmF5fGFzc2VydHxhdHRyaWJ1dGV8YmVnaW58YmxvY2t8Ym9keXxidWZmZXJ8YnVzfGNhc2V8Y29tcG9uZW50fGNvbmZpZ3VyYXRpb258Y29uc3RhbnR8ZGlzY29ubmVjdHxkb3dudG98ZWxzZXxlbHNpZnxlbmR8ZW50aXR5fGV4aXR8ZmlsZXxmb3J8ZnVuY3Rpb258Z2VuZXJhdGV8Z2VuZXJpY3xncm91cHxndWFyZGVkfGlmfGltcHVyZXxpbnxpbmVydGlhbHxpbm91dHxpc3xsYWJlbHxsaWJyYXJ5fGxpbmthZ2V8bGl0ZXJhbHxsb29wfG1hcHxuZXd8bmV4dHxudWxsfG9mfG9ufG9wZW58b3RoZXJzfG91dHxwYWNrYWdlfHBvcnR8cG9zdHBvbmVkfHByaXZhdGV8cHJvY2VkdXJlfHByb2Nlc3N8cHVyZXxyYW5nZXxyZWNvcmR8cmVnaXN0ZXJ8cmVqZWN0fHJlcG9ydHxyZXR1cm58c2VsZWN0fHNldmVyaXR5fHNoYXJlZHxzaWduYWx8c3VidHlwZXx0aGVufHRvfHRyYW5zcG9ydHx0eXBlfHVuYWZmZWN0ZWR8dW5pdHN8dW50aWx8dXNlfHZhcmlhYmxlfHZpZXd8d2FpdHx3aGVufHdoaWxlfHdpdGgpXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCdmdW5jdGlvbic6IC9cXHcrKD89XFwoKS8sXG5cdC8vIGRlY2ltYWwsIGJhc2VkLCBwaHlzaWNhbCwgYW5kIGV4cG9uZW50aWFsIG51bWJlcnMgc3VwcG9ydGVkXG5cdCdudW1iZXInOiAvJ1swMXV4endsaC1dJ3xcXGIoPzpcXGQrI1tcXGRhLWZfLl0rI3xcXGRbXFxkXy5dKikoPzplWy0rXT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogL1s8Pl09P3w6PXxbLSsqLyY9XXxcXGIoPzphYnN8YW5kfG1vZHxuYW5kfG5vcnxub3R8b3J8cmVtfHJvbHxyb3J8c2xhfHNsbHxzcmF8c3JsfHhub3J8eG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudmltID0ge1xuXHQnc3RyaW5nJzogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxyXFxuXXwnJykqJy8sXG5cdCdjb21tZW50JzogL1wiLiovLFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxcKCkvLFxuXHQna2V5d29yZCc6IC9cXGIoPzpOfE5leHR8UHxQcmludHxYfFhNTGVudHxYTUxuc3xhYnxhYmJyZXZpYXRlfGFiY3xhYmNsZWFyfGFib3xhYm92ZWxlZnR8YWx8YWxsfGFyfGFyZ2F8YXJnYWRkfGFyZ2R8YXJnZGVsZXRlfGFyZ2RvfGFyZ2V8YXJnZWRpdHxhcmdnfGFyZ2dsb2JhbHxhcmdsfGFyZ2xvY2FsfGFyZ3N8YXJndXxhcmd1bWVudHxhc3xhc2NpaXxifGJOfGJOZXh0fGJhfGJhZHxiYWRkfGJhbGx8YmR8YmRlbGV0ZXxiZXxiZWx8YmVsb3dyaWdodHxiZnxiZmlyc3R8Ymx8Ymxhc3R8Ym18Ym1vZGlmaWVkfGJufGJuZXh0fGJvfGJvdHJpZ2h0fGJwfGJwcmV2aW91c3xicnxicmVhfGJyZWFrfGJyZWFrYXxicmVha2FkZHxicmVha2R8YnJlYWtkZWx8YnJlYWtsfGJyZWFrbGlzdHxicmV3aW5kfGJyb3xicm93c2V8YnVmZG98YnVmZmVyfGJ1ZmZlcnN8YnVufGJ1bmxvYWR8Ynd8YndpcGVvdXR8Y3xjTnxjTmV4dHxjTmZjTmZpbGV8Y2F8Y2FiYnJldnxjYWJjfGNhYmNsZWFyfGNhZHxjYWRkYnxjYWRkYnVmZmVyfGNhZGRleHByfGNhZGRmfGNhZGRmaWxlfGNhbHxjYWxsfGNhdHxjYXRjaHxjYnxjYnVmZmVyfGNjfGNjbHxjY2xvc2V8Y2R8Y2V8Y2VudGVyfGNleHxjZXhwcnxjZnxjZmlsZXxjZmlyfGNmaXJzdHxjZ3xjZ2V0YnxjZ2V0YnVmZmVyfGNnZXRlfGNnZXRleHByfGNnZXRmaWxlfGNoYW5nZXxjaGFuZ2VzfGNoZHxjaGRpcnxjaGV8Y2hlY2twYXRofGNoZWNrdHxjaGVja3RpbWV8Y2x8Y2xhfGNsYXN0fGNsaXN0fGNsb3xjbG9zZXxjbWFwY3xjbWFwY2xlYXJ8Y258Y25ld3xjbmV3ZXJ8Y25leHR8Y25mfGNuZmlsZXxjbm9yZWF8Y25vcmVhYmJyZXZ8Y298Y29sfGNvbGRlcnxjb2xvfGNvbG9yc2NoZW1lfGNvbWN8Y29tY2xlYXJ8Y29tcHxjb21waWxlcnxjb258Y29uZnxjb25maXJtfGNvbnRpbnVlfGNvcGV8Y29wZW58Y29weXxjcHxjcGZ8Y3BmaWxlfGNwcmV2aW91c3xjcXxjcXVpdHxjcnxjcmV3aW5kfGN1fGN1bmF8Y3VuYWJicmV2fGN1bm1hcHxjd3xjd2luZG93fGR8ZGVidWdnfGRlYnVnZ3JlZWR5fGRlbGN8ZGVsY29tbWFuZHxkZWxldGV8ZGVsZnxkZWxmdW5jdGlvbnxkZWxtfGRlbG1hcmtzfGRpfGRpZmZnfGRpZmZnZXR8ZGlmZm9mZnxkaWZmcGF0Y2h8ZGlmZnB1fGRpZmZwdXR8ZGlmZnNwbGl0fGRpZmZ0aGlzfGRpZmZ1fGRpZmZ1cGRhdGV8ZGlnfGRpZ3JhcGhzfGRpc3BsYXl8ZGp8ZGp1bXB8ZGx8ZGxpc3R8ZHJ8ZHJvcHxkc3xkc2VhcmNofGRzcHxkc3BsaXR8ZXxlYXJsaWVyfGVjaG9lfGVjaG9lcnJ8ZWNob218ZWNob21zZ3xlY2hvbnxlZGl0fGVsfGVsc2V8ZWxzZWl8ZWxzZWlmfGVtfGVtZW51fGVufGVuZGZ8ZW5kZm98ZW5kZm9yfGVuZGZ1bnxlbmRmdW5jdGlvbnxlbmRpZnxlbmR0fGVuZHRyeXxlbmR3fGVuZHdoaWxlfGVuZXxlbmV3fGV4fGV4aXxleGl0fGV4dXxleHVzYWdlfGZ8ZmlsZXxmaWxlc3xmaWxldHlwZXxmaW58ZmluYXxmaW5hbGx5fGZpbmR8ZmluaXxmaW5pc2h8ZmlyfGZpcnN0fGZpeHxmaXhkZWx8Zm98Zm9sZHxmb2xkY3xmb2xkY2xvc2V8Zm9sZGR8Zm9sZGRvY3xmb2xkZG9jbG9zZWR8Zm9sZGRvb3Blbnxmb2xkb3xmb2xkb3Blbnxmb3J8ZnV8ZnVufGZ1bmN0aW9ufGdvfGdvdG98Z3J8Z3JlcHxncmVwYXxncmVwYWRkfGh8aGF8aGFyZGNvcHl8aGVscHxoZWxwZnxoZWxwZmluZHxoZWxwZ3xoZWxwZ3JlcHxoZWxwdHxoZWxwdGFnc3xoaWR8aGlkZXxoaXN8aGlzdG9yeXxpYXxpYWJicmV2fGlhYmN8aWFiY2xlYXJ8aWZ8aWp8aWp1bXB8aWx8aWxpc3R8aW1hcGN8aW1hcGNsZWFyfGlufGlub3JlYXxpbm9yZWFiYnJldnxpc2VhcmNofGlzcHxpc3BsaXR8aXV8aXVuYXxpdW5hYmJyZXZ8aXVubWFwfGp8am9pbnxqdXxqdW1wc3xrfGtlZXxrZWVwYWx0fGtlZXBqfGtlZXBqdW1wc3xrZWVwbWFya3N8bHxsTnxsTmV4dHxsTmZ8bE5maWxlfGxhfGxhZHxsYWRkYnxsYWRkYnVmZmVyfGxhZGRleHByfGxhZGRmfGxhZGRmaWxlfGxhbnxsYW5ndWFnZXxsYXN0fGxhdGVyfGxifGxidWZmZXJ8bGN8bGNkfGxjaHxsY2hkaXJ8bGNsfGxjbG9zZXxsZWZ0fGxlZnRhfGxlZnRhYm92ZXxsZXR8bGV4fGxleHByfGxmfGxmaWxlfGxmaXJ8bGZpcnN0fGxnfGxnZXRifGxnZXRidWZmZXJ8bGdldGV8bGdldGV4cHJ8bGdldGZpbGV8bGdyfGxncmVwfGxncmVwYXxsZ3JlcGFkZHxsaHxsaGVscGdyZXB8bGlzdHxsbHxsbGF8bGxhc3R8bGxpfGxsaXN0fGxtfGxtYWt8bG1ha2V8bG1hcHxsbWFwY3xsbWFwY2xlYXJ8bG58bG5lfGxuZXd8bG5ld2VyfGxuZXh0fGxuZnxsbmZpbGV8bG5vcmVtYXB8bG98bG9hZHZpZXd8bG9jfGxvY2ttYXJrc3xsb2Nrdnxsb2NrdmFyfGxvbHxsb2xkZXJ8bG9wfGxvcGVufGxwfGxwZnxscGZpbGV8bHByZXZpb3VzfGxyfGxyZXdpbmR8bHN8bHR8bHRhZ3xsdXxsdW5tYXB8bHZ8bHZpbWdyZXB8bHZpbWdyZXBhfGx2aW1ncmVwYWRkfGx3fGx3aW5kb3d8bXxtYXxtYWt8bWFrZXxtYXJrfG1hcmtzfG1hdHxtYXRjaHxtZW51dHxtZW51dHJhbnNsYXRlfG1rfG1rZXhyY3xta3N8bWtzZXNzaW9ufG1rc3B8bWtzcGVsbHxta3Z8bWt2aWV8bWt2aWV3fG1rdmltcmN8bW9kfG1vZGV8bW92ZXxtenxtemZ8bXpmaWxlfG16c2NoZW1lfG58bmJrZXl8bmV3fG5leHR8bm1hcGN8bm1hcGNsZWFyfG5vaHxub2hsc2VhcmNofG5vcmVhfG5vcmVhYmJyZXZ8bnV8bnVtYmVyfG51bnxudW5tYXB8b3xvbWFwY3xvbWFwY2xlYXJ8b258b25seXxvcGVufG9wdHxvcHRpb25zfG91fG91bm1hcHxwfHBjfHBjbG9zZXxwZXxwZWR8cGVkaXR8cGVybHxwZXJsZHxwZXJsZG98cG98cG9wfHBvcHV8cG9wdXB8cHB8cHBvcHxwcmV8cHJlc2VydmV8cHJldnxwcmV2aW91c3xwcmludHxwcm9mfHByb2ZkfHByb2ZkZWx8cHJvZmlsZXxwcm9tcHRmfHByb21wdGZpbmR8cHJvbXB0cnxwcm9tcHRyZXBsfHBzfHBzZWFyY2h8cHROfHB0TmV4dHxwdGF8cHRhZ3xwdGZ8cHRmaXJzdHxwdGp8cHRqdW1wfHB0bHxwdGxhc3R8cHRufHB0bmV4dHxwdHB8cHRwcmV2aW91c3xwdHJ8cHRyZXdpbmR8cHRzfHB0c2VsZWN0fHB1fHB1dHxwd3xwd2R8cHl8cHlmfHB5ZmlsZXxweXRob258cXxxYXxxYWxsfHF1aXR8cXVpdGF8cXVpdGFsbHxyfHJlYWR8cmVjfHJlY292ZXJ8cmVkfHJlZGl8cmVkaXJ8cmVkb3xyZWRyfHJlZHJhd3xyZWRyYXdzfHJlZHJhd3N0YXR1c3xyZWd8cmVnaXN0ZXJzfHJlc3xyZXNpemV8cmV0fHJldGFifHJldHV8cmV0dXJufHJld3xyZXdpbmR8cml8cmlnaHR8cmlnaHRifHJpZ2h0YmVsb3d8cnV8cnVifHJ1Ynl8cnVieWR8cnVieWRvfHJ1YnlmfHJ1YnlmaWxlfHJ1bnRpbWV8cnZ8cnZpbWluZm98c058c05leHR8c2F8c2FsfHNhbGx8c2FufHNhbmRib3h8c2FyZ3VtZW50fHNhdnxzYXZlYXN8c2J8c2JOfHNiTmV4dHxzYmF8c2JhbGx8c2JmfHNiZmlyc3R8c2JsfHNibGFzdHxzYm18c2Jtb2RpZmllZHxzYm58c2JuZXh0fHNicHxzYnByZXZpb3VzfHNicnxzYnJld2luZHxzYnVmZmVyfHNjcmlwfHNjcmlwdGV8c2NyaXB0ZW5jb2Rpbmd8c2NyaXB0bmFtZXN8c2V8c2V0fHNldGZ8c2V0ZmlsZXR5cGV8c2V0Z3xzZXRnbG9iYWx8c2V0bHxzZXRsb2NhbHxzZnxzZmluZHxzZmlyfHNmaXJzdHxzaHxzaGVsbHxzaWdufHNpbHxzaWxlbnR8c2ltfHNpbWFsdHxzbHxzbGF8c2xhc3R8c2xlZXB8c218c21hZ2ljfHNtYXB8c21hcGN8c21hcGNsZWFyfHNtZXxzbWVudXxzbnxzbmV4dHxzbml8c25pZmZ8c25vfHNub21hZ2ljfHNub3J8c25vcmVtYXB8c25vcmVtZXxzbm9yZW1lbnV8c298c29yfHNvcnR8c291cmNlfHNwfHNwZXxzcGVsbGR8c3BlbGxkdW1wfHNwZWxsZ29vZHxzcGVsbGl8c3BlbGxpbmZvfHNwZWxscnxzcGVsbHJlcGFsbHxzcGVsbHV8c3BlbGx1bmRvfHNwZWxsd3xzcGVsbHdyb25nfHNwbGl0fHNwcnxzcHJldmlvdXN8c3JlfHNyZXdpbmR8c3R8c3RhfHN0YWd8c3RhcnxzdGFydGd8c3RhcnRncmVwbGFjZXxzdGFydGluc2VydHxzdGFydHJ8c3RhcnRyZXBsYWNlfHN0anxzdGp1bXB8c3RvcHxzdG9waXxzdG9waW5zZXJ0fHN0c3xzdHNlbGVjdHxzdW58c3VuaGlkZXxzdW5tfHN1bm1hcHxzdXN8c3VzcGVuZHxzdnxzdmlld3xzeW5jYmluZHx0fHROfHROZXh0fHRhfHRhYnx0YWJOfHRhYk5leHR8dGFiY3x0YWJjbG9zZXx0YWJkfHRhYmRvfHRhYmV8dGFiZWRpdHx0YWJmfHRhYmZpbmR8dGFiZmlyfHRhYmZpcnN0fHRhYmx8dGFibGFzdHx0YWJtfHRhYm1vdmV8dGFibnx0YWJuZXd8dGFibmV4dHx0YWJvfHRhYm9ubHl8dGFicHx0YWJwcmV2aW91c3x0YWJyfHRhYnJld2luZHx0YWJzfHRhZ3x0YWdzfHRjfHRjbHx0Y2xkfHRjbGRvfHRjbGZ8dGNsZmlsZXx0ZXx0ZWFyb2ZmfHRmfHRmaXJzdHx0aHx0aHJvd3x0anx0anVtcHx0bHx0bGFzdHx0bXx0bWVudXx0bnx0bmV4dHx0b3x0b3BsZWZ0fHRwfHRwcmV2aW91c3x0cnx0cmV3aW5kfHRyeXx0c3x0c2VsZWN0fHR1fHR1bm1lbnV8dXx1bmF8dW5hYmJyZXZpYXRlfHVuZG98dW5kb2p8dW5kb2pvaW58dW5kb2x8dW5kb2xpc3R8dW5ofHVuaGlkZXx1bmxldHx1bmxvfHVubG9ja3Zhcnx1bm18dW5tYXB8dXB8dXBkYXRlfHZlfHZlcmJ8dmVyYm9zZXx2ZXJzaW9ufHZlcnR8dmVydGljYWx8dml8dmllfHZpZXd8dmltfHZpbWdyZXB8dmltZ3JlcGF8dmltZ3JlcGFkZHx2aXN1YWx8dml1fHZpdXNhZ2V8dm1hcGN8dm1hcGNsZWFyfHZuZXx2bmV3fHZzfHZzcGxpdHx2dXx2dW5tYXB8d3x3Tnx3TmV4dHx3YXx3YWxsfHdofHdoaWxlfHdpbnx3aW5jfHdpbmNtZHx3aW5kb3x3aW5wfHdpbnBvc3x3aW5zaXplfHdufHduZXh0fHdwfHdwcmV2aW91c3x3cXx3cWF8d3FhbGx8d3JpdGV8d3N8d3N2ZXJifHd2fHd2aW1pbmZvfHh8eGF8eGFsbHx4aXR8eG18eG1hcHx4bWFwY3x4bWFwY2xlYXJ8eG1lfHhtZW51fHhufHhub3JlbWFwfHhub3JlbWV8eG5vcmVtZW51fHh1fHh1bm1hcHx5fHlhbmspXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86YWNkfGFpfGFrbXxhbGVwaHxhbGxvd3Jldmluc3xhbHRrZXltYXB8YW1iaXdpZHRofGFtYnd8YW50aXxhbnRpYWxpYXN8YXJhYnxhcmFiaWN8YXJhYmljc2hhcGV8YXJpfGFyc2hhcGV8YXV0b2NoZGlyfGF1dG9jbWR8YXV0b2luZGVudHxhdXRvcmVhZHxhdXRvd3JpdGV8YXV0b3dyaXRlYWxsfGF3fGF3YXxiYWNrZ3JvdW5kfGJhY2tzcGFjZXxiYWNrdXB8YmFja3VwY29weXxiYWNrdXBkaXJ8YmFja3VwZXh0fGJhY2t1cHNraXB8YmFsbG9vbmRlbGF5fGJhbGxvb25ldmFsfGJhbGxvb25leHByfGJkaXJ8YmRsYXl8YmV2YWx8YmV4fGJleHByfGJnfGJofGJpbnxiaW5hcnl8Ymlvc2t8Ymlvc2tleXxia3xia2N8Ym9tYnxicmVha2F0fGJya3xicm93c2VkaXJ8YnN8YnNkaXJ8YnNrfGJ0fGJ1ZmhpZGRlbnxidWZsaXN0ZWR8YnVmdHlwZXxjYXNlbWFwfGNjdnxjZHBhdGh8Y2VkaXR8Y2Z1fGNofGNoYXJjb252ZXJ0fGNpfGNpbnxjaW5kZW50fGNpbmt8Y2lua2V5c3xjaW5vfGNpbm9wdGlvbnN8Y2lud3xjaW53b3Jkc3xjbGlwYm9hcmR8Y21kaGVpZ2h0fGNtZHdpbmhlaWdodHxjbXB8Y21zfGNvbHVtbnN8Y29tfGNvbW1lbnRzfGNvbW1lbnRzdHJpbmd8Y29tcGF0aWJsZXxjb21wbGV0ZXxjb21wbGV0ZWZ1bmN8Y29tcGxldGVvcHR8Y29uc2t8Y29uc2tleXxjb3B5aW5kZW50fGNvdHxjcG98Y3BvcHRpb25zfGNwdHxjc2NvcGVwYXRoY29tcHxjc2NvcGVwcmd8Y3Njb3BlcXVpY2tmaXh8Y3Njb3BldGFnfGNzY29wZXRhZ29yZGVyfGNzY29wZXZlcmJvc2V8Y3NwY3xjc3ByZ3xjc3FmfGNzdHxjc3RvfGNzdmVyYnxjdWN8Y3VsfGN1cnNvcmNvbHVtbnxjdXJzb3JsaW5lfGN3aHxkZWJ1Z3xkZWNvfGRlZnxkZWZpbmV8ZGVsY29tYmluZXxkZXh8ZGd8ZGljdHxkaWN0aW9uYXJ5fGRpZmZ8ZGlmZmV4cHJ8ZGlmZm9wdHxkaWdyYXBofGRpcHxkaXJ8ZGlyZWN0b3J5fGR5fGVhfGVhZHxlYWRpcmVjdGlvbnxlYnxlZHxlZGNvbXBhdGlibGV8ZWZ8ZWZtfGVpfGVrfGVuY3xlbmNvZGluZ3xlbmRvZmxpbmV8ZW9sfGVwfGVxdWFsYWx3YXlzfGVxdWFscHJnfGVycm9yYmVsbHN8ZXJyb3JmaWxlfGVycm9yZm9ybWF0fGVzY2tleXN8ZXR8ZXZlbnRpZ25vcmV8ZXhwYW5kdGFifGV4cmN8ZmNsfGZjc3xmZGN8ZmRlfGZkaXxmZGx8ZmRsc3xmZG18ZmRufGZkb3xmZHR8ZmVufGZlbmN8ZmVuY3N8ZmV4fGZmfGZmc3xmaWxlZW5jb2Rpbmd8ZmlsZWVuY29kaW5nc3xmaWxlZm9ybWF0fGZpbGVmb3JtYXRzfGZpbGxjaGFyc3xma3xma21hcHxmbHB8Zm1sfGZtcnxmb2xkY29sdW1ufGZvbGRlbmFibGV8Zm9sZGV4cHJ8Zm9sZGlnbm9yZXxmb2xkbGV2ZWx8Zm9sZGxldmVsc3RhcnR8Zm9sZG1hcmtlcnxmb2xkbWV0aG9kfGZvbGRtaW5saW5lc3xmb2xkbmVzdG1heHxmb2xkdGV4dHxmb3JtYXRleHByfGZvcm1hdGxpc3RwYXR8Zm9ybWF0b3B0aW9uc3xmb3JtYXRwcmd8ZnB8ZnN8ZnN5bmN8ZnR8Z2NyfGdkfGdkZWZhdWx0fGdmbXxnZm58Z2ZzfGdmd3xnaHJ8Z3B8Z3JlcGZvcm1hdHxncmVwcHJnfGd0bHxndHR8Z3VpY3Vyc29yfGd1aWZvbnR8Z3VpZm9udHNldHxndWlmb250d2lkZXxndWloZWFkcm9vbXxndWlvcHRpb25zfGd1aXB0eXxndWl0YWJsYWJlbHxndWl0YWJ0b29sdGlwfGhlbHBmaWxlfGhlbHBoZWlnaHR8aGVscGxhbmd8aGZ8aGh8aGl8aGlkZGVufGhpZ2hsaWdodHxoa3xoa21hcHxoa21hcHB8aGtwfGhsfGhsZ3xobHN8aGxzZWFyY2h8aWN8aWNvbnxpY29uc3RyaW5nfGlnbm9yZWNhc2V8aW18aW1hY3RpdmF0ZWtleXxpbWFrfGltY3xpbWNtZGxpbmV8aW1kfGltZGlzYWJsZXxpbWl8aW1pbnNlcnR8aW1zfGltc2VhcmNofGluY3xpbmNsdWRlfGluY2x1ZGVleHByfGluY3NlYXJjaHxpbmRlfGluZGVudGV4cHJ8aW5kZW50a2V5c3xpbmRrfGluZXh8aW5mfGluZmVyY2FzZXxpbnNlcnRtb2RlfGludmFjZHxpbnZhaXxpbnZha218aW52YWxsb3dyZXZpbnN8aW52YWx0a2V5bWFwfGludmFudGl8aW52YW50aWFsaWFzfGludmFyfGludmFyYWJ8aW52YXJhYmljfGludmFyYWJpY3NoYXBlfGludmFyaXxpbnZhcnNoYXBlfGludmF1dG9jaGRpcnxpbnZhdXRvaW5kZW50fGludmF1dG9yZWFkfGludmF1dG93cml0ZXxpbnZhdXRvd3JpdGVhbGx8aW52YXd8aW52YXdhfGludmJhY2t1cHxpbnZiYWxsb29uZXZhbHxpbnZiZXZhbHxpbnZiaW58aW52YmluYXJ5fGludmJpb3NrfGludmJpb3NrZXl8aW52Ymt8aW52Ymx8aW52Ym9tYnxpbnZidWZsaXN0ZWR8aW52Y2Z8aW52Y2l8aW52Y2lufGludmNpbmRlbnR8aW52Y29tcGF0aWJsZXxpbnZjb25maXJtfGludmNvbnNrfGludmNvbnNrZXl8aW52Y29weWluZGVudHxpbnZjcHxpbnZjc2NvcGV0YWd8aW52Y3Njb3BldmVyYm9zZXxpbnZjc3R8aW52Y3N2ZXJifGludmN1Y3xpbnZjdWx8aW52Y3Vyc29yY29sdW1ufGludmN1cnNvcmxpbmV8aW52ZGVjb3xpbnZkZWxjb21iaW5lfGludmRnfGludmRpZmZ8aW52ZGlncmFwaHxpbnZkaXNhYmxlfGludmVhfGludmVifGludmVkfGludmVkY29tcGF0aWJsZXxpbnZla3xpbnZlbmRvZmxpbmV8aW52ZW9sfGludmVxdWFsYWx3YXlzfGludmVycm9yYmVsbHN8aW52ZXNja2V5c3xpbnZldHxpbnZleHxpbnZleHBhbmR0YWJ8aW52ZXhyY3xpbnZmZW58aW52Zmt8aW52ZmttYXB8aW52Zm9sZGVuYWJsZXxpbnZnZHxpbnZnZGVmYXVsdHxpbnZndWlwdHl8aW52aGlkfGludmhpZGRlbnxpbnZoa3xpbnZoa21hcHxpbnZoa21hcHB8aW52aGtwfGludmhsc3xpbnZobHNlYXJjaHxpbnZpY3xpbnZpY29ufGludmlnbm9yZWNhc2V8aW52aW18aW52aW1jfGludmltY21kbGluZXxpbnZpbWR8aW52aW5jc2VhcmNofGludmluZnxpbnZpbmZlcmNhc2V8aW52aW5zZXJ0bW9kZXxpbnZpc3xpbnZqb2luc3BhY2VzfGludmpzfGludmxhenlyZWRyYXd8aW52bGJyfGludmxpbmVicmVha3xpbnZsaXNwfGludmxpc3R8aW52bG9hZHBsdWdpbnN8aW52bHBsfGludmx6fGludm1hfGludm1hY2F0c3VpfGludm1hZ2ljfGludm1ofGludm1sfGludm1vZHxpbnZtb2RlbGluZXxpbnZtb2RpZmlhYmxlfGludm1vZGlmaWVkfGludm1vcmV8aW52bW91c2VmfGludm1vdXNlZm9jdXN8aW52bW91c2VoaWRlfGludm51fGludm51bWJlcnxpbnZvZGV2fGludm9wZW5kZXZpY2V8aW52cGFzdGV8aW52cGl8aW52cHJlc2VydmVpbmRlbnR8aW52cHJldmlld3dpbmRvd3xpbnZwcm9tcHR8aW52cHZ3fGludnJlYWRvbmx5fGludnJlbWFwfGludnJlc3RvcmVzY3JlZW58aW52cmV2aW5zfGludnJpfGludnJpZ2h0bGVmdHxpbnZyaWdodGxlZnRjbWR8aW52cmx8aW52cmxjfGludnJvfGludnJzfGludnJ1fGludnJ1bGVyfGludnNifGludnNjfGludnNjYnxpbnZzY3JvbGxiaW5kfGludnNjc3xpbnZzZWN1cmV8aW52c2Z0fGludnNoZWxsc2xhc2h8aW52c2hlbGx0ZW1wfGludnNoaWZ0cm91bmR8aW52c2hvcnRuYW1lfGludnNob3djbWR8aW52c2hvd2Z1bGx0YWd8aW52c2hvd21hdGNofGludnNob3dtb2RlfGludnNpfGludnNtfGludnNtYXJ0Y2FzZXxpbnZzbWFydGluZGVudHxpbnZzbWFydHRhYnxpbnZzbWR8aW52c258aW52c29sfGludnNwZWxsfGludnNwbGl0YmVsb3d8aW52c3BsaXRyaWdodHxpbnZzcHJ8aW52c3J8aW52c3NsfGludnN0YXxpbnZzdGFydG9mbGluZXxpbnZzdG1wfGludnN3YXBmaWxlfGludnN3ZnxpbnZ0YXxpbnZ0YWdic2VhcmNofGludnRhZ3JlbGF0aXZlfGludnRhZ3N0YWNrfGludnRiaXxpbnZ0YmlkaXxpbnZ0YnN8aW52dGVybWJpZGl8aW52dGVyc2V8aW52dGV4dGF1dG98aW52dGV4dG1vZGV8aW52dGZ8aW52dGdzdHxpbnZ0aWxkZW9wfGludnRpbWVvdXR8aW52dGl0bGV8aW52dG98aW52dG9wfGludnRyfGludnR0aW1lb3V0fGludnR0eWJ1aWx0aW58aW52dHR5ZmFzdHxpbnZ0eHxpbnZ2YnxpbnZ2aXN1YWxiZWxsfGludndhfGludndhcm58aW52d2J8aW52d2VpcmRpbnZlcnR8aW52d2ZofGludndmd3xpbnZ3aWxkbWVudXxpbnZ3aW5maXhoZWlnaHR8aW52d2luZml4d2lkdGh8aW52d2l2fGludndtbnV8aW52d3JhcHxpbnZ3cmFwc2NhbnxpbnZ3cml0ZXxpbnZ3cml0ZWFueXxpbnZ3cml0ZWJhY2t1cHxpbnZ3c3xpc2Z8aXNmbmFtZXxpc2l8aXNpZGVudHxpc2t8aXNrZXl3b3JkfGlzcHJpbnR8am9pbnNwYWNlc3xqc3xrZXl8a2V5bWFwfGtleW1vZGVsfGtleXdvcmRwcmd8a218a21wfGtwfGxhbmdtYXB8bGFuZ21lbnV8bGFzdHN0YXR1c3xsYXp5cmVkcmF3fGxicnxsY3N8bGluZWJyZWFrfGxpbmVzfGxpbmVzcGFjZXxsaXNwfGxpc3B3b3Jkc3xsaXN0Y2hhcnN8bG9hZHBsdWdpbnN8bHBsfGxzcHxsenxtYWNhdHN1aXxtYWdpY3xtYWtlZWZ8bWFrZXByZ3xtYXRjaHBhaXJzfG1hdGNodGltZXxtYXhjb21iaW5lfG1heGZ1bmNkZXB0aHxtYXhtYXBkZXB0aHxtYXhtZW18bWF4bWVtcGF0dGVybnxtYXhtZW10b3R8bWNvfG1lZnxtZW51aXRlbXN8bWZkfG1ofG1pc3xta3NwZWxsbWVtfG1sfG1sc3xtbXxtbWR8bW1wfG1tdHxtb2RlbGluZXxtb2RlbGluZXN8bW9kaWZpYWJsZXxtb2RpZmllZHxtb3JlfG1vdXNlfG1vdXNlZnxtb3VzZWZvY3VzfG1vdXNlaGlkZXxtb3VzZW18bW91c2Vtb2RlbHxtb3VzZXN8bW91c2VzaGFwZXxtb3VzZXR8bW91c2V0aW1lfG1wfG1wc3xtc218bXpxfG16cXVhbnR1bXxuZnxub2FjZHxub2FpfG5vYWttfG5vYWxsb3dyZXZpbnN8bm9hbHRrZXltYXB8bm9hbnRpfG5vYW50aWFsaWFzfG5vYXJ8bm9hcmFifG5vYXJhYmljfG5vYXJhYmljc2hhcGV8bm9hcml8bm9hcnNoYXBlfG5vYXV0b2NoZGlyfG5vYXV0b2luZGVudHxub2F1dG9yZWFkfG5vYXV0b3dyaXRlfG5vYXV0b3dyaXRlYWxsfG5vYXd8bm9hd2F8bm9iYWNrdXB8bm9iYWxsb29uZXZhbHxub2JldmFsfG5vYmlufG5vYmluYXJ5fG5vYmlvc2t8bm9iaW9za2V5fG5vYmt8bm9ibHxub2JvbWJ8bm9idWZsaXN0ZWR8bm9jZnxub2NpfG5vY2lufG5vY2luZGVudHxub2NvbXBhdGlibGV8bm9jb25maXJtfG5vY29uc2t8bm9jb25za2V5fG5vY29weWluZGVudHxub2NwfG5vY3Njb3BldGFnfG5vY3Njb3BldmVyYm9zZXxub2NzdHxub2NzdmVyYnxub2N1Y3xub2N1bHxub2N1cnNvcmNvbHVtbnxub2N1cnNvcmxpbmV8bm9kZWNvfG5vZGVsY29tYmluZXxub2RnfG5vZGlmZnxub2RpZ3JhcGh8bm9kaXNhYmxlfG5vZWF8bm9lYnxub2VkfG5vZWRjb21wYXRpYmxlfG5vZWt8bm9lbmRvZmxpbmV8bm9lb2x8bm9lcXVhbGFsd2F5c3xub2Vycm9yYmVsbHN8bm9lc2NrZXlzfG5vZXR8bm9leHxub2V4cGFuZHRhYnxub2V4cmN8bm9mZW58bm9ma3xub2ZrbWFwfG5vZm9sZGVuYWJsZXxub2dkfG5vZ2RlZmF1bHR8bm9ndWlwdHl8bm9oaWR8bm9oaWRkZW58bm9oa3xub2hrbWFwfG5vaGttYXBwfG5vaGtwfG5vaGxzfG5vaWN8bm9pY29ufG5vaWdub3JlY2FzZXxub2ltfG5vaW1jfG5vaW1jbWRsaW5lfG5vaW1kfG5vaW5jc2VhcmNofG5vaW5mfG5vaW5mZXJjYXNlfG5vaW5zZXJ0bW9kZXxub2lzfG5vam9pbnNwYWNlc3xub2pzfG5vbGF6eXJlZHJhd3xub2xicnxub2xpbmVicmVha3xub2xpc3B8bm9saXN0fG5vbG9hZHBsdWdpbnN8bm9scGx8bm9senxub21hfG5vbWFjYXRzdWl8bm9tYWdpY3xub21ofG5vbWx8bm9tb2R8bm9tb2RlbGluZXxub21vZGlmaWFibGV8bm9tb2RpZmllZHxub21vcmV8bm9tb3VzZWZ8bm9tb3VzZWZvY3VzfG5vbW91c2VoaWRlfG5vbnV8bm9udW1iZXJ8bm9vZGV2fG5vb3BlbmRldmljZXxub3Bhc3RlfG5vcGl8bm9wcmVzZXJ2ZWluZGVudHxub3ByZXZpZXd3aW5kb3d8bm9wcm9tcHR8bm9wdnd8bm9yZWFkb25seXxub3JlbWFwfG5vcmVzdG9yZXNjcmVlbnxub3Jldmluc3xub3JpfG5vcmlnaHRsZWZ0fG5vcmlnaHRsZWZ0Y21kfG5vcmx8bm9ybGN8bm9yb3xub3JzfG5vcnV8bm9ydWxlcnxub3NifG5vc2N8bm9zY2J8bm9zY3JvbGxiaW5kfG5vc2NzfG5vc2VjdXJlfG5vc2Z0fG5vc2hlbGxzbGFzaHxub3NoZWxsdGVtcHxub3NoaWZ0cm91bmR8bm9zaG9ydG5hbWV8bm9zaG93Y21kfG5vc2hvd2Z1bGx0YWd8bm9zaG93bWF0Y2h8bm9zaG93bW9kZXxub3NpfG5vc218bm9zbWFydGNhc2V8bm9zbWFydGluZGVudHxub3NtYXJ0dGFifG5vc21kfG5vc258bm9zb2x8bm9zcGVsbHxub3NwbGl0YmVsb3d8bm9zcGxpdHJpZ2h0fG5vc3ByfG5vc3J8bm9zc2x8bm9zdGF8bm9zdGFydG9mbGluZXxub3N0bXB8bm9zd2FwZmlsZXxub3N3Znxub3RhfG5vdGFnYnNlYXJjaHxub3RhZ3JlbGF0aXZlfG5vdGFnc3RhY2t8bm90Yml8bm90YmlkaXxub3Ric3xub3Rlcm1iaWRpfG5vdGVyc2V8bm90ZXh0YXV0b3xub3RleHRtb2RlfG5vdGZ8bm90Z3N0fG5vdGlsZGVvcHxub3RpbWVvdXR8bm90aXRsZXxub3RvfG5vdG9wfG5vdHJ8bm90dGltZW91dHxub3R0eWJ1aWx0aW58bm90dHlmYXN0fG5vdHh8bm92Ynxub3Zpc3VhbGJlbGx8bm93YXxub3dhcm58bm93Ynxub3dlaXJkaW52ZXJ0fG5vd2ZofG5vd2Z3fG5vd2lsZG1lbnV8bm93aW5maXhoZWlnaHR8bm93aW5maXh3aWR0aHxub3dpdnxub3dtbnV8bm93cmFwfG5vd3JhcHNjYW58bm93cml0ZXxub3dyaXRlYW55fG5vd3JpdGViYWNrdXB8bm93c3xucmZvcm1hdHN8bnVtYmVyd2lkdGh8bnV3fG9kZXZ8b2Z0fG9mdXxvbW5pZnVuY3xvcGVuZGV2aWNlfG9wZXJhdG9yZnVuY3xvcGZ1bmN8b3NmaWxldHlwZXxwYXxwYXJhfHBhcmFncmFwaHN8cGFzdGV8cGFzdGV0b2dnbGV8cGF0Y2hleHByfHBhdGNobW9kZXxwYXRofHBkZXZ8cGVuY3xwZXh8cGV4cHJ8cGZufHBofHBoZWFkZXJ8cGl8cG18cG1iY3N8cG1iZm58cG9wdHxwcmVzZXJ2ZWluZGVudHxwcmV2aWV3aGVpZ2h0fHByZXZpZXd3aW5kb3d8cHJpbnRkZXZpY2V8cHJpbnRlbmNvZGluZ3xwcmludGV4cHJ8cHJpbnRmb250fHByaW50aGVhZGVyfHByaW50bWJjaGFyc2V0fHByaW50bWJmb250fHByaW50b3B0aW9uc3xwcm9tcHR8cHR8cHVtaGVpZ2h0fHB2aHxwdnd8cWV8cXVvdGVlc2NhcGV8cmVhZG9ubHl8cmVtYXB8cmVwb3J0fHJlc3RvcmVzY3JlZW58cmV2aW5zfHJpZ2h0bGVmdHxyaWdodGxlZnRjbWR8cmx8cmxjfHJvfHJzfHJ0cHxydWZ8cnVsZXJ8cnVsZXJmb3JtYXR8cnVudGltZXBhdGh8c2JvfHNjfHNjYnxzY3J8c2Nyb2xsfHNjcm9sbGJpbmR8c2Nyb2xsanVtcHxzY3JvbGxvZmZ8c2Nyb2xsb3B0fHNjc3xzZWN0fHNlY3Rpb25zfHNlY3VyZXxzZWx8c2VsZWN0aW9ufHNlbGVjdG1vZGV8c2Vzc2lvbm9wdGlvbnN8c2Z0fHNoY2Z8c2hlbGxjbWRmbGFnfHNoZWxscGlwZXxzaGVsbHF1b3RlfHNoZWxscmVkaXJ8c2hlbGxzbGFzaHxzaGVsbHRlbXB8c2hlbGx0eXBlfHNoZWxseHF1b3RlfHNoaWZ0cm91bmR8c2hpZnR3aWR0aHxzaG18c2hvcnRtZXNzfHNob3J0bmFtZXxzaG93YnJlYWt8c2hvd2NtZHxzaG93ZnVsbHRhZ3xzaG93bWF0Y2h8c2hvd21vZGV8c2hvd3RhYmxpbmV8c2hxfHNpfHNpZGVzY3JvbGx8c2lkZXNjcm9sbG9mZnxzaXNvfHNqfHNsbXxzbWFydGNhc2V8c21hcnRpbmRlbnR8c21hcnR0YWJ8c21jfHNtZHxzb2Z0dGFic3RvcHxzb2x8c3BjfHNwZWxsfHNwZWxsY2FwY2hlY2t8c3BlbGxmaWxlfHNwZWxsbGFuZ3xzcGVsbHN1Z2dlc3R8c3BmfHNwbHxzcGxpdGJlbG93fHNwbGl0cmlnaHR8c3BzfHNyfHNycnxzc3xzc2x8c3NvcHxzdGFsfHN0YXJ0b2ZsaW5lfHN0YXR1c2xpbmV8c3RsfHN0bXB8c3V8c3VhfHN1ZmZpeGVzfHN1ZmZpeGVzYWRkfHN3fHN3YXBmaWxlfHN3YXBzeW5jfHN3Ynxzd2Z8c3dpdGNoYnVmfHN3c3xzeHF8c3lufHN5bm1heGNvbHxzeW50YXh8dF9BQnx0X0FGfHRfQUx8dF9DU3x0X0NWfHRfQ2V8dF9Db3x0X0NzfHRfREx8dF9FSXx0X0YxfHRfRjJ8dF9GM3x0X0Y0fHRfRjV8dF9GNnx0X0Y3fHRfRjh8dF9GOXx0X0lFfHRfSVN8dF9LMXx0X0szfHRfSzR8dF9LNXx0X0s2fHRfSzd8dF9LOHx0X0s5fHRfS0F8dF9LQnx0X0tDfHRfS0R8dF9LRXx0X0tGfHRfS0d8dF9LSHx0X0tJfHRfS0p8dF9LS3x0X0tMfHRfUkl8dF9SVnx0X1NJfHRfU2J8dF9TZnx0X1dQfHRfV1N8dF9aSHx0X1pSfHRfYWx8dF9iY3x0X2NkfHRfY2V8dF9jbHx0X2NtfHRfY3N8dF9kYXx0X2RifHRfZGx8dF9mc3x0X2sxfHRfazJ8dF9rM3x0X2s0fHRfazV8dF9rNnx0X2s3fHRfazh8dF9rOXx0X2tCfHRfa0R8dF9rSXx0X2tOfHRfa1B8dF9rYnx0X2tkfHRfa2V8dF9raHx0X2tsfHRfa3J8dF9rc3x0X2t1fHRfbGV8dF9tYnx0X21kfHRfbWV8dF9tcnx0X21zfHRfbmR8dF9vcHx0X3NlfHRfc298dF9zcnx0X3RlfHRfdGl8dF90c3x0X3VlfHRfdXN8dF91dHx0X3ZifHRfdmV8dF92aXx0X3ZzfHRfeHN8dGFibGluZXx0YWJwYWdlbWF4fHRhYnN0b3B8dGFnYnNlYXJjaHx0YWdsZW5ndGh8dGFncmVsYXRpdmV8dGFnc3RhY2t8dGFsfHRifHRiaXx0YmlkaXx0YmlzfHRic3x0ZW5jfHRlcm18dGVybWJpZGl8dGVybWVuY29kaW5nfHRlcnNlfHRleHRhdXRvfHRleHRtb2RlfHRleHR3aWR0aHx0Z3N0fHRoZXNhdXJ1c3x0aWxkZW9wfHRpbWVvdXR8dGltZW91dGxlbnx0aXRsZXx0aXRsZWxlbnx0aXRsZW9sZHx0aXRsZXN0cmluZ3x0b29sYmFyfHRvb2xiYXJpY29uc2l6ZXx0b3B8dHBtfHRzbHx0c3J8dHRpbWVvdXR8dHRpbWVvdXRsZW58dHRtfHR0eXx0dHlidWlsdGlufHR0eWZhc3R8dHR5bXx0dHltb3VzZXx0dHlzY3JvbGx8dHR5dHlwZXx0d3x0eHx1Y3x1bHx1bmRvbGV2ZWxzfHVwZGF0ZWNvdW50fHVwZGF0ZXRpbWV8dXR8dmJ8dmJzfHZkaXJ8dmVyYm9zZWZpbGV8dmZpbGV8dmlld2Rpcnx2aWV3b3B0aW9uc3x2aW1pbmZvfHZpcnR1YWxlZGl0fHZpc3VhbGJlbGx8dm9wfHdha3x3YXJufHdifHdjfHdjbXx3ZHx3ZWlyZGludmVydHx3Zmh8d2Z3fHdoaWNod3JhcHx3aXx3aWd8d2lsZGNoYXJ8d2lsZGNoYXJtfHdpbGRpZ25vcmV8d2lsZG1lbnV8d2lsZG1vZGV8d2lsZG9wdGlvbnN8d2ltfHdpbmFsdGtleXN8d2luZG93fHdpbmZpeGhlaWdodHx3aW5maXh3aWR0aHx3aW5oZWlnaHR8d2lubWluaGVpZ2h0fHdpbm1pbndpZHRofHdpbndpZHRofHdpdnx3aXd8d218d21ofHdtbnV8d213fHdvcHx3cmFwfHdyYXBtYXJnaW58d3JhcHNjYW58d3JpdGVhbnl8d3JpdGViYWNrdXB8d3JpdGVkZWxheXx3dylcXGIvLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfFxcZCsoPzpcXC5cXGQrKT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9cXHxcXHx8JiZ8Wy0rLl09P3xbPSFdKD86Wz1+XVsjP10/KT98Wzw+XT0/WyM/XT98WypcXC8lP118XFxiKD86aXMoPzpub3QpPylcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpLDs6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1sndmlzdWFsLWJhc2ljJ10gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oPzpbJ1x1MjAxOFx1MjAxOV18UkVNXFxiKSg/OlteXFxyXFxuX118Xyg/Olxcclxcbj98XFxuKT8pKi9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXlJFTS9pXG5cdFx0fVxuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jKD86Q29uc3R8RWxzZXxFbHNlSWZ8RW5kfEV4dGVybmFsQ2hlY2tzdW18RXh0ZXJuYWxTb3VyY2V8SWZ8UmVnaW9uKSg/OlxcYl9bIFxcdF0qKD86XFxyXFxuP3xcXG4pfC4pKy9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cXCQ/W1wiXHUyMDFDXHUyMDFEXSg/OltcIlx1MjAxQ1x1MjAxRF17Mn18W15cIlx1MjAxQ1x1MjAxRF0pKltcIlx1MjAxQ1x1MjAxRF1DPy9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnZGF0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvI1sgXFx0XSooPzpcXGQrKFsvLV0pXFxkK1xcMVxcZCsoPzpbIFxcdF0rKD86XFxkK1sgXFx0XSooPzpBTXxQTSl8XFxkKzpcXGQrKD86OlxcZCspPyg/OlsgXFx0XSooPzpBTXxQTSkpPykpP3xcXGQrWyBcXHRdKig/OkFNfFBNKXxcXGQrOlxcZCsoPzo6XFxkKyk/KD86WyBcXHRdKig/OkFNfFBNKSk/KVsgXFx0XSojL2ksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdudW1iZXInOiAvKD86KD86XFxiXFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OkVbKy1dP1xcZCspP3wmW0hPXVtcXGRBLUZdKykoPzpbRlJEXXxVP1tJTFNdKT8vaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8Tm90aGluZ3xUcnVlKVxcYi9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzpBZGRIYW5kbGVyfEFkZHJlc3NPZnxBbGlhc3xBbmQoPzpBbHNvKT98QXN8Qm9vbGVhbnxCeVJlZnxCeXRlfEJ5VmFsfENhbGx8Q2FzZXxDYXRjaHxDKD86Qm9vbHxCeXRlfENoYXJ8RGF0ZXxEYmx8RGVjfEludHxMbmd8T2JqfFNCeXRlfFNob3J0fFNuZ3xTdHJ8VHlwZXxVSW50fFVMbmd8VVNob3J0KXxDaGFyfENsYXNzfENvbnN0fENvbnRpbnVlfEN1cnJlbmN5fERhdGV8RGVjaW1hbHxEZWNsYXJlfERlZmF1bHR8RGVsZWdhdGV8RGltfERpcmVjdENhc3R8RG98RG91YmxlfEVhY2h8RWxzZSg/OklmKT98RW5kKD86SWYpP3xFbnVtfEVyYXNlfEVycm9yfEV2ZW50fEV4aXR8RmluYWxseXxGb3J8RnJpZW5kfEZ1bmN0aW9ufEdldCg/OlR5cGV8WE1MTmFtZXNwYWNlKT98R2xvYmFsfEdvU3VifEdvVG98SGFuZGxlc3xJZnxJbXBsZW1lbnRzfEltcG9ydHN8SW58SW5oZXJpdHN8SW50ZWdlcnxJbnRlcmZhY2V8SXN8SXNOb3R8TGV0fExpYnxMaWtlfExvbmd8TG9vcHxNZXxNb2R8TW9kdWxlfE11c3QoPzpJbmhlcml0fE92ZXJyaWRlKXxNeSg/OkJhc2V8Q2xhc3MpfE5hbWVzcGFjZXxOYXJyb3dpbmd8TmV3fE5leHR8Tm90KD86SW5oZXJpdGFibGV8T3ZlcnJpZGFibGUpP3xPYmplY3R8T2Z8T258T3BlcmF0b3J8T3B0aW9uKD86YWwpP3xPcig/OkVsc2UpP3xPdXR8T3ZlcmxvYWRzfE92ZXJyaWRhYmxlfE92ZXJyaWRlc3xQYXJhbUFycmF5fFBhcnRpYWx8UHJpdmF0ZXxQcm9wZXJ0eXxQcm90ZWN0ZWR8UHVibGljfFJhaXNlRXZlbnR8UmVhZE9ubHl8UmVEaW18UmVtb3ZlSGFuZGxlcnxSZXN1bWV8UmV0dXJufFNCeXRlfFNlbGVjdHxTZXR8U2hhZG93c3xTaGFyZWR8c2hvcnR8U2luZ2xlfFN0YXRpY3xTdGVwfFN0b3B8U3RyaW5nfFN0cnVjdHVyZXxTdWJ8U3luY0xvY2t8VGhlbnxUaHJvd3xUb3xUcnl8VHJ5Q2FzdHxUeXBlfFR5cGVPZnxVKD86SW50ZWdlcnxMb25nfFNob3J0KXxVbnRpbHxVc2luZ3xWYXJpYW50fFdlbmR8V2hlbnxXaGlsZXxXaWRlbmluZ3xXaXRoKD86RXZlbnRzKT98V3JpdGVPbmx5fFhvcilcXGIvaSxcblx0J29wZXJhdG9yJzogL1srXFwtKi9cXFxcXjw9PiYjQCQlIV18XFxiXyg/PVsgXFx0XSpbXFxyXFxuXSkvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9KCkuLDo/XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy52YiA9IFByaXNtLmxhbmd1YWdlc1sndmlzdWFsLWJhc2ljJ107XG5QcmlzbS5sYW5ndWFnZXMudmJhID0gUHJpc20ubGFuZ3VhZ2VzWyd2aXN1YWwtYmFzaWMnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLndhcnBzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogLyMuKnxcXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXFxcclxcbl18XFxcXC4pKlwifCcoPzpbXidcXFxcXFxyXFxuXXxcXFxcLikqJ3w8Jyg/OlteXFxcXCddfCcoPyE+KXxcXFxcLikqJz4vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkXFxTKy8sXG5cdCdtYWNybyc6IHtcblx0XHRwYXR0ZXJuOiAvQFxcUysvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdC8vIFdhcnBTY3JpcHQgZG9lc24ndCBoYXZlIGFueSBrZXl3b3JkcywgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgdW5kZXIgdGhlIGNvbnRyb2wgY2F0ZWdvcnlcblx0Ly8gaHR0cHM6Ly93d3cud2FycDEwLmlvL3RhZ3MvY29udHJvbFxuXHQna2V5d29yZCc6IC9cXGIoPzpCUkVBS3xDSEVDS01BQ1JPfENPTlRJTlVFfENVREZ8REVGSU5FRHxERUZJTkVETUFDUk98RVZBTHxGQUlMfEZPUnxGT1JFQUNIfEZPUlNURVB8SUZUfElGVEV8TVNHRkFJTHxOUkVUVVJOfFJFVEhST1d8UkVUVVJOfFNXSVRDSHxUUll8VURGfFVOVElMfFdISUxFKVxcYi8sXG5cdCdudW1iZXInOiAvWystXT9cXGIoPzpOYU58SW5maW5pdHl8XFxkKyg/OlxcLlxcZCopPyg/OltFZV1bKy1dP1xcZCspP3wweFtcXGRhLWZBLUZdK3wwYlswMV0rKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OkZ8VHxmYWxzZXx0cnVlKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC88JXwlPnxbe31bXFxdKCldLyxcblx0Ly8gU29tZSBvcGVyYXRvcnMgZnJvbSB0aGUgXCJvcGVyYXRvcnNcIiBjYXRlZ29yeVxuXHQvLyBodHRwczovL3d3dy53YXJwMTAuaW8vdGFncy9vcGVyYXRvcnNcblx0J29wZXJhdG9yJzogLz09fCYmP3xcXHxcXHw/fFxcKlxcKj98Pj4+P3w8PHxbPD4hfl09P3xbLS8lXl18XFwrIT98XFxiKD86QU5EfE5PVHxPUilcXGIvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMud2FzbSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0L1xcKDtbXFxzXFxTXSo/O1xcKS8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLzs7LiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFxbXFxzXFxTXXxbXlwiXFxcXF0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFsaWdufG9mZnNldCk9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvPS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzooPzpmMzJ8ZjY0fGkzMnxpNjQpKD86XFwuKD86YWJzfGFkZHxhbmR8Y2VpbHxjbHp8Y29uc3R8Y29udmVydF9bc3VdXFwvaSg/OjMyfDY0KXxjb3B5c2lnbnxjdHp8ZGVtb3RlXFwvZjY0fGRpdig/Ol9bc3VdKT98ZXF6P3xleHRlbmRfW3N1XVxcL2kzMnxmbG9vcnxnZSg/Ol9bc3VdKT98Z3QoPzpfW3N1XSk/fGxlKD86X1tzdV0pP3xsb2FkKD86KD86OHwxNnwzMilfW3N1XSk/fGx0KD86X1tzdV0pP3xtYXh8bWlufG11bHxuZWc/fG5lYXJlc3R8b3J8cG9wY250fHByb21vdGVcXC9mMzJ8cmVpbnRlcnByZXRcXC9bZmldKD86MzJ8NjQpfHJlbV9bc3VdfHJvdFtscl18c2hsfHNocl9bc3VdfHNxcnR8c3RvcmUoPzo4fDE2fDMyKT98c3VifHRydW5jKD86X1tzdV1cXC9mKD86MzJ8NjQpKT98d3JhcFxcL2k2NHx4b3IpKT98bWVtb3J5XFwuKD86Z3Jvd3xzaXplKSlcXGIvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvXFxiKD86YW55ZnVuY3xibG9ja3xicig/Ol9pZnxfdGFibGUpP3xjYWxsKD86X2luZGlyZWN0KT98ZGF0YXxkcm9wfGVsZW18ZWxzZXxlbmR8ZXhwb3J0fGZ1bmN8Z2V0Xyg/Omdsb2JhbHxsb2NhbCl8Z2xvYmFsfGlmfGltcG9ydHxsb2NhbHxsb29wfG1lbW9yeXxtb2R1bGV8bXV0fG5vcHxvZmZzZXR8cGFyYW18cmVzdWx0fHJldHVybnxzZWxlY3R8c2V0Xyg/Omdsb2JhbHxsb2NhbCl8c3RhcnR8dGFibGV8dGVlX2xvY2FsfHRoZW58dHlwZXx1bnJlYWNoYWJsZSlcXGIvXG5cdF0sXG5cdCd2YXJpYWJsZSc6IC9cXCRbXFx3ISMkJSYnKitcXC0uLzo8PT4/QFxcXFxeYHx+XSsvLFxuXHQnbnVtYmVyJzogL1srLV0/XFxiKD86XFxkKD86Xz9cXGQpKig/OlxcLlxcZCg/Ol8/XFxkKSopPyg/OltlRV1bKy1dP1xcZCg/Ol8/XFxkKSopP3wweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1GXSkqKD86XFwuW1xcZGEtZkEtRl0oPzpfP1tcXGRhLWZBLURdKSopPyg/OltwUF1bKy1dP1xcZCg/Ol8/XFxkKSopPylcXGJ8XFxiaW5mXFxifFxcYm5hbig/OjoweFtcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1EXSkqKT9cXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgaWQgPSAvKD86XFxCLXxcXGJffFxcYilbQS1aYS16XVtcXHctXSooPyFbXFx3LV0pLy5zb3VyY2U7XG5cdHZhciB0eXBlID1cblx0XHQnKD86JyArXG5cdFx0L1xcYig/OnVuc2lnbmVkXFxzKyk/bG9uZ1xccytsb25nKD8hW1xcdy1dKS8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdC9cXGIoPzp1bnJlc3RyaWN0ZWR8dW5zaWduZWQpXFxzK1thLXpdKyg/IVtcXHctXSkvLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvKD8hKD86dW5yZXN0cmljdGVkfHVuc2lnbmVkKVxcYikvLnNvdXJjZSArIGlkICsgLyg/Olxccyo8KD86W148Pl18PFtePD5dKj4pKj4pPy8uc291cmNlICtcblx0XHQnKScgKyAvKD86XFxzKlxcPyk/Ly5zb3VyY2U7XG5cblx0dmFyIHR5cGVJbnNpZGUgPSB7fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3dlYi1pZGwnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIlteXCJdKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxibmFtZXNwYWNlXFxzKykvLnNvdXJjZSArIGlkKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86aXRlcmFibGV8bWFwbGlrZXxzZXRsaWtlKVxccyo8KD86W148Pl18PFtePD5dKj4pKj4vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmF0dHJpYnV0ZXxjb25zdHxkZWxldGVyfGdldHRlcnxvcHRpb25hbHxzZXR0ZXIpXFxzKykvLnNvdXJjZSArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNhbGxiYWNrIHJldHVybiB0eXBlXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKCcgKyAvXFxiY2FsbGJhY2tcXHMrLy5zb3VyY2UgKyBpZCArIC9cXHMqPVxccyovLnNvdXJjZSArICcpJyArIHR5cGUpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHR5cGVkZWZcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxidHlwZWRlZlxcYlxccyopLy5zb3VyY2UgKyB0eXBlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmNhbGxiYWNrfGRpY3Rpb25hcnl8ZW51bXxpbnRlcmZhY2UoPzpcXHMrbWl4aW4pPylcXHMrKSg/ISg/OmludGVyZmFjZXxtaXhpbilcXGIpLy5zb3VyY2UgKyBpZCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBpbmhlcml0YW5jZVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyg6XFxzKikvLnNvdXJjZSArIGlkKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdH0sXG5cblx0XHRcdC8vIGluY2x1ZGVzIGFuZCBpbXBsZW1lbnRzXG5cdFx0XHRSZWdFeHAoaWQgKyAvKD89XFxzKyg/OmltcGxlbWVudHN8aW5jbHVkZXMpXFxiKS8uc291cmNlKSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiKD86aW1wbGVtZW50c3xpbmNsdWRlcylcXHMrKS8uc291cmNlICsgaWQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHQvLyBmdW5jdGlvbiByZXR1cm4gdHlwZSwgcGFyYW1ldGVyIHR5cGVzLCBhbmQgZGljdGlvbmFyeSBtZW1iZXJzXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0eXBlICsgJyg/PScgKyAvXFxzKig/OlxcLnszfVxccyopPy8uc291cmNlICsgaWQgKyAvXFxzKlsoKSw7PV0vLnNvdXJjZSArICcpJyksXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblx0XHRdLFxuXG5cdFx0J2J1aWx0aW4nOiAvXFxiKD86QXJyYXlCdWZmZXJ8QmlnSW50NjRBcnJheXxCaWdVaW50NjRBcnJheXxCeXRlU3RyaW5nfERPTVN0cmluZ3xEYXRhVmlld3xGbG9hdDMyQXJyYXl8RmxvYXQ2NEFycmF5fEZyb3plbkFycmF5fEludDE2QXJyYXl8SW50MzJBcnJheXxJbnQ4QXJyYXl8T2JzZXJ2YWJsZUFycmF5fFByb21pc2V8VVNWU3RyaW5nfFVpbnQxNkFycmF5fFVpbnQzMkFycmF5fFVpbnQ4QXJyYXl8VWludDhDbGFtcGVkQXJyYXkpXFxiLyxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdC9cXGIoPzphc3luY3xhdHRyaWJ1dGV8Y2FsbGJhY2t8Y29uc3R8Y29uc3RydWN0b3J8ZGVsZXRlcnxkaWN0aW9uYXJ5fGVudW18Z2V0dGVyfGltcGxlbWVudHN8aW5jbHVkZXN8aW5oZXJpdHxpbnRlcmZhY2V8bWl4aW58bmFtZXNwYWNlfG51bGx8b3B0aW9uYWx8b3J8cGFydGlhbHxyZWFkb25seXxyZXF1aXJlZHxzZXR0ZXJ8c3RhdGljfHN0cmluZ2lmaWVyfHR5cGVkZWZ8dW5yZXN0cmljdGVkKVxcYi8sXG5cdFx0XHQvLyB0eXBlIGtleXdvcmRzXG5cdFx0XHQvXFxiKD86YW55fGJpZ2ludHxib29sZWFufGJ5dGV8ZG91YmxlfGZsb2F0fGl0ZXJhYmxlfGxvbmd8bWFwbGlrZXxvYmplY3R8b2N0ZXR8cmVjb3JkfHNlcXVlbmNlfHNldGxpa2V8c2hvcnR8c3ltYm9sfHVuZGVmaW5lZHx1bnNpZ25lZHx2b2lkKVxcYi9cblx0XHRdLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSktPyg/OjB4WzAtOWEtZl0rfCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT98TmFOfEluZmluaXR5KSg/IVtcXHctXSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC9cXC57M318Wz06Pzw+LV0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0uLDtdL1xuXHR9O1xuXG5cdGZvciAodmFyIGtleSBpbiBQcmlzbS5sYW5ndWFnZXNbJ3dlYi1pZGwnXSkge1xuXHRcdGlmIChrZXkgIT09ICdjbGFzcy1uYW1lJykge1xuXHRcdFx0dHlwZUluc2lkZVtrZXldID0gUHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ11ba2V5XTtcblx0XHR9XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3dlYmlkbCddID0gUHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ107XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLndnc2wgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdidWlsdGluLWF0dHJpYnV0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKEApYnVpbHRpblxcKC4qP1xcKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eYnVpbHRpbi8sXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLF0vLFxuXHRcdFx0J2J1aWx0LWluLXZhbHVlcyc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OmZyYWdfZGVwdGh8ZnJvbnRfZmFjaW5nfGdsb2JhbF9pbnZvY2F0aW9uX2lkfGluc3RhbmNlX2luZGV4fGxvY2FsX2ludm9jYXRpb25faWR8bG9jYWxfaW52b2NhdGlvbl9pbmRleHxudW1fd29ya2dyb3Vwc3xwb3NpdGlvbnxzYW1wbGVfaW5kZXh8c2FtcGxlX21hc2t8dmVydGV4X2luZGV4fHdvcmtncm91cF9pZClcXGIvLFxuXHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnLFxuXHRcdFx0fSxcblx0XHR9LFxuXHR9LFxuXHQnYXR0cmlidXRlcyc6IHtcblx0XHRwYXR0ZXJuOiAvKEApKD86YWxpZ258YmluZGluZ3xjb21wdXRlfGNvbnN0fGZyYWdtZW50fGdyb3VwfGlkfGludGVycG9sYXRlfGludmFyaWFudHxsb2NhdGlvbnxzaXplfHZlcnRleHx3b3JrZ3JvdXBfc2l6ZSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0fSxcblx0J2Z1bmN0aW9ucyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKGZuXFxzKylbX2EtekEtWl1cXHcqKD89Wyg8XSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmJpdGNhc3R8YnJlYWt8Y2FzZXxjb25zdHxjb250aW51ZXxjb250aW51aW5nfGRlZmF1bHR8ZGlzY2FyZHxlbHNlfGVuYWJsZXxmYWxsdGhyb3VnaHxmbnxmb3J8ZnVuY3Rpb258aWZ8bGV0fGxvb3B8cHJpdmF0ZXxyZXR1cm58c3RvcmFnZXxzdHJ1Y3R8c3dpdGNofHR5cGV8dW5pZm9ybXx2YXJ8d2hpbGV8d29ya2dyb3VwKVxcYi8sXG5cdCdidWlsdGluJzogL1xcYig/OmFic3xhY29zfGFjb3NofGFsbHxhbnl8YXJyYXl8YXNpbnxhc2luaHxhdGFufGF0YW4yfGF0YW5ofGF0b21pY3xhdG9taWNBZGR8YXRvbWljQW5kfGF0b21pY0NvbXBhcmVFeGNoYW5nZVdlYWt8YXRvbWljRXhjaGFuZ2V8YXRvbWljTG9hZHxhdG9taWNNYXh8YXRvbWljTWlufGF0b21pY09yfGF0b21pY1N0b3JlfGF0b21pY1N1YnxhdG9taWNYb3J8Ym9vbHxjZWlsfGNsYW1wfGNvc3xjb3NofGNvdW50TGVhZGluZ1plcm9zfGNvdW50T25lQml0c3xjb3VudFRyYWlsaW5nWmVyb3N8Y3Jvc3N8ZGVncmVlc3xkZXRlcm1pbmFudHxkaXN0YW5jZXxkb3R8ZHBkeHxkcGR4Q29hcnNlfGRwZHhGaW5lfGRwZHl8ZHBkeUNvYXJzZXxkcGR5RmluZXxleHB8ZXhwMnxleHRyYWN0Qml0c3xmMzJ8ZjY0fGZhY2VGb3J3YXJkfGZpcnN0TGVhZGluZ0JpdHxmbG9vcnxmbWF8ZnJhY3R8ZnJleHB8ZndpZHRofGZ3aWR0aENvYXJzZXxmd2lkdGhGaW5lfGkzMnxpNjR8aW5zZXJ0Qml0c3xpbnZlcnNlU3FydHxsZGV4cHxsZW5ndGh8bG9nfGxvZzJ8bWF0WzItNF14WzItNF18bWF4fG1pbnxtaXh8bW9kZnxub3JtYWxpemV8b3ZlcnJpZGV8cGFjazJ4MTZmbG9hdHxwYWNrMngxNnNub3JtfHBhY2syeDE2dW5vcm18cGFjazR4OHNub3JtfHBhY2s0eDh1bm9ybXxwb3d8cHRyfHF1YW50aXplVG9GMTZ8cmFkaWFuc3xyZWZsZWN0fHJlZnJhY3R8cmV2ZXJzZUJpdHN8cm91bmR8c2FtcGxlcnxzYW1wbGVyX2NvbXBhcmlzb258c2VsZWN0fHNoaWZ0TGVmdHxzaGlmdFJpZ2h0fHNpZ258c2lufHNpbmh8c21vb3Roc3RlcHxzcXJ0fHN0YXRpY0Fzc2VydHxzdGVwfHN0b3JhZ2VCYXJyaWVyfHRhbnx0YW5ofHRleHR1cmVEaW1lbnNpb25zfHRleHR1cmVHYXRoZXJ8dGV4dHVyZUdhdGhlckNvbXBhcmV8dGV4dHVyZUxvYWR8dGV4dHVyZU51bUxheWVyc3x0ZXh0dXJlTnVtTGV2ZWxzfHRleHR1cmVOdW1TYW1wbGVzfHRleHR1cmVTYW1wbGV8dGV4dHVyZVNhbXBsZUJpYXN8dGV4dHVyZVNhbXBsZUNvbXBhcmV8dGV4dHVyZVNhbXBsZUNvbXBhcmVMZXZlbHx0ZXh0dXJlU2FtcGxlR3JhZHx0ZXh0dXJlU2FtcGxlTGV2ZWx8dGV4dHVyZVN0b3JlfHRleHR1cmVfMWR8dGV4dHVyZV8yZHx0ZXh0dXJlXzJkX2FycmF5fHRleHR1cmVfM2R8dGV4dHVyZV9jdWJlfHRleHR1cmVfY3ViZV9hcnJheXx0ZXh0dXJlX2RlcHRoXzJkfHRleHR1cmVfZGVwdGhfMmRfYXJyYXl8dGV4dHVyZV9kZXB0aF9jdWJlfHRleHR1cmVfZGVwdGhfY3ViZV9hcnJheXx0ZXh0dXJlX2RlcHRoX211bHRpc2FtcGxlZF8yZHx0ZXh0dXJlX211bHRpc2FtcGxlZF8yZHx0ZXh0dXJlX3N0b3JhZ2VfMWR8dGV4dHVyZV9zdG9yYWdlXzJkfHRleHR1cmVfc3RvcmFnZV8yZF9hcnJheXx0ZXh0dXJlX3N0b3JhZ2VfM2R8dHJhbnNwb3NlfHRydW5jfHUzMnx1NjR8dW5wYWNrMngxNmZsb2F0fHVucGFjazJ4MTZzbm9ybXx1bnBhY2syeDE2dW5vcm18dW5wYWNrNHg4c25vcm18dW5wYWNrNHg4dW5vcm18dmVjWzItNF18d29ya2dyb3VwQmFycmllcilcXGIvLFxuXHQnZnVuY3Rpb24tY2FsbHMnOiB7XG5cdFx0cGF0dGVybjogL1xcYltfYS16XVxcdyooPz1cXCgpL2ksXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OltBLVpdW0EtWmEtejAtOV0qKVxcYi8sXG5cdCdib29sLWxpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHRhbGlhczogJ2Jvb2xlYW4nLFxuXHR9LFxuXHQnaGV4LWludC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGIwW3hYXVswLTlhLWZBLUZdK1tpdV0/XFxiKD8hWy5wUF0pLyxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH0sXG5cdCdoZXgtZmxvYXQtbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiMFt4WF1bMC05YS1mQS1GXSooPzpcXC5bMC05YS1mQS1GXSopPyg/OltwUF1bKy1dP1xcZCtbZmhdPyk/LywgYWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdkZWNpbWFsLWZsb2F0LWxpdGVyYWwnOiBbXG5cdFx0eyBwYXR0ZXJuOiAvXFxkKlxcLlxcZCsoPzpbZUVdKD86XFwrfC0pP1xcZCspP1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxkK1xcLlxcZCooPzpbZUVdKD86XFwrfC0pP1xcZCspP1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxkK1tlRV0oPzpcXCt8LSk/XFxkK1tmaF0/LywgYWxpYXM6ICdudW1iZXInIH0sXG5cdFx0eyBwYXR0ZXJuOiAvXFxiXFxkK1tmaF1cXGIvLCBhbGlhczogJ251bWJlcicgfSxcblx0XSxcblx0J2ludC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXGQrW2l1XT9cXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0fSxcblx0J29wZXJhdG9yJzogW1xuXHRcdHsgcGF0dGVybjogLyg/OlxcXnx+fFxcfCg/IVxcfCl8XFx8XFx8fCYmfDw8fD4+fCEpKD8hPSkvIH0sXG5cdFx0eyBwYXR0ZXJuOiAvJig/IVsmPV0pLyB9LFxuXHRcdHsgcGF0dGVybjogLyg/OlxcKz18LT18XFwqPXxcXC89fCU9fFxcXj18Jj18XFx8PXw8PD18Pj49KS8gfSxcblx0XHR7IHBhdHRlcm46IC8oXnxbXjw+PSFdKT0oPyFbPT5dKS8sIGxvb2tiZWhpbmQ6IHRydWUgfSxcblx0XHR7IHBhdHRlcm46IC8oPzo9PXwhPXw8PXxcXCtcXCt8LS18KF58W149XSk+PSkvLCBsb29rYmVoaW5kOiB0cnVlIH0sXG5cdFx0eyBwYXR0ZXJuOiAvKD86KD86WyslXXwoPzpcXCooPyFcXHcpKSkoPyE9KSl8KD86LSg/IT4pKXwoPzpcXC8oPyFcXC8pKS8gfSxcblx0XHR7IHBhdHRlcm46IC8tPi8gfSxcblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1tAKCl7fVtcXF0sOzw+Oi5dLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy53aWtpID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHQnYmxvY2stY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J2hlYWRpbmcnOiB7XG5cdFx0cGF0dGVybjogL14oPSspW149XFxyXFxuXS4qP1xcMS9tLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL149K3w9KyQvLFxuXHRcdFx0J2ltcG9ydGFudCc6IC8uKy9cblx0XHR9XG5cdH0sXG5cdCdlbXBoYXNpcyc6IHtcblx0XHQvLyBUT0RPIE11bHRpLWxpbmVcblx0XHRwYXR0ZXJuOiAvKCd7Miw1fSkuKz9cXDEvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2JvbGQtaXRhbGljJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCcnJycnKS4rPyg/PVxcMSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogWydib2xkJywgJ2l0YWxpYyddXG5cdFx0XHR9LFxuXHRcdFx0J2JvbGQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oJycnKVteJ10oPzouKj9bXiddKT8oPz1cXDEpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdpdGFsaWMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oJycpW14nXSg/Oi4qP1teJ10pPyg/PVxcMSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL14nJyt8JycrJC9cblx0XHR9XG5cdH0sXG5cdCdocic6IHtcblx0XHRwYXR0ZXJuOiAvXi17NCx9L20sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J3VybCc6IFtcblx0XHQvSVNCTiArKD86OTdbODldWyAtXT8pPyg/OlxcZFsgLV0/KXs5fVtcXGR4XVxcYnwoPzpQTUlEfFJGQykgK1xcZCsvaSxcblx0XHQvXFxbXFxbLis/XFxdXFxdfFxcWy4rP1xcXS9cblx0XSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdC9fX1tBLVpdK19fLyxcblx0XHQvLyBGSVhNRSBOZXN0ZWQgc3RydWN0dXJlcyBzaG91bGQgYmUgaGFuZGxlZFxuXHRcdC8vIHt7Zm9ybWF0bnVtOnt7I2V4cHI6e3t7M319fX19fX1cblx0XHQvXFx7ezN9Lis/XFx9ezN9Lyxcblx0XHQvXFx7XFx7Lis/XFx9XFx9L1xuXHRdLFxuXHQnc3ltYm9sJzogW1xuXHRcdC9eI3JlZGlyZWN0L2ltLFxuXHRcdC9+ezMsNX0vXG5cdF0sXG5cdC8vIEhhbmRsZSB0YWJsZSBhdHRyczpcblx0Ly8ge3xcblx0Ly8gISBzdHlsZT1cInRleHQtYWxpZ246bGVmdDtcInwgSXRlbVxuXHQvLyB8fVxuXHQndGFibGUtdGFnJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbfCFdKVt8IV0pW158XFxyXFxuXStcXHwoPyFcXHwpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWJsZS1iYXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXHwkLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMubWFya3VwWyd0YWcnXS5pbnNpZGVcblx0XHR9XG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9eKD86XFx7XFx8fFxcfFxcfXxcXHwtfFsqIzo7IXxdKXxcXHxcXHx8ISEvbVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3dpa2knLCAndGFnJywge1xuXHQvLyBQcmV2ZW50IGhpZ2hsaWdodGluZyBpbnNpZGUgPG5vd2lraT4sIDxzb3VyY2U+IGFuZCA8cHJlPiB0YWdzXG5cdCdub3dpa2knOiB7XG5cdFx0cGF0dGVybjogLzwobm93aWtpfHByZXxzb3VyY2UpXFxiW14+XSo+W1xcc1xcU10qPzxcXC9cXDE+L2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndGFnJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPCg/Om5vd2lraXxwcmV8c291cmNlKVxcYltePl0qPnw8XFwvKD86bm93aWtpfHByZXxzb3VyY2UpPi9pLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ3RhZyddLmluc2lkZVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy53b2xmcmFtID0ge1xuXHQnY29tbWVudCc6IC8vIEFsbG93IG9uZSBsZXZlbCBvZiBuZXN0aW5nIC0gbm90ZTogcmVnZXggdGFrZW4gZnJvbSBhcHBsZXNjaXB0XG5cdFx0L1xcKFxcKig/OlxcKFxcKig/OlteKl18XFwqKD8hXFwpKSkqXFwqXFwpfCg/IVxcKFxcKilbXFxzXFxTXSkqP1xcKlxcKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OkFic3xBYnNBcmd8QWNjdXJhY3l8QmxvY2t8RG98Rm9yfEZ1bmN0aW9ufElmfE1hbmlwdWxhdGV8TW9kdWxlfE5lc3R8TmVzdExpc3R8Tm9uZXxSZXR1cm58U3dpdGNofFRhYmxlfFdoaWNofFdoaWxlKVxcYi8sXG5cdCdjb250ZXh0Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXHcrYCtcXHcqLyxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cdCdibGFuayc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3K19cXGIvLFxuXHRcdGFsaWFzOiAncmVnZXgnXG5cdH0sXG5cdCdnbG9iYWwtdmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1xcJFxcdysvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiLyxcblx0J251bWJlcic6IC8oPzpcXGIoPz1cXGQpfFxcQig/PVxcLikpKD86MFtib10pPyg/Oig/OlxcZHwweFtcXGRhLWZdKVtcXGRhLWZdKig/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspP2o/XFxiL2ksXG5cdCdvcGVyYXRvcic6IC9cXC9cXC58O3w9XFwufFxcXj18XFxeOj18Oj18PDx8Pj58PFxcfHxcXHw+fDo+fFxcfC0+fC0+fDwtfEBAQHxAQHxAfFxcL0B8PSE9fD09PXw9PXw9fFxcK3wtfFxcW1xcLy0rJT1cXF09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tYXRoZW1hdGljYSA9IFByaXNtLmxhbmd1YWdlcy53b2xmcmFtO1xuUHJpc20ubGFuZ3VhZ2VzLndsID0gUHJpc20ubGFuZ3VhZ2VzLndvbGZyYW07XG5QcmlzbS5sYW5ndWFnZXMubmIgPSBQcmlzbS5sYW5ndWFnZXMud29sZnJhbTtcblxuLy8gaHR0cHM6Ly93cmVuLmlvL1xuXG5QcmlzbS5sYW5ndWFnZXMud3JlbiA9IHtcblx0Ly8gTXVsdGlsaW5lIGNvbW1lbnRzIGluIFdyZW4gY2FuIGhhdmUgbmVzdGVkIG11bHRpbGluZSBjb21tZW50c1xuXHQvLyBDb21tZW50czogLy8gYW5kIC8qICovXG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdC8vIHN1cHBvcnQgMyBsZXZlbHMgb2YgbmVzdGluZ1xuXHRcdFx0Ly8gcmVnZXg6IFxcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKXw8c2VsZj4pKlxcKlxcL1xuXHRcdFx0cGF0dGVybjogL1xcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKXxcXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopKSpcXCpcXC8pKlxcKlxcLykqXFwqXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cblx0Ly8gVHJpcGxlIHF1b3RlZCBzdHJpbmdzIGFyZSBtdWx0aWxpbmUgYnV0IGNhbm5vdCBoYXZlIGludGVycG9sYXRpb24gKHJhdyBzdHJpbmdzKVxuXHQvLyBCYXNlZCBvbiBwcmlzbS1weXRob24uanNcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cblx0Ly8gc2VlIGJlbG93XG5cdCdzdHJpbmctbGl0ZXJhbCc6IG51bGwsXG5cblx0Ly8gIyEvdXNyL2Jpbi9lbnYgd3JlbiBvbiB0aGUgZmlyc3QgbGluZVxuXHQnaGFzaGJhbmcnOiB7XG5cdFx0cGF0dGVybjogL14jIVxcLy4rLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXG5cdC8vIEF0dHJpYnV0ZXMgYXJlIHNwZWNpYWwga2V5d29yZHMgdG8gYWRkIG1ldGEgZGF0YSB0byBjbGFzc2VzXG5cdCdhdHRyaWJ1dGUnOiB7XG5cdFx0Ly8gIyEgYXR0cmlidXRlcyBhcmUgc3RvcmVkIGluIGNsYXNzIHByb3BlcnRpZXNcblx0XHQvLyAjIW15dmFyID0gdHJ1ZVxuXHRcdC8vICNhdHRyaWJ1dGVzIGFyZSBub3Qgc3RvcmVkIGFuZCBkaXNtaXNzZWQgYXQgY29tcGlsYXRpb25cblx0XHRwYXR0ZXJuOiAvIyE/WyBcXHRcXHUzMDAwXSpcXHcrLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdHtcblx0XHRcdC8vIGNsYXNzIGRlZmluaXRpb25cblx0XHRcdC8vIGNsYXNzIE1ldGEge31cblx0XHRcdHBhdHRlcm46IC8oXFxiY2xhc3NcXHMrKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gQSBjbGFzcyBtdXN0IGFsd2F5cyBzdGFydCB3aXRoIGFuIHVwcGVyY2FzZS5cblx0XHQvLyBGaWxlLnJlYWRcblx0XHQvXFxiW0EtWl1bYS16XFxkX10qXFxiLyxcblx0XSxcblxuXHQvLyBBIGNvbnN0YW50IGNhbiBiZSBhIHZhcmlhYmxlLCBjbGFzcywgcHJvcGVydHkgb3IgbWV0aG9kLiBKdXN0IG5hbWVkIGluIGFsbCB1cHBlcmNhc2UgbGV0dGVyc1xuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aXFxkX10qXFxiLyxcblxuXHQnbnVsbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxibnVsbFxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xicmVha3xjbGFzc3xjb25zdHJ1Y3R8Y29udGludWV8ZWxzZXxmb3J8Zm9yZWlnbnxpZnxpbXBvcnR8aW58aXN8cmV0dXJufHN0YXRpY3xzdXBlcnx0aGlzfHZhcnx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiKD86MHhbXFxkYS1mXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGIvaSxcblxuXHQvLyBGdW5jdGlvbnMgY2FuIGJlIENsYXNzLm1ldGhvZCgpXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlsoe10pL2ksXG5cblx0J29wZXJhdG9yJzogLzw8fD4+fFs9ITw+XT0/fCYmfFxcfFxcfHxbLSsqLyV+XiZ8PzpdfFxcLnsyLDN9Lyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9Liw7XS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMud3Jlblsnc3RyaW5nLWxpdGVyYWwnXSA9IHtcblx0Ly8gQSBzaW5nbGUgcXVvdGUgc3RyaW5nIGlzIG11bHRpbGluZSBhbmQgY2FuIGhhdmUgaW50ZXJwb2xhdGlvbiAoc2ltaWxhciB0byBKUyBiYWNrdGlja3MgYGApXG5cdHBhdHRlcm46IC8oXnxbXlxcXFxcIl0pXCIoPzpbXlxcXFxcIiVdfFxcXFxbXFxzXFxTXXwlKD8hXFwoKXwlXFwoKD86W14oKV18XFwoKD86W14oKV18XFwoW14pXSpcXCkpKlxcKSkqXFwpKSpcIi8sXG5cdGxvb2tiZWhpbmQ6IHRydWUsXG5cdGdyZWVkeTogdHJ1ZSxcblx0aW5zaWRlOiB7XG5cdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHQvLyBcIiUoaW50ZXJwb2xhdGlvbilcIlxuXHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKSVcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXildKlxcKSkqXFwpKSpcXCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiglXFwoKVtcXHNcXFNdKyg/PVxcKSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLndyZW5cblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14lXFwofFxcKSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0fVxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMueGVvcmEgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7XG5cdFx0J2NvbnN0YW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcJCg/OkRvbWFpbkNvbnRlbnRzfFBhZ2VSZW5kZXJEdXJhdGlvbilcXCQvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkQD8oPzojK3xbLSsqfj1eXSk/W1xcdy5dK1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bJC5dL1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyMrfFstKyp+PV5AXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWlubGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCRGOlstXFx3Ll0rXFw/Wy1cXHcuXSsoPzosKD86KD86QFstI10qXFx3K1xcLltcXHcrLl1cXC4qKSpcXHwpKig/Oig/OltcXHcrXXxbLSMqLn5eXStbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qfCg/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikrKD86KD86W1xcdytdfFstIyp+Xl1bLSMqLn5eXSpbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qKT8pPyk/XFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/OlssfF0pQD8oPzojK3xbLSsqfj1eXSk/W1xcdy5dKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bLC58XS9cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jK3xbLSsqfj1eQF0vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJFxcdzp8WyQ6Py4sfF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFhGOlxce1stXFx3Ll0rXFw/Wy1cXHcuXSsoPzosKD86KD86QFstI10qXFx3K1xcLltcXHcrLl1cXC4qKSpcXHwpKig/Oig/OltcXHcrXXxbLSMqLn5eXStbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qfCg/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikrKD86KD86W1xcdytdfFstIyp+Xl1bLSMqLn5eXSpbXFx3K118PVxcUykoPzpbXiQ9XXw9K1tePV0pKj0qKT8pPyk/XFx9OlhGXFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1skOnt9Py4sfF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1pbmxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkXFx3KD86I1xcZCtcXCs/KT8oPzpcXFtbLVxcdy5dK1xcXSk/OlstXFwvXFx3Ll0rXFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJCg/Olxcdzp8Qyg/OlxcW3wjXFxkKSk/fFs6e1tcXF1dLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd0YWcnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8jXFxkL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlLWJsb2NrLW9wZW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkXFx3KzpcXHt8XFwkXFx3KD86I1xcZCtcXCs/KT8oPzpcXFtbLVxcdy5dK1xcXSk/OlstXFx3Ll0rOlxceyg/OiFbQS1aXSspPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpcXHc6fEMoPzpcXFt8I1xcZCkpP3xbOntbXFxdXS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGFnJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xcZC9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyFbQS1aXSskLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyEvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1ibG9jay1zZXBhcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx9OlstXFx3Ll0rOlxcey8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bOnt9XS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZGlyZWN0aXZlLWJsb2NrLWNsb3NlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcfTpbLVxcdy5dK1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bOnt9JF0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaW5zaWRlJywgJ3B1bmN0dWF0aW9uJywge1xuXHRcdCd2YXJpYWJsZSc6IFByaXNtLmxhbmd1YWdlcy54ZW9yYVsnZnVuY3Rpb24taW5saW5lJ10uaW5zaWRlWyd2YXJpYWJsZSddXG5cdH0sIFByaXNtLmxhbmd1YWdlcy54ZW9yYVsnZnVuY3Rpb24tYmxvY2snXSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhlb3JhY3ViZSA9IFByaXNtLmxhbmd1YWdlcy54ZW9yYTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIElmIHRoZSBnaXZlbiBsYW5ndWFnZSBpcyBwcmVzZW50LCBpdCB3aWxsIGluc2VydCB0aGUgZ2l2ZW4gZG9jIGNvbW1lbnQgZ3JhbW1hciB0b2tlbiBpbnRvIGl0LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ1xuXHQgKiBAcGFyYW0ge2FueX0gZG9jQ29tbWVudFxuXHQgKi9cblx0ZnVuY3Rpb24gaW5zZXJ0RG9jQ29tbWVudChsYW5nLCBkb2NDb21tZW50KSB7XG5cdFx0aWYgKFByaXNtLmxhbmd1YWdlc1tsYW5nXSkge1xuXHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZShsYW5nLCAnY29tbWVudCcsIHtcblx0XHRcdFx0J2RvYy1jb21tZW50JzogZG9jQ29tbWVudFxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0dmFyIHRhZyA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnO1xuXG5cdHZhciBzbGFzaERvY0NvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogL1xcL1xcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB0YWdcblx0XHR9XG5cdH07XG5cdHZhciB0aWNrRG9jQ29tbWVudCA9IHtcblx0XHRwYXR0ZXJuOiAvJycnLiovLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHRhZ1xuXHRcdH1cblx0fTtcblxuXHRpbnNlcnREb2NDb21tZW50KCdjc2hhcnAnLCBzbGFzaERvY0NvbW1lbnQpO1xuXHRpbnNlcnREb2NDb21tZW50KCdmc2hhcnAnLCBzbGFzaERvY0NvbW1lbnQpO1xuXHRpbnNlcnREb2NDb21tZW50KCd2Ym5ldCcsIHRpY2tEb2NDb21tZW50KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMueG9qbyA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyg/Oid8XFwvXFwvfFJlbVxcYikuKy9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlwiXCJ8W15cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IFtcblx0XHQvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OkVbKy1dP1xcZCspPy9pLFxuXHRcdC8mW2JjaG91XVthLXpcXGRdKy9pXG5cdF0sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogLyMoPzpFbHNlfEVsc2VJZnxFbmRpZnxJZnxQcmFnbWEpXFxiL2ksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86QWRkSGFuZGxlcnxBcHB8QXJyYXl8QXMoPzpzaWducyk/fEF1dG98Qm9vbGVhbnxCcmVha3xCeSg/OlJlZnxWYWwpfEJ5dGV8Q2FsbHxDYXNlfENhdGNofENGU3RyaW5nUmVmfENHRmxvYXR8Q2xhc3N8Q29sb3J8Q29uc3R8Q29udGludWV8Q1N0cmluZ3xDdXJyZW5jeXxDdXJyZW50TWV0aG9kTmFtZXxEZWNsYXJlfERlbGVnYXRlfERpbXxEbyg/OnVibGV8d25Ubyk/fEVhY2h8RWxzZSg/OklmKT98RW5kfEVudW1lcmF0aW9ufEV2ZW50fEV4Y2VwdGlvbnxFeGl0fEV4dGVuZHN8RmFsc2V8RmluYWxseXxGb3J8RnVuY3Rpb258R2V0fEdldFR5cGVJbmZvfEdsb2JhbHxHT1RPfElmfEltcGxlbWVudHN8SW58SW5oZXJpdHN8SW50KD86OHwxNnwzMnw2NHxlZ2VyfGVyZmFjZSk/fExpYnxMb29wfE1lfE1vZHVsZXxOZXh0fE5pbHxPYmplY3R8T3B0aW9uYWx8T1NUeXBlfFBhcmFtQXJyYXl8UHJpdmF0ZXxQcm9wZXJ0eXxQcm90ZWN0ZWR8UFN0cmluZ3xQdHJ8UmFpc2UoPzpFdmVudCk/fFJlRGltfFJlbW92ZUhhbmRsZXJ8UmV0dXJufFNlbGVjdCg/Om9yKT98U2VsZnxTZXR8U2hhcmVkfFNob3J0fFNpbmdsZXxTb2Z0fFN0YXRpY3xTdGVwfFN0cmluZ3xTdWJ8U3VwZXJ8VGV4dHxUaGVufFRvfFRydWV8VHJ5fFVib3VuZHxVSW50KD86OHwxNnwzMnw2NHxlZ2VyKT98VW50aWx8VXNpbmd8VmFyKD86aWFudCk/fFdlbmR8V2hpbGV8V2luZG93UHRyfFdTdHJpbmcpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC88Wz0+XT98Pj0/fFsrXFwtKlxcL1xcXFxePV18XFxiKD86QWRkcmVzc09mfEFuZHxDdHlwZXxJc0E/fE1vZHxOZXd8Tm90fE9yfFdlYWtBZGRyZXNzT2Z8WG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWy4sOzooKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0XHQneHF1ZXJ5LWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwoOltcXHNcXFNdKj86XFwpLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcMVxcMXwoPyFcXDEpW1xcc1xcU10pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdleHRlbnNpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwoIy4rPyNcXCkvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiAvXFwkWy1cXHc6XSsvLFxuXHRcdCdheGlzJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLV0pKD86YW5jZXN0b3IoPzotb3Itc2VsZik/fGF0dHJpYnV0ZXxjaGlsZHxkZXNjZW5kYW50KD86LW9yLXNlbGYpP3xmb2xsb3dpbmcoPzotc2libGluZyk/fHBhcmVudHxwcmVjZWRpbmcoPzotc2libGluZyk/fHNlbGYpKD89OjopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQtb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W146LV0pXFxiKD86YW5kfGNhc3RhYmxlIGFzfGRpdnxlcXxleGNlcHR8Z2V8Z3R8aWRpdnxpbnN0YW5jZSBvZnxpbnRlcnNlY3R8aXN8bGV8bHR8bW9kfG5lfG9yfHVuaW9uKVxcYig/PSR8W146LV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W146LV0pXFxiKD86YXN8YXNjZW5kaW5nfGF0fGJhc2UtdXJpfGJvdW5kYXJ5LXNwYWNlfGNhc2V8Y2FzdCBhc3xjb2xsYXRpb258Y29uc3RydWN0aW9ufGNvcHktbmFtZXNwYWNlc3xkZWNsYXJlfGRlZmF1bHR8ZGVzY2VuZGluZ3xlbHNlfGVtcHR5ICg/OmdyZWF0ZXN0fGxlYXN0KXxlbmNvZGluZ3xldmVyeXxleHRlcm5hbHxmb3J8ZnVuY3Rpb258aWZ8aW1wb3J0fGlufGluaGVyaXR8bGF4fGxldHxtYXB8bW9kdWxlfG5hbWVzcGFjZXxuby1pbmhlcml0fG5vLXByZXNlcnZlfG9wdGlvbnxvcmRlcig/OiBieXxlZHxpbmcpP3xwcmVzZXJ2ZXxyZXR1cm58c2F0aXNmaWVzfHNjaGVtYXxzb21lfHN0YWJsZXxzdHJpY3R8c3RyaXB8dGhlbnx0b3x0cmVhdCBhc3x0eXBlc3dpdGNofHVub3JkZXJlZHx2YWxpZGF0ZXx2YXJpYWJsZXx2ZXJzaW9ufHdoZXJlfHhxdWVyeSlcXGIoPz0kfFteOi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiAvW1xcdy1dKyg/OjpbXFx3LV0rKSooPz1cXHMqXFwoKS8sXG5cdFx0J3hxdWVyeS1lbGVtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhlbGVtZW50XFxzKylbXFx3LV0rKD86OltcXHctXSspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd0YWcnXG5cdFx0fSxcblx0XHQneHF1ZXJ5LWF0dHJpYnV0ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oYXR0cmlidXRlXFxzKylbXFx3LV0rKD86OltcXHctXSspKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXjotXSlcXGIoPzphdHRyaWJ1dGV8Y29tbWVudHxkb2N1bWVudHxlbGVtZW50fHByb2Nlc3NpbmctaW5zdHJ1Y3Rpb258dGV4dHx4czooPzpFTlRJVElFU3xFTlRJVFl8SUR8SURSRUZTP3xOQ05hbWV8Tk1UT0tFTlM/fE5PVEFUSU9OfE5hbWV8UU5hbWV8YW55QXRvbWljVHlwZXxhbnlUeXBlfGFueVVSSXxiYXNlNjRCaW5hcnl8Ym9vbGVhbnxieXRlfGRhdGV8ZGF0ZVRpbWV8ZGF5VGltZUR1cmF0aW9ufGRlY2ltYWx8ZG91YmxlfGR1cmF0aW9ufGZsb2F0fGdEYXl8Z01vbnRofGdNb250aERheXxnWWVhcnxnWWVhck1vbnRofGhleEJpbmFyeXxpbnR8aW50ZWdlcnxsYW5ndWFnZXxsb25nfG5lZ2F0aXZlSW50ZWdlcnxub25OZWdhdGl2ZUludGVnZXJ8bm9uUG9zaXRpdmVJbnRlZ2VyfG5vcm1hbGl6ZWRTdHJpbmd8cG9zaXRpdmVJbnRlZ2VyfHNob3J0fHN0cmluZ3x0aW1lfHRva2VufHVuc2lnbmVkKD86Qnl0ZXxJbnR8TG9uZ3xTaG9ydCl8dW50eXBlZCg/OkF0b21pYyk/fHllYXJNb250aER1cmF0aW9uKSlcXGIoPz0kfFteOi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT8oPzpFWystXT9cXGQrKT8vLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC9bKyo9P3xAXXxcXC5cXC4/fDo9fCE9fDxbPTxdP3w+Wz0+XT8vLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccyktKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXSgpe30sOzovXS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeS50YWcucGF0dGVybiA9IC88XFwvPyg/IVxcZClbXlxccz5cXC89JDwlXSsoPzpcXHMrW15cXHM+XFwvPV0rKD86PSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXxcXHsoPyFcXHspKD86XFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH18W157fV0pK1xcfXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykpPykqXFxzKlxcLz8+Lztcblx0UHJpc20ubGFuZ3VhZ2VzLnhxdWVyeVsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10ucGF0dGVybiA9IC89KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfFxceyg/IVxceykoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkrXFx9fCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKS87XG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnlbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsncHVuY3R1YXRpb24nXSA9IC9ePVwifFwiJC87XG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnlbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsnZXhwcmVzc2lvbiddID0ge1xuXHRcdC8vIEFsbG93IGZvciB0d28gbGV2ZWxzIG9mIG5lc3Rpbmdcblx0XHRwYXR0ZXJuOiAvXFx7KD8hXFx7KSg/Olxceyg/Olxce1tee31dKlxcfXxbXnt9XSkqXFx9fFtee31dKStcXH0vLFxuXHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnhxdWVyeSxcblx0XHRhbGlhczogJ2xhbmd1YWdlLXhxdWVyeSdcblx0fTtcblxuXHQvLyBUaGUgZm9sbG93aW5nIHdpbGwgaGFuZGxlIHBsYWluIHRleHQgaW5zaWRlIHRhZ3Ncblx0dmFyIHN0cmluZ2lmeVRva2VuID0gZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiB0b2tlbjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0b2tlbi5jb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuLmNvbnRlbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbi5jb250ZW50Lm1hcChzdHJpbmdpZnlUb2tlbikuam9pbignJyk7XG5cdH07XG5cblx0dmFyIHdhbGtUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG5cdFx0dmFyIG9wZW5lZFRhZ3MgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXHRcdFx0dmFyIG5vdFRhZ05vckJyYWNlID0gZmFsc2U7XG5cblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAndGFnJyAmJiB0b2tlbi5jb250ZW50WzBdICYmIHRva2VuLmNvbnRlbnRbMF0udHlwZSA9PT0gJ3RhZycpIHtcblx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIHRhZywgbm93IGZpbmQgaXRzIGtpbmRcblxuXHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50WzBdLmNvbnRlbnRbMF0uY29udGVudCA9PT0gJzwvJykge1xuXHRcdFx0XHRcdFx0Ly8gQ2xvc2luZyB0YWdcblx0XHRcdFx0XHRcdGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLnRhZ05hbWUgPT09IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gUG9wIG1hdGNoaW5nIG9wZW5pbmcgdGFnXG5cdFx0XHRcdFx0XHRcdG9wZW5lZFRhZ3MucG9wKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50W3Rva2VuLmNvbnRlbnQubGVuZ3RoIC0gMV0uY29udGVudCA9PT0gJy8+Jykge1xuXHRcdFx0XHRcdFx0XHQvLyBBdXRvY2xvc2VkIHRhZywgaWdub3JlXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBPcGVuaW5nIHRhZ1xuXHRcdFx0XHRcdFx0XHRvcGVuZWRUYWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHRhZ05hbWU6IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSksXG5cdFx0XHRcdFx0XHRcdFx0b3BlbmVkQnJhY2VzOiAwXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAneycgJiZcblx0XHRcdFx0XHQvLyBJZ25vcmUgYHt7YFxuXHRcdFx0XHRcdCghdG9rZW5zW2kgKyAxXSB8fCB0b2tlbnNbaSArIDFdLnR5cGUgIT09ICdwdW5jdHVhdGlvbicgfHwgdG9rZW5zW2kgKyAxXS5jb250ZW50ICE9PSAneycpICYmXG5cdFx0XHRcdFx0KCF0b2tlbnNbaSAtIDFdIHx8IHRva2Vuc1tpIC0gMV0udHlwZSAhPT0gJ3BsYWluLXRleHQnIHx8IHRva2Vuc1tpIC0gMV0uY29udGVudCAhPT0gJ3snKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHQvLyBIZXJlIHdlIG1pZ2h0IGhhdmUgZW50ZXJlZCBhbiBYUXVlcnkgZXhwcmVzc2lvbiBpbnNpZGUgYSB0YWdcblx0XHRcdFx0XHRvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzKys7XG5cblx0XHRcdFx0fSBlbHNlIGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcyA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAnfScpIHtcblxuXHRcdFx0XHRcdC8vIEhlcmUgd2UgbWlnaHQgaGF2ZSBsZWZ0IGFuIFhRdWVyeSBleHByZXNzaW9uIGluc2lkZSBhIHRhZ1xuXHRcdFx0XHRcdG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMtLTtcblxuXHRcdFx0XHR9IGVsc2UgaWYgKHRva2VuLnR5cGUgIT09ICdjb21tZW50Jykge1xuXHRcdFx0XHRcdG5vdFRhZ05vckJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG5vdFRhZ05vckJyYWNlIHx8IHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiBvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBhcmUgaW5zaWRlIGEgdGFnLCBhbmQgbm90IGluc2lkZSBhbiBYUXVlcnkgZXhwcmVzc2lvbi5cblx0XHRcdFx0XHQvLyBUaGF0J3MgcGxhaW4gdGV4dDogZHJvcCBhbnkgdG9rZW5zIG1hdGNoZWQuXG5cdFx0XHRcdFx0dmFyIHBsYWluVGV4dCA9IHN0cmluZ2lmeVRva2VuKHRva2VuKTtcblxuXHRcdFx0XHRcdC8vIEFuZCBtZXJnZSB0ZXh0IHdpdGggYWRqYWNlbnQgdGV4dFxuXHRcdFx0XHRcdGlmIChpIDwgdG9rZW5zLmxlbmd0aCAtIDEgJiYgKHR5cGVvZiB0b2tlbnNbaSArIDFdID09PSAnc3RyaW5nJyB8fCB0b2tlbnNbaSArIDFdLnR5cGUgPT09ICdwbGFpbi10ZXh0JykpIHtcblx0XHRcdFx0XHRcdHBsYWluVGV4dCArPSBzdHJpbmdpZnlUb2tlbih0b2tlbnNbaSArIDFdKTtcblx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoaSArIDEsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoaSA+IDAgJiYgKHR5cGVvZiB0b2tlbnNbaSAtIDFdID09PSAnc3RyaW5nJyB8fCB0b2tlbnNbaSAtIDFdLnR5cGUgPT09ICdwbGFpbi10ZXh0JykpIHtcblx0XHRcdFx0XHRcdHBsYWluVGV4dCA9IHN0cmluZ2lmeVRva2VuKHRva2Vuc1tpIC0gMV0pICsgcGxhaW5UZXh0O1xuXHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZShpIC0gMSwgMSk7XG5cdFx0XHRcdFx0XHRpLS07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKC9eXFxzKyQvLnRlc3QocGxhaW5UZXh0KSkge1xuXHRcdFx0XHRcdFx0dG9rZW5zW2ldID0gcGxhaW5UZXh0O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0b2tlbnNbaV0gPSBuZXcgUHJpc20uVG9rZW4oJ3BsYWluLXRleHQnLCBwbGFpblRleHQsIG51bGwsIHBsYWluVGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICh0b2tlbi5jb250ZW50ICYmIHR5cGVvZiB0b2tlbi5jb250ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHR3YWxrVG9rZW5zKHRva2VuLmNvbnRlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICd4cXVlcnknKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHdhbGtUb2tlbnMoZW52LnRva2Vucyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy55YW5nID0ge1xuXHQvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjAyMCNwYWdlLTM0XG5cdC8vIGh0dHA6Ly93d3cueWFuZy1jZW50cmFsLm9yZy90d2lraS9iaW4vdmlldy9NYWluL1lhbmdFeGFtcGxlc1xuXHQnY29tbWVudCc6IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIl18XFxcXC4pKlwifCdbXiddKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W3t9O1xcclxcbl1bIFxcdF0qKVthLXpfXVtcXHcuLV0qL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnbmFtZXNwYWNlJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKVthLXpfXVtcXHcuLV0qKD89OikvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcKy8sXG5cdCdwdW5jdHVhdGlvbic6IC9be307Ol0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0ZnVuY3Rpb24gbGl0ZXJhbChzdHIpIHtcblx0XHRyZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyOyB9O1xuXHR9XG5cblx0dmFyIGtleXdvcmQgPSAvXFxiKD86YWxpZ258YWxsb3d6ZXJvfGFuZHxhbnlmcmFtZXxhbnl0eXBlfGFzbXxhc3luY3xhd2FpdHxicmVha3xjYW5jZWx8Y2F0Y2h8Y29tcHRpbWV8Y29uc3R8Y29udGludWV8ZGVmZXJ8ZWxzZXxlbnVtfGVycmRlZmVyfGVycm9yfGV4cG9ydHxleHRlcm58Zm58Zm9yfGlmfGlubGluZXxsaW5rc2VjdGlvbnxuYWtlZGNjfG5vYWxpYXN8bm9zdXNwZW5kfG51bGx8b3J8b3JlbHNlfHBhY2tlZHxwcm9taXNlfHB1YnxyZXN1bWV8cmV0dXJufHN0ZGNhbGxjY3xzdHJ1Y3R8c3VzcGVuZHxzd2l0Y2h8dGVzdHx0aHJlYWRsb2NhbHx0cnl8dW5kZWZpbmVkfHVuaW9ufHVucmVhY2hhYmxlfHVzaW5nbmFtZXNwYWNlfHZhcnx2b2xhdGlsZXx3aGlsZSlcXGIvO1xuXG5cdHZhciBJREVOVElGSUVSID0gJ1xcXFxiKD8hJyArIGtleXdvcmQuc291cmNlICsgJykoPyFcXFxcZClcXFxcdytcXFxcYic7XG5cdHZhciBBTElHTiA9IC9hbGlnblxccypcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKS8uc291cmNlO1xuXHR2YXIgUFJFRklYX1RZUEVfT1AgPSAvKD86XFw/fFxcYnByb21pc2UtPnwoPzpcXFtbXltcXF1dKlxcXXxcXCooPyFcXCopfFxcKlxcKikoPzpcXHMqPEFMSUdOPnxcXHMqY29uc3RcXGJ8XFxzKnZvbGF0aWxlXFxifFxccyphbGxvd3plcm9cXGIpKikvLnNvdXJjZS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKTtcblx0dmFyIFNVRkZJWF9FWFBSID0gLyg/OlxcYnByb21pc2VcXGJ8KD86XFxiZXJyb3JcXC4pPzxJRD4oPzpcXC48SUQ+KSooPyFcXHMrPElEPikpLy5zb3VyY2UucmVwbGFjZSgvPElEPi9nLCBsaXRlcmFsKElERU5USUZJRVIpKTtcblx0dmFyIFRZUEUgPSAnKD8hXFxcXHMpKD86IT9cXFxccyooPzonICsgUFJFRklYX1RZUEVfT1AgKyAnXFxcXHMqKSonICsgU1VGRklYX0VYUFIgKyAnKSsnO1xuXG5cdC8qXG5cdCAqIEEgc2ltcGxpZmllZCBncmFtbWFyIGZvciBaaWcgY29tcGlsZSB0aW1lIHR5cGUgbGl0ZXJhbHM6XG5cdCAqXG5cdCAqIFR5cGVFeHByID0gKCBcIiFcIj8gUFJFRklYX1RZUEVfT1AqIFNVRkZJWF9FWFBSICkrXG5cdCAqXG5cdCAqIFNVRkZJWF9FWFBSID0gKCBcXGIgXCJwcm9taXNlXCIgXFxiIHwgKCBcXGIgXCJlcnJvclwiIFwiLlwiICk/IElERU5USUZJRVIgKCBcIi5cIiBJREVOVElGSUVSICkqICg/ISBcXHMrIElERU5USUZJRVIgKSApXG5cdCAqXG5cdCAqIFBSRUZJWF9UWVBFX09QID0gXCI/XCJcblx0ICogICAgICAgICAgICAgICAgfCBcXGIgXCJwcm9taXNlXCIgXCItPlwiXG5cdCAqICAgICAgICAgICAgICAgIHwgKCBcIltcIiBbXlxcW1xcXV0qIFwiXVwiIHwgXCIqXCIgfCBcIioqXCIgKSAoIEFMSUdOIHwgXCJjb25zdFwiIFxcYiB8IFwidm9sYXRpbGVcIiBcXGIgfCBcImFsbG93emVyb1wiIFxcYiApKlxuXHQgKlxuXHQgKiBBTElHTiA9IFwiYWxpZ25cIiBcIihcIiAoIFteKCldIHwgXCIoXCIgW14oKV0qIFwiKVwiICkqIFwiKVwiXG5cdCAqXG5cdCAqIElERU5USUZJRVIgPSBcXGIgKD8hIEtFWVdPUkQgKSBbYS16QS1aX10gXFx3KiBcXGJcblx0ICpcblx0Ki9cblxuXHRQcmlzbS5sYW5ndWFnZXMuemlnID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvXFwvWy8hXS4qLyxcblx0XHRcdFx0YWxpYXM6ICdkb2MtY29tbWVudCdcblx0XHRcdH0sXG5cdFx0XHQvXFwvezJ9LiovXG5cdFx0XSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBcInN0cmluZ1wiIGFuZCBjXCJzdHJpbmdcIlxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcQF0pYz9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG11bHRpbGluZSBzdHJpbmdzIGFuZCBjLXN0cmluZ3Ncblx0XHRcdFx0cGF0dGVybjogLyhbXFxyXFxuXSkoWyBcXHRdK2M/XFxcXHsyfSkuKig/Oig/Olxcclxcbj98XFxuKVxcMi4qKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0Ly8gY2hhcmFjdGVycyAnYScsICdcXG4nLCAnXFx4RkYnLCAnXFx1ezEwRkZGRn0nXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSknKD86W14nXFxcXFxcclxcbl18W1xcdUQ4MDAtXFx1REZGRl17Mn18XFxcXCg/Oi58eFthLWZBLUZcXGRdezJ9fHVcXHtbYS1mQS1GXFxkXXsxLDZ9XFx9KSknLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzogL1xcQkAoPyFcXGQpXFx3Kyg/PVxccypcXCgpLyxcblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmJyZWFrfGNvbnRpbnVlKVxccyo6XFxzKilcXHcrXFxifFxcYig/IVxcZClcXHcrXFxiKD89XFxzKjpcXHMqKD86XFx7fHdoaWxlXFxiKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHQvLyBjb25zdCBGb28gPSBzdHJ1Y3Qge307XG5cdFx0XHQvXFxiKD8hXFxkKVxcdysoPz1cXHMqPVxccyooPzooPzpleHRlcm58cGFja2VkKVxccyspPyg/OmVudW18c3RydWN0fHVuaW9uKVxccypbKHtdKS8sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNvbnN0IHg6IGkzMiA9IDk7XG5cdFx0XHRcdC8vIHZhciB4OiBCYXI7XG5cdFx0XHRcdC8vIGZuIGZvbyh4OiBib29sLCB5OiBmMzIpIHZvaWQge31cblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlxccyopPFRZUEU+KD89XFxzKig/OjxBTElHTj5cXHMqKT9bPTssKV0pfDxUWVBFPig/PVxccyooPzo8QUxJR04+XFxzKik/XFx7KS8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBsaXRlcmFsKFRZUEUpKS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGV4dGVybiBmbiBmb28oeDogZjY0KSBmNjQ7IChvcHRpb25hbCBhbGlnbm1lbnQpXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcKVxccyopPFRZUEU+KD89XFxzKig/OjxBTElHTj5cXHMqKT87KS8uc291cmNlLnJlcGxhY2UoLzxUWVBFPi9nLCBsaXRlcmFsKFRZUEUpKS5yZXBsYWNlKC88QUxJR04+L2csIGxpdGVyYWwoQUxJR04pKSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdidWlsdGluLXR5cGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YW55ZXJyb3J8Ym9vbHxjX3U/KD86aW50fGxvbmd8bG9uZ2xvbmd8c2hvcnQpfGNfbG9uZ2RvdWJsZXxjX3ZvaWR8Y29tcHRpbWVfKD86ZmxvYXR8aW50KXxmKD86MTZ8MzJ8NjR8MTI4KXxbaXVdKD86OHwxNnwzMnw2NHwxMjh8c2l6ZSl8bm9yZXR1cm58dHlwZXx2b2lkKVxcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IGtleXdvcmQsXG5cdFx0J2Z1bmN0aW9uJzogL1xcYig/IVxcZClcXHcrKD89XFxzKlxcKCkvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MGJbMDFdK3wwb1swLTddK3wweFthLWZBLUZcXGRdKyg/OlxcLlthLWZBLUZcXGRdKik/KD86W3BQXVsrLV0/W2EtZkEtRlxcZF0rKT98XFxkKyg/OlxcLlxcZCopPyg/OltlRV1bKy1dP1xcZCspPylcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvXFwuWyo/XXxcXC57MiwzfXxbLT1dPnxcXCpcXCp8XFwrXFwrfFxcfFxcfHwoPzo8PHw+PnxbLSsqXSV8Wy0rKi8lXiZ8PD4hPV0pPT98Wz9+XS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1suOiw7KCl7fVtcXF1dL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy56aWdbJ2NsYXNzLW5hbWUnXS5mb3JFYWNoKGZ1bmN0aW9uIChvYmopIHtcblx0XHRpZiAob2JqLmluc2lkZSA9PT0gbnVsbCkge1xuXHRcdFx0b2JqLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy56aWc7XG5cdFx0fVxuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKCkge1xuXG5cdGlmICh0eXBlb2YgUHJpc20gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogUGx1Z2luIG5hbWUgd2hpY2ggaXMgdXNlZCBhcyBhIGNsYXNzIG5hbWUgZm9yIDxwcmU+IHdoaWNoIGlzIGFjdGl2YXRpbmcgdGhlIHBsdWdpblxuXHQgKlxuXHQgKiBAdHlwZSB7c3RyaW5nfVxuXHQgKi9cblx0dmFyIFBMVUdJTl9OQU1FID0gJ2xpbmUtbnVtYmVycyc7XG5cblx0LyoqXG5cdCAqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciBkZXRlcm1pbmluZyBsaW5lIGJyZWFrc1xuXHQgKlxuXHQgKiBAdHlwZSB7UmVnRXhwfVxuXHQgKi9cblx0dmFyIE5FV19MSU5FX0VYUCA9IC9cXG4oPyEkKS9nO1xuXG5cblx0LyoqXG5cdCAqIEdsb2JhbCBleHBvcnRzXG5cdCAqL1xuXHR2YXIgY29uZmlnID0gUHJpc20ucGx1Z2lucy5saW5lTnVtYmVycyA9IHtcblx0XHQvKipcblx0XHQgKiBHZXQgbm9kZSBmb3IgcHJvdmlkZWQgbGluZSBudW1iZXJcblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudCBwcmUgZWxlbWVudFxuXHRcdCAqIEBwYXJhbSB7bnVtYmVyfSBudW1iZXIgbGluZSBudW1iZXJcblx0XHQgKiBAcmV0dXJucyB7RWxlbWVudHx1bmRlZmluZWR9XG5cdFx0ICovXG5cdFx0Z2V0TGluZTogZnVuY3Rpb24gKGVsZW1lbnQsIG51bWJlcikge1xuXHRcdFx0aWYgKGVsZW1lbnQudGFnTmFtZSAhPT0gJ1BSRScgfHwgIWVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKFBMVUdJTl9OQU1FKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsaW5lTnVtYmVyUm93cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJyk7XG5cdFx0XHRpZiAoIWxpbmVOdW1iZXJSb3dzKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdHZhciBsaW5lTnVtYmVyU3RhcnQgPSBwYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1zdGFydCcpLCAxMCkgfHwgMTtcblx0XHRcdHZhciBsaW5lTnVtYmVyRW5kID0gbGluZU51bWJlclN0YXJ0ICsgKGxpbmVOdW1iZXJSb3dzLmNoaWxkcmVuLmxlbmd0aCAtIDEpO1xuXG5cdFx0XHRpZiAobnVtYmVyIDwgbGluZU51bWJlclN0YXJ0KSB7XG5cdFx0XHRcdG51bWJlciA9IGxpbmVOdW1iZXJTdGFydDtcblx0XHRcdH1cblx0XHRcdGlmIChudW1iZXIgPiBsaW5lTnVtYmVyRW5kKSB7XG5cdFx0XHRcdG51bWJlciA9IGxpbmVOdW1iZXJFbmQ7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBsaW5lSW5kZXggPSBudW1iZXIgLSBsaW5lTnVtYmVyU3RhcnQ7XG5cblx0XHRcdHJldHVybiBsaW5lTnVtYmVyUm93cy5jaGlsZHJlbltsaW5lSW5kZXhdO1xuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBSZXNpemVzIHRoZSBsaW5lIG51bWJlcnMgb2YgdGhlIGdpdmVuIGVsZW1lbnQuXG5cdFx0ICpcblx0XHQgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgbm90IGFkZCBsaW5lIG51bWJlcnMuIEl0IHdpbGwgb25seSByZXNpemUgZXhpc3Rpbmcgb25lcy5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgQSBgPHByZT5gIGVsZW1lbnQgd2l0aCBsaW5lIG51bWJlcnMuXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0cmVzaXplOiBmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0cmVzaXplRWxlbWVudHMoW2VsZW1lbnRdKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogV2hldGhlciB0aGUgcGx1Z2luIGNhbiBhc3N1bWUgdGhhdCB0aGUgdW5pdHMgZm9udCBzaXplcyBhbmQgbWFyZ2lucyBhcmUgbm90IGRlcGVuZGVkIG9uIHRoZSBzaXplIG9mXG5cdFx0ICogdGhlIGN1cnJlbnQgdmlld3BvcnQuXG5cdFx0ICpcblx0XHQgKiBTZXR0aW5nIHRoaXMgdG8gYHRydWVgIHdpbGwgYWxsb3cgdGhlIHBsdWdpbiB0byBkbyBjZXJ0YWluIG9wdGltaXphdGlvbnMgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cblx0XHQgKlxuXHRcdCAqIFNldCB0aGlzIHRvIGBmYWxzZWAgaWYgeW91IHVzZSBhbnkgb2YgdGhlIGZvbGxvd2luZyBDU1MgdW5pdHM6IGB2aGAsIGB2d2AsIGB2bWluYCwgYHZtYXhgLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge2Jvb2xlYW59XG5cdFx0ICovXG5cdFx0YXNzdW1lVmlld3BvcnRJbmRlcGVuZGVuY2U6IHRydWVcblx0fTtcblxuXHQvKipcblx0ICogUmVzaXplcyB0aGUgZ2l2ZW4gZWxlbWVudHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7SFRNTEVsZW1lbnRbXX0gZWxlbWVudHNcblx0ICovXG5cdGZ1bmN0aW9uIHJlc2l6ZUVsZW1lbnRzKGVsZW1lbnRzKSB7XG5cdFx0ZWxlbWVudHMgPSBlbGVtZW50cy5maWx0ZXIoZnVuY3Rpb24gKGUpIHtcblx0XHRcdHZhciBjb2RlU3R5bGVzID0gZ2V0U3R5bGVzKGUpO1xuXHRcdFx0dmFyIHdoaXRlU3BhY2UgPSBjb2RlU3R5bGVzWyd3aGl0ZS1zcGFjZSddO1xuXHRcdFx0cmV0dXJuIHdoaXRlU3BhY2UgPT09ICdwcmUtd3JhcCcgfHwgd2hpdGVTcGFjZSA9PT0gJ3ByZS1saW5lJztcblx0XHR9KTtcblxuXHRcdGlmIChlbGVtZW50cy5sZW5ndGggPT0gMCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBpbmZvcyA9IGVsZW1lbnRzLm1hcChmdW5jdGlvbiAoZWxlbWVudCkge1xuXHRcdFx0dmFyIGNvZGVFbGVtZW50ID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCdjb2RlJyk7XG5cdFx0XHR2YXIgbGluZU51bWJlcnNXcmFwcGVyID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCcubGluZS1udW1iZXJzLXJvd3MnKTtcblx0XHRcdGlmICghY29kZUVsZW1lbnQgfHwgIWxpbmVOdW1iZXJzV3JhcHBlcikge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqL1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJTaXplciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1zaXplcicpO1xuXHRcdFx0dmFyIGNvZGVMaW5lcyA9IGNvZGVFbGVtZW50LnRleHRDb250ZW50LnNwbGl0KE5FV19MSU5FX0VYUCk7XG5cblx0XHRcdGlmICghbGluZU51bWJlclNpemVyKSB7XG5cdFx0XHRcdGxpbmVOdW1iZXJTaXplciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcblx0XHRcdFx0bGluZU51bWJlclNpemVyLmNsYXNzTmFtZSA9ICdsaW5lLW51bWJlcnMtc2l6ZXInO1xuXG5cdFx0XHRcdGNvZGVFbGVtZW50LmFwcGVuZENoaWxkKGxpbmVOdW1iZXJTaXplcik7XG5cdFx0XHR9XG5cblx0XHRcdGxpbmVOdW1iZXJTaXplci5pbm5lckhUTUwgPSAnMCc7XG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cblx0XHRcdHZhciBvbmVMaW5lckhlaWdodCA9IGxpbmVOdW1iZXJTaXplci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuaW5uZXJIVE1MID0gJyc7XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXG5cdFx0XHRcdGxpbmVzOiBjb2RlTGluZXMsXG5cdFx0XHRcdGxpbmVIZWlnaHRzOiBbXSxcblx0XHRcdFx0b25lTGluZXJIZWlnaHQ6IG9uZUxpbmVySGVpZ2h0LFxuXHRcdFx0XHRzaXplcjogbGluZU51bWJlclNpemVyLFxuXHRcdFx0fTtcblx0XHR9KS5maWx0ZXIoQm9vbGVhbik7XG5cblx0XHRpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG5cdFx0XHR2YXIgbGluZU51bWJlclNpemVyID0gaW5mby5zaXplcjtcblx0XHRcdHZhciBsaW5lcyA9IGluZm8ubGluZXM7XG5cdFx0XHR2YXIgbGluZUhlaWdodHMgPSBpbmZvLmxpbmVIZWlnaHRzO1xuXHRcdFx0dmFyIG9uZUxpbmVySGVpZ2h0ID0gaW5mby5vbmVMaW5lckhlaWdodDtcblxuXHRcdFx0bGluZUhlaWdodHNbbGluZXMubGVuZ3RoIC0gMV0gPSB1bmRlZmluZWQ7XG5cdFx0XHRsaW5lcy5mb3JFYWNoKGZ1bmN0aW9uIChsaW5lLCBpbmRleCkge1xuXHRcdFx0XHRpZiAobGluZSAmJiBsaW5lLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHR2YXIgZSA9IGxpbmVOdW1iZXJTaXplci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJykpO1xuXHRcdFx0XHRcdGUuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XG5cdFx0XHRcdFx0ZS50ZXh0Q29udGVudCA9IGxpbmU7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGluZUhlaWdodHNbaW5kZXhdID0gb25lTGluZXJIZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJTaXplciA9IGluZm8uc2l6ZXI7XG5cdFx0XHR2YXIgbGluZUhlaWdodHMgPSBpbmZvLmxpbmVIZWlnaHRzO1xuXG5cdFx0XHR2YXIgY2hpbGRJbmRleCA9IDA7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IGxpbmVIZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChsaW5lSGVpZ2h0c1tpXSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0bGluZUhlaWdodHNbaV0gPSBsaW5lTnVtYmVyU2l6ZXIuY2hpbGRyZW5bY2hpbGRJbmRleCsrXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluZm9zLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcblx0XHRcdHZhciBsaW5lTnVtYmVyU2l6ZXIgPSBpbmZvLnNpemVyO1xuXHRcdFx0dmFyIHdyYXBwZXIgPSBpbmZvLmVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJyk7XG5cblx0XHRcdGxpbmVOdW1iZXJTaXplci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXHRcdFx0bGluZU51bWJlclNpemVyLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRpbmZvLmxpbmVIZWlnaHRzLmZvckVhY2goZnVuY3Rpb24gKGhlaWdodCwgbGluZU51bWJlcikge1xuXHRcdFx0XHR3cmFwcGVyLmNoaWxkcmVuW2xpbmVOdW1iZXJdLnN0eWxlLmhlaWdodCA9IGhlaWdodCArICdweCc7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHN0eWxlIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGVsZW1lbnRcblx0ICpcblx0ICogQHBhcmFtIHtFbGVtZW50fSBlbGVtZW50XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRTdHlsZXMoZWxlbWVudCkge1xuXHRcdGlmICghZWxlbWVudCkge1xuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSA6IChlbGVtZW50LmN1cnJlbnRTdHlsZSB8fCBudWxsKTtcblx0fVxuXG5cdHZhciBsYXN0V2lkdGggPSB1bmRlZmluZWQ7XG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKGNvbmZpZy5hc3N1bWVWaWV3cG9ydEluZGVwZW5kZW5jZSAmJiBsYXN0V2lkdGggPT09IHdpbmRvdy5pbm5lcldpZHRoKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGxhc3RXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuXG5cdFx0cmVzaXplRWxlbWVudHMoQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgncHJlLicgKyBQTFVHSU5fTkFNRSkpKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdjb21wbGV0ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoIWVudi5jb2RlKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNvZGUgPSAvKiogQHR5cGUge0VsZW1lbnR9ICovIChlbnYuZWxlbWVudCk7XG5cdFx0dmFyIHByZSA9IC8qKiBAdHlwZSB7SFRNTEVsZW1lbnR9ICovIChjb2RlLnBhcmVudE5vZGUpO1xuXG5cdFx0Ly8gd29ya3Mgb25seSBmb3IgPGNvZGU+IHdyYXBwZWQgaW5zaWRlIDxwcmU+IChub3QgaW5saW5lKVxuXHRcdGlmICghcHJlIHx8ICEvcHJlL2kudGVzdChwcmUubm9kZU5hbWUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gQWJvcnQgaWYgbGluZSBudW1iZXJzIGFscmVhZHkgZXhpc3RzXG5cdFx0aWYgKGNvZGUucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJykpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBvbmx5IGFkZCBsaW5lIG51bWJlcnMgaWYgPGNvZGU+IG9yIG9uZSBvZiBpdHMgYW5jZXN0b3JzIGhhcyB0aGUgYGxpbmUtbnVtYmVyc2AgY2xhc3Ncblx0XHRpZiAoIVByaXNtLnV0aWwuaXNBY3RpdmUoY29kZSwgUExVR0lOX05BTUUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBjbGFzcyAnbGluZS1udW1iZXJzJyBmcm9tIHRoZSA8Y29kZT5cblx0XHRjb2RlLmNsYXNzTGlzdC5yZW1vdmUoUExVR0lOX05BTUUpO1xuXHRcdC8vIEFkZCB0aGUgY2xhc3MgJ2xpbmUtbnVtYmVycycgdG8gdGhlIDxwcmU+XG5cdFx0cHJlLmNsYXNzTGlzdC5hZGQoUExVR0lOX05BTUUpO1xuXG5cdFx0dmFyIG1hdGNoID0gZW52LmNvZGUubWF0Y2goTkVXX0xJTkVfRVhQKTtcblx0XHR2YXIgbGluZXNOdW0gPSBtYXRjaCA/IG1hdGNoLmxlbmd0aCArIDEgOiAxO1xuXHRcdHZhciBsaW5lTnVtYmVyc1dyYXBwZXI7XG5cblx0XHR2YXIgbGluZXMgPSBuZXcgQXJyYXkobGluZXNOdW0gKyAxKS5qb2luKCc8c3Bhbj48L3NwYW4+Jyk7XG5cblx0XHRsaW5lTnVtYmVyc1dyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0bGluZU51bWJlcnNXcmFwcGVyLnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCAndHJ1ZScpO1xuXHRcdGxpbmVOdW1iZXJzV3JhcHBlci5jbGFzc05hbWUgPSAnbGluZS1udW1iZXJzLXJvd3MnO1xuXHRcdGxpbmVOdW1iZXJzV3JhcHBlci5pbm5lckhUTUwgPSBsaW5lcztcblxuXHRcdGlmIChwcmUuaGFzQXR0cmlidXRlKCdkYXRhLXN0YXJ0JykpIHtcblx0XHRcdHByZS5zdHlsZS5jb3VudGVyUmVzZXQgPSAnbGluZW51bWJlciAnICsgKHBhcnNlSW50KHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhcnQnKSwgMTApIC0gMSk7XG5cdFx0fVxuXG5cdFx0ZW52LmVsZW1lbnQuYXBwZW5kQ2hpbGQobGluZU51bWJlcnNXcmFwcGVyKTtcblxuXHRcdHJlc2l6ZUVsZW1lbnRzKFtwcmVdKTtcblxuXHRcdFByaXNtLmhvb2tzLnJ1bignbGluZS1udW1iZXJzJywgZW52KTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdsaW5lLW51bWJlcnMnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0ZW52LnBsdWdpbnMgPSBlbnYucGx1Z2lucyB8fCB7fTtcblx0XHRlbnYucGx1Z2lucy5saW5lTnVtYmVycyA9IHRydWU7XG5cdH0pO1xuXG59KCkpO1xuXG4oZnVuY3Rpb24gKCkge1xuXG5cdGlmICh0eXBlb2YgUHJpc20gPT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvRWxlbWVudC9tYXRjaGVzI1BvbHlmaWxsXG5cdGlmICghRWxlbWVudC5wcm90b3R5cGUubWF0Y2hlcykge1xuXHRcdEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMgPSBFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3RvciB8fCBFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3I7XG5cdH1cblxuXHR2YXIgTE9BRElOR19NRVNTQUdFID0gJ0xvYWRpbmdcdTIwMjYnO1xuXHR2YXIgRkFJTFVSRV9NRVNTQUdFID0gZnVuY3Rpb24gKHN0YXR1cywgbWVzc2FnZSkge1xuXHRcdHJldHVybiAnXHUyNzE2IEVycm9yICcgKyBzdGF0dXMgKyAnIHdoaWxlIGZldGNoaW5nIGZpbGU6ICcgKyBtZXNzYWdlO1xuXHR9O1xuXHR2YXIgRkFJTFVSRV9FTVBUWV9NRVNTQUdFID0gJ1x1MjcxNiBFcnJvcjogRmlsZSBkb2VzIG5vdCBleGlzdCBvciBpcyBlbXB0eSc7XG5cblx0dmFyIEVYVEVOU0lPTlMgPSB7XG5cdFx0J2pzJzogJ2phdmFzY3JpcHQnLFxuXHRcdCdweSc6ICdweXRob24nLFxuXHRcdCdyYic6ICdydWJ5Jyxcblx0XHQncHMxJzogJ3Bvd2Vyc2hlbGwnLFxuXHRcdCdwc20xJzogJ3Bvd2Vyc2hlbGwnLFxuXHRcdCdzaCc6ICdiYXNoJyxcblx0XHQnYmF0JzogJ2JhdGNoJyxcblx0XHQnaCc6ICdjJyxcblx0XHQndGV4JzogJ2xhdGV4J1xuXHR9O1xuXG5cdHZhciBTVEFUVVNfQVRUUiA9ICdkYXRhLXNyYy1zdGF0dXMnO1xuXHR2YXIgU1RBVFVTX0xPQURJTkcgPSAnbG9hZGluZyc7XG5cdHZhciBTVEFUVVNfTE9BREVEID0gJ2xvYWRlZCc7XG5cdHZhciBTVEFUVVNfRkFJTEVEID0gJ2ZhaWxlZCc7XG5cblx0dmFyIFNFTEVDVE9SID0gJ3ByZVtkYXRhLXNyY106bm90KFsnICsgU1RBVFVTX0FUVFIgKyAnPVwiJyArIFNUQVRVU19MT0FERUQgKyAnXCJdKSdcblx0XHQrICc6bm90KFsnICsgU1RBVFVTX0FUVFIgKyAnPVwiJyArIFNUQVRVU19MT0FESU5HICsgJ1wiXSknO1xuXG5cdC8qKlxuXHQgKiBMb2FkcyB0aGUgZ2l2ZW4gZmlsZS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNyYyBUaGUgVVJMIG9yIHBhdGggb2YgdGhlIHNvdXJjZSBmaWxlIHRvIGxvYWQuXG5cdCAqIEBwYXJhbSB7KHJlc3VsdDogc3RyaW5nKSA9PiB2b2lkfSBzdWNjZXNzXG5cdCAqIEBwYXJhbSB7KHJlYXNvbjogc3RyaW5nKSA9PiB2b2lkfSBlcnJvclxuXHQgKi9cblx0ZnVuY3Rpb24gbG9hZEZpbGUoc3JjLCBzdWNjZXNzLCBlcnJvcikge1xuXHRcdHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblx0XHR4aHIub3BlbignR0VUJywgc3JjLCB0cnVlKTtcblx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gKCkge1xuXHRcdFx0aWYgKHhoci5yZWFkeVN0YXRlID09IDQpIHtcblx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPCA0MDAgJiYgeGhyLnJlc3BvbnNlVGV4dCkge1xuXHRcdFx0XHRcdHN1Y2Nlc3MoeGhyLnJlc3BvbnNlVGV4dCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKHhoci5zdGF0dXMgPj0gNDAwKSB7XG5cdFx0XHRcdFx0XHRlcnJvcihGQUlMVVJFX01FU1NBR0UoeGhyLnN0YXR1cywgeGhyLnN0YXR1c1RleHQpKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0ZXJyb3IoRkFJTFVSRV9FTVBUWV9NRVNTQUdFKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHRcdHhoci5zZW5kKG51bGwpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBhcnNlcyB0aGUgZ2l2ZW4gcmFuZ2UuXG5cdCAqXG5cdCAqIFRoaXMgcmV0dXJucyBhIHJhbmdlIHdpdGggaW5jbHVzaXZlIGVuZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gcmFuZ2Vcblx0ICogQHJldHVybnMge1tudW1iZXIsIG51bWJlciB8IHVuZGVmaW5lZF0gfCB1bmRlZmluZWR9XG5cdCAqL1xuXHRmdW5jdGlvbiBwYXJzZVJhbmdlKHJhbmdlKSB7XG5cdFx0dmFyIG0gPSAvXlxccyooXFxkKylcXHMqKD86KCwpXFxzKig/OihcXGQrKVxccyopPyk/JC8uZXhlYyhyYW5nZSB8fCAnJyk7XG5cdFx0aWYgKG0pIHtcblx0XHRcdHZhciBzdGFydCA9IE51bWJlcihtWzFdKTtcblx0XHRcdHZhciBjb21tYSA9IG1bMl07XG5cdFx0XHR2YXIgZW5kID0gbVszXTtcblxuXHRcdFx0aWYgKCFjb21tYSkge1xuXHRcdFx0XHRyZXR1cm4gW3N0YXJ0LCBzdGFydF07XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWVuZCkge1xuXHRcdFx0XHRyZXR1cm4gW3N0YXJ0LCB1bmRlZmluZWRdO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFtzdGFydCwgTnVtYmVyKGVuZCldO1xuXHRcdH1cblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtaGlnaGxpZ2h0YWxsJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGVudi5zZWxlY3RvciArPSAnLCAnICsgU0VMRUNUT1I7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXNhbml0eS1jaGVjaycsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgcHJlID0gLyoqIEB0eXBlIHtIVE1MUHJlRWxlbWVudH0gKi8gKGVudi5lbGVtZW50KTtcblx0XHRpZiAocHJlLm1hdGNoZXMoU0VMRUNUT1IpKSB7XG5cdFx0XHRlbnYuY29kZSA9ICcnOyAvLyBmYXN0LXBhdGggdGhlIHdob2xlIHRoaW5nIGFuZCBnbyB0byBjb21wbGV0ZVxuXG5cdFx0XHRwcmUuc2V0QXR0cmlidXRlKFNUQVRVU19BVFRSLCBTVEFUVVNfTE9BRElORyk7IC8vIG1hcmsgYXMgbG9hZGluZ1xuXG5cdFx0XHQvLyBhZGQgY29kZSBlbGVtZW50IHdpdGggbG9hZGluZyBtZXNzYWdlXG5cdFx0XHR2YXIgY29kZSA9IHByZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdDT0RFJykpO1xuXHRcdFx0Y29kZS50ZXh0Q29udGVudCA9IExPQURJTkdfTUVTU0FHRTtcblxuXHRcdFx0dmFyIHNyYyA9IHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3JjJyk7XG5cblx0XHRcdHZhciBsYW5ndWFnZSA9IGVudi5sYW5ndWFnZTtcblx0XHRcdGlmIChsYW5ndWFnZSA9PT0gJ25vbmUnKSB7XG5cdFx0XHRcdC8vIHRoZSBsYW5ndWFnZSBtaWdodCBiZSAnbm9uZScgYmVjYXVzZSB0aGVyZSBpcyBubyBsYW5ndWFnZSBzZXQ7XG5cdFx0XHRcdC8vIGluIHRoaXMgY2FzZSwgd2Ugd2FudCB0byB1c2UgdGhlIGV4dGVuc2lvbiBhcyB0aGUgbGFuZ3VhZ2Vcblx0XHRcdFx0dmFyIGV4dGVuc2lvbiA9ICgvXFwuKFxcdyspJC8uZXhlYyhzcmMpIHx8IFssICdub25lJ10pWzFdO1xuXHRcdFx0XHRsYW5ndWFnZSA9IEVYVEVOU0lPTlNbZXh0ZW5zaW9uXSB8fCBleHRlbnNpb247XG5cdFx0XHR9XG5cblx0XHRcdC8vIHNldCBsYW5ndWFnZSBjbGFzc2VzXG5cdFx0XHRQcmlzbS51dGlsLnNldExhbmd1YWdlKGNvZGUsIGxhbmd1YWdlKTtcblx0XHRcdFByaXNtLnV0aWwuc2V0TGFuZ3VhZ2UocHJlLCBsYW5ndWFnZSk7XG5cblx0XHRcdC8vIHByZWxvYWQgdGhlIGxhbmd1YWdlXG5cdFx0XHR2YXIgYXV0b2xvYWRlciA9IFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlcjtcblx0XHRcdGlmIChhdXRvbG9hZGVyKSB7XG5cdFx0XHRcdGF1dG9sb2FkZXIubG9hZExhbmd1YWdlcyhsYW5ndWFnZSk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGxvYWQgZmlsZVxuXHRcdFx0bG9hZEZpbGUoXG5cdFx0XHRcdHNyYyxcblx0XHRcdFx0ZnVuY3Rpb24gKHRleHQpIHtcblx0XHRcdFx0XHQvLyBtYXJrIGFzIGxvYWRlZFxuXHRcdFx0XHRcdHByZS5zZXRBdHRyaWJ1dGUoU1RBVFVTX0FUVFIsIFNUQVRVU19MT0FERUQpO1xuXG5cdFx0XHRcdFx0Ly8gaGFuZGxlIGRhdGEtcmFuZ2Vcblx0XHRcdFx0XHR2YXIgcmFuZ2UgPSBwYXJzZVJhbmdlKHByZS5nZXRBdHRyaWJ1dGUoJ2RhdGEtcmFuZ2UnKSk7XG5cdFx0XHRcdFx0aWYgKHJhbmdlKSB7XG5cdFx0XHRcdFx0XHR2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KC9cXHJcXG4/fFxcbi9nKTtcblxuXHRcdFx0XHRcdFx0Ly8gdGhlIHJhbmdlIGlzIG9uZS1iYXNlZCBhbmQgaW5jbHVzaXZlIG9uIGJvdGggZW5kc1xuXHRcdFx0XHRcdFx0dmFyIHN0YXJ0ID0gcmFuZ2VbMF07XG5cdFx0XHRcdFx0XHR2YXIgZW5kID0gcmFuZ2VbMV0gPT0gbnVsbCA/IGxpbmVzLmxlbmd0aCA6IHJhbmdlWzFdO1xuXG5cdFx0XHRcdFx0XHRpZiAoc3RhcnQgPCAwKSB7IHN0YXJ0ICs9IGxpbmVzLmxlbmd0aDsgfVxuXHRcdFx0XHRcdFx0c3RhcnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzdGFydCAtIDEsIGxpbmVzLmxlbmd0aCkpO1xuXHRcdFx0XHRcdFx0aWYgKGVuZCA8IDApIHsgZW5kICs9IGxpbmVzLmxlbmd0aDsgfVxuXHRcdFx0XHRcdFx0ZW5kID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZW5kLCBsaW5lcy5sZW5ndGgpKTtcblxuXHRcdFx0XHRcdFx0dGV4dCA9IGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLmpvaW4oJ1xcbicpO1xuXG5cdFx0XHRcdFx0XHQvLyBhZGQgZGF0YS1zdGFydCBmb3IgbGluZSBudW1iZXJzXG5cdFx0XHRcdFx0XHRpZiAoIXByZS5oYXNBdHRyaWJ1dGUoJ2RhdGEtc3RhcnQnKSkge1xuXHRcdFx0XHRcdFx0XHRwcmUuc2V0QXR0cmlidXRlKCdkYXRhLXN0YXJ0JywgU3RyaW5nKHN0YXJ0ICsgMSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGhpZ2hsaWdodCBjb2RlXG5cdFx0XHRcdFx0Y29kZS50ZXh0Q29udGVudCA9IHRleHQ7XG5cdFx0XHRcdFx0UHJpc20uaGlnaGxpZ2h0RWxlbWVudChjb2RlKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnVuY3Rpb24gKGVycm9yKSB7XG5cdFx0XHRcdFx0Ly8gbWFyayBhcyBmYWlsZWRcblx0XHRcdFx0XHRwcmUuc2V0QXR0cmlidXRlKFNUQVRVU19BVFRSLCBTVEFUVVNfRkFJTEVEKTtcblxuXHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSBlcnJvcjtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodCA9IHtcblx0XHQvKipcblx0XHQgKiBFeGVjdXRlcyB0aGUgRmlsZSBIaWdobGlnaHQgcGx1Z2luIGZvciBhbGwgbWF0Y2hpbmcgYHByZWAgZWxlbWVudHMgdW5kZXIgdGhlIGdpdmVuIGNvbnRhaW5lci5cblx0XHQgKlxuXHRcdCAqIE5vdGU6IEVsZW1lbnRzIHdoaWNoIGFyZSBhbHJlYWR5IGxvYWRlZCBvciBjdXJyZW50bHkgbG9hZGluZyB3aWxsIG5vdCBiZSB0b3VjaGVkIGJ5IHRoaXMgbWV0aG9kLlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtQYXJlbnROb2RlfSBbY29udGFpbmVyPWRvY3VtZW50XVxuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodDogZnVuY3Rpb24gaGlnaGxpZ2h0KGNvbnRhaW5lcikge1xuXHRcdFx0dmFyIGVsZW1lbnRzID0gKGNvbnRhaW5lciB8fCBkb2N1bWVudCkucXVlcnlTZWxlY3RvckFsbChTRUxFQ1RPUik7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBlbGVtZW50OyAoZWxlbWVudCA9IGVsZW1lbnRzW2krK10pOykge1xuXHRcdFx0XHRQcmlzbS5oaWdobGlnaHRFbGVtZW50KGVsZW1lbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgbG9nZ2VkID0gZmFsc2U7XG5cdC8qKiBAZGVwcmVjYXRlZCBVc2UgYFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodC5oaWdobGlnaHRgIGluc3RlYWQuICovXG5cdFByaXNtLmZpbGVIaWdobGlnaHQgPSBmdW5jdGlvbiAoKSB7XG5cdFx0aWYgKCFsb2dnZWQpIHtcblx0XHRcdGNvbnNvbGUud2FybignUHJpc20uZmlsZUhpZ2hsaWdodCBpcyBkZXByZWNhdGVkLiBVc2UgYFByaXNtLnBsdWdpbnMuZmlsZUhpZ2hsaWdodC5oaWdobGlnaHRgIGluc3RlYWQuJyk7XG5cdFx0XHRsb2dnZWQgPSB0cnVlO1xuXHRcdH1cblx0XHRQcmlzbS5wbHVnaW5zLmZpbGVIaWdobGlnaHQuaGlnaGxpZ2h0LmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cdH07XG5cbn0oKSk7XG5cbiIsICIvKipcbiAqIEBsaWNlbnNlIE1JVFxuICogdG9wYmFyIDEuMC4wLCAyMDIxLTAxLTA2XG4gKiBodHRwOi8vYnV1bmd1eWVuLmdpdGh1Yi5pby90b3BiYXJcbiAqIENvcHlyaWdodCAoYykgMjAyMSBCdXUgTmd1eWVuXG4gKi9cbihmdW5jdGlvbiAod2luZG93LCBkb2N1bWVudCkge1xuICBcInVzZSBzdHJpY3RcIjtcblxuICAvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9wYXVsaXJpc2gvMTU3OTY3MVxuICAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBsYXN0VGltZSA9IDA7XG4gICAgdmFyIHZlbmRvcnMgPSBbXCJtc1wiLCBcIm1velwiLCBcIndlYmtpdFwiLCBcIm9cIl07XG4gICAgZm9yICh2YXIgeCA9IDA7IHggPCB2ZW5kb3JzLmxlbmd0aCAmJiAhd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZTsgKyt4KSB7XG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID1cbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyBcIlJlcXVlc3RBbmltYXRpb25GcmFtZVwiXTtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgXCJDYW5jZWxBbmltYXRpb25GcmFtZVwiXSB8fFxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArIFwiQ2FuY2VsUmVxdWVzdEFuaW1hdGlvbkZyYW1lXCJdO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gZnVuY3Rpb24gKGNhbGxiYWNrLCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBjdXJyVGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICB2YXIgdGltZVRvQ2FsbCA9IE1hdGgubWF4KDAsIDE2IC0gKGN1cnJUaW1lIC0gbGFzdFRpbWUpKTtcbiAgICAgICAgdmFyIGlkID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNhbGxiYWNrKGN1cnJUaW1lICsgdGltZVRvQ2FsbCk7XG4gICAgICAgIH0sIHRpbWVUb0NhbGwpO1xuICAgICAgICBsYXN0VGltZSA9IGN1cnJUaW1lICsgdGltZVRvQ2FsbDtcbiAgICAgICAgcmV0dXJuIGlkO1xuICAgICAgfTtcbiAgICBpZiAoIXdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSlcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChpZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQoaWQpO1xuICAgICAgfTtcbiAgfSkoKTtcblxuICB2YXIgY2FudmFzLFxuICAgIHByb2dyZXNzVGltZXJJZCxcbiAgICBmYWRlVGltZXJJZCxcbiAgICBjdXJyZW50UHJvZ3Jlc3MsXG4gICAgc2hvd2luZyxcbiAgICBhZGRFdmVudCA9IGZ1bmN0aW9uIChlbGVtLCB0eXBlLCBoYW5kbGVyKSB7XG4gICAgICBpZiAoZWxlbS5hZGRFdmVudExpc3RlbmVyKSBlbGVtLmFkZEV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpO1xuICAgICAgZWxzZSBpZiAoZWxlbS5hdHRhY2hFdmVudCkgZWxlbS5hdHRhY2hFdmVudChcIm9uXCIgKyB0eXBlLCBoYW5kbGVyKTtcbiAgICAgIGVsc2UgZWxlbVtcIm9uXCIgKyB0eXBlXSA9IGhhbmRsZXI7XG4gICAgfSxcbiAgICBvcHRpb25zID0ge1xuICAgICAgYXV0b1J1bjogdHJ1ZSxcbiAgICAgIGJhclRoaWNrbmVzczogMyxcbiAgICAgIGJhckNvbG9yczoge1xuICAgICAgICAwOiBcInJnYmEoMjYsICAxODgsIDE1NiwgLjkpXCIsXG4gICAgICAgIFwiLjI1XCI6IFwicmdiYSg1MiwgIDE1MiwgMjE5LCAuOSlcIixcbiAgICAgICAgXCIuNTBcIjogXCJyZ2JhKDI0MSwgMTk2LCAxNSwgIC45KVwiLFxuICAgICAgICBcIi43NVwiOiBcInJnYmEoMjMwLCAxMjYsIDM0LCAgLjkpXCIsXG4gICAgICAgIFwiMS4wXCI6IFwicmdiYSgyMTEsIDg0LCAgMCwgICAuOSlcIixcbiAgICAgIH0sXG4gICAgICBzaGFkb3dCbHVyOiAxMCxcbiAgICAgIHNoYWRvd0NvbG9yOiBcInJnYmEoMCwgICAwLCAgIDAsICAgLjYpXCIsXG4gICAgICBjbGFzc05hbWU6IG51bGwsXG4gICAgfSxcbiAgICByZXBhaW50ID0gZnVuY3Rpb24gKCkge1xuICAgICAgY2FudmFzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gb3B0aW9ucy5iYXJUaGlja25lc3MgKiA1OyAvLyBuZWVkIHNwYWNlIGZvciBzaGFkb3dcblxuICAgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIik7XG4gICAgICBjdHguc2hhZG93Qmx1ciA9IG9wdGlvbnMuc2hhZG93Qmx1cjtcbiAgICAgIGN0eC5zaGFkb3dDb2xvciA9IG9wdGlvbnMuc2hhZG93Q29sb3I7XG5cbiAgICAgIHZhciBsaW5lR3JhZGllbnQgPSBjdHguY3JlYXRlTGluZWFyR3JhZGllbnQoMCwgMCwgY2FudmFzLndpZHRoLCAwKTtcbiAgICAgIGZvciAodmFyIHN0b3AgaW4gb3B0aW9ucy5iYXJDb2xvcnMpXG4gICAgICAgIGxpbmVHcmFkaWVudC5hZGRDb2xvclN0b3Aoc3RvcCwgb3B0aW9ucy5iYXJDb2xvcnNbc3RvcF0pO1xuICAgICAgY3R4LmxpbmVXaWR0aCA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzO1xuICAgICAgY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgY3R4Lm1vdmVUbygwLCBvcHRpb25zLmJhclRoaWNrbmVzcyAvIDIpO1xuICAgICAgY3R4LmxpbmVUbyhcbiAgICAgICAgTWF0aC5jZWlsKGN1cnJlbnRQcm9ncmVzcyAqIGNhbnZhcy53aWR0aCksXG4gICAgICAgIG9wdGlvbnMuYmFyVGhpY2tuZXNzIC8gMlxuICAgICAgKTtcbiAgICAgIGN0eC5zdHJva2VTdHlsZSA9IGxpbmVHcmFkaWVudDtcbiAgICAgIGN0eC5zdHJva2UoKTtcbiAgICB9LFxuICAgIGNyZWF0ZUNhbnZhcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XG4gICAgICB2YXIgc3R5bGUgPSBjYW52YXMuc3R5bGU7XG4gICAgICBzdHlsZS5wb3NpdGlvbiA9IFwiZml4ZWRcIjtcbiAgICAgIHN0eWxlLnRvcCA9IHN0eWxlLmxlZnQgPSBzdHlsZS5yaWdodCA9IHN0eWxlLm1hcmdpbiA9IHN0eWxlLnBhZGRpbmcgPSAwO1xuICAgICAgc3R5bGUuekluZGV4ID0gMTAwMDAxO1xuICAgICAgc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgaWYgKG9wdGlvbnMuY2xhc3NOYW1lKSBjYW52YXMuY2xhc3NMaXN0LmFkZChvcHRpb25zLmNsYXNzTmFtZSk7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNhbnZhcyk7XG4gICAgICBhZGRFdmVudCh3aW5kb3csIFwicmVzaXplXCIsIHJlcGFpbnQpO1xuICAgIH0sXG4gICAgdG9wYmFyID0ge1xuICAgICAgY29uZmlnOiBmdW5jdGlvbiAob3B0cykge1xuICAgICAgICBmb3IgKHZhciBrZXkgaW4gb3B0cylcbiAgICAgICAgICBpZiAob3B0aW9ucy5oYXNPd25Qcm9wZXJ0eShrZXkpKSBvcHRpb25zW2tleV0gPSBvcHRzW2tleV07XG4gICAgICB9LFxuICAgICAgc2hvdzogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoc2hvd2luZykgcmV0dXJuO1xuICAgICAgICBzaG93aW5nID0gdHJ1ZTtcbiAgICAgICAgaWYgKGZhZGVUaW1lcklkICE9PSBudWxsKSB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUoZmFkZVRpbWVySWQpO1xuICAgICAgICBpZiAoIWNhbnZhcykgY3JlYXRlQ2FudmFzKCk7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5vcGFjaXR5ID0gMTtcbiAgICAgICAgY2FudmFzLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG4gICAgICAgIHRvcGJhci5wcm9ncmVzcygwKTtcbiAgICAgICAgaWYgKG9wdGlvbnMuYXV0b1J1bikge1xuICAgICAgICAgIChmdW5jdGlvbiBsb29wKCkge1xuICAgICAgICAgICAgcHJvZ3Jlc3NUaW1lcklkID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgICAgICAgICAgIHRvcGJhci5wcm9ncmVzcyhcbiAgICAgICAgICAgICAgXCIrXCIgKyAwLjA1ICogTWF0aC5wb3coMSAtIE1hdGguc3FydChjdXJyZW50UHJvZ3Jlc3MpLCAyKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgcHJvZ3Jlc3M6IGZ1bmN0aW9uICh0bykge1xuICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gY3VycmVudFByb2dyZXNzO1xuICAgICAgICBpZiAodHlwZW9mIHRvID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgdG8gPVxuICAgICAgICAgICAgKHRvLmluZGV4T2YoXCIrXCIpID49IDAgfHwgdG8uaW5kZXhPZihcIi1cIikgPj0gMFxuICAgICAgICAgICAgICA/IGN1cnJlbnRQcm9ncmVzc1xuICAgICAgICAgICAgICA6IDApICsgcGFyc2VGbG9hdCh0byk7XG4gICAgICAgIH1cbiAgICAgICAgY3VycmVudFByb2dyZXNzID0gdG8gPiAxID8gMSA6IHRvO1xuICAgICAgICByZXBhaW50KCk7XG4gICAgICAgIHJldHVybiBjdXJyZW50UHJvZ3Jlc3M7XG4gICAgICB9LFxuICAgICAgaGlkZTogZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoIXNob3dpbmcpIHJldHVybjtcbiAgICAgICAgc2hvd2luZyA9IGZhbHNlO1xuICAgICAgICBpZiAocHJvZ3Jlc3NUaW1lcklkICE9IG51bGwpIHtcbiAgICAgICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUocHJvZ3Jlc3NUaW1lcklkKTtcbiAgICAgICAgICBwcm9ncmVzc1RpbWVySWQgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIChmdW5jdGlvbiBsb29wKCkge1xuICAgICAgICAgIGlmICh0b3BiYXIucHJvZ3Jlc3MoXCIrLjFcIikgPj0gMSkge1xuICAgICAgICAgICAgY2FudmFzLnN0eWxlLm9wYWNpdHkgLT0gMC4wNTtcbiAgICAgICAgICAgIGlmIChjYW52YXMuc3R5bGUub3BhY2l0eSA8PSAwLjA1KSB7XG4gICAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG4gICAgICAgICAgICAgIGZhZGVUaW1lcklkID0gbnVsbDtcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBmYWRlVGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gICAgICAgIH0pKCk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgaWYgKHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSB0b3BiYXI7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRvcGJhcjtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICB0aGlzLnRvcGJhciA9IHRvcGJhcjtcbiAgfVxufS5jYWxsKHRoaXMsIHdpbmRvdywgZG9jdW1lbnQpKTtcbiIsICJpbXBvcnQgJCBmcm9tIFwianF1ZXJ5XCI7XG53aW5kb3cuJCA9ICQ7XG53aW5kb3cualF1ZXJ5ID0gJDtcblxuaW1wb3J0IFwiYm9vdHN0cmFwXCI7XG5pbXBvcnQgXCIuLi92ZW5kb3IvcHJpc21cIjtcblxuaW1wb3J0IFwiLi9yZXBvc2l0b3J5XCI7XG5pbXBvcnQgXCIuL2tteF9hbmltXCI7XG5cbi8vIElmIHlvdSB3YW50IHRvIHVzZSBQaG9lbml4IGNoYW5uZWxzLCBydW4gYG1peCBoZWxwIHBoeC5nZW4uY2hhbm5lbGBcbi8vIHRvIGdldCBzdGFydGVkIGFuZCB0aGVuIHVuY29tbWVudCB0aGUgbGluZSBiZWxvdy5cbi8vIGltcG9ydCBcIi4vdXNlcl9zb2NrZXQuanNcIlxuXG4vLyBJbmNsdWRlIHBob2VuaXhfaHRtbCB0byBoYW5kbGUgbWV0aG9kPVBVVC9ERUxFVEUgaW4gZm9ybXMgYW5kIGJ1dHRvbnMuXG5pbXBvcnQgXCJwaG9lbml4X2h0bWxcIjtcbi8vIEVzdGFibGlzaCBQaG9lbml4IFNvY2tldCBhbmQgTGl2ZVZpZXcgY29uZmlndXJhdGlvbi5cbmltcG9ydCB7U29ja2V0fSBmcm9tIFwicGhvZW5peFwiO1xuaW1wb3J0IHtMaXZlU29ja2V0fSBmcm9tIFwicGhvZW5peF9saXZlX3ZpZXdcIjtcbmltcG9ydCB0b3BiYXIgZnJvbSBcIi4uL3ZlbmRvci90b3BiYXJcIjtcblxubGV0IGNzcmZUb2tlbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXCJtZXRhW25hbWU9J2NzcmYtdG9rZW4nXVwiKS5nZXRBdHRyaWJ1dGUoXCJjb250ZW50XCIpO1xubGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwge3BhcmFtczoge19jc3JmX3Rva2VuOiBjc3JmVG9rZW59fSk7XG5cbi8vIFNob3cgcHJvZ3Jlc3MgYmFyIG9uIGxpdmUgbmF2aWdhdGlvbiBhbmQgZm9ybSBzdWJtaXRzXG50b3BiYXIuY29uZmlnKHtiYXJDb2xvcnM6IHswOiBcIiMyOWRcIn0sIHNoYWRvd0NvbG9yOiBcInJnYmEoMCwgMCwgMCwgLjMpXCJ9KTtcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGh4OnBhZ2UtbG9hZGluZy1zdGFydFwiLCBpbmZvID0+IHRvcGJhci5zaG93KCkpO1xud2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwaHg6cGFnZS1sb2FkaW5nLXN0b3BcIiwgaW5mbyA9PiB0b3BiYXIuaGlkZSgpKTtcblxuLy8gY29ubmVjdCBpZiB0aGVyZSBhcmUgYW55IExpdmVWaWV3cyBvbiB0aGUgcGFnZVxubGl2ZVNvY2tldC5jb25uZWN0KCk7XG5cbi8vIGV4cG9zZSBsaXZlU29ja2V0IG9uIHdpbmRvdyBmb3Igd2ViIGNvbnNvbGUgZGVidWcgbG9ncyBhbmQgbGF0ZW5jeSBzaW11bGF0aW9uOlxuLy8gPj4gbGl2ZVNvY2tldC5lbmFibGVEZWJ1ZygpXG4vLyA+PiBsaXZlU29ja2V0LmVuYWJsZUxhdGVuY3lTaW0oMTAwMCkgIC8vIGVuYWJsZWQgZm9yIGR1cmF0aW9uIG9mIGJyb3dzZXIgc2Vzc2lvblxuLy8gPj4gbGl2ZVNvY2tldC5kaXNhYmxlTGF0ZW5jeVNpbSgpXG53aW5kb3cubGl2ZVNvY2tldCA9IGxpdmVTb2NrZXQ7XG4iLCAiZXhwb3J0ICogZnJvbSBcIi4vZW51bXMuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3csIGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJCYXNlIH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIH0gZnJvbSBcIi4vcG9wcGVyLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyIsICJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIGlmIChub2RlLnRvU3RyaW5nKCkgIT09ICdbb2JqZWN0IFdpbmRvd10nKSB7XG4gICAgdmFyIG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQ7XG4gICAgcmV0dXJuIG93bmVyRG9jdW1lbnQgPyBvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3IHx8IHdpbmRvdyA6IHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBub2RlO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsICJpbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMF07XG59IiwgImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFVBU3RyaW5nKCkge1xuICB2YXIgdWFEYXRhID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGE7XG5cbiAgaWYgKHVhRGF0YSAhPSBudWxsICYmIHVhRGF0YS5icmFuZHMpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzFdO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQoeCAqIGRwcikgLyBkcHIgfHwgMCxcbiAgICB5OiByb3VuZCh5ICogZHByKSAvIGRwciB8fCAwXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXBUb1N0eWxlcyhfcmVmMikge1xuICB2YXIgX09iamVjdCRhc3NpZ24yO1xuXG4gIHZhciBwb3BwZXIgPSBfcmVmMi5wb3BwZXIsXG4gICAgICBwb3BwZXJSZWN0ID0gX3JlZjIucG9wcGVyUmVjdCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYyLnBsYWNlbWVudCxcbiAgICAgIHZhcmlhdGlvbiA9IF9yZWYyLnZhcmlhdGlvbixcbiAgICAgIG9mZnNldHMgPSBfcmVmMi5vZmZzZXRzLFxuICAgICAgcG9zaXRpb24gPSBfcmVmMi5wb3NpdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9yZWYyLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGFkYXB0aXZlID0gX3JlZjIuYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHMgPSBfcmVmMi5yb3VuZE9mZnNldHMsXG4gICAgICBpc0ZpeGVkID0gX3JlZjIuaXNGaXhlZDtcbiAgdmFyIF9vZmZzZXRzJHggPSBvZmZzZXRzLngsXG4gICAgICB4ID0gX29mZnNldHMkeCA9PT0gdm9pZCAwID8gMCA6IF9vZmZzZXRzJHgsXG4gICAgICBfb2Zmc2V0cyR5ID0gb2Zmc2V0cy55LFxuICAgICAgeSA9IF9vZmZzZXRzJHkgPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR5O1xuXG4gIHZhciBfcmVmMyA9IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9KSA6IHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcblxuICB4ID0gX3JlZjMueDtcbiAgeSA9IF9yZWYzLnk7XG4gIHZhciBoYXNYID0gb2Zmc2V0cy5oYXNPd25Qcm9wZXJ0eSgneCcpO1xuICB2YXIgaGFzWSA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3knKTtcbiAgdmFyIHNpZGVYID0gbGVmdDtcbiAgdmFyIHNpZGVZID0gdG9wO1xuICB2YXIgd2luID0gd2luZG93O1xuXG4gIGlmIChhZGFwdGl2ZSkge1xuICAgIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKTtcbiAgICB2YXIgaGVpZ2h0UHJvcCA9ICdjbGllbnRIZWlnaHQnO1xuICAgIHZhciB3aWR0aFByb3AgPSAnY2xpZW50V2lkdGgnO1xuXG4gICAgaWYgKG9mZnNldFBhcmVudCA9PT0gZ2V0V2luZG93KHBvcHBlcikpIHtcbiAgICAgIG9mZnNldFBhcmVudCA9IGdldERvY3VtZW50RWxlbWVudChwb3BwZXIpO1xuXG4gICAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uICE9PSAnc3RhdGljJyAmJiBwb3NpdGlvbiA9PT0gJ2Fic29sdXRlJykge1xuICAgICAgICBoZWlnaHRQcm9wID0gJ3Njcm9sbEhlaWdodCc7XG4gICAgICAgIHdpZHRoUHJvcCA9ICdzY3JvbGxXaWR0aCc7XG4gICAgICB9XG4gICAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYXN0XTogZm9yY2UgdHlwZSByZWZpbmVtZW50LCB3ZSBjb21wYXJlIG9mZnNldFBhcmVudCB3aXRoIHdpbmRvdyBhYm92ZSwgYnV0IEZsb3cgZG9lc24ndCBkZXRlY3QgaXRcblxuXG4gICAgb2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50O1xuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gdG9wIHx8IChwbGFjZW1lbnQgPT09IGxlZnQgfHwgcGxhY2VtZW50ID09PSByaWdodCkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVZID0gYm90dG9tO1xuICAgICAgdmFyIG9mZnNldFkgPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC5oZWlnaHQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXTtcbiAgICAgIHkgLT0gb2Zmc2V0WSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCB8fCAocGxhY2VtZW50ID09PSB0b3AgfHwgcGxhY2VtZW50ID09PSBib3R0b20pICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWCA9IHJpZ2h0O1xuICAgICAgdmFyIG9mZnNldFggPSBpc0ZpeGVkICYmIG9mZnNldFBhcmVudCA9PT0gd2luICYmIHdpbi52aXN1YWxWaWV3cG9ydCA/IHdpbi52aXN1YWxWaWV3cG9ydC53aWR0aCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgICAgb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF07XG4gICAgICB4IC09IG9mZnNldFggLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICB2YXIgX3JlZjQgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUih7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH0pIDoge1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xuXG4gIHggPSBfcmVmNC54O1xuICB5ID0gX3JlZjQueTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPD0gMSA/IFwidHJhbnNsYXRlKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgpXCIgOiBcInRyYW5zbGF0ZTNkKFwiICsgeCArIFwicHgsIFwiICsgeSArIFwicHgsIDApXCIsIF9PYmplY3QkYXNzaWduKSk7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24yID0ge30sIF9PYmplY3QkYXNzaWduMltzaWRlWV0gPSBoYXNZID8geSArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjJbc2lkZVhdID0gaGFzWCA/IHggKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yLnRyYW5zZm9ybSA9ICcnLCBfT2JqZWN0JGFzc2lnbjIpKTtcbn1cblxuZnVuY3Rpb24gY29tcHV0ZVN0eWxlcyhfcmVmNSkge1xuICB2YXIgc3RhdGUgPSBfcmVmNS5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmNS5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID0gb3B0aW9ucy5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRncHVBY2NlbGVyYXQsXG4gICAgICBfb3B0aW9ucyRhZGFwdGl2ZSA9IG9wdGlvbnMuYWRhcHRpdmUsXG4gICAgICBhZGFwdGl2ZSA9IF9vcHRpb25zJGFkYXB0aXZlID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWRhcHRpdmUsXG4gICAgICBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPSBvcHRpb25zLnJvdW5kT2Zmc2V0cyxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJvdW5kT2Zmc2V0cztcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgdmFyIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IGdldENvbXB1dGVkU3R5bGUoc3RhdGUuZWxlbWVudHMucG9wcGVyKS50cmFuc2l0aW9uUHJvcGVydHkgfHwgJyc7XG5cbiAgICBpZiAoYWRhcHRpdmUgJiYgWyd0cmFuc2Zvcm0nLCAndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10uc29tZShmdW5jdGlvbiAocHJvcGVydHkpIHtcbiAgICAgIHJldHVybiB0cmFuc2l0aW9uUHJvcGVydHkuaW5kZXhPZihwcm9wZXJ0eSkgPj0gMDtcbiAgICB9KSkge1xuICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBEZXRlY3RlZCBDU1MgdHJhbnNpdGlvbnMgb24gYXQgbGVhc3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcnLCAnQ1NTIHByb3BlcnRpZXM6IFwidHJhbnNmb3JtXCIsIFwidG9wXCIsIFwicmlnaHRcIiwgXCJib3R0b21cIiwgXCJsZWZ0XCIuJywgJ1xcblxcbicsICdEaXNhYmxlIHRoZSBcImNvbXB1dGVTdHlsZXNcIiBtb2RpZmllclxcJ3MgYGFkYXB0aXZlYCBvcHRpb24gdG8gYWxsb3cnLCAnZm9yIHNtb290aCB0cmFuc2l0aW9ucywgb3IgcmVtb3ZlIHRoZXNlIHByb3BlcnRpZXMgZnJvbSB0aGUgQ1NTJywgJ3RyYW5zaXRpb24gZGVjbGFyYXRpb24gb24gdGhlIHBvcHBlciBlbGVtZW50IGlmIG9ubHkgdHJhbnNpdGlvbmluZycsICdvcGFjaXR5IG9yIGJhY2tncm91bmQtY29sb3IgZm9yIGV4YW1wbGUuJywgJ1xcblxcbicsICdXZSByZWNvbW1lbmQgdXNpbmcgdGhlIHBvcHBlciBlbGVtZW50IGFzIGEgd3JhcHBlciBhcm91bmQgYW4gaW5uZXInLCAnZWxlbWVudCB0aGF0IGNhbiBoYXZlIGFueSBDU1MgcHJvcGVydHkgdHJhbnNpdGlvbmVkIGZvciBhbmltYXRpb25zLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IHtcbiAgICBwbGFjZW1lbnQ6IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KSxcbiAgICB2YXJpYXRpb246IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvbixcbiAgICBpc0ZpeGVkOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnXG4gIH07XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5wb3BwZXIsIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLFxuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBhZGFwdGl2ZTogYWRhcHRpdmUsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyAhPSBudWxsKSB7XG4gICAgc3RhdGUuc3R5bGVzLmFycm93ID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLmFycm93LCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3csXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGFkYXB0aXZlOiBmYWxzZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcGxhY2VtZW50Jzogc3RhdGUucGxhY2VtZW50XG4gIH0pO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnY29tcHV0ZVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnYmVmb3JlV3JpdGUnLFxuICBmbjogY29tcHV0ZVN0eWxlcyxcbiAgZGF0YToge31cbn07IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsICJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCAidmFyIGhhc2ggPSB7XG4gIHN0YXJ0OiAnZW5kJyxcbiAgZW5kOiAnc3RhcnQnXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGlzTGF5b3V0Vmlld3BvcnQgZnJvbSBcIi4vaXNMYXlvdXRWaWV3cG9ydC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7XG5cbiAgaWYgKHZpc3VhbFZpZXdwb3J0KSB7XG4gICAgd2lkdGggPSB2aXN1YWxWaWV3cG9ydC53aWR0aDtcbiAgICBoZWlnaHQgPSB2aXN1YWxWaWV3cG9ydC5oZWlnaHQ7XG4gICAgdmFyIGxheW91dFZpZXdwb3J0ID0gaXNMYXlvdXRWaWV3cG9ydCgpO1xuXG4gICAgaWYgKGxheW91dFZpZXdwb3J0IHx8ICFsYXlvdXRWaWV3cG9ydCAmJiBzdHJhdGVneSA9PT0gJ2ZpeGVkJykge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5pbXBvcnQgeyBtYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiOyAvLyBHZXRzIHRoZSBlbnRpcmUgc2l6ZSBvZiB0aGUgc2Nyb2xsYWJsZSBkb2N1bWVudCBhcmVhLCBldmVuIGV4dGVuZGluZyBvdXRzaWRlXG4vLyBvZiB0aGUgYDxodG1sPmAgYW5kIGA8Ym9keT5gIHJlY3QgYm91bmRzIGlmIGhvcml6b250YWxseSBzY3JvbGxhYmxlXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB3aW5TY3JvbGwgPSBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCk7XG4gIHZhciBib2R5ID0gKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5O1xuICB2YXIgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuc2Nyb2xsV2lkdGggOiAwLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApO1xuICB2YXIgaGVpZ2h0ID0gbWF4KGh0bWwuc2Nyb2xsSGVpZ2h0LCBodG1sLmNsaWVudEhlaWdodCwgYm9keSA/IGJvZHkuc2Nyb2xsSGVpZ2h0IDogMCwgYm9keSA/IGJvZHkuY2xpZW50SGVpZ2h0IDogMCk7XG4gIHZhciB4ID0gLXdpblNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgdmFyIHkgPSAtd2luU2Nyb2xsLnNjcm9sbFRvcDtcblxuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShib2R5IHx8IGh0bWwpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5jbGllbnRXaWR0aCA6IDApIC0gd2lkdGg7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfTtcbn0iLCAiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsICJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsICJpbXBvcnQgZ2V0U2Nyb2xsUGFyZW50IGZyb20gXCIuL2dldFNjcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuLypcbmdpdmVuIGEgRE9NIGVsZW1lbnQsIHJldHVybiB0aGUgbGlzdCBvZiBhbGwgc2Nyb2xsIHBhcmVudHMsIHVwIHRoZSBsaXN0IG9mIGFuY2Vzb3JzXG51bnRpbCB3ZSBnZXQgdG8gdGhlIHRvcCB3aW5kb3cgb2JqZWN0LiBUaGlzIGxpc3QgaXMgd2hhdCB3ZSBhdHRhY2ggc2Nyb2xsIGxpc3RlbmVyc1xudG8sIGJlY2F1c2UgaWYgYW55IG9mIHRoZXNlIHBhcmVudCBlbGVtZW50cyBzY3JvbGwsIHdlJ2xsIG5lZWQgdG8gcmUtY2FsY3VsYXRlIHRoZVxucmVmZXJlbmNlIGVsZW1lbnQncyBwb3NpdGlvbi5cbiovXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RTY3JvbGxQYXJlbnRzKGVsZW1lbnQsIGxpc3QpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICBpZiAobGlzdCA9PT0gdm9pZCAwKSB7XG4gICAgbGlzdCA9IFtdO1xuICB9XG5cbiAgdmFyIHNjcm9sbFBhcmVudCA9IGdldFNjcm9sbFBhcmVudChlbGVtZW50KTtcbiAgdmFyIGlzQm9keSA9IHNjcm9sbFBhcmVudCA9PT0gKChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keSk7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coc2Nyb2xsUGFyZW50KTtcbiAgdmFyIHRhcmdldCA9IGlzQm9keSA/IFt3aW5dLmNvbmNhdCh3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzU2Nyb2xsUGFyZW50KHNjcm9sbFBhcmVudCkgPyBzY3JvbGxQYXJlbnQgOiBbXSkgOiBzY3JvbGxQYXJlbnQ7XG4gIHZhciB1cGRhdGVkTGlzdCA9IGxpc3QuY29uY2F0KHRhcmdldCk7XG4gIHJldHVybiBpc0JvZHkgPyB1cGRhdGVkTGlzdCA6IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLWNhbGxdOiBpc0JvZHkgdGVsbHMgdXMgdGFyZ2V0IHdpbGwgYmUgYW4gSFRNTEVsZW1lbnQgaGVyZVxuICB1cGRhdGVkTGlzdC5jb25jYXQobGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZSh0YXJnZXQpKSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsICJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBzdHJhdGVneSkge1xuICB2YXIgcmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBmYWxzZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIHtcbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50ID09PSB2aWV3cG9ydCA/IHJlY3RUb0NsaWVudFJlY3QoZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSkgOiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpID8gZ2V0SW5uZXJCb3VuZGluZ0NsaWVudFJlY3QoY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSwgc3RyYXRlZ3kpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBmaXJzdENsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsICJpbXBvcnQgZ2V0Q2xpcHBpbmdSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgY29tcHV0ZU9mZnNldHMgZnJvbSBcIi4vY29tcHV0ZU9mZnNldHMuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuL3JlY3RUb0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCB7IGNsaXBwaW5nUGFyZW50cywgcmVmZXJlbmNlLCBwb3BwZXIsIGJvdHRvbSwgdG9wLCByaWdodCwgYmFzZVBsYWNlbWVudHMsIHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBtZXJnZVBhZGRpbmdPYmplY3QgZnJvbSBcIi4vbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuL2V4cGFuZFRvSGFzaE1hcC5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgX29wdGlvbnMkcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMkcGxhY2VtZW50ID09PSB2b2lkIDAgPyBzdGF0ZS5wbGFjZW1lbnQgOiBfb3B0aW9ucyRwbGFjZW1lbnQsXG4gICAgICBfb3B0aW9ucyRzdHJhdGVneSA9IF9vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgc3RyYXRlZ3kgPSBfb3B0aW9ucyRzdHJhdGVneSA9PT0gdm9pZCAwID8gc3RhdGUuc3RyYXRlZ3kgOiBfb3B0aW9ucyRzdHJhdGVneSxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSk7XG4gIHZhciByZWZlcmVuY2VDbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZSk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwgImltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyB2YXJpYXRpb25QbGFjZW1lbnRzLCBiYXNlUGxhY2VtZW50cywgcGxhY2VtZW50cyBhcyBhbGxQbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX29wdGlvbnMgPSBvcHRpb25zLFxuICAgICAgcGxhY2VtZW50ID0gX29wdGlvbnMucGxhY2VtZW50LFxuICAgICAgYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9IF9vcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IF9vcHRpb25zJGFsbG93ZWRBdXRvUCA9PT0gdm9pZCAwID8gYWxsUGxhY2VtZW50cyA6IF9vcHRpb25zJGFsbG93ZWRBdXRvUDtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpO1xuICB2YXIgcGxhY2VtZW50cyA9IHZhcmlhdGlvbiA/IGZsaXBWYXJpYXRpb25zID8gdmFyaWF0aW9uUGxhY2VtZW50cyA6IHZhcmlhdGlvblBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHZhcmlhdGlvbjtcbiAgfSkgOiBiYXNlUGxhY2VtZW50cztcbiAgdmFyIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhbGxvd2VkQXV0b1BsYWNlbWVudHMuaW5kZXhPZihwbGFjZW1lbnQpID49IDA7XG4gIH0pO1xuXG4gIGlmIChhbGxvd2VkUGxhY2VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHM7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBUaGUgYGFsbG93ZWRBdXRvUGxhY2VtZW50c2Agb3B0aW9uIGRpZCBub3QgYWxsb3cgYW55JywgJ3BsYWNlbWVudHMuIEVuc3VyZSB0aGUgYHBsYWNlbWVudGAgb3B0aW9uIG1hdGNoZXMgdGhlIHZhcmlhdGlvbicsICdvZiB0aGUgYWxsb3dlZCBwbGFjZW1lbnRzLicsICdGb3IgZXhhbXBsZSwgXCJhdXRvXCIgY2Fubm90IGJlIHVzZWQgdG8gYWxsb3cgXCJib3R0b20tc3RhcnRcIi4nLCAnVXNlIFwiYXV0by1zdGFydFwiIGluc3RlYWQuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtdHlwZV06IEZsb3cgc2VlbXMgdG8gaGF2ZSBwcm9ibGVtcyB3aXRoIHR3byBhcnJheSB1bmlvbnMuLi5cblxuXG4gIHZhciBvdmVyZmxvd3MgPSBhbGxvd2VkUGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KVtnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCldO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG92ZXJmbG93cykuc29ydChmdW5jdGlvbiAoYSwgYikge1xuICAgIHJldHVybiBvdmVyZmxvd3NbYV0gLSBvdmVyZmxvd3NbYl07XG4gIH0pO1xufSIsICJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMgXHUyMDEzIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwgImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwgImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBwbGFjZW1lbnRzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwgImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRBbHRBeGlzKGF4aXMpIHtcbiAgcmV0dXJuIGF4aXMgPT09ICd4JyA/ICd5JyA6ICd4Jztcbn0iLCAiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB7IHdpdGhpbiwgd2l0aGluTWF4Q2xhbXAgfSBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IGdldEZyZXNoU2lkZU9iamVjdCBmcm9tIFwiLi4vdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5pbXBvcnQgeyBtaW4gYXMgbWF0aE1pbiwgbWF4IGFzIG1hdGhNYXggfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBwcmV2ZW50T3ZlcmZsb3coX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXIgPSBvcHRpb25zLnRldGhlcixcbiAgICAgIHRldGhlciA9IF9vcHRpb25zJHRldGhlciA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHRldGhlcixcbiAgICAgIF9vcHRpb25zJHRldGhlck9mZnNldCA9IG9wdGlvbnMudGV0aGVyT2Zmc2V0LFxuICAgICAgdGV0aGVyT2Zmc2V0ID0gX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID09PSB2b2lkIDAgPyAwIDogX29wdGlvbnMkdGV0aGVyT2Zmc2V0O1xuICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeVxuICB9KTtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9ICF2YXJpYXRpb247XG4gIHZhciBtYWluQXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGFsdEF4aXMgPSBnZXRBbHRBeGlzKG1haW5BeGlzKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IHRldGhlck9mZnNldChPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHRldGhlck9mZnNldDtcbiAgdmFyIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXRWYWx1ZSA9PT0gJ251bWJlcicgPyB7XG4gICAgbWFpbkF4aXM6IHRldGhlck9mZnNldFZhbHVlLFxuICAgIGFsdEF4aXM6IHRldGhlck9mZnNldFZhbHVlXG4gIH0gOiBPYmplY3QuYXNzaWduKHtcbiAgICBtYWluQXhpczogMCxcbiAgICBhbHRBeGlzOiAwXG4gIH0sIHRldGhlck9mZnNldFZhbHVlKTtcbiAgdmFyIG9mZnNldE1vZGlmaWVyU3RhdGUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF0gOiBudWxsO1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQ7XG5cbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IG9mZnNldCArIG92ZXJmbG93W21haW5TaWRlXTtcbiAgICB2YXIgbWF4ID0gb2Zmc2V0IC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgbWF4T2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gLXJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgKyBhZGRpdGl2ZSArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXM7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJCA9IG9mZnNldE1vZGlmaWVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG9mZnNldE1vZGlmaWVyU3RhdGVbbWFpbkF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gb2Zmc2V0ICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gb2Zmc2V0ICsgbWF4T2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZTtcbiAgICB2YXIgcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4obWluLCB0ZXRoZXJNaW4pIDogbWluLCBvZmZzZXQsIHRldGhlciA/IG1hdGhNYXgobWF4LCB0ZXRoZXJNYXgpIDogbWF4KTtcbiAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgfVxuXG4gIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgX29mZnNldE1vZGlmaWVyU3RhdGUkMjtcblxuICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgIHZhciBfb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1thbHRBeGlzXTtcblxuICAgIHZhciBfbGVuID0gYWx0QXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgdmFyIF9taW4gPSBfb2Zmc2V0ICsgb3ZlcmZsb3dbX21haW5TaWRlXTtcblxuICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgIHZhciBpc09yaWdpblNpZGUgPSBbdG9wLCBsZWZ0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpICE9PSAtMTtcblxuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSA9IChfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVthbHRBeGlzXSkgIT0gbnVsbCA/IF9vZmZzZXRNb2RpZmllclN0YXRlJDIgOiAwO1xuXG4gICAgdmFyIF90ZXRoZXJNaW4gPSBpc09yaWdpblNpZGUgPyBfbWluIDogX29mZnNldCAtIHJlZmVyZW5jZVJlY3RbX2xlbl0gLSBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcztcblxuICAgIHZhciBfdGV0aGVyTWF4ID0gaXNPcmlnaW5TaWRlID8gX29mZnNldCArIHJlZmVyZW5jZVJlY3RbX2xlbl0gKyBwb3BwZXJSZWN0W19sZW5dIC0gX29mZnNldE1vZGlmaWVyVmFsdWUgLSBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUuYWx0QXhpcyA6IF9tYXg7XG5cbiAgICB2YXIgX3ByZXZlbnRlZE9mZnNldCA9IHRldGhlciAmJiBpc09yaWdpblNpZGUgPyB3aXRoaW5NYXhDbGFtcChfdGV0aGVyTWluLCBfb2Zmc2V0LCBfdGV0aGVyTWF4KSA6IHdpdGhpbih0ZXRoZXIgPyBfdGV0aGVyTWluIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gX3RldGhlck1heCA6IF9tYXgpO1xuXG4gICAgcG9wcGVyT2Zmc2V0c1thbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQ7XG4gICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogcHJldmVudE92ZXJmbG93LFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddXG59OyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZVNjcm9sbCBmcm9tIFwiLi9nZXROb2RlU2Nyb2xsLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGlzRWxlbWVudFNjYWxlZChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IHJvdW5kKHJlY3Qud2lkdGgpIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcm91bmQocmVjdC5oZWlnaHQpIC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCwgaXNGaXhlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsICJpbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiOyAvLyBzb3VyY2U6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQ5ODc1MjU1XG5cbmZ1bmN0aW9uIG9yZGVyKG1vZGlmaWVycykge1xuICB2YXIgbWFwID0gbmV3IE1hcCgpO1xuICB2YXIgdmlzaXRlZCA9IG5ldyBTZXQoKTtcbiAgdmFyIHJlc3VsdCA9IFtdO1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBtYXAuc2V0KG1vZGlmaWVyLm5hbWUsIG1vZGlmaWVyKTtcbiAgfSk7IC8vIE9uIHZpc2l0aW5nIG9iamVjdCwgY2hlY2sgZm9yIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHZpc2l0IHRoZW0gcmVjdXJzaXZlbHlcblxuICBmdW5jdGlvbiBzb3J0KG1vZGlmaWVyKSB7XG4gICAgdmlzaXRlZC5hZGQobW9kaWZpZXIubmFtZSk7XG4gICAgdmFyIHJlcXVpcmVzID0gW10uY29uY2F0KG1vZGlmaWVyLnJlcXVpcmVzIHx8IFtdLCBtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzIHx8IFtdKTtcbiAgICByZXF1aXJlcy5mb3JFYWNoKGZ1bmN0aW9uIChkZXApIHtcbiAgICAgIGlmICghdmlzaXRlZC5oYXMoZGVwKSkge1xuICAgICAgICB2YXIgZGVwTW9kaWZpZXIgPSBtYXAuZ2V0KGRlcCk7XG5cbiAgICAgICAgaWYgKGRlcE1vZGlmaWVyKSB7XG4gICAgICAgICAgc29ydChkZXBNb2RpZmllcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXN1bHQucHVzaChtb2RpZmllcik7XG4gIH1cblxuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBpZiAoIXZpc2l0ZWQuaGFzKG1vZGlmaWVyLm5hbWUpKSB7XG4gICAgICAvLyBjaGVjayBmb3IgdmlzaXRlZCBvYmplY3RcbiAgICAgIHNvcnQobW9kaWZpZXIpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG9yZGVyTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICAvLyBvcmRlciBiYXNlZCBvbiBkZXBlbmRlbmNpZXNcbiAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcihtb2RpZmllcnMpOyAvLyBvcmRlciBiYXNlZCBvbiBwaGFzZVxuXG4gIHJldHVybiBtb2RpZmllclBoYXNlcy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGhhc2UpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgIHJldHVybiBtb2RpZmllci5waGFzZSA9PT0gcGhhc2U7XG4gICAgfSkpO1xuICB9LCBbXSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZm9ybWF0KHN0cikge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gW10uY29uY2F0KGFyZ3MpLnJlZHVjZShmdW5jdGlvbiAocCwgYykge1xuICAgIHJldHVybiBwLnJlcGxhY2UoLyVzLywgYyk7XG4gIH0sIHN0cik7XG59IiwgImltcG9ydCBmb3JtYXQgZnJvbSBcIi4vZm9ybWF0LmpzXCI7XG5pbXBvcnQgeyBtb2RpZmllclBoYXNlcyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfTU9ESUZJRVJfRVJST1IgPSAnUG9wcGVyOiBtb2RpZmllciBcIiVzXCIgcHJvdmlkZWQgYW4gaW52YWxpZCAlcyBwcm9wZXJ0eSwgZXhwZWN0ZWQgJXMgYnV0IGdvdCAlcyc7XG52YXIgTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SID0gJ1BvcHBlcjogbW9kaWZpZXIgXCIlc1wiIHJlcXVpcmVzIFwiJXNcIiwgYnV0IFwiJXNcIiBtb2RpZmllciBpcyBub3QgYXZhaWxhYmxlJztcbnZhciBWQUxJRF9QUk9QRVJUSUVTID0gWyduYW1lJywgJ2VuYWJsZWQnLCAncGhhc2UnLCAnZm4nLCAnZWZmZWN0JywgJ3JlcXVpcmVzJywgJ29wdGlvbnMnXTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHZhbGlkYXRlTW9kaWZpZXJzKG1vZGlmaWVycykge1xuICBtb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICBbXS5jb25jYXQoT2JqZWN0LmtleXMobW9kaWZpZXIpLCBWQUxJRF9QUk9QRVJUSUVTKSAvLyBJRTExLWNvbXBhdGlibGUgcmVwbGFjZW1lbnQgZm9yIGBuZXcgU2V0KGl0ZXJhYmxlKWBcbiAgICAuZmlsdGVyKGZ1bmN0aW9uICh2YWx1ZSwgaW5kZXgsIHNlbGYpIHtcbiAgICAgIHJldHVybiBzZWxmLmluZGV4T2YodmFsdWUpID09PSBpbmRleDtcbiAgICB9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgIGNhc2UgJ25hbWUnOlxuICAgICAgICAgIGlmICh0eXBlb2YgbW9kaWZpZXIubmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIFN0cmluZyhtb2RpZmllci5uYW1lKSwgJ1wibmFtZVwiJywgJ1wic3RyaW5nXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5uYW1lKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAnZW5hYmxlZCc6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5lbmFibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVuYWJsZWRcIicsICdcImJvb2xlYW5cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmVuYWJsZWQpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdwaGFzZSc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyUGhhc2VzLmluZGV4T2YobW9kaWZpZXIucGhhc2UpIDwgMCkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicGhhc2VcIicsIFwiZWl0aGVyIFwiICsgbW9kaWZpZXJQaGFzZXMuam9pbignLCAnKSwgXCJcXFwiXCIgKyBTdHJpbmcobW9kaWZpZXIucGhhc2UpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdmbic6XG4gICAgICAgICAgaWYgKHR5cGVvZiBtb2RpZmllci5mbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wiZm5cIicsICdcImZ1bmN0aW9uXCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5mbikgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ2VmZmVjdCc6XG4gICAgICAgICAgaWYgKG1vZGlmaWVyLmVmZmVjdCAhPSBudWxsICYmIHR5cGVvZiBtb2RpZmllci5lZmZlY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZm9ybWF0KElOVkFMSURfTU9ESUZJRVJfRVJST1IsIG1vZGlmaWVyLm5hbWUsICdcImVmZmVjdFwiJywgJ1wiZnVuY3Rpb25cIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLmZuKSArIFwiXFxcIlwiKSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSAncmVxdWlyZXMnOlxuICAgICAgICAgIGlmIChtb2RpZmllci5yZXF1aXJlcyAhPSBudWxsICYmICFBcnJheS5pc0FycmF5KG1vZGlmaWVyLnJlcXVpcmVzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNcIicsICdcImFycmF5XCInLCBcIlxcXCJcIiArIFN0cmluZyhtb2RpZmllci5yZXF1aXJlcykgKyBcIlxcXCJcIikpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgJ3JlcXVpcmVzSWZFeGlzdHMnOlxuICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShtb2RpZmllci5yZXF1aXJlc0lmRXhpc3RzKSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoSU5WQUxJRF9NT0RJRklFUl9FUlJPUiwgbW9kaWZpZXIubmFtZSwgJ1wicmVxdWlyZXNJZkV4aXN0c1wiJywgJ1wiYXJyYXlcIicsIFwiXFxcIlwiICsgU3RyaW5nKG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMpICsgXCJcXFwiXCIpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlICdvcHRpb25zJzpcbiAgICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLmVycm9yKFwiUG9wcGVySlM6IGFuIGludmFsaWQgcHJvcGVydHkgaGFzIGJlZW4gcHJvdmlkZWQgdG8gdGhlIFxcXCJcIiArIG1vZGlmaWVyLm5hbWUgKyBcIlxcXCIgbW9kaWZpZXIsIHZhbGlkIHByb3BlcnRpZXMgYXJlIFwiICsgVkFMSURfUFJPUEVSVElFUy5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgICAgICAgIHJldHVybiBcIlxcXCJcIiArIHMgKyBcIlxcXCJcIjtcbiAgICAgICAgICB9KS5qb2luKCcsICcpICsgXCI7IGJ1dCBcXFwiXCIgKyBrZXkgKyBcIlxcXCIgd2FzIHByb3ZpZGVkLlwiKTtcbiAgICAgIH1cblxuICAgICAgbW9kaWZpZXIucmVxdWlyZXMgJiYgbW9kaWZpZXIucmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAocmVxdWlyZW1lbnQpIHtcbiAgICAgICAgaWYgKG1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChtb2QpIHtcbiAgICAgICAgICByZXR1cm4gbW9kLm5hbWUgPT09IHJlcXVpcmVtZW50O1xuICAgICAgICB9KSA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihmb3JtYXQoTUlTU0lOR19ERVBFTkRFTkNZX0VSUk9SLCBTdHJpbmcobW9kaWZpZXIubmFtZSksIHJlcXVpcmVtZW50LCByZXF1aXJlbWVudCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSk7XG59IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVuaXF1ZUJ5KGFyciwgZm4pIHtcbiAgdmFyIGlkZW50aWZpZXJzID0gbmV3IFNldCgpO1xuICByZXR1cm4gYXJyLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xuICAgIHZhciBpZGVudGlmaWVyID0gZm4oaXRlbSk7XG5cbiAgICBpZiAoIWlkZW50aWZpZXJzLmhhcyhpZGVudGlmaWVyKSkge1xuICAgICAgaWRlbnRpZmllcnMuYWRkKGlkZW50aWZpZXIpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRDb21wb3NpdGVSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wb3NpdGVSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGxpc3RTY3JvbGxQYXJlbnRzIGZyb20gXCIuL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IG9yZGVyTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL29yZGVyTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSBcIi4vdXRpbHMvZGVib3VuY2UuanNcIjtcbmltcG9ydCB2YWxpZGF0ZU1vZGlmaWVycyBmcm9tIFwiLi91dGlscy92YWxpZGF0ZU1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IHVuaXF1ZUJ5IGZyb20gXCIuL3V0aWxzL3VuaXF1ZUJ5LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi9lbnVtcy5qc1wiO1xudmFyIElOVkFMSURfRUxFTUVOVF9FUlJPUiA9ICdQb3BwZXI6IEludmFsaWQgcmVmZXJlbmNlIG9yIHBvcHBlciBhcmd1bWVudCBwcm92aWRlZC4gVGhleSBtdXN0IGJlIGVpdGhlciBhIERPTSBlbGVtZW50IG9yIHZpcnR1YWwgZWxlbWVudC4nO1xudmFyIElORklOSVRFX0xPT1BfRVJST1IgPSAnUG9wcGVyOiBBbiBpbmZpbml0ZSBsb29wIGluIHRoZSBtb2RpZmllcnMgY3ljbGUgaGFzIGJlZW4gZGV0ZWN0ZWQhIFRoZSBjeWNsZSBoYXMgYmVlbiBpbnRlcnJ1cHRlZCB0byBwcmV2ZW50IGEgYnJvd3NlciBjcmFzaC4nO1xudmFyIERFRkFVTFRfT1BUSU9OUyA9IHtcbiAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgbW9kaWZpZXJzOiBbXSxcbiAgc3RyYXRlZ3k6ICdhYnNvbHV0ZSdcbn07XG5cbmZ1bmN0aW9uIGFyZVZhbGlkRWxlbWVudHMoKSB7XG4gIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgIGFyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gIH1cblxuICByZXR1cm4gIWFyZ3Muc29tZShmdW5jdGlvbiAoZWxlbWVudCkge1xuICAgIHJldHVybiAhKGVsZW1lbnQgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ID09PSAnZnVuY3Rpb24nKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwb3BwZXJHZW5lcmF0b3IoZ2VuZXJhdG9yT3B0aW9ucykge1xuICBpZiAoZ2VuZXJhdG9yT3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgZ2VuZXJhdG9yT3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9nZW5lcmF0b3JPcHRpb25zID0gZ2VuZXJhdG9yT3B0aW9ucyxcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRNb2RpZmllcnMsXG4gICAgICBkZWZhdWx0TW9kaWZpZXJzID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmID09PSB2b2lkIDAgPyBbXSA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZixcbiAgICAgIF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHRPcHRpb25zID0gX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9PT0gdm9pZCAwID8gREVGQVVMVF9PUFRJT05TIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmMjtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVBvcHBlcihyZWZlcmVuY2UsIHBvcHBlciwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0aW9ucztcbiAgICB9XG5cbiAgICB2YXIgc3RhdGUgPSB7XG4gICAgICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICAgICAgb3JkZXJlZE1vZGlmaWVyczogW10sXG4gICAgICBvcHRpb25zOiBPYmplY3QuYXNzaWduKHt9LCBERUZBVUxUX09QVElPTlMsIGRlZmF1bHRPcHRpb25zKSxcbiAgICAgIG1vZGlmaWVyc0RhdGE6IHt9LFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlOiByZWZlcmVuY2UsXG4gICAgICAgIHBvcHBlcjogcG9wcGVyXG4gICAgICB9LFxuICAgICAgYXR0cmlidXRlczoge30sXG4gICAgICBzdHlsZXM6IHt9XG4gICAgfTtcbiAgICB2YXIgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIHZhciBpc0Rlc3Ryb3llZCA9IGZhbHNlO1xuICAgIHZhciBpbnN0YW5jZSA9IHtcbiAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgIHNldE9wdGlvbnM6IGZ1bmN0aW9uIHNldE9wdGlvbnMoc2V0T3B0aW9uc0FjdGlvbikge1xuICAgICAgICB2YXIgb3B0aW9ucyA9IHR5cGVvZiBzZXRPcHRpb25zQWN0aW9uID09PSAnZnVuY3Rpb24nID8gc2V0T3B0aW9uc0FjdGlvbihzdGF0ZS5vcHRpb25zKSA6IHNldE9wdGlvbnNBY3Rpb247XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pOyAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbW9kaWZpZXJzIHNvIHRoYXQgdGhlIGNvbnN1bWVyIHdpbGwgZ2V0IHdhcm5lZFxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIG1vZGlmaWVycyBpcyBpbnZhbGlkIGZvciBhbnkgcmVhc29uXG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgIHZhciBtb2RpZmllcnMgPSB1bmlxdWVCeShbXS5jb25jYXQob3JkZXJlZE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICB2YXIgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYyLm5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAnZmxpcCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhdXRvXCIgcGxhY2VtZW50cyByZXF1aXJlIHRoZSBcImZsaXBcIiBtb2RpZmllciBiZScsICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJ10uam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlciksXG4gICAgICAgICAgICAgIG1hcmdpblRvcCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblRvcCxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCxcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdDsgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuXG5cbiAgICAgICAgICBpZiAoW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZShmdW5jdGlvbiAobWFyZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXJnaW4pO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJywgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsICdUbyByZXBsaWNhdGUgbWFyZ2luLCB1c2UgdGhlIGBvZmZzZXRgIG1vZGlmaWVyLCBhcyB3ZWxsIGFzJywgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJywgJ21vZGlmaWVycy4nXS5qb2luKCcgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUgXHUyMDEzIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fZGVidWdfbG9vcHNfXyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChfX2RlYnVnX2xvb3BzX18gPiAxMDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTkZJTklURV9MT09QX0VSUk9SKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmMyRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCAiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG5pbXBvcnQgb2Zmc2V0IGZyb20gXCIuL21vZGlmaWVycy9vZmZzZXQuanNcIjtcbmltcG9ydCBmbGlwIGZyb20gXCIuL21vZGlmaWVycy9mbGlwLmpzXCI7XG5pbXBvcnQgcHJldmVudE92ZXJmbG93IGZyb20gXCIuL21vZGlmaWVycy9wcmV2ZW50T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBhcnJvdyBmcm9tIFwiLi9tb2RpZmllcnMvYXJyb3cuanNcIjtcbmltcG9ydCBoaWRlIGZyb20gXCIuL21vZGlmaWVycy9oaWRlLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXMsIG9mZnNldCwgZmxpcCwgcHJldmVudE92ZXJmbG93LCBhcnJvdywgaGlkZV07XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsiLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL2luZGV4LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTUFYX1VJRCA9IDFfMDAwXzAwMFxuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwXG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJ1xuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWBcbiAgfVxuXG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgKCFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG5jb25zdCBnZXRTZWxlY3RvckZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICBpZiAoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbFxufVxuXG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgbGV0IHsgdHJhbnNpdGlvbkR1cmF0aW9uLCB0cmFuc2l0aW9uRGVsYXkgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG5cbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KVxuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXVxuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXVxuXG4gIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVJcbn1cblxuY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpXG59XG5cbmNvbnN0IGlzRWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIGlmICghb2JqZWN0IHx8IHR5cGVvZiBvYmplY3QgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdC5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqZWN0ID0gb2JqZWN0WzBdXG4gIH1cblxuICByZXR1cm4gdHlwZW9mIG9iamVjdC5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuY29uc3QgZ2V0RWxlbWVudCA9IG9iamVjdCA9PiB7XG4gIC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gIGlmIChpc0VsZW1lbnQob2JqZWN0KSkge1xuICAgIHJldHVybiBvYmplY3QuanF1ZXJ5ID8gb2JqZWN0WzBdIDogb2JqZWN0XG4gIH1cblxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycgJiYgb2JqZWN0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvYmplY3QpXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgZWxlbWVudElzVmlzaWJsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSdcbiAgLy8gSGFuZGxlIGBkZXRhaWxzYCBlbGVtZW50IGFzIGl0cyBjb250ZW50IG1heSBmYWxzaWUgYXBwZWFyIHZpc2libGUgd2hlbiBpdCBpcyBjbG9zZWRcbiAgY29uc3QgY2xvc2VkRGV0YWlscyA9IGVsZW1lbnQuY2xvc2VzdCgnZGV0YWlsczpub3QoW29wZW5dKScpXG5cbiAgaWYgKCFjbG9zZWREZXRhaWxzKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGVcbiAgfVxuXG4gIGlmIChjbG9zZWREZXRhaWxzICE9PSBlbGVtZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnQuY2xvc2VzdCgnc3VtbWFyeScpXG4gICAgaWYgKHN1bW1hcnkgJiYgc3VtbWFyeS5wYXJlbnROb2RlICE9PSBjbG9zZWREZXRhaWxzKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoc3VtbWFyeSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnRJc1Zpc2libGVcbn1cblxuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZFxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnXG59XG5cbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcbiAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKVxuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsXG4gIH1cblxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSlcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50Lm9mZnNldEhlaWdodCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xufVxuXG5jb25zdCBnZXRqUXVlcnkgPSAoKSA9PiB7XG4gIGlmICh3aW5kb3cualF1ZXJ5ICYmICFkb2N1bWVudC5ib2R5Lmhhc0F0dHJpYnV0ZSgnZGF0YS1icy1uby1qcXVlcnknKSkge1xuICAgIHJldHVybiB3aW5kb3cualF1ZXJ5XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW11cblxuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnXG5cbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRVxuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXVxuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2VcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW5cbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZXhlY3V0ZSA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNVxuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nXG5cbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG5cbiAgY29uc3QgaGFuZGxlciA9ICh7IHRhcmdldCB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNhbGxlZCA9IHRydWVcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpXG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBjb25zdCBsaXN0TGVuZ3RoID0gbGlzdC5sZW5ndGhcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpXG5cbiAgLy8gaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QgcmV0dXJuIGFuIGVsZW1lbnRcbiAgLy8gZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiAhc2hvdWxkR2V0TmV4dCAmJiBpc0N5Y2xlQWxsb3dlZCA/IGxpc3RbbGlzdExlbmd0aCAtIDFdIDogbGlzdFswXVxuICB9XG5cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMVxuXG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV1cbn1cblxuZXhwb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBleGVjdXRlLFxuICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgZ2V0alF1ZXJ5LFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQsXG4gIGdldFVJRCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBub29wLFxuICBvbkRPTUNvbnRlbnRMb2FkZWQsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmQsXG4gIHRvVHlwZVxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBnZXRqUXVlcnkgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qL1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovXG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvXG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge30gLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDFcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn1cblxuY29uc3QgbmF0aXZlRXZlbnRzID0gbmV3IFNldChbXG4gICdjbGljaycsXG4gICdkYmxjbGljaycsXG4gICdtb3VzZXVwJyxcbiAgJ21vdXNlZG93bicsXG4gICdjb250ZXh0bWVudScsXG4gICdtb3VzZXdoZWVsJyxcbiAgJ0RPTU1vdXNlU2Nyb2xsJyxcbiAgJ21vdXNlb3ZlcicsXG4gICdtb3VzZW91dCcsXG4gICdtb3VzZW1vdmUnLFxuICAnc2VsZWN0c3RhcnQnLFxuICAnc2VsZWN0ZW5kJyxcbiAgJ2tleWRvd24nLFxuICAna2V5cHJlc3MnLFxuICAna2V5dXAnLFxuICAnb3JpZW50YXRpb25jaGFuZ2UnLFxuICAndG91Y2hzdGFydCcsXG4gICd0b3VjaG1vdmUnLFxuICAndG91Y2hlbmQnLFxuICAndG91Y2hjYW5jZWwnLFxuICAncG9pbnRlcmRvd24nLFxuICAncG9pbnRlcm1vdmUnLFxuICAncG9pbnRlcnVwJyxcbiAgJ3BvaW50ZXJsZWF2ZScsXG4gICdwb2ludGVyY2FuY2VsJyxcbiAgJ2dlc3R1cmVzdGFydCcsXG4gICdnZXN0dXJlY2hhbmdlJyxcbiAgJ2dlc3R1cmVlbmQnLFxuICAnZm9jdXMnLFxuICAnYmx1cicsXG4gICdjaGFuZ2UnLFxuICAncmVzZXQnLFxuICAnc2VsZWN0JyxcbiAgJ3N1Ym1pdCcsXG4gICdmb2N1c2luJyxcbiAgJ2ZvY3Vzb3V0JyxcbiAgJ2xvYWQnLFxuICAndW5sb2FkJyxcbiAgJ2JlZm9yZXVubG9hZCcsXG4gICdyZXNpemUnLFxuICAnbW92ZScsXG4gICdET01Db250ZW50TG9hZGVkJyxcbiAgJ3JlYWR5c3RhdGVjaGFuZ2UnLFxuICAnZXJyb3InLFxuICAnYWJvcnQnLFxuICAnc2Nyb2xsJ1xuXSlcblxuLyoqXG4gKiBQcml2YXRlIG1ldGhvZHNcbiAqL1xuXG5mdW5jdGlvbiBtYWtlRXZlbnRVaWQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiAodWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gKSB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kytcbn1cblxuZnVuY3Rpb24gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChlbGVtZW50KVxuXG4gIGVsZW1lbnQudWlkRXZlbnQgPSB1aWRcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9XG5cbiAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgaHlkcmF0ZU9iaihldmVudCwgeyBkZWxlZ2F0ZVRhcmdldDogZWxlbWVudCB9KVxuXG4gICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsIGV2ZW50LnR5cGUsIGZuKVxuICAgIH1cblxuICAgIHJldHVybiBmbi5hcHBseShlbGVtZW50LCBbZXZlbnRdKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIHNlbGVjdG9yLCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IGRvbUVsZW1lbnRzID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKVxuXG4gICAgZm9yIChsZXQgeyB0YXJnZXQgfSA9IGV2ZW50OyB0YXJnZXQgJiYgdGFyZ2V0ICE9PSB0aGlzOyB0YXJnZXQgPSB0YXJnZXQucGFyZW50Tm9kZSkge1xuICAgICAgZm9yIChjb25zdCBkb21FbGVtZW50IG9mIGRvbUVsZW1lbnRzKSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaHlkcmF0ZU9iaihldmVudCwgeyBkZWxlZ2F0ZVRhcmdldDogdGFyZ2V0IH0pXG5cbiAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZm4uYXBwbHkodGFyZ2V0LCBbZXZlbnRdKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGNhbGxhYmxlLCBkZWxlZ2F0aW9uU2VsZWN0b3IgPSBudWxsKSB7XG4gIHJldHVybiBPYmplY3QudmFsdWVzKGV2ZW50cylcbiAgICAuZmluZChldmVudCA9PiBldmVudC5jYWxsYWJsZSA9PT0gY2FsbGFibGUgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICBjb25zdCBpc0RlbGVnYXRlZCA9IHR5cGVvZiBoYW5kbGVyID09PSAnc3RyaW5nJ1xuICAvLyB0b2RvOiB0b29sdGlwIHBhc3NlcyBgZmFsc2VgIGluc3RlYWQgb2Ygc2VsZWN0b3IsIHNvIHdlIG5lZWQgdG8gY2hlY2tcbiAgY29uc3QgY2FsbGFibGUgPSBpc0RlbGVnYXRlZCA/IGRlbGVnYXRpb25GdW5jdGlvbiA6IChoYW5kbGVyIHx8IGRlbGVnYXRpb25GdW5jdGlvbilcbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudClcblxuICBpZiAoIW5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KSkge1xuICAgIHR5cGVFdmVudCA9IG9yaWdpbmFsVHlwZUV2ZW50XG4gIH1cblxuICByZXR1cm4gW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XVxufVxuXG5mdW5jdGlvbiBhZGRIYW5kbGVyKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIG9uZU9mZikge1xuICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKG9yaWdpbmFsVHlwZUV2ZW50IGluIGN1c3RvbUV2ZW50cykge1xuICAgIGNvbnN0IHdyYXBGdW5jdGlvbiA9IGZuID0+IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgaWYgKCFldmVudC5yZWxhdGVkVGFyZ2V0IHx8IChldmVudC5yZWxhdGVkVGFyZ2V0ICE9PSBldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiAhZXZlbnQuZGVsZWdhdGVUYXJnZXQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldCkpKSB7XG4gICAgICAgICAgcmV0dXJuIGZuLmNhbGwodGhpcywgZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxsYWJsZSA9IHdyYXBGdW5jdGlvbihjYWxsYWJsZSlcbiAgfVxuXG4gIGNvbnN0IGV2ZW50cyA9IGdldEVsZW1lbnRFdmVudHMoZWxlbWVudClcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSlcbiAgY29uc3QgcHJldmlvdXNGdW5jdGlvbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbClcblxuICBpZiAocHJldmlvdXNGdW5jdGlvbikge1xuICAgIHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmID0gcHJldmlvdXNGdW5jdGlvbi5vbmVPZmYgJiYgb25lT2ZmXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHVpZCA9IG1ha2VFdmVudFVpZChjYWxsYWJsZSwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKVxuICBjb25zdCBmbiA9IGlzRGVsZWdhdGVkID9cbiAgICBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBjYWxsYWJsZSkgOlxuICAgIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgY2FsbGFibGUpXG5cbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbFxuICBmbi5jYWxsYWJsZSA9IGNhbGxhYmxlXG4gIGZuLm9uZU9mZiA9IG9uZU9mZlxuICBmbi51aWRFdmVudCA9IHVpZFxuICBoYW5kbGVyc1t1aWRdID0gZm5cblxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgaXNEZWxlZ2F0ZWQpXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpXG5cbiAgaWYgKCFmbikge1xuICAgIHJldHVyblxuICB9XG5cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSlcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XVxufVxuXG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9XG5cbiAgZm9yIChjb25zdCBoYW5kbGVyS2V5IG9mIE9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KSkge1xuICAgIGlmIChoYW5kbGVyS2V5LmluY2x1ZGVzKG5hbWVzcGFjZSkpIHtcbiAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRbaGFuZGxlcktleV1cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpXG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50XG59XG5cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbiwgZmFsc2UpXG4gIH0sXG5cbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIHRydWUpXG4gIH0sXG5cbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgW2lzRGVsZWdhdGVkLCBjYWxsYWJsZSwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtZXRlcnMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GdW5jdGlvbilcbiAgICBjb25zdCBpbk5hbWVzcGFjZSA9IHR5cGVFdmVudCAhPT0gb3JpZ2luYWxUeXBlRXZlbnRcbiAgICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpXG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuICAgIGNvbnN0IGlzTmFtZXNwYWNlID0gb3JpZ2luYWxUeXBlRXZlbnQuc3RhcnRzV2l0aCgnLicpXG5cbiAgICBpZiAodHlwZW9mIGNhbGxhYmxlICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIU9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGNhbGxhYmxlLCBpc0RlbGVnYXRlZCA/IGhhbmRsZXIgOiBudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnRFdmVudCBvZiBPYmplY3Qua2V5cyhldmVudHMpKSB7XG4gICAgICAgIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIGVsZW1lbnRFdmVudCwgb3JpZ2luYWxUeXBlRXZlbnQuc2xpY2UoMSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBrZXlIYW5kbGVycyBvZiBPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKVxuXG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRba2V5SGFuZGxlcnNdXG4gICAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50LmNhbGxhYmxlLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50XG5cbiAgICBsZXQgalF1ZXJ5RXZlbnQgPSBudWxsXG4gICAgbGV0IGJ1YmJsZXMgPSB0cnVlXG4gICAgbGV0IG5hdGl2ZURpc3BhdGNoID0gdHJ1ZVxuICAgIGxldCBkZWZhdWx0UHJldmVudGVkID0gZmFsc2VcblxuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpXG5cbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudClcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpXG4gICAgfVxuXG4gICAgbGV0IGV2dCA9IG5ldyBFdmVudChldmVudCwgeyBidWJibGVzLCBjYW5jZWxhYmxlOiB0cnVlIH0pXG4gICAgZXZ0ID0gaHlkcmF0ZU9iaihldnQsIGFyZ3MpXG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhKSB7XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1ldGEgfHwge30pKSB7XG4gICAgdHJ5IHtcbiAgICAgIG9ialtrZXldID0gdmFsdWVcbiAgICB9IGNhdGNoIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIGtleSwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqXG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50SGFuZGxlclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKClcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZW1lbnQsIG5ldyBNYXAoKSlcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICAvLyBtYWtlIGl0IGNsZWFyIHdlIG9ubHkgd2FudCBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnRcbiAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKVxuICB9LFxuXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICByZW1vdmUoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KVxuXG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSlcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KVxuICAgIH1cbiAgfVxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAodmFsdWUgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gTnVtYmVyKHZhbHVlKS50b1N0cmluZygpKSB7XG4gICAgcmV0dXJuIE51bWJlcih2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gJycgfHwgdmFsdWUgPT09ICdudWxsJykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YClcbn1cblxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKVxuICB9LFxuXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YClcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge31cbiAgICBjb25zdCBic0tleXMgPSBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpLmZpbHRlcihrZXkgPT4ga2V5LnN0YXJ0c1dpdGgoJ2JzJykgJiYgIWtleS5zdGFydHNXaXRoKCdic0NvbmZpZycpKVxuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgYnNLZXlzKSB7XG4gICAgICBsZXQgcHVyZUtleSA9IGtleS5yZXBsYWNlKC9eYnMvLCAnJylcbiAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aClcbiAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKVxuICAgIH1cblxuICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRvclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBpc0VsZW1lbnQsIHRvVHlwZSB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge30gLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gIH1cblxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eSBvZiBPYmplY3Qua2V5cyhjb25maWdUeXBlcykpIHtcbiAgICAgIGNvbnN0IGV4cGVjdGVkVHlwZXMgPSBjb25maWdUeXBlc1twcm9wZXJ0eV1cbiAgICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XVxuICAgICAgY29uc3QgdmFsdWVUeXBlID0gaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcblxuICAgICAgaWYgKCFuZXcgUmVnRXhwKGV4cGVjdGVkVHlwZXMpLnRlc3QodmFsdWVUeXBlKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAke3RoaXMuY29uc3RydWN0b3IuTkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwiJHtwcm9wZXJ0eX1cIiBwcm92aWRlZCB0eXBlIFwiJHt2YWx1ZVR5cGV9XCIgYnV0IGV4cGVjdGVkIHR5cGUgXCIke2V4cGVjdGVkVHlwZXN9XCIuYFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbmZpZ1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IHsgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiwgZ2V0RWxlbWVudCB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBDb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBWRVJTSU9OID0gJzUuMi4zJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBCYXNlQ29tcG9uZW50IGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudClcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcblxuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpXG5cbiAgICBmb3IgKGNvbnN0IHByb3BlcnR5TmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSkge1xuICAgICAgdGhpc1twcm9wZXJ0eU5hbWVdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHRoaXMuX21lcmdlQ29uZmlnT2JqKGNvbmZpZywgdGhpcy5fZWxlbWVudClcbiAgICBjb25maWcgPSB0aGlzLl9jb25maWdBZnRlck1lcmdlKGNvbmZpZylcbiAgICB0aGlzLl90eXBlQ2hlY2tDb25maWcoY29uZmlnKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKVxuICB9XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpXG4gIH1cblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAgfVxuXG4gIHN0YXRpYyBnZXQgREFUQV9LRVkoKSB7XG4gICAgcmV0dXJuIGBicy4ke3RoaXMuTkFNRX1gXG4gIH1cblxuICBzdGF0aWMgZ2V0IEVWRU5UX0tFWSgpIHtcbiAgICByZXR1cm4gYC4ke3RoaXMuREFUQV9LRVl9YFxuICB9XG5cbiAgc3RhdGljIGV2ZW50TmFtZShuYW1lKSB7XG4gICAgcmV0dXJuIGAke25hbWV9JHt0aGlzLkVWRU5UX0tFWX1gXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUNvbXBvbmVudFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCB7IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsIGlzRGlzYWJsZWQgfSBmcm9tICcuL2luZGV4J1xuXG5jb25zdCBlbmFibGVEaXNtaXNzVHJpZ2dlciA9IChjb21wb25lbnQsIG1ldGhvZCA9ICdoaWRlJykgPT4ge1xuICBjb25zdCBjbGlja0V2ZW50ID0gYGNsaWNrLmRpc21pc3Mke2NvbXBvbmVudC5FVkVOVF9LRVl9YFxuICBjb25zdCBuYW1lID0gY29tcG9uZW50Lk5BTUVcblxuICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIGNsaWNrRXZlbnQsIGBbZGF0YS1icy1kaXNtaXNzPVwiJHtuYW1lfVwiXWAsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKSB8fCB0aGlzLmNsb3Nlc3QoYC4ke25hbWV9YClcbiAgICBjb25zdCBpbnN0YW5jZSA9IGNvbXBvbmVudC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICAgIC8vIE1ldGhvZCBhcmd1bWVudCBpcyBsZWZ0LCBmb3IgQWxlcnQgYW5kIG9ubHksIGFzIGl0IGRvZXNuJ3QgaW1wbGVtZW50IHRoZSAnaGlkZScgbWV0aG9kXG4gICAgaW5zdGFuY2VbbWV0aG9kXSgpXG4gIH0pXG59XG5cbmV4cG9ydCB7XG4gIGVuYWJsZURpc21pc3NUcmlnZ2VyXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdidXR0b24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5idXR0b24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJ1xuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcylcblxuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pXG5cbiAgZGF0YS50b2dnbGUoKVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25cbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGRvbS9zZWxlY3Rvci1lbmdpbmUuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBpc0Rpc2FibGVkLCBpc1Zpc2libGUgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNlbGVjdG9yRW5naW5lID0ge1xuICBmaW5kKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5FbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yQWxsLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpKVxuICB9LFxuXG4gIGZpbmRPbmUoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3Rvci5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKVxuICB9LFxuXG4gIGNoaWxkcmVuKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIFtdLmNvbmNhdCguLi5lbGVtZW50LmNoaWxkcmVuKS5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpXG4gIH0sXG5cbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKVxuXG4gICAgd2hpbGUgKGFuY2VzdG9yKSB7XG4gICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpXG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGUuY2xvc2VzdChzZWxlY3RvcilcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50c1xuICB9LFxuXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmdcblxuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdXG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZ1xuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9LFxuICAvLyBUT0RPOiB0aGlzIGlzIG5vdyB1bnVzZWQ7IHJlbW92ZSBsYXRlciBhbG9uZyB3aXRoIHByZXYoKVxuICBuZXh0KGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgbGV0IG5leHQgPSBlbGVtZW50Lm5leHRFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKG5leHQpIHtcbiAgICAgIGlmIChuZXh0Lm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbbmV4dF1cbiAgICAgIH1cblxuICAgICAgbmV4dCA9IG5leHQubmV4dEVsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgZm9jdXNhYmxlQ2hpbGRyZW4oZWxlbWVudCkge1xuICAgIGNvbnN0IGZvY3VzYWJsZXMgPSBbXG4gICAgICAnYScsXG4gICAgICAnYnV0dG9uJyxcbiAgICAgICdpbnB1dCcsXG4gICAgICAndGV4dGFyZWEnLFxuICAgICAgJ3NlbGVjdCcsXG4gICAgICAnZGV0YWlscycsXG4gICAgICAnW3RhYmluZGV4XScsXG4gICAgICAnW2NvbnRlbnRlZGl0YWJsZT1cInRydWVcIl0nXG4gICAgXS5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9Om5vdChbdGFiaW5kZXhePVwiLVwiXSlgKS5qb2luKCcsJylcblxuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yRW5naW5lXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlIH0gZnJvbSAnLi9pbmRleCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3N3aXBlJ1xuY29uc3QgRVZFTlRfS0VZID0gJy5icy5zd2lwZSdcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fZGVsdGFYID0gMFxuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuICAgIHRoaXMuX2luaXRFdmVudHMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYXG4gICAgfVxuICB9XG5cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWFxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjaylcbiAgfVxuXG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgMCA6XG4gICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVhcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYXG5cbiAgICB0aGlzLl9kZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKVxuICB9XG5cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IFN3aXBlIGZyb20gJy4vdXRpbC9zd2lwZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjYXJvdXNlbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNhcm91c2VsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCdcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0J1xuY29uc3QgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCA9IDUwMCAvLyBUaW1lIGZvciBtb3VzZSBjb21wYXQgZXZlbnRzIHRvIGZpcmUgYWZ0ZXIgdG91Y2hcblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0J1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2J1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCdcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCdcblxuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSdcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCdcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9JVEVNID0gU0VMRUNUT1JfQUNUSVZFICsgU0VMRUNUT1JfSVRFTVxuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJ1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycydcbmNvbnN0IFNFTEVDVE9SX0RBVEFfU0xJREUgPSAnW2RhdGEtYnMtc2xpZGVdLCBbZGF0YS1icy1zbGlkZS10b10nXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1JJREUgPSAnW2RhdGEtYnMtcmlkZT1cImNhcm91c2VsXCJdJ1xuXG5jb25zdCBLRVlfVE9fRElSRUNUSU9OID0ge1xuICBbQVJST1dfTEVGVF9LRVldOiBESVJFQ1RJT05fUklHSFQsXG4gIFtBUlJPV19SSUdIVF9LRVldOiBESVJFQ1RJT05fTEVGVFxufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHBhdXNlOiAnaG92ZXInLFxuICByaWRlOiBmYWxzZSxcbiAgdG91Y2g6IHRydWUsXG4gIHdyYXA6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGludGVydmFsOiAnKG51bWJlcnxib29sZWFuKScsIC8vIFRPRE86djYgcmVtb3ZlIGJvb2xlYW4gc3VwcG9ydFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICByaWRlOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIHRvdWNoOiAnYm9vbGVhbicsXG4gIHdyYXA6ICdib29sZWFuJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDYXJvdXNlbCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBudWxsXG5cbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJpZGUgPT09IENMQVNTX05BTUVfQ0FST1VTRUwpIHtcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9ORVhUKVxuICB9XG5cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIEZJWE1FIFRPRE8gdXNlIGBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGVgXG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKVxuICB9XG5cbiAgcGF1c2UoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhckludGVydmFsKClcbiAgfVxuXG4gIGN5Y2xlKCkge1xuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKVxuICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKClcblxuICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gdGhpcy5uZXh0V2hlblZpc2libGUoKSwgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICB9XG5cbiAgX21heWJlRW5hYmxlQ3ljbGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucmlkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLmN5Y2xlKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmN5Y2xlKClcbiAgfVxuXG4gIHRvKGluZGV4KSB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9nZXRJdGVtcygpXG4gICAgaWYgKGluZGV4ID4gaXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9nZXRBY3RpdmUoKSlcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVlxuXG4gICAgdGhpcy5fc2xpZGUob3JkZXIsIGl0ZW1zW2luZGV4XSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N3aXBlSGVscGVyKSB7XG4gICAgICB0aGlzLl9zd2lwZUhlbHBlci5kaXNwb3NlKClcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmRlZmF1bHRJbnRlcnZhbCA9IGNvbmZpZy5pbnRlcnZhbFxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRU5URVIsICgpID0+IHRoaXMucGF1c2UoKSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRUxFQVZFLCAoKSA9PiB0aGlzLl9tYXliZUVuYWJsZUN5Y2xlKCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiBTd2lwZS5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICB0aGlzLl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKClcbiAgICB9XG4gIH1cblxuICBfYWRkVG91Y2hFdmVudExpc3RlbmVycygpIHtcbiAgICBmb3IgKGNvbnN0IGltZyBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU1fSU1HLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKGltZywgRVZFTlRfRFJBR19TVEFSVCwgZXZlbnQgPT4gZXZlbnQucHJldmVudERlZmF1bHQoKSlcbiAgICB9XG5cbiAgICBjb25zdCBlbmRDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcucGF1c2UgIT09ICdob3ZlcicpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIElmIGl0J3MgYSB0b3VjaC1lbmFibGVkIGRldmljZSwgbW91c2VlbnRlci9sZWF2ZSBhcmUgZmlyZWQgYXNcbiAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgLy8gd291bGQgc3RvcCBjeWNsaW5nIHVudGlsIHVzZXIgdGFwcGVkIG91dCBvZiBpdDtcbiAgICAgIC8vIGhlcmUsIHdlIGxpc3RlbiBmb3IgdG91Y2hlbmQsIGV4cGxpY2l0bHkgcGF1c2UgdGhlIGNhcm91c2VsXG4gICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgLy8gaXMgTk9UIGZpcmVkKSBhbmQgYWZ0ZXIgYSB0aW1lb3V0ICh0byBhbGxvdyBmb3IgbW91c2UgY29tcGF0aWJpbGl0eVxuICAgICAgLy8gZXZlbnRzIHRvIGZpcmUpIHdlIGV4cGxpY2l0bHkgcmVzdGFydCBjeWNsaW5nXG5cbiAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgaWYgKHRoaXMudG91Y2hUaW1lb3V0KSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRvdWNoVGltZW91dClcbiAgICAgIH1cblxuICAgICAgdGhpcy50b3VjaFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSwgVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCArIHRoaXMuX2NvbmZpZy5pbnRlcnZhbClcbiAgICB9XG5cbiAgICBjb25zdCBzd2lwZUNvbmZpZyA9IHtcbiAgICAgIGxlZnRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fTEVGVCkpLFxuICAgICAgcmlnaHRDYWxsYmFjazogKCkgPT4gdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihESVJFQ1RJT05fUklHSFQpKSxcbiAgICAgIGVuZENhbGxiYWNrOiBlbmRDYWxsQmFja1xuICAgIH1cblxuICAgIHRoaXMuX3N3aXBlSGVscGVyID0gbmV3IFN3aXBlKHRoaXMuX2VsZW1lbnQsIHN3aXBlQ29uZmlnKVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XVxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMuX3NsaWRlKHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSlcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gdGhpcy5fZ2V0SXRlbXMoKS5pbmRleE9mKGVsZW1lbnQpXG4gIH1cblxuICBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChpbmRleCkge1xuICAgIGlmICghdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpXG5cbiAgICBjb25zdCBuZXdBY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKGBbZGF0YS1icy1zbGlkZS10bz1cIiR7aW5kZXh9XCJdYCwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpXG5cbiAgICBpZiAobmV3QWN0aXZlSW5kaWNhdG9yKSB7XG4gICAgICBuZXdBY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJylcbiAgICB9XG4gIH1cblxuICBfdXBkYXRlSW50ZXJ2YWwoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IHRoaXMuX2FjdGl2ZUVsZW1lbnQgfHwgdGhpcy5fZ2V0QWN0aXZlKClcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudEludGVydmFsID0gTnVtYmVyLnBhcnNlSW50KGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLWludGVydmFsJyksIDEwKVxuXG4gICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWxcbiAgfVxuXG4gIF9zbGlkZShvcmRlciwgZWxlbWVudCA9IG51bGwpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gdGhpcy5fZ2V0QWN0aXZlKClcbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVFxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZWxlbWVudCB8fCBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRJdGVtcygpLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKVxuXG4gICAgaWYgKG5leHRFbGVtZW50ID09PSBhY3RpdmVFbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KVxuXG4gICAgY29uc3QgdHJpZ2dlckV2ZW50ID0gZXZlbnROYW1lID0+IHtcbiAgICAgIHJldHVybiBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBldmVudE5hbWUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlciksXG4gICAgICAgIGZyb206IHRoaXMuX2dldEl0ZW1JbmRleChhY3RpdmVFbGVtZW50KSxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRyaWdnZXJFdmVudChFVkVOVF9TTElERSlcblxuICAgIGlmIChzbGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghYWN0aXZlRWxlbWVudCB8fCAhbmV4dEVsZW1lbnQpIHtcbiAgICAgIC8vIFNvbWUgd2VpcmRuZXNzIGlzIGhhcHBlbmluZywgc28gd2UgYmFpbFxuICAgICAgLy8gdG9kbzogY2hhbmdlIHRlc3RzIHRoYXQgdXNlIGVtcHR5IGRpdnMgdG8gYXZvaWQgdGhpcyBjaGVja1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNDeWNsaW5nID0gQm9vbGVhbih0aGlzLl9pbnRlcnZhbClcbiAgICB0aGlzLnBhdXNlKClcblxuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWVcblxuICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnRJbmRleClcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbmV4dEVsZW1lbnRcblxuICAgIGNvbnN0IGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9TVEFSVCA6IENMQVNTX05BTUVfRU5EXG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVZcblxuICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQob3JkZXJDbGFzc05hbWUpXG5cbiAgICByZWZsb3cobmV4dEVsZW1lbnQpXG5cbiAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpXG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcblxuICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSlcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuXG4gICAgICB0cmlnZ2VyRXZlbnQoRVZFTlRfU0xJRClcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIGFjdGl2ZUVsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSlcblxuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKVxuICB9XG5cbiAgX2dldEFjdGl2ZSgpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudClcbiAgfVxuXG4gIF9nZXRJdGVtcygpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICB9XG5cbiAgX2NsZWFySW50ZXJ2YWwoKSB7XG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG4gIH1cblxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVFxuICAgIH1cblxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRhdGEudG8oY29uZmlnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9TTElERSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoIXRhcmdldCB8fCAhdGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0NBUk9VU0VMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gIGNvbnN0IGNhcm91c2VsID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGNvbnN0IHNsaWRlSW5kZXggPSB0aGlzLmdldEF0dHJpYnV0ZSgnZGF0YS1icy1zbGlkZS10bycpXG5cbiAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICBjYXJvdXNlbC50byhzbGlkZUluZGV4KVxuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKHRoaXMsICdzbGlkZScpID09PSAnbmV4dCcpIHtcbiAgICBjYXJvdXNlbC5uZXh0KClcbiAgICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpXG4gICAgcmV0dXJuXG4gIH1cblxuICBjYXJvdXNlbC5wcmV2KClcbiAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBjb25zdCBjYXJvdXNlbHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfUklERSlcblxuICBmb3IgKGNvbnN0IGNhcm91c2VsIG9mIGNhcm91c2Vscykge1xuICAgIENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoY2Fyb3VzZWwpXG4gIH1cbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKVxuXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2NvbGxhcHNlJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY29sbGFwc2UnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSdcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRUQgPSAnY29sbGFwc2VkJ1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YFxuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnXG5cbmNvbnN0IFdJRFRIID0gJ3dpZHRoJ1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCdcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgcGFyZW50OiBudWxsLFxuICB0b2dnbGU6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIHBhcmVudDogJyhudWxsfGVsZW1lbnQpJyxcbiAgdG9nZ2xlOiAnYm9vbGVhbidcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQ29sbGFwc2UgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl90cmlnZ2VyQXJyYXkgPSBbXVxuXG4gICAgY29uc3QgdG9nZ2xlTGlzdCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG5cbiAgICBmb3IgKGNvbnN0IGVsZW0gb2YgdG9nZ2xlTGlzdCkge1xuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pXG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcilcbiAgICAgICAgLmZpbHRlcihmb3VuZEVsZW1lbnQgPT4gZm91bmRFbGVtZW50ID09PSB0aGlzLl9lbGVtZW50KVxuXG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fdHJpZ2dlckFycmF5LnB1c2goZWxlbSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pbml0aWFsaXplQ2hpbGRyZW4oKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0aGlzLl9pc1Nob3duKCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b2dnbGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlKClcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLmhpZGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCB0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBhY3RpdmVDaGlsZHJlbiA9IFtdXG5cbiAgICAvLyBmaW5kIGFjdGl2ZSBjaGlsZHJlblxuICAgIGlmICh0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICBhY3RpdmVDaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9BQ1RJVkVTKVxuICAgICAgICAuZmlsdGVyKGVsZW1lbnQgPT4gZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudClcbiAgICAgICAgLm1hcChlbGVtZW50ID0+IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgeyB0b2dnbGU6IGZhbHNlIH0pKVxuICAgIH1cblxuICAgIGlmIChhY3RpdmVDaGlsZHJlbi5sZW5ndGggJiYgYWN0aXZlQ2hpbGRyZW5bMF0uX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnRFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG4gICAgaWYgKHN0YXJ0RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhY3RpdmVJbnN0YW5jZSBvZiBhY3RpdmVDaGlsZHJlbikge1xuICAgICAgYWN0aXZlSW5zdGFuY2UuaGlkZSgpXG4gICAgfVxuXG4gICAgY29uc3QgZGltZW5zaW9uID0gdGhpcy5fZ2V0RGltZW5zaW9uKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAwXG5cbiAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModGhpcy5fdHJpZ2dlckFycmF5LCB0cnVlKVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcblxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnXG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKVxuICAgIH1cblxuICAgIGNvbnN0IGNhcGl0YWxpemVkRGltZW5zaW9uID0gZGltZW5zaW9uWzBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoMSlcbiAgICBjb25zdCBzY3JvbGxTaXplID0gYHNjcm9sbCR7Y2FwaXRhbGl6ZWREaW1lbnNpb259YFxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50W3Njcm9sbFNpemVdfXB4YFxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSBgJHt0aGlzLl9lbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW2RpbWVuc2lvbl19cHhgXG5cbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0UsIENMQVNTX05BTUVfU0hPVylcblxuICAgIGZvciAoY29uc3QgdHJpZ2dlciBvZiB0aGlzLl90cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRyaWdnZXIpXG5cbiAgICAgIGlmIChlbGVtZW50ICYmICF0aGlzLl9pc1Nob3duKGVsZW1lbnQpKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbdHJpZ2dlcl0sIGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLnRvZ2dsZSA9IEJvb2xlYW4oY29uZmlnLnRvZ2dsZSkgLy8gQ29lcmNlIHN0cmluZyB2YWx1ZXNcbiAgICBjb25maWcucGFyZW50ID0gZ2V0RWxlbWVudChjb25maWcucGFyZW50KVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXREaW1lbnNpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfSE9SSVpPTlRBTCkgPyBXSURUSCA6IEhFSUdIVFxuICB9XG5cbiAgX2luaXRpYWxpemVDaGlsZHJlbigpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkcmVuID0gdGhpcy5fZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGNoaWxkcmVuKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZWxlbWVudF0sIHRoaXMuX2lzU2hvd24oc2VsZWN0ZWQpKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9nZXRGaXJzdExldmVsQ2hpbGRyZW4oc2VsZWN0b3IpIHtcbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpXG4gICAgLy8gcmVtb3ZlIGNoaWxkcmVuIGlmIGdyZWF0ZXIgZGVwdGhcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW1lbnQgPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW1lbnQpKVxuICB9XG5cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRyaWdnZXJBcnJheSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQ09MTEFQU0VELCAhaXNPcGVuKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgY29uc3QgX2NvbmZpZyA9IHt9XG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgX2NvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IChldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiBldmVudC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lID09PSAnQScpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpXG4gIGNvbnN0IHNlbGVjdG9yRWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZWxlY3RvckVsZW1lbnRzKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgbm9vcFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVBfQ0VOVEVSID0gJ2Ryb3B1cC1jZW50ZXInXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiA9ICdkcm9wZG93bi1jZW50ZXInXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cImRyb3Bkb3duXCJdOm5vdCguZGlzYWJsZWQpOm5vdCg6ZGlzYWJsZWQpJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04gPSBgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX0uJHtDTEFTU19OQU1FX1NIT1d9YFxuY29uc3QgU0VMRUNUT1JfTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IFNFTEVDVE9SX05BVkJBUiA9ICcubmF2YmFyJ1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfVE9QQ0VOVEVSID0gJ3RvcCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01DRU5URVIgPSAnYm90dG9tJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvQ2xvc2U6IHRydWUsXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBvZmZzZXQ6IFswLCAyXSxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICByZWZlcmVuY2U6ICd0b2dnbGUnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvQ2xvc2U6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgZGlzcGxheTogJ3N0cmluZycsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIHJlZmVyZW5jZTogJyhzdHJpbmd8ZWxlbWVudHxvYmplY3QpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fcGFyZW50ID0gdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlIC8vIGRyb3Bkb3duIHdyYXBwZXJcbiAgICAvLyB0b2RvOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjIvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgdGhpcy5fbWVudSA9IFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF0gfHxcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTUVOVSwgdGhpcy5fcGFyZW50KVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duKCkgPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdygpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jcmVhdGVQb3BwZXIoKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmICF0aGlzLl9wYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCB0cnVlKVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSwgcmVsYXRlZFRhcmdldClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHN1cGVyLl9nZXRDb25maWcoY29uZmlnKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0JyAmJiAhaXNFbGVtZW50KGNvbmZpZy5yZWZlcmVuY2UpICYmXG4gICAgICB0eXBlb2YgY29uZmlnLnJlZmVyZW5jZS5nZXRCb3VuZGluZ0NsaWVudFJlY3QgIT09ICdmdW5jdGlvbidcbiAgICApIHtcbiAgICAgIC8vIFBvcHBlciB2aXJ0dWFsIGVsZW1lbnRzIHJlcXVpcmUgYSBnZXRCb3VuZGluZ0NsaWVudFJlY3QgbWV0aG9kXG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAke05BTUUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcInJlZmVyZW5jZVwiIHByb3ZpZGVkIHR5cGUgXCJvYmplY3RcIiB3aXRob3V0IGEgcmVxdWlyZWQgXCJnZXRCb3VuZGluZ0NsaWVudFJlY3RcIiBtZXRob2QuYClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKCkge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyBkcm9wZG93bnMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIGxldCByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fZWxlbWVudFxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdwYXJlbnQnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fcGFyZW50XG4gICAgfSBlbHNlIGlmIChpc0VsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSkpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBnZXRFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9jb25maWcucmVmZXJlbmNlXG4gICAgfVxuXG4gICAgY29uc3QgcG9wcGVyQ29uZmlnID0gdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKClcbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZylcbiAgfVxuXG4gIF9pc1Nob3duKCkge1xuICAgIHJldHVybiB0aGlzLl9tZW51LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0UGxhY2VtZW50KCkge1xuICAgIGNvbnN0IHBhcmVudERyb3Bkb3duID0gdGhpcy5fcGFyZW50XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUEVORCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfUklHSFRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFNUQVJUKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9MRUZUXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUF9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1RPUENFTlRFUlxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0JPVFRPTUNFTlRFUlxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJ1xuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT01cbiAgfVxuXG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVIpICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VJbnQodmFsdWUsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZygpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IHRoaXMuX2dldFBsYWNlbWVudCgpLFxuICAgICAgbW9kaWZpZXJzOiBbe1xuICAgICAgICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgIH1cbiAgICAgIH1dXG4gICAgfVxuXG4gICAgLy8gRGlzYWJsZSBQb3BwZXIgaWYgd2UgaGF2ZSBhIHN0YXRpYyBkaXNwbGF5IG9yIERyb3Bkb3duIGlzIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhciB8fCB0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKSAvLyB0b2RvOnY2IHJlbW92ZVxuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi4odHlwZW9mIHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcgPT09ICdmdW5jdGlvbicgPyB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKGRlZmF1bHRCc1BvcHBlckNvbmZpZykgOiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnKVxuICAgIH1cbiAgfVxuXG4gIF9zZWxlY3RNZW51SXRlbSh7IGtleSwgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKVxuXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTilcblxuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKVxuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSlcbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8XG4gICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0KSB8fFxuICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldClcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmICgoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkpIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudCB9XG5cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKVxuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVlcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KVxuXG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyB0b2RvOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjIvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSA/XG4gICAgICB0aGlzIDpcbiAgICAgIChTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKSlcblxuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pXG5cbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaW5zdGFuY2Uuc2hvdygpXG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkgeyAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpbnN0YW5jZS5oaWRlKClcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCdcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJ1xuY29uc3QgUFJPUEVSVFlfUEFERElORyA9ICdwYWRkaW5nLXJpZ2h0J1xuY29uc3QgUFJPUEVSVFlfTUFSR0lOID0gJ21hcmdpbi1yaWdodCdcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHlcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBnZXRXaWR0aCgpIHtcbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2luZG93L2lubmVyV2lkdGgjdXNhZ2Vfbm90ZXNcbiAgICBjb25zdCBkb2N1bWVudFdpZHRoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoXG4gICAgcmV0dXJuIE1hdGguYWJzKHdpbmRvdy5pbm5lcldpZHRoIC0gZG9jdW1lbnRXaWR0aClcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgY29uc3Qgd2lkdGggPSB0aGlzLmdldFdpZHRoKClcbiAgICB0aGlzLl9kaXNhYmxlT3ZlckZsb3coKVxuICAgIC8vIGdpdmUgcGFkZGluZyB0byBlbGVtZW50IHRvIGJhbGFuY2UgdGhlIGhpZGRlbiBzY3JvbGxiYXIgd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlIC0gd2lkdGgpXG4gIH1cblxuICByZXNldCgpIHtcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCBQUk9QRVJUWV9QQURESU5HKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgUFJPUEVSVFlfUEFERElORylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCBQUk9QRVJUWV9NQVJHSU4pXG4gIH1cblxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgfVxuXG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBpZiAoZWxlbWVudCAhPT0gdGhpcy5fZWxlbWVudCAmJiB3aW5kb3cuaW5uZXJXaWR0aCA+IGVsZW1lbnQuY2xpZW50V2lkdGggKyBzY3JvbGxiYXJXaWR0aCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSlcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSlcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgYCR7Y2FsbGJhY2soTnVtYmVyLnBhcnNlRmxvYXQoY2FsY3VsYXRlZFZhbHVlKSl9cHhgKVxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZVByb3BlcnR5KVxuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5LCBhY3R1YWxWYWx1ZSlcbiAgICB9XG4gIH1cblxuICBfcmVzZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wZXJ0eSkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSlcbiAgICAgIC8vIFdlIG9ubHkgd2FudCB0byByZW1vdmUgdGhlIHByb3BlcnR5IGlmIHRoZSB2YWx1ZSBpcyBgbnVsbGA7IHRoZSB2YWx1ZSBjYW4gYWxzbyBiZSB6ZXJvXG4gICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3BlcnR5KVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KVxuICAgICAgZWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShzdHlsZVByb3BlcnR5LCB2YWx1ZSlcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3RvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VsIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBjYWxsQmFjayhzZWwpXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbEJhckhlbHBlclxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9iYWNrZHJvcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlLCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLCBnZXRFbGVtZW50LCByZWZsb3cgfSBmcm9tICcuL2luZGV4J1xuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2JhY2tkcm9wJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWBcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLCAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZCgpXG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudClcbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKVxuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWVcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRcbiAgfVxuXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KClcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpXG5cbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKVxuICAgIH0pXG5cbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZVxuICB9XG5cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhdXRvZm9jdXM6IHRydWUsXG4gIHRyYXBFbGVtZW50OiBudWxsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhdXRvZm9jdXM6ICdib29sZWFuJyxcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBGb2N1c1RyYXAgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgYWN0aXZhdGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmF1dG9mb2N1cykge1xuICAgICAgdGhpcy5fY29uZmlnLnRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKGRvY3VtZW50LCBFVkVOVF9LRVkpIC8vIGd1YXJkIGFnYWluc3QgaW5maW5pdGUgZm9jdXMgbG9vcFxuICAgIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlRm9jdXNpbihldmVudCkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9LRVlET1dOX1RBQiwgZXZlbnQgPT4gdGhpcy5faGFuZGxlS2V5ZG93bihldmVudCkpXG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IHRydWVcbiAgfVxuXG4gIGRlYWN0aXZhdGUoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNBY3RpdmUgPSBmYWxzZVxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2hhbmRsZUZvY3VzaW4oZXZlbnQpIHtcbiAgICBjb25zdCB7IHRyYXBFbGVtZW50IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmIChldmVudC50YXJnZXQgPT09IGRvY3VtZW50IHx8IGV2ZW50LnRhcmdldCA9PT0gdHJhcEVsZW1lbnQgfHwgdHJhcEVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5mb2N1c2FibGVDaGlsZHJlbih0cmFwRWxlbWVudClcblxuICAgIGlmIChlbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRyYXBFbGVtZW50LmZvY3VzKClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPT09IFRBQl9OQVZfQkFDS1dBUkQpIHtcbiAgICAgIGVsZW1lbnRzW2VsZW1lbnRzLmxlbmd0aCAtIDFdLmZvY3VzKClcbiAgICB9IGVsc2Uge1xuICAgICAgZWxlbWVudHNbMF0uZm9jdXMoKVxuICAgIH1cbiAgfVxuXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmtleSAhPT0gVEFCX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9IGV2ZW50LnNoaWZ0S2V5ID8gVEFCX05BVl9CQUNLV0FSRCA6IFRBQl9OQVZfRk9SV0FSRFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsIGlzUlRMLCBpc1Zpc2libGUsIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IEJhY2tkcm9wIGZyb20gJy4vdXRpbC9iYWNrZHJvcCdcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi91dGlsL2ZvY3VzdHJhcCdcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdtb2RhbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERV9QUkVWRU5URUQgPSBgaGlkZVByZXZlbnRlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1JFU0laRSA9IGByZXNpemUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19ESVNNSVNTID0gYGNsaWNrLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJ1xuXG5jb25zdCBPUEVOX1NFTEVDVE9SID0gJy5tb2RhbC5zaG93J1xuY29uc3QgU0VMRUNUT1JfRElBTE9HID0gJy5tb2RhbC1kaWFsb2cnXG5jb25zdCBTRUxFQ1RPUl9NT0RBTF9CT0RZID0gJy5tb2RhbC1ib2R5J1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwibW9kYWxcIl0nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBmb2N1czogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGZvY3VzOiAnYm9vbGVhbicsXG4gIGtleWJvYXJkOiAnYm9vbGVhbidcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgTW9kYWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5fZGlhbG9nID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ESUFMT0csIHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fYmFja2Ryb3AgPSB0aGlzLl9pbml0aWFsaXplQmFja0Ryb3AoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcCA9IHRoaXMuX2luaXRpYWxpemVGb2N1c1RyYXAoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fc2Nyb2xsQmFyID0gbmV3IFNjcm9sbEJhckhlbHBlcigpXG5cbiAgICB0aGlzLl9hZGRFdmVudExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHRvZ2dsZShyZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24gPyB0aGlzLmhpZGUoKSA6IHRoaXMuc2hvdyhyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgc2hvdyhyZWxhdGVkVGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0XG4gICAgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICB0aGlzLl9zY3JvbGxCYXIuaGlkZSgpXG5cbiAgICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9PUEVOKVxuXG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IHRydWVcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBmb3IgKGNvbnN0IGh0bWxFbGVtZW50IG9mIFt3aW5kb3csIHRoaXMuX2RpYWxvZ10pIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoaHRtbEVsZW1lbnQsIEVWRU5UX0tFWSlcbiAgICB9XG5cbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLCAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpXG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZylcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMFxuICAgIH1cblxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgfSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX1JFU0laRSwgKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzU2hvd24gJiYgIXRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIC8vIGEgYmFkIHRyaWNrIHRvIHNlZ3JlZ2F0ZSBjbGlja3MgdGhhdCBtYXkgc3RhcnQgaW5zaWRlIGRpYWxvZyBidXQgZW5kIG91dHNpZGUsIGFuZCBhdm9pZCBsaXN0ZW4gdG8gc2Nyb2xsYmFyIGNsaWNrc1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudDIgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZWxlbWVudCAhPT0gZXZlbnQudGFyZ2V0IHx8IHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50Mi50YXJnZXQpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09ICdzdGF0aWMnKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wKSB7XG4gICAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgX2hpZGVNb2RhbCgpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSdcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgncm9sZScpXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcblxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTilcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9KVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgfVxuXG4gIF90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgY29uc3QgaW5pdGlhbE92ZXJmbG93WSA9IHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZXG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKGluaXRpYWxPdmVyZmxvd1kgPT09ICdoaWRkZW4nIHx8IHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU1RBVElDKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gJ2hpZGRlbidcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvd1kgPSBpbml0aWFsT3ZlcmZsb3dZXG4gICAgICB9LCB0aGlzLl9kaWFsb2cpXG4gICAgfSwgdGhpcy5fZGlhbG9nKVxuXG4gICAgdGhpcy5fZWxlbWVudC5mb2N1cygpXG4gIH1cblxuICAvKipcbiAgICogVGhlIGZvbGxvd2luZyBtZXRob2RzIGFyZSB1c2VkIHRvIGhhbmRsZSBvdmVyZmxvd2luZyBtb2RhbHNcbiAgICovXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpXG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDBcblxuICAgIGlmIChpc0JvZHlPdmVyZmxvd2luZyAmJiAhaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ0xlZnQnIDogJ3BhZGRpbmdSaWdodCdcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgXG4gICAgfVxuXG4gICAgaWYgKCFpc0JvZHlPdmVyZmxvd2luZyAmJiBpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgIGNvbnN0IHByb3BlcnR5ID0gaXNSVEwoKSA/ICdwYWRkaW5nUmlnaHQnIDogJ3BhZGRpbmdMZWZ0J1xuICAgICAgdGhpcy5fZWxlbWVudC5zdHlsZVtwcm9wZXJ0eV0gPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG4gIH1cblxuICBfcmVzZXRBZGp1c3RtZW50cygpIHtcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJydcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcnXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcsIHJlbGF0ZWRUYXJnZXQpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10ocmVsYXRlZFRhcmdldClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX1NIT1csIHNob3dFdmVudCA9PiB7XG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAvLyBvbmx5IHJlZ2lzdGVyIGZvY3VzIHJlc3RvcmVyIGlmIG1vZGFsIHdpbGwgYWN0dWFsbHkgZ2V0IHNob3duXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0pXG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBtb2RhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3Blbikge1xuICAgIE1vZGFsLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE1vZGFsKVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbFxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc0Rpc2FibGVkLFxuICBpc1Zpc2libGVcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnXG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7IHJlbGF0ZWRUYXJnZXQgfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfSElESU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKVxuXG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KClcbiAgICAgIH1cblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfVxuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApXG5cbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5oaWRlKClcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxyZWFkeU9wZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKE9QRU5fU0VMRUNUT1IpXG4gIGlmIChhbHJlYWR5T3BlbiAmJiBhbHJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFscmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG4gIGRhdGEudG9nZ2xlKHRoaXMpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3Qgc2VsZWN0b3Igb2YgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKSkge1xuICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHNlbGVjdG9yKS5zaG93KClcbiAgfVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKCdbYXJpYS1tb2RhbF1bY2xhc3MqPXNob3ddW2NsYXNzKj1vZmZjYW52YXMtXScpKSB7XG4gICAgaWYgKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gIT09ICdmaXhlZCcpIHtcbiAgICAgIE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpLmhpZGUoKVxuICAgIH1cbiAgfVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoT2ZmY2FudmFzKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdXRpbC9zYW5pdGl6ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCB1cmlBdHRyaWJ1dGVzID0gbmV3IFNldChbXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2NpdGUnLFxuICAnaHJlZicsXG4gICdpdGVtdHlwZScsXG4gICdsb25nZGVzYycsXG4gICdwb3N0ZXInLFxuICAnc3JjJyxcbiAgJ3hsaW5rOmhyZWYnXG5dKVxuXG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzEyLjIueC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50c1xuICovXG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZXxzbXMpOnxbXiMmLzo/XSooPzpbIy8/XXwkKSkvaVxuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IG1hdGNoZXMgc2FmZSBkYXRhIFVSTHMuIE9ubHkgbWF0Y2hlcyBpbWFnZSwgdmlkZW8gYW5kIGF1ZGlvIHR5cGVzLlxuICpcbiAqIFNob3V0LW91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eZGF0YTooPzppbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFtcXGQrL2Etel0rPSokL2lcblxuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpIHx8IERBVEFfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gIHJldHVybiBhbGxvd2VkQXR0cmlidXRlTGlzdC5maWx0ZXIoYXR0cmlidXRlUmVnZXggPT4gYXR0cmlidXRlUmVnZXggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgLnNvbWUocmVnZXggPT4gcmVnZXgudGVzdChhdHRyaWJ1dGVOYW1lKSlcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGl2OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sXG4gIH1cblxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpXG4gIH1cblxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpXG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpXG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKVxuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGF0dHJpYnV0ZUxpc3QgPSBbXS5jb25jYXQoLi4uZWxlbWVudC5hdHRyaWJ1dGVzKVxuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxlbWVudE5hbWVdIHx8IFtdKVxuXG4gICAgZm9yIChjb25zdCBhdHRyaWJ1dGUgb2YgYXR0cmlidXRlTGlzdCkge1xuICAgICAgaWYgKCFhbGxvd2VkQXR0cmlidXRlKGF0dHJpYnV0ZSwgYWxsb3dlZEF0dHJpYnV0ZXMpKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZS5ub2RlTmFtZSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gY3JlYXRlZERvY3VtZW50LmJvZHkuaW5uZXJIVE1MXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBEZWZhdWx0QWxsb3dsaXN0LCBzYW5pdGl6ZUh0bWwgfSBmcm9tICcuL3Nhbml0aXplcidcbmltcG9ydCB7IGdldEVsZW1lbnQsIGlzRWxlbWVudCB9IGZyb20gJy4uL3V0aWwvaW5kZXgnXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdUZW1wbGF0ZUZhY3RvcnknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufVxuXG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jb25maWcuY29udGVudClcbiAgICAgIC5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIH1cblxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwXG4gIH1cblxuICBjaGFuZ2VDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29udGVudClcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHsgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsIC4uLmNvbnRlbnQgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0ZW1wbGF0ZVdyYXBwZXIuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZSh0aGlzLl9jb25maWcudGVtcGxhdGUpXG5cbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF1cbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpXG5cbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KVxuICB9XG5cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7IHNlbGVjdG9yLCBlbnRyeTogY29udGVudCB9LCBEZWZhdWx0Q29udGVudFR5cGUpXG4gICAgfVxuICB9XG5cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpXG5cbiAgICBpZiAoIXRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpXG5cbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgX21heWJlU2FuaXRpemUoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSA/IHNhbml0aXplSHRtbChhcmcsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKSA6IGFyZ1xuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nID8gYXJnKHRoaXMpIDogYXJnXG4gIH1cblxuICBfcHV0RWxlbWVudEluVGVtcGxhdGUoZWxlbWVudCwgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gJydcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5hcHBlbmQoZWxlbWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRlbXBsYXRlRWxlbWVudC50ZXh0Q29udGVudCA9IGVsZW1lbnQudGV4dENvbnRlbnRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUZW1wbGF0ZUZhY3RvcnlcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGZpbmRTaGFkb3dSb290LCBnZXRFbGVtZW50LCBnZXRVSUQsIGlzUlRMLCBub29wIH0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCB9IGZyb20gJy4vdXRpbC9zYW5pdGl6ZXInXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IFRlbXBsYXRlRmFjdG9yeSBmcm9tICcuL3V0aWwvdGVtcGxhdGUtZmFjdG9yeSdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3Rvb2x0aXAnXG5jb25zdCBESVNBTExPV0VEX0FUVFJJQlVURVMgPSBuZXcgU2V0KFsnc2FuaXRpemUnLCAnYWxsb3dMaXN0JywgJ3Nhbml0aXplRm4nXSlcblxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX01PREFMID0gJ21vZGFsJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbmNvbnN0IFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIgPSAnLnRvb2x0aXAtaW5uZXInXG5jb25zdCBTRUxFQ1RPUl9NT0RBTCA9IGAuJHtDTEFTU19OQU1FX01PREFMfWBcblxuY29uc3QgRVZFTlRfTU9EQUxfSElERSA9ICdoaWRlLmJzLm1vZGFsJ1xuXG5jb25zdCBUUklHR0VSX0hPVkVSID0gJ2hvdmVyJ1xuY29uc3QgVFJJR0dFUl9GT0NVUyA9ICdmb2N1cydcbmNvbnN0IFRSSUdHRVJfQ0xJQ0sgPSAnY2xpY2snXG5jb25zdCBUUklHR0VSX01BTlVBTCA9ICdtYW51YWwnXG5cbmNvbnN0IEVWRU5UX0hJREUgPSAnaGlkZSdcbmNvbnN0IEVWRU5UX0hJRERFTiA9ICdoaWRkZW4nXG5jb25zdCBFVkVOVF9TSE9XID0gJ3Nob3cnXG5jb25zdCBFVkVOVF9TSE9XTiA9ICdzaG93bidcbmNvbnN0IEVWRU5UX0lOU0VSVEVEID0gJ2luc2VydGVkJ1xuY29uc3QgRVZFTlRfQ0xJQ0sgPSAnY2xpY2snXG5jb25zdCBFVkVOVF9GT0NVU0lOID0gJ2ZvY3VzaW4nXG5jb25zdCBFVkVOVF9GT0NVU09VVCA9ICdmb2N1c291dCdcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSAnbW91c2VlbnRlcidcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSAnbW91c2VsZWF2ZSdcblxuY29uc3QgQXR0YWNobWVudE1hcCA9IHtcbiAgQVVUTzogJ2F1dG8nLFxuICBUT1A6ICd0b3AnLFxuICBSSUdIVDogaXNSVEwoKSA/ICdsZWZ0JyA6ICdyaWdodCcsXG4gIEJPVFRPTTogJ2JvdHRvbScsXG4gIExFRlQ6IGlzUlRMKCkgPyAncmlnaHQnIDogJ2xlZnQnXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGN1c3RvbUNsYXNzOiAnJyxcbiAgZGVsYXk6IDAsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgaHRtbDogZmFsc2UsXG4gIG9mZnNldDogWzAsIDBdLFxuICBwbGFjZW1lbnQ6ICd0b3AnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBzZWxlY3RvcjogZmFsc2UsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWFycm93XCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtaW5uZXJcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nLFxuICB0aXRsZTogJycsXG4gIHRyaWdnZXI6ICdob3ZlciBmb2N1cydcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjb250YWluZXI6ICcoc3RyaW5nfGVsZW1lbnR8Ym9vbGVhbiknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgZGVsYXk6ICcobnVtYmVyfG9iamVjdCknLFxuICBmYWxsYmFja1BsYWNlbWVudHM6ICdhcnJheScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknLFxuICBzYW5pdGl6ZTogJ2Jvb2xlYW4nLFxuICBzYW5pdGl6ZUZuOiAnKG51bGx8ZnVuY3Rpb24pJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgdGVtcGxhdGU6ICdzdHJpbmcnLFxuICB0aXRsZTogJyhzdHJpbmd8ZWxlbWVudHxmdW5jdGlvbiknLFxuICB0cmlnZ2VyOiAnc3RyaW5nJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUb29sdGlwIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIGlmICh0eXBlb2YgUG9wcGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQm9vdHN0cmFwXFwncyB0b29sdGlwcyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpXG4gICAgfVxuXG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gUHJpdmF0ZVxuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgICB0aGlzLl90aW1lb3V0ID0gMFxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyID0ge31cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbnVsbFxuICAgIHRoaXMuX25ld0NvbnRlbnQgPSBudWxsXG5cbiAgICAvLyBQcm90ZWN0ZWRcbiAgICB0aGlzLnRpcCA9IG51bGxcblxuICAgIHRoaXMuX3NldExpc3RlbmVycygpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2VcbiAgfVxuXG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZFxuICB9XG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICghdGhpcy5faXNFbmFibGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrID0gIXRoaXMuX2FjdGl2ZVRyaWdnZXIuY2xpY2tcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9sZWF2ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbnRlcigpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsIHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJykpXG4gICAgfVxuXG4gICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9lbGVtZW50LnN0eWxlLmRpc3BsYXkgPT09ICdub25lJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQbGVhc2UgdXNlIHNob3cgb24gdmlzaWJsZSBlbGVtZW50cycpXG4gICAgfVxuXG4gICAgaWYgKCEodGhpcy5faXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1cpKVxuICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBmaW5kU2hhZG93Um9vdCh0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGlzSW5UaGVEb20gPSAoc2hhZG93Um9vdCB8fCB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5jb250YWlucyh0aGlzLl9lbGVtZW50KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8ICFpc0luVGhlRG9tKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB0b2RvIHY2IHJlbW92ZSB0aGlzIE9SIG1ha2UgaXQgb3B0aW9uYWxcbiAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZGVzY3JpYmVkYnknLCB0aXAuZ2V0QXR0cmlidXRlKCdpZCcpKVxuXG4gICAgY29uc3QgeyBjb250YWluZXIgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9JTlNFUlRFRCkpXG4gICAgfVxuXG4gICAgdGhpcy5fcG9wcGVyID0gdGhpcy5fY3JlYXRlUG9wcGVyKHRpcClcblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XTikpXG5cbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHRoaXMuX2xlYXZlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNIb3ZlcmVkID0gZmFsc2VcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfSElERSkpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUaXBFbGVtZW50KClcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKSkge1xuICAgICAgICBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9DTElDS10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9GT0NVU10gPSBmYWxzZVxuICAgIHRoaXMuX2FjdGl2ZVRyaWdnZXJbVFJJR0dFUl9IT1ZFUl0gPSBmYWxzZVxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IG51bGwgLy8gaXQgaXMgYSB0cmljayB0byBzdXBwb3J0IG1hbnVhbCB0cmlnZ2VyaW5nXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURERU4pKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJvdGVjdGVkXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuX2dldFRpdGxlKCkpXG4gIH1cblxuICBfZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcCA9IHRoaXMuX2NyZWF0ZVRpcEVsZW1lbnQodGhpcy5fbmV3Q29udGVudCB8fCB0aGlzLl9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50aXBcbiAgfVxuXG4gIF9jcmVhdGVUaXBFbGVtZW50KGNvbnRlbnQpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLl9nZXRUZW1wbGF0ZUZhY3RvcnkoY29udGVudCkudG9IdG1sKClcblxuICAgIC8vIHRvZG86IHJlbW92ZSB0aGlzIGNoZWNrIG9uIHY2XG4gICAgaWYgKCF0aXApIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgLy8gdG9kbzogb24gdjYgdGhlIGZvbGxvd2luZyBjYW4gYmUgYWNoaWV2ZWQgd2l0aCBDU1Mgb25seVxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKGBicy0ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXV0b2ApXG5cbiAgICBjb25zdCB0aXBJZCA9IGdldFVJRCh0aGlzLmNvbnN0cnVjdG9yLk5BTUUpLnRvU3RyaW5nKClcblxuICAgIHRpcC5zZXRBdHRyaWJ1dGUoJ2lkJywgdGlwSWQpXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aXAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRpcFxuICB9XG5cbiAgc2V0Q29udGVudChjb250ZW50KSB7XG4gICAgdGhpcy5fbmV3Q29udGVudCA9IGNvbnRlbnRcbiAgICBpZiAodGhpcy5faXNTaG93bigpKSB7XG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KSB7XG4gICAgaWYgKHRoaXMuX3RlbXBsYXRlRmFjdG9yeSkge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5LmNoYW5nZUNvbnRlbnQoY29udGVudClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fdGVtcGxhdGVGYWN0b3J5ID0gbmV3IFRlbXBsYXRlRmFjdG9yeSh7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgLy8gdGhlIGBjb250ZW50YCB2YXIgaGFzIHRvIGJlIGFmdGVyIGB0aGlzLl9jb25maWdgXG4gICAgICAgIC8vIHRvIG92ZXJyaWRlIGNvbmZpZy5jb250ZW50IGluIGNhc2Ugb2YgcG9wb3ZlclxuICAgICAgICBjb250ZW50LFxuICAgICAgICBleHRyYUNsYXNzOiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY3VzdG9tQ2xhc3MpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl90ZW1wbGF0ZUZhY3RvcnlcbiAgfVxuXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9UT09MVElQX0lOTkVSXTogdGhpcy5fZ2V0VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRUaXRsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLnRpdGxlKSB8fCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpIHtcbiAgICByZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5hbmltYXRpb24gfHwgKHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMudGlwICYmIHRoaXMudGlwLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfY3JlYXRlUG9wcGVyKHRpcCkge1xuICAgIGNvbnN0IHBsYWNlbWVudCA9IHR5cGVvZiB0aGlzLl9jb25maWcucGxhY2VtZW50ID09PSAnZnVuY3Rpb24nID9cbiAgICAgIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnQuY2FsbCh0aGlzLCB0aXAsIHRoaXMuX2VsZW1lbnQpIDpcbiAgICAgIHRoaXMuX2NvbmZpZy5wbGFjZW1lbnRcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV1cbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSlcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBhcmcgPT09ICdmdW5jdGlvbicgPyBhcmcuY2FsbCh0aGlzLl9lbGVtZW50KSA6IGFyZ1xuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmVTZXRQbGFjZW1lbnQnLFxuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgcGhhc2U6ICdiZWZvcmVNYWluJyxcbiAgICAgICAgICBmbjogZGF0YSA9PiB7XG4gICAgICAgICAgICAvLyBQcmUtc2V0IFBvcHBlcidzIHBsYWNlbWVudCBhdHRyaWJ1dGUgaW4gb3JkZXIgdG8gcmVhZCB0aGUgYXJyb3cgc2l6ZXMgcHJvcGVybHkuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UsIFBvcHBlciBtaXhlcyB1cCB0aGUgd2lkdGggYW5kIGhlaWdodCBkaW1lbnNpb25zIHNpbmNlIHRoZSBpbml0aWFsIGFycm93IHN0eWxlIGlzIGZvciB0b3AgcGxhY2VtZW50XG4gICAgICAgICAgICB0aGlzLl9nZXRUaXBFbGVtZW50KCkuc2V0QXR0cmlidXRlKCdkYXRhLXBvcHBlci1wbGFjZW1lbnQnLCBkYXRhLnN0YXRlLnBsYWNlbWVudClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uKHR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnID09PSAnZnVuY3Rpb24nID8gdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyhkZWZhdWx0QnNQb3BwZXJDb25maWcpIDogdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZylcbiAgICB9XG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IHRyaWdnZXJzID0gdGhpcy5fY29uZmlnLnRyaWdnZXIuc3BsaXQoJyAnKVxuXG4gICAgZm9yIChjb25zdCB0cmlnZ2VyIG9mIHRyaWdnZXJzKSB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfQ0xJQ0spLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQudG9nZ2xlKClcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSBpZiAodHJpZ2dlciAhPT0gVFJJR0dFUl9NQU5VQUwpIHtcbiAgICAgICAgY29uc3QgZXZlbnRJbiA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFRU5URVIpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU0lOKVxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX01PVVNFTEVBVkUpIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9GT0NVU09VVClcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9IHRydWVcbiAgICAgICAgICBjb250ZXh0Ll9lbnRlcigpXG4gICAgICAgIH0pXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcbiAgICAgICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW2V2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUl0gPVxuICAgICAgICAgICAgY29udGV4dC5fZWxlbWVudC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KVxuXG4gICAgICAgICAgY29udGV4dC5fbGVhdmUoKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuICB9XG5cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcblxuICAgIGlmICghdGl0bGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudC50cmltKCkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSkgLy8gRE8gTk9UIFVTRSBJVC4gSXMgb25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGl0bGUnKVxuICB9XG5cbiAgX2VudGVyKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkgfHwgdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSB0cnVlXG5cbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5zaG93KClcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkuc2hvdylcbiAgfVxuXG4gIF9sZWF2ZSgpIHtcbiAgICBpZiAodGhpcy5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZVxuXG4gICAgdGhpcy5fc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5oaWRlKVxuICB9XG5cbiAgX3NldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KGhhbmRsZXIsIHRpbWVvdXQpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9hY3RpdmVUcmlnZ2VyKS5pbmNsdWRlcyh0cnVlKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBmb3IgKGNvbnN0IGRhdGFBdHRyaWJ1dGUgb2YgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpKSB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cmlidXRlKSkge1xuICAgICAgICBkZWxldGUgZGF0YUF0dHJpYnV0ZXNbZGF0YUF0dHJpYnV0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgY29uZmlnID0gdGhpcy5fbWVyZ2VDb25maWdPYmooY29uZmlnKVxuICAgIGNvbmZpZyA9IHRoaXMuX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKVxuICAgIHRoaXMuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9jb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdGhpcy5fY29uZmlnW2tleV0pIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB0aGlzLl9jb25maWdba2V5XVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlXG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJ1xuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICAgIHRoaXMudGlwID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgY29udGVudDogJycsXG4gIG9mZnNldDogWzAsIDhdLFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICc8aDMgY2xhc3M9XCJwb3BvdmVyLWhlYWRlclwiPjwvaDM+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2NsaWNrJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0VHlwZSxcbiAgY29udGVudDogJyhudWxsfHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgUG9wb3ZlciBleHRlbmRzIFRvb2x0aXAge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gT3ZlcnJpZGVzXG4gIF9pc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRUaXRsZSgpIHx8IHRoaXMuX2dldENvbnRlbnQoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0Q29udGVudEZvclRlbXBsYXRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICBbU0VMRUNUT1JfVElUTEVdOiB0aGlzLl9nZXRUaXRsZSgpLFxuICAgICAgW1NFTEVDVE9SX0NPTlRFTlRdOiB0aGlzLl9nZXRDb250ZW50KClcbiAgICB9XG4gIH1cblxuICBfZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmNvbnRlbnQpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4yLjMpOiBzY3JvbGxzcHkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldEVsZW1lbnQsIGlzRGlzYWJsZWQsIGlzVmlzaWJsZSB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX0FDVElWQVRFID0gYGFjdGl2YXRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0sgPSBgY2xpY2ske0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MgPSAnW2hyZWZdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX05BVl9JVEVNU30gPiAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0OiBudWxsLCAvLyBUT0RPOiB2NiBAZGVwcmVjYXRlZCwga2VlcCBpdCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29uc1xuICByb290TWFyZ2luOiAnMHB4IDBweCAtMjUlJyxcbiAgc21vb3RoU2Nyb2xsOiBmYWxzZSxcbiAgdGFyZ2V0OiBudWxsLFxuICB0aHJlc2hvbGQ6IFswLjEsIDAuNSwgMV1cbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhudW1iZXJ8bnVsbCknLCAvLyBUT0RPIHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICdzdHJpbmcnLFxuICBzbW9vdGhTY3JvbGw6ICdib29sZWFuJyxcbiAgdGFyZ2V0OiAnZWxlbWVudCcsXG4gIHRocmVzaG9sZDogJ2FycmF5J1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgLy8gdGhpcy5fZWxlbWVudCBpcyB0aGUgb2JzZXJ2YWJsZXNDb250YWluZXIgYW5kIGNvbmZpZy50YXJnZXQgdGhlIG1lbnUgbGlua3Mgd3JhcHBlclxuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fcm9vdEVsZW1lbnQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX2VsZW1lbnQpLm92ZXJmbG93WSA9PT0gJ3Zpc2libGUnID8gbnVsbCA6IHRoaXMuX2VsZW1lbnRcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fb2JzZXJ2ZXIgPSBudWxsXG4gICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhID0ge1xuICAgICAgdmlzaWJsZUVudHJ5VG9wOiAwLFxuICAgICAgcGFyZW50U2Nyb2xsVG9wOiAwXG4gICAgfVxuICAgIHRoaXMucmVmcmVzaCgpIC8vIGluaXRpYWxpemVcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgcmVmcmVzaCgpIHtcbiAgICB0aGlzLl9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKClcbiAgICB0aGlzLl9tYXliZUVuYWJsZVNtb290aFNjcm9sbCgpXG5cbiAgICBpZiAodGhpcy5fb2JzZXJ2ZXIpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vYnNlcnZlciA9IHRoaXMuX2dldE5ld09ic2VydmVyKClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnZhbHVlcygpKSB7XG4gICAgICB0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHNlY3Rpb24pXG4gICAgfVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2NvbmZpZ0FmdGVyTWVyZ2UoY29uZmlnKSB7XG4gICAgLy8gVE9ETzogb24gdjYgdGFyZ2V0IHNob3VsZCBiZSBnaXZlbiBleHBsaWNpdGx5ICYgcmVtb3ZlIHRoZSB7dGFyZ2V0OiAnc3MtdGFyZ2V0J30gY2FzZVxuICAgIGNvbmZpZy50YXJnZXQgPSBnZXRFbGVtZW50KGNvbmZpZy50YXJnZXQpIHx8IGRvY3VtZW50LmJvZHlcblxuICAgIC8vIFRPRE86IHY2IE9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnMuIFVzZSByb290TWFyZ2luIG9ubHlcbiAgICBjb25maWcucm9vdE1hcmdpbiA9IGNvbmZpZy5vZmZzZXQgPyBgJHtjb25maWcub2Zmc2V0fXB4IDBweCAtMzAlYCA6IGNvbmZpZy5yb290TWFyZ2luXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy50aHJlc2hvbGQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjb25maWcudGhyZXNob2xkID0gY29uZmlnLnRocmVzaG9sZC5zcGxpdCgnLCcpLm1hcCh2YWx1ZSA9PiBOdW1iZXIucGFyc2VGbG9hdCh2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKCkge1xuICAgIGlmICghdGhpcy5fY29uZmlnLnNtb290aFNjcm9sbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gdW5yZWdpc3RlciBhbnkgcHJldmlvdXMgbGlzdGVuZXJzXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSylcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9jb25maWcudGFyZ2V0LCBFVkVOVF9DTElDSywgU0VMRUNUT1JfVEFSR0VUX0xJTktTLCBldmVudCA9PiB7XG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IHRoaXMuX29ic2VydmFibGVTZWN0aW9ucy5nZXQoZXZlbnQudGFyZ2V0Lmhhc2gpXG4gICAgICBpZiAob2JzZXJ2YWJsZVNlY3Rpb24pIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICBjb25zdCByb290ID0gdGhpcy5fcm9vdEVsZW1lbnQgfHwgd2luZG93XG4gICAgICAgIGNvbnN0IGhlaWdodCA9IG9ic2VydmFibGVTZWN0aW9uLm9mZnNldFRvcCAtIHRoaXMuX2VsZW1lbnQub2Zmc2V0VG9wXG4gICAgICAgIGlmIChyb290LnNjcm9sbFRvKSB7XG4gICAgICAgICAgcm9vdC5zY3JvbGxUbyh7IHRvcDogaGVpZ2h0LCBiZWhhdmlvcjogJ3Ntb290aCcgfSlcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENocm9tZSA2MCBkb2Vzbid0IHN1cHBvcnQgYHNjcm9sbFRvYFxuICAgICAgICByb290LnNjcm9sbFRvcCA9IGhlaWdodFxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBfZ2V0TmV3T2JzZXJ2ZXIoKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIHJvb3Q6IHRoaXMuX3Jvb3RFbGVtZW50LFxuICAgICAgdGhyZXNob2xkOiB0aGlzLl9jb25maWcudGhyZXNob2xkLFxuICAgICAgcm9vdE1hcmdpbjogdGhpcy5fY29uZmlnLnJvb3RNYXJnaW5cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKGVudHJpZXMgPT4gdGhpcy5fb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSwgb3B0aW9ucylcbiAgfVxuXG4gIC8vIFRoZSBsb2dpYyBvZiBzZWxlY3Rpb25cbiAgX29ic2VydmVyQ2FsbGJhY2soZW50cmllcykge1xuICAgIGNvbnN0IHRhcmdldEVsZW1lbnQgPSBlbnRyeSA9PiB0aGlzLl90YXJnZXRMaW5rcy5nZXQoYCMke2VudHJ5LnRhcmdldC5pZH1gKVxuICAgIGNvbnN0IGFjdGl2YXRlID0gZW50cnkgPT4ge1xuICAgICAgdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcCA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3BcbiAgICAgIHRoaXMuX3Byb2Nlc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpXG4gICAgfVxuXG4gICAgY29uc3QgcGFyZW50U2Nyb2xsVG9wID0gKHRoaXMuX3Jvb3RFbGVtZW50IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuc2Nyb2xsVG9wXG4gICAgY29uc3QgdXNlclNjcm9sbHNEb3duID0gcGFyZW50U2Nyb2xsVG9wID49IHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3BcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEucGFyZW50U2Nyb2xsVG9wID0gcGFyZW50U2Nyb2xsVG9wXG5cbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGlmICghZW50cnkuaXNJbnRlcnNlY3RpbmcpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRhcmdldEVsZW1lbnQoZW50cnkpKVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyA9IGVudHJ5LnRhcmdldC5vZmZzZXRUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnZpc2libGVFbnRyeVRvcFxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyBkb3duLCBwaWNrIHRoZSBiaWdnZXIgb2Zmc2V0VG9wXG4gICAgICBpZiAodXNlclNjcm9sbHNEb3duICYmIGVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgICAgLy8gaWYgcGFyZW50IGlzbid0IHNjcm9sbGVkLCBsZXQncyBrZWVwIHRoZSBmaXJzdCB2aXNpYmxlIGl0ZW0sIGJyZWFraW5nIHRoZSBpdGVyYXRpb25cbiAgICAgICAgaWYgKCFwYXJlbnRTY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIGlmIHdlIGFyZSBzY3JvbGxpbmcgdXAsIHBpY2sgdGhlIHNtYWxsZXN0IG9mZnNldFRvcFxuICAgICAgaWYgKCF1c2VyU2Nyb2xsc0Rvd24gJiYgIWVudHJ5SXNMb3dlclRoYW5QcmV2aW91cykge1xuICAgICAgICBhY3RpdmF0ZShlbnRyeSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcygpIHtcbiAgICB0aGlzLl90YXJnZXRMaW5rcyA9IG5ldyBNYXAoKVxuICAgIHRoaXMuX29ic2VydmFibGVTZWN0aW9ucyA9IG5ldyBNYXAoKVxuXG4gICAgY29uc3QgdGFyZ2V0TGlua3MgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1RBUkdFVF9MSU5LUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIGZvciAoY29uc3QgYW5jaG9yIG9mIHRhcmdldExpbmtzKSB7XG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgYW5jaG9yIGhhcyBhbiBpZCBhbmQgaXMgbm90IGRpc2FibGVkXG4gICAgICBpZiAoIWFuY2hvci5oYXNoIHx8IGlzRGlzYWJsZWQoYW5jaG9yKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBvYnNlcnZhYmxlU2VjdGlvbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYW5jaG9yLmhhc2gsIHRoaXMuX2VsZW1lbnQpXG5cbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBvYnNlcnZhYmxlU2VjdGlvbiBleGlzdHMgJiBpcyB2aXNpYmxlXG4gICAgICBpZiAoaXNWaXNpYmxlKG9ic2VydmFibGVTZWN0aW9uKSkge1xuICAgICAgICB0aGlzLl90YXJnZXRMaW5rcy5zZXQoYW5jaG9yLmhhc2gsIGFuY2hvcilcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRoaXMuX2NvbmZpZy50YXJnZXQpXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldClcblxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7IHJlbGF0ZWRUYXJnZXQ6IHRhcmdldCB9KVxuICB9XG5cbiAgX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpIHtcbiAgICAvLyBBY3RpdmF0ZSBkcm9wZG93biBwYXJlbnRzXG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNKSkge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSlcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RHcm91cCBvZiBTZWxlY3RvckVuZ2luZS5wYXJlbnRzKHRhcmdldCwgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApKSB7XG4gICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAvLyBXaXRoIGJvdGggPHVsPiBhbmQgPG5hdj4gbWFya3VwIGEgcGFyZW50IGlzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGFueSBuYXYgYW5jZXN0b3JcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBTZWxlY3RvckVuZ2luZS5wcmV2KGxpc3RHcm91cCwgU0VMRUNUT1JfTElOS19JVEVNUykpIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRX1gLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNweSBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKSkge1xuICAgIFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHNweSlcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxTcHlcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjIuMyk6IHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiwgZ2V0RWxlbWVudEZyb21TZWxlY3RvciwgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsIGlzRGlzYWJsZWQgfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfRFJPUERPV04gPSAnZHJvcGRvd24nXG5cbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fTUVOVSA9ICcuZHJvcGRvd24tbWVudSdcbmNvbnN0IE5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnOm5vdCguZHJvcGRvd24tdG9nZ2xlKSdcblxuY29uc3QgU0VMRUNUT1JfVEFCX1BBTkVMID0gJy5saXN0LWdyb3VwLCAubmF2LCBbcm9sZT1cInRhYmxpc3RcIl0nXG5jb25zdCBTRUxFQ1RPUl9PVVRFUiA9ICcubmF2LWl0ZW0sIC5saXN0LWdyb3VwLWl0ZW0nXG5jb25zdCBTRUxFQ1RPUl9JTk5FUiA9IGAubmF2LWxpbmske05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9LCAubGlzdC1ncm91cC1pdGVtJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgW3JvbGU9XCJ0YWJcIl0ke05PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEV9YFxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwidGFiXCJdLCBbZGF0YS1icy10b2dnbGU9XCJwaWxsXCJdLCBbZGF0YS1icy10b2dnbGU9XCJsaXN0XCJdJyAvLyB0b2RvOnY2OiBjb3VsZCBiZSBvbmx5IGB0YWJgXG5jb25zdCBTRUxFQ1RPUl9JTk5FUl9FTEVNID0gYCR7U0VMRUNUT1JfSU5ORVJ9LCAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfWBcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFID0gYC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgLiR7Q0xBU1NfTkFNRV9BQ1RJVkV9W2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXWBcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuICAgIHRoaXMuX3BhcmVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9UQUJfUEFORUwpXG5cbiAgICBpZiAoIXRoaXMuX3BhcmVudCkge1xuICAgICAgcmV0dXJuXG4gICAgICAvLyB0b2RvOiBzaG91bGQgVGhyb3cgZXhjZXB0aW9uIG9uIHY2XG4gICAgICAvLyB0aHJvdyBuZXcgVHlwZUVycm9yKGAke2VsZW1lbnQub3V0ZXJIVE1MfSBoYXMgbm90IGEgdmFsaWQgcGFyZW50ICR7U0VMRUNUT1JfSU5ORVJfRUxFTX1gKVxuICAgIH1cblxuICAgIC8vIFNldCB1cCBpbml0aWFsIGFyaWEgYXR0cmlidXRlc1xuICAgIHRoaXMuX3NldEluaXRpYWxBdHRyaWJ1dGVzKHRoaXMuX3BhcmVudCwgdGhpcy5fZ2V0Q2hpbGRyZW4oKSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdygpIHsgLy8gU2hvd3MgdGhpcyBlbGVtIGFuZCBkZWFjdGl2YXRlIHRoZSBhY3RpdmUgc2libGluZyBpZiBleGlzdHNcbiAgICBjb25zdCBpbm5lckVsZW0gPSB0aGlzLl9lbGVtZW50XG4gICAgaWYgKHRoaXMuX2VsZW1Jc0FjdGl2ZShpbm5lckVsZW0pKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBTZWFyY2ggZm9yIGFjdGl2ZSB0YWIgb24gc2FtZSBwYXJlbnQgdG8gZGVhY3RpdmF0ZSBpdFxuICAgIGNvbnN0IGFjdGl2ZSA9IHRoaXMuX2dldEFjdGl2ZUVsZW0oKVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gYWN0aXZlID9cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGFjdGl2ZSwgRVZFTlRfSElERSwgeyByZWxhdGVkVGFyZ2V0OiBpbm5lckVsZW0gfSkgOlxuICAgICAgbnVsbFxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIoaW5uZXJFbGVtLCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQ6IGFjdGl2ZSB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IChoaWRlRXZlbnQgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGFjdGl2ZSwgaW5uZXJFbGVtKVxuICAgIHRoaXMuX2FjdGl2YXRlKGlubmVyRWxlbSwgYWN0aXZlKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgIHRoaXMuX2FjdGl2YXRlKGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpIC8vIFNlYXJjaCBhbmQgYWN0aXZhdGUvc2hvdyB0aGUgcHJvcGVyIHNlY3Rpb25cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCB0cnVlKVxuICAgICAgdGhpcy5fdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgdHJ1ZSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSkpXG4gIH1cblxuICBfZGVhY3RpdmF0ZShlbGVtZW50LCByZWxhdGVkRWxlbSkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGVsZW1lbnQuYmx1cigpXG5cbiAgICB0aGlzLl9kZWFjdGl2YXRlKGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkpIC8vIFNlYXJjaCBhbmQgZGVhY3RpdmF0ZSB0aGUgc2hvd24gc2VjdGlvbiB0b29cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgIT09ICd0YWInKSB7XG4gICAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKVxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJy0xJylcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIGZhbHNlKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIoZWxlbWVudCwgRVZFTlRfSElEREVOLCB7IHJlbGF0ZWRUYXJnZXQ6IHJlbGF0ZWRFbGVtIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcbiAgfVxuXG4gIF9rZXlkb3duKGV2ZW50KSB7XG4gICAgaWYgKCEoW0FSUk9XX0xFRlRfS0VZLCBBUlJPV19SSUdIVF9LRVksIEFSUk9XX1VQX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKS8vIHN0b3BQcm9wYWdhdGlvbi9wcmV2ZW50RGVmYXVsdCBib3RoIGFkZGVkIHRvIHN1cHBvcnQgdXAvZG93biBrZXlzIHdpdGhvdXQgc2Nyb2xsaW5nIHRoZSBwYWdlXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGNvbnN0IGlzTmV4dCA9IFtBUlJPV19SSUdIVF9LRVksIEFSUk9XX0RPV05fS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpXG4gICAgY29uc3QgbmV4dEFjdGl2ZUVsZW1lbnQgPSBnZXROZXh0QWN0aXZlRWxlbWVudCh0aGlzLl9nZXRDaGlsZHJlbigpLmZpbHRlcihlbGVtZW50ID0+ICFpc0Rpc2FibGVkKGVsZW1lbnQpKSwgZXZlbnQudGFyZ2V0LCBpc05leHQsIHRydWUpXG5cbiAgICBpZiAobmV4dEFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50LmZvY3VzKHsgcHJldmVudFNjcm9sbDogdHJ1ZSB9KVxuICAgICAgVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UobmV4dEFjdGl2ZUVsZW1lbnQpLnNob3coKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRDaGlsZHJlbigpIHsgLy8gY29sbGVjdGlvbiBvZiBpbm5lciBlbGVtZW50c1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lOTkVSX0VMRU0sIHRoaXMuX3BhcmVudClcbiAgfVxuXG4gIF9nZXRBY3RpdmVFbGVtKCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRDaGlsZHJlbigpLmZpbmQoY2hpbGQgPT4gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKSkgfHwgbnVsbFxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzKHBhcmVudCwgY2hpbGRyZW4pIHtcbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhwYXJlbnQsICdyb2xlJywgJ3RhYmxpc3QnKVxuXG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbikge1xuICAgICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPbkNoaWxkKGNoaWxkKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpIHtcbiAgICBjaGlsZCA9IHRoaXMuX2dldElubmVyRWxlbWVudChjaGlsZClcbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuX2VsZW1Jc0FjdGl2ZShjaGlsZClcbiAgICBjb25zdCBvdXRlckVsZW0gPSB0aGlzLl9nZXRPdXRlckVsZW1lbnQoY2hpbGQpXG4gICAgY2hpbGQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgaXNBY3RpdmUpXG5cbiAgICBpZiAob3V0ZXJFbGVtICE9PSBjaGlsZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMob3V0ZXJFbGVtLCAncm9sZScsICdwcmVzZW50YXRpb24nKVxuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLCAnLTEnKVxuICAgIH1cblxuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGNoaWxkLCAncm9sZScsICd0YWInKVxuXG4gICAgLy8gc2V0IGF0dHJpYnV0ZXMgdG8gdGhlIHJlbGF0ZWQgcGFuZWwgdG9vXG4gICAgdGhpcy5fc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKVxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25UYXJnZXRQYW5lbChjaGlsZCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoY2hpbGQpXG5cbiAgICBpZiAoIXRhcmdldCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAncm9sZScsICd0YWJwYW5lbCcpXG5cbiAgICBpZiAoY2hpbGQuaWQpIHtcbiAgICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHRhcmdldCwgJ2FyaWEtbGFiZWxsZWRieScsIGAjJHtjaGlsZC5pZH1gKVxuICAgIH1cbiAgfVxuXG4gIF90b2dnbGVEcm9wRG93bihlbGVtZW50LCBvcGVuKSB7XG4gICAgY29uc3Qgb3V0ZXJFbGVtID0gdGhpcy5fZ2V0T3V0ZXJFbGVtZW50KGVsZW1lbnQpXG4gICAgaWYgKCFvdXRlckVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX0RST1BET1dOKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdG9nZ2xlID0gKHNlbGVjdG9yLCBjbGFzc05hbWUpID0+IHtcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHNlbGVjdG9yLCBvdXRlckVsZW0pXG4gICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoY2xhc3NOYW1lLCBvcGVuKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIENMQVNTX05BTUVfQUNUSVZFKVxuICAgIHRvZ2dsZShTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VLCBDTEFTU19OQU1FX1NIT1cpXG4gICAgb3V0ZXJFbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIG9wZW4pXG4gIH1cblxuICBfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoZWxlbWVudCwgYXR0cmlidXRlLCB2YWx1ZSkge1xuICAgIGlmICghZWxlbWVudC5oYXNBdHRyaWJ1dGUoYXR0cmlidXRlKSkge1xuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICBfZWxlbUlzQWN0aXZlKGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gIH1cblxuICAvLyBUcnkgdG8gZ2V0IHRoZSBpbm5lciBlbGVtZW50ICh1c3VhbGx5IHRoZSAubmF2LWxpbmspXG4gIF9nZXRJbm5lckVsZW1lbnQoZWxlbSkge1xuICAgIHJldHVybiBlbGVtLm1hdGNoZXMoU0VMRUNUT1JfSU5ORVJfRUxFTSkgPyBlbGVtIDogU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTk5FUl9FTEVNLCBlbGVtKVxuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgb3V0ZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1pdGVtKVxuICBfZ2V0T3V0ZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5jbG9zZXN0KFNFTEVDVE9SX09VVEVSKSB8fCBlbGVtXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpLnNob3coKVxufSlcblxuLyoqXG4gKiBJbml0aWFsaXplIG9uIGZvY3VzXG4gKi9cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFKSkge1xuICAgIFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQpXG4gIH1cbn0pXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpXG5cbmV4cG9ydCBkZWZhdWx0IFRhYlxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMi4zKTogdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIHJlZmxvdyB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnXG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZydcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcblxuICAgICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0hJREUpIC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KVxuICB9XG5cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6IHtcbiAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6IHtcbiAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpXG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgfVxuXG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIlxuXG4kKGZ1bmN0aW9uICgpIHtcbiAgJChcInNlbGVjdC50cmVlXCIpLmNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQubG9jYXRpb24gPSB0aGlzLnZhbHVlO1xuICB9KTtcbn0pO1xuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcbmltcG9ydCBrbXhfY29sb3JzIGZyb20gXCIuL2tteF9jb2xvcnNcIjtcblxuZnVuY3Rpb24gZ2V0UmFuZG9tSW50KG1heCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaSA9IGdldFJhbmRvbUludChrbXhfY29sb3JzLmluZGV4Lmxlbmd0aCk7XG4gICAgY29uc3QgbmFtZSA9IGtteF9jb2xvcnMuaW5kZXhbaV07XG4gICAgY29uc3QgY29sb3IgPSBrbXhfY29sb3JzW25hbWVdO1xuICAgIGNvbnN0IHggPSAoZ2V0UmFuZG9tSW50KDk5KSAtIDQ4KSAqIDAuMDAyO1xuICAgICQoXCJhXCIpLmNzcyhcInRleHQtc2hhZG93XCIsIFwiMCAwIDBcIik7XG4gICAgJChcImE6aG92ZXJcIikuY3NzKFwidGV4dC1zaGFkb3dcIiwgeCArIFwiZW0gMCAwIFwiICsgY29sb3IpO1xuICB9LCAyMDApO1xufSk7XG4iLCAiY29uc3Qga214X2NvbG9ycyA9IHtcbiAgXCJrbXgtYmxhY2tcIjogICBcIiMxZTFmMWRcIixcbiAgXCJrbXgtYmx1ZVwiOiAgICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTFcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTJcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJrbXgtYmx1ZTNcIjogICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTRcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTVcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJpbmRleFwiOiBbXG4gICAgXCJrbXgtYmxhY2tcIixcbiAgICBcImtteC1ibHVlXCIsXG4gICAgXCJrbXgtYmx1ZTFcIixcbiAgICBcImtteC1ibHVlMlwiLFxuICAgIFwia214LWJsdWUzXCIsXG4gICAgXCJrbXgtYmx1ZTRcIixcbiAgICBcImtteC1ibHVlNVwiLFxuICAgIFwia214LWN5YW5cIixcbiAgICBcImtteC1jeWFuMVwiLFxuICAgIFwia214LWdyZWVuXCIsXG4gICAgXCJrbXgtZ3JlZW4xXCIsXG4gICAgXCJrbXgtb3JhbmdlXCIsXG4gICAgXCJrbXgtb3JhbmdlMVwiLFxuICAgIFwia214LW9yYW5nZTJcIixcbiAgICBcImtteC1waW5rXCIsXG4gICAgXCJrbXgtd2hpdGVcIixcbiAgICBcImtteC13aGl0ZTFcIixcbiAgICBcImtteC13aGl0ZTJcIixcbiAgICBcImtteC15ZWxsb3dcIixcbiAgICBcImtteC15ZWxsb3cxXCIsXG4gICAgXCJrbXgteWVsbG93MlwiLFxuICAgIFwia214LXllbGxvdzNcIlxuICBdLFxuICBcImtteC1jeWFuXCI6ICAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1jeWFuMVwiOiAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1ncmVlblwiOiAgIFwiI2M0ZWQzYVwiLFxuICBcImtteC1ncmVlbjFcIjogIFwiI2M0ZWQzYVwiLFxuICBcImtteC1vcmFuZ2VcIjogIFwiI2Y4NjgxY1wiLFxuICBcImtteC1vcmFuZ2UxXCI6IFwiI2ZhNzczNFwiLFxuICBcImtteC1vcmFuZ2UyXCI6IFwiI2ZmYTUzMlwiLFxuICBcImtteC1waW5rXCI6ICAgIFwiI2ZjOWVmOVwiLFxuICBcImtteC13aGl0ZVwiOiAgIFwiI2Y1ZjhmNFwiLFxuICBcImtteC13aGl0ZTFcIjogIFwiI2ZmZjlmMlwiLFxuICBcImtteC13aGl0ZTJcIjogIFwiI2ZmZmZmZlwiLFxuICBcImtteC15ZWxsb3dcIjogIFwiI2VjZmU0OVwiLFxuICBcImtteC15ZWxsb3cxXCI6IFwiI2ZmZjQzZVwiLFxuICBcImtteC15ZWxsb3cyXCI6ICBcIiNlY2ZlNDlcIixcbiAgXCJrbXgteWVsbG93M1wiOiBcIiNmZmY0M2VcIlxufTtcbmV4cG9ydCBkZWZhdWx0IGtteF9jb2xvcnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbigpIHtcbiAgdmFyIFBvbHlmaWxsRXZlbnQgPSBldmVudENvbnN0cnVjdG9yKCk7XG5cbiAgZnVuY3Rpb24gZXZlbnRDb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gd2luZG93LkN1c3RvbUV2ZW50O1xuICAgIC8vIElFPD05IFN1cHBvcnRcbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge2J1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiBmYWxzZSwgZGV0YWlsOiB1bmRlZmluZWR9O1xuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRIaWRkZW5JbnB1dChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICBpbnB1dC5uYW1lID0gbmFtZTtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGVsZW1lbnQsIHRhcmdldE1vZGlmaWVyS2V5KSB7XG4gICAgdmFyIHRvID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvXCIpLFxuICAgICAgICBtZXRob2QgPSBidWlsZEhpZGRlbklucHV0KFwiX21ldGhvZFwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbWV0aG9kXCIpKSxcbiAgICAgICAgY3NyZiA9IGJ1aWxkSGlkZGVuSW5wdXQoXCJfY3NyZl90b2tlblwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY3NyZlwiKSksXG4gICAgICAgIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKSxcbiAgICAgICAgc3VibWl0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpLFxuICAgICAgICB0YXJnZXQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcblxuICAgIGZvcm0ubWV0aG9kID0gKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1tZXRob2RcIikgPT09IFwiZ2V0XCIpID8gXCJnZXRcIiA6IFwicG9zdFwiO1xuICAgIGZvcm0uYWN0aW9uID0gdG87XG4gICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICBpZiAodGFyZ2V0KSBmb3JtLnRhcmdldCA9IHRhcmdldDtcbiAgICBlbHNlIGlmICh0YXJnZXRNb2RpZmllcktleSkgZm9ybS50YXJnZXQgPSBcIl9ibGFua1wiO1xuXG4gICAgZm9ybS5hcHBlbmRDaGlsZChjc3JmKTtcbiAgICBmb3JtLmFwcGVuZENoaWxkKG1ldGhvZCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcblxuICAgIC8vIEluc2VydCBhIGJ1dHRvbiBhbmQgY2xpY2sgaXQgaW5zdGVhZCBvZiB1c2luZyBgZm9ybS5zdWJtaXRgXG4gICAgLy8gYmVjYXVzZSB0aGUgYHN1Ym1pdGAgZnVuY3Rpb24gZG9lcyBub3QgZW1pdCBhIGBzdWJtaXRgIGV2ZW50LlxuICAgIHN1Ym1pdC50eXBlID0gXCJzdWJtaXRcIjtcbiAgICBmb3JtLmFwcGVuZENoaWxkKHN1Ym1pdCk7XG4gICAgc3VibWl0LmNsaWNrKCk7XG4gIH1cblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGUudGFyZ2V0O1xuICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKSB7XG4gICAgICB2YXIgcGhvZW5peExpbmtFdmVudCA9IG5ldyBQb2x5ZmlsbEV2ZW50KCdwaG9lbml4LmxpbmsuY2xpY2snLCB7XG4gICAgICAgIFwiYnViYmxlc1wiOiB0cnVlLCBcImNhbmNlbGFibGVcIjogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZWxlbWVudC5kaXNwYXRjaEV2ZW50KHBob2VuaXhMaW5rRXZlbnQpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1ldGhvZFwiKSkge1xuICAgICAgICBoYW5kbGVDbGljayhlbGVtZW50LCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIGZhbHNlKTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGhvZW5peC5saW5rLmNsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgbWVzc2FnZSA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtY29uZmlybVwiKTtcbiAgICBpZihtZXNzYWdlICYmICF3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xufSkoKTtcbiIsICIvLyB3cmFwcyB2YWx1ZSBpbiBjbG9zdXJlIG9yIHJldHVybnMgY2xvc3VyZVxuZXhwb3J0IGxldCBjbG9zdXJlID0gKHZhbHVlKSA9PiB7XG4gIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICByZXR1cm4gdmFsdWVcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2xvc3VyZSA9IGZ1bmN0aW9uICgpeyByZXR1cm4gdmFsdWUgfVxuICAgIHJldHVybiBjbG9zdXJlXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZ2xvYmFsU2VsZiA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGxcbmV4cG9ydCBjb25zdCBwaHhXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogbnVsbFxuZXhwb3J0IGNvbnN0IGdsb2JhbCA9IGdsb2JhbFNlbGYgfHwgcGh4V2luZG93IHx8IGdsb2JhbFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVlNOID0gXCIyLjAuMFwiXG5leHBvcnQgY29uc3QgU09DS0VUX1NUQVRFUyA9IHtjb25uZWN0aW5nOiAwLCBvcGVuOiAxLCBjbG9zaW5nOiAyLCBjbG9zZWQ6IDN9XG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUID0gMTAwMDBcbmV4cG9ydCBjb25zdCBXU19DTE9TRV9OT1JNQUwgPSAxMDAwXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9TVEFURVMgPSB7XG4gIGNsb3NlZDogXCJjbG9zZWRcIixcbiAgZXJyb3JlZDogXCJlcnJvcmVkXCIsXG4gIGpvaW5lZDogXCJqb2luZWRcIixcbiAgam9pbmluZzogXCJqb2luaW5nXCIsXG4gIGxlYXZpbmc6IFwibGVhdmluZ1wiLFxufVxuZXhwb3J0IGNvbnN0IENIQU5ORUxfRVZFTlRTID0ge1xuICBjbG9zZTogXCJwaHhfY2xvc2VcIixcbiAgZXJyb3I6IFwicGh4X2Vycm9yXCIsXG4gIGpvaW46IFwicGh4X2pvaW5cIixcbiAgcmVwbHk6IFwicGh4X3JlcGx5XCIsXG4gIGxlYXZlOiBcInBoeF9sZWF2ZVwiXG59XG5cbmV4cG9ydCBjb25zdCBUUkFOU1BPUlRTID0ge1xuICBsb25ncG9sbDogXCJsb25ncG9sbFwiLFxuICB3ZWJzb2NrZXQ6IFwid2Vic29ja2V0XCJcbn1cbmV4cG9ydCBjb25zdCBYSFJfU1RBVEVTID0ge1xuICBjb21wbGV0ZTogNFxufVxuIiwgIi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIFB1c2hcbiAqIEBwYXJhbSB7Q2hhbm5lbH0gY2hhbm5lbCAtIFRoZSBDaGFubmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBUaGUgZXZlbnQsIGZvciBleGFtcGxlIGBcInBoeF9qb2luXCJgXG4gKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkLCBmb3IgZXhhbXBsZSBge3VzZXJfaWQ6IDEyM31gXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCAtIFRoZSBwdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1c2gge1xuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBldmVudCwgcGF5bG9hZCwgdGltZW91dCl7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbFxuICAgIHRoaXMuZXZlbnQgPSBldmVudFxuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQgfHwgZnVuY3Rpb24gKCl7IHJldHVybiB7fSB9XG4gICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICAgIHRoaXMudGltZW91dFRpbWVyID0gbnVsbFxuICAgIHRoaXMucmVjSG9va3MgPSBbXVxuICAgIHRoaXMuc2VudCA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcbiAgICovXG4gIHJlc2VuZCh0aW1lb3V0KXtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gICAgdGhpcy5yZXNldCgpXG4gICAgdGhpcy5zZW5kKClcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgc2VuZCgpe1xuICAgIGlmKHRoaXMuaGFzUmVjZWl2ZWQoXCJ0aW1lb3V0XCIpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnN0YXJ0VGltZW91dCgpXG4gICAgdGhpcy5zZW50ID0gdHJ1ZVxuICAgIHRoaXMuY2hhbm5lbC5zb2NrZXQucHVzaCh7XG4gICAgICB0b3BpYzogdGhpcy5jaGFubmVsLnRvcGljLFxuICAgICAgZXZlbnQ6IHRoaXMuZXZlbnQsXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQoKSxcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBqb2luX3JlZjogdGhpcy5jaGFubmVsLmpvaW5SZWYoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsqfSBzdGF0dXNcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcmVjZWl2ZShzdGF0dXMsIGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLmhhc1JlY2VpdmVkKHN0YXR1cykpe1xuICAgICAgY2FsbGJhY2sodGhpcy5yZWNlaXZlZFJlc3AucmVzcG9uc2UpXG4gICAgfVxuXG4gICAgdGhpcy5yZWNIb29rcy5wdXNoKHtzdGF0dXMsIGNhbGxiYWNrfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXNldCgpe1xuICAgIHRoaXMuY2FuY2VsUmVmRXZlbnQoKVxuICAgIHRoaXMucmVmID0gbnVsbFxuICAgIHRoaXMucmVmRXZlbnQgPSBudWxsXG4gICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBudWxsXG4gICAgdGhpcy5zZW50ID0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF0Y2hSZWNlaXZlKHtzdGF0dXMsIHJlc3BvbnNlLCBfcmVmfSl7XG4gICAgdGhpcy5yZWNIb29rcy5maWx0ZXIoaCA9PiBoLnN0YXR1cyA9PT0gc3RhdHVzKVxuICAgICAgLmZvckVhY2goaCA9PiBoLmNhbGxiYWNrKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsUmVmRXZlbnQoKXtcbiAgICBpZighdGhpcy5yZWZFdmVudCl7IHJldHVybiB9XG4gICAgdGhpcy5jaGFubmVsLm9mZih0aGlzLnJlZkV2ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0KCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFRpbWVyKVxuICAgIHRoaXMudGltZW91dFRpbWVyID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGFydFRpbWVvdXQoKXtcbiAgICBpZih0aGlzLnRpbWVvdXRUaW1lcil7IHRoaXMuY2FuY2VsVGltZW91dCgpIH1cbiAgICB0aGlzLnJlZiA9IHRoaXMuY2hhbm5lbC5zb2NrZXQubWFrZVJlZigpXG4gICAgdGhpcy5yZWZFdmVudCA9IHRoaXMuY2hhbm5lbC5yZXBseUV2ZW50TmFtZSh0aGlzLnJlZilcblxuICAgIHRoaXMuY2hhbm5lbC5vbih0aGlzLnJlZkV2ZW50LCBwYXlsb2FkID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsUmVmRXZlbnQoKVxuICAgICAgdGhpcy5jYW5jZWxUaW1lb3V0KClcbiAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gcGF5bG9hZFxuICAgICAgdGhpcy5tYXRjaFJlY2VpdmUocGF5bG9hZClcbiAgICB9KVxuXG4gICAgdGhpcy50aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlcihcInRpbWVvdXRcIiwge30pXG4gICAgfSwgdGhpcy50aW1lb3V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoYXNSZWNlaXZlZChzdGF0dXMpe1xuICAgIHJldHVybiB0aGlzLnJlY2VpdmVkUmVzcCAmJiB0aGlzLnJlY2VpdmVkUmVzcC5zdGF0dXMgPT09IHN0YXR1c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmlnZ2VyKHN0YXR1cywgcmVzcG9uc2Upe1xuICAgIHRoaXMuY2hhbm5lbC50cmlnZ2VyKHRoaXMucmVmRXZlbnQsIHtzdGF0dXMsIHJlc3BvbnNlfSlcbiAgfVxufVxuIiwgIi8qKlxuICpcbiAqIENyZWF0ZXMgYSB0aW1lciB0aGF0IGFjY2VwdHMgYSBgdGltZXJDYWxjYCBmdW5jdGlvbiB0byBwZXJmb3JtXG4gKiBjYWxjdWxhdGVkIHRpbWVvdXQgcmV0cmllcywgc3VjaCBhcyBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBleGFtcGxlXG4gKiBsZXQgcmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4gdGhpcy5jb25uZWN0KCksIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMDAwLCA1MDAwLCAxMDAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMFxuICogfSlcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDUwMDBcbiAqIHJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gdGltZXJDYWxjXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWVyIHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWVyQ2FsYyl7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGNcbiAgICB0aGlzLnRpbWVyID0gbnVsbFxuICAgIHRoaXMudHJpZXMgPSAwXG4gIH1cblxuICByZXNldCgpe1xuICAgIHRoaXMudHJpZXMgPSAwXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhbnkgcHJldmlvdXMgc2NoZWR1bGVUaW1lb3V0IGFuZCBzY2hlZHVsZXMgY2FsbGJhY2tcbiAgICovXG4gIHNjaGVkdWxlVGltZW91dCgpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKVxuXG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmllcyA9IHRoaXMudHJpZXMgKyAxXG4gICAgICB0aGlzLmNhbGxiYWNrKClcbiAgICB9LCB0aGlzLnRpbWVyQ2FsYyh0aGlzLnRyaWVzICsgMSkpXG4gIH1cbn1cbiIsICJpbXBvcnQge2Nsb3N1cmV9IGZyb20gXCIuL3V0aWxzXCJcbmltcG9ydCB7XG4gIENIQU5ORUxfRVZFTlRTLFxuICBDSEFOTkVMX1NUQVRFUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IFB1c2ggZnJvbSBcIi4vcHVzaFwiXG5pbXBvcnQgVGltZXIgZnJvbSBcIi4vdGltZXJcIlxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9waWNcbiAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbil9IHBhcmFtc1xuICogQHBhcmFtIHtTb2NrZXR9IHNvY2tldFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIHtcbiAgY29uc3RydWN0b3IodG9waWMsIHBhcmFtcywgc29ja2V0KXtcbiAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuY2xvc2VkXG4gICAgdGhpcy50b3BpYyA9IHRvcGljXG4gICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKHBhcmFtcyB8fCB7fSlcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMuYmluZGluZ3MgPSBbXVxuICAgIHRoaXMuYmluZGluZ1JlZiA9IDBcbiAgICB0aGlzLnRpbWVvdXQgPSB0aGlzLnNvY2tldC50aW1lb3V0XG4gICAgdGhpcy5qb2luZWRPbmNlID0gZmFsc2VcbiAgICB0aGlzLmpvaW5QdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMuam9pbiwgdGhpcy5wYXJhbXMsIHRoaXMudGltZW91dClcbiAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzID0gW11cblxuICAgIHRoaXMucmVqb2luVGltZXIgPSBuZXcgVGltZXIoKCkgPT4ge1xuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luKCkgfVxuICAgIH0sIHRoaXMuc29ja2V0LnJlam9pbkFmdGVyTXMpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZVJlZnMucHVzaCh0aGlzLnNvY2tldC5vbkVycm9yKCgpID0+IHRoaXMucmVqb2luVGltZXIucmVzZXQoKSkpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZVJlZnMucHVzaCh0aGlzLnNvY2tldC5vbk9wZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgICBpZih0aGlzLmlzRXJyb3JlZCgpKXsgdGhpcy5yZWpvaW4oKSB9XG4gICAgfSlcbiAgICApXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwib2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5lZFxuICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIuZm9yRWFjaChwdXNoRXZlbnQgPT4gcHVzaEV2ZW50LnNlbmQoKSlcbiAgICAgIHRoaXMucHVzaEJ1ZmZlciA9IFtdXG4gICAgfSlcbiAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoXCJlcnJvclwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5vbkNsb3NlKCgpID0+IHtcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgaWYodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYGNsb3NlICR7dGhpcy50b3BpY30gJHt0aGlzLmpvaW5SZWYoKX1gKVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZFxuICAgICAgdGhpcy5zb2NrZXQucmVtb3ZlKHRoaXMpXG4gICAgfSlcbiAgICB0aGlzLm9uRXJyb3IocmVhc29uID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBlcnJvciAke3RoaXMudG9waWN9YCwgcmVhc29uKVxuICAgICAgaWYodGhpcy5pc0pvaW5pbmcoKSl7IHRoaXMuam9pblB1c2gucmVzZXQoKSB9XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgdGltZW91dCAke3RoaXMudG9waWN9ICgke3RoaXMuam9pblJlZigpfSlgLCB0aGlzLmpvaW5QdXNoLnRpbWVvdXQpXG4gICAgICBsZXQgbGVhdmVQdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMubGVhdmUsIGNsb3N1cmUoe30pLCB0aGlzLnRpbWVvdXQpXG4gICAgICBsZWF2ZVB1c2guc2VuZCgpXG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgdGhpcy5qb2luUHVzaC5yZXNldCgpXG4gICAgICBpZih0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpKXsgdGhpcy5yZWpvaW5UaW1lci5zY2hlZHVsZVRpbWVvdXQoKSB9XG4gICAgfSlcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLnJlcGx5LCAocGF5bG9hZCwgcmVmKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIodGhpcy5yZXBseUV2ZW50TmFtZShyZWYpLCBwYXlsb2FkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSm9pbiB0aGUgY2hhbm5lbFxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWVvdXRcbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBqb2luKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpe1xuICAgIGlmKHRoaXMuam9pbmVkT25jZSl7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cmllZCB0byBqb2luIG11bHRpcGxlIHRpbWVzLiAnam9pbicgY2FuIG9ubHkgYmUgY2FsbGVkIGEgc2luZ2xlIHRpbWUgcGVyIGNoYW5uZWwgaW5zdGFuY2VcIilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICAgICAgdGhpcy5qb2luZWRPbmNlID0gdHJ1ZVxuICAgICAgdGhpcy5yZWpvaW4oKVxuICAgICAgcmV0dXJuIHRoaXMuam9pblB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSG9vayBpbnRvIGNoYW5uZWwgY2xvc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uQ2xvc2UoY2FsbGJhY2spe1xuICAgIHRoaXMub24oQ0hBTk5FTF9FVkVOVFMuY2xvc2UsIGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGVycm9yc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25FcnJvcihjYWxsYmFjayl7XG4gICAgcmV0dXJuIHRoaXMub24oQ0hBTk5FTF9FVkVOVFMuZXJyb3IsIHJlYXNvbiA9PiBjYWxsYmFjayhyZWFzb24pKVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgb24gY2hhbm5lbCBldmVudHNcbiAgICpcbiAgICogU3Vic2NyaXB0aW9uIHJldHVybnMgYSByZWYgY291bnRlciwgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgdG9cbiAgICogdW5zdWJzY3JpYmUgdGhlIGV4YWN0IGV2ZW50IGxpc3RlbmVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJlZjEgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fc3R1ZmYpXG4gICAqIGNvbnN0IHJlZjIgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fb3RoZXJfc3R1ZmYpXG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIiwgcmVmMSlcbiAgICogLy8gU2luY2UgdW5zdWJzY3JpcHRpb24sIGRvX3N0dWZmIHdvbid0IGZpcmUsXG4gICAqIC8vIHdoaWxlIGRvX290aGVyX3N0dWZmIHdpbGwga2VlcCBmaXJpbmcgb24gdGhlIFwiZXZlbnRcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge2ludGVnZXJ9IHJlZlxuICAgKi9cbiAgb24oZXZlbnQsIGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5iaW5kaW5nUmVmKytcbiAgICB0aGlzLmJpbmRpbmdzLnB1c2goe2V2ZW50LCByZWYsIGNhbGxiYWNrfSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmVzIG9mZiBvZiBjaGFubmVsIGV2ZW50c1xuICAgKlxuICAgKiBVc2UgdGhlIHJlZiByZXR1cm5lZCBmcm9tIGEgY2hhbm5lbC5vbigpIHRvIHVuc3Vic2NyaWJlIG9uZVxuICAgKiBoYW5kbGVyLCBvciBwYXNzIG5vdGhpbmcgZm9yIHRoZSByZWYgdG8gdW5zdWJzY3JpYmUgYWxsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFVuc3Vic2NyaWJlIHRoZSBkb19zdHVmZiBoYW5kbGVyXG4gICAqIGNvbnN0IHJlZjEgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fc3R1ZmYpXG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIiwgcmVmMSlcbiAgICpcbiAgICogLy8gVW5zdWJzY3JpYmUgYWxsIGhhbmRsZXJzIGZyb20gZXZlbnRcbiAgICogY2hhbm5lbC5vZmYoXCJldmVudFwiKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSByZWZcbiAgICovXG4gIG9mZihldmVudCwgcmVmKXtcbiAgICB0aGlzLmJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncy5maWx0ZXIoKGJpbmQpID0+IHtcbiAgICAgIHJldHVybiAhKGJpbmQuZXZlbnQgPT09IGV2ZW50ICYmICh0eXBlb2YgcmVmID09PSBcInVuZGVmaW5lZFwiIHx8IHJlZiA9PT0gYmluZC5yZWYpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhblB1c2goKXsgcmV0dXJuIHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkgJiYgdGhpcy5pc0pvaW5lZCgpIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIGBldmVudGAgdG8gcGhvZW5peCB3aXRoIHRoZSBwYXlsb2FkIGBwYXlsb2FkYC5cbiAgICogUGhvZW5peCByZWNlaXZlcyB0aGlzIGluIHRoZSBgaGFuZGxlX2luKGV2ZW50LCBwYXlsb2FkLCBzb2NrZXQpYFxuICAgKiBmdW5jdGlvbi4gaWYgcGhvZW5peCByZXBsaWVzIG9yIGl0IHRpbWVzIG91dCAoZGVmYXVsdCAxMDAwMG1zKSxcbiAgICogdGhlbiBvcHRpb25hbGx5IHRoZSByZXBseSBjYW4gYmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNoYW5uZWwucHVzaChcImV2ZW50XCIpXG4gICAqICAgLnJlY2VpdmUoXCJva1wiLCBwYXlsb2FkID0+IGNvbnNvbGUubG9nKFwicGhvZW5peCByZXBsaWVkOlwiLCBwYXlsb2FkKSlcbiAgICogICAucmVjZWl2ZShcImVycm9yXCIsIGVyciA9PiBjb25zb2xlLmxvZyhcInBob2VuaXggZXJyb3JlZFwiLCBlcnIpKVxuICAgKiAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBjb25zb2xlLmxvZyhcInRpbWVkIG91dCBwdXNoaW5nXCIpKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XVxuICAgKiBAcmV0dXJucyB7UHVzaH1cbiAgICovXG4gIHB1c2goZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpe1xuICAgIHBheWxvYWQgPSBwYXlsb2FkIHx8IHt9XG4gICAgaWYoIXRoaXMuam9pbmVkT25jZSl7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyaWVkIHRvIHB1c2ggJyR7ZXZlbnR9JyB0byAnJHt0aGlzLnRvcGljfScgYmVmb3JlIGpvaW5pbmcuIFVzZSBjaGFubmVsLmpvaW4oKSBiZWZvcmUgcHVzaGluZyBldmVudHNgKVxuICAgIH1cbiAgICBsZXQgcHVzaEV2ZW50ID0gbmV3IFB1c2godGhpcywgZXZlbnQsIGZ1bmN0aW9uICgpeyByZXR1cm4gcGF5bG9hZCB9LCB0aW1lb3V0KVxuICAgIGlmKHRoaXMuY2FuUHVzaCgpKXtcbiAgICAgIHB1c2hFdmVudC5zZW5kKClcbiAgICB9IGVsc2Uge1xuICAgICAgcHVzaEV2ZW50LnN0YXJ0VGltZW91dCgpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIucHVzaChwdXNoRXZlbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHB1c2hFdmVudFxuICB9XG5cbiAgLyoqIExlYXZlcyB0aGUgY2hhbm5lbFxuICAgKlxuICAgKiBVbnN1YnNjcmliZXMgZnJvbSBzZXJ2ZXIgZXZlbnRzLCBhbmRcbiAgICogaW5zdHJ1Y3RzIGNoYW5uZWwgdG8gdGVybWluYXRlIG9uIHNlcnZlclxuICAgKlxuICAgKiBUcmlnZ2VycyBvbkNsb3NlKCkgaG9va3NcbiAgICpcbiAgICogVG8gcmVjZWl2ZSBsZWF2ZSBhY2tub3dsZWRnZW1lbnRzLCB1c2UgdGhlIGByZWNlaXZlYFxuICAgKiBob29rIHRvIGJpbmQgdG8gdGhlIHNlcnZlciBhY2ssIGllOlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjaGFubmVsLmxlYXZlKCkucmVjZWl2ZShcIm9rXCIsICgpID0+IGFsZXJ0KFwibGVmdCFcIikgKVxuICAgKlxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWVvdXRcbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBsZWF2ZSh0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KClcbiAgICB0aGlzLmpvaW5QdXNoLmNhbmNlbFRpbWVvdXQoKVxuXG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmxlYXZpbmdcbiAgICBsZXQgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBsZWF2ZSAke3RoaXMudG9waWN9YClcbiAgICAgIHRoaXMudHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5jbG9zZSwgXCJsZWF2ZVwiKVxuICAgIH1cbiAgICBsZXQgbGVhdmVQdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMubGVhdmUsIGNsb3N1cmUoe30pLCB0aW1lb3V0KVxuICAgIGxlYXZlUHVzaC5yZWNlaXZlKFwib2tcIiwgKCkgPT4gb25DbG9zZSgpKVxuICAgICAgLnJlY2VpdmUoXCJ0aW1lb3V0XCIsICgpID0+IG9uQ2xvc2UoKSlcbiAgICBsZWF2ZVB1c2guc2VuZCgpXG4gICAgaWYoIXRoaXMuY2FuUHVzaCgpKXsgbGVhdmVQdXNoLnRyaWdnZXIoXCJva1wiLCB7fSkgfVxuXG4gICAgcmV0dXJuIGxlYXZlUHVzaFxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRhYmxlIG1lc3NhZ2UgaG9va1xuICAgKlxuICAgKiBSZWNlaXZlcyBhbGwgZXZlbnRzIGZvciBzcGVjaWFsaXplZCBtZXNzYWdlIGhhbmRsaW5nXG4gICAqIGJlZm9yZSBkaXNwYXRjaGluZyB0byB0aGUgY2hhbm5lbCBjYWxsYmFja3MuXG4gICAqXG4gICAqIE11c3QgcmV0dXJuIHRoZSBwYXlsb2FkLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHJlZlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgb25NZXNzYWdlKF9ldmVudCwgcGF5bG9hZCwgX3JlZil7IHJldHVybiBwYXlsb2FkIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pblJlZil7XG4gICAgaWYodGhpcy50b3BpYyAhPT0gdG9waWMpeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgaWYoam9pblJlZiAmJiBqb2luUmVmICE9PSB0aGlzLmpvaW5SZWYoKSl7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBcImRyb3BwaW5nIG91dGRhdGVkIG1lc3NhZ2VcIiwge3RvcGljLCBldmVudCwgcGF5bG9hZCwgam9pblJlZn0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGpvaW5SZWYoKXsgcmV0dXJuIHRoaXMuam9pblB1c2gucmVmIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBpZih0aGlzLmlzTGVhdmluZygpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnNvY2tldC5sZWF2ZU9wZW5Ub3BpYyh0aGlzLnRvcGljKVxuICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5qb2luaW5nXG4gICAgdGhpcy5qb2luUHVzaC5yZXNlbmQodGltZW91dClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJpZ2dlcihldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luUmVmKXtcbiAgICBsZXQgaGFuZGxlZFBheWxvYWQgPSB0aGlzLm9uTWVzc2FnZShldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luUmVmKVxuICAgIGlmKHBheWxvYWQgJiYgIWhhbmRsZWRQYXlsb2FkKXsgdGhyb3cgbmV3IEVycm9yKFwiY2hhbm5lbCBvbk1lc3NhZ2UgY2FsbGJhY2tzIG11c3QgcmV0dXJuIHRoZSBwYXlsb2FkLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkXCIpIH1cblxuICAgIGxldCBldmVudEJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncy5maWx0ZXIoYmluZCA9PiBiaW5kLmV2ZW50ID09PSBldmVudClcblxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBldmVudEJpbmRpbmdzLmxlbmd0aDsgaSsrKXtcbiAgICAgIGxldCBiaW5kID0gZXZlbnRCaW5kaW5nc1tpXVxuICAgICAgYmluZC5jYWxsYmFjayhoYW5kbGVkUGF5bG9hZCwgcmVmLCBqb2luUmVmIHx8IHRoaXMuam9pblJlZigpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVwbHlFdmVudE5hbWUocmVmKXsgcmV0dXJuIGBjaGFuX3JlcGx5XyR7cmVmfWAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNDbG9zZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmNsb3NlZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0Vycm9yZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmVycm9yZWQgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNKb2luZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5lZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0pvaW5pbmcoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5pbmcgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNMZWF2aW5nKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nIH1cbn1cbiIsICJpbXBvcnQge1xuICBnbG9iYWwsXG4gIFhIUl9TVEFURVNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWpheCB7XG5cbiAgc3RhdGljIHJlcXVlc3QobWV0aG9kLCBlbmRQb2ludCwgYWNjZXB0LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICBpZihnbG9iYWwuWERvbWFpblJlcXVlc3Qpe1xuICAgICAgbGV0IHJlcSA9IG5ldyBnbG9iYWwuWERvbWFpblJlcXVlc3QoKSAvLyBJRTgsIElFOVxuICAgICAgcmV0dXJuIHRoaXMueGRvbWFpblJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVxID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpIC8vIElFNyssIEZpcmVmb3gsIENocm9tZSwgT3BlcmEsIFNhZmFyaVxuICAgICAgcmV0dXJuIHRoaXMueGhyUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgeGRvbWFpblJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICByZXEudGltZW91dCA9IHRpbWVvdXRcbiAgICByZXEub3BlbihtZXRob2QsIGVuZFBvaW50KVxuICAgIHJlcS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLnBhcnNlSlNPTihyZXEucmVzcG9uc2VUZXh0KVxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcG9uc2UpXG4gICAgfVxuICAgIGlmKG9udGltZW91dCl7IHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQgfVxuXG4gICAgLy8gV29yayBhcm91bmQgYnVnIGluIElFOSB0aGF0IHJlcXVpcmVzIGFuIGF0dGFjaGVkIG9ucHJvZ3Jlc3MgaGFuZGxlclxuICAgIHJlcS5vbnByb2dyZXNzID0gKCkgPT4geyB9XG5cbiAgICByZXEuc2VuZChib2R5KVxuICAgIHJldHVybiByZXFcbiAgfVxuXG4gIHN0YXRpYyB4aHJSZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYWNjZXB0LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICByZXEub3BlbihtZXRob2QsIGVuZFBvaW50LCB0cnVlKVxuICAgIHJlcS50aW1lb3V0ID0gdGltZW91dFxuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIGFjY2VwdClcbiAgICByZXEub25lcnJvciA9ICgpID0+IGNhbGxiYWNrICYmIGNhbGxiYWNrKG51bGwpXG4gICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmKHJlcS5yZWFkeVN0YXRlID09PSBYSFJfU1RBVEVTLmNvbXBsZXRlICYmIGNhbGxiYWNrKXtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5wYXJzZUpTT04ocmVxLnJlc3BvbnNlVGV4dClcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuICAgIGlmKG9udGltZW91dCl7IHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQgfVxuXG4gICAgcmVxLnNlbmQoYm9keSlcbiAgICByZXR1cm4gcmVxXG4gIH1cblxuICBzdGF0aWMgcGFyc2VKU09OKHJlc3Ape1xuICAgIGlmKCFyZXNwIHx8IHJlc3AgPT09IFwiXCIpeyByZXR1cm4gbnVsbCB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcClcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coXCJmYWlsZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZVwiLCByZXNwKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgcGFyZW50S2V5KXtcbiAgICBsZXQgcXVlcnlTdHIgPSBbXVxuICAgIGZvcih2YXIga2V5IGluIG9iail7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSl7IGNvbnRpbnVlIH1cbiAgICAgIGxldCBwYXJhbUtleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXlcbiAgICAgIGxldCBwYXJhbVZhbCA9IG9ialtrZXldXG4gICAgICBpZih0eXBlb2YgcGFyYW1WYWwgPT09IFwib2JqZWN0XCIpe1xuICAgICAgICBxdWVyeVN0ci5wdXNoKHRoaXMuc2VyaWFsaXplKHBhcmFtVmFsLCBwYXJhbUtleSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVN0ci5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChwYXJhbUtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0ci5qb2luKFwiJlwiKVxuICB9XG5cbiAgc3RhdGljIGFwcGVuZFBhcmFtcyh1cmwsIHBhcmFtcyl7XG4gICAgaWYoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT09IDApeyByZXR1cm4gdXJsIH1cblxuICAgIGxldCBwcmVmaXggPSB1cmwubWF0Y2goL1xcPy8pID8gXCImXCIgOiBcIj9cIlxuICAgIHJldHVybiBgJHt1cmx9JHtwcmVmaXh9JHt0aGlzLnNlcmlhbGl6ZShwYXJhbXMpfWBcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFNPQ0tFVF9TVEFURVMsXG4gIFRSQU5TUE9SVFNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IEFqYXggZnJvbSBcIi4vYWpheFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvbmdQb2xsIHtcblxuICBjb25zdHJ1Y3RvcihlbmRQb2ludCl7XG4gICAgdGhpcy5lbmRQb2ludCA9IG51bGxcbiAgICB0aGlzLnRva2VuID0gbnVsbFxuICAgIHRoaXMuc2tpcEhlYXJ0YmVhdCA9IHRydWVcbiAgICB0aGlzLnJlcXMgPSBuZXcgU2V0KClcbiAgICB0aGlzLm9ub3BlbiA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICB0aGlzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5vbmNsb3NlID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgIHRoaXMucG9sbEVuZHBvaW50ID0gdGhpcy5ub3JtYWxpemVFbmRwb2ludChlbmRQb2ludClcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLmNvbm5lY3RpbmdcbiAgICB0aGlzLnBvbGwoKVxuICB9XG5cbiAgbm9ybWFsaXplRW5kcG9pbnQoZW5kUG9pbnQpe1xuICAgIHJldHVybiAoZW5kUG9pbnRcbiAgICAgIC5yZXBsYWNlKFwid3M6Ly9cIiwgXCJodHRwOi8vXCIpXG4gICAgICAucmVwbGFjZShcIndzczovL1wiLCBcImh0dHBzOi8vXCIpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKFwiKC4qKVxcL1wiICsgVFJBTlNQT1JUUy53ZWJzb2NrZXQpLCBcIiQxL1wiICsgVFJBTlNQT1JUUy5sb25ncG9sbCkpXG4gIH1cblxuICBlbmRwb2ludFVSTCgpe1xuICAgIHJldHVybiBBamF4LmFwcGVuZFBhcmFtcyh0aGlzLnBvbGxFbmRwb2ludCwge3Rva2VuOiB0aGlzLnRva2VufSlcbiAgfVxuXG4gIGNsb3NlQW5kUmV0cnkoY29kZSwgcmVhc29uLCB3YXNDbGVhbil7XG4gICAgdGhpcy5jbG9zZShjb2RlLCByZWFzb24sIHdhc0NsZWFuKVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMuY29ubmVjdGluZ1xuICB9XG5cbiAgb250aW1lb3V0KCl7XG4gICAgdGhpcy5vbmVycm9yKFwidGltZW91dFwiKVxuICAgIHRoaXMuY2xvc2VBbmRSZXRyeSgxMDA1LCBcInRpbWVvdXRcIiwgZmFsc2UpXG4gIH1cblxuICBpc0FjdGl2ZSgpeyByZXR1cm4gdGhpcy5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLm9wZW4gfHwgdGhpcy5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLmNvbm5lY3RpbmcgfVxuXG4gIHBvbGwoKXtcbiAgICB0aGlzLmFqYXgoXCJHRVRcIiwgbnVsbCwgKCkgPT4gdGhpcy5vbnRpbWVvdXQoKSwgcmVzcCA9PiB7XG4gICAgICBpZihyZXNwKXtcbiAgICAgICAgdmFyIHtzdGF0dXMsIHRva2VuLCBtZXNzYWdlc30gPSByZXNwXG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdHVzID0gMFxuICAgICAgfVxuXG4gICAgICBzd2l0Y2goc3RhdHVzKXtcbiAgICAgICAgY2FzZSAyMDA6XG4gICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtc2cgPT4ge1xuICAgICAgICAgICAgLy8gVGFza3MgYXJlIHdoYXQgdGhpbmdzIGxpa2UgZXZlbnQgaGFuZGxlcnMsIHNldFRpbWVvdXQgY2FsbGJhY2tzLFxuICAgICAgICAgICAgLy8gcHJvbWlzZSByZXNvbHZlcyBhbmQgbW9yZSBhcmUgcnVuIHdpdGhpbi5cbiAgICAgICAgICAgIC8vIEluIG1vZGVybiBicm93c2VycywgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQga2luZHMgb2YgdGFza3MsXG4gICAgICAgICAgICAvLyBtaWNyb3Rhc2tzIGFuZCBtYWNyb3Rhc2tzLlxuICAgICAgICAgICAgLy8gTWljcm90YXNrcyBhcmUgbWFpbmx5IHVzZWQgZm9yIFByb21pc2VzLCB3aGlsZSBtYWNyb3Rhc2tzIGFyZVxuICAgICAgICAgICAgLy8gdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlLlxuICAgICAgICAgICAgLy8gTWljcm90YXNrcyBhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIG1hY3JvdGFza3MuIElmIHRoZSBKUyBlbmdpbmVcbiAgICAgICAgICAgIC8vIGlzIGxvb2tpbmcgZm9yIGEgdGFzayB0byBydW4sIGl0IHdpbGwgYWx3YXlzIHRyeSB0byBlbXB0eSB0aGVcbiAgICAgICAgICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBydW4gYW55dGhpbmcgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIG1hY3JvdGFzayBxdWV1ZS5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBGb3IgdGhlIFdlYlNvY2tldCB0cmFuc3BvcnQsIG1lc3NhZ2VzIGFsd2F5cyBhcnJpdmUgaW4gdGhlaXIgb3duXG4gICAgICAgICAgICAvLyBldmVudC4gVGhpcyBtZWFucyB0aGF0IGlmIGFueSBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4sXG4gICAgICAgICAgICAvLyB0aGVpciBjYWxsYmFja3Mgd2lsbCBhbHdheXMgZmluaXNoIGV4ZWN1dGlvbiBieSB0aGUgdGltZSB0aGVcbiAgICAgICAgICAgIC8vIG5leHQgbWVzc2FnZSBldmVudCBoYW5kbGVyIGlzIHJ1bi5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBJbiBvcmRlciB0byBlbXVsYXRlIHRoaXMgYmVoYXZpb3VyLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBlYWNoXG4gICAgICAgICAgICAvLyBvbm1lc3NhZ2UgaGFuZGxlciBpcyBydW4gd2l0aGluIGl0J3Mgb3duIG1hY3JvdGFzay5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbm1lc3NhZ2Uoe2RhdGE6IG1zZ30pLCAwKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5wb2xsKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwNDpcbiAgICAgICAgICB0aGlzLnBvbGwoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDEwOlxuICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMub3BlblxuICAgICAgICAgIHRoaXMub25vcGVuKHt9KVxuICAgICAgICAgIHRoaXMucG9sbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgdGhpcy5vbmVycm9yKDQwMylcbiAgICAgICAgICB0aGlzLmNsb3NlKDEwMDgsIFwiZm9yYmlkZGVuXCIsIGZhbHNlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgdGhpcy5vbmVycm9yKDUwMClcbiAgICAgICAgICB0aGlzLmNsb3NlQW5kUmV0cnkoMTAxMSwgXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIiwgNTAwKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHBvbGwgc3RhdHVzICR7c3RhdHVzfWApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHNlbmQoYm9keSl7XG4gICAgdGhpcy5hamF4KFwiUE9TVFwiLCBib2R5LCAoKSA9PiB0aGlzLm9uZXJyb3IoXCJ0aW1lb3V0XCIpLCByZXNwID0+IHtcbiAgICAgIGlmKCFyZXNwIHx8IHJlc3Auc3RhdHVzICE9PSAyMDApe1xuICAgICAgICB0aGlzLm9uZXJyb3IocmVzcCAmJiByZXNwLnN0YXR1cylcbiAgICAgICAgdGhpcy5jbG9zZUFuZFJldHJ5KDEwMTEsIFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIsIGZhbHNlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjbG9zZShjb2RlLCByZWFzb24sIHdhc0NsZWFuKXtcbiAgICBmb3IobGV0IHJlcSBvZiB0aGlzLnJlcXMpeyByZXEuYWJvcnQoKSB9XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jbG9zZWRcbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2NvZGU6IDEwMDAsIHJlYXNvbjogdW5kZWZpbmVkLCB3YXNDbGVhbjogdHJ1ZX0sIHtjb2RlLCByZWFzb24sIHdhc0NsZWFufSlcbiAgICBpZih0eXBlb2YoQ2xvc2VFdmVudCkgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgdGhpcy5vbmNsb3NlKG5ldyBDbG9zZUV2ZW50KFwiY2xvc2VcIiwgb3B0cykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25jbG9zZShvcHRzKVxuICAgIH1cbiAgfVxuXG4gIGFqYXgobWV0aG9kLCBib2R5LCBvbkNhbGxlclRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICBsZXQgcmVxXG4gICAgbGV0IG9udGltZW91dCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVxcy5kZWxldGUocmVxKVxuICAgICAgb25DYWxsZXJUaW1lb3V0KClcbiAgICB9XG4gICAgcmVxID0gQWpheC5yZXF1ZXN0KG1ldGhvZCwgdGhpcy5lbmRwb2ludFVSTCgpLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgYm9keSwgdGhpcy50aW1lb3V0LCBvbnRpbWVvdXQsIHJlc3AgPT4ge1xuICAgICAgdGhpcy5yZXFzLmRlbGV0ZShyZXEpXG4gICAgICBpZih0aGlzLmlzQWN0aXZlKCkpeyBjYWxsYmFjayhyZXNwKSB9XG4gICAgfSlcbiAgICB0aGlzLnJlcXMuYWRkKHJlcSlcbiAgfVxufVxuIiwgIi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIFByZXNlbmNlXG4gKiBAcGFyYW0ge0NoYW5uZWx9IGNoYW5uZWwgLSBUaGUgQ2hhbm5lbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgb3B0aW9ucyxcbiAqICAgICAgICBmb3IgZXhhbXBsZSBge2V2ZW50czoge3N0YXRlOiBcInN0YXRlXCIsIGRpZmY6IFwiZGlmZlwifX1gXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXNlbmNlIHtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBvcHRzID0ge30pe1xuICAgIGxldCBldmVudHMgPSBvcHRzLmV2ZW50cyB8fCB7c3RhdGU6IFwicHJlc2VuY2Vfc3RhdGVcIiwgZGlmZjogXCJwcmVzZW5jZV9kaWZmXCJ9XG4gICAgdGhpcy5zdGF0ZSA9IHt9XG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWxcbiAgICB0aGlzLmpvaW5SZWYgPSBudWxsXG4gICAgdGhpcy5jYWxsZXIgPSB7XG4gICAgICBvbkpvaW46IGZ1bmN0aW9uICgpeyB9LFxuICAgICAgb25MZWF2ZTogZnVuY3Rpb24gKCl7IH0sXG4gICAgICBvblN5bmM6IGZ1bmN0aW9uICgpeyB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFubmVsLm9uKGV2ZW50cy5zdGF0ZSwgbmV3U3RhdGUgPT4ge1xuICAgICAgbGV0IHtvbkpvaW4sIG9uTGVhdmUsIG9uU3luY30gPSB0aGlzLmNhbGxlclxuXG4gICAgICB0aGlzLmpvaW5SZWYgPSB0aGlzLmNoYW5uZWwuam9pblJlZigpXG4gICAgICB0aGlzLnN0YXRlID0gUHJlc2VuY2Uuc3luY1N0YXRlKHRoaXMuc3RhdGUsIG5ld1N0YXRlLCBvbkpvaW4sIG9uTGVhdmUpXG5cbiAgICAgIHRoaXMucGVuZGluZ0RpZmZzLmZvckVhY2goZGlmZiA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpXG4gICAgICB9KVxuICAgICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgICAgb25TeW5jKClcbiAgICB9KVxuXG4gICAgdGhpcy5jaGFubmVsLm9uKGV2ZW50cy5kaWZmLCBkaWZmID0+IHtcbiAgICAgIGxldCB7b25Kb2luLCBvbkxlYXZlLCBvblN5bmN9ID0gdGhpcy5jYWxsZXJcblxuICAgICAgaWYodGhpcy5pblBlbmRpbmdTeW5jU3RhdGUoKSl7XG4gICAgICAgIHRoaXMucGVuZGluZ0RpZmZzLnB1c2goZGlmZilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpXG4gICAgICAgIG9uU3luYygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uSm9pbihjYWxsYmFjayl7IHRoaXMuY2FsbGVyLm9uSm9pbiA9IGNhbGxiYWNrIH1cblxuICBvbkxlYXZlKGNhbGxiYWNrKXsgdGhpcy5jYWxsZXIub25MZWF2ZSA9IGNhbGxiYWNrIH1cblxuICBvblN5bmMoY2FsbGJhY2speyB0aGlzLmNhbGxlci5vblN5bmMgPSBjYWxsYmFjayB9XG5cbiAgbGlzdChieSl7IHJldHVybiBQcmVzZW5jZS5saXN0KHRoaXMuc3RhdGUsIGJ5KSB9XG5cbiAgaW5QZW5kaW5nU3luY1N0YXRlKCl7XG4gICAgcmV0dXJuICF0aGlzLmpvaW5SZWYgfHwgKHRoaXMuam9pblJlZiAhPT0gdGhpcy5jaGFubmVsLmpvaW5SZWYoKSlcbiAgfVxuXG4gIC8vIGxvd2VyLWxldmVsIHB1YmxpYyBzdGF0aWMgQVBJXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc3luYyB0aGUgbGlzdCBvZiBwcmVzZW5jZXMgb24gdGhlIHNlcnZlclxuICAgKiB3aXRoIHRoZSBjbGllbnQncyBzdGF0ZS4gQW4gb3B0aW9uYWwgYG9uSm9pbmAgYW5kIGBvbkxlYXZlYCBjYWxsYmFjayBjYW5cbiAgICogYmUgcHJvdmlkZWQgdG8gcmVhY3QgdG8gY2hhbmdlcyBpbiB0aGUgY2xpZW50J3MgbG9jYWwgcHJlc2VuY2VzIGFjcm9zc1xuICAgKiBkaXNjb25uZWN0cyBhbmQgcmVjb25uZWN0cyB3aXRoIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcmVzZW5jZX1cbiAgICovXG4gIHN0YXRpYyBzeW5jU3RhdGUoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKXtcbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNsb25lKGN1cnJlbnRTdGF0ZSlcbiAgICBsZXQgam9pbnMgPSB7fVxuICAgIGxldCBsZWF2ZXMgPSB7fVxuXG4gICAgdGhpcy5tYXAoc3RhdGUsIChrZXksIHByZXNlbmNlKSA9PiB7XG4gICAgICBpZighbmV3U3RhdGVba2V5XSl7XG4gICAgICAgIGxlYXZlc1trZXldID0gcHJlc2VuY2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMubWFwKG5ld1N0YXRlLCAoa2V5LCBuZXdQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV1cbiAgICAgIGlmKGN1cnJlbnRQcmVzZW5jZSl7XG4gICAgICAgIGxldCBuZXdSZWZzID0gbmV3UHJlc2VuY2UubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgICBsZXQgY3VyUmVmcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5tYXAobSA9PiBtLnBoeF9yZWYpXG4gICAgICAgIGxldCBqb2luZWRNZXRhcyA9IG5ld1ByZXNlbmNlLm1ldGFzLmZpbHRlcihtID0+IGN1clJlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMClcbiAgICAgICAgbGV0IGxlZnRNZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIobSA9PiBuZXdSZWZzLmluZGV4T2YobS5waHhfcmVmKSA8IDApXG4gICAgICAgIGlmKGpvaW5lZE1ldGFzLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGpvaW5zW2tleV0gPSBuZXdQcmVzZW5jZVxuICAgICAgICAgIGpvaW5zW2tleV0ubWV0YXMgPSBqb2luZWRNZXRhc1xuICAgICAgICB9XG4gICAgICAgIGlmKGxlZnRNZXRhcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZWF2ZXNba2V5XSA9IHRoaXMuY2xvbmUoY3VycmVudFByZXNlbmNlKVxuICAgICAgICAgIGxlYXZlc1trZXldLm1ldGFzID0gbGVmdE1ldGFzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvaW5zW2tleV0gPSBuZXdQcmVzZW5jZVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuc3luY0RpZmYoc3RhdGUsIHtqb2luczogam9pbnMsIGxlYXZlczogbGVhdmVzfSwgb25Kb2luLCBvbkxlYXZlKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFVzZWQgdG8gc3luYyBhIGRpZmYgb2YgcHJlc2VuY2Ugam9pbiBhbmQgbGVhdmVcbiAgICogZXZlbnRzIGZyb20gdGhlIHNlcnZlciwgYXMgdGhleSBoYXBwZW4uIExpa2UgYHN5bmNTdGF0ZWAsIGBzeW5jRGlmZmBcbiAgICogYWNjZXB0cyBvcHRpb25hbCBgb25Kb2luYCBhbmQgYG9uTGVhdmVgIGNhbGxiYWNrcyB0byByZWFjdCB0byBhIHVzZXJcbiAgICogam9pbmluZyBvciBsZWF2aW5nIGZyb20gYSBkZXZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcmVzZW5jZX1cbiAgICovXG4gIHN0YXRpYyBzeW5jRGlmZihzdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKXtcbiAgICBsZXQge2pvaW5zLCBsZWF2ZXN9ID0gdGhpcy5jbG9uZShkaWZmKVxuICAgIGlmKCFvbkpvaW4peyBvbkpvaW4gPSBmdW5jdGlvbiAoKXsgfSB9XG4gICAgaWYoIW9uTGVhdmUpeyBvbkxlYXZlID0gZnVuY3Rpb24gKCl7IH0gfVxuXG4gICAgdGhpcy5tYXAoam9pbnMsIChrZXksIG5ld1ByZXNlbmNlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFByZXNlbmNlID0gc3RhdGVba2V5XVxuICAgICAgc3RhdGVba2V5XSA9IHRoaXMuY2xvbmUobmV3UHJlc2VuY2UpXG4gICAgICBpZihjdXJyZW50UHJlc2VuY2Upe1xuICAgICAgICBsZXQgam9pbmVkUmVmcyA9IHN0YXRlW2tleV0ubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgICBsZXQgY3VyTWV0YXMgPSBjdXJyZW50UHJlc2VuY2UubWV0YXMuZmlsdGVyKG0gPT4gam9pbmVkUmVmcy5pbmRleE9mKG0ucGh4X3JlZikgPCAwKVxuICAgICAgICBzdGF0ZVtrZXldLm1ldGFzLnVuc2hpZnQoLi4uY3VyTWV0YXMpXG4gICAgICB9XG4gICAgICBvbkpvaW4oa2V5LCBjdXJyZW50UHJlc2VuY2UsIG5ld1ByZXNlbmNlKVxuICAgIH0pXG4gICAgdGhpcy5tYXAobGVhdmVzLCAoa2V5LCBsZWZ0UHJlc2VuY2UpID0+IHtcbiAgICAgIGxldCBjdXJyZW50UHJlc2VuY2UgPSBzdGF0ZVtrZXldXG4gICAgICBpZighY3VycmVudFByZXNlbmNlKXsgcmV0dXJuIH1cbiAgICAgIGxldCByZWZzVG9SZW1vdmUgPSBsZWZ0UHJlc2VuY2UubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgY3VycmVudFByZXNlbmNlLm1ldGFzID0gY3VycmVudFByZXNlbmNlLm1ldGFzLmZpbHRlcihwID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZnNUb1JlbW92ZS5pbmRleE9mKHAucGh4X3JlZikgPCAwXG4gICAgICB9KVxuICAgICAgb25MZWF2ZShrZXksIGN1cnJlbnRQcmVzZW5jZSwgbGVmdFByZXNlbmNlKVxuICAgICAgaWYoY3VycmVudFByZXNlbmNlLm1ldGFzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZVtrZXldXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gc3RhdGVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcmVzZW5jZXMsIHdpdGggc2VsZWN0ZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcmVzZW5jZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hvb3NlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJlc2VuY2V9XG4gICAqL1xuICBzdGF0aWMgbGlzdChwcmVzZW5jZXMsIGNob29zZXIpe1xuICAgIGlmKCFjaG9vc2VyKXsgY2hvb3NlciA9IGZ1bmN0aW9uIChrZXksIHByZXMpeyByZXR1cm4gcHJlcyB9IH1cblxuICAgIHJldHVybiB0aGlzLm1hcChwcmVzZW5jZXMsIChrZXksIHByZXNlbmNlKSA9PiB7XG4gICAgICByZXR1cm4gY2hvb3NlcihrZXksIHByZXNlbmNlKVxuICAgIH0pXG4gIH1cblxuICAvLyBwcml2YXRlXG5cbiAgc3RhdGljIG1hcChvYmosIGZ1bmMpe1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLm1hcChrZXkgPT4gZnVuYyhrZXksIG9ialtrZXldKSlcbiAgfVxuXG4gIHN0YXRpYyBjbG9uZShvYmopeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKSB9XG59XG4iLCAiLyogVGhlIGRlZmF1bHQgc2VyaWFsaXplciBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG1lc3NhZ2VzICovXG5pbXBvcnQge1xuICBDSEFOTkVMX0VWRU5UU1xufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEhFQURFUl9MRU5HVEg6IDEsXG4gIE1FVEFfTEVOR1RIOiA0LFxuICBLSU5EUzoge3B1c2g6IDAsIHJlcGx5OiAxLCBicm9hZGNhc3Q6IDJ9LFxuXG4gIGVuY29kZShtc2csIGNhbGxiYWNrKXtcbiAgICBpZihtc2cucGF5bG9hZC5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpe1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMuYmluYXJ5RW5jb2RlKG1zZykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXlsb2FkID0gW21zZy5qb2luX3JlZiwgbXNnLnJlZiwgbXNnLnRvcGljLCBtc2cuZXZlbnQsIG1zZy5wYXlsb2FkXVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKVxuICAgIH1cbiAgfSxcblxuICBkZWNvZGUocmF3UGF5bG9hZCwgY2FsbGJhY2spe1xuICAgIGlmKHJhd1BheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKXtcbiAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLmJpbmFyeURlY29kZShyYXdQYXlsb2FkKSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IFtqb2luX3JlZiwgcmVmLCB0b3BpYywgZXZlbnQsIHBheWxvYWRdID0gSlNPTi5wYXJzZShyYXdQYXlsb2FkKVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKHtqb2luX3JlZiwgcmVmLCB0b3BpYywgZXZlbnQsIHBheWxvYWR9KVxuICAgIH1cbiAgfSxcblxuICAvLyBwcml2YXRlXG5cbiAgYmluYXJ5RW5jb2RlKG1lc3NhZ2Upe1xuICAgIGxldCB7am9pbl9yZWYsIHJlZiwgZXZlbnQsIHRvcGljLCBwYXlsb2FkfSA9IG1lc3NhZ2VcbiAgICBsZXQgbWV0YUxlbmd0aCA9IHRoaXMuTUVUQV9MRU5HVEggKyBqb2luX3JlZi5sZW5ndGggKyByZWYubGVuZ3RoICsgdG9waWMubGVuZ3RoICsgZXZlbnQubGVuZ3RoXG4gICAgbGV0IGhlYWRlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLkhFQURFUl9MRU5HVEggKyBtZXRhTGVuZ3RoKVxuICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGhlYWRlcilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgdGhpcy5LSU5EUy5wdXNoKSAvLyBraW5kXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgam9pbl9yZWYubGVuZ3RoKVxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHJlZi5sZW5ndGgpXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgdG9waWMubGVuZ3RoKVxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGV2ZW50Lmxlbmd0aClcbiAgICBBcnJheS5mcm9tKGpvaW5fcmVmLCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG4gICAgQXJyYXkuZnJvbShyZWYsIGNoYXIgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSlcbiAgICBBcnJheS5mcm9tKHRvcGljLCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG4gICAgQXJyYXkuZnJvbShldmVudCwgY2hhciA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKVxuXG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IFVpbnQ4QXJyYXkoaGVhZGVyLmJ5dGVMZW5ndGggKyBwYXlsb2FkLmJ5dGVMZW5ndGgpXG4gICAgY29tYmluZWQuc2V0KG5ldyBVaW50OEFycmF5KGhlYWRlciksIDApXG4gICAgY29tYmluZWQuc2V0KG5ldyBVaW50OEFycmF5KHBheWxvYWQpLCBoZWFkZXIuYnl0ZUxlbmd0aClcblxuICAgIHJldHVybiBjb21iaW5lZC5idWZmZXJcbiAgfSxcblxuICBiaW5hcnlEZWNvZGUoYnVmZmVyKXtcbiAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpXG4gICAgbGV0IGtpbmQgPSB2aWV3LmdldFVpbnQ4KDApXG4gICAgbGV0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5wdXNoOiByZXR1cm4gdGhpcy5kZWNvZGVQdXNoKGJ1ZmZlciwgdmlldywgZGVjb2RlcilcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5yZXBseTogcmV0dXJuIHRoaXMuZGVjb2RlUmVwbHkoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKVxuICAgICAgY2FzZSB0aGlzLktJTkRTLmJyb2FkY2FzdDogcmV0dXJuIHRoaXMuZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2RlcilcbiAgICB9XG4gIH0sXG5cbiAgZGVjb2RlUHVzaChidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCBqb2luUmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSlcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgyKVxuICAgIGxldCBldmVudFNpemUgPSB2aWV3LmdldFVpbnQ4KDMpXG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEggLSAxIC8vIHB1c2hlcyBoYXZlIG5vIHJlZlxuICAgIGxldCBqb2luUmVmID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgam9pblJlZlNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGpvaW5SZWZTaXplXG4gICAgbGV0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemVcbiAgICBsZXQgZXZlbnQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBldmVudFNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZVxuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgcmV0dXJuIHtqb2luX3JlZjogam9pblJlZiwgcmVmOiBudWxsLCB0b3BpYzogdG9waWMsIGV2ZW50OiBldmVudCwgcGF5bG9hZDogZGF0YX1cbiAgfSxcblxuICBkZWNvZGVSZXBseShidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCBqb2luUmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSlcbiAgICBsZXQgcmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMilcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgzKVxuICAgIGxldCBldmVudFNpemUgPSB2aWV3LmdldFVpbnQ4KDQpXG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEhcbiAgICBsZXQgam9pblJlZiA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGpvaW5SZWZTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBqb2luUmVmU2l6ZVxuICAgIGxldCByZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyByZWZTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyByZWZTaXplXG4gICAgbGV0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemVcbiAgICBsZXQgZXZlbnQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBldmVudFNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZVxuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgbGV0IHBheWxvYWQgPSB7c3RhdHVzOiBldmVudCwgcmVzcG9uc2U6IGRhdGF9XG4gICAgcmV0dXJuIHtqb2luX3JlZjogam9pblJlZiwgcmVmOiByZWYsIHRvcGljOiB0b3BpYywgZXZlbnQ6IENIQU5ORUxfRVZFTlRTLnJlcGx5LCBwYXlsb2FkOiBwYXlsb2FkfVxuICB9LFxuXG4gIGRlY29kZUJyb2FkY2FzdChidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCB0b3BpY1NpemUgPSB2aWV3LmdldFVpbnQ4KDEpXG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoMilcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgMlxuICAgIGxldCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgdG9waWNTaXplXG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBldmVudFNpemVcbiAgICBsZXQgZGF0YSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gICAgcmV0dXJuIHtqb2luX3JlZjogbnVsbCwgcmVmOiBudWxsLCB0b3BpYzogdG9waWMsIGV2ZW50OiBldmVudCwgcGF5bG9hZDogZGF0YX1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGdsb2JhbCxcbiAgcGh4V2luZG93LFxuICBDSEFOTkVMX0VWRU5UUyxcbiAgREVGQVVMVF9USU1FT1VULFxuICBERUZBVUxUX1ZTTixcbiAgU09DS0VUX1NUQVRFUyxcbiAgVFJBTlNQT1JUUyxcbiAgV1NfQ0xPU0VfTk9STUFMXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb3N1cmVcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQWpheCBmcm9tIFwiLi9hamF4XCJcbmltcG9ydCBDaGFubmVsIGZyb20gXCIuL2NoYW5uZWxcIlxuaW1wb3J0IExvbmdQb2xsIGZyb20gXCIuL2xvbmdwb2xsXCJcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCIuL3NlcmlhbGl6ZXJcIlxuaW1wb3J0IFRpbWVyIGZyb20gXCIuL3RpbWVyXCJcblxuLyoqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQgKlxuICpcbiAqIEZvciBJRTggc3VwcG9ydCB1c2UgYW4gRVM1LXNoaW0gKGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5kUG9pbnQgLSBUaGUgc3RyaW5nIFdlYlNvY2tldCBlbmRwb2ludCwgaWUsIGBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCJgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIndzczovL2V4YW1wbGUuY29tXCJgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwiL3NvY2tldFwiYCAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy50cmFuc3BvcnRdIC0gVGhlIFdlYnNvY2tldCBUcmFuc3BvcnQsIGZvciBleGFtcGxlIFdlYlNvY2tldCBvciBQaG9lbml4LkxvbmdQb2xsLlxuICpcbiAqIERlZmF1bHRzIHRvIFdlYlNvY2tldCB3aXRoIGF1dG9tYXRpYyBMb25nUG9sbCBmYWxsYmFjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmVuY29kZV0gLSBUaGUgZnVuY3Rpb24gdG8gZW5jb2RlIG91dGdvaW5nIG1lc3NhZ2VzLlxuICpcbiAqIERlZmF1bHRzIHRvIEpTT04gZW5jb2Rlci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5kZWNvZGVdIC0gVGhlIGZ1bmN0aW9uIHRvIGRlY29kZSBpbmNvbWluZyBtZXNzYWdlcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBKU09OOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIChwYXlsb2FkLCBjYWxsYmFjaykgPT4gY2FsbGJhY2soSlNPTi5wYXJzZShwYXlsb2FkKSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0XSAtIFRoZSBkZWZhdWx0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHRyaWdnZXIgcHVzaCB0aW1lb3V0cy5cbiAqXG4gKiBEZWZhdWx0cyBgREVGQVVMVF9USU1FT1VUYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmhlYXJ0YmVhdEludGVydmFsTXNdIC0gVGhlIG1pbGxpc2VjIGludGVydmFsIHRvIHNlbmQgYSBoZWFydGJlYXQgbWVzc2FnZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnJlY29ubmVjdEFmdGVyTXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWlsbGlzZWNcbiAqIHNvY2tldCByZWNvbm5lY3QgaW50ZXJ2YWwuXG4gKlxuICogRGVmYXVsdHMgdG8gc3RlcHBlZCBiYWNrb2ZmIG9mOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMCwgNTAsIDEwMCwgMTUwLCAyMDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwXVt0cmllcyAtIDFdIHx8IDUwMDBcbiAqIH1cbiAqIGBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucmVqb2luQWZ0ZXJNc10gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtaWxsaXNlY1xuICogcmVqb2luIGludGVydmFsIGZvciBpbmRpdmlkdWFsIGNoYW5uZWxzLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMDAwLCAyMDAwLCA1MDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXG4gKiB9XG4gKiBgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMubG9nZ2VyXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiBmb3Igc3BlY2lhbGl6ZWQgbG9nZ2luZywgaWU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogZnVuY3Rpb24oa2luZCwgbXNnLCBkYXRhKSB7XG4gKiAgIGNvbnNvbGUubG9nKGAke2tpbmR9OiAke21zZ31gLCBkYXRhKVxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxvbmdwb2xsZXJUaW1lb3V0XSAtIFRoZSBtYXhpbXVtIHRpbWVvdXQgb2YgYSBsb25nIHBvbGwgQUpBWCByZXF1ZXN0LlxuICpcbiAqIERlZmF1bHRzIHRvIDIwcyAoZG91YmxlIHRoZSBzZXJ2ZXIgbG9uZyBwb2xsIHRpbWVyKS5cbiAqXG4gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24pfSBbb3B0cy5wYXJhbXNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtcyB0byBwYXNzIHdoZW4gY29ubmVjdGluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmJpbmFyeVR5cGVdIC0gVGhlIGJpbmFyeSB0eXBlIHRvIHVzZSBmb3IgYmluYXJ5IFdlYlNvY2tldCBmcmFtZXMuXG4gKlxuICogRGVmYXVsdHMgdG8gXCJhcnJheWJ1ZmZlclwiXG4gKlxuICogQHBhcmFtIHt2c259IFtvcHRzLnZzbl0gLSBUaGUgc2VyaWFsaXplcidzIHByb3RvY29sIHZlcnNpb24gdG8gc2VuZCBvbiBjb25uZWN0LlxuICpcbiAqIERlZmF1bHRzIHRvIERFRkFVTFRfVlNOLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKGVuZFBvaW50LCBvcHRzID0ge30pe1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MgPSB7b3BlbjogW10sIGNsb3NlOiBbXSwgZXJyb3I6IFtdLCBtZXNzYWdlOiBbXX1cbiAgICB0aGlzLmNoYW5uZWxzID0gW11cbiAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIHRoaXMucmVmID0gMFxuICAgIHRoaXMudGltZW91dCA9IG9wdHMudGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVRcbiAgICB0aGlzLnRyYW5zcG9ydCA9IG9wdHMudHJhbnNwb3J0IHx8IGdsb2JhbC5XZWJTb2NrZXQgfHwgTG9uZ1BvbGxcbiAgICB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnMgPSAwXG4gICAgdGhpcy5kZWZhdWx0RW5jb2RlciA9IFNlcmlhbGl6ZXIuZW5jb2RlLmJpbmQoU2VyaWFsaXplcilcbiAgICB0aGlzLmRlZmF1bHREZWNvZGVyID0gU2VyaWFsaXplci5kZWNvZGUuYmluZChTZXJpYWxpemVyKVxuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlXG4gICAgdGhpcy5iaW5hcnlUeXBlID0gb3B0cy5iaW5hcnlUeXBlIHx8IFwiYXJyYXlidWZmZXJcIlxuICAgIHRoaXMuY29ubmVjdENsb2NrID0gMVxuICAgIGlmKHRoaXMudHJhbnNwb3J0ICE9PSBMb25nUG9sbCl7XG4gICAgICB0aGlzLmVuY29kZSA9IG9wdHMuZW5jb2RlIHx8IHRoaXMuZGVmYXVsdEVuY29kZXJcbiAgICAgIHRoaXMuZGVjb2RlID0gb3B0cy5kZWNvZGUgfHwgdGhpcy5kZWZhdWx0RGVjb2RlclxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuY29kZSA9IHRoaXMuZGVmYXVsdEVuY29kZXJcbiAgICAgIHRoaXMuZGVjb2RlID0gdGhpcy5kZWZhdWx0RGVjb2RlclxuICAgIH1cbiAgICBsZXQgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IG51bGxcbiAgICBpZihwaHhXaW5kb3cgJiYgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgICAgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCBfZSA9PiB7XG4gICAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgICAgdGhpcy5kaXNjb25uZWN0KClcbiAgICAgICAgICBhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID0gdGhpcy5jb25uZWN0Q2xvY2tcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHBoeFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZXNob3dcIiwgX2UgPT4ge1xuICAgICAgICBpZihhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID09PSB0aGlzLmNvbm5lY3RDbG9jayl7XG4gICAgICAgICAgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IG51bGxcbiAgICAgICAgICB0aGlzLmNvbm5lY3QoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMgPSBvcHRzLmhlYXJ0YmVhdEludGVydmFsTXMgfHwgMzAwMDBcbiAgICB0aGlzLnJlam9pbkFmdGVyTXMgPSAodHJpZXMpID0+IHtcbiAgICAgIGlmKG9wdHMucmVqb2luQWZ0ZXJNcyl7XG4gICAgICAgIHJldHVybiBvcHRzLnJlam9pbkFmdGVyTXModHJpZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gWzEwMDAsIDIwMDAsIDUwMDBdW3RyaWVzIC0gMV0gfHwgMTAwMDBcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWNvbm5lY3RBZnRlck1zID0gKHRyaWVzKSA9PiB7XG4gICAgICBpZihvcHRzLnJlY29ubmVjdEFmdGVyTXMpe1xuICAgICAgICByZXR1cm4gb3B0cy5yZWNvbm5lY3RBZnRlck1zKHRyaWVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFsxMCwgNTAsIDEwMCwgMTUwLCAyMDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwXVt0cmllcyAtIDFdIHx8IDUwMDBcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2dnZXIgPSBvcHRzLmxvZ2dlciB8fCBudWxsXG4gICAgdGhpcy5sb25ncG9sbGVyVGltZW91dCA9IG9wdHMubG9uZ3BvbGxlclRpbWVvdXQgfHwgMjAwMDBcbiAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUob3B0cy5wYXJhbXMgfHwge30pXG4gICAgdGhpcy5lbmRQb2ludCA9IGAke2VuZFBvaW50fS8ke1RSQU5TUE9SVFMud2Vic29ja2V0fWBcbiAgICB0aGlzLnZzbiA9IG9wdHMudnNuIHx8IERFRkFVTFRfVlNOXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lb3V0VGltZXIgPSBudWxsXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IG51bGxcbiAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG5ldyBUaW1lcigoKSA9PiB7XG4gICAgICB0aGlzLnRlYXJkb3duKCgpID0+IHRoaXMuY29ubmVjdCgpKVxuICAgIH0sIHRoaXMucmVjb25uZWN0QWZ0ZXJNcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBMb25nUG9sbCB0cmFuc3BvcnQgcmVmZXJlbmNlXG4gICAqL1xuICBnZXRMb25nUG9sbFRyYW5zcG9ydCgpeyByZXR1cm4gTG9uZ1BvbGwgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyBhbmQgcmVwbGFjZXMgdGhlIGFjdGl2ZSB0cmFuc3BvcnRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3VHJhbnNwb3J0IC0gVGhlIG5ldyB0cmFuc3BvcnQgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAgICpcbiAgICovXG4gIHJlcGxhY2VUcmFuc3BvcnQobmV3VHJhbnNwb3J0KXtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdXG4gICAgaWYodGhpcy5jb25uKXtcbiAgICAgIHRoaXMuY29ubi5jbG9zZSgpXG4gICAgICB0aGlzLmNvbm4gPSBudWxsXG4gICAgfVxuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc29ja2V0IHByb3RvY29sXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwcm90b2NvbCgpeyByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wubWF0Y2goL15odHRwcy8pID8gXCJ3c3NcIiA6IFwid3NcIiB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxseSBxdWFsaWZpZWQgc29ja2V0IHVybFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZW5kUG9pbnRVUkwoKXtcbiAgICBsZXQgdXJpID0gQWpheC5hcHBlbmRQYXJhbXMoXG4gICAgICBBamF4LmFwcGVuZFBhcmFtcyh0aGlzLmVuZFBvaW50LCB0aGlzLnBhcmFtcygpKSwge3ZzbjogdGhpcy52c259KVxuICAgIGlmKHVyaS5jaGFyQXQoMCkgIT09IFwiL1wiKXsgcmV0dXJuIHVyaSB9XG4gICAgaWYodXJpLmNoYXJBdCgxKSA9PT0gXCIvXCIpeyByZXR1cm4gYCR7dGhpcy5wcm90b2NvbCgpfToke3VyaX1gIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnByb3RvY29sKCl9Oi8vJHtsb2NhdGlvbi5ob3N0fSR7dXJpfWBcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyB0aGUgc29ja2V0XG4gICAqXG4gICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2xvc2VFdmVudCNTdGF0dXNfY29kZXMgZm9yIHZhbGlkIHN0YXR1cyBjb2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgc29ja2V0IGlzIGRpc2Nvbm5lY3RlZC5cbiAgICogQHBhcmFtIHtpbnRlZ2VyfSBjb2RlIC0gQSBzdGF0dXMgY29kZSBmb3IgZGlzY29ubmVjdGlvbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gQSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFzb24gdG8gZGlzY29ubmVjdC4gKE9wdGlvbmFsKVxuICAgKi9cbiAgZGlzY29ubmVjdChjYWxsYmFjaywgY29kZSwgcmVhc29uKXtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMudGVhcmRvd24oY2FsbGJhY2ssIGNvZGUsIHJlYXNvbilcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHBhcmFtcyB0byBzZW5kIHdoZW4gY29ubmVjdGluZywgZm9yIGV4YW1wbGUgYHt1c2VyX2lkOiB1c2VyVG9rZW59YFxuICAgKlxuICAgKiBQYXNzaW5nIHBhcmFtcyB0byBjb25uZWN0IGlzIGRlcHJlY2F0ZWQ7IHBhc3MgdGhlbSBpbiB0aGUgU29ja2V0IGNvbnN0cnVjdG9yIGluc3RlYWQ6XG4gICAqIGBuZXcgU29ja2V0KFwiL3NvY2tldFwiLCB7cGFyYW1zOiB7dXNlcl9pZDogdXNlclRva2VufX0pYC5cbiAgICovXG4gIGNvbm5lY3QocGFyYW1zKXtcbiAgICBpZihwYXJhbXMpe1xuICAgICAgY29uc29sZSAmJiBjb25zb2xlLmxvZyhcInBhc3NpbmcgcGFyYW1zIHRvIGNvbm5lY3QgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCBwYXNzIDpwYXJhbXMgdG8gdGhlIFNvY2tldCBjb25zdHJ1Y3RvclwiKVxuICAgICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKHBhcmFtcylcbiAgICB9XG4gICAgaWYodGhpcy5jb25uKXsgcmV0dXJuIH1cblxuICAgIHRoaXMuY29ubmVjdENsb2NrKytcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIHRoaXMuY29ubiA9IG5ldyB0aGlzLnRyYW5zcG9ydCh0aGlzLmVuZFBvaW50VVJMKCkpXG4gICAgdGhpcy5jb25uLmJpbmFyeVR5cGUgPSB0aGlzLmJpbmFyeVR5cGVcbiAgICB0aGlzLmNvbm4udGltZW91dCA9IHRoaXMubG9uZ3BvbGxlclRpbWVvdXRcbiAgICB0aGlzLmNvbm4ub25vcGVuID0gKCkgPT4gdGhpcy5vbkNvbm5PcGVuKClcbiAgICB0aGlzLmNvbm4ub25lcnJvciA9IGVycm9yID0+IHRoaXMub25Db25uRXJyb3IoZXJyb3IpXG4gICAgdGhpcy5jb25uLm9ubWVzc2FnZSA9IGV2ZW50ID0+IHRoaXMub25Db25uTWVzc2FnZShldmVudClcbiAgICB0aGlzLmNvbm4ub25jbG9zZSA9IGV2ZW50ID0+IHRoaXMub25Db25uQ2xvc2UoZXZlbnQpXG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgbWVzc2FnZS4gT3ZlcnJpZGUgYHRoaXMubG9nZ2VyYCBmb3Igc3BlY2lhbGl6ZWQgbG9nZ2luZy4gbm9vcHMgYnkgZGVmYXVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2luZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbXNnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuICBsb2coa2luZCwgbXNnLCBkYXRhKXsgdGhpcy5sb2dnZXIoa2luZCwgbXNnLCBkYXRhKSB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIGxvZ2dlciBoYXMgYmVlbiBzZXQgb24gdGhpcyBzb2NrZXQuXG4gICAqL1xuICBoYXNMb2dnZXIoKXsgcmV0dXJuIHRoaXMubG9nZ2VyICE9PSBudWxsIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBvcGVuIGV2ZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZSBzb2NrZXQub25PcGVuKGZ1bmN0aW9uKCl7IGNvbnNvbGUuaW5mbyhcInRoZSBzb2NrZXQgd2FzIG9wZW5lZFwiKSB9KVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25PcGVuKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm9wZW4ucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gY2xvc2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbkNsb3NlKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsb3NlLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIGVycm9yIGV2ZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZSBzb2NrZXQub25FcnJvcihmdW5jdGlvbihlcnJvcil7IGFsZXJ0KFwiQW4gZXJyb3Igb2NjdXJyZWRcIikgfSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2spe1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuZXJyb3IucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gbWVzc2FnZSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uTWVzc2FnZShjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5ncyB0aGUgc2VydmVyIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBSVFQgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGluZyB3YXMgcHVzaGVkIG9yIGZhbHNlIGlmIHVuYWJsZSB0byBiZSBwdXNoZWQuXG4gICAqL1xuICBwaW5nKGNhbGxiYWNrKXtcbiAgICBpZighdGhpcy5pc0Nvbm5lY3RlZCgpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIHRoaXMucHVzaCh7dG9waWM6IFwicGhvZW5peFwiLCBldmVudDogXCJoZWFydGJlYXRcIiwgcGF5bG9hZDoge30sIHJlZjogcmVmfSlcbiAgICBsZXQgb25Nc2dSZWYgPSB0aGlzLm9uTWVzc2FnZShtc2cgPT4ge1xuICAgICAgaWYobXNnLnJlZiA9PT0gcmVmKXtcbiAgICAgICAgdGhpcy5vZmYoW29uTXNnUmVmXSlcbiAgICAgICAgY2FsbGJhY2soRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgY2xlYXJIZWFydGJlYXRzKCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnRiZWF0VGltZXIpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyKVxuICB9XG5cbiAgb25Db25uT3Blbigpe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGBjb25uZWN0ZWQgdG8gJHt0aGlzLmVuZFBvaW50VVJMKCl9YClcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIHRoaXMuZXN0YWJsaXNoZWRDb25uZWN0aW9ucysrXG4gICAgdGhpcy5mbHVzaFNlbmRCdWZmZXIoKVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMucmVzZXRIZWFydGJlYXQoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mub3Blbi5mb3JFYWNoKChbLCBjYWxsYmFja10pID0+IGNhbGxiYWNrKCkpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgaGVhcnRiZWF0VGltZW91dCgpe1xuICAgIGlmKHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZil7XG4gICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgICBpZih0aGlzLmhhc0xvZ2dlcigpKXsgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJoZWFydGJlYXQgdGltZW91dC4gQXR0ZW1wdGluZyB0byByZS1lc3RhYmxpc2ggY29ubmVjdGlvblwiKSB9XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2VcbiAgICAgIHRoaXMudGVhcmRvd24oKCkgPT4gdGhpcy5yZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKSwgV1NfQ0xPU0VfTk9STUFMLCBcImhlYXJ0YmVhdCB0aW1lb3V0XCIpXG4gICAgfVxuICB9XG5cbiAgcmVzZXRIZWFydGJlYXQoKXtcbiAgICBpZih0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnNraXBIZWFydGJlYXQpeyByZXR1cm4gfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgfVxuXG4gIHRlYXJkb3duKGNhbGxiYWNrLCBjb2RlLCByZWFzb24pe1xuICAgIGlmKCF0aGlzLmNvbm4pe1xuICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICB9XG5cbiAgICB0aGlzLndhaXRGb3JCdWZmZXJEb25lKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgIGlmKGNvZGUpeyB0aGlzLmNvbm4uY2xvc2UoY29kZSwgcmVhc29uIHx8IFwiXCIpIH0gZWxzZSB7IHRoaXMuY29ubi5jbG9zZSgpIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0Rm9yU29ja2V0Q2xvc2VkKCgpID0+IHtcbiAgICAgICAgaWYodGhpcy5jb25uKXtcbiAgICAgICAgICB0aGlzLmNvbm4ub25vcGVuID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubi5vbmVycm9yID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgICAgICAgdGhpcy5jb25uLm9uY2xvc2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgICAgICAgdGhpcy5jb25uID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgd2FpdEZvckJ1ZmZlckRvbmUoY2FsbGJhY2ssIHRyaWVzID0gMSl7XG4gICAgaWYodHJpZXMgPT09IDUgfHwgIXRoaXMuY29ubiB8fCAhdGhpcy5jb25uLmJ1ZmZlcmVkQW1vdW50KXtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZShjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgd2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgPSAxKXtcbiAgICBpZih0cmllcyA9PT0gNSB8fCAhdGhpcy5jb25uIHx8IHRoaXMuY29ubi5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLmNsb3NlZCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgb25Db25uQ2xvc2UoZXZlbnQpe1xuICAgIGxldCBjbG9zZUNvZGUgPSBldmVudCAmJiBldmVudC5jb2RlXG4gICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJjbG9zZVwiLCBldmVudClcbiAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgIHRoaXMuY2xlYXJIZWFydGJlYXRzKClcbiAgICBpZighdGhpcy5jbG9zZVdhc0NsZWFuICYmIGNsb3NlQ29kZSAhPT0gMTAwMCl7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpXG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuY2xvc2UuZm9yRWFjaCgoWywgY2FsbGJhY2tdKSA9PiBjYWxsYmFjayhldmVudCkpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uQ29ubkVycm9yKGVycm9yKXtcbiAgICBpZih0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBlcnJvcilcbiAgICBsZXQgdHJhbnNwb3J0QmVmb3JlID0gdGhpcy50cmFuc3BvcnRcbiAgICBsZXQgZXN0YWJsaXNoZWRCZWZvcmUgPSB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnNcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmVycm9yLmZvckVhY2goKFssIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHRyYW5zcG9ydEJlZm9yZSwgZXN0YWJsaXNoZWRCZWZvcmUpXG4gICAgfSlcbiAgICBpZih0cmFuc3BvcnRCZWZvcmUgPT09IHRoaXMudHJhbnNwb3J0IHx8IGVzdGFibGlzaGVkQmVmb3JlID4gMCl7XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJpZ2dlckNoYW5FcnJvcigpe1xuICAgIHRoaXMuY2hhbm5lbHMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGlmKCEoY2hhbm5lbC5pc0Vycm9yZWQoKSB8fCBjaGFubmVsLmlzTGVhdmluZygpIHx8IGNoYW5uZWwuaXNDbG9zZWQoKSkpe1xuICAgICAgICBjaGFubmVsLnRyaWdnZXIoQ0hBTk5FTF9FVkVOVFMuZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY29ubmVjdGlvblN0YXRlKCl7XG4gICAgc3dpdGNoKHRoaXMuY29ubiAmJiB0aGlzLmNvbm4ucmVhZHlTdGF0ZSl7XG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMuY29ubmVjdGluZzogcmV0dXJuIFwiY29ubmVjdGluZ1wiXG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMub3BlbjogcmV0dXJuIFwib3BlblwiXG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMuY2xvc2luZzogcmV0dXJuIFwiY2xvc2luZ1wiXG4gICAgICBkZWZhdWx0OiByZXR1cm4gXCJjbG9zZWRcIlxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ29ubmVjdGVkKCl7IHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0ZSgpID09PSBcIm9wZW5cIiB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2hhbm5lbH1cbiAgICovXG4gIHJlbW92ZShjaGFubmVsKXtcbiAgICB0aGlzLm9mZihjaGFubmVsLnN0YXRlQ2hhbmdlUmVmcylcbiAgICB0aGlzLmNoYW5uZWxzID0gdGhpcy5jaGFubmVscy5maWx0ZXIoYyA9PiBjLmpvaW5SZWYoKSAhPT0gY2hhbm5lbC5qb2luUmVmKCkpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBgb25PcGVuYCwgYG9uQ2xvc2VgLCBgb25FcnJvcixgIGFuZCBgb25NZXNzYWdlYCByZWdpc3RyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3JlZnN9IC0gbGlzdCBvZiByZWZzIHJldHVybmVkIGJ5IGNhbGxzIHRvXG4gICAqICAgICAgICAgICAgICAgICBgb25PcGVuYCwgYG9uQ2xvc2VgLCBgb25FcnJvcixgIGFuZCBgb25NZXNzYWdlYFxuICAgKi9cbiAgb2ZmKHJlZnMpe1xuICAgIGZvcihsZXQga2V5IGluIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mpe1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrc1trZXldID0gdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrc1trZXldLmZpbHRlcigoW3JlZl0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZnMuaW5kZXhPZihyZWYpID09PSAtMVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbmV3IGNoYW5uZWwgZm9yIHRoZSBnaXZlbiB0b3BpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWNcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYW5QYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7Q2hhbm5lbH1cbiAgICovXG4gIGNoYW5uZWwodG9waWMsIGNoYW5QYXJhbXMgPSB7fSl7XG4gICAgbGV0IGNoYW4gPSBuZXcgQ2hhbm5lbCh0b3BpYywgY2hhblBhcmFtcywgdGhpcylcbiAgICB0aGlzLmNoYW5uZWxzLnB1c2goY2hhbilcbiAgICByZXR1cm4gY2hhblxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuICBwdXNoKGRhdGEpe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpe1xuICAgICAgbGV0IHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWZ9ID0gZGF0YVxuICAgICAgdGhpcy5sb2coXCJwdXNoXCIsIGAke3RvcGljfSAke2V2ZW50fSAoJHtqb2luX3JlZn0sICR7cmVmfSlgLCBwYXlsb2FkKVxuICAgIH1cblxuICAgIGlmKHRoaXMuaXNDb25uZWN0ZWQoKSl7XG4gICAgICB0aGlzLmVuY29kZShkYXRhLCByZXN1bHQgPT4gdGhpcy5jb25uLnNlbmQocmVzdWx0KSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kQnVmZmVyLnB1c2goKCkgPT4gdGhpcy5lbmNvZGUoZGF0YSwgcmVzdWx0ID0+IHRoaXMuY29ubi5zZW5kKHJlc3VsdCkpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSByZWYsIGFjY291bnRpbmcgZm9yIG92ZXJmbG93c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgbWFrZVJlZigpe1xuICAgIGxldCBuZXdSZWYgPSB0aGlzLnJlZiArIDFcbiAgICBpZihuZXdSZWYgPT09IHRoaXMucmVmKXsgdGhpcy5yZWYgPSAwIH0gZWxzZSB7IHRoaXMucmVmID0gbmV3UmVmIH1cblxuICAgIHJldHVybiB0aGlzLnJlZi50b1N0cmluZygpXG4gIH1cblxuICBzZW5kSGVhcnRiZWF0KCl7XG4gICAgaWYodGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmICYmICF0aGlzLmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5wdXNoKHt0b3BpYzogXCJwaG9lbml4XCIsIGV2ZW50OiBcImhlYXJ0YmVhdFwiLCBwYXlsb2FkOiB7fSwgcmVmOiB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWZ9KVxuICAgIHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmhlYXJ0YmVhdFRpbWVvdXQoKSwgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zKVxuICB9XG5cbiAgZmx1c2hTZW5kQnVmZmVyKCl7XG4gICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlci5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpXG4gICAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubk1lc3NhZ2UocmF3TWVzc2FnZSl7XG4gICAgdGhpcy5kZWNvZGUocmF3TWVzc2FnZS5kYXRhLCBtc2cgPT4ge1xuICAgICAgbGV0IHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWZ9ID0gbXNnXG4gICAgICBpZihyZWYgJiYgcmVmID09PSB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYpe1xuICAgICAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpXG4gICAgICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgICAgIH1cblxuICAgICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJyZWNlaXZlXCIsIGAke3BheWxvYWQuc3RhdHVzIHx8IFwiXCJ9ICR7dG9waWN9ICR7ZXZlbnR9ICR7cmVmICYmIFwiKFwiICsgcmVmICsgXCIpXCIgfHwgXCJcIn1gLCBwYXlsb2FkKVxuXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGFubmVscy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzW2ldXG4gICAgICAgIGlmKCFjaGFubmVsLmlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pbl9yZWYpKXsgY29udGludWUgfVxuICAgICAgICBjaGFubmVsLnRyaWdnZXIoZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWYpXG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm1lc3NhZ2UubGVuZ3RoOyBpKyspe1xuICAgICAgICBsZXQgWywgY2FsbGJhY2tdID0gdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlW2ldXG4gICAgICAgIGNhbGxiYWNrKG1zZylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbGVhdmVPcGVuVG9waWModG9waWMpe1xuICAgIGxldCBkdXBDaGFubmVsID0gdGhpcy5jaGFubmVscy5maW5kKGMgPT4gYy50b3BpYyA9PT0gdG9waWMgJiYgKGMuaXNKb2luZWQoKSB8fCBjLmlzSm9pbmluZygpKSlcbiAgICBpZihkdXBDaGFubmVsKXtcbiAgICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGBsZWF2aW5nIGR1cGxpY2F0ZSB0b3BpYyBcIiR7dG9waWN9XCJgKVxuICAgICAgZHVwQ2hhbm5lbC5sZWF2ZSgpXG4gICAgfVxuICB9XG59IiwgIlxuZXhwb3J0IGNvbnN0IENPTlNFQ1VUSVZFX1JFTE9BRFMgPSBcImNvbnNlY3V0aXZlLXJlbG9hZHNcIlxuZXhwb3J0IGNvbnN0IE1BWF9SRUxPQURTID0gMTBcbmV4cG9ydCBjb25zdCBSRUxPQURfSklUVEVSX01JTiA9IDUwMDBcbmV4cG9ydCBjb25zdCBSRUxPQURfSklUVEVSX01BWCA9IDEwMDAwXG5leHBvcnQgY29uc3QgRkFJTFNBRkVfSklUVEVSID0gMzAwMDBcbmV4cG9ydCBjb25zdCBQSFhfRVZFTlRfQ0xBU1NFUyA9IFtcbiAgXCJwaHgtY2xpY2stbG9hZGluZ1wiLCBcInBoeC1jaGFuZ2UtbG9hZGluZ1wiLCBcInBoeC1zdWJtaXQtbG9hZGluZ1wiLFxuICBcInBoeC1rZXlkb3duLWxvYWRpbmdcIiwgXCJwaHgta2V5dXAtbG9hZGluZ1wiLCBcInBoeC1ibHVyLWxvYWRpbmdcIiwgXCJwaHgtZm9jdXMtbG9hZGluZ1wiXG5dXG5leHBvcnQgY29uc3QgUEhYX0NPTVBPTkVOVCA9IFwiZGF0YS1waHgtY29tcG9uZW50XCJcbmV4cG9ydCBjb25zdCBQSFhfTElWRV9MSU5LID0gXCJkYXRhLXBoeC1saW5rXCJcbmV4cG9ydCBjb25zdCBQSFhfVFJBQ0tfU1RBVElDID0gXCJ0cmFjay1zdGF0aWNcIlxuZXhwb3J0IGNvbnN0IFBIWF9MSU5LX1NUQVRFID0gXCJkYXRhLXBoeC1saW5rLXN0YXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfUkVGID0gXCJkYXRhLXBoeC1yZWZcIlxuZXhwb3J0IGNvbnN0IFBIWF9SRUZfU1JDID0gXCJkYXRhLXBoeC1yZWYtc3JjXCJcbmV4cG9ydCBjb25zdCBQSFhfVFJBQ0tfVVBMT0FEUyA9IFwidHJhY2stdXBsb2Fkc1wiXG5leHBvcnQgY29uc3QgUEhYX1VQTE9BRF9SRUYgPSBcImRhdGEtcGh4LXVwbG9hZC1yZWZcIlxuZXhwb3J0IGNvbnN0IFBIWF9QUkVGTElHSFRFRF9SRUZTID0gXCJkYXRhLXBoeC1wcmVmbGlnaHRlZC1yZWZzXCJcbmV4cG9ydCBjb25zdCBQSFhfRE9ORV9SRUZTID0gXCJkYXRhLXBoeC1kb25lLXJlZnNcIlxuZXhwb3J0IGNvbnN0IFBIWF9EUk9QX1RBUkdFVCA9IFwiZHJvcC10YXJnZXRcIlxuZXhwb3J0IGNvbnN0IFBIWF9BQ1RJVkVfRU5UUllfUkVGUyA9IFwiZGF0YS1waHgtYWN0aXZlLXJlZnNcIlxuZXhwb3J0IGNvbnN0IFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCA9IFwicGh4OmxpdmUtZmlsZTp1cGRhdGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfU0tJUCA9IFwiZGF0YS1waHgtc2tpcFwiXG5leHBvcnQgY29uc3QgUEhYX1BSVU5FID0gXCJkYXRhLXBoeC1wcnVuZVwiXG5leHBvcnQgY29uc3QgUEhYX1BBR0VfTE9BRElORyA9IFwicGFnZS1sb2FkaW5nXCJcbmV4cG9ydCBjb25zdCBQSFhfQ09OTkVDVEVEX0NMQVNTID0gXCJwaHgtY29ubmVjdGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfRElTQ09OTkVDVEVEX0NMQVNTID0gXCJwaHgtbG9hZGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX05PX0ZFRURCQUNLX0NMQVNTID0gXCJwaHgtbm8tZmVlZGJhY2tcIlxuZXhwb3J0IGNvbnN0IFBIWF9FUlJPUl9DTEFTUyA9IFwicGh4LWVycm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfUEFSRU5UX0lEID0gXCJkYXRhLXBoeC1wYXJlbnQtaWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9NQUlOID0gXCJkYXRhLXBoeC1tYWluXCJcbmV4cG9ydCBjb25zdCBQSFhfUk9PVF9JRCA9IFwiZGF0YS1waHgtcm9vdC1pZFwiXG5leHBvcnQgY29uc3QgUEhYX1RSSUdHRVJfQUNUSU9OID0gXCJ0cmlnZ2VyLWFjdGlvblwiXG5leHBvcnQgY29uc3QgUEhYX0ZFRURCQUNLX0ZPUiA9IFwiZmVlZGJhY2stZm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfSEFTX0ZPQ1VTRUQgPSBcInBoeC1oYXMtZm9jdXNlZFwiXG5leHBvcnQgY29uc3QgRk9DVVNBQkxFX0lOUFVUUyA9IFtcInRleHRcIiwgXCJ0ZXh0YXJlYVwiLCBcIm51bWJlclwiLCBcImVtYWlsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiwgXCJ0ZWxcIiwgXCJ1cmxcIiwgXCJkYXRlXCIsIFwidGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCIsIFwiY29sb3JcIiwgXCJyYW5nZVwiXVxuZXhwb3J0IGNvbnN0IENIRUNLQUJMRV9JTlBVVFMgPSBbXCJjaGVja2JveFwiLCBcInJhZGlvXCJdXG5leHBvcnQgY29uc3QgUEhYX0hBU19TVUJNSVRURUQgPSBcInBoeC1oYXMtc3VibWl0dGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfU0VTU0lPTiA9IFwiZGF0YS1waHgtc2Vzc2lvblwiXG5leHBvcnQgY29uc3QgUEhYX1ZJRVdfU0VMRUNUT1IgPSBgWyR7UEhYX1NFU1NJT059XWBcbmV4cG9ydCBjb25zdCBQSFhfU1RJQ0tZID0gXCJkYXRhLXBoeC1zdGlja3lcIlxuZXhwb3J0IGNvbnN0IFBIWF9TVEFUSUMgPSBcImRhdGEtcGh4LXN0YXRpY1wiXG5leHBvcnQgY29uc3QgUEhYX1JFQURPTkxZID0gXCJkYXRhLXBoeC1yZWFkb25seVwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVEID0gXCJkYXRhLXBoeC1kaXNhYmxlZFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVfV0lUSCA9IFwiZGlzYWJsZS13aXRoXCJcbmV4cG9ydCBjb25zdCBQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUgPSBcImRhdGEtcGh4LWRpc2FibGUtd2l0aC1yZXN0b3JlXCJcbmV4cG9ydCBjb25zdCBQSFhfSE9PSyA9IFwiaG9va1wiXG5leHBvcnQgY29uc3QgUEhYX0RFQk9VTkNFID0gXCJkZWJvdW5jZVwiXG5leHBvcnQgY29uc3QgUEhYX1RIUk9UVExFID0gXCJ0aHJvdHRsZVwiXG5leHBvcnQgY29uc3QgUEhYX1VQREFURSA9IFwidXBkYXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfS0VZID0gXCJrZXlcIlxuZXhwb3J0IGNvbnN0IFBIWF9QUklWQVRFID0gXCJwaHhQcml2YXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfQVVUT19SRUNPVkVSID0gXCJhdXRvLXJlY292ZXJcIlxuZXhwb3J0IGNvbnN0IFBIWF9MVl9ERUJVRyA9IFwicGh4OmxpdmUtc29ja2V0OmRlYnVnXCJcbmV4cG9ydCBjb25zdCBQSFhfTFZfUFJPRklMRSA9IFwicGh4OmxpdmUtc29ja2V0OnByb2ZpbGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX0xWX0xBVEVOQ1lfU0lNID0gXCJwaHg6bGl2ZS1zb2NrZXQ6bGF0ZW5jeS1zaW1cIlxuZXhwb3J0IGNvbnN0IFBIWF9QUk9HUkVTUyA9IFwicHJvZ3Jlc3NcIlxuZXhwb3J0IGNvbnN0IExPQURFUl9USU1FT1VUID0gMVxuZXhwb3J0IGNvbnN0IEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQgPSAyMDBcbmV4cG9ydCBjb25zdCBCSU5ESU5HX1BSRUZJWCA9IFwicGh4LVwiXG5leHBvcnQgY29uc3QgUFVTSF9USU1FT1VUID0gMzAwMDBcbmV4cG9ydCBjb25zdCBMSU5LX0hFQURFUiA9IFwieC1yZXF1ZXN0ZWQtd2l0aFwiXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVVJMX0hFQURFUiA9IFwieC1yZXNwb25zZS11cmxcIlxuZXhwb3J0IGNvbnN0IERFQk9VTkNFX1RSSUdHRVIgPSBcImRlYm91bmNlLXRyaWdnZXJcIlxuZXhwb3J0IGNvbnN0IFRIUk9UVExFRCA9IFwidGhyb3R0bGVkXCJcbmV4cG9ydCBjb25zdCBERUJPVU5DRV9QUkVWX0tFWSA9IFwiZGVib3VuY2UtcHJldi1rZXlcIlxuZXhwb3J0IGNvbnN0IERFRkFVTFRTID0ge1xuICBkZWJvdW5jZTogMzAwLFxuICB0aHJvdHRsZTogMzAwXG59XG5cbi8vIFJlbmRlcmVkXG5leHBvcnQgY29uc3QgRFlOQU1JQ1MgPSBcImRcIlxuZXhwb3J0IGNvbnN0IFNUQVRJQyA9IFwic1wiXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UUyA9IFwiY1wiXG5leHBvcnQgY29uc3QgRVZFTlRTID0gXCJlXCJcbmV4cG9ydCBjb25zdCBSRVBMWSA9IFwiclwiXG5leHBvcnQgY29uc3QgVElUTEUgPSBcInRcIlxuZXhwb3J0IGNvbnN0IFRFTVBMQVRFUyA9IFwicFwiXG4iLCAiaW1wb3J0IHtcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnRyeVVwbG9hZGVyIHtcbiAgY29uc3RydWN0b3IoZW50cnksIGNodW5rU2l6ZSwgbGl2ZVNvY2tldCl7XG4gICAgdGhpcy5saXZlU29ja2V0ID0gbGl2ZVNvY2tldFxuICAgIHRoaXMuZW50cnkgPSBlbnRyeVxuICAgIHRoaXMub2Zmc2V0ID0gMFxuICAgIHRoaXMuY2h1bmtTaXplID0gY2h1bmtTaXplXG4gICAgdGhpcy5jaHVua1RpbWVyID0gbnVsbFxuICAgIHRoaXMudXBsb2FkQ2hhbm5lbCA9IGxpdmVTb2NrZXQuY2hhbm5lbChgbHZ1OiR7ZW50cnkucmVmfWAsIHt0b2tlbjogZW50cnkubWV0YWRhdGEoKX0pXG4gIH1cblxuICBlcnJvcihyZWFzb24pe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNodW5rVGltZXIpXG4gICAgdGhpcy51cGxvYWRDaGFubmVsLmxlYXZlKClcbiAgICB0aGlzLmVudHJ5LmVycm9yKHJlYXNvbilcbiAgfVxuXG4gIHVwbG9hZCgpe1xuICAgIHRoaXMudXBsb2FkQ2hhbm5lbC5vbkVycm9yKHJlYXNvbiA9PiB0aGlzLmVycm9yKHJlYXNvbikpXG4gICAgdGhpcy51cGxvYWRDaGFubmVsLmpvaW4oKVxuICAgICAgLnJlY2VpdmUoXCJva1wiLCBfZGF0YSA9PiB0aGlzLnJlYWROZXh0Q2h1bmsoKSlcbiAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgcmVhc29uID0+IHRoaXMuZXJyb3IocmVhc29uKSlcbiAgfVxuXG4gIGlzRG9uZSgpeyByZXR1cm4gdGhpcy5vZmZzZXQgPj0gdGhpcy5lbnRyeS5maWxlLnNpemUgfVxuXG4gIHJlYWROZXh0Q2h1bmsoKXtcbiAgICBsZXQgcmVhZGVyID0gbmV3IHdpbmRvdy5GaWxlUmVhZGVyKClcbiAgICBsZXQgYmxvYiA9IHRoaXMuZW50cnkuZmlsZS5zbGljZSh0aGlzLm9mZnNldCwgdGhpcy5jaHVua1NpemUgKyB0aGlzLm9mZnNldClcbiAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgIGlmKGUudGFyZ2V0LmVycm9yID09PSBudWxsKXtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gZS50YXJnZXQucmVzdWx0LmJ5dGVMZW5ndGhcbiAgICAgICAgdGhpcy5wdXNoQ2h1bmsoZS50YXJnZXQucmVzdWx0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKFwiUmVhZCBlcnJvcjogXCIgKyBlLnRhcmdldC5lcnJvcilcbiAgICAgIH1cbiAgICB9XG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIH1cblxuICBwdXNoQ2h1bmsoY2h1bmspe1xuICAgIGlmKCF0aGlzLnVwbG9hZENoYW5uZWwuaXNKb2luZWQoKSl7IHJldHVybiB9XG4gICAgdGhpcy51cGxvYWRDaGFubmVsLnB1c2goXCJjaHVua1wiLCBjaHVuaylcbiAgICAgIC5yZWNlaXZlKFwib2tcIiwgKCkgPT4ge1xuICAgICAgICB0aGlzLmVudHJ5LnByb2dyZXNzKCh0aGlzLm9mZnNldCAvIHRoaXMuZW50cnkuZmlsZS5zaXplKSAqIDEwMClcbiAgICAgICAgaWYoIXRoaXMuaXNEb25lKCkpe1xuICAgICAgICAgIHRoaXMuY2h1bmtUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWFkTmV4dENodW5rKCksIHRoaXMubGl2ZVNvY2tldC5nZXRMYXRlbmN5U2ltKCkgfHwgMClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFBIWF9WSUVXX1NFTEVDVE9SXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBFbnRyeVVwbG9hZGVyIGZyb20gXCIuL2VudHJ5X3VwbG9hZGVyXCJcblxuZXhwb3J0IGxldCBsb2dFcnJvciA9IChtc2csIG9iaikgPT4gY29uc29sZS5lcnJvciAmJiBjb25zb2xlLmVycm9yKG1zZywgb2JqKVxuXG5leHBvcnQgbGV0IGlzQ2lkID0gKGNpZCkgPT4ge1xuICBsZXQgdHlwZSA9IHR5cGVvZihjaWQpXG4gIHJldHVybiB0eXBlID09PSBcIm51bWJlclwiIHx8ICh0eXBlID09PSBcInN0cmluZ1wiICYmIC9eKDB8WzEtOV1cXGQqKSQvLnRlc3QoY2lkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdER1cGxpY2F0ZUlkcygpe1xuICBsZXQgaWRzID0gbmV3IFNldCgpXG4gIGxldCBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqW2lkXVwiKVxuICBmb3IobGV0IGkgPSAwLCBsZW4gPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7XG4gICAgaWYoaWRzLmhhcyhlbGVtc1tpXS5pZCkpe1xuICAgICAgY29uc29sZS5lcnJvcihgTXVsdGlwbGUgSURzIGRldGVjdGVkOiAke2VsZW1zW2ldLmlkfS4gRW5zdXJlIHVuaXF1ZSBlbGVtZW50IGlkcy5gKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHMuYWRkKGVsZW1zW2ldLmlkKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbGV0IGRlYnVnID0gKHZpZXcsIGtpbmQsIG1zZywgb2JqKSA9PiB7XG4gIGlmKHZpZXcubGl2ZVNvY2tldC5pc0RlYnVnRW5hYmxlZCgpKXtcbiAgICBjb25zb2xlLmxvZyhgJHt2aWV3LmlkfSAke2tpbmR9OiAke21zZ30gLSBgLCBvYmopXG4gIH1cbn1cblxuLy8gd3JhcHMgdmFsdWUgaW4gY2xvc3VyZSBvciByZXR1cm5zIGNsb3N1cmVcbmV4cG9ydCBsZXQgY2xvc3VyZSA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiA/IHZhbCA6IGZ1bmN0aW9uICgpeyByZXR1cm4gdmFsIH1cblxuZXhwb3J0IGxldCBjbG9uZSA9IChvYmopID0+IHsgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSkgfVxuXG5leHBvcnQgbGV0IGNsb3Nlc3RQaHhCaW5kaW5nID0gKGVsLCBiaW5kaW5nLCBib3JkZXJFbCkgPT4ge1xuICBkbyB7XG4gICAgaWYoZWwubWF0Y2hlcyhgWyR7YmluZGluZ31dYCkpeyByZXR1cm4gZWwgfVxuICAgIGVsID0gZWwucGFyZW50RWxlbWVudCB8fCBlbC5wYXJlbnROb2RlXG4gIH0gd2hpbGUoZWwgIT09IG51bGwgJiYgZWwubm9kZVR5cGUgPT09IDEgJiYgISgoYm9yZGVyRWwgJiYgYm9yZGVyRWwuaXNTYW1lTm9kZShlbCkpIHx8IGVsLm1hdGNoZXMoUEhYX1ZJRVdfU0VMRUNUT1IpKSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGxldCBpc09iamVjdCA9IChvYmopID0+IHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmICEob2JqIGluc3RhbmNlb2YgQXJyYXkpXG59XG5cbmV4cG9ydCBsZXQgaXNFcXVhbE9iaiA9IChvYmoxLCBvYmoyKSA9PiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMilcblxuZXhwb3J0IGxldCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICBmb3IobGV0IHggaW4gb2JqKXsgcmV0dXJuIGZhbHNlIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGxldCBtYXliZSA9IChlbCwgY2FsbGJhY2spID0+IGVsICYmIGNhbGxiYWNrKGVsKVxuXG5leHBvcnQgbGV0IGNoYW5uZWxVcGxvYWRlciA9IGZ1bmN0aW9uIChlbnRyaWVzLCBvbkVycm9yLCByZXNwLCBsaXZlU29ja2V0KXtcbiAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICBsZXQgZW50cnlVcGxvYWRlciA9IG5ldyBFbnRyeVVwbG9hZGVyKGVudHJ5LCByZXNwLmNvbmZpZy5jaHVua19zaXplLCBsaXZlU29ja2V0KVxuICAgIGVudHJ5VXBsb2FkZXIudXBsb2FkKClcbiAgfSlcbn1cbiIsICJsZXQgQnJvd3NlciA9IHtcbiAgY2FuUHVzaFN0YXRlKCl7IHJldHVybiAodHlwZW9mIChoaXN0b3J5LnB1c2hTdGF0ZSkgIT09IFwidW5kZWZpbmVkXCIpIH0sXG5cbiAgZHJvcExvY2FsKGxvY2FsU3RvcmFnZSwgbmFtZXNwYWNlLCBzdWJrZXkpe1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsS2V5KG5hbWVzcGFjZSwgc3Via2V5KSlcbiAgfSxcblxuICB1cGRhdGVMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5LCBpbml0aWFsLCBmdW5jKXtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuZ2V0TG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSlcbiAgICBsZXQga2V5ID0gdGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSlcbiAgICBsZXQgbmV3VmFsID0gY3VycmVudCA9PT0gbnVsbCA/IGluaXRpYWwgOiBmdW5jKGN1cnJlbnQpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWwpKVxuICAgIHJldHVybiBuZXdWYWxcbiAgfSxcblxuICBnZXRMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5KXtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsS2V5KG5hbWVzcGFjZSwgc3Via2V5KSkpXG4gIH0sXG5cbiAgdXBkYXRlQ3VycmVudFN0YXRlKGNhbGxiYWNrKXtcbiAgICBpZighdGhpcy5jYW5QdXNoU3RhdGUoKSl7IHJldHVybiB9XG4gICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY2FsbGJhY2soaGlzdG9yeS5zdGF0ZSB8fCB7fSksIFwiXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICB9LFxuXG4gIHB1c2hTdGF0ZShraW5kLCBtZXRhLCB0byl7XG4gICAgaWYodGhpcy5jYW5QdXNoU3RhdGUoKSl7XG4gICAgICBpZih0byAhPT0gd2luZG93LmxvY2F0aW9uLmhyZWYpe1xuICAgICAgICBpZihtZXRhLnR5cGUgPT0gXCJyZWRpcmVjdFwiICYmIG1ldGEuc2Nyb2xsKXtcbiAgICAgICAgICAvLyBJZiB3ZSdyZSByZWRpcmVjdGluZyBzdG9yZSB0aGUgY3VycmVudCBzY3JvbGxZIGZvciB0aGUgY3VycmVudCBoaXN0b3J5IHN0YXRlLlxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBoaXN0b3J5LnN0YXRlIHx8IHt9XG4gICAgICAgICAgY3VycmVudFN0YXRlLnNjcm9sbCA9IG1ldGEuc2Nyb2xsXG4gICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY3VycmVudFN0YXRlLCBcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBtZXRhLnNjcm9sbCAvLyBPbmx5IHN0b3JlIHRoZSBzY3JvbGwgaW4gdGhlIHJlZGlyZWN0IGNhc2UuXG4gICAgICAgIGhpc3Rvcnlba2luZCArIFwiU3RhdGVcIl0obWV0YSwgXCJcIiwgdG8gfHwgbnVsbCkgLy8gSUUgd2lsbCBjb2VyY2UgdW5kZWZpbmVkIHRvIHN0cmluZ1xuICAgICAgICBsZXQgaGFzaEVsID0gdGhpcy5nZXRIYXNoVGFyZ2V0RWwod2luZG93LmxvY2F0aW9uLmhhc2gpXG5cbiAgICAgICAgaWYoaGFzaEVsKXtcbiAgICAgICAgICBoYXNoRWwuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICB9IGVsc2UgaWYobWV0YS50eXBlID09PSBcInJlZGlyZWN0XCIpe1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZGlyZWN0KHRvKVxuICAgIH1cbiAgfSxcblxuICBzZXRDb29raWUobmFtZSwgdmFsdWUpe1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke25hbWV9PSR7dmFsdWV9YFxuICB9LFxuXG4gIGdldENvb2tpZShuYW1lKXtcbiAgICByZXR1cm4gZG9jdW1lbnQuY29va2llLnJlcGxhY2UobmV3IFJlZ0V4cChgKD86KD86XnwuKjtcXHMqKSR7bmFtZX1cXHMqXFw9XFxzKihbXjtdKikuKiQpfF4uKiRgKSwgXCIkMVwiKVxuICB9LFxuXG4gIHJlZGlyZWN0KHRvVVJMLCBmbGFzaCl7XG4gICAgaWYoZmxhc2gpeyBCcm93c2VyLnNldENvb2tpZShcIl9fcGhvZW5peF9mbGFzaF9fXCIsIGZsYXNoICsgXCI7IG1heC1hZ2U9NjAwMDA7IHBhdGg9L1wiKSB9XG4gICAgd2luZG93LmxvY2F0aW9uID0gdG9VUkxcbiAgfSxcblxuICBsb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSl7IHJldHVybiBgJHtuYW1lc3BhY2V9LSR7c3Via2V5fWAgfSxcblxuICBnZXRIYXNoVGFyZ2V0RWwobWF5YmVIYXNoKXtcbiAgICBsZXQgaGFzaCA9IG1heWJlSGFzaC50b1N0cmluZygpLnN1YnN0cmluZygxKVxuICAgIGlmKGhhc2ggPT09IFwiXCIpeyByZXR1cm4gfVxuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBhW25hbWU9XCIke2hhc2h9XCJdYClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCcm93c2VyXG4iLCAiaW1wb3J0IHtcbiAgQ0hFQ0tBQkxFX0lOUFVUUyxcbiAgREVCT1VOQ0VfUFJFVl9LRVksXG4gIERFQk9VTkNFX1RSSUdHRVIsXG4gIEZPQ1VTQUJMRV9JTlBVVFMsXG4gIFBIWF9DT01QT05FTlQsXG4gIFBIWF9FVkVOVF9DTEFTU0VTLFxuICBQSFhfSEFTX0ZPQ1VTRUQsXG4gIFBIWF9IQVNfU1VCTUlUVEVELFxuICBQSFhfTUFJTixcbiAgUEhYX05PX0ZFRURCQUNLX0NMQVNTLFxuICBQSFhfUEFSRU5UX0lELFxuICBQSFhfUFJJVkFURSxcbiAgUEhYX1JFRixcbiAgUEhYX1JFRl9TUkMsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfU0VTU0lPTixcbiAgUEhYX1NUQVRJQyxcbiAgUEhYX1VQTE9BRF9SRUYsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQSFhfU1RJQ0tZLFxuICBUSFJPVFRMRURcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5sZXQgRE9NID0ge1xuICBieUlkKGlkKXsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSB8fCBsb2dFcnJvcihgbm8gaWQgZm91bmQgZm9yICR7aWR9YCkgfSxcblxuICByZW1vdmVDbGFzcyhlbCwgY2xhc3NOYW1lKXtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSlcbiAgICBpZihlbC5jbGFzc0xpc3QubGVuZ3RoID09PSAwKXsgZWwucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIikgfVxuICB9LFxuXG4gIGFsbChub2RlLCBxdWVyeSwgY2FsbGJhY2spe1xuICAgIGlmKCFub2RlKXsgcmV0dXJuIFtdIH1cbiAgICBsZXQgYXJyYXkgPSBBcnJheS5mcm9tKG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkpXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gYXJyYXkuZm9yRWFjaChjYWxsYmFjaykgOiBhcnJheVxuICB9LFxuXG4gIGNoaWxkTm9kZUxlbmd0aChodG1sKXtcbiAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sXG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQuY2hpbGRFbGVtZW50Q291bnRcbiAgfSxcblxuICBpc1VwbG9hZElucHV0KGVsKXsgcmV0dXJuIGVsLnR5cGUgPT09IFwiZmlsZVwiICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikgIT09IG51bGwgfSxcblxuICBmaW5kVXBsb2FkSW5wdXRzKG5vZGUpeyByZXR1cm4gdGhpcy5hbGwobm9kZSwgYGlucHV0W3R5cGU9XCJmaWxlXCJdWyR7UEhYX1VQTE9BRF9SRUZ9XWApIH0sXG5cbiAgZmluZENvbXBvbmVudE5vZGVMaXN0KG5vZGUsIGNpZCl7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXWApLCBub2RlKVxuICB9LFxuXG4gIGlzUGh4RGVzdHJveWVkKG5vZGUpe1xuICAgIHJldHVybiBub2RlLmlkICYmIERPTS5wcml2YXRlKG5vZGUsIFwiZGVzdHJveWVkXCIpID8gdHJ1ZSA6IGZhbHNlXG4gIH0sXG5cbiAgbWFya1BoeENoaWxkRGVzdHJveWVkKGVsKXtcbiAgICBpZih0aGlzLmlzUGh4Q2hpbGQoZWwpKXsgZWwuc2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OLCBcIlwiKSB9XG4gICAgdGhpcy5wdXRQcml2YXRlKGVsLCBcImRlc3Ryb3llZFwiLCB0cnVlKVxuICB9LFxuXG4gIGZpbmRQaHhDaGlsZHJlbkluRnJhZ21lbnQoaHRtbCwgcGFyZW50SWQpe1xuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcbiAgICByZXR1cm4gdGhpcy5maW5kUGh4Q2hpbGRyZW4odGVtcGxhdGUuY29udGVudCwgcGFyZW50SWQpXG4gIH0sXG5cbiAgaXNJZ25vcmVkKGVsLCBwaHhVcGRhdGUpe1xuICAgIHJldHVybiAoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkgfHwgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtdXBkYXRlXCIpKSA9PT0gXCJpZ25vcmVcIlxuICB9LFxuXG4gIGlzUGh4VXBkYXRlKGVsLCBwaHhVcGRhdGUsIHVwZGF0ZVR5cGVzKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlICYmIHVwZGF0ZVR5cGVzLmluZGV4T2YoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkpID49IDBcbiAgfSxcblxuICBmaW5kUGh4U3RpY2t5KGVsKXsgcmV0dXJuIHRoaXMuYWxsKGVsLCBgWyR7UEhYX1NUSUNLWX1dYCkgfSxcblxuICBmaW5kUGh4Q2hpbGRyZW4oZWwsIHBhcmVudElkKXtcbiAgICByZXR1cm4gdGhpcy5hbGwoZWwsIGAke1BIWF9WSUVXX1NFTEVDVE9SfVske1BIWF9QQVJFTlRfSUR9PVwiJHtwYXJlbnRJZH1cIl1gKVxuICB9LFxuXG4gIGZpbmRQYXJlbnRDSURzKG5vZGUsIGNpZHMpe1xuICAgIGxldCBpbml0aWFsID0gbmV3IFNldChjaWRzKVxuICAgIHJldHVybiBjaWRzLnJlZHVjZSgoYWNjLCBjaWQpID0+IHtcbiAgICAgIGxldCBzZWxlY3RvciA9IGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXSBbJHtQSFhfQ09NUE9ORU5UfV1gXG5cbiAgICAgIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIHNlbGVjdG9yKSwgbm9kZSlcbiAgICAgICAgLm1hcChlbCA9PiBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkpKVxuICAgICAgICAuZm9yRWFjaChjaGlsZENJRCA9PiBhY2MuZGVsZXRlKGNoaWxkQ0lEKSlcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGluaXRpYWwpXG4gIH0sXG5cbiAgZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KG5vZGVzLCBwYXJlbnQpe1xuICAgIGlmKHBhcmVudC5xdWVyeVNlbGVjdG9yKFBIWF9WSUVXX1NFTEVDVE9SKSl7XG4gICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGVsID0+IHRoaXMud2l0aGluU2FtZUxpdmVWaWV3KGVsLCBwYXJlbnQpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZXNcbiAgICB9XG4gIH0sXG5cbiAgd2l0aGluU2FtZUxpdmVWaWV3KG5vZGUsIHBhcmVudCl7XG4gICAgd2hpbGUobm9kZSA9IG5vZGUucGFyZW50Tm9kZSl7XG4gICAgICBpZihub2RlLmlzU2FtZU5vZGUocGFyZW50KSl7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmKG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSAhPT0gbnVsbCl7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICB9LFxuXG4gIHByaXZhdGUoZWwsIGtleSl7IHJldHVybiBlbFtQSFhfUFJJVkFURV0gJiYgZWxbUEhYX1BSSVZBVEVdW2tleV0gfSxcblxuICBkZWxldGVQcml2YXRlKGVsLCBrZXkpeyBlbFtQSFhfUFJJVkFURV0gJiYgZGVsZXRlIChlbFtQSFhfUFJJVkFURV1ba2V5XSkgfSxcblxuICBwdXRQcml2YXRlKGVsLCBrZXksIHZhbHVlKXtcbiAgICBpZighZWxbUEhYX1BSSVZBVEVdKXsgZWxbUEhYX1BSSVZBVEVdID0ge30gfVxuICAgIGVsW1BIWF9QUklWQVRFXVtrZXldID0gdmFsdWVcbiAgfSxcblxuICB1cGRhdGVQcml2YXRlKGVsLCBrZXksIGRlZmF1bHRWYWwsIHVwZGF0ZUZ1bmMpe1xuICAgIGxldCBleGlzdGluZyA9IHRoaXMucHJpdmF0ZShlbCwga2V5KVxuICAgIGlmKGV4aXN0aW5nID09PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5wdXRQcml2YXRlKGVsLCBrZXksIHVwZGF0ZUZ1bmMoZGVmYXVsdFZhbCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHV0UHJpdmF0ZShlbCwga2V5LCB1cGRhdGVGdW5jKGV4aXN0aW5nKSlcbiAgICB9XG4gIH0sXG5cbiAgY29weVByaXZhdGVzKHRhcmdldCwgc291cmNlKXtcbiAgICBpZihzb3VyY2VbUEhYX1BSSVZBVEVdKXtcbiAgICAgIHRhcmdldFtQSFhfUFJJVkFURV0gPSBzb3VyY2VbUEhYX1BSSVZBVEVdXG4gICAgfVxuICB9LFxuXG4gIHB1dFRpdGxlKHN0cil7XG4gICAgbGV0IHRpdGxlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIilcbiAgICBsZXQge3ByZWZpeCwgc3VmZml4fSA9IHRpdGxlRWwuZGF0YXNldFxuICAgIGRvY3VtZW50LnRpdGxlID0gYCR7cHJlZml4IHx8IFwiXCJ9JHtzdHJ9JHtzdWZmaXggfHwgXCJcIn1gXG4gIH0sXG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBwaHhEZWJvdW5jZSwgZGVmYXVsdERlYm91bmNlLCBwaHhUaHJvdHRsZSwgZGVmYXVsdFRocm90dGxlLCBhc3luY0ZpbHRlciwgY2FsbGJhY2spe1xuICAgIGxldCBkZWJvdW5jZSA9IGVsLmdldEF0dHJpYnV0ZShwaHhEZWJvdW5jZSlcbiAgICBsZXQgdGhyb3R0bGUgPSBlbC5nZXRBdHRyaWJ1dGUocGh4VGhyb3R0bGUpXG4gICAgaWYoZGVib3VuY2UgPT09IFwiXCIpeyBkZWJvdW5jZSA9IGRlZmF1bHREZWJvdW5jZSB9XG4gICAgaWYodGhyb3R0bGUgPT09IFwiXCIpeyB0aHJvdHRsZSA9IGRlZmF1bHRUaHJvdHRsZSB9XG4gICAgbGV0IHZhbHVlID0gZGVib3VuY2UgfHwgdGhyb3R0bGVcbiAgICBzd2l0Y2godmFsdWUpe1xuICAgICAgY2FzZSBudWxsOiByZXR1cm4gY2FsbGJhY2soKVxuXG4gICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICBpZih0aGlzLm9uY2UoZWwsIFwiZGVib3VuY2UtYmx1clwiKSl7XG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4gY2FsbGJhY2soKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJzZUludCh2YWx1ZSlcbiAgICAgICAgbGV0IHRyaWdnZXIgPSAoKSA9PiB0aHJvdHRsZSA/IHRoaXMuZGVsZXRlUHJpdmF0ZShlbCwgVEhST1RUTEVEKSA6IGNhbGxiYWNrKClcbiAgICAgICAgbGV0IGN1cnJlbnRDeWNsZSA9IHRoaXMuaW5jQ3ljbGUoZWwsIERFQk9VTkNFX1RSSUdHRVIsIHRyaWdnZXIpXG4gICAgICAgIGlmKGlzTmFOKHRpbWVvdXQpKXsgcmV0dXJuIGxvZ0Vycm9yKGBpbnZhbGlkIHRocm90dGxlL2RlYm91bmNlIHZhbHVlOiAke3ZhbHVlfWApIH1cbiAgICAgICAgaWYodGhyb3R0bGUpe1xuICAgICAgICAgIGxldCBuZXdLZXlEb3duID0gZmFsc2VcbiAgICAgICAgICBpZihldmVudC50eXBlID09PSBcImtleWRvd25cIil7XG4gICAgICAgICAgICBsZXQgcHJldktleSA9IHRoaXMucHJpdmF0ZShlbCwgREVCT1VOQ0VfUFJFVl9LRVkpXG4gICAgICAgICAgICB0aGlzLnB1dFByaXZhdGUoZWwsIERFQk9VTkNFX1BSRVZfS0VZLCBldmVudC5rZXkpXG4gICAgICAgICAgICBuZXdLZXlEb3duID0gcHJldktleSAhPT0gZXZlbnQua2V5XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIW5ld0tleURvd24gJiYgdGhpcy5wcml2YXRlKGVsLCBUSFJPVFRMRUQpKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICB0aGlzLnB1dFByaXZhdGUoZWwsIFRIUk9UVExFRCwgdHJ1ZSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZihhc3luY0ZpbHRlcigpKXsgdGhpcy50cmlnZ2VyQ3ljbGUoZWwsIERFQk9VTkNFX1RSSUdHRVIpIH1cbiAgICAgICAgICAgIH0sIHRpbWVvdXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYoYXN5bmNGaWx0ZXIoKSl7IHRoaXMudHJpZ2dlckN5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSLCBjdXJyZW50Q3ljbGUpIH1cbiAgICAgICAgICB9LCB0aW1lb3V0KVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvcm0gPSBlbC5mb3JtXG4gICAgICAgIGlmKGZvcm0gJiYgdGhpcy5vbmNlKGZvcm0sIFwiYmluZC1kZWJvdW5jZVwiKSl7XG4gICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsICgpID0+IHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oKG5ldyBGb3JtRGF0YShmb3JtKSkuZW50cmllcygpLCAoW25hbWVdKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpbnB1dCA9IGZvcm0ucXVlcnlTZWxlY3RvcihgW25hbWU9XCIke25hbWV9XCJdYClcbiAgICAgICAgICAgICAgdGhpcy5pbmNDeWNsZShpbnB1dCwgREVCT1VOQ0VfVFJJR0dFUilcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVQcml2YXRlKGlucHV0LCBUSFJPVFRMRUQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5vbmNlKGVsLCBcImJpbmQtZGVib3VuY2VcIikpe1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMudHJpZ2dlckN5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSKSlcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmlnZ2VyQ3ljbGUoZWwsIGtleSwgY3VycmVudEN5Y2xlKXtcbiAgICBsZXQgW2N5Y2xlLCB0cmlnZ2VyXSA9IHRoaXMucHJpdmF0ZShlbCwga2V5KVxuICAgIGlmKCFjdXJyZW50Q3ljbGUpeyBjdXJyZW50Q3ljbGUgPSBjeWNsZSB9XG4gICAgaWYoY3VycmVudEN5Y2xlID09PSBjeWNsZSl7XG4gICAgICB0aGlzLmluY0N5Y2xlKGVsLCBrZXkpXG4gICAgICB0cmlnZ2VyKClcbiAgICB9XG4gIH0sXG5cbiAgb25jZShlbCwga2V5KXtcbiAgICBpZih0aGlzLnByaXZhdGUoZWwsIGtleSkgPT09IHRydWUpeyByZXR1cm4gZmFsc2UgfVxuICAgIHRoaXMucHV0UHJpdmF0ZShlbCwga2V5LCB0cnVlKVxuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgaW5jQ3ljbGUoZWwsIGtleSwgdHJpZ2dlciA9IGZ1bmN0aW9uICgpeyB9KXtcbiAgICBsZXQgW2N1cnJlbnRDeWNsZV0gPSB0aGlzLnByaXZhdGUoZWwsIGtleSkgfHwgWzAsIHRyaWdnZXJdXG4gICAgY3VycmVudEN5Y2xlKytcbiAgICB0aGlzLnB1dFByaXZhdGUoZWwsIGtleSwgW2N1cnJlbnRDeWNsZSwgdHJpZ2dlcl0pXG4gICAgcmV0dXJuIGN1cnJlbnRDeWNsZVxuICB9LFxuXG4gIGRpc2NhcmRFcnJvcihjb250YWluZXIsIGVsLCBwaHhGZWVkYmFja0Zvcil7XG4gICAgbGV0IGZpZWxkID0gZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShwaHhGZWVkYmFja0ZvcilcbiAgICAvLyBUT0RPOiBSZW1vdmUgaWQgbG9va3VwIGFmdGVyIHdlIHVwZGF0ZSBQaG9lbml4IHRvIHVzZSBpbnB1dF9uYW1lIGluc3RlYWQgb2YgaW5wdXRfaWRcbiAgICBsZXQgaW5wdXQgPSBmaWVsZCAmJiBjb250YWluZXIucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtmaWVsZH1cIl0sIFtuYW1lPVwiJHtmaWVsZH1cIl1gKVxuICAgIGlmKCFpbnB1dCl7IHJldHVybiB9XG5cbiAgICBpZighKHRoaXMucHJpdmF0ZShpbnB1dCwgUEhYX0hBU19GT0NVU0VEKSB8fCB0aGlzLnByaXZhdGUoaW5wdXQuZm9ybSwgUEhYX0hBU19TVUJNSVRURUQpKSl7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKFBIWF9OT19GRUVEQkFDS19DTEFTUylcbiAgICB9XG4gIH0sXG5cbiAgc2hvd0Vycm9yKGlucHV0RWwsIHBoeEZlZWRiYWNrRm9yKXtcbiAgICBpZihpbnB1dEVsLmlkIHx8IGlucHV0RWwubmFtZSl7XG4gICAgICB0aGlzLmFsbChpbnB1dEVsLmZvcm0sIGBbJHtwaHhGZWVkYmFja0Zvcn09XCIke2lucHV0RWwuaWR9XCJdLCBbJHtwaHhGZWVkYmFja0Zvcn09XCIke2lucHV0RWwubmFtZX1cIl1gLCAoZWwpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcyhlbCwgUEhYX05PX0ZFRURCQUNLX0NMQVNTKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgaXNQaHhDaGlsZChub2RlKXtcbiAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoUEhYX1BBUkVOVF9JRClcbiAgfSxcblxuICBpc1BoeFN0aWNreShub2RlKXtcbiAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoUEhYX1NUSUNLWSkgIT09IG51bGxcbiAgfSxcblxuICBmaXJzdFBoeENoaWxkKGVsKXtcbiAgICByZXR1cm4gdGhpcy5pc1BoeENoaWxkKGVsKSA/IGVsIDogdGhpcy5hbGwoZWwsIGBbJHtQSFhfUEFSRU5UX0lEfV1gKVswXVxuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQodGFyZ2V0LCBuYW1lLCBvcHRzID0ge30pe1xuICAgIGxldCBidWJibGVzID0gb3B0cy5idWJibGVzID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRzLmJ1YmJsZXNcbiAgICBsZXQgZXZlbnRPcHRzID0ge2J1YmJsZXM6IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogb3B0cy5kZXRhaWwgfHwge319XG4gICAgbGV0IGV2ZW50ID0gbmFtZSA9PT0gXCJjbGlja1wiID8gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLCBldmVudE9wdHMpIDogbmV3IEN1c3RvbUV2ZW50KG5hbWUsIGV2ZW50T3B0cylcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbiAgfSxcblxuICBjbG9uZU5vZGUobm9kZSwgaHRtbCl7XG4gICAgaWYodHlwZW9mIChodG1sKSA9PT0gXCJ1bmRlZmluZWRcIil7XG4gICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUodHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNsb25lZCA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKVxuICAgICAgY2xvbmVkLmlubmVySFRNTCA9IGh0bWxcbiAgICAgIHJldHVybiBjbG9uZWRcbiAgICB9XG4gIH0sXG5cbiAgbWVyZ2VBdHRycyh0YXJnZXQsIHNvdXJjZSwgb3B0cyA9IHt9KXtcbiAgICBsZXQgZXhjbHVkZSA9IG9wdHMuZXhjbHVkZSB8fCBbXVxuICAgIGxldCBpc0lnbm9yZWQgPSBvcHRzLmlzSWdub3JlZFxuICAgIGxldCBzb3VyY2VBdHRycyA9IHNvdXJjZS5hdHRyaWJ1dGVzXG4gICAgZm9yKGxldCBpID0gc291cmNlQXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgbGV0IG5hbWUgPSBzb3VyY2VBdHRyc1tpXS5uYW1lXG4gICAgICBpZihleGNsdWRlLmluZGV4T2YobmFtZSkgPCAwKXsgdGFyZ2V0LnNldEF0dHJpYnV0ZShuYW1lLCBzb3VyY2UuZ2V0QXR0cmlidXRlKG5hbWUpKSB9XG4gICAgfVxuXG4gICAgbGV0IHRhcmdldEF0dHJzID0gdGFyZ2V0LmF0dHJpYnV0ZXNcbiAgICBmb3IobGV0IGkgPSB0YXJnZXRBdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG4gICAgICBsZXQgbmFtZSA9IHRhcmdldEF0dHJzW2ldLm5hbWVcbiAgICAgIGlmKGlzSWdub3JlZCl7XG4gICAgICAgIGlmKG5hbWUuc3RhcnRzV2l0aChcImRhdGEtXCIpICYmICFzb3VyY2UuaGFzQXR0cmlidXRlKG5hbWUpKXsgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShuYW1lKSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighc291cmNlLmhhc0F0dHJpYnV0ZShuYW1lKSl7IHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUobmFtZSkgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXJnZUZvY3VzZWRJbnB1dCh0YXJnZXQsIHNvdXJjZSl7XG4gICAgLy8gc2tpcCBzZWxlY3RzIGJlY2F1c2UgRkYgd2lsbCByZXNldCBoaWdobGlnaHRlZCBpbmRleCBmb3IgYW55IHNldEF0dHJpYnV0ZVxuICAgIGlmKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKXsgRE9NLm1lcmdlQXR0cnModGFyZ2V0LCBzb3VyY2UsIHtleGNsdWRlOiBbXCJ2YWx1ZVwiXX0pIH1cbiAgICBpZihzb3VyY2UucmVhZE9ubHkpe1xuICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInJlYWRvbmx5XCIsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKVxuICAgIH1cbiAgfSxcblxuICBoYXNTZWxlY3Rpb25SYW5nZShlbCl7XG4gICAgcmV0dXJuIGVsLnNldFNlbGVjdGlvblJhbmdlICYmIChlbC50eXBlID09PSBcInRleHRcIiB8fCBlbC50eXBlID09PSBcInRleHRhcmVhXCIpXG4gIH0sXG5cbiAgcmVzdG9yZUZvY3VzKGZvY3VzZWQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpe1xuICAgIGlmKCFET00uaXNUZXh0dWFsSW5wdXQoZm9jdXNlZCkpeyByZXR1cm4gfVxuICAgIGxldCB3YXNGb2N1c2VkID0gZm9jdXNlZC5tYXRjaGVzKFwiOmZvY3VzXCIpXG4gICAgaWYoZm9jdXNlZC5yZWFkT25seSl7IGZvY3VzZWQuYmx1cigpIH1cbiAgICBpZighd2FzRm9jdXNlZCl7IGZvY3VzZWQuZm9jdXMoKSB9XG4gICAgaWYodGhpcy5oYXNTZWxlY3Rpb25SYW5nZShmb2N1c2VkKSl7XG4gICAgICBmb2N1c2VkLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpXG4gICAgfVxuICB9LFxuXG4gIGlzRm9ybUlucHV0KGVsKXsgcmV0dXJuIC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaS50ZXN0KGVsLnRhZ05hbWUpICYmIGVsLnR5cGUgIT09IFwiYnV0dG9uXCIgfSxcblxuICBzeW5jQXR0cnNUb1Byb3BzKGVsKXtcbiAgICBpZihlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgQ0hFQ0tBQkxFX0lOUFVUUy5pbmRleE9mKGVsLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSkgPj0gMCl7XG4gICAgICBlbC5jaGVja2VkID0gZWwuZ2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiKSAhPT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBpc1RleHR1YWxJbnB1dChlbCl7IHJldHVybiBGT0NVU0FCTEVfSU5QVVRTLmluZGV4T2YoZWwudHlwZSkgPj0gMCB9LFxuXG4gIGlzTm93VHJpZ2dlckZvcm1FeHRlcm5hbChlbCwgcGh4VHJpZ2dlckV4dGVybmFsKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShwaHhUcmlnZ2VyRXh0ZXJuYWwpICE9PSBudWxsXG4gIH0sXG5cbiAgc3luY1BlbmRpbmdSZWYoZnJvbUVsLCB0b0VsLCBkaXNhYmxlV2l0aCl7XG4gICAgbGV0IHJlZiA9IGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICBpZihyZWYgPT09IG51bGwpeyByZXR1cm4gdHJ1ZSB9XG4gICAgbGV0IHJlZlNyYyA9IGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1JFRl9TUkMpXG5cbiAgICBpZihET00uaXNGb3JtSW5wdXQoZnJvbUVsKSB8fCBmcm9tRWwuZ2V0QXR0cmlidXRlKGRpc2FibGVXaXRoKSAhPT0gbnVsbCl7XG4gICAgICBpZihET00uaXNVcGxvYWRJbnB1dChmcm9tRWwpKXsgRE9NLm1lcmdlQXR0cnMoZnJvbUVsLCB0b0VsLCB7aXNJZ25vcmVkOiB0cnVlfSkgfVxuICAgICAgRE9NLnB1dFByaXZhdGUoZnJvbUVsLCBQSFhfUkVGLCB0b0VsKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIFBIWF9FVkVOVF9DTEFTU0VTLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgZnJvbUVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpICYmIHRvRWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpXG4gICAgICB9KVxuICAgICAgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRiwgcmVmKVxuICAgICAgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRl9TUkMsIHJlZlNyYylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNsZWFuQ2hpbGROb2Rlcyhjb250YWluZXIsIHBoeFVwZGF0ZSl7XG4gICAgaWYoRE9NLmlzUGh4VXBkYXRlKGNvbnRhaW5lciwgcGh4VXBkYXRlLCBbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKSl7XG4gICAgICBsZXQgdG9SZW1vdmUgPSBbXVxuICAgICAgY29udGFpbmVyLmNoaWxkTm9kZXMuZm9yRWFjaChjaGlsZE5vZGUgPT4ge1xuICAgICAgICBpZighY2hpbGROb2RlLmlkKXtcbiAgICAgICAgICAvLyBTa2lwIHdhcm5pbmcgaWYgaXQncyBhbiBlbXB0eSB0ZXh0IG5vZGUgKGUuZy4gYSBuZXctbGluZSlcbiAgICAgICAgICBsZXQgaXNFbXB0eVRleHROb2RlID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBjaGlsZE5vZGUubm9kZVZhbHVlLnRyaW0oKSA9PT0gXCJcIlxuICAgICAgICAgIGlmKCFpc0VtcHR5VGV4dE5vZGUpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJvbmx5IEhUTUwgZWxlbWVudCB0YWdzIHdpdGggYW4gaWQgYXJlIGFsbG93ZWQgaW5zaWRlIGNvbnRhaW5lcnMgd2l0aCBwaHgtdXBkYXRlLlxcblxcblwiICtcbiAgICAgICAgICAgICAgYHJlbW92aW5nIGlsbGVnYWwgbm9kZTogXCIkeyhjaGlsZE5vZGUub3V0ZXJIVE1MIHx8IGNoaWxkTm9kZS5ub2RlVmFsdWUpLnRyaW0oKX1cIlxcblxcbmApXG4gICAgICAgICAgfVxuICAgICAgICAgIHRvUmVtb3ZlLnB1c2goY2hpbGROb2RlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdG9SZW1vdmUuZm9yRWFjaChjaGlsZE5vZGUgPT4gY2hpbGROb2RlLnJlbW92ZSgpKVxuICAgIH1cbiAgfSxcblxuICByZXBsYWNlUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhZ05hbWUsIGF0dHJzKXtcbiAgICBsZXQgcmV0YWluZWRBdHRycyA9IG5ldyBTZXQoW1wiaWRcIiwgUEhYX1NFU1NJT04sIFBIWF9TVEFUSUMsIFBIWF9NQUlOLCBQSFhfUk9PVF9JRF0pXG4gICAgaWYoY29udGFpbmVyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIEFycmF5LmZyb20oY29udGFpbmVyLmF0dHJpYnV0ZXMpXG4gICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhcmV0YWluZWRBdHRycy5oYXMoYXR0ci5uYW1lLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAuZm9yRWFjaChhdHRyID0+IGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKSlcblxuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiAhcmV0YWluZWRBdHRycy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgLmZvckVhY2goYXR0ciA9PiBjb250YWluZXIuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKSlcblxuICAgICAgcmV0dXJuIGNvbnRhaW5lclxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpXG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChhdHRyID0+IG5ld0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoYXR0ciwgYXR0cnNbYXR0cl0pKVxuICAgICAgcmV0YWluZWRBdHRycy5mb3JFYWNoKGF0dHIgPT4gbmV3Q29udGFpbmVyLnNldEF0dHJpYnV0ZShhdHRyLCBjb250YWluZXIuZ2V0QXR0cmlidXRlKGF0dHIpKSlcbiAgICAgIG5ld0NvbnRhaW5lci5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MXG4gICAgICBjb250YWluZXIucmVwbGFjZVdpdGgobmV3Q29udGFpbmVyKVxuICAgICAgcmV0dXJuIG5ld0NvbnRhaW5lclxuICAgIH1cbiAgfSxcblxuICBnZXRTdGlja3koZWwsIG5hbWUsIGRlZmF1bHRWYWwpe1xuICAgIGxldCBvcCA9IChET00ucHJpdmF0ZShlbCwgXCJzdGlja3lcIikgfHwgW10pLmZpbmQoKFtleGlzdGluZ05hbWUsIF0pID0+IG5hbWUgPT09IGV4aXN0aW5nTmFtZSlcbiAgICBpZihvcCl7XG4gICAgICBsZXQgW19uYW1lLCBfb3AsIHN0YXNoZWRSZXN1bHRdID0gb3BcbiAgICAgIHJldHVybiBzdGFzaGVkUmVzdWx0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlb2YoZGVmYXVsdFZhbCkgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWwoKSA6IGRlZmF1bHRWYWxcbiAgICB9XG4gIH0sXG5cbiAgZGVsZXRlU3RpY2t5KGVsLCBuYW1lKXtcbiAgICB0aGlzLnVwZGF0ZVByaXZhdGUoZWwsIFwic3RpY2t5XCIsIFtdLCBvcHMgPT4ge1xuICAgICAgcmV0dXJuIG9wcy5maWx0ZXIoKFtleGlzdGluZ05hbWUsIF9dKSA9PiBleGlzdGluZ05hbWUgIT09IG5hbWUpXG4gICAgfSlcbiAgfSxcblxuICBwdXRTdGlja3koZWwsIG5hbWUsIG9wKXtcbiAgICBsZXQgc3Rhc2hlZFJlc3VsdCA9IG9wKGVsKVxuICAgIHRoaXMudXBkYXRlUHJpdmF0ZShlbCwgXCJzdGlja3lcIiwgW10sIG9wcyA9PiB7XG4gICAgICBsZXQgZXhpc3RpbmdJbmRleCA9IG9wcy5maW5kSW5kZXgoKFtleGlzdGluZ05hbWUsIF0pID0+IG5hbWUgPT09IGV4aXN0aW5nTmFtZSlcbiAgICAgIGlmKGV4aXN0aW5nSW5kZXggPj0gMCl7XG4gICAgICAgIG9wc1tleGlzdGluZ0luZGV4XSA9IFtuYW1lLCBvcCwgc3Rhc2hlZFJlc3VsdF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wcy5wdXNoKFtuYW1lLCBvcCwgc3Rhc2hlZFJlc3VsdF0pXG4gICAgICB9XG4gICAgICByZXR1cm4gb3BzXG4gICAgfSlcbiAgfSxcblxuICBhcHBseVN0aWNreU9wZXJhdGlvbnMoZWwpe1xuICAgIGxldCBvcHMgPSBET00ucHJpdmF0ZShlbCwgXCJzdGlja3lcIilcbiAgICBpZighb3BzKXsgcmV0dXJuIH1cblxuICAgIG9wcy5mb3JFYWNoKChbbmFtZSwgb3AsIF9zdGFzaGVkXSkgPT4gdGhpcy5wdXRTdGlja3koZWwsIG5hbWUsIG9wKSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBET01cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgY2hhbm5lbFVwbG9hZGVyLFxuICBsb2dFcnJvclxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZEVudHJ5IHtcbiAgc3RhdGljIGlzQWN0aXZlKGZpbGVFbCwgZmlsZSl7XG4gICAgbGV0IGlzTmV3ID0gZmlsZS5fcGh4UmVmID09PSB1bmRlZmluZWRcbiAgICBsZXQgYWN0aXZlUmVmcyA9IGZpbGVFbC5nZXRBdHRyaWJ1dGUoUEhYX0FDVElWRV9FTlRSWV9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNBY3RpdmUgPSBhY3RpdmVSZWZzLmluZGV4T2YoTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSkpID49IDBcbiAgICByZXR1cm4gZmlsZS5zaXplID4gMCAmJiAoaXNOZXcgfHwgaXNBY3RpdmUpXG4gIH1cblxuICBzdGF0aWMgaXNQcmVmbGlnaHRlZChmaWxlRWwsIGZpbGUpe1xuICAgIGxldCBwcmVmbGlnaHRlZFJlZnMgPSBmaWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNQcmVmbGlnaHRlZCA9IHByZWZsaWdodGVkUmVmcy5pbmRleE9mKExpdmVVcGxvYWRlci5nZW5GaWxlUmVmKGZpbGUpKSA+PSAwXG4gICAgcmV0dXJuIGlzUHJlZmxpZ2h0ZWQgJiYgdGhpcy5pc0FjdGl2ZShmaWxlRWwsIGZpbGUpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihmaWxlRWwsIGZpbGUsIHZpZXcpe1xuICAgIHRoaXMucmVmID0gTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSlcbiAgICB0aGlzLmZpbGVFbCA9IGZpbGVFbFxuICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5tZXRhID0gbnVsbFxuICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2VcbiAgICB0aGlzLl9pc0RvbmUgPSBmYWxzZVxuICAgIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgIHRoaXMuX2xhc3RQcm9ncmVzc1NlbnQgPSAtMVxuICAgIHRoaXMuX29uRG9uZSA9IGZ1bmN0aW9uICgpeyB9XG4gICAgdGhpcy5fb25FbFVwZGF0ZWQgPSB0aGlzLm9uRWxVcGRhdGVkLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbGVFbC5hZGRFdmVudExpc3RlbmVyKFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCwgdGhpcy5fb25FbFVwZGF0ZWQpXG4gIH1cblxuICBtZXRhZGF0YSgpeyByZXR1cm4gdGhpcy5tZXRhIH1cblxuICBwcm9ncmVzcyhwcm9ncmVzcyl7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSBNYXRoLmZsb29yKHByb2dyZXNzKVxuICAgIGlmKHRoaXMuX3Byb2dyZXNzID4gdGhpcy5fbGFzdFByb2dyZXNzU2VudCl7XG4gICAgICBpZih0aGlzLl9wcm9ncmVzcyA+PSAxMDApe1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IDEwMFxuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3NTZW50ID0gMTAwXG4gICAgICAgIHRoaXMuX2lzRG9uZSA9IHRydWVcbiAgICAgICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCAxMDAsICgpID0+IHtcbiAgICAgICAgICBMaXZlVXBsb2FkZXIudW50cmFja0ZpbGUodGhpcy5maWxlRWwsIHRoaXMuZmlsZSlcbiAgICAgICAgICB0aGlzLl9vbkRvbmUoKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzU2VudCA9IHRoaXMuX3Byb2dyZXNzXG4gICAgICAgIHRoaXMudmlldy5wdXNoRmlsZVByb2dyZXNzKHRoaXMuZmlsZUVsLCB0aGlzLnJlZiwgdGhpcy5fcHJvZ3Jlc3MpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCl7XG4gICAgdGhpcy5faXNDYW5jZWxsZWQgPSB0cnVlXG4gICAgdGhpcy5faXNEb25lID0gdHJ1ZVxuICAgIHRoaXMuX29uRG9uZSgpXG4gIH1cblxuICBpc0RvbmUoKXsgcmV0dXJuIHRoaXMuX2lzRG9uZSB9XG5cbiAgZXJyb3IocmVhc29uID0gXCJmYWlsZWRcIil7XG4gICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCB7ZXJyb3I6IHJlYXNvbn0pXG4gICAgTGl2ZVVwbG9hZGVyLmNsZWFyRmlsZXModGhpcy5maWxlRWwpXG4gIH1cblxuICAvL3ByaXZhdGVcblxuICBvbkRvbmUoY2FsbGJhY2spe1xuICAgIHRoaXMuX29uRG9uZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuZmlsZUVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoUEhYX0xJVkVfRklMRV9VUERBVEVELCB0aGlzLl9vbkVsVXBkYXRlZClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBvbkVsVXBkYXRlZCgpe1xuICAgIGxldCBhY3RpdmVSZWZzID0gdGhpcy5maWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9BQ1RJVkVfRU5UUllfUkVGUykuc3BsaXQoXCIsXCIpXG4gICAgaWYoYWN0aXZlUmVmcy5pbmRleE9mKHRoaXMucmVmKSA9PT0gLTEpeyB0aGlzLmNhbmNlbCgpIH1cbiAgfVxuXG4gIHRvUHJlZmxpZ2h0UGF5bG9hZCgpe1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X21vZGlmaWVkOiB0aGlzLmZpbGUubGFzdE1vZGlmaWVkLFxuICAgICAgbmFtZTogdGhpcy5maWxlLm5hbWUsXG4gICAgICBzaXplOiB0aGlzLmZpbGUuc2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMuZmlsZS50eXBlLFxuICAgICAgcmVmOiB0aGlzLnJlZlxuICAgIH1cbiAgfVxuXG4gIHVwbG9hZGVyKHVwbG9hZGVycyl7XG4gICAgaWYodGhpcy5tZXRhLnVwbG9hZGVyKXtcbiAgICAgIGxldCBjYWxsYmFjayA9IHVwbG9hZGVyc1t0aGlzLm1ldGEudXBsb2FkZXJdIHx8IGxvZ0Vycm9yKGBubyB1cGxvYWRlciBjb25maWd1cmVkIGZvciAke3RoaXMubWV0YS51cGxvYWRlcn1gKVxuICAgICAgcmV0dXJuIHtuYW1lOiB0aGlzLm1ldGEudXBsb2FkZXIsIGNhbGxiYWNrOiBjYWxsYmFja31cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtuYW1lOiBcImNoYW5uZWxcIiwgY2FsbGJhY2s6IGNoYW5uZWxVcGxvYWRlcn1cbiAgICB9XG4gIH1cblxuICB6aXBQb3N0RmxpZ2h0KHJlc3Ape1xuICAgIHRoaXMubWV0YSA9IHJlc3AuZW50cmllc1t0aGlzLnJlZl1cbiAgICBpZighdGhpcy5tZXRhKXsgbG9nRXJyb3IoYG5vIHByZWZsaWdodCB1cGxvYWQgcmVzcG9uc2UgcmV0dXJuZWQgd2l0aCByZWYgJHt0aGlzLnJlZn1gLCB7aW5wdXQ6IHRoaXMuZmlsZUVsLCByZXNwb25zZTogcmVzcH0pIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFBIWF9ET05FX1JFRlMsXG4gIFBIWF9QUkVGTElHSFRFRF9SRUZTLFxuICBQSFhfVVBMT0FEX1JFRlxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBVcGxvYWRFbnRyeSBmcm9tIFwiLi91cGxvYWRfZW50cnlcIlxuXG5sZXQgbGl2ZVVwbG9hZGVyRmlsZVJlZiA9IDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZVVwbG9hZGVyIHtcbiAgc3RhdGljIGdlbkZpbGVSZWYoZmlsZSl7XG4gICAgbGV0IHJlZiA9IGZpbGUuX3BoeFJlZlxuICAgIGlmKHJlZiAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIHJldHVybiByZWZcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZS5fcGh4UmVmID0gKGxpdmVVcGxvYWRlckZpbGVSZWYrKykudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuIGZpbGUuX3BoeFJlZlxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRFbnRyeURhdGFVUkwoaW5wdXRFbCwgcmVmLCBjYWxsYmFjayl7XG4gICAgbGV0IGZpbGUgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpLmZpbmQoZmlsZSA9PiB0aGlzLmdlbkZpbGVSZWYoZmlsZSkgPT09IHJlZilcbiAgICBjYWxsYmFjayhVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKVxuICB9XG5cbiAgc3RhdGljIGhhc1VwbG9hZHNJblByb2dyZXNzKGZvcm1FbCl7XG4gICAgbGV0IGFjdGl2ZSA9IDBcbiAgICBET00uZmluZFVwbG9hZElucHV0cyhmb3JtRWwpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYoaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSAhPT0gaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9ET05FX1JFRlMpKXtcbiAgICAgICAgYWN0aXZlKytcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBhY3RpdmUgPiAwXG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKXtcbiAgICBsZXQgZmlsZXMgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpXG4gICAgbGV0IGZpbGVEYXRhID0ge31cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGVudHJ5ID0ge3BhdGg6IGlucHV0RWwubmFtZX1cbiAgICAgIGxldCB1cGxvYWRSZWYgPSBpbnB1dEVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRilcbiAgICAgIGZpbGVEYXRhW3VwbG9hZFJlZl0gPSBmaWxlRGF0YVt1cGxvYWRSZWZdIHx8IFtdXG4gICAgICBlbnRyeS5yZWYgPSB0aGlzLmdlbkZpbGVSZWYoZmlsZSlcbiAgICAgIGVudHJ5Lm5hbWUgPSBmaWxlLm5hbWUgfHwgZW50cnkucmVmXG4gICAgICBlbnRyeS50eXBlID0gZmlsZS50eXBlXG4gICAgICBlbnRyeS5zaXplID0gZmlsZS5zaXplXG4gICAgICBmaWxlRGF0YVt1cGxvYWRSZWZdLnB1c2goZW50cnkpXG4gICAgfSlcbiAgICByZXR1cm4gZmlsZURhdGFcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckZpbGVzKGlucHV0RWwpe1xuICAgIGlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgaW5wdXRFbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpXG4gICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyB1bnRyYWNrRmlsZShpbnB1dEVsLCBmaWxlKXtcbiAgICBET00ucHV0UHJpdmF0ZShpbnB1dEVsLCBcImZpbGVzXCIsIERPTS5wcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIikuZmlsdGVyKGYgPT4gIU9iamVjdC5pcyhmLCBmaWxlKSkpXG4gIH1cblxuICBzdGF0aWMgdHJhY2tGaWxlcyhpbnB1dEVsLCBmaWxlcyl7XG4gICAgaWYoaW5wdXRFbC5nZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSAhPT0gbnVsbCl7XG4gICAgICBsZXQgbmV3RmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiAhdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5maW5kKGYgPT4gT2JqZWN0LmlzKGYsIGZpbGUpKSlcbiAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIiwgdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5jb25jYXQobmV3RmlsZXMpKVxuICAgICAgaW5wdXRFbC52YWx1ZSA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBmaWxlcylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYWN0aXZlRmlsZUlucHV0cyhmb3JtRWwpe1xuICAgIGxldCBmaWxlSW5wdXRzID0gRE9NLmZpbmRVcGxvYWRJbnB1dHMoZm9ybUVsKVxuICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVJbnB1dHMpLmZpbHRlcihlbCA9PiBlbC5maWxlcyAmJiB0aGlzLmFjdGl2ZUZpbGVzKGVsKS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGFjdGl2ZUZpbGVzKGlucHV0KXtcbiAgICByZXR1cm4gKERPTS5wcml2YXRlKGlucHV0LCBcImZpbGVzXCIpIHx8IFtdKS5maWx0ZXIoZiA9PiBVcGxvYWRFbnRyeS5pc0FjdGl2ZShpbnB1dCwgZikpXG4gIH1cblxuICBzdGF0aWMgaW5wdXRzQXdhaXRpbmdQcmVmbGlnaHQoZm9ybUVsKXtcbiAgICBsZXQgZmlsZUlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKGZvcm1FbClcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlSW5wdXRzKS5maWx0ZXIoaW5wdXQgPT4gdGhpcy5maWxlc0F3YWl0aW5nUHJlZmxpZ2h0KGlucHV0KS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGZpbGVzQXdhaXRpbmdQcmVmbGlnaHQoaW5wdXQpe1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0KS5maWx0ZXIoZiA9PiAhVXBsb2FkRW50cnkuaXNQcmVmbGlnaHRlZChpbnB1dCwgZikpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihpbnB1dEVsLCB2aWV3LCBvbkNvbXBsZXRlKXtcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5vbkNvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgIHRoaXMuX2VudHJpZXMgPVxuICAgICAgQXJyYXkuZnJvbShMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKSB8fCBbXSlcbiAgICAgICAgLm1hcChmaWxlID0+IG5ldyBVcGxvYWRFbnRyeShpbnB1dEVsLCBmaWxlLCB2aWV3KSlcblxuICAgIHRoaXMubnVtRW50cmllc0luUHJvZ3Jlc3MgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aFxuICB9XG5cbiAgZW50cmllcygpeyByZXR1cm4gdGhpcy5fZW50cmllcyB9XG5cbiAgaW5pdEFkYXB0ZXJVcGxvYWQocmVzcCwgb25FcnJvciwgbGl2ZVNvY2tldCl7XG4gICAgdGhpcy5fZW50cmllcyA9XG4gICAgICB0aGlzLl9lbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgIGVudHJ5LnppcFBvc3RGbGlnaHQocmVzcClcbiAgICAgICAgZW50cnkub25Eb25lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm51bUVudHJpZXNJblByb2dyZXNzLS1cbiAgICAgICAgICBpZih0aGlzLm51bUVudHJpZXNJblByb2dyZXNzID09PSAwKXsgdGhpcy5vbkNvbXBsZXRlKCkgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZW50cnlcbiAgICAgIH0pXG5cbiAgICBsZXQgZ3JvdXBlZEVudHJpZXMgPSB0aGlzLl9lbnRyaWVzLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgbGV0IHtuYW1lLCBjYWxsYmFja30gPSBlbnRyeS51cGxvYWRlcihsaXZlU29ja2V0LnVwbG9hZGVycylcbiAgICAgIGFjY1tuYW1lXSA9IGFjY1tuYW1lXSB8fCB7Y2FsbGJhY2s6IGNhbGxiYWNrLCBlbnRyaWVzOiBbXX1cbiAgICAgIGFjY1tuYW1lXS5lbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30pXG5cbiAgICBmb3IobGV0IG5hbWUgaW4gZ3JvdXBlZEVudHJpZXMpe1xuICAgICAgbGV0IHtjYWxsYmFjaywgZW50cmllc30gPSBncm91cGVkRW50cmllc1tuYW1lXVxuICAgICAgY2FsbGJhY2soZW50cmllcywgb25FcnJvciwgcmVzcCwgbGl2ZVNvY2tldClcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlMsXG4gIFBIWF9VUExPQURfUkVGXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmxldCBIb29rcyA9IHtcbiAgTGl2ZUZpbGVVcGxvYWQ6IHtcbiAgICBhY3RpdmVSZWZzKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfQUNUSVZFX0VOVFJZX1JFRlMpIH0sXG5cbiAgICBwcmVmbGlnaHRlZFJlZnMoKXsgcmV0dXJuIHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSB9LFxuXG4gICAgbW91bnRlZCgpeyB0aGlzLnByZWZsaWdodGVkV2FzID0gdGhpcy5wcmVmbGlnaHRlZFJlZnMoKSB9LFxuXG4gICAgdXBkYXRlZCgpe1xuICAgICAgbGV0IG5ld1ByZWZsaWdodHMgPSB0aGlzLnByZWZsaWdodGVkUmVmcygpXG4gICAgICBpZih0aGlzLnByZWZsaWdodGVkV2FzICE9PSBuZXdQcmVmbGlnaHRzKXtcbiAgICAgICAgdGhpcy5wcmVmbGlnaHRlZFdhcyA9IG5ld1ByZWZsaWdodHNcbiAgICAgICAgaWYobmV3UHJlZmxpZ2h0cyA9PT0gXCJcIil7XG4gICAgICAgICAgdGhpcy5fX3ZpZXcuY2FuY2VsU3VibWl0KHRoaXMuZWwuZm9ybSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZih0aGlzLmFjdGl2ZVJlZnMoKSA9PT0gXCJcIil7IHRoaXMuZWwudmFsdWUgPSBudWxsIH1cbiAgICAgIHRoaXMuZWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoUEhYX0xJVkVfRklMRV9VUERBVEVEKSlcbiAgICB9XG4gIH0sXG5cbiAgTGl2ZUltZ1ByZXZpZXc6IHtcbiAgICBtb3VudGVkKCl7XG4gICAgICB0aGlzLnJlZiA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtZW50cnktcmVmXCIpXG4gICAgICB0aGlzLmlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikpXG4gICAgICBMaXZlVXBsb2FkZXIuZ2V0RW50cnlEYXRhVVJMKHRoaXMuaW5wdXRFbCwgdGhpcy5yZWYsIHVybCA9PiB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMuZWwuc3JjID0gdXJsXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveWVkKCl7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMudXJsKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIb29rc1xuIiwgImltcG9ydCB7XG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Qb3N0TW9ycGhSZXN0b3JlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lckJlZm9yZSwgY29udGFpbmVyQWZ0ZXIsIHVwZGF0ZVR5cGUpe1xuICAgIGxldCBpZHNCZWZvcmUgPSBuZXcgU2V0KClcbiAgICBsZXQgaWRzQWZ0ZXIgPSBuZXcgU2V0KFsuLi5jb250YWluZXJBZnRlci5jaGlsZHJlbl0ubWFwKGNoaWxkID0+IGNoaWxkLmlkKSlcblxuICAgIGxldCBlbGVtZW50c1RvTW9kaWZ5ID0gW11cblxuICAgIEFycmF5LmZyb20oY29udGFpbmVyQmVmb3JlLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmKGNoaWxkLmlkKXsgLy8gYWxsIG9mIG91ciBjaGlsZHJlbiBzaG91bGQgYmUgZWxlbWVudHMgd2l0aCBpZHNcbiAgICAgICAgaWRzQmVmb3JlLmFkZChjaGlsZC5pZClcbiAgICAgICAgaWYoaWRzQWZ0ZXIuaGFzKGNoaWxkLmlkKSl7XG4gICAgICAgICAgbGV0IHByZXZpb3VzRWxlbWVudElkID0gY2hpbGQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBjaGlsZC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlkXG4gICAgICAgICAgZWxlbWVudHNUb01vZGlmeS5wdXNoKHtlbGVtZW50SWQ6IGNoaWxkLmlkLCBwcmV2aW91c0VsZW1lbnRJZDogcHJldmlvdXNFbGVtZW50SWR9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuY29udGFpbmVySWQgPSBjb250YWluZXJBZnRlci5pZFxuICAgIHRoaXMudXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGVcbiAgICB0aGlzLmVsZW1lbnRzVG9Nb2RpZnkgPSBlbGVtZW50c1RvTW9kaWZ5XG4gICAgdGhpcy5lbGVtZW50SWRzVG9BZGQgPSBbLi4uaWRzQWZ0ZXJdLmZpbHRlcihpZCA9PiAhaWRzQmVmb3JlLmhhcyhpZCkpXG4gIH1cblxuICAvLyBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIG9wdGltaXplIGFwcGVuZC9wcmVwZW5kIG9wZXJhdGlvbnM6XG4gIC8vICAgMSkgVHJhY2sgaWRzIG9mIG1vZGlmaWVkIGVsZW1lbnRzICYgb2YgbmV3IGVsZW1lbnRzXG4gIC8vICAgMikgQWxsIHRoZSBtb2RpZmllZCBlbGVtZW50cyBhcmUgcHV0IGJhY2sgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIERPTSB0cmVlXG4gIC8vICAgICAgYnkgc3RvcmluZyB0aGUgaWQgb2YgdGhlaXIgcHJldmlvdXMgc2libGluZ1xuICAvLyAgIDMpIE5ldyBlbGVtZW50cyBhcmUgZ29pbmcgdG8gYmUgcHV0IGluIHRoZSByaWdodCBwbGFjZSBieSBtb3JwaGRvbSBkdXJpbmcgYXBwZW5kLlxuICAvLyAgICAgIEZvciBwcmVwZW5kLCB3ZSBtb3ZlIHRoZW0gdG8gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBjb250YWluZXJcbiAgcGVyZm9ybSgpe1xuICAgIGxldCBjb250YWluZXIgPSBET00uYnlJZCh0aGlzLmNvbnRhaW5lcklkKVxuICAgIHRoaXMuZWxlbWVudHNUb01vZGlmeS5mb3JFYWNoKGVsZW1lbnRUb01vZGlmeSA9PiB7XG4gICAgICBpZihlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpe1xuICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpLCBwcmV2aW91c0VsZW0gPT4ge1xuICAgICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICAgIGxldCBpc0luUmlnaHRQbGFjZSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuaWQgPT0gcHJldmlvdXNFbGVtLmlkXG4gICAgICAgICAgICBpZighaXNJblJpZ2h0UGxhY2Upe1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW0uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJlbmRcIiwgZWxlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICBsZXQgaXNJblJpZ2h0UGxhY2UgPSBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT0gbnVsbFxuICAgICAgICAgIGlmKCFpc0luUmlnaHRQbGFjZSl7XG4gICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBlbGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYodGhpcy51cGRhdGVUeXBlID09IFwicHJlcGVuZFwiKXtcbiAgICAgIHRoaXMuZWxlbWVudElkc1RvQWRkLnJldmVyc2UoKS5mb3JFYWNoKGVsZW1JZCA9PiB7XG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1JZCksIGVsZW0gPT4gY29udGFpbmVyLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgZWxlbSkpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwgInZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbmZ1bmN0aW9uIG1vcnBoQXR0cnMoZnJvbU5vZGUsIHRvTm9kZSkge1xuICAgIHZhciB0b05vZGVBdHRycyA9IHRvTm9kZS5hdHRyaWJ1dGVzO1xuICAgIHZhciBhdHRyO1xuICAgIHZhciBhdHRyTmFtZTtcbiAgICB2YXIgYXR0ck5hbWVzcGFjZVVSSTtcbiAgICB2YXIgYXR0clZhbHVlO1xuICAgIHZhciBmcm9tVmFsdWU7XG5cbiAgICAvLyBkb2N1bWVudC1mcmFnbWVudHMgZG9udCBoYXZlIGF0dHJpYnV0ZXMgc28gbGV0cyBub3QgZG8gYW55dGhpbmdcbiAgICBpZiAodG9Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IGZyb21Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gb3JpZ2luYWwgRE9NIGVsZW1lbnRcbiAgICBmb3IgKHZhciBpID0gdG9Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXR0ciA9IHRvTm9kZUF0dHJzW2ldO1xuICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgYXR0ck5hbWVzcGFjZVVSSSA9IGF0dHIubmFtZXNwYWNlVVJJO1xuICAgICAgICBhdHRyVmFsdWUgPSBhdHRyLnZhbHVlO1xuXG4gICAgICAgIGlmIChhdHRyTmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lO1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSBhdHRyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5wcmVmaXggPT09ICd4bWxucycpe1xuICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTsgLy8gSXQncyBub3QgYWxsb3dlZCB0byBzZXQgYW4gYXR0cmlidXRlIHdpdGggdGhlIFhNTE5TIG5hbWVzcGFjZSB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGB4bWxuc2AgcHJlZml4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gYXR0clZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZnJvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBleHRyYSBhdHRyaWJ1dGVzIGZvdW5kIG9uIHRoZSBvcmlnaW5hbCBET00gZWxlbWVudCB0aGF0XG4gICAgLy8gd2VyZW4ndCBmb3VuZCBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgdmFyIGZyb21Ob2RlQXR0cnMgPSBmcm9tTm9kZS5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgZCA9IGZyb21Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgYXR0ciA9IGZyb21Ob2RlQXR0cnNbZF07XG4gICAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lO1xuICAgICAgICBhdHRyTmFtZXNwYWNlVVJJID0gYXR0ci5uYW1lc3BhY2VVUkk7XG5cbiAgICAgICAgaWYgKGF0dHJOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ci5sb2NhbE5hbWUgfHwgYXR0ck5hbWU7XG5cbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmcm9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgcmFuZ2U7IC8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCBmb3IgZWZmaWNlbnRseSByZW5kZXJpbmcgc3RyaW5ncyB0byBlbGVtZW50cy5cbnZhciBOU19YSFRNTCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcblxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkb2N1bWVudDtcbnZhciBIQVNfVEVNUExBVEVfU1VQUE9SVCA9ICEhZG9jICYmICdjb250ZW50JyBpbiBkb2MuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbnZhciBIQVNfUkFOR0VfU1VQUE9SVCA9ICEhZG9jICYmIGRvYy5jcmVhdGVSYW5nZSAmJiAnY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50JyBpbiBkb2MuY3JlYXRlUmFuZ2UoKTtcblxuZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc3RyO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVJhbmdlKHN0cikge1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShkb2MuYm9keSk7XG4gICAgfVxuXG4gICAgdmFyIGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHN0cik7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVdyYXAoc3RyKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTtcbiAgICBmcmFnbWVudC5pbm5lckhUTUwgPSBzdHI7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogVGhpcyBpcyBhYm91dCB0aGUgc2FtZVxuICogdmFyIGh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHN0ciwgJ3RleHQvaHRtbCcpO1xuICogcmV0dXJuIGh0bWwuYm9keS5maXJzdENoaWxkO1xuICpcbiAqIEBtZXRob2QgdG9FbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRvRWxlbWVudChzdHIpIHtcbiAgICBzdHIgPSBzdHIudHJpbSgpO1xuICAgIGlmIChIQVNfVEVNUExBVEVfU1VQUE9SVCkge1xuICAgICAgLy8gYXZvaWQgcmVzdHJpY3Rpb25zIG9uIGNvbnRlbnQgZm9yIHRoaW5ncyBsaWtlIGA8dHI+PHRoPkhpPC90aD48L3RyPmAgd2hpY2hcbiAgICAgIC8vIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBkb2Vzbid0IHN1cHBvcnRcbiAgICAgIC8vIDx0ZW1wbGF0ZT4gc3VwcG9ydCBub3QgYXZhaWxhYmxlIGluIElFXG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKTtcbiAgICB9IGVsc2UgaWYgKEhBU19SQU5HRV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUmFuZ2Uoc3RyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tV3JhcChzdHIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0d28gbm9kZSdzIG5hbWVzIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBOT1RFOiBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgYG5hbWVzcGFjZVVSSWAgYmVjYXVzZSB5b3Ugd2lsbCBuZXZlciBmaW5kIHR3byBIVE1MIGVsZW1lbnRzIHdpdGggdGhlIHNhbWVcbiAqICAgICAgIG5vZGVOYW1lIGFuZCBkaWZmZXJlbnQgbmFtZXNwYWNlIFVSSXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGIgVGhlIHRhcmdldCBlbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlTm9kZU5hbWVzKGZyb21FbCwgdG9FbCkge1xuICAgIHZhciBmcm9tTm9kZU5hbWUgPSBmcm9tRWwubm9kZU5hbWU7XG4gICAgdmFyIHRvTm9kZU5hbWUgPSB0b0VsLm5vZGVOYW1lO1xuICAgIHZhciBmcm9tQ29kZVN0YXJ0LCB0b0NvZGVTdGFydDtcblxuICAgIGlmIChmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnJvbUNvZGVTdGFydCA9IGZyb21Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuICAgIHRvQ29kZVN0YXJ0ID0gdG9Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgdmlydHVhbCBET00gbm9kZSBvciBTVkcgbm9kZSB0aGVuIHdlIG1heVxuICAgIC8vIG5lZWQgdG8gbm9ybWFsaXplIHRoZSB0YWcgbmFtZSBiZWZvcmUgY29tcGFyaW5nLiBOb3JtYWwgSFRNTCBlbGVtZW50cyB0aGF0IGFyZVxuICAgIC8vIGluIHRoZSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIlxuICAgIC8vIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZVxuICAgIGlmIChmcm9tQ29kZVN0YXJ0IDw9IDkwICYmIHRvQ29kZVN0YXJ0ID49IDk3KSB7IC8vIGZyb20gaXMgdXBwZXIgYW5kIHRvIGlzIGxvd2VyXG4gICAgICAgIHJldHVybiBmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRvQ29kZVN0YXJ0IDw9IDkwICYmIGZyb21Db2RlU3RhcnQgPj0gOTcpIHsgLy8gdG8gaXMgdXBwZXIgYW5kIGZyb20gaXMgbG93ZXJcbiAgICAgICAgcmV0dXJuIHRvTm9kZU5hbWUgPT09IGZyb21Ob2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVsZW1lbnQsIG9wdGlvbmFsbHkgd2l0aCBhIGtub3duIG5hbWVzcGFjZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGVsZW1lbnQgbmFtZSwgZS5nLiAnZGl2JyBvciAnc3ZnJ1xuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lc3BhY2VVUkldIHRoZSBlbGVtZW50J3MgbmFtZXNwYWNlIFVSSSwgaS5lLiB0aGUgdmFsdWUgb2ZcbiAqIGl0cyBgeG1sbnNgIGF0dHJpYnV0ZSBvciBpdHMgaW5mZXJyZWQgbmFtZXNwYWNlLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lLCBuYW1lc3BhY2VVUkkpIHtcbiAgICByZXR1cm4gIW5hbWVzcGFjZVVSSSB8fCBuYW1lc3BhY2VVUkkgPT09IE5TX1hIVE1MID9cbiAgICAgICAgZG9jLmNyZWF0ZUVsZW1lbnQobmFtZSkgOlxuICAgICAgICBkb2MuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgbmFtZSk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBjaGlsZHJlbiBvZiBvbmUgRE9NIGVsZW1lbnQgdG8gYW5vdGhlciBET00gZWxlbWVudFxuICovXG5mdW5jdGlvbiBtb3ZlQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKSB7XG4gICAgdmFyIGN1ckNoaWxkID0gZnJvbUVsLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGN1ckNoaWxkKSB7XG4gICAgICAgIHZhciBuZXh0Q2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgdG9FbC5hcHBlbmRDaGlsZChjdXJDaGlsZCk7XG4gICAgICAgIGN1ckNoaWxkID0gbmV4dENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gdG9FbDtcbn1cblxuZnVuY3Rpb24gc3luY0Jvb2xlYW5BdHRyUHJvcChmcm9tRWwsIHRvRWwsIG5hbWUpIHtcbiAgICBpZiAoZnJvbUVsW25hbWVdICE9PSB0b0VsW25hbWVdKSB7XG4gICAgICAgIGZyb21FbFtuYW1lXSA9IHRvRWxbbmFtZV07XG4gICAgICAgIGlmIChmcm9tRWxbbmFtZV0pIHtcbiAgICAgICAgICAgIGZyb21FbC5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIHNwZWNpYWxFbEhhbmRsZXJzID0ge1xuICAgIE9QVElPTjogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZnJvbUVsLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ1NFTEVDVCcgJiYgIXBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCdtdWx0aXBsZScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbC5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJykgJiYgIXRvRWwuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgTVMgRWRnZSBidWcgd2hlcmUgdGhlICdzZWxlY3RlZCcgYXR0cmlidXRlIGNhbiBvbmx5IGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZWQgaWYgc2V0IHRvIGEgbm9uLWVtcHR5IHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMjA4NzY3OS9cbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZXNldCBzZWxlY3QgZWxlbWVudCdzIHNlbGVjdGVkSW5kZXggdG8gLTEsIG90aGVyd2lzZSBzZXR0aW5nXG4gICAgICAgICAgICAgICAgLy8gZnJvbUVsLnNlbGVjdGVkIHVzaW5nIHRoZSBzeW5jQm9vbGVhbkF0dHJQcm9wIGJlbG93IGhhcyBubyBlZmZlY3QuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvcnJlY3Qgc2VsZWN0ZWRJbmRleCB3aWxsIGJlIHNldCBpbiB0aGUgU0VMRUNUIHNwZWNpYWwgaGFuZGxlciBiZWxvdy5cbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ3NlbGVjdGVkJyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBpcyBzcGVjaWFsIGZvciB0aGUgPGlucHV0PiBlbGVtZW50IHNpbmNlIGl0IHNldHNcbiAgICAgKiB0aGUgaW5pdGlhbCB2YWx1ZS4gQ2hhbmdpbmcgdGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgd2l0aG91dCBjaGFuZ2luZyB0aGVcbiAgICAgKiBcInZhbHVlXCIgcHJvcGVydHkgd2lsbCBoYXZlIG5vIGVmZmVjdCBzaW5jZSBpdCBpcyBvbmx5IHVzZWQgdG8gdGhlIHNldCB0aGVcbiAgICAgKiBpbml0aWFsIHZhbHVlLiAgU2ltaWxhciBmb3IgdGhlIFwiY2hlY2tlZFwiIGF0dHJpYnV0ZSwgYW5kIFwiZGlzYWJsZWRcIi5cbiAgICAgKi9cbiAgICBJTlBVVDogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHN5bmNCb29sZWFuQXR0clByb3AoZnJvbUVsLCB0b0VsLCAnY2hlY2tlZCcpO1xuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgaWYgKGZyb21FbC52YWx1ZSAhPT0gdG9FbC52YWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gdG9FbC52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdG9FbC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIGZyb21FbC5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVEVYVEFSRUE6IGZ1bmN0aW9uKGZyb21FbCwgdG9FbCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0b0VsLnZhbHVlO1xuICAgICAgICBpZiAoZnJvbUVsLnZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gTmVlZGVkIGZvciBJRS4gQXBwYXJlbnRseSBJRSBzZXRzIHRoZSBwbGFjZWhvbGRlciBhcyB0aGVcbiAgICAgICAgICAgIC8vIG5vZGUgdmFsdWUgYW5kIHZpc2UgdmVyc2EuIFRoaXMgaWdub3JlcyBhbiBlbXB0eSB1cGRhdGUuXG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBmaXJzdENoaWxkLm5vZGVWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlID09IG5ld1ZhbHVlIHx8ICghbmV3VmFsdWUgJiYgb2xkVmFsdWUgPT0gZnJvbUVsLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU0VMRUNUOiBmdW5jdGlvbihmcm9tRWwsIHRvRWwpIHtcbiAgICAgICAgaWYgKCF0b0VsLmhhc0F0dHJpYnV0ZSgnbXVsdGlwbGUnKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbG9vcCB0aHJvdWdoIGNoaWxkcmVuIG9mIGZyb21FbCwgbm90IHRvRWwgc2luY2Ugbm9kZXMgY2FuIGJlIG1vdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRvRWwgdG8gZnJvbUVsIGRpcmVjdGx5IHdoZW4gbW9ycGhpbmcuXG4gICAgICAgICAgICAvLyBBdCB0aGUgdGltZSB0aGlzIHNwZWNpYWwgaGFuZGxlciBpcyBpbnZva2VkLCBhbGwgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGJlZW4gbW9ycGhlZFxuICAgICAgICAgICAgLy8gYW5kIGFwcGVuZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIGZyb21FbCwgc28gdXNpbmcgZnJvbUVsIGhlcmUgaXMgc2FmZSBhbmQgY29ycmVjdC5cbiAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIG9wdGdyb3VwO1xuICAgICAgICAgICAgdmFyIG5vZGVOYW1lO1xuICAgICAgICAgICAgd2hpbGUoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICBub2RlTmFtZSA9IGN1ckNoaWxkLm5vZGVOYW1lICYmIGN1ckNoaWxkLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gY3VyQ2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gb3B0Z3JvdXAuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgPT09ICdPUFRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJDaGlsZCAmJiBvcHRncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBvcHRncm91cC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJvbUVsLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSQxID0gMTE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gZGVmYXVsdEdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSkgfHwgbm9kZS5pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3JwaGRvbUZhY3RvcnkobW9ycGhBdHRycykge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1vcnBoZG9tKGZyb21Ob2RlLCB0b05vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRvTm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudCcgfHwgZnJvbU5vZGUubm9kZU5hbWUgPT09ICdIVE1MJyB8fCBmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvTm9kZUh0bWwgPSB0b05vZGU7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICB0b05vZGUuaW5uZXJIVE1MID0gdG9Ob2RlSHRtbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gdG9FbGVtZW50KHRvTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2V0Tm9kZUtleSA9IG9wdGlvbnMuZ2V0Tm9kZUtleSB8fCBkZWZhdWx0R2V0Tm9kZUtleTtcbiAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVBZGRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25Ob2RlQWRkZWQgPSBvcHRpb25zLm9uTm9kZUFkZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsVXBkYXRlZCA9IG9wdGlvbnMub25CZWZvcmVFbFVwZGF0ZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uRWxVcGRhdGVkID0gb3B0aW9ucy5vbkVsVXBkYXRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25CZWZvcmVOb2RlRGlzY2FyZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVEaXNjYXJkZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uTm9kZURpc2NhcmRlZCA9IG9wdGlvbnMub25Ob2RlRGlzY2FyZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkID0gb3B0aW9ucy5vbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBjaGlsZHJlbk9ubHkgPSBvcHRpb25zLmNoaWxkcmVuT25seSA9PT0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIGEgbG9va3VwIHRvIHF1aWNrbHkgZmluZCBhbGwga2V5ZWQgZWxlbWVudHMgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlLlxuICAgICAgICB2YXIgZnJvbU5vZGVzTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleWVkUmVtb3ZhbExpc3QgPSBbXTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRLZXllZFJlbW92YWwoa2V5KSB7XG4gICAgICAgICAgICBrZXllZFJlbW92YWxMaXN0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKG5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBLZXllZE5vZGVzICYmIChrZXkgPSBnZXROb2RlS2V5KGN1ckNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBza2lwcGluZyBrZXllZCBub2RlcyB0aGVuIHdlIGFkZCB0aGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhIGxpc3Qgc28gdGhhdCBpdCBjYW4gYmUgaGFuZGxlZCBhdCB0aGUgdmVyeSBlbmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwb3J0IHRoZSBub2RlIGFzIGRpc2NhcmRlZCBpZiBpdCBpcyBub3Qga2V5ZWQuIFdlIGRvIHRoaXMgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCB3ZSBsb29wIHRocm91Z2ggYWxsIGtleWVkIGVsZW1lbnRzIHRoYXQgd2VyZSB1bm1hdGNoZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGRpc2NhcmQgdGhlbSBpbiBvbmUgZmluYWwgcGFzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTm9kZURpc2NhcmRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKGN1ckNoaWxkLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJDaGlsZCA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmVzIGEgRE9NIG5vZGUgb3V0IG9mIHRoZSBvcmlnaW5hbCBET01cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gcGFyZW50Tm9kZSBUaGUgbm9kZXMgcGFyZW50XG4gICAgICAgICAqIEBwYXJhbSAge0Jvb2xlYW59IHNraXBLZXllZE5vZGVzIElmIHRydWUgdGhlbiBlbGVtZW50cyB3aXRoIGtleXMgd2lsbCBiZSBza2lwcGVkIGFuZCBub3QgZGlzY2FyZGVkLlxuICAgICAgICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUsIHBhcmVudE5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlRGlzY2FyZGVkKG5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQobm9kZSk7XG4gICAgICAgICAgICB3YWxrRGlzY2FyZGVkQ2hpbGROb2Rlcyhub2RlLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBUcmVlV2Fsa2VyIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUocm9vdCkge1xuICAgICAgICAvLyAgICAgdmFyIHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAvLyAgICAgICAgIHJvb3QsXG4gICAgICAgIC8vICAgICAgICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgdmFyIGVsO1xuICAgICAgICAvLyAgICAgd2hpbGUoKGVsID0gdHJlZVdhbGtlci5uZXh0Tm9kZSgpKSkge1xuICAgICAgICAvLyAgICAgICAgIHZhciBrZXkgPSBnZXROb2RlS2V5KGVsKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZyb21Ob2Rlc0xvb2t1cFtrZXldID0gZWw7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gLy8gTm9kZUl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvL1xuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUobm9kZSkge1xuICAgICAgICAvLyAgICAgdmFyIG5vZGVJdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7XG4gICAgICAgIC8vICAgICB2YXIgZWw7XG4gICAgICAgIC8vICAgICB3aGlsZSgoZWwgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkpIHtcbiAgICAgICAgLy8gICAgICAgICB2YXIga2V5ID0gZ2V0Tm9kZUtleShlbCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGVsO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluZGV4VHJlZShub2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUkMSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGN1ckNoaWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2FsayByZWN1cnNpdmVseVxuICAgICAgICAgICAgICAgICAgICBpbmRleFRyZWUoY3VyQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gY3VyQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXhUcmVlKGZyb21Ob2RlKTtcblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVOb2RlQWRkZWQoZWwpIHtcbiAgICAgICAgICAgIG9uTm9kZUFkZGVkKGVsKTtcblxuICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gZWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGluZyA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVubWF0Y2hlZEZyb21FbCA9IGZyb21Ob2Rlc0xvb2t1cFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBmaW5kIGEgZHVwbGljYXRlICNpZCBub2RlIGluIGNhY2hlLCByZXBsYWNlIGBlbGAgd2l0aCBjYWNoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbW9ycGggaXQgdG8gdGhlIGNoaWxkIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bm1hdGNoZWRGcm9tRWwgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJDaGlsZCwgdW5tYXRjaGVkRnJvbUVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodW5tYXRjaGVkRnJvbUVsLCBjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKHVubWF0Y2hlZEZyb21FbCwgY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgY2FsbCBmb3IgY3VyQ2hpbGQgYW5kIGl0J3MgY2hpbGRyZW4gdG8gc2VlIGlmIHdlIGZpbmQgc29tZXRoaW5nIGluXG4gICAgICAgICAgICAgICAgICAvLyBmcm9tTm9kZXNMb29rdXBcbiAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBuZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG9mIHRoZSBcInRvIG5vZGVzXCIuIElmIGN1ckZyb21Ob2RlQ2hpbGQgaXNcbiAgICAgICAgICAgIC8vIG5vbi1udWxsIHRoZW4gd2Ugc3RpbGwgaGF2ZSBzb21lIGZyb20gbm9kZXMgbGVmdCBvdmVyIHRoYXQgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYmUgcmVtb3ZlZFxuICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAoKGN1ckZyb21Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJGcm9tTm9kZUNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgYWRkS2V5ZWRSZW1vdmFsKGN1ckZyb21Ob2RlS2V5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgc3RpbGwgYSBjaGFuY2UgdGhleSB3aWxsIGJlIG1hdGNoZWQgdXAgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaEVsKGZyb21FbCwgdG9FbCwgY2hpbGRyZW5Pbmx5KSB7XG4gICAgICAgICAgICB2YXIgdG9FbEtleSA9IGdldE5vZGVLZXkodG9FbCk7XG5cbiAgICAgICAgICAgIGlmICh0b0VsS2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCB3aXRoIGFuIElEIGlzIGJlaW5nIG1vcnBoZWQgdGhlbiBpdCB3aWxsIGJlIGluIHRoZSBmaW5hbFxuICAgICAgICAgICAgICAgIC8vIERPTSBzbyBjbGVhciBpdCBvdXQgb2YgdGhlIHNhdmVkIGVsZW1lbnRzIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBkZWxldGUgZnJvbU5vZGVzTG9va3VwW3RvRWxLZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuT25seSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRWxVcGRhdGVkKGZyb21FbCwgdG9FbCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYXR0cmlidXRlcyBvbiBvcmlnaW5hbCBET00gZWxlbWVudCBmaXJzdFxuICAgICAgICAgICAgICAgIG1vcnBoQXR0cnMoZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbFxuICAgICAgICAgICAgICAgIG9uRWxVcGRhdGVkKGZyb21FbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVFbENoaWxkcmVuVXBkYXRlZChmcm9tRWwsIHRvRWwpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZnJvbUVsLm5vZGVOYW1lICE9PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgICAgICAgIG1vcnBoQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNwZWNpYWxFbEhhbmRsZXJzLlRFWFRBUkVBKGZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaENoaWxkcmVuKGZyb21FbCwgdG9FbCkge1xuICAgICAgICAgICAgdmFyIGN1clRvTm9kZUNoaWxkID0gdG9FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHZhciBjdXJUb05vZGVLZXk7XG4gICAgICAgICAgICB2YXIgY3VyRnJvbU5vZGVLZXk7XG5cbiAgICAgICAgICAgIHZhciBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB2YXIgdG9OZXh0U2libGluZztcbiAgICAgICAgICAgIHZhciBtYXRjaGluZ0Zyb21FbDtcblxuICAgICAgICAgICAgLy8gd2FsayB0aGUgY2hpbGRyZW5cbiAgICAgICAgICAgIG91dGVyOiB3aGlsZSAoY3VyVG9Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0b05leHRTaWJsaW5nID0gY3VyVG9Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJUb05vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyB3YWxrIHRoZSBmcm9tTm9kZSBjaGlsZHJlbiBhbGwgdGhlIHdheSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuaXNTYW1lTm9kZSAmJiBjdXJUb05vZGVDaGlsZC5pc1NhbWVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IHRvTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUtleSA9IGdldE5vZGVLZXkoY3VyRnJvbU5vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlVHlwZSA9IGN1ckZyb21Ob2RlQ2hpbGQubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyBpZiB0aGUgY3VyRnJvbU5vZGVDaGlsZCBkb2VzbnQgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1clRvTm9kZUNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBhdGlibGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlVHlwZSA9PT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggbm9kZXMgYmVpbmcgY29tcGFyZWQgYXJlIEVsZW1lbnQgbm9kZXNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBub2RlIGhhcyBhIGtleSBzbyB3ZSB3YW50IHRvIG1hdGNoIGl0IHVwIHdpdGggdGhlIGNvcnJlY3QgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clRvTm9kZUtleSAhPT0gY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBrZXkgc29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIGNoZWNrIG91ciBsb29rdXAgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSB0cmVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OZXh0U2libGluZyA9PT0gbWF0Y2hpbmdGcm9tRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzaW5nbGUgZWxlbWVudCByZW1vdmFscy4gVG8gYXZvaWQgcmVtb3ZpbmcgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSBub2RlIG91dCBvZiB0aGUgdHJlZSAoc2luY2UgdGhhdCBjYW4gYnJlYWsgQ1NTIHRyYW5zaXRpb25zLCBldGMuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBpbnN0ZWFkIGRpc2NhcmQgdGhlIGN1cnJlbnQgbm9kZSBhbmQgd2FpdCB1bnRpbCB0aGUgbmV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gdG8gcHJvcGVybHkgbWF0Y2ggdXAgdGhlIGtleWVkIHRhcmdldCBlbGVtZW50IHdpdGggaXRzIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaGluZyBrZXllZCBlbGVtZW50IHNvbWV3aGVyZSBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIG1vdmUgdGhlIG9yaWdpbmFsIERPTSBub2RlIGludG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIG1vcnBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0LlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIHVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiByZXBsYWNlQ2hpbGQgYmVjYXVzZSB3ZSB3YW50IHRvIGdvIHRocm91Z2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGByZW1vdmVOb2RlKClgIGZ1bmN0aW9uIGZvciB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRpc2NhcmRlZCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgaG9va3MgYXJlIGNvcnJlY3RseSBpbnZva2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5pbnNlcnRCZWZvcmUobWF0Y2hpbmdGcm9tRWwsIGN1ckZyb21Ob2RlQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb21OZXh0U2libGluZyA9IGN1ckZyb21Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBrZXllZCBpdCBtaWdodCBiZSBtYXRjaGVkIHVwIGxhdGVyIHNvIHdlIGRlZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEtleWVkUmVtb3ZhbChjdXJGcm9tTm9kZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHN0aWxsIGEgY2hhbmNlIHRoZXkgd2lsbCBiZSBtYXRjaGVkIHVwIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQsIGZyb21FbCwgdHJ1ZSAvKiBza2lwIGtleWVkIG5vZGVzICovKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBtYXRjaGluZ0Zyb21FbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgbm90IGNvbXBhdGlibGUgc2luY2UgdGhlIFwidG9cIiBub2RlIGhhcyBhIGtleSBhbmQgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBubyBtYXRjaGluZyBrZXllZCBub2RlIGluIHRoZSBzb3VyY2UgdHJlZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgaGFzIGEga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGlzQ29tcGF0aWJsZSAhPT0gZmFsc2UgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJGcm9tTm9kZUNoaWxkLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBjb21wYXRpYmxlIERPTSBlbGVtZW50cyBzbyB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgXCJmcm9tXCIgbm9kZSB0byBtYXRjaCB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgRE9NIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1PUlBIXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoRWwoY3VyRnJvbU5vZGVDaGlsZCwgY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IFRFWFRfTk9ERSB8fCBjdXJGcm9tTm9kZVR5cGUgPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCBub2RlcyBiZWluZyBjb21wYXJlZCBhcmUgVGV4dCBvciBDb21tZW50IG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbHkgdXBkYXRlIG5vZGVWYWx1ZSBvbiB0aGUgb3JpZ2luYWwgbm9kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdGV4dCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUNoaWxkLm5vZGVWYWx1ZSAhPT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQubm9kZVZhbHVlID0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBib3RoIHRoZSBcInRvXCIgY2hpbGQgYW5kIHRoZSBcImZyb21cIiBjaGlsZCBzaW5jZSB3ZSBmb3VuZCBhIG1hdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIGVsc2UgdG8gZG8gYXMgd2UgYWxyZWFkeSByZWN1cnNpdmVseSBjYWxsZWQgbW9ycGhDaGlsZHJlbiBhYm92ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVDaGlsZCA9IGZyb21OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gY29tcGF0aWJsZSBtYXRjaCBzbyByZW1vdmUgdGhlIG9sZCBub2RlIGZyb20gdGhlIERPTSBhbmQgY29udGludWUgdHJ5aW5nIHRvIGZpbmQgYVxuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBpbiB0aGUgb3JpZ2luYWwgRE9NLiBIb3dldmVyLCB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIGZyb20gbm9kZSBpcyBub3Qga2V5ZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIGtleWVkIG5vZGUgbWlnaHQgbWF0Y2ggdXAgd2l0aCBhIG5vZGUgc29tZXdoZXJlIGVsc2UgaW4gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCB0cmVlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc2NhcmQgaXQganVzdCB5ZXQgc2luY2UgaXQgc3RpbGwgbWlnaHQgZmluZCBhXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvbWUgaW4gdGhlIGZpbmFsIERPTSB0cmVlLiBBZnRlciBldmVyeXRoaW5nIGlzIGRvbmUgd2Ugd2lsbCByZW1vdmUgYW55IGtleWVkIG5vZGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlkbid0IGZpbmQgYSBob21lXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZW1vdmFsIHRvIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoY3VyRnJvbU5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugc2tpcCBuZXN0ZWQga2V5ZWQgbm9kZXMgZnJvbSBiZWluZyByZW1vdmVkIHNpbmNlIHRoZXJlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBzdGlsbCBhIGNoYW5jZSB0aGV5IHdpbGwgYmUgbWF0Y2hlZCB1cCBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gLy8gRU5EOiB3aGlsZShjdXJGcm9tTm9kZUNoaWxkKSB7fVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZW4gd2UgZGlkIG5vdCBmaW5kIGEgY2FuZGlkYXRlIG1hdGNoIGZvclxuICAgICAgICAgICAgICAgIC8vIG91ciBcInRvIG5vZGVcIiBhbmQgd2UgZXhoYXVzdGVkIGFsbCBvZiB0aGUgY2hpbGRyZW4gXCJmcm9tXCJcbiAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3QgYXBwZW5kIHRoZSBjdXJyZW50IFwidG9cIiBub2RlXG4gICAgICAgICAgICAgICAgLy8gdG8gdGhlIGVuZFxuICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkgJiYgKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pICYmIGNvbXBhcmVOb2RlTmFtZXMobWF0Y2hpbmdGcm9tRWwsIGN1clRvTm9kZUNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBmcm9tRWwuYXBwZW5kQ2hpbGQobWF0Y2hpbmdGcm9tRWwpO1xuICAgICAgICAgICAgICAgICAgICAvLyBNT1JQSFxuICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKG1hdGNoaW5nRnJvbUVsLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0ID0gb25CZWZvcmVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuYWN0dWFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSBjdXJUb05vZGVDaGlsZC5hY3R1YWxpemUoZnJvbUVsLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5hcHBlbmRDaGlsZChjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSk7XG5cbiAgICAgICAgICAgIHZhciBzcGVjaWFsRWxIYW5kbGVyID0gc3BlY2lhbEVsSGFuZGxlcnNbZnJvbUVsLm5vZGVOYW1lXTtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsRWxIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbEVsSGFuZGxlcihmcm9tRWwsIHRvRWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIEVORDogbW9ycGhDaGlsZHJlbiguLi4pXG5cbiAgICAgICAgdmFyIG1vcnBoZWROb2RlID0gZnJvbU5vZGU7XG4gICAgICAgIHZhciBtb3JwaGVkTm9kZVR5cGUgPSBtb3JwaGVkTm9kZS5ub2RlVHlwZTtcbiAgICAgICAgdmFyIHRvTm9kZVR5cGUgPSB0b05vZGUubm9kZVR5cGU7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbk9ubHkpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgZ2l2ZW4gdHdvIERPTSBub2RlcyB0aGF0IGFyZSBub3RcbiAgICAgICAgICAgIC8vIGNvbXBhdGlibGUgKGUuZy4gPGRpdj4gLS0+IDxzcGFuPiBvciA8ZGl2PiAtLT4gVEVYVClcbiAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICh0b05vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZU5hbWVzKGZyb21Ob2RlLCB0b05vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQoZnJvbU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhlZE5vZGUgPSBtb3ZlQ2hpbGRyZW4oZnJvbU5vZGUsIGNyZWF0ZUVsZW1lbnROUyh0b05vZGUubm9kZU5hbWUsIHRvTm9kZS5uYW1lc3BhY2VVUkkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdvaW5nIGZyb20gYW4gZWxlbWVudCBub2RlIHRvIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9ycGhlZE5vZGVUeXBlID09PSBURVhUX05PREUgfHwgbW9ycGhlZE5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHsgLy8gVGV4dCBvciBjb21tZW50IG5vZGVcbiAgICAgICAgICAgICAgICBpZiAodG9Ob2RlVHlwZSA9PT0gbW9ycGhlZE5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZS5ub2RlVmFsdWUgIT09IHRvTm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlLm5vZGVWYWx1ZSA9IHRvTm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBub2RlIHRvIHNvbWV0aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb3JwaGVkTm9kZSA9PT0gdG9Ob2RlKSB7XG4gICAgICAgICAgICAvLyBUaGUgXCJ0byBub2RlXCIgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIFwiZnJvbSBub2RlXCIgc28gd2UgaGFkIHRvXG4gICAgICAgICAgICAvLyB0b3NzIG91dCB0aGUgXCJmcm9tIG5vZGVcIiBhbmQgdXNlIHRoZSBcInRvIG5vZGVcIlxuICAgICAgICAgICAgb25Ob2RlRGlzY2FyZGVkKGZyb21Ob2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0b05vZGUuaXNTYW1lTm9kZSAmJiB0b05vZGUuaXNTYW1lTm9kZShtb3JwaGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vcnBoRWwobW9ycGhlZE5vZGUsIHRvTm9kZSwgY2hpbGRyZW5Pbmx5KTtcblxuICAgICAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gbG9vcCBvdmVyIGFueSBrZXllZCBub2RlcyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmVcbiAgICAgICAgICAgIC8vIHJlbW92ZWQuIFdlIG9ubHkgZG8gdGhlIHJlbW92YWwgaWYgd2Uga25vdyB0aGF0IHRoZSBrZXllZCBub2RlXG4gICAgICAgICAgICAvLyBuZXZlciBmb3VuZCBhIG1hdGNoLiBXaGVuIGEga2V5ZWQgbm9kZSBpcyBtYXRjaGVkIHVwIHdlIHJlbW92ZVxuICAgICAgICAgICAgLy8gaXQgb3V0IG9mIGZyb21Ob2Rlc0xvb2t1cCBhbmQgd2UgdXNlIGZyb21Ob2Rlc0xvb2t1cCB0byBkZXRlcm1pbmVcbiAgICAgICAgICAgIC8vIGlmIGEga2V5ZWQgbm9kZSBoYXMgYmVlbiBtYXRjaGVkIHVwIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGtleWVkUmVtb3ZhbExpc3QpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGxlbj1rZXllZFJlbW92YWxMaXN0Lmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxUb1JlbW92ZSA9IGZyb21Ob2Rlc0xvb2t1cFtrZXllZFJlbW92YWxMaXN0W2ldXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsVG9SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoZWxUb1JlbW92ZSwgZWxUb1JlbW92ZS5wYXJlbnROb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkcmVuT25seSAmJiBtb3JwaGVkTm9kZSAhPT0gZnJvbU5vZGUgJiYgZnJvbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG1vcnBoZWROb2RlLmFjdHVhbGl6ZSkge1xuICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gbW9ycGhlZE5vZGUuYWN0dWFsaXplKGZyb21Ob2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhZCB0byBzd2FwIG91dCB0aGUgZnJvbSBub2RlIHdpdGggYSBuZXcgbm9kZSBiZWNhdXNlIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIG5vZGUgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBub2RlIHRoZW4gd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIERPTSBub2RlIGluIHRoZSBvcmlnaW5hbCBET00gdHJlZS4gVGhpcyBpcyBvbmx5XG4gICAgICAgICAgICAvLyBwb3NzaWJsZSBpZiB0aGUgb3JpZ2luYWwgRE9NIG5vZGUgd2FzIHBhcnQgb2YgYSBET00gdHJlZSB3aGljaFxuICAgICAgICAgICAgLy8gd2Uga25vdyBpcyB0aGUgY2FzZSBpZiBpdCBoYXMgYSBwYXJlbnQgbm9kZS5cbiAgICAgICAgICAgIGZyb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG1vcnBoZWROb2RlLCBmcm9tTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgfTtcbn1cblxudmFyIG1vcnBoZG9tID0gbW9ycGhkb21GYWN0b3J5KG1vcnBoQXR0cnMpO1xuXG5leHBvcnQgZGVmYXVsdCBtb3JwaGRvbTtcbiIsICJpbXBvcnQge1xuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfRElTQUJMRV9XSVRILFxuICBQSFhfRkVFREJBQ0tfRk9SLFxuICBQSFhfUFJVTkUsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfU0VTU0lPTixcbiAgUEhYX1NLSVAsXG4gIFBIWF9TVEFUSUMsXG4gIFBIWF9UUklHR0VSX0FDVElPTixcbiAgUEhYX1VQREFURVxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBkZXRlY3REdXBsaWNhdGVJZHMsXG4gIGlzQ2lkXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuaW1wb3J0IERPTVBvc3RNb3JwaFJlc3RvcmVyIGZyb20gXCIuL2RvbV9wb3N0X21vcnBoX3Jlc3RvcmVyXCJcbmltcG9ydCBtb3JwaGRvbSBmcm9tIFwibW9ycGhkb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01QYXRjaCB7XG4gIHN0YXRpYyBwYXRjaEVsKGZyb21FbCwgdG9FbCwgYWN0aXZlRWxlbWVudCl7XG4gICAgbW9ycGhkb20oZnJvbUVsLCB0b0VsLCB7XG4gICAgICBjaGlsZHJlbk9ubHk6IGZhbHNlLFxuICAgICAgb25CZWZvcmVFbFVwZGF0ZWQ6IChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgICAgaWYoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LmlzU2FtZU5vZGUoZnJvbUVsKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKSl7XG4gICAgICAgICAgRE9NLm1lcmdlRm9jdXNlZElucHV0KGZyb21FbCwgdG9FbClcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2aWV3LCBjb250YWluZXIsIGlkLCBodG1sLCB0YXJnZXRDSUQpe1xuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgICB0aGlzLmxpdmVTb2NrZXQgPSB2aWV3LmxpdmVTb2NrZXRcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMucm9vdElEID0gdmlldy5yb290LmlkXG4gICAgdGhpcy5odG1sID0gaHRtbFxuICAgIHRoaXMudGFyZ2V0Q0lEID0gdGFyZ2V0Q0lEXG4gICAgdGhpcy5jaWRQYXRjaCA9IGlzQ2lkKHRoaXMudGFyZ2V0Q0lEKVxuICAgIHRoaXMuY2FsbGJhY2tzID0ge1xuICAgICAgYmVmb3JlYWRkZWQ6IFtdLCBiZWZvcmV1cGRhdGVkOiBbXSwgYmVmb3JlcGh4Q2hpbGRBZGRlZDogW10sXG4gICAgICBhZnRlcmFkZGVkOiBbXSwgYWZ0ZXJ1cGRhdGVkOiBbXSwgYWZ0ZXJkaXNjYXJkZWQ6IFtdLCBhZnRlcnBoeENoaWxkQWRkZWQ6IFtdLFxuICAgICAgYWZ0ZXJ0cmFuc2l0aW9uc0Rpc2NhcmRlZDogW11cbiAgICB9XG4gIH1cblxuICBiZWZvcmUoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYmVmb3JlJHtraW5kfWBdLnB1c2goY2FsbGJhY2spIH1cbiAgYWZ0ZXIoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYWZ0ZXIke2tpbmR9YF0ucHVzaChjYWxsYmFjaykgfVxuXG4gIHRyYWNrQmVmb3JlKGtpbmQsIC4uLmFyZ3Mpe1xuICAgIHRoaXMuY2FsbGJhY2tzW2BiZWZvcmUke2tpbmR9YF0uZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjayguLi5hcmdzKSlcbiAgfVxuXG4gIHRyYWNrQWZ0ZXIoa2luZCwgLi4uYXJncyl7XG4gICAgdGhpcy5jYWxsYmFja3NbYGFmdGVyJHtraW5kfWBdLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4uYXJncykpXG4gIH1cblxuICBtYXJrUHJ1bmFibGVDb250ZW50Rm9yUmVtb3ZhbCgpe1xuICAgIERPTS5hbGwodGhpcy5jb250YWluZXIsIFwiW3BoeC11cGRhdGU9YXBwZW5kXSA+ICosIFtwaHgtdXBkYXRlPXByZXBlbmRdID4gKlwiLCBlbCA9PiB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1BSVU5FLCBcIlwiKVxuICAgIH0pXG4gIH1cblxuICBwZXJmb3JtKCl7XG4gICAgbGV0IHt2aWV3LCBsaXZlU29ja2V0LCBjb250YWluZXIsIGh0bWx9ID0gdGhpc1xuICAgIGxldCB0YXJnZXRDb250YWluZXIgPSB0aGlzLmlzQ0lEUGF0Y2goKSA/IHRoaXMudGFyZ2V0Q0lEQ29udGFpbmVyKGh0bWwpIDogY29udGFpbmVyXG4gICAgaWYodGhpcy5pc0NJRFBhdGNoKCkgJiYgIXRhcmdldENvbnRhaW5lcil7IHJldHVybiB9XG5cbiAgICBsZXQgZm9jdXNlZCA9IGxpdmVTb2NrZXQuZ2V0QWN0aXZlRWxlbWVudCgpXG4gICAgbGV0IHtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kfSA9IGZvY3VzZWQgJiYgRE9NLmhhc1NlbGVjdGlvblJhbmdlKGZvY3VzZWQpID8gZm9jdXNlZCA6IHt9XG4gICAgbGV0IHBoeFVwZGF0ZSA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfVVBEQVRFKVxuICAgIGxldCBwaHhGZWVkYmFja0ZvciA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKVxuICAgIGxldCBkaXNhYmxlV2l0aCA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfRElTQUJMRV9XSVRIKVxuICAgIGxldCBwaHhUcmlnZ2VyRXh0ZXJuYWwgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX1RSSUdHRVJfQUNUSU9OKVxuICAgIGxldCBwaHhSZW1vdmUgPSBsaXZlU29ja2V0LmJpbmRpbmcoXCJyZW1vdmVcIilcbiAgICBsZXQgYWRkZWQgPSBbXVxuICAgIGxldCB1cGRhdGVzID0gW11cbiAgICBsZXQgYXBwZW5kUHJlcGVuZFVwZGF0ZXMgPSBbXVxuICAgIGxldCBwZW5kaW5nUmVtb3ZlcyA9IFtdXG4gICAgbGV0IGV4dGVybmFsRm9ybVRyaWdnZXJlZCA9IG51bGxcblxuICAgIGxldCBkaWZmSFRNTCA9IGxpdmVTb2NrZXQudGltZShcInByZW1vcnBoIGNvbnRhaW5lciBwcmVwXCIsICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkRGlmZkhUTUwoY29udGFpbmVyLCBodG1sLCBwaHhVcGRhdGUsIHRhcmdldENvbnRhaW5lcilcbiAgICB9KVxuXG4gICAgdGhpcy50cmFja0JlZm9yZShcImFkZGVkXCIsIGNvbnRhaW5lcilcbiAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBjb250YWluZXIsIGNvbnRhaW5lcilcblxuICAgIGxpdmVTb2NrZXQudGltZShcIm1vcnBoZG9tXCIsICgpID0+IHtcbiAgICAgIG1vcnBoZG9tKHRhcmdldENvbnRhaW5lciwgZGlmZkhUTUwsIHtcbiAgICAgICAgY2hpbGRyZW5Pbmx5OiB0YXJnZXRDb250YWluZXIuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpID09PSBudWxsLFxuICAgICAgICBnZXROb2RlS2V5OiAobm9kZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBET00uaXNQaHhEZXN0cm95ZWQobm9kZSkgPyBudWxsIDogbm9kZS5pZFxuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZU5vZGVBZGRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcImFkZGVkXCIsIGVsKVxuICAgICAgICAgIHJldHVybiBlbFxuICAgICAgICB9LFxuICAgICAgICBvbk5vZGVBZGRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgLy8gaGFjayB0byBmaXggU2FmYXJpIGhhbmRsaW5nIG9mIGltZyBzcmNzZXQgYW5kIHZpZGVvIHRhZ3NcbiAgICAgICAgICBpZihlbCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgJiYgZWwuc3Jjc2V0KXtcbiAgICAgICAgICAgIGVsLnNyY3NldCA9IGVsLnNyY3NldFxuICAgICAgICAgIH0gZWxzZSBpZihlbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgZWwuYXV0b3BsYXkpe1xuICAgICAgICAgICAgZWwucGxheSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKERPTS5pc05vd1RyaWdnZXJGb3JtRXh0ZXJuYWwoZWwsIHBoeFRyaWdnZXJFeHRlcm5hbCkpe1xuICAgICAgICAgICAgZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkID0gZWxcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9pbnB1dCBoYW5kbGluZ1xuICAgICAgICAgIERPTS5kaXNjYXJkRXJyb3IodGFyZ2V0Q29udGFpbmVyLCBlbCwgcGh4RmVlZGJhY2tGb3IpXG4gICAgICAgICAgLy8gbmVzdGVkIHZpZXcgaGFuZGxpbmdcbiAgICAgICAgICBpZigoRE9NLmlzUGh4Q2hpbGQoZWwpICYmIHZpZXcub3duc0VsZW1lbnQoZWwpKSB8fCBET00uaXNQaHhTdGlja3koZWwpICYmIHZpZXcub3duc0VsZW1lbnQoZWwucGFyZW50Tm9kZSkpe1xuICAgICAgICAgICAgdGhpcy50cmFja0FmdGVyKFwicGh4Q2hpbGRBZGRlZFwiLCBlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkZWQucHVzaChlbClcbiAgICAgICAgfSxcbiAgICAgICAgb25Ob2RlRGlzY2FyZGVkOiAoZWwpID0+IHtcbiAgICAgICAgICAvLyBuZXN0ZWQgdmlldyBoYW5kbGluZ1xuICAgICAgICAgIGlmKERPTS5pc1BoeENoaWxkKGVsKSB8fCBET00uaXNQaHhTdGlja3koZWwpKXsgbGl2ZVNvY2tldC5kZXN0cm95Vmlld0J5RWwoZWwpIH1cbiAgICAgICAgICB0aGlzLnRyYWNrQWZ0ZXIoXCJkaXNjYXJkZWRcIiwgZWwpXG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlTm9kZURpc2NhcmRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfUFJVTkUpICE9PSBudWxsKXsgcmV0dXJuIHRydWUgfVxuICAgICAgICAgIGlmKGVsLnBhcmVudE5vZGUgIT09IG51bGwgJiYgRE9NLmlzUGh4VXBkYXRlKGVsLnBhcmVudE5vZGUsIHBoeFVwZGF0ZSwgW1wiYXBwZW5kXCIsIFwicHJlcGVuZFwiXSkgJiYgZWwuaWQpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUocGh4UmVtb3ZlKSl7XG4gICAgICAgICAgICBwZW5kaW5nUmVtb3Zlcy5wdXNoKGVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMuc2tpcENJRFNpYmxpbmcoZWwpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvbkVsVXBkYXRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgaWYoRE9NLmlzTm93VHJpZ2dlckZvcm1FeHRlcm5hbChlbCwgcGh4VHJpZ2dlckV4dGVybmFsKSl7XG4gICAgICAgICAgICBleHRlcm5hbEZvcm1UcmlnZ2VyZWQgPSBlbFxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVzLnB1c2goZWwpXG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlRWxVcGRhdGVkOiAoZnJvbUVsLCB0b0VsKSA9PiB7XG4gICAgICAgICAgRE9NLmNsZWFuQ2hpbGROb2Rlcyh0b0VsLCBwaHhVcGRhdGUpXG4gICAgICAgICAgaWYodGhpcy5za2lwQ0lEU2libGluZyh0b0VsKSl7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgaWYoRE9NLmlzUGh4U3RpY2t5KGZyb21FbCkpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKERPTS5pc0lnbm9yZWQoZnJvbUVsLCBwaHhVcGRhdGUpKXtcbiAgICAgICAgICAgIHRoaXMudHJhY2tCZWZvcmUoXCJ1cGRhdGVkXCIsIGZyb21FbCwgdG9FbClcbiAgICAgICAgICAgIERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2lzSWdub3JlZDogdHJ1ZX0pXG4gICAgICAgICAgICB1cGRhdGVzLnB1c2goZnJvbUVsKVxuICAgICAgICAgICAgRE9NLmFwcGx5U3RpY2t5T3BlcmF0aW9ucyhmcm9tRWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZnJvbUVsLnR5cGUgPT09IFwibnVtYmVyXCIgJiYgKGZyb21FbC52YWxpZGl0eSAmJiBmcm9tRWwudmFsaWRpdHkuYmFkSW5wdXQpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICBpZighRE9NLnN5bmNQZW5kaW5nUmVmKGZyb21FbCwgdG9FbCwgZGlzYWJsZVdpdGgpKXtcbiAgICAgICAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGZyb21FbCkpe1xuICAgICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICAgIHVwZGF0ZXMucHVzaChmcm9tRWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG5lc3RlZCB2aWV3IGhhbmRsaW5nXG4gICAgICAgICAgaWYoRE9NLmlzUGh4Q2hpbGQodG9FbCkpe1xuICAgICAgICAgICAgbGV0IHByZXZTZXNzaW9uID0gZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTilcbiAgICAgICAgICAgIERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2V4Y2x1ZGU6IFtQSFhfU1RBVElDXX0pXG4gICAgICAgICAgICBpZihwcmV2U2Vzc2lvbiAhPT0gXCJcIil7IGZyb21FbC5zZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04sIHByZXZTZXNzaW9uKSB9XG4gICAgICAgICAgICBmcm9tRWwuc2V0QXR0cmlidXRlKFBIWF9ST09UX0lELCB0aGlzLnJvb3RJRClcbiAgICAgICAgICAgIERPTS5hcHBseVN0aWNreU9wZXJhdGlvbnMoZnJvbUVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaW5wdXQgaGFuZGxpbmdcbiAgICAgICAgICBET00uY29weVByaXZhdGVzKHRvRWwsIGZyb21FbClcbiAgICAgICAgICBET00uZGlzY2FyZEVycm9yKHRhcmdldENvbnRhaW5lciwgdG9FbCwgcGh4RmVlZGJhY2tGb3IpXG5cbiAgICAgICAgICBsZXQgaXNGb2N1c2VkRm9ybUVsID0gZm9jdXNlZCAmJiBmcm9tRWwuaXNTYW1lTm9kZShmb2N1c2VkKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKVxuICAgICAgICAgIGlmKGlzRm9jdXNlZEZvcm1FbCl7XG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICBET00ubWVyZ2VGb2N1c2VkSW5wdXQoZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgRE9NLnN5bmNBdHRyc1RvUHJvcHMoZnJvbUVsKVxuICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIERPTS5hcHBseVN0aWNreU9wZXJhdGlvbnMoZnJvbUVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKERPTS5pc1BoeFVwZGF0ZSh0b0VsLCBwaHhVcGRhdGUsIFtcImFwcGVuZFwiLCBcInByZXBlbmRcIl0pKXtcbiAgICAgICAgICAgICAgYXBwZW5kUHJlcGVuZFVwZGF0ZXMucHVzaChuZXcgRE9NUG9zdE1vcnBoUmVzdG9yZXIoZnJvbUVsLCB0b0VsLCB0b0VsLmdldEF0dHJpYnV0ZShwaHhVcGRhdGUpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIERPTS5zeW5jQXR0cnNUb1Byb3BzKHRvRWwpXG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKHRvRWwpXG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYobGl2ZVNvY2tldC5pc0RlYnVnRW5hYmxlZCgpKXsgZGV0ZWN0RHVwbGljYXRlSWRzKCkgfVxuXG4gICAgaWYoYXBwZW5kUHJlcGVuZFVwZGF0ZXMubGVuZ3RoID4gMCl7XG4gICAgICBsaXZlU29ja2V0LnRpbWUoXCJwb3N0LW1vcnBoIGFwcGVuZC9wcmVwZW5kIHJlc3RvcmF0aW9uXCIsICgpID0+IHtcbiAgICAgICAgYXBwZW5kUHJlcGVuZFVwZGF0ZXMuZm9yRWFjaCh1cGRhdGUgPT4gdXBkYXRlLnBlcmZvcm0oKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgbGl2ZVNvY2tldC5zaWxlbmNlRXZlbnRzKCgpID0+IERPTS5yZXN0b3JlRm9jdXMoZm9jdXNlZCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpXG4gICAgRE9NLmRpc3BhdGNoRXZlbnQoZG9jdW1lbnQsIFwicGh4OnVwZGF0ZVwiKVxuICAgIGFkZGVkLmZvckVhY2goZWwgPT4gdGhpcy50cmFja0FmdGVyKFwiYWRkZWRcIiwgZWwpKVxuICAgIHVwZGF0ZXMuZm9yRWFjaChlbCA9PiB0aGlzLnRyYWNrQWZ0ZXIoXCJ1cGRhdGVkXCIsIGVsKSlcblxuICAgIGlmKHBlbmRpbmdSZW1vdmVzLmxlbmd0aCA+IDApe1xuICAgICAgbGl2ZVNvY2tldC50cmFuc2l0aW9uUmVtb3ZlcyhwZW5kaW5nUmVtb3ZlcylcbiAgICAgIGxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIHBlbmRpbmdSZW1vdmVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIGxldCBjaGlsZCA9IERPTS5maXJzdFBoeENoaWxkKGVsKVxuICAgICAgICAgIGlmKGNoaWxkKXsgbGl2ZVNvY2tldC5kZXN0cm95Vmlld0J5RWwoY2hpbGQpIH1cbiAgICAgICAgICBlbC5yZW1vdmUoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnRyYWNrQWZ0ZXIoXCJ0cmFuc2l0aW9uc0Rpc2NhcmRlZFwiLCBwZW5kaW5nUmVtb3ZlcylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYoZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkKXtcbiAgICAgIGxpdmVTb2NrZXQuZGlzY29ubmVjdCgpXG4gICAgICBleHRlcm5hbEZvcm1UcmlnZ2VyZWQuc3VibWl0KClcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlzQ0lEUGF0Y2goKXsgcmV0dXJuIHRoaXMuY2lkUGF0Y2ggfVxuXG4gIHNraXBDSURTaWJsaW5nKGVsKXtcbiAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfU0tJUCkgIT09IG51bGxcbiAgfVxuXG4gIHRhcmdldENJRENvbnRhaW5lcihodG1sKXtcbiAgICBpZighdGhpcy5pc0NJRFBhdGNoKCkpeyByZXR1cm4gfVxuICAgIGxldCBbZmlyc3QsIC4uLnJlc3RdID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmNvbnRhaW5lciwgdGhpcy50YXJnZXRDSUQpXG4gICAgaWYocmVzdC5sZW5ndGggPT09IDAgJiYgRE9NLmNoaWxkTm9kZUxlbmd0aChodG1sKSA9PT0gMSl7XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpcnN0ICYmIGZpcnN0LnBhcmVudE5vZGVcbiAgICB9XG4gIH1cblxuICAvLyBidWlsZHMgSFRNTCBmb3IgbW9ycGhkb20gcGF0Y2hcbiAgLy8gLSBmb3IgZnVsbCBwYXRjaGVzIG9mIExpdmVWaWV3IG9yIGEgY29tcG9uZW50IHdpdGggYSBzaW5nbGVcbiAgLy8gICByb290IG5vZGUsIHNpbXBseSByZXR1cm5zIHRoZSBIVE1MXG4gIC8vIC0gZm9yIHBhdGNoZXMgb2YgYSBjb21wb25lbnQgd2l0aCBtdWx0aXBsZSByb290IG5vZGVzLCB0aGVcbiAgLy8gICBwYXJlbnQgbm9kZSBiZWNvbWVzIHRoZSB0YXJnZXQgY29udGFpbmVyIGFuZCBub24tY29tcG9uZW50XG4gIC8vICAgc2libGluZ3MgYXJlIG1hcmtlZCBhcyBza2lwLlxuICBidWlsZERpZmZIVE1MKGNvbnRhaW5lciwgaHRtbCwgcGh4VXBkYXRlLCB0YXJnZXRDb250YWluZXIpe1xuICAgIGxldCBpc0NJRFBhdGNoID0gdGhpcy5pc0NJRFBhdGNoKClcbiAgICBsZXQgaXNDSURXaXRoU2luZ2xlUm9vdCA9IGlzQ0lEUGF0Y2ggJiYgdGFyZ2V0Q29udGFpbmVyLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSA9PT0gdGhpcy50YXJnZXRDSUQudG9TdHJpbmcoKVxuICAgIGlmKCFpc0NJRFBhdGNoIHx8IGlzQ0lEV2l0aFNpbmdsZVJvb3Qpe1xuICAgICAgcmV0dXJuIGh0bWxcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcG9uZW50IHBhdGNoIHdpdGggbXVsdGlwbGUgQ0lEIHJvb3RzXG4gICAgICBsZXQgZGlmZkNvbnRhaW5lciA9IG51bGxcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgICAgZGlmZkNvbnRhaW5lciA9IERPTS5jbG9uZU5vZGUodGFyZ2V0Q29udGFpbmVyKVxuICAgICAgbGV0IFtmaXJzdENvbXBvbmVudCwgLi4ucmVzdF0gPSBET00uZmluZENvbXBvbmVudE5vZGVMaXN0KGRpZmZDb250YWluZXIsIHRoaXMudGFyZ2V0Q0lEKVxuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFxuICAgICAgcmVzdC5mb3JFYWNoKGVsID0+IGVsLnJlbW92ZSgpKVxuICAgICAgQXJyYXkuZnJvbShkaWZmQ29udGFpbmVyLmNoaWxkTm9kZXMpLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAvLyB3ZSBjYW4gb25seSBza2lwIHRyYWNrYWJsZSBub2RlcyB3aXRoIGFuIElEXG4gICAgICAgIGlmKGNoaWxkLmlkICYmIGNoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBjaGlsZC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkgIT09IHRoaXMudGFyZ2V0Q0lELnRvU3RyaW5nKCkpe1xuICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShQSFhfU0tJUCwgXCJcIilcbiAgICAgICAgICBjaGlsZC5pbm5lckhUTUwgPSBcIlwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBBcnJheS5mcm9tKHRlbXBsYXRlLmNvbnRlbnQuY2hpbGROb2RlcykuZm9yRWFjaChlbCA9PiBkaWZmQ29udGFpbmVyLmluc2VydEJlZm9yZShlbCwgZmlyc3RDb21wb25lbnQpKVxuICAgICAgZmlyc3RDb21wb25lbnQucmVtb3ZlKClcbiAgICAgIHJldHVybiBkaWZmQ29udGFpbmVyLm91dGVySFRNTFxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIENPTVBPTkVOVFMsXG4gIERZTkFNSUNTLFxuICBURU1QTEFURVMsXG4gIEVWRU5UUyxcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX1NLSVAsXG4gIFJFUExZLFxuICBTVEFUSUMsXG4gIFRJVExFXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBsb2dFcnJvcixcbiAgaXNDaWQsXG59IGZyb20gXCIuL3V0aWxzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyZWQge1xuICBzdGF0aWMgZXh0cmFjdChkaWZmKXtcbiAgICBsZXQge1tSRVBMWV06IHJlcGx5LCBbRVZFTlRTXTogZXZlbnRzLCBbVElUTEVdOiB0aXRsZX0gPSBkaWZmXG4gICAgZGVsZXRlIGRpZmZbUkVQTFldXG4gICAgZGVsZXRlIGRpZmZbRVZFTlRTXVxuICAgIGRlbGV0ZSBkaWZmW1RJVExFXVxuICAgIHJldHVybiB7ZGlmZiwgdGl0bGUsIHJlcGx5OiByZXBseSB8fCBudWxsLCBldmVudHM6IGV2ZW50cyB8fCBbXX1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZpZXdJZCwgcmVuZGVyZWQpe1xuICAgIHRoaXMudmlld0lkID0gdmlld0lkXG4gICAgdGhpcy5yZW5kZXJlZCA9IHt9XG4gICAgdGhpcy5tZXJnZURpZmYocmVuZGVyZWQpXG4gIH1cblxuICBwYXJlbnRWaWV3SWQoKXsgcmV0dXJuIHRoaXMudmlld0lkIH1cblxuICB0b1N0cmluZyhvbmx5Q2lkcyl7XG4gICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlVG9TdHJpbmcodGhpcy5yZW5kZXJlZCwgdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSwgb25seUNpZHMpXG4gIH1cblxuICByZWN1cnNpdmVUb1N0cmluZyhyZW5kZXJlZCwgY29tcG9uZW50cyA9IHJlbmRlcmVkW0NPTVBPTkVOVFNdLCBvbmx5Q2lkcyl7XG4gICAgb25seUNpZHMgPSBvbmx5Q2lkcyA/IG5ldyBTZXQob25seUNpZHMpIDogbnVsbFxuICAgIGxldCBvdXRwdXQgPSB7YnVmZmVyOiBcIlwiLCBjb21wb25lbnRzOiBjb21wb25lbnRzLCBvbmx5Q2lkczogb25seUNpZHN9XG4gICAgdGhpcy50b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgbnVsbCwgb3V0cHV0KVxuICAgIHJldHVybiBvdXRwdXQuYnVmZmVyXG4gIH1cblxuICBjb21wb25lbnRDSURzKGRpZmYpeyByZXR1cm4gT2JqZWN0LmtleXMoZGlmZltDT01QT05FTlRTXSB8fCB7fSkubWFwKGkgPT4gcGFyc2VJbnQoaSkpIH1cblxuICBpc0NvbXBvbmVudE9ubHlEaWZmKGRpZmYpe1xuICAgIGlmKCFkaWZmW0NPTVBPTkVOVFNdKXsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGlmZikubGVuZ3RoID09PSAxXG4gIH1cblxuICBnZXRDb21wb25lbnQoZGlmZiwgY2lkKXsgcmV0dXJuIGRpZmZbQ09NUE9ORU5UU11bY2lkXSB9XG5cbiAgbWVyZ2VEaWZmKGRpZmYpe1xuICAgIGxldCBuZXdjID0gZGlmZltDT01QT05FTlRTXVxuICAgIGxldCBjYWNoZSA9IHt9XG4gICAgZGVsZXRlIGRpZmZbQ09NUE9ORU5UU11cbiAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy5tdXRhYmxlTWVyZ2UodGhpcy5yZW5kZXJlZCwgZGlmZilcbiAgICB0aGlzLnJlbmRlcmVkW0NPTVBPTkVOVFNdID0gdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSB8fCB7fVxuXG4gICAgaWYobmV3Yyl7XG4gICAgICBsZXQgb2xkYyA9IHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU11cblxuICAgICAgZm9yKGxldCBjaWQgaW4gbmV3Yyl7XG4gICAgICAgIG5ld2NbY2lkXSA9IHRoaXMuY2FjaGVkRmluZENvbXBvbmVudChjaWQsIG5ld2NbY2lkXSwgb2xkYywgbmV3YywgY2FjaGUpXG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgY2lkIGluIG5ld2MpeyBvbGRjW2NpZF0gPSBuZXdjW2NpZF0gfVxuICAgICAgZGlmZltDT01QT05FTlRTXSA9IG5ld2NcbiAgICB9XG4gIH1cblxuICBjYWNoZWRGaW5kQ29tcG9uZW50KGNpZCwgY2RpZmYsIG9sZGMsIG5ld2MsIGNhY2hlKXtcbiAgICBpZihjYWNoZVtjaWRdKXtcbiAgICAgIHJldHVybiBjYWNoZVtjaWRdXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZGlmZiwgc3RhdCwgc2NpZCA9IGNkaWZmW1NUQVRJQ11cblxuICAgICAgaWYoaXNDaWQoc2NpZCkpe1xuICAgICAgICBsZXQgdGRpZmZcblxuICAgICAgICBpZihzY2lkID4gMCl7XG4gICAgICAgICAgdGRpZmYgPSB0aGlzLmNhY2hlZEZpbmRDb21wb25lbnQoc2NpZCwgbmV3Y1tzY2lkXSwgb2xkYywgbmV3YywgY2FjaGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGRpZmYgPSBvbGRjWy1zY2lkXVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdCA9IHRkaWZmW1NUQVRJQ11cbiAgICAgICAgbmRpZmYgPSB0aGlzLmNsb25lTWVyZ2UodGRpZmYsIGNkaWZmKVxuICAgICAgICBuZGlmZltTVEFUSUNdID0gc3RhdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmRpZmYgPSBjZGlmZltTVEFUSUNdICE9PSB1bmRlZmluZWQgPyBjZGlmZiA6IHRoaXMuY2xvbmVNZXJnZShvbGRjW2NpZF0gfHwge30sIGNkaWZmKVxuICAgICAgfVxuXG4gICAgICBjYWNoZVtjaWRdID0gbmRpZmZcbiAgICAgIHJldHVybiBuZGlmZlxuICAgIH1cbiAgfVxuXG4gIG11dGFibGVNZXJnZSh0YXJnZXQsIHNvdXJjZSl7XG4gICAgaWYoc291cmNlW1NUQVRJQ10gIT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gc291cmNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2UpXG4gICAgICByZXR1cm4gdGFyZ2V0XG4gICAgfVxuICB9XG5cbiAgZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2Upe1xuICAgIGZvcihsZXQga2V5IGluIHNvdXJjZSl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICB0aGlzLmRvTXV0YWJsZU1lcmdlKHRhcmdldFZhbCwgdmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9uZU1lcmdlKHRhcmdldCwgc291cmNlKXtcbiAgICBsZXQgbWVyZ2VkID0gey4uLnRhcmdldCwgLi4uc291cmNlfVxuICAgIGZvcihsZXQga2V5IGluIG1lcmdlZCl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICBtZXJnZWRba2V5XSA9IHRoaXMuY2xvbmVNZXJnZSh0YXJnZXRWYWwsIHZhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZFxuICB9XG5cbiAgY29tcG9uZW50VG9TdHJpbmcoY2lkKXsgcmV0dXJuIHRoaXMucmVjdXJzaXZlQ0lEVG9TdHJpbmcodGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSwgY2lkKSB9XG5cbiAgcHJ1bmVDSURzKGNpZHMpe1xuICAgIGNpZHMuZm9yRWFjaChjaWQgPT4gZGVsZXRlIHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU11bY2lkXSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICBnZXQoKXsgcmV0dXJuIHRoaXMucmVuZGVyZWQgfVxuXG4gIGlzTmV3RmluZ2VycHJpbnQoZGlmZiA9IHt9KXsgcmV0dXJuICEhZGlmZltTVEFUSUNdIH1cblxuICB0ZW1wbGF0ZVN0YXRpYyhwYXJ0LCB0ZW1wbGF0ZXMpe1xuICAgIGlmKHR5cGVvZiAocGFydCkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZXNbcGFydF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnRcbiAgICB9XG4gIH1cblxuICB0b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpe1xuICAgIGlmKHJlbmRlcmVkW0RZTkFNSUNTXSl7IHJldHVybiB0aGlzLmNvbXByZWhlbnNpb25Ub0J1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpIH1cbiAgICBsZXQge1tTVEFUSUNdOiBzdGF0aWNzfSA9IHJlbmRlcmVkXG4gICAgc3RhdGljcyA9IHRoaXMudGVtcGxhdGVTdGF0aWMoc3RhdGljcywgdGVtcGxhdGVzKVxuXG4gICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzWzBdXG4gICAgZm9yKGxldCBpID0gMTsgaSA8IHN0YXRpY3MubGVuZ3RoOyBpKyspe1xuICAgICAgdGhpcy5keW5hbWljVG9CdWZmZXIocmVuZGVyZWRbaSAtIDFdLCB0ZW1wbGF0ZXMsIG91dHB1dClcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1tpXVxuICAgIH1cbiAgfVxuXG4gIGNvbXByZWhlbnNpb25Ub0J1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpe1xuICAgIGxldCB7W0RZTkFNSUNTXTogZHluYW1pY3MsIFtTVEFUSUNdOiBzdGF0aWNzfSA9IHJlbmRlcmVkXG4gICAgc3RhdGljcyA9IHRoaXMudGVtcGxhdGVTdGF0aWMoc3RhdGljcywgdGVtcGxhdGVzKVxuICAgIGxldCBjb21wVGVtcGxhdGVzID0gdGVtcGxhdGVzIHx8IHJlbmRlcmVkW1RFTVBMQVRFU11cblxuICAgIGZvcihsZXQgZCA9IDA7IGQgPCBkeW5hbWljcy5sZW5ndGg7IGQrKyl7XG4gICAgICBsZXQgZHluYW1pYyA9IGR5bmFtaWNzW2RdXG4gICAgICBvdXRwdXQuYnVmZmVyICs9IHN0YXRpY3NbMF1cbiAgICAgIGZvcihsZXQgaSA9IDE7IGkgPCBzdGF0aWNzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5keW5hbWljVG9CdWZmZXIoZHluYW1pY1tpIC0gMV0sIGNvbXBUZW1wbGF0ZXMsIG91dHB1dClcbiAgICAgICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzW2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHluYW1pY1RvQnVmZmVyKHJlbmRlcmVkLCB0ZW1wbGF0ZXMsIG91dHB1dCl7XG4gICAgaWYodHlwZW9mIChyZW5kZXJlZCkgPT09IFwibnVtYmVyXCIpe1xuICAgICAgb3V0cHV0LmJ1ZmZlciArPSB0aGlzLnJlY3Vyc2l2ZUNJRFRvU3RyaW5nKG91dHB1dC5jb21wb25lbnRzLCByZW5kZXJlZCwgb3V0cHV0Lm9ubHlDaWRzKVxuICAgIH0gZWxzZSBpZihpc09iamVjdChyZW5kZXJlZCkpe1xuICAgICAgdGhpcy50b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gcmVuZGVyZWRcbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVDSURUb1N0cmluZyhjb21wb25lbnRzLCBjaWQsIG9ubHlDaWRzKXtcbiAgICBsZXQgY29tcG9uZW50ID0gY29tcG9uZW50c1tjaWRdIHx8IGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm9yIENJRCAke2NpZH1gLCBjb21wb25lbnRzKVxuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IHRoaXMucmVjdXJzaXZlVG9TdHJpbmcoY29tcG9uZW50LCBjb21wb25lbnRzLCBvbmx5Q2lkcylcbiAgICBsZXQgY29udGFpbmVyID0gdGVtcGxhdGUuY29udGVudFxuICAgIGxldCBza2lwID0gb25seUNpZHMgJiYgIW9ubHlDaWRzLmhhcyhjaWQpXG5cbiAgICBsZXQgW2hhc0NoaWxkTm9kZXMsIGhhc0NoaWxkQ29tcG9uZW50c10gPVxuICAgICAgQXJyYXkuZnJvbShjb250YWluZXIuY2hpbGROb2RlcykucmVkdWNlKChbaGFzTm9kZXMsIGhhc0NvbXBvbmVudHNdLCBjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZihjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpe1xuICAgICAgICAgIGlmKGNoaWxkLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSl7XG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCB0cnVlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCwgY2lkKVxuICAgICAgICAgIGlmKCFjaGlsZC5pZCl7IGNoaWxkLmlkID0gYCR7dGhpcy5wYXJlbnRWaWV3SWQoKX0tJHtjaWR9LSR7aX1gIH1cbiAgICAgICAgICBpZihza2lwKXtcbiAgICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShQSFhfU0tJUCwgXCJcIilcbiAgICAgICAgICAgIGNoaWxkLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFt0cnVlLCBoYXNDb21wb25lbnRzXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKGNoaWxkLm5vZGVWYWx1ZS50cmltKCkgIT09IFwiXCIpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJvbmx5IEhUTUwgZWxlbWVudCB0YWdzIGFyZSBhbGxvd2VkIGF0IHRoZSByb290IG9mIGNvbXBvbmVudHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBgZ290OiBcIiR7Y2hpbGQubm9kZVZhbHVlLnRyaW0oKX1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBcIndpdGhpbjpcXG5cIiwgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgICAgICAgIGNoaWxkLnJlcGxhY2VXaXRoKHRoaXMuY3JlYXRlU3BhbihjaGlsZC5ub2RlVmFsdWUsIGNpZCkpXG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGhhc0NvbXBvbmVudHNdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpXG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCBoYXNDb21wb25lbnRzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2ZhbHNlLCBmYWxzZV0pXG5cbiAgICBpZighaGFzQ2hpbGROb2RlcyAmJiAhaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgdGhlIGNvbXBvbmVudCBpcyBlbXB0eTpcXG5cIixcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNwYW4oXCJcIiwgY2lkKS5vdXRlckhUTUxcbiAgICB9IGVsc2UgaWYoIWhhc0NoaWxkTm9kZXMgJiYgaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgZGlyZWN0bHkgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgb25seSBzdWJjb21wb25lbnRzIHdlcmUgZm91bmQuIEEgY29tcG9uZW50IG11c3QgcmVuZGVyIGF0IGxlYXN0IG9uZSBIVE1MIHRhZyBkaXJlY3RseSBpbnNpZGUgaXRzZWxmLlwiLFxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwudHJpbSgpKVxuICAgICAgcmV0dXJuIHRlbXBsYXRlLmlubmVySFRNTFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuaW5uZXJIVE1MXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU3Bhbih0ZXh0LCBjaWQpe1xuICAgIGxldCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIilcbiAgICBzcGFuLmlubmVyVGV4dCA9IHRleHRcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5ULCBjaWQpXG4gICAgcmV0dXJuIHNwYW5cbiAgfVxufVxuIiwgImxldCB2aWV3SG9va0lEID0gMVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld0hvb2sge1xuICBzdGF0aWMgbWFrZUlEKCl7IHJldHVybiB2aWV3SG9va0lEKysgfVxuICBzdGF0aWMgZWxlbWVudElEKGVsKXsgcmV0dXJuIGVsLnBoeEhvb2tJZCB9XG5cbiAgY29uc3RydWN0b3IodmlldywgZWwsIGNhbGxiYWNrcyl7XG4gICAgdGhpcy5fX3ZpZXcgPSB2aWV3XG4gICAgdGhpcy5saXZlU29ja2V0ID0gdmlldy5saXZlU29ja2V0XG4gICAgdGhpcy5fX2NhbGxiYWNrcyA9IGNhbGxiYWNrc1xuICAgIHRoaXMuX19saXN0ZW5lcnMgPSBuZXcgU2V0KClcbiAgICB0aGlzLl9faXNEaXNjb25uZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMuZWwgPSBlbFxuICAgIHRoaXMuZWwucGh4SG9va0lkID0gdGhpcy5jb25zdHJ1Y3Rvci5tYWtlSUQoKVxuICAgIGZvcihsZXQga2V5IGluIHRoaXMuX19jYWxsYmFja3MpeyB0aGlzW2tleV0gPSB0aGlzLl9fY2FsbGJhY2tzW2tleV0gfVxuICB9XG5cbiAgX19tb3VudGVkKCl7IHRoaXMubW91bnRlZCAmJiB0aGlzLm1vdW50ZWQoKSB9XG4gIF9fdXBkYXRlZCgpeyB0aGlzLnVwZGF0ZWQgJiYgdGhpcy51cGRhdGVkKCkgfVxuICBfX2JlZm9yZVVwZGF0ZSgpeyB0aGlzLmJlZm9yZVVwZGF0ZSAmJiB0aGlzLmJlZm9yZVVwZGF0ZSgpIH1cbiAgX19kZXN0cm95ZWQoKXsgdGhpcy5kZXN0cm95ZWQgJiYgdGhpcy5kZXN0cm95ZWQoKSB9XG4gIF9fcmVjb25uZWN0ZWQoKXtcbiAgICBpZih0aGlzLl9faXNEaXNjb25uZWN0ZWQpe1xuICAgICAgdGhpcy5fX2lzRGlzY29ubmVjdGVkID0gZmFsc2VcbiAgICAgIHRoaXMucmVjb25uZWN0ZWQgJiYgdGhpcy5yZWNvbm5lY3RlZCgpXG4gICAgfVxuICB9XG4gIF9fZGlzY29ubmVjdGVkKCl7XG4gICAgdGhpcy5fX2lzRGlzY29ubmVjdGVkID0gdHJ1ZVxuICAgIHRoaXMuZGlzY29ubmVjdGVkICYmIHRoaXMuZGlzY29ubmVjdGVkKClcbiAgfVxuXG4gIHB1c2hFdmVudChldmVudCwgcGF5bG9hZCA9IHt9LCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy5wdXNoSG9va0V2ZW50KG51bGwsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5KVxuICB9XG5cbiAgcHVzaEV2ZW50VG8ocGh4VGFyZ2V0LCBldmVudCwgcGF5bG9hZCA9IHt9LCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy53aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgKHZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgcmV0dXJuIHZpZXcucHVzaEhvb2tFdmVudCh0YXJnZXRDdHgsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5KVxuICAgIH0pXG4gIH1cblxuICBoYW5kbGVFdmVudChldmVudCwgY2FsbGJhY2spe1xuICAgIGxldCBjYWxsYmFja1JlZiA9IChjdXN0b21FdmVudCwgYnlwYXNzKSA9PiBieXBhc3MgPyBldmVudCA6IGNhbGxiYWNrKGN1c3RvbUV2ZW50LmRldGFpbClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcGh4OiR7ZXZlbnR9YCwgY2FsbGJhY2tSZWYpXG4gICAgdGhpcy5fX2xpc3RlbmVycy5hZGQoY2FsbGJhY2tSZWYpXG4gICAgcmV0dXJuIGNhbGxiYWNrUmVmXG4gIH1cblxuICByZW1vdmVIYW5kbGVFdmVudChjYWxsYmFja1JlZil7XG4gICAgbGV0IGV2ZW50ID0gY2FsbGJhY2tSZWYobnVsbCwgdHJ1ZSlcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcGh4OiR7ZXZlbnR9YCwgY2FsbGJhY2tSZWYpXG4gICAgdGhpcy5fX2xpc3RlbmVycy5kZWxldGUoY2FsbGJhY2tSZWYpXG4gIH1cblxuICB1cGxvYWQobmFtZSwgZmlsZXMpe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpXG4gIH1cblxuICB1cGxvYWRUbyhwaHhUYXJnZXQsIG5hbWUsIGZpbGVzKXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcud2l0aGluVGFyZ2V0cyhwaHhUYXJnZXQsIHZpZXcgPT4gdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpKVxuICB9XG5cbiAgX19jbGVhbnVwX18oKXtcbiAgICB0aGlzLl9fbGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2tSZWYgPT4gdGhpcy5yZW1vdmVIYW5kbGVFdmVudChjYWxsYmFja1JlZikpXG4gIH1cbn1cbiIsICJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5cbmxldCBKUyA9IHtcbiAgZXhlYyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZGVmYXVsdHMpe1xuICAgIGxldCBbZGVmYXVsdEtpbmQsIGRlZmF1bHRBcmdzXSA9IGRlZmF1bHRzIHx8IFtudWxsLCB7fV1cbiAgICBsZXQgY29tbWFuZHMgPSBwaHhFdmVudC5jaGFyQXQoMCkgPT09IFwiW1wiID9cbiAgICAgIEpTT04ucGFyc2UocGh4RXZlbnQpIDogW1tkZWZhdWx0S2luZCwgZGVmYXVsdEFyZ3NdXVxuXG4gICAgY29tbWFuZHMuZm9yRWFjaCgoW2tpbmQsIGFyZ3NdKSA9PiB7XG4gICAgICBpZihraW5kID09PSBkZWZhdWx0S2luZCAmJiBkZWZhdWx0QXJncy5kYXRhKXtcbiAgICAgICAgYXJncy5kYXRhID0gT2JqZWN0LmFzc2lnbihhcmdzLmRhdGEgfHwge30sIGRlZmF1bHRBcmdzLmRhdGEpXG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclRvRWxzKHNvdXJjZUVsLCBhcmdzKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgdGhpc1tgZXhlY18ke2tpbmR9YF0oZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCBhcmdzKVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuXG4gIGlzVmlzaWJsZShlbCl7XG4gICAgcmV0dXJuICEhKGVsLm9mZnNldFdpZHRoIHx8IGVsLm9mZnNldEhlaWdodCB8fCBlbC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDApXG4gIH0sXG5cbiAgLy8gcHJpdmF0ZVxuXG4gIC8vIGNvbW1hbmRzXG5cbiAgZXhlY19kaXNwYXRjaChldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHt0bywgZXZlbnQsIGRldGFpbCwgYnViYmxlc30pe1xuICAgIGRldGFpbCA9IGRldGFpbCB8fCB7fVxuICAgIGRldGFpbC5kaXNwYXRjaGVyID0gc291cmNlRWxcbiAgICBET00uZGlzcGF0Y2hFdmVudChlbCwgZXZlbnQsIHtkZXRhaWwsIGJ1YmJsZXN9KVxuICB9LFxuXG4gIGV4ZWNfcHVzaChldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIGFyZ3Mpe1xuICAgIGlmKCF2aWV3LmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuXG4gICAgbGV0IHtldmVudCwgZGF0YSwgdGFyZ2V0LCBwYWdlX2xvYWRpbmcsIGxvYWRpbmcsIHZhbHVlLCBkaXNwYXRjaGVyfSA9IGFyZ3NcbiAgICBsZXQgcHVzaE9wdHMgPSB7bG9hZGluZywgdmFsdWUsIHRhcmdldCwgcGFnZV9sb2FkaW5nOiAhIXBhZ2VfbG9hZGluZ31cbiAgICBsZXQgdGFyZ2V0U3JjID0gZXZlbnRUeXBlID09PSBcImNoYW5nZVwiICYmIGRpc3BhdGNoZXIgPyBkaXNwYXRjaGVyIDogc291cmNlRWxcbiAgICBsZXQgcGh4VGFyZ2V0ID0gdGFyZ2V0IHx8IHRhcmdldFNyYy5nZXRBdHRyaWJ1dGUodmlldy5iaW5kaW5nKFwidGFyZ2V0XCIpKSB8fCB0YXJnZXRTcmNcbiAgICB2aWV3LndpdGhpblRhcmdldHMocGh4VGFyZ2V0LCAodGFyZ2V0VmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICBpZihldmVudFR5cGUgPT09IFwiY2hhbmdlXCIpe1xuICAgICAgICBsZXQge25ld0NpZCwgX3RhcmdldCwgY2FsbGJhY2t9ID0gYXJnc1xuICAgICAgICBfdGFyZ2V0ID0gX3RhcmdldCB8fCAoc291cmNlRWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ID8gc291cmNlRWwubmFtZSA6IHVuZGVmaW5lZClcbiAgICAgICAgaWYoX3RhcmdldCl7IHB1c2hPcHRzLl90YXJnZXQgPSBfdGFyZ2V0IH1cbiAgICAgICAgdGFyZ2V0Vmlldy5wdXNoSW5wdXQoc291cmNlRWwsIHRhcmdldEN0eCwgbmV3Q2lkLCBldmVudCB8fCBwaHhFdmVudCwgcHVzaE9wdHMsIGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIGlmKGV2ZW50VHlwZSA9PT0gXCJzdWJtaXRcIil7XG4gICAgICAgIHRhcmdldFZpZXcuc3VibWl0Rm9ybShzb3VyY2VFbCwgdGFyZ2V0Q3R4LCBldmVudCB8fCBwaHhFdmVudCwgcHVzaE9wdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRWaWV3LnB1c2hFdmVudChldmVudFR5cGUsIHNvdXJjZUVsLCB0YXJnZXRDdHgsIGV2ZW50IHx8IHBoeEV2ZW50LCBkYXRhLCBwdXNoT3B0cylcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGV4ZWNfYWRkX2NsYXNzKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge25hbWVzLCB0cmFuc2l0aW9uLCB0aW1lfSl7XG4gICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIG5hbWVzLCBbXSwgdHJhbnNpdGlvbiwgdGltZSwgdmlldylcbiAgfSxcblxuICBleGVjX3JlbW92ZV9jbGFzcyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtuYW1lcywgdHJhbnNpdGlvbiwgdGltZX0pe1xuICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBbXSwgbmFtZXMsIHRyYW5zaXRpb24sIHRpbWUsIHZpZXcpXG4gIH0sXG5cbiAgZXhlY190cmFuc2l0aW9uKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge3RpbWUsIHRyYW5zaXRpb259KXtcbiAgICBsZXQgW3RyYW5zaXRpb25fc3RhcnQsIHJ1bm5pbmcsIHRyYW5zaXRpb25fZW5kXSA9IHRyYW5zaXRpb25cbiAgICBsZXQgb25TdGFydCA9ICgpID0+IHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCB0cmFuc2l0aW9uX3N0YXJ0LmNvbmNhdChydW5uaW5nKSwgW10pXG4gICAgbGV0IG9uRG9uZSA9ICgpID0+IHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCB0cmFuc2l0aW9uX2VuZCwgdHJhbnNpdGlvbl9zdGFydC5jb25jYXQocnVubmluZykpXG4gICAgdmlldy50cmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSlcbiAgfSxcblxuICBleGVjX3RvZ2dsZShldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtkaXNwbGF5LCBpbnMsIG91dHMsIHRpbWV9KXtcbiAgICB0aGlzLnRvZ2dsZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCBpbnMsIG91dHMsIHRpbWUpXG4gIH0sXG5cbiAgZXhlY19zaG93KGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge2Rpc3BsYXksIHRyYW5zaXRpb24sIHRpbWV9KXtcbiAgICB0aGlzLnNob3coZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZSlcbiAgfSxcblxuICBleGVjX2hpZGUoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7ZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZX0pe1xuICAgIHRoaXMuaGlkZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lKVxuICB9LFxuXG4gIGV4ZWNfc2V0X2F0dHIoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7YXR0cjogW2F0dHIsIHZhbF19KXtcbiAgICB0aGlzLnNldE9yUmVtb3ZlQXR0cnMoZWwsIFtbYXR0ciwgdmFsXV0sIFtdKVxuICB9LFxuXG4gIGV4ZWNfcmVtb3ZlX2F0dHIoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7YXR0cn0pe1xuICAgIHRoaXMuc2V0T3JSZW1vdmVBdHRycyhlbCwgW10sIFthdHRyXSlcbiAgfSxcblxuICAvLyB1dGlscyBmb3IgY29tbWFuZHNcblxuICBzaG93KGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIHRyYW5zaXRpb24sIHRpbWUpe1xuICAgIGlmKCF0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgdGhpcy50b2dnbGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgbnVsbCwgdGltZSlcbiAgICB9XG4gIH0sXG5cbiAgaGlkZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lKXtcbiAgICBpZih0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgdGhpcy50b2dnbGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgbnVsbCwgdHJhbnNpdGlvbiwgdGltZSlcbiAgICB9XG4gIH0sXG5cbiAgdG9nZ2xlKGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIGlucywgb3V0cywgdGltZSl7XG4gICAgbGV0IFtpbkNsYXNzZXMsIGluU3RhcnRDbGFzc2VzLCBpbkVuZENsYXNzZXNdID0gaW5zIHx8IFtbXSwgW10sIFtdXVxuICAgIGxldCBbb3V0Q2xhc3Nlcywgb3V0U3RhcnRDbGFzc2VzLCBvdXRFbmRDbGFzc2VzXSA9IG91dHMgfHwgW1tdLCBbXSwgW11dXG4gICAgaWYoaW5DbGFzc2VzLmxlbmd0aCA+IDAgfHwgb3V0Q2xhc3Nlcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmKHRoaXMuaXNWaXNpYmxlKGVsKSl7XG4gICAgICAgIGxldCBvblN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBvdXRTdGFydENsYXNzZXMsIGluQ2xhc3Nlcy5jb25jYXQoaW5TdGFydENsYXNzZXMpLmNvbmNhdChpbkVuZENsYXNzZXMpKVxuICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIG91dENsYXNzZXMsIFtdKVxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgb3V0RW5kQ2xhc3Nlcywgb3V0U3RhcnRDbGFzc2VzKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OmhpZGUtc3RhcnRcIikpXG4gICAgICAgIHZpZXcudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIFtdLCBvdXRDbGFzc2VzLmNvbmNhdChvdXRFbmRDbGFzc2VzKSlcbiAgICAgICAgICBET00ucHV0U3RpY2t5KGVsLCBcInRvZ2dsZVwiLCBjdXJyZW50RWwgPT4gY3VycmVudEVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIilcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGV2ZW50VHlwZSA9PT0gXCJyZW1vdmVcIil7IHJldHVybiB9XG4gICAgICAgIGxldCBvblN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBpblN0YXJ0Q2xhc3Nlcywgb3V0Q2xhc3Nlcy5jb25jYXQob3V0U3RhcnRDbGFzc2VzKS5jb25jYXQob3V0RW5kQ2xhc3NlcykpXG4gICAgICAgICAgRE9NLnB1dFN0aWNreShlbCwgXCJ0b2dnbGVcIiwgY3VycmVudEVsID0+IGN1cnJlbnRFbC5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXkgfHwgXCJibG9ja1wiKSlcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBpbkNsYXNzZXMsIFtdKVxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgaW5FbmRDbGFzc2VzLCBpblN0YXJ0Q2xhc3NlcykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpzaG93LXN0YXJ0XCIpKVxuICAgICAgICB2aWV3LnRyYW5zaXRpb24odGltZSwgb25TdGFydCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBbXSwgaW5DbGFzc2VzLmNvbmNhdChpbkVuZENsYXNzZXMpKVxuICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OnNob3ctZW5kXCIpKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLXN0YXJ0XCIpKVxuICAgICAgICAgIERPTS5wdXRTdGlja3koZWwsIFwidG9nZ2xlXCIsIGN1cnJlbnRFbCA9PiBjdXJyZW50RWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiKVxuICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OmhpZGUtZW5kXCIpKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6c2hvdy1zdGFydFwiKSlcbiAgICAgICAgICBET00ucHV0U3RpY2t5KGVsLCBcInRvZ2dsZVwiLCBjdXJyZW50RWwgPT4gY3VycmVudEVsLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5IHx8IFwiYmxvY2tcIilcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpzaG93LWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBhZGRzLCByZW1vdmVzLCB0cmFuc2l0aW9uLCB0aW1lLCB2aWV3KXtcbiAgICBsZXQgW3RyYW5zaXRpb25fcnVuLCB0cmFuc2l0aW9uX3N0YXJ0LCB0cmFuc2l0aW9uX2VuZF0gPSB0cmFuc2l0aW9uIHx8IFtbXSwgW10sIFtdXVxuICAgIGlmKHRyYW5zaXRpb25fcnVuLmxlbmd0aCA+IDApe1xuICAgICAgbGV0IG9uU3RhcnQgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgdHJhbnNpdGlvbl9zdGFydC5jb25jYXQodHJhbnNpdGlvbl9ydW4pLCBbXSlcbiAgICAgIGxldCBvbkRvbmUgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgYWRkcy5jb25jYXQodHJhbnNpdGlvbl9lbmQpLCByZW1vdmVzLmNvbmNhdCh0cmFuc2l0aW9uX3J1bikuY29uY2F0KHRyYW5zaXRpb25fc3RhcnQpKVxuICAgICAgcmV0dXJuIHZpZXcudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpXG4gICAgfVxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgbGV0IFtwcmV2QWRkcywgcHJldlJlbW92ZXNdID0gRE9NLmdldFN0aWNreShlbCwgXCJjbGFzc2VzXCIsIFtbXSwgW11dKVxuICAgICAgbGV0IGtlZXBBZGRzID0gYWRkcy5maWx0ZXIobmFtZSA9PiBwcmV2QWRkcy5pbmRleE9mKG5hbWUpIDwgMCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKG5hbWUpKVxuICAgICAgbGV0IGtlZXBSZW1vdmVzID0gcmVtb3Zlcy5maWx0ZXIobmFtZSA9PiBwcmV2UmVtb3Zlcy5pbmRleE9mKG5hbWUpIDwgMCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMobmFtZSkpXG4gICAgICBsZXQgbmV3QWRkcyA9IHByZXZBZGRzLmZpbHRlcihuYW1lID0+IHJlbW92ZXMuaW5kZXhPZihuYW1lKSA8IDApLmNvbmNhdChrZWVwQWRkcylcbiAgICAgIGxldCBuZXdSZW1vdmVzID0gcHJldlJlbW92ZXMuZmlsdGVyKG5hbWUgPT4gYWRkcy5pbmRleE9mKG5hbWUpIDwgMCkuY29uY2F0KGtlZXBSZW1vdmVzKVxuXG4gICAgICBET00ucHV0U3RpY2t5KGVsLCBcImNsYXNzZXNcIiwgY3VycmVudEVsID0+IHtcbiAgICAgICAgY3VycmVudEVsLmNsYXNzTGlzdC5yZW1vdmUoLi4ubmV3UmVtb3ZlcylcbiAgICAgICAgY3VycmVudEVsLmNsYXNzTGlzdC5hZGQoLi4ubmV3QWRkcylcbiAgICAgICAgcmV0dXJuIFtuZXdBZGRzLCBuZXdSZW1vdmVzXVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuXG4gIHNldE9yUmVtb3ZlQXR0cnMoZWwsIHNldHMsIHJlbW92ZXMpe1xuICAgIGxldCBbcHJldlNldHMsIHByZXZSZW1vdmVzXSA9IERPTS5nZXRTdGlja3koZWwsIFwiYXR0cnNcIiwgW1tdLCBbXV0pXG5cbiAgICBsZXQgYWx0ZXJlZEF0dHJzID0gc2V0cy5tYXAoKFthdHRyLCBfdmFsXSkgPT4gYXR0cikuY29uY2F0KHJlbW92ZXMpO1xuICAgIGxldCBuZXdTZXRzID0gcHJldlNldHMuZmlsdGVyKChbYXR0ciwgX3ZhbF0pID0+ICFhbHRlcmVkQXR0cnMuaW5jbHVkZXMoYXR0cikpLmNvbmNhdChzZXRzKTtcbiAgICBsZXQgbmV3UmVtb3ZlcyA9IHByZXZSZW1vdmVzLmZpbHRlcigoYXR0cikgPT4gIWFsdGVyZWRBdHRycy5pbmNsdWRlcyhhdHRyKSkuY29uY2F0KHJlbW92ZXMpO1xuXG4gICAgRE9NLnB1dFN0aWNreShlbCwgXCJhdHRyc1wiLCBjdXJyZW50RWwgPT4ge1xuICAgICAgbmV3UmVtb3Zlcy5mb3JFYWNoKGF0dHIgPT4gY3VycmVudEVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyKSlcbiAgICAgIG5ld1NldHMuZm9yRWFjaCgoW2F0dHIsIHZhbF0pID0+IGN1cnJlbnRFbC5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsKSlcbiAgICAgIHJldHVybiBbbmV3U2V0cywgbmV3UmVtb3Zlc11cbiAgICB9KVxuICB9LFxuXG4gIGhhc0FsbENsYXNzZXMoZWwsIGNsYXNzZXMpeyByZXR1cm4gY2xhc3Nlcy5ldmVyeShuYW1lID0+IGVsLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSkgfSxcblxuICBpc1RvZ2dsZWRPdXQoZWwsIG91dENsYXNzZXMpe1xuICAgIHJldHVybiAhdGhpcy5pc1Zpc2libGUoZWwpIHx8IHRoaXMuaGFzQWxsQ2xhc3NlcyhlbCwgb3V0Q2xhc3NlcylcbiAgfSxcblxuICBmaWx0ZXJUb0Vscyhzb3VyY2VFbCwge3RvfSl7XG4gICAgcmV0dXJuIHRvID8gRE9NLmFsbChkb2N1bWVudCwgdG8pIDogW3NvdXJjZUVsXVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEpTXG4iLCAiaW1wb3J0IHtcbiAgQkVGT1JFX1VOTE9BRF9MT0FERVJfVElNRU9VVCxcbiAgQ0hFQ0tBQkxFX0lOUFVUUyxcbiAgQ09OU0VDVVRJVkVfUkVMT0FEUyxcbiAgUEhYX0FVVE9fUkVDT1ZFUixcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX0NPTk5FQ1RFRF9DTEFTUyxcbiAgUEhYX0RJU0FCTEVfV0lUSCxcbiAgUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFLFxuICBQSFhfRElTQUJMRUQsXG4gIFBIWF9ESVNDT05ORUNURURfQ0xBU1MsXG4gIFBIWF9FVkVOVF9DTEFTU0VTLFxuICBQSFhfRVJST1JfQ0xBU1MsXG4gIFBIWF9GRUVEQkFDS19GT1IsXG4gIFBIWF9IQVNfU1VCTUlUVEVELFxuICBQSFhfSE9PSyxcbiAgUEhYX1BBR0VfTE9BRElORyxcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1BST0dSRVNTLFxuICBQSFhfUkVBRE9OTFksXG4gIFBIWF9SRUYsXG4gIFBIWF9SRUZfU1JDLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1NFU1NJT04sXG4gIFBIWF9TVEFUSUMsXG4gIFBIWF9UUkFDS19TVEFUSUMsXG4gIFBIWF9UUkFDS19VUExPQURTLFxuICBQSFhfVVBEQVRFLFxuICBQSFhfVVBMT0FEX1JFRixcbiAgUEhYX1ZJRVdfU0VMRUNUT1IsXG4gIFBVU0hfVElNRU9VVCxcbiAgUEhYX01BSU4sXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb25lLFxuICBjbG9zZXN0UGh4QmluZGluZyxcbiAgaXNFbXB0eSxcbiAgaXNFcXVhbE9iaixcbiAgbG9nRXJyb3IsXG4gIG1heWJlLFxuICBpc0NpZCxcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBET01QYXRjaCBmcm9tIFwiLi9kb21fcGF0Y2hcIlxuaW1wb3J0IExpdmVVcGxvYWRlciBmcm9tIFwiLi9saXZlX3VwbG9hZGVyXCJcbmltcG9ydCBSZW5kZXJlZCBmcm9tIFwiLi9yZW5kZXJlZFwiXG5pbXBvcnQgVmlld0hvb2sgZnJvbSBcIi4vdmlld19ob29rXCJcbmltcG9ydCBKUyBmcm9tIFwiLi9qc1wiXG5cbmxldCBzZXJpYWxpemVGb3JtID0gKGZvcm0sIG1ldGEsIG9ubHlOYW1lcyA9IFtdKSA9PiB7XG4gIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKVxuICBsZXQgdG9SZW1vdmUgPSBbXVxuXG4gIGZvcm1EYXRhLmZvckVhY2goKHZhbCwga2V5LCBfaW5kZXgpID0+IHtcbiAgICBpZih2YWwgaW5zdGFuY2VvZiBGaWxlKXsgdG9SZW1vdmUucHVzaChrZXkpIH1cbiAgfSlcblxuICAvLyBDbGVhbnVwIGFmdGVyIGJ1aWxkaW5nIGZpbGVEYXRhXG4gIHRvUmVtb3ZlLmZvckVhY2goa2V5ID0+IGZvcm1EYXRhLmRlbGV0ZShrZXkpKVxuXG4gIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgZm9yKGxldCBba2V5LCB2YWxdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSl7XG4gICAgaWYob25seU5hbWVzLmxlbmd0aCA9PT0gMCB8fCBvbmx5TmFtZXMuaW5kZXhPZihrZXkpID49IDApe1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXksIHZhbClcbiAgICB9XG4gIH1cbiAgZm9yKGxldCBtZXRhS2V5IGluIG1ldGEpeyBwYXJhbXMuYXBwZW5kKG1ldGFLZXksIG1ldGFbbWV0YUtleV0pIH1cblxuICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKClcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7XG4gIGNvbnN0cnVjdG9yKGVsLCBsaXZlU29ja2V0LCBwYXJlbnRWaWV3LCBmbGFzaCl7XG4gICAgdGhpcy5saXZlU29ja2V0ID0gbGl2ZVNvY2tldFxuICAgIHRoaXMuZmxhc2ggPSBmbGFzaFxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50Vmlld1xuICAgIHRoaXMucm9vdCA9IHBhcmVudFZpZXcgPyBwYXJlbnRWaWV3LnJvb3QgOiB0aGlzXG4gICAgdGhpcy5lbCA9IGVsXG4gICAgdGhpcy5pZCA9IHRoaXMuZWwuaWRcbiAgICB0aGlzLnJlZiA9IDBcbiAgICB0aGlzLmNoaWxkSm9pbnMgPSAwXG4gICAgdGhpcy5sb2FkZXJUaW1lciA9IG51bGxcbiAgICB0aGlzLnBlbmRpbmdEaWZmcyA9IFtdXG4gICAgdGhpcy5wcnVuaW5nQ0lEcyA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdCA9IGZhbHNlXG4gICAgdGhpcy5ocmVmID0gbnVsbFxuICAgIHRoaXMuam9pbkNvdW50ID0gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5qb2luQ291bnQgLSAxIDogMFxuICAgIHRoaXMuam9pblBlbmRpbmcgPSB0cnVlXG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIHRoaXMuam9pbkNhbGxiYWNrID0gZnVuY3Rpb24ob25Eb25lKXsgb25Eb25lICYmIG9uRG9uZSgpIH1cbiAgICB0aGlzLnN0b3BDYWxsYmFjayA9IGZ1bmN0aW9uKCl7IH1cbiAgICB0aGlzLnBlbmRpbmdKb2luT3BzID0gdGhpcy5wYXJlbnQgPyBudWxsIDogW11cbiAgICB0aGlzLnZpZXdIb29rcyA9IHt9XG4gICAgdGhpcy51cGxvYWRlcnMgPSB7fVxuICAgIHRoaXMuZm9ybVN1Ym1pdHMgPSBbXVxuICAgIHRoaXMuY2hpbGRyZW4gPSB0aGlzLnBhcmVudCA/IG51bGwgOiB7fVxuICAgIHRoaXMucm9vdC5jaGlsZHJlblt0aGlzLmlkXSA9IHt9XG4gICAgdGhpcy5jaGFubmVsID0gdGhpcy5saXZlU29ja2V0LmNoYW5uZWwoYGx2OiR7dGhpcy5pZH1gLCAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWRpcmVjdDogdGhpcy5yZWRpcmVjdCA/IHRoaXMuaHJlZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsOiB0aGlzLnJlZGlyZWN0ID8gdW5kZWZpbmVkIDogdGhpcy5ocmVmIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zOiB0aGlzLmNvbm5lY3RQYXJhbXMoKSxcbiAgICAgICAgc2Vzc2lvbjogdGhpcy5nZXRTZXNzaW9uKCksXG4gICAgICAgIHN0YXRpYzogdGhpcy5nZXRTdGF0aWMoKSxcbiAgICAgICAgZmxhc2g6IHRoaXMuZmxhc2hcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuc2hvd0xvYWRlcih0aGlzLmxpdmVTb2NrZXQubG9hZGVyVGltZW91dClcbiAgICB0aGlzLmJpbmRDaGFubmVsKClcbiAgfVxuXG4gIHNldEhyZWYoaHJlZil7IHRoaXMuaHJlZiA9IGhyZWYgfVxuXG4gIHNldFJlZGlyZWN0KGhyZWYpe1xuICAgIHRoaXMucmVkaXJlY3QgPSB0cnVlXG4gICAgdGhpcy5ocmVmID0gaHJlZlxuICB9XG5cbiAgaXNNYWluKCl7IHJldHVybiB0aGlzLmVsLmhhc0F0dHJpYnV0ZShQSFhfTUFJTikgfVxuXG4gIGNvbm5lY3RQYXJhbXMoKXtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5saXZlU29ja2V0LnBhcmFtcyh0aGlzLmVsKVxuICAgIGxldCBtYW5pZmVzdCA9XG4gICAgICBET00uYWxsKGRvY3VtZW50LCBgWyR7dGhpcy5iaW5kaW5nKFBIWF9UUkFDS19TVEFUSUMpfV1gKVxuICAgICAgICAubWFwKG5vZGUgPT4gbm9kZS5zcmMgfHwgbm9kZS5ocmVmKS5maWx0ZXIodXJsID0+IHR5cGVvZiAodXJsKSA9PT0gXCJzdHJpbmdcIilcblxuICAgIGlmKG1hbmlmZXN0Lmxlbmd0aCA+IDApeyBwYXJhbXNbXCJfdHJhY2tfc3RhdGljXCJdID0gbWFuaWZlc3QgfVxuICAgIHBhcmFtc1tcIl9tb3VudHNcIl0gPSB0aGlzLmpvaW5Db3VudFxuXG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgaXNDb25uZWN0ZWQoKXsgcmV0dXJuIHRoaXMuY2hhbm5lbC5jYW5QdXNoKCkgfVxuXG4gIGdldFNlc3Npb24oKXsgcmV0dXJuIHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSB9XG5cbiAgZ2V0U3RhdGljKCl7XG4gICAgbGV0IHZhbCA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9TVEFUSUMpXG4gICAgcmV0dXJuIHZhbCA9PT0gXCJcIiA/IG51bGwgOiB2YWxcbiAgfVxuXG4gIGRlc3Ryb3koY2FsbGJhY2sgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgdGhpcy5kZXN0cm95QWxsQ2hpbGRyZW4oKVxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgIGRlbGV0ZSB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1cbiAgICBpZih0aGlzLnBhcmVudCl7IGRlbGV0ZSB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5wYXJlbnQuaWRdW3RoaXMuaWRdIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkZXJUaW1lcilcbiAgICBsZXQgb25GaW5pc2hlZCA9ICgpID0+IHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3Mpe1xuICAgICAgICB0aGlzLmRlc3Ryb3lIb29rKHRoaXMudmlld0hvb2tzW2lkXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBET00ubWFya1BoeENoaWxkRGVzdHJveWVkKHRoaXMuZWwpXG5cbiAgICB0aGlzLmxvZyhcImRlc3Ryb3llZFwiLCAoKSA9PiBbXCJ0aGUgY2hpbGQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnRcIl0pXG4gICAgdGhpcy5jaGFubmVsLmxlYXZlKClcbiAgICAgIC5yZWNlaXZlKFwib2tcIiwgb25GaW5pc2hlZClcbiAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgb25GaW5pc2hlZClcbiAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCBvbkZpbmlzaGVkKVxuICB9XG5cbiAgc2V0Q29udGFpbmVyQ2xhc3NlcyguLi5jbGFzc2VzKXtcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICBQSFhfQ09OTkVDVEVEX0NMQVNTLFxuICAgICAgUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUyxcbiAgICAgIFBIWF9FUlJPUl9DTEFTU1xuICAgIClcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NlcylcbiAgfVxuXG4gIHNob3dMb2FkZXIodGltZW91dCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgaWYodGltZW91dCl7XG4gICAgICB0aGlzLmxvYWRlclRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dMb2FkZXIoKSwgdGltZW91dClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yKGxldCBpZCBpbiB0aGlzLnZpZXdIb29rcyl7IHRoaXMudmlld0hvb2tzW2lkXS5fX2Rpc2Nvbm5lY3RlZCgpIH1cbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xhc3NlcyhQSFhfRElTQ09OTkVDVEVEX0NMQVNTKVxuICAgIH1cbiAgfVxuXG4gIGhpZGVMb2FkZXIoKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkZXJUaW1lcilcbiAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0NPTk5FQ1RFRF9DTEFTUylcbiAgfVxuXG4gIHRyaWdnZXJSZWNvbm5lY3RlZCgpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3MpeyB0aGlzLnZpZXdIb29rc1tpZF0uX19yZWNvbm5lY3RlZCgpIH1cbiAgfVxuXG4gIGxvZyhraW5kLCBtc2dDYWxsYmFjayl7XG4gICAgdGhpcy5saXZlU29ja2V0LmxvZyh0aGlzLCBraW5kLCBtc2dDYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lID0gZnVuY3Rpb24oKXt9KXtcbiAgICB0aGlzLmxpdmVTb2NrZXQudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpXG4gIH1cblxuICB3aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgY2FsbGJhY2spe1xuICAgIGlmKHBoeFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHBoeFRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpe1xuICAgICAgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5vd25lcihwaHhUYXJnZXQsIHZpZXcgPT4gY2FsbGJhY2sodmlldywgcGh4VGFyZ2V0KSlcbiAgICB9XG5cbiAgICBpZihpc0NpZChwaHhUYXJnZXQpKXtcbiAgICAgIGxldCB0YXJnZXRzID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBwaHhUYXJnZXQpXG4gICAgICBpZih0YXJnZXRzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm91bmQgbWF0Y2hpbmcgcGh4LXRhcmdldCBvZiAke3BoeFRhcmdldH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcywgcGFyc2VJbnQocGh4VGFyZ2V0KSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhcmdldHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGh4VGFyZ2V0KSlcbiAgICAgIGlmKHRhcmdldHMubGVuZ3RoID09PSAwKXsgbG9nRXJyb3IoYG5vdGhpbmcgZm91bmQgbWF0Y2hpbmcgdGhlIHBoeC10YXJnZXQgc2VsZWN0b3IgXCIke3BoeFRhcmdldH1cImApIH1cbiAgICAgIHRhcmdldHMuZm9yRWFjaCh0YXJnZXQgPT4gdGhpcy5saXZlU29ja2V0Lm93bmVyKHRhcmdldCwgdmlldyA9PiBjYWxsYmFjayh2aWV3LCB0YXJnZXQpKSlcbiAgICB9XG4gIH1cblxuICBhcHBseURpZmYodHlwZSwgcmF3RGlmZiwgY2FsbGJhY2spe1xuICAgIHRoaXMubG9nKHR5cGUsICgpID0+IFtcIlwiLCBjbG9uZShyYXdEaWZmKV0pXG4gICAgbGV0IHtkaWZmLCByZXBseSwgZXZlbnRzLCB0aXRsZX0gPSBSZW5kZXJlZC5leHRyYWN0KHJhd0RpZmYpXG4gICAgaWYodGl0bGUpeyBET00ucHV0VGl0bGUodGl0bGUpIH1cblxuICAgIGNhbGxiYWNrKHtkaWZmLCByZXBseSwgZXZlbnRzfSlcbiAgICByZXR1cm4gcmVwbHlcbiAgfVxuXG4gIG9uSm9pbihyZXNwKXtcbiAgICBsZXQge3JlbmRlcmVkLCBjb250YWluZXJ9ID0gcmVzcFxuICAgIGlmKGNvbnRhaW5lcil7XG4gICAgICBsZXQgW3RhZywgYXR0cnNdID0gY29udGFpbmVyXG4gICAgICB0aGlzLmVsID0gRE9NLnJlcGxhY2VSb290Q29udGFpbmVyKHRoaXMuZWwsIHRhZywgYXR0cnMpXG4gICAgfVxuICAgIHRoaXMuY2hpbGRKb2lucyA9IDBcbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMuZmxhc2ggPSBudWxsXG5cbiAgICBCcm93c2VyLmRyb3BMb2NhbCh0aGlzLmxpdmVTb2NrZXQubG9jYWxTdG9yYWdlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIENPTlNFQ1VUSVZFX1JFTE9BRFMpXG4gICAgdGhpcy5hcHBseURpZmYoXCJtb3VudFwiLCByZW5kZXJlZCwgKHtkaWZmLCBldmVudHN9KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gbmV3IFJlbmRlcmVkKHRoaXMuaWQsIGRpZmYpXG4gICAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyQ29udGFpbmVyKG51bGwsIFwiam9pblwiKVxuICAgICAgdGhpcy5kcm9wUGVuZGluZ1JlZnMoKVxuICAgICAgbGV0IGZvcm1zID0gdGhpcy5mb3Jtc0ZvclJlY292ZXJ5KGh0bWwpXG4gICAgICB0aGlzLmpvaW5Db3VudCsrXG5cbiAgICAgIGlmKGZvcm1zLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3Jtcy5mb3JFYWNoKChbZm9ybSwgbmV3Rm9ybSwgbmV3Q2lkXSwgaSkgPT4ge1xuICAgICAgICAgIHRoaXMucHVzaEZvcm1SZWNvdmVyeShmb3JtLCBuZXdDaWQsIHJlc3AgPT4ge1xuICAgICAgICAgICAgaWYoaSA9PT0gZm9ybXMubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICAgIHRoaXMub25Kb2luQ29tcGxldGUocmVzcCwgaHRtbCwgZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uSm9pbkNvbXBsZXRlKHJlc3AsIGh0bWwsIGV2ZW50cylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZHJvcFBlbmRpbmdSZWZzKCl7XG4gICAgRE9NLmFsbChkb2N1bWVudCwgYFske1BIWF9SRUZfU1JDfT1cIiR7dGhpcy5pZH1cIl1bJHtQSFhfUkVGfV1gLCBlbCA9PiB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVGX1NSQylcbiAgICB9KVxuICB9XG5cbiAgb25Kb2luQ29tcGxldGUoe2xpdmVfcGF0Y2h9LCBodG1sLCBldmVudHMpe1xuICAgIC8vIEluIG9yZGVyIHRvIHByb3ZpZGUgYSBiZXR0ZXIgZXhwZXJpZW5jZSwgd2Ugd2FudCB0byBqb2luXG4gICAgLy8gYWxsIExpdmVWaWV3cyBmaXJzdCBhbmQgb25seSB0aGVuIGFwcGx5IHRoZWlyIHBhdGNoZXMuXG4gICAgaWYodGhpcy5qb2luQ291bnQgPiAxIHx8ICh0aGlzLnBhcmVudCAmJiAhdGhpcy5wYXJlbnQuaXNKb2luUGVuZGluZygpKSl7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpXG4gICAgfVxuXG4gICAgLy8gT25lIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSBuZWVkIHRvIGZpbmQgcGh4Q2hpbGRyZW5cbiAgICAvLyBpbiB0aGUgaHRtbCBmcmFnbWVudCwgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgRE9NLiBUaGUgZnJhZ21lbnRcbiAgICAvLyBhbHNvIGRvZXMgbm90IGluY2x1ZGUgUEhYX1NUQVRJQywgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgZnJvbVxuICAgIC8vIHRoZSBET00uXG4gICAgbGV0IG5ld0NoaWxkcmVuID0gRE9NLmZpbmRQaHhDaGlsZHJlbkluRnJhZ21lbnQoaHRtbCwgdGhpcy5pZCkuZmlsdGVyKHRvRWwgPT4ge1xuICAgICAgbGV0IGZyb21FbCA9IHRvRWwuaWQgJiYgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke3RvRWwuaWR9XCJdYClcbiAgICAgIGxldCBwaHhTdGF0aWMgPSBmcm9tRWwgJiYgZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfU1RBVElDKVxuICAgICAgaWYocGh4U3RhdGljKXsgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1NUQVRJQywgcGh4U3RhdGljKSB9XG4gICAgICByZXR1cm4gdGhpcy5qb2luQ2hpbGQodG9FbClcbiAgICB9KVxuXG4gICAgaWYobmV3Q2hpbGRyZW4ubGVuZ3RoID09PSAwKXtcbiAgICAgIGlmKHRoaXMucGFyZW50KXtcbiAgICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKV0pXG4gICAgICAgIHRoaXMucGFyZW50LmFja0pvaW4odGhpcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25BbGxDaGlsZEpvaW5zQ29tcGxldGUoKVxuICAgICAgICB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKV0pXG4gICAgfVxuICB9XG5cbiAgYXR0YWNoVHJ1ZURvY0VsKCl7XG4gICAgdGhpcy5lbCA9IERPTS5ieUlkKHRoaXMuaWQpXG4gICAgdGhpcy5lbC5zZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQsIHRoaXMucm9vdC5pZClcbiAgfVxuXG4gIGFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyl7XG4gICAgdGhpcy5hdHRhY2hUcnVlRG9jRWwoKVxuICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBudWxsKVxuICAgIHBhdGNoLm1hcmtQcnVuYWJsZUNvbnRlbnRGb3JSZW1vdmFsKClcbiAgICB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgZmFsc2UpXG4gICAgdGhpcy5qb2luTmV3Q2hpbGRyZW4oKVxuICAgIERPTS5hbGwodGhpcy5lbCwgYFske3RoaXMuYmluZGluZyhQSFhfSE9PSyl9XSwgW2RhdGEtcGh4LSR7UEhYX0hPT0t9XWAsIGhvb2tFbCA9PiB7XG4gICAgICBsZXQgaG9vayA9IHRoaXMuYWRkSG9vayhob29rRWwpXG4gICAgICBpZihob29rKXsgaG9vay5fX21vdW50ZWQoKSB9XG4gICAgfSlcblxuICAgIHRoaXMuam9pblBlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMubGl2ZVNvY2tldC5kaXNwYXRjaEV2ZW50cyhldmVudHMpXG4gICAgdGhpcy5hcHBseVBlbmRpbmdVcGRhdGVzKClcblxuICAgIGlmKGxpdmVfcGF0Y2gpe1xuICAgICAgbGV0IHtraW5kLCB0b30gPSBsaXZlX3BhdGNoXG4gICAgICB0aGlzLmxpdmVTb2NrZXQuaGlzdG9yeVBhdGNoKHRvLCBraW5kKVxuICAgIH1cbiAgICB0aGlzLmhpZGVMb2FkZXIoKVxuICAgIGlmKHRoaXMuam9pbkNvdW50ID4gMSl7IHRoaXMudHJpZ2dlclJlY29ubmVjdGVkKCkgfVxuICAgIHRoaXMuc3RvcENhbGxiYWNrKClcbiAgfVxuXG4gIHRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGZyb21FbCwgdG9FbCl7XG4gICAgdGhpcy5saXZlU29ja2V0LnRyaWdnZXJET00oXCJvbkJlZm9yZUVsVXBkYXRlZFwiLCBbZnJvbUVsLCB0b0VsXSlcbiAgICBsZXQgaG9vayA9IHRoaXMuZ2V0SG9vayhmcm9tRWwpXG4gICAgbGV0IGlzSWdub3JlZCA9IGhvb2sgJiYgRE9NLmlzSWdub3JlZChmcm9tRWwsIHRoaXMuYmluZGluZyhQSFhfVVBEQVRFKSlcbiAgICBpZihob29rICYmICFmcm9tRWwuaXNFcXVhbE5vZGUodG9FbCkgJiYgIShpc0lnbm9yZWQgJiYgaXNFcXVhbE9iaihmcm9tRWwuZGF0YXNldCwgdG9FbC5kYXRhc2V0KSkpe1xuICAgICAgaG9vay5fX2JlZm9yZVVwZGF0ZSgpXG4gICAgICByZXR1cm4gaG9va1xuICAgIH1cbiAgfVxuXG4gIHBlcmZvcm1QYXRjaChwYXRjaCwgcHJ1bmVDaWRzKXtcbiAgICBsZXQgcmVtb3ZlZEVscyA9IFtdXG4gICAgbGV0IHBoeENoaWxkcmVuQWRkZWQgPSBmYWxzZVxuICAgIGxldCB1cGRhdGVkSG9va0lkcyA9IG5ldyBTZXQoKVxuXG4gICAgcGF0Y2guYWZ0ZXIoXCJhZGRlZFwiLCBlbCA9PiB7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQudHJpZ2dlckRPTShcIm9uTm9kZUFkZGVkXCIsIFtlbF0pXG5cbiAgICAgIGxldCBuZXdIb29rID0gdGhpcy5hZGRIb29rKGVsKVxuICAgICAgaWYobmV3SG9vayl7IG5ld0hvb2suX19tb3VudGVkKCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcInBoeENoaWxkQWRkZWRcIiwgZWwgPT4ge1xuICAgICAgaWYoRE9NLmlzUGh4U3RpY2t5KGVsKSl7XG4gICAgICAgIHRoaXMubGl2ZVNvY2tldC5qb2luUm9vdFZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBoeENoaWxkcmVuQWRkZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHBhdGNoLmJlZm9yZShcInVwZGF0ZWRcIiwgKGZyb21FbCwgdG9FbCkgPT4ge1xuICAgICAgbGV0IGhvb2sgPSB0aGlzLnRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGZyb21FbCwgdG9FbClcbiAgICAgIGlmKGhvb2speyB1cGRhdGVkSG9va0lkcy5hZGQoZnJvbUVsLmlkKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwidXBkYXRlZFwiLCBlbCA9PiB7XG4gICAgICBpZih1cGRhdGVkSG9va0lkcy5oYXMoZWwuaWQpKXsgdGhpcy5nZXRIb29rKGVsKS5fX3VwZGF0ZWQoKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwiZGlzY2FyZGVkXCIsIChlbCkgPT4ge1xuICAgICAgaWYoZWwubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKXsgcmVtb3ZlZEVscy5wdXNoKGVsKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwidHJhbnNpdGlvbnNEaXNjYXJkZWRcIiwgZWxzID0+IHRoaXMuYWZ0ZXJFbGVtZW50c1JlbW92ZWQoZWxzLCBwcnVuZUNpZHMpKVxuICAgIHBhdGNoLnBlcmZvcm0oKVxuICAgIHRoaXMuYWZ0ZXJFbGVtZW50c1JlbW92ZWQocmVtb3ZlZEVscywgcHJ1bmVDaWRzKVxuXG4gICAgcmV0dXJuIHBoeENoaWxkcmVuQWRkZWRcbiAgfVxuXG4gIGFmdGVyRWxlbWVudHNSZW1vdmVkKGVsZW1lbnRzLCBwcnVuZUNpZHMpe1xuICAgIGxldCBkZXN0cm95ZWRDSURzID0gW11cbiAgICBlbGVtZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBsZXQgY29tcG9uZW50cyA9IERPTS5hbGwocGFyZW50LCBgWyR7UEhYX0NPTVBPTkVOVH1dYClcbiAgICAgIGxldCBob29rcyA9IERPTS5hbGwocGFyZW50LCBgWyR7dGhpcy5iaW5kaW5nKFBIWF9IT09LKX1dYClcbiAgICAgIGNvbXBvbmVudHMuY29uY2F0KHBhcmVudCkuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGxldCBjaWQgPSB0aGlzLmNvbXBvbmVudElEKGVsKVxuICAgICAgICBpZihpc0NpZChjaWQpICYmIGRlc3Ryb3llZENJRHMuaW5kZXhPZihjaWQpID09PSAtMSl7IGRlc3Ryb3llZENJRHMucHVzaChjaWQpIH1cbiAgICAgIH0pXG4gICAgICBob29rcy5jb25jYXQocGFyZW50KS5mb3JFYWNoKGhvb2tFbCA9PiB7XG4gICAgICAgIGxldCBob29rID0gdGhpcy5nZXRIb29rKGhvb2tFbClcbiAgICAgICAgaG9vayAmJiB0aGlzLmRlc3Ryb3lIb29rKGhvb2spXG4gICAgICB9KVxuICAgIH0pXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcnVuZUNpZHMgb24gam9pbnMuIE90aGVyd2lzZSwgaW4gY2FzZSBvZlxuICAgIC8vIHJlam9pbnMsIHdlIG1heSBub3RpZnkgY2lkcyB0aGF0IG5vIGxvbmdlciBiZWxvbmcgdG8gdGhlXG4gICAgLy8gY3VycmVudCBMaXZlVmlldyB0byBiZSByZW1vdmVkLlxuICAgIGlmKHBydW5lQ2lkcyl7XG4gICAgICB0aGlzLm1heWJlUHVzaENvbXBvbmVudHNEZXN0cm95ZWQoZGVzdHJveWVkQ0lEcylcbiAgICB9XG4gIH1cblxuICBqb2luTmV3Q2hpbGRyZW4oKXtcbiAgICBET00uZmluZFBoeENoaWxkcmVuKHRoaXMuZWwsIHRoaXMuaWQpLmZvckVhY2goZWwgPT4gdGhpcy5qb2luQ2hpbGQoZWwpKVxuICB9XG5cbiAgZ2V0Q2hpbGRCeUlkKGlkKXsgcmV0dXJuIHRoaXMucm9vdC5jaGlsZHJlblt0aGlzLmlkXVtpZF0gfVxuXG4gIGdldERlc2NlbmRlbnRCeUVsKGVsKXtcbiAgICBpZihlbC5pZCA9PT0gdGhpcy5pZCl7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltlbC5nZXRBdHRyaWJ1dGUoUEhYX1BBUkVOVF9JRCldW2VsLmlkXVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lEZXNjZW5kZW50KGlkKXtcbiAgICBmb3IobGV0IHBhcmVudElkIGluIHRoaXMucm9vdC5jaGlsZHJlbil7XG4gICAgICBmb3IobGV0IGNoaWxkSWQgaW4gdGhpcy5yb290LmNoaWxkcmVuW3BhcmVudElkXSl7XG4gICAgICAgIGlmKGNoaWxkSWQgPT09IGlkKXsgcmV0dXJuIHRoaXMucm9vdC5jaGlsZHJlbltwYXJlbnRJZF1bY2hpbGRJZF0uZGVzdHJveSgpIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBqb2luQ2hpbGQoZWwpe1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRCeUlkKGVsLmlkKVxuICAgIGlmKCFjaGlsZCl7XG4gICAgICBsZXQgdmlldyA9IG5ldyBWaWV3KGVsLCB0aGlzLmxpdmVTb2NrZXQsIHRoaXMpXG4gICAgICB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1bdmlldy5pZF0gPSB2aWV3XG4gICAgICB2aWV3LmpvaW4oKVxuICAgICAgdGhpcy5jaGlsZEpvaW5zKytcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgaXNKb2luUGVuZGluZygpeyByZXR1cm4gdGhpcy5qb2luUGVuZGluZyB9XG5cbiAgYWNrSm9pbihfY2hpbGQpe1xuICAgIHRoaXMuY2hpbGRKb2lucy0tXG5cbiAgICBpZih0aGlzLmNoaWxkSm9pbnMgPT09IDApe1xuICAgICAgaWYodGhpcy5wYXJlbnQpe1xuICAgICAgICB0aGlzLnBhcmVudC5hY2tKb2luKHRoaXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQWxsQ2hpbGRKb2luc0NvbXBsZXRlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkFsbENoaWxkSm9pbnNDb21wbGV0ZSgpe1xuICAgIHRoaXMuam9pbkNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ0pvaW5PcHMuZm9yRWFjaCgoW3ZpZXcsIG9wXSkgPT4ge1xuICAgICAgICBpZighdmlldy5pc0Rlc3Ryb3llZCgpKXsgb3AoKSB9XG4gICAgICB9KVxuICAgICAgdGhpcy5wZW5kaW5nSm9pbk9wcyA9IFtdXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZShkaWZmLCBldmVudHMpe1xuICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpIHx8ICh0aGlzLmxpdmVTb2NrZXQuaGFzUGVuZGluZ0xpbmsoKSAmJiAhRE9NLmlzUGh4U3RpY2t5KHRoaXMuZWwpKSl7XG4gICAgICByZXR1cm4gdGhpcy5wZW5kaW5nRGlmZnMucHVzaCh7ZGlmZiwgZXZlbnRzfSlcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVkLm1lcmdlRGlmZihkaWZmKVxuICAgIGxldCBwaHhDaGlsZHJlbkFkZGVkID0gZmFsc2VcblxuICAgIC8vIFdoZW4gdGhlIGRpZmYgb25seSBjb250YWlucyBjb21wb25lbnQgZGlmZnMsIHRoZW4gd2FsayBjb21wb25lbnRzXG4gICAgLy8gYW5kIHBhdGNoIG9ubHkgdGhlIHBhcmVudCBjb21wb25lbnQgY29udGFpbmVycyBmb3VuZCBpbiB0aGUgZGlmZi5cbiAgICAvLyBPdGhlcndpc2UsIHBhdGNoIGVudGlyZSBMViBjb250YWluZXIuXG4gICAgaWYodGhpcy5yZW5kZXJlZC5pc0NvbXBvbmVudE9ubHlEaWZmKGRpZmYpKXtcbiAgICAgIHRoaXMubGl2ZVNvY2tldC50aW1lKFwiY29tcG9uZW50IHBhdGNoIGNvbXBsZXRlXCIsICgpID0+IHtcbiAgICAgICAgbGV0IHBhcmVudENpZHMgPSBET00uZmluZFBhcmVudENJRHModGhpcy5lbCwgdGhpcy5yZW5kZXJlZC5jb21wb25lbnRDSURzKGRpZmYpKVxuICAgICAgICBwYXJlbnRDaWRzLmZvckVhY2gocGFyZW50Q0lEID0+IHtcbiAgICAgICAgICBpZih0aGlzLmNvbXBvbmVudFBhdGNoKHRoaXMucmVuZGVyZWQuZ2V0Q29tcG9uZW50KGRpZmYsIHBhcmVudENJRCksIHBhcmVudENJRCkpeyBwaHhDaGlsZHJlbkFkZGVkID0gdHJ1ZSB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZighaXNFbXB0eShkaWZmKSl7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQudGltZShcImZ1bGwgcGF0Y2ggY29tcGxldGVcIiwgKCkgPT4ge1xuICAgICAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyQ29udGFpbmVyKGRpZmYsIFwidXBkYXRlXCIpXG4gICAgICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBudWxsKVxuICAgICAgICBwaHhDaGlsZHJlbkFkZGVkID0gdGhpcy5wZXJmb3JtUGF0Y2gocGF0Y2gsIHRydWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMubGl2ZVNvY2tldC5kaXNwYXRjaEV2ZW50cyhldmVudHMpXG4gICAgaWYocGh4Q2hpbGRyZW5BZGRlZCl7IHRoaXMuam9pbk5ld0NoaWxkcmVuKCkgfVxuICB9XG5cbiAgcmVuZGVyQ29udGFpbmVyKGRpZmYsIGtpbmQpe1xuICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQudGltZShgdG9TdHJpbmcgZGlmZiAoJHtraW5kfSlgLCAoKSA9PiB7XG4gICAgICBsZXQgdGFnID0gdGhpcy5lbC50YWdOYW1lXG4gICAgICAvLyBEb24ndCBza2lwIGFueSBjb21wb25lbnQgaW4gdGhlIGRpZmYgbm9yIGFueSBtYXJrZWQgYXMgcHJ1bmVkXG4gICAgICAvLyAoYXMgdGhleSBtYXkgaGF2ZSBiZWVuIGFkZGVkIGJhY2spXG4gICAgICBsZXQgY2lkcyA9IGRpZmYgPyB0aGlzLnJlbmRlcmVkLmNvbXBvbmVudENJRHMoZGlmZikuY29uY2F0KHRoaXMucHJ1bmluZ0NJRHMpIDogbnVsbFxuICAgICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlcmVkLnRvU3RyaW5nKGNpZHMpXG4gICAgICByZXR1cm4gYDwke3RhZ30+JHtodG1sfTwvJHt0YWd9PmBcbiAgICB9KVxuICB9XG5cbiAgY29tcG9uZW50UGF0Y2goZGlmZiwgY2lkKXtcbiAgICBpZihpc0VtcHR5KGRpZmYpKSByZXR1cm4gZmFsc2VcbiAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyZWQuY29tcG9uZW50VG9TdHJpbmcoY2lkKVxuICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBjaWQpXG4gICAgbGV0IGNoaWxkcmVuQWRkZWQgPSB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgdHJ1ZSlcbiAgICByZXR1cm4gY2hpbGRyZW5BZGRlZFxuICB9XG5cbiAgZ2V0SG9vayhlbCl7IHJldHVybiB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoZWwpXSB9XG5cbiAgYWRkSG9vayhlbCl7XG4gICAgaWYoVmlld0hvb2suZWxlbWVudElEKGVsKSB8fCAhZWwuZ2V0QXR0cmlidXRlKXsgcmV0dXJuIH1cbiAgICBsZXQgaG9va05hbWUgPSBlbC5nZXRBdHRyaWJ1dGUoYGRhdGEtcGh4LSR7UEhYX0hPT0t9YCkgfHwgZWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfSE9PSykpXG4gICAgaWYoaG9va05hbWUgJiYgIXRoaXMub3duc0VsZW1lbnQoZWwpKXsgcmV0dXJuIH1cbiAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5saXZlU29ja2V0LmdldEhvb2tDYWxsYmFja3MoaG9va05hbWUpXG5cbiAgICBpZihjYWxsYmFja3Mpe1xuICAgICAgaWYoIWVsLmlkKXsgbG9nRXJyb3IoYG5vIERPTSBJRCBmb3IgaG9vayBcIiR7aG9va05hbWV9XCIuIEhvb2tzIHJlcXVpcmUgYSB1bmlxdWUgSUQgb24gZWFjaCBlbGVtZW50LmAsIGVsKSB9XG4gICAgICBsZXQgaG9vayA9IG5ldyBWaWV3SG9vayh0aGlzLCBlbCwgY2FsbGJhY2tzKVxuICAgICAgdGhpcy52aWV3SG9va3NbVmlld0hvb2suZWxlbWVudElEKGhvb2suZWwpXSA9IGhvb2tcbiAgICAgIHJldHVybiBob29rXG4gICAgfSBlbHNlIGlmKGhvb2tOYW1lICE9PSBudWxsKXtcbiAgICAgIGxvZ0Vycm9yKGB1bmtub3duIGhvb2sgZm91bmQgZm9yIFwiJHtob29rTmFtZX1cImAsIGVsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lIb29rKGhvb2spe1xuICAgIGhvb2suX19kZXN0cm95ZWQoKVxuICAgIGhvb2suX19jbGVhbnVwX18oKVxuICAgIGRlbGV0ZSB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoaG9vay5lbCldXG4gIH1cblxuICBhcHBseVBlbmRpbmdVcGRhdGVzKCl7XG4gICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICB9XG5cbiAgb25DaGFubmVsKGV2ZW50LCBjYil7XG4gICAgdGhpcy5saXZlU29ja2V0Lm9uQ2hhbm5lbCh0aGlzLmNoYW5uZWwsIGV2ZW50LCByZXNwID0+IHtcbiAgICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpKXtcbiAgICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IGNiKHJlc3ApXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXF1ZXN0RE9NVXBkYXRlKCgpID0+IGNiKHJlc3ApKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBiaW5kQ2hhbm5lbCgpe1xuICAgIC8vIFRoZSBkaWZmIGV2ZW50IHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSByZWd1bGFyIHVwZGF0ZSBvcGVyYXRpb25zLlxuICAgIC8vIEFsbCBvdGhlciBvcGVyYXRpb25zIGFyZSBxdWV1ZWQgdG8gYmUgYXBwbGllZCBvbmx5IGFmdGVyIGpvaW4uXG4gICAgdGhpcy5saXZlU29ja2V0Lm9uQ2hhbm5lbCh0aGlzLmNoYW5uZWwsIFwiZGlmZlwiLCAocmF3RGlmZikgPT4ge1xuICAgICAgdGhpcy5saXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RGlmZihcInVwZGF0ZVwiLCByYXdEaWZmLCAoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgICB9KVxuICAgIH0pXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJyZWRpcmVjdFwiLCAoe3RvLCBmbGFzaH0pID0+IHRoaXMub25SZWRpcmVjdCh7dG8sIGZsYXNofSkpXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJsaXZlX3BhdGNoXCIsIChyZWRpcikgPT4gdGhpcy5vbkxpdmVQYXRjaChyZWRpcikpXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJsaXZlX3JlZGlyZWN0XCIsIChyZWRpcikgPT4gdGhpcy5vbkxpdmVSZWRpcmVjdChyZWRpcikpXG4gICAgdGhpcy5jaGFubmVsLm9uRXJyb3IocmVhc29uID0+IHRoaXMub25FcnJvcihyZWFzb24pKVxuICAgIHRoaXMuY2hhbm5lbC5vbkNsb3NlKHJlYXNvbiA9PiB0aGlzLm9uQ2xvc2UocmVhc29uKSlcbiAgfVxuXG4gIGRlc3Ryb3lBbGxDaGlsZHJlbigpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdKXtcbiAgICAgIHRoaXMuZ2V0Q2hpbGRCeUlkKGlkKS5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICBvbkxpdmVSZWRpcmVjdChyZWRpcil7XG4gICAgbGV0IHt0bywga2luZCwgZmxhc2h9ID0gcmVkaXJcbiAgICBsZXQgdXJsID0gdGhpcy5leHBhbmRVUkwodG8pXG4gICAgdGhpcy5saXZlU29ja2V0Lmhpc3RvcnlSZWRpcmVjdCh1cmwsIGtpbmQsIGZsYXNoKVxuICB9XG5cbiAgb25MaXZlUGF0Y2gocmVkaXIpe1xuICAgIGxldCB7dG8sIGtpbmR9ID0gcmVkaXJcbiAgICB0aGlzLmhyZWYgPSB0aGlzLmV4cGFuZFVSTCh0bylcbiAgICB0aGlzLmxpdmVTb2NrZXQuaGlzdG9yeVBhdGNoKHRvLCBraW5kKVxuICB9XG5cbiAgZXhwYW5kVVJMKHRvKXtcbiAgICByZXR1cm4gdG8uc3RhcnRzV2l0aChcIi9cIikgPyBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fSR7dG99YCA6IHRvXG4gIH1cblxuICBvblJlZGlyZWN0KHt0bywgZmxhc2h9KXsgdGhpcy5saXZlU29ja2V0LnJlZGlyZWN0KHRvLCBmbGFzaCkgfVxuXG4gIGlzRGVzdHJveWVkKCl7IHJldHVybiB0aGlzLmRlc3Ryb3llZCB9XG5cbiAgam9pbihjYWxsYmFjayl7XG4gICAgaWYodGhpcy5pc01haW4oKSl7XG4gICAgICB0aGlzLnN0b3BDYWxsYmFjayA9IHRoaXMubGl2ZVNvY2tldC53aXRoUGFnZUxvYWRpbmcoe3RvOiB0aGlzLmhyZWYsIGtpbmQ6IFwiaW5pdGlhbFwifSlcbiAgICB9XG4gICAgdGhpcy5qb2luQ2FsbGJhY2sgPSAob25Eb25lKSA9PiB7XG4gICAgICBvbkRvbmUgPSBvbkRvbmUgfHwgZnVuY3Rpb24oKXt9XG4gICAgICBjYWxsYmFjayA/IGNhbGxiYWNrKHRoaXMuam9pbkNvdW50LCBvbkRvbmUpIDogb25Eb25lKClcbiAgICB9XG4gICAgdGhpcy5saXZlU29ja2V0LndyYXBQdXNoKHRoaXMsIHt0aW1lb3V0OiBmYWxzZX0sICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuam9pbigpXG4gICAgICAgIC5yZWNlaXZlKFwib2tcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgaWYoIXRoaXMuaXNEZXN0cm95ZWQoKSl7XG4gICAgICAgICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB0aGlzLm9uSm9pbihkYXRhKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgcmVzcCA9PiAhdGhpcy5pc0Rlc3Ryb3llZCgpICYmIHRoaXMub25Kb2luRXJyb3IocmVzcCkpXG4gICAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiAhdGhpcy5pc0Rlc3Ryb3llZCgpICYmIHRoaXMub25Kb2luRXJyb3Ioe3JlYXNvbjogXCJ0aW1lb3V0XCJ9KSlcbiAgICB9KVxuICB9XG5cbiAgb25Kb2luRXJyb3IocmVzcCl7XG4gICAgaWYocmVzcC5yZWFzb24gPT09IFwidW5hdXRob3JpemVkXCIgfHwgcmVzcC5yZWFzb24gPT09IFwic3RhbGVcIil7XG4gICAgICB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInVuYXV0aG9yaXplZCBsaXZlX3JlZGlyZWN0LiBGYWxsaW5nIGJhY2sgdG8gcGFnZSByZXF1ZXN0XCIsIHJlc3BdKVxuICAgICAgcmV0dXJuIHRoaXMub25SZWRpcmVjdCh7dG86IHRoaXMuaHJlZn0pXG4gICAgfVxuICAgIGlmKHJlc3AucmVkaXJlY3QgfHwgcmVzcC5saXZlX3JlZGlyZWN0KXtcbiAgICAgIHRoaXMuam9pblBlbmRpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5jaGFubmVsLmxlYXZlKClcbiAgICB9XG4gICAgaWYocmVzcC5yZWRpcmVjdCl7IHJldHVybiB0aGlzLm9uUmVkaXJlY3QocmVzcC5yZWRpcmVjdCkgfVxuICAgIGlmKHJlc3AubGl2ZV9yZWRpcmVjdCl7IHJldHVybiB0aGlzLm9uTGl2ZVJlZGlyZWN0KHJlc3AubGl2ZV9yZWRpcmVjdCkgfVxuICAgIHRoaXMubG9nKFwiZXJyb3JcIiwgKCkgPT4gW1widW5hYmxlIHRvIGpvaW5cIiwgcmVzcF0pXG4gICAgaWYodGhpcy5saXZlU29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLmxpdmVTb2NrZXQucmVsb2FkV2l0aEppdHRlcih0aGlzKSB9XG4gIH1cblxuICBvbkNsb3NlKHJlYXNvbil7XG4gICAgaWYodGhpcy5pc0Rlc3Ryb3llZCgpKXsgcmV0dXJuIH1cbiAgICBpZih0aGlzLmxpdmVTb2NrZXQuaGFzUGVuZGluZ0xpbmsoKSAmJiByZWFzb24gIT09IFwibGVhdmVcIil7XG4gICAgICByZXR1cm4gdGhpcy5saXZlU29ja2V0LnJlbG9hZFdpdGhKaXR0ZXIodGhpcylcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95QWxsQ2hpbGRyZW4oKVxuICAgIHRoaXMubGl2ZVNvY2tldC5kcm9wQWN0aXZlRWxlbWVudCh0aGlzKVxuICAgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIGJlIG51bGwgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTFcbiAgICBpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KXsgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCkgfVxuICAgIGlmKHRoaXMubGl2ZVNvY2tldC5pc1VubG9hZGVkKCkpe1xuICAgICAgdGhpcy5zaG93TG9hZGVyKEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvcihyZWFzb24pe1xuICAgIHRoaXMub25DbG9zZShyZWFzb24pXG4gICAgaWYodGhpcy5saXZlU29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInZpZXcgY3Jhc2hlZFwiLCByZWFzb25dKSB9XG4gICAgaWYoIXRoaXMubGl2ZVNvY2tldC5pc1VubG9hZGVkKCkpeyB0aGlzLmRpc3BsYXlFcnJvcigpIH1cbiAgfVxuXG4gIGRpc3BsYXlFcnJvcigpe1xuICAgIGlmKHRoaXMuaXNNYWluKCkpeyBET00uZGlzcGF0Y2hFdmVudCh3aW5kb3csIFwicGh4OnBhZ2UtbG9hZGluZy1zdGFydFwiLCB7ZGV0YWlsOiB7dG86IHRoaXMuaHJlZiwga2luZDogXCJlcnJvclwifX0pIH1cbiAgICB0aGlzLnNob3dMb2FkZXIoKVxuICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xhc3NlcyhQSFhfRElTQ09OTkVDVEVEX0NMQVNTLCBQSFhfRVJST1JfQ0xBU1MpXG4gIH1cblxuICBwdXNoV2l0aFJlcGx5KHJlZkdlbmVyYXRvciwgZXZlbnQsIHBheWxvYWQsIG9uUmVwbHkgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7IHJldHVybiB9XG5cbiAgICBsZXQgW3JlZiwgW2VsXSwgb3B0c10gPSByZWZHZW5lcmF0b3IgPyByZWZHZW5lcmF0b3IoKSA6IFtudWxsLCBbXSwge31dXG4gICAgbGV0IG9uTG9hZGluZ0RvbmUgPSBmdW5jdGlvbigpeyB9XG4gICAgaWYob3B0cy5wYWdlX2xvYWRpbmcgfHwgKGVsICYmIChlbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9QQUdFX0xPQURJTkcpKSAhPT0gbnVsbCkpKXtcbiAgICAgIG9uTG9hZGluZ0RvbmUgPSB0aGlzLmxpdmVTb2NrZXQud2l0aFBhZ2VMb2FkaW5nKHtraW5kOiBcImVsZW1lbnRcIiwgdGFyZ2V0OiBlbH0pXG4gICAgfVxuXG4gICAgaWYodHlwZW9mIChwYXlsb2FkLmNpZCkgIT09IFwibnVtYmVyXCIpeyBkZWxldGUgcGF5bG9hZC5jaWQgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxpdmVTb2NrZXQud3JhcFB1c2godGhpcywge3RpbWVvdXQ6IHRydWV9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwucHVzaChldmVudCwgcGF5bG9hZCwgUFVTSF9USU1FT1VUKS5yZWNlaXZlKFwib2tcIiwgcmVzcCA9PiB7XG4gICAgICAgICAgaWYocmVmICE9PSBudWxsKXsgdGhpcy51bmRvUmVmcyhyZWYpIH1cbiAgICAgICAgICBsZXQgZmluaXNoID0gKGhvb2tSZXBseSkgPT4ge1xuICAgICAgICAgICAgaWYocmVzcC5yZWRpcmVjdCl7IHRoaXMub25SZWRpcmVjdChyZXNwLnJlZGlyZWN0KSB9XG4gICAgICAgICAgICBpZihyZXNwLmxpdmVfcGF0Y2gpeyB0aGlzLm9uTGl2ZVBhdGNoKHJlc3AubGl2ZV9wYXRjaCkgfVxuICAgICAgICAgICAgaWYocmVzcC5saXZlX3JlZGlyZWN0KXsgdGhpcy5vbkxpdmVSZWRpcmVjdChyZXNwLmxpdmVfcmVkaXJlY3QpIH1cbiAgICAgICAgICAgIG9uTG9hZGluZ0RvbmUoKVxuICAgICAgICAgICAgb25SZXBseShyZXNwLCBob29rUmVwbHkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3AuZGlmZil7XG4gICAgICAgICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBob29rUmVwbHkgPSB0aGlzLmFwcGx5RGlmZihcInVwZGF0ZVwiLCByZXNwLmRpZmYsICh7ZGlmZiwgZXZlbnRzfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgZmluaXNoKGhvb2tSZXBseSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmlzaChudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgdW5kb1JlZnMocmVmKXtcbiAgICBET00uYWxsKGRvY3VtZW50LCBgWyR7UEhYX1JFRl9TUkN9PVwiJHt0aGlzLmlkfVwiXVske1BIWF9SRUZ9PVwiJHtyZWZ9XCJdYCwgZWwgPT4ge1xuICAgICAgbGV0IGRpc2FibGVkVmFsID0gZWwuZ2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFRClcbiAgICAgIC8vIHJlbW92ZSByZWZzXG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVGX1NSQylcbiAgICAgIC8vIHJlc3RvcmUgaW5wdXRzXG4gICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoUEhYX1JFQURPTkxZKSAhPT0gbnVsbCl7XG4gICAgICAgIGVsLnJlYWRPbmx5ID0gZmFsc2VcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9SRUFET05MWSlcbiAgICAgIH1cbiAgICAgIGlmKGRpc2FibGVkVmFsICE9PSBudWxsKXtcbiAgICAgICAgZWwuZGlzYWJsZWQgPSBkaXNhYmxlZFZhbCA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9ESVNBQkxFRClcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSBjbGFzc2VzXG4gICAgICBQSFhfRVZFTlRfQ0xBU1NFUy5mb3JFYWNoKGNsYXNzTmFtZSA9PiBET00ucmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkpXG4gICAgICAvLyByZXN0b3JlIGRpc2FibGVzXG4gICAgICBsZXQgZGlzYWJsZVJlc3RvcmUgPSBlbC5nZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFKVxuICAgICAgaWYoZGlzYWJsZVJlc3RvcmUgIT09IG51bGwpe1xuICAgICAgICBlbC5pbm5lclRleHQgPSBkaXNhYmxlUmVzdG9yZVxuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFKVxuICAgICAgfVxuICAgICAgbGV0IHRvRWwgPSBET00ucHJpdmF0ZShlbCwgUEhYX1JFRilcbiAgICAgIGlmKHRvRWwpe1xuICAgICAgICBsZXQgaG9vayA9IHRoaXMudHJpZ2dlckJlZm9yZVVwZGF0ZUhvb2soZWwsIHRvRWwpXG4gICAgICAgIERPTVBhdGNoLnBhdGNoRWwoZWwsIHRvRWwsIHRoaXMubGl2ZVNvY2tldC5nZXRBY3RpdmVFbGVtZW50KCkpXG4gICAgICAgIGlmKGhvb2speyBob29rLl9fdXBkYXRlZCgpIH1cbiAgICAgICAgRE9NLmRlbGV0ZVByaXZhdGUoZWwsIFBIWF9SRUYpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1dFJlZihlbGVtZW50cywgZXZlbnQsIG9wdHMgPSB7fSl7XG4gICAgbGV0IG5ld1JlZiA9IHRoaXMucmVmKytcbiAgICBsZXQgZGlzYWJsZVdpdGggPSB0aGlzLmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSClcbiAgICBpZihvcHRzLmxvYWRpbmcpeyBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdChET00uYWxsKGRvY3VtZW50LCBvcHRzLmxvYWRpbmcpKX1cblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChgcGh4LSR7ZXZlbnR9LWxvYWRpbmdgKVxuICAgICAgZWwuc2V0QXR0cmlidXRlKFBIWF9SRUYsIG5ld1JlZilcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShQSFhfUkVGX1NSQywgdGhpcy5lbC5pZClcbiAgICAgIGxldCBkaXNhYmxlVGV4dCA9IGVsLmdldEF0dHJpYnV0ZShkaXNhYmxlV2l0aClcbiAgICAgIGlmKGRpc2FibGVUZXh0ICE9PSBudWxsKXtcbiAgICAgICAgaWYoIWVsLmdldEF0dHJpYnV0ZShQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUpKXtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFLCBlbC5pbm5lclRleHQpXG4gICAgICAgIH1cbiAgICAgICAgaWYoZGlzYWJsZVRleHQgIT09IFwiXCIpeyBlbC5pbm5lclRleHQgPSBkaXNhYmxlVGV4dCB9XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gW25ld1JlZiwgZWxlbWVudHMsIG9wdHNdXG4gIH1cblxuICBjb21wb25lbnRJRChlbCl7XG4gICAgbGV0IGNpZCA9IGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVClcbiAgICByZXR1cm4gY2lkID8gcGFyc2VJbnQoY2lkKSA6IG51bGxcbiAgfVxuXG4gIHRhcmdldENvbXBvbmVudElEKHRhcmdldCwgdGFyZ2V0Q3R4LCBvcHRzID0ge30pe1xuICAgIGlmKGlzQ2lkKHRhcmdldEN0eCkpeyByZXR1cm4gdGFyZ2V0Q3R4IH1cblxuICAgIGxldCBjaWRPclNlbGVjdG9yID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJ0YXJnZXRcIikpXG4gICAgaWYoaXNDaWQoY2lkT3JTZWxlY3Rvcikpe1xuICAgICAgcmV0dXJuIHBhcnNlSW50KGNpZE9yU2VsZWN0b3IpXG4gICAgfSBlbHNlIGlmKHRhcmdldEN0eCAmJiAoY2lkT3JTZWxlY3RvciAhPT0gbnVsbCB8fCBvcHRzLnRhcmdldCkpe1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2VzdENvbXBvbmVudElEKHRhcmdldEN0eClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBjbG9zZXN0Q29tcG9uZW50SUQodGFyZ2V0Q3R4KXtcbiAgICBpZihpc0NpZCh0YXJnZXRDdHgpKXtcbiAgICAgIHJldHVybiB0YXJnZXRDdHhcbiAgICB9IGVsc2UgaWYodGFyZ2V0Q3R4KXtcbiAgICAgIHJldHVybiBtYXliZSh0YXJnZXRDdHguY2xvc2VzdChgWyR7UEhYX0NPTVBPTkVOVH1dYCksIGVsID0+IHRoaXMub3duc0VsZW1lbnQoZWwpICYmIHRoaXMuY29tcG9uZW50SUQoZWwpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHB1c2hIb29rRXZlbnQodGFyZ2V0Q3R4LCBldmVudCwgcGF5bG9hZCwgb25SZXBseSl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7XG4gICAgICB0aGlzLmxvZyhcImhvb2tcIiwgKCkgPT4gW1widW5hYmxlIHRvIHB1c2ggaG9vayBldmVudC4gTGl2ZVZpZXcgbm90IGNvbm5lY3RlZFwiLCBldmVudCwgcGF5bG9hZF0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgbGV0IFtyZWYsIGVscywgb3B0c10gPSB0aGlzLnB1dFJlZihbXSwgXCJob29rXCIpXG4gICAgdGhpcy5wdXNoV2l0aFJlcGx5KCgpID0+IFtyZWYsIGVscywgb3B0c10sIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogXCJob29rXCIsXG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB2YWx1ZTogcGF5bG9hZCxcbiAgICAgIGNpZDogdGhpcy5jbG9zZXN0Q29tcG9uZW50SUQodGFyZ2V0Q3R4KVxuICAgIH0sIChyZXNwLCByZXBseSkgPT4gb25SZXBseShyZXBseSwgcmVmKSlcblxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIGV4dHJhY3RNZXRhKGVsLCBtZXRhLCB2YWx1ZSl7XG4gICAgbGV0IHByZWZpeCA9IHRoaXMuYmluZGluZyhcInZhbHVlLVwiKVxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBlbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKCFtZXRhKXsgbWV0YSA9IHt9IH1cbiAgICAgIGxldCBuYW1lID0gZWwuYXR0cmlidXRlc1tpXS5uYW1lXG4gICAgICBpZihuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSl7IG1ldGFbbmFtZS5yZXBsYWNlKHByZWZpeCwgXCJcIildID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpIH1cbiAgICB9XG4gICAgaWYoZWwudmFsdWUgIT09IHVuZGVmaW5lZCl7XG4gICAgICBpZighbWV0YSl7IG1ldGEgPSB7fSB9XG4gICAgICBtZXRhLnZhbHVlID0gZWwudmFsdWVcblxuICAgICAgaWYoZWwudGFnTmFtZSA9PT0gXCJJTlBVVFwiICYmIENIRUNLQUJMRV9JTlBVVFMuaW5kZXhPZihlbC50eXBlKSA+PSAwICYmICFlbC5jaGVja2VkKXtcbiAgICAgICAgZGVsZXRlIG1ldGEudmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYodmFsdWUpe1xuICAgICAgaWYoIW1ldGEpeyBtZXRhID0ge30gfVxuICAgICAgZm9yKGxldCBrZXkgaW4gdmFsdWUpeyBtZXRhW2tleV0gPSB2YWx1ZVtrZXldIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ldGFcbiAgfVxuXG4gIHB1c2hFdmVudCh0eXBlLCBlbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgbWV0YSwgb3B0cyA9IHt9KXtcbiAgICB0aGlzLnB1c2hXaXRoUmVwbHkoKCkgPT4gdGhpcy5wdXRSZWYoW2VsXSwgdHlwZSwgb3B0cyksIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgIHZhbHVlOiB0aGlzLmV4dHJhY3RNZXRhKGVsLCBtZXRhLCBvcHRzLnZhbHVlKSxcbiAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChlbCwgdGFyZ2V0Q3R4LCBvcHRzKVxuICAgIH0pXG4gIH1cblxuICBwdXNoRmlsZVByb2dyZXNzKGZpbGVFbCwgZW50cnlSZWYsIHByb2dyZXNzLCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHRoaXMubGl2ZVNvY2tldC53aXRoaW5Pd25lcnMoZmlsZUVsLmZvcm0sICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgIHZpZXcucHVzaFdpdGhSZXBseShudWxsLCBcInByb2dyZXNzXCIsIHtcbiAgICAgICAgZXZlbnQ6IGZpbGVFbC5nZXRBdHRyaWJ1dGUodmlldy5iaW5kaW5nKFBIWF9QUk9HUkVTUykpLFxuICAgICAgICByZWY6IGZpbGVFbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpLFxuICAgICAgICBlbnRyeV9yZWY6IGVudHJ5UmVmLFxuICAgICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICAgIGNpZDogdmlldy50YXJnZXRDb21wb25lbnRJRChmaWxlRWwuZm9ybSwgdGFyZ2V0Q3R4KVxuICAgICAgfSwgb25SZXBseSlcbiAgICB9KVxuICB9XG5cbiAgcHVzaElucHV0KGlucHV0RWwsIHRhcmdldEN0eCwgZm9yY2VDaWQsIHBoeEV2ZW50LCBvcHRzLCBjYWxsYmFjayl7XG4gICAgbGV0IHVwbG9hZHNcbiAgICBsZXQgY2lkID0gaXNDaWQoZm9yY2VDaWQpID8gZm9yY2VDaWQgOiB0aGlzLnRhcmdldENvbXBvbmVudElEKGlucHV0RWwuZm9ybSwgdGFyZ2V0Q3R4KVxuICAgIGxldCByZWZHZW5lcmF0b3IgPSAoKSA9PiB0aGlzLnB1dFJlZihbaW5wdXRFbCwgaW5wdXRFbC5mb3JtXSwgXCJjaGFuZ2VcIiwgb3B0cylcbiAgICBsZXQgZm9ybURhdGFcbiAgICBpZihpbnB1dEVsLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIikpKXtcbiAgICAgIGZvcm1EYXRhID0gc2VyaWFsaXplRm9ybShpbnB1dEVsLmZvcm0sIHtfdGFyZ2V0OiBvcHRzLl90YXJnZXR9LCBbaW5wdXRFbC5uYW1lXSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGlucHV0RWwuZm9ybSwge190YXJnZXQ6IG9wdHMuX3RhcmdldH0pXG4gICAgfVxuICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGlucHV0RWwpICYmIGlucHV0RWwuZmlsZXMgJiYgaW5wdXRFbC5maWxlcy5sZW5ndGggPiAwKXtcbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKGlucHV0RWwsIEFycmF5LmZyb20oaW5wdXRFbC5maWxlcykpXG4gICAgfVxuICAgIHVwbG9hZHMgPSBMaXZlVXBsb2FkZXIuc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKVxuICAgIGxldCBldmVudCA9IHtcbiAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgZXZlbnQ6IHBoeEV2ZW50LFxuICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgdXBsb2FkczogdXBsb2FkcyxcbiAgICAgIGNpZDogY2lkXG4gICAgfVxuICAgIHRoaXMucHVzaFdpdGhSZXBseShyZWZHZW5lcmF0b3IsIFwiZXZlbnRcIiwgZXZlbnQsIHJlc3AgPT4ge1xuICAgICAgRE9NLnNob3dFcnJvcihpbnB1dEVsLCB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKSlcbiAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGlucHV0RWwpICYmIGlucHV0RWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtYXV0by11cGxvYWRcIikgIT09IG51bGwpe1xuICAgICAgICBpZihMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZXQgW3JlZiwgX2Vsc10gPSByZWZHZW5lcmF0b3IoKVxuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXMoaW5wdXRFbC5mb3JtLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCAoX3VwbG9hZHMpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlc3ApXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJBd2FpdGluZ1N1Ym1pdChpbnB1dEVsLmZvcm0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdHJpZ2dlckF3YWl0aW5nU3VibWl0KGZvcm1FbCl7XG4gICAgbGV0IGF3YWl0aW5nU3VibWl0ID0gdGhpcy5nZXRTY2hlZHVsZWRTdWJtaXQoZm9ybUVsKVxuICAgIGlmKGF3YWl0aW5nU3VibWl0KXtcbiAgICAgIGxldCBbX2VsLCBfcmVmLCBfb3B0cywgY2FsbGJhY2tdID0gYXdhaXRpbmdTdWJtaXRcbiAgICAgIHRoaXMuY2FuY2VsU3VibWl0KGZvcm1FbClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBnZXRTY2hlZHVsZWRTdWJtaXQoZm9ybUVsKXtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3VibWl0cy5maW5kKChbZWwsIF9yZWYsIF9vcHRzLCBfY2FsbGJhY2tdKSA9PiBlbC5pc1NhbWVOb2RlKGZvcm1FbCkpXG4gIH1cblxuICBzY2hlZHVsZVN1Ym1pdChmb3JtRWwsIHJlZiwgb3B0cywgY2FsbGJhY2spe1xuICAgIGlmKHRoaXMuZ2V0U2NoZWR1bGVkU3VibWl0KGZvcm1FbCkpeyByZXR1cm4gdHJ1ZSB9XG4gICAgdGhpcy5mb3JtU3VibWl0cy5wdXNoKFtmb3JtRWwsIHJlZiwgb3B0cywgY2FsbGJhY2tdKVxuICB9XG5cbiAgY2FuY2VsU3VibWl0KGZvcm1FbCl7XG4gICAgdGhpcy5mb3JtU3VibWl0cyA9IHRoaXMuZm9ybVN1Ym1pdHMuZmlsdGVyKChbZWwsIHJlZiwgX2NhbGxiYWNrXSkgPT4ge1xuICAgICAgaWYoZWwuaXNTYW1lTm9kZShmb3JtRWwpKXtcbiAgICAgICAgdGhpcy51bmRvUmVmcyhyZWYpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHVzaEZvcm1TdWJtaXQoZm9ybUVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzLCBvblJlcGx5KXtcbiAgICBsZXQgZmlsdGVySWdub3JlZCA9IGVsID0+IHtcbiAgICAgIGxldCB1c2VySWdub3JlZCA9IGNsb3Nlc3RQaHhCaW5kaW5nKGVsLCBgJHt0aGlzLmJpbmRpbmcoUEhYX1VQREFURSl9PWlnbm9yZWAsIGVsLmZvcm0pXG4gICAgICByZXR1cm4gISh1c2VySWdub3JlZCB8fCBjbG9zZXN0UGh4QmluZGluZyhlbCwgXCJkYXRhLXBoeC11cGRhdGU9aWdub3JlXCIsIGVsLmZvcm0pKVxuICAgIH1cbiAgICBsZXQgZmlsdGVyRGlzYWJsZXMgPSBlbCA9PiB7XG4gICAgICByZXR1cm4gZWwuaGFzQXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfRElTQUJMRV9XSVRIKSlcbiAgICB9XG4gICAgbGV0IGZpbHRlckJ1dHRvbiA9IGVsID0+IGVsLnRhZ05hbWUgPT0gXCJCVVRUT05cIlxuXG4gICAgbGV0IGZpbHRlcklucHV0ID0gZWwgPT4gW1wiSU5QVVRcIiwgXCJURVhUQVJFQVwiLCBcIlNFTEVDVFwiXS5pbmNsdWRlcyhlbC50YWdOYW1lKVxuXG4gICAgbGV0IHJlZkdlbmVyYXRvciA9ICgpID0+IHtcbiAgICAgIGxldCBmb3JtRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbC5lbGVtZW50cylcbiAgICAgIGxldCBkaXNhYmxlcyA9IGZvcm1FbGVtZW50cy5maWx0ZXIoZmlsdGVyRGlzYWJsZXMpXG4gICAgICBsZXQgYnV0dG9ucyA9IGZvcm1FbGVtZW50cy5maWx0ZXIoZmlsdGVyQnV0dG9uKS5maWx0ZXIoZmlsdGVySWdub3JlZClcbiAgICAgIGxldCBpbnB1dHMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlcklucHV0KS5maWx0ZXIoZmlsdGVySWdub3JlZClcblxuICAgICAgYnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVELCBidXR0b24uZGlzYWJsZWQpXG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWVcbiAgICAgIH0pXG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShQSFhfUkVBRE9OTFksIGlucHV0LnJlYWRPbmx5KVxuICAgICAgICBpbnB1dC5yZWFkT25seSA9IHRydWVcbiAgICAgICAgaWYoaW5wdXQuZmlsZXMpe1xuICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShQSFhfRElTQUJMRUQsIGlucHV0LmRpc2FibGVkKVxuICAgICAgICAgIGlucHV0LmRpc2FibGVkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgZm9ybUVsLnNldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX1BBR0VfTE9BRElORyksIFwiXCIpXG4gICAgICByZXR1cm4gdGhpcy5wdXRSZWYoW2Zvcm1FbF0uY29uY2F0KGRpc2FibGVzKS5jb25jYXQoYnV0dG9ucykuY29uY2F0KGlucHV0cyksIFwic3VibWl0XCIsIG9wdHMpXG4gICAgfVxuXG4gICAgbGV0IGNpZCA9IHRoaXMudGFyZ2V0Q29tcG9uZW50SUQoZm9ybUVsLCB0YXJnZXRDdHgpXG4gICAgaWYoTGl2ZVVwbG9hZGVyLmhhc1VwbG9hZHNJblByb2dyZXNzKGZvcm1FbCkpe1xuICAgICAgbGV0IFtyZWYsIF9lbHNdID0gcmVmR2VuZXJhdG9yKClcbiAgICAgIGxldCBwdXNoID0gKCkgPT4gdGhpcy5wdXNoRm9ybVN1Ym1pdChmb3JtRWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIG9wdHMsIG9uUmVwbHkpXG4gICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVN1Ym1pdChmb3JtRWwsIHJlZiwgb3B0cywgcHVzaClcbiAgICB9IGVsc2UgaWYoTGl2ZVVwbG9hZGVyLmlucHV0c0F3YWl0aW5nUHJlZmxpZ2h0KGZvcm1FbCkubGVuZ3RoID4gMCl7XG4gICAgICBsZXQgW3JlZiwgZWxzXSA9IHJlZkdlbmVyYXRvcigpXG4gICAgICBsZXQgcHJveHlSZWZHZW4gPSAoKSA9PiBbcmVmLCBlbHMsIG9wdHNdXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzKGZvcm1FbCwgdGFyZ2V0Q3R4LCByZWYsIGNpZCwgKF91cGxvYWRzKSA9PiB7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IHNlcmlhbGl6ZUZvcm0oZm9ybUVsLCB7fSlcbiAgICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KHByb3h5UmVmR2VuLCBcImV2ZW50XCIsIHtcbiAgICAgICAgICB0eXBlOiBcImZvcm1cIixcbiAgICAgICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgICAgIGNpZDogY2lkXG4gICAgICAgIH0sIG9uUmVwbHkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGZvcm1FbCwge30pXG4gICAgICB0aGlzLnB1c2hXaXRoUmVwbHkocmVmR2VuZXJhdG9yLCBcImV2ZW50XCIsIHtcbiAgICAgICAgdHlwZTogXCJmb3JtXCIsXG4gICAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgICBjaWQ6IGNpZFxuICAgICAgfSwgb25SZXBseSlcbiAgICB9XG4gIH1cblxuICB1cGxvYWRGaWxlcyhmb3JtRWwsIHRhcmdldEN0eCwgcmVmLCBjaWQsIG9uQ29tcGxldGUpe1xuICAgIGxldCBqb2luQ291bnRBdFVwbG9hZCA9IHRoaXMuam9pbkNvdW50XG4gICAgbGV0IGlucHV0RWxzID0gTGl2ZVVwbG9hZGVyLmFjdGl2ZUZpbGVJbnB1dHMoZm9ybUVsKVxuICAgIGxldCBudW1GaWxlSW5wdXRzSW5Qcm9ncmVzcyA9IGlucHV0RWxzLmxlbmd0aFxuXG4gICAgLy8gZ2V0IGVhY2ggZmlsZSBpbnB1dFxuICAgIGlucHV0RWxzLmZvckVhY2goaW5wdXRFbCA9PiB7XG4gICAgICBsZXQgdXBsb2FkZXIgPSBuZXcgTGl2ZVVwbG9hZGVyKGlucHV0RWwsIHRoaXMsICgpID0+IHtcbiAgICAgICAgbnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MtLVxuICAgICAgICBpZihudW1GaWxlSW5wdXRzSW5Qcm9ncmVzcyA9PT0gMCl7IG9uQ29tcGxldGUoKSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGxvYWRlcnNbaW5wdXRFbF0gPSB1cGxvYWRlclxuICAgICAgbGV0IGVudHJpZXMgPSB1cGxvYWRlci5lbnRyaWVzKCkubWFwKGVudHJ5ID0+IGVudHJ5LnRvUHJlZmxpZ2h0UGF5bG9hZCgpKVxuXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgcmVmOiBpbnB1dEVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRiksXG4gICAgICAgIGVudHJpZXM6IGVudHJpZXMsXG4gICAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChpbnB1dEVsLmZvcm0sIHRhcmdldEN0eClcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW1wic2VuZGluZyBwcmVmbGlnaHQgcmVxdWVzdFwiLCBwYXlsb2FkXSlcblxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiYWxsb3dfdXBsb2FkXCIsIHBheWxvYWQsIHJlc3AgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcInVwbG9hZFwiLCAoKSA9PiBbXCJnb3QgcHJlZmxpZ2h0IHJlc3BvbnNlXCIsIHJlc3BdKVxuICAgICAgICBpZihyZXNwLmVycm9yKXtcbiAgICAgICAgICB0aGlzLnVuZG9SZWZzKHJlZilcbiAgICAgICAgICBsZXQgW2VudHJ5X3JlZiwgcmVhc29uXSA9IHJlc3AuZXJyb3JcbiAgICAgICAgICB0aGlzLmxvZyhcInVwbG9hZFwiLCAoKSA9PiBbYGVycm9yIGZvciBlbnRyeSAke2VudHJ5X3JlZn1gLCByZWFzb25dKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBvbkVycm9yID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwub25FcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmKHRoaXMuam9pbkNvdW50ID09PSBqb2luQ291bnRBdFVwbG9hZCl7IGNhbGxiYWNrKCkgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdXBsb2FkZXIuaW5pdEFkYXB0ZXJVcGxvYWQocmVzcCwgb25FcnJvciwgdGhpcy5saXZlU29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXNPckJsb2JzKXtcbiAgICBsZXQgaW5wdXRzID0gRE9NLmZpbmRVcGxvYWRJbnB1dHModGhpcy5lbCkuZmlsdGVyKGVsID0+IGVsLm5hbWUgPT09IG5hbWUpXG4gICAgaWYoaW5wdXRzLmxlbmd0aCA9PT0gMCl7IGxvZ0Vycm9yKGBubyBsaXZlIGZpbGUgaW5wdXRzIGZvdW5kIG1hdGNoaW5nIHRoZSBuYW1lIFwiJHtuYW1lfVwiYCkgfVxuICAgIGVsc2UgaWYoaW5wdXRzLmxlbmd0aCA+IDEpeyBsb2dFcnJvcihgZHVwbGljYXRlIGxpdmUgZmlsZSBpbnB1dHMgZm91bmQgbWF0Y2hpbmcgdGhlIG5hbWUgXCIke25hbWV9XCJgKSB9XG4gICAgZWxzZSB7IERPTS5kaXNwYXRjaEV2ZW50KGlucHV0c1swXSwgUEhYX1RSQUNLX1VQTE9BRFMsIHtkZXRhaWw6IHtmaWxlczogZmlsZXNPckJsb2JzfX0pIH1cbiAgfVxuXG4gIHB1c2hGb3JtUmVjb3ZlcnkoZm9ybSwgbmV3Q2lkLCBjYWxsYmFjayl7XG4gICAgdGhpcy5saXZlU29ja2V0LndpdGhpbk93bmVycyhmb3JtLCAodmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSBmb3JtLmVsZW1lbnRzWzBdXG4gICAgICBsZXQgcGh4RXZlbnQgPSBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0FVVE9fUkVDT1ZFUikpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcImNoYW5nZVwiKSlcblxuICAgICAgSlMuZXhlYyhcImNoYW5nZVwiLCBwaHhFdmVudCwgdmlldywgaW5wdXQsIFtcInB1c2hcIiwge190YXJnZXQ6IGlucHV0Lm5hbWUsIG5ld0NpZDogbmV3Q2lkLCBjYWxsYmFjazogY2FsbGJhY2t9XSlcbiAgICB9KVxuICB9XG5cbiAgcHVzaExpbmtQYXRjaChocmVmLCB0YXJnZXRFbCwgY2FsbGJhY2spe1xuICAgIGxldCBsaW5rUmVmID0gdGhpcy5saXZlU29ja2V0LnNldFBlbmRpbmdMaW5rKGhyZWYpXG4gICAgbGV0IHJlZkdlbiA9IHRhcmdldEVsID8gKCkgPT4gdGhpcy5wdXRSZWYoW3RhcmdldEVsXSwgXCJjbGlja1wiKSA6IG51bGxcbiAgICBsZXQgZmFsbGJhY2sgPSAoKSA9PiB0aGlzLmxpdmVTb2NrZXQucmVkaXJlY3Qod2luZG93LmxvY2F0aW9uLmhyZWYpXG5cbiAgICBsZXQgcHVzaCA9IHRoaXMucHVzaFdpdGhSZXBseShyZWZHZW4sIFwibGl2ZV9wYXRjaFwiLCB7dXJsOiBocmVmfSwgcmVzcCA9PiB7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmKHJlc3AubGlua19yZWRpcmVjdCl7XG4gICAgICAgICAgdGhpcy5saXZlU29ja2V0LnJlcGxhY2VNYWluKGhyZWYsIG51bGwsIGNhbGxiYWNrLCBsaW5rUmVmKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKHRoaXMubGl2ZVNvY2tldC5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7XG4gICAgICAgICAgICB0aGlzLmhyZWYgPSBocmVmXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXBwbHlQZW5kaW5nVXBkYXRlcygpXG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sobGlua1JlZilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYocHVzaCl7XG4gICAgICBwdXNoLnJlY2VpdmUoXCJ0aW1lb3V0XCIsIGZhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgZm9ybXNGb3JSZWNvdmVyeShodG1sKXtcbiAgICBpZih0aGlzLmpvaW5Db3VudCA9PT0gMCl7IHJldHVybiBbXSB9XG5cbiAgICBsZXQgcGh4Q2hhbmdlID0gdGhpcy5iaW5kaW5nKFwiY2hhbmdlXCIpXG4gICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpXG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIERPTS5hbGwodGhpcy5lbCwgYGZvcm1bJHtwaHhDaGFuZ2V9XWApXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmlkICYmIHRoaXMub3duc0VsZW1lbnQoZm9ybSkpXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmVsZW1lbnRzLmxlbmd0aCA+IDApXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0FVVE9fUkVDT1ZFUikpICE9PSBcImlnbm9yZVwiKVxuICAgICAgICAubWFwKGZvcm0gPT4ge1xuICAgICAgICAgIGxldCBuZXdGb3JtID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yKGBmb3JtW2lkPVwiJHtmb3JtLmlkfVwiXVske3BoeENoYW5nZX09XCIke2Zvcm0uZ2V0QXR0cmlidXRlKHBoeENoYW5nZSl9XCJdYClcbiAgICAgICAgICBpZihuZXdGb3JtKXtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybSwgbmV3Rm9ybSwgdGhpcy50YXJnZXRDb21wb25lbnRJRChuZXdGb3JtKV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtLCBudWxsLCBudWxsXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoW2Zvcm0sIG5ld0Zvcm0sIG5ld0NpZF0pID0+IG5ld0Zvcm0pXG4gICAgKVxuICB9XG5cbiAgbWF5YmVQdXNoQ29tcG9uZW50c0Rlc3Ryb3llZChkZXN0cm95ZWRDSURzKXtcbiAgICBsZXQgd2lsbERlc3Ryb3lDSURzID0gZGVzdHJveWVkQ0lEcy5maWx0ZXIoY2lkID0+IHtcbiAgICAgIHJldHVybiBET00uZmluZENvbXBvbmVudE5vZGVMaXN0KHRoaXMuZWwsIGNpZCkubGVuZ3RoID09PSAwXG4gICAgfSlcbiAgICBpZih3aWxsRGVzdHJveUNJRHMubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLnBydW5pbmdDSURzLnB1c2goLi4ud2lsbERlc3Ryb3lDSURzKVxuXG4gICAgICB0aGlzLnB1c2hXaXRoUmVwbHkobnVsbCwgXCJjaWRzX3dpbGxfZGVzdHJveVwiLCB7Y2lkczogd2lsbERlc3Ryb3lDSURzfSwgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgY2lkcyBhcmUgZWl0aGVyIGJhY2sgb24gdGhlIHBhZ2Ugb3IgdGhleSB3aWxsIGJlIGZ1bGx5IHJlbW92ZWQsXG4gICAgICAgIC8vIHNvIHdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBwcnVuaW5nQ0lEcy5cbiAgICAgICAgdGhpcy5wcnVuaW5nQ0lEcyA9IHRoaXMucHJ1bmluZ0NJRHMuZmlsdGVyKGNpZCA9PiB3aWxsRGVzdHJveUNJRHMuaW5kZXhPZihjaWQpICE9PSAtMSlcblxuICAgICAgICAvLyBTZWUgaWYgYW55IG9mIHRoZSBjaWRzIHdlIHdhbnRlZCB0byBkZXN0cm95IHdlcmUgYWRkZWQgYmFjayxcbiAgICAgICAgLy8gaWYgdGhleSB3ZXJlIGFkZGVkIGJhY2ssIHdlIGRvbid0IGFjdHVhbGx5IGRlc3Ryb3kgdGhlbS5cbiAgICAgICAgbGV0IGNvbXBsZXRlbHlEZXN0cm95Q0lEcyA9IHdpbGxEZXN0cm95Q0lEcy5maWx0ZXIoY2lkID0+IHtcbiAgICAgICAgICByZXR1cm4gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBjaWQpLmxlbmd0aCA9PT0gMFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKGNvbXBsZXRlbHlEZXN0cm95Q0lEcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICB0aGlzLnB1c2hXaXRoUmVwbHkobnVsbCwgXCJjaWRzX2Rlc3Ryb3llZFwiLCB7Y2lkczogY29tcGxldGVseURlc3Ryb3lDSURzfSwgKHJlc3ApID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWQucHJ1bmVDSURzKHJlc3AuY2lkcylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG93bnNFbGVtZW50KGVsKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpID09PSB0aGlzLmlkIHx8XG4gICAgICBtYXliZShlbC5jbG9zZXN0KFBIWF9WSUVXX1NFTEVDVE9SKSwgbm9kZSA9PiBub2RlLmlkKSA9PT0gdGhpcy5pZFxuICB9XG5cbiAgc3VibWl0Rm9ybShmb3JtLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzID0ge30pe1xuICAgIERPTS5wdXRQcml2YXRlKGZvcm0sIFBIWF9IQVNfU1VCTUlUVEVELCB0cnVlKVxuICAgIGxldCBwaHhGZWVkYmFjayA9IHRoaXMubGl2ZVNvY2tldC5iaW5kaW5nKFBIWF9GRUVEQkFDS19GT1IpXG4gICAgbGV0IGlucHV0cyA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICB0aGlzLmxpdmVTb2NrZXQuYmx1ckFjdGl2ZUVsZW1lbnQodGhpcylcbiAgICB0aGlzLnB1c2hGb3JtU3VibWl0KGZvcm0sIHRhcmdldEN0eCwgcGh4RXZlbnQsIG9wdHMsICgpID0+IHtcbiAgICAgIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IERPTS5zaG93RXJyb3IoaW5wdXQsIHBoeEZlZWRiYWNrKSlcbiAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXN0b3JlUHJldmlvdXNseUFjdGl2ZUZvY3VzKClcbiAgICB9KVxuICB9XG5cbiAgYmluZGluZyhraW5kKXsgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5iaW5kaW5nKGtpbmQpIH1cbn1cbiIsICIvKiogSW5pdGlhbGl6ZXMgdGhlIExpdmVTb2NrZXRcbiAqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGVuZFBvaW50IC0gVGhlIHN0cmluZyBXZWJTb2NrZXQgZW5kcG9pbnQsIGllLCBgXCJ3c3M6Ly9leGFtcGxlLmNvbS9saXZlXCJgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIi9saXZlXCJgIChpbmhlcml0ZWQgaG9zdCAmIHByb3RvY29sKVxuICogQHBhcmFtIHtQaG9lbml4LlNvY2tldH0gc29ja2V0IC0gdGhlIHJlcXVpcmVkIFBob2VuaXggU29ja2V0IGNsYXNzIGltcG9ydGVkIGZyb20gXCJwaG9lbml4XCIuIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBpbXBvcnQge1NvY2tldH0gZnJvbSBcInBob2VuaXhcIlxuICogICAgIGltcG9ydCB7TGl2ZVNvY2tldH0gZnJvbSBcInBob2VuaXhfbGl2ZV92aWV3XCJcbiAqICAgICBsZXQgbGl2ZVNvY2tldCA9IG5ldyBMaXZlU29ja2V0KFwiL2xpdmVcIiwgU29ja2V0LCB7Li4ufSlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbi4gT3V0c2lkZSBvZiBrZXlzIGxpc3RlZCBiZWxvdywgYWxsXG4gKiBjb25maWd1cmF0aW9uIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgUGhvZW5peCBTb2NrZXQgY29uc3RydWN0b3IuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMuZGVmYXVsdHNdIC0gVGhlIG9wdGlvbmFsIGRlZmF1bHRzIHRvIHVzZSBmb3IgdmFyaW91cyBiaW5kaW5ncyxcbiAqIHN1Y2ggYXMgYHBoeC1kZWJvdW5jZWAuIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqXG4gKiAgIC0gZGVib3VuY2UgLSB0aGUgbWlsbGlzZWNvbmQgcGh4LWRlYm91bmNlIHRpbWUuIERlZmF1bHRzIDMwMFxuICogICAtIHRocm90dGxlIC0gdGhlIG1pbGxpc2Vjb25kIHBoeC10aHJvdHRsZSB0aW1lLiBEZWZhdWx0cyAzMDBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5wYXJhbXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBwYXNzaW5nIGNvbm5lY3QgcGFyYW1zLlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIExpdmVWaWV3LiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgKGVsKSA9PiB7dmlldzogZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1teS12aWV3LW5hbWVcIiwgdG9rZW46IHdpbmRvdy5teVRva2VufVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5iaW5kaW5nUHJlZml4XSAtIFRoZSBvcHRpb25hbCBwcmVmaXggdG8gdXNlIGZvciBhbGwgcGh4IERPTSBhbm5vdGF0aW9ucy5cbiAqIERlZmF1bHRzIHRvIFwicGh4LVwiLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmhvb2tzXSAtIFRoZSBvcHRpb25hbCBvYmplY3QgZm9yIHJlZmVyZW5jaW5nIExpdmVWaWV3IGhvb2sgY2FsbGJhY2tzLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnVwbG9hZGVyc10gLSBUaGUgb3B0aW9uYWwgb2JqZWN0IGZvciByZWZlcmVuY2luZyBMaXZlVmlldyB1cGxvYWRlciBjYWxsYmFja3MuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLmxvYWRlclRpbWVvdXRdIC0gVGhlIG9wdGlvbmFsIGRlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhcHBseVxuICogbG9hZGluZyBzdGF0ZXMuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLm1heFJlbG9hZHNdIC0gVGhlIG1heGltdW0gcmVsb2FkcyBiZWZvcmUgZW50ZXJpbmcgZmFpbHNhZmUgbW9kZS5cbiAqIEBwYXJhbSB7aW50ZWdlcn0gW29wdHMucmVsb2FkSml0dGVyTWluXSAtIFRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiBub3JtYWwgcmVsb2FkIGF0dGVtcHRzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5yZWxvYWRKaXR0ZXJNYXhdIC0gVGhlIG1heGltdW0gdGltZSBiZXR3ZWVuIG5vcm1hbCByZWxvYWQgYXR0ZW1wdHMuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLmZhaWxzYWZlSml0dGVyXSAtIFRoZSB0aW1lIGJldHdlZW4gcmVsb2FkIGF0dGVtcHRzIGluIGZhaWxzYWZlIG1vZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52aWV3TG9nZ2VyXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiB0byBsb2cgZGVidWcgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlOlxuICpcbiAqICAgICAodmlldywga2luZCwgbXNnLCBvYmopID0+IGNvbnNvbGUubG9nKGAke3ZpZXcuaWR9ICR7a2luZH06ICR7bXNnfSAtIGAsIG9iailcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMubWV0YWRhdGFdIC0gVGhlIG9wdGlvbmFsIG9iamVjdCBtYXBwaW5nIGV2ZW50IG5hbWVzIHRvIGZ1bmN0aW9ucyBmb3JcbiAqIHBvcHVsYXRpbmcgZXZlbnQgbWV0YWRhdGEuIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBtZXRhZGF0YToge1xuICogICAgICAgY2xpY2s6IChlLCBlbCkgPT4ge1xuICogICAgICAgICByZXR1cm4ge1xuICogICAgICAgICAgIGN0cmxLZXk6IGUuY3RybEtleSxcbiAqICAgICAgICAgICBtZXRhS2V5OiBlLm1ldGFLZXksXG4gKiAgICAgICAgICAgZGV0YWlsOiBlLmRldGFpbCB8fCAxLFxuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAga2V5ZG93bjogKGUsIGVsKSA9PiB7XG4gKiAgICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgICAga2V5OiBlLmtleSxcbiAqICAgICAgICAgICBjdHJsS2V5OiBlLmN0cmxLZXksXG4gKiAgICAgICAgICAgbWV0YUtleTogZS5tZXRhS2V5LFxuICogICAgICAgICAgIHNoaWZ0S2V5OiBlLnNoaWZ0S2V5XG4gKiAgICAgICAgIH1cbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMuc2Vzc2lvblN0b3JhZ2VdIC0gQW4gb3B0aW9uYWwgU3RvcmFnZSBjb21wYXRpYmxlIG9iamVjdFxuICogVXNlZnVsIHdoZW4gTGl2ZVZpZXcgd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gYHNlc3Npb25TdG9yYWdlYC4gIEZvciBleGFtcGxlLCBUaGlzIGNvdWxkXG4gKiBoYXBwZW4gaWYgYSBzaXRlIGxvYWRzIGEgY3Jvc3MtZG9tYWluIExpdmVWaWV3IGluIGFuIGlmcmFtZS4gIEV4YW1wbGUgdXNhZ2U6XG4gKlxuICogICAgIGNsYXNzIEluTWVtb3J5U3RvcmFnZSB7XG4gKiAgICAgICBjb25zdHJ1Y3RvcigpIHsgdGhpcy5zdG9yYWdlID0ge30gfVxuICogICAgICAgZ2V0SXRlbShrZXlOYW1lKSB7IHJldHVybiB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gfVxuICogICAgICAgcmVtb3ZlSXRlbShrZXlOYW1lKSB7IGRlbGV0ZSB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gfVxuICogICAgICAgc2V0SXRlbShrZXlOYW1lLCBrZXlWYWx1ZSkgeyB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gPSBrZXlWYWx1ZSB9XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5sb2NhbFN0b3JhZ2VdIC0gQW4gb3B0aW9uYWwgU3RvcmFnZSBjb21wYXRpYmxlIG9iamVjdFxuICogVXNlZnVsIGZvciB3aGVuIExpdmVWaWV3IHdvbid0IGhhdmUgYWNjZXNzIHRvIGBsb2NhbFN0b3JhZ2VgLlxuICogU2VlIGBvcHRzLnNlc3Npb25TdG9yYWdlYCBmb3IgZXhhbXBsZXMuXG4qL1xuXG5pbXBvcnQge1xuICBCSU5ESU5HX1BSRUZJWCxcbiAgQ09OU0VDVVRJVkVfUkVMT0FEUyxcbiAgREVGQVVMVFMsXG4gIEZBSUxTQUZFX0pJVFRFUixcbiAgTE9BREVSX1RJTUVPVVQsXG4gIE1BWF9SRUxPQURTLFxuICBQSFhfREVCT1VOQ0UsXG4gIFBIWF9EUk9QX1RBUkdFVCxcbiAgUEhYX0hBU19GT0NVU0VELFxuICBQSFhfS0VZLFxuICBQSFhfTElOS19TVEFURSxcbiAgUEhYX0xJVkVfTElOSyxcbiAgUEhYX0xWX0RFQlVHLFxuICBQSFhfTFZfTEFURU5DWV9TSU0sXG4gIFBIWF9MVl9QUk9GSUxFLFxuICBQSFhfTUFJTixcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1ZJRVdfU0VMRUNUT1IsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfVEhST1RUTEUsXG4gIFBIWF9UUkFDS19VUExPQURTLFxuICBQSFhfU0VTU0lPTixcbiAgUkVMT0FEX0pJVFRFUl9NSU4sXG4gIFJFTE9BRF9KSVRURVJfTUFYLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBjbG9uZSxcbiAgY2xvc2VzdFBoeEJpbmRpbmcsXG4gIGNsb3N1cmUsXG4gIGRlYnVnLFxuICBpc09iamVjdCxcbiAgbWF5YmVcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBIb29rcyBmcm9tIFwiLi9ob29rc1wiXG5pbXBvcnQgTGl2ZVVwbG9hZGVyIGZyb20gXCIuL2xpdmVfdXBsb2FkZXJcIlxuaW1wb3J0IFZpZXcgZnJvbSBcIi4vdmlld1wiXG5pbXBvcnQgSlMgZnJvbSBcIi4vanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXZlU29ja2V0IHtcbiAgY29uc3RydWN0b3IodXJsLCBwaHhTb2NrZXQsIG9wdHMgPSB7fSl7XG4gICAgdGhpcy51bmxvYWRlZCA9IGZhbHNlXG4gICAgaWYoIXBoeFNvY2tldCB8fCBwaHhTb2NrZXQuY29uc3RydWN0b3IubmFtZSA9PT0gXCJPYmplY3RcIil7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgYSBwaG9lbml4IFNvY2tldCBtdXN0IGJlIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIExpdmVTb2NrZXQgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOlxuXG4gICAgICAgICAgaW1wb3J0IHtTb2NrZXR9IGZyb20gXCJwaG9lbml4XCJcbiAgICAgICAgICBpbXBvcnQge0xpdmVTb2NrZXR9IGZyb20gXCJwaG9lbml4X2xpdmVfdmlld1wiXG4gICAgICAgICAgbGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwgey4uLn0pXG4gICAgICBgKVxuICAgIH1cbiAgICB0aGlzLnNvY2tldCA9IG5ldyBwaHhTb2NrZXQodXJsLCBvcHRzKVxuICAgIHRoaXMuYmluZGluZ1ByZWZpeCA9IG9wdHMuYmluZGluZ1ByZWZpeCB8fCBCSU5ESU5HX1BSRUZJWFxuICAgIHRoaXMub3B0cyA9IG9wdHNcbiAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUob3B0cy5wYXJhbXMgfHwge30pXG4gICAgdGhpcy52aWV3TG9nZ2VyID0gb3B0cy52aWV3TG9nZ2VyXG4gICAgdGhpcy5tZXRhZGF0YUNhbGxiYWNrcyA9IG9wdHMubWV0YWRhdGEgfHwge31cbiAgICB0aGlzLmRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihjbG9uZShERUZBVUxUUyksIG9wdHMuZGVmYXVsdHMgfHwge30pXG4gICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMucHJldkFjdGl2ZSA9IG51bGxcbiAgICB0aGlzLnNpbGVuY2VkID0gZmFsc2VcbiAgICB0aGlzLm1haW4gPSBudWxsXG4gICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IG51bGxcbiAgICB0aGlzLmNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gbnVsbFxuICAgIHRoaXMubGlua1JlZiA9IDFcbiAgICB0aGlzLnJvb3RzID0ge31cbiAgICB0aGlzLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMucGVuZGluZ0xpbmsgPSBudWxsXG4gICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSBjbG9uZSh3aW5kb3cubG9jYXRpb24pXG4gICAgdGhpcy5ob29rcyA9IG9wdHMuaG9va3MgfHwge31cbiAgICB0aGlzLnVwbG9hZGVycyA9IG9wdHMudXBsb2FkZXJzIHx8IHt9XG4gICAgdGhpcy5sb2FkZXJUaW1lb3V0ID0gb3B0cy5sb2FkZXJUaW1lb3V0IHx8IExPQURFUl9USU1FT1VUXG4gICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIgPSBudWxsXG4gICAgdGhpcy5tYXhSZWxvYWRzID0gb3B0cy5tYXhSZWxvYWRzIHx8IE1BWF9SRUxPQURTXG4gICAgdGhpcy5yZWxvYWRKaXR0ZXJNaW4gPSBvcHRzLnJlbG9hZEppdHRlck1pbiB8fCBSRUxPQURfSklUVEVSX01JTlxuICAgIHRoaXMucmVsb2FkSml0dGVyTWF4ID0gb3B0cy5yZWxvYWRKaXR0ZXJNYXggfHwgUkVMT0FEX0pJVFRFUl9NQVhcbiAgICB0aGlzLmZhaWxzYWZlSml0dGVyID0gb3B0cy5mYWlsc2FmZUppdHRlciB8fCBGQUlMU0FGRV9KSVRURVJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IG9wdHMubG9jYWxTdG9yYWdlIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2VcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlID0gb3B0cy5zZXNzaW9uU3RvcmFnZSB8fCB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VcbiAgICB0aGlzLmJvdW5kVG9wTGV2ZWxFdmVudHMgPSBmYWxzZVxuICAgIHRoaXMuZG9tQ2FsbGJhY2tzID0gT2JqZWN0LmFzc2lnbih7b25Ob2RlQWRkZWQ6IGNsb3N1cmUoKSwgb25CZWZvcmVFbFVwZGF0ZWQ6IGNsb3N1cmUoKX0sIG9wdHMuZG9tIHx8IHt9KVxuICAgIHRoaXMudHJhbnNpdGlvbnMgPSBuZXcgVHJhbnNpdGlvblNldCgpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCBfZSA9PiB7XG4gICAgICB0aGlzLnVubG9hZGVkID0gdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuaXNVbmxvYWRlZCgpKXtcbiAgICAgICAgLy8gcmVsb2FkIHBhZ2UgaWYgYmVpbmcgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYW5kIGJyb3dzZXIgZG9lcyBub3QgZW1pdCBcInBhZ2VzaG93XCJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIHB1YmxpY1xuXG4gIGlzUHJvZmlsZUVuYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfUFJPRklMRSkgPT09IFwidHJ1ZVwiIH1cblxuICBpc0RlYnVnRW5hYmxlZCgpeyByZXR1cm4gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFBIWF9MVl9ERUJVRykgPT09IFwidHJ1ZVwiIH1cblxuICBpc0RlYnVnRGlzYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfREVCVUcpID09PSBcImZhbHNlXCIgfVxuXG4gIGVuYWJsZURlYnVnKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfREVCVUcsIFwidHJ1ZVwiKSB9XG5cbiAgZW5hYmxlUHJvZmlsaW5nKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfUFJPRklMRSwgXCJ0cnVlXCIpIH1cblxuICBkaXNhYmxlRGVidWcoKXsgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFBIWF9MVl9ERUJVRywgXCJmYWxzZVwiKSB9XG5cbiAgZGlzYWJsZVByb2ZpbGluZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oUEhYX0xWX1BST0ZJTEUpIH1cblxuICBlbmFibGVMYXRlbmN5U2ltKHVwcGVyQm91bmRNcyl7XG4gICAgdGhpcy5lbmFibGVEZWJ1ZygpXG4gICAgY29uc29sZS5sb2coXCJsYXRlbmN5IHNpbXVsYXRvciBlbmFibGVkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBicm93c2VyIHNlc3Npb24uIENhbGwgZGlzYWJsZUxhdGVuY3lTaW0oKSB0byBkaXNhYmxlXCIpXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSwgdXBwZXJCb3VuZE1zKVxuICB9XG5cbiAgZGlzYWJsZUxhdGVuY3lTaW0oKXsgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSkgfVxuXG4gIGdldExhdGVuY3lTaW0oKXtcbiAgICBsZXQgc3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSlcbiAgICByZXR1cm4gc3RyID8gcGFyc2VJbnQoc3RyKSA6IG51bGxcbiAgfVxuXG4gIGdldFNvY2tldCgpeyByZXR1cm4gdGhpcy5zb2NrZXQgfVxuXG4gIGNvbm5lY3QoKXtcbiAgICAvLyBlbmFibGUgZGVidWcgYnkgZGVmYXVsdCBpZiBvbiBsb2NhbGhvc3QgYW5kIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiICYmICF0aGlzLmlzRGVidWdEaXNhYmxlZCgpKXsgdGhpcy5lbmFibGVEZWJ1ZygpIH1cbiAgICBsZXQgZG9Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgaWYodGhpcy5qb2luUm9vdFZpZXdzKCkpe1xuICAgICAgICB0aGlzLmJpbmRUb3BMZXZlbEV2ZW50cygpXG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKVxuICAgICAgfSBlbHNlIGlmKHRoaXMubWFpbil7XG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKVxuICAgICAgfVxuICAgIH1cbiAgICBpZihbXCJjb21wbGV0ZVwiLCBcImxvYWRlZFwiLCBcImludGVyYWN0aXZlXCJdLmluZGV4T2YoZG9jdW1lbnQucmVhZHlTdGF0ZSkgPj0gMCl7XG4gICAgICBkb0Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiBkb0Nvbm5lY3QoKSlcbiAgICB9XG4gIH1cblxuICBkaXNjb25uZWN0KGNhbGxiYWNrKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIpXG4gICAgdGhpcy5zb2NrZXQuZGlzY29ubmVjdChjYWxsYmFjaylcbiAgfVxuXG4gIHJlcGxhY2VUcmFuc3BvcnQodHJhbnNwb3J0KXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIpXG4gICAgdGhpcy5zb2NrZXQucmVwbGFjZVRyYW5zcG9ydCh0cmFuc3BvcnQpXG4gICAgdGhpcy5jb25uZWN0KClcbiAgfVxuXG4gIGV4ZWNKUyhlbCwgZW5jb2RlZEpTLCBldmVudFR5cGUgPSBudWxsKXtcbiAgICB0aGlzLm93bmVyKGVsLCB2aWV3ID0+IEpTLmV4ZWMoZXZlbnRUeXBlLCBlbmNvZGVkSlMsIHZpZXcsIGVsKSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICB0cmlnZ2VyRE9NKGtpbmQsIGFyZ3MpeyB0aGlzLmRvbUNhbGxiYWNrc1traW5kXSguLi5hcmdzKSB9XG5cbiAgdGltZShuYW1lLCBmdW5jKXtcbiAgICBpZighdGhpcy5pc1Byb2ZpbGVFbmFibGVkKCkgfHwgIWNvbnNvbGUudGltZSl7IHJldHVybiBmdW5jKCkgfVxuICAgIGNvbnNvbGUudGltZShuYW1lKVxuICAgIGxldCByZXN1bHQgPSBmdW5jKClcbiAgICBjb25zb2xlLnRpbWVFbmQobmFtZSlcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsb2codmlldywga2luZCwgbXNnQ2FsbGJhY2spe1xuICAgIGlmKHRoaXMudmlld0xvZ2dlcil7XG4gICAgICBsZXQgW21zZywgb2JqXSA9IG1zZ0NhbGxiYWNrKClcbiAgICAgIHRoaXMudmlld0xvZ2dlcih2aWV3LCBraW5kLCBtc2csIG9iailcbiAgICB9IGVsc2UgaWYodGhpcy5pc0RlYnVnRW5hYmxlZCgpKXtcbiAgICAgIGxldCBbbXNnLCBvYmpdID0gbXNnQ2FsbGJhY2soKVxuICAgICAgZGVidWcodmlldywga2luZCwgbXNnLCBvYmopXG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdERPTVVwZGF0ZShjYWxsYmFjayl7XG4gICAgdGhpcy50cmFuc2l0aW9ucy5hZnRlcihjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lID0gZnVuY3Rpb24oKXt9KXtcbiAgICB0aGlzLnRyYW5zaXRpb25zLmFkZFRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lKVxuICB9XG5cbiAgb25DaGFubmVsKGNoYW5uZWwsIGV2ZW50LCBjYil7XG4gICAgY2hhbm5lbC5vbihldmVudCwgZGF0YSA9PiB7XG4gICAgICBsZXQgbGF0ZW5jeSA9IHRoaXMuZ2V0TGF0ZW5jeVNpbSgpXG4gICAgICBpZighbGF0ZW5jeSl7XG4gICAgICAgIGNiKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgc2ltdWxhdGluZyAke2xhdGVuY3l9bXMgb2YgbGF0ZW5jeSBmcm9tIHNlcnZlciB0byBjbGllbnRgKVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNiKGRhdGEpLCBsYXRlbmN5KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB3cmFwUHVzaCh2aWV3LCBvcHRzLCBwdXNoKXtcbiAgICBsZXQgbGF0ZW5jeSA9IHRoaXMuZ2V0TGF0ZW5jeVNpbSgpXG4gICAgbGV0IG9sZEpvaW5Db3VudCA9IHZpZXcuam9pbkNvdW50XG4gICAgaWYoIWxhdGVuY3kpe1xuICAgICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpICYmIG9wdHMudGltZW91dCl7XG4gICAgICAgIHJldHVybiBwdXNoKCkucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4ge1xuICAgICAgICAgIGlmKHZpZXcuam9pbkNvdW50ID09PSBvbGRKb2luQ291bnQgJiYgIXZpZXcuaXNEZXN0cm95ZWQoKSl7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZFdpdGhKaXR0ZXIodmlldywgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvZyh2aWV3LCBcInRpbWVvdXRcIiwgKCkgPT4gW1wicmVjZWl2ZWQgdGltZW91dCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggc2VydmVyLiBGYWxsaW5nIGJhY2sgdG8gaGFyZCByZWZyZXNoIGZvciByZWNvdmVyeVwiXSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHB1c2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBzaW11bGF0aW5nICR7bGF0ZW5jeX1tcyBvZiBsYXRlbmN5IGZyb20gY2xpZW50IHRvIHNlcnZlcmApXG4gICAgbGV0IGZha2VQdXNoID0ge1xuICAgICAgcmVjZWl2ZXM6IFtdLFxuICAgICAgcmVjZWl2ZShraW5kLCBjYil7IHRoaXMucmVjZWl2ZXMucHVzaChba2luZCwgY2JdKSB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYodmlldy5pc0Rlc3Ryb3llZCgpKXsgcmV0dXJuIH1cbiAgICAgIGZha2VQdXNoLnJlY2VpdmVzLnJlZHVjZSgoYWNjLCBba2luZCwgY2JdKSA9PiBhY2MucmVjZWl2ZShraW5kLCBjYiksIHB1c2goKSlcbiAgICB9LCBsYXRlbmN5KVxuICAgIHJldHVybiBmYWtlUHVzaFxuICB9XG5cbiAgcmVsb2FkV2l0aEppdHRlcih2aWV3LCBsb2cpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFdpdGhKaXR0ZXJUaW1lcilcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKVxuICAgIGxldCBtaW5NcyA9IHRoaXMucmVsb2FkSml0dGVyTWluXG4gICAgbGV0IG1heE1zID0gdGhpcy5yZWxvYWRKaXR0ZXJNYXhcbiAgICBsZXQgYWZ0ZXJNcyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXhNcyAtIG1pbk1zICsgMSkpICsgbWluTXNcbiAgICBsZXQgdHJpZXMgPSBCcm93c2VyLnVwZGF0ZUxvY2FsKHRoaXMubG9jYWxTdG9yYWdlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIENPTlNFQ1VUSVZFX1JFTE9BRFMsIDAsIGNvdW50ID0+IGNvdW50ICsgMSlcbiAgICBpZih0cmllcyA+IHRoaXMubWF4UmVsb2Fkcyl7XG4gICAgICBhZnRlck1zID0gdGhpcy5mYWlsc2FmZUppdHRlclxuICAgIH1cbiAgICB0aGlzLnJlbG9hZFdpdGhKaXR0ZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gaWYgdmlldyBoYXMgcmVjb3ZlcmVkLCBzdWNoIGFzIHRyYW5zcG9ydCByZXBsYWNlZCwgdGhlbiBjYW5jZWxcbiAgICAgIGlmKHZpZXcuaXNEZXN0cm95ZWQoKSB8fCB2aWV3LmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuICAgICAgdmlldy5kZXN0cm95KClcbiAgICAgIGxvZyA/IGxvZygpIDogdGhpcy5sb2codmlldywgXCJqb2luXCIsICgpID0+IFtgZW5jb3VudGVyZWQgJHt0cmllc30gY29uc2VjdXRpdmUgcmVsb2Fkc2BdKVxuICAgICAgaWYodHJpZXMgPiB0aGlzLm1heFJlbG9hZHMpe1xuICAgICAgICB0aGlzLmxvZyh2aWV3LCBcImpvaW5cIiwgKCkgPT4gW2BleGNlZWRlZCAke3RoaXMubWF4UmVsb2Fkc30gY29uc2VjdXRpdmUgcmVsb2Fkcy4gRW50ZXJpbmcgZmFpbHNhZmUgbW9kZWBdKVxuICAgICAgfVxuICAgICAgaWYodGhpcy5oYXNQZW5kaW5nTGluaygpKXtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5wZW5kaW5nTGlua1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSwgYWZ0ZXJNcylcbiAgfVxuXG4gIGdldEhvb2tDYWxsYmFja3MobmFtZSl7XG4gICAgcmV0dXJuIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiUGhvZW5peC5cIikgPyBIb29rc1tuYW1lLnNwbGl0KFwiLlwiKVsxXV0gOiB0aGlzLmhvb2tzW25hbWVdXG4gIH1cblxuICBpc1VubG9hZGVkKCl7IHJldHVybiB0aGlzLnVubG9hZGVkIH1cblxuICBpc0Nvbm5lY3RlZCgpeyByZXR1cm4gdGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSB9XG5cbiAgZ2V0QmluZGluZ1ByZWZpeCgpeyByZXR1cm4gdGhpcy5iaW5kaW5nUHJlZml4IH1cblxuICBiaW5kaW5nKGtpbmQpeyByZXR1cm4gYCR7dGhpcy5nZXRCaW5kaW5nUHJlZml4KCl9JHtraW5kfWAgfVxuXG4gIGNoYW5uZWwodG9waWMsIHBhcmFtcyl7IHJldHVybiB0aGlzLnNvY2tldC5jaGFubmVsKHRvcGljLCBwYXJhbXMpIH1cblxuICBqb2luUm9vdFZpZXdzKCl7XG4gICAgbGV0IHJvb3RzRm91bmQgPSBmYWxzZVxuICAgIERPTS5hbGwoZG9jdW1lbnQsIGAke1BIWF9WSUVXX1NFTEVDVE9SfTpub3QoWyR7UEhYX1BBUkVOVF9JRH1dKWAsIHJvb3RFbCA9PiB7XG4gICAgICBpZighdGhpcy5nZXRSb290QnlJZChyb290RWwuaWQpKXtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLm5ld1Jvb3RWaWV3KHJvb3RFbClcbiAgICAgICAgdmlldy5zZXRIcmVmKHRoaXMuZ2V0SHJlZigpKVxuICAgICAgICB2aWV3LmpvaW4oKVxuICAgICAgICBpZihyb290RWwuaGFzQXR0cmlidXRlKFBIWF9NQUlOKSl7IHRoaXMubWFpbiA9IHZpZXcgfVxuICAgICAgfVxuICAgICAgcm9vdHNGb3VuZCA9IHRydWVcbiAgICB9KVxuICAgIHJldHVybiByb290c0ZvdW5kXG4gIH1cblxuICByZWRpcmVjdCh0bywgZmxhc2gpe1xuICAgIHRoaXMuZGlzY29ubmVjdCgpXG4gICAgQnJvd3Nlci5yZWRpcmVjdCh0bywgZmxhc2gpXG4gIH1cblxuICByZXBsYWNlTWFpbihocmVmLCBmbGFzaCwgY2FsbGJhY2sgPSBudWxsLCBsaW5rUmVmID0gdGhpcy5zZXRQZW5kaW5nTGluayhocmVmKSl7XG4gICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IHRoaXMub3V0Z29pbmdNYWluRWwgfHwgdGhpcy5tYWluLmVsXG4gICAgbGV0IG5ld01haW5FbCA9IERPTS5jbG9uZU5vZGUodGhpcy5vdXRnb2luZ01haW5FbCwgXCJcIilcbiAgICB0aGlzLm1haW4uc2hvd0xvYWRlcih0aGlzLmxvYWRlclRpbWVvdXQpXG4gICAgdGhpcy5tYWluLmRlc3Ryb3koKVxuXG4gICAgdGhpcy5tYWluID0gdGhpcy5uZXdSb290VmlldyhuZXdNYWluRWwsIGZsYXNoKVxuICAgIHRoaXMubWFpbi5zZXRSZWRpcmVjdChocmVmKVxuICAgIHRoaXMudHJhbnNpdGlvblJlbW92ZXMoKVxuICAgIHRoaXMubWFpbi5qb2luKChqb2luQ291bnQsIG9uRG9uZSkgPT4ge1xuICAgICAgaWYoam9pbkNvdW50ID09PSAxICYmIHRoaXMuY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZikpe1xuICAgICAgICB0aGlzLnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICAgIERPTS5maW5kUGh4U3RpY2t5KGRvY3VtZW50KS5mb3JFYWNoKGVsID0+IG5ld01haW5FbC5hcHBlbmRDaGlsZChlbCkpXG4gICAgICAgICAgdGhpcy5vdXRnb2luZ01haW5FbC5yZXBsYWNlV2l0aChuZXdNYWluRWwpXG4gICAgICAgICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IG51bGxcbiAgICAgICAgICBjYWxsYmFjayAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spXG4gICAgICAgICAgb25Eb25lKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdHJhbnNpdGlvblJlbW92ZXMoZWxlbWVudHMpe1xuICAgIGxldCByZW1vdmVBdHRyID0gdGhpcy5iaW5kaW5nKFwicmVtb3ZlXCIpXG4gICAgZWxlbWVudHMgPSBlbGVtZW50cyB8fCBET00uYWxsKGRvY3VtZW50LCBgWyR7cmVtb3ZlQXR0cn1dYClcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGlmKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpKXsgLy8gc2tpcCBjaGlsZHJlbiBhbHJlYWR5IHJlbW92ZWRcbiAgICAgICAgdGhpcy5leGVjSlMoZWwsIGVsLmdldEF0dHJpYnV0ZShyZW1vdmVBdHRyKSwgXCJyZW1vdmVcIilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaXNQaHhWaWV3KGVsKXsgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04pICE9PSBudWxsIH1cblxuICBuZXdSb290VmlldyhlbCwgZmxhc2gpe1xuICAgIGxldCB2aWV3ID0gbmV3IFZpZXcoZWwsIHRoaXMsIG51bGwsIGZsYXNoKVxuICAgIHRoaXMucm9vdHNbdmlldy5pZF0gPSB2aWV3XG4gICAgcmV0dXJuIHZpZXdcbiAgfVxuXG4gIG93bmVyKGNoaWxkRWwsIGNhbGxiYWNrKXtcbiAgICBsZXQgdmlldyA9IG1heWJlKGNoaWxkRWwuY2xvc2VzdChQSFhfVklFV19TRUxFQ1RPUiksIGVsID0+IHRoaXMuZ2V0Vmlld0J5RWwoZWwpKSB8fCB0aGlzLm1haW5cbiAgICBpZih2aWV3KXsgY2FsbGJhY2sodmlldykgfVxuICB9XG5cbiAgd2l0aGluT3duZXJzKGNoaWxkRWwsIGNhbGxiYWNrKXtcbiAgICB0aGlzLm93bmVyKGNoaWxkRWwsIHZpZXcgPT4gY2FsbGJhY2sodmlldywgY2hpbGRFbCkpXG4gIH1cblxuICBnZXRWaWV3QnlFbChlbCl7XG4gICAgbGV0IHJvb3RJZCA9IGVsLmdldEF0dHJpYnV0ZShQSFhfUk9PVF9JRClcbiAgICByZXR1cm4gbWF5YmUodGhpcy5nZXRSb290QnlJZChyb290SWQpLCByb290ID0+IHJvb3QuZ2V0RGVzY2VuZGVudEJ5RWwoZWwpKVxuICB9XG5cbiAgZ2V0Um9vdEJ5SWQoaWQpeyByZXR1cm4gdGhpcy5yb290c1tpZF0gfVxuXG4gIGRlc3Ryb3lBbGxWaWV3cygpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy5yb290cyl7XG4gICAgICB0aGlzLnJvb3RzW2lkXS5kZXN0cm95KClcbiAgICAgIGRlbGV0ZSB0aGlzLnJvb3RzW2lkXVxuICAgIH1cbiAgICB0aGlzLm1haW4gPSBudWxsXG4gIH1cblxuICBkZXN0cm95Vmlld0J5RWwoZWwpe1xuICAgIGxldCByb290ID0gdGhpcy5nZXRSb290QnlJZChlbC5nZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQpKVxuICAgIGlmKHJvb3QgJiYgcm9vdC5pZCA9PT0gZWwuaWQpe1xuICAgICAgcm9vdC5kZXN0cm95KClcbiAgICAgIGRlbGV0ZSB0aGlzLnJvb3RzW3Jvb3QuaWRdXG4gICAgfSBlbHNlIGlmKHJvb3Qpe1xuICAgICAgcm9vdC5kZXN0cm95RGVzY2VuZGVudChlbC5pZClcbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVFbGVtZW50KHRhcmdldCl7XG4gICAgaWYodGhpcy5hY3RpdmVFbGVtZW50ID09PSB0YXJnZXQpeyByZXR1cm4gfVxuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IHRhcmdldFxuICAgIGxldCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZih0YXJnZXQgPT09IHRoaXMuYWN0aXZlRWxlbWVudCl7IHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGwgfVxuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMpXG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMpXG4gICAgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYW5jZWwpXG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBjYW5jZWwpXG4gIH1cblxuICBnZXRBY3RpdmVFbGVtZW50KCl7XG4gICAgaWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSl7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gYmUgbnVsbCBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMVxuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keVxuICAgIH1cbiAgfVxuXG4gIGRyb3BBY3RpdmVFbGVtZW50KHZpZXcpe1xuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAmJiB2aWV3Lm93bnNFbGVtZW50KHRoaXMucHJldkFjdGl2ZSkpe1xuICAgICAgdGhpcy5wcmV2QWN0aXZlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVQcmV2aW91c2x5QWN0aXZlRm9jdXMoKXtcbiAgICBpZih0aGlzLnByZXZBY3RpdmUgJiYgdGhpcy5wcmV2QWN0aXZlICE9PSBkb2N1bWVudC5ib2R5KXtcbiAgICAgIHRoaXMucHJldkFjdGl2ZS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgYmx1ckFjdGl2ZUVsZW1lbnQoKXtcbiAgICB0aGlzLnByZXZBY3RpdmUgPSB0aGlzLmdldEFjdGl2ZUVsZW1lbnQoKVxuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSl7IHRoaXMucHJldkFjdGl2ZS5ibHVyKCkgfVxuICB9XG5cbiAgYmluZFRvcExldmVsRXZlbnRzKCl7XG4gICAgaWYodGhpcy5ib3VuZFRvcExldmVsRXZlbnRzKXsgcmV0dXJuIH1cblxuICAgIHRoaXMuYm91bmRUb3BMZXZlbEV2ZW50cyA9IHRydWVcbiAgICAvLyBlbnRlciBmYWlsc2FmZSByZWxvYWQgaWYgc2VydmVyIGhhcyBnb25lIGF3YXkgaW50ZW50aW9uYWxseSwgc3VjaCBhcyBcImRpc2Nvbm5lY3RcIiBicm9hZGNhc3RcbiAgICB0aGlzLnNvY2tldC5vbkNsb3NlKGV2ZW50ID0+IHtcbiAgICAgIGlmKGV2ZW50ICYmIGV2ZW50LmNvZGUgPT09IDEwMDAgJiYgdGhpcy5tYWluKXtcbiAgICAgICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyKHRoaXMubWFpbilcbiAgICAgIH1cbiAgICB9KVxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpeyB9KSAvLyBlbnN1cmUgYWxsIGNsaWNrIGV2ZW50cyBidWJibGUgZm9yIG1vYmlsZSBTYWZhcmlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIGUgPT4ge1xuICAgICAgaWYoZS5wZXJzaXN0ZWQpeyAvLyByZWxvYWQgcGFnZSBpZiBiZWluZyByZXN0b3JlZCBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZVxuICAgICAgICB0aGlzLmdldFNvY2tldCgpLmRpc2Nvbm5lY3QoKVxuICAgICAgICB0aGlzLndpdGhQYWdlTG9hZGluZyh7dG86IHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBraW5kOiBcInJlZGlyZWN0XCJ9KVxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgIH1cbiAgICB9LCB0cnVlKVxuICAgIHRoaXMuYmluZE5hdigpXG4gICAgdGhpcy5iaW5kQ2xpY2tzKClcbiAgICB0aGlzLmJpbmRGb3JtcygpXG4gICAgdGhpcy5iaW5kKHtrZXl1cDogXCJrZXl1cFwiLCBrZXlkb3duOiBcImtleWRvd25cIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgcGh4RXZlbnQsIGV2ZW50VGFyZ2V0KSA9PiB7XG4gICAgICBsZXQgbWF0Y2hLZXkgPSB0YXJnZXRFbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9LRVkpKVxuICAgICAgbGV0IHByZXNzZWRLZXkgPSBlLmtleSAmJiBlLmtleS50b0xvd2VyQ2FzZSgpIC8vIGNocm9tZSBjbGlja2VkIGF1dG9jb21wbGV0ZXMgc2VuZCBhIGtleWRvd24gd2l0aG91dCBrZXlcbiAgICAgIGlmKG1hdGNoS2V5ICYmIG1hdGNoS2V5LnRvTG93ZXJDYXNlKCkgIT09IHByZXNzZWRLZXkpeyByZXR1cm4gfVxuXG4gICAgICBsZXQgZGF0YSA9IHtrZXk6IGUua2V5LCAuLi50aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbCl9XG4gICAgICBKUy5leGVjKHR5cGUsIHBoeEV2ZW50LCB2aWV3LCB0YXJnZXRFbCwgW1wicHVzaFwiLCB7ZGF0YX1dKVxuICAgIH0pXG4gICAgdGhpcy5iaW5kKHtibHVyOiBcImZvY3Vzb3V0XCIsIGZvY3VzOiBcImZvY3VzaW5cIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgcGh4RXZlbnQsIGV2ZW50VGFyZ2V0KSA9PiB7XG4gICAgICBpZighZXZlbnRUYXJnZXQpe1xuICAgICAgICBsZXQgZGF0YSA9IHtrZXk6IGUua2V5LCAuLi50aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbCl9XG4gICAgICAgIEpTLmV4ZWModHlwZSwgcGh4RXZlbnQsIHZpZXcsIHRhcmdldEVsLCBbXCJwdXNoXCIsIHtkYXRhfV0pXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmJpbmQoe2JsdXI6IFwiYmx1clwiLCBmb2N1czogXCJmb2N1c1wifSwgKGUsIHR5cGUsIHZpZXcsIHRhcmdldEVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBwaHhUYXJnZXQpID0+IHtcbiAgICAgIC8vIGJsdXIgYW5kIGZvY3VzIGFyZSB0cmlnZ2VyZWQgb24gZG9jdW1lbnQgYW5kIHdpbmRvdy4gRGlzY2FyZCBvbmUgdG8gYXZvaWQgZHVwc1xuICAgICAgaWYocGh4VGFyZ2V0ID09PSBcIndpbmRvd1wiKXtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbClcbiAgICAgICAgSlMuZXhlYyh0eXBlLCBwaHhFdmVudCwgdmlldywgdGFyZ2V0RWwsIFtcInB1c2hcIiwge2RhdGF9XSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgZSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBsZXQgZHJvcFRhcmdldElkID0gbWF5YmUoY2xvc2VzdFBoeEJpbmRpbmcoZS50YXJnZXQsIHRoaXMuYmluZGluZyhQSFhfRFJPUF9UQVJHRVQpKSwgdHJ1ZVRhcmdldCA9PiB7XG4gICAgICAgIHJldHVybiB0cnVlVGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0RST1BfVEFSR0VUKSlcbiAgICAgIH0pXG4gICAgICBsZXQgZHJvcFRhcmdldCA9IGRyb3BUYXJnZXRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkcm9wVGFyZ2V0SWQpXG4gICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGUuZGF0YVRyYW5zZmVyLmZpbGVzIHx8IFtdKVxuICAgICAgaWYoIWRyb3BUYXJnZXQgfHwgZHJvcFRhcmdldC5kaXNhYmxlZCB8fCBmaWxlcy5sZW5ndGggPT09IDAgfHwgIShkcm9wVGFyZ2V0LmZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QpKXsgcmV0dXJuIH1cblxuICAgICAgTGl2ZVVwbG9hZGVyLnRyYWNrRmlsZXMoZHJvcFRhcmdldCwgZmlsZXMpXG4gICAgICBkcm9wVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwge2J1YmJsZXM6IHRydWV9KSlcbiAgICB9KVxuICAgIHRoaXMub24oUEhYX1RSQUNLX1VQTE9BRFMsIGUgPT4ge1xuICAgICAgbGV0IHVwbG9hZFRhcmdldCA9IGUudGFyZ2V0XG4gICAgICBpZighRE9NLmlzVXBsb2FkSW5wdXQodXBsb2FkVGFyZ2V0KSl7IHJldHVybiB9XG4gICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGUuZGV0YWlsLmZpbGVzIHx8IFtdKS5maWx0ZXIoZiA9PiBmIGluc3RhbmNlb2YgRmlsZSB8fCBmIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKHVwbG9hZFRhcmdldCwgZmlsZXMpXG4gICAgICB1cGxvYWRUYXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7YnViYmxlczogdHJ1ZX0pKVxuICAgIH0pXG4gIH1cblxuICBldmVudE1ldGEoZXZlbnROYW1lLCBlLCB0YXJnZXRFbCl7XG4gICAgbGV0IGNhbGxiYWNrID0gdGhpcy5tZXRhZGF0YUNhbGxiYWNrc1tldmVudE5hbWVdXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soZSwgdGFyZ2V0RWwpIDoge31cbiAgfVxuXG4gIHNldFBlbmRpbmdMaW5rKGhyZWYpe1xuICAgIHRoaXMubGlua1JlZisrXG4gICAgdGhpcy5wZW5kaW5nTGluayA9IGhyZWZcbiAgICByZXR1cm4gdGhpcy5saW5rUmVmXG4gIH1cblxuICBjb21taXRQZW5kaW5nTGluayhsaW5rUmVmKXtcbiAgICBpZih0aGlzLmxpbmtSZWYgIT09IGxpbmtSZWYpe1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaHJlZiA9IHRoaXMucGVuZGluZ0xpbmtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmsgPSBudWxsXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGdldEhyZWYoKXsgcmV0dXJuIHRoaXMuaHJlZiB9XG5cbiAgaGFzUGVuZGluZ0xpbmsoKXsgcmV0dXJuICEhdGhpcy5wZW5kaW5nTGluayB9XG5cbiAgYmluZChldmVudHMsIGNhbGxiYWNrKXtcbiAgICBmb3IobGV0IGV2ZW50IGluIGV2ZW50cyl7XG4gICAgICBsZXQgYnJvd3NlckV2ZW50TmFtZSA9IGV2ZW50c1tldmVudF1cblxuICAgICAgdGhpcy5vbihicm93c2VyRXZlbnROYW1lLCBlID0+IHtcbiAgICAgICAgbGV0IGJpbmRpbmcgPSB0aGlzLmJpbmRpbmcoZXZlbnQpXG4gICAgICAgIGxldCB3aW5kb3dCaW5kaW5nID0gdGhpcy5iaW5kaW5nKGB3aW5kb3ctJHtldmVudH1gKVxuICAgICAgICBsZXQgdGFyZ2V0UGh4RXZlbnQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKGJpbmRpbmcpXG4gICAgICAgIGlmKHRhcmdldFBoeEV2ZW50KXtcbiAgICAgICAgICB0aGlzLmRlYm91bmNlKGUudGFyZ2V0LCBlLCBicm93c2VyRXZlbnROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndpdGhpbk93bmVycyhlLnRhcmdldCwgdmlldyA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGUsIGV2ZW50LCB2aWV3LCBlLnRhcmdldCwgdGFyZ2V0UGh4RXZlbnQsIG51bGwpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRE9NLmFsbChkb2N1bWVudCwgYFske3dpbmRvd0JpbmRpbmd9XWAsIGVsID0+IHtcbiAgICAgICAgICAgIGxldCBwaHhFdmVudCA9IGVsLmdldEF0dHJpYnV0ZSh3aW5kb3dCaW5kaW5nKVxuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZShlbCwgZSwgYnJvd3NlckV2ZW50TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLndpdGhpbk93bmVycyhlbCwgdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZSwgZXZlbnQsIHZpZXcsIGVsLCBwaHhFdmVudCwgXCJ3aW5kb3dcIilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBiaW5kQ2xpY2tzKCl7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZSA9PiB0aGlzLmNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gZS50YXJnZXQpXG4gICAgdGhpcy5iaW5kQ2xpY2soXCJjbGlja1wiLCBcImNsaWNrXCIsIGZhbHNlKVxuICAgIHRoaXMuYmluZENsaWNrKFwibW91c2Vkb3duXCIsIFwiY2FwdHVyZS1jbGlja1wiLCB0cnVlKVxuICB9XG5cbiAgYmluZENsaWNrKGV2ZW50TmFtZSwgYmluZGluZ05hbWUsIGNhcHR1cmUpe1xuICAgIGxldCBjbGljayA9IHRoaXMuYmluZGluZyhiaW5kaW5nTmFtZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGUgPT4ge1xuICAgICAgbGV0IHRhcmdldCA9IG51bGxcbiAgICAgIGlmKGNhcHR1cmUpe1xuICAgICAgICB0YXJnZXQgPSBlLnRhcmdldC5tYXRjaGVzKGBbJHtjbGlja31dYCkgPyBlLnRhcmdldCA6IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoYFske2NsaWNrfV1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gdGhpcy5jbGlja1N0YXJ0ZWRBdFRhcmdldCB8fCBlLnRhcmdldFxuICAgICAgICB0YXJnZXQgPSBjbG9zZXN0UGh4QmluZGluZyhjbGlja1N0YXJ0ZWRBdFRhcmdldCwgY2xpY2spXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hDbGlja0F3YXkoZSwgY2xpY2tTdGFydGVkQXRUYXJnZXQpXG4gICAgICAgIHRoaXMuY2xpY2tTdGFydGVkQXRUYXJnZXQgPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgcGh4RXZlbnQgPSB0YXJnZXQgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZShjbGljaylcbiAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICBpZih0YXJnZXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIpeyBlLnByZXZlbnREZWZhdWx0KCkgfVxuXG4gICAgICB0aGlzLmRlYm91bmNlKHRhcmdldCwgZSwgXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMud2l0aGluT3duZXJzKHRhcmdldCwgdmlldyA9PiB7XG4gICAgICAgICAgSlMuZXhlYyhcImNsaWNrXCIsIHBoeEV2ZW50LCB2aWV3LCB0YXJnZXQsIFtcInB1c2hcIiwge2RhdGE6IHRoaXMuZXZlbnRNZXRhKFwiY2xpY2tcIiwgZSwgdGFyZ2V0KX1dKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LCBjYXB0dXJlKVxuICB9XG5cbiAgZGlzcGF0Y2hDbGlja0F3YXkoZSwgY2xpY2tTdGFydGVkQXQpe1xuICAgIGxldCBwaHhDbGlja0F3YXkgPSB0aGlzLmJpbmRpbmcoXCJjbGljay1hd2F5XCIpXG4gICAgRE9NLmFsbChkb2N1bWVudCwgYFske3BoeENsaWNrQXdheX1dYCwgZWwgPT4ge1xuICAgICAgaWYoIShlbC5pc1NhbWVOb2RlKGNsaWNrU3RhcnRlZEF0KSB8fCBlbC5jb250YWlucyhjbGlja1N0YXJ0ZWRBdCkpKXtcbiAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICAgIGxldCBwaHhFdmVudCA9IGVsLmdldEF0dHJpYnV0ZShwaHhDbGlja0F3YXkpXG4gICAgICAgICAgaWYoSlMuaXNWaXNpYmxlKGVsKSl7XG4gICAgICAgICAgICBKUy5leGVjKFwiY2xpY2tcIiwgcGh4RXZlbnQsIHZpZXcsIGVsLCBbXCJwdXNoXCIsIHtkYXRhOiB0aGlzLmV2ZW50TWV0YShcImNsaWNrXCIsIGUsIGUudGFyZ2V0KX1dKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYmluZE5hdigpe1xuICAgIGlmKCFCcm93c2VyLmNhblB1c2hTdGF0ZSgpKXsgcmV0dXJuIH1cbiAgICBpZihoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uKXsgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwibWFudWFsXCIgfVxuICAgIGxldCBzY3JvbGxUaW1lciA9IG51bGxcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBfZSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZXIpXG4gICAgICBzY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBCcm93c2VyLnVwZGF0ZUN1cnJlbnRTdGF0ZShzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHN0YXRlLCB7c2Nyb2xsOiB3aW5kb3cuc2Nyb2xsWX0pKVxuICAgICAgfSwgMTAwKVxuICAgIH0pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBldmVudCA9PiB7XG4gICAgICBpZighdGhpcy5yZWdpc3Rlck5ld0xvY2F0aW9uKHdpbmRvdy5sb2NhdGlvbikpeyByZXR1cm4gfVxuICAgICAgbGV0IHt0eXBlLCBpZCwgcm9vdCwgc2Nyb2xsfSA9IGV2ZW50LnN0YXRlIHx8IHt9XG4gICAgICBsZXQgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG5cbiAgICAgIHRoaXMucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmKHRoaXMubWFpbi5pc0Nvbm5lY3RlZCgpICYmICh0eXBlID09PSBcInBhdGNoXCIgJiYgaWQgPT09IHRoaXMubWFpbi5pZCkpe1xuICAgICAgICAgIHRoaXMubWFpbi5wdXNoTGlua1BhdGNoKGhyZWYsIG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXBsYWNlTWFpbihocmVmLCBudWxsLCAoKSA9PiB7XG4gICAgICAgICAgICBpZihyb290KXsgdGhpcy5yZXBsYWNlUm9vdEhpc3RvcnkoKSB9XG4gICAgICAgICAgICBpZih0eXBlb2Yoc2Nyb2xsKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBzY3JvbGwpXG4gICAgICAgICAgICAgIH0sIDApIC8vIHRoZSBib2R5IG5lZWRzIHRvIHJlbmRlciBiZWZvcmUgd2Ugc2Nyb2xsLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgZmFsc2UpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgIGxldCB0YXJnZXQgPSBjbG9zZXN0UGh4QmluZGluZyhlLnRhcmdldCwgUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB0eXBlID0gdGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB3YW50c05ld1RhYiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDFcbiAgICAgIGlmKCF0eXBlIHx8ICF0aGlzLmlzQ29ubmVjdGVkKCkgfHwgIXRoaXMubWFpbiB8fCB3YW50c05ld1RhYil7IHJldHVybiB9XG5cbiAgICAgIGxldCBocmVmID0gdGFyZ2V0LmhyZWZcbiAgICAgIGxldCBsaW5rU3RhdGUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFBIWF9MSU5LX1NUQVRFKVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIC8vIGRvIG5vdCBidWJibGUgY2xpY2sgdG8gcmVndWxhciBwaHgtY2xpY2sgYmluZGluZ3NcbiAgICAgIGlmKHRoaXMucGVuZGluZ0xpbmsgPT09IGhyZWYpeyByZXR1cm4gfVxuXG4gICAgICB0aGlzLnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICBpZih0eXBlID09PSBcInBhdGNoXCIpe1xuICAgICAgICAgIHRoaXMucHVzaEhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIHRhcmdldClcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT09IFwicmVkaXJlY3RcIil7XG4gICAgICAgICAgdGhpcy5oaXN0b3J5UmVkaXJlY3QoaHJlZiwgbGlua1N0YXRlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtQSFhfTElWRV9MSU5LfSB0byBiZSBcInBhdGNoXCIgb3IgXCJyZWRpcmVjdFwiLCBnb3Q6ICR7dHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sIGZhbHNlKVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudChldmVudCwgcGF5bG9hZCA9IHt9KXtcbiAgICBET00uZGlzcGF0Y2hFdmVudCh3aW5kb3csIGBwaHg6JHtldmVudH1gLCB7ZGV0YWlsOiBwYXlsb2FkfSlcbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRzKGV2ZW50cyl7XG4gICAgZXZlbnRzLmZvckVhY2goKFtldmVudCwgcGF5bG9hZF0pID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCwgcGF5bG9hZCkpXG4gIH1cblxuICB3aXRoUGFnZUxvYWRpbmcoaW5mbywgY2FsbGJhY2spe1xuICAgIERPTS5kaXNwYXRjaEV2ZW50KHdpbmRvdywgXCJwaHg6cGFnZS1sb2FkaW5nLXN0YXJ0XCIsIHtkZXRhaWw6IGluZm99KVxuICAgIGxldCBkb25lID0gKCkgPT4gRE9NLmRpc3BhdGNoRXZlbnQod2luZG93LCBcInBoeDpwYWdlLWxvYWRpbmctc3RvcFwiLCB7ZGV0YWlsOiBpbmZvfSlcbiAgICByZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjayhkb25lKSA6IGRvbmVcbiAgfVxuXG4gIHB1c2hIaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCB0YXJnZXRFbCl7XG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInBhdGNoXCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMubWFpbi5wdXNoTGlua1BhdGNoKGhyZWYsIHRhcmdldEVsLCBsaW5rUmVmID0+IHtcbiAgICAgICAgdGhpcy5oaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCBsaW5rUmVmKVxuICAgICAgICBkb25lKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIGxpbmtSZWYgPSB0aGlzLnNldFBlbmRpbmdMaW5rKGhyZWYpKXtcbiAgICBpZighdGhpcy5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7IHJldHVybiB9XG5cbiAgICBCcm93c2VyLnB1c2hTdGF0ZShsaW5rU3RhdGUsIHt0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9LCBocmVmKVxuICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gIH1cblxuICBoaXN0b3J5UmVkaXJlY3QoaHJlZiwgbGlua1N0YXRlLCBmbGFzaCl7XG4gICAgbGV0IHNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInJlZGlyZWN0XCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMucmVwbGFjZU1haW4oaHJlZiwgZmxhc2gsICgpID0+IHtcbiAgICAgICAgQnJvd3Nlci5wdXNoU3RhdGUobGlua1N0YXRlLCB7dHlwZTogXCJyZWRpcmVjdFwiLCBpZDogdGhpcy5tYWluLmlkLCBzY3JvbGw6IHNjcm9sbH0sIGhyZWYpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gICAgICAgIGRvbmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVwbGFjZVJvb3RIaXN0b3J5KCl7XG4gICAgQnJvd3Nlci5wdXNoU3RhdGUoXCJyZXBsYWNlXCIsIHtyb290OiB0cnVlLCB0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9KVxuICB9XG5cbiAgcmVnaXN0ZXJOZXdMb2NhdGlvbihuZXdMb2NhdGlvbil7XG4gICAgbGV0IHtwYXRobmFtZSwgc2VhcmNofSA9IHRoaXMuY3VycmVudExvY2F0aW9uXG4gICAgaWYocGF0aG5hbWUgKyBzZWFyY2ggPT09IG5ld0xvY2F0aW9uLnBhdGhuYW1lICsgbmV3TG9jYXRpb24uc2VhcmNoKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IGNsb25lKG5ld0xvY2F0aW9uKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBiaW5kRm9ybXMoKXtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDBcbiAgICB0aGlzLm9uKFwic3VibWl0XCIsIGUgPT4ge1xuICAgICAgbGV0IHBoeEV2ZW50ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcInN1Ym1pdFwiKSlcbiAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUudGFyZ2V0LmRpc2FibGVkID0gdHJ1ZVxuICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICBKUy5leGVjKFwic3VibWl0XCIsIHBoeEV2ZW50LCB2aWV3LCBlLnRhcmdldCwgW1wicHVzaFwiLCB7fV0pXG4gICAgICB9KVxuICAgIH0sIGZhbHNlKVxuXG4gICAgZm9yKGxldCB0eXBlIG9mIFtcImNoYW5nZVwiLCBcImlucHV0XCJdKXtcbiAgICAgIHRoaXMub24odHlwZSwgZSA9PiB7XG4gICAgICAgIGxldCBwaHhDaGFuZ2UgPSB0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIilcbiAgICAgICAgbGV0IGlucHV0ID0gZS50YXJnZXRcbiAgICAgICAgbGV0IGlucHV0RXZlbnQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUocGh4Q2hhbmdlKVxuICAgICAgICBsZXQgZm9ybUV2ZW50ID0gaW5wdXQuZm9ybSAmJiBpbnB1dC5mb3JtLmdldEF0dHJpYnV0ZShwaHhDaGFuZ2UpXG4gICAgICAgIGxldCBwaHhFdmVudCA9IGlucHV0RXZlbnQgfHwgZm9ybUV2ZW50XG4gICAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICAgIGlmKGlucHV0LnR5cGUgPT09IFwibnVtYmVyXCIgJiYgaW5wdXQudmFsaWRpdHkgJiYgaW5wdXQudmFsaWRpdHkuYmFkSW5wdXQpeyByZXR1cm4gfVxuXG4gICAgICAgIGxldCBkaXNwYXRjaGVyID0gaW5wdXRFdmVudCA/IGlucHV0IDogaW5wdXQuZm9ybVxuICAgICAgICBsZXQgY3VycmVudEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zXG4gICAgICAgIGl0ZXJhdGlvbnMrK1xuICAgICAgICBsZXQge2F0OiBhdCwgdHlwZTogbGFzdFR5cGV9ID0gRE9NLnByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIikgfHwge31cbiAgICAgICAgLy8gZGV0ZWN0IGR1cCBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZGlzcGF0Y2ggYm90aCBcImlucHV0XCIgYW5kIFwiY2hhbmdlXCJcbiAgICAgICAgaWYoYXQgPT09IGN1cnJlbnRJdGVyYXRpb25zIC0gMSAmJiB0eXBlICE9PSBsYXN0VHlwZSl7IHJldHVybiB9XG5cbiAgICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIiwge2F0OiBjdXJyZW50SXRlcmF0aW9ucywgdHlwZTogdHlwZX0pXG5cbiAgICAgICAgdGhpcy5kZWJvdW5jZShpbnB1dCwgZSwgdHlwZSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2l0aGluT3duZXJzKGRpc3BhdGNoZXIsIHZpZXcgPT4ge1xuICAgICAgICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXQsIFBIWF9IQVNfRk9DVVNFRCwgdHJ1ZSlcbiAgICAgICAgICAgIGlmKCFET00uaXNUZXh0dWFsSW5wdXQoaW5wdXQpKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVFbGVtZW50KGlucHV0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlMuZXhlYyhcImNoYW5nZVwiLCBwaHhFdmVudCwgdmlldywgaW5wdXQsIFtcInB1c2hcIiwge190YXJnZXQ6IGUudGFyZ2V0Lm5hbWUsIGRpc3BhdGNoZXI6IGRpc3BhdGNoZXJ9XSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBldmVudFR5cGUsIGNhbGxiYWNrKXtcbiAgICBpZihldmVudFR5cGUgPT09IFwiYmx1clwiIHx8IGV2ZW50VHlwZSA9PT0gXCJmb2N1c291dFwiKXsgcmV0dXJuIGNhbGxiYWNrKCkgfVxuXG4gICAgbGV0IHBoeERlYm91bmNlID0gdGhpcy5iaW5kaW5nKFBIWF9ERUJPVU5DRSlcbiAgICBsZXQgcGh4VGhyb3R0bGUgPSB0aGlzLmJpbmRpbmcoUEhYX1RIUk9UVExFKVxuICAgIGxldCBkZWZhdWx0RGVib3VuY2UgPSB0aGlzLmRlZmF1bHRzLmRlYm91bmNlLnRvU3RyaW5nKClcbiAgICBsZXQgZGVmYXVsdFRocm90dGxlID0gdGhpcy5kZWZhdWx0cy50aHJvdHRsZS50b1N0cmluZygpXG5cbiAgICB0aGlzLndpdGhpbk93bmVycyhlbCwgdmlldyA9PiB7XG4gICAgICBsZXQgYXN5bmNGaWx0ZXIgPSAoKSA9PiAhdmlldy5pc0Rlc3Ryb3llZCgpICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpXG4gICAgICBET00uZGVib3VuY2UoZWwsIGV2ZW50LCBwaHhEZWJvdW5jZSwgZGVmYXVsdERlYm91bmNlLCBwaHhUaHJvdHRsZSwgZGVmYXVsdFRocm90dGxlLCBhc3luY0ZpbHRlciwgKCkgPT4ge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBzaWxlbmNlRXZlbnRzKGNhbGxiYWNrKXtcbiAgICB0aGlzLnNpbGVuY2VkID0gdHJ1ZVxuICAgIGNhbGxiYWNrKClcbiAgICB0aGlzLnNpbGVuY2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGUgPT4ge1xuICAgICAgaWYoIXRoaXMuc2lsZW5jZWQpeyBjYWxsYmFjayhlKSB9XG4gICAgfSlcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2l0aW9uU2V0IHtcbiAgY29uc3RydWN0b3IoKXtcbiAgICB0aGlzLnRyYW5zaXRpb25zID0gbmV3IFNldCgpXG4gICAgdGhpcy5wZW5kaW5nT3BzID0gW11cbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIHJlc2V0KCl7XG4gICAgdGhpcy50cmFuc2l0aW9ucy5mb3JFYWNoKHRpbWVyID0+IHtcbiAgICAgIGNhbmNlbFRpbWVvdXQodGltZXIpXG4gICAgICB0aGlzLnRyYW5zaXRpb25zLmRlbGV0ZSh0aW1lcilcbiAgICB9KVxuICAgIHRoaXMuZmx1c2hQZW5kaW5nT3BzKClcbiAgfVxuXG4gIGFmdGVyKGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLnNpemUoKSA9PT0gMCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFBlbmRpbmdPcChjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBhZGRUcmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSl7XG4gICAgb25TdGFydCgpXG4gICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25zLmRlbGV0ZSh0aW1lcilcbiAgICAgIG9uRG9uZSgpXG4gICAgICBpZih0aGlzLnNpemUoKSA9PT0gMCl7IHRoaXMuZmx1c2hQZW5kaW5nT3BzKCkgfVxuICAgIH0sIHRpbWUpXG4gICAgdGhpcy50cmFuc2l0aW9ucy5hZGQodGltZXIpXG4gIH1cblxuICBwdXNoUGVuZGluZ09wKG9wKXsgdGhpcy5wZW5kaW5nT3BzLnB1c2gob3ApIH1cblxuICBzaXplKCl7IHJldHVybiB0aGlzLnRyYW5zaXRpb25zLnNpemUgfVxuXG4gIGZsdXNoUGVuZGluZ09wcygpe1xuICAgIHRoaXMucGVuZGluZ09wcy5mb3JFYWNoKG9wID0+IG9wKCkpXG4gICAgdGhpcy5wZW5kaW5nT3BzID0gW11cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFhQSxPQUFFLFNBQVVBLFNBQVEsU0FBVTtBQUU3QjtBQUVBLFlBQUssT0FBTyxXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVksVUFBVztBQVN2RSxpQkFBTyxVQUFVQSxRQUFPLFdBQ3ZCLFFBQVNBLFNBQVEsSUFBSyxJQUN0QixTQUFVLEdBQUk7QUFDYixnQkFBSyxDQUFDLEVBQUUsVUFBVztBQUNsQixvQkFBTSxJQUFJLE1BQU8sMENBQTJDO0FBQUEsWUFDN0Q7QUFDQSxtQkFBTyxRQUFTLENBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUNOLGtCQUFT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O0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBWTtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBTztBQUFBLFlBQVk7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQXFCO0FBQUEsWUFBYztBQUFBLFlBQWU7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWlCO0FBQUEsWUFBcUI7QUFBQSxZQUFpQztBQUFBLFlBQWtDO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQVM7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWE7QUFBQSxZQUFXO0FBQUEsWUFBUztBQUFBLFlBQVk7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQSxZQUFhO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFzQjtBQUFBLFlBQVU7QUFBQSxZQUFVO0FBQUEsWUFBWTtBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFRO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFVO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFjO0FBQUEsWUFBWTtBQUFBLFlBQWE7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBUTtBQUFBLFlBQWE7QUFBQSxZQUFVO0FBQUEsWUFBYTtBQUFBLFlBQWtCO0FBQUEsWUFBVztBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYztBQUFBLFlBQXFCO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFXO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBa0I7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFxQjtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBUTtBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBdUI7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQW9CO0FBQUEsWUFBVztBQUFBLFlBQWU7QUFBQSxZQUFVO0FBQUEsWUFBYztBQUFBLFlBQVk7QUFBQSxZQUFtQjtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFlBQVU7QUFBQSxZQUFnQjtBQUFBLFlBQWdCO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQWE7QUFBQSxZQUFZO0FBQUEsWUFBUztBQUFBLFlBQXFCO0FBQUEsWUFBZ0I7QUFBQSxZQUFRO0FBQUEsWUFBZTtBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFpQjtBQUFBLFlBQWE7QUFBQSxVQUN6aUU7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBQ2Y7QUFBQSxZQUFXO0FBQUEsWUFBbUI7QUFBQSxZQUFPO0FBQUEsWUFBZTtBQUFBLFlBQWtCO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFnQjtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBZTtBQUFBLFlBQU87QUFBQSxZQUFLO0FBQUEsWUFBSztBQUFBLFlBQWU7QUFBQSxZQUFLO0FBQUEsWUFBTztBQUFBLFlBQUs7QUFBQSxZQUFNO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUF5QjtBQUFBLFlBQVE7QUFBQSxZQUFLO0FBQUEsWUFBUTtBQUFBLFlBQUs7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFNO0FBQUEsWUFBUztBQUFBLFlBQWM7QUFBQSxZQUFVO0FBQUEsWUFBUztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBTTtBQUFBLFlBQWtCO0FBQUEsWUFBTTtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBYztBQUFBLFlBQU07QUFBQSxZQUFNO0FBQUEsWUFBTztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQU07QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQU87QUFBQSxZQUFVO0FBQUEsWUFBTTtBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFTO0FBQUEsWUFBTztBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQTBCO0FBQUEsWUFBYztBQUFBLFlBQVM7QUFBQSxZQUFjO0FBQUEsWUFBUztBQUFBLFlBQVc7QUFBQSxZQUFPO0FBQUEsWUFBVTtBQUFBLFlBQXlCO0FBQUEsWUFBTztBQUFBLFlBQVE7QUFBQSxZQUFNO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFVBQzc3QjtBQUFBO0FBQUEsUUFFRDtBQUVBLGVBQU8sS0FBSyxRQUFRLEVBQUUsUUFBUSxTQUFVLEdBQUc7QUFDMUMsaUJBQU8sQ0FBQyxFQUFFLFVBQVUsaUJBQWlCLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDakQsQ0FBQztBQUVELFlBQUksY0FBYztBQUFBO0FBQUEsVUFFakI7QUFBQSxVQUFPO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFXO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFXO0FBQUEsVUFBVTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFPO0FBQUEsVUFBVTtBQUFBLFVBQU07QUFBQSxVQUFXO0FBQUEsVUFBYTtBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQU07QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQVk7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQVE7QUFBQSxVQUFNO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBWTtBQUFBO0FBQUEsVUFFemY7QUFBQSxVQUFrQjtBQUFBLFVBQW1CO0FBQUEsVUFBVTtBQUFBLFVBQWE7QUFBQSxVQUFTO0FBQUEsVUFBYTtBQUFBLFVBQWE7QUFBQSxVQUFZO0FBQUEsVUFBZTtBQUFBLFVBQVc7QUFBQSxVQUFhO0FBQUEsVUFBaUI7QUFBQSxVQUFvQjtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUFjO0FBQUEsVUFBVTtBQUFBLFVBQWU7QUFBQSxVQUFRO0FBQUEsVUFBZ0I7QUFBQSxVQUFhO0FBQUEsVUFBVztBQUFBLFVBQWdCO0FBQUEsVUFBZ0I7QUFBQSxVQUFjO0FBQUEsVUFBbUI7QUFBQSxVQUFTO0FBQUEsVUFBYztBQUFBLFVBQVU7QUFBQSxVQUFnQjtBQUFBLFVBQWE7QUFBQSxVQUFnQjtBQUFBLFVBQVk7QUFBQSxVQUFVO0FBQUEsVUFBWTtBQUFBLFVBQWM7QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQWlCO0FBQUEsVUFBZ0I7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQVc7QUFBQSxVQUFhO0FBQUEsVUFBaUI7QUFBQSxVQUFrQjtBQUFBLFVBQW1CO0FBQUEsVUFBaUI7QUFBQSxVQUFXO0FBQUEsVUFBUTtBQUFBLFVBQWE7QUFBQSxVQUFlO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUFjO0FBQUEsVUFBUTtBQUFBLFVBQWM7QUFBQSxVQUFrQjtBQUFBLFVBQWM7QUFBQSxVQUFRO0FBQUEsVUFBZ0I7QUFBQSxVQUFlO0FBQUEsVUFBWTtBQUFBLFVBQWlCO0FBQUEsVUFBYTtBQUFBLFVBQVc7QUFBQSxVQUFTO0FBQUEsVUFBYztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBYztBQUFBLFVBQVc7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQWtCO0FBQUE7QUFBQSxVQUV0aEM7QUFBQSxVQUFXO0FBQUEsVUFBZ0I7QUFBQSxVQUFlO0FBQUEsVUFBa0I7QUFBQSxVQUFhO0FBQUEsVUFBcUI7QUFBQSxVQUFtQjtBQUFBLFVBQVM7QUFBQSxVQUFrQjtBQUFBLFVBQWdCO0FBQUE7QUFBQSxVQUU1SjtBQUFBLFVBQW1CO0FBQUEsVUFBZTtBQUFBLFVBQWlCO0FBQUEsVUFBaUI7QUFBQSxVQUFtQjtBQUFBO0FBQUEsVUFFdkY7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQWE7QUFBQSxVQUFhO0FBQUEsVUFBVztBQUFBLFVBQWdCO0FBQUEsVUFBa0I7QUFBQSxVQUFjO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFlO0FBQUEsVUFBc0I7QUFBQSxVQUFVO0FBQUE7QUFBQSxVQUV6SztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBO0FBQUEsVUFFL0Q7QUFB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LFFBQUE7TUFBQTtJQUFBO0lBSXZCLGNBQWMsTUFBTSxTQUFTLFFBQU87QUFDbEMsY0FBQTtBQUNBLFVBQUksUUFBUSxXQUFXLE1BQU07QUFDM0IsYUFBSyxZQUFZLE9BQU8sS0FBQTtBQUN4QixlQUFBO0FBQ0EsWUFBRyxLQUFLLEtBQUEsTUFBVyxHQUFFO0FBQUUsZUFBSyxnQkFBQTtRQUFBO01BQUEsR0FDM0IsSUFBQTtBQUNILFdBQUssWUFBWSxJQUFJLEtBQUE7SUFBQTtJQUd2QixjQUFjLElBQUc7QUFBRSxXQUFLLFdBQVcsS0FBSyxFQUFBO0lBQUE7SUFFeEMsT0FBTTtBQUFFLGFBQU8sS0FBSyxZQUFZO0lBQUE7SUFFaEMsa0JBQWlCO0FBQ2YsV0FBSyxXQUFXLFFBQVEsQ0FBQSxPQUFNLEdBQUEsQ0FBQTtBQUM5QixXQUFLLGFBQWEsQ0FBQTtJQUFBO0VBQUE7OztBbkh4MEJ0QixzQkFBbUI7QUFsQm5CLFNBQU8sSUFBSSxlQUFBSTtBQUNYLFNBQU8sU0FBUyxlQUFBQTtBQW1CaEIsTUFBSSxZQUFZLFNBQVMsY0FBYyx5QkFBeUIsRUFBRSxhQUFhLFNBQVM7QUFDeEYsTUFBSSxhQUFhLElBQUksV0FBVyxTQUFTLFFBQVEsRUFBQyxRQUFRLEVBQUMsYUFBYSxVQUFTLEVBQUMsQ0FBQztBQUduRixnQkFBQUMsUUFBTyxPQUFPLEVBQUMsV0FBVyxFQUFDLEdBQUcsT0FBTSxHQUFHLGFBQWEsb0JBQW1CLENBQUM7QUFDeEUsU0FBTyxpQkFBaUIsMEJBQTBCLFVBQVEsY0FBQUEsUUFBTyxLQUFLLENBQUM7QUFDdkUsU0FBTyxpQkFBaUIseUJBQXlCLFVBQVEsY0FBQUEsUUFBTyxLQUFLLENBQUM7QUFHdEUsYUFBVyxRQUFRO0FBTW5CLFNBQU8sYUFBYTsiLAogICJuYW1lcyI6IFsiZ2xvYmFsIiwgIndpbmRvdyIsICJpc0Z1bmN0aW9uIiwgImlzV2luZG93IiwgImRvY3VtZW50IiwgImRvYyIsICJ0b1R5cGUiLCAiY2xvbmUiLCAiYXJyIiwgInN1cHBvcnQiLCAiY29udGFpbnMiLCAiaGFzT3duIiwgInB1c2giLCAic2xpY2UiLCAiaW5kZXhPZiIsICJpIiwgInJ0cmltIiwgInJodG1sIiwgInJxdWlja0V4cHIiLCAiU2l6emxlIiwgImZuIiwgIm1hdGNoZXMiLCAiZG9jRWxlbSIsICJub2RlIiwgIm5vZGVOYW1lIiwgInN0YXJ0IiwgImRpciIsICJoYXNoIiwgImlzWE1MIiwgImVsZW0iLCAic2VsZiIsICJ2YWx1ZSIsICJkZWZlcnJlZCIsICJwcm9jZXNzIiwgIkRhdGEiLCAiZGF0YSIsICJleHBlY3RTeW5jIiwgIm5hbWUiLCAiZW5kIiwgImluZGV4IiwgImxlbmd0aCIsICJqIiwgIm1heCIsICJsb2NhdGlvbiIsICJ2YWwiLCAiY29tcGxldGVkIiwgIm9mZnNldCIsICJ0b3AiLCAibWV0aG9kIiwgInR5cGUiLCAiX3NlbGYiLCAiY2xvbmUiLCAibGFuZyIsICJQcmlzbSIsICJvZmZzZXQiLCAiaSIsICJjb250ZW50VHlwZSIsICJyZWZlcmVuY2UiLCAia2V5IiwgImFycm93IiwgInJvdW5kIiwgInJhbmdlIiwgImZvcm1hdCIsICJzdGFydCIsICJlbmQiLCAid2luZG93IiwgImRvY3VtZW50IiwgInRvcGJhciIsICJpbXBvcnRfanF1ZXJ5IiwgImNyZWF0ZVBvcHBlciIsICJuYW1lIiwgInN0eWxlIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJ3aW5kb3ciLCAibWluIiwgIm1heCIsICJ0b1BhZGRpbmdPYmplY3QiLCAicG9wcGVyT2Zmc2V0cyIsICJtaW4iLCAibWF4IiwgIm9mZnNldCIsICJlZmZlY3QiLCAicG9wcGVyIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZWZmZWN0IiwgIndpbmRvdyIsICJoYXNoIiwgImdldENvbXB1dGVkU3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJjbGlwcGluZ1BhcmVudHMiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJyZWZlcmVuY2UiLCAicG9wcGVyT2Zmc2V0cyIsICJvZmZzZXQiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAicGxhY2VtZW50cyIsICJwbGFjZW1lbnQiLCAiX2xvb3AiLCAiX2kiLCAiY2hlY2tzIiwgIm9mZnNldCIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJtaW4iLCAibWF4IiwgImZuIiwgInNlbGYiLCAiZm4iLCAibWVyZ2VkIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiY3JlYXRlUG9wcGVyIiwgInJlZmVyZW5jZSIsICJwb3BwZXIiLCAib3B0aW9ucyIsICJnZXRDb21wdXRlZFN0eWxlIiwgImZuIiwgInN0YXRlIiwgImVmZmVjdCIsICJub29wRm4iLCAiY3JlYXRlUG9wcGVyIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiY3JlYXRlUG9wcGVyIiwgIk1BWF9VSUQiLCAiTUlMTElTRUNPTkRTX01VTFRJUExJRVIiLCAiVFJBTlNJVElPTl9FTkQiLCAidG9UeXBlIiwgIm9iamVjdCIsICJ1bmRlZmluZWQiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJjYWxsIiwgIm1hdGNoIiwgInRvTG93ZXJDYXNlIiwgImdldFVJRCIsICJwcmVmaXgiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAiZG9jdW1lbnQiLCAiZ2V0RWxlbWVudEJ5SWQiLCAiZ2V0U2VsZWN0b3IiLCAiZWxlbWVudCIsICJzZWxlY3RvciIsICJnZXRBdHRyaWJ1dGUiLCAiaHJlZkF0dHJpYnV0ZSIsICJpbmNsdWRlcyIsICJzdGFydHNXaXRoIiwgInNwbGl0IiwgInRyaW0iLCAiZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCIsICJxdWVyeVNlbGVjdG9yIiwgImdldEVsZW1lbnRGcm9tU2VsZWN0b3IiLCAiZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQiLCAidHJhbnNpdGlvbkR1cmF0aW9uIiwgInRyYW5zaXRpb25EZWxheSIsICJ3aW5kb3ciLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiIsICJOdW1iZXIiLCAicGFyc2VGbG9hdCIsICJmbG9hdFRyYW5zaXRpb25EZWxheSIsICJ0cmlnZ2VyVHJhbnNpdGlvbkVuZCIsICJkaXNwYXRjaEV2ZW50IiwgIkV2ZW50IiwgImlzRWxlbWVudCIsICJqcXVlcnkiLCAibm9kZVR5cGUiLCAiZ2V0RWxlbWVudCIsICJsZW5ndGgiLCAiaXNWaXNpYmxlIiwgImdldENsaWVudFJlY3RzIiwgImVsZW1lbnRJc1Zpc2libGUiLCAiZ2V0UHJvcGVydHlWYWx1ZSIsICJjbG9zZWREZXRhaWxzIiwgImNsb3Nlc3QiLCAic3VtbWFyeSIsICJwYXJlbnROb2RlIiwgImlzRGlzYWJsZWQiLCAiTm9kZSIsICJFTEVNRU5UX05PREUiLCAiY2xhc3NMaXN0IiwgImNvbnRhaW5zIiwgImRpc2FibGVkIiwgImhhc0F0dHJpYnV0ZSIsICJmaW5kU2hhZG93Um9vdCIsICJkb2N1bWVudEVsZW1lbnQiLCAiYXR0YWNoU2hhZG93IiwgImdldFJvb3ROb2RlIiwgInJvb3QiLCAiU2hhZG93Um9vdCIsICJub29wIiwgInJlZmxvdyIsICJvZmZzZXRIZWlnaHQiLCAiZ2V0alF1ZXJ5IiwgImpRdWVyeSIsICJib2R5IiwgIkRPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MiLCAib25ET01Db250ZW50TG9hZGVkIiwgImNhbGxiYWNrIiwgInJlYWR5U3RhdGUiLCAiYWRkRXZlbnRMaXN0ZW5lciIsICJwdXNoIiwgImlzUlRMIiwgImRpciIsICJkZWZpbmVKUXVlcnlQbHVnaW4iLCAicGx1Z2luIiwgIiQiLCAibmFtZSIsICJOQU1FIiwgIkpRVUVSWV9OT19DT05GTElDVCIsICJmbiIsICJqUXVlcnlJbnRlcmZhY2UiLCAiQ29uc3RydWN0b3IiLCAibm9Db25mbGljdCIsICJleGVjdXRlIiwgImV4ZWN1dGVBZnRlclRyYW5zaXRpb24iLCAidHJhbnNpdGlvbkVsZW1lbnQiLCAid2FpdEZvclRyYW5zaXRpb24iLCAiZHVyYXRpb25QYWRkaW5nIiwgImVtdWxhdGVkRHVyYXRpb24iLCAiY2FsbGVkIiwgImhhbmRsZXIiLCAidGFyZ2V0IiwgInJlbW92ZUV2ZW50TGlzdGVuZXIiLCAic2V0VGltZW91dCIsICJnZXROZXh0QWN0aXZlRWxlbWVudCIsICJsaXN0IiwgImFjdGl2ZUVsZW1lbnQiLCAic2hvdWxkR2V0TmV4dCIsICJpc0N5Y2xlQWxsb3dlZCIsICJsaXN0TGVuZ3RoIiwgImluZGV4IiwgImluZGV4T2YiLCAibWF4IiwgIm1pbiIsICJuYW1lc3BhY2VSZWdleCIsICJzdHJpcE5hbWVSZWdleCIsICJzdHJpcFVpZFJlZ2V4IiwgImV2ZW50UmVnaXN0cnkiLCAidWlkRXZlbnQiLCAiY3VzdG9tRXZlbnRzIiwgIm1vdXNlZW50ZXIiLCAibW91c2VsZWF2ZSIsICJuYXRpdmVFdmVudHMiLCAiU2V0IiwgIm1ha2VFdmVudFVpZCIsICJ1aWQiLCAiZ2V0RWxlbWVudEV2ZW50cyIsICJib290c3RyYXBIYW5kbGVyIiwgImV2ZW50IiwgImh5ZHJhdGVPYmoiLCAiZGVsZWdhdGVUYXJnZXQiLCAib25lT2ZmIiwgIkV2ZW50SGFuZGxlciIsICJvZmYiLCAidHlwZSIsICJhcHBseSIsICJib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlciIsICJkb21FbGVtZW50cyIsICJxdWVyeVNlbGVjdG9yQWxsIiwgImRvbUVsZW1lbnQiLCAiZmluZEhhbmRsZXIiLCAiZXZlbnRzIiwgImNhbGxhYmxlIiwgImRlbGVnYXRpb25TZWxlY3RvciIsICJ2YWx1ZXMiLCAiZmluZCIsICJub3JtYWxpemVQYXJhbWV0ZXJzIiwgIm9yaWdpbmFsVHlwZUV2ZW50IiwgImRlbGVnYXRpb25GdW5jdGlvbiIsICJpc0RlbGVnYXRlZCIsICJ0eXBlRXZlbnQiLCAiZ2V0VHlwZUV2ZW50IiwgImhhcyIsICJhZGRIYW5kbGVyIiwgIndyYXBGdW5jdGlvbiIsICJyZWxhdGVkVGFyZ2V0IiwgImhhbmRsZXJzIiwgInByZXZpb3VzRnVuY3Rpb24iLCAicmVwbGFjZSIsICJyZW1vdmVIYW5kbGVyIiwgIkJvb2xlYW4iLCAicmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzIiwgIm5hbWVzcGFjZSIsICJzdG9yZUVsZW1lbnRFdmVudCIsICJoYW5kbGVyS2V5IiwgImtleXMiLCAib24iLCAib25lIiwgImluTmFtZXNwYWNlIiwgImlzTmFtZXNwYWNlIiwgImVsZW1lbnRFdmVudCIsICJzbGljZSIsICJrZXlIYW5kbGVycyIsICJ0cmlnZ2VyIiwgImFyZ3MiLCAialF1ZXJ5RXZlbnQiLCAiYnViYmxlcyIsICJuYXRpdmVEaXNwYXRjaCIsICJkZWZhdWx0UHJldmVudGVkIiwgImlzUHJvcGFnYXRpb25TdG9wcGVkIiwgImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwgImlzRGVmYXVsdFByZXZlbnRlZCIsICJldnQiLCAiY2FuY2VsYWJsZSIsICJwcmV2ZW50RGVmYXVsdCIsICJvYmoiLCAibWV0YSIsICJrZXkiLCAidmFsdWUiLCAiZW50cmllcyIsICJkZWZpbmVQcm9wZXJ0eSIsICJjb25maWd1cmFibGUiLCAiZ2V0IiwgImVsZW1lbnRNYXAiLCAiTWFwIiwgInNldCIsICJpbnN0YW5jZSIsICJpbnN0YW5jZU1hcCIsICJzaXplIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAiQXJyYXkiLCAiZnJvbSIsICJyZW1vdmUiLCAiZGVsZXRlIiwgIm5vcm1hbGl6ZURhdGEiLCAiSlNPTiIsICJwYXJzZSIsICJkZWNvZGVVUklDb21wb25lbnQiLCAibm9ybWFsaXplRGF0YUtleSIsICJjaHIiLCAiTWFuaXB1bGF0b3IiLCAic2V0RGF0YUF0dHJpYnV0ZSIsICJzZXRBdHRyaWJ1dGUiLCAicmVtb3ZlRGF0YUF0dHJpYnV0ZSIsICJyZW1vdmVBdHRyaWJ1dGUiLCAiZ2V0RGF0YUF0dHJpYnV0ZXMiLCAiYXR0cmlidXRlcyIsICJic0tleXMiLCAiZGF0YXNldCIsICJmaWx0ZXIiLCAicHVyZUtleSIsICJjaGFyQXQiLCAiZ2V0RGF0YUF0dHJpYnV0ZSIsICJDb25maWciLCAiRGVmYXVsdCIsICJEZWZhdWx0VHlwZSIsICJFcnJvciIsICJfZ2V0Q29uZmlnIiwgImNvbmZpZyIsICJfbWVyZ2VDb25maWdPYmoiLCAiX2NvbmZpZ0FmdGVyTWVyZ2UiLCAiX3R5cGVDaGVja0NvbmZpZyIsICJqc29uQ29uZmlnIiwgImNvbnN0cnVjdG9yIiwgImNvbmZpZ1R5cGVzIiwgInByb3BlcnR5IiwgImV4cGVjdGVkVHlwZXMiLCAidmFsdWVUeXBlIiwgIlJlZ0V4cCIsICJ0ZXN0IiwgIlR5cGVFcnJvciIsICJ0b1VwcGVyQ2FzZSIsICJWRVJTSU9OIiwgIkJhc2VDb21wb25lbnQiLCAiX2VsZW1lbnQiLCAiX2NvbmZpZyIsICJEYXRhIiwgIkRBVEFfS0VZIiwgImRpc3Bvc2UiLCAiRVZFTlRfS0VZIiwgInByb3BlcnR5TmFtZSIsICJnZXRPd25Qcm9wZXJ0eU5hbWVzIiwgIl9xdWV1ZUNhbGxiYWNrIiwgImlzQW5pbWF0ZWQiLCAiZ2V0SW5zdGFuY2UiLCAiZ2V0T3JDcmVhdGVJbnN0YW5jZSIsICJldmVudE5hbWUiLCAiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCAiY29tcG9uZW50IiwgIm1ldGhvZCIsICJjbGlja0V2ZW50IiwgInRhZ05hbWUiLCAiRVZFTlRfQ0xPU0UiLCAiRVZFTlRfQ0xPU0VEIiwgIkNMQVNTX05BTUVfRkFERSIsICJDTEFTU19OQU1FX1NIT1ciLCAiQWxlcnQiLCAiY2xvc2UiLCAiY2xvc2VFdmVudCIsICJfZGVzdHJveUVsZW1lbnQiLCAiZWFjaCIsICJkYXRhIiwgIkRBVEFfQVBJX0tFWSIsICJDTEFTU19OQU1FX0FDVElWRSIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsICJFVkVOVF9DTElDS19EQVRBX0FQSSIsICJCdXR0b24iLCAidG9nZ2xlIiwgImJ1dHRvbiIsICJTZWxlY3RvckVuZ2luZSIsICJjb25jYXQiLCAiRWxlbWVudCIsICJmaW5kT25lIiwgImNoaWxkcmVuIiwgImNoaWxkIiwgIm1hdGNoZXMiLCAicGFyZW50cyIsICJhbmNlc3RvciIsICJwcmV2IiwgInByZXZpb3VzIiwgInByZXZpb3VzRWxlbWVudFNpYmxpbmciLCAibmV4dCIsICJuZXh0RWxlbWVudFNpYmxpbmciLCAiZm9jdXNhYmxlQ2hpbGRyZW4iLCAiZm9jdXNhYmxlcyIsICJtYXAiLCAiam9pbiIsICJlbCIsICJFVkVOVF9UT1VDSFNUQVJUIiwgIkVWRU5UX1RPVUNITU9WRSIsICJFVkVOVF9UT1VDSEVORCIsICJFVkVOVF9QT0lOVEVSRE9XTiIsICJFVkVOVF9QT0lOVEVSVVAiLCAiUE9JTlRFUl9UWVBFX1RPVUNIIiwgIlBPSU5URVJfVFlQRV9QRU4iLCAiQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UIiwgIlNXSVBFX1RIUkVTSE9MRCIsICJlbmRDYWxsYmFjayIsICJsZWZ0Q2FsbGJhY2siLCAicmlnaHRDYWxsYmFjayIsICJTd2lwZSIsICJpc1N1cHBvcnRlZCIsICJfZGVsdGFYIiwgIl9zdXBwb3J0UG9pbnRlckV2ZW50cyIsICJQb2ludGVyRXZlbnQiLCAiX2luaXRFdmVudHMiLCAiX3N0YXJ0IiwgInRvdWNoZXMiLCAiY2xpZW50WCIsICJfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaCIsICJfZW5kIiwgIl9oYW5kbGVTd2lwZSIsICJfbW92ZSIsICJhYnNEZWx0YVgiLCAiYWJzIiwgImRpcmVjdGlvbiIsICJhZGQiLCAicG9pbnRlclR5cGUiLCAibmF2aWdhdG9yIiwgIm1heFRvdWNoUG9pbnRzIiwgIkFSUk9XX0xFRlRfS0VZIiwgIkFSUk9XX1JJR0hUX0tFWSIsICJUT1VDSEVWRU5UX0NPTVBBVF9XQUlUIiwgIk9SREVSX05FWFQiLCAiT1JERVJfUFJFViIsICJESVJFQ1RJT05fTEVGVCIsICJESVJFQ1RJT05fUklHSFQiLCAiRVZFTlRfU0xJREUiLCAiRVZFTlRfU0xJRCIsICJFVkVOVF9LRVlET1dOIiwgIkVWRU5UX01PVVNFRU5URVIiLCAiRVZFTlRfTU9VU0VMRUFWRSIsICJFVkVOVF9EUkFHX1NUQVJUIiwgIkVWRU5UX0xPQURfREFUQV9BUEkiLCAiQ0xBU1NfTkFNRV9DQVJPVVNFTCIsICJDTEFTU19OQU1FX1NMSURFIiwgIkNMQVNTX05BTUVfRU5EIiwgIkNMQVNTX05BTUVfU1RBUlQiLCAiQ0xBU1NfTkFNRV9ORVhUIiwgIkNMQVNTX05BTUVfUFJFViIsICJTRUxFQ1RPUl9BQ1RJVkUiLCAiU0VMRUNUT1JfSVRFTSIsICJTRUxFQ1RPUl9BQ1RJVkVfSVRFTSIsICJTRUxFQ1RPUl9JVEVNX0lNRyIsICJTRUxFQ1RPUl9JTkRJQ0FUT1JTIiwgIlNFTEVDVE9SX0RBVEFfU0xJREUiLCAiU0VMRUNUT1JfREFUQV9SSURFIiwgIktFWV9UT19ESVJFQ1RJT04iLCAiaW50ZXJ2YWwiLCAia2V5Ym9hcmQiLCAicGF1c2UiLCAicmlkZSIsICJ0b3VjaCIsICJ3cmFwIiwgIkNhcm91c2VsIiwgIl9pbnRlcnZhbCIsICJfYWN0aXZlRWxlbWVudCIsICJfaXNTbGlkaW5nIiwgInRvdWNoVGltZW91dCIsICJfc3dpcGVIZWxwZXIiLCAiX2luZGljYXRvcnNFbGVtZW50IiwgIl9hZGRFdmVudExpc3RlbmVycyIsICJjeWNsZSIsICJfc2xpZGUiLCAibmV4dFdoZW5WaXNpYmxlIiwgImhpZGRlbiIsICJfY2xlYXJJbnRlcnZhbCIsICJfdXBkYXRlSW50ZXJ2YWwiLCAic2V0SW50ZXJ2YWwiLCAiX21heWJlRW5hYmxlQ3ljbGUiLCAidG8iLCAiaXRlbXMiLCAiX2dldEl0ZW1zIiwgImFjdGl2ZUluZGV4IiwgIl9nZXRJdGVtSW5kZXgiLCAiX2dldEFjdGl2ZSIsICJvcmRlciIsICJkZWZhdWx0SW50ZXJ2YWwiLCAiX2tleWRvd24iLCAiX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMiLCAiaW1nIiwgImVuZENhbGxCYWNrIiwgImNsZWFyVGltZW91dCIsICJzd2lwZUNvbmZpZyIsICJfZGlyZWN0aW9uVG9PcmRlciIsICJfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCIsICJhY3RpdmVJbmRpY2F0b3IiLCAibmV3QWN0aXZlSW5kaWNhdG9yIiwgImVsZW1lbnRJbnRlcnZhbCIsICJwYXJzZUludCIsICJpc05leHQiLCAibmV4dEVsZW1lbnQiLCAibmV4dEVsZW1lbnRJbmRleCIsICJ0cmlnZ2VyRXZlbnQiLCAiX29yZGVyVG9EaXJlY3Rpb24iLCAic2xpZGVFdmVudCIsICJpc0N5Y2xpbmciLCAiZGlyZWN0aW9uYWxDbGFzc05hbWUiLCAib3JkZXJDbGFzc05hbWUiLCAiY29tcGxldGVDYWxsQmFjayIsICJfaXNBbmltYXRlZCIsICJjbGVhckludGVydmFsIiwgImNhcm91c2VsIiwgInNsaWRlSW5kZXgiLCAiY2Fyb3VzZWxzIiwgIkVWRU5UX1NIT1ciLCAiRVZFTlRfU0hPV04iLCAiRVZFTlRfSElERSIsICJFVkVOVF9ISURERU4iLCAiQ0xBU1NfTkFNRV9DT0xMQVBTRSIsICJDTEFTU19OQU1FX0NPTExBUFNJTkciLCAiQ0xBU1NfTkFNRV9DT0xMQVBTRUQiLCAiQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4iLCAiQ0xBU1NfTkFNRV9IT1JJWk9OVEFMIiwgIldJRFRIIiwgIkhFSUdIVCIsICJTRUxFQ1RPUl9BQ1RJVkVTIiwgInBhcmVudCIsICJDb2xsYXBzZSIsICJfaXNUcmFuc2l0aW9uaW5nIiwgIl90cmlnZ2VyQXJyYXkiLCAidG9nZ2xlTGlzdCIsICJlbGVtIiwgImZpbHRlckVsZW1lbnQiLCAiZm91bmRFbGVtZW50IiwgIl9pbml0aWFsaXplQ2hpbGRyZW4iLCAiX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsICJfaXNTaG93biIsICJoaWRlIiwgInNob3ciLCAiYWN0aXZlQ2hpbGRyZW4iLCAiX2dldEZpcnN0TGV2ZWxDaGlsZHJlbiIsICJzdGFydEV2ZW50IiwgImFjdGl2ZUluc3RhbmNlIiwgImRpbWVuc2lvbiIsICJfZ2V0RGltZW5zaW9uIiwgInN0eWxlIiwgImNvbXBsZXRlIiwgImNhcGl0YWxpemVkRGltZW5zaW9uIiwgInNjcm9sbFNpemUiLCAiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwgInNlbGVjdGVkIiwgInRyaWdnZXJBcnJheSIsICJpc09wZW4iLCAic2VsZWN0b3JFbGVtZW50cyIsICJFU0NBUEVfS0VZIiwgIlRBQl9LRVkiLCAiQVJST1dfVVBfS0VZIiwgIkFSUk9XX0RPV05fS0VZIiwgIlJJR0hUX01PVVNFX0JVVFRPTiIsICJFVkVOVF9LRVlET1dOX0RBVEFfQVBJIiwgIkVWRU5UX0tFWVVQX0RBVEFfQVBJIiwgIkNMQVNTX05BTUVfRFJPUFVQIiwgIkNMQVNTX05BTUVfRFJPUEVORCIsICJDTEFTU19OQU1FX0RST1BTVEFSVCIsICJDTEFTU19OQU1FX0RST1BVUF9DRU5URVIiLCAiQ0xBU1NfTkFNRV9EUk9QRE9XTl9DRU5URVIiLCAiU0VMRUNUT1JfREFUQV9UT0dHTEVfU0hPV04iLCAiU0VMRUNUT1JfTUVOVSIsICJTRUxFQ1RPUl9OQVZCQVIiLCAiU0VMRUNUT1JfTkFWQkFSX05BViIsICJTRUxFQ1RPUl9WSVNJQkxFX0lURU1TIiwgIlBMQUNFTUVOVF9UT1AiLCAiUExBQ0VNRU5UX1RPUEVORCIsICJQTEFDRU1FTlRfQk9UVE9NIiwgIlBMQUNFTUVOVF9CT1RUT01FTkQiLCAiUExBQ0VNRU5UX1JJR0hUIiwgIlBMQUNFTUVOVF9MRUZUIiwgIlBMQUNFTUVOVF9UT1BDRU5URVIiLCAiUExBQ0VNRU5UX0JPVFRPTUNFTlRFUiIsICJhdXRvQ2xvc2UiLCAiYm91bmRhcnkiLCAiZGlzcGxheSIsICJvZmZzZXQiLCAicG9wcGVyQ29uZmlnIiwgInJlZmVyZW5jZSIsICJEcm9wZG93biIsICJfcG9wcGVyIiwgIl9wYXJlbnQiLCAiX21lbnUiLCAiX2luTmF2YmFyIiwgIl9kZXRlY3ROYXZiYXIiLCAic2hvd0V2ZW50IiwgIl9jcmVhdGVQb3BwZXIiLCAiZm9jdXMiLCAiX2NvbXBsZXRlSGlkZSIsICJkZXN0cm95IiwgInVwZGF0ZSIsICJoaWRlRXZlbnQiLCAiUG9wcGVyIiwgInJlZmVyZW5jZUVsZW1lbnQiLCAiX2dldFBvcHBlckNvbmZpZyIsICJjcmVhdGVQb3BwZXIiLCAiX2dldFBsYWNlbWVudCIsICJwYXJlbnREcm9wZG93biIsICJpc0VuZCIsICJfZ2V0T2Zmc2V0IiwgInBvcHBlckRhdGEiLCAiZGVmYXVsdEJzUG9wcGVyQ29uZmlnIiwgInBsYWNlbWVudCIsICJtb2RpZmllcnMiLCAib3B0aW9ucyIsICJlbmFibGVkIiwgIl9zZWxlY3RNZW51SXRlbSIsICJjbGVhck1lbnVzIiwgIm9wZW5Ub2dnbGVzIiwgImNvbnRleHQiLCAiY29tcG9zZWRQYXRoIiwgImlzTWVudVRhcmdldCIsICJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCAiaXNJbnB1dCIsICJpc0VzY2FwZUV2ZW50IiwgImlzVXBPckRvd25FdmVudCIsICJnZXRUb2dnbGVCdXR0b24iLCAic3RvcFByb3BhZ2F0aW9uIiwgIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCAiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCAiUFJPUEVSVFlfUEFERElORyIsICJQUk9QRVJUWV9NQVJHSU4iLCAiU2Nyb2xsQmFySGVscGVyIiwgImdldFdpZHRoIiwgImRvY3VtZW50V2lkdGgiLCAiY2xpZW50V2lkdGgiLCAiaW5uZXJXaWR0aCIsICJ3aWR0aCIsICJfZGlzYWJsZU92ZXJGbG93IiwgIl9zZXRFbGVtZW50QXR0cmlidXRlcyIsICJjYWxjdWxhdGVkVmFsdWUiLCAicmVzZXQiLCAiX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCAiaXNPdmVyZmxvd2luZyIsICJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCAib3ZlcmZsb3ciLCAic3R5bGVQcm9wZXJ0eSIsICJzY3JvbGxiYXJXaWR0aCIsICJtYW5pcHVsYXRpb25DYWxsQmFjayIsICJzZXRQcm9wZXJ0eSIsICJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsICJhY3R1YWxWYWx1ZSIsICJyZW1vdmVQcm9wZXJ0eSIsICJjYWxsQmFjayIsICJzZWwiLCAiRVZFTlRfTU9VU0VET1dOIiwgImNsYXNzTmFtZSIsICJjbGlja0NhbGxiYWNrIiwgInJvb3RFbGVtZW50IiwgIkJhY2tkcm9wIiwgIl9pc0FwcGVuZGVkIiwgIl9hcHBlbmQiLCAiX2dldEVsZW1lbnQiLCAiX2VtdWxhdGVBbmltYXRpb24iLCAiYmFja2Ryb3AiLCAiY3JlYXRlRWxlbWVudCIsICJhcHBlbmQiLCAiRVZFTlRfRk9DVVNJTiIsICJFVkVOVF9LRVlET1dOX1RBQiIsICJUQUJfTkFWX0ZPUldBUkQiLCAiVEFCX05BVl9CQUNLV0FSRCIsICJhdXRvZm9jdXMiLCAidHJhcEVsZW1lbnQiLCAiRm9jdXNUcmFwIiwgIl9pc0FjdGl2ZSIsICJfbGFzdFRhYk5hdkRpcmVjdGlvbiIsICJhY3RpdmF0ZSIsICJfaGFuZGxlRm9jdXNpbiIsICJfaGFuZGxlS2V5ZG93biIsICJkZWFjdGl2YXRlIiwgImVsZW1lbnRzIiwgInNoaWZ0S2V5IiwgIkVWRU5UX0hJREVfUFJFVkVOVEVEIiwgIkVWRU5UX1JFU0laRSIsICJFVkVOVF9DTElDS19ESVNNSVNTIiwgIkVWRU5UX01PVVNFRE9XTl9ESVNNSVNTIiwgIkVWRU5UX0tFWURPV05fRElTTUlTUyIsICJDTEFTU19OQU1FX09QRU4iLCAiQ0xBU1NfTkFNRV9TVEFUSUMiLCAiT1BFTl9TRUxFQ1RPUiIsICJTRUxFQ1RPUl9ESUFMT0ciLCAiU0VMRUNUT1JfTU9EQUxfQk9EWSIsICJNb2RhbCIsICJfZGlhbG9nIiwgIl9iYWNrZHJvcCIsICJfaW5pdGlhbGl6ZUJhY2tEcm9wIiwgIl9mb2N1c3RyYXAiLCAiX2luaXRpYWxpemVGb2N1c1RyYXAiLCAiX3Njcm9sbEJhciIsICJfYWRqdXN0RGlhbG9nIiwgIl9zaG93RWxlbWVudCIsICJfaGlkZU1vZGFsIiwgImh0bWxFbGVtZW50IiwgImhhbmRsZVVwZGF0ZSIsICJzY3JvbGxUb3AiLCAibW9kYWxCb2R5IiwgInRyYW5zaXRpb25Db21wbGV0ZSIsICJfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbiIsICJldmVudDIiLCAiX3Jlc2V0QWRqdXN0bWVudHMiLCAiaXNNb2RhbE92ZXJmbG93aW5nIiwgInNjcm9sbEhlaWdodCIsICJjbGllbnRIZWlnaHQiLCAiaW5pdGlhbE92ZXJmbG93WSIsICJvdmVyZmxvd1kiLCAiaXNCb2R5T3ZlcmZsb3dpbmciLCAicGFkZGluZ0xlZnQiLCAicGFkZGluZ1JpZ2h0IiwgImFscmVhZHlPcGVuIiwgIkNMQVNTX05BTUVfU0hPV0lORyIsICJDTEFTU19OQU1FX0hJRElORyIsICJDTEFTU19OQU1FX0JBQ0tEUk9QIiwgInNjcm9sbCIsICJPZmZjYW52YXMiLCAiYmx1ciIsICJjb21wbGV0ZUNhbGxiYWNrIiwgInBvc2l0aW9uIiwgInVyaUF0dHJpYnV0ZXMiLCAiQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiIsICJTQUZFX1VSTF9QQVRURVJOIiwgIkRBVEFfVVJMX1BBVFRFUk4iLCAiYWxsb3dlZEF0dHJpYnV0ZSIsICJhdHRyaWJ1dGUiLCAiYWxsb3dlZEF0dHJpYnV0ZUxpc3QiLCAiYXR0cmlidXRlTmFtZSIsICJub2RlTmFtZSIsICJub2RlVmFsdWUiLCAiYXR0cmlidXRlUmVnZXgiLCAic29tZSIsICJyZWdleCIsICJEZWZhdWx0QWxsb3dsaXN0IiwgImEiLCAiYXJlYSIsICJiIiwgImJyIiwgImNvbCIsICJjb2RlIiwgImRpdiIsICJlbSIsICJociIsICJoMSIsICJoMiIsICJoMyIsICJoNCIsICJoNSIsICJoNiIsICJpIiwgImxpIiwgIm9sIiwgInAiLCAicHJlIiwgInMiLCAic21hbGwiLCAic3BhbiIsICJzdWIiLCAic3VwIiwgInN0cm9uZyIsICJ1IiwgInVsIiwgInNhbml0aXplSHRtbCIsICJ1bnNhZmVIdG1sIiwgImFsbG93TGlzdCIsICJzYW5pdGl6ZUZ1bmN0aW9uIiwgImRvbVBhcnNlciIsICJET01QYXJzZXIiLCAiY3JlYXRlZERvY3VtZW50IiwgInBhcnNlRnJvbVN0cmluZyIsICJlbGVtZW50TmFtZSIsICJhdHRyaWJ1dGVMaXN0IiwgImFsbG93ZWRBdHRyaWJ1dGVzIiwgImlubmVySFRNTCIsICJjb250ZW50IiwgImV4dHJhQ2xhc3MiLCAiaHRtbCIsICJzYW5pdGl6ZSIsICJzYW5pdGl6ZUZuIiwgInRlbXBsYXRlIiwgIkRlZmF1bHRDb250ZW50VHlwZSIsICJlbnRyeSIsICJUZW1wbGF0ZUZhY3RvcnkiLCAiZ2V0Q29udGVudCIsICJfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24iLCAiaGFzQ29udGVudCIsICJjaGFuZ2VDb250ZW50IiwgIl9jaGVja0NvbnRlbnQiLCAidG9IdG1sIiwgInRlbXBsYXRlV3JhcHBlciIsICJfbWF5YmVTYW5pdGl6ZSIsICJ0ZXh0IiwgIl9zZXRDb250ZW50IiwgImFyZyIsICJ0ZW1wbGF0ZUVsZW1lbnQiLCAiX3B1dEVsZW1lbnRJblRlbXBsYXRlIiwgInRleHRDb250ZW50IiwgIkRJU0FMTE9XRURfQVRUUklCVVRFUyIsICJDTEFTU19OQU1FX01PREFMIiwgIlNFTEVDVE9SX1RPT0xUSVBfSU5ORVIiLCAiU0VMRUNUT1JfTU9EQUwiLCAiRVZFTlRfTU9EQUxfSElERSIsICJUUklHR0VSX0hPVkVSIiwgIlRSSUdHRVJfRk9DVVMiLCAiVFJJR0dFUl9DTElDSyIsICJUUklHR0VSX01BTlVBTCIsICJFVkVOVF9JTlNFUlRFRCIsICJFVkVOVF9DTElDSyIsICJFVkVOVF9GT0NVU09VVCIsICJBdHRhY2htZW50TWFwIiwgIkFVVE8iLCAiVE9QIiwgIlJJR0hUIiwgIkJPVFRPTSIsICJMRUZUIiwgImFuaW1hdGlvbiIsICJjb250YWluZXIiLCAiY3VzdG9tQ2xhc3MiLCAiZGVsYXkiLCAiZmFsbGJhY2tQbGFjZW1lbnRzIiwgInRpdGxlIiwgIlRvb2x0aXAiLCAiX2lzRW5hYmxlZCIsICJfdGltZW91dCIsICJfaXNIb3ZlcmVkIiwgIl9hY3RpdmVUcmlnZ2VyIiwgIl90ZW1wbGF0ZUZhY3RvcnkiLCAiX25ld0NvbnRlbnQiLCAidGlwIiwgIl9zZXRMaXN0ZW5lcnMiLCAiX2ZpeFRpdGxlIiwgImVuYWJsZSIsICJkaXNhYmxlIiwgInRvZ2dsZUVuYWJsZWQiLCAiY2xpY2siLCAiX2xlYXZlIiwgIl9lbnRlciIsICJfaGlkZU1vZGFsSGFuZGxlciIsICJfZGlzcG9zZVBvcHBlciIsICJfaXNXaXRoQ29udGVudCIsICJzaGFkb3dSb290IiwgImlzSW5UaGVEb20iLCAib3duZXJEb2N1bWVudCIsICJfZ2V0VGlwRWxlbWVudCIsICJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsICJfZ2V0VGl0bGUiLCAiX2NyZWF0ZVRpcEVsZW1lbnQiLCAiX2dldENvbnRlbnRGb3JUZW1wbGF0ZSIsICJfZ2V0VGVtcGxhdGVGYWN0b3J5IiwgInRpcElkIiwgInNldENvbnRlbnQiLCAiX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldCIsICJfZ2V0RGVsZWdhdGVDb25maWciLCAiYXR0YWNobWVudCIsICJwaGFzZSIsICJzdGF0ZSIsICJ0cmlnZ2VycyIsICJldmVudEluIiwgImV2ZW50T3V0IiwgIl9zZXRUaW1lb3V0IiwgInRpbWVvdXQiLCAiZGF0YUF0dHJpYnV0ZXMiLCAiZGF0YUF0dHJpYnV0ZSIsICJTRUxFQ1RPUl9USVRMRSIsICJTRUxFQ1RPUl9DT05URU5UIiwgIlBvcG92ZXIiLCAiX2dldENvbnRlbnQiLCAiRVZFTlRfQUNUSVZBVEUiLCAiQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNIiwgIlNFTEVDVE9SX0RBVEFfU1BZIiwgIlNFTEVDVE9SX1RBUkdFVF9MSU5LUyIsICJTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCIsICJTRUxFQ1RPUl9OQVZfTElOS1MiLCAiU0VMRUNUT1JfTkFWX0lURU1TIiwgIlNFTEVDVE9SX0xJU1RfSVRFTVMiLCAiU0VMRUNUT1JfTElOS19JVEVNUyIsICJTRUxFQ1RPUl9EUk9QRE9XTiIsICJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCAicm9vdE1hcmdpbiIsICJzbW9vdGhTY3JvbGwiLCAidGhyZXNob2xkIiwgIlNjcm9sbFNweSIsICJfdGFyZ2V0TGlua3MiLCAiX29ic2VydmFibGVTZWN0aW9ucyIsICJfcm9vdEVsZW1lbnQiLCAiX2FjdGl2ZVRhcmdldCIsICJfb2JzZXJ2ZXIiLCAiX3ByZXZpb3VzU2Nyb2xsRGF0YSIsICJ2aXNpYmxlRW50cnlUb3AiLCAicGFyZW50U2Nyb2xsVG9wIiwgInJlZnJlc2giLCAiX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMiLCAiX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsIiwgImRpc2Nvbm5lY3QiLCAiX2dldE5ld09ic2VydmVyIiwgInNlY3Rpb24iLCAib2JzZXJ2ZSIsICJvYnNlcnZhYmxlU2VjdGlvbiIsICJoYXNoIiwgImhlaWdodCIsICJvZmZzZXRUb3AiLCAic2Nyb2xsVG8iLCAidG9wIiwgImJlaGF2aW9yIiwgIkludGVyc2VjdGlvbk9ic2VydmVyIiwgIl9vYnNlcnZlckNhbGxiYWNrIiwgInRhcmdldEVsZW1lbnQiLCAiaWQiLCAiX3Byb2Nlc3MiLCAidXNlclNjcm9sbHNEb3duIiwgImlzSW50ZXJzZWN0aW5nIiwgIl9jbGVhckFjdGl2ZUNsYXNzIiwgImVudHJ5SXNMb3dlclRoYW5QcmV2aW91cyIsICJ0YXJnZXRMaW5rcyIsICJhbmNob3IiLCAiX2FjdGl2YXRlUGFyZW50cyIsICJsaXN0R3JvdXAiLCAiaXRlbSIsICJhY3RpdmVOb2RlcyIsICJub2RlIiwgInNweSIsICJDTEFTU19EUk9QRE9XTiIsICJTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VIiwgIk5PVF9TRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCAiU0VMRUNUT1JfVEFCX1BBTkVMIiwgIlNFTEVDVE9SX09VVEVSIiwgIlNFTEVDVE9SX0lOTkVSIiwgIlNFTEVDVE9SX0lOTkVSX0VMRU0iLCAiU0VMRUNUT1JfREFUQV9UT0dHTEVfQUNUSVZFIiwgIlRhYiIsICJfc2V0SW5pdGlhbEF0dHJpYnV0ZXMiLCAiX2dldENoaWxkcmVuIiwgImlubmVyRWxlbSIsICJfZWxlbUlzQWN0aXZlIiwgImFjdGl2ZSIsICJfZ2V0QWN0aXZlRWxlbSIsICJfZGVhY3RpdmF0ZSIsICJfYWN0aXZhdGUiLCAicmVsYXRlZEVsZW0iLCAiX3RvZ2dsZURyb3BEb3duIiwgIm5leHRBY3RpdmVFbGVtZW50IiwgInByZXZlbnRTY3JvbGwiLCAiX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzIiwgIl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQiLCAiX2dldElubmVyRWxlbWVudCIsICJpc0FjdGl2ZSIsICJvdXRlckVsZW0iLCAiX2dldE91dGVyRWxlbWVudCIsICJfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsIiwgIm9wZW4iLCAiRVZFTlRfTU9VU0VPVkVSIiwgIkVWRU5UX01PVVNFT1VUIiwgIkNMQVNTX05BTUVfSElERSIsICJhdXRvaGlkZSIsICJUb2FzdCIsICJfaGFzTW91c2VJbnRlcmFjdGlvbiIsICJfaGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiIsICJfY2xlYXJUaW1lb3V0IiwgIl9tYXliZVNjaGVkdWxlSGlkZSIsICJpc1Nob3duIiwgIl9vbkludGVyYWN0aW9uIiwgImlzSW50ZXJhY3RpbmciLCAiJCIsICJpbXBvcnRfanF1ZXJ5IiwgIm1heCIsICIkIiwgIkN1c3RvbUV2ZW50IiwgImNsb3N1cmUyIiwgImdsb2JhbCIsICJvZmZzZXQiLCAiZ2xvYmFsIiwgImxpdmVTb2NrZXQiLCAiY2xvc3VyZSIsICJoYXNoIiwgImRlYm91bmNlIiwgIm5vb3AiLCAiJCIsICJ0b3BiYXIiXQp9Cg==
+//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9qcXVlcnkvZGlzdC9qcXVlcnkuanMiLCAiLi4vLi4vLi4vYXNzZXRzL3ZlbmRvci9wcmlzbS5qcyIsICIuLi8uLi8uLi9hc3NldHMvdmVuZG9yL3RvcGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMvYXBwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2luZGV4LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlTmFtZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9hcHBseVN0eWxlcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvdXNlckFnZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc0xheW91dFZpZXdwb3J0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldExheW91dFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2NvbnRhaW5zLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1RhYmxlRWxlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXJyb3cuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0V2luZG93U2Nyb2xsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldERvY3VtZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVPZmZzZXRzLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9mbGlwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9oaWRlLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0QWx0QXhpcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRIVE1MRWxlbWVudFNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZVNjcm9sbC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9vcmRlck1vZGlmaWVycy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9kZWJvdW5jZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9jcmVhdGVQb3BwZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLWxpdGUuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vZGF0YS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9pbmRleC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZG9tL2V2ZW50LWhhbmRsZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2RvbS9tYW5pcHVsYXRvci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9jb25maWcuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Jhc2UtY29tcG9uZW50LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9kb20vc2VsZWN0b3ItZW5naW5lLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2FsZXJ0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9idXR0b24uanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvc3dpcGUuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL2Nhcm91c2VsLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy9jb2xsYXBzZS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvZHJvcGRvd24uanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvYmFja2Ryb3AuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvZm9jdXN0cmFwLmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy91dGlsL3Njcm9sbGJhci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvbW9kYWwuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL29mZmNhbnZhcy5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdXRpbC9zYW5pdGl6ZXIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3V0aWwvdGVtcGxhdGUtZmFjdG9yeS5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvdG9vbHRpcC5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvcG9wb3Zlci5qcyIsICIuLi8uLi8uLi9hc3NldHMvbm9kZV9tb2R1bGVzL2Jvb3RzdHJhcC9qcy9zcmMvc2Nyb2xsc3B5LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9ub2RlX21vZHVsZXMvYm9vdHN0cmFwL2pzL3NyYy90YWIuanMiLCAiLi4vLi4vLi4vYXNzZXRzL25vZGVfbW9kdWxlcy9ib290c3RyYXAvanMvc3JjL3RvYXN0LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9qcy9yZXBvc2l0b3J5LmpzIiwgIi4uLy4uLy4uL2Fzc2V0cy9qcy9rbXhfYW5pbS5qcyIsICIuLi8uLi8uLi9hc3NldHMvanMva214X2NvbG9ycy5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfaHRtbC9wcml2L3N0YXRpYy9waG9lbml4X2h0bWwuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3V0aWxzLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3B1c2guanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3RpbWVyLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9jaGFubmVsLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9hamF4LmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peC9hc3NldHMvanMvcGhvZW5peC9sb25ncG9sbC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXgvYXNzZXRzL2pzL3Bob2VuaXgvcHJlc2VuY2UuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3NlcmlhbGl6ZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4L2Fzc2V0cy9qcy9waG9lbml4L3NvY2tldC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9jb25zdGFudHMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZW50cnlfdXBsb2FkZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdXRpbHMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvYnJvd3Nlci5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9kb20uanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdXBsb2FkX2VudHJ5LmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2xpdmVfdXBsb2FkZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvaG9va3MuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvZG9tX3Bvc3RfbW9ycGhfcmVzdG9yZXIuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvbm9kZV9tb2R1bGVzL21vcnBoZG9tL2Rpc3QvbW9ycGhkb20tZXNtLmpzIiwgIi4uLy4uLy4uL2RlcHMvcGhvZW5peF9saXZlX3ZpZXcvYXNzZXRzL2pzL3Bob2VuaXhfbGl2ZV92aWV3L2RvbV9wYXRjaC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9yZW5kZXJlZC5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy92aWV3X2hvb2suanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvanMuanMiLCAiLi4vLi4vLi4vZGVwcy9waG9lbml4X2xpdmVfdmlldy9hc3NldHMvanMvcGhvZW5peF9saXZlX3ZpZXcvdmlldy5qcyIsICIuLi8uLi8uLi9kZXBzL3Bob2VuaXhfbGl2ZV92aWV3L2Fzc2V0cy9qcy9waG9lbml4X2xpdmVfdmlldy9saXZlX3NvY2tldC5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjcuMVxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIENvcHlyaWdodCBPcGVuSlMgRm91bmRhdGlvbiBhbmQgb3RoZXIgY29udHJpYnV0b3JzXG4gKiBSZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2VcbiAqIGh0dHBzOi8vanF1ZXJ5Lm9yZy9saWNlbnNlXG4gKlxuICogRGF0ZTogMjAyMy0wOC0yOFQxMzozN1pcbiAqL1xuKCBmdW5jdGlvbiggZ2xvYmFsLCBmYWN0b3J5ICkge1xuXG5cdFwidXNlIHN0cmljdFwiO1xuXG5cdGlmICggdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgbW9kdWxlLmV4cG9ydHMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyBGb3IgQ29tbW9uSlMgYW5kIENvbW1vbkpTLWxpa2UgZW52aXJvbm1lbnRzIHdoZXJlIGEgcHJvcGVyIGB3aW5kb3dgXG5cdFx0Ly8gaXMgcHJlc2VudCwgZXhlY3V0ZSB0aGUgZmFjdG9yeSBhbmQgZ2V0IGpRdWVyeS5cblx0XHQvLyBGb3IgZW52aXJvbm1lbnRzIHRoYXQgZG8gbm90IGhhdmUgYSBgd2luZG93YCB3aXRoIGEgYGRvY3VtZW50YFxuXHRcdC8vIChzdWNoIGFzIE5vZGUuanMpLCBleHBvc2UgYSBmYWN0b3J5IGFzIG1vZHVsZS5leHBvcnRzLlxuXHRcdC8vIFRoaXMgYWNjZW50dWF0ZXMgdGhlIG5lZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiBhIHJlYWwgYHdpbmRvd2AuXG5cdFx0Ly8gZS5nLiB2YXIgalF1ZXJ5ID0gcmVxdWlyZShcImpxdWVyeVwiKSh3aW5kb3cpO1xuXHRcdC8vIFNlZSB0aWNrZXQgdHJhYy0xNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG5cdFx0Ly8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG5cdFx0Ly8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cblx0XHQvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG5cdFx0Ly8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41XG5cdFx0Ly8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIGNvbGxlY3Rpb25zXG5cdFx0Ly8gKGUuZy4sIGB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikgPT09IFwiZnVuY3Rpb25cImApLiAoZ2gtNDc1Nilcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdHR5cGVvZiBvYmouaXRlbSAhPT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXIgdmVyc2lvbiA9IFwiMy43LjFcIixcblxuXHRyaHRtbFN1ZmZpeCA9IC9IVE1MJC9pLFxuXG5cdC8vIERlZmluZSBhIGxvY2FsIGNvcHkgb2YgalF1ZXJ5XG5cdGpRdWVyeSA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblxuXHRcdC8vIFRoZSBqUXVlcnkgb2JqZWN0IGlzIGFjdHVhbGx5IGp1c3QgdGhlIGluaXQgY29uc3RydWN0b3IgJ2VuaGFuY2VkJ1xuXHRcdC8vIE5lZWQgaW5pdCBpZiBqUXVlcnkgaXMgY2FsbGVkIChqdXN0IGFsbG93IGVycm9yIHRvIGJlIHRocm93biBpZiBub3QgaW5jbHVkZWQpXG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuZm4uaW5pdCggc2VsZWN0b3IsIGNvbnRleHQgKTtcblx0fTtcblxualF1ZXJ5LmZuID0galF1ZXJ5LnByb3RvdHlwZSA9IHtcblxuXHQvLyBUaGUgY3VycmVudCB2ZXJzaW9uIG9mIGpRdWVyeSBiZWluZyB1c2VkXG5cdGpxdWVyeTogdmVyc2lvbixcblxuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LFxuXG5cdC8vIFRoZSBkZWZhdWx0IGxlbmd0aCBvZiBhIGpRdWVyeSBvYmplY3QgaXMgMFxuXHRsZW5ndGg6IDAsXG5cblx0dG9BcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0fSxcblxuXHQvLyBHZXQgdGhlIE50aCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIGVsZW1lbnQgc2V0IE9SXG5cdC8vIEdldCB0aGUgd2hvbGUgbWF0Y2hlZCBlbGVtZW50IHNldCBhcyBhIGNsZWFuIGFycmF5XG5cdGdldDogZnVuY3Rpb24oIG51bSApIHtcblxuXHRcdC8vIFJldHVybiBhbGwgdGhlIGVsZW1lbnRzIGluIGEgY2xlYW4gYXJyYXlcblx0XHRpZiAoIG51bSA9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHNsaWNlLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4ganVzdCB0aGUgb25lIGVsZW1lbnQgZnJvbSB0aGUgc2V0XG5cdFx0cmV0dXJuIG51bSA8IDAgPyB0aGlzWyBudW0gKyB0aGlzLmxlbmd0aCBdIDogdGhpc1sgbnVtIF07XG5cdH0sXG5cblx0Ly8gVGFrZSBhbiBhcnJheSBvZiBlbGVtZW50cyBhbmQgcHVzaCBpdCBvbnRvIHRoZSBzdGFja1xuXHQvLyAocmV0dXJuaW5nIHRoZSBuZXcgbWF0Y2hlZCBlbGVtZW50IHNldClcblx0cHVzaFN0YWNrOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cblx0XHQvLyBCdWlsZCBhIG5ldyBqUXVlcnkgbWF0Y2hlZCBlbGVtZW50IHNldFxuXHRcdHZhciByZXQgPSBqUXVlcnkubWVyZ2UoIHRoaXMuY29uc3RydWN0b3IoKSwgZWxlbXMgKTtcblxuXHRcdC8vIEFkZCB0aGUgb2xkIG9iamVjdCBvbnRvIHRoZSBzdGFjayAoYXMgYSByZWZlcmVuY2UpXG5cdFx0cmV0LnByZXZPYmplY3QgPSB0aGlzO1xuXG5cdFx0Ly8gUmV0dXJuIHRoZSBuZXdseS1mb3JtZWQgZWxlbWVudCBzZXRcblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdC8vIEV4ZWN1dGUgYSBjYWxsYmFjayBmb3IgZXZlcnkgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG5cdGVhY2g6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmVhY2goIHRoaXMsIGNhbGxiYWNrICk7XG5cdH0sXG5cblx0bWFwOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkubWFwKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBjYWxsYmFjay5jYWxsKCBlbGVtLCBpLCBlbGVtICk7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0c2xpY2U6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggc2xpY2UuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApICk7XG5cdH0sXG5cblx0Zmlyc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAwICk7XG5cdH0sXG5cblx0bGFzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIC0xICk7XG5cdH0sXG5cblx0ZXZlbjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuICggaSArIDEgKSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0b2RkOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gaSAlIDI7XG5cdFx0fSApICk7XG5cdH0sXG5cblx0ZXE6IGZ1bmN0aW9uKCBpICkge1xuXHRcdHZhciBsZW4gPSB0aGlzLmxlbmd0aCxcblx0XHRcdGogPSAraSArICggaSA8IDAgPyBsZW4gOiAwICk7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqID49IDAgJiYgaiA8IGxlbiA/IFsgdGhpc1sgaiBdIF0gOiBbXSApO1xuXHR9LFxuXG5cdGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHJldk9iamVjdCB8fCB0aGlzLmNvbnN0cnVjdG9yKCk7XG5cdH0sXG5cblx0Ly8gRm9yIGludGVybmFsIHVzZSBvbmx5LlxuXHQvLyBCZWhhdmVzIGxpa2UgYW4gQXJyYXkncyBtZXRob2QsIG5vdCBsaWtlIGEgalF1ZXJ5IG1ldGhvZC5cblx0cHVzaDogcHVzaCxcblx0c29ydDogYXJyLnNvcnQsXG5cdHNwbGljZTogYXJyLnNwbGljZVxufTtcblxualF1ZXJ5LmV4dGVuZCA9IGpRdWVyeS5mbi5leHRlbmQgPSBmdW5jdGlvbigpIHtcblx0dmFyIG9wdGlvbnMsIG5hbWUsIHNyYywgY29weSwgY29weUlzQXJyYXksIGNsb25lLFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgMCBdIHx8IHt9LFxuXHRcdGkgPSAxLFxuXHRcdGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cdFx0ZGVlcCA9IGZhbHNlO1xuXG5cdC8vIEhhbmRsZSBhIGRlZXAgY29weSBzaXR1YXRpb25cblx0aWYgKCB0eXBlb2YgdGFyZ2V0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRkZWVwID0gdGFyZ2V0O1xuXG5cdFx0Ly8gU2tpcCB0aGUgYm9vbGVhbiBhbmQgdGhlIHRhcmdldFxuXHRcdHRhcmdldCA9IGFyZ3VtZW50c1sgaSBdIHx8IHt9O1xuXHRcdGkrKztcblx0fVxuXG5cdC8vIEhhbmRsZSBjYXNlIHdoZW4gdGFyZ2V0IGlzIGEgc3RyaW5nIG9yIHNvbWV0aGluZyAocG9zc2libGUgaW4gZGVlcCBjb3B5KVxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgIT09IFwib2JqZWN0XCIgJiYgIWlzRnVuY3Rpb24oIHRhcmdldCApICkge1xuXHRcdHRhcmdldCA9IHt9O1xuXHR9XG5cblx0Ly8gRXh0ZW5kIGpRdWVyeSBpdHNlbGYgaWYgb25seSBvbmUgYXJndW1lbnQgaXMgcGFzc2VkXG5cdGlmICggaSA9PT0gbGVuZ3RoICkge1xuXHRcdHRhcmdldCA9IHRoaXM7XG5cdFx0aS0tO1xuXHR9XG5cblx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cblx0XHQvLyBPbmx5IGRlYWwgd2l0aCBub24tbnVsbC91bmRlZmluZWQgdmFsdWVzXG5cdFx0aWYgKCAoIG9wdGlvbnMgPSBhcmd1bWVudHNbIGkgXSApICE9IG51bGwgKSB7XG5cblx0XHRcdC8vIEV4dGVuZCB0aGUgYmFzZSBvYmplY3Rcblx0XHRcdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRcdFx0Y29weSA9IG9wdGlvbnNbIG5hbWUgXTtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IE9iamVjdC5wcm90b3R5cGUgcG9sbHV0aW9uXG5cdFx0XHRcdC8vIFByZXZlbnQgbmV2ZXItZW5kaW5nIGxvb3Bcblx0XHRcdFx0aWYgKCBuYW1lID09PSBcIl9fcHJvdG9fX1wiIHx8IHRhcmdldCA9PT0gY29weSApIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlY3Vyc2UgaWYgd2UncmUgbWVyZ2luZyBwbGFpbiBvYmplY3RzIG9yIGFycmF5c1xuXHRcdFx0XHRpZiAoIGRlZXAgJiYgY29weSAmJiAoIGpRdWVyeS5pc1BsYWluT2JqZWN0KCBjb3B5ICkgfHxcblx0XHRcdFx0XHQoIGNvcHlJc0FycmF5ID0gQXJyYXkuaXNBcnJheSggY29weSApICkgKSApIHtcblx0XHRcdFx0XHRzcmMgPSB0YXJnZXRbIG5hbWUgXTtcblxuXHRcdFx0XHRcdC8vIEVuc3VyZSBwcm9wZXIgdHlwZSBmb3IgdGhlIHNvdXJjZSB2YWx1ZVxuXHRcdFx0XHRcdGlmICggY29weUlzQXJyYXkgJiYgIUFycmF5LmlzQXJyYXkoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCAhY29weUlzQXJyYXkgJiYgIWpRdWVyeS5pc1BsYWluT2JqZWN0KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0ge307XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGNsb25lID0gc3JjO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb3B5SXNBcnJheSA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0Ly8gTmV2ZXIgbW92ZSBvcmlnaW5hbCBvYmplY3RzLCBjbG9uZSB0aGVtXG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBqUXVlcnkuZXh0ZW5kKCBkZWVwLCBjbG9uZSwgY29weSApO1xuXG5cdFx0XHRcdC8vIERvbid0IGJyaW5nIGluIHVuZGVmaW5lZCB2YWx1ZXNcblx0XHRcdFx0fSBlbHNlIGlmICggY29weSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0gY29weTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbW9kaWZpZWQgb2JqZWN0XG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gVW5pcXVlIGZvciBlYWNoIGNvcHkgb2YgalF1ZXJ5IG9uIHRoZSBwYWdlXG5cdGV4cGFuZG86IFwialF1ZXJ5XCIgKyAoIHZlcnNpb24gKyBNYXRoLnJhbmRvbSgpICkucmVwbGFjZSggL1xcRC9nLCBcIlwiICksXG5cblx0Ly8gQXNzdW1lIGpRdWVyeSBpcyByZWFkeSB3aXRob3V0IHRoZSByZWFkeSBtb2R1bGVcblx0aXNSZWFkeTogdHJ1ZSxcblxuXHRlcnJvcjogZnVuY3Rpb24oIG1zZyApIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoIG1zZyApO1xuXHR9LFxuXG5cdG5vb3A6IGZ1bmN0aW9uKCkge30sXG5cblx0aXNQbGFpbk9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgcHJvdG8sIEN0b3I7XG5cblx0XHQvLyBEZXRlY3Qgb2J2aW91cyBuZWdhdGl2ZXNcblx0XHQvLyBVc2UgdG9TdHJpbmcgaW5zdGVhZCBvZiBqUXVlcnkudHlwZSB0byBjYXRjaCBob3N0IG9iamVjdHNcblx0XHRpZiAoICFvYmogfHwgdG9TdHJpbmcuY2FsbCggb2JqICkgIT09IFwiW29iamVjdCBPYmplY3RdXCIgKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cHJvdG8gPSBnZXRQcm90byggb2JqICk7XG5cblx0XHQvLyBPYmplY3RzIHdpdGggbm8gcHJvdG90eXBlIChlLmcuLCBgT2JqZWN0LmNyZWF0ZSggbnVsbCApYCkgYXJlIHBsYWluXG5cdFx0aWYgKCAhcHJvdG8gKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHQvLyBPYmplY3RzIHdpdGggcHJvdG90eXBlIGFyZSBwbGFpbiBpZmYgdGhleSB3ZXJlIGNvbnN0cnVjdGVkIGJ5IGEgZ2xvYmFsIE9iamVjdCBmdW5jdGlvblxuXHRcdEN0b3IgPSBoYXNPd24uY2FsbCggcHJvdG8sIFwiY29uc3RydWN0b3JcIiApICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuXHRcdHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIGZuVG9TdHJpbmcuY2FsbCggQ3RvciApID09PSBPYmplY3RGdW5jdGlvblN0cmluZztcblx0fSxcblxuXHRpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBuYW1lO1xuXG5cdFx0Zm9yICggbmFtZSBpbiBvYmogKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9LFxuXG5cdC8vIEV2YWx1YXRlcyBhIHNjcmlwdCBpbiBhIHByb3ZpZGVkIGNvbnRleHQ7IGZhbGxzIGJhY2sgdG8gdGhlIGdsb2JhbCBvbmVcblx0Ly8gaWYgbm90IHNwZWNpZmllZC5cblx0Z2xvYmFsRXZhbDogZnVuY3Rpb24oIGNvZGUsIG9wdGlvbnMsIGRvYyApIHtcblx0XHRET01FdmFsKCBjb2RlLCB7IG5vbmNlOiBvcHRpb25zICYmIG9wdGlvbnMubm9uY2UgfSwgZG9jICk7XG5cdH0sXG5cblx0ZWFjaDogZnVuY3Rpb24oIG9iaiwgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGxlbmd0aCwgaSA9IDA7XG5cblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBvYmogKSApIHtcblx0XHRcdGxlbmd0aCA9IG9iai5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBvYmogKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iajtcblx0fSxcblxuXG5cdC8vIFJldHJpZXZlIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuXHR0ZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbm9kZSxcblx0XHRcdHJldCA9IFwiXCIsXG5cdFx0XHRpID0gMCxcblx0XHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0XHQvLyBJZiBubyBub2RlVHlwZSwgdGhpcyBpcyBleHBlY3RlZCB0byBiZSBhbiBhcnJheVxuXHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRcdHJldCArPSBqUXVlcnkudGV4dCggbm9kZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSAxMSApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH1cblx0XHRpZiAoIG5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZG9jdW1lbnRFbGVtZW50LnRleHRDb250ZW50O1xuXHRcdH1cblx0XHRpZiAoIG5vZGVUeXBlID09PSAzIHx8IG5vZGVUeXBlID09PSA0ICkge1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHRcdH1cblxuXHRcdC8vIERvIG5vdCBpbmNsdWRlIGNvbW1lbnQgb3IgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbiBub2Rlc1xuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyByZXN1bHRzIGlzIGZvciBpbnRlcm5hbCB1c2FnZSBvbmx5XG5cdG1ha2VBcnJheTogZnVuY3Rpb24oIGFyciwgcmVzdWx0cyApIHtcblx0XHR2YXIgcmV0ID0gcmVzdWx0cyB8fCBbXTtcblxuXHRcdGlmICggYXJyICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGlzQXJyYXlMaWtlKCBPYmplY3QoIGFyciApICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggcmV0LFxuXHRcdFx0XHRcdHR5cGVvZiBhcnIgPT09IFwic3RyaW5nXCIgP1xuXHRcdFx0XHRcdFx0WyBhcnIgXSA6IGFyclxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5jYWxsKCByZXQsIGFyciApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0aW5BcnJheTogZnVuY3Rpb24oIGVsZW0sIGFyciwgaSApIHtcblx0XHRyZXR1cm4gYXJyID09IG51bGwgPyAtMSA6IGluZGV4T2YuY2FsbCggYXJyLCBlbGVtLCBpICk7XG5cdH0sXG5cblx0aXNYTUxEb2M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lc3BhY2UgPSBlbGVtICYmIGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdFx0ZG9jRWxlbSA9IGVsZW0gJiYgKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZVxuXHRcdC8vIGRvY3VtZW50IGZyYWdtZW50cy5cblx0XHRyZXR1cm4gIXJodG1sU3VmZml4LnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHRcdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuXHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufVxudmFyIHBvcCA9IGFyci5wb3A7XG5cblxudmFyIHNvcnQgPSBhcnIuc29ydDtcblxuXG52YXIgc3BsaWNlID0gYXJyLnNwbGljZTtcblxuXG52YXIgd2hpdGVzcGFjZSA9IFwiW1xcXFx4MjBcXFxcdFxcXFxyXFxcXG5cXFxcZl1cIjtcblxuXG52YXIgcnRyaW1DU1MgPSBuZXcgUmVnRXhwKFxuXHRcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgKyB3aGl0ZXNwYWNlICsgXCIrJFwiLFxuXHRcImdcIlxuKTtcblxuXG5cblxuLy8gTm90ZTogYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxualF1ZXJ5LmNvbnRhaW5zID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdHZhciBidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblxuXHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHQvLyBJRSBkb2Vzbid0IGhhdmUgYGNvbnRhaW5zYCBvbiBTVkcuXG5cdFx0YS5jb250YWlucyA/XG5cdFx0XHRhLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0KSApO1xufTtcblxuXG5cblxuLy8gQ1NTIHN0cmluZy9pZGVudGlmaWVyIHNlcmlhbGl6YXRpb25cbi8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xudmFyIHJjc3Nlc2NhcGUgPSAvKFtcXDAtXFx4MWZcXHg3Zl18Xi0/XFxkKXxeLSR8W15cXHg4MC1cXHVGRkZGXFx3LV0vZztcblxuZnVuY3Rpb24gZmNzc2VzY2FwZSggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0Ly8gVSswMDAwIE5VTEwgYmVjb21lcyBVK0ZGRkQgUkVQTEFDRU1FTlQgQ0hBUkFDVEVSXG5cdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHR9XG5cblx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICsgY2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdH1cblxuXHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdHJldHVybiBcIlxcXFxcIiArIGNoO1xufVxuXG5qUXVlcnkuZXNjYXBlU2VsZWN0b3IgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuXG5cblxudmFyIHByZWZlcnJlZERvYyA9IGRvY3VtZW50LFxuXHRwdXNoTmF0aXZlID0gcHVzaDtcblxuKCBmdW5jdGlvbigpIHtcblxudmFyIGksXG5cdEV4cHIsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXHRwdXNoID0gcHVzaE5hdGl2ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdGRvY3VtZW50LFxuXHRkb2N1bWVudEVsZW1lbnQsXG5cdGRvY3VtZW50SXNIVE1MLFxuXHRyYnVnZ3lRU0EsXG5cdG1hdGNoZXMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0galF1ZXJ5LmV4cGFuZG8sXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58aXNtYXB8XCIgK1xuXHRcdFwibG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpZGVudC10b2tlbi1kaWFncmFtXG5cdGlkZW50aWZpZXIgPSBcIig/OlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIj98XFxcXFxcXFxbXlxcXFxyXFxcXG5cXFxcZl18W1xcXFx3LV18W15cXDAtXFxcXHg3Zl0pK1wiLFxuXG5cdC8vIEF0dHJpYnV0ZSBzZWxlY3RvcnM6IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XSBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJsZWFkaW5nQ29tYmluYXRvciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0SUQ6IG5ldyBSZWdFeHAoIFwiXiMoXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRDTEFTUzogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRUQUc6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRBVFRSOiBuZXcgUmVnRXhwKCBcIl5cIiArIGF0dHJpYnV0ZXMgKSxcblx0XHRQU0VVRE86IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdENISUxEOiBuZXcgUmVnRXhwKFxuXHRcdFx0XCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICtcblx0XHRcdFx0d2hpdGVzcGFjZSArIFwiKihcXFxcZCspfCkpXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KVwiLCBcImlcIiApLFxuXHRcdGJvb2w6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0bmVlZHNDb250ZXh0OiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcKFteXFxcXHJcXFxcblxcXFxmXSlcIiwgXCJnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlLnNsaWNlKCAxICkgLSAweDEwMDAwO1xuXG5cdFx0aWYgKCBub25IZXggKSB7XG5cblx0XHRcdC8vIFN0cmlwIHRoZSBiYWNrc2xhc2ggcHJlZml4IGZyb20gYSBub24taGV4IGVzY2FwZSBzZXF1ZW5jZVxuXHRcdFx0cmV0dXJuIG5vbkhleDtcblx0XHR9XG5cblx0XHQvLyBSZXBsYWNlIGEgaGV4YWRlY2ltYWwgZXNjYXBlIHNlcXVlbmNlIHdpdGggdGhlIGVuY29kZWQgVW5pY29kZSBjb2RlIHBvaW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHQvLyBzdXJyb2dhdGUgcGFpclxuXHRcdHJldHVybiBoaWdoIDwgMCA/XG5cdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoICsgMHgxMDAwMCApIDpcblx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXM7IHNlZSBgc2V0RG9jdW1lbnRgLlxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIFJlbW92aW5nIHRoZSBmdW5jdGlvbiB3cmFwcGVyIGNhdXNlcyBhIFwiUGVybWlzc2lvbiBEZW5pZWRcIlxuXHQvLyBlcnJvciBpbiBJRS9FZGdlLlxuXHR1bmxvYWRIYW5kbGVyID0gZnVuY3Rpb24oKSB7XG5cdFx0c2V0RG9jdW1lbnQoKTtcblx0fSxcblxuXHRpbkRpc2FibGVkRmllbGRzZXQgPSBhZGRDb21iaW5hdG9yKFxuXHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZGlzYWJsZWQgPT09IHRydWUgJiYgbm9kZU5hbWUoIGVsZW0sIFwiZmllbGRzZXRcIiApO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KCBhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApICksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wXG5cdC8vIERldGVjdCBzaWxlbnRseSBmYWlsaW5nIHB1c2guYXBwbHlcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRhcnJbIHByZWZlcnJlZERvYy5jaGlsZE5vZGVzLmxlbmd0aCBdLm5vZGVUeXBlO1xufSBjYXRjaCAoIGUgKSB7XG5cdHB1c2ggPSB7XG5cdFx0YXBwbHk6IGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggZWxzICkgKTtcblx0XHR9LFxuXHRcdGNhbGw6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMSApICk7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBmaW5kKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRcdGlmICggZWxlbS5pZCA9PT0gbSApIHtcblx0XHRcdFx0XHRcdFx0XHRwdXNoLmNhbGwoIHJlc3VsdHMsIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBFbGVtZW50IGNvbnRleHRcblx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAmJiAoIGVsZW0gPSBuZXdDb250ZXh0LmdldEVsZW1lbnRCeUlkKCBtICkgKSAmJlxuXHRcdFx0XHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRwdXNoLmNhbGwoIHJlc3VsdHMsIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIG0gKSApO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRha2UgYWR2YW50YWdlIG9mIHF1ZXJ5U2VsZWN0b3JBbGxcblx0XHRcdGlmICggIW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXSAmJlxuXHRcdFx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoZSB0ZWNobmlxdWUgaGFzIHRvIGJlIHVzZWQgYXMgd2VsbCB3aGVuIGEgbGVhZGluZyBjb21iaW5hdG9yIGlzIHVzZWRcblx0XHRcdFx0Ly8gYXMgc3VjaCBzZWxlY3RvcnMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHF1ZXJ5U2VsZWN0b3JBbGwuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSB8fCBybGVhZGluZ0NvbWJpbmF0b3IudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gV2UgY2FuIHVzZSA6c2NvcGUgaW5zdGVhZCBvZiB0aGUgSUQgaGFjayBpZiB0aGUgYnJvd3NlclxuXHRcdFx0XHRcdC8vIHN1cHBvcnRzIGl0ICYgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBjb250ZXh0LlxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW5cblx0XHRcdFx0XHQvLyBzdHJpY3QtY29tcGFyaW5nIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICE9IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IGpRdWVyeS5lc2NhcGVTZWxlY3RvciggbmlkICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXNcblx0XHQvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2lzc3Vlcy8xNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoIGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUgKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBqUXVlcnkgc2VsZWN0b3IgbW9kdWxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuICggbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApIHx8IG5vZGVOYW1lKCBlbGVtLCBcImJ1dHRvblwiICkgKSAmJlxuXHRcdFx0ZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExK1xuXHRcdFx0XHQvLyBVc2UgdGhlIGlzRGlzYWJsZWQgc2hvcnRjdXQgcHJvcGVydHkgdG8gY2hlY2sgZm9yIGRpc2FibGVkIGZpZWxkc2V0IGFuY2VzdG9yc1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pc0Rpc2FibGVkID09PSBkaXNhYmxlZCB8fFxuXG5cdFx0XHRcdFx0Ly8gV2hlcmUgdGhlcmUgaXMgbm8gaXNEaXNhYmxlZCwgY2hlY2sgbWFudWFsbHlcblx0XHRcdFx0XHRlbGVtLmlzRGlzYWJsZWQgIT09ICFkaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIGpRdWVyeSBzZWxlY3RvciBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW25vZGVdIEFuIGVsZW1lbnQgb3IgZG9jdW1lbnQgb2JqZWN0IHRvIHVzZSB0byBzZXQgdGhlIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7T2JqZWN0fSBSZXR1cm5zIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKi9cbmZ1bmN0aW9uIHNldERvY3VtZW50KCBub2RlICkge1xuXHR2YXIgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblx0ZG9jdW1lbnRJc0hUTUwgPSAhalF1ZXJ5LmlzWE1MRG9jKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IGlPUyA3IG9ubHksIElFIDkgLSAxMStcblx0Ly8gT2xkZXIgYnJvd3NlcnMgZGlkbid0IHN1cHBvcnQgdW5wcmVmaXhlZCBgbWF0Y2hlc2AuXG5cdG1hdGNoZXMgPSBkb2N1bWVudEVsZW1lbnQubWF0Y2hlcyB8fFxuXHRcdGRvY3VtZW50RWxlbWVudC53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2N1bWVudEVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3I7XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4K1xuXHQvLyBBY2Nlc3NpbmcgaWZyYW1lIGRvY3VtZW50cyBhZnRlciB1bmxvYWQgdGhyb3dzIFwicGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvcnNcblx0Ly8gKHNlZSB0cmFjLTEzOTM2KS5cblx0Ly8gTGltaXQgdGhlIGZpeCB0byBJRSAmIEVkZ2UgTGVnYWN5OyBkZXNwaXRlIEVkZ2UgMTUrIGltcGxlbWVudGluZyBgbWF0Y2hlc2AsXG5cdC8vIGFsbCBJRSA5KyBhbmQgRWRnZSBMZWdhY3kgdmVyc2lvbnMgaW1wbGVtZW50IGBtc01hdGNoZXNTZWxlY3RvcmAgYXMgd2VsbC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQubXNNYXRjaGVzU2VsZWN0b3IgJiZcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0cHJlZmVycmVkRG9jICE9IGRvY3VtZW50ICYmXG5cdFx0KCBzdWJXaW5kb3cgPSBkb2N1bWVudC5kZWZhdWx0VmlldyApICYmIHN1YldpbmRvdy50b3AgIT09IHN1YldpbmRvdyApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciApO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPDEwXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRCeUlkIHJldHVybnMgZWxlbWVudHMgYnkgbmFtZVxuXHQvLyBUaGUgYnJva2VuIGdldEVsZW1lbnRCeUlkIG1ldGhvZHMgZG9uJ3QgcGljayB1cCBwcm9ncmFtbWF0aWNhbGx5LXNldCBuYW1lcyxcblx0Ly8gc28gdXNlIGEgcm91bmRhYm91dCBnZXRFbGVtZW50c0J5TmFtZSB0ZXN0XG5cdHN1cHBvcnQuZ2V0QnlJZCA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGpRdWVyeS5leHBhbmRvO1xuXHRcdHJldHVybiAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUgfHxcblx0XHRcdCFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggalF1ZXJ5LmV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUuXG5cdHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRyZXR1cm4gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gSUUvRWRnZSBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGVcIiApO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogQ2hyb21lIDEwNSAtIDExMSBvbmx5LCBTYWZhcmkgMTUuNCAtIDE2LjMgb25seVxuXHQvLyBNYWtlIHN1cmUgdGhlIGA6aGFzKClgIGFyZ3VtZW50IGlzIHBhcnNlZCB1bmZvcmdpdmluZ2x5LlxuXHQvLyBXZSBpbmNsdWRlIGAqYCBpbiB0aGUgdGVzdCB0byBkZXRlY3QgYnVnZ3kgaW1wbGVtZW50YXRpb25zIHRoYXQgYXJlXG5cdC8vIF9zZWxlY3RpdmVseV8gZm9yZ2l2aW5nIChzcGVjaWZpY2FsbHkgd2hlbiB0aGUgbGlzdCBpbmNsdWRlcyBhdCBsZWFzdFxuXHQvLyBvbmUgdmFsaWQgc2VsZWN0b3IpLlxuXHQvLyBOb3RlIHRoYXQgd2UgdHJlYXQgY29tcGxldGUgbGFjayBvZiBzdXBwb3J0IGZvciBgOmhhcygpYCBhcyBpZiBpdCB3ZXJlXG5cdC8vIHNwZWMtY29tcGxpYW50IHN1cHBvcnQsIHdoaWNoIGlzIGZpbmUgYmVjYXVzZSB1c2Ugb2YgYDpoYXMoKWAgaW4gc3VjaFxuXHQvLyBlbnZpcm9ubWVudHMgd2lsbCBmYWlsIGluIHRoZSBxU0EgcGF0aCBhbmQgZmFsbCBiYWNrIHRvIGpRdWVyeSB0cmF2ZXJzYWxcblx0Ly8gYW55d2F5LlxuXHRzdXBwb3J0LmNzc0hhcyA9IGFzc2VydCggZnVuY3Rpb24oKSB7XG5cdFx0dHJ5IHtcblx0XHRcdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIFwiOmhhcygqLDpqcWZha2UpXCIgKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlci5JRCA9IGZ1bmN0aW9uKCBpZCApIHtcblx0XHRcdHZhciBhdHRySWQgPSBpZC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApID09PSBhdHRySWQ7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0RXhwci5maW5kLklEID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlci5JRCA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmQuSUQgPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgbm9kZSwgaSwgZWxlbXMsXG5cdFx0XHRcdFx0ZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtICkge1xuXG5cdFx0XHRcdFx0Ly8gVmVyaWZ5IHRoZSBpZCBhdHRyaWJ1dGVcblx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRmFsbCBiYWNrIG9uIGdldEVsZW1lbnRzQnlOYW1lXG5cdFx0XHRcdFx0ZWxlbXMgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlOYW1lKCBpZCApO1xuXHRcdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRub2RlID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9XG5cblx0Ly8gVGFnXG5cdEV4cHIuZmluZC5UQUcgPSBmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZC5DTEFTUyA9IGZ1bmN0aW9uKCBjbGFzc05hbWUsIGNvbnRleHQgKSB7XG5cdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggY2xhc3NOYW1lICk7XG5cdFx0fVxuXHR9O1xuXG5cdC8qIFFTQS9tYXRjaGVzU2VsZWN0b3Jcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFFTQSBhbmQgbWF0Y2hlc1NlbGVjdG9yIHN1cHBvcnRcblxuXHRyYnVnZ3lRU0EgPSBbXTtcblxuXHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0Ly8gUmVnZXggc3RyYXRlZ3kgYWRvcHRlZCBmcm9tIERpZWdvIFBlcmluaVxuXHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdHZhciBpbnB1dDtcblxuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPVxuXHRcdFx0XCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBkaXNhYmxlZD0nZGlzYWJsZWQnPlwiICtcblx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdC8vIFN1cHBvcnQ6IGlPUyA8PTcgLSA4IG9ubHlcblx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5IGluIHNvbWUgWE1MIGRvY3VtZW50c1xuXHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOCBvbmx5XG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbaWR+PVwiICsgZXhwYW5kbyArIFwiLV1cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBpT1MgOCBvbmx5XG5cdFx0Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNjg1MVxuXHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLiMuK1srfl1cIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTEwNSssIEZpcmVmb3ggPD0xMDQrLCBTYWZhcmkgPD0xNS40K1xuXHRcdC8vIEluIHNvbWUgb2YgdGhlIGRvY3VtZW50IGtpbmRzLCB0aGVzZSBzZWxlY3RvcnMgd291bGRuJ3Qgd29yayBuYXRpdmVseS5cblx0XHQvLyBUaGlzIGlzIHByb2JhYmx5IE9LIGJ1dCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2Ugd2FudCB0byBtYWludGFpblxuXHRcdC8vIGhhbmRsaW5nIHRoZW0gdGhyb3VnaCBqUXVlcnkgdHJhdmVyc2FsIGluIGpRdWVyeSAzLnguXG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmNoZWNrZWRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdC8vIFRoZSB0eXBlIGFuZCBuYW1lIGF0dHJpYnV0ZXMgYXJlIHJlc3RyaWN0ZWQgZHVyaW5nIC5pbm5lckhUTUwgYXNzaWdubWVudFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErXG5cdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MTA1KywgRmlyZWZveCA8PTEwNCssIFNhZmFyaSA8PTE1LjQrXG5cdFx0Ly8gSW4gc29tZSBvZiB0aGUgZG9jdW1lbnQga2luZHMsIHRoZXNlIHNlbGVjdG9ycyB3b3VsZG4ndCB3b3JrIG5hdGl2ZWx5LlxuXHRcdC8vIFRoaXMgaXMgcHJvYmFibHkgT0sgYnV0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3ZSB3YW50IHRvIG1haW50YWluXG5cdFx0Ly8gaGFuZGxpbmcgdGhlbSB0aHJvdWdoIGpRdWVyeSB0cmF2ZXJzYWwgaW4galF1ZXJ5IDMueC5cblx0XHRkb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoIGVsICkuZGlzYWJsZWQgPSB0cnVlO1xuXHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0Ly8gYXJvdW5kIHRoZSBpc3N1ZS5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwibmFtZVwiLCBcIlwiICk7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqbmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKj1cIiArXG5cdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdH1cblx0fSApO1xuXG5cdGlmICggIXN1cHBvcnQuY3NzSGFzICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDEwNSAtIDExMCssIFNhZmFyaSAxNS40IC0gMTYuMytcblx0XHQvLyBPdXIgcmVndWxhciBgdHJ5LWNhdGNoYCBtZWNoYW5pc20gZmFpbHMgdG8gZGV0ZWN0IG5hdGl2ZWx5LXVuc3VwcG9ydGVkXG5cdFx0Ly8gcHNldWRvLWNsYXNzZXMgaW5zaWRlIGA6aGFzKClgIChzdWNoIGFzIGA6aGFzKDpjb250YWlucyhcIkZvb1wiKSlgKVxuXHRcdC8vIGluIGJyb3dzZXJzIHRoYXQgcGFyc2UgdGhlIGA6aGFzKClgIGFyZ3VtZW50IGFzIGEgZm9yZ2l2aW5nIHNlbGVjdG9yIGxpc3QuXG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy8jcmVsYXRpb25hbCBub3cgcmVxdWlyZXMgdGhlIGFyZ3VtZW50XG5cdFx0Ly8gdG8gYmUgcGFyc2VkIHVuZm9yZ2l2aW5nbHksIGJ1dCBicm93c2VycyBoYXZlIG5vdCB5ZXQgZnVsbHkgYWRqdXN0ZWQuXG5cdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmhhc1wiICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cblx0LyogU29ydGluZ1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gRG9jdW1lbnQgb3JkZXIgc29ydGluZ1xuXHRzb3J0T3JkZXIgPSBmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PT0gZG9jdW1lbnQgfHwgYS5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRmaW5kLmNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09PSBkb2N1bWVudCB8fCBiLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGZpbmQuY29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YuY2FsbCggc29ydElucHV0LCBhICkgLSBpbmRleE9mLmNhbGwoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXHRcdH1cblxuXHRcdHJldHVybiBjb21wYXJlICYgNCA/IC0xIDogMTtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59XG5cbmZpbmQubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIGZpbmQoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5maW5kLm1hdGNoZXNTZWxlY3RvciA9IGZ1bmN0aW9uKCBlbGVtLCBleHByICkge1xuXHRzZXREb2N1bWVudCggZWxlbSApO1xuXG5cdGlmICggZG9jdW1lbnRJc0hUTUwgJiZcblx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgZXhwciArIFwiIFwiIF0gJiZcblx0XHQoICFyYnVnZ3lRU0EgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHRcdC8vIEFzIHdlbGwsIGRpc2Nvbm5lY3RlZCBub2RlcyBhcmUgc2FpZCB0byBiZSBpbiBhIGRvY3VtZW50XG5cdFx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZpbmQoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5maW5kLmNvbnRhaW5zID0gZnVuY3Rpb24oIGNvbnRleHQsIGVsZW0gKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBjb250ZXh0Lm93bmVyRG9jdW1lbnQgfHwgY29udGV4dCApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdH1cblx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuXG5maW5kLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIHRyYWMtMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRpZiAoIHZhbCAhPT0gdW5kZWZpbmVkICkge1xuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUgKTtcbn07XG5cbmZpbmQuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0Ly9cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCtcblx0Ly8gVGVzdGluZyBmb3IgZGV0ZWN0aW5nIGR1cGxpY2F0ZXMgaXMgdW5wcmVkaWN0YWJsZSBzbyBpbnN0ZWFkIGFzc3VtZSB3ZSBjYW4ndFxuXHQvLyBkZXBlbmQgb24gZHVwbGljYXRlIGRldGVjdGlvbiBpbiBhbGwgYnJvd3NlcnMgd2l0aG91dCBhIHN0YWJsZSBzb3J0LlxuXHRoYXNEdXBsaWNhdGUgPSAhc3VwcG9ydC5zb3J0U3RhYmxlO1xuXHRzb3J0SW5wdXQgPSAhc3VwcG9ydC5zb3J0U3RhYmxlICYmIHNsaWNlLmNhbGwoIHJlc3VsdHMsIDAgKTtcblx0c29ydC5jYWxsKCByZXN1bHRzLCBzb3J0T3JkZXIgKTtcblxuXHRpZiAoIGhhc0R1cGxpY2F0ZSApIHtcblx0XHR3aGlsZSAoICggZWxlbSA9IHJlc3VsdHNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0gPT09IHJlc3VsdHNbIGkgXSApIHtcblx0XHRcdFx0aiA9IGR1cGxpY2F0ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdHNwbGljZS5jYWxsKCByZXN1bHRzLCBkdXBsaWNhdGVzWyBqIF0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDbGVhciBpbnB1dCBhZnRlciBzb3J0aW5nIHRvIHJlbGVhc2Ugb2JqZWN0c1xuXHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9zaXp6bGUvcHVsbC8yMjVcblx0c29ydElucHV0ID0gbnVsbDtcblxuXHRyZXR1cm4gcmVzdWx0cztcbn07XG5cbmpRdWVyeS5mbi51bmlxdWVTb3J0ID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LnVuaXF1ZVNvcnQoIHNsaWNlLmFwcGx5KCB0aGlzICkgKSApO1xufTtcblxuRXhwciA9IGpRdWVyeS5leHByID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdEFUVFI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiIClcblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRDSElMRDogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRmaW5kLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKVxuXHRcdFx0XHQpO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0Ly8gb3RoZXIgdHlwZXMgcHJvaGliaXQgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMyBdICkge1xuXHRcdFx0XHRmaW5kLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0UFNFVURPOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHR2YXIgZXhjZXNzLFxuXHRcdFx0XHR1bnF1b3RlZCA9ICFtYXRjaFsgNiBdICYmIG1hdGNoWyAyIF07XG5cblx0XHRcdGlmICggbWF0Y2hFeHByLkNISUxELnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRUQUc6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIGV4cGVjdGVkTm9kZU5hbWUgPSBub2RlTmFtZVNlbGVjdG9yLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBub2RlTmFtZVNlbGVjdG9yID09PSBcIipcIiA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9IDpcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG5vZGVOYW1lKCBlbGVtLCBleHBlY3RlZE5vZGVOYW1lICk7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdENMQVNTOiBmdW5jdGlvbiggY2xhc3NOYW1lICkge1xuXHRcdFx0dmFyIHBhdHRlcm4gPSBjbGFzc0NhY2hlWyBjbGFzc05hbWUgKyBcIiBcIiBdO1xuXG5cdFx0XHRyZXR1cm4gcGF0dGVybiB8fFxuXHRcdFx0XHQoIHBhdHRlcm4gPSBuZXcgUmVnRXhwKCBcIihefFwiICsgd2hpdGVzcGFjZSArIFwiKVwiICsgY2xhc3NOYW1lICtcblx0XHRcdFx0XHRcIihcIiArIHdoaXRlc3BhY2UgKyBcInwkKVwiICkgKSAmJlxuXHRcdFx0XHRjbGFzc0NhY2hlKCBjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHR0eXBlb2YgZWxlbS5jbGFzc05hbWUgPT09IFwic3RyaW5nXCIgJiYgZWxlbS5jbGFzc05hbWUgfHxcblx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdEFUVFI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBmaW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCI9XCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdCA9PT0gY2hlY2s7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCIhPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgIT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiXj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDA7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCIqPVwiICkge1xuXHRcdFx0XHRcdHJldHVybiBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwiJD1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggb3BlcmF0b3IgPT09IFwifj1cIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiIClcblx0XHRcdFx0XHRcdC5pbmRleE9mKCBjaGVjayApID4gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBvcGVyYXRvciA9PT0gXCJ8PVwiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHQgPT09IGNoZWNrIHx8IHJlc3VsdC5zbGljZSggMCwgY2hlY2subGVuZ3RoICsgMSApID09PSBjaGVjayArIFwiLVwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0Q0hJTEQ6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIG91dGVyQ2FjaGUsIG5vZGUsIG5vZGVJbmRleCwgc3RhcnQsXG5cdFx0XHRcdFx0XHRkaXIgPSBzaW1wbGUgIT09IGZvcndhcmQgPyBcIm5leHRTaWJsaW5nXCIgOiBcInByZXZpb3VzU2libGluZ1wiLFxuXHRcdFx0XHRcdFx0cGFyZW50ID0gZWxlbS5wYXJlbnROb2RlLFxuXHRcdFx0XHRcdFx0bmFtZSA9IG9mVHlwZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksXG5cdFx0XHRcdFx0XHR1c2VDYWNoZSA9ICF4bWwgJiYgIW9mVHlwZSxcblx0XHRcdFx0XHRcdGRpZmYgPSBmYWxzZTtcblxuXHRcdFx0XHRcdGlmICggcGFyZW50ICkge1xuXG5cdFx0XHRcdFx0XHQvLyA6KGZpcnN0fGxhc3R8b25seSktKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdFx0XHRpZiAoIHNpbXBsZSApIHtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCBkaXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0bm9kZSA9IGVsZW07XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSBub2RlWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlTmFtZSggbm9kZSwgbmFtZSApIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gcGFyZW50WyBleHBhbmRvIF0gfHwgKCBwYXJlbnRbIGV4cGFuZG8gXSA9IHt9ICk7XG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gb3V0ZXJDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIG5vZGVJbmRleCwgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVXNlIHByZXZpb3VzbHktY2FjaGVkIGVsZW1lbnQgaW5kZXggaWYgYXZhaWxhYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggdXNlQ2FjaGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSBvdXRlckNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGVOYW1lKCBub2RlLCBuYW1lICkgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgdGhlIG9mZnNldCwgdGhlbiBjaGVjayBhZ2FpbnN0IGN5Y2xlIHNpemVcblx0XHRcdFx0XHRcdGRpZmYgLT0gbGFzdDtcblx0XHRcdFx0XHRcdHJldHVybiBkaWZmID09PSBmaXJzdCB8fCAoIGRpZmYgJSBmaXJzdCA9PT0gMCAmJiBkaWZmIC8gZmlyc3QgPj0gMCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0UFNFVURPOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNwc2V1ZG8tY2xhc3Nlc1xuXHRcdFx0Ly8gUHJpb3JpdGl6ZSBieSBjYXNlIHNlbnNpdGl2aXR5IGluIGNhc2UgY3VzdG9tIHBzZXVkb3MgYXJlIGFkZGVkIHdpdGggdXBwZXJjYXNlIGxldHRlcnNcblx0XHRcdC8vIFJlbWVtYmVyIHRoYXQgc2V0RmlsdGVycyBpbmhlcml0cyBmcm9tIHBzZXVkb3Ncblx0XHRcdHZhciBhcmdzLFxuXHRcdFx0XHRmbiA9IEV4cHIucHNldWRvc1sgcHNldWRvIF0gfHwgRXhwci5zZXRGaWx0ZXJzWyBwc2V1ZG8udG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdFx0ZmluZC5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIGpRdWVyeSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZi5jYWxsKCBzZWVkLCBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdFx0c2VlZFsgaWR4IF0gPSAhKCBtYXRjaGVzWyBpZHggXSA9IG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZm4oIGVsZW0sIDAsIGFyZ3MgKTtcblx0XHRcdFx0XHR9O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZm47XG5cdFx0fVxuXHR9LFxuXG5cdHBzZXVkb3M6IHtcblxuXHRcdC8vIFBvdGVudGlhbGx5IGNvbXBsZXggcHNldWRvc1xuXHRcdG5vdDogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0Ly8gKHNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9pc3N1ZXMvMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRoYXM6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gZmluZCggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRjb250YWluczogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgalF1ZXJ5LnRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jbGFuZy1wc2V1ZG9cblx0XHRsYW5nOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0ZmluZC5lcnJvciggXCJ1bnN1cHBvcnRlZCBsYW5nOiBcIiArIGxhbmcgKTtcblx0XHRcdH1cblx0XHRcdGxhbmcgPSBsYW5nLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICkudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIGVsZW1MYW5nO1xuXHRcdFx0XHRkbyB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW1MYW5nID0gZG9jdW1lbnRJc0hUTUwgP1xuXHRcdFx0XHRcdFx0ZWxlbS5sYW5nIDpcblx0XHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBcInhtbDpsYW5nXCIgKSB8fCBlbGVtLmdldEF0dHJpYnV0ZSggXCJsYW5nXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHRlbGVtTGFuZyA9IGVsZW1MYW5nLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbUxhbmcgPT09IGxhbmcgfHwgZWxlbUxhbmcuaW5kZXhPZiggbGFuZyArIFwiLVwiICkgPT09IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IHdoaWxlICggKCBlbGVtID0gZWxlbS5wYXJlbnROb2RlICkgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIE1pc2NlbGxhbmVvdXNcblx0XHR0YXJnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdHJvb3Q6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50RWxlbWVudDtcblx0XHR9LFxuXG5cdFx0Zm9jdXM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgJiZcblx0XHRcdFx0ZG9jdW1lbnQuaGFzRm9jdXMoKSAmJlxuXHRcdFx0XHQhISggZWxlbS50eXBlIHx8IGVsZW0uaHJlZiB8fCB+ZWxlbS50YWJJbmRleCApO1xuXHRcdH0sXG5cblx0XHQvLyBCb29sZWFuIHByb3BlcnRpZXNcblx0XHRlbmFibGVkOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRkaXNhYmxlZDogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdGNoZWNrZWQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBJbiBDU1MzLCA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIGJvdGggY2hlY2tlZCBhbmQgc2VsZWN0ZWQgZWxlbWVudHNcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmICEhZWxlbS5jaGVja2VkICkgfHxcblx0XHRcdFx0KCBub2RlTmFtZSggZWxlbSwgXCJvcHRpb25cIiApICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRzZWxlY3RlZDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcblx0XHRcdC8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byB0cmVhdCB0aGUgZGVmYXVsdCBvcHRpb24gYXNcblx0XHRcdC8vIHNlbGVjdGVkIHdoZW4gaW4gYW4gb3B0Z3JvdXAuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0ZW1wdHk6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3MuZW1wdHkoIGVsZW0gKTtcblx0XHR9LFxuXG5cdFx0Ly8gRWxlbWVudC9pbnB1dCB0eXBlc1xuXHRcdGhlYWRlcjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdGlucHV0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0YnV0dG9uOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8XG5cdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImJ1dHRvblwiICk7XG5cdFx0fSxcblxuXHRcdHRleHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGF0dHI7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWUoIGVsZW0sIFwiaW5wdXRcIiApICYmIGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8MTAgb25seVxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyXG5cdFx0XHRcdC8vIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdGZpcnN0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRsYXN0OiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIFsgbGVuZ3RoIC0gMSBdO1xuXHRcdH0gKSxcblxuXHRcdGVxOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRldmVuOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0b2RkOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDE7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0bHQ6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaTtcblxuXHRcdFx0aWYgKCBhcmd1bWVudCA8IDAgKSB7XG5cdFx0XHRcdGkgPSBhcmd1bWVudCArIGxlbmd0aDtcblx0XHRcdH0gZWxzZSBpZiAoIGFyZ3VtZW50ID4gbGVuZ3RoICkge1xuXHRcdFx0XHRpID0gbGVuZ3RoO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aSA9IGFyZ3VtZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0Z3Q6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3MubnRoID0gRXhwci5wc2V1ZG9zLmVxO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbmZ1bmN0aW9uIHRva2VuaXplKCBzZWxlY3RvciwgcGFyc2VPbmx5ICkge1xuXHR2YXIgbWF0Y2hlZCwgbWF0Y2gsIHRva2VucywgdHlwZSxcblx0XHRzb0ZhciwgZ3JvdXBzLCBwcmVGaWx0ZXJzLFxuXHRcdGNhY2hlZCA9IHRva2VuQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoIGNhY2hlZCApIHtcblx0XHRyZXR1cm4gcGFyc2VPbmx5ID8gMCA6IGNhY2hlZC5zbGljZSggMCApO1xuXHR9XG5cblx0c29GYXIgPSBzZWxlY3Rvcjtcblx0Z3JvdXBzID0gW107XG5cdHByZUZpbHRlcnMgPSBFeHByLnByZUZpbHRlcjtcblxuXHR3aGlsZSAoIHNvRmFyICkge1xuXG5cdFx0Ly8gQ29tbWEgYW5kIGZpcnN0IHJ1blxuXHRcdGlmICggIW1hdGNoZWQgfHwgKCBtYXRjaCA9IHJjb21tYS5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRpZiAoIG1hdGNoICkge1xuXG5cdFx0XHRcdC8vIERvbid0IGNvbnN1bWUgdHJhaWxpbmcgY29tbWFzIGFzIHZhbGlkXG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoWyAwIF0ubGVuZ3RoICkgfHwgc29GYXI7XG5cdFx0XHR9XG5cdFx0XHRncm91cHMucHVzaCggKCB0b2tlbnMgPSBbXSApICk7XG5cdFx0fVxuXG5cdFx0bWF0Y2hlZCA9IGZhbHNlO1xuXG5cdFx0Ly8gQ29tYmluYXRvcnNcblx0XHRpZiAoICggbWF0Y2ggPSBybGVhZGluZ0NvbWJpbmF0b3IuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblxuXHRcdFx0XHQvLyBDYXN0IGRlc2NlbmRhbnQgY29tYmluYXRvcnMgdG8gc3BhY2Vcblx0XHRcdFx0dHlwZTogbWF0Y2hbIDAgXS5yZXBsYWNlKCBydHJpbUNTUywgXCIgXCIgKVxuXHRcdFx0fSApO1xuXHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGaWx0ZXJzXG5cdFx0Zm9yICggdHlwZSBpbiBFeHByLmZpbHRlciApIHtcblx0XHRcdGlmICggKCBtYXRjaCA9IG1hdGNoRXhwclsgdHlwZSBdLmV4ZWMoIHNvRmFyICkgKSAmJiAoICFwcmVGaWx0ZXJzWyB0eXBlIF0gfHxcblx0XHRcdFx0KCBtYXRjaCA9IHByZUZpbHRlcnNbIHR5cGUgXSggbWF0Y2ggKSApICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0XHR0b2tlbnMucHVzaCgge1xuXHRcdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXHRcdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdFx0bWF0Y2hlczogbWF0Y2hcblx0XHRcdFx0fSApO1xuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggIW1hdGNoZWQgKSB7XG5cdFx0XHRicmVhaztcblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIGxlbmd0aCBvZiB0aGUgaW52YWxpZCBleGNlc3Ncblx0Ly8gaWYgd2UncmUganVzdCBwYXJzaW5nXG5cdC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3Igb3IgcmV0dXJuIHRva2Vuc1xuXHRpZiAoIHBhcnNlT25seSApIHtcblx0XHRyZXR1cm4gc29GYXIubGVuZ3RoO1xuXHR9XG5cblx0cmV0dXJuIHNvRmFyID9cblx0XHRmaW5kLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdC8vIENhY2hlIHRoZSB0b2tlbnNcblx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn1cblxuZnVuY3Rpb24gdG9TZWxlY3RvciggdG9rZW5zICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRzZWxlY3RvciA9IFwiXCI7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdHNlbGVjdG9yICs9IHRva2Vuc1sgaSBdLnZhbHVlO1xuXHR9XG5cdHJldHVybiBzZWxlY3Rvcjtcbn1cblxuZnVuY3Rpb24gYWRkQ29tYmluYXRvciggbWF0Y2hlciwgY29tYmluYXRvciwgYmFzZSApIHtcblx0dmFyIGRpciA9IGNvbWJpbmF0b3IuZGlyLFxuXHRcdHNraXAgPSBjb21iaW5hdG9yLm5leHQsXG5cdFx0a2V5ID0gc2tpcCB8fCBkaXIsXG5cdFx0Y2hlY2tOb25FbGVtZW50cyA9IGJhc2UgJiYga2V5ID09PSBcInBhcmVudE5vZGVcIixcblx0XHRkb25lTmFtZSA9IGRvbmUrKztcblxuXHRyZXR1cm4gY29tYmluYXRvci5maXJzdCA/XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGNsb3Nlc3QgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IDpcblxuXHRcdC8vIENoZWNrIGFnYWluc3QgYWxsIGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50c1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgb2xkQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgbm9kZU5hbWUoIGVsZW0sIHNraXAgKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gb3V0ZXJDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZVsga2V5IF0gPSBuZXdDYWNoZTtcblxuXHRcdFx0XHRcdFx0XHQvLyBBIG1hdGNoIG1lYW5zIHdlJ3JlIGRvbmU7IGEgZmFpbCBtZWFucyB3ZSBoYXZlIHRvIGtlZXAgY2hlY2tpbmdcblx0XHRcdFx0XHRcdFx0aWYgKCAoIG5ld0NhY2hlWyAyIF0gPSBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcbn1cblxuZnVuY3Rpb24gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICkge1xuXHRyZXR1cm4gbWF0Y2hlcnMubGVuZ3RoID4gMSA/XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBpID0gbWF0Y2hlcnMubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggIW1hdGNoZXJzWyBpIF0oIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSA6XG5cdFx0bWF0Y2hlcnNbIDAgXTtcbn1cblxuZnVuY3Rpb24gbXVsdGlwbGVDb250ZXh0cyggc2VsZWN0b3IsIGNvbnRleHRzLCByZXN1bHRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gY29udGV4dHMubGVuZ3RoO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRmaW5kKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLCBtYXRjaGVyT3V0LFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8XG5cdFx0XHRcdG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPyBbIGNvbnRleHQgXSA6IGNvbnRleHQsIFtdICksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXM7XG5cblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cblx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyXG5cdFx0XHQvLyBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0bWF0Y2hlck91dCA9IHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0W10gOlxuXG5cdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRyZXN1bHRzO1xuXG5cdFx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdFx0bWF0Y2hlciggbWF0Y2hlckluLCBtYXRjaGVyT3V0LCBjb250ZXh0LCB4bWwgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXJJbjtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwb3N0RmlsdGVyXG5cdFx0aWYgKCBwb3N0RmlsdGVyICkge1xuXHRcdFx0dGVtcCA9IGNvbmRlbnNlKCBtYXRjaGVyT3V0LCBwb3N0TWFwICk7XG5cdFx0XHRwb3N0RmlsdGVyKCB0ZW1wLCBbXSwgY29udGV4dCwgeG1sICk7XG5cblx0XHRcdC8vIFVuLW1hdGNoIGZhaWxpbmcgZWxlbWVudHMgYnkgbW92aW5nIHRoZW0gYmFjayB0byBtYXRjaGVySW5cblx0XHRcdGkgPSB0ZW1wLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICggZWxlbSA9IHRlbXBbIGkgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXJPdXRbIHBvc3RNYXBbIGkgXSBdID0gISggbWF0Y2hlckluWyBwb3N0TWFwWyBpIF0gXSA9IGVsZW0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggc2VlZCApIHtcblx0XHRcdGlmICggcG9zdEZpbmRlciB8fCBwcmVGaWx0ZXIgKSB7XG5cdFx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblxuXHRcdFx0XHRcdC8vIEdldCB0aGUgZmluYWwgbWF0Y2hlck91dCBieSBjb25kZW5zaW5nIHRoaXMgaW50ZXJtZWRpYXRlIGludG8gcG9zdEZpbmRlciBjb250ZXh0c1xuXHRcdFx0XHRcdHRlbXAgPSBbXTtcblx0XHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJlc3RvcmUgbWF0Y2hlckluIHNpbmNlIGVsZW0gaXMgbm90IHlldCBhIGZpbmFsIG1hdGNoXG5cdFx0XHRcdFx0XHRcdHRlbXAucHVzaCggKCBtYXRjaGVySW5bIGkgXSA9IGVsZW0gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRwb3N0RmluZGVyKCBudWxsLCAoIG1hdGNoZXJPdXQgPSBbXSApLCB0ZW1wLCB4bWwgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE1vdmUgbWF0Y2hlZCBlbGVtZW50cyBmcm9tIHNlZWQgdG8gcmVzdWx0cyB0byBrZWVwIHRoZW0gc3luY2hyb25pemVkXG5cdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSAmJlxuXHRcdFx0XHRcdFx0KCB0ZW1wID0gcG9zdEZpbmRlciA/IGluZGV4T2YuY2FsbCggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPSBvdXRlcm1vc3RDb250ZXh0ICkgKSB8fCAoXG5cdFx0XHRcdCggY2hlY2tDb250ZXh0ID0gY29udGV4dCApLm5vZGVUeXBlID9cblx0XHRcdFx0XHRtYXRjaENvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0XHRtYXRjaEFueUNvbnRleHQoIGVsZW0sIGNvbnRleHQsIHhtbCApICk7XG5cblx0XHRcdC8vIEF2b2lkIGhhbmdpbmcgb250byBlbGVtZW50XG5cdFx0XHQvLyAoc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL2lzc3Vlcy8yOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHRcdHRva2Vucy5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0XHQuY29uY2F0KCB7IHZhbHVlOiB0b2tlbnNbIGkgLSAyIF0udHlwZSA9PT0gXCIgXCIgPyBcIipcIiA6IFwiXCIgfSApXG5cdFx0XHRcdFx0KS5yZXBsYWNlKCBydHJpbUNTUywgXCIkMVwiICksXG5cdFx0XHRcdFx0bWF0Y2hlcixcblx0XHRcdFx0XHRpIDwgaiAmJiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zLnNsaWNlKCBpLCBqICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIG1hdGNoZXJGcm9tVG9rZW5zKCAoIHRva2VucyA9IHRva2Vucy5zbGljZSggaiApICkgKSxcblx0XHRcdFx0XHRqIDwgbGVuICYmIHRvU2VsZWN0b3IoIHRva2VucyApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVycy5wdXNoKCBtYXRjaGVyICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMoIGVsZW1lbnRNYXRjaGVycywgc2V0TWF0Y2hlcnMgKSB7XG5cdHZhciBieVNldCA9IHNldE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0YnlFbGVtZW50ID0gZWxlbWVudE1hdGNoZXJzLmxlbmd0aCA+IDAsXG5cdFx0c3VwZXJNYXRjaGVyID0gZnVuY3Rpb24oIHNlZWQsIGNvbnRleHQsIHhtbCwgcmVzdWx0cywgb3V0ZXJtb3N0ICkge1xuXHRcdFx0dmFyIGVsZW0sIGosIG1hdGNoZXIsXG5cdFx0XHRcdG1hdGNoZWRDb3VudCA9IDAsXG5cdFx0XHRcdGkgPSBcIjBcIixcblx0XHRcdFx0dW5tYXRjaGVkID0gc2VlZCAmJiBbXSxcblx0XHRcdFx0c2V0TWF0Y2hlZCA9IFtdLFxuXHRcdFx0XHRjb250ZXh0QmFja3VwID0gb3V0ZXJtb3N0Q29udGV4dCxcblxuXHRcdFx0XHQvLyBXZSBtdXN0IGFsd2F5cyBoYXZlIGVpdGhlciBzZWVkIGVsZW1lbnRzIG9yIG91dGVybW9zdCBjb250ZXh0XG5cdFx0XHRcdGVsZW1zID0gc2VlZCB8fCBieUVsZW1lbnQgJiYgRXhwci5maW5kLlRBRyggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBpT1MgPD03IC0gOSBvbmx5XG5cdFx0XHQvLyBUb2xlcmF0ZSBOb2RlTGlzdCBwcm9wZXJ0aWVzIChJRTogXCJsZW5ndGhcIjsgU2FmYXJpOiA8bnVtYmVyPikgbWF0Y2hpbmdcblx0XHRcdC8vIGVsZW1lbnRzIGJ5IGlkLiAoc2VlIHRyYWMtMTQxNDIpXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cHVzaC5jYWxsKCByZXN1bHRzLCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5mdW5jdGlvbiBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggLyogSW50ZXJuYWwgVXNlIE9ubHkgKi8gKSB7XG5cdHZhciBpLFxuXHRcdHNldE1hdGNoZXJzID0gW10sXG5cdFx0ZWxlbWVudE1hdGNoZXJzID0gW10sXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggIWNhY2hlZCApIHtcblxuXHRcdC8vIEdlbmVyYXRlIGEgZnVuY3Rpb24gb2YgcmVjdXJzaXZlIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIHRvIGNoZWNrIGVhY2ggZWxlbWVudFxuXHRcdGlmICggIW1hdGNoICkge1xuXHRcdFx0bWF0Y2ggPSB0b2tlbml6ZSggc2VsZWN0b3IgKTtcblx0XHR9XG5cdFx0aSA9IG1hdGNoLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdGNhY2hlZCA9IG1hdGNoZXJGcm9tVG9rZW5zKCBtYXRjaFsgaSBdICk7XG5cdFx0XHRpZiAoIGNhY2hlZFsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRzZXRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1lbnRNYXRjaGVycy5wdXNoKCBjYWNoZWQgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWNoZSB0aGUgY29tcGlsZWQgZnVuY3Rpb25cblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlKCBzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApICk7XG5cblx0XHQvLyBTYXZlIHNlbGVjdG9yIGFuZCB0b2tlbml6YXRpb25cblx0XHRjYWNoZWQuc2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0fVxuXHRyZXR1cm4gY2FjaGVkO1xufVxuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggalF1ZXJ5J3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBqUXVlcnkgc2VsZWN0b3IgY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbmZ1bmN0aW9uIHNlbGVjdCggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmQuSUQoXG5cdFx0XHRcdHRva2VuLm1hdGNoZXNbIDAgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLFxuXHRcdFx0XHRjb250ZXh0XG5cdFx0XHQpIHx8IFtdIClbIDAgXTtcblx0XHRcdGlmICggIWNvbnRleHQgKSB7XG5cdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXG5cdFx0XHQvLyBQcmVjb21waWxlZCBtYXRjaGVycyB3aWxsIHN0aWxsIHZlcmlmeSBhbmNlc3RyeSwgc28gc3RlcCB1cCBhIGxldmVsXG5cdFx0XHR9IGVsc2UgaWYgKCBjb21waWxlZCApIHtcblx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQucGFyZW50Tm9kZTtcblx0XHRcdH1cblxuXHRcdFx0c2VsZWN0b3IgPSBzZWxlY3Rvci5zbGljZSggdG9rZW5zLnNoaWZ0KCkudmFsdWUubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmV0Y2ggYSBzZWVkIHNldCBmb3IgcmlnaHQtdG8tbGVmdCBtYXRjaGluZ1xuXHRcdGkgPSBtYXRjaEV4cHIubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmXG5cdFx0XHRcdFx0XHR0ZXN0Q29udGV4dCggY29udGV4dC5wYXJlbnROb2RlICkgfHwgY29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIC0gNC4xK1xuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCAtIDQuMStcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxualF1ZXJ5LmZpbmQgPSBmaW5kO1xuXG4vLyBEZXByZWNhdGVkXG5qUXVlcnkuZXhwclsgXCI6XCIgXSA9IGpRdWVyeS5leHByLnBzZXVkb3M7XG5qUXVlcnkudW5pcXVlID0galF1ZXJ5LnVuaXF1ZVNvcnQ7XG5cbi8vIFRoZXNlIGhhdmUgYWx3YXlzIGJlZW4gcHJpdmF0ZSwgYnV0IHRoZXkgdXNlZCB0byBiZSBkb2N1bWVudGVkIGFzIHBhcnQgb2Zcbi8vIFNpenpsZSBzbyBsZXQncyBtYWludGFpbiB0aGVtIGZvciBub3cgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHB1cnBvc2VzLlxuZmluZC5jb21waWxlID0gY29tcGlsZTtcbmZpbmQuc2VsZWN0ID0gc2VsZWN0O1xuZmluZC5zZXREb2N1bWVudCA9IHNldERvY3VtZW50O1xuZmluZC50b2tlbml6ZSA9IHRva2VuaXplO1xuXG5maW5kLmVzY2FwZSA9IGpRdWVyeS5lc2NhcGVTZWxlY3RvcjtcbmZpbmQuZ2V0VGV4dCA9IGpRdWVyeS50ZXh0O1xuZmluZC5pc1hNTCA9IGpRdWVyeS5pc1hNTERvYztcbmZpbmQuc2VsZWN0b3JzID0galF1ZXJ5LmV4cHI7XG5maW5kLnN1cHBvcnQgPSBqUXVlcnkuc3VwcG9ydDtcbmZpbmQudW5pcXVlU29ydCA9IGpRdWVyeS51bmlxdWVTb3J0O1xuXG5cdC8qIGVzbGludC1lbmFibGUgKi9cblxufSApKCk7XG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKHRyYWMtOTUyMSlcblx0Ly8gU3RyaWN0IEhUTUwgcmVjb2duaXRpb24gKHRyYWMtMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIGpRdWVyeSNmaW5kXG5cdFx0XHRcdFx0XHRjdXIubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBjdXIsIHNlbGVjdG9ycyApICkgKSB7XG5cblx0XHRcdFx0XHRcdG1hdGNoZWQucHVzaCggY3VyICk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQubGVuZ3RoID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICkgOiBtYXRjaGVkICk7XG5cdH0sXG5cblx0Ly8gRGV0ZXJtaW5lIHRoZSBwb3NpdGlvbiBvZiBhbiBlbGVtZW50IHdpdGhpbiB0aGUgc2V0XG5cdGluZGV4OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIE5vIGFyZ3VtZW50LCByZXR1cm4gaW5kZXggaW4gcGFyZW50XG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybiAoIHRoaXNbIDAgXSAmJiB0aGlzWyAwIF0ucGFyZW50Tm9kZSApID8gdGhpcy5maXJzdCgpLnByZXZBbGwoKS5sZW5ndGggOiAtMTtcblx0XHR9XG5cblx0XHQvLyBJbmRleCBpbiBzZWxlY3RvclxuXHRcdGlmICggdHlwZW9mIGVsZW0gPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdGhpc1sgMCBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gTG9jYXRlIHRoZSBwb3NpdGlvbiBvZiB0aGUgZGVzaXJlZCBlbGVtZW50XG5cdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggdGhpcyxcblxuXHRcdFx0Ly8gSWYgaXQgcmVjZWl2ZXMgYSBqUXVlcnkgb2JqZWN0LCB0aGUgZmlyc3QgZWxlbWVudCBpcyB1c2VkXG5cdFx0XHRlbGVtLmpxdWVyeSA/IGVsZW1bIDAgXSA6IGVsZW1cblx0XHQpO1xuXHR9LFxuXG5cdGFkZDogZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayhcblx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMuZ2V0KCksIGpRdWVyeSggc2VsZWN0b3IsIGNvbnRleHQgKSApXG5cdFx0XHQpXG5cdFx0KTtcblx0fSxcblxuXHRhZGRCYWNrOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkKCBzZWxlY3RvciA9PSBudWxsID9cblx0XHRcdHRoaXMucHJldk9iamVjdCA6IHRoaXMucHJldk9iamVjdC5maWx0ZXIoIHNlbGVjdG9yIClcblx0XHQpO1xuXHR9XG59ICk7XG5cbmZ1bmN0aW9uIHNpYmxpbmcoIGN1ciwgZGlyICkge1xuXHR3aGlsZSAoICggY3VyID0gY3VyWyBkaXIgXSApICYmIGN1ci5ub2RlVHlwZSAhPT0gMSApIHt9XG5cdHJldHVybiBjdXI7XG59XG5cbmpRdWVyeS5lYWNoKCB7XG5cdHBhcmVudDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRyZXR1cm4gcGFyZW50ICYmIHBhcmVudC5ub2RlVHlwZSAhPT0gMTEgPyBwYXJlbnQgOiBudWxsO1xuXHR9LFxuXHRwYXJlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiApO1xuXHR9LFxuXHRwYXJlbnRzVW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIsIHVudGlsICk7XG5cdH0sXG5cdG5leHQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dEFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXZBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIgKTtcblx0fSxcblx0bmV4dFVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0cHJldlVudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicHJldmlvdXNTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHNpYmxpbmdzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoICggZWxlbS5wYXJlbnROb2RlIHx8IHt9ICkuZmlyc3RDaGlsZCwgZWxlbSApO1xuXHR9LFxuXHRjaGlsZHJlbjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCBlbGVtLmZpcnN0Q2hpbGQgKTtcblx0fSxcblx0Y29udGVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdGlmICggZWxlbS5jb250ZW50RG9jdW1lbnQgIT0gbnVsbCAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMStcblx0XHRcdC8vIDxvYmplY3Q+IGVsZW1lbnRzIHdpdGggbm8gYGRhdGFgIGF0dHJpYnV0ZSBoYXMgYW4gb2JqZWN0XG5cdFx0XHQvLyBgY29udGVudERvY3VtZW50YCB3aXRoIGEgYG51bGxgIHByb3RvdHlwZS5cblx0XHRcdGdldFByb3RvKCBlbGVtLmNvbnRlbnREb2N1bWVudCApICkge1xuXG5cdFx0XHRyZXR1cm4gZWxlbS5jb250ZW50RG9jdW1lbnQ7XG5cdFx0fVxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHksIGlPUyA3IG9ubHksIEFuZHJvaWQgQnJvd3NlciA8PTQuMyBvbmx5XG5cdFx0Ly8gVHJlYXQgdGhlIHRlbXBsYXRlIGVsZW1lbnQgYXMgYSByZWd1bGFyIG9uZSBpbiBicm93c2VycyB0aGF0XG5cdFx0Ly8gZG9uJ3Qgc3VwcG9ydCBpdC5cblx0XHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRlbXBsYXRlXCIgKSApIHtcblx0XHRcdGVsZW0gPSBlbGVtLmNvbnRlbnQgfHwgZWxlbTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgZWxlbS5jaGlsZE5vZGVzICk7XG5cdH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBmbiApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggdW50aWwsIHNlbGVjdG9yICkge1xuXHRcdHZhciBtYXRjaGVkID0galF1ZXJ5Lm1hcCggdGhpcywgZm4sIHVudGlsICk7XG5cblx0XHRpZiAoIG5hbWUuc2xpY2UoIC01ICkgIT09IFwiVW50aWxcIiApIHtcblx0XHRcdHNlbGVjdG9yID0gdW50aWw7XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWxlY3RvciAmJiB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRtYXRjaGVkID0galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIG1hdGNoZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHRoaXMubGVuZ3RoID4gMSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGR1cGxpY2F0ZXNcblx0XHRcdGlmICggIWd1YXJhbnRlZWRVbmlxdWVbIG5hbWUgXSApIHtcblx0XHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV2ZXJzZSBvcmRlciBmb3IgcGFyZW50cyogYW5kIHByZXYtZGVyaXZhdGl2ZXNcblx0XHRcdGlmICggcnBhcmVudHNwcmV2LnRlc3QoIG5hbWUgKSApIHtcblx0XHRcdFx0bWF0Y2hlZC5yZXZlcnNlKCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkICk7XG5cdH07XG59ICk7XG52YXIgcm5vdGh0bWx3aGl0ZSA9ICggL1teXFx4MjBcXHRcXHJcXG5cXGZdKy9nICk7XG5cblxuXG4vLyBDb252ZXJ0IFN0cmluZy1mb3JtYXR0ZWQgb3B0aW9ucyBpbnRvIE9iamVjdC1mb3JtYXR0ZWQgb25lc1xuZnVuY3Rpb24gY3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIHtcblx0dmFyIG9iamVjdCA9IHt9O1xuXHRqUXVlcnkuZWFjaCggb3B0aW9ucy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdLCBmdW5jdGlvbiggXywgZmxhZyApIHtcblx0XHRvYmplY3RbIGZsYWcgXSA9IHRydWU7XG5cdH0gKTtcblx0cmV0dXJuIG9iamVjdDtcbn1cblxuLypcbiAqIENyZWF0ZSBhIGNhbGxiYWNrIGxpc3QgdXNpbmcgdGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzOlxuICpcbiAqXHRvcHRpb25zOiBhbiBvcHRpb25hbCBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBvcHRpb25zIHRoYXQgd2lsbCBjaGFuZ2UgaG93XG4gKlx0XHRcdHRoZSBjYWxsYmFjayBsaXN0IGJlaGF2ZXMgb3IgYSBtb3JlIHRyYWRpdGlvbmFsIG9wdGlvbiBvYmplY3RcbiAqXG4gKiBCeSBkZWZhdWx0IGEgY2FsbGJhY2sgbGlzdCB3aWxsIGFjdCBsaWtlIGFuIGV2ZW50IGNhbGxiYWNrIGxpc3QgYW5kIGNhbiBiZVxuICogXCJmaXJlZFwiIG11bHRpcGxlIHRpbWVzLlxuICpcbiAqIFBvc3NpYmxlIG9wdGlvbnM6XG4gKlxuICpcdG9uY2U6XHRcdFx0d2lsbCBlbnN1cmUgdGhlIGNhbGxiYWNrIGxpc3QgY2FuIG9ubHkgYmUgZmlyZWQgb25jZSAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHRtZW1vcnk6XHRcdFx0d2lsbCBrZWVwIHRyYWNrIG9mIHByZXZpb3VzIHZhbHVlcyBhbmQgd2lsbCBjYWxsIGFueSBjYWxsYmFjayBhZGRlZFxuICpcdFx0XHRcdFx0YWZ0ZXIgdGhlIGxpc3QgaGFzIGJlZW4gZmlyZWQgcmlnaHQgYXdheSB3aXRoIHRoZSBsYXRlc3QgXCJtZW1vcml6ZWRcIlxuICpcdFx0XHRcdFx0dmFsdWVzIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdHVuaXF1ZTpcdFx0XHR3aWxsIGVuc3VyZSBhIGNhbGxiYWNrIGNhbiBvbmx5IGJlIGFkZGVkIG9uY2UgKG5vIGR1cGxpY2F0ZSBpbiB0aGUgbGlzdClcbiAqXG4gKlx0c3RvcE9uRmFsc2U6XHRpbnRlcnJ1cHQgY2FsbGluZ3Mgd2hlbiBhIGNhbGxiYWNrIHJldHVybnMgZmFsc2VcbiAqXG4gKi9cbmpRdWVyeS5DYWxsYmFja3MgPSBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHQvLyBDb252ZXJ0IG9wdGlvbnMgZnJvbSBTdHJpbmctZm9ybWF0dGVkIHRvIE9iamVjdC1mb3JtYXR0ZWQgaWYgbmVlZGVkXG5cdC8vICh3ZSBjaGVjayBpbiBjYWNoZSBmaXJzdClcblx0b3B0aW9ucyA9IHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiID9cblx0XHRjcmVhdGVPcHRpb25zKCBvcHRpb25zICkgOlxuXHRcdGpRdWVyeS5leHRlbmQoIHt9LCBvcHRpb25zICk7XG5cblx0dmFyIC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IGlzIGN1cnJlbnRseSBmaXJpbmdcblx0XHRmaXJpbmcsXG5cblx0XHQvLyBMYXN0IGZpcmUgdmFsdWUgZm9yIG5vbi1mb3JnZXR0YWJsZSBsaXN0c1xuXHRcdG1lbW9yeSxcblxuXHRcdC8vIEZsYWcgdG8ga25vdyBpZiBsaXN0IHdhcyBhbHJlYWR5IGZpcmVkXG5cdFx0ZmlyZWQsXG5cblx0XHQvLyBGbGFnIHRvIHByZXZlbnQgZmlyaW5nXG5cdFx0bG9ja2VkLFxuXG5cdFx0Ly8gQWN0dWFsIGNhbGxiYWNrIGxpc3Rcblx0XHRsaXN0ID0gW10sXG5cblx0XHQvLyBRdWV1ZSBvZiBleGVjdXRpb24gZGF0YSBmb3IgcmVwZWF0YWJsZSBsaXN0c1xuXHRcdHF1ZXVlID0gW10sXG5cblx0XHQvLyBJbmRleCBvZiBjdXJyZW50bHkgZmlyaW5nIGNhbGxiYWNrIChtb2RpZmllZCBieSBhZGQvcmVtb3ZlIGFzIG5lZWRlZClcblx0XHRmaXJpbmdJbmRleCA9IC0xLFxuXG5cdFx0Ly8gRmlyZSBjYWxsYmFja3Ncblx0XHRmaXJlID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuZm9yY2Ugc2luZ2xlLWZpcmluZ1xuXHRcdFx0bG9ja2VkID0gbG9ja2VkIHx8IG9wdGlvbnMub25jZTtcblxuXHRcdFx0Ly8gRXhlY3V0ZSBjYWxsYmFja3MgZm9yIGFsbCBwZW5kaW5nIGV4ZWN1dGlvbnMsXG5cdFx0XHQvLyByZXNwZWN0aW5nIGZpcmluZ0luZGV4IG92ZXJyaWRlcyBhbmQgcnVudGltZSBjaGFuZ2VzXG5cdFx0XHRmaXJlZCA9IGZpcmluZyA9IHRydWU7XG5cdFx0XHRmb3IgKCA7IHF1ZXVlLmxlbmd0aDsgZmlyaW5nSW5kZXggPSAtMSApIHtcblx0XHRcdFx0bWVtb3J5ID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdFx0d2hpbGUgKCArK2ZpcmluZ0luZGV4IDwgbGlzdC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBSdW4gY2FsbGJhY2sgYW5kIGNoZWNrIGZvciBlYXJseSB0ZXJtaW5hdGlvblxuXHRcdFx0XHRcdGlmICggbGlzdFsgZmlyaW5nSW5kZXggXS5hcHBseSggbWVtb3J5WyAwIF0sIG1lbW9yeVsgMSBdICkgPT09IGZhbHNlICYmXG5cdFx0XHRcdFx0XHRvcHRpb25zLnN0b3BPbkZhbHNlICkge1xuXG5cdFx0XHRcdFx0XHQvLyBKdW1wIHRvIGVuZCBhbmQgZm9yZ2V0IHRoZSBkYXRhIHNvIC5hZGQgZG9lc24ndCByZS1maXJlXG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoO1xuXHRcdFx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvcmdldCB0aGUgZGF0YSBpZiB3ZSdyZSBkb25lIHdpdGggaXRcblx0XHRcdGlmICggIW9wdGlvbnMubWVtb3J5ICkge1xuXHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdH1cblxuXHRcdFx0ZmlyaW5nID0gZmFsc2U7XG5cblx0XHRcdC8vIENsZWFuIHVwIGlmIHdlJ3JlIGRvbmUgZmlyaW5nIGZvciBnb29kXG5cdFx0XHRpZiAoIGxvY2tlZCApIHtcblxuXHRcdFx0XHQvLyBLZWVwIGFuIGVtcHR5IGxpc3QgaWYgd2UgaGF2ZSBkYXRhIGZvciBmdXR1cmUgYWRkIGNhbGxzXG5cdFx0XHRcdGlmICggbWVtb3J5ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIHRoaXMgb2JqZWN0IGlzIHNwZW50XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0bGlzdCA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gQWN0dWFsIENhbGxiYWNrcyBvYmplY3Rcblx0XHRzZWxmID0ge1xuXG5cdFx0XHQvLyBBZGQgYSBjYWxsYmFjayBvciBhIGNvbGxlY3Rpb24gb2YgY2FsbGJhY2tzIHRvIHRoZSBsaXN0XG5cdFx0XHRhZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBoYXZlIG1lbW9yeSBmcm9tIGEgcGFzdCBydW4sIHdlIHNob3VsZCBmaXJlIGFmdGVyIGFkZGluZ1xuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJpbmdJbmRleCA9IGxpc3QubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdHF1ZXVlLnB1c2goIG1lbW9yeSApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdCggZnVuY3Rpb24gYWRkKCBhcmdzICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3MsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCAhb3B0aW9ucy51bmlxdWUgfHwgIXNlbGYuaGFzKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGxpc3QucHVzaCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBhcmcgJiYgYXJnLmxlbmd0aCAmJiB0b1R5cGUoIGFyZyApICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gSW5zcGVjdCByZWN1cnNpdmVseVxuXHRcdFx0XHRcdFx0XHRcdGFkZCggYXJnICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHR9ICkoIGFyZ3VtZW50cyApO1xuXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBsaXN0XG5cdFx0XHRyZW1vdmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZWFjaCggYXJndW1lbnRzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdHZhciBpbmRleDtcblx0XHRcdFx0XHR3aGlsZSAoICggaW5kZXggPSBqUXVlcnkuaW5BcnJheSggYXJnLCBsaXN0LCBpbmRleCApICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdGxpc3Quc3BsaWNlKCBpbmRleCwgMSApO1xuXG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZmlyaW5nIGluZGV4ZXNcblx0XHRcdFx0XHRcdGlmICggaW5kZXggPD0gZmlyaW5nSW5kZXggKSB7XG5cdFx0XHRcdFx0XHRcdGZpcmluZ0luZGV4LS07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2hlY2sgaWYgYSBnaXZlbiBjYWxsYmFjayBpcyBpbiB0aGUgbGlzdC5cblx0XHRcdC8vIElmIG5vIGFyZ3VtZW50IGlzIGdpdmVuLCByZXR1cm4gd2hldGhlciBvciBub3QgbGlzdCBoYXMgY2FsbGJhY2tzIGF0dGFjaGVkLlxuXHRcdFx0aGFzOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdHJldHVybiBmbiA/XG5cdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGZuLCBsaXN0ICkgPiAtMSA6XG5cdFx0XHRcdFx0bGlzdC5sZW5ndGggPiAwO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGFsbCBjYWxsYmFja3MgZnJvbSB0aGUgbGlzdFxuXHRcdFx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGxpc3QgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZSBhbmQgLmFkZFxuXHRcdFx0Ly8gQWJvcnQgYW55IGN1cnJlbnQvcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHQvLyBDbGVhciBhbGwgY2FsbGJhY2tzIGFuZCB2YWx1ZXNcblx0XHRcdGRpc2FibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0ZGlzYWJsZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gIWxpc3Q7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlXG5cdFx0XHQvLyBBbHNvIGRpc2FibGUgLmFkZCB1bmxlc3Mgd2UgaGF2ZSBtZW1vcnkgKHNpbmNlIGl0IHdvdWxkIGhhdmUgbm8gZWZmZWN0KVxuXHRcdFx0Ly8gQWJvcnQgYW55IHBlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0bG9jazogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGlmICggIW1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGxvY2tlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWxvY2tlZDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBjb250ZXh0IGFuZCBhcmd1bWVudHNcblx0XHRcdGZpcmVXaXRoOiBmdW5jdGlvbiggY29udGV4dCwgYXJncyApIHtcblx0XHRcdFx0aWYgKCAhbG9ja2VkICkge1xuXHRcdFx0XHRcdGFyZ3MgPSBhcmdzIHx8IFtdO1xuXHRcdFx0XHRcdGFyZ3MgPSBbIGNvbnRleHQsIGFyZ3Muc2xpY2UgPyBhcmdzLnNsaWNlKCkgOiBhcmdzIF07XG5cdFx0XHRcdFx0cXVldWUucHVzaCggYXJncyApO1xuXHRcdFx0XHRcdGlmICggIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCB0aGUgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHNlbGYuZmlyZVdpdGgoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgdGhlIGNhbGxiYWNrcyBoYXZlIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgbGVhc3Qgb25jZVxuXHRcdFx0ZmlyZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFmaXJlZDtcblx0XHRcdH1cblx0XHR9O1xuXG5cdHJldHVybiBzZWxmO1xufTtcblxuXG5mdW5jdGlvbiBJZGVudGl0eSggdiApIHtcblx0cmV0dXJuIHY7XG59XG5mdW5jdGlvbiBUaHJvd2VyKCBleCApIHtcblx0dGhyb3cgZXg7XG59XG5cbmZ1bmN0aW9uIGFkb3B0VmFsdWUoIHZhbHVlLCByZXNvbHZlLCByZWplY3QsIG5vVmFsdWUgKSB7XG5cdHZhciBtZXRob2Q7XG5cblx0dHJ5IHtcblxuXHRcdC8vIENoZWNrIGZvciBwcm9taXNlIGFzcGVjdCBmaXJzdCB0byBwcml2aWxlZ2Ugc3luY2hyb25vdXMgYmVoYXZpb3Jcblx0XHRpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUucHJvbWlzZSApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUgKS5kb25lKCByZXNvbHZlICkuZmFpbCggcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciB0aGVuYWJsZXNcblx0XHR9IGVsc2UgaWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnRoZW4gKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlLCByZXNvbHZlLCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIG5vbi10aGVuYWJsZXNcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb250cm9sIGByZXNvbHZlYCBhcmd1bWVudHMgYnkgbGV0dGluZyBBcnJheSNzbGljZSBjYXN0IGJvb2xlYW4gYG5vVmFsdWVgIHRvIGludGVnZXI6XG5cdFx0XHQvLyAqIGZhbHNlOiBbIHZhbHVlIF0uc2xpY2UoIDAgKSA9PiByZXNvbHZlKCB2YWx1ZSApXG5cdFx0XHQvLyAqIHRydWU6IFsgdmFsdWUgXS5zbGljZSggMSApID0+IHJlc29sdmUoKVxuXHRcdFx0cmVzb2x2ZS5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0uc2xpY2UoIG5vVmFsdWUgKSApO1xuXHRcdH1cblxuXHQvLyBGb3IgUHJvbWlzZXMvQSssIGNvbnZlcnQgZXhjZXB0aW9ucyBpbnRvIHJlamVjdGlvbnNcblx0Ly8gU2luY2UgalF1ZXJ5LndoZW4gZG9lc24ndCB1bndyYXAgdGhlbmFibGVzLCB3ZSBjYW4gc2tpcCB0aGUgZXh0cmEgY2hlY2tzIGFwcGVhcmluZyBpblxuXHQvLyBEZWZlcnJlZCN0aGVuIHRvIGNvbmRpdGlvbmFsbHkgc3VwcHJlc3MgcmVqZWN0aW9uLlxuXHR9IGNhdGNoICggdmFsdWUgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCBvbmx5XG5cdFx0Ly8gU3RyaWN0IG1vZGUgZnVuY3Rpb25zIGludm9rZWQgd2l0aG91dCAuY2FsbC8uYXBwbHkgZ2V0IGdsb2JhbC1vYmplY3QgY29udGV4dFxuXHRcdHJlamVjdC5hcHBseSggdW5kZWZpbmVkLCBbIHZhbHVlIF0gKTtcblx0fVxufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0RGVmZXJyZWQ6IGZ1bmN0aW9uKCBmdW5jICkge1xuXHRcdHZhciB0dXBsZXMgPSBbXG5cblx0XHRcdFx0Ly8gYWN0aW9uLCBhZGQgbGlzdGVuZXIsIGNhbGxiYWNrcyxcblx0XHRcdFx0Ly8gLi4uIC50aGVuIGhhbmRsZXJzLCBhcmd1bWVudCBpbmRleCwgW2ZpbmFsIHN0YXRlXVxuXHRcdFx0XHRbIFwibm90aWZ5XCIsIFwicHJvZ3Jlc3NcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSwgMiBdLFxuXHRcdFx0XHRbIFwicmVzb2x2ZVwiLCBcImRvbmVcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDAsIFwicmVzb2x2ZWRcIiBdLFxuXHRcdFx0XHRbIFwicmVqZWN0XCIsIFwiZmFpbFwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMSwgXCJyZWplY3RlZFwiIF1cblx0XHRcdF0sXG5cdFx0XHRzdGF0ZSA9IFwicGVuZGluZ1wiLFxuXHRcdFx0cHJvbWlzZSA9IHtcblx0XHRcdFx0c3RhdGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBzdGF0ZTtcblx0XHRcdFx0fSxcblx0XHRcdFx0YWx3YXlzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5kb25lKCBhcmd1bWVudHMgKS5mYWlsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblx0XHRcdFx0XCJjYXRjaFwiOiBmdW5jdGlvbiggZm4gKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHByb21pc2UudGhlbiggbnVsbCwgZm4gKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBLZWVwIHBpcGUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdHBpcGU6IGZ1bmN0aW9uKCAvKiBmbkRvbmUsIGZuRmFpbCwgZm5Qcm9ncmVzcyAqLyApIHtcblx0XHRcdFx0XHR2YXIgZm5zID0gYXJndW1lbnRzO1xuXG5cdFx0XHRcdFx0cmV0dXJuIGpRdWVyeS5EZWZlcnJlZCggZnVuY3Rpb24oIG5ld0RlZmVyICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmVhY2goIHR1cGxlcywgZnVuY3Rpb24oIF9pLCB0dXBsZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBNYXAgdHVwbGVzIChwcm9ncmVzcywgZG9uZSwgZmFpbCkgdG8gYXJndW1lbnRzIChkb25lLCBmYWlsLCBwcm9ncmVzcylcblx0XHRcdFx0XHRcdFx0dmFyIGZuID0gaXNGdW5jdGlvbiggZm5zWyB0dXBsZVsgNCBdIF0gKSAmJiBmbnNbIHR1cGxlWyA0IF0gXTtcblxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5wcm9ncmVzcyhmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5ub3RpZnkgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZG9uZShmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZXNvbHZlIH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmZhaWwoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVqZWN0IH0pXG5cdFx0XHRcdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMSBdIF0oIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCA9IGZuICYmIGZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkICYmIGlzRnVuY3Rpb24oIHJldHVybmVkLnByb21pc2UgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnByb21pc2UoKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucHJvZ3Jlc3MoIG5ld0RlZmVyLm5vdGlmeSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5kb25lKCBuZXdEZWZlci5yZXNvbHZlIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmZhaWwoIG5ld0RlZmVyLnJlamVjdCApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlclsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGZuID8gWyByZXR1cm5lZCBdIDogYXJndW1lbnRzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0Zm5zID0gbnVsbDtcblx0XHRcdFx0XHR9ICkucHJvbWlzZSgpO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHR0aGVuOiBmdW5jdGlvbiggb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQsIG9uUHJvZ3Jlc3MgKSB7XG5cdFx0XHRcdFx0dmFyIG1heERlcHRoID0gMDtcblx0XHRcdFx0XHRmdW5jdGlvbiByZXNvbHZlKCBkZXB0aCwgZGVmZXJyZWQsIGhhbmRsZXIsIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdHZhciB0aGF0ID0gdGhpcyxcblx0XHRcdFx0XHRcdFx0XHRhcmdzID0gYXJndW1lbnRzLFxuXHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhciByZXR1cm5lZCwgdGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjNcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU5XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgZG91YmxlLXJlc29sdXRpb24gYXR0ZW1wdHNcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggZGVwdGggPCBtYXhEZXB0aCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCA9IGhhbmRsZXIuYXBwbHkoIHRoYXQsIGFyZ3MgKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNDhcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgPT09IGRlZmVycmVkLnByb21pc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvciggXCJUaGVuYWJsZSBzZWxmLXJlc29sdXRpb25cIiApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9ucyAyLjMuMy4xLCAzLjVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTU0XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC03NVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gUmV0cmlldmUgYHRoZW5gIG9ubHkgb25jZVxuXHRcdFx0XHRcdFx0XHRcdFx0dGhlbiA9IHJldHVybmVkICYmXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuNFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC02NFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IGNoZWNrIG9iamVjdHMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlbmFiaWxpdHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCB0eXBlb2YgcmV0dXJuZWQgPT09IFwib2JqZWN0XCIgfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgcmV0dXJuZWQgPT09IFwiZnVuY3Rpb25cIiApICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLnRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhIHJldHVybmVkIHRoZW5hYmxlXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoZW4gKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTcGVjaWFsIHByb2Nlc3NvcnMgKG5vdGlmeSkganVzdCB3YWl0IGZvciByZXNvbHV0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgYWxzbyBob29rIGludG8gcHJvZ3Jlc3Ncblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIC4uLmFuZCBkaXNyZWdhcmQgb2xkZXIgcmVzb2x1dGlvbiB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYXhEZXB0aCsrO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGggKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGFsbCBvdGhlciByZXR1cm5lZCB2YWx1ZXNcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBhbmQgbXVsdGlwbGUgdmFsdWVzIChub24tc3BlYyBiZWhhdmlvcilcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBJZGVudGl0eSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIHJldHVybmVkIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQcm9jZXNzIHRoZSB2YWx1ZShzKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZhdWx0IHByb2Nlc3MgaXMgcmVzb2x2ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHNwZWNpYWwgfHwgZGVmZXJyZWQucmVzb2x2ZVdpdGggKSggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IG5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBjYXRjaCBhbmQgcmVqZWN0IGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzID0gc3BlY2lhbCA/XG5cdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93IDpcblx0XHRcdFx0XHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3coKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2soIGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MuZXJyb3IgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgZXJyb3IsIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0RXJyb3JIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5lcnJvciA9IGpRdWVyeS5EZWZlcnJlZC5nZXRFcnJvckhvb2soKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFRoZSBkZXByZWNhdGVkIGFsaWFzIG9mIHRoZSBhYm92ZS4gV2hpbGUgdGhlIG5hbWUgc3VnZ2VzdHNcblx0XHRcdFx0XHRcdFx0XHQvLyByZXR1cm5pbmcgdGhlIHN0YWNrLCBub3QgYW4gZXJyb3IgaW5zdGFuY2UsIGpRdWVyeSBqdXN0IHBhc3Nlc1xuXHRcdFx0XHRcdFx0XHRcdC8vIGl0IGRpcmVjdGx5IHRvIGBjb25zb2xlLndhcm5gIHNvIGJvdGggd2lsbCB3b3JrOyBhbiBpbnN0YW5jZVxuXHRcdFx0XHRcdFx0XHRcdC8vIGp1c3QgYmV0dGVyIGNvb3BlcmF0ZXMgd2l0aCBzb3VyY2UgbWFwcy5cblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5lcnJvciA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBwcmltYXJ5IERlZmVycmVkXG5cdFx0XHRwcmltYXJ5ID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdHByaW1hcnkucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIHByaW1hcnkuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgcHJpbWFyeS5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBwcmltYXJ5LnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBwcmltYXJ5LnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIHByaW1hcnkucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByaW1hcnkucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG4vLyBJZiBgalF1ZXJ5LkRlZmVycmVkLmdldEVycm9ySG9va2AgaXMgZGVmaW5lZCwgYGFzeW5jRXJyb3JgIGlzIGFuIGVycm9yXG4vLyBjYXB0dXJlZCBiZWZvcmUgdGhlIGFzeW5jIGJhcnJpZXIgdG8gZ2V0IHRoZSBvcmlnaW5hbCBlcnJvciBjYXVzZVxuLy8gd2hpY2ggbWF5IG90aGVyd2lzZSBiZSBoaWRkZW4uXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgYXN5bmNFcnJvciApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsXG5cdFx0XHRlcnJvci5zdGFjaywgYXN5bmNFcnJvciApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgdHJhYy02NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKHRyYWMtOTU3MilcbmZ1bmN0aW9uIGNhbWVsQ2FzZSggc3RyaW5nICkge1xuXHRyZXR1cm4gc3RyaW5nLnJlcGxhY2UoIHJtc1ByZWZpeCwgXCJtcy1cIiApLnJlcGxhY2UoIHJkYXNoQWxwaGEsIGZjYW1lbENhc2UgKTtcbn1cbnZhciBhY2NlcHREYXRhID0gZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdC8vIEFjY2VwdHMgb25seTpcblx0Ly8gIC0gTm9kZVxuXHQvLyAgICAtIE5vZGUuRUxFTUVOVF9OT0RFXG5cdC8vICAgIC0gTm9kZS5ET0NVTUVOVF9OT0RFXG5cdC8vICAtIE9iamVjdFxuXHQvLyAgICAtIEFueVxuXHRyZXR1cm4gb3duZXIubm9kZVR5cGUgPT09IDEgfHwgb3duZXIubm9kZVR5cGUgPT09IDkgfHwgISggK293bmVyLm5vZGVUeXBlICk7XG59O1xuXG5cblxuXG5mdW5jdGlvbiBEYXRhKCkge1xuXHR0aGlzLmV4cGFuZG8gPSBqUXVlcnkuZXhwYW5kbyArIERhdGEudWlkKys7XG59XG5cbkRhdGEudWlkID0gMTtcblxuRGF0YS5wcm90b3R5cGUgPSB7XG5cblx0Y2FjaGU6IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHRcdC8vIENoZWNrIGlmIHRoZSBvd25lciBvYmplY3QgYWxyZWFkeSBoYXMgYSBjYWNoZVxuXHRcdHZhciB2YWx1ZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblxuXHRcdC8vIElmIG5vdCwgY3JlYXRlIG9uZVxuXHRcdGlmICggIXZhbHVlICkge1xuXHRcdFx0dmFsdWUgPSB7fTtcblxuXHRcdFx0Ly8gV2UgY2FuIGFjY2VwdCBkYXRhIGZvciBub24tZWxlbWVudCBub2RlcyBpbiBtb2Rlcm4gYnJvd3NlcnMsXG5cdFx0XHQvLyBidXQgd2Ugc2hvdWxkIG5vdCwgc2VlIHRyYWMtODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKHRyYWMtMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKHRyYWMtMTEyMTcpXG5cdC8vIFN1cHBvcnQ6IFdpbmRvd3MgV2ViIEFwcHMgKFdXQSlcblx0Ly8gYG5hbWVgIGFuZCBgdHlwZWAgbXVzdCB1c2UgLnNldEF0dHJpYnV0ZSBmb3IgV1dBICh0cmFjLTE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICh0cmFjLTEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAodHJhYy0xNTE1MSlcblx0dmFyIHJldDtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSBpZiAoIHR5cGVvZiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2Uge1xuXHRcdHJldCA9IFtdO1xuXHR9XG5cblx0aWYgKCB0YWcgPT09IHVuZGVmaW5lZCB8fCB0YWcgJiYgbm9kZU5hbWUoIGNvbnRleHQsIHRhZyApICkge1xuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFsgY29udGV4dCBdLCByZXQgKTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59XG5cblxuLy8gTWFyayBzY3JpcHRzIGFzIGhhdmluZyBhbHJlYWR5IGJlZW4gZXZhbHVhdGVkXG5mdW5jdGlvbiBzZXRHbG9iYWxFdmFsKCBlbGVtcywgcmVmRWxlbWVudHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRkYXRhUHJpdi5zZXQoXG5cdFx0XHRlbGVtc1sgaSBdLFxuXHRcdFx0XCJnbG9iYWxFdmFsXCIsXG5cdFx0XHQhcmVmRWxlbWVudHMgfHwgZGF0YVByaXYuZ2V0KCByZWZFbGVtZW50c1sgaSBdLCBcImdsb2JhbEV2YWxcIiApXG5cdFx0KTtcblx0fVxufVxuXG5cbnZhciByaHRtbCA9IC88fCYjP1xcdys7LztcblxuZnVuY3Rpb24gYnVpbGRGcmFnbWVudCggZWxlbXMsIGNvbnRleHQsIHNjcmlwdHMsIHNlbGVjdGlvbiwgaWdub3JlZCApIHtcblx0dmFyIGVsZW0sIHRtcCwgdGFnLCB3cmFwLCBhdHRhY2hlZCwgaixcblx0XHRmcmFnbWVudCA9IGNvbnRleHQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdG5vZGVzID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1zWyBpIF07XG5cblx0XHRpZiAoIGVsZW0gfHwgZWxlbSA9PT0gMCApIHtcblxuXHRcdFx0Ly8gQWRkIG5vZGVzIGRpcmVjdGx5XG5cdFx0XHRpZiAoIHRvVHlwZSggZWxlbSApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIGVsZW0ubm9kZVR5cGUgPyBbIGVsZW0gXSA6IGVsZW0gKTtcblxuXHRcdFx0Ly8gQ29udmVydCBub24taHRtbCBpbnRvIGEgdGV4dCBub2RlXG5cdFx0XHR9IGVsc2UgaWYgKCAhcmh0bWwudGVzdCggZWxlbSApICkge1xuXHRcdFx0XHRub2Rlcy5wdXNoKCBjb250ZXh0LmNyZWF0ZVRleHROb2RlKCBlbGVtICkgKTtcblxuXHRcdFx0Ly8gQ29udmVydCBodG1sIGludG8gRE9NIG5vZGVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0bXAgPSB0bXAgfHwgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cblx0XHRcdFx0Ly8gRGVzZXJpYWxpemUgYSBzdGFuZGFyZCByZXByZXNlbnRhdGlvblxuXHRcdFx0XHR0YWcgPSAoIHJ0YWdOYW1lLmV4ZWMoIGVsZW0gKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0d3JhcCA9IHdyYXBNYXBbIHRhZyBdIHx8IHdyYXBNYXAuX2RlZmF1bHQ7XG5cdFx0XHRcdHRtcC5pbm5lckhUTUwgPSB3cmFwWyAxIF0gKyBqUXVlcnkuaHRtbFByZWZpbHRlciggZWxlbSApICsgd3JhcFsgMiBdO1xuXG5cdFx0XHRcdC8vIERlc2NlbmQgdGhyb3VnaCB3cmFwcGVycyB0byB0aGUgcmlnaHQgY29udGVudFxuXHRcdFx0XHRqID0gd3JhcFsgMCBdO1xuXHRcdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0XHR0bXAgPSB0bXAubGFzdENoaWxkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgdG1wLmNoaWxkTm9kZXMgKTtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB0aGUgdG9wLWxldmVsIGNvbnRhaW5lclxuXHRcdFx0XHR0bXAgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSB0aGUgY3JlYXRlZCBub2RlcyBhcmUgb3JwaGFuZWQgKHRyYWMtMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gT25seSBhdHRhY2ggZXZlbnRzIHRvIG9iamVjdHMgdGhhdCBhY2NlcHQgZGF0YVxuXHRcdGlmICggIWFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSBPYmplY3QuY3JlYXRlKCBudWxsICk7XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cblx0XHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApLFxuXG5cdFx0XHRoYW5kbGVycyA9IChcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApXG5cdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICh0cmFjLTEzMjA4KVxuXHRcdFx0XHQvLyBEb24ndCBwcm9jZXNzIGNsaWNrcyBvbiBkaXNhYmxlZCBlbGVtZW50cyAodHJhYy02OTExLCB0cmFjLTgxNjUsIHRyYWMtMTEzODIsIHRyYWMtMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAodHJhYy0xMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBpc1NldHVwICkge1xuXG5cdC8vIE1pc3NpbmcgYGlzU2V0dXBgIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhaXNTZXR1cCApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJlc3VsdCxcblx0XHRcdFx0c2F2ZWQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblxuXHRcdFx0aWYgKCAoIGV2ZW50LmlzVHJpZ2dlciAmIDEgKSAmJiB0aGlzWyB0eXBlIF0gKSB7XG5cblx0XHRcdFx0Ly8gSW50ZXJydXB0IHByb2Nlc3Npbmcgb2YgdGhlIG91dGVyIHN5bnRoZXRpYyAudHJpZ2dlcigpZWQgZXZlbnRcblx0XHRcdFx0aWYgKCAhc2F2ZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdHRoaXNbIHR5cGUgXSgpO1xuXHRcdFx0XHRcdHJlc3VsdCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgZmFsc2UgKTtcblxuXHRcdFx0XHRcdGlmICggc2F2ZWQgIT09IHJlc3VsdCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSBvdXRlciBzeW50aGV0aWMgZXZlbnRcblx0XHRcdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmdcblx0XHRcdFx0Ly8gdGhlIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cdFx0XHRcdFx0c2F2ZWRbIDAgXSxcblx0XHRcdFx0XHRzYXZlZC5zbGljZSggMSApLFxuXHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdC8vIEFib3J0IGhhbmRsaW5nIG9mIHRoZSBuYXRpdmUgZXZlbnQgYnkgYWxsIGpRdWVyeSBoYW5kbGVycyB3aGlsZSBhbGxvd2luZ1xuXHRcdFx0XHQvLyBuYXRpdmUgaGFuZGxlcnMgb24gdGhlIHNhbWUgZWxlbWVudCB0byBydW4uIE9uIHRhcmdldCwgdGhpcyBpcyBhY2hpZXZlZFxuXHRcdFx0XHQvLyBieSBzdG9wcGluZyBpbW1lZGlhdGUgcHJvcGFnYXRpb24ganVzdCBvbiB0aGUgalF1ZXJ5IGV2ZW50LiBIb3dldmVyLFxuXHRcdFx0XHQvLyB0aGUgbmF0aXZlIGV2ZW50IGlzIHJlLXdyYXBwZWQgYnkgYSBqUXVlcnkgb25lIG9uIGVhY2ggbGV2ZWwgb2YgdGhlXG5cdFx0XHRcdC8vIHByb3BhZ2F0aW9uIHNvIHRoZSBvbmx5IHdheSB0byBzdG9wIGl0IGZvciBqUXVlcnkgaXMgdG8gc3RvcCBpdCBmb3Jcblx0XHRcdFx0Ly8gZXZlcnlvbmUgdmlhIG5hdGl2ZSBgc3RvcFByb3BhZ2F0aW9uKClgLiBUaGlzIGlzIG5vdCBhIHByb2JsZW0gZm9yXG5cdFx0XHRcdC8vIGZvY3VzL2JsdXIgd2hpY2ggZG9uJ3QgYnViYmxlLCBidXQgaXQgZG9lcyBhbHNvIHN0b3AgY2xpY2sgb24gY2hlY2tib3hlc1xuXHRcdFx0XHQvLyBhbmQgcmFkaW9zLiBXZSBhY2NlcHQgdGhpcyBsaW1pdGF0aW9uLlxuXHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0ZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKHRyYWMtNTA0LCB0cmFjLTEzMTQzKVxuXHRcdHRoaXMudGFyZ2V0ID0gKCBzcmMudGFyZ2V0ICYmIHNyYy50YXJnZXQubm9kZVR5cGUgPT09IDMgKSA/XG5cdFx0XHRzcmMudGFyZ2V0LnBhcmVudE5vZGUgOlxuXHRcdFx0c3JjLnRhcmdldDtcblxuXHRcdHRoaXMuY3VycmVudFRhcmdldCA9IHNyYy5jdXJyZW50VGFyZ2V0O1xuXHRcdHRoaXMucmVsYXRlZFRhcmdldCA9IHNyYy5yZWxhdGVkVGFyZ2V0O1xuXG5cdC8vIEV2ZW50IHR5cGVcblx0fSBlbHNlIHtcblx0XHR0aGlzLnR5cGUgPSBzcmM7XG5cdH1cblxuXHQvLyBQdXQgZXhwbGljaXRseSBwcm92aWRlZCBwcm9wZXJ0aWVzIG9udG8gdGhlIGV2ZW50IG9iamVjdFxuXHRpZiAoIHByb3BzICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRoaXMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBDcmVhdGUgYSB0aW1lc3RhbXAgaWYgaW5jb21pbmcgZXZlbnQgZG9lc24ndCBoYXZlIG9uZVxuXHR0aGlzLnRpbWVTdGFtcCA9IHNyYyAmJiBzcmMudGltZVN0YW1wIHx8IERhdGUubm93KCk7XG5cblx0Ly8gTWFyayBpdCBhcyBmaXhlZFxuXHR0aGlzWyBqUXVlcnkuZXhwYW5kbyBdID0gdHJ1ZTtcbn07XG5cbi8vIGpRdWVyeS5FdmVudCBpcyBiYXNlZCBvbiBET00zIEV2ZW50cyBhcyBzcGVjaWZpZWQgYnkgdGhlIEVDTUFTY3JpcHQgTGFuZ3VhZ2UgQmluZGluZ1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSLzIwMDMvV0QtRE9NLUxldmVsLTMtRXZlbnRzLTIwMDMwMzMxL2VjbWEtc2NyaXB0LWJpbmRpbmcuaHRtbFxualF1ZXJ5LkV2ZW50LnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IGpRdWVyeS5FdmVudCxcblx0aXNEZWZhdWx0UHJldmVudGVkOiByZXR1cm5GYWxzZSxcblx0aXNQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzU2ltdWxhdGVkOiBmYWxzZSxcblxuXHRwcmV2ZW50RGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdH1cblx0fSxcblx0c3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cblx0XHR0aGlzLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9XG59O1xuXG4vLyBJbmNsdWRlcyBhbGwgY29tbW9uIGV2ZW50IHByb3BzIGluY2x1ZGluZyBLZXlFdmVudCBhbmQgTW91c2VFdmVudCBzcGVjaWZpYyBwcm9wc1xualF1ZXJ5LmVhY2goIHtcblx0YWx0S2V5OiB0cnVlLFxuXHRidWJibGVzOiB0cnVlLFxuXHRjYW5jZWxhYmxlOiB0cnVlLFxuXHRjaGFuZ2VkVG91Y2hlczogdHJ1ZSxcblx0Y3RybEtleTogdHJ1ZSxcblx0ZGV0YWlsOiB0cnVlLFxuXHRldmVudFBoYXNlOiB0cnVlLFxuXHRtZXRhS2V5OiB0cnVlLFxuXHRwYWdlWDogdHJ1ZSxcblx0cGFnZVk6IHRydWUsXG5cdHNoaWZ0S2V5OiB0cnVlLFxuXHR2aWV3OiB0cnVlLFxuXHRcImNoYXJcIjogdHJ1ZSxcblx0Y29kZTogdHJ1ZSxcblx0Y2hhckNvZGU6IHRydWUsXG5cdGtleTogdHJ1ZSxcblx0a2V5Q29kZTogdHJ1ZSxcblx0YnV0dG9uOiB0cnVlLFxuXHRidXR0b25zOiB0cnVlLFxuXHRjbGllbnRYOiB0cnVlLFxuXHRjbGllbnRZOiB0cnVlLFxuXHRvZmZzZXRYOiB0cnVlLFxuXHRvZmZzZXRZOiB0cnVlLFxuXHRwb2ludGVySWQ6IHRydWUsXG5cdHBvaW50ZXJUeXBlOiB0cnVlLFxuXHRzY3JlZW5YOiB0cnVlLFxuXHRzY3JlZW5ZOiB0cnVlLFxuXHR0YXJnZXRUb3VjaGVzOiB0cnVlLFxuXHR0b0VsZW1lbnQ6IHRydWUsXG5cdHRvdWNoZXM6IHRydWUsXG5cdHdoaWNoOiB0cnVlXG59LCBqUXVlcnkuZXZlbnQuYWRkUHJvcCApO1xuXG5qUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggdHlwZSwgZGVsZWdhdGVUeXBlICkge1xuXG5cdGZ1bmN0aW9uIGZvY3VzTWFwcGVkSGFuZGxlciggbmF0aXZlRXZlbnQgKSB7XG5cdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGZvY3VzaW4vZm9jdXNvdXQgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50c1xuXHRcdFx0Ly8gZm9jdXMvYmx1ci4gVGhpcyBpcyBiZWNhdXNlIHRoZSBmb3JtZXIgYXJlIHN5bmNocm9ub3VzIGluIElFIHdoaWxlIHRoZSBsYXR0ZXJcblx0XHRcdC8vIGFyZSBhc3luYy4gSW4gb3RoZXIgYnJvd3NlcnMsIGFsbCB0aG9zZSBoYW5kbGVycyBhcmUgaW52b2tlZCBzeW5jaHJvbm91c2x5LlxuXG5cdFx0XHQvLyBgaGFuZGxlYCBmcm9tIHByaXZhdGUgZGF0YSB3b3VsZCBhbHJlYWR5IHdyYXAgdGhlIGV2ZW50LCBidXQgd2UgbmVlZFxuXHRcdFx0Ly8gdG8gY2hhbmdlIHRoZSBgdHlwZWAgaGVyZS5cblx0XHRcdHZhciBoYW5kbGUgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiaGFuZGxlXCIgKSxcblx0XHRcdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApO1xuXHRcdFx0ZXZlbnQudHlwZSA9IG5hdGl2ZUV2ZW50LnR5cGUgPT09IFwiZm9jdXNpblwiID8gXCJmb2N1c1wiIDogXCJibHVyXCI7XG5cdFx0XHRldmVudC5pc1NpbXVsYXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIEZpcnN0LCBoYW5kbGUgZm9jdXNpbi9mb2N1c291dFxuXHRcdFx0aGFuZGxlKCBuYXRpdmVFdmVudCApO1xuXG5cdFx0XHQvLyAuLi50aGVuLCBoYW5kbGUgZm9jdXMvYmx1clxuXHRcdFx0Ly9cblx0XHRcdC8vIGZvY3VzL2JsdXIgZG9uJ3QgYnViYmxlIHdoaWxlIGZvY3VzaW4vZm9jdXNvdXQgZG87IHNpbXVsYXRlIHRoZSBmb3JtZXIgYnkgb25seVxuXHRcdFx0Ly8gaW52b2tpbmcgdGhlIGhhbmRsZXIgYXQgdGhlIGxvd2VyIGxldmVsLlxuXHRcdFx0aWYgKCBldmVudC50YXJnZXQgPT09IGV2ZW50LmN1cnJlbnRUYXJnZXQgKSB7XG5cblx0XHRcdFx0Ly8gVGhlIHNldHVwIHBhcnQgY2FsbHMgYGxldmVyYWdlTmF0aXZlYCwgd2hpY2gsIGluIHR1cm4sIGNhbGxzXG5cdFx0XHRcdC8vIGBqUXVlcnkuZXZlbnQuYWRkYCwgc28gZXZlbnQgaGFuZGxlIHdpbGwgYWxyZWFkeSBoYXZlIGJlZW4gc2V0XG5cdFx0XHRcdC8vIGJ5IHRoaXMgcG9pbnQuXG5cdFx0XHRcdGhhbmRsZSggZXZlbnQgKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3Igbm9uLUlFIGJyb3dzZXJzLCBhdHRhY2ggYSBzaW5nbGUgY2FwdHVyaW5nIGhhbmRsZXIgb24gdGhlIGRvY3VtZW50XG5cdFx0XHQvLyB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXQuXG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGRlbGVnYXRlVHlwZSwgbmF0aXZlRXZlbnQudGFyZ2V0LFxuXHRcdFx0XHRqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApICk7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0dmFyIGF0dGFjaGVzO1xuXG5cdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImZvY3VzXCIsIC4uLiApXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiYmx1clwiLCAuLi4gKVxuXHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIHRoaXMsIHR5cGUsIHRydWUgKTtcblxuXHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExK1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIHNhbWUgbmF0aXZlIGhhbmRsZXIgZm9yIGZvY3VzaW4gJiBmb2N1cyAoYW5kIGZvY3Vzb3V0ICYgYmx1cilcblx0XHRcdFx0Ly8gc28gd2UgbmVlZCB0byBjb29yZGluYXRlIHNldHVwICYgdGVhcmRvd24gcGFydHMgYmV0d2VlbiB0aG9zZSBldmVudHMuXG5cdFx0XHRcdC8vIFVzZSBgZGVsZWdhdGVUeXBlYCBhcyB0aGUga2V5IGFzIGB0eXBlYCBpcyBhbHJlYWR5IHVzZWQgYnkgYGxldmVyYWdlTmF0aXZlYC5cblx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSApO1xuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHR0aGlzLmFkZEV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBkZWxlZ2F0ZVR5cGUsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgYXR0YWNoZXM7XG5cblx0XHRcdGlmICggZG9jdW1lbnQuZG9jdW1lbnRNb2RlICkge1xuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggdGhpcywgZGVsZWdhdGVUeXBlICkgLSAxO1xuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHR0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoIGRlbGVnYXRlVHlwZSwgZm9jdXNNYXBwZWRIYW5kbGVyICk7XG5cdFx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCB0aGlzLCBkZWxlZ2F0ZVR5cGUgKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIGRlbGVnYXRlVHlwZSwgYXR0YWNoZXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gaW5kaWNhdGUgc3RhbmRhcmQgdGVhcmRvd24gc2hvdWxkIGJlIGFwcGxpZWRcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBTdXBwcmVzcyBuYXRpdmUgZm9jdXMgb3IgYmx1ciBpZiB3ZSdyZSBjdXJyZW50bHkgaW5zaWRlXG5cdFx0Ly8gYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGV2ZW50LnRhcmdldCwgdHlwZSApO1xuXHRcdH0sXG5cblx0XHRkZWxlZ2F0ZVR5cGU6IGRlbGVnYXRlVHlwZVxuXHR9O1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuXHQvLyBGaXJlZm94IGRvZXNuJ3QgaGF2ZSBmb2N1cyhpbiB8IG91dCkgZXZlbnRzXG5cdC8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG5cdC8vXG5cdC8vIFN1cHBvcnQ6IENocm9tZSA8PTQ4IC0gNDksIFNhZmFyaSA8PTkuMCAtIDkuMVxuXHQvLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcblx0Ly8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG5cdC8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDQ5ODU3XG5cdC8vXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0Ly8gVG8gcHJlc2VydmUgcmVsYXRpdmUgZm9jdXNpbi9mb2N1cyAmIGZvY3Vzb3V0L2JsdXIgZXZlbnQgb3JkZXIgZ3VhcmFudGVlZCBvbiB0aGUgMy54IGJyYW5jaCxcblx0Ly8gYXR0YWNoIGEgc2luZ2xlIGhhbmRsZXIgZm9yIGJvdGggZXZlbnRzIGluIElFLlxuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZGVsZWdhdGVUeXBlIF0gPSB7XG5cdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0Ly8gKHZpYSBgdGhpcy5kb2N1bWVudGApICYgZG9jdW1lbnQgKHZpYSBgdGhpc2ApLlxuXHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdGRhdGFIb2xkZXIgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUgPyB0aGlzIDogZG9jLFxuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMStcblx0XHRcdC8vIFdlIHVzZSB0aGUgc2FtZSBuYXRpdmUgaGFuZGxlciBmb3IgZm9jdXNpbiAmIGZvY3VzIChhbmQgZm9jdXNvdXQgJiBibHVyKVxuXHRcdFx0Ly8gc28gd2UgbmVlZCB0byBjb29yZGluYXRlIHNldHVwICYgdGVhcmRvd24gcGFydHMgYmV0d2VlbiB0aG9zZSBldmVudHMuXG5cdFx0XHQvLyBVc2UgYGRlbGVnYXRlVHlwZWAgYXMgdGhlIGtleSBhcyBgdHlwZWAgaXMgYWxyZWFkeSB1c2VkIGJ5IGBsZXZlcmFnZU5hdGl2ZWAuXG5cdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5hZGRFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBmb2N1c01hcHBlZEhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0ZGF0YVByaXYuc2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUsICggYXR0YWNoZXMgfHwgMCApICsgMSApO1xuXHRcdH0sXG5cdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdGRhdGFIb2xkZXIgPSBkb2N1bWVudC5kb2N1bWVudE1vZGUgPyB0aGlzIDogZG9jLFxuXHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmdldCggZGF0YUhvbGRlciwgZGVsZWdhdGVUeXBlICkgLSAxO1xuXG5cdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0aWYgKCBkb2N1bWVudC5kb2N1bWVudE1vZGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCBkZWxlZ2F0ZVR5cGUsIGZvY3VzTWFwcGVkSGFuZGxlciApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRvYy5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBmb2N1c01hcHBlZEhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRhdGFIb2xkZXIsIGRlbGVnYXRlVHlwZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVByaXYuc2V0KCBkYXRhSG9sZGVyLCBkZWxlZ2F0ZVR5cGUsIGF0dGFjaGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufSApO1xuXG4vLyBDcmVhdGUgbW91c2VlbnRlci9sZWF2ZSBldmVudHMgdXNpbmcgbW91c2VvdmVyL291dCBhbmQgZXZlbnQtdGltZSBjaGVja3Ncbi8vIHNvIHRoYXQgZXZlbnQgZGVsZWdhdGlvbiB3b3JrcyBpbiBqUXVlcnkuXG4vLyBEbyB0aGUgc2FtZSBmb3IgcG9pbnRlcmVudGVyL3BvaW50ZXJsZWF2ZSBhbmQgcG9pbnRlcm92ZXIvcG9pbnRlcm91dFxuLy9cbi8vIFN1cHBvcnQ6IFNhZmFyaSA3IG9ubHlcbi8vIFNhZmFyaSBzZW5kcyBtb3VzZWVudGVyIHRvbyBvZnRlbjsgc2VlOlxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NDcwMjU4XG4vLyBmb3IgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBidWcgKGl0IGV4aXN0ZWQgaW4gb2xkZXIgQ2hyb21lIHZlcnNpb25zIGFzIHdlbGwpLlxualF1ZXJ5LmVhY2goIHtcblx0bW91c2VlbnRlcjogXCJtb3VzZW92ZXJcIixcblx0bW91c2VsZWF2ZTogXCJtb3VzZW91dFwiLFxuXHRwb2ludGVyZW50ZXI6IFwicG9pbnRlcm92ZXJcIixcblx0cG9pbnRlcmxlYXZlOiBcInBvaW50ZXJvdXRcIlxufSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIG9yaWcgXSA9IHtcblx0XHRkZWxlZ2F0ZVR5cGU6IGZpeCxcblx0XHRiaW5kVHlwZTogZml4LFxuXG5cdFx0aGFuZGxlOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHR2YXIgcmV0LFxuXHRcdFx0XHR0YXJnZXQgPSB0aGlzLFxuXHRcdFx0XHRyZWxhdGVkID0gZXZlbnQucmVsYXRlZFRhcmdldCxcblx0XHRcdFx0aGFuZGxlT2JqID0gZXZlbnQuaGFuZGxlT2JqO1xuXG5cdFx0XHQvLyBGb3IgbW91c2VlbnRlci9sZWF2ZSBjYWxsIHRoZSBoYW5kbGVyIGlmIHJlbGF0ZWQgaXMgb3V0c2lkZSB0aGUgdGFyZ2V0LlxuXHRcdFx0Ly8gTkI6IE5vIHJlbGF0ZWRUYXJnZXQgaWYgdGhlIG1vdXNlIGxlZnQvZW50ZXJlZCB0aGUgYnJvd3NlciB3aW5kb3dcblx0XHRcdGlmICggIXJlbGF0ZWQgfHwgKCByZWxhdGVkICE9PSB0YXJnZXQgJiYgIWpRdWVyeS5jb250YWlucyggdGFyZ2V0LCByZWxhdGVkICkgKSApIHtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGhhbmRsZU9iai5vcmlnVHlwZTtcblx0XHRcdFx0cmV0ID0gaGFuZGxlT2JqLmhhbmRsZXIuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRldmVudC50eXBlID0gZml4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRvbjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdG9uZTogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIG9uKCB0aGlzLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCAxICk7XG5cdH0sXG5cdG9mZjogZnVuY3Rpb24oIHR5cGVzLCBzZWxlY3RvciwgZm4gKSB7XG5cdFx0dmFyIGhhbmRsZU9iaiwgdHlwZTtcblx0XHRpZiAoIHR5cGVzICYmIHR5cGVzLnByZXZlbnREZWZhdWx0ICYmIHR5cGVzLmhhbmRsZU9iaiApIHtcblxuXHRcdFx0Ly8gKCBldmVudCApICBkaXNwYXRjaGVkIGpRdWVyeS5FdmVudFxuXHRcdFx0aGFuZGxlT2JqID0gdHlwZXMuaGFuZGxlT2JqO1xuXHRcdFx0alF1ZXJ5KCB0eXBlcy5kZWxlZ2F0ZVRhcmdldCApLm9mZihcblx0XHRcdFx0aGFuZGxlT2JqLm5hbWVzcGFjZSA/XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlICsgXCIuXCIgKyBoYW5kbGVPYmoubmFtZXNwYWNlIDpcblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUsXG5cdFx0XHRcdGhhbmRsZU9iai5zZWxlY3Rvcixcblx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXJcblx0XHRcdCk7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMtb2JqZWN0IFssIHNlbGVjdG9yXSApXG5cdFx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0XHR0aGlzLm9mZiggdHlwZSwgc2VsZWN0b3IsIHR5cGVzWyB0eXBlIF0gKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHNlbGVjdG9yID09PSBmYWxzZSB8fCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcyBbLCBmbl0gKVxuXHRcdFx0Zm4gPSBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGZuID09PSBmYWxzZSApIHtcblx0XHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggdGhpcywgdHlwZXMsIGZuLCBzZWxlY3RvciApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbnZhclxuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSwgRWRnZSAxMiAtIDEzIG9ubHlcblx0Ly8gSW4gSUUvRWRnZSB1c2luZyByZWdleCBncm91cHMgaGVyZSBjYXVzZXMgc2V2ZXJlIHNsb3dkb3ducy5cblx0Ly8gU2VlIGh0dHBzOi8vY29ubmVjdC5taWNyb3NvZnQuY29tL0lFL2ZlZWRiYWNrL2RldGFpbHMvMTczNjUxMi9cblx0cm5vSW5uZXJodG1sID0gLzxzY3JpcHR8PHN0eWxlfDxsaW5rL2ksXG5cblx0Ly8gY2hlY2tlZD1cImNoZWNrZWRcIiBvciBjaGVja2VkXG5cdHJjaGVja2VkID0gL2NoZWNrZWRcXHMqKD86W149XXw9XFxzKi5jaGVja2VkLikvaSxcblxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8IVxcW0NEQVRBXFxbfFxcXVxcXT5cXHMqJC9nO1xuXG4vLyBQcmVmZXIgYSB0Ym9keSBvdmVyIGl0cyBwYXJlbnQgdGFibGUgZm9yIGNvbnRhaW5pbmcgbmV3IHJvd3NcbmZ1bmN0aW9uIG1hbmlwdWxhdGlvblRhcmdldCggZWxlbSwgY29udGVudCApIHtcblx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0YWJsZVwiICkgJiZcblx0XHRub2RlTmFtZSggY29udGVudC5ub2RlVHlwZSAhPT0gMTEgPyBjb250ZW50IDogY29udGVudC5maXJzdENoaWxkLCBcInRyXCIgKSApIHtcblxuXHRcdHJldHVybiBqUXVlcnkoIGVsZW0gKS5jaGlsZHJlbiggXCJ0Ym9keVwiIClbIDAgXSB8fCBlbGVtO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbi8vIFJlcGxhY2UvcmVzdG9yZSB0aGUgdHlwZSBhdHRyaWJ1dGUgb2Ygc2NyaXB0IGVsZW1lbnRzIGZvciBzYWZlIERPTSBtYW5pcHVsYXRpb25cbmZ1bmN0aW9uIGRpc2FibGVTY3JpcHQoIGVsZW0gKSB7XG5cdGVsZW0udHlwZSA9ICggZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgIT09IG51bGwgKSArIFwiL1wiICsgZWxlbS50eXBlO1xuXHRyZXR1cm4gZWxlbTtcbn1cbmZ1bmN0aW9uIHJlc3RvcmVTY3JpcHQoIGVsZW0gKSB7XG5cdGlmICggKCBlbGVtLnR5cGUgfHwgXCJcIiApLnNsaWNlKCAwLCA1ICkgPT09IFwidHJ1ZS9cIiApIHtcblx0XHRlbGVtLnR5cGUgPSBlbGVtLnR5cGUuc2xpY2UoIDUgKTtcblx0fSBlbHNlIHtcblx0XHRlbGVtLnJlbW92ZUF0dHJpYnV0ZSggXCJ0eXBlXCIgKTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5mdW5jdGlvbiBjbG9uZUNvcHlFdmVudCggc3JjLCBkZXN0ICkge1xuXHR2YXIgaSwgbCwgdHlwZSwgcGRhdGFPbGQsIHVkYXRhT2xkLCB1ZGF0YUN1ciwgZXZlbnRzO1xuXG5cdGlmICggZGVzdC5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyAxLiBDb3B5IHByaXZhdGUgZGF0YTogZXZlbnRzLCBoYW5kbGVycywgZXRjLlxuXHRpZiAoIGRhdGFQcml2Lmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHBkYXRhT2xkID0gZGF0YVByaXYuZ2V0KCBzcmMgKTtcblx0XHRldmVudHMgPSBwZGF0YU9sZC5ldmVudHM7XG5cblx0XHRpZiAoIGV2ZW50cyApIHtcblx0XHRcdGRhdGFQcml2LnJlbW92ZSggZGVzdCwgXCJoYW5kbGUgZXZlbnRzXCIgKTtcblxuXHRcdFx0Zm9yICggdHlwZSBpbiBldmVudHMgKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gZXZlbnRzWyB0eXBlIF0ubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGRlc3QsIHR5cGUsIGV2ZW50c1sgdHlwZSBdWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIDIuIENvcHkgdXNlciBkYXRhXG5cdGlmICggZGF0YVVzZXIuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0dWRhdGFPbGQgPSBkYXRhVXNlci5hY2Nlc3MoIHNyYyApO1xuXHRcdHVkYXRhQ3VyID0galF1ZXJ5LmV4dGVuZCgge30sIHVkYXRhT2xkICk7XG5cblx0XHRkYXRhVXNlci5zZXQoIGRlc3QsIHVkYXRhQ3VyICk7XG5cdH1cbn1cblxuLy8gRml4IElFIGJ1Z3MsIHNlZSBzdXBwb3J0IHRlc3RzXG5mdW5jdGlvbiBmaXhJbnB1dCggc3JjLCBkZXN0ICkge1xuXHR2YXIgbm9kZU5hbWUgPSBkZXN0Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cblx0Ly8gRmFpbHMgdG8gcGVyc2lzdCB0aGUgY2hlY2tlZCBzdGF0ZSBvZiBhIGNsb25lZCBjaGVja2JveCBvciByYWRpbyBidXR0b24uXG5cdGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiByY2hlY2thYmxlVHlwZS50ZXN0KCBzcmMudHlwZSApICkge1xuXHRcdGRlc3QuY2hlY2tlZCA9IHNyYy5jaGVja2VkO1xuXG5cdC8vIEZhaWxzIHRvIHJldHVybiB0aGUgc2VsZWN0ZWQgb3B0aW9uIHRvIHRoZSBkZWZhdWx0IHNlbGVjdGVkIHN0YXRlIHdoZW4gY2xvbmluZyBvcHRpb25zXG5cdH0gZWxzZSBpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgfHwgbm9kZU5hbWUgPT09IFwidGV4dGFyZWFcIiApIHtcblx0XHRkZXN0LmRlZmF1bHRWYWx1ZSA9IHNyYy5kZWZhdWx0VmFsdWU7XG5cdH1cbn1cblxuZnVuY3Rpb24gZG9tTWFuaXAoIGNvbGxlY3Rpb24sIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICkge1xuXG5cdC8vIEZsYXR0ZW4gYW55IG5lc3RlZCBhcnJheXNcblx0YXJncyA9IGZsYXQoIGFyZ3MgKTtcblxuXHR2YXIgZnJhZ21lbnQsIGZpcnN0LCBzY3JpcHRzLCBoYXNTY3JpcHRzLCBub2RlLCBkb2MsXG5cdFx0aSA9IDAsXG5cdFx0bCA9IGNvbGxlY3Rpb24ubGVuZ3RoLFxuXHRcdGlOb0Nsb25lID0gbCAtIDEsXG5cdFx0dmFsdWUgPSBhcmdzWyAwIF0sXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHQvLyBXZSBjYW4ndCBjbG9uZU5vZGUgZnJhZ21lbnRzIHRoYXQgY29udGFpbiBjaGVja2VkLCBpbiBXZWJLaXRcblx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gfHxcblx0XHRcdCggbCA+IDEgJiYgdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCFzdXBwb3J0LmNoZWNrQ2xvbmUgJiYgcmNoZWNrZWQudGVzdCggdmFsdWUgKSApICkge1xuXHRcdHJldHVybiBjb2xsZWN0aW9uLmVhY2goIGZ1bmN0aW9uKCBpbmRleCApIHtcblx0XHRcdHZhciBzZWxmID0gY29sbGVjdGlvbi5lcSggaW5kZXggKTtcblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHRhcmdzWyAwIF0gPSB2YWx1ZS5jYWxsKCB0aGlzLCBpbmRleCwgc2VsZi5odG1sKCkgKTtcblx0XHRcdH1cblx0XHRcdGRvbU1hbmlwKCBzZWxmLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggbCApIHtcblx0XHRmcmFnbWVudCA9IGJ1aWxkRnJhZ21lbnQoIGFyZ3MsIGNvbGxlY3Rpb25bIDAgXS5vd25lckRvY3VtZW50LCBmYWxzZSwgY29sbGVjdGlvbiwgaWdub3JlZCApO1xuXHRcdGZpcnN0ID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdGlmICggZnJhZ21lbnQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDEgKSB7XG5cdFx0XHRmcmFnbWVudCA9IGZpcnN0O1xuXHRcdH1cblxuXHRcdC8vIFJlcXVpcmUgZWl0aGVyIG5ldyBjb250ZW50IG9yIGFuIGludGVyZXN0IGluIGlnbm9yZWQgZWxlbWVudHMgdG8gaW52b2tlIHRoZSBjYWxsYmFja1xuXHRcdGlmICggZmlyc3QgfHwgaWdub3JlZCApIHtcblx0XHRcdHNjcmlwdHMgPSBqUXVlcnkubWFwKCBnZXRBbGwoIGZyYWdtZW50LCBcInNjcmlwdFwiICksIGRpc2FibGVTY3JpcHQgKTtcblx0XHRcdGhhc1NjcmlwdHMgPSBzY3JpcHRzLmxlbmd0aDtcblxuXHRcdFx0Ly8gVXNlIHRoZSBvcmlnaW5hbCBmcmFnbWVudCBmb3IgdGhlIGxhc3QgaXRlbVxuXHRcdFx0Ly8gaW5zdGVhZCBvZiB0aGUgZmlyc3QgYmVjYXVzZSBpdCBjYW4gZW5kIHVwXG5cdFx0XHQvLyBiZWluZyBlbXB0aWVkIGluY29ycmVjdGx5IGluIGNlcnRhaW4gc2l0dWF0aW9ucyAodHJhYy04MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZS1lbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVW53cmFwIGEgQ0RBVEEgc2VjdGlvbiBjb250YWluaW5nIHNjcmlwdCBjb250ZW50cy4gVGhpcyBzaG91bGRuJ3QgYmVcblx0XHRcdFx0XHRcdFx0Ly8gbmVlZGVkIGFzIGluIFhNTCBkb2N1bWVudHMgdGhleSdyZSBhbHJlYWR5IG5vdCB2aXNpYmxlIHdoZW5cblx0XHRcdFx0XHRcdFx0Ly8gaW5zcGVjdGluZyBlbGVtZW50IGNvbnRlbnRzIGFuZCBpbiBIVE1MIGRvY3VtZW50cyB0aGV5IGhhdmUgbm9cblx0XHRcdFx0XHRcdFx0Ly8gbWVhbmluZyBidXQgd2UncmUgcHJlc2VydmluZyB0aGF0IGxvZ2ljIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgY29tcGxldGVseSBpbiA0LjAuIFNlZSBnaC00OTA0LlxuXHRcdFx0XHRcdFx0XHRET01FdmFsKCBub2RlLnRleHRDb250ZW50LnJlcGxhY2UoIHJjbGVhblNjcmlwdCwgXCJcIiApLCBub2RlLCBkb2MgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gY29sbGVjdGlvbjtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlKCBlbGVtLCBzZWxlY3Rvciwga2VlcERhdGEgKSB7XG5cdHZhciBub2RlLFxuXHRcdG5vZGVzID0gc2VsZWN0b3IgPyBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgZWxlbSApIDogZWxlbSxcblx0XHRpID0gMDtcblxuXHRmb3IgKCA7ICggbm9kZSA9IG5vZGVzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0aWYgKCAha2VlcERhdGEgJiYgbm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggbm9kZSApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBub2RlLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRpZiAoIGtlZXBEYXRhICYmIGlzQXR0YWNoZWQoIG5vZGUgKSApIHtcblx0XHRcdFx0c2V0R2xvYmFsRXZhbCggZ2V0QWxsKCBub2RlLCBcInNjcmlwdFwiICkgKTtcblx0XHRcdH1cblx0XHRcdG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggbm9kZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdGh0bWxQcmVmaWx0ZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHJldHVybiBodG1sO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZWxlbSwgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0dmFyIGksIGwsIHNyY0VsZW1lbnRzLCBkZXN0RWxlbWVudHMsXG5cdFx0XHRjbG9uZSA9IGVsZW0uY2xvbmVOb2RlKCB0cnVlICksXG5cdFx0XHRpblBhZ2UgPSBpc0F0dGFjaGVkKCBlbGVtICk7XG5cblx0XHQvLyBGaXggSUUgY2xvbmluZyBpc3N1ZXNcblx0XHRpZiAoICFzdXBwb3J0Lm5vQ2xvbmVDaGVja2VkICYmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBlbGVtLm5vZGVUeXBlID09PSAxMSApICYmXG5cdFx0XHRcdCFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gV2UgZXNjaGV3IGpRdWVyeSNmaW5kIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6XG5cdFx0XHQvLyBodHRwczovL2pzcGVyZi5jb20vZ2V0YWxsLXZzLXNpenpsZS8yXG5cdFx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lICk7XG5cdFx0XHRzcmNFbGVtZW50cyA9IGdldEFsbCggZWxlbSApO1xuXG5cdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zml4SW5wdXQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29weSB0aGUgZXZlbnRzIGZyb20gdGhlIG9yaWdpbmFsIHRvIHRoZSBjbG9uZVxuXHRcdGlmICggZGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdGlmICggZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRcdHNyY0VsZW1lbnRzID0gc3JjRWxlbWVudHMgfHwgZ2V0QWxsKCBlbGVtICk7XG5cdFx0XHRcdGRlc3RFbGVtZW50cyA9IGRlc3RFbGVtZW50cyB8fCBnZXRBbGwoIGNsb25lICk7XG5cblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIHNyY0VsZW1lbnRzWyBpIF0sIGRlc3RFbGVtZW50c1sgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGNsb25lQ29weUV2ZW50KCBlbGVtLCBjbG9uZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByZXNlcnZlIHNjcmlwdCBldmFsdWF0aW9uIGhpc3Rvcnlcblx0XHRkZXN0RWxlbWVudHMgPSBnZXRBbGwoIGNsb25lLCBcInNjcmlwdFwiICk7XG5cdFx0aWYgKCBkZXN0RWxlbWVudHMubGVuZ3RoID4gMCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIGRlc3RFbGVtZW50cywgIWluUGFnZSAmJiBnZXRBbGwoIGVsZW0sIFwic2NyaXB0XCIgKSApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB0aGUgY2xvbmVkIHNldFxuXHRcdHJldHVybiBjbG9uZTtcblx0fSxcblxuXHRjbGVhbkRhdGE6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblx0XHR2YXIgZGF0YSwgZWxlbSwgdHlwZSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbCxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT09IHVuZGVmaW5lZDsgaSsrICkge1xuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cdFx0XHRcdGlmICggKCBkYXRhID0gZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdGZvciAoIHR5cGUgaW4gZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggc3BlY2lhbFsgdHlwZSBdICkge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0XHRcdFx0XHQvLyBUaGlzIGlzIGEgc2hvcnRjdXQgdG8gYXZvaWQgalF1ZXJ5LmV2ZW50LnJlbW92ZSdzIG92ZXJoZWFkXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBkYXRhLmhhbmRsZSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCBlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gKSB7XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRldGFjaDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yLCB0cnVlICk7XG5cdH0sXG5cblx0cmVtb3ZlOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IgKTtcblx0fSxcblxuXHR0ZXh0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkudGV4dCggdGhpcyApIDpcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdFx0dGhpcy50ZXh0Q29udGVudCA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0YXBwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuYXBwZW5kQ2hpbGQoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0cHJlcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0Lmluc2VydEJlZm9yZSggZWxlbSwgdGFyZ2V0LmZpcnN0Q2hpbGQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YmVmb3JlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRhZnRlcjogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMubmV4dFNpYmxpbmcgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0ZW1wdHk6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IHRoaXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBQcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblxuXHRcdFx0XHQvLyBSZW1vdmUgYW55IHJlbWFpbmluZyBub2Rlc1xuXHRcdFx0XHRlbGVtLnRleHRDb250ZW50ID0gXCJcIjtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdGRhdGFBbmRFdmVudHMgPSBkYXRhQW5kRXZlbnRzID09IG51bGwgPyBmYWxzZSA6IGRhdGFBbmRFdmVudHM7XG5cdFx0ZGVlcERhdGFBbmRFdmVudHMgPSBkZWVwRGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZGF0YUFuZEV2ZW50cyA6IGRlZXBEYXRhQW5kRXZlbnRzO1xuXG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY2xvbmUoIHRoaXMsIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdGh0bWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXSB8fCB7fSxcblx0XHRcdFx0aSA9IDAsXG5cdFx0XHRcdGwgPSB0aGlzLmxlbmd0aDtcblxuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmlubmVySFRNTDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2VlIGlmIHdlIGNhbiB0YWtlIGEgc2hvcnRjdXQgYW5kIGp1c3QgdXNlIGlubmVySFRNTFxuXHRcdFx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgIXJub0lubmVyaHRtbC50ZXN0KCB2YWx1ZSApICYmXG5cdFx0XHRcdCF3cmFwTWFwWyAoIHJ0YWdOYW1lLmV4ZWMoIHZhbHVlICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCkgXSApIHtcblxuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5odG1sUHJlZmlsdGVyKCB2YWx1ZSApO1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdFx0ZWxlbSA9IHRoaXNbIGkgXSB8fCB7fTtcblxuXHRcdFx0XHRcdFx0Ly8gUmVtb3ZlIGVsZW1lbnQgbm9kZXMgYW5kIHByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXHRcdFx0XHRcdFx0XHRlbGVtLmlubmVySFRNTCA9IHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW0gPSAwO1xuXG5cdFx0XHRcdC8vIElmIHVzaW5nIGlubmVySFRNTCB0aHJvd3MgYW4gZXhjZXB0aW9uLCB1c2UgdGhlIGZhbGxiYWNrIG1ldGhvZFxuXHRcdFx0XHR9IGNhdGNoICggZSApIHt9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0dGhpcy5lbXB0eSgpLmFwcGVuZCggdmFsdWUgKTtcblx0XHRcdH1cblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdHJlcGxhY2VXaXRoOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaWdub3JlZCA9IFtdO1xuXG5cdFx0Ly8gTWFrZSB0aGUgY2hhbmdlcywgcmVwbGFjaW5nIGVhY2ggbm9uLWlnbm9yZWQgY29udGV4dCBlbGVtZW50IHdpdGggdGhlIG5ldyBjb250ZW50XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIHBhcmVudCA9IHRoaXMucGFyZW50Tm9kZTtcblxuXHRcdFx0aWYgKCBqUXVlcnkuaW5BcnJheSggdGhpcywgaWdub3JlZCApIDwgMCApIHtcblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCB0aGlzICkgKTtcblx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnJlcGxhY2VDaGlsZCggZWxlbSwgdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBGb3JjZSBjYWxsYmFjayBpbnZvY2F0aW9uXG5cdFx0fSwgaWdub3JlZCApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCB7XG5cdGFwcGVuZFRvOiBcImFwcGVuZFwiLFxuXHRwcmVwZW5kVG86IFwicHJlcGVuZFwiLFxuXHRpbnNlcnRCZWZvcmU6IFwiYmVmb3JlXCIsXG5cdGluc2VydEFmdGVyOiBcImFmdGVyXCIsXG5cdHJlcGxhY2VBbGw6IFwicmVwbGFjZVdpdGhcIlxufSwgZnVuY3Rpb24oIG5hbWUsIG9yaWdpbmFsICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgZWxlbXMsXG5cdFx0XHRyZXQgPSBbXSxcblx0XHRcdGluc2VydCA9IGpRdWVyeSggc2VsZWN0b3IgKSxcblx0XHRcdGxhc3QgPSBpbnNlcnQubGVuZ3RoIC0gMSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyBpIDw9IGxhc3Q7IGkrKyApIHtcblx0XHRcdGVsZW1zID0gaSA9PT0gbGFzdCA/IHRoaXMgOiB0aGlzLmNsb25lKCB0cnVlICk7XG5cdFx0XHRqUXVlcnkoIGluc2VydFsgaSBdIClbIG9yaWdpbmFsIF0oIGVsZW1zICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0Ly8gLmdldCgpIGJlY2F1c2UgcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0cHVzaC5hcHBseSggcmV0LCBlbGVtcy5nZXQoKSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggcmV0ICk7XG5cdH07XG59ICk7XG52YXIgcm51bW5vbnB4ID0gbmV3IFJlZ0V4cCggXCJeKFwiICsgcG51bSArIFwiKSg/IXB4KVthLXolXSskXCIsIFwiaVwiICk7XG5cbnZhciByY3VzdG9tUHJvcCA9IC9eLS0vO1xuXG5cbnZhciBnZXRTdHlsZXMgPSBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seSwgRmlyZWZveCA8PTMwICh0cmFjLTE1MDk4LCB0cmFjLTE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAodHJhYy04OTA4KVxuXHRkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcImNvbnRlbnQtYm94XCI7XG5cdGRpdi5jbG9uZU5vZGUoIHRydWUgKS5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiXCI7XG5cdHN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlID0gZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID09PSBcImNvbnRlbnQtYm94XCI7XG5cblx0alF1ZXJ5LmV4dGVuZCggc3VwcG9ydCwge1xuXHRcdGJveFNpemluZ1JlbGlhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gYm94U2l6aW5nUmVsaWFibGVWYWw7XG5cdFx0fSxcblx0XHRwaXhlbEJveFN0eWxlczogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsQm94U3R5bGVzVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxQb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHBpeGVsUG9zaXRpb25WYWw7XG5cdFx0fSxcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiByZWxpYWJsZU1hcmdpbkxlZnRWYWw7XG5cdFx0fSxcblx0XHRzY3JvbGxib3hTaXplOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gc2Nyb2xsYm94U2l6ZVZhbDtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdC8vIElFL0VkZ2UgbWlzcmVwb3J0IGBnZXRDb21wdXRlZFN0eWxlYCBvZiB0YWJsZSByb3dzIHdpdGggd2lkdGgvaGVpZ2h0XG5cdFx0Ly8gc2V0IGluIENTUyB3aGlsZSBgb2Zmc2V0KmAgcHJvcGVydGllcyByZXBvcnQgY29ycmVjdCB2YWx1ZXMuXG5cdFx0Ly8gQmVoYXZpb3IgaW4gSUUgOSBpcyBtb3JlIHN1YnRsZSB0aGFuIGluIG5ld2VyIHZlcnNpb25zICYgaXQgcGFzc2VzXG5cdFx0Ly8gc29tZSB2ZXJzaW9ucyBvZiB0aGlzIHRlc3Q7IG1ha2Ugc3VyZSBub3QgdG8gbWFrZSBpdCBwYXNzIHRoZXJlIVxuXHRcdC8vXG5cdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA3MCtcblx0XHQvLyBPbmx5IEZpcmVmb3ggaW5jbHVkZXMgYm9yZGVyIHdpZHRoc1xuXHRcdC8vIGluIGNvbXB1dGVkIGRpbWVuc2lvbnMuIChnaC00NTI5KVxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zOiBmdW5jdGlvbigpIHtcblx0XHRcdHZhciB0YWJsZSwgdHIsIHRyQ2hpbGQsIHRyU3R5bGU7XG5cdFx0XHRpZiAoIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHRhYmxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0YWJsZVwiICk7XG5cdFx0XHRcdHRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJ0clwiICk7XG5cdFx0XHRcdHRyQ2hpbGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICk7XG5cblx0XHRcdFx0dGFibGUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDtib3JkZXItY29sbGFwc2U6c2VwYXJhdGVcIjtcblx0XHRcdFx0dHIuc3R5bGUuY3NzVGV4dCA9IFwiYm94LXNpemluZzpjb250ZW50LWJveDtib3JkZXI6MXB4IHNvbGlkXCI7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBIZWlnaHQgc2V0IHRocm91Z2ggY3NzVGV4dCBkb2VzIG5vdCBnZXQgYXBwbGllZC5cblx0XHRcdFx0Ly8gQ29tcHV0ZWQgaGVpZ2h0IHRoZW4gY29tZXMgYmFjayBhcyAwLlxuXHRcdFx0XHR0ci5zdHlsZS5oZWlnaHQgPSBcIjFweFwiO1xuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmhlaWdodCA9IFwiOXB4XCI7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA4IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSW4gb3VyIGJvZHlCYWNrZ3JvdW5kLmh0bWwgaWZyYW1lLFxuXHRcdFx0XHQvLyBkaXNwbGF5IGZvciBhbGwgZGl2IGVsZW1lbnRzIGlzIHNldCB0byBcImlubGluZVwiLFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgYSBwcm9ibGVtIG9ubHkgaW4gQW5kcm9pZCA4IENocm9tZSA4Ni5cblx0XHRcdFx0Ly8gRW5zdXJpbmcgdGhlIGRpdiBpcyBgZGlzcGxheTogYmxvY2tgXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgdHJhYy0xMjUzNylcblx0Ly8gICAuY3NzKCctLWN1c3RvbVByb3BlcnR5KSAoZ2gtMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdC8vIElFIG9ubHkgc3VwcG9ydHMgYFwiZmxvYXRcImAgaW4gYGdldFByb3BlcnR5VmFsdWVgOyBpbiBjb21wdXRlZCBzdHlsZXNcblx0XHQvLyBpdCdzIG9ubHkgYXZhaWxhYmxlIGFzIGBcImNzc0Zsb2F0XCJgLiBXZSBubyBsb25nZXIgbW9kaWZ5IHByb3BlcnRpZXNcblx0XHQvLyBzZW50IHRvIGAuY3NzKClgIGFwYXJ0IGZyb20gY2FtZWxDYXNpbmcsIHNvIHdlIG5lZWQgdG8gY2hlY2sgYm90aC5cblx0XHQvLyBOb3JtYWxseSwgdGhpcyB3b3VsZCBjcmVhdGUgZGlmZmVyZW5jZSBpbiBiZWhhdmlvcjogaWZcblx0XHQvLyBgZ2V0UHJvcGVydHlWYWx1ZWAgcmV0dXJucyBhbiBlbXB0eSBzdHJpbmcsIHRoZSB2YWx1ZSByZXR1cm5lZFxuXHRcdC8vIGJ5IGAuY3NzKClgIHdvdWxkIGJlIGB1bmRlZmluZWRgLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgZm9yXG5cdFx0Ly8gZGlzY29ubmVjdGVkIGVsZW1lbnRzLiBIb3dldmVyLCBpbiBJRSBldmVuIGRpc2Nvbm5lY3RlZCBlbGVtZW50c1xuXHRcdC8vIHdpdGggbm8gc3R5bGVzIHJldHVybiBgXCJub25lXCJgIGZvciBgZ2V0UHJvcGVydHlWYWx1ZSggXCJmbG9hdFwiIClgXG5cdFx0cmV0ID0gY29tcHV0ZWQuZ2V0UHJvcGVydHlWYWx1ZSggbmFtZSApIHx8IGNvbXB1dGVkWyBuYW1lIF07XG5cblx0XHRpZiAoIGlzQ3VzdG9tUHJvcCAmJiByZXQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggMTA1KywgQ2hyb21lIDw9MTA1K1xuXHRcdFx0Ly8gU3BlYyByZXF1aXJlcyB0cmltbWluZyB3aGl0ZXNwYWNlIGZvciBjdXN0b20gcHJvcGVydGllcyAoZ2gtNDkyNikuXG5cdFx0XHQvLyBGaXJlZm94IG9ubHkgdHJpbXMgbGVhZGluZyB3aGl0ZXNwYWNlLiBDaHJvbWUganVzdCBjb2xsYXBzZXNcblx0XHRcdC8vIGJvdGggbGVhZGluZyAmIHRyYWlsaW5nIHdoaXRlc3BhY2UgdG8gYSBzaW5nbGUgc3BhY2UuXG5cdFx0XHQvL1xuXHRcdFx0Ly8gRmFsbCBiYWNrIHRvIGB1bmRlZmluZWRgIGlmIGVtcHR5IHN0cmluZyByZXR1cm5lZC5cblx0XHRcdC8vIFRoaXMgY29sbGFwc2VzIGEgbWlzc2luZyBkZWZpbml0aW9uIHdpdGggcHJvcGVydHkgZGVmaW5lZFxuXHRcdFx0Ly8gYW5kIHNldCB0byBhbiBlbXB0eSBzdHJpbmcgYnV0IHRoZXJlJ3Mgbm8gc3RhbmRhcmQgQVBJXG5cdFx0XHQvLyBhbGxvd2luZyB1cyB0byBkaWZmZXJlbnRpYXRlIHRoZW0gd2l0aG91dCBhIHBlcmZvcm1hbmNlIHBlbmFsdHlcblx0XHRcdC8vIGFuZCByZXR1cm5pbmcgYHVuZGVmaW5lZGAgYWxpZ25zIHdpdGggb2xkZXIgalF1ZXJ5LlxuXHRcdFx0Ly9cblx0XHRcdC8vIHJ0cmltQ1NTIHRyZWF0cyBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIGFuZCBVKzAwMEMgRk9STSBGRUVEXG5cdFx0XHQvLyBhcyB3aGl0ZXNwYWNlIHdoaWxlIENTUyBkb2VzIG5vdCwgYnV0IHRoaXMgaXMgbm90IGEgcHJvYmxlbVxuXHRcdFx0Ly8gYmVjYXVzZSBDU1MgcHJlcHJvY2Vzc2luZyByZXBsYWNlcyB0aGVtIHdpdGggVSswMDBBIExJTkUgRkVFRFxuXHRcdFx0Ly8gKHdoaWNoICppcyogQ1NTIHdoaXRlc3BhY2UpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvY3NzLXN5bnRheC0zLyNpbnB1dC1wcmVwcm9jZXNzaW5nXG5cdFx0XHRyZXQgPSByZXQucmVwbGFjZSggcnRyaW1DU1MsIFwiJDFcIiApIHx8IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoIHJldCA9PT0gXCJcIiAmJiAhaXNBdHRhY2hlZCggZWxlbSApICkge1xuXHRcdFx0cmV0ID0galF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gQSB0cmlidXRlIHRvIHRoZSBcImF3ZXNvbWUgaGFjayBieSBEZWFuIEVkd2FyZHNcIlxuXHRcdC8vIEFuZHJvaWQgQnJvd3NlciByZXR1cm5zIHBlcmNlbnRhZ2UgZm9yIHNvbWUgdmFsdWVzLFxuXHRcdC8vIGJ1dCB3aWR0aCBzZWVtcyB0byBiZSByZWxpYWJseSBwaXhlbHMuXG5cdFx0Ly8gVGhpcyBpcyBhZ2FpbnN0IHRoZSBDU1NPTSBkcmFmdCBzcGVjOlxuXHRcdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jcmVzb2x2ZWQtdmFsdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5waXhlbEJveFN0eWxlcygpICYmIHJudW1ub25weC50ZXN0KCByZXQgKSAmJiByYm94U3R5bGUudGVzdCggbmFtZSApICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgb3JpZ2luYWwgdmFsdWVzXG5cdFx0XHR3aWR0aCA9IHN0eWxlLndpZHRoO1xuXHRcdFx0bWluV2lkdGggPSBzdHlsZS5taW5XaWR0aDtcblx0XHRcdG1heFdpZHRoID0gc3R5bGUubWF4V2lkdGg7XG5cblx0XHRcdC8vIFB1dCBpbiB0aGUgbmV3IHZhbHVlcyB0byBnZXQgYSBjb21wdXRlZCB2YWx1ZSBvdXRcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gc3R5bGUubWF4V2lkdGggPSBzdHlsZS53aWR0aCA9IHJldDtcblx0XHRcdHJldCA9IGNvbXB1dGVkLndpZHRoO1xuXG5cdFx0XHQvLyBSZXZlcnQgdGhlIGNoYW5nZWQgdmFsdWVzXG5cdFx0XHRzdHlsZS53aWR0aCA9IHdpZHRoO1xuXHRcdFx0c3R5bGUubWluV2lkdGggPSBtaW5XaWR0aDtcblx0XHRcdHN0eWxlLm1heFdpZHRoID0gbWF4V2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHJldCAhPT0gdW5kZWZpbmVkID9cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHQvLyBJRSByZXR1cm5zIHpJbmRleCB2YWx1ZSBhcyBhbiBpbnRlZ2VyLlxuXHRcdHJldCArIFwiXCIgOlxuXHRcdHJldDtcbn1cblxuXG5mdW5jdGlvbiBhZGRHZXRIb29rSWYoIGNvbmRpdGlvbkZuLCBob29rRm4gKSB7XG5cblx0Ly8gRGVmaW5lIHRoZSBob29rLCB3ZSdsbCBjaGVjayBvbiB0aGUgZmlyc3QgcnVuIGlmIGl0J3MgcmVhbGx5IG5lZWRlZC5cblx0cmV0dXJuIHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBjb25kaXRpb25GbigpICkge1xuXG5cdFx0XHRcdC8vIEhvb2sgbm90IG5lZWRlZCAob3IgaXQncyBub3QgcG9zc2libGUgdG8gdXNlIGl0IGR1ZVxuXHRcdFx0XHQvLyB0byBtaXNzaW5nIGRlcGVuZGVuY3kpLCByZW1vdmUgaXQuXG5cdFx0XHRcdGRlbGV0ZSB0aGlzLmdldDtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBIb29rIG5lZWRlZDsgcmVkZWZpbmUgaXQgc28gdGhhdCB0aGUgc3VwcG9ydCB0ZXN0IGlzIG5vdCBleGVjdXRlZCBhZ2Fpbi5cblx0XHRcdHJldHVybiAoIHRoaXMuZ2V0ID0gaG9va0ZuICkuYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH1cblx0fTtcbn1cblxuXG52YXIgY3NzUHJlZml4ZXMgPSBbIFwiV2Via2l0XCIsIFwiTW96XCIsIFwibXNcIiBdLFxuXHRlbXB0eVN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLnN0eWxlLFxuXHR2ZW5kb3JQcm9wcyA9IHt9O1xuXG4vLyBSZXR1cm4gYSB2ZW5kb3ItcHJlZml4ZWQgcHJvcGVydHkgb3IgdW5kZWZpbmVkXG5mdW5jdGlvbiB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHtcblxuXHQvLyBDaGVjayBmb3IgdmVuZG9yIHByZWZpeGVkIG5hbWVzXG5cdHZhciBjYXBOYW1lID0gbmFtZVsgMCBdLnRvVXBwZXJDYXNlKCkgKyBuYW1lLnNsaWNlKCAxICksXG5cdFx0aSA9IGNzc1ByZWZpeGVzLmxlbmd0aDtcblxuXHR3aGlsZSAoIGktLSApIHtcblx0XHRuYW1lID0gY3NzUHJlZml4ZXNbIGkgXSArIGNhcE5hbWU7XG5cdFx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0XHRyZXR1cm4gbmFtZTtcblx0XHR9XG5cdH1cbn1cblxuLy8gUmV0dXJuIGEgcG90ZW50aWFsbHktbWFwcGVkIGpRdWVyeS5jc3NQcm9wcyBvciB2ZW5kb3IgcHJlZml4ZWQgcHJvcGVydHlcbmZ1bmN0aW9uIGZpbmFsUHJvcE5hbWUoIG5hbWUgKSB7XG5cdHZhciBmaW5hbCA9IGpRdWVyeS5jc3NQcm9wc1sgbmFtZSBdIHx8IHZlbmRvclByb3BzWyBuYW1lIF07XG5cblx0aWYgKCBmaW5hbCApIHtcblx0XHRyZXR1cm4gZmluYWw7XG5cdH1cblx0aWYgKCBuYW1lIGluIGVtcHR5U3R5bGUgKSB7XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cblx0cmV0dXJuIHZlbmRvclByb3BzWyBuYW1lIF0gPSB2ZW5kb3JQcm9wTmFtZSggbmFtZSApIHx8IG5hbWU7XG59XG5cblxudmFyXG5cblx0Ly8gU3dhcHBhYmxlIGlmIGRpc3BsYXkgaXMgbm9uZSBvciBzdGFydHMgd2l0aCB0YWJsZVxuXHQvLyBleGNlcHQgXCJ0YWJsZVwiLCBcInRhYmxlLWNlbGxcIiwgb3IgXCJ0YWJsZS1jYXB0aW9uXCJcblx0Ly8gU2VlIGhlcmUgZm9yIGRpc3BsYXkgdmFsdWVzOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL0NTUy9kaXNwbGF5XG5cdHJkaXNwbGF5c3dhcCA9IC9eKG5vbmV8dGFibGUoPyEtY1tlYV0pLispLyxcblx0Y3NzU2hvdyA9IHsgcG9zaXRpb246IFwiYWJzb2x1dGVcIiwgdmlzaWJpbGl0eTogXCJoaWRkZW5cIiwgZGlzcGxheTogXCJibG9ja1wiIH0sXG5cdGNzc05vcm1hbFRyYW5zZm9ybSA9IHtcblx0XHRsZXR0ZXJTcGFjaW5nOiBcIjBcIixcblx0XHRmb250V2VpZ2h0OiBcIjQwMFwiXG5cdH07XG5cbmZ1bmN0aW9uIHNldFBvc2l0aXZlTnVtYmVyKCBfZWxlbSwgdmFsdWUsIHN1YnRyYWN0ICkge1xuXG5cdC8vIEFueSByZWxhdGl2ZSAoKy8tKSB2YWx1ZXMgaGF2ZSBhbHJlYWR5IGJlZW5cblx0Ly8gbm9ybWFsaXplZCBhdCB0aGlzIHBvaW50XG5cdHZhciBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApO1xuXHRyZXR1cm4gbWF0Y2hlcyA/XG5cblx0XHQvLyBHdWFyZCBhZ2FpbnN0IHVuZGVmaW5lZCBcInN1YnRyYWN0XCIsIGUuZy4sIHdoZW4gdXNlZCBhcyBpbiBjc3NIb29rc1xuXHRcdE1hdGgubWF4KCAwLCBtYXRjaGVzWyAyIF0gLSAoIHN1YnRyYWN0IHx8IDAgKSApICsgKCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgOlxuXHRcdHZhbHVlO1xufVxuXG5mdW5jdGlvbiBib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgYm94LCBpc0JvcmRlckJveCwgc3R5bGVzLCBjb21wdXRlZFZhbCApIHtcblx0dmFyIGkgPSBkaW1lbnNpb24gPT09IFwid2lkdGhcIiA/IDEgOiAwLFxuXHRcdGV4dHJhID0gMCxcblx0XHRkZWx0YSA9IDAsXG5cdFx0bWFyZ2luRGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdC8vIENvdW50IG1hcmdpbiBkZWx0YSBzZXBhcmF0ZWx5IHRvIG9ubHkgYWRkIGl0IGFmdGVyIHNjcm9sbCBndXR0ZXIgYWRqdXN0bWVudC5cblx0XHQvLyBUaGlzIGlzIG5lZWRlZCB0byBtYWtlIG5lZ2F0aXZlIG1hcmdpbnMgd29yayB3aXRoIGBvdXRlckhlaWdodCggdHJ1ZSApYCAoZ2gtMzk4MikuXG5cdFx0aWYgKCBib3ggPT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRtYXJnaW5EZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBib3ggKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGNvbnRlbnQtYm94LCB3ZSdyZSBzZWVraW5nIFwicGFkZGluZ1wiIG9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIlxuXHRcdGlmICggIWlzQm9yZGVyQm94ICkge1xuXG5cdFx0XHQvLyBBZGQgcGFkZGluZ1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEZvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCIsIGFkZCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcInBhZGRpbmdcIiApIHtcblx0XHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gQnV0IHN0aWxsIGtlZXAgdHJhY2sgb2YgaXQgb3RoZXJ3aXNlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRleHRyYSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZ2V0IGhlcmUgd2l0aCBhIGJvcmRlci1ib3ggKGNvbnRlbnQgKyBwYWRkaW5nICsgYm9yZGVyKSwgd2UncmUgc2Vla2luZyBcImNvbnRlbnRcIiBvclxuXHRcdC8vIFwicGFkZGluZ1wiIG9yIFwibWFyZ2luXCJcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIsIHN1YnRyYWN0IHBhZGRpbmdcblx0XHRcdGlmICggYm94ID09PSBcImNvbnRlbnRcIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJwYWRkaW5nXCIgKyBjc3NFeHBhbmRbIGkgXSwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiBvciBcInBhZGRpbmdcIiwgc3VidHJhY3QgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdFx0ZGVsdGEgLT0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBY2NvdW50IGZvciBwb3NpdGl2ZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyIHdoZW4gcmVxdWVzdGVkIGJ5IHByb3ZpZGluZyBjb21wdXRlZFZhbFxuXHRpZiAoICFpc0JvcmRlckJveCAmJiBjb21wdXRlZFZhbCA+PSAwICkge1xuXG5cdFx0Ly8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIGEgcm91bmRlZCBzdW0gb2YgY29udGVudCwgcGFkZGluZywgc2Nyb2xsIGd1dHRlciwgYW5kIGJvcmRlclxuXHRcdC8vIEFzc3VtaW5nIGludGVnZXIgc2Nyb2xsIGd1dHRlciwgc3VidHJhY3QgdGhlIHJlc3QgYW5kIHJvdW5kIGRvd25cblx0XHRkZWx0YSArPSBNYXRoLm1heCggMCwgTWF0aC5jZWlsKFxuXHRcdFx0ZWxlbVsgXCJvZmZzZXRcIiArIGRpbWVuc2lvblsgMCBdLnRvVXBwZXJDYXNlKCkgKyBkaW1lbnNpb24uc2xpY2UoIDEgKSBdIC1cblx0XHRcdGNvbXB1dGVkVmFsIC1cblx0XHRcdGRlbHRhIC1cblx0XHRcdGV4dHJhIC1cblx0XHRcdDAuNVxuXG5cdFx0Ly8gSWYgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGlzIHVua25vd24sIHRoZW4gd2UgY2FuJ3QgZGV0ZXJtaW5lIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXJcblx0XHQvLyBVc2UgYW4gZXhwbGljaXQgemVybyB0byBhdm9pZCBOYU4gKGdoLTM5NjQpXG5cdFx0KSApIHx8IDA7XG5cdH1cblxuXHRyZXR1cm4gZGVsdGEgKyBtYXJnaW5EZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0YW5pbWF0aW9uSXRlcmF0aW9uQ291bnQ6IHRydWUsXG5cdFx0YXNwZWN0UmF0aW86IHRydWUsXG5cdFx0Ym9yZGVySW1hZ2VTbGljZTogdHJ1ZSxcblx0XHRjb2x1bW5Db3VudDogdHJ1ZSxcblx0XHRmbGV4R3JvdzogdHJ1ZSxcblx0XHRmbGV4U2hyaW5rOiB0cnVlLFxuXHRcdGZvbnRXZWlnaHQ6IHRydWUsXG5cdFx0Z3JpZEFyZWE6IHRydWUsXG5cdFx0Z3JpZENvbHVtbjogdHJ1ZSxcblx0XHRncmlkQ29sdW1uRW5kOiB0cnVlLFxuXHRcdGdyaWRDb2x1bW5TdGFydDogdHJ1ZSxcblx0XHRncmlkUm93OiB0cnVlLFxuXHRcdGdyaWRSb3dFbmQ6IHRydWUsXG5cdFx0Z3JpZFJvd1N0YXJ0OiB0cnVlLFxuXHRcdGxpbmVIZWlnaHQ6IHRydWUsXG5cdFx0b3BhY2l0eTogdHJ1ZSxcblx0XHRvcmRlcjogdHJ1ZSxcblx0XHRvcnBoYW5zOiB0cnVlLFxuXHRcdHNjYWxlOiB0cnVlLFxuXHRcdHdpZG93czogdHJ1ZSxcblx0XHR6SW5kZXg6IHRydWUsXG5cdFx0em9vbTogdHJ1ZSxcblxuXHRcdC8vIFNWRy1yZWxhdGVkXG5cdFx0ZmlsbE9wYWNpdHk6IHRydWUsXG5cdFx0Zmxvb2RPcGFjaXR5OiB0cnVlLFxuXHRcdHN0b3BPcGFjaXR5OiB0cnVlLFxuXHRcdHN0cm9rZU1pdGVybGltaXQ6IHRydWUsXG5cdFx0c3Ryb2tlT3BhY2l0eTogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAodHJhYy03MzQ1KVxuXHRcdFx0aWYgKCB0eXBlID09PSBcInN0cmluZ1wiICYmICggcmV0ID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiYgcmV0WyAxIF0gKSB7XG5cdFx0XHRcdHZhbHVlID0gYWRqdXN0Q1NTKCBlbGVtLCBuYW1lLCByZXQgKTtcblxuXHRcdFx0XHQvLyBGaXhlcyBidWcgdHJhYy05MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKHRyYWMtNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICh0cmFjLTEyNDk3KVxuXHRcdFx0XHR0ZW1wID0gcmVtYWluaW5nIC8gYW5pbWF0aW9uLmR1cmF0aW9uIHx8IDAsXG5cdFx0XHRcdHBlcmNlbnQgPSAxIC0gdGVtcCxcblx0XHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0XHRsZW5ndGggPSBhbmltYXRpb24udHdlZW5zLmxlbmd0aDtcblxuXHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIHBlcmNlbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIHBlcmNlbnQsIHJlbWFpbmluZyBdICk7XG5cblx0XHRcdC8vIElmIHRoZXJlJ3MgbW9yZSB0byBkbywgeWllbGRcblx0XHRcdGlmICggcGVyY2VudCA8IDEgJiYgbGVuZ3RoICkge1xuXHRcdFx0XHRyZXR1cm4gcmVtYWluaW5nO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiB0aGlzIHdhcyBhbiBlbXB0eSBhbmltYXRpb24sIHN5bnRoZXNpemUgYSBmaW5hbCBwcm9ncmVzcyBub3RpZmljYXRpb25cblx0XHRcdGlmICggIWxlbmd0aCApIHtcblx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXNvbHZlIHRoZSBhbmltYXRpb24gYW5kIHJlcG9ydCBpdHMgY29uY2x1c2lvblxuXHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uIF0gKTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9LFxuXHRcdGFuaW1hdGlvbiA9IGRlZmVycmVkLnByb21pc2UoIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRwcm9wczogalF1ZXJ5LmV4dGVuZCgge30sIHByb3BlcnRpZXMgKSxcblx0XHRcdG9wdHM6IGpRdWVyeS5leHRlbmQoIHRydWUsIHtcblx0XHRcdFx0c3BlY2lhbEVhc2luZzoge30sXG5cdFx0XHRcdGVhc2luZzogalF1ZXJ5LmVhc2luZy5fZGVmYXVsdFxuXHRcdFx0fSwgb3B0aW9ucyApLFxuXHRcdFx0b3JpZ2luYWxQcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzLFxuXHRcdFx0b3JpZ2luYWxPcHRpb25zOiBvcHRpb25zLFxuXHRcdFx0c3RhcnRUaW1lOiBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0ZHVyYXRpb246IG9wdGlvbnMuZHVyYXRpb24sXG5cdFx0XHR0d2VlbnM6IFtdLFxuXHRcdFx0Y3JlYXRlVHdlZW46IGZ1bmN0aW9uKCBwcm9wLCBlbmQgKSB7XG5cdFx0XHRcdHZhciB0d2VlbiA9IGpRdWVyeS5Ud2VlbiggZWxlbSwgYW5pbWF0aW9uLm9wdHMsIHByb3AsIGVuZCxcblx0XHRcdFx0XHRhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nWyBwcm9wIF0gfHwgYW5pbWF0aW9uLm9wdHMuZWFzaW5nICk7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnMucHVzaCggdHdlZW4gKTtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdFx0fSxcblx0XHRcdHN0b3A6IGZ1bmN0aW9uKCBnb3RvRW5kICkge1xuXHRcdFx0XHR2YXIgaW5kZXggPSAwLFxuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgYXJlIGdvaW5nIHRvIHRoZSBlbmQsIHdlIHdhbnQgdG8gcnVuIGFsbCB0aGUgdHdlZW5zXG5cdFx0XHRcdFx0Ly8gb3RoZXJ3aXNlIHdlIHNraXAgdGhpcyBwYXJ0XG5cdFx0XHRcdFx0bGVuZ3RoID0gZ290b0VuZCA/IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoIDogMDtcblx0XHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHN0b3BwZWQgPSB0cnVlO1xuXHRcdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCAxICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXNvbHZlIHdoZW4gd2UgcGxheWVkIHRoZSBsYXN0IGZyYW1lOyBvdGhlcndpc2UsIHJlamVjdFxuXHRcdFx0XHRpZiAoIGdvdG9FbmQgKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIDEsIDAgXSApO1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fVxuXHRcdH0gKSxcblx0XHRwcm9wcyA9IGFuaW1hdGlvbi5wcm9wcztcblxuXHRwcm9wRmlsdGVyKCBwcm9wcywgYW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZyApO1xuXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0cmVzdWx0ID0gQW5pbWF0aW9uLnByZWZpbHRlcnNbIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBlbGVtLCBwcm9wcywgYW5pbWF0aW9uLm9wdHMgKTtcblx0XHRpZiAoIHJlc3VsdCApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggcmVzdWx0LnN0b3AgKSApIHtcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCBhbmltYXRpb24uZWxlbSwgYW5pbWF0aW9uLm9wdHMucXVldWUgKS5zdG9wID1cblx0XHRcdFx0XHRyZXN1bHQuc3RvcC5iaW5kKCByZXN1bHQgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXHR9XG5cblx0alF1ZXJ5Lm1hcCggcHJvcHMsIGNyZWF0ZVR3ZWVuLCBhbmltYXRpb24gKTtcblxuXHRpZiAoIGlzRnVuY3Rpb24oIGFuaW1hdGlvbi5vcHRzLnN0YXJ0ICkgKSB7XG5cdFx0YW5pbWF0aW9uLm9wdHMuc3RhcnQuY2FsbCggZWxlbSwgYW5pbWF0aW9uICk7XG5cdH1cblxuXHQvLyBBdHRhY2ggY2FsbGJhY2tzIGZyb20gb3B0aW9uc1xuXHRhbmltYXRpb25cblx0XHQucHJvZ3Jlc3MoIGFuaW1hdGlvbi5vcHRzLnByb2dyZXNzIClcblx0XHQuZG9uZSggYW5pbWF0aW9uLm9wdHMuZG9uZSwgYW5pbWF0aW9uLm9wdHMuY29tcGxldGUgKVxuXHRcdC5mYWlsKCBhbmltYXRpb24ub3B0cy5mYWlsIClcblx0XHQuYWx3YXlzKCBhbmltYXRpb24ub3B0cy5hbHdheXMgKTtcblxuXHRqUXVlcnkuZngudGltZXIoXG5cdFx0alF1ZXJ5LmV4dGVuZCggdGljaywge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdGFuaW06IGFuaW1hdGlvbixcblx0XHRcdHF1ZXVlOiBhbmltYXRpb24ub3B0cy5xdWV1ZVxuXHRcdH0gKVxuXHQpO1xuXG5cdHJldHVybiBhbmltYXRpb247XG59XG5cbmpRdWVyeS5BbmltYXRpb24gPSBqUXVlcnkuZXh0ZW5kKCBBbmltYXRpb24sIHtcblxuXHR0d2VlbmVyczoge1xuXHRcdFwiKlwiOiBbIGZ1bmN0aW9uKCBwcm9wLCB2YWx1ZSApIHtcblx0XHRcdHZhciB0d2VlbiA9IHRoaXMuY3JlYXRlVHdlZW4oIHByb3AsIHZhbHVlICk7XG5cdFx0XHRhZGp1c3RDU1MoIHR3ZWVuLmVsZW0sIHByb3AsIHJjc3NOdW0uZXhlYyggdmFsdWUgKSwgdHdlZW4gKTtcblx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHR9IF1cblx0fSxcblxuXHR0d2VlbmVyOiBmdW5jdGlvbiggcHJvcHMsIGNhbGxiYWNrICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggcHJvcHMgKSApIHtcblx0XHRcdGNhbGxiYWNrID0gcHJvcHM7XG5cdFx0XHRwcm9wcyA9IFsgXCIqXCIgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cHJvcHMgPSBwcm9wcy5tYXRjaCggcm5vdGh0bWx3aGl0ZSApO1xuXHRcdH1cblxuXHRcdHZhciBwcm9wLFxuXHRcdFx0aW5kZXggPSAwLFxuXHRcdFx0bGVuZ3RoID0gcHJvcHMubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdHByb3AgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdID0gQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW107XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXS51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH1cblx0fSxcblxuXHRwcmVmaWx0ZXJzOiBbIGRlZmF1bHRQcmVmaWx0ZXIgXSxcblxuXHRwcmVmaWx0ZXI6IGZ1bmN0aW9uKCBjYWxsYmFjaywgcHJlcGVuZCApIHtcblx0XHRpZiAoIHByZXBlbmQgKSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy51bnNoaWZ0KCBjYWxsYmFjayApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRBbmltYXRpb24ucHJlZmlsdGVycy5wdXNoKCBjYWxsYmFjayApO1xuXHRcdH1cblx0fVxufSApO1xuXG5qUXVlcnkuc3BlZWQgPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgZm4gKSB7XG5cdHZhciBvcHQgPSBzcGVlZCAmJiB0eXBlb2Ygc3BlZWQgPT09IFwib2JqZWN0XCIgPyBqUXVlcnkuZXh0ZW5kKCB7fSwgc3BlZWQgKSA6IHtcblx0XHRjb21wbGV0ZTogZm4gfHwgIWZuICYmIGVhc2luZyB8fFxuXHRcdFx0aXNGdW5jdGlvbiggc3BlZWQgKSAmJiBzcGVlZCxcblx0XHRkdXJhdGlvbjogc3BlZWQsXG5cdFx0ZWFzaW5nOiBmbiAmJiBlYXNpbmcgfHwgZWFzaW5nICYmICFpc0Z1bmN0aW9uKCBlYXNpbmcgKSAmJiBlYXNpbmdcblx0fTtcblxuXHQvLyBHbyB0byB0aGUgZW5kIHN0YXRlIGlmIGZ4IGFyZSBvZmZcblx0aWYgKCBqUXVlcnkuZngub2ZmICkge1xuXHRcdG9wdC5kdXJhdGlvbiA9IDA7XG5cblx0fSBlbHNlIHtcblx0XHRpZiAoIHR5cGVvZiBvcHQuZHVyYXRpb24gIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRpZiAoIG9wdC5kdXJhdGlvbiBpbiBqUXVlcnkuZnguc3BlZWRzICkge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzWyBvcHQuZHVyYXRpb24gXTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkcy5fZGVmYXVsdDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgb3B0LnF1ZXVlIC0gdHJ1ZS91bmRlZmluZWQvbnVsbCAtPiBcImZ4XCJcblx0aWYgKCBvcHQucXVldWUgPT0gbnVsbCB8fCBvcHQucXVldWUgPT09IHRydWUgKSB7XG5cdFx0b3B0LnF1ZXVlID0gXCJmeFwiO1xuXHR9XG5cblx0Ly8gUXVldWVpbmdcblx0b3B0Lm9sZCA9IG9wdC5jb21wbGV0ZTtcblxuXHRvcHQuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdC5vbGQgKSApIHtcblx0XHRcdG9wdC5vbGQuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0LnF1ZXVlICkge1xuXHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIG9wdC5xdWV1ZSApO1xuXHRcdH1cblx0fTtcblxuXHRyZXR1cm4gb3B0O1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmYWRlVG86IGZ1bmN0aW9uKCBzcGVlZCwgdG8sIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cblx0XHQvLyBTaG93IGFueSBoaWRkZW4gZWxlbWVudHMgYWZ0ZXIgc2V0dGluZyBvcGFjaXR5IHRvIDBcblx0XHRyZXR1cm4gdGhpcy5maWx0ZXIoIGlzSGlkZGVuV2l0aGluVHJlZSApLmNzcyggXCJvcGFjaXR5XCIsIDAgKS5zaG93KClcblxuXHRcdFx0Ly8gQW5pbWF0ZSB0byB0aGUgdmFsdWUgc3BlY2lmaWVkXG5cdFx0XHQuZW5kKCkuYW5pbWF0ZSggeyBvcGFjaXR5OiB0byB9LCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9LFxuXHRhbmltYXRlOiBmdW5jdGlvbiggcHJvcCwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0dmFyIGVtcHR5ID0galF1ZXJ5LmlzRW1wdHlPYmplY3QoIHByb3AgKSxcblx0XHRcdG9wdGFsbCA9IGpRdWVyeS5zcGVlZCggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSxcblx0XHRcdGRvQW5pbWF0aW9uID0gZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gT3BlcmF0ZSBvbiBhIGNvcHkgb2YgcHJvcCBzbyBwZXItcHJvcGVydHkgZWFzaW5nIHdvbid0IGJlIGxvc3Rcblx0XHRcdFx0dmFyIGFuaW0gPSBBbmltYXRpb24oIHRoaXMsIGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wICksIG9wdGFsbCApO1xuXG5cdFx0XHRcdC8vIEVtcHR5IGFuaW1hdGlvbnMsIG9yIGZpbmlzaGluZyByZXNvbHZlcyBpbW1lZGlhdGVseVxuXHRcdFx0XHRpZiAoIGVtcHR5IHx8IGRhdGFQcml2LmdldCggdGhpcywgXCJmaW5pc2hcIiApICkge1xuXHRcdFx0XHRcdGFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0ZG9BbmltYXRpb24uZmluaXNoID0gZG9BbmltYXRpb247XG5cblx0XHRyZXR1cm4gZW1wdHkgfHwgb3B0YWxsLnF1ZXVlID09PSBmYWxzZSA/XG5cdFx0XHR0aGlzLmVhY2goIGRvQW5pbWF0aW9uICkgOlxuXHRcdFx0dGhpcy5xdWV1ZSggb3B0YWxsLnF1ZXVlLCBkb0FuaW1hdGlvbiApO1xuXHR9LFxuXHRzdG9wOiBmdW5jdGlvbiggdHlwZSwgY2xlYXJRdWV1ZSwgZ290b0VuZCApIHtcblx0XHR2YXIgc3RvcFF1ZXVlID0gZnVuY3Rpb24oIGhvb2tzICkge1xuXHRcdFx0dmFyIHN0b3AgPSBob29rcy5zdG9wO1xuXHRcdFx0ZGVsZXRlIGhvb2tzLnN0b3A7XG5cdFx0XHRzdG9wKCBnb3RvRW5kICk7XG5cdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRnb3RvRW5kID0gY2xlYXJRdWV1ZTtcblx0XHRcdGNsZWFyUXVldWUgPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBjbGVhclF1ZXVlICkge1xuXHRcdFx0dGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgZGVxdWV1ZSA9IHRydWUsXG5cdFx0XHRcdGluZGV4ID0gdHlwZSAhPSBudWxsICYmIHR5cGUgKyBcInF1ZXVlSG9va3NcIixcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApO1xuXG5cdFx0XHRpZiAoIGluZGV4ICkge1xuXHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICkge1xuXHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRmb3IgKCBpbmRleCBpbiBkYXRhICkge1xuXHRcdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgJiYgcnJ1bi50ZXN0KCBpbmRleCApICkge1xuXHRcdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiZcblx0XHRcdFx0XHQoIHR5cGUgPT0gbnVsbCB8fCB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSApIHtcblxuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIGdvdG9FbmQgKTtcblx0XHRcdFx0XHRkZXF1ZXVlID0gZmFsc2U7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGFydCB0aGUgbmV4dCBpbiB0aGUgcXVldWUgaWYgdGhlIGxhc3Qgc3RlcCB3YXNuJ3QgZm9yY2VkLlxuXHRcdFx0Ly8gVGltZXJzIGN1cnJlbnRseSB3aWxsIGNhbGwgdGhlaXIgY29tcGxldGUgY2FsbGJhY2tzLCB3aGljaFxuXHRcdFx0Ly8gd2lsbCBkZXF1ZXVlIGJ1dCBvbmx5IGlmIHRoZXkgd2VyZSBnb3RvRW5kLlxuXHRcdFx0aWYgKCBkZXF1ZXVlIHx8ICFnb3RvRW5kICkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblx0ZmluaXNoOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRpZiAoIHR5cGUgIT09IGZhbHNlICkge1xuXHRcdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpbmRleCxcblx0XHRcdFx0ZGF0YSA9IGRhdGFQcml2LmdldCggdGhpcyApLFxuXHRcdFx0XHRxdWV1ZSA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlXCIgXSxcblx0XHRcdFx0aG9va3MgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgXSxcblx0XHRcdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycyxcblx0XHRcdFx0bGVuZ3RoID0gcXVldWUgPyBxdWV1ZS5sZW5ndGggOiAwO1xuXG5cdFx0XHQvLyBFbmFibGUgZmluaXNoaW5nIGZsYWcgb24gcHJpdmF0ZSBkYXRhXG5cdFx0XHRkYXRhLmZpbmlzaCA9IHRydWU7XG5cblx0XHRcdC8vIEVtcHR5IHRoZSBxdWV1ZSBmaXJzdFxuXHRcdFx0alF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBbXSApO1xuXG5cdFx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnN0b3AgKSB7XG5cdFx0XHRcdGhvb2tzLnN0b3AuY2FsbCggdGhpcywgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYWN0aXZlIGFuaW1hdGlvbnMsIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJiB0aW1lcnNbIGluZGV4IF0ucXVldWUgPT09IHR5cGUgKSB7XG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggdHJ1ZSApO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFuaW1hdGlvbnMgaW4gdGhlIG9sZCBxdWV1ZSBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGlmICggcXVldWVbIGluZGV4IF0gJiYgcXVldWVbIGluZGV4IF0uZmluaXNoICkge1xuXHRcdFx0XHRcdHF1ZXVlWyBpbmRleCBdLmZpbmlzaC5jYWxsKCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVHVybiBvZmYgZmluaXNoaW5nIGZsYWdcblx0XHRcdGRlbGV0ZSBkYXRhLmZpbmlzaDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJ0b2dnbGVcIiwgXCJzaG93XCIsIFwiaGlkZVwiIF0sIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGNzc0ZuID0galF1ZXJ5LmZuWyBuYW1lIF07XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBzcGVlZCA9PSBudWxsIHx8IHR5cGVvZiBzcGVlZCA9PT0gXCJib29sZWFuXCIgP1xuXHRcdFx0Y3NzRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApIDpcblx0XHRcdHRoaXMuYW5pbWF0ZSggZ2VuRngoIG5hbWUsIHRydWUgKSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxuLy8gR2VuZXJhdGUgc2hvcnRjdXRzIGZvciBjdXN0b20gYW5pbWF0aW9uc1xualF1ZXJ5LmVhY2goIHtcblx0c2xpZGVEb3duOiBnZW5GeCggXCJzaG93XCIgKSxcblx0c2xpZGVVcDogZ2VuRngoIFwiaGlkZVwiICksXG5cdHNsaWRlVG9nZ2xlOiBnZW5GeCggXCJ0b2dnbGVcIiApLFxuXHRmYWRlSW46IHsgb3BhY2l0eTogXCJzaG93XCIgfSxcblx0ZmFkZU91dDogeyBvcGFjaXR5OiBcImhpZGVcIiB9LFxuXHRmYWRlVG9nZ2xlOiB7IG9wYWNpdHk6IFwidG9nZ2xlXCIgfVxufSwgZnVuY3Rpb24oIG5hbWUsIHByb3BzICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5hbmltYXRlKCBwcm9wcywgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LnRpbWVycyA9IFtdO1xualF1ZXJ5LmZ4LnRpY2sgPSBmdW5jdGlvbigpIHtcblx0dmFyIHRpbWVyLFxuXHRcdGkgPSAwLFxuXHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnM7XG5cblx0ZnhOb3cgPSBEYXRlLm5vdygpO1xuXG5cdGZvciAoIDsgaSA8IHRpbWVycy5sZW5ndGg7IGkrKyApIHtcblx0XHR0aW1lciA9IHRpbWVyc1sgaSBdO1xuXG5cdFx0Ly8gUnVuIHRoZSB0aW1lciBhbmQgc2FmZWx5IHJlbW92ZSBpdCB3aGVuIGRvbmUgKGFsbG93aW5nIGZvciBleHRlcm5hbCByZW1vdmFsKVxuXHRcdGlmICggIXRpbWVyKCkgJiYgdGltZXJzWyBpIF0gPT09IHRpbWVyICkge1xuXHRcdFx0dGltZXJzLnNwbGljZSggaS0tLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCAhdGltZXJzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkuZnguc3RvcCgpO1xuXHR9XG5cdGZ4Tm93ID0gdW5kZWZpbmVkO1xufTtcblxualF1ZXJ5LmZ4LnRpbWVyID0gZnVuY3Rpb24oIHRpbWVyICkge1xuXHRqUXVlcnkudGltZXJzLnB1c2goIHRpbWVyICk7XG5cdGpRdWVyeS5meC5zdGFydCgpO1xufTtcblxualF1ZXJ5LmZ4LmludGVydmFsID0gMTM7XG5qUXVlcnkuZnguc3RhcnQgPSBmdW5jdGlvbigpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRzY2hlZHVsZSgpO1xufTtcblxualF1ZXJ5LmZ4LnN0b3AgPSBmdW5jdGlvbigpIHtcblx0aW5Qcm9ncmVzcyA9IG51bGw7XG59O1xuXG5qUXVlcnkuZnguc3BlZWRzID0ge1xuXHRzbG93OiA2MDAsXG5cdGZhc3Q6IDIwMCxcblxuXHQvLyBEZWZhdWx0IHNwZWVkXG5cdF9kZWZhdWx0OiA0MDBcbn07XG5cblxuLy8gQmFzZWQgb2ZmIG9mIHRoZSBwbHVnaW4gYnkgQ2xpbnQgSGVsZmVycywgd2l0aCBwZXJtaXNzaW9uLlxualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsICh0cmFjLTEyMDcyKVxuXHRcdFx0XHR2YXIgdGFiaW5kZXggPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInRhYmluZGV4XCIgKTtcblxuXHRcdFx0XHRpZiAoIHRhYmluZGV4ICkge1xuXHRcdFx0XHRcdHJldHVybiBwYXJzZUludCggdGFiaW5kZXgsIDEwICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0cmZvY3VzYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgfHxcblx0XHRcdFx0XHRyY2xpY2thYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSAmJlxuXHRcdFx0XHRcdGVsZW0uaHJlZlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gMDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cHJvcEZpeDoge1xuXHRcdFwiZm9yXCI6IFwiaHRtbEZvclwiLFxuXHRcdFwiY2xhc3NcIjogXCJjbGFzc05hbWVcIlxuXHR9XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuLy8gQWNjZXNzaW5nIHRoZSBzZWxlY3RlZEluZGV4IHByb3BlcnR5XG4vLyBmb3JjZXMgdGhlIGJyb3dzZXIgdG8gcmVzcGVjdCBzZXR0aW5nIHNlbGVjdGVkXG4vLyBvbiB0aGUgb3B0aW9uXG4vLyBUaGUgZ2V0dGVyIGVuc3VyZXMgYSBkZWZhdWx0IG9wdGlvbiBpcyBzZWxlY3RlZFxuLy8gd2hlbiBpbiBhbiBvcHRncm91cFxuLy8gZXNsaW50IHJ1bGUgXCJuby11bnVzZWQtZXhwcmVzc2lvbnNcIiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBjb2RlXG4vLyBzaW5jZSBpdCBjb25zaWRlcnMgc3VjaCBhY2Nlc3Npb25zIG5vb3BcbmlmICggIXN1cHBvcnQub3B0U2VsZWN0ZWQgKSB7XG5cdGpRdWVyeS5wcm9wSG9va3Muc2VsZWN0ZWQgPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgJiYgcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbnVsbDtcblx0XHR9LFxuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRwYXJlbnQuc2VsZWN0ZWRJbmRleDtcblxuXHRcdFx0XHRpZiAoIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdHBhcmVudC5wYXJlbnROb2RlLnNlbGVjdGVkSW5kZXg7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG59XG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwidGFiSW5kZXhcIixcblx0XCJyZWFkT25seVwiLFxuXHRcIm1heExlbmd0aFwiLFxuXHRcImNlbGxTcGFjaW5nXCIsXG5cdFwiY2VsbFBhZGRpbmdcIixcblx0XCJyb3dTcGFuXCIsXG5cdFwiY29sU3BhblwiLFxuXHRcInVzZU1hcFwiLFxuXHRcImZyYW1lQm9yZGVyXCIsXG5cdFwiY29udGVudEVkaXRhYmxlXCJcbl0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkucHJvcEZpeFsgdGhpcy50b0xvd2VyQ2FzZSgpIF0gPSB0aGlzO1xufSApO1xuXG5cblxuXG5cdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlIGFjY29yZGluZyB0byBIVE1MIHNwZWNcblx0Ly8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS1hc2NpaS13aGl0ZXNwYWNlXG5cdGZ1bmN0aW9uIHN0cmlwQW5kQ29sbGFwc2UoIHZhbHVlICkge1xuXHRcdHZhciB0b2tlbnMgPSB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHRcdHJldHVybiB0b2tlbnMuam9pbiggXCIgXCIgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIGdldENsYXNzKCBlbGVtICkge1xuXHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUgJiYgZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApIHtcblx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdHJldHVybiB2YWx1ZTtcblx0fVxuXHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0fVxuXHRyZXR1cm4gW107XG59XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YWRkQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY3VyLCBjdXJWYWx1ZSwgY2xhc3NOYW1lLCBpLCBmaW5hbFZhbHVlO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc05hbWVzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzTmFtZXMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0Y3VyID0gdGhpcy5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXHRcdFx0XHRcdFx0aWYgKCBjdXIuaW5kZXhPZiggXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXNzTmFtZSArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY3VyLCBjdXJWYWx1ZSwgY2xhc3NOYW1lLCBpLCBmaW5hbFZhbHVlO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc05hbWVzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCB0aGlzICk7XG5cblx0XHRcdFx0Ly8gVGhpcyBleHByZXNzaW9uIGlzIGhlcmUgZm9yIGJldHRlciBjb21wcmVzc2liaWxpdHkgKHNlZSBhZGRDbGFzcylcblx0XHRcdFx0Y3VyID0gdGhpcy5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBjbGFzc05hbWVzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXNzTmFtZSArIFwiIFwiICkgPiAtMSApIHtcblx0XHRcdFx0XHRcdFx0Y3VyID0gY3VyLnJlcGxhY2UoIFwiIFwiICsgY2xhc3NOYW1lICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgY2xhc3NOYW1lcywgY2xhc3NOYW1lLCBpLCBzZWxmLFxuXHRcdFx0dHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS50b2dnbGVDbGFzcyhcblx0XHRcdFx0XHR2YWx1ZS5jYWxsKCB0aGlzLCBpLCBnZXRDbGFzcyggdGhpcyApLCBzdGF0ZVZhbCApLFxuXHRcdFx0XHRcdHN0YXRlVmFsXG5cdFx0XHRcdCk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGVWYWwgPT09IFwiYm9vbGVhblwiICYmIGlzVmFsaWRWYWx1ZSApIHtcblx0XHRcdHJldHVybiBzdGF0ZVZhbCA/IHRoaXMuYWRkQ2xhc3MoIHZhbHVlICkgOiB0aGlzLnJlbW92ZUNsYXNzKCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0c2VsZiA9IGpRdWVyeSggdGhpcyApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgY2xhc3NOYW1lcy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0XHRjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpIF07XG5cblx0XHRcdFx0XHQvLyBDaGVjayBlYWNoIGNsYXNzTmFtZSBnaXZlbiwgc3BhY2Ugc2VwYXJhdGVkIGxpc3Rcblx0XHRcdFx0XHRpZiAoIHNlbGYuaGFzQ2xhc3MoIGNsYXNzTmFtZSApICkge1xuXHRcdFx0XHRcdFx0c2VsZi5yZW1vdmVDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNlbGYuYWRkQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBUb2dnbGUgd2hvbGUgY2xhc3MgbmFtZVxuXHRcdFx0fSBlbHNlIGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB0eXBlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdFx0Y2xhc3NOYW1lID0gZ2V0Q2xhc3MoIHRoaXMgKTtcblx0XHRcdFx0aWYgKCBjbGFzc05hbWUgKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBjbGFzc05hbWUgaWYgc2V0XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiwgY2xhc3NOYW1lICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGUgZWxlbWVudCBoYXMgYSBjbGFzcyBuYW1lIG9yIGlmIHdlJ3JlIHBhc3NlZCBgZmFsc2VgLFxuXHRcdFx0XHQvLyB0aGVuIHJlbW92ZSB0aGUgd2hvbGUgY2xhc3NuYW1lIChpZiB0aGVyZSB3YXMgb25lLCB0aGUgYWJvdmUgc2F2ZWQgaXQpLlxuXHRcdFx0XHQvLyBPdGhlcndpc2UgYnJpbmcgYmFjayB3aGF0ZXZlciB3YXMgcHJldmlvdXNseSBzYXZlZCAoaWYgYW55dGhpbmcpLFxuXHRcdFx0XHQvLyBmYWxsaW5nIGJhY2sgdG8gdGhlIGVtcHR5IHN0cmluZyBpZiBub3RoaW5nIHdhcyBzdG9yZWQuXG5cdFx0XHRcdGlmICggdGhpcy5zZXRBdHRyaWJ1dGUgKSB7XG5cdFx0XHRcdFx0dGhpcy5zZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIixcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSB8fCB2YWx1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0XHRcdFx0XHRcIlwiIDpcblx0XHRcdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcIl9fY2xhc3NOYW1lX19cIiApIHx8IFwiXCJcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGhhc0NsYXNzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGNsYXNzTmFtZSwgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Y2xhc3NOYW1lID0gXCIgXCIgKyBzZWxlY3RvciArIFwiIFwiO1xuXHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHQoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggZ2V0Q2xhc3MoIGVsZW0gKSApICsgXCIgXCIgKS5pbmRleE9mKCBjbGFzc05hbWUgKSA+IC0xICkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIHJyZXR1cm4gPSAvXFxyL2c7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0dmFsOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGhvb2tzLCByZXQsIHZhbHVlSXNGdW5jdGlvbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgZWxlbS50eXBlIF0gfHxcblx0XHRcdFx0XHRqUXVlcnkudmFsSG9va3NbIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHRcdGlmICggaG9va3MgJiZcblx0XHRcdFx0XHRcImdldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIFwidmFsdWVcIiApICkgIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0ID0gZWxlbS52YWx1ZTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgbW9zdCBjb21tb24gc3RyaW5nIGNhc2VzXG5cdFx0XHRcdGlmICggdHlwZW9mIHJldCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcmV0LnJlcGxhY2UoIHJyZXR1cm4sIFwiXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEhhbmRsZSBjYXNlcyB3aGVyZSB2YWx1ZSBpcyBudWxsL3VuZGVmIG9yIG51bWJlclxuXHRcdFx0XHRyZXR1cm4gcmV0ID09IG51bGwgPyBcIlwiIDogcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFsdWVJc0Z1bmN0aW9uID0gaXNGdW5jdGlvbiggdmFsdWUgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0dmFyIHZhbDtcblxuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlICE9PSAxICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsdWVJc0Z1bmN0aW9uICkge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZS5jYWxsKCB0aGlzLCBpLCBqUXVlcnkoIHRoaXMgKS52YWwoKSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsID0gdmFsdWU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRyZWF0IG51bGwvdW5kZWZpbmVkIGFzIFwiXCI7IGNvbnZlcnQgbnVtYmVycyB0byBzdHJpbmdcblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHZhbCA9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIHR5cGVvZiB2YWwgPT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdHZhbCArPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KCB2YWwgKSApIHtcblx0XHRcdFx0dmFsID0galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKyBcIlwiO1xuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cblx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyB0aGlzLnR5cGUgXSB8fCBqUXVlcnkudmFsSG9va3NbIHRoaXMubm9kZU5hbWUudG9Mb3dlckNhc2UoKSBdO1xuXG5cdFx0XHQvLyBJZiBzZXQgcmV0dXJucyB1bmRlZmluZWQsIGZhbGwgYmFjayB0byBub3JtYWwgc2V0dGluZ1xuXHRcdFx0aWYgKCAhaG9va3MgfHwgISggXCJzZXRcIiBpbiBob29rcyApIHx8IGhvb2tzLnNldCggdGhpcywgdmFsLCBcInZhbHVlXCIgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHR0aGlzLnZhbHVlID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHZhbEhvb2tzOiB7XG5cdFx0b3B0aW9uOiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdHZhciB2YWwgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBcInZhbHVlXCIgKTtcblx0XHRcdFx0cmV0dXJuIHZhbCAhPSBudWxsID9cblx0XHRcdFx0XHR2YWwgOlxuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExIG9ubHlcblx0XHRcdFx0XHQvLyBvcHRpb24udGV4dCB0aHJvd3MgZXhjZXB0aW9ucyAodHJhYy0xNDY4NiwgdHJhYy0xNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0c3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbiwgaSxcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRcdGkgPSBtYXg7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKHRyYWMtMjU1MSlcblx0XHRcdFx0XHRpZiAoICggb3B0aW9uLnNlbGVjdGVkIHx8IGkgPT09IGluZGV4ICkgJiZcblxuXHRcdFx0XHRcdFx0XHQvLyBEb24ndCByZXR1cm4gb3B0aW9ucyB0aGF0IGFyZSBkaXNhYmxlZCBvciBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHRcdFx0XHRcdCFvcHRpb24uZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRcdFx0KCAhb3B0aW9uLnBhcmVudE5vZGUuZGlzYWJsZWQgfHxcblx0XHRcdFx0XHRcdFx0XHQhbm9kZU5hbWUoIG9wdGlvbi5wYXJlbnROb2RlLCBcIm9wdGdyb3VwXCIgKSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBHZXQgdGhlIHNwZWNpZmljIHZhbHVlIGZvciB0aGUgb3B0aW9uXG5cdFx0XHRcdFx0XHR2YWx1ZSA9IGpRdWVyeSggb3B0aW9uICkudmFsKCk7XG5cblx0XHRcdFx0XHRcdC8vIFdlIGRvbid0IG5lZWQgYW4gYXJyYXkgZm9yIG9uZSBzZWxlY3RzXG5cdFx0XHRcdFx0XHRpZiAoIG9uZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBNdWx0aS1TZWxlY3RzIHJldHVybiBhbiBhcnJheVxuXHRcdFx0XHRcdFx0dmFsdWVzLnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgb3B0aW9uU2V0LCBvcHRpb24sXG5cdFx0XHRcdFx0b3B0aW9ucyA9IGVsZW0ub3B0aW9ucyxcblx0XHRcdFx0XHR2YWx1ZXMgPSBqUXVlcnkubWFrZUFycmF5KCB2YWx1ZSApLFxuXHRcdFx0XHRcdGkgPSBvcHRpb25zLmxlbmd0aDtcblxuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXG5cdFx0XHRcdFx0aWYgKCBvcHRpb24uc2VsZWN0ZWQgPVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIGpRdWVyeS52YWxIb29rcy5vcHRpb24uZ2V0KCBvcHRpb24gKSwgdmFsdWVzICkgPiAtMVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0b3B0aW9uU2V0ID0gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbmQtYXNzaWduICovXG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBGb3JjZSBicm93c2VycyB0byBiZWhhdmUgY29uc2lzdGVudGx5IHdoZW4gbm9uLW1hdGNoaW5nIHZhbHVlIGlzIHNldFxuXHRcdFx0XHRpZiAoICFvcHRpb25TZXQgKSB7XG5cdFx0XHRcdFx0ZWxlbS5zZWxlY3RlZEluZGV4ID0gLTE7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHZhbHVlcztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gUmFkaW9zIGFuZCBjaGVja2JveGVzIGdldHRlci9zZXR0ZXJcbmpRdWVyeS5lYWNoKCBbIFwicmFkaW9cIiwgXCJjaGVja2JveFwiIF0sIGZ1bmN0aW9uKCkge1xuXHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXSA9IHtcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdFx0cmV0dXJuICggZWxlbS5jaGVja2VkID0galF1ZXJ5LmluQXJyYXkoIGpRdWVyeSggZWxlbSApLnZhbCgpLCB2YWx1ZSApID4gLTEgKTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdGlmICggIXN1cHBvcnQuY2hlY2tPbiApIHtcblx0XHRqUXVlcnkudmFsSG9va3NbIHRoaXMgXS5nZXQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJ2YWx1ZVwiICkgPT09IG51bGwgPyBcIm9uXCIgOiBlbGVtLnZhbHVlO1xuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUmV0dXJuIGpRdWVyeSBmb3IgYXR0cmlidXRlcy1vbmx5IGluY2x1c2lvblxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sLCBwYXJzZXJFcnJvckVsZW07XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBJRSB0aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC5cblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHt9XG5cblx0cGFyc2VyRXJyb3JFbGVtID0geG1sICYmIHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiIClbIDAgXTtcblx0aWYgKCAheG1sIHx8IHBhcnNlckVycm9yRWxlbSApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgKFxuXHRcdFx0cGFyc2VyRXJyb3JFbGVtID9cblx0XHRcdFx0alF1ZXJ5Lm1hcCggcGFyc2VyRXJyb3JFbGVtLmNoaWxkTm9kZXMsIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWwudGV4dENvbnRlbnQ7XG5cdFx0XHRcdH0gKS5qb2luKCBcIlxcblwiICkgOlxuXHRcdFx0XHRkYXRhXG5cdFx0KSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhciByZm9jdXNNb3JwaCA9IC9eKD86Zm9jdXNpbmZvY3VzfGZvY3Vzb3V0Ymx1cikkLyxcblx0c3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgPSBmdW5jdGlvbiggZSApIHtcblx0XHRlLnN0b3BQcm9wYWdhdGlvbigpO1xuXHR9O1xuXG5qUXVlcnkuZXh0ZW5kKCBqUXVlcnkuZXZlbnQsIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggZXZlbnQsIGRhdGEsIGVsZW0sIG9ubHlIYW5kbGVycyApIHtcblxuXHRcdHZhciBpLCBjdXIsIHRtcCwgYnViYmxlVHlwZSwgb250eXBlLCBoYW5kbGUsIHNwZWNpYWwsIGxhc3RFbGVtZW50LFxuXHRcdFx0ZXZlbnRQYXRoID0gWyBlbGVtIHx8IGRvY3VtZW50IF0sXG5cdFx0XHR0eXBlID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcInR5cGVcIiApID8gZXZlbnQudHlwZSA6IGV2ZW50LFxuXHRcdFx0bmFtZXNwYWNlcyA9IGhhc093bi5jYWxsKCBldmVudCwgXCJuYW1lc3BhY2VcIiApID8gZXZlbnQubmFtZXNwYWNlLnNwbGl0KCBcIi5cIiApIDogW107XG5cblx0XHRjdXIgPSBsYXN0RWxlbWVudCA9IHRtcCA9IGVsZW0gPSBlbGVtIHx8IGRvY3VtZW50O1xuXG5cdFx0Ly8gRG9uJ3QgZG8gZXZlbnRzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBmb2N1cy9ibHVyIG1vcnBocyB0byBmb2N1c2luL291dDsgZW5zdXJlIHdlJ3JlIG5vdCBmaXJpbmcgdGhlbSByaWdodCBub3dcblx0XHRpZiAoIHJmb2N1c01vcnBoLnRlc3QoIHR5cGUgKyBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCB0eXBlLmluZGV4T2YoIFwiLlwiICkgPiAtMSApIHtcblxuXHRcdFx0Ly8gTmFtZXNwYWNlZCB0cmlnZ2VyOyBjcmVhdGUgYSByZWdleHAgdG8gbWF0Y2ggZXZlbnQgdHlwZSBpbiBoYW5kbGUoKVxuXHRcdFx0bmFtZXNwYWNlcyA9IHR5cGUuc3BsaXQoIFwiLlwiICk7XG5cdFx0XHR0eXBlID0gbmFtZXNwYWNlcy5zaGlmdCgpO1xuXHRcdFx0bmFtZXNwYWNlcy5zb3J0KCk7XG5cdFx0fVxuXHRcdG9udHlwZSA9IHR5cGUuaW5kZXhPZiggXCI6XCIgKSA8IDAgJiYgXCJvblwiICsgdHlwZTtcblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhIGpRdWVyeS5FdmVudCBvYmplY3QsIE9iamVjdCwgb3IganVzdCBhbiBldmVudCB0eXBlIHN0cmluZ1xuXHRcdGV2ZW50ID0gZXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0ZXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggdHlwZSwgdHlwZW9mIGV2ZW50ID09PSBcIm9iamVjdFwiICYmIGV2ZW50ICk7XG5cblx0XHQvLyBUcmlnZ2VyIGJpdG1hc2s6ICYgMSBmb3IgbmF0aXZlIGhhbmRsZXJzOyAmIDIgZm9yIGpRdWVyeSAoYWx3YXlzIHRydWUpXG5cdFx0ZXZlbnQuaXNUcmlnZ2VyID0gb25seUhhbmRsZXJzID8gMiA6IDM7XG5cdFx0ZXZlbnQubmFtZXNwYWNlID0gbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApO1xuXHRcdGV2ZW50LnJuYW1lc3BhY2UgPSBldmVudC5uYW1lc3BhY2UgP1xuXHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICkgOlxuXHRcdFx0bnVsbDtcblxuXHRcdC8vIENsZWFuIHVwIHRoZSBldmVudCBpbiBjYXNlIGl0IGlzIGJlaW5nIHJldXNlZFxuXHRcdGV2ZW50LnJlc3VsdCA9IHVuZGVmaW5lZDtcblx0XHRpZiAoICFldmVudC50YXJnZXQgKSB7XG5cdFx0XHRldmVudC50YXJnZXQgPSBlbGVtO1xuXHRcdH1cblxuXHRcdC8vIENsb25lIGFueSBpbmNvbWluZyBkYXRhIGFuZCBwcmVwZW5kIHRoZSBldmVudCwgY3JlYXRpbmcgdGhlIGhhbmRsZXIgYXJnIGxpc3Rcblx0XHRkYXRhID0gZGF0YSA9PSBudWxsID9cblx0XHRcdFsgZXZlbnQgXSA6XG5cdFx0XHRqUXVlcnkubWFrZUFycmF5KCBkYXRhLCBbIGV2ZW50IF0gKTtcblxuXHRcdC8vIEFsbG93IHNwZWNpYWwgZXZlbnRzIHRvIGRyYXcgb3V0c2lkZSB0aGUgbGluZXNcblx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgc3BlY2lhbC50cmlnZ2VyICYmIHNwZWNpYWwudHJpZ2dlci5hcHBseSggZWxlbSwgZGF0YSApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgZXZlbnQgcHJvcGFnYXRpb24gcGF0aCBpbiBhZHZhbmNlLCBwZXIgVzNDIGV2ZW50cyBzcGVjICh0cmFjLTk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICh0cmFjLTk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0bGFzdEVsZW1lbnQgPSBjdXI7XG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKHRyYWMtNjE3MClcblx0XHRcdFx0aWYgKCBvbnR5cGUgJiYgaXNGdW5jdGlvbiggZWxlbVsgdHlwZSBdICkgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb24ndCByZS10cmlnZ2VyIGFuIG9uRk9PIGV2ZW50IHdoZW4gd2UgY2FsbCBpdHMgRk9PKCkgbWV0aG9kXG5cdFx0XHRcdFx0dG1wID0gZWxlbVsgb250eXBlIF07XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gbnVsbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBQcmV2ZW50IHJlLXRyaWdnZXJpbmcgb2YgdGhlIHNhbWUgZXZlbnQsIHNpbmNlIHdlIGFscmVhZHkgYnViYmxlZCBpdCBhYm92ZVxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB0eXBlO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtWyB0eXBlIF0oKTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSB0bXA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHQvLyBQaWdneWJhY2sgb24gYSBkb25vciBldmVudCB0byBzaW11bGF0ZSBhIGRpZmZlcmVudCBvbmVcblx0Ly8gVXNlZCBvbmx5IGZvciBgZm9jdXMoaW4gfCBvdXQpYCBldmVudHNcblx0c2ltdWxhdGU6IGZ1bmN0aW9uKCB0eXBlLCBlbGVtLCBldmVudCApIHtcblx0XHR2YXIgZSA9IGpRdWVyeS5leHRlbmQoXG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCksXG5cdFx0XHRldmVudCxcblx0XHRcdHtcblx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0aXNTaW11bGF0ZWQ6IHRydWVcblx0XHRcdH1cblx0XHQpO1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIGUsIG51bGwsIGVsZW0gKTtcblx0fVxuXG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHR0cmlnZ2VyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCB0aGlzICk7XG5cdFx0fSApO1xuXHR9LFxuXHR0cmlnZ2VySGFuZGxlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF07XG5cdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5ldmVudC50cmlnZ2VyKCB0eXBlLCBkYXRhLCBlbGVtLCB0cnVlICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gdHJhYy03NjUzLCB0cmFjLTgxMjUsIHRyYWMtODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAodHJhYy0xMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cbm9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyB0cmFjLTk4ODdcbmZ1bmN0aW9uIGFqYXhFeHRlbmQoIHRhcmdldCwgc3JjICkge1xuXHR2YXIga2V5LCBkZWVwLFxuXHRcdGZsYXRPcHRpb25zID0galF1ZXJ5LmFqYXhTZXR0aW5ncy5mbGF0T3B0aW9ucyB8fCB7fTtcblxuXHRmb3IgKCBrZXkgaW4gc3JjICkge1xuXHRcdGlmICggc3JjWyBrZXkgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0KCBmbGF0T3B0aW9uc1sga2V5IF0gPyB0YXJnZXQgOiAoIGRlZXAgfHwgKCBkZWVwID0ge30gKSApIClbIGtleSBdID0gc3JjWyBrZXkgXTtcblx0XHR9XG5cdH1cblx0aWYgKCBkZWVwICkge1xuXHRcdGpRdWVyeS5leHRlbmQoIHRydWUsIHRhcmdldCwgZGVlcCApO1xuXHR9XG5cblx0cmV0dXJuIHRhcmdldDtcbn1cblxuLyogSGFuZGxlcyByZXNwb25zZXMgdG8gYW4gYWpheCByZXF1ZXN0OlxuICogLSBmaW5kcyB0aGUgcmlnaHQgZGF0YVR5cGUgKG1lZGlhdGVzIGJldHdlZW4gY29udGVudC10eXBlIGFuZCBleHBlY3RlZCBkYXRhVHlwZSlcbiAqIC0gcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuICovXG5mdW5jdGlvbiBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICkge1xuXG5cdHZhciBjdCwgdHlwZSwgZmluYWxEYXRhVHlwZSwgZmlyc3REYXRhVHlwZSxcblx0XHRjb250ZW50cyA9IHMuY29udGVudHMsXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXM7XG5cblx0Ly8gUmVtb3ZlIGF1dG8gZGF0YVR5cGUgYW5kIGdldCBjb250ZW50LXR5cGUgaW4gdGhlIHByb2Nlc3Ncblx0d2hpbGUgKCBkYXRhVHlwZXNbIDAgXSA9PT0gXCIqXCIgKSB7XG5cdFx0ZGF0YVR5cGVzLnNoaWZ0KCk7XG5cdFx0aWYgKCBjdCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0Y3QgPSBzLm1pbWVUeXBlIHx8IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEga25vd24gY29udGVudC10eXBlXG5cdGlmICggY3QgKSB7XG5cdFx0Zm9yICggdHlwZSBpbiBjb250ZW50cyApIHtcblx0XHRcdGlmICggY29udGVudHNbIHR5cGUgXSAmJiBjb250ZW50c1sgdHlwZSBdLnRlc3QoIGN0ICkgKSB7XG5cdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0eXBlICk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIGEgcmVzcG9uc2UgZm9yIHRoZSBleHBlY3RlZCBkYXRhVHlwZVxuXHRpZiAoIGRhdGFUeXBlc1sgMCBdIGluIHJlc3BvbnNlcyApIHtcblx0XHRmaW5hbERhdGFUeXBlID0gZGF0YVR5cGVzWyAwIF07XG5cdH0gZWxzZSB7XG5cblx0XHQvLyBUcnkgY29udmVydGlibGUgZGF0YVR5cGVzXG5cdFx0Zm9yICggdHlwZSBpbiByZXNwb25zZXMgKSB7XG5cdFx0XHRpZiAoICFkYXRhVHlwZXNbIDAgXSB8fCBzLmNvbnZlcnRlcnNbIHR5cGUgKyBcIiBcIiArIGRhdGFUeXBlc1sgMCBdIF0gKSB7XG5cdFx0XHRcdGZpbmFsRGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGlmICggIWZpcnN0RGF0YVR5cGUgKSB7XG5cdFx0XHRcdGZpcnN0RGF0YVR5cGUgPSB0eXBlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE9yIGp1c3QgdXNlIGZpcnN0IG9uZVxuXHRcdGZpbmFsRGF0YVR5cGUgPSBmaW5hbERhdGFUeXBlIHx8IGZpcnN0RGF0YVR5cGU7XG5cdH1cblxuXHQvLyBJZiB3ZSBmb3VuZCBhIGRhdGFUeXBlXG5cdC8vIFdlIGFkZCB0aGUgZGF0YVR5cGUgdG8gdGhlIGxpc3QgaWYgbmVlZGVkXG5cdC8vIGFuZCByZXR1cm4gdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2Vcblx0aWYgKCBmaW5hbERhdGFUeXBlICkge1xuXHRcdGlmICggZmluYWxEYXRhVHlwZSAhPT0gZGF0YVR5cGVzWyAwIF0gKSB7XG5cdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggZmluYWxEYXRhVHlwZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVzcG9uc2VzWyBmaW5hbERhdGFUeXBlIF07XG5cdH1cbn1cblxuLyogQ2hhaW4gY29udmVyc2lvbnMgZ2l2ZW4gdGhlIHJlcXVlc3QgYW5kIHRoZSBvcmlnaW5hbCByZXNwb25zZVxuICogQWxzbyBzZXRzIHRoZSByZXNwb25zZVhYWCBmaWVsZHMgb24gdGhlIGpxWEhSIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhDb252ZXJ0KCBzLCByZXNwb25zZSwganFYSFIsIGlzU3VjY2VzcyApIHtcblx0dmFyIGNvbnYyLCBjdXJyZW50LCBjb252LCB0bXAsIHByZXYsXG5cdFx0Y29udmVydGVycyA9IHt9LFxuXG5cdFx0Ly8gV29yayB3aXRoIGEgY29weSBvZiBkYXRhVHlwZXMgaW4gY2FzZSB3ZSBuZWVkIHRvIG1vZGlmeSBpdCBmb3IgY29udmVyc2lvblxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzLnNsaWNlKCk7XG5cblx0Ly8gQ3JlYXRlIGNvbnZlcnRlcnMgbWFwIHdpdGggbG93ZXJjYXNlZCBrZXlzXG5cdGlmICggZGF0YVR5cGVzWyAxIF0gKSB7XG5cdFx0Zm9yICggY29udiBpbiBzLmNvbnZlcnRlcnMgKSB7XG5cdFx0XHRjb252ZXJ0ZXJzWyBjb252LnRvTG93ZXJDYXNlKCkgXSA9IHMuY29udmVydGVyc1sgY29udiBdO1xuXHRcdH1cblx0fVxuXG5cdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHQvLyBDb252ZXJ0IHRvIGVhY2ggc2VxdWVudGlhbCBkYXRhVHlwZVxuXHR3aGlsZSAoIGN1cnJlbnQgKSB7XG5cblx0XHRpZiAoIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSApIHtcblx0XHRcdGpxWEhSWyBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gXSA9IHJlc3BvbnNlO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHRoZSBkYXRhRmlsdGVyIGlmIHByb3ZpZGVkXG5cdFx0aWYgKCAhcHJldiAmJiBpc1N1Y2Nlc3MgJiYgcy5kYXRhRmlsdGVyICkge1xuXHRcdFx0cmVzcG9uc2UgPSBzLmRhdGFGaWx0ZXIoIHJlc3BvbnNlLCBzLmRhdGFUeXBlICk7XG5cdFx0fVxuXG5cdFx0cHJldiA9IGN1cnJlbnQ7XG5cdFx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdFx0aWYgKCBjdXJyZW50ICkge1xuXG5cdFx0XHQvLyBUaGVyZSdzIG9ubHkgd29yayB0byBkbyBpZiBjdXJyZW50IGRhdGFUeXBlIGlzIG5vbi1hdXRvXG5cdFx0XHRpZiAoIGN1cnJlbnQgPT09IFwiKlwiICkge1xuXG5cdFx0XHRcdGN1cnJlbnQgPSBwcmV2O1xuXG5cdFx0XHQvLyBDb252ZXJ0IHJlc3BvbnNlIGlmIHByZXYgZGF0YVR5cGUgaXMgbm9uLWF1dG8gYW5kIGRpZmZlcnMgZnJvbSBjdXJyZW50XG5cdFx0XHR9IGVsc2UgaWYgKCBwcmV2ICE9PSBcIipcIiAmJiBwcmV2ICE9PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdC8vIFNlZWsgYSBkaXJlY3QgY29udmVydGVyXG5cdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyBjdXJyZW50IF0gfHwgY29udmVydGVyc1sgXCIqIFwiICsgY3VycmVudCBdO1xuXG5cdFx0XHRcdC8vIElmIG5vbmUgZm91bmQsIHNlZWsgYSBwYWlyXG5cdFx0XHRcdGlmICggIWNvbnYgKSB7XG5cdFx0XHRcdFx0Zm9yICggY29udjIgaW4gY29udmVydGVycyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSWYgY29udjIgb3V0cHV0cyBjdXJyZW50XG5cdFx0XHRcdFx0XHR0bXAgPSBjb252Mi5zcGxpdCggXCIgXCIgKTtcblx0XHRcdFx0XHRcdGlmICggdG1wWyAxIF0gPT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gSWYgcHJldiBjYW4gYmUgY29udmVydGVkIHRvIGFjY2VwdGVkIGlucHV0XG5cdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBwcmV2ICsgXCIgXCIgKyB0bXBbIDAgXSBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0Y29udmVydGVyc1sgXCIqIFwiICsgdG1wWyAwIF0gXTtcblx0XHRcdFx0XHRcdFx0aWYgKCBjb252ICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ29uZGVuc2UgZXF1aXZhbGVuY2UgY29udmVydGVyc1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY29udiA9PT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnYgPSBjb252ZXJ0ZXJzWyBjb252MiBdO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCBpbnNlcnQgdGhlIGludGVybWVkaWF0ZSBkYXRhVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGNvbnZlcnRlcnNbIGNvbnYyIF0gIT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjdXJyZW50ID0gdG1wWyAwIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdG1wWyAxIF0gKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBcHBseSBjb252ZXJ0ZXIgKGlmIG5vdCBhbiBlcXVpdmFsZW5jZSlcblx0XHRcdFx0aWYgKCBjb252ICE9PSB0cnVlICkge1xuXG5cdFx0XHRcdFx0Ly8gVW5sZXNzIGVycm9ycyBhcmUgYWxsb3dlZCB0byBidWJibGUsIGNhdGNoIGFuZCByZXR1cm4gdGhlbVxuXHRcdFx0XHRcdGlmICggY29udiAmJiBzLnRocm93cyApIHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU6IFwicGFyc2VyZXJyb3JcIixcblx0XHRcdFx0XHRcdFx0XHRlcnJvcjogY29udiA/IGUgOiBcIk5vIGNvbnZlcnNpb24gZnJvbSBcIiArIHByZXYgKyBcIiB0byBcIiArIGN1cnJlbnRcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4geyBzdGF0ZTogXCJzdWNjZXNzXCIsIGRhdGE6IHJlc3BvbnNlIH07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBDb3VudGVyIGZvciBob2xkaW5nIHRoZSBudW1iZXIgb2YgYWN0aXZlIHF1ZXJpZXNcblx0YWN0aXZlOiAwLFxuXG5cdC8vIExhc3QtTW9kaWZpZWQgaGVhZGVyIGNhY2hlIGZvciBuZXh0IHJlcXVlc3Rcblx0bGFzdE1vZGlmaWVkOiB7fSxcblx0ZXRhZzoge30sXG5cblx0YWpheFNldHRpbmdzOiB7XG5cdFx0dXJsOiBsb2NhdGlvbi5ocmVmLFxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0aXNMb2NhbDogcmxvY2FsUHJvdG9jb2wudGVzdCggbG9jYXRpb24ucHJvdG9jb2wgKSxcblx0XHRnbG9iYWw6IHRydWUsXG5cdFx0cHJvY2Vzc0RhdGE6IHRydWUsXG5cdFx0YXN5bmM6IHRydWUsXG5cdFx0Y29udGVudFR5cGU6IFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkOyBjaGFyc2V0PVVURi04XCIsXG5cblx0XHQvKlxuXHRcdHRpbWVvdXQ6IDAsXG5cdFx0ZGF0YTogbnVsbCxcblx0XHRkYXRhVHlwZTogbnVsbCxcblx0XHR1c2VybmFtZTogbnVsbCxcblx0XHRwYXNzd29yZDogbnVsbCxcblx0XHRjYWNoZTogbnVsbCxcblx0XHR0aHJvd3M6IGZhbHNlLFxuXHRcdHRyYWRpdGlvbmFsOiBmYWxzZSxcblx0XHRoZWFkZXJzOiB7fSxcblx0XHQqL1xuXG5cdFx0YWNjZXB0czoge1xuXHRcdFx0XCIqXCI6IGFsbFR5cGVzLFxuXHRcdFx0dGV4dDogXCJ0ZXh0L3BsYWluXCIsXG5cdFx0XHRodG1sOiBcInRleHQvaHRtbFwiLFxuXHRcdFx0eG1sOiBcImFwcGxpY2F0aW9uL3htbCwgdGV4dC94bWxcIixcblx0XHRcdGpzb246IFwiYXBwbGljYXRpb24vanNvbiwgdGV4dC9qYXZhc2NyaXB0XCJcblx0XHR9LFxuXG5cdFx0Y29udGVudHM6IHtcblx0XHRcdHhtbDogL1xcYnhtbFxcYi8sXG5cdFx0XHRodG1sOiAvXFxiaHRtbC8sXG5cdFx0XHRqc29uOiAvXFxianNvblxcYi9cblx0XHR9LFxuXG5cdFx0cmVzcG9uc2VGaWVsZHM6IHtcblx0XHRcdHhtbDogXCJyZXNwb25zZVhNTFwiLFxuXHRcdFx0dGV4dDogXCJyZXNwb25zZVRleHRcIixcblx0XHRcdGpzb246IFwicmVzcG9uc2VKU09OXCJcblx0XHR9LFxuXG5cdFx0Ly8gRGF0YSBjb252ZXJ0ZXJzXG5cdFx0Ly8gS2V5cyBzZXBhcmF0ZSBzb3VyY2UgKG9yIGNhdGNoYWxsIFwiKlwiKSBhbmQgZGVzdGluYXRpb24gdHlwZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuXHRcdGNvbnZlcnRlcnM6IHtcblxuXHRcdFx0Ly8gQ29udmVydCBhbnl0aGluZyB0byB0ZXh0XG5cdFx0XHRcIiogdGV4dFwiOiBTdHJpbmcsXG5cblx0XHRcdC8vIFRleHQgdG8gaHRtbCAodHJ1ZSA9IG5vIHRyYW5zZm9ybWF0aW9uKVxuXHRcdFx0XCJ0ZXh0IGh0bWxcIjogdHJ1ZSxcblxuXHRcdFx0Ly8gRXZhbHVhdGUgdGV4dCBhcyBhIGpzb24gZXhwcmVzc2lvblxuXHRcdFx0XCJ0ZXh0IGpzb25cIjogSlNPTi5wYXJzZSxcblxuXHRcdFx0Ly8gUGFyc2UgdGV4dCBhcyB4bWxcblx0XHRcdFwidGV4dCB4bWxcIjogalF1ZXJ5LnBhcnNlWE1MXG5cdFx0fSxcblxuXHRcdC8vIEZvciBvcHRpb25zIHRoYXQgc2hvdWxkbid0IGJlIGRlZXAgZXh0ZW5kZWQ6XG5cdFx0Ly8geW91IGNhbiBhZGQgeW91ciBvd24gY3VzdG9tIG9wdGlvbnMgaGVyZSBpZlxuXHRcdC8vIGFuZCB3aGVuIHlvdSBjcmVhdGUgb25lIHRoYXQgc2hvdWxkbid0IGJlXG5cdFx0Ly8gZGVlcCBleHRlbmRlZCAoc2VlIGFqYXhFeHRlbmQpXG5cdFx0ZmxhdE9wdGlvbnM6IHtcblx0XHRcdHVybDogdHJ1ZSxcblx0XHRcdGNvbnRleHQ6IHRydWVcblx0XHR9XG5cdH0sXG5cblx0Ly8gQ3JlYXRlcyBhIGZ1bGwgZmxlZGdlZCBzZXR0aW5ncyBvYmplY3QgaW50byB0YXJnZXRcblx0Ly8gd2l0aCBib3RoIGFqYXhTZXR0aW5ncyBhbmQgc2V0dGluZ3MgZmllbGRzLlxuXHQvLyBJZiB0YXJnZXQgaXMgb21pdHRlZCwgd3JpdGVzIGludG8gYWpheFNldHRpbmdzLlxuXHRhamF4U2V0dXA6IGZ1bmN0aW9uKCB0YXJnZXQsIHNldHRpbmdzICkge1xuXHRcdHJldHVybiBzZXR0aW5ncyA/XG5cblx0XHRcdC8vIEJ1aWxkaW5nIGEgc2V0dGluZ3Mgb2JqZWN0XG5cdFx0XHRhamF4RXh0ZW5kKCBhamF4RXh0ZW5kKCB0YXJnZXQsIGpRdWVyeS5hamF4U2V0dGluZ3MgKSwgc2V0dGluZ3MgKSA6XG5cblx0XHRcdC8vIEV4dGVuZGluZyBhamF4U2V0dGluZ3Ncblx0XHRcdGFqYXhFeHRlbmQoIGpRdWVyeS5hamF4U2V0dGluZ3MsIHRhcmdldCApO1xuXHR9LFxuXG5cdGFqYXhQcmVmaWx0ZXI6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggcHJlZmlsdGVycyApLFxuXHRhamF4VHJhbnNwb3J0OiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMgKSxcblxuXHQvLyBNYWluIG1ldGhvZFxuXHRhamF4OiBmdW5jdGlvbiggdXJsLCBvcHRpb25zICkge1xuXG5cdFx0Ly8gSWYgdXJsIGlzIGFuIG9iamVjdCwgc2ltdWxhdGUgcHJlLTEuNSBzaWduYXR1cmVcblx0XHRpZiAoIHR5cGVvZiB1cmwgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRvcHRpb25zID0gdXJsO1xuXHRcdFx0dXJsID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIEZvcmNlIG9wdGlvbnMgdG8gYmUgYW4gb2JqZWN0XG5cdFx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cblx0XHR2YXIgdHJhbnNwb3J0LFxuXG5cdFx0XHQvLyBVUkwgd2l0aG91dCBhbnRpLWNhY2hlIHBhcmFtXG5cdFx0XHRjYWNoZVVSTCxcblxuXHRcdFx0Ly8gUmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nLFxuXHRcdFx0cmVzcG9uc2VIZWFkZXJzLFxuXG5cdFx0XHQvLyB0aW1lb3V0IGhhbmRsZVxuXHRcdFx0dGltZW91dFRpbWVyLFxuXG5cdFx0XHQvLyBVcmwgY2xlYW51cCB2YXJcblx0XHRcdHVybEFuY2hvcixcblxuXHRcdFx0Ly8gUmVxdWVzdCBzdGF0ZSAoYmVjb21lcyBmYWxzZSB1cG9uIHNlbmQgYW5kIHRydWUgdXBvbiBjb21wbGV0aW9uKVxuXHRcdFx0Y29tcGxldGVkLFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIGdsb2JhbCBldmVudHMgYXJlIHRvIGJlIGRpc3BhdGNoZWRcblx0XHRcdGZpcmVHbG9iYWxzLFxuXG5cdFx0XHQvLyBMb29wIHZhcmlhYmxlXG5cdFx0XHRpLFxuXG5cdFx0XHQvLyB1bmNhY2hlZCBwYXJ0IG9mIHRoZSB1cmxcblx0XHRcdHVuY2FjaGVkLFxuXG5cdFx0XHQvLyBDcmVhdGUgdGhlIGZpbmFsIG9wdGlvbnMgb2JqZWN0XG5cdFx0XHRzID0galF1ZXJ5LmFqYXhTZXR1cCgge30sIG9wdGlvbnMgKSxcblxuXHRcdFx0Ly8gQ2FsbGJhY2tzIGNvbnRleHRcblx0XHRcdGNhbGxiYWNrQ29udGV4dCA9IHMuY29udGV4dCB8fCBzLFxuXG5cdFx0XHQvLyBDb250ZXh0IGZvciBnbG9iYWwgZXZlbnRzIGlzIGNhbGxiYWNrQ29udGV4dCBpZiBpdCBpcyBhIERPTSBub2RlIG9yIGpRdWVyeSBjb2xsZWN0aW9uXG5cdFx0XHRnbG9iYWxFdmVudENvbnRleHQgPSBzLmNvbnRleHQgJiZcblx0XHRcdFx0KCBjYWxsYmFja0NvbnRleHQubm9kZVR5cGUgfHwgY2FsbGJhY2tDb250ZXh0LmpxdWVyeSApID9cblx0XHRcdFx0alF1ZXJ5KCBjYWxsYmFja0NvbnRleHQgKSA6XG5cdFx0XHRcdGpRdWVyeS5ldmVudCxcblxuXHRcdFx0Ly8gRGVmZXJyZWRzXG5cdFx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLFxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZCA9IGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0c3RhdHVzQ29kZSA9IHMuc3RhdHVzQ29kZSB8fCB7fSxcblxuXHRcdFx0Ly8gSGVhZGVycyAodGhleSBhcmUgc2VudCBhbGwgYXQgb25jZSlcblx0XHRcdHJlcXVlc3RIZWFkZXJzID0ge30sXG5cdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzID0ge30sXG5cblx0XHRcdC8vIERlZmF1bHQgYWJvcnQgbWVzc2FnZVxuXHRcdFx0c3RyQWJvcnQgPSBcImNhbmNlbGVkXCIsXG5cblx0XHRcdC8vIEZha2UgeGhyXG5cdFx0XHRqcVhIUiA9IHtcblx0XHRcdFx0cmVhZHlTdGF0ZTogMCxcblxuXHRcdFx0XHQvLyBCdWlsZHMgaGVhZGVycyBoYXNodGFibGUgaWYgbmVlZGVkXG5cdFx0XHRcdGdldFJlc3BvbnNlSGVhZGVyOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdFx0XHRcdHZhciBtYXRjaDtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0XHRcdGlmICggIXJlc3BvbnNlSGVhZGVycyApIHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzID0ge307XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaCA9IHJoZWFkZXJzLmV4ZWMoIHJlc3BvbnNlSGVhZGVyc1N0cmluZyApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdID1cblx0XHRcdFx0XHRcdFx0XHRcdCggcmVzcG9uc2VIZWFkZXJzWyBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdIHx8IFtdIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmNvbmNhdCggbWF0Y2hbIDIgXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXRjaCA9IHJlc3BvbnNlSGVhZGVyc1sga2V5LnRvTG93ZXJDYXNlKCkgKyBcIiBcIiBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gbWF0Y2ggPT0gbnVsbCA/IG51bGwgOiBtYXRjaC5qb2luKCBcIiwgXCIgKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBSYXcgc3RyaW5nXG5cdFx0XHRcdGdldEFsbFJlc3BvbnNlSGVhZGVyczogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBsZXRlZCA/IHJlc3BvbnNlSGVhZGVyc1N0cmluZyA6IG51bGw7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FjaGVzIHRoZSBoZWFkZXJcblx0XHRcdFx0c2V0UmVxdWVzdEhlYWRlcjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRuYW1lID0gcmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gPVxuXHRcdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fCBuYW1lO1xuXHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBPdmVycmlkZXMgcmVzcG9uc2UgY29udGVudC10eXBlIGhlYWRlclxuXHRcdFx0XHRvdmVycmlkZU1pbWVUeXBlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0cy5taW1lVHlwZSA9IHR5cGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRcdHN0YXR1c0NvZGU6IGZ1bmN0aW9uKCBtYXAgKSB7XG5cdFx0XHRcdFx0dmFyIGNvZGU7XG5cdFx0XHRcdFx0aWYgKCBtYXAgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSBjYWxsYmFja3Ncblx0XHRcdFx0XHRcdFx0anFYSFIuYWx3YXlzKCBtYXBbIGpxWEhSLnN0YXR1cyBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIExhenktYWRkIHRoZSBuZXcgY2FsbGJhY2tzIGluIGEgd2F5IHRoYXQgcHJlc2VydmVzIG9sZCBvbmVzXG5cdFx0XHRcdFx0XHRcdGZvciAoIGNvZGUgaW4gbWFwICkge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXR1c0NvZGVbIGNvZGUgXSA9IFsgc3RhdHVzQ29kZVsgY29kZSBdLCBtYXBbIGNvZGUgXSBdO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhbmNlbCB0aGUgcmVxdWVzdFxuXHRcdFx0XHRhYm9ydDogZnVuY3Rpb24oIHN0YXR1c1RleHQgKSB7XG5cdFx0XHRcdFx0dmFyIGZpbmFsVGV4dCA9IHN0YXR1c1RleHQgfHwgc3RyQWJvcnQ7XG5cdFx0XHRcdFx0aWYgKCB0cmFuc3BvcnQgKSB7XG5cdFx0XHRcdFx0XHR0cmFuc3BvcnQuYWJvcnQoIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkb25lKCAwLCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdC8vIEF0dGFjaCBkZWZlcnJlZHNcblx0XHRkZWZlcnJlZC5wcm9taXNlKCBqcVhIUiApO1xuXG5cdFx0Ly8gQWRkIHByb3RvY29sIGlmIG5vdCBwcm92aWRlZCAocHJlZmlsdGVycyBtaWdodCBleHBlY3QgaXQpXG5cdFx0Ly8gSGFuZGxlIGZhbHN5IHVybCBpbiB0aGUgc2V0dGluZ3Mgb2JqZWN0ICh0cmFjLTEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0IHRyYWMtMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICh0cmFjLTE1MTE4KVxuXHRcdGZpcmVHbG9iYWxzID0galF1ZXJ5LmV2ZW50ICYmIHMuZ2xvYmFsO1xuXG5cdFx0Ly8gV2F0Y2ggZm9yIGEgbmV3IHNldCBvZiByZXF1ZXN0c1xuXHRcdGlmICggZmlyZUdsb2JhbHMgJiYgalF1ZXJ5LmFjdGl2ZSsrID09PSAwICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIFwiYWpheFN0YXJ0XCIgKTtcblx0XHR9XG5cblx0XHQvLyBVcHBlcmNhc2UgdGhlIHR5cGVcblx0XHRzLnR5cGUgPSBzLnR5cGUudG9VcHBlckNhc2UoKTtcblxuXHRcdC8vIERldGVybWluZSBpZiByZXF1ZXN0IGhhcyBjb250ZW50XG5cdFx0cy5oYXNDb250ZW50ID0gIXJub0NvbnRlbnQudGVzdCggcy50eXBlICk7XG5cblx0XHQvLyBTYXZlIHRoZSBVUkwgaW4gY2FzZSB3ZSdyZSB0b3lpbmcgd2l0aCB0aGUgSWYtTW9kaWZpZWQtU2luY2Vcblx0XHQvLyBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIgbGF0ZXIgb25cblx0XHQvLyBSZW1vdmUgaGFzaCB0byBzaW1wbGlmeSB1cmwgbWFuaXB1bGF0aW9uXG5cdFx0Y2FjaGVVUkwgPSBzLnVybC5yZXBsYWNlKCByaGFzaCwgXCJcIiApO1xuXG5cdFx0Ly8gTW9yZSBvcHRpb25zIGhhbmRsaW5nIGZvciByZXF1ZXN0cyB3aXRoIG5vIGNvbnRlbnRcblx0XHRpZiAoICFzLmhhc0NvbnRlbnQgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBoYXNoIHNvIHdlIGNhbiBwdXQgaXQgYmFja1xuXHRcdFx0dW5jYWNoZWQgPSBzLnVybC5zbGljZSggY2FjaGVVUkwubGVuZ3RoICk7XG5cblx0XHRcdC8vIElmIGRhdGEgaXMgYXZhaWxhYmxlIGFuZCBzaG91bGQgYmUgcHJvY2Vzc2VkLCBhcHBlbmQgZGF0YSB0byB1cmxcblx0XHRcdGlmICggcy5kYXRhICYmICggcy5wcm9jZXNzRGF0YSB8fCB0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICkgKSB7XG5cdFx0XHRcdGNhY2hlVVJMICs9ICggcnF1ZXJ5LnRlc3QoIGNhY2hlVVJMICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmRhdGE7XG5cblx0XHRcdFx0Ly8gdHJhYy05NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICh0cmFjLTExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyB0cmFjLTE0NTA6IHNvbWV0aW1lcyBJRSByZXR1cm5zIDEyMjMgd2hlbiBpdCBzaG91bGQgYmUgMjA0XG5cdFx0MTIyMzogMjA0XG5cdH0sXG5cdHhoclN1cHBvcnRlZCA9IGpRdWVyeS5hamF4U2V0dGluZ3MueGhyKCk7XG5cbnN1cHBvcnQuY29ycyA9ICEheGhyU3VwcG9ydGVkICYmICggXCJ3aXRoQ3JlZGVudGlhbHNcIiBpbiB4aHJTdXBwb3J0ZWQgKTtcbnN1cHBvcnQuYWpheCA9IHhoclN1cHBvcnRlZCA9ICEheGhyU3VwcG9ydGVkO1xuXG5qUXVlcnkuYWpheFRyYW5zcG9ydCggZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cdHZhciBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaztcblxuXHQvLyBDcm9zcyBkb21haW4gb25seSBhbGxvd2VkIGlmIHN1cHBvcnRlZCB0aHJvdWdoIFhNTEh0dHBSZXF1ZXN0XG5cdGlmICggc3VwcG9ydC5jb3JzIHx8IHhoclN1cHBvcnRlZCAmJiAhb3B0aW9ucy5jcm9zc0RvbWFpbiApIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIGhlYWRlcnMsIGNvbXBsZXRlICkge1xuXHRcdFx0XHR2YXIgaSxcblx0XHRcdFx0XHR4aHIgPSBvcHRpb25zLnhocigpO1xuXG5cdFx0XHRcdHhoci5vcGVuKFxuXHRcdFx0XHRcdG9wdGlvbnMudHlwZSxcblx0XHRcdFx0XHRvcHRpb25zLnVybCxcblx0XHRcdFx0XHRvcHRpb25zLmFzeW5jLFxuXHRcdFx0XHRcdG9wdGlvbnMudXNlcm5hbWUsXG5cdFx0XHRcdFx0b3B0aW9ucy5wYXNzd29yZFxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdC8vIEFwcGx5IGN1c3RvbSBmaWVsZHMgaWYgcHJvdmlkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRmb3IgKCBpIGluIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdFx0eGhyWyBpIF0gPSBvcHRpb25zLnhockZpZWxkc1sgaSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlIG1pbWUgdHlwZSBpZiBuZWVkZWRcblx0XHRcdFx0aWYgKCBvcHRpb25zLm1pbWVUeXBlICYmIHhoci5vdmVycmlkZU1pbWVUeXBlICkge1xuXHRcdFx0XHRcdHhoci5vdmVycmlkZU1pbWVUeXBlKCBvcHRpb25zLm1pbWVUeXBlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBYLVJlcXVlc3RlZC1XaXRoIGhlYWRlclxuXHRcdFx0XHQvLyBGb3IgY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzZWVpbmcgYXMgY29uZGl0aW9ucyBmb3IgYSBwcmVmbGlnaHQgYXJlXG5cdFx0XHRcdC8vIGFraW4gdG8gYSBqaWdzYXcgcHV6emxlLCB3ZSBzaW1wbHkgbmV2ZXIgc2V0IGl0IHRvIGJlIHN1cmUuXG5cdFx0XHRcdC8vIChpdCBjYW4gYWx3YXlzIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0IGJhc2lzIG9yIGV2ZW4gdXNpbmcgYWpheFNldHVwKVxuXHRcdFx0XHQvLyBGb3Igc2FtZS1kb21haW4gcmVxdWVzdHMsIHdvbid0IGNoYW5nZSBoZWFkZXIgaWYgYWxyZWFkeSBwcm92aWRlZC5cblx0XHRcdFx0aWYgKCAhb3B0aW9ucy5jcm9zc0RvbWFpbiAmJiAhaGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSApIHtcblx0XHRcdFx0XHRoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdID0gXCJYTUxIdHRwUmVxdWVzdFwiO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU2V0IGhlYWRlcnNcblx0XHRcdFx0Zm9yICggaSBpbiBoZWFkZXJzICkge1xuXHRcdFx0XHRcdHhoci5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBoZWFkZXJzWyBpIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBlcnJvckNhbGxiYWNrID0geGhyLm9ubG9hZCA9XG5cdFx0XHRcdFx0XHRcdFx0eGhyLm9uZXJyb3IgPSB4aHIub25hYm9ydCA9IHhoci5vbnRpbWVvdXQgPVxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG51bGw7XG5cblx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlID09PSBcImFib3J0XCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0eGhyLmFib3J0KCk7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIHR5cGUgPT09IFwiZXJyb3JcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0Ly8gT24gYSBtYW51YWwgbmF0aXZlIGFib3J0LCBJRTkgdGhyb3dzXG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXJyb3JzIG9uIGFueSBwcm9wZXJ0eSBhY2Nlc3MgdGhhdCBpcyBub3QgcmVhZHlTdGF0ZVxuXHRcdFx0XHRcdFx0XHRcdGlmICggdHlwZW9mIHhoci5zdGF0dXMgIT09IFwibnVtYmVyXCIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggMCwgXCJlcnJvclwiICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZpbGU6IHByb3RvY29sIGFsd2F5cyB5aWVsZHMgc3RhdHVzIDA7IHNlZSB0cmFjLTg2MDUsIHRyYWMtMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vIHRyYWMtMTQ2ODM6IE9ubHkgcmV0aHJvdyBpZiB0aGlzIGhhc24ndCBiZWVuIG5vdGlmaWVkIGFzIGFuIGVycm9yIHlldFxuXHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHR0aHJvdyBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFByZXZlbnQgYXV0by1leGVjdXRpb24gb2Ygc2NyaXB0cyB3aGVuIG5vIGV4cGxpY2l0IGRhdGFUeXBlIHdhcyBwcm92aWRlZCAoU2VlIGdoLTI0MzIpXG5qUXVlcnkuYWpheFByZWZpbHRlciggZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLmNvbnRlbnRzLnNjcmlwdCA9IGZhbHNlO1xuXHR9XG59ICk7XG5cbi8vIEluc3RhbGwgc2NyaXB0IGRhdGFUeXBlXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGFjY2VwdHM6IHtcblx0XHRzY3JpcHQ6IFwidGV4dC9qYXZhc2NyaXB0LCBhcHBsaWNhdGlvbi9qYXZhc2NyaXB0LCBcIiArXG5cdFx0XHRcImFwcGxpY2F0aW9uL2VjbWFzY3JpcHQsIGFwcGxpY2F0aW9uL3gtZWNtYXNjcmlwdFwiXG5cdH0sXG5cdGNvbnRlbnRzOiB7XG5cdFx0c2NyaXB0OiAvXFxiKD86amF2YXxlY21hKXNjcmlwdFxcYi9cblx0fSxcblx0Y29udmVydGVyczoge1xuXHRcdFwidGV4dCBzY3JpcHRcIjogZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggdGV4dCApO1xuXHRcdFx0cmV0dXJuIHRleHQ7XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhhbmRsZSBjYWNoZSdzIHNwZWNpYWwgY2FzZSBhbmQgY3Jvc3NEb21haW5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0cy5jYWNoZSA9IGZhbHNlO1xuXHR9XG5cdGlmICggcy5jcm9zc0RvbWFpbiApIHtcblx0XHRzLnR5cGUgPSBcIkdFVFwiO1xuXHR9XG59ICk7XG5cbi8vIEJpbmQgc2NyaXB0IHRhZyBoYWNrIHRyYW5zcG9ydFxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXG5cdC8vIFRoaXMgdHJhbnNwb3J0IG9ubHkgZGVhbHMgd2l0aCBjcm9zcyBkb21haW4gb3IgZm9yY2VkLWJ5LWF0dHJzIHJlcXVlc3RzXG5cdGlmICggcy5jcm9zc0RvbWFpbiB8fCBzLnNjcmlwdEF0dHJzICkge1xuXHRcdHZhciBzY3JpcHQsIGNhbGxiYWNrO1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggXywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHNjcmlwdCA9IGpRdWVyeSggXCI8c2NyaXB0PlwiIClcblx0XHRcdFx0XHQuYXR0ciggcy5zY3JpcHRBdHRycyB8fCB7fSApXG5cdFx0XHRcdFx0LnByb3AoIHsgY2hhcnNldDogcy5zY3JpcHRDaGFyc2V0LCBzcmM6IHMudXJsIH0gKVxuXHRcdFx0XHRcdC5vbiggXCJsb2FkIGVycm9yXCIsIGNhbGxiYWNrID0gZnVuY3Rpb24oIGV2dCApIHtcblx0XHRcdFx0XHRcdHNjcmlwdC5yZW1vdmUoKTtcblx0XHRcdFx0XHRcdGNhbGxiYWNrID0gbnVsbDtcblx0XHRcdFx0XHRcdGlmICggZXZ0ICkge1xuXHRcdFx0XHRcdFx0XHRjb21wbGV0ZSggZXZ0LnR5cGUgPT09IFwiZXJyb3JcIiA/IDQwNCA6IDIwMCwgZXZ0LnR5cGUgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gVXNlIG5hdGl2ZSBET00gbWFuaXB1bGF0aW9uIHRvIGF2b2lkIG91ciBkb21NYW5pcCBBSkFYIHRyaWNrZXJ5XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoIHNjcmlwdFsgMCBdICk7XG5cdFx0XHR9LFxuXHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdGNhbGxiYWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBvbGRDYWxsYmFja3MgPSBbXSxcblx0cmpzb25wID0gLyg9KVxcPyg/PSZ8JCl8XFw/XFw/LztcblxuLy8gRGVmYXVsdCBqc29ucCBzZXR0aW5nc1xualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRqc29ucDogXCJjYWxsYmFja1wiLFxuXHRqc29ucENhbGxiYWNrOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgY2FsbGJhY2sgPSBvbGRDYWxsYmFja3MucG9wKCkgfHwgKCBqUXVlcnkuZXhwYW5kbyArIFwiX1wiICsgKCBub25jZS5ndWlkKysgKSApO1xuXHRcdHRoaXNbIGNhbGxiYWNrIF0gPSB0cnVlO1xuXHRcdHJldHVybiBjYWxsYmFjaztcblx0fVxufSApO1xuXG4vLyBEZXRlY3QsIG5vcm1hbGl6ZSBvcHRpb25zIGFuZCBpbnN0YWxsIGNhbGxiYWNrcyBmb3IganNvbnAgcmVxdWVzdHNcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBcImpzb24ganNvbnBcIiwgZnVuY3Rpb24oIHMsIG9yaWdpbmFsU2V0dGluZ3MsIGpxWEhSICkge1xuXG5cdHZhciBjYWxsYmFja05hbWUsIG92ZXJ3cml0dGVuLCByZXNwb25zZUNvbnRhaW5lcixcblx0XHRqc29uUHJvcCA9IHMuanNvbnAgIT09IGZhbHNlICYmICggcmpzb25wLnRlc3QoIHMudXJsICkgP1xuXHRcdFx0XCJ1cmxcIiA6XG5cdFx0XHR0eXBlb2Ygcy5kYXRhID09PSBcInN0cmluZ1wiICYmXG5cdFx0XHRcdCggcy5jb250ZW50VHlwZSB8fCBcIlwiIClcblx0XHRcdFx0XHQuaW5kZXhPZiggXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiApID09PSAwICYmXG5cdFx0XHRcdHJqc29ucC50ZXN0KCBzLmRhdGEgKSAmJiBcImRhdGFcIlxuXHRcdCk7XG5cblx0Ly8gSGFuZGxlIGlmZiB0aGUgZXhwZWN0ZWQgZGF0YSB0eXBlIGlzIFwianNvbnBcIiBvciB3ZSBoYXZlIGEgcGFyYW1ldGVyIHRvIHNldFxuXHRpZiAoIGpzb25Qcm9wIHx8IHMuZGF0YVR5cGVzWyAwIF0gPT09IFwianNvbnBcIiApIHtcblxuXHRcdC8vIEdldCBjYWxsYmFjayBuYW1lLCByZW1lbWJlcmluZyBwcmVleGlzdGluZyB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggaXRcblx0XHRjYWxsYmFja05hbWUgPSBzLmpzb25wQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKCBzLmpzb25wQ2FsbGJhY2sgKSA/XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2soKSA6XG5cdFx0XHRzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHQvLyBJbnNlcnQgY2FsbGJhY2sgaW50byB1cmwgb3IgZm9ybSBkYXRhXG5cdFx0aWYgKCBqc29uUHJvcCApIHtcblx0XHRcdHNbIGpzb25Qcm9wIF0gPSBzWyBqc29uUHJvcCBdLnJlcGxhY2UoIHJqc29ucCwgXCIkMVwiICsgY2FsbGJhY2tOYW1lICk7XG5cdFx0fSBlbHNlIGlmICggcy5qc29ucCAhPT0gZmFsc2UgKSB7XG5cdFx0XHRzLnVybCArPSAoIHJxdWVyeS50ZXN0KCBzLnVybCApID8gXCImXCIgOiBcIj9cIiApICsgcy5qc29ucCArIFwiPVwiICsgY2FsbGJhY2tOYW1lO1xuXHRcdH1cblxuXHRcdC8vIFVzZSBkYXRhIGNvbnZlcnRlciB0byByZXRyaWV2ZSBqc29uIGFmdGVyIHNjcmlwdCBleGVjdXRpb25cblx0XHRzLmNvbnZlcnRlcnNbIFwic2NyaXB0IGpzb25cIiBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoICFyZXNwb25zZUNvbnRhaW5lciApIHtcblx0XHRcdFx0alF1ZXJ5LmVycm9yKCBjYWxsYmFja05hbWUgKyBcIiB3YXMgbm90IGNhbGxlZFwiICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzcG9uc2VDb250YWluZXJbIDAgXTtcblx0XHR9O1xuXG5cdFx0Ly8gRm9yY2UganNvbiBkYXRhVHlwZVxuXHRcdHMuZGF0YVR5cGVzWyAwIF0gPSBcImpzb25cIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tcblx0XHRvdmVyd3JpdHRlbiA9IHdpbmRvd1sgY2FsbGJhY2tOYW1lIF07XG5cdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBhcmd1bWVudHM7XG5cdFx0fTtcblxuXHRcdC8vIENsZWFuLXVwIGZ1bmN0aW9uIChmaXJlcyBhZnRlciBjb252ZXJ0ZXJzKVxuXHRcdGpxWEhSLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIElmIHByZXZpb3VzIHZhbHVlIGRpZG4ndCBleGlzdCAtIHJlbW92ZSBpdFxuXHRcdFx0aWYgKCBvdmVyd3JpdHRlbiA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRqUXVlcnkoIHdpbmRvdyApLnJlbW92ZVByb3AoIGNhbGxiYWNrTmFtZSApO1xuXG5cdFx0XHQvLyBPdGhlcndpc2UgcmVzdG9yZSBwcmVleGlzdGluZyB2YWx1ZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2luZG93WyBjYWxsYmFja05hbWUgXSA9IG92ZXJ3cml0dGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTYXZlIGJhY2sgYXMgZnJlZVxuXHRcdFx0aWYgKCBzWyBjYWxsYmFja05hbWUgXSApIHtcblxuXHRcdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCByZS11c2luZyB0aGUgb3B0aW9ucyBkb2Vzbid0IHNjcmV3IHRoaW5ncyBhcm91bmRcblx0XHRcdFx0cy5qc29ucENhbGxiYWNrID0gb3JpZ2luYWxTZXR0aW5ncy5qc29ucENhbGxiYWNrO1xuXG5cdFx0XHRcdC8vIFNhdmUgdGhlIGNhbGxiYWNrIG5hbWUgZm9yIGZ1dHVyZSB1c2Vcblx0XHRcdFx0b2xkQ2FsbGJhY2tzLnB1c2goIGNhbGxiYWNrTmFtZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDYWxsIGlmIGl0IHdhcyBhIGZ1bmN0aW9uIGFuZCB3ZSBoYXZlIGEgcmVzcG9uc2Vcblx0XHRcdGlmICggcmVzcG9uc2VDb250YWluZXIgJiYgaXNGdW5jdGlvbiggb3ZlcndyaXR0ZW4gKSApIHtcblx0XHRcdFx0b3ZlcndyaXR0ZW4oIHJlc3BvbnNlQ29udGFpbmVyWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmVzcG9uc2VDb250YWluZXIgPSBvdmVyd3JpdHRlbiA9IHVuZGVmaW5lZDtcblx0XHR9ICk7XG5cblx0XHQvLyBEZWxlZ2F0ZSB0byBzY3JpcHRcblx0XHRyZXR1cm4gXCJzY3JpcHRcIjtcblx0fVxufSApO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBTYWZhcmkgOCBvbmx5XG4vLyBJbiBTYWZhcmkgOCBkb2N1bWVudHMgY3JlYXRlZCB2aWEgZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50XG4vLyBjb2xsYXBzZSBzaWJsaW5nIGZvcm1zOiB0aGUgc2Vjb25kIG9uZSBiZWNvbWVzIGEgY2hpbGQgb2YgdGhlIGZpcnN0IG9uZS5cbi8vIEJlY2F1c2Ugb2YgdGhhdCwgdGhpcyBzZWN1cml0eSBtZWFzdXJlIGhhcyB0byBiZSBkaXNhYmxlZCBpbiBTYWZhcmkgOC5cbi8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzczMzdcbnN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ID0gKCBmdW5jdGlvbigpIHtcblx0dmFyIGJvZHkgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKS5ib2R5O1xuXHRib2R5LmlubmVySFRNTCA9IFwiPGZvcm0+PC9mb3JtPjxmb3JtPjwvZm9ybT5cIjtcblx0cmV0dXJuIGJvZHkuY2hpbGROb2Rlcy5sZW5ndGggPT09IDI7XG59ICkoKTtcblxuXG4vLyBBcmd1bWVudCBcImRhdGFcIiBzaG91bGQgYmUgc3RyaW5nIG9mIGh0bWxcbi8vIGNvbnRleHQgKG9wdGlvbmFsKTogSWYgc3BlY2lmaWVkLCB0aGUgZnJhZ21lbnQgd2lsbCBiZSBjcmVhdGVkIGluIHRoaXMgY29udGV4dCxcbi8vIGRlZmF1bHRzIHRvIGRvY3VtZW50XG4vLyBrZWVwU2NyaXB0cyAob3B0aW9uYWwpOiBJZiB0cnVlLCB3aWxsIGluY2x1ZGUgc2NyaXB0cyBwYXNzZWQgaW4gdGhlIGh0bWwgc3RyaW5nXG5qUXVlcnkucGFyc2VIVE1MID0gZnVuY3Rpb24oIGRhdGEsIGNvbnRleHQsIGtlZXBTY3JpcHRzICkge1xuXHRpZiAoIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiBbXTtcblx0fVxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG5cdFx0Y29udGV4dCA9IGZhbHNlO1xuXHR9XG5cblx0dmFyIGJhc2UsIHBhcnNlZCwgc2NyaXB0cztcblxuXHRpZiAoICFjb250ZXh0ICkge1xuXG5cdFx0Ly8gU3RvcCBzY3JpcHRzIG9yIGlubGluZSBldmVudCBoYW5kbGVycyBmcm9tIGJlaW5nIGV4ZWN1dGVkIGltbWVkaWF0ZWx5XG5cdFx0Ly8gYnkgdXNpbmcgZG9jdW1lbnQuaW1wbGVtZW50YXRpb25cblx0XHRpZiAoIHN1cHBvcnQuY3JlYXRlSFRNTERvY3VtZW50ICkge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApO1xuXG5cdFx0XHQvLyBTZXQgdGhlIGJhc2UgaHJlZiBmb3IgdGhlIGNyZWF0ZWQgZG9jdW1lbnRcblx0XHRcdC8vIHNvIGFueSBwYXJzZWQgZWxlbWVudHMgd2l0aCBVUkxzXG5cdFx0XHQvLyBhcmUgYmFzZWQgb24gdGhlIGRvY3VtZW50J3MgVVJMIChnaC0yOTY1KVxuXHRcdFx0YmFzZSA9IGNvbnRleHQuY3JlYXRlRWxlbWVudCggXCJiYXNlXCIgKTtcblx0XHRcdGJhc2UuaHJlZiA9IGRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG5cdFx0XHRjb250ZXh0LmhlYWQuYXBwZW5kQ2hpbGQoIGJhc2UgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udGV4dCA9IGRvY3VtZW50O1xuXHRcdH1cblx0fVxuXG5cdHBhcnNlZCA9IHJzaW5nbGVUYWcuZXhlYyggZGF0YSApO1xuXHRzY3JpcHRzID0gIWtlZXBTY3JpcHRzICYmIFtdO1xuXG5cdC8vIFNpbmdsZSB0YWdcblx0aWYgKCBwYXJzZWQgKSB7XG5cdFx0cmV0dXJuIFsgY29udGV4dC5jcmVhdGVFbGVtZW50KCBwYXJzZWRbIDEgXSApIF07XG5cdH1cblxuXHRwYXJzZWQgPSBidWlsZEZyYWdtZW50KCBbIGRhdGEgXSwgY29udGV4dCwgc2NyaXB0cyApO1xuXG5cdGlmICggc2NyaXB0cyAmJiBzY3JpcHRzLmxlbmd0aCApIHtcblx0XHRqUXVlcnkoIHNjcmlwdHMgKS5yZW1vdmUoKTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBwYXJzZWQuY2hpbGROb2RlcyApO1xufTtcblxuXG4vKipcbiAqIExvYWQgYSB1cmwgaW50byBhIHBhZ2VcbiAqL1xualF1ZXJ5LmZuLmxvYWQgPSBmdW5jdGlvbiggdXJsLCBwYXJhbXMsIGNhbGxiYWNrICkge1xuXHR2YXIgc2VsZWN0b3IsIHR5cGUsIHJlc3BvbnNlLFxuXHRcdHNlbGYgPSB0aGlzLFxuXHRcdG9mZiA9IHVybC5pbmRleE9mKCBcIiBcIiApO1xuXG5cdGlmICggb2ZmID4gLTEgKSB7XG5cdFx0c2VsZWN0b3IgPSBzdHJpcEFuZENvbGxhcHNlKCB1cmwuc2xpY2UoIG9mZiApICk7XG5cdFx0dXJsID0gdXJsLnNsaWNlKCAwLCBvZmYgKTtcblx0fVxuXG5cdC8vIElmIGl0J3MgYSBmdW5jdGlvblxuXHRpZiAoIGlzRnVuY3Rpb24oIHBhcmFtcyApICkge1xuXG5cdFx0Ly8gV2UgYXNzdW1lIHRoYXQgaXQncyB0aGUgY2FsbGJhY2tcblx0XHRjYWxsYmFjayA9IHBhcmFtcztcblx0XHRwYXJhbXMgPSB1bmRlZmluZWQ7XG5cblx0Ly8gT3RoZXJ3aXNlLCBidWlsZCBhIHBhcmFtIHN0cmluZ1xuXHR9IGVsc2UgaWYgKCBwYXJhbXMgJiYgdHlwZW9mIHBhcmFtcyA9PT0gXCJvYmplY3RcIiApIHtcblx0XHR0eXBlID0gXCJQT1NUXCI7XG5cdH1cblxuXHQvLyBJZiB3ZSBoYXZlIGVsZW1lbnRzIHRvIG1vZGlmeSwgbWFrZSB0aGUgcmVxdWVzdFxuXHRpZiAoIHNlbGYubGVuZ3RoID4gMCApIHtcblx0XHRqUXVlcnkuYWpheCgge1xuXHRcdFx0dXJsOiB1cmwsXG5cblx0XHRcdC8vIElmIFwidHlwZVwiIHZhcmlhYmxlIGlzIHVuZGVmaW5lZCwgdGhlbiBcIkdFVFwiIG1ldGhvZCB3aWxsIGJlIHVzZWQuXG5cdFx0XHQvLyBNYWtlIHZhbHVlIG9mIHRoaXMgZmllbGQgZXhwbGljaXQgc2luY2Vcblx0XHRcdC8vIHVzZXIgY2FuIG92ZXJyaWRlIGl0IHRocm91Z2ggYWpheFNldHVwIG1ldGhvZFxuXHRcdFx0dHlwZTogdHlwZSB8fCBcIkdFVFwiLFxuXHRcdFx0ZGF0YVR5cGU6IFwiaHRtbFwiLFxuXHRcdFx0ZGF0YTogcGFyYW1zXG5cdFx0fSApLmRvbmUoIGZ1bmN0aW9uKCByZXNwb25zZVRleHQgKSB7XG5cblx0XHRcdC8vIFNhdmUgcmVzcG9uc2UgZm9yIHVzZSBpbiBjb21wbGV0ZSBjYWxsYmFja1xuXHRcdFx0cmVzcG9uc2UgPSBhcmd1bWVudHM7XG5cblx0XHRcdHNlbGYuaHRtbCggc2VsZWN0b3IgP1xuXG5cdFx0XHRcdC8vIElmIGEgc2VsZWN0b3Igd2FzIHNwZWNpZmllZCwgbG9jYXRlIHRoZSByaWdodCBlbGVtZW50cyBpbiBhIGR1bW15IGRpdlxuXHRcdFx0XHQvLyBFeGNsdWRlIHNjcmlwdHMgdG8gYXZvaWQgSUUgJ1Blcm1pc3Npb24gRGVuaWVkJyBlcnJvcnNcblx0XHRcdFx0alF1ZXJ5KCBcIjxkaXY+XCIgKS5hcHBlbmQoIGpRdWVyeS5wYXJzZUhUTUwoIHJlc3BvbnNlVGV4dCApICkuZmluZCggc2VsZWN0b3IgKSA6XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHVzZSB0aGUgZnVsbCByZXN1bHRcblx0XHRcdFx0cmVzcG9uc2VUZXh0ICk7XG5cblx0XHQvLyBJZiB0aGUgcmVxdWVzdCBzdWNjZWVkcywgdGhpcyBmdW5jdGlvbiBnZXRzIFwiZGF0YVwiLCBcInN0YXR1c1wiLCBcImpxWEhSXCJcblx0XHQvLyBidXQgdGhleSBhcmUgaWdub3JlZCBiZWNhdXNlIHJlc3BvbnNlIHdhcyBzZXQgYWJvdmUuXG5cdFx0Ly8gSWYgaXQgZmFpbHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImpxWEhSXCIsIFwic3RhdHVzXCIsIFwiZXJyb3JcIlxuXHRcdH0gKS5hbHdheXMoIGNhbGxiYWNrICYmIGZ1bmN0aW9uKCBqcVhIUiwgc3RhdHVzICkge1xuXHRcdFx0c2VsZi5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Y2FsbGJhY2suYXBwbHkoIHRoaXMsIHJlc3BvbnNlIHx8IFsganFYSFIucmVzcG9uc2VUZXh0LCBzdGF0dXMsIGpxWEhSIF0gKTtcblx0XHRcdH0gKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyZXR1cm4gdGhpcztcbn07XG5cblxuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuYW5pbWF0ZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0cmV0dXJuIGpRdWVyeS5ncmVwKCBqUXVlcnkudGltZXJzLCBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIGVsZW0gPT09IGZuLmVsZW07XG5cdH0gKS5sZW5ndGg7XG59O1xuXG5cblxuXG5qUXVlcnkub2Zmc2V0ID0ge1xuXHRzZXRPZmZzZXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBpICkge1xuXHRcdHZhciBjdXJQb3NpdGlvbiwgY3VyTGVmdCwgY3VyQ1NTVG9wLCBjdXJUb3AsIGN1ck9mZnNldCwgY3VyQ1NTTGVmdCwgY2FsY3VsYXRlUG9zaXRpb24sXG5cdFx0XHRwb3NpdGlvbiA9IGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApLFxuXHRcdFx0Y3VyRWxlbSA9IGpRdWVyeSggZWxlbSApLFxuXHRcdFx0cHJvcHMgPSB7fTtcblxuXHRcdC8vIFNldCBwb3NpdGlvbiBmaXJzdCwgaW4tY2FzZSB0b3AvbGVmdCBhcmUgc2V0IGV2ZW4gb24gc3RhdGljIGVsZW1cblx0XHRpZiAoIHBvc2l0aW9uID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0ZWxlbS5zdHlsZS5wb3NpdGlvbiA9IFwicmVsYXRpdmVcIjtcblx0XHR9XG5cblx0XHRjdXJPZmZzZXQgPSBjdXJFbGVtLm9mZnNldCgpO1xuXHRcdGN1ckNTU1RvcCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwidG9wXCIgKTtcblx0XHRjdXJDU1NMZWZ0ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJsZWZ0XCIgKTtcblx0XHRjYWxjdWxhdGVQb3NpdGlvbiA9ICggcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIiB8fCBwb3NpdGlvbiA9PT0gXCJmaXhlZFwiICkgJiZcblx0XHRcdCggY3VyQ1NTVG9wICsgY3VyQ1NTTGVmdCApLmluZGV4T2YoIFwiYXV0b1wiICkgPiAtMTtcblxuXHRcdC8vIE5lZWQgdG8gYmUgYWJsZSB0byBjYWxjdWxhdGUgcG9zaXRpb24gaWYgZWl0aGVyXG5cdFx0Ly8gdG9wIG9yIGxlZnQgaXMgYXV0byBhbmQgcG9zaXRpb24gaXMgZWl0aGVyIGFic29sdXRlIG9yIGZpeGVkXG5cdFx0aWYgKCBjYWxjdWxhdGVQb3NpdGlvbiApIHtcblx0XHRcdGN1clBvc2l0aW9uID0gY3VyRWxlbS5wb3NpdGlvbigpO1xuXHRcdFx0Y3VyVG9wID0gY3VyUG9zaXRpb24udG9wO1xuXHRcdFx0Y3VyTGVmdCA9IGN1clBvc2l0aW9uLmxlZnQ7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyVG9wID0gcGFyc2VGbG9hdCggY3VyQ1NTVG9wICkgfHwgMDtcblx0XHRcdGN1ckxlZnQgPSBwYXJzZUZsb2F0KCBjdXJDU1NMZWZ0ICkgfHwgMDtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIG9wdGlvbnMgKSApIHtcblxuXHRcdFx0Ly8gVXNlIGpRdWVyeS5leHRlbmQgaGVyZSB0byBhbGxvdyBtb2RpZmljYXRpb24gb2YgY29vcmRpbmF0ZXMgYXJndW1lbnQgKGdoLTE4NDgpXG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucy5jYWxsKCBlbGVtLCBpLCBqUXVlcnkuZXh0ZW5kKCB7fSwgY3VyT2Zmc2V0ICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdGlvbnMudG9wICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy50b3AgPSAoIG9wdGlvbnMudG9wIC0gY3VyT2Zmc2V0LnRvcCApICsgY3VyVG9wO1xuXHRcdH1cblx0XHRpZiAoIG9wdGlvbnMubGVmdCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMubGVmdCA9ICggb3B0aW9ucy5sZWZ0IC0gY3VyT2Zmc2V0LmxlZnQgKSArIGN1ckxlZnQ7XG5cdFx0fVxuXG5cdFx0aWYgKCBcInVzaW5nXCIgaW4gb3B0aW9ucyApIHtcblx0XHRcdG9wdGlvbnMudXNpbmcuY2FsbCggZWxlbSwgcHJvcHMgKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJFbGVtLmNzcyggcHJvcHMgKTtcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHQvLyBvZmZzZXQoKSByZWxhdGVzIGFuIGVsZW1lbnQncyBib3JkZXIgYm94IHRvIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b2Zmc2V0OiBmdW5jdGlvbiggb3B0aW9ucyApIHtcblxuXHRcdC8vIFByZXNlcnZlIGNoYWluaW5nIGZvciBzZXR0ZXJcblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gb3B0aW9ucyA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0dGhpcyA6XG5cdFx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5Lm9mZnNldC5zZXRPZmZzZXQoIHRoaXMsIG9wdGlvbnMsIGkgKTtcblx0XHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHZhciByZWN0LCB3aW4sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhZWxlbSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gemVyb3MgZm9yIGRpc2Nvbm5lY3RlZCBhbmQgaGlkZGVuIChkaXNwbGF5OiBub25lKSBlbGVtZW50cyAoZ2gtMjMxMClcblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhXG5cdFx0Ly8gZGlzY29ubmVjdGVkIG5vZGUgaW4gSUUgdGhyb3dzIGFuIGVycm9yXG5cdFx0aWYgKCAhZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB7IHRvcDogMCwgbGVmdDogMCB9O1xuXHRcdH1cblxuXHRcdC8vIEdldCBkb2N1bWVudC1yZWxhdGl2ZSBwb3NpdGlvbiBieSBhZGRpbmcgdmlld3BvcnQgc2Nyb2xsIHRvIHZpZXdwb3J0LXJlbGF0aXZlIGdCQ1Jcblx0XHRyZWN0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHR3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogcmVjdC50b3AgKyB3aW4ucGFnZVlPZmZzZXQsXG5cdFx0XHRsZWZ0OiByZWN0LmxlZnQgKyB3aW4ucGFnZVhPZmZzZXRcblx0XHR9O1xuXHR9LFxuXG5cdC8vIHBvc2l0aW9uKCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgbWFyZ2luIGJveCB0byBpdHMgb2Zmc2V0IHBhcmVudCdzIHBhZGRpbmcgYm94XG5cdC8vIFRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGJlaGF2aW9yIG9mIENTUyBhYnNvbHV0ZSBwb3NpdGlvbmluZ1xuXHRwb3NpdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCAhdGhpc1sgMCBdICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBvZmZzZXRQYXJlbnQsIG9mZnNldCwgZG9jLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdHBhcmVudE9mZnNldCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cblx0XHQvLyBwb3NpdGlvbjpmaXhlZCBlbGVtZW50cyBhcmUgb2Zmc2V0IGZyb20gdGhlIHZpZXdwb3J0LCB3aGljaCBpdHNlbGYgYWx3YXlzIGhhcyB6ZXJvIG9mZnNldFxuXHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICkgPT09IFwiZml4ZWRcIiApIHtcblxuXHRcdFx0Ly8gQXNzdW1lIHBvc2l0aW9uOmZpeGVkIGltcGxpZXMgYXZhaWxhYmlsaXR5IG9mIGdldEJvdW5kaW5nQ2xpZW50UmVjdFxuXHRcdFx0b2Zmc2V0ID0gZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvZmZzZXQgPSB0aGlzLm9mZnNldCgpO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB0aGUgKnJlYWwqIG9mZnNldCBwYXJlbnQsIHdoaWNoIGNhbiBiZSB0aGUgZG9jdW1lbnQgb3IgaXRzIHJvb3QgZWxlbWVudFxuXHRcdFx0Ly8gd2hlbiBhIHN0YXRpY2FsbHkgcG9zaXRpb25lZCBlbGVtZW50IGlzIGlkZW50aWZpZWRcblx0XHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudDtcblx0XHRcdG9mZnNldFBhcmVudCA9IGVsZW0ub2Zmc2V0UGFyZW50IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJlxuXHRcdFx0XHQoIG9mZnNldFBhcmVudCA9PT0gZG9jLmJvZHkgfHwgb2Zmc2V0UGFyZW50ID09PSBkb2MuZG9jdW1lbnRFbGVtZW50ICkgJiZcblx0XHRcdFx0alF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblxuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQucGFyZW50Tm9kZTtcblx0XHRcdH1cblx0XHRcdGlmICggb2Zmc2V0UGFyZW50ICYmIG9mZnNldFBhcmVudCAhPT0gZWxlbSAmJiBvZmZzZXRQYXJlbnQubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gSW5jb3Jwb3JhdGUgYm9yZGVycyBpbnRvIGl0cyBvZmZzZXQsIHNpbmNlIHRoZXkgYXJlIG91dHNpZGUgaXRzIGNvbnRlbnQgb3JpZ2luXG5cdFx0XHRcdHBhcmVudE9mZnNldCA9IGpRdWVyeSggb2Zmc2V0UGFyZW50ICkub2Zmc2V0KCk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC50b3AgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlclRvcFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LmxlZnQgKz0galF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcImJvcmRlckxlZnRXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU3VidHJhY3QgcGFyZW50IG9mZnNldHMgYW5kIGVsZW1lbnQgbWFyZ2luc1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IG9mZnNldC50b3AgLSBwYXJlbnRPZmZzZXQudG9wIC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5Ub3BcIiwgdHJ1ZSApLFxuXHRcdFx0bGVmdDogb2Zmc2V0LmxlZnQgLSBwYXJlbnRPZmZzZXQubGVmdCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luTGVmdFwiLCB0cnVlIClcblx0XHR9O1xuXHR9LFxuXG5cdC8vIFRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGRvY3VtZW50RWxlbWVudCBpbiB0aGUgZm9sbG93aW5nIGNhc2VzOlxuXHQvLyAxKSBGb3IgdGhlIGVsZW1lbnQgaW5zaWRlIHRoZSBpZnJhbWUgd2l0aG91dCBvZmZzZXRQYXJlbnQsIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuXG5cdC8vICAgIGRvY3VtZW50RWxlbWVudCBvZiB0aGUgcGFyZW50IHdpbmRvd1xuXHQvLyAyKSBGb3IgdGhlIGhpZGRlbiBvciBkZXRhY2hlZCBlbGVtZW50XG5cdC8vIDMpIEZvciBib2R5IG9yIGh0bWwgZWxlbWVudCwgaS5lLiBpbiBjYXNlIG9mIHRoZSBodG1sIG5vZGUgLSBpdCB3aWxsIHJldHVybiBpdHNlbGZcblx0Ly9cblx0Ly8gYnV0IHRob3NlIGV4Y2VwdGlvbnMgd2VyZSBuZXZlciBwcmVzZW50ZWQgYXMgYSByZWFsIGxpZmUgdXNlLWNhc2VzXG5cdC8vIGFuZCBtaWdodCBiZSBjb25zaWRlcmVkIGFzIG1vcmUgcHJlZmVyYWJsZSByZXN1bHRzLlxuXHQvL1xuXHQvLyBUaGlzIGxvZ2ljLCBob3dldmVyLCBpcyBub3QgZ3VhcmFudGVlZCBhbmQgY2FuIGNoYW5nZSBhdCBhbnkgcG9pbnQgaW4gdGhlIGZ1dHVyZVxuXHRvZmZzZXRQYXJlbnQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgb2Zmc2V0UGFyZW50ID0gdGhpcy5vZmZzZXRQYXJlbnQ7XG5cblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmIGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5vZmZzZXRQYXJlbnQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZG9jdW1lbnRFbGVtZW50O1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG4vLyBDcmVhdGUgc2Nyb2xsTGVmdCBhbmQgc2Nyb2xsVG9wIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IHNjcm9sbExlZnQ6IFwicGFnZVhPZmZzZXRcIiwgc2Nyb2xsVG9wOiBcInBhZ2VZT2Zmc2V0XCIgfSwgZnVuY3Rpb24oIG1ldGhvZCwgcHJvcCApIHtcblx0dmFyIHRvcCA9IFwicGFnZVlPZmZzZXRcIiA9PT0gcHJvcDtcblxuXHRqUXVlcnkuZm5bIG1ldGhvZCBdID0gZnVuY3Rpb24oIHZhbCApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgbWV0aG9kLCB2YWwgKSB7XG5cblx0XHRcdC8vIENvYWxlc2NlIGRvY3VtZW50cyBhbmQgd2luZG93c1xuXHRcdFx0dmFyIHdpbjtcblx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblx0XHRcdFx0d2luID0gZWxlbTtcblx0XHRcdH0gZWxzZSBpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW0uZGVmYXVsdFZpZXc7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiB3aW4gPyB3aW5bIHByb3AgXSA6IGVsZW1bIG1ldGhvZCBdO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHdpbiApIHtcblx0XHRcdFx0d2luLnNjcm9sbFRvKFxuXHRcdFx0XHRcdCF0b3AgPyB2YWwgOiB3aW4ucGFnZVhPZmZzZXQsXG5cdFx0XHRcdFx0dG9wID8gdmFsIDogd2luLnBhZ2VZT2Zmc2V0XG5cdFx0XHRcdCk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVsZW1bIG1ldGhvZCBdID0gdmFsO1xuXHRcdFx0fVxuXHRcdH0sIG1ldGhvZCwgdmFsLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH07XG59ICk7XG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA8PTcgLSA5LjEsIENocm9tZSA8PTM3IC0gNDlcbi8vIEFkZCB0aGUgdG9wL2xlZnQgY3NzSG9va3MgdXNpbmcgalF1ZXJ5LmZuLnBvc2l0aW9uXG4vLyBXZWJraXQgYnVnOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjkwODRcbi8vIEJsaW5rIGJ1ZzogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NTg5MzQ3XG4vLyBnZXRDb21wdXRlZFN0eWxlIHJldHVybnMgcGVyY2VudCB3aGVuIHNwZWNpZmllZCBmb3IgdG9wL2xlZnQvYm90dG9tL3JpZ2h0O1xuLy8gcmF0aGVyIHRoYW4gbWFrZSB0aGUgY3NzIG1vZHVsZSBkZXBlbmQgb24gdGhlIG9mZnNldCBtb2R1bGUsIGp1c3QgY2hlY2sgZm9yIGl0IGhlcmVcbmpRdWVyeS5lYWNoKCBbIFwidG9wXCIsIFwibGVmdFwiIF0sIGZ1bmN0aW9uKCBfaSwgcHJvcCApIHtcblx0alF1ZXJ5LmNzc0hvb2tzWyBwcm9wIF0gPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucGl4ZWxQb3NpdGlvbixcblx0XHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdFx0XHRjb21wdXRlZCA9IGN1ckNTUyggZWxlbSwgcHJvcCApO1xuXG5cdFx0XHRcdC8vIElmIGN1ckNTUyByZXR1cm5zIHBlcmNlbnRhZ2UsIGZhbGxiYWNrIHRvIG9mZnNldFxuXHRcdFx0XHRyZXR1cm4gcm51bW5vbnB4LnRlc3QoIGNvbXB1dGVkICkgP1xuXHRcdFx0XHRcdGpRdWVyeSggZWxlbSApLnBvc2l0aW9uKClbIHByb3AgXSArIFwicHhcIiA6XG5cdFx0XHRcdFx0Y29tcHV0ZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXHQpO1xufSApO1xuXG5cbi8vIENyZWF0ZSBpbm5lckhlaWdodCwgaW5uZXJXaWR0aCwgaGVpZ2h0LCB3aWR0aCwgb3V0ZXJIZWlnaHQgYW5kIG91dGVyV2lkdGggbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgSGVpZ2h0OiBcImhlaWdodFwiLCBXaWR0aDogXCJ3aWR0aFwiIH0sIGZ1bmN0aW9uKCBuYW1lLCB0eXBlICkge1xuXHRqUXVlcnkuZWFjaCgge1xuXHRcdHBhZGRpbmc6IFwiaW5uZXJcIiArIG5hbWUsXG5cdFx0Y29udGVudDogdHlwZSxcblx0XHRcIlwiOiBcIm91dGVyXCIgKyBuYW1lXG5cdH0sIGZ1bmN0aW9uKCBkZWZhdWx0RXh0cmEsIGZ1bmNOYW1lICkge1xuXG5cdFx0Ly8gTWFyZ2luIGlzIG9ubHkgZm9yIG91dGVySGVpZ2h0LCBvdXRlcldpZHRoXG5cdFx0alF1ZXJ5LmZuWyBmdW5jTmFtZSBdID0gZnVuY3Rpb24oIG1hcmdpbiwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgY2hhaW5hYmxlID0gYXJndW1lbnRzLmxlbmd0aCAmJiAoIGRlZmF1bHRFeHRyYSB8fCB0eXBlb2YgbWFyZ2luICE9PSBcImJvb2xlYW5cIiApLFxuXHRcdFx0XHRleHRyYSA9IGRlZmF1bHRFeHRyYSB8fCAoIG1hcmdpbiA9PT0gdHJ1ZSB8fCB2YWx1ZSA9PT0gdHJ1ZSA/IFwibWFyZ2luXCIgOiBcImJvcmRlclwiICk7XG5cblx0XHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIGRvYztcblxuXHRcdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdFx0XHQvLyAkKCB3aW5kb3cgKS5vdXRlcldpZHRoL0hlaWdodCByZXR1cm4gdy9oIGluY2x1ZGluZyBzY3JvbGxiYXJzIChnaC0xNzI5KVxuXHRcdFx0XHRcdHJldHVybiBmdW5jTmFtZS5pbmRleE9mKCBcIm91dGVyXCIgKSA9PT0gMCA/XG5cdFx0XHRcdFx0XHRlbGVtWyBcImlubmVyXCIgKyBuYW1lIF0gOlxuXHRcdFx0XHRcdFx0ZWxlbS5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnRbIFwiY2xpZW50XCIgKyBuYW1lIF07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBHZXQgZG9jdW1lbnQgd2lkdGggb3IgaGVpZ2h0XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRkb2MgPSBlbGVtLmRvY3VtZW50RWxlbWVudDtcblxuXHRcdFx0XHRcdC8vIEVpdGhlciBzY3JvbGxbV2lkdGgvSGVpZ2h0XSBvciBvZmZzZXRbV2lkdGgvSGVpZ2h0XSBvciBjbGllbnRbV2lkdGgvSGVpZ2h0XSxcblx0XHRcdFx0XHQvLyB3aGljaGV2ZXIgaXMgZ3JlYXRlc3Rcblx0XHRcdFx0XHRyZXR1cm4gTWF0aC5tYXgoXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwic2Nyb2xsXCIgKyBuYW1lIF0sIGRvY1sgXCJzY3JvbGxcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJvZmZzZXRcIiArIG5hbWUgXSwgZG9jWyBcIm9mZnNldFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZG9jWyBcImNsaWVudFwiICsgbmFtZSBdXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblxuXHRcdFx0XHRcdC8vIEdldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnQsIHJlcXVlc3RpbmcgYnV0IG5vdCBmb3JjaW5nIHBhcnNlRmxvYXRcblx0XHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCB0eXBlLCBleHRyYSApIDpcblxuXHRcdFx0XHRcdC8vIFNldCB3aWR0aCBvciBoZWlnaHQgb24gdGhlIGVsZW1lbnRcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHR5cGUsIHZhbHVlLCBleHRyYSApO1xuXHRcdFx0fSwgdHlwZSwgY2hhaW5hYmxlID8gbWFyZ2luIDogdW5kZWZpbmVkLCBjaGFpbmFibGUgKTtcblx0XHR9O1xuXHR9ICk7XG59ICk7XG5cblxualF1ZXJ5LmVhY2goIFtcblx0XCJhamF4U3RhcnRcIixcblx0XCJhamF4U3RvcFwiLFxuXHRcImFqYXhDb21wbGV0ZVwiLFxuXHRcImFqYXhFcnJvclwiLFxuXHRcImFqYXhTdWNjZXNzXCIsXG5cdFwiYWpheFNlbmRcIlxuXSwgZnVuY3Rpb24oIF9pLCB0eXBlICkge1xuXHRqUXVlcnkuZm5bIHR5cGUgXSA9IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZSwgZm4gKTtcblx0fTtcbn0gKTtcblxuXG5cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdGJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBudWxsLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmJpbmQ6IGZ1bmN0aW9uKCB0eXBlcywgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub2ZmKCB0eXBlcywgbnVsbCwgZm4gKTtcblx0fSxcblxuXHRkZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZGF0YSwgZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5kZWxlZ2F0ZTogZnVuY3Rpb24oIHNlbGVjdG9yLCB0eXBlcywgZm4gKSB7XG5cblx0XHQvLyAoIG5hbWVzcGFjZSApIG9yICggc2VsZWN0b3IsIHR5cGVzIFssIGZuXSApXG5cdFx0cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGggPT09IDEgP1xuXHRcdFx0dGhpcy5vZmYoIHNlbGVjdG9yLCBcIioqXCIgKSA6XG5cdFx0XHR0aGlzLm9mZiggdHlwZXMsIHNlbGVjdG9yIHx8IFwiKipcIiwgZm4gKTtcblx0fSxcblxuXHRob3ZlcjogZnVuY3Rpb24oIGZuT3ZlciwgZm5PdXQgKSB7XG5cdFx0cmV0dXJuIHRoaXNcblx0XHRcdC5vbiggXCJtb3VzZWVudGVyXCIsIGZuT3ZlciApXG5cdFx0XHQub24oIFwibW91c2VsZWF2ZVwiLCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaChcblx0KCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fVxuKTtcblxuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG4vLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1Bcbi8vIFJlcXVpcmUgdGhhdCB0aGUgXCJ3aGl0ZXNwYWNlIHJ1blwiIHN0YXJ0cyBmcm9tIGEgbm9uLXdoaXRlc3BhY2Vcbi8vIHRvIGF2b2lkIE8oTl4yKSBiZWhhdmlvciB3aGVuIHRoZSBlbmdpbmUgd291bGQgdHJ5IG1hdGNoaW5nIFwiXFxzKyRcIiBhdCBlYWNoIHNwYWNlIHBvc2l0aW9uLlxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8KFteXFxzXFx1RkVGRlxceEEwXSlbXFxzXFx1RkVGRlxceEEwXSskL2c7XG5cbi8vIEJpbmQgYSBmdW5jdGlvbiB0byBhIGNvbnRleHQsIG9wdGlvbmFsbHkgcGFydGlhbGx5IGFwcGx5aW5nIGFueVxuLy8gYXJndW1lbnRzLlxuLy8galF1ZXJ5LnByb3h5IGlzIGRlcHJlY2F0ZWQgdG8gcHJvbW90ZSBzdGFuZGFyZHMgKHNwZWNpZmljYWxseSBGdW5jdGlvbiNiaW5kKVxuLy8gSG93ZXZlciwgaXQgaXMgbm90IHNsYXRlZCBmb3IgcmVtb3ZhbCBhbnkgdGltZSBzb29uXG5qUXVlcnkucHJveHkgPSBmdW5jdGlvbiggZm4sIGNvbnRleHQgKSB7XG5cdHZhciB0bXAsIGFyZ3MsIHByb3h5O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0dG1wID0gZm5bIGNvbnRleHQgXTtcblx0XHRjb250ZXh0ID0gZm47XG5cdFx0Zm4gPSB0bXA7XG5cdH1cblxuXHQvLyBRdWljayBjaGVjayB0byBkZXRlcm1pbmUgaWYgdGFyZ2V0IGlzIGNhbGxhYmxlLCBpbiB0aGUgc3BlY1xuXHQvLyB0aGlzIHRocm93cyBhIFR5cGVFcnJvciwgYnV0IHdlIHdpbGwganVzdCByZXR1cm4gdW5kZWZpbmVkLlxuXHRpZiAoICFpc0Z1bmN0aW9uKCBmbiApICkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvLyBTaW11bGF0ZWQgYmluZFxuXHRhcmdzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzLCAyICk7XG5cdHByb3h5ID0gZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGZuLmFwcGx5KCBjb250ZXh0IHx8IHRoaXMsIGFyZ3MuY29uY2F0KCBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSApICk7XG5cdH07XG5cblx0Ly8gU2V0IHRoZSBndWlkIG9mIHVuaXF1ZSBoYW5kbGVyIHRvIHRoZSBzYW1lIG9mIG9yaWdpbmFsIGhhbmRsZXIsIHNvIGl0IGNhbiBiZSByZW1vdmVkXG5cdHByb3h5Lmd1aWQgPSBmbi5ndWlkID0gZm4uZ3VpZCB8fCBqUXVlcnkuZ3VpZCsrO1xuXG5cdHJldHVybiBwcm94eTtcbn07XG5cbmpRdWVyeS5ob2xkUmVhZHkgPSBmdW5jdGlvbiggaG9sZCApIHtcblx0aWYgKCBob2xkICkge1xuXHRcdGpRdWVyeS5yZWFkeVdhaXQrKztcblx0fSBlbHNlIHtcblx0XHRqUXVlcnkucmVhZHkoIHRydWUgKTtcblx0fVxufTtcbmpRdWVyeS5pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbmpRdWVyeS5wYXJzZUpTT04gPSBKU09OLnBhcnNlO1xualF1ZXJ5Lm5vZGVOYW1lID0gbm9kZU5hbWU7XG5qUXVlcnkuaXNGdW5jdGlvbiA9IGlzRnVuY3Rpb247XG5qUXVlcnkuaXNXaW5kb3cgPSBpc1dpbmRvdztcbmpRdWVyeS5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG5qUXVlcnkudHlwZSA9IHRvVHlwZTtcblxualF1ZXJ5Lm5vdyA9IERhdGUubm93O1xuXG5qUXVlcnkuaXNOdW1lcmljID0gZnVuY3Rpb24oIG9iaiApIHtcblxuXHQvLyBBcyBvZiBqUXVlcnkgMy4wLCBpc051bWVyaWMgaXMgbGltaXRlZCB0b1xuXHQvLyBzdHJpbmdzIGFuZCBudW1iZXJzIChwcmltaXRpdmVzIG9yIG9iamVjdHMpXG5cdC8vIHRoYXQgY2FuIGJlIGNvZXJjZWQgdG8gZmluaXRlIG51bWJlcnMgKGdoLTI2NjIpXG5cdHZhciB0eXBlID0galF1ZXJ5LnR5cGUoIG9iaiApO1xuXHRyZXR1cm4gKCB0eXBlID09PSBcIm51bWJlclwiIHx8IHR5cGUgPT09IFwic3RyaW5nXCIgKSAmJlxuXG5cdFx0Ly8gcGFyc2VGbG9hdCBOYU5zIG51bWVyaWMtY2FzdCBmYWxzZSBwb3NpdGl2ZXMgKFwiXCIpXG5cdFx0Ly8gLi4uYnV0IG1pc2ludGVycHJldHMgbGVhZGluZy1udW1iZXIgc3RyaW5ncywgcGFydGljdWxhcmx5IGhleCBsaXRlcmFscyAoXCIweC4uLlwiKVxuXHRcdC8vIHN1YnRyYWN0aW9uIGZvcmNlcyBpbmZpbml0aWVzIHRvIE5hTlxuXHRcdCFpc05hTiggb2JqIC0gcGFyc2VGbG9hdCggb2JqICkgKTtcbn07XG5cbmpRdWVyeS50cmltID0gZnVuY3Rpb24oIHRleHQgKSB7XG5cdHJldHVybiB0ZXh0ID09IG51bGwgP1xuXHRcdFwiXCIgOlxuXHRcdCggdGV4dCArIFwiXCIgKS5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICk7XG59O1xuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICh0cmFjLTcxMDIjY29tbWVudDoxMCwgaHR0cHM6Ly9naXRodWIuY29tL2pxdWVyeS9qcXVlcnkvcHVsbC81NTcpXG4vLyBhbmQgQ29tbW9uSlMgZm9yIGJyb3dzZXIgZW11bGF0b3JzICh0cmFjLTEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsICIvKiBQcmlzbUpTIDEuMjguMFxuaHR0cHM6Ly9wcmlzbWpzLmNvbS9kb3dubG9hZC5odG1sI3RoZW1lcz1wcmlzbS10b21vcnJvdyZsYW5ndWFnZXM9bWFya3VwK2NzcytjbGlrZStqYXZhc2NyaXB0K2FiYXArYWJuZithY3Rpb25zY3JpcHQrYWRhK2FnZGErYWwrYW50bHI0K2FwYWNoZWNvbmYrYXBleCthcGwrYXBwbGVzY3JpcHQrYXFsK2FyZHVpbm8rYXJmZithcm1hc20rYXJ0dXJvK2FzY2lpZG9jK2FzcG5ldCthc202NTAyK2FzbWF0bWVsK2F1dG9ob3RrZXkrYXV0b2l0K2F2aXN5bnRoK2F2cm8taWRsK2F3aytiYXNoK2Jhc2ljK2JhdGNoK2JiY29kZStiaWNlcCtiaXJiK2Jpc29uK2JuZiticmFpbmZ1Y2srYnJpZ2h0c2NyaXB0K2Jybytic2wrYytjc2hhcnArY3BwK2Nmc2NyaXB0K2NoYWlzY3JpcHQrY2lsK2Nsb2p1cmUrY21ha2UrY29ib2wrY29mZmVlc2NyaXB0K2NvbmN1cm5hcytjc3ArY29va2xhbmcrY29xK2NyeXN0YWwrY3NzLWV4dHJhcytjc3YrY3VlK2N5cGhlcitkK2RhcnQrZGF0YXdlYXZlK2RheCtkaGFsbCtkaWZmK2RqYW5nbytkbnMtem9uZS1maWxlK2RvY2tlcitkb3QrZWJuZitlZGl0b3Jjb25maWcrZWlmZmVsK2VqcytlbGl4aXIrZWxtK2V0bHVhK2VyYitlcmxhbmcrZXhjZWwtZm9ybXVsYStmc2hhcnArZmFjdG9yK2ZhbHNlK2ZpcmVzdG9yZS1zZWN1cml0eS1ydWxlcytmbG93K2ZvcnRyYW4rZnRsK2dtbCtnYXArZ2NvZGUrZ2RzY3JpcHQrZ2VkY29tK2dldHRleHQrZ2hlcmtpbitnaXQrZ2xzbCtnbitsaW5rZXItc2NyaXB0K2dvK2dvLW1vZHVsZStncmFkbGUrZ3JhcGhxbCtncm9vdnkraGFtbCtoYW5kbGViYXJzK2hhc2tlbGwraGF4ZStoY2wraGxzbCtob29uK2h0dHAraHBrcCtoc3RzK2ljaGlnb2phbStpY29uK2ljdS1tZXNzYWdlLWZvcm1hdCtpZHJpcytpZ25vcmUraW5mb3JtNytpbmkraW8raitqYXZhK2phdmFkb2MramF2YWRvY2xpa2UramF2YXN0YWNrdHJhY2UramV4bCtqb2xpZStqcStqc2RvYytqcy1leHRyYXMranNvbitqc29uNStqc29ucCtqc3N0YWNrdHJhY2UranMtdGVtcGxhdGVzK2p1bGlhK2tlZXBhbGl2ZWQra2V5bWFuK2tvdGxpbitrdW1pcitrdXN0bytsYXRleCtsYXR0ZStsZXNzK2xpbHlwb25kK2xpcXVpZCtsaXNwK2xpdmVzY3JpcHQrbGx2bStsb2crbG9sY29kZStsdWErbWFnbWErbWFrZWZpbGUrbWFya2Rvd24rbWFya3VwLXRlbXBsYXRpbmcrbWF0YSttYXRsYWIrbWF4c2NyaXB0K21lbCttZXJtYWlkK21pemFyK21vbmdvZGIrbW9ua2V5K21vb25zY3JpcHQrbjFxbCtuNGpzK25hbmQydGV0cmlzLWhkbCtuYW5pc2NyaXB0K25hc20rbmVvbituZXZvZCtuZ2lueCtuaW0rbml4K25zaXMrb2JqZWN0aXZlYytvY2FtbCtvZGluK29wZW5jbCtvcGVucWFzbStveitwYXJpZ3ArcGFyc2VyK3Bhc2NhbCtwYXNjYWxpZ28rcHNsK3BjYXhpcytwZW9wbGVjb2RlK3BlcmwrcGhwK3BocGRvYytwaHAtZXh0cmFzK3BsYW50LXVtbCtwbHNxbCtwb3dlcnF1ZXJ5K3Bvd2Vyc2hlbGwrcHJvY2Vzc2luZytwcm9sb2crcHJvbXFsK3Byb3BlcnRpZXMrcHJvdG9idWYrcHVnK3B1cHBldCtwdXJlK3B1cmViYXNpYytwdXJlc2NyaXB0K3B5dGhvbitxc2hhcnArcStxbWwrcW9yZStyK3JhY2tldCtjc2h0bWwranN4K3RzeCtyZWFzb24rcmVnZXgrcmVnbytyZW5weStyZXNjcmlwdCtyZXN0K3JpcCtyb2JvY29uZityb2JvdGZyYW1ld29yaytydWJ5K3J1c3Qrc2FzK3Nhc3Mrc2NzcytzY2FsYStzY2hlbWUrc2hlbGwtc2Vzc2lvbitzbWFsaStzbWFsbHRhbGsrc21hcnR5K3NtbCtzb2xpZGl0eStzb2x1dGlvbi1maWxlK3NveStzcGFycWwrc3BsdW5rLXNwbCtzcWYrc3FsK3NxdWlycmVsK3N0YW4rc3RhdGEraWVjc3Qrc3R5bHVzK3N1cGVyY29sbGlkZXIrc3dpZnQrc3lzdGVtZCt0NC10ZW1wbGF0aW5nK3Q0LWNzK3Q0LXZiK3RhcCt0Y2wrdHQyK3RleHRpbGUrdG9tbCt0cmVtb3IrdHVydGxlK3R3aWcrdHlwZXNjcmlwdCt0eXBvc2NyaXB0K3VucmVhbHNjcmlwdCt1b3Jhem9yK3VyaSt2K3ZhbGErdmJuZXQrdmVsb2NpdHkrdmVyaWxvZyt2aGRsK3ZpbSt2aXN1YWwtYmFzaWMrd2FycHNjcmlwdCt3YXNtK3dlYi1pZGwrd2dzbCt3aWtpK3dvbGZyYW0rd3Jlbit4ZW9yYSt4bWwtZG9jK3hvam8reHF1ZXJ5K3lhbWwreWFuZyt6aWcmcGx1Z2lucz1saW5lLW51bWJlcnMrZmlsZS1oaWdobGlnaHQgKi9cbi8vLyA8cmVmZXJlbmNlIGxpYj1cIldlYldvcmtlclwiLz5cblxudmFyIF9zZWxmID0gKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKVxuXHQ/IHdpbmRvdyAgIC8vIGlmIGluIGJyb3dzZXJcblx0OiAoXG5cdFx0KHR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZSAhPT0gJ3VuZGVmaW5lZCcgJiYgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlKVxuXHRcdFx0PyBzZWxmIC8vIGlmIGluIHdvcmtlclxuXHRcdFx0OiB7fSAgIC8vIGlmIGluIG5vZGUganNcblx0KTtcblxuLyoqXG4gKiBQcmlzbTogTGlnaHR3ZWlnaHQsIHJvYnVzdCwgZWxlZ2FudCBzeW50YXggaGlnaGxpZ2h0aW5nXG4gKlxuICogQGxpY2Vuc2UgTUlUIDxodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL01JVD5cbiAqIEBhdXRob3IgTGVhIFZlcm91IDxodHRwczovL2xlYS52ZXJvdS5tZT5cbiAqIEBuYW1lc3BhY2VcbiAqIEBwdWJsaWNcbiAqL1xudmFyIFByaXNtID0gKGZ1bmN0aW9uIChfc2VsZikge1xuXG5cdC8vIFByaXZhdGUgaGVscGVyIHZhcnNcblx0dmFyIGxhbmcgPSAvKD86XnxcXHMpbGFuZyg/OnVhZ2UpPy0oW1xcdy1dKykoPz1cXHN8JCkvaTtcblx0dmFyIHVuaXF1ZUlkID0gMDtcblxuXHQvLyBUaGUgZ3JhbW1hciBvYmplY3QgZm9yIHBsYWludGV4dFxuXHR2YXIgcGxhaW5UZXh0R3JhbW1hciA9IHt9O1xuXG5cblx0dmFyIF8gPSB7XG5cdFx0LyoqXG5cdFx0ICogQnkgZGVmYXVsdCwgUHJpc20gd2lsbCBhdHRlbXB0IHRvIGhpZ2hsaWdodCBhbGwgY29kZSBlbGVtZW50cyAoYnkgY2FsbGluZyB7QGxpbmsgUHJpc20uaGlnaGxpZ2h0QWxsfSkgb24gdGhlXG5cdFx0ICogY3VycmVudCBwYWdlIGFmdGVyIHRoZSBwYWdlIGZpbmlzaGVkIGxvYWRpbmcuIFRoaXMgbWlnaHQgYmUgYSBwcm9ibGVtIGlmIGUuZy4geW91IHdhbnRlZCB0byBhc3luY2hyb25vdXNseSBsb2FkXG5cdFx0ICogYWRkaXRpb25hbCBsYW5ndWFnZXMgb3IgcGx1Z2lucyB5b3Vyc2VsZi5cblx0XHQgKlxuXHRcdCAqIEJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBgdHJ1ZWAsIFByaXNtIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgaGlnaGxpZ2h0IGFsbCBjb2RlIGVsZW1lbnRzIG9uIHRoZSBwYWdlLlxuXHRcdCAqXG5cdFx0ICogWW91IG9idmlvdXNseSBoYXZlIHRvIGNoYW5nZSB0aGlzIHZhbHVlIGJlZm9yZSB0aGUgYXV0b21hdGljIGhpZ2hsaWdodGluZyBzdGFydGVkLiBUbyBkbyB0aGlzLCB5b3UgY2FuIGFkZCBhblxuXHRcdCAqIGVtcHR5IFByaXNtIG9iamVjdCBpbnRvIHRoZSBnbG9iYWwgc2NvcGUgYmVmb3JlIGxvYWRpbmcgdGhlIFByaXNtIHNjcmlwdCBsaWtlIHRoaXM6XG5cdFx0ICpcblx0XHQgKiBgYGBqc1xuXHRcdCAqIHdpbmRvdy5QcmlzbSA9IHdpbmRvdy5QcmlzbSB8fCB7fTtcblx0XHQgKiBQcmlzbS5tYW51YWwgPSB0cnVlO1xuXHRcdCAqIC8vIGFkZCBhIG5ldyA8c2NyaXB0PiB0byBsb2FkIFByaXNtJ3Mgc2NyaXB0XG5cdFx0ICogYGBgXG5cdFx0ICpcblx0XHQgKiBAZGVmYXVsdCBmYWxzZVxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRtYW51YWw6IF9zZWxmLlByaXNtICYmIF9zZWxmLlByaXNtLm1hbnVhbCxcblx0XHQvKipcblx0XHQgKiBCeSBkZWZhdWx0LCBpZiBQcmlzbSBpcyBpbiBhIHdlYiB3b3JrZXIsIGl0IGFzc3VtZXMgdGhhdCBpdCBpcyBpbiBhIHdvcmtlciBpdCBjcmVhdGVkIGl0c2VsZiwgc28gaXQgdXNlc1xuXHRcdCAqIGBhZGRFdmVudExpc3RlbmVyYCB0byBjb21tdW5pY2F0ZSB3aXRoIGl0cyBwYXJlbnQgaW5zdGFuY2UuIEhvd2V2ZXIsIGlmIHlvdSdyZSB1c2luZyBQcmlzbSBtYW51YWxseSBpbiB5b3VyXG5cdFx0ICogb3duIHdvcmtlciwgeW91IGRvbid0IHdhbnQgaXQgdG8gZG8gdGhpcy5cblx0XHQgKlxuXHRcdCAqIEJ5IHNldHRpbmcgdGhpcyB2YWx1ZSB0byBgdHJ1ZWAsIFByaXNtIHdpbGwgbm90IGFkZCBpdHMgb3duIGxpc3RlbmVycyB0byB0aGUgd29ya2VyLlxuXHRcdCAqXG5cdFx0ICogWW91IG9idmlvdXNseSBoYXZlIHRvIGNoYW5nZSB0aGlzIHZhbHVlIGJlZm9yZSBQcmlzbSBleGVjdXRlcy4gVG8gZG8gdGhpcywgeW91IGNhbiBhZGQgYW5cblx0XHQgKiBlbXB0eSBQcmlzbSBvYmplY3QgaW50byB0aGUgZ2xvYmFsIHNjb3BlIGJlZm9yZSBsb2FkaW5nIHRoZSBQcmlzbSBzY3JpcHQgbGlrZSB0aGlzOlxuXHRcdCAqXG5cdFx0ICogYGBganNcblx0XHQgKiB3aW5kb3cuUHJpc20gPSB3aW5kb3cuUHJpc20gfHwge307XG5cdFx0ICogUHJpc20uZGlzYWJsZVdvcmtlck1lc3NhZ2VIYW5kbGVyID0gdHJ1ZTtcblx0XHQgKiAvLyBMb2FkIFByaXNtJ3Mgc2NyaXB0XG5cdFx0ICogYGBgXG5cdFx0ICpcblx0XHQgKiBAZGVmYXVsdCBmYWxzZVxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRkaXNhYmxlV29ya2VyTWVzc2FnZUhhbmRsZXI6IF9zZWxmLlByaXNtICYmIF9zZWxmLlByaXNtLmRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcixcblxuXHRcdC8qKlxuXHRcdCAqIEEgbmFtZXNwYWNlIGZvciB1dGlsaXR5IG1ldGhvZHMuXG5cdFx0ICpcblx0XHQgKiBBbGwgZnVuY3Rpb24gaW4gdGhpcyBuYW1lc3BhY2UgdGhhdCBhcmUgbm90IGV4cGxpY2l0bHkgbWFya2VkIGFzIF9wdWJsaWNfIGFyZSBmb3IgX19pbnRlcm5hbCB1c2Ugb25seV9fIGFuZCBtYXlcblx0XHQgKiBjaGFuZ2Ugb3IgZGlzYXBwZWFyIGF0IGFueSB0aW1lLlxuXHRcdCAqXG5cdFx0ICogQG5hbWVzcGFjZVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqL1xuXHRcdHV0aWw6IHtcblx0XHRcdGVuY29kZTogZnVuY3Rpb24gZW5jb2RlKHRva2Vucykge1xuXHRcdFx0XHRpZiAodG9rZW5zIGluc3RhbmNlb2YgVG9rZW4pIHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFRva2VuKHRva2Vucy50eXBlLCBlbmNvZGUodG9rZW5zLmNvbnRlbnQpLCB0b2tlbnMuYWxpYXMpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodG9rZW5zKSkge1xuXHRcdFx0XHRcdHJldHVybiB0b2tlbnMubWFwKGVuY29kZSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRva2Vucy5yZXBsYWNlKC8mL2csICcmYW1wOycpLnJlcGxhY2UoLzwvZywgJyZsdDsnKS5yZXBsYWNlKC9cXHUwMGEwL2csICcgJyk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgdHlwZSBvZiB0aGUgZ2l2ZW4gdmFsdWUuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHthbnl9IG9cblx0XHRcdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdFx0XHQgKiBAZXhhbXBsZVxuXHRcdFx0ICogdHlwZShudWxsKSAgICAgID09PSAnTnVsbCdcblx0XHRcdCAqIHR5cGUodW5kZWZpbmVkKSA9PT0gJ1VuZGVmaW5lZCdcblx0XHRcdCAqIHR5cGUoMTIzKSAgICAgICA9PT0gJ051bWJlcidcblx0XHRcdCAqIHR5cGUoJ2ZvbycpICAgICA9PT0gJ1N0cmluZydcblx0XHRcdCAqIHR5cGUodHJ1ZSkgICAgICA9PT0gJ0Jvb2xlYW4nXG5cdFx0XHQgKiB0eXBlKFsxLCAyXSkgICAgPT09ICdBcnJheSdcblx0XHRcdCAqIHR5cGUoe30pICAgICAgICA9PT0gJ09iamVjdCdcblx0XHRcdCAqIHR5cGUoU3RyaW5nKSAgICA9PT0gJ0Z1bmN0aW9uJ1xuXHRcdFx0ICogdHlwZSgvYWJjKy8pICAgID09PSAnUmVnRXhwJ1xuXHRcdFx0ICovXG5cdFx0XHR0eXBlOiBmdW5jdGlvbiAobykge1xuXHRcdFx0XHRyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNsaWNlKDgsIC0xKTtcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogUmV0dXJucyBhIHVuaXF1ZSBudW1iZXIgZm9yIHRoZSBnaXZlbiBvYmplY3QuIExhdGVyIGNhbGxzIHdpbGwgc3RpbGwgcmV0dXJuIHRoZSBzYW1lIG51bWJlci5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdH0gb2JqXG5cdFx0XHQgKiBAcmV0dXJucyB7bnVtYmVyfVxuXHRcdFx0ICovXG5cdFx0XHRvYmpJZDogZnVuY3Rpb24gKG9iaikge1xuXHRcdFx0XHRpZiAoIW9ialsnX19pZCddKSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgJ19faWQnLCB7IHZhbHVlOiArK3VuaXF1ZUlkIH0pO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBvYmpbJ19faWQnXTtcblx0XHRcdH0sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQ3JlYXRlcyBhIGRlZXAgY2xvbmUgb2YgdGhlIGdpdmVuIG9iamVjdC5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGUgbWFpbiBpbnRlbmRlZCB1c2Ugb2YgdGhpcyBmdW5jdGlvbiBpcyB0byBjbG9uZSBsYW5ndWFnZSBkZWZpbml0aW9ucy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge1R9IG9cblx0XHRcdCAqIEBwYXJhbSB7UmVjb3JkPG51bWJlciwgYW55Pn0gW3Zpc2l0ZWRdXG5cdFx0XHQgKiBAcmV0dXJucyB7VH1cblx0XHRcdCAqIEB0ZW1wbGF0ZSBUXG5cdFx0XHQgKi9cblx0XHRcdGNsb25lOiBmdW5jdGlvbiBkZWVwQ2xvbmUobywgdmlzaXRlZCkge1xuXHRcdFx0XHR2aXNpdGVkID0gdmlzaXRlZCB8fCB7fTtcblxuXHRcdFx0XHR2YXIgY2xvbmU7IHZhciBpZDtcblx0XHRcdFx0c3dpdGNoIChfLnV0aWwudHlwZShvKSkge1xuXHRcdFx0XHRcdGNhc2UgJ09iamVjdCc6XG5cdFx0XHRcdFx0XHRpZCA9IF8udXRpbC5vYmpJZChvKTtcblx0XHRcdFx0XHRcdGlmICh2aXNpdGVkW2lkXSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmlzaXRlZFtpZF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjbG9uZSA9IC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgYW55Pn0gKi8gKHt9KTtcblx0XHRcdFx0XHRcdHZpc2l0ZWRbaWRdID0gY2xvbmU7XG5cblx0XHRcdFx0XHRcdGZvciAodmFyIGtleSBpbiBvKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvLmhhc093blByb3BlcnR5KGtleSkpIHtcblx0XHRcdFx0XHRcdFx0XHRjbG9uZVtrZXldID0gZGVlcENsb25lKG9ba2V5XSwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIC8qKiBAdHlwZSB7YW55fSAqLyAoY2xvbmUpO1xuXG5cdFx0XHRcdFx0Y2FzZSAnQXJyYXknOlxuXHRcdFx0XHRcdFx0aWQgPSBfLnV0aWwub2JqSWQobyk7XG5cdFx0XHRcdFx0XHRpZiAodmlzaXRlZFtpZF0pIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHZpc2l0ZWRbaWRdO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Y2xvbmUgPSBbXTtcblx0XHRcdFx0XHRcdHZpc2l0ZWRbaWRdID0gY2xvbmU7XG5cblx0XHRcdFx0XHRcdCgvKiogQHR5cGUge0FycmF5fSAqLygvKiogQHR5cGUge2FueX0gKi8obykpKS5mb3JFYWNoKGZ1bmN0aW9uICh2LCBpKSB7XG5cdFx0XHRcdFx0XHRcdGNsb25lW2ldID0gZGVlcENsb25lKHYsIHZpc2l0ZWQpO1xuXHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdHJldHVybiAvKiogQHR5cGUge2FueX0gKi8gKGNsb25lKTtcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm4gbztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBQcmlzbSBsYW5ndWFnZSBvZiB0aGUgZ2l2ZW4gZWxlbWVudCBzZXQgYnkgYSBgbGFuZ3VhZ2UteHh4eGAgb3IgYGxhbmcteHh4eGAgY2xhc3MuXG5cdFx0XHQgKlxuXHRcdFx0ICogSWYgbm8gbGFuZ3VhZ2UgaXMgc2V0IGZvciB0aGUgZWxlbWVudCBvciB0aGUgZWxlbWVudCBpcyBgbnVsbGAgb3IgYHVuZGVmaW5lZGAsIGBub25lYCB3aWxsIGJlIHJldHVybmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHRcdFx0ICogQHJldHVybnMge3N0cmluZ31cblx0XHRcdCAqL1xuXHRcdFx0Z2V0TGFuZ3VhZ2U6IGZ1bmN0aW9uIChlbGVtZW50KSB7XG5cdFx0XHRcdHdoaWxlIChlbGVtZW50KSB7XG5cdFx0XHRcdFx0dmFyIG0gPSBsYW5nLmV4ZWMoZWxlbWVudC5jbGFzc05hbWUpO1xuXHRcdFx0XHRcdGlmIChtKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gbVsxXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAnbm9uZSc7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFNldHMgdGhlIFByaXNtIGBsYW5ndWFnZS14eHh4YCBjbGFzcyBvZiB0aGUgZ2l2ZW4gZWxlbWVudC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHRcdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0XHQgKi9cblx0XHRcdHNldExhbmd1YWdlOiBmdW5jdGlvbiAoZWxlbWVudCwgbGFuZ3VhZ2UpIHtcblx0XHRcdFx0Ly8gcmVtb3ZlIGFsbCBgbGFuZ3VhZ2UteHh4eGAgY2xhc3Nlc1xuXHRcdFx0XHQvLyAodGhpcyBtaWdodCBsZWF2ZSBiZWhpbmQgYSBsZWFkaW5nIHNwYWNlKVxuXHRcdFx0XHRlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoUmVnRXhwKGxhbmcsICdnaScpLCAnJyk7XG5cblx0XHRcdFx0Ly8gYWRkIHRoZSBuZXcgYGxhbmd1YWdlLXh4eHhgIGNsYXNzXG5cdFx0XHRcdC8vICh1c2luZyBgY2xhc3NMaXN0YCB3aWxsIGF1dG9tYXRpY2FsbHkgY2xlYW4gdXAgc3BhY2VzIGZvciB1cylcblx0XHRcdFx0ZWxlbWVudC5jbGFzc0xpc3QuYWRkKCdsYW5ndWFnZS0nICsgbGFuZ3VhZ2UpO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSZXR1cm5zIHRoZSBzY3JpcHQgZWxlbWVudCB0aGF0IGlzIGN1cnJlbnRseSBleGVjdXRpbmcuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyBkb2VzIF9fbm90X18gd29yayBmb3IgbGluZSBzY3JpcHQgZWxlbWVudC5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcmV0dXJucyB7SFRNTFNjcmlwdEVsZW1lbnQgfCBudWxsfVxuXHRcdFx0ICovXG5cdFx0XHRjdXJyZW50U2NyaXB0OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCdjdXJyZW50U2NyaXB0JyBpbiBkb2N1bWVudCAmJiAxIDwgMiAvKiBoYWNrIHRvIHRyaXAgVFMnIGZsb3cgYW5hbHlzaXMgKi8pIHtcblx0XHRcdFx0XHRyZXR1cm4gLyoqIEB0eXBlIHthbnl9ICovIChkb2N1bWVudC5jdXJyZW50U2NyaXB0KTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElFMTEgd29ya2Fyb3VuZFxuXHRcdFx0XHQvLyB3ZSdsbCBnZXQgdGhlIHNyYyBvZiB0aGUgY3VycmVudCBzY3JpcHQgYnkgcGFyc2luZyBJRTExJ3MgZXJyb3Igc3RhY2sgdHJhY2Vcblx0XHRcdFx0Ly8gdGhpcyB3aWxsIG5vdCB3b3JrIGZvciBpbmxpbmUgc2NyaXB0c1xuXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCk7XG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdC8vIEdldCBmaWxlIHNyYyB1cmwgZnJvbSBzdGFjay4gU3BlY2lmaWNhbGx5IHdvcmtzIHdpdGggdGhlIGZvcm1hdCBvZiBzdGFjayB0cmFjZXMgaW4gSUUuXG5cdFx0XHRcdFx0Ly8gQSBzdGFjayB3aWxsIGxvb2sgbGlrZSB0aGlzOlxuXHRcdFx0XHRcdC8vXG5cdFx0XHRcdFx0Ly8gRXJyb3Jcblx0XHRcdFx0XHQvLyAgICBhdCBfLnV0aWwuY3VycmVudFNjcmlwdCAoaHR0cDovL2xvY2FsaG9zdC9jb21wb25lbnRzL3ByaXNtLWNvcmUuanM6MTE5OjUpXG5cdFx0XHRcdFx0Ly8gICAgYXQgR2xvYmFsIGNvZGUgKGh0dHA6Ly9sb2NhbGhvc3QvY29tcG9uZW50cy9wcmlzbS1jb3JlLmpzOjYwNjoxKVxuXG5cdFx0XHRcdFx0dmFyIHNyYyA9ICgvYXQgW14oXFxyXFxuXSpcXCgoLiopOlteOl0rOlteOl0rXFwpJC9pLmV4ZWMoZXJyLnN0YWNrKSB8fCBbXSlbMV07XG5cdFx0XHRcdFx0aWYgKHNyYykge1xuXHRcdFx0XHRcdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7XG5cdFx0XHRcdFx0XHRmb3IgKHZhciBpIGluIHNjcmlwdHMpIHtcblx0XHRcdFx0XHRcdFx0aWYgKHNjcmlwdHNbaV0uc3JjID09IHNyYykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzY3JpcHRzW2ldO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIFJldHVybnMgd2hldGhlciBhIGdpdmVuIGNsYXNzIGlzIGFjdGl2ZSBmb3IgYGVsZW1lbnRgLlxuXHRcdFx0ICpcblx0XHRcdCAqIFRoZSBjbGFzcyBjYW4gYmUgYWN0aXZhdGVkIGlmIGBlbGVtZW50YCBvciBvbmUgb2YgaXRzIGFuY2VzdG9ycyBoYXMgdGhlIGdpdmVuIGNsYXNzIGFuZCBpdCBjYW4gYmUgZGVhY3RpdmF0ZWRcblx0XHRcdCAqIGlmIGBlbGVtZW50YCBvciBvbmUgb2YgaXRzIGFuY2VzdG9ycyBoYXMgdGhlIG5lZ2F0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gY2xhc3MuIFRoZSBfbmVnYXRlZCB2ZXJzaW9uXyBvZiB0aGVcblx0XHRcdCAqIGdpdmVuIGNsYXNzIGlzIGp1c3QgdGhlIGdpdmVuIGNsYXNzIHdpdGggYSBgbm8tYCBwcmVmaXguXG5cdFx0XHQgKlxuXHRcdFx0ICogV2hldGhlciB0aGUgY2xhc3MgaXMgYWN0aXZlIGlzIGRldGVybWluZWQgYnkgdGhlIGNsb3Nlc3QgYW5jZXN0b3Igb2YgYGVsZW1lbnRgICh3aGVyZSBgZWxlbWVudGAgaXRzZWxmIGlzXG5cdFx0XHQgKiBjbG9zZXN0IGFuY2VzdG9yKSB0aGF0IGhhcyB0aGUgZ2l2ZW4gY2xhc3Mgb3IgdGhlIG5lZ2F0ZWQgdmVyc2lvbiBvZiBpdC4gSWYgbmVpdGhlciBgZWxlbWVudGAgbm9yIGFueSBvZiBpdHNcblx0XHRcdCAqIGFuY2VzdG9ycyBoYXZlIHRoZSBnaXZlbiBjbGFzcyBvciB0aGUgbmVnYXRlZCB2ZXJzaW9uIG9mIGl0LCB0aGVuIHRoZSBkZWZhdWx0IGFjdGl2YXRpb24gd2lsbCBiZSByZXR1cm5lZC5cblx0XHRcdCAqXG5cdFx0XHQgKiBJbiB0aGUgcGFyYWRveGljYWwgc2l0dWF0aW9uIHdoZXJlIHRoZSBjbG9zZXN0IGFuY2VzdG9yIGNvbnRhaW5zIF9fYm90aF9fIHRoZSBnaXZlbiBjbGFzcyBhbmQgdGhlIG5lZ2F0ZWRcblx0XHRcdCAqIHZlcnNpb24gb2YgaXQsIHRoZSBjbGFzcyBpcyBjb25zaWRlcmVkIGFjdGl2ZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnRcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBjbGFzc05hbWVcblx0XHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2RlZmF1bHRBY3RpdmF0aW9uPWZhbHNlXVxuXHRcdFx0ICogQHJldHVybnMge2Jvb2xlYW59XG5cdFx0XHQgKi9cblx0XHRcdGlzQWN0aXZlOiBmdW5jdGlvbiAoZWxlbWVudCwgY2xhc3NOYW1lLCBkZWZhdWx0QWN0aXZhdGlvbikge1xuXHRcdFx0XHR2YXIgbm8gPSAnbm8tJyArIGNsYXNzTmFtZTtcblxuXHRcdFx0XHR3aGlsZSAoZWxlbWVudCkge1xuXHRcdFx0XHRcdHZhciBjbGFzc0xpc3QgPSBlbGVtZW50LmNsYXNzTGlzdDtcblx0XHRcdFx0XHRpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSkpIHtcblx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKG5vKSkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRlbGVtZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiAhIWRlZmF1bHRBY3RpdmF0aW9uO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBUaGlzIG5hbWVzcGFjZSBjb250YWlucyBhbGwgY3VycmVudGx5IGxvYWRlZCBsYW5ndWFnZXMgYW5kIHRoZSBzb21lIGhlbHBlciBmdW5jdGlvbnMgdG8gY3JlYXRlIGFuZCBtb2RpZnkgbGFuZ3VhZ2VzLlxuXHRcdCAqXG5cdFx0ICogQG5hbWVzcGFjZVxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRsYW5ndWFnZXM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogVGhlIGdyYW1tYXIgZm9yIHBsYWluLCB1bmZvcm1hdHRlZCB0ZXh0LlxuXHRcdFx0ICovXG5cdFx0XHRwbGFpbjogcGxhaW5UZXh0R3JhbW1hcixcblx0XHRcdHBsYWludGV4dDogcGxhaW5UZXh0R3JhbW1hcixcblx0XHRcdHRleHQ6IHBsYWluVGV4dEdyYW1tYXIsXG5cdFx0XHR0eHQ6IHBsYWluVGV4dEdyYW1tYXIsXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiB0aGUgbGFuZ3VhZ2Ugd2l0aCB0aGUgZ2l2ZW4gaWQgYW5kIGFwcGVuZHMgdGhlIGdpdmVuIHRva2Vucy5cblx0XHRcdCAqXG5cdFx0XHQgKiBJZiBhIHRva2VuIGluIGByZWRlZmAgYWxzbyBhcHBlYXJzIGluIHRoZSBjb3BpZWQgbGFuZ3VhZ2UsIHRoZW4gdGhlIGV4aXN0aW5nIHRva2VuIGluIHRoZSBjb3BpZWQgbGFuZ3VhZ2Vcblx0XHRcdCAqIHdpbGwgYmUgb3ZlcndyaXR0ZW4gYXQgaXRzIG9yaWdpbmFsIHBvc2l0aW9uLlxuXHRcdFx0ICpcblx0XHRcdCAqICMjIEJlc3QgcHJhY3RpY2VzXG5cdFx0XHQgKlxuXHRcdFx0ICogU2luY2UgdGhlIHBvc2l0aW9uIG9mIG92ZXJ3cml0aW5nIHRva2VucyAodG9rZW4gaW4gYHJlZGVmYCB0aGF0IG92ZXJ3cml0ZSB0b2tlbnMgaW4gdGhlIGNvcGllZCBsYW5ndWFnZSlcblx0XHRcdCAqIGRvZXNuJ3QgbWF0dGVyLCB0aGV5IGNhbiB0ZWNobmljYWxseSBiZSBpbiBhbnkgb3JkZXIuIEhvd2V2ZXIsIHRoaXMgY2FuIGJlIGNvbmZ1c2luZyB0byBvdGhlcnMgdGhhdCB0cnlpbmcgdG9cblx0XHRcdCAqIHVuZGVyc3RhbmQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb24gYmVjYXVzZSwgbm9ybWFsbHksIHRoZSBvcmRlciBvZiB0b2tlbnMgbWF0dGVycyBpbiBQcmlzbSBncmFtbWFycy5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGVyZWZvcmUsIGl0IGlzIGVuY291cmFnZWQgdG8gb3JkZXIgb3ZlcndyaXRpbmcgdG9rZW5zIGFjY29yZGluZyB0byB0aGUgcG9zaXRpb25zIG9mIHRoZSBvdmVyd3JpdHRlbiB0b2tlbnMuXG5cdFx0XHQgKiBGdXJ0aGVybW9yZSwgYWxsIG5vbi1vdmVyd3JpdGluZyB0b2tlbnMgc2hvdWxkIGJlIHBsYWNlZCBhZnRlciB0aGUgb3ZlcndyaXRpbmcgb25lcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gaWQgVGhlIGlkIG9mIHRoZSBsYW5ndWFnZSB0byBleHRlbmQuIFRoaXMgaGFzIHRvIGJlIGEga2V5IGluIGBQcmlzbS5sYW5ndWFnZXNgLlxuXHRcdFx0ICogQHBhcmFtIHtHcmFtbWFyfSByZWRlZiBUaGUgbmV3IHRva2VucyB0byBhcHBlbmQuXG5cdFx0XHQgKiBAcmV0dXJucyB7R3JhbW1hcn0gVGhlIG5ldyBsYW5ndWFnZSBjcmVhdGVkLlxuXHRcdFx0ICogQHB1YmxpY1xuXHRcdFx0ICogQGV4YW1wbGVcblx0XHRcdCAqIFByaXNtLmxhbmd1YWdlc1snY3NzLXdpdGgtY29sb3JzJ10gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjc3MnLCB7XG5cdFx0XHQgKiAgICAgLy8gUHJpc20ubGFuZ3VhZ2VzLmNzcyBhbHJlYWR5IGhhcyBhICdjb21tZW50JyB0b2tlbiwgc28gdGhpcyB0b2tlbiB3aWxsIG92ZXJ3cml0ZSBDU1MnICdjb21tZW50JyB0b2tlblxuXHRcdFx0ICogICAgIC8vIGF0IGl0cyBvcmlnaW5hbCBwb3NpdGlvblxuXHRcdFx0ICogICAgICdjb21tZW50JzogeyAuLi4gfSxcblx0XHRcdCAqICAgICAvLyBDU1MgZG9lc24ndCBoYXZlIGEgJ2NvbG9yJyB0b2tlbiwgc28gdGhpcyB0b2tlbiB3aWxsIGJlIGFwcGVuZGVkXG5cdFx0XHQgKiAgICAgJ2NvbG9yJzogL1xcYig/OnJlZHxncmVlbnxibHVlKVxcYi9cblx0XHRcdCAqIH0pO1xuXHRcdFx0ICovXG5cdFx0XHRleHRlbmQ6IGZ1bmN0aW9uIChpZCwgcmVkZWYpIHtcblx0XHRcdFx0dmFyIGxhbmcgPSBfLnV0aWwuY2xvbmUoXy5sYW5ndWFnZXNbaWRdKTtcblxuXHRcdFx0XHRmb3IgKHZhciBrZXkgaW4gcmVkZWYpIHtcblx0XHRcdFx0XHRsYW5nW2tleV0gPSByZWRlZltrZXldO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIGxhbmc7XG5cdFx0XHR9LFxuXG5cdFx0XHQvKipcblx0XHRcdCAqIEluc2VydHMgdG9rZW5zIF9iZWZvcmVfIGFub3RoZXIgdG9rZW4gaW4gYSBsYW5ndWFnZSBkZWZpbml0aW9uIG9yIGFueSBvdGhlciBncmFtbWFyLlxuXHRcdFx0ICpcblx0XHRcdCAqICMjIFVzYWdlXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyBoZWxwZXIgbWV0aG9kIG1ha2VzIGl0IGVhc3kgdG8gbW9kaWZ5IGV4aXN0aW5nIGxhbmd1YWdlcy4gRm9yIGV4YW1wbGUsIHRoZSBDU1MgbGFuZ3VhZ2UgZGVmaW5pdGlvblxuXHRcdFx0ICogbm90IG9ubHkgZGVmaW5lcyBDU1MgaGlnaGxpZ2h0aW5nIGZvciBDU1MgZG9jdW1lbnRzLCBidXQgYWxzbyBuZWVkcyB0byBkZWZpbmUgaGlnaGxpZ2h0aW5nIGZvciBDU1MgZW1iZWRkZWRcblx0XHRcdCAqIGluIEhUTUwgdGhyb3VnaCBgPHN0eWxlPmAgZWxlbWVudHMuIFRvIGRvIHRoaXMsIGl0IG5lZWRzIHRvIG1vZGlmeSBgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cGAgYW5kIGFkZCB0aGVcblx0XHRcdCAqIGFwcHJvcHJpYXRlIHRva2Vucy4gSG93ZXZlciwgYFByaXNtLmxhbmd1YWdlcy5tYXJrdXBgIGlzIGEgcmVndWxhciBKYXZhU2NyaXB0IG9iamVjdCBsaXRlcmFsLCBzbyBpZiB5b3UgZG9cblx0XHRcdCAqIHRoaXM6XG5cdFx0XHQgKlxuXHRcdFx0ICogYGBganNcblx0XHRcdCAqIFByaXNtLmxhbmd1YWdlcy5tYXJrdXAuc3R5bGUgPSB7XG5cdFx0XHQgKiAgICAgLy8gdG9rZW5cblx0XHRcdCAqIH07XG5cdFx0XHQgKiBgYGBcblx0XHRcdCAqXG5cdFx0XHQgKiB0aGVuIHRoZSBgc3R5bGVgIHRva2VuIHdpbGwgYmUgYWRkZWQgKGFuZCBwcm9jZXNzZWQpIGF0IHRoZSBlbmQuIGBpbnNlcnRCZWZvcmVgIGFsbG93cyB5b3UgdG8gaW5zZXJ0IHRva2Vuc1xuXHRcdFx0ICogYmVmb3JlIGV4aXN0aW5nIHRva2Vucy4gRm9yIHRoZSBDU1MgZXhhbXBsZSBhYm92ZSwgeW91IHdvdWxkIHVzZSBpdCBsaWtlIHRoaXM6XG5cdFx0XHQgKlxuXHRcdFx0ICogYGBganNcblx0XHRcdCAqIFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICdjZGF0YScsIHtcblx0XHRcdCAqICAgICAnc3R5bGUnOiB7XG5cdFx0XHQgKiAgICAgICAgIC8vIHRva2VuXG5cdFx0XHQgKiAgICAgfVxuXHRcdFx0ICogfSk7XG5cdFx0XHQgKiBgYGBcblx0XHRcdCAqXG5cdFx0XHQgKiAjIyBTcGVjaWFsIGNhc2VzXG5cdFx0XHQgKlxuXHRcdFx0ICogSWYgdGhlIGdyYW1tYXJzIG9mIGBpbnNpZGVgIGFuZCBgaW5zZXJ0YCBoYXZlIHRva2VucyB3aXRoIHRoZSBzYW1lIG5hbWUsIHRoZSB0b2tlbnMgaW4gYGluc2lkZWAncyBncmFtbWFyXG5cdFx0XHQgKiB3aWxsIGJlIGlnbm9yZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyBiZWhhdmlvciBjYW4gYmUgdXNlZCB0byBpbnNlcnQgdG9rZW5zIGFmdGVyIGBiZWZvcmVgOlxuXHRcdFx0ICpcblx0XHRcdCAqIGBgYGpzXG5cdFx0XHQgKiBQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrdXAnLCAnY29tbWVudCcsIHtcblx0XHRcdCAqICAgICAnY29tbWVudCc6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXAuY29tbWVudCxcblx0XHRcdCAqICAgICAvLyB0b2tlbnMgYWZ0ZXIgJ2NvbW1lbnQnXG5cdFx0XHQgKiB9KTtcblx0XHRcdCAqIGBgYFxuXHRcdFx0ICpcblx0XHRcdCAqICMjIExpbWl0YXRpb25zXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhlIG1haW4gcHJvYmxlbSBgaW5zZXJ0QmVmb3JlYCBoYXMgdG8gc29sdmUgaXMgaXRlcmF0aW9uIG9yZGVyLiBTaW5jZSBFUzIwMTUsIHRoZSBpdGVyYXRpb24gb3JkZXIgZm9yIG9iamVjdFxuXHRcdFx0ICogcHJvcGVydGllcyBpcyBndWFyYW50ZWVkIHRvIGJlIHRoZSBpbnNlcnRpb24gb3JkZXIgKGV4Y2VwdCBmb3IgaW50ZWdlciBrZXlzKSBidXQgc29tZSBicm93c2VycyBiZWhhdmVcblx0XHRcdCAqIGRpZmZlcmVudGx5IHdoZW4ga2V5cyBhcmUgZGVsZXRlZCBhbmQgcmUtaW5zZXJ0ZWQuIFNvIGBpbnNlcnRCZWZvcmVgIGNhbid0IGJlIGltcGxlbWVudGVkIGJ5IHRlbXBvcmFyaWx5XG5cdFx0XHQgKiBkZWxldGluZyBwcm9wZXJ0aWVzIHdoaWNoIGlzIG5lY2Vzc2FyeSB0byBpbnNlcnQgYXQgYXJiaXRyYXJ5IHBvc2l0aW9ucy5cblx0XHRcdCAqXG5cdFx0XHQgKiBUbyBzb2x2ZSB0aGlzIHByb2JsZW0sIGBpbnNlcnRCZWZvcmVgIGRvZXNuJ3QgYWN0dWFsbHkgaW5zZXJ0IHRoZSBnaXZlbiB0b2tlbnMgaW50byB0aGUgdGFyZ2V0IG9iamVjdC5cblx0XHRcdCAqIEluc3RlYWQsIGl0IHdpbGwgY3JlYXRlIGEgbmV3IG9iamVjdCBhbmQgcmVwbGFjZSBhbGwgcmVmZXJlbmNlcyB0byB0aGUgdGFyZ2V0IG9iamVjdCB3aXRoIHRoZSBuZXcgb25lLiBUaGlzXG5cdFx0XHQgKiBjYW4gYmUgZG9uZSB3aXRob3V0IHRlbXBvcmFyaWx5IGRlbGV0aW5nIHByb3BlcnRpZXMsIHNvIHRoZSBpdGVyYXRpb24gb3JkZXIgaXMgd2VsbC1kZWZpbmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEhvd2V2ZXIsIG9ubHkgcmVmZXJlbmNlcyB0aGF0IGNhbiBiZSByZWFjaGVkIGZyb20gYFByaXNtLmxhbmd1YWdlc2Agb3IgYGluc2VydGAgd2lsbCBiZSByZXBsYWNlZC4gSS5lLiBpZlxuXHRcdFx0ICogeW91IGhvbGQgdGhlIHRhcmdldCBvYmplY3QgaW4gYSB2YXJpYWJsZSwgdGhlbiB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlIHdpbGwgbm90IGNoYW5nZS5cblx0XHRcdCAqXG5cdFx0XHQgKiBgYGBqc1xuXHRcdFx0ICogdmFyIG9sZE1hcmt1cCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cdFx0XHQgKiB2YXIgbmV3TWFya3VwID0gUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbWFya3VwJywgJ2NvbW1lbnQnLCB7IC4uLiB9KTtcblx0XHRcdCAqXG5cdFx0XHQgKiBhc3NlcnQob2xkTWFya3VwICE9PSBQcmlzbS5sYW5ndWFnZXMubWFya3VwKTtcblx0XHRcdCAqIGFzc2VydChuZXdNYXJrdXAgPT09IFByaXNtLmxhbmd1YWdlcy5tYXJrdXApO1xuXHRcdFx0ICogYGBgXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGluc2lkZSBUaGUgcHJvcGVydHkgb2YgYHJvb3RgIChlLmcuIGEgbGFuZ3VhZ2UgaWQgaW4gYFByaXNtLmxhbmd1YWdlc2ApIHRoYXQgY29udGFpbnMgdGhlXG5cdFx0XHQgKiBvYmplY3QgdG8gYmUgbW9kaWZpZWQuXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gYmVmb3JlIFRoZSBrZXkgdG8gaW5zZXJ0IGJlZm9yZS5cblx0XHRcdCAqIEBwYXJhbSB7R3JhbW1hcn0gaW5zZXJ0IEFuIG9iamVjdCBjb250YWluaW5nIHRoZSBrZXktdmFsdWUgcGFpcnMgdG8gYmUgaW5zZXJ0ZWQuXG5cdFx0XHQgKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IFtyb290XSBUaGUgb2JqZWN0IGNvbnRhaW5pbmcgYGluc2lkZWAsIGkuZS4gdGhlIG9iamVjdCB0aGF0IGNvbnRhaW5zIHRoZVxuXHRcdFx0ICogb2JqZWN0IHRvIGJlIG1vZGlmaWVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIERlZmF1bHRzIHRvIGBQcmlzbS5sYW5ndWFnZXNgLlxuXHRcdFx0ICogQHJldHVybnMge0dyYW1tYXJ9IFRoZSBuZXcgZ3JhbW1hciBvYmplY3QuXG5cdFx0XHQgKiBAcHVibGljXG5cdFx0XHQgKi9cblx0XHRcdGluc2VydEJlZm9yZTogZnVuY3Rpb24gKGluc2lkZSwgYmVmb3JlLCBpbnNlcnQsIHJvb3QpIHtcblx0XHRcdFx0cm9vdCA9IHJvb3QgfHwgLyoqIEB0eXBlIHthbnl9ICovIChfLmxhbmd1YWdlcyk7XG5cdFx0XHRcdHZhciBncmFtbWFyID0gcm9vdFtpbnNpZGVdO1xuXHRcdFx0XHQvKiogQHR5cGUge0dyYW1tYXJ9ICovXG5cdFx0XHRcdHZhciByZXQgPSB7fTtcblxuXHRcdFx0XHRmb3IgKHZhciB0b2tlbiBpbiBncmFtbWFyKSB7XG5cdFx0XHRcdFx0aWYgKGdyYW1tYXIuaGFzT3duUHJvcGVydHkodG9rZW4pKSB7XG5cblx0XHRcdFx0XHRcdGlmICh0b2tlbiA9PSBiZWZvcmUpIHtcblx0XHRcdFx0XHRcdFx0Zm9yICh2YXIgbmV3VG9rZW4gaW4gaW5zZXJ0KSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKGluc2VydC5oYXNPd25Qcm9wZXJ0eShuZXdUb2tlbikpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJldFtuZXdUb2tlbl0gPSBpbnNlcnRbbmV3VG9rZW5dO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBEbyBub3QgaW5zZXJ0IHRva2VuIHdoaWNoIGFsc28gb2NjdXIgaW4gaW5zZXJ0LiBTZWUgIzE1MjVcblx0XHRcdFx0XHRcdGlmICghaW5zZXJ0Lmhhc093blByb3BlcnR5KHRva2VuKSkge1xuXHRcdFx0XHRcdFx0XHRyZXRbdG9rZW5dID0gZ3JhbW1hclt0b2tlbl07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIG9sZCA9IHJvb3RbaW5zaWRlXTtcblx0XHRcdFx0cm9vdFtpbnNpZGVdID0gcmV0O1xuXG5cdFx0XHRcdC8vIFVwZGF0ZSByZWZlcmVuY2VzIGluIG90aGVyIGxhbmd1YWdlIGRlZmluaXRpb25zXG5cdFx0XHRcdF8ubGFuZ3VhZ2VzLkRGUyhfLmxhbmd1YWdlcywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcblx0XHRcdFx0XHRpZiAodmFsdWUgPT09IG9sZCAmJiBrZXkgIT0gaW5zaWRlKSB7XG5cdFx0XHRcdFx0XHR0aGlzW2tleV0gPSByZXQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVHJhdmVyc2UgYSBsYW5ndWFnZSBkZWZpbml0aW9uIHdpdGggRGVwdGggRmlyc3QgU2VhcmNoXG5cdFx0XHRERlM6IGZ1bmN0aW9uIERGUyhvLCBjYWxsYmFjaywgdHlwZSwgdmlzaXRlZCkge1xuXHRcdFx0XHR2aXNpdGVkID0gdmlzaXRlZCB8fCB7fTtcblxuXHRcdFx0XHR2YXIgb2JqSWQgPSBfLnV0aWwub2JqSWQ7XG5cblx0XHRcdFx0Zm9yICh2YXIgaSBpbiBvKSB7XG5cdFx0XHRcdFx0aWYgKG8uaGFzT3duUHJvcGVydHkoaSkpIHtcblx0XHRcdFx0XHRcdGNhbGxiYWNrLmNhbGwobywgaSwgb1tpXSwgdHlwZSB8fCBpKTtcblxuXHRcdFx0XHRcdFx0dmFyIHByb3BlcnR5ID0gb1tpXTtcblx0XHRcdFx0XHRcdHZhciBwcm9wZXJ0eVR5cGUgPSBfLnV0aWwudHlwZShwcm9wZXJ0eSk7XG5cblx0XHRcdFx0XHRcdGlmIChwcm9wZXJ0eVR5cGUgPT09ICdPYmplY3QnICYmICF2aXNpdGVkW29iaklkKHByb3BlcnR5KV0pIHtcblx0XHRcdFx0XHRcdFx0dmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0REZTKHByb3BlcnR5LCBjYWxsYmFjaywgbnVsbCwgdmlzaXRlZCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHByb3BlcnR5VHlwZSA9PT0gJ0FycmF5JyAmJiAhdmlzaXRlZFtvYmpJZChwcm9wZXJ0eSldKSB7XG5cdFx0XHRcdFx0XHRcdHZpc2l0ZWRbb2JqSWQocHJvcGVydHkpXSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdERGUyhwcm9wZXJ0eSwgY2FsbGJhY2ssIGksIHZpc2l0ZWQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRwbHVnaW5zOiB7fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlIG1vc3QgaGlnaC1sZXZlbCBmdW5jdGlvbiBpbiBQcmlzbVx1MjAxOXMgQVBJLlxuXHRcdCAqIEl0IGZldGNoZXMgYWxsIHRoZSBlbGVtZW50cyB0aGF0IGhhdmUgYSBgLmxhbmd1YWdlLXh4eHhgIGNsYXNzIGFuZCB0aGVuIGNhbGxzIHtAbGluayBQcmlzbS5oaWdobGlnaHRFbGVtZW50fSBvblxuXHRcdCAqIGVhY2ggb25lIG9mIHRoZW0uXG5cdFx0ICpcblx0XHQgKiBUaGlzIGlzIGVxdWl2YWxlbnQgdG8gYFByaXNtLmhpZ2hsaWdodEFsbFVuZGVyKGRvY3VtZW50LCBhc3luYywgY2FsbGJhY2spYC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPWZhbHNlXSBTYW1lIGFzIGluIHtAbGluayBQcmlzbS5oaWdobGlnaHRBbGxVbmRlcn0uXG5cdFx0ICogQHBhcmFtIHtIaWdobGlnaHRDYWxsYmFja30gW2NhbGxiYWNrXSBTYW1lIGFzIGluIHtAbGluayBQcmlzbS5oaWdobGlnaHRBbGxVbmRlcn0uXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodEFsbDogZnVuY3Rpb24gKGFzeW5jLCBjYWxsYmFjaykge1xuXHRcdFx0Xy5oaWdobGlnaHRBbGxVbmRlcihkb2N1bWVudCwgYXN5bmMsIGNhbGxiYWNrKTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogRmV0Y2hlcyBhbGwgdGhlIGRlc2NlbmRhbnRzIG9mIGBjb250YWluZXJgIHRoYXQgaGF2ZSBhIGAubGFuZ3VhZ2UteHh4eGAgY2xhc3MgYW5kIHRoZW4gY2FsbHNcblx0XHQgKiB7QGxpbmsgUHJpc20uaGlnaGxpZ2h0RWxlbWVudH0gb24gZWFjaCBvbmUgb2YgdGhlbS5cblx0XHQgKlxuXHRcdCAqIFRoZSBmb2xsb3dpbmcgaG9va3Mgd2lsbCBiZSBydW46XG5cdFx0ICogMS4gYGJlZm9yZS1oaWdobGlnaHRhbGxgXG5cdFx0ICogMi4gYGJlZm9yZS1hbGwtZWxlbWVudHMtaGlnaGxpZ2h0YFxuXHRcdCAqIDMuIEFsbCBob29rcyBvZiB7QGxpbmsgUHJpc20uaGlnaGxpZ2h0RWxlbWVudH0gZm9yIGVhY2ggZWxlbWVudC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gY29udGFpbmVyIFRoZSByb290IGVsZW1lbnQsIHdob3NlIGRlc2NlbmRhbnRzIHRoYXQgaGF2ZSBhIGAubGFuZ3VhZ2UteHh4eGAgY2xhc3Mgd2lsbCBiZSBoaWdobGlnaHRlZC5cblx0XHQgKiBAcGFyYW0ge2Jvb2xlYW59IFthc3luYz1mYWxzZV0gV2hldGhlciBlYWNoIGVsZW1lbnQgaXMgdG8gYmUgaGlnaGxpZ2h0ZWQgYXN5bmNocm9ub3VzbHkgdXNpbmcgV2ViIFdvcmtlcnMuXG5cdFx0ICogQHBhcmFtIHtIaWdobGlnaHRDYWxsYmFja30gW2NhbGxiYWNrXSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBpbnZva2VkIG9uIGVhY2ggZWxlbWVudCBhZnRlciBpdHMgaGlnaGxpZ2h0aW5nIGlzIGRvbmUuXG5cdFx0ICogQG1lbWJlcm9mIFByaXNtXG5cdFx0ICogQHB1YmxpY1xuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodEFsbFVuZGVyOiBmdW5jdGlvbiAoY29udGFpbmVyLCBhc3luYywgY2FsbGJhY2spIHtcblx0XHRcdHZhciBlbnYgPSB7XG5cdFx0XHRcdGNhbGxiYWNrOiBjYWxsYmFjayxcblx0XHRcdFx0Y29udGFpbmVyOiBjb250YWluZXIsXG5cdFx0XHRcdHNlbGVjdG9yOiAnY29kZVtjbGFzcyo9XCJsYW5ndWFnZS1cIl0sIFtjbGFzcyo9XCJsYW5ndWFnZS1cIl0gY29kZSwgY29kZVtjbGFzcyo9XCJsYW5nLVwiXSwgW2NsYXNzKj1cImxhbmctXCJdIGNvZGUnXG5cdFx0XHR9O1xuXG5cdFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLWhpZ2hsaWdodGFsbCcsIGVudik7XG5cblx0XHRcdGVudi5lbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShlbnYuY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoZW52LnNlbGVjdG9yKSk7XG5cblx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtYWxsLWVsZW1lbnRzLWhpZ2hsaWdodCcsIGVudik7XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBlbGVtZW50OyAoZWxlbWVudCA9IGVudi5lbGVtZW50c1tpKytdKTspIHtcblx0XHRcdFx0Xy5oaWdobGlnaHRFbGVtZW50KGVsZW1lbnQsIGFzeW5jID09PSB0cnVlLCBlbnYuY2FsbGJhY2spO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvKipcblx0XHQgKiBIaWdobGlnaHRzIHRoZSBjb2RlIGluc2lkZSBhIHNpbmdsZSBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogVGhlIGZvbGxvd2luZyBob29rcyB3aWxsIGJlIHJ1bjpcblx0XHQgKiAxLiBgYmVmb3JlLXNhbml0eS1jaGVja2Bcblx0XHQgKiAyLiBgYmVmb3JlLWhpZ2hsaWdodGBcblx0XHQgKiAzLiBBbGwgaG9va3Mgb2Yge0BsaW5rIFByaXNtLmhpZ2hsaWdodH0uIFRoZXNlIGhvb2tzIHdpbGwgYmUgcnVuIGJ5IGFuIGFzeW5jaHJvbm91cyB3b3JrZXIgaWYgYGFzeW5jYCBpcyBgdHJ1ZWAuXG5cdFx0ICogNC4gYGJlZm9yZS1pbnNlcnRgXG5cdFx0ICogNS4gYGFmdGVyLWhpZ2hsaWdodGBcblx0XHQgKiA2LiBgY29tcGxldGVgXG5cdFx0ICpcblx0XHQgKiBTb21lIHRoZSBhYm92ZSBob29rcyB3aWxsIGJlIHNraXBwZWQgaWYgdGhlIGVsZW1lbnQgZG9lc24ndCBjb250YWluIGFueSB0ZXh0IG9yIHRoZXJlIGlzIG5vIGdyYW1tYXIgbG9hZGVkIGZvclxuXHRcdCAqIHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgY29udGFpbmluZyB0aGUgY29kZS5cblx0XHQgKiBJdCBtdXN0IGhhdmUgYSBjbGFzcyBvZiBgbGFuZ3VhZ2UteHh4eGAgdG8gYmUgcHJvY2Vzc2VkLCB3aGVyZSBgeHh4eGAgaXMgYSB2YWxpZCBsYW5ndWFnZSBpZGVudGlmaWVyLlxuXHRcdCAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FzeW5jPWZhbHNlXSBXaGV0aGVyIHRoZSBlbGVtZW50IGlzIHRvIGJlIGhpZ2hsaWdodGVkIGFzeW5jaHJvbm91c2x5IHVzaW5nIFdlYiBXb3JrZXJzXG5cdFx0ICogdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgYXZvaWQgYmxvY2tpbmcgdGhlIFVJIHdoZW4gaGlnaGxpZ2h0aW5nIHZlcnkgbGFyZ2UgY2h1bmtzIG9mIGNvZGUuIFRoaXMgb3B0aW9uIGlzXG5cdFx0ICogW2Rpc2FibGVkIGJ5IGRlZmF1bHRdKGh0dHBzOi8vcHJpc21qcy5jb20vZmFxLmh0bWwjd2h5LWlzLWFzeW5jaHJvbm91cy1oaWdobGlnaHRpbmctZGlzYWJsZWQtYnktZGVmYXVsdCkuXG5cdFx0ICpcblx0XHQgKiBOb3RlOiBBbGwgbGFuZ3VhZ2UgZGVmaW5pdGlvbnMgcmVxdWlyZWQgdG8gaGlnaGxpZ2h0IHRoZSBjb2RlIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIG1haW4gYHByaXNtLmpzYCBmaWxlIGZvclxuXHRcdCAqIGFzeW5jaHJvbm91cyBoaWdobGlnaHRpbmcgdG8gd29yay4gWW91IGNhbiBidWlsZCB5b3VyIG93biBidW5kbGUgb24gdGhlXG5cdFx0ICogW0Rvd25sb2FkIHBhZ2VdKGh0dHBzOi8vcHJpc21qcy5jb20vZG93bmxvYWQuaHRtbCkuXG5cdFx0ICogQHBhcmFtIHtIaWdobGlnaHRDYWxsYmFja30gW2NhbGxiYWNrXSBBbiBvcHRpb25hbCBjYWxsYmFjayB0byBiZSBpbnZva2VkIGFmdGVyIHRoZSBoaWdobGlnaHRpbmcgaXMgZG9uZS5cblx0XHQgKiBNb3N0bHkgdXNlZnVsIHdoZW4gYGFzeW5jYCBpcyBgdHJ1ZWAsIHNpbmNlIGluIHRoYXQgY2FzZSwgdGhlIGhpZ2hsaWdodGluZyBpcyBkb25lIGFzeW5jaHJvbm91c2x5LlxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHRoaWdobGlnaHRFbGVtZW50OiBmdW5jdGlvbiAoZWxlbWVudCwgYXN5bmMsIGNhbGxiYWNrKSB7XG5cdFx0XHQvLyBGaW5kIGxhbmd1YWdlXG5cdFx0XHR2YXIgbGFuZ3VhZ2UgPSBfLnV0aWwuZ2V0TGFuZ3VhZ2UoZWxlbWVudCk7XG5cdFx0XHR2YXIgZ3JhbW1hciA9IF8ubGFuZ3VhZ2VzW2xhbmd1YWdlXTtcblxuXHRcdFx0Ly8gU2V0IGxhbmd1YWdlIG9uIHRoZSBlbGVtZW50LCBpZiBub3QgcHJlc2VudFxuXHRcdFx0Xy51dGlsLnNldExhbmd1YWdlKGVsZW1lbnQsIGxhbmd1YWdlKTtcblxuXHRcdFx0Ly8gU2V0IGxhbmd1YWdlIG9uIHRoZSBwYXJlbnQsIGZvciBzdHlsaW5nXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbWVudC5wYXJlbnRFbGVtZW50O1xuXHRcdFx0aWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gJ3ByZScpIHtcblx0XHRcdFx0Xy51dGlsLnNldExhbmd1YWdlKHBhcmVudCwgbGFuZ3VhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgY29kZSA9IGVsZW1lbnQudGV4dENvbnRlbnQ7XG5cblx0XHRcdHZhciBlbnYgPSB7XG5cdFx0XHRcdGVsZW1lbnQ6IGVsZW1lbnQsXG5cdFx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZSxcblx0XHRcdFx0Z3JhbW1hcjogZ3JhbW1hcixcblx0XHRcdFx0Y29kZTogY29kZVxuXHRcdFx0fTtcblxuXHRcdFx0ZnVuY3Rpb24gaW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKGhpZ2hsaWdodGVkQ29kZSkge1xuXHRcdFx0XHRlbnYuaGlnaGxpZ2h0ZWRDb2RlID0gaGlnaGxpZ2h0ZWRDb2RlO1xuXG5cdFx0XHRcdF8uaG9va3MucnVuKCdiZWZvcmUtaW5zZXJ0JywgZW52KTtcblxuXHRcdFx0XHRlbnYuZWxlbWVudC5pbm5lckhUTUwgPSBlbnYuaGlnaGxpZ2h0ZWRDb2RlO1xuXG5cdFx0XHRcdF8uaG9va3MucnVuKCdhZnRlci1oaWdobGlnaHQnLCBlbnYpO1xuXHRcdFx0XHRfLmhvb2tzLnJ1bignY29tcGxldGUnLCBlbnYpO1xuXHRcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVudi5lbGVtZW50KTtcblx0XHRcdH1cblxuXHRcdFx0Xy5ob29rcy5ydW4oJ2JlZm9yZS1zYW5pdHktY2hlY2snLCBlbnYpO1xuXG5cdFx0XHQvLyBwbHVnaW5zIG1heSBjaGFuZ2UvYWRkIHRoZSBwYXJlbnQvZWxlbWVudFxuXHRcdFx0cGFyZW50ID0gZW52LmVsZW1lbnQucGFyZW50RWxlbWVudDtcblx0XHRcdGlmIChwYXJlbnQgJiYgcGFyZW50Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09ICdwcmUnICYmICFwYXJlbnQuaGFzQXR0cmlidXRlKCd0YWJpbmRleCcpKSB7XG5cdFx0XHRcdHBhcmVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgJzAnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCFlbnYuY29kZSkge1xuXHRcdFx0XHRfLmhvb2tzLnJ1bignY29tcGxldGUnLCBlbnYpO1xuXHRcdFx0XHRjYWxsYmFjayAmJiBjYWxsYmFjay5jYWxsKGVudi5lbGVtZW50KTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLWhpZ2hsaWdodCcsIGVudik7XG5cblx0XHRcdGlmICghZW52LmdyYW1tYXIpIHtcblx0XHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKF8udXRpbC5lbmNvZGUoZW52LmNvZGUpKTtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoYXN5bmMgJiYgX3NlbGYuV29ya2VyKSB7XG5cdFx0XHRcdHZhciB3b3JrZXIgPSBuZXcgV29ya2VyKF8uZmlsZW5hbWUpO1xuXG5cdFx0XHRcdHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoZXZ0KSB7XG5cdFx0XHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKGV2dC5kYXRhKTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHR3b3JrZXIucG9zdE1lc3NhZ2UoSlNPTi5zdHJpbmdpZnkoe1xuXHRcdFx0XHRcdGxhbmd1YWdlOiBlbnYubGFuZ3VhZ2UsXG5cdFx0XHRcdFx0Y29kZTogZW52LmNvZGUsXG5cdFx0XHRcdFx0aW1tZWRpYXRlQ2xvc2U6IHRydWVcblx0XHRcdFx0fSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aW5zZXJ0SGlnaGxpZ2h0ZWRDb2RlKF8uaGlnaGxpZ2h0KGVudi5jb2RlLCBlbnYuZ3JhbW1hciwgZW52Lmxhbmd1YWdlKSk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIExvdy1sZXZlbCBmdW5jdGlvbiwgb25seSB1c2UgaWYgeW91IGtub3cgd2hhdCB5b3VcdTIwMTlyZSBkb2luZy4gSXQgYWNjZXB0cyBhIHN0cmluZyBvZiB0ZXh0IGFzIGlucHV0XG5cdFx0ICogYW5kIHRoZSBsYW5ndWFnZSBkZWZpbml0aW9ucyB0byB1c2UsIGFuZCByZXR1cm5zIGEgc3RyaW5nIHdpdGggdGhlIEhUTUwgcHJvZHVjZWQuXG5cdFx0ICpcblx0XHQgKiBUaGUgZm9sbG93aW5nIGhvb2tzIHdpbGwgYmUgcnVuOlxuXHRcdCAqIDEuIGBiZWZvcmUtdG9rZW5pemVgXG5cdFx0ICogMi4gYGFmdGVyLXRva2VuaXplYFxuXHRcdCAqIDMuIGB3cmFwYDogT24gZWFjaCB7QGxpbmsgVG9rZW59LlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHtzdHJpbmd9IHRleHQgQSBzdHJpbmcgd2l0aCB0aGUgY29kZSB0byBiZSBoaWdobGlnaHRlZC5cblx0XHQgKiBAcGFyYW0ge0dyYW1tYXJ9IGdyYW1tYXIgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHRva2VucyB0byB1c2UuXG5cdFx0ICpcblx0XHQgKiBVc3VhbGx5IGEgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBsaWtlIGBQcmlzbS5sYW5ndWFnZXMubWFya3VwYC5cblx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIG5hbWUgb2YgdGhlIGxhbmd1YWdlIGRlZmluaXRpb24gcGFzc2VkIHRvIGBncmFtbWFyYC5cblx0XHQgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgaGlnaGxpZ2h0ZWQgSFRNTC5cblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICogQGV4YW1wbGVcblx0XHQgKiBQcmlzbS5oaWdobGlnaHQoJ3ZhciBmb28gPSB0cnVlOycsIFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0LCAnamF2YXNjcmlwdCcpO1xuXHRcdCAqL1xuXHRcdGhpZ2hsaWdodDogZnVuY3Rpb24gKHRleHQsIGdyYW1tYXIsIGxhbmd1YWdlKSB7XG5cdFx0XHR2YXIgZW52ID0ge1xuXHRcdFx0XHRjb2RlOiB0ZXh0LFxuXHRcdFx0XHRncmFtbWFyOiBncmFtbWFyLFxuXHRcdFx0XHRsYW5ndWFnZTogbGFuZ3VhZ2Vcblx0XHRcdH07XG5cdFx0XHRfLmhvb2tzLnJ1bignYmVmb3JlLXRva2VuaXplJywgZW52KTtcblx0XHRcdGlmICghZW52LmdyYW1tYXIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdUaGUgbGFuZ3VhZ2UgXCInICsgZW52Lmxhbmd1YWdlICsgJ1wiIGhhcyBubyBncmFtbWFyLicpO1xuXHRcdFx0fVxuXHRcdFx0ZW52LnRva2VucyA9IF8udG9rZW5pemUoZW52LmNvZGUsIGVudi5ncmFtbWFyKTtcblx0XHRcdF8uaG9va3MucnVuKCdhZnRlci10b2tlbml6ZScsIGVudik7XG5cdFx0XHRyZXR1cm4gVG9rZW4uc3RyaW5naWZ5KF8udXRpbC5lbmNvZGUoZW52LnRva2VucyksIGVudi5sYW5ndWFnZSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIFByaXNtLCBhbmQgdGhlIG1vc3QgbG93LWxldmVsIGZ1bmN0aW9uIHlvdSBjYW4gdXNlLiBJdCBhY2NlcHRzIGEgc3RyaW5nIG9mIHRleHQgYXMgaW5wdXRcblx0XHQgKiBhbmQgdGhlIGxhbmd1YWdlIGRlZmluaXRpb25zIHRvIHVzZSwgYW5kIHJldHVybnMgYW4gYXJyYXkgd2l0aCB0aGUgdG9rZW5pemVkIGNvZGUuXG5cdFx0ICpcblx0XHQgKiBXaGVuIHRoZSBsYW5ndWFnZSBkZWZpbml0aW9uIGluY2x1ZGVzIG5lc3RlZCB0b2tlbnMsIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgcmVjdXJzaXZlbHkgb24gZWFjaCBvZiB0aGVzZSB0b2tlbnMuXG5cdFx0ICpcblx0XHQgKiBUaGlzIG1ldGhvZCBjb3VsZCBiZSB1c2VmdWwgaW4gb3RoZXIgY29udGV4dHMgYXMgd2VsbCwgYXMgYSB2ZXJ5IGNydWRlIHBhcnNlci5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IEEgc3RyaW5nIHdpdGggdGhlIGNvZGUgdG8gYmUgaGlnaGxpZ2h0ZWQuXG5cdFx0ICogQHBhcmFtIHtHcmFtbWFyfSBncmFtbWFyIEFuIG9iamVjdCBjb250YWluaW5nIHRoZSB0b2tlbnMgdG8gdXNlLlxuXHRcdCAqXG5cdFx0ICogVXN1YWxseSBhIGxhbmd1YWdlIGRlZmluaXRpb24gbGlrZSBgUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cGAuXG5cdFx0ICogQHJldHVybnMge1Rva2VuU3RyZWFtfSBBbiBhcnJheSBvZiBzdHJpbmdzIGFuZCB0b2tlbnMsIGEgdG9rZW4gc3RyZWFtLlxuXHRcdCAqIEBtZW1iZXJvZiBQcmlzbVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKiBAZXhhbXBsZVxuXHRcdCAqIGxldCBjb2RlID0gYHZhciBmb28gPSAwO2A7XG5cdFx0ICogbGV0IHRva2VucyA9IFByaXNtLnRva2VuaXplKGNvZGUsIFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0KTtcblx0XHQgKiB0b2tlbnMuZm9yRWFjaCh0b2tlbiA9PiB7XG5cdFx0ICogICAgIGlmICh0b2tlbiBpbnN0YW5jZW9mIFByaXNtLlRva2VuICYmIHRva2VuLnR5cGUgPT09ICdudW1iZXInKSB7XG5cdFx0ICogICAgICAgICBjb25zb2xlLmxvZyhgRm91bmQgbnVtZXJpYyBsaXRlcmFsOiAke3Rva2VuLmNvbnRlbnR9YCk7XG5cdFx0ICogICAgIH1cblx0XHQgKiB9KTtcblx0XHQgKi9cblx0XHR0b2tlbml6ZTogZnVuY3Rpb24gKHRleHQsIGdyYW1tYXIpIHtcblx0XHRcdHZhciByZXN0ID0gZ3JhbW1hci5yZXN0O1xuXHRcdFx0aWYgKHJlc3QpIHtcblx0XHRcdFx0Zm9yICh2YXIgdG9rZW4gaW4gcmVzdCkge1xuXHRcdFx0XHRcdGdyYW1tYXJbdG9rZW5dID0gcmVzdFt0b2tlbl07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRkZWxldGUgZ3JhbW1hci5yZXN0O1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgdG9rZW5MaXN0ID0gbmV3IExpbmtlZExpc3QoKTtcblx0XHRcdGFkZEFmdGVyKHRva2VuTGlzdCwgdG9rZW5MaXN0LmhlYWQsIHRleHQpO1xuXG5cdFx0XHRtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCB0b2tlbkxpc3QuaGVhZCwgMCk7XG5cblx0XHRcdHJldHVybiB0b0FycmF5KHRva2VuTGlzdCk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIEBuYW1lc3BhY2Vcblx0XHQgKiBAbWVtYmVyb2YgUHJpc21cblx0XHQgKiBAcHVibGljXG5cdFx0ICovXG5cdFx0aG9va3M6IHtcblx0XHRcdGFsbDoge30sXG5cblx0XHRcdC8qKlxuXHRcdFx0ICogQWRkcyB0aGUgZ2l2ZW4gY2FsbGJhY2sgdG8gdGhlIGxpc3Qgb2YgY2FsbGJhY2tzIGZvciB0aGUgZ2l2ZW4gaG9vay5cblx0XHRcdCAqXG5cdFx0XHQgKiBUaGUgY2FsbGJhY2sgd2lsbCBiZSBpbnZva2VkIHdoZW4gdGhlIGhvb2sgaXQgaXMgcmVnaXN0ZXJlZCBmb3IgaXMgcnVuLlxuXHRcdFx0ICogSG9va3MgYXJlIHVzdWFsbHkgZGlyZWN0bHkgcnVuIGJ5IGEgaGlnaGxpZ2h0IGZ1bmN0aW9uIGJ1dCB5b3UgY2FuIGFsc28gcnVuIGhvb2tzIHlvdXJzZWxmLlxuXHRcdFx0ICpcblx0XHRcdCAqIE9uZSBjYWxsYmFjayBmdW5jdGlvbiBjYW4gYmUgcmVnaXN0ZXJlZCB0byBtdWx0aXBsZSBob29rcyBhbmQgdGhlIHNhbWUgaG9vayBtdWx0aXBsZSB0aW1lcy5cblx0XHRcdCAqXG5cdFx0XHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBUaGUgbmFtZSBvZiB0aGUgaG9vay5cblx0XHRcdCAqIEBwYXJhbSB7SG9va0NhbGxiYWNrfSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hpY2ggaXMgZ2l2ZW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXHRcdFx0ICogQHB1YmxpY1xuXHRcdFx0ICovXG5cdFx0XHRhZGQ6IGZ1bmN0aW9uIChuYW1lLCBjYWxsYmFjaykge1xuXHRcdFx0XHR2YXIgaG9va3MgPSBfLmhvb2tzLmFsbDtcblxuXHRcdFx0XHRob29rc1tuYW1lXSA9IGhvb2tzW25hbWVdIHx8IFtdO1xuXG5cdFx0XHRcdGhvb2tzW25hbWVdLnB1c2goY2FsbGJhY2spO1xuXHRcdFx0fSxcblxuXHRcdFx0LyoqXG5cdFx0XHQgKiBSdW5zIGEgaG9vayBpbnZva2luZyBhbGwgcmVnaXN0ZXJlZCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuXHRcdFx0ICpcblx0XHRcdCAqIENhbGxiYWNrcyB3aWxsIGJlIGludm9rZWQgc3luY2hyb25vdXNseSBhbmQgaW4gdGhlIG9yZGVyIGluIHdoaWNoIHRoZXkgd2VyZSByZWdpc3RlcmVkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtPYmplY3Q8c3RyaW5nLCBhbnk+fSBlbnYgVGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBvZiB0aGUgaG9vayBwYXNzZWQgdG8gYWxsIGNhbGxiYWNrcyByZWdpc3RlcmVkLlxuXHRcdFx0ICogQHB1YmxpY1xuXHRcdFx0ICovXG5cdFx0XHRydW46IGZ1bmN0aW9uIChuYW1lLCBlbnYpIHtcblx0XHRcdFx0dmFyIGNhbGxiYWNrcyA9IF8uaG9va3MuYWxsW25hbWVdO1xuXG5cdFx0XHRcdGlmICghY2FsbGJhY2tzIHx8ICFjYWxsYmFja3MubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yICh2YXIgaSA9IDAsIGNhbGxiYWNrOyAoY2FsbGJhY2sgPSBjYWxsYmFja3NbaSsrXSk7KSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZW52KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRUb2tlbjogVG9rZW5cblx0fTtcblx0X3NlbGYuUHJpc20gPSBfO1xuXG5cblx0Ly8gVHlwZXNjcmlwdCBub3RlOlxuXHQvLyBUaGUgZm9sbG93aW5nIGNhbiBiZSB1c2VkIHRvIGltcG9ydCB0aGUgVG9rZW4gdHlwZSBpbiBKU0RvYzpcblx0Ly9cblx0Ly8gICBAdHlwZWRlZiB7SW5zdGFuY2VUeXBlPGltcG9ydChcIi4vcHJpc20tY29yZVwiKVtcIlRva2VuXCJdPn0gVG9rZW5cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyB0b2tlbi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHR5cGUgU2VlIHtAbGluayBUb2tlbiN0eXBlIHR5cGV9XG5cdCAqIEBwYXJhbSB7c3RyaW5nIHwgVG9rZW5TdHJlYW19IGNvbnRlbnQgU2VlIHtAbGluayBUb2tlbiNjb250ZW50IGNvbnRlbnR9XG5cdCAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBbYWxpYXNdIFRoZSBhbGlhcyhlcykgb2YgdGhlIHRva2VuLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW21hdGNoZWRTdHI9XCJcIl0gQSBjb3B5IG9mIHRoZSBmdWxsIHN0cmluZyB0aGlzIHRva2VuIHdhcyBjcmVhdGVkIGZyb20uXG5cdCAqIEBjbGFzc1xuXHQgKiBAZ2xvYmFsXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGZ1bmN0aW9uIFRva2VuKHR5cGUsIGNvbnRlbnQsIGFsaWFzLCBtYXRjaGVkU3RyKSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIHR5cGUgb2YgdGhlIHRva2VuLlxuXHRcdCAqXG5cdFx0ICogVGhpcyBpcyB1c3VhbGx5IHRoZSBrZXkgb2YgYSBwYXR0ZXJuIGluIGEge0BsaW5rIEdyYW1tYXJ9LlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge3N0cmluZ31cblx0XHQgKiBAc2VlIEdyYW1tYXJUb2tlblxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHR0aGlzLnR5cGUgPSB0eXBlO1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBzdHJpbmdzIG9yIHRva2VucyBjb250YWluZWQgYnkgdGhpcyB0b2tlbi5cblx0XHQgKlxuXHRcdCAqIFRoaXMgd2lsbCBiZSBhIHRva2VuIHN0cmVhbSBpZiB0aGUgcGF0dGVybiBtYXRjaGVkIGFsc28gZGVmaW5lZCBhbiBgaW5zaWRlYCBncmFtbWFyLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge3N0cmluZyB8IFRva2VuU3RyZWFtfVxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHR0aGlzLmNvbnRlbnQgPSBjb250ZW50O1xuXHRcdC8qKlxuXHRcdCAqIFRoZSBhbGlhcyhlcykgb2YgdGhlIHRva2VuLlxuXHRcdCAqXG5cdFx0ICogQHR5cGUge3N0cmluZ3xzdHJpbmdbXX1cblx0XHQgKiBAc2VlIEdyYW1tYXJUb2tlblxuXHRcdCAqIEBwdWJsaWNcblx0XHQgKi9cblx0XHR0aGlzLmFsaWFzID0gYWxpYXM7XG5cdFx0Ly8gQ29weSBvZiB0aGUgZnVsbCBzdHJpbmcgdGhpcyB0b2tlbiB3YXMgY3JlYXRlZCBmcm9tXG5cdFx0dGhpcy5sZW5ndGggPSAobWF0Y2hlZFN0ciB8fCAnJykubGVuZ3RoIHwgMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBIHRva2VuIHN0cmVhbSBpcyBhbiBhcnJheSBvZiBzdHJpbmdzIGFuZCB7QGxpbmsgVG9rZW4gVG9rZW59IG9iamVjdHMuXG5cdCAqXG5cdCAqIFRva2VuIHN0cmVhbXMgaGF2ZSB0byBmdWxmaWxsIGEgZmV3IHByb3BlcnRpZXMgdGhhdCBhcmUgYXNzdW1lZCBieSBtb3N0IGZ1bmN0aW9ucyAobW9zdGx5IGludGVybmFsIG9uZXMpIHRoYXQgcHJvY2Vzc1xuXHQgKiB0aGVtLlxuXHQgKlxuXHQgKiAxLiBObyBhZGphY2VudCBzdHJpbmdzLlxuXHQgKiAyLiBObyBlbXB0eSBzdHJpbmdzLlxuXHQgKlxuXHQgKiAgICBUaGUgb25seSBleGNlcHRpb24gaGVyZSBpcyB0aGUgdG9rZW4gc3RyZWFtIHRoYXQgb25seSBjb250YWlucyB0aGUgZW1wdHkgc3RyaW5nIGFuZCBub3RoaW5nIGVsc2UuXG5cdCAqXG5cdCAqIEB0eXBlZGVmIHtBcnJheTxzdHJpbmcgfCBUb2tlbj59IFRva2VuU3RyZWFtXG5cdCAqIEBnbG9iYWxcblx0ICogQHB1YmxpY1xuXHQgKi9cblxuXHQvKipcblx0ICogQ29udmVydHMgdGhlIGdpdmVuIHRva2VuIG9yIHRva2VuIHN0cmVhbSB0byBhbiBIVE1MIHJlcHJlc2VudGF0aW9uLlxuXHQgKlxuXHQgKiBUaGUgZm9sbG93aW5nIGhvb2tzIHdpbGwgYmUgcnVuOlxuXHQgKiAxLiBgd3JhcGA6IE9uIGVhY2gge0BsaW5rIFRva2VufS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmcgfCBUb2tlbiB8IFRva2VuU3RyZWFtfSBvIFRoZSB0b2tlbiBvciB0b2tlbiBzdHJlYW0gdG8gYmUgY29udmVydGVkLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIG5hbWUgb2YgY3VycmVudCBsYW5ndWFnZS5cblx0ICogQHJldHVybnMge3N0cmluZ30gVGhlIEhUTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRva2VuIG9yIHRva2VuIHN0cmVhbS5cblx0ICogQG1lbWJlcm9mIFRva2VuXG5cdCAqIEBzdGF0aWNcblx0ICovXG5cdFRva2VuLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIHN0cmluZ2lmeShvLCBsYW5ndWFnZSkge1xuXHRcdGlmICh0eXBlb2YgbyA9PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIG87XG5cdFx0fVxuXHRcdGlmIChBcnJheS5pc0FycmF5KG8pKSB7XG5cdFx0XHR2YXIgcyA9ICcnO1xuXHRcdFx0by5mb3JFYWNoKGZ1bmN0aW9uIChlKSB7XG5cdFx0XHRcdHMgKz0gc3RyaW5naWZ5KGUsIGxhbmd1YWdlKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHM7XG5cdFx0fVxuXG5cdFx0dmFyIGVudiA9IHtcblx0XHRcdHR5cGU6IG8udHlwZSxcblx0XHRcdGNvbnRlbnQ6IHN0cmluZ2lmeShvLmNvbnRlbnQsIGxhbmd1YWdlKSxcblx0XHRcdHRhZzogJ3NwYW4nLFxuXHRcdFx0Y2xhc3NlczogWyd0b2tlbicsIG8udHlwZV0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB7fSxcblx0XHRcdGxhbmd1YWdlOiBsYW5ndWFnZVxuXHRcdH07XG5cblx0XHR2YXIgYWxpYXNlcyA9IG8uYWxpYXM7XG5cdFx0aWYgKGFsaWFzZXMpIHtcblx0XHRcdGlmIChBcnJheS5pc0FycmF5KGFsaWFzZXMpKSB7XG5cdFx0XHRcdEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGVudi5jbGFzc2VzLCBhbGlhc2VzKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGVudi5jbGFzc2VzLnB1c2goYWxpYXNlcyk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Xy5ob29rcy5ydW4oJ3dyYXAnLCBlbnYpO1xuXG5cdFx0dmFyIGF0dHJpYnV0ZXMgPSAnJztcblx0XHRmb3IgKHZhciBuYW1lIGluIGVudi5hdHRyaWJ1dGVzKSB7XG5cdFx0XHRhdHRyaWJ1dGVzICs9ICcgJyArIG5hbWUgKyAnPVwiJyArIChlbnYuYXR0cmlidXRlc1tuYW1lXSB8fCAnJykucmVwbGFjZSgvXCIvZywgJyZxdW90OycpICsgJ1wiJztcblx0XHR9XG5cblx0XHRyZXR1cm4gJzwnICsgZW52LnRhZyArICcgY2xhc3M9XCInICsgZW52LmNsYXNzZXMuam9pbignICcpICsgJ1wiJyArIGF0dHJpYnV0ZXMgKyAnPicgKyBlbnYuY29udGVudCArICc8LycgKyBlbnYudGFnICsgJz4nO1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge1JlZ0V4cH0gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gcG9zXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0XG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9va2JlaGluZFxuXHQgKiBAcmV0dXJucyB7UmVnRXhwRXhlY0FycmF5IHwgbnVsbH1cblx0ICovXG5cdGZ1bmN0aW9uIG1hdGNoUGF0dGVybihwYXR0ZXJuLCBwb3MsIHRleHQsIGxvb2tiZWhpbmQpIHtcblx0XHRwYXR0ZXJuLmxhc3RJbmRleCA9IHBvcztcblx0XHR2YXIgbWF0Y2ggPSBwYXR0ZXJuLmV4ZWModGV4dCk7XG5cdFx0aWYgKG1hdGNoICYmIGxvb2tiZWhpbmQgJiYgbWF0Y2hbMV0pIHtcblx0XHRcdC8vIGNoYW5nZSB0aGUgbWF0Y2ggdG8gcmVtb3ZlIHRoZSB0ZXh0IG1hdGNoZWQgYnkgdGhlIFByaXNtIGxvb2tiZWhpbmQgZ3JvdXBcblx0XHRcdHZhciBsb29rYmVoaW5kTGVuZ3RoID0gbWF0Y2hbMV0ubGVuZ3RoO1xuXHRcdFx0bWF0Y2guaW5kZXggKz0gbG9va2JlaGluZExlbmd0aDtcblx0XHRcdG1hdGNoWzBdID0gbWF0Y2hbMF0uc2xpY2UobG9va2JlaGluZExlbmd0aCk7XG5cdFx0fVxuXHRcdHJldHVybiBtYXRjaDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGV4dFxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3Q8c3RyaW5nIHwgVG9rZW4+fSB0b2tlbkxpc3Rcblx0ICogQHBhcmFtIHthbnl9IGdyYW1tYXJcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0Tm9kZTxzdHJpbmcgfCBUb2tlbj59IHN0YXJ0Tm9kZVxuXHQgKiBAcGFyYW0ge251bWJlcn0gc3RhcnRQb3Ncblx0ICogQHBhcmFtIHtSZW1hdGNoT3B0aW9uc30gW3JlbWF0Y2hdXG5cdCAqIEByZXR1cm5zIHt2b2lkfVxuXHQgKiBAcHJpdmF0ZVxuXHQgKlxuXHQgKiBAdHlwZWRlZiBSZW1hdGNoT3B0aW9uc1xuXHQgKiBAcHJvcGVydHkge3N0cmluZ30gY2F1c2Vcblx0ICogQHByb3BlcnR5IHtudW1iZXJ9IHJlYWNoXG5cdCAqL1xuXHRmdW5jdGlvbiBtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCBzdGFydE5vZGUsIHN0YXJ0UG9zLCByZW1hdGNoKSB7XG5cdFx0Zm9yICh2YXIgdG9rZW4gaW4gZ3JhbW1hcikge1xuXHRcdFx0aWYgKCFncmFtbWFyLmhhc093blByb3BlcnR5KHRva2VuKSB8fCAhZ3JhbW1hclt0b2tlbl0pIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHZhciBwYXR0ZXJucyA9IGdyYW1tYXJbdG9rZW5dO1xuXHRcdFx0cGF0dGVybnMgPSBBcnJheS5pc0FycmF5KHBhdHRlcm5zKSA/IHBhdHRlcm5zIDogW3BhdHRlcm5zXTtcblxuXHRcdFx0Zm9yICh2YXIgaiA9IDA7IGogPCBwYXR0ZXJucy5sZW5ndGg7ICsraikge1xuXHRcdFx0XHRpZiAocmVtYXRjaCAmJiByZW1hdGNoLmNhdXNlID09IHRva2VuICsgJywnICsgaikge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBwYXR0ZXJuT2JqID0gcGF0dGVybnNbal07XG5cdFx0XHRcdHZhciBpbnNpZGUgPSBwYXR0ZXJuT2JqLmluc2lkZTtcblx0XHRcdFx0dmFyIGxvb2tiZWhpbmQgPSAhIXBhdHRlcm5PYmoubG9va2JlaGluZDtcblx0XHRcdFx0dmFyIGdyZWVkeSA9ICEhcGF0dGVybk9iai5ncmVlZHk7XG5cdFx0XHRcdHZhciBhbGlhcyA9IHBhdHRlcm5PYmouYWxpYXM7XG5cblx0XHRcdFx0aWYgKGdyZWVkeSAmJiAhcGF0dGVybk9iai5wYXR0ZXJuLmdsb2JhbCkge1xuXHRcdFx0XHRcdC8vIFdpdGhvdXQgdGhlIGdsb2JhbCBmbGFnLCBsYXN0SW5kZXggd29uJ3Qgd29ya1xuXHRcdFx0XHRcdHZhciBmbGFncyA9IHBhdHRlcm5PYmoucGF0dGVybi50b1N0cmluZygpLm1hdGNoKC9baW1zdXldKiQvKVswXTtcblx0XHRcdFx0XHRwYXR0ZXJuT2JqLnBhdHRlcm4gPSBSZWdFeHAocGF0dGVybk9iai5wYXR0ZXJuLnNvdXJjZSwgZmxhZ3MgKyAnZycpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0LyoqIEB0eXBlIHtSZWdFeHB9ICovXG5cdFx0XHRcdHZhciBwYXR0ZXJuID0gcGF0dGVybk9iai5wYXR0ZXJuIHx8IHBhdHRlcm5PYmo7XG5cblx0XHRcdFx0Zm9yICggLy8gaXRlcmF0ZSB0aGUgdG9rZW4gbGlzdCBhbmQga2VlcCB0cmFjayBvZiB0aGUgY3VycmVudCB0b2tlbi9zdHJpbmcgcG9zaXRpb25cblx0XHRcdFx0XHR2YXIgY3VycmVudE5vZGUgPSBzdGFydE5vZGUubmV4dCwgcG9zID0gc3RhcnRQb3M7XG5cdFx0XHRcdFx0Y3VycmVudE5vZGUgIT09IHRva2VuTGlzdC50YWlsO1xuXHRcdFx0XHRcdHBvcyArPSBjdXJyZW50Tm9kZS52YWx1ZS5sZW5ndGgsIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUubmV4dFxuXHRcdFx0XHQpIHtcblxuXHRcdFx0XHRcdGlmIChyZW1hdGNoICYmIHBvcyA+PSByZW1hdGNoLnJlYWNoKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR2YXIgc3RyID0gY3VycmVudE5vZGUudmFsdWU7XG5cblx0XHRcdFx0XHRpZiAodG9rZW5MaXN0Lmxlbmd0aCA+IHRleHQubGVuZ3RoKSB7XG5cdFx0XHRcdFx0XHQvLyBTb21ldGhpbmcgd2VudCB0ZXJyaWJseSB3cm9uZywgQUJPUlQsIEFCT1JUIVxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChzdHIgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHJlbW92ZUNvdW50ID0gMTsgLy8gdGhpcyBpcyB0aGUgdG8gcGFyYW1ldGVyIG9mIHJlbW92ZUJldHdlZW5cblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cblx0XHRcdFx0XHRpZiAoZ3JlZWR5KSB7XG5cdFx0XHRcdFx0XHRtYXRjaCA9IG1hdGNoUGF0dGVybihwYXR0ZXJuLCBwb3MsIHRleHQsIGxvb2tiZWhpbmQpO1xuXHRcdFx0XHRcdFx0aWYgKCFtYXRjaCB8fCBtYXRjaC5pbmRleCA+PSB0ZXh0Lmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFyIGZyb20gPSBtYXRjaC5pbmRleDtcblx0XHRcdFx0XHRcdHZhciB0byA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdFx0XHRcdFx0dmFyIHAgPSBwb3M7XG5cblx0XHRcdFx0XHRcdC8vIGZpbmQgdGhlIG5vZGUgdGhhdCBjb250YWlucyB0aGUgbWF0Y2hcblx0XHRcdFx0XHRcdHAgKz0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKGZyb20gPj0gcCkge1xuXHRcdFx0XHRcdFx0XHRjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLm5leHQ7XG5cdFx0XHRcdFx0XHRcdHAgKz0gY3VycmVudE5vZGUudmFsdWUubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0Ly8gYWRqdXN0IHBvcyAoYW5kIHApXG5cdFx0XHRcdFx0XHRwIC09IGN1cnJlbnROb2RlLnZhbHVlLmxlbmd0aDtcblx0XHRcdFx0XHRcdHBvcyA9IHA7XG5cblx0XHRcdFx0XHRcdC8vIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBUb2tlbiwgdGhlbiB0aGUgbWF0Y2ggc3RhcnRzIGluc2lkZSBhbm90aGVyIFRva2VuLCB3aGljaCBpcyBpbnZhbGlkXG5cdFx0XHRcdFx0XHRpZiAoY3VycmVudE5vZGUudmFsdWUgaW5zdGFuY2VvZiBUb2tlbikge1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gZmluZCB0aGUgbGFzdCBub2RlIHdoaWNoIGlzIGFmZmVjdGVkIGJ5IHRoaXMgbWF0Y2hcblx0XHRcdFx0XHRcdGZvciAoXG5cdFx0XHRcdFx0XHRcdHZhciBrID0gY3VycmVudE5vZGU7XG5cdFx0XHRcdFx0XHRcdGsgIT09IHRva2VuTGlzdC50YWlsICYmIChwIDwgdG8gfHwgdHlwZW9mIGsudmFsdWUgPT09ICdzdHJpbmcnKTtcblx0XHRcdFx0XHRcdFx0ayA9IGsubmV4dFxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdHJlbW92ZUNvdW50Kys7XG5cdFx0XHRcdFx0XHRcdHAgKz0gay52YWx1ZS5sZW5ndGg7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZW1vdmVDb3VudC0tO1xuXG5cdFx0XHRcdFx0XHQvLyByZXBsYWNlIHdpdGggdGhlIG5ldyBtYXRjaFxuXHRcdFx0XHRcdFx0c3RyID0gdGV4dC5zbGljZShwb3MsIHApO1xuXHRcdFx0XHRcdFx0bWF0Y2guaW5kZXggLT0gcG9zO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRtYXRjaCA9IG1hdGNoUGF0dGVybihwYXR0ZXJuLCAwLCBzdHIsIGxvb2tiZWhpbmQpO1xuXHRcdFx0XHRcdFx0aWYgKCFtYXRjaCkge1xuXHRcdFx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVkZWNsYXJlXG5cdFx0XHRcdFx0dmFyIGZyb20gPSBtYXRjaC5pbmRleDtcblx0XHRcdFx0XHR2YXIgbWF0Y2hTdHIgPSBtYXRjaFswXTtcblx0XHRcdFx0XHR2YXIgYmVmb3JlID0gc3RyLnNsaWNlKDAsIGZyb20pO1xuXHRcdFx0XHRcdHZhciBhZnRlciA9IHN0ci5zbGljZShmcm9tICsgbWF0Y2hTdHIubGVuZ3RoKTtcblxuXHRcdFx0XHRcdHZhciByZWFjaCA9IHBvcyArIHN0ci5sZW5ndGg7XG5cdFx0XHRcdFx0aWYgKHJlbWF0Y2ggJiYgcmVhY2ggPiByZW1hdGNoLnJlYWNoKSB7XG5cdFx0XHRcdFx0XHRyZW1hdGNoLnJlYWNoID0gcmVhY2g7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0dmFyIHJlbW92ZUZyb20gPSBjdXJyZW50Tm9kZS5wcmV2O1xuXG5cdFx0XHRcdFx0aWYgKGJlZm9yZSkge1xuXHRcdFx0XHRcdFx0cmVtb3ZlRnJvbSA9IGFkZEFmdGVyKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgYmVmb3JlKTtcblx0XHRcdFx0XHRcdHBvcyArPSBiZWZvcmUubGVuZ3RoO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJlbW92ZVJhbmdlKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgcmVtb3ZlQ291bnQpO1xuXG5cdFx0XHRcdFx0dmFyIHdyYXBwZWQgPSBuZXcgVG9rZW4odG9rZW4sIGluc2lkZSA/IF8udG9rZW5pemUobWF0Y2hTdHIsIGluc2lkZSkgOiBtYXRjaFN0ciwgYWxpYXMsIG1hdGNoU3RyKTtcblx0XHRcdFx0XHRjdXJyZW50Tm9kZSA9IGFkZEFmdGVyKHRva2VuTGlzdCwgcmVtb3ZlRnJvbSwgd3JhcHBlZCk7XG5cblx0XHRcdFx0XHRpZiAoYWZ0ZXIpIHtcblx0XHRcdFx0XHRcdGFkZEFmdGVyKHRva2VuTGlzdCwgY3VycmVudE5vZGUsIGFmdGVyKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAocmVtb3ZlQ291bnQgPiAxKSB7XG5cdFx0XHRcdFx0XHQvLyBhdCBsZWFzdCBvbmUgVG9rZW4gb2JqZWN0IHdhcyByZW1vdmVkLCBzbyB3ZSBoYXZlIHRvIGRvIHNvbWUgcmVtYXRjaGluZ1xuXHRcdFx0XHRcdFx0Ly8gdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgdGhlIGN1cnJlbnQgcGF0dGVybiBpcyBncmVlZHlcblxuXHRcdFx0XHRcdFx0LyoqIEB0eXBlIHtSZW1hdGNoT3B0aW9uc30gKi9cblx0XHRcdFx0XHRcdHZhciBuZXN0ZWRSZW1hdGNoID0ge1xuXHRcdFx0XHRcdFx0XHRjYXVzZTogdG9rZW4gKyAnLCcgKyBqLFxuXHRcdFx0XHRcdFx0XHRyZWFjaDogcmVhY2hcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRtYXRjaEdyYW1tYXIodGV4dCwgdG9rZW5MaXN0LCBncmFtbWFyLCBjdXJyZW50Tm9kZS5wcmV2LCBwb3MsIG5lc3RlZFJlbWF0Y2gpO1xuXG5cdFx0XHRcdFx0XHQvLyB0aGUgcmVhY2ggbWlnaHQgaGF2ZSBiZWVuIGV4dGVuZGVkIGJlY2F1c2Ugb2YgdGhlIHJlbWF0Y2hpbmdcblx0XHRcdFx0XHRcdGlmIChyZW1hdGNoICYmIG5lc3RlZFJlbWF0Y2gucmVhY2ggPiByZW1hdGNoLnJlYWNoKSB7XG5cdFx0XHRcdFx0XHRcdHJlbWF0Y2gucmVhY2ggPSBuZXN0ZWRSZW1hdGNoLnJlYWNoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBAdHlwZWRlZiBMaW5rZWRMaXN0Tm9kZVxuXHQgKiBAcHJvcGVydHkge1R9IHZhbHVlXG5cdCAqIEBwcm9wZXJ0eSB7TGlua2VkTGlzdE5vZGU8VD4gfCBudWxsfSBwcmV2IFRoZSBwcmV2aW91cyBub2RlLlxuXHQgKiBAcHJvcGVydHkge0xpbmtlZExpc3ROb2RlPFQ+IHwgbnVsbH0gbmV4dCBUaGUgbmV4dCBub2RlLlxuXHQgKiBAdGVtcGxhdGUgVFxuXHQgKiBAcHJpdmF0ZVxuXHQgKi9cblxuXHQvKipcblx0ICogQHRlbXBsYXRlIFRcblx0ICogQHByaXZhdGVcblx0ICovXG5cdGZ1bmN0aW9uIExpbmtlZExpc3QoKSB7XG5cdFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cblx0XHR2YXIgaGVhZCA9IHsgdmFsdWU6IG51bGwsIHByZXY6IG51bGwsIG5leHQ6IG51bGwgfTtcblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHZhciB0YWlsID0geyB2YWx1ZTogbnVsbCwgcHJldjogaGVhZCwgbmV4dDogbnVsbCB9O1xuXHRcdGhlYWQubmV4dCA9IHRhaWw7XG5cblx0XHQvKiogQHR5cGUge0xpbmtlZExpc3ROb2RlPFQ+fSAqL1xuXHRcdHRoaXMuaGVhZCA9IGhlYWQ7XG5cdFx0LyoqIEB0eXBlIHtMaW5rZWRMaXN0Tm9kZTxUPn0gKi9cblx0XHR0aGlzLnRhaWwgPSB0YWlsO1xuXHRcdHRoaXMubGVuZ3RoID0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIGEgbmV3IG5vZGUgd2l0aCB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGxpc3QuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdDxUPn0gbGlzdFxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3ROb2RlPFQ+fSBub2RlXG5cdCAqIEBwYXJhbSB7VH0gdmFsdWVcblx0ICogQHJldHVybnMge0xpbmtlZExpc3ROb2RlPFQ+fSBUaGUgYWRkZWQgbm9kZS5cblx0ICogQHRlbXBsYXRlIFRcblx0ICovXG5cdGZ1bmN0aW9uIGFkZEFmdGVyKGxpc3QsIG5vZGUsIHZhbHVlKSB7XG5cdFx0Ly8gYXNzdW1lcyB0aGF0IG5vZGUgIT0gbGlzdC50YWlsICYmIHZhbHVlcy5sZW5ndGggPj0gMFxuXHRcdHZhciBuZXh0ID0gbm9kZS5uZXh0O1xuXG5cdFx0dmFyIG5ld05vZGUgPSB7IHZhbHVlOiB2YWx1ZSwgcHJldjogbm9kZSwgbmV4dDogbmV4dCB9O1xuXHRcdG5vZGUubmV4dCA9IG5ld05vZGU7XG5cdFx0bmV4dC5wcmV2ID0gbmV3Tm9kZTtcblx0XHRsaXN0Lmxlbmd0aCsrO1xuXG5cdFx0cmV0dXJuIG5ld05vZGU7XG5cdH1cblx0LyoqXG5cdCAqIFJlbW92ZXMgYGNvdW50YCBub2RlcyBhZnRlciB0aGUgZ2l2ZW4gbm9kZS4gVGhlIGdpdmVuIG5vZGUgd2lsbCBub3QgYmUgcmVtb3ZlZC5cblx0ICpcblx0ICogQHBhcmFtIHtMaW5rZWRMaXN0PFQ+fSBsaXN0XG5cdCAqIEBwYXJhbSB7TGlua2VkTGlzdE5vZGU8VD59IG5vZGVcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNvdW50XG5cdCAqIEB0ZW1wbGF0ZSBUXG5cdCAqL1xuXHRmdW5jdGlvbiByZW1vdmVSYW5nZShsaXN0LCBub2RlLCBjb3VudCkge1xuXHRcdHZhciBuZXh0ID0gbm9kZS5uZXh0O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgY291bnQgJiYgbmV4dCAhPT0gbGlzdC50YWlsOyBpKyspIHtcblx0XHRcdG5leHQgPSBuZXh0Lm5leHQ7XG5cdFx0fVxuXHRcdG5vZGUubmV4dCA9IG5leHQ7XG5cdFx0bmV4dC5wcmV2ID0gbm9kZTtcblx0XHRsaXN0Lmxlbmd0aCAtPSBpO1xuXHR9XG5cdC8qKlxuXHQgKiBAcGFyYW0ge0xpbmtlZExpc3Q8VD59IGxpc3Rcblx0ICogQHJldHVybnMge1RbXX1cblx0ICogQHRlbXBsYXRlIFRcblx0ICovXG5cdGZ1bmN0aW9uIHRvQXJyYXkobGlzdCkge1xuXHRcdHZhciBhcnJheSA9IFtdO1xuXHRcdHZhciBub2RlID0gbGlzdC5oZWFkLm5leHQ7XG5cdFx0d2hpbGUgKG5vZGUgIT09IGxpc3QudGFpbCkge1xuXHRcdFx0YXJyYXkucHVzaChub2RlLnZhbHVlKTtcblx0XHRcdG5vZGUgPSBub2RlLm5leHQ7XG5cdFx0fVxuXHRcdHJldHVybiBhcnJheTtcblx0fVxuXG5cblx0aWYgKCFfc2VsZi5kb2N1bWVudCkge1xuXHRcdGlmICghX3NlbGYuYWRkRXZlbnRMaXN0ZW5lcikge1xuXHRcdFx0Ly8gaW4gTm9kZS5qc1xuXHRcdFx0cmV0dXJuIF87XG5cdFx0fVxuXG5cdFx0aWYgKCFfLmRpc2FibGVXb3JrZXJNZXNzYWdlSGFuZGxlcikge1xuXHRcdFx0Ly8gSW4gd29ya2VyXG5cdFx0XHRfc2VsZi5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuY3Rpb24gKGV2dCkge1xuXHRcdFx0XHR2YXIgbWVzc2FnZSA9IEpTT04ucGFyc2UoZXZ0LmRhdGEpO1xuXHRcdFx0XHR2YXIgbGFuZyA9IG1lc3NhZ2UubGFuZ3VhZ2U7XG5cdFx0XHRcdHZhciBjb2RlID0gbWVzc2FnZS5jb2RlO1xuXHRcdFx0XHR2YXIgaW1tZWRpYXRlQ2xvc2UgPSBtZXNzYWdlLmltbWVkaWF0ZUNsb3NlO1xuXG5cdFx0XHRcdF9zZWxmLnBvc3RNZXNzYWdlKF8uaGlnaGxpZ2h0KGNvZGUsIF8ubGFuZ3VhZ2VzW2xhbmddLCBsYW5nKSk7XG5cdFx0XHRcdGlmIChpbW1lZGlhdGVDbG9zZSkge1xuXHRcdFx0XHRcdF9zZWxmLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0sIGZhbHNlKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gXztcblx0fVxuXG5cdC8vIEdldCBjdXJyZW50IHNjcmlwdCBhbmQgaGlnaGxpZ2h0XG5cdHZhciBzY3JpcHQgPSBfLnV0aWwuY3VycmVudFNjcmlwdCgpO1xuXG5cdGlmIChzY3JpcHQpIHtcblx0XHRfLmZpbGVuYW1lID0gc2NyaXB0LnNyYztcblxuXHRcdGlmIChzY3JpcHQuaGFzQXR0cmlidXRlKCdkYXRhLW1hbnVhbCcpKSB7XG5cdFx0XHRfLm1hbnVhbCA9IHRydWU7XG5cdFx0fVxuXHR9XG5cblx0ZnVuY3Rpb24gaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKCkge1xuXHRcdGlmICghXy5tYW51YWwpIHtcblx0XHRcdF8uaGlnaGxpZ2h0QWxsKCk7XG5cdFx0fVxuXHR9XG5cblx0aWYgKCFfLm1hbnVhbCkge1xuXHRcdC8vIElmIHRoZSBkb2N1bWVudCBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhlbiB3ZSdsbCB1c2UgRE9NQ29udGVudExvYWRlZC5cblx0XHQvLyBJZiB0aGUgZG9jdW1lbnQgc3RhdGUgaXMgXCJpbnRlcmFjdGl2ZVwiIGFuZCB0aGUgcHJpc20uanMgc2NyaXB0IGlzIGRlZmVycmVkLCB0aGVuIHdlJ2xsIGFsc28gdXNlIHRoZVxuXHRcdC8vIERPTUNvbnRlbnRMb2FkZWQgZXZlbnQgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBzb21lIHBsdWdpbnMgb3IgbGFuZ3VhZ2VzIHdoaWNoIGhhdmUgYWxzbyBiZWVuIGRlZmVycmVkIGFuZCB0aGV5XG5cdFx0Ly8gbWlnaHQgdGFrZSBsb25nZXIgb25lIGFuaW1hdGlvbiBmcmFtZSB0byBleGVjdXRlIHdoaWNoIGNhbiBjcmVhdGUgYSByYWNlIGNvbmRpdGlvbiB3aGVyZSBvbmx5IHNvbWUgcGx1Z2lucyBoYXZlXG5cdFx0Ly8gYmVlbiBsb2FkZWQgd2hlbiBQcmlzbS5oaWdobGlnaHRBbGwoKSBpcyBleGVjdXRlZCwgZGVwZW5kaW5nIG9uIGhvdyBmYXN0IHJlc291cmNlcyBhcmUgbG9hZGVkLlxuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9pc3N1ZXMvMjEwMlxuXHRcdHZhciByZWFkeVN0YXRlID0gZG9jdW1lbnQucmVhZHlTdGF0ZTtcblx0XHRpZiAocmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnIHx8IHJlYWR5U3RhdGUgPT09ICdpbnRlcmFjdGl2ZScgJiYgc2NyaXB0ICYmIHNjcmlwdC5kZWZlcikge1xuXHRcdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjayk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSB7XG5cdFx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoaGlnaGxpZ2h0QXV0b21hdGljYWxseUNhbGxiYWNrKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KGhpZ2hsaWdodEF1dG9tYXRpY2FsbHlDYWxsYmFjaywgMTYpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBfO1xuXG59KF9zZWxmKSk7XG5cbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IFByaXNtO1xufVxuXG4vLyBoYWNrIGZvciBjb21wb25lbnRzIHRvIHdvcmsgY29ycmVjdGx5IGluIG5vZGUuanNcbmlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuXHRnbG9iYWwuUHJpc20gPSBQcmlzbTtcbn1cblxuLy8gc29tZSBhZGRpdGlvbmFsIGRvY3VtZW50YXRpb24vdHlwZXNcblxuLyoqXG4gKiBUaGUgZXhwYW5zaW9uIG9mIGEgc2ltcGxlIGBSZWdFeHBgIGxpdGVyYWwgdG8gc3VwcG9ydCBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG4gKlxuICogQHR5cGVkZWYgR3JhbW1hclRva2VuXG4gKiBAcHJvcGVydHkge1JlZ0V4cH0gcGF0dGVybiBUaGUgcmVndWxhciBleHByZXNzaW9uIG9mIHRoZSB0b2tlbi5cbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gW2xvb2tiZWhpbmQ9ZmFsc2VdIElmIGB0cnVlYCwgdGhlbiB0aGUgZmlyc3QgY2FwdHVyaW5nIGdyb3VwIG9mIGBwYXR0ZXJuYCB3aWxsIChlZmZlY3RpdmVseSlcbiAqIGJlaGF2ZSBhcyBhIGxvb2tiZWhpbmQgZ3JvdXAgbWVhbmluZyB0aGF0IHRoZSBjYXB0dXJlZCB0ZXh0IHdpbGwgbm90IGJlIHBhcnQgb2YgdGhlIG1hdGNoZWQgdGV4dCBvZiB0aGUgbmV3IHRva2VuLlxuICogQHByb3BlcnR5IHtib29sZWFufSBbZ3JlZWR5PWZhbHNlXSBXaGV0aGVyIHRoZSB0b2tlbiBpcyBncmVlZHkuXG4gKiBAcHJvcGVydHkge3N0cmluZ3xzdHJpbmdbXX0gW2FsaWFzXSBBbiBvcHRpb25hbCBhbGlhcyBvciBsaXN0IG9mIGFsaWFzZXMuXG4gKiBAcHJvcGVydHkge0dyYW1tYXJ9IFtpbnNpZGVdIFRoZSBuZXN0ZWQgZ3JhbW1hciBvZiB0aGlzIHRva2VuLlxuICpcbiAqIFRoZSBgaW5zaWRlYCBncmFtbWFyIHdpbGwgYmUgdXNlZCB0byB0b2tlbml6ZSB0aGUgdGV4dCB2YWx1ZSBvZiBlYWNoIHRva2VuIG9mIHRoaXMga2luZC5cbiAqXG4gKiBUaGlzIGNhbiBiZSB1c2VkIHRvIG1ha2UgbmVzdGVkIGFuZCBldmVuIHJlY3Vyc2l2ZSBsYW5ndWFnZSBkZWZpbml0aW9ucy5cbiAqXG4gKiBOb3RlOiBUaGlzIGNhbiBjYXVzZSBpbmZpbml0ZSByZWN1cnNpb24uIEJlIGNhcmVmdWwgd2hlbiB5b3UgZW1iZWQgZGlmZmVyZW50IGxhbmd1YWdlcyBvciBldmVuIHRoZSBzYW1lIGxhbmd1YWdlIGludG9cbiAqIGVhY2ggYW5vdGhlci5cbiAqIEBnbG9iYWxcbiAqIEBwdWJsaWNcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIEdyYW1tYXJcbiAqIEB0eXBlIHtPYmplY3Q8c3RyaW5nLCBSZWdFeHAgfCBHcmFtbWFyVG9rZW4gfCBBcnJheTxSZWdFeHAgfCBHcmFtbWFyVG9rZW4+Pn1cbiAqIEBwcm9wZXJ0eSB7R3JhbW1hcn0gW3Jlc3RdIEFuIG9wdGlvbmFsIGdyYW1tYXIgb2JqZWN0IHRoYXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGlzIGdyYW1tYXIuXG4gKiBAZ2xvYmFsXG4gKiBAcHVibGljXG4gKi9cblxuLyoqXG4gKiBBIGZ1bmN0aW9uIHdoaWNoIHdpbGwgaW52b2tlZCBhZnRlciBhbiBlbGVtZW50IHdhcyBzdWNjZXNzZnVsbHkgaGlnaGxpZ2h0ZWQuXG4gKlxuICogQGNhbGxiYWNrIEhpZ2hsaWdodENhbGxiYWNrXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgc3VjY2Vzc2Z1bGx5IGhpZ2hsaWdodGVkLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZ2xvYmFsXG4gKiBAcHVibGljXG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgSG9va0NhbGxiYWNrXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IGVudiBUaGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIG9mIHRoZSBob29rLlxuICogQHJldHVybnMge3ZvaWR9XG4gKiBAZ2xvYmFsXG4gKiBAcHVibGljXG4gKi9cbjtcblByaXNtLmxhbmd1YWdlcy5tYXJrdXAgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC88IS0tKD86KD8hPCEtLSlbXFxzXFxTXSkqPy0tPi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdwcm9sb2cnOiB7XG5cdFx0cGF0dGVybjogLzxcXD9bXFxzXFxTXSs/XFw/Pi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdkb2N0eXBlJzoge1xuXHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi94bWwvI05ULWRvY3R5cGVkZWNsXG5cdFx0cGF0dGVybjogLzwhRE9DVFlQRSg/OltePlwiJ1tcXF1dfFwiW15cIl0qXCJ8J1teJ10qJykrKD86XFxbKD86W148XCInXFxdXXxcIlteXCJdKlwifCdbXiddKid8PCg/ISEtLSl8PCEtLSg/OlteLV18LSg/IS0+KSkqLS0+KSpcXF1cXHMqKT8+L2ksXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVybmFsLXN1YnNldCc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheW15cXFtdKlxcWylbXFxzXFxTXSsoPz1cXF0+JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcInwnW14nXSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL148IXw+JHxbW1xcXV0vLFxuXHRcdFx0J2RvY3R5cGUtdGFnJzogL15ET0NUWVBFL2ksXG5cdFx0XHQnbmFtZSc6IC9bXlxcczw+J1wiXSsvXG5cdFx0fVxuXHR9LFxuXHQnY2RhdGEnOiB7XG5cdFx0cGF0dGVybjogLzwhXFxbQ0RBVEFcXFtbXFxzXFxTXSo/XFxdXFxdPi9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndGFnJzoge1xuXHRcdHBhdHRlcm46IC88XFwvPyg/IVxcZClbXlxccz5cXC89JDwlXSsoPzpcXHMoPzpcXHMqW15cXHM+XFwvPV0rKD86XFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKyg/PVtcXHM+XSkpfCg/PVtcXHMvPl0pKSkrKT9cXHMqXFwvPz4vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9ePFxcLz9bXlxccz5cXC9dKy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePFxcLz8vLFxuXHRcdFx0XHRcdCduYW1lc3BhY2UnOiAvXlteXFxzPlxcLzpdKzovXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3BlY2lhbC1hdHRyJzogW10sXG5cdFx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLz1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKykvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9ePS8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnYXR0ci1lcXVhbHMnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVtcIiddfFtcIiddJC8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwvPz4vLFxuXHRcdFx0J2F0dHItbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL1teXFxzPlxcL10rLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IC9eW15cXHM+XFwvOl0rOi9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fVxuXHR9LFxuXHQnZW50aXR5JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8mW1xcZGEtel17MSw4fTsvaSxcblx0XHRcdGFsaWFzOiAnbmFtZWQtZW50aXR5J1xuXHRcdH0sXG5cdFx0LyYjeD9bXFxkYS1mXXsxLDh9Oy9pXG5cdF1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLmluc2lkZVsnZW50aXR5J10gPVxuXHRQcmlzbS5sYW5ndWFnZXMubWFya3VwWydlbnRpdHknXTtcblByaXNtLmxhbmd1YWdlcy5tYXJrdXBbJ2RvY3R5cGUnXS5pbnNpZGVbJ2ludGVybmFsLXN1YnNldCddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5cbi8vIFBsdWdpbiB0byBtYWtlIGVudGl0eSB0aXRsZSBzaG93IHRoZSByZWFsIGVudGl0eSwgaWRlYSBieSBSb21hbiBLb21hcm92XG5QcmlzbS5ob29rcy5hZGQoJ3dyYXAnLCBmdW5jdGlvbiAoZW52KSB7XG5cblx0aWYgKGVudi50eXBlID09PSAnZW50aXR5Jykge1xuXHRcdGVudi5hdHRyaWJ1dGVzWyd0aXRsZSddID0gZW52LmNvbnRlbnQucmVwbGFjZSgvJmFtcDsvLCAnJicpO1xuXHR9XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLCAnYWRkSW5saW5lZCcsIHtcblx0LyoqXG5cdCAqIEFkZHMgYW4gaW5saW5lZCBsYW5ndWFnZSB0byBtYXJrdXAuXG5cdCAqXG5cdCAqIEFuIGV4YW1wbGUgb2YgYW4gaW5saW5lZCBsYW5ndWFnZSBpcyBDU1Mgd2l0aCBgPHN0eWxlPmAgdGFncy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZyB0aGF0IGNvbnRhaW5zIHRoZSBpbmxpbmVkIGxhbmd1YWdlLiBUaGlzIG5hbWUgd2lsbCBiZSB0cmVhdGVkIGFzXG5cdCAqIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIFRoZSBsYW5ndWFnZSBrZXkuXG5cdCAqIEBleGFtcGxlXG5cdCAqIGFkZElubGluZWQoJ3N0eWxlJywgJ2NzcycpO1xuXHQgKi9cblx0dmFsdWU6IGZ1bmN0aW9uIGFkZElubGluZWQodGFnTmFtZSwgbGFuZykge1xuXHRcdHZhciBpbmNsdWRlZENkYXRhSW5zaWRlID0ge307XG5cdFx0aW5jbHVkZWRDZGF0YUluc2lkZVsnbGFuZ3VhZ2UtJyArIGxhbmddID0ge1xuXHRcdFx0cGF0dGVybjogLyhePCFcXFtDREFUQVxcWylbXFxzXFxTXSs/KD89XFxdXFxdPiQpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cblx0XHR9O1xuXHRcdGluY2x1ZGVkQ2RhdGFJbnNpZGVbJ2NkYXRhJ10gPSAvXjwhXFxbQ0RBVEFcXFt8XFxdXFxdPiQvaTtcblxuXHRcdHZhciBpbnNpZGUgPSB7XG5cdFx0XHQnaW5jbHVkZWQtY2RhdGEnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC88IVxcW0NEQVRBXFxbW1xcc1xcU10qP1xcXVxcXT4vaSxcblx0XHRcdFx0aW5zaWRlOiBpbmNsdWRlZENkYXRhSW5zaWRlXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRpbnNpZGVbJ2xhbmd1YWdlLScgKyBsYW5nXSA9IHtcblx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cblx0XHR9O1xuXG5cdFx0dmFyIGRlZiA9IHt9O1xuXHRcdGRlZlt0YWdOYW1lXSA9IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKDxfX1tePl0qPikoPzo8IVxcW0NEQVRBXFxbKD86W15cXF1dfFxcXSg/IVxcXT4pKSpcXF1cXF0+fCg/ITwhXFxbQ0RBVEFcXFspW1xcc1xcU10pKj8oPz08XFwvX18+KS8uc291cmNlLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRhZ05hbWU7IH0pLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogaW5zaWRlXG5cdFx0fTtcblxuXHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ21hcmt1cCcsICdjZGF0YScsIGRlZik7XG5cdH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLCAnYWRkQXR0cmlidXRlJywge1xuXHQvKipcblx0ICogQWRkcyBhbiBwYXR0ZXJuIHRvIGhpZ2hsaWdodCBsYW5ndWFnZXMgZW1iZWRkZWQgaW4gSFRNTCBhdHRyaWJ1dGVzLlxuXHQgKlxuXHQgKiBBbiBleGFtcGxlIG9mIGFuIGlubGluZWQgbGFuZ3VhZ2UgaXMgQ1NTIHdpdGggYHN0eWxlYCBhdHRyaWJ1dGVzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gYXR0ck5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhZyB0aGF0IGNvbnRhaW5zIHRoZSBpbmxpbmVkIGxhbmd1YWdlLiBUaGlzIG5hbWUgd2lsbCBiZSB0cmVhdGVkIGFzXG5cdCAqIGNhc2UgaW5zZW5zaXRpdmUuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5nIFRoZSBsYW5ndWFnZSBrZXkuXG5cdCAqIEBleGFtcGxlXG5cdCAqIGFkZEF0dHJpYnV0ZSgnc3R5bGUnLCAnY3NzJyk7XG5cdCAqL1xuXHR2YWx1ZTogZnVuY3Rpb24gKGF0dHJOYW1lLCBsYW5nKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcuaW5zaWRlWydzcGVjaWFsLWF0dHInXS5wdXNoKHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhefFtcIidcXHNdKS8uc291cmNlICsgJyg/OicgKyBhdHRyTmFtZSArICcpJyArIC9cXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCI+PV0rKD89W1xccz5dKSkvLnNvdXJjZSxcblx0XHRcdFx0J2knXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0ci1uYW1lJzogL15bXlxccz1dKy8sXG5cdFx0XHRcdCdhdHRyLXZhbHVlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC89W1xcc1xcU10rLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd2YWx1ZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhePVxccyooW1wiJ118KD8hW1wiJ10pKSlcXFNbXFxzXFxTXSooPz1cXDIkKS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiBbbGFuZywgJ2xhbmd1YWdlLScgKyBsYW5nXSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXj0vLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAnYXR0ci1lcXVhbHMnXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdC9cInwnL1xuXHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmh0bWwgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuUHJpc20ubGFuZ3VhZ2VzLm1hdGhtbCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrdXA7XG5QcmlzbS5sYW5ndWFnZXMuc3ZnID0gUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cDtcblxuUHJpc20ubGFuZ3VhZ2VzLnhtbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblByaXNtLmxhbmd1YWdlcy5zc21sID0gUHJpc20ubGFuZ3VhZ2VzLnhtbDtcblByaXNtLmxhbmd1YWdlcy5hdG9tID0gUHJpc20ubGFuZ3VhZ2VzLnhtbDtcblByaXNtLmxhbmd1YWdlcy5yc3MgPSBQcmlzbS5sYW5ndWFnZXMueG1sO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHN0cmluZyA9IC8oPzpcIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCJ8Jyg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteJ1xcXFxcXHJcXG5dKSonKS87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzcyA9IHtcblx0XHQnY29tbWVudCc6IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHQnYXRydWxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdAW1xcXFx3LV0oPzonICsgL1teO3tcXHNcIiddfFxccysoPyFcXHMpLy5zb3VyY2UgKyAnfCcgKyBzdHJpbmcuc291cmNlICsgJykqPycgKyAvKD86O3woPz1cXHMqXFx7KSkvLnNvdXJjZSksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3J1bGUnOiAvXkBbXFx3LV0rLyxcblx0XHRcdFx0J3NlbGVjdG9yLWZ1bmN0aW9uLWFyZ3VtZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxic2VsZWN0b3JcXHMqXFwoXFxzKig/IVtcXHMpXSkpKD86W14oKVxcc118XFxzKyg/IVtcXHMpXSl8XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkpKyg/PVxccypcXCkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OmFuZHxub3R8b25seXxvcikoPyFbXFx3LV0pLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdCd1cmwnOiB7XG5cdFx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy0zLyN1cmxzXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJ1xcXFxidXJsXFxcXCgoPzonICsgc3RyaW5nLnNvdXJjZSArICd8JyArIC8oPzpbXlxcXFxcXHJcXG4oKVwiJ118XFxcXFtcXHNcXFNdKSovLnNvdXJjZSArICcpXFxcXCknLCAnaScpLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9edXJsL2ksXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwofFxcKSQvLFxuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyBzdHJpbmcuc291cmNlICsgJyQnKSxcblx0XHRcdFx0XHRhbGlhczogJ3VybCdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3NlbGVjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXnxbe31cXFxcc10pW157fVxcXFxzXSg/Oltee307XCJcXCdcXFxcc118XFxcXHMrKD8hW1xcXFxze10pfCcgKyBzdHJpbmcuc291cmNlICsgJykqKD89XFxcXHMqXFxcXHspJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14tXFx3XFx4QTAtXFx1RkZGRl0pKD8hXFxzKVstX2EtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVstXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyo6KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ltcG9ydGFudCc6IC8haW1wb3J0YW50XFxiL2ksXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLWEtejAtOV0pWy1hLXowLTldKyg/PVxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fTs6LF0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzc1snYXRydWxlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuY3NzO1xuXG5cdHZhciBtYXJrdXAgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuXHRpZiAobWFya3VwKSB7XG5cdFx0bWFya3VwLnRhZy5hZGRJbmxpbmVkKCdzdHlsZScsICdjc3MnKTtcblx0XHRtYXJrdXAudGFnLmFkZEF0dHJpYnV0ZSgnc3R5bGUnLCAnY3NzJyk7XG5cdH1cblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuY2xpa2UgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxpbnRlcmZhY2V8bmV3fHRyYWl0KVxccyt8XFxiY2F0Y2hcXHMrXFwoKVtcXHcuXFxcXF0rL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLlxcXFxdL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2F0Y2h8Y29udGludWV8ZG98ZWxzZXxmaW5hbGx5fGZvcnxmdW5jdGlvbnxpZnxpbnxpbnN0YW5jZW9mfG5ld3xudWxsfHJldHVybnx0aHJvd3x0cnl8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxcKCkvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogL1s8Pl09P3xbIT1dPT89P3wtLT98XFwrXFwrP3wmJj98XFx8XFx8P3xbPyovfl4lXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdFByaXNtLmxhbmd1YWdlcy5jbGlrZVsnY2xhc3MtbmFtZSddLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSkoPyFcXHMpW18kQS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFwuKD86Y29uc3RydWN0b3J8cHJvdG90eXBlKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxcfSlcXHMqKWNhdGNoXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dfFxcLlxcLlxcLlxccyopXFxiKD86YXN8YXNzZXJ0KD89XFxzKlxceyl8YXN5bmMoPz1cXHMqKD86ZnVuY3Rpb25cXGJ8XFwofFskXFx3XFx4QTAtXFx1RkZGRl18JCkpfGF3YWl0fGJyZWFrfGNhc2V8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHkoPz1cXHMqKD86XFx7fCQpKXxmb3J8ZnJvbSg/PVxccyooPzpbJ1wiXXwkKSl8ZnVuY3Rpb258KD86Z2V0fHNldCkoPz1cXHMqKD86WyNcXFskXFx3XFx4QTAtXFx1RkZGRl18JCkpfGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c3RhdGljfHN1cGVyfHN3aXRjaHx0aGlzfHRocm93fHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRdLFxuXHQvLyBBbGxvdyBmb3IgYWxsIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIChTZWUgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjAwODQ0NClcblx0J2Z1bmN0aW9uJzogLyM/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyooPzpcXC5cXHMqKD86YXBwbHl8YmluZHxjYWxsKVxccyopP1xcKCkvLFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC8oXnxbXlxcdyRdKS8uc291cmNlICtcblx0XHRcdCcoPzonICtcblx0XHRcdChcblx0XHRcdFx0Ly8gY29uc3RhbnRcblx0XHRcdFx0L05hTnxJbmZpbml0eS8uc291cmNlICtcblx0XHRcdFx0J3wnICtcblx0XHRcdFx0Ly8gYmluYXJ5IGludGVnZXJcblx0XHRcdFx0LzBbYkJdWzAxXSsoPzpfWzAxXSspKm4/Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBvY3RhbCBpbnRlZ2VyXG5cdFx0XHRcdC8wW29PXVswLTddKyg/Ol9bMC03XSspKm4/Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBoZXhhZGVjaW1hbCBpbnRlZ2VyXG5cdFx0XHRcdC8wW3hYXVtcXGRBLUZhLWZdKyg/Ol9bXFxkQS1GYS1mXSspKm4/Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBkZWNpbWFsIGJpZ2ludFxuXHRcdFx0XHQvXFxkKyg/Ol9cXGQrKSpuLy5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBkZWNpbWFsIG51bWJlciAoaW50ZWdlciBvciBmbG9hdCkgYnV0IG5vIGJpZ2ludFxuXHRcdFx0XHQvKD86XFxkKyg/Ol9cXGQrKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFwuXFxkKyg/Ol9cXGQrKSopKD86W0VlXVsrLV0/XFxkKyg/Ol9cXGQrKSopPy8uc291cmNlXG5cdFx0XHQpICtcblx0XHRcdCcpJyArXG5cdFx0XHQvKD8hW1xcdyRdKS8uc291cmNlXG5cdFx0KSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8XFwqXFwqPT98PT58JiY9P3xcXHxcXHw9P3xbIT1dPT18PDw9P3w+Pj4/PT98Wy0rKi8lJnxeIT08Pl09P3xcXC57M318XFw/XFw/PT98XFw/XFwuP3xbfjpdL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydjbGFzcy1uYW1lJ11bMF0ucGF0dGVybiA9IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8aW50ZXJmYWNlfG5ldylcXHMrKVtcXHcuXFxcXF0rLztcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdrZXl3b3JkJywge1xuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0Ly8gbG9va2JlaGluZFxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1kdXBlLWNoYXJhY3RlcnMtY2hhcmFjdGVyLWNsYXNzXG5cdFx0XHQvKCg/Ol58W14kXFx3XFx4QTAtXFx1RkZGRi5cIidcXF0pXFxzXXxcXGIoPzpyZXR1cm58eWllbGQpKVxccyopLy5zb3VyY2UgK1xuXHRcdFx0Ly8gUmVnZXggcGF0dGVybjpcblx0XHRcdC8vIFRoZXJlIGFyZSAyIHJlZ2V4IHBhdHRlcm5zIGhlcmUuIFRoZSBSZWdFeHAgc2V0IG5vdGF0aW9uIHByb3Bvc2FsIGFkZGVkIHN1cHBvcnQgZm9yIG5lc3RlZCBjaGFyYWN0ZXJcblx0XHRcdC8vIGNsYXNzZXMgaWYgdGhlIGB2YCBmbGFnIGlzIHByZXNlbnQuIFVuZm9ydHVuYXRlbHksIG5lc3RlZCBDQ3MgYXJlIGJvdGggY29udGV4dC1mcmVlIGFuZCBpbmNvbXBhdGlibGVcblx0XHRcdC8vIHdpdGggdGhlIG9ubHkgc3ludGF4LCBzbyB3ZSBoYXZlIHRvIGRlZmluZSAyIGRpZmZlcmVudCByZWdleCBwYXR0ZXJucy5cblx0XHRcdC9cXC8vLnNvdXJjZSArXG5cdFx0XHQnKD86JyArXG5cdFx0XHQvKD86XFxbKD86W15cXF1cXFxcXFxyXFxuXXxcXFxcLikqXFxdfFxcXFwufFteL1xcXFxcXFtcXHJcXG5dKStcXC9bZGdpbXl1c117MCw3fS8uc291cmNlICtcblx0XHRcdCd8JyArXG5cdFx0XHQvLyBgdmAgZmxhZyBzeW50YXguIFRoaXMgc3VwcG9ydHMgMyBsZXZlbHMgb2YgbmVzdGVkIGNoYXJhY3RlciBjbGFzc2VzLlxuXHRcdFx0Lyg/OlxcWyg/OlteW1xcXVxcXFxcXHJcXG5dfFxcXFwufFxcWyg/OlteW1xcXVxcXFxcXHJcXG5dfFxcXFwufFxcWyg/OlteW1xcXVxcXFxcXHJcXG5dfFxcXFwuKSpcXF0pKlxcXSkqXFxdfFxcXFwufFteL1xcXFxcXFtcXHJcXG5dKStcXC9bZGdpbXl1c117MCw3fXZbZGdpbXl1c117MCw3fS8uc291cmNlICtcblx0XHRcdCcpJyArXG5cdFx0XHQvLyBsb29rYWhlYWRcblx0XHRcdC8oPz0oPzpcXHN8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC8pKig/OiR8W1xcclxcbiwuOzp9KVxcXV18XFwvXFwvKSkvLnNvdXJjZVxuXHRcdCksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVnZXgtc291cmNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXC8pW1xcc1xcU10rKD89XFwvW2Etel0qJCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXJlZ2V4Jyxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucmVnZXhcblx0XHRcdH0sXG5cdFx0XHQncmVnZXgtZGVsaW1pdGVyJzogL15cXC98XFwvJC8sXG5cdFx0XHQncmVnZXgtZmxhZ3MnOiAvXlthLXpdKyQvLFxuXHRcdH1cblx0fSxcblx0Ly8gVGhpcyBtdXN0IGJlIGRlY2xhcmVkIGJlZm9yZSBrZXl3b3JkIGJlY2F1c2Ugd2UgdXNlIFwiZnVuY3Rpb25cIiBpbnNpZGUgdGhlIGxvb2stZm9yd2FyZFxuXHQnZnVuY3Rpb24tdmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogLyM/KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccypbPTpdXFxzKig/OmFzeW5jXFxzKik/KD86XFxiZnVuY3Rpb25cXGJ8KD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKilcXHMqPT4pKS8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3BhcmFtZXRlcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKGZ1bmN0aW9uKD86XFxzKyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSopP1xccypcXChcXHMqKSg/IVxccykoPzpbXigpXFxzXXxcXHMrKD8hW1xccyldKXxcXChbXigpXSpcXCkpKyg/PVxccypcXCkpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14kXFx3XFx4QTAtXFx1RkZGRl0pKD8hXFxzKVtfJGEtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKig/PVxccyo9PikvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcKFxccyopKD8hXFxzKSg/OlteKClcXHNdfFxccysoPyFbXFxzKV0pfFxcKFteKCldKlxcKSkrKD89XFxzKlxcKVxccyo9PikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oKD86XFxifFxcc3xeKSg/ISg/OmFzfGFzeW5jfGF3YWl0fGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29uc3R8Y29udGludWV8ZGVidWdnZXJ8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50ZXJmYWNlfGxldHxuZXd8bnVsbHxvZnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHVuZGVmaW5lZHx2YXJ8dm9pZHx3aGlsZXx3aXRofHlpZWxkKSg/IVskXFx3XFx4QTAtXFx1RkZGRl0pKSg/Oig/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSpcXHMqKVxcKFxccyp8XFxdXFxzKlxcKFxccyopKD8hXFxzKSg/OlteKClcXHNdfFxccysoPyFbXFxzKV0pfFxcKFteKCldKlxcKSkrKD89XFxzKlxcKVxccypcXHspLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fVxuXHRdLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl0oPzpbQS1aX118XFxkeD8pKlxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ3N0cmluZycsIHtcblx0J2hhc2hiYW5nJzoge1xuXHRcdHBhdHRlcm46IC9eIyEuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J3RlbXBsYXRlLXN0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvYCg/OlxcXFxbXFxzXFxTXXxcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH18KD8hXFwkXFx7KVteXFxcXGBdKSpgLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndGVtcGxhdGUtcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eYHxgJC8sXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0fSxcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkXFx7KD86W157fV18XFx7KD86W157fV18XFx7W159XSpcXH0pKlxcfSkrXFx9Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxce3xcXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nLXByb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbLHtdKVsgXFx0XSopKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIoPz1cXHMqOikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdvcGVyYXRvcicsIHtcblx0J2xpdGVyYWwtcHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFsse10pWyBcXHRdKikoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKjopL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxufSk7XG5cbmlmIChQcmlzbS5sYW5ndWFnZXMubWFya3VwKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5tYXJrdXAudGFnLmFkZElubGluZWQoJ3NjcmlwdCcsICdqYXZhc2NyaXB0Jyk7XG5cblx0Ly8gYWRkIGF0dHJpYnV0ZSBzdXBwb3J0IGZvciBhbGwgRE9NIGV2ZW50cy5cblx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvRXZlbnRzI1N0YW5kYXJkX2V2ZW50c1xuXHRQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZy5hZGRBdHRyaWJ1dGUoXG5cdFx0L29uKD86YWJvcnR8Ymx1cnxjaGFuZ2V8Y2xpY2t8Y29tcG9zaXRpb24oPzplbmR8c3RhcnR8dXBkYXRlKXxkYmxjbGlja3xlcnJvcnxmb2N1cyg/OmlufG91dCk/fGtleSg/OmRvd258dXApfGxvYWR8bW91c2UoPzpkb3dufGVudGVyfGxlYXZlfG1vdmV8b3V0fG92ZXJ8dXApfHJlc2V0fHJlc2l6ZXxzY3JvbGx8c2VsZWN0fHNsb3RjaGFuZ2V8c3VibWl0fHVubG9hZHx3aGVlbCkvLnNvdXJjZSxcblx0XHQnamF2YXNjcmlwdCdcblx0KTtcbn1cblxuUHJpc20ubGFuZ3VhZ2VzLmpzID0gUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5hYmFwID0ge1xuXHQnY29tbWVudCc6IC9eXFwqLiovbSxcblx0J3N0cmluZyc6IC8oYHwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHQnc3RyaW5nLXRlbXBsYXRlJzoge1xuXHRcdHBhdHRlcm46IC8oW3x9XSkoPzpcXFxcLnxbXlxcXFx8e1xcclxcbl0pKig/PVt8e10pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQvKiBFbmQgT2YgTGluZSBjb21tZW50cyBzaG91bGQgbm90IGludGVyZmVyZSB3aXRoIHN0cmluZ3Mgd2hlbiB0aGVcblx0cXVvdGUgY2hhcmFjdGVyIG9jY3VycyB3aXRoaW4gdGhlbS4gV2UgYXNzdW1lIGEgc3RyaW5nIGJlaW5nIGhpZ2hsaWdodGVkXG5cdGluc2lkZSBhbiBFT0wgY29tbWVudCBpcyBtb3JlIGFjY2VwdGFibGUgdGhhbiB0aGUgb3Bwb3NpdGUuXG5cdCovXG5cdCdlb2wtY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVwiLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyhcXHN8XFwufF4pKD86XFwqLUlOUFVUfFxcP1RPfEFCQVAtU09VUkNFfEFCQlJFVklBVEVEfEFCU3xBQlNUUkFDVHxBQ0NFUFR8QUNDRVBUSU5HfEFDQ0VTU1BPTElDWXxBQ0NPUkRJTkd8QUNPU3xBQ1RJVkFUSU9OfEFDVFVBTHxBRER8QURELUNPUlJFU1BPTkRJTkd8QURKQUNFTlR8QUZURVJ8QUxJQVN8QUxJQVNFU3xBTElHTnxBTEx8QUxMT0NBVEV8QUxQSEF8QU5BTFlTSVN8QU5BTFlaRVJ8QU5EfEFOWXxBUFBFTkR8QVBQRU5EQUdFfEFQUEVORElOR3xBUFBMSUNBVElPTnxBUkNISVZFfEFSRUF8QVJJVEhNRVRJQ3xBU3xBU0NFTkRJTkd8QVNJTnxBU1BFQ1R8QVNTRVJUfEFTU0lHTnxBU1NJR05FRHxBU1NJR05JTkd8QVNTT0NJQVRJT058QVNZTkNIUk9OT1VTfEFUfEFUQU58QVRUUklCVVRFU3xBVVRIT1JJVFl8QVVUSE9SSVRZLUNIRUNLfEFWR3xCQUNLfEJBQ0tHUk9VTkR8QkFDS1VQfEJBQ0tXQVJEfEJBREl8QkFTRXxCRUZPUkV8QkVHSU58QkVUV0VFTnxCSUd8QklOQVJZfEJJTkRJTkd8QklUfEJJVC1BTkR8QklULU5PVHxCSVQtT1J8QklULVhPUnxCTEFDS3xCTEFOS3xCTEFOS1N8QkxPQnxCTE9DS3xCTE9DS1N8QkxVRXxCT1VORHxCT1VOREFSSUVTfEJPVU5EU3xCT1hFRHxCUkVBSy1QT0lOVHxCVHxCVUZGRVJ8Qll8QllQQVNTSU5HfEJZVEV8QllURS1DQXxCWVRFLUNOfEJZVEUtQ098QllURS1DU3xCWVRFLU5BfEJZVEUtTlN8QllURS1PUkRFUnxDfENBfENBTEx8Q0FMTElOR3xDQVNFfENBU1R8Q0FTVElOR3xDQVRDSHxDRUlMfENFTlRFUnxDRU5URVJFRHxDSEFJTnxDSEFJTi1JTlBVVHxDSEFJTi1SRVFVRVNUfENIQU5HRXxDSEFOR0lOR3xDSEFOTkVMU3xDSEFSLVRPLUhFWHxDSEFSQUNURVJ8Q0hBUkxFTnxDSEVDS3xDSEVDS0JPWHxDSVJDVUxBUnxDSV98Q0xBU1N8Q0xBU1MtQ09ESU5HfENMQVNTLURBVEF8Q0xBU1MtRVZFTlRTfENMQVNTLU1FVEhPRFN8Q0xBU1MtUE9PTHxDTEVBTlVQfENMRUFSfENMSUVOVHxDTE9CfENMT0NLfENMT1NFfENOfENOVHxDT3xDT0FMRVNDRXxDT0RFfENPRElOR3xDT0xMRUNUfENPTE9SfENPTFVNTnxDT0xVTU5TfENPTF9CQUNLR1JPVU5EfENPTF9HUk9VUHxDT0xfSEVBRElOR3xDT0xfS0VZfENPTF9ORUdBVElWRXxDT0xfTk9STUFMfENPTF9QT1NJVElWRXxDT0xfVE9UQUx8Q09NTUVOVHxDT01NRU5UU3xDT01NSVR8Q09NTU9OfENPTU1VTklDQVRJT058Q09NUEFSSU5HfENPTVBPTkVOVHxDT01QT05FTlRTfENPTVBSRVNTSU9OfENPTVBVVEV8Q09OQ0FUfENPTkNBVEVOQVRFfENPTkR8Q09OREVOU0V8Q09ORElUSU9OfENPTk5FQ1R8Q09OTkVDVElPTnxDT05TVEFOVFN8Q09OVEVYVHxDT05URVhUU3xDT05USU5VRXxDT05UUk9MfENPTlRST0xTfENPTlZ8Q09OVkVSU0lPTnxDT05WRVJUfENPUElFU3xDT1BZfENPUlJFU1BPTkRJTkd8Q09TfENPU0h8Q09VTlR8Q09VTlRSWXxDT1ZFUnxDUHxDUEl8Q1JFQVRFfENSRUFUSU5HfENSSVRJQ0FMfENTfENVUlJFTkNZfENVUlJFTkNZX0NPTlZFUlNJT058Q1VSUkVOVHxDVVJTT1J8Q1VSU09SLVNFTEVDVElPTnxDVVNUT01FUnxDVVNUT01FUi1GVU5DVElPTnxEQU5HRVJPVVN8REFUQXxEQVRBQkFTRXxEQVRBSU5GT3xEQVRBU0VUfERBVEV8REFZTElHSFR8REJNQVhMRU58RERcXC9NTVxcL1lZfEREXFwvTU1cXC9ZWVlZfERETU1ZWXxERUFMTE9DQVRFfERFQ0lNQUxTfERFQ0lNQUxfU0hJRlR8REVDTEFSQVRJT05TfERFRVB8REVGQVVMVHxERUZFUlJFRHxERUZJTkV8REVGSU5JTkd8REVGSU5JVElPTnxERUxFVEV8REVMRVRJTkd8REVNQU5EfERFUEFSVE1FTlR8REVTQ0VORElOR3xERVNDUklCRXxERVNUSU5BVElPTnxERVRBSUx8RElBTE9HfERJUkVDVE9SWXxESVNDT05ORUNUfERJU1BMQVl8RElTUExBWS1NT0RFfERJU1RBTkNFfERJU1RJTkNUfERJVnxESVZJREV8RElWSURFLUNPUlJFU1BPTkRJTkd8RElWSVNJT058RE98RFVNTVl8RFVQTElDQVRFfERVUExJQ0FURVN8RFVSQVRJT058RFVSSU5HfERZTkFNSUN8RFlOUFJPfEV8RUFDSHxFRElUfEVESVRPUi1DQUxMfEVMU0V8RUxTRUlGfEVNUFRZfEVOQUJMRUR8RU5BQkxJTkd8RU5DT0RJTkd8RU5EfEVORC1FTkhBTkNFTUVOVC1TRUNUSU9OfEVORC1MSU5FU3xFTkQtT0YtREVGSU5JVElPTnxFTkQtT0YtRklMRXxFTkQtT0YtUEFHRXxFTkQtT0YtU0VMRUNUSU9OfEVOREFUfEVORENBU0V8RU5EQ0FUQ0h8RU5EQ0hBSU58RU5EQ0xBU1N8RU5ERE98RU5ERU5IQU5DRU1FTlR8RU5ERVhFQ3xFTkRGT1J8RU5ERk9STXxFTkRGVU5DVElPTnxFTkRJQU58RU5ESUZ8RU5ESU5HfEVORElOVEVSRkFDRXxFTkRMT09QfEVORE1FVEhPRHxFTkRNT0RVTEV8RU5ET058RU5EUFJPVklERXxFTkRTRUxFQ1R8RU5EVFJZfEVORFdISUxFfEVOR0lORUVSSU5HfEVOSEFOQ0VNRU5UfEVOSEFOQ0VNRU5ULVBPSU5UfEVOSEFOQ0VNRU5ULVNFQ1RJT058RU5IQU5DRU1FTlRTfEVOVFJJRVN8RU5UUll8RU5WSVJPTk1FTlR8RVF8RVFVQUx8RVFVSVZ8RVJST1JNRVNTQUdFfEVSUk9SU3xFU0NBUEV8RVNDQVBJTkd8RVZFTlR8RVZFTlRTfEVYQUNUfEVYQ0VQVHxFWENFUFRJT058RVhDRVBUSU9OLVRBQkxFfEVYQ0VQVElPTlN8RVhDTFVERXxFWENMVURJTkd8RVhFQ3xFWEVDVVRFfEVYSVNUU3xFWElUfEVYSVQtQ09NTUFORHxFWFB8RVhQQU5EfEVYUEFORElOR3xFWFBJUkFUSU9OfEVYUExJQ0lUfEVYUE9ORU5UfEVYUE9SVHxFWFBPUlRJTkd8RVhURU5EfEVYVEVOREVEfEVYVEVOU0lPTnxFWFRSQUNUfEZBSUx8RkVUQ0h8RklFTER8RklFTEQtR1JPVVBTfEZJRUxELVNZTUJPTHxGSUVMRC1TWU1CT0xTfEZJRUxEU3xGSUxFfEZJTFRFUnxGSUxURVItVEFCTEV8RklMVEVSU3xGSU5BTHxGSU5EfEZJUlNUfEZJUlNULUxJTkV8RklYRUQtUE9JTlR8RktFUXxGS0dFfEZMT09SfEZMVVNIfEZPTlR8Rk9SfEZPUk18Rk9STUFUfEZPUldBUkR8Rk9VTkR8RlJBQ3xGUkFNRXxGUkFNRVN8RlJFRXxGUklFTkRTfEZST018RlVOQ1RJT058RlVOQ1RJT04tUE9PTHxGVU5DVElPTkFMSVRZfEZVUlRIRVJ8R0FQU3xHRXxHRU5FUkFURXxHRVR8R0lWSU5HfEdLRVF8R0tHRXxHTE9CQUx8R1JBTlR8R1JFQVRFUnxHUkVFTnxHUk9VUHxHUk9VUFN8R1R8SEFORExFfEhBTkRMRVJ8SEFSTUxFU1N8SEFTSEVEfEhBVklOR3xIREJ8SEVBRC1MSU5FU3xIRUFERVJ8SEVBREVSU3xIRUFESU5HfEhFTFAtSUR8SEVMUC1SRVFVRVNUfEhJREV8SElHSHxISU5UfEhPTER8SE9UU1BPVHxJfElDT058SUR8SURFTlRJRklDQVRJT058SURFTlRJRklFUnxJRFN8SUZ8SUdOT1JFfElHTk9SSU5HfElNTUVESUFURUxZfElNUExFTUVOVEFUSU9OfElNUExFTUVOVEFUSU9OU3xJTVBMRU1FTlRFRHxJTVBMSUNJVHxJTVBPUlR8SU1QT1JUSU5HfElOfElOQUNUSVZFfElOQ0x8SU5DTFVERXxJTkNMVURFU3xJTkNMVURJTkd8SU5DUkVNRU5UfElOREVYfElOREVYLUxJTkV8SU5GT1RZUEVTfElOSEVSSVRJTkd8SU5JVHxJTklUSUFMfElOSVRJQUxJWkFUSU9OfElOTkVSfElOT1VUfElOUFVUfElOU0VSVHxJTlNUQU5DRVN8SU5URU5TSUZJRUR8SU5URVJGQUNFfElOVEVSRkFDRS1QT09MfElOVEVSRkFDRVN8SU5URVJOQUx8SU5URVJWQUxTfElOVE98SU5WRVJTRXxJTlZFUlRFRC1EQVRFfElTfElTT3xJVEVSQVRPUnxJVE5PfEpPQnxKT0lOfEtFRVB8S0VFUElOR3xLRVJORUx8S0VZfEtFWVN8S0VZV09SRFN8S0lORHxMQU5HVUFHRXxMQVNUfExBVEV8TEFZT1VUfExFfExFQURJTkd8TEVBVkV8TEVGVHxMRUZULUpVU1RJRklFRHxMRUZUUExVU3xMRUZUU1BBQ0V8TEVHQUNZfExFTkdUSHxMRVNTfExFVHxMRVZFTHxMRVZFTFN8TElLRXxMSU5FfExJTkUtQ09VTlR8TElORS1TRUxFQ1RJT058TElORS1TSVpFfExJTkVGRUVEfExJTkVTfExJU1R8TElTVC1QUk9DRVNTSU5HfExJU1RCT1h8TElUVExFfExMQU5HfExPQUR8TE9BRC1PRi1QUk9HUkFNfExPQnxMT0NBTHxMT0NBTEV8TE9DQVRPUnxMT0d8TE9HLVBPSU5UfExPRzEwfExPR0ZJTEV8TE9HSUNBTHxMT05HfExPT1B8TE9XfExPV0VSfExQQUR8TFBJfExUfE18TUFJTHxNQUlOfE1BSk9SLUlEfE1BUFBJTkd8TUFSR0lOfE1BUkt8TUFTS3xNQVRDSHxNQVRDSENPREV8TUFYfE1BWElNVU18TUVESVVNfE1FTUJFUlN8TUVNT1JZfE1FU0h8TUVTU0FHRXxNRVNTQUdFLUlEfE1FU1NBR0VTfE1FU1NBR0lOR3xNRVRIT0R8TUVUSE9EU3xNSU58TUlOSU1VTXxNSU5PUi1JRHxNTVxcL0REXFwvWVl8TU1cXC9ERFxcL1lZWVl8TU1ERFlZfE1PRHxNT0RFfE1PRElGfE1PRElGSUVSfE1PRElGWXxNT0RVTEV8TU9WRXxNT1ZFLUNPUlJFU1BPTkRJTkd8TVVMVElQTFl8TVVMVElQTFktQ09SUkVTUE9ORElOR3xOQXxOQU1FfE5BTUVUQUJ8TkFUSVZFfE5CfE5FfE5FU1RFRHxORVNUSU5HfE5FV3xORVctTElORXxORVctUEFHRXxORVctU0VDVElPTnxORVhUfE5PfE5PLURJU1BMQVl8Tk8tRVhURU5TSU9OfE5PLUdBUHxOTy1HQVBTfE5PLUdST1VQSU5HfE5PLUhFQURJTkd8Tk8tU0NST0xMSU5HfE5PLVNJR058Tk8tVElUTEV8Tk8tVE9QT0ZQQUdFfE5PLVpFUk98Tk9ERXxOT0RFU3xOT04tVU5JQ09ERXxOT04tVU5JUVVFfE5PVHxOUHxOU3xOVUxMfE5VTUJFUnxOVU1PRkNIQVJ8T3xPQkpFQ1R8T0JKRUNUU3xPQkxJR0FUT1JZfE9DQ1VSUkVOQ0V8T0NDVVJSRU5DRVN8T0NDVVJTfE9GfE9GRnxPRkZTRVR8T0xFfE9OfE9OTFl8T1BFTnxPUFRJT058T1BUSU9OQUx8T1BUSU9OU3xPUnxPUkRFUnxPVEhFUnxPVEhFUlN8T1VUfE9VVEVSfE9VVFBVVHxPVVRQVVQtTEVOR1RIfE9WRVJGTE9XfE9WRVJMQVl8UEFDS3xQQUNLQUdFfFBBRHxQQURESU5HfFBBR0V8UEFHRVN8UEFSQU1FVEVSfFBBUkFNRVRFUi1UQUJMRXxQQVJBTUVURVJTfFBBUlR8UEFSVElBTExZfFBBVFRFUk58UEVSQ0VOVEFHRXxQRVJGT1JNfFBFUkZPUk1JTkd8UEVSU09OfFBGfFBGLVNUQVRVU3xQSU5LfFBMQUNFU3xQT09MfFBPU0lUSU9OfFBPU19ISUdIfFBPU19MT1d8UFJBR01BU3xQUkVDT01QSUxFRHxQUkVGRVJSRUR8UFJFU0VSVklOR3xQUklNQVJZfFBSSU5UfFBSSU5ULUNPTlRST0x8UFJJT1JJVFl8UFJJVkFURXxQUk9DRURVUkV8UFJPQ0VTU3xQUk9HUkFNfFBST1BFUlRZfFBST1RFQ1RFRHxQUk9WSURFfFBVQkxJQ3xQVVNIQlVUVE9OfFBVVHxRVUVVRS1PTkxZfFFVSUNLSU5GT3xSQURJT0JVVFRPTnxSQUlTRXxSQUlTSU5HfFJBTkdFfFJBTkdFU3xSQVd8UkVBRHxSRUFELU9OTFl8UkVBREVSfFJFQ0VJVkV8UkVDRUlWRUR8UkVDRUlWRVJ8UkVDRUlWSU5HfFJFRHxSRURFRklOSVRJT058UkVEVUNFfFJFRFVDRUR8UkVGfFJFRkVSRU5DRXxSRUZSRVNIfFJFR0VYfFJFSkVDVHxSRU1PVEV8UkVOQU1JTkd8UkVQTEFDRXxSRVBMQUNFTUVOVHxSRVBMQUNJTkd8UkVQT1JUfFJFUVVFU1R8UkVRVUVTVEVEfFJFU0VSVkV8UkVTRVR8UkVTT0xVVElPTnxSRVNQRUNUSU5HfFJFU1BPTlNJQkxFfFJFU1VMVHxSRVNVTFRTfFJFU1VNQUJMRXxSRVNVTUV8UkVUUll8UkVUVVJOfFJFVFVSTkNPREV8UkVUVVJOSU5HfFJJR0hUfFJJR0hULUpVU1RJRklFRHxSSUdIVFBMVVN8UklHSFRTUEFDRXxSSVNLfFJNQ19DT01NVU5JQ0FUSU9OX0ZBSUxVUkV8Uk1DX0lOVkFMSURfU1RBVFVTfFJNQ19TWVNURU1fRkFJTFVSRXxST0xFfFJPTExCQUNLfFJPVU5EfFJPV1N8UlRUSXxSVU58U0FQfFNBUC1TUE9PTHxTQVZJTkd8U0NBTEVfUFJFU0VSVklOR3xTQ0FMRV9QUkVTRVJWSU5HX1NDSUVOVElGSUN8U0NBTnxTQ0lFTlRJRklDfFNDSUVOVElGSUNfV0lUSF9MRUFESU5HX1pFUk98U0NSRUVOfFNDUk9MTHxTQ1JPTEwtQk9VTkRBUll8U0NST0xMSU5HfFNFQVJDSHxTRUNPTkRBUll8U0VDT05EU3xTRUNUSU9OfFNFTEVDVHxTRUxFQ1QtT1BUSU9OU3xTRUxFQ1RJT058U0VMRUNUSU9OLVNDUkVFTnxTRUxFQ1RJT04tU0VUfFNFTEVDVElPTi1TRVRTfFNFTEVDVElPTi1UQUJMRXxTRUxFQ1RJT05TfFNFTEVDVE9SfFNFTkR8U0VQQVJBVEV8U0VQQVJBVEVEfFNFVHxTSEFSRUR8U0hJRlR8U0hPUlR8U0hPUlREVU1QLUlEfFNJR058U0lHTl9BU19QT1NURklYfFNJTVBMRXxTSU58U0lOR0xFfFNJTkh8U0laRXxTS0lQfFNLSVBQSU5HfFNNQVJUfFNPTUV8U09SVHxTT1JUQUJMRXxTT1JURUR8U09VUkNFfFNQQUNFfFNQRUNJRklFRHxTUExJVHxTUE9PTHxTUE9UU3xTUUx8U1FMU0NSSVBUfFNRUlR8U1RBQkxFfFNUQU1QfFNUQU5EQVJEfFNUQVJULU9GLVNFTEVDVElPTnxTVEFSVElOR3xTVEFURXxTVEFURU1FTlR8U1RBVEVNRU5UU3xTVEFUSUN8U1RBVElDU3xTVEFUVVNJTkZPfFNURVAtTE9PUHxTVE9QfFNUUkxFTnxTVFJVQ1RVUkV8U1RSVUNUVVJFU3xTVFlMRXxTVUJLRVl8U1VCTUFUQ0hFU3xTVUJNSVR8U1VCUk9VVElORXxTVUJTQ1JFRU58U1VCU1RSSU5HfFNVQlRSQUNUfFNVQlRSQUNULUNPUlJFU1BPTkRJTkd8U1VGRklYfFNVTXxTVU1NQVJZfFNVTU1JTkd8U1VQUExJRUR8U1VQUExZfFNVUFBSRVNTfFNXSVRDSHxTV0lUQ0hTVEFURVN8U1lNQk9MfFNZTkNQT0lOVFN8U1lOVEFYfFNZTlRBWC1DSEVDS3xTWU5UQVgtVFJBQ0V8U1lTVEVNLUNBTEx8U1lTVEVNLUVYQ0VQVElPTlN8U1lTVEVNLUVYSVR8VEFCfFRBQkJFRHxUQUJMRXxUQUJMRVN8VEFCTEVWSUVXfFRBQlNUUklQfFRBTnxUQU5IfFRBUkdFVHxUQVNLfFRBU0tTfFRFU1R8VEVTVElOR3xURVhUfFRFWFRQT09MfFRIRU58VEhST1d8VElNRXxUSU1FU3xUSU1FU1RBTVB8VElNRVpPTkV8VElUTEV8VElUTEUtTElORVN8VElUTEVCQVJ8VE98VE9LRU5JWkFUSU9OfFRPS0VOU3xUT1AtTElORVN8VE9QLU9GLVBBR0V8VFJBQ0UtRklMRXxUUkFDRS1UQUJMRXxUUkFJTElOR3xUUkFOU0FDVElPTnxUUkFOU0ZFUnxUUkFOU0ZPUk1BVElPTnxUUkFOU0xBVEV8VFJBTlNQT1JUSU5HfFRSTUFDfFRSVU5DfFRSVU5DQVRFfFRSVU5DQVRJT058VFJZfFRZUEV8VFlQRS1QT09MfFRZUEUtUE9PTFN8VFlQRVN8VUxJTkV8VU5BU1NJR058VU5ERVJ8VU5JQ09ERXxVTklPTnxVTklRVUV8VU5JVHxVTklUX0NPTlZFUlNJT058VU5JWHxVTlBBQ0t8VU5USUx8VU5XSU5EfFVQfFVQREFURXxVUFBFUnxVU0VSfFVTRVItQ09NTUFORHxVU0lOR3xVVEYtOHxWQUxJRHxWQUxVRXxWQUxVRS1SRVFVRVNUfFZBTFVFU3xWQVJZfFZBUllJTkd8VkVSSUZJQ0FUSU9OLU1FU1NBR0V8VkVSU0lPTnxWSUF8VklFV3xWSVNJQkxFfFdBSVR8V0FSTklOR3xXSEVOfFdIRU5FVkVSfFdIRVJFfFdISUxFfFdJRFRIfFdJTkRPV3xXSU5ET1dTfFdJVEh8V0lUSC1IRUFESU5HfFdJVEgtVElUTEV8V0lUSE9VVHxXT1JEfFdPUkt8V1JJVEV8V1JJVEVSfFh8WE1MfFhPUnxYU0R8WFNUUkxFTnxZRUxMT1d8WUVTfFlZTU1ERHxafFpFUk98Wk9ORSkoPyFbXFx3LV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQvKiBOdW1iZXJzIGNhbiBiZSBvbmx5IGludGVnZXJzLiBEZWNpbWFsIG9yIEhleCBhcHBlYXIgb25seSBhcyBzdHJpbmdzICovXG5cdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdC8qIE9wZXJhdG9ycyBtdXN0IGFsd2F5cyBiZSBzdXJyb3VuZGVkIGJ5IHdoaXRlc3BhY2UsIHRoZXkgY2Fubm90IGJlIHB1dFxuXHRhZGphY2VudCB0byBvcGVyYW5kcy5cblx0Ki9cblx0J29wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKSg/OlxcKlxcKj98PFs9Pl0/fD49P3xcXD89fFstK1xcLz1dKSg/PVxccykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3N0cmluZy1vcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKFxccykmJj8oPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdC8qIFRoZSBvZmZpY2lhbCBlZGl0b3IgaGlnaGxpZ2h0cyAqL1xuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3Rva2VuLW9wZXJhdG9yJzogW3tcblx0XHQvKiBTcGVjaWFsIG9wZXJhdG9ycyB1c2VkIHRvIGFjY2VzcyBzdHJ1Y3R1cmUgY29tcG9uZW50cywgY2xhc3MgbWV0aG9kcy9hdHRyaWJ1dGVzLCBldGMuICovXG5cdFx0cGF0dGVybjogLyhcXHcpKD86LT4/fD0+fFt+fHt9XSkoPz1cXHcpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sIHtcblx0XHQvKiBTcGVjaWFsIHRva2VucyB1c2VkIGRvIGRlbGltaXQgc3RyaW5nIHRlbXBsYXRlcyAqL1xuXHRcdHBhdHRlcm46IC9bfHt9XS8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fV0sXG5cdCdwdW5jdHVhdGlvbic6IC9bLC46KCldL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBjb3JlUnVsZXMgPSAnKD86QUxQSEF8QklUfENIQVJ8Q1J8Q1JMRnxDVEx8RElHSVR8RFFVT1RFfEhFWERJR3xIVEFCfExGfExXU1B8T0NURVR8U1B8VkNIQVJ8V1NQKSc7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFibmYgPSB7XG5cdFx0J2NvbW1lbnQnOiAvOy4qLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyg/OiVbaXNdKT9cIlteXCJcXG5cXHJdKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXiVbaXNdL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3JhbmdlJzoge1xuXHRcdFx0cGF0dGVybjogLyUoPzpiWzAxXSstWzAxXSt8ZFxcZCstXFxkK3x4W0EtRlxcZF0rLVtBLUZcXGRdKykvaSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J3Rlcm1pbmFsJzoge1xuXHRcdFx0cGF0dGVybjogLyUoPzpiWzAxXSsoPzpcXC5bMDFdKykqfGRcXGQrKD86XFwuXFxkKykqfHhbQS1GXFxkXSsoPzpcXC5bQS1GXFxkXSspKikvaSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J3JlcGV0aXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSkoPzpcXGQqXFwqXFxkKnxcXGQrKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdCdkZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzpbYS16XVtcXHctXSp8PFtePD5cXHJcXG5dKj4pKD89XFxzKj0pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvPHw+L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvcmUtcnVsZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKD86KF58W148XFxcXHctXSknICsgY29yZVJ1bGVzICsgJ3w8JyArIGNvcmVSdWxlcyArICc+KSg/IVtcXFxcdy1dKScsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6IFsncnVsZScsICdjb25zdGFudCddLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC88fD4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncnVsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXjxcXHctXSlbYS16XVtcXHctXSp8PFtePD5cXHJcXG5dKj4vaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzx8Pi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IC89XFwvP3xcXC8vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF1dL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge1xuXHQna2V5d29yZCc6IC9cXGIoPzphc3xicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGRlZmF1bHR8ZGVsZXRlfGRvfGR5bmFtaWN8ZWFjaHxlbHNlfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmb3J8ZnVuY3Rpb258Z2V0fGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluY2x1ZGV8aW5zdGFuY2VvZnxpbnRlcmZhY2V8aW50ZXJuYWx8aXN8bmFtZXNwYWNlfG5hdGl2ZXxuZXd8bnVsbHxvdmVycmlkZXxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHVzZXx2YXJ8dm9pZHx3aGlsZXx3aXRoKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18KD86WytcXC0qXFwvJV5dfCYmP3xcXHxcXHw/fDw8P3w+Pj8+P3xbIT1dPT8pPT98W34/QF0vXG59KTtcblByaXNtLmxhbmd1YWdlcy5hY3Rpb25zY3JpcHRbJ2NsYXNzLW5hbWUnXS5hbGlhcyA9ICdmdW5jdGlvbic7XG5cbi8vIGRvZXNuJ3Qgd29yayB3aXRoIEFTIGJlY2F1c2UgQVMgaXMgdG9vIGNvbXBsZXhcbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuYWN0aW9uc2NyaXB0WydwYXJhbWV0ZXInXTtcbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuYWN0aW9uc2NyaXB0WydsaXRlcmFsLXByb3BlcnR5J107XG5cbmlmIChQcmlzbS5sYW5ndWFnZXMubWFya3VwKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2FjdGlvbnNjcmlwdCcsICdzdHJpbmcnLCB7XG5cdFx0J3htbCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKTxcXC8/XFx3Kyg/OlxccytbXlxccz5cXC89XSs9KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMilbXlxcXFxdKSpcXDIpKlxccypcXC8/Pi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwXG5cdFx0fVxuXHR9KTtcbn1cbjtcblByaXNtLmxhbmd1YWdlcy5hZGEgPSB7XG5cdCdjb21tZW50JzogLy0tLiovLFxuXHQnc3RyaW5nJzogL1wiKD86XCJcInxbXlwiXFxyXFxmXFxuXSkqXCIvLFxuXHQnbnVtYmVyJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJcXGQoPzpfP1xcZCkqI1tcXGRBLUZdKD86Xz9bXFxkQS1GXSkqKD86XFwuW1xcZEEtRl0oPzpfP1tcXGRBLUZdKSopPyMoPzpFWystXT9cXGQoPzpfP1xcZCkqKT8vaVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYlxcZCg/Ol8/XFxkKSooPzpcXC5cXGQoPzpfP1xcZCkqKT8oPzpFWystXT9cXGQoPzpfP1xcZCkqKT9cXGIvaVxuXHRcdH1cblx0XSxcblx0J2F0dHJpYnV0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiJ1xcdysvLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYm9ydHxhYnN8YWJzdHJhY3R8YWNjZXB0fGFjY2Vzc3xhbGlhc2VkfGFsbHxhbmR8YXJyYXl8YXR8YmVnaW58Ym9keXxjYXNlfGNvbnN0YW50fGRlY2xhcmV8ZGVsYXl8ZGVsdGF8ZGlnaXRzfGRvfGVsc2V8ZWxzaWZ8ZW5kfGVudHJ5fGV4Y2VwdGlvbnxleGl0fGZvcnxmdW5jdGlvbnxnZW5lcmljfGdvdG98aWZ8aW58aW50ZXJmYWNlfGlzfGxpbWl0ZWR8bG9vcHxtb2R8bmV3fG5vdHxudWxsfG9mfG9yfG90aGVyc3xvdXR8b3ZlcnJpZGluZ3xwYWNrYWdlfHByYWdtYXxwcml2YXRlfHByb2NlZHVyZXxwcm90ZWN0ZWR8cmFpc2V8cmFuZ2V8cmVjb3JkfHJlbXxyZW5hbWVzfHJlcXVldWV8cmV0dXJufHJldmVyc2V8c2VsZWN0fHNlcGFyYXRlfHNvbWV8c3VidHlwZXxzeW5jaHJvbml6ZWR8dGFnZ2VkfHRhc2t8dGVybWluYXRlfHRoZW58dHlwZXx1bnRpbHx1c2V8d2hlbnx3aGlsZXx3aXRofHhvcilcXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J29wZXJhdG9yJzogLzxbPT5dP3w+PT98PT4/fDo9fFxcLz0/fFxcKlxcKj98WyYrLV0vLFxuXHQncHVuY3R1YXRpb24nOiAvXFwuXFwuP3xbLDsoKTpdLyxcblx0J2NoYXInOiAvJy4nLyxcblx0J3ZhcmlhYmxlJzogL1xcYlthLXpdKD86XFx3KSpcXGIvaVxufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hZ2RhID0ge1xuXHRcdCdjb21tZW50JzogL1xcey1bXFxzXFxTXSo/KD86LVxcfXwkKXwtLS4qLyxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXCJdKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31cdTI5ODNcdTI5ODQuO0BdLyxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86ZGF0YXxyZWNvcmQpICspXFxTKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPyFcXHMpW146XFxyXFxuXSsoPz06KS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlxccyp8XFxzKSg/Ols9fDpcdTIyMDBcdTIxOTJcdTAzQkJcXFxcP19dfC0+KSg/PVxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OlNldHxhYnN0cmFjdHxjb25zdHJ1Y3RvcnxkYXRhfGV0YS1lcXVhbGl0eXxmaWVsZHxmb3JhbGx8aGlkaW5nfGltcG9ydHxpbnxpbmR1Y3RpdmV8aW5maXh8aW5maXhsfGluZml4cnxpbnN0YW5jZXxsZXR8bWFjcm98bW9kdWxlfG11dHVhbHxuby1ldGEtZXF1YWxpdHl8b3BlbnxvdmVybGFwfHBhdHRlcm58cG9zdHVsYXRlfHByaW1pdGl2ZXxwcml2YXRlfHB1YmxpY3xxdW90ZXxxdW90ZUNvbnRleHR8cXVvdGVHb2FsfHF1b3RlVGVybXxyZWNvcmR8cmVuYW1pbmd8cmV3cml0ZXxzeW50YXh8dGFjdGljfHVucXVvdGV8dW5xdW90ZURlY2x8dW5xdW90ZURlZnx1c2luZ3x2YXJpYWJsZXx3aGVyZXx3aXRoKVxcYi8sXG5cdH07XG59KFByaXNtKSk7XG5cbi8vIGJhc2VkIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvQUwvYmxvYi9tYXN0ZXIvZ3JhbW1hci9hbHN5bnRheC50bWxhbmd1YWdlXG5cblByaXNtLmxhbmd1YWdlcy5hbCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzonJ3xbXidcXHJcXG5dKSonKD8hJyl8XCIoPzpcIlwifFteXCJcXHJcXG5dKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmV2ZW50fHByb2NlZHVyZXx0cmlnZ2VyKVxccyt8KD86XnxbXi5dKVxcLlxccyopW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IFtcblx0XHQvLyBrZXl3b3Jkc1xuXHRcdC9cXGIoPzphcnJheXxhc3NlcnRlcnJvcnxiZWdpbnxicmVha3xjYXNlfGRvfGRvd250b3xlbHNlfGVuZHxldmVudHxleGl0fGZvcnxmb3JlYWNofGZ1bmN0aW9ufGlmfGltcGxlbWVudHN8aW58aW5kYXRhc2V0fGludGVyZmFjZXxpbnRlcm5hbHxsb2NhbHxvZnxwcm9jZWR1cmV8cHJvZ3JhbXxwcm90ZWN0ZWR8cmVwZWF0fHJ1bm9uY2xpZW50fHNlY3VyaXR5ZmlsdGVyaW5nfHN1cHByZXNzZGlzcG9zZXx0ZW1wb3Jhcnl8dGhlbnx0b3x0cmlnZ2VyfHVudGlsfHZhcnx3aGlsZXx3aXRofHdpdGhldmVudHMpXFxiL2ksXG5cdFx0Ly8gb2JqZWN0cyBhbmQgbWV0YWRhdGEgdGhhdCBhcmUgdXNlZCBsaWtlIGtleXdvcmRzXG5cdFx0L1xcYig/OmFjdGlvbnxhY3Rpb25zfGFkZGFmdGVyfGFkZGJlZm9yZXxhZGRmaXJzdHxhZGRsYXN0fGFyZWF8YXNzZW1ibHl8Y2hhcnRwYXJ0fGNvZGV1bml0fGNvbHVtbnxjb250cm9sYWRkaW58Y3VlZ3JvdXB8Y3VzdG9taXplc3xkYXRhaXRlbXxkYXRhc2V0fGRvdG5ldHxlbGVtZW50c3xlbnVtfGVudW1leHRlbnNpb258ZXh0ZW5kc3xmaWVsZHxmaWVsZGF0dHJpYnV0ZXxmaWVsZGVsZW1lbnR8ZmllbGRncm91cHxmaWVsZGdyb3Vwc3xmaWVsZHN8ZmlsdGVyfGZpeGVkfGdyaWR8Z3JvdXB8a2V5fGtleXN8bGFiZWx8bGFiZWxzfGxheW91dHxtb2RpZnl8bW92ZWFmdGVyfG1vdmViZWZvcmV8bW92ZWZpcnN0fG1vdmVsYXN0fHBhZ2V8cGFnZWN1c3RvbWl6YXRpb258cGFnZWV4dGVuc2lvbnxwYXJ0fHByb2ZpbGV8cXVlcnl8cmVwZWF0ZXJ8cmVwb3J0fHJlcXVlc3RwYWdlfHNjaGVtYXxzZXBhcmF0b3J8c3lzdGVtcGFydHx0YWJsZXx0YWJsZWVsZW1lbnR8dGFibGVleHRlbnNpb258dGV4dGF0dHJpYnV0ZXx0ZXh0ZWxlbWVudHx0eXBlfHVzZXJjb250cm9sfHZhbHVlfHhtbHBvcnQpXFxiL2lcblx0XSxcblx0J251bWJlcic6IC9cXGIoPzoweFtcXGRhLWZdK3woPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KSg/OkZ8TEw/fFUoPzpMTD8pPyk/XFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCd2YXJpYWJsZSc6IC9cXGIoPzpDdXJyKD86RmllbGROb3xQYWdlfFJlcG9ydCl8eD9SZWN8UmVxdWVzdE9wdGlvbnNQYWdlKVxcYi8sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OmF1dG9tYXRpb258YmlnaW50ZWdlcnxiaWd0ZXh0fGJsb2J8Ym9vbGVhbnxieXRlfGNoYXJ8Y2xpZW50dHlwZXxjb2RlfGNvbXBsZXRpb250cmlnZ2VyZXJyb3JsZXZlbHxjb25uZWN0aW9udHlwZXxkYXRhYmFzZXxkYXRhY2xhc3NpZmljYXRpb258ZGF0YXNjb3BlfGRhdGV8ZGF0ZWZvcm11bGF8ZGF0ZXRpbWV8ZGVjaW1hbHxkZWZhdWx0bGF5b3V0fGRpYWxvZ3xkaWN0aW9uYXJ5fGRvdG5ldGFzc2VtYmx5fGRvdG5ldHR5cGVkZWNsYXJhdGlvbnxkdXJhdGlvbnxlcnJvcmluZm98ZXJyb3J0eXBlfGV4ZWN1dGlvbmNvbnRleHR8ZXhlY3V0aW9ubW9kZXxmaWVsZGNsYXNzfGZpZWxkcmVmfGZpZWxkdHlwZXxmaWxlfGZpbHRlcnBhZ2VidWlsZGVyfGd1aWR8aHR0cGNsaWVudHxodHRwY29udGVudHxodHRwaGVhZGVyc3xodHRwcmVxdWVzdG1lc3NhZ2V8aHR0cHJlc3BvbnNlbWVzc2FnZXxpbnN0cmVhbXxpbnRlZ2VyfGpva2VyfGpzb25hcnJheXxqc29ub2JqZWN0fGpzb250b2tlbnxqc29udmFsdWV8a2V5cmVmfGxpc3R8bW9kdWxlZGVwZW5kZW5jeWluZm98bW9kdWxlaW5mb3xub25lfG5vdGlmaWNhdGlvbnxub3RpZmljYXRpb25zY29wZXxvYmplY3R0eXBlfG9wdGlvbnxvdXRzdHJlYW18cGFnZXJlc3VsdHxyZWNvcmR8cmVjb3JkaWR8cmVjb3JkcmVmfHJlcG9ydGZvcm1hdHxzZWN1cml0eWZpbHRlcnxzZXNzaW9uc2V0dGluZ3N8dGFibGVjb25uZWN0aW9udHlwZXx0YWJsZWZpbHRlcnx0ZXN0YWN0aW9ufHRlc3RmaWVsZHx0ZXN0ZmlsdGVyZmllbGR8dGVzdHBhZ2V8dGVzdHBlcm1pc3Npb25zfHRlc3RyZXF1ZXN0cGFnZXx0ZXh0fHRleHRidWlsZGVyfHRleHRjb25zdHx0ZXh0ZW5jb2Rpbmd8dGltZXx0cmFuc2FjdGlvbm1vZGVsfHRyYW5zYWN0aW9udHlwZXx2YXJpYW50fHZlcmJvc2l0eXx2ZXJzaW9ufHZpZXd8dmlld3N8d2Vic2VydmljZWFjdGlvbmNvbnRleHR8d2Vic2VydmljZWFjdGlvbnJlc3VsdGNvZGV8eG1sYXR0cmlidXRlfHhtbGF0dHJpYnV0ZWNvbGxlY3Rpb258eG1sY2RhdGF8eG1sY29tbWVudHx4bWxkZWNsYXJhdGlvbnx4bWxkb2N1bWVudHx4bWxkb2N1bWVudHR5cGV8eG1sZWxlbWVudHx4bWxuYW1lc3BhY2VtYW5hZ2VyfHhtbG5hbWV0YWJsZXx4bWxub2RlfHhtbG5vZGVsaXN0fHhtbHByb2Nlc3NpbmdpbnN0cnVjdGlvbnx4bWxyZWFkb3B0aW9uc3x4bWx0ZXh0fHhtbHdyaXRlb3B0aW9ucylcXGIvaSxcblx0J29wZXJhdG9yJzogL1xcLlxcLnw6Wz06XXxbLSsqL109P3w8PnxbPD5dPT98PXxcXGIoPzphbmR8ZGl2fG1vZHxub3R8b3J8eG9yKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde306LjssXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hbnRscjQgPSB7XG5cdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXC58W15cXFxcJ1xcclxcbl0pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2hhcmFjdGVyLWNsYXNzJzoge1xuXHRcdHBhdHRlcm46IC9cXFsoPzpcXFxcLnxbXlxcXFxcXF1cXHJcXG5dKSpcXF0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3JlZ2V4Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdyYW5nZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXltdfCg/Ol58W15cXFxcXSkoPzpcXFxcXFxcXCkqXFxcXFxcWyktKD8hXFxdKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9LFxuXHRcdFx0J2VzY2FwZSc6IC9cXFxcKD86dSg/OlthLWZBLUZcXGRdezR9fFxce1thLWZBLUZcXGRdK1xcfSl8W3BQXVxce1s9XFx3LV0rXFx9fFteXFxyXFxudXBQXSkvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dL1xuXHRcdH1cblx0fSxcblx0J2FjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFx7KD86W157fV18XFx7KD86W157fV18XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKlxcfSkqXFx9Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0Ly8gdGhpcyBtaWdodCBiZSBDLCBDKyssIFB5dGhvbiwgSmF2YSwgQyMsIG9yIGFueSBvdGhlciBsYW5ndWFnZSBBTlRMUjQgY29tcGlsZXMgdG9cblx0XHRcdFx0cGF0dGVybjogLyhcXHspW1xcc1xcU10rKD89XFx9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvW3t9XS9cblx0XHR9XG5cdH0sXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC8oLT5cXHMqKD8hXFxzKSkoPzpcXHMqKD86LFxccyopP1xcYlthLXpdXFx3Kig/OlxccypcXChbXigpXFxyXFxuXSpcXCkpPykrKD89XFxzKjspL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKig/OlssKF18JCkpLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLCgpXS9cblx0XHR9XG5cdH0sXG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3Kyg/Ojo6XFx3KykqLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvI1sgXFx0XSpcXHcrLyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpjYXRjaHxjaGFubmVsc3xmaW5hbGx5fGZyYWdtZW50fGdyYW1tYXJ8aW1wb3J0fGxleGVyfGxvY2Fsc3xtb2RlfG9wdGlvbnN8cGFyc2VyfHJldHVybnN8dGhyb3dzfHRva2VucylcXGIvLFxuXHQnZGVmaW5pdGlvbic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel1cXHcqKD89XFxzKjopLyxcblx0XHRcdGFsaWFzOiBbJ3J1bGUnLCAnY2xhc3MtbmFtZSddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW0EtWl1cXHcqKD89XFxzKjopLyxcblx0XHRcdGFsaWFzOiBbJ3Rva2VuJywgJ2NvbnN0YW50J11cblx0XHR9LFxuXHRdLFxuXHQnY29uc3RhbnQnOiAvXFxiW0EtWl1bQS1aX10qXFxiLyxcblx0J29wZXJhdG9yJzogL1xcLlxcLnwtPnxbfH5dfFsqKz9dXFw/Py8sXG5cdCdwdW5jdHVhdGlvbic6IC9bOzooKT1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmc0ID0gUHJpc20ubGFuZ3VhZ2VzLmFudGxyNDtcblxuUHJpc20ubGFuZ3VhZ2VzLmFwYWNoZWNvbmYgPSB7XG5cdCdjb21tZW50JzogLyMuKi8sXG5cdCdkaXJlY3RpdmUtaW5saW5lJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopXFxiKD86QWNjZXB0RmlsdGVyfEFjY2VwdFBhdGhJbmZvfEFjY2Vzc0ZpbGVOYW1lfEFjdGlvbnxBZGQoPzpBbHR8QWx0QnlFbmNvZGluZ3xBbHRCeVR5cGV8Q2hhcnNldHxEZWZhdWx0Q2hhcnNldHxEZXNjcmlwdGlvbnxFbmNvZGluZ3xIYW5kbGVyfEljb258SWNvbkJ5RW5jb2Rpbmd8SWNvbkJ5VHlwZXxJbnB1dEZpbHRlcnxMYW5ndWFnZXxNb2R1bGVJbmZvfE91dHB1dEZpbHRlcnxPdXRwdXRGaWx0ZXJCeVR5cGV8VHlwZSl8QWxpYXN8QWxpYXNNYXRjaHxBbGxvdyg/OkNPTk5FQ1R8RW5jb2RlZFNsYXNoZXN8TWV0aG9kc3xPdmVycmlkZXxPdmVycmlkZUxpc3QpP3xBbm9ueW1vdXMoPzpfTG9nRW1haWx8X011c3RHaXZlRW1haWx8X05vVXNlcklEfF9WZXJpZnlFbWFpbCk/fEFzeW5jUmVxdWVzdFdvcmtlckZhY3RvcnxBdXRoKD86QmFzaWNBdXRob3JpdGF0aXZlfEJhc2ljRmFrZXxCYXNpY1Byb3ZpZGVyfEJhc2ljVXNlRGlnZXN0QWxnb3JpdGhtfERCRFVzZXJQV1F1ZXJ5fERCRFVzZXJSZWFsbVF1ZXJ5fERCTUdyb3VwRmlsZXxEQk1UeXBlfERCTVVzZXJGaWxlfERpZ2VzdCg/OkFsZ29yaXRobXxEb21haW58Tm9uY2VMaWZldGltZXxQcm92aWRlcnxRb3B8U2htZW1TaXplKXxGb3JtKD86QXV0aG9yaXRhdGl2ZXxCb2R5fERpc2FibGVOb1N0b3JlfEZha2VCYXNpY0F1dGh8TG9jYXRpb258TG9naW5SZXF1aXJlZExvY2F0aW9ufExvZ2luU3VjY2Vzc0xvY2F0aW9ufExvZ291dExvY2F0aW9ufE1ldGhvZHxNaW1ldHlwZXxQYXNzd29yZHxQcm92aWRlcnxTaXRlUGFzc3BocmFzZXxTaXplfFVzZXJuYW1lKXxHcm91cEZpbGV8TERBUCg/OkF1dGhvcml6ZVByZWZpeHxCaW5kQXV0aG9yaXRhdGl2ZXxCaW5kRE58QmluZFBhc3N3b3JkfENoYXJzZXRDb25maWd8Q29tcGFyZUFzVXNlcnxDb21wYXJlRE5PblNlcnZlcnxEZXJlZmVyZW5jZUFsaWFzZXN8R3JvdXBBdHRyaWJ1dGV8R3JvdXBBdHRyaWJ1dGVJc0ROfEluaXRpYWxCaW5kQXNVc2VyfEluaXRpYWxCaW5kUGF0dGVybnxNYXhTdWJHcm91cERlcHRofFJlbW90ZVVzZXJBdHRyaWJ1dGV8UmVtb3RlVXNlcklzRE58U2VhcmNoQXNVc2VyfFN1Ykdyb3VwQXR0cmlidXRlfFN1Ykdyb3VwQ2xhc3N8VXJsKXxNZXJnaW5nfE5hbWV8bkNhY2hlKD86Q29udGV4dHxFbmFibGV8UHJvdmlkZUZvcnxTT0NhY2hlfFRpbWVvdXQpfG56RmNnaUNoZWNrQXV0aG5Qcm92aWRlcnxuekZjZ2lEZWZpbmVQcm92aWRlcnxUeXBlfFVzZXJGaWxlfHpEQkRMb2dpblRvUmVmZXJlcnx6REJEUXVlcnl8ekRCRFJlZGlyZWN0UXVlcnl8ekRCTVR5cGV8elNlbmRGb3JiaWRkZW5PbkZhaWx1cmUpfEJhbGFuY2VyR3Jvd3RofEJhbGFuY2VySW5oZXJpdHxCYWxhbmNlck1lbWJlcnxCYWxhbmNlclBlcnNpc3R8QnJvd3Nlck1hdGNofEJyb3dzZXJNYXRjaE5vQ2FzZXxCdWZmZXJlZExvZ3N8QnVmZmVyU2l6ZXxDYWNoZSg/OkRlZmF1bHRFeHBpcmV8RGV0YWlsSGVhZGVyfERpckxlbmd0aHxEaXJMZXZlbHN8RGlzYWJsZXxFbmFibGV8RmlsZXxIZWFkZXJ8SWdub3JlQ2FjaGVDb250cm9sfElnbm9yZUhlYWRlcnN8SWdub3JlTm9MYXN0TW9kfElnbm9yZVF1ZXJ5U3RyaW5nfElnbm9yZVVSTFNlc3Npb25JZGVudGlmaWVyc3xLZXlCYXNlVVJMfExhc3RNb2RpZmllZEZhY3RvcnxMb2NrfExvY2tNYXhBZ2V8TG9ja1BhdGh8TWF4RXhwaXJlfE1heEZpbGVTaXplfE1pbkV4cGlyZXxNaW5GaWxlU2l6ZXxOZWdvdGlhdGVkRG9jc3xRdWlja0hhbmRsZXJ8UmVhZFNpemV8UmVhZFRpbWV8Um9vdHxTb2NhY2hlKD86TWF4U2l6ZXxNYXhUaW1lfE1pblRpbWV8UmVhZFNpemV8UmVhZFRpbWUpP3xTdGFsZU9uRXJyb3J8U3RvcmVFeHBpcmVkfFN0b3JlTm9TdG9yZXxTdG9yZVByaXZhdGUpfENHSURTY3JpcHRUaW1lb3V0fENHSU1hcEV4dGVuc2lvbnxDaGFyc2V0RGVmYXVsdHxDaGFyc2V0T3B0aW9uc3xDaGFyc2V0U291cmNlRW5jfENoZWNrQ2FzZU9ubHl8Q2hlY2tTcGVsbGluZ3xDaHJvb3REaXJ8Q29udGVudERpZ2VzdHxDb29raWVEb21haW58Q29va2llRXhwaXJlc3xDb29raWVOYW1lfENvb2tpZVN0eWxlfENvb2tpZVRyYWNraW5nfENvcmVEdW1wRGlyZWN0b3J5fEN1c3RvbUxvZ3xEYXZ8RGF2RGVwdGhJbmZpbml0eXxEYXZHZW5lcmljTG9ja0RCfERhdkxvY2tEQnxEYXZNaW5UaW1lb3V0fERCREV4cHRpbWV8REJESW5pdFNRTHxEQkRLZWVwfERCRE1heHxEQkRNaW58REJEUGFyYW1zfERCRFBlcnNpc3R8REJEUHJlcGFyZVNRTHxEQkRyaXZlcnxEZWZhdWx0SWNvbnxEZWZhdWx0TGFuZ3VhZ2V8RGVmYXVsdFJ1bnRpbWVEaXJ8RGVmYXVsdFR5cGV8RGVmaW5lfERlZmxhdGUoPzpCdWZmZXJTaXplfENvbXByZXNzaW9uTGV2ZWx8RmlsdGVyTm90ZXxJbmZsYXRlTGltaXRSZXF1ZXN0Qm9keXxJbmZsYXRlUmF0aW8oPzpCdXJzdHxMaW1pdCl8TWVtTGV2ZWx8V2luZG93U2l6ZSl8RGVueXxEaXJlY3RvcnlDaGVja0hhbmRsZXJ8RGlyZWN0b3J5SW5kZXh8RGlyZWN0b3J5SW5kZXhSZWRpcmVjdHxEaXJlY3RvcnlTbGFzaHxEb2N1bWVudFJvb3R8RFRyYWNlUHJpdmlsZWdlc3xEdW1wSU9JbnB1dHxEdW1wSU9PdXRwdXR8RW5hYmxlRXhjZXB0aW9uSG9va3xFbmFibGVNTUFQfEVuYWJsZVNlbmRmaWxlfEVycm9yfEVycm9yRG9jdW1lbnR8RXJyb3JMb2d8RXJyb3JMb2dGb3JtYXR8RXhhbXBsZXxFeHBpcmVzQWN0aXZlfEV4cGlyZXNCeVR5cGV8RXhwaXJlc0RlZmF1bHR8RXh0ZW5kZWRTdGF0dXN8RXh0RmlsdGVyRGVmaW5lfEV4dEZpbHRlck9wdGlvbnN8RmFsbGJhY2tSZXNvdXJjZXxGaWxlRVRhZ3xGaWx0ZXJDaGFpbnxGaWx0ZXJEZWNsYXJlfEZpbHRlclByb3RvY29sfEZpbHRlclByb3ZpZGVyfEZpbHRlclRyYWNlfEZvcmNlTGFuZ3VhZ2VQcmlvcml0eXxGb3JjZVR5cGV8Rm9yZW5zaWNMb2d8R3Byb2ZEaXJ8R3JhY2VmdWxTaHV0ZG93blRpbWVvdXR8R3JvdXB8SGVhZGVyfEhlYWRlck5hbWV8SGVhcnRiZWF0KD86QWRkcmVzc3xMaXN0ZW58TWF4U2VydmVyc3xTdG9yYWdlKXxIb3N0bmFtZUxvb2t1cHN8SWRlbnRpdHlDaGVja3xJZGVudGl0eUNoZWNrVGltZW91dHxJbWFwQmFzZXxJbWFwRGVmYXVsdHxJbWFwTWVudXxJbmNsdWRlfEluY2x1ZGVPcHRpb25hbHxJbmRleCg/OkhlYWRJbnNlcnR8SWdub3JlfElnbm9yZVJlc2V0fE9wdGlvbnN8T3JkZXJEZWZhdWx0fFN0eWxlU2hlZXQpfElucHV0U2VkfElTQVBJKD86QXBwZW5kTG9nVG9FcnJvcnN8QXBwZW5kTG9nVG9RdWVyeXxDYWNoZUZpbGV8RmFrZUFzeW5jfExvZ05vdFN1cHBvcnRlZHxSZWFkQWhlYWRCdWZmZXIpfEtlZXBBbGl2ZXxLZWVwQWxpdmVUaW1lb3V0fEtlcHRCb2R5U2l6ZXxMYW5ndWFnZVByaW9yaXR5fExEQVAoPzpDYWNoZUVudHJpZXN8Q2FjaGVUVEx8Q29ubmVjdGlvblBvb2xUVEx8Q29ubmVjdGlvblRpbWVvdXR8TGlicmFyeURlYnVnfE9wQ2FjaGVFbnRyaWVzfE9wQ2FjaGVUVEx8UmVmZXJyYWxIb3BMaW1pdHxSZWZlcnJhbHN8UmV0cmllc3xSZXRyeURlbGF5fFNoYXJlZENhY2hlRmlsZXxTaGFyZWRDYWNoZVNpemV8VGltZW91dHxUcnVzdGVkQ2xpZW50Q2VydHxUcnVzdGVkR2xvYmFsQ2VydHxUcnVzdGVkTW9kZXxWZXJpZnlTZXJ2ZXJDZXJ0KXxMaW1pdCg/OkludGVybmFsUmVjdXJzaW9ufFJlcXVlc3QoPzpCb2R5fEZpZWxkc3xGaWVsZFNpemV8TGluZSl8WE1MUmVxdWVzdEJvZHkpfExpc3RlbnxMaXN0ZW5CYWNrTG9nfExvYWRGaWxlfExvYWRNb2R1bGV8TG9nRm9ybWF0fExvZ0xldmVsfExvZ01lc3NhZ2V8THVhQXV0aHpQcm92aWRlcnxMdWFDb2RlQ2FjaGV8THVhKD86SG9vayg/OkFjY2Vzc0NoZWNrZXJ8QXV0aENoZWNrZXJ8Q2hlY2tVc2VySUR8Rml4dXBzfEluc2VydEZpbHRlcnxMb2d8TWFwVG9TdG9yYWdlfFRyYW5zbGF0ZU5hbWV8VHlwZUNoZWNrZXIpfEluaGVyaXR8SW5wdXRGaWx0ZXJ8TWFwSGFuZGxlcnxPdXRwdXRGaWx0ZXJ8UGFja2FnZUNQYXRofFBhY2thZ2VQYXRofFF1aWNrSGFuZGxlcnxSb290fFNjb3BlKXxNYXgoPzpDb25uZWN0aW9uc1BlckNoaWxkfEtlZXBBbGl2ZVJlcXVlc3RzfE1lbUZyZWV8UmFuZ2VPdmVybGFwc3xSYW5nZVJldmVyc2Fsc3xSYW5nZXN8UmVxdWVzdFdvcmtlcnN8U3BhcmVTZXJ2ZXJzfFNwYXJlVGhyZWFkc3xUaHJlYWRzKXxNZXJnZVRyYWlsZXJzfE1ldGFEaXJ8TWV0YUZpbGVzfE1ldGFTdWZmaXh8TWltZU1hZ2ljRmlsZXxNaW5TcGFyZVNlcnZlcnN8TWluU3BhcmVUaHJlYWRzfE1NYXBGaWxlfE1vZGVtU3RhbmRhcmR8TW9kTWltZVVzZVBhdGhJbmZvfE11bHRpdmlld3NNYXRjaHxNdXRleHxOYW1lVmlydHVhbEhvc3R8Tm9Qcm94eXxOV1NTTFRydXN0ZWRDZXJ0c3xOV1NTTFVwZ3JhZGVhYmxlfE9wdGlvbnN8T3JkZXJ8T3V0cHV0U2VkfFBhc3NFbnZ8UGlkRmlsZXxQcml2aWxlZ2VzTW9kZXxQcm90b2NvbHxQcm90b2NvbEVjaG98UHJveHkoPzpBZGRIZWFkZXJzfEJhZEhlYWRlcnxCbG9ja3xEb21haW58RXJyb3JPdmVycmlkZXxFeHByZXNzREJNRmlsZXxFeHByZXNzREJNVHlwZXxFeHByZXNzRW5hYmxlfEZ0cERpckNoYXJzZXR8RnRwRXNjYXBlV2lsZGNhcmRzfEZ0cExpc3RPbldpbGRjYXJkfEhUTUwoPzpCdWZTaXplfENoYXJzZXRPdXR8RG9jVHlwZXxFbmFibGV8RXZlbnRzfEV4dGVuZGVkfEZpeHVwc3xJbnRlcnB8TGlua3N8TWV0YXxTdHJpcENvbW1lbnRzfFVSTE1hcCl8SU9CdWZmZXJTaXplfE1heEZvcndhcmRzfFBhc3MoPzpJbmhlcml0fEludGVycG9sYXRlRW52fE1hdGNofFJldmVyc2V8UmV2ZXJzZUNvb2tpZURvbWFpbnxSZXZlcnNlQ29va2llUGF0aCk/fFByZXNlcnZlSG9zdHxSZWNlaXZlQnVmZmVyU2l6ZXxSZW1vdGV8UmVtb3RlTWF0Y2h8UmVxdWVzdHN8U0NHSUludGVybmFsUmVkaXJlY3R8U0NHSVNlbmRmaWxlfFNldHxTb3VyY2VBZGRyZXNzfFN0YXR1c3xUaW1lb3V0fFZpYSl8UmVhZG1lTmFtZXxSZWNlaXZlQnVmZmVyU2l6ZXxSZWRpcmVjdHxSZWRpcmVjdE1hdGNofFJlZGlyZWN0UGVybWFuZW50fFJlZGlyZWN0VGVtcHxSZWZsZWN0b3JIZWFkZXJ8UmVtb3RlSVAoPzpIZWFkZXJ8SW50ZXJuYWxQcm94eXxJbnRlcm5hbFByb3h5TGlzdHxQcm94aWVzSGVhZGVyfFRydXN0ZWRQcm94eXxUcnVzdGVkUHJveHlMaXN0KXxSZW1vdmVDaGFyc2V0fFJlbW92ZUVuY29kaW5nfFJlbW92ZUhhbmRsZXJ8UmVtb3ZlSW5wdXRGaWx0ZXJ8UmVtb3ZlTGFuZ3VhZ2V8UmVtb3ZlT3V0cHV0RmlsdGVyfFJlbW92ZVR5cGV8UmVxdWVzdEhlYWRlcnxSZXF1ZXN0UmVhZFRpbWVvdXR8UmVxdWlyZXxSZXdyaXRlKD86QmFzZXxDb25kfEVuZ2luZXxNYXB8T3B0aW9uc3xSdWxlKXxSTGltaXRDUFV8UkxpbWl0TUVNfFJMaW1pdE5QUk9DfFNhdGlzZnl8U2NvcmVCb2FyZEZpbGV8U2NyaXB0KD86QWxpYXN8QWxpYXNNYXRjaHxJbnRlcnByZXRlclNvdXJjZXxMb2d8TG9nQnVmZmVyfExvZ0xlbmd0aHxTb2NrKT98U2VjdXJlTGlzdGVufFNlZVJlcXVlc3RUYWlsfFNlbmRCdWZmZXJTaXplfFNlcnZlcig/OkFkbWlufEFsaWFzfExpbWl0fE5hbWV8UGF0aHxSb290fFNpZ25hdHVyZXxUb2tlbnMpfFNlc3Npb24oPzpDb29raWUoPzpOYW1lfE5hbWUyfFJlbW92ZSl8Q3J5cHRvKD86Q2lwaGVyfERyaXZlcnxQYXNzcGhyYXNlfFBhc3NwaHJhc2VGaWxlKXxEQkQoPzpDb29raWVOYW1lfENvb2tpZU5hbWUyfENvb2tpZVJlbW92ZXxEZWxldGVMYWJlbHxJbnNlcnRMYWJlbHxQZXJVc2VyfFNlbGVjdExhYmVsfFVwZGF0ZUxhYmVsKXxFbnZ8RXhjbHVkZXxIZWFkZXJ8SW5jbHVkZXxNYXhBZ2UpP3xTZXRFbnZ8U2V0RW52SWZ8U2V0RW52SWZFeHByfFNldEVudklmTm9DYXNlfFNldEhhbmRsZXJ8U2V0SW5wdXRGaWx0ZXJ8U2V0T3V0cHV0RmlsdGVyfFNTSUVuZFRhZ3xTU0lFcnJvck1zZ3xTU0lFVGFnfFNTSUxhc3RNb2RpZmllZHxTU0lMZWdhY3lFeHByUGFyc2VyfFNTSVN0YXJ0VGFnfFNTSVRpbWVGb3JtYXR8U1NJVW5kZWZpbmVkRWNob3xTU0woPzpDQUNlcnRpZmljYXRlRmlsZXxDQUNlcnRpZmljYXRlUGF0aHxDQUROUmVxdWVzdEZpbGV8Q0FETlJlcXVlc3RQYXRofENBUmV2b2NhdGlvbkNoZWNrfENBUmV2b2NhdGlvbkZpbGV8Q0FSZXZvY2F0aW9uUGF0aHxDZXJ0aWZpY2F0ZUNoYWluRmlsZXxDZXJ0aWZpY2F0ZUZpbGV8Q2VydGlmaWNhdGVLZXlGaWxlfENpcGhlclN1aXRlfENvbXByZXNzaW9ufENyeXB0b0RldmljZXxFbmdpbmV8RklQU3xIb25vckNpcGhlck9yZGVyfEluc2VjdXJlUmVuZWdvdGlhdGlvbnxPQ1NQKD86RGVmYXVsdFJlc3BvbmRlcnxFbmFibGV8T3ZlcnJpZGVSZXNwb25kZXJ8UmVzcG9uZGVyVGltZW91dHxSZXNwb25zZU1heEFnZXxSZXNwb25zZVRpbWVTa2V3fFVzZVJlcXVlc3ROb25jZSl8T3BlblNTTENvbmZDbWR8T3B0aW9uc3xQYXNzUGhyYXNlRGlhbG9nfFByb3RvY29sfFByb3h5KD86Q0FDZXJ0aWZpY2F0ZUZpbGV8Q0FDZXJ0aWZpY2F0ZVBhdGh8Q0FSZXZvY2F0aW9uKD86Q2hlY2t8RmlsZXxQYXRoKXxDaGVja1BlZXIoPzpDTnxFeHBpcmV8TmFtZSl8Q2lwaGVyU3VpdGV8RW5naW5lfE1hY2hpbmVDZXJ0aWZpY2F0ZSg/OkNoYWluRmlsZXxGaWxlfFBhdGgpfFByb3RvY29sfFZlcmlmeXxWZXJpZnlEZXB0aCl8UmFuZG9tU2VlZHxSZW5lZ0J1ZmZlclNpemV8UmVxdWlyZXxSZXF1aXJlU1NMfFNlc3Npb24oPzpDYWNoZXxDYWNoZVRpbWVvdXR8VGlja2V0S2V5RmlsZXxUaWNrZXRzKXxTUlBVbmtub3duVXNlclNlZWR8U1JQVmVyaWZpZXJGaWxlfFN0YXBsaW5nKD86Q2FjaGV8RXJyb3JDYWNoZVRpbWVvdXR8RmFrZVRyeUxhdGVyfEZvcmNlVVJMfFJlc3BvbmRlclRpbWVvdXR8UmVzcG9uc2VNYXhBZ2V8UmVzcG9uc2VUaW1lU2tld3xSZXR1cm5SZXNwb25kZXJFcnJvcnN8U3RhbmRhcmRDYWNoZVRpbWVvdXQpfFN0cmljdFNOSVZIb3N0Q2hlY2t8VXNlck5hbWV8VXNlU3RhcGxpbmd8VmVyaWZ5Q2xpZW50fFZlcmlmeURlcHRoKXxTdGFydFNlcnZlcnN8U3RhcnRUaHJlYWRzfFN1YnN0aXR1dGV8U3VleGVjfFN1ZXhlY1VzZXJHcm91cHxUaHJlYWRMaW1pdHxUaHJlYWRzUGVyQ2hpbGR8VGhyZWFkU3RhY2tTaXplfFRpbWVPdXR8VHJhY2VFbmFibGV8VHJhbnNmZXJMb2d8VHlwZXNDb25maWd8VW5EZWZpbmV8VW5kZWZNYWNyb3xVbnNldEVudnxVc2V8VXNlQ2Fub25pY2FsTmFtZXxVc2VDYW5vbmljYWxQaHlzaWNhbFBvcnR8VXNlcnxVc2VyRGlyfFZIb3N0Q0dJTW9kZXxWSG9zdENHSVByaXZzfFZIb3N0R3JvdXB8Vkhvc3RQcml2c3xWSG9zdFNlY3VyZXxWSG9zdFVzZXJ8VmlydHVhbCg/OkRvY3VtZW50Um9vdHxTY3JpcHRBbGlhcykoPzpJUCk/fFdhdGNoZG9nSW50ZXJ2YWx8WEJpdEhhY2t8eG1sMkVuY0FsaWFzfHhtbDJFbmNEZWZhdWx0fHhtbDJTdGFydFBhcnNlKVxcYi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdkaXJlY3RpdmUtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLzxcXC8/XFxiKD86QXV0aFtuel1Qcm92aWRlckFsaWFzfERpcmVjdG9yeXxEaXJlY3RvcnlNYXRjaHxFbHNlfEVsc2VJZnxGaWxlc3xGaWxlc01hdGNofElmfElmRGVmaW5lfElmTW9kdWxlfElmVmVyc2lvbnxMaW1pdHxMaW1pdEV4Y2VwdHxMb2NhdGlvbnxMb2NhdGlvbk1hdGNofE1hY3JvfFByb3h5fFJlcXVpcmUoPzpBbGx8QW55fE5vbmUpfFZpcnR1YWxIb3N0KVxcYi4qPi9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RpcmVjdGl2ZS1ibG9jayc6IHtcblx0XHRcdFx0cGF0dGVybjogL148XFwvP1xcdysvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjxcXC8/L1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbGlhczogJ3RhZydcblx0XHRcdH0sXG5cdFx0XHQnZGlyZWN0aXZlLWJsb2NrLXBhcmFtZXRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLy4qW14+XS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Lyxcblx0XHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyhcInwnKS4qXFwxLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQndmFyaWFibGUnOiAvWyQlXVxcez8oPzpcXHdcXC4/Wy0rOl0/KStcXH0/L1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC8+L1xuXHRcdH0sXG5cdFx0YWxpYXM6ICd0YWcnXG5cdH0sXG5cdCdkaXJlY3RpdmUtZmxhZ3MnOiB7XG5cdFx0cGF0dGVybjogL1xcWyg/OltcXHc9XSw/KStcXF0vLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpLipcXDEvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogL1skJV1cXHs/KD86XFx3XFwuP1stKzpdPykrXFx9Py9cblx0XHR9XG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9bJCVdXFx7Pyg/Olxcd1xcLj9bLSs6XT8pK1xcfT8vLFxuXHQncmVnZXgnOiAvXFxePy4qXFwkfFxcXi4qXFwkPy9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zcWwgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98KD86LS18XFwvXFwvfCMpLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvQChbXCInYF0pKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKStcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvQFtcXHcuJF0rL1xuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXkBcXFxcXSkoXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwyKVteXFxcXF18XFwyXFwyKSpcXDIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXkBcXFxcXSlgKD86XFxcXFtcXHNcXFNdfFteYFxcXFxdfGBgKSpgLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eYHxgJC9cblx0XHR9XG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGIoPzpBVkd8Q09VTlR8RklSU1R8Rk9STUFUfExBU1R8TENBU0V8TEVOfE1BWHxNSUR8TUlOfE1PRHxOT1d8Uk9VTkR8U1VNfFVDQVNFKSg/PVxccypcXCgpL2ksIC8vIFNob3VsZCB3ZSBoaWdobGlnaHQgdXNlciBkZWZpbmVkIGZ1bmN0aW9ucyB0b28/XG5cdCdrZXl3b3JkJzogL1xcYig/OkFDVElPTnxBRER8QUZURVJ8QUxHT1JJVEhNfEFMTHxBTFRFUnxBTkFMWVpFfEFOWXxBUFBMWXxBU3xBU0N8QVVUSE9SSVpBVElPTnxBVVRPX0lOQ1JFTUVOVHxCQUNLVVB8QkRCfEJFR0lOfEJFUktFTEVZREJ8QklHSU5UfEJJTkFSWXxCSVR8QkxPQnxCT09MfEJPT0xFQU58QlJFQUt8QlJPV1NFfEJUUkVFfEJVTEt8Qll8Q0FMTHxDQVNDQURFRD98Q0FTRXxDSEFJTnxDSEFSKD86QUNURVJ8U0VUKT98Q0hFQ0soPzpQT0lOVCk/fENMT1NFfENMVVNURVJFRHxDT0FMRVNDRXxDT0xMQVRFfENPTFVNTlM/fENPTU1FTlR8Q09NTUlUKD86VEVEKT98Q09NUFVURXxDT05ORUNUfENPTlNJU1RFTlR8Q09OU1RSQUlOVHxDT05UQUlOUyg/OlRBQkxFKT98Q09OVElOVUV8Q09OVkVSVHxDUkVBVEV8Q1JPU1N8Q1VSUkVOVCg/Ol9EQVRFfF9USU1FfF9USU1FU1RBTVB8X1VTRVIpP3xDVVJTT1J8Q1lDTEV8REFUQSg/OkJBU0VTPyk/fERBVEUoPzpUSU1FKT98REFZfERCQ0N8REVBTExPQ0FURXxERUN8REVDSU1BTHxERUNMQVJFfERFRkFVTFR8REVGSU5FUnxERUxBWUVEfERFTEVURXxERUxJTUlURVJTP3xERU5ZfERFU0N8REVTQ1JJQkV8REVURVJNSU5JU1RJQ3xESVNBQkxFfERJU0NBUkR8RElTS3xESVNUSU5DVHxESVNUSU5DVFJPV3xESVNUUklCVVRFRHxET3xET1VCTEV8RFJPUHxEVU1NWXxEVU1QKD86RklMRSk/fERVUExJQ0FURXxFTFNFKD86SUYpP3xFTkFCTEV8RU5DTE9TRUR8RU5EfEVOR0lORXxFTlVNfEVSUkxWTHxFUlJPUlN8RVNDQVBFRD98RVhDRVBUfEVYRUMoPzpVVEUpP3xFWElTVFN8RVhJVHxFWFBMQUlOfEVYVEVOREVEfEZFVENIfEZJRUxEU3xGSUxFfEZJTExGQUNUT1J8RklSU1R8RklYRUR8RkxPQVR8Rk9MTE9XSU5HfEZPUig/OiBFQUNIIFJPVyk/fEZPUkNFfEZPUkVJR058RlJFRVRFWFQoPzpUQUJMRSk/fEZST018RlVMTHxGVU5DVElPTnxHRU9NRVRSWSg/OkNPTExFQ1RJT04pP3xHTE9CQUx8R09UT3xHUkFOVHxHUk9VUHxIQU5ETEVSfEhBU0h8SEFWSU5HfEhPTERMT0NLfEhPVVJ8SURFTlRJVFkoPzpDT0x8X0lOU0VSVCk/fElGfElHTk9SRXxJTVBPUlR8SU5ERVh8SU5GSUxFfElOTkVSfElOTk9EQnxJTk9VVHxJTlNFUlR8SU5UfElOVEVHRVJ8SU5URVJTRUNUfElOVEVSVkFMfElOVE98SU5WT0tFUnxJU09MQVRJT058SVRFUkFURXxKT0lOfEtFWVM/fEtJTEx8TEFOR1VBR0V8TEFTVHxMRUFWRXxMRUZUfExFVkVMfExJTUlUfExJTkVOT3xMSU5FU3xMSU5FU1RSSU5HfExPQUR8TE9DQUx8TE9DS3xMT05HKD86QkxPQnxURVhUKXxMT09QfE1BVENIKD86RUQpP3xNRURJVU0oPzpCTE9CfElOVHxURVhUKXxNRVJHRXxNSURETEVJTlR8TUlOVVRFfE1PREV8TU9ESUZJRVN8TU9ESUZZfE1PTlRIfE1VTFRJKD86TElORVNUUklOR3xQT0lOVHxQT0xZR09OKXxOQVRJT05BTHxOQVRVUkFMfE5DSEFSfE5FWFR8Tk98Tk9OQ0xVU1RFUkVEfE5VTExJRnxOVU1FUklDfE9GRj98T0ZGU0VUUz98T058T1BFTig/OkRBVEFTT1VSQ0V8UVVFUll8Uk9XU0VUKT98T1BUSU1JWkV8T1BUSU9OKD86QUxMWSk/fE9SREVSfE9VVCg/OkVSfEZJTEUpP3xPVkVSfFBBUlRJQUx8UEFSVElUSU9OfFBFUkNFTlR8UElWT1R8UExBTnxQT0lOVHxQT0xZR09OfFBSRUNFRElOR3xQUkVDSVNJT058UFJFUEFSRXxQUkVWfFBSSU1BUll8UFJJTlR8UFJJVklMRUdFU3xQUk9DKD86RURVUkUpP3xQVUJMSUN8UFVSR0V8UVVJQ0t8UkFJU0VSUk9SfFJFQURTP3xSRUFMfFJFQ09ORklHVVJFfFJFRkVSRU5DRVN8UkVMRUFTRXxSRU5BTUV8UkVQRUFUKD86QUJMRSk/fFJFUExBQ0V8UkVQTElDQVRJT058UkVRVUlSRXxSRVNJR05BTHxSRVNUT1JFfFJFU1RSSUNUfFJFVFVSTig/OklOR3xTKT98UkVWT0tFfFJJR0hUfFJPTExCQUNLfFJPVVRJTkV8Uk9XKD86Q09VTlR8R1VJRENPTHxTKT98UlRSRUV8UlVMRXxTQVZFKD86UE9JTlQpP3xTQ0hFTUF8U0VDT05EfFNFTEVDVHxTRVJJQUwoPzpJWkFCTEUpP3xTRVNTSU9OKD86X1VTRVIpP3xTRVQoPzpVU0VSKT98U0hBUkV8U0hPV3xTSFVURE9XTnxTSU1QTEV8U01BTExJTlR8U05BUFNIT1R8U09NRXxTT05BTUV8U1FMfFNUQVJUKD86SU5HKT98U1RBVElTVElDU3xTVEFUVVN8U1RSSVBFRHxTWVNURU1fVVNFUnxUQUJMRVM/fFRBQkxFU1BBQ0V8VEVNUCg/Ok9SQVJZfFRBQkxFKT98VEVSTUlOQVRFRHxURVhUKD86U0laRSk/fFRIRU58VElNRSg/OlNUQU1QKT98VElOWSg/OkJMT0J8SU5UfFRFWFQpfFRPUD98VFJBTig/OlNBQ1RJT05TPyk/fFRSSUdHRVJ8VFJVTkNBVEV8VFNFUVVBTHxUWVBFUz98VU5CT1VOREVEfFVOQ09NTUlUVEVEfFVOREVGSU5FRHxVTklPTnxVTklRVUV8VU5MT0NLfFVOUElWT1R8VU5TSUdORUR8VVBEQVRFKD86VEVYVCk/fFVTQUdFfFVTRXxVU0VSfFVTSU5HfFZBTFVFUz98VkFSKD86QklOQVJZfENIQVJ8Q0hBUkFDVEVSfFlJTkcpfFZJRVd8V0FJVEZPUnxXQVJOSU5HU3xXSEVOfFdIRVJFfFdISUxFfFdJVEgoPzogUk9MTFVQfElOKT98V09SS3xXUklURSg/OlRFWFQpP3xZRUFSKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxOVUxMfFRSVUUpXFxiL2ksXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkYS1mXStcXGJ8XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqXFwvPSVefl18JiY/fFxcfFxcfD98IT0/fDwoPzo9Pj98PHw+KT98Pls+PV0/fFxcYig/OkFORHxCRVRXRUVOfERJVnxJTElLRXxJTnxJU3xMSUtFfE5PVHxPUnxSRUdFWFB8UkxJS0V8U09VTkRTIExJS0V8WE9SKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWztbXFxdKClgLC5dL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkcyA9IC9cXGIoPzooPzphZnRlcnxiZWZvcmUpKD89XFxzK1thLXpdKXxhYnN0cmFjdHxhY3RpdmF0ZXxhbmR8YW55fGFycmF5fGFzfGFzY3xhdXRvbm9tb3VzfGJlZ2lufGJpZ2RlY2ltYWx8YmxvYnxib29sZWFufGJyZWFrfGJ1bGt8Ynl8Ynl0ZXxjYXNlfGNhc3R8Y2F0Y2h8Y2hhcnxjbGFzc3xjb2xsZWN0fGNvbW1pdHxjb25zdHxjb250aW51ZXxjdXJyZW5jeXxkYXRlfGRhdGV0aW1lfGRlY2ltYWx8ZGVmYXVsdHxkZWxldGV8ZGVzY3xkb3xkb3VibGV8ZWxzZXxlbmR8ZW51bXxleGNlcHRpb258ZXhpdHxleHBvcnR8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxmcm9tfGdldCg/PVxccypbe307XSl8Z2xvYmFsfGdvdG98Z3JvdXB8aGF2aW5nfGhpbnR8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW58aW5uZXJ8aW5zZXJ0fGluc3RhbmNlb2Z8aW50fGludGVnZXJ8aW50ZXJmYWNlfGludG98am9pbnxsaWtlfGxpbWl0fGxpc3R8bG9uZ3xsb29wfG1hcHxtZXJnZXxuZXd8bm90fG51bGx8bnVsbHN8bnVtYmVyfG9iamVjdHxvZnxvbnxvcnxvdXRlcnxvdmVycmlkZXxwYWNrYWdlfHBhcmFsbGVsfHByYWdtYXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmV0cmlldmV8cmV0dXJufHJvbGxiYWNrfHNlbGVjdHxzZXR8c2hvcnR8c09iamVjdHxzb3J0fHN0YXRpY3xzdHJpbmd8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHxzeXN0ZW18dGVzdG1ldGhvZHx0aGVufHRoaXN8dGhyb3d8dGltZXx0cmFuc2FjdGlvbnx0cmFuc2llbnR8dHJpZ2dlcnx0cnl8dW5kZWxldGV8dXBkYXRlfHVwc2VydHx1c2luZ3x2aXJ0dWFsfHZvaWR8d2Vic2VydmljZXx3aGVufHdoZXJlfHdoaWxlfCg/OmluaGVyaXRlZHx3aXRofHdpdGhvdXQpXFxzK3NoYXJpbmcpXFxiL2k7XG5cblx0dmFyIGNsYXNzTmFtZSA9IC9cXGIoPzooPz1bYS16X11cXHcqXFxzKls8XFxbXSl8KD8hPGtleXdvcmQ+KSlbQS1aX11cXHcqKD86XFxzKlxcLlxccypbQS1aX11cXHcqKSpcXGIoPzpcXHMqKD86XFxbXFxzKlxcXXw8KD86W148Pl18PCg/OltePD5dfDxbXjw+XSo+KSo+KSo+KSkqLy5zb3VyY2Vcblx0XHQucmVwbGFjZSgvPGtleXdvcmQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmRzLnNvdXJjZTsgfSk7XG5cdC8qKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVybiAqL1xuXHRmdW5jdGlvbiBpbnNlcnRDbGFzc05hbWUocGF0dGVybikge1xuXHRcdHJldHVybiBSZWdFeHAocGF0dGVybi5yZXBsYWNlKC88Q0xBU1MtTkFNRT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gY2xhc3NOYW1lOyB9KSwgJ2knKTtcblx0fVxuXG5cdHZhciBjbGFzc05hbWVJbnNpZGUgPSB7XG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde307LDouPD5dL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5hcGV4ID0ge1xuXHRcdCdjb21tZW50JzogUHJpc20ubGFuZ3VhZ2VzLmNsaWtlLmNvbW1lbnQsXG5cdFx0J3N0cmluZyc6IFByaXNtLmxhbmd1YWdlcy5jbGlrZS5zdHJpbmcsXG5cdFx0J3NxbCc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86Wz0sKHs6XXxcXGJyZXR1cm4pXFxzKilcXFtbXlxcW1xcXV0qXFxdL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1zcWwnLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuc3FsXG5cdFx0fSxcblxuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL0BcXHcrXFxiLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogaW5zZXJ0Q2xhc3NOYW1lKC8oXFxiKD86Y2xhc3N8ZW51bXxleHRlbmRzfGltcGxlbWVudHN8aW5zdGFuY2VvZnxpbnRlcmZhY2V8bmV3fHRyaWdnZXJcXHMrXFx3K1xccytvbilcXHMrKTxDTEFTUy1OQU1FPi8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNhc3Rcblx0XHRcdFx0cGF0dGVybjogaW5zZXJ0Q2xhc3NOYW1lKC8oXFwoXFxzKik8Q0xBU1MtTkFNRT4oPz1cXHMqXFwpXFxzKltcXHcoXSkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY2xhc3NOYW1lSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyB2YXJpYWJsZS9wYXJhbWV0ZXIgZGVjbGFyYXRpb24gYW5kIHJldHVybiB0eXBlc1xuXHRcdFx0XHRwYXR0ZXJuOiBpbnNlcnRDbGFzc05hbWUoLzxDTEFTUy1OQU1FPig/PVxccypcXHcrXFxzKls7PSwoKXs6XSkvLnNvdXJjZSksXG5cdFx0XHRcdGluc2lkZTogY2xhc3NOYW1lSW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQndHJpZ2dlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxidHJpZ2dlclxccyspXFx3K1xcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblxuXHRcdCdudW1iZXInOiAvKD86XFxCXFwuXFxkK3xcXGJcXGQrKD86XFwuXFxkK3xMKT8pXFxiL2ksXG5cdFx0J29wZXJhdG9yJzogL1shPV0oPzo9PT8pP3xcXD9cXC4/fCYmfFxcfFxcfHwtLXxcXCtcXCt8Wy0rKi9eJnxdPT98Onw8PD89P3w+ezEsM309Py8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXXt9OywuXS9cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYXBsID0ge1xuXHQnY29tbWVudCc6IC8oPzpcdTIzNUR8I1shIF0pLiokL20sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXidcXHJcXG5dfCcnKSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC9cdTAwQUY/KD86XFxkKlxcLj9cXGJcXGQrKD86ZVsrXHUwMEFGXT9cXGQrKT98XHUwMEFGfFx1MjIxRSkoPzpqXHUwMEFGPyg/Oig/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzplWytcdTAwQUZdP1xcZCspP3xcdTAwQUZ8XHUyMjFFKSk/L2ksXG5cdCdzdGF0ZW1lbnQnOiAvOltBLVpdW2Etel1bQS1aYS16XSpcXGIvLFxuXHQnc3lzdGVtLWZ1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cdTIzOTVbQS1aXSsvaSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnY29uc3RhbnQnOiAvW1x1MjM2Q1x1MjMzRSNcdTIzOTVcdTIzNUVdLyxcblx0J2Z1bmN0aW9uJzogL1stK1x1MDBEN1x1MDBGN1x1MjMwOFx1MjMwQVx1MjIyM3xcdTIzNzNcdTIzNzg/Klx1MjM1Rlx1MjVDQiFcdTIzMzk8XHUyMjY0PT5cdTIyNjVcdTIyNjBcdTIyNjFcdTIyNjJcdTIyMEFcdTIzNzdcdTIyMkFcdTIyMjl+XHUyMjI4XHUyMjI3XHUyMzcxXHUyMzcyXHUyMzc0LFx1MjM2QVx1MjMzRFx1MjI5Nlx1MjM0OVx1MjE5MVx1MjE5M1x1MjI4Mlx1MjI4M1x1MjI4Nlx1MjI4N1x1MjMzN1x1MjM0Qlx1MjM1Mlx1MjJBNFx1MjJBNVx1MjM1NVx1MjM0RVx1MjJBM1x1MjJBMlx1MjM0MVx1MjM0Mlx1MjI0OFx1MjM2Rlx1MjE5N1x1MDBBNFx1MjE5Ml0vLFxuXHQnbW9uYWRpYy1vcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvW1xcXFxcXC9cdTIzM0ZcdTIzNDBcdTAwQThcdTIzNjhcdTIzMzYmXHUyMjI1XS8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J2R5YWRpYy1vcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvWy5cdTIzNjNcdTIzNjBcdTIzNjRcdTIyMThcdTIzMzhAXHUyMzNBXHUyMzY1XS8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J2Fzc2lnbm1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1x1MjE5MC8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW1xcWztcXF0oKVx1MjVDN1x1MjJDNF0vLFxuXHQnZGZuJzoge1xuXHRcdHBhdHRlcm46IC9be31cdTIzN0FcdTIzNzVcdTIzNzZcdTIzNzlcdTIyMDdcdTIzNkI6XS8sXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYXBwbGVzY3JpcHQgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdC8vIEFsbG93IG9uZSBsZXZlbCBvZiBuZXN0aW5nXG5cdFx0L1xcKFxcKig/OlxcKFxcKig/OlteKl18XFwqKD8hXFwpKSkqXFwqXFwpfCg/IVxcKFxcKilbXFxzXFxTXSkqP1xcKlxcKS8sXG5cdFx0Ly0tLisvLFxuXHRcdC8jLisvXG5cdF0sXG5cdCdzdHJpbmcnOiAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZS0/XFxkKyk/XFxiL2ksXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvWyY9XHUyMjYwXHUyMjY0XHUyMjY1KitcXC1cXC9cdTAwRjdeXXxbPD5dPT8vLFxuXHRcdC9cXGIoPzooPzpiZWdpbnxlbmR8c3RhcnQpcz8gd2l0aHwoPzpjb250YWlucz98KD86ZG9lcyBub3R8ZG9lc24ndCkgY29udGFpbil8KD86aXN8aXNuJ3R8aXMgbm90KSAoPzpjb250YWluZWQgYnl8aW4pfCg/Oig/OmlzfGlzbid0fGlzIG5vdCkgKT8oPzpncmVhdGVyfGxlc3MpIHRoYW4oPzogb3IgZXF1YWwpPyg/OiB0byk/fCg/OmNvbWVzfCg/OmRvZXMgbm90fGRvZXNuJ3QpIGNvbWUpICg/OmFmdGVyfGJlZm9yZSl8KD86aXN8aXNuJ3R8aXMgbm90KSBlcXVhbCg/OiB0byk/fCg/Oig/OmRvZXMgbm90fGRvZXNuJ3QpIGVxdWFsfGVxdWFsIHRvfGVxdWFsc3xpcyBub3R8aXNuJ3QpfCg/OmEgKT8oPzpyZWYoPzogdG8pP3xyZWZlcmVuY2UgdG8pfCg/OmFuZHxhc3xkaXZ8bW9kfG5vdHxvcikpXFxiL1xuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphYm91dHxhYm92ZXxhZnRlcnxhZ2FpbnN0fGFwYXJ0IGZyb218YXJvdW5kfGFzaWRlIGZyb218YXR8YmFja3xiZWZvcmV8YmVnaW5uaW5nfGJlaGluZHxiZWxvd3xiZW5lYXRofGJlc2lkZXxiZXR3ZWVufGJ1dHxieXxjb25zaWRlcmluZ3xjb250aW51ZXxjb3B5fGRvZXN8ZWlnaHRofGVsc2V8ZW5kfGVxdWFsfGVycm9yfGV2ZXJ5fGV4aXR8ZmFsc2V8ZmlmdGh8Zmlyc3R8Zm9yfGZvdXJ0aHxmcm9tfGZyb250fGdldHxnaXZlbnxnbG9iYWx8aWZ8aWdub3Jpbmd8aW58aW5zdGVhZCBvZnxpbnRvfGlzfGl0fGl0c3xsYXN0fGxvY2FsfG1lfG1pZGRsZXxteXxuaW50aHxvZnxvbnxvbnRvfG91dCBvZnxvdmVyfHByb3B8cHJvcGVydHl8cHV0fHJlcGVhdHxyZXR1cm58cmV0dXJuaW5nfHNlY29uZHxzZXR8c2V2ZW50aHxzaW5jZXxzaXh0aHxzb21lfHRlbGx8dGVudGh8dGhhdHx0aGV8dGhlbnx0aGlyZHx0aHJvdWdofHRocnV8dGltZW91dHx0aW1lc3x0b3x0cmFuc2FjdGlvbnx0cnVlfHRyeXx1bnRpbHx3aGVyZXx3aGlsZXx3aG9zZXx3aXRofHdpdGhvdXQpXFxiLyxcblx0J2NsYXNzLW5hbWUnOiAvXFxiKD86UE9TSVggZmlsZXxSR0IgY29sb3J8YWxpYXN8YXBwbGljYXRpb258Ym9vbGVhbnxjZW50aW1ldGVyc3xjZW50aW1ldHJlc3xjbGFzc3xjb25zdGFudHxjdWJpYyBjZW50aW1ldGVyc3xjdWJpYyBjZW50aW1ldHJlc3xjdWJpYyBmZWV0fGN1YmljIGluY2hlc3xjdWJpYyBtZXRlcnN8Y3ViaWMgbWV0cmVzfGN1YmljIHlhcmRzfGRhdGV8ZGVncmVlcyBDZWxzaXVzfGRlZ3JlZXMgRmFocmVuaGVpdHxkZWdyZWVzIEtlbHZpbnxmZWV0fGZpbGV8Z2FsbG9uc3xncmFtc3xpbmNoZXN8aW50ZWdlcnxraWxvZ3JhbXN8a2lsb21ldGVyc3xraWxvbWV0cmVzfGxpc3R8bGl0ZXJzfGxpdHJlc3xtZXRlcnN8bWV0cmVzfG1pbGVzfG51bWJlcnxvdW5jZXN8cG91bmRzfHF1YXJ0c3xyZWFsfHJlY29yZHxyZWZlcmVuY2V8c2NyaXB0fHNxdWFyZSBmZWV0fHNxdWFyZSBraWxvbWV0ZXJzfHNxdWFyZSBraWxvbWV0cmVzfHNxdWFyZSBtZXRlcnN8c3F1YXJlIG1ldHJlc3xzcXVhcmUgbWlsZXN8c3F1YXJlIHlhcmRzfHRleHR8eWFyZHMpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpOixcdTAwQUNcdTAwQUJcdTAwQkJcdTMwMEFcdTMwMEJdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFxbCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKFt7LF1cXHMqKSg/Oig/IVxcZClcXHcrfChbXCInXHUwMEI0YF0pKD86KD8hXFwyKVteXFxcXFxcclxcbl18XFxcXC4pKlxcMikoPz1cXHMqOikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxcLikqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogLyhbXHUwMEI0YF0pKD86KD8hXFwxKVteXFxcXFxcclxcbl18XFxcXC4pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9AQD9cXHcrLyxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXGJXSVRIXFxzKylDT1VOVCg/PVxccytJTlRPXFxiKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0L1xcYig/OkFHR1JFR0FURXxBTEx8QU5EfEFOWXxBU0N8Q09MTEVDVHxERVNDfERJU1RJTkNUfEZJTFRFUnxGT1J8R1JBUEh8SU58SU5CT1VORHxJTlNFUlR8SU5UT3xLX1BBVEhTfEtfU0hPUlRFU1RfUEFUSFN8TEVUfExJS0V8TElNSVR8Tk9ORXxOT1R8TlVMTHxPUnxPVVRCT1VORHxSRU1PVkV8UkVQTEFDRXxSRVRVUk58U0hPUlRFU1RfUEFUSHxTT1JUfFVQREFURXxVUFNFUlR8V0lORE9XfFdJVEgpXFxiL2ksXG5cdFx0Ly8gcHNldWRvIGtleXdvcmRzIGdldCBhIGxvb2tiZWhpbmQgdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmVzXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3LltdKSg/OktFRVB8UFJVTkV8U0VBUkNIfFRPKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3LltdKSg/OkNVUlJFTlR8TkVXfE9MRClcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYk9QVElPTlMoPz1cXHMqXFx7KS9pXG5cdFx0fVxuXHRdLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD8hXFxkKVxcdysoPz1cXHMqXFwoKS8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdCdyYW5nZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFwuXFwuLyxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGIwYlswMV0rL2ksXG5cdFx0L1xcYjB4WzAtOWEtZl0rL2ksXG5cdFx0Lyg/OlxcQlxcLlxcZCt8XFxiKD86MHxbMS05XVxcZCopKD86XFwuXFxkKyk/KSg/OmVbKy1dP1xcZCspPy9pXG5cdF0sXG5cdCdvcGVyYXRvcic6IC9cXCp7Mix9fFs9IV1+fFshPTw+XT0/fCYmfFxcfFxcfHxbLSsqLyVdLyxcblx0J3B1bmN0dWF0aW9uJzogLzo6fFs/LjosOygpW1xcXXt9XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5jID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8oPzpbXlxcclxcblxcXFxdfFxcXFwoPzpcXHJcXG4/fFxcbnwoPyFbXFxyXFxuXSkpKSp8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvYy9sYW5ndWFnZS9zdHJpbmdfbGl0ZXJhbFxuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmVudW18c3RydWN0KVxccysoPzpfX2F0dHJpYnV0ZV9fXFxzKlxcKFxcKFtcXHNcXFNdKj9cXClcXClcXHMqKT8pXFx3K3xcXGJbYS16XVxcdypfdFxcYi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpfQWxpZ25hc3xfQWxpZ25vZnxfQXRvbWljfF9Cb29sfF9Db21wbGV4fF9HZW5lcmljfF9JbWFnaW5hcnl8X05vcmV0dXJufF9TdGF0aWNfYXNzZXJ0fF9UaHJlYWRfbG9jYWx8X19hdHRyaWJ1dGVfX3xhc218YXV0b3xicmVha3xjYXNlfGNoYXJ8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVybnxmbG9hdHxmb3J8Z290b3xpZnxpbmxpbmV8aW50fGxvbmd8cmVnaXN0ZXJ8cmV0dXJufHNob3J0fHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0cnVjdHxzd2l0Y2h8dHlwZWRlZnx0eXBlb2Z8dW5pb258dW5zaWduZWR8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdCdudW1iZXInOiAvKD86XFxiMHgoPzpbXFxkYS1mXSsoPzpcXC5bXFxkYS1mXSopP3xcXC5bXFxkYS1mXSspKD86cFsrLV0/XFxkKyk/fCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8pW2Z1bF17MCw0fS9pLFxuXHQnb3BlcmF0b3InOiAvPj49P3w8PD0/fC0+fChbLSsmfDpdKVxcMXxbPzp+XXxbLSsqLyUmfF4hPTw+XT0/L1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2MnLCAnc3RyaW5nJywge1xuXHQnY2hhcic6IHtcblx0XHQvLyBodHRwczovL2VuLmNwcHJlZmVyZW5jZS5jb20vdy9jL2xhbmd1YWdlL2NoYXJhY3Rlcl9jb25zdGFudFxuXHRcdHBhdHRlcm46IC8nKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W14nXFxcXFxcclxcbl0pezAsMzJ9Jy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjJywgJ3N0cmluZycsIHtcblx0J21hY3JvJzoge1xuXHRcdC8vIGFsbG93IGZvciBtdWx0aWxpbmUgbWFjcm8gZGVmaW5pdGlvbnNcblx0XHQvLyBzcGFjZXMgYWZ0ZXIgdGhlICMgY2hhcmFjdGVyIGNvbXBpbGUgZmluZSB3aXRoIGdjY1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopI1xccypbYS16XSg/OlteXFxyXFxuXFxcXC9dfFxcLyg/IVxcKil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC98XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzdHJpbmcnOiBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHQvLyBoaWdobGlnaHQgdGhlIHBhdGggb2YgdGhlIGluY2x1ZGUgc3RhdGVtZW50IGFzIGEgc3RyaW5nXG5cdFx0XHRcdFx0cGF0dGVybjogL14oI1xccyppbmNsdWRlXFxzKik8W14+XSs+Lyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdFByaXNtLmxhbmd1YWdlcy5jWydzdHJpbmcnXVxuXHRcdFx0XSxcblx0XHRcdCdjaGFyJzogUHJpc20ubGFuZ3VhZ2VzLmNbJ2NoYXInXSxcblx0XHRcdCdjb21tZW50JzogUHJpc20ubGFuZ3VhZ2VzLmNbJ2NvbW1lbnQnXSxcblx0XHRcdCdtYWNyby1uYW1lJzogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheI1xccypkZWZpbmVcXHMrKVxcdytcXGIoPyFcXCgpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheI1xccypkZWZpbmVcXHMrKVxcdytcXGIoPz1cXCgpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0XHR9XG5cdFx0XHRdLFxuXHRcdFx0Ly8gaGlnaGxpZ2h0IG1hY3JvIGRpcmVjdGl2ZXMgYXMga2V5d29yZHNcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKCNcXHMqKVthLXpdKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHQnZGlyZWN0aXZlLWhhc2gnOiAvXiMvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLyMjfFxcXFwoPz1bXFxyXFxuXSkvLFxuXHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYycsICdmdW5jdGlvbicsIHtcblx0Ly8gaGlnaGxpZ2h0IHByZWRlZmluZWQgbWFjcm9zIGFzIGNvbnN0YW50c1xuXHQnY29uc3RhbnQnOiAvXFxiKD86RU9GfE5VTEx8U0VFS19DVVJ8U0VFS19FTkR8U0VFS19TRVR8X19EQVRFX198X19GSUxFX198X19MSU5FX198X19USU1FU1RBTVBfX3xfX1RJTUVfX3xfX2Z1bmNfX3xzdGRlcnJ8c3RkaW58c3Rkb3V0KVxcYi9cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLmNbJ2Jvb2xlYW4nXTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBrZXl3b3JkID0gL1xcYig/OmFsaWduYXN8YWxpZ25vZnxhc218YXV0b3xib29sfGJyZWFrfGNhc2V8Y2F0Y2h8Y2hhcnxjaGFyMTZfdHxjaGFyMzJfdHxjaGFyOF90fGNsYXNzfGNvX2F3YWl0fGNvX3JldHVybnxjb195aWVsZHxjb21wbHxjb25jZXB0fGNvbnN0fGNvbnN0X2Nhc3R8Y29uc3RldmFsfGNvbnN0ZXhwcnxjb25zdGluaXR8Y29udGludWV8ZGVjbHR5cGV8ZGVmYXVsdHxkZWxldGV8ZG98ZG91YmxlfGR5bmFtaWNfY2FzdHxlbHNlfGVudW18ZXhwbGljaXR8ZXhwb3J0fGV4dGVybnxmaW5hbHxmbG9hdHxmb3J8ZnJpZW5kfGdvdG98aWZ8aW1wb3J0fGlubGluZXxpbnR8aW50MTZfdHxpbnQzMl90fGludDY0X3R8aW50OF90fGxvbmd8bW9kdWxlfG11dGFibGV8bmFtZXNwYWNlfG5ld3xub2V4Y2VwdHxudWxscHRyfG9wZXJhdG9yfG92ZXJyaWRlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZWdpc3RlcnxyZWludGVycHJldF9jYXN0fHJlcXVpcmVzfHJldHVybnxzaG9ydHxzaWduZWR8c2l6ZW9mfHN0YXRpY3xzdGF0aWNfYXNzZXJ0fHN0YXRpY19jYXN0fHN0cnVjdHxzd2l0Y2h8dGVtcGxhdGV8dGhpc3x0aHJlYWRfbG9jYWx8dGhyb3d8dHJ5fHR5cGVkZWZ8dHlwZWlkfHR5cGVuYW1lfHVpbnQxNl90fHVpbnQzMl90fHVpbnQ2NF90fHVpbnQ4X3R8dW5pb258dW5zaWduZWR8dXNpbmd8dmlydHVhbHx2b2lkfHZvbGF0aWxlfHdjaGFyX3R8d2hpbGUpXFxiLztcblx0dmFyIG1vZE5hbWUgPSAvXFxiKD8hPGtleXdvcmQ+KVxcdysoPzpcXHMqXFwuXFxzKlxcdyspKlxcYi8uc291cmNlLnJlcGxhY2UoLzxrZXl3b3JkPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXl3b3JkLnNvdXJjZTsgfSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNwcCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2MnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmNsYXNzfGNvbmNlcHR8ZW51bXxzdHJ1Y3R8dHlwZW5hbWUpXFxzKykoPyE8a2V5d29yZD4pXFx3Ky8uc291cmNlXG5cdFx0XHRcdFx0LnJlcGxhY2UoLzxrZXl3b3JkPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXl3b3JkLnNvdXJjZTsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Ly8gVGhpcyBpcyBpbnRlbmRlZCB0byBjYXB0dXJlIHRoZSBjbGFzcyBuYW1lIG9mIG1ldGhvZCBpbXBsZW1lbnRhdGlvbnMgbGlrZTpcblx0XHRcdC8vICAgdm9pZCBmb286OmJhcigpIGNvbnN0IHt9XG5cdFx0XHQvLyBIb3dldmVyISBUaGUgYGZvb2AgaW4gdGhlIGFib3ZlIGV4YW1wbGUgY291bGQgYWxzbyBiZSBhIG5hbWVzcGFjZSwgc28gd2Ugb25seSBjYXB0dXJlIHRoZSBjbGFzcyBuYW1lIGlmXG5cdFx0XHQvLyBpdCBzdGFydHMgd2l0aCBhbiB1cHBlcmNhc2UgbGV0dGVyLiBUaGlzIGFwcHJveGltYXRpb24gc2hvdWxkIGdpdmUgZGVjZW50IHJlc3VsdHMuXG5cdFx0XHQvXFxiW0EtWl1cXHcqKD89XFxzKjo6XFxzKlxcdytcXHMqXFwoKS8sXG5cdFx0XHQvLyBUaGlzIHdpbGwgY2FwdHVyZSB0aGUgY2xhc3MgbmFtZSBiZWZvcmUgZGVzdHJ1Y3RvcnMgbGlrZTpcblx0XHRcdC8vICAgRm9vOjp+Rm9vKCkge31cblx0XHRcdC9cXGJbQS1aX11cXHcqKD89XFxzKjo6XFxzKn5cXHcrXFxzKlxcKCkvaSxcblx0XHRcdC8vIFRoaXMgYWxzbyBpbnRlbmRzIHRvIGNhcHR1cmUgdGhlIGNsYXNzIG5hbWUgb2YgbWV0aG9kIGltcGxlbWVudGF0aW9ucyBidXQgaGVyZSB0aGUgY2xhc3MgaGFzIHRlbXBsYXRlXG5cdFx0XHQvLyBwYXJhbWV0ZXJzLCBzbyBpdCBjYW4ndCBiZSBhIG5hbWVzcGFjZSAodW50aWwgQysrIGFkZHMgZ2VuZXJpYyBuYW1lc3BhY2VzKS5cblx0XHRcdC9cXGJcXHcrKD89XFxzKjwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj5cXHMqOjpcXHMqXFx3K1xccypcXCgpL1xuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3JkLFxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxiMGJbMDEnXSt8XFxiMHgoPzpbXFxkYS1mJ10rKD86XFwuW1xcZGEtZiddKik/fFxcLltcXGRhLWYnXSspKD86cFsrLV0/W1xcZCddKyk/fCg/OlxcYltcXGQnXSsoPzpcXC5bXFxkJ10qKT98XFxCXFwuW1xcZCddKykoPzplWystXT9bXFxkJ10rKT8pW2Z1bF17MCw0fS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvPj49P3w8PD0/fC0+fC0tfFxcK1xcK3wmJnxcXHxcXHx8Wz86fl18PD0+fFstKyovJSZ8XiE9PD5dPT98XFxiKD86YW5kfGFuZF9lcXxiaXRhbmR8Yml0b3J8bm90fG5vdF9lcXxvcnxvcl9lcXx4b3J8eG9yX2VxKVxcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NwcCcsICdzdHJpbmcnLCB7XG5cdFx0J21vZHVsZSc6IHtcblx0XHRcdC8vIGh0dHBzOi8vZW4uY3BwcmVmZXJlbmNlLmNvbS93L2NwcC9sYW5ndWFnZS9tb2R1bGVzXG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oXFxiKD86aW1wb3J0fG1vZHVsZSlcXHMrKS8uc291cmNlICtcblx0XHRcdFx0Jyg/OicgK1xuXHRcdFx0XHQvLyBoZWFkZXItbmFtZVxuXHRcdFx0XHQvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlwiXFxcXFxcclxcbl0pKlwifDxbXjw+XFxyXFxuXSo+Ly5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvLyBtb2R1bGUgbmFtZSBvciBwYXJ0aXRpb24gb3IgYm90aFxuXHRcdFx0XHQvPG1vZC1uYW1lPig/Olxccyo6XFxzKjxtb2QtbmFtZT4pP3w6XFxzKjxtb2QtbmFtZT4vLnNvdXJjZS5yZXBsYWNlKC88bW9kLW5hbWU+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG1vZE5hbWU7IH0pICtcblx0XHRcdFx0JyknXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzogL15bPFwiXVtcXHNcXFNdKy8sXG5cdFx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdyYXctc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1JcIihbXigpXFxcXCBdezAsMTZ9KVxcKFtcXHNcXFNdKj9cXClcXDFcIi8sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NwcCcsICdrZXl3b3JkJywge1xuXHRcdCdnZW5lcmljLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/IW9wZXJhdG9yXFxiKVthLXpfXVxcdypcXHMqPCg/OltePD5dfDxbXjw+XSo+KSo+KD89XFxzKlxcKCkvaSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXlxcdysvLFxuXHRcdFx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvPFtcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jcHBcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3BwJywgJ29wZXJhdG9yJywge1xuXHRcdCdkb3VibGUtY29sb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvOjovLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NwcCcsICdjbGFzcy1uYW1lJywge1xuXHRcdC8vIHRoZSBiYXNlIGNsYXVzZSBpcyBhbiBvcHRpb25hbCBsaXN0IG9mIHBhcmVudCBjbGFzc2VzXG5cdFx0Ly8gaHR0cHM6Ly9lbi5jcHByZWZlcmVuY2UuY29tL3cvY3BwL2xhbmd1YWdlL2NsYXNzXG5cdFx0J2Jhc2UtY2xhdXNlJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xzdHJ1Y3QpXFxzK1xcdytcXHMqOlxccyopW147e31cIidcXHNdKyg/OlxccytbXjt7fVwiJ1xcc10rKSooPz1cXHMqWzt7XSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3BwJywge30pXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAnZG91YmxlLWNvbG9uJywge1xuXHRcdC8vIEFsbCB1bnRva2VuaXplZCB3b3JkcyB0aGF0IGFyZSBub3QgbmFtZXNwYWNlcyBzaG91bGQgYmUgY2xhc3MgbmFtZXNcblx0XHQnY2xhc3MtbmFtZSc6IC9cXGJbYS16X11cXHcqXFxiKD8hXFxzKjo6KS9pXG5cdH0sIFByaXNtLmxhbmd1YWdlcy5jcHBbJ2Jhc2UtY2xhdXNlJ10pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5hcmR1aW5vID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3BwJywge1xuXHQna2V5d29yZCc6IC9cXGIoPzpTdHJpbmd8YXJyYXl8Ym9vbHxib29sZWFufGJyZWFrfGJ5dGV8Y2FzZXxjYXRjaHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGdvdG98aWZ8aW58aW5zdGFuY2VvZnxpbnR8aW50ZWdlcnxsb25nfGxvb3B8bmV3fG51bGx8cmV0dXJufHNldHVwfHN0cmluZ3xzd2l0Y2h8dGhyb3d8dHJ5fHZvaWR8d2hpbGV8d29yZClcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86QU5BTE9HX01FU1NBR0V8REVGQVVMVHxESUdJVEFMX01FU1NBR0V8RVhURVJOQUx8RklSTUFUQV9TVFJJTkd8SElHSHxJTlBVVHxJTlBVVF9QVUxMVVB8SU5URVJOQUx8SU5URVJOQUwxVjF8SU5URVJOQUwyVjU2fExFRF9CVUlMVElOfExPV3xPVVRQVVR8UkVQT1JUX0FOQUxPR3xSRVBPUlRfRElHSVRBTHxTRVRfUElOX01PREV8U1lTRVhfU1RBUlR8U1lTVEVNX1JFU0VUKVxcYi8sXG5cdCdidWlsdGluJzogL1xcYig/OkF1ZGlvfEJTU0lEfEJyaWRnZXxDbGllbnR8Q29uc29sZXxFRVBST018RXNwbG9yYXxFc3Bsb3JhVEZUfEV0aGVybmV0fEV0aGVybmV0Q2xpZW50fEV0aGVybmV0U2VydmVyfEV0aGVybmV0VURQfEZpbGV8RmlsZUlPfEZpbGVTeXN0ZW18RmlybWF0YXxHUFJTfEdTTXxHU01CYW5kfEdTTUNsaWVudHxHU01Nb2RlbXxHU01QSU58R1NNU2Nhbm5lcnxHU01TZXJ2ZXJ8R1NNVm9pY2VDYWxsfEdTTV9TTVN8SHR0cENsaWVudHxJUEFkZHJlc3N8SVJyZWFkfEtleWJvYXJkfEtleWJvYXJkQ29udHJvbGxlcnxMaXF1aWRDcnlzdGFsfExpcXVpZENyeXN0YWxfSTJDfE1haWxib3h8TW91c2V8TW91c2VDb250cm9sbGVyfFBJbWFnZXxQcm9jZXNzfFJTU0l8Um9ib3RDb250cm9sfFJvYm90TW90b3J8U0R8U1BJfFNTSUR8U2NoZWR1bGVyfFNlcmlhbHxTZXJ2ZXJ8U2Vydm98U29mdHdhcmVTZXJpYWx8U3RlcHBlcnxTdHJlYW18VEZUfFRhc2t8VVNCSG9zdHxXaUZpfFdpRmlDbGllbnR8V2lGaVNlcnZlcnxXaUZpVURQfFdpcmV8WXVuQ2xpZW50fFl1blNlcnZlcnxhYnN8YWRkUGFyYW1ldGVyfGFuYWxvZ1JlYWR8YW5hbG9nUmVhZFJlc29sdXRpb258YW5hbG9nUmVmZXJlbmNlfGFuYWxvZ1dyaXRlfGFuYWxvZ1dyaXRlUmVzb2x1dGlvbnxhbnN3ZXJDYWxsfGF0dGFjaHxhdHRhY2hHUFJTfGF0dGFjaEludGVycnVwdHxhdHRhY2hlZHxhdXRvc2Nyb2xsfGF2YWlsYWJsZXxiYWNrZ3JvdW5kfGJlZXB8YmVnaW58YmVnaW5QYWNrZXR8YmVnaW5TRHxiZWdpblNNU3xiZWdpblNwZWFrZXJ8YmVnaW5URlR8YmVnaW5UcmFuc21pc3Npb258YmVnaW5Xcml0ZXxiaXR8Yml0Q2xlYXJ8Yml0UmVhZHxiaXRTZXR8Yml0V3JpdGV8Ymxpbmt8YmxpbmtWZXJzaW9ufGJ1ZmZlcnxjaGFuZ2VQSU58Y2hlY2tQSU58Y2hlY2tQVUt8Y2hlY2tSZWd8Y2lyY2xlfGNpdHlOYW1lUmVhZHxjaXR5TmFtZVdyaXRlfGNsZWFyfGNsZWFyU2NyZWVufGNsaWNrfGNsb3NlfGNvbXBhc3NSZWFkfGNvbmZpZ3xjb25uZWN0fGNvbm5lY3RlZHxjb25zdHJhaW58Y29zfGNvdW50cnlOYW1lUmVhZHxjb3VudHJ5TmFtZVdyaXRlfGNyZWF0ZUNoYXJ8Y3Vyc29yfGRlYnVnUHJpbnR8ZGVsYXl8ZGVsYXlNaWNyb3NlY29uZHN8ZGV0YWNofGRldGFjaEludGVycnVwdHxkaWdpdGFsUmVhZHxkaWdpdGFsV3JpdGV8ZGlzY29ubmVjdHxkaXNwbGF5fGRpc3BsYXlMb2dvc3xkcmF3Qk1QfGRyYXdDb21wYXNzfGVuY3J5cHRpb25UeXBlfGVuZHxlbmRQYWNrZXR8ZW5kU01TfGVuZFRyYW5zbWlzc2lvbnxlbmRXcml0ZXxleGlzdHN8ZXhpdFZhbHVlfGZpbGx8ZmluZHxmaW5kVW50aWx8Zmx1c2h8Z2F0ZXdheUlQfGdldHxnZXRBc3luY2hyb25vdXNseXxnZXRCYW5kfGdldEJ1dHRvbnxnZXRDdXJyZW50Q2FycmllcnxnZXRJTUVJfGdldEtleXxnZXRNb2RpZmllcnN8Z2V0T2VtS2V5fGdldFBJTlVzZWR8Z2V0UmVzdWx0fGdldFNpZ25hbFN0cmVuZ3RofGdldFNvY2tldHxnZXRWb2ljZUNhbGxTdGF0dXN8Z2V0WENoYW5nZXxnZXRZQ2hhbmdlfGhhbmdDYWxsfGhlaWdodHxoaWdoQnl0ZXxob21lfGltYWdlfGludGVycnVwdHN8aXNBY3Rpb25Eb25lfGlzRGlyZWN0b3J5fGlzTGlzdGVuaW5nfGlzUElOfGlzUHJlc3NlZHxpc1ZhbGlkfGtleVByZXNzZWR8a2V5UmVsZWFzZWR8a2V5Ym9hcmRSZWFkfGtub2JSZWFkfGxlZnRUb1JpZ2h0fGxpbmV8bGluZUZvbGxvd0NvbmZpZ3xsaXN0ZW58bGlzdGVuT25Mb2NhbGhvc3R8bG9hZEltYWdlfGxvY2FsSVB8bG93Qnl0ZXxtYWNBZGRyZXNzfG1haW50YWlufG1hcHxtYXh8bWVzc2FnZUF2YWlsYWJsZXxtaWNyb3N8bWlsbGlzfG1pbnxta2Rpcnxtb3RvcnNTdG9wfG1vdG9yc1dyaXRlfG1vdXNlRHJhZ2dlZHxtb3VzZU1vdmVkfG1vdXNlUHJlc3NlZHxtb3VzZVJlbGVhc2VkfG1vdmV8bm9BdXRvc2Nyb2xsfG5vQmxpbmt8bm9CdWZmZXJ8bm9DdXJzb3J8bm9EaXNwbGF5fG5vRmlsbHxub0ludGVycnVwdHN8bm9MaXN0ZW5PbkxvY2FsaG9zdHxub1N0cm9rZXxub1RvbmV8b25SZWNlaXZlfG9uUmVxdWVzdHxvcGVufG9wZW5OZXh0RmlsZXxvdmVyZmxvd3xwYXJzZUNvbW1hbmR8cGFyc2VGbG9hdHxwYXJzZUludHxwYXJzZVBhY2tldHxwYXVzZU1vZGV8cGVla3xwaW5Nb2RlfHBsYXlGaWxlfHBsYXlNZWxvZHl8cG9pbnR8cG9pbnRUb3xwb3NpdGlvbnxwb3d8cHJlcGFyZXxwcmVzc3xwcmludHxwcmludEZpcm13YXJlVmVyc2lvbnxwcmludFZlcnNpb258cHJpbnRsbnxwcm9jZXNzfHByb2Nlc3NJbnB1dHxwdWxzZUlufHB1dHxyYW5kb218cmFuZG9tU2VlZHxyZWFkfHJlYWRBY2NlbGVyb21ldGVyfHJlYWRCbHVlfHJlYWRCdXR0b258cmVhZEJ5dGVzfHJlYWRCeXRlc1VudGlsfHJlYWRHcmVlbnxyZWFkSm95c3RpY2tCdXR0b258cmVhZEpveXN0aWNrU3dpdGNofHJlYWRKb3lzdGlja1h8cmVhZEpveXN0aWNrWXxyZWFkTGlnaHRTZW5zb3J8cmVhZE1lc3NhZ2V8cmVhZE1pY3JvcGhvbmV8cmVhZE5ldHdvcmtzfHJlYWRSZWR8cmVhZFNsaWRlcnxyZWFkU3RyaW5nfHJlYWRTdHJpbmdVbnRpbHxyZWFkVGVtcGVyYXR1cmV8cmVhZHl8cmVjdHxyZWxlYXNlfHJlbGVhc2VBbGx8cmVtb3RlSVB8cmVtb3RlTnVtYmVyfHJlbW90ZVBvcnR8cmVtb3ZlfHJlcXVlc3RGcm9tfHJldHJpZXZlQ2FsbGluZ051bWJlcnxyZXdpbmREaXJlY3Rvcnl8cmlnaHRUb0xlZnR8cm1kaXJ8cm9ib3ROYW1lUmVhZHxyb2JvdE5hbWVXcml0ZXxydW58cnVuQXN5bmNocm9ub3VzbHl8cnVuU2hlbGxDb21tYW5kfHJ1blNoZWxsQ29tbWFuZEFzeW5jaHJvbm91c2x5fHJ1bm5pbmd8c2Nhbk5ldHdvcmtzfHNjcm9sbERpc3BsYXlMZWZ0fHNjcm9sbERpc3BsYXlSaWdodHxzZWVrfHNlbmRBbmFsb2d8c2VuZERpZ2l0YWxQb3J0UGFpcnxzZW5kRGlnaXRhbFBvcnRzfHNlbmRTdHJpbmd8c2VuZFN5c2V4fHNlcmlhbEV2ZW50fHNldEJhbmR8c2V0Qml0T3JkZXJ8c2V0Q2xvY2tEaXZpZGVyfHNldEN1cnNvcnxzZXRETlN8c2V0RGF0YU1vZGV8c2V0RmlybXdhcmVWZXJzaW9ufHNldE1vZGV8c2V0UElOVXNlZHxzZXRTcGVlZHxzZXRUZXh0U2l6ZXxzZXRUaW1lb3V0fHNoaWZ0SW58c2hpZnRPdXR8c2h1dGRvd258c2lufHNpemV8c3FydHxzdGFydExvb3B8c3RlcHxzdG9wfHN0cm9rZXxzdWJuZXRNYXNrfHN3aXRjaFBJTnx0YW58dGVtcG9Xcml0ZXx0ZXh0fHRvbmV8dHJhbnNmZXJ8dHVuZVdyaXRlfHR1cm58dXBkYXRlSVJ8dXNlck5hbWVSZWFkfHVzZXJOYW1lV3JpdGV8dm9pY2VDYWxsfHdhaXRDb250aW51ZXx3aWR0aHx3cml0ZXx3cml0ZUJsdWV8d3JpdGVHcmVlbnx3cml0ZUpTT058d3JpdGVNZXNzYWdlfHdyaXRlTWljcm9zZWNvbmRzfHdyaXRlUkdCfHdyaXRlUmVkfHlpZWxkKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5vID0gUHJpc20ubGFuZ3VhZ2VzLmFyZHVpbm87XG5cblByaXNtLmxhbmd1YWdlcy5hcmZmID0ge1xuXHQnY29tbWVudCc6IC8lLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL0AoPzphdHRyaWJ1dGV8ZGF0YXxlbmR8cmVsYXRpb24pXFxiL2ksXG5cdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspP1xcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9be30sXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hcm1hc20gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC87LiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXHJcXG5dfFwiXCIpKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXiRdKSg/OlxcJHsyfSkqKVxcJFxcdysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcclxcbl17MCw0fXwnJyknLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZlcnNpb24tc3ltYm9sJzoge1xuXHRcdHBhdHRlcm46IC9cXHxbXFx3QF0rXFx8Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxUUlVFKVxcYi8sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkFMSUFTfEFMSUdOfEFSRUF8QVJNfEFTU0VSVHxBVFRSfENOfENPREV8Q09ERTE2fENPREUzMnxDT01NT058Q1B8REFUQXxEQ0J8RENEfERDRE98RENEVXxEQ0ZEfERDRkRVfERDSXxEQ1F8RENRVXxEQ1d8RENXVXxETnxFTElGfEVMU0V8RU5EfEVOREZVTkN8RU5ESUZ8RU5EUHxFTlRSWXxFUVV8RVhQT1JUfEVYUE9SVEFTfEVYVEVSTnxGSUVMRHxGSUxMfEZOfEZVTkNUSU9OfEdCTEF8R0JMTHxHQkxTfEdFVHxHTE9CQUx8SUZ8SU1QT1JUfElOQ0JJTnxJTkNMVURFfElORk98S0VFUHxMQ0xBfExDTEx8TENMU3xMVE9SR3xNQUNST3xNQVB8TUVORHxNRVhJVHxOT0ZQfE9QVHxQUkVTRVJWRTh8UFJPQ3xRTnxSRUFET05MWXxSRUxPQ3xSRVFVSVJFfFJFUVVJUkU4fFJMSVNUfFJPVVR8U0VUQXxTRVRMfFNFVFN8U058U1BBQ0V8U1VCVHxUSFVNQnxUSFVNQlh8VFRMfFdFTkR8V0hJTEUpXFxiLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnaW5zdHJ1Y3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefCg/Ol58W15cXFxcXSkoPzpcXHJcXG4/fFxcbikpWyBcXHRdKig/Oig/OltBLVpdW0EtWjAtOV9dKlthLXpdXFx3KnxbYS16XVxcdyp8XFxkKylbIFxcdF0rKT8pXFxiW0EtWi5dK1xcYi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHcrLyxcblxuXHQnbnVtYmVyJzogLyg/OlxcYlsyLTldX1xcZCt8KD86XFxiXFxkKyg/OlxcLlxcZCspP3xcXEJcXC5cXGQrKSg/OmUtP1xcZCspP3xcXGIwKD86W2ZkXV98eClbMC05YS1mXSt8JlswLTlhLWZdKylcXGIvaSxcblxuXHQncmVnaXN0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OnJcXGR8bHIpXFxiLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fSxcblxuXHQnb3BlcmF0b3InOiAvPD58PDx8Pj58JiZ8XFx8XFx8fFs9ITw+L109P3xbK1xcLSolIz8mfF5dfDpbQS1aXSs6Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF0sXS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1snYXJtLWFzbSddID0gUHJpc20ubGFuZ3VhZ2VzLmFybWFzbTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmdcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICovXG5cdHZhciBjcmVhdGVMYW5ndWFnZVN0cmluZyA9IGZ1bmN0aW9uIChsYW5nLCBwYXR0ZXJuKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvXFx7IS8uc291cmNlICsgJyg/OicgKyAocGF0dGVybiB8fCBsYW5nKSArICcpJyArIC8kW1xcc1xcU10qXFx9Ly5zb3VyY2UsICdtJyksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2VtYmVkZGVkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxceyFcXHcrXFxiKVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtJyArIGxhbmcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbbGFuZ11cblx0XHRcdFx0fSxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fTtcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXJ0dXJvID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2NoYXJhY3Rlcic6IHtcblx0XHRcdHBhdHRlcm46IC9gLmAvLFxuXHRcdFx0YWxpYXM6ICdjaGFyJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlxcZCsoPzpcXC5cXGQrKD86XFwuXFxkKyg/Oi1bXFx3Ky1dKyk/KT8pP1xcYi8sXG5cdFx0fSxcblxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXFxcclxcbl18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQncmVnZXgnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx7XFwvLio/XFwvXFx9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnaHRtbC1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnaHRtbCcpLFxuXHRcdCdjc3Mtc3RyaW5nJzogY3JlYXRlTGFuZ3VhZ2VTdHJpbmcoJ2NzcycpLFxuXHRcdCdqcy1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnanMnKSxcblx0XHQnbWQtc3RyaW5nJzogY3JlYXRlTGFuZ3VhZ2VTdHJpbmcoJ21kJyksXG5cdFx0J3NxbC1zdHJpbmcnOiBjcmVhdGVMYW5ndWFnZVN0cmluZygnc3FsJyksXG5cdFx0J3NoLXN0cmluZyc6IGNyZWF0ZUxhbmd1YWdlU3RyaW5nKCdzaGVsbCcsICdzaCcpLFxuXG5cdFx0J211bHRpc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1x1MDBCQi4qfFxcezpbXFxzXFxTXSo/OlxcfXxcXHtbXFxzXFxTXSo/XFx9fF4tezZ9JFtcXHNcXFNdKi9tLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdsYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHcrXFxiXFw/PzovLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXG5cdFx0J2xpdGVyYWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlxcdytcXGJcXD8/Oj8pLyxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fSxcblxuXHRcdCd0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogLzooPzpcXHcrXFxiXFw/Pzo/KS8sXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblxuXHRcdCdjb2xvcic6IC8jXFx3Ky8sXG5cblx0XHQncHJlZGljYXRlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFsbHxhbmR8YW55fGFzY2lpfGF0dHJ8YXR0cmlidXRlfGF0dHJpYnV0ZUxhYmVsfGJpbmFyeXxibG9ja3xjaGFyfGNvbnRhaW5zfGRhdGFiYXNlfGRhdGV8ZGljdGlvbmFyeXxlbXB0eXxlcXVhbHxldmVufGV2ZXJ5fGV4aXN0c3xmYWxzZXxmbG9hdGluZ3xmdW5jdGlvbnxncmVhdGVyfGdyZWF0ZXJPckVxdWFsfGlmfGlufGlubGluZXxpbnRlZ2VyfGlzfGtleXxsYWJlbHxsZWFwfGxlc3N8bGVzc09yRXF1YWx8bGl0ZXJhbHxsb2dpY2FsfGxvd2VyfG5hbmR8bmVnYXRpdmV8bm9yfG5vdHxub3RFcXVhbHxudWxsfG51bWVyaWN8b2RkfG9yfHBhdGh8cGF0aExhYmVsfHBvc2l0aXZlfHByZWZpeHxwcmltZXxyZWdleHxzYW1lfHNldHxzb21lfHNvcnRlZHxzdGFuZGFsb25lfHN0cmluZ3xzdWJzZXR8c3VmZml4fHN1cGVyc2V0fHN5bWJvbHxzeW1ib2xMaXRlcmFsfHRydWV8dHJ5fHR5cGV8dW5sZXNzfHVwcGVyfHdoZW58d2hpdGVzcGFjZXx3b3JkfHhub3J8eG9yfHplcm8pXFw/Lyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J2J1aWx0aW4tZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YWJzfGFjb3N8YWNvc2h8YWNzZWN8YWNzZWNofGFjdGFufGFjdGFuaHxhZGR8YWZ0ZXJ8YWxlcnR8YWxpYXN8YW5kfGFuZ2xlfGFwcGVuZHxhcmd8YXJnc3xhcml0eXxhcnJheXxhc3xhc2VjfGFzZWNofGFzaW58YXNpbmh8YXRhbnxhdGFuMnxhdGFuaHxhdHRyfGF0dHJzfGF2ZXJhZ2V8YmVmb3JlfGJlbmNobWFya3xibGVuZHxicmVha3xjYWxsfGNhcGl0YWxpemV8Y2FzZXxjZWlsfGNob3B8Y2xlYXJ8Y2xpcHxjbG9zZXxjb2xvcnxjb21iaW5lfGNvbmp8Y29udGludWV8Y29weXxjb3N8Y29zaHxjcmN8Y3NlY3xjc2VjaHxjdGFufGN0YW5ofGN1cnNvcnxkYXJrZW58ZGVjfGRlY29kZXxkZWZpbmV8ZGVsZXRlfGRlc2F0dXJhdGV8ZGV2aWF0aW9ufGRpYWxvZ3xkaWN0aW9uYXJ5fGRpZmZlcmVuY2V8ZGlnZXN0fGRpZ2l0c3xkaXZ8ZG98ZG93bmxvYWR8ZHJvcHxkdXB8ZXxlbHNlfGVtcHR5fGVuY29kZXxlbnN1cmV8ZW52fGVzY2FwZXxleGVjdXRlfGV4aXR8ZXhwfGV4dGVuZHxleHRyYWN0fGZhY3RvcnN8ZmRpdnxmaWx0ZXJ8Zmlyc3R8ZmxhdHRlbnxmbG9vcnxmb2xkfGZyb218ZnVuY3Rpb258Z2FtbWF8Z2NkfGdldHxnb3RvfGhhc2h8aHlwb3R8aWZ8aW5jfGluZGVudHxpbmRleHxpbmZpbml0eXxpbmZvfGlucHV0fGluc2VydHxpbnNwZWN0fGludGVyc2VjdGlvbnxpbnZlcnR8amFyb3xqb2lufGtleXN8a3VydG9zaXN8bGFzdHxsZXR8bGV2ZW5zaHRlaW58bGlnaHRlbnxsaXN0fGxufGxvZ3xsb29wfGxvd2VyfG1haWx8bWFwfG1hdGNofG1heHxtZWRpYW58bWlufG1vZHxtb2R1bGV8bXVsfG5hbmR8bmVnfG5ld3xub3J8bm9ybWFsaXplfG5vdHxub3d8bnVsbHxvcGVufG9yfG91dGRlbnR8cGFkfHBhbGV0dGV8cGFuaWN8cGF0aHxwYXVzZXxwZXJtaXNzaW9uc3xwZXJtdXRhdGV8cGl8cG9wfHBvcHVwfHBvd3xwb3dlcnNldHxwb3dtb2R8cHJlZml4fHByaW50fHByaW50c3xwcm9jZXNzfHByb2R1Y3R8cXVlcnl8cmFuZG9tfHJhbmdlfHJlYWR8cmVsYXRpdmV8cmVtb3ZlfHJlbmFtZXxyZW5kZXJ8cmVwZWF0fHJlcGxhY2V8cmVxdWVzdHxyZXR1cm58cmV2ZXJzZXxyb3VuZHxzYW1wbGV8c2F0dXJhdGV8c2NyaXB0fHNlY3xzZWNofHNlbGVjdHxzZXJ2ZXxzZXR8c2hsfHNocnxzaHVmZmxlfHNpbnxzaW5ofHNpemV8c2tld25lc3N8c2xpY2V8c29ydHxzcGlufHNwbGl0fHNxcnR8c3F1ZWV6ZXxzdGFja3xzdHJpcHxzdWJ8c3VmZml4fHN1bXxzd2l0Y2h8c3ltYm9sc3xzeW1saW5rfHN5c3x0YWtlfHRhbnx0YW5ofHRlcm1pbmFsfHRlcm1pbmF0ZXx0b3x0cnVuY2F0ZXx0cnl8dHlwZXx1bmNsaXB8dW5pb258dW5pcXVlfHVubGVzc3x1bnRpbHx1bnppcHx1cHBlcnx2YWx1ZXN8dmFyfHZhcmlhbmNlfHZvbHVtZXx3ZWJ2aWV3fHdoaWxlfHdpdGh8d29yZHdyYXB8d3JpdGV8eG5vcnx4b3J8emlwKVxcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdzdWdhcic6IHtcblx0XHRcdHBhdHRlcm46IC8tPnw9PnxcXHx8OjovLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF0sXS8sXG5cblx0XHQnc3ltYm9sJzoge1xuXHRcdFx0cGF0dGVybjogLzw6fC06fFx1MDBGOHxAfCN8XFwrfFxcfHxcXCp8XFwkfC0tLXwtfCV8XFwvfFxcLlxcLnxcXF58fnw9fDx8PnxcXFxcL1xuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpmYWxzZXxtYXliZXx0cnVlKVxcYi9cblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFydCA9IFByaXNtLmxhbmd1YWdlc1snYXJ0dXJvJ107XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgYXR0cmlidXRlcyA9IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVxcWyg/IVxcWykoPzooW1wiJyRgXSkoPzooPyFcXDIpW15cXFxcXXxcXFxcLikqXFwyfFxcWyg/OlteXFxbXFxdXFxcXF18XFxcXC4pKlxcXXxbXlxcW1xcXVxcXFxcIickYF18XFxcXC4pKlxcXS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncXVvdGVkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFskYF0pKD86KD8hXFwxKVteXFxcXF18XFxcXC4pKlxcMS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWyRgXXxbJGBdJC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdpbnRlcnByZXRlZCc6IHtcblx0XHRcdFx0cGF0dGVybjogLycoPzpbXidcXFxcXXxcXFxcLikqJy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eJ3wnJC9cblx0XHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9cIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdFx0J3ZhcmlhYmxlJzogL1xcdysoPz09KS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kfCwvLFxuXHRcdFx0J29wZXJhdG9yJzogLz0vLFxuXHRcdFx0Ly8gVGhlIG5lZ2F0aXZlIGxvb2stYWhlYWQgcHJldmVudHMgYmxhbmsgbWF0Y2hlc1xuXHRcdFx0J2F0dHItdmFsdWUnOiAvKD8hXlxccyskKS4rL1xuXHRcdH1cblx0fTtcblxuXHR2YXIgYXNjaWlkb2MgPSBQcmlzbS5sYW5ndWFnZXMuYXNjaWlkb2MgPSB7XG5cdFx0J2NvbW1lbnQtYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihcXC97NCx9KSg/Olxccj9cXG58XFxyKSg/OltcXHNcXFNdKig/Olxccj9cXG58XFxyKSk/P1xcMS9tLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cdFx0J3RhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHw9ezMsfSg/Oig/Olxccj9cXG58XFxyKD8hXFxuKSkuKikqPyg/Olxccj9cXG58XFxyKVxcfD17Myx9JC9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzcGVjaWZpZXJzJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPzooPzooPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspWysqXSg/Ols8Xj5dKD86XFwuWzxePl0pP3xcXC5bPF4+XSk/fFs8Xj5dKD86XFwuWzxePl0pP3xcXC5bPF4+XSlbYS16XSp8W2Etel0rKSg/PVxcfCkvLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVt8IV09Ki8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwYXNzdGhyb3VnaC1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFxcK3s0LH0pKD86XFxyP1xcbnxcXHIpKD86W1xcc1xcU10qKD86XFxyP1xcbnxcXHIpKT8/XFwxJC9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwrK3xcXCsrJC9cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIExpdGVyYWwgYmxvY2tzIGFuZCBsaXN0aW5nIGJsb2Nrc1xuXHRcdCdsaXRlcmFsLWJsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogL14oLXs0LH18XFwuezQsfSkoPzpcXHI/XFxufFxccikoPzpbXFxzXFxTXSooPzpcXHI/XFxufFxccikpPz9cXDEkL20sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzotK3xcXC4rKXwoPzotK3xcXC4rKSQvXG5cdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyBTaWRlYmFyIGJsb2NrcywgcXVvdGUgYmxvY2tzLCBleGFtcGxlIGJsb2NrcyBhbmQgb3BlbiBibG9ja3Ncblx0XHQnb3RoZXItYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXigtLXxcXCp7NCx9fF97NCx9fD17NCx9KSg/Olxccj9cXG58XFxyKSg/OltcXHNcXFNdKig/Olxccj9cXG58XFxyKSk/P1xcMSQvbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/Oi0rfFxcKit8Xyt8PSspfCg/Oi0rfFxcKit8Xyt8PSspJC9cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gbGlzdC1wdW5jdHVhdGlvbiBhbmQgbGlzdC1sYWJlbCBtdXN0IGFwcGVhciBiZWZvcmUgaW5kZW50ZWQtYmxvY2tcblx0XHQnbGlzdC1wdW5jdHVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86LXxcXCp7MSw1fXxcXC57MSw1fXwoPzpbYS16XXxcXGQrKVxcLnxbeHZpXStcXCkpKD89ICkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdsaXN0LWxhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilbYS16XFxkXS4rKD86OnsyLDR9fDs7KSg/PVxccykvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQnaW5kZW50ZWQtYmxvY2snOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKChcXHI/XFxufFxccilcXDIpKFsgXFx0XSspXFxTLiooPzooPzpcXHI/XFxufFxccilcXDMuKykqKD89XFwyezJ9fCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0J2NvbW1lbnQnOiAvXlxcL1xcLy4qL20sXG5cdFx0J3RpdGxlJzoge1xuXHRcdFx0cGF0dGVybjogL14uKyg/Olxccj9cXG58XFxyKSg/Oj17Myx9fC17Myx9fH57Myx9fFxcXnszLH18XFwrezMsfSkkfF49ezEsNX0gLit8XlxcLig/IVtcXHMuXSkuKi9tLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86XFwufD0rKXwoPzo9K3wtK3x+K3xcXF4rfFxcKyspJC9cblx0XHRcdFx0Ly8gU2VlIHJlc3QgYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdhdHRyaWJ1dGUtZW50cnknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjpbXjpcXHJcXG5dKzooPzogLio/KD86IFxcKyg/Olxccj9cXG58XFxyKS4qPykqKT8kL20sXG5cdFx0XHRhbGlhczogJ3RhZydcblx0XHR9LFxuXHRcdCdhdHRyaWJ1dGVzJzogYXR0cmlidXRlcyxcblx0XHQnaHInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXid7Myx9JC9tLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdwYWdlLWJyZWFrJzoge1xuXHRcdFx0cGF0dGVybjogL148ezMsfSQvbSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnYWRtb25pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9eKD86Q0FVVElPTnxJTVBPUlRBTlR8Tk9URXxUSVB8V0FSTklORyk6L20sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnY2FsbG91dCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyheWyBcXHRdKik8P1xcZCo+L20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLzxcXGQrPi8sXG5cdFx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J21hY3JvJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpcXGRdW2EtelxcZC1dKjo6Pyg/OlteXFxzXFxbXFxdXSpcXFsoPzpbXlxcXVxcXFxcIiddfChbXCInXSkoPzooPyFcXDEpW15cXFxcXXxcXFxcLikqXFwxfFxcXFwuKSpcXF0pLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXlthLXpcXGQtXSsoPz06KS8sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOjo/Lyxcblx0XHRcdFx0J2F0dHJpYnV0ZXMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/OlxcWyg/OlteXFxdXFxcXFwiJ118KFtcIiddKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSpcXDF8XFxcXC4pKlxcXSkvLFxuXHRcdFx0XHRcdGluc2lkZTogYXR0cmlidXRlcy5pbnNpZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2lubGluZSc6IHtcblx0XHRcdC8qXG5cdFx0XHRUaGUgaW5pdGlhbCBsb29rLWJlaGluZCBwcmV2ZW50cyB0aGUgaGlnaGxpZ2h0aW5nIG9mIGVzY2FwZWQgcXVvdGVkIHRleHQuXG5cblx0XHRcdFF1b3RlZCB0ZXh0IGNhbiBiZSBtdWx0aS1saW5lIGJ1dCBjYW5ub3Qgc3BhbiBhbiBlbXB0eSBsaW5lLlxuXHRcdFx0QWxsIHF1b3RlZCB0ZXh0IGNhbiBoYXZlIGF0dHJpYnV0ZXMgYmVmb3JlIFtmb29iYXIsICdmb29iYXInLCBiYXo9XCJiYXJcIl0uXG5cblx0XHRcdEZpcnN0LCB3ZSBoYW5kbGUgdGhlIGNvbnN0cmFpbmVkIHF1b3Rlcy5cblx0XHRcdFRob3NlIG11c3QgYmUgYm91bmRlZCBieSBub24td29yZCBjaGFycyBhbmQgY2Fubm90IGhhdmUgc3BhY2VzIGJldHdlZW4gdGhlIGRlbGltaXRlciBhbmQgdGhlIGZpcnN0IGNoYXIuXG5cdFx0XHRUaGV5IGFyZSwgaW4gb3JkZXI6IF9lbXBoYXNpc18sIGBgZG91YmxlIHF1b3RlcycnLCBgc2luZ2xlIHF1b3RlcycsIGBtb25vc3BhY2VgLCAnZW1waGFzaXMnLCAqc3Ryb25nKiwgK21vbm9zcGFjZSsgYW5kICN1bnF1b3RlZCNcblxuXHRcdFx0VGhlbiB3ZSBoYW5kbGUgdGhlIHVuY29uc3RyYWluZWQgcXVvdGVzLlxuXHRcdFx0VGhvc2UgZG8gbm90IGhhdmUgdGhlIHJlc3RyaWN0aW9ucyBvZiB0aGUgY29uc3RyYWluZWQgcXVvdGVzLlxuXHRcdFx0VGhleSBhcmUsIGluIG9yZGVyOiBfX2VtcGhhc2lzX18sICoqc3Ryb25nKiosICsrbW9ub3NwYWNlKyssICsrK3Bhc3N0aHJvdWdoKysrLCAjI3VucXVvdGVkIyMsICQkcGFzc3Rocm91Z2gkJCwgfnN1YnNjcmlwdH4sIF5zdXBlcnNjcmlwdF4sIHthdHRyaWJ1dGUtcmVmZXJlbmNlfSwgW1thbmNob3JdXSwgW1tbYmlibGlvZ3JhcGh5IGFuY2hvcl1dXSwgPDx4cmVmPj4sICgoKGluZGV4ZXMpKSkgYW5kICgoaW5kZXhlcykpXG5cdFx0XHQgKi9cblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/Oig/OlxcQlxcWyg/OlteXFxdXFxcXFwiJ118KFtcIiddKSg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSpcXDJ8XFxcXC4pKlxcXSk/KD86XFxiXyg/IVxccykoPzogX3xbXl9cXFxcXFxyXFxuXXxcXFxcLikrKD86KD86XFxyP1xcbnxcXHIpKD86IF98W15fXFxcXFxcclxcbl18XFxcXC4pKykqX1xcYnxcXEJgYCg/IVxccykuKz8oPzooPzpcXHI/XFxufFxccikuKz8pKicnXFxCfFxcQmAoPyFcXHMpKD86W15gJ1xcc118XFxzK1xcUykrWydgXVxcQnxcXEIoWycqKyNdKSg/IVxccykoPzogXFwzfCg/IVxcMylbXlxcXFxcXHJcXG5dfFxcXFwuKSsoPzooPzpcXHI/XFxufFxccikoPzogXFwzfCg/IVxcMylbXlxcXFxcXHJcXG5dfFxcXFwuKSspKlxcM1xcQil8KD86XFxbKD86W15cXF1cXFxcXCInXXwoW1wiJ10pKD86KD8hXFw0KVteXFxcXF18XFxcXC4pKlxcNHxcXFxcLikqXFxdKT8oPzooX198XFwqXFwqfFxcK1xcK1xcKz98IyN8XFwkXFwkfFt+Xl0pLis/KD86KD86XFxyP1xcbnxcXHIpLis/KSpcXDV8XFx7W159XFxyXFxuXStcXH18XFxbXFxbXFxbPy4rPyg/Oig/Olxccj9cXG58XFxyKS4rPykqXFxdP1xcXVxcXXw8PC4rPyg/Oig/Olxccj9cXG58XFxyKS4rPykqPj58XFwoXFwoXFwoPy4rPyg/Oig/Olxccj9cXG58XFxyKS4rPykqXFwpP1xcKVxcKSkpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdhdHRyaWJ1dGVzJzogYXR0cmlidXRlcyxcblx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXig/OlxcW1xcW1xcWz8uKz9cXF0/XFxdXFxdfDw8Lis/Pj4pJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXig/OlxcW1xcW1xcWz98PDwpfCg/OlxcXVxcXVxcXT98Pj4pJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhdHRyaWJ1dGUtcmVmJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFx7LitcXH0kLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFx7KVthLXpcXGQsK18tXSsvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogL15bPT8hIyVAJF18ISg/PVs6fV0pLyxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFx7fFxcfSR8Ojo/L1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2l0YWxpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihbJ19dKVtcXHNcXFNdK1xcMSQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14oPzonJz98X18/KXwoPzonJz98X18/KSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYm9sZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcKltcXHNcXFNdK1xcKiQvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0cHVuY3R1YXRpb246IC9eXFwqXFwqP3xcXCpcXCo/JC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eKD86YGA/fFxcK3sxLDN9fCMjP3xcXCRcXCR8W35eXXxcXChcXChcXCg/KXwoPzonJz98XFwrezEsM318IyM/fFxcJFxcJHxbfl5gXXxcXCk/XFwpXFwpKSQvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncmVwbGFjZW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwoKD86Q3xSfFRNKVxcKS8sXG5cdFx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdFx0fSxcblx0XHQnZW50aXR5JzogLyYjP1tcXGRhLXpdezEsOH07L2ksXG5cdFx0J2xpbmUtY29udGludWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefCApXFwrJC9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9O1xuXG5cblx0Ly8gQWxsb3cgc29tZSBuZXN0aW5nLiBUaGVyZSBpcyBubyByZWN1cnNpb24gdGhvdWdoLCBzbyBjbG9uaW5nIHNob3VsZCBub3QgYmUgbmVlZGVkLlxuXG5cdGZ1bmN0aW9uIGNvcHlGcm9tQXNjaWlEb2Moa2V5cykge1xuXHRcdGtleXMgPSBrZXlzLnNwbGl0KCcgJyk7XG5cblx0XHR2YXIgbyA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdG9ba2V5c1tpXV0gPSBhc2NpaWRvY1trZXlzW2ldXTtcblx0XHR9XG5cdFx0cmV0dXJuIG87XG5cdH1cblxuXHRhdHRyaWJ1dGVzLmluc2lkZVsnaW50ZXJwcmV0ZWQnXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ21hY3JvIGlubGluZSByZXBsYWNlbWVudCBlbnRpdHknKTtcblxuXHRhc2NpaWRvY1sncGFzc3Rocm91Z2gtYmxvY2snXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ21hY3JvJyk7XG5cblx0YXNjaWlkb2NbJ2xpdGVyYWwtYmxvY2snXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ2NhbGxvdXQnKTtcblxuXHRhc2NpaWRvY1sndGFibGUnXS5pbnNpZGUucmVzdCA9IGNvcHlGcm9tQXNjaWlEb2MoJ2NvbW1lbnQtYmxvY2sgcGFzc3Rocm91Z2gtYmxvY2sgbGl0ZXJhbC1ibG9jayBvdGhlci1ibG9jayBsaXN0LXB1bmN0dWF0aW9uIGluZGVudGVkLWJsb2NrIGNvbW1lbnQgdGl0bGUgYXR0cmlidXRlLWVudHJ5IGF0dHJpYnV0ZXMgaHIgcGFnZS1icmVhayBhZG1vbml0aW9uIGxpc3QtbGFiZWwgY2FsbG91dCBtYWNybyBpbmxpbmUgcmVwbGFjZW1lbnQgZW50aXR5IGxpbmUtY29udGludWF0aW9uJyk7XG5cblx0YXNjaWlkb2NbJ290aGVyLWJsb2NrJ10uaW5zaWRlLnJlc3QgPSBjb3B5RnJvbUFzY2lpRG9jKCd0YWJsZSBsaXN0LXB1bmN0dWF0aW9uIGluZGVudGVkLWJsb2NrIGNvbW1lbnQgYXR0cmlidXRlLWVudHJ5IGF0dHJpYnV0ZXMgaHIgcGFnZS1icmVhayBhZG1vbml0aW9uIGxpc3QtbGFiZWwgbWFjcm8gaW5saW5lIHJlcGxhY2VtZW50IGVudGl0eSBsaW5lLWNvbnRpbnVhdGlvbicpO1xuXG5cdGFzY2lpZG9jWyd0aXRsZSddLmluc2lkZS5yZXN0ID0gY29weUZyb21Bc2NpaURvYygnbWFjcm8gaW5saW5lIHJlcGxhY2VtZW50IGVudGl0eScpO1xuXG5cblx0Ly8gUGx1Z2luIHRvIG1ha2UgZW50aXR5IHRpdGxlIHNob3cgdGhlIHJlYWwgZW50aXR5LCBpZGVhIGJ5IFJvbWFuIEtvbWFyb3Zcblx0UHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYudHlwZSA9PT0gJ2VudGl0eScpIHtcblx0XHRcdGVudi5hdHRyaWJ1dGVzWyd0aXRsZSddID0gZW52LmNvbnRlbnQucmVwbGFjZSgvJmFtcDsvLCAnJicpO1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmFkb2MgPSBQcmlzbS5sYW5ndWFnZXMuYXNjaWlkb2M7XG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmVwbGFjZXMgYWxsIHBsYWNlaG9sZGVycyBcIjw8bj4+XCIgb2YgZ2l2ZW4gcGF0dGVybiB3aXRoIHRoZSBuLXRoIHJlcGxhY2VtZW50ICh6ZXJvIGJhc2VkKS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBpcyBhIHNpbXBsZSB0ZXh0IGJhc2VkIHJlcGxhY2VtZW50LiBCZSBjYXJlZnVsIHdoZW4gdXNpbmcgYmFja3JlZmVyZW5jZXMhXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIHRoZSBnaXZlbiBwYXR0ZXJuLlxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXBsYWNlbWVudHMgYSBsaXN0IG9mIHJlcGxhY2VtZW50IHdoaWNoIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBwYXR0ZXJuLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcGF0dGVybiB3aXRoIGFsbCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHJlcGxhY2VtZW50cy5cblx0ICogQGV4YW1wbGUgcmVwbGFjZSgvYTw8MD4+YS8uc291cmNlLCBbL2IrLy5zb3VyY2VdKSA9PT0gL2EoPzpiKylhLy5zb3VyY2Vcblx0ICovXG5cdGZ1bmN0aW9uIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnRzKSB7XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDwoXFxkKyk+Pi9nLCBmdW5jdGlvbiAobSwgaW5kZXgpIHtcblx0XHRcdHJldHVybiAnKD86JyArIHJlcGxhY2VtZW50c1sraW5kZXhdICsgJyknO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXBsYWNlbWVudHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHJlKHBhdHRlcm4sIHJlcGxhY2VtZW50cywgZmxhZ3MpIHtcblx0XHRyZXR1cm4gUmVnRXhwKHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnRzKSwgZmxhZ3MgfHwgJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXN0ZWQgcGF0dGVybiB3aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIHN0cmluZyBgPDxzZWxmPj5gIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBwYXR0ZXJuIGl0c2VsZi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoTG9nMlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gbmVzdGVkKHBhdHRlcm4sIGRlcHRoTG9nMikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwdGhMb2cyOyBpKyspIHtcblx0XHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLzw8c2VsZj4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcoPzonICsgcGF0dGVybiArICcpJzsgfSk7XG5cdFx0fVxuXHRcdHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoLzw8c2VsZj4+L2csICdbXlxcXFxzXFxcXFNdJyk7XG5cdH1cblxuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9rZXl3b3Jkcy9cblx0dmFyIGtleXdvcmRLaW5kcyA9IHtcblx0XHQvLyBrZXl3b3JkcyB3aGljaCByZXByZXNlbnQgYSByZXR1cm4gb3IgdmFyaWFibGUgdHlwZVxuXHRcdHR5cGU6ICdib29sIGJ5dGUgY2hhciBkZWNpbWFsIGRvdWJsZSBkeW5hbWljIGZsb2F0IGludCBsb25nIG9iamVjdCBzYnl0ZSBzaG9ydCBzdHJpbmcgdWludCB1bG9uZyB1c2hvcnQgdmFyIHZvaWQnLFxuXHRcdC8vIGtleXdvcmRzIHdoaWNoIGFyZSB1c2VkIHRvIGRlY2xhcmUgYSB0eXBlXG5cdFx0dHlwZURlY2xhcmF0aW9uOiAnY2xhc3MgZW51bSBpbnRlcmZhY2UgcmVjb3JkIHN0cnVjdCcsXG5cdFx0Ly8gY29udGV4dHVhbCBrZXl3b3Jkc1xuXHRcdC8vIChcInZhclwiIGFuZCBcImR5bmFtaWNcIiBhcmUgbWlzc2luZyBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgbGlrZSB0eXBlcylcblx0XHRjb250ZXh0dWFsOiAnYWRkIGFsaWFzIGFuZCBhc2NlbmRpbmcgYXN5bmMgYXdhaXQgYnkgZGVzY2VuZGluZyBmcm9tKD89XFxcXHMqKD86XFxcXHd8JCkpIGdldCBnbG9iYWwgZ3JvdXAgaW50byBpbml0KD89XFxcXHMqOykgam9pbiBsZXQgbmFtZW9mIG5vdCBub3RudWxsIG9uIG9yIG9yZGVyYnkgcGFydGlhbCByZW1vdmUgc2VsZWN0IHNldCB1bm1hbmFnZWQgdmFsdWUgd2hlbiB3aGVyZSB3aXRoKD89XFxcXHMqeyknLFxuXHRcdC8vIGFsbCBvdGhlciBrZXl3b3Jkc1xuXHRcdG90aGVyOiAnYWJzdHJhY3QgYXMgYmFzZSBicmVhayBjYXNlIGNhdGNoIGNoZWNrZWQgY29uc3QgY29udGludWUgZGVmYXVsdCBkZWxlZ2F0ZSBkbyBlbHNlIGV2ZW50IGV4cGxpY2l0IGV4dGVybiBmaW5hbGx5IGZpeGVkIGZvciBmb3JlYWNoIGdvdG8gaWYgaW1wbGljaXQgaW4gaW50ZXJuYWwgaXMgbG9jayBuYW1lc3BhY2UgbmV3IG51bGwgb3BlcmF0b3Igb3V0IG92ZXJyaWRlIHBhcmFtcyBwcml2YXRlIHByb3RlY3RlZCBwdWJsaWMgcmVhZG9ubHkgcmVmIHJldHVybiBzZWFsZWQgc2l6ZW9mIHN0YWNrYWxsb2Mgc3RhdGljIHN3aXRjaCB0aGlzIHRocm93IHRyeSB0eXBlb2YgdW5jaGVja2VkIHVuc2FmZSB1c2luZyB2aXJ0dWFsIHZvbGF0aWxlIHdoaWxlIHlpZWxkJ1xuXHR9O1xuXG5cdC8vIGtleXdvcmRzXG5cdGZ1bmN0aW9uIGtleXdvcmRzVG9QYXR0ZXJuKHdvcmRzKSB7XG5cdFx0cmV0dXJuICdcXFxcYig/OicgKyB3b3Jkcy50cmltKCkucmVwbGFjZSgvIC9nLCAnfCcpICsgJylcXFxcYic7XG5cdH1cblx0dmFyIHR5cGVEZWNsYXJhdGlvbktleXdvcmRzID0ga2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGVEZWNsYXJhdGlvbik7XG5cdHZhciBrZXl3b3JkcyA9IFJlZ0V4cChrZXl3b3Jkc1RvUGF0dGVybihrZXl3b3JkS2luZHMudHlwZSArICcgJyArIGtleXdvcmRLaW5kcy50eXBlRGVjbGFyYXRpb24gKyAnICcgKyBrZXl3b3JkS2luZHMuY29udGV4dHVhbCArICcgJyArIGtleXdvcmRLaW5kcy5vdGhlcikpO1xuXHR2YXIgbm9uVHlwZUtleXdvcmRzID0ga2V5d29yZHNUb1BhdHRlcm4oa2V5d29yZEtpbmRzLnR5cGVEZWNsYXJhdGlvbiArICcgJyArIGtleXdvcmRLaW5kcy5jb250ZXh0dWFsICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKTtcblx0dmFyIG5vbkNvbnRleHR1YWxLZXl3b3JkcyA9IGtleXdvcmRzVG9QYXR0ZXJuKGtleXdvcmRLaW5kcy50eXBlICsgJyAnICsga2V5d29yZEtpbmRzLnR5cGVEZWNsYXJhdGlvbiArICcgJyArIGtleXdvcmRLaW5kcy5vdGhlcik7XG5cblx0Ly8gdHlwZXNcblx0dmFyIGdlbmVyaWMgPSBuZXN0ZWQoLzwoPzpbXjw+Oz0rXFwtKi8lJnxeXXw8PHNlbGY+PikqPi8uc291cmNlLCAyKTsgLy8gdGhlIGlkZWEgYmVoaW5kIHRoZSBvdGhlciBmb3JiaWRkZW4gY2hhcmFjdGVycyBpcyB0byBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcy4gU2FtZSBmb3IgdHVwbGVFbGVtZW50LlxuXHR2YXIgbmVzdGVkUm91bmQgPSBuZXN0ZWQoL1xcKCg/OlteKCldfDw8c2VsZj4+KSpcXCkvLnNvdXJjZSwgMik7XG5cdHZhciBuYW1lID0gL0A/XFxiW0EtWmEtel9dXFx3KlxcYi8uc291cmNlO1xuXHR2YXIgZ2VuZXJpY05hbWUgPSByZXBsYWNlKC88PDA+Pig/Olxccyo8PDE+Pik/Ly5zb3VyY2UsIFtuYW1lLCBnZW5lcmljXSk7XG5cdHZhciBpZGVudGlmaWVyID0gcmVwbGFjZSgvKD8hPDwwPj4pPDwxPj4oPzpcXHMqXFwuXFxzKjw8MT4+KSovLnNvdXJjZSwgW25vblR5cGVLZXl3b3JkcywgZ2VuZXJpY05hbWVdKTtcblx0dmFyIGFycmF5ID0gL1xcW1xccyooPzosXFxzKikqXFxdLy5zb3VyY2U7XG5cdHZhciB0eXBlRXhwcmVzc2lvbldpdGhvdXRUdXBsZSA9IHJlcGxhY2UoLzw8MD4+KD86XFxzKig/OlxcP1xccyopPzw8MT4+KSooPzpcXHMqXFw/KT8vLnNvdXJjZSwgW2lkZW50aWZpZXIsIGFycmF5XSk7XG5cdHZhciB0dXBsZUVsZW1lbnQgPSByZXBsYWNlKC9bXiwoKTw+W1xcXTs9K1xcLSovJSZ8Xl18PDwwPj58PDwxPj58PDwyPj4vLnNvdXJjZSwgW2dlbmVyaWMsIG5lc3RlZFJvdW5kLCBhcnJheV0pO1xuXHR2YXIgdHVwbGUgPSByZXBsYWNlKC9cXCg8PDA+PisoPzosPDwwPj4rKStcXCkvLnNvdXJjZSwgW3R1cGxlRWxlbWVudF0pO1xuXHR2YXIgdHlwZUV4cHJlc3Npb24gPSByZXBsYWNlKC8oPzo8PDA+Pnw8PDE+PikoPzpcXHMqKD86XFw/XFxzKik/PDwyPj4pKig/OlxccypcXD8pPy8uc291cmNlLCBbdHVwbGUsIGlkZW50aWZpZXIsIGFycmF5XSk7XG5cblx0dmFyIHR5cGVJbnNpZGUgPSB7XG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQncHVuY3R1YXRpb24nOiAvWzw+KCk/LC46W1xcXV0vXG5cdH07XG5cblx0Ly8gc3RyaW5ncyAmIGNoYXJhY3RlcnNcblx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L2NzaGFycC9sYW5ndWFnZS1yZWZlcmVuY2UvbGFuZ3VhZ2Utc3BlY2lmaWNhdGlvbi9sZXhpY2FsLXN0cnVjdHVyZSNjaGFyYWN0ZXItbGl0ZXJhbHNcblx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L2NzaGFycC9sYW5ndWFnZS1yZWZlcmVuY2UvbGFuZ3VhZ2Utc3BlY2lmaWNhdGlvbi9sZXhpY2FsLXN0cnVjdHVyZSNzdHJpbmctbGl0ZXJhbHNcblx0dmFyIGNoYXJhY3RlciA9IC8nKD86W15cXHJcXG4nXFxcXF18XFxcXC58XFxcXFtVdXhdW1xcZGEtZkEtRl17MSw4fSknLy5zb3VyY2U7IC8vIHNpbXBsaWZpZWQgcGF0dGVyblxuXHR2YXIgcmVndWxhclN0cmluZyA9IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLnNvdXJjZTtcblx0dmFyIHZlcmJhdGltU3RyaW5nID0gL0BcIig/OlwiXCJ8XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIoPyFcIikvLnNvdXJjZTtcblxuXG5cdFByaXNtLmxhbmd1YWdlcy5jc2hhcnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKF58W14kXFxcXF0pPDwwPj4vLnNvdXJjZSwgW3ZlcmJhdGltU3RyaW5nXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogcmUoLyhefFteQCRcXFxcXSk8PDA+Pi8uc291cmNlLCBbcmVndWxhclN0cmluZ10pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBVc2luZyBzdGF0aWNcblx0XHRcdFx0Ly8gdXNpbmcgc3RhdGljIFN5c3RlbS5NYXRoO1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYnVzaW5nXFxzK3N0YXRpY1xccyspPDwwPj4oPz1cXHMqOykvLnNvdXJjZSwgW2lkZW50aWZpZXJdKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBVc2luZyBhbGlhcyAodHlwZSlcblx0XHRcdFx0Ly8gdXNpbmcgUHJvamVjdCA9IFBDLk15Q29tcGFueS5Qcm9qZWN0O1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYnVzaW5nXFxzKzw8MD4+XFxzKj1cXHMqKTw8MT4+KD89XFxzKjspLy5zb3VyY2UsIFtuYW1lLCB0eXBlRXhwcmVzc2lvbl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFVzaW5nIGFsaWFzIChhbGlhcylcblx0XHRcdFx0Ly8gdXNpbmcgUHJvamVjdCA9IFBDLk15Q29tcGFueS5Qcm9qZWN0O1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYnVzaW5nXFxzKyk8PDA+Pig/PVxccyo9KS8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBUeXBlIGRlY2xhcmF0aW9uc1xuXHRcdFx0XHQvLyBjbGFzcyBGb288QSwgQj5cblx0XHRcdFx0Ly8gaW50ZXJmYWNlIEZvbzxvdXQgQSwgQj5cblx0XHRcdFx0cGF0dGVybjogcmUoLyhcXGI8PDA+PlxccyspPDwxPj4vLnNvdXJjZSwgW3R5cGVEZWNsYXJhdGlvbktleXdvcmRzLCBnZW5lcmljTmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFNpbmdsZSBjYXRjaCBleGNlcHRpb24gZGVjbGFyYXRpb25cblx0XHRcdFx0Ly8gY2F0Y2goRm9vKVxuXHRcdFx0XHQvLyAodGhpbmdzIGxpa2UgY2F0Y2goRm9vIGUpIGlzIGNvdmVyZWQgYnkgdmFyaWFibGUgZGVjbGFyYXRpb24pXG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXFxiY2F0Y2hcXHMqXFwoXFxzKik8PDA+Pi8uc291cmNlLCBbaWRlbnRpZmllcl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE5hbWUgb2YgdGhlIHR5cGUgcGFyYW1ldGVyIG9mIGdlbmVyaWMgY29uc3RyYWludHNcblx0XHRcdFx0Ly8gd2hlcmUgRm9vIDogY2xhc3Ncblx0XHRcdFx0cGF0dGVybjogcmUoLyhcXGJ3aGVyZVxccyspPDwwPj4vLnNvdXJjZSwgW25hbWVdKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gQ2FzdHMgYW5kIGNoZWNrcyB2aWEgYXMgYW5kIGlzLlxuXHRcdFx0XHQvLyBhcyBGb288QT4sIGlzIEJhcjxCPlxuXHRcdFx0XHQvLyAodGhpbmdzIGxpa2UgaWYoYSBpcyBGb28gYikgaXMgY292ZXJlZCBieSB2YXJpYWJsZSBkZWNsYXJhdGlvbilcblx0XHRcdFx0cGF0dGVybjogcmUoLyhcXGIoPzppcyg/Olxccytub3QpP3xhcylcXHMrKTw8MD4+Ly5zb3VyY2UsIFt0eXBlRXhwcmVzc2lvbldpdGhvdXRUdXBsZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFZhcmlhYmxlLCBmaWVsZCBhbmQgcGFyYW1ldGVyIGRlY2xhcmF0aW9uXG5cdFx0XHRcdC8vIChGb28gYmFyLCBCYXIgYmF6LCBGb29bLCxdIGJheSwgRm9vPEJhciwgRm9vQmFyPEJhcj4+IGJheClcblx0XHRcdFx0cGF0dGVybjogcmUoL1xcYjw8MD4+KD89XFxzKyg/ITw8MT4+fHdpdGhcXHMqXFx7KTw8Mj4+KD86XFxzKls9LDs6eylcXF1dfFxccysoPzppbnx3aGVuKVxcYikpLy5zb3VyY2UsIFt0eXBlRXhwcmVzc2lvbiwgbm9uQ29udGV4dHVhbEtleXdvcmRzLCBuYW1lXSksXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL2xhbmd1YWdlLXJlZmVyZW5jZS9sYW5ndWFnZS1zcGVjaWZpY2F0aW9uL2xleGljYWwtc3RydWN0dXJlI2xpdGVyYWxzXG5cdFx0J251bWJlcic6IC8oPzpcXGIwKD86eFtcXGRhLWZfXSpbXFxkYS1mXXxiWzAxX10qWzAxXSl8KD86XFxCXFwuXFxkKyg/Ol8rXFxkKykqfFxcYlxcZCsoPzpfK1xcZCspKig/OlxcLlxcZCsoPzpfK1xcZCspKik/KSg/OmVbLStdP1xcZCsoPzpfK1xcZCspKik/KSg/OltkZmxtdV18bHV8dWwpP1xcYi9pLFxuXHRcdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98Wy09XT58KFstKyZ8XSlcXDF8fnxcXD9cXD89P3xbLSsqLyUmfF4hPTw+XT0/Lyxcblx0XHQncHVuY3R1YXRpb24nOiAvXFw/XFwuP3w6Onxbe31bXFxdOygpLC46XS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ251bWJlcicsIHtcblx0XHQncmFuZ2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuXFwuLyxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc2hhcnAnLCAncHVuY3R1YXRpb24nLCB7XG5cdFx0J25hbWVkLXBhcmFtZXRlcic6IHtcblx0XHRcdHBhdHRlcm46IHJlKC8oWygsXVxccyopPDwwPj4oPz1cXHMqOikvLnNvdXJjZSwgW25hbWVdKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdC8vIG5hbWVzcGFjZSBGb28uQmFyIHt9XG5cdFx0XHQvLyB1c2luZyBGb28uQmFyO1xuXHRcdFx0cGF0dGVybjogcmUoLyhcXGIoPzpuYW1lc3BhY2V8dXNpbmcpXFxzKyk8PDA+Pig/OlxccypcXC5cXHMqPDwwPj4pKig/PVxccypbO3tdKS8uc291cmNlLCBbbmFtZV0pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3R5cGUtZXhwcmVzc2lvbic6IHtcblx0XHRcdC8vIGRlZmF1bHQoRm9vKSwgdHlwZW9mKEZvbzxCYXI+KSwgc2l6ZW9mKGludClcblx0XHRcdHBhdHRlcm46IHJlKC8oXFxiKD86ZGVmYXVsdHxzaXplb2Z8dHlwZW9mKVxccypcXChcXHMqKD8hXFxzKSkoPzpbXigpXFxzXXxcXHMoPyFcXHMpfDw8MD4+KSooPz1cXHMqXFwpKS8uc291cmNlLCBbbmVzdGVkUm91bmRdKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0fSxcblx0XHQncmV0dXJuLXR5cGUnOiB7XG5cdFx0XHQvLyBGb288QmFyPiBGb3JCYXIoKTsgRm9vIElGb28uQmFyKCkgPT4gMFxuXHRcdFx0Ly8gaW50IHRoaXNbaW50IGluZGV4XSA9PiAwOyBUIElSZWFkT25seUxpc3Q8VD4udGhpc1tpbnQgaW5kZXhdID0+IHRoaXNbaW5kZXhdO1xuXHRcdFx0Ly8gaW50IEZvbyA9PiAwOyBpbnQgRm9vIHsgZ2V0OyBzZXQgfSA9IDA7XG5cdFx0XHRwYXR0ZXJuOiByZSgvPDwwPj4oPz1cXHMrKD86PDwxPj5cXHMqKD86PT58Wyh7XXxcXC5cXHMqdGhpc1xccypcXFspfHRoaXNcXHMqXFxbKSkvLnNvdXJjZSwgW3R5cGVFeHByZXNzaW9uLCBpZGVudGlmaWVyXSksXG5cdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQnY29uc3RydWN0b3ItaW52b2NhdGlvbic6IHtcblx0XHRcdC8vIG5ldyBMaXN0PEZvbzxCYXJbXT4+IHsgfVxuXHRcdFx0cGF0dGVybjogcmUoLyhcXGJuZXdcXHMrKTw8MD4+KD89XFxzKltbKHtdKS8uc291cmNlLCBbdHlwZUV4cHJlc3Npb25dKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQvKidleHBsaWNpdC1pbXBsZW1lbnRhdGlvbic6IHtcblx0XHRcdC8vIGludCBJRm9vPEZvbz4uQmFyID0+IDA7IHZvaWQgSUZvbzxGb288Rm9vPj4uRm9vPFQ+KCk7XG5cdFx0XHRwYXR0ZXJuOiByZXBsYWNlKC9cXGI8PDA+Pig/PVxcLjw8MT4+KS8sIGNsYXNzTmFtZSwgbWV0aG9kT3JQcm9wZXJ0eURlY2xhcmF0aW9uKSxcblx0XHRcdGluc2lkZTogY2xhc3NOYW1lSW5zaWRlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sKi9cblx0XHQnZ2VuZXJpYy1tZXRob2QnOiB7XG5cdFx0XHQvLyBmb288QmFyPigpXG5cdFx0XHRwYXR0ZXJuOiByZSgvPDwwPj5cXHMqPDwxPj4oPz1cXHMqXFwoKS8uc291cmNlLCBbbmFtZSwgZ2VuZXJpY10pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IHJlKC9ePDwwPj4vLnNvdXJjZSwgW25hbWVdKSxcblx0XHRcdFx0J2dlbmVyaWMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGdlbmVyaWMpLFxuXHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCd0eXBlLWxpc3QnOiB7XG5cdFx0XHQvLyBUaGUgbGlzdCBvZiB0eXBlcyBpbmhlcml0ZWQgb3Igb2YgZ2VuZXJpYyBjb25zdHJhaW50c1xuXHRcdFx0Ly8gY2xhc3MgRm9vPEY+IDogQmFyLCBJTGlzdDxGb29CYXI+XG5cdFx0XHQvLyB3aGVyZSBGIDogQmFyLCBJTGlzdDxpbnQ+XG5cdFx0XHRwYXR0ZXJuOiByZShcblx0XHRcdFx0L1xcYigoPzo8PDA+Plxccys8PDE+PnxyZWNvcmRcXHMrPDwxPj5cXHMqPDw1Pj58d2hlcmVcXHMrPDwyPj4pXFxzKjpcXHMqKSg/Ojw8Mz4+fDw8ND4+fDw8MT4+XFxzKjw8NT4+fDw8Nj4+KSg/OlxccyosXFxzKig/Ojw8Mz4+fDw8ND4+fDw8Nj4+KSkqKD89XFxzKig/OndoZXJlfFt7O118PT58JCkpLy5zb3VyY2UsXG5cdFx0XHRcdFt0eXBlRGVjbGFyYXRpb25LZXl3b3JkcywgZ2VuZXJpY05hbWUsIG5hbWUsIHR5cGVFeHByZXNzaW9uLCBrZXl3b3Jkcy5zb3VyY2UsIG5lc3RlZFJvdW5kLCAvXFxibmV3XFxzKlxcKFxccypcXCkvLnNvdXJjZV1cblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdyZWNvcmQtYXJndW1lbnRzJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXig/IW5ld1xccypcXCgpPDwwPj5cXHMqKTw8MT4+Ly5zb3VyY2UsIFtnZW5lcmljTmFtZSwgbmVzdGVkUm91bmRdKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc2hhcnBcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHR5cGVFeHByZXNzaW9uKSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLCgpXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSMuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIGhpZ2hsaWdodCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyBhcyBrZXl3b3Jkc1xuXHRcdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oIylcXGIoPzpkZWZpbmV8ZWxpZnxlbHNlfGVuZGlmfGVuZHJlZ2lvbnxlcnJvcnxpZnxsaW5lfG51bGxhYmxlfHByYWdtYXxyZWdpb258dW5kZWZ8d2FybmluZylcXGIvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBhdHRyaWJ1dGVzXG5cdHZhciByZWd1bGFyU3RyaW5nT3JDaGFyYWN0ZXIgPSByZWd1bGFyU3RyaW5nICsgJ3wnICsgY2hhcmFjdGVyO1xuXHR2YXIgcmVndWxhclN0cmluZ0NoYXJhY3Rlck9yQ29tbWVudCA9IHJlcGxhY2UoL1xcLyg/IVsqL10pfFxcL1xcL1teXFxyXFxuXSpbXFxyXFxuXXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcL3w8PDA+Pi8uc291cmNlLCBbcmVndWxhclN0cmluZ09yQ2hhcmFjdGVyXSk7XG5cdHZhciByb3VuZEV4cHJlc3Npb24gPSBuZXN0ZWQocmVwbGFjZSgvW15cIicvKCldfDw8MD4+fFxcKDw8c2VsZj4+KlxcKS8uc291cmNlLCBbcmVndWxhclN0cmluZ0NoYXJhY3Rlck9yQ29tbWVudF0pLCAyKTtcblxuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9kb3RuZXQvY3NoYXJwL3Byb2dyYW1taW5nLWd1aWRlL2NvbmNlcHRzL2F0dHJpYnV0ZXMvI2F0dHJpYnV0ZS10YXJnZXRzXG5cdHZhciBhdHRyVGFyZ2V0ID0gL1xcYig/OmFzc2VtYmx5fGV2ZW50fGZpZWxkfG1ldGhvZHxtb2R1bGV8cGFyYW18cHJvcGVydHl8cmV0dXJufHR5cGUpXFxiLy5zb3VyY2U7XG5cdHZhciBhdHRyID0gcmVwbGFjZSgvPDwwPj4oPzpcXHMqXFwoPDwxPj4qXFwpKT8vLnNvdXJjZSwgW2lkZW50aWZpZXIsIHJvdW5kRXhwcmVzc2lvbl0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzaGFycCcsICdjbGFzcy1uYW1lJywge1xuXHRcdCdhdHRyaWJ1dGUnOiB7XG5cdFx0XHQvLyBBdHRyaWJ1dGVzXG5cdFx0XHQvLyBbRm9vXSwgW0ZvbygxKSwgQmFyKDIsIFByb3AgPSBcImZvb1wiKV0sIFtyZXR1cm46IEZvbygxKSwgQmFyKDIpXSwgW2Fzc2VtYmx5OiBGb28oQmFyKV1cblx0XHRcdHBhdHRlcm46IHJlKC8oKD86XnxbXlxcc1xcdz4pP10pXFxzKlxcW1xccyopKD86PDwwPj5cXHMqOlxccyopPzw8MT4+KD86XFxzKixcXHMqPDwxPj4pKig/PVxccypcXF0pLy5zb3VyY2UsIFthdHRyVGFyZ2V0LCBhdHRyXSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0YXJnZXQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmUoL148PDA+Pig/PVxccyo6KS8uc291cmNlLCBbYXR0clRhcmdldF0pLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2F0dHJpYnV0ZS1hcmd1bWVudHMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmUoL1xcKDw8MD4+KlxcKS8uc291cmNlLCBbcm91bmRFeHByZXNzaW9uXSksXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NoYXJwXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChpZGVudGlmaWVyKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzosXS9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cblx0Ly8gc3RyaW5nIGludGVycG9sYXRpb25cblx0dmFyIGZvcm1hdFN0cmluZyA9IC86W159XFxyXFxuXSsvLnNvdXJjZTtcblx0Ly8gbXVsdGkgbGluZVxuXHR2YXIgbUludGVycG9sYXRpb25Sb3VuZCA9IG5lc3RlZChyZXBsYWNlKC9bXlwiJy8oKV18PDwwPj58XFwoPDxzZWxmPj4qXFwpLy5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nQ2hhcmFjdGVyT3JDb21tZW50XSksIDIpO1xuXHR2YXIgbUludGVycG9sYXRpb24gPSByZXBsYWNlKC9cXHsoPyFcXHspKD86KD8hW306XSk8PDA+PikqPDwxPj4/XFx9Ly5zb3VyY2UsIFttSW50ZXJwb2xhdGlvblJvdW5kLCBmb3JtYXRTdHJpbmddKTtcblx0Ly8gc2luZ2xlIGxpbmVcblx0dmFyIHNJbnRlcnBvbGF0aW9uUm91bmQgPSBuZXN0ZWQocmVwbGFjZSgvW15cIicvKCldfFxcLyg/IVxcKil8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC98PDwwPj58XFwoPDxzZWxmPj4qXFwpLy5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nT3JDaGFyYWN0ZXJdKSwgMik7XG5cdHZhciBzSW50ZXJwb2xhdGlvbiA9IHJlcGxhY2UoL1xceyg/IVxceykoPzooPyFbfTpdKTw8MD4+KSo8PDE+Pj9cXH0vLnNvdXJjZSwgW3NJbnRlcnBvbGF0aW9uUm91bmQsIGZvcm1hdFN0cmluZ10pO1xuXG5cdGZ1bmN0aW9uIGNyZWF0ZUludGVycG9sYXRpb25JbnNpZGUoaW50ZXJwb2xhdGlvbiwgaW50ZXJwb2xhdGlvblJvdW5kKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKCg/Ol58W157XSkoPzpcXHtcXHspKik8PDA+Pi8uc291cmNlLCBbaW50ZXJwb2xhdGlvbl0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZm9ybWF0LXN0cmluZyc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXlxceyg/Oig/IVt9Ol0pPDwwPj4pKik8PDE+Pig/PVxcfSQpLy5zb3VyY2UsIFtpbnRlcnBvbGF0aW9uUm91bmQsIGZvcm1hdFN0cmluZ10pLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjovXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxce3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1jc2hhcnAnLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NoYXJwXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzaGFycCcsICdzdHJpbmcnLCB7XG5cdFx0J2ludGVycG9sYXRpb24tc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKF58W15cXFxcXSkoPzpcXCRAfEBcXCQpXCIoPzpcIlwifFxcXFxbXFxzXFxTXXxcXHtcXHt8PDwwPj58W15cXFxce1wiXSkqXCIvLnNvdXJjZSwgW21JbnRlcnBvbGF0aW9uXSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjcmVhdGVJbnRlcnBvbGF0aW9uSW5zaWRlKG1JbnRlcnBvbGF0aW9uLCBtSW50ZXJwb2xhdGlvblJvdW5kKSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXkBcXFxcXSlcXCRcIig/OlxcXFwufFxce1xce3w8PDA+PnxbXlxcXFxcIntdKSpcIi8uc291cmNlLCBbc0ludGVycG9sYXRpb25dKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNyZWF0ZUludGVycG9sYXRpb25JbnNpZGUoc0ludGVycG9sYXRpb24sIHNJbnRlcnBvbGF0aW9uUm91bmQpLFxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoY2hhcmFjdGVyKSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRvdG5ldCA9IFByaXNtLmxhbmd1YWdlcy5jcyA9IFByaXNtLmxhbmd1YWdlcy5jc2hhcnA7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmFzcG5ldCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0J3BhZ2UtZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC88JVxccypALiolPi8sXG5cdFx0YWxpYXM6ICd0YWcnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3BhZ2UtZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvPCVcXHMqQFxccyooPzpBc3NlbWJseXxDb250cm9sfEltcGxlbWVudHN8SW1wb3J0fE1hc3Rlcig/OlR5cGUpP3xPdXRwdXRDYWNoZXxQYWdlfFByZXZpb3VzUGFnZVR5cGV8UmVmZXJlbmNlfFJlZ2lzdGVyKT98JT4vaSxcblx0XHRcdFx0YWxpYXM6ICd0YWcnXG5cdFx0XHR9LFxuXHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcuaW5zaWRlXG5cdFx0fVxuXHR9LFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC88JS4qJT4vLFxuXHRcdGFsaWFzOiAndGFnJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC88JVxccyo/WyQ9JSM6XXswLDJ9fCU+Lyxcblx0XHRcdFx0YWxpYXM6ICd0YWcnXG5cdFx0XHR9LFxuXHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLmNzaGFycFxuXHRcdH1cblx0fVxufSk7XG4vLyBSZWdleHAgY29waWVkIGZyb20gcHJpc20tbWFya3VwLCB3aXRoIGEgbmVnYXRpdmUgbG9vay1haGVhZCBhZGRlZFxuUHJpc20ubGFuZ3VhZ2VzLmFzcG5ldC50YWcucGF0dGVybiA9IC88KD8hJSlcXC8/W15cXHM+XFwvXSsoPzpcXHMrW15cXHM+XFwvPV0rKD86PSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykpPykqXFxzKlxcLz8+LztcblxuLy8gbWF0Y2ggZGlyZWN0aXZlcyBvZiBhdHRyaWJ1dGUgdmFsdWUgZm9vPVwiPCUgQmFyICU+XCJcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdwdW5jdHVhdGlvbicsIHtcblx0J2RpcmVjdGl2ZSc6IFByaXNtLmxhbmd1YWdlcy5hc3BuZXRbJ2RpcmVjdGl2ZSddXG59LCBQcmlzbS5sYW5ndWFnZXMuYXNwbmV0LnRhZy5pbnNpZGVbJ2F0dHItdmFsdWUnXSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2FzcG5ldCcsICdjb21tZW50Jywge1xuXHQnYXNwLWNvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzwlLS1bXFxzXFxTXSo/LS0lPi8sXG5cdFx0YWxpYXM6IFsnYXNwJywgJ2NvbW1lbnQnXVxuXHR9XG59KTtcblxuLy8gc2NyaXB0IHJ1bmF0PVwic2VydmVyXCIgY29udGFpbnMgY3NoYXJwLCBub3QgamF2YXNjcmlwdFxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYXNwbmV0JywgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQgPyAnc2NyaXB0JyA6ICd0YWcnLCB7XG5cdCdhc3Atc2NyaXB0Jzoge1xuXHRcdHBhdHRlcm46IC8oPHNjcmlwdCg/PS4qcnVuYXQ9WydcIl0/c2VydmVyXFxiKVtePl0qPilbXFxzXFxTXSo/KD89PFxcL3NjcmlwdD4pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogWydhc3AnLCAnc2NyaXB0J10sXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NoYXJwIHx8IHt9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuYXNtNjUwMiA9IHtcblx0J2NvbW1lbnQnOiAvOy4qLyxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFwuXFx3Kyg/PSApLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnc3RyaW5nJzogLyhbXCInYF0pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdCdvcC1jb2RlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBREN8QU5EfEFTTHxCQ0N8QkNTfEJFUXxCSVR8Qk1JfEJORXxCUEx8QlJLfEJWQ3xCVlN8Q0xDfENMRHxDTEl8Q0xWfENNUHxDUFh8Q1BZfERFQ3xERVh8REVZfEVPUnxJTkN8SU5YfElOWXxKTVB8SlNSfExEQXxMRFh8TERZfExTUnxOT1B8T1JBfFBIQXxQSFB8UExBfFBMUHxST0x8Uk9SfFJUSXxSVFN8U0JDfFNFQ3xTRUR8U0VJfFNUQXxTVFh8U1RZfFRBWHxUQVl8VFNYfFRYQXxUWFN8VFlBfGFkY3xhbmR8YXNsfGJjY3xiY3N8YmVxfGJpdHxibWl8Ym5lfGJwbHxicmt8YnZjfGJ2c3xjbGN8Y2xkfGNsaXxjbHZ8Y21wfGNweHxjcHl8ZGVjfGRleHxkZXl8ZW9yfGluY3xpbnh8aW55fGptcHxqc3J8bGRhfGxkeHxsZHl8bHNyfG5vcHxvcmF8cGhhfHBocHxwbGF8cGxwfHJvbHxyb3J8cnRpfHJ0c3xzYmN8c2VjfHNlZHxzZWl8c3RhfHN0eHxzdHl8dGF4fHRheXx0c3h8dHhhfHR4c3x0eWEpXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdoZXgtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcJFtcXGRhLWZdezEsNH1cXGIvaSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2JpbmFyeS1udW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyM/JVswMV0rXFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J2RlY2ltYWwtbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jP1xcYlxcZCtcXGIvLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQncmVnaXN0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYlt4eWFdXFxiL2ksXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1soKSw6XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hc21hdG1lbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzsuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInYF0pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2NvbnN0YW50JzogL1xcYig/OlBPUlRbQS1aXXxERFJbQS1aXXwoPzpERHxQKVtBLVpdKD86XFxkfFswLTJdXFxkfDNbMDFdKSlcXGIvLFxuXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xcLlxcdysoPz0gKS8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J3ItcmVnaXN0ZXInOiB7XG5cdFx0cGF0dGVybjogL1xcYnIoPzpcXGR8WzEyXVxcZHwzWzAxXSlcXGIvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdvcC1jb2RlJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBREN8QUREfEFESVd8QU5EfEFOREl8QVNSfEJDTFJ8QkxEfEJSQkN8QlJCU3xCUkNDfEJSQ1N8QlJFQUt8QlJFUXxCUkdFfEJSSEN8QlJIU3xCUklEfEJSSUV8QlJMT3xCUkxUfEJSTUl8QlJORXxCUlBMfEJSU0h8QlJUQ3xCUlRTfEJSVkN8QlJWU3xCU0VUfEJTVHxDQUxMfENCSXxDQlJ8Q0xDfENMSHxDTEl8Q0xOfENMUnxDTFN8Q0xUfENMVnxDTFp8Q09NfENQfENQQ3xDUEl8Q1BTRXxERUN8REVTfEVJQ0FMTHxFSUpNUHxFTFBNfEVPUnxGTVVMfEZNVUxTfEZNVUxTVXxJQ0FMTHxJSk1QfElOfElOQ3xKTVB8TEFDfExBU3xMQVR8TER8TERbQS1aYS16MC05XXxMUE18TFNMfExTUnxNT1Z8TU9WV3xNVUx8TVVMU3xNVUxTVXxORUd8Tk9QfE9SfE9SSXxPVVR8UE9QfFBVU0h8UkNBTEx8UkVUfFJFVEl8UkpNUHxST0x8Uk9SfFNCQ3xTQkNJfFNCSXxTQklDfFNCSVN8U0JJV3xTQlJ8U0JSQ3xTQlJTfFNFQ3xTRUh8U0VJfFNFTnxTRVJ8U0VTfFNFVHxTRVZ8U0VafFNMRUVQfFNQTXxTVHxTVFtBLVowLTldfFNVQnxTVUJJfFNXQVB8VFNUfFdEUnxYQ0h8YWRjfGFkZHxhZGl3fGFuZHxhbmRpfGFzcnxiY2xyfGJsZHxicmJjfGJyYnN8YnJjY3xicmNzfGJyZWFrfGJyZXF8YnJnZXxicmhjfGJyaHN8YnJpZHxicmllfGJybG98YnJsdHxicm1pfGJybmV8YnJwbHxicnNofGJydGN8YnJ0c3xicnZjfGJydnN8YnNldHxic3R8Y2FsbHxjYml8Y2JyfGNsY3xjbGh8Y2xpfGNsbnxjbHJ8Y2xzfGNsdHxjbHZ8Y2x6fGNvbXxjcHxjcGN8Y3BpfGNwc2V8ZGVjfGRlc3xlaWNhbGx8ZWlqbXB8ZWxwbXxlb3J8Zm11bHxmbXVsc3xmbXVsc3V8aWNhbGx8aWptcHxpbnxpbmN8am1wfGxhY3xsYXN8bGF0fGxkfGxkW2EtejAtOV18bHBtfGxzbHxsc3J8bW92fG1vdnd8bXVsfG11bHN8bXVsc3V8bmVnfG5vcHxvcnxvcml8b3V0fHBvcHxwdXNofHJjYWxsfHJldHxyZXRpfHJqbXB8cm9sfHJvcnxzYmN8c2JjaXxzYml8c2JpY3xzYmlzfHNiaXd8c2JyfHNicmN8c2Jyc3xzZWN8c2VofHNlaXxzZW58c2VyfHNlc3xzZXR8c2V2fHNlenxzbGVlcHxzcG18c3R8c3RbYS16QS1aMC05XXxzdWJ8c3ViaXxzd2FwfHRzdHx3ZHJ8eGNoKVxcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnaGV4LW51bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvIz9cXCRbXFxkYS1mXXsyLDR9XFxiL2ksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdiaW5hcnktbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8jPyVbMDFdK1xcYi8sXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdkZWNpbWFsLW51bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvIz9cXGJcXGQrXFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J3JlZ2lzdGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYWN6bnZzaHRpeHldXFxiL2ksXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J29wZXJhdG9yJzogLz4+PT98PDw9P3wmWyY9XT98XFx8W1xcfD1dP3xbLSsqLyVeIT08Pj9dPT8vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpLDpdL1xufTtcblxuLy8gTk9URVMgLSBmb2xsb3dzIGZpcnN0LWZpcnN0IGhpZ2hsaWdodCBtZXRob2QsIGJsb2NrIGlzIGxvY2tlZCBhZnRlciBoaWdobGlnaHQsIGRpZmZlcmVudCBmcm9tIFN5bnRheEhsXG5QcmlzbS5sYW5ndWFnZXMuYXV0b2hvdGtleSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFxccyk7LiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKilcXC9cXCooPzpbXFxyXFxuXSg/IVsgXFx0XSpcXCpcXC8pfFteXFxyXFxuXSkqKD86W1xcclxcbl1bIFxcdF0qXFwqXFwvKT8vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCd0YWcnOiB7XG5cdFx0Ly8gbGFiZWxzXG5cdFx0cGF0dGVybjogL14oWyBcXHRdKilbXlxccyxgXCI6XSsoPz06WyBcXHRdKiQpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzogL1wiKD86W15cIlxcblxccl18XCJcIikqXCIvLFxuXHQndmFyaWFibGUnOiAvJVxcdyslLyxcblx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/Lyxcblx0J29wZXJhdG9yJzogL1xcP3xcXC9cXC8/PT98Oj18XFx8Wz18XT98Jls9Jl0/fFxcK1s9K10/fC1bPS1dP3xcXCpbPSpdP3w8KD86PD0/fD58PSk/fD4+Pz0/fFsuXiE9fl09P3xcXGIoPzpBTkR8Tk9UfE9SKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnY29tbWFuZCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86QXV0b1RyaW18QmxvY2tJbnB1dHxCcmVha3xDbGlja3xDbGlwV2FpdHxDb250aW51ZXxDb250cm9sfENvbnRyb2xDbGlja3xDb250cm9sRm9jdXN8Q29udHJvbEdldHxDb250cm9sR2V0Rm9jdXN8Q29udHJvbEdldFBvc3xDb250cm9sR2V0VGV4dHxDb250cm9sTW92ZXxDb250cm9sU2VuZHxDb250cm9sU2VuZFJhd3xDb250cm9sU2V0VGV4dHxDb29yZE1vZGV8Q3JpdGljYWx8RGV0ZWN0SGlkZGVuVGV4dHxEZXRlY3RIaWRkZW5XaW5kb3dzfERyaXZlfERyaXZlR2V0fERyaXZlU3BhY2VGcmVlfEVudkFkZHxFbnZEaXZ8RW52R2V0fEVudk11bHR8RW52U2V0fEVudlN1YnxFbnZVcGRhdGV8RXhpdHxFeGl0QXBwfEZpbGVBcHBlbmR8RmlsZUNvcHl8RmlsZUNvcHlEaXJ8RmlsZUNyZWF0ZURpcnxGaWxlQ3JlYXRlU2hvcnRjdXR8RmlsZURlbGV0ZXxGaWxlRW5jb2Rpbmd8RmlsZUdldEF0dHJpYnxGaWxlR2V0U2hvcnRjdXR8RmlsZUdldFNpemV8RmlsZUdldFRpbWV8RmlsZUdldFZlcnNpb258RmlsZUluc3RhbGx8RmlsZU1vdmV8RmlsZU1vdmVEaXJ8RmlsZVJlYWR8RmlsZVJlYWRMaW5lfEZpbGVSZWN5Y2xlfEZpbGVSZWN5Y2xlRW1wdHl8RmlsZVJlbW92ZURpcnxGaWxlU2VsZWN0RmlsZXxGaWxlU2VsZWN0Rm9sZGVyfEZpbGVTZXRBdHRyaWJ8RmlsZVNldFRpbWV8Rm9ybWF0VGltZXxHZXRLZXlTdGF0ZXxHb3N1YnxHb3RvfEdyb3VwQWN0aXZhdGV8R3JvdXBBZGR8R3JvdXBDbG9zZXxHcm91cERlYWN0aXZhdGV8R3VpfEd1aUNvbnRyb2x8R3VpQ29udHJvbEdldHxIb3RrZXl8SW1hZ2VTZWFyY2h8SW5pRGVsZXRlfEluaVJlYWR8SW5pV3JpdGV8SW5wdXR8SW5wdXRCb3h8S2V5V2FpdHxMaXN0SG90a2V5c3xMaXN0TGluZXN8TGlzdFZhcnN8TG9vcHxNZW51fE1vdXNlQ2xpY2t8TW91c2VDbGlja0RyYWd8TW91c2VHZXRQb3N8TW91c2VNb3ZlfE1zZ0JveHxPbkV4aXR8T3V0cHV0RGVidWd8UGF1c2V8UGl4ZWxHZXRDb2xvcnxQaXhlbFNlYXJjaHxQb3N0TWVzc2FnZXxQcm9jZXNzfFByb2dyZXNzfFJhbmRvbXxSZWdEZWxldGV8UmVnUmVhZHxSZWdXcml0ZXxSZWxvYWR8UmVwZWF0fFJldHVybnxSdW58UnVuQXN8UnVuV2FpdHxTZW5kfFNlbmRFdmVudHxTZW5kSW5wdXR8U2VuZE1lc3NhZ2V8U2VuZE1vZGV8U2VuZFBsYXl8U2VuZFJhd3xTZXRCYXRjaExpbmVzfFNldENhcHNsb2NrU3RhdGV8U2V0Q29udHJvbERlbGF5fFNldERlZmF1bHRNb3VzZVNwZWVkfFNldEVudnxTZXRGb3JtYXR8U2V0S2V5RGVsYXl8U2V0TW91c2VEZWxheXxTZXROdW1sb2NrU3RhdGV8U2V0UmVnVmlld3xTZXRTY3JvbGxMb2NrU3RhdGV8U2V0U3RvcmVDYXBzbG9ja01vZGV8U2V0VGltZXJ8U2V0VGl0bGVNYXRjaE1vZGV8U2V0V2luRGVsYXl8U2V0V29ya2luZ0RpcnxTaHV0ZG93bnxTbGVlcHxTb3J0fFNvdW5kQmVlcHxTb3VuZEdldHxTb3VuZEdldFdhdmVWb2x1bWV8U291bmRQbGF5fFNvdW5kU2V0fFNvdW5kU2V0V2F2ZVZvbHVtZXxTcGxhc2hJbWFnZXxTcGxhc2hUZXh0T2ZmfFNwbGFzaFRleHRPbnxTcGxpdFBhdGh8U3RhdHVzQmFyR2V0VGV4dHxTdGF0dXNCYXJXYWl0fFN0cmluZ0Nhc2VTZW5zZXxTdHJpbmdHZXRQb3N8U3RyaW5nTGVmdHxTdHJpbmdMZW58U3RyaW5nTG93ZXJ8U3RyaW5nTWlkfFN0cmluZ1JlcGxhY2V8U3RyaW5nUmlnaHR8U3RyaW5nU3BsaXR8U3RyaW5nVHJpbUxlZnR8U3RyaW5nVHJpbVJpZ2h0fFN0cmluZ1VwcGVyfFN1c3BlbmR8U3lzR2V0fFRocmVhZHxUb29sVGlwfFRyYW5zZm9ybXxUcmF5VGlwfFVSTERvd25sb2FkVG9GaWxlfFdpbkFjdGl2YXRlfFdpbkFjdGl2YXRlQm90dG9tfFdpbkNsb3NlfFdpbkdldHxXaW5HZXRBY3RpdmVTdGF0c3xXaW5HZXRBY3RpdmVUaXRsZXxXaW5HZXRDbGFzc3xXaW5HZXRQb3N8V2luR2V0VGV4dHxXaW5HZXRUaXRsZXxXaW5IaWRlfFdpbktpbGx8V2luTWF4aW1pemV8V2luTWVudVNlbGVjdEl0ZW18V2luTWluaW1pemV8V2luTWluaW1pemVBbGx8V2luTWluaW1pemVBbGxVbmRvfFdpbk1vdmV8V2luUmVzdG9yZXxXaW5TZXR8V2luU2V0VGl0bGV8V2luU2hvd3xXaW5XYWl0fFdpbldhaXRBY3RpdmV8V2luV2FpdENsb3NlfFdpbldhaXROb3RBY3RpdmUpXFxiL2ksXG5cdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0fSxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86YV9haGtwYXRofGFfYWhrdmVyc2lvbnxhX2FwcGRhdGF8YV9hcHBkYXRhY29tbW9ufGFfYXV0b3RyaW18YV9iYXRjaGxpbmVzfGFfY2FyZXR4fGFfY2FyZXR5fGFfY29tcHV0ZXJuYW1lfGFfY29udHJvbGRlbGF5fGFfY3Vyc29yfGFfZGR8YV9kZGR8YV9kZGRkfGFfZGVmYXVsdG1vdXNlc3BlZWR8YV9kZXNrdG9wfGFfZGVza3RvcGNvbW1vbnxhX2RldGVjdGhpZGRlbnRleHR8YV9kZXRlY3RoaWRkZW53aW5kb3dzfGFfZW5kY2hhcnxhX2V2ZW50aW5mb3xhX2V4aXRyZWFzb258YV9maWxlZW5jb2Rpbmd8YV9mb3JtYXRmbG9hdHxhX2Zvcm1hdGludGVnZXJ8YV9ndWl8YV9ndWljb250cm9sfGFfZ3VpY29udHJvbGV2ZW50fGFfZ3VpZXZlbnR8YV9ndWloZWlnaHR8YV9ndWl3aWR0aHxhX2d1aXh8YV9ndWl5fGFfaG91cnxhX2ljb25maWxlfGFfaWNvbmhpZGRlbnxhX2ljb25udW1iZXJ8YV9pY29udGlwfGFfaW5kZXh8YV9pcGFkZHJlc3MxfGFfaXBhZGRyZXNzMnxhX2lwYWRkcmVzczN8YV9pcGFkZHJlc3M0fGFfaXM2NGJpdG9zfGFfaXNhZG1pbnxhX2lzY29tcGlsZWR8YV9pc2NyaXRpY2FsfGFfaXNwYXVzZWR8YV9pc3N1c3BlbmRlZHxhX2lzdW5pY29kZXxhX2tleWRlbGF5fGFfbGFuZ3VhZ2V8YV9sYXN0ZXJyb3J8YV9saW5lZmlsZXxhX2xpbmVudW1iZXJ8YV9sb29wZmllbGR8YV9sb29wZmlsZWF0dHJpYnxhX2xvb3BmaWxlZGlyfGFfbG9vcGZpbGVleHR8YV9sb29wZmlsZWZ1bGxwYXRofGFfbG9vcGZpbGVsb25ncGF0aHxhX2xvb3BmaWxlbmFtZXxhX2xvb3BmaWxlc2hvcnRuYW1lfGFfbG9vcGZpbGVzaG9ydHBhdGh8YV9sb29wZmlsZXNpemV8YV9sb29wZmlsZXNpemVrYnxhX2xvb3BmaWxlc2l6ZW1ifGFfbG9vcGZpbGV0aW1lYWNjZXNzZWR8YV9sb29wZmlsZXRpbWVjcmVhdGVkfGFfbG9vcGZpbGV0aW1lbW9kaWZpZWR8YV9sb29wcmVhZGxpbmV8YV9sb29wcmVna2V5fGFfbG9vcHJlZ25hbWV8YV9sb29wcmVnc3Via2V5fGFfbG9vcHJlZ3RpbWVtb2RpZmllZHxhX2xvb3ByZWd0eXBlfGFfbWRheXxhX21pbnxhX21tfGFfbW1tfGFfbW1tbXxhX21vbnxhX21vdXNlZGVsYXl8YV9tc2VjfGFfbXlkb2N1bWVudHN8YV9ub3d8YV9ub3d1dGN8YV9udW1iYXRjaGxpbmVzfGFfb3N0eXBlfGFfb3N2ZXJzaW9ufGFfcHJpb3Job3RrZXl8YV9wcmlvcmtleXxhX3Byb2dyYW1maWxlc3xhX3Byb2dyYW1zfGFfcHJvZ3JhbXNjb21tb258YV9wdHJzaXplfGFfcmVndmlld3xhX3NjcmVlbmRwaXxhX3NjcmVlbmhlaWdodHxhX3NjcmVlbndpZHRofGFfc2NyaXB0ZGlyfGFfc2NyaXB0ZnVsbHBhdGh8YV9zY3JpcHRod25kfGFfc2NyaXB0bmFtZXxhX3NlY3xhX3NwYWNlfGFfc3RhcnRtZW51fGFfc3RhcnRtZW51Y29tbW9ufGFfc3RhcnR1cHxhX3N0YXJ0dXBjb21tb258YV9zdHJpbmdjYXNlc2Vuc2V8YV90YWJ8YV90ZW1wfGFfdGhpc2Z1bmN8YV90aGlzaG90a2V5fGFfdGhpc2xhYmVsfGFfdGhpc21lbnV8YV90aGlzbWVudWl0ZW18YV90aGlzbWVudWl0ZW1wb3N8YV90aWNrY291bnR8YV90aW1laWRsZXxhX3RpbWVpZGxlcGh5c2ljYWx8YV90aW1lc2luY2VwcmlvcmhvdGtleXxhX3RpbWVzaW5jZXRoaXNob3RrZXl8YV90aXRsZW1hdGNobW9kZXxhX3RpdGxlbWF0Y2htb2Rlc3BlZWR8YV91c2VybmFtZXxhX3dkYXl8YV93aW5kZWxheXxhX3dpbmRpcnxhX3dvcmtpbmdkaXJ8YV95ZGF5fGFfeWVhcnxhX3l3ZWVrfGFfeXl5eXxjbGlwYm9hcmR8Y2xpcGJvYXJkYWxsfGNvbXNwZWN8ZXJyb3JsZXZlbHxwcm9ncmFtZmlsZXMpXFxiL2ksXG5cblx0J2J1aWx0aW4nOiAvXFxiKD86YWJzfGFjb3N8YXNjfGFzaW58YXRhbnxjZWlsfGNocnxjbGFzc3xjb21vYmphY3RpdmV8Y29tb2JqYXJyYXl8Y29tb2JqY29ubmVjdHxjb21vYmpjcmVhdGV8Y29tb2JqZXJyb3J8Y29tb2JqZmxhZ3N8Y29tb2JqZ2V0fGNvbW9ianF1ZXJ5fGNvbW9ianR5cGV8Y29tb2JqdmFsdWV8Y29zfGRsbGNhbGx8ZXhwfGZpbGVleGlzdHxGaWxlb3BlbnxmbG9vcnxmb3JtYXR8aWxfYWRkfGlsX2NyZWF0ZXxpbF9kZXN0cm95fGluc3RyfGlzZnVuY3xpc2xhYmVsfElzT2JqZWN0fGxufGxvZ3xsdHJpbXxsdl9hZGR8bHZfZGVsZXRlfGx2X2RlbGV0ZWNvbHxsdl9nZXRjb3VudHxsdl9nZXRuZXh0fGx2X2dldHRleHR8bHZfaW5zZXJ0fGx2X2luc2VydGNvbHxsdl9tb2RpZnl8bHZfbW9kaWZ5Y29sfGx2X3NldGltYWdlbGlzdHxtb2R8bnVtZ2V0fG51bXB1dHxvbm1lc3NhZ2V8cmVnZXhtYXRjaHxyZWdleHJlcGxhY2V8cmVnaXN0ZXJjYWxsYmFja3xyb3VuZHxydHJpbXxzYl9zZXRpY29ufHNiX3NldHBhcnRzfHNiX3NldHRleHR8c2lufHNxcnR8c3RybGVufHN0cnJlcGxhY2V8c3Ryc3BsaXR8c3Vic3RyfHRhbnx0dl9hZGR8dHZfZGVsZXRlfHR2X2dldHx0dl9nZXRjaGlsZHx0dl9nZXRjb3VudHx0dl9nZXRuZXh0fHR2X2dldHBhcmVudHx0dl9nZXRwcmV2fHR2X2dldHNlbGVjdGlvbnx0dl9nZXR0ZXh0fHR2X21vZGlmeXx2YXJzZXRjYXBhY2l0eXx3aW5hY3RpdmV8d2luZXhpc3R8X19DYWxsfF9fR2V0fF9fTmV3fF9fU2V0KVxcYi9pLFxuXG5cdCdzeW1ib2wnOiAvXFxiKD86YWx0fGFsdGRvd258YWx0dXB8YXBwc2tleXxiYWNrc3BhY2V8YnJvd3Nlcl9iYWNrfGJyb3dzZXJfZmF2b3JpdGVzfGJyb3dzZXJfZm9yd2FyZHxicm93c2VyX2hvbWV8YnJvd3Nlcl9yZWZyZXNofGJyb3dzZXJfc2VhcmNofGJyb3dzZXJfc3RvcHxic3xjYXBzbG9ja3xjdHJsfGN0cmxicmVha3xjdHJsZG93bnxjdHJsdXB8ZGVsfGRlbGV0ZXxkb3dufGVuZHxlbnRlcnxlc2N8ZXNjYXBlfGYxfGYxMHxmMTF8ZjEyfGYxM3xmMTR8ZjE1fGYxNnxmMTd8ZjE4fGYxOXxmMnxmMjB8ZjIxfGYyMnxmMjN8ZjI0fGYzfGY0fGY1fGY2fGY3fGY4fGY5fGhvbWV8aW5zfGluc2VydHxqb3kxfGpveTEwfGpveTExfGpveTEyfGpveTEzfGpveTE0fGpveTE1fGpveTE2fGpveTE3fGpveTE4fGpveTE5fGpveTJ8am95MjB8am95MjF8am95MjJ8am95MjN8am95MjR8am95MjV8am95MjZ8am95Mjd8am95Mjh8am95Mjl8am95M3xqb3kzMHxqb3kzMXxqb3kzMnxqb3k0fGpveTV8am95Nnxqb3k3fGpveTh8am95OXxqb3lheGVzfGpveWJ1dHRvbnN8am95aW5mb3xqb3luYW1lfGpveXBvdnxqb3lyfGpveXV8am95dnxqb3l4fGpveXl8am95enxsYWx0fGxhdW5jaF9hcHAxfGxhdW5jaF9hcHAyfGxhdW5jaF9tYWlsfGxhdW5jaF9tZWRpYXxsYnV0dG9ufGxjb250cm9sfGxjdHJsfGxlZnR8bHNoaWZ0fGx3aW58bHdpbmRvd258bHdpbnVwfG1idXR0b258bWVkaWFfbmV4dHxtZWRpYV9wbGF5X3BhdXNlfG1lZGlhX3ByZXZ8bWVkaWFfc3RvcHxudW1sb2NrfG51bXBhZDB8bnVtcGFkMXxudW1wYWQyfG51bXBhZDN8bnVtcGFkNHxudW1wYWQ1fG51bXBhZDZ8bnVtcGFkN3xudW1wYWQ4fG51bXBhZDl8bnVtcGFkYWRkfG51bXBhZGNsZWFyfG51bXBhZGRlbHxudW1wYWRkaXZ8bnVtcGFkZG90fG51bXBhZGRvd258bnVtcGFkZW5kfG51bXBhZGVudGVyfG51bXBhZGhvbWV8bnVtcGFkaW5zfG51bXBhZGxlZnR8bnVtcGFkbXVsdHxudW1wYWRwZ2RufG51bXBhZHBndXB8bnVtcGFkcmlnaHR8bnVtcGFkc3VifG51bXBhZHVwfHBnZG58cGd1cHxwcmludHNjcmVlbnxyYWx0fHJidXR0b258cmNvbnRyb2x8cmN0cmx8cmlnaHR8cnNoaWZ0fHJ3aW58cndpbmRvd258cndpbnVwfHNjcm9sbGxvY2t8c2hpZnR8c2hpZnRkb3dufHNoaWZ0dXB8c3BhY2V8dGFifHVwfHZvbHVtZV9kb3dufHZvbHVtZV9tdXRlfHZvbHVtZV91cHx3aGVlbGRvd258d2hlZWxsZWZ0fHdoZWVscmlnaHR8d2hlZWx1cHx4YnV0dG9uMXx4YnV0dG9uMilcXGIvaSxcblxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jW2Etel0rXFxiL2ksXG5cdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdH0sXG5cblx0J2tleXdvcmQnOiAvXFxiKD86QWJvcnR8QWJvdmVOb3JtYWx8QWRkfGFoa19jbGFzc3xhaGtfZXhlfGFoa19ncm91cHxhaGtfaWR8YWhrX3BpZHxBbGx8QWxudW18QWxwaGF8QWx0U3VibWl0fEFsdFRhYnxBbHRUYWJBbmRNZW51fEFsdFRhYk1lbnV8QWx0VGFiTWVudURpc21pc3N8QWx3YXlzT25Ub3B8QXV0b1NpemV8QmFja2dyb3VuZHxCYWNrZ3JvdW5kVHJhbnN8QmVsb3dOb3JtYWx8YmV0d2VlbnxCaXRBbmR8Qml0Tm90fEJpdE9yfEJpdFNoaWZ0TGVmdHxCaXRTaGlmdFJpZ2h0fEJpdFhPcnxCb2xkfEJvcmRlcnxCdXR0b258QnlSZWZ8Q2F0Y2h8Q2hlY2tib3h8Q2hlY2tlZHxDaGVja2VkR3JheXxDaG9vc2V8Q2hvb3NlU3RyaW5nfENsb3NlfENvbG9yfENvbWJvQm94fENvbnRhaW5zfENvbnRyb2xMaXN0fENvdW50fERhdGV8RGF0ZVRpbWV8RGF5c3xEREx8RGVmYXVsdHxEZWxldGVBbGx8RGVsaW1pdGVyfERlcmVmfERlc3Ryb3l8RGlnaXR8RGlzYWJsZXxEaXNhYmxlZHxEcm9wRG93bkxpc3R8RWRpdHxFamVjdHxFbHNlfEVuYWJsZXxFbmFibGVkfEVycm9yfEV4aXN0fEV4cGFuZHxFeFN0eWxlfEZpbGVTeXN0ZW18RmluYWxseXxGaXJzdHxGbGFzaHxGbG9hdHxGbG9hdEZhc3R8Rm9jdXN8Rm9udHxmb3J8Z2xvYmFsfEdyaWR8R3JvdXB8R3JvdXBCb3h8R3VpQ2xvc2V8R3VpQ29udGV4dE1lbnV8R3VpRHJvcEZpbGVzfEd1aUVzY2FwZXxHdWlTaXplfEhkcnxIaWRkZW58SGlkZXxIaWdofEhLQ0N8SEtDUnxIS0NVfEhLRVlfQ0xBU1NFU19ST09UfEhLRVlfQ1VSUkVOVF9DT05GSUd8SEtFWV9DVVJSRU5UX1VTRVJ8SEtFWV9MT0NBTF9NQUNISU5FfEhLRVlfVVNFUlN8SEtMTXxIS1V8SG91cnN8SFNjcm9sbHxJY29ufEljb25TbWFsbHxJRHxJRExhc3R8SWZ8SWZFcXVhbHxJZkV4aXN0fElmR3JlYXRlcnxJZkdyZWF0ZXJPckVxdWFsfElmSW5TdHJpbmd8SWZMZXNzfElmTGVzc09yRXF1YWx8SWZNc2dCb3h8SWZOb3RFcXVhbHxJZk5vdEV4aXN0fElmTm90SW5TdHJpbmd8SWZXaW5BY3RpdmV8SWZXaW5FeGlzdHxJZldpbk5vdEFjdGl2ZXxJZldpbk5vdEV4aXN0fElnbm9yZXxJbWFnZUxpc3R8aW58SW50ZWdlcnxJbnRlZ2VyRmFzdHxJbnRlcnJ1cHR8aXN8aXRhbGljfEpvaW58TGFiZWx8TGFzdEZvdW5kfExhc3RGb3VuZEV4aXN0fExpbWl0fExpbmVzfExpc3R8TGlzdEJveHxMaXN0Vmlld3xsb2NhbHxMb2NrfExvZ29mZnxMb3d8TG93ZXJ8TG93ZXJjYXNlfE1haW5XaW5kb3d8TWFyZ2lufE1heGltaXplfE1heGltaXplQm94fE1heFNpemV8TWluaW1pemV8TWluaW1pemVCb3h8TWluTWF4fE1pblNpemV8TWludXRlc3xNb250aENhbHxNb3VzZXxNb3ZlfE11bHRpfE5BfE5vfE5vQWN0aXZhdGV8Tm9EZWZhdWx0fE5vSGlkZXxOb0ljb258Tm9NYWluV2luZG93fG5vcm18Tm9ybWFsfE5vU29ydHxOb1NvcnRIZHJ8Tm9TdGFuZGFyZHxOb3R8Tm9UYWJ8Tm9UaW1lcnN8TnVtYmVyfE9mZnxPa3xPbnxPd25EaWFsb2dzfE93bmVyfFBhcnNlfFBhc3N3b3JkfFBpY3R1cmV8UGl4ZWx8UG9zfFBvd3xQcmlvcml0eXxQcm9jZXNzTmFtZXxSYWRpb3xSYW5nZXxSZWFkfFJlYWRPbmx5fFJlYWx0aW1lfFJlZHJhd3xSZWdpb258UkVHX0JJTkFSWXxSRUdfRFdPUkR8UkVHX0VYUEFORF9TWnxSRUdfTVVMVElfU1p8UkVHX1NafFJlbGF0aXZlfFJlbmFtZXxSZXBvcnR8UmVzaXplfFJlc3RvcmV8UmV0cnl8UkdCfFNjcmVlbnxTZWNvbmRzfFNlY3Rpb258U2VyaWFsfFNldExhYmVsfFNoaWZ0QWx0VGFifFNob3d8U2luZ2xlfFNsaWRlcnxTb3J0RGVzY3xTdGFuZGFyZHxzdGF0aWN8U3RhdHVzfFN0YXR1c0JhcnxTdGF0dXNDRHxzdHJpa2V8U3R5bGV8U3VibWl0fFN5c01lbnV8VGFiMnxUYWJTdG9wfFRleHR8VGhlbWV8VGhyb3d8VGlsZXxUb2dnbGVDaGVja3xUb2dnbGVFbmFibGV8VG9vbFdpbmRvd3xUb3B8VG9wbW9zdHxUcmFuc0NvbG9yfFRyYW5zcGFyZW50fFRyYXl8VHJlZVZpZXd8VHJ5fFRyeUFnYWlufFR5cGV8VW5DaGVja3x1bmRlcmxpbmV8VW5pY29kZXxVbmxvY2t8VW50aWx8VXBEb3dufFVwcGVyfFVwcGVyY2FzZXxVc2VFcnJvckxldmVsfFZpc3xWaXNGaXJzdHxWaXNpYmxlfFZTY3JvbGx8V2FpdHxXYWl0Q2xvc2V8V2FudEN0cmxBfFdhbnRGMnxXYW50UmV0dXJufFdoaWxlfFdyYXB8WGRpZ2l0fHhtfHhwfHhzfFllc3x5bXx5cHx5cylcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1teKCk7IFxcdCxcXG4rKlxcLT0/PjpcXFxcXFwvPCYlXFxbXFxdXSsoPz1cXCgpLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKTosXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5hdXRvaXQgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdC87LiovLFxuXHRcdHtcblx0XHRcdC8vIFRoZSBtdWx0aS1saW5lIGNvbW1lbnRzIGRlbGltaXRlcnMgY2FuIGFjdHVhbGx5IGJlIGNvbW1lbnRlZCBvdXQgd2l0aCBcIjtcIlxuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikjKD86Y29tbWVudHMtc3RhcnR8Y3MpW1xcc1xcU10qP15bIFxcdF0qIyg/OmNlfGNvbW1lbnRzLWVuZCkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCd1cmwnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKiNpbmNsdWRlXFxzKykoPzo8W15cXHJcXG4+XSs+fFwiW15cXHJcXG5cIl0rXCIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFwxXFwxfCg/IVxcMSlbXlxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogLyhbJSRAXSlcXHcrXFwxL1xuXHRcdH1cblx0fSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSNbXFx3LV0rL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFwoKS8sXG5cdC8vIFZhcmlhYmxlcyBhbmQgbWFjcm9zXG5cdCd2YXJpYWJsZSc6IC9bJEBdXFx3Ky8sXG5cdCdrZXl3b3JkJzogL1xcYig/OkNhc2V8Q29uc3R8Q29udGludWUoPzpDYXNlfExvb3ApfERlZmF1bHR8RGltfERvfEVsc2UoPzpJZik/fEVuZCg/OkZ1bmN8SWZ8U2VsZWN0fFN3aXRjaHxXaXRoKXxFbnVtfEV4aXQoPzpMb29wKT98Rm9yfEZ1bmN8R2xvYmFsfElmfElufExvY2FsfE5leHR8TnVsbHxSZURpbXxTZWxlY3R8U3RhdGljfFN0ZXB8U3dpdGNofFRoZW58VG98VW50aWx8Vm9sYXRpbGV8V0VuZHxXaGlsZXxXaXRoKVxcYi9pLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfFxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8pXFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC88Wz0+XT98Wy0rKlxcLz0mPl09P3xbP15dfFxcYig/OkFuZHxOb3R8T3IpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCkuLDpdL1xufTtcblxuLy8gaHR0cDovL2F2aXN5bnRoLm5sL2luZGV4LnBocC9UaGVfZnVsbF9BdmlTeW50aF9ncmFtbWFyXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0ZnVuY3Rpb24gcmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpIHtcblx0XHRyZXR1cm4gcGF0dGVybi5yZXBsYWNlKC88PChcXGQrKT4+L2csIGZ1bmN0aW9uIChtLCBpbmRleCkge1xuXHRcdFx0cmV0dXJuIHJlcGxhY2VtZW50c1sraW5kZXhdO1xuXHRcdH0pO1xuXHR9XG5cblx0ZnVuY3Rpb24gcmUocGF0dGVybiwgcmVwbGFjZW1lbnRzLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAocmVwbGFjZShwYXR0ZXJuLCByZXBsYWNlbWVudHMpLCBmbGFncyB8fCAnJyk7XG5cdH1cblxuXHR2YXIgdHlwZXMgPSAvYm9vbHxjbGlwfGZsb2F0fGludHxzdHJpbmd8dmFsLy5zb3VyY2U7XG5cdHZhciBpbnRlcm5hbHMgPSBbXG5cdFx0Ly8gYm9vbHNcblx0XHQvaXMoPzpib29sfGNsaXB8ZmxvYXR8aW50fHN0cmluZyl8ZGVmaW5lZHwoPzooPzppbnRlcm5hbCk/ZnVuY3Rpb258dmFyKT9leGlzdHM/Ly5zb3VyY2UsXG5cdFx0Ly8gY29udHJvbFxuXHRcdC9hcHBseXxhc3NlcnR8ZGVmYXVsdHxldmFsfGltcG9ydHxub3B8c2VsZWN0fHVuZGVmaW5lZC8uc291cmNlLFxuXHRcdC8vIGdsb2JhbFxuXHRcdC9vcHRfKD86YWxsb3dmbG9hdGF1ZGlvfGF2aXBhZHNjYW5saW5lc3xkd2NoYW5uZWxtYXNrfGVuYWJsZV8oPzpiNjRhfHBsYW5hcnRvcGFja2VkcmdifHYyMTB8eTNfMTBfMTB8eTNfMTBfMTYpfHVzZXdhdmVleHRlbnNpYmxlfHZkdWJwbGFuYXJoYWNrKXxzZXQoPzpjYWNoZW1vZGV8bWF4Y3B1fG1lbW9yeW1heHxwbGFuYXJsZWdhY3lhbGlnbm1lbnR8d29ya2luZ2RpcikvLnNvdXJjZSxcblx0XHQvLyBjb252XG5cdFx0L2hleCg/OnZhbHVlKT98dmFsdWUvLnNvdXJjZSxcblx0XHQvLyBudW1lcmljXG5cdFx0L2Fic3xjZWlsfGNvbnRpbnVlZCg/OmRlbm9taW5hdG9yfG51bWVyYXRvcik/fGV4cHxmbG9vcnxmbW9kfGZyYWN8bG9nKD86MTApP3xtYXh8bWlufG11bGRpdnxwaXxwb3d8cmFuZHxyb3VuZHxzaWdufHNwbGluZXxzcXJ0Ly5zb3VyY2UsXG5cdFx0Ly8gdHJpZ1xuXHRcdC9hP3Npbmg/fGE/Y29zaD98YT90YW5bMmhdPy8uc291cmNlLFxuXHRcdC8vIGJpdFxuXHRcdC8oPzpiaXQoPzphbmR8bm90fHg/b3J8W2xyXT9zaGlmdFthc2x1XT98c2hbbHJdfHNhW2xyXXxbbHJdcm90YXRlbD98cm9bcmxdfHRlP3N0fHNldCg/OmNvdW50KT98Y2woPzplYSk/cnxjaCg/OmFuKT9nZT8pKS8uc291cmNlLFxuXHRcdC8vIHJ1bnRpbWVcblx0XHQvYXZlcmFnZSg/OltiZ3JdfGNocm9tYVt1dl18bHVtYSl8KD86W3JnYl18Y2hyb21hW3V2XXxsdW1hfHJnYnxbeXV2XSg/PWRpZmZlcmVuY2UoPzpmcm9tcHJldmlvdXN8dG9uZXh0KSkpZGlmZmVyZW5jZSg/OmZyb21wcmV2aW91c3x0b25leHQpP3xbeXV2cmdiXXBsYW5lKD86bWVkaWFufG1pbnxtYXh8bWlubWF4ZGlmZmVyZW5jZSkvLnNvdXJjZSxcblx0XHQvLyBzY3JpcHRcblx0XHQvZ2V0cHJvY2Vzc2luZm98bG9nbXNnfHNjcmlwdCg/OmRpcig/OnV0ZjgpP3xmaWxlKD86dXRmOCk/fG5hbWUoPzp1dGY4KT8pfHNldGxvZ3BhcmFtcy8uc291cmNlLFxuXHRcdC8vIHN0cmluZ1xuXHRcdC9jaHJ8KD86ZmlsbHxmaW5kfGxlZnR8bWlkfHJlcGxhY2V8cmV2fHJpZ2h0KXN0cnxmb3JtYXR8W2x1XWNhc2V8b3JkfHN0cig/OmNtcGk/fGZyb211dGY4fGxlbnx0b3V0ZjgpfHRpbWV8dHJpbSg/OmFsbHxsZWZ0fHJpZ2h0KS8uc291cmNlLFxuXHRcdC8vIHZlcnNpb25cblx0XHQvaXN2ZXJzaW9ub3JncmVhdGVyfHZlcnNpb24oPzpudW1iZXJ8c3RyaW5nKS8uc291cmNlLFxuXHRcdC8vIGhlbHBlclxuXHRcdC9idWlsZHBpeGVsdHlwZXxjb2xvcnNwYWNlbmFtZXRvcGl4ZWx0eXBlLy5zb3VyY2UsXG5cdFx0Ly8gYXZzcGx1c1xuXHRcdC9hZGRhdXRvbG9hZGRpcnxvbig/OmNwdXxjdWRhKXxwcmVmZXRjaHxzZXRmaWx0ZXJtdG1vZGUvLnNvdXJjZVxuXHRdLmpvaW4oJ3wnKTtcblx0dmFyIHByb3BlcnRpZXMgPSBbXG5cdFx0Ly8gY29udGVudFxuXHRcdC9oYXMoPzphdWRpb3x2aWRlbykvLnNvdXJjZSxcblx0XHQvLyByZXNvbHV0aW9uXG5cdFx0L2hlaWdodHx3aWR0aC8uc291cmNlLFxuXHRcdC8vIGZyYW1lcmF0ZVxuXHRcdC9mcmFtZSg/OmNvdW50fHJhdGUpfGZyYW1lcmF0ZSg/OmRlbm9taW5hdG9yfG51bWVyYXRvcikvLnNvdXJjZSxcblx0XHQvLyBpbnRlcmxhY2luZ1xuXHRcdC9nZXRwYXJpdHl8aXMoPzpmaWVsZHxmcmFtZSliYXNlZC8uc291cmNlLFxuXHRcdC8vIGNvbG9yIGZvcm1hdFxuXHRcdC9iaXRzcGVyY29tcG9uZW50fGNvbXBvbmVudHNpemV8aGFzYWxwaGF8aXMoPzpwbGFuYXIoPzpyZ2JhPyk/fGludGVybGVhdmVkfHJnYig/OjI0fDMyfDQ4fDY0KT98eSg/Ojh8dSg/OnZhP3x5MikpP3x5dig/OjEyfDE2fDI0fDQxMSl8NDIwfDQyMnw0NDR8cGFja2VkcmdiKXxudW1jb21wb25lbnRzfHBpeGVsdHlwZS8uc291cmNlLFxuXHRcdC8vIGF1ZGlvXG5cdFx0L2F1ZGlvKD86Yml0c3xjaGFubmVsc3xkdXJhdGlvbnxsZW5ndGgoPzpbZnNdfGhpfGxvKT98cmF0ZSl8aXNhdWRpbyg/OmZsb2F0fGludCkvLnNvdXJjZVxuXHRdLmpvaW4oJ3wnKTtcblx0dmFyIGZpbHRlcnMgPSBbXG5cdFx0Ly8gc291cmNlXG5cdFx0L2F2aSg/OmZpbGUpP3NvdXJjZXxkaXJlY3RzaG93c291cmNlfGltYWdlKD86cmVhZGVyfHNvdXJjZXxzb3VyY2VhbmltKXxvcGVuZG1sc291cmNlfHNlZ21lbnRlZCg/OmF2aXNvdXJjZXxkaXJlY3RzaG93c291cmNlKXx3YXZzb3VyY2UvLnNvdXJjZSxcblx0XHQvLyBjb2xvclxuXHRcdC9jb2xvcnl1dnxjb252ZXJ0YmFja3RveXV5Mnxjb252ZXJ0dG8oPzpSR0IoPzoyNHwzMnw0OHw2NCl8KD86cGxhbmFyKT9SR0JBP3xZOD98WVYoPzoxMnwxNnwyNHw0MTEpfFlVVkE/KD86NDExfDQyMHw0MjJ8NDQ0KXxZVVkyKXxmaXhsdW1pbmFuY2V8Z3JbYWVdeXNjYWxlfGludmVydHxsZXZlbHN8bGltaXRlcnxtZXJnZWE/cmdifG1lcmdlKD86Y2hyb21hfGx1bWEpfHJnYmFkanVzdHxzaG93KD86YWxwaGF8Ymx1ZXxncmVlbnxyZWQpfHN3YXB1dnx0d2Vha3xbdXZddG95OD98eXRvdXYvLnNvdXJjZSxcblx0XHQvLyBvdmVybGF5XG5cdFx0Lyg/OmNvbG9ya2V5fHJlc2V0KW1hc2t8bGF5ZXJ8bWFzayg/OmhzKT98bWVyZ2V8b3ZlcmxheXxzdWJ0cmFjdC8uc291cmNlLFxuXHRcdC8vIGdlb21ldHJ5XG5cdFx0L2FkZGJvcmRlcnN8KD86YmljdWJpY3xiaWxpbmVhcnxibGFja21hbnxnYXVzc3xsYW5jem9zNHxsYW5jem9zfHBvaW50fHNpbmN8c3BsaW5lKD86MTZ8MzZ8NjQpKXJlc2l6ZXxjcm9wKD86Ym90dG9tKT98ZmxpcCg/Omhvcml6b250YWx8dmVydGljYWwpfCg/Omhvcml6b250YWx8dmVydGljYWwpP3JlZHVjZWJ5MnxsZXR0ZXJib3h8c2tld3Jvd3N8dHVybig/OjE4MHxsZWZ0fHJpZ2h0KS8uc291cmNlLFxuXHRcdC8vIHBpeGVsXG5cdFx0L2JsdXJ8Zml4YnJva2VuY2hyb21hdXBzYW1wbGluZ3xnZW5lcmFsY29udm9sdXRpb258KD86c3BhdGlhbHx0ZW1wb3JhbClzb2Z0ZW58c2hhcnBlbi8uc291cmNlLFxuXHRcdC8vIHRpbWVsaW5lXG5cdFx0L3RyaW18KD86dW4pP2FsaWduZWRzcGxpY2V8KD86YXNzdW1lfGFzc3VtZXNjYWxlZHxjaGFuZ2V8Y29udmVydClGUFN8KD86ZGVsZXRlfGR1cGxpY2F0ZSlmcmFtZXxkaXNzb2x2ZXxmYWRlKD86aW58aW98b3V0KVswMl0/fGZyZWV6ZWZyYW1lfGludGVybGVhdmV8bG9vcHxyZXZlcnNlfHNlbGVjdCg/OmV2ZW58b2RkfCg/OnJhbmdlKT9ldmVyeSkvLnNvdXJjZSxcblx0XHQvLyBpbnRlcmxhY2Vcblx0XHQvYXNzdW1lW2J0XWZmfGFzc3VtZSg/OmZpZWxkfGZyYW1lKWJhc2VkfGJvYnxjb21wbGVtZW50cGFyaXR5fGRvdWJsZXdlYXZlfHBlY3VsaWFyYmxlbmR8cHVsbGRvd258c2VwYXJhdGUoPzpjb2x1bW5zfGZpZWxkc3xyb3dzKXxzd2FwZmllbGRzfHdlYXZlKD86Y29sdW1uc3xyb3dzKT8vLnNvdXJjZSxcblx0XHQvLyBhdWRpb1xuXHRcdC9hbXBsaWZ5KD86ZGIpP3xhc3N1bWVzYW1wbGVyYXRlfGF1ZGlvZHViKD86ZXgpP3xhdWRpb3RyaW18Y29udmVydGF1ZGlvdG8oPzooPzo4fDE2fDI0fDMyKWJpdHxmbG9hdCl8Y29udmVydHRvbW9ub3xkZWxheWF1ZGlvfGVuc3VyZXZicm1wM3N5bmN8Z2V0KD86bGVmdHxyaWdodCk/Y2hhbm5lbHxraWxsKD86YXVkaW98dmlkZW8pfG1lcmdlY2hhbm5lbHN8bWl4YXVkaW98bW9ub3Rvc3RlcmVvfG5vcm1hbGl6ZXxyZXNhbXBsZWF1ZGlvfHNzcmN8c3VwZXJlcXx0aW1lc3RyZXRjaC8uc291cmNlLFxuXHRcdC8vIGNvbmRpdGlvbmFsXG5cdFx0L2FuaW1hdGV8YXBwbHlyYW5nZXxjb25kaXRpb25hbCg/OmZpbHRlcnxyZWFkZXJ8c2VsZWN0KXxmcmFtZWV2YWx1YXRlfHNjcmlwdGNsaXB8dGNwKD86c2VydmVyfHNvdXJjZSl8d3JpdGVmaWxlKD86ZW5kfGlmfHN0YXJ0KT8vLnNvdXJjZSxcblx0XHQvLyBleHBvcnRcblx0XHQvaW1hZ2V3cml0ZXIvLnNvdXJjZSxcblx0XHQvLyBkZWJ1Z1xuXHRcdC9ibGFja25lc3N8YmxhbmtjbGlwfGNvbG9yYmFycyg/OmhkKT98Y29tcGFyZXxkdW1wZmlsdGVyZ3JhcGh8ZWNob3xoaXN0b2dyYW18aW5mb3xtZXNzYWdlY2xpcHxwcmVyb2xsfHNldGdyYXBoYW5hbHlzaXN8c2hvdyg/OmZyYW1lbnVtYmVyfHNtcHRlfHRpbWUpfHNob3dmaXZldmVyc2lvbnN8c3RhY2soPzpob3Jpem9udGFsfHZlcnRpY2FsKXxzdWJ0aXRsZXx0b25lfHZlcnNpb24vLnNvdXJjZVxuXHRdLmpvaW4oJ3wnKTtcblx0dmFyIGFsbGludGVybmFscyA9IFtpbnRlcm5hbHMsIHByb3BlcnRpZXMsIGZpbHRlcnNdLmpvaW4oJ3wnKTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuYXZpc3ludGggPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE1hdGNoZXMgWyogKl0gbmVzdGFibGUgYmxvY2sgY29tbWVudHMsIGJ1dCBvbmx5IHN1cHBvcnRzIDEgbGV2ZWwgb2YgbmVzdGVkIGNvbW1lbnRzXG5cdFx0XHRcdC8vIC9cXFtcXCooPzpbXlxcWypdfFxcWyg/IVxcKil8XFwqKD8hXFxdKXw8c2VsZj4pKlxcKlxcXS9cblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFxbXFwqKD86W15cXFsqXXxcXFsoPyFcXCopfFxcKig/IVxcXSl8XFxbXFwqKD86W15cXFsqXXxcXFsoPyFcXCopfFxcKig/IVxcXSkpKlxcKlxcXSkqXFwqXFxdLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBNYXRjaGVzIC8qICovIGJsb2NrIGNvbW1lbnRzXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE1hdGNoZXMgIyBjb21tZW50c1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcJF0pIy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIEhhbmRsZSBiZWZvcmUgc3RyaW5ncyBiZWNhdXNlIG9wdGlvbmFsIGFyZ3VtZW50cyBhcmUgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzXG5cdFx0J2FyZ3VtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogcmUoL1xcYig/Ojw8MD4+KVxccysoXCI/KVxcdytcXDEvLnNvdXJjZSwgW3R5cGVzXSwgJ2knKSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IC9eXFx3Ky9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gT3B0aW9uYWwgYXJndW1lbnQgYXNzaWdubWVudFxuXHRcdCdhcmd1bWVudC1sYWJlbCc6IHtcblx0XHRcdHBhdHRlcm46IC8oWywoXVtcXHNcXFxcXSopXFx3K1xccyo9KD8hPSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXJndW1lbnQtbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcdysvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC89JC9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gdHJpcGxlIGRvdWJsZS1xdW90ZWRcblx0XHRcdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKj9cIlwiXCIvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBzaW5nbGUgZG91YmxlLXF1b3RlZFxuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnY29uc3RhbnQnOiB7XG5cdFx0XHRcdFx0XHQvLyBUaGVzZSAqYXJlKiBjYXNlLXNlbnNpdGl2ZSFcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpERUZBVUxUX01UX01PREV8KD86TUFJTlNDUklQVHxQUk9HUkFNfFNDUklQVClESVJ8KD86TUFDSElORXxVU0VSKV8oPzpDTEFTU0lDfFBMVVMpX1BMVUdJTlMpXFxiL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvLyBUaGUgc3BlY2lhbCBcImxhc3RcIiB2YXJpYWJsZSB0aGF0IHRha2VzIHRoZSB2YWx1ZSBvZiB0aGUgbGFzdCBpbXBsaWNpdGx5IHJldHVybmVkIGNsaXBcblx0XHQndmFyaWFibGUnOiAvXFxiKD86bGFzdClcXGIvaSxcblxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5vfHRydWV8eWVzKVxcYi9pLFxuXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86Y2F0Y2h8ZWxzZXxmb3J8ZnVuY3Rpb258Z2xvYmFsfGlmfHJldHVybnx0cnl8d2hpbGV8X19FTkRfXylcXGIvaSxcblxuXHRcdCdjb25zdGFudCc6IC9cXGJNVF8oPzpNVUxUSV9JTlNUQU5DRXxOSUNFX0ZJTFRFUnxTRVJJQUxJWkVEfFNQRUNJQUxfTVQpXFxiLyxcblxuXHRcdC8vIEF2aVN5bnRoJ3MgaW50ZXJuYWwgZnVuY3Rpb25zLCBmaWx0ZXJzLCBhbmQgcHJvcGVydGllc1xuXHRcdCdidWlsdGluLWZ1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogcmUoL1xcYig/Ojw8MD4+KVxcYi8uc291cmNlLCBbYWxsaW50ZXJuYWxzXSwgJ2knKSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCd0eXBlLWNhc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvXFxiKD86PDwwPj4pKD89XFxzKlxcKCkvLnNvdXJjZSwgW3R5cGVzXSwgJ2knKSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0Ly8gRXh0ZXJuYWwvdXNlci1kZWZpbmVkIGZpbHRlcnNcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpfChcXC4pW2Etel9dXFx3KlxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvLyBNYXRjaGVzIGEgXFwgYXMgdGhlIGZpcnN0IG9yIGxhc3QgY2hhcmFjdGVyIG9uIGEgbGluZVxuXHRcdCdsaW5lLWNvbnRpbnVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopXFxcXHxcXFxcKD89WyBcXHRdKiQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IC9cXEJcXCQoPzpbXFxkYS1mXXs2fXxbXFxkYS1mXXs4fSlcXGJ8KD86KD86XFxifFxcQi0pXFxkKyg/OlxcLlxcZCopP1xcYnxcXEJcXC5cXGQrXFxiKS9pLFxuXG5cdFx0J29wZXJhdG9yJzogL1xcK1xcKz98WyE9PD5dPT98JiZ8XFx8XFx8fFs/OiovJS1dLyxcblxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31cXFtcXF0oKTssLl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmF2cyA9IFByaXNtLmxhbmd1YWdlcy5hdmlzeW50aDtcblxufShQcmlzbSkpO1xuXG4vLyBHaXRIdWI6IGh0dHBzOi8vZ2l0aHViLmNvbS9hcGFjaGUvYXZyb1xuLy8gRG9jczogaHR0cHM6Ly9hdnJvLmFwYWNoZS5vcmcvZG9jcy9jdXJyZW50L2lkbC5odG1sXG5cblByaXNtLmxhbmd1YWdlc1snYXZyby1pZGwnXSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cXHJcXG5cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvQCg/OlskXFx3Li1dfGBbXlxcclxcbmBdK2ApKy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdmdW5jdGlvbi1pZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gW15cXHJcXG5gXStgKD89XFxzKlxcKCkvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvYFteXFxyXFxuYF0rYC8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzplbnVtfGVycm9yfHByb3RvY29sfHJlY29yZHx0aHJvd3MpXFxiXFxzKylbJFxcd10rLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphcnJheXxib29sZWFufGJ5dGVzfGRhdGV8ZGVjaW1hbHxkb3VibGV8ZW51bXxlcnJvcnxmYWxzZXxmaXhlZHxmbG9hdHxpZGx8aW1wb3J0fGludHxsb2NhbF90aW1lc3RhbXBfbXN8bG9uZ3xtYXB8bnVsbHxvbmV3YXl8cHJvdG9jb2x8cmVjb3JkfHNjaGVtYXxzdHJpbmd8dGhyb3dzfHRpbWVfbXN8dGltZXN0YW1wX21zfHRydWV8dW5pb258dXVpZHx2b2lkKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHQnbnVtYmVyJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKS0/KD86KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OmVbKy1dP1xcZCspP3wweCg/OlthLWYwLTldKyg/OlxcLlthLWYwLTldKik/fFxcLlthLWYwLTldKykoPzpwWystXT9cXGQrKT8pW2RmbF0/KD8hW1xcdy5dKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly0/XFxiKD86SW5maW5pdHl8TmFOKVxcYi9cblx0XSxcblxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClcXFtcXF17fTw+LjosOy1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmF2ZGwgPSBQcmlzbS5sYW5ndWFnZXNbJ2F2cm8taWRsJ107XG5cblByaXNtLmxhbmd1YWdlcy5hd2sgPSB7XG5cdCdoYXNoYmFuZyc6IHtcblx0XHRwYXR0ZXJuOiAvXiMhLiovLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cXFxcXCJcXHJcXG5dfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3JlZ2V4Jzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXlxcd1xccyldKVxccyopXFwvKD86W15cXC9cXFxcXFxyXFxuXXxcXFxcLikqXFwvLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHcrLyxcblx0J2tleXdvcmQnOiAvXFxiKD86QkVHSU58QkVHSU5GSUxFfEVORHxFTkRGSUxFfGJyZWFrfGNhc2V8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZG98ZWxzZXxleGl0fGZvcnxmdW5jdGlvbnxnZXRsaW5lfGlmfGlufG5leHR8bmV4dGZpbGV8cHJpbnRmP3xyZXR1cm58c3dpdGNofHdoaWxlKVxcYnxAKD86aW5jbHVkZXxsb2FkKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnbnVtYmVyJzogL1xcYig/OlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT98MHhbYS1mQS1GMC05XSspXFxiLyxcblxuXHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfCE/fnw+Jnw+Pnw8PHwoPzpcXCpcXCp8Wzw+IT0rXFwtKi8lXl0pPT98JiZ8XFx8W3wmXXxbPzpdLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSw7XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nYXdrID0gUHJpc20ubGFuZ3VhZ2VzLmF3aztcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvLyAkIHNldCB8IGdyZXAgJ15bQS1aXVteWzpzcGFjZTpdXSo9JyB8IGN1dCAtZD0gLWYxIHwgdHIgJ1xcbicgJ3wnXG5cdC8vICsgTENfQUxMLCBSQU5ET00sIFJFUExZLCBTRUNPTkRTLlxuXHQvLyArIG1ha2Ugc3VyZSBQUzEuLjQgYXJlIGhlcmUgYXMgdGhleSBhcmUgbm90IGFsd2F5cyBzZXQsXG5cdC8vIC0gc29tZSB1c2VsZXNzIHRoaW5ncy5cblx0dmFyIGVudlZhcnMgPSAnXFxcXGIoPzpCQVNIfEJBU0hPUFRTfEJBU0hfQUxJQVNFU3xCQVNIX0FSR0N8QkFTSF9BUkdWfEJBU0hfQ01EU3xCQVNIX0NPTVBMRVRJT05fQ09NUEFUX0RJUnxCQVNIX0xJTkVOT3xCQVNIX1JFTUFUQ0h8QkFTSF9TT1VSQ0V8QkFTSF9WRVJTSU5GT3xCQVNIX1ZFUlNJT058Q09MT1JURVJNfENPTFVNTlN8Q09NUF9XT1JEQlJFQUtTfERCVVNfU0VTU0lPTl9CVVNfQUREUkVTU3xERUZBVUxUU19QQVRIfERFU0tUT1BfU0VTU0lPTnxESVJTVEFDS3xESVNQTEFZfEVVSUR8R0RNU0VTU0lPTnxHRE1fTEFOR3xHTk9NRV9LRVlSSU5HX0NPTlRST0x8R05PTUVfS0VZUklOR19QSUR8R1BHX0FHRU5UX0lORk98R1JPVVBTfEhJU1RDT05UUk9MfEhJU1RGSUxFfEhJU1RGSUxFU0laRXxISVNUU0laRXxIT01FfEhPU1ROQU1FfEhPU1RUWVBFfElGU3xJTlNUQU5DRXxKT0J8TEFOR3xMQU5HVUFHRXxMQ19BRERSRVNTfExDX0FMTHxMQ19JREVOVElGSUNBVElPTnxMQ19NRUFTVVJFTUVOVHxMQ19NT05FVEFSWXxMQ19OQU1FfExDX05VTUVSSUN8TENfUEFQRVJ8TENfVEVMRVBIT05FfExDX1RJTUV8TEVTU0NMT1NFfExFU1NPUEVOfExJTkVTfExPR05BTUV8TFNfQ09MT1JTfE1BQ0hUWVBFfE1BSUxDSEVDS3xNQU5EQVRPUllfUEFUSHxOT19BVF9CUklER0V8T0xEUFdEfE9QVEVSUnxPUFRJTkR8T1JCSVRfU09DS0VURElSfE9TVFlQRXxQQVBFUlNJWkV8UEFUSHxQSVBFU1RBVFVTfFBQSUR8UFMxfFBTMnxQUzN8UFM0fFBXRHxSQU5ET018UkVQTFl8U0VDT05EU3xTRUxJTlVYX0lOSVR8U0VTU0lPTnxTRVNTSU9OVFlQRXxTRVNTSU9OX01BTkFHRVJ8U0hFTEx8U0hFTExPUFRTfFNITFZMfFNTSF9BVVRIX1NPQ0t8VEVSTXxVSUR8VVBTVEFSVF9FVkVOVFN8VVBTVEFSVF9JTlNUQU5DRXxVUFNUQVJUX0pPQnxVUFNUQVJUX1NFU1NJT058VVNFUnxXSU5ET1dJRHxYQVVUSE9SSVRZfFhER19DT05GSUdfRElSU3xYREdfQ1VSUkVOVF9ERVNLVE9QfFhER19EQVRBX0RJUlN8WERHX0dSRUVURVJfREFUQV9ESVJ8WERHX01FTlVfUFJFRklYfFhER19SVU5USU1FX0RJUnxYREdfU0VBVHxYREdfU0VBVF9QQVRIfFhER19TRVNTSU9OX0RFU0tUT1B8WERHX1NFU1NJT05fSUR8WERHX1NFU1NJT05fUEFUSHxYREdfU0VTU0lPTl9UWVBFfFhER19WVE5SfFhNT0RJRklFUlMpXFxcXGInO1xuXG5cdHZhciBjb21tYW5kQWZ0ZXJIZXJlZG9jID0ge1xuXHRcdHBhdHRlcm46IC8oXihbXCInXT8pXFx3K1xcMilbIFxcdF0rXFxTLiovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsIC8vIHRoaXMgbG9va3MgcmVhc29uYWJseSB3ZWxsIGluIGFsbCB0aGVtZXNcblx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdH07XG5cblx0dmFyIGluc2lkZVN0cmluZyA9IHtcblx0XHQnYmFzaCc6IGNvbW1hbmRBZnRlckhlcmVkb2MsXG5cdFx0J2Vudmlyb25tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcJCcgKyBlbnZWYXJzKSxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiBbXG5cdFx0XHQvLyBbMF06IEFyaXRobWV0aWMgRW52aXJvbm1lbnRcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcJD9cXChcXChbXFxzXFxTXSs/XFwpXFwpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBhICQgc2lnbiBhdCB0aGUgYmVnaW5uaW5nIGhpZ2hsaWdodCAkKCggYW5kICkpIGFzIHZhcmlhYmxlXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXChcXChbXFxzXFxTXSspXFwpXFwpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdC9eXFwkXFwoXFwoL1xuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0J251bWJlcic6IC9cXGIweFtcXGRBLUZhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W0VlXS0/XFxkKyk/Lyxcblx0XHRcdFx0XHQvLyBPcGVyYXRvcnMgYWNjb3JkaW5nIHRvIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvYmFzaHJlZi5odG1sI1NoZWxsLUFyaXRobWV0aWNcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfFxcKlxcKj0/fDw8PT98Pj49P3wmJnxcXHxcXHx8Wz0hK1xcLSovJTw+XiZ8XT0/fFs/fjpdLyxcblx0XHRcdFx0XHQvLyBJZiB0aGVyZSBpcyBubyAkIHNpZ24gYXQgdGhlIGJlZ2lubmluZyBoaWdobGlnaHQgKCggYW5kICkpIGFzIHB1bmN0dWF0aW9uXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKFxcKD98XFwpXFwpP3wsfDsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBbMV06IENvbW1hbmQgU3Vic3RpdHV0aW9uXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXCgoPzpcXChbXildK1xcKXxbXigpXSkrXFwpfGBbXmBdK2AvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFwkXFwofF5gfFxcKSR8YCQvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBbMl06IEJyYWNlIGV4cGFuc2lvblxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7W159XStcXH0vLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC86Wy09PytdP3xbIVxcL118IyM/fCUlP3xcXF5cXF4/fCwsPy8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF1dLyxcblx0XHRcdFx0XHQnZW52aXJvbm1lbnQnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhcXFxceyknICsgZW52VmFycyksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvXFwkKD86XFx3K3xbIz8qIUAkXSkvXG5cdFx0XSxcblx0XHQvLyBFc2NhcGUgc2VxdWVuY2VzIGZyb20gZWNobyBhbmQgcHJpbnRmJ3MgbWFudWFscywgYW5kIGVzY2FwZWQgcXVvdGVzLlxuXHRcdCdlbnRpdHknOiAvXFxcXCg/OlthYmNlRWZucnR2XFxcXFwiXXxPP1swLTddezEsM318VVswLTlhLWZBLUZdezh9fHVbMC05YS1mQS1GXXs0fXx4WzAtOWEtZkEtRl17MSwyfSkvXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmJhc2ggPSB7XG5cdFx0J3NoZWJhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXiMhXFxzKlxcLy4qLyxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cIntcXFxcJF0pIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmdW5jdGlvbi1uYW1lJzogW1xuXHRcdFx0Ly8gYSkgZnVuY3Rpb24gZm9vIHtcblx0XHRcdC8vIGIpIGZvbygpIHtcblx0XHRcdC8vIGMpIGZ1bmN0aW9uIGZvbygpIHtcblx0XHRcdC8vIGJ1dCBub3QgXHUyMDFDZm9vIHtcdTIwMURcblx0XHRcdHtcblx0XHRcdFx0Ly8gYSkgYW5kIGMpXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiZnVuY3Rpb25cXHMrKVtcXHctXSsoPz0oPzpcXHMqXFwoPzpcXHMqXFwpKT9cXHMqXFx7KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBiKVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiW1xcdy1dKyg/PVxccypcXChcXHMqXFwpXFxzKlxceykvLFxuXHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Ly8gSGlnaGxpZ2h0IHZhcmlhYmxlIG5hbWVzIGFzIHZhcmlhYmxlcyBpbiBmb3IgYW5kIHNlbGVjdCBiZWdpbm5pbmdzLlxuXHRcdCdmb3Itb3Itc2VsZWN0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpmb3J8c2VsZWN0KVxccyspXFx3Kyg/PVxccytpblxccykvLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBIaWdobGlnaHQgdmFyaWFibGUgbmFtZXMgYXMgdmFyaWFibGVzIGluIHRoZSBsZWZ0LWhhbmQgcGFydFxuXHRcdC8vIG9mIGFzc2lnbm1lbnRzIChcdTIwMUM9XHUyMDFEIGFuZCBcdTIwMUMrPVx1MjAxRCkuXG5cdFx0J2Fzc2lnbi1sZWZ0Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFtcXHM7fCZdfFs8Pl1cXCgpXFx3Kyg/PVxcKz89KS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Vudmlyb25tZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKF58W1xcXFxzO3wmXXxbPD5dXFxcXCgpJyArIGVudlZhcnMpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdC8vIFN1cHBvcnQgZm9yIEhlcmUtZG9jdW1lbnRzIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0hlcmVfZG9jdW1lbnRcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFtePF0pPDwtP1xccyopKFxcdyspXFxzW1xcc1xcU10qPyg/Olxccj9cXG58XFxyKVxcMi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVTdHJpbmdcblx0XHRcdH0sXG5cdFx0XHQvLyBIZXJlLWRvY3VtZW50IHdpdGggcXVvdGVzIGFyb3VuZCB0aGUgdGFnXG5cdFx0XHQvLyBcdTIxOTIgTm8gZXhwYW5zaW9uIChzbyBubyBcdTIwMUNpbnNpZGVcdTIwMUQpLlxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W148XSk8PC0/XFxzKikoW1wiJ10pKFxcdyspXFwyXFxzW1xcc1xcU10qPyg/Olxccj9cXG58XFxyKVxcMy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2Jhc2gnOiBjb21tYW5kQWZ0ZXJIZXJlZG9jXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQvLyBcdTIwMUNOb3JtYWxcdTIwMUQgc3RyaW5nXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL0RvdWJsZS1RdW90ZXMuaHRtbFxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSg/OlxcXFxcXFxcKSopXCIoPzpcXFxcW1xcc1xcU118XFwkXFwoW14pXStcXCl8XFwkKD8hXFwoKXxgW15gXStgfFteXCJcXFxcYCRdKSpcIi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBpbnNpZGVTdHJpbmdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYmFzaC9tYW51YWwvaHRtbF9ub2RlL1NpbmdsZS1RdW90ZXMuaHRtbFxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W14kXFxcXF0pJ1teJ10qJy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9iYXNoL21hbnVhbC9odG1sX25vZGUvQU5TSV8wMDJkQy1RdW90aW5nLmh0bWxcblx0XHRcdFx0cGF0dGVybjogL1xcJCcoPzpbXidcXFxcXXxcXFxcW1xcc1xcU10pKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdlbnRpdHknOiBpbnNpZGVTdHJpbmcuZW50aXR5XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdlbnZpcm9ubWVudCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXFxcXCQ/JyArIGVudlZhcnMpLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IGluc2lkZVN0cmluZy52YXJpYWJsZSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzphZGR8YXByb3Bvc3xhcHR8YXB0LWNhY2hlfGFwdC1nZXR8YXB0aXR1ZGV8YXNwZWxsfGF1dG9teXNxbGJhY2t1cHxhd2t8YmFzZW5hbWV8YmFzaHxiY3xiY29uc29sZXxiZ3xiemlwMnxjYWx8Y2F0fGNmZGlza3xjaGdycHxjaGtjb25maWd8Y2htb2R8Y2hvd258Y2hyb290fGNrc3VtfGNsZWFyfGNtcHxjb2x1bW58Y29tbXxjb21wb3NlcnxjcHxjcm9ufGNyb250YWJ8Y3NwbGl0fGN1cmx8Y3V0fGRhdGV8ZGN8ZGR8ZGRyZXNjdWV8ZGVib290c3RyYXB8ZGZ8ZGlmZnxkaWZmM3xkaWd8ZGlyfGRpcmNvbG9yc3xkaXJuYW1lfGRpcnN8ZG1lc2d8ZG9ja2VyfGRvY2tlci1jb21wb3NlfGR1fGVncmVwfGVqZWN0fGVudnxldGh0b29sfGV4cGFuZHxleHBlY3R8ZXhwcnxmZGZvcm1hdHxmZGlza3xmZ3xmZ3JlcHxmaWxlfGZpbmR8Zm10fGZvbGR8Zm9ybWF0fGZyZWV8ZnNja3xmdHB8ZnVzZXJ8Z2F3a3xnaXR8Z3BhcnRlZHxncmVwfGdyb3VwYWRkfGdyb3VwZGVsfGdyb3VwbW9kfGdyb3Vwc3xncnViLW1rY29uZmlnfGd6aXB8aGFsdHxoZWFkfGhnfGhpc3Rvcnl8aG9zdHxob3N0bmFtZXxodG9wfGljb252fGlkfGlmY29uZmlnfGlmZG93bnxpZnVwfGltcG9ydHxpbnN0YWxsfGlwfGpvYnN8am9pbnxraWxsfGtpbGxhbGx8bGVzc3xsaW5rfGxufGxvY2F0ZXxsb2duYW1lfGxvZ3JvdGF0ZXxsb29rfGxwY3xscHJ8bHByaW50fGxwcmludGR8bHByaW50cXxscHJtfGxzfGxzb2Z8bHlueHxtYWtlfG1hbnxtY3xtZGFkbXxta2NvbmZpZ3xta2Rpcnxta2UyZnN8bWtmaWZvfG1rZnN8bWtpc29mc3xta25vZHxta3N3YXB8bW12fG1vcmV8bW9zdHxtb3VudHxtdG9vbHN8bXRyfG11dHR8bXZ8bmFub3xuY3xuZXRzdGF0fG5pY2V8bmx8bm9kZXxub2h1cHxub3RpZnktc2VuZHxucG18bnNsb29rdXB8b3B8b3BlbnxwYXJ0ZWR8cGFzc3dkfHBhc3RlfHBhdGhjaGt8cGluZ3xwa2lsbHxwbnBtfHBvZG1hbnxwb2RtYW4tY29tcG9zZXxwb3BkfHByfHByaW50Y2FwfHByaW50ZW52fHBzfHB1c2hkfHB2fHF1b3RhfHF1b3RhY2hlY2t8cXVvdGFjdGx8cmFtfHJhcnxyY3B8cmVib290fHJlbXN5bmN8cmVuYW1lfHJlbmljZXxyZXZ8cm18cm1kaXJ8cnBtfHJzeW5jfHNjcHxzY3JlZW58c2RpZmZ8c2VkfHNlbmRtYWlsfHNlcXxzZXJ2aWNlfHNmdHB8c2h8c2hlbGxjaGVja3xzaHVmfHNodXRkb3dufHNsZWVwfHNsb2NhdGV8c29ydHxzcGxpdHxzc2h8c3RhdHxzdHJhY2V8c3V8c3Vkb3xzdW18c3VzcGVuZHxzd2Fwb258c3luY3x0YWN8dGFpbHx0YXJ8dGVlfHRpbWV8dGltZW91dHx0b3B8dG91Y2h8dHJ8dHJhY2Vyb3V0ZXx0c29ydHx0dHl8dW1vdW50fHVuYW1lfHVuZXhwYW5kfHVuaXF8dW5pdHN8dW5yYXJ8dW5zaGFyfHVuemlwfHVwZGF0ZS1ncnVifHVwdGltZXx1c2VyYWRkfHVzZXJkZWx8dXNlcm1vZHx1c2Vyc3x1dWRlY29kZXx1dWVuY29kZXx2fHZjcGtnfHZkaXJ8dml8dmltfHZpcnNofHZtc3RhdHx3YWl0fHdhdGNofHdjfHdnZXR8d2hlcmVpc3x3aGljaHx3aG98d2hvYW1pfHdyaXRlfHhhcmdzfHhkZy1vcGVufHlhcm58eWVzfHplbml0eXx6aXB8enNofHp5cHBlcikoPz0kfFspXFxzO3wmXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzpjYXNlfGRvfGRvbmV8ZWxpZnxlbHNlfGVzYWN8Zml8Zm9yfGZ1bmN0aW9ufGlmfGlufHNlbGVjdHx0aGVufHVudGlsfHdoaWxlKSg/PSR8WylcXHM7fCZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2Jhc2gvbWFudWFsL2h0bWxfbm9kZS9TaGVsbC1CdWlsdGluLUNvbW1hbmRzLmh0bWxcblx0XHQnYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzO3wmXXxbPD5dXFwoKSg/OlxcLnw6fGFsaWFzfGJpbmR8YnJlYWt8YnVpbHRpbnxjYWxsZXJ8Y2R8Y29tbWFuZHxjb250aW51ZXxkZWNsYXJlfGVjaG98ZW5hYmxlfGV2YWx8ZXhlY3xleGl0fGV4cG9ydHxnZXRvcHRzfGhhc2h8aGVscHxsZXR8bG9jYWx8bG9nb3V0fG1hcGZpbGV8cHJpbnRmfHB3ZHxyZWFkfHJlYWRhcnJheXxyZWFkb25seXxyZXR1cm58c2V0fHNoaWZ0fHNob3B0fHNvdXJjZXx0ZXN0fHRpbWVzfHRyYXB8dHlwZXx0eXBlc2V0fHVsaW1pdHx1bWFza3x1bmFsaWFzfHVuc2V0KSg/PSR8WylcXHM7fCZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Ly8gQWxpYXMgYWRkZWQgdG8gbWFrZSB0aG9zZSBlYXNpZXIgdG8gZGlzdGluZ3Vpc2ggZnJvbSBzdHJpbmdzLlxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcczt8Jl18Wzw+XVxcKCkoPzpmYWxzZXx0cnVlKSg/PSR8WylcXHM7fCZdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZmlsZS1kZXNjcmlwdG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcQiZcXGRcXGIvLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHQvLyBMb3RzIG9mIHJlZGlyZWN0aW9ucyBoZXJlLCBidXQgbm90IGp1c3QgdGhhdC5cblx0XHRcdHBhdHRlcm46IC9cXGQ/PD58PlxcfHxcXCs9fD1bPX5dP3whPT98PDxbPC1dP3xbJlxcZF0/Pj58XFxkWzw+XSY/fFs8Pl1bJj1dP3wmWz4mXT98XFx8WyZ8XT8vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWxlLWRlc2NyaXB0b3InOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXGQvLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvXFwkP1xcKFxcKD98XFwpXFwpP3xcXC5cXC58W3t9W1xcXTtcXFxcXS8sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpKD86WzEtOV1cXGQqfDApKD86Wy4sXVxcZCspP1xcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9O1xuXG5cdGNvbW1hbmRBZnRlckhlcmVkb2MuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmJhc2g7XG5cblx0LyogUGF0dGVybnMgaW4gY29tbWFuZCBzdWJzdGl0dXRpb24uICovXG5cdHZhciB0b0JlQ29waWVkID0gW1xuXHRcdCdjb21tZW50Jyxcblx0XHQnZnVuY3Rpb24tbmFtZScsXG5cdFx0J2Zvci1vci1zZWxlY3QnLFxuXHRcdCdhc3NpZ24tbGVmdCcsXG5cdFx0J3N0cmluZycsXG5cdFx0J2Vudmlyb25tZW50Jyxcblx0XHQnZnVuY3Rpb24nLFxuXHRcdCdrZXl3b3JkJyxcblx0XHQnYnVpbHRpbicsXG5cdFx0J2Jvb2xlYW4nLFxuXHRcdCdmaWxlLWRlc2NyaXB0b3InLFxuXHRcdCdvcGVyYXRvcicsXG5cdFx0J3B1bmN0dWF0aW9uJyxcblx0XHQnbnVtYmVyJ1xuXHRdO1xuXHR2YXIgaW5zaWRlID0gaW5zaWRlU3RyaW5nLnZhcmlhYmxlWzFdLmluc2lkZTtcblx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0b0JlQ29waWVkLmxlbmd0aDsgaSsrKSB7XG5cdFx0aW5zaWRlW3RvQmVDb3BpZWRbaV1dID0gUHJpc20ubGFuZ3VhZ2VzLmJhc2hbdG9CZUNvcGllZFtpXV07XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuc2hlbGwgPSBQcmlzbS5sYW5ndWFnZXMuYmFzaDtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJhc2ljID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86IXxSRU1cXGIpLisvaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL15SRU0vaVxuXHRcdH1cblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFshIyQlJicoKSosXFwvOjs8PT4/XlxcdyArXFwtLl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdCdrZXl3b3JkJzogL1xcYig/OkFTfEJFRVB8QkxPQUR8QlNBVkV8Q0FMTCg/OiBBQlNPTFVURSk/fENBU0V8Q0hBSU58Q0hESVJ8Q0xFQVJ8Q0xPU0V8Q0xTfENPTXxDT01NT058Q09OU1R8REFUQXxERUNMQVJFfERFRig/OiBGTnwgU0VHfERCTHxJTlR8TE5HfFNOR3xTVFIpfERJTXxET3xET1VCTEV8RUxTRXxFTFNFSUZ8RU5EfEVOVklST058RVJBU0V8RVJST1J8RVhJVHxGSUVMRHxGSUxFU3xGT1J8RlVOQ1RJT058R0VUfEdPU1VCfEdPVE98SUZ8SU5QVVR8SU5URUdFUnxJT0NUTHxLRVl8S0lMTHxMSU5FIElOUFVUfExPQ0FURXxMT0NLfExPTkd8TE9PUHxMU0VUfE1LRElSfE5BTUV8TkVYVHxPRkZ8T04oPzogQ09NfCBFUlJPUnwgS0VZfCBUSU1FUik/fE9QRU58T1BUSU9OIEJBU0V8T1VUfFBPS0V8UFVUfFJFQUR8UkVESU18UkVNfFJFU1RPUkV8UkVTVU1FfFJFVFVSTnxSTURJUnxSU0VUfFJVTnxTRUxFQ1QgQ0FTRXxTSEFSRUR8U0hFTEx8U0lOR0xFfFNMRUVQfFNUQVRJQ3xTVEVQfFNUT1B8U1RSSU5HfFNVQnxTV0FQfFNZU1RFTXxUSEVOfFRJTUVSfFRPfFRST0ZGfFRST058VFlQRXxVTkxPQ0t8VU5USUx8VVNJTkd8VklFVyBQUklOVHxXQUlUfFdFTkR8V0hJTEV8V1JJVEUpKD86XFwkfFxcYikvaSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OkFCU3xBQ0NFU1N8QUNPU3xBTkdMRXxBUkVBfEFSSVRITUVUSUN8QVJSQVl8QVNJTnxBU0t8QVR8QVROfEJBU0V8QkVHSU58QlJFQUt8Q0FVU0V8Q0VJTHxDSFJ8Q0xJUHxDT0xMQVRFfENPTE9SfENPTnxDT1N8Q09TSHxDT1R8Q1NDfERBVEV8REFUVU18REVCVUd8REVDSU1BTHxERUZ8REVHfERFR1JFRVN8REVMRVRFfERFVHxERVZJQ0V8RElTUExBWXxET1R8RUxBUFNFRHxFUFN8RVJBU0FCTEV8RVhMSU5FfEVYUHxFWFRFUk5BTHxFWFRZUEV8RklMRVRZUEV8RklYRUR8RlB8R098R1JBUEh8SEFORExFUnxJRE58SU1BR0V8SU58SU5UfElOVEVSTkFMfElQfElTfEtFWUVEfExCT1VORHxMQ0FTRXxMRUZUfExFTnxMRU5HVEh8TEVUfExJTkV8TElORVN8TE9HfExPRzEwfExPRzJ8TFRSSU18TUFSR0lOfE1BVHxNQVh8TUFYTlVNfE1JRHxNSU58TUlTU0lOR3xNT0R8TkFUSVZFfE5VTHxOVU1FUklDfE9GfE9QVElPTnxPUkR8T1JHQU5JWkFUSU9OfE9VVElOfE9VVFBVVHxQSXxQT0lOVHxQT0lOVEVSfFBPSU5UU3xQT1N8UFJJTlR8UFJPR1JBTXxQUk9NUFR8UkFEfFJBRElBTlN8UkFORE9NSVpFfFJFQ09SRHxSRUNTSVpFfFJFQ1RZUEV8UkVMQVRJVkV8UkVNQUlOREVSfFJFUEVBVHxSRVNUfFJFVFJZfFJFV1JJVEV8UklHSFR8Uk5EfFJPVU5EfFJUUklNfFNBTUV8U0VDfFNFTEVDVHxTRVFVRU5USUFMfFNFVHxTRVRURVJ8U0dOfFNJTnxTSU5IfFNJWkV8U0tJUHxTUVJ8U1RBTkRBUkR8U1RBVFVTfFNUUnxTVFJFQU18U1RZTEV8VEFCfFRBTnxUQU5IfFRFTVBMQVRFfFRFWFR8VEhFUkV8VElNRXxUSU1FT1VUfFRSQUNFfFRSQU5TRk9STXxUUlVOQ0FURXxVQk9VTkR8VUNBU0V8VVNFfFZBTHxWQVJJQUJMRXxWSUVXUE9SVHxXSEVOfFdJTkRPV3xXSVRIfFpFUnxaT05FV0lEVEgpKD86XFwkfFxcYikvaSxcblx0J29wZXJhdG9yJzogLzxbPT5dP3w+PT98WytcXC0qXFwvXj0mXXxcXGIoPzpBTkR8RVFWfElNUHxOT1R8T1J8WE9SKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7OigpXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHZhcmlhYmxlID0gLyUlP1t+Olxcd10rJT98IVxcUyshLztcblx0dmFyIHBhcmFtZXRlciA9IHtcblx0XHRwYXR0ZXJuOiAvXFwvW2Etej9dKyg/PVsgOl18JCk6P3wtW2Etel1cXGJ8LS1bYS16LV0rXFxiL2ltLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdH1cblx0fTtcblx0dmFyIHN0cmluZyA9IC9cIig/OltcXFxcXCJdXCJ8W15cIl0pKlwiKD8hXCIpLztcblx0dmFyIG51bWJlciA9IC8oPzpcXGJ8LSlcXGQrXFxiLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuYmF0Y2ggPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHQvXjo6LiovbSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKilyZW1cXGIoPzpbXl4mKVxcclxcbl18XFxeKD86XFxyXFxufFtcXHNcXFNdKSkqL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjouKi9tLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdjb21tYW5kJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBGT1IgY29tbWFuZFxuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoXSlbIFxcdF0qKWZvcig/OiBcXC9bYS16P10oPzpbIDpdKD86XCJbXlwiXSpcInxbXlxcc1wiL11cXFMqKSk/KSogXFxTKyBpbiBcXChbXildK1xcKSBkby9pbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86ZG98aW4pXFxifF5mb3JcXGIvaSxcblx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpJyxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBJRiBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJihdKVsgXFx0XSopaWYoPzogXFwvW2Etej9dKD86WyA6XSg/OlwiW15cIl0qXCJ8W15cXHNcIi9dXFxTKikpPykqICg/Om5vdCApPyg/OmNtZGV4dHZlcnNpb24gXFxkK3xkZWZpbmVkIFxcdyt8ZXJyb3JsZXZlbCBcXGQrfGV4aXN0IFxcUyt8KD86XCJbXlwiXSpcInwoPyFcIikoPzooPyE9PSlcXFMpKyk/KD86PT18ICg/OmVxdXxnZXF8Z3RyfGxlcXxsc3N8bmVxKSApKD86XCJbXlwiXSpcInxbXlxcc1wiXVxcUyopKS9pbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y21kZXh0dmVyc2lvbnxkZWZpbmVkfGVycm9ybGV2ZWx8ZXhpc3R8bm90KVxcYnxeaWZcXGIvaSxcblx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFxefD09fFxcYig/OmVxdXxnZXF8Z3RyfGxlcXxsc3N8bmVxKVxcYi9pXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIEVMU0UgY29tbWFuZFxuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58WyYoKV0pWyBcXHRdKillbHNlXFxiL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9eZWxzZVxcYi9pXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFNFVCBjb21tYW5kXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbJihdKVsgXFx0XSopc2V0KD86IFxcL1thLXpdKD86WyA6XSg/OlwiW15cIl0qXCJ8W15cXHNcIi9dXFxTKikpPykqICg/OlteXiYpXFxyXFxuXXxcXF4oPzpcXHJcXG58W1xcc1xcU10pKSovaW0sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15zZXRcXGIvaSxcblx0XHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nLFxuXHRcdFx0XHRcdCdwYXJhbWV0ZXInOiBwYXJhbWV0ZXIsXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogW1xuXHRcdFx0XHRcdFx0dmFyaWFibGUsXG5cdFx0XHRcdFx0XHQvXFx3Kyg/PSg/OlsqXFwvJStcXC0mXnxdfDw8fD4+KT89KS9cblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogL1sqXFwvJStcXC0mXnxdPT98PDw9P3w+Pj0/fFshfl89XS8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKScsXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gT3RoZXIgY29tbWFuZHNcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFsmKF0pWyBcXHRdKkA/KVxcdytcXGIoPzpcIig/OltcXFxcXCJdXCJ8W15cIl0pKlwiKD8hXCIpfFteXCJeJilcXHJcXG5dfFxcXig/OlxcclxcbnxbXFxzXFxTXSkpKi9tLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQna2V5d29yZCc6IC9eXFx3K1xcYi8sXG5cdFx0XHRcdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHRcdFx0XHQncGFyYW1ldGVyJzogcGFyYW1ldGVyLFxuXHRcdFx0XHRcdCdsYWJlbCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxccyopOlxcUysvbSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvXFxeL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnb3BlcmF0b3InOiAvWyZAXS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKSddL1xuXHR9O1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuYmJjb2RlID0ge1xuXHQndGFnJzoge1xuXHRcdHBhdHRlcm46IC9cXFtcXC8/W15cXHM9XFxdXSsoPzpcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCJcXF09XSspKT8oPzpcXHMrW15cXHM9XFxdXStcXHMqPVxccyooPzpcIlteXCJdKlwifCdbXiddKid8W15cXHMnXCJcXF09XSspKSpcXHMqXFxdLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFxbXFwvP1teXFxzPVxcXV0rLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFtcXC8/L1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC89XFxzKig/OlwiW15cIl0qXCJ8J1teJ10qJ3xbXlxccydcIlxcXT1dKykvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBbXG5cdFx0XHRcdFx0XHQvXj0vLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMqKVtcIiddfFtcIiddJC8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFxdLyxcblx0XHRcdCdhdHRyLW5hbWUnOiAvW15cXHM9XFxdXSsvXG5cdFx0fVxuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc2hvcnRjb2RlID0gUHJpc20ubGFuZ3VhZ2VzLmJiY29kZTtcblxuLy8gYmFzZWQgbG9vc2VseSB1cG9uOiBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYmljZXAvYmxvYi9tYWluL3NyYy90ZXh0bWF0ZS9iaWNlcC50bWxhbmd1YWdlXG5QcmlzbS5sYW5ndWFnZXMuYmljZXAgPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdC8vIG11bHRpbGluZSBjb21tZW50cyBlZyAvKiBBU0RGICovXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIHNpbmdsZWxpbmUgY29tbWVudHMgZWcgLy8gQVNERlxuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cblx0J3Byb3BlcnR5JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl1bIFxcdF0qKVthLXpfXVxcdyooPz1bIFxcdF0qOikvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl1bIFxcdF0qKScoPzpcXFxcLnxcXCQoPyFcXHspfFteJ1xcXFxcXHJcXG4kXSkqJyg/PVsgXFx0XSo6KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8nJydbXiddW1xcc1xcU10qPycnJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFwnXSknKD86XFxcXC58XFwkKD8hXFx7KXxbXidcXFxcXFxyXFxuJF0pKicvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9XG5cdF0sXG5cdCdpbnRlcnBvbGF0ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFwnXSknKD86XFxcXC58XFwkKD86KD8hXFx7KXxcXHtbXnt9XFxyXFxuXSpcXH0pfFteJ1xcXFxcXHJcXG4kXSkqJy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxce1tee31cXHJcXG5dKlxcfS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFwkXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXG5cdCdkYXRhdHlwZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/Om91dHB1dHxwYXJhbSlcXGJbIFxcdF0rXFx3K1sgXFx0XSspXFx3K1xcYi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vQXp1cmUvYmljZXAvYmxvYi8xMTRhMzI1MWI0ZTZlMzAwODJhNTg3MjlmMTlhOGNjNGUzNzRmZmE2L3NyYy90ZXh0bWF0ZS9iaWNlcC50bWxhbmd1YWdlI0wxODRcblx0J2tleXdvcmQnOiAvXFxiKD86ZXhpc3Rpbmd8Zm9yfGlmfGlufG1vZHVsZXxudWxsfG91dHB1dHxwYXJhbXxyZXNvdXJjZXx0YXJnZXRTY29wZXx2YXIpXFxiLyxcblxuXHQnZGVjb3JhdG9yJzogL0BcXHcrXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1bIFxcdF0qXFwoKS9pLFxuXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OkVbKy1dP1xcZCspPy9pLFxuXHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfFxcKlxcKj0/fD0+fCYmPT98XFx8XFx8PT98WyE9XT09fDw8PT98Pj4+Pz0/fFstKyovJSZ8XiE9PD5dPT98XFwuezN9fFxcP1xcPz0/fFxcP1xcLj98W346XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuYmljZXBbJ2ludGVycG9sYXRlZC1zdHJpbmcnXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGVbJ2V4cHJlc3Npb24nXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuYmljZXA7XG5cblByaXNtLmxhbmd1YWdlcy5iaXJiID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL3I/KFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdC9cXGJbQS1aXSg/OltcXGRfXSpbYS16QS1aXVxcdyopP1xcYi8sXG5cblx0XHQvLyBtYXRjaGVzIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiByZXR1cm4gdHlwZXMgKHBhcmFtZXRlcnMgYXMgd2VsbCkuXG5cdFx0L1xcYig/OltBLVpdXFx3KnwoPyEoPzp2YXJ8dm9pZClcXGIpW2Etel1cXHcqKSg/PVxccytcXHcrXFxzKls7LD0oKV0pL1xuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3NlcnR8YnJlYWt8Y2FzZXxjbGFzc3xjb25zdHxkZWZhdWx0fGVsc2V8ZW51bXxmaW5hbHxmb2xsb3dzfGZvcnxncmFifGlmfG5lc3R8bmV3fG5leHR8bm9TZWVifHJldHVybnxzdGF0aWN8c3dpdGNofHRocm93fHZhcnx2b2lkfHdoaWxlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18JiZ8XFx8XFx8fDw8PT98Pj49P3x+KD86XFwvPT8pP3xbK1xcLSpcXC8lJl58PSE8Pl09P3xcXD98Oi8sXG5cdCd2YXJpYWJsZSc6IC9cXGJbYS16X11cXHcqXFxiLyxcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdiaXJiJywgJ2Z1bmN0aW9uJywge1xuXHQnbWV0YWRhdGEnOiB7XG5cdFx0cGF0dGVybjogLzxcXHcrPi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJpc29uID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHt9KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnYmlzb24nLCAnY29tbWVudCcsIHtcblx0J2Jpc29uJzoge1xuXHRcdC8vIFRoaXMgc2hvdWxkIG1hdGNoIGFsbCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBmaWxlXG5cdFx0Ly8gaW5jbHVkaW5nIHRoZSBwcm9sb2d1ZShzKSwgdGhlIGJpc29uIGRlY2xhcmF0aW9ucyBhbmRcblx0XHQvLyB0aGUgZ3JhbW1hciBydWxlcy5cblx0XHRwYXR0ZXJuOiAvXig/OlteJV18JSg/ISUpKSolJVtcXHNcXFNdKj8lJS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYyc6IHtcblx0XHRcdFx0Ly8gQWxsb3cgZm9yIG9uZSBsZXZlbCBvZiBuZXN0ZWQgYnJhY2VzXG5cdFx0XHRcdHBhdHRlcm46IC8lXFx7W1xcc1xcU10qPyVcXH18XFx7KD86XFx7W159XSpcXH18W157fV0pKlxcfS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXiU/XFx7fCU/XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2Jpc29uLXZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1skQF0oPzo8W15cXHM+XSs+KT9bXFx3JF0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC88fD4vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuY1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuYy5jb21tZW50LFxuXHRcdFx0J3N0cmluZyc6IFByaXNtLmxhbmd1YWdlcy5jLnN0cmluZyxcblx0XHRcdCdwcm9wZXJ0eSc6IC9cXFMrKD89OikvLFxuXHRcdFx0J2tleXdvcmQnOiAvJVxcdysvLFxuXHRcdFx0J251bWJlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteQF0pXFxiKD86MHhbXFxkYS1mXSt8XFxkKykvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC8lWyU/XXxbfDo7XFxbXFxdPD5dL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5ibmYgPSB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cXHJcXG5cIl0qXCJ8J1teXFxyXFxuJ10qJy9cblx0fSxcblx0J2RlZmluaXRpb24nOiB7XG5cdFx0cGF0dGVybjogLzxbXjw+XFxyXFxuXFx0XSs+KD89XFxzKjo6PSkvLFxuXHRcdGFsaWFzOiBbJ3J1bGUnLCAna2V5d29yZCddLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL148fD4kL1xuXHRcdH1cblx0fSxcblx0J3J1bGUnOiB7XG5cdFx0cGF0dGVybjogLzxbXjw+XFxyXFxuXFx0XSs+Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePHw+JC9cblx0XHR9XG5cdH0sXG5cdCdvcGVyYXRvcic6IC86Oj18W3woKVtcXF17fSorP118XFwuezN9L1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJibmYgPSBQcmlzbS5sYW5ndWFnZXMuYm5mO1xuXG5QcmlzbS5sYW5ndWFnZXMuYnJhaW5mdWNrID0ge1xuXHQncG9pbnRlcic6IHtcblx0XHRwYXR0ZXJuOiAvPHw+Lyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdpbmNyZW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcKy8sXG5cdFx0YWxpYXM6ICdpbnNlcnRlZCdcblx0fSxcblx0J2RlY3JlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvLS8sXG5cdFx0YWxpYXM6ICdkZWxldGVkJ1xuXHR9LFxuXHQnYnJhbmNoaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cXFt8XFxdLyxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblx0J29wZXJhdG9yJzogL1suLF0vLFxuXHQnY29tbWVudCc6IC9cXFMrL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmJyaWdodHNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiAvKD86XFxicmVtfCcpLiovaSxcblx0J2RpcmVjdGl2ZS1zdGF0ZW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikjKD86Y29uc3R8ZWxzZSg/OltcXHQgXStpZik/fGVuZFtcXHQgXStpZnxlcnJvcnxpZikuKi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Vycm9yLW1lc3NhZ2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXiNlcnJvcikuKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXiMoPzpjb25zdHxlbHNlKD86W1xcdCBdK2lmKT98ZW5kW1xcdCBdK2lmfGVycm9yfGlmKS8sXG5cdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdH0sXG5cdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcXHJcXG57LF1bXFx0IF0qKSg/Oig/IVxcZClcXHcrfFwiKD86W15cIlxcclxcbl18XCJcIikqXCIoPyFcIikpKD89WyBcXHRdKjopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXHJcXG5dfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJBc1tcXHQgXSspXFx3Ky9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86QXN8RGltfEVhY2h8RWxzZXxFbHNlaWZ8RW5kfEV4aXR8Rm9yfEZ1bmN0aW9ufEdvdG98SWZ8SW58UHJpbnR8UmV0dXJufFN0ZXB8U3RvcHxTdWJ8VGhlbnxUb3xXaGlsZSlcXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYig/IVxcZClcXHcrKD89W1xcdCBdKlxcKCkvLFxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQrKT8oPzpbZWRdWystXVxcZCspP3wmaFthLWZcXGRdKylcXGJbJSYhI10/L2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8Pj49P3w8PD0/fDw+fFstKyovXFxcXDw+XT0/fFs6Xj0/XXxcXGIoPzphbmR8bW9kfG5vdHxvcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1suLDsoKVtcXF17fV0vLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86TElORV9OVU0pXFxiL2lcbn07XG5cblByaXNtLmxhbmd1YWdlcy5icmlnaHRzY3JpcHRbJ2RpcmVjdGl2ZS1zdGF0ZW1lbnQnXS5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuYnJpZ2h0c2NyaXB0O1xuXG5QcmlzbS5sYW5ndWFnZXMuYnJvID0ge1xuXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFwkXSkjLiovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaXRhbGljJzogL1xcYig/OkZJWE1FfFRPRE98WFhYKVxcYi9cblx0XHR9XG5cdH0sXG5cblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdib29sZWFuJzogL1xcYltURl1cXGIvLFxuXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmV2ZW50fGZ1bmN0aW9ufGhvb2spWyBcXHRdKylcXHcrKD86OjpcXHcrKT8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnYnVpbHRpbic6IC8oPzpAKD86bG9hZCg/Oi0oPzpwbHVnaW58c2lncykpP3x1bmxvYWR8cHJlZml4ZXN8aWZuP2RlZnxlbHNlfCg/OmVuZCk/aWZ8RElSfEZJTEVOQU1FKSl8KD86Jj8oPzphZGRfZnVuY3xjcmVhdGVfZXhwaXJlfGRlZmF1bHR8ZGVsZXRlX2Z1bmN8ZW5jcnlwdHxlcnJvcl9oYW5kbGVyfGV4cGlyZV9mdW5jfGdyb3VwfGxvZ3xtZXJnZWFibGV8b3B0aW9uYWx8cGVyc2lzdGVudHxwcmlvcml0eXxyYXdfb3V0cHV0fHJlYWRfZXhwaXJlfHJlZGVmfHJvdGF0ZV9pbnRlcnZhbHxyb3RhdGVfc2l6ZXxzeW5jaHJvbml6ZWR8dHlwZV9jb2x1bW58d3JpdGVfZXhwaXJlKSkvLFxuXG5cdCdjb25zdGFudCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYmNvbnN0WyBcXHRdKylcXHcrL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OmFkZHxhZGRyfGFsYXJtfGFueXxib29sfGJyZWFrfGNvbnN0fGNvbnRpbnVlfGNvdW50fGRlbGV0ZXxkb3VibGV8ZWxzZXxlbnVtfGV2ZW50fGV4cG9ydHxmaWxlfGZvcnxmdW5jdGlvbnxnbG9iYWx8aG9va3xpZnxpbnxpbnR8aW50ZXJ2YWx8bG9jYWx8bW9kdWxlfG5leHR8b2Z8b3BhcXVlfHBhdHRlcm58cG9ydHxwcmludHxyZWNvcmR8cmV0dXJufHNjaGVkdWxlfHNldHxzdHJpbmd8c3VibmV0fHRhYmxlfHRpbWV8dGltZW91dHx1c2luZ3x2ZWN0b3J8d2hlbilcXGIvLFxuXG5cdCdvcGVyYXRvcic6IC8tLT98XFwrXFwrP3whPT89P3w8PT98Pj0/fD09Pz0/fCYmfFxcfFxcfD98XFw/fFxcKnxcXC98fnxcXF58JS8sXG5cblx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/L2ksXG5cblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuLyogZXNsaW50LWRpc2FibGUgbm8tbWlzbGVhZGluZy1jaGFyYWN0ZXItY2xhc3MgKi9cblxuLy8gMUM6RW50ZXJwcmlzZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0RpdmVyc3VzMjMvXG4vL1xuUHJpc20ubGFuZ3VhZ2VzLmJzbCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLiovLFxuXHQnc3RyaW5nJzogW1xuXHRcdC8vIFx1MDQyMVx1MDQ0Mlx1MDQ0MFx1MDQzRVx1MDQzQVx1MDQzOFxuXHRcdC8vIFN0cmluZ3Ncblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC8vIFx1MDQxNFx1MDQzMFx1MDQ0Mlx1MDQzMCBcdTA0MzggXHUwNDMyXHUwNDQwXHUwNDM1XHUwNDNDXHUwNDRGXG5cdFx0Ly8gRGF0ZSAmIHRpbWVcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcclxcblxcXFxdfFxcXFwuKSonL1xuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gUlVcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKSg/Olx1MDQzRlx1MDQzRVx1MDQzQVx1MDQzMHxcdTA0MzRcdTA0M0JcdTA0NEZ8XHUwNDNEXHUwNDNFXHUwNDMyXHUwNDRCXHUwNDM5fFx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQ0MFx1MDQzMlx1MDQzMFx1MDQ0Mlx1MDQ0Q3xcdTA0M0ZcdTA0M0VcdTA0M0ZcdTA0NEJcdTA0NDJcdTA0M0FcdTA0MzB8XHUwNDM4XHUwNDQxXHUwNDNBXHUwNDNCXHUwNDRFXHUwNDQ3XHUwNDM1XHUwNDNEXHUwNDM4XHUwNDM1fFx1MDQzMlx1MDQ0Qlx1MDQzN1x1MDQzMlx1MDQzMFx1MDQ0Mlx1MDQ0Q1x1MDQzOFx1MDQ0MVx1MDQzQVx1MDQzQlx1MDQ0RVx1MDQ0N1x1MDQzNVx1MDQzRFx1MDQzOFx1MDQzNXxcdTA0MzhcdTA0M0RcdTA0MzBcdTA0NDdcdTA0MzV8XHUwNDNBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDNGXHUwNDNFXHUwNDNGXHUwNDRCXHUwNDQyXHUwNDNBXHUwNDM4fFx1MDQzRFx1MDQzNVx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzNVx1MDQzQlx1MDQzNVx1MDQzRFx1MDQzRXxcdTA0NDRcdTA0NDNcdTA0M0RcdTA0M0FcdTA0NDZcdTA0MzhcdTA0NEZ8XHUwNDNGXHUwNDM1XHUwNDQwXHUwNDM1XHUwNDNDfFx1MDQzMlx1MDQzRVx1MDQzN1x1MDQzMlx1MDQ0MFx1MDQzMFx1MDQ0MnxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0NDRcdTA0NDNcdTA0M0RcdTA0M0FcdTA0NDZcdTA0MzhcdTA0Mzh8XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzOFx1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNVx1MDQzNVx1MDQ0MVx1MDQzQlx1MDQzOHxcdTA0M0ZcdTA0NDBcdTA0M0VcdTA0NDZcdTA0MzVcdTA0MzRcdTA0NDNcdTA0NDBcdTA0MzB8XHUwNDNBXHUwNDNFXHUwNDNEXHUwNDM1XHUwNDQ2XHUwNDNGXHUwNDQwXHUwNDNFXHUwNDQ2XHUwNDM1XHUwNDM0XHUwNDQzXHUwNDQwXHUwNDRCfFx1MDQ0Mlx1MDQzRVx1MDQzM1x1MDQzNFx1MDQzMHxcdTA0MzdcdTA0M0RcdTA0MzBcdTA0NDd8XHUwNDREXHUwNDNBXHUwNDQxXHUwNDNGXHUwNDNFXHUwNDQwXHUwNDQyfFx1MDQzQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQzNVx1MDQ0MVx1MDQzQlx1MDQzOHxcdTA0MzhcdTA0Mzd8XHUwNDNBXHUwNDMwXHUwNDM2XHUwNDM0XHUwNDNFXHUwNDMzXHUwNDNFfFx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzOFx1MDQzRFx1MDQzMHxcdTA0M0JcdTA0M0VcdTA0MzZcdTA0NEN8XHUwNDNGXHUwNDNFfFx1MDQ0Nlx1MDQzOFx1MDQzQVx1MDQzQnxcdTA0M0FcdTA0M0VcdTA0M0RcdTA0MzVcdTA0NDZcdTA0NDZcdTA0MzhcdTA0M0FcdTA0M0JcdTA0MzB8XHUwNDMyXHUwNDRCXHUwNDNGXHUwNDNFXHUwNDNCXHUwNDNEXHUwNDM4XHUwNDQyXHUwNDRDKSg/IVtcXHdcXHUwNDAwLVxcdTA0ODRcXHUwNDg3LVxcdTA1MmZcXHUxZDJiXFx1MWQ3OFxcdTJkZTAtXFx1MmRmZlxcdWE2NDAtXFx1YTY5ZlxcdWZlMmVcXHVmZTJmXSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIEVOXG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86YnJlYWt8ZG98ZWFjaHxlbHNlfGVsc2VpZnxlbmRkb3xlbmRmdW5jdGlvbnxlbmRpZnxlbmRwcm9jZWR1cmV8ZW5kdHJ5fGV4Y2VwdHxleGVjdXRlfGV4cG9ydHxmYWxzZXxmb3J8ZnVuY3Rpb258aWZ8aW58bmV3fG51bGx8cHJvY2VkdXJlfHJhaXNlfHJldHVybnx0aGVufHRvfHRydWV8dHJ5fHVuZGVmaW5lZHx2YWx8dmFyfHdoaWxlKVxcYi9pXG5cdFx0fVxuXHRdLFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXig/PVxcZCl8W15cXHdcXHUwNDAwLVxcdTA0ODRcXHUwNDg3LVxcdTA1MmZcXHUxZDJiXFx1MWQ3OFxcdTJkZTAtXFx1MmRmZlxcdWE2NDAtXFx1YTY5ZlxcdWZlMmVcXHVmZTJmXSkoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86RVsrLV0/XFxkKyk/L2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0L1s8PitcXC0qL109P3xbJT1dLyxcblx0XHQvLyBSVVxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcd1xcdTA0MDAtXFx1MDQ4NFxcdTA0ODctXFx1MDUyZlxcdTFkMmJcXHUxZDc4XFx1MmRlMC1cXHUyZGZmXFx1YTY0MC1cXHVhNjlmXFx1ZmUyZVxcdWZlMmZdKSg/Olx1MDQzOHxcdTA0MzhcdTA0M0JcdTA0Mzh8XHUwNDNEXHUwNDM1KSg/IVtcXHdcXHUwNDAwLVxcdTA0ODRcXHUwNDg3LVxcdTA1MmZcXHUxZDJiXFx1MWQ3OFxcdTJkZTAtXFx1MmRmZlxcdWE2NDAtXFx1YTY5ZlxcdWZlMmVcXHVmZTJmXSkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIEVOXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFuZHxub3R8b3IpXFxiL2lcblx0XHR9XG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9cXChcXC58XFwuXFwpfFsoKVxcW1xcXTo7LC5dLyxcblx0J2RpcmVjdGl2ZSc6IFtcblx0XHQvLyBcdTA0MjJcdTA0MzVcdTA0MzNcdTA0MzggXHUwNDNGXHUwNDQwXHUwNDM1XHUwNDNGXHUwNDQwXHUwNDNFXHUwNDQ2XHUwNDM1XHUwNDQxXHUwNDQxXHUwNDNFXHUwNDQwXHUwNDMwIFx1MDQzMlx1MDQzOFx1MDQzNFx1MDQzMCAmXHUwNDFBXHUwNDNCXHUwNDM4XHUwNDM1XHUwNDNEXHUwNDQyLCAmXHUwNDIxXHUwNDM1XHUwNDQwXHUwNDMyXHUwNDM1XHUwNDQwLCAuLi5cblx0XHQvLyBQcmVwcm9jZXNzb3IgdGFncyBvZiB0aGUgdHlwZSAmQ2xpZW50LCAmU2VydmVyLCAuLi5cblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSYuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0Ly8gXHUwNDE4XHUwNDNEXHUwNDQxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQ2XHUwNDM4XHUwNDM4IFx1MDQzRlx1MDQ0MFx1MDQzNVx1MDQzRlx1MDQ0MFx1MDQzRVx1MDQ0Nlx1MDQzNVx1MDQ0MVx1MDQ0MVx1MDQzRVx1MDQ0MFx1MDQzMCBcdTA0MzJcdTA0MzhcdTA0MzRcdTA0MzA6XG5cdFx0Ly8gI1x1MDQxNVx1MDQ0MVx1MDQzQlx1MDQzOCBcdTA0MjFcdTA0MzVcdTA0NDBcdTA0MzJcdTA0MzVcdTA0NDAgXHUwNDIyXHUwNDNFXHUwNDMzXHUwNDM0XHUwNDMwXG5cdFx0Ly8gLi4uXG5cdFx0Ly8gI1x1MDQxQVx1MDQzRVx1MDQzRFx1MDQzNVx1MDQ0Nlx1MDQxNVx1MDQ0MVx1MDQzQlx1MDQzOFxuXHRcdC8vIFByZXByb2Nlc3NvciBpbnN0cnVjdGlvbnMgb2YgdGhlIGZvcm06XG5cdFx0Ly8gI0lmIFNlcnZlciBUaGVuXG5cdFx0Ly8gLi4uXG5cdFx0Ly8gI0VuZElmXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikjLiovZ20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fVxuXHRdXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMub3NjcmlwdCA9IFByaXNtLmxhbmd1YWdlc1snYnNsJ107XG5cbi8vIGh0dHBzOi8vY2Zkb2NzLm9yZy9zY3JpcHRcblByaXNtLmxhbmd1YWdlcy5jZnNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/Ol58W14uXSlAW1xcd1xcLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YnJlYWt8Y2F0Y2h8Y29tcG9uZW50fGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm9yfGZ1bmN0aW9ufGlmfGlufGluY2x1ZGV8cGFja2FnZXxwcml2YXRlfHByb3BlcnR5fHB1YmxpY3xyZW1vdGV8cmVxdWlyZWR8cmV0aHJvd3xyZXR1cm58c3RhdGljfHN3aXRjaHx0aHJvd3x0cnl8dmFyfHdoaWxlfHhtbClcXGIoPyFcXHMqPSkvLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0L1xcK1xcK3wtLXwmJnxcXHxcXHx8Ojp8PT58WyE9XT09fFstKyovJSZ8XiE9PD5dPT98XFw/KD86XFwufDopP3w6Lyxcblx0XHQvXFxiKD86YW5kfGNvbnRhaW5zfGVxfGVxdWFsfGVxdnxndHxndGV8aW1wfGlzfGx0fGx0ZXxtb2R8bm90fG9yfHhvcilcXGIvXG5cdF0sXG5cdCdzY29wZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YXBwbGljYXRpb258YXJndW1lbnRzfGNnaXxjbGllbnR8Y29va2llfGxvY2FsfHNlc3Npb258c3VwZXJ8dGhpc3x2YXJpYWJsZXMpXFxiLyxcblx0XHRhbGlhczogJ2dsb2JhbCdcblx0fSxcblx0J3R5cGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFueXxhcnJheXxiaW5hcnl8Ym9vbGVhbnxkYXRlfGd1aWR8bnVtZXJpY3xxdWVyeXxzdHJpbmd8c3RydWN0fHV1aWR8dm9pZHx4bWwpXFxiLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjZnNjcmlwdCcsICdrZXl3b3JkJywge1xuXHQvLyBUaGlzIG11c3QgYmUgZGVjbGFyZWQgYmVmb3JlIGtleXdvcmQgYmVjYXVzZSB3ZSB1c2UgXCJmdW5jdGlvblwiIGluc2lkZSB0aGUgbG9va2FoZWFkXG5cdCdmdW5jdGlvbi12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKls9Ol1cXHMqKD86XFxiZnVuY3Rpb25cXGJ8KD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKilcXHMqPT4pKS8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fVxufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuY2ZzY3JpcHRbJ2NsYXNzLW5hbWUnXTtcblByaXNtLmxhbmd1YWdlcy5jZmMgPSBQcmlzbS5sYW5ndWFnZXNbJ2Nmc2NyaXB0J107XG5cblByaXNtLmxhbmd1YWdlcy5jaGFpc2NyaXB0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0Ly8gZS5nLiBjbGFzcyBSZWN0YW5nbGUgeyAuLi4gfVxuXHRcdFx0cGF0dGVybjogLyhcXGJjbGFzc1xccyspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBlLmcuIGF0dHIgUmVjdGFuZ2xlOjpoZWlnaHQsIGRlZiBSZWN0YW5nbGU6OmFyZWEoKSB7IC4uLiB9XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmF0dHJ8ZGVmKVxccyspXFx3Kyg/PVxccyo6OikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiAvXFxiKD86YXR0cnxhdXRvfGJyZWFrfGNhc2V8Y2F0Y2h8Y2xhc3N8Y29udGludWV8ZGVmfGRlZmF1bHR8ZWxzZXxmaW5hbGx5fGZvcnxmdW58Z2xvYmFsfGlmfHJldHVybnxzd2l0Y2h8dGhpc3x0cnl8dmFyfHdoaWxlKVxcYi8sXG5cdCdudW1iZXInOiBbXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmNwcC5udW1iZXIsXG5cdFx0L1xcYig/OkluZmluaXR5fE5hTilcXGIvXG5cdF0sXG5cdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98XFx8XFx8fCYmfDpbOj1dP3wtLXxcXCtcXCt8Wz0hPD4rXFwtKi8lfCZeXT0/fFs/fl18YFteYFxcclxcbl17MSw0fWAvLFxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NoYWlzY3JpcHQnLCAnb3BlcmF0b3InLCB7XG5cdCdwYXJhbWV0ZXItdHlwZSc6IHtcblx0XHQvLyBlLmcuIGRlZiBmb28oaW50IHgsIFZlY3RvciB5KSB7Li4ufVxuXHRcdHBhdHRlcm46IC8oWywoXVxccyopXFx3Kyg/PVxccytcXHcpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjaGFpc2NyaXB0JywgJ3N0cmluZycsIHtcblx0J3N0cmluZy1pbnRlcnBvbGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cIiRcXFxcXXxcXFxcW1xcc1xcU118XFwkKD8hXFx7KXxcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkqXFx9KSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tee31dKlxcfSkqXFx9KSpcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1leHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFwkXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jaGFpc2NyaXB0XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmNpbCA9IHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLiovLFxuXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXFcpXFwuW2Etel0rKD89XFxzKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdH0sXG5cblx0Ly8gQWN0dWFsbHkgYW4gYXNzZW1ibHkgcmVmZXJlbmNlXG5cdCd2YXJpYWJsZSc6IC9cXFtbXFx3XFwuXStcXF0vLFxuXG5cblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YW5zaXxhc3NlbWJseXxhdXRvfGF1dG9jaGFyfGJlZm9yZWZpZWxkaW5pdHxib29sfGJzdHJ8Ynl2YWxzdHJ8Y2F0Y2h8Y2hhcnxjaWx8Y2xhc3N8Y3VycmVuY3l8ZGF0ZXxkZWNpbWFsfGRlZmF1bHR8ZW51bXxlcnJvcnxleHBsaWNpdHxleHRlbmRzfGV4dGVybnxmYW1hbmRhc3NlbXxmYW1pbHl8ZmFtb3Jhc3NlbXxmaW5hbCg/Omx5KT98ZmxvYXQzMnxmbG9hdDY0fGhpZGVieXNpZ3x1P2ludCg/Ojh8MTZ8MzJ8NjQpP3xpYW50fGlkaXNwYXRjaHxpbXBsZW1lbnRzfGltcG9ydHxpbml0b25seXxpbnN0YW5jZXxpbnRlcmZhY2V8aXVua25vd258bGl0ZXJhbHxscHN0cnxscHN0cnVjdHxscHRzdHJ8bHB3c3RyfG1hbmFnZWR8bWV0aG9kfG5hdGl2ZSg/OlR5cGUpP3xuZXN0ZWR8bmV3c2xvdHxvYmplY3QoPzpyZWYpP3xwaW52b2tlaW1wbHxwcml2YXRlfHByaXZhdGVzY29wZXxwdWJsaWN8cmVxc2Vjb2JqfHJ0c3BlY2lhbG5hbWV8cnVudGltZXxzZWFsZWR8c2VxdWVudGlhbHxzZXJpYWxpemFibGV8c3BlY2lhbG5hbWV8c3RhdGljfHN0cmluZ3xzdHJ1Y3R8c3lzY2hhcnx0YnN0cnx1bmljb2RlfHVubWFuYWdlZGV4cHx1bnNpZ25lZHx2YWx1ZSg/OnR5cGUpP3x2YXJpYW50fHZpcnR1YWx8dm9pZClcXGIvLFxuXG5cdCdmdW5jdGlvbic6IC9cXGIoPzooPzpjb25zdHJhaW5lZHxub3xyZWFkb25seXx0YWlsfHVuYWxpZ25lZHx2b2xhdGlsZSlcXC4pPyg/OmNvbnZcXC4oPzpbaXVdWzEyNDhdP3xvdmZcXC5baXVdWzEyNDhdPyg/OlxcLnVuKT98clxcLnVufHI0fHI4KXxsZGNcXC4oPzppNCg/OlxcLlxcZCt8XFwuW21NXTF8XFwucyk/fGk4fHI0fHI4KXxsZGVsZW0oPzpcXC5baXVdWzEyNDhdP3xcXC5yWzQ4XXxcXC5yZWZ8YSk/fGxkaW5kXFwuKD86W2l1XVsxMjQ4XT98cls0OF18cmVmKXxzdGVsZW1cXC4/KD86aVsxMjQ4XT98cls0OF18cmVmKT98c3RpbmRcXC4oPzppWzEyNDhdP3xyWzQ4XXxyZWYpP3xlbmQoPzpmYXVsdHxmaWx0ZXJ8ZmluYWxseSl8bGRhcmcoPzpcXC5bMC0zc118YSg/OlxcLnMpPyk/fGxkbG9jKD86XFwuXFxkK3xcXC5zKT98c3ViKD86XFwub3ZmKD86XFwudW4pPyk/fG11bCg/OlxcLm92Zig/OlxcLnVuKT8pP3xhZGQoPzpcXC5vdmYoPzpcXC51bik/KT98c3Rsb2MoPzpcXC5bMC0zc10pP3xyZWZhbnkoPzp0eXBlfHZhbCl8Ymx0KD86XFwudW4pPyg/OlxcLnMpP3xibGUoPzpcXC51bik/KD86XFwucyk/fGJndCg/OlxcLnVuKT8oPzpcXC5zKT98YmdlKD86XFwudW4pPyg/OlxcLnMpP3x1bmJveCg/OlxcLmFueSk/fGluaXQoPzpibGt8b2JqKXxjYWxsKD86aXx2aXJ0KT98YnJmYWxzZSg/OlxcLnMpP3xibmVcXC51big/OlxcLnMpP3xsZGxvY2EoPzpcXC5zKT98YnJ6ZXJvKD86XFwucyk/fGJydHJ1ZSg/OlxcLnMpP3xicm51bGwoPzpcXC5zKT98YnJpbnN0KD86XFwucyk/fHN0YXJnKD86XFwucyk/fGxlYXZlKD86XFwucyk/fHNocig/OlxcLnVuKT98cmVtKD86XFwudW4pP3xkaXYoPzpcXC51bik/fGNsdCg/OlxcLnVuKT98YWxpZ25tZW50fGNhc3RjbGFzc3xsZHZpcnRmdG58YmVxKD86XFwucyk/fGNrZmluaXRlfGxkc2ZsZGF8bGR0b2tlbnxsb2NhbGxvY3xta3JlZmFueXxyZXRocm93fGNndFxcLnVufGFyZ2xpc3R8c3dpdGNofHN0c2ZsZHxzaXplb2Z8bmV3b2JqfG5ld2FycnxsZHNmbGR8bGRudWxsfGxkZmxkYXxpc2luc3R8dGhyb3d8c3RvYmp8c3RmbGR8bGRzdHJ8bGRvYmp8bGRsZW58bGRmdG58bGRmbGR8Y3BvYmp8Y3BibGt8YnJlYWt8YnJcXC5zfHhvcnxzaGx8cmV0fHBvcHxub3R8bm9wfG5lZ3xqbXB8ZHVwfGNndHxjZXF8Ym94fGFuZHxvcnxicilcXGIvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGItPyg/OjB4WzAtOWEtZl0rfFxcZCspKD86XFwuWzAtOWEtZl0rKT9cXGIvaSxcblxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSw6PV18SUxfWzAtOUEtWmEtel0rL1xufTtcblxuLy8gQ29waWVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2plbHVhcmQvcHJpc20tY2xvanVyZVxuUHJpc20ubGFuZ3VhZ2VzLmNsb2p1cmUgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC87LiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2hhcic6IC9cXFxcXFx3Ky8sXG5cdCdzeW1ib2wnOiB7XG5cdFx0cGF0dGVybjogLyhefFtcXHMoKVxcW1xcXXt9LF0pOjo/W1xcdyorIT8nPD49Ly4tXSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyhcXCgpKD86LXwtPnwtPj58XFwufFxcLlxcLnxcXCp8XFwvfFxcK3w8fDw9fD18PT18Pnw+PXxhY2Nlc3NvcnxhZ2VudHxhZ2VudC1lcnJvcnN8YWdldHxhbGVuZ3RofGFsbC1uc3xhbHRlcnxhbmR8YXBwZW5kLWNoaWxkfGFwcGx5fGFycmF5LW1hcHxhc2V0fGFzZXQtYm9vbGVhbnxhc2V0LWJ5dGV8YXNldC1jaGFyfGFzZXQtZG91YmxlfGFzZXQtZmxvYXR8YXNldC1pbnR8YXNldC1sb25nfGFzZXQtc2hvcnR8YXNzZXJ0fGFzc29jfGF3YWl0fGF3YWl0LWZvcnxiZWFufGJpbmRpbmd8Yml0LWFuZHxiaXQtbm90fGJpdC1vcnxiaXQtc2hpZnQtbGVmdHxiaXQtc2hpZnQtcmlnaHR8Yml0LXhvcnxib29sZWFufGJyYW5jaFxcP3xidXRsYXN0fGJ5dGV8Y2FzdHxjaGFyfGNoaWxkcmVufGNsYXNzfGNsZWFyLWFnZW50LWVycm9yc3xjb21tZW50fGNvbW11dGV8Y29tcHxjb21wYXJhdG9yfGNvbXBsZW1lbnR8Y29uY2F0fGNvbmR8Y29uanxjb25zfGNvbnN0YW50bHl8Y29uc3RydWN0LXByb3h5fGNvbnRhaW5zXFw/fGNvdW50fGNyZWF0ZS1uc3xjcmVhdGUtc3RydWN0fGN5Y2xlfGRlY3xkZWNsYXJlfGRlZnxkZWYtfGRlZmlubGluZXxkZWZpbnRlcmZhY2V8ZGVmbWFjcm98ZGVmbWV0aG9kfGRlZm11bHRpfGRlZm58ZGVmbi18ZGVmb25jZXxkZWZwcm9qZWN0fGRlZnByb3RvY29sfGRlZnJlY29yZHxkZWZzdHJ1Y3R8ZGVmdHlwZXxkZXJlZnxkaWZmZXJlbmNlfGRpc2p8ZGlzc29jfGRpc3RpbmN0fGRvfGRvYWxsfGRvY3xkb3J1bnxkb3NlcXxkb3N5bmN8ZG90aW1lc3xkb3RvfGRvdWJsZXxkb3dufGRyb3B8ZHJvcC13aGlsZXxlZGl0fGVuZFxcP3xlbnN1cmV8ZXZhbHxldmVyeVxcP3xmYWxzZVxcP3xmZmlyc3R8ZmlsZS1zZXF8ZmlsdGVyfGZpbmR8ZmluZC1kb2N8ZmluZC1uc3xmaW5kLXZhcnxmaXJzdHxmbG9hdHxmbHVzaHxmbnxmbnNlcXxmb3J8ZnJlc3R8Z2Vuc3ltfGdldHxnZXQtcHJveHktY2xhc3N8aGFzaC1tYXB8aGFzaC1zZXR8aWRlbnRpY2FsXFw/fGlkZW50aXR5fGlmfGlmLWxldHxpZi1ub3R8aW1wb3J0fGluLW5zfGluY3xpbmRleHxpbnNlcnQtY2hpbGR8aW5zZXJ0LWxlZnR8aW5zZXJ0LXJpZ2h0fGluc3BlY3QtdGFibGV8aW5zcGVjdC10cmVlfGluc3RhbmNlXFw/fGludHxpbnRlcmxlYXZlfGludGVyc2VjdGlvbnxpbnRvfGludG8tYXJyYXl8aXRlcmF0ZXxqb2lufGtleXxrZXlzfGtleXdvcmR8a2V5d29yZFxcP3xsYXN0fGxhenktY2F0fGxhenktY29uc3xsZWZ0fGxlZnRzfGxldHxsaW5lLXNlcXxsaXN0fGxpc3RcXCp8bG9hZHxsb2FkLWZpbGV8bG9ja2luZ3xsb25nfGxvb3B8bWFjcm9leHBhbmR8bWFjcm9leHBhbmQtMXxtYWtlLWFycmF5fG1ha2Utbm9kZXxtYXB8bWFwLWludmVydHxtYXBcXD98bWFwY2F0fG1heHxtYXgta2V5fG1lbWZufG1lcmdlfG1lcmdlLXdpdGh8bWV0YXxtaW58bWluLWtleXxtb25pdG9yLWVudGVyfG5hbWV8bmFtZXNwYWNlfG5lZ1xcP3xuZXd8bmV3bGluZXxuZXh0fG5pbFxcP3xub2RlfG5vdHxub3QtYW55XFw/fG5vdC1ldmVyeVxcP3xub3Q9fG5zfG5zLWltcG9ydHN8bnMtaW50ZXJuc3xucy1tYXB8bnMtbmFtZXxucy1wdWJsaWNzfG5zLXJlZmVyc3xucy1yZXNvbHZlfG5zLXVubWFwfG50aHxudGhyZXN0fG9yfHBhcnNlfHBhcnRpYWx8cGF0aHxwZWVrfHBvcHxwb3NcXD98cHJ8cHItc3RyfHByaW50fHByaW50LXN0cnxwcmludGxufHByaW50bG4tc3RyfHBybnxwcm4tc3RyfHByb2plY3R8cHJveHl8cHJveHktbWFwcGluZ3N8cXVvdHxxdW90ZXxyYW5kfHJhbmQtaW50fHJhbmdlfHJlLWZpbmR8cmUtZ3JvdXBzfHJlLW1hdGNoZXJ8cmUtbWF0Y2hlc3xyZS1wYXR0ZXJufHJlLXNlcXxyZWFkfHJlYWQtbGluZXxyZWN1cnxyZWR1Y2V8cmVmfHJlZi1zZXR8cmVmZXJ8cmVtfHJlbW92ZXxyZW1vdmUtbWV0aG9kfHJlbW92ZS1uc3xyZW5hbWV8cmVuYW1lLWtleXN8cmVwZWF0fHJlcGxhY2V8cmVwbGljYXRlfHJlc29sdmV8cmVzdHxyZXN1bHRzZXQtc2VxfHJldmVyc2V8cmZpcnN0fHJpZ2h0fHJpZ2h0c3xyb290fHJyZXN0fHJzZXF8c2Vjb25kfHNlbGVjdHxzZWxlY3Qta2V5c3xzZW5kfHNlbmQtb2ZmfHNlcXxzZXEtemlwfHNlcVxcP3xzZXR8c2V0IXxzaG9ydHxzbHVycHxzb21lfHNvcnR8c29ydC1ieXxzb3J0ZWQtbWFwfHNvcnRlZC1tYXAtYnl8c29ydGVkLXNldHxzcGVjaWFsLXN5bWJvbFxcP3xzcGxpdC1hdHxzcGxpdC13aXRofHN0cnxzdHJpbmdcXD98c3RydWN0fHN0cnVjdC1tYXB8c3Vic3xzdWJ2ZWN8c3ltYm9sfHN5bWJvbFxcP3xzeW5jfHRha2V8dGFrZS1udGh8dGFrZS13aGlsZXx0ZXN0fHRocm93fHRpbWV8dG8tYXJyYXl8dG8tYXJyYXktMmR8dHJlZS1zZXF8dHJ1ZVxcP3x0cnl8dW5pb258dXB8dXBkYXRlLXByb3h5fHZhbHx2YWxzfHZhcnx2YXItZ2V0fHZhci1zZXR8dmFyXFw/fHZlY3Rvcnx2ZWN0b3ItemlwfHZlY3RvclxcP3x3aGVufHdoZW4tZmlyc3R8d2hlbi1sZXR8d2hlbi1ub3R8d2l0aC1sb2NhbC12YXJzfHdpdGgtbWV0YXx3aXRoLW9wZW58d2l0aC1vdXQtc3RyfHhtbC1zZXF8eG1sLXppcHx6ZXJvXFw/fHppcG1hcHx6aXBwZXIpKD89W1xccyldfCQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3JEBdKSg/OlxcZCsoPzpbLy5dXFxkKyk/KD86ZVsrLV0/XFxkKyk/fDB4W2EtZjAtOV0rfFsxLTldXFxkP3JbYS16MC05XSspW2xtbl0/KD8hW1xcdyRAXSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W14nXSlcXCgpW1xcdyorIT8nPD49Ly4tXSsoPz1bXFxzKV18JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1sjQF5gfl0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9XFxbXFxdKCksXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5jbWFrZSA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIl18XFxcXC4pKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcJFxceyg/Oltee30kXXxcXCRcXHtbXnt9JF0qXFx9KSpcXH0vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwkXFx7fFxcfS8sXG5cdFx0XHRcdFx0J3ZhcmlhYmxlJzogL1xcdysvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXGIoPzpDTUFLRV9cXHcrfFxcdytfKD86KD86QklOQVJZfFNPVVJDRSlfRElSfERFU0NSSVBUSU9OfEhPTUVQQUdFX1VSTHxST09UfFZFUlNJT04oPzpfTUFKT1J8X01JTk9SfF9QQVRDSHxfVFdFQUspPyl8KD86QU5EUk9JRHxBUFBMRXxCT1JMQU5EfEJVSUxEX1NIQVJFRF9MSUJTfENBQ0hFfENQQUNLXyg/OkFCU09MVVRFX0RFU1RJTkFUSU9OX0ZJTEVTfENPTVBPTkVOVF9JTkNMVURFX1RPUExFVkVMX0RJUkVDVE9SWXxFUlJPUl9PTl9BQlNPTFVURV9JTlNUQUxMX0RFU1RJTkFUSU9OfElOQ0xVREVfVE9QTEVWRUxfRElSRUNUT1JZfElOU1RBTExfREVGQVVMVF9ESVJFQ1RPUllfUEVSTUlTU0lPTlN8SU5TVEFMTF9TQ1JJUFR8UEFDS0FHSU5HX0lOU1RBTExfUFJFRklYfFNFVF9ERVNURElSfFdBUk5fT05fQUJTT0xVVEVfSU5TVEFMTF9ERVNUSU5BVElPTil8Q1RFU1RfKD86QklOQVJZX0RJUkVDVE9SWXxCVUlMRF9DT01NQU5EfEJVSUxEX05BTUV8QlpSX0NPTU1BTkR8QlpSX1VQREFURV9PUFRJT05TfENIQU5HRV9JRHxDSEVDS09VVF9DT01NQU5EfENPTkZJR1VSQVRJT05fVFlQRXxDT05GSUdVUkVfQ09NTUFORHxDT1ZFUkFHRV9DT01NQU5EfENPVkVSQUdFX0VYVFJBX0ZMQUdTfENVUkxfT1BUSU9OU3xDVVNUT01fKD86Q09WRVJBR0VfRVhDTFVERXxFUlJPUl9FWENFUFRJT058RVJST1JfTUFUQ0h8RVJST1JfUE9TVF9DT05URVhUfEVSUk9SX1BSRV9DT05URVhUfE1BWElNVU1fRkFJTEVEX1RFU1RfT1VUUFVUX1NJWkV8TUFYSU1VTV9OVU1CRVJfT0ZfKD86RVJST1JTfFdBUk5JTkdTKXxNQVhJTVVNX1BBU1NFRF9URVNUX09VVFBVVF9TSVpFfE1FTUNIRUNLX0lHTk9SRXxQT1NUX01FTUNIRUNLfFBPU1RfVEVTVHxQUkVfTUVNQ0hFQ0t8UFJFX1RFU1R8VEVTVFNfSUdOT1JFfFdBUk5JTkdfRVhDRVBUSU9OfFdBUk5JTkdfTUFUQ0gpfENWU19DSEVDS09VVHxDVlNfQ09NTUFORHxDVlNfVVBEQVRFX09QVElPTlN8RFJPUF9MT0NBVElPTnxEUk9QX01FVEhPRHxEUk9QX1NJVEV8RFJPUF9TSVRFX0NEQVNIfERST1BfU0lURV9QQVNTV09SRHxEUk9QX1NJVEVfVVNFUnxFWFRSQV9DT1ZFUkFHRV9HTE9CfEdJVF9DT01NQU5EfEdJVF9JTklUX1NVQk1PRFVMRVN8R0lUX1VQREFURV9DVVNUT018R0lUX1VQREFURV9PUFRJT05TfEhHX0NPTU1BTkR8SEdfVVBEQVRFX09QVElPTlN8TEFCRUxTX0ZPUl9TVUJQUk9KRUNUU3xNRU1PUllDSEVDS18oPzpDT01NQU5EfENPTU1BTkRfT1BUSU9OU3xTQU5JVElaRVJfT1BUSU9OU3xTVVBQUkVTU0lPTlNfRklMRXxUWVBFKXxOSUdIVExZX1NUQVJUX1RJTUV8UDRfQ0xJRU5UfFA0X0NPTU1BTkR8UDRfT1BUSU9OU3xQNF9VUERBVEVfT1BUSU9OU3xSVU5fQ1VSUkVOVF9TQ1JJUFR8U0NQX0NPTU1BTkR8U0lURXxTT1VSQ0VfRElSRUNUT1JZfFNVQk1JVF9VUkx8U1ZOX0NPTU1BTkR8U1ZOX09QVElPTlN8U1ZOX1VQREFURV9PUFRJT05TfFRFU1RfTE9BRHxURVNUX1RJTUVPVVR8VFJJR0dFUl9TSVRFfFVQREFURV9DT01NQU5EfFVQREFURV9PUFRJT05TfFVQREFURV9WRVJTSU9OX09OTFl8VVNFX0xBVU5DSEVSUyl8Q1lHV0lOfEVOVnxFWEVDVVRBQkxFX09VVFBVVF9QQVRIfEdIUy1NVUxUSXxJT1N8TElCUkFSWV9PVVRQVVRfUEFUSHxNSU5HV3xNU1ZDKD86MTB8MTF8MTJ8MTR8NjB8NzB8NzF8ODB8OTB8X0lERXxfVE9PTFNFVF9WRVJTSU9OfF9WRVJTSU9OKT98TVNZU3xQUk9KRUNUX05BTUV8VU5JWHxXSU4zMnxXSU5DRXxXSU5ET1dTX1BIT05FfFdJTkRPV1NfU1RPUkV8WENPREUpKVxcYi8sXG5cdCdwcm9wZXJ0eSc6IC9cXGIoPzpjeHhfXFx3K3woPzpBUkNISVZFX09VVFBVVF8oPzpESVJFQ1RPUll8TkFNRSl8Q09NUElMRV9ERUZJTklUSU9OU3xDT01QSUxFX1BEQl9OQU1FfENPTVBJTEVfUERCX09VVFBVVF9ESVJFQ1RPUll8RVhDTFVERV9GUk9NX0RFRkFVTFRfQlVJTER8SU1QT1JURURfKD86SU1QTElCfExJQk5BTUV8TElOS19ERVBFTkRFTlRfTElCUkFSSUVTfExJTktfSU5URVJGQUNFX0xBTkdVQUdFU3xMSU5LX0lOVEVSRkFDRV9MSUJSQVJJRVN8TElOS19JTlRFUkZBQ0VfTVVMVElQTElDSVRZfExPQ0FUSU9OfE5PX1NPTkFNRXxPQkpFQ1RTfFNPTkFNRSl8SU5URVJQUk9DRURVUkFMX09QVElNSVpBVElPTnxMSUJSQVJZX09VVFBVVF9ESVJFQ1RPUll8TElCUkFSWV9PVVRQVVRfTkFNRXxMSU5LX0ZMQUdTfExJTktfSU5URVJGQUNFX0xJQlJBUklFU3xMSU5LX0lOVEVSRkFDRV9NVUxUSVBMSUNJVFl8TE9DQVRJT058TUFQX0lNUE9SVEVEX0NPTkZJR3xPU1hfQVJDSElURUNUVVJFU3xPVVRQVVRfTkFNRXxQREJfTkFNRXxQREJfT1VUUFVUX0RJUkVDVE9SWXxSVU5USU1FX09VVFBVVF9ESVJFQ1RPUll8UlVOVElNRV9PVVRQVVRfTkFNRXxTVEFUSUNfTElCUkFSWV9GTEFHU3xWU19DU0hBUlB8VlNfRE9UTkVUX1JFRkVSRU5DRVBST1B8VlNfRE9UTkVUX1JFRkVSRU5DRXxWU19HTE9CQUxfU0VDVElPTl9QT1NUfFZTX0dMT0JBTF9TRUNUSU9OX1BSRXxWU19HTE9CQUx8WENPREVfQVRUUklCVVRFKV9cXHcrfFxcdytfKD86Q0xBTkdfVElEWXxDT01QSUxFUl9MQVVOQ0hFUnxDUFBDSEVDS3xDUFBMSU5UfElOQ0xVREVfV0hBVF9ZT1VfVVNFfE9VVFBVVF9OQU1FfFBPU1RGSVh8VklTSUJJTElUWV9QUkVTRVQpfEFCU1RSQUNUfEFERElUSU9OQUxfTUFLRV9DTEVBTl9GSUxFU3xBRFZBTkNFRHxBTElBU0VEX1RBUkdFVHxBTExPV19EVVBMSUNBVEVfQ1VTVE9NX1RBUkdFVFN8QU5EUk9JRF8oPzpBTlRfQURESVRJT05BTF9PUFRJT05TfEFQSXxBUElfTUlOfEFSQ0h8QVNTRVRTX0RJUkVDVE9SSUVTfEdVSXxKQVJfREVQRU5ERU5DSUVTfE5BVElWRV9MSUJfREVQRU5ERU5DSUVTfE5BVElWRV9MSUJfRElSRUNUT1JJRVN8UFJPQ0VTU19NQVh8UFJPR1VBUkR8UFJPR1VBUkRfQ09ORklHX1BBVEh8U0VDVVJFX1BST1BTX1BBVEh8U0tJUF9BTlRfU1RFUHxTVExfVFlQRSl8QVJDSElWRV9PVVRQVVRfRElSRUNUT1JZfEFUVEFDSEVEX0ZJTEVTfEFUVEFDSEVEX0ZJTEVTX09OX0ZBSUx8QVVUT0dFTl8oPzpCVUlMRF9ESVJ8T1JJR0lOX0RFUEVORFN8UEFSQUxMRUx8U09VUkNFX0dST1VQfFRBUkdFVFNfRk9MREVSfFRBUkdFVF9ERVBFTkRTKXxBVVRPTU9DfEFVVE9NT0NfKD86Q09NUElMRVJfUFJFREVGSU5FU3xERVBFTkRfRklMVEVSU3xFWEVDVVRBQkxFfE1BQ1JPX05BTUVTfE1PQ19PUFRJT05TfFNPVVJDRV9HUk9VUHxUQVJHRVRTX0ZPTERFUil8QVVUT1JDQ3xBVVRPUkNDX0VYRUNVVEFCTEV8QVVUT1JDQ19PUFRJT05TfEFVVE9SQ0NfU09VUkNFX0dST1VQfEFVVE9VSUN8QVVUT1VJQ19FWEVDVVRBQkxFfEFVVE9VSUNfT1BUSU9OU3xBVVRPVUlDX1NFQVJDSF9QQVRIU3xCSU5BUllfRElSfEJVSUxEU1lTVEVNX1RBUkdFVFN8QlVJTERfUlBBVEh8QlVJTERfUlBBVEhfVVNFX09SSUdJTnxCVUlMRF9XSVRIX0lOU1RBTExfTkFNRV9ESVJ8QlVJTERfV0lUSF9JTlNUQUxMX1JQQVRIfEJVTkRMRXxCVU5ETEVfRVhURU5TSU9OfENBQ0hFX1ZBUklBQkxFU3xDTEVBTl9OT19DVVNUT018Q09NTU9OX0xBTkdVQUdFX1JVTlRJTUV8Q09NUEFUSUJMRV9JTlRFUkZBQ0VfKD86Qk9PTHxOVU1CRVJfTUFYfE5VTUJFUl9NSU58U1RSSU5HKXxDT01QSUxFXyg/OkRFRklOSVRJT05TfEZFQVRVUkVTfEZMQUdTfE9QVElPTlN8UERCX05BTUV8UERCX09VVFBVVF9ESVJFQ1RPUlkpfENPU1R8Q1BBQ0tfREVTS1RPUF9TSE9SVENVVFN8Q1BBQ0tfTkVWRVJfT1ZFUldSSVRFfENQQUNLX1BFUk1BTkVOVHxDUEFDS19TVEFSVFVQX1NIT1JUQ1VUU3xDUEFDS19TVEFSVF9NRU5VX1NIT1JUQ1VUU3xDUEFDS19XSVhfQUNMfENST1NTQ09NUElMSU5HX0VNVUxBVE9SfENVREFfRVhURU5TSU9OU3xDVURBX1BUWF9DT01QSUxBVElPTnxDVURBX1JFU09MVkVfREVWSUNFX1NZTUJPTFN8Q1VEQV9TRVBBUkFCTEVfQ09NUElMQVRJT058Q1VEQV9TVEFOREFSRHxDVURBX1NUQU5EQVJEX1JFUVVJUkVEfENYWF9FWFRFTlNJT05TfENYWF9TVEFOREFSRHxDWFhfU1RBTkRBUkRfUkVRVUlSRUR8Q19FWFRFTlNJT05TfENfU1RBTkRBUkR8Q19TVEFOREFSRF9SRVFVSVJFRHxERUJVR19DT05GSUdVUkFUSU9OU3xERUZJTkVfU1lNQk9MfERFRklOSVRJT05TfERFUEVORFN8REVQTE9ZTUVOVF9BRERJVElPTkFMX0ZJTEVTfERFUExPWU1FTlRfUkVNT1RFX0RJUkVDVE9SWXxESVNBQkxFRHxESVNBQkxFRF9GRUFUVVJFU3xFQ0xJUFNFX0VYVFJBX0NQUk9KRUNUX0NPTlRFTlRTfEVDTElQU0VfRVhUUkFfTkFUVVJFU3xFTkFCTEVEX0ZFQVRVUkVTfEVOQUJMRURfTEFOR1VBR0VTfEVOQUJMRV9FWFBPUlRTfEVOVklST05NRU5UfEVYQ0xVREVfRlJPTV9BTEx8RVhDTFVERV9GUk9NX0RFRkFVTFRfQlVJTER8RVhQT1JUX05BTUV8RVhQT1JUX1BST1BFUlRJRVN8RVhURVJOQUxfT0JKRUNUfEVjaG9TdHJpbmd8RkFJTF9SRUdVTEFSX0VYUFJFU1NJT058RklORF9MSUJSQVJZX1VTRV9MSUIzMl9QQVRIU3xGSU5EX0xJQlJBUllfVVNFX0xJQjY0X1BBVEhTfEZJTkRfTElCUkFSWV9VU0VfTElCWDMyX1BBVEhTfEZJTkRfTElCUkFSWV9VU0VfT1BFTkJTRF9WRVJTSU9OSU5HfEZJWFRVUkVTX0NMRUFOVVB8RklYVFVSRVNfUkVRVUlSRUR8RklYVFVSRVNfU0VUVVB8Rk9MREVSfEZSQU1FV09SS3xGb3J0cmFuX0ZPUk1BVHxGb3J0cmFuX01PRFVMRV9ESVJFQ1RPUll8R0VORVJBVEVEfEdFTkVSQVRPUl9GSUxFX05BTUV8R0VORVJBVE9SX0lTX01VTFRJX0NPTkZJR3xHSFNfSU5URUdSSVRZX0FQUHxHSFNfTk9fU09VUkNFX0dST1VQX0ZJTEV8R0xPQkFMX0RFUEVORFNfREVCVUdfTU9ERXxHTE9CQUxfREVQRU5EU19OT19DWUNMRVN8R05VdG9NU3xIQVNfQ1hYfEhFQURFUl9GSUxFX09OTFl8SEVMUFNUUklOR3xJTVBMSUNJVF9ERVBFTkRTX0lOQ0xVREVfVFJBTlNGT1JNfElNUE9SVEVEfElNUE9SVEVEXyg/OkNPTU1PTl9MQU5HVUFHRV9SVU5USU1FfENPTkZJR1VSQVRJT05TfEdMT0JBTHxJTVBMSUJ8TElCTkFNRXxMSU5LX0RFUEVOREVOVF9MSUJSQVJJRVN8TElOS19JTlRFUkZBQ0VfKD86TEFOR1VBR0VTfExJQlJBUklFU3xNVUxUSVBMSUNJVFkpfExPQ0FUSU9OfE5PX1NPTkFNRXxPQkpFQ1RTfFNPTkFNRSl8SU1QT1JUX1BSRUZJWHxJTVBPUlRfU1VGRklYfElOQ0xVREVfRElSRUNUT1JJRVN8SU5DTFVERV9SRUdVTEFSX0VYUFJFU1NJT058SU5TVEFMTF9OQU1FX0RJUnxJTlNUQUxMX1JQQVRIfElOU1RBTExfUlBBVEhfVVNFX0xJTktfUEFUSHxJTlRFUkZBQ0VfKD86QVVUT1VJQ19PUFRJT05TfENPTVBJTEVfREVGSU5JVElPTlN8Q09NUElMRV9GRUFUVVJFU3xDT01QSUxFX09QVElPTlN8SU5DTFVERV9ESVJFQ1RPUklFU3xMSU5LX0RFUEVORFN8TElOS19ESVJFQ1RPUklFU3xMSU5LX0xJQlJBUklFU3xMSU5LX09QVElPTlN8UE9TSVRJT05fSU5ERVBFTkRFTlRfQ09ERXxTT1VSQ0VTfFNZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTKXxJTlRFUlBST0NFRFVSQUxfT1BUSU1JWkFUSU9OfElOX1RSWV9DT01QSUxFfElPU19JTlNUQUxMX0NPTUJJTkVEfEpPQl9QT09MU3xKT0JfUE9PTF9DT01QSUxFfEpPQl9QT09MX0xJTkt8S0VFUF9FWFRFTlNJT058TEFCRUxTfExBTkdVQUdFfExJQlJBUllfT1VUUFVUX0RJUkVDVE9SWXxMSU5LRVJfTEFOR1VBR0V8TElOS18oPzpERVBFTkRTfERFUEVORFNfTk9fU0hBUkVEfERJUkVDVE9SSUVTfEZMQUdTfElOVEVSRkFDRV9MSUJSQVJJRVN8SU5URVJGQUNFX01VTFRJUExJQ0lUWXxMSUJSQVJJRVN8T1BUSU9OU3xTRUFSQ0hfRU5EX1NUQVRJQ3xTRUFSQ0hfU1RBUlRfU1RBVElDfFdIQVRfWU9VX1VTRSl8TElTVEZJTEVfU1RBQ0t8TE9DQVRJT058TUFDT1NYX0JVTkRMRXxNQUNPU1hfQlVORExFX0lORk9fUExJU1R8TUFDT1NYX0ZSQU1FV09SS19JTkZPX1BMSVNUfE1BQ09TWF9QQUNLQUdFX0xPQ0FUSU9OfE1BQ09TWF9SUEFUSHxNQUNST1N8TUFOVUFMTFlfQURERURfREVQRU5ERU5DSUVTfE1FQVNVUkVNRU5UfE1PRElGSUVEfE5BTUV8Tk9fU09OQU1FfE5PX1NZU1RFTV9GUk9NX0lNUE9SVEVEfE9CSkVDVF9ERVBFTkRTfE9CSkVDVF9PVVRQVVRTfE9TWF9BUkNISVRFQ1RVUkVTfE9VVFBVVF9OQU1FfFBBQ0tBR0VTX0ZPVU5EfFBBQ0tBR0VTX05PVF9GT1VORHxQQVJFTlRfRElSRUNUT1JZfFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OfFBEQl9OQU1FfFBEQl9PVVRQVVRfRElSRUNUT1JZfFBPU0lUSU9OX0lOREVQRU5ERU5UX0NPREV8UE9TVF9JTlNUQUxMX1NDUklQVHxQUkVERUZJTkVEX1RBUkdFVFNfRk9MREVSfFBSRUZJWHxQUkVfSU5TVEFMTF9TQ1JJUFR8UFJJVkFURV9IRUFERVJ8UFJPQ0VTU09SU3xQUk9DRVNTT1JfQUZGSU5JVFl8UFJPSkVDVF9MQUJFTHxQVUJMSUNfSEVBREVSfFJFUE9SVF9VTkRFRklORURfUFJPUEVSVElFU3xSRVFVSVJFRF9GSUxFU3xSRVNPVVJDRXxSRVNPVVJDRV9MT0NLfFJVTEVfTEFVTkNIX0NPTVBJTEV8UlVMRV9MQVVOQ0hfQ1VTVE9NfFJVTEVfTEFVTkNIX0xJTkt8UlVMRV9NRVNTQUdFU3xSVU5USU1FX09VVFBVVF9ESVJFQ1RPUll8UlVOX1NFUklBTHxTS0lQX0FVVE9HRU58U0tJUF9BVVRPTU9DfFNLSVBfQVVUT1JDQ3xTS0lQX0FVVE9VSUN8U0tJUF9CVUlMRF9SUEFUSHxTS0lQX1JFVFVSTl9DT0RFfFNPVVJDRVN8U09VUkNFX0RJUnxTT1ZFUlNJT058U1RBVElDX0xJQlJBUllfRkxBR1N8U1RBVElDX0xJQlJBUllfT1BUSU9OU3xTVFJJTkdTfFNVQkRJUkVDVE9SSUVTfFNVRkZJWHxTWU1CT0xJQ3xUQVJHRVRfQVJDSElWRVNfTUFZX0JFX1NIQVJFRF9MSUJTfFRBUkdFVF9NRVNTQUdFU3xUQVJHRVRfU1VQUE9SVFNfU0hBUkVEX0xJQlN8VEVTVFN8VEVTVF9JTkNMVURFX0ZJTEV8VEVTVF9JTkNMVURFX0ZJTEVTfFRJTUVPVVR8VElNRU9VVF9BRlRFUl9NQVRDSHxUWVBFfFVTRV9GT0xERVJTfFZBTFVFfFZBUklBQkxFU3xWRVJTSU9OfFZJU0lCSUxJVFlfSU5MSU5FU19ISURERU58VlNfKD86Q09ORklHVVJBVElPTl9UWVBFfENPUFlfVE9fT1VUX0RJUnxERUJVR0dFUl8oPzpDT01NQU5EfENPTU1BTkRfQVJHVU1FTlRTfEVOVklST05NRU5UfFdPUktJTkdfRElSRUNUT1JZKXxERVBMT1lNRU5UX0NPTlRFTlR8REVQTE9ZTUVOVF9MT0NBVElPTnxET1RORVRfUkVGRVJFTkNFU3xET1RORVRfUkVGRVJFTkNFU19DT1BZX0xPQ0FMfElOQ0xVREVfSU5fVlNJWHxJT1RfU1RBUlRVUF9UQVNLfEtFWVdPUkR8UkVTT1VSQ0VfR0VORVJBVE9SfFNDQ19BVVhQQVRIfFNDQ19MT0NBTFBBVEh8U0NDX1BST0pFQ1ROQU1FfFNDQ19QUk9WSURFUnxTREtfUkVGRVJFTkNFU3xTSEFERVJfKD86RElTQUJMRV9PUFRJTUlaQVRJT05TfEVOQUJMRV9ERUJVR3xFTlRSWVBPSU5UfEZMQUdTfE1PREVMfE9CSkVDVF9GSUxFX05BTUV8T1VUUFVUX0hFQURFUl9GSUxFfFRZUEV8VkFSSUFCTEVfTkFNRSl8U1RBUlRVUF9QUk9KRUNUfFRPT0xfT1ZFUlJJREV8VVNFUl9QUk9QU3xXSU5SVF9DT01QT05FTlR8V0lOUlRfRVhURU5TSU9OU3xXSU5SVF9SRUZFUkVOQ0VTfFhBTUxfVFlQRSl8V0lMTF9GQUlMfFdJTjMyX0VYRUNVVEFCTEV8V0lORE9XU19FWFBPUlRfQUxMX1NZTUJPTFN8V09SS0lOR19ESVJFQ1RPUll8V1JBUF9FWENMVURFfFhDT0RFXyg/OkVNSVRfRUZGRUNUSVZFX1BMQVRGT1JNX05BTUV8RVhQTElDSVRfRklMRV9UWVBFfEZJTEVfQVRUUklCVVRFU3xMQVNUX0tOT1dOX0ZJTEVfVFlQRXxQUk9EVUNUX1RZUEV8U0NIRU1FXyg/OkFERFJFU1NfU0FOSVRJWkVSfEFERFJFU1NfU0FOSVRJWkVSX1VTRV9BRlRFUl9SRVRVUk58QVJHVU1FTlRTfERJU0FCTEVfTUFJTl9USFJFQURfQ0hFQ0tFUnxEWU5BTUlDX0xJQlJBUllfTE9BRFN8RFlOQU1JQ19MSU5LRVJfQVBJX1VTQUdFfEVOVklST05NRU5UfEVYRUNVVEFCTEV8R1VBUkRfTUFMTE9DfE1BSU5fVEhSRUFEX0NIRUNLRVJfU1RPUHxNQUxMT0NfR1VBUkRfRURHRVN8TUFMTE9DX1NDUklCQkxFfE1BTExPQ19TVEFDS3xUSFJFQURfU0FOSVRJWkVSKD86X1NUT1ApP3xVTkRFRklORURfQkVIQVZJT1VSX1NBTklUSVpFUig/Ol9TVE9QKT98Wk9NQklFX09CSkVDVFMpKXxYQ1RFU1QpXFxiLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWRkX2NvbXBpbGVfZGVmaW5pdGlvbnN8YWRkX2NvbXBpbGVfb3B0aW9uc3xhZGRfY3VzdG9tX2NvbW1hbmR8YWRkX2N1c3RvbV90YXJnZXR8YWRkX2RlZmluaXRpb25zfGFkZF9kZXBlbmRlbmNpZXN8YWRkX2V4ZWN1dGFibGV8YWRkX2xpYnJhcnl8YWRkX2xpbmtfb3B0aW9uc3xhZGRfc3ViZGlyZWN0b3J5fGFkZF90ZXN0fGF1eF9zb3VyY2VfZGlyZWN0b3J5fGJyZWFrfGJ1aWxkX2NvbW1hbmR8YnVpbGRfbmFtZXxjbWFrZV9ob3N0X3N5c3RlbV9pbmZvcm1hdGlvbnxjbWFrZV9taW5pbXVtX3JlcXVpcmVkfGNtYWtlX3BhcnNlX2FyZ3VtZW50c3xjbWFrZV9wb2xpY3l8Y29uZmlndXJlX2ZpbGV8Y29udGludWV8Y3JlYXRlX3Rlc3Rfc291cmNlbGlzdHxjdGVzdF9idWlsZHxjdGVzdF9jb25maWd1cmV8Y3Rlc3RfY292ZXJhZ2V8Y3Rlc3RfZW1wdHlfYmluYXJ5X2RpcmVjdG9yeXxjdGVzdF9tZW1jaGVja3xjdGVzdF9yZWFkX2N1c3RvbV9maWxlc3xjdGVzdF9ydW5fc2NyaXB0fGN0ZXN0X3NsZWVwfGN0ZXN0X3N0YXJ0fGN0ZXN0X3N1Ym1pdHxjdGVzdF90ZXN0fGN0ZXN0X3VwZGF0ZXxjdGVzdF91cGxvYWR8ZGVmaW5lX3Byb3BlcnR5fGVsc2V8ZWxzZWlmfGVuYWJsZV9sYW5ndWFnZXxlbmFibGVfdGVzdGluZ3xlbmRmb3JlYWNofGVuZGZ1bmN0aW9ufGVuZGlmfGVuZG1hY3JvfGVuZHdoaWxlfGV4ZWNfcHJvZ3JhbXxleGVjdXRlX3Byb2Nlc3N8ZXhwb3J0fGV4cG9ydF9saWJyYXJ5X2RlcGVuZGVuY2llc3xmaWxlfGZpbmRfZmlsZXxmaW5kX2xpYnJhcnl8ZmluZF9wYWNrYWdlfGZpbmRfcGF0aHxmaW5kX3Byb2dyYW18Zmx0a193cmFwX3VpfGZvcmVhY2h8ZnVuY3Rpb258Z2V0X2NtYWtlX3Byb3BlcnR5fGdldF9kaXJlY3RvcnlfcHJvcGVydHl8Z2V0X2ZpbGVuYW1lX2NvbXBvbmVudHxnZXRfcHJvcGVydHl8Z2V0X3NvdXJjZV9maWxlX3Byb3BlcnR5fGdldF90YXJnZXRfcHJvcGVydHl8Z2V0X3Rlc3RfcHJvcGVydHl8aWZ8aW5jbHVkZXxpbmNsdWRlX2RpcmVjdG9yaWVzfGluY2x1ZGVfZXh0ZXJuYWxfbXNwcm9qZWN0fGluY2x1ZGVfZ3VhcmR8aW5jbHVkZV9yZWd1bGFyX2V4cHJlc3Npb258aW5zdGFsbHxpbnN0YWxsX2ZpbGVzfGluc3RhbGxfcHJvZ3JhbXN8aW5zdGFsbF90YXJnZXRzfGxpbmtfZGlyZWN0b3JpZXN8bGlua19saWJyYXJpZXN8bGlzdHxsb2FkX2NhY2hlfGxvYWRfY29tbWFuZHxtYWNyb3xtYWtlX2RpcmVjdG9yeXxtYXJrX2FzX2FkdmFuY2VkfG1hdGh8bWVzc2FnZXxvcHRpb258b3V0cHV0X3JlcXVpcmVkX2ZpbGVzfHByb2plY3R8cXRfd3JhcF9jcHB8cXRfd3JhcF91aXxyZW1vdmV8cmVtb3ZlX2RlZmluaXRpb25zfHJldHVybnxzZXBhcmF0ZV9hcmd1bWVudHN8c2V0fHNldF9kaXJlY3RvcnlfcHJvcGVydGllc3xzZXRfcHJvcGVydHl8c2V0X3NvdXJjZV9maWxlc19wcm9wZXJ0aWVzfHNldF90YXJnZXRfcHJvcGVydGllc3xzZXRfdGVzdHNfcHJvcGVydGllc3xzaXRlX25hbWV8c291cmNlX2dyb3VwfHN0cmluZ3xzdWJkaXJfZGVwZW5kc3xzdWJkaXJzfHRhcmdldF9jb21waWxlX2RlZmluaXRpb25zfHRhcmdldF9jb21waWxlX2ZlYXR1cmVzfHRhcmdldF9jb21waWxlX29wdGlvbnN8dGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXN8dGFyZ2V0X2xpbmtfZGlyZWN0b3JpZXN8dGFyZ2V0X2xpbmtfbGlicmFyaWVzfHRhcmdldF9saW5rX29wdGlvbnN8dGFyZ2V0X3NvdXJjZXN8dHJ5X2NvbXBpbGV8dHJ5X3J1bnx1bnNldHx1c2VfbWFuZ2xlZF9tZXNhfHV0aWxpdHlfc291cmNlfHZhcmlhYmxlX3JlcXVpcmVzfHZhcmlhYmxlX3dhdGNofHdoaWxlfHdyaXRlX2ZpbGUpKD89XFxzKlxcKClcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxPRkZ8T058VFJVRSlcXGIvLFxuXHQnbmFtZXNwYWNlJzogL1xcYig/OklOVEVSRkFDRXxQUklWQVRFfFBST1BFUlRJRVN8UFVCTElDfFNIQVJFRHxTVEFUSUN8VEFSR0VUX09CSkVDVFMpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcYig/OkFORHxERUZJTkVEfEVRVUFMfEdSRUFURVJ8TEVTU3xNQVRDSEVTfE5PVHxPUnxTVFJFUVVBTHxTVFJHUkVBVEVSfFNUUkxFU1N8VkVSU0lPTl9FUVVBTHxWRVJTSU9OX0dSRUFURVJ8VkVSU0lPTl9MRVNTKVxcYi8sXG5cdCdpbnNlcnRlZCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3Kzo6XFx3K1xcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKSpcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bKCk+fV18XFwkWzx7XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5jb2JvbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcKj4uKnwoXlsgXFx0XSopXFwqLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9beHpnbl0/KD86XCIoPzpbXlxcclxcblwiXXxcIlwiKSpcIig/IVwiKXwnKD86W15cXHJcXG4nXXwnJykqJyg/IScpKS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdsZXZlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVxcZCtcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vYW50bHIvZ3JhbW1hcnMtdjQvYmxvYi80MmVkZDViNjg3ZDE4M2I1ZmE2NzllODU4YTgyMjk3YmQyNzE0MWU3L2NvYm9sODUvQ29ib2w4NS5nNCNMMTAxNVxuXHRcdHBhdHRlcm46IC8oXFxicGljKD86dHVyZSk/XFxzKykoPzooPzpbLVxcdyQvLDoqKzw+XXxcXC4oPyFcXHN8JCkpKD86XFwoXFxkK1xcKSk/KSsvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J251bWJlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLyhcXCgpXFxkKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpXS9cblx0XHR9XG5cdH0sXG5cblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3LV0pKD86QUJPUlR8QUNDRVBUfEFDQ0VTU3xBRER8QUREUkVTU3xBRFZBTkNJTkd8QUZURVJ8QUxJR05FRHxBTEx8QUxQSEFCRVR8QUxQSEFCRVRJQ3xBTFBIQUJFVElDLUxPV0VSfEFMUEhBQkVUSUMtVVBQRVJ8QUxQSEFOVU1FUklDfEFMUEhBTlVNRVJJQy1FRElURUR8QUxTT3xBTFRFUnxBTFRFUk5BVEV8QU5ZfEFSRXxBUkVBfEFSRUFTfEFTfEFTQ0VORElOR3xBU0NJSXxBU1NJR058QVNTT0NJQVRFRC1EQVRBfEFTU09DSUFURUQtREFUQS1MRU5HVEh8QVR8QVRUUklCVVRFfEFVVEhPUnxBVVRPfEFVVE8tU0tJUHxCQUNLR1JPVU5ELUNPTE9SfEJBQ0tHUk9VTkQtQ09MT1VSfEJBU0lTfEJFRVB8QkVGT1JFfEJFR0lOTklOR3xCRUxMfEJJTkFSWXxCSVR8QkxBTkt8QkxJTkt8QkxPQ0t8Qk9UVE9NfEJPVU5EU3xCWXxCWUZVTkNUSU9OfEJZVElUTEV8Q0FMTHxDQU5DRUx8Q0FQQUJMRXxDQ1NWRVJTSU9OfENEfENGfENIfENIQUlOSU5HfENIQU5HRUR8Q0hBTk5FTHxDSEFSQUNURVJ8Q0hBUkFDVEVSU3xDTEFTU3xDTEFTUy1JRHxDTE9DSy1VTklUU3xDTE9TRXxDTE9TRS1ESVNQT1NJVElPTnxDT0JPTHxDT0RFfENPREUtU0VUfENPTHxDT0xMQVRJTkd8Q09MVU1OfENPTS1SRUd8Q09NTUF8Q09NTUlUTUVOVHxDT01NT058Q09NTVVOSUNBVElPTnxDT01QfENPTVAtMXxDT01QLTJ8Q09NUC0zfENPTVAtNHxDT01QLTV8Q09NUFVUQVRJT05BTHxDT01QVVRBVElPTkFMLTF8Q09NUFVUQVRJT05BTC0yfENPTVBVVEFUSU9OQUwtM3xDT01QVVRBVElPTkFMLTR8Q09NUFVUQVRJT05BTC01fENPTVBVVEV8Q09ORklHVVJBVElPTnxDT05UQUlOU3xDT05URU5UfENPTlRJTlVFfENPTlRST0x8Q09OVFJPTC1QT0lOVHxDT05UUk9MU3xDT05WRU5USU9OfENPTlZFUlRJTkd8Q09QWXxDT1JSfENPUlJFU1BPTkRJTkd8Q09VTlR8Q1JVTkNIfENVUlJFTkNZfENVUlNPUnxEQVRBfERBVEEtQkFTRXxEQVRFfERBVEUtQ09NUElMRUR8REFURS1XUklUVEVOfERBWXxEQVktT0YtV0VFS3xEQkNTfERFfERFQlVHLUNPTlRFTlRTfERFQlVHLUlURU18REVCVUctTElORXxERUJVRy1OQU1FfERFQlVHLVNVQi0xfERFQlVHLVNVQi0yfERFQlVHLVNVQi0zfERFQlVHR0lOR3xERUNJTUFMLVBPSU5UfERFQ0xBUkFUSVZFU3xERUZBVUxUfERFRkFVTFQtRElTUExBWXxERUZJTklUSU9OfERFTEVURXxERUxJTUlURUR8REVMSU1JVEVSfERFUEVORElOR3xERVNDRU5ESU5HfERFU1RJTkFUSU9OfERFVEFJTHxERkhSRVNQfERGSFZBTFVFfERJU0FCTEV8RElTS3xESVNQTEFZfERJU1BMQVktMXxESVZJREV8RElWSVNJT058RE9OVENBUkV8RE9VQkxFfERPV058RFVQTElDQVRFU3xEWU5BTUlDfEVCQ0RJQ3xFR0NTfEVHSXxFTFNFfEVNSXxFTVBUWS1DSEVDS3xFTkFCTEV8RU5EfEVORC1BQ0NFUFR8RU5ELUFERHxFTkQtQ0FMTHxFTkQtQ09NUFVURXxFTkQtREVMRVRFfEVORC1ESVZJREV8RU5ELUVWQUxVQVRFfEVORC1JRnxFTkQtTVVMVElQTFl8RU5ELU9GLVBBR0V8RU5ELVBFUkZPUk18RU5ELVJFQUR8RU5ELVJFQ0VJVkV8RU5ELVJFVFVSTnxFTkQtUkVXUklURXxFTkQtU0VBUkNIfEVORC1TVEFSVHxFTkQtU1RSSU5HfEVORC1TVUJUUkFDVHxFTkQtVU5TVFJJTkd8RU5ELVdSSVRFfEVORElOR3xFTlRFUnxFTlRSWXxFTlRSWS1QUk9DRURVUkV8RU5WSVJPTk1FTlR8RU9MfEVPUHxFT1N8RVJBU0V8RVJST1J8RVNDQVBFfEVTSXxFVkFMVUFURXxFVkVOVHxFVkVSWXxFWENFUFRJT058RVhDTFVTSVZFfEVYSElCSVR8RVhJVHxFWFBPUlR8RVhURU5EfEVYVEVOREVEfEVYVEVSTkFMfEZEfEZJTEV8RklMRS1DT05UUk9MfEZJTExFUnxGSU5BTHxGSVJTVHxGT09USU5HfEZPUnxGT1JFR1JPVU5ELUNPTE9SfEZPUkVHUk9VTkQtQ09MT1VSfEZST018RlVMTHxGVU5DVElPTnxGVU5DVElPTi1QT0lOVEVSfEZVTkNUSU9OTkFNRXxHRU5FUkFURXxHSVZJTkd8R0xPQkFMfEdPfEdPQkFDS3xHUklEfEdST1VQfEhFQURJTkd8SElHSC1WQUxVRXxISUdILVZBTFVFU3xISUdITElHSFR8SS1PfEktTy1DT05UUk9MfElEfElERU5USUZJQ0FUSU9OfElGfElNUExJQ0lUfElNUE9SVHxJTnxJTkRFWHxJTkRFWEVEfElORElDQVRFfElOSVRJQUx8SU5JVElBTElaRXxJTklUSUFURXxJTlBVVHxJTlBVVC1PVVRQVVR8SU5TUEVDVHxJTlNUQUxMQVRJT058SU5URUdFUnxJTlRPfElOVkFMSUR8SU5WT0tFfElTfEpVU1R8SlVTVElGSUVEfEtBTkpJfEtFUFR8S0VZfEtFWUJPQVJEfExBQkVMfExBTkdVQUdFfExBU1R8TEJ8TER8TEVBRElOR3xMRUZUfExFRlRMSU5FfExFTkdUSHxMRU5HVEgtQ0hFQ0t8TElCQUNDRVNTfExJQlBBUkFNRVRFUnxMSUJSQVJZfExJTUlUfExJTUlUU3xMSU5BR0V8TElOQUdFLUNPVU5URVJ8TElORXxMSU5FLUNPVU5URVJ8TElORVN8TElOS0FHRXxMSVNUfExPQ0FMfExPQ0FMLVNUT1JBR0V8TE9DS3xMT05HLURBVEV8TE9ORy1USU1FfExPVy1WQUxVRXxMT1ctVkFMVUVTfExPV0VSfExPV0xJR0hUfE1FTU9SWXxNRVJHRXxNRVNTQUdFfE1NRERZWVlZfE1PREV8TU9EVUxFU3xNT1JFLUxBQkVMU3xNT1ZFfE1VTFRJUExFfE1VTFRJUExZfE5BTUVEfE5BVElPTkFMfE5BVElPTkFMLUVESVRFRHxOQVRJVkV8TkVHQVRJVkV8TkVUV09SS3xORVhUfE5PfE5PLUVDSE98TlVMTHxOVUxMU3xOVU1CRVJ8TlVNRVJJQ3xOVU1FUklDLURBVEV8TlVNRVJJQy1FRElURUR8TlVNRVJJQy1USU1FfE9CSkVDVC1DT01QVVRFUnxPQ0NVUlN8T0RUfE9GfE9GRnxPTUlUVEVEfE9OfE9QRU58T1BUSU9OQUx8T1JERVJ8T1JERVJMWXxPUkdBTklaQVRJT058T1RIRVJ8T1VUUFVUfE9WRVJGTE9XfE9WRVJMSU5FfE9XTnxQQUNLRUQtREVDSU1BTHxQQURESU5HfFBBR0V8UEFHRS1DT1VOVEVSfFBBU1NXT1JEfFBFUkZPUk18UEZ8UEh8UElDfFBJQ1RVUkV8UExVU3xQT0lOVEVSfFBPUlR8UE9TSVRJT058UE9TSVRJVkV8UFJJTlRFUnxQUklOVElOR3xQUklWQVRFfFBST0NFRFVSRXxQUk9DRURVUkUtUE9JTlRFUnxQUk9DRURVUkVTfFBST0NFRUR8UFJPQ0VTU3xQUk9HUkFNfFBST0dSQU0tSUR8UFJPR1JBTS1MSUJSQVJZfFBST01QVHxQVVJHRXxRVUVVRXxRVU9URXxRVU9URVN8UkFORE9NfFJEfFJFQUR8UkVBREVSfFJFQUx8UkVDRUlWRXxSRUNFSVZFRHxSRUNPUkR8UkVDT1JESU5HfFJFQ09SRFN8UkVDVVJTSVZFfFJFREVGSU5FU3xSRUVMfFJFRnxSRUZFUkVOQ0V8UkVGRVJFTkNFU3xSRUxBVElWRXxSRUxFQVNFfFJFTUFJTkRFUnxSRU1BUktTfFJFTU9URXxSRU1PVkFMfFJFTU9WRXxSRU5BTUVTfFJFUExBQ0V8UkVQTEFDSU5HfFJFUE9SVHxSRVBPUlRJTkd8UkVQT1JUU3xSRVFVSVJFRHxSRVJVTnxSRVNFUlZFfFJFU0VUfFJFVFVSTnxSRVRVUk4tQ09ERXxSRVRVUk5JTkd8UkVWRVJTRS1WSURFT3xSRVZFUlNFRHxSRVdJTkR8UkVXUklURXxSRnxSSHxSSUdIVHxST1VOREVEfFJVTnxTQU1FfFNBVkV8U0NSRUVOfFNEfFNFQVJDSHxTRUNUSU9OfFNFQ1VSRXxTRUNVUklUWXxTRUdNRU5UfFNFR01FTlQtTElNSVR8U0VMRUNUfFNFTkR8U0VOVEVOQ0V8U0VQQVJBVEV8U0VRVUVOQ0V8U0VRVUVOVElBTHxTRVR8U0hBUkVEfFNIQVJFREJZQUxMfFNIQVJFREJZUlVOVU5JVHxTSEFSSU5HfFNISUZULUlOfFNISUZULU9VVHxTSE9SVC1EQVRFfFNJR058U0laRXxTT1JUfFNPUlQtQ09OVFJPTHxTT1JULUNPUkUtU0laRXxTT1JULUZJTEUtU0laRXxTT1JULU1FUkdFfFNPUlQtTUVTU0FHRXxTT1JULU1PREUtU0laRXxTT1JULVJFVFVSTnxTT1VSQ0V8U09VUkNFLUNPTVBVVEVSfFNQQUNFfFNQQUNFU3xTUEVDSUFMLU5BTUVTfFNUQU5EQVJEfFNUQU5EQVJELTF8U1RBTkRBUkQtMnxTVEFSVHxTVEFUVVN8U1RPUHxTVFJJTkd8U1VCLVFVRVVFLTF8U1VCLVFVRVVFLTJ8U1VCLVFVRVVFLTN8U1VCVFJBQ1R8U1VNfFNVUFBSRVNTfFNZTUJPTHxTWU1CT0xJQ3xTWU5DfFNZTkNIUk9OSVpFRHxUQUJMRXxUQUxMWXxUQUxMWUlOR3xUQVBFfFRBU0t8VEVSTUlOQUx8VEVSTUlOQVRFfFRFU1R8VEVYVHxUSEVOfFRIUkVBRHxUSFJFQUQtTE9DQUx8VEhST1VHSHxUSFJVfFRJTUV8VElNRVJ8VElNRVN8VElUTEV8VE98VE9EQVlTLURBVEV8VE9EQVlTLU5BTUV8VE9QfFRSQUlMSU5HfFRSVU5DQVRFRHxUWVBFfFRZUEVERUZ8VU5ERVJMSU5FfFVOSVR8VU5TVFJJTkd8VU5USUx8VVB8VVBPTnxVU0FHRXxVU0V8VVNJTkd8VkFMVUV8VkFMVUVTfFZBUllJTkd8VklSVFVBTHxXQUlUfFdIRU58V0hFTi1DT01QSUxFRHxXSVRIfFdPUkRTfFdPUktJTkctU1RPUkFHRXxXUklURXxZRUFSfFlZWVlERER8WVlZWU1NRER8WkVSTy1GSUxMfFpFUk9FU3xaRVJPUykoPyFbXFx3LV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OmZhbHNlfHRydWUpKD8hW1xcdy1dKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSkoPzpbKy1dPyg/Oig/OlxcZCsoPzpbLixdXFxkKyk/fFsuLF1cXGQrKSg/OmVbKy1dP1xcZCspP3x6ZXJvKSkoPyFbXFx3LV0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0Lzw+fFs8Pl09P3xbPSsqLyZdLyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHctXSkoPzotfGFuZHxlcXVhbHxncmVhdGVyfGxlc3N8bm90fG9yfHRoYW4pKD8hW1xcdy1dKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1suOiwoKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gSWdub3JlIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggeyB0byBwcml2aWxlZ2Ugc3RyaW5nIGludGVycG9sYXRpb24gaGlnaGxpZ2h0aW5nXG5cdHZhciBjb21tZW50ID0gLyMoPyFcXHspLisvO1xuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IHtcblx0XHRwYXR0ZXJuOiAvI1xce1tefV0rXFx9Lyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jb2ZmZWVzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge1xuXHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHQnc3RyaW5nJzogW1xuXG5cdFx0XHQvLyBTdHJpbmdzIGFyZSBtdWx0aWxpbmVcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKicvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdHtcblx0XHRcdFx0Ly8gU3RyaW5ncyBhcmUgbXVsdGlsaW5lXG5cdFx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb25cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGJyZWFrfGJ5fGNhdGNofGNsYXNzfGNvbnRpbnVlfGRlYnVnZ2VyfGRlbGV0ZXxkb3xlYWNofGVsc2V8ZXh0ZW5kfGV4dGVuZHN8ZmFsc2V8ZmluYWxseXxmb3J8aWZ8aW58aW5zdGFuY2VvZnxpc3xpc250fGxldHxsb29wfG5hbWVzcGFjZXxuZXd8bm98bm90fG51bGx8b2Z8b2ZmfG9ufG9yfG93bnxyZXR1cm58c3VwZXJ8c3dpdGNofHRoZW58dGhpc3x0aHJvd3x0cnVlfHRyeXx0eXBlb2Z8dW5kZWZpbmVkfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHdpbmRvd3x3aXRofHllc3x5aWVsZClcXGIvLFxuXHRcdCdjbGFzcy1tZW1iZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQCg/IVxcZClcXHcrLyxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjb2ZmZWVzY3JpcHQnLCAnY29tbWVudCcsIHtcblx0XHQnbXVsdGlsaW5lLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyMjW1xcc1xcU10rPyMjIy8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblxuXHRcdC8vIEJsb2NrIHJlZ2V4cCBjYW4gY29udGFpbiBjb21tZW50cyBhbmQgaW50ZXJwb2xhdGlvblxuXHRcdCdibG9jay1yZWdleCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC97M31bXFxzXFxTXSo/XFwvezN9Lyxcblx0XHRcdGFsaWFzOiAncmVnZXgnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjb2ZmZWVzY3JpcHQnLCAnc3RyaW5nJywge1xuXHRcdCdpbmxpbmUtamF2YXNjcmlwdCc6IHtcblx0XHRcdHBhdHRlcm46IC9gKD86XFxcXFtcXHNcXFNdfFteXFxcXGBdKSpgLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eYHxgJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fSxcblx0XHRcdFx0J3NjcmlwdCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBCbG9jayBzdHJpbmdzXG5cdFx0J211bHRpbGluZS1zdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8nJydbXFxzXFxTXSo/JycnLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSo/XCJcIlwiLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdGludGVycG9sYXRpb246IGludGVycG9sYXRpb25cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF1cblxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjb2ZmZWVzY3JpcHQnLCAna2V5d29yZCcsIHtcblx0XHQvLyBPYmplY3QgcHJvcGVydHlcblx0XHQncHJvcGVydHknOiAvKD8hXFxkKVxcdysoPz1cXHMqOig/ITopKS9cblx0fSk7XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5jb2ZmZWVzY3JpcHRbJ3RlbXBsYXRlLXN0cmluZyddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jb2ZmZWUgPSBQcmlzbS5sYW5ndWFnZXMuY29mZmVlc2NyaXB0O1xufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuY29uY3VybmFzID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpfFxcL1xcLy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2xhbmdleHQnOiB7XG5cdFx0cGF0dGVybjogL1xcYlxcdytcXHMqXFx8XFx8W1xcc1xcU10rP1xcfFxcfC8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2NsYXNzLW5hbWUnOiAvXlxcdysvLFxuXHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheXFxzKlxcfFxcfClbXFxzXFxTXSsoPz1cXHxcXHwkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8XFx8L1xuXHRcdH1cblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpZGVmWyBcXHRdKylbYS16QS1aX11cXHcqKD89XFxzKlxcKCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWN0b3J8YWxzb3xhbm5vdGF0aW9ufGFzc2VydHxhc3luY3xhd2FpdHxib29sfGJvb2xlYW58YnJlYWt8Ynl0ZXxjYXNlfGNhdGNofGNoYW5nZWR8Y2hhcnxjbGFzc3xjbG9zZWR8Y29uc3RhbnR8Y29udGludWV8ZGVmfGRlZmF1bHR8ZGVsfGRvdWJsZXxlbGlmfGVsc2V8ZW51bXxldmVyeXxleHRlbmRzfGZhbHNlfGZpbmFsbHl8ZmxvYXR8Zm9yfGZyb218Z2xvYmFsfGdwdWRlZnxncHVrZXJuZWx8aWZ8aW1wb3J0fGlufGluaXR8aW5qZWN0fGludHxsYW1iZGF8bG9jYWx8bG9uZ3xsb29wfG1hdGNofG5ld3xub2RlZmF1bHR8bnVsbHxvZnxvbmNoYW5nZXxvcGVufG91dHxvdmVycmlkZXxwYWNrYWdlfHBhcmZvcnxwYXJmb3JzeW5jfHBvc3R8cHJlfHByaXZhdGV8cHJvdGVjdGVkfHByb3ZpZGV8cHJvdmlkZXJ8cHVibGljfHJldHVybnxzaGFyZWR8c2hvcnR8c2luZ2xlfHNpemVfdHxzaXplb2Z8c3VwZXJ8c3luY3x0aGlzfHRocm93fHRyYWl0fHRyYW5zfHRyYW5zaWVudHx0cnVlfHRyeXx0eXBlZGVmfHVuY2hlY2tlZHx1c2luZ3x2YWx8dmFyfHZvaWR8d2hpbGV8d2l0aClcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMGJbMDFdWzAxX10qTD9cXGJ8XFxiMHgoPzpbXFxkYS1mX10qXFwuKT9bXFxkYS1mX3ArLV0rXFxifCg/OlxcYlxcZFtcXGRfXSooPzpcXC5bXFxkX10qKT98XFxCXFwuXFxkW1xcZF9dKikoPzplWystXT9cXGRbXFxkX10qKT9bZGZsc10/L2ksXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS8sXG5cdCdvcGVyYXRvcic6IC88PT18Pj09fD0+fC0+fDwtfDw+fCY9PXwmPD58XFw/Oj98XFwuXFw/fFxcK1xcK3wtLXxbLSsqLz08Pl09P3xbIV5+XXxcXGIoPzphbmR8YXN8YmFuZHxib3J8Ynhvcnxjb21wfGlzfGlzbm90fG1vZHxvcilcXGI9Py8sXG5cdCdhbm5vdGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9AKD86XFx3KzopPyg/Olxcdyt8XFxbW15cXF1dK1xcXSk/Lyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NvbmN1cm5hcycsICdsYW5nZXh0Jywge1xuXHQncmVnZXgtbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxicihcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFx7KD86W157fV18XFx7KD86W157fV18XFx7W159XSpcXH0pKlxcfSkrXFx9Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY29uY3VybmFzXG5cdFx0XHR9LFxuXHRcdFx0J3JlZ2V4JzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmctbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86XFxCfFxcYnMpKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXNcblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuY29uYyA9IFByaXNtLmxhbmd1YWdlcy5jb25jdXJuYXM7XG5cbi8qKlxuICogT3JpZ2luYWwgYnkgU2NvdHQgSGVsbWUuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL3Njb3R0aGVsbWUuY28udWsvY3NwLWNoZWF0LXNoZWV0L1xuICpcbiAqIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6XG4gKiAgLSBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMS9cbiAqICAtIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AyL1xuICogIC0gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUDMvXG4gKi9cblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiB2YWx1ZShzb3VyY2UpIHtcblx0XHRyZXR1cm4gUmVnRXhwKC8oWyBcXHRdKS8uc291cmNlICsgJyg/OicgKyBzb3VyY2UgKyAnKScgKyAvKD89W1xccztdfCQpLy5zb3VyY2UsICdpJyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuY3NwID0ge1xuXHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xccztdKSg/OmJhc2UtdXJpfGJsb2NrLWFsbC1taXhlZC1jb250ZW50fCg/OmNoaWxkfGNvbm5lY3R8ZGVmYXVsdHxmb250fGZyYW1lfGltZ3xtYW5pZmVzdHxtZWRpYXxvYmplY3R8cHJlZmV0Y2h8c2NyaXB0fHN0eWxlfHdvcmtlciktc3JjfGRpc293bi1vcGVuZXJ8Zm9ybS1hY3Rpb258ZnJhbWUtKD86YW5jZXN0b3JzfG9wdGlvbnMpfGlucHV0LXByb3RlY3Rpb24oPzotKD86Y2xpcHxzZWxlY3RvcnMpKT98bmF2aWdhdGUtdG98cGx1Z2luLXR5cGVzfHBvbGljeS11cml8cmVmZXJyZXJ8cmVmbGVjdGVkLXhzc3xyZXBvcnQtKD86dG98dXJpKXxyZXF1aXJlLXNyaS1mb3J8c2FuZGJveHwoPzpzY3JpcHR8c3R5bGUpLXNyYy0oPzphdHRyfGVsZW0pfHVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMpKD89W1xccztdfCQpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdzY2hlbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvW2Etel1bYS16MC05ListXSo6Ly5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J25vbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB2YWx1ZSgvJ25vbmUnLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdub25jZSc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC8nbm9uY2UtWy0rL1xcdz1dKycvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnaGFzaCc6IHtcblx0XHRcdHBhdHRlcm46IHZhbHVlKC8nc2hhKD86MjU2fDM4NHw1MTIpLVstKy9cXHc9XSsnLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J2hvc3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiB2YWx1ZShcblx0XHRcdFx0L1thLXpdW2EtejAtOS4rLV0qOlxcL1xcL1teXFxzOywnXSovLnNvdXJjZSArXG5cdFx0XHRcdCd8JyArXG5cdFx0XHRcdC9cXCpbXlxcczssJ10qLy5zb3VyY2UgK1xuXHRcdFx0XHQnfCcgK1xuXHRcdFx0XHQvW2EtejAtOS1dKyg/OlxcLlthLXowLTktXSspKyg/OjpbXFxkKl0rKT8oPzpcXC9bXlxcczssJ10qKT8vLnNvdXJjZVxuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3VybCcsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ltcG9ydGFudCc6IC9cXCovXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogdmFsdWUoLyd1bnNhZmUtW2Etei1dKycvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAndW5zYWZlJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogdmFsdWUoLydbYS16LV0rJy8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzYWZlJ1xuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdwdW5jdHVhdGlvbic6IC87L1xuXHR9O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nvb2tsYW5nL3NwZWMvYmxvYi9tYWluL0VCTkYubWRcblxuXHR2YXIgc2luZ2xlX3Rva2VuX3N1ZmZpeCA9IC8oPzooPyFcXHMpW1xcZCQrPD1hLXpBLVpcXHg4MC1cXHVGRkZGXSkrLy5zb3VyY2U7XG5cdHZhciBtdWx0aV90b2tlbl9pbmZpeCA9IC9bXnt9QCNdKy8uc291cmNlO1xuXHR2YXIgbXVsdGlfdG9rZW5fc3VmZml4ID0gL1xce1tefSNAXSpcXH0vLnNvdXJjZTtcblxuXHR2YXIgbXVsdGlfdG9rZW4gPSBtdWx0aV90b2tlbl9pbmZpeCArIG11bHRpX3Rva2VuX3N1ZmZpeDtcblxuXHR2YXIgdGltZXJfdW5pdHMgPSAvKD86aHxob3Vyc3xocnN8bXxtaW58bWludXRlcykvLnNvdXJjZTtcblxuXHR2YXIgYW1vdW50X2dyb3VwX2ltcGwgPSB7XG5cdFx0cGF0dGVybjogL1xce1tee31dKlxcfS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYW1vdW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFtcXHt8XSlbXnt9fColXSsvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHR9LFxuXHRcdFx0J3VuaXQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oJSlbXn1dKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3ltYm9sJyxcblx0XHRcdH0sXG5cdFx0XHQnc2VydmluZ3Mtc2NhbGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwqLyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9LFxuXHRcdFx0J3NlcnZpbmdzLWFsdGVybmF0aXZlLXNlcGFyYXRvcic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcfC8sXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InLFxuXHRcdFx0fSxcblx0XHRcdCd1bml0LXNlcGFyYXRvcic6IHtcblx0XHRcdFx0cGF0dGVybjogLyg/OiV8KFxcKiklKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InLFxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dLyxcblx0XHR9XG5cdH07XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMuY29va2xhbmcgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHQvLyBbLSBjb21tZW50IC1dXG5cdFx0XHQvLyAtLSBjb21tZW50XG5cdFx0XHRwYXR0ZXJuOiAvXFxbLVtcXHNcXFNdKj8tXFxdfC0tLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J21ldGEnOiB7IC8vID4+IGtleTogdmFsdWVcblx0XHRcdHBhdHRlcm46IC8+Pi4qOi4qLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHJvcGVydHknOiB7IC8vIGtleTpcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD4+XFxzKilbXlxcczpdKD86W146XSpbXlxcczpdKT8vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb29rd2FyZS1ncm91cCc6IHsgLy8gIy4uLnsuLi59LCAjLi4uXG5cdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCcjKD86J1xuXHRcdFx0XHQrIG11bHRpX3Rva2VuXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdCsgc2luZ2xlX3Rva2VuX3N1ZmZpeFxuXHRcdFx0XHQrICcpJ1xuXHRcdFx0KSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29va3dhcmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgnKF4jKSg/Oidcblx0XHRcdFx0XHRcdCsgbXVsdGlfdG9rZW5faW5maXhcblx0XHRcdFx0XHRcdCsgJyknXG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29va3dhcmUta2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiMvLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCcsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdxdWFudGl0eS1ncm91cCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKC9cXHtbXnt9QCNdKlxcfS8pLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3F1YW50aXR5Jzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKC8oXlxceykvLnNvdXJjZSArIG11bHRpX3Rva2VuX2luZml4KSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dLyxcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fSxcblx0XHQnaW5ncmVkaWVudC1ncm91cCc6IHsgLy8gQC4uLnsuLi59LCBALi4uXG5cdFx0XHRwYXR0ZXJuOiBuZXcgUmVnRXhwKCdAKD86J1xuXHRcdFx0XHQrIG11bHRpX3Rva2VuXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdCsgc2luZ2xlX3Rva2VuX3N1ZmZpeFxuXHRcdFx0XHQrICcpJyksXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2luZ3JlZGllbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogbmV3IFJlZ0V4cCgnKF5AKSg/Oidcblx0XHRcdFx0XHRcdCsgbXVsdGlfdG9rZW5faW5maXhcblx0XHRcdFx0XHRcdCsgJyknKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5ncmVkaWVudC1rZXl3b3JkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eQC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2Ftb3VudC1ncm91cCc6IGFtb3VudF9ncm91cF9pbXBsLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RpbWVyLWdyb3VwJzogeyAvLyB+dGltZXJ7Li4ufVxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zb3J0LWFsdGVybmF0aXZlc1xuXHRcdFx0cGF0dGVybjogL34oPyFcXHMpW15AI357fV0qXFx7W157fV0qXFx9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndGltZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefilbXntdKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2R1cmF0aW9uLWdyb3VwJzogeyAvLyB7Li4ufVxuXHRcdFx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XSpcXH0vLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHRcdFx0XHRcdFx0J3VuaXQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoLyglXFxzKikvLnNvdXJjZSArIHRpbWVyX3VuaXRzICsgL1xcYi8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdvcGVyYXRvcic6IC8lLyxcblx0XHRcdFx0XHRcdCdkdXJhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1xcZCsvLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3RpbWVyLWtleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15+Lyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jb3EvY29xXG5cblx0dmFyIGNvbW1lbnRTb3VyY2UgPSAvXFwoXFwqKD86W14oKl18XFwoKD8hXFwqKXxcXCooPyFcXCkpfDxzZWxmPikqXFwqXFwpLy5zb3VyY2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7XG5cdFx0Y29tbWVudFNvdXJjZSA9IGNvbW1lbnRTb3VyY2UucmVwbGFjZSgvPHNlbGY+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvbW1lbnRTb3VyY2U7IH0pO1xuXHR9XG5cdGNvbW1lbnRTb3VyY2UgPSBjb21tZW50U291cmNlLnJlcGxhY2UoLzxzZWxmPi9nLCAnW10nKTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuY29xID0ge1xuXHRcdCdjb21tZW50JzogUmVnRXhwKGNvbW1lbnRTb3VyY2UpLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdhdHRyaWJ1dGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvI1xcWyg/OlteXFxbXFxdKFwiXXxcIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpfFxcKCg/IVxcKil8PGNvbW1lbnQ+KSpcXF0vLnNvdXJjZVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxjb21tZW50Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBjb21tZW50U291cmNlOyB9KVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NvbW1lbnQnOiBSZWdFeHAoY29tbWVudFNvdXJjZSksXG5cdFx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL14jXFxbfFxcXSR8WywoKV0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpDdW11bGF0aXZlfEdsb2JhbHxMb2NhbHxNb25vbW9ycGhpY3xOb25DdW11bGF0aXZlfFBvbHltb3JwaGljfFByaXZhdGV8UHJvZ3JhbSlcXGIvLFxuXHRcdFx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86QWJvcnR8QWJvdXR8QWRkfEFkbWl0fEFkbWl0dGVkfEFsbHxBcmd1bWVudHN8QXN8QXNzdW1wdGlvbnN8QXhpb218QXhpb21zfEJhY2t8QmFja1RvfEJhY2t0cmFjZXxCaW5PcHxCaW5PcFNwZWN8QmluUmVsfEJpbmR8QmxhY2tsaXN0fENhbm9uaWNhbHxDYXNlfENkfENoZWNrfENsYXNzfENsYXNzZXN8Q2xvc2V8Q29GaXhwb2ludHxDb0luZHVjdGl2ZXxDb2VyY2lvbnxDb2VyY2lvbnN8Q29sbGVjdGlvbnxDb21iaW5lZHxDb21wdXRlfENvbmplY3R1cmV8Q29uamVjdHVyZXN8Q29uc3RhbnR8Q29uc3RhbnRzfENvbnN0cmFpbnR8Q29uc3RydWN0b3JzfENvbnRleHR8Q29yb2xsYXJ5fENyZWF0ZXxDc3RPcHxDdXN0b218Q3V0fERlYnVnfERlY2xhcmV8RGVmaW5lZHxEZWZpbml0aW9ufERlbGltaXR8RGVwZW5kZW5jaWVzfERlcGVuZGVudHxEZXJpdmV8RGlmZnN8RHJvcHxFbGltaW5hdGlvbnxFbmR8RW50cnl8RXF1YWxpdHl8RXZhbHxFeGFtcGxlfEV4aXN0ZW50aWFsfEV4aXN0ZW50aWFsc3xFeGlzdGluZ3xFeHBvcnR8RXh0ZXJufEV4dHJhY3Rpb258RmFjdHxGYWlsfEZpZWxkfEZpbGV8Rmlyc3RvcmRlcnxGaXhwb2ludHxGbGFnc3xGb2N1c3xGcm9tfEZ1bmNsYXNzfEZ1bmN0aW9ufEZ1bmN0aW9uYWx8R0N8R2VuZXJhbGl6YWJsZXxHb2FsfEdyYWJ8R3JhbW1hcnxHcmFwaHxHdWFyZGVkfEhhc2tlbGx8SGVhcHxIaWRlfEhpbnR8SGludERifEhpbnRzfEh5cG90aGVzZXN8SHlwb3RoZXNpc3xJRnxJZGVudGl0eXxJbW1lZGlhdGV8SW1wbGljaXR8SW1wbGljaXRzfEltcG9ydHxJbmNsdWRlfEluZHVjdGlvbnxJbmR1Y3RpdmV8SW5maXh8SW5mb3xJbml0aWFsfElualR5cHxJbmxpbmV8SW5zcGVjdHxJbnN0YW5jZXxJbnN0YW5jZXN8SW50cm98SW50cm9zfEludmVyc2lvbnxJbnZlcnNpb25fY2xlYXJ8SlNPTnxMYW5ndWFnZXxMZWZ0fExlbW1hfExldHxMaWF8TGlicmFyaWVzfExpYnJhcnl8TG9hZHxMb2FkUGF0aHxMb2NhdGV8THRhY3xMdGFjMnxNTHxNYXRjaHxNZXRob2R8TWluaW1hbGl0eXxNb2R1bGV8TW9kdWxlc3xNb3JwaGlzbXxOZXh0fE5vSW5saW5lfE5vdGF0aW9ufE51bWJlcnxPQ2FtbHxPYmxpZ2F0aW9ufE9ibGlnYXRpb25zfE9wYXF1ZXxPcGVufE9wdGltaXplfFBhcmFtZXRlcnxQYXJhbWV0ZXJzfFBhcmFtZXRyaWN8UGF0aHxQYXRoc3xQcmVuZXh8UHJldGVybXxQcmltaXRpdmV8UHJpbnR8UHJvZmlsZXxQcm9qZWN0aW9uc3xQcm9vZnxQcm9wfFByb3BCaW5PcHxQcm9wT3B8UHJvcFVPcHxQcm9wZXJ0eXxQcm9wb3NpdGlvbnxQd2R8UWVkfFF1aXR8UmVjfFJlY29yZHxSZWN1cnNpdmV8UmVkaXJlY3R8UmVkdWN0aW9ufFJlZ2lzdGVyfFJlbGF0aW9ufFJlbWFya3xSZW1vdmV8UmVxdWlyZXxSZXNlcnZlZHxSZXNldHxSZXNvbHZlfFJlc3RhcnR8UmV3cml0ZXxSaWdodHxSaW5nfFJpbmdzfFNQcm9wfFNhdHVyYXRlfFNhdmV8U2NoZW1lfFNjb3BlfFNjb3Blc3xTZWFyY2h8U2VhcmNoSGVhZHxTZWFyY2hQYXR0ZXJufFNlYXJjaFJld3JpdGV8U2VjdGlvbnxTZXBhcmF0ZXxTZXR8U2V0b2lkfFNob3d8U2lnbmF0dXJlc3xTb2x2ZXxTb2x2ZXJ8U29ydHxTb3J0Y2xhc3N8U29ydGVkfFNwZWN8U3RlcHxTdHJhdGVnaWVzfFN0cmF0ZWd5fFN0cmluZ3xTdHJ1Y3R1cmV8U3ViQ2xhc3N8U3ViZ3JhcGh8U3VjaFRoYXR8VGFjdGljfFRlcm18VGVzdENvbXBpbGV8VGhlb3JlbXxUaW1lfFRpbWVvdXR8VG98VHJhbnNwYXJlbnR8VHlwZXxUeXBlY2xhc3Nlc3xUeXBlc3xUeXBpbmd8VW5PcHxVbk9wU3BlY3xVbmRlbGltaXR8VW5kb3xVbmZvY3VzfFVuZm9jdXNlZHxVbmZvbGR8VW5pdmVyc2V8VW5pdmVyc2VzfFVuc2hlbHZlfFZhcmlhYmxlfFZhcmlhYmxlc3xWYXJpYW50fFZlcmJvc2V8Vmlld3xWaXNpYmlsaXR5fFppZnl8X3xhcHBseXxhc3xhdHxieXxjb2ZpeHxlbHNlfGVuZHxleGlzdHN8ZXhpc3RzMnxmaXh8Zm9yfGZvcmFsbHxmdW58aWZ8aW58bGV0fG1hdGNofG1lYXN1cmV8bW92ZXxyZW1vdmVkfHJldHVybnxzdHJ1Y3R8dGhlbnx1c2luZ3x3Znx3aGVyZXx3aXRoKVxcYi8sXG5cblx0XHQnbnVtYmVyJzogL1xcYig/OjB4W2EtZjAtOV1bYS1mMC05X10qKD86XFwuW2EtZjAtOV9dKyk/KD86cFsrLV0/XFxkW1xcZF9dKik/fFxcZFtcXGRfXSooPzpcXC5bXFxkX10rKT8oPzplWystXT9cXGRbXFxkX10qKT8pXFxiL2ksXG5cblx0XHQncHVuY3QnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFxce3xcXHtcXHx8XFxbPXw6Pi8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzogL1xcL1xcXFx8XFxcXFxcL3xcXC57MiwzfXw6ezEsMn09fFxcKlxcKnxbLT1dPnw8KD86LT4/fFsrOj0+XXw8Oil8Pig/Oj18LT4pfFxcfFstfF0/fFstISUmKisvPD0+P0BefiddLyxcblx0XHQncHVuY3R1YXRpb24nOiAvXFwuXFwofGBcXCh8QFxce3xgXFx7fFxce1xcfHxcXFs9fDo+fFs6Liw7KCl7fVxcW1xcXV0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBTYW11ZWwgRmxvcmVzXG4gKlxuICogQWRkcyB0aGUgZm9sbG93aW5nIG5ldyB0b2tlbiBjbGFzc2VzOlxuICogICAgIGNvbnN0YW50LCBidWlsdGluLCB2YXJpYWJsZSwgc3ltYm9sLCByZWdleFxuICovXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5ydWJ5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIy4qfF49YmVnaW5cXHNbXFxzXFxTXSo/Xj1lbmQvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfG1vZHVsZSlcXHMrfFxcYmNhdGNoXFxzK1xcKClbXFx3LlxcXFxdK3xcXGJbQS1aX11cXHcqKD89XFxzKlxcLlxccypuZXdcXGIpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1suXFxcXF0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpCRUdJTnxFTkR8YWxpYXN8YW5kfGJlZ2lufGJyZWFrfGNhc2V8Y2xhc3N8ZGVmfGRlZmluZV9tZXRob2R8ZGVmaW5lZHxkb3xlYWNofGVsc2V8ZWxzaWZ8ZW5kfGVuc3VyZXxleHRlbmR8Zm9yfGlmfGlufGluY2x1ZGV8bW9kdWxlfG5ld3xuZXh0fG5pbHxub3R8b3J8cHJlcGVuZHxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmFpc2V8cmVkb3xyZXF1aXJlfHJlc2N1ZXxyZXRyeXxyZXR1cm58c2VsZnxzdXBlcnx0aGVufHRocm93fHVuZGVmfHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHlpZWxkKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1xcLnsyLDN9fCZcXC58PT09fDw/PT58WyE9XT9+fCg/OiYmfFxcfFxcfHw8PHw+PnxcXCpcXCp8WytcXC0qLyU8PiFeJnw9XSk9P3xbPzpdLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdLiw7XS8sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAnb3BlcmF0b3InLCB7XG5cdFx0J2RvdWJsZS1jb2xvbic6IHtcblx0XHRcdHBhdHRlcm46IC86Oi8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdH0pO1xuXG5cdHZhciBpbnRlcnBvbGF0aW9uID0ge1xuXHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKikjXFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oI1xceylbXFxzXFxTXSsoPz1cXH0kKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdH0sXG5cdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXiNcXHt8XFx9JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMucnVieS5mdW5jdGlvbjtcblxuXHR2YXIgcGVyY2VudEV4cHJlc3Npb24gPSAnKD86JyArIFtcblx0XHQvKFteYS16QS1aMC05XFxzeyhcXFs8PV0pKD86KD8hXFwxKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvLnNvdXJjZSxcblx0XHQvXFwoKD86W14oKVxcXFxdfFxcXFxbXFxzXFxTXXxcXCgoPzpbXigpXFxcXF18XFxcXFtcXHNcXFNdKSpcXCkpKlxcKS8uc291cmNlLFxuXHRcdC9cXHsoPzpbXnt9XFxcXF18XFxcXFtcXHNcXFNdfFxceyg/Oltee31cXFxcXXxcXFxcW1xcc1xcU10pKlxcfSkqXFx9Ly5zb3VyY2UsXG5cdFx0L1xcWyg/OlteXFxbXFxdXFxcXF18XFxcXFtcXHNcXFNdfFxcWyg/OlteXFxbXFxdXFxcXF18XFxcXFtcXHNcXFNdKSpcXF0pKlxcXS8uc291cmNlLFxuXHRcdC88KD86W148PlxcXFxdfFxcXFxbXFxzXFxTXXw8KD86W148PlxcXFxdfFxcXFxbXFxzXFxTXSkqPikqPi8uc291cmNlXG5cdF0uam9pbignfCcpICsgJyknO1xuXG5cdHZhciBzeW1ib2xOYW1lID0gLyg/OlwiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcInwoPzpcXGJbYS16QS1aX11cXHcqfFteXFxzXFwwLVxceDdGXSspWz8hXT98XFwkLikvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdydWJ5JywgJ2tleXdvcmQnLCB7XG5cdFx0J3JlZ2V4LWxpdGVyYWwnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvJXIvLnNvdXJjZSArIHBlcmNlbnRFeHByZXNzaW9uICsgL1tlZ2ltbm9zdXhdezAsNn0vLnNvdXJjZSksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdyZWdleCc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXi9dKVxcLyg/IVxcLykoPzpcXFtbXlxcclxcblxcXV0rXFxdfFxcXFwufFteWy9cXFxcXFxyXFxuXSkrXFwvW2VnaW1ub3N1eF17MCw2fSg/PVxccyooPzokfFtcXHJcXG4sLjt9KSNdKSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQncmVnZXgnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQndmFyaWFibGUnOiAvW0AkXStbYS16QS1aX11cXHcqKD86Wz8hXXxcXGIpLyxcblx0XHQnc3ltYm9sJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteOl0pOi8uc291cmNlICsgc3ltYm9sTmFtZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oW1xcclxcbnsoLF1bIFxcdF0qKS8uc291cmNlICsgc3ltYm9sTmFtZSArIC8oPz06KD8hOikpLy5zb3VyY2UpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XSxcblx0XHQnbWV0aG9kLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmRlZlxccyspXFx3Kyg/OlxccypcXC5cXHMqXFx3Kyk/Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL1xcYlxcdyskLyxcblx0XHRcdFx0J2tleXdvcmQnOiAvXnNlbGZcXGIvLFxuXHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9eXFx3Ky8sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdydWJ5JywgJ3N0cmluZycsIHtcblx0XHQnc3RyaW5nLWxpdGVyYWwnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvJVtxUWlJd1dzXT8vLnNvdXJjZSArIHBlcmNlbnRFeHByZXNzaW9uKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGludGVycG9sYXRpb24sXG5cdFx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXCJ8JykoPzojXFx7W159XStcXH18Iyg/IVxceyl8XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXCNcXHJcXG5dKSpcXDEvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLzw8Wy1+XT8oW2Etel9dXFx3KilbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9bXFx0IF0qXFwxL2ksXG5cdFx0XHRcdGFsaWFzOiAnaGVyZWRvYy1zdHJpbmcnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8Wy1+XT9bYS16X11cXHcqfFxcYlthLXpfXVxcdyokL2ksXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3N5bWJvbCc6IC9cXGJcXHcrLyxcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148PFstfl0/L1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvPDxbLX5dPycoW2Etel9dXFx3KiknW1xcclxcbl0oPzouKltcXHJcXG5dKSo/W1xcdCBdKlxcMS9pLFxuXHRcdFx0XHRhbGlhczogJ2hlcmVkb2Mtc3RyaW5nJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL148PFstfl0/J1thLXpfXVxcdyonfFxcYlthLXpfXVxcdyokL2ksXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J3N5bWJvbCc6IC9cXGJcXHcrLyxcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148PFstfl0/J3wnJC8sXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NvbW1hbmQtbGl0ZXJhbCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8leC8uc291cmNlICsgcGVyY2VudEV4cHJlc3Npb24pLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQnY29tbWFuZCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvYCg/OiNcXHtbXn1dK1xcfXwjKD8hXFx7KXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxgI1xcclxcbl0pKmAvLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0XHQnY29tbWFuZCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XVxuXHR9KTtcblxuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnJ1Ynkuc3RyaW5nO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3J1YnknLCAnbnVtYmVyJywge1xuXHRcdCdidWlsdGluJzogL1xcYig/OkFycmF5fEJpZ251bXxCaW5kaW5nfENsYXNzfENvbnRpbnVhdGlvbnxEaXJ8RXhjZXB0aW9ufEZhbHNlQ2xhc3N8RmlsZXxGaXhudW18RmxvYXR8SGFzaHxJT3xJbnRlZ2VyfE1hdGNoRGF0YXxNZXRob2R8TW9kdWxlfE5pbENsYXNzfE51bWVyaWN8T2JqZWN0fFByb2N8UmFuZ2V8UmVnZXhwfFN0YXR8U3RyaW5nfFN0cnVjdHxTeW1ib2x8VE1TfFRocmVhZHxUaHJlYWRHcm91cHxUaW1lfFRydWVDbGFzcylcXGIvLFxuXHRcdCdjb25zdGFudCc6IC9cXGJbQS1aXVtBLVowLTlfXSooPzpbPyFdfFxcYikvXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5yYiA9IFByaXNtLmxhbmd1YWdlcy5ydWJ5O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5jcnlzdGFsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgncnVieScsIHtcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdC9cXGIoPzpfX0RJUl9ffF9fRU5EX0xJTkVfX3xfX0ZJTEVfX3xfX0xJTkVfX3xhYnN0cmFjdHxhbGlhc3xhbm5vdGF0aW9ufGFzfGFzbXxiZWdpbnxicmVha3xjYXNlfGNsYXNzfGRlZnxkb3xlbHNlfGVsc2lmfGVuZHxlbnN1cmV8ZW51bXxleHRlbmR8Zm9yfGZ1bnxpZnxpZmRlZnxpbmNsdWRlfGluc3RhbmNlX3NpemVvZnxsaWJ8bWFjcm98bW9kdWxlfG5leHR8b2Z8b3V0fHBvaW50ZXJvZnxwcml2YXRlfHByb3RlY3RlZHxwdHJ8cmVxdWlyZXxyZXNjdWV8cmV0dXJufHNlbGVjdHxzZWxmfHNpemVvZnxzdHJ1Y3R8c3VwZXJ8dGhlbnx0eXBlfHR5cGVvZnx1bmRlZnx1bmluaXRpYWxpemVkfHVuaW9ufHVubGVzc3x1bnRpbHx3aGVufHdoaWxlfHdpdGh8eWllbGQpXFxiLyxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC5cXHMqKSg/OmlzX2F8cmVzcG9uZHNfdG8pXFw/Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dKlswMV18MG9bMC03X10qWzAtN118MHhbXFxkYS1mQS1GX10qW1xcZGEtZkEtRl18KD86XFxkKD86W1xcZF9dKlxcZCk/KSg/OlxcLltcXGRfXSpcXGQpPyg/OltlRV1bKy1dP1tcXGRfXSpcXGQpPykoPzpfKD86W3VpZl0oPzo4fDE2fDMyfDY0KSk/KT9cXGIvLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC8tPi8sXG5cdFx0XHRQcmlzbS5sYW5ndWFnZXMucnVieS5vcGVyYXRvcixcblx0XHRdLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0uLDtcXFxcXS8sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NyeXN0YWwnLCAnc3RyaW5nLWxpdGVyYWwnLCB7XG5cdFx0J2F0dHJpYnV0ZSc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFxbLio/XFxdLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eQFxcW3xcXF0kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopXFx3Ky8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdhcmdzJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3J5c3RhbFxuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2V4cGFuc2lvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXHsoPzpcXHsuKj9cXH18JS4qPyUpXFx9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHsuKVtcXHNcXFNdKyg/PS5cXH0kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jcnlzdGFsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXHtbXFx7JV18W1xcfSVdXFx9JC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlteXFxcXFxcclxcbl17MSwyfXxcXFxcKD86Lnx1KD86W0EtRmEtZjAtOV17MSw0fXxcXHtbQS1GYS1mMC05XXsxLDZ9XFx9KSkpJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3RyaW5nID0gLyhcInwnKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvO1xuXHR2YXIgc2VsZWN0b3JJbnNpZGU7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmNzcy5zZWxlY3RvciA9IHtcblx0XHRwYXR0ZXJuOiBQcmlzbS5sYW5ndWFnZXMuY3NzLnNlbGVjdG9yLnBhdHRlcm4sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHNlbGVjdG9ySW5zaWRlID0ge1xuXHRcdFx0J3BzZXVkby1lbGVtZW50JzogLzooPzphZnRlcnxiZWZvcmV8Zmlyc3QtbGV0dGVyfGZpcnN0LWxpbmV8c2VsZWN0aW9uKXw6OlstXFx3XSsvLFxuXHRcdFx0J3BzZXVkby1jbGFzcyc6IC86Wy1cXHddKy8sXG5cdFx0XHQnY2xhc3MnOiAvXFwuWy1cXHddKy8sXG5cdFx0XHQnaWQnOiAvI1stXFx3XSsvLFxuXHRcdFx0J2F0dHJpYnV0ZSc6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdcXFxcWyg/OlteW1xcXFxdXCJcXCddfCcgKyBzdHJpbmcuc291cmNlICsgJykqXFxcXF0nKSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHQnY2FzZS1zZW5zaXRpdml0eSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXFxzKVtzaV0kL2ksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopKD86KD8hXFxzKVstKlxcd1xceEEwLVxcdUZGRkZdKSpcXHwoPyE9KS8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwkL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2F0dHItbmFtZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopKD86KD8hXFxzKVstXFx3XFx4QTAtXFx1RkZGRl0pKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnYXR0ci12YWx1ZSc6IFtcblx0XHRcdFx0XHRcdHN0cmluZyxcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg9XFxzKikoPzooPyFcXHMpWy1cXHdcXHhBMC1cXHVGRkZGXSkrKD89XFxzKiQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogL1t8fipeJF0/PS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCduLXRoJzogW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXChcXHMqKVsrLV0/XFxkKltcXGRuXSg/OlxccypbKy1dXFxzKlxcZCspPyg/PVxccypcXCkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J251bWJlcic6IC9bXFxkbl0rLyxcblx0XHRcdFx0XHRcdCdvcGVyYXRvcic6IC9bKy1dL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFwoXFxzKikoPzpldmVufG9kZCkoPz1cXHMqXFwpKS9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fVxuXHRcdFx0XSxcblx0XHRcdCdjb21iaW5hdG9yJzogLz58XFwrfH58XFx8XFx8LyxcblxuXHRcdFx0Ly8gdGhlIGB0YWdgIHRva2VuIGhhcyBiZWVuIGV4aXN0ZWQgYW5kIHJlbW92ZWQuXG5cdFx0XHQvLyBiZWNhdXNlIHdlIGNhbid0IGZpbmQgYSBwZXJmZWN0IHRva2VuaXplIHRvIG1hdGNoIGl0LlxuXHRcdFx0Ly8gaWYgeW91IHdhbnQgdG8gYWRkIGl0LCBwbGVhc2UgcmVhZCBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9wdWxsLzIzNzMgZmlyc3QuXG5cblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS8sXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jc3NbJ2F0cnVsZSddLmluc2lkZVsnc2VsZWN0b3ItZnVuY3Rpb24tYXJndW1lbnQnXS5pbnNpZGUgPSBzZWxlY3Rvckluc2lkZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjc3MnLCAncHJvcGVydHknLCB7XG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLVxcd1xceEEwLVxcdUZGRkZdKS0tKD8hXFxzKVstX2EtelxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVstXFx3XFx4QTAtXFx1RkZGRl0pKi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0dmFyIHVuaXQgPSB7XG5cdFx0cGF0dGVybjogLyhcXGJcXGQrKSg/OiV8W2Etel0rKD8hW1xcdy1dKSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fTtcblx0Ly8gMTIzIC0xMjMgLjEyMyAtLjEyMyAxMi4zIC0xMi4zXG5cdHZhciBudW1iZXIgPSB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Li1dKS0/KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzcycsICdmdW5jdGlvbicsIHtcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxccylbK1xcLSpcXC9dKD89XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvLyBDQVJFRlVMIVxuXHRcdC8vIFByZXZpZXdlcnMgYW5kIElubGluZSBjb2xvciB1c2UgaGV4Y29kZSBhbmQgY29sb3IuXG5cdFx0J2hleGNvZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxCI1tcXGRhLWZdezMsOH1cXGIvaSxcblx0XHRcdGFsaWFzOiAnY29sb3InXG5cdFx0fSxcblx0XHQnY29sb3InOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/OkFsaWNlQmx1ZXxBbnRpcXVlV2hpdGV8QXF1YXxBcXVhbWFyaW5lfEF6dXJlfEJlaWdlfEJpc3F1ZXxCbGFja3xCbGFuY2hlZEFsbW9uZHxCbHVlfEJsdWVWaW9sZXR8QnJvd258QnVybHlXb29kfENhZGV0Qmx1ZXxDaGFydHJldXNlfENob2NvbGF0ZXxDb3JhbHxDb3JuZmxvd2VyQmx1ZXxDb3Juc2lsa3xDcmltc29ufEN5YW58RGFya0JsdWV8RGFya0N5YW58RGFya0dvbGRlblJvZHxEYXJrR3JbYWVdeXxEYXJrR3JlZW58RGFya0toYWtpfERhcmtNYWdlbnRhfERhcmtPbGl2ZUdyZWVufERhcmtPcmFuZ2V8RGFya09yY2hpZHxEYXJrUmVkfERhcmtTYWxtb258RGFya1NlYUdyZWVufERhcmtTbGF0ZUJsdWV8RGFya1NsYXRlR3JbYWVdeXxEYXJrVHVycXVvaXNlfERhcmtWaW9sZXR8RGVlcFBpbmt8RGVlcFNreUJsdWV8RGltR3JbYWVdeXxEb2RnZXJCbHVlfEZpcmVCcmlja3xGbG9yYWxXaGl0ZXxGb3Jlc3RHcmVlbnxGdWNoc2lhfEdhaW5zYm9yb3xHaG9zdFdoaXRlfEdvbGR8R29sZGVuUm9kfEdyW2FlXXl8R3JlZW58R3JlZW5ZZWxsb3d8SG9uZXlEZXd8SG90UGlua3xJbmRpYW5SZWR8SW5kaWdvfEl2b3J5fEtoYWtpfExhdmVuZGVyfExhdmVuZGVyQmx1c2h8TGF3bkdyZWVufExlbW9uQ2hpZmZvbnxMaWdodEJsdWV8TGlnaHRDb3JhbHxMaWdodEN5YW58TGlnaHRHb2xkZW5Sb2RZZWxsb3d8TGlnaHRHclthZV15fExpZ2h0R3JlZW58TGlnaHRQaW5rfExpZ2h0U2FsbW9ufExpZ2h0U2VhR3JlZW58TGlnaHRTa3lCbHVlfExpZ2h0U2xhdGVHclthZV15fExpZ2h0U3RlZWxCbHVlfExpZ2h0WWVsbG93fExpbWV8TGltZUdyZWVufExpbmVufE1hZ2VudGF8TWFyb29ufE1lZGl1bUFxdWFNYXJpbmV8TWVkaXVtQmx1ZXxNZWRpdW1PcmNoaWR8TWVkaXVtUHVycGxlfE1lZGl1bVNlYUdyZWVufE1lZGl1bVNsYXRlQmx1ZXxNZWRpdW1TcHJpbmdHcmVlbnxNZWRpdW1UdXJxdW9pc2V8TWVkaXVtVmlvbGV0UmVkfE1pZG5pZ2h0Qmx1ZXxNaW50Q3JlYW18TWlzdHlSb3NlfE1vY2Nhc2lufE5hdmFqb1doaXRlfE5hdnl8T2xkTGFjZXxPbGl2ZXxPbGl2ZURyYWJ8T3JhbmdlfE9yYW5nZVJlZHxPcmNoaWR8UGFsZUdvbGRlblJvZHxQYWxlR3JlZW58UGFsZVR1cnF1b2lzZXxQYWxlVmlvbGV0UmVkfFBhcGF5YVdoaXB8UGVhY2hQdWZmfFBlcnV8UGlua3xQbHVtfFBvd2RlckJsdWV8UHVycGxlfFJlYmVjY2FQdXJwbGV8UmVkfFJvc3lCcm93bnxSb3lhbEJsdWV8U2FkZGxlQnJvd258U2FsbW9ufFNhbmR5QnJvd258U2VhR3JlZW58U2VhU2hlbGx8U2llbm5hfFNpbHZlcnxTa3lCbHVlfFNsYXRlQmx1ZXxTbGF0ZUdyW2FlXXl8U25vd3xTcHJpbmdHcmVlbnxTdGVlbEJsdWV8VGFufFRlYWx8VGhpc3RsZXxUb21hdG98VHJhbnNwYXJlbnR8VHVycXVvaXNlfFZpb2xldHxXaGVhdHxXaGl0ZXxXaGl0ZVNtb2tlfFllbGxvd3xZZWxsb3dHcmVlbikoPyFbXFx3LV0pL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpoc2x8cmdiKVxcKFxccypcXGR7MSwzfVxccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccypcXGR7MSwzfSU/XFxzKlxcKVxcQnxcXGIoPzpoc2x8cmdiKWFcXChcXHMqXFxkezEsM31cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKig/OjB8MD9cXC5cXGQrfDEpXFxzKlxcKVxcQi9pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndW5pdCc6IHVuaXQsXG5cdFx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0XHQnZnVuY3Rpb24nOiAvW1xcdy1dKyg/PVxcKCkvLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Ly8gaXQncyBpbXBvcnRhbnQgdGhhdCB0aGVyZSBpcyBubyBib3VuZGFyeSBhc3NlcnRpb24gYWZ0ZXIgdGhlIGhleCBkaWdpdHNcblx0XHQnZW50aXR5JzogL1xcXFxbXFxkYS1mXXsxLDh9L2ksXG5cdFx0J3VuaXQnOiB1bml0LFxuXHRcdCdudW1iZXInOiBudW1iZXJcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxODBcblxuUHJpc20ubGFuZ3VhZ2VzLmNzdiA9IHtcblx0J3ZhbHVlJzogL1teXFxyXFxuLFwiXSt8XCIoPzpbXlwiXXxcIlwiKSpcIig/IVwiKS8sXG5cdCdwdW5jdHVhdGlvbic6IC8sL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIGh0dHBzOi8vY3VlbGFuZy5vcmcvZG9jcy9yZWZlcmVuY2VzL3NwZWMvXG5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0dmFyIHN0cmluZ0VzY2FwZSA9IC9cXFxcKD86KD8hXFwyKXxcXDIoPzpbXigpXFxyXFxuXXxcXChbXigpXSpcXCkpKS8uc291cmNlO1xuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHR2YXIgc3RyaW5nVHlwZXMgPSAvXCJcIlwiKD86W15cXFxcXCJdfFwiKD8hXCJcIlxcMil8PGVzYz4pKlwiXCJcIi8uc291cmNlICtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdCd8JyArIC8nJycoPzpbXlxcXFwnXXwnKD8hJydcXDIpfDxlc2M+KSonJycvLnNvdXJjZSArXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHQnfCcgKyAvXCIoPzpbXlxcXFxcXHJcXG5cIl18XCIoPyFcXDIpfDxlc2M+KSpcIi8uc291cmNlICtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdCd8JyArIC8nKD86W15cXFxcXFxyXFxuJ118Jyg/IVxcMil8PGVzYz4pKicvLnNvdXJjZTtcblx0dmFyIHN0cmluZ0xpdGVyYWwgPSAnKD86JyArIHN0cmluZ1R5cGVzLnJlcGxhY2UoLzxlc2M+L2csIHN0cmluZ0VzY2FwZSkgKyAnKSc7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmN1ZSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC9cXC8uKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteI1wiJ1xcXFxdKSgjKikvLnNvdXJjZSArIHN0cmluZ0xpdGVyYWwgKyAvKD8hW1wiJ10pXFwyLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQvLyBJJ20gdXNpbmcgZGlydHkgaGFjayBoZXJlLiBXZSBoYXZlIHRvIGtub3cgdGhlIG51bWJlciBoYXNoZXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgc29tZWhvdyxcblx0XHRcdFx0Ly8gYnV0IHdlIGNhbid0IGxvb2sgYmFjay4gU28gaW5zdGVhZCwgd2Ugd2lsbCB1c2UgYSBsb29rYWhlYWQsIGdvIHRvIHRoZSBlbmQgb2YgdGhlIHN0cmluZywgYW5kXG5cdFx0XHRcdC8vIGNhcHR1cmUgdGhlIGhhc2hlcyBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmcuXG5cdFx0XHRcdCdlc2NhcGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyg/PVtcXHNcXFNdKltcIiddKCMqKSQpXFxcXFxcMSg/OlVbYS1mQS1GMC05XXsxLDh9fHVbYS1mQS1GMC05XXsxLDR9fHhbYS1mQS1GMC05XXsxLDJ9fFxcZHsyLDN9fFteKF0pLyxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPz1bXFxzXFxTXSpbXCInXSgjKikkKVxcXFxcXDFcXChbXigpXSpcXCkvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxcXCMqXFwofFxcKSQvLFxuXHRcdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG51bGxcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdyRdKSg/OmZvcnxpZnxpbXBvcnR8aW58bGV0fG51bGx8cGFja2FnZSkoPyFbXFx3JF0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdib29sZWFuJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pKD86ZmFsc2V8dHJ1ZSkoPyFbXFx3JF0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3JF0pKD86Ym9vbHxieXRlc3xmbG9hdHxmbG9hdCg/OjMyfDY0KXx1P2ludCg/Ojh8MTZ8MzJ8NjR8MTI4KT98bnVtYmVyfHJ1bmV8c3RyaW5nKSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogL0BbXFx3JF0rKD89XFxzKlxcKCkvLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdyRdKVthLXpfJF1bXFx3JF0qKD89XFxzKlxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdyQuXSkoPzowYlswMV0rKD86X1swMV0rKSp8MG9bMC03XSsoPzpfWzAtN10rKSp8MFt4WF1bMC05QS1GYS1mXSsoPzpfWzAtOUEtRmEtZl0rKSp8KD86XFxkKyg/Ol9cXGQrKSooPzpcXC4oPzpcXGQrKD86X1xcZCspKik/KT98XFwuXFxkKyg/Ol9cXGQrKSopKD86W2VFXVsrLV0/XFxkKyg/Ol9cXGQrKSopPyg/OltLTUdUUF1pPyk/KSg/IVtcXHckXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnb3BlcmF0b3InOiAvXFwuezN9fF9cXHxffCYmP3xcXHxcXHw/fFs9IV1+fFs8Pj0hXT0/fFsrXFwtKi8/XS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSwuOl0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmN1ZVsnc3RyaW5nLWxpdGVyYWwnXS5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuY3VlO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5jeXBoZXIgPSB7XG5cdC8vIGh0dHBzOi8vbmVvNGouY29tL2RvY3MvY3lwaGVyLW1hbnVhbC9jdXJyZW50L3N5bnRheC9jb21tZW50cy9cblx0J2NvbW1lbnQnOiAvXFwvXFwvLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwuKSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyg6XFxzKikoPzpcXHcrfGAoPzpbXmBcXFxcXFxyXFxuXSkqYCkoPz1cXHMqW3spOl0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncmVsYXRpb25zaGlwJzoge1xuXHRcdHBhdHRlcm46IC8oLVxcW1xccyooPzpcXHcrXFxzKnxgKD86W15gXFxcXFxcclxcbl0pKmBcXHMqKT86XFxzKnxcXHxcXHMqOlxccyopKD86XFx3K3xgKD86W15gXFxcXFxcclxcbl0pKmApLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvYCg/OlteYFxcXFxcXHJcXG5dKSpgLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQndmFyaWFibGUnOiAvXFwkXFx3Ky8sXG5cblx0Ly8gaHR0cHM6Ly9uZW80ai5jb20vZG9jcy9jeXBoZXItbWFudWFsL2N1cnJlbnQvc3ludGF4L3Jlc2VydmVkL1xuXHQna2V5d29yZCc6IC9cXGIoPzpBRER8QUxMfEFORHxBU3xBU0N8QVNDRU5ESU5HfEFTU0VSVHxCWXxDQUxMfENBU0V8Q09NTUlUfENPTlNUUkFJTlR8Q09OVEFJTlN8Q1JFQVRFfENTVnxERUxFVEV8REVTQ3xERVNDRU5ESU5HfERFVEFDSHxESVNUSU5DVHxET3xEUk9QfEVMU0V8RU5EfEVORFN8RVhJU1RTfEZPUnxGT1JFQUNIfElOfElOREVYfElTfEpPSU58S0VZfExJTUlUfExPQUR8TUFOREFUT1JZfE1BVENIfE1FUkdFfE5PREV8Tk9UfE9GfE9OfE9QVElPTkFMfE9SfE9SREVSKD89XFxzK0JZKXxQRVJJT0RJQ3xSRU1PVkV8UkVRVUlSRXxSRVRVUk58U0NBTEFSfFNDQU58U0VUfFNLSVB8U1RBUlR8U1RBUlRTfFRIRU58VU5JT058VU5JUVVFfFVOV0lORHxVU0lOR3xXSEVOfFdIRVJFfFdJVEh8WE9SfFlJRUxEKVxcYi9pLFxuXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrXFxiKD89XFxzKlxcKCkvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG51bGx8dHJ1ZSlcXGIvaSxcblx0J251bWJlcic6IC9cXGIoPzoweFtcXGRhLWZBLUZdK3xcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/KVxcYi8sXG5cdC8vIGh0dHBzOi8vbmVvNGouY29tL2RvY3MvY3lwaGVyLW1hbnVhbC9jdXJyZW50L3N5bnRheC9vcGVyYXRvcnMvXG5cdCdvcGVyYXRvcic6IC86fDwtLT98LS0/Pj98PD58PX4/fFs8Pl09P3xbKyovJV58XXxcXC5cXC5cXC4/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSw7Ll0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHQvLyBTaGViYW5nXG5cdFx0XHRwYXR0ZXJuOiAvXlxccyojIS4rLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbXlxcXFxdKS8uc291cmNlICsgJyg/OicgKyBbXG5cdFx0XHRcdC8vIC8rIGNvbW1lbnQgKy9cblx0XHRcdFx0Ly8gQWxsb3cgb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHRcdFx0L1xcL1xcKyg/OlxcL1xcKyg/OlteK118XFwrKD8hXFwvKSkqXFwrXFwvfCg/IVxcL1xcKylbXFxzXFxTXSkqP1xcK1xcLy8uc291cmNlLFxuXHRcdFx0XHQvLyAvLyBjb21tZW50XG5cdFx0XHRcdC9cXC9cXC8uKi8uc291cmNlLFxuXHRcdFx0XHQvLyAvKiBjb21tZW50ICovXG5cdFx0XHRcdC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvLy5zb3VyY2Vcblx0XHRcdF0uam9pbignfCcpICsgJyknKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFtcblx0XHRcdFx0Ly8gclwiXCIsIHhcIlwiXG5cdFx0XHRcdC9cXGJbcnhdXCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIltjd2RdPy8uc291cmNlLFxuXG5cdFx0XHRcdC8vIHFcIltdXCIsIHFcIigpXCIsIHFcIjw+XCIsIHFcInt9XCJcblx0XHRcdFx0L1xcYnFcIig/OlxcW1tcXHNcXFNdKj9cXF18XFwoW1xcc1xcU10qP1xcKXw8W1xcc1xcU10qPz58XFx7W1xcc1xcU10qP1xcfSlcIi8uc291cmNlLFxuXG5cdFx0XHRcdC8vIHFcIklERU5UXG5cdFx0XHRcdC8vIC4uLlxuXHRcdFx0XHQvLyBJREVOVFwiXG5cdFx0XHRcdC9cXGJxXCIoKD8hXFxkKVxcdyspJFtcXHNcXFNdKj9eXFwxXCIvLnNvdXJjZSxcblxuXHRcdFx0XHQvLyBxXCIvL1wiLCBxXCJ8fFwiLCBldGMuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdC9cXGJxXCIoLilbXFxzXFxTXSo/XFwyXCIvLnNvdXJjZSxcblxuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0XHQvKFtcImBdKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDMpW15cXFxcXSkqXFwzW2N3ZF0/Ly5zb3VyY2Vcblx0XHRcdF0uam9pbignfCcpLCAnbScpLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxicVxceyg/Olxce1tee31dKlxcfXxbXnt9XSkqXFx9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndG9rZW4tc3RyaW5nJ1xuXHRcdH1cblx0XSxcblxuXHQvLyBJbiBvcmRlcjogJCwga2V5d29yZHMgYW5kIHNwZWNpYWwgdG9rZW5zLCBnbG9iYWxseSBkZWZpbmVkIHN5bWJvbHNcblx0J2tleXdvcmQnOiAvXFwkfFxcYig/Ol9fKD86KD86REFURXxFT0Z8RklMRXxGVU5DVElPTnxMSU5FfE1PRFVMRXxQUkVUVFlfRlVOQ1RJT058VElNRVNUQU1QfFRJTUV8VkVORE9SfFZFUlNJT04pX198Z3NoYXJlZHxwYXJhbWV0ZXJzfHRyYWl0c3x2ZWN0b3IpfGFic3RyYWN0fGFsaWFzfGFsaWdufGFzbXxhc3NlcnR8YXV0b3xib2R5fGJvb2x8YnJlYWt8Ynl0ZXxjYXNlfGNhc3R8Y2F0Y2h8Y2RvdWJsZXxjZW50fGNmbG9hdHxjaGFyfGNsYXNzfGNvbnN0fGNvbnRpbnVlfGNyZWFsfGRjaGFyfGRlYnVnfGRlZmF1bHR8ZGVsZWdhdGV8ZGVsZXRlfGRlcHJlY2F0ZWR8ZG98ZG91YmxlfGRzdHJpbmd8ZWxzZXxlbnVtfGV4cG9ydHxleHRlcm58ZmFsc2V8ZmluYWx8ZmluYWxseXxmbG9hdHxmb3J8Zm9yZWFjaHxmb3JlYWNoX3JldmVyc2V8ZnVuY3Rpb258Z290b3xpZG91YmxlfGlmfGlmbG9hdHxpbW11dGFibGV8aW1wb3J0fGlub3V0fGludHxpbnRlcmZhY2V8aW52YXJpYW50fGlyZWFsfGxhenl8bG9uZ3xtYWNyb3xtaXhpbnxtb2R1bGV8bmV3fG5vdGhyb3d8bnVsbHxvdXR8b3ZlcnJpZGV8cGFja2FnZXxwcmFnbWF8cHJpdmF0ZXxwcm90ZWN0ZWR8cHRyZGlmZl90fHB1YmxpY3xwdXJlfHJlYWx8cmVmfHJldHVybnxzY29wZXxzaGFyZWR8c2hvcnR8c2l6ZV90fHN0YXRpY3xzdHJpbmd8c3RydWN0fHN1cGVyfHN3aXRjaHxzeW5jaHJvbml6ZWR8dGVtcGxhdGV8dGhpc3x0aHJvd3x0cnVlfHRyeXx0eXBlZGVmfHR5cGVpZHx0eXBlb2Z8dWJ5dGV8dWNlbnR8dWludHx1bG9uZ3x1bmlvbnx1bml0dGVzdHx1c2hvcnR8dmVyc2lvbnx2b2lkfHZvbGF0aWxlfHdjaGFyfHdoaWxlfHdpdGh8d3N0cmluZylcXGIvLFxuXG5cdCdudW1iZXInOiBbXG5cdFx0Ly8gVGhlIGxvb2tiZWhpbmQgYW5kIHRoZSBuZWdhdGl2ZSBsb29rLWFoZWFkIHRyeSB0byBwcmV2ZW50IGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlIC4uIG9wZXJhdG9yXG5cdFx0Ly8gSGV4YWRlY2ltYWwgbnVtYmVycyBtdXN0IGJlIGhhbmRsZWQgc2VwYXJhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGV4cG9uZW50IFwiZVwiXG5cdFx0L1xcYjB4XFwuP1thLWZcXGRfXSsoPzooPyFcXC5cXC4pXFwuW2EtZlxcZF9dKik/KD86cFsrLV0/W2EtZlxcZF9dKyk/W3VsZmldezAsNH0vaSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcLlxcLik/KSg/OlxcYjBiXFwuP3xcXGJ8XFwuKVxcZFtcXGRfXSooPzooPyFcXC5cXC4pXFwuW1xcZF9dKik/KD86ZVsrLV0/XFxkW1xcZF9dKik/W3VsZmldezAsNH0vaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cblx0J29wZXJhdG9yJzogL1xcfFt8PV0/fCZbJj1dP3xcXCtbKz1dP3wtWy09XT98XFwuP1xcLlxcLnw9Wz49XT98ISg/OmlbbnNdXFxifDw+Pz0/fD49P3w9KT98XFxiaVtuc11cXGJ8KD86PFs8Pl0/fD4+Pz4/fFxcXlxcXnxbKlxcLyVefl0pPT8vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZCcsICdzdHJpbmcnLCB7XG5cdC8vIENoYXJhY3RlcnNcblx0Ly8gJ2EnLCAnXFxcXCcsICdcXG4nLCAnXFx4RkYnLCAnXFwzNzcnLCAnXFx1RkZGRicsICdcXFUwMDEwRkZGRicsICdcXHF1b3QnXG5cdCdjaGFyJzogLycoPzpcXFxcKD86XFxXfFxcdyspfFteXFxcXF0pJy9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkJywgJ2tleXdvcmQnLCB7XG5cdCdwcm9wZXJ0eSc6IC9cXEJAXFx3Ki9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdkJywgJ2Z1bmN0aW9uJywge1xuXHQncmVnaXN0ZXInOiB7XG5cdFx0Ly8gSWFzbSByZWdpc3RlcnNcblx0XHRwYXR0ZXJuOiAvXFxiKD86W0FCQ0RdW0xIWF18RT8oPzpCUHxESXxTSXxTUCl8W0JTXVBMfFtFQ1NER0ZdU3xDUlswMjM0XXxbRFNdSUx8RFJbMDEyMzY3XXxFW0FCQ0RdWHxYP01NWzAtN118Uig/OjFbMC01XXxbODldKVtCV0RdP3xSW0FCQ0RdWHxSW0JTXVB8UltEU11JfFRSWzMtN118WE1NKD86MVswLTVdfFs4OV0pfFlNTSg/OjFbMC01XXxcXGQpKVxcYnxcXGJTVCg/OlxcKFswLTddXFwpfFxcYikvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciBrZXl3b3JkcyA9IFtcblx0XHQvXFxiKD86YXN5bmN8c3luY3x5aWVsZClcXCovLFxuXHRcdC9cXGIoPzphYnN0cmFjdHxhc3NlcnR8YXN5bmN8YXdhaXR8YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb25zdHxjb250aW51ZXxjb3ZhcmlhbnR8ZGVmYXVsdHxkZWZlcnJlZHxkb3xkeW5hbWljfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xleHRlbnNpb258ZXh0ZXJuYWx8ZmFjdG9yeXxmaW5hbHxmaW5hbGx5fGZvcnxnZXR8aGlkZXxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbnRlcmZhY2V8bGlicmFyeXxtaXhpbnxuZXd8bnVsbHxvbnxvcGVyYXRvcnxwYXJ0fHJldGhyb3d8cmV0dXJufHNldHxzaG93fHN0YXRpY3xzdXBlcnxzd2l0Y2h8c3luY3x0aGlzfHRocm93fHRyeXx0eXBlZGVmfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiL1xuXHRdO1xuXG5cdC8vIEhhbmRsZXMgbmFtZWQgaW1wb3J0cywgc3VjaCBhcyBodHRwLkNsaWVudFxuXHR2YXIgcGFja2FnZVByZWZpeCA9IC8oXnxbXlxcdy5dKSg/OlthLXpdXFx3KlxccypcXC5cXHMqKSooPzpbQS1aXVxcdypcXHMqXFwuXFxzKikqLy5zb3VyY2U7XG5cblx0Ly8gYmFzZWQgb24gdGhlIGRhcnQgbmFtaW5nIGNvbnZlbnRpb25zXG5cdHZhciBjbGFzc05hbWUgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHBhY2thZ2VQcmVmaXggKyAvW0EtWl0oPzpbXFxkX0EtWl0qW2Etel1cXHcqKT9cXGIvLnNvdXJjZSksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eW2Etel1cXHcqKD86XFxzKlxcLlxccypbYS16XVxcdyopKig/OlxccypcXC4pPy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5kYXJ0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHZhcmlhYmxlcyBhbmQgcGFyYW1ldGVyc1xuXHRcdFx0XHQvLyB0aGlzIHRvIHN1cHBvcnQgY2xhc3MgbmFtZXMgKG9yIGdlbmVyaWMgcGFyYW1ldGVycykgd2hpY2ggZG8gbm90IGNvbnRhaW4gYSBsb3dlciBjYXNlIGxldHRlciAoYWxzbyB3b3JrcyBmb3IgbWV0aG9kcylcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHBhY2thZ2VQcmVmaXggKyAvW0EtWl1cXHcqKD89XFxzK1xcdytcXHMqWzssPSgpXSkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY2xhc3NOYW1lLmluc2lkZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnb3BlcmF0b3InOiAvXFxiaXMhfFxcYig/OmFzfGlzKVxcYnxcXCtcXCt8LS18JiZ8XFx8XFx8fDw8PT98Pj49P3x+KD86XFwvPT8pP3xbK1xcLSpcXC8lJl58PSE8Pl09P3xcXD8vXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2RhcnQnLCAnc3RyaW5nJywge1xuXHRcdCdzdHJpbmctbGl0ZXJhbCc6IHtcblx0XHRcdHBhdHRlcm46IC9yPyg/OihcIlwiXCJ8JycnKVtcXHNcXFNdKj9cXDF8KFtcIiddKSg/OlxcXFwufCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIoPyFcXDIpKS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJCg/Olxcdyt8XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5kYXJ0XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB1bmRlZmluZWRcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZGFydCcsICdjbGFzcy1uYW1lJywge1xuXHRcdCdtZXRhZGF0YSc6IHtcblx0XHRcdHBhdHRlcm46IC9AXFx3Ky8sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZGFydCcsICdjbGFzcy1uYW1lJywge1xuXHRcdCdnZW5lcmljcyc6IHtcblx0XHRcdHBhdHRlcm46IC88KD86W1xcd1xccywuJj9dfDwoPzpbXFx3XFxzLC4mP118PCg/OltcXHdcXHMsLiY/XXw8W1xcd1xccywuJj9dKj4pKj4pKj4pKj4vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogY2xhc3NOYW1lLFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+KCksLjpdLyxcblx0XHRcdFx0J29wZXJhdG9yJzogL1s/JnxdL1xuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5kYXRhd2VhdmUgPSB7XG5cdFx0J3VybCc6IC9cXGJbQS1aYS16XSs6XFwvXFwvW1xcdy86Lj89Ji1dK3xcXGJ1cm46W1xcdzouPz0mLV0rLyxcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86XFxiXFx3KyMpPyg/OlwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcInxcXGJcXHcrKSg/PVxccypbOkBdKS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdtaW1lLXR5cGUnOiAvXFxiKD86YXBwbGljYXRpb258YXVkaW98aW1hZ2V8bXVsdGlwYXJ0fHRleHR8dmlkZW8pXFwvW1xcdystXSsvLFxuXHRcdCdkYXRlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcfFtcXHc6Ky1dK1xcfC8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcOl0pXFwvXFwvLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdyZWdleCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC8oPzpbXlxcXFxcXC9cXHJcXG5dfFxcXFxbXlxcclxcbl0pK1xcLy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xhdHxjYXNlfGRvfGVsc2V8ZnVufGlmfGlucHV0fGlzfG1hdGNofG5vdHxuc3xudWxsfG9yfG91dHB1dHx0eXBlfHVubGVzc3x1cGRhdGV8dXNpbmd8dmFyKVxcYi8sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYltBLVpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHRcdCdudW1iZXInOiAvLT9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpAXS8sXG5cdFx0J29wZXJhdG9yJzogLzw8fD4+fC0+fFs8Pn49XT0/fCE9fC0tPy0/fFxcK1xcKz98IXxcXD8vLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZGF4ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCg/Oi0tfFxcL1xcLykuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2RhdGEtZmllbGQnOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXiddfCcnKSonKD8hJykoPzpcXFtbIFxcd1xceEEwLVxcdUZGRkZdK1xcXSk/fFxcdytcXFtbIFxcd1xceEEwLVxcdUZGRkZdK1xcXS8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdtZWFzdXJlJzoge1xuXHRcdHBhdHRlcm46IC9cXFtbIFxcd1xceEEwLVxcdUZGRkZdK1xcXS8sXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGIoPzpBQlN8QUNPU3xBQ09TSHxBQ09UfEFDT1RIfEFERENPTFVNTlN8QURETUlTU0lOR0lURU1TfEFMTHxBTExDUk9TU0ZJTFRFUkVEfEFMTEVYQ0VQVHxBTExOT0JMQU5LUk9XfEFMTFNFTEVDVEVEfEFORHxBUFBST1hJTUFURURJU1RJTkNUQ09VTlR8QVNJTnxBU0lOSHxBVEFOfEFUQU5IfEFWRVJBR0V8QVZFUkFHRUF8QVZFUkFHRVh8QkVUQVxcLkRJU1R8QkVUQVxcLklOVnxCTEFOS3xDQUxDVUxBVEV8Q0FMQ1VMQVRFVEFCTEV8Q0FMRU5EQVJ8Q0FMRU5EQVJBVVRPfENFSUxJTkd8Q0hJU1FcXC5ESVNUfENISVNRXFwuRElTVFxcLlJUfENISVNRXFwuSU5WfENISVNRXFwuSU5WXFwuUlR8Q0xPU0lOR0JBTEFOQ0VNT05USHxDTE9TSU5HQkFMQU5DRVFVQVJURVJ8Q0xPU0lOR0JBTEFOQ0VZRUFSfENPQUxFU0NFfENPTUJJTnxDT01CSU5BfENPTUJJTkVWQUxVRVN8Q09OQ0FURU5BVEV8Q09OQ0FURU5BVEVYfENPTkZJREVOQ0VcXC5OT1JNfENPTkZJREVOQ0VcXC5UfENPTlRBSU5TfENPTlRBSU5TUk9XfENPTlRBSU5TU1RSSU5HfENPTlRBSU5TU1RSSU5HRVhBQ1R8Q09OVkVSVHxDT1N8Q09TSHxDT1R8Q09USHxDT1VOVHxDT1VOVEF8Q09VTlRBWHxDT1VOVEJMQU5LfENPVU5UUk9XU3xDT1VOVFh8Q1JPU1NGSUxURVJ8Q1JPU1NKT0lOfENVUlJFTkNZfENVUlJFTlRHUk9VUHxDVVNUT01EQVRBfERBVEFUQUJMRXxEQVRFfERBVEVBRER8REFURURJRkZ8REFURVNCRVRXRUVOfERBVEVTSU5QRVJJT0R8REFURVNNVER8REFURVNRVER8REFURVNZVER8REFURVZBTFVFfERBWXxERUdSRUVTfERFVEFJTFJPV1N8RElTVElOQ1R8RElTVElOQ1RDT1VOVHxESVNUSU5DVENPVU5UTk9CTEFOS3xESVZJREV8RUFSTElFUnxFQVJMSUVTVHxFREFURXxFTkRPRk1PTlRIfEVORE9GUVVBUlRFUnxFTkRPRllFQVJ8RU9NT05USHxFUlJPUnxFVkVOfEVYQUNUfEVYQ0VQVHxFWFB8RVhQT05cXC5ESVNUfEZBQ1R8RkFMU0V8RklMVEVSfEZJTFRFUlN8RklORHxGSVJTVERBVEV8RklSU1ROT05CTEFOS3xGSVJTVE5PTkJMQU5LVkFMVUV8RklYRUR8RkxPT1J8Rk9STUFUfEdDRHxHRU5FUkFURXxHRU5FUkFURUFMTHxHRU5FUkFURVNFUklFU3xHRU9NRUFOfEdFT01FQU5YfEdST1VQQll8SEFTT05FRklMVEVSfEhBU09ORVZBTFVFfEhPVVJ8SUZ8SUZcXC5FQUdFUnxJRkVSUk9SfElHTk9SRXxJTlR8SU5URVJTRUNUfElTQkxBTkt8SVNDUk9TU0ZJTFRFUkVEfElTRU1QVFl8SVNFUlJPUnxJU0VWRU58SVNGSUxURVJFRHxJU0lOU0NPUEV8SVNMT0dJQ0FMfElTTk9OVEVYVHxJU05VTUJFUnxJU09cXC5DRUlMSU5HfElTT0REfElTT05PUkFGVEVSfElTU0VMRUNURURNRUFTVVJFfElTU1VCVE9UQUx8SVNURVhUfEtFRVBGSUxURVJTfEtFWVdPUkRNQVRDSHxMQVNUREFURXxMQVNUTk9OQkxBTkt8TEFTVE5PTkJMQU5LVkFMVUV8TENNfExFRlR8TEVOfExOfExPR3xMT0cxMHxMT09LVVBWQUxVRXxMT1dFUnxNQVh8TUFYQXxNQVhYfE1FRElBTnxNRURJQU5YfE1JRHxNSU58TUlOQXxNSU5VVEV8TUlOWHxNT0R8TU9OVEh8TVJPVU5EfE5BVFVSQUxJTk5FUkpPSU58TkFUVVJBTExFRlRPVVRFUkpPSU58TkVYVERBWXxORVhUTU9OVEh8TkVYVFFVQVJURVJ8TkVYVFlFQVJ8Tk9OVklTVUFMfE5PUk1cXC5ESVNUfE5PUk1cXC5JTlZ8Tk9STVxcLlNcXC5ESVNUfE5PUk1cXC5TXFwuSU5WfE5PVHxOT1d8T0REfE9QRU5JTkdCQUxBTkNFTU9OVEh8T1BFTklOR0JBTEFOQ0VRVUFSVEVSfE9QRU5JTkdCQUxBTkNFWUVBUnxPUnxQQVJBTExFTFBFUklPRHxQQVRIfFBBVEhDT05UQUlOU3xQQVRISVRFTXxQQVRISVRFTVJFVkVSU0V8UEFUSExFTkdUSHxQRVJDRU5USUxFXFwuRVhDfFBFUkNFTlRJTEVcXC5JTkN8UEVSQ0VOVElMRVhcXC5FWEN8UEVSQ0VOVElMRVhcXC5JTkN8UEVSTVVUfFBJfFBPSVNTT05cXC5ESVNUfFBPV0VSfFBSRVZJT1VTREFZfFBSRVZJT1VTTU9OVEh8UFJFVklPVVNRVUFSVEVSfFBSRVZJT1VTWUVBUnxQUk9EVUNUfFBST0RVQ1RYfFFVQVJURVJ8UVVPVElFTlR8UkFESUFOU3xSQU5EfFJBTkRCRVRXRUVOfFJBTktcXC5FUXxSQU5LWHxSRUxBVEVEfFJFTEFURURUQUJMRXxSRU1PVkVGSUxURVJTfFJFUExBQ0V8UkVQVHxSSUdIVHxST0xMVVB8Uk9MTFVQQURESVNTVUJUT1RBTHxST0xMVVBHUk9VUHxST0xMVVBJU1NVQlRPVEFMfFJPVU5EfFJPVU5ERE9XTnxST1VORFVQfFJPV3xTQU1FUEVSSU9ETEFTVFlFQVJ8U0FNUExFfFNFQVJDSHxTRUNPTkR8U0VMRUNUQ09MVU1OU3xTRUxFQ1RFRE1FQVNVUkV8U0VMRUNURURNRUFTVVJFRk9STUFUU1RSSU5HfFNFTEVDVEVETUVBU1VSRU5BTUV8U0VMRUNURURWQUxVRXxTSUdOfFNJTnxTSU5IfFNRUlR8U1FSVFBJfFNUQVJUT0ZNT05USHxTVEFSVE9GUVVBUlRFUnxTVEFSVE9GWUVBUnxTVERFVlxcLlB8U1RERVZcXC5TfFNUREVWWFxcLlB8U1RERVZYXFwuU3xTVUJTVElUVVRFfFNVQlNUSVRVVEVXSVRISU5ERVh8U1VNfFNVTU1BUklaRXxTVU1NQVJJWkVDT0xVTU5TfFNVTVh8U1dJVENIfFRcXC5ESVNUfFRcXC5ESVNUXFwuMlR8VFxcLkRJU1RcXC5SVHxUXFwuSU5WfFRcXC5JTlZcXC4yVHxUQU58VEFOSHxUSU1FfFRJTUVWQUxVRXxUT0RBWXxUT1BOfFRPUE5QRVJMRVZFTHxUT1BOU0tJUHxUT1RBTE1URHxUT1RBTFFURHxUT1RBTFlURHxUUkVBVEFTfFRSSU18VFJVRXxUUlVOQ3xVTklDSEFSfFVOSUNPREV8VU5JT058VVBQRVJ8VVNFUkVMQVRJT05TSElQfFVTRVJOQU1FfFVTRVJPQkpFQ1RJRHxVU0VSUFJJTkNJUEFMTkFNRXxVVENOT1d8VVRDVE9EQVl8VkFMVUV8VkFMVUVTfFZBUlxcLlB8VkFSXFwuU3xWQVJYXFwuUHxWQVJYXFwuU3xXRUVLREFZfFdFRUtOVU18WElSUnxYTlBWfFlFQVJ8WUVBUkZSQUMpKD89XFxzKlxcKCkvaSxcblx0J2tleXdvcmQnOiAvXFxiKD86REVGSU5FfEVWQUxVQVRFfE1FQVNVUkV8T1JERVJcXHMrQll8UkVUVVJOfFZBUnxTVEFSVFxccytBVHxBU0N8REVTQylcXGIvaSxcblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OkZBTFNFfE5VTEx8VFJVRSlcXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkK1xcYi8sXG5cdCdvcGVyYXRvcic6IC86PXxbLSsqXFwvPV5dfCYmP3xcXHxcXHx8PCg/Oj0+P3w8fD4pP3w+Wz49XT98XFxiKD86SU58Tk9UKVxcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvWztcXFtcXF0oKXt9YCwuXS9cbn07XG5cbi8vIEFCTkYgZ3JhbW1hcjpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kaGFsbC1sYW5nL2RoYWxsLWxhbmcvYmxvYi9tYXN0ZXIvc3RhbmRhcmQvZGhhbGwuYWJuZlxuXG5QcmlzbS5sYW5ndWFnZXMuZGhhbGwgPSB7XG5cdC8vIE11bHRpLWxpbmUgY29tbWVudHMgY2FuIGJlIG5lc3RlZC4gRS5nLiB7LSBmb28gey0gYmFyIC19IC19XG5cdC8vIFRoZSBtdWx0aS1saW5lIHBhdHRlcm4gaXMgZXNzZW50aWFsbHkgdGhpczpcblx0Ly8gICBcXHstKD86W14te118LSg/IVxcfSl8XFx7KD8hLSl8PFNFTEY+KSotXFx9XG5cdCdjb21tZW50JzogLy0tLip8XFx7LSg/OlteLXtdfC0oPyFcXH0pfFxceyg/IS0pfFxcey0oPzpbXi17XXwtKD8hXFx9KXxcXHsoPyEtKSkqLVxcfSkqLVxcfS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcInwnJyg/OlteJ118Jyg/IScpfCcnJ3wnJ1xcJFxceykqJycoPyEnfFxcJCkvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFx7W157fV0qXFx9Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXCRcXHspW1xcc1xcU10rKD89XFx9JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtZGhhbGwnLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBibG93XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwkXFx7fFxcfS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2xhYmVsJzoge1xuXHRcdHBhdHRlcm46IC9gW15gXSpgLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3VybCc6IHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZGhhbGwtbGFuZy9kaGFsbC1sYW5nL2Jsb2IvNWZkZThlZjFiZWFkNmZiNGU5OTlkM2MxZmZlNzA0NGNkMDE5ZDYzYS9zdGFuZGFyZC9kaGFsbC5hYm5mI0w1OTZcblx0XHRwYXR0ZXJuOiAvXFxiaHR0cHM/OlxcL1xcL1tcXHcuOiUhJCYnKis7PUB+LV0rKD86XFwvW1xcdy46JSEkJicqKzs9QH4tXSopKig/OlxcP1svP1xcdy46JSEkJicqKzs9QH4tXSopPy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdlbnYnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2RoYWxsLWxhbmcvZGhhbGwtbGFuZy9ibG9iLzVmZGU4ZWYxYmVhZDZmYjRlOTk5ZDNjMWZmZTcwNDRjZDAxOWQ2M2Evc3RhbmRhcmQvZGhhbGwuYWJuZiNMNjYxXG5cdFx0cGF0dGVybjogL1xcYmVudjooPzooPyFcXGQpXFx3K3xcIig/OlteXCJcXFxcPV18XFxcXC4pKlwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Z1bmN0aW9uJzogL15lbnYvLFxuXHRcdFx0J29wZXJhdG9yJzogL146Lyxcblx0XHRcdCd2YXJpYWJsZSc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnaGFzaCc6IHtcblx0XHQvLyBodHRwczovL2dpdGh1Yi5jb20vZGhhbGwtbGFuZy9kaGFsbC1sYW5nL2Jsb2IvNWZkZThlZjFiZWFkNmZiNGU5OTlkM2MxZmZlNzA0NGNkMDE5ZDYzYS9zdGFuZGFyZC9kaGFsbC5hYm5mI0w3MjVcblx0XHRwYXR0ZXJuOiAvXFxic2hhMjU2OltcXGRhLWZBLUZdezY0fVxcYi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvc2hhMjU2Lyxcblx0XHRcdCdvcGVyYXRvcic6IC86Lyxcblx0XHRcdCdudW1iZXInOiAvW1xcZGEtZkEtRl17NjR9L1xuXHRcdH1cblx0fSxcblxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vZGhhbGwtbGFuZy9kaGFsbC1sYW5nL2Jsb2IvNWZkZThlZjFiZWFkNmZiNGU5OTlkM2MxZmZlNzA0NGNkMDE5ZDYzYS9zdGFuZGFyZC9kaGFsbC5hYm5mI0wzNTlcblx0J2tleXdvcmQnOiAvXFxiKD86YXN8YXNzZXJ0fGVsc2V8Zm9yYWxsfGlmfGlufGxldHxtZXJnZXxtaXNzaW5nfHRoZW58dG9NYXB8dXNpbmd8d2l0aClcXGJ8XFx1MjIwMC8sXG5cdCdidWlsdGluJzogL1xcYig/Ok5vbmV8U29tZSlcXGIvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfFRydWUpXFxiLyxcblx0J251bWJlcic6IC9cXGJOYU5cXGJ8LT9cXGJJbmZpbml0eVxcYnxbKy1dP1xcYig/OjB4W1xcZGEtZkEtRl0rfFxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8pXFxiLyxcblx0J29wZXJhdG9yJzogL1xcL1xcXFx8XFwvXFwvXFxcXFxcXFx8JiZ8XFx8XFx8fD09PXxbIT1dPXxcXC9cXC98LT58XFwrXFwrfDo6fFsrKiNAPTo/PD58XFxcXFxcdTIyMjdcXHUyYTUzXFx1MjI2MVxcdTJhZmRcXHUwM2JiXFx1MjE5Ml0vLFxuXHQncHVuY3R1YXRpb24nOiAvXFwuXFwufFt7fVxcW1xcXSgpLC4vXS8sXG5cblx0Ly8gd2UnbGwganVzdCBhc3N1bWUgdGhhdCBldmVyeSBjYXBpdGFsIHdvcmQgbGVmdCBpcyBhIHR5cGUgbmFtZVxuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVxcdypcXGIvXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZGhhbGwuc3RyaW5nLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5kaGFsbDtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5kaWZmID0ge1xuXHRcdCdjb29yZCc6IFtcblx0XHRcdC8vIE1hdGNoIGFsbCBraW5kcyBvZiBjb29yZCBsaW5lcyAocHJlZml4ZWQgYnkgXCIrKytcIiwgXCItLS1cIiBvciBcIioqKlwiKS5cblx0XHRcdC9eKD86XFwqezN9fC17M318XFwrezN9KS4qJC9tLFxuXHRcdFx0Ly8gTWF0Y2ggXCJAQCAuLi4gQEBcIiBjb29yZCBsaW5lcyBpbiB1bmlmaWVkIGRpZmYuXG5cdFx0XHQvXkBALipAQCQvbSxcblx0XHRcdC8vIE1hdGNoIGNvb3JkIGxpbmVzIGluIG5vcm1hbCBkaWZmIChzdGFydHMgd2l0aCBhIG51bWJlcikuXG5cdFx0XHQvXlxcZC4qJC9tXG5cdFx0XVxuXG5cdFx0Ly8gZGVsZXRlZCwgaW5zZXJ0ZWQsIHVuY2hhbmdlZCwgZGlmZlxuXHR9O1xuXG5cdC8qKlxuXHQgKiBBIG1hcCBmcm9tIHRoZSBuYW1lIG9mIGEgYmxvY2sgdG8gaXRzIGxpbmUgcHJlZml4LlxuXHQgKlxuXHQgKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgc3RyaW5nPn1cblx0ICovXG5cdHZhciBQUkVGSVhFUyA9IHtcblx0XHQnZGVsZXRlZC1zaWduJzogJy0nLFxuXHRcdCdkZWxldGVkLWFycm93JzogJzwnLFxuXHRcdCdpbnNlcnRlZC1zaWduJzogJysnLFxuXHRcdCdpbnNlcnRlZC1hcnJvdyc6ICc+Jyxcblx0XHQndW5jaGFuZ2VkJzogJyAnLFxuXHRcdCdkaWZmJzogJyEnLFxuXHR9O1xuXG5cdC8vIGFkZCBhIHRva2VuIGZvciBlYWNoIHByZWZpeFxuXHRPYmplY3Qua2V5cyhQUkVGSVhFUykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuXHRcdHZhciBwcmVmaXggPSBQUkVGSVhFU1tuYW1lXTtcblxuXHRcdHZhciBhbGlhcyA9IFtdO1xuXHRcdGlmICghL15cXHcrJC8udGVzdChuYW1lKSkgeyAvLyBcImRlbGV0ZWQtc2lnblwiIC0+IFwiZGVsZXRlZFwiXG5cdFx0XHRhbGlhcy5wdXNoKC9cXHcrLy5leGVjKG5hbWUpWzBdKTtcblx0XHR9XG5cdFx0aWYgKG5hbWUgPT09ICdkaWZmJykge1xuXHRcdFx0YWxpYXMucHVzaCgnYm9sZCcpO1xuXHRcdH1cblxuXHRcdFByaXNtLmxhbmd1YWdlcy5kaWZmW25hbWVdID0ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKD86WycgKyBwcmVmaXggKyAnXS4qKD86XFxyXFxuP3xcXG58KD8hW1xcXFxzXFxcXFNdKSkpKycsICdtJyksXG5cdFx0XHRhbGlhczogYWxpYXMsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2xpbmUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyguKSg/PVtcXHNcXFNdKS4qKD86XFxyXFxuP3xcXG4pPy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHJlZml4Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXS8sXG5cdFx0XHRcdFx0YWxpYXM6IC9cXHcrLy5leGVjKG5hbWUpWzBdXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdH0pO1xuXG5cdC8vIG1ha2UgcHJlZml4ZXMgYXZhaWxhYmxlIHRvIERpZmYgcGx1Z2luXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShQcmlzbS5sYW5ndWFnZXMuZGlmZiwgJ1BSRUZJWEVTJywge1xuXHRcdHZhbHVlOiBQUkVGSVhFU1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHBsYWNlaG9sZGVyIGZvciB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaWQgYW5kIGluZGV4LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2Vcblx0ICogQHBhcmFtIHtzdHJpbmd8bnVtYmVyfSBpbmRleFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0UGxhY2Vob2xkZXIobGFuZ3VhZ2UsIGluZGV4KSB7XG5cdFx0cmV0dXJuICdfX18nICsgbGFuZ3VhZ2UudG9VcHBlckNhc2UoKSArIGluZGV4ICsgJ19fXyc7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydGllcyhQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10gPSB7fSwge1xuXHRcdGJ1aWxkUGxhY2Vob2xkZXJzOiB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRva2VuaXplIGFsbCBpbmxpbmUgdGVtcGxhdGluZyBleHByZXNzaW9ucyBtYXRjaGluZyBgcGxhY2Vob2xkZXJQYXR0ZXJuYC5cblx0XHRcdCAqXG5cdFx0XHQgKiBJZiBgcmVwbGFjZUZpbHRlcmAgaXMgcHJvdmlkZWQsIG9ubHkgbWF0Y2hlcyBvZiBgcGxhY2Vob2xkZXJQYXR0ZXJuYCBmb3Igd2hpY2ggYHJlcGxhY2VGaWx0ZXJgIHJldHVybnNcblx0XHRcdCAqIGB0cnVlYCB3aWxsIGJlIHJlcGxhY2VkLlxuXHRcdFx0ICpcblx0XHRcdCAqIEBwYXJhbSB7b2JqZWN0fSBlbnYgVGhlIGVudmlyb25tZW50IG9mIHRoZSBgYmVmb3JlLXRva2VuaXplYCBob29rLlxuXHRcdFx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlIFRoZSBsYW5ndWFnZSBpZC5cblx0XHRcdCAqIEBwYXJhbSB7UmVnRXhwfSBwbGFjZWhvbGRlclBhdHRlcm4gVGhlIG1hdGNoZXMgb2YgdGhpcyBwYXR0ZXJuIHdpbGwgYmUgcmVwbGFjZWQgYnkgcGxhY2Vob2xkZXJzLlxuXHRcdFx0ICogQHBhcmFtIHsobWF0Y2g6IHN0cmluZykgPT4gYm9vbGVhbn0gW3JlcGxhY2VGaWx0ZXJdXG5cdFx0XHQgKi9cblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoZW52LCBsYW5ndWFnZSwgcGxhY2Vob2xkZXJQYXR0ZXJuLCByZXBsYWNlRmlsdGVyKSB7XG5cdFx0XHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09IGxhbmd1YWdlKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHRva2VuU3RhY2sgPSBlbnYudG9rZW5TdGFjayA9IFtdO1xuXG5cdFx0XHRcdGVudi5jb2RlID0gZW52LmNvZGUucmVwbGFjZShwbGFjZWhvbGRlclBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdFx0XHRcdGlmICh0eXBlb2YgcmVwbGFjZUZpbHRlciA9PT0gJ2Z1bmN0aW9uJyAmJiAhcmVwbGFjZUZpbHRlcihtYXRjaCkpIHtcblx0XHRcdFx0XHRcdHJldHVybiBtYXRjaDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dmFyIGkgPSB0b2tlblN0YWNrLmxlbmd0aDtcblx0XHRcdFx0XHR2YXIgcGxhY2Vob2xkZXI7XG5cblx0XHRcdFx0XHQvLyBDaGVjayBmb3IgZXhpc3Rpbmcgc3RyaW5nc1xuXHRcdFx0XHRcdHdoaWxlIChlbnYuY29kZS5pbmRleE9mKHBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIobGFuZ3VhZ2UsIGkpKSAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdCsraTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBDcmVhdGUgYSBzcGFyc2UgYXJyYXlcblx0XHRcdFx0XHR0b2tlblN0YWNrW2ldID0gbWF0Y2g7XG5cblx0XHRcdFx0XHRyZXR1cm4gcGxhY2Vob2xkZXI7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIFN3aXRjaCB0aGUgZ3JhbW1hciB0byBtYXJrdXBcblx0XHRcdFx0ZW52LmdyYW1tYXIgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0dG9rZW5pemVQbGFjZWhvbGRlcnM6IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogUmVwbGFjZSBwbGFjZWhvbGRlcnMgd2l0aCBwcm9wZXIgdG9rZW5zIGFmdGVyIHRva2VuaXppbmcuXG5cdFx0XHQgKlxuXHRcdFx0ICogQHBhcmFtIHtvYmplY3R9IGVudiBUaGUgZW52aXJvbm1lbnQgb2YgdGhlIGBhZnRlci10b2tlbml6ZWAgaG9vay5cblx0XHRcdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZSBUaGUgbGFuZ3VhZ2UgaWQuXG5cdFx0XHQgKi9cblx0XHRcdHZhbHVlOiBmdW5jdGlvbiAoZW52LCBsYW5ndWFnZSkge1xuXHRcdFx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSBsYW5ndWFnZSB8fCAhZW52LnRva2VuU3RhY2spIHtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTd2l0Y2ggdGhlIGdyYW1tYXIgYmFja1xuXHRcdFx0XHRlbnYuZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tsYW5ndWFnZV07XG5cblx0XHRcdFx0dmFyIGogPSAwO1xuXHRcdFx0XHR2YXIga2V5cyA9IE9iamVjdC5rZXlzKGVudi50b2tlblN0YWNrKTtcblxuXHRcdFx0XHRmdW5jdGlvbiB3YWxrVG9rZW5zKHRva2Vucykge1xuXHRcdFx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdFx0XHQvLyBhbGwgcGxhY2Vob2xkZXJzIGFyZSByZXBsYWNlZCBhbHJlYWR5XG5cdFx0XHRcdFx0XHRpZiAoaiA+PSBrZXlzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycgfHwgKHRva2VuLmNvbnRlbnQgJiYgdHlwZW9mIHRva2VuLmNvbnRlbnQgPT09ICdzdHJpbmcnKSkge1xuXHRcdFx0XHRcdFx0XHR2YXIgayA9IGtleXNbal07XG5cdFx0XHRcdFx0XHRcdHZhciB0ID0gZW52LnRva2VuU3RhY2tba107XG5cdFx0XHRcdFx0XHRcdHZhciBzID0gdHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyA/IHRva2VuIDogdG9rZW4uY29udGVudDtcblx0XHRcdFx0XHRcdFx0dmFyIHBsYWNlaG9sZGVyID0gZ2V0UGxhY2Vob2xkZXIobGFuZ3VhZ2UsIGspO1xuXG5cdFx0XHRcdFx0XHRcdHZhciBpbmRleCA9IHMuaW5kZXhPZihwbGFjZWhvbGRlcik7XG5cdFx0XHRcdFx0XHRcdGlmIChpbmRleCA+IC0xKSB7XG5cdFx0XHRcdFx0XHRcdFx0KytqO1xuXG5cdFx0XHRcdFx0XHRcdFx0dmFyIGJlZm9yZSA9IHMuc3Vic3RyaW5nKDAsIGluZGV4KTtcblx0XHRcdFx0XHRcdFx0XHR2YXIgbWlkZGxlID0gbmV3IFByaXNtLlRva2VuKGxhbmd1YWdlLCBQcmlzbS50b2tlbml6ZSh0LCBlbnYuZ3JhbW1hciksICdsYW5ndWFnZS0nICsgbGFuZ3VhZ2UsIHQpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciBhZnRlciA9IHMuc3Vic3RyaW5nKGluZGV4ICsgcGxhY2Vob2xkZXIubGVuZ3RoKTtcblxuXHRcdFx0XHRcdFx0XHRcdHZhciByZXBsYWNlbWVudCA9IFtdO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChiZWZvcmUpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHJlcGxhY2VtZW50LnB1c2guYXBwbHkocmVwbGFjZW1lbnQsIHdhbGtUb2tlbnMoW2JlZm9yZV0pKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaChtaWRkbGUpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChhZnRlcikge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaC5hcHBseShyZXBsYWNlbWVudCwgd2Fsa1Rva2VucyhbYWZ0ZXJdKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBbaSwgMV0uY29uY2F0KHJlcGxhY2VtZW50KSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRva2VuLmNvbnRlbnQgPSByZXBsYWNlbWVudDtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodG9rZW4uY29udGVudCAvKiAmJiB0eXBlb2YgdG9rZW4uY29udGVudCAhPT0gJ3N0cmluZycgKi8pIHtcblx0XHRcdFx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4gdG9rZW5zO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0d2Fsa1Rva2VucyhlbnYudG9rZW5zKTtcblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cbi8vIERqYW5nby9KaW5qYTIgc3ludGF4IGRlZmluaXRpb24gZm9yIFByaXNtLmpzIDxodHRwOi8vcHJpc21qcy5jb20+IHN5bnRheCBoaWdobGlnaHRlci5cbi8vIE1vc3RseSBpdCB3b3JrcyBPSyBidXQgY2FuIHBhaW50IGNvZGUgaW5jb3JyZWN0bHkgb24gY29tcGxleCBodG1sL3RlbXBsYXRlIHRhZyBjb21iaW5hdGlvbnMuXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZGphbmdvID0ge1xuXHRcdCdjb21tZW50JzogL15cXHsjW1xcc1xcU10qPyNcXH0kLyxcblx0XHQndGFnJzoge1xuXHRcdFx0cGF0dGVybjogLyheXFx7JVsrLV0/XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHtbeyVdWystXT98WystXT9bfSVdXFx9JC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ZpbHRlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFx8KVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQndGVzdCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiaXNcXHMrKD86bm90XFxzKyk/KSg/IW5vdFxcYilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdysoPz1cXHMqXFwoKS9pLFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xieXxlbHNlfGZvcnxpZnxpbXBvcnR8aW58aXN8bG9vcHxub3R8b3J8cmVjdXJzaXZlfHdpdGh8d2l0aG91dClcXGIvLFxuXHRcdCdvcGVyYXRvcic6IC9bLSslPV09P3whPXxcXCpcXCo/PT98XFwvXFwvPz0/fDxbPD0+XT98Pls9Pl0/fFsmfF5+XS8sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0XHQnYm9vbGVhbic6IC9bRmZdYWxzZXxbTm5db25lfFtUdF1ydWUvLFxuXHRcdCd2YXJpYWJsZSc6IC9cXGJcXHcrXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpLC46O10vXG5cdH07XG5cblxuXHR2YXIgcGF0dGVybiA9IC9cXHtcXHtbXFxzXFxTXSo/XFx9XFx9fFxceyVbXFxzXFxTXSo/JVxcfXxcXHsjW1xcc1xcU10qPyNcXH0vZztcblx0dmFyIG1hcmt1cFRlbXBsYXRpbmcgPSBQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ107XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0bWFya3VwVGVtcGxhdGluZy5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdkamFuZ28nLCBwYXR0ZXJuKTtcblx0fSk7XG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0bWFya3VwVGVtcGxhdGluZy50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdkamFuZ28nKTtcblx0fSk7XG5cblx0Ly8gQWRkIGFuIEppbmphMiBhbGlhc1xuXHRQcmlzbS5sYW5ndWFnZXMuamluamEyID0gUHJpc20ubGFuZ3VhZ2VzLmRqYW5nbztcblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0bWFya3VwVGVtcGxhdGluZy5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdqaW5qYTInLCBwYXR0ZXJuKTtcblx0fSk7XG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0bWFya3VwVGVtcGxhdGluZy50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdqaW5qYTInKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzWydkbnMtem9uZS1maWxlJ10gPSB7XG5cdCdjb21tZW50JzogLzsuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd2YXJpYWJsZSc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5cXCRPUklHSU5bIFxcdF0rKVxcUysvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKUAoPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9XG5cdF0sXG5cdCdrZXl3b3JkJzogL15cXCQoPzpJTkNMVURFfE9SSUdJTnxUVEwpKD89XFxzfCQpL20sXG5cdCdjbGFzcyc6IHtcblx0XHQvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMTAzNSNwYWdlLTEzXG5cdFx0cGF0dGVybjogLyhefFxccykoPzpDSHxDU3xIU3xJTikoPz1cXHN8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQndHlwZSc6IHtcblx0XHQvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9MaXN0X29mX0ROU19yZWNvcmRfdHlwZXNcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OkF8QTZ8QUFBQXxBRlNEQnxBUEx8QVRNQXxDQUF8Q0ROU0tFWXxDRFN8Q0VSVHxDTkFNRXxESENJRHxETFZ8RE5BTUV8RE5TS0VZfERTfEVJRHxHSUR8R1BPU3xISU5GT3xISVB8SVBTRUNLRVl8SVNETnxLRVl8S1h8TE9DfE1BSUxBfE1BSUxCfE1CfE1EfE1GfE1HfE1JTkZPfE1SfE1YfE5BUFRSfE5CfE5CU1RBVHxOSU1MT0N8TklORk98TlN8TlNBUHxOU0FQLVBUUnxOU0VDfE5TRUMzfE5TRUMzUEFSQU18TlVMTHxOWFR8T1BFTlBHUEtFWXxQVFJ8UFh8UktFWXxSUHxSUlNJR3xSVHxTSUd8U0lOS3xTTUlNRUF8U09BfFNQRnxTUlZ8U1NIRlB8VEF8VEtFWXxUTFNBfFRTSUd8VFhUfFVJRHxVSU5GT3xVTlNQRUN8VVJJfFdLU3xYMjUpKD89XFxzfCQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1soKV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2Rucy16b25lJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ2Rucy16b25lLWZpbGUnXTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIE1hbnkgb2YgdGhlIGZvbGxvd2luZyByZWdleGVzIHdpbGwgY29udGFpbiBuZWdhdGVkIGxvb2thaGVhZHMgbGlrZSBgWyBcXHRdKyg/IVsgXFx0XSlgLiBUaGlzIGlzIGEgdHJpY2sgdG8gZW5zdXJlXG5cdC8vIHRoYXQgcXVhbnRpZmllcnMgYmVoYXZlICphdG9taWNhbGx5Ki4gQXRvbWljIHF1YW50aWZpZXJzIGFyZSBuZWNlc3NhcnkgdG8gcHJldmVudCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmcuXG5cblx0dmFyIHNwYWNlQWZ0ZXJCYWNrU2xhc2ggPSAvXFxcXFtcXHJcXG5dKD86XFxzfFxcXFxbXFxyXFxuXXwjLiooPyEuKSkqKD8hW1xccyNdfFxcXFxbXFxyXFxuXSkvLnNvdXJjZTtcblx0Ly8gQXQgbGVhc3Qgb25lIHNwYWNlLCBjb21tZW50LCBvciBsaW5lIGJyZWFrXG5cdHZhciBzcGFjZSA9IC8oPzpbIFxcdF0rKD8hWyBcXHRdKSg/OjxTUF9CUz4pP3w8U1BfQlM+KS8uc291cmNlXG5cdFx0LnJlcGxhY2UoLzxTUF9CUz4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3BhY2VBZnRlckJhY2tTbGFzaDsgfSk7XG5cblx0dmFyIHN0cmluZyA9IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXCJ8Jyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSonLy5zb3VyY2U7XG5cdHZhciBvcHRpb24gPSAvLS1bXFx3LV0rPSg/OjxTVFI+fCg/IVtcIiddKSg/OlteXFxzXFxcXF18XFxcXC4pKykvLnNvdXJjZS5yZXBsYWNlKC88U1RSPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmc7IH0pO1xuXG5cdHZhciBzdHJpbmdSdWxlID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChzdHJpbmcpLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXHR2YXIgY29tbWVudFJ1bGUgPSB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKikjLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUoc291cmNlLCBmbGFncykge1xuXHRcdHNvdXJjZSA9IHNvdXJjZVxuXHRcdFx0LnJlcGxhY2UoLzxPUFQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG9wdGlvbjsgfSlcblx0XHRcdC5yZXBsYWNlKC88U1A+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNwYWNlOyB9KTtcblxuXHRcdHJldHVybiBSZWdFeHAoc291cmNlLCBmbGFncyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuZG9ja2VyID0ge1xuXHRcdCdpbnN0cnVjdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86QUREfEFSR3xDTUR8Q09QWXxFTlRSWVBPSU5UfEVOVnxFWFBPU0V8RlJPTXxIRUFMVEhDSEVDS3xMQUJFTHxNQUlOVEFJTkVSfE9OQlVJTER8UlVOfFNIRUxMfFNUT1BTSUdOQUx8VVNFUnxWT0xVTUV8V09SS0RJUikoPz1cXHMpKD86XFxcXC58W15cXHJcXG5cXFxcXSkqKD86XFxcXCQoPzpcXHN8Iy4qJCkqKD8hW1xccyNdKSg/OlxcXFwufFteXFxyXFxuXFxcXF0pKikqL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3B0aW9ucyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiByZSgvKF4oPzpPTkJVSUxEPFNQPik/XFx3KzxTUD4pPE9QVD4oPzo8U1A+PE9QVD4pKi8uc291cmNlLCAnaScpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKS0tW1xcdy1dKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnc3RyaW5nJzogW1xuXHRcdFx0XHRcdFx0XHRzdHJpbmdSdWxlLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg9KSg/IVtcIiddKSg/OlteXFxzXFxcXF18XFxcXC4pKy8sXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogL1xcXFwkL20sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvPS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jaGVhbHRoY2hlY2tcblx0XHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXig/Ok9OQlVJTEQ8U1A+KT9IRUFMVEhDSEVDSzxTUD4oPzo8T1BUPjxTUD4pKikoPzpDTUR8Tk9ORSlcXGIvLnNvdXJjZSwgJ2knKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vZG9jcy5kb2NrZXIuY29tL2VuZ2luZS9yZWZlcmVuY2UvYnVpbGRlci8jZnJvbVxuXHRcdFx0XHRcdFx0cGF0dGVybjogcmUoLyheKD86T05CVUlMRDxTUD4pP0ZST008U1A+KD86PE9QVD48U1A+KSooPyEtLSlbXiBcXHRcXFxcXSs8U1A+KUFTLy5zb3VyY2UsICdpJyksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQvLyBodHRwczovL2RvY3MuZG9ja2VyLmNvbS9lbmdpbmUvcmVmZXJlbmNlL2J1aWxkZXIvI29uYnVpbGRcblx0XHRcdFx0XHRcdHBhdHRlcm46IHJlKC8oXk9OQlVJTEQ8U1A+KVxcdysvLnNvdXJjZSwgJ2knKSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFx3Ky8sXG5cdFx0XHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdF0sXG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudFJ1bGUsXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdSdWxlLFxuXHRcdFx0XHQndmFyaWFibGUnOiAvXFwkKD86XFx3K3xcXHtbXnt9XCInXFxcXF0qXFx9KS8sXG5cdFx0XHRcdCdvcGVyYXRvcic6IC9cXFxcJC9tXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29tbWVudCc6IGNvbW1lbnRSdWxlXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRvY2tlcmZpbGUgPSBQcmlzbS5sYW5ndWFnZXMuZG9ja2VyO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vd3d3LmdyYXBodml6Lm9yZy9kb2MvaW5mby9sYW5nLmh0bWxcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBJRCA9ICcoPzonICsgW1xuXHRcdC8vIGFuIGlkZW50aWZpZXJcblx0XHQvW2EtekEtWl9cXHg4MC1cXHVGRkZGXVtcXHdcXHg4MC1cXHVGRkZGXSovLnNvdXJjZSxcblx0XHQvLyBhIG51bWJlclxuXHRcdC8tPyg/OlxcLlxcZCt8XFxkKyg/OlxcLlxcZCopPykvLnNvdXJjZSxcblx0XHQvLyBhIGRvdWJsZS1xdW90ZWQgc3RyaW5nXG5cdFx0L1wiW15cIlxcXFxdKig/OlxcXFxbXFxzXFxTXVteXCJcXFxcXSopKlwiLy5zb3VyY2UsXG5cdFx0Ly8gSFRNTC1saWtlIHN0cmluZ1xuXHRcdC88KD86W148Pl18KD8hPCEtLSk8KD86W148PlwiJ118XCJbXlwiXSpcInwnW14nXSonKSs+fDwhLS0oPzpbXi1dfC0oPyEtPikpKi0tPikqPi8uc291cmNlXG5cdF0uam9pbignfCcpICsgJyknO1xuXG5cdHZhciBJREluc2lkZSA9IHtcblx0XHQnbWFya3VwJzoge1xuXHRcdFx0cGF0dGVybjogLyhePClbXFxzXFxTXSsoPz0+JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2xhbmd1YWdlLW1hcmt1cCcsICdsYW5ndWFnZS1odG1sJywgJ2xhbmd1YWdlLXhtbCddLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwXG5cdFx0fVxuXHR9O1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gd2l0aElEKHNvdXJjZSwgZmxhZ3MpIHtcblx0XHRyZXR1cm4gUmVnRXhwKHNvdXJjZS5yZXBsYWNlKC88SUQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIElEOyB9KSwgZmxhZ3MpO1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmRvdCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfF4jLiovbSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2dyYXBoLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3aXRoSUQoLyhcXGIoPzpkaWdyYXBofGdyYXBofHN1YmdyYXBoKVsgXFx0XFxyXFxuXSspPElEPi8uc291cmNlLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IElESW5zaWRlXG5cdFx0fSxcblx0XHQnYXR0ci12YWx1ZSc6IHtcblx0XHRcdHBhdHRlcm46IHdpdGhJRCgvKD1bIFxcdFxcclxcbl0qKTxJRD4vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBJREluc2lkZVxuXHRcdH0sXG5cdFx0J2F0dHItbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IHdpdGhJRCgvKFtcXFs7LCBcXHRcXHJcXG5dKTxJRD4oPz1bIFxcdFxcclxcbl0qPSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBJREluc2lkZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86ZGlncmFwaHxlZGdlfGdyYXBofG5vZGV8c3RyaWN0fHN1YmdyYXBoKVxcYi9pLFxuXHRcdCdjb21wYXNzLXBvaW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyg6WyBcXHRcXHJcXG5dKikoPzpbZXdjX118W25zXVtld10/KSg/IVtcXHdcXHg4MC1cXHVGRkZGXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdCdub2RlJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElEKC8oXnxbXi0uXFx3XFx4ODAtXFx1RkZGRlxcXFxdKTxJRD4vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBJREluc2lkZVxuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzogL1s9Ol18LVstPl0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxde307LF0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmd2ID0gUHJpc20ubGFuZ3VhZ2VzLmRvdDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZWJuZiA9IHtcblx0J2NvbW1lbnQnOiAvXFwoXFwqW1xcc1xcU10qP1xcKlxcKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8J1teJ1xcclxcbl0qJy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzcGVjaWFsJzoge1xuXHRcdHBhdHRlcm46IC9cXD9bXj9cXHJcXG5dKlxcPy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblxuXHQnZGVmaW5pdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKVthLXpdXFx3Kig/OlsgXFx0XStbYS16XVxcdyopKig/PVxccyo9KS9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiBbJ3J1bGUnLCAna2V5d29yZCddXG5cdH0sXG5cdCdydWxlJzogL1xcYlthLXpdXFx3Kig/OlsgXFx0XStbYS16XVxcdyopKlxcYi9pLFxuXG5cdCdwdW5jdHVhdGlvbic6IC9cXChbOi9dfFs6L11cXCl8Wy4sOygpW1xcXXt9XS8sXG5cdCdvcGVyYXRvcic6IC9bLT18Ki8hXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5lZGl0b3Jjb25maWcgPSB7XG5cdC8vIGh0dHBzOi8vZWRpdG9yY29uZmlnLXNwZWNpZmljYXRpb24ucmVhZHRoZWRvY3MuaW9cblx0J2NvbW1lbnQnOiAvWzsjXS4qLyxcblx0J3NlY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKilcXFsuK1xcXS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzZWxlY3RvcicsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVnZXgnOiAvXFxcXFxcXFxbXFxbXFxde30sIT8uKl0vLCAvLyBFc2NhcGUgc3BlY2lhbCBjaGFyYWN0ZXJzIHdpdGggJ1xcXFwnXG5cdFx0XHQnb3BlcmF0b3InOiAvWyE/XXxcXC5cXC58XFwqezEsMn0vLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fSxdL1xuXHRcdH1cblx0fSxcblx0J2tleSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVteXFxzPV0rKD89WyBcXHRdKj0pL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0J3ZhbHVlJzoge1xuXHRcdHBhdHRlcm46IC89LiovLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXj0vXG5cdFx0fVxuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZWlmZmVsID0ge1xuXHQnY29tbWVudCc6IC8tLS4qLyxcblx0J3N0cmluZyc6IFtcblx0XHQvLyBBbGlnbmVkLXZlcmJhdGltLXN0cmluZ3Ncblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoW15bXSopXFxbW1xcc1xcU10qP1xcXVxcMVwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gTm9uLWFsaWduZWQtdmVyYmF0aW0tc3RyaW5nc1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIihbXntdKilcXHtbXFxzXFxTXSo/XFx9XFwxXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQvLyBTaW5nbGUtbGluZSBzdHJpbmdcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzolKD86KD8hXFxuKVxccykqXFxuXFxzKiV8JVxcU3xbXiVcIlxcclxcbl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0Ly8gbm9ybWFsIGNoYXIgfCBzcGVjaWFsIGNoYXIgfCBjaGFyIGNvZGVcblx0J2NoYXInOiAvJyg/OiUufFteJSdcXHJcXG5dKSsnLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWNyb3NzfGFnZW50fGFsaWFzfGFsbHxhbmR8YXN8YXNzaWdufGF0dGFjaGVkfGF0dHJpYnV0ZXxjaGVja3xjbGFzc3xjb252ZXJ0fGNyZWF0ZXxDdXJyZW50fGRlYnVnfGRlZmVycmVkfGRldGFjaGFibGV8ZG98ZWxzZXxlbHNlaWZ8ZW5kfGVuc3VyZXxleHBhbmRlZHxleHBvcnR8ZXh0ZXJuYWx8ZmVhdHVyZXxmcm9tfGZyb3plbnxpZnxpbXBsaWVzfGluaGVyaXR8aW5zcGVjdHxpbnZhcmlhbnR8bGlrZXxsb2NhbHxsb29wfG5vdHxub3RlfG9ic29sZXRlfG9sZHxvbmNlfG9yfFByZWN1cnNvcnxyZWRlZmluZXxyZW5hbWV8cmVxdWlyZXxyZXNjdWV8UmVzdWx0fHJldHJ5fHNlbGVjdHxzZXBhcmF0ZXxzb21lfHRoZW58dW5kZWZpbmV8dW50aWx8dmFyaWFudHxWb2lkfHdoZW58eG9yKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGYWxzZXxUcnVlKVxcYi9pLFxuXHQvLyBDb252ZW50aW9uOiBjbGFzcy1uYW1lcyBhcmUgYWx3YXlzIGFsbCB1cHBlci1jYXNlIGNoYXJhY3RlcnNcblx0J2NsYXNzLW5hbWUnOiAvXFxiW0EtWl1bXFxkQS1aX10qXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvLyBoZXhhIHwgb2N0YWwgfCBiaW5cblx0XHQvXFxiMFt4Y2JdW1xcZGEtZl0oPzpfKltcXGRhLWZdKSpcXGIvaSxcblx0XHQvLyBEZWNpbWFsXG5cdFx0Lyg/OlxcYlxcZCg/Ol8qXFxkKSopP1xcLig/Oig/OlxcZCg/Ol8qXFxkKSopP2VbKy1dPyk/XFxkKD86XypcXGQpKlxcYnxcXGJcXGQoPzpfKlxcZCkqXFxiXFwuPy9pXG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC86PXw8PHw+PnxcXChcXHx8XFx8XFwpfC0+fFxcLig/PVxcdyl8W3t9W1xcXTsoKSw6P10vLFxuXHQnb3BlcmF0b3InOiAvXFxcXFxcXFx8XFx8XFwuXFwuXFx8fFxcLlxcLnxcXC9bflxcLz1dP3xbPjxdPT98Wy0rKl49fl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmVqcyA9IHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL148JVstXz1dP3xbLV9dPyU+JC8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiAvXiNbXFxzXFxTXSovLFxuXHRcdCdsYW5ndWFnZS1qYXZhc2NyaXB0Jzoge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciBlanNQYXR0ZXJuID0gLzwlKD8hJSlbXFxzXFxTXSs/JT4vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnZWpzJywgZWpzUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2VqcycpO1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZXRhID0gUHJpc20ubGFuZ3VhZ2VzLmVqcztcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZWxpeGlyID0ge1xuXHQnZG9jJzoge1xuXHRcdHBhdHRlcm46IC9AKD86ZG9jfG1vZHVsZWRvYylcXHMrKD86KFwiXCJcInwnJycpW1xcc1xcU10qP1xcMXwoXCJ8JykoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDIpW15cXFxcXFxyXFxuXSkqXFwyKS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYXR0cmlidXRlJzogL15AXFx3Ky8sXG5cdFx0XHQnc3RyaW5nJzogL1snXCJdW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIH5yXCJcIlwiZm9vXCJcIlwiIChtdWx0aS1saW5lKSwgfnInJydmb28nJycgKG11bHRpLWxpbmUpLCB+ci9mb28vLCB+cnxmb298LCB+clwiZm9vXCIsIH5yJ2ZvbycsIH5yKGZvbyksIH5yW2Zvb10sIH5ye2Zvb30sIH5yPGZvbz5cblx0J3JlZ2V4Jzoge1xuXHRcdHBhdHRlcm46IC9+W3JSXSg/OihcIlwiXCJ8JycnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkrXFwxfChbXFwvfFwiJ10pKD86XFxcXC58KD8hXFwyKVteXFxcXFxcclxcbl0pK1xcMnxcXCgoPzpcXFxcLnxbXlxcXFwpXFxyXFxuXSkrXFwpfFxcWyg/OlxcXFwufFteXFxcXFxcXVxcclxcbl0pK1xcXXxcXHsoPzpcXFxcLnxbXlxcXFx9XFxyXFxuXSkrXFx9fDwoPzpcXFxcLnxbXlxcXFw+XFxyXFxuXSkrPilbdWlzbXhmcl0qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IFtcblx0XHR7XG5cdFx0XHQvLyB+c1wiXCJcImZvb1wiXCJcIiAobXVsdGktbGluZSksIH5zJycnZm9vJycnIChtdWx0aS1saW5lKSwgfnMvZm9vLywgfnN8Zm9vfCwgfnNcImZvb1wiLCB+cydmb28nLCB+cyhmb28pLCB+c1tmb29dLCB+c3tmb299ICh3aXRoIGludGVycG9sYXRpb24gY2FyZSksIH5zPGZvbz5cblx0XHRcdHBhdHRlcm46IC9+W2NDc1N3V10oPzooXCJcIlwifCcnJykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pK1xcMXwoW1xcL3xcIiddKSg/OlxcXFwufCg/IVxcMilbXlxcXFxcXHJcXG5dKStcXDJ8XFwoKD86XFxcXC58W15cXFxcKVxcclxcbl0pK1xcKXxcXFsoPzpcXFxcLnxbXlxcXFxcXF1cXHJcXG5dKStcXF18XFx7KD86XFxcXC58I1xce1tefV0rXFx9fCMoPyFcXHspfFteI1xcXFx9XFxyXFxuXSkrXFx9fDwoPzpcXFxcLnxbXlxcXFw+XFxyXFxuXSkrPilbY3NhXT8vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIFNlZSBpbnRlcnBvbGF0aW9uIGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFwiXCJcInwnJycpW1xcc1xcU10qP1xcMS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0Ly8gU2VlIGludGVycG9sYXRpb24gYmVsb3dcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIE11bHRpLWxpbmUgc3RyaW5ncyBhcmUgYWxsb3dlZFxuXHRcdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIFNlZSBpbnRlcnBvbGF0aW9uIGJlbG93XG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXHQnYXRvbSc6IHtcblx0XHQvLyBMb29rLWJlaGluZCBwcmV2ZW50cyBiYWQgaGlnaGxpZ2h0aW5nIG9mIHRoZSA6OiBvcGVyYXRvclxuXHRcdHBhdHRlcm46IC8oXnxbXjpdKTpcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9LFxuXHQnbW9kdWxlJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbQS1aXVxcdypcXGIvLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblx0Ly8gTG9vay1haGVhZCBwcmV2ZW50cyBiYWQgaGlnaGxpZ2h0aW5nIG9mIHRoZSA6OiBvcGVyYXRvclxuXHQnYXR0ci1uYW1lJzogL1xcYlxcdytcXD8/Oig/ITopLyxcblx0J2FyZ3VtZW50Jzoge1xuXHRcdC8vIExvb2stYmVoaW5kIHByZXZlbnRzIGJhZCBoaWdobGlnaHRpbmcgb2YgdGhlICYmIG9wZXJhdG9yXG5cdFx0cGF0dGVybjogLyhefFteJl0pJlxcZCsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J2F0dHJpYnV0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFxcdysvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJbX2EtekEtWl1cXHcqWz8hXT8oPzooPz1cXHMqKD86XFwuXFxzKik/XFwoKXwoPz1cXC9cXGQpKS8sXG5cdCdudW1iZXInOiAvXFxiKD86MFtib3hdW2EtZlxcZF9dK3xcXGRbXFxkX10qKSg/OlxcLltcXGRfXSspPyg/OmVbKy1dP1tcXGRfXSspP1xcYi9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzphZnRlcnxhbGlhc3xhbmR8Y2FzZXxjYXRjaHxjb25kfGRlZig/OmNhbGxiYWNrfGRlbGVnYXRlfGV4Y2VwdGlvbnxpbXBsfG1hY3JvfG1vZHVsZXxufG5wfHB8cHJvdG9jb2x8c3RydWN0KT98ZG98ZWxzZXxlbmR8Zm58Zm9yfGlmfGltcG9ydHxub3R8b3J8cXVvdGV8cmFpc2V8cmVxdWlyZXxyZXNjdWV8dHJ5fHVubGVzc3x1bnF1b3RlfHVzZXx3aGVuKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5pbHx0cnVlKVxcYi8sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvXFxiaW5cXGJ8JiY/fFxcfFt8Pl0/fFxcXFxcXFxcfDo6fFxcLlxcLlxcLj98XFwrXFwrP3wtWy0+XT98PFstPT5dfD49fCE9PT98XFxCIXw9KD86PT0/fFs+fl0pP3xbKlxcL15dLyxcblx0XHR7XG5cdFx0XHQvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIDw8XG5cdFx0XHRwYXR0ZXJuOiAvKFtePF0pPCg/ITwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggPj5cblx0XHRcdHBhdHRlcm46IC8oW14+XSk+KD8hPikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogLzw8fD4+fFsuLCVcXFtcXF17fSgpXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5lbGl4aXIuc3RyaW5nLmZvckVhY2goZnVuY3Rpb24gKG8pIHtcblx0by5pbnNpZGUgPSB7XG5cdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvI1xce1tefV0rXFx9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eI1xce3xcXH0kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMuZWxpeGlyXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5lbG0gPSB7XG5cdCdjb21tZW50JzogLy0tLip8XFx7LVtcXHNcXFNdKj8tXFx9Lyxcblx0J2NoYXInOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXlxcXFwnXFxyXFxuXXxcXFxcKD86W2FiZm5ydHZcXFxcJ118XFxkK3x4WzAtOWEtZkEtRl0rfHVcXHtbMC05YS1mQS1GXStcXH0pKScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdC8vIE11bHRpbGluZSBzdHJpbmdzIGFyZSB3cmFwcGVkIGluIHRyaXBsZSBcIi4gUXVvdGVzIG1heSBhcHBlYXIgdW5lc2NhcGVkLlxuXHRcdFx0cGF0dGVybjogL1wiXCJcIltcXHNcXFNdKj9cIlwiXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlxcXFxcIlxcclxcbl18XFxcXC4pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2ltcG9ydC1zdGF0ZW1lbnQnOiB7XG5cdFx0Ly8gVGhlIGltcG9ydGVkIG9yIGhpZGRlbiBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgaW1wb3J0XG5cdFx0Ly8gc3RhdGVtZW50LiBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBoaWdobGlnaHQgdGhvc2UgZXhhY3RseSBsaWtlXG5cdFx0Ly8gd2UgZG8gZm9yIHRoZSBuYW1lcyBpbiB0aGUgcHJvZ3JhbS5cblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKWltcG9ydFxccytbQS1aXVxcdyooPzpcXC5bQS1aXVxcdyopKig/Olxccythc1xccysoPzpbQS1aXVxcdyopKD86XFwuW0EtWl1cXHcqKSopPyg/OlxccytleHBvc2luZ1xccyspPy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGIoPzphc3xleHBvc2luZ3xpbXBvcnQpXFxiL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWxpYXN8YXN8Y2FzZXxlbHNlfGV4cG9zaW5nfGlmfGlufGluZml4bHxpbmZpeHJ8bGV0fG1vZHVsZXxvZnx0aGVufHR5cGUpXFxiLyxcblx0Ly8gVGhlc2UgYXJlIGJ1aWx0aW4gdmFyaWFibGVzIG9ubHkuIENvbnN0cnVjdG9ycyBhcmUgaGlnaGxpZ2h0ZWQgbGF0ZXIgYXMgYSBjb25zdGFudC5cblx0J2J1aWx0aW4nOiAvXFxiKD86YWJzfGFjb3N8YWx3YXlzfGFzaW58YXRhbnxhdGFuMnxjZWlsaW5nfGNsYW1wfGNvbXBhcmV8Y29zfGN1cnJ5fGRlZ3JlZXN8ZXxmbGlwfGZsb29yfGZyb21Qb2xhcnxpZGVudGl0eXxpc0luZmluaXRlfGlzTmFOfGxvZ0Jhc2V8bWF4fG1pbnxuZWdhdGV8bmV2ZXJ8bm90fHBpfHJhZGlhbnN8cmVtfHJvdW5kfHNpbnxzcXJ0fHRhbnx0b0Zsb2F0fHRvUG9sYXJ8dG9TdHJpbmd8dHJ1bmNhdGV8dHVybnN8dW5jdXJyeXx4b3IpXFxiLyxcblx0Ly8gZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB8IGhleGFkZWNpbWFsIGludGVnZXJzXG5cdCdudW1iZXInOiAvXFxiKD86XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP3wweFswLTlhLWZdKylcXGIvaSxcblx0Ly8gTW9zdCBvZiB0aGlzIGlzIG5lZWRlZCBiZWNhdXNlIG9mIHRoZSBtZWFuaW5nIG9mIGEgc2luZ2xlICcuJy5cblx0Ly8gSWYgaXQgc3RhbmRzIGFsb25lIGZyZWVseSwgaXQgaXMgdGhlIGZ1bmN0aW9uIGNvbXBvc2l0aW9uLlxuXHQvLyBJdCBtYXkgYWxzbyBiZSBhIHNlcGFyYXRvciBiZXR3ZWVuIGEgbW9kdWxlIG5hbWUgYW5kIGFuIGlkZW50aWZpZXIgPT4gbm9cblx0Ly8gb3BlcmF0b3IuIElmIGl0IGNvbWVzIHRvZ2V0aGVyIHdpdGggb3RoZXIgc3BlY2lhbCBjaGFyYWN0ZXJzIGl0IGlzIGFuXG5cdC8vIG9wZXJhdG9yIHRvby5cblx0Ly8gVmFsaWQgb3BlcmF0b3IgY2hhcmFjdGVycyBpbiAwLjE4OiArLS8qPS4kPD46JnxePyUjQH4hXG5cdC8vIFJlZjogaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8jIW1zZy9lbG0tZGV2LzBBSFNuRGRrU2tRL0UwU1ZVNzBKRVFBSlxuXHQnb3BlcmF0b3InOiAvXFxzXFwuXFxzfFsrXFwtLyo9LiQ8PjomfF4/JSNAfiFdezIsfXxbK1xcLS8qPSQ8PjomfF4/JSNAfiFdLyxcblx0Ly8gSW4gRWxtLCBuZWFybHkgZXZlcnl0aGluZyBpcyBhIHZhcmlhYmxlLCBkbyBub3QgaGlnaGxpZ2h0IHRoZXNlLlxuXHQnaHZhcmlhYmxlJzogL1xcYig/OltBLVpdXFx3KlxcLikqW2Etel1cXHcqXFxiLyxcblx0J2NvbnN0YW50JzogL1xcYig/OltBLVpdXFx3KlxcLikqW0EtWl1cXHcqXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF18KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmx1YSA9IHtcblx0J2NvbW1lbnQnOiAvXiMhLit8LS0oPzpcXFsoPSopXFxbW1xcc1xcU10qP1xcXVxcMVxcXXwuKikvbSxcblx0Ly8gXFx6IG1heSBiZSB1c2VkIHRvIHNraXAgdGhlIGZvbGxvd2luZyBzcGFjZVxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86KD8hXFwxKVteXFxcXFxcclxcbl18XFxcXHooPzpcXHJcXG58XFxzKXxcXFxcKD86XFxyXFxufFteel0pKSpcXDF8XFxbKD0qKVxcW1tcXHNcXFNdKj9cXF1cXDJcXF0vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogL1xcYjB4W2EtZlxcZF0rKD86XFwuW2EtZlxcZF0qKT8oPzpwWystXT9cXGQrKT9cXGJ8XFxiXFxkKyg/OlxcLlxcQnwoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT9cXGIpfFxcQlxcLlxcZCsoPzplWystXT9cXGQrKT9cXGIvaSxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGJyZWFrfGRvfGVsc2V8ZWxzZWlmfGVuZHxmYWxzZXxmb3J8ZnVuY3Rpb258Z290b3xpZnxpbnxsb2NhbHxuaWx8bm90fG9yfHJlcGVhdHxyZXR1cm58dGhlbnx0cnVlfHVudGlsfHdoaWxlKVxcYi8sXG5cdCdmdW5jdGlvbic6IC8oPyFcXGQpXFx3Kyg/PVxccyooPzpbKHtdKSkvLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0L1stKyolXiZ8I118XFwvXFwvP3w8Wzw9XT98Pls+PV0/fFs9fl09Py8sXG5cdFx0e1xuXHRcdFx0Ly8gTWF0Y2ggXCIuLlwiIGJ1dCBkb24ndCBicmVhayBcIi4uLlwiXG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlcXC5cXC4oPyFcXC4pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fSw7XXxcXC4rfDorL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5ldGx1YSA9IHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL148JVstPV0/fC0/JT4kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnbGFuZ3VhZ2UtbHVhJzoge1xuXHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5sdWFcblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIHBhdHRlcm4gPSAvPCVbXFxzXFxTXSs/JT4vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnZXRsdWEnLCBwYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZXRsdWEnKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy5lcmIgPSB7XG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eKFxccyopPCU9P3wlPig/PVxccyokKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdydWJ5Jzoge1xuXHRcdFx0cGF0dGVybjogL1xccypcXFNbXFxzXFxTXSovLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1ydWJ5Jyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIGVyYlBhdHRlcm4gPSAvPCU9Pyg/OlteXFxyXFxuXXxbXFxyXFxuXSg/IT1iZWdpbil8W1xcclxcbl09YmVnaW5cXHMoPzpbXlxcclxcbl18W1xcclxcbl0oPyE9ZW5kKSkqW1xcclxcbl09ZW5kKSs/JT4vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAnZXJiJywgZXJiUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2VyYicpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZXJsYW5nID0ge1xuXHQnY29tbWVudCc6IC8lLisvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQncXVvdGVkLWZ1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXC58W15cXFxcJ1xcclxcbl0pKycoPz1cXCgpLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQncXVvdGVkLWF0b20nOiB7XG5cdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkrJy8sXG5cdFx0YWxpYXM6ICdhdG9tJ1xuXHR9LFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFmdGVyfGJlZ2lufGNhc2V8Y2F0Y2h8ZW5kfGZ1bnxpZnxvZnxyZWNlaXZlfHRyeXx3aGVuKVxcYi8sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcJFxcXFw/Li8sXG5cdFx0L1xcYlxcZCsjW2EtejAtOV0rL2ksXG5cdFx0Lyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaVxuXHRdLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel1bXFx3QF0qKD89XFwoKS8sXG5cdCd2YXJpYWJsZSc6IHtcblx0XHQvLyBMb29rLWJlaGluZCBpcyB1c2VkIHRvIHByZXZlbnQgd3JvbmcgaGlnaGxpZ2h0aW5nIG9mIGF0b21zIGNvbnRhaW5pbmcgXCJAXCJcblx0XHRwYXR0ZXJuOiAvKF58W15AXSkoPzpcXGJ8XFw/KVtBLVpfXVtcXHdAXSovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogW1xuXHRcdC9bPVxcLzw+Ol09fD1bOlxcL109fFxcK1xcKz98LS0/fFs9KlxcLyFdfFxcYig/OmFuZHxhbmRhbHNvfGJhbmR8Ym5vdHxib3J8YnNsfGJzcnxieG9yfGRpdnxub3R8b3J8b3JlbHNlfHJlbXx4b3IpXFxiLyxcblx0XHR7XG5cdFx0XHQvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIDw8XG5cdFx0XHRwYXR0ZXJuOiAvKF58W148XSk8KD8hPCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCA+PlxuXHRcdFx0cGF0dGVybjogLyhefFtePl0pPig/IT4pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdhdG9tJzogL1xcYlthLXpdW1xcd0BdKi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde306OywuI3xdfDw8fD4+L1xuXG59O1xuXG5QcmlzbS5sYW5ndWFnZXNbJ2V4Y2VsLWZvcm11bGEnXSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJOXFwoXFxzKilcIig/OlteXCJdfFwiXCIpKlwiKD89XFxzKlxcKSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3JlZmVyZW5jZSc6IHtcblx0XHQvLyBodHRwczovL3d3dy5hYmxlYml0cy5jb20vb2ZmaWNlLWFkZGlucy1ibG9nLzIwMTUvMTIvMDgvZXhjZWwtcmVmZXJlbmNlLWFub3RoZXItc2hlZXQtd29ya2Jvb2svXG5cblx0XHQvLyBTYWxlcyFCMlxuXHRcdC8vICdXaW50ZXIgc2FsZXMnIUIyXG5cdFx0Ly8gW1NhbGVzLnhsc3hdSmFuIUIyOkI1XG5cdFx0Ly8gRDpcXFJlcG9ydHNcXFtTYWxlcy54bHN4XUphbiFCMjpCNVxuXHRcdC8vICdbU2FsZXMueGxzeF1KYW4gc2FsZXMnIUIyOkI1XG5cdFx0Ly8gJ0Q6XFxSZXBvcnRzXFxbU2FsZXMueGxzeF1KYW4gc2FsZXMnIUIyOkI1XG5cblx0XHRwYXR0ZXJuOiAvKD86J1teJ10qJ3woPzpbXlxccygpW1xcXXt9PD4qP1wiJzssJCZdKlxcW1teXlxccygpW1xcXXt9PD4qP1wiJ10rXFxdKT9cXHcrKSEvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvISQvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLycvLFxuXHRcdFx0J3NoZWV0Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW15bXFxdXSskLyxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnZmlsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcW1teW1xcXV0rXFxdJC8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bW1xcXV0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncGF0aCc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnZnVuY3Rpb24tbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW0EtWl1cXHcqKD89XFwoKS9pLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fSxcblx0J3JhbmdlJzoge1xuXHRcdHBhdHRlcm46IC9cXCQ/XFxiKD86W0EtWl0rXFwkP1xcZCs6XFwkP1tBLVpdK1xcJD9cXGQrfFtBLVpdKzpcXCQ/W0EtWl0rfFxcZCs6XFwkP1xcZCspXFxiL2ksXG5cdFx0YWxpYXM6ICdzZWxlY3RvcicsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvOi8sXG5cdFx0XHQnY2VsbCc6IC9cXCQ/W0EtWl0rXFwkP1xcZCsvaSxcblx0XHRcdCdjb2x1bW4nOiAvXFwkP1tBLVpdKy9pLFxuXHRcdFx0J3Jvdyc6IC9cXCQ/XFxkKy9cblx0XHR9XG5cdH0sXG5cdCdjZWxsJzoge1xuXHRcdC8vIEV4Y2VsIGlzIGNhc2UgaW5zZW5zaXRpdmUsIHNvIHRoZSBzdHJpbmcgXCJmb28xXCIgY291bGQgYmUgZWl0aGVyIGEgdmFyaWFibGUgb3IgYSBjZWxsLlxuXHRcdC8vIFRvIGNvbWJhdCB0aGlzLCB3ZSBtYXRjaCBjZWxscyBjYXNlIGluc2Vuc2l0aXZlLCBpZiB0aGUgY29udGFpbiBhdCBsZWFzdCBvbmUgXCIkXCIsIGFuZCBjYXNlIHNlbnNpdGl2ZSBvdGhlcndpc2UuXG5cdFx0cGF0dGVybjogL1xcYltBLVpdK1xcZCtcXGJ8XFwkW0EtWmEtel0rXFwkP1xcZCtcXGJ8XFxiW0EtWmEtel0rXFwkXFxkK1xcYi8sXG5cdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0fSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfFRSVUUpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bLSsqL14lPSYsXXw8Wz0+XT98Pj0/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1tbXFxdKCk7e318XS9cbn07XG5cblByaXNtLmxhbmd1YWdlc1sneGxzeCddID0gUHJpc20ubGFuZ3VhZ2VzWyd4bHMnXSA9IFByaXNtLmxhbmd1YWdlc1snZXhjZWwtZm9ybXVsYSddO1xuXG5QcmlzbS5sYW5ndWFnZXMuZnNoYXJwID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcKFxcKig/IVxcKSlbXFxzXFxTXSo/XFwqXFwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzpcIlwiXCJbXFxzXFxTXSo/XCJcIlwifEBcIig/OlwiXCJ8W15cIl0pKlwifFwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpQj8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmV4Y2VwdGlvbnxpbmhlcml0fGludGVyZmFjZXxuZXd8b2Z8dHlwZSlcXHMrfFxcd1xccyo6XFxzKnxcXHM6XFw/Pz5cXHMqKVsuXFx3XStcXGIoPzpcXHMqKD86LT58XFwqKVxccypbLlxcd10rXFxiKSooPyFcXHMqWzouXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvLT58XFwqLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpsZXR8cmV0dXJufHVzZXx5aWVsZCkoPzohXFxCfFxcYil8XFxiKD86YWJzdHJhY3R8YW5kfGFzfGFzcnxhc3NlcnR8YXRvbWljfGJhc2V8YmVnaW58YnJlYWt8Y2hlY2tlZHxjbGFzc3xjb21wb25lbnR8Y29uc3R8Y29uc3RyYWludHxjb25zdHJ1Y3Rvcnxjb250aW51ZXxkZWZhdWx0fGRlbGVnYXRlfGRvfGRvbmV8ZG93bmNhc3R8ZG93bnRvfGVhZ2VyfGVsaWZ8ZWxzZXxlbmR8ZXZlbnR8ZXhjZXB0aW9ufGV4dGVybnxleHRlcm5hbHxmYWxzZXxmaW5hbGx5fGZpeGVkfGZvcnxmdW58ZnVuY3Rpb258ZnVuY3RvcnxnbG9iYWx8aWZ8aW58aW5jbHVkZXxpbmhlcml0fGlubGluZXxpbnRlcmZhY2V8aW50ZXJuYWx8bGFuZHxsYXp5fGxvcnxsc2x8bHNyfGx4b3J8bWF0Y2h8bWVtYmVyfG1ldGhvZHxtaXhpbnxtb2R8bW9kdWxlfG11dGFibGV8bmFtZXNwYWNlfG5ld3xub3R8bnVsbHxvYmplY3R8b2Z8b3BlbnxvcnxvdmVycmlkZXxwYXJhbGxlbHxwcml2YXRlfHByb2Nlc3N8cHJvdGVjdGVkfHB1YmxpY3xwdXJlfHJlY3xzZWFsZWR8c2VsZWN0fHNpZ3xzdGF0aWN8c3RydWN0fHRhaWxjYWxsfHRoZW58dG98dHJhaXR8dHJ1ZXx0cnl8dHlwZXx1cGNhc3R8dmFsfHZpcnR1YWx8dm9pZHx2b2xhdGlsZXx3aGVufHdoaWxlfHdpdGgpXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvXFxiMHhbXFxkYS1mQS1GXSsoPzpMRnxsZnx1bik/XFxiLyxcblx0XHQvXFxiMGJbMDFdKyg/OnV5fHkpP1xcYi8sXG5cdFx0Lyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbZm1dfGVbKy1dP1xcZCspP1xcYi9pLFxuXHRcdC9cXGJcXGQrKD86W0lsTHN5XXxVTHx1W2xzeV0/KT9cXGIvXG5cdF0sXG5cdCdvcGVyYXRvcic6IC8oWzw+fiZeXSlcXDFcXDF8KFsqLjo8PiZdKVxcMnw8LXwtPnxbIT06XT18PD9cXHx7MSwzfT4/fFxcPz8oPzo8PXw+PXw8PnxbLSsqLyU9PD5dKVxcPz98WyE/XiZdfH5bK34tXXw6Pnw6XFw/Pj8vXG59KTtcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2ZzaGFycCcsICdrZXl3b3JkJywge1xuXHQncHJlcHJvY2Vzc29yJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopIy4qL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXiMpXFxiKD86ZWxzZXxlbmRpZnxpZnxsaWdodHxsaW5lfG5vd2FybilcXGIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59KTtcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2ZzaGFycCcsICdwdW5jdHVhdGlvbicsIHtcblx0J2NvbXB1dGF0aW9uLWV4cHJlc3Npb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYltfYS16XVxcdyooPz1cXHMqXFx7KS9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fVxufSk7XG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdmc2hhcnAnLCAnc3RyaW5nJywge1xuXHQnYW5ub3RhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxbPC4rPz5cXF0vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbPHw+XFxdJC8sXG5cdFx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXHcrJHwoXnw7XFxzKilbQS1aXVxcdyooPz1cXCgpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdhbm5vdGF0aW9uLWNvbnRlbnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5mc2hhcnBcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W15cXFxcJ118XFxcXCg/Oi58XFxkezN9fHhbYS1mQS1GXFxkXXsyfXx1W2EtZkEtRlxcZF17NH18VVthLWZBLUZcXGRdezh9KSknQj8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBjb21tZW50X2luc2lkZSA9IHtcblx0XHQnZnVuY3Rpb24nOiAvXFxiKD86QlVHUz98RklYKD86TUVTPyk/fE5PVEVTP3xUT0RPUz98WFgrfEhBQ0tTP3xXQVJOKD86SU5HKT98XFw/ezIsfXwhezIsfSlcXGIvXG5cdH07XG5cdHZhciBzdHJpbmdfaW5zaWRlID0ge1xuXHRcdCdudW1iZXInOiAvXFxcXFteXFxzJ118JVxcdy9cblx0fTtcblxuXHR2YXIgZmFjdG9yID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyAhIHNpbmdsZS1saW5lIGV4Y2xhbWF0aW9uIHBvaW50IGNvbW1lbnRzIHdpdGggd2hpdGVzcGFjZSBhZnRlci9hcm91bmQgdGhlICFcblx0XHRcdFx0cGF0dGVybjogLyhefFxccykoPzohIC4qfCEkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogY29tbWVudF9pbnNpZGVcblx0XHRcdH0sXG5cblx0XHRcdC8qIGZyb20gYmFzaXMvbXVsdGlsaW5lOiAqL1xuXHRcdFx0e1xuXHRcdFx0XHQvLyAvKiBjb21tZW50ICovLCAvKiBjb21tZW50Ki9cblx0XHRcdFx0cGF0dGVybjogLyhefFxccylcXC9cXCpcXHNbXFxzXFxTXSo/XFwqXFwvKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNvbW1lbnRfaW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyAhW1sgY29tbWVudCBdXSAsICFbPT09WyBjb21tZW50XT09PV1cblx0XHRcdFx0cGF0dGVybjogLyhefFxccykhXFxbKD17MCw2fSlcXFtcXHNbXFxzXFxTXSo/XFxdXFwyXFxdKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGNvbW1lbnRfaW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdCdudW1iZXInOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGJhc2ljIGJhc2UgMTAgaW50ZWdlcnMgOSwgLTlcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylbKy1dP1xcZCsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBiYXNlIHByZWZpeCBpbnRlZ2VycyAwYjAxMCAwbzcwIDB4YWQgMGQxMCAwWEFEIC0weGE5XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpWystXT8wKD86YlswMV0rfG9bMC03XSt8ZFxcZCt8eFtcXGRBLUZdKykoPz1cXHN8JCkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gZnJhY3Rpb25hbCByYXRpb3MgMS81IC0xLzUgYW5kIHRoZSBsaXRlcmFsIGZsb2F0IGFwcHJveGltYXRpb25zIDEvNS4gLTEvNS5cblx0XHRcdFx0cGF0dGVybjogLyhefFxccylbKy1dP1xcZCtcXC9cXGQrXFwuPyg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHBvc2l0aXZlIG1peGVkIG51bWJlcnMgMjMrMS81ICsyMysxLzVcblx0XHRcdFx0cGF0dGVybjogLyhefFxccylcXCs/XFxkK1xcK1xcZCtcXC9cXGQrKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gbmVnYXRpdmUgbWl4ZWQgbnVtYmVycyAtMjMtMS81XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpLVxcZCstXFxkK1xcL1xcZCsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBiYXNpYyBkZWNpbWFsIGZsb2F0cyAtMC4wMSAwLiAuMCAuMSAtLjEgLTEuIC0xMi4xMyArMTIuMTNcblx0XHRcdFx0Ly8gYW5kIHNjaWVudGlmaWMgbm90YXRpb24gd2l0aCBiYXNlIDEwIGV4cG9uZW50cyAzZTQgM2UtNCAuM2UtNFxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/KD86XFxkKlxcLlxcZCt8XFxkK1xcLlxcZCp8XFxkKykoPzplWystXT9cXGQrKT8oPz1cXHN8JCkvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTkFOIGxpdGVyYWwgc3ludGF4IE5BTjogODAwMDBkZWFkYmVlZiwgTkFOOiBhXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpTkFOOlxccytbXFxkYS1mQS1GXSsoPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvKlxuXHRcdFx0XHRcdGJhc2UgcHJlZml4IGZsb2F0cyAweDEuMHAzICg4LjApIDBiMS4wMTBwMiAoNS4wKSAweDEucDEgMGIxLjExMTExMTExcDExMTExLi4uXG5cdFx0XHRcdFx0XCJUaGUgbm9ybWFsaXplZCBoZXggZm9ybSBcdTAwQjEweDEuTU1NTU1NTU1NTU1NTVtwUF1cdTAwQjFFRUVFIGFsbG93cyBhbnkgZmxvYXRpbmctcG9pbnQgbnVtYmVyIHRvIGJlIHNwZWNpZmllZCBwcmVjaXNlbHkuXG5cdFx0XHRcdFx0VGhlIHZhbHVlcyBvZiBNTU1NTU1NTU1NTU1NIGFuZCBFRUVFIG1hcCBkaXJlY3RseSB0byB0aGUgbWFudGlzc2EgYW5kIGV4cG9uZW50IGZpZWxkcyBvZiB0aGUgYmluYXJ5IElFRUUgNzU0IHJlcHJlc2VudGF0aW9uLlwiXG5cdFx0XHRcdFx0PGh0dHBzOi8vZG9jcy5mYWN0b3Jjb2RlLm9yZy9jb250ZW50L2FydGljbGUtc3ludGF4LWZsb2F0cy5odG1sPlxuXHRcdFx0XHQqL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVsrLV0/MCg/OmIxXFwuWzAxXSp8bzFcXC5bMC03XSp8ZDFcXC5cXGQqfHgxXFwuW1xcZEEtRl0qKXBcXGQrKD89XFxzfCQpL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXG5cdFx0Ly8gUi8gcmVnZXhwP1xcL1xcXFwvXG5cdFx0J3JlZ2V4cCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpUlxcL1xccyg/OlxcXFxcXFN8W15cXFxcL10pKlxcLyg/OltpZG1zcl0qfFtpZG1zcl0rLVtpZG1zcl0rKSg/PVxcc3wkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IC9cXFxcXFxTLyxcblx0XHRcdFx0J2tleXdvcmQnOiAvWys/KlxcW1xcXV4kKCl7fS58XS8sXG5cdFx0XHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcLylbaWRtc3JdKyg/Oi1baWRtc3JdKyk/Lyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVt0Zl0oPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvLyBTQlVGXCIgYXNkXCIsIFVSTFwiIDovLy4uLlwiLCBQXCIgL2V0Yy9cIlxuXHRcdCdjdXN0b20tc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccylbQS1aMC05XFwtXStcIlxccyg/OlxcXFxcXFN8W15cIlxcXFxdKSpcIi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdudW1iZXInOiAvXFxcXFxcU3wlXFx3fFxcLy9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J211bHRpbGluZS1zdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFNUUklORzogbmFtZSBcXG4gY29udGVudCBcXG4gOyAtPiBDT05TVEFOVDogbmFtZSBcImNvbnRlbnRcIiAoc3ltYm9sKVxuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVNUUklORzpcXHMrXFxTKyg/OlxcbnxcXHJcXG4pLiooPzpcXG58XFxyXFxuKVxccyo7KD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdudW1iZXInOiBzdHJpbmdfaW5zaWRlLm51bWJlcixcblx0XHRcdFx0XHQvLyB0cmFpbGluZyBzZW1pY29sb24gb24gaXRzIG93biBsaW5lXG5cdFx0XHRcdFx0J3NlbWljb2xvbi1vci1zZXRsb2NhbCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl1bIFxcdF0qKTsoPz1cXHN8JCkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBIRVJFRE9DOiBtYXJrZXIgXFxuIGNvbnRlbnQgXFxuIG1hcmtlciA7IC0+IFwiY29udGVudFwiIChpbW1lZGlhdGUpXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpSEVSRURPQzpcXHMrXFxTKyg/OlxcbnxcXHJcXG4pLiooPzpcXG58XFxyXFxuKVxccypcXFMrKD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZTogc3RyaW5nX2luc2lkZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gW1sgc3RyaW5nIF1dLCBbPT1bIHN0cmluZ109PV1cblx0XHRcdFx0cGF0dGVybjogLyhefFxccylcXFsoPXswLDZ9KVxcW1xcc1tcXHNcXFNdKj9cXF1cXDJcXF0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdFx0aW5zaWRlOiBzdHJpbmdfaW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdCdzcGVjaWFsLXVzaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccylVU0lORzooPzpcXHNcXFMrKSooPz1cXHMrOyg/Olxcc3wkKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIHRoaXMgaXMgZXNzZW50aWFsbHkgYSByZWdleCBmb3Igdm9jYWIgbmFtZXMsIHdoaWNoIGkgZG9uJ3Qgd2FudCB0byBzcGVjaWZ5XG5cdFx0XHRcdC8vIGJ1dCB0aGUgVVNJTkc6IGdldHMgcGlja2VkIHVwIGFzIGEgdm9jYWIgbmFtZVxuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxzKVteOlxcc10rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0LyogdGhpcyBkZXNjcmlwdGlvbiBvZiBzdGFjayBlZmZlY3QgbGl0ZXJhbCBzeW50YXggaXMgbm90IGNvbXBsZXRlIGFuZCBub3QgYXMgc3BlY2lmaWMgYXMgdGhlb3JldGljYWxseSBwb3NzaWJsZVxuXHRcdFx0dHJ5aW5nIHRvIGRvIGJldHRlciBpcyBtb3JlIHdvcmsgYW5kIHJlZ2V4LWNvbXB1dGF0aW9uLXRpbWUgdGhhbiBpdCdzIHdvcnRoIHRob3VnaC5cblx0XHRcdC0gd2UnZCBsaWtlIHRvIGhhdmUgdGhlIFwiZGVsaW1pdGVyXCIgcGFydHMgb2YgdGhlIHN0YWNrIGVmZmVjdCBbICgsIC0tLCBhbmQgKSBdIGJlIGEgZGlmZmVyZW50IChsZXNzLWltcG9ydGFudCBvciBjb21tZW50LWxpa2UpIGNvbG91ciB0byB0aGUgc3RhY2sgZWZmZWN0IGNvbnRlbnRzXG5cdFx0XHQtIHdlJ2QgbGlrZSBpZiBuZXN0ZWQgc3RhY2sgZWZmZWN0cyB3ZXJlIHRyZWF0ZWQgYXMgc3VjaCByYXRoZXIgdGhhbiBqdXN0IGFwcGVhcmluZyBmbGF0ICh3aXRoIGBpbnNpZGVgKVxuXHRcdFx0LSB3ZSdkIGxpa2UgaWYgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSBuYW1lIGNvbnZlbnRpb25zIHdlcmUgcmVjb2duaXNlZCBzcGVjaWZpY2FsbHk6XG5cdFx0XHRcdHNwZWNpYWwgcm93IHZhcmlhYmxlcyA9IC4uYSBiLi5cblx0XHRcdFx0dHlwZSBhbmQgc3RhY2sgZWZmZWN0IGFubm90YXRpb25zIGVuZCB3aXRoIGEgY29sb24gPSAoIHF1b3Q6ICggYTogKCAtLSApIC0tIGIgKSAtLSB4ICksICggeDogbnVtYmVyIC0tIClcblx0XHRcdFx0d29yZCB0aHJvd3MgdW5jb25kaXRpb25hbCBlcnJvciA9ICpcblx0XHRcdFx0YW55IG90aGVyIHdvcmQtbGlrZSB2YXJpYWJsZSBuYW1lID0gYSA/IHEnIGV0Y1xuXG5cdFx0XHRodHRwczovL2RvY3MuZmFjdG9yY29kZS5vcmcvY29udGVudC9hcnRpY2xlLWVmZmVjdHMuaHRtbFxuXG5cdFx0XHR0aGVzZSBhcmUgcHJldHR5IGNvbXBsaWNhdGVkIHRvIGhpZ2hsaWdodCBwcm9wZXJseSB3aXRob3V0IGEgcmVhbCBwYXJzZXIsIGFuZCB0aGVyZWZvcmUgb3V0IG9mIHNjb3BlXG5cdFx0XHR0aGUgb2xkIHBhdHRlcm4sIHdoaWNoIG1heSBiZSBsYXRlciB1c2VmdWwsIHdhczogKF58XFxzKSg/OmNhbGx8ZXhlY3V0ZXxldmFsKT9cXCgoPzpcXHMrW15cIlxcclxcblxcdCBdXFxTKikqP1xccystLSg/OlxccytbXlwiXFxuXFx0IF1cXFMqKSo/XFxzK1xcKSg/PVxcc3wkKVxuXHRcdCovXG5cblx0XHQvLyBjdXJyZW50IHNvbHV0aW9uIGlzIG5vdCBncmVhdFxuXHRcdCdzdGFjay1lZmZlY3QtZGVsaW1pdGVyJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxcXHMpKD86Y2FsbHxldmFsfGV4ZWN1dGUpP1xcKCg/PVxccykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gbWlkZGxlIC0tXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKS0tKD89XFxzKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVxcKSg/PVxcc3wkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdCdjb21iaW5hdG9ycyc6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQna2VybmVsLWJ1aWx0aW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiBudWxsLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fSxcblxuXHRcdCdzZXF1ZW5jZXMtYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXG5cdFx0J21hdGgtYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXG5cdFx0J2NvbnN0cnVjdG9yLXdvcmQnOiB7XG5cdFx0XHQvLyA8YXJyYXk+IGJ1dCBub3QgPD0+XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKTwoPyE9Kz58LSs+KVxcUys+KD89XFxzfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblxuXHRcdCdvdGhlci1idWlsdGluLXN5bnRheCc6IHtcblx0XHRcdHBhdHRlcm46IG51bGwsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXG5cdFx0Lypcblx0XHRcdGZ1bGwgbGlzdCBvZiBzdXBwb3J0ZWQgd29yZCBuYW1pbmcgY29udmVudGlvbnM6ICh0aGUgY29udmVudGlvbiBhcHBlYXJzIG91dHNpZGUgb2YgdGhlIFticmFja2V0c10pXG5cdFx0XHRcdHNldC1beF1cblx0XHRcdFx0Y2hhbmdlLVt4XVxuXHRcdFx0XHR3aXRoLVt4XVxuXHRcdFx0XHRuZXctW3hdXG5cdFx0XHRcdD5bc3RyaW5nXVxuXHRcdFx0XHRbYmFzZV0+XG5cdFx0XHRcdFtzdHJpbmddPltudW1iZXJdXG5cdFx0XHRcdCtbc3ltYm9sXStcblx0XHRcdFx0W2Jvb2xlYW4td29yZF0/XG5cdFx0XHRcdD9bb2ZdXG5cdFx0XHRcdFtzbG90LXJlYWRlcl0+PlxuXHRcdFx0XHQ+PltzbG90LXNldHRlcl1cblx0XHRcdFx0W3Nsb3Qtd3JpdGVyXTw8XG5cdFx0XHRcdChbaW1wbGVtZW50YXRpb24tZGV0YWlsXSlcblx0XHRcdFx0W211dGF0ZXJdIVxuXHRcdFx0XHRbdmFyaWFudF0qXG5cdFx0XHRcdFtwcmV0dHlwcmludF0uXG5cdFx0XHRcdCRbaGVscC1tYXJrdXBdXG5cblx0XHRcdDxjb25zdHJ1Y3RvcnM+LCBTWU5UQVg6LCBldGMgYXJlIHN1cHBvcnRlZCBieSB0aGVpciBvd24gcGF0dGVybnMuXG5cblx0XHRcdGB3aXRoYCBhbmQgYG5ld2AgZnJvbSBga2VybmVsYCBhcmUgdGhlaXIgb3duIGJ1aWx0aW5zLlxuXG5cdFx0XHRzZWUgPGh0dHBzOi8vZG9jcy5mYWN0b3Jjb2RlLm9yZy9jb250ZW50L2FydGljbGUtY29udmVudGlvbnMuaHRtbD5cblx0XHQqL1xuXHRcdCdjb252ZW50aW9uYWxseS1uYW1lZC13b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccykoPyFcIikoPzooPzpjaGFuZ2V8bmV3fHNldHx3aXRoKS1cXFMrfFxcJFxcUyt8PltePlxcc10rfFteOj5cXHNdKz58W14+XFxzXSs+W14+XFxzXSt8XFwrW14rXFxzXStcXCt8W14/XFxzXStcXD98XFw/W14/XFxzXSt8W14+XFxzXSs+Pnw+PltePlxcc10rfFtePFxcc10rPDx8XFwoW14oKVxcc10rXFwpfFteIVxcc10rIXxbXipcXHNdXFxTKlxcKnxbXi5cXHNdXFxTKlxcLikoPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J2NvbG9uLXN5bnRheCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpKD86W0EtWjAtOVxcLV0rIz8pPzp7MSwyfVxccysoPzo7XFxTK3woPyE7KVxcUyspKD89XFxzfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cblx0XHQnc2VtaWNvbG9uLW9yLXNldGxvY2FsJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHMpKD86O3w6PikoPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdC8vIGRvIG5vdCBoaWdobGlnaHQgbGVhZGluZyB9IG9yIHRyYWlsaW5nIFh7IGF0IHRoZSBiZWdpbi9lbmQgb2YgdGhlIGZpbGUgYXMgaXQncyBpbnZhbGlkIHN5bnRheFxuXHRcdCdjdXJseS1icmFjZS1saXRlcmFsLWRlbGltaXRlcic6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gb3BlbmluZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVthLXpdKlxceyg/PVxccykvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIGNsb3Npbmdcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpXFx9KD89XFxzfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHRcdH0sXG5cblx0XHRdLFxuXG5cdFx0Ly8gZG8gbm90IGhpZ2hsaWdodCBsZWFkaW5nIF0gb3IgdHJhaWxpbmcgWyBhdCB0aGUgYmVnaW4vZW5kIG9mIHRoZSBmaWxlIGFzIGl0J3MgaW52YWxpZCBzeW50YXhcblx0XHQncXVvdGF0aW9uLWRlbGltaXRlcic6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gb3BlbmluZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcWyg/PVxccykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gY2xvc2luZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXF0oPz1cXHN8JCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0fSxcblx0XHRdLFxuXG5cdFx0J25vcm1hbC13b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccylbXlwiXFxzXVxcUyooPz1cXHN8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvKlxuXHRcdFx0YmFzaWMgZmlyc3QtY2xhc3Mgc3RyaW5nIFwiYVwiXG5cdFx0XHRcdHdpdGggZXNjYXBlZCBkb3VibGUtcXVvdGUgXCJhXFxcIlwiXG5cdFx0XHRcdGVzY2FwZWQgYmFja3NsYXNoIFwiXFxcXFwiXG5cdFx0XHRcdGFuZCBnZW5lcmFsIGVzY2FwZXMgc2luY2UgRmFjdG9yIGhhcyBzbyBtYW55IFwiXFxOXCJcblxuXHRcdFx0c3ludGF4IHRoYXQgd29ya3MgaW4gdGhlIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzbid0IGZ1bGx5XG5cdFx0XHRzdXBwb3J0ZWQgYmVjYXVzZSBpdCdzIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbDpcblx0XHRcdFx0XCJzdHJpbmcgMVwiXCJzdHJpbmcgMlwiIC0+IDIgc3RyaW5ncyAod29ya3MgYW55d2F5KVxuXHRcdFx0XHRcInN0cmluZ1wiNSAtPiBzdHJpbmcsIDVcblx0XHRcdFx0XCJzdHJpbmdcIlsgXSAtPiBzdHJpbmcsIHF1b3RhdGlvblxuXHRcdFx0XHR7IFwiYVwifSAtPiBhcnJheTxzdHJpbmc+XG5cblx0XHRcdHRoZSByZXN0IG9mIHRob3NlIGV4YW1wbGVzIGFsbCBwcm9wZXJseSByZWNvZ25pc2UgdGhlIHN0cmluZywgYnV0IG5vdFxuXHRcdFx0XHR0aGUgb3RoZXIgb2JqZWN0IChudW1iZXIsIHF1b3RhdGlvbiwgZXRjKVxuXHRcdFx0dGhpcyBpcyBmaW5lIGZvciBhIHJlZ2V4LW9ubHkgaW1wbGVtZW50YXRpb24uXG5cdFx0Ki9cblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFxcU3xbXlwiXFxcXF0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogc3RyaW5nX2luc2lkZVxuXHRcdH1cblx0fTtcblxuXHR2YXIgZXNjYXBlID0gZnVuY3Rpb24gKHN0cikge1xuXHRcdHJldHVybiAoc3RyICsgJycpLnJlcGxhY2UoLyhbLj8qK1xcXiRcXFtcXF1cXFxcKCl7fXxcXC1dKS9nLCAnXFxcXCQxJyk7XG5cdH07XG5cblx0dmFyIGFyclRvV29yZHNSZWdFeHAgPSBmdW5jdGlvbiAoYXJyKSB7XG5cdFx0cmV0dXJuIG5ldyBSZWdFeHAoXG5cdFx0XHQnKF58XFxcXHMpKD86JyArIGFyci5tYXAoZXNjYXBlKS5qb2luKCd8JykgKyAnKSg/PVxcXFxzfCQpJ1xuXHRcdCk7XG5cdH07XG5cblx0dmFyIGJ1aWx0aW5zID0ge1xuXHRcdCdrZXJuZWwtYnVpbHRpbic6IFtcblx0XHRcdCdvcicsICcybmlwZCcsICc0ZHJvcCcsICd0dWNrJywgJ3dyYXBwZXInLCAnbmlwJywgJ3dyYXBwZXI/JywgJ2NhbGxzdGFjaz5hcnJheScsICdkaWUnLCAnZHVwZCcsICdjYWxsc3RhY2snLCAnY2FsbHN0YWNrPycsICczZHVwJywgJ2hhc2hjb2RlJywgJ3BpY2snLCAnNG5pcCcsICdidWlsZCcsICc+Ym9vbGVhbicsICduaXBkJywgJ2Nsb25lJywgJzVuaXAnLCAnZXE/JywgJz8nLCAnPScsICdzd2FwZCcsICcyb3ZlcicsICdjbGVhcicsICcyZHVwJywgJ2dldC1yZXRhaW5zdGFjaycsICdub3QnLCAndHVwbGU/JywgJ2R1cCcsICczbmlwZCcsICdjYWxsJywgJy1yb3RkJywgJ29iamVjdCcsICdkcm9wJywgJ2Fzc2VydD0nLCAnYXNzZXJ0PycsICctcm90JywgJ2V4ZWN1dGUnLCAnYm9hJywgJ2dldC1jYWxsc3RhY2snLCAnY3VycmllZD8nLCAnM2Ryb3AnLCAncGlja2QnLCAnb3ZlcmQnLCAnb3ZlcicsICdyb2xsJywgJzNuaXAnLCAnc3dhcCcsICdhbmQnLCAnMm5pcCcsICdyb3RkJywgJ3Rocm93JywgJyhjbG9uZSknLCAnaGFzaGNvZGUqJywgJ3NwaW4nLCAncmVhY2gnLCAnNGR1cCcsICdlcXVhbD8nLCAnZ2V0LWRhdGFzdGFjaycsICdhc3NlcnQnLCAnMmRyb3AnLCAnPHdyYXBwZXI+JywgJ2Jvb2xlYW4/JywgJ2lkZW50aXR5LWhhc2hjb2RlJywgJ2lkZW50aXR5LXR1cGxlPycsICdudWxsJywgJ2NvbXBvc2VkPycsICduZXcnLCAnNWRyb3AnLCAncm90JywgJy1yb2xsJywgJ3hvcicsICdpZGVudGl0eS10dXBsZScsICdib29sZWFuJ1xuXHRcdF0sXG5cdFx0J290aGVyLWJ1aWx0aW4tc3ludGF4JzogW1xuXHRcdFx0Ly8gc3ludGF4XG5cdFx0XHQnPT09PT09PScsICdyZWN1cnNpdmUnLCAnZmx1c2hhYmxlJywgJz4+JywgJzw8PDw8PCcsICdNXFxcXCcsICdCJywgJ1BSSVZBVEU+JywgJ1xcXFwnLCAnPT09PT09JywgJ2ZpbmFsJywgJ2lubGluZScsICdkZWxpbWl0ZXInLCAnZGVwcmVjYXRlZCcsICc8UFJJVkFURScsICc+Pj4+Pj4nLCAnPDw8PDw8PCcsICdwYXJzZS1jb21wbGV4JywgJ21hbGZvcm1lZC1jb21wbGV4JywgJ3JlYWQtb25seScsICc+Pj4+Pj4+JywgJ2NhbGwtbmV4dC1tZXRob2QnLCAnPDwnLCAnZm9sZGFibGUnLFxuXHRcdFx0Ly8gbGl0ZXJhbHNcblx0XHRcdCckJywgJyRbJywgJyR7J1xuXHRcdF0sXG5cdFx0J3NlcXVlbmNlcy1idWlsdGluJzogW1xuXHRcdFx0J21lbWJlci1lcT8nLCAnbWlzbWF0Y2gnLCAnYXBwZW5kJywgJ2Fzc2VydC1zZXF1ZW5jZT0nLCAnbG9uZ2VyJywgJ3JlcGV0aXRpb24nLCAnY2xvbmUtbGlrZScsICczc2VxdWVuY2UnLCAnYXNzZXJ0LXNlcXVlbmNlPycsICdsYXN0LWluZGV4LWZyb20nLCAncmV2ZXJzZWQnLCAnaW5kZXgtZnJvbScsICdjdXQqJywgJ3BhZC10YWlsJywgJ2pvaW4tYXMnLCAncmVtb3ZlLWVxIScsICdjb25jYXQtYXMnLCAnYnV0LWxhc3QnLCAnc25pcCcsICdudGhzJywgJ250aCcsICdzZXF1ZW5jZScsICdsb25nZXN0JywgJ3NsaWNlPycsICc8c2xpY2U+JywgJ3JlbW92ZS1udGgnLCAndGFpbC1zbGljZScsICdlbXB0eT8nLCAndGFpbConLCAnbWVtYmVyPycsICd2aXJ0dWFsLXNlcXVlbmNlPycsICdzZXQtbGVuZ3RoJywgJ2Ryb3AtcHJlZml4JywgJ2lvdGEnLCAndW5jbGlwJywgJ2JvdW5kcy1lcnJvcj8nLCAndW5jbGlwLWxhc3Qtc2xpY2UnLCAnbm9uLW5lZ2F0aXZlLWludGVnZXItZXhwZWN0ZWQnLCAnbm9uLW5lZ2F0aXZlLWludGVnZXItZXhwZWN0ZWQ/JywgJ21pZHBvaW50QCcsICdsb25nZXI/JywgJz9zZXQtbnRoJywgJz9maXJzdCcsICdyZXN0LXNsaWNlJywgJ3ByZXBlbmQtYXMnLCAncHJlcGVuZCcsICdmb3VydGgnLCAnc2lmdCcsICdzdWJzZXEtc3RhcnQnLCAnbmV3LXNlcXVlbmNlJywgJz9sYXN0JywgJ2xpa2UnLCAnZmlyc3Q0JywgJzFzZXF1ZW5jZScsICdyZXZlcnNlJywgJ3NsaWNlJywgJ3ZpcnR1YWxAJywgJ3JlcGV0aXRpb24/JywgJ3NldC1sYXN0JywgJ2luZGV4JywgJzRzZXF1ZW5jZScsICdtYXgtbGVuZ3RoJywgJ3NldC1zZWNvbmQnLCAnaW1tdXRhYmxlLXNlcXVlbmNlJywgJ2ZpcnN0MicsICdmaXJzdDMnLCAnc3VwcmVtdW0nLCAndW5jbGlwLXNsaWNlJywgJ3N1ZmZpeCEnLCAnaW5zZXJ0LW50aCcsICd0YWlsJywgJzNhcHBlbmQnLCAnc2hvcnQnLCAnc3VmZml4JywgJ2NvbmNhdCcsICdmbGlwJywgJ2ltbXV0YWJsZT8nLCAncmV2ZXJzZSEnLCAnMnNlcXVlbmNlJywgJ3N1bScsICdkZWxldGUtYWxsJywgJ2luZGljZXMnLCAnc25pcC1zbGljZScsICc8aW90YT4nLCAnY2hlY2stc2xpY2UnLCAnc2VxdWVuY2U/JywgJ2hlYWQnLCAnYXBwZW5kLWFzJywgJ2hhbHZlcycsICdzZXF1ZW5jZT0nLCAnY29sbGFwc2Utc2xpY2UnLCAnP3NlY29uZCcsICdzbGljZS1lcnJvcj8nLCAncHJvZHVjdCcsICdib3VuZHMtY2hlY2s/JywgJ2JvdW5kcy1jaGVjaycsICdpbW11dGFibGUnLCAndmlydHVhbC1leGVtcGxhcicsICdoYXJ2ZXN0JywgJ3JlbW92ZScsICdwYWQtaGVhZCcsICdsYXN0JywgJ3NldC1mb3VydGgnLCAnY2FydGVzaWFuLXByb2R1Y3QnLCAncmVtb3ZlLWVxJywgJ3Nob3J0ZW4nLCAnc2hvcnRlcicsICdyZXZlcnNlZD8nLCAnc2hvcnRlcj8nLCAnc2hvcnRlc3QnLCAnaGVhZC1zbGljZScsICdwb3AqJywgJ3RhaWwtc2xpY2UqJywgJ2J1dC1sYXN0LXNsaWNlJywgJ2lvdGE/JywgJ2FwcGVuZCEnLCAnY3V0LXNsaWNlJywgJ25ldy1yZXNpemFibGUnLCAnaGVhZC1zbGljZSonLCAnc2VxdWVuY2UtaGFzaGNvZGUnLCAncG9wJywgJ3NldC1udGgnLCAnP250aCcsICdzZWNvbmQnLCAnam9pbicsICdpbW11dGFibGUtc2VxdWVuY2U/JywgJzxyZXZlcnNlZD4nLCAnM2FwcGVuZC1hcycsICd2aXJ0dWFsLXNlcXVlbmNlJywgJ3N1YnNlcT8nLCAncmVtb3ZlLW50aCEnLCAnbGVuZ3RoJywgJ2xhc3QtaW5kZXgnLCAnbGVuZ3RoZW4nLCAnYXNzZXJ0LXNlcXVlbmNlJywgJ2NvcHknLCAnbW92ZScsICd0aGlyZCcsICdmaXJzdCcsICd0YWlsPycsICdzZXQtZmlyc3QnLCAncHJlZml4JywgJ2JvdW5kcy1lcnJvcicsICc8cmVwZXRpdGlvbj4nLCAnZXhjaGFuZ2UnLCAnc3Vycm91bmQnLCAnY3V0JywgJ21pbi1sZW5ndGgnLCAnc2V0LXRoaXJkJywgJ3B1c2gtYWxsJywgJ2hlYWQ/JywgJ3N1YnNlcS1zdGFydC1mcm9tJywgJ2RlbGV0ZS1zbGljZScsICdyZXN0JywgJ3N1bS1sZW5ndGhzJywgJ2hlYWQqJywgJ2luZmltdW0nLCAncmVtb3ZlIScsICdnbHVlJywgJ3NsaWNlLWVycm9yJywgJ3N1YnNlcScsICdwdXNoJywgJ3JlcGxhY2Utc2xpY2UnLCAnc3Vic2VxLWFzJywgJ3VuY2xpcC1sYXN0J1xuXHRcdF0sXG5cdFx0J21hdGgtYnVpbHRpbic6IFtcblx0XHRcdCdudW1iZXI9JywgJ25leHQtcG93ZXItb2YtMicsICc/MSsnLCAnZnAtc3BlY2lhbD8nLCAnaW1hZ2luYXJ5LXBhcnQnLCAnZmxvYXQ+Yml0cycsICdudW1iZXI/JywgJ2ZwLWluZmluaXR5PycsICdiaWdudW0/JywgJ2ZwLXNuYW4/JywgJ2Rlbm9taW5hdG9yJywgJ2djZCcsICcqJywgJysnLCAnZnAtYml0d2lzZT0nLCAnLScsICd1Pj0nLCAnLycsICc+PScsICdiaXRhbmQnLCAncG93ZXItb2YtMj8nLCAnbG9nMi1leHBlY3RzLXBvc2l0aXZlJywgJ25lZz8nLCAnPCcsICdsb2cyJywgJz4nLCAnaW50ZWdlcj8nLCAnbnVtYmVyJywgJ2JpdHM+ZG91YmxlJywgJzIvJywgJ3plcm8/JywgJ2JpdHM+ZmxvYXQnLCAnZmxvYXQ/JywgJ3NoaWZ0JywgJ3JhdGlvPycsICdyZWN0PicsICdldmVuPycsICdyYXRpbycsICdmcC1zaWduJywgJ2JpdG5vdCcsICc+Zml4bnVtJywgJ2NvbXBsZXg/JywgJy9pJywgJ2ludGVnZXI+Zml4bnVtJywgJy9mJywgJ3NnbicsICc+YmlnbnVtJywgJ25leHQtZmxvYXQnLCAndTwnLCAndT4nLCAnbW9kJywgJ3JlY2lwJywgJ3JhdGlvbmFsJywgJz5mbG9hdCcsICcyXicsICdpbnRlZ2VyJywgJ2ZpeG51bT8nLCAnbmVnJywgJ2ZpeG51bScsICdzcScsICdiaWdudW0nLCAnPnJlY3QnLCAnYml0PycsICdmcC1xbmFuPycsICdzaW1wbGUtZ2NkJywgJ2NvbXBsZXgnLCAnPGZwLW5hbj4nLCAncmVhbCcsICc+ZnJhY3Rpb24nLCAnZG91YmxlPmJpdHMnLCAnYml0b3InLCAncmVtJywgJ2ZwLW5hbi1wYXlsb2FkJywgJ3JlYWwtcGFydCcsICdsb2cyLWV4cGVjdHMtcG9zaXRpdmU/JywgJ3ByZXYtZmxvYXQnLCAnYWxpZ24nLCAndW5vcmRlcmVkPycsICdmbG9hdCcsICdmcC1uYW4/JywgJ2FicycsICdiaXR4b3InLCAnaW50ZWdlcj5maXhudW0tc3RyaWN0JywgJ3U8PScsICdvZGQ/JywgJzw9JywgJy9tb2QnLCAnPmludGVnZXInLCAncmVhbD8nLCAncmF0aW9uYWw/JywgJ251bWVyYXRvcidcblx0XHRdXG5cdFx0Ly8gdGhhdCdzIGFsbCBmb3Igbm93XG5cdH07XG5cblx0T2JqZWN0LmtleXMoYnVpbHRpbnMpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcblx0XHRmYWN0b3Jba10ucGF0dGVybiA9IGFyclRvV29yZHNSZWdFeHAoYnVpbHRpbnNba10pO1xuXHR9KTtcblxuXHR2YXIgY29tYmluYXRvcnMgPSBbXG5cdFx0Ly8ga2VybmVsXG5cdFx0JzJiaScsICd3aGlsZScsICcydHJpJywgJ2JpKicsICc0ZGlwJywgJ2JvdGg/JywgJ3NhbWU/JywgJ3RyaUAnLCAnY3VycnknLCAncHJlcG9zZScsICczYmknLCAnP2lmJywgJ3RyaSonLCAnMmtlZXAnLCAnM2tlZXAnLCAnY3VycmllZCcsICcya2VlcGQnLCAnd2hlbicsICcyYmkqJywgJzJ0cmkqJywgJzRrZWVwJywgJ2JpQCcsICdrZWVwZGQnLCAnZG8nLCAndW5sZXNzKicsICd0cmktY3VycnknLCAnaWYqJywgJ2xvb3AnLCAnYmktY3VycnkqJywgJ3doZW4qJywgJzJiaUAnLCAnMnRyaUAnLCAnd2l0aCcsICcyd2l0aCcsICdlaXRoZXI/JywgJ2JpJywgJ3VudGlsJywgJzNkaXAnLCAnM2N1cnJ5JywgJ3RyaS1jdXJyeSonLCAndHJpLWN1cnJ5QCcsICdiaS1jdXJyeScsICdrZWVwZCcsICdjb21wb3NlJywgJzJkaXAnLCAnaWYnLCAnM3RyaScsICd1bmxlc3MnLCAndHVwbGUnLCAna2VlcCcsICcyY3VycnknLCAndHJpJywgJ21vc3QnLCAnd2hpbGUqJywgJ2RpcCcsICdjb21wb3NlZCcsICdiaS1jdXJyeUAnLFxuXHRcdC8vIHNlcXVlbmNlc1xuXHRcdCdmaW5kLWxhc3QtZnJvbScsICd0cmltLWhlYWQtc2xpY2UnLCAnbWFwLWFzJywgJ2VhY2gtZnJvbScsICdub25lPycsICd0cmltLXRhaWwnLCAncGFydGl0aW9uJywgJ2lmLWVtcHR5JywgJ2FjY3VtdWxhdGUqJywgJ3JlamVjdCEnLCAnZmluZC1mcm9tJywgJ2FjY3VtdWxhdGUtYXMnLCAnY29sbGVjdG9yLWZvci1hcycsICdyZWplY3QnLCAnbWFwJywgJ21hcC1zdW0nLCAnYWNjdW11bGF0ZSEnLCAnMmVhY2gtZnJvbScsICdmb2xsb3cnLCAnc3VwcmVtdW0tYnknLCAnbWFwIScsICd1bmxlc3MtZW1wdHknLCAnY29sbGVjdG9yJywgJ3BhZGRpbmcnLCAncmVkdWNlLWluZGV4JywgJ3JlcGxpY2F0ZS1hcycsICdpbmZpbXVtLWJ5JywgJ3RyaW0tdGFpbC1zbGljZScsICdjb3VudCcsICdmaW5kLWluZGV4JywgJ2ZpbHRlcicsICdhY2N1bXVsYXRlKiEnLCAncmVqZWN0LWFzJywgJ21hcC1pbnRlZ2VycycsICdtYXAtZmluZCcsICdyZWR1Y2UnLCAnc2VsZWN0b3InLCAnaW50ZXJsZWF2ZScsICcybWFwJywgJ2ZpbHRlci1hcycsICdiaW5hcnktcmVkdWNlJywgJ21hcC1pbmRleC1hcycsICdmaW5kJywgJ3Byb2R1Y2UnLCAnZmlsdGVyIScsICdyZXBsaWNhdGUnLCAnY2FydGVzaWFuLW1hcCcsICdjYXJ0ZXNpYW4tZWFjaCcsICdmaW5kLWluZGV4LWZyb20nLCAnbWFwLWZpbmQtbGFzdCcsICczbWFwLWFzJywgJzNtYXAnLCAnZmluZC1sYXN0JywgJ3NlbGVjdG9yLWFzJywgJzJtYXAtYXMnLCAnMm1hcC1yZWR1Y2UnLCAnYWNjdW11bGF0ZScsICdlYWNoJywgJ2VhY2gtaW5kZXgnLCAnYWNjdW11bGF0ZSotYXMnLCAnd2hlbi1lbXB0eScsICdhbGw/JywgJ2NvbGxlY3Rvci1hcycsICdwdXNoLWVpdGhlcicsICduZXctbGlrZScsICdjb2xsZWN0b3ItZm9yJywgJzJzZWxlY3RvcicsICdwdXNoLWlmJywgJzJhbGw/JywgJ21hcC1yZWR1Y2UnLCAnM2VhY2gnLCAnYW55PycsICd0cmltLXNsaWNlJywgJzJyZWR1Y2UnLCAnY2hhbmdlLW50aCcsICdwcm9kdWNlLWFzJywgJzJlYWNoJywgJ3RyaW0nLCAndHJpbS1oZWFkJywgJ2NhcnRlc2lhbi1maW5kJywgJ21hcC1pbmRleCcsXG5cdFx0Ly8gbWF0aFxuXHRcdCdpZi16ZXJvJywgJ2VhY2gtaW50ZWdlcicsICd1bmxlc3MtemVybycsICcoZmluZC1pbnRlZ2VyKScsICd3aGVuLXplcm8nLCAnZmluZC1sYXN0LWludGVnZXInLCAnKGFsbC1pbnRlZ2Vycz8pJywgJ3RpbWVzJywgJyhlYWNoLWludGVnZXIpJywgJ2ZpbmQtaW50ZWdlcicsICdhbGwtaW50ZWdlcnM/Jyxcblx0XHQvLyBtYXRoLmNvbWJpbmF0b3JzXG5cdFx0J3VubGVzcy1uZWdhdGl2ZScsICdpZi1wb3NpdGl2ZScsICd3aGVuLXBvc2l0aXZlJywgJ3doZW4tbmVnYXRpdmUnLCAndW5sZXNzLXBvc2l0aXZlJywgJ2lmLW5lZ2F0aXZlJyxcblx0XHQvLyBjb21iaW5hdG9yc1xuXHRcdCdjYXNlJywgJzJjbGVhdmUnLCAnY29uZD5xdW90JywgJ2Nhc2U+cXVvdCcsICczY2xlYXZlJywgJ3dyb25nLXZhbHVlcycsICd0by1maXhlZC1wb2ludCcsICdhbGlzdD5xdW90JywgJ2NvbmQnLCAnY2xlYXZlJywgJ2NhbGwtZWZmZWN0JywgJ3JlY3Vyc2l2ZS1oYXNoY29kZScsICdzcHJlYWQnLCAnZGVlcC1zcHJlYWQ+cXVvdCcsXG5cdFx0Ly8gY29tYmluYXRvcnMuc2hvcnQtY2lyY3VpdFxuXHRcdCcyfHwnLCAnMHx8JywgJ258fCcsICcwJiYnLCAnMiYmJywgJzN8fCcsICcxfHwnLCAnMSYmJywgJ24mJicsICczJiYnLFxuXHRcdC8vIGNvbWJpbmF0b3JzLnNtYXJ0XG5cdFx0J3NtYXJ0LXVubGVzcyonLCAna2VlcC1pbnB1dHMnLCAncmVkdWNlLW91dHB1dHMnLCAnc21hcnQtd2hlbionLCAnY2xlYXZlPmFycmF5JywgJ3NtYXJ0LXdpdGgnLCAnc21hcnQtYXBwbHknLCAnc21hcnQtaWYnLCAnaW5wdXRzL291dHB1dHMnLCAnb3V0cHV0PnNlcXVlbmNlLW4nLCAnbWFwLW91dHB1dHMnLCAnbWFwLXJlZHVjZS1vdXRwdXRzJywgJ2Ryb3BwaW5nJywgJ291dHB1dD5hcnJheScsICdzbWFydC1tYXAtcmVkdWNlJywgJ3NtYXJ0LTJtYXAtcmVkdWNlJywgJ291dHB1dD5hcnJheS1uJywgJ251bGxhcnknLCAnaW5wdXQ8c2VxdWVuY2UnLCAnYXBwZW5kLW91dHB1dHMnLCAnZHJvcC1pbnB1dHMnLCAnaW5wdXRzJywgJ3NtYXJ0LTJyZWR1Y2UnLCAnZHJvcC1vdXRwdXRzJywgJ3NtYXJ0LXJlZHVjZScsICdwcmVzZXJ2aW5nJywgJ3NtYXJ0LXdoZW4nLCAnb3V0cHV0cycsICdhcHBlbmQtb3V0cHV0cy1hcycsICdzbWFydC11bmxlc3MnLCAnc21hcnQtaWYqJywgJ3N1bS1vdXRwdXRzJywgJ2lucHV0PHNlcXVlbmNlLXVuc2FmZScsICdvdXRwdXQ+c2VxdWVuY2UnLFxuXHRcdC8vIHRhZm5cblx0XTtcblxuXHRmYWN0b3IuY29tYmluYXRvcnMucGF0dGVybiA9IGFyclRvV29yZHNSZWdFeHAoY29tYmluYXRvcnMpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5mYWN0b3IgPSBmYWN0b3I7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvKipcblx0ICogQmFzZWQgb24gdGhlIG1hbnVhbCBieSBXb3V0ZXIgdmFuIE9vcnRtZXJzc2VuLlxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9pc3N1ZXMvMjgwMSNpc3N1ZS04Mjk3MTc1MDR9XG5cdCAqL1xuXHRQcmlzbS5sYW5ndWFnZXNbJ2ZhbHNlJ10gPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx7W159XSpcXH0vXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2hhcmFjdGVyLWNvZGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJyg/OlteXFxyXXxcXHJcXG4/KS8sXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdhc3NlbWJsZXItY29kZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGQrYC8sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXHRcdCdudW1iZXInOiAvXFxkKy8sXG5cdFx0J29wZXJhdG9yJzogL1stISMkJSYnKissLi86Oz0+P0BcXFxcXl9gfH5cdTAwREZcdTAwRjhdLyxcblx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS8sXG5cdFx0J3ZhcmlhYmxlJzogL1thLXpdLyxcblx0XHQnbm9uLXN0YW5kYXJkJzoge1xuXHRcdFx0cGF0dGVybjogL1soKTxCRE9cdTAwQUVdLyxcblx0XHRcdGFsaWFzOiAnYm9sZCdcblx0XHR9XG5cdH07XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlc1snZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzJ10gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiAvXFwvXFwvLiovLFxuXHQna2V5d29yZCc6IC9cXGIoPzphbGxvd3xmdW5jdGlvbnxpZnxtYXRjaHxudWxsfHJldHVybnxydWxlc192ZXJzaW9ufHNlcnZpY2UpXFxiLyxcblx0J29wZXJhdG9yJzogLyYmfFxcfFxcfHxbPD4hPV09P3xbLSsqLyVdfFxcYig/OmlufGlzKVxcYi8sXG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlc1snZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzJ11bJ2NsYXNzLW5hbWUnXTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZmlyZXN0b3JlLXNlY3VyaXR5LXJ1bGVzJywgJ2tleXdvcmQnLCB7XG5cdCdwYXRoJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXFxzKCksXSkoPzpcXC8oPzpbXFx3XFx4QTAtXFx1RkZGRl0rfFxce1tcXHdcXHhBMC1cXHVGRkZGXSsoPzo9XFwqXFwqKT9cXH18XFwkXFwoW1xcd1xceEEwLVxcdUZGRkYuXStcXCkpKSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFx7W1xcd1xceEEwLVxcdUZGRkZdKyg/Oj1cXCpcXCopP1xcfXxcXCRcXChbXFx3XFx4QTAtXFx1RkZGRi5dK1xcKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHRcdFx0XHQna2V5d29yZCc6IC9cXCpcXCovLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLiQoKXt9XS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC8vXG5cdFx0fVxuXHR9LFxuXHQnbWV0aG9kJzoge1xuXHRcdC8vIHRvIG1ha2UgdGhlIHBhdHRlcm4gc2hvcnRlciwgdGhlIGFjdHVhbCBtZXRob2QgbmFtZXMgYXJlIG9taXR0ZWRcblx0XHRwYXR0ZXJuOiAvKFxcYmFsbG93XFxzKylbYS16XSsoPzpcXHMqLFxccypbYS16XSspKig/PVxccypbOjtdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2J1aWx0aW4nLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogLywvXG5cdFx0fVxuXHR9LFxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLmZsb3cgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhc2NyaXB0Jywge30pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2Zsb3cnLCAna2V5d29yZCcsIHtcblx0XHQndHlwZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OltCYl1vb2xlYW58RnVuY3Rpb258W05uXXVtYmVyfFtTc110cmluZ3xbU3NdeW1ib2x8YW55fG1peGVkfG51bGx8dm9pZClcXGIvLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0XHR9XG5cdFx0XVxuXHR9KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmZsb3dbJ2Z1bmN0aW9uLXZhcmlhYmxlJ10ucGF0dGVybiA9IC8oPyFcXHMpW18kYS16XFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqKD89XFxzKj1cXHMqKD86ZnVuY3Rpb25cXGJ8KD86XFwoW14oKV0qXFwpKD86XFxzKjpcXHMqXFx3Kyk/fCg/IVxccylbXyRhLXpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSopXFxzKj0+KSkvaTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5mbG93WydwYXJhbWV0ZXInXTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdmbG93JywgJ29wZXJhdG9yJywge1xuXHRcdCdmbG93LXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xce1xcfHxcXHxcXH0vLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdGlmICghQXJyYXkuaXNBcnJheShQcmlzbS5sYW5ndWFnZXMuZmxvdy5rZXl3b3JkKSkge1xuXHRcdFByaXNtLmxhbmd1YWdlcy5mbG93LmtleXdvcmQgPSBbUHJpc20ubGFuZ3VhZ2VzLmZsb3cua2V5d29yZF07XG5cdH1cblx0UHJpc20ubGFuZ3VhZ2VzLmZsb3cua2V5d29yZC51bnNoaWZ0KFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRdXFxiKSg/OkNsYXNzfGRlY2xhcmV8b3BhcXVlfHR5cGUpXFxiKD8hXFwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14kXVxcQilcXCQoPzpEaWZmfEVudW18RXhhY3R8S2V5c3xPYmpNYXB8UHJvcGVydHlUeXBlfFJlY29yZHxTaGFwZXxTdWJ0eXBlfFN1cGVydHlwZXxhd2FpdClcXGIoPyFcXCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdCk7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5mb3J0cmFuID0ge1xuXHQncXVvdGVkLW51bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvW0JPWl0oWydcIl0pW0EtRjAtOV0rXFwxL2ksXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OlxcYlxcdytfKT8oWydcIl0pKD86XFwxXFwxfCYoPzpcXHJcXG4/fFxcbikoPzpbIFxcdF0qIS4qKD86XFxyXFxuP3xcXG4pfCg/IVsgXFx0XSohKSl8KD8hXFwxKS4pKig/OlxcMXwmKS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY29tbWVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogLygmKD86XFxyXFxuP3xcXG4pXFxzKikhLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Jvb2xlYW4nOiAvXFwuKD86RkFMU0V8VFJVRSlcXC4oPzpfXFx3Kyk/L2ksXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFRF1bKy1dP1xcZCspPyg/Ol9cXHcrKT8vaSxcblx0J2tleXdvcmQnOiBbXG5cdFx0Ly8gVHlwZXNcblx0XHQvXFxiKD86Q0hBUkFDVEVSfENPTVBMRVh8RE9VQkxFID9QUkVDSVNJT058SU5URUdFUnxMT0dJQ0FMfFJFQUwpXFxiL2ksXG5cdFx0Ly8gRU5EIHN0YXRlbWVudHNcblx0XHQvXFxiKD86RU5EID8pPyg/OkJMT0NLID9EQVRBfERPfEZJTEV8Rk9SQUxMfEZVTkNUSU9OfElGfElOVEVSRkFDRXxNT0RVTEUoPyEgUFJPQ0VEVVJFKXxQUk9HUkFNfFNFTEVDVHxTVUJST1VUSU5FfFRZUEV8V0hFUkUpXFxiL2ksXG5cdFx0Ly8gU3RhdGVtZW50c1xuXHRcdC9cXGIoPzpBTExPQ0FUQUJMRXxBTExPQ0FURXxCQUNLU1BBQ0V8Q0FMTHxDQVNFfENMT1NFfENPTU1PTnxDT05UQUlOU3xDT05USU5VRXxDWUNMRXxEQVRBfERFQUxMT0NBVEV8RElNRU5TSU9OfERPfEVORHxFUVVJVkFMRU5DRXxFWElUfEVYVEVSTkFMfEZPUk1BVHxHTyA/VE98SU1QTElDSVQoPzogTk9ORSk/fElOUVVJUkV8SU5URU5UfElOVFJJTlNJQ3xNT0RVTEUgUFJPQ0VEVVJFfE5BTUVMSVNUfE5VTExJRll8T1BFTnxPUFRJT05BTHxQQVJBTUVURVJ8UE9JTlRFUnxQUklOVHxQUklWQVRFfFBVQkxJQ3xSRUFEfFJFVFVSTnxSRVdJTkR8U0FWRXxTRUxFQ1R8U1RPUHxUQVJHRVR8V0hJTEV8V1JJVEUpXFxiL2ksXG5cdFx0Ly8gT3RoZXJzXG5cdFx0L1xcYig/OkFTU0lHTk1FTlR8REVGQVVMVHxFTEVNRU5UQUx8RUxTRXxFTFNFSUZ8RUxTRVdIRVJFfEVOVFJZfElOfElOQ0xVREV8SU5PVVR8S0lORHxOVUxMfE9OTFl8T1BFUkFUT1J8T1VUfFBVUkV8UkVDVVJTSVZFfFJFU1VMVHxTRVFVRU5DRXxTVEFUfFRIRU58VVNFKVxcYi9pXG5cdF0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvXFwqXFwqfFxcL1xcL3w9PnxbPVxcL109fFs8Pl09P3w6OnxbK1xcLSo9JV18XFwuW0EtWl0rXFwuL2ksXG5cdFx0e1xuXHRcdFx0Ly8gVXNlIGxvb2tiZWhpbmQgdG8gcHJldmVudCBjb25mdXNpb24gd2l0aCAoLyAvKVxuXHRcdFx0cGF0dGVybjogLyhefCg/IVxcKCkuKVxcLyg/IVxcKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1xcKFxcL3xcXC9cXCl8WygpLDs6Jl0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gaHR0cHM6Ly9mcmVlbWFya2VyLmFwYWNoZS5vcmcvZG9jcy9kZ3VpX3RlbXBsYXRlX2V4cC5odG1sXG5cblx0Ly8gRlRMIGV4cHJlc3Npb24gd2l0aCA0IGxldmVscyBvZiBuZXN0aW5nIHN1cHBvcnRlZFxuXHR2YXIgRlRMX0VYUFIgPSAvW148KClcIiddfFxcKCg/OjxleHByPikqXFwpfDwoPyEjLS0pfDwjLS0oPzpbXi1dfC0oPyEtPikpKi0tPnxcIig/OlteXFxcXFwiXXxcXFxcLikqXCJ8Jyg/OlteXFxcXCddfFxcXFwuKSonLy5zb3VyY2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7XG5cdFx0RlRMX0VYUFIgPSBGVExfRVhQUi5yZXBsYWNlKC88ZXhwcj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gRlRMX0VYUFI7IH0pO1xuXHR9XG5cdEZUTF9FWFBSID0gRlRMX0VYUFIucmVwbGFjZSgvPGV4cHI+L2csIC9bXlxcc1xcU10vLnNvdXJjZSk7XG5cblx0dmFyIGZ0bCA9IHtcblx0XHQnY29tbWVudCc6IC88Iy0tW1xcc1xcU10qPy0tPi8sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gcmF3IHN0cmluZ1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxicihcInwnKSg/Oig/IVxcMSlbXlxcXFxdfFxcXFwuKSpcXDEvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFwifCcpKD86KD8hXFwxfFxcJFxceylbXlxcXFxdfFxcXFwufFxcJFxceyg/Oig/IVxcfSkoPzo8ZXhwcj4pKSpcXH0pKlxcMS8uc291cmNlLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBGVExfRVhQUjsgfSkpLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oKD86XnxbXlxcXFxdKSg/OlxcXFxcXFxcKSopXFwkXFx7KD86KD8hXFx9KSg/OjxleHByPikpKlxcfS8uc291cmNlLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBGVExfRVhQUjsgfSkpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxce3xcXH0kLyxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRyZXN0OiBudWxsXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphcylcXGIvLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQnYnVpbHRpbi1mdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXj9dKVxcP1xccyopXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFxzKlxcKCkvLFxuXHRcdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspP1xcYi8sXG5cdFx0J29wZXJhdG9yJzogL1xcLlxcLls8KiFdP3wtPnwtLXxcXCtcXCt8JiZ8XFx8XFx8fFxcP3sxLDJ9fFstKyovJSE9PD5dPT98XFxiKD86Z3R8Z3RlfGx0fGx0ZSlcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bLDsuOigpW1xcXXt9XS9cblx0fTtcblxuXHRmdGwuc3RyaW5nWzFdLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5yZXN0ID0gZnRsO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5mdGwgPSB7XG5cdFx0J2Z0bC1jb21tZW50Jzoge1xuXHRcdFx0Ly8gdGhlIHBhdHRlcm4gaXMgc2hvcnRlbmVkIHRvIGJlIG1vcmUgZWZmaWNpZW50XG5cdFx0XHRwYXR0ZXJuOiAvXjwjLS1bXFxzXFxTXSovLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cdFx0J2Z0bC1kaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXjxbXFxzXFxTXSs+JC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF48XFwvPylbI0BdW2Etel1cXHcqL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePFxcLz98XFwvPz4kLyxcblx0XHRcdFx0J2NvbnRlbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xccypcXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRcdGFsaWFzOiAnZnRsJyxcblx0XHRcdFx0XHRpbnNpZGU6IGZ0bFxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZnRsLWludGVycG9sYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxcJFxce1tcXHNcXFNdKlxcfSQvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlxcU1tcXHNcXFNdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICdmdGwnLFxuXHRcdFx0XHRcdGluc2lkZTogZnRsXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby11c2VsZXNzLWxhenlcblx0XHR2YXIgcGF0dGVybiA9IFJlZ0V4cCgvPCMtLVtcXHNcXFNdKj8tLT58PFxcLz9bI0BdW2EtekEtWl0oPzo8ZXhwcj4pKj8+fFxcJFxceyg/OjxleHByPikqP1xcfS8uc291cmNlLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBGVExfRVhQUjsgfSksICdnaScpO1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdmdGwnLCBwYXR0ZXJuKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10udG9rZW5pemVQbGFjZWhvbGRlcnMoZW52LCAnZnRsJyk7XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5nYW1lbWFrZXJsYW5ndWFnZSA9IFByaXNtLmxhbmd1YWdlcy5nbWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2FzZXxjb250aW51ZXxkZWZhdWx0fGRvfGVsc2V8ZW51bXxleGl0fGZvcnxnbG9iYWx2YXJ8aWZ8cmVwZWF0fHJldHVybnxzd2l0Y2h8dW50aWx8dmFyfHdoaWxlKVxcYi8sXG5cdCdudW1iZXInOiAvKD86XFxiMHhbXFxkYS1mXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPylbdWxmXXswLDR9L2ksXG5cdCdvcGVyYXRvcic6IC8tLXxcXCtcXCt8Wy0rJS89XT0/fCE9fFxcKlxcKj89P3w8Wzw9Pl0/fD5bPT5dP3wmJj98XFxeXFxeP3xcXHxcXHw/fH58XFxiKD86YW5kfGF0fG5vdHxvcnx3aXRofHhvcilcXGIvLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86R01fYnVpbGRfZGF0ZXxHTV92ZXJzaW9ufGFjdGlvbl8oPzpjb250aW51ZXxyZXN0YXJ0fHJldmVyc2V8c3RvcCl8YWxsfGdhbWVzcGVlZF8oPzpmcHN8bWljcm9zZWNvbmRzKXxnbG9iYWx8bG9jYWx8bm9vbmV8b3RoZXJ8cGl8cG9pbnRlcl8oPzppbnZhbGlkfG51bGwpfHNlbGZ8dGltZXpvbmVfKD86bG9jYWx8dXRjKXx1bmRlZmluZWR8ZXZfKD86Y3JlYXRlfGRlc3Ryb3l8c3RlcHxhbGFybXxrZXlib2FyZHxtb3VzZXxjb2xsaXNpb258b3RoZXJ8ZHJhd3xkcmF3Xyg/OmJlZ2lufGVuZHxwb3N0fHByZSl8a2V5cHJlc3N8a2V5cmVsZWFzZXx0cmlnZ2VyfCg/OmxlZnR8bWlkZGxlfG5vfHJpZ2h0KV9idXR0b258KD86bGVmdHxtaWRkbGV8cmlnaHQpX3ByZXNzfCg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9yZWxlYXNlfG1vdXNlXyg/OmVudGVyfGxlYXZlfHdoZWVsX2Rvd258d2hlZWxfdXApfGdsb2JhbF8oPzpsZWZ0fG1pZGRsZXxyaWdodClfYnV0dG9ufGdsb2JhbF8oPzpsZWZ0fG1pZGRsZXxyaWdodClfcHJlc3N8Z2xvYmFsXyg/OmxlZnR8bWlkZGxlfHJpZ2h0KV9yZWxlYXNlfGpveXN0aWNrKD86MXwyKV8oPzpidXR0b24xfGJ1dHRvbjJ8YnV0dG9uM3xidXR0b240fGJ1dHRvbjV8YnV0dG9uNnxidXR0b243fGJ1dHRvbjh8ZG93bnxsZWZ0fHJpZ2h0fHVwKXxvdXRzaWRlfGJvdW5kYXJ5fGdhbWVfc3RhcnR8Z2FtZV9lbmR8cm9vbV9zdGFydHxyb29tX2VuZHxub19tb3JlX2xpdmVzfGFuaW1hdGlvbl9lbmR8ZW5kX29mX3BhdGh8bm9fbW9yZV9oZWFsdGh8dXNlclxcZHxndWl8Z3VpX2JlZ2lufGd1aV9lbmR8c3RlcF8oPzpiZWdpbnxlbmR8bm9ybWFsKSl8dmtfKD86YWx0fGFueWtleXxiYWNrc3BhY2V8Y29udHJvbHxkZWxldGV8ZG93bnxlbmR8ZW50ZXJ8ZXNjYXBlfGhvbWV8aW5zZXJ0fGxlZnR8bm9rZXl8cGFnZWRvd258cGFnZXVwfHBhdXNlfHByaW50c2NyZWVufHJldHVybnxyaWdodHxzaGlmdHxzcGFjZXx0YWJ8dXB8ZlxcZHxudW1wYWRcXGR8YWRkfGRlY2ltYWx8ZGl2aWRlfGxhbHR8bGNvbnRyb2x8bHNoaWZ0fG11bHRpcGx5fHJhbHR8cmNvbnRyb2x8cnNoaWZ0fHN1YnRyYWN0KXxhY2hpZXZlbWVudF8oPzpmaWx0ZXJfKD86YWxsX3BsYXllcnN8ZmF2b3JpdGVzX29ubHl8ZnJpZW5kc19vbmx5KXxmcmllbmRzX2luZm98aW5mb3xsZWFkZXJib2FyZF9pbmZvfG91cl9pbmZvfHBpY19sb2FkZWR8c2hvd18oPzphY2hpZXZlbWVudHxiYW5rfGZyaWVuZF9waWNrZXJ8bGVhZGVyYm9hcmR8cHJvZmlsZXxwdXJjaGFzZV9wcm9tcHR8dWkpfHR5cGVfY2hhbGxlbmdlfHR5cGVfc2NvcmVfY2hhbGxlbmdlKXxhc3NldF8oPzpmb250fG9iamVjdHxwYXRofHJvb218c2NyaXB0fHNoYWRlcnxzb3VuZHxzcHJpdGV8dGlsZXN8dGltZWxpbmV8dW5rbm93bil8YXVkaW9fKD86M2R8ZmFsbG9mZl8oPzpleHBvbmVudF9kaXN0YW5jZXxleHBvbmVudF9kaXN0YW5jZV9jbGFtcGVkfGludmVyc2VfZGlzdGFuY2V8aW52ZXJzZV9kaXN0YW5jZV9jbGFtcGVkfGxpbmVhcl9kaXN0YW5jZXxsaW5lYXJfZGlzdGFuY2VfY2xhbXBlZHxub25lKXxtb25vfG5ld19zeXN0ZW18b2xkX3N5c3RlbXxzdGVyZW8pfGJtXyg/OmFkZHxjb21wbGV4fGRlc3RfYWxwaGF8ZGVzdF9jb2xvcnxkZXN0X2NvbG91cnxpbnZfZGVzdF9hbHBoYXxpbnZfZGVzdF9jb2xvcnxpbnZfZGVzdF9jb2xvdXJ8aW52X3NyY19hbHBoYXxpbnZfc3JjX2NvbG9yfGludl9zcmNfY29sb3VyfG1heHxub3JtYWx8b25lfHNyY19hbHBoYXxzcmNfYWxwaGFfc2F0fHNyY19jb2xvcnxzcmNfY29sb3VyfHN1YnRyYWN0fHplcm8pfGJyb3dzZXJfKD86Y2hyb21lfGZpcmVmb3h8aWV8aWVfbW9iaWxlfG5vdF9hX2Jyb3dzZXJ8b3BlcmF8c2FmYXJpfHNhZmFyaV9tb2JpbGV8dGl6ZW58dW5rbm93bnx3aW5kb3dzX3N0b3JlKXxidWZmZXJfKD86Ym9vbHxmMTZ8ZjMyfGY2NHxmYXN0fGZpeGVkfGdlbmVyYWxlcnJvcnxncm93fGludmFsaWR0eXBlfG5ldHdvcmt8b3V0b2Zib3VuZHN8b3V0b2ZzcGFjZXxzMTZ8czMyfHM4fHNlZWtfZW5kfHNlZWtfcmVsYXRpdmV8c2Vla19zdGFydHxzdHJpbmd8dGV4dHx1MTZ8dTMyfHU2NHx1OHx2YnVmZmVyfHdyYXApfGNfKD86YXF1YXxibGFja3xibHVlfGRrZ3JheXxmdWNoc2lhfGdyYXl8Z3JlZW58bGltZXxsdGdyYXl8bWFyb29ufG5hdnl8b2xpdmV8b3JhbmdlfHB1cnBsZXxyZWR8c2lsdmVyfHRlYWx8d2hpdGV8eWVsbG93KXxjbXBmdW5jXyg/OmFsd2F5c3xlcXVhbHxncmVhdGVyfGdyZWF0ZXJlcXVhbHxsZXNzfGxlc3NlcXVhbHxuZXZlcnxub3RlcXVhbCl8Y3JfKD86YXBwc3RhcnR8YXJyb3d8YmVhbXxjcm9zc3xkZWZhdWx0fGRyYWd8aGFuZHBvaW50fGhvdXJnbGFzc3xub25lfHNpemVfYWxsfHNpemVfbmVzd3xzaXplX25zfHNpemVfbndzZXxzaXplX3dlfHVwYXJyb3cpfGN1bGxfKD86Y2xvY2t3aXNlfGNvdW50ZXJjbG9ja3dpc2V8bm9jdWxsaW5nKXxkZXZpY2VfKD86ZW11bGF0b3J8dGFibGV0KXxkZXZpY2VfaW9zXyg/OmlwYWR8aXBhZF9yZXRpbmF8aXBob25lfGlwaG9uZTV8aXBob25lNnxpcGhvbmU2cGx1c3xpcGhvbmVfcmV0aW5hfHVua25vd24pfGRpc3BsYXlfKD86bGFuZHNjYXBlfGxhbmRzY2FwZV9mbGlwcGVkfHBvcnRyYWl0fHBvcnRyYWl0X2ZsaXBwZWQpfGRsbF8oPzpjZGVjbHxjZGVsfHN0ZGNhbGwpfGRzX3R5cGVfKD86Z3JpZHxsaXN0fG1hcHxwcmlvcml0eXxxdWV1ZXxzdGFjayl8ZWZfKD86Y2xvdWR8ZWxsaXBzZXxleHBsb3Npb258ZmlyZXdvcmt8ZmxhcmV8cmFpbnxyaW5nfHNtb2tlfHNtb2tldXB8c25vd3xzcGFya3xzdGFyKXxmYV8oPzphcmNoaXZlfGJvdHRvbXxjZW50ZXJ8ZGlyZWN0b3J5fGhpZGRlbnxsZWZ0fG1pZGRsZXxyZWFkb25seXxyaWdodHxzeXNmaWxlfHRvcHx2b2x1bWVpZCl8ZmJfbG9naW5fKD86ZGVmYXVsdHxmYWxsYmFja190b193ZWJ2aWV3fGZvcmNpbmdfc2FmYXJpfGZvcmNpbmdfd2Vidmlld3xub19mYWxsYmFja190b193ZWJ2aWV3fHVzZV9zeXN0ZW1fYWNjb3VudCl8aWFwXyg/OmF2YWlsYWJsZXxjYW5jZWxlZHxldl9jb25zdW1lfGV2X3Byb2R1Y3R8ZXZfcHVyY2hhc2V8ZXZfcmVzdG9yZXxldl9zdG9yZWxvYWR8ZmFpbGVkfHB1cmNoYXNlZHxyZWZ1bmRlZHxzdGF0dXNfYXZhaWxhYmxlfHN0YXR1c19sb2FkaW5nfHN0YXR1c19wcm9jZXNzaW5nfHN0YXR1c19yZXN0b3Jpbmd8c3RhdHVzX3VuYXZhaWxhYmxlfHN0YXR1c191bmluaXRpYWxpc2VkfHN0b3JlbG9hZF9mYWlsZWR8c3RvcmVsb2FkX29rfHVuYXZhaWxhYmxlKXxsZWFkZXJib2FyZF90eXBlXyg/Om51bWJlcnx0aW1lX21pbnNfc2Vjcyl8bGlnaHR0eXBlXyg/OmRpcnxwb2ludCl8bWF0cml4Xyg/OnByb2plY3Rpb258dmlld3x3b3JsZCl8bWJfKD86YW55fGxlZnR8bWlkZGxlfG5vbmV8cmlnaHQpfG5ldHdvcmtfKD86Y29uZmlnXyg/OmNvbm5lY3RfdGltZW91dHxkaXNhYmxlX3JlbGlhYmxlX3VkcHxlbmFibGVfcmVsaWFibGVfdWRwfHVzZV9ub25fYmxvY2tpbmdfc29ja2V0KXxzb2NrZXRfKD86Ymx1ZXRvb3RofHRjcHx1ZHApfHR5cGVfKD86Y29ubmVjdHxkYXRhfGRpc2Nvbm5lY3R8bm9uX2Jsb2NraW5nX2Nvbm5lY3QpKXxvZl9jaGFsbGVuZ2VfKD86bG9zZXx0aWV8d2luKXxvc18oPzphbmRyb2lkfGlvc3xsaW51eHxtYWNvc3h8cHMzfHBzNHxwc3ZpdGF8dW5rbm93bnx1d3B8d2luMzJ8d2luOG5hdGl2ZXx3aW5kb3dzfHdpbnBob25lfHhib3hvbmUpfHBoeV9kZWJ1Z19yZW5kZXJfKD86YWFiYnxjb2xsaXNpb25fcGFpcnN8Y29tc3xjb3JlX3NoYXBlc3xqb2ludHN8b2JifHNoYXBlcyl8cGh5X2pvaW50Xyg/OmFuY2hvcl8xX3h8YW5jaG9yXzFfeXxhbmNob3JfMl94fGFuY2hvcl8yX3l8YW5nbGV8YW5nbGVfbGltaXRzfGRhbXBpbmdfcmF0aW98ZnJlcXVlbmN5fGxlbmd0aF8xfGxlbmd0aF8yfGxvd2VyX2FuZ2xlX2xpbWl0fG1heF9mb3JjZXxtYXhfbGVuZ3RofG1heF9tb3Rvcl9mb3JjZXxtYXhfbW90b3JfdG9ycXVlfG1heF90b3JxdWV8bW90b3JfZm9yY2V8bW90b3Jfc3BlZWR8bW90b3JfdG9ycXVlfHJlYWN0aW9uX2ZvcmNlX3h8cmVhY3Rpb25fZm9yY2VfeXxyZWFjdGlvbl90b3JxdWV8c3BlZWR8dHJhbnNsYXRpb258dXBwZXJfYW5nbGVfbGltaXQpfHBoeV9wYXJ0aWNsZV9kYXRhX2ZsYWdfKD86Y2F0ZWdvcnl8Y29sb3J8Y29sb3VyfHBvc2l0aW9ufHR5cGVmbGFnc3x2ZWxvY2l0eSl8cGh5X3BhcnRpY2xlX2ZsYWdfKD86Y29sb3JtaXhpbmd8Y29sb3VybWl4aW5nfGVsYXN0aWN8cG93ZGVyfHNwcmluZ3x0ZW5zaWxlfHZpc2NvdXN8d2FsbHx3YXRlcnx6b21iaWUpfHBoeV9wYXJ0aWNsZV9ncm91cF9mbGFnXyg/OnJpZ2lkfHNvbGlkKXxwcl8oPzpsaW5lbGlzdHxsaW5lc3RyaXB8cG9pbnRsaXN0fHRyaWFuZ2xlZmFufHRyaWFuZ2xlbGlzdHx0cmlhbmdsZXN0cmlwKXxwc18oPzpkaXN0cnxzaGFwZSlfKD86ZGlhbW9uZHxlbGxpcHNlfGdhdXNzaWFufGludmdhdXNzaWFufGxpbmV8bGluZWFyfHJlY3RhbmdsZSl8cHRfc2hhcGVfKD86Y2lyY2xlfGNsb3VkfGRpc2t8ZXhwbG9zaW9ufGZsYXJlfGxpbmV8cGl4ZWx8cmluZ3xzbW9rZXxzbm93fHNwYXJrfHNwaGVyZXxzcXVhcmV8c3Rhcil8dHlfKD86cmVhbHxzdHJpbmcpfGdwXyg/OmZhY2VcXGR8YXhpc2xofGF4aXNsdnxheGlzcmh8YXhpc3J2fHBhZGR8cGFkbHxwYWRyfHBhZHV8c2VsZWN0fHNob3VsZGVybHxzaG91bGRlcmxifHNob3VsZGVycnxzaG91bGRlcnJifHN0YXJ0fHN0aWNrbHxzdGlja3IpfGxiX2Rpc3BfKD86bm9uZXxudW1lcmljfHRpbWVfbXN8dGltZV9zZWMpfGxiX3NvcnRfKD86YXNjZW5kaW5nfGRlc2NlbmRpbmd8bm9uZSl8b3ZfKD86YWNoaWV2ZW1lbnRzfGNvbW11bml0eXxmcmllbmRzfGdhbWVncm91cHxwbGF5ZXJzfHNldHRpbmdzKXx1Z2NfKD86ZmlsZXR5cGVfKD86Y29tbXVuaXR5fG1pY3JvdHJhbnMpfGxpc3RfKD86RmF2b3JpdGVkfEZvbGxvd2VkfFB1Ymxpc2hlZHxTdWJzY3JpYmVkfFVzZWRPclBsYXllZHxWb3RlZERvd258Vm90ZWRPbnxWb3RlZFVwfFdpbGxWb3RlTGF0ZXIpfG1hdGNoXyg/OkFsbEd1aWRlc3xBcnR3b3JrfENvbGxlY3Rpb25zfENvbnRyb2xsZXJCaW5kaW5nc3xJbnRlZ3JhdGVkR3VpZGVzfEl0ZW1zfEl0ZW1zX010eHxJdGVtc19SZWFkeVRvVXNlfFNjcmVlbnNob3RzfFVzYWJsZUluR2FtZXxWaWRlb3N8V2ViR3VpZGVzKXxxdWVyeV8oPzpBY2NlcHRlZEZvckdhbWVSYW5rZWRCeUFjY2VwdGFuY2VEYXRlfENyZWF0ZWRCeUZyaWVuZHNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZXxGYXZvcml0ZWRCeUZyaWVuZHNSYW5rZWRCeVB1YmxpY2F0aW9uRGF0ZXxOb3RZZXRSYXRlZCl8cXVlcnlfUmFua2VkQnkoPzpOdW1UaW1lc1JlcG9ydGVkfFB1YmxpY2F0aW9uRGF0ZXxUZXh0U2VhcmNofFRvdGFsVm90ZXNBc2N8VHJlbmR8Vm90ZXxWb3Rlc1VwKXxyZXN1bHRfc3VjY2Vzc3xzb3J0b3JkZXJfQ3JlYXRpb25PcmRlcig/OkFzY3xEZXNjKXxzb3J0b3JkZXJfKD86Rm9yTW9kZXJhdGlvbnxMYXN0VXBkYXRlZERlc2N8U3Vic2NyaXB0aW9uRGF0ZURlc2N8VGl0bGVBc2N8Vm90ZVNjb3JlRGVzYyl8dmlzaWJpbGl0eV8oPzpmcmllbmRzX29ubHl8cHJpdmF0ZXxwdWJsaWMpKXx2ZXJ0ZXhfdXNhZ2VfKD86Ymlub3JtYWx8YmxlbmRpbmRpY2VzfGJsZW5kd2VpZ2h0fGNvbG9yfGNvbG91cnxkZXB0aHxmb2d8bm9ybWFsfHBvc2l0aW9ufHBzaXplfHNhbXBsZXx0YW5nZW50fHRleGNvb3JkfHRleHRjb29yZCl8dmVydGV4X3R5cGVfKD86ZmxvYXRcXGR8Y29sb3J8Y29sb3VyfHVieXRlNCl8aW5wdXRfdHlwZXxsYXllcmVsZW1lbnR0eXBlXyg/OmJhY2tncm91bmR8aW5zdGFuY2V8b2xkdGlsZW1hcHxwYXJ0aWNsZXN5c3RlbXxzcHJpdGV8dGlsZXx0aWxlbWFwfHVuZGVmaW5lZCl8c2VfKD86Y2hvcnVzfGNvbXByZXNzb3J8ZWNob3xlcXVhbGl6ZXJ8ZmxhbmdlcnxnYXJnbGV8bm9uZXxyZXZlcmIpfHRleHRfdHlwZXx0aWxlXyg/OmZsaXB8aW5kZXhfbWFza3xtaXJyb3J8cm90YXRlKXwoPzpvYmp8cm18c2NyfHNwcilcXHcrKVxcYi8sXG5cdCd2YXJpYWJsZSc6IC9cXGIoPzphbGFybXxhcHBsaWNhdGlvbl9zdXJmYWNlfGFzeW5jX2xvYWR8YmFja2dyb3VuZF8oPzphbHBoYXxibGVuZHxjb2xvcnxjb2xvdXJ8Zm9yZWdyb3VuZHxoZWlnaHR8aHNwZWVkfGh0aWxlZHxpbmRleHxzaG93Y29sb3J8c2hvd2NvbG91cnx2aXNpYmxlfHZzcGVlZHx2dGlsZWR8d2lkdGh8eHx4c2NhbGV8eXx5c2NhbGUpfGJib3hfKD86Ym90dG9tfGxlZnR8cmlnaHR8dG9wKXxicm93c2VyXyg/OmhlaWdodHx3aWR0aCl8Y2FwdGlvbl8oPzpoZWFsdGh8bGl2ZXN8c2NvcmUpfGN1cnJlbnRfKD86ZGF5fGhvdXJ8bWludXRlfG1vbnRofHNlY29uZHx0aW1lfHdlZWtkYXl8eWVhcil8Y3Vyc29yX3Nwcml0ZXxkZWJ1Z19tb2RlfGRlbHRhX3RpbWV8ZGlyZWN0aW9ufGRpc3BsYXlfYWF8ZXJyb3JfKD86bGFzdHxvY2N1cnJlZCl8ZXZlbnRfKD86YWN0aW9ufG51bWJlcnxvYmplY3R8dHlwZSl8ZnBzfGZwc19yZWFsfGZyaWN0aW9ufGdhbWVfKD86ZGlzcGxheXxwcm9qZWN0fHNhdmUpXyg/OmlkfG5hbWUpfGdhbWVtYWtlcl8oPzpwcm98cmVnaXN0ZXJlZHx2ZXJzaW9uKXxncmF2aXR5fGdyYXZpdHlfZGlyZWN0aW9ufCg/Omh8dilzcGVlZHxoZWFsdGh8aWFwX2RhdGF8aWR8aW1hZ2VfKD86YWxwaGF8YW5nbGV8YmxlbmR8ZGVwdGh8aW5kZXh8bnVtYmVyfHNwZWVkfHhzY2FsZXx5c2NhbGUpfGluc3RhbmNlXyg/OmNvdW50fGlkKXxrZXlib2FyZF8oPzprZXl8bGFzdGNoYXJ8bGFzdGtleXxzdHJpbmcpfGxheWVyfGxpdmVzfG1hc2tfaW5kZXh8bW91c2VfKD86YnV0dG9ufGxhc3RidXR0b258eHx5KXxvYmplY3RfaW5kZXh8b3NfKD86YnJvd3NlcnxkZXZpY2V8dHlwZXx2ZXJzaW9uKXxwYXRoXyg/OmVuZGFjdGlvbnxpbmRleHxvcmllbnRhdGlvbnxwb3NpdGlvbnxwb3NpdGlvbnByZXZpb3VzfHNjYWxlfHNwZWVkKXxwZXJzaXN0ZW50fHBoeV8oPzpyb3RhdGlvbnwoPzpjb2xfbm9ybWFsfGNvbGxpc2lvbnxjb218bGluZWFyX3ZlbG9jaXR5fHBvc2l0aW9ufHNwZWVkKV8oPzp4fHkpfGFuZ3VsYXJfKD86ZGFtcGluZ3x2ZWxvY2l0eSl8cG9zaXRpb25fKD86eHx5KXByZXZpb3VzfHNwZWVkfGxpbmVhcl9kYW1waW5nfGJ1bGxldHxmaXhlZF9yb3RhdGlvbnxhY3RpdmV8bWFzc3xpbmVydGlhfGR5bmFtaWN8a2luZW1hdGljfHNsZWVwaW5nfGNvbGxpc2lvbl9wb2ludHMpfHBvaW50ZXJfKD86aW52YWxpZHxudWxsKXxyb29tfHJvb21fKD86Y2FwdGlvbnxmaXJzdHxoZWlnaHR8bGFzdHxwZXJzaXN0ZW50fHNwZWVkfHdpZHRoKXxzY29yZXxzZWN1cmVfbW9kZXxzaG93Xyg/OmhlYWx0aHxsaXZlc3xzY29yZSl8c29saWR8c3BlZWR8c3ByaXRlXyg/OmhlaWdodHxpbmRleHx3aWR0aHx4b2Zmc2V0fHlvZmZzZXQpfHRlbXBfZGlyZWN0b3J5fHRpbWVsaW5lXyg/OmluZGV4fGxvb3B8cG9zaXRpb258cnVubmluZ3xzcGVlZCl8dHJhbnNpdGlvbl8oPzpjb2xvcnxraW5kfHN0ZXBzKXx1bmRlZmluZWR8dmlld18oPzphbmdsZXxjdXJyZW50fGVuYWJsZWR8KD86aHx2KSg/OmJvcmRlcnxzcGVlZCl8KD86aHx3fHh8eSlwb3J0fCg/Omh8d3x4fHkpdmlld3xvYmplY3R8c3VyZmFjZV9pZHx2aXNpYmxlKXx2aXNpYmxlfHdlYmdsX2VuYWJsZWR8d29ya2luZ19kaXJlY3Rvcnl8KD86eHx5KSg/OnByZXZpb3VzfHN0YXJ0KXx4fHl8YXJndW1lbnQoPzpfcmVsaXRpdmV8X2NvdW50fFxcZCl8YXJndW1lbnR8Z2xvYmFsfGxvY2FsfG90aGVyfHNlbGYpXFxiL1xufSk7XG5cbi8vIGh0dHBzOi8vd3d3LmdhcC1zeXN0ZW0ub3JnL01hbnVhbHMvZG9jL3JlZi9jaGFwNC5odG1sXG4vLyBodHRwczovL3d3dy5nYXAtc3lzdGVtLm9yZy9NYW51YWxzL2RvYy9yZWYvY2hhcDI3Lmh0bWxcblxuUHJpc20ubGFuZ3VhZ2VzLmdhcCA9IHtcblx0J3NoZWxsJzoge1xuXHRcdHBhdHRlcm46IC9eZ2FwPltcXHNcXFNdKj8oPz1eZ2FwPnwkKD8hW1xcc1xcU10pKS9tLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdnYXAnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKGdhcD4pLisoPzooPzpcXHIoPzpcXG58KD8hXFxuKSl8XFxuKT4uKikqLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eZ2FwPi9cblx0XHR9XG5cdH0sXG5cblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXCdcIl0pKD86Jyg/OlteXFxyXFxuXFxcXCddfFxcXFwuKXsxLDEwfSd8XCIoPzpbXlxcclxcblxcXFxcIl18XFxcXC4pKlwiKD8hXCIpfFwiXCJcIltcXHNcXFNdKj9cIlwiXCIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb250aW51YXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0pPi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OkFzc2VydHxJbmZvfElzQm91bmR8UVVJVHxUcnlOZXh0TWV0aG9kfFVuYmluZHxhbmR8YXRvbWljfGJyZWFrfGNvbnRpbnVlfGRvfGVsaWZ8ZWxzZXxlbmR8Zml8Zm9yfGZ1bmN0aW9ufGlmfGlufGxvY2FsfG1vZHxub3R8b2R8b3J8cXVpdHxyZWFkb25seXxyZWFkd3JpdGV8cmVjfHJlcGVhdHxyZXR1cm58dGhlbnx1bnRpbHx3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Ll18XFwuXFwuKSg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT8oPzpfW2Etel0/KT8oPz0kfFteXFx3Ll18XFwuXFwuKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdjb250aW51YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhbXFxyXFxuXSk+Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8tPnxbLSsqL15+PSFdfDw+fFs8Pl09P3w6PXxcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9LDsuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2FwLnNoZWxsLmluc2lkZS5nYXAuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmdhcDtcblxuUHJpc20ubGFuZ3VhZ2VzLmdjb2RlID0ge1xuXHQnY29tbWVudCc6IC87Lip8XFxCXFwoLio/XFwpXFxCLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFteXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYltHTV1cXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J3Byb3BlcnR5JzogL1xcYltBLVpdLyxcblx0J2NoZWNrc3VtJzoge1xuXHRcdHBhdHRlcm46IC8oXFwqKVxcZCsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdC8vIFQwOjA6MFxuXHQncHVuY3R1YXRpb24nOiAvWzoqXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nZHNjcmlwdCA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvQD8oPzooXCJ8JykoPzooPyFcXDEpW15cXG5cXFxcXXxcXFxcW1xcc1xcU10pKlxcMSg/IVwifCcpfFwiXCJcIig/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/XCJcIlwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdC8vIGNsYXNzX25hbWUgRm9vLCBleHRlbmRzIEJhciwgY2xhc3MgSW5uZXJDbGFzc1xuXHRcdC8vIGV4cG9ydChpbnQpIHZhciBiYXosIGV4cG9ydChpbnQsIDApIHZhciBpXG5cdFx0Ly8gYXMgTm9kZVxuXHRcdC8vIGNvbnN0IEZPTzogaW50ID0gOSwgdmFyIGJhcjogYm9vbCA9IHRydWVcblx0XHQvLyBmdW5jIGFkZChyZWZlcmVuY2U6IEl0ZW0sIGFtb3VudDogaW50KSAtPiBJdGVtOlxuXHRcdHBhdHRlcm46IC8oXig/OmNsYXNzfGNsYXNzX25hbWV8ZXh0ZW5kcylbIFxcdF0rfF5leHBvcnRcXChbIFxcdF0qfFxcYmFzWyBcXHRdK3woPzpcXGIoPzpjb25zdHx2YXIpWyBcXHRdfFssKF0pWyBcXHRdKlxcdytbIFxcdF0qOlsgXFx0XSp8LT5bIFxcdF0qKVthLXpBLVpfXVxcdyovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xhc3NlcnR8YnJlYWt8YnJlYWtwb2ludHxjbGFzc3xjbGFzc19uYW1lfGNvbnN0fGNvbnRpbnVlfGVsaWZ8ZWxzZXxlbnVtfGV4cG9ydHxleHRlbmRzfGZvcnxmdW5jfGlmfGlufGlzfG1hc3RlcnxtYXN0ZXJzeW5jfG1hdGNofG5vdHxudWxsfG9ucmVhZHl8b3J8cGFzc3xwcmVsb2FkfHB1cHBldHxwdXBwZXRzeW5jfHJlbW90ZXxyZW1vdGVzeW5jfHJldHVybnxzZWxmfHNldGdldHxzaWduYWx8c3RhdGljfHRvb2x8dmFyfHdoaWxlfHlpZWxkKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89WyBcXHRdKlxcKCkvaSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXHQnbnVtYmVyJzogW1xuXHRcdC9cXGIwYlswMV9dK1xcYnxcXGIweFtcXGRhLWZBLUZfXStcXGJ8KD86XFxiXFxkW1xcZF9dKig/OlxcLltcXGRfXSopP3xcXEJcXC5bXFxkX10rKSg/OmVbKy1dP1tcXGRfXSspP1xcYi8sXG5cdFx0L1xcYig/OklORnxOQU58UEl8VEFVKVxcYi9cblx0XSxcblx0J2NvbnN0YW50JzogL1xcYltBLVpdW0EtWl9cXGRdKlxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J29wZXJhdG9yJzogLy0+fDo9fCYmfFxcfFxcfHw8PHw+PnxbLSsqLyUmfCE8Pj1dPT98W35eXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bLjosOygpW1xcXXt9XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nZWRjb20gPSB7XG5cdCdsaW5lLXZhbHVlJzoge1xuXHRcdC8vIFByZWNlZGVkIGJ5IGxldmVsLCBvcHRpb25hbCBwb2ludGVyLCBhbmQgdGFnXG5cdFx0cGF0dGVybjogLyheW1xcdCBdKlxcZCsgKyg/OkBcXHdbXFx3IVwiJCUmJygpKissXFwtLi86Ozw9Pj9bXFxcXFxcXV5ge3x9flxceDgwLVxceGZlICNdKkAgKyk/XFx3KyApLisvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3BvaW50ZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eQFxcd1tcXHchXCIkJSYnKCkqKyxcXC0uLzo7PD0+P1tcXFxcXFxdXmB7fH1+XFx4ODAtXFx4ZmUgI10qQCQvLFxuXHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3JlY29yZCc6IHtcblx0XHQvLyBQcmVjZWRlZCBieSBsZXZlbCBhbmQgb3B0aW9uYWwgcG9pbnRlclxuXHRcdHBhdHRlcm46IC8oXltcXHQgXSpcXGQrICsoPzpAXFx3W1xcdyFcIiQlJicoKSorLFxcLS4vOjs8PT4/W1xcXFxcXF1eYHt8fX5cXHg4MC1cXHhmZSAjXSpAICspPylcXHcrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3RhZydcblx0fSxcblx0J2xldmVsJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopXFxkKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdwb2ludGVyJzoge1xuXHRcdHBhdHRlcm46IC9AXFx3W1xcdyFcIiQlJicoKSorLFxcLS4vOjs8PT4/W1xcXFxcXF1eYHt8fX5cXHg4MC1cXHhmZSAjXSpALyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2V0dGV4dCA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyMgLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd0cmFuc2xhdG9yLWNvbW1lbnQnXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcLi4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZXh0cmFjdGVkLWNvbW1lbnQnXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvIzouKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3JlZmVyZW5jZS1jb21tZW50J1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyMsLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmbGFnLWNvbW1lbnQnXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvI1xcfC4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJldmlvdXNseS11bnRyYW5zbGF0ZWQtY29tbWVudCdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL15tc2coPzpjdHh0fGlkfGlkX3BsdXJhbHxzdHIpXFxiL20sXG5cdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wbyA9IFByaXNtLmxhbmd1YWdlcy5nZXR0ZXh0O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHRhYmxlUm93ID0gLyg/Olxccj9cXG58XFxyKVsgXFx0XSpcXHwuK1xcfCg/Oig/IVxcfCkuKSovLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ2hlcmtpbiA9IHtcblx0XHQncHlzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFwiXCJcInwnJycpW1xcc1xcU10rP1xcMS8sXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikjLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKUBcXFMqL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZmVhdHVyZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccilbIFxcdF0qKSg/OkFiaWxpdHl8QWhveSBtYXRleSF8QXJ3ZWRkfEFzcGVrdHxCZXNpZ2hlaWQgQmVob2VmdGV8QnVzaW5lc3MgTmVlZHxDYXJhY3RlcmlzdGljYXxDYXJhY3Rlclx1MDBFRHN0aWNhfEVnZW5za2FifEVnZW5za2FwfEVpZ2lubGVpa2l8RmVhdHVyZXxGXHUwMTJCXHUwMTBEYXxGaXR1cnxGb25jdGlvbm5hbGl0XHUwMEU5fEZvbmtzeW9uYWxpdGV8RnVuY2lvbmFsaWRhZGV8RnVuY2lvbmFsaXRhdHxGdW5jdGlvbmFsaXRhdGV8RnVuY1x1MDE2M2lvbmFsaXRhdGV8RnVuY1x1MDIxQmlvbmFsaXRhdGV8RnVuY3Rpb25hbGl0ZWl0fEZ1bmdzaXxGdW5rY2lhfEZ1bmtjaWphfEZ1bmtjaW9uYWxpdFx1MDEwMXRlfEZ1bmtjaW9uYWxub3N0fEZ1bmtjamF8RnVua3NpZXxGdW5rdGlvbmFsaXRcdTAwRTR0fEZ1bmt0aW9uYWxpdFx1MDBFOWl0fEZ1bnppb25hbGl0XHUwMEUwfEh3YWV0fEh3XHUwMEU2dHxKZWxsZW16XHUwMTUxfEthcmFrdGVyaXN0aWt8TGFzdG5vc3R8TWFrfE1vZ3Vjbm9zdHxsYUh8TW9ndVx1MDEwN25vc3R8TW96bm9zdGl8TW9cdTAxN0Vub3N0aXxPSCBIQUl8T21hZHVzfE9taW5haXN1dXN8T3NvYmluYXxcdTAwRDZ6ZWxsaWt8UG90cnplYmEgYml6bmVzb3dhfHBlcmJvZ2h8cG9RYm9naCBtYWxqYSd8UG9cdTAxN0VhZGF2ZWt8UG9cdTAxN0VpYWRhdmthfFByZXR0eSBtdWNofFFhcHxRdSdtZUggJ3V0fFNhdnliXHUwMTE3fFRcdTAwRURuaCBuXHUwMTAzbmd8VHJhanRvfFZlcm1vXHUwMEVCfFZsYXN0bm9zXHUwMTY1fFdcdTAxNDJhXHUwMTVCY2l3b1x1MDE1Qlx1MDEwN3xabmFcdTAxMERpbG5vc3R8XHUwMzk0XHUwM0M1XHUwM0JEXHUwM0IxXHUwM0M0XHUwM0NDXHUwM0M0XHUwM0I3XHUwM0M0XHUwM0IxfFx1MDM5Qlx1MDNCNVx1MDNCOVx1MDNDNFx1MDNCRlx1MDNDNVx1MDNDMVx1MDNCM1x1MDNBRlx1MDNCMXxcdTA0MUNcdTA0M0VcdTA0MzNcdTA0NDNcdTA0NUJcdTA0M0RcdTA0M0VcdTA0NDFcdTA0NDJ8XHUwNDFDXHUwNEU5XHUwNDNDXHUwNDNBXHUwNDM4XHUwNDNEXHUwNDNCXHUwNDM1XHUwNDNBfFx1MDQxRVx1MDQ0MVx1MDQzRVx1MDQzMVx1MDQzOFx1MDQzRFx1MDQzMHxcdTA0MjFcdTA0MzJcdTA0M0VcdTA0MzlcdTA0NDFcdTA0NDJcdTA0MzJcdTA0M0V8XHUwNEFFXHUwNDM3XHUwNDM1XHUwNDNEXHUwNDQ3XHUwNEQ5XHUwNDNCXHUwNDM1XHUwNDNBXHUwNDNCXHUwNDM1XHUwNDNCXHUwNDM1XHUwNDNBfFx1MDQyNFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQzOFx1MDQzRVx1MDQzRFx1MDQzMFx1MDQzQnxcdTA0MjRcdTA0NDNcdTA0M0RcdTA0M0FcdTA0NDZcdTA0MzhcdTA0M0VcdTA0M0RcdTA0MzBcdTA0M0JcdTA0M0RcdTA0M0VcdTA0NDFcdTA0NDJ8XHUwNDI0XHUwNDQzXHUwNDNEXHUwNDNBXHUwNDQ2XHUwNDM4XHUwNDRGfFx1MDQyNFx1MDQ0M1x1MDQzRFx1MDQzQVx1MDQ0Nlx1MDQ1Nlx1MDQzRVx1MDQzRFx1MDQzMFx1MDQzQnxcdTA1RUFcdTA1REJcdTA1RDVcdTA1RTBcdTA1RDR8XHUwNjJFXHUwNjI3XHUwNjM1XHUwNjRBXHUwNjI5fFx1MDYyRVx1MDYzNVx1MDY0OFx1MDYzNVx1MDZDQ1x1MDYyQXxcdTA2MzVcdTA2NDRcdTA2MjdcdTA2MkRcdTA2Q0NcdTA2MkF8XHUwNkE5XHUwNjI3XHUwNjMxXHUwNjQ4XHUwNjI4XHUwNjI3XHUwNjMxIFx1MDZBOVx1MDZDQyBcdTA2MzZcdTA2MzFcdTA2NDhcdTA2MzFcdTA2MkF8XHUwNjQ4XHUwNjUwXHUwNkNDXHUwNjk4XHUwNkFGXHUwNkNDfFx1MDkzMFx1MDk0Mlx1MDkyQSBcdTA5MzJcdTA5NDdcdTA5MTZ8XHUwQTE2XHUwQTNFXHUwQTM4XHUwQTQwXHUwQTA1XHUwQTI0fFx1MEEyOFx1MEExNVx1MEEzNiBcdTBBMjhcdTBBNDFcdTBBMzlcdTBBM0VcdTBBMzB8XHUwQTJFXHUwQTQxXHUwQTM5XHUwQTNFXHUwQTAyXHUwQTI2XHUwQTMwXHUwQTNFfFx1MEMxN1x1MEM0MVx1MEMyM1x1MEMyRVx1MEM0MXxcdTBDQjlcdTBDQzZcdTBDOUFcdTBDQ0RcdTBDOUFcdTBDQjN8XHUwRTA0XHUwRTI3XHUwRTMyXHUwRTIxXHUwRTE1XHUwRTQ5XHUwRTJEXHUwRTA3XHUwRTAxXHUwRTMyXHUwRTIzXHUwRTE3XHUwRTMyXHUwRTA3XHUwRTE4XHUwRTM4XHUwRTIzXHUwRTAxXHUwRTM0XHUwRTA4fFx1MEUwNFx1MEUyN1x1MEUzMlx1MEUyMVx1MEUyQVx1MEUzMlx1MEUyMVx1MEUzMlx1MEUyM1x1MEUxNnxcdTBFNDJcdTBFMDRcdTBFMjNcdTBFMDdcdTBFMkJcdTBFMjVcdTBFMzFcdTBFMDF8XHVBRTMwXHVCMkE1fFx1MzBENVx1MzBBM1x1MzBGQ1x1MzBDMVx1MzBFM3xcdTUyOUZcdTgwRkR8XHU2QTVGXHU4MEZEKTooPzpbXjpcXHJcXG5dKyg/Olxccj9cXG58XFxyfCQpKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW1wb3J0YW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oOilbXlxcclxcbl0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzogL1teOlxcclxcbl0rOi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzY2VuYXJpbyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86QWJzdHJhY3QgU2NlbmFyaW98QWJzdHJha3QgU2NlbmFyaW98QWNodGVyZ3JvbmR8QWVyfFx1MDBDNnJ8QWd0ZXJncm9uZHxBbGwgeSdhbGx8QW50ZWNlZGVudGVzfEFudGVjZWRlbnRzfEF0YnVyXHUwMEYwYXJcdTAwRTFzfEF0YnVyXHUwMEYwYXJcdTAwRTFzaXJ8QXd3dywgbG9vayBtYXRlfEI0fEJhY2tncm91bmR8QmFnZ3J1bmR8QmFrZ3J1bmR8QmFrZ3J1bm58QmFrZ3J1bm51cnxCZWlzcGllbGV8QmVpc3BpbGxlcnxCXHUxRUQxaSBjXHUxRUEzbmh8Q2VmbmRpcnxDZW5hcmlvfENlblx1MDBFMXJpb3xDZW5hcmlvIGRlIEZ1bmRvfENlblx1MDBFMXJpbyBkZSBGdW5kb3xDZW5hcmlvc3xDZW5cdTAwRTFyaW9zfENvbnRlc3RvfENvbnRleHR8Q29udGV4dGV8Q29udGV4dG98Q29udG98Q29udG9ofENvbnRvbmV8RFx1MDBFNm1pfERhc2FyfERlYWQgbWVuIHRlbGwgbm8gdGFsZXN8RGVsaW5lYWNhbyBkbyBDZW5hcmlvfERlbGluZWFcdTAwRTdcdTAwRTNvIGRvIENlblx1MDBFMXJpb3xEaXMgaXMgd2hhdCB3ZW50IGRvd258RFx1MUVFRiBsaVx1MUVDN3V8RHlhZ3JhbSBTZW5hcnlvfER5YWdyYW0gc2VuYXJ5b3xFZ3phbnB8RWplbXBsb3N8RWtzZW1wbGVyfEVremVtcGxvanxFbmdocmVpZmZ0aWF1fEVzYm96byBkbyBlc2NlbmFyaW98RXNjZW5hcml8RXNjZW5hcmlvfEVzZW1waXxFc3F1ZW1hIGRlIGwnZXNjZW5hcml8RXNxdWVtYSBkZWwgZXNjZW5hcmlvfEVzcXVlbWEgZG8gQ2VuYXJpb3xFc3F1ZW1hIGRvIENlblx1MDBFMXJpb3xFWEFNUExafEV4YW1wbGVzfEV4ZW1wZWx8RXhlbXBsZXxFeGVtcGxlc3xFeGVtcGxvc3xGaXJzdCBvZmZ8Rm9ub3xGb3JnYXRcdTAwRjNrXHUwMEY2bnl2fEZvcmdhdFx1MDBGM2tcdTAwRjZueXYgdlx1MDBFMXpsYXR8RnVuZG98R2VcdTAwRTdtaVx1MDE1RnxHcnVuZGxhZ2V8SGFubmVyZ3JvbmR8Z2hhbnRvSHxIXHUwMEUxdHRcdTAwRTlyfEhlYXZlIHRvfElzdG9yaWt8SnVodHVtaWR8S2VhZGFhbnxLaHVuZyBrXHUxRUNCY2ggYlx1MUVBM258S2h1bmcgdFx1MDBFQ25oIGh1XHUxRUQxbmd8S1x1MUVDQmNoIGJcdTFFQTNufEtvbmNlcHR8S29uc2VwIHNrZW5hcmlvfEtvbnRcdTAwRThrc3xLb250ZWtzdHxLb250ZWtzdGFzfEtvbnRla3N0c3xLb250ZXh0fEtvbnR1cm8gZGUgbGEgc2NlbmFyb3xMYXRhciBCZWxha2FuZ3xsdXQgY2hvdm5hdGxofGx1dHxsdXRtZXl8TFx1MDBGRHNpbmcgQXRidXJcdTAwRjBhclx1MDBFMXNhcnxMXHUwMEZEc2luZyBEXHUwMEU2bWF8TUlTSFVOIFNSU0xZfE1JU0hVTnxNZW5nZ2FyaXNrYW4gU2VuYXJpb3xtbyd8Tlx1MDBFMVx1MDEwRHJ0IFNjZW5cdTAwRTFyYXxOXHUwMEUxXHUwMTBEcnQgU2NcdTAwRTluXHUwMEUxXHUwMTU5ZXxOXHUwMEUxXHUwMTBEcnQgU2Nlblx1MDBFMXJ1fE9yaXMgc2NlbmFyaWphfFx1MDBENnJuZWtsZXJ8T3Nub3ZhfE9zbm92YSBTY2VuXHUwMEUxcmF8T3Nub3ZhIHNjXHUwMEU5blx1MDBFMVx1MDE1OWV8T3NudXRla3xPemFkamV8UGFyYXVnc3xQYXZ5emRcdTAxN0VpYWl8UFx1MDBFOWxkXHUwMEUxa3xQaWVtXHUwMTEzcml8UGxhbiBkdSBzY1x1MDBFOW5hcmlvfFBsYW4gZHUgU2NcdTAwRTluYXJpb3xQbGFuIFNlbmFyeW98UGxhbiBzZW5hcnlvfFBsYW5nIHZ1bSBTemVuYXJpb3xQb3phZFx1MDBFRHxQb3phZGllfFBvemFkaW5hfFByXHUwMEVEa2xhZHl8UFx1MDE1OVx1MDBFRGtsYWR5fFByaW1lcnxQcmltZXJpfFByaW1qZXJpfFByenlrXHUwMTQyYWR5fFJhYW1zdHNlbmFhcml1bXxSZWNrb24gaXQncyBsaWtlfFJlcmVmb25zfFNjZW5cdTAwRTFyfFNjXHUwMEU5blx1MDBFMVx1MDE1OXxTY2VuYXJpZXxTY2VuYXJpanxTY2VuYXJpamFpfFNjZW5hcmlqYXVzIFx1MDE2MWFibG9uYXN8U2NlbmFyaWppfFNjZW5cdTAxMDFyaWpzfFNjZW5cdTAxMDFyaWpzIHBcdTAxMTNjIHBhcmF1Z2F8U2NlbmFyaWp1c3xTY2VuYXJpb3xTY1x1MDBFOW5hcmlvfFNjZW5hcmlvIEFtbGluZWxsb2x8U2NlbmFyaW8gT3V0bGluZXxTY2VuYXJpbyBUZW1wbGF0ZXxTY2VuYXJpb21hbHxTY2VuYXJpb21hbGx8U2NlbmFyaW9zfFNjZW5hcml1fFNjZW5hcml1c3p8U2NlbmFyb3xTY2hlbWEgZGVsbG8gc2NlbmFyaW98U2UgXHUwMEYwZXxTZSB0aGV8U2UgXHUwMEZFZXxTZW5hcmlvfFNlbmFyeW8gRGVza3JpcHN5b258U2VuYXJ5byBkZXNrcmlwc3lvbnxTZW5hcnlvfFNlbmFyeW8gdGFzbGFcdTAxMUZcdTAxMzF8U2hpdmVyIG1lIHRpbWJlcnN8U2l0dVx1MDEwMWNpamF8U2l0dWFpfFNpdHVhc2llIFVpdGVlbnNldHRpbmd8U2l0dWFzaWV8U2tlbmFyaW8ga29uc2VwfFNrZW5hcmlvfFNraWNhfFN0cnVjdHVyYSBzY2VuYXJpdXxTdHJ1Y3R1clx1MDEwMyBzY2VuYXJpdXxTdHJ1a3R1cmEgc2NlbmFyaWphfFN0c2VuYWFyaXVtfFN3YSBod2FlciBzd2F8U3dhfFN3YSBod1x1MDBFNnIgc3dhfFN6YWJsb24gc2NlbmFyaXVzemF8U3plbmFyaW98U3plbmFyaW9ncnVuZHJpc3N8VGFwYXVrc2V0fFRhcGF1c3xUYXBhdXNhaWhpb3xUYXVzdHxUYXVzdGF8VGVtcGxhdGUgS2VhZGFhbnxUZW1wbGF0ZSBTZW5hcmlvfFRlbXBsYXRlIFNpdHVhaXxUaGUgdGhpbmcgb2YgaXQgaXN8VFx1MDBFQ25oIGh1XHUxRUQxbmd8VmFyaWFudGFpfFZvb3JiZWVsZGV8Vm9vcmJlZWxkZW58V2hhcnJpbWVhbiBpc3xZby1oby1ob3xZb3UnbGwgd2FubmF8WmFcdTAxNDJvXHUwMTdDZW5pYXxcdTAzQTBcdTAzQjFcdTAzQzFcdTAzQjFcdTAzQjRcdTAzQjVcdTAzQUZcdTAzQjNcdTAzQkNcdTAzQjFcdTAzQzRcdTAzQjF8XHUwM0EwXHUwM0I1XHUwM0MxXHUwM0I5XHUwM0IzXHUwM0MxXHUwM0IxXHUwM0M2XHUwM0FFIFx1MDNBM1x1MDNCNVx1MDNCRFx1MDNCMVx1MDNDMVx1MDNBRlx1MDNCRlx1MDNDNXxcdTAzQTNcdTAzQjVcdTAzQkRcdTAzQUNcdTAzQzFcdTAzQjlcdTAzQjF8XHUwM0EzXHUwM0I1XHUwM0JEXHUwM0FDXHUwM0MxXHUwM0I5XHUwM0JGfFx1MDNBNVx1MDNDMFx1MDNDQ1x1MDNCMlx1MDNCMVx1MDNCOFx1MDNDMVx1MDNCRnxcdTA0MUFcdTA0MzVcdTA0NDBcdTA0MzVcdTA0NDh8XHUwNDFBXHUwNDNFXHUwNDNEXHUwNDQyXHUwNDM1XHUwNDNBXHUwNDQxXHUwNDQyfFx1MDQxQVx1MDQzRVx1MDQzRFx1MDQ0Nlx1MDQzNVx1MDQzRlx1MDQ0MnxcdTA0MUNcdTA0MzhcdTA0NDFcdTA0MzBcdTA0M0JcdTA0M0JcdTA0MzBcdTA0NDB8XHUwNDFDXHUwNDM4XHUwNDQxXHUwNDNFXHUwNDNCXHUwNDNCXHUwNDMwXHUwNDQwfFx1MDQxRVx1MDQ0MVx1MDQzRFx1MDQzRVx1MDQzMlx1MDQzMHxcdTA0MUZcdTA0MzVcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NDNcdTA0M0NcdTA0M0VcdTA0MzJcdTA0MzB8XHUwNDFGXHUwNDNFXHUwNDM3XHUwNDMwXHUwNDM0XHUwNDM4XHUwNDNEXHUwNDMwfFx1MDQxRlx1MDQ0MFx1MDQzNVx1MDQzNFx1MDQzOFx1MDQ0MVx1MDQ0Mlx1MDQzRVx1MDQ0MFx1MDQzOFx1MDQ0RnxcdTA0MUZcdTA0NDBcdTA0MzVcdTA0MzRcdTA0NEJcdTA0NDFcdTA0NDJcdTA0M0VcdTA0NDBcdTA0MzhcdTA0NEZ8XHUwNDFGXHUwNDQwXHUwNDM4XHUwNDNBXHUwNDNCXHUwNDMwXHUwNDM0XHUwNDM4fFx1MDQxRlx1MDQ0MFx1MDQzOFx1MDQzQ1x1MDQzNVx1MDQ0MHxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0NcdTA0MzVcdTA0NDBcdTA0Mzh8XHUwNDFGXHUwNDQwXHUwNDM4XHUwNDNDXHUwNDM1XHUwNDQwXHUwNDRCfFx1MDQyMFx1MDQzMFx1MDQzQ1x1MDQzQVx1MDQzMCBcdTA0M0RcdTA0MzAgXHUwNDQxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDM5fFx1MDQyMVx1MDQzQVx1MDQzOFx1MDQ0Nlx1MDQzMHxcdTA0MjFcdTA0NDJcdTA0NDBcdTA0NDNcdTA0M0FcdTA0NDJcdTA0NDNcdTA0NDBcdTA0MzAgXHUwNDQxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDU4XHUwNDMwfFx1MDQyMVx1MDQ0Mlx1MDQ0MFx1MDQ0M1x1MDQzQVx1MDQ0Mlx1MDQ0M1x1MDQ0MFx1MDQzMCBcdTA0NDFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0NEZ8XHUwNDIxXHUwNDQyXHUwNDQwXHUwNDQzXHUwNDNBXHUwNDQyXHUwNDQzXHUwNDQwXHUwNDMwIFx1MDQ0MVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQ1Nlx1MDQ0RXxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0Mzl8XHUwNDIxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDM4XHUwNDM5IFx1MDQ0MVx1MDQ0Mlx1MDQ0MFx1MDQ0M1x1MDQzQVx1MDQ0Mlx1MDQ0M1x1MDQ0MFx1MDQzMFx1MDQ0MVx1MDQzOHxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0MzlcdTA0M0RcdTA0NEJcdTA0QTMgXHUwNDQyXHUwNEU5XHUwNDM3XHUwNDM1XHUwNDNCXHUwNDM1XHUwNDQ4XHUwNDM1fFx1MDQyMVx1MDQ0Nlx1MDQzNVx1MDQzRFx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQ1OFx1MDQzOHxcdTA0MjFcdTA0NDZcdTA0MzVcdTA0M0RcdTA0MzBcdTA0NDBcdTA0MzhcdTA0M0V8XHUwNDIxXHUwNDQ2XHUwNDM1XHUwNDNEXHUwNDMwXHUwNDQwXHUwNDU2XHUwNDM5fFx1MDQyMlx1MDQzMFx1MDQ0MFx1MDQzOFx1MDQ0NXxcdTA0QUVcdTA0NDBcdTA0M0RcdTA0RDlcdTA0M0FcdTA0M0JcdTA0RDlcdTA0NDB8XHUwNUQzXHUwNUQ1XHUwNUQyXHUwNURFXHUwNUQwXHUwNUQ1XHUwNUVBfFx1MDVFOFx1MDVFN1x1MDVFMnxcdTA1RUFcdTA1RDFcdTA1RTBcdTA1RDlcdTA1RUEgXHUwNUVBXHUwNUU4XHUwNUQ3XHUwNUQ5XHUwNUU5fFx1MDVFQVx1MDVFOFx1MDVEN1x1MDVEOVx1MDVFOXxcdTA2MjdcdTA2NDRcdTA2MkVcdTA2NDRcdTA2NDFcdTA2NEFcdTA2Mjl8XHUwNjI3XHUwNjQ0XHUwNkFGXHUwNjQ4XHUwNkNDIFx1MDYzM1x1MDY0Nlx1MDYyN1x1MDYzMVx1MDZDQ1x1MDY0OHxcdTA2MjdcdTA2NDVcdTA2MkJcdTA2NDRcdTA2Mjl8XHUwNjdFXHUwNjMzIFx1MDY0NVx1MDY0Nlx1MDYzOFx1MDYzMXxcdTA2MzJcdTA2NDVcdTA2Q0NcdTA2NDZcdTA2NDd8XHUwNjMzXHUwNjQ2XHUwNjI3XHUwNjMxXHUwNkNDXHUwNjQ4fFx1MDYzM1x1MDY0QVx1MDY0Nlx1MDYyN1x1MDYzMVx1MDY0QVx1MDY0OHxcdTA2MzNcdTA2NEFcdTA2NDZcdTA2MjdcdTA2MzFcdTA2NEFcdTA2NDggXHUwNjQ1XHUwNjJFXHUwNjM3XHUwNjM3fFx1MDY0NVx1MDYyQlx1MDYyN1x1MDY0NFx1MDZDQ1x1MDZCQXxcdTA2NDVcdTA2NDZcdTA2MzhcdTA2MzEgXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNkQyIFx1MDZBOVx1MDYyNyBcdTA2MkVcdTA2MjdcdTA2QTlcdTA2QzF8XHUwNjQ1XHUwNjQ2XHUwNjM4XHUwNjMxXHUwNjQ2XHUwNjI3XHUwNjQ1XHUwNkMxfFx1MDY0Nlx1MDY0NVx1MDY0OFx1MDY0Nlx1MDY0NyBcdTA2NDdcdTA2Mjd8XHUwOTA5XHUwOTI2XHUwOTNFXHUwOTM5XHUwOTMwXHUwOTIzfFx1MDkyQVx1MDkzMFx1MDkzRlx1MDkyNlx1MDk0M1x1MDkzNlx1MDk0RFx1MDkyRnxcdTA5MkFcdTA5MzBcdTA5M0ZcdTA5MjZcdTA5NDNcdTA5MzZcdTA5NERcdTA5MkYgXHUwOTMwXHUwOTQyXHUwOTJBXHUwOTMwXHUwOTQ3XHUwOTE2XHUwOTNFfFx1MDkyQVx1MDk0M1x1MDkzN1x1MDk0RFx1MDkyMFx1MDkyRFx1MDk0Mlx1MDkyRVx1MDkzRnxcdTBBMDlcdTBBMjZcdTBBM0VcdTBBMzlcdTBBMzBcdTBBMjhcdTBBM0VcdTBBMDJ8XHUwQTJBXHUwQTFGXHUwQTE1XHUwQTI1XHUwQTNFfFx1MEEyQVx1MEExRlx1MEExNVx1MEEyNVx1MEEzRSBcdTBBMjJcdTBBM0VcdTBBMDJcdTBBMUFcdTBBM0V8XHUwQTJBXHUwQTFGXHUwQTE1XHUwQTI1XHUwQTNFIFx1MEEzMFx1MEE0Mlx1MEEyQSBcdTBBMzBcdTBBNDdcdTBBMTZcdTBBM0V8XHUwQTJBXHUwQTNGXHUwQTFCXHUwQTRCXHUwQTE1XHUwQTVDfFx1MEMwOVx1MEMyNlx1MEMzRVx1MEMzOVx1MEMzMFx1MEMyM1x1MEMzMlx1MEM0MXxcdTBDMTVcdTBDMjVcdTBDMjhcdTBDMDJ8XHUwQzI4XHUwQzQ3XHUwQzJBXHUwQzI1XHUwQzREXHUwQzJGXHUwQzAyfFx1MEMzOFx1MEMyOFx1MEM0RFx1MEMyOFx1MEMzRlx1MEMzNVx1MEM0N1x1MEMzNlx1MEMwMnxcdTBDODlcdTBDQTZcdTBDQkVcdTBDQjlcdTBDQjBcdTBDQTNcdTBDQzZcdTBDOTdcdTBDQjNcdTBDQzF8XHUwQzk1XHUwQ0E1XHUwQ0JFXHUwQ0I4XHUwQ0JFXHUwQ0IwXHUwQ0JFXHUwQzgyXHUwQ0I2fFx1MENCNVx1MENCRlx1MENCNVx1MENCMFx1MENBM1x1MENDNnxcdTBDQjlcdTBDQkZcdTBDQThcdTBDQ0RcdTBDQThcdTBDQzZcdTBDQjJcdTBDQzZ8XHUwRTQyXHUwRTA0XHUwRTIzXHUwRTA3XHUwRTJBXHUwRTIzXHUwRTQ5XHUwRTMyXHUwRTA3XHUwRTAyXHUwRTJEXHUwRTA3XHUwRTQwXHUwRTJCXHUwRTE1XHUwRTM4XHUwRTAxXHUwRTMyXHUwRTIzXHUwRTEzXHUwRTRDfFx1MEUwQVx1MEUzOFx1MEUxNFx1MEUwMlx1MEUyRFx1MEUwN1x1MEUxNVx1MEUzMVx1MEUyN1x1MEUyRFx1MEUyMlx1MEU0OFx1MEUzMlx1MEUwN3xcdTBFMEFcdTBFMzhcdTBFMTRcdTBFMDJcdTBFMkRcdTBFMDdcdTBFNDBcdTBFMkJcdTBFMTVcdTBFMzhcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTNcdTBFNEN8XHUwRTQxXHUwRTE5XHUwRTI3XHUwRTA0XHUwRTM0XHUwRTE0fFx1MEUyQVx1MEUyM1x1MEUzOFx1MEUxQlx1MEU0MFx1MEUyQlx1MEUxNVx1MEUzOFx1MEUwMVx1MEUzMlx1MEUyM1x1MEUxM1x1MEU0Q3xcdTBFNDBcdTBFMkJcdTBFMTVcdTBFMzhcdTBFMDFcdTBFMzJcdTBFMjNcdTBFMTNcdTBFNEN8XHVCQzMwXHVBQ0JEfFx1QzJEQ1x1QjA5OFx1QjlBQ1x1QzYyNHxcdUMyRENcdUIwOThcdUI5QUNcdUM2MjQgXHVBQzFDXHVDNjk0fFx1QzYwOHxcdTMwQjVcdTMwRjNcdTMwRDdcdTMwRUJ8XHUzMEI3XHUzMENBXHUzMEVBXHUzMEFBfFx1MzBCN1x1MzBDQVx1MzBFQVx1MzBBQVx1MzBBMlx1MzBBNlx1MzBDOFx1MzBFOVx1MzBBNFx1MzBGM3xcdTMwQjdcdTMwQ0FcdTMwRUFcdTMwQUFcdTMwQzZcdTMwRjNcdTMwRDdcdTMwRUN8XHUzMEI3XHUzMENBXHUzMEVBXHUzMEFBXHUzMEM2XHUzMEYzXHUzMEQ3XHUzMEVDXHUzMEZDXHUzMEM4fFx1MzBDNlx1MzBGM1x1MzBEN1x1MzBFQ3xcdTRGOEJ8XHU0RjhCXHU1QjUwfFx1NTI2N1x1NjcyQ3xcdTUyNjdcdTY3MkNcdTU5MjdcdTdFQjJ8XHU1Mjg3XHU2NzJDfFx1NTI4N1x1NjcyQ1x1NTkyN1x1N0RCMXxcdTU3M0FcdTY2NkZ8XHU1NzNBXHU2NjZGXHU1OTI3XHU3RUIyfFx1NTgzNFx1NjY2RnxcdTU4MzRcdTY2NkZcdTU5MjdcdTdEQjF8XHU4MENDXHU2NjZGKTpbXjpcXHJcXG5dKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW1wb3J0YW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oOilbXlxcclxcbl0qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzogL1teOlxcclxcbl0rOi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCd0YWJsZS1ib2R5Jzoge1xuXHRcdFx0Ly8gTG9vay1iZWhpbmQgaXMgdXNlZCB0byBza2lwIHRoZSB0YWJsZSBoZWFkLCB3aGljaCBoYXMgdGhlIHNhbWUgZm9ybWF0IGFzIGFueSB0YWJsZSByb3dcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKCcgKyB0YWJsZVJvdyArICcpKD86JyArIHRhYmxlUm93ICsgJykrJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdvdXRsaW5lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88W14+XSs+Lyxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQndGQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xccypbXlxcc3xdW158XSovLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3RhYmxlLWhlYWQnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVSb3cpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0aCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxzKlteXFxzfF1bXnxdKi8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdhdHJ1bGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0rKSg/OidhfCdhY2h8J2VqfDd8YXxBIHRha1x1MDBFOXxBIHRha3RpZVx1MDE3RXxBIHRpZVx1MDE3RXxBIHpcdTAwRTFyb3ZlXHUwMTQ4fEFiZXJ8QWN8QWRvdHR8QWtrb3J8QWt8QWxlc2hvcmVzfEFsZXxBbGl8QWxsb3JhfEFsb3JzfEFsc3xBbWF8QW1lbm55aWJlbnxBbWlrb3J8QW1wYWt8YW58QU58QW5hbmdpbmd8QW5kIHknYWxsfEFuZHxBbmdlbm9tbWVufEFucmhlZ2VkaWcgYXxBbnxBcGFiaWxhfEF0XHUwMEU4c3xBdGVzYXxBdHVuY2l8QXZhc3QhfEF5ZXxBfGF3ZXJ8QmFnaXxCYW5qdXJ8QmV0fEJpXHUxRUJGdHxCbGltZXkhfEJ1aHxCdXQgYXQgdGhlIGVuZCBvZiB0aGUgZGF5IEkgcmVja29ufEJ1dCB5J2FsbHxCdXR8QlVUfENhbHxDXHUwMEUybmR8Q2FuZHxDYW5kb3xDZXxDdWFuZG98XHUwMTBDZXxcdTAwRDBhIFx1MDBGMGV8XHUwMEQwYXxEYWRhc3xEYWRhfERhZG9zfERhZG98RGFIIGdodScgYmVqbHUnfGRhbm58RGFubnxEYW5vfERhbnxEYXJ8RGF0IGZpaW5kfERhdGF8RGF0ZSBmaWluZHxEYXRlfERhdGkgZmlpbmR8RGF0aXxEYVx1MDE2M2kgZmlpbmR8RGFcdTAyMUJpIGZpaW5kfERFTnxEYXRvfERlfERlbiB5b3VzZSBnb3R0YXxEZW5nYW58RGliZXJpfERpeWVsaW0ga2l8RG9uYWRhfERvbmF0fERvbml0YVx1MDEzNW98RG98RHVufER1b3RhfFx1MDBEMHVyaHxFZWxkYWRlc3xFZnxFXHUwMTFGZXIga2l8RW50YW98RW50XHUwMEUzb3xFbnRcdTAwRjNufEV8RW58RW50b25jZXN8RXBpfFx1MDBDOXN8RXRhbnQgZG9ublx1MDBFOWV8RXRhbnQgZG9ublx1MDBFOXxFdHxcdTAwQzl0YW50IGRvbm5cdTAwRTllc3xcdTAwQzl0YW50IGRvbm5cdTAwRTllfFx1MDBDOXRhbnQgZG9ublx1MDBFOXxFdGFudCBkb25uXHUwMEU5ZXN8RXRhbnQgZG9ublx1MDBFOXN8XHUwMEM5dGFudCBkb25uXHUwMEU5c3xGYWthdHxHYW5nd2F5IXxHZHl8R2VnZWJlbiBzZWllbnxHZWdlYmVuIHNlaXxHZWdldmVufEdlZ2V3ZXxnaHUnIG5vYmx1J3xHaXR0fEdpdmVuIHknYWxsfEdpdmVufEdpdmV0fEdpdnVufEhhfENob3xJIENBTiBIQVp8SW58SXJ8SXQncyBqdXN0IHVuYmVsaWV2YWJsZXxJfEphfEplXHUwMTVCbGl8SmVcdTAxN0NlbGl8S2FkfEthZGF8S2FkYXJ8S2FpfEthanxLZHlcdTAxN0V8S2VcdTAxMEZ8S2VtdWRpYW58S2V0aWthfEtoaXxLaWVkeXxLb3xLdWlkfEt1aXxLdW58TGFufGxhdGxofExlIHNhIGF8TGV0IGdvIGFuZCBoYXVsfExlfExcdTAwRTggc2EgYXxMXHUwMEU4fExvZ298TG9yc3F1Jzx8TG9yc3F1ZXxtXHUwMEU0fE1hYXJ8TWFpc3xNYWpcdTAxMDVjfE1hfE1hamR8TWFrYXxNYW5hd2F8TWFzfE1lbnxNZW5hd2F8TXV0dGF8TmFsaWthfE5hbGlrYW5pbmd8TmFuZ2luZ3xOXHUwMEU1cnxOXHUwMEU0cnxOYXRvfE5oXHUwMUIwbmd8TmlpbnxOanVrfE8gemFtYW58T2NofE9nfE9sZXRldGFhbnxPbmR8T25kYXxPcmF6fFBha3xQZXJvfFBlclx1MDBGMnxQb2Rhbm98UG9raWFcdTAxM0V8UG9rdWR8UG90ZW18UG90b218UHJpdnpldG98UHJ5ZHxRdWFufFF1YW5kfFF1YW5kb3xxYVNESSd8U1x1MDBFNXxTZWR8U2V8U2lpc3xTaXBvemUga2V8U2lwb3plIEtlfFNpcG96ZXxTaXxcdTAxNUVpfFx1MDIxOGl8U29pdHxTdGVsfFRhZGF8VGFkfFRha3JhdHxUYWt8VGFwaXxUZXJ8VGV0YXBpfFRoYSB0aGV8VGhhfFRoZW4geSdhbGx8VGhlbnxUaFx1MDBFQ3xUaHVyaHxUb2RhfFRvbyByaWdodHxVbnxVbmR8dWdlaG9sbHxWXHUwMEUwfHZhanxWZW5kYXJ8VmV8d2FubnxXYW5uZWVyfFdFTnxXZW5ufFdoZW4geSdhbGx8V2hlbnxXdGVkeXxXdW58WSdrbm93fFllYWggbmFofFluYXxZb3VzZSBrbm93IGxpa2Ugd2hlbnxZb3VzZSBrbm93IHdoZW4geW91c2UgZ290fFl8WmEgcHJlZHBva2xhZHV8WmEgcFx1MDE1OWVkcG9rbGFkdXxaYWRhbnxaYWRhbml8WmFkYW5vfFphZGF0ZXxaYWRhdG98WmFrXHUwMTQyYWRhalx1MDEwNWN8WmFyYWRpfFphdGF0aXxcdTAwREVhIFx1MDBGRWV8XHUwMERFYXxcdTAwREVcdTAwRTF8XHUwMERFZWdhcnxcdTAwREV1cmh8XHUwMzkxXHUwM0JCXHUwM0JCXHUwM0FDfFx1MDM5NFx1MDNCNVx1MDNCNFx1MDNCRlx1MDNCQ1x1MDNBRFx1MDNCRFx1MDNCRlx1MDNDNXxcdTAzOUFcdTAzQjFcdTAzQjl8XHUwMzhDXHUwM0M0XHUwM0IxXHUwM0JEfFx1MDNBNFx1MDNDQ1x1MDNDNFx1MDNCNXxcdTA0MTAgXHUwNDQyXHUwNDMwXHUwNDNBXHUwNDNFXHUwNDM2fFx1MDQxMFx1MDQzM1x1MDQzMFx1MDQ0MHxcdTA0MTBcdTA0M0JcdTA0MzV8XHUwNDEwXHUwNDNCXHUwNDM4fFx1MDQxMFx1MDQzQ1x1MDQzQ1x1MDQzRXxcdTA0MTB8XHUwNEQ4XHUwNDMzXHUwNEQ5XHUwNDQwfFx1MDREOFx1MDQzOVx1MDQ0Mlx1MDQzOFx1MDQzQXxcdTA0RDhcdTA0M0NcdTA0M0NcdTA0MzB8XHUwNDExXHUwNDM4XHUwNDQwXHUwNDNFXHUwNDNBfFx1MDQxMlx1MDQzMHxcdTA0MTJcdTA0RDl8XHUwNDE0XHUwNDMwXHUwNDM0XHUwNDM1XHUwNDNEXHUwNDNFfFx1MDQxNFx1MDQzMFx1MDQzRFx1MDQzRXxcdTA0MTRcdTA0M0VcdTA0M0ZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhcdTA0M0N8XHUwNDE1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQxN1x1MDQzMFx1MDQzNFx1MDQzMFx1MDQ0Mlx1MDQzNXxcdTA0MTdcdTA0MzBcdTA0MzRcdTA0MzBcdTA0NDJcdTA0Mzh8XHUwNDE3XHUwNDMwXHUwNDM0XHUwNDMwXHUwNDQyXHUwNDNFfFx1MDQxOHxcdTA0MDZ8XHUwNDFBIFx1MDQ0Mlx1MDQzRVx1MDQzQ1x1MDQ0MyBcdTA0MzZcdTA0MzV8XHUwNDFBXHUwNDMwXHUwNDM0XHUwNDMwfFx1MDQxQVx1MDQzMFx1MDQzNHxcdTA0MUFcdTA0M0VcdTA0MzNcdTA0MzBcdTA0NDJcdTA0M0V8XHUwNDFBXHUwNDNFXHUwNDMzXHUwNDM0XHUwNDMwfFx1MDQxQVx1MDQzRVx1MDQzQlx1MDQzOHxcdTA0MUJcdTA0RDlcdTA0M0FcdTA0MzhcdTA0M0R8XHUwNDFCXHUwNDM1XHUwNDNBXHUwNDM4XHUwNDNEfFx1MDQxRFx1MDREOVx1MDQ0Mlx1MDQzOFx1MDQ5N1x1MDREOVx1MDQzNFx1MDREOXxcdTA0MURcdTA0MzVcdTA0NDVcdTA0MzBcdTA0Mzl8XHUwNDFEXHUwNDNFfFx1MDQxRVx1MDQzRFx1MDQzNFx1MDQzMHxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0ZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhcdTA0M0NcdTA0M0UsIFx1MDQ0OVx1MDQzRXxcdTA0MUZcdTA0NDBcdTA0MzhcdTA0M0ZcdTA0NDNcdTA0NDFcdTA0NDJcdTA0MzhcdTA0M0NcdTA0M0V8XHUwNDFGXHUwNDQzXHUwNDQxXHUwNDQyXHUwNDRDfFx1MDQyMlx1MDQzMFx1MDQzQVx1MDQzNlx1MDQzNXxcdTA0MjJcdTA0MzB8XHUwNDIyXHUwNDNFXHUwNDMzXHUwNDM0XHUwNDMwfFx1MDQyMlx1MDQzRVx1MDQzNFx1MDQ1NnxcdTA0MjJcdTA0M0V8XHUwNDIzXHUwNDNEXHUwNDM0XHUwNDMwfFx1MDRCQVx1MDREOVx1MDQzQ3xcdTA0MkZcdTA0M0FcdTA0NDlcdTA0M0V8XHUwNUQwXHUwNUQxXHUwNURDfFx1MDVEMFx1MDVENlx1MDVEOXxcdTA1RDBcdTA1RDZ8XHUwNUQxXHUwNUQ0XHUwNUQ5XHUwNUUwXHUwNUVBXHUwNURGfFx1MDVENVx1MDVEMlx1MDVERHxcdTA1REJcdTA1RDBcdTA1RTlcdTA1RTh8XHUwNjIyXHUwNjQ2XHUwNkFGXHUwNjI3XHUwNjQ3fFx1MDYyN1x1MDYzMFx1MDYyN1x1MDY0QnxcdTA2MjdcdTA2QUZcdTA2MzF8XHUwNjI3XHUwNjQ1XHUwNjI3fFx1MDYyN1x1MDY0OFx1MDYzMXxcdTA2MjhcdTA2MjcgXHUwNjQxXHUwNjMxXHUwNjM2fFx1MDYyOFx1MDYyN1x1MDY0NFx1MDY0MVx1MDYzMVx1MDYzNnxcdTA2MjhcdTA2NDFcdTA2MzFcdTA2MzZ8XHUwNjdFXHUwNkJFXHUwNjMxfFx1MDYyQVx1MDYyOHxcdTA2MkJcdTA2NDV8XHUwNjJDXHUwNjI4fFx1MDYzOVx1MDY0Nlx1MDYyRlx1MDY0NVx1MDYyN3xcdTA2NDFcdTA2MzFcdTA2MzYgXHUwNkE5XHUwNkNDXHUwNjI3fFx1MDY0NFx1MDY0M1x1MDY0NnxcdTA2NDRcdTA2Q0NcdTA2QTlcdTA2NDZ8XHUwNjQ1XHUwNjJBXHUwNjQ5fFx1MDY0N1x1MDY0Nlx1MDZBRlx1MDYyN1x1MDY0NVx1MDZDQ3xcdTA2NDh8XHUwOTA1XHUwOTE3XHUwOTMwfFx1MDkxNFx1MDkzMHxcdTA5MTVcdTA5MjZcdTA5M0V8XHUwOTE1XHUwOTNGXHUwOTI4XHUwOTREXHUwOTI0XHUwOTQxfFx1MDkxQVx1MDk0Mlx1MDkwMlx1MDkxNVx1MDkzRnxcdTA5MUNcdTA5MkN8XHUwOTI0XHUwOTI1XHUwOTNFfFx1MDkyNFx1MDkyNlx1MDkzRXxcdTA5MjRcdTA5MkN8XHUwOTJBXHUwOTMwXHUwOTI4XHUwOTREXHUwOTI0XHUwOTQxfFx1MDkyQVx1MDkzMHxcdTA5MkZcdTA5MjZcdTA5M0Z8XHUwQTA1XHUwQTI0XHUwQTQ3fFx1MEExQ1x1MEEyNlx1MEE0Qlx1MEEwMnxcdTBBMUNcdTBBM0ZcdTBBMzVcdTBBNDdcdTBBMDIgXHUwQTE1XHUwQTNGfFx1MEExQ1x1MEE0N1x1MEExNVx1MEEzMHxcdTBBMjRcdTBBMjZ8XHUwQTJBXHUwQTMwfFx1MEMwNVx1MEMyQVx1MEM0RFx1MEMyQVx1MEM0MVx1MEMyMVx1MEM0MXxcdTBDMDggXHUwQzJBXHUwQzMwXHUwQzNGXHUwQzM4XHUwQzREXHUwQzI1XHUwQzNGXHUwQzI0XHUwQzNGXHUwQzMyXHUwQzRCfFx1MEMxNVx1MEMzRVx1MEMyOFx1MEMzRnxcdTBDMUFcdTBDNDZcdTBDMkFcdTBDNERcdTBDMkFcdTBDMkNcdTBDMjFcdTBDM0ZcdTBDMjhcdTBDMjZcdTBDM0Z8XHUwQzJFXHUwQzMwXHUwQzNGXHUwQzJGXHUwQzQxfFx1MEM4Nlx1MENBNlx1MENCMFx1MENDNnxcdTBDQThcdTBDODJcdTBDQTRcdTBDQjB8XHUwQ0E4XHUwQ0JGXHUwQ0Q1XHUwQ0ExXHUwQ0JGXHUwQ0E2fFx1MENBRVx1MENBNFx1MENDRFx1MENBNFx1MENDMXxcdTBDQjhcdTBDQ0RcdTBDQTVcdTBDQkZcdTBDQTRcdTBDQkZcdTBDQUZcdTBDQThcdTBDQ0RcdTBDQThcdTBDQzF8XHUwRTAxXHUwRTMzXHUwRTJCXHUwRTE5XHUwRTE0XHUwRTQzXHUwRTJCXHUwRTQ5fFx1MEUxNFx1MEUzMVx1MEUwN1x1MEUxOVx1MEUzMVx1MEU0OVx1MEUxOXxcdTBFNDFcdTBFMTVcdTBFNDh8XHUwRTQwXHUwRTIxXHUwRTM3XHUwRTQ4XHUwRTJEfFx1MEU0MVx1MEUyNVx1MEUzMHxcdUFERjhcdUI3RUNcdUJBNzQ8fFx1QURGOFx1QjlBQ1x1QUNFMDx8XHVCMkU4PHxcdUI5Q0NcdUM1N0Q8fFx1QjlDQ1x1Qzc3Qzx8XHVCQTNDXHVDODAwPHxcdUM4NzBcdUFDNzQ8fFx1RDU1OFx1QzlDMFx1QjlDQzx8XHUzMDRCXHUzMDY0PHxcdTMwNTdcdTMwNEJcdTMwNTc8fFx1MzA1Rlx1MzA2MFx1MzA1Nzx8XHUzMDZBXHUzMDg5XHUzMDcwPHxcdTMwODJcdTMwNTc8fFx1NEUyNlx1NEUxNDx8XHU0RjQ2XHUzMDU3PHxcdTRGNDZcdTY2MkY8fFx1NTA0N1x1NTk4Mjx8XHU1MDQ3XHU1QjlBPHxcdTUwNDdcdThBMkQ8fFx1NTA0N1x1OEJCRTx8XHU1MjREXHU2M0QwPHxcdTU0MENcdTY1RjY8fFx1NTQwQ1x1NjY0Mjx8XHU1RTc2XHU0RTE0PHxcdTVGNTM8fFx1NzU3Njx8XHU4MDBDXHU0RTE0PHxcdTkwQTNcdTRFNDg8fFx1OTBBM1x1OUVCQzwpKD89WyBcXHRdKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCJ8Jyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKSonLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3V0bGluZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvPFtePl0rPi8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J291dGxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPFtePl0rPi8sXG5cdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdH1cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2l0ID0ge1xuXHQvKlxuXHQgKiBBIHNpbXBsZSBvbmUgbGluZSBjb21tZW50IGxpa2UgaW4gYSBnaXQgc3RhdHVzIGNvbW1hbmRcblx0ICogRm9yIGluc3RhbmNlOlxuXHQgKiAkIGdpdCBzdGF0dXNcblx0ICogIyBPbiBicmFuY2ggaW5maW5pdGUtc2Nyb2xsXG5cdCAqICMgWW91ciBicmFuY2ggYW5kICdvcmlnaW4vc2hhcmVkQnJhbmNoZXMvZnJvbnRlbmRUZWFtL2luZmluaXRlLXNjcm9sbCcgaGF2ZSBkaXZlcmdlZCxcblx0ICogIyBhbmQgaGF2ZSAxIGFuZCAyIGRpZmZlcmVudCBjb21taXRzIGVhY2gsIHJlc3BlY3RpdmVseS5cblx0ICogbm90aGluZyB0byBjb21taXQgKHdvcmtpbmcgZGlyZWN0b3J5IGNsZWFuKVxuXHQgKi9cblx0J2NvbW1lbnQnOiAvXiMuKi9tLFxuXG5cdC8qXG5cdCAqIFJlZ2V4cCB0byBtYXRjaCB0aGUgY2hhbmdlZCBsaW5lcyBpbiBhIGdpdCBkaWZmIG91dHB1dC4gQ2hlY2sgdGhlIGV4YW1wbGUgYmVsb3cuXG5cdCAqL1xuXHQnZGVsZXRlZCc6IC9eWy1cdTIwMTNdLiovbSxcblx0J2luc2VydGVkJzogL15cXCsuKi9tLFxuXG5cdC8qXG5cdCAqIGEgc3RyaW5nIChkb3VibGUgYW5kIHNpbXBsZSBxdW90ZSlcblx0ICovXG5cdCdzdHJpbmcnOiAvKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cblx0Lypcblx0ICogYSBnaXQgY29tbWFuZC4gSXQgc3RhcnRzIHdpdGggYSByYW5kb20gcHJvbXB0IGZpbmlzaGluZyBieSBhICQsIHRoZW4gXCJnaXRcIiB0aGVuIHNvbWUgb3RoZXIgcGFyYW1ldGVyc1xuXHQgKiBGb3IgaW5zdGFuY2U6XG5cdCAqICQgZ2l0IGFkZCBmaWxlLnR4dFxuXHQgKi9cblx0J2NvbW1hbmQnOiB7XG5cdFx0cGF0dGVybjogL14uKlxcJCBnaXQgLiokL20sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQvKlxuXHRcdFx0ICogQSBnaXQgY29tbWFuZCBjYW4gY29udGFpbiBhIHBhcmFtZXRlciBzdGFydGluZyBieSBhIHNpbmdsZSBvciBhIGRvdWJsZSBkYXNoIGZvbGxvd2VkIGJ5IGEgc3RyaW5nXG5cdFx0XHQgKiBGb3IgaW5zdGFuY2U6XG5cdFx0XHQgKiAkIGdpdCBkaWZmIC0tY2FjaGVkXG5cdFx0XHQgKiAkIGdpdCBsb2cgLXBcblx0XHRcdCAqL1xuXHRcdFx0J3BhcmFtZXRlcic6IC9cXHMtLT9cXHcrL1xuXHRcdH1cblx0fSxcblxuXHQvKlxuXHQgKiBDb29yZGluYXRlcyBkaXNwbGF5ZWQgaW4gYSBnaXQgZGlmZiBjb21tYW5kXG5cdCAqIEZvciBpbnN0YW5jZTpcblx0ICogJCBnaXQgZGlmZlxuXHQgKiBkaWZmIC0tZ2l0IGZpbGUudHh0IGZpbGUudHh0XG5cdCAqIGluZGV4IDYyMTQ5NTMuLjFkNTRhNTIgMTAwNjQ0XG5cdCAqIC0tLSBmaWxlLnR4dFxuXHQgKiArKysgZmlsZS50eHRcblx0ICogQEAgLTEgKzEsMiBAQFxuXHQgKiAtSGVyZSdzIG15IHRldHggZmlsZVxuXHQgKiArSGVyZSdzIG15IHRleHQgZmlsZVxuXHQgKiArQW5kIHRoaXMgaXMgdGhlIHNlY29uZCBsaW5lXG5cdCAqL1xuXHQnY29vcmQnOiAvXkBALipAQCQvbSxcblxuXHQvKlxuXHQgKiBNYXRjaCBhIFwiY29tbWl0IFtTSEExXVwiIGxpbmUgaW4gYSBnaXQgbG9nIG91dHB1dC5cblx0ICogRm9yIGluc3RhbmNlOlxuXHQgKiAkIGdpdCBsb2dcblx0ICogY29tbWl0IGExMWExNGVmN2UyNmYyY2E2MmQ0YjM1ZWFjNDU1Y2U2MzZkMGRjMDlcblx0ICogQXV0aG9yOiBsZ2lyYXVkZWxcblx0ICogRGF0ZTogICBNb24gRmViIDE3IDExOjE4OjM0IDIwMTQgKzAxMDBcblx0ICpcblx0ICogICAgIEFkZCBvZiBhIG5ldyBsaW5lXG5cdCAqL1xuXHQnY29tbWl0LXNoYTEnOiAvXmNvbW1pdCBcXHd7NDB9JC9tXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuZ2xzbCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2MnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OmFjdGl2ZXxhc218YXRvbWljX3VpbnR8YXR0cmlidXRlfFtpYmR1XT92ZWNbMjM0XXxib29sfGJyZWFrfGJ1ZmZlcnxjYXNlfGNhc3R8Y2VudHJvaWR8Y2xhc3N8Y29oZXJlbnR8Y29tbW9ufGNvbnN0fGNvbnRpbnVlfGQ/bWF0WzIzNF0oPzp4WzIzNF0pP3xkZWZhdWx0fGRpc2NhcmR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHRlcm58ZXh0ZXJuYWx8ZmFsc2V8ZmlsdGVyfGZpeGVkfGZsYXR8ZmxvYXR8Zm9yfGZ2ZWNbMjM0XXxnb3RvfGhhbGZ8aGlnaHB8aHZlY1syMzRdfFtpdV0/c2FtcGxlcjJETVMoPzpBcnJheSk/fFtpdV0/c2FtcGxlcjJEUmVjdHxbaXVdP3NhbXBsZXJCdWZmZXJ8W2l1XT9zYW1wbGVyQ3ViZXxbaXVdP3NhbXBsZXJDdWJlQXJyYXl8W2l1XT9zYW1wbGVyWzEyM11EfFtpdV0/c2FtcGxlclsxMl1EQXJyYXl8W2l1XT9pbWFnZTJETVMoPzpBcnJheSk/fFtpdV0/aW1hZ2UyRFJlY3R8W2l1XT9pbWFnZUJ1ZmZlcnxbaXVdP2ltYWdlQ3ViZXxbaXVdP2ltYWdlQ3ViZUFycmF5fFtpdV0/aW1hZ2VbMTIzXUR8W2l1XT9pbWFnZVsxMl1EQXJyYXl8aWZ8aW58aW5saW5lfGlub3V0fGlucHV0fGludHxpbnRlcmZhY2V8aW52YXJpYW50fGxheW91dHxsb25nfGxvd3B8bWVkaXVtcHxuYW1lc3BhY2V8bm9pbmxpbmV8bm9wZXJzcGVjdGl2ZXxvdXR8b3V0cHV0fHBhcnRpdGlvbnxwYXRjaHxwcmVjaXNlfHByZWNpc2lvbnxwdWJsaWN8cmVhZG9ubHl8cmVzb3VyY2V8cmVzdHJpY3R8cmV0dXJufHNhbXBsZXxzYW1wbGVyWzEyXURBcnJheVNoYWRvd3xzYW1wbGVyWzEyXURTaGFkb3d8c2FtcGxlcjJEUmVjdFNoYWRvd3xzYW1wbGVyM0RSZWN0fHNhbXBsZXJDdWJlQXJyYXlTaGFkb3d8c2FtcGxlckN1YmVTaGFkb3d8c2hhcmVkfHNob3J0fHNpemVvZnxzbW9vdGh8c3RhdGljfHN0cnVjdHxzdWJyb3V0aW5lfHN1cGVycHxzd2l0Y2h8dGVtcGxhdGV8dGhpc3x0cnVlfHR5cGVkZWZ8dWludHx1bmlmb3JtfHVuaW9ufHVuc2lnbmVkfHVzaW5nfHZhcnlpbmd8dm9pZHx2b2xhdGlsZXx3aGlsZXx3cml0ZW9ubHkpXFxiL1xufSk7XG5cbi8vIGh0dHBzOi8vZ24uZ29vZ2xlc291cmNlLmNvbS9nbi8rL3JlZnMvaGVhZHMvbWFpbi9kb2NzL3JlZmVyZW5jZS5tZCNncmFtbWFyXG5cblByaXNtLmxhbmd1YWdlcy5nbiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmctbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCJdKVwiKD86W15cXHJcXG5cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVxcJCg/Olxce1tcXHNcXFNdKj9cXH18W2EtekEtWl9dXFx3KnwweFthLWZBLUYwLTldezJ9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdudW1iZXInOiAvXlxcJDB4W1xcc1xcU117Mn0kLyxcblx0XHRcdFx0XHQndmFyaWFibGUnOiAvXlxcJFxcdyskLyxcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OmVsc2V8aWYpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnYnVpbHRpbi1mdW5jdGlvbic6IHtcblx0XHQvLyBhIGZldyBmdW5jdGlvbnMgZ2V0IHNwZWNpYWwgaGlnaGxpZ2h0aW5nIHRvIGltcHJvdmUgcmVhZGFiaWxpdHlcblx0XHRwYXR0ZXJuOiAvXFxiKD86YXNzZXJ0fGRlZmluZWR8Zm9yZWFjaHxpbXBvcnR8cG9vbHxwcmludHx0ZW1wbGF0ZXx0b29sfHRvb2xjaGFpbikoPz1cXHMqXFwoKS9pLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHQnY29uc3RhbnQnOiAvXFxiKD86Y3VycmVudF9jcHV8Y3VycmVudF9vc3xjdXJyZW50X3Rvb2xjaGFpbnxkZWZhdWx0X3Rvb2xjaGFpbnxob3N0X2NwdXxob3N0X29zfHJvb3RfYnVpbGRfZGlyfHJvb3RfZ2VuX2Rpcnxyb290X291dF9kaXJ8dGFyZ2V0X2NwdXx0YXJnZXRfZ2VuX2Rpcnx0YXJnZXRfb3N8dGFyZ2V0X291dF9kaXIpXFxiLyxcblxuXHQnbnVtYmVyJzogLy0/XFxiXFxkK1xcYi8sXG5cblx0J29wZXJhdG9yJzogL1stKyE9PD5dPT98JiZ8XFx8XFx8Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXSwuXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5nblsnc3RyaW5nLWxpdGVyYWwnXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGVbJ2V4cHJlc3Npb24nXS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZ247XG5cblByaXNtLmxhbmd1YWdlcy5nbmkgPSBQcmlzbS5sYW5ndWFnZXMuZ247XG5cblByaXNtLmxhbmd1YWdlc1snbGlua2VyLXNjcmlwdCddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcL1xcKltcXHNcXFNdKj8oPzokfFxcKlxcLykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnbG9jYXRpb24tY291bnRlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxCXFwuXFxCLyxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblxuXHQnc2VjdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcqXSlcXC5cXHcrXFxiLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYltBLVpdW0EtWl9dKig/PVxccypcXCgpLyxcblxuXHQnbnVtYmVyJzogL1xcYig/OjBbeFhdW2EtZkEtRjAtOV0rfFxcZCspW0tNXT9cXGIvLFxuXG5cdCdvcGVyYXRvcic6IC8+Pj0/fDw8PT98LT58XFwrXFwrfC0tfCYmfFxcfFxcfHw6OnxbPzp+XXxbLSsqLyUmfF4hPTw+XT0/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9LDtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzWydsZCddID0gUHJpc20ubGFuZ3VhZ2VzWydsaW5rZXItc2NyaXB0J107XG5cblByaXNtLmxhbmd1YWdlcy5nbyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcInxgW15gXSpgLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xjYXNlfGNoYW58Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkZWZlcnxlbHNlfGZhbGx0aHJvdWdofGZvcnxmdW5jfGdvKD86dG8pP3xpZnxpbXBvcnR8aW50ZXJmYWNlfG1hcHxwYWNrYWdlfHJhbmdlfHJldHVybnxzZWxlY3R8c3RydWN0fHN3aXRjaHx0eXBlfHZhcilcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpffGZhbHNlfGlvdGF8bmlsfHRydWUpXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvLyBiaW5hcnkgYW5kIG9jdGFsIGludGVnZXJzXG5cdFx0L1xcYjAoPzpiWzAxX10rfG9bMC03X10rKWk/XFxiL2ksXG5cdFx0Ly8gaGV4YWRlY2ltYWwgaW50ZWdlcnMgYW5kIGZsb2F0c1xuXHRcdC9cXGIweCg/OlthLWZcXGRfXSsoPzpcXC5bYS1mXFxkX10qKT98XFwuW2EtZlxcZF9dKykoPzpwWystXT9cXGQrKD86X1xcZCspKik/aT8oPyFcXHcpL2ksXG5cdFx0Ly8gZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRzXG5cdFx0Lyg/OlxcYlxcZFtcXGRfXSooPzpcXC5bXFxkX10qKT98XFxCXFwuXFxkW1xcZF9dKikoPzplWystXT9bXFxkX10rKT9pPyg/IVxcdykvaVxuXHRdLFxuXHQnb3BlcmF0b3InOiAvWypcXC8lXiE9XT0/fFxcK1s9K10/fC1bPS1dP3xcXHxbPXxdP3wmKD86PXwmfFxcXj0/KT98Pig/Oj49P3w9KT98PCg/Ojw9P3w9fC0pP3w6PXxcXC5cXC5cXC4vLFxuXHQnYnVpbHRpbic6IC9cXGIoPzphcHBlbmR8Ym9vbHxieXRlfGNhcHxjbG9zZXxjb21wbGV4fGNvbXBsZXgoPzo2NHwxMjgpfGNvcHl8ZGVsZXRlfGVycm9yfGZsb2F0KD86MzJ8NjQpfHU/aW50KD86OHwxNnwzMnw2NCk/fGltYWd8bGVufG1ha2V8bmV3fHBhbmljfHByaW50KD86bG4pP3xyZWFsfHJlY292ZXJ8cnVuZXxzdHJpbmd8dWludHB0cilcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ28nLCAnc3RyaW5nJywge1xuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlxcXFwufFteJ1xcXFxcXHJcXG5dKXswLDEwfScvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9XG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5nb1snY2xhc3MtbmFtZSddO1xuXG4vLyBodHRwczovL2dvLmRldi9yZWYvbW9kI2dvLW1vZC1maWxlLW1vZHVsZVxuXG5QcmlzbS5sYW5ndWFnZXNbJ2dvLW1vZCddID0gUHJpc20ubGFuZ3VhZ2VzWydnby1tb2R1bGUnXSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZlcnNpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFtcXHMoKVtcXF0sXSl2XFxkK1xcLlxcZCtcXC5cXGQrKD86WystXVstKy5cXHddKik/KD8hW15cXHMoKVtcXF0sXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdnby12ZXJzaW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpZ29cXHMrKVxcZCsoPzpcXC5cXGQrKXsxLDJ9Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSg/OmV4Y2x1ZGV8Z298bW9kdWxlfHJlcGxhY2V8cmVxdWlyZXxyZXRyYWN0KVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogLz0+Lyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF0sXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIGludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFxcXCRdKSg/OlxcXFx7Mn0pKilcXCQoPzpcXHcrfFxce1tee31dKlxcfSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJyxcblx0XHRcdH0sXG5cdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdGluc2lkZTogbnVsbCxcblx0XHRcdH0sXG5cdFx0fSxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ3JhZGxlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8nJycoPzpbXlxcXFxdfFxcXFxbXFxzXFxTXSkqPycnJ3wnKD86XFxcXC58W15cXFxcJ1xcclxcbl0pKicvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOlxuXHRcdFx0L1xcYig/OmFwcGx5fGRlZnxkZXBlbmRlbmNpZXN8ZWxzZXxpZnxpbXBsZW1lbnRhdGlvbnxpbXBvcnR8cGx1Z2lufHBsdWdpbnN8cHJvamVjdHxyZXBvc2l0b3JpZXN8cmVwb3NpdG9yeXxzb3VyY2VTZXRzfHRhc2tzfHZhbClcXGIvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MGJbMDFfXSt8MHhbXFxkYS1mX10rKD86XFwuW1xcZGEtZl9wXFwtXSspP3xbXFxkX10rKD86XFwuW1xcZF9dKyk/KD86ZVsrLV0/XFxkKyk/KVtnbGlkZl0/XFxiL2ksXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjpcblx0XHRcdFx0LyhefFteLl0pKD86fnw9PT9+P3xcXD9bLjpdP3xcXCooPzpbLj1dfFxcKj0/KT98XFwuW0AmXXxcXC5cXC48fFxcLlxcLig/IVxcLil8LVstPT5dP3xcXCtbKz1dP3whPT98PCg/Ojw9P3w9Pj8pP3w+KD86Pj4/PT98PSk/fCZbJj1dP3xcXHxbfD1dP3xcXC89P3xcXF49P3wlPT8pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvXFwuK3xbe31bXFxdOygpLDokXS8sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyYWRsZScsICdzdHJpbmcnLCB7XG5cdFx0J3NoZWJhbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIyEuKy8sXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdFx0J2ludGVycG9sYXRpb24tc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjpcblx0XHRcdFx0L1wiXCJcIig/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/XCJcIlwifChbXCIvXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxfFxcJFxcLyg/OlteLyRdfFxcJCg/OlsvJF18KD8hWy8kXSkpfFxcLyg/IVxcJCkpKlxcL1xcJC8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBpbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy8sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2dyYWRsZScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQnc3BvY2stYmxvY2snOiAvXFxiKD86YW5kfGNsZWFudXB8ZXhwZWN0fGdpdmVufHNldHVwfHRoZW58d2hlbnx3aGVyZSk6Lyxcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3JhZGxlJywgJ2Z1bmN0aW9uJywge1xuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLl0pQFxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nLFxuXHRcdH0sXG5cdH0pO1xuXG5cdGludGVycG9sYXRpb24uaW5zaWRlLmV4cHJlc3Npb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmdyYWRsZTtcbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmdyYXBocWwgPSB7XG5cdCdjb21tZW50JzogLyMuKi8sXG5cdCdkZXNjcmlwdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKD86XCJcIlwiKD86W15cIl18KD8hXCJcIlwiKVwiKSpcIlwiXCJ8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKSg/PVxccypbYS16X10pL2ksXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdsYW5ndWFnZS1tYXJrZG93bic6IHtcblx0XHRcdFx0cGF0dGVybjogLyheXCIoPzpcIlwiKT8pKD8hXFwxKVtcXHNcXFNdKyg/PVxcMSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiXCJcIig/OlteXCJdfCg/IVwiXCJcIilcIikqXCJcIlwifFwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxCLXxcXGIpXFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCd2YXJpYWJsZSc6IC9cXCRbYS16X11cXHcqL2ksXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL0BbYS16X11cXHcqL2ksXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2F0dHItbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyooPzpcXCgoPzpbXigpXCJdfFwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIikqXFwpKT86KS9pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYXRvbS1pbnB1dCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW0EtWl1cXHcqSW5wdXRcXGIvLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblx0J3NjYWxhcic6IC9cXGIoPzpCb29sZWFufEZsb2F0fElEfEludHxTdHJpbmcpXFxiLyxcblx0J2NvbnN0YW50JzogL1xcYltBLVpdW0EtWl9cXGRdKlxcYi8sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxpbXBsZW1lbnRzfGludGVyZmFjZXxvbnxzY2FsYXJ8dHlwZXx1bmlvbilcXHMrfCZcXHMqfDpcXHMqfFxcWylbQS1aX11cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdmcmFnbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYmZyYWdtZW50XFxzK3xcXC57M31cXHMqKD8hb25cXGIpKVthLXpBLVpfXVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J2RlZmluaXRpb24tbXV0YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLyhcXGJtdXRhdGlvblxccyspW2EtekEtWl9dXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnZGVmaW5pdGlvbi1xdWVyeSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYnF1ZXJ5XFxzKylbYS16QS1aX11cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmRpcmVjdGl2ZXxlbnVtfGV4dGVuZHxmcmFnbWVudHxpbXBsZW1lbnRzfGlucHV0fGludGVyZmFjZXxtdXRhdGlvbnxvbnxxdWVyeXxyZXBlYXRhYmxlfHNjYWxhcnxzY2hlbWF8c3Vic2NyaXB0aW9ufHR5cGV8dW5pb24pXFxiLyxcblx0J29wZXJhdG9yJzogL1shPXwmXXxcXC57M30vLFxuXHQncHJvcGVydHktcXVlcnknOiAvXFx3Kyg/PVxccypcXCgpLyxcblx0J29iamVjdCc6IC9cXHcrKD89XFxzKlxceykvLFxuXHQncHVuY3R1YXRpb24nOiAvWyEoKXt9XFxbXFxdOj0sXS8sXG5cdCdwcm9wZXJ0eSc6IC9cXHcrL1xufTtcblxuUHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIGFmdGVyVG9rZW5pemVHcmFwaHFsKGVudikge1xuXHRpZiAoZW52Lmxhbmd1YWdlICE9PSAnZ3JhcGhxbCcpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvKipcblx0ICogZ2V0IHRoZSBncmFwaHFsIHRva2VuIHN0cmVhbSB0aGF0IHdlIHdhbnQgdG8gY3VzdG9taXplXG5cdCAqXG5cdCAqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8aW1wb3J0KFwiLi9wcmlzbS1jb3JlXCIpW1wiVG9rZW5cIl0+fSBUb2tlblxuXHQgKiBAdHlwZSB7VG9rZW5bXX1cblx0ICovXG5cdHZhciB2YWxpZFRva2VucyA9IGVudi50b2tlbnMuZmlsdGVyKGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdHJldHVybiB0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnICYmIHRva2VuLnR5cGUgIT09ICdjb21tZW50JyAmJiB0b2tlbi50eXBlICE9PSAnc2NhbGFyJztcblx0fSk7XG5cblx0dmFyIGN1cnJlbnRJbmRleCA9IDA7XG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciB0aGUgdG9rZW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaW5kZXggaGFzIHRoZSBnaXZlbiB0eXBlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge251bWJlcn0gb2Zmc2V0XG5cdCAqIEByZXR1cm5zIHtUb2tlbiB8IHVuZGVmaW5lZH1cblx0ICovXG5cdGZ1bmN0aW9uIGdldFRva2VuKG9mZnNldCkge1xuXHRcdHJldHVybiB2YWxpZFRva2Vuc1tjdXJyZW50SW5kZXggKyBvZmZzZXRdO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgd2hldGhlciB0aGUgdG9rZW4gcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgaW5kZXggaGFzIHRoZSBnaXZlbiB0eXBlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3JlYWRvbmx5IHN0cmluZ1tdfSB0eXBlc1xuXHQgKiBAcGFyYW0ge251bWJlcn0gW29mZnNldD0wXVxuXHQgKiBAcmV0dXJucyB7Ym9vbGVhbn1cblx0ICovXG5cdGZ1bmN0aW9uIGlzVG9rZW5UeXBlKHR5cGVzLCBvZmZzZXQpIHtcblx0XHRvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHR5cGVzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSBnZXRUb2tlbihpICsgb2Zmc2V0KTtcblx0XHRcdGlmICghdG9rZW4gfHwgdG9rZW4udHlwZSAhPT0gdHlwZXNbaV0pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBpbmRleCBvZiB0aGUgY2xvc2luZyBicmFja2V0IHRvIGFuIG9wZW5pbmcgYnJhY2tldC5cblx0ICpcblx0ICogSXQgaXMgYXNzdW1lZCB0aGF0IGB0b2tlbltjdXJyZW50SW5kZXggLSAxXWAgaXMgYW4gb3BlbmluZyBicmFja2V0LlxuXHQgKlxuXHQgKiBJZiBubyBjbG9zaW5nIGJyYWNrZXQgY291bGQgYmUgZm91bmQsIGAtMWAgd2lsbCBiZSByZXR1cm5lZC5cblx0ICpcblx0ICogQHBhcmFtIHtSZWdFeHB9IG9wZW5cblx0ICogQHBhcmFtIHtSZWdFeHB9IGNsb3NlXG5cdCAqIEByZXR1cm5zIHtudW1iZXJ9XG5cdCAqL1xuXHRmdW5jdGlvbiBmaW5kQ2xvc2luZ0JyYWNrZXQob3BlbiwgY2xvc2UpIHtcblx0XHR2YXIgc3RhY2tIZWlnaHQgPSAxO1xuXG5cdFx0Zm9yICh2YXIgaSA9IGN1cnJlbnRJbmRleDsgaSA8IHZhbGlkVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgdG9rZW4gPSB2YWxpZFRva2Vuc1tpXTtcblx0XHRcdHZhciBjb250ZW50ID0gdG9rZW4uY29udGVudDtcblxuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09ICdwdW5jdHVhdGlvbicgJiYgdHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmIChvcGVuLnRlc3QoY29udGVudCkpIHtcblx0XHRcdFx0XHRzdGFja0hlaWdodCsrO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGNsb3NlLnRlc3QoY29udGVudCkpIHtcblx0XHRcdFx0XHRzdGFja0hlaWdodC0tO1xuXG5cdFx0XHRcdFx0aWYgKHN0YWNrSGVpZ2h0ID09PSAwKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gLTE7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhbiBhbGlhcyB0byB0aGUgZ2l2ZW4gdG9rZW4uXG5cdCAqXG5cdCAqIEBwYXJhbSB7VG9rZW59IHRva2VuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBhbGlhc1xuXHQgKiBAcmV0dXJucyB7dm9pZH1cblx0ICovXG5cdGZ1bmN0aW9uIGFkZEFsaWFzKHRva2VuLCBhbGlhcykge1xuXHRcdHZhciBhbGlhc2VzID0gdG9rZW4uYWxpYXM7XG5cdFx0aWYgKCFhbGlhc2VzKSB7XG5cdFx0XHR0b2tlbi5hbGlhcyA9IGFsaWFzZXMgPSBbXTtcblx0XHR9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGFsaWFzZXMpKSB7XG5cdFx0XHR0b2tlbi5hbGlhcyA9IGFsaWFzZXMgPSBbYWxpYXNlc107XG5cdFx0fVxuXHRcdGFsaWFzZXMucHVzaChhbGlhcyk7XG5cdH1cblxuXHRmb3IgKDsgY3VycmVudEluZGV4IDwgdmFsaWRUb2tlbnMubGVuZ3RoOykge1xuXHRcdHZhciBzdGFydFRva2VuID0gdmFsaWRUb2tlbnNbY3VycmVudEluZGV4KytdO1xuXG5cdFx0Ly8gYWRkIHNwZWNpYWwgYWxpYXNlcyBmb3IgbXV0YXRpb24gdG9rZW5zXG5cdFx0aWYgKHN0YXJ0VG9rZW4udHlwZSA9PT0gJ2tleXdvcmQnICYmIHN0YXJ0VG9rZW4uY29udGVudCA9PT0gJ211dGF0aW9uJykge1xuXHRcdFx0Ly8gYW55IGFycmF5IG9mIHRoZSBuYW1lcyBvZiBhbGwgaW5wdXQgdmFyaWFibGVzIChpZiBhbnkpXG5cdFx0XHR2YXIgaW5wdXRWYXJpYWJsZXMgPSBbXTtcblxuXHRcdFx0aWYgKGlzVG9rZW5UeXBlKFsnZGVmaW5pdGlvbi1tdXRhdGlvbicsICdwdW5jdHVhdGlvbiddKSAmJiBnZXRUb2tlbigxKS5jb250ZW50ID09PSAnKCcpIHtcblx0XHRcdFx0Ly8gZGVmaW5pdGlvblxuXG5cdFx0XHRcdGN1cnJlbnRJbmRleCArPSAyOyAvLyBza2lwICdkZWZpbml0aW9uLW11dGF0aW9uJyBhbmQgJ3B1bmN0dWF0aW9uJ1xuXG5cdFx0XHRcdHZhciBkZWZpbml0aW9uRW5kID0gZmluZENsb3NpbmdCcmFja2V0KC9eXFwoJC8sIC9eXFwpJC8pO1xuXHRcdFx0XHRpZiAoZGVmaW5pdGlvbkVuZCA9PT0gLTEpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIGZpbmQgYWxsIGlucHV0IHZhcmlhYmxlc1xuXHRcdFx0XHRmb3IgKDsgY3VycmVudEluZGV4IDwgZGVmaW5pdGlvbkVuZDsgY3VycmVudEluZGV4KyspIHtcblx0XHRcdFx0XHR2YXIgdCA9IGdldFRva2VuKDApO1xuXHRcdFx0XHRcdGlmICh0LnR5cGUgPT09ICd2YXJpYWJsZScpIHtcblx0XHRcdFx0XHRcdGFkZEFsaWFzKHQsICd2YXJpYWJsZS1pbnB1dCcpO1xuXHRcdFx0XHRcdFx0aW5wdXRWYXJpYWJsZXMucHVzaCh0LmNvbnRlbnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGN1cnJlbnRJbmRleCA9IGRlZmluaXRpb25FbmQgKyAxO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaXNUb2tlblR5cGUoWydwdW5jdHVhdGlvbicsICdwcm9wZXJ0eS1xdWVyeSddKSAmJiBnZXRUb2tlbigwKS5jb250ZW50ID09PSAneycpIHtcblx0XHRcdFx0Y3VycmVudEluZGV4Kys7IC8vIHNraXAgb3BlbmluZyBicmFja2V0XG5cblx0XHRcdFx0YWRkQWxpYXMoZ2V0VG9rZW4oMCksICdwcm9wZXJ0eS1tdXRhdGlvbicpO1xuXG5cdFx0XHRcdGlmIChpbnB1dFZhcmlhYmxlcy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0dmFyIG11dGF0aW9uRW5kID0gZmluZENsb3NpbmdCcmFja2V0KC9eXFx7JC8sIC9eXFx9JC8pO1xuXHRcdFx0XHRcdGlmIChtdXRhdGlvbkVuZCA9PT0gLTEpIHtcblx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIGdpdmUgcmVmZXJlbmNlcyB0byBpbnB1dCB2YXJpYWJsZXMgYSBzcGVjaWFsIGFsaWFzXG5cdFx0XHRcdFx0Zm9yICh2YXIgaSA9IGN1cnJlbnRJbmRleDsgaSA8IG11dGF0aW9uRW5kOyBpKyspIHtcblx0XHRcdFx0XHRcdHZhciB2YXJUb2tlbiA9IHZhbGlkVG9rZW5zW2ldO1xuXHRcdFx0XHRcdFx0aWYgKHZhclRva2VuLnR5cGUgPT09ICd2YXJpYWJsZScgJiYgaW5wdXRWYXJpYWJsZXMuaW5kZXhPZih2YXJUb2tlbi5jb250ZW50KSA+PSAwKSB7XG5cdFx0XHRcdFx0XHRcdGFkZEFsaWFzKHZhclRva2VuLCAndmFyaWFibGUtaW5wdXQnKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGludGVycG9sYXRpb24gPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFxcXCRdKSg/OlxcXFx7Mn0pKilcXCQoPzpcXHcrfFxce1tee31dKlxcfSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXCRcXHs/fFxcfSQvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fSxcblx0XHRcdCdleHByZXNzaW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuZ3Jvb3Z5ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdC8vIGh0dHBzOi8vZ3Jvb3Z5LWxhbmcub3JnL3N5bnRheC5odG1sI19kb2xsYXJfc2xhc2h5X3N0cmluZ1xuXHRcdFx0cGF0dGVybjogLycnJyg/OlteXFxcXF18XFxcXFtcXHNcXFNdKSo/JycnfCcoPzpcXFxcLnxbXlxcXFwnXFxyXFxuXSkqJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGFzfGFzc2VydHxib29sZWFufGJyZWFrfGJ5dGV8Y2FzZXxjYXRjaHxjaGFyfGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlZnxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZsb2F0fGZvcnxnb3RvfGlmfGltcGxlbWVudHN8aW1wb3J0fGlufGluc3RhbmNlb2Z8aW50fGludGVyZmFjZXxsb25nfG5hdGl2ZXxuZXd8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmV0dXJufHNob3J0fHN0YXRpY3xzdHJpY3RmcHxzdXBlcnxzd2l0Y2h8c3luY2hyb25pemVkfHRoaXN8dGhyb3d8dGhyb3dzfHRyYWl0fHRyYW5zaWVudHx0cnl8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MGJbMDFfXSt8MHhbXFxkYS1mX10rKD86XFwuW1xcZGEtZl9wXFwtXSspP3xbXFxkX10rKD86XFwuW1xcZF9dKyk/KD86ZVsrLV0/XFxkKyk/KVtnbGlkZl0/XFxiL2ksXG5cdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLl0pKD86fnw9PT9+P3xcXD9bLjpdP3xcXCooPzpbLj1dfFxcKj0/KT98XFwuW0AmXXxcXC5cXC48fFxcLlxcLig/IVxcLil8LVstPT5dP3xcXCtbKz1dP3whPT98PCg/Ojw9P3w9Pj8pP3w+KD86Pj4/PT98PSk/fCZbJj1dP3xcXHxbfD1dP3xcXC89P3xcXF49P3wlPT8pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9cXC4rfFt7fVtcXF07KCksOiRdL1xuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncm9vdnknLCAnc3RyaW5nJywge1xuXHRcdCdzaGViYW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyMhLisvLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ludGVycG9sYXRpb24tc3RyaW5nJzoge1xuXHRcdFx0Ly8gVE9ETzogU2xhc2ggc3RyaW5ncyAoZS5nLiAvZm9vLykgY2FuIGNvbnRhaW4gbGluZSBicmVha3MgYnV0IHRoaXMgd2lsbCBjYXVzZSBhIGxvdCBvZiB0cm91YmxlIHdpdGhcblx0XHRcdC8vIHNpbXBsZSBkaXZpc2lvbiAoc2VlIEpTIHJlZ2V4KSwgc28gZmluZCBhIGZpeCBtYXliZT9cblx0XHRcdHBhdHRlcm46IC9cIlwiXCIoPzpbXlxcXFxdfFxcXFxbXFxzXFxTXSkqP1wiXCJcInwoW1wiL10pKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMXxcXCRcXC8oPzpbXi8kXXxcXCQoPzpbLyRdfCg/IVsvJF0pKXxcXC8oPyFcXCQpKSpcXC9cXCQvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW50ZXJwb2xhdGlvbixcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdncm9vdnknLCAncHVuY3R1YXRpb24nLCB7XG5cdFx0J3Nwb2NrLWJsb2NrJzogL1xcYig/OmFuZHxjbGVhbnVwfGV4cGVjdHxnaXZlbnxzZXR1cHx0aGVufHdoZW58d2hlcmUpOi9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnZ3Jvb3Z5JywgJ2Z1bmN0aW9uJywge1xuXHRcdCdhbm5vdGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteLl0pQFxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRpbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5ncm9vdnk7XG5cbn0oUHJpc20pKTtcblxuLyogVE9ET1xuXHRIYW5kbGUgbXVsdGlsaW5lIGNvZGUgYWZ0ZXIgdGFnXG5cdCAgICAlZm9vPSBzb21lIHxcblx0XHRcdG11bHRpbGluZSB8XG5cdFx0XHRjb2RlIHxcbiovXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaGFtbCA9IHtcblx0XHQvLyBNdWx0aWxpbmUgc3R1ZmYgc2hvdWxkIGFwcGVhciBiZWZvcmUgdGhlIHJlc3RcblxuXHRcdCdtdWx0aWxpbmUtY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccikoW1xcdCBdKikpKD86XFwvfC0jKS4qKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLispKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cblx0XHQnbXVsdGlsaW5lLWNvZGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccikoW1xcdCBdKikoPzpbfi1dfFsmIV0/PSkpLiosW1xcdCBdKig/Oig/Olxccj9cXG58XFxyKVxcMltcXHQgXS4qLFtcXHQgXSopKig/Oig/Olxccj9cXG58XFxyKVxcMltcXHQgXS4rKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccikoW1xcdCBdKikoPzpbfi1dfFsmIV0/PSkpLipcXHxbXFx0IF0qKD86KD86XFxyP1xcbnxcXHIpXFwyW1xcdCBdLipcXHxbXFx0IF0qKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5ydWJ5XG5cdFx0XHR9XG5cdFx0XSxcblxuXHRcdC8vIFNlZSBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGZvciBrbm93biBmaWx0ZXJzXG5cdFx0J2ZpbHRlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccikoW1xcdCBdKikpOltcXHctXSsoPzooPzpcXHI/XFxufFxccikoPzpcXDJbXFx0IF0uK3xcXHMqPyg/PVxccj9cXG58XFxyKSkpKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmaWx0ZXItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbWFya3VwJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSopPC4rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrdXBcblx0XHR9LFxuXHRcdCdkb2N0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSopISEhKD86IC4rKT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3RhZyc6IHtcblx0XHRcdC8vIEFsbG93cyBmb3Igb25lIG5lc3RlZCBncm91cCBvZiBicmFjZXNcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHI/XFxufFxccilbXFx0IF0qKVslLiNdW1xcd1xcLSMuXSpbXFx3XFwtXSg/OlxcKFteKV0rXFwpfFxceyg/Olxce1tefV0rXFx9fFtee31dKStcXH18XFxbW15cXF1dK1xcXSkqW1xcLzw+XSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXR0cmlidXRlcyc6IFtcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHQvLyBMb29rYmVoaW5kIHRyaWVzIHRvIHByZXZlbnQgaW50ZXJwb2xhdGlvbnMgZnJvbSBicmVha2luZyBpdCBhbGxcblx0XHRcdFx0XHRcdC8vIEFsbG93cyBmb3Igb25lIG5lc3RlZCBncm91cCBvZiBicmFjZXNcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXiNdKVxceyg/Olxce1tefV0rXFx9fFtee31dKStcXH0vLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXChbXildK1xcKS8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg9XFxzKikoPzpcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCJ8W14pXFxzXSspLyxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdhdHRyLW5hbWUnOiAvW1xcdzotXSsoPz1cXHMqIT89fFxccypbLCldKS8sXG5cdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPSgpLF0vXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxbW15cXF1dK1xcXS8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5ydWJ5XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+XS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSooPzpbfi1dfFsmIV0/PSkpLisvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHR9LFxuXHRcdC8vIEludGVycG9sYXRpb25zIGluIHBsYWluIHRleHRcblx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8jXFx7W159XStcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14jXFx7fFxcfSQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdydWJ5Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnJ1Ynlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxccj9cXG58XFxyKVtcXHQgXSopW349XFwtJiFdKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBmaWx0ZXJfcGF0dGVybiA9ICcoKD86XnxcXFxccj9cXFxcbnxcXFxccikoW1xcXFx0IF0qKSk6e3tmaWx0ZXJfbmFtZX19KD86KD86XFxcXHI/XFxcXG58XFxcXHIpKD86XFxcXDJbXFxcXHQgXS4rfFxcXFxzKj8oPz1cXFxccj9cXFxcbnxcXFxccikpKSsnO1xuXG5cdC8vIE5vbiBleGhhdXN0aXZlIGxpc3Qgb2YgYXZhaWxhYmxlIGZpbHRlcnMgYW5kIGFzc29jaWF0ZWQgbGFuZ3VhZ2VzXG5cdHZhciBmaWx0ZXJzID0gW1xuXHRcdCdjc3MnLFxuXHRcdHsgZmlsdGVyOiAnY29mZmVlJywgbGFuZ3VhZ2U6ICdjb2ZmZWVzY3JpcHQnIH0sXG5cdFx0J2VyYicsXG5cdFx0J2phdmFzY3JpcHQnLFxuXHRcdCdsZXNzJyxcblx0XHQnbWFya2Rvd24nLFxuXHRcdCdydWJ5Jyxcblx0XHQnc2NzcycsXG5cdFx0J3RleHRpbGUnXG5cdF07XG5cdHZhciBhbGxfZmlsdGVycyA9IHt9O1xuXHRmb3IgKHZhciBpID0gMCwgbCA9IGZpbHRlcnMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG5cdFx0dmFyIGZpbHRlciA9IGZpbHRlcnNbaV07XG5cdFx0ZmlsdGVyID0gdHlwZW9mIGZpbHRlciA9PT0gJ3N0cmluZycgPyB7IGZpbHRlcjogZmlsdGVyLCBsYW5ndWFnZTogZmlsdGVyIH0gOiBmaWx0ZXI7XG5cdFx0aWYgKFByaXNtLmxhbmd1YWdlc1tmaWx0ZXIubGFuZ3VhZ2VdKSB7XG5cdFx0XHRhbGxfZmlsdGVyc1snZmlsdGVyLScgKyBmaWx0ZXIuZmlsdGVyXSA9IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKGZpbHRlcl9wYXR0ZXJuLnJlcGxhY2UoJ3t7ZmlsdGVyX25hbWV9fScsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbHRlci5maWx0ZXI7IH0pKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ZpbHRlci1uYW1lJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL146W1xcdy1dKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCd0ZXh0Jzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogW2ZpbHRlci5sYW5ndWFnZSwgJ2xhbmd1YWdlLScgKyBmaWx0ZXIubGFuZ3VhZ2VdLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbZmlsdGVyLmxhbmd1YWdlXVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdoYW1sJywgJ2ZpbHRlcicsIGFsbF9maWx0ZXJzKTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmhhbmRsZWJhcnMgPSB7XG5cdFx0J2NvbW1lbnQnOiAvXFx7XFx7IVtcXHNcXFNdKj9cXH1cXH0vLFxuXHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxce1xce1xcez98XFx9XFx9XFx9PyQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiAvKFtcIiddKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV1bKy1dP1xcZCspPy8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFxccyooPzp+XFxzKik/KVsjXFwvXVxcUys/KD89XFxzKig/On5cXHMqKT8kfFxccykvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdicmFja2V0cyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXFtbXlxcXV0rXFxdLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRwdW5jdHVhdGlvbjogL1xcW3xcXF0vLFxuXHRcdFx0XHR2YXJpYWJsZTogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bIVwiIyUmJzooKSorLC5cXC87PD0+QFxcW1xcXFxcXF1eYHt8fX5dLyxcblx0XHQndmFyaWFibGUnOiAvW14hXCIjJSYnKCkqKyxcXC87PD0+QFxcW1xcXFxcXF1eYHt8fX5cXHNdKy9cblx0fTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgaGFuZGxlYmFyc1BhdHRlcm4gPSAvXFx7XFx7XFx7W1xcc1xcU10rP1xcfVxcfVxcfXxcXHtcXHtbXFxzXFxTXSs/XFx9XFx9L2c7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2hhbmRsZWJhcnMnLCBoYW5kbGViYXJzUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2hhbmRsZWJhcnMnKTtcblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmhicyA9IFByaXNtLmxhbmd1YWdlcy5oYW5kbGViYXJzO1xuXHRQcmlzbS5sYW5ndWFnZXMubXVzdGFjaGUgPSBQcmlzbS5sYW5ndWFnZXMuaGFuZGxlYmFycztcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuaGFza2VsbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteLSEjJCUqKz0/JkB8fi46PD5eXFxcXFxcL10pKD86LS0oPzooPz0uKVteLSEjJCUqKz0/JkB8fi46PD5eXFxcXFxcL10uKnwkKXxcXHstW1xcc1xcU10qPy1cXH0pL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteXFxcXCddfFxcXFwoPzpbYWJmbnJ0dlxcXFxcIicmXXxcXF5bQS1aQFtcXF1eX118QUNLfEJFTHxCU3xDQU58Q1J8REMxfERDMnxEQzN8REM0fERFTHxETEV8RU18RU5RfEVPVHxFU0N8RVRCfEVUWHxGRnxGU3xHU3xIVHxMRnxOQUt8TlVMfFJTfFNJfFNPfFNPSHxTUHxTVFh8U1VCfFNZTnxVU3xWVHxcXGQrfG9bMC03XSt8eFswLTlhLWZBLUZdKykpJy8sXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXFxcXCJdfFxcXFwoPzpcXFN8XFxzK1xcXFwpKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmNhc2V8Y2xhc3N8ZGF0YXxkZXJpdmluZ3xkb3xlbHNlfGlmfGlufGluZml4bHxpbmZpeHJ8aW5zdGFuY2V8bGV0fG1vZHVsZXxuZXd0eXBlfG9mfHByaW1pdGl2ZXx0aGVufHR5cGV8d2hlcmUpXFxiLyxcblx0J2ltcG9ydC1zdGF0ZW1lbnQnOiB7XG5cdFx0Ly8gVGhlIGltcG9ydGVkIG9yIGhpZGRlbiBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgaW1wb3J0XG5cdFx0Ly8gc3RhdGVtZW50LiBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBoaWdobGlnaHQgdGhvc2UgZXhhY3RseSBsaWtlXG5cdFx0Ly8gd2UgZG8gZm9yIHRoZSBuYW1lcyBpbiB0aGUgcHJvZ3JhbS5cblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKWltcG9ydFxccysoPzpxdWFsaWZpZWRcXHMrKT8oPzpbQS1aXVtcXHcnXSopKD86XFwuW0EtWl1bXFx3J10qKSooPzpcXHMrYXNcXHMrKD86W0EtWl1bXFx3J10qKSg/OlxcLltBLVpdW1xcdyddKikqKT8oPzpcXHMraGlkaW5nXFxiKT8vbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8aGlkaW5nfGltcG9ydHxxdWFsaWZpZWQpXFxiLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXHQvLyBUaGVzZSBhcmUgYnVpbHRpbiB2YXJpYWJsZXMgb25seS4gQ29uc3RydWN0b3JzIGFyZSBoaWdobGlnaHRlZCBsYXRlciBhcyBhIGNvbnN0YW50LlxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhY29zaHxhbGx8YW5kfGFueXxhcHBlbmRGaWxlfGFwcHJveFJhdGlvbmFsfGFzVHlwZU9mfGFzaW58YXNpbmh8YXRhbnxhdGFuMnxhdGFuaHxiYXNpY0lPUnVufGJyZWFrfGNhdGNofGNlaWxpbmd8Y2hyfGNvbXBhcmV8Y29uY2F0fGNvbmNhdE1hcHxjb25zdHxjb3N8Y29zaHxjdXJyeXxjeWNsZXxkZWNvZGVGbG9hdHxkZW5vbWluYXRvcnxkaWdpdFRvSW50fGRpdnxkaXZNb2R8ZHJvcHxkcm9wV2hpbGV8ZWl0aGVyfGVsZW18ZW5jb2RlRmxvYXR8ZW51bUZyb218ZW51bUZyb21UaGVufGVudW1Gcm9tVGhlblRvfGVudW1Gcm9tVG98ZXJyb3J8ZXZlbnxleHB8ZXhwb25lbnR8ZmFpbHxmaWx0ZXJ8ZmxpcHxmbG9hdERpZ2l0c3xmbG9hdFJhZGl4fGZsb2F0UmFuZ2V8Zmxvb3J8Zm1hcHxmb2xkbHxmb2xkbDF8Zm9sZHJ8Zm9sZHIxfGZyb21Eb3VibGV8ZnJvbUVudW18ZnJvbUludHxmcm9tSW50ZWdlcnxmcm9tSW50ZWdyYWx8ZnJvbVJhdGlvbmFsfGZzdHxnY2R8Z2V0Q2hhcnxnZXRDb250ZW50c3xnZXRMaW5lfGdyb3VwfGhlYWR8aWR8aW5SYW5nZXxpbmRleHxpbml0fGludFRvRGlnaXR8aW50ZXJhY3R8aW9FcnJvcnxpc0FscGhhfGlzQWxwaGFOdW18aXNBc2NpaXxpc0NvbnRyb2x8aXNEZW5vcm1hbGl6ZWR8aXNEaWdpdHxpc0hleERpZ2l0fGlzSUVFRXxpc0luZmluaXRlfGlzTG93ZXJ8aXNOYU58aXNOZWdhdGl2ZVplcm98aXNPY3REaWdpdHxpc1ByaW50fGlzU3BhY2V8aXNVcHBlcnxpdGVyYXRlfGxhc3R8bGNtfGxlbmd0aHxsZXh8bGV4RGlnaXRzfGxleExpdENoYXJ8bGluZXN8bG9nfGxvZ0Jhc2V8bG9va3VwfG1hcHxtYXBNfG1hcE1ffG1heHxtYXhCb3VuZHxtYXhpbXVtfG1heWJlfG1pbnxtaW5Cb3VuZHxtaW5pbXVtfG1vZHxuZWdhdGV8bm90fG5vdEVsZW18bnVsbHxudW1lcmF0b3J8b2RkfG9yfG9yZHxvdGhlcndpc2V8cGFja3xwaXxwcmVkfHByaW1FeGl0V2l0aHxwcmludHxwcm9kdWN0fHByb3BlckZyYWN0aW9ufHB1dENoYXJ8cHV0U3RyfHB1dFN0ckxufHF1b3R8cXVvdFJlbXxyYW5nZXxyYW5nZVNpemV8cmVhZHxyZWFkRGVjfHJlYWRGaWxlfHJlYWRGbG9hdHxyZWFkSGV4fHJlYWRJT3xyZWFkSW50fHJlYWRMaXN0fHJlYWRMaXRDaGFyfHJlYWRMbnxyZWFkT2N0fHJlYWRQYXJlbnxyZWFkU2lnbmVkfHJlYWRzfHJlYWRzUHJlY3xyZWFsVG9GcmFjfHJlY2lwfHJlbXxyZXBlYXR8cmVwbGljYXRlfHJldHVybnxyZXZlcnNlfHJvdW5kfHNjYWxlRmxvYXR8c2Nhbmx8c2NhbmwxfHNjYW5yfHNjYW5yMXxzZXF8c2VxdWVuY2V8c2VxdWVuY2VffHNob3d8c2hvd0NoYXJ8c2hvd0ludHxzaG93TGlzdHxzaG93TGl0Q2hhcnxzaG93UGFyZW58c2hvd1NpZ25lZHxzaG93U3RyaW5nfHNob3dzfHNob3dzUHJlY3xzaWduaWZpY2FuZHxzaWdudW18c2lufHNpbmh8c25kfHNvcnR8c3BhbnxzcGxpdEF0fHNxcnR8c3VidHJhY3R8c3VjY3xzdW18dGFpbHx0YWtlfHRha2VXaGlsZXx0YW58dGFuaHx0aHJlYWRUb0lPUmVzdWx0fHRvRW51bXx0b0ludHx0b0ludGVnZXJ8dG9Mb3dlcnx0b1JhdGlvbmFsfHRvVXBwZXJ8dHJ1bmNhdGV8dW5jdXJyeXx1bmRlZmluZWR8dW5saW5lc3x1bnRpbHx1bndvcmRzfHVuemlwfHVuemlwM3x1c2VyRXJyb3J8d29yZHN8d3JpdGVGaWxlfHppcHx6aXAzfHppcFdpdGh8emlwV2l0aDMpXFxiLyxcblx0Ly8gZGVjaW1hbCBpbnRlZ2VycyBhbmQgZmxvYXRpbmcgcG9pbnQgbnVtYmVycyB8IG9jdGFsIGludGVnZXJzIHwgaGV4YWRlY2ltYWwgaW50ZWdlcnNcblx0J251bWJlcic6IC9cXGIoPzpcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/fDBvWzAtN10rfDB4WzAtOWEtZl0rKVxcYi9pLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0e1xuXHRcdFx0Ly8gaW5maXggb3BlcmF0b3Jcblx0XHRcdHBhdHRlcm46IC9gKD86W0EtWl1bXFx3J10qXFwuKSpbX2Etel1bXFx3J10qYC8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGZ1bmN0aW9uIGNvbXBvc2l0aW9uXG5cdFx0XHRwYXR0ZXJuOiAvKFxccylcXC4oPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIE1vc3Qgb2YgdGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBvZiB0aGUgbWVhbmluZyBvZiBhIHNpbmdsZSAnLicuXG5cdFx0Ly8gSWYgaXQgc3RhbmRzIGFsb25lIGZyZWVseSwgaXQgaXMgdGhlIGZ1bmN0aW9uIGNvbXBvc2l0aW9uLlxuXHRcdC8vIEl0IG1heSBhbHNvIGJlIGEgc2VwYXJhdG9yIGJldHdlZW4gYSBtb2R1bGUgbmFtZSBhbmQgYW4gaWRlbnRpZmllciA9PiBub1xuXHRcdC8vIG9wZXJhdG9yLiBJZiBpdCBjb21lcyB0b2dldGhlciB3aXRoIG90aGVyIHNwZWNpYWwgY2hhcmFjdGVycyBpdCBpcyBhblxuXHRcdC8vIG9wZXJhdG9yIHRvby5cblx0XHQvL1xuXHRcdC8vIFRoaXMgcmVnZXggbWVhbnM6IC9bLSEjJCUqKz0/JkB8fi46PD5eXFxcXFxcL10rLyB3aXRob3V0IC9cXC4vLlxuXHRcdC9bLSEjJCUqKz0/JkB8fjo8Pl5cXFxcXFwvXVstISMkJSorPT8mQHx+Ljo8Pl5cXFxcXFwvXSp8XFwuWy0hIyQlKis9PyZAfH4uOjw+XlxcXFxcXC9dKy8sXG5cdF0sXG5cdC8vIEluIEhhc2tlbGwsIG5lYXJseSBldmVyeXRoaW5nIGlzIGEgdmFyaWFibGUsIGRvIG5vdCBoaWdobGlnaHQgdGhlc2UuXG5cdCdodmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OltBLVpdW1xcdyddKlxcLikqW19hLXpdW1xcdyddKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J2NvbnN0YW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpbQS1aXVtcXHcnXSpcXC4pKltBLVpdW1xcdyddKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmhzID0gUHJpc20ubGFuZ3VhZ2VzLmhhc2tlbGw7XG5cblByaXNtLmxhbmd1YWdlcy5oYXhlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0Ly8gU3RyaW5ncyBjYW4gYmUgbXVsdGktbGluZVxuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXXxcXFxcW1xcc1xcU10pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzphYnN0cmFjdHxjbGFzc3xlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xpbnRlcmZhY2V8bmV3fHR5cGVkZWYpXFxzKylbQS1aX11cXHcqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHQvLyBiYXNlZCBvbiBuYW1pbmcgY29udmVudGlvblxuXHRcdC9cXGJbQS1aXVxcdyovXG5cdF0sXG5cdC8vIFRoZSBmaW5hbCBsb29rLWFoZWFkIHByZXZlbnRzIGhpZ2hsaWdodGluZyBvZiBrZXl3b3JkcyBpZiBleHByZXNzaW9ucyBzdWNoIGFzIFwiaGF4ZS5tYWNyby5FeHByXCJcblx0J2tleXdvcmQnOiAvXFxidGhpc1xcYnxcXGIoPzphYnN0cmFjdHxhc3xicmVha3xjYXNlfGNhc3R8Y2F0Y2h8Y2xhc3N8Y29udGludWV8ZGVmYXVsdHxkb3xkeW5hbWljfGVsc2V8ZW51bXxleHRlbmRzfGV4dGVybnxmaW5hbHxmb3J8ZnJvbXxmdW5jdGlvbnxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbmxpbmV8aW50ZXJmYWNlfG1hY3JvfG5ld3xudWxsfG9wZXJhdG9yfG92ZXJsb2FkfG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwdWJsaWN8cmV0dXJufHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhyb3d8dG98dHJ5fHR5cGVkZWZ8dW50eXBlZHx1c2luZ3x2YXJ8d2hpbGUpKD8hXFwuKVxcYi8sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PVxccyooPzo8W148Pl0qPlxccyopP1xcKCkvaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J29wZXJhdG9yJzogL1xcLnszfXxcXCtcXCt8LS18JiZ8XFx8XFx8fC0+fD0+fCg/Ojw8P3w+ezEsM318Wy0rKi8lIT0mfF5dKT0/fFs/On5dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2hheGUnLCAnc3RyaW5nJywge1xuXHQnc3RyaW5nLWludGVycG9sYXRpb24nOiB7XG5cdFx0cGF0dGVybjogLycoPzpbXidcXFxcXXxcXFxcW1xcc1xcU10pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXCQoPzpcXHcrfFxce1tee31dK1xcfSkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7P3xcXH0kLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuaGF4ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdoYXhlJywgJ2NsYXNzLW5hbWUnLCB7XG5cdCdyZWdleCc6IHtcblx0XHRwYXR0ZXJuOiAvflxcLyg/OlteXFwvXFxcXFxcclxcbl18XFxcXC4pK1xcL1thLXpdKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3JlZ2V4LWZsYWdzJzogL1xcYlthLXpdKyQvLFxuXHRcdFx0J3JlZ2V4LXNvdXJjZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oflxcLylbXFxzXFxTXSsoPz1cXC8kKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcmVnZXgnLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5yZWdleFxuXHRcdFx0fSxcblx0XHRcdCdyZWdleC1kZWxpbWl0ZXInOiAvXn5cXC98XFwvJC8sXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaGF4ZScsICdrZXl3b3JkJywge1xuXHQncHJlcHJvY2Vzc29yJzoge1xuXHRcdHBhdHRlcm46IC8jKD86ZWxzZXxlbHNlaWZ8ZW5kfGlmKVxcYi4qLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnbWV0YWRhdGEnOiB7XG5cdFx0cGF0dGVybjogL0A6P1tcXHcuXSsvLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9LFxuXHQncmVpZmljYXRpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/Olxcdyt8KD89XFx7KSkvLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmhjbCA9IHtcblx0J2NvbW1lbnQnOiAvKD86XFwvXFwvfCMpLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdCdoZXJlZG9jJzoge1xuXHRcdHBhdHRlcm46IC88PC0/KFxcdytcXGIpW1xcc1xcU10qP15bIFxcdF0qXFwxL20sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKD86ZGF0YXxyZXNvdXJjZSlcXHMrKD86XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcIikoPz1cXHMrXCJbXFx3LV0rXCJcXHMrXFx7KS9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0eXBlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8ocmVzb3VyY2V8ZGF0YXxcXHMrKSg/OlwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpL2ksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKD86YmFja2VuZHxtb2R1bGV8b3V0cHV0fHByb3ZpZGVyfHByb3Zpc2lvbmVyfHZhcmlhYmxlKVxccysoPzpbXFx3LV0rfFwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpXFxzKyg/PVxceykvaSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndHlwZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKGJhY2tlbmR8bW9kdWxlfG91dHB1dHxwcm92aWRlcnxwcm92aXNpb25lcnx2YXJpYWJsZSlcXHMrKD86W1xcdy1dK3xcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiKVxccysvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdC9bXFx3LV0rKD89XFxzK1xceykvXG5cdF0sXG5cdCdwcm9wZXJ0eSc6IFtcblx0XHQvWy1cXHdcXC5dKyg/PVxccyo9KD8hPSkpLyxcblx0XHQvXCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKStcIig/PVxccypbOj1dKS8sXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXFxcJFwiXXxcXFxcW1xcc1xcU118XFwkKD86KD89XCIpfFxcJCsoPyFcXCQpfFteXCIke10pfFxcJFxceyg/Oltee31cIl18XCIoPzpbXlxcXFxcIl18XFxcXFtcXHNcXFNdKSpcIikqXFx9KSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXiRdKVxcJFxceyg/Oltee31cIl18XCIoPzpbXlxcXFxcIl18XFxcXFtcXHNcXFNdKSpcIikqXFx9Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3R5cGUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNvdW50fGRhdGF8bG9jYWx8bW9kdWxlfHBhdGh8c2VsZnx0ZXJyYWZvcm18dmFyKVxcYlxcLilbXFx3XFwqXSsvaSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86Y291bnR8ZGF0YXxsb2NhbHxtb2R1bGV8cGF0aHxzZWxmfHRlcnJhZm9ybXx2YXIpXFxiL2ksXG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogL1xcdysoPz1cXCgpLyxcblx0XHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIvLFxuXHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J251bWJlcic6IC9cXGIweFtcXGRhLWZdK1xcYnxcXGJcXGQrKD86XFwuXFxkKik/KD86ZVsrLV0/XFxkKyk/L2ksXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1shXFwkIyUmJygpKissLlxcLzs8PT5AXFxbXFxcXFxcXV5ge3x9fj86XS8sXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0fVxuXHR9LFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifFxcYlxcZCsoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT8vaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1s9XFxbXFxde31dLyxcbn07XG5cblByaXNtLmxhbmd1YWdlcy5obHNsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblxuXHQvLyBSZWdhcmRpbmcga2V5d29yZHMgYW5kIGNsYXNzIG5hbWVzOlxuXHQvLyBUaGUgbGlzdCBvZiBhbGwga2V5d29yZHMgd2FzIHNwbGl0IGludG8gJ2tleXdvcmQnIGFuZCAnY2xhc3MtbmFtZScgdG9rZW5zIGJhc2VkIG9uIHdoZXRoZXIgdGhleSBhcmUgY2FwaXRhbGl6ZWQuXG5cdC8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL3dpbmRvd3Mvd2luMzIvZGlyZWN0M2RobHNsL2R4LWdyYXBoaWNzLWhsc2wtYXBwZW5kaXgta2V5d29yZHNcblx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvd2luZG93cy93aW4zMi9kaXJlY3QzZGhsc2wvZHgtZ3JhcGhpY3MtaGxzbC1hcHBlbmRpeC1yZXNlcnZlZC13b3Jkc1xuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHRQcmlzbS5sYW5ndWFnZXMuY1snY2xhc3MtbmFtZSddLFxuXHRcdC9cXGIoPzpBcHBlbmRTdHJ1Y3R1cmVkQnVmZmVyfEJsZW5kU3RhdGV8QnVmZmVyfEJ5dGVBZGRyZXNzQnVmZmVyfENvbXBpbGVTaGFkZXJ8Q29tcHV0ZVNoYWRlcnxDb25zdW1lU3RydWN0dXJlZEJ1ZmZlcnxEZXB0aFN0ZW5jaWxTdGF0ZXxEZXB0aFN0ZW5jaWxWaWV3fERvbWFpblNoYWRlcnxHZW9tZXRyeVNoYWRlcnxIdWxsc2hhZGVyfElucHV0UGF0Y2h8TGluZVN0cmVhbXxPdXRwdXRQYXRjaHxQaXhlbFNoYWRlcnxQb2ludFN0cmVhbXxSV0J1ZmZlcnxSV0J5dGVBZGRyZXNzQnVmZmVyfFJXU3RydWN0dXJlZEJ1ZmZlcnxSV1RleHR1cmUoPzoxRHwxREFycmF5fDJEfDJEQXJyYXl8M0QpfFJhc3Rlcml6ZXJTdGF0ZXxSZW5kZXJUYXJnZXRWaWV3fFNhbXBsZXJDb21wYXJpc29uU3RhdGV8U2FtcGxlclN0YXRlfFN0cnVjdHVyZWRCdWZmZXJ8VGV4dHVyZSg/OjFEfDFEQXJyYXl8MkR8MkRBcnJheXwyRE1TfDJETVNBcnJheXwzRHxDdWJlfEN1YmVBcnJheSl8VHJpYW5nbGVTdHJlYW18VmVydGV4U2hhZGVyKVxcYi9cblx0XSxcblx0J2tleXdvcmQnOiBbXG5cdFx0Ly8gSExTTCBrZXl3b3JkXG5cdFx0L1xcYig/OmFzbXxhc21fZnJhZ21lbnR8YXV0b3xicmVha3xjYXNlfGNhdGNofGNidWZmZXJ8Y2VudHJvaWR8Y2hhcnxjbGFzc3xjb2x1bW5fbWFqb3J8Y29tcGlsZXxjb21waWxlX2ZyYWdtZW50fGNvbnN0fGNvbnN0X2Nhc3R8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZGlzY2FyZHxkb3xkeW5hbWljX2Nhc3R8ZWxzZXxlbnVtfGV4cGxpY2l0fGV4cG9ydHxleHRlcm58Zm9yfGZyaWVuZHxmeGdyb3VwfGdvdG98Z3JvdXBzaGFyZWR8aWZ8aW58aW5saW5lfGlub3V0fGludGVyZmFjZXxsaW5lfGxpbmVhZGp8bGluZWFyfGxvbmd8bWF0cml4fG11dGFibGV8bmFtZXNwYWNlfG5ld3xub2ludGVycG9sYXRpb258bm9wZXJzcGVjdGl2ZXxvcGVyYXRvcnxvdXR8cGFja29mZnNldHxwYXNzfHBpeGVsZnJhZ21lbnR8cG9pbnR8cHJlY2lzZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVnaXN0ZXJ8cmVpbnRlcnByZXRfY2FzdHxyZXR1cm58cm93X21ham9yfHNhbXBsZXxzYW1wbGVyfHNoYXJlZHxzaG9ydHxzaWduZWR8c2l6ZW9mfHNub3JtfHN0YXRlYmxvY2t8c3RhdGVibG9ja19zdGF0ZXxzdGF0aWN8c3RhdGljX2Nhc3R8c3RyaW5nfHN0cnVjdHxzd2l0Y2h8dGJ1ZmZlcnx0ZWNobmlxdWV8dGVjaG5pcXVlMTB8dGVjaG5pcXVlMTF8dGVtcGxhdGV8dGV4dHVyZXx0aGlzfHRocm93fHRyaWFuZ2xlfHRyaWFuZ2xlYWRqfHRyeXx0eXBlZGVmfHR5cGVuYW1lfHVuaWZvcm18dW5pb258dW5vcm18dW5zaWduZWR8dXNpbmd8dmVjdG9yfHZlcnRleGZyYWdtZW50fHZpcnR1YWx8dm9pZHx2b2xhdGlsZXx3aGlsZSlcXGIvLFxuXHRcdC8vIHNjYWxhciwgdmVjdG9yLCBhbmQgbWF0cml4IHR5cGVzXG5cdFx0L1xcYig/OmJvb2x8ZG91YmxlfGR3b3JkfGZsb2F0fGhhbGZ8aW50fG1pbig/OjEwZmxvYXR8MTJpbnR8MTYoPzpmbG9hdHxpbnR8dWludCkpfHVpbnQpKD86WzEtNF0oPzp4WzEtNF0pPyk/XFxiL1xuXHRdLFxuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy93aW5kb3dzL3dpbjMyL2RpcmVjdDNkaGxzbC9keC1ncmFwaGljcy1obHNsLWFwcGVuZGl4LWdyYW1tYXIjZmxvYXRpbmctcG9pbnQtbnVtYmVyc1xuXHQnbnVtYmVyJzogLyg/Oig/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT98XFxiMHhbXFxkYS1mQS1GXSspW2ZGaEhsTHVVXT9cXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaG9vbiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLzo6LiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJdKlwifCdbXiddKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY29uc3RhbnQnOiAvJSg/OlxcLltueV18W1xcdy1dKykvLFxuXHQnY2xhc3MtbmFtZSc6IC9AKD86W2EtejAtOS1dKlthLXowLTldKT98XFwqL2ksXG5cdCdmdW5jdGlvbic6IC8oPzpcXCtbLStdIHsyfSk/KD86W2Etel0oPzpbYS16MC05LV0qW2EtejAtOV0pPykvLFxuXHQna2V5d29yZCc6IC9cXC5bXFxeXFwrXFwqPVxcP118IVs+PDpcXC49XFw/IV18PVs+fDosXFwuXFwtXFxePCs7L35cXCpcXD9dfFxcP1s+fDpcXC5cXC1cXF48XFwrJn49QCFdfFxcfFtcXCRfJTpcXC5cXC1cXF5+XFwqPUBcXD9dfFxcK1t8XFwkXFwrXFwqXXw6W19cXC1cXF5cXCt+XFwqXXwlW186XFwuXFwtXFxeXFwrflxcKj1dfFxcXlt8OlxcLlxcLVxcKyZ+XFwqPVxcP118XFwkW3xfJTo8PlxcLVxcXiZ+QD1cXD9dfDtbOjxcXCs7XFwvflxcKj1dfH5bPnxcXCRfJTxcXCtcXC8mPVxcPyFdfC0tfD09L1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gaGVhZGVyVmFsdWVPZihuYW1lKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cCgnKF4oPzonICsgbmFtZSArICcpOlsgXFx0XSooPyFbIFxcdF0pKVteXSsnLCAnaScpO1xuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmh0dHAgPSB7XG5cdFx0J3JlcXVlc3QtbGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9eKD86Q09OTkVDVHxERUxFVEV8R0VUfEhFQUR8T1BUSU9OU3xQQVRDSHxQT1NUfFBSSXxQVVR8U0VBUkNIfFRSQUNFKVxccyg/Omh0dHBzPzpcXC9cXC98XFwvKVxcUypcXHNIVFRQXFwvW1xcZC5dKy9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIEhUVFAgTWV0aG9kXG5cdFx0XHRcdCdtZXRob2QnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15bQS1aXStcXGIvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0XHRcdH0sXG5cdFx0XHRcdC8vIFJlcXVlc3QgVGFyZ2V0IGUuZy4gaHR0cDovL2V4YW1wbGUuY29tLCAvcGF0aC90by9maWxlXG5cdFx0XHRcdCdyZXF1ZXN0LXRhcmdldCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMpKD86aHR0cHM/OlxcL1xcL3xcXC8pXFxTKig/PVxccykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICd1cmwnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnVyaVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBIVFRQIFZlcnNpb25cblx0XHRcdFx0J2h0dHAtdmVyc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXHMpSFRUUFxcL1tcXGQuXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdyZXNwb25zZS1zdGF0dXMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXkhUVFBcXC9bXFxkLl0rIFxcZCsgLisvbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQvLyBIVFRQIFZlcnNpb25cblx0XHRcdFx0J2h0dHAtdmVyc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXkhUVFBcXC9bXFxkLl0rLyxcblx0XHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBTdGF0dXMgQ29kZVxuXHRcdFx0XHQnc3RhdHVzLWNvZGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKVxcZCsoPz1cXHMpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQvLyBSZWFzb24gUGhyYXNlXG5cdFx0XHRcdCdyZWFzb24tcGhyYXNlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccykuKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2hlYWRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eW1xcdy1dKzouKyg/Oig/Olxcclxcbj98XFxuKVsgXFx0XS4rKSovbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaGVhZGVyLXZhbHVlJzogW1xuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IGhlYWRlclZhbHVlT2YoL0NvbnRlbnQtU2VjdXJpdHktUG9saWN5Ly5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiBbJ2NzcCcsICdsYW5ndWFnZXMtY3NwJ10sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5jc3Bcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IGhlYWRlclZhbHVlT2YoL1B1YmxpYy1LZXktUGlucyg/Oi1SZXBvcnQtT25seSk/Ly5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiBbJ2hwa3AnLCAnbGFuZ3VhZ2VzLWhwa3AnXSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmhwa3Bcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IGhlYWRlclZhbHVlT2YoL1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFsnaHN0cycsICdsYW5ndWFnZXMtaHN0cyddLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuaHN0c1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogaGVhZGVyVmFsdWVPZigvW146XSsvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHQnaGVhZGVyLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15bXjpdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXjovXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdC8vIENyZWF0ZSBhIG1hcHBpbmcgb2YgQ29udGVudC1UeXBlIGhlYWRlcnMgdG8gbGFuZ3VhZ2UgZGVmaW5pdGlvbnNcblx0dmFyIGxhbmdzID0gUHJpc20ubGFuZ3VhZ2VzO1xuXHR2YXIgaHR0cExhbmd1YWdlcyA9IHtcblx0XHQnYXBwbGljYXRpb24vamF2YXNjcmlwdCc6IGxhbmdzLmphdmFzY3JpcHQsXG5cdFx0J2FwcGxpY2F0aW9uL2pzb24nOiBsYW5ncy5qc29uIHx8IGxhbmdzLmphdmFzY3JpcHQsXG5cdFx0J2FwcGxpY2F0aW9uL3htbCc6IGxhbmdzLnhtbCxcblx0XHQndGV4dC94bWwnOiBsYW5ncy54bWwsXG5cdFx0J3RleHQvaHRtbCc6IGxhbmdzLmh0bWwsXG5cdFx0J3RleHQvY3NzJzogbGFuZ3MuY3NzLFxuXHRcdCd0ZXh0L3BsYWluJzogbGFuZ3MucGxhaW5cblx0fTtcblxuXHQvLyBEZWNsYXJlIHdoaWNoIHR5cGVzIGNhbiBhbHNvIGJlIHN1ZmZpeGVzXG5cdHZhciBzdWZmaXhUeXBlcyA9IHtcblx0XHQnYXBwbGljYXRpb24vanNvbic6IHRydWUsXG5cdFx0J2FwcGxpY2F0aW9uL3htbCc6IHRydWVcblx0fTtcblxuXHQvKipcblx0ICogUmV0dXJucyBhIHBhdHRlcm4gZm9yIHRoZSBnaXZlbiBjb250ZW50IHR5cGUgd2hpY2ggbWF0Y2hlcyBpdCBhbmQgYW55IHR5cGUgd2hpY2ggaGFzIGl0IGFzIGEgc3VmZml4LlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gY29udGVudFR5cGVcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIGdldFN1ZmZpeFBhdHRlcm4oY29udGVudFR5cGUpIHtcblx0XHR2YXIgc3VmZml4ID0gY29udGVudFR5cGUucmVwbGFjZSgvXlthLXpdK1xcLy8sICcnKTtcblx0XHR2YXIgc3VmZml4UGF0dGVybiA9ICdcXFxcdysvKD86W1xcXFx3Li1dK1xcXFwrKSsnICsgc3VmZml4ICsgJyg/IVsrXFxcXHcuLV0pJztcblx0XHRyZXR1cm4gJyg/OicgKyBjb250ZW50VHlwZSArICd8JyArIHN1ZmZpeFBhdHRlcm4gKyAnKSc7XG5cdH1cblxuXHQvLyBJbnNlcnQgZWFjaCBjb250ZW50IHR5cGUgcGFyc2VyIHRoYXQgaGFzIGl0cyBhc3NvY2lhdGVkIGxhbmd1YWdlXG5cdC8vIGN1cnJlbnRseSBsb2FkZWQuXG5cdHZhciBvcHRpb25zO1xuXHRmb3IgKHZhciBjb250ZW50VHlwZSBpbiBodHRwTGFuZ3VhZ2VzKSB7XG5cdFx0aWYgKGh0dHBMYW5ndWFnZXNbY29udGVudFR5cGVdKSB7XG5cdFx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdFx0dmFyIHBhdHRlcm4gPSBzdWZmaXhUeXBlc1tjb250ZW50VHlwZV0gPyBnZXRTdWZmaXhQYXR0ZXJuKGNvbnRlbnRUeXBlKSA6IGNvbnRlbnRUeXBlO1xuXHRcdFx0b3B0aW9uc1tjb250ZW50VHlwZS5yZXBsYWNlKC9cXC8vZywgJy0nKV0gPSB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQnKCcgKyAvY29udGVudC10eXBlOlxccyovLnNvdXJjZSArIHBhdHRlcm4gKyAvKD86KD86XFxyXFxuP3xcXG4pW1xcdy1dLiopKig/Olxccig/OlxcbnwoPyFcXG4pKXxcXG4pLy5zb3VyY2UgKyAnKScgK1xuXHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBsaXR0bGUgaW50ZXJlc3Rpbmc6XG5cdFx0XHRcdFx0Ly8gVGhlIEhUVFAgZm9ybWF0IHNwZWMgcmVxdWlyZWQgMSBlbXB0eSBsaW5lIGJlZm9yZSB0aGUgYm9keSB0byBtYWtlIGV2ZXJ5dGhpbmcgdW5hbWJpZ3VvdXMuXG5cdFx0XHRcdFx0Ly8gSG93ZXZlciwgd2hlbiB3cml0aW5nIGNvZGUgYnkgaGFuZCAoZS5nLiB0byBkaXNwbGF5IG9uIGEgd2Vic2l0ZSkgcGVvcGxlIGNhbiBmb3JnZXQgYWJvdXQgdGhpcyxcblx0XHRcdFx0XHQvLyBzbyB3ZSB3YW50IHRvIGJlIGxpYmVyYWwgaGVyZS4gV2Ugd2lsbCBhbGxvdyB0aGUgZW1wdHkgbGluZSB0byBiZSBvbWl0dGVkIGlmIHRoZSBmaXJzdCBsaW5lIG9mXG5cdFx0XHRcdFx0Ly8gdGhlIGJvZHkgZG9lcyBub3Qgc3RhcnQgd2l0aCBhIFtcXHctXSBjaGFyYWN0ZXIgKGFzIGhlYWRlcnMgZG8pLlxuXHRcdFx0XHRcdC9bXiBcXHRcXHctXVtcXHNcXFNdKi8uc291cmNlLFxuXHRcdFx0XHRcdCdpJ1xuXHRcdFx0XHQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IGh0dHBMYW5ndWFnZXNbY29udGVudFR5cGVdXG5cdFx0XHR9O1xuXHRcdH1cblx0fVxuXHRpZiAob3B0aW9ucykge1xuXHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2h0dHAnLCAnaGVhZGVyJywgb3B0aW9ucyk7XG5cdH1cblxufShQcmlzbSkpO1xuXG4vKipcbiAqIE9yaWdpbmFsIGJ5IFNjb3R0IEhlbG1lLlxuICpcbiAqIFJlZmVyZW5jZTogaHR0cHM6Ly9zY290dGhlbG1lLmNvLnVrL2hwa3AtY2hlYXQtc2hlZXQvXG4gKi9cblxuUHJpc20ubGFuZ3VhZ2VzLmhwa3AgPSB7XG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmluY2x1ZGVTdWJEb21haW5zfG1heC1hZ2V8cGluLXNoYTI1NnxwcmVsb2FkfHJlcG9ydC10b3xyZXBvcnQtdXJpfHN0cmljdCkoPz1bXFxzOz1dfCQpL2ksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0J29wZXJhdG9yJzogLz0vLFxuXHQncHVuY3R1YXRpb24nOiAvOy9cbn07XG5cbi8qKlxuICogT3JpZ2luYWwgYnkgU2NvdHQgSGVsbWUuXG4gKlxuICogUmVmZXJlbmNlOiBodHRwczovL3Njb3R0aGVsbWUuY28udWsvaHN0cy1jaGVhdC1zaGVldC9cbiAqL1xuXG5QcmlzbS5sYW5ndWFnZXMuaHN0cyA9IHtcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86aW5jbHVkZVN1YkRvbWFpbnN8bWF4LWFnZXxwcmVsb2FkKSg/PVtcXHM7PV18JCkvaSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvPS8sXG5cdCdwdW5jdHVhdGlvbic6IC87L1xufTtcblxuLy8gYWNjb3JkaW5nIHRvIHRoZSBvZmZpY2FsIHJlZmVyZW5jZSAoRU4pXG4vLyBodHRwczovL2ljaGlnb2phbS5uZXQvSWNoaWdvSmFtLWVuLmh0bWxcblByaXNtLmxhbmd1YWdlcy5pY2hpZ29qYW0gPSB7XG5cdCdjb21tZW50JzogLyg/OlxcQid8UkVNKSg/OlteXFxuXFxyXSopL2ksXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XCJcInxbISMkJSYnKCkqLFxcLzo7PD0+P15cXHcgK1xcLS5dKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvXFxCI1swLTlBLUZdK3xcXEJgWzAxXSt8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OkVbKy1dP1xcZCspPy9pLFxuXHQna2V5d29yZCc6IC9cXGIoPzpCRUVQfEJQU3xDQVNFfENMRUFSfENMS3xDTE98Q0xQfENMU3xDTFR8Q0xWfENPTlR8Q09QWXxFTFNFfEVORHxGSUxFfEZJTEVTfEZPUnxHT1NVQnxHT1RPfEdTQnxJRnxJTlBVVHxLQkR8TEVEfExFVHxMSVNUfExPQUR8TE9DQVRFfExSVU58TkVXfE5FWFR8T1VUfFBMQVl8UE9LRXxQUklOVHxQV018UkVNfFJFTlVNfFJFU0VUfFJFVFVSTnxSSUdIVHxSVE58UlVOfFNBVkV8U0NST0xMfFNMRUVQfFNSTkR8U1RFUHxTVE9QfFNVQnxURU1QT3xUSEVOfFRPfFVBUlR8VklERU98V0FJVCkoPzpcXCR8XFxiKS9pLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86QUJTfEFOQXxBU0N8QklOfEJUTnxERUN8RU5EfEZSRUV8SEVMUHxIRVh8STJDUnxJMkNXfElOfElOS0VZfExFTnxMSU5FfFBFRUt8Uk5EfFNDUnxTT1VORHxTVFJ8VElDS3xVU1J8VkVSfFZQRUVLfFpFUikoPzpcXCR8XFxiKS9pLFxuXHQnbGFiZWwnOiAvKD86XFxCQFxcUyspLyxcblx0J29wZXJhdG9yJzogLzxbPT5dP3w+PT98XFx8XFx8fCYmfFsrXFwtKlxcLz18Jl5+IV18XFxiKD86QU5EfE5PVHxPUilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFssOzooKVxcXV0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaWNvbiA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/Oig/IVxcMSlbXlxcXFxcXHJcXG5fXXxcXFxcLnxfKD8hXFwxKSg/OlxcclxcbnxbXFxzXFxTXSkpKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86XFxkK3JbYS16XFxkXSt8XFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPylcXGJ8XFwuXFxkK1xcYi9pLFxuXHQnYnVpbHRpbi1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC8mKD86YWxsb2NhdGVkfGFzY2lpfGNsb2NrfGNvbGxlY3Rpb25zfGNzZXR8Y3VycmVudHxkYXRlfGRhdGVsaW5lfGRpZ2l0c3xkdW1wfGV8ZXJyb3IoPzpudW1iZXJ8dGV4dHx2YWx1ZSk/fGVycm91dHxmYWlsfGZlYXR1cmVzfGZpbGV8aG9zdHxpbnB1dHxsY2FzZXxsZXR0ZXJzfGxldmVsfGxpbmV8bWFpbnxudWxsfG91dHB1dHxwaGl8cGl8cG9zfHByb2duYW1lfHJhbmRvbXxyZWdpb25zfHNvdXJjZXxzdG9yYWdlfHN1YmplY3R8dGltZXx0cmFjZXx1Y2FzZXx2ZXJzaW9uKVxcYi8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFwkXFx3Ky8sXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha3xieXxjYXNlfGNyZWF0ZXxkZWZhdWx0fGRvfGVsc2V8ZW5kfGV2ZXJ5fGZhaWx8Z2xvYmFsfGlmfGluaXRpYWx8aW52b2NhYmxlfGxpbmt8bG9jYWx8bmV4dHxub3R8b2Z8cHJvY2VkdXJlfHJlY29yZHxyZXBlYXR8cmV0dXJufHN0YXRpY3xzdXNwZW5kfHRoZW58dG98dW50aWx8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYig/IVxcZClcXHcrKD89XFxzKlsoe118XFxzKiFcXHMqXFxbKS8sXG5cdCdvcGVyYXRvcic6IC9bKy1dOig/IT0pfCg/OltcXC8/QF4lJl18XFwrXFwrP3wtLT98PT0/PT98fj09Pz0/fFxcKlxcKj98XFx8XFx8XFx8P3w8KD86LT4/fDw/PT8pfD4+Pz0/KSg/Ojo9KT98Oig/Oj06Pyk/fFshLlxcXFx8fl0vLFxuXHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXSgpe30sO10vXG59O1xuXG4vLyBodHRwczovL3VuaWNvZGUtb3JnLmdpdGh1Yi5pby9pY3UvdXNlcmd1aWRlL2Zvcm1hdF9wYXJzZS9tZXNzYWdlcy9cbi8vIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0ai9jb20vaWJtL2ljdS90ZXh0L01lc3NhZ2VGb3JtYXQuaHRtbFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2Vcblx0ICogQHBhcmFtIHtudW1iZXJ9IGxldmVsXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQoc291cmNlLCBsZXZlbCkge1xuXHRcdGlmIChsZXZlbCA8PSAwKSB7XG5cdFx0XHRyZXR1cm4gL1tdLy5zb3VyY2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzb3VyY2UucmVwbGFjZSgvPFNFTEY+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5lc3RlZChzb3VyY2UsIGxldmVsIC0gMSk7IH0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciBzdHJpbmdQYXR0ZXJuID0gLydbe306PSxdKD86W14nXXwnJykqJyg/IScpLztcblxuXHR2YXIgZXNjYXBlID0ge1xuXHRcdHBhdHRlcm46IC8nJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH07XG5cdHZhciBzdHJpbmcgPSB7XG5cdFx0cGF0dGVybjogc3RyaW5nUGF0dGVybixcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZXNjYXBlJzogZXNjYXBlXG5cdFx0fVxuXHR9O1xuXG5cdHZhciBhcmd1bWVudFNvdXJjZSA9IG5lc3RlZChcblx0XHQvXFx7KD86W157fSddfCcoPyFbe30sJ10pfCcnfDxTVFI+fDxTRUxGPikqXFx9Ly5zb3VyY2Vcblx0XHRcdC5yZXBsYWNlKC88U1RSPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmdQYXR0ZXJuLnNvdXJjZTsgfSksXG5cdFx0OFxuXHQpO1xuXG5cdHZhciBuZXN0ZWRNZXNzYWdlID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChhcmd1bWVudFNvdXJjZSksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbWVzc2FnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdCdtZXNzYWdlLWRlbGltaXRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLy4vLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ2ljdS1tZXNzYWdlLWZvcm1hdCddID0ge1xuXHRcdCdhcmd1bWVudCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChhcmd1bWVudFNvdXJjZSksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbnRlbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oXFx7KVtcXHNcXFNdKyg/PVxcfSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2FyZ3VtZW50LW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopW157fTo9LFxcc10rLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdjaG9pY2Utc3R5bGUnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0Yy9jbGFzc2ljdV8xXzFDaG9pY2VGb3JtYXQuaHRtbCNkZXRhaWxzXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyosXFxzKmNob2ljZVxccyosXFxzKilcXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvLFxuXHRcdFx0XHRcdFx0XHRcdCdyYW5nZSc6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyopWystXT8oPzpcXGQrKD86XFwuXFxkKik/fFxcdTIyMWUpXFxzKls8I1xcdTIyNjRdLyxcblx0XHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0J29wZXJhdG9yJzogL1s8I1xcdTIyNjRdLyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0J251bWJlcic6IC9cXFMrL1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0cmVzdDogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwbHVyYWwtc3R5bGUnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vdW5pY29kZS1vcmcuZ2l0aHViLmlvL2ljdS1kb2NzL2FwaWRvYy9yZWxlYXNlZC9pY3U0ai9jb20vaWJtL2ljdS90ZXh0L1BsdXJhbEZvcm1hdC5odG1sIzp+OnRleHQ9UGF0dGVybnMlMjBhbmQlMjBUaGVpciUyMEludGVycHJldGF0aW9uXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eKFxccyosXFxzKig/OnBsdXJhbHxzZWxlY3RvcmRpbmFsKVxccyosXFxzKilcXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdCdvZmZzZXQnOiAvXm9mZnNldDpcXHMqXFxkKy8sXG5cdFx0XHRcdFx0XHRcdFx0J25lc3RlZC1tZXNzYWdlJzogbmVzdGVkTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvPVxcZCt8W157fTo9LFxcc10rLyxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQna2V5d29yZCc6IC9eKD86ZmV3fG1hbnl8b25lfG90aGVyfHR3b3x6ZXJvKSQvXG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3NlbGVjdC1zdHlsZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly91bmljb2RlLW9yZy5naXRodWIuaW8vaWN1LWRvY3MvYXBpZG9jL3JlbGVhc2VkL2ljdTRqL2NvbS9pYm0vaWN1L3RleHQvU2VsZWN0Rm9ybWF0Lmh0bWwjOn46dGV4dD1QYXR0ZXJucyUyMGFuZCUyMFRoZWlyJTIwSW50ZXJwcmV0YXRpb25cblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKixcXHMqc2VsZWN0XFxzKixcXHMqKVxcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdFx0J25lc3RlZC1tZXNzYWdlJzogbmVzdGVkTWVzc2FnZSxcblx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0b3InOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW157fTo9LFxcc10rLyxcblx0XHRcdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQna2V5d29yZCc6IC9eb3RoZXIkL1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmNob2ljZXxwbHVyYWx8c2VsZWN0fHNlbGVjdG9yZGluYWwpXFxiLyxcblx0XHRcdFx0XHRcdCdhcmctdHlwZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OmRhdGV8ZHVyYXRpb258bnVtYmVyfG9yZGluYWx8c3BlbGxvdXR8dGltZSlcXGIvLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2FyZy1za2VsZXRvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLygsXFxzKik6Oltee306PSxcXHNdKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnYXJnLXN0eWxlJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKCxcXHMqKSg/OmN1cnJlbmN5fGZ1bGx8aW50ZWdlcnxsb25nfG1lZGl1bXxwZXJjZW50fHNob3J0KSg/PVxccyokKS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnYXJnLXN0eWxlLXRleHQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF5cXHMqLFxccyooPz1cXFMpKS8uc291cmNlICsgbmVzdGVkKC8oPzpbXnt9J118J1teJ10qJ3xcXHsoPzo8U0VMRj4pP1xcfSkrLy5zb3VyY2UsIDgpICsgJyQnKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLywvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXJndW1lbnQtZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8uLyxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0fTtcblxuXHRuZXN0ZWRNZXNzYWdlLmluc2lkZS5tZXNzYWdlLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlc1snaWN1LW1lc3NhZ2UtZm9ybWF0J107XG5cdFByaXNtLmxhbmd1YWdlc1snaWN1LW1lc3NhZ2UtZm9ybWF0J10uYXJndW1lbnQuaW5zaWRlLmNvbnRlbnQuaW5zaWRlWydjaG9pY2Utc3R5bGUnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlc1snaWN1LW1lc3NhZ2UtZm9ybWF0J107XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmlkcmlzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnaGFza2VsbCcsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyg/Oig/Oi0tfFxcfFxcfFxcfCkuKiR8XFx7LVtcXHNcXFNdKj8tXFx9KS9tLFxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpUeXBlfGNhc2V8Y2xhc3N8Y29kYXRhfGNvbnN0cnVjdG9yfGNvcmVjb3JkfGRhdGF8ZG98ZHNsfGVsc2V8ZXhwb3J0fGlmfGltcGxlbWVudGF0aW9ufGltcGxpY2l0fGltcG9ydHxpbXBvc3NpYmxlfGlufGluZml4fGluZml4bHxpbmZpeHJ8aW5zdGFuY2V8aW50ZXJmYWNlfGxldHxtb2R1bGV8bXV0dWFsfG5hbWVzcGFjZXxvZnxwYXJhbWV0ZXJzfHBhcnRpYWx8cG9zdHVsYXRlfHByaXZhdGV8cHJvb2Z8cHVibGljfHF1b3RlR29hbHxyZWNvcmR8cmV3cml0ZXxzeW50YXh8dGhlbnx0b3RhbHx1c2luZ3x3aGVyZXx3aXRoKVxcYi8sXG5cdCdidWlsdGluJzogdW5kZWZpbmVkXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnaWRyaXMnLCAna2V5d29yZCcsIHtcblx0J2ltcG9ydC1zdGF0ZW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyheXFxzKmltcG9ydFxccyspKD86W0EtWl1bXFx3J10qKSg/OlxcLltBLVpdW1xcdyddKikqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmlkciA9IFByaXNtLmxhbmd1YWdlcy5pZHJpcztcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMuaWdub3JlID0ge1xuXHRcdC8vIGh0dHBzOi8vZ2l0LXNjbS5jb20vZG9jcy9naXRpZ25vcmVcblx0XHQnY29tbWVudCc6IC9eIy4qL20sXG5cdFx0J2VudHJ5Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcUyg/Oi4qKD86KD86XFxcXCApfFxcUykpPy8sXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J29wZXJhdG9yJzogL14hfFxcKlxcKj98XFw/Lyxcblx0XHRcdFx0J3JlZ2V4Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcW1teXFxbXFxdXSpcXF0vLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLy9cblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmdpdGlnbm9yZSA9IFByaXNtLmxhbmd1YWdlcy5pZ25vcmU7XG5cdFByaXNtLmxhbmd1YWdlcy5oZ2lnbm9yZSA9IFByaXNtLmxhbmd1YWdlcy5pZ25vcmU7XG5cdFByaXNtLmxhbmd1YWdlcy5ucG1pZ25vcmUgPSBQcmlzbS5sYW5ndWFnZXMuaWdub3JlO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbmZvcm03ID0ge1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJdKlwiLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzdWJzdGl0dXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFtbXlxcW1xcXV0rXFxdLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXFt8XFxdLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXFtbXlxcW1xcXV0rXFxdLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3RpdGxlJzoge1xuXHRcdHBhdHRlcm46IC9eWyBcXHRdKig/OmJvb2t8Y2hhcHRlcnxwYXJ0KD8hIG9mKXxzZWN0aW9ufHRhYmxlfHZvbHVtZSlcXGIuKy9pbSxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSkoPzpcXGJcXGQrKD86XFwuXFxkKyk/KD86XFxeXFxkKyk/KD86KD8hXFxkKVxcdyspP3xcXGIoPzplaWdodHxlbGV2ZW58Zml2ZXxmb3VyfG5pbmV8b25lfHNldmVufHNpeHx0ZW58dGhyZWV8dHdlbHZlfHR3bykpXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCd2ZXJiJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/OmFuc3dlcmluZ3xhcHBseWluZyB0b3xhcmV8YXNraW5nfGF0dGFja2luZ3xiZSg/OmluZyk/fGJ1cm5pbmd8YnV5aW5nfGNhbGxlZHxjYXJyaWVzfGNhcnJ5KD8hIG91dCl8Y2Fycnlpbmd8Y2xpbWJpbmd8Y2xvc2luZ3xjb25jZWFsKD86aW5nfHMpP3xjb25zdWx0aW5nfGNvbnRhaW4oPzppbmd8cyk/fGN1dHRpbmd8ZHJpbmtpbmd8ZHJvcHBpbmd8ZWF0aW5nfGVuY2xvcyg/OmVzP3xpbmcpfGVudGVyaW5nfGV4YW1pbmluZ3xleGl0aW5nfGdldHRpbmd8Z2l2aW5nfGdvaW5nfGhhKD86c3x2ZXx2aW5nKXxob2xkKD86aW5nfHMpP3xpbXBsKD86aWVzfHkpfGluY29ycG9yYXQoPzplcz98aW5nKXxpbnNlcnRpbmd8aXN8anVtcGluZ3xraXNzaW5nfGxpc3RlbmluZ3xsb2NraW5nfGxvb2tpbmd8bWVhbig/OmluZ3xzKT98b3BlbmluZ3xwcm92aWQoPzplcz98aW5nKXxwdWxsaW5nfHB1c2hpbmd8cHV0dGluZ3xyZWxhdCg/OmVzP3xpbmcpfHJlbW92aW5nfHNlYXJjaGluZ3xzZWUoPzppbmd8cyk/fHNldHRpbmd8c2hvd2luZ3xzaW5naW5nfHNsZWVwaW5nfHNtZWxsaW5nfHNxdWVlemluZ3xzdXBwb3J0KD86aW5nfHMpP3xzd2VhcmluZ3xzd2l0Y2hpbmd8dGFraW5nfHRhc3Rpbmd8dGVsbGluZ3x0aGlua2luZ3x0aHJvd2luZ3x0b3VjaGluZ3x0dXJuaW5nfHR5aW5nfHVubG9jayg/OmluZ3xzKT98dmFyKD86aWVzfHl8eWluZyl8d2FpdGluZ3x3YWtpbmd8d2F2aW5nfHdlYXIoPzppbmd8cyk/KVxcYig/IS0pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzphZnRlcnxiZWZvcmV8Y2Fycnkgb3V0fGNoZWNrfGNvbnRpbnVlIHRoZSBhY3Rpb258ZGVmaW5pdGlvbig/PSAqOil8ZG8gbm90aGluZ3xlbHNlfGVuZCAoPzppZnx0aGUgc3Rvcnl8dW5sZXNzKXxldmVyeSB0dXJufGlmfGluY2x1ZGV8aW5zdGVhZCg/OiBvZik/fGxldHxtb3ZlfG5vfG5vd3xvdGhlcndpc2V8cmVwZWF0fHJlcG9ydHxyZXN1bWUgdGhlIHN0b3J5fHJ1bGUgZm9yfHJ1bm5pbmcgdGhyb3VnaHxzYXkoPzppbmcpP3xzdG9wIHRoZSBhY3Rpb258dGVzdHx0cnkoPzppbmcpP3x1bmRlcnN0YW5kfHVubGVzc3x1c2V8d2hlbnx3aGlsZXx5ZXMpXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdwcm9wZXJ0eSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzphZGphY2VudCg/ISB0byl8Y2FycmllZHxjbG9zZWR8Y29uY2VhbGVkfGNvbnRhaW5lZHxkYXJrfGRlc2NyaWJlZHxlZGlibGV8ZW1wdHl8ZW5jbG9zZWR8ZW50ZXJhYmxlfGV2ZW58ZmVtYWxlfGZpeGVkIGluIHBsYWNlfGZ1bGx8aGFuZGxlZHxoZWxkfGltcHJvcGVyLW5hbWVkfGluY29ycG9yYXRlZHxpbmVkaWJsZXxpbnZpc2libGV8bGlnaHRlZHxsaXR8bG9jayg/OmFibGV8ZWQpfG1hbGV8bWFya2VkIGZvciBsaXN0aW5nfG1lbnRpb25lZHxuZWdhdGl2ZXxuZXV0ZXJ8bm9uLSg/OmVtcHR5fGZ1bGx8cmVjdXJyaW5nKXxvZGR8b3BhcXVlfG9wZW4oPzphYmxlKT98cGx1cmFsLW5hbWVkfHBvcnRhYmxlfHBvc2l0aXZlfHByaXZhdGVseS1uYW1lZHxwcm9wZXItbmFtZWR8cHJvdmlkZWR8cHVibGljYWxseS1uYW1lZHxwdXNoYWJsZSBiZXR3ZWVuIHJvb21zfHJlY3VycmluZ3xyZWxhdGVkfHJ1YmJpbmd8c2NlbmVyeXxzZWVufHNpbmd1bGFyLW5hbWVkfHN1cHBvcnRlZHxzd2luZ2luZ3xzd2l0Y2goPzphYmxlfGVkKD86IG9mZnwgb24pPyl8dG91Y2goPzphYmxlfGVkKXx0cmFuc3BhcmVudHx1bmNvbmNlYWxlZHx1bmRlc2NyaWJlZHx1bmxpdHx1bmxvY2tlZHx1bm1hcmtlZCBmb3IgbGlzdGluZ3x1bm1lbnRpb25lZHx1bm9wZW5hYmxlfHVudG91Y2hhYmxlfHVudmlzaXRlZHx2YXJpYWJsZXx2aXNpYmxlfHZpc2l0ZWR8d2VhcmFibGV8d29ybilcXGIoPyEtKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdwb3NpdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzphYm92ZXxhZGphY2VudCB0b3xiYWNrIHNpZGUgb2Z8YmVsb3d8YmV0d2Vlbnxkb3dufGVhc3R8ZXZlcnl3aGVyZXxmcm9udCBzaWRlfGhlcmV8aW58aW5zaWRlKD86IGZyb20pP3xub3J0aCg/OmVhc3R8d2VzdCk/fG5vd2hlcmV8b24oPzogdG9wIG9mKT98b3RoZXIgc2lkZXxvdXRzaWRlKD86IGZyb20pP3xwYXJ0cz8gb2Z8cmVnaW9uYWxseSBpbnxzb3V0aCg/OmVhc3R8d2VzdCk/fHRocm91Z2h8dXB8d2VzdHx3aXRoaW4pXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J3R5cGUnOiB7XG5cdFx0cGF0dGVybjogLyhefFteLV0pXFxiKD86YWN0aW9ucz98YWN0aXZpdCg/Omllc3x5KXxhY3RvcnM/fGFuaW1hbHM/fGJhY2tkcm9wcz98Y29udGFpbmVycz98ZGV2aWNlcz98ZGlyZWN0aW9ucz98ZG9vcnM/fGhvbGRlcnM/fGtpbmRzP3xsaXN0cz98bVthZV1ufG5vYm9keXxub3RoaW5nfG5vdW5zP3xudW1iZXJzP3xvYmplY3RzP3xwZW9wbGV8cGVyc29ucz98cGxheWVyKD86J3MgaG9sZGFsbCk/fHJlZ2lvbnM/fHJlbGF0aW9ucz98cm9vbXM/fHJ1bGUoPzpib29rKT9zP3xzY2VuZXM/fHNvbWVvbmV8c29tZXRoaW5nfHN1cHBvcnRlcnM/fHRhYmxlcz98dGV4dHM/fHRoaW5ncz98dGltZXx2ZWhpY2xlcz98d29tW2FlXW4pXFxiKD8hLSkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bLiw6Oygpe31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluZm9ybTdbJ3N0cmluZyddLmluc2lkZVsnc3Vic3RpdHV0aW9uJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMuaW5mb3JtNztcbi8vIFdlIGRvbid0IHdhbnQgdGhlIHJlbWFpbmluZyB0ZXh0IGluIHRoZSBzdWJzdGl0dXRpb24gdG8gYmUgaGlnaGxpZ2h0ZWQgYXMgdGhlIHN0cmluZy5cblByaXNtLmxhbmd1YWdlcy5pbmZvcm03WydzdHJpbmcnXS5pbnNpZGVbJ3N1YnN0aXR1dGlvbiddLmluc2lkZS5yZXN0LnRleHQgPSB7XG5cdHBhdHRlcm46IC9cXFMoPzpcXHMqXFxTKSovLFxuXHRhbGlhczogJ2NvbW1lbnQnXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5pID0ge1xuXG5cdC8qKlxuXHQgKiBUaGUgY29tcG9uZW50IG1pbWljcyB0aGUgYmVoYXZpb3Igb2YgdGhlIFdpbjMyIEFQSSBwYXJzZXIuXG5cdCAqXG5cdCAqIEBzZWUge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9QcmlzbUpTL3ByaXNtL2lzc3Vlcy8yNzc1I2lzc3VlY29tbWVudC03ODc0Nzc3MjN9XG5cdCAqL1xuXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFxmXFx0XFx2XSopWyM7XVteXFxuXFxyXSovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdzZWN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFxmXFx0XFx2XSopXFxbW15cXG5cXHJcXF1dKlxcXT8vbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3NlY3Rpb24tbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyheXFxbWyBcXGZcXHRcXHZdKilbXiBcXGZcXHRcXHZcXF1dKyg/OlsgXFxmXFx0XFx2XStbXiBcXGZcXHRcXHZcXF1dKykqLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXS9cblx0XHR9XG5cdH0sXG5cdCdrZXknOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXGZcXHRcXHZdKilbXiBcXGZcXG5cXHJcXHRcXHY9XSsoPzpbIFxcZlxcdFxcdl0rW14gXFxmXFxuXFxyXFx0XFx2PV0rKSooPz1bIFxcZlxcdFxcdl0qPSkvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHR9LFxuXHQndmFsdWUnOiB7XG5cdFx0cGF0dGVybjogLyg9WyBcXGZcXHRcXHZdKilbXiBcXGZcXG5cXHJcXHRcXHZdKyg/OlsgXFxmXFx0XFx2XStbXiBcXGZcXG5cXHJcXHRcXHZdKykqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaW5uZXItdmFsdWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFwifCcpLisoPz1cXDEkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC89L1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmlvID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpfFxcL1xcLy4qfCMuKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiKD86XFxcXFtcXHNcXFNdfCg/IVwiXCJcIilbXlxcXFxdKSpcIlwiXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWN0aXZhdGV8YWN0aXZlQ29yb0NvdW50fGFzU3RyaW5nfGJsb2NrfGJyZWFrfGNhbGx8Y2F0Y2h8Y2xvbmV8Y29sbGVjdEdhcmJhZ2V8Y29tcGlsZVN0cmluZ3xjb250aW51ZXxkb3xkb0ZpbGV8ZG9NZXNzYWdlfGRvU3RyaW5nfGVsc2V8ZWxzZWlmfGV4aXR8Zm9yfGZvcmVhY2h8Zm9yd2FyZHxnZXRFbnZpcm9ubWVudFZhcmlhYmxlfGdldFNsb3R8aGFzU2xvdHxpZnxpZkZhbHNlfGlmTmlsfGlmTmlsRXZhbHxpZlRydWV8aXNBY3RpdmV8aXNOaWx8aXNSZXN1bWFibGV8bGlzdHxtZXNzYWdlfG1ldGhvZHxwYXJlbnR8cGFzc3xwYXVzZXxwZXJmb3JtfHBlcmZvcm1XaXRoQXJnTGlzdHxwcmludHxwcmludGxufHByb3RvfHJhaXNlfHJhaXNlUmVzdW1hYmxlfHJlbW92ZVNsb3R8cmVzZW5kfHJlc3VtZXxzY2hlZHVsZXJTbGVlcFNlY29uZHN8c2VsZnxzZW5kZXJ8c2V0U2NoZWR1bGVyU2xlZXBTZWNvbmRzfHNldFNsb3R8c2hhbGxvd0NvcHl8c2xvdE5hbWVzfHN1cGVyfHN5c3RlbXx0aGVufHRoaXNCbG9ja3x0aGlzQ29udGV4dHx0cnl8dHlwZXx1bmlxdWVJZHx1cGRhdGVTbG90fHdhaXR8d2hpbGV8d3JpdGV8eWllbGQpXFxiLyxcblx0J2J1aWx0aW4nOiAvXFxiKD86QXJyYXl8QXVkaW9EZXZpY2V8QXVkaW9NaXhlcnxCaWdOdW18QmxvY2t8Qm94fEJ1ZmZlcnxDRnVuY3Rpb258Q0dJfENvbG9yfEN1cnNlc3xEQk18RE5TUmVzb2x2ZXJ8RE9Db25uZWN0aW9ufERPUHJveHl8RE9TZXJ2ZXJ8RGF0ZXxEaXJlY3Rvcnl8RHVyYXRpb258RHluTGlifEVycm9yfEV4Y2VwdGlvbnxGRlR8RmlsZXxGbm1hdGNofEZvbnR8RnV0dXJlfEdMfEdMRXxHTFNjaXNzb3J8R0xVfEdMVUN5bGluZGVyfEdMVVF1YWRyaWN8R0xVU3BoZXJlfEdMVVR8SG9zdHxJbWFnZXxJbXBvcnRlcnxMaW5rTGlzdHxMaXN0fExvYmJ5fExvY2Fsc3xNRDV8TVAzRGVjb2RlcnxNUDNFbmNvZGVyfE1hcHxNZXNzYWdlfE1vdmllfE5vdGlmaWNhdGlvbnxOdW1iZXJ8T2JqZWN0fE9wZW5HTHxQb2ludHxQcm90b3N8UmFuZG9tfFJlZ2V4fFNHTUx8U0dNTEVsZW1lbnR8U0dNTFBhcnNlcnxTUUxpdGV8U2VxdWVuY2V8U2VydmVyfFNob3dNZXNzYWdlfFNsZWVweUNhdHxTbGVlcHlDYXRDdXJzb3J8U29ja2V0fFNvY2tldE1hbmFnZXJ8U291bmR8U291cHxTdG9yZXxTdHJpbmd8VHJlZXxVRFBTZW5kZXJ8VVBEUmVjZWl2ZXJ8VVJMfFVzZXJ8V2FybmluZ3xXZWFrTGluaylcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxuaWx8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplLT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogL1s9ISovJStcXC1eJnxdPXw+Pj89P3w8PD89P3w6Pzo/PXxcXCtcXCs/fC0tP3xcXCpcXCo/fFxcL1xcLz98JXxcXHxcXHw/fCYmP3xcXGIoPzphbmR8bm90fG9yfHJldHVybilcXGJ8QEA/fFxcP1xcPz98XFwuXFwuLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmogPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJOQlxcLi4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OicnfFteJ1xcclxcbl0pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzooPzpDUnxMRnxhZHZlcmJ8Y29uanVuY3Rpb258ZGVmfGRlZmluZXxkeWFkfG1vbmFkfG5vdW58dmVyYilcXGJ8KD86YXNzZXJ0fGJyZWFrfGNhc2V8Y2F0Y2hbZHRdP3xjb250aW51ZXxkb3xlbHNlfGVsc2VpZnxlbmR8ZmNhc2V8Zm9yfGZvcl9cXHcrfGdvdG9fXFx3K3xpZnxsYWJlbF9cXHcrfHJldHVybnxzZWxlY3R8dGhyb3d8dHJ5fHdoaWxlfHdoaWxzdClcXC4pLyxcblx0J3ZlcmInOiB7XG5cdFx0Ly8gTmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBiYWQgaGlnaGxpZ2h0aW5nXG5cdFx0Ly8gb2YgXjogOy4gPS4gPTogIS4gITpcblx0XHRwYXR0ZXJuOiAvKD8hXFxeOnw7XFwufFs9IV1bLjpdKSg/Olxceyg/OlxcLnw6Oj8pP3xwKD86XFwuXFwuP3w6KXxbPSFcXF1dfFs8PisqXFwtJSR8LCNdWy46XT98Wz9eXVxcLj98WztcXFtdOj98W359XCJpXVsuOl18W0FDZUVJakxvcl1cXC58KD86W19cXC9cXFxccXN1eF18Xz9cXGQpOikvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J251bWJlcic6IC9cXGJfPyg/Oig/IVxcZDopXFxkKyg/OlxcLlxcZCspPyg/Oig/OmFkfGFyfFtlanB4XSlfP1xcZCsoPzpcXC5cXGQrKT8pKig/OmJfP1tcXGRhLXpdKyg/OlxcLltcXGRhLXpdKyk/KT98X1xcYig/IVxcLikpLyxcblx0J2FkdmVyYic6IHtcblx0XHRwYXR0ZXJuOiAvW359XXxbXFwvXFxcXF1cXC4/fFtiZk1dXFwufHRbLjpdLyxcblx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdH0sXG5cdCdvcGVyYXRvcic6IC9bPWFdWy46XXxfXFwuLyxcblx0J2Nvbmp1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8mKD86XFwuOj98Oik/fFsuOkBdWy46XT98WyFEXVsuOl18WztkSFRdXFwufGA6P3xbXFxeTFNdOnxcIi8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1soKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmRzID0gL1xcYig/OmFic3RyYWN0fGFzc2VydHxib29sZWFufGJyZWFrfGJ5dGV8Y2FzZXxjYXRjaHxjaGFyfGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlZmF1bHR8ZG98ZG91YmxlfGVsc2V8ZW51bXxleHBvcnRzfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmbG9hdHxmb3J8Z290b3xpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnN0YW5jZW9mfGludHxpbnRlcmZhY2V8bG9uZ3xtb2R1bGV8bmF0aXZlfG5ld3xub24tc2VhbGVkfG51bGx8b3BlbnxvcGVuc3xwYWNrYWdlfHBlcm1pdHN8cHJpdmF0ZXxwcm90ZWN0ZWR8cHJvdmlkZXN8cHVibGljfHJlY29yZCg/IVxccypbKCl7fVtcXF08Pj0lfi46LDs/K1xcLSovJnxeXSl8cmVxdWlyZXN8cmV0dXJufHNlYWxlZHxzaG9ydHxzdGF0aWN8c3RyaWN0ZnB8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHx0aGlzfHRocm93fHRocm93c3x0b3x0cmFuc2llbnR8dHJhbnNpdGl2ZXx0cnl8dXNlc3x2YXJ8dm9pZHx2b2xhdGlsZXx3aGlsZXx3aXRofHlpZWxkKVxcYi87XG5cblx0Ly8gZnVsbCBwYWNrYWdlIChvcHRpb25hbCkgKyBwYXJlbnQgY2xhc3NlcyAob3B0aW9uYWwpXG5cdHZhciBjbGFzc05hbWVQcmVmaXggPSAvKD86W2Etel1cXHcqXFxzKlxcLlxccyopKig/OltBLVpdXFx3KlxccypcXC5cXHMqKSovLnNvdXJjZTtcblxuXHQvLyBiYXNlZCBvbiB0aGUgamF2YSBuYW1pbmcgY29udmVudGlvbnNcblx0dmFyIGNsYXNzTmFtZSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteXFx3Ll0pLy5zb3VyY2UgKyBjbGFzc05hbWVQcmVmaXggKyAvW0EtWl0oPzpbXFxkX0EtWl0qW2Etel1cXHcqKT9cXGIvLnNvdXJjZSksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eW2Etel1cXHcqKD86XFxzKlxcLlxccypbYS16XVxcdyopKig/OlxccypcXC4pPy8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuamF2YSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHRjbGFzc05hbWUsXG5cdFx0XHR7XG5cdFx0XHRcdC8vIHZhcmlhYmxlcywgcGFyYW1ldGVycywgYW5kIGNvbnN0cnVjdG9yIHJlZmVyZW5jZXNcblx0XHRcdFx0Ly8gdGhpcyB0byBzdXBwb3J0IGNsYXNzIG5hbWVzIChvciBnZW5lcmljIHBhcmFtZXRlcnMpIHdoaWNoIGRvIG5vdCBjb250YWluIGEgbG93ZXIgY2FzZSBsZXR0ZXIgKGFsc28gd29ya3MgZm9yIG1ldGhvZHMpXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58W15cXHcuXSkvLnNvdXJjZSArIGNsYXNzTmFtZVByZWZpeCArIC9bQS1aXVxcdyooPz1cXHMrXFx3K1xccypbOyw9KCldfFxccyooPzpcXFtbXFxzLF0qXFxdXFxzKik/OjpcXHMqbmV3XFxiKS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWUuaW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjbGFzcyBuYW1lcyBiYXNlZCBvbiBrZXl3b3JkXG5cdFx0XHRcdC8vIHRoaXMgdG8gc3VwcG9ydCBjbGFzcyBuYW1lcyAob3IgZ2VuZXJpYyBwYXJhbWV0ZXJzKSB3aGljaCBkbyBub3QgY29udGFpbiBhIGxvd2VyIGNhc2UgbGV0dGVyIChhbHNvIHdvcmtzIGZvciBtZXRob2RzKVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGIoPzpjbGFzc3xlbnVtfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8cmVjb3JkfHRocm93cylcXHMrKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgL1tBLVpdXFx3KlxcYi8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBjbGFzc05hbWUuaW5zaWRlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdFByaXNtLmxhbmd1YWdlcy5jbGlrZS5mdW5jdGlvbixcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg6OlxccyopW2Etel9dXFx3Ki8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvXFxiMGJbMDFdWzAxX10qTD9cXGJ8XFxiMHgoPzpcXC5bXFxkYS1mX3ArLV0rfFtcXGRhLWZfXSsoPzpcXC5bXFxkYS1mX3ArLV0rKT8pXFxifCg/OlxcYlxcZFtcXGRfXSooPzpcXC5bXFxkX10qKT98XFxCXFwuXFxkW1xcZF9dKikoPzplWystXT9cXGRbXFxkX10qKT9bZGZsXT8vaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSkoPzo8PD0/fD4+Pj89P3wtPnwtLXxcXCtcXCt8JiZ8XFx8XFx8fDo6fFs/On5dfFstKyovJSZ8XiE9PD5dPT8pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhJywgJ3N0cmluZycsIHtcblx0XHQndHJpcGxlLXF1b3RlZC1zdHJpbmcnOiB7XG5cdFx0XHQvLyBodHRwOi8vb3Blbmpkay5qYXZhLm5ldC9qZXBzLzM1NSNEZXNjcmlwdGlvblxuXHRcdFx0cGF0dGVybjogL1wiXCJcIlsgXFx0XSpbXFxyXFxuXSg/Oig/OlwifFwiXCIpPyg/OlxcXFwufFteXCJcXFxcXSkpKlwiXCJcIi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXidcXFxcXFxyXFxuXSl7MSw2fScvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0J2Fubm90YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14uXSlAXFx3Kyg/OlxccypcXC5cXHMqXFx3KykqLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J2dlbmVyaWNzJzoge1xuXHRcdFx0cGF0dGVybjogLzwoPzpbXFx3XFxzLC4/XXwmKD8hJil8PCg/OltcXHdcXHMsLj9dfCYoPyEmKXw8KD86W1xcd1xccywuP118Jig/ISYpfDwoPzpbXFx3XFxzLC4/XXwmKD8hJikpKj4pKj4pKj4pKj4vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogY2xhc3NOYW1lLFxuXHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+KCksLjpdLyxcblx0XHRcdFx0J29wZXJhdG9yJzogL1s/JnxdL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2ltcG9ydCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxiaW1wb3J0XFxzKykvLnNvdXJjZSArIGNsYXNzTmFtZVByZWZpeCArIC8oPzpbQS1aXVxcdyp8XFwqKSg/PVxccyo7KS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J25hbWVzcGFjZSc6IGNsYXNzTmFtZS5pbnNpZGUubmFtZXNwYWNlLFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vLFxuXHRcdFx0XHRcdCdvcGVyYXRvcic6IC9cXCovLFxuXHRcdFx0XHRcdCdjbGFzcy1uYW1lJzogL1xcdysvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYmltcG9ydFxccytzdGF0aWNcXHMrKS8uc291cmNlICsgY2xhc3NOYW1lUHJlZml4ICsgLyg/Olxcdyt8XFwqKSg/PVxccyo7KS8uc291cmNlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzdGF0aWMnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnbmFtZXNwYWNlJzogY2xhc3NOYW1lLmluc2lkZS5uYW1lc3BhY2UsXG5cdFx0XHRcdFx0J3N0YXRpYyc6IC9cXGJcXHcrJC8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi8sXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogL1xcKi8sXG5cdFx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0LyhcXGIoPzpleHBvcnRzfGltcG9ydCg/OlxccytzdGF0aWMpP3xtb2R1bGV8b3BlbnxvcGVuc3xwYWNrYWdlfHByb3ZpZGVzfHJlcXVpcmVzfHRvfHRyYW5zaXRpdmV8dXNlc3x3aXRoKVxccyspKD8hPGtleXdvcmQ+KVthLXpdXFx3Kig/OlxcLlthLXpdXFx3KikqXFwuPy9cblx0XHRcdFx0XHQuc291cmNlLnJlcGxhY2UoLzxrZXl3b3JkPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBrZXl3b3Jkcy5zb3VyY2U7IH0pKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi8sXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcbn0oUHJpc20pKTtcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBBYXJvbiBIYXJ1bjogaHR0cDovL2FhaGFjcmVhdGl2ZS5jb20vMjAxMi8wNy8zMS9waHAtc3ludGF4LWhpZ2hsaWdodGluZy1wcmlzbS9cbiAqIE1vZGlmaWVkIGJ5IE1pbGVzIEpvaG5zb246IGh0dHA6Ly9taWxlc2oubWVcbiAqIFJld3JpdHRlbiBieSBUb20gUGF2ZWxlY1xuICpcbiAqIFN1cHBvcnRzIFBIUCA1LjMgLSA4LjBcbiAqL1xuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgY29tbWVudCA9IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qfCMoPyFcXFspLiovO1xuXHR2YXIgY29uc3RhbnQgPSBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmZhbHNlfHRydWUpXFxiL2ksXG5cdFx0XHRhbGlhczogJ2Jvb2xlYW4nXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKDo6XFxzKilcXGJbYS16X11cXHcqXFxiKD8hXFxzKlxcKCkvaSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNhc2V8Y29uc3QpXFxzKylcXGJbYS16X11cXHcqKD89XFxzKls7PV0pL2ksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0L1xcYig/Om51bGwpXFxiL2ksXG5cdFx0L1xcYltBLVpfXVtBLVowLTlfXSpcXGIoPyFcXHMqXFwoKS8sXG5cdF07XG5cdHZhciBudW1iZXIgPSAvXFxiMGJbMDFdKyg/Ol9bMDFdKykqXFxifFxcYjBvWzAtN10rKD86X1swLTddKykqXFxifFxcYjB4W1xcZGEtZl0rKD86X1tcXGRhLWZdKykqXFxifCg/OlxcYlxcZCsoPzpfXFxkKykqXFwuPyg/OlxcZCsoPzpfXFxkKykqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaTtcblx0dmFyIG9wZXJhdG9yID0gLzw/PT58XFw/XFw/PT98XFwuezN9fFxcPz8tPnxbIT1dPT89P3w6OnxcXCpcXCo9P3wtLXxcXCtcXCt8JiZ8XFx8XFx8fDw8fD4+fFs/fl18Wy9efCUqJjw+ListXT0/Lztcblx0dmFyIHB1bmN0dWF0aW9uID0gL1t7fVxcW1xcXSgpLDo7XS87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnBocCA9IHtcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL1xcPz4kfF48XFw/KD86cGhwKD89XFxzKXw9KT8vaSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdCd2YXJpYWJsZSc6IC9cXCQrKD86XFx3K1xcYnwoPz1cXHspKS8sXG5cdFx0J3BhY2thZ2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKG5hbWVzcGFjZVxccyt8dXNlXFxzKyg/OmZ1bmN0aW9uXFxzKyk/KSg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiKD8hXFxcXCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZS1kZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xlbnVtfGludGVyZmFjZXx0cmFpdClcXHMrKVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdmdW5jdGlvbi1kZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJmdW5jdGlvblxccyspW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKFxccyopXFxiKD86YXJyYXl8Ym9vbHxib29sZWFufGZsb2F0fGludHxpbnRlZ2VyfG9iamVjdHxzdHJpbmcpXFxiKD89XFxzKlxcKSkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWNhc3RpbmcnLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oWygsP11cXHMqKVxcYig/OmFycmF5KD8hXFxzKlxcKCl8Ym9vbHxjYWxsYWJsZXwoPzpmYWxzZXxudWxsKSg/PVxccypcXHwpfGZsb2F0fGludHxpdGVyYWJsZXxtaXhlZHxvYmplY3R8c2VsZnxzdGF0aWN8c3RyaW5nKVxcYig/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiAndHlwZS1oaW50Jyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKVxccyo6XFxzKig/OlxcP1xccyopPylcXGIoPzphcnJheSg/IVxccypcXCgpfGJvb2x8Y2FsbGFibGV8KD86ZmFsc2V8bnVsbCkoPz1cXHMqXFx8KXxmbG9hdHxpbnR8aXRlcmFibGV8bWl4ZWR8bmV2ZXJ8b2JqZWN0fHNlbGZ8c3RhdGljfHN0cmluZ3x2b2lkKVxcYi9pLFxuXHRcdFx0XHRhbGlhczogJ3JldHVybi10eXBlJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86YXJyYXkoPyFcXHMqXFwoKXxib29sfGZsb2F0fGludHxpdGVyYWJsZXxtaXhlZHxvYmplY3R8c3RyaW5nfHZvaWQpXFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAndHlwZS1kZWNsYXJhdGlvbicsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKSg/OmZhbHNlfG51bGwpXFxifFxcYig/OmZhbHNlfG51bGwpKD89XFxzKlxcfCkvaSxcblx0XHRcdFx0YWxpYXM6ICd0eXBlLWRlY2xhcmF0aW9uJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86cGFyZW50fHNlbGZ8c3RhdGljKSg/PVxccyo6OikvaSxcblx0XHRcdFx0YWxpYXM6ICdzdGF0aWMtY29udGV4dCcsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8geWllbGQgZnJvbVxuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYnlpZWxkXFxzKylmcm9tXFxiL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvLyBgY2xhc3NgIGlzIGFsd2F5cyBhIGtleXdvcmQgdW5saWtlIG90aGVyIGtleXdvcmRzXG5cdFx0XHQvXFxiY2xhc3NcXGIvaSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVzZXJ2ZWQua2V5d29yZHMucGhwXG5cdFx0XHRcdC8vXG5cdFx0XHRcdC8vIGtleXdvcmRzIGNhbm5vdCBiZSBwcmVjZWRlZCBieSBcIi0+XCJcblx0XHRcdFx0Ly8gdGhlIGNvbXBsZXggbG9va2JlaGluZCBtZWFucyBgKD88ISg/Oi0+fDo6KVxccyopYFxuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHM+Ol18KD86XnxbXi1dKT58KD86XnxbXjpdKTopXFxzKilcXGIoPzphYnN0cmFjdHxhbmR8YXJyYXl8YXN8YnJlYWt8Y2FsbGFibGV8Y2FzZXxjYXRjaHxjbG9uZXxjb25zdHxjb250aW51ZXxkZWNsYXJlfGRlZmF1bHR8ZGllfGRvfGVjaG98ZWxzZXxlbHNlaWZ8ZW1wdHl8ZW5kZGVjbGFyZXxlbmRmb3J8ZW5kZm9yZWFjaHxlbmRpZnxlbmRzd2l0Y2h8ZW5kd2hpbGV8ZW51bXxldmFsfGV4aXR8ZXh0ZW5kc3xmaW5hbHxmaW5hbGx5fGZufGZvcnxmb3JlYWNofGZ1bmN0aW9ufGdsb2JhbHxnb3RvfGlmfGltcGxlbWVudHN8aW5jbHVkZXxpbmNsdWRlX29uY2V8aW5zdGFuY2VvZnxpbnN0ZWFkb2Z8aW50ZXJmYWNlfGlzc2V0fGxpc3R8bWF0Y2h8bmFtZXNwYWNlfG5ldmVyfG5ld3xvcnxwYXJlbnR8cHJpbnR8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlYWRvbmx5fHJlcXVpcmV8cmVxdWlyZV9vbmNlfHJldHVybnxzZWxmfHN0YXRpY3xzd2l0Y2h8dGhyb3d8dHJhaXR8dHJ5fHVuc2V0fHVzZXx2YXJ8d2hpbGV8eG9yfHlpZWxkfF9faGFsdF9jb21waWxlcilcXGIvaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2FyZ3VtZW50LW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFsoLF1cXHMqKVxcYlthLXpfXVxcdyooPz1cXHMqOig/ITopKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8bmV3KD8hXFxzK3NlbGZ8XFxzK3N0YXRpYykpXFxzK3xcXGJjYXRjaFxccypcXCgpXFxiW2Etel9dXFx3Kig/IVxcXFwpXFxiL2ksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHxcXHMqKVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD8hXFxcXClcXGIoPz1cXHMqXFx8KS9pLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFx8XFxzKikoPzpcXFxcP1xcYlthLXpfXVxcdyopK1xcYi9pLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OlxcXFw/XFxiW2Etel9dXFx3KikrXFxiKD89XFxzKlxcfCkvaSxcblx0XHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZCcsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZXh0ZW5kc3xpbXBsZW1lbnRzfGluc3RhbmNlb2Z8bmV3KD8hXFxzK3NlbGZcXGJ8XFxzK3N0YXRpY1xcYikpXFxzK3xcXGJjYXRjaFxccypcXCgpKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPyFcXFxcKS9pLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwkKS9pLFxuXHRcdFx0XHRhbGlhczogJ3R5cGUtZGVjbGFyYXRpb24nLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXFxcP1xcYlthLXpfXVxcdyopKyg/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiBbJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJywgJ3R5cGUtZGVjbGFyYXRpb24nXSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqOjopL2ksXG5cdFx0XHRcdGFsaWFzOiAnc3RhdGljLWNvbnRleHQnLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oPzpcXFxcP1xcYlthLXpfXVxcdyopKyg/PVxccyo6OikvaSxcblx0XHRcdFx0YWxpYXM6IFsnY2xhc3MtbmFtZS1mdWxseS1xdWFsaWZpZWQnLCAnc3RhdGljLWNvbnRleHQnXSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxcXC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhbKCw/XVxccyopW2Etel9dXFx3Kig/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiAndHlwZS1oaW50Jyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFsoLD9dXFxzKikoPzpcXFxcP1xcYlthLXpfXVxcdyopKyg/PVxccypcXCQpL2ksXG5cdFx0XHRcdGFsaWFzOiBbJ2NsYXNzLW5hbWUtZnVsbHktcXVhbGlmaWVkJywgJ3R5cGUtaGludCddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcKVxccyo6XFxzKig/OlxcP1xccyopPylcXGJbYS16X11cXHcqKD8hXFxcXClcXGIvaSxcblx0XHRcdFx0YWxpYXM6ICdyZXR1cm4tdHlwZScsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXClcXHMqOlxccyooPzpcXD9cXHMqKT8pKD86XFxcXD9cXGJbYS16X11cXHcqKStcXGIoPyFcXFxcKS9pLFxuXHRcdFx0XHRhbGlhczogWydjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZCcsICdyZXR1cm4tdHlwZSddLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY29uc3RhbnQnOiBjb25zdGFudCxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXFx3XSlcXFxcP1thLXpfXSg/OltcXHdcXFxcXSpcXHcpPyg/PVxccypcXCgpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0cGF0dGVybjogLygtPlxccyopXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdCdvcGVyYXRvcic6IG9wZXJhdG9yLFxuXHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uXG5cdH07XG5cblx0dmFyIHN0cmluZ19pbnRlcnBvbGF0aW9uID0ge1xuXHRcdHBhdHRlcm46IC9cXHtcXCQoPzpcXHsoPzpcXHtbXnt9XStcXH18W157fV0rKVxcfXxbXnt9XSkrXFx9fChefFteXFxcXHtdKVxcJCsoPzpcXHcrKD86XFxbW15cXHJcXG5cXFtcXF1dK1xcXXwtPlxcdyspPykvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucGhwXG5cdH07XG5cblx0dmFyIHN0cmluZyA9IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvPDw8JyhbXiddKyknW1xcclxcbl0oPzouKltcXHJcXG5dKSo/XFwxOy8sXG5cdFx0XHRhbGlhczogJ25vd2RvYy1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL148PDwnW14nXSsnfFthLXpfXVxcdyo7JC9pLFxuXHRcdFx0XHRcdGFsaWFzOiAnc3ltYm9sJyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePDw8Jz98Wyc7XSQvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvPDw8KD86XCIoW15cIl0rKVwiW1xcclxcbl0oPzouKltcXHJcXG5dKSo/XFwxO3woW2Etel9dXFx3KilbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDI7KS9pLFxuXHRcdFx0YWxpYXM6ICdoZXJlZG9jLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXjw8PCg/OlwiW15cIl0rXCJ8W2Etel9dXFx3Kil8W2Etel9dXFx3KjskL2ksXG5cdFx0XHRcdFx0YWxpYXM6ICdzeW1ib2wnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL148PDxcIj98W1wiO10kL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiBzdHJpbmdfaW50ZXJwb2xhdGlvblxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL2AoPzpcXFxcW1xcc1xcU118W15cXFxcYF0pKmAvLFxuXHRcdFx0YWxpYXM6ICdiYWNrdGljay1xdW90ZWQtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLycoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKicvLFxuXHRcdFx0YWxpYXM6ICdzaW5nbGUtcXVvdGVkLXN0cmluZycsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwiLyxcblx0XHRcdGFsaWFzOiAnZG91YmxlLXF1b3RlZC1zdHJpbmcnLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogc3RyaW5nX2ludGVycG9sYXRpb25cblx0XHRcdH1cblx0XHR9XG5cdF07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncGhwJywgJ3ZhcmlhYmxlJywge1xuXHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0J2F0dHJpYnV0ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8jXFxbKD86W15cIidcXC8jXXxcXC8oPyFbKi9dKXxcXC9cXC8uKiR8Iyg/IVxcWykuKiR8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSpcXCpcXC98XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcInwnKD86XFxcXFtcXHNcXFNdfFteXFxcXCddKSonKStcXF0oPz1cXHMqW2EteiQjXSkvaW0sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0dHJpYnV0ZS1jb250ZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKCNcXFspW1xcc1xcU10rKD89XFxdJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Ly8gaW5zaWRlIGNhbiBhcHBlYXIgc3Vic2V0IG9mIHBocFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHRcdFx0J3N0cmluZyc6IHN0cmluZyxcblx0XHRcdFx0XHRcdCdhdHRyaWJ1dGUtY2xhc3MtbmFtZSc6IFtcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oW146XXxeKVxcYlthLXpfXVxcdyooPyFcXFxcKVxcYi9pLFxuXHRcdFx0XHRcdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oW146XXxeKSg/OlxcXFw/XFxiW2Etel9dXFx3KikrL2ksXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6IFtcblx0XHRcdFx0XHRcdFx0XHRcdCdjbGFzcy1uYW1lJyxcblx0XHRcdFx0XHRcdFx0XHRcdCdjbGFzcy1uYW1lLWZ1bGx5LXF1YWxpZmllZCdcblx0XHRcdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcXFwvXG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdFx0J2NvbnN0YW50JzogY29uc3RhbnQsXG5cdFx0XHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzogb3BlcmF0b3IsXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvblxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiNcXFt8XFxdJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmICghLzxcXD8vLnRlc3QoZW52LmNvZGUpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIHBocFBhdHRlcm4gPSAvPFxcPyg/OlteXCInLyNdfFxcLyg/IVsqL10pfChcInwnKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDEpW15cXFxcXSkqXFwxfCg/OlxcL1xcL3wjKD8hXFxbKSkoPzpbXj9cXG5cXHJdfFxcPyg/IT4pKSooPz0kfFxcPz58W1xcclxcbl0pfCNcXFt8XFwvXFwqKD86W14qXXxcXCooPyFcXC8pKSooPzpcXCpcXC98JCkpKj8oPzpcXD8+fCQpL2c7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3BocCcsIHBocFBhdHRlcm4pO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdwaHAnKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBqYXZhRG9jTGlrZSA9IFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jbGlrZSA9IHtcblx0XHQncGFyYW1ldGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/OlxcL3szfXxcXCp8XFwvXFwqXFwqKVxccypAKD86YXJnfGFyZ3VtZW50c3xwYXJhbSlcXHMrKVxcdysvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0Ly8ga2V5d29yZHMgYXJlIHRoZSBmaXJzdCB3b3JkIGluIGEgbGluZSBwcmVjZWRlZCBiZSBhbiBgQGAgb3Igc3Vycm91bmRlZCBieSBjdXJseSBicmFjZXMuXG5cdFx0XHQvLyBAd29yZCwge0B3b3JkfVxuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKig/OlxcL3szfXxcXCp8XFwvXFwqXFwqKVxccyp8XFx7KUBbYS16XVthLXpBLVotXStcXGIvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be31dL1xuXHR9O1xuXG5cblx0LyoqXG5cdCAqIEFkZHMgZG9jIGNvbW1lbnQgc3VwcG9ydCB0byB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgYW5kIGNhbGxzIGEgZ2l2ZW4gY2FsbGJhY2sgb24gZWFjaCBkb2MgY29tbWVudCBwYXR0ZXJuLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZyB0aGUgbGFuZ3VhZ2UgYWRkIGRvYyBjb21tZW50IHN1cHBvcnQgdG8uXG5cdCAqIEBwYXJhbSB7KHBhdHRlcm46IHtpbnNpZGU6IHtyZXN0OiB1bmRlZmluZWR9fSkgPT4gdm9pZH0gY2FsbGJhY2sgdGhlIGZ1bmN0aW9uIGNhbGxlZCB3aXRoIGVhY2ggZG9jIGNvbW1lbnQgcGF0dGVybiBhcyBhcmd1bWVudC5cblx0ICovXG5cdGZ1bmN0aW9uIGRvY0NvbW1lbnRTdXBwb3J0KGxhbmcsIGNhbGxiYWNrKSB7XG5cdFx0dmFyIHRva2VuTmFtZSA9ICdkb2MtY29tbWVudCc7XG5cblx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tsYW5nXTtcblx0XHRpZiAoIWdyYW1tYXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIHRva2VuID0gZ3JhbW1hclt0b2tlbk5hbWVdO1xuXG5cdFx0aWYgKCF0b2tlbikge1xuXHRcdFx0Ly8gYWRkIGRvYyBjb21tZW50OiAvKiogKi9cblx0XHRcdHZhciBkZWZpbml0aW9uID0ge307XG5cdFx0XHRkZWZpbml0aW9uW3Rva2VuTmFtZV0gPSB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcL1xcKlxcKlteL11bXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdFx0fTtcblxuXHRcdFx0Z3JhbW1hciA9IFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUobGFuZywgJ2NvbW1lbnQnLCBkZWZpbml0aW9uKTtcblx0XHRcdHRva2VuID0gZ3JhbW1hclt0b2tlbk5hbWVdO1xuXHRcdH1cblxuXHRcdGlmICh0b2tlbiBpbnN0YW5jZW9mIFJlZ0V4cCkgeyAvLyBjb252ZXJ0IHJlZ2V4IHRvIG9iamVjdFxuXHRcdFx0dG9rZW4gPSBncmFtbWFyW3Rva2VuTmFtZV0gPSB7IHBhdHRlcm46IHRva2VuIH07XG5cdFx0fVxuXG5cdFx0aWYgKEFycmF5LmlzQXJyYXkodG9rZW4pKSB7XG5cdFx0XHRmb3IgKHZhciBpID0gMCwgbCA9IHRva2VuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHRpZiAodG9rZW5baV0gaW5zdGFuY2VvZiBSZWdFeHApIHtcblx0XHRcdFx0XHR0b2tlbltpXSA9IHsgcGF0dGVybjogdG9rZW5baV0gfTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjYWxsYmFjayh0b2tlbltpXSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNhbGxiYWNrKHRva2VuKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBkb2MtY29tbWVudCBzdXBwb3J0IHRvIHRoZSBnaXZlbiBsYW5ndWFnZXMgZm9yIHRoZSBnaXZlbiBkb2N1bWVudGF0aW9uIGxhbmd1YWdlLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfHN0cmluZ30gbGFuZ3VhZ2VzXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBkb2NMYW5ndWFnZVxuXHQgKi9cblx0ZnVuY3Rpb24gYWRkU3VwcG9ydChsYW5ndWFnZXMsIGRvY0xhbmd1YWdlKSB7XG5cdFx0aWYgKHR5cGVvZiBsYW5ndWFnZXMgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRsYW5ndWFnZXMgPSBbbGFuZ3VhZ2VzXTtcblx0XHR9XG5cblx0XHRsYW5ndWFnZXMuZm9yRWFjaChmdW5jdGlvbiAobGFuZykge1xuXHRcdFx0ZG9jQ29tbWVudFN1cHBvcnQobGFuZywgZnVuY3Rpb24gKHBhdHRlcm4pIHtcblx0XHRcdFx0aWYgKCFwYXR0ZXJuLmluc2lkZSkge1xuXHRcdFx0XHRcdHBhdHRlcm4uaW5zaWRlID0ge307XG5cdFx0XHRcdH1cblx0XHRcdFx0cGF0dGVybi5pbnNpZGUucmVzdCA9IGRvY0xhbmd1YWdlO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoamF2YURvY0xpa2UsICdhZGRTdXBwb3J0JywgeyB2YWx1ZTogYWRkU3VwcG9ydCB9KTtcblxuXHRqYXZhRG9jTGlrZS5hZGRTdXBwb3J0KFsnamF2YScsICdqYXZhc2NyaXB0JywgJ3BocCddLCBqYXZhRG9jTGlrZSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBjb2RlTGluZVBhdHRlcm4gPSAvKF4oPzpbXFx0IF0qKD86XFwqXFxzKikqKSlbXipcXHNdLiokL207XG5cblx0dmFyIG1lbWJlclJlZmVyZW5jZSA9IC8jXFxzKlxcdysoPzpcXHMqXFwoW14oKV0qXFwpKT8vLnNvdXJjZTtcblx0dmFyIHJlZmVyZW5jZSA9IC8oPzpcXGJbYS16QS1aXVxcdytcXHMqXFwuXFxzKikqXFxiW0EtWl1cXHcqKD86XFxzKjxtZW0+KT98PG1lbT4vLnNvdXJjZS5yZXBsYWNlKC88bWVtPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBtZW1iZXJSZWZlcmVuY2U7IH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YWRvY2xpa2UnLCB7fSk7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFkb2MnLCAna2V5d29yZCcsIHtcblx0XHQncmVmZXJlbmNlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oQCg/OmV4Y2VwdGlvbnxsaW5rfGxpbmtwbGFpbnxzZWV8dGhyb3dzfHZhbHVlKVxccysoPzpcXCpcXHMqKT8pLy5zb3VyY2UgKyAnKD86JyArIHJlZmVyZW5jZSArICcpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCNcXHMqKVxcdysoPz1cXHMqXFwoKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZmllbGQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLygjXFxzKilcXHcrLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCduYW1lc3BhY2UnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYig/OlthLXpdXFx3KlxccypcXC5cXHMqKSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjbGFzcy1uYW1lJzogL1xcYltBLVpdXFx3Ki8sXG5cdFx0XHRcdCdrZXl3b3JkJzogUHJpc20ubGFuZ3VhZ2VzLmphdmEua2V5d29yZCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1sjKClbXFxdLC5dL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHQvLyBAcGFyYW0gPFQ+IHRoZSBmaXJzdCBnZW5lcmljIHR5cGUgcGFyYW1ldGVyXG5cdFx0XHRwYXR0ZXJuOiAvKEBwYXJhbVxccyspPFtBLVpdXFx3Kj4vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWy48Pl0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29kZS1zZWN0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxce0Bjb2RlXFxzKyg/IVxccykpKD86W15cXHN7fV18XFxzKyg/IVtcXHN9XSl8XFx7KD86W157fV18XFx7KD86W157fV18XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKlxcfSkqXFx9KSsoPz1cXHMqXFx9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdjb2RlJzoge1xuXHRcdFx0XHRcdFx0Ly8gdGhlcmUgY2FuJ3QgYmUgYW55IEhUTUwgaW5zaWRlIG9mIHtAY29kZX0gdGFnc1xuXHRcdFx0XHRcdFx0cGF0dGVybjogY29kZUxpbmVQYXR0ZXJuLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmEsXG5cdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmEnXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKDwoY29kZXxwcmV8dHQpPig/ITxjb2RlPilcXHMqKVxcUyg/OlxcU3xcXHMrXFxTKSo/KD89XFxzKjxcXC9cXDI+KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdsaW5lJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogY29kZUxpbmVQYXR0ZXJuLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQvLyBoaWdobGlnaHQgSFRNTCB0YWdzIGFuZCBlbnRpdGllc1xuXHRcdFx0XHRcdFx0XHQndGFnJzogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcsXG5cdFx0XHRcdFx0XHRcdCdlbnRpdHknOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLmVudGl0eSxcblx0XHRcdFx0XHRcdFx0J2NvZGUnOiB7XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZXZlcnl0aGluZyBlbHNlIGlzIEphdmEgY29kZVxuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8uKy8sXG5cdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YSxcblx0XHRcdFx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmEnXG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCd0YWcnOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZyxcblx0XHQnZW50aXR5JzogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC5lbnRpdHksXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jbGlrZS5hZGRTdXBwb3J0KCdqYXZhJywgUHJpc20ubGFuZ3VhZ2VzLmphdmFkb2MpO1xufShQcmlzbSkpO1xuXG4vLyBTcGVjaWZpY2F0aW9uOlxuLy8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vamF2YS9qYXZhc2UvMTMvZG9jcy9hcGkvamF2YS5iYXNlL2phdmEvbGFuZy9UaHJvd2FibGUuaHRtbCNwcmludFN0YWNrVHJhY2UoKVxuXG5QcmlzbS5sYW5ndWFnZXMuamF2YXN0YWNrdHJhY2UgPSB7XG5cblx0Ly8gamF2YS5zcWwuU1FMRXhjZXB0aW9uOiBWaW9sYXRpb24gb2YgdW5pcXVlIGNvbnN0cmFpbnQgTVlfRU5USVRZX1VLXzE6IGR1cGxpY2F0ZSB2YWx1ZShzKSBmb3IgY29sdW1uKHMpIE1ZX0NPTFVNTiBpbiBzdGF0ZW1lbnQgWy4uLl1cblx0Ly8gQ2F1c2VkIGJ5OiBqYXZhLnNxbC5TUUxFeGNlcHRpb246IFZpb2xhdGlvbiBvZiB1bmlxdWUgY29uc3RyYWludCBNWV9FTlRJVFlfVUtfMTogZHVwbGljYXRlIHZhbHVlKHMpIGZvciBjb2x1bW4ocykgTVlfQ09MVU1OIGluIHN0YXRlbWVudCBbLi4uXVxuXHQvLyBDYXVzZWQgYnk6IGNvbS5leGFtcGxlLm15cHJvamVjdC5NeVByb2plY3RTZXJ2bGV0RXhjZXB0aW9uXG5cdC8vIENhdXNlZCBieTogTWlkTGV2ZWxFeGNlcHRpb246IExvd0xldmVsRXhjZXB0aW9uXG5cdC8vIFN1cHByZXNzZWQ6IFJlc291cmNlJENsb3NlRmFpbEV4Y2VwdGlvbjogUmVzb3VyY2UgSUQgPSAwXG5cdCdzdW1tYXJ5Jzoge1xuXHRcdHBhdHRlcm46IC9eKFtcXHQgXSopKD86KD86Q2F1c2VkIGJ5OnxTdXBwcmVzc2VkOnxFeGNlcHRpb24gaW4gdGhyZWFkIFwiW15cIl0qXCIpW1xcdCBdKyk/W1xcdyQuXSsoPzo6LiopPyQvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFtcXHQgXSopKD86KD86Q2F1c2VkIGJ5fFN1cHByZXNzZWQpKD89Oil8RXhjZXB0aW9uIGluIHRocmVhZCkvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblxuXHRcdFx0Ly8gdGhlIGN1cnJlbnQgdGhyZWFkIGlmIHRoZSBzdW1tYXJ5IHN0YXJ0cyB3aXRoICdFeGNlcHRpb24gaW4gdGhyZWFkJ1xuXHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKilcIlteXCJdKlwiLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdleGNlcHRpb25zJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXig6P1xccyopW1xcdyQuXSsoPz06fCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2NsYXNzLW5hbWUnOiAvW1xcdyRdKyQvLFxuXHRcdFx0XHRcdCduYW1lc3BhY2UnOiAvXFxiW2Etel1cXHcqXFxiLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J21lc3NhZ2UnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oOlxccyopXFxTLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvOi9cblx0XHR9XG5cdH0sXG5cblx0Ly8gYXQgb3JnLm1vcnRiYXkuamV0dHkuc2VydmxldC5TZXJ2bGV0SGFuZGxlciRDYWNoZWRDaGFpbi5kb0ZpbHRlcihTZXJ2bGV0SGFuZGxlci5qYXZhOjExNjYpXG5cdC8vIGF0IG9yZy5oc3FsZGIuamRiYy5VdGlsLnRocm93RXJyb3IoVW5rbm93biBTb3VyY2UpIGhlcmUgY291bGQgYmUgc29tZSBub3Rlc1xuXHQvLyBhdCBqYXZhLmJhc2UvamF2YS5sYW5nLkNsYXNzLmZvck5hbWUwKE5hdGl2ZSBNZXRob2QpXG5cdC8vIGF0IFV0aWwuPGluaXQ+KFVua25vd24gU291cmNlKVxuXHQvLyBhdCBjb20uZm9vLmxvYWRlci9mb29AOS4wL2NvbS5mb28uTWFpbi5ydW4oTWFpbi5qYXZhOjEwMSlcblx0Ly8gYXQgY29tLmZvby5sb2FkZXIvL2NvbS5mb28uYmFyLkFwcC5ydW4oQXBwLmphdmE6MTIpXG5cdC8vIGF0IGFjbWVAMi4xL29yZy5hY21lLkxpYi50ZXN0KExpYi5qYXZhOjgwKVxuXHQvLyBhdCBNeUNsYXNzLm1hc2goTXlDbGFzcy5qYXZhOjkpXG5cdC8vXG5cdC8vIE1vcmUgaW5mb3JtYXRpb246XG5cdC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2VuL2phdmEvamF2YXNlLzEzL2RvY3MvYXBpL2phdmEuYmFzZS9qYXZhL2xhbmcvU3RhY2tUcmFjZUVsZW1lbnQuaHRtbCN0b1N0cmluZygpXG5cdC8vXG5cdC8vIEEgdmFsaWQgSmF2YSBtb2R1bGUgbmFtZSBpcyBkZWZpbmVkIGFzOlxuXHQvLyAgIFwiQSBtb2R1bGUgbmFtZSBjb25zaXN0cyBvZiBvbmUgb3IgbW9yZSBKYXZhIGlkZW50aWZpZXJzIChcdTAwQTczLjgpIHNlcGFyYXRlZCBieSBcIi5cIiB0b2tlbnMuXCJcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlL3NwZWNzL2pscy9zZTkvaHRtbC9qbHMtNi5odG1sI2pscy1Nb2R1bGVOYW1lXG5cdC8vXG5cdC8vIEEgSmF2YSBtb2R1bGUgdmVyc2lvbiBpcyBkZWZpbmVkIGJ5IHRoaXMgY2xhc3M6XG5cdC8vIGh0dHBzOi8vZG9jcy5vcmFjbGUuY29tL2phdmFzZS85L2RvY3MvYXBpL2phdmEvbGFuZy9tb2R1bGUvTW9kdWxlRGVzY3JpcHRvci5WZXJzaW9uLmh0bWxcblx0Ly8gVGhpcyBpcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGBwYXJzZWAgbWV0aG9kIGluIEpESzEzOlxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vbWF0Y2RhYy9qZGsvYmxvYi8yMzA1ZGY3MWQxYjc3MTAyNjZhZTA5NTZkNzM5MjdhMjI1MTMyYzBmL3NyYy9qYXZhLmJhc2Uvc2hhcmUvY2xhc3Nlcy9qYXZhL2xhbmcvbW9kdWxlL01vZHVsZURlc2NyaXB0b3IuamF2YSNMMTEwOFxuXHQvLyBIb3dldmVyLCB0byBrZWVwIHRoaXMgc2ltcGxlLCBhIHZlcnNpb24gd2lsbCBiZSBtYXRjaGVkIGJ5IHRoZSBwYXR0ZXJuIC9AW1xcdyQuKy1dKi8uXG5cdCdzdGFjay1mcmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKWF0ICg/OltcXHckLi9dfEBbXFx3JC4rLV0qXFwvKSsoPzo8aW5pdD4pP1xcKFteKCldKlxcKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKilhdCg/PSApLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdzb3VyY2UnOiBbXG5cdFx0XHRcdC8vIChNYWluLmphdmE6MTUpXG5cdFx0XHRcdC8vIChNYWluLnNjYWxhOjE1KVxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpXFx3K1xcLlxcdys6XFxkKyg/PVxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZmlsZSc6IC9eXFx3K1xcLlxcdysvLFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovLFxuXHRcdFx0XHRcdFx0J2xpbmUtbnVtYmVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFxkK1xcYi8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0Ly8gKFVua25vd24gU291cmNlKVxuXHRcdFx0XHQvLyAoTmF0aXZlIE1ldGhvZClcblx0XHRcdFx0Ly8gKC4uLnNvbWV0aGluZy4uLilcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFwoKVteKCldKig/PVxcKSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQna2V5d29yZCc6IC9eKD86TmF0aXZlIE1ldGhvZHxVbmtub3duIFNvdXJjZSkkL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XSxcblx0XHRcdCdjbGFzcy1uYW1lJzogL1tcXHckXSsoPz1cXC4oPzo8aW5pdD58W1xcdyRdKylcXCgpLyxcblx0XHRcdCdmdW5jdGlvbic6IC8oPzo8aW5pdD58W1xcdyRdKykoPz1cXCgpLyxcblx0XHRcdCdjbGFzcy1sb2FkZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxzKVthLXpdXFx3Kig/OlxcLlthLXpdXFx3KikqKD89XFwvW1xcd0AkLl0qXFwvKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbmFtZXNwYWNlJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdtb2R1bGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xccy9dKVthLXpdXFx3Kig/OlxcLlthLXpdXFx3KikqKD86QFtcXHckListXSopPyg/PVxcLykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQndmVyc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oQClbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tALl0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86XFxiW2Etel1cXHcqXFwuKSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKS8uXS9cblx0XHR9XG5cdH0sXG5cblx0Ly8gLi4uIDMyIG1vcmVcblx0Ly8gLi4uIDMyIGNvbW1vbiBmcmFtZXMgb21pdHRlZFxuXHQnbW9yZSc6IHtcblx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKVxcLnszfSBcXGQrIFthLXpdKyg/OiBbYS16XSspKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuezN9Lyxcblx0XHRcdCdudW1iZXInOiAvXFxkKy8sXG5cdFx0XHQna2V5d29yZCc6IC9cXGJbYS16XSsoPzogW2Etel0rKSpcXGIvXG5cdFx0fVxuXHR9XG5cbn07XG5cblByaXNtLmxhbmd1YWdlcy5qZXhsID0ge1xuXHQnc3RyaW5nJzogLyhbXCInXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdCd0cmFuc2Zvcm0nOiB7XG5cdFx0cGF0dGVybjogLyhcXHxcXHMqKVthLXpBLVpcdTA0MzAtXHUwNDRGXHUwNDEwLVx1MDQyRl9cXHUwMEMwLVxcdTAwRDZcXHUwMEQ4LVxcdTAwRjZcXHUwMEY4LVxcdTAwRkYkXVtcXHdcdTA0MzAtXHUwNDRGXHUwNDEwLVx1MDQyRlxcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRiRdKi8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZnVuY3Rpb24nOiAvW2EtekEtWlx1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGX1xcdTAwQzAtXFx1MDBENlxcdTAwRDgtXFx1MDBGNlxcdTAwRjgtXFx1MDBGRiRdW1xcd1x1MDQzMC1cdTA0NEZcdTA0MTAtXHUwNDJGXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMEZGJF0qXFxzKig/PVxcKCkvLFxuXHQnbnVtYmVyJzogL1xcYlxcZCsoPzpcXC5cXGQrKT9cXGJ8XFxCXFwuXFxkK1xcYi8sXG5cdCdvcGVyYXRvcic6IC9bPD4hXT0/fC18XFwrfCYmfD09fFxcfFxcfD98XFwvXFwvP3xbPzoqXiVdLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQna2V5d29yZCc6IC9cXGJpblxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCksLl0vLFxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmpvbGllID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcW1xcc1xcU118W15cIlxcXFxdKSpcIi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLygoPzpcXGIoPzphc3xjb3VyaWVyfGVtYmVkfGlufGlucHV0UG9ydHxvdXRwdXRQb3J0fHNlcnZpY2UpXFxifEApWyBcXHRdKilcXHcrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFzfGNIfGNvbXB8Y29uY3VycmVudHxjb25zdGFudHN8Y291cmllcnxjc2V0fGNzZXRzfGRlZmF1bHR8ZGVmaW5lfGVsc2V8ZW1iZWR8ZW1iZWRkZWR8ZXhlY3V0aW9ufGV4aXR8ZXh0ZW5kZXJ8Zm9yfGZvcmVhY2h8Zm9yd2FyZHxmcm9tfGdsb2JhbHxpZnxpbXBvcnR8aW58aW5jbHVkZXxpbml0fGlucHV0UG9ydHxpbnN0YWxsfGluc3RhbmNlb2Z8aW50ZXJmYWNlfGlzX2RlZmluZWR8bGlua0lufGxpbmtPdXR8bWFpbnxuZXd8bnVsbFByb2Nlc3N8b3V0cHV0UG9ydHxvdmVyfHByaXZhdGV8cHJvdmlkZXxwdWJsaWN8c2NvcGV8c2VxdWVudGlhbHxzZXJ2aWNlfHNpbmdsZXxzcGF3bnxzeW5jaHJvbml6ZWR8dGhpc3x0aHJvd3x0aHJvd3N8dHlwZXx1bmRlZnx1bnRpbHx3aGlsZXx3aXRoKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89WyBcXHRdKltAKF0pL2ksXG5cdCdudW1iZXInOiAvKD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspP2w/L2ksXG5cdCdvcGVyYXRvcic6IC8tWy09Pl0/fFxcK1srPV0/fDxbPD1dP3xbPj0qIV09P3wmJnxcXHxcXHx8Wz9cXC8lXkB8XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKClbXFxde30sOy46XS8sXG5cdCdidWlsdGluJzogL1xcYig/OkJ5dGV8YW55fGJvb2x8Y2hhcnxkb3VibGV8ZW51bXxmbG9hdHxpbnR8bGVuZ3RofGxvbmd8cmFuZ2VzfHJlZ2V4fHN0cmluZ3x1bmRlZmluZWR8dm9pZClcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnam9saWUnLCAna2V5d29yZCcsIHtcblx0J2FnZ3JlZ2F0ZXMnOiB7XG5cdFx0cGF0dGVybjogLyhcXGJBZ2dyZWdhdGVzXFxzKjpcXHMqKSg/OlxcdysoPzpcXHMrd2l0aFxccytcXHcrKT9cXHMqLFxccyopKlxcdysoPzpcXHMrd2l0aFxccytcXHcrKT8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9cXGJ3aXRoXFxiLyxcblx0XHRcdCdjbGFzcy1uYW1lJzogL1xcdysvLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogLywvXG5cdFx0fVxuXHR9LFxuXHQncmVkaXJlY3RzJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiUmVkaXJlY3RzXFxzKjpcXHMqKSg/OlxcdytcXHMqPT5cXHMqXFx3K1xccyosXFxzKikqKD86XFx3K1xccyo9PlxccypcXHcrKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC8sLyxcblx0XHRcdCdjbGFzcy1uYW1lJzogL1xcdysvLFxuXHRcdFx0J29wZXJhdG9yJzogLz0+L1xuXHRcdH1cblx0fSxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBZ2dyZWdhdGVzfFtJaV1udGVyZmFjZXN8SmF2YXxKYXZhc2NyaXB0fEpvbGllfFtMbF1vY2F0aW9ufE9uZVdheXxbUHBdcm90b2NvbHxSZWRpcmVjdHN8UmVxdWVzdFJlc3BvbnNlKVxcYig/PVsgXFx0XSo6KS9cblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IC9cXFxcXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkvLnNvdXJjZTtcblx0dmFyIHN0cmluZyA9IFJlZ0V4cCgvKF58W15cXFxcXSlcIig/OlteXCJcXHJcXG5cXFxcXXxcXFxcW15cXHJcXG4oXXxfXykqXCIvLnNvdXJjZS5yZXBsYWNlKC9fXy9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBpbnRlcnBvbGF0aW9uOyB9KSk7XG5cdHZhciBzdHJpbmdJbnRlcnBvbGF0aW9uID0ge1xuXHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKikvLnNvdXJjZSArIGludGVycG9sYXRpb24pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXFxcXFwoKVtcXHNcXFNdKyg/PVxcKSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFxcXFwofFxcKSQvXG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdHZhciBqcSA9IFByaXNtLmxhbmd1YWdlcy5qcSA9IHtcblx0XHQnY29tbWVudCc6IC8jLiovLFxuXHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChzdHJpbmcuc291cmNlICsgLyg/PVxccyo6KD8hOikpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZTogc3RyaW5nSW50ZXJwb2xhdGlvblxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IHN0cmluZyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHN0cmluZ0ludGVycG9sYXRpb25cblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGJkZWZcXHMrKVthLXpfXVxcdysvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0J3ZhcmlhYmxlJzogL1xcQlxcJFxcdysvLFxuXHRcdCdwcm9wZXJ0eS1saXRlcmFsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqOig/ITopKS9pLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmFzfGJyZWFrfGNhdGNofGRlZnxlbGlmfGVsc2V8ZW5kfGZvcmVhY2h8aWZ8aW1wb3J0fGluY2x1ZGV8bGFiZWx8bW9kdWxlfG1vZHVsZW1ldGF8bnVsbHxyZWR1Y2V8dGhlbnx0cnl8d2hpbGUpXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J251bWJlcic6IC8oPzpcXGJcXGQrXFwufFxcQlxcLik/XFxiXFxkKyg/OltlRV1bKy1dP1xcZCspP1xcYi8sXG5cblx0XHQnb3BlcmF0b3InOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXHw9Py8sXG5cdFx0XHRcdGFsaWFzOiAncGlwZSdcblx0XHRcdH0sXG5cdFx0XHQvXFwuXFwufFshPTw+XT89fFxcP1xcL1xcL3xcXC9cXC89P3xbLSsqLyVdPT98Wzw+P118XFxiKD86YW5kfG5vdHxvcilcXGIvXG5cdFx0XSxcblx0XHQnYy1zdHlsZS1mdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvOjp8WygpXFxbXFxde30sOjtdfFxcLig/PVxccypbXFxbXFx3JF0pLyxcblx0XHQnZG90Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcLi8sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9XG5cdH07XG5cblx0c3RyaW5nSW50ZXJwb2xhdGlvbi5pbnRlcnBvbGF0aW9uLmluc2lkZS5jb250ZW50Lmluc2lkZSA9IGpxO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHlwZXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFzY3JpcHQnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGV4dGVuZHN8aW1wbGVtZW50c3xpbnN0YW5jZW9mfGludGVyZmFjZXxuZXd8dHlwZSlcXHMrKSg/IWtleW9mXFxiKSg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPzpcXHMqPCg/OltePD5dfDwoPzpbXjw+XXw8W148Pl0qPikqPikqPik/Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IC9cXGIoPzpBcnJheXxGdW5jdGlvbnxQcm9taXNlfGFueXxib29sZWFufGNvbnNvbGV8bmV2ZXJ8bnVtYmVyfHN0cmluZ3xzeW1ib2x8dW5rbm93bilcXGIvLFxuXHR9KTtcblxuXHQvLyBUaGUga2V5d29yZHMgVHlwZVNjcmlwdCBhZGRzIHRvIEphdmFTY3JpcHRcblx0UHJpc20ubGFuZ3VhZ2VzLnR5cGVzY3JpcHQua2V5d29yZC5wdXNoKFxuXHRcdC9cXGIoPzphYnN0cmFjdHxkZWNsYXJlfGlzfGtleW9mfHJlYWRvbmx5fHJlcXVpcmUpXFxiLyxcblx0XHQvLyBrZXl3b3JkcyB0aGF0IGhhdmUgdG8gYmUgZm9sbG93ZWQgYnkgYW4gaWRlbnRpZmllclxuXHRcdC9cXGIoPzphc3NlcnRzfGluZmVyfGludGVyZmFjZXxtb2R1bGV8bmFtZXNwYWNlfHR5cGUpXFxiKD89XFxzKig/Olt7XyRhLXpBLVpcXHhBMC1cXHVGRkZGXXwkKSkvLFxuXHRcdC8vIFRoaXMgaXMgZm9yIGBpbXBvcnQgdHlwZSAqLCB7fWBcblx0XHQvXFxidHlwZVxcYig/PVxccyooPzpbXFx7Kl18JCkpL1xuXHQpO1xuXG5cdC8vIGRvZXNuJ3Qgd29yayB3aXRoIFRTIGJlY2F1c2UgVFMgaXMgdG9vIGNvbXBsZXhcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0WydwYXJhbWV0ZXInXTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0WydsaXRlcmFsLXByb3BlcnR5J107XG5cblx0Ly8gYSB2ZXJzaW9uIG9mIHR5cGVzY3JpcHQgc3BlY2lmaWNhbGx5IGZvciBoaWdobGlnaHRpbmcgdHlwZXNcblx0dmFyIHR5cGVJbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCd0eXBlc2NyaXB0Jywge30pO1xuXHRkZWxldGUgdHlwZUluc2lkZVsnY2xhc3MtbmFtZSddO1xuXG5cdFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0WydjbGFzcy1uYW1lJ10uaW5zaWRlID0gdHlwZUluc2lkZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd0eXBlc2NyaXB0JywgJ2Z1bmN0aW9uJywge1xuXHRcdCdkZWNvcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFskXFx3XFx4QTAtXFx1RkZGRl0rLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15ALyxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZnVuY3Rpb24nOiAvXltcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdnZW5lcmljLWZ1bmN0aW9uJzoge1xuXHRcdFx0Ly8gZS5nLiBmb288VCBleHRlbmRzIFwiYmFyXCIgfCBcImJhelwiPiggLi4uXG5cdFx0XHRwYXR0ZXJuOiAvIz8oPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRl0oPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGXSkqXFxzKjwoPzpbXjw+XXw8KD86W148Pl18PFtePD5dKj4pKj4pKj4oPz1cXHMqXFwoKS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2Z1bmN0aW9uJzogL14jPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSovLFxuXHRcdFx0XHQnZ2VuZXJpYyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvPFtcXHNcXFNdKy8sIC8vIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IDxcblx0XHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHMgPSBQcmlzbS5sYW5ndWFnZXMudHlwZXNjcmlwdDtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGphdmFzY3JpcHQgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdDtcblxuXHR2YXIgdHlwZSA9IC9cXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXnt9XSpcXH0pKlxcfSkrXFx9Ly5zb3VyY2U7XG5cdHZhciBwYXJhbWV0ZXJQcmVmaXggPSAnKEAoPzphcmd8YXJndW1lbnR8cGFyYW18cHJvcGVydHkpXFxcXHMrKD86JyArIHR5cGUgKyAnXFxcXHMrKT8pJztcblxuXHRQcmlzbS5sYW5ndWFnZXMuanNkb2MgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqYXZhZG9jbGlrZScsIHtcblx0XHQncGFyYW1ldGVyJzoge1xuXHRcdFx0Ly8gQHBhcmFtIHtzdHJpbmd9IGZvbyAtIGZvbyBiYXJcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChwYXJhbWV0ZXJQcmVmaXggKyAvKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRi5dKSsoPz1cXHN8JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqc2RvYycsICdrZXl3b3JkJywge1xuXHRcdCdvcHRpb25hbC1wYXJhbWV0ZXInOiB7XG5cdFx0XHQvLyBAcGFyYW0ge3N0cmluZ30gW2Jhei5mb289XCJiYXJcIl0gZm9vIGJhclxuXHRcdFx0cGF0dGVybjogUmVnRXhwKHBhcmFtZXRlclByZWZpeCArIC9cXFsoPzooPyFcXHMpWyRcXHdcXHhBMC1cXHVGRkZGLl0pKyg/Oj1bXltcXF1dKyk/XFxdKD89XFxzfCQpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncGFyYW1ldGVyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcWylbJFxcd1xceEEwLVxcdUZGRkZcXC5dKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD0pW1xcc1xcU10qKD89XFxdJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBqYXZhc2NyaXB0LFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YXNjcmlwdCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1s9W1xcXV0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oQCg/OmF1Z21lbnRzfGNsYXNzfGV4dGVuZHN8aW50ZXJmYWNlfG1lbWJlcm9mIT98dGVtcGxhdGV8dGhpc3x0eXBlZGVmKVxccysoPzo8VFlQRT5cXHMrKT8pW0EtWl1cXHcqKD86XFwuW0EtWl1cXHcqKSovLnNvdXJjZS5yZXBsYWNlKC88VFlQRT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZTsgfSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhAW2Etel0rXFxcXHMrKScgKyB0eXBlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3N0cmluZyc6IGphdmFzY3JpcHQuc3RyaW5nLFxuXHRcdFx0XHRcdCdudW1iZXInOiBqYXZhc2NyaXB0Lm51bWJlcixcblx0XHRcdFx0XHQnYm9vbGVhbic6IGphdmFzY3JpcHQuYm9vbGVhbixcblx0XHRcdFx0XHQna2V5d29yZCc6IFByaXNtLmxhbmd1YWdlcy50eXBlc2NyaXB0LmtleXdvcmQsXG5cdFx0XHRcdFx0J29wZXJhdG9yJzogLz0+fFxcLlxcLlxcLnxbJnw/OipdLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWy4sOz08Pnt9KClbXFxdXS9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2V4YW1wbGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKEBleGFtcGxlXFxzKyg/IVxccykpKD86W15AXFxzXXxcXHMrKD8hXFxzKSkrPyg/PVxccyooPzpcXCpcXHMqKT8oPzpAXFx3fFxcKlxcLykpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvZGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oW1xcdCBdKig/OlxcKlxccyopPylcXFMuKiQvbSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogamF2YXNjcmlwdCxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWphdmFzY3JpcHQnXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5qYXZhZG9jbGlrZS5hZGRTdXBwb3J0KCdqYXZhc2NyaXB0JywgUHJpc20ubGFuZ3VhZ2VzLmpzZG9jKTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdmdW5jdGlvbi12YXJpYWJsZScsIHtcblx0XHQnbWV0aG9kLXZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoXFxcXC5cXFxccyopJyArIFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0WydmdW5jdGlvbi12YXJpYWJsZSddLnBhdHRlcm4uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogWydmdW5jdGlvbi12YXJpYWJsZScsICdtZXRob2QnLCAnZnVuY3Rpb24nLCAncHJvcGVydHktYWNjZXNzJ11cblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnZnVuY3Rpb24nLCB7XG5cdFx0J21ldGhvZCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKFxcXFwuXFxcXHMqKScgKyBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsnZnVuY3Rpb24nXS5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiBbJ2Z1bmN0aW9uJywgJ3Byb3BlcnR5LWFjY2VzcyddXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2NvbnN0YW50Jywge1xuXHRcdCdrbm93bi1jbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBzdGFuZGFyZCBidWlsdC1pbnNcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHNcblx0XHRcdFx0cGF0dGVybjogL1xcYig/Oig/OkZsb2F0KD86MzJ8NjQpfCg/OkludHxVaW50KSg/Ojh8MTZ8MzIpfFVpbnQ4Q2xhbXBlZCk/QXJyYXl8QXJyYXlCdWZmZXJ8QmlnSW50fEJvb2xlYW58RGF0YVZpZXd8RGF0ZXxFcnJvcnxGdW5jdGlvbnxJbnRsfEpTT058KD86V2Vhayk/KD86TWFwfFNldCl8TWF0aHxOdW1iZXJ8T2JqZWN0fFByb21pc2V8UHJveHl8UmVmbGVjdHxSZWdFeHB8U3RyaW5nfFN5bWJvbHxXZWJBc3NlbWJseSlcXGIvLFxuXHRcdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBlcnJvcnNcblx0XHRcdFx0cGF0dGVybjogL1xcYig/OltBLVpdXFx3KilFcnJvclxcYi8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHRcdH1cblx0XHRdXG5cdH0pO1xuXG5cdC8qKlxuXHQgKiBSZXBsYWNlcyB0aGUgYDxJRD5gIHBsYWNlaG9sZGVyIGluIHRoZSBnaXZlbiBwYXR0ZXJuIHdpdGggYSBwYXR0ZXJuIGZvciBnZW5lcmFsIEpTIGlkZW50aWZpZXJzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiB3aXRoSWQoc291cmNlLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAoXG5cdFx0XHRzb3VyY2UucmVwbGFjZSgvPElEPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAvKD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKi8uc291cmNlOyB9KSxcblx0XHRcdGZsYWdzKTtcblx0fVxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqYXZhc2NyaXB0JywgJ2tleXdvcmQnLCB7XG5cdFx0J2ltcG9ydHMnOiB7XG5cdFx0XHQvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWltcG9ydHNcblx0XHRcdHBhdHRlcm46IHdpdGhJZCgvKFxcYmltcG9ydFxcYlxccyopKD86PElEPig/OlxccyosXFxzKig/OlxcKlxccyphc1xccys8SUQ+fFxce1tee31dKlxcfSkpP3xcXCpcXHMqYXNcXHMrPElEPnxcXHtbXnt9XSpcXH0pKD89XFxzKlxcYmZyb21cXGIpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdCdleHBvcnRzJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1leHBvcnRzXG5cdFx0XHRwYXR0ZXJuOiB3aXRoSWQoLyhcXGJleHBvcnRcXGJcXHMqKSg/OlxcKig/Olxccyphc1xccys8SUQ+KT8oPz1cXHMqXFxiZnJvbVxcYil8XFx7W157fV0qXFx9KS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsna2V5d29yZCddLnVuc2hpZnQoXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFzfGRlZmF1bHR8ZXhwb3J0fGZyb218aW1wb3J0KVxcYi8sXG5cdFx0XHRhbGlhczogJ21vZHVsZSdcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzphd2FpdHxicmVha3xjYXRjaHxjb250aW51ZXxkb3xlbHNlfGZpbmFsbHl8Zm9yfGlmfHJldHVybnxzd2l0Y2h8dGhyb3d8dHJ5fHdoaWxlfHlpZWxkKVxcYi8sXG5cdFx0XHRhbGlhczogJ2NvbnRyb2wtZmxvdydcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJudWxsXFxiLyxcblx0XHRcdGFsaWFzOiBbJ251bGwnLCAnbmlsJ11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGJ1bmRlZmluZWRcXGIvLFxuXHRcdFx0YWxpYXM6ICduaWwnXG5cdFx0fVxuXHQpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2phdmFzY3JpcHQnLCAnb3BlcmF0b3InLCB7XG5cdFx0J3NwcmVhZCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXC57M30vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdCdhcnJvdyc6IHtcblx0XHRcdHBhdHRlcm46IC89Pi8sXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnamF2YXNjcmlwdCcsICdwdW5jdHVhdGlvbicsIHtcblx0XHQncHJvcGVydHktYWNjZXNzJzoge1xuXHRcdFx0cGF0dGVybjogd2l0aElkKC8oXFwuXFxzKikjPzxJRD4vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWF5YmUtY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiRcXHdcXHhBMC1cXHVGRkZGXSlbQS1aXVskXFx3XFx4QTAtXFx1RkZGRl0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdkb20nOiB7XG5cdFx0XHQvLyB0aGlzIGNvbnRhaW5zIG9ubHkgYSBmZXcgY29tbW9ubHkgdXNlZCBET00gdmFyaWFibGVzXG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZG9jdW1lbnR8KD86bG9jYWx8c2Vzc2lvbilTdG9yYWdlfGxvY2F0aW9ufG5hdmlnYXRvcnxwZXJmb3JtYW5jZXx3aW5kb3cpXFxiLyxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fSxcblx0XHQnY29uc29sZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJjb25zb2xlKD89XFxzKlxcLikvLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH1cblx0fSk7XG5cblxuXHQvLyBhZGQgJ21heWJlLWNsYXNzLW5hbWUnIHRvIHRva2VucyB3aGljaCBtaWdodCBiZSBhIGNsYXNzIG5hbWVcblx0dmFyIG1heWJlQ2xhc3NOYW1lVG9rZW5zID0gWydmdW5jdGlvbicsICdmdW5jdGlvbi12YXJpYWJsZScsICdtZXRob2QnLCAnbWV0aG9kLXZhcmlhYmxlJywgJ3Byb3BlcnR5LWFjY2VzcyddO1xuXG5cdGZvciAodmFyIGkgPSAwOyBpIDwgbWF5YmVDbGFzc05hbWVUb2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHR2YXIgdG9rZW4gPSBtYXliZUNsYXNzTmFtZVRva2Vuc1tpXTtcblx0XHR2YXIgdmFsdWUgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFt0b2tlbl07XG5cblx0XHQvLyBjb252ZXJ0IHJlZ2V4IHRvIG9iamVjdFxuXHRcdGlmIChQcmlzbS51dGlsLnR5cGUodmFsdWUpID09PSAnUmVnRXhwJykge1xuXHRcdFx0dmFsdWUgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFt0b2tlbl0gPSB7XG5cdFx0XHRcdHBhdHRlcm46IHZhbHVlXG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIGtlZXAgaW4gbWluZCB0aGF0IHdlIGRvbid0IHN1cHBvcnQgYXJyYXlzXG5cblx0XHR2YXIgaW5zaWRlID0gdmFsdWUuaW5zaWRlIHx8IHt9O1xuXHRcdHZhbHVlLmluc2lkZSA9IGluc2lkZTtcblxuXHRcdGluc2lkZVsnbWF5YmUtY2xhc3MtbmFtZSddID0gL15bQS1aXVtcXHNcXFNdKi87XG5cdH1cblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3d3dy5qc29uLm9yZy9qc29uLWVuLmh0bWxcblByaXNtLmxhbmd1YWdlcy5qc29uID0ge1xuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiKD89XFxzKjopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIig/IVxccyo6KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCkvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnbnVtYmVyJzogLy0/XFxiXFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSxdLyxcblx0J29wZXJhdG9yJzogLzovLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudWxsJzoge1xuXHRcdHBhdHRlcm46IC9cXGJudWxsXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy53ZWJtYW5pZmVzdCA9IFByaXNtLmxhbmd1YWdlcy5qc29uO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHN0cmluZyA9IC8oXCJ8JykoPzpcXFxcKD86XFxyXFxuP3xcXG58Lil8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmpzb241ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnanNvbicsIHtcblx0XHQncHJvcGVydHknOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChzdHJpbmcuc291cmNlICsgJyg/PVxcXFxzKjopJyksXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqOikvLFxuXHRcdFx0XHRhbGlhczogJ3VucXVvdGVkJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IHN0cmluZyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IC9bKy1dP1xcYig/Ok5hTnxJbmZpbml0eXwweFthLWZBLUZcXGRdKylcXGJ8WystXT8oPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86W2VFXVsrLV0/XFxkK1xcYik/L1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuanNvbnAgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqc29uJywge1xuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXSgpOywuXS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdqc29ucCcsICdwdW5jdHVhdGlvbicsIHtcblx0J2Z1bmN0aW9uJzogLyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSooPz1cXHMqXFwoKS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuanNzdGFja3RyYWNlID0ge1xuXHQnZXJyb3ItbWVzc2FnZSc6IHtcblx0XHRwYXR0ZXJuOiAvXlxcUy4qL20sXG5cdFx0YWxpYXM6ICdzdHJpbmcnXG5cdH0sXG5cblx0J3N0YWNrLWZyYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSspYXRbIFxcdF0uKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbm90LW15LWNvZGUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eYXRbIFxcdF0rKD8hXFxzKSg/Om5vZGVcXC5qc3w8dW5rbm93bj58LiooPzpub2RlX21vZHVsZXN8XFwoPGFub255bW91cz5cXCl8XFwoPHVua25vd24+fDxhbm9ueW1vdXM+JHxcXChpbnRlcm5hbFxcL3xcXChub2RlXFwuanMpKS4qL20sXG5cdFx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHRcdH0sXG5cblx0XHRcdCdmaWxlbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhcXGJhdFxccysoPyFcXHMpfFxcKCkoPzpbYS16QS1aXTopP1teKCk6XSsoPz06KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAndXJsJ1xuXHRcdFx0fSxcblxuXHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYmF0XFxzKyg/Om5ld1xccyspPykoPyFcXHMpW18kYS16QS1aXFx4QTAtXFx1RkZGRjxdWy4kXFx3XFx4QTAtXFx1RkZGRjw+XSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWygpXS8sXG5cblx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmF0fG5ldylcXGIvLFxuXG5cdFx0XHQnYWxpYXMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFsoPzphc1xccyspPyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXVskXFx3XFx4QTAtXFx1RkZGRl0qXFxdLyxcblx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdH0sXG5cblx0XHRcdCdsaW5lLW51bWJlcic6IHtcblx0XHRcdFx0cGF0dGVybjogLzpcXGQrKD86OlxcZCspP1xcYi8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHR9XG5cdH1cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgdGVtcGxhdGVTdHJpbmcgPSBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFsndGVtcGxhdGUtc3RyaW5nJ107XG5cblx0Ly8gc2VlIHRoZSBwYXR0ZXJuIGluIHByaXNtLWphdmFzY3JpcHQuanNcblx0dmFyIHRlbXBsYXRlTGl0ZXJhbFBhdHRlcm4gPSB0ZW1wbGF0ZVN0cmluZy5wYXR0ZXJuLnNvdXJjZTtcblx0dmFyIGludGVycG9sYXRpb25PYmplY3QgPSB0ZW1wbGF0ZVN0cmluZy5pbnNpZGVbJ2ludGVycG9sYXRpb24nXTtcblx0dmFyIGludGVycG9sYXRpb25QdW5jdHVhdGlvbk9iamVjdCA9IGludGVycG9sYXRpb25PYmplY3QuaW5zaWRlWydpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJ107XG5cdHZhciBpbnRlcnBvbGF0aW9uUGF0dGVybiA9IGludGVycG9sYXRpb25PYmplY3QucGF0dGVybi5zb3VyY2U7XG5cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyBwYXR0ZXJuIHRvIG1hdGNoIGEgdGVtcGxhdGUgc3RyaW5nIHdpdGggYSBzcGVjaWFsIHRhZy5cblx0ICpcblx0ICogVGhpcyB3aWxsIHJldHVybiBgdW5kZWZpbmVkYCBpZiB0aGVyZSBpcyBubyBncmFtbWFyIHdpdGggdGhlIGdpdmVuIGxhbmd1YWdlIGlkLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbGFuZ3VhZ2UgVGhlIGxhbmd1YWdlIGlkIG9mIHRoZSBlbWJlZGRlZCBsYW5ndWFnZS4gRS5nLiBgbWFya2Rvd25gLlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gdGFnIFRoZSByZWdleCBwYXR0ZXJuIHRvIG1hdGNoIHRoZSB0YWcuXG5cdCAqIEByZXR1cm5zIHtvYmplY3QgfCB1bmRlZmluZWR9XG5cdCAqIEBleGFtcGxlXG5cdCAqIGNyZWF0ZVRlbXBsYXRlKCdjc3MnLCAvXFxiY3NzLy5zb3VyY2UpO1xuXHQgKi9cblx0ZnVuY3Rpb24gY3JlYXRlVGVtcGxhdGUobGFuZ3VhZ2UsIHRhZykge1xuXHRcdGlmICghUHJpc20ubGFuZ3VhZ2VzW2xhbmd1YWdlXSkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCcoKD86JyArIHRhZyArICcpXFxcXHMqKScgKyB0ZW1wbGF0ZUxpdGVyYWxQYXR0ZXJuKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3RlbXBsYXRlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eYHxgJC8sXG5cdFx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdlbWJlZGRlZC1jb2RlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiBsYW5ndWFnZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRbJ3RlbXBsYXRlLXN0cmluZyddID0gW1xuXHRcdC8vIHN0eWxlZC1qc3g6XG5cdFx0Ly8gICBjc3NgYSB7IGNvbG9yOiAjMjVGOyB9YFxuXHRcdC8vIHN0eWxlZC1jb21wb25lbnRzOlxuXHRcdC8vICAgc3R5bGVkLmgxYGNvbG9yOiByZWQ7YFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdjc3MnLCAvXFxiKD86c3R5bGVkKD86XFwoW14pXSpcXCkpPyg/OlxccypcXC5cXHMqXFx3Kyg/OlxcKFteKV0qXFwpKSopKnxjc3MoPzpcXHMqXFwuXFxzKig/Omdsb2JhbHxyZXNvbHZlKSk/fGNyZWF0ZUdsb2JhbFN0eWxlfGtleWZyYW1lcykvLnNvdXJjZSksXG5cblx0XHQvLyBodG1sYDxwPjwvcD5gXG5cdFx0Ly8gZGl2LmlubmVySFRNTCA9IGA8cD48L3A+YFxuXHRcdGNyZWF0ZVRlbXBsYXRlKCdodG1sJywgL1xcYmh0bWx8XFwuXFxzKig/OmlubmVyfG91dGVyKUhUTUxcXHMqXFwrPz0vLnNvdXJjZSksXG5cblx0XHQvLyBzdmdgPHBhdGggZmlsbD1cIiNmZmZcIiBkPVwiTTU1LjM3IC4uLlwiLz5gXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ3N2ZycsIC9cXGJzdmcvLnNvdXJjZSksXG5cblx0XHQvLyBtZGAjIGgxYCwgbWFya2Rvd25gIyMgaDJgXG5cdFx0Y3JlYXRlVGVtcGxhdGUoJ21hcmtkb3duJywgL1xcYig/Om1hcmtkb3dufG1kKS8uc291cmNlKSxcblxuXHRcdC8vIGdxbGAuLi5gLCBncmFwaHFsYC4uLmAsIGdyYXBocWwuZXhwZXJpbWVudGFsYC4uLmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnZ3JhcGhxbCcsIC9cXGIoPzpncWx8Z3JhcGhxbCg/OlxccypcXC5cXHMqZXhwZXJpbWVudGFsKT8pLy5zb3VyY2UpLFxuXG5cdFx0Ly8gc3FsYC4uLmBcblx0XHRjcmVhdGVUZW1wbGF0ZSgnc3FsJywgL1xcYnNxbC8uc291cmNlKSxcblxuXHRcdC8vIHZhbmlsbGEgdGVtcGxhdGUgc3RyaW5nXG5cdFx0dGVtcGxhdGVTdHJpbmdcblx0XS5maWx0ZXIoQm9vbGVhbik7XG5cblxuXHQvKipcblx0ICogUmV0dXJucyBhIHNwZWNpZmljIHBsYWNlaG9sZGVyIGxpdGVyYWwgZm9yIHRoZSBnaXZlbiBsYW5ndWFnZS5cblx0ICpcblx0ICogQHBhcmFtIHtudW1iZXJ9IGNvdW50ZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmd1YWdlXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBnZXRQbGFjZWhvbGRlcihjb3VudGVyLCBsYW5ndWFnZSkge1xuXHRcdHJldHVybiAnX19fJyArIGxhbmd1YWdlLnRvVXBwZXJDYXNlKCkgKyAnXycgKyBjb3VudGVyICsgJ19fXyc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdG9rZW5zIG9mIGBQcmlzbS50b2tlbml6ZWAgYnV0IGFsc28gcnVucyB0aGUgYGJlZm9yZS10b2tlbml6ZWAgYW5kIGBhZnRlci10b2tlbml6ZWAgaG9va3MuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG5cdCAqIEBwYXJhbSB7YW55fSBncmFtbWFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcmV0dXJucyB7KHN0cmluZ3xUb2tlbilbXX1cblx0ICovXG5cdGZ1bmN0aW9uIHRva2VuaXplV2l0aEhvb2tzKGNvZGUsIGdyYW1tYXIsIGxhbmd1YWdlKSB7XG5cdFx0dmFyIGVudiA9IHtcblx0XHRcdGNvZGU6IGNvZGUsXG5cdFx0XHRncmFtbWFyOiBncmFtbWFyLFxuXHRcdFx0bGFuZ3VhZ2U6IGxhbmd1YWdlXG5cdFx0fTtcblx0XHRQcmlzbS5ob29rcy5ydW4oJ2JlZm9yZS10b2tlbml6ZScsIGVudik7XG5cdFx0ZW52LnRva2VucyA9IFByaXNtLnRva2VuaXplKGVudi5jb2RlLCBlbnYuZ3JhbW1hcik7XG5cdFx0UHJpc20uaG9va3MucnVuKCdhZnRlci10b2tlbml6ZScsIGVudik7XG5cdFx0cmV0dXJuIGVudi50b2tlbnM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdG9rZW4gb2YgdGhlIGdpdmVuIEphdmFTY3JpcHQgaW50ZXJwb2xhdGlvbiBleHByZXNzaW9uLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gZXhwcmVzc2lvbiBUaGUgY29kZSBvZiB0aGUgZXhwcmVzc2lvbi4gRS5nLiBgXCIkezQyfVwiYFxuXHQgKiBAcmV0dXJucyB7VG9rZW59XG5cdCAqL1xuXHRmdW5jdGlvbiB0b2tlbml6ZUludGVycG9sYXRpb25FeHByZXNzaW9uKGV4cHJlc3Npb24pIHtcblx0XHR2YXIgdGVtcEdyYW1tYXIgPSB7fTtcblx0XHR0ZW1wR3JhbW1hclsnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbiddID0gaW50ZXJwb2xhdGlvblB1bmN0dWF0aW9uT2JqZWN0O1xuXG5cdFx0LyoqIEB0eXBlIHtBcnJheX0gKi9cblx0XHR2YXIgdG9rZW5zID0gUHJpc20udG9rZW5pemUoZXhwcmVzc2lvbiwgdGVtcEdyYW1tYXIpO1xuXHRcdGlmICh0b2tlbnMubGVuZ3RoID09PSAzKSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIFRoZSB0b2tlbiBhcnJheSB3aWxsIGxvb2sgbGlrZSB0aGlzXG5cdFx0XHQgKiBbXG5cdFx0XHQgKiAgICAgW1wiaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvblwiLCBcIiR7XCJdXG5cdFx0XHQgKiAgICAgXCIuLi5cIiAvLyBKYXZhU2NyaXB0IGV4cHJlc3Npb24gb2YgdGhlIGludGVycG9sYXRpb25cblx0XHRcdCAqICAgICBbXCJpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uXCIsIFwifVwiXVxuXHRcdFx0ICogXVxuXHRcdFx0ICovXG5cblx0XHRcdHZhciBhcmdzID0gWzEsIDFdO1xuXHRcdFx0YXJncy5wdXNoLmFwcGx5KGFyZ3MsIHRva2VuaXplV2l0aEhvb2tzKHRva2Vuc1sxXSwgUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHQsICdqYXZhc2NyaXB0JykpO1xuXG5cdFx0XHR0b2tlbnMuc3BsaWNlLmFwcGx5KHRva2VucywgYXJncyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG5ldyBQcmlzbS5Ub2tlbignaW50ZXJwb2xhdGlvbicsIHRva2VucywgaW50ZXJwb2xhdGlvbk9iamVjdC5hbGlhcywgZXhwcmVzc2lvbik7XG5cdH1cblxuXHQvKipcblx0ICogVG9rZW5pemVzIHRoZSBnaXZlbiBjb2RlIHdpdGggc3VwcG9ydCBmb3IgSmF2YVNjcmlwdCBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb25zIG1peGVkIGluLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGhhcyAzIHBoYXNlczpcblx0ICpcblx0ICogMS4gUmVwbGFjZSBhbGwgSmF2YVNjcmlwdCBpbnRlcnBvbGF0aW9uIGV4cHJlc3Npb24gd2l0aCBhIHBsYWNlaG9sZGVyLlxuXHQgKiAgICBUaGUgcGxhY2Vob2xkZXIgd2lsbCBoYXZlIHRoZSBzeW50YXggb2YgYSBpZGVudGlmeSBvZiB0aGUgdGFyZ2V0IGxhbmd1YWdlLlxuXHQgKiAyLiBUb2tlbml6ZSB0aGUgY29kZSB3aXRoIHBsYWNlaG9sZGVycy5cblx0ICogMy4gVG9rZW5pemUgdGhlIGludGVycG9sYXRpb24gZXhwcmVzc2lvbnMgYW5kIHJlLWluc2VydCB0aGVtIGludG8gdGhlIHRva2VuaXplIGNvZGUuXG5cdCAqICAgIFRoZSBpbnNlcnRpb24gb25seSB3b3JrcyBpZiBhIHBsYWNlaG9sZGVyIGhhc24ndCBiZWVuIFwicmlwcGVkIGFwYXJ0XCIgbWVhbmluZyB0aGF0IHRoZSBwbGFjZWhvbGRlciBoYXMgYmVlblxuXHQgKiAgICB0b2tlbml6ZWQgYXMgdHdvIHRva2VucyBieSB0aGUgZ3JhbW1hciBvZiB0aGUgZW1iZWRkZWQgbGFuZ3VhZ2UuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBncmFtbWFyXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBsYW5ndWFnZVxuXHQgKiBAcmV0dXJucyB7VG9rZW59XG5cdCAqL1xuXHRmdW5jdGlvbiB0b2tlbml6ZUVtYmVkZGVkKGNvZGUsIGdyYW1tYXIsIGxhbmd1YWdlKSB7XG5cdFx0Ly8gMS4gRmlyc3QgZmlsdGVyIG91dCBhbGwgaW50ZXJwb2xhdGlvbnNcblxuXHRcdC8vIGJlY2F1c2UgdGhleSBtaWdodCBiZSBlc2NhcGVkLCB3ZSBuZWVkIGEgbG9va2JlaGluZCwgc28gd2UgdXNlIFByaXNtXG5cdFx0LyoqIEB0eXBlIHsoVG9rZW58c3RyaW5nKVtdfSAqL1xuXHRcdHZhciBfdG9rZW5zID0gUHJpc20udG9rZW5pemUoY29kZSwge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnRlcnBvbGF0aW9uUGF0dGVybiksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIHJlcGxhY2UgYWxsIGludGVycG9sYXRpb25zIHdpdGggYSBwbGFjZWhvbGRlciB3aGljaCBpcyBub3QgaW4gdGhlIGNvZGUgYWxyZWFkeVxuXHRcdHZhciBwbGFjZWhvbGRlckNvdW50ZXIgPSAwO1xuXHRcdC8qKiBAdHlwZSB7T2JqZWN0PHN0cmluZywgc3RyaW5nPn0gKi9cblx0XHR2YXIgcGxhY2Vob2xkZXJNYXAgPSB7fTtcblx0XHR2YXIgZW1iZWRkZWRDb2RlID0gX3Rva2Vucy5tYXAoZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm4gdG9rZW47XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIgaW50ZXJwb2xhdGlvbkV4cHJlc3Npb24gPSB0b2tlbi5jb250ZW50O1xuXG5cdFx0XHRcdHZhciBwbGFjZWhvbGRlcjtcblx0XHRcdFx0d2hpbGUgKGNvZGUuaW5kZXhPZihwbGFjZWhvbGRlciA9IGdldFBsYWNlaG9sZGVyKHBsYWNlaG9sZGVyQ291bnRlcisrLCBsYW5ndWFnZSkpICE9PSAtMSkgeyAvKiBub29wICovIH1cblx0XHRcdFx0cGxhY2Vob2xkZXJNYXBbcGxhY2Vob2xkZXJdID0gaW50ZXJwb2xhdGlvbkV4cHJlc3Npb247XG5cdFx0XHRcdHJldHVybiBwbGFjZWhvbGRlcjtcblx0XHRcdH1cblx0XHR9KS5qb2luKCcnKTtcblxuXG5cdFx0Ly8gMi4gVG9rZW5pemUgdGhlIGVtYmVkZGVkIGNvZGVcblxuXHRcdHZhciBlbWJlZGRlZFRva2VucyA9IHRva2VuaXplV2l0aEhvb2tzKGVtYmVkZGVkQ29kZSwgZ3JhbW1hciwgbGFuZ3VhZ2UpO1xuXG5cblx0XHQvLyAzLiBSZS1pbnNlcnQgdGhlIGludGVycG9sYXRpb25cblxuXHRcdHZhciBwbGFjZWhvbGRlcnMgPSBPYmplY3Qua2V5cyhwbGFjZWhvbGRlck1hcCk7XG5cdFx0cGxhY2Vob2xkZXJDb3VudGVyID0gMDtcblxuXHRcdC8qKlxuXHRcdCAqXG5cdFx0ICogQHBhcmFtIHsoVG9rZW58c3RyaW5nKVtdfSB0b2tlbnNcblx0XHQgKiBAcmV0dXJucyB7dm9pZH1cblx0XHQgKi9cblx0XHRmdW5jdGlvbiB3YWxrVG9rZW5zKHRva2Vucykge1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHBsYWNlaG9sZGVyQ291bnRlciA+PSBwbGFjZWhvbGRlcnMubGVuZ3RoKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXG5cdFx0XHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB0b2tlbi5jb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdHZhciBwbGFjZWhvbGRlciA9IHBsYWNlaG9sZGVyc1twbGFjZWhvbGRlckNvdW50ZXJdO1xuXHRcdFx0XHRcdHZhciBzID0gdHlwZW9mIHRva2VuID09PSAnc3RyaW5nJyA/IHRva2VuIDogLyoqIEB0eXBlIHtzdHJpbmd9ICovICh0b2tlbi5jb250ZW50KTtcblxuXHRcdFx0XHRcdHZhciBpbmRleCA9IHMuaW5kZXhPZihwbGFjZWhvbGRlcik7XG5cdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0KytwbGFjZWhvbGRlckNvdW50ZXI7XG5cblx0XHRcdFx0XHRcdHZhciBiZWZvcmUgPSBzLnN1YnN0cmluZygwLCBpbmRleCk7XG5cdFx0XHRcdFx0XHR2YXIgbWlkZGxlID0gdG9rZW5pemVJbnRlcnBvbGF0aW9uRXhwcmVzc2lvbihwbGFjZWhvbGRlck1hcFtwbGFjZWhvbGRlcl0pO1xuXHRcdFx0XHRcdFx0dmFyIGFmdGVyID0gcy5zdWJzdHJpbmcoaW5kZXggKyBwbGFjZWhvbGRlci5sZW5ndGgpO1xuXG5cdFx0XHRcdFx0XHR2YXIgcmVwbGFjZW1lbnQgPSBbXTtcblx0XHRcdFx0XHRcdGlmIChiZWZvcmUpIHtcblx0XHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaChiZWZvcmUpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmVwbGFjZW1lbnQucHVzaChtaWRkbGUpO1xuXHRcdFx0XHRcdFx0aWYgKGFmdGVyKSB7XG5cdFx0XHRcdFx0XHRcdHZhciBhZnRlclRva2VucyA9IFthZnRlcl07XG5cdFx0XHRcdFx0XHRcdHdhbGtUb2tlbnMoYWZ0ZXJUb2tlbnMpO1xuXHRcdFx0XHRcdFx0XHRyZXBsYWNlbWVudC5wdXNoLmFwcGx5KHJlcGxhY2VtZW50LCBhZnRlclRva2Vucyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UuYXBwbHkodG9rZW5zLCBbaSwgMV0uY29uY2F0KHJlcGxhY2VtZW50KSk7XG5cdFx0XHRcdFx0XHRcdGkgKz0gcmVwbGFjZW1lbnQubGVuZ3RoIC0gMTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRva2VuLmNvbnRlbnQgPSByZXBsYWNlbWVudDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFyIGNvbnRlbnQgPSB0b2tlbi5jb250ZW50O1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KGNvbnRlbnQpKSB7XG5cdFx0XHRcdFx0XHR3YWxrVG9rZW5zKGNvbnRlbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR3YWxrVG9rZW5zKFtjb250ZW50XSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdhbGtUb2tlbnMoZW1iZWRkZWRUb2tlbnMpO1xuXG5cdFx0cmV0dXJuIG5ldyBQcmlzbS5Ub2tlbihsYW5ndWFnZSwgZW1iZWRkZWRUb2tlbnMsICdsYW5ndWFnZS0nICsgbGFuZ3VhZ2UsIGNvZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBsYW5ndWFnZXMgZm9yIHdoaWNoIEpTIHRlbXBsYXRpbmcgd2lsbCBoYW5kbGUgdGFnZ2VkIHRlbXBsYXRlIGxpdGVyYWxzLlxuXHQgKlxuXHQgKiBKUyB0ZW1wbGF0aW5nIGlzbid0IGFjdGl2ZSBmb3Igb25seSBKYXZhU2NyaXB0IGJ1dCBhbHNvIHJlbGF0ZWQgbGFuZ3VhZ2VzIGxpa2UgVHlwZVNjcmlwdCwgSlNYLCBhbmQgVFNYLlxuXHQgKi9cblx0dmFyIHN1cHBvcnRlZExhbmd1YWdlcyA9IHtcblx0XHQnamF2YXNjcmlwdCc6IHRydWUsXG5cdFx0J2pzJzogdHJ1ZSxcblx0XHQndHlwZXNjcmlwdCc6IHRydWUsXG5cdFx0J3RzJzogdHJ1ZSxcblx0XHQnanN4JzogdHJ1ZSxcblx0XHQndHN4JzogdHJ1ZSxcblx0fTtcblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoIShlbnYubGFuZ3VhZ2UgaW4gc3VwcG9ydGVkTGFuZ3VhZ2VzKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8qKlxuXHRcdCAqIEZpbmRzIGFuZCB0b2tlbml6ZXMgYWxsIHRlbXBsYXRlIHN0cmluZ3Mgd2l0aCBhbiBlbWJlZGRlZCBsYW5ndWFnZXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0geyhUb2tlbiB8IHN0cmluZylbXX0gdG9rZW5zXG5cdFx0ICogQHJldHVybnMge3ZvaWR9XG5cdFx0ICovXG5cdFx0ZnVuY3Rpb24gZmluZFRlbXBsYXRlU3RyaW5ncyh0b2tlbnMpIHtcblx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdG9rZW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHZhciBjb250ZW50ID0gdG9rZW4uY29udGVudDtcblx0XHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KGNvbnRlbnQpKSB7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBjb250ZW50ICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0ZmluZFRlbXBsYXRlU3RyaW5ncyhbY29udGVudF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAndGVtcGxhdGUtc3RyaW5nJykge1xuXHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdCAqIEEgSmF2YVNjcmlwdCB0ZW1wbGF0ZS1zdHJpbmcgdG9rZW4gd2lsbCBsb29rIGxpa2UgdGhpczpcblx0XHRcdFx0XHQgKlxuXHRcdFx0XHRcdCAqIFtcInRlbXBsYXRlLXN0cmluZ1wiLCBbXG5cdFx0XHRcdFx0ICogICAgIFtcInRlbXBsYXRlLXB1bmN0dWF0aW9uXCIsIFwiYFwiXSxcblx0XHRcdFx0XHQgKiAgICAgKFxuXHRcdFx0XHRcdCAqICAgICAgICAgQW4gYXJyYXkgb2YgXCJzdHJpbmdcIiBhbmQgXCJpbnRlcnBvbGF0aW9uXCIgdG9rZW5zLiBUaGlzIGlzIHRoZSBzaW1wbGUgc3RyaW5nIGNhc2UuXG5cdFx0XHRcdFx0ICogICAgICAgICBvclxuXHRcdFx0XHRcdCAqICAgICAgICAgW1wiZW1iZWRkZWQtY29kZVwiLCBcIi4uLlwiXSBUaGlzIGlzIHRoZSB0b2tlbiBjb250YWluaW5nIHRoZSBlbWJlZGRlZCBjb2RlLlxuXHRcdFx0XHRcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEl0IGFsc28gaGFzIGFuIGFsaWFzIHdoaWNoIGlzIHRoZSBsYW5ndWFnZSBvZiB0aGUgZW1iZWRkZWQgY29kZS5cblx0XHRcdFx0XHQgKiAgICAgKSxcblx0XHRcdFx0XHQgKiAgICAgW1widGVtcGxhdGUtcHVuY3R1YXRpb25cIiwgXCJgXCJdXG5cdFx0XHRcdFx0ICogXV1cblx0XHRcdFx0XHQgKi9cblxuXHRcdFx0XHRcdHZhciBlbWJlZGRlZCA9IGNvbnRlbnRbMV07XG5cdFx0XHRcdFx0aWYgKGNvbnRlbnQubGVuZ3RoID09PSAzICYmIHR5cGVvZiBlbWJlZGRlZCAhPT0gJ3N0cmluZycgJiYgZW1iZWRkZWQudHlwZSA9PT0gJ2VtYmVkZGVkLWNvZGUnKSB7XG5cdFx0XHRcdFx0XHQvLyBnZXQgc3RyaW5nIGNvbnRlbnRcblx0XHRcdFx0XHRcdHZhciBjb2RlID0gc3RyaW5nQ29udGVudChlbWJlZGRlZCk7XG5cblx0XHRcdFx0XHRcdHZhciBhbGlhcyA9IGVtYmVkZGVkLmFsaWFzO1xuXHRcdFx0XHRcdFx0dmFyIGxhbmd1YWdlID0gQXJyYXkuaXNBcnJheShhbGlhcykgPyBhbGlhc1swXSA6IGFsaWFzO1xuXG5cdFx0XHRcdFx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tsYW5ndWFnZV07XG5cdFx0XHRcdFx0XHRpZiAoIWdyYW1tYXIpIHtcblx0XHRcdFx0XHRcdFx0Ly8gdGhlIGVtYmVkZGVkIGxhbmd1YWdlIGlzbid0IHJlZ2lzdGVyZWQuXG5cdFx0XHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb250ZW50WzFdID0gdG9rZW5pemVFbWJlZGRlZChjb2RlLCBncmFtbWFyLCBsYW5ndWFnZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGZpbmRUZW1wbGF0ZVN0cmluZ3MoY29udGVudCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRmaW5kVGVtcGxhdGVTdHJpbmdzKGVudi50b2tlbnMpO1xuXHR9KTtcblxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudCBvZiBhIHRva2VuIG9yIHRva2VuIHN0cmVhbS5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmcgfCBUb2tlbiB8IChzdHJpbmcgfCBUb2tlbilbXX0gdmFsdWVcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIHN0cmluZ0NvbnRlbnQodmFsdWUpIHtcblx0XHRpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcblx0XHRcdHJldHVybiB2YWx1ZS5tYXAoc3RyaW5nQ29udGVudCkuam9pbignJyk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzdHJpbmdDb250ZW50KHZhbHVlLmNvbnRlbnQpO1xuXHRcdH1cblx0fVxuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5qdWxpYSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0Ly8gc3VwcG9ydCBvbmUgbGV2ZWwgb2YgbmVzdGVkIGNvbW1lbnRzXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL0p1bGlhTGFuZy9qdWxpYS9wdWxsLzYxMjhcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzojPSg/OlteIz1dfD0oPyEjKXwjKD8hPSl8Iz0oPzpbXiM9XXw9KD8hIyl8Iyg/IT0pKSo9IykqPSN8Iy4qKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncmVnZXgnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL3N0cmluZ3MvI1JlZ3VsYXItRXhwcmVzc2lvbnMtMVxuXHRcdHBhdHRlcm46IC9yXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwiW2ltc3hdezAsNH0vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdC8vIGh0dHBzOi8vZG9jcy5qdWxpYWxhbmcub3JnL2VuL3YxL21hbnVhbC9zdHJpbmdzLyNTdHJpbmctQmFzaWNzLTFcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvc3RyaW5ncy8jbm9uLXN0YW5kYXJkLXN0cmluZy1saXRlcmFscy0xXG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL3J1bm5pbmctZXh0ZXJuYWwtcHJvZ3JhbXMvI1J1bm5pbmctRXh0ZXJuYWwtUHJvZ3JhbXMtMVxuXHRcdHBhdHRlcm46IC9cIlwiXCJbXFxzXFxTXSs/XCJcIlwifCg/OlxcYlxcdyspP1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcInxgKD86W15cXFxcYFxcclxcbl18XFxcXC4pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2hhcic6IHtcblx0XHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvc3RyaW5ncy8jbWFuLWNoYXJhY3RlcnMtMVxuXHRcdHBhdHRlcm46IC8oXnxbXlxcdyddKScoPzpcXFxcW15cXHJcXG5dW14nXFxyXFxuXSp8W15cXFxcXFxyXFxuXSknLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphYnN0cmFjdHxiYXJlbW9kdWxlfGJlZ2lufGJpdHN0eXBlfGJyZWFrfGNhdGNofGNjYWxsfGNvbnN0fGNvbnRpbnVlfGRvfGVsc2V8ZWxzZWlmfGVuZHxleHBvcnR8ZmluYWxseXxmb3J8ZnVuY3Rpb258Z2xvYmFsfGlmfGltbXV0YWJsZXxpbXBvcnR8aW1wb3J0YWxsfGlufGxldHxsb2NhbHxtYWNyb3xtb2R1bGV8cHJpbnR8cHJpbnRsbnxxdW90ZXxyZXR1cm58c3RydWN0fHRyeXx0eXBlfHR5cGVhbGlhc3x1c2luZ3x3aGlsZSlcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdudW1iZXInOiAvKD86XFxiKD89XFxkKXxcXEIoPz1cXC4pKSg/OjBbYm94XSk/KD86W1xcZGEtZl0rKD86X1tcXGRhLWZdKykqKD86XFwuKD86XFxkKyg/Ol9cXGQrKSopPyk/fFxcLlxcZCsoPzpfXFxkKykqKSg/OltlZnBdWystXT9cXGQrKD86X1xcZCspKik/aj8vaSxcblx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvbWFudWFsL21hdGhlbWF0aWNhbC1vcGVyYXRpb25zL1xuXHQvLyBodHRwczovL2RvY3MuanVsaWFsYW5nLm9yZy9lbi92MS9tYW51YWwvbWF0aGVtYXRpY2FsLW9wZXJhdGlvbnMvI09wZXJhdG9yLVByZWNlZGVuY2UtYW5kLUFzc29jaWF0aXZpdHktMVxuXHQnb3BlcmF0b3InOiAvJiZ8XFx8XFx8fFstKypeJVx1MDBGN1x1MjJCQiYkXFxcXF09P3xcXC9bXFwvPV0/fCE9Pz0/fFxcfFs9Pl0/fDwoPzo8PT98Wz06fF0pP3w+KD86PXw+Pj89Pyk/fD09Pz0/fFt+XHUyMjYwXHUyMjY0XHUyMjY1J1x1MjIxQVx1MjIxQl0vLFxuXHQncHVuY3R1YXRpb24nOiAvOjo/fFt7fVtcXF0oKTssLj9dLyxcblx0Ly8gaHR0cHM6Ly9kb2NzLmp1bGlhbGFuZy5vcmcvZW4vdjEvYmFzZS9udW1iZXJzLyNCYXNlLmltXG5cdCdjb25zdGFudCc6IC9cXGIoPzooPzpJbmZ8TmFOKSg/OjE2fDMyfDY0KT98aW18cGkpXFxifFtcdTAzQzBcdTIxMkZdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmtlZXBhbGl2ZWQgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9bIyFdLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlwiKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cIlxcXFxcXHJcXG5dKSpcInwnKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W14nXFxcXFxcclxcbl0pKicpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdC8vIHN1cHBvcnQgSVB2NCwgSVB2Niwgc3VibmV0IG1hc2tcblx0J2lwJzoge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC9cXGIoPzooPzooPzpbXFxkYS1mXXsxLDR9Oil7N31bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs2fTpbXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXs1fTooPzpbXFxkYS1mXXsxLDR9Oik/W1xcZGEtZl17MSw0fXwoPzpbXFxkYS1mXXsxLDR9Oil7NH06KD86W1xcZGEtZl17MSw0fTopezAsMn1bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXszfTooPzpbXFxkYS1mXXsxLDR9Oil7MCwzfVtcXGRhLWZdezEsNH18KD86W1xcZGEtZl17MSw0fTopezJ9Oig/OltcXGRhLWZdezEsNH06KXswLDR9W1xcZGEtZl17MSw0fXwoPzpbXFxkYS1mXXsxLDR9Oil7Nn08aXB2ND58KD86W1xcZGEtZl17MSw0fTopezAsNX06PGlwdjQ+fDo6KD86W1xcZGEtZl17MSw0fTopezAsNX08aXB2ND58W1xcZGEtZl17MSw0fTo6KD86W1xcZGEtZl17MSw0fTopezAsNX1bXFxkYS1mXXsxLDR9fDo6KD86W1xcZGEtZl17MSw0fTopezAsNn1bXFxkYS1mXXsxLDR9fCg/OltcXGRhLWZdezEsNH06KXsxLDd9OikoPzpcXC9cXGR7MSwzfSk/fDxpcHY0Pig/OlxcL1xcZHsxLDJ9KT8pXFxiLy5zb3VyY2Vcblx0XHRcdFx0LnJlcGxhY2UoLzxpcHY0Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAvKD86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XVxcZHxcXGQpXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV1cXGR8XFxkKSkvLnNvdXJjZTsgfSksXG5cdFx0XHQnaSdcblx0XHQpLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXG5cdC8vIHN1cHBvcnQgKm5peCAvIFdpbmRvd3MsIGRpcmVjdG9yeSAvIGZpbGVcblx0J3BhdGgnOiB7XG5cdFx0cGF0dGVybjogLyhcXHMpXFwvKD86W15cXC9cXHNdK1xcLykqW15cXC9cXHNdKnxcXGJbYS16QS1aXTpcXFxcKD86W15cXFxcXFxzXStcXFxcKSpbXlxcXFxcXHNdKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHs/XFx3K1xcfT8vLFxuXHQnZW1haWwnOiB7XG5cdFx0cGF0dGVybjogL1tcXHctXStAW1xcdy1dKyg/OlxcLltcXHctXXsyLDN9KXsxLDJ9Lyxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdH0sXG5cdCdjb25kaXRpb25hbC1jb25maWd1cmF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9AXFxeP1tcXHctXSsvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdvcGVyYXRvcic6IC89LyxcblxuXHQncHJvcGVydHknOiAvXFxiKD86QkZEX0NIRUNLfEROU19DSEVDS3xGSUxFX0NIRUNLfEhUVFBfR0VUfE1JU0NfQ0hFQ0t8TkFNRXxQSU5HX0NIRUNLfFNDUklQVFN8U01UUF9DSEVDS3xTU0x8U1NMX0dFVHxUQ1BfQ0hFQ0t8VURQX0NIRUNLfGFjY2VwdHxhZHZlcnRfaW50fGFscGhhfGF1dGhfcGFzc3xhdXRoX3R5cGV8YXV0aGVudGljYXRpb258YmZkX2NwdV9hZmZpbml0eXxiZmRfaW5zdGFuY2V8YmZkX25vX3N3YXB8YmZkX3ByaW9yaXR5fGJmZF9wcm9jZXNzX25hbWV8YmZkX3JsaW1pdF9ydHRpbWV8YmZkX3J0X3ByaW9yaXR5fGJpbmRfaWZ8YmluZF9wb3J0fGJpbmR0b3xjYXxjZXJ0aWZpY2F0ZXxjaGVja191bmljYXN0X3NyY3xjaGVja2VyfGNoZWNrZXJfY3B1X2FmZmluaXR5fGNoZWNrZXJfbG9nX2FsbF9mYWlsdXJlc3xjaGVja2VyX25vX3N3YXB8Y2hlY2tlcl9wcmlvcml0eXxjaGVja2VyX3JsaW1pdF9ydHRpbWV8Y2hlY2tlcl9ydF9wcmlvcml0eXxjaGlsZF93YWl0X3RpbWV8Y29ubmVjdF9pcHxjb25uZWN0X3BvcnR8Y29ubmVjdF90aW1lb3V0fGRidXNfc2VydmljZV9uYW1lfGRlYnVnfGRlZmF1bHRfaW50ZXJmYWNlfGRlbGF5fGRlbGF5X2JlZm9yZV9yZXRyeXxkZWxheV9sb29wfGRpZ2VzdHxkb250X3RyYWNrX3ByaW1hcnl8ZHluYW1pY3xkeW5hbWljX2ludGVyZmFjZXN8ZW5hYmxlXyg/OmRidXN8c2NyaXB0X3NlY3VyaXR5fHNuaXxzbm1wX2NoZWNrZXJ8c25tcF9yZmN8c25tcF9yZmN2Mnxzbm1wX3JmY3YzfHNubXBfdnJycHx0cmFwcyl8ZW5kfGZhbGx8ZmFzdF9yZWNvdmVyeXxmaWxlfGZsYWctWzEyM118Zm9ya19kZWxheXxmdWxsX2NvbW1hbmR8ZndtYXJrfGdhcnBfZ3JvdXB8Z2FycF9pbnRlcnZhbHxnYXJwX2xvd2VyX3ByaW9fZGVsYXl8Z2FycF9sb3dlcl9wcmlvX3JlcGVhdHxnYXJwX21hc3Rlcl9kZWxheXxnYXJwX21hc3Rlcl9yZWZyZXNofGdhcnBfbWFzdGVyX3JlZnJlc2hfcmVwZWF0fGdhcnBfbWFzdGVyX3JlcGVhdHxnbG9iYWxfZGVmc3xnbG9iYWxfdHJhY2tpbmd8Z25hX2ludGVydmFsfGdyb3VwfGhhX3N1c3BlbmR8aGFzaGVkfGhlbG9fbmFtZXxoaWdoZXJfcHJpb19zZW5kX2FkdmVydHxob3BsaW1pdHxodHRwX3Byb3RvY29sfGh5c3RlcmVzaXN8aWRsZV90eHxpbmNsdWRlfGluaGliaXRfb25fZmFpbHVyZXxpbml0X2ZhaWx8aW5pdF9maWxlfGluc3RhbmNlfGludGVyZmFjZXxpbnRlcmZhY2VzfGludGVydmFsfGlwX2ZhbWlseXxpcHZzX3Byb2Nlc3NfbmFtZXxrZWVwYWxpdmVkLmNvbmZ8a2VybmVsX3J4X2J1Zl9zaXplfGtleXxsaW5rYmVhdF9pbnRlcmZhY2VzfGxpbmtiZWF0X3VzZV9wb2xsaW5nfGxvZ19hbGxfZmFpbHVyZXN8bG9nX3Vua25vd25fdnJpZHN8bG93ZXJfcHJpb19ub19hZHZlcnR8bHRocmVzaG9sZHxsdnNfZmx1c2h8bHZzX2ZsdXNoX29uc3RvcHxsdnNfbWV0aG9kfGx2c19uZXRsaW5rX2NtZF9yY3ZfYnVmc3xsdnNfbmV0bGlua19jbWRfcmN2X2J1ZnNfZm9yY2V8bHZzX25ldGxpbmtfbW9uaXRvcl9yY3ZfYnVmc3xsdnNfbmV0bGlua19tb25pdG9yX3Jjdl9idWZzX2ZvcmNlfGx2c19ub3RpZnlfZmlmb3xsdnNfbm90aWZ5X2ZpZm9fc2NyaXB0fGx2c19zY2hlZHxsdnNfc3luY19kYWVtb258bWF4X2F1dG9fcHJpb3JpdHl8bWF4X2hvcHN8bWNhc3Rfc3JjX2lwfG1oLWZhbGxiYWNrfG1oLXBvcnR8bWluX2F1dG9fcHJpb3JpdHlfZGVsYXl8bWluX3J4fG1pbl90eHxtaXNjX2R5bmFtaWN8bWlzY19wYXRofG1pc2NfdGltZW91dHxtdWx0aXBsaWVyfG5hbWV8bmFtZXNwYWNlX3dpdGhfaXBzZXRzfG5hdGl2ZV9pcHY2fG5laWdoYm9yX2lwfG5ldF9uYW1lc3BhY2V8bmV0X25hbWVzcGFjZV9pcHZzfG5mdGFibGVzfG5mdGFibGVzX2NvdW50ZXJzfG5mdGFibGVzX2lmaW5kZXh8bmZ0YWJsZXNfcHJpb3JpdHl8bm9fYWNjZXB0fG5vX2NoZWNrZXJfZW1haWxzfG5vX2VtYWlsX2ZhdWx0c3xub3ByZWVtcHR8bm90aWZpY2F0aW9uX2VtYWlsfG5vdGlmaWNhdGlvbl9lbWFpbF9mcm9tfG5vdGlmeXxub3RpZnlfYmFja3VwfG5vdGlmeV9kZWxldGVkfG5vdGlmeV9kb3dufG5vdGlmeV9mYXVsdHxub3RpZnlfZmlmb3xub3RpZnlfZmlmb19zY3JpcHR8bm90aWZ5X21hc3Rlcnxub3RpZnlfbWFzdGVyX3J4X2xvd2VyX3ByaXxub3RpZnlfcHJpb3JpdHlfY2hhbmdlc3xub3RpZnlfc3RvcHxub3RpZnlfdXB8b2xkX3VuaWNhc3RfY2hlY2tzdW18b21lZ2F8b3BzfHBhcmFtX21hdGNofHBhc3NpdmV8cGFzc3dvcmR8cGF0aHxwZXJzaXN0ZW5jZV9lbmdpbmV8cGVyc2lzdGVuY2VfZ3JhbnVsYXJpdHl8cGVyc2lzdGVuY2VfdGltZW91dHxwcmVlbXB0fHByZWVtcHRfZGVsYXl8cHJpb3JpdHl8cHJvY2Vzc3xwcm9jZXNzX21vbml0b3JfcmN2X2J1ZnN8cHJvY2Vzc19tb25pdG9yX3Jjdl9idWZzX2ZvcmNlfHByb2Nlc3NfbmFtZXxwcm9jZXNzX25hbWVzfHByb21vdGVfc2Vjb25kYXJpZXN8cHJvdG9jb2x8cHJveHlfYXJwfHByb3h5X2FycF9wdmxhbnxxdW9ydW18cXVvcnVtX2Rvd258cXVvcnVtX21heHxxdW9ydW1fdXB8cmFuZG9tX3NlZWR8cmVhbF9zZXJ2ZXJ8cmVnZXh8cmVnZXhfbWF4X29mZnNldHxyZWdleF9taW5fb2Zmc2V0fHJlZ2V4X25vX21hdGNofHJlZ2V4X29wdGlvbnN8cmVnZXhfc3RhY2t8cmVsb2FkX3JlcGVhdHxyZWxvYWRfdGltZV9maWxlfHJlcXVpcmVfcmVwbHl8cmV0cnl8cmlzZXxyb3V0ZXJfaWR8cnNfaW5pdF9ub3RpZmllc3xzY3JpcHR8c2NyaXB0X3VzZXJ8c2gtZmFsbGJhY2t8c2gtcG9ydHxzaHV0ZG93bl9zY3JpcHR8c2h1dGRvd25fc2NyaXB0X3RpbWVvdXR8c2tpcF9jaGVja19hZHZfYWRkcnxzbXRwX2FsZXJ0fHNtdHBfYWxlcnRfY2hlY2tlcnxzbXRwX2FsZXJ0X3ZycnB8c210cF9jb25uZWN0X3RpbWVvdXR8c210cF9oZWxvX25hbWV8c210cF9zZXJ2ZXJ8c25tcF9zb2NrZXR8c29ycnlfc2VydmVyfHNvcnJ5X3NlcnZlcl9pbmhpYml0fHNvcnJ5X3NlcnZlcl9sdnNfbWV0aG9kfHNvdXJjZV9pcHxzdGFydHxzdGFydHVwX3NjcmlwdHxzdGFydHVwX3NjcmlwdF90aW1lb3V0fHN0YXRlfHN0YXRpY19pcGFkZHJlc3N8c3RhdGljX3JvdXRlc3xzdGF0aWNfcnVsZXN8c3RhdHVzX2NvZGV8c3RlcHxzdHJpY3RfbW9kZXxzeW5jX2dyb3VwX3RyYWNraW5nX3dlaWdodHx0ZXJtaW5hdGVfZGVsYXl8dGltZW91dHx0cmFja19iZmR8dHJhY2tfZmlsZXx0cmFja19ncm91cHx0cmFja19pbnRlcmZhY2V8dHJhY2tfcHJvY2Vzc3x0cmFja19zY3JpcHR8dHJhY2tfc3JjX2lwfHR0bHx0eXBlfHVtYXNrfHVuaWNhc3RfcGVlcnx1bmljYXN0X3NyY19pcHx1bmljYXN0X3R0bHx1cmx8dXNlX2lwdmxhbnx1c2VfcGlkX2Rpcnx1c2Vfdm1hY3x1c2VyfHV0aHJlc2hvbGR8dmFsWzEyM118dmVyc2lvbnx2aXJ0dWFsX2lwYWRkcmVzc3x2aXJ0dWFsX2lwYWRkcmVzc19leGNsdWRlZHx2aXJ0dWFsX3JvdXRlcl9pZHx2aXJ0dWFsX3JvdXRlc3x2aXJ0dWFsX3J1bGVzfHZpcnR1YWxfc2VydmVyfHZpcnR1YWxfc2VydmVyX2dyb3VwfHZpcnR1YWxob3N0fHZtYWNfeG1pdF9iYXNlfHZycnB8dnJycF8oPzpjaGVja191bmljYXN0X3NyY3xjcHVfYWZmaW5pdHl8Z2FycF9pbnRlcnZhbHxnYXJwX2xvd2VyX3ByaW9fZGVsYXl8Z2FycF9sb3dlcl9wcmlvX3JlcGVhdHxnYXJwX21hc3Rlcl9kZWxheXxnYXJwX21hc3Rlcl9yZWZyZXNofGdhcnBfbWFzdGVyX3JlZnJlc2hfcmVwZWF0fGdhcnBfbWFzdGVyX3JlcGVhdHxnbmFfaW50ZXJ2YWx8aGlnaGVyX3ByaW9fc2VuZF9hZHZlcnR8aW5zdGFuY2V8aXBzZXRzfGlwdGFibGVzfGxvd2VyX3ByaW9fbm9fYWR2ZXJ0fG1jYXN0X2dyb3VwNHxtY2FzdF9ncm91cDZ8bWluX2dhcnB8bmV0bGlua19jbWRfcmN2X2J1ZnN8bmV0bGlua19jbWRfcmN2X2J1ZnNfZm9yY2V8bmV0bGlua19tb25pdG9yX3Jjdl9idWZzfG5ldGxpbmtfbW9uaXRvcl9yY3ZfYnVmc19mb3JjZXxub19zd2FwfG5vdGlmeV9maWZvfG5vdGlmeV9maWZvX3NjcmlwdHxub3RpZnlfcHJpb3JpdHlfY2hhbmdlc3xwcmlvcml0eXxwcm9jZXNzX25hbWV8cmxpbWl0X3J0dGltZXxydF9wcmlvcml0eXxyeF9idWZzX211bHRpcGxpZXJ8cnhfYnVmc19wb2xpY3l8c2NyaXB0fHNraXBfY2hlY2tfYWR2X2FkZHJ8c3RhcnR1cF9kZWxheXxzdHJpY3R8c3luY19ncm91cHx0cmFja19wcm9jZXNzfHZlcnNpb24pfHdhcm11cHx3ZWlnaHQpXFxiLyxcblxuXHQnY29uc3RhbnQnOiAvXFxiKD86QXxBQUFBfEFIfEJBQ0tVUHxDTkFNRXxEUnxNQVNURVJ8TVh8TkFUfE5TfFBBU1N8U0NUUHxTT0F8VENQfFRVTnxUWFR8VURQfGRofGZvfGxibGN8bGJsY3J8bGN8bWh8bnF8b3ZmfHJyfHNlZHxzaHx3bGN8d3JyKVxcYi8sXG5cblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pLT9cXGQrKD86XFwuXFxkKyk/Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bm98b2ZmfG9ufHRydWV8eWVzKVxcYi8sXG5cblx0J3B1bmN0dWF0aW9uJzogL1tcXHtcXH1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmtleW1hbiA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcYmMgLiovaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZpcnR1YWwta2V5Jzoge1xuXHRcdHBhdHRlcm46IC9cXFtcXHMqKD86KD86QUxUfENBUFN8Q1RSTHxMQUxUfExDVFJMfE5DQVBTfFJBTFR8UkNUUkx8U0hJRlQpXFxzKykqKD86W1RLVV1fW1xcdz9dK3xbQS1FXVxcZFxcZD98XCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonKVxccypcXF0vaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdmdW5jdGlvbicgLy8gYWxpYXMgZm9yIHN0eWxlc1xuXHR9LFxuXG5cdC8vIGh0dHBzOi8vaGVscC5rZXltYW4uY29tL2RldmVsb3Blci9sYW5ndWFnZS9ndWlkZS9oZWFkZXJzXG5cdCdoZWFkZXIta2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvJlxcdysvLFxuXHRcdGFsaWFzOiAnYm9sZCcgLy8gYWxpYXMgZm9yIHN0eWxlc1xuXHR9LFxuXHQnaGVhZGVyLXN0YXRlbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86Yml0bWFwfGJpdG1hcHN8Y2FwcyBhbHdheXMgb2ZmfGNhcHMgb24gb25seXxjb3B5cmlnaHR8aG90a2V5fGxhbmd1YWdlfGxheW91dHxtZXNzYWdlfG5hbWV8c2hpZnQgZnJlZXMgY2Fwc3x2ZXJzaW9uKVxcYi9pLFxuXHRcdGFsaWFzOiAnYm9sZCcgLy8gYWxpYXMgZm9yIHN0eWxlc1xuXHR9LFxuXG5cdCdydWxlLWtleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFueXxiYXNlbGF5b3V0fGJlZXB8Y2FsbHxjb250ZXh0fGRlYWRrZXl8ZGt8aWZ8aW5kZXh8bGF5ZXJ8bm90YW55fG51bHxvdXRzfHBsYXRmb3JtfHJlc2V0fHJldHVybnxzYXZlfHNldHxzdG9yZXx1c2UpXFxiL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnc3RydWN0dXJhbC1rZXl3b3JkJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbnNpfGJlZ2lufGdyb3VwfG1hdGNofG5ld2NvbnRleHR8bm9tYXRjaHxwb3N0a2V5c3Ryb2tlfHJlYWRvbmx5fHVuaWNvZGV8dXNpbmcga2V5cylcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cblx0J2NvbXBpbGUtdGFyZ2V0Jzoge1xuXHRcdHBhdHRlcm46IC9cXCQoPzprZXltYW58a2V5bWFub25seXxrZXltYW53ZWJ8a21mbHx3ZWF2ZXIpOi9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0Ly8gVSsjIyMjLCB4IyMjLCBkIyMjIGNoYXJhY3RlcnMgYW5kIG51bWJlcnNcblx0J251bWJlcic6IC9cXGIoPzpVXFwrW1xcZEEtRl0rfGRcXGQrfHhbXFxkYS1mXSt8XFxkKylcXGIvaSxcblx0J29wZXJhdG9yJzogL1srPlxcXFwkXXxcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpPSxdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMua290bGluID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHQvLyBUaGUgbG9va2JlaGluZCBwcmV2ZW50cyB3cm9uZyBoaWdobGlnaHRpbmcgb2YgZS5nLiBrb3RsaW4ucHJvcGVydGllcy5nZXRcblx0XHRcdHBhdHRlcm46IC8oXnxbXi5dKVxcYig/OmFic3RyYWN0fGFjdHVhbHxhbm5vdGF0aW9ufGFzfGJyZWFrfGJ5fGNhdGNofGNsYXNzfGNvbXBhbmlvbnxjb25zdHxjb25zdHJ1Y3Rvcnxjb250aW51ZXxjcm9zc2lubGluZXxkYXRhfGRvfGR5bmFtaWN8ZWxzZXxlbnVtfGV4cGVjdHxleHRlcm5hbHxmaW5hbHxmaW5hbGx5fGZvcnxmdW58Z2V0fGlmfGltcG9ydHxpbnxpbmZpeHxpbml0fGlubGluZXxpbm5lcnxpbnRlcmZhY2V8aW50ZXJuYWx8aXN8bGF0ZWluaXR8bm9pbmxpbmV8bnVsbHxvYmplY3R8b3BlbnxvcGVyYXRvcnxvdXR8b3ZlcnJpZGV8cGFja2FnZXxwcml2YXRlfHByb3RlY3RlZHxwdWJsaWN8cmVpZmllZHxyZXR1cm58c2VhbGVkfHNldHxzdXBlcnxzdXNwZW5kfHRhaWxyZWN8dGhpc3x0aHJvd3x0b3x0cnl8dHlwZWFsaWFzfHZhbHx2YXJ8dmFyYXJnfHdoZW58d2hlcmV8d2hpbGUpXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyg/OmBbXlxcclxcbmBdK2B8XFxiXFx3KykoPz1cXHMqXFwoKS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXC4pKD86YFteXFxyXFxuYF0rYHxcXHcrKSg/PVxccypcXHspLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnbnVtYmVyJzogL1xcYig/OjBbeFhdW1xcZGEtZkEtRl0rKD86X1tcXGRhLWZBLUZdKykqfDBbYkJdWzAxXSsoPzpfWzAxXSspKnxcXGQrKD86X1xcZCspKig/OlxcLlxcZCsoPzpfXFxkKykqKT8oPzpbZUVdWystXT9cXGQrKD86X1xcZCspKik/W2ZGTF0/KVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1xcK1srPV0/fC1bLT0+XT98PT0/PT98ISg/OiF8PT0/KT98W1xcLyolPD5dPT98Wz86XTo/fFxcLlxcLnwmJnxcXHxcXHx8XFxiKD86YW5kfGludnxvcnxzaGx8c2hyfHVzaHJ8eG9yKVxcYi9cblx0fSk7XG5cblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5rb3RsaW5bJ2NsYXNzLW5hbWUnXTtcblxuXHR2YXIgaW50ZXJwb2xhdGlvbkluc2lkZSA9IHtcblx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFwkXFx7P3xcXH0kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMua290bGluXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2tvdGxpbicsICdzdHJpbmcnLCB7XG5cdFx0Ly8gaHR0cHM6Ly9rb3RsaW5sYW5nLm9yZy9zcGVjL2V4cHJlc3Npb25zLmh0bWwjc3RyaW5nLWludGVycG9sYXRpb24tZXhwcmVzc2lvbnNcblx0XHQnc3RyaW5nLWxpdGVyYWwnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cIlwiXCIoPzpbXiRdfFxcJCg/Oig/IVxceyl8XFx7W157fV0qXFx9KSkqP1wiXCJcIi8sXG5cdFx0XHRcdGFsaWFzOiAnbXVsdGlsaW5lJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86W2Etel9dXFx3KnxcXHtbXnt9XSpcXH0pL2ksXG5cdFx0XHRcdFx0XHRpbnNpZGU6IGludGVycG9sYXRpb25JbnNpZGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXFxcclxcbiRdfFxcXFwufFxcJCg/Oig/IVxceyl8XFx7W157fV0qXFx9KSkqXCIvLFxuXHRcdFx0XHRhbGlhczogJ3NpbmdsZWxpbmUnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCQoPzpbYS16X11cXHcqfFxce1tee31dKlxcfSkvaSxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRpbnNpZGU6IGludGVycG9sYXRpb25JbnNpZGVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY2hhcic6IHtcblx0XHRcdC8vIGh0dHBzOi8va290bGlubGFuZy5vcmcvc3BlYy9leHByZXNzaW9ucy5odG1sI2NoYXJhY3Rlci1saXRlcmFsc1xuXHRcdFx0cGF0dGVybjogLycoPzpbXidcXFxcXFxyXFxuXXxcXFxcKD86Lnx1W2EtZkEtRjAtOV17MCw0fSkpJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH0pO1xuXG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMua290bGluWydzdHJpbmcnXTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdrb3RsaW4nLCAna2V5d29yZCcsIHtcblx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9cXEJAKD86XFx3KzopPyg/OltBLVpdXFx3KnxcXFtbXlxcXV0rXFxdKS8sXG5cdFx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdrb3RsaW4nLCAnZnVuY3Rpb24nLCB7XG5cdFx0J2xhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlxcdytAfEBcXHcrXFxiLyxcblx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmt0ID0gUHJpc20ubGFuZ3VhZ2VzLmtvdGxpbjtcblx0UHJpc20ubGFuZ3VhZ2VzLmt0cyA9IFByaXNtLmxhbmd1YWdlcy5rb3RsaW47XG59KFByaXNtKSk7XG5cbi8qIGVzbGludC1kaXNhYmxlIHJlZ2V4cC9uby1kdXBlLWNoYXJhY3RlcnMtY2hhcmFjdGVyLWNsYXNzICovXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0LyoqXG5cdCAqIFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgYWxsb3dlZCBpbiBpZGVudGlmaWVycy5cblx0ICpcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdHZhciBub25JZCA9IC9cXHNcXHgwMC1cXHgxZlxceDIyLVxceDJmXFx4M2EtXFx4M2ZcXHg1Yi1cXHg1ZVxceDYwXFx4N2ItXFx4N2UvLnNvdXJjZTtcblxuXHQvKipcblx0ICogU3Vycm91bmQgYSByZWd1bGFyIGV4cHJlc3Npb24gZm9yIElEcyB3aXRoIHBhdHRlcm5zIGZvciBub24tSUQgc2VxdWVuY2VzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVybiBBIHJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaWRlbnRpZmllcnMuXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdIFRoZSByZWd1bGFyIGV4cHJlc3Npb24gZmxhZ3MuXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9IEEgd3JhcHBlZCByZWd1bGFyIGV4cHJlc3Npb24gZm9yIGlkZW50aWZpZXJzLlxuXHQgKi9cblx0ZnVuY3Rpb24gd3JhcElkKHBhdHRlcm4sIGZsYWdzKSB7XG5cdFx0cmV0dXJuIFJlZ0V4cChwYXR0ZXJuLnJlcGxhY2UoLzxub25JZD4vZywgbm9uSWQpLCBmbGFncyk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMua3VtaXIgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx8LiovXG5cdFx0fSxcblxuXHRcdCdwcm9sb2cnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cXG5cXHJcIl0qXCJ8J1teXFxuXFxyJ10qJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiB3cmFwSWQoLyhefFs8bm9uSWQ+XSkoPzpcdTA0MzRcdTA0MzB8XHUwNDNEXHUwNDM1XHUwNDQyKSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXG5cdFx0J29wZXJhdG9yLXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3cmFwSWQoLyhefFs8bm9uSWQ+XSkoPzpcdTA0Mzh8XHUwNDM4XHUwNDNCXHUwNDM4fFx1MDQzRFx1MDQzNSkoPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQnc3lzdGVtLXZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogd3JhcElkKC8oXnxbPG5vbklkPl0pXHUwNDM3XHUwNDNEXHUwNDMwXHUwNDQ3KD89Wzxub25JZD5dfCQpLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXG5cdFx0J3R5cGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzMlx1MDQzNVx1MDQ0OXxcdTA0M0JcdTA0MzhcdTA0NDJ8XHUwNDNCXHUwNDNFXHUwNDMzfFx1MDQ0MVx1MDQzOFx1MDQzQ3xcdTA0NDZcdTA0MzVcdTA0M0IpKD86XFx4MjAqXHUwNDQyXHUwNDMwXHUwNDMxKT8oPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/Olx1MDQzQVx1MDQzRVx1MDQzQ1x1MDQzRlx1MDQzQnxcdTA0NDFcdTA0M0FcdTA0MzBcdTA0M0RcdTA0M0FcdTA0M0VcdTA0MzR8XHUwNDQ0XHUwNDMwXHUwNDM5XHUwNDNCfFx1MDQ0Nlx1MDQzMlx1MDQzNVx1MDQ0MikoPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvKipcblx0XHQgKiBTaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHNlYXJjaGluZyBmb3IgdHlwZSBuYW1lcyBiZWNhdXNlIG9mIFwiXHUwNDQyXHUwNDMwXHUwNDMxXCIuXG5cdFx0ICogXCJcdTA0NDJcdTA0MzBcdTA0MzFcIiBpcyBhIHJlc2VydmVkIHdvcmQsIGJ1dCBuZXZlciB1c2VkIHdpdGhvdXQgYSBwcmVjZWRpbmcgdHlwZSBuYW1lLlxuXHRcdCAqIFwiXHUwNDFEXHUwNDEwXHUwNDE3XHUwNDFEXHUwNDEwXHUwNDI3XHUwNDE4XHUwNDIyXHUwNDJDXCIsIFwiXHUwNDI0XHUwNDMyXHUwNDMyXHUwNDNFXHUwNDM0XCIsIGFuZCBcIlx1MDQyNFx1MDQzMlx1MDQ0Qlx1MDQzMlx1MDQzRVx1MDQzNFwiIGFyZSBub3QgcmVzZXJ2ZWQgd29yZHMuXG5cdFx0ICovXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiB3cmFwSWQoLyhefFs8bm9uSWQ+XSkoPzpcdTA0MzBcdTA0M0JcdTA0MzN8XHUwNDMwXHUwNDQwXHUwNDMzKD86XFx4MjAqXHUwNDQwXHUwNDM1XHUwNDM3KT98XHUwNDMyXHUwNDMyXHUwNDNFXHUwNDM0fFx1MDQxMlx1MDQxQVx1MDQxQlx1MDQyRVx1MDQyN1x1MDQxOFx1MDQyMlx1MDQyQ3xcdTA0MzJcdTA0NDFbXHUwNDM1XHUwNDUxXXxcdTA0MzJcdTA0NEJcdTA0MzFcdTA0M0VcdTA0NDB8XHUwNDMyXHUwNDRCXHUwNDMyXHUwNDNFXHUwNDM0fFx1MDQzMlx1MDQ0Qlx1MDQ0NVx1MDQzRVx1MDQzNHxcdTA0MzRcdTA0MzBcdTA0M0RcdTA0M0V8XHUwNDM0XHUwNDNCXHUwNDRGfFx1MDQzNFx1MDQzRXxcdTA0MzRcdTA0NDF8XHUwNDM1XHUwNDQxXHUwNDNCXHUwNDM4fFx1MDQzOFx1MDQzRFx1MDQzMFx1MDQ0N1x1MDQzNXxcdTA0MzhcdTA0NDFcdTA0M0Z8XHUwNDM4XHUwNDQxXHUwNDNGXHUwNDNFXHUwNDNCXHUwNDRDXHUwNDM3XHUwNDNFXHUwNDMyXHUwNDMwXHUwNDQyXHUwNDRDfFx1MDQzQVx1MDQzRVx1MDQzRCg/Oig/OlxceDIwK3xfKVx1MDQzOFx1MDQ0MVx1MDQzRik/fFx1MDQzQVx1MDQ0Nig/Oig/OlxceDIwK3xfKVx1MDQzRlx1MDQ0MFx1MDQzOCk/fFx1MDQzRFx1MDQzMFx1MDQzNFx1MDQzRXxcdTA0M0RcdTA0MzBcdTA0NDd8XHUwNDNEXHUwNDQxfFx1MDQzRFx1MDQ0NnxcdTA0M0VcdTA0NDJ8XHUwNDNGXHUwNDMwXHUwNDQzXHUwNDM3XHUwNDMwfFx1MDQzRlx1MDQzRVx1MDQzQVx1MDQzMHxcdTA0M0ZcdTA0NDBcdTA0Mzh8XHUwNDQwXHUwNDMwXHUwNDM3XHUwNDMwP3xcdTA0NDBcdTA0MzVcdTA0Mzd8XHUwNDQxXHUwNDQyXHUwNDNFXHUwNDNGfFx1MDQ0Mlx1MDQzMFx1MDQzMXxcdTA0NDJcdTA0M0V8XHUwNDQzXHUwNDQyXHUwNDMyfFx1MDQ0OFx1MDQzMFx1MDQzMykoPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qKiBTaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHNlYXJjaGluZyBmb3IgcmVzZXJ2ZWQgd29yZHMuICovXG5cdFx0J25hbWUnOiB7XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKVteXFxkPG5vbklkPl1bXjxub25JZD5dKig/OlxceDIwK1tePG5vbklkPl0rKSooPz1bPG5vbklkPl18JCkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8qKiBTaG91bGQgYmUgcGVyZm9ybWVkIGFmdGVyIHNlYXJjaGluZyBmb3IgbmFtZXMuICovXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IHdyYXBJZCgvKF58Wzxub25JZD5dKSg/OlxcQlxcJFtcXGRhLWZdK1xcYnwoPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KSg/PVs8bm9uSWQ+XXwkKS8uc291cmNlLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvKiogU2hvdWxkIGJlIHBlcmZvcm1lZCBhZnRlciBzZWFyY2hpbmcgZm9yIHdvcmRzLiAqL1xuXHRcdCdwdW5jdHVhdGlvbic6IC86PXxbKCksOjtcXFtcXF1dLyxcblxuXHRcdC8qKlxuXHRcdCAqIFNob3VsZCBiZSBwZXJmb3JtZWQgYWZ0ZXIgc2VhcmNoaW5nIGZvclxuXHRcdCAqIC0gbnVtZXJpYyBjb25zdGFudHMgKGJlY2F1c2Ugb2YgXCIrXCIgYW5kIFwiLVwiKTtcblx0XHQgKiAtIHB1bmN0dWF0aW9uIG1hcmtzIChiZWNhdXNlIG9mIFwiOj1cIiBhbmQgXCI9XCIpLlxuXHRcdCAqL1xuXHRcdCdvcGVyYXRvci1jaGFyJzoge1xuXHRcdFx0cGF0dGVybjogL1xcKlxcKj98PFs9Pl0/fD49P3xbLSsvPV0vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmt1bSA9IFByaXNtLmxhbmd1YWdlcy5rdW1pcjtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMua3VzdG8gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL2BgYFtcXHNcXFNdKj9gYGB8W2hIXT8oPzpcIig/OlteXFxyXFxuXFxcXFwiXXxcXFxcLikqXCJ8Jyg/OlteXFxyXFxuXFxcXCddfFxcXFwuKSonfEAoPzpcIlteXFxyXFxuXCJdKlwifCdbXlxcclxcbiddKicpKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J3ZlcmInOiB7XG5cdFx0cGF0dGVybjogLyhcXHxcXHMqKVthLXpdW1xcdy1dKi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXG5cdCdjb21tYW5kJzoge1xuXHRcdHBhdHRlcm46IC9cXC5bYS16XVthLXpcXGQtXSpcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IC9cXGIoPzpib29sfGRhdGV0aW1lfGRlY2ltYWx8ZHluYW1pY3xndWlkfGludHxsb25nfHJlYWx8c3RyaW5nfHRpbWVzcGFuKVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFjY2Vzc3xhbGlhc3xhbmR8YW50aXxhc3xhc2N8YXV0b3xiZXR3ZWVufGJ5fCg/OmNvbnRhaW5zfCg/OmVuZHN8c3RhcnRzKXdpdGh8aGFzKD86cGVyZml4fHN1ZmZpeCk/KSg/Ol9jcyk/fGRhdGFiYXNlfGRlY2xhcmV8ZGVzY3xleHRlcm5hbHxmcm9tfGZ1bGxvdXRlcnxoYXNfYWxsfGlufGluZ2VzdGlvbnxpbmxpbmV8aW5uZXJ8aW5uZXJ1bmlxdWV8aW50b3woPzpsZWZ0fHJpZ2h0KSg/OmFudGkoPzpzZW1pKT98aW5uZXJ8b3V0ZXJ8c2VtaSk/fGxldHxsaWtlfGxvY2FsfG5vdHxvZnxvbnxvcnxwYXR0ZXJufHByaW50fHF1ZXJ5X3BhcmFtZXRlcnN8cmFuZ2V8cmVzdHJpY3R8c2NoZW1hfHNldHxzdGVwfHRhYmxlfHRhYmxlc3x0b3x2aWV3fHdoZXJlfHdpdGh8bWF0Y2hlc1xccytyZWdleHxudWxsc1xccysoPzpmaXJzdHxsYXN0KSkoPyFbXFx3LV0pLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS8sXG5cblx0J2RhdGV0aW1lJzogW1xuXHRcdHtcblx0XHRcdC8vIFJGQyA4MjIgKyBSRkMgODUwXG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86RnJpfEZyaWRheXxNb258TW9uZGF5fFNhdHxTYXR1cmRheXxTdW58U3VuZGF5fFRodXxUaHVyc2RheXxUdWV8VHVlc2RheXxXZWR8V2VkbmVzZGF5KVxccyosXFxzKik/XFxkezEsMn0oPzpcXHMrfC0pKD86QXByfEF1Z3xEZWN8RmVifEphbnxKdWx8SnVufE1hcnxNYXl8Tm92fE9jdHxTZXApKD86XFxzK3wtKVxcZHsyfVxccytcXGR7Mn06XFxkezJ9KD86OlxcZHsyfSk/KD86XFxzKig/OlxcYig/OltBLVpdfCg/OltFQ01UXVtEU118R018VSlUKXxbKy1dXFxkezR9KSk/XFxiLyxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gSVNPIDg2MDFcblx0XHRcdHBhdHRlcm46IC9bKy1dP1xcYig/OlxcZHs0fS1cXGR7Mn0tXFxkezJ9KD86WyBUXVxcZHsyfTpcXGR7Mn0oPzo6XFxkezJ9KD86XFwuXFxkKyk/KT8pP3xcXGR7Mn06XFxkezJ9KD86OlxcZHsyfSg/OlxcLlxcZCspPyk/KVo/Lyxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH1cblx0XSxcblx0J251bWJlcic6IC9cXGIoPzoweFswLTlBLUZhLWZdK3xcXGQrKD86XFwuXFxkKyk/KD86W0VlXVsrLV0/XFxkKyk/KSg/Oig/Om1pbnxzZWN8W21uXHUwMEI1XXN8W2RobXNdfG1pY3Jvc2Vjb25kfHRpY2spXFxiKT98WystXT9cXGJpbmZcXGIvLFxuXG5cdCdvcGVyYXRvcic6IC89PnxbIT1dfnxbIT08Pl09P3xbLSsqLyV8XXxcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde30sOy46XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIGZ1bmNQYXR0ZXJuID0gL1xcXFwoPzpbXmEteigpW1xcXV18W2EteipdKykvaTtcblx0dmFyIGluc2lkZUVxdSA9IHtcblx0XHQnZXF1YXRpb24tY29tbWFuZCc6IHtcblx0XHRcdHBhdHRlcm46IGZ1bmNQYXR0ZXJuLFxuXHRcdFx0YWxpYXM6ICdyZWdleCdcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmxhdGV4ID0ge1xuXHRcdCdjb21tZW50JzogLyUuKi8sXG5cdFx0Ly8gdGhlIHZlcmJhdGltIGVudmlyb25tZW50IHByaW50cyB3aGl0ZXNwYWNlIHRvIHRoZSBkb2N1bWVudFxuXHRcdCdjZGF0YSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxcXGJlZ2luXFx7KCg/OmxzdGxpc3Rpbmd8dmVyYmF0aW0pXFwqPylcXH0pW1xcc1xcU10qPyg/PVxcXFxlbmRcXHtcXDJcXH0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8qXG5cdFx0ICogZXF1YXRpb25zIGNhbiBiZSBiZXR3ZWVuICQkICQkIG9yICQgJCBvciBcXCggXFwpIG9yIFxcWyBcXF1cblx0XHQgKiAoYWxsIGFyZSBtdWx0aWxpbmUpXG5cdFx0ICovXG5cdFx0J2VxdWF0aW9uJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkXFwkKD86XFxcXFtcXHNcXFNdfFteXFxcXCRdKStcXCRcXCR8XFwkKD86XFxcXFtcXHNcXFNdfFteXFxcXCRdKStcXCR8XFxcXFxcKFtcXHNcXFNdKj9cXFxcXFwpfFxcXFxcXFtbXFxzXFxTXSo/XFxcXFxcXS8sXG5cdFx0XHRcdGluc2lkZTogaW5zaWRlRXF1LFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxcXGJlZ2luXFx7KCg/OmFsaWdufGVxbmFycmF5fGVxdWF0aW9ufGdhdGhlcnxtYXRofG11bHRsaW5lKVxcKj8pXFx9KVtcXHNcXFNdKj8oPz1cXFxcZW5kXFx7XFwyXFx9KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogaW5zaWRlRXF1LFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHRcdH1cblx0XHRdLFxuXHRcdC8qXG5cdFx0ICogYXJndW1lbnRzIHdoaWNoIGFyZSBrZXl3b3JkcyBvciByZWZlcmVuY2VzIGFyZSBoaWdobGlnaHRlZFxuXHRcdCAqIGFzIGtleXdvcmRzXG5cdFx0ICovXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcXFwoPzpiZWdpbnxjaXRlfGRvY3VtZW50Y2xhc3N8ZW5kfGxhYmVsfHJlZnx1c2VwYWNrYWdlKSg/OlxcW1teXFxdXStcXF0pP1xceylbXn1dKyg/PVxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxcXHVybFxceylbXn1dKyg/PVxcfSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Lypcblx0XHQgKiBzZWN0aW9uIG9yIGNoYXB0ZXIgaGVhZGxpbmVzIGFyZSBoaWdobGlnaHRlZCBhcyBib2xkIHNvIHRoYXRcblx0XHQgKiB0aGV5IHN0YW5kIG91dCBtb3JlXG5cdFx0ICovXG5cdFx0J2hlYWRsaW5lJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcKD86Y2hhcHRlcnxmcmFtZXRpdGxlfHBhcmFncmFwaHxwYXJ0fHNlY3Rpb258c3VicGFyYWdyYXBofHN1YnNlY3Rpb258c3Vic3VicGFyYWdyYXBofHN1YnN1YnNlY3Rpb258c3Vic3Vic3VicGFyYWdyYXBoKVxcKj8oPzpcXFtbXlxcXV0rXFxdKT9cXHspW159XSsoPz1cXH0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiBmdW5jUGF0dGVybixcblx0XHRcdGFsaWFzOiAnc2VsZWN0b3InXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvW1tcXF17fSZdL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy50ZXggPSBQcmlzbS5sYW5ndWFnZXMubGF0ZXg7XG5cdFByaXNtLmxhbmd1YWdlcy5jb250ZXh0ID0gUHJpc20ubGFuZ3VhZ2VzLmxhdGV4O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5sYXR0ZSA9IHtcblx0XHQnY29tbWVudCc6IC9eXFx7XFwqW1xcc1xcU10qLyxcblx0XHQnbGF0dGUtdGFnJzoge1xuXHRcdFx0Ly8gaHR0cHM6Ly9sYXR0ZS5uZXR0ZS5vcmcvZW4vdGFnc1xuXHRcdFx0cGF0dGVybjogLyheXFx7KD86XFwvKD89W2Etel0pKT8pKD86Wz1fXXxbYS16XVxcdypcXGIoPyFcXCgpKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7XFwvP3xcXH0kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQncGhwJzoge1xuXHRcdFx0cGF0dGVybjogL1xcUyg/OltcXHNcXFNdKlxcUyk/Lyxcblx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcGhwJyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnBocFxuXHRcdH1cblx0fTtcblxuXHR2YXIgbWFya3VwTGF0dGUgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7fSk7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdhdHRyLXZhbHVlJywge1xuXHRcdCduLWF0dHInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvbjpbXFx3LV0rKD86XFxzKj1cXHMqKD86XCJbXlwiXSpcInwnW14nXSonfFteXFxzJ1wiPj1dKykpPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0dHItbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlteXFxzPV0rLyxcblx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLz1bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogW1xuXHRcdFx0XHRcdFx0XHQvXj0vLFxuXHRcdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL14oXFxzKilbXCInXXxbXCInXSQvLFxuXHRcdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdCdwaHAnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXFMoPzpbXFxzXFxTXSpcXFMpPy8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnBocFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9LFxuXHR9LCBtYXJrdXBMYXR0ZS50YWcpO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYubGFuZ3VhZ2UgIT09ICdsYXR0ZScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dmFyIGxhdHRlUGF0dGVybiA9IC9cXHtcXCpbXFxzXFxTXSo/XFwqXFx9fFxce1teJ1wiXFxze30qXSg/OlteXCInL3t9XXxcXC8oPyFbKi9dKXwoXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLykqXFx9L2c7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2xhdHRlJywgbGF0dGVQYXR0ZXJuKTtcblx0XHRlbnYuZ3JhbW1hciA9IG1hcmt1cExhdHRlO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdsYXR0ZScpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4vKiBGSVhNRSA6XG4gOmV4dGVuZCgpIGlzIG5vdCBoYW5kbGVkIHNwZWNpZmljYWxseSA6IGl0cyBoaWdobGlnaHRpbmcgaXMgYnVnZ3kuXG4gTWl4aW4gdXNhZ2UgbXVzdCBiZSBpbnNpZGUgYSBydWxlc2V0IHRvIGJlIGhpZ2hsaWdodGVkLlxuIEF0LXJ1bGVzIChlLmcuIGltcG9ydCkgY29udGFpbmluZyBpbnRlcnBvbGF0aW9ucyBhcmUgYnVnZ3kuXG4gRGV0YWNoZWQgcnVsZXNldHMgYXJlIGhpZ2hsaWdodGVkIGFzIGF0LXJ1bGVzLlxuIEEgY29tbWVudCBiZWZvcmUgYSBtaXhpbiB1c2FnZSBwcmV2ZW50cyB0aGUgbGF0dGVyIHRvIGJlIHByb3Blcmx5IGhpZ2hsaWdodGVkLlxuICovXG5cblByaXNtLmxhbmd1YWdlcy5sZXNzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY3NzJywge1xuXHQnY29tbWVudCc6IFtcblx0XHQvXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwvLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2F0cnVsZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFtcXHctXSg/OlxcKCg/OlteKCl7fV18XFwoW14oKXt9XSpcXCkpKlxcKXxbXigpe307XFxzXXxcXHMrKD8hXFxzKSkqPyg/PVxccypcXHspLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bOigpXS9cblx0XHR9XG5cdH0sXG5cdC8vIHNlbGVjdG9ycyBhbmQgbWl4aW5zIGFyZSBjb25zaWRlcmVkIHRoZSBzYW1lXG5cdCdzZWxlY3Rvcic6IHtcblx0XHRwYXR0ZXJuOiAvKD86QFxce1tcXHctXStcXH18W157fTtcXHNAXSkoPzpAXFx7W1xcdy1dK1xcfXxcXCgoPzpbXigpe31dfFxcKFteKCl7fV0qXFwpKSpcXCl8W14oKXt9O0BcXHNdfFxccysoPyFcXHMpKSo/KD89XFxzKlxceykvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0Ly8gbWl4aW4gcGFyYW1ldGVyc1xuXHRcdFx0J3ZhcmlhYmxlJzogL0ArW1xcdy1dKy9cblx0XHR9XG5cdH0sXG5cblx0J3Byb3BlcnR5JzogLyg/OkBcXHtbXFx3LV0rXFx9fFtcXHctXSkrKD86XFwrXz8pPyg/PVxccyo6KS8sXG5cdCdvcGVyYXRvcic6IC9bK1xcLSpcXC9dL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2xlc3MnLCAncHJvcGVydHknLCB7XG5cdCd2YXJpYWJsZSc6IFtcblx0XHQvLyBWYXJpYWJsZSBkZWNsYXJhdGlvbiAodGhlIGNvbG9uIG11c3QgYmUgY29uc3VtZWQhKVxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9AW1xcdy1dK1xccyo6Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gVmFyaWFibGUgdXNhZ2Vcblx0XHQvQEA/W1xcdy1dKy9cblx0XSxcblx0J21peGluLXVzYWdlJzoge1xuXHRcdHBhdHRlcm46IC8oW3s7XVxccyopWy4jXSg/IVxcZClbXFx3LV0uKj8oPz1bKDtdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9XG59KTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMuc2NoZW1lID0ge1xuXHRcdC8vIHRoaXMgc3VwcG9ydHMgXCJub3JtYWxcIiBzaW5nbGUtbGluZSBjb21tZW50czpcblx0XHQvLyAgIDsgY29tbWVudFxuXHRcdC8vIGFuZCAocG90ZW50aWFsbHkgbmVzdGVkKSBtdWx0aWxpbmUgY29tbWVudHM6XG5cdFx0Ly8gICAjfCBjb21tZW50ICN8IG5lc3RlZCB8IyBzdGlsbCBjb21tZW50IHwjXG5cdFx0Ly8gKG9ubHkgMSBsZXZlbCBvZiBuZXN0aW5nIGlzIHN1cHBvcnRlZClcblx0XHQnY29tbWVudCc6IC87Lip8IztcXHMqKD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8XFxbKD86W15cXFtcXF1dfFxcW1teXFxbXFxdXSpcXF0pKlxcXSl8I1xcfCg/OlteI3xdfCMoPyFcXHwpfFxcfCg/ISMpfCNcXHwoPzpbXiN8XXwjKD8hXFx8KXxcXHwoPyEjKSkqXFx8IykqXFx8Iy8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3ltYm9sJzoge1xuXHRcdFx0cGF0dGVybjogLydbXigpXFxbXFxdIydcXHNdKy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjaGFyJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXFxcKD86W3V4XVthLWZBLUZcXGRdK1xcYnxbLWEtekEtWl0rXFxifFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18XFxTKS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdsYW1iZGEtcGFyYW1ldGVyJzogW1xuXHRcdFx0Ly8gaHR0cHM6Ly93d3cuY3MuY211LmVkdS9Hcm91cHMvQUkvaHRtbC9yNHJzL3I0cnNfNi5odG1sI1NFQzMwXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdbGFtYmRhXFxzKykoPzpbXnwoKVxcW1xcXSdcXHNdK3xcXHwoPzpbXlxcXFx8XXxcXFxcLikqXFx8KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdbGFtYmRhXFxzK1soXFxbXSlbXigpXFxbXFxdJ10rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W14nYCNdKVsoXFxbXSkoPzpiZWdpbnxjYXNlKD86LWxhbWJkYSk/fGNvbmQoPzotZXhwYW5kKT98ZGVmaW5lKD86LWxpYnJhcnl8LW1hY3JvfC1yZWNvcmQtdHlwZXwtc3ludGF4fC12YWx1ZXMpP3xkZWZtYWNyb3xkZWxheSg/Oi1mb3JjZSk/fGRvfGVsc2V8ZXhjZXB0fGV4cG9ydHxndWFyZHxpZnxpbXBvcnR8aW5jbHVkZSg/Oi1jaXwtbGlicmFyeS1kZWNsYXJhdGlvbnMpP3xsYW1iZGF8bGV0KD86cmVjKT8oPzotc3ludGF4fC12YWx1ZXN8XFwqKT98bGV0XFwqLXZhbHVlc3xvbmx5fHBhcmFtZXRlcml6ZXxwcmVmaXh8KD86cXVhc2ktPyk/cXVvdGV8cmVuYW1lfHNldCF8c3ludGF4LSg/OmNhc2V8cnVsZXMpfHVubGVzc3x1bnF1b3RlKD86LXNwbGljaW5nKT98d2hlbikoPz1bKClcXFtcXF1cXHNdfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdidWlsdGluJzoge1xuXHRcdFx0Ly8gYWxsIGZ1bmN0aW9ucyBvZiB0aGUgYmFzZSBsaWJyYXJ5IG9mIFI3UlMgcGx1cyBzb21lIG9mIGJ1aWx0LWlucyBvZiBSNVJzXG5cdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W14nYCNdKVsoXFxbXSkoPzphYnN8YW5kfGFwcGVuZHxhcHBseXxhc3NvY3xhc3NbcXZdfGJpbmFyeS1wb3J0XFw/fGJvb2xlYW49P1xcP3xieXRldmVjdG9yKD86LWFwcGVuZHwtY29weXwtY29weSF8LWxlbmd0aHwtdTgtcmVmfC11OC1zZXQhfFxcPyk/fGNhYXJ8Y2FkcnxjYWxsLXdpdGgtKD86Y3VycmVudC1jb250aW51YXRpb258cG9ydHx2YWx1ZXMpfGNhbGxcXC9jY3xjYXJ8Y2RhcnxjZGRyfGNkcnxjZWlsaW5nfGNoYXIoPzotPmludGVnZXJ8LXJlYWR5XFw/fFxcP3w8XFw/fDw9XFw/fD1cXD98PlxcP3w+PVxcPyl8Y2xvc2UtKD86aW5wdXQtcG9ydHxvdXRwdXQtcG9ydHxwb3J0KXxjb21wbGV4XFw/fGNvbnN8Y3VycmVudC0oPzplcnJvcnxpbnB1dHxvdXRwdXQpLXBvcnR8ZGVub21pbmF0b3J8ZHluYW1pYy13aW5kfGVvZi1vYmplY3RcXD8/fGVxXFw/fGVxdWFsXFw/fGVxdlxcP3xlcnJvcnxlcnJvci1vYmplY3QoPzotaXJyaXRhbnRzfC1tZXNzYWdlfFxcPyl8ZXZhbHxldmVuXFw/fGV4YWN0KD86LWludGVnZXItc3FydHwtaW50ZWdlclxcP3xcXD8pP3xleHB0fGZlYXR1cmVzfGZpbGUtZXJyb3JcXD98Zmxvb3IoPzotcXVvdGllbnR8LXJlbWFpbmRlcnxcXC8pP3xmbHVzaC1vdXRwdXQtcG9ydHxmb3ItZWFjaHxnY2R8Z2V0LW91dHB1dC0oPzpieXRldmVjdG9yfHN0cmluZyl8aW5leGFjdFxcPz98aW5wdXQtcG9ydCg/Oi1vcGVuXFw/fFxcPyl8aW50ZWdlcig/Oi0+Y2hhcnxcXD8pfGxjbXxsZW5ndGh8bGlzdCg/Oi0+c3RyaW5nfC0+dmVjdG9yfC1jb3B5fC1yZWZ8LXNldCF8LXRhaWx8XFw/KT98bWFrZS0oPzpieXRldmVjdG9yfGxpc3R8cGFyYW1ldGVyfHN0cmluZ3x2ZWN0b3IpfG1hcHxtYXh8bWVtYmVyfG1lbXF8bWVtdnxtaW58bW9kdWxvfG5lZ2F0aXZlXFw/fG5ld2xpbmV8bm90fG51bGxcXD98bnVtYmVyKD86LT5zdHJpbmd8XFw/KXxudW1lcmF0b3J8b2RkXFw/fG9wZW4tKD86aW5wdXR8b3V0cHV0KS0oPzpieXRldmVjdG9yfHN0cmluZyl8b3J8b3V0cHV0LXBvcnQoPzotb3BlblxcP3xcXD8pfHBhaXJcXD98cGVlay1jaGFyfHBlZWstdTh8cG9ydFxcP3xwb3NpdGl2ZVxcP3xwcm9jZWR1cmVcXD98cXVvdGllbnR8cmFpc2V8cmFpc2UtY29udGludWFibGV8cmF0aW9uYWxcXD98cmF0aW9uYWxpemV8cmVhZC0oPzpieXRldmVjdG9yfGJ5dGV2ZWN0b3IhfGNoYXJ8ZXJyb3JcXD98bGluZXxzdHJpbmd8dTgpfHJlYWxcXD98cmVtYWluZGVyfHJldmVyc2V8cm91bmR8c2V0LWNbYWRdciF8c3F1YXJlfHN0cmluZyg/Oi0+bGlzdHwtPm51bWJlcnwtPnN5bWJvbHwtPnV0Zjh8LT52ZWN0b3J8LWFwcGVuZHwtY29weXwtY29weSF8LWZpbGwhfC1mb3ItZWFjaHwtbGVuZ3RofC1tYXB8LXJlZnwtc2V0IXxcXD98PFxcP3w8PVxcP3w9XFw/fD5cXD98Pj1cXD8pP3xzdWJzdHJpbmd8c3ltYm9sKD86LT5zdHJpbmd8XFw/fD1cXD8pfHN5bnRheC1lcnJvcnx0ZXh0dWFsLXBvcnRcXD98dHJ1bmNhdGUoPzotcXVvdGllbnR8LXJlbWFpbmRlcnxcXC8pP3x1OC1yZWFkeVxcP3x1dGY4LT5zdHJpbmd8dmFsdWVzfHZlY3Rvcig/Oi0+bGlzdHwtPnN0cmluZ3wtYXBwZW5kfC1jb3B5fC1jb3B5IXwtZmlsbCF8LWZvci1lYWNofC1sZW5ndGh8LW1hcHwtcmVmfC1zZXQhfFxcPyk/fHdpdGgtZXhjZXB0aW9uLWhhbmRsZXJ8d3JpdGUtKD86Ynl0ZXZlY3RvcnxjaGFyfHN0cmluZ3x1OCl8emVyb1xcPykoPz1bKClcXFtcXF1cXHNdfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdvcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXidgI10pWyhcXFtdKSg/OlstKyolL118Wzw+XT0/fD0+PykoPz1bKClcXFtcXF1cXHNdfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHQvLyBUaGUgbnVtYmVyIHBhdHRlcm4gZnJvbSBbdGhlIFI3UlMgc3BlY10oaHR0cHM6Ly9zbWFsbC5yN3JzLm9yZy9hdHRhY2htZW50L3I3cnMucGRmKS5cblx0XHRcdC8vXG5cdFx0XHQvLyA8bnVtYmVyPiAgICAgIDo9IDxudW0gMj58PG51bSA4Pnw8bnVtIDEwPnw8bnVtIDE2PlxuXHRcdFx0Ly8gPG51bSBSPiAgICAgICA6PSA8cHJlZml4IFI+PGNvbXBsZXggUj5cblx0XHRcdC8vIDxjb21wbGV4IFI+ICAgOj0gPHJlYWwgUj4oPzpAPHJlYWwgUj58PGltYWdpbmFyeSBSPik/fDxpbWFnaW5hcnkgUj5cblx0XHRcdC8vIDxpbWFnaW5hcnkgUj4gOj0gWystXSg/Ojx1cmVhbCBSPnwoPzppbmZ8bmFuKVxcLjApP2lcblx0XHRcdC8vIDxyZWFsIFI+ICAgICAgOj0gWystXT88dXJlYWwgUj58WystXSg/OmluZnxuYW4pXFwuMFxuXHRcdFx0Ly8gPHVyZWFsIFI+ICAgICA6PSA8dWludCBSPig/OlxcLzx1aW50IFI+KT9cblx0XHRcdC8vICAgICAgICAgICAgICAgIHwgPGRlY2ltYWwgUj5cblx0XHRcdC8vXG5cdFx0XHQvLyA8ZGVjaW1hbCAxMD4gIDo9ICg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT9cblx0XHRcdC8vIDx1aW50IFI+ICAgICAgOj0gPGRpZ2l0IFI+K1xuXHRcdFx0Ly8gPHByZWZpeCBSPiAgICA6PSA8cmFkaXggUj4oPzojW2VpXSk/fCg/OiNbZWldKT88cmFkaXggUj5cblx0XHRcdC8vIDxyYWRpeCAyPiAgICAgOj0gI2Jcblx0XHRcdC8vIDxyYWRpeCA4PiAgICAgOj0gI29cblx0XHRcdC8vIDxyYWRpeCAxMD4gICAgOj0gKD86I2QpP1xuXHRcdFx0Ly8gPHJhZGl4IDE2PiAgICA6PSAjeFxuXHRcdFx0Ly8gPGRpZ2l0IDI+ICAgICA6PSBbMDFdXG5cdFx0XHQvLyA8ZGlnaXQgOD4gICAgIDo9IFswLTddXG5cdFx0XHQvLyA8ZGlnaXQgMTA+ICAgIDo9IFxcZFxuXHRcdFx0Ly8gPGRpZ2l0IDE2PiAgICA6PSBbMC05YS1mXVxuXHRcdFx0Ly9cblx0XHRcdC8vIFRoZSBwcm9ibGVtIHdpdGggdGhpcyBncmFtbWFyIGlzIHRoYXQgdGhlIHJlc3VsdGluZyByZWdleCBpcyB3YXkgdG8gY29tcGxleCwgc28gd2Ugc2ltcGxpZnkgYnkgZ3JvdXBpbmcgYWxsXG5cdFx0XHQvLyBub24tZGVjaW1hbCBiYXNlcyB0b2dldGhlci4gVGhpcyByZXN1bHRzIGluIGEgZGVjaW1hbCAoZGVjKSBhbmQgY29tYmluZWQgYmluYXJ5LCBvY3RhbCwgYW5kIGhleGFkZWNpbWFsIChib3gpXG5cdFx0XHQvLyBwYXR0ZXJuOlxuXHRcdFx0cGF0dGVybjogUmVnRXhwKFNvcnRlZEJORih7XG5cdFx0XHRcdCc8dXJlYWwgZGVjPic6IC9cXGQrKD86XFwvXFxkKyl8KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/Oltlc2ZkbF1bKy1dP1xcZCspPy8uc291cmNlLFxuXHRcdFx0XHQnPHJlYWwgZGVjPic6IC9bKy1dPzx1cmVhbCBkZWM+fFsrLV0oPzppbmZ8bmFuKVxcLjAvLnNvdXJjZSxcblx0XHRcdFx0JzxpbWFnaW5hcnkgZGVjPic6IC9bKy1dKD86PHVyZWFsIGRlYz58KD86aW5mfG5hbilcXC4wKT9pLy5zb3VyY2UsXG5cdFx0XHRcdCc8Y29tcGxleCBkZWM+JzogLzxyZWFsIGRlYz4oPzpAPHJlYWwgZGVjPnw8aW1hZ2luYXJ5IGRlYz4pP3w8aW1hZ2luYXJ5IGRlYz4vLnNvdXJjZSxcblx0XHRcdFx0JzxudW0gZGVjPic6IC8oPzojZCg/OiNbZWldKT98I1tlaV0oPzojZCk/KT88Y29tcGxleCBkZWM+Ly5zb3VyY2UsXG5cblx0XHRcdFx0Jzx1cmVhbCBib3g+JzogL1swLTlhLWZdKyg/OlxcL1swLTlhLWZdKyk/Ly5zb3VyY2UsXG5cdFx0XHRcdCc8cmVhbCBib3g+JzogL1srLV0/PHVyZWFsIGJveD58WystXSg/OmluZnxuYW4pXFwuMC8uc291cmNlLFxuXHRcdFx0XHQnPGltYWdpbmFyeSBib3g+JzogL1srLV0oPzo8dXJlYWwgYm94PnwoPzppbmZ8bmFuKVxcLjApP2kvLnNvdXJjZSxcblx0XHRcdFx0Jzxjb21wbGV4IGJveD4nOiAvPHJlYWwgYm94Pig/OkA8cmVhbCBib3g+fDxpbWFnaW5hcnkgYm94Pik/fDxpbWFnaW5hcnkgYm94Pi8uc291cmNlLFxuXHRcdFx0XHQnPG51bSBib3g+JzogLyNbYm94XSg/OiNbZWldKT98KD86I1tlaV0pPyNbYm94XTxjb21wbGV4IGJveD4vLnNvdXJjZSxcblxuXHRcdFx0XHQnPG51bWJlcj4nOiAvKF58WygpXFxbXFxdXFxzXSkoPzo8bnVtIGRlYz58PG51bSBib3g+KSg/PVsoKVxcW1xcXVxcc118JCkvLnNvdXJjZSxcblx0XHRcdH0pLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58WygpXFxbXFxdXFxzXSkjKD86W2Z0XXxmYWxzZXx0cnVlKSg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteJ2AjXSlbKFxcW10pKD86W158KClcXFtcXF0nXFxzXSt8XFx8KD86W15cXFxcfF18XFxcXC4pKlxcfCkoPz1bKClcXFtcXF1cXHNdfCQpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdpZGVudGlmaWVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFsoKVxcW1xcXVxcc10pXFx8KD86W15cXFxcfF18XFxcXC4pKlxcfCg/PVsoKVxcW1xcXVxcc118JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXSddL1xuXHR9O1xuXG5cdC8qKlxuXHQgKiBHaXZlbiBhIHRvcG9sb2dpY2FsbHkgc29ydGVkIEJORiBncmFtbWFyLCB0aGlzIHdpbGwgcmV0dXJuIHRoZSBSZWdFeHAgc291cmNlIG9mIGxhc3QgcnVsZSBvZiB0aGUgZ3JhbW1hci5cblx0ICpcblx0ICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBncmFtbWFyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBTb3J0ZWRCTkYoZ3JhbW1hcikge1xuXHRcdGZvciAodmFyIGtleSBpbiBncmFtbWFyKSB7XG5cdFx0XHRncmFtbWFyW2tleV0gPSBncmFtbWFyW2tleV0ucmVwbGFjZSgvPFtcXHdcXHNdKz4vZywgZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0XHRyZXR1cm4gJyg/OicgKyBncmFtbWFyW2tleV0udHJpbSgpICsgJyknO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdC8vIHJldHVybiB0aGUgbGFzdCBpdGVtXG5cdFx0cmV0dXJuIGdyYW1tYXJba2V5XTtcblx0fVxuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc2NoZW1lRXhwcmVzc2lvbiA9IC9cXCgoPzpbXigpO1wiI1xcXFxdfFxcXFxbXFxzXFxTXXw7LiooPyEuKXxcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8Iyg/Olxceyg/Oig/ISNcXH0pW1xcc1xcU10pKiNcXH18W157XSl8PGV4cHI+KSpcXCkvLnNvdXJjZTtcblx0Ly8gYWxsb3cgZm9yIHVwIHRvIHBvdygyLCByZWN1cnNpdmVuZXNzTG9nMikgbWFueSBsZXZlbHMgb2YgcmVjdXJzaXZlIGJyYWNlIGV4cHJlc3Npb25zXG5cdC8vIEZvciBzb21lIHJlYXNvbiwgdGhpcyBjYW4ndCBiZSA0XG5cdHZhciByZWN1cnNpdmVuZXNzTG9nMiA9IDU7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgcmVjdXJzaXZlbmVzc0xvZzI7IGkrKykge1xuXHRcdHNjaGVtZUV4cHJlc3Npb24gPSBzY2hlbWVFeHByZXNzaW9uLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlbWVFeHByZXNzaW9uOyB9KTtcblx0fVxuXHRzY2hlbWVFeHByZXNzaW9uID0gc2NoZW1lRXhwcmVzc2lvbi5yZXBsYWNlKC88ZXhwcj4vZywgL1teXFxzXFxTXS8uc291cmNlKTtcblxuXG5cdHZhciBsaWx5cG9uZCA9IFByaXNtLmxhbmd1YWdlcy5saWx5cG9uZCA9IHtcblx0XHQnY29tbWVudCc6IC8lKD86KD8hXFx7KS4qfFxce1tcXHNcXFNdKj8lXFx9KS8sXG5cdFx0J2VtYmVkZGVkLXNjaGVtZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKF58Wz1cXHNdKSMoPzpcIig/OlteXCJcXFxcXXxcXFxcLikqXCJ8W15cXHMoKVwiXSooPzpbXlxccygpXXw8ZXhwcj4pKS8uc291cmNlLnJlcGxhY2UoLzxleHByPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzY2hlbWVFeHByZXNzaW9uOyB9KSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NjaGVtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXigjKVtcXHNcXFNdKyQvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1zY2hlbWUnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2VtYmVkZGVkLWxpbHlwb25kJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xce1tcXHNcXFNdKj8jXFx9Lyxcblx0XHRcdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXiNcXHt8I1xcfSQvLFxuXHRcdFx0XHRcdFx0XHRcdCdsaWx5cG9uZCc6IHtcblx0XHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1saWx5cG9uZCcsXG5cdFx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLnNjaGVtZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLyMvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFxcbmV3XFxzKylbXFx3LV0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogL1xcXFxbYS16XVstXFx3XSovaSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcXFwvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvWz18XXw8PHw+Pi8sXG5cdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFthLXpcXGRdKSg/OicrfCwrfFtfXl0/LVtfXl0/KD86Wy0rXiE+Ll9dfCg/PVxcZCkpfFtfXl1cXC4/fFsuIV0pfFt7fSgpW1xcXTw+Xn5dfFxcXFxbKClbXFxdPD5cXFxcIV18LS18X18vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwvXFxkKyk/XFxiL1xuXHR9O1xuXG5cdGxpbHlwb25kWydlbWJlZGRlZC1zY2hlbWUnXS5pbnNpZGVbJ3NjaGVtZSddLmluc2lkZVsnZW1iZWRkZWQtbGlseXBvbmQnXS5pbnNpZGVbJ2xpbHlwb25kJ10uaW5zaWRlID0gbGlseXBvbmQ7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmx5ID0gbGlseXBvbmQ7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmxpcXVpZCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyheXFx7JVxccypjb21tZW50XFxzKiVcXH0pW1xcc1xcU10rKD89XFx7JVxccyplbmRjb21tZW50XFxzKiVcXH0kKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnZGVsaW1pdGVyJzoge1xuXHRcdHBhdHRlcm46IC9eXFx7KD86XFx7XFx7fFslXFx7XSktP3wtPyg/OlxcfVxcfXxbJVxcfV0pXFx9JC8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcInwnW14nXSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YXN8YXNzaWdufGJyZWFrfCg/OmVuZCk/KD86Y2FwdHVyZXxjYXNlfGNvbW1lbnR8Zm9yfGZvcm18aWZ8cGFnaW5hdGV8cmF3fHN0eWxlfHRhYmxlcm93fHVubGVzcyl8Y29udGludWV8Y3ljbGV8ZGVjcmVtZW50fGVjaG98ZWxzZXxlbHNpZnxpbnxpbmNsdWRlfGluY3JlbWVudHxsaW1pdHxsaXF1aWR8b2Zmc2V0fHJhbmdlfHJlbmRlcnxyZXZlcnNlZHxzZWN0aW9ufHdoZW58d2l0aClcXGIvLFxuXHQnb2JqZWN0JzogL1xcYig/OmFkZHJlc3N8YWxsX2NvdW50cnlfb3B0aW9uX3RhZ3N8YXJ0aWNsZXxibG9ja3xibG9nfGNhcnR8Y2hlY2tvdXR8Y29sbGVjdGlvbnxjb2xvcnxjb3VudHJ5fGNvdW50cnlfb3B0aW9uX3RhZ3N8Y3VycmVuY3l8Y3VycmVudF9wYWdlfGN1cnJlbnRfdGFnc3xjdXN0b21lcnxjdXN0b21lcl9hZGRyZXNzfGRhdGV8ZGlzY291bnRfYWxsb2NhdGlvbnxkaXNjb3VudF9hcHBsaWNhdGlvbnxleHRlcm5hbF92aWRlb3xmaWx0ZXJ8ZmlsdGVyX3ZhbHVlfGZvbnR8Zm9ybG9vcHxmdWxmaWxsbWVudHxnZW5lcmljX2ZpbGV8Z2lmdF9jYXJkfGdyb3VwfGhhbmRsZXxpbWFnZXxsaW5lX2l0ZW18bGlua3xsaW5rbGlzdHxsb2NhbGl6YXRpb258bG9jYXRpb258bWVhc3VyZW1lbnR8bWVkaWF8bWV0YWZpZWxkfG1vZGVsfG1vZGVsX3NvdXJjZXxvcmRlcnxwYWdlfHBhZ2VfZGVzY3JpcHRpb258cGFnZV9pbWFnZXxwYWdlX3RpdGxlfHBhcnR8cG9saWN5fHByb2R1Y3R8cHJvZHVjdF9vcHRpb258cmVjb21tZW5kYXRpb25zfHJlcXVlc3R8cm9ib3RzfHJvdXRlc3xydWxlfHNjcmlwdHxzZWFyY2h8c2VsbGluZ19wbGFufHNlbGxpbmdfcGxhbl9hbGxvY2F0aW9ufHNlbGxpbmdfcGxhbl9ncm91cHxzaGlwcGluZ19tZXRob2R8c2hvcHxzaG9wX2xvY2FsZXxzaXRlbWFwfHN0b3JlX2F2YWlsYWJpbGl0eXx0YXhfbGluZXx0ZW1wbGF0ZXx0aGVtZXx0cmFuc2FjdGlvbnx1bml0X3ByaWNlX21lYXN1cmVtZW50fHVzZXJfYWdlbnR8dmFyaWFudHx2aWRlb3x2aWRlb19zb3VyY2UpXFxiLyxcblx0J2Z1bmN0aW9uJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFx8XFxzKilcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ZpbHRlcidcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGFycmF5IGZ1bmN0aW9uc1xuXHRcdFx0cGF0dGVybjogLyhcXC5cXHMqKSg/OmZpcnN0fGxhc3R8c2l6ZSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bmlsfHRydWUpXFxiLyxcblx0J3JhbmdlJzoge1xuXHRcdHBhdHRlcm46IC9cXC5cXC4vLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9TaG9waWZ5L2xpcXVpZC9ibG9iLzY5OGY1ZTBkOTY3NDIzZTAxM2Y2MTY5ZDkxMTFiZDk2OWJkNzgzMzcvbGliL2xpcXVpZC9sZXhlci5yYiNMMjFcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J29wZXJhdG9yJzogL1shPV09fDw+fFs8Pl09P3xbfD86PS1dfFxcYig/OmFuZHxjb250YWlucyg/PVxccyl8b3IpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1suLFxcW1xcXSgpXS8sXG5cdCdlbXB0eSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiZW1wdHlcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcbn07XG5cblByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHR2YXIgbGlxdWlkUGF0dGVybiA9IC9cXHslXFxzKmNvbW1lbnRcXHMqJVxcfVtcXHNcXFNdKj9cXHslXFxzKmVuZGNvbW1lbnRcXHMqJVxcfXxcXHsoPzolW1xcc1xcU10qPyV8XFx7XFx7W1xcc1xcU10qP1xcfVxcfXxcXHtbXFxzXFxTXSo/XFx9KVxcfS9nO1xuXHR2YXIgaW5zaWRlUmF3ID0gZmFsc2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ2xpcXVpZCcsIGxpcXVpZFBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdHZhciB0YWdNYXRjaCA9IC9eXFx7JS0/XFxzKihcXHcrKS8uZXhlYyhtYXRjaCk7XG5cdFx0aWYgKHRhZ01hdGNoKSB7XG5cdFx0XHR2YXIgdGFnID0gdGFnTWF0Y2hbMV07XG5cdFx0XHRpZiAodGFnID09PSAncmF3JyAmJiAhaW5zaWRlUmF3KSB7XG5cdFx0XHRcdGluc2lkZVJhdyA9IHRydWU7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSBlbHNlIGlmICh0YWcgPT09ICdlbmRyYXcnKSB7XG5cdFx0XHRcdGluc2lkZVJhdyA9IGZhbHNlO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gIWluc2lkZVJhdztcblx0fSk7XG59KTtcblxuUHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ2xpcXVpZCcpO1xufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0LyoqXG5cdCAqIEZ1bmN0aW9ucyB0byBjb25zdHJ1Y3QgcmVndWxhciBleHByZXNzaW9uc1xuXHQgKiBlLmcuIChpbnRlcmFjdGl2ZSAuLi4gb3IgKGludGVyYWN0aXZlKVxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gc2ltcGxlX2Zvcm0obmFtZSkge1xuXHRcdHJldHVybiBSZWdFeHAoLyhcXCgpLy5zb3VyY2UgKyAnKD86JyArIG5hbWUgKyAnKScgKyAvKD89W1xcc1xcKV0pLy5zb3VyY2UpO1xuXHR9XG5cdC8qKlxuXHQgKiBib29sZWFucyBhbmQgbnVtYmVyc1xuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gcHJpbWl0aXZlKHBhdHRlcm4pIHtcblx0XHRyZXR1cm4gUmVnRXhwKC8oW1xccyhbXSkvLnNvdXJjZSArICcoPzonICsgcGF0dGVybiArICcpJyArIC8oPz1bXFxzKV0pLy5zb3VyY2UpO1xuXHR9XG5cblx0Ly8gUGF0dGVybnMgaW4gcmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIFN5bWJvbCBuYW1lLiBTZWUgaHR0cHM6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9lbWFjcy9tYW51YWwvaHRtbF9ub2RlL2VsaXNwL1N5bWJvbC1UeXBlLmh0bWxcblx0Ly8gJiBhbmQgOiBhcmUgZXhjbHVkZWQgYXMgdGhleSBhcmUgdXN1YWxseSB1c2VkIGZvciBzcGVjaWFsIHB1cnBvc2VzXG5cdHZhciBzeW1ib2wgPSAvKD8hXFxkKVstKyovfiFAJCVePTw+e31cXHddKy8uc291cmNlO1xuXHQvLyBzeW1ib2wgc3RhcnRpbmcgd2l0aCAmIHVzZWQgaW4gZnVuY3Rpb24gYXJndW1lbnRzXG5cdHZhciBtYXJrZXIgPSAnJicgKyBzeW1ib2w7XG5cdC8vIE9wZW4gcGFyZW50aGVzaXMgZm9yIGxvb2stYmVoaW5kXG5cdHZhciBwYXIgPSAnKFxcXFwoKSc7XG5cdHZhciBlbmRwYXIgPSAnKD89XFxcXCkpJztcblx0Ly8gRW5kIHRoZSBwYXR0ZXJuIHdpdGggbG9vay1haGVhZCBzcGFjZVxuXHR2YXIgc3BhY2UgPSAnKD89XFxcXHMpJztcblx0dmFyIG5lc3RlZFBhciA9IC8oPzpbXigpXXxcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSkqXFwpKSpcXCkpKlxcKSkqLy5zb3VyY2U7XG5cblx0dmFyIGxhbmd1YWdlID0ge1xuXHRcdC8vIFRocmVlIG9yIGZvdXIgc2VtaWNvbG9ucyBhcmUgY29uc2lkZXJlZCBhIGhlYWRpbmcuXG5cdFx0Ly8gU2VlIGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvZW1hY3MvbWFudWFsL2h0bWxfbm9kZS9lbGlzcC9Db21tZW50LVRpcHMuaHRtbFxuXHRcdGhlYWRpbmc6IHtcblx0XHRcdHBhdHRlcm46IC87OzsuKi8sXG5cdFx0XHRhbGlhczogWydjb21tZW50JywgJ3RpdGxlJ11cblx0XHR9LFxuXHRcdGNvbW1lbnQ6IC87LiovLFxuXHRcdHN0cmluZzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFwuKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0YXJndW1lbnQ6IC9bLUEtWl0rKD89Wy4sXFxzXSkvLFxuXHRcdFx0XHRzeW1ib2w6IFJlZ0V4cCgnYCcgKyBzeW1ib2wgKyBcIidcIilcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdxdW90ZWQtc3ltYm9sJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFwiIz8nXCIgKyBzeW1ib2wpLFxuXHRcdFx0YWxpYXM6IFsndmFyaWFibGUnLCAnc3ltYm9sJ11cblx0XHR9LFxuXHRcdCdsaXNwLXByb3BlcnR5Jzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKCc6JyArIHN5bWJvbCksXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0c3BsaWNlOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyxAPycgKyBzeW1ib2wpLFxuXHRcdFx0YWxpYXM6IFsnc3ltYm9sJywgJ3ZhcmlhYmxlJ11cblx0XHR9LFxuXHRcdGtleXdvcmQ6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHRcdHBhciArXG5cdFx0XHRcdFx0XHQnKD86YW5kfCg/OmNsLSk/bGV0ZnxjbC1sb29wfGNvbmR8Y29uc3xlcnJvcnxpZnwoPzpsZXhpY2FsLSk/bGV0XFxcXCo/fG1lc3NhZ2V8bm90fG51bGx8b3J8cHJvdmlkZXxyZXF1aXJlfHNldHF8dW5sZXNzfHVzZS1wYWNrYWdlfHdoZW58d2hpbGUpJyArXG5cdFx0XHRcdFx0XHRzcGFjZVxuXHRcdFx0XHQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdFx0cGFyICsgJyg/OmFwcGVuZHxieXxjb2xsZWN0fGNvbmNhdHxkb3xmaW5hbGx5fGZvcnxpbnxyZXR1cm4pJyArIHNwYWNlXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XSxcblx0XHRkZWNsYXJlOiB7XG5cdFx0XHRwYXR0ZXJuOiBzaW1wbGVfZm9ybSgvZGVjbGFyZS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHRpbnRlcmFjdGl2ZToge1xuXHRcdFx0cGF0dGVybjogc2ltcGxlX2Zvcm0oL2ludGVyYWN0aXZlLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdGJvb2xlYW46IHtcblx0XHRcdHBhdHRlcm46IHByaW1pdGl2ZSgvbmlsfHQvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHRudW1iZXI6IHtcblx0XHRcdHBhdHRlcm46IHByaW1pdGl2ZSgvWy0rXT9cXGQrKD86XFwuXFxkKik/Ly5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0ZGVmdmFyOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgJ2RlZig/OmNvbnN0fGN1c3RvbXxncm91cHx2YXIpXFxcXHMrJyArIHN5bWJvbCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdGtleXdvcmQ6IC9eZGVmW2Etel0rLyxcblx0XHRcdFx0dmFyaWFibGU6IFJlZ0V4cChzeW1ib2wpXG5cdFx0XHR9XG5cdFx0fSxcblx0XHRkZWZ1bjoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHBhciArIC8oPzpjbC0pPyg/OmRlZm1hY3JvfGRlZnVuXFwqPylcXHMrLy5zb3VyY2UgKyBzeW1ib2wgKyAvXFxzK1xcKC8uc291cmNlICsgbmVzdGVkUGFyICsgL1xcKS8uc291cmNlKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0a2V5d29yZDogL14oPzpjbC0pP2RlZlxcUysvLFxuXHRcdFx0XHQvLyBTZWUgYmVsb3csIHRoaXMgcHJvcGVydHkgbmVlZHMgdG8gYmUgZGVmaW5lZCBsYXRlciBzbyB0aGF0IGl0IGNhblxuXHRcdFx0XHQvLyByZWZlcmVuY2UgdGhlIGxhbmd1YWdlIG9iamVjdC5cblx0XHRcdFx0YXJndW1lbnRzOiBudWxsLFxuXHRcdFx0XHRmdW5jdGlvbjoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKF5cXFxccyknICsgc3ltYm9sKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvWygpXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdGxhbWJkYToge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHBhciArICdsYW1iZGFcXFxccytcXFxcKFxcXFxzKig/OiY/JyArIHN5bWJvbCArICcoPzpcXFxccysmPycgKyBzeW1ib2wgKyAnKSpcXFxccyopP1xcXFwpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdGtleXdvcmQ6IC9ebGFtYmRhLyxcblx0XHRcdFx0Ly8gU2VlIGJlbG93LCB0aGlzIHByb3BlcnR5IG5lZWRzIHRvIGJlIGRlZmluZWQgbGF0ZXIgc28gdGhhdCBpdCBjYW5cblx0XHRcdFx0Ly8gcmVmZXJlbmNlIHRoZSBsYW5ndWFnZSBvYmplY3QuXG5cdFx0XHRcdGFyZ3VtZW50czogbnVsbCxcblx0XHRcdFx0cHVuY3R1YXRpb246IC9bKCldL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Y2FyOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgc3ltYm9sKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHB1bmN0dWF0aW9uOiBbXG5cdFx0XHQvLyBvcGVuIHBhcmVuLCBicmFja2V0cywgYW5kIGNsb3NlIHBhcmVuXG5cdFx0XHQvKD86WydgLF0/XFwofFspXFxbXFxdXSkvLFxuXHRcdFx0Ly8gY29uc1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXC4oPz1cXHMpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdXG5cdH07XG5cblx0dmFyIGFyZyA9IHtcblx0XHQnbGlzcC1tYXJrZXInOiBSZWdFeHAobWFya2VyKSxcblx0XHQndmFyZm9ybSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvXFwoLy5zb3VyY2UgKyBzeW1ib2wgKyAvXFxzKyg/PVxcUykvLnNvdXJjZSArIG5lc3RlZFBhciArIC9cXCkvLnNvdXJjZSksXG5cdFx0XHRpbnNpZGU6IGxhbmd1YWdlXG5cdFx0fSxcblx0XHQnYXJndW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFtcXHMoXSkvLnNvdXJjZSArIHN5bWJvbCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHR9LFxuXHRcdHJlc3Q6IGxhbmd1YWdlXG5cdH07XG5cblx0dmFyIGZvcm1zID0gJ1xcXFxTKyg/OlxcXFxzK1xcXFxTKykqJztcblxuXHR2YXIgYXJnbGlzdCA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAocGFyICsgbmVzdGVkUGFyICsgZW5kcGFyKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3Jlc3QtdmFycyc6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCcmKD86Ym9keXxyZXN0KVxcXFxzKycgKyBmb3JtcyksXG5cdFx0XHRcdGluc2lkZTogYXJnXG5cdFx0XHR9LFxuXHRcdFx0J290aGVyLW1hcmtlci12YXJzJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyYoPzphdXh8b3B0aW9uYWwpXFxcXHMrJyArIGZvcm1zKSxcblx0XHRcdFx0aW5zaWRlOiBhcmdcblx0XHRcdH0sXG5cdFx0XHRrZXlzOiB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnJmtleVxcXFxzKycgKyBmb3JtcyArICcoPzpcXFxccysmYWxsb3ctb3RoZXIta2V5cyk/JyksXG5cdFx0XHRcdGluc2lkZTogYXJnXG5cdFx0XHR9LFxuXHRcdFx0YXJndW1lbnQ6IHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHN5bWJvbCksXG5cdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHR9LFxuXHRcdFx0cHVuY3R1YXRpb246IC9bKCldL1xuXHRcdH1cblx0fTtcblxuXHRsYW5ndWFnZVsnbGFtYmRhJ10uaW5zaWRlLmFyZ3VtZW50cyA9IGFyZ2xpc3Q7XG5cdGxhbmd1YWdlWydkZWZ1biddLmluc2lkZS5hcmd1bWVudHMgPSBQcmlzbS51dGlsLmNsb25lKGFyZ2xpc3QpO1xuXHRsYW5ndWFnZVsnZGVmdW4nXS5pbnNpZGUuYXJndW1lbnRzLmluc2lkZS5zdWJsaXN0ID0gYXJnbGlzdDtcblxuXHRQcmlzbS5sYW5ndWFnZXMubGlzcCA9IGxhbmd1YWdlO1xuXHRQcmlzbS5sYW5ndWFnZXMuZWxpc3AgPSBsYW5ndWFnZTtcblx0UHJpc20ubGFuZ3VhZ2VzLmVtYWNzID0gbGFuZ3VhZ2U7XG5cdFByaXNtLmxhbmd1YWdlc1snZW1hY3MtbGlzcCddID0gbGFuZ3VhZ2U7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5saXZlc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnaW50ZXJwb2xhdGVkLXN0cmluZyc6IHtcblx0XHQvKiBMb29rLWJlaGluZCBhbmQgbG9vay1haGVhZCBwcmV2ZW50cyB3cm9uZyBiZWhhdmlvciBvZiB0aGUgZ3JlZWR5IHBhdHRlcm5cblx0XHQqIGZvcmNpbmcgaXQgdG8gbWF0Y2ggXCJcIlwiLXF1b3RlZCBzdHJpbmcgd2hlbiBpdCB3b3VsZCBvdGhlcndpc2UgbWF0Y2ggXCItcXVvdGVkIGZpcnN0LiAqL1xuXHRcdHBhdHRlcm46IC8oXnxbXlwiXSkoXCJcIlwifFwiKSg/OlxcXFxbXFxzXFxTXXwoPyFcXDIpW15cXFxcXSkqXFwyKD8hXCIpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pI1thLXpfXSg/Oi0/W2Etel18W1xcZF9dKSovbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjXFx7W159XStcXH0vbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXiNcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBTZWUgcmVzdCBiZWxvd1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oJycnfCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvPFxcW1tcXHNcXFNdKj9cXF0+Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0L1xcXFxbXlxccyw7XFxdKX1dKy9cblx0XSxcblx0J3JlZ2V4JzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXC9cXC8oPzpcXFtbXlxcclxcblxcXV0qXFxdfFxcXFwufCg/IVxcL1xcLylbXlxcXFxcXFtdKStcXC9cXC9bZ2lteXVdezAsNX0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMuKi8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvKD86XFxbW15cXHJcXG5cXF1dKlxcXXxcXFxcLnxbXi9cXFxcXFxyXFxuXFxbXSkrXFwvW2dpbXl1XXswLDV9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyhefCg/IS0pLilcXGIoPzpicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnN0fGNvbnRpbnVlfGRlZmF1bHR8ZG98ZWxzZXxleHRlbmRzfGZhbGx0aHJvdWdofGZpbmFsbHl8Zm9yKD86IGV2ZXIpP3xmdW5jdGlvbnxpZnxpbXBsZW1lbnRzfGl0fGxldHxsb29wfG5ld3xudWxsfG90aGVyd2lzZXxvd258cmV0dXJufHN1cGVyfHN3aXRjaHx0aGF0fHRoZW58dGhpc3x0aHJvd3x0cnl8dW5sZXNzfHVudGlsfHZhcnx2b2lkfHdoZW58d2hpbGV8eWllbGQpKD8hLSlcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkLW9wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi1dKVxcYig/Oig/OmRlbGV0ZXxyZXF1aXJlfHR5cGVvZikhfCg/OmFuZHxieXxkZWxldGV8ZXhwb3J0fGZyb218aW1wb3J0KD86IGFsbCk/fGlufGluc3RhbmNlb2Z8aXMoPzogbm90fG50KT98bm90fG9mfG9yfHRpbHx0b3x0eXBlb2Z8d2l0aHx4b3IpKD8hLSlcXGIpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14tXSlcXGIoPzpmYWxzZXxub3xvZmZ8b258dHJ1ZXx5ZXMpKD8hLSlcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdhcmd1bWVudCc6IHtcblx0XHQvLyBEb24ndCBtYXRjaCAuJi4gbm9yICYmXG5cdFx0cGF0dGVybjogLyhefCg/IVxcLiZcXC4pW14mXSkmKD8hJilcXGQqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYig/OlxcZCt+W1xcZGEtel0rfFxcZFtcXGRfXSooPzpcXC5cXGRbXFxkX10qKT8oPzpbYS16XVxcdyopPykvaSxcblx0J2lkZW50aWZpZXInOiAvW2Etel9dKD86LT9bYS16XXxbXFxkX10pKi9pLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0Ly8gU3BhY2VkIC5cblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKCApXFwuKD89ICkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRnVsbCBsaXN0LCBpbiBvcmRlcjpcblx0XHQvLyAuPSAufiAuLiAuLi5cblx0XHQvLyAuJi4gLl4uIC48PC4gLj4+LiAuPj4+LlxuXHRcdC8vIDo9IDo6IDo6PVxuXHRcdC8vICYmXG5cdFx0Ly8gfHwgfD5cblx0XHQvLyA8IDw8IDw8PCA8PDw8XG5cdFx0Ly8gPC0gPC0tIDwtISA8LS0hXG5cdFx0Ly8gPH4gPH5+IDx+ISA8fn4hXG5cdFx0Ly8gPHwgPD0gPD9cblx0XHQvLyA+ID4+ID49ID4/XG5cdFx0Ly8gLSAtLSAtPiAtLT5cblx0XHQvLyArICsrXG5cdFx0Ly8gQCBAQFxuXHRcdC8vICUgJSVcblx0XHQvLyAqICoqXG5cdFx0Ly8gISAhPSAhfj1cblx0XHQvLyAhfj4gIX5+PlxuXHRcdC8vICEtPiAhLS0+XG5cdFx0Ly8gfiB+PiB+fj4gfj1cblx0XHQvLyA9ID09XG5cdFx0Ly8gXiBeXlxuXHRcdC8vIC8gP1xuXHRcdC9cXC4oPzpbPX5dfFxcLlxcLj8pfFxcLig/OlsmfF5dfDw8fD4+Pj8pXFwufDooPzo9fDo9Pyl8JiZ8XFx8W3w+XXw8KD86PDw/PD98LS0/IT98fn4/IT98W3w9P10pP3w+Wz49P10/fC0oPzotPj98Pik/fFxcK1xcKz98QEA/fCUlP3xcXCpcXCo/fCEoPzp+Pz18LS0/Pnx+P34+KT98fig/On4/Pnw9KT98PT0/fFxcXlxcXj98W1xcLz9dL1xuXHRdLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF18Liw6O2BdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmxpdmVzY3JpcHRbJ2ludGVycG9sYXRlZC1zdHJpbmcnXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5saXZlc2NyaXB0O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5sbHZtID0ge1xuXHRcdCdjb21tZW50JzogLzsuKi8sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIlteXCJdKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHQndmFyaWFibGUnOiAvWyVAISNdKD86KD8hXFxkKSg/OlstJC5cXHddfFxcXFxbYS1mXFxkXXsyfSkrfFxcZCspL2ksXG5cdFx0J2xhYmVsJzogLyg/IVxcZCkoPzpbLSQuXFx3XXxcXFxcW2EtZlxcZF17Mn0pKzovaSxcblx0XHQndHlwZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpkb3VibGV8ZmxvYXR8ZnAxMjh8aGFsZnxpWzEtOV1cXGQqfGxhYmVsfG1ldGFkYXRhfHBwY19mcDEyOHx0b2tlbnx2b2lkfHg4Nl9mcDgwfHg4Nl9tbXgpXFxiLyxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGJbYS16X11bYS16XzAtOV0qXFxiLyxcblx0XHQnbnVtYmVyJzogL1srLV0/XFxiXFxkKyg/OlxcLlxcZCspPyg/OltlRV1bKy1dP1xcZCspP1xcYnxcXGIweFtcXGRBLUZhLWZdK1xcYnxcXGIweEtbXFxkQS1GYS1mXXsyMH1cXGJ8XFxiMHhbTUxdW1xcZEEtRmEtZl17MzJ9XFxifFxcYjB4SFtcXGRBLUZhLWZdezR9XFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuISo9PD5dLyxcblx0fTtcbn0oUHJpc20pKTtcblxuLy8gVGhpcyBpcyBhIGxhbmd1YWdlIGRlZmluaXRpb24gZm9yIGdlbmVyaWMgbG9nIGZpbGVzLlxuLy8gU2luY2UgdGhlcmUgaXMgbm8gb25lIGxvZyBmb3JtYXQsIHRoaXMgbGFuZ3VhZ2UgZGVmaW5pdGlvbiBoYXMgdG8gc3VwcG9ydCBhbGwgZm9ybWF0cyB0byBzb21lIGRlZ3JlZS5cbi8vXG4vLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vTVRETDkvdmltLWxvZy1oaWdobGlnaHRpbmdcblxuUHJpc20ubGFuZ3VhZ2VzLmxvZyA9IHtcblx0J3N0cmluZyc6IHtcblx0XHQvLyBTaW5nbGUtcXVvdGVkIHN0cmluZ3MgbXVzdCBub3QgYmUgY29uZnVzZWQgd2l0aCBwbGFpbiB0ZXh0LiBFLmcuIENhbid0IGlzbid0IFN1c2FuJ3MgQ2hyaXMnIHRveVxuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCJ8Jyg/IVtzdF0gfCBcXHcpKD86W14nXFxcXFxcclxcbl18XFxcXC4pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0fSxcblxuXHQnZXhjZXB0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKVthLXpdW1xcdy5dKig/OkVycm9yfEV4Y2VwdGlvbik6LiooPzooPzpcXHJcXG4/fFxcbilbIFxcdF0qKD86YXRbIFxcdF0uK3xcXC57M30uKnxDYXVzZWQgYnk6LiopKSsoPzooPzpcXHJcXG4/fFxcbilbIFxcdF0qXFwuXFwuXFwuIC4qKT8vLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiBbJ2phdmFzdGFja3RyYWNlJywgJ2xhbmd1YWdlLWphdmFzdGFja3RyYWNlJ10sXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXNbJ2phdmFzdGFja3RyYWNlJ10gfHwge1xuXHRcdFx0J2tleXdvcmQnOiAvXFxiYXRcXGIvLFxuXHRcdFx0J2Z1bmN0aW9uJzogL1thLXpfXVtcXHckXSooPz1cXCgpLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLjooKV0vXG5cdFx0fVxuXHR9LFxuXG5cdCdsZXZlbCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86QUxFUlR8Q1JJVHxDUklUSUNBTHxFTUVSR3xFTUVSR0VOQ1l8RVJSfEVSUk9SfEZBSUxVUkV8RkFUQUx8U0VWRVJFKVxcYi8sXG5cdFx0XHRhbGlhczogWydlcnJvcicsICdpbXBvcnRhbnQnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OldBUk58V0FSTklOR3xXUk4pXFxiLyxcblx0XHRcdGFsaWFzOiBbJ3dhcm5pbmcnLCAnaW1wb3J0YW50J11cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpESVNQTEFZfElORnxJTkZPfE5PVElDRXxTVEFUVVMpXFxiLyxcblx0XHRcdGFsaWFzOiBbJ2luZm8nLCAna2V5d29yZCddXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86REJHfERFQlVHfEZJTkUpXFxiLyxcblx0XHRcdGFsaWFzOiBbJ2RlYnVnJywgJ2tleXdvcmQnXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkZJTkVSfEZJTkVTVHxUUkFDRXxUUkN8VkVSQk9TRXxWUkIpXFxiLyxcblx0XHRcdGFsaWFzOiBbJ3RyYWNlJywgJ2NvbW1lbnQnXVxuXHRcdH1cblx0XSxcblxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFtcXF18XSlbIFxcdF0qKVthLXpfXSg/OltcXHctXXxcXGJcXC9cXGIpKig/OlsuIF1cXCg/XFx3KD86W1xcdy1dfFxcYlxcL1xcYikqXFwpPykqOig/PVxccykvaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdzZXBhcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhefFteLStdKS17Myx9fD17Myx9fFxcKnszLH18LSAtIC9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50J1xuXHR9LFxuXG5cdCd1cmwnOiAvXFxiKD86ZmlsZXxmdHB8aHR0cHM/KTpcXC9cXC9bXlxcc3wsOydcIl0qW15cXHN8LDsnXCI+Ll0vLFxuXHQnZW1haWwnOiB7XG5cdFx0cGF0dGVybjogLyhefFxccylbLVxcdysuXStAW2Etel1bYS16MC05LV0qKD86XFwuW2Etel1bYS16MC05LV0qKSsoPz1cXHMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndXJsJ1xuXHR9LFxuXG5cdCdpcC1hZGRyZXNzJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpcXGR7MSwzfSg/OlxcLlxcZHsxLDN9KXszfSlcXGIvLFxuXHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdH0sXG5cdCdtYWMtYWRkcmVzcyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2EtZjAtOV17Mn0oPzo6W2EtZjAtOV17Mn0pezV9XFxiL2ksXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J2RvbWFpbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVthLXpdW2EtejAtOS1dKig/OlxcLlthLXpdW2EtejAtOS1dKikqXFwuW2Etel1bYS16MC05LV0rKD89XFxzKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXG5cdCd1dWlkJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbMC05YS1mXXs4fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXs0fS1bMC05YS1mXXsxMn1cXGIvaSxcblx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHR9LFxuXHQnaGFzaCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86W2EtZjAtOV17MzJ9KXsxLDJ9XFxiL2ksXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblxuXHQnZmlsZS1wYXRoJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16XTpbXFxcXC9dW15cXHN8LDs6KCl7fVxcW1xcXVwiJ10rfChefFtcXHM6XFxbXFxdKD58XSlcXC57MCwyfVxcL1xcd1teXFxzfCw7Oigpe31cXFtcXF1cIiddKi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXG5cdCdkYXRlJzoge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC9cXGJcXGR7NH1bLS9dXFxkezJ9Wy0vXVxcZHsyfSg/OlQoPz1cXGR7MSwyfTopfCg/PVxcc1xcZHsxLDJ9OikpLy5zb3VyY2UgK1xuXHRcdFx0J3wnICtcblx0XHRcdC9cXGJcXGR7MSw0fVstLyBdKD86XFxkezEsMn18QXByfEF1Z3xEZWN8RmVifEphbnxKdWx8SnVufE1hcnxNYXl8Tm92fE9jdHxTZXApWy0vIF1cXGR7Miw0fVQ/XFxiLy5zb3VyY2UgK1xuXHRcdFx0J3wnICtcblx0XHRcdC9cXGIoPzooPzpGcml8TW9ufFNhdHxTdW58VGh1fFR1ZXxXZWQpKD86XFxzezEsMn0oPzpBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcCkpP3xBcHJ8QXVnfERlY3xGZWJ8SmFufEp1bHxKdW58TWFyfE1heXxOb3Z8T2N0fFNlcClcXHN7MSwyfVxcZHsxLDJ9XFxiLy5zb3VyY2UsXG5cdFx0XHQnaSdcblx0XHQpLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQndGltZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFxkezEsMn06XFxkezEsMn06XFxkezEsMn0oPzpbLiw6XVxcZCspPyg/Olxccz9bKy1dXFxkezJ9Oj9cXGR7Mn18Wik/XFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxudWxsfHRydWUpXFxiL2ksXG5cdCdudW1iZXInOiB7XG5cdFx0cGF0dGVybjogLyhefFteLlxcd10pKD86MHhbYS1mMC05XSt8MG9bMC03XSt8MGJbMDFdK3x2P1xcZFtcXGRhLWZdKig/OlxcLlxcZCspKig/OmVbKy1dP1xcZCspP1thLXpdezAsM31cXGIpXFxiKD8hXFwuXFx3KS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnb3BlcmF0b3InOiAvWzs6Pzw9Pn4vQCEkJSYrXFwtfF4oKXt9KiNdLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0uLF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubG9sY29kZSA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0L1xcYk9CVFdcXHNbXFxzXFxTXSo/XFxzVExEUlxcYi8sXG5cdFx0L1xcYkJUVy4rL1xuXHRdLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OjoufFteXCI6XSkqXCIvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogLzpcXHtbXn1dK1xcfS8sXG5cdFx0XHQnc3ltYm9sJzogW1xuXHRcdFx0XHQvOlxcKFthLWZcXGRdK1xcKS9pLFxuXHRcdFx0XHQvOlxcW1teXFxdXStcXF0vLFxuXHRcdFx0XHQvOlspPm9cIjpdL1xuXHRcdFx0XVxuXHRcdH0sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiAvKD86XFxCLSk/KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKS8sXG5cdCdzeW1ib2wnOiB7XG5cdFx0cGF0dGVybjogLyhefFxccykoPzpBICk/KD86QlVLS0lUfE5PT0J8TlVNQkFSfE5VTUJSfFRST09GfFlBUk4pKD89XFxzfCx8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQna2V5d29yZCc6IC9BKD89XFxzKS9cblx0XHR9XG5cdH0sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKSg/OklNIElOIFlSfElNIE9VVFRBIFlSKSApW2EtekEtWl1cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccykoPzpIT1cgSVogSXxJIElafElaKSApW2EtekEtWl1cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMpKD86QU58Rk9VTkQgWVJ8R0lNTUVIfEdURk98SEFJfEhBUyBBfEhPVyBJWiBJfEkgSEFTIEF8SSBJWnxJRiBVIFNBWSBTT3xJTSBJTiBZUnxJTSBPVVRUQSBZUnxJUyBOT1coPzogQSk/fElUWig/OiBBKT98SVp8S1RIWHxLVEhYQllFfExJRUsoPzogQSk/fE1BRUt8TUVCQkV8TUtBWXxORVJGSU58Tk8gV0FJfE8gSEFJIElNfE8gUkxZXFw/fE9JQ3xPTUd8T01HV1RGfFJ8U01PT1NIfFNSU3xUSUx8VVBQSU58VklTSUJMRXxXSUxFfFdURlxcP3xZQSBSTFl8WVIpKD89XFxzfCx8JCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0LydaKD89XFxzfCx8JCkvXG5cdF0sXG5cdCdib29sZWFuJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpKD86RkFJTHxXSU4pKD89XFxzfCx8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC8oXnxcXHMpSVQoPz1cXHN8LHwkKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhefFxccykoPzpOT1R8Qk9USCBTQUVNfERJRkZSSU5UfCg/OkFMTHxBTll8QklHR1J8Qk9USHxESUZGfEVJVEhFUnxNT0R8UFJPRFVLVHxRVU9TSFVOVHxTTUFMTFJ8U1VNfFdPTikgT0YpKD89XFxzfCx8JCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1xcLnszfXxcdTIwMjZ8LHwhL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1hZ21hID0ge1xuXHQnb3V0cHV0Jzoge1xuXHRcdHBhdHRlcm46IC9eKD4uKig/Olxccig/OlxcbnwoPyFcXG4pKXxcXG4pKSg/IT4pKD86Lit8KD86XFxyKD86XFxufCg/IVxcbikpfFxcbikoPyE+KS4qKSg/Oig/Olxccig/OlxcbnwoPyFcXG4pKXxcXG4pKD8hPikuKikqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXFwiXSlcIig/OlteXFxyXFxuXFxcXFwiXXxcXFxcLikqXCIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0Ly8gaHR0cDovL21hZ21hLm1hdGhzLnVzeWQuZWR1LmF1L21hZ21hL2hhbmRib29rL3RleHQvODJcblx0J2tleXdvcmQnOiAvXFxiKD86X3xhZGp8YW5kfGFzc2VydHxhc3NlcnQyfGFzc2VydDN8YXNzaWduZWR8YnJlYWt8Ynl8Y2FzZXxjYXR8Y2F0Y2h8Y2xlYXJ8Y21wZXF8Y21wbmV8Y29udGludWV8ZGVjbGFyZXxkZWZhdWx0fGRlbGV0ZXxkaWZmfGRpdnxkb3xlbGlmfGVsc2V8ZW5kfGVxfGVycm9yfGV2YWx8ZXhpc3RzfGV4aXR8Zm9yfGZvcmFsbHxmb3J3YXJkfGZwcmludGZ8ZnJlZXplfGZ1bmN0aW9ufGdlfGd0fGlmfGlsb2FkfGltcG9ydHxpbnxpbnRyaW5zaWN8aXN8am9pbnxsZXxsb2FkfGxvY2FsfGx0fG1lZXR8bW9kfG5lfG5vdHxub3RhZGp8bm90aW58bm90c3Vic2V0fG9yfHByaW50fHByaW50Znxwcm9jZWR1cmV8cXVpdHxyYW5kb218cmVhZHxyZWFkaXxyZXBlYXR8cmVxdWlyZXxyZXF1aXJlZ2V8cmVxdWlyZXJhbmdlfHJlc3RvcmV8cmV0dXJufHNhdmV8c2RpZmZ8c2VsZWN0fHN1YnNldHx0aGVufHRpbWV8dG98dHJ5fHVudGlsfHZwcmludHx2cHJpbnRmfHZ0aW1lfHdoZW58d2hlcmV8d2hpbGV8eG9yKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZ2VuZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKjwpL2ksXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXXxcXC5cXC4pKD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRV1bKy1dP1xcZCspPyg/Ol9bYS16XT8pPyg/PSR8W15cXHcuXXxcXC5cXC4pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J29wZXJhdG9yJzogLy0+fFstKyovXn4hfCM9XXw6PXxcXC5cXC4vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpW1xcXXt9PD4sOy46XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5tYWtlZmlsZSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pIyg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcclxcbl0pKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2J1aWx0aW4tdGFyZ2V0Jzoge1xuXHRcdHBhdHRlcm46IC9cXC5bQS1aXVteOiM9XFxzXSsoPz1cXHMqOig/IT0pKS8sXG5cdFx0YWxpYXM6ICdidWlsdGluJ1xuXHR9LFxuXG5cdCd0YXJnZXQnOiB7XG5cdFx0cGF0dGVybjogL14oPzpbXjo9XFxzXXxbIFxcdF0rKD8hW1xcczpdKSkrKD89XFxzKjooPyE9KSkvbSxcblx0XHRhbGlhczogJ3N5bWJvbCcsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvXFwkKyg/Oig/IVxcJClbXigpe306Iz1cXHNdK3woPz1bKHtdKSkvXG5cdFx0fVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkKyg/Oig/IVxcJClbXigpe306Iz1cXHNdK3xcXChbQColPF4rP11bREZdXFwpfCg/PVsoe10pKS8sXG5cblx0Ly8gRGlyZWN0aXZlc1xuXHQna2V5d29yZCc6IC8taW5jbHVkZVxcYnxcXGIoPzpkZWZpbmV8ZWxzZXxlbmRlZnxlbmRpZnxleHBvcnR8aWZuP2RlZnxpZm4/ZXF8aW5jbHVkZXxvdmVycmlkZXxwcml2YXRlfHNpbmNsdWRlfHVuZGVmaW5lfHVuZXhwb3J0fHZwYXRoKVxcYi8sXG5cblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFwoKSg/OmFic3BhdGh8YWRkc3VmZml4fGFuZHxiYXNlbmFtZXxjYWxsfGRpcnxlcnJvcnxldmFsfGZpbGV8ZmlsdGVyKD86LW91dCk/fGZpbmRzdHJpbmd8Zmlyc3R3b3JkfGZsYXZvcnxmb3JlYWNofGd1aWxlfGlmfGluZm98am9pbnxsYXN0d29yZHxsb2FkfG5vdGRpcnxvcnxvcmlnaW58cGF0c3Vic3R8cmVhbHBhdGh8c2hlbGx8c29ydHxzdHJpcHxzdWJzdHxzdWZmaXh8dmFsdWV8d2FybmluZ3x3aWxkY2FyZHx3b3JkKD86bGlzdHxzKT8pKD89WyBcXHRdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnb3BlcmF0b3InOiAvKD86Ojp8Wz86KyFdKT89fFt8QF0vLFxuXHQncHVuY3R1YXRpb24nOiAvWzo7KCl7fV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0Ly8gQWxsb3cgb25seSBvbmUgbGluZSBicmVha1xuXHR2YXIgaW5uZXIgPSAvKD86XFxcXC58W15cXFxcXFxuXFxyXXwoPzpcXG58XFxyXFxuPykoPyFbXFxyXFxuXSkpLy5zb3VyY2U7XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgaW50ZW5kZWQgZm9yIHRoZSBjcmVhdGlvbiBvZiB0aGUgYm9sZCBvciBpdGFsaWMgcGF0dGVybi5cblx0ICpcblx0ICogVGhpcyBhbHNvIGFkZHMgYSBsb29rYmVoaW5kIGdyb3VwIHRvIHRoZSBnaXZlbiBwYXR0ZXJuIHRvIGVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGlzIG5vdCBiYWNrc2xhc2gtZXNjYXBlZC5cblx0ICpcblx0ICogX05vdGU6XyBLZWVwIGluIG1pbmQgdGhhdCB0aGlzIGFkZHMgYSBjYXB0dXJpbmcgZ3JvdXAuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqIEByZXR1cm5zIHtSZWdFeHB9XG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVJbmxpbmUocGF0dGVybikge1xuXHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLzxpbm5lcj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gaW5uZXI7IH0pO1xuXHRcdHJldHVybiBSZWdFeHAoLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKS8uc291cmNlICsgJyg/OicgKyBwYXR0ZXJuICsgJyknKTtcblx0fVxuXG5cblx0dmFyIHRhYmxlQ2VsbCA9IC8oPzpcXFxcLnxgYCg/OlteYFxcclxcbl18YCg/IWApKStgYHxgW15gXFxyXFxuXStgfFteXFxcXHxcXHJcXG5gXSkrLy5zb3VyY2U7XG5cdHZhciB0YWJsZVJvdyA9IC9cXHw/X18oPzpcXHxfXykrXFx8Pyg/Oig/OlxcbnxcXHJcXG4/KXwoPyFbXFxzXFxTXSkpLy5zb3VyY2UucmVwbGFjZSgvX18vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdGFibGVDZWxsOyB9KTtcblx0dmFyIHRhYmxlTGluZSA9IC9cXHw/WyBcXHRdKjo/LXszLH06P1sgXFx0XSooPzpcXHxbIFxcdF0qOj8tezMsfTo/WyBcXHRdKikrXFx8Pyg/OlxcbnxcXHJcXG4/KS8uc291cmNlO1xuXG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge30pO1xuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtYXJrZG93bicsICdwcm9sb2cnLCB7XG5cdFx0J2Zyb250LW1hdHRlci1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC8oXig/OlxccypbXFxyXFxuXSk/KS0tLSg/IS4pW1xcc1xcU10qP1tcXHJcXG5dLS0tKD8hLikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXi0tLXwtLS0kLyxcblx0XHRcdFx0J2Zyb250LW1hdHRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxTKyg/OlxccytcXFMrKSovLFxuXHRcdFx0XHRcdGFsaWFzOiBbJ3lhbWwnLCAnbGFuZ3VhZ2UteWFtbCddLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnlhbWxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2Jsb2NrcXVvdGUnOiB7XG5cdFx0XHQvLyA+IC4uLlxuXHRcdFx0cGF0dGVybjogL14+KD86W1xcdCBdKj4pKi9tLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCd0YWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcoPzonICsgdGFibGVSb3cgKyAnKSonLCAnbScpLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd0YWJsZS1kYXRhLXJvd3MnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdeKCcgKyB0YWJsZVJvdyArIHRhYmxlTGluZSArICcpKD86JyArIHRhYmxlUm93ICsgJykqJCcpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGFibGUtZGF0YSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKHRhYmxlQ2VsbCksXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLm1hcmtkb3duXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd0YWJsZS1saW5lJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXignICsgdGFibGVSb3cgKyAnKScgKyB0YWJsZUxpbmUgKyAnJCcpLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8fDo/LXszLH06Py9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd0YWJsZS1oZWFkZXItcm93Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXicgKyB0YWJsZVJvdyArICckJyksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGFibGUtaGVhZGVyJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodGFibGVDZWxsKSxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXHwvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY29kZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gUHJlZml4ZWQgYnkgNCBzcGFjZXMgb3IgMSB0YWIgYW5kIHByZWNlZGVkIGJ5IGFuIGVtcHR5IGxpbmVcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFxcbilbIFxcdF0qXFxufCg/Ol58XFxyXFxuPylbIFxcdF0qXFxyXFxuPykoPzogezR9fFxcdCkuKyg/Oig/OlxcbnxcXHJcXG4/KSg/OiB7NH18XFx0KS4rKSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBgYGBvcHRpb25hbCBsYW5ndWFnZVxuXHRcdFx0XHQvLyBjb2RlIGJsb2NrXG5cdFx0XHRcdC8vIGBgYFxuXHRcdFx0XHRwYXR0ZXJuOiAvXmBgYFtcXHNcXFNdKj9eYGBgJC9tLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdjb2RlLWJsb2NrJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL14oYGBgLiooPzpcXG58XFxyXFxuPykpW1xcc1xcU10rPyg/PSg/OlxcbnxcXHJcXG4/KV5gYGAkKS9tLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2NvZGUtbGFuZ3VhZ2UnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihgYGApLisvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL2BgYC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3RpdGxlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyB0aXRsZSAxXG5cdFx0XHRcdC8vID09PT09PT1cblxuXHRcdFx0XHQvLyB0aXRsZSAyXG5cdFx0XHRcdC8vIC0tLS0tLS1cblx0XHRcdFx0cGF0dGVybjogL1xcUy4qKD86XFxufFxcclxcbj8pKD86PT0rfC0tKykoPz1bIFxcdF0qJCkvbSxcblx0XHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRwdW5jdHVhdGlvbjogLz09KyR8LS0rJC9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gIyB0aXRsZSAxXG5cdFx0XHRcdC8vICMjIyMjIyB0aXRsZSA2XG5cdFx0XHRcdHBhdHRlcm46IC8oXlxccyopIy4rL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50Jyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0cHVuY3R1YXRpb246IC9eIyt8IyskL1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnaHInOiB7XG5cdFx0XHQvLyAqKipcblx0XHRcdC8vIC0tLVxuXHRcdFx0Ly8gKiAqICpcblx0XHRcdC8vIC0tLS0tLS0tLS0tXG5cdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKShbKi1dKSg/OltcXHQgXSpcXDIpezIsfSg/PVxccyokKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnbGlzdCc6IHtcblx0XHRcdC8vICogaXRlbVxuXHRcdFx0Ly8gKyBpdGVtXG5cdFx0XHQvLyAtIGl0ZW1cblx0XHRcdC8vIDEuIGl0ZW1cblx0XHRcdHBhdHRlcm46IC8oXlxccyopKD86WyorLV18XFxkK1xcLikoPz1bXFx0IF0uKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQndXJsLXJlZmVyZW5jZSc6IHtcblx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSBcIk9wdGlvbmFsIHRpdGxlXCJcblx0XHRcdC8vIFtpZF06IGh0dHA6Ly9leGFtcGxlLmNvbSAnT3B0aW9uYWwgdGl0bGUnXG5cdFx0XHQvLyBbaWRdOiBodHRwOi8vZXhhbXBsZS5jb20gKE9wdGlvbmFsIHRpdGxlKVxuXHRcdFx0Ly8gW2lkXTogPGh0dHA6Ly9leGFtcGxlLmNvbT4gXCJPcHRpb25hbCB0aXRsZVwiXG5cdFx0XHRwYXR0ZXJuOiAvIT9cXFtbXlxcXV0rXFxdOltcXHQgXSsoPzpcXFMrfDwoPzpcXFxcLnxbXj5cXFxcXSkrPikoPzpbXFx0IF0rKD86XCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwifCcoPzpcXFxcLnxbXidcXFxcXSkqJ3xcXCgoPzpcXFxcLnxbXilcXFxcXSkqXFwpKSk/Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oIT9cXFspW15cXF1dKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3RyaW5nJzogLyg/OlwiKD86XFxcXC58W15cIlxcXFxdKSpcInwnKD86XFxcXC58W14nXFxcXF0pKid8XFwoKD86XFxcXC58W14pXFxcXF0pKlxcKSkkLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15bXFxbXFxdITpdfFs8Pl0vXG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICd1cmwnXG5cdFx0fSxcblx0XHQnYm9sZCc6IHtcblx0XHRcdC8vICoqc3Ryb25nKipcblx0XHRcdC8vIF9fc3Ryb25nX19cblxuXHRcdFx0Ly8gYWxsb3cgb25lIG5lc3RlZCBpbnN0YW5jZSBvZiBpdGFsaWMgdGV4dCB1c2luZyB0aGUgc2FtZSBkZWxpbWl0ZXJcblx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvXFxiX18oPzooPyFfKTxpbm5lcj58Xyg/Oig/IV8pPGlubmVyPikrXykrX19cXGJ8XFwqXFwqKD86KD8hXFwqKTxpbm5lcj58XFwqKD86KD8hXFwqKTxpbm5lcj4pK1xcKikrXFwqXFwqLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4uLilbXFxzXFxTXSsoPz0uLiQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge30gLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXCpcXCp8X18vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnaXRhbGljJzoge1xuXHRcdFx0Ly8gKmVtKlxuXHRcdFx0Ly8gX2VtX1xuXG5cdFx0XHQvLyBhbGxvdyBvbmUgbmVzdGVkIGluc3RhbmNlIG9mIGJvbGQgdGV4dCB1c2luZyB0aGUgc2FtZSBkZWxpbWl0ZXJcblx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvXFxiXyg/Oig/IV8pPGlubmVyPnxfXyg/Oig/IV8pPGlubmVyPikrX18pK19cXGJ8XFwqKD86KD8hXFwqKTxpbm5lcj58XFwqXFwqKD86KD8hXFwqKTxpbm5lcj4pK1xcKlxcKikrXFwqLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4uKVtcXHNcXFNdKyg/PS4kKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHt9IC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWypfXS9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdzdHJpa2UnOiB7XG5cdFx0XHQvLyB+fnN0cmlrZSB0aHJvdWdofn5cblx0XHRcdC8vIH5zdHJpa2V+XG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0cGF0dGVybjogY3JlYXRlSW5saW5lKC8ofn4/KSg/Oig/IX4pPGlubmVyPikrXFwyLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5+fj8pW1xcc1xcU10rKD89XFwxJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL35+Py9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb2RlLXNuaXBwZXQnOiB7XG5cdFx0XHQvLyBgY29kZWBcblx0XHRcdC8vIGBgY29kZWBgXG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcYF0pKD86YGBbXmBcXHJcXG5dKyg/OmBbXmBcXHJcXG5dKykqYGAoPyFgKXxgW15gXFxyXFxuXStgKD8hYCkpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogWydjb2RlJywgJ2tleXdvcmQnXVxuXHRcdH0sXG5cdFx0J3VybCc6IHtcblx0XHRcdC8vIFtleGFtcGxlXShodHRwOi8vZXhhbXBsZS5jb20gXCJPcHRpb25hbCB0aXRsZVwiKVxuXHRcdFx0Ly8gW2V4YW1wbGVdW2lkXVxuXHRcdFx0Ly8gW2V4YW1wbGVdIFtpZF1cblx0XHRcdHBhdHRlcm46IGNyZWF0ZUlubGluZSgvIT9cXFsoPzooPyFcXF0pPGlubmVyPikrXFxdKD86XFwoW15cXHMpXSsoPzpbXFx0IF0rXCIoPzpcXFxcLnxbXlwiXFxcXF0pKlwiKT9cXCl8WyBcXHRdP1xcWyg/Oig/IVxcXSk8aW5uZXI+KStcXF0pLy5zb3VyY2UpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnb3BlcmF0b3InOiAvXiEvLFxuXHRcdFx0XHQnY29udGVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFspW15cXF1dKyg/PVxcXSkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7fSAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcXVsgXFx0XT9cXFspW15cXF1dKyg/PVxcXSQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCd1cmwnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxdXFwoKVteXFxzKV0rLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheWyBcXHRdKylcIig/OlxcXFwufFteXCJcXFxcXSkqXCIoPz1cXCkkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRbJ3VybCcsICdib2xkJywgJ2l0YWxpYycsICdzdHJpa2UnXS5mb3JFYWNoKGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdFsndXJsJywgJ2JvbGQnLCAnaXRhbGljJywgJ3N0cmlrZScsICdjb2RlLXNuaXBwZXQnXS5mb3JFYWNoKGZ1bmN0aW9uIChpbnNpZGUpIHtcblx0XHRcdGlmICh0b2tlbiAhPT0gaW5zaWRlKSB7XG5cdFx0XHRcdFByaXNtLmxhbmd1YWdlcy5tYXJrZG93blt0b2tlbl0uaW5zaWRlLmNvbnRlbnQuaW5zaWRlW2luc2lkZV0gPSBQcmlzbS5sYW5ndWFnZXMubWFya2Rvd25baW5zaWRlXTtcblx0XHRcdH1cblx0XHR9KTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSAnbWFya2Rvd24nICYmIGVudi5sYW5ndWFnZSAhPT0gJ21kJykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGZ1bmN0aW9uIHdhbGtUb2tlbnModG9rZW5zKSB7XG5cdFx0XHRpZiAoIXRva2VucyB8fCB0eXBlb2YgdG9rZW5zID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGZvciAodmFyIGkgPSAwLCBsID0gdG9rZW5zLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuXHRcdFx0XHR2YXIgdG9rZW4gPSB0b2tlbnNbaV07XG5cblx0XHRcdFx0aWYgKHRva2VuLnR5cGUgIT09ICdjb2RlJykge1xuXHRcdFx0XHRcdHdhbGtUb2tlbnModG9rZW4uY29udGVudCk7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvKlxuXHRcdFx0XHQgKiBBZGQgdGhlIGNvcnJlY3QgYGxhbmd1YWdlLXh4eHhgIGNsYXNzIHRvIHRoaXMgY29kZSBibG9jay4gS2VlcCBpbiBtaW5kIHRoYXQgdGhlIGBjb2RlLWxhbmd1YWdlYCB0b2tlblxuXHRcdFx0XHQgKiBpcyBvcHRpb25hbC4gQnV0IHRoZSBncmFtbWFyIGlzIGRlZmluZWQgc28gdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBjYXNlIHdlIGhhdmUgdG8gaGFuZGxlOlxuXHRcdFx0XHQgKlxuXHRcdFx0XHQgKiB0b2tlbi5jb250ZW50ID0gW1xuXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJwdW5jdHVhdGlvblwiPmBgYDwvc3Bhbj4sXG5cdFx0XHRcdCAqICAgICA8c3BhbiBjbGFzcz1cImNvZGUtbGFuZ3VhZ2VcIj54eHh4PC9zcGFuPixcblx0XHRcdFx0ICogICAgICdcXG4nLCAvLyBleGFjdGx5IG9uZSBuZXcgbGluZXMgKFxcciBvciBcXG4gb3IgXFxyXFxuKVxuXHRcdFx0XHQgKiAgICAgPHNwYW4gY2xhc3M9XCJjb2RlLWJsb2NrXCI+Li4uPC9zcGFuPixcblx0XHRcdFx0ICogICAgICdcXG4nLCAvLyBleGFjdGx5IG9uZSBuZXcgbGluZXMgYWdhaW5cblx0XHRcdFx0ICogICAgIDxzcGFuIGNsYXNzPVwicHVuY3R1YXRpb25cIj5gYGA8L3NwYW4+XG5cdFx0XHRcdCAqIF07XG5cdFx0XHRcdCAqL1xuXG5cdFx0XHRcdHZhciBjb2RlTGFuZyA9IHRva2VuLmNvbnRlbnRbMV07XG5cdFx0XHRcdHZhciBjb2RlQmxvY2sgPSB0b2tlbi5jb250ZW50WzNdO1xuXG5cdFx0XHRcdGlmIChjb2RlTGFuZyAmJiBjb2RlQmxvY2sgJiZcblx0XHRcdFx0XHRjb2RlTGFuZy50eXBlID09PSAnY29kZS1sYW5ndWFnZScgJiYgY29kZUJsb2NrLnR5cGUgPT09ICdjb2RlLWJsb2NrJyAmJlxuXHRcdFx0XHRcdHR5cGVvZiBjb2RlTGFuZy5jb250ZW50ID09PSAnc3RyaW5nJykge1xuXG5cdFx0XHRcdFx0Ly8gdGhpcyBtaWdodCBiZSBhIGxhbmd1YWdlIHRoYXQgUHJpc20gZG9lcyBub3Qgc3VwcG9ydFxuXG5cdFx0XHRcdFx0Ly8gZG8gc29tZSByZXBsYWNlbWVudHMgdG8gc3VwcG9ydCBDKyssIEMjLCBhbmQgRiNcblx0XHRcdFx0XHR2YXIgbGFuZyA9IGNvZGVMYW5nLmNvbnRlbnQucmVwbGFjZSgvXFxiIy9nLCAnc2hhcnAnKS5yZXBsYWNlKC9cXGJcXCtcXCsvZywgJ3BwJyk7XG5cdFx0XHRcdFx0Ly8gb25seSB1c2UgdGhlIGZpcnN0IHdvcmRcblx0XHRcdFx0XHRsYW5nID0gKC9bYS16XVtcXHctXSovaS5leGVjKGxhbmcpIHx8IFsnJ10pWzBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdFx0dmFyIGFsaWFzID0gJ2xhbmd1YWdlLScgKyBsYW5nO1xuXG5cdFx0XHRcdFx0Ly8gYWRkIGFsaWFzXG5cdFx0XHRcdFx0aWYgKCFjb2RlQmxvY2suYWxpYXMpIHtcblx0XHRcdFx0XHRcdGNvZGVCbG9jay5hbGlhcyA9IFthbGlhc107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICh0eXBlb2YgY29kZUJsb2NrLmFsaWFzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0Y29kZUJsb2NrLmFsaWFzID0gW2NvZGVCbG9jay5hbGlhcywgYWxpYXNdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjb2RlQmxvY2suYWxpYXMucHVzaChhbGlhcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0d2Fsa1Rva2VucyhlbnYudG9rZW5zKTtcblx0fSk7XG5cblx0UHJpc20uaG9va3MuYWRkKCd3cmFwJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGlmIChlbnYudHlwZSAhPT0gJ2NvZGUtYmxvY2snKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIGNvZGVMYW5nID0gJyc7XG5cdFx0Zm9yICh2YXIgaSA9IDAsIGwgPSBlbnYuY2xhc3Nlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHRcdHZhciBjbHMgPSBlbnYuY2xhc3Nlc1tpXTtcblx0XHRcdHZhciBtYXRjaCA9IC9sYW5ndWFnZS0oLispLy5leGVjKGNscyk7XG5cdFx0XHRpZiAobWF0Y2gpIHtcblx0XHRcdFx0Y29kZUxhbmcgPSBtYXRjaFsxXTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dmFyIGdyYW1tYXIgPSBQcmlzbS5sYW5ndWFnZXNbY29kZUxhbmddO1xuXG5cdFx0aWYgKCFncmFtbWFyKSB7XG5cdFx0XHRpZiAoY29kZUxhbmcgJiYgY29kZUxhbmcgIT09ICdub25lJyAmJiBQcmlzbS5wbHVnaW5zLmF1dG9sb2FkZXIpIHtcblx0XHRcdFx0dmFyIGlkID0gJ21kLScgKyBuZXcgRGF0ZSgpLnZhbHVlT2YoKSArICctJyArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMTYpO1xuXHRcdFx0XHRlbnYuYXR0cmlidXRlc1snaWQnXSA9IGlkO1xuXG5cdFx0XHRcdFByaXNtLnBsdWdpbnMuYXV0b2xvYWRlci5sb2FkTGFuZ3VhZ2VzKGNvZGVMYW5nLCBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0dmFyIGVsZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcblx0XHRcdFx0XHRpZiAoZWxlKSB7XG5cdFx0XHRcdFx0XHRlbGUuaW5uZXJIVE1MID0gUHJpc20uaGlnaGxpZ2h0KGVsZS50ZXh0Q29udGVudCwgUHJpc20ubGFuZ3VhZ2VzW2NvZGVMYW5nXSwgY29kZUxhbmcpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGVudi5jb250ZW50ID0gUHJpc20uaGlnaGxpZ2h0KHRleHRDb250ZW50KGVudi5jb250ZW50KSwgZ3JhbW1hciwgY29kZUxhbmcpO1xuXHRcdH1cblx0fSk7XG5cblx0dmFyIHRhZ1BhdHRlcm4gPSBSZWdFeHAoUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cC50YWcucGF0dGVybi5zb3VyY2UsICdnaScpO1xuXG5cdC8qKlxuXHQgKiBBIGxpc3Qgb2Yga25vd24gZW50aXR5IG5hbWVzLlxuXHQgKlxuXHQgKiBUaGlzIHdpbGwgYWx3YXlzIGJlIGluY29tcGxldGUgdG8gc2F2ZSBzcGFjZS4gVGhlIGN1cnJlbnQgbGlzdCBpcyB0aGUgb25lIHVzZWQgYnkgbG93ZGFzaCdzIHVuZXNjYXBlIGZ1bmN0aW9uLlxuXHQgKlxuXHQgKiBAc2VlIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vbG9kYXNoL2xvZGFzaC9ibG9iLzJkYTAyNGMzYjRmOTk0N2E0ODUxNzYzOWRlNzU2MDQ1N2NkNGVjNmMvdW5lc2NhcGUuanMjTDJ9XG5cdCAqL1xuXHR2YXIgS05PV05fRU5USVRZX05BTUVTID0ge1xuXHRcdCdhbXAnOiAnJicsXG5cdFx0J2x0JzogJzwnLFxuXHRcdCdndCc6ICc+Jyxcblx0XHQncXVvdCc6ICdcIicsXG5cdH07XG5cblx0Ly8gSUUgMTEgZG9lc24ndCBzdXBwb3J0IGBTdHJpbmcuZnJvbUNvZGVQb2ludGBcblx0dmFyIGZyb21Db2RlUG9pbnQgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCB8fCBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0ZXh0IGNvbnRlbnQgb2YgYSBnaXZlbiBIVE1MIHNvdXJjZSBjb2RlIHN0cmluZy5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGh0bWxcblx0ICogQHJldHVybnMge3N0cmluZ31cblx0ICovXG5cdGZ1bmN0aW9uIHRleHRDb250ZW50KGh0bWwpIHtcblx0XHQvLyByZW1vdmUgYWxsIHRhZ3Ncblx0XHR2YXIgdGV4dCA9IGh0bWwucmVwbGFjZSh0YWdQYXR0ZXJuLCAnJyk7XG5cblx0XHQvLyBkZWNvZGUga25vd24gZW50aXRpZXNcblx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKC8mKFxcd3sxLDh9fCN4P1tcXGRhLWZdezEsOH0pOy9naSwgZnVuY3Rpb24gKG0sIGNvZGUpIHtcblx0XHRcdGNvZGUgPSBjb2RlLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmIChjb2RlWzBdID09PSAnIycpIHtcblx0XHRcdFx0dmFyIHZhbHVlO1xuXHRcdFx0XHRpZiAoY29kZVsxXSA9PT0gJ3gnKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBwYXJzZUludChjb2RlLnNsaWNlKDIpLCAxNik7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBOdW1iZXIoY29kZS5zbGljZSgxKSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZnJvbUNvZGVQb2ludCh2YWx1ZSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YXIga25vd24gPSBLTk9XTl9FTlRJVFlfTkFNRVNbY29kZV07XG5cdFx0XHRcdGlmIChrbm93bikge1xuXHRcdFx0XHRcdHJldHVybiBrbm93bjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIHVuYWJsZSB0byBkZWNvZGVcblx0XHRcdFx0cmV0dXJuIG07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gdGV4dDtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy5tZCA9IFByaXNtLmxhbmd1YWdlcy5tYXJrZG93bjtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3d3dy5zdGF0YS5jb20vbWFudWFscy9tLnBkZlxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIG9yZ1R5cGUgPSAvXFxiKD86KD86Y29sfHJvdyk/dmVjdG9yfG1hdHJpeHxzY2FsYXIpXFxiLy5zb3VyY2U7XG5cdHZhciB0eXBlID0gL1xcYnZvaWRcXGJ8PG9yZz58XFxiKD86Y29tcGxleHxudW1lcmljfHBvaW50ZXIoPzpcXHMqXFwoW14oKV0qXFwpKT98cmVhbHxzdHJpbmd8KD86Y2xhc3N8c3RydWN0KVxccytcXHcrfHRyYW5zbW9ycGhpYykoPzpcXHMqPG9yZz4pPy8uc291cmNlXG5cdFx0LnJlcGxhY2UoLzxvcmc+L2csIG9yZ1R5cGUpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5tYXRhID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLykqXFwqXFwvLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifFtcdTIwMThgJ11cIi4qP1wiW1x1MjAxOWAnXS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGV4dGVuZHN8c3RydWN0KVxccyspXFx3Kyg/PVxccyooPzpcXHt8XFxiZXh0ZW5kc1xcYikpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd0eXBlJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKHR5cGUpLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpXS8sXG5cdFx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmNsYXNzfGZ1bmN0aW9ufHN0cnVjdHx2b2lkKVxcYi9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogL1xcYig/OmJyZWFrfGNsYXNzfGNvbnRpbnVlfGRvfGVsc2V8ZW5kfGV4dGVuZHN8ZXh0ZXJuYWx8ZmluYWx8Zm9yfGZ1bmN0aW9ufGdvdG98aWZ8cHJhZ21hfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c3RhdGljfHN0cnVjdHx1bnNldHx1bnVzZWR8dmVyc2lvbnx2aXJ0dWFsfHdoaWxlKVxcYi8sXG5cdFx0J2NvbnN0YW50JzogL1xcYk5VTExcXGIvLFxuXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKSg/OlxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT98XFxkW2EtZjAtOV0qKD86XFwuW2EtZjAtOV0rKT94WystXT9cXGQrKWk/KD8hW1xcdy5dKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J21pc3NpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuXSkoPzpcXC5bYS16XT8pKD8hW1xcdy5dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblxuXHRcdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblxuXHRcdCdvcGVyYXRvcic6IC9cXC5cXC58XFwrXFwrfC0tfCYmfFxcfFxcfHw6Pyg/OlshPTw+XT18WytcXC0qL148PiZ8Ol0pfFshPz1cXFxcI1x1MjAxOWAnXS8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fSw7Ll0vXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1hdGxhYiA9IHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0LyVcXHtbXFxzXFxTXSo/XFx9JS8sXG5cdFx0LyUuKy9cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCJyg/OicnfFteJ1xcclxcbl0pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBGSVhNRSBXZSBjb3VsZCBoYW5kbGUgaW1hZ2luYXJ5IG51bWJlcnMgYXMgYSB3aG9sZVxuXHQnbnVtYmVyJzogLyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbZUVdWystXT9cXGQrKT8oPzpbaWpdKT98XFxiW2lqXVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/Ok5hTnxicmVha3xjYXNlfGNhdGNofGNvbnRpbnVlfGVsc2V8ZWxzZWlmfGVuZHxmb3J8ZnVuY3Rpb258aWZ8aW5mfG90aGVyd2lzZXxwYXJmb3J8cGF1c2V8cGl8cmV0dXJufHN3aXRjaHx0cnl8d2hpbGUpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYig/IVxcZClcXHcrKD89XFxzKlxcKCkvLFxuXHQnb3BlcmF0b3InOiAvXFwuP1sqXlxcL1xcXFwnXXxbK1xcLTpAXXxbPD49fl09P3wmJj98XFx8XFx8Py8sXG5cdCdwdW5jdHVhdGlvbic6IC9cXC57M318Wy4sO1xcW1xcXSgpe30hXS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86YWJvdXR8YW5kfGFuaW1hdGV8YXN8YXR8YXR0cmlidXRlc3xieXxjYXNlfGNhdGNofGNvbGxlY3R8Y29udGludWV8Y29vcmRzeXN8ZG98ZWxzZXxleGl0fGZufGZvcnxmcm9tfGZ1bmN0aW9ufGdsb2JhbHxpZnxpbnxsb2NhbHxtYWNyb3NjcmlwdHxtYXBwZWR8bWF4fG5vdHxvZnxvZmZ8b258b3J8cGFyYW1ldGVyc3xwZXJzaXN0ZW50fHBsdWdpbnxyY21lbnV8cmV0dXJufHJvbGxvdXR8c2V0fHN0cnVjdHx0aGVufHRocm93fHRvfHRvb2x8dHJ5fHVuZG98dXRpbGl0eXx3aGVufHdoZXJlfHdoaWxlfHdpdGgpXFxiL2k7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMubWF4c2NyaXB0ID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj8oPzpcXCpcXC98JCl8LS0uKi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cIlxcXFxAXSkoPzpcIig/OlteXCJcXFxcXXxcXFxcW1xcc1xcU10pKlwifEBcIlteXCJdKlwiKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQncGF0aCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCQoPzpbXFx3L1xcXFwuKj9dfCdbXiddKicpKi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZydcblx0XHR9LFxuXG5cdFx0J2Z1bmN0aW9uLWNhbGwnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdCcoKD86JyArIChcblx0XHRcdFx0XHQvLyBzdGFydCBvZiBsaW5lXG5cdFx0XHRcdFx0L14vLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyBvcGVyYXRvcnMgYW5kIG90aGVyIGxhbmd1YWdlIGNvbnN0cnVjdHNcblx0XHRcdFx0XHQvWzs9PD4rXFwtKi9eKHtcXFtdLy5zb3VyY2UgK1xuXHRcdFx0XHRcdCd8JyArXG5cdFx0XHRcdFx0Ly8ga2V5d29yZHMgYXMgcGFydCBvZiBzdGF0ZW1lbnRzXG5cdFx0XHRcdFx0L1xcYig/OmFuZHxieXxjYXNlfGNhdGNofGNvbGxlY3R8ZG98ZWxzZXxpZnxpbnxub3R8b3J8cmV0dXJufHRoZW58dG98dHJ5fHdoZXJlfHdoaWxlfHdpdGgpXFxiLy5zb3VyY2Vcblx0XHRcdFx0KSArICcpWyBcXHRdKiknICtcblxuXHRcdFx0XHQnKD8hJyArIGtleXdvcmRzLnNvdXJjZSArICcpJyArIC9bYS16X11cXHcqXFxiLy5zb3VyY2UgK1xuXG5cdFx0XHRcdCcoPz1bIFxcdF0qKD86JyArIChcblx0XHRcdFx0XHQvLyB2YXJpYWJsZVxuXHRcdFx0XHRcdCcoPyEnICsga2V5d29yZHMuc291cmNlICsgJyknICsgL1thLXpfXS8uc291cmNlICtcblx0XHRcdFx0XHQnfCcgK1xuXHRcdFx0XHRcdC8vIG51bWJlclxuXHRcdFx0XHRcdC9cXGR8LVxcLj9cXGQvLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyBvdGhlciBleHByZXNzaW9ucyBvciBsaXRlcmFsc1xuXHRcdFx0XHRcdC9bKHsnXCIkQCM/XS8uc291cmNlXG5cdFx0XHRcdCkgKyAnKSknLFxuXHRcdFx0XHQnaW0nXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblxuXHRcdCdmdW5jdGlvbi1kZWZpbml0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpmbnxmdW5jdGlvbilcXHMrKVxcdytcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cblx0XHQnYXJndW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel9dXFx3Kig/PTopL2ksXG5cdFx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0XHR9LFxuXG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0XHQndGltZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy5dKSg/Oig/Oig/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzpbZUVkRF1bKy1dXFxkK3xbTFBdKT9bbXNmdF0pK3xcXGQrOlxcZCsoPzpcXC5cXGQqKT8pKD8hW1xcdy46XSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdH0sXG5cdFx0J251bWJlcic6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFx3Ll0pKD86KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKSg/OltlRWREXVsrLV1cXGQrfFtMUF0pP3wweFthLWZBLUYwLTldKykoPyFbXFx3LjpdKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvXFxiKD86ZXxwaSlcXGIvXG5cdFx0XSxcblxuXHRcdCdjb25zdGFudCc6IC9cXGIoPzpkb250Y29sbGVjdHxva3xzaWxlbnRWYWx1ZXx1bmRlZmluZWR8dW5zdXBwbGllZClcXGIvLFxuXHRcdCdjb2xvcic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpibGFja3xibHVlfGJyb3dufGdyYXl8Z3JlZW58b3JhbmdlfHJlZHx3aGl0ZXx5ZWxsb3cpXFxiL2ksXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH0sXG5cblx0XHQnb3BlcmF0b3InOiAvWy0rKi88Pj0hXT0/fFsmXj9dfCMoPyFcXCgpLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde30uOiw7XXwjKD89XFwoKXxcXFxcJC9tXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1lbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY29kZSc6IHtcblx0XHRwYXR0ZXJuOiAvYCg/OlxcXFwufFteXFxcXGBdKSpgLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdpdGFsaWMnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnc3RhdGVtZW50Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZkEtRl0rXFxifFxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKy8sXG5cdCdmbGFnJzoge1xuXHRcdHBhdHRlcm46IC8tW15cXGRcXFddXFx3Ki8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2FzZXxjb250aW51ZXxkZWZhdWx0fGRvfGVsc2V8ZmxvYXR8Zm9yfGdsb2JhbHxpZnxpbnxpbnR8bWF0cml4fHByb2N8cmV0dXJufHN0cmluZ3xzd2l0Y2h8dmVjdG9yfHdoaWxlKVxcYi8sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W3s7XSlbIFxcdF0qKVthLXpfXVxcdypcXGIoPyFcXHMqKD86XFwuKD8hXFwuKXxbW3s9XSkpfFxcYlthLXpfXVxcdyooPz1bIFxcdF0qXFwoKS9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCd0ZW5zb3ItcHVuY3R1YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLzw8fD4+Lyxcblx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHR9LFxuXHQnb3BlcmF0b3InOiAvXFwrWys9XT98LVstPV0/fCYmfFxcfFxcfHxbPD5dPT98WypcXC8hPV09P3xbJV5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1suLDo7P1xcW1xcXSgpe31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1lbFsnY29kZSddLmluc2lkZVsnc3RhdGVtZW50J10uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLm1lbDtcblxuUHJpc20ubGFuZ3VhZ2VzLm1lcm1haWQgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8lJS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnc3R5bGUnOiB7XG5cdFx0cGF0dGVybjogL14oWyBcXHRdKig/OmNsYXNzRGVmfGxpbmtTdHlsZXxzdHlsZSlbIFxcdF0rW1xcdyQtXStbIFxcdF0rKVxcdy4qW15cXHM7XS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHJvcGVydHknOiAvXFxiXFx3W1xcdy1dKig/PVsgXFx0XSo6KS8sXG5cdFx0XHQnb3BlcmF0b3InOiAvOi8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvLC9cblx0XHR9XG5cdH0sXG5cblx0J2ludGVyLWFycm93LWxhYmVsJzoge1xuXHRcdHBhdHRlcm46IC8oW148Pm94Lj0tXSkoPzotWy0uXXw9PSkoPyFbPD5veC49LV0pWyBcXHRdKig/OlwiW15cIlxcclxcbl0qXCJ8W15cXHNcIi49LV0oPzpbXlxcclxcbi49LV0qW15cXHMuPS1dKT8pWyBcXHRdKig/OlxcListPj98LS0rWy0+XXw9PStbPT5dKSg/IVs8Pm94Lj0tXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Fycm93Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86XFwuKy0+P3wtLStbLT5dfD09K1s9Pl0pJC8sXG5cdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHR9LFxuXHRcdFx0J2xhYmVsJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihbXFxzXFxTXXsyfVsgXFx0XSopXFxTKD86W1xcc1xcU10qXFxTKT8vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdFx0fSxcblx0XHRcdCdhcnJvdy1oZWFkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxcUysvLFxuXHRcdFx0XHRhbGlhczogWydhcnJvdycsICdvcGVyYXRvciddXG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdCdhcnJvdyc6IFtcblx0XHQvLyBUaGlzIG1pZ2h0IGxvb2sgY29tcGxleCBidXQgaXQgcmVhbGx5IGlzbid0LlxuXHRcdC8vIFRoZXJlIGFyZSBtYW55IHBvc3NpYmxlIGFycm93cyAoc2VlIHRlc3RzKSBhbmQgaXQncyBpbXBvc3NpYmxlIHRvIGZpdCBhbGwgb2YgdGhlbSBpbnRvIG9uZSBwYXR0ZXJuLiBUaGVcblx0XHQvLyBwcm9ibGVtIGlzIHRoYXQgd2Ugb25seSBoYXZlIG9uZSBsb29rYmVoaW5kIHBlciBwYXR0ZXJuLiBIb3dldmVyLCB3ZSBjYW5ub3QgZGlzYWxsb3cgdG9vIG1hbnkgYXJyb3dcblx0XHQvLyBjaGFyYWN0ZXJzIGluIHRoZSBvbmUgbG9va2JlaGluZCBiZWNhdXNlIHRoYXQgd291bGQgY3JlYXRlIHRvbyBtYW55IGZhbHNlIG5lZ2F0aXZlcy4gU28gd2UgaGF2ZSB0byBzcGxpdCB0aGVcblx0XHQvLyBhcnJvd3MgaW50byBkaWZmZXJlbnQgcGF0dGVybnMuXG5cdFx0e1xuXHRcdFx0Ly8gRVIgZGlhZ3JhbVxuXHRcdFx0cGF0dGVybjogLyhefFtee318by4tXSlbfH1dW3xvXSg/Oi0tfFxcLlxcLilbfG9dW3x7XSg/IVt7fXxvLi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGZsb3cgY2hhcnRcblx0XHRcdC8vICg/Oj09K3wtLSt8LVxcLiotKVxuXHRcdFx0cGF0dGVybjogLyhefFtePD5veC49LV0pKD86WzxveF0oPzo9PSt8LS0rfC1cXC4qLSlbPm94XT98KD86PT0rfC0tK3wtXFwuKi0pWz5veF18PT09K3wtLS0rfC1cXC4rLSkoPyFbPD5veC49LV0pLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gc2VxdWVuY2UgZGlhZ3JhbVxuXHRcdFx0cGF0dGVybjogLyhefFtePD4oKXgtXSkoPzotLT8oPzo+PnxbeD4pXSkoPyFbPD4oKXhdKXwoPzo8PHxbeDwoXSktLT8oPyEtKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBkaWFncmFtXG5cdFx0XHRwYXR0ZXJuOiAvKF58W148Pnwqby4tXSkoPzpbKm9dLS18LS1bKm9dfDxcXHw/KD86LS18XFwuXFwuKXwoPzotLXxcXC5cXC4pXFx8Pz58LS18XFwuXFwuKSg/IVs8Pnwqby4tXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fSxcblx0XSxcblxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogLyhefFtefDxdKVxcfCg/OlteXFxyXFxuXCJ8XXxcIlteXCJcXHJcXG5dKlwiKStcXHwvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0J3RleHQnOiB7XG5cdFx0cGF0dGVybjogLyg/OlsoXFxbe10rfFxcYj4pKD86W15cXHJcXG5cIigpXFxbXFxde31dfFwiW15cIlxcclxcbl0qXCIpKyg/OlspXFxdfV0rfD4pLyxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogLzw8KD86YWJzdHJhY3R8Y2hvaWNlfGVudW1lcmF0aW9ufGZvcmt8aW50ZXJmYWNlfGpvaW58c2VydmljZSk+PnxcXFtcXFsoPzpjaG9pY2V8Zm9ya3xqb2luKVxcXVxcXS9pLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXG5cdCdrZXl3b3JkJzogW1xuXHRcdC8vIFRoaXMgbGFuZ3VhZ2UgaGFzIGJvdGggY2FzZS1zZW5zaXRpdmUgYW5kIGNhc2UtaW5zZW5zaXRpdmUga2V5d29yZHNcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OmFjdGlvbnxjYWxsYmFja3xjbGFzc3xjbGFzc0RlZnxjbGFzc0RpYWdyYW18Y2xpY2t8ZGlyZWN0aW9ufGVyRGlhZ3JhbXxmbG93Y2hhcnR8Z2FudHR8Z2l0R3JhcGh8Z3JhcGh8am91cm5leXxsaW5rfGxpbmtTdHlsZXxwaWV8cmVxdWlyZW1lbnREaWFncmFtfHNlcXVlbmNlRGlhZ3JhbXxzdGF0ZURpYWdyYW18c3RhdGVEaWFncmFtLXYyfHN0eWxlfHN1YmdyYXBoKSg/IVtcXHckLV0pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OmFjdGl2YXRlfGFsdHxhbmR8YXN8YXV0b251bWJlcnxkZWFjdGl2YXRlfGVsc2V8ZW5kKD86WyBcXHRdK25vdGUpP3xsb29wfG9wdHxwYXJ8cGFydGljaXBhbnR8cmVjdHxzdGF0ZXxub3RlWyBcXHRdKyg/Om92ZXJ8KD86bGVmdHxyaWdodClbIFxcdF0rb2YpKSg/IVtcXHckLV0pL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblxuXHQnZW50aXR5JzogLyNbYS16MC05XSs7LyxcblxuXHQnb3BlcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyhcXHdbIFxcdF0qKSYoPz1bIFxcdF0qXFx3KXw6Ojp8Oi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWygpe307XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5taXphciA9IHtcblx0J2NvbW1lbnQnOiAvOjouKy8sXG5cdCdrZXl3b3JkJzogL0Bwcm9vZlxcYnxcXGIoPzphY2NvcmRpbmd8YWdncmVnYXRlfGFsbHxhbmR8YW50b255bXxhcmV8YXN8YXNzb2NpYXRpdml0eXxhc3N1bWV8YXN5bW1ldHJ5fGF0dHJ8YmV8YmVnaW58YmVpbmd8Ynl8Y2FuY2VsZWR8Y2FzZXxjYXNlc3xjbHVzdGVycz98Y29oZXJlbmNlfGNvbW11dGF0aXZpdHl8Y29tcGF0aWJpbGl0eXxjb25uZWN0ZWRuZXNzfGNvbnNpZGVyfGNvbnNpc3RlbmN5fGNvbnN0cnVjdG9yc3xjb250cmFkaWN0aW9ufGNvcnJlY3RuZXNzfGRlZnxkZWZmdW5jfGRlZmluZXxkZWZpbml0aW9ucz98ZGVmcHJlZHxkb3xkb2VzfGVuZHxlbnZpcm9ufGVxdWFsc3xleHxleGFjdGx5fGV4aXN0ZW5jZXxmb3J8ZnJvbXxmdW5jfGdpdmVufGhlbmNlfGhlcmVieXxob2xkc3xpZGVtcG90ZW5jZXxpZGVudGl0eXxpZmY/fGltcGxpZXN8aW52b2x1dGl2ZW5lc3N8aXJyZWZsZXhpdml0eXxpc3xpdHxsZXR8bWVhbnN8bW9kZXxub258bm90fG5vdGF0aW9ucz98bm93fG9mfG9yfG90aGVyd2lzZXxvdmVyfHBlcnxwcmVkfHByZWZpeHxwcm9qZWN0aXZpdHl8cHJvb2Z8cHJvdmlkZWR8cXVhfHJlY29uc2lkZXJ8cmVkZWZpbmV8cmVkdWNlfHJlZHVjaWJpbGl0eXxyZWZsZXhpdml0eXxyZWdpc3RyYXRpb25zP3xyZXF1aXJlbWVudHN8cmVzZXJ2ZXxzY2h8c2NoZW1lcz98c2VjdGlvbnxzZWxlY3RvcnxzZXR8c2V0aG9vZHxzdHxzdHJ1Y3R8c3VjaHxzdXBwb3NlfHN5bW1ldHJ5fHN5bm9ueW18dGFrZXx0aGF0fHRoZXx0aGVufHRoZW9yZW1zP3x0aGVzaXN8dGh1c3x0b3x0cmFuc2l0aXZpdHl8dW5pcXVlbmVzc3x2b2NhYnVsYXIoPzppZXN8eSl8d2hlbnx3aGVyZXx3aXRofHdydClcXGIvLFxuXHQncGFyYW1ldGVyJzoge1xuXHRcdHBhdHRlcm46IC9cXCQoPzoxMHxcXGQpLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQndmFyaWFibGUnOiAvXFxiXFx3Kyg/PTopLyxcblx0J251bWJlcic6IC8oPzpcXGJ8LSlcXGQrXFxiLyxcblx0J29wZXJhdG9yJzogL1xcLlxcLlxcLnwtPnwmfFxcLj89Lyxcblx0J3B1bmN0dWF0aW9uJzogL1xcKCN8I1xcKXxbLDo7XFxbXFxdKCl7fV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIG9wZXJhdG9ycyA9IFtcblx0XHQvLyBxdWVyeSBhbmQgcHJvamVjdGlvblxuXHRcdCckZXEnLCAnJGd0JywgJyRndGUnLCAnJGluJywgJyRsdCcsICckbHRlJywgJyRuZScsICckbmluJywgJyRhbmQnLCAnJG5vdCcsICckbm9yJywgJyRvcicsXG5cdFx0JyRleGlzdHMnLCAnJHR5cGUnLCAnJGV4cHInLCAnJGpzb25TY2hlbWEnLCAnJG1vZCcsICckcmVnZXgnLCAnJHRleHQnLCAnJHdoZXJlJywgJyRnZW9JbnRlcnNlY3RzJyxcblx0XHQnJGdlb1dpdGhpbicsICckbmVhcicsICckbmVhclNwaGVyZScsICckYWxsJywgJyRlbGVtTWF0Y2gnLCAnJHNpemUnLCAnJGJpdHNBbGxDbGVhcicsICckYml0c0FsbFNldCcsXG5cdFx0JyRiaXRzQW55Q2xlYXInLCAnJGJpdHNBbnlTZXQnLCAnJGNvbW1lbnQnLCAnJGVsZW1NYXRjaCcsICckbWV0YScsICckc2xpY2UnLFxuXG5cdFx0Ly8gdXBkYXRlXG5cdFx0JyRjdXJyZW50RGF0ZScsICckaW5jJywgJyRtaW4nLCAnJG1heCcsICckbXVsJywgJyRyZW5hbWUnLCAnJHNldCcsICckc2V0T25JbnNlcnQnLCAnJHVuc2V0Jyxcblx0XHQnJGFkZFRvU2V0JywgJyRwb3AnLCAnJHB1bGwnLCAnJHB1c2gnLCAnJHB1bGxBbGwnLCAnJGVhY2gnLCAnJHBvc2l0aW9uJywgJyRzbGljZScsICckc29ydCcsICckYml0JyxcblxuXHRcdC8vIGFnZ3JlZ2F0aW9uIHBpcGVsaW5lIHN0YWdlc1xuXHRcdCckYWRkRmllbGRzJywgJyRidWNrZXQnLCAnJGJ1Y2tldEF1dG8nLCAnJGNvbGxTdGF0cycsICckY291bnQnLCAnJGN1cnJlbnRPcCcsICckZmFjZXQnLCAnJGdlb05lYXInLFxuXHRcdCckZ3JhcGhMb29rdXAnLCAnJGdyb3VwJywgJyRpbmRleFN0YXRzJywgJyRsaW1pdCcsICckbGlzdExvY2FsU2Vzc2lvbnMnLCAnJGxpc3RTZXNzaW9ucycsICckbG9va3VwJyxcblx0XHQnJG1hdGNoJywgJyRtZXJnZScsICckb3V0JywgJyRwbGFuQ2FjaGVTdGF0cycsICckcHJvamVjdCcsICckcmVkYWN0JywgJyRyZXBsYWNlUm9vdCcsICckcmVwbGFjZVdpdGgnLFxuXHRcdCckc2FtcGxlJywgJyRzZXQnLCAnJHNraXAnLCAnJHNvcnQnLCAnJHNvcnRCeUNvdW50JywgJyR1bmlvbldpdGgnLCAnJHVuc2V0JywgJyR1bndpbmQnLCAnJHNldFdpbmRvd0ZpZWxkcycsXG5cblx0XHQvLyBhZ2dyZWdhdGlvbiBwaXBlbGluZSBvcGVyYXRvcnNcblx0XHQnJGFicycsICckYWNjdW11bGF0b3InLCAnJGFjb3MnLCAnJGFjb3NoJywgJyRhZGQnLCAnJGFkZFRvU2V0JywgJyRhbGxFbGVtZW50c1RydWUnLCAnJGFuZCcsXG5cdFx0JyRhbnlFbGVtZW50VHJ1ZScsICckYXJyYXlFbGVtQXQnLCAnJGFycmF5VG9PYmplY3QnLCAnJGFzaW4nLCAnJGFzaW5oJywgJyRhdGFuJywgJyRhdGFuMicsXG5cdFx0JyRhdGFuaCcsICckYXZnJywgJyRiaW5hcnlTaXplJywgJyRic29uU2l6ZScsICckY2VpbCcsICckY21wJywgJyRjb25jYXQnLCAnJGNvbmNhdEFycmF5cycsICckY29uZCcsXG5cdFx0JyRjb252ZXJ0JywgJyRjb3MnLCAnJGRhdGVGcm9tUGFydHMnLCAnJGRhdGVUb1BhcnRzJywgJyRkYXRlRnJvbVN0cmluZycsICckZGF0ZVRvU3RyaW5nJywgJyRkYXlPZk1vbnRoJyxcblx0XHQnJGRheU9mV2VlaycsICckZGF5T2ZZZWFyJywgJyRkZWdyZWVzVG9SYWRpYW5zJywgJyRkaXZpZGUnLCAnJGVxJywgJyRleHAnLCAnJGZpbHRlcicsICckZmlyc3QnLFxuXHRcdCckZmxvb3InLCAnJGZ1bmN0aW9uJywgJyRndCcsICckZ3RlJywgJyRob3VyJywgJyRpZk51bGwnLCAnJGluJywgJyRpbmRleE9mQXJyYXknLCAnJGluZGV4T2ZCeXRlcycsXG5cdFx0JyRpbmRleE9mQ1AnLCAnJGlzQXJyYXknLCAnJGlzTnVtYmVyJywgJyRpc29EYXlPZldlZWsnLCAnJGlzb1dlZWsnLCAnJGlzb1dlZWtZZWFyJywgJyRsYXN0Jyxcblx0XHQnJGxhc3QnLCAnJGxldCcsICckbGl0ZXJhbCcsICckbG4nLCAnJGxvZycsICckbG9nMTAnLCAnJGx0JywgJyRsdGUnLCAnJGx0cmltJywgJyRtYXAnLCAnJG1heCcsXG5cdFx0JyRtZXJnZU9iamVjdHMnLCAnJG1ldGEnLCAnJG1pbicsICckbWlsbGlzZWNvbmQnLCAnJG1pbnV0ZScsICckbW9kJywgJyRtb250aCcsICckbXVsdGlwbHknLCAnJG5lJyxcblx0XHQnJG5vdCcsICckb2JqZWN0VG9BcnJheScsICckb3InLCAnJHBvdycsICckcHVzaCcsICckcmFkaWFuc1RvRGVncmVlcycsICckcmFuZ2UnLCAnJHJlZHVjZScsXG5cdFx0JyRyZWdleEZpbmQnLCAnJHJlZ2V4RmluZEFsbCcsICckcmVnZXhNYXRjaCcsICckcmVwbGFjZU9uZScsICckcmVwbGFjZUFsbCcsICckcmV2ZXJzZUFycmF5JywgJyRyb3VuZCcsXG5cdFx0JyRydHJpbScsICckc2Vjb25kJywgJyRzZXREaWZmZXJlbmNlJywgJyRzZXRFcXVhbHMnLCAnJHNldEludGVyc2VjdGlvbicsICckc2V0SXNTdWJzZXQnLCAnJHNldFVuaW9uJyxcblx0XHQnJHNpemUnLCAnJHNpbicsICckc2xpY2UnLCAnJHNwbGl0JywgJyRzcXJ0JywgJyRzdGREZXZQb3AnLCAnJHN0ZERldlNhbXAnLCAnJHN0cmNhc2VjbXAnLCAnJHN0ckxlbkJ5dGVzJyxcblx0XHQnJHN0ckxlbkNQJywgJyRzdWJzdHInLCAnJHN1YnN0ckJ5dGVzJywgJyRzdWJzdHJDUCcsICckc3VidHJhY3QnLCAnJHN1bScsICckc3dpdGNoJywgJyR0YW4nLFxuXHRcdCckdG9Cb29sJywgJyR0b0RhdGUnLCAnJHRvRGVjaW1hbCcsICckdG9Eb3VibGUnLCAnJHRvSW50JywgJyR0b0xvbmcnLCAnJHRvT2JqZWN0SWQnLCAnJHRvU3RyaW5nJyxcblx0XHQnJHRvTG93ZXInLCAnJHRvVXBwZXInLCAnJHRyaW0nLCAnJHRydW5jJywgJyR0eXBlJywgJyR3ZWVrJywgJyR5ZWFyJywgJyR6aXAnLCAnJGNvdW50JywgJyRkYXRlQWRkJyxcblx0XHQnJGRhdGVEaWZmJywgJyRkYXRlU3VidHJhY3QnLCAnJGRhdGVUcnVuYycsICckZ2V0RmllbGQnLCAnJHJhbmQnLCAnJHNhbXBsZVJhdGUnLCAnJHNldEZpZWxkJywgJyR1bnNldEZpZWxkJyxcblxuXHRcdC8vIGFnZ3JlZ2F0aW9uIHBpcGVsaW5lIHF1ZXJ5IG1vZGlmaWVyc1xuXHRcdCckY29tbWVudCcsICckZXhwbGFpbicsICckaGludCcsICckbWF4JywgJyRtYXhUaW1lTVMnLCAnJG1pbicsICckb3JkZXJieScsICckcXVlcnknLFxuXHRcdCckcmV0dXJuS2V5JywgJyRzaG93RGlza0xvYycsICckbmF0dXJhbCcsXG5cdF07XG5cblx0dmFyIGJ1aWx0aW5GdW5jdGlvbnMgPSBbXG5cdFx0J09iamVjdElkJyxcblx0XHQnQ29kZScsXG5cdFx0J0JpbkRhdGEnLFxuXHRcdCdEQlJlZicsXG5cdFx0J1RpbWVzdGFtcCcsXG5cdFx0J051bWJlckxvbmcnLFxuXHRcdCdOdW1iZXJEZWNpbWFsJyxcblx0XHQnTWF4S2V5Jyxcblx0XHQnTWluS2V5Jyxcblx0XHQnUmVnRXhwJyxcblx0XHQnSVNPRGF0ZScsXG5cdFx0J1VVSUQnLFxuXHRdO1xuXG5cdG9wZXJhdG9ycyA9IG9wZXJhdG9ycy5tYXAoZnVuY3Rpb24gKG9wZXJhdG9yKSB7XG5cdFx0cmV0dXJuIG9wZXJhdG9yLnJlcGxhY2UoJyQnLCAnXFxcXCQnKTtcblx0fSk7XG5cblx0dmFyIG9wZXJhdG9yc1NvdXJjZSA9ICcoPzonICsgb3BlcmF0b3JzLmpvaW4oJ3wnKSArICcpXFxcXGInO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5tb25nb2RiID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YXNjcmlwdCcsIHt9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdtb25nb2RiJywgJ3N0cmluZycsIHtcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86KFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDF8KD8hXFxzKVtfJGEtekEtWlxceEEwLVxcdUZGRkZdKD86KD8hXFxzKVskXFx3XFx4QTAtXFx1RkZGRl0pKikoPz1cXHMqOikvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogUmVnRXhwKCdeKFtcXCdcIl0pPycgKyBvcGVyYXRvcnNTb3VyY2UgKyAnKD86XFxcXDEpPyQnKVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm1vbmdvZGIuc3RyaW5nLmluc2lkZSA9IHtcblx0XHR1cmw6IHtcblx0XHRcdC8vIHVybCBwYXR0ZXJuXG5cdFx0XHRwYXR0ZXJuOiAvaHR0cHM/OlxcL1xcL1stXFx3QDolLit+Iz1dezEsMjU2fVxcLlthLXowLTkoKV17MSw2fVxcYlstXFx3KClAOiUrLn4jPyYvPV0qL2ksXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdGVudGl0eToge1xuXHRcdFx0Ly8gaXB2NFxuXHRcdFx0cGF0dGVybjogL1xcYig/Oig/OlswMV0/XFxkXFxkP3wyWzAtNF1cXGR8MjVbMC01XSlcXC4pezN9KD86WzAxXT9cXGRcXGQ/fDJbMC00XVxcZHwyNVswLTVdKVxcYi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnbW9uZ29kYicsICdjb25zdGFudCcsIHtcblx0XHQnYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnXFxcXGIoPzonICsgYnVpbHRpbkZ1bmN0aW9ucy5qb2luKCd8JykgKyAnKVxcXFxiJyksXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fVxuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubW9ua2V5ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXiNSZW1cXHNbXFxzXFxTXSo/XiNFbmR8Jy4rL2ltLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwiLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdwcmVwcm9jZXNzb3InOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKikjLisvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFwoKS8sXG5cdCd0eXBlLWNoYXInOiB7XG5cdFx0cGF0dGVybjogL1xcYls/JSMkXS8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XFwuXFwuKT8pKD86KD86XFxifFxcQi1cXC4/fFxcQlxcLilcXGQrKD86KD8hXFwuXFwuKVxcLlxcZCopP3xcXCRbXFxkYS1mXSspL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpBYnN0cmFjdHxBcnJheXxCb29sfENhc2V8Q2F0Y2h8Q2xhc3N8Q29uc3R8Q29udGludWV8RGVmYXVsdHxFYWNoaW58RWxzZXxFbHNlSWZ8RW5kfEVuZElmfEV4aXR8RXh0ZW5kc3xFeHRlcm58RmFsc2V8RmllbGR8RmluYWx8RmxvYXR8Rm9yfEZvcmV2ZXJ8RnVuY3Rpb258R2xvYmFsfElmfEltcGxlbWVudHN8SW1wb3J0fElubGluZXxJbnR8SW50ZXJmYWNlfExvY2FsfE1ldGhvZHxNb2R1bGV8TmV3fE5leHR8TnVsbHxPYmplY3R8UHJpdmF0ZXxQcm9wZXJ0eXxQdWJsaWN8UmVwZWF0fFJldHVybnxTZWxlY3R8U2VsZnxTdGVwfFN0cmljdHxTdHJpbmd8U3VwZXJ8VGhlbnxUaHJvd3xUb3xUcnVlfFRyeXxVbnRpbHxWb2lkfFdlbmR8V2hpbGUpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9cXC5cXC58PFs9Pl0/fD49P3w6Pz18KD86WytcXC0qXFwvJn58XXxcXGIoPzpNb2R8U2hsfFNocilcXGIpPT98XFxiKD86QW5kfE5vdHxPcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1suLDo7KClcXFtcXF1dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm1vb25zY3JpcHQgPSB7XG5cdCdjb21tZW50JzogLy0tLiovLFxuXHQnc3RyaW5nJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8nW14nXSonfFxcWyg9KilcXFtbXFxzXFxTXSo/XFxdXFwxXFxdLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8jXFx7W157fV0qXFx9Lyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdtb29uc2NyaXB0Jzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4jXFx7KVtcXHNcXFNdKyg/PVxcfSkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlb3dcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyNcXHt8XFx9Lyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y2xhc3N8ZXh0ZW5kcylbIFxcdF0rKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gY2xhc3MtbGlrZSBuYW1lcyBzdGFydCB3aXRoIGEgY2FwaXRhbCBsZXR0ZXJcblx0XHQvXFxiW0EtWl1cXHcqL1xuXHRdLFxuXHQna2V5d29yZCc6IC9cXGIoPzpjbGFzc3xjb250aW51ZXxkb3xlbHNlfGVsc2VpZnxleHBvcnR8ZXh0ZW5kc3xmb3J8ZnJvbXxpZnxpbXBvcnR8aW58bG9jYWx8bmlsfHJldHVybnxzZWxmfHN1cGVyfHN3aXRjaHx0aGVufHVubGVzc3x1c2luZ3x3aGVufHdoaWxlfHdpdGgpXFxiLyxcblx0J3ZhcmlhYmxlJzogL0BAP1xcdyovLFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogL1xcYig/IVxcZClcXHcrKD89Oil8KDopKD8hXFxkKVxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpfR3xfVkVSU0lPTnxhc3NlcnR8Y29sbGVjdGdhcmJhZ2V8Y29yb3V0aW5lXFwuKD86Y3JlYXRlfHJlc3VtZXxydW5uaW5nfHN0YXR1c3x3cmFwfHlpZWxkKXxkZWJ1Z1xcLig/OmRlYnVnfGdldGZlbnZ8Z2V0aG9va3xnZXRpbmZvfGdldGxvY2FsfGdldG1ldGF0YWJsZXxnZXRyZWdpc3RyeXxnZXR1cHZhbHVlfHNldGZlbnZ8c2V0aG9va3xzZXRsb2NhbHxzZXRtZXRhdGFibGV8c2V0dXB2YWx1ZXx0cmFjZWJhY2spfGRvZmlsZXxlcnJvcnxnZXRmZW52fGdldG1ldGF0YWJsZXxpb1xcLig/OmNsb3NlfGZsdXNofGlucHV0fGxpbmVzfG9wZW58b3V0cHV0fHBvcGVufHJlYWR8c3RkZXJyfHN0ZGlufHN0ZG91dHx0bXBmaWxlfHR5cGV8d3JpdGUpfGlwYWlyc3xsb2FkfGxvYWRmaWxlfGxvYWRzdHJpbmd8bWF0aFxcLig/OmFic3xhY29zfGFzaW58YXRhbnxhdGFuMnxjZWlsfGNvc3xjb3NofGRlZ3xleHB8Zmxvb3J8Zm1vZHxmcmV4cHxsZGV4cHxsb2d8bG9nMTB8bWF4fG1pbnxtb2RmfHBpfHBvd3xyYWR8cmFuZG9tfHJhbmRvbXNlZWR8c2lufHNpbmh8c3FydHx0YW58dGFuaCl8bW9kdWxlfG5leHR8b3NcXC4oPzpjbG9ja3xkYXRlfGRpZmZ0aW1lfGV4ZWN1dGV8ZXhpdHxnZXRlbnZ8cmVtb3ZlfHJlbmFtZXxzZXRsb2NhbGV8dGltZXx0bXBuYW1lKXxwYWNrYWdlXFwuKD86Y3BhdGh8bG9hZGVkfGxvYWRsaWJ8cGF0aHxwcmVsb2FkfHNlZWFsbCl8cGFpcnN8cGNhbGx8cHJpbnR8cmF3ZXF1YWx8cmF3Z2V0fHJhd3NldHxyZXF1aXJlfHNlbGVjdHxzZXRmZW52fHNldG1ldGF0YWJsZXxzdHJpbmdcXC4oPzpieXRlfGNoYXJ8ZHVtcHxmaW5kfGZvcm1hdHxnbWF0Y2h8Z3N1YnxsZW58bG93ZXJ8bWF0Y2h8cmVwfHJldmVyc2V8c3VifHVwcGVyKXx0YWJsZVxcLig/OmNvbmNhdHxpbnNlcnR8bWF4bnxyZW1vdmV8c29ydCl8dG9udW1iZXJ8dG9zdHJpbmd8dHlwZXx1bnBhY2t8eHBjYWxsKVxcYi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogLyg/OlxcQlxcLlxcZCt8XFxiXFxkK1xcLlxcZCt8XFxiXFxkKyg/PVtlRV0pKSg/OltlRV1bLStdP1xcZCspP1xcYnxcXGIoPzoweFthLWZBLUZcXGRdK3xcXGQrKSg/OlU/TEwpP1xcYi8sXG5cdCdvcGVyYXRvcic6IC9cXC57M318Wy09XT58fj18KD86Wy0rKi8lPD4hPV18XFwuXFwuKT0/fFs6I15dfFxcYig/OmFuZHxvcilcXGI9P3xcXGIoPzpub3QpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1suLCgpW1xcXXt9XFxcXF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubW9vbnNjcmlwdC5zdHJpbmdbMV0uaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlLm1vb25zY3JpcHQuaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLm1vb25zY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy5tb29uID0gUHJpc20ubGFuZ3VhZ2VzLm1vb25zY3JpcHQ7XG5cbi8vIGh0dHBzOi8vZG9jcy5jb3VjaGJhc2UuY29tL3NlcnZlci9jdXJyZW50L24xcWwvbjFxbC1sYW5ndWFnZS1yZWZlcmVuY2UvaW5kZXguaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMubjFxbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogL1xcL1xcKltcXHNcXFNdKj8oPzokfFxcKlxcLyl8LS0uKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdfFxcMVxcMSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdpZGVudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXFtcXHNcXFNdfFteXFxcXGBdfGBgKSpgLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdwYXJhbWV0ZXInOiAvXFwkW1xcdy5dKy8sXG5cdC8vIGh0dHBzOi8vZG9jcy5jb3VjaGJhc2UuY29tL3NlcnZlci9jdXJyZW50L24xcWwvbjFxbC1sYW5ndWFnZS1yZWZlcmVuY2UvcmVzZXJ2ZWR3b3Jkcy5odG1sI24xcWwtcmVzZXJ2ZWQtd29yZHNcblx0J2tleXdvcmQnOiAvXFxiKD86QURWSVNFfEFMTHxBTFRFUnxBTkFMWVpFfEFTfEFTQ3xBVHxCRUdJTnxCSU5BUll8Qk9PTEVBTnxCUkVBS3xCVUNLRVR8QlVJTER8Qll8Q0FMTHxDQVNUfENMVVNURVJ8Q09MTEFURXxDT0xMRUNUSU9OfENPTU1JVHxDT01NSVRURUR8Q09OTkVDVHxDT05USU5VRXxDT1JSRUxBVEV8Q09SUkVMQVRFRHxDT1ZFUnxDUkVBVEV8Q1VSUkVOVHxEQVRBQkFTRXxEQVRBU0VUfERBVEFTVE9SRXxERUNMQVJFfERFQ1JFTUVOVHxERUxFVEV8REVSSVZFRHxERVNDfERFU0NSSUJFfERJU1RJTkNUfERPfERST1B8RUFDSHxFTEVNRU5UfEVYQ0VQVHxFWENMVURFfEVYRUNVVEV8RVhQTEFJTnxGRVRDSHxGSUxURVJ8RkxBVFRFTnxGTFVTSHxGT0xMT1dJTkd8Rk9SfEZPUkNFfEZST018RlRTfEZVTkNUSU9OfEdPTEFOR3xHUkFOVHxHUk9VUHxHUk9VUFN8R1NJfEhBU0h8SEFWSU5HfElGfElHTk9SRXxJTElLRXxJTkNMVURFfElOQ1JFTUVOVHxJTkRFWHxJTkZFUnxJTkxJTkV8SU5ORVJ8SU5TRVJUfElOVEVSU0VDVHxJTlRPfElTfElTT0xBVElPTnxKQVZBU0NSSVBUfEpPSU58S0VZfEtFWVN8S0VZU1BBQ0V8S05PV058TEFOR1VBR0V8TEFTVHxMRUZUfExFVHxMRVRUSU5HfExFVkVMfExJTUlUfExTTXxNQVB8TUFQUElOR3xNQVRDSEVEfE1BVEVSSUFMSVpFRHxNRVJHRXxNSU5VU3xNSVNTSU5HfE5BTUVTUEFDRXxORVNUfE5MfE5PfE5USF9WQUxVRXxOVUxMfE5VTExTfE5VTUJFUnxPQkpFQ1R8T0ZGU0VUfE9OfE9QVElPTnxPUFRJT05TfE9SREVSfE9USEVSU3xPVVRFUnxPVkVSfFBBUlNFfFBBUlRJVElPTnxQQVNTV09SRHxQQVRIfFBPT0x8UFJFQ0VESU5HfFBSRVBBUkV8UFJJTUFSWXxQUklWQVRFfFBSSVZJTEVHRXxQUk9CRXxQUk9DRURVUkV8UFVCTElDfFJBTkdFfFJBV3xSRUFMTXxSRURVQ0V8UkVOQU1FfFJFU1BFQ1R8UkVUVVJOfFJFVFVSTklOR3xSRVZPS0V8UklHSFR8Uk9MRXxST0xMQkFDS3xST1d8Uk9XU3xTQVRJU0ZJRVN8U0FWRVBPSU5UfFNDSEVNQXxTQ09QRXxTRUxFQ1R8U0VMRnxTRU1JfFNFVHxTSE9XfFNPTUV8U1RBUlR8U1RBVElTVElDU3xTVFJJTkd8U1lTVEVNfFRJRVN8VE98VFJBTnxUUkFOU0FDVElPTnxUUklHR0VSfFRSVU5DQVRFfFVOQk9VTkRFRHxVTkRFUnxVTklPTnxVTklRVUV8VU5LTk9XTnxVTk5FU1R8VU5TRVR8VVBEQVRFfFVQU0VSVHxVU0V8VVNFUnxVU0lOR3xWQUxJREFURXxWQUxVRXxWQUxVRVN8VklBfFZJRVd8V0hFUkV8V0hJTEV8V0lORE9XfFdJVEh8V09SS3xYT1IpXFxiL2ksXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvaSxcblx0J251bWJlcic6IC8oPzpcXGJcXGQrXFwufFxcQlxcLilcXGQrZVsrXFwtXT9cXGQrXFxifFxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkK1xcYi9pLFxuXHQnb3BlcmF0b3InOiAvWy0rKlxcLyVdfCE9fD09P3xcXHxcXHx8PFs+PV0/fD49P3xcXGIoPzpBTkR8QU5ZfEFSUkFZfEJFVFdFRU58Q0FTRXxFTFNFfEVORHxFVkVSWXxFWElTVFN8RklSU1R8SU58TElLRXxOT1R8T1J8VEhFTnxWQUxVRUR8V0hFTnxXSVRISU4pXFxiL2ksXG5cdCdwdW5jdHVhdGlvbic6IC9bO1tcXF0oKSwue306XS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5uNGpzID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnamF2YXNjcmlwdCcsIHtcblx0Ly8gS2V5d29yZHMgZnJvbSBONEpTIGxhbmd1YWdlIHNwZWM6IGh0dHBzOi8vbnVtYmVyZm91ci5naXRodWIuaW8vbjRqcy9zcGVjL040SlNTcGVjLmh0bWxcblx0J2tleXdvcmQnOiAvXFxiKD86QXJyYXl8YW55fGJvb2xlYW58YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb25zdHxjb25zdHJ1Y3Rvcnxjb250aW51ZXxkZWJ1Z2dlcnxkZWNsYXJlfGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW51bXxleHBvcnR8ZXh0ZW5kc3xmYWxzZXxmaW5hbGx5fGZvcnxmcm9tfGZ1bmN0aW9ufGdldHxpZnxpbXBsZW1lbnRzfGltcG9ydHxpbnxpbnN0YW5jZW9mfGludGVyZmFjZXxsZXR8bW9kdWxlfG5ld3xudWxsfG51bWJlcnxwYWNrYWdlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xyZXR1cm58c2V0fHN0YXRpY3xzdHJpbmd8c3VwZXJ8c3dpdGNofHRoaXN8dGhyb3d8dHJ1ZXx0cnl8dHlwZW9mfHZhcnx2b2lkfHdoaWxlfHdpdGh8eWllbGQpXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ240anMnLCAnY29uc3RhbnQnLCB7XG5cdC8vIEFubm90YXRpb25zIGluIE40SlMgc3BlYzogaHR0cHM6Ly9udW1iZXJmb3VyLmdpdGh1Yi5pby9uNGpzL3NwZWMvTjRKU1NwZWMuaHRtbCNfYW5ub3RhdGlvbnNcblx0J2Fubm90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL0ArXFx3Ky8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5uNGpzZCA9IFByaXNtLmxhbmd1YWdlcy5uNGpzO1xuXG5QcmlzbS5sYW5ndWFnZXNbJ25hbmQydGV0cmlzLWhkbCddID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0J2tleXdvcmQnOiAvXFxiKD86QlVJTFRJTnxDSElQfENMT0NLRUR8SU58T1VUfFBBUlRTKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYltBLVphLXpdW0EtWmEtejAtOV0qKD89XFwoKS8sXG5cdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdCdvcGVyYXRvcic6IC89fFxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLDpdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBleHByZXNzaW9uRGVmID0gL1xce1teXFxyXFxuXFxbXFxde31dKlxcfS87XG5cblx0dmFyIHBhcmFtcyA9IHtcblx0XHQncXVvdGVkLXN0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdCdjb21tYW5kLXBhcmFtLWlkJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHMpXFx3KzovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblx0XHQnY29tbWFuZC1wYXJhbS12YWx1ZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogZXhwcmVzc2lvbkRlZixcblx0XHRcdFx0YWxpYXM6ICdzZWxlY3RvcicsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFtcXHQgXSlcXFMrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJyxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFMoPzouKlxcUyk/Lyxcblx0XHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHR9XG5cdFx0XVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5uYW5pc2NyaXB0ID0ge1xuXHRcdC8vIDsgLi4uXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKTsuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHR9LFxuXHRcdC8vID4gLi4uXG5cdFx0Ly8gRGVmaW5lIGlzIGEgY29udHJvbCBsaW5lIHN0YXJ0aW5nIHdpdGggJz4nIGZvbGxvd2VkIGJ5IGEgd29yZCwgYSBzcGFjZSBhbmQgYSB0ZXh0LlxuXHRcdCdkZWZpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXj4uKy9tLFxuXHRcdFx0YWxpYXM6ICd0YWcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YWx1ZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF4+XFx3K1tcXHQgXSspKD8hXFxzKVtee31cXHJcXG5dKy8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXj4pXFx3Ky8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0Ly8gIyAuLi5cblx0XHQnbGFiZWwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qKSNbXFx0IF0qXFx3K1tcXHQgXSokL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdyZWdleCdcblx0XHR9LFxuXHRcdCdjb21tYW5kJzoge1xuXHRcdFx0cGF0dGVybjogL14oW1xcdCBdKilAXFx3Kyg/PVtcXHQgXXwkKS4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NvbW1hbmQtbmFtZSc6IC9eQFxcdysvLFxuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBleHByZXNzaW9uRGVmLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY29tbWFuZC1wYXJhbXMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xccypcXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRcdGluc2lkZTogcGFyYW1zXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQvLyBHZW5lcmljIGlzIGFueSBsaW5lIHRoYXQgZG9lc24ndCBzdGFydCB3aXRoIG9wZXJhdG9yczogOz4jQFxuXHRcdCdnZW5lcmljLXRleHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVteI0A+O1xcc10uKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdC8vIFxceyAuLi4gXFx9IC4uLiBcXFsgLi4uIFxcXSAuLi4gXFxcIlxuXHRcdFx0XHQnZXNjYXBlZC1jaGFyJzogL1xcXFxbe31cXFtcXF1cIl0vLFxuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBleHByZXNzaW9uRGVmLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnaW5saW5lLWNvbW1hbmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcW1tcXHQgXSpcXHdbXlxcclxcblxcW1xcXV0qXFxdLyxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnY29tbWFuZC1wYXJhbXMnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcW1tcXHQgXSpcXHcrXFxiKVtcXHNcXFNdKyg/PVxcXSQpLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBwYXJhbXNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnY29tbWFuZC1wYXJhbS1uYW1lJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXihcXFtbXFx0IF0qKVxcdysvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ25hbWUnLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdzdGFydC1zdG9wLWNoYXInOiAvW1xcW1xcXV0vLFxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cdFByaXNtLmxhbmd1YWdlcy5uYW5pID0gUHJpc20ubGFuZ3VhZ2VzWyduYW5pc2NyaXB0J107XG5cblx0LyoqIEB0eXBlZGVmIHtJbnN0YW5jZVR5cGU8aW1wb3J0KFwiLi9wcmlzbS1jb3JlXCIpW1wiVG9rZW5cIl0+fSBUb2tlbiAqL1xuXG5cdC8qKlxuXHQgKiBUaGlzIGhvb2sgaXMgdXNlZCB0byB2YWxpZGF0ZSBnZW5lcmljLXRleHQgdG9rZW5zIGZvciBiYWxhbmNlZCBicmFja2V0cy5cblx0ICogTWFyayB0b2tlbiBhcyBiYWQtbGluZSB3aGVuIGNvbnRhaW5zIG5vdCBiYWxhbmNlZCBicmFja2V0czoge30sW11cblx0ICovXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0LyoqIEB0eXBlIHsoVG9rZW4gfCBzdHJpbmcpW119ICovXG5cdFx0dmFyIHRva2VucyA9IGVudi50b2tlbnM7XG5cdFx0dG9rZW5zLmZvckVhY2goZnVuY3Rpb24gKHRva2VuKSB7XG5cdFx0XHRpZiAodHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJyAmJiB0b2tlbi50eXBlID09PSAnZ2VuZXJpYy10ZXh0Jykge1xuXHRcdFx0XHR2YXIgY29udGVudCA9IGdldFRleHRDb250ZW50KHRva2VuKTtcblx0XHRcdFx0aWYgKCFpc0JyYWNrZXRzQmFsYW5jZWQoY29udGVudCkpIHtcblx0XHRcdFx0XHR0b2tlbi50eXBlID0gJ2JhZC1saW5lJztcblx0XHRcdFx0XHR0b2tlbi5jb250ZW50ID0gY29udGVudDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHR9KTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG5cdCAqIEByZXR1cm5zIHtib29sZWFufVxuXHQgKi9cblx0ZnVuY3Rpb24gaXNCcmFja2V0c0JhbGFuY2VkKGlucHV0KSB7XG5cdFx0dmFyIGJyYWNrZXRzID0gJ1tde30nO1xuXHRcdHZhciBzdGFjayA9IFtdO1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciBicmFja2V0ID0gaW5wdXRbaV07XG5cdFx0XHR2YXIgYnJhY2tldHNJbmRleCA9IGJyYWNrZXRzLmluZGV4T2YoYnJhY2tldCk7XG5cdFx0XHRpZiAoYnJhY2tldHNJbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0aWYgKGJyYWNrZXRzSW5kZXggJSAyID09PSAwKSB7XG5cdFx0XHRcdFx0c3RhY2sucHVzaChicmFja2V0c0luZGV4ICsgMSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc3RhY2sucG9wKCkgIT09IGJyYWNrZXRzSW5kZXgpIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHN0YWNrLmxlbmd0aCA9PT0gMDtcblx0fVxuXG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IFRva2VuIHwgKHN0cmluZyB8IFRva2VuKVtdfSB0b2tlblxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0VGV4dENvbnRlbnQodG9rZW4pIHtcblx0XHRpZiAodHlwZW9mIHRva2VuID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuO1xuXHRcdH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0b2tlbikpIHtcblx0XHRcdHJldHVybiB0b2tlbi5tYXAoZ2V0VGV4dENvbnRlbnQpLmpvaW4oJycpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gZ2V0VGV4dENvbnRlbnQodG9rZW4uY29udGVudCk7XG5cdFx0fVxuXHR9XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLm5hc20gPSB7XG5cdCdjb21tZW50JzogLzsuKiQvbSxcblx0J3N0cmluZyc6IC8oW1wiJ2BdKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogLyheXFxzKilbQS1aYS16Ll8/JF1bXFx3Lj8kQH4jXSo6L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQna2V5d29yZCc6IFtcblx0XHQvXFxbP0JJVFMgKD86MTZ8MzJ8NjQpXFxdPy8sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheXFxzKilzZWN0aW9uXFxzKlthLXouXSs6Py9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8oPzpleHRlcm58Z2xvYmFsKVteO1xcclxcbl0qL2ksXG5cdFx0Lyg/OkNQVXxERUZBVUxUfEZMT0FUKS4qJC9tXG5cdF0sXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86c3RcXGR8W3h5el1tbVxcZFxcZD98W2NkdF1yXFxkfHJcXGRcXGQ/W2J3ZF0/fFtlcl0/W2FiY2RdeHxbYWJjZF1baGxdfFtlcl0/KD86YnB8ZGl8c2l8c3ApfFtjZGVmZ3NdcylcXGIvaSxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYnwoPz1cXCQpKSg/OjBbaHhdKD86XFwuW1xcZGEtZl0rfFtcXGRhLWZdKyg/OlxcLltcXGRhLWZdKyk/KSg/OnBbKy1dP1xcZCspP3xcXGRbXFxkYS1mXStbaHhdfFxcJFxcZFtcXGRhLWZdKnwwW29xXVswLTddK3xbMC03XStbb3FdfDBbYnldWzAxXSt8WzAxXStbYnldfDBbZHRdXFxkK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86XFwuP2VbKy1dP1xcZCspP1tkdF0/KVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvW1xcW1xcXSorXFwtXFwvJTw+PSZ8JCFdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm5lb24gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnZGF0ZXRpbWUnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKVxcZFxcZFxcZFxcZC1cXGRcXGQ/LVxcZFxcZD8oPzooPzpbVHRdfCArKVxcZFxcZD86XFxkXFxkOlxcZFxcZCg/OlxcLlxcZCopPyAqKD86WnxbLStdXFxkXFxkPyg/Ojo/XFxkXFxkKT8pPyk/KD89JHxbXFxdfSksXFxzXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInXG5cdH0sXG5cdCdrZXknOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeygsXFxzXSlbXiw6PVtcXF17fSgpJ1wiXFxzXSsoPz1cXHMqOig/OiR8W1xcXX0pLFxcc10pfFxccyo9KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbW3soPTosXFxzXSlbKy1dPyg/OjB4W1xcZGEtZkEtRl0rfDBvWzAtN10rfDBiWzAxXSt8KD86XFxkKyg/OlxcLlxcZCopP3xcXC4/XFxkKykoPzpbZUVdWystXT9cXGQrKT8pKD89JHxbXFxdfSksOj1cXHNdKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYm9vbGVhbic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W1t7KD06LFxcc10pKD86ZmFsc2V8bm98dHJ1ZXx5ZXMpKD89JHxbXFxdfSksOj1cXHNdKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J251bGwnOiB7XG5cdFx0cGF0dGVybjogLyhefFtbeyg9OixcXHNdKSg/Om51bGwpKD89JHxbXFxdfSksOj1cXHNdKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbW3soPTosXFxzXSkoPzooJycnfFwiXCJcIilcXHI/XFxuKD86KD86W15cXHJcXG5dfFxccj9cXG4oPyFbXFx0IF0qXFwyKSkqXFxyP1xcbik/W1xcdCBdKlxcMnwnW14nXFxyXFxuXSonfFwiKD86XFxcXC58W15cXFxcXCJcXHJcXG5dKSpcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdsaXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbW3soPTosXFxzXSkoPzpbXiNcIicsOj1bXFxde30oKVxcc2AtXXxbOi1dW15cIicsPVtcXF17fSgpXFxzXSkoPzpbXiw6PVxcXX0pKFxcc118Oig/IVtcXHMsXFxdfSldfCQpfFsgXFx0XStbXiMsOj1cXF19KShcXHNdKSovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvWyw6PVtcXF17fSgpLV0vLFxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm5ldm9kID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnwoPzpcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpKS8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyg/OlwiKD86XCJcInxbXlwiXSkqXCIoPyFcIil8Jyg/OicnfFteJ10pKicoPyEnKSkhP1xcKj8vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzdHJpbmctYXR0cnMnOiAvISR8IVxcKiR8XFwqJC8sXG5cdFx0fSxcblx0fSxcblx0J25hbWVzcGFjZSc6IHtcblx0XHRwYXR0ZXJuOiAvKEBuYW1lc3BhY2VcXHMrKVthLXpBLVowLTlcXC0uXSsoPz1cXHMqXFx7KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0fSxcblx0J3BhdHRlcm4nOiB7XG5cdFx0cGF0dGVybjogLyhAcGF0dGVyblxccyspPyM/W2EtekEtWjAtOVxcLS5dKyg/OlxccypcXChcXHMqKD86flxccyopP1thLXpBLVowLTlcXC0uXStcXHMqKD86LFxccyooPzp+XFxzKik/W2EtekEtWjAtOVxcLS5dKikqXFwpKT8oPz1cXHMqPSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncGF0dGVybi1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXiM/W2EtekEtWjAtOVxcLS5dKy8sXG5cdFx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHR9LFxuXHRcdFx0J2ZpZWxkcyc6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcKC4qXFwpLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ZpZWxkLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW2EtekEtWjAtOVxcLS5dKy8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bLCgpXS8sXG5cdFx0XHRcdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL34vLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdmaWVsZC1oaWRkZW4tbWFyaycsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblx0J3NlYXJjaCc6IHtcblx0XHRwYXR0ZXJuOiAvKEBzZWFyY2hcXHMrfCMpW2EtekEtWjAtOVxcLS5dKyg/OlxcLlxcKik/KD89XFxzKjspLyxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHR9LFxuXHQna2V5d29yZCc6IC9AKD86aGF2aW5nfGluc2lkZXxuYW1lc3BhY2V8b3V0c2lkZXxwYXR0ZXJufHJlcXVpcmV8c2VhcmNofHdoZXJlKVxcYi8sXG5cdCdzdGFuZGFyZC1wYXR0ZXJuJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpBbHBoYXxBbHBoYU51bXxBbnl8Qmxhbmt8RW5kfExpbmVCcmVha3xOdW18TnVtQWxwaGF8UHVuY3R8U3BhY2V8U3RhcnR8U3ltYm9sfFdvcmR8V29yZEJyZWFrKVxcYig/OlxcKFthLXpBLVowLTlcXC0uLFxccytdKlxcKSk/Lyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzdGFuZGFyZC1wYXR0ZXJuLW5hbWUnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eW2EtekEtWjAtOVxcLS5dKy8sXG5cdFx0XHRcdGFsaWFzOiAnYnVpbHRpbicsXG5cdFx0XHR9LFxuXHRcdFx0J3F1YW50aWZpZXInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGJcXGQrKD86XFxzKlxcK3xcXHMqLVxccypcXGQrKT8oPyFcXHcpLyxcblx0XHRcdFx0YWxpYXM6ICdudW1iZXInLFxuXHRcdFx0fSxcblx0XHRcdCdzdGFuZGFyZC1wYXR0ZXJuLWF0dHInOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bYS16QS1aMC05XFwtLl0rLyxcblx0XHRcdFx0YWxpYXM6ICdidWlsdGluJyxcblx0XHRcdH0sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWywoKV0vLFxuXHRcdH0sXG5cdH0sXG5cdCdxdWFudGlmaWVyJzoge1xuXHRcdHBhdHRlcm46IC9cXGJcXGQrKD86XFxzKlxcK3xcXHMqLVxccypcXGQrKT8oPyFcXHcpLyxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvPS8sXG5cdFx0XHRhbGlhczogJ3BhdHRlcm4tZGVmJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8mLyxcblx0XHRcdGFsaWFzOiAnY29uanVuY3Rpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL34vLFxuXHRcdFx0YWxpYXM6ICdleGNlcHRpb24nLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcPy8sXG5cdFx0XHRhbGlhczogJ29wdGlvbmFsaXR5Jyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9bW1xcXV0vLFxuXHRcdFx0YWxpYXM6ICdyZXBldGl0aW9uJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9be31dLyxcblx0XHRcdGFsaWFzOiAndmFyaWF0aW9uJyxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9bK19dLyxcblx0XHRcdGFsaWFzOiAnc2VxdWVuY2UnLFxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcLnsyLDN9Lyxcblx0XHRcdGFsaWFzOiAnc3BhbicsXG5cdFx0fSxcblx0XSxcblx0J2ZpZWxkLWNhcHR1cmUnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhbYS16QS1aMC05XFwtLl0rXFxzKlxcKClcXHMqW2EtekEtWjAtOVxcLS5dK1xccyo6XFxzKlthLXpBLVowLTlcXC0uXSsoPzpcXHMqLFxccypbYS16QS1aMC05XFwtLl0rXFxzKjpcXHMqW2EtekEtWjAtOVxcLS5dKykqKD89XFxzKlxcKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZmllbGQtbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW2EtekEtWjAtOVxcLS5dKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb2xvbic6IC86Lyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvW2EtekEtWjAtOVxcLS5dK1xccyo6Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZmllbGQtbmFtZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvW2EtekEtWjAtOVxcLS5dKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdjb2xvbic6IC86Lyxcblx0XHRcdH0sXG5cdFx0fSxcblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1s6OywoKV0vLFxuXHQnbmFtZSc6IC9bYS16QS1aMC05XFwtLl0rL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciB2YXJpYWJsZSA9IC9cXCQoPzpcXHdbYS16XFxkXSooPzpfW15cXHgwMC1cXHgxRlxcc1wiJ1xcXFwoKSRdKik/fFxce1tefVxcc1wiJ1xcXFxdK1xcfSkvaTtcblxuXHRQcmlzbS5sYW5ndWFnZXMubmdpbnggPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W1xcc3t9O10pIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcdyg/OlteO3t9XCInXFxcXFxcc118XFxcXC58XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifCcoPzpbXidcXFxcXXxcXFxcLikqJ3xcXHMrKD86Iy4qKD8hLil8KD8hWyNcXHNdKSkpKj8oPz1cXHMqWzt7XSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFxcXFxcKSopKD86XCIoPzpbXlwiXFxcXF18XFxcXC4pKlwifCcoPzpbXidcXFxcXXxcXFxcLikqJykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2VzY2FwZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1xcXFxbXCInXFxcXG5ydF0vLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ2VudGl0eSdcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpIy4qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcUysvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIG90aGVyIHBhdHRlcm5zXG5cblx0XHRcdFx0J2Jvb2xlYW4nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXHMpKD86b2ZmfG9uKSg/IVxcUykvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J251bWJlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXGQrW2Etel0qKD8hXFxTKS9pLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGVcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be307XS9cblx0fTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMubmltID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHQvLyBEb3VibGUtcXVvdGVkIHN0cmluZ3MgY2FuIGJlIHByZWZpeGVkIGJ5IGFuIGlkZW50aWZpZXIgKEdlbmVyYWxpemVkIHJhdyBzdHJpbmcgbGl0ZXJhbHMpXG5cdFx0cGF0dGVybjogLyg/OlxcYig/IVxcZCkoPzpcXHd8XFxcXHhbODlhLWZBLUZdWzAtOWEtZkEtRl0pKyk/KD86XCJcIlwiW1xcc1xcU10qP1wiXCJcIig/IVwiKXxcIig/OlxcXFxbXFxzXFxTXXxcIlwifFteXCJcXFxcXSkqXCIpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2NoYXInOiB7XG5cdFx0Ly8gQ2hhcmFjdGVyIGxpdGVyYWxzIGFyZSBoYW5kbGVkIHNwZWNpZmljYWxseSB0byBwcmV2ZW50IGlzc3VlcyB3aXRoIG51bWVyaWMgdHlwZSBzdWZmaXhlc1xuXHRcdHBhdHRlcm46IC8nKD86XFxcXCg/OlxcZCt8eFtcXGRhLWZBLUZdezAsMn18Lil8W14nXSknLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyg/Oig/IVxcZCkoPzpcXHd8XFxcXHhbODlhLWZBLUZdWzAtOWEtZkEtRl0pK3xgW15gXFxyXFxuXStgKVxcKj8oPzpcXFtbXlxcXV0rXFxdKT8oPz1cXHMqXFwoKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J29wZXJhdG9yJzogL1xcKiQvXG5cdFx0fVxuXHR9LFxuXHQvLyBXZSBkb24ndCB3YW50IHRvIGhpZ2hsaWdodCBvcGVyYXRvcnMgKGFuZCBhbnl0aGluZyByZWFsbHkpIGluc2lkZSBiYWNrdGlja3Ncblx0J2lkZW50aWZpZXInOiB7XG5cdFx0cGF0dGVybjogL2BbXmBcXHJcXG5dK2AvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9gL1xuXHRcdH1cblx0fSxcblxuXHQvLyBUaGUgbmVnYXRpdmUgbG9vayBhaGVhZCBwcmV2ZW50cyB3cm9uZyBoaWdobGlnaHRpbmcgb2YgdGhlIC4uIG9wZXJhdG9yXG5cdCdudW1iZXInOiAvXFxiKD86MFt4WG9PYkJdW1xcZGEtZkEtRl9dK3xcXGRbXFxkX10qKD86KD8hXFwuXFwuKVxcLltcXGRfXSopPyg/OltlRV1bKy1dP1xcZFtcXGRfXSopPykoPzonP1tpdWZdXFxkKik/Lyxcblx0J2tleXdvcmQnOiAvXFxiKD86YWRkcnxhc3xhc218YXRvbWljfGJpbmR8YmxvY2t8YnJlYWt8Y2FzZXxjYXN0fGNvbmNlcHR8Y29uc3R8Y29udGludWV8Y29udmVydGVyfGRlZmVyfGRpc2NhcmR8ZGlzdGluY3R8ZG98ZWxpZnxlbHNlfGVuZHxlbnVtfGV4Y2VwdHxleHBvcnR8ZmluYWxseXxmb3J8ZnJvbXxmdW5jfGdlbmVyaWN8aWZ8aW1wb3J0fGluY2x1ZGV8aW50ZXJmYWNlfGl0ZXJhdG9yfGxldHxtYWNyb3xtZXRob2R8bWl4aW58bmlsfG9iamVjdHxvdXR8cHJvY3xwdHJ8cmFpc2V8cmVmfHJldHVybnxzdGF0aWN8dGVtcGxhdGV8dHJ5fHR1cGxlfHR5cGV8dXNpbmd8dmFyfHdoZW58d2hpbGV8d2l0aHx3aXRob3V0fHlpZWxkKVxcYi8sXG5cdCdvcGVyYXRvcic6IHtcblx0XHQvLyBMb29rIGJlaGluZCBhbmQgbG9vayBhaGVhZCBwcmV2ZW50IHdyb25nIGhpZ2hsaWdodGluZyBvZiBwdW5jdHVhdGlvbnMgWy4gLl0gey4gLn0gKC4gLilcblx0XHQvLyBidXQgYWxsb3cgdGhlIHNsaWNlIG9wZXJhdG9yIC4uIHRvIHRha2UgcHJlY2VkZW5jZSBvdmVyIHRoZW1cblx0XHQvLyBPbmUgY2FuIGRlZmluZSBoaXMgb3duIG9wZXJhdG9ycyBpbiBOaW0gc28gYWxsIGNvbWJpbmF0aW9uIG9mIG9wZXJhdG9ycyBtaWdodCBiZSBhbiBvcGVyYXRvci5cblx0XHRwYXR0ZXJuOiAvKF58Wyh7XFxbXSg/PVxcLlxcLil8KD8hWyh7XFxbXVxcLikuKSg/Oig/Ols9K1xcLSpcXC88PkAkfiYlfCE/XjpcXFxcXXxcXC5cXC58XFwuKD8hWyl9XFxdXSkpK3xcXGIoPzphbmR8ZGl2fGlufGlzfGlzbm90fG1vZHxub3R8bm90aW58b2Z8b3J8c2hsfHNocnx4b3IpXFxiKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1soe1xcW11cXC58XFwuWyl9XFxdXXxbYCgpe31cXFtcXF0sOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubml4ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3wjLiovLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXXxcXFxcW1xcc1xcU10pKlwifCcnKD86KD8hJycpW1xcc1xcU118JycoPzonfFxcXFx8XFwkXFx7KSkqJycvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHQvLyBUaGUgbG9va2JlaGluZCBlbnN1cmVzIHRoZSAke30gaXMgbm90IHByZWNlZGVkIGJ5IFxcIG9yICcnXG5cdFx0XHRcdHBhdHRlcm46IC8oXnwoPzpefCg/IScnKS4pW15cXFxcXSlcXCRcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3VybCc6IFtcblx0XHQvXFxiKD86W2Etel17Myw3fTpcXC9cXC8pW1xcd1xcLSslflxcLy46Iz0/Jl0rLyxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFteXFwvXSkoPzpbXFx3XFwtKyV+LjojPT8mXSooPyFcXC9cXC8pW1xcd1xcLSslflxcLy46Iz0/Jl0pPyg/IVxcL1xcLylcXC9bXFx3XFwtKyV+XFwvLjojPT8mXSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J2FudGlxdW90YXRpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcJCg/PVxceykvLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYlxcZCtcXGIvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3NlcnR8YnVpbHRpbnN8ZWxzZXxpZnxpbnxpbmhlcml0fGxldHxudWxsfG9yfHRoZW58d2l0aClcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiKD86YWJvcnR8YWRkfGFsbHxhbnl8YXR0ck5hbWVzfGF0dHJWYWx1ZXN8YmFzZU5hbWVPZnxjb21wYXJlVmVyc2lvbnN8Y29uY2F0TGlzdHN8Y3VycmVudFN5c3RlbXxkZWVwU2VxfGRlcml2YXRpb258ZGlyT2Z8ZGl2fGVsZW0oPzpBdCk/fGZldGNoKD86VGFyYmFsbHx1cmwpfGZpbHRlcig/OlNvdXJjZSk/fGZyb21KU09OfGdlbkxpc3R8Z2V0QXR0cnxnZXRFbnZ8aGFzQXR0cnxoYXNoU3RyaW5nfGhlYWR8aW1wb3J0fGludGVyc2VjdEF0dHJzfGlzKD86QXR0cnN8Qm9vbHxGdW5jdGlvbnxJbnR8TGlzdHxOdWxsfFN0cmluZyl8bGVuZ3RofGxlc3NUaGFufGxpc3RUb0F0dHJzfG1hcHxtdWx8cGFyc2VEcnZOYW1lfHBhdGhFeGlzdHN8cmVhZCg/OkRpcnxGaWxlKXxyZW1vdmVBdHRyc3xyZXBsYWNlU3RyaW5nc3xzZXF8c29ydHxzdHJpbmdMZW5ndGh8c3ViKD86c3RyaW5nKT98dGFpbHx0aHJvd3x0byg/OkZpbGV8SlNPTnxQYXRofFN0cmluZ3xYTUwpfHRyYWNlfHR5cGVPZilcXGJ8XFxiZm9sZGwnXFxCLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvWz0hPD5dPT98XFwrXFwrP3xcXHxcXHx8JiZ8XFwvXFwvfC0+P3xbP0BdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpW1xcXS4sOjtdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLm5peC5zdHJpbmcuaW5zaWRlLmludGVycG9sYXRpb24uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLm5peDtcblxuLyoqXG4gKiBPcmlnaW5hbCBieSBKYW4gVC4gU290dCAoaHR0cDovL2dpdGh1Yi5jb20vaWRsZWJlcmcpXG4gKlxuICogSW5jbHVkZXMgYWxsIGNvbW1hbmRzIGFuZCBwbHVnLWlucyBzaGlwcGVkIHdpdGggTlNJUyAzLjA4XG4gKi9cblByaXNtLmxhbmd1YWdlcy5uc2lzID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFsjO10uKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OkFib3J0fEFkZCg/OkJyYW5kaW5nSW1hZ2V8U2l6ZSl8QWR2U3BsYXNofEFsbG93KD86Um9vdERpckluc3RhbGx8U2tpcEZpbGVzKXxBdXRvQ2xvc2VXaW5kb3d8QkcoPzpGb250fEdyYWRpZW50fEltYWdlKXxCYW5uZXJ8QnJhbmRpbmdUZXh0fEJyaW5nVG9Gcm9udHxDUkNDaGVja3xDYWxsKD86SW5zdERMTCk/fENhcHRpb258Q2hhbmdlVUl8Q2hlY2tCaXRtYXB8Q2xlYXJFcnJvcnN8Q29tcGxldGVkVGV4dHxDb21wb25lbnRUZXh0fENvcHlGaWxlc3xDcmVhdGUoPzpEaXJlY3Rvcnl8Rm9udHxTaG9ydEN1dCl8RGVsZXRlKD86SU5JU2VjfElOSVN0cnxSZWdLZXl8UmVnVmFsdWUpP3xEZXRhaWwoPzpQcmludHxzQnV0dG9uVGV4dCl8RGlhbGVyfERpcig/OlRleHR8VmFyfFZlcmlmeSl8RW5hYmxlV2luZG93fEVudW0oPzpSZWdLZXl8UmVnVmFsdWUpfEV4Y2h8RXhlYyg/OlNoZWxsKD86V2FpdCk/fFdhaXQpP3xFeHBhbmRFbnZTdHJpbmdzfEZpbGUoPzpCdWZTaXplfENsb3NlfEVycm9yVGV4dHxPcGVufFJlYWR8UmVhZEJ5dGV8UmVhZFVURjE2TEV8UmVhZFdvcmR8U2Vla3xXcml0ZXxXcml0ZUJ5dGV8V3JpdGVVVEYxNkxFfFdyaXRlV29yZCk/fEZpbmQoPzpDbG9zZXxGaXJzdHxOZXh0fFdpbmRvdyl8Rmx1c2hJTkl8R2V0KD86Q3VySW5zdFR5cGV8Q3VycmVudEFkZHJlc3N8RExMVmVyc2lvbig/OkxvY2FsKT98RGxnSXRlbXxFcnJvckxldmVsfEZpbGVUaW1lKD86TG9jYWwpP3xGdWxsUGF0aE5hbWV8RnVuY3Rpb24oPzpBZGRyZXNzfEVuZCk/fEluc3REaXJFcnJvcnxMYWJlbEFkZHJlc3N8VGVtcEZpbGVOYW1lKXxHb3RvfEhpZGVXaW5kb3d8SWNvbnxJZig/OkFib3J0fEVycm9yc3xGaWxlRXhpc3RzfFJlYm9vdEZsYWd8U2lsZW50KXxJbml0UGx1Z2luc0RpcnxJbnN0UHJvZ3Jlc3NGbGFnc3xJbnN0KD86VHlwZSg/OkdldFRleHR8U2V0VGV4dCk/KXxJbnN0YWxsKD86QnV0dG9uVGV4dHxDb2xvcnN8RGlyKD86UmVnS2V5KT8pfEludCg/OjY0fFB0cik/Q21wVT98SW50KD86NjQpP0ZtdHxJbnQoPzpQdHIpP09wfElzV2luZG93fExhbmcoPzpETEx8U3RyaW5nKXxMaWNlbnNlKD86QmtDb2xvcnxEYXRhfEZvcmNlU2VsZWN0aW9ufExhbmdTdHJpbmd8VGV4dCl8TG9hZExhbmd1YWdlRmlsZXxMb2NrV2luZG93fExvZyg/OlNldHxUZXh0KXxNYW5pZmVzdCg/OkRQSUF3YXJlfFN1cHBvcnRlZE9TKXxNYXRofE1lc3NhZ2VCb3h8TWlzY0J1dHRvblRleHR8TlNJU2RsfE5hbWV8Tm9wfE91dEZpbGV8UEUoPzpEbGxDaGFyYWN0ZXJpc3RpY3N8U3Vic3lzVmVyKXxQYWdlKD86Q2FsbGJhY2tzKT98UG9wfFB1c2h8UXVpdHxSTURpcnxSZWFkKD86RW52U3RyfElOSVN0cnxSZWdEV09SRHxSZWdTdHIpfFJlYm9vdHxSZWdETEx8UmVuYW1lfFJlcXVlc3RFeGVjdXRpb25MZXZlbHxSZXNlcnZlRmlsZXxSZXR1cm58U2VhcmNoUGF0aHxTZWN0aW9uKD86RW5kfEdldEZsYWdzfEdldEluc3RUeXBlc3xHZXRTaXplfEdldFRleHR8R3JvdXB8SW58U2V0RmxhZ3N8U2V0SW5zdFR5cGVzfFNldFNpemV8U2V0VGV4dCk/fFNlbmRNZXNzYWdlfFNldCg/OkF1dG9DbG9zZXxCcmFuZGluZ0ltYWdlfENvbXByZXNzfENvbXByZXNzb3IoPzpEaWN0U2l6ZSk/fEN0bENvbG9yc3xDdXJJbnN0VHlwZXxEYXRhYmxvY2tPcHRpbWl6ZXxEYXRlU2F2ZXxEZXRhaWxzKD86UHJpbnR8Vmlldyl8RXJyb3JMZXZlbHxFcnJvcnN8RmlsZUF0dHJpYnV0ZXN8Rm9udHxPdXRQYXRofE92ZXJ3cml0ZXxQbHVnaW5VbmxvYWR8UmVib290RmxhZ3xSZWdWaWV3fFNoZWxsVmFyQ29udGV4dHxTaWxlbnQpfFNob3coPzpJbnN0RGV0YWlsc3xVbmluc3REZXRhaWxzfFdpbmRvdyl8U2lsZW50KD86SW5zdGFsbHxVbkluc3RhbGwpfFNsZWVwfFNwYWNlVGV4dHN8U3BsYXNofFN0YXJ0TWVudXxTdHIoPzpDbXBTP3xDcHl8TGVuKXxTdWJDYXB0aW9ufFN5c3RlbXxVblJlZ0RMTHxVbmljb2RlfFVuaW5zdFBhZ2V8VW5pbnN0YWxsKD86QnV0dG9uVGV4dHxDYXB0aW9ufEljb258U3ViQ2FwdGlvbnxUZXh0KXxVc2VySW5mb3xWSSg/OkFkZFZlcnNpb25LZXl8RmlsZVZlcnNpb258UHJvZHVjdFZlcnNpb24pfFZQYXRjaHxWYXJ8V2luZG93SWNvbnxXcml0ZSg/OklOSVN0cnxSZWcoPzpCaW58RFdPUkR8RXhwYW5kU3RyfE11bHRpU3RyfE5vbmV8U3RyKXxVbmluc3RhbGxlcil8WFBTdHlsZXxucyg/OkRpYWxvZ3N8RXhlYykpXFxiL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQncHJvcGVydHknOiAvXFxiKD86QVJDSElWRXxGSUxFXyg/OkFUVFJJQlVURV9BUkNISVZFfEFUVFJJQlVURV9OT1JNQUx8QVRUUklCVVRFX09GRkxJTkV8QVRUUklCVVRFX1JFQURPTkxZfEFUVFJJQlVURV9TWVNURU18QVRUUklCVVRFX1RFTVBPUkFSWSl8SEsoPzooPzpDUnxDVXxMTSkoPzozMnw2NCk/fEREfFBEfFUpfEhLRVlfKD86Q0xBU1NFU19ST09UfENVUlJFTlRfQ09ORklHfENVUlJFTlRfVVNFUnxEWU5fREFUQXxMT0NBTF9NQUNISU5FfFBFUkZPUk1BTkNFX0RBVEF8VVNFUlMpfElEKD86QUJPUlR8Q0FOQ0VMfElHTk9SRXxOT3xPS3xSRVRSWXxZRVMpfE1CXyg/OkFCT1JUUkVUUllJR05PUkV8REVGQlVUVE9OMXxERUZCVVRUT04yfERFRkJVVFRPTjN8REVGQlVUVE9ONHxJQ09ORVhDTEFNQVRJT058SUNPTklORk9STUFUSU9OfElDT05RVUVTVElPTnxJQ09OU1RPUHxPS3xPS0NBTkNFTHxSRVRSWUNBTkNFTHxSSUdIVHxSVExSRUFESU5HfFNFVEZPUkVHUk9VTkR8VE9QTU9TVHxVU0VSSUNPTnxZRVNOTyl8Tk9STUFMfE9GRkxJTkV8UkVBRE9OTFl8U0hDVFh8U0hFTExfQ09OVEVYVHxTWVNURU18VEVNUE9SQVJZfGFkbWlufGFsbHxhdXRvfGJvdGh8Y29sb3JlZHxmYWxzZXxmb3JjZXxoaWRlfGhpZ2hlc3R8bGFzdHVzZWR8bGVhdmV8bGlzdG9ubHl8bm9uZXxub3JtYWx8bm90c2V0fG9mZnxvbnxvcGVufHByaW50fHNob3d8c2lsZW50fHNpbGVudGxvZ3xzbW9vdGh8dGV4dG9ubHl8dHJ1ZXx1c2VyKVxcYi8sXG5cdCdjb25zdGFudCc6IC9cXCRcXHtbIVxcd1xcLjpcXF4tXStcXH18XFwkXFwoWyFcXHdcXC46XFxeLV0rXFwpLyxcblx0J3ZhcmlhYmxlJzogL1xcJFxcd1tcXHdcXC5dKi8sXG5cdCdudW1iZXInOiAvXFxiMHhbXFxkQS1GYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZV0tP1xcZCspPy8sXG5cdCdvcGVyYXRvcic6IC8tLT98XFwrXFwrP3w8PT98Pj0/fD09Pz0/fCYmP3xcXHxcXHw/fFs/KlxcL35eJV0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vLFxuXHQnaW1wb3J0YW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopISg/OmFkZGluY2x1ZGVkaXJ8YWRkcGx1Z2luZGlyfGFwcGVuZGZpbGV8Y2R8ZGVmaW5lfGRlbGZpbGV8ZWNob3xlbHNlfGVuZGlmfGVycm9yfGV4ZWN1dGV8ZmluYWxpemV8Z2V0ZGxsdmVyc2lvbnxnZXR0bGJ2ZXJzaW9ufGlmfGlmZGVmfGlmbWFjcm9kZWZ8aWZtYWNyb25kZWZ8aWZuZGVmfGluY2x1ZGV8aW5zZXJ0bWFjcm98bWFjcm98bWFjcm9lbmR8bWFrZW5zaXN8cGFja2hkcnxwcmFnbWF8c2VhcmNocGFyc2V8c2VhcmNocmVwbGFjZXxzeXN0ZW18dGVtcGZpbGV8dW5kZWZ8dmVyYm9zZXx3YXJuaW5nKVxcYi9pbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH1cbn07XG5cblByaXNtLmxhbmd1YWdlcy5vYmplY3RpdmVjID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnYycsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvQD9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzphc218YXV0b3xicmVha3xjYXNlfGNoYXJ8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVybnxmbG9hdHxmb3J8Z290b3xpZnxpbnxpbmxpbmV8aW50fGxvbmd8cmVnaXN0ZXJ8cmV0dXJufHNlbGZ8c2hvcnR8c2lnbmVkfHNpemVvZnxzdGF0aWN8c3RydWN0fHN1cGVyfHN3aXRjaHx0eXBlZGVmfHR5cGVvZnx1bmlvbnx1bnNpZ25lZHx2b2lkfHZvbGF0aWxlfHdoaWxlKVxcYnwoPzpAaW50ZXJmYWNlfEBlbmR8QGltcGxlbWVudGF0aW9ufEBwcm90b2NvbHxAY2xhc3N8QHB1YmxpY3xAcHJvdGVjdGVkfEBwcml2YXRlfEBwcm9wZXJ0eXxAdHJ5fEBjYXRjaHxAZmluYWxseXxAdGhyb3d8QHN5bnRoZXNpemV8QGR5bmFtaWN8QHNlbGVjdG9yKVxcYi8sXG5cdCdvcGVyYXRvcic6IC8tWy0+XT98XFwrXFwrP3whPT98PDw/PT98Pj4/PT98PT0/fCYmP3xcXHxcXHw/fFt+XiU/KlxcL0BdL1xufSk7XG5cbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMub2JqZWN0aXZlY1snY2xhc3MtbmFtZSddO1xuXG5QcmlzbS5sYW5ndWFnZXMub2JqYyA9IFByaXNtLmxhbmd1YWdlcy5vYmplY3RpdmVjO1xuXG4vLyBodHRwczovL29jYW1sLm9yZy9tYW51YWwvbGV4Lmh0bWxcblxuUHJpc20ubGFuZ3VhZ2VzLm9jYW1sID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwoXFwqW1xcc1xcU10qP1xcKlxcKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC8nKD86W15cXFxcXFxyXFxuJ118XFxcXCg/Oi58W294XT9bMC05YS1mXXsxLDN9KSknL2ksXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXCg/OltcXHNcXFNdfFxcclxcbil8W15cXFxcXFxyXFxuXCJdKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXHsoW2Etel9dKilcXHxbXFxzXFxTXSo/XFx8XFwxXFx9Lyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J251bWJlcic6IFtcblx0XHQvLyBiaW5hcnkgYW5kIG9jdGFsXG5cdFx0L1xcYig/OjBiWzAxXVswMV9dKnwwb1swLTddWzAtN19dKilcXGIvaSxcblx0XHQvLyBoZXhhZGVjaW1hbFxuXHRcdC9cXGIweFthLWYwLTldW2EtZjAtOV9dKig/OlxcLlthLWYwLTlfXSopPyg/OnBbKy1dP1xcZFtcXGRfXSopPyg/IVxcdykvaSxcblx0XHQvLyBkZWNpbWFsXG5cdFx0L1xcYlxcZFtcXGRfXSooPzpcXC5bXFxkX10qKT8oPzplWystXT9cXGRbXFxkX10qKT8oPyFcXHcpL2ksXG5cdF0sXG5cdCdkaXJlY3RpdmUnOiB7XG5cdFx0cGF0dGVybjogL1xcQiNcXHcrLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogL1xcQn5cXHcrLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQndHlwZS12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvXFxCJ1xcdysvLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdH0sXG5cdCd2YXJpYW50Jzoge1xuXHRcdHBhdHRlcm46IC9gXFx3Ky8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdC8vIEZvciB0aGUgbGlzdCBvZiBrZXl3b3JkcyBhbmQgb3BlcmF0b3JzLFxuXHQvLyBzZWU6IGh0dHA6Ly9jYW1sLmlucmlhLmZyL3B1Yi9kb2NzL21hbnVhbC1vY2FtbC9sZXguaHRtbCNzZWM4NFxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xhc3NlcnR8YmVnaW58Y2xhc3N8Y29uc3RyYWludHxkb3xkb25lfGRvd250b3xlbHNlfGVuZHxleGNlcHRpb258ZXh0ZXJuYWx8Zm9yfGZ1bnxmdW5jdGlvbnxmdW5jdG9yfGlmfGlufGluY2x1ZGV8aW5oZXJpdHxpbml0aWFsaXplcnxsYXp5fGxldHxtYXRjaHxtZXRob2R8bW9kdWxlfG11dGFibGV8bmV3fG5vbnJlY3xvYmplY3R8b2Z8b3Blbnxwcml2YXRlfHJlY3xzaWd8c3RydWN0fHRoZW58dG98dHJ5fHR5cGV8dmFsfHZhbHVlfHZpcnR1YWx8d2hlbnx3aGVyZXx3aGlsZXx3aXRoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnb3BlcmF0b3ItbGlrZS1wdW5jdHVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXFxbWzw+fF18Wz58XVxcXXxcXHs8fD5cXH0vLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdC8vIEN1c3RvbSBvcGVyYXRvcnMgYXJlIGFsbG93ZWRcblx0J29wZXJhdG9yJzogL1xcLlsufl18Ols9Pl18Wz08PkBefCYrXFwtKlxcLyQlIT9+XVshJCUmKitcXC0uXFwvOjw9Pj9AXnx+XSp8XFxiKD86YW5kfGFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kfG9yKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC87O3w6OnxbKCl7fVxcW1xcXS4sOjsjXXxcXGJfXFxiL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgZXNjYXBlcyA9IC9cXFxcKD86W1wiJ1xcXFxhYmVmbnJ0dl18MFswLTddezJ9fFVbXFxkQS1GYS1mXXs2fXx1W1xcZEEtRmEtZl17NH18eFtcXGRBLUZhLWZdezJ9KS87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLm9kaW4gPSB7XG5cdFx0LyoqXG5cdFx0ICogVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gc3VwcG9ydHMgb25seSAxIGxldmVsIG9mIG5lc3RpbmcuXG5cdFx0ICpcblx0XHQgKiBAYXV0aG9yIE1pY2hhZWwgU2NobWlkdFxuXHRcdCAqIEBhdXRob3IgZWR1a2lzdG9cblx0XHQgKi9cblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcL1xcKig/OlteLypdfFxcLyg/IVxcKil8XFwqKD8hXFwvKXxcXC9cXCooPzpcXCooPyFcXC8pfFteKl0pKig/OlxcKlxcL3wkKSkqKD86XFwqXFwvfCQpLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvIyFbXlxcblxccl0qLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwvXFwvW15cXG5cXHJdKi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvKipcblx0XHQgKiBTaG91bGQgYmUgZm91bmQgYmVmb3JlIHN0cmluZ3MgYmVjYXVzZSBvZiAnXCInXCItIGFuZCAnYCdgLWxpa2Ugc2VxdWVuY2VzLlxuXHRcdCAqL1xuXHRcdCdjaGFyJzoge1xuXHRcdFx0cGF0dGVybjogLycoPzpcXFxcKD86LnxbMFV1eF1bMC05QS1GYS1mXXsxLDZ9KXxbXlxcblxccidcXFxcXSknLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3ltYm9sJzogZXNjYXBlc1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvYFteYF0qYC8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cXG5cXHJcIlxcXFxdKSpcIi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3N5bWJvbCc6IGVzY2FwZXNcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0cGF0dGVybjogLyNcXHcrLyxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblxuXHRcdCdudW1iZXInOiAvXFxiMCg/OmJbMDFfXSt8ZFtcXGRfXSt8aF8qKD86KD86KD86W1xcZEEtRmEtZl1fKil7OH0pezEsMn18KD86W1xcZEEtRmEtZl1fKil7NH0pfG9bMC03X10rfHhbXFxkQS1GX2EtZl0rfHpbXFxkQUJfYWJdKylcXGJ8KD86XFxiXFxkKyg/OlxcLig/IVxcLilcXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdWystXT9cXGQqKT9baWprXT8oPyFcXHcpLyxcblxuXHRcdCdkaXNjYXJkJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYl9cXGIvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cblx0XHQncHJvY2VkdXJlLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3Kyg/PVsgXFx0XSooPzo6XFxzKil7Mn1wcm9jXFxiKS8sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cblx0XHQna2V5d29yZCc6IC9cXGIoPzphc218YXV0b19jYXN0fGJpdF9zZXR8YnJlYWt8Y2FzZXxjYXN0fGNvbnRleHR8Y29udGludWV8ZGVmZXJ8ZGlzdGluY3R8ZG98ZHluYW1pY3xlbHNlfGVudW18ZmFsbHRocm91Z2h8Zm9yfGZvcmVpZ258aWZ8aW1wb3J0fGlufG1hcHxtYXRyaXh8bm90X2lufG9yX2Vsc2V8b3JfcmV0dXJufHBhY2thZ2V8cHJvY3xyZXR1cm58c3RydWN0fHN3aXRjaHx0cmFuc211dGV8dHlwZWlkfHVuaW9ufHVzaW5nfHdoZW58d2hlcmUpXFxiLyxcblxuXHRcdC8qKlxuXHRcdCAqIGZhbHNlLCBuaWwsIHRydWUgY2FuIGJlIHVzZWQgYXMgcHJvY2VkdXJlIG5hbWVzLiBcIl9cIiBhbmQga2V5d29yZHMgY2FuJ3QuXG5cdFx0ICovXG5cdFx0J3Byb2NlZHVyZS1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYlxcdysoPz1bIFxcdF0qXFwoKS8sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXxuaWx8dHJ1ZSlcXGIvLFxuXG5cdFx0J2NvbnN0YW50LXBhcmFtZXRlci1zaWduJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJC8sXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXG5cdFx0J3VuZGVmaW5lZCc6IHtcblx0XHRcdHBhdHRlcm46IC8tLS0vLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXG5cdFx0J2Fycm93Jzoge1xuXHRcdFx0cGF0dGVybjogLy0+Lyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblxuXHRcdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18XFwuXFwuWzw9XT98KD86Jn58Wy0hKisvPX5dfFslJjw+fF17MSwyfSk9P3xbP15dLyxcblxuXHRcdCdwdW5jdHVhdGlvbic6IC9bKCksLjo7QFxcW1xcXXt9XS9cblx0fTtcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvKiBPcGVuQ0wga2VybmVsIGxhbmd1YWdlICovXG5cdFByaXNtLmxhbmd1YWdlcy5vcGVuY2wgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjJywge1xuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIHRoZSBvZmZpY2lhbCBzcGVjcyAoMi4wKSBhbmQgaHR0cDovL3N0cmVhbWNvbXB1dGluZy5ldS9kb3dubG9hZHMvP29wZW5jbC5sYW5nIChvcGVuY2wta2V5d29yZHMsIG9wZW5jbC10eXBlcykgYW5kIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYWlkPTI5NTc3OTQmZ3JvdXBfaWQ9OTU3MTcmYXRpZD02MTIzODQgKFdvcmRzMiwgcGFydGx5IFdvcmRzMylcblx0XHQna2V5d29yZCc6IC9cXGIoPzooPzpfXyk/KD86Y29uc3RhbnR8Z2xvYmFsfGtlcm5lbHxsb2NhbHxwcml2YXRlfHJlYWRfb25seXxyZWFkX3dyaXRlfHdyaXRlX29ubHkpfF9fYXR0cmlidXRlX198YXV0b3woPzpib29sfHU/KD86Y2hhcnxpbnR8bG9uZ3xzaG9ydCl8aGFsZnxxdWFkKSg/OjJ8M3w0fDh8MTYpP3xicmVha3xjYXNlfGNvbXBsZXh8Y29uc3R8Y29udGludWV8KD86ZG91YmxlfGZsb2F0KSg/OjE2KD86eCg/OjF8Mnw0fDh8MTYpKT98MXgoPzoxfDJ8NHw4fDE2KXwyKD86eCg/OjF8Mnw0fDh8MTYpKT98M3w0KD86eCg/OjF8Mnw0fDh8MTYpKT98OCg/OngoPzoxfDJ8NHw4fDE2KSk/KT98ZGVmYXVsdHxkb3xlbHNlfGVudW18ZXh0ZXJufGZvcnxnb3RvfGlmfGltYWdpbmFyeXxpbmxpbmV8cGFja2VkfHBpcGV8cmVnaXN0ZXJ8cmVzdHJpY3R8cmV0dXJufHNpZ25lZHxzaXplb2Z8c3RhdGljfHN0cnVjdHxzd2l0Y2h8dHlwZWRlZnx1bmlmb3JtfHVuaW9ufHVuc2lnbmVkfHZvaWR8dm9sYXRpbGV8d2hpbGUpXFxiLyxcblx0XHQvLyBFeHRyYWN0ZWQgZnJvbSBodHRwOi8vc3RyZWFtY29tcHV0aW5nLmV1L2Rvd25sb2Fkcy8/b3BlbmNsLmxhbmcgKG9wZW5jbC1jb25zdClcblx0XHQvLyBNYXRoIENvbnN0YW50czogaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkNML3Nkay8yLjEvZG9jcy9tYW4veGh0bWwvbWF0aENvbnN0YW50cy5odG1sXG5cdFx0Ly8gTWFjcm9zIGFuZCBMaW1pdHM6IGh0dHBzOi8vd3d3Lmtocm9ub3Mub3JnL3JlZ2lzdHJ5L09wZW5DTC9zZGsvMi4xL2RvY3MvbWFuL3hodG1sL21hY3JvTGltaXRzLmh0bWxcblx0XHQnbnVtYmVyJzogLyg/OlxcYjB4KD86W1xcZGEtZl0rKD86XFwuW1xcZGEtZl0qKT98XFwuW1xcZGEtZl0rKSg/OnBbKy1dP1xcZCspP3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KVtmdWhsXXswLDR9L2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdjb25zdGFudC1vcGVuY2wta2VybmVsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkNIQVJfKD86QklUfE1BWHxNSU4pfENMS18oPzpBRERSRVNTXyg/OkNMQU1QKD86X1RPX0VER0UpP3xOT05FfFJFUEVBVCl8RklMVEVSXyg/OkxJTkVBUnxORUFSRVNUKXwoPzpHTE9CQUx8TE9DQUwpX01FTV9GRU5DRXxOT1JNQUxJWkVEX0NPT1JEU18oPzpGQUxTRXxUUlVFKSl8Q0xfKD86QkdSQXwoPzpIQUxGXyk/RkxPQVR8SU5URU5TSVRZfExVTUlOQU5DRXxBP1I/Rz9CP1tBeF0/fCg/Oig/OlVOKT9TSUdORUR8W1VTXU5PUk0pXyg/OklOVCg/Ojh8MTZ8MzIpKXxVTk9STV8oPzpJTlRfMTAxMDEwfFNIT1JUXyg/OjU1NXw1NjUpKSl8KD86REJMfEZMVHxIQUxGKV8oPzpESUd8RVBTSUxPTnwoPzpNQVh8TUlOKSg/Oig/Ol8xMCk/X0VYUCk/fE1BTlRfRElHKXxGTFRfUkFESVh8SFVHRV9WQUxGP3woPzpJTlR8TE9OR3xTQ0hBUnxTSFJUKV8oPzpNQVh8TUlOKXxJTkZJTklUWXxNQVhGTE9BVHxNXyg/OlsxMl1fUEl8Ml9TUVJUUEl8RXxMTig/OjJ8MTApfExPRyg/OjJ8MTApRT98UEkoPzpfWzI0XSk/fFNRUlQoPzoxXzJ8MikpKD86X0Z8X0gpP3xOQU58KD86VUNIQVJ8VUlOVHxVTE9OR3xVU0hSVClfTUFYKVxcYi8sXG5cdFx0XHRhbGlhczogJ2NvbnN0YW50J1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnb3BlbmNsJywgJ2NsYXNzLW5hbWUnLCB7XG5cdFx0Ly8gaHR0cHM6Ly93d3cua2hyb25vcy5vcmcvcmVnaXN0cnkvT3BlbkNML3Nkay8yLjEvZG9jcy9tYW4veGh0bWwvc2NhbGFyRGF0YVR5cGVzLmh0bWxcblx0XHQvLyBodHRwczovL3d3dy5raHJvbm9zLm9yZy9yZWdpc3RyeS9PcGVuQ0wvc2RrLzIuMS9kb2NzL21hbi94aHRtbC9vdGhlckRhdGFUeXBlcy5odG1sXG5cdFx0J2J1aWx0aW4tdHlwZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpfY2xfKD86Y29tbWFuZF9xdWV1ZXxjb250ZXh0fGRldmljZV9pZHxldmVudHxrZXJuZWx8bWVtfHBsYXRmb3JtX2lkfHByb2dyYW18c2FtcGxlcil8Y2xfKD86aW1hZ2VfZm9ybWF0fG1lbV9mZW5jZV9mbGFncyl8Y2xrX2V2ZW50X3R8ZXZlbnRfdHxpbWFnZSg/OjFkXyg/OmFycmF5X3xidWZmZXJfKT90fDJkXyg/OmFycmF5Xyg/OmRlcHRoX3xtc2FhX2RlcHRoX3xtc2FhXyk/fGRlcHRoX3xtc2FhX2RlcHRoX3xtc2FhXyk/dHwzZF90KXxpbnRwdHJfdHxuZHJhbmdlX3R8cHRyZGlmZl90fHF1ZXVlX3R8cmVzZXJ2ZV9pZF90fHNhbXBsZXJfdHxzaXplX3R8dWludHB0cl90KVxcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fVxuXHR9KTtcblxuXHR2YXIgYXR0cmlidXRlcyA9IHtcblx0XHQvLyBFeHRyYWN0ZWQgZnJvbSBodHRwOi8vc3RyZWFtY29tcHV0aW5nLmV1L2Rvd25sb2Fkcy8/b3BlbmNsX2hvc3QubGFuZyAob3BlbmNsLXR5cGVzIGFuZCBvcGVuY2wtaG9zdClcblx0XHQndHlwZS1vcGVuY2wtaG9zdCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpjbF8oPzpHTGVudW18R0xpbnR8R0x1aW58YWRkcmVzc2luZ19tb2RlfGJpdGZpZWxkfGJvb2x8YnVmZmVyX2NyZWF0ZV90eXBlfGJ1aWxkX3N0YXR1c3xjaGFubmVsXyg/Om9yZGVyfHR5cGUpfCg/OnU/KD86Y2hhcnxpbnR8bG9uZ3xzaG9ydCl8ZG91YmxlfGZsb2F0KSg/OjJ8M3w0fDh8MTYpP3xjb21tYW5kXyg/OnF1ZXVlKD86X2luZm98X3Byb3BlcnRpZXMpP3x0eXBlKXxjb250ZXh0KD86X2luZm98X3Byb3BlcnRpZXMpP3xkZXZpY2VfKD86ZXhlY19jYXBhYmlsaXRpZXN8ZnBfY29uZmlnfGlkfGluZm98bG9jYWxfbWVtX3R5cGV8bWVtX2NhY2hlX3R5cGV8dHlwZSl8KD86ZXZlbnR8c2FtcGxlcikoPzpfaW5mbyk/fGZpbHRlcl9tb2RlfGhhbGZ8aW1hZ2VfaW5mb3xrZXJuZWwoPzpfaW5mb3xfd29ya19ncm91cF9pbmZvKT98bWFwX2ZsYWdzfG1lbSg/Ol9mbGFnc3xfaW5mb3xfb2JqZWN0X3R5cGUpP3xwbGF0Zm9ybV8oPzppZHxpbmZvKXxwcm9maWxpbmdfaW5mb3xwcm9ncmFtKD86X2J1aWxkX2luZm98X2luZm8pPykpXFxiLyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9LFxuXHRcdCdib29sZWFuLW9wZW5jbC1ob3N0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYkNMXyg/OkZBTFNFfFRSVUUpXFxiLyxcblx0XHRcdGFsaWFzOiAnYm9vbGVhbidcblx0XHR9LFxuXHRcdC8vIEV4dHJhY3RlZCBmcm9tIGNsLmggKDIuMCkgYW5kIGh0dHA6Ly9zdHJlYW1jb21wdXRpbmcuZXUvZG93bmxvYWRzLz9vcGVuY2xfaG9zdC5sYW5nIChvcGVuY2wtY29uc3QpXG5cdFx0J2NvbnN0YW50LW9wZW5jbC1ob3N0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYkNMXyg/OkF8QUJHUnxBRERSRVNTXyg/OkNMQU1QKD86X1RPX0VER0UpP3xNSVJST1JFRF9SRVBFQVR8Tk9ORXxSRVBFQVQpfEFSR0J8QkdSQXxCTE9DS0lOR3xCVUZGRVJfQ1JFQVRFX1RZUEVfUkVHSU9OfEJVSUxEXyg/OkVSUk9SfElOX1BST0dSRVNTfE5PTkV8UFJPR1JBTV9GQUlMVVJFfFNVQ0NFU1MpfENPTU1BTkRfKD86QUNRVUlSRV9HTF9PQkpFQ1RTfEJBUlJJRVJ8Q09QWV8oPzpCVUZGRVIoPzpfUkVDVHxfVE9fSU1BR0UpP3xJTUFHRSg/Ol9UT19CVUZGRVIpPyl8RklMTF8oPzpCVUZGRVJ8SU1BR0UpfE1BUCg/Ol9CVUZGRVJ8X0lNQUdFKXxNQVJLRVJ8TUlHUkFURSg/Ol9TVk0pP19NRU1fT0JKRUNUU3xOQVRJVkVfS0VSTkVMfE5EUkFOR0VfS0VSTkVMfFJFQURfKD86QlVGRkVSKD86X1JFQ1QpP3xJTUFHRSl8UkVMRUFTRV9HTF9PQkpFQ1RTfFNWTV8oPzpGUkVFfE1BUHxNRU1DUFl8TUVNRklMTHxVTk1BUCl8VEFTS3xVTk1BUF9NRU1fT0JKRUNUfFVTRVJ8V1JJVEVfKD86QlVGRkVSKD86X1JFQ1QpP3xJTUFHRSkpfENPTVBJTEVSX05PVF9BVkFJTEFCTEV8Q09NUElMRV9QUk9HUkFNX0ZBSUxVUkV8Q09NUExFVEV8Q09OVEVYVF8oPzpERVZJQ0VTfElOVEVST1BfVVNFUl9TWU5DfE5VTV9ERVZJQ0VTfFBMQVRGT1JNfFBST1BFUlRJRVN8UkVGRVJFTkNFX0NPVU5UKXxERVBUSCg/Ol9TVEVOQ0lMKT98REVWSUNFXyg/OkFERFJFU1NfQklUU3xBRkZJTklUWV9ET01BSU5fKD86TFsxLTRdX0NBQ0hFfE5FWFRfUEFSVElUSU9OQUJMRXxOVU1BKXxBVkFJTEFCTEV8QlVJTFRfSU5fS0VSTkVMU3xDT01QSUxFUl9BVkFJTEFCTEV8RE9VQkxFX0ZQX0NPTkZJR3xFTkRJQU5fTElUVExFfEVSUk9SX0NPUlJFQ1RJT05fU1VQUE9SVHxFWEVDVVRJT05fQ0FQQUJJTElUSUVTfEVYVEVOU0lPTlN8R0xPQkFMXyg/Ok1FTV8oPzpDQUNIRUxJTkVfU0laRXxDQUNIRV9TSVpFfENBQ0hFX1RZUEV8U0laRSl8VkFSSUFCTEVfUFJFRkVSUkVEX1RPVEFMX1NJWkUpfEhPU1RfVU5JRklFRF9NRU1PUll8SUxfVkVSU0lPTnxJTUFHRSg/OjJEX01BWF8oPzpIRUlHSFR8V0lEVEgpfDNEX01BWF8oPzpERVBUSHxIRUlHSFR8V0lEVEgpfF9CQVNFX0FERFJFU1NfQUxJR05NRU5UfF9NQVhfQVJSQVlfU0laRXxfTUFYX0JVRkZFUl9TSVpFfF9QSVRDSF9BTElHTk1FTlR8X1NVUFBPUlQpfExJTktFUl9BVkFJTEFCTEV8TE9DQUxfTUVNX1NJWkV8TE9DQUxfTUVNX1RZUEV8TUFYXyg/OkNMT0NLX0ZSRVFVRU5DWXxDT01QVVRFX1VOSVRTfENPTlNUQU5UX0FSR1N8Q09OU1RBTlRfQlVGRkVSX1NJWkV8R0xPQkFMX1ZBUklBQkxFX1NJWkV8TUVNX0FMTE9DX1NJWkV8TlVNX1NVQl9HUk9VUFN8T05fREVWSUNFXyg/OkVWRU5UU3xRVUVVRVMpfFBBUkFNRVRFUl9TSVpFfFBJUEVfQVJHU3xSRUFEX0lNQUdFX0FSR1N8UkVBRF9XUklURV9JTUFHRV9BUkdTfFNBTVBMRVJTfFdPUktfR1JPVVBfU0laRXxXT1JLX0lURU1fRElNRU5TSU9OU3xXT1JLX0lURU1fU0laRVN8V1JJVEVfSU1BR0VfQVJHUyl8TUVNX0JBU0VfQUREUl9BTElHTnxNSU5fREFUQV9UWVBFX0FMSUdOX1NJWkV8TkFNRXxOQVRJVkVfVkVDVE9SX1dJRFRIXyg/OkNIQVJ8RE9VQkxFfEZMT0FUfEhBTEZ8SU5UfExPTkd8U0hPUlQpfE5PVF8oPzpBVkFJTEFCTEV8Rk9VTkQpfE9QRU5DTF9DX1ZFUlNJT058UEFSRU5UX0RFVklDRXxQQVJUSVRJT05fKD86QUZGSU5JVFlfRE9NQUlOfEJZX0FGRklOSVRZX0RPTUFJTnxCWV9DT1VOVFN8QllfQ09VTlRTX0xJU1RfRU5EfEVRVUFMTFl8RkFJTEVEfE1BWF9TVUJfREVWSUNFU3xQUk9QRVJUSUVTfFRZUEUpfFBJUEVfTUFYXyg/OkFDVElWRV9SRVNFUlZBVElPTlN8UEFDS0VUX1NJWkUpfFBMQVRGT1JNfFBSRUZFUlJFRF8oPzpHTE9CQUxfQVRPTUlDX0FMSUdOTUVOVHxJTlRFUk9QX1VTRVJfU1lOQ3xMT0NBTF9BVE9NSUNfQUxJR05NRU5UfFBMQVRGT1JNX0FUT01JQ19BTElHTk1FTlR8VkVDVE9SX1dJRFRIXyg/OkNIQVJ8RE9VQkxFfEZMT0FUfEhBTEZ8SU5UfExPTkd8U0hPUlQpKXxQUklOVEZfQlVGRkVSX1NJWkV8UFJPRklMRXxQUk9GSUxJTkdfVElNRVJfUkVTT0xVVElPTnxRVUVVRV8oPzpPTl8oPzpERVZJQ0VfKD86TUFYX1NJWkV8UFJFRkVSUkVEX1NJWkV8UFJPUEVSVElFUyl8SE9TVF9QUk9QRVJUSUVTKXxQUk9QRVJUSUVTKXxSRUZFUkVOQ0VfQ09VTlR8U0lOR0xFX0ZQX0NPTkZJR3xTVUJfR1JPVVBfSU5ERVBFTkRFTlRfRk9SV0FSRF9QUk9HUkVTU3xTVk1fKD86QVRPTUlDU3xDQVBBQklMSVRJRVN8Q09BUlNFX0dSQUlOX0JVRkZFUnxGSU5FX0dSQUlOX0JVRkZFUnxGSU5FX0dSQUlOX1NZU1RFTSl8VFlQRSg/Ol9BQ0NFTEVSQVRPUnxfQUxMfF9DUFV8X0NVU1RPTXxfREVGQVVMVHxfR1BVKT98VkVORE9SKD86X0lEKT98VkVSU0lPTil8RFJJVkVSX1ZFUlNJT058RVZFTlRfKD86Q09NTUFORF8oPzpFWEVDVVRJT05fU1RBVFVTfFFVRVVFfFRZUEUpfENPTlRFWFR8UkVGRVJFTkNFX0NPVU5UKXxFWEVDXyg/OktFUk5FTHxOQVRJVkVfS0VSTkVMfFNUQVRVU19FUlJPUl9GT1JfRVZFTlRTX0lOX1dBSVRfTElTVCl8RklMVEVSXyg/OkxJTkVBUnxORUFSRVNUKXxGTE9BVHxGUF8oPzpDT1JSRUNUTFlfUk9VTkRFRF9ESVZJREVfU1FSVHxERU5PUk18Rk1BfElORl9OQU58Uk9VTkRfVE9fSU5GfFJPVU5EX1RPX05FQVJFU1R8Uk9VTkRfVE9fWkVST3xTT0ZUX0ZMT0FUKXxHTE9CQUx8SEFMRl9GTE9BVHxJTUFHRV8oPzpBUlJBWV9TSVpFfEJVRkZFUnxERVBUSHxFTEVNRU5UX1NJWkV8Rk9STUFUfEZPUk1BVF9NSVNNQVRDSHxGT1JNQVRfTk9UX1NVUFBPUlRFRHxIRUlHSFR8TlVNX01JUF9MRVZFTFN8TlVNX1NBTVBMRVN8Uk9XX1BJVENIfFNMSUNFX1BJVENIfFdJRFRIKXxJTlRFTlNJVFl8SU5WQUxJRF8oPzpBUkdfSU5ERVh8QVJHX1NJWkV8QVJHX1ZBTFVFfEJJTkFSWXxCVUZGRVJfU0laRXxCVUlMRF9PUFRJT05TfENPTU1BTkRfUVVFVUV8Q09NUElMRVJfT1BUSU9OU3xDT05URVhUfERFVklDRXxERVZJQ0VfUEFSVElUSU9OX0NPVU5UfERFVklDRV9RVUVVRXxERVZJQ0VfVFlQRXxFVkVOVHxFVkVOVF9XQUlUX0xJU1R8R0xPQkFMX09GRlNFVHxHTE9CQUxfV09SS19TSVpFfEdMX09CSkVDVHxIT1NUX1BUUnxJTUFHRV9ERVNDUklQVE9SfElNQUdFX0ZPUk1BVF9ERVNDUklQVE9SfElNQUdFX1NJWkV8S0VSTkVMfEtFUk5FTF9BUkdTfEtFUk5FTF9ERUZJTklUSU9OfEtFUk5FTF9OQU1FfExJTktFUl9PUFRJT05TfE1FTV9PQkpFQ1R8TUlQX0xFVkVMfE9QRVJBVElPTnxQSVBFX1NJWkV8UExBVEZPUk18UFJPR1JBTXxQUk9HUkFNX0VYRUNVVEFCTEV8UFJPUEVSVFl8UVVFVUVfUFJPUEVSVElFU3xTQU1QTEVSfFZBTFVFfFdPUktfRElNRU5TSU9OfFdPUktfR1JPVVBfU0laRXxXT1JLX0lURU1fU0laRSl8S0VSTkVMXyg/OkFSR18oPzpBQ0NFU1NfKD86Tk9ORXxRVUFMSUZJRVJ8UkVBRF9PTkxZfFJFQURfV1JJVEV8V1JJVEVfT05MWSl8QUREUkVTU18oPzpDT05TVEFOVHxHTE9CQUx8TE9DQUx8UFJJVkFURXxRVUFMSUZJRVIpfElORk9fTk9UX0FWQUlMQUJMRXxOQU1FfFRZUEVfKD86Q09OU1R8TkFNRXxOT05FfFBJUEV8UVVBTElGSUVSfFJFU1RSSUNUfFZPTEFUSUxFKSl8QVRUUklCVVRFU3xDT01QSUxFX05VTV9TVUJfR1JPVVBTfENPTVBJTEVfV09SS19HUk9VUF9TSVpFfENPTlRFWFR8RVhFQ19JTkZPX1NWTV9GSU5FX0dSQUlOX1NZU1RFTXxFWEVDX0lORk9fU1ZNX1BUUlN8RlVOQ1RJT05fTkFNRXxHTE9CQUxfV09SS19TSVpFfExPQ0FMX01FTV9TSVpFfExPQ0FMX1NJWkVfRk9SX1NVQl9HUk9VUF9DT1VOVHxNQVhfTlVNX1NVQl9HUk9VUFN8TUFYX1NVQl9HUk9VUF9TSVpFX0ZPUl9ORFJBTkdFfE5VTV9BUkdTfFBSRUZFUlJFRF9XT1JLX0dST1VQX1NJWkVfTVVMVElQTEV8UFJJVkFURV9NRU1fU0laRXxQUk9HUkFNfFJFRkVSRU5DRV9DT1VOVHxTVUJfR1JPVVBfQ09VTlRfRk9SX05EUkFOR0V8V09SS19HUk9VUF9TSVpFKXxMSU5LRVJfTk9UX0FWQUlMQUJMRXxMSU5LX1BST0dSQU1fRkFJTFVSRXxMT0NBTHxMVU1JTkFOQ0V8TUFQXyg/OkZBSUxVUkV8UkVBRHxXUklURXxXUklURV9JTlZBTElEQVRFX1JFR0lPTil8TUVNXyg/OkFMTE9DX0hPU1RfUFRSfEFTU09DSUFURURfTUVNT0JKRUNUfENPTlRFWFR8Q09QWV9IT1NUX1BUUnxDT1BZX09WRVJMQVB8RkxBR1N8SE9TVF9OT19BQ0NFU1N8SE9TVF9QVFJ8SE9TVF9SRUFEX09OTFl8SE9TVF9XUklURV9PTkxZfEtFUk5FTF9SRUFEX0FORF9XUklURXxNQVBfQ09VTlR8T0JKRUNUXyg/OkFMTE9DQVRJT05fRkFJTFVSRXxCVUZGRVJ8SU1BR0UxRHxJTUFHRTFEX0FSUkFZfElNQUdFMURfQlVGRkVSfElNQUdFMkR8SU1BR0UyRF9BUlJBWXxJTUFHRTNEfFBJUEUpfE9GRlNFVHxSRUFEX09OTFl8UkVBRF9XUklURXxSRUZFUkVOQ0VfQ09VTlR8U0laRXxTVk1fQVRPTUlDU3xTVk1fRklORV9HUkFJTl9CVUZGRVJ8VFlQRXxVU0VTX1NWTV9QT0lOVEVSfFVTRV9IT1NUX1BUUnxXUklURV9PTkxZKXxNSUdSQVRFX01FTV9PQkpFQ1RfKD86Q09OVEVOVF9VTkRFRklORUR8SE9TVCl8TUlTQUxJR05FRF9TVUJfQlVGRkVSX09GRlNFVHxOT05FfE5PTl9CTE9DS0lOR3xPVVRfT0ZfKD86SE9TVF9NRU1PUll8UkVTT1VSQ0VTKXxQSVBFXyg/Ok1BWF9QQUNLRVRTfFBBQ0tFVF9TSVpFKXxQTEFURk9STV8oPzpFWFRFTlNJT05TfEhPU1RfVElNRVJfUkVTT0xVVElPTnxOQU1FfFBST0ZJTEV8VkVORE9SfFZFUlNJT04pfFBST0ZJTElOR18oPzpDT01NQU5EXyg/OkNPTVBMRVRFfEVORHxRVUVVRUR8U1RBUlR8U1VCTUlUKXxJTkZPX05PVF9BVkFJTEFCTEUpfFBST0dSQU1fKD86QklOQVJJRVN8QklOQVJZX1NJWkVTfEJJTkFSWV9UWVBFKD86X0NPTVBJTEVEX09CSkVDVHxfRVhFQ1VUQUJMRXxfTElCUkFSWXxfTk9ORSk/fEJVSUxEXyg/OkdMT0JBTF9WQVJJQUJMRV9UT1RBTF9TSVpFfExPR3xPUFRJT05TfFNUQVRVUyl8Q09OVEVYVHxERVZJQ0VTfElMfEtFUk5FTF9OQU1FU3xOVU1fREVWSUNFU3xOVU1fS0VSTkVMU3xSRUZFUkVOQ0VfQ09VTlR8U09VUkNFKXxRVUVVRUR8UVVFVUVfKD86Q09OVEVYVHxERVZJQ0V8REVWSUNFX0RFRkFVTFR8T05fREVWSUNFfE9OX0RFVklDRV9ERUZBVUxUfE9VVF9PRl9PUkRFUl9FWEVDX01PREVfRU5BQkxFfFBST0ZJTElOR19FTkFCTEV8UFJPUEVSVElFU3xSRUZFUkVOQ0VfQ09VTlR8U0laRSl8UnxSQXxSRUFEXyg/Ok9OTFl8V1JJVEUpX0NBQ0hFfFJHfFJHQnxSR0JBfFJHQnh8Ukd4fFJVTk5JTkd8Unh8U0FNUExFUl8oPzpBRERSRVNTSU5HX01PREV8Q09OVEVYVHxGSUxURVJfTU9ERXxMT0RfTUFYfExPRF9NSU58TUlQX0ZJTFRFUl9NT0RFfE5PUk1BTElaRURfQ09PUkRTfFJFRkVSRU5DRV9DT1VOVCl8KD86VU4pP1NJR05FRF9JTlQoPzo4fDE2fDMyKXxTTk9STV9JTlQoPzo4fDE2KXxTVUJNSVRURUR8U1VDQ0VTU3xVTk9STV9JTlQoPzo4fDE2fDI0fF8xMDEwMTB8XzEwMTAxMF8yKXxVTk9STV9TSE9SVF8oPzo1NTV8NTY1KXxWRVJTSU9OXyg/OjFfMHwxXzF8MV8yfDJfMHwyXzEpfHNCR1JBfHNSR0J8c1JHQkF8c1JHQngpXFxiLyxcblx0XHRcdGFsaWFzOiAnY29uc3RhbnQnXG5cdFx0fSxcblx0XHQvLyBFeHRyYWN0ZWQgZnJvbSBjbC5oICgyLjApIGFuZCBodHRwOi8vc3RyZWFtY29tcHV0aW5nLmV1L2Rvd25sb2Fkcy8/b3BlbmNsX2hvc3QubGFuZyAob3BlbmNsLWhvc3QpXG5cdFx0J2Z1bmN0aW9uLW9wZW5jbC1ob3N0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYmNsKD86QnVpbGRQcm9ncmFtfENsb25lS2VybmVsfENvbXBpbGVQcm9ncmFtfENyZWF0ZSg/OkJ1ZmZlcnxDb21tYW5kUXVldWUoPzpXaXRoUHJvcGVydGllcyk/fENvbnRleHR8Q29udGV4dEZyb21UeXBlfEltYWdlfEltYWdlMkR8SW1hZ2UzRHxLZXJuZWx8S2VybmVsc0luUHJvZ3JhbXxQaXBlfFByb2dyYW1XaXRoKD86QmluYXJ5fEJ1aWx0SW5LZXJuZWxzfElMfFNvdXJjZSl8U2FtcGxlcnxTYW1wbGVyV2l0aFByb3BlcnRpZXN8U3ViQnVmZmVyfFN1YkRldmljZXN8VXNlckV2ZW50KXxFbnF1ZXVlKD86KD86QmFycmllcnxNYXJrZXIpKD86V2l0aFdhaXRMaXN0KT98Q29weSg/OkJ1ZmZlcig/OlJlY3R8VG9JbWFnZSk/fEltYWdlKD86VG9CdWZmZXIpPyl8KD86RmlsbHxNYXApKD86QnVmZmVyfEltYWdlKXxNaWdyYXRlTWVtT2JqZWN0c3xORFJhbmdlS2VybmVsfE5hdGl2ZUtlcm5lbHwoPzpSZWFkfFdyaXRlKSg/OkJ1ZmZlcig/OlJlY3QpP3xJbWFnZSl8U1ZNKD86RnJlZXxNYXB8TWVtRmlsbHxNZW1jcHl8TWlncmF0ZU1lbXxVbm1hcCl8VGFza3xVbm1hcE1lbU9iamVjdHxXYWl0Rm9yRXZlbnRzKXxGaW5pc2h8Rmx1c2h8R2V0KD86Q29tbWFuZFF1ZXVlSW5mb3xDb250ZXh0SW5mb3xEZXZpY2UoPzpBbmRIb3N0VGltZXJ8SURzfEluZm8pfEV2ZW50KD86UHJvZmlsaW5nKT9JbmZvfEV4dGVuc2lvbkZ1bmN0aW9uQWRkcmVzcyg/OkZvclBsYXRmb3JtKT98SG9zdFRpbWVyfEltYWdlSW5mb3xLZXJuZWwoPzpBcmdJbmZvfEluZm98U3ViR3JvdXBJbmZvfFdvcmtHcm91cEluZm8pfE1lbU9iamVjdEluZm98UGlwZUluZm98UGxhdGZvcm0oPzpJRHN8SW5mbyl8UHJvZ3JhbSg/OkJ1aWxkKT9JbmZvfFNhbXBsZXJJbmZvfFN1cHBvcnRlZEltYWdlRm9ybWF0cyl8TGlua1Byb2dyYW18KD86UmVsZWFzZXxSZXRhaW4pKD86Q29tbWFuZFF1ZXVlfENvbnRleHR8RGV2aWNlfEV2ZW50fEtlcm5lbHxNZW1PYmplY3R8UHJvZ3JhbXxTYW1wbGVyKXxTVk0oPzpBbGxvY3xGcmVlKXxTZXQoPzpDb21tYW5kUXVldWVQcm9wZXJ0eXxEZWZhdWx0RGV2aWNlQ29tbWFuZFF1ZXVlfEV2ZW50Q2FsbGJhY2t8S2VybmVsfEtlcm5lbCg/OkFyZyg/OlNWTVBvaW50ZXIpP3xFeGVjSW5mbyl8TWVtT2JqZWN0RGVzdHJ1Y3RvckNhbGxiYWNrfFVzZXJFdmVudFN0YXR1cyl8VW5sb2FkKD86UGxhdGZvcm0pP0NvbXBpbGVyfFdhaXRGb3JFdmVudHMpXFxiLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fVxuXHR9O1xuXG5cdC8qIE9wZW5DTCBob3N0IEFQSSAqL1xuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdjJywgJ2tleXdvcmQnLCBhdHRyaWJ1dGVzKTtcblxuXHQvLyBDKysgaW5jbHVkZXMgZXZlcnl0aGluZyBmcm9tIHRoZSBPcGVuQ0wgQyBob3N0IEFQSSBwbHVzIHRoZSBjbGFzc2VzIGRlZmluZWQgaW4gY2wyLmhcblx0aWYgKFByaXNtLmxhbmd1YWdlcy5jcHApIHtcblx0XHQvLyBFeHRyYWN0ZWQgZnJvbSBkb3h5Z2VuIGNsYXNzIGxpc3QgaHR0cDovL2dpdGh1Yi5raHJvbm9zLm9yZy9PcGVuQ0wtQ0xIUFAvYW5ub3RhdGVkLmh0bWxcblx0XHRhdHRyaWJ1dGVzWyd0eXBlLW9wZW5jbC1ob3N0LWNwcCddID0ge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OkJ1ZmZlcnxCdWZmZXJHTHxCdWZmZXJSZW5kZXJHTHxDb21tYW5kUXVldWV8Q29udGV4dHxEZXZpY2V8RGV2aWNlQ29tbWFuZFF1ZXVlfEVucXVldWVBcmdzfEV2ZW50fEltYWdlfEltYWdlMUR8SW1hZ2UxREFycmF5fEltYWdlMURCdWZmZXJ8SW1hZ2UyRHxJbWFnZTJEQXJyYXl8SW1hZ2UyREdMfEltYWdlM0R8SW1hZ2UzREdMfEltYWdlRm9ybWF0fEltYWdlR0x8S2VybmVsfEtlcm5lbEZ1bmN0b3J8TG9jYWxTcGFjZUFyZ3xNZW1vcnl8TkRSYW5nZXxQaXBlfFBsYXRmb3JtfFByb2dyYW18U1ZNQWxsb2NhdG9yfFNWTVRyYWl0QXRvbWljfFNWTVRyYWl0Q29hcnNlfFNWTVRyYWl0RmluZXxTVk1UcmFpdFJlYWRPbmx5fFNWTVRyYWl0UmVhZFdyaXRlfFNWTVRyYWl0V3JpdGVPbmx5fFNhbXBsZXJ8VXNlckV2ZW50KVxcYi8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fTtcblxuXHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NwcCcsICdrZXl3b3JkJywgYXR0cmlidXRlcyk7XG5cdH1cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly9xaXNraXQuZ2l0aHViLmlvL29wZW5xYXNtL2dyYW1tYXIvaW5kZXguaHRtbFxuXG5QcmlzbS5sYW5ndWFnZXMub3BlbnFhc20gPSB7XG5cdCdjb21tZW50JzogL1xcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5cXHRdKlwifCdbXidcXHJcXG5cXHRdKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OkNYfE9QRU5RQVNNfFV8YmFycmllcnxib3hhc3xib3h0b3xicmVha3xjb25zdHxjb250aW51ZXxjdHJsfGRlZnxkZWZjYWx8ZGVmY2FsZ3JhbW1hcnxkZWxheXxlbHNlfGVuZHxmb3J8Z2F0ZXxncGhhc2V8aWZ8aW58aW5jbHVkZXxpbnZ8a2VybmVsfGxlbmd0aG9mfGxldHxtZWFzdXJlfHBvd3xyZXNldHxyZXR1cm58cm90YXJ5fHN0cmV0Y2hpbmZ8d2hpbGUpXFxifCNwcmFnbWFcXGIvLFxuXHQnY2xhc3MtbmFtZSc6IC9cXGIoPzphbmdsZXxiaXR8Ym9vbHxjcmVnfGZpeGVkfGZsb2F0fGludHxsZW5ndGh8cXJlZ3xxdWJpdHxzdHJldGNofHVpbnQpXFxiLyxcblx0J2Z1bmN0aW9uJzogL1xcYig/OmNvc3xleHB8bG58cG9wY291bnR8cm90bHxyb3RyfHNpbnxzcXJ0fHRhbilcXGIoPz1cXHMqXFwoKS8sXG5cblx0J2NvbnN0YW50JzogL1xcYig/OmV1bGVyfHBpfHRhdSlcXGJ8XHUwM0MwfFx1RDgzNVx1REYwRnxcdTIxMDcvLFxuXHQnbnVtYmVyJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXi5cXHckXSkoPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KD86ZHR8bnN8dXN8XHUwMEI1c3xtc3xzKT8vaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8tPnw+Pj0/fDw8PT98JiZ8XFx8XFx8fFxcK1xcK3wtLXxbIT08PiZ8fl4rXFwtKi8lXT0/fEAvLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07LDouXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5xYXNtID0gUHJpc20ubGFuZ3VhZ2VzLm9wZW5xYXNtO1xuXG5QcmlzbS5sYW5ndWFnZXMub3ogPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCUuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnYXRvbSc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fSxcblx0J2tleXdvcmQnOiAvXFwkfFxcW1xcXXxcXGIoPzpffGF0fGF0dHJ8Y2FzZXxjYXRjaHxjaG9pY2V8Y2xhc3N8Y29uZHxkZWNsYXJlfGRlZmluZXxkaXN8ZWxzZSg/OmNhc2V8aWYpP3xlbmR8ZXhwb3J0fGZhaWx8ZmFsc2V8ZmVhdHxmaW5hbGx5fGZyb218ZnVufGZ1bmN0b3J8aWZ8aW1wb3J0fGlufGxvY2FsfGxvY2t8bWV0aHxuaWx8bm90fG9mfG9yfHByZXBhcmV8cHJvY3xwcm9wfHJhaXNlfHJlcXVpcmV8c2VsZnxza2lwfHRoZW58dGhyZWFkfHRydWV8dHJ5fHVuaXQpXFxiLyxcblx0J2Z1bmN0aW9uJzogW1xuXHRcdC9cXGJbYS16XVtBLVphLXpcXGRdKig/PVxcKCkvLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFx7KVtBLVpdW0EtWmEtelxcZF0qXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdudW1iZXInOiAvXFxiKD86MFtieF1bXFxkYS1mXSt8XFxkKyg/OlxcLlxcZCopPyg/OmV+P1xcZCspPylcXGJ8Jig/OlteXFxcXF18XFxcXCg/OlxcZHszfXwuKSkvaSxcblx0J3ZhcmlhYmxlJzogL2AoPzpbXmBcXFxcXXxcXFxcLikrYC8sXG5cdCdhdHRyLW5hbWUnOiAvXFxiXFx3Kyg/PVsgXFx0XSo6KD8hWzo9XSkpLyxcblx0J29wZXJhdG9yJzogLzooPzo9fDo6Pyl8PFstOj1dP3w9KD86PXw8Pzo/KXw+PT86P3xcXFxcPTo/fCEhP3xbfCMrXFwtKlxcLyx+XkBdfFxcYig/OmFuZHRoZW58ZGl2fG1vZHxvcmVsc2UpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0oKXt9Ljo7P10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucGFyaWdwID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcXFxcXFxcLiovLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQvLyBQQVJJL0dQIGRvZXMgbm90IGNhcmUgYWJvdXQgd2hpdGUgc3BhY2VzIGF0IGFsbFxuXHQvLyBzbyBsZXQncyBwcm9jZXNzIHRoZSBrZXl3b3JkcyB0byBidWlsZCBhbiBhcHByb3ByaWF0ZSByZWdleHBcblx0Ly8gKGUuZy4gXCJiICpyICplICphICprXCIsIGV0Yy4pXG5cdCdrZXl3b3JkJzogKGZ1bmN0aW9uICgpIHtcblx0XHR2YXIga2V5d29yZHMgPSBbXG5cdFx0XHQnYnJlYWtwb2ludCcsICdicmVhaycsICdkYmdfZG93bicsICdkYmdfZXJyJywgJ2RiZ191cCcsICdkYmdfeCcsXG5cdFx0XHQnZm9yY29tcG9zaXRlJywgJ2ZvcmRpdicsICdmb3JlbGwnLCAnZm9ycGFydCcsICdmb3JwcmltZScsXG5cdFx0XHQnZm9yc3RlcCcsICdmb3JzdWJncm91cCcsICdmb3J2ZWMnLCAnZm9yJywgJ2lmZXJyJywgJ2lmJyxcblx0XHRcdCdsb2NhbCcsICdteScsICduZXh0JywgJ3JldHVybicsICd1bnRpbCcsICd3aGlsZSdcblx0XHRdO1xuXHRcdGtleXdvcmRzID0ga2V5d29yZHMubWFwKGZ1bmN0aW9uIChrZXl3b3JkKSB7XG5cdFx0XHRyZXR1cm4ga2V5d29yZC5zcGxpdCgnJykuam9pbignIConKTtcblx0XHR9KS5qb2luKCd8Jyk7XG5cdFx0cmV0dXJuIFJlZ0V4cCgnXFxcXGIoPzonICsga2V5d29yZHMgKyAnKVxcXFxiJyk7XG5cdH0oKSksXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcoPzpbXFx3IF0qXFx3KT8oPz0gKlxcKCkvLFxuXHQnbnVtYmVyJzoge1xuXHRcdC8vIFRoZSBsb29rYmVoaW5kIGFuZCB0aGUgbmVnYXRpdmUgbG9va2FoZWFkIHByZXZlbnQgZnJvbSBicmVha2luZyB0aGUgLi4gb3BlcmF0b3Jcblx0XHRwYXR0ZXJuOiAvKCg/OlxcLiAqXFwuICopPykoPzpcXGJcXGQoPzogKlxcZCkqKD86ICooPyFcXC4gKlxcLilcXC4oPzogKlxcZCkqKT98XFwuICpcXGQoPzogKlxcZCkqKSg/OiAqZSAqKD86WystXSAqKT9cXGQoPzogKlxcZCkqKT8vaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC9cXC4gKlxcLnxbKlxcLyFdKD86ICo9KT98JSg/OiAqPXwoPzogKiMpPyg/OiAqJykqKT98XFwrKD86ICpbKz1dKT98LSg/OiAqWy09Pl0pP3w8KD86ICo+fCg/OiAqPCk/KD86ICo9KT8pP3w+KD86ICo+KT8oPzogKj0pP3w9KD86ICo9KXswLDJ9fFxcXFwoPzogKlxcLyk/KD86ICo9KT98Jig/OiAqJik/fFxcfCAqXFx8fFsnI35eXS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxde30oKS4sOjt8XS9cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgcGFyc2VyID0gUHJpc20ubGFuZ3VhZ2VzLnBhcnNlciA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXl5dKSg/OlxcXig/OmNhc2V8ZXZhbHxmb3J8aWZ8c3dpdGNofHRocm93KVxcYnxAKD86QkFTRXxDTEFTU3xHRVQoPzpfREVGQVVMVCk/fE9QVElPTlN8U0VUX0RFRkFVTFR8VVNFKVxcYikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXl0pXFxCXFwkKD86XFx3K3woPz1bLntdKSkoPzooPzpcXC58Ojo/KVxcdyspKig/OlxcLnw6Oj8pPy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC58OisvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15eXSlcXEJbQF5dXFx3Kyg/Oig/OlxcLnw6Oj8pXFx3KykqKD86XFwufDo6Pyk/Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheQCkoPzpHRVRffFNFVF8pLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC58OisvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnZXNjYXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcXig/OlskXjtAKClcXFtcXF17fVwiJzpdfCNbYS1mXFxkXSopL2ksXG5cdFx0XHRhbGlhczogJ2J1aWx0aW4nXG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXSgpe307XS9cblx0fSk7XG5cblx0cGFyc2VyID0gUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncGFyc2VyJywgJ2tleXdvcmQnLCB7XG5cdFx0J3BhcnNlci1jb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHMpIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdC8vIEFsbG93IGZvciAzIGxldmVscyBvZiBkZXB0aFxuXHRcdFx0cGF0dGVybjogLyhefFteXl0pXFwoKD86W14oKV18XFwoKD86W14oKV18XFwoKD86W14oKV0pKlxcKSkqXFwpKSpcXCkvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXnxbXl5dKShbXCInXSkoPzooPyFcXDIpW15eXXxcXF5bXFxzXFxTXSkqXFwyLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzogcGFyc2VyLmtleXdvcmQsXG5cdFx0XHRcdCd2YXJpYWJsZSc6IHBhcnNlci52YXJpYWJsZSxcblx0XHRcdFx0J2Z1bmN0aW9uJzogcGFyc2VyLmZ1bmN0aW9uLFxuXHRcdFx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0XHRcdCdudW1iZXInOiAvXFxiKD86MHhbYS1mXFxkXSt8XFxkKyg/OlxcLlxcZCopPyg/OmVbKy1dP1xcZCspPylcXGIvaSxcblx0XHRcdFx0J2VzY2FwZSc6IHBhcnNlci5lc2NhcGUsXG5cdFx0XHRcdCdvcGVyYXRvcic6IC9bfisqXFwvXFxcXCVdfCEoPzpcXHxcXHw/fD0pP3wmJj98XFx8XFx8P3w9PXw8Wzw9XT98Pls+PV0/fC1bZmRdP3xcXGIoPzpkZWZ8ZXF8Z2V8Z3R8aW58aXN8bGV8bHR8bmUpXFxiLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcGFyc2VyLnB1bmN0dWF0aW9uXG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAncHVuY3R1YXRpb24nLCB7XG5cdFx0J2V4cHJlc3Npb24nOiBwYXJzZXIuZXhwcmVzc2lvbixcblx0XHQna2V5d29yZCc6IHBhcnNlci5rZXl3b3JkLFxuXHRcdCd2YXJpYWJsZSc6IHBhcnNlci52YXJpYWJsZSxcblx0XHQnZnVuY3Rpb24nOiBwYXJzZXIuZnVuY3Rpb24sXG5cdFx0J2VzY2FwZSc6IHBhcnNlci5lc2NhcGUsXG5cdFx0J3BhcnNlci1wdW5jdHVhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IHBhcnNlci5wdW5jdHVhdGlvbixcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9LCBwYXJzZXJbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddKTtcblxufShQcmlzbSkpO1xuXG4vLyBCYXNlZCBvbiBGcmVlIFBhc2NhbFxuXG4vKiBUT0RPXG5cdFN1cHBvcnQgaW5saW5lIGFzbSA/XG4qL1xuXG5QcmlzbS5sYW5ndWFnZXMucGFzY2FsID0ge1xuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC9cXHtcXCRbXFxzXFxTXSo/XFx9Lyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6IFsnbWFyY28nLCAncHJvcGVydHknXVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwoXFwqW1xcc1xcU10qP1xcKlxcKXxcXHtbXFxzXFxTXSo/XFx9fFxcL1xcLy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86Jyg/OicnfFteJ1xcclxcbl0pKicoPyEnKXwjWyYkJV0/W2EtZlxcZF0rKSt8XFxeW2Etel0vaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2FzbSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYmFzbVxcYilbXFxzXFxTXSs/KD89XFxiZW5kXFxzKls7W10pL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHR9LFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHQvLyBUdXJibyBQYXNjYWxcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmFic29sdXRlfGFycmF5fGFzbXxiZWdpbnxjYXNlfGNvbnN0fGNvbnN0cnVjdG9yfGRlc3RydWN0b3J8ZG98ZG93bnRvfGVsc2V8ZW5kfGZpbGV8Zm9yfGZ1bmN0aW9ufGdvdG98aWZ8aW1wbGVtZW50YXRpb258aW5oZXJpdGVkfGlubGluZXxpbnRlcmZhY2V8bGFiZWx8bmlsfG9iamVjdHxvZnxvcGVyYXRvcnxwYWNrZWR8cHJvY2VkdXJlfHByb2dyYW18cmVjb3JkfHJlaW50cm9kdWNlfHJlcGVhdHxzZWxmfHNldHxzdHJpbmd8dGhlbnx0b3x0eXBlfHVuaXR8dW50aWx8dXNlc3x2YXJ8d2hpbGV8d2l0aClcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIEZyZWUgUGFzY2FsXG5cdFx0XHRwYXR0ZXJuOiAvKF58W14mXSlcXGIoPzpkaXNwb3NlfGV4aXR8ZmFsc2V8bmV3fHRydWUpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHQvLyBPYmplY3QgUGFzY2FsXG5cdFx0XHRwYXR0ZXJuOiAvKF58W14mXSlcXGIoPzpjbGFzc3xkaXNwaW50ZXJmYWNlfGV4Y2VwdHxleHBvcnRzfGZpbmFsaXphdGlvbnxmaW5hbGx5fGluaXRpYWxpemF0aW9ufGlubGluZXxsaWJyYXJ5fG9ufG91dHxwYWNrZWR8cHJvcGVydHl8cmFpc2V8cmVzb3VyY2VzdHJpbmd8dGhyZWFkdmFyfHRyeSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIE1vZGlmaWVyc1xuXHRcdFx0cGF0dGVybjogLyhefFteJl0pXFxiKD86YWJzb2x1dGV8YWJzdHJhY3R8YWxpYXN8YXNzZW1ibGVyfGJpdHBhY2tlZHxicmVha3xjZGVjbHxjb250aW51ZXxjcHBkZWNsfGN2YXJ8ZGVmYXVsdHxkZXByZWNhdGVkfGR5bmFtaWN8ZW51bWVyYXRvcnxleHBlcmltZW50YWx8ZXhwb3J0fGV4dGVybmFsfGZhcnxmYXIxNnxmb3J3YXJkfGdlbmVyaWN8aGVscGVyfGltcGxlbWVudHN8aW5kZXh8aW50ZXJydXB0fGlvY2hlY2tzfGxvY2FsfG1lc3NhZ2V8bmFtZXxuZWFyfG5vZGVmYXVsdHxub3JldHVybnxub3N0YWNrZnJhbWV8b2xkZnBjY2FsbHxvdGhlcndpc2V8b3ZlcmxvYWR8b3ZlcnJpZGV8cGFzY2FsfHBsYXRmb3JtfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xwdWJsaXNoZWR8cmVhZHxyZWdpc3RlcnxyZWludHJvZHVjZXxyZXN1bHR8c2FmZWNhbGx8c2F2ZXJlZ2lzdGVyc3xzb2Z0ZmxvYXR8c3BlY2lhbGl6ZXxzdGF0aWN8c3RkY2FsbHxzdG9yZWR8c3RyaWN0fHVuYWxpZ25lZHx1bmltcGxlbWVudGVkfHZhcmFyZ3N8dmlydHVhbHx3cml0ZSlcXGIvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdudW1iZXInOiBbXG5cdFx0Ly8gSGV4YWRlY2ltYWwsIG9jdGFsIGFuZCBiaW5hcnlcblx0XHQvKD86WyYlXVxcZCt8XFwkW2EtZlxcZF0rKS9pLFxuXHRcdC8vIERlY2ltYWxcblx0XHQvXFxiXFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspPy9pXG5cdF0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHQvXFwuXFwufFxcKlxcKnw6PXw8Wzw9Pl0/fD5bPj1dP3xbK1xcLSpcXC9dPT98W0BePV0vLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmFuZHxhc3xkaXZ8ZXhjbHVkZXxpbnxpbmNsdWRlfGlzfG1vZHxub3R8b3J8c2hsfHNocnx4b3IpXFxiLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9cXChcXC58XFwuXFwpfFsoKVxcW1xcXTo7LC5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBhc2NhbC5hc20uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgncGFzY2FsJywge1xuXHQnYXNtJzogdW5kZWZpbmVkLFxuXHQna2V5d29yZCc6IHVuZGVmaW5lZCxcblx0J29wZXJhdG9yJzogdW5kZWZpbmVkXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLm9iamVjdHBhc2NhbCA9IFByaXNtLmxhbmd1YWdlcy5wYXNjYWw7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBQYXNjYWxpZ28gaXMgYSBsYXllciAyIHNtYXJ0IGNvbnRyYWN0IGxhbmd1YWdlIGZvciB0aGUgdGV6b3MgYmxvY2tjaGFpblxuXG5cdHZhciBicmFjZXMgPSAvXFwoKD86W14oKV18XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkpKlxcKS8uc291cmNlO1xuXHR2YXIgdHlwZSA9IC8oPzpcXGJcXHcrKD86PGJyYWNlcz4pP3w8YnJhY2VzPikvLnNvdXJjZS5yZXBsYWNlKC88YnJhY2VzPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBicmFjZXM7IH0pO1xuXG5cdHZhciBwYXNjYWxpZ28gPSBQcmlzbS5sYW5ndWFnZXMucGFzY2FsaWdvID0ge1xuXHRcdCdjb21tZW50JzogL1xcKFxcKltcXHNcXFNdKz9cXCpcXCl8XFwvXFwvLiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxcXF5bYS16XS9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXFxidHlwZVxccytcXHcrXFxzK2lzXFxzKyk8dHlwZT4vLnNvdXJjZS5yZXBsYWNlKC88dHlwZT4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gdHlwZTsgfSksICdpJyksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvPHR5cGU+KD89XFxzK2lzXFxiKS8uc291cmNlLnJlcGxhY2UoLzx0eXBlPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiB0eXBlOyB9KSwgJ2knKSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlxccyopPHR5cGU+Ly5zb3VyY2UucmVwbGFjZSgvPHR5cGU+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHR5cGU7IH0pKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W14mXSlcXGIoPzpiZWdpbnxibG9ja3xjYXNlfGNvbnN0fGVsc2V8ZW5kfGZhaWx8Zm9yfGZyb218ZnVuY3Rpb258aWZ8aXN8bmlsfG9mfHJlbW92ZXxyZXR1cm58c2tpcHx0aGVufHR5cGV8dmFyfHdoaWxlfHdpdGgpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OkZhbHNlfFRydWUpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXiZdKVxcYig/OmJvb2x8aW50fGxpc3R8bWFwfG5hdHxyZWNvcmR8c3RyaW5nfHVuaXQpXFxiL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxccypcXCgpLyxcblx0XHQnbnVtYmVyJzogW1xuXHRcdFx0Ly8gSGV4YWRlY2ltYWwsIG9jdGFsIGFuZCBiaW5hcnlcblx0XHRcdC8lWzAxXSt8JlswLTddK3xcXCRbYS1mXFxkXSsvaSxcblx0XHRcdC8vIERlY2ltYWxcblx0XHRcdC9cXGJcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/KD86bXR6fG4pPy9pXG5cdFx0XSxcblx0XHQnb3BlcmF0b3InOiAvLT58PVxcLz18XFwuXFwufFxcKlxcKnw6PXw8Wzw9Pl0/fD5bPj1dP3xbK1xcLSpcXC9dPT98W0BePXxdfFxcYig/OmFuZHxtb2R8b3IpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvXFwoXFwufFxcLlxcKXxbKClcXFtcXF06Oywue31dL1xuXHR9O1xuXG5cdHZhciBjbGFzc05hbWVJbnNpZGUgPSBbJ2NvbW1lbnQnLCAna2V5d29yZCcsICdidWlsdGluJywgJ29wZXJhdG9yJywgJ3B1bmN0dWF0aW9uJ10ucmVkdWNlKGZ1bmN0aW9uIChhY2N1bSwga2V5KSB7XG5cdFx0YWNjdW1ba2V5XSA9IHBhc2NhbGlnb1trZXldO1xuXHRcdHJldHVybiBhY2N1bTtcblx0fSwge30pO1xuXG5cdHBhc2NhbGlnb1snY2xhc3MtbmFtZSddLmZvckVhY2goZnVuY3Rpb24gKHApIHtcblx0XHRwLmluc2lkZSA9IGNsYXNzTmFtZUluc2lkZTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBzbCA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cXFxcXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3N5bWJvbCc6IC9cXFxcW250cmJBLVpcIlxcXFxdL1xuXHRcdH1cblx0fSxcblx0J2hlcmVkb2Mtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC88PDwoW2EtekEtWl9dXFx3KilbXFxyXFxuXSg/Oi4qW1xcclxcbl0pKj9cXDFcXGIvLFxuXHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86X19tdWx0aXxfX3NpbmdsZXxjYXNlfGRlZmF1bHR8ZG98ZWxzZXxlbHNpZnxleGl0fGV4cG9ydHxmb3J8Zm9yZWFjaHxmdW5jdGlvbnxpZnxsYXN0fGxpbmV8bG9jYWx8bmV4dHxyZXF1aXJlc3xyZXR1cm58c3dpdGNofHVudGlsfHdoaWxlfHdvcmQpXFxiLyxcblx0J2NvbnN0YW50JzogL1xcYig/OkFMQVJNfENIQVJUX0FERF9HUkFQSHxDSEFSVF9ERUxFVEVfR1JBUEh8Q0hBUlRfREVTVFJPWXxDSEFSVF9MT0FEfENIQVJUX1BSSU5UfEVPRnxPRkZMSU5FfE9LfFBTTF9QUk9GX0xPR3xSX0NIRUNLX0hPUklafFJfQ0hFQ0tfVkVSVHxSX0NMSUNLRVJ8Ul9DT0xVTU58Ul9GUkFNRXxSX0lDT058Ul9MQUJFTHxSX0xBQkVMX0NFTlRFUnxSX0xJU1RfTVVMVElQTEV8Ul9MSVNUX01VTFRJUExFX05EfFJfTElTVF9TSU5HTEV8Ul9MSVNUX1NJTkdMRV9ORHxSX01FTlV8Ul9QT1BVUHxSX1BPUFVQX1NDUk9MTEVEfFJfUkFESU9fSE9SSVp8Ul9SQURJT19WRVJUfFJfUk9XfFJfU0NBTEVfSE9SSVp8Ul9TQ0FMRV9WRVJUfFJfU0VQX0hPUklafFJfU0VQX1ZFUlR8Ul9TUElOTkVSfFJfVEVYVF9GSUVMRHxSX1RFWFRfRklFTERfTEFCRUx8Ul9UT0dHTEV8VFJJTV9MRUFESU5HfFRSSU1fTEVBRElOR19BTkRfVFJBSUxJTkd8VFJJTV9SRURVTkRBTlR8VFJJTV9UUkFJTElOR3xWT0lEfFdBUk4pXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8RmFsc2V8Tk98Tm98VFJVRXxUcnVlfFlFU3xZZXN8ZmFsc2V8bm98dHJ1ZXx5ZXMpXFxiLyxcblx0J3ZhcmlhYmxlJzogL1xcYig/OlBzbERlYnVnfGVycm5vfGV4aXRfc3RhdHVzKVxcYi8sXG5cdCdidWlsdGluJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpQc2xFeGVjdXRlfFBzbEZ1bmN0aW9uQ2FsbHxQc2xGdW5jdGlvbkV4aXN0c3xQc2xTZXRPcHRpb25zfF9zbm1wX2RlYnVnfGFjb3N8YWRkX2RpYXJ5fGFubm90YXRlfGFubm90YXRlX2dldHxhc2NpaV90b19lYmNkaWN8YXNjdGltZXxhc2lufGF0YW58YXRleGl0fGJhdGNoX3NldHxibGFja291dHxjYXR8Y2VpbHxjaGFuX2V4aXN0c3xjaGFuZ2Vfc3RhdGV8Y2xvc2V8Y29kZV9jdnR8Y29uZF9zaWduYWx8Y29uZF93YWl0fGNvbnNvbGVfdHlwZXxjb252ZXJ0X2Jhc2V8Y29udmVydF9kYXRlfGNvbnZlcnRfbG9jYWxlX2RhdGV8Y29zfGNvc2h8Y3JlYXRlfGRhdGV8ZGNnZXRfdGV4dHxkZXN0cm95fGRlc3Ryb3lfbG9ja3xkZ2V0X3RleHR8ZGlmZmVyZW5jZXxkdW1wX2hpc3R8ZWJjZGljX3RvX2FzY2lpfGVuY3J5cHR8ZXZlbnRfYXJjaGl2ZXxldmVudF9jYXRhbG9nX2dldHxldmVudF9jaGVja3xldmVudF9xdWVyeXxldmVudF9yYW5nZV9tYW5hZ2V8ZXZlbnRfcmFuZ2VfcXVlcnl8ZXZlbnRfcmVwb3J0fGV2ZW50X3NjaGVkdWxlfGV2ZW50X3RyaWdnZXJ8ZXZlbnRfdHJpZ2dlcjJ8ZXhlY3V0ZXxleGlzdHN8ZXhwfGZhYnN8ZmlsZXxmbG9vcnxmbW9kfGZvcGVufGZzZWVrfGZ0ZWxsfGZ1bGxfZGlzY292ZXJ5fGdldHxnZXRfY2hhbl9pbmZvfGdldF9yYW5nZXN8Z2V0X3RleHR8Z2V0X3ZhcnN8Z2V0ZW52fGdldGhvc3RpbmZvfGdldHBpZHxnZXRwbmFtZXxncmVwfGhpc3Rvcnl8aGlzdG9yeV9nZXRfcmV0ZW50aW9ufGluX3RyYW5zaXRpb258aW5kZXh8aW50fGludGVybmFsfGludGVyc2VjdGlvbnxpc192YXJ8aXNudW1iZXJ8am9pbnxraWxsfGxlbmd0aHxsaW5lc3xsb2NrfGxvY2tfaW5mb3xsb2d8bG9nMTB8bG9nZXxtYXRjaGxpbmV8bXNnX2NoZWNrfG1zZ19nZXRfZm9ybWF0fG1zZ19nZXRfc2V2ZXJpdHl8bXNnX3ByaW50Znxtc2dfc3ByaW50ZnxudGhhcmd8bnRoYXJnZnxudGhsaW5lfG50aGxpbmVmfG51bV9ieXRlc3xudW1fY29uc29sZXN8cGNvbmZpZ3xwb3Blbnxwb3BsaW5lc3xwb3d8cHJpbnR8cHJpbnRmfHByb2NfZXhpc3RzfHByb2Nlc3N8cmFuZG9tfHJlYWR8cmVhZGxufHJlZnJlc2hfcGFyYW1ldGVyc3xyZW1vdGVfY2hlY2t8cmVtb3RlX2Nsb3NlfHJlbW90ZV9ldmVudF9xdWVyeXxyZW1vdGVfZXZlbnRfdHJpZ2dlcnxyZW1vdGVfZmlsZV9zZW5kfHJlbW90ZV9vcGVufHJlbW92ZXxyZXBsYWNlfHJpbmRleHxzZWNfY2hlY2tfcHJpdnxzZWNfc3RvcmVfZ2V0fHNlY19zdG9yZV9zZXR8c2V0fHNldF9hbGFybV9yYW5nZXN8c2V0X2xvY2FsZXxzaGFyZXxzaW58c2luaHxzbGVlcHxzbm1wX2FnZW50X2NvbmZpZ3xzbm1wX2FnZW50X3N0YXJ0fHNubXBfYWdlbnRfc3RvcHxzbm1wX2Nsb3NlfHNubXBfY29uZmlnfHNubXBfZ2V0fHNubXBfZ2V0X25leHR8c25tcF9oX2dldHxzbm1wX2hfZ2V0X25leHR8c25tcF9oX3NldHxzbm1wX29wZW58c25tcF9zZXR8c25tcF90cmFwX2lnbm9yZXxzbm1wX3RyYXBfbGlzdGVufHNubXBfdHJhcF9yYWlzZV9zdGRfdHJhcHxzbm1wX3RyYXBfcmVjZWl2ZXxzbm1wX3RyYXBfcmVnaXN0ZXJfaW18c25tcF90cmFwX3NlbmR8c25tcF93YWxrfHNvcGVufHNvcnR8c3BsaXRsaW5lfHNwcmludGZ8c3FydHxzcmFuZG9tfHN0cl9yZXBlYXR8c3RyY2FzZWNtcHxzdWJzZXR8c3Vic3RyfHN5c3RlbXx0YWlsfHRhbnx0YW5ofHRleHRfZG9tYWlufHRpbWV8dG1wbmFtfHRvbG93ZXJ8dG91cHBlcnx0cmFjZV9wc2xfcHJvY2Vzc3x0cmltfHVuaW9ufHVuaXF1ZXx1bmxvY2t8dW5zZXR8dmFfYXJnfHZhX3N0YXJ0fHdyaXRlKVxcYi8sXG5cdFx0YWxpYXM6ICdidWlsdGluLWZ1bmN0aW9uJ1xuXHR9LFxuXHQnZm9yZWFjaC12YXJpYWJsZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYmZvcmVhY2hcXHMrKD86KD86XFx3K1xcYnxcIig/OlxcXFwufFteXFxcXFwiXSkqXCIpXFxzKyl7MCwyfSlbX2EtekEtWl1cXHcqKD89XFxzKlxcKCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdmdW5jdGlvbic6IC9cXGJbX2Etel1cXHcqXFxiKD89XFxzKlxcKCkvaSxcblx0J251bWJlcic6IC9cXGIoPzoweFswLTlhLWZdK3xcXGQrKD86XFwuXFxkKyk/KVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvLS18XFwrXFwrfCYmPT98XFx8XFx8PT98PDw9P3w+Pj0/fFs9IV1+fFstKyovJSZ8XiE9PD5dPT98XFwufFs6P10vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF07LF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucGNheGlzID0ge1xuXHQnc3RyaW5nJzogL1wiW15cIl0qXCIvLFxuXHQna2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58OylcXHMqKVstQS1aXFxkXSsoPzpcXHMqXFxbWy1cXHddK1xcXSk/KD86XFxzKlxcKFwiW15cIl0qXCIoPzosXFxzKlwiW15cIl0qXCIpKlxcKSk/KD89XFxzKj0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL15bLUEtWlxcZF0rLyxcblx0XHRcdCdsYW5ndWFnZSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKilcXFtbLVxcd10rXFxdLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdJC8sXG5cdFx0XHRcdFx0J3Byb3BlcnR5JzogL1stXFx3XSsvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnc3ViLWtleSc6IHtcblx0XHRcdFx0cGF0dGVybjogL14oXFxzKilcXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncGFyYW1ldGVyJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFwofFxcKSR8LC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J29wZXJhdG9yJzogLz0vLFxuXHQndGxpc3QnOiB7XG5cdFx0cGF0dGVybjogL1RMSVNUXFxzKlxcKFxccypcXHcrKD86KD86XFxzKixcXHMqXCJbXlwiXSpcIikrfFxccyosXFxzKlwiW15cIl0qXCItXCJbXlwiXSpcIik/XFxzKlxcKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2Z1bmN0aW9uJzogL15UTElTVC8sXG5cdFx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eKFxccypcXChcXHMqKVxcdysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9cIlteXCJdKlwiLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS8sXG5cdFx0XHQnb3BlcmF0b3InOiAvLS9cblx0XHR9XG5cdH0sXG5cdCdwdW5jdHVhdGlvbic6IC9bOyxdLyxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcZCsoPzpcXC5cXGQrKT8oPyFcXFMpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdib29sZWFuJzogL05PfFlFUy8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucHggPSBQcmlzbS5sYW5ndWFnZXMucGNheGlzO1xuXG5QcmlzbS5sYW5ndWFnZXMucGVvcGxlY29kZSA9IHtcblx0J2NvbW1lbnQnOiBSZWdFeHAoW1xuXHRcdC8vIEMtc3R5bGUgbXVsdGlsaW5lIGNvbW1lbnRzXG5cdFx0L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLnNvdXJjZSxcblx0XHQvLyBSRU0gY29tbWVudHNcblx0XHQvXFxiUkVNW147XSo7Ly5zb3VyY2UsXG5cdFx0Ly8gTmVzdGVkIDwqICo+IGNvbW1lbnRzXG5cdFx0LzxcXCooPzpbXjwqXXxcXCooPyE+KXw8KD8hXFwqKXw8XFwqKD86KD8hXFwqPilbXFxzXFxTXSkqXFwqPikqXFwqPi8uc291cmNlLFxuXHRcdC8vIC8rICsvIGNvbW1lbnRzXG5cdFx0L1xcL1xcK1tcXHNcXFNdKj9cXCtcXC8vLnNvdXJjZSxcblx0XS5qb2luKCd8JykpLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8nKD86Jyd8W14nXFxyXFxuXSkqJyg/IScpfFwiKD86XCJcInxbXlwiXFxyXFxuXSkqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvJVxcdysvLFxuXHQnZnVuY3Rpb24tZGVmaW5pdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXHctXSkoPzpmdW5jdGlvbnxtZXRob2QpXFxzKylcXHcrL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W14tXFx3XSkoPzphc3xjYXRjaHxjbGFzc3xjb21wb25lbnR8Y3JlYXRlfGV4dGVuZHN8Z2xvYmFsfGltcGxlbWVudHN8aW5zdGFuY2V8bG9jYWx8b2Z8cHJvcGVydHl8cmV0dXJucylcXHMrKVxcdysoPzo6XFx3KykqL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86L1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YWJzdHJhY3R8YWxpYXN8YXN8Y2F0Y2h8Y2xhc3N8Y29tcG9uZW50fGNvbnN0YW50fGNyZWF0ZXxkZWNsYXJlfGVsc2V8ZW5kLSg/OmNsYXNzfGV2YWx1YXRlfGZvcnxmdW5jdGlvbnxnZXR8aWZ8bWV0aG9kfHNldHx0cnl8d2hpbGUpfGV2YWx1YXRlfGV4dGVuZHN8Zm9yfGZ1bmN0aW9ufGdldHxnbG9iYWx8aWZ8aW1wbGVtZW50c3xpbXBvcnR8aW5zdGFuY2V8bGlicmFyeXxsb2NhbHxtZXRob2R8bnVsbHxvZnxvdXR8cGVvcGxlQ29kZXxwcml2YXRlfHByb2dyYW18cHJvcGVydHl8cHJvdGVjdGVkfHJlYWRvbmx5fHJlZnxyZXBlYXR8cmV0dXJucz98c2V0fHN0ZXB8dGhlbnx0aHJvd3x0b3x0cnl8dW50aWx8dmFsdWV8d2hlbig/Oi1vdGhlcik/fHdoaWxlKVxcYi9pLFxuXHQnb3BlcmF0b3Ita2V5d29yZCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YW5kfG5vdHxvcilcXGIvaSxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvW19hLXpdXFx3Kig/PVxccypcXCgpL2ksXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J29wZXJhdG9yJzogLzw+fFs8Pl09P3whPXxcXCpcXCp8Wy0rKi98PUBdLyxcblx0J3B1bmN0dWF0aW9uJzogL1s6LjssKClbXFxdXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5wY29kZSA9IFByaXNtLmxhbmd1YWdlcy5wZW9wbGVjb2RlO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGJyYWNrZXRzID0gLyg/OlxcKCg/OlteKClcXFxcXXxcXFxcW1xcc1xcU10pKlxcKXxcXHsoPzpbXnt9XFxcXF18XFxcXFtcXHNcXFNdKSpcXH18XFxbKD86W15bXFxdXFxcXF18XFxcXFtcXHNcXFNdKSpcXF18PCg/OltePD5cXFxcXXxcXFxcW1xcc1xcU10pKj4pLy5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnBlcmwgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIFBPRFxuXHRcdFx0XHRwYXR0ZXJuOiAvKF5cXHMqKT1cXHdbXFxzXFxTXSo/PWN1dC4qL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXCRdKSMuKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0Ly8gVE9ETyBDb3VsZCBiZSBuaWNlIHRvIGhhbmRsZSBIZXJlZG9jIHRvby5cblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdFx0L1xcYig/OnF8cXF8cXd8cXgpKD8hW2EtekEtWjAtOV0pXFxzKi8uc291cmNlICtcblx0XHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0Ly8gcS8uLi4vXG5cdFx0XHRcdFx0XHQvKFteYS16QS1aMC05XFxzeyhcXFs8XSkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBxIGEuLi5hXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0XHRcdFx0LyhbYS16QS1aMC05XSkoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMi8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBxKC4uLilcblx0XHRcdFx0XHRcdC8vIHF7Li4ufVxuXHRcdFx0XHRcdFx0Ly8gcVsuLi5dXG5cdFx0XHRcdFx0XHQvLyBxPC4uLj5cblx0XHRcdFx0XHRcdGJyYWNrZXRzLFxuXHRcdFx0XHRcdF0uam9pbignfCcpICtcblx0XHRcdFx0XHQnKSdcblx0XHRcdFx0KSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBcIi4uLlwiLCBgLi4uYFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFwifGApKD86KD8hXFwxKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDEvLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cblx0XHRcdC8vICcuLi4nXG5cdFx0XHQvLyBGSVhNRSBNdWx0aS1saW5lIHNpbmdsZS1xdW90ZWQgc3RyaW5ncyBhcmUgbm90IHN1cHBvcnRlZCBhcyB0aGV5IHdvdWxkIGJyZWFrIHZhcmlhYmxlcyBjb250YWluaW5nICdcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycoPzpbXidcXFxcXFxyXFxuXXxcXFxcLikqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3JlZ2V4JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdFx0L1xcYig/Om18cXIpKD8hW2EtekEtWjAtOV0pXFxzKi8uc291cmNlICtcblx0XHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0Ly8gbS8uLi4vXG5cdFx0XHRcdFx0XHQvKFteYS16QS1aMC05XFxzeyhcXFs8XSkoPzooPyFcXDEpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMS8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBtIGEuLi5hXG5cdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3N0cmljdFxuXHRcdFx0XHRcdFx0LyhbYS16QS1aMC05XSkoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMi8uc291cmNlLFxuXG5cdFx0XHRcdFx0XHQvLyBtKC4uLilcblx0XHRcdFx0XHRcdC8vIG17Li4ufVxuXHRcdFx0XHRcdFx0Ly8gbVsuLi5dXG5cdFx0XHRcdFx0XHQvLyBtPC4uLj5cblx0XHRcdFx0XHRcdGJyYWNrZXRzLFxuXHRcdFx0XHRcdF0uam9pbignfCcpICtcblx0XHRcdFx0XHQnKScgK1xuXHRcdFx0XHRcdC9bbXNpeHBvZHVhbG5nY10qLy5zb3VyY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUaGUgbG9va2JlaGluZHMgcHJldmVudCAtcyBmcm9tIGJyZWFraW5nXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvKF58W14tXSlcXGIoPzpzfHRyfHkpKD8hW2EtekEtWjAtOV0pXFxzKi8uc291cmNlICtcblx0XHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdFx0W1xuXHRcdFx0XHRcdFx0Ly8gcy8uLi4vLi4uL1xuXHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9zdHJpY3Rcblx0XHRcdFx0XHRcdC8oW15hLXpBLVowLTlcXHN7KFxcWzxdKSg/Oig/IVxcMilbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwyKD86KD8hXFwyKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDIvLnNvdXJjZSxcblxuXHRcdFx0XHRcdFx0Ly8gcyBhLi4uYS4uLmFcblx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0XHQvKFthLXpBLVowLTldKSg/Oig/IVxcMylbXlxcXFxdfFxcXFxbXFxzXFxTXSkqXFwzKD86KD8hXFwzKVteXFxcXF18XFxcXFtcXHNcXFNdKSpcXDMvLnNvdXJjZSxcblxuXHRcdFx0XHRcdFx0Ly8gcyguLi4pKC4uLilcblx0XHRcdFx0XHRcdC8vIHN7Li4ufXsuLi59XG5cdFx0XHRcdFx0XHQvLyBzWy4uLl1bLi4uXVxuXHRcdFx0XHRcdFx0Ly8gczwuLi4+PC4uLj5cblx0XHRcdFx0XHRcdC8vIHMoLi4uKVsuLi5dXG5cdFx0XHRcdFx0XHRicmFja2V0cyArIC9cXHMqLy5zb3VyY2UgKyBicmFja2V0cyxcblx0XHRcdFx0XHRdLmpvaW4oJ3wnKSArXG5cdFx0XHRcdFx0JyknICtcblx0XHRcdFx0XHQvW21zaXhwb2R1YWxuZ2Nlcl0qLy5zb3VyY2Vcblx0XHRcdFx0KSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyAvLi4uL1xuXHRcdFx0Ly8gVGhlIGxvb2stYWhlYWQgdHJpZXMgdG8gcHJldmVudCB0d28gZGl2aXNpb25zIG9uXG5cdFx0XHQvLyB0aGUgc2FtZSBsaW5lIGZyb20gYmVpbmcgaGlnaGxpZ2h0ZWQgYXMgcmVnZXguXG5cdFx0XHQvLyBUaGlzIGRvZXMgbm90IHN1cHBvcnQgbXVsdGktbGluZSByZWdleC5cblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcLyg/OlteXFwvXFxcXFxcclxcbl18XFxcXC4pKlxcL1ttc2l4cG9kdWFsbmdjXSooPz1cXHMqKD86JHxbXFxyXFxuLC47fSkmfFxcLSsqfjw+IT9eXXwoPzphbmR8Y21wfGVxfGdlfGd0fGxlfGx0fG5lfG5vdHxvcnx4fHhvcilcXGIpKS8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cblx0XHQvLyBGSVhNRSBOb3Qgc3VyZSBhYm91dCB0aGUgaGFuZGxpbmcgb2YgOjosICcsIGFuZCAjXG5cdFx0J3ZhcmlhYmxlJzogW1xuXHRcdFx0Ly8gJHteUE9TVE1BVENIfVxuXHRcdFx0L1smKiRAJV1cXHtcXF5bQS1aXStcXH0vLFxuXHRcdFx0Ly8gJF5WXG5cdFx0XHQvWyYqJEAlXVxcXltBLVpfXS8sXG5cdFx0XHQvLyAkey4uLn1cblx0XHRcdC9bJiokQCVdIz8oPz1cXHspLyxcblx0XHRcdC8vICRmb29cblx0XHRcdC9bJiokQCVdIz8oPzooPzo6OikqJz8oPyFcXGQpW1xcdyRdKyg/IVtcXHckXSkpKyg/Ojo6KSovLFxuXHRcdFx0Ly8gJDFcblx0XHRcdC9bJiokQCVdXFxkKy8sXG5cdFx0XHQvLyAkXywgQF8sICUhXG5cdFx0XHQvLyBUaGUgbmVnYXRpdmUgbG9va2FoZWFkIHByZXZlbnRzIGZyb20gYnJlYWtpbmcgdGhlICU9IG9wZXJhdG9yXG5cdFx0XHQvKD8hJT0pWyRAJV1bIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AW1xcXFxcXF1eX2B7fH1+XS9cblx0XHRdLFxuXHRcdCdmaWxlaGFuZGxlJzoge1xuXHRcdFx0Ly8gPD4sIDxGT08+LCBfXG5cdFx0XHRwYXR0ZXJuOiAvPCg/IVs8PV0pXFxTKj8+fFxcYl9cXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQndi1zdHJpbmcnOiB7XG5cdFx0XHQvLyB2MS4yLCAxLjIuM1xuXHRcdFx0cGF0dGVybjogL3ZcXGQrKD86XFwuXFxkKykqfFxcZCsoPzpcXC5cXGQrKXsyLH0vLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0fSxcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYnN1YlsgXFx0XSspXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IC9cXGIoPzphbnl8YnJlYWt8Y29udGludWV8ZGVmYXVsdHxkZWxldGV8ZGllfGRvfGVsc2V8ZWxzaWZ8ZXZhbHxmb3J8Zm9yZWFjaHxnaXZlbnxnb3RvfGlmfGxhc3R8bG9jYWx8bXl8bmV4dHxvdXJ8cGFja2FnZXxwcmludHxyZWRvfHJlcXVpcmV8cmV0dXJufHNheXxzdGF0ZXxzdWJ8c3dpdGNofHVuZGVmfHVubGVzc3x1bnRpbHx1c2V8d2hlbnx3aGlsZSlcXGIvLFxuXHRcdCdudW1iZXInOiAvXFxiKD86MHhbXFxkQS1GYS1mXSg/Ol8/W1xcZEEtRmEtZl0pKnwwYlswMV0oPzpfP1swMV0pKnwoPzooPzpcXGQoPzpfP1xcZCkqKT9cXC4pP1xcZCg/Ol8/XFxkKSooPzpbRWVdWystXT9cXGQrKT8pXFxiLyxcblx0XHQnb3BlcmF0b3InOiAvLVtyd3hvUldYT2V6c2ZkbHBTYmN0dWdrVEJNQUNdXFxifFxcK1srPV0/fC1bLT0+XT98XFwqXFwqPz0/fFxcL1xcLz89P3w9Wz1+Pl0/fH5bfj1dP3xcXHxcXHw/PT98JiY/PT98PCg/Oj0+P3w8PT8pP3w+Pj89P3whW349XT98WyVeXT0/fFxcLig/Oj18XFwuXFwuPyk/fFtcXFxcP118XFxieCg/Oj18XFxiKXxcXGIoPzphbmR8Y21wfGVxfGdlfGd0fGxlfGx0fG5lfG5vdHxvcnx4b3IpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSw6XS9cblx0fTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHR5cGVFeHByZXNzaW9uID0gLyg/OlxcYlthLXpBLVpdXFx3KnxbfFxcXFxbXFxdXSkrLy5zb3VyY2U7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnBocGRvYyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmFkb2NsaWtlJywge1xuXHRcdCdwYXJhbWV0ZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJyhAKD86Z2xvYmFsfHBhcmFtfHByb3BlcnR5KD86LXJlYWR8LXdyaXRlKT98dmFyKVxcXFxzKyg/OicgKyB0eXBlRXhwcmVzc2lvbiArICdcXFxccyspPylcXFxcJFxcXFx3KycpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncGhwZG9jJywgJ2tleXdvcmQnLCB7XG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnKEAoPzpnbG9iYWx8cGFja2FnZXxwYXJhbXxwcm9wZXJ0eSg/Oi1yZWFkfC13cml0ZSk/fHJldHVybnxzdWJwYWNrYWdlfHRocm93c3x2YXIpXFxcXHMrKScgKyB0eXBlRXhwcmVzc2lvbiksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmFycmF5fGJvb2x8Ym9vbGVhbnxjYWxsYmFja3xkb3VibGV8ZmFsc2V8ZmxvYXR8aW50fGludGVnZXJ8bWl4ZWR8bnVsbHxvYmplY3R8cmVzb3VyY2V8c2VsZnxzdHJpbmd8dHJ1ZXx2b2lkKVxcYi8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1t8XFxcXFtcXF0oKV0vXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuamF2YWRvY2xpa2UuYWRkU3VwcG9ydCgncGhwJywgUHJpc20ubGFuZ3VhZ2VzLnBocGRvYyk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncGhwJywgJ3ZhcmlhYmxlJywge1xuXHQndGhpcyc6IHtcblx0XHRwYXR0ZXJuOiAvXFwkdGhpc1xcYi8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZ2xvYmFsJzogL1xcJCg/OkdMT0JBTFN8SFRUUF9SQVdfUE9TVF9EQVRBfF8oPzpDT09LSUV8RU5WfEZJTEVTfEdFVHxQT1NUfFJFUVVFU1R8U0VSVkVSfFNFU1NJT04pfGFyZ2N8YXJndnxodHRwX3Jlc3BvbnNlX2hlYWRlcnxwaHBfZXJyb3Jtc2cpXFxiLyxcblx0J3Njb3BlJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbXFx3XFxcXF0rOjovLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXFxiKD86cGFyZW50fHNlbGZ8c3RhdGljKVxcYi8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvOjp8XFxcXC9cblx0XHR9XG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciB2YXJpYWJsZSA9IC9cXCRcXHcrfCVbYS16XSslLztcblxuXHR2YXIgYXJyb3dBdHRyID0gL1xcW1teW1xcXV0qXFxdLy5zb3VyY2U7XG5cdHZhciBhcnJvd0RpcmVjdGlvbiA9IC8oPzpbZHJsdV18ZG98ZG93bnxsZXxsZWZ0fHJpfHJpZ2h0fHVwKS8uc291cmNlO1xuXHR2YXIgYXJyb3dCb2R5ID0gJyg/Oi0rJyArIGFycm93RGlyZWN0aW9uICsgJy0rfFxcXFwuKycgKyBhcnJvd0RpcmVjdGlvbiArICdcXFxcLit8LSsoPzonICsgYXJyb3dBdHRyICsgJy0qKT98JyArIGFycm93QXR0ciArICctK3xcXFxcLisoPzonICsgYXJyb3dBdHRyICsgJ1xcXFwuKik/fCcgKyBhcnJvd0F0dHIgKyAnXFxcXC4rKSc7XG5cdHZhciBhcnJvd0xlZnQgPSAvKD86PHsxLDJ9fFxcL3sxLDJ9fFxcXFx7MSwyfXw8XFx8fFsjKl4rfXhvXSkvLnNvdXJjZTtcblx0dmFyIGFycm93UmlnaHQgPSAvKD86PnsxLDJ9fFxcL3sxLDJ9fFxcXFx7MSwyfXxcXHw+fFsjKl4re3hvXSkvLnNvdXJjZTtcblx0dmFyIGFycm93UHJlZml4ID0gL1tbP10/W294XT8vLnNvdXJjZTtcblx0dmFyIGFycm93U3VmZml4ID0gL1tveF0/W1xcXT9dPy8uc291cmNlO1xuXHR2YXIgYXJyb3cgPVxuXHRcdGFycm93UHJlZml4ICtcblx0XHQnKD86JyArXG5cdFx0YXJyb3dCb2R5ICsgYXJyb3dSaWdodCArXG5cdFx0J3wnICtcblx0XHRhcnJvd0xlZnQgKyBhcnJvd0JvZHkgKyAnKD86JyArIGFycm93UmlnaHQgKyAnKT8nICtcblx0XHQnKScgK1xuXHRcdGFycm93U3VmZml4O1xuXG5cdFByaXNtLmxhbmd1YWdlc1sncGxhbnQtdW1sJ10gPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSg/OicuKnxcXC8nW1xcc1xcU10qPydcXC8pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQncHJlcHJvY2Vzc29yJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikhLiovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopQCg/OmVuZHxzdGFydCl1bWxcXGIvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cblx0XHQnYXJyb3cnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFteLS48Pj98XFxcXFtcXF1veF0pLy5zb3VyY2UgKyBhcnJvdyArIC8oPyFbLS48Pj98XFxcXFxcXW94XSkvLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcicsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhcXFspW15bXFxdXSsoPz1cXF0pLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcWyg/PSR8XFxdKXxeXFxdL1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQndGV4dCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxbWyBcXHRdKltcXHJcXG5dKyg/IVtcXHJcXG5dKSlbXlxcXV0qKD89XFxdKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0fSxcblxuXHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSg/OmFic3RyYWN0XFxzK2NsYXNzfGVuZFxccysoPzpib3h8Zm9ya3xncm91cHxtZXJnZXxub3RlfHJlZnxzcGxpdHx0aXRsZSl8KD86Zm9ya3xzcGxpdCkoPzpcXHMrYWdhaW4pP3xhY3RpdmF0ZXxhY3RvcnxhZ2VudHxhbHR8YW5ub3RhdGlvbnxhcnRpZmFjdHxhdXRvYWN0aXZhdGV8YXV0b251bWJlcnxiYWNrd2FyZHxiaW5hcnl8Ym91bmRhcnl8Ym94fGJyZWFrfGNhcHRpb258Y2FyZHxjYXNlfGNpcmNsZXxjbGFzc3xjbG9ja3xjbG91ZHxjb2xsZWN0aW9uc3xjb21wb25lbnR8Y29uY2lzZXxjb250cm9sfGNyZWF0ZXxjcml0aWNhbHxkYXRhYmFzZXxkZWFjdGl2YXRlfGRlc3Ryb3l8ZGV0YWNofGRpYW1vbmR8ZWxzZXxlbHNlaWZ8ZW5kfGVuZFtocl1ub3RlfGVuZGlmfGVuZHN3aXRjaHxlbmR3aGlsZXxlbnRpdHl8ZW51bXxmaWxlfGZvbGRlcnxmb290ZXJ8ZnJhbWV8Z3JvdXB8W2hyXT9ub3RlfGhlYWRlcnxoZXhhZ29ufGhpZGV8aWZ8aW50ZXJmYWNlfGxhYmVsfGxlZ2VuZHxsb29wfG1hcHxuYW1lc3BhY2V8bmV0d29ya3xuZXdwYWdlfG5vZGV8bndkaWFnfG9iamVjdHxvcHR8cGFja2FnZXxwYWdlfHBhcnxwYXJ0aWNpcGFudHxwZXJzb258cXVldWV8cmVjdGFuZ2xlfHJlZnxyZW1vdmV8cmVwZWF0fHJlc3RvcmV8cmV0dXJufHJvYnVzdHxzY2FsZXxzZXR8c2hvd3xza2lucGFyYW18c3RhY2t8c3RhcnR8c3RhdGV8c3RvcHxzdG9yYWdlfHN3aXRjaHx0aXRsZXx0b2dldGhlcnx1c2VjYXNlfHVzZWNhc2VcXC98d2hpbGUpKD89XFxzfCQpL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzplbHNlaWZ8ZXF1YWxzfG5vdHx3aGlsZSkoPz1cXHMqXFwoKS8sXG5cdFx0XHQvXFxiKD86YXN8aXN8dGhlbilcXGIvXG5cdFx0XSxcblxuXHRcdCdkaXZpZGVyJzoge1xuXHRcdFx0cGF0dGVybjogL149PS4rPT0kL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHR9LFxuXG5cdFx0J3RpbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQCg/OlxcZCsoPzpbOi9dXFxkKyl7Mn18WystXT9cXGQrfDpbYS16XVxcdyooPzpbKy1dXFxkKyk/KVxcYi9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblxuXHRcdCdjb2xvcic6IHtcblx0XHRcdHBhdHRlcm46IC8jKD86W2Etel9dK3xbYS1mQS1GMC05XSspXFxiLyxcblx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogdmFyaWFibGUsXG5cblx0XHQncHVuY3R1YXRpb24nOiAvWzosOygpW1xcXXt9XXxcXC57M30vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydwbGFudC11bWwnXS5hcnJvdy5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXNbJ3BsYW50LXVtbCddO1xuXG5cdFByaXNtLmxhbmd1YWdlc1sncGxhbnR1bWwnXSA9IFByaXNtLmxhbmd1YWdlc1sncGxhbnQtdW1sJ107XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBsc3FsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnc3FsJywge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3wtLS4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vZW4vZGF0YWJhc2Uvb3JhY2xlL29yYWNsZS1kYXRhYmFzZS8yMS9sbnBscy9wbHNxbC1yZXNlcnZlZC13b3Jkcy1rZXl3b3Jkcy5odG1sXG5cdCdrZXl3b3JkJzogL1xcYig/OkF8QUNDRVNTSUJMRXxBRER8QUdFTlR8QUdHUkVHQVRFfEFMTHxBTFRFUnxBTkR8QU5ZfEFSUkFZfEFTfEFTQ3xBVHxBVFRSSUJVVEV8QVVUSElEfEFWR3xCRUdJTnxCRVRXRUVOfEJGSUxFX0JBU0V8QklOQVJZfEJMT0JfQkFTRXxCTE9DS3xCT0RZfEJPVEh8Qk9VTkR8QlVMS3xCWXxCWVRFfEN8Q0FMTHxDQUxMSU5HfENBU0NBREV8Q0FTRXxDSEFSfENIQVJBQ1RFUnxDSEFSU0VUfENIQVJTRVRGT1JNfENIQVJTRVRJRHxDSEFSX0JBU0V8Q0hFQ0t8Q0xPQl9CQVNFfENMT05FfENMT1NFfENMVVNURVJ8Q0xVU1RFUlN8Q09MQVVUSHxDT0xMRUNUfENPTFVNTlN8Q09NTUVOVHxDT01NSVR8Q09NTUlUVEVEfENPTVBJTEVEfENPTVBSRVNTfENPTk5FQ1R8Q09OU1RBTlR8Q09OU1RSVUNUT1J8Q09OVEVYVHxDT05USU5VRXxDT05WRVJUfENPVU5UfENSQVNIfENSRUFURXxDUkVERU5USUFMfENVUlJFTlR8Q1VSU09SfENVU1RPTURBVFVNfERBTkdMSU5HfERBVEF8REFURXxEQVRFX0JBU0V8REFZfERFQ0xBUkV8REVGQVVMVHxERUZJTkV8REVMRVRFfERFU0N8REVURVJNSU5JU1RJQ3xESVJFQ1RPUll8RElTVElOQ1R8RE9VQkxFfERST1B8RFVSQVRJT058RUxFTUVOVHxFTFNFfEVMU0lGfEVNUFRZfEVORHxFU0NBUEV8RVhDRVBUfEVYQ0VQVElPTnxFWENFUFRJT05TfEVYQ0xVU0lWRXxFWEVDVVRFfEVYSVNUU3xFWElUfEVYVEVSTkFMfEZFVENIfEZJTkFMfEZJUlNUfEZJWEVEfEZMT0FUfEZPUnxGT1JBTEx8Rk9SQ0V8RlJPTXxGVU5DVElPTnxHRU5FUkFMfEdPVE98R1JBTlR8R1JPVVB8SEFTSHxIQVZJTkd8SEVBUHxISURERU58SE9VUnxJREVOVElGSUVEfElGfElNTUVESUFURXxJTU1VVEFCTEV8SU58SU5DTFVESU5HfElOREVYfElOREVYRVN8SU5ESUNBVE9SfElORElDRVN8SU5GSU5JVEV8SU5TRVJUfElOU1RBTlRJQUJMRXxJTlR8SU5URVJGQUNFfElOVEVSU0VDVHxJTlRFUlZBTHxJTlRPfElOVkFMSURBVEV8SVN8SVNPTEFUSU9OfEpBVkF8TEFOR1VBR0V8TEFSR0V8TEVBRElOR3xMRU5HVEh8TEVWRUx8TElCUkFSWXxMSUtFfExJS0UyfExJS0U0fExJS0VDfExJTUlUfExJTUlURUR8TE9DQUx8TE9DS3xMT05HfExPT1B8TUFQfE1BWHxNQVhMRU58TUVNQkVSfE1FUkdFfE1JTnxNSU5VU3xNSU5VVEV8TU9EfE1PREV8TU9ESUZZfE1PTlRIfE1VTFRJU0VUfE1VVEFCTEV8TkFNRXxOQU58TkFUSU9OQUx8TkFUSVZFfE5DSEFSfE5FV3xOT0NPTVBSRVNTfE5PQ09QWXxOT1R8Tk9XQUlUfE5VTEx8TlVNQkVSX0JBU0V8T0JKRUNUfE9DSUNPTEx8T0NJREFURXxPQ0lEQVRFVElNRXxPQ0lEVVJBVElPTnxPQ0lJTlRFUlZBTHxPQ0lMT0JMT0NBVE9SfE9DSU5VTUJFUnxPQ0lSQVd8T0NJUkVGfE9DSVJFRkNVUlNPUnxPQ0lST1dJRHxPQ0lTVFJJTkd8T0NJVFlQRXxPRnxPTER8T058T05MWXxPUEFRVUV8T1BFTnxPUEVSQVRPUnxPUFRJT058T1J8T1JBQ0xFfE9SQURBVEF8T1JERVJ8T1JHQU5JWkFUSU9OfE9STEFOWXxPUkxWQVJZfE9USEVSU3xPVVR8T1ZFUkxBUFN8T1ZFUlJJRElOR3xQQUNLQUdFfFBBUkFMTEVMX0VOQUJMRXxQQVJBTUVURVJ8UEFSQU1FVEVSU3xQQVJFTlR8UEFSVElUSU9OfFBBU0NBTHxQRVJTSVNUQUJMRXxQSVBFfFBJUEVMSU5FRHxQTFVHR0FCTEV8UE9MWU1PUlBISUN8UFJBR01BfFBSRUNJU0lPTnxQUklPUnxQUklWQVRFfFBST0NFRFVSRXxQVUJMSUN8UkFJU0V8UkFOR0V8UkFXfFJFQUR8UkVDT1JEfFJFRnxSRUZFUkVOQ0V8UkVMSUVTX09OfFJFTXxSRU1BSU5ERVJ8UkVOQU1FfFJFU09VUkNFfFJFU1VMVHxSRVNVTFRfQ0FDSEV8UkVUVVJOfFJFVFVSTklOR3xSRVZFUlNFfFJFVk9LRXxST0xMQkFDS3xST1d8U0FNUExFfFNBVkV8U0FWRVBPSU5UfFNCMXxTQjJ8U0I0fFNFQ09ORHxTRUdNRU5UfFNFTEVDVHxTRUxGfFNFUEFSQVRFfFNFUVVFTkNFfFNFUklBTElaQUJMRXxTRVR8U0hBUkV8U0hPUlR8U0laRXxTSVpFX1R8U09NRXxTUEFSU0V8U1FMfFNRTENPREV8U1FMREFUQXxTUUxOQU1FfFNRTFNUQVRFfFNUQU5EQVJEfFNUQVJUfFNUQVRJQ3xTVERERVZ8U1RPUkVEfFNUUklOR3xTVFJVQ1R8U1RZTEV8U1VCTVVMVElTRVR8U1VCUEFSVElUSU9OfFNVQlNUSVRVVEFCTEV8U1VCVFlQRXxTVU18U1lOT05ZTXxUQUJBVVRIfFRBQkxFfFRET3xUSEV8VEhFTnxUSU1FfFRJTUVTVEFNUHxUSU1FWk9ORV9BQkJSfFRJTUVaT05FX0hPVVJ8VElNRVpPTkVfTUlOVVRFfFRJTUVaT05FX1JFR0lPTnxUT3xUUkFJTElOR3xUUkFOU0FDVElPTnxUUkFOU0FDVElPTkFMfFRSVVNURUR8VFlQRXxVQjF8VUIyfFVCNHxVTkRFUnxVTklPTnxVTklRVUV8VU5QTFVHfFVOU0lHTkVEfFVOVFJVU1RFRHxVUERBVEV8VVNFfFVTSU5HfFZBTElTVHxWQUxVRXxWQUxVRVN8VkFSSUFCTEV8VkFSSUFOQ0V8VkFSUkFZfFZBUllJTkd8VklFV3xWSUVXU3xWT0lEfFdIRU58V0hFUkV8V0hJTEV8V0lUSHxXT1JLfFdSQVBQRUR8V1JJVEV8WUVBUnxaT05FKVxcYi9pLFxuXHQvLyBodHRwczovL2RvY3Mub3JhY2xlLmNvbS9lbi9kYXRhYmFzZS9vcmFjbGUvb3JhY2xlLWRhdGFiYXNlLzIxL2xucGxzL3Bsc3FsLWxhbmd1YWdlLWZ1bmRhbWVudGFscy5odG1sI0dVSUQtOTZBNDJGN0MtN0E3MS00QjkwLTgyNTUtQ0E5QzhCRDk3MjJFXG5cdCdvcGVyYXRvcic6IC86PT98PT58Wzw+Xn4hXT18XFwuXFwufFxcfFxcfHxcXCpcXCp8Wy0rKi8lPD49QF0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncGxzcWwnLCAnb3BlcmF0b3InLCB7XG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvPDxcXHMqXFx3K1xccyo+Pi8sXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG59KTtcblxuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvcG93ZXJxdWVyeS1tL3Bvd2VyLXF1ZXJ5LW0tbGFuZ3VhZ2Utc3BlY2lmaWNhdGlvblxuXG5QcmlzbS5sYW5ndWFnZXMucG93ZXJxdWVyeSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdxdW90ZWQtaWRlbnRpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvI1wiKD86W15cIlxcclxcbl18XCJcIikqXCIoPyFcIikvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzojISk/XCIoPzpbXlwiXFxyXFxuXXxcIlwiKSpcIig/IVwiKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb25zdGFudCc6IFtcblx0XHQvXFxiRGF5XFwuKD86RnJpZGF5fE1vbmRheXxTYXR1cmRheXxTdW5kYXl8VGh1cnNkYXl8VHVlc2RheXxXZWRuZXNkYXkpXFxiLyxcblx0XHQvXFxiVHJhY2VMZXZlbFxcLig/OkNyaXRpY2FsfEVycm9yfEluZm9ybWF0aW9ufFZlcmJvc2V8V2FybmluZylcXGIvLFxuXHRcdC9cXGJPY2N1cnJlbmNlXFwuKD86QWxsfEZpcnN0fExhc3QpXFxiLyxcblx0XHQvXFxiT3JkZXJcXC4oPzpBc2NlbmRpbmd8RGVzY2VuZGluZylcXGIvLFxuXHRcdC9cXGJSb3VuZGluZ01vZGVcXC4oPzpBd2F5RnJvbVplcm98RG93bnxUb0V2ZW58VG93YXJkWmVyb3xVcClcXGIvLFxuXHRcdC9cXGJNaXNzaW5nRmllbGRcXC4oPzpFcnJvcnxJZ25vcmV8VXNlTnVsbClcXGIvLFxuXHRcdC9cXGJRdW90ZVN0eWxlXFwuKD86Q3N2fE5vbmUpXFxiLyxcblx0XHQvXFxiSm9pbktpbmRcXC4oPzpGdWxsT3V0ZXJ8SW5uZXJ8TGVmdEFudGl8TGVmdE91dGVyfFJpZ2h0QW50aXxSaWdodE91dGVyKVxcYi8sXG5cdFx0L1xcYkdyb3VwS2luZFxcLig/Okdsb2JhbHxMb2NhbClcXGIvLFxuXHRcdC9cXGJFeHRyYVZhbHVlc1xcLig/OkVycm9yfElnbm9yZXxMaXN0KVxcYi8sXG5cdFx0L1xcYkpvaW5BbGdvcml0aG1cXC4oPzpEeW5hbWljfExlZnRIYXNofExlZnRJbmRleHxQYWlyd2lzZUhhc2h8UmlnaHRIYXNofFJpZ2h0SW5kZXh8U29ydE1lcmdlKVxcYi8sXG5cdFx0L1xcYkpvaW5TaWRlXFwuKD86TGVmdHxSaWdodClcXGIvLFxuXHRcdC9cXGJQcmVjaXNpb25cXC4oPzpEZWNpbWFsfERvdWJsZSlcXGIvLFxuXHRcdC9cXGJSZWxhdGl2ZVBvc2l0aW9uXFwuRnJvbSg/OkVuZHxTdGFydClcXGIvLFxuXHRcdC9cXGJUZXh0RW5jb2RpbmdcXC4oPzpBc2NpaXxCaWdFbmRpYW5Vbmljb2RlfFVuaWNvZGV8VXRmMTZ8VXRmOHxXaW5kb3dzKVxcYi8sXG5cdFx0L1xcYig/OkFueXxCaW5hcnl8RGF0ZXxEYXRlVGltZXxEYXRlVGltZVpvbmV8RHVyYXRpb258RnVuY3Rpb258SW50MTZ8SW50MzJ8SW50NjR8SW50OHxMaXN0fExvZ2ljYWx8Tm9uZXxOdW1iZXJ8UmVjb3JkfFRhYmxlfFRleHR8VGltZSlcXC5UeXBlXFxiLyxcblx0XHQvXFxibnVsbFxcYi9cblx0XSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YXN8ZWFjaHxlbHNlfGVycm9yfGlmfGlufGlzfGxldHxtZXRhfG5vdHxudWxsYWJsZXxvcHRpb25hbHxvcnxvdGhlcndpc2V8c2VjdGlvbnxzaGFyZWR8dGhlbnx0cnl8dHlwZSlcXGJ8Iyg/OmJpbmFyeXxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lem9uZXxkdXJhdGlvbnxpbmZpbml0eXxuYW58c2VjdGlvbnN8c2hhcmVkfHRhYmxlfHRpbWUpXFxiLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXiNcXHcuXSlbYS16X11bXFx3Ll0qKD89XFxzKlxcKCkvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdkYXRhLXR5cGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmFueXxhbnlub25udWxsfGJpbmFyeXxkYXRlfGRhdGV0aW1lfGRhdGV0aW1lem9uZXxkdXJhdGlvbnxmdW5jdGlvbnxsaXN0fGxvZ2ljYWx8bm9uZXxudW1iZXJ8cmVjb3JkfHRhYmxlfHRleHR8dGltZSlcXGIvLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiMHhbXFxkYS1mXStcXGJ8KD86WystXT8oPzpcXGJcXGQrXFwuKT9cXGJcXGQrfFsrLV1cXC5cXGQrfChefFteLl0pXFxCXFwuXFxkKykoPzplWystXT9cXGQrKT9cXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC9bLSsqXFwvJj9AXl18PCg/Oj0+P3w+KT98Pj0/fD0+P3xcXC5cXC5cXC4/Lyxcblx0J3B1bmN0dWF0aW9uJzogL1ssO1xcW1xcXSgpe31dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnBxID0gUHJpc20ubGFuZ3VhZ2VzWydwb3dlcnF1ZXJ5J107XG5QcmlzbS5sYW5ndWFnZXMubXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlc1sncG93ZXJxdWVyeSddO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHBvd2Vyc2hlbGwgPSBQcmlzbS5sYW5ndWFnZXMucG93ZXJzaGVsbCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteYF0pPCNbXFxzXFxTXSo/Iz4vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15gXSkjLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnc3RyaW5nJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXCIoPzpgW1xcc1xcU118W15gXCJdKSpcIi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycoPzpbXiddfCcnKSonLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQvLyBNYXRjaGVzIG5hbWUgc3BhY2VzIGFzIHdlbGwgYXMgY2FzdHMsIGF0dHJpYnV0ZSBkZWNvcmF0b3JzLiBGb3JjZSBzdGFydGluZyB3aXRoIGxldHRlciB0byBhdm9pZCBtYXRjaGluZyBhcnJheSBpbmRpY2VzXG5cdFx0Ly8gU3VwcG9ydHMgdHdvIGxldmVscyBvZiBuZXN0ZWQgYnJhY2tldHMgKGUuZy4gYFtPdXRwdXRUeXBlKFtTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5MaXN0W2ludF1dKV1gKVxuXHRcdCduYW1lc3BhY2UnOiAvXFxbW2Etel0oPzpcXFsoPzpcXFtbXlxcXV0qXFxdfFteXFxbXFxdXSkqXFxdfFteXFxbXFxdXSkqXFxdL2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFwkKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0XHQndmFyaWFibGUnOiAvXFwkXFx3K1xcYi8sXG5cdFx0Ly8gQ21kbGV0cyBhbmQgYWxpYXNlcy4gQWxpYXNlcyBzaG91bGQgY29tZSBsYXN0LCBvdGhlcndpc2UgXCJ3cml0ZVwiIGdldHMgcHJlZmVycmVkIG92ZXIgXCJ3cml0ZS1ob3N0XCIgZm9yIGV4YW1wbGVcblx0XHQvLyBHZXQtQ29tbWFuZCB8ID97ICRfLk1vZHVsZU5hbWUgLW1hdGNoIFwiTWljcm9zb2Z0LlBvd2VyU2hlbGwuKFV0aWx8Q29yZXxNYW5hZ2VtZW50KVwiIH1cblx0XHQvLyBHZXQtQWxpYXMgfCA/eyAkXy5SZWZlcmVuY2VkQ29tbWFuZC5Nb2R1bGUuTmFtZSAtbWF0Y2ggXCJNaWNyb3NvZnQuUG93ZXJTaGVsbC4oVXRpbHxDb3JlfE1hbmFnZW1lbnQpXCIgfVxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdC9cXGIoPzpBZGR8QXBwcm92ZXxBc3NlcnR8QmFja3VwfEJsb2NrfENoZWNrcG9pbnR8Q2xlYXJ8Q2xvc2V8Q29tcGFyZXxDb21wbGV0ZXxDb21wcmVzc3xDb25maXJtfENvbm5lY3R8Q29udmVydHxDb252ZXJ0RnJvbXxDb252ZXJ0VG98Q29weXxEZWJ1Z3xEZW55fERpc2FibGV8RGlzY29ubmVjdHxEaXNtb3VudHxFZGl0fEVuYWJsZXxFbnRlcnxFeGl0fEV4cGFuZHxFeHBvcnR8RmluZHxGb3JFYWNofEZvcm1hdHxHZXR8R3JhbnR8R3JvdXB8SGlkZXxJbXBvcnR8SW5pdGlhbGl6ZXxJbnN0YWxsfEludm9rZXxKb2lufExpbWl0fExvY2t8TWVhc3VyZXxNZXJnZXxNb3ZlfE5ld3xPcGVufE9wdGltaXplfE91dHxQaW5nfFBvcHxQcm90ZWN0fFB1Ymxpc2h8UHVzaHxSZWFkfFJlY2VpdmV8UmVkb3xSZWdpc3RlcnxSZW1vdmV8UmVuYW1lfFJlcGFpcnxSZXF1ZXN0fFJlc2V0fFJlc2l6ZXxSZXNvbHZlfFJlc3RhcnR8UmVzdG9yZXxSZXN1bWV8UmV2b2tlfFNhdmV8U2VhcmNofFNlbGVjdHxTZW5kfFNldHxTaG93fFNraXB8U29ydHxTcGxpdHxTdGFydHxTdGVwfFN0b3B8U3VibWl0fFN1c3BlbmR8U3dpdGNofFN5bmN8VGVlfFRlc3R8VHJhY2V8VW5ibG9ja3xVbmRvfFVuaW5zdGFsbHxVbmxvY2t8VW5wcm90ZWN0fFVucHVibGlzaHxVbnJlZ2lzdGVyfFVwZGF0ZXxVc2V8V2FpdHxXYXRjaHxXaGVyZXxXcml0ZSktW2Etel0rXFxiL2ksXG5cdFx0XHQvXFxiKD86YWN8Y2F0fGNoZGlyfGNsY3xjbGl8Y2xwfGNsdnxjb21wYXJlfGNvcHl8Y3B8Y3BpfGNwcHxjdnBhfGRicHxkZWx8ZGlmZnxkaXJ8ZWJwfGVjaG98ZXBhbHxlcGNzdnxlcHNufGVyYXNlfGZjfGZsfGZ0fGZ3fGdhbHxnYnB8Z2N8Z2NpfGdjc3xnZHJ8Z2l8Z2x8Z218Z3B8Z3BzfGdyb3VwfGdzdnxndXxndnxnd21pfGlleHxpaXxpcGFsfGlwY3N2fGlwc258aXJtfGl3bWl8aXdyfGtpbGx8bHB8bHN8bWVhc3VyZXxtaXxtb3VudHxtb3ZlfG1wfG12fG5hbHxuZHJ8bml8bnZ8b2d2fHBvcGR8cHN8cHVzaGR8cHdkfHJicHxyZHxyZHJ8cmVufHJpfHJtfHJtZGlyfHJuaXxybnB8cnB8cnZ8cnZwYXxyd21pfHNhbHxzYXBzfHNhc3Z8c2JwfHNjfHNlbGVjdHxzZXR8c2hjbXxzaXxzbHxzbGVlcHxzbHN8c29ydHxzcHxzcHBzfHNwc3Z8c3RhcnR8c3Z8c3dtaXx0ZWV8dHJjbXx0eXBlfHdyaXRlKVxcYi9pXG5cdFx0XSxcblx0XHQvLyBwZXIgaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2hoODQ3NzQ0LmFzcHhcblx0XHQna2V5d29yZCc6IC9cXGIoPzpCZWdpbnxCcmVha3xDYXRjaHxDbGFzc3xDb250aW51ZXxEYXRhfERlZmluZXxEb3xEeW5hbWljUGFyYW18RWxzZXxFbHNlSWZ8RW5kfEV4aXR8RmlsdGVyfEZpbmFsbHl8Rm9yfEZvckVhY2h8RnJvbXxGdW5jdGlvbnxJZnxJbmxpbmVTY3JpcHR8UGFyYWxsZWx8UGFyYW18UHJvY2Vzc3xSZXR1cm58U2VxdWVuY2V8U3dpdGNofFRocm93fFRyYXB8VHJ5fFVudGlsfFVzaW5nfFZhcnxXaGlsZXxXb3JrZmxvdylcXGIvaSxcblx0XHQnb3BlcmF0b3InOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxXKSg/OiF8LSg/OmI/KD86YW5kfHg/b3IpfGFzfCg/Ok5vdCk/KD86Q29udGFpbnN8SW58TGlrZXxNYXRjaCl8ZXF8Z2V8Z3R8aXMoPzpOb3QpP3xKb2lufGxlfGx0fG5lfG5vdHxSZXBsYWNlfHNoW2xyXSlcXGJ8LVstPV0/fFxcK1srPV0/fFsqXFwvJV09PykvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bfHt9W1xcXTsoKSwuXS9cblx0fTtcblxuXHQvLyBWYXJpYWJsZSBpbnRlcnBvbGF0aW9uIGluc2lkZSBzdHJpbmdzLCBhbmQgbmVzdGVkIGV4cHJlc3Npb25zXG5cdHBvd2Vyc2hlbGwuc3RyaW5nWzBdLmluc2lkZSA9IHtcblx0XHQnZnVuY3Rpb24nOiB7XG5cdFx0XHQvLyBBbGxvdyBmb3Igb25lIGxldmVsIG9mIG5lc3Rpbmdcblx0XHRcdHBhdHRlcm46IC8oXnxbXmBdKVxcJFxcKCg/OlxcJFxcKFteXFxyXFxuKCldKlxcKXwoPyFcXCRcXCgpW15cXHJcXG4pXSkqXFwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHBvd2Vyc2hlbGxcblx0XHR9LFxuXHRcdCdib29sZWFuJzogcG93ZXJzaGVsbC5ib29sZWFuLFxuXHRcdCd2YXJpYWJsZSc6IHBvd2Vyc2hlbGwudmFyaWFibGUsXG5cdH07XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnByb2Nlc3NpbmcgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2tleXdvcmQnOiAvXFxiKD86YnJlYWt8Y2FzZXxjYXRjaHxjbGFzc3xjb250aW51ZXxkZWZhdWx0fGVsc2V8ZXh0ZW5kc3xmaW5hbHxmb3J8aWZ8aW1wbGVtZW50c3xpbXBvcnR8bmV3fG51bGx8cHJpdmF0ZXxwdWJsaWN8cmV0dXJufHN0YXRpY3xzdXBlcnxzd2l0Y2h8dGhpc3x0cnl8dm9pZHx3aGlsZSlcXGIvLFxuXHQvLyBTcGFjZXMgYXJlIGFsbG93ZWQgYmV0d2VlbiBmdW5jdGlvbiBuYW1lIGFuZCBwYXJlbnRoZXNpc1xuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxccypcXCgpLyxcblx0J29wZXJhdG9yJzogLzxbPD1dP3w+Wz49XT98JiY/fFxcfFxcfD98WyU/XXxbIT0rXFwtKlxcL109Py9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdwcm9jZXNzaW5nJywgJ251bWJlcicsIHtcblx0Ly8gU3BlY2lhbCBjYXNlOiBYTUwgaXMgYSB0eXBlXG5cdCdjb25zdGFudCc6IC9cXGIoPyFYTUxcXGIpW0EtWl1bQS1aXFxkX10rXFxiLyxcblx0J3R5cGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OmJvb2xlYW58Ynl0ZXxjaGFyfGNvbG9yfGRvdWJsZXxmbG9hdHxpbnR8W0EtWl1cXHcqKVxcYi8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLnByb2xvZyA9IHtcblx0Ly8gU3ludGF4IGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uXG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvfCUuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdC8vIERlcGVuZGluZyBvbiB0aGUgaW1wbGVtZW50YXRpb24sIHN0cmluZ3MgbWF5IGFsbG93IGVzY2FwZWQgbmV3bGluZXMgYW5kIHF1b3RlLWVzY2FwZVxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oW1wiJ10pKD86XFwxXFwxfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEoPyFcXDEpLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2J1aWx0aW4nOiAvXFxiKD86Znh8Znl8eGZbeHldP3x5Zng/KVxcYi8sXG5cdC8vIEZJWE1FOiBTaG91bGQgd2UgbGlzdCBhbGwgbnVsbC1hcnkgcHJlZGljYXRlcyAobm90IGZvbGxvd2VkIGJ5IGEgcGFyZW50aGVzaXMpIGxpa2UgaGFsdCwgdHJhY2UsIGV0Yy4/XG5cdCdmdW5jdGlvbic6IC9cXGJbYS16XVxcdyooPzooPz1cXCgpfFxcL1xcZCspLyxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKik/Lyxcblx0Ly8gQ3VzdG9tIG9wZXJhdG9ycyBhcmUgYWxsb3dlZFxuXHQnb3BlcmF0b3InOiAvWzpcXFxcPT48XFwtPypAXFwvOytefCEkLl0rfFxcYig/OmlzfG1vZHxub3R8eG9yKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXSxdL1xufTtcblxuLy8gVGhhbmtzIHRvOiBodHRwczovL2dpdGh1Yi5jb20vcHJvbWV0aGV1cy1jb21tdW5pdHkvbW9uYWNvLXByb21xbC9ibG9iL21hc3Rlci9zcmMvcHJvbXFsL3Byb21xbC50c1xuLy8gQXMgd2VsbCBhczogaHR0cHM6Ly9rYXVzYWwuY28vYmxvZy9zbGF0ZS1wcmlzbS1hZGQtbmV3LXN5bnRheC1wcm9tcWwvXG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0Ly8gUHJvbVFMIEFnZ3JlZ2F0aW9uIE9wZXJhdG9yc1xuXHQvLyAoaHR0cHM6Ly9wcm9tZXRoZXVzLmlvL2RvY3MvcHJvbWV0aGV1cy9sYXRlc3QvcXVlcnlpbmcvb3BlcmF0b3JzLyNhZ2dyZWdhdGlvbi1vcGVyYXRvcnMpXG5cdHZhciBhZ2dyZWdhdGlvbnMgPSBbXG5cdFx0J3N1bScsXG5cdFx0J21pbicsXG5cdFx0J21heCcsXG5cdFx0J2F2ZycsXG5cdFx0J2dyb3VwJyxcblx0XHQnc3RkZGV2Jyxcblx0XHQnc3RkdmFyJyxcblx0XHQnY291bnQnLFxuXHRcdCdjb3VudF92YWx1ZXMnLFxuXHRcdCdib3R0b21rJyxcblx0XHQndG9waycsXG5cdFx0J3F1YW50aWxlJ1xuXHRdO1xuXG5cdC8vIFByb21RTCB2ZWN0b3IgbWF0Y2hpbmcgKyB0aGUgYnkgYW5kIHdpdGhvdXQgY2xhdXNlc1xuXHQvLyAoaHR0cHM6Ly9wcm9tZXRoZXVzLmlvL2RvY3MvcHJvbWV0aGV1cy9sYXRlc3QvcXVlcnlpbmcvb3BlcmF0b3JzLyN2ZWN0b3ItbWF0Y2hpbmcpXG5cdHZhciB2ZWN0b3JNYXRjaGluZyA9IFtcblx0XHQnb24nLFxuXHRcdCdpZ25vcmluZycsXG5cdFx0J2dyb3VwX3JpZ2h0Jyxcblx0XHQnZ3JvdXBfbGVmdCcsXG5cdFx0J2J5Jyxcblx0XHQnd2l0aG91dCcsXG5cdF07XG5cblx0Ly8gUHJvbVFMIG9mZnNldCBtb2RpZmllclxuXHQvLyAoaHR0cHM6Ly9wcm9tZXRoZXVzLmlvL2RvY3MvcHJvbWV0aGV1cy9sYXRlc3QvcXVlcnlpbmcvYmFzaWNzLyNvZmZzZXQtbW9kaWZpZXIpXG5cdHZhciBvZmZzZXRNb2RpZmllciA9IFsnb2Zmc2V0J107XG5cblx0dmFyIGtleXdvcmRzID0gYWdncmVnYXRpb25zLmNvbmNhdCh2ZWN0b3JNYXRjaGluZywgb2Zmc2V0TW9kaWZpZXIpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5wcm9tcWwgPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKSMuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3ZlY3Rvci1tYXRjaCc6IHtcblx0XHRcdC8vIE1hdGNoIHRoZSBjb21tYS1zZXBhcmF0ZWQgbGFiZWwgbGlzdHMgaW5zaWRlIHZlY3RvciBtYXRjaGluZzpcblx0XHRcdHBhdHRlcm46IG5ldyBSZWdFeHAoJygoPzonICsgdmVjdG9yTWF0Y2hpbmcuam9pbignfCcpICsgJylcXFxccyopXFxcXChbXildKlxcXFwpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdsYWJlbC1rZXknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlteLF0rXFxiLyxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0XHRcdH0sXG5cdFx0fSxcblx0XHQnY29udGV4dC1sYWJlbHMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx7W157fV0qXFx9Lyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnbGFiZWwta2V5Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqKD89XFxzKig/Oj18IVs9fl0pKS8sXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLW5hbWUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbGFiZWwtdmFsdWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhbXCInYF0pKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDEvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnLFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFx7fFxcfXw9fj98IVs9fl18LC8sXG5cdFx0XHR9LFxuXHRcdH0sXG5cdFx0J2NvbnRleHQtcmFuZ2UnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXFtbXFx3XFxzOl0rXFxdLywgLy8gWzFtXVxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFxbfFxcXXw6Lyxcblx0XHRcdFx0XHQncmFuZ2UtZHVyYXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86XFxkKyg/OltzbWhkd3ldfG1zKSkrXFxiL2ksXG5cdFx0XHRcdFx0XHRhbGlhczogJ251bWJlcicsXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxib2Zmc2V0XFxzKylcXHcrLywgLy8gb2Zmc2V0IDFtXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdyYW5nZS1kdXJhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpcXGQrKD86W3NtaGR3eV18bXMpKStcXGIvaSxcblx0XHRcdFx0XHRcdGFsaWFzOiAnbnVtYmVyJyxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHR9LFxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdrZXl3b3JkJzogbmV3IFJlZ0V4cCgnXFxcXGIoPzonICsga2V5d29yZHMuam9pbignfCcpICsgJylcXFxcYicsICdpJyksXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pLFxuXHRcdCdudW1iZXInOiAvWy0rXT8oPzooPzpcXGJcXGQrKD86XFwuXFxkKyk/fFxcQlxcLlxcZCspKD86ZVstK10/XFxkKyk/XFxifFxcYig/OjB4WzAtOWEtZl0rfG5hbnxpbmYpXFxiKS9pLFxuXHRcdCdvcGVyYXRvcic6IC9bXFxeKi8lKy1dfD09fCE9fDw9fDx8Pj18PnxcXGIoPzphbmR8b3J8dW5sZXNzKVxcYi9pLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be307KClgLC5bXFxdXS8sXG5cdH07XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5wcm9wZXJ0aWVzID0ge1xuXHQnY29tbWVudCc6IC9eWyBcXHRdKlsjIV0uKiQvbSxcblx0J3ZhbHVlJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSooPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHM6PV0pKyg/OiAqWz06XSAqKD8hICl8ICkpKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxyXFxuXSkrL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdH0sXG5cdCdrZXknOiB7XG5cdFx0cGF0dGVybjogL15bIFxcdF0qKD86XFxcXCg/OlxcclxcbnxbXFxzXFxTXSl8W15cXFxcXFxzOj1dKSsoPz0gKls9Ol18ICkvbSxcblx0XHRhbGlhczogJ2F0dHItbmFtZSdcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1s9Ol0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGJ1aWx0aW5UeXBlcyA9IC9cXGIoPzpib29sfGJ5dGVzfGRvdWJsZXxzP2ZpeGVkKD86MzJ8NjQpfGZsb2F0fFtzdV0/aW50KD86MzJ8NjQpfHN0cmluZylcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5wcm90b2J1ZiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmVudW18ZXh0ZW5kfG1lc3NhZ2V8c2VydmljZSlcXHMrKVtBLVphLXpfXVxcdyooPz1cXHMqXFx7KS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86cnBjXFxzK1xcdyt8cmV0dXJucylcXHMqXFwoXFxzKig/OnN0cmVhbVxccyspPylcXC4/W0EtWmEtel9dXFx3Kig/OlxcLltBLVphLXpfXVxcdyopKig/PVxccypcXCkpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86ZW51bXxleHRlbmR8ZXh0ZW5zaW9uc3xpbXBvcnR8bWVzc2FnZXxvbmVvZnxvcHRpb258b3B0aW9uYWx8cGFja2FnZXxwdWJsaWN8cmVwZWF0ZWR8cmVxdWlyZWR8cmVzZXJ2ZWR8cmV0dXJuc3xycGMoPz1cXHMrXFx3KXxzZXJ2aWNlfHN0cmVhbXxzeW50YXh8dG8pXFxiKD8hXFxzKj1cXHMqXFxkKS8sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXHMqXFwoKS9pXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Byb3RvYnVmJywgJ29wZXJhdG9yJywge1xuXHRcdCdtYXAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxibWFwPFxccypbXFx3Ll0rXFxzKixcXHMqW1xcdy5dK1xccyo+KD89XFxzK1thLXpfXVxcdypcXHMqWz07XSkvaSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1s8Pi4sXS8sXG5cdFx0XHRcdCdidWlsdGluJzogYnVpbHRpblR5cGVzXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IGJ1aWx0aW5UeXBlcyxcblx0XHQncG9zaXRpb25hbC1jbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLyg/OlxcYnxcXEJcXC4pW2Etel9dXFx3Kig/OlxcLlthLXpfXVxcdyopKig/PVxccytbYS16X11cXHcqXFxzKls9O10pL2ksXG5cdFx0XHRhbGlhczogJ2NsYXNzLW5hbWUnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnYW5ub3RhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxbXFxzKilbYS16X11cXHcqKD89XFxzKj0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vIFRPRE86XG5cdC8vIC0gQWRkIENTUyBoaWdobGlnaHRpbmcgaW5zaWRlIDxzdHlsZT4gdGFnc1xuXHQvLyAtIEFkZCBzdXBwb3J0IGZvciBtdWx0aS1saW5lIGNvZGUgYmxvY2tzXG5cdC8vIC0gQWRkIHN1cHBvcnQgZm9yIGludGVycG9sYXRpb24gI3t9IGFuZCAhe31cblx0Ly8gLSBBZGQgc3VwcG9ydCBmb3IgdGFnIGludGVycG9sYXRpb24gI1tdXG5cdC8vIC0gQWRkIGV4cGxpY2l0IHN1cHBvcnQgZm9yIHBsYWluIHRleHQgdXNpbmcgfFxuXHQvLyAtIEFkZCBzdXBwb3J0IGZvciBtYXJrdXAgZW1iZWRkZWQgaW4gcGxhaW4gdGV4dFxuXG5cdFByaXNtLmxhbmd1YWdlcy5wdWcgPSB7XG5cblx0XHQvLyBNdWx0aWxpbmUgc3R1ZmYgc2hvdWxkIGFwcGVhciBiZWZvcmUgdGhlIHJlc3RcblxuXHRcdC8vIFRoaXMgaGFuZGxlcyBib3RoIHNpbmdsZS1saW5lIGFuZCBtdWx0aS1saW5lIGNvbW1lbnRzXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF4oW1xcdCBdKikpXFwvXFwvLiooPzooPzpcXHI/XFxufFxccilcXDJbXFx0IF0uKykqL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblxuXHRcdC8vIEFsbCB0aGUgdGFnLXJlbGF0ZWQgcGFydCBpcyBpbiBsb29rYmVoaW5kXG5cdFx0Ly8gc28gdGhhdCBpdCBjYW4gYmUgaGlnaGxpZ2h0ZWQgYnkgdGhlIFwidGFnXCIgcGF0dGVyblxuXHRcdCdtdWx0aWxpbmUtc2NyaXB0Jzoge1xuXHRcdFx0cGF0dGVybjogLyheKFtcXHQgXSopc2NyaXB0XFxiLipcXC5bXFx0IF0qKSg/Oig/Olxccj9cXG58XFxyKD8hXFxuKSkoPzpcXDJbXFx0IF0uK3xcXHMqPyg/PVxccj9cXG58XFxyKSkpKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXG5cdFx0Ly8gU2VlIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgZm9yIGtub3duIGZpbHRlcnNcblx0XHQnZmlsdGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyheKFtcXHQgXSopKTouKyg/Oig/Olxccj9cXG58XFxyKD8hXFxuKSkoPzpcXDJbXFx0IF0uK3xcXHMqPyg/PVxccj9cXG58XFxyKSkpKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZmlsdGVyLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL146W1xcdy1dKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3RleHQnOiAvXFxTW1xcc1xcU10qLyxcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J211bHRpbGluZS1wbGFpbi10ZXh0Jzoge1xuXHRcdFx0cGF0dGVybjogLyheKFtcXHQgXSopW1xcd1xcLSMuXStcXC5bXFx0IF0qKSg/Oig/Olxccj9cXG58XFxyKD8hXFxuKSkoPzpcXDJbXFx0IF0uK3xcXHMqPyg/PVxccj9cXG58XFxyKSkpKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J21hcmt1cCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopPC4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwXG5cdFx0fSxcblx0XHQnZG9jdHlwZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXG4pW1xcdCBdKilkb2N0eXBlKD86IC4rKT8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQvLyBUaGlzIGhhbmRsZSBhbGwgY29uZGl0aW9uYWwgYW5kIGxvb3Aga2V5d29yZHNcblx0XHQnZmxvdy1jb250cm9sJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpjYXNlfGRlZmF1bHR8ZWFjaHxlbHNlfGlmfHVubGVzc3x3aGVufHdoaWxlKVxcYig/OiAuKyk/L20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdlYWNoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eZWFjaCAuKz8gaW5cXGIvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiKD86ZWFjaHxpbilcXGIvLFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLywvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYnJhbmNoJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKD86Y2FzZXxkZWZhdWx0fGVsc2V8aWZ8dW5sZXNzfHdoZW58d2hpbGUpXFxiLyxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86YXBwZW5kfGJsb2NrfGV4dGVuZHN8aW5jbHVkZXxwcmVwZW5kKVxcYi4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnbWl4aW4nOiBbXG5cdFx0XHQvLyBEZWNsYXJhdGlvblxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKW1peGluIC4rL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdrZXl3b3JkJzogL15taXhpbi8sXG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogL1xcdysoPz1cXHMqXFwofFxccyokKS8sXG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSwuXS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIFVzYWdlXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopXFwrLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J25hbWUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcK1xcdysvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdzY3JpcHQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qc2NyaXB0KD86KD86JlteKF0rKT9cXChbXildK1xcKSkqW1xcdCBdKS4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdH0sXG5cblx0XHQncGxhaW4tdGV4dCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSooPyEtKVtcXHdcXC0jLl0qW1xcd1xcLV0oPzooPzomW14oXSspP1xcKFteKV0rXFwpKSpcXC8/W1xcdCBdKS4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndGFnJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPyEtKVtcXHdcXC0jLl0qW1xcd1xcLV0oPzooPzomW14oXSspP1xcKFteKV0rXFwpKSpcXC8/Oj8vbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0dHJpYnV0ZXMnOiBbXG5cdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyZbXihdK1xcKFteKV0rXFwpLyxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXChbXildK1xcKS8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyg9XFxzKig/IVxccykpKD86XFx7W159XSpcXH18W14sKVxcclxcbl0rKS8sXG5cdFx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qYXZhc2NyaXB0XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdCdhdHRyLW5hbWUnOiAvW1xcdy1dKyg/PVxccyohPz18XFxzKlssKV0pLyxcblx0XHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1shPSgpLF0rL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovLFxuXHRcdFx0XHQnYXR0ci1pZCc6IC8jW1xcd1xcLV0rLyxcblx0XHRcdFx0J2F0dHItY2xhc3MnOiAvXFwuW1xcd1xcLV0rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2NvZGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSooPzotfCE/PSkpLisvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdFxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1suXFwtIT18XSsvXG5cdH07XG5cblx0dmFyIGZpbHRlcl9wYXR0ZXJuID0gLyheKFtcXHQgXSopKTo8ZmlsdGVyX25hbWU+KD86KD86XFxyP1xcbnxcXHIoPyFcXG4pKSg/OlxcMltcXHQgXS4rfFxccyo/KD89XFxyP1xcbnxcXHIpKSkrLy5zb3VyY2U7XG5cblx0Ly8gTm9uIGV4aGF1c3RpdmUgbGlzdCBvZiBhdmFpbGFibGUgZmlsdGVycyBhbmQgYXNzb2NpYXRlZCBsYW5ndWFnZXNcblx0dmFyIGZpbHRlcnMgPSBbXG5cdFx0eyBmaWx0ZXI6ICdhdHBsJywgbGFuZ3VhZ2U6ICd0d2lnJyB9LFxuXHRcdHsgZmlsdGVyOiAnY29mZmVlJywgbGFuZ3VhZ2U6ICdjb2ZmZWVzY3JpcHQnIH0sXG5cdFx0J2VqcycsXG5cdFx0J2hhbmRsZWJhcnMnLFxuXHRcdCdsZXNzJyxcblx0XHQnbGl2ZXNjcmlwdCcsXG5cdFx0J21hcmtkb3duJyxcblx0XHR7IGZpbHRlcjogJ3Nhc3MnLCBsYW5ndWFnZTogJ3Njc3MnIH0sXG5cdFx0J3N0eWx1cydcblx0XTtcblx0dmFyIGFsbF9maWx0ZXJzID0ge307XG5cdGZvciAodmFyIGkgPSAwLCBsID0gZmlsdGVycy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcblx0XHR2YXIgZmlsdGVyID0gZmlsdGVyc1tpXTtcblx0XHRmaWx0ZXIgPSB0eXBlb2YgZmlsdGVyID09PSAnc3RyaW5nJyA/IHsgZmlsdGVyOiBmaWx0ZXIsIGxhbmd1YWdlOiBmaWx0ZXIgfSA6IGZpbHRlcjtcblx0XHRpZiAoUHJpc20ubGFuZ3VhZ2VzW2ZpbHRlci5sYW5ndWFnZV0pIHtcblx0XHRcdGFsbF9maWx0ZXJzWydmaWx0ZXItJyArIGZpbHRlci5maWx0ZXJdID0ge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoZmlsdGVyX3BhdHRlcm4ucmVwbGFjZSgnPGZpbHRlcl9uYW1lPicsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGZpbHRlci5maWx0ZXI7IH0pLCAnbScpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZmlsdGVyLW5hbWUnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXjpbXFx3LV0rLyxcblx0XHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndGV4dCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9cXFNbXFxzXFxTXSovLFxuXHRcdFx0XHRcdFx0YWxpYXM6IFtmaWx0ZXIubGFuZ3VhZ2UsICdsYW5ndWFnZS0nICsgZmlsdGVyLmxhbmd1YWdlXSxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzW2ZpbHRlci5sYW5ndWFnZV1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHVnJywgJ2ZpbHRlcicsIGFsbF9maWx0ZXJzKTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy5wdXBwZXQgPSB7XG5cdFx0J2hlcmVkb2MnOiBbXG5cdFx0XHQvLyBNYXRjaGVzIHRoZSBjb250ZW50IG9mIGEgcXVvdGVkIGhlcmVkb2Mgc3RyaW5nIChzdWJqZWN0IHRvIGludGVycG9sYXRpb24pXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oQFxcKFwiKFteXCJcXHJcXG5cXC8pOl0rKVwiKD86XFwvW25ydHMkdUxdKik/XFwpLiooPzpcXHI/XFxufFxccikpKD86LiooPzpcXHI/XFxufFxccig/IVxcbikpKSo/WyBcXHRdKig/OlxcfFsgXFx0XSopPyg/Oi1bIFxcdF0qKT9cXDIvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdC8vIE1hdGNoZXMgdGhlIGVuZCB0YWdcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvKD89XFxTKS4qXFxTKD89ICokKS9cblx0XHRcdFx0XHQvLyBTZWUgaW50ZXJwb2xhdGlvbiBiZWxvd1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0Ly8gTWF0Y2hlcyB0aGUgY29udGVudCBvZiBhbiB1bnF1b3RlZCBoZXJlZG9jIHN0cmluZyAobm8gaW50ZXJwb2xhdGlvbilcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhAXFwoKFteXCJcXHJcXG5cXC8pOl0rKSg/OlxcL1tucnRzJHVMXSopP1xcKS4qKD86XFxyP1xcbnxcXHIpKSg/Oi4qKD86XFxyP1xcbnxcXHIoPyFcXG4pKSkqP1sgXFx0XSooPzpcXHxbIFxcdF0qKT8oPzotWyBcXHRdKik/XFwyLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdC8vIE1hdGNoZXMgdGhlIGVuZCB0YWdcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvKD89XFxTKS4qXFxTKD89ICokKS9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdC8vIE1hdGNoZXMgdGhlIHN0YXJ0IHRhZyBvZiBoZXJlZG9jIHN0cmluZ3Ncblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL0BcXChcIj8oPzpbXlwiXFxyXFxuXFwvKTpdKylcIj8oPzpcXC9bbnJ0cyR1TF0qKT9cXCkvLFxuXHRcdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXFwoKS4rPyg/PVxcKSkvLFxuXHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J211bHRpbGluZS1jb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjb21tZW50J1xuXHRcdH0sXG5cdFx0J3JlZ2V4Jzoge1xuXHRcdFx0Ly8gTXVzdCBiZSBwcmVmaXhlZCB3aXRoIHRoZSBrZXl3b3JkIFwibm9kZVwiIG9yIGEgbm9uLXdvcmQgY2hhclxuXHRcdFx0cGF0dGVybjogLygoPzpcXGJub2RlXFxzK3xbfj1cXChcXFtcXHssXVxccyp8Wz0rXT5cXHMqfF5cXHMqKSlcXC8oPzpbXlxcL1xcXFxdfFxcXFxbXFxzXFxTXSkrXFwvKD86W2lteF0rXFxifFxcQikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQvLyBFeHRlbmRlZCByZWdleGVzIG11c3QgaGF2ZSB0aGUgeCBmbGFnLiBUaGV5IGNhbiBjb250YWluIHNpbmdsZS1saW5lIGNvbW1lbnRzLlxuXHRcdFx0XHQnZXh0ZW5kZWQtcmVnZXgnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXC8oPzpbXlxcL1xcXFxdfFxcXFxbXFxzXFxTXSkrXFwvW2ltXSp4W2ltXSokLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdjb21tZW50JzogLyMuKi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pIy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0Ly8gQWxsb3cgZm9yIG9uZSBuZXN0ZWQgbGV2ZWwgb2YgZG91YmxlIHF1b3RlcyBpbnNpZGUgaW50ZXJwb2xhdGlvblxuXHRcdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXCRcXHsoPzpbXidcIn1dfChbXCInXSkoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMikrXFx9fFxcJCg/IVxceyl8KD8hXFwxKVteXFxcXCRdfFxcXFxbXFxzXFxTXSkqXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZG91YmxlLXF1b3RlZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlwiW1xcc1xcU10qXCIkLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdC8vIFNlZSBpbnRlcnBvbGF0aW9uIGJlbG93XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkKD86OjopP1xcdysoPzo6OlxcdyspKi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2F0dHItbmFtZSc6IC8oPzpcXGJcXHcrfFxcKikoPz1cXHMqPT4pLyxcblx0XHQnZnVuY3Rpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwuKSg/IVxcZClcXHcrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzpjb250YWlufGRlYnVnfGVycnxmYWlsfGluY2x1ZGV8aW5mb3xub3RpY2V8cmVhbGl6ZXxyZXF1aXJlfHRhZ3x3YXJuaW5nKVxcYnxcXGIoPyFcXGQpXFx3Kyg/PVxcKCkvXG5cdFx0XSxcblx0XHQnbnVtYmVyJzogL1xcYig/OjB4W2EtZlxcZF0rfFxcZCsoPzpcXC5cXGQrKT8oPzplLT9cXGQrKT8pXFxiL2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdC8vIEluY2x1ZGVzIHdvcmRzIHJlc2VydmVkIGZvciBmdXR1cmUgdXNlXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YXBwbGljYXRpb258YXR0cnxjYXNlfGNsYXNzfGNvbnN1bWVzfGRlZmF1bHR8ZGVmaW5lfGVsc2V8ZWxzaWZ8ZnVuY3Rpb258aWZ8aW1wb3J0fGluaGVyaXRzfG5vZGV8cHJpdmF0ZXxwcm9kdWNlc3x0eXBlfHVuZGVmfHVubGVzcylcXGIvLFxuXHRcdCdkYXRhdHlwZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzpBbnl8QXJyYXl8Qm9vbGVhbnxDYWxsYWJsZXxDYXRhbG9nZW50cnl8Q2xhc3N8Q29sbGVjdGlvbnxEYXRhfERlZmF1bHR8RW51bXxGbG9hdHxIYXNofEludGVnZXJ8Tm90VW5kZWZ8TnVtZXJpY3xPcHRpb25hbHxQYXR0ZXJufFJlZ2V4cHxSZXNvdXJjZXxSdW50aW1lfFNjYWxhcnxTdHJpbmd8U3RydWN0fFR1cGxlfFR5cGV8VW5kZWZ8VmFyaWFudClcXGIvLFxuXHRcdFx0YWxpYXM6ICdzeW1ib2wnXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvPVs9fj5dP3whWz1+XT98PCg/OjxcXHw/fFs9fnwtXSk/fD5bPj1dP3wtPj98fj58XFx8Pj8+P3xbKlxcLyUrP118XFxiKD86YW5kfGlufG9yKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF17fSgpLiw7XXw6Ky9cblx0fTtcblxuXHR2YXIgaW50ZXJwb2xhdGlvbiA9IFtcblx0XHR7XG5cdFx0XHQvLyBBbGxvdyBmb3Igb25lIG5lc3RlZCBsZXZlbCBvZiBicmFjZXMgaW5zaWRlIGludGVycG9sYXRpb25cblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcJFxceyg/OlteJ1wie31dfFxce1tefV0qXFx9fChbXCInXSkoPzooPyFcXDIpW15cXFxcXXxcXFxcW1xcc1xcU10pKlxcMikrXFx9Lyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3Nob3J0LXZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdC8vIE5lZ2F0aXZlIGxvb2stYWhlYWQgcHJldmVudCB3cm9uZyBoaWdobGlnaHRpbmcgb2YgZnVuY3Rpb25zXG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFwkXFx7KSg/IVxcdytcXCgpKD86OjopP1xcdysoPzo6OlxcdyspKi8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3ZhcmlhYmxlJyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Oi9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXCQvLFxuXHRcdFx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5wdXBwZXRcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVxcJCg/Ojo6KT9cXHcrKD86OjpcXHcrKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Oi9cblx0XHRcdH1cblx0XHR9XG5cdF07XG5cdFByaXNtLmxhbmd1YWdlcy5wdXBwZXRbJ2hlcmVkb2MnXVswXS5pbnNpZGUuaW50ZXJwb2xhdGlvbiA9IGludGVycG9sYXRpb247XG5cdFByaXNtLmxhbmd1YWdlcy5wdXBwZXRbJ3N0cmluZyddLmluc2lkZVsnZG91YmxlLXF1b3RlZCddLmluc2lkZS5pbnRlcnBvbGF0aW9uID0gaW50ZXJwb2xhdGlvbjtcbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHQvLyBodHRwczovL2FncmFlZi5naXRodWIuaW8vcHVyZS1kb2NzL3B1cmUuaHRtbCNsZXhpY2FsLW1hdHRlcnNcblxuXHRQcmlzbS5sYW5ndWFnZXMucHVyZSA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvIyEuKy9cblx0XHRdLFxuXHRcdCdpbmxpbmUtbGFuZyc6IHtcblx0XHRcdHBhdHRlcm46IC8lPFtcXHNcXFNdKz8lPi8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2xhbmcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheJTwgKiktXFwqLS4rPy1cXCotLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiU8Lip8JT4kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdudW1iZXInOiB7XG5cdFx0XHQvLyBUaGUgbG9vay1iZWhpbmQgcHJldmVudHMgd3JvbmcgaGlnaGxpZ2h0aW5nIG9mIHRoZSAuLiBvcGVyYXRvclxuXHRcdFx0cGF0dGVybjogLygoPzpcXC5cXC4pPykoPzpcXGIoPzppbmZ8bmFuKVxcYnxcXGIweFtcXGRhLWZdK3woPzpcXGIoPzowYik/XFxkKyg/OlxcLlxcZCspP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspP0w/KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86TlVMTHxhbnN8YnJlYWt8YnR8Y2FzZXxjYXRjaHxjZHxjbGVhcnxjb25zdHxkZWZ8ZGVsfGR1bXB8ZWxzZXxlbmR8ZXhpdHxleHRlcm58ZmFsc2V8Zm9yY2V8aGVscHxpZnxpbmZpeFtscl0/fGludGVyZmFjZXxsZXR8bHN8bWVtfG5hbWVzcGFjZXxub25maXh8b2Z8b3RoZXJ3aXNlfG91dGZpeHxvdmVycmlkZXxwb3N0Zml4fHByZWZpeHxwcml2YXRlfHB1YmxpY3xwd2R8cXVpdHxydW58c2F2ZXxzaG93fHN0YXRzfHRoZW58dGhyb3d8dHJhY2V8dHJ1ZXx0eXBlfHVuZGVycmlkZXx1c2luZ3x3aGVufHdpdGgpXFxiLyxcblx0XHQnZnVuY3Rpb24nOiAvXFxiKD86YWJzfGFkZF8oPzphZGRyfGNvbnN0ZGVmfCg/OmZ1bmRlZnxpbnRlcmZhY2V8bWFjZGVmfHR5cGVkZWYpKD86X2F0KT98dmFyZGVmKXxhbGx8YW55fGFwcGxwP3xhcml0eXxiaWdpbnRwP3xibG9iKD86X2NyY3xfc2l6ZXxwKT98Ym9vbHA/fGJ5dGVfYz9zdHJpbmcoPzpfcG9pbnRlcik/fGJ5dGVfKD86bWF0cml4fHBvaW50ZXIpfGNhbGxvY3xjYXR8Y2F0bWFwfGNlaWx8Y2hhcltwc10/fGNoZWNrX3B0cnRhZ3xjaHJ8Y2xlYXJfc2VudHJ5fGNsZWFyc3ltfGNsb3N1cmVwP3xjbWF0cml4cD98Y29scz98Y29sY2F0KD86bWFwKT98Y29sbWFwfGNvbHJldnxjb2x2ZWN0b3IoPzpwfHNlcSk/fGNvbXBsZXgoPzpfZmxvYXRfKD86bWF0cml4fHBvaW50ZXIpfF9tYXRyaXgoPzpfdmlldyk/fF9wb2ludGVyfHApP3xjb25qfGNvb2tlZHA/fGNzdHxjc3RyaW5nKD86Xyg/OmR1cHxsaXN0fHZlY3RvcikpP3xjdXJyeTM/fGN5Y2xlbj98ZGVsXyg/OmNvbnN0ZGVmfGZ1bmRlZnxpbnRlcmZhY2V8bWFjZGVmfHR5cGVkZWZ8dmFyZGVmKXxkZWxldGV8ZGlhZyg/Om1hdCk/fGRpbXxkbWF0cml4cD98ZG98ZG91YmxlKD86X21hdHJpeCg/Ol92aWV3KT98X3BvaW50ZXJ8cCk/fGRvd2l0aDM/fGRyb3B8ZHJvcHdoaWxlfGV2YWwoPzpjbWQpP3xleGFjdHB8ZmlsdGVyfGZpeHxmaXhpdHl8ZmxpcHxmbG9hdCg/Ol9tYXRyaXh8X3BvaW50ZXIpfGZsb29yfGZvbGRbbHJdMT98ZnJhY3xmcmVlfGZ1bnA/fGZ1bmN0aW9ucD98Z2NkfGdldCg/Ol8oPzpieXRlfGNvbnN0ZGVmfGRvdWJsZXxmbG9hdHxmdW5kZWZ8aW50KD86NjQpP3xpbnRlcmZhY2UoPzpfdHlwZWRlZik/fGxvbmd8bWFjZGVmfHBvaW50ZXJ8cHRydGFnfHNlbnRyeXxzaG9ydHxzdHJpbmd8dHlwZWRlZnx2YXJkZWYpKT98Z2xvYnN5bXxoYXNofGhlYWR8aWR8aW18aW1hdHJpeHA/fGluZGV4fGluZXhhY3RwfGluZnB8aW5pdHxpbnNlcnR8aW50KD86X21hdHJpeCg/Ol92aWV3KT98X3BvaW50ZXJ8cCk/fGludDY0Xyg/Om1hdHJpeHxwb2ludGVyKXxpbnRlZ2VycD98aXRlcmF0ZW4/fGl0ZXJ3aGlsZXxqb2lufGtleXM/fGxhbWJkYXA/fGxhc3QoPzplcnIoPzpwb3MpPyk/fGxjZHxsaXN0WzJwXT98bGlzdG1hcHxtYWtlX3B0cnRhZ3xtYWxsb2N8bWFwfG1hdGNhdHxtYXRyaXhwP3xtYXh8bWVtYmVyfG1pbnxuYW5wfG5hcmdzfG5tYXRyaXhwP3xudWxsfG51bWJlcnA/fG9yZHxwYWNrKD86ZWQpP3xwb2ludGVyKD86X2Nhc3R8X3RhZ3xfdHlwZXxwKT98cG93fHByZWR8cHRydGFnfHB1dCg/Ol8oPzpieXRlfGRvdWJsZXxmbG9hdHxpbnQoPzo2NCk/fGxvbmd8cG9pbnRlcnxzaG9ydHxzdHJpbmcpKT98cmF0aW9uYWxwP3xyZXxyZWFscD98cmVhbGxvY3xyZWNvcmRwP3xyZWRpbXxyZWR1Y2UoPzpfd2l0aCk/fHJlZnA/fHJlcGVhdG4/fHJldmVyc2V8cmxpc3RwP3xyb3VuZHxyb3dzP3xyb3djYXQoPzptYXApP3xyb3dtYXB8cm93cmV2fHJvd3ZlY3Rvcig/OnB8c2VxKT98c2FtZXxzY2FuW2xyXTE/fHNlbnRyeXxzZ258c2hvcnRfKD86bWF0cml4fHBvaW50ZXIpfHNsaWNlfHNtYXRyaXhwP3xzb3J0fHNwbGl0fHN0cnxzdHJjYXR8c3RyZWFtfHN0cmlkZXxzdHJpbmcoPzpfKD86ZHVwfGxpc3R8dmVjdG9yKXxwKT98c3ViZGlhZyg/Om1hdCk/fHN1Ym1hdHxzdWJzZXEyP3xzdWJzdHJ8c3VjY3xzdXBkaWFnKD86bWF0KT98c3ltYm9scD98dGFpbHx0YWtlfHRha2V3aGlsZXx0aHVua3A/fHRyYW5zcG9zZXx0cnVuY3x0dXBsZXA/fHR5cGVwfHVieXRlfHVpbnQoPzo2NCk/fHVsb25nfHVuY3VycnkzP3x1bnJlZnx1bnppcDM/fHVwZGF0ZXx1c2hvcnR8dmFscz98dmFycD98dmVjdG9yKD86cHxzZXEpP3x2b2lkfHppcDM/fHppcHdpdGgzPylcXGIvLFxuXHRcdCdzcGVjaWFsJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYl9fW2Etel0rX19cXGIvaSxcblx0XHRcdGFsaWFzOiAnYnVpbHRpbidcblx0XHR9LFxuXHRcdC8vIEFueSBjb21iaW5hdGlvbiBvZiBvcGVyYXRvciBjaGFycyBjYW4gYmUgYW4gb3BlcmF0b3Jcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbWlzbGVhZGluZy1jaGFyYWN0ZXItY2xhc3Ncblx0XHQnb3BlcmF0b3InOiAvKD86WyFcIiMkJSYnKissXFwtLlxcLzo8PT4/QFxcXFxeYHx+XFx1MDBhMS1cXHUwMGJmXFx1MDBkNy1cXHUwMGY3XFx1MjBkMC1cXHUyYmZmXXxcXGJfK1xcYikrfFxcYig/OmFuZHxkaXZ8bW9kfG5vdHxvcilcXGIvLFxuXHRcdC8vIEZJWE1FOiBIb3cgY2FuIHdlIHByZXZlbnQgfCBhbmQgLCB0byBiZSBoaWdobGlnaHRlZCBhcyBvcGVyYXRvciB3aGVuIHRoZXkgYXJlIHVzZWQgYWxvbmU/XG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdOyx8XS9cblx0fTtcblxuXHR2YXIgaW5saW5lTGFuZ3VhZ2VzID0gW1xuXHRcdCdjJyxcblx0XHR7IGxhbmc6ICdjKysnLCBhbGlhczogJ2NwcCcgfSxcblx0XHQnZm9ydHJhbidcblx0XTtcblx0dmFyIGlubGluZUxhbmd1YWdlUmUgPSAvJTwgKi1cXCotICo8bGFuZz5cXGQqICotXFwqLVtcXHNcXFNdKz8lPi8uc291cmNlO1xuXG5cdGlubGluZUxhbmd1YWdlcy5mb3JFYWNoKGZ1bmN0aW9uIChsYW5nKSB7XG5cdFx0dmFyIGFsaWFzID0gbGFuZztcblx0XHRpZiAodHlwZW9mIGxhbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRhbGlhcyA9IGxhbmcuYWxpYXM7XG5cdFx0XHRsYW5nID0gbGFuZy5sYW5nO1xuXHRcdH1cblx0XHRpZiAoUHJpc20ubGFuZ3VhZ2VzW2FsaWFzXSkge1xuXHRcdFx0dmFyIG8gPSB7fTtcblx0XHRcdG9bJ2lubGluZS1sYW5nLScgKyBhbGlhc10gPSB7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbmxpbmVMYW5ndWFnZVJlLnJlcGxhY2UoJzxsYW5nPicsIGxhbmcucmVwbGFjZSgvKFsuKyo/XFwvXFxcXCgpe31cXFtcXF1dKS9nLCAnXFxcXCQxJykpLCAnaScpLFxuXHRcdFx0XHRpbnNpZGU6IFByaXNtLnV0aWwuY2xvbmUoUHJpc20ubGFuZ3VhZ2VzLnB1cmVbJ2lubGluZS1sYW5nJ10uaW5zaWRlKVxuXHRcdFx0fTtcblx0XHRcdG9bJ2lubGluZS1sYW5nLScgKyBhbGlhc10uaW5zaWRlLnJlc3QgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlc1thbGlhc10pO1xuXHRcdFx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncHVyZScsICdpbmxpbmUtbGFuZycsIG8pO1xuXHRcdH1cblx0fSk7XG5cblx0Ly8gQyBpcyB0aGUgZGVmYXVsdCBpbmxpbmUgbGFuZ3VhZ2Vcblx0aWYgKFByaXNtLmxhbmd1YWdlcy5jKSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzLnB1cmVbJ2lubGluZS1sYW5nJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS51dGlsLmNsb25lKFByaXNtLmxhbmd1YWdlcy5jKTtcblx0fVxuXG59KFByaXNtKSk7XG5cbi8qXG5PcmlnaW5hbCBDb2RlIGJ5IEJhcyBHcm9vdGhlZGRlXG4hIU1BTlkgVEhBTktTISEgSSBuZXZlciB3b3VsZCBoYXZlIG1hZGUgdGhpcywgcmVnZXggYW5kIG1lIHdpbGwgbmV2ZXIgYmUgYmVzdCBmcmllbmRzIDspXG49PT4gaHR0cHM6Ly9jb2RlcGVuLmlvL0ltYWdpbmVQcm9ncmFtbWluZy9kZXRhaWxzL0pZeWRCeS9cbnNsaWdodGx5IGNoYW5nZWQgdG8gcGFzcyBhbGwgdGVzdHNcbiovXG5cblxuLy8gUHVyZUJhc2ljIHN1cHBvcnQsIHN0ZWFsIHN0dWZmIGZyb20gYW5zaS1jXG5QcmlzbS5sYW5ndWFnZXMucHVyZWJhc2ljID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50JzogLzsuKi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFsaWdufGFuZHxhc3xicmVha3xjYWxsZGVidWdnZXJ8Y2FzZXxjb21waWxlcmNhc2V8Y29tcGlsZXJkZWZhdWx0fGNvbXBpbGVyZWxzZXxjb21waWxlcmVsc2VpZnxjb21waWxlcmVuZGlmfGNvbXBpbGVyZW5kc2VsZWN0fGNvbXBpbGVyZXJyb3J8Y29tcGlsZXJpZnxjb21waWxlcnNlbGVjdHxjb250aW51ZXxkYXRhfGRhdGFzZWN0aW9ufGRlYnVnfGRlYnVnbGV2ZWx8ZGVjbGFyZXxkZWNsYXJlY3xkZWNsYXJlY2RsbHxkZWNsYXJlZGxsfGRlY2xhcmVtb2R1bGV8ZGVmYXVsdHxkZWZpbmV8ZGltfGRpc2FibGVhc218ZGlzYWJsZWRlYnVnZ2VyfGRpc2FibGVleHBsaWNpdHxlbHNlfGVsc2VpZnxlbmFibGVhc218ZW5hYmxlZGVidWdnZXJ8ZW5hYmxlZXhwbGljaXR8ZW5kfGVuZGRhdGFzZWN0aW9ufGVuZGRlY2xhcmVtb2R1bGV8ZW5kZW51bWVyYXRpb258ZW5kaWZ8ZW5kaW1wb3J0fGVuZGludGVyZmFjZXxlbmRtYWNyb3xlbmRtb2R1bGV8ZW5kcHJvY2VkdXJlfGVuZHNlbGVjdHxlbmRzdHJ1Y3R1cmV8ZW5kc3RydWN0dXJldW5pb258ZW5kd2l0aHxlbnVtZXJhdGlvbnxleHRlbmRzfGZha2VyZXR1cm58Zm9yfGZvcmVhY2h8Zm9yZXZlcnxnbG9iYWx8Z29zdWJ8Z290b3xpZnxpbXBvcnR8aW1wb3J0Y3xpbmNsdWRlYmluYXJ5fGluY2x1ZGVmaWxlfGluY2x1ZGVwYXRofGludGVyZmFjZXxtYWNyb3xtb2R1bGV8bmV3bGlzdHxuZXdtYXB8bmV4dHxub3R8b3J8cHJvY2VkdXJlfHByb2NlZHVyZWN8cHJvY2VkdXJlY2RsbHxwcm9jZWR1cmVkbGx8cHJvY2VkdXJlcmV0dXJufHByb3RlY3RlZHxwcm90b3R5cGV8cHJvdG90eXBlY3xyZWFkfHJlZGltfHJlcGVhdHxyZXN0b3JlfHJldHVybnxydW50aW1lfHNlbGVjdHxzaGFyZWR8c3RhdGljfHN0ZXB8c3RydWN0dXJlfHN0cnVjdHVyZXVuaW9ufHN3YXB8dGhyZWFkZWR8dG98dW50aWx8d2VuZHx3aGlsZXx3aXRofHhpbmNsdWRlZmlsZXx4b3IpXFxiL2ksXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD86XFwuXFx3Kyk/XFxzKig/PVxcKCkvLFxuXHQnbnVtYmVyJzogLyg/OlxcJFtcXGRhLWZdK3xcXGItPyg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8pXFxiL2ksXG5cdCdvcGVyYXRvcic6IC8oPzpAXFwqP3xcXD98XFwqKVxcdytcXCQ/fC1bPi1dP3xcXCtcXCs/fCE9P3w8PD89P3w+Pj89P3w9PT98JiY/fFxcfD9cXHx8W35eJT8qL0BdL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3B1cmViYXNpYycsICdrZXl3b3JkJywge1xuXHQndGFnJzogLyNcXHcrXFwkPy8sXG5cdCdhc20nOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKikhLiovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndGFnJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjb21tZW50JzogLzsuKi8sXG5cdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFtcIidgXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Ly8gQW5vbnltb3VzIGxhYmVsIHJlZmVyZW5jZXMsIGkuZS46IGptcCBAYlxuXHRcdFx0J2xhYmVsLXJlZmVyZW5jZS1hbm9ueW1vdXMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oIVxccypqW2Etel0rXFxzKylAW2ZiXS9pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2Zhc20tbGFiZWwnXG5cdFx0XHR9LFxuXHRcdFx0Ly8gTmFtZWQgbGFiZWwgcmVmZXJlbmNlLCBpLmUuOiBqbmUgbGFiZWwxXG5cdFx0XHQnbGFiZWwtcmVmZXJlbmNlLWFkZHJlc3NlZCc6IHtcblx0XHRcdFx0cGF0dGVybjogLyghXFxzKmpbYS16XStcXHMrKVtBLVouXz8kQF1bXFx3Lj8kQH4jXSovaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmYXNtLWxhYmVsJ1xuXHRcdFx0fSxcblx0XHRcdCdrZXl3b3JkJzogW1xuXHRcdFx0XHQvXFxiKD86ZXh0ZXJufGdsb2JhbClcXGJbXjtcXHJcXG5dKi9pLFxuXHRcdFx0XHQvXFxiKD86Q1BVfERFRkFVTFR8RkxPQVQpXFxiLiovXG5cdFx0XHRdLFxuXHRcdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qIVxccyopW1xcZGEtel0rKD89XFxzfCQpL2ltLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0J2Z1bmN0aW9uLWlubGluZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyg6XFxzKilbXFxkYS16XSsoPz1cXHMpL2ksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0XHR9LFxuXHRcdFx0J2xhYmVsJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihbXFx0IF0qIVxccyopW0EtWmEtei5fPyRAXVtcXHcuPyRAfiNdKig/PTopL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnZmFzbS1sYWJlbCdcblx0XHRcdH0sXG5cdFx0XHQncmVnaXN0ZXInOiAvXFxiKD86c3RcXGR8W3h5el1tbVxcZFxcZD98W2NkdF1yXFxkfHJcXGRcXGQ/W2J3ZF0/fFtlcl0/W2FiY2RdeHxbYWJjZF1baGxdfFtlcl0/KD86YnB8ZGl8c2l8c3ApfFtjZGVmZ3Ndc3xtbVxcZCspXFxiL2ksXG5cdFx0XHQnbnVtYmVyJzogLyg/OlxcYnwtfCg/PVxcJCkpKD86MFtoeF0oPzpbXFxkYS1mXSpcXC4pP1tcXGRhLWZdKyg/OnBbKy1dP1xcZCspP3xcXGRbXFxkYS1mXStbaHhdfFxcJFxcZFtcXGRhLWZdKnwwW29xXVswLTddK3xbMC03XStbb3FdfDBbYnldWzAxXSt8WzAxXStbYnldfDBbZHRdXFxkK3woPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspKD86XFwuP2VbKy1dP1xcZCspP1tkdF0/KVxcYi9pLFxuXHRcdFx0J29wZXJhdG9yJzogL1tcXFtcXF0qK1xcLS8lPD49JnwkISwuOl0vXG5cdFx0fVxuXHR9XG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5wdXJlYmFzaWNbJ2NsYXNzLW5hbWUnXTtcbmRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMucHVyZWJhc2ljWydib29sZWFuJ107XG5cblByaXNtLmxhbmd1YWdlcy5wYmZhc20gPSBQcmlzbS5sYW5ndWFnZXNbJ3B1cmViYXNpYyddO1xuXG5QcmlzbS5sYW5ndWFnZXMucHVyZXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2hhc2tlbGwnLCB7XG5cdCdrZXl3b3JkJzogL1xcYig/OmFkb3xjYXNlfGNsYXNzfGRhdGF8ZGVyaXZlfGRvfGVsc2V8Zm9yYWxsfGlmfGlufGluZml4bHxpbmZpeHJ8aW5zdGFuY2V8bGV0fG1vZHVsZXxuZXd0eXBlfG9mfHByaW1pdGl2ZXx0aGVufHR5cGV8d2hlcmUpXFxifFx1MjIwMC8sXG5cblx0J2ltcG9ydC1zdGF0ZW1lbnQnOiB7XG5cdFx0Ly8gVGhlIGltcG9ydGVkIG9yIGhpZGRlbiBuYW1lcyBhcmUgbm90IGluY2x1ZGVkIGluIHRoaXMgaW1wb3J0XG5cdFx0Ly8gc3RhdGVtZW50LiBUaGlzIGlzIGJlY2F1c2Ugd2Ugd2FudCB0byBoaWdobGlnaHQgdGhvc2UgZXhhY3RseSBsaWtlXG5cdFx0Ly8gd2UgZG8gZm9yIHRoZSBuYW1lcyBpbiB0aGUgcHJvZ3JhbS5cblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKWltcG9ydFxccytbQS1aXVtcXHcnXSooPzpcXC5bQS1aXVtcXHcnXSopKig/Olxccythc1xccytbQS1aXVtcXHcnXSooPzpcXC5bQS1aXVtcXHcnXSopKik/KD86XFxzK2hpZGluZ1xcYik/L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL1xcYig/OmFzfGhpZGluZ3xpbXBvcnQpXFxiLyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0fVxuXHR9LFxuXG5cdC8vIFRoZXNlIGFyZSBidWlsdGluIGZ1bmN0aW9ucyBvbmx5LiBDb25zdHJ1Y3RvcnMgYXJlIGhpZ2hsaWdodGVkIGxhdGVyIGFzIGEgY29uc3RhbnQuXG5cdCdidWlsdGluJzogL1xcYig/OmFic3VyZHxhZGR8YXB8YXBwZW5kfGFwcGx5fGJldHdlZW58YmluZHxib3R0b218Y2xhbXB8Y29tcGFyZXxjb21wYXJpbmd8Y29tcG9zZXxjb25qfGNvbnN0fGRlZ3JlZXxkaXNjYXJkfGRpc2p8ZGl2fGVxfGZsYXB8ZmxpcHxnY2R8aWRlbnRpdHl8aWZNfGpvaW58bGNtfGxpZnRBMXxsaWZ0TTF8bWFwfG1heHxtZW1wdHl8bWlufG1vZHxtdWx8bmVnYXRlfG5vdHxub3RFcXxvbmV8b3RoZXJ3aXNlfHJlY2lwfHNob3d8c3VifHRvcHx1bml0fHVubGVzc3x1bmxlc3NNfHZvaWR8d2hlbnx3aGVuTXx6ZXJvKVxcYi8sXG5cblx0J29wZXJhdG9yJzogW1xuXHRcdC8vIEluZml4IG9wZXJhdG9yc1xuXHRcdFByaXNtLmxhbmd1YWdlcy5oYXNrZWxsLm9wZXJhdG9yWzBdLFxuXHRcdC8vIEFTQ0lJIG9wZXJhdG9yc1xuXHRcdFByaXNtLmxhbmd1YWdlcy5oYXNrZWxsLm9wZXJhdG9yWzJdLFxuXHRcdC8vIEFsbCBVVEYxNiBVbmljb2RlIG9wZXJhdG9yIHN5bWJvbHNcblx0XHQvLyBUaGlzIHJlZ2V4IGlzIGVxdWl2YWxlbnQgdG8gLyg/PVtcXHg4MC1cXHVGRkZGXSlbXFxwe2djPU1hdGhfU3ltYm9sfVxccHtnYz1DdXJyZW5jeV9TeW1ib2x9XFxwe01vZGlmaWVyX1N5bWJvbH1cXHB7T3RoZXJfU3ltYm9sfV0vdVxuXHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9pc3N1ZXMvMzAwNiBmb3IgbW9yZSBkZXRhaWxzLlxuXHRcdC9bXFx4YTItXFx4YTZcXHhhOFxceGE5XFx4YWNcXHhhZS1cXHhiMVxceGI0XFx4YjhcXHhkN1xceGY3XFx1MDJjMi1cXHUwMmM1XFx1MDJkMi1cXHUwMmRmXFx1MDJlNS1cXHUwMmViXFx1MDJlZFxcdTAyZWYtXFx1MDJmZlxcdTAzNzVcXHUwMzg0XFx1MDM4NVxcdTAzZjZcXHUwNDgyXFx1MDU4ZC1cXHUwNThmXFx1MDYwNi1cXHUwNjA4XFx1MDYwYlxcdTA2MGVcXHUwNjBmXFx1MDZkZVxcdTA2ZTlcXHUwNmZkXFx1MDZmZVxcdTA3ZjZcXHUwN2ZlXFx1MDdmZlxcdTA5ZjJcXHUwOWYzXFx1MDlmYVxcdTA5ZmJcXHUwYWYxXFx1MGI3MFxcdTBiZjMtXFx1MGJmYVxcdTBjN2ZcXHUwZDRmXFx1MGQ3OVxcdTBlM2ZcXHUwZjAxLVxcdTBmMDNcXHUwZjEzXFx1MGYxNS1cXHUwZjE3XFx1MGYxYS1cXHUwZjFmXFx1MGYzNFxcdTBmMzZcXHUwZjM4XFx1MGZiZS1cXHUwZmM1XFx1MGZjNy1cXHUwZmNjXFx1MGZjZVxcdTBmY2ZcXHUwZmQ1LVxcdTBmZDhcXHUxMDllXFx1MTA5ZlxcdTEzOTAtXFx1MTM5OVxcdTE2NmRcXHUxN2RiXFx1MTk0MFxcdTE5ZGUtXFx1MTlmZlxcdTFiNjEtXFx1MWI2YVxcdTFiNzQtXFx1MWI3Y1xcdTFmYmRcXHUxZmJmLVxcdTFmYzFcXHUxZmNkLVxcdTFmY2ZcXHUxZmRkLVxcdTFmZGZcXHUxZmVkLVxcdTFmZWZcXHUxZmZkXFx1MWZmZVxcdTIwNDRcXHUyMDUyXFx1MjA3YS1cXHUyMDdjXFx1MjA4YS1cXHUyMDhjXFx1MjBhMC1cXHUyMGJmXFx1MjEwMFxcdTIxMDFcXHUyMTAzLVxcdTIxMDZcXHUyMTA4XFx1MjEwOVxcdTIxMTRcXHUyMTE2LVxcdTIxMThcXHUyMTFlLVxcdTIxMjNcXHUyMTI1XFx1MjEyN1xcdTIxMjlcXHUyMTJlXFx1MjEzYVxcdTIxM2JcXHUyMTQwLVxcdTIxNDRcXHUyMTRhLVxcdTIxNGRcXHUyMTRmXFx1MjE4YVxcdTIxOGJcXHUyMTkwLVxcdTIzMDdcXHUyMzBjLVxcdTIzMjhcXHUyMzJiLVxcdTI0MjZcXHUyNDQwLVxcdTI0NGFcXHUyNDljLVxcdTI0ZTlcXHUyNTAwLVxcdTI3NjdcXHUyNzk0LVxcdTI3YzRcXHUyN2M3LVxcdTI3ZTVcXHUyN2YwLVxcdTI5ODJcXHUyOTk5LVxcdTI5ZDdcXHUyOWRjLVxcdTI5ZmJcXHUyOWZlLVxcdTJiNzNcXHUyYjc2LVxcdTJiOTVcXHUyYjk3LVxcdTJiZmZcXHUyY2U1LVxcdTJjZWFcXHUyZTUwXFx1MmU1MVxcdTJlODAtXFx1MmU5OVxcdTJlOWItXFx1MmVmM1xcdTJmMDAtXFx1MmZkNVxcdTJmZjAtXFx1MmZmYlxcdTMwMDRcXHUzMDEyXFx1MzAxM1xcdTMwMjBcXHUzMDM2XFx1MzAzN1xcdTMwM2VcXHUzMDNmXFx1MzA5YlxcdTMwOWNcXHUzMTkwXFx1MzE5MVxcdTMxOTYtXFx1MzE5ZlxcdTMxYzAtXFx1MzFlM1xcdTMyMDAtXFx1MzIxZVxcdTMyMmEtXFx1MzI0N1xcdTMyNTBcXHUzMjYwLVxcdTMyN2ZcXHUzMjhhLVxcdTMyYjBcXHUzMmMwLVxcdTMzZmZcXHU0ZGMwLVxcdTRkZmZcXHVhNDkwLVxcdWE0YzZcXHVhNzAwLVxcdWE3MTZcXHVhNzIwXFx1YTcyMVxcdWE3ODlcXHVhNzhhXFx1YTgyOC1cXHVhODJiXFx1YTgzNi1cXHVhODM5XFx1YWE3Ny1cXHVhYTc5XFx1YWI1YlxcdWFiNmFcXHVhYjZiXFx1ZmIyOVxcdWZiYjItXFx1ZmJjMVxcdWZkZmNcXHVmZGZkXFx1ZmU2MlxcdWZlNjQtXFx1ZmU2NlxcdWZlNjlcXHVmZjA0XFx1ZmYwYlxcdWZmMWMtXFx1ZmYxZVxcdWZmM2VcXHVmZjQwXFx1ZmY1Y1xcdWZmNWVcXHVmZmUwLVxcdWZmZTZcXHVmZmU4LVxcdWZmZWVcXHVmZmZjXFx1ZmZmZF0vXG5cdF1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucHVycyA9IFByaXNtLmxhbmd1YWdlcy5wdXJlc2NyaXB0O1xuXG5QcmlzbS5sYW5ndWFnZXMucHl0aG9uID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLiovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzdHJpbmctaW50ZXJwb2xhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKD86ZnxmcnxyZikoPzooXCJcIlwifCcnJylbXFxzXFxTXSo/XFwxfChcInwnKSg/OlxcXFwufCg/IVxcMilbXlxcXFxcXHJcXG5dKSpcXDIpL2ksXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdC8vIFwie1wiIDxleHByZXNzaW9uPiA8b3B0aW9uYWwgXCIhc1wiLCBcIiFyXCIsIG9yIFwiIWFcIj4gPG9wdGlvbmFsIFwiOlwiIGZvcm1hdCBzcGVjaWZpZXI+IFwifVwiXG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXntdKSg/Olxce1xceykqKVxceyg/IVxceykoPzpbXnt9XXxcXHsoPyFcXHspKD86W157fV18XFx7KD8hXFx7KSg/Oltee31dKStcXH0pK1xcfSkrXFx9Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2Zvcm1hdC1zcGVjJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogLyg6KVteOigpe31dKyg/PVxcfSQpLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdjb252ZXJzaW9uLW9wdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8hW3NyYV0oPz1bOn1dJCkvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHJlc3Q6IG51bGxcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcblx0J3RyaXBsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oPzpbcnViXXxicnxyYik/KFwiXCJcInwnJycpW1xcc1xcU10qP1xcMS9pLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZydcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKD86W3J1Yl18YnJ8cmIpPyhcInwnKSg/OlxcXFwufCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpZGVmWyBcXHRdKylbYS16QS1aX11cXHcqKD89XFxzKlxcKCkvZyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdjbGFzcy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiY2xhc3NcXHMrKVxcdysvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdkZWNvcmF0b3InOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKilAXFx3Kyg/OlxcLlxcdyspKi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6IFsnYW5ub3RhdGlvbicsICdwdW5jdHVhdGlvbiddLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi9cblx0XHR9XG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Ol8oPz1cXHMqOil8YW5kfGFzfGFzc2VydHxhc3luY3xhd2FpdHxicmVha3xjYXNlfGNsYXNzfGNvbnRpbnVlfGRlZnxkZWx8ZWxpZnxlbHNlfGV4Y2VwdHxleGVjfGZpbmFsbHl8Zm9yfGZyb218Z2xvYmFsfGlmfGltcG9ydHxpbnxpc3xsYW1iZGF8bWF0Y2h8bm9ubG9jYWx8bm90fG9yfHBhc3N8cHJpbnR8cmFpc2V8cmV0dXJufHRyeXx3aGlsZXx3aXRofHlpZWxkKVxcYi8sXG5cdCdidWlsdGluJzogL1xcYig/Ol9faW1wb3J0X198YWJzfGFsbHxhbnl8YXBwbHl8YXNjaWl8YmFzZXN0cmluZ3xiaW58Ym9vbHxidWZmZXJ8Ynl0ZWFycmF5fGJ5dGVzfGNhbGxhYmxlfGNocnxjbGFzc21ldGhvZHxjbXB8Y29lcmNlfGNvbXBpbGV8Y29tcGxleHxkZWxhdHRyfGRpY3R8ZGlyfGRpdm1vZHxlbnVtZXJhdGV8ZXZhbHxleGVjZmlsZXxmaWxlfGZpbHRlcnxmbG9hdHxmb3JtYXR8ZnJvemVuc2V0fGdldGF0dHJ8Z2xvYmFsc3xoYXNhdHRyfGhhc2h8aGVscHxoZXh8aWR8aW5wdXR8aW50fGludGVybnxpc2luc3RhbmNlfGlzc3ViY2xhc3N8aXRlcnxsZW58bGlzdHxsb2NhbHN8bG9uZ3xtYXB8bWF4fG1lbW9yeXZpZXd8bWlufG5leHR8b2JqZWN0fG9jdHxvcGVufG9yZHxwb3d8cHJvcGVydHl8cmFuZ2V8cmF3X2lucHV0fHJlZHVjZXxyZWxvYWR8cmVwcnxyZXZlcnNlZHxyb3VuZHxzZXR8c2V0YXR0cnxzbGljZXxzb3J0ZWR8c3RhdGljbWV0aG9kfHN0cnxzdW18c3VwZXJ8dHVwbGV8dHlwZXx1bmljaHJ8dW5pY29kZXx2YXJzfHhyYW5nZXx6aXApXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86RmFsc2V8Tm9uZXxUcnVlKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMCg/OmIoPzpfP1swMV0pK3xvKD86Xz9bMC03XSkrfHgoPzpfP1thLWYwLTldKSspXFxifCg/OlxcYlxcZCsoPzpfXFxkKykqKD86XFwuKD86XFxkKyg/Ol9cXGQrKSopPyk/fFxcQlxcLlxcZCsoPzpfXFxkKykqKSg/OmVbKy1dP1xcZCsoPzpfXFxkKykqKT9qPyg/IVxcdykvaSxcblx0J29wZXJhdG9yJzogL1stKyU9XT0/fCE9fDo9fFxcKlxcKj89P3xcXC9cXC8/PT98PFs8PT5dP3w+Wz0+XT98WyZ8Xn5dLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnB5dGhvblsnc3RyaW5nLWludGVycG9sYXRpb24nXS5pbnNpZGVbJ2ludGVycG9sYXRpb24nXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5weXRob247XG5cblByaXNtLmxhbmd1YWdlcy5weSA9IFByaXNtLmxhbmd1YWdlcy5weXRob247XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvKipcblx0ICogUmVwbGFjZXMgYWxsIHBsYWNlaG9sZGVycyBcIjw8bj4+XCIgb2YgZ2l2ZW4gcGF0dGVybiB3aXRoIHRoZSBuLXRoIHJlcGxhY2VtZW50ICh6ZXJvIGJhc2VkKS5cblx0ICpcblx0ICogTm90ZTogVGhpcyBpcyBhIHNpbXBsZSB0ZXh0IGJhc2VkIHJlcGxhY2VtZW50LiBCZSBjYXJlZnVsIHdoZW4gdXNpbmcgYmFja3JlZmVyZW5jZXMhXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuIHRoZSBnaXZlbiBwYXR0ZXJuLlxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXBsYWNlbWVudHMgYSBsaXN0IG9mIHJlcGxhY2VtZW50IHdoaWNoIGNhbiBiZSBpbnNlcnRlZCBpbnRvIHRoZSBnaXZlbiBwYXR0ZXJuLlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfSB0aGUgcGF0dGVybiB3aXRoIGFsbCBwbGFjZWhvbGRlcnMgcmVwbGFjZWQgd2l0aCB0aGVpciBjb3JyZXNwb25kaW5nIHJlcGxhY2VtZW50cy5cblx0ICogQGV4YW1wbGUgcmVwbGFjZSgvYTw8MD4+YS8uc291cmNlLCBbL2IrLy5zb3VyY2VdKSA9PT0gL2EoPzpiKylhLy5zb3VyY2Vcblx0ICovXG5cdGZ1bmN0aW9uIHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnRzKSB7XG5cdFx0cmV0dXJuIHBhdHRlcm4ucmVwbGFjZSgvPDwoXFxkKyk+Pi9nLCBmdW5jdGlvbiAobSwgaW5kZXgpIHtcblx0XHRcdHJldHVybiAnKD86JyArIHJlcGxhY2VtZW50c1sraW5kZXhdICsgJyknO1xuXHRcdH0pO1xuXHR9XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge3N0cmluZ1tdfSByZXBsYWNlbWVudHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IFtmbGFnc11cblx0ICogQHJldHVybnMge1JlZ0V4cH1cblx0ICovXG5cdGZ1bmN0aW9uIHJlKHBhdHRlcm4sIHJlcGxhY2VtZW50cywgZmxhZ3MpIHtcblx0XHRyZXR1cm4gUmVnRXhwKHJlcGxhY2UocGF0dGVybiwgcmVwbGFjZW1lbnRzKSwgZmxhZ3MgfHwgJycpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXN0ZWQgcGF0dGVybiB3aGVyZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIHN0cmluZyBgPDxzZWxmPj5gIGFyZSByZXBsYWNlZCB3aXRoIHRoZSBwYXR0ZXJuIGl0c2VsZi5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IHBhdHRlcm5cblx0ICogQHBhcmFtIHtudW1iZXJ9IGRlcHRoTG9nMlxuXHQgKiBAcmV0dXJucyB7c3RyaW5nfVxuXHQgKi9cblx0ZnVuY3Rpb24gbmVzdGVkKHBhdHRlcm4sIGRlcHRoTG9nMikge1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgZGVwdGhMb2cyOyBpKyspIHtcblx0XHRcdHBhdHRlcm4gPSBwYXR0ZXJuLnJlcGxhY2UoLzw8c2VsZj4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcoPzonICsgcGF0dGVybiArICcpJzsgfSk7XG5cdFx0fVxuXHRcdHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoLzw8c2VsZj4+L2csICdbXlxcXFxzXFxcXFNdJyk7XG5cdH1cblxuXHQvLyBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy9henVyZS9xdWFudHVtL3VzZXItZ3VpZGUvbGFuZ3VhZ2UvdHlwZXN5c3RlbS9cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9xc2hhcnAtbGFuZ3VhZ2UvdHJlZS9tYWluL1NwZWNpZmljYXRpb25zL0xhbmd1YWdlLzVfR3JhbW1hclxuXHR2YXIga2V5d29yZEtpbmRzID0ge1xuXHRcdC8vIGtleXdvcmRzIHdoaWNoIHJlcHJlc2VudCBhIHJldHVybiBvciB2YXJpYWJsZSB0eXBlXG5cdFx0dHlwZTogJ0FkaiBCaWdJbnQgQm9vbCBDdGwgRG91YmxlIGZhbHNlIEludCBPbmUgUGF1bGkgUGF1bGlJIFBhdWxpWCBQYXVsaVkgUGF1bGlaIFF1Yml0IFJhbmdlIFJlc3VsdCBTdHJpbmcgdHJ1ZSBVbml0IFplcm8nLFxuXHRcdC8vIGFsbCBvdGhlciBrZXl3b3Jkc1xuXHRcdG90aGVyOiAnQWRqb2ludCBhZGpvaW50IGFwcGx5IGFzIGF1dG8gYm9keSBib3Jyb3cgYm9ycm93aW5nIENvbnRyb2xsZWQgY29udHJvbGxlZCBkaXN0cmlidXRlIGVsaWYgZWxzZSBmYWlsIGZpeHVwIGZvciBmdW5jdGlvbiBpZiBpbiBpbnRlcm5hbCBpbnRyaW5zaWMgaW52ZXJ0IGlzIGxldCBtdXRhYmxlIG5hbWVzcGFjZSBuZXcgbmV3dHlwZSBvcGVuIG9wZXJhdGlvbiByZXBlYXQgcmV0dXJuIHNlbGYgc2V0IHVudGlsIHVzZSB1c2luZyB3aGlsZSB3aXRoaW4nXG5cdH07XG5cdC8vIGtleXdvcmRzXG5cdGZ1bmN0aW9uIGtleXdvcmRzVG9QYXR0ZXJuKHdvcmRzKSB7XG5cdFx0cmV0dXJuICdcXFxcYig/OicgKyB3b3Jkcy50cmltKCkucmVwbGFjZSgvIC9nLCAnfCcpICsgJylcXFxcYic7XG5cdH1cblx0dmFyIGtleXdvcmRzID0gUmVnRXhwKGtleXdvcmRzVG9QYXR0ZXJuKGtleXdvcmRLaW5kcy50eXBlICsgJyAnICsga2V5d29yZEtpbmRzLm90aGVyKSk7XG5cblx0Ly8gdHlwZXNcblx0dmFyIGlkZW50aWZpZXIgPSAvXFxiW0EtWmEtel9dXFx3KlxcYi8uc291cmNlO1xuXHR2YXIgcXVhbGlmaWVkTmFtZSA9IHJlcGxhY2UoLzw8MD4+KD86XFxzKlxcLlxccyo8PDA+PikqLy5zb3VyY2UsIFtpZGVudGlmaWVyXSk7XG5cblx0dmFyIHR5cGVJbnNpZGUgPSB7XG5cdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHQncHVuY3R1YXRpb24nOiAvWzw+KCk/LC46W1xcXV0vXG5cdH07XG5cblx0Ly8gc3RyaW5nc1xuXHR2YXIgcmVndWxhclN0cmluZyA9IC9cIig/OlxcXFwufFteXFxcXFwiXSkqXCIvLnNvdXJjZTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucXNoYXJwID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdFx0J2NvbW1lbnQnOiAvXFwvXFwvLiovLFxuXHRcdCdzdHJpbmcnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IHJlKC8oXnxbXiRcXFxcXSk8PDA+Pi8uc291cmNlLCBbcmVndWxhclN0cmluZ10pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkNhbm9uO1xuXHRcdFx0XHQvLyBvcGVuIE1pY3Jvc29mdC5RdWFudHVtLkNhbm9uIGFzIENOO1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYig/OmFzfG9wZW4pXFxzKyk8PDA+Pig/PVxccyooPzo7fGFzXFxiKSkvLnNvdXJjZSwgW3F1YWxpZmllZE5hbWVdKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBuYW1lc3BhY2UgUXVhbnR1bS5BcHAxO1xuXHRcdFx0XHRwYXR0ZXJuOiByZSgvKFxcYm5hbWVzcGFjZVxccyspPDwwPj4oPz1cXHMqXFx7KS8uc291cmNlLCBbcXVhbGlmaWVkTmFtZV0pLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XSxcblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCdudW1iZXInOiAvKD86XFxiMCg/OnhbXFxkYS1mXSt8YlswMV0rfG9bMC03XSspfCg/OlxcQlxcLlxcZCt8XFxiXFxkKyg/OlxcLlxcZCopPykoPzplWy0rXT9cXGQrKT8pbD9cXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvXFxiYW5kPXxcXGJvcj18XFxiYW5kXFxifFxcYm5vdFxcYnxcXGJvclxcYnw8Wy09XXxbLT1dPnw+Pj49P3w8PDw9P3xcXF5cXF5cXF49P3xcXHxcXHxcXHw9P3wmJiY9P3x3XFwvPT98fn5+fFsqXFwvK1xcLV49ISVdPT8vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC86Onxbe31bXFxdOygpLC46XS9cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncXNoYXJwJywgJ251bWJlcicsIHtcblx0XHQncmFuZ2UnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuXFwuLyxcblx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0fVxuXHR9KTtcblxuXHQvLyBzaW5nbGUgbGluZVxuXHR2YXIgaW50ZXJwb2xhdGlvbkV4cHIgPSBuZXN0ZWQocmVwbGFjZSgvXFx7KD86W15cInt9XXw8PDA+Pnw8PHNlbGY+PikqXFx9Ly5zb3VyY2UsIFtyZWd1bGFyU3RyaW5nXSksIDIpO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3FzaGFycCcsICdzdHJpbmcnLCB7XG5cdFx0J2ludGVycG9sYXRpb24tc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogcmUoL1xcJFwiKD86XFxcXC58PDwwPj58W15cXFxcXCJ7XSkqXCIvLnNvdXJjZSwgW2ludGVycG9sYXRpb25FeHByXSksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmUoLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKik8PDA+Pi8uc291cmNlLCBbaW50ZXJwb2xhdGlvbkV4cHJdKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcXNoYXJwJyxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucXNoYXJwXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3RyaW5nJzogL1tcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5xcyA9IFByaXNtLmxhbmd1YWdlcy5xc2hhcnA7XG5cblByaXNtLmxhbmd1YWdlcy5xID0ge1xuXHQnc3RyaW5nJzogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdCdjb21tZW50JzogW1xuXHRcdC8vIEZyb20gaHR0cDovL2NvZGUua3guY29tL3dpa2kvUmVmZXJlbmNlL1NsYXNoOlxuXHRcdC8vIFdoZW4gLyBpcyBmb2xsb3dpbmcgYSBzcGFjZSAob3IgYSByaWdodCBwYXJlbnRoZXNpcywgYnJhY2tldCwgb3IgYnJhY2UpLCBpdCBpcyBpZ25vcmVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIGxpbmUuXG5cdFx0e1xuXG5cdFx0XHRwYXR0ZXJuOiAvKFtcXHQgKVxcXX1dKVxcLy4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdC8vIEZyb20gaHR0cDovL2NvZGUua3guY29tL3dpa2kvUmVmZXJlbmNlL1NsYXNoOlxuXHRcdC8vIEEgbGluZSB3aGljaCBoYXMgLyBhcyBpdHMgZmlyc3QgY2hhcmFjdGVyIGFuZCBjb250YWlucyBhdCBsZWFzdCBvbmUgb3RoZXIgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyIGlzIGEgd2hvbGUtbGluZSBjb21tZW50IGFuZCBpcyBpZ25vcmVkIGVudGlyZWx5LlxuXHRcdC8vIEEgLyBvbiBhIGxpbmUgYnkgaXRzZWxmIGJlZ2lucyBhIG11bHRpbGluZSBjb21tZW50IHdoaWNoIGlzIHRlcm1pbmF0ZWQgYnkgdGhlIG5leHQgXFwgb24gYSBsaW5lIGJ5IGl0c2VsZi5cblx0XHQvLyBJZiBhIC8gaXMgbm90IG1hdGNoZWQgYnkgYSBcXCwgdGhlIG11bHRpbGluZSBjb21tZW50IGlzIHVudGVybWluYXRlZCBhbmQgY29udGludWVzIHRvIGVuZCBvZiBmaWxlLlxuXHRcdC8vIFRoZSAvIGFuZCBcXCBtdXN0IGJlIHRoZSBmaXJzdCBjaGFyIG9uIHRoZSBsaW5lLCBidXQgbWF5IGJlIGZvbGxvd2VkIGJ5IGFueSBhbW91bnQgb2Ygd2hpdGVzcGFjZS5cblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxyP1xcbnxcXHIpXFwvW1xcdCBdKig/Oig/Olxccj9cXG58XFxyKSg/Oi4qKD86XFxyP1xcbnxcXHIoPyFcXG4pKSkqPyg/OlxcXFwoPz1bXFx0IF0qKD86XFxyP1xcbnxcXHIpKXwkKXxcXFMuKikvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0Ly8gRnJvbSBodHRwOi8vY29kZS5reC5jb20vd2lraS9SZWZlcmVuY2UvU2xhc2g6XG5cdFx0Ly8gQSBcXCBvbiBhIGxpbmUgYnkgaXRzZWxmIHdpdGggbm8gcHJlY2VkaW5nIG1hdGNoaW5nIC8gd2lsbCBjb21tZW50IHRvIGVuZCBvZiBmaWxlLlxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9eXFxcXFtcXHQgXSooPzpcXHI/XFxufFxccilbXFxzXFxTXSsvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL14jIS4rL20sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzeW1ib2wnOiAvYCg/OjpcXFMrfFtcXHcuXSopLyxcblx0J2RhdGV0aW1lJzoge1xuXHRcdHBhdHRlcm46IC8wTlttZHp1dnRdfDBXW2R0el18XFxkezR9XFwuXFxkXFxkKD86bXxcXC5cXGRcXGQoPzpUKD86XFxkXFxkKD86OlxcZFxcZCg/OjpcXGRcXGQoPzpbLjpdXFxkXFxkXFxkKT8pPyk/KT8pP1tkel0/KXxcXGRcXGQ6XFxkXFxkKD86OlxcZFxcZCg/OlsuOl1cXGRcXGRcXGQpPyk/W3V2dF0/Lyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0Ly8gVGhlIG5lZ2F0aXZlIGxvb2stYWhlYWQgcHJldmVudHMgYmFkIGhpZ2hsaWdodGluZ1xuXHQvLyBvZiB2ZXJicyAwOiBhbmQgMTpcblx0J251bWJlcic6IC9cXGIoPyFbMDFdOikoPzowTltoamVdP3wwV1toal0/fDBbd25dfDB4W1xcZGEtZkEtRl0rfFxcZCsoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT9baGpmZWJdPykvLFxuXHQna2V5d29yZCc6IC9cXFxcXFx3K1xcYnxcXGIoPzphYnN8YWNvc3xhajA/fGFsbHxhbmR8YW55fGFzY3xhc2lufGFzb2Z8YXRhbnxhdHRyfGF2Z3M/fGJpbnI/fGJ5fGNlaWxpbmd8Y29sc3xjb3J8Y29zfGNvdW50fGNvdnxjcm9zc3xjc3Z8Y3V0fGRlbGV0ZXxkZWx0YXN8ZGVzY3xkZXZ8ZGlmZmVyfGRpc3RpbmN0fGRpdnxkb3xkc2F2ZXxlanxlbmxpc3R8ZXZhbHxleGNlcHR8ZXhlY3xleGl0fGV4cHxmYnl8ZmlsbHN8Zmlyc3R8ZmtleXN8ZmxpcHxmbG9vcnxmcm9tfGdldHxnZXRlbnZ8Z3JvdXB8Z3RpbWV8aGNsb3NlfGhjb3VudHxoZGVsfGhvcGVufGhzeW18aWFzY3xpZGVudGl0eXxpZGVzY3xpZnxpanxpbnxpbnNlcnR8aW50ZXJ8aW52fGtleXM/fGxhc3R8bGlrZXxsaXN0fGxqZj98bG9hZHxsb2d8bG93ZXJ8bHNxfGx0aW1lfGx0cmltfG1hdmd8bWF4cz98bWNvdW50fG1kNXxtZGV2fG1lZHxtZXRhfG1pbnM/fG1tYXh8bW1pbnxtbXV8bW9kfG1zdW18bmVnfG5leHR8bm90fG51bGx8b3J8b3ZlcnxwYXJzZXxwZWFjaHxwanxwbGlzdHxwcmRzP3xwcmV2fHByaW9yfHJhbmR8cmFua3xyYXRpb3N8cmF6ZXxyZWFkMHxyZWFkMXxyZWNpcHJvY2FsfHJldmFsfHJldmVyc2V8cmxvYWR8cm90YXRlfHJzYXZlfHJ0cmltfHNhdmV8c2NhbnxzY292fHNkZXZ8c2VsZWN0fHNldHxzZXRlbnZ8c2hvd3xzaWdudW18c2lufHNxcnR8c3NyP3xzdHJpbmd8c3VibGlzdHxzdW1zP3xzdnxzdmFyfHN5c3RlbXx0YWJsZXN8dGFufHRpbHx0cmltfHR4Znx0eXBlfHVqfHVuZ3JvdXB8dW5pb258dXBkYXRlfHVwcGVyfHVwc2VydHx2YWx1ZXx2YXJ8dmlld3M/fHZzfHdhdmd8d2hlcmV8d2hpbGV8d2l0aGlufHdqMT98d3N1bXx3d3x4YXNjfHhiYXJ8eGNvbHM/fHhkZXNjfHhleHB8eGdyb3VwfHhrZXl8eGxvZ3x4cHJldnx4cmFuaylcXGIvLFxuXHQnYWR2ZXJiJzoge1xuXHRcdHBhdHRlcm46IC9bJ1xcL1xcXFxdOj98XFxiZWFjaFxcYi8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3ZlcmInOiB7XG5cdFx0cGF0dGVybjogLyg/OlxcQlxcLlxcQnxcXGJbMDFdOnw8Wz0+XT98Pj0/fFs6K1xcLSolLCE/fj18JCYjQF5dKTo/fFxcYl9cXGI6Py8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1soKXt9XFxbXFxdOy5dL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBqc1N0cmluZyA9IC9cIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCJ8Jyg/OlxcXFwufFteXFxcXCdcXHJcXG5dKSonLy5zb3VyY2U7XG5cdHZhciBqc0NvbW1lbnQgPSAvXFwvXFwvLiooPyEuKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLy8uc291cmNlO1xuXG5cdHZhciBqc0V4cHIgPSAvKD86W15cXFxcKClbXFxde31cIicvXXw8c3RyaW5nPnxcXC8oPyFbKi9dKXw8Y29tbWVudD58XFwoPGV4cHI+KlxcKXxcXFs8ZXhwcj4qXFxdfFxcezxleHByPipcXH18XFxcXFtcXHNcXFNdKS9cblx0XHQuc291cmNlLnJlcGxhY2UoLzxzdHJpbmc+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzU3RyaW5nOyB9KS5yZXBsYWNlKC88Y29tbWVudD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNDb21tZW50OyB9KTtcblxuXHQvLyB0aGUgcGF0dGVybiB3aWxsIGJsb3cgdXAsIHNvIG9ubHkgYSBmZXcgaXRlcmF0aW9uc1xuXHRmb3IgKHZhciBpID0gMDsgaSA8IDI7IGkrKykge1xuXHRcdGpzRXhwciA9IGpzRXhwci5yZXBsYWNlKC88ZXhwcj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4ganNFeHByOyB9KTtcblx0fVxuXHRqc0V4cHIgPSBqc0V4cHIucmVwbGFjZSgvPGV4cHI+L2csICdbXlxcXFxzXFxcXFNdJyk7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMucW1sID0ge1xuXHRcdCdjb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnamF2YXNjcmlwdC1mdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKCg/Ol58OylbIFxcdF0qKWZ1bmN0aW9uXFxzKyg/IVxccylbXyRhLXpBLVpcXHhBMC1cXHVGRkZGXSg/Oig/IVxccylbJFxcd1xceEEwLVxcdUZGRkZdKSpcXHMqXFwoPGpzPipcXClcXHMqXFx7PGpzPipcXH0vLnNvdXJjZS5yZXBsYWNlKC88anM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzRXhwcjsgfSksICdtJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0Jyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFs6O10pWyBcXHRdKikoPyFcXGQpXFx3Kyg/PVsgXFx0XSpcXHt8WyBcXHRdK29uXFxiKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J3Byb3BlcnR5JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58Wzt7XSlbIFxcdF0qKSg/IVxcZClcXHcrKD86XFwuXFx3KykqKD89WyBcXHRdKjopL20sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbO3tdKVsgXFx0XSopcHJvcGVydHlbIFxcdF0rKD8hXFxkKVxcdysoPzpcXC5cXHcrKSpbIFxcdF0rKD8hXFxkKVxcdysoPzpcXC5cXHcrKSooPz1bIFxcdF0qOikvbSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleXdvcmQnOiAvXnByb3BlcnR5Lyxcblx0XHRcdFx0XHQncHJvcGVydHknOiAvXFx3Kyg/OlxcLlxcdyspKi9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2phdmFzY3JpcHQtZXhwcmVzc2lvbic6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKDpbIFxcdF0qKSg/IVtcXHM7fVtdKSg/Oig/ISR8Wzt9XSk8anM+KSsvLnNvdXJjZS5yZXBsYWNlKC88anM+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGpzRXhwcjsgfSksICdtJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0Jyxcblx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLmphdmFzY3JpcHRcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YXN8aW1wb3J0fG9uKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF06OyxdL1xuXHR9O1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5xb3JlID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98KD86XFwvXFwvfCMpLiopLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdC8vIE92ZXJyaWRkZW4gdG8gYWxsb3cgdW5lc2NhcGVkIG11bHRpLWxpbmUgc3RyaW5nc1xuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGFueXxhc3NlcnR8YmluYXJ5fGJvb2x8Ym9vbGVhbnxicmVha3xieXRlfGNhc2V8Y2F0Y2h8Y2hhcnxjbGFzc3xjb2RlfGNvbnN0fGNvbnRpbnVlfGRhdGF8ZGVmYXVsdHxkb3xkb3VibGV8ZWxzZXxlbnVtfGV4dGVuZHN8ZmluYWx8ZmluYWxseXxmbG9hdHxmb3J8Z290b3xoYXNofGlmfGltcGxlbWVudHN8aW1wb3J0fGluaGVyaXRzfGluc3RhbmNlb2Z8aW50fGludGVyZmFjZXxsb25nfG15fG5hdGl2ZXxuZXd8bm90aGluZ3xudWxsfG9iamVjdHxvdXJ8b3dufHByaXZhdGV8cmVmZXJlbmNlfHJldGhyb3d8cmV0dXJufHNob3J0fHNvZnQoPzpib29sfGRhdGV8ZmxvYXR8aW50fGxpc3R8bnVtYmVyfHN0cmluZyl8c3RhdGljfHN0cmljdGZwfHN0cmluZ3xzdWJ8c3VwZXJ8c3dpdGNofHN5bmNocm9uaXplZHx0aGlzfHRocm93fHRocm93c3x0cmFuc2llbnR8dHJ5fHZvaWR8dm9sYXRpbGV8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcJD9cXGIoPyFcXGQpXFx3Kyg/PVxcKCkvLFxuXHQnbnVtYmVyJzogL1xcYig/OjBiWzAxXSt8MHgoPzpbXFxkYS1mXSpcXC4pP1tcXGRhLWZwXFwtXSt8KD86XFxkKyg/OlxcLlxcZCspP3xcXC5cXGQrKSg/OmVcXGQrKT9bZGZdfCg/OlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykpXFxiL2ksXG5cdCdvcGVyYXRvcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14uXSkoPzpcXCtbKz1dP3wtWy09XT98WyE9XSg/Oj09P3x+KT98Pj4/PT98PCg/Oj0+P3w8PT8pP3wmWyY9XT98XFx8W3w9XT98WypcXC8lXl09P3xbfj9dKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQndmFyaWFibGUnOiAvXFwkKD8hXFxkKVxcdytcXGIvXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLnIgPSB7XG5cdCdjb21tZW50JzogLyMuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbJ1wiXSkoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3BlcmNlbnQtb3BlcmF0b3InOiB7XG5cdFx0Ly8gSW5jbHVkZXMgdXNlci1kZWZpbmVkIG9wZXJhdG9yc1xuXHRcdC8vIGFuZCAlJSwgJSolLCAlLyUsICVpbiUsICVvJSwgJXglXG5cdFx0cGF0dGVybjogLyVbXiVcXHNdKiUvLFxuXHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OkZBTFNFfFRSVUUpXFxiLyxcblx0J2VsbGlwc2lzJzogL1xcLlxcLig/OlxcLnxcXGQrKS8sXG5cdCdudW1iZXInOiBbXG5cdFx0L1xcYig/OkluZnxOYU4pXFxiLyxcblx0XHQvKD86XFxiMHhbXFxkQS1GYS1mXSsoPzpcXC5cXGQqKT98XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OltFZVBwXVsrLV0/XFxkKyk/W2lMXT8vXG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/Ok5BfE5BX2NoYXJhY3Rlcl98TkFfY29tcGxleF98TkFfaW50ZWdlcl98TkFfcmVhbF98TlVMTHxicmVha3xlbHNlfGZvcnxmdW5jdGlvbnxpZnxpbnxuZXh0fHJlcGVhdHx3aGlsZSlcXGIvLFxuXHQnb3BlcmF0b3InOiAvLT4/Pj98PCg/Oj18PD8tKT98Wz49IV09P3w6Oj98JiY/fFxcfFxcfD98WysqXFwvXiRAfl0vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF0sO10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmFja2V0ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnc2NoZW1lJywge1xuXHQnbGFtYmRhLXBhcmFtZXRlcic6IHtcblx0XHQvLyB0aGUgcmFja2V0IGxhbWJkYSBzeW50YXggaXMgYSBsb3QgbW9yZSBjb21wbGV4LCBzbyB3ZSB3b24ndCBldmVuIGF0dGVtcHQgdG8gY2FwdHVyZSBpdC5cblx0XHQvLyB0aGlzIHdpbGwganVzdCBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcyBvZiB0aGUgYGZ1bmN0aW9uYCBwYXR0ZXJuXG5cdFx0cGF0dGVybjogLyhbKFxcW11sYW1iZGFcXHMrWyhcXFtdKVteKClcXFtcXF0nXFxzXSsvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3JhY2tldCcsICdzdHJpbmcnLCB7XG5cdCdsYW5nJzoge1xuXHRcdHBhdHRlcm46IC9eI2xhbmcuKy9tLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucmt0ID0gUHJpc20ubGFuZ3VhZ2VzLnJhY2tldDtcblxuLy8gRG9jczpcbi8vIGh0dHBzOi8vZG9jcy5taWNyb3NvZnQuY29tL2VuLXVzL2FzcG5ldC9jb3JlL3Jhem9yLXBhZ2VzLz92aWV3PWFzcG5ldGNvcmUtNS4wJnRhYnM9dmlzdWFsLXN0dWRpb1xuLy8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvYXNwbmV0L2NvcmUvbXZjL3ZpZXdzL3Jhem9yP3ZpZXc9YXNwbmV0Y29yZS01LjBcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBjb21tZW50TGlrZSA9IC9cXC8oPyFbLypdKXxcXC9cXC8uKltcXHJcXG5dfFxcL1xcKlteKl0qKD86XFwqKD8hXFwvKVteKl0qKSpcXCpcXC8vLnNvdXJjZTtcblx0dmFyIHN0cmluZ0xpa2UgPVxuXHRcdC9AKD8hXCIpfFwiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcInxAXCIoPzpbXlxcXFxcIl18XCJcInxcXFxcW1xcc1xcU10pKlwiKD8hXCIpLy5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0LycoPzooPzpbXlxcclxcbidcXFxcXXxcXFxcLnxcXFxcW1V1eF1bXFxkYS1mQS1GXXsxLDh9KSd8KD89W15cXFxcXSg/IScpKSkvLnNvdXJjZTtcblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5lc3RlZCBwYXR0ZXJuIHdoZXJlIGFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgc3RyaW5nIGA8PHNlbGY+PmAgYXJlIHJlcGxhY2VkIHdpdGggdGhlIHBhdHRlcm4gaXRzZWxmLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gcGF0dGVyblxuXHQgKiBAcGFyYW0ge251bWJlcn0gZGVwdGhMb2cyXG5cdCAqIEByZXR1cm5zIHtzdHJpbmd9XG5cdCAqL1xuXHRmdW5jdGlvbiBuZXN0ZWQocGF0dGVybiwgZGVwdGhMb2cyKSB7XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBkZXB0aExvZzI7IGkrKykge1xuXHRcdFx0cGF0dGVybiA9IHBhdHRlcm4ucmVwbGFjZSgvPHNlbGY+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcoPzonICsgcGF0dGVybiArICcpJzsgfSk7XG5cdFx0fVxuXHRcdHJldHVybiBwYXR0ZXJuXG5cdFx0XHQucmVwbGFjZSgvPHNlbGY+L2csICdbXlxcXFxzXFxcXFNdJylcblx0XHRcdC5yZXBsYWNlKC88c3RyPi9nLCAnKD86JyArIHN0cmluZ0xpa2UgKyAnKScpXG5cdFx0XHQucmVwbGFjZSgvPGNvbW1lbnQ+L2csICcoPzonICsgY29tbWVudExpa2UgKyAnKScpO1xuXHR9XG5cblx0dmFyIHJvdW5kID0gbmVzdGVkKC9cXCgoPzpbXigpJ1wiQC9dfDxzdHI+fDxjb21tZW50Pnw8c2VsZj4pKlxcKS8uc291cmNlLCAyKTtcblx0dmFyIHNxdWFyZSA9IG5lc3RlZCgvXFxbKD86W15cXFtcXF0nXCJAL118PHN0cj58PGNvbW1lbnQ+fDxzZWxmPikqXFxdLy5zb3VyY2UsIDEpO1xuXHR2YXIgY3VybHkgPSBuZXN0ZWQoL1xceyg/Oltee30nXCJAL118PHN0cj58PGNvbW1lbnQ+fDxzZWxmPikqXFx9Ly5zb3VyY2UsIDIpO1xuXHR2YXIgYW5nbGUgPSBuZXN0ZWQoLzwoPzpbXjw+J1wiQC9dfDxjb21tZW50Pnw8c2VsZj4pKj4vLnNvdXJjZSwgMSk7XG5cblx0dmFyIGlubGluZUNzID0gL0AvLnNvdXJjZSArXG5cdFx0Lyg/OmF3YWl0XFxiXFxzKik/Ly5zb3VyY2UgK1xuXHRcdCcoPzonICsgLyg/IWF3YWl0XFxiKVxcdytcXGIvLnNvdXJjZSArICd8JyArIHJvdW5kICsgJyknICtcblx0XHQnKD86JyArIC9bPyFdP1xcLlxcdytcXGIvLnNvdXJjZSArICd8JyArICcoPzonICsgYW5nbGUgKyAnKT8nICsgcm91bmQgKyAnfCcgKyBzcXVhcmUgKyAnKSonICtcblx0XHQvKD8hWz8hXFwuKFxcW118PCg/IVxcLykpLy5zb3VyY2U7XG5cblx0Ly8gTm90ZSBhYm91dCB0aGUgYWJvdmUgYnJhY2tldCBwYXR0ZXJuczpcblx0Ly8gVGhleSBhbGwgaWdub3JlIEhUTUwgZXhwcmVzc2lvbnMgdGhhdCBtaWdodCBiZSBpbiB0aGUgQyMgY29kZS4gVGhpcyBpcyBhIHByb2JsZW0gYmVjYXVzZSBIVE1MIChsaWtlIHN0cmluZ3MgYW5kXG5cdC8vIGNvbW1lbnRzKSBpcyBwYXJzZWQgZGlmZmVyZW50bHkuIFRoaXMgaXMgYSBodWdlIHByb2JsZW0gYmVjYXVzZSBIVE1MIG1pZ2h0IGNvbnRhaW4gYnJhY2tldHMgYW5kIHF1b3RlcyB3aGljaFxuXHQvLyBtZXNzZXMgdXAgdGhlIGJyYWNrZXQgYW5kIHN0cmluZyBjb3VudGluZyBpbXBsZW1lbnRlZCBieSB0aGUgYWJvdmUgcGF0dGVybnMuXG5cdC8vXG5cdC8vIFRoaXMgcHJvYmxlbSBpcyBub3QgZml4YWJsZSBiZWNhdXNlIDEpIEhUTUwgZXhwcmVzc2lvbiBhcmUgaGlnaGx5IGNvbnRleHQgc2Vuc2l0aXZlIGFuZCB2ZXJ5IGRpZmZpY3VsdCB0byBkZXRlY3Rcblx0Ly8gYW5kIDIpIHRoZXkgcmVxdWlyZSBvbmUgY2FwdHVyaW5nIGdyb3VwIGF0IGV2ZXJ5IG5lc3RlZCBsZXZlbC4gU2VlIHRoZSBgdGFnUmVnaW9uYCBwYXR0ZXJuIHRvIGFkbWlyZSB0aGVcblx0Ly8gY29tcGxleGl0eSBvZiBhbiBIVE1MIGV4cHJlc3Npb24uXG5cdC8vXG5cdC8vIFRvIHNvbWV3aGF0IGFsbGV2aWF0ZSB0aGUgcHJvYmxlbSBhIGJpdCwgdGhlIHBhdHRlcm5zIGZvciBjaGFyYWN0ZXJzIChlLmcuICdhJykgaXMgdmVyeSBwZXJtaXNzaXZlLCBpdCBhbHNvXG5cdC8vIGFsbG93cyBpbnZhbGlkIGNoYXJhY3RlcnMgdG8gc3VwcG9ydCBIVE1MIGV4cHJlc3Npb25zIGxpa2UgdGhpczogPHA+VGhhdCdzIGl0ITwvcD4uXG5cblx0dmFyIHRhZ0F0dHJJbmxpbmVDcyA9IC9AKD8hW1xcdygpXSkvLnNvdXJjZSArICd8JyArIGlubGluZUNzO1xuXHR2YXIgdGFnQXR0clZhbHVlID0gJyg/OicgK1xuXHRcdC9cIlteXCJAXSpcInwnW14nQF0qJ3xbXlxccydcIkA+PV0rKD89W1xccz5dKS8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdCdbXCJcXCddW15cIlxcJ0BdKig/Oig/OicgKyB0YWdBdHRySW5saW5lQ3MgKyAnKVteXCJcXCdAXSopK1tcIlxcJ10nICtcblx0XHQnKSc7XG5cblx0dmFyIHRhZ0F0dHJzID0gLyg/Olxccyg/OlxccypbXlxccz5cXC89XSsoPzpcXHMqPVxccyo8dGFnQXR0clZhbHVlPnwoPz1bXFxzLz5dKSkpKyk/Ly5zb3VyY2UucmVwbGFjZSgvPHRhZ0F0dHJWYWx1ZT4vLCB0YWdBdHRyVmFsdWUpO1xuXHR2YXIgdGFnQ29udGVudCA9IC8oPyFcXGQpW15cXHM+XFwvPSQ8JV0rLy5zb3VyY2UgKyB0YWdBdHRycyArIC9cXHMqXFwvPz4vLnNvdXJjZTtcblx0dmFyIHRhZ1JlZ2lvbiA9XG5cdFx0L1xcQkA/Ly5zb3VyY2UgK1xuXHRcdCcoPzonICtcblx0XHQvPChbYS16QS1aXVtcXHc6XSopLy5zb3VyY2UgKyB0YWdBdHRycyArIC9cXHMqPi8uc291cmNlICtcblx0XHQnKD86JyArXG5cdFx0KFxuXHRcdFx0L1tePF0vLnNvdXJjZSArXG5cdFx0XHQnfCcgK1xuXHRcdFx0Ly8gYWxsIHRhZ3MgdGhhdCBhcmUgbm90IHRoZSBzdGFydCB0YWdcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHQvPFxcLz8oPyFcXDFcXGIpLy5zb3VyY2UgKyB0YWdDb250ZW50ICtcblx0XHRcdCd8JyArXG5cdFx0XHQvLyBuZXN0ZWQgc3RhcnQgdGFnXG5cdFx0XHRuZXN0ZWQoXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdC88XFwxLy5zb3VyY2UgKyB0YWdBdHRycyArIC9cXHMqPi8uc291cmNlICtcblx0XHRcdFx0Jyg/OicgK1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0L1tePF0vLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyBhbGwgdGFncyB0aGF0IGFyZSBub3QgdGhlIHN0YXJ0IHRhZ1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdFx0LzxcXC8/KD8hXFwxXFxiKS8uc291cmNlICsgdGFnQ29udGVudCArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQnPHNlbGY+J1xuXHRcdFx0XHQpICtcblx0XHRcdFx0JykqJyArXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0XHRcdC88XFwvXFwxXFxzKj4vLnNvdXJjZSxcblx0XHRcdFx0MlxuXHRcdFx0KVxuXHRcdCkgK1xuXHRcdCcpKicgK1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvc3RyaWN0XG5cdFx0LzxcXC9cXDFcXHMqPi8uc291cmNlICtcblx0XHQnfCcgK1xuXHRcdC88Ly5zb3VyY2UgKyB0YWdDb250ZW50ICtcblx0XHQnKSc7XG5cblx0Ly8gTm93IGZvciB0aGUgYWN0dWFsIGxhbmd1YWdlIGRlZmluaXRpb24ocyk6XG5cdC8vXG5cdC8vIFJhem9yIGFzIGEgbGFuZ3VhZ2UgaGFzIDIgcGFydHM6XG5cdC8vICAxKSBDU0hUTUw6IEEgbWFya3VwLWxpa2UgbGFuZ3VhZ2UgdGhhdCBoYXMgYmVlbiBleHRlbmRlZCB3aXRoIGlubGluZSBDIyBjb2RlIGV4cHJlc3Npb25zIGFuZCBibG9ja3MuXG5cdC8vICAyKSBDIytIVE1MOiBBIHZhcmlhbnQgb2YgQyMgdGhhdCBjYW4gY29udGFpbiBDU0hUTUwgdGFncyBhcyBleHByZXNzaW9ucy5cblx0Ly9cblx0Ly8gSW4gdGhlIGJlbG93IGNvZGUsIGJvdGggQ1NIVE1MIGFuZCBDIytIVE1MIHdpbGwgYmUgY3JlYXRlIGFzIHNlcGFyYXRlIGxhbmd1YWdlIGRlZmluaXRpb25zIHRoYXQgcmVmZXJlbmNlIGVhY2hcblx0Ly8gb3RoZXIuIEhvd2V2ZXIsIG9ubHkgQ1NIVE1MIHdpbGwgYmUgZXhwb3J0ZWQgdmlhIGBQcmlzbS5sYW5ndWFnZXNgLlxuXG5cdFByaXNtLmxhbmd1YWdlcy5jc2h0bWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7fSk7XG5cblx0dmFyIGNzaGFycFdpdGhIdG1sID0gUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnY3NoYXJwJywgJ3N0cmluZycsIHtcblx0XHQnaHRtbCc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCh0YWdSZWdpb24pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuY3NodG1sXG5cdFx0fSxcblx0fSwgeyBjc2hhcnA6IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NzaGFycCcsIHt9KSB9KTtcblxuXHR2YXIgY3MgPSB7XG5cdFx0cGF0dGVybjogL1xcU1tcXHNcXFNdKi8sXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS1jc2hhcnAnLFxuXHRcdGluc2lkZTogY3NoYXJwV2l0aEh0bWxcblx0fTtcblxuXHR2YXIgaW5saW5lVmFsdWUgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbXkBdKS8uc291cmNlICsgaW5saW5lQ3MpLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXkAvLFxuXHRcdFx0J2NzaGFycCc6IGNzXG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5jc2h0bWwudGFnLnBhdHRlcm4gPSBSZWdFeHAoLzxcXC8/Ly5zb3VyY2UgKyB0YWdDb250ZW50KTtcblx0UHJpc20ubGFuZ3VhZ2VzLmNzaHRtbC50YWcuaW5zaWRlWydhdHRyLXZhbHVlJ10ucGF0dGVybiA9IFJlZ0V4cCgvPVxccyovLnNvdXJjZSArIHRhZ0F0dHJWYWx1ZSk7XG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdwdW5jdHVhdGlvbicsIHsgJ3ZhbHVlJzogaW5saW5lVmFsdWUgfSwgUHJpc20ubGFuZ3VhZ2VzLmNzaHRtbC50YWcuaW5zaWRlWydhdHRyLXZhbHVlJ10pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2NzaHRtbCcsICdwcm9sb2cnLCB7XG5cdFx0J3Jhem9yLWNvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvQFxcKltcXHNcXFNdKj9cXCpALyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHR9LFxuXG5cdFx0J2Jsb2NrJzoge1xuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKF58W15AXSlALy5zb3VyY2UgK1xuXHRcdFx0XHQnKD86JyArXG5cdFx0XHRcdFtcblx0XHRcdFx0XHQvLyBAeyAuLi4gfVxuXHRcdFx0XHRcdGN1cmx5LFxuXHRcdFx0XHRcdC8vIEBjb2RleyAuLi4gfVxuXHRcdFx0XHRcdC8oPzpjb2RlfGZ1bmN0aW9ucylcXHMqLy5zb3VyY2UgKyBjdXJseSxcblx0XHRcdFx0XHQvLyBAZm9yICguLi4pIHsgLi4uIH1cblx0XHRcdFx0XHQvKD86Zm9yfGZvcmVhY2h8bG9ja3xzd2l0Y2h8dXNpbmd8d2hpbGUpXFxzKi8uc291cmNlICsgcm91bmQgKyAvXFxzKi8uc291cmNlICsgY3VybHksXG5cdFx0XHRcdFx0Ly8gQGRvIHsgLi4uIH0gd2hpbGUgKC4uLik7XG5cdFx0XHRcdFx0L2RvXFxzKi8uc291cmNlICsgY3VybHkgKyAvXFxzKndoaWxlXFxzKi8uc291cmNlICsgcm91bmQgKyAvKD86XFxzKjspPy8uc291cmNlLFxuXHRcdFx0XHRcdC8vIEB0cnkgeyAuLi4gfSBjYXRjaCAoLi4uKSB7IC4uLiB9IGZpbmFsbHkgeyAuLi4gfVxuXHRcdFx0XHRcdC90cnlcXHMqLy5zb3VyY2UgKyBjdXJseSArIC9cXHMqY2F0Y2hcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSArIC9cXHMqZmluYWxseVxccyovLnNvdXJjZSArIGN1cmx5LFxuXHRcdFx0XHRcdC8vIEBpZiAoLi4uKSB7Li4ufSBlbHNlIGlmICguLi4pIHsuLi59IGVsc2Ugey4uLn1cblx0XHRcdFx0XHQvaWZcXHMqLy5zb3VyY2UgKyByb3VuZCArIC9cXHMqLy5zb3VyY2UgKyBjdXJseSArICcoPzonICsgL1xccyplbHNlLy5zb3VyY2UgKyAnKD86JyArIC9cXHMraWZcXHMqLy5zb3VyY2UgKyByb3VuZCArICcpPycgKyAvXFxzKi8uc291cmNlICsgY3VybHkgKyAnKSonLFxuXHRcdFx0XHRcdC8vIEBoZWxwZXIgSWRlbnQocGFyYW1zKSB7IC4uLiB9XG5cdFx0XHRcdFx0L2hlbHBlclxccytcXHcrXFxzKi8uc291cmNlICsgcm91bmQgKyAvXFxzKi8uc291cmNlICsgY3VybHksXG5cdFx0XHRcdF0uam9pbignfCcpICtcblx0XHRcdFx0JyknXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IC9eQFxcdyovLFxuXHRcdFx0XHQnY3NoYXJwJzogY3Ncblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopQCg/OmFkZFRhZ0hlbHBlcnxhdHRyaWJ1dGV8aW1wbGVtZW50c3xpbmhlcml0c3xpbmplY3R8bGF5b3V0fG1vZGVsfG5hbWVzcGFjZXxwYWdlfHByZXNlcnZld2hpdGVzcGFjZXxyZW1vdmVUYWdIZWxwZXJ8c2VjdGlvbnx0YWdIZWxwZXJQcmVmaXh8dXNpbmcpKD89XFxzKS4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15AXFx3Ky8sXG5cdFx0XHRcdCdjc2hhcnAnOiBjc1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQndmFsdWUnOiBpbmxpbmVWYWx1ZSxcblxuXHRcdCdkZWxlZ2F0ZS1vcGVyYXRvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXkBdKUAoPz08KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5yYXpvciA9IFByaXNtLmxhbmd1YWdlcy5jc2h0bWw7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBqYXZhc2NyaXB0ID0gUHJpc20udXRpbC5jbG9uZShQcmlzbS5sYW5ndWFnZXMuamF2YXNjcmlwdCk7XG5cblx0dmFyIHNwYWNlID0gLyg/Olxcc3xcXC9cXC8uKig/IS4pfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSlcXCpcXC8pLy5zb3VyY2U7XG5cdHZhciBicmFjZXMgPSAvKD86XFx7KD86XFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH18W157fV0pKlxcfSkvLnNvdXJjZTtcblx0dmFyIHNwcmVhZCA9IC8oPzpcXHs8Uz4qXFwuezN9KD86W157fV18PEJSQUNFUz4pKlxcfSkvLnNvdXJjZTtcblxuXHQvKipcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNvdXJjZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKi9cblx0ZnVuY3Rpb24gcmUoc291cmNlLCBmbGFncykge1xuXHRcdHNvdXJjZSA9IHNvdXJjZVxuXHRcdFx0LnJlcGxhY2UoLzxTPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzcGFjZTsgfSlcblx0XHRcdC5yZXBsYWNlKC88QlJBQ0VTPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBicmFjZXM7IH0pXG5cdFx0XHQucmVwbGFjZSgvPFNQUkVBRD4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3ByZWFkOyB9KTtcblx0XHRyZXR1cm4gUmVnRXhwKHNvdXJjZSwgZmxhZ3MpO1xuXHR9XG5cblx0c3ByZWFkID0gcmUoc3ByZWFkKS5zb3VyY2U7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMuanN4ID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywgamF2YXNjcmlwdCk7XG5cdFByaXNtLmxhbmd1YWdlcy5qc3gudGFnLnBhdHRlcm4gPSByZShcblx0XHQvPFxcLz8oPzpbXFx3LjotXSsoPzo8Uz4rKD86W1xcdy46JC1dKyg/Oj0oPzpcIig/OlxcXFxbXFxzXFxTXXxbXlxcXFxcIl0pKlwifCcoPzpcXFxcW1xcc1xcU118W15cXFxcJ10pKid8W15cXHN7J1wiLz49XSt8PEJSQUNFUz4pKT98PFNQUkVBRD4pKSo8Uz4qXFwvPyk/Pi8uc291cmNlXG5cdCk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcuaW5zaWRlWyd0YWcnXS5wYXR0ZXJuID0gL148XFwvP1teXFxzPlxcL10qLztcblx0UHJpc20ubGFuZ3VhZ2VzLmpzeC50YWcuaW5zaWRlWydhdHRyLXZhbHVlJ10ucGF0dGVybiA9IC89KD8hXFx7KSg/OlwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCJ8Jyg/OlxcXFxbXFxzXFxTXXxbXlxcXFwnXSkqJ3xbXlxccydcIj5dKykvO1xuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ3RhZyddLmluc2lkZVsnY2xhc3MtbmFtZSddID0gL15bQS1aXVxcdyooPzpcXC5bQS1aXVxcdyopKiQvO1xuXHRQcmlzbS5sYW5ndWFnZXMuanN4LnRhZy5pbnNpZGVbJ2NvbW1lbnQnXSA9IGphdmFzY3JpcHRbJ2NvbW1lbnQnXTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAnYXR0ci1uYW1lJywge1xuXHRcdCdzcHJlYWQnOiB7XG5cdFx0XHRwYXR0ZXJuOiByZSgvPFNQUkVBRD4vLnNvdXJjZSksXG5cdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5qc3hcblx0XHR9XG5cdH0sIFByaXNtLmxhbmd1YWdlcy5qc3gudGFnKTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdpbnNpZGUnLCAnc3BlY2lhbC1hdHRyJywge1xuXHRcdCdzY3JpcHQnOiB7XG5cdFx0XHQvLyBBbGxvdyBmb3IgdHdvIGxldmVscyBvZiBuZXN0aW5nXG5cdFx0XHRwYXR0ZXJuOiByZSgvPTxCUkFDRVM+Ly5zb3VyY2UpLFxuXHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1qYXZhc2NyaXB0Jyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnc2NyaXB0LXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9ePSg/PVxceykvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5qc3hcblx0XHRcdH0sXG5cdFx0fVxuXHR9LCBQcmlzbS5sYW5ndWFnZXMuanN4LnRhZyk7XG5cblx0Ly8gVGhlIGZvbGxvd2luZyB3aWxsIGhhbmRsZSBwbGFpbiB0ZXh0IGluc2lkZSB0YWdzXG5cdHZhciBzdHJpbmdpZnlUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdGlmICghdG9rZW4pIHtcblx0XHRcdHJldHVybiAnJztcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiB0b2tlbjtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB0b2tlbi5jb250ZW50ID09PSAnc3RyaW5nJykge1xuXHRcdFx0cmV0dXJuIHRva2VuLmNvbnRlbnQ7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbi5jb250ZW50Lm1hcChzdHJpbmdpZnlUb2tlbikuam9pbignJyk7XG5cdH07XG5cblx0dmFyIHdhbGtUb2tlbnMgPSBmdW5jdGlvbiAodG9rZW5zKSB7XG5cdFx0dmFyIG9wZW5lZFRhZ3MgPSBbXTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKykge1xuXHRcdFx0dmFyIHRva2VuID0gdG9rZW5zW2ldO1xuXHRcdFx0dmFyIG5vdFRhZ05vckJyYWNlID0gZmFsc2U7XG5cblx0XHRcdGlmICh0eXBlb2YgdG9rZW4gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmICh0b2tlbi50eXBlID09PSAndGFnJyAmJiB0b2tlbi5jb250ZW50WzBdICYmIHRva2VuLmNvbnRlbnRbMF0udHlwZSA9PT0gJ3RhZycpIHtcblx0XHRcdFx0XHQvLyBXZSBmb3VuZCBhIHRhZywgbm93IGZpbmQgaXRzIGtpbmRcblxuXHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50WzBdLmNvbnRlbnRbMF0uY29udGVudCA9PT0gJzwvJykge1xuXHRcdFx0XHRcdFx0Ly8gQ2xvc2luZyB0YWdcblx0XHRcdFx0XHRcdGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLnRhZ05hbWUgPT09IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSkpIHtcblx0XHRcdFx0XHRcdFx0Ly8gUG9wIG1hdGNoaW5nIG9wZW5pbmcgdGFnXG5cdFx0XHRcdFx0XHRcdG9wZW5lZFRhZ3MucG9wKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGlmICh0b2tlbi5jb250ZW50W3Rva2VuLmNvbnRlbnQubGVuZ3RoIC0gMV0uY29udGVudCA9PT0gJy8+Jykge1xuXHRcdFx0XHRcdFx0XHQvLyBBdXRvY2xvc2VkIHRhZywgaWdub3JlXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBPcGVuaW5nIHRhZ1xuXHRcdFx0XHRcdFx0XHRvcGVuZWRUYWdzLnB1c2goe1xuXHRcdFx0XHRcdFx0XHRcdHRhZ05hbWU6IHN0cmluZ2lmeVRva2VuKHRva2VuLmNvbnRlbnRbMF0uY29udGVudFsxXSksXG5cdFx0XHRcdFx0XHRcdFx0b3BlbmVkQnJhY2VzOiAwXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgdG9rZW4udHlwZSA9PT0gJ3B1bmN0dWF0aW9uJyAmJiB0b2tlbi5jb250ZW50ID09PSAneycpIHtcblxuXHRcdFx0XHRcdC8vIEhlcmUgd2UgbWlnaHQgaGF2ZSBlbnRlcmVkIGEgSlNYIGNvbnRleHQgaW5zaWRlIGEgdGFnXG5cdFx0XHRcdFx0b3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcysrO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAob3BlbmVkVGFncy5sZW5ndGggPiAwICYmIG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMgPiAwICYmIHRva2VuLnR5cGUgPT09ICdwdW5jdHVhdGlvbicgJiYgdG9rZW4uY29udGVudCA9PT0gJ30nKSB7XG5cblx0XHRcdFx0XHQvLyBIZXJlIHdlIG1pZ2h0IGhhdmUgbGVmdCBhIEpTWCBjb250ZXh0IGluc2lkZSBhIHRhZ1xuXHRcdFx0XHRcdG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMtLTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG5vdFRhZ05vckJyYWNlID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0aWYgKG5vdFRhZ05vckJyYWNlIHx8IHR5cGVvZiB0b2tlbiA9PT0gJ3N0cmluZycpIHtcblx0XHRcdFx0aWYgKG9wZW5lZFRhZ3MubGVuZ3RoID4gMCAmJiBvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzID09PSAwKSB7XG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBhcmUgaW5zaWRlIGEgdGFnLCBhbmQgbm90IGluc2lkZSBhIEpTWCBjb250ZXh0LlxuXHRcdFx0XHRcdC8vIFRoYXQncyBwbGFpbiB0ZXh0OiBkcm9wIGFueSB0b2tlbnMgbWF0Y2hlZC5cblx0XHRcdFx0XHR2YXIgcGxhaW5UZXh0ID0gc3RyaW5naWZ5VG9rZW4odG9rZW4pO1xuXG5cdFx0XHRcdFx0Ly8gQW5kIG1lcmdlIHRleHQgd2l0aCBhZGphY2VudCB0ZXh0XG5cdFx0XHRcdFx0aWYgKGkgPCB0b2tlbnMubGVuZ3RoIC0gMSAmJiAodHlwZW9mIHRva2Vuc1tpICsgMV0gPT09ICdzdHJpbmcnIHx8IHRva2Vuc1tpICsgMV0udHlwZSA9PT0gJ3BsYWluLXRleHQnKSkge1xuXHRcdFx0XHRcdFx0cGxhaW5UZXh0ICs9IHN0cmluZ2lmeVRva2VuKHRva2Vuc1tpICsgMV0pO1xuXHRcdFx0XHRcdFx0dG9rZW5zLnNwbGljZShpICsgMSwgMSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmIChpID4gMCAmJiAodHlwZW9mIHRva2Vuc1tpIC0gMV0gPT09ICdzdHJpbmcnIHx8IHRva2Vuc1tpIC0gMV0udHlwZSA9PT0gJ3BsYWluLXRleHQnKSkge1xuXHRcdFx0XHRcdFx0cGxhaW5UZXh0ID0gc3RyaW5naWZ5VG9rZW4odG9rZW5zW2kgLSAxXSkgKyBwbGFpblRleHQ7XG5cdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKGkgLSAxLCAxKTtcblx0XHRcdFx0XHRcdGktLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHR0b2tlbnNbaV0gPSBuZXcgUHJpc20uVG9rZW4oJ3BsYWluLXRleHQnLCBwbGFpblRleHQsIG51bGwsIHBsYWluVGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHRva2VuLmNvbnRlbnQgJiYgdHlwZW9mIHRva2VuLmNvbnRlbnQgIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdHdhbGtUb2tlbnModG9rZW4uY29udGVudCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKGVudi5sYW5ndWFnZSAhPT0gJ2pzeCcgJiYgZW52Lmxhbmd1YWdlICE9PSAndHN4Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdHZhciB0eXBlc2NyaXB0ID0gUHJpc20udXRpbC5jbG9uZShQcmlzbS5sYW5ndWFnZXMudHlwZXNjcmlwdCk7XG5cdFByaXNtLmxhbmd1YWdlcy50c3ggPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdqc3gnLCB0eXBlc2NyaXB0KTtcblxuXHQvLyBkb2Vzbid0IHdvcmsgd2l0aCBUUyBiZWNhdXNlIFRTIGlzIHRvbyBjb21wbGV4XG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMudHN4WydwYXJhbWV0ZXInXTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy50c3hbJ2xpdGVyYWwtcHJvcGVydHknXTtcblxuXHQvLyBUaGlzIHdpbGwgcHJldmVudCBjb2xsaXNpb25zIGJldHdlZW4gVFNYIHRhZ3MgYW5kIFRTIGdlbmVyaWMgdHlwZXMuXG5cdC8vIElkZWEgYnkgaHR0cHM6Ly9naXRodWIuY29tL2thcmxob3JreVxuXHQvLyBEaXNjdXNzaW9uOiBodHRwczovL2dpdGh1Yi5jb20vUHJpc21KUy9wcmlzbS9pc3N1ZXMvMjU5NCNpc3N1ZWNvbW1lbnQtNzEwNjY2OTI4XG5cdHZhciB0YWcgPSBQcmlzbS5sYW5ndWFnZXMudHN4LnRhZztcblx0dGFnLnBhdHRlcm4gPSBSZWdFeHAoLyhefFteXFx3JF18KD89PFxcLykpLy5zb3VyY2UgKyAnKD86JyArIHRhZy5wYXR0ZXJuLnNvdXJjZSArICcpJywgdGFnLnBhdHRlcm4uZmxhZ3MpO1xuXHR0YWcubG9va2JlaGluZCA9IHRydWU7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5yZWFzb24gPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlxcXFxcXHJcXG5cIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gJ2NsYXNzLW5hbWUnIG11c3QgYmUgbWF0Y2hlZCAqYWZ0ZXIqICdjb25zdHJ1Y3RvcicgZGVmaW5lZCBiZWxvd1xuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVxcdyovLFxuXHQna2V5d29yZCc6IC9cXGIoPzphbmR8YXN8YXNzZXJ0fGJlZ2lufGNsYXNzfGNvbnN0cmFpbnR8ZG98ZG9uZXxkb3dudG98ZWxzZXxlbmR8ZXhjZXB0aW9ufGV4dGVybmFsfGZvcnxmdW58ZnVuY3Rpb258ZnVuY3RvcnxpZnxpbnxpbmNsdWRlfGluaGVyaXR8aW5pdGlhbGl6ZXJ8bGF6eXxsZXR8bWV0aG9kfG1vZHVsZXxtdXRhYmxlfG5ld3xub25yZWN8b2JqZWN0fG9mfG9wZW58b3J8cHJpdmF0ZXxyZWN8c2lnfHN0cnVjdHxzd2l0Y2h8dGhlbnx0b3x0cnl8dHlwZXx2YWx8dmlydHVhbHx3aGVufHdoaWxlfHdpdGgpXFxiLyxcblx0J29wZXJhdG9yJzogL1xcLnszfXw6Wzo9XXxcXHw+fC0+fD0oPzo9PT98Pik/fDw9P3w+PT98W3xePycjIX5gXXxbK1xcLSpcXC9dXFwuP3xcXGIoPzphc3J8bGFuZHxsb3J8bHNsfGxzcnxseG9yfG1vZClcXGIvXG59KTtcblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3JlYXNvbicsICdjbGFzcy1uYW1lJywge1xuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OlxcXFx4W1xcZGEtZl17Mn18XFxcXG9bMC0zXVswLTddWzAtN118XFxcXFxcZHszfXxcXFxcLnxbXidcXFxcXFxyXFxuXSknLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gTmVnYXRpdmUgbG9vay1haGVhZCBwcmV2ZW50cyBmcm9tIG1hdGNoaW5nIHRoaW5ncyBsaWtlIFN0cmluZy5jYXBpdGFsaXplXG5cdCdjb25zdHJ1Y3Rvcic6IC9cXGJbQS1aXVxcdypcXGIoPyFcXHMqXFwuKS8sXG5cdCdsYWJlbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiW2Etel1cXHcqKD89OjopLyxcblx0XHRhbGlhczogJ3N5bWJvbCdcblx0fVxufSk7XG5cbi8vIFdlIGNhbid0IG1hdGNoIGZ1bmN0aW9ucyBwcm9wZXJ0eSwgc28gbGV0J3Mgbm90IGV2ZW4gdHJ5LlxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5yZWFzb24uZnVuY3Rpb247XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIgc3BlY2lhbEVzY2FwZSA9IHtcblx0XHRwYXR0ZXJuOiAvXFxcXFtcXFxcKCl7fVtcXF1eJCsqP3wuXS8sXG5cdFx0YWxpYXM6ICdlc2NhcGUnXG5cdH07XG5cdHZhciBlc2NhcGUgPSAvXFxcXCg/OnhbXFxkYS1mQS1GXXsyfXx1W1xcZGEtZkEtRl17NH18dVxce1tcXGRhLWZBLUZdK1xcfXwwWzAtN117MCwyfXxbMTIzXVswLTddezJ9fGNbYS16QS1aXXwuKS87XG5cdHZhciBjaGFyU2V0ID0ge1xuXHRcdHBhdHRlcm46IC9cXC58XFxcXFt3c2RdfFxcXFxwXFx7W157fV0rXFx9L2ksXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9O1xuXHR2YXIgY2hhclNldFdpdGhvdXREb3QgPSB7XG5cdFx0cGF0dGVybjogL1xcXFxbd3NkXXxcXFxccFxce1tee31dK1xcfS9pLFxuXHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0fTtcblxuXHR2YXIgcmFuZ2VDaGFyID0gJyg/OlteXFxcXFxcXFwtXXwnICsgZXNjYXBlLnNvdXJjZSArICcpJztcblx0dmFyIHJhbmdlID0gUmVnRXhwKHJhbmdlQ2hhciArICctJyArIHJhbmdlQ2hhcik7XG5cblx0Ly8gdGhlIG5hbWUgb2YgYSBjYXB0dXJpbmcgZ3JvdXBcblx0dmFyIGdyb3VwTmFtZSA9IHtcblx0XHRwYXR0ZXJuOiAvKDx8JylbXjw+J10rKD89Wz4nXSQpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnJlZ2V4ID0ge1xuXHRcdCdjaGFyLWNsYXNzJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXFxcXFwpKilcXFsoPzpbXlxcXFxcXF1dfFxcXFxbXFxzXFxTXSkqXFxdLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2NoYXItY2xhc3MtbmVnYXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFxbKVxcXi8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnY2hhci1jbGFzcy1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcW3xcXF0kLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncmFuZ2UnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogcmFuZ2UsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdFx0XHRcdFx0J3JhbmdlLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvLS8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnb3BlcmF0b3InXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3BlY2lhbC1lc2NhcGUnOiBzcGVjaWFsRXNjYXBlLFxuXHRcdFx0XHQnY2hhci1zZXQnOiBjaGFyU2V0V2l0aG91dERvdCxcblx0XHRcdFx0J2VzY2FwZSc6IGVzY2FwZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3NwZWNpYWwtZXNjYXBlJzogc3BlY2lhbEVzY2FwZSxcblx0XHQnY2hhci1zZXQnOiBjaGFyU2V0LFxuXHRcdCdiYWNrcmVmZXJlbmNlJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBhIGJhY2tyZWZlcmVuY2Ugd2hpY2ggaXMgbm90IGFuIG9jdGFsIGVzY2FwZVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxcXCg/IVsxMjNdWzAtN117Mn0pWzEtOV0vLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxcXGs8W148PiddKz4vLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnZ3JvdXAtbmFtZSc6IGdyb3VwTmFtZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnYW5jaG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1skXl18XFxcXFtBQmJHWnpdLyxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnZXNjYXBlJzogZXNjYXBlLFxuXHRcdCdncm91cCc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzEwL2RvY3MvYXBpL2phdmEvdXRpbC9yZWdleC9QYXR0ZXJuLmh0bWxcblx0XHRcdFx0Ly8gaHR0cHM6Ly9kb2NzLm1pY3Jvc29mdC5jb20vZW4tdXMvZG90bmV0L3N0YW5kYXJkL2Jhc2UtdHlwZXMvcmVndWxhci1leHByZXNzaW9uLWxhbmd1YWdlLXF1aWNrLXJlZmVyZW5jZT92aWV3PW5ldGZyYW1ld29yay00LjcuMiNncm91cGluZy1jb25zdHJ1Y3RzXG5cblx0XHRcdFx0Ly8gKCksICg/PG5hbWU+KSwgKD8nbmFtZScpLCAoPz4pLCAoPzopLCAoPz0pLCAoPyEpLCAoPzw9KSwgKD88ISksICg/aXMtbSksICg/aS1tOilcblx0XHRcdFx0cGF0dGVybjogL1xcKCg/OlxcPyg/OjxbXjw+J10rPnwnW148PiddKyd8Wz46XXw8P1s9IV18W2lkbW5zdXhVXSsoPzotW2lkbW5zdXhVXSspPzo/KSk/Lyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbicsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdncm91cC1uYW1lJzogZ3JvdXBOYW1lXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCkvLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J3F1YW50aWZpZXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKD86WysqP118XFx7XFxkKyg/OixcXGQqKT9cXH0pWz8rXT8vLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnYWx0ZXJuYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFx8Lyxcblx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHR9XG5cdH07XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly93d3cub3BlbnBvbGljeWFnZW50Lm9yZy9kb2NzL2xhdGVzdC9wb2xpY3ktcmVmZXJlbmNlL1xuXG5QcmlzbS5sYW5ndWFnZXMucmVnbyA9IHtcblx0J2NvbW1lbnQnOiAvIy4qLyxcblx0J3Byb3BlcnR5Jzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFwuXSkoPzpcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCJ8YFteYF0qYHxcXGJbYS16X11cXHcqXFxiKSg/PVxccyo6KD8hPSkpL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCJ8YFteYF0qYC8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQna2V5d29yZCc6IC9cXGIoPzphc3xkZWZhdWx0fGVsc2V8aW1wb3J0fG5vdHxudWxsfHBhY2thZ2V8c2V0KD89XFxzKlxcKCl8c29tZXx3aXRoKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdypcXGIoPzpcXHMqXFwuXFxzKlxcYlthLXpfXVxcdypcXGIpKig/PVxccypcXCgpL2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbmFtZXNwYWNlJzogL1xcYlxcdytcXGIoPz1cXHMqXFwuKS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblxuXHQnbnVtYmVyJzogLy0/XFxiXFxkKyg/OlxcLlxcZCspPyg/OmVbKy1dP1xcZCspP1xcYi9pLFxuXHQnb3BlcmF0b3InOiAvWy0rKi8lfCZdfFs8Pjo9XT0/fCE9fFxcYl9cXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvWyw7LlxcW1xcXXt9KCldL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJlbnB5ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLisvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJcIlwifCcnJylbXFxzXFxTXSs/XFwxfChcInwnKSg/OlxcXFwufCg/IVxcMilbXlxcXFxdKSpcXDJ8KD86XiM/KD86KD86WzAtOWEtZkEtRl0pezN9fFswLTlhLWZBLUZdezZ9KSQpL20sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2Z1bmN0aW9uJzogL1xcYlthLXpfXVxcdyooPz1cXCgpL2ksXG5cblx0J3Byb3BlcnR5JzogL1xcYig/OlVwZGF0ZXxVcGRhdGVWZXJzaW9ufGFjdGlvbnxhY3RpdmF0ZV9zb3VuZHxhZHZfbnZsX3RyYW5zaXRpb258YWZ0ZXJfbG9hZF90cmFuc2l0aW9ufGFsaWdufGFscGhhfGFsdHxhbmNob3J8YW50aWFsaWFzfGFyZWF8YXV0b3xiYWNrZ3JvdW5kfGJhcl9pbnZlcnR8YmFyX3Jlc2l6aW5nfGJhcl92ZXJ0aWNhbHxibGFja19jb2xvcnxib2xkfGJvdHRvbV9iYXJ8Ym90dG9tX2d1dHRlcnxib3R0b21fbWFyZ2lufGJvdHRvbV9wYWRkaW5nfGJveF9yZXZlcnNlfGJveF93cmFwfGNhbl91cGRhdGV8Y2FyZXR8Y2hpbGR8Y29sb3J8Y3JvcHxkZWZhdWx0X2FmbV9lbmFibGV8ZGVmYXVsdF9hZm1fdGltZXxkZWZhdWx0X2Z1bGxzY3JlZW58ZGVmYXVsdF90ZXh0X2Nwc3xkZXZlbG9wZXJ8ZGlyZWN0b3J5X25hbWV8ZHJhZ19oYW5kbGV8ZHJhZ19qb2luZWR8ZHJhZ19uYW1lfGRyYWdfcmFpc2V8ZHJhZ2dhYmxlfGRyYWdnZWR8ZHJvcF9zaGFkb3d8ZHJvcF9zaGFkb3dfY29sb3J8ZHJvcHBhYmxlfGRyb3BwZWR8ZWFzZWlufGVhc2VvdXR8ZWRnZXNjcm9sbHxlbmRfZ2FtZV90cmFuc2l0aW9ufGVuZF9zcGxhc2hfdHJhbnNpdGlvbnxlbnRlcl9yZXBsYXlfdHJhbnNpdGlvbnxlbnRlcl9zb3VuZHxlbnRlcl90cmFuc2l0aW9ufGVudGVyX3llc25vX3RyYW5zaXRpb258ZXhlY3V0YWJsZV9uYW1lfGV4aXRfcmVwbGF5X3RyYW5zaXRpb258ZXhpdF9zb3VuZHxleGl0X3RyYW5zaXRpb258ZXhpdF95ZXNub190cmFuc2l0aW9ufGZhZGVpbnxmYWRlb3V0fGZpcnN0X2luZGVudHxmaXJzdF9zcGFjaW5nfGZpdF9maXJzdHxmb2N1c3xmb2N1c19tYXNrfGZvbnR8Zm9yZWdyb3VuZHxnYW1lX21haW5fdHJhbnNpdGlvbnxnZXRfaW5zdGFsbGVkX3BhY2thZ2VzfGdvb2dsZV9wbGF5X2tleXxnb29nbGVfcGxheV9zYWx0fGdyb3VuZHxoYXNfbXVzaWN8aGFzX3NvdW5kfGhhc192b2ljZXxoZWlnaHR8aGVscHxoaW50aW5nfGhvdmVyfGhvdmVyX2JhY2tncm91bmR8aG92ZXJfY29sb3J8aG92ZXJfc291bmR8aG92ZXJlZHxoeXBlcmxpbmtfZnVuY3Rpb25zfGlkbGV8aWRsZV9jb2xvcnxpbWFnZV9zdHlsZXxpbmNsdWRlX3VwZGF0ZXxpbnNlbnNpdGl2ZXxpbnNlbnNpdGl2ZV9iYWNrZ3JvdW5kfGluc2Vuc2l0aXZlX2NvbG9yfGluc2lkZXxpbnRyYV90cmFuc2l0aW9ufGl0YWxpY3xqdXN0aWZ5fGtlcm5pbmd8a2V5Ym9hcmRfZm9jdXN8bGFuZ3VhZ2V8bGF5ZXJfY2xpcHBpbmd8bGF5ZXJzfGxheW91dHxsZWZ0X2JhcnxsZWZ0X2d1dHRlcnxsZWZ0X21hcmdpbnxsZWZ0X3BhZGRpbmd8bGVuZ3RofGxpbmVfbGVhZGluZ3xsaW5lX292ZXJsYXBfc3BsaXR8bGluZV9zcGFjaW5nfGxpbmVhcnxtYWluX2dhbWVfdHJhbnNpdGlvbnxtYWluX21lbnVfbXVzaWN8bWF4aW11bXxtaW5fd2lkdGh8bWluaW11bXxtaW53aWR0aHxtb2RhbHxtb3VzZXxtb3VzZXdoZWVsfG5hbWV8bmFycmF0b3JfbWVudXxuZXdsaW5lX2luZGVudHxudmxfYWR2X3RyYW5zaXRpb258b2Zmc2V0fG9yZGVyX3JldmVyc2V8b3V0bGluZXN8b3ZlcmxheV9mdW5jdGlvbnN8cG9zfHBvc2l0aW9ufHByZWZpeHxyYWRpdXN8cmFuZ2V8cmVzdF9pbmRlbnR8cmlnaHRfYmFyfHJpZ2h0X2d1dHRlcnxyaWdodF9tYXJnaW58cmlnaHRfcGFkZGluZ3xyb3RhdGV8cm90YXRlX3BhZHxydWJ5X3N0eWxlfHNhbXBsZV9zb3VuZHxzYXZlX2RpcmVjdG9yeXxzYXlfYXR0cmlidXRlX3RyYW5zaXRpb258c2NyZWVuX2hlaWdodHxzY3JlZW5fd2lkdGh8c2Nyb2xsYmFyc3xzZWxlY3RlZF9ob3ZlcnxzZWxlY3RlZF9ob3Zlcl9jb2xvcnxzZWxlY3RlZF9pZGxlfHNlbGVjdGVkX2lkbGVfY29sb3J8c2VsZWN0ZWRfaW5zZW5zaXRpdmV8c2hvd19zaWRlX2ltYWdlfHNob3dfdHdvX3dpbmRvd3xzaWRlX3NwYWNpbmd8c2lkZV94cG9zfHNpZGVfeXBvc3xzaXplfHNpemVfZ3JvdXB8c2xvd19jcHN8c2xvd19jcHNfbXVsdGlwbGllcnxzcGFjaW5nfHN0cmlrZXRocm91Z2h8c3VicGl4ZWx8dGV4dF9hbGlnbnx0ZXh0X3N0eWxlfHRleHRfeHBvc3x0ZXh0X3lfZnVkZ2V8dGV4dF95cG9zfHRodW1ifHRodW1iX29mZnNldHx0aHVtYl9zaGFkb3d8dGh1bWJuYWlsX2hlaWdodHx0aHVtYm5haWxfd2lkdGh8dGltZXx0b3BfYmFyfHRvcF9ndXR0ZXJ8dG9wX21hcmdpbnx0b3BfcGFkZGluZ3x0cmFuc2xhdGlvbnN8dW5kZXJsaW5lfHVuc2Nyb2xsYWJsZXx1cGRhdGV8dmFsdWV8dmVyc2lvbnx2ZXJzaW9uX25hbWV8dmVyc2lvbl90dXBsZXx2ZXJ0aWNhbHx3aWR0aHx3aW5kb3dfaGlkZV90cmFuc2l0aW9ufHdpbmRvd19pY29ufHdpbmRvd19sZWZ0X3BhZGRpbmd8d2luZG93X3Nob3dfdHJhbnNpdGlvbnx3aW5kb3dfdGl0bGV8d2luZG93c19pY29ufHhhZGp1c3RtZW50fHhhbGlnbnx4YW5jaG9yfHhhbmNob3Jhcm91bmR8eGFyb3VuZHx4Y2VudGVyfHhmaWxsfHhpbml0aWFsfHhtYXJnaW58eG1heGltdW18eG1pbmltdW18eG9mZnNldHx4b2Zzc2V0fHhwYWRkaW5nfHhwb3N8eHNpemV8eHpvb218eWFkanVzdG1lbnR8eWFsaWdufHlhbmNob3J8eWFuY2hvcmFyb3VuZHx5YXJvdW5kfHljZW50ZXJ8eWZpbGx8eWluaXRpYWx8eW1hcmdpbnx5bWF4aW11bXx5bWluaW11bXx5b2Zmc2V0fHlwYWRkaW5nfHlwb3N8eXNpemV8eXNpemV4eXNpemV8eXpvb218em9vbXx6b3JkZXIpXFxiLyxcblxuXHQndGFnJzogL1xcYig/OmJhcnxibG9ja3xidXR0b258YnV0dG9zY3JlZW5ufGRyYWd8ZHJhZ2dyb3VwfGZpeGVkfGZyYW1lfGdyaWR8W2h2XWJveHxob3RiYXJ8aG90c3BvdHxpbWFnZXxpbWFnZWJ1dHRvbnxpbWFnZW1hcHxpbnB1dHxrZXl8bGFiZWx8bWVudXxtbV9tZW51X2ZyYW1lfG1vdXNlYXJlYXxudmx8cGFyYWxsZWx8c2NyZWVufHNlbGZ8c2lkZXx0YWd8dGV4dHx0ZXh0YnV0dG9ufHRpbWVyfHZiYXJ8dmlld3BvcnR8d2luZG93KVxcYnxcXCQvLFxuXG5cdCdrZXl3b3JkJzogL1xcYig/Ok5vbmV8YWRkfGFkanVzdG1lbnR8YWxpZ25hcm91bmR8YWxsb3d8YW5nbGV8YW5pbWF0aW9ufGFyb3VuZHxhc3xhc3NlcnR8YmVoaW5kfGJveF9sYXlvdXR8YnJlYWt8YnVpbGR8Y2FjaGV8Y2FsbHxjZW50ZXJ8Y2hhbmdlZHxjaGlsZF9zaXplfGNob2ljZXxjaXJjbGVzfGNsYXNzfGNsZWFyfGNsaWNrZWR8Y2xpcHBpbmd8Y2xvY2t3aXNlfGNvbmZpZ3xjb250YWluc3xjb250aW51ZXxjb3JuZXIxfGNvcm5lcjJ8Y291bnRlcmNsb2Nrd2lzZXxkZWZ8ZGVmYXVsdHxkZWZpbmV8ZGVsfGRlbGF5fGRpc2FibGVkfGRpc2FibGVkX3RleHR8ZGlzc29sdmV8ZWxpZnxlbHNlfGV2ZW50fGV4Y2VwdHxleGNsdWRlfGV4ZWN8ZXhwcmVzc2lvbnxmYWRlfGZpbmFsbHl8Zm9yfGZyb218ZnVuY3Rpb258Z2xvYmFsfGdtX3Jvb3R8aGFzfGhpZGV8aWR8aWZ8aW1wb3J0fGlufGluaXR8aXN8anVtcHxrbm90fGxhbWJkYXxsZWZ0fGxlc3Nfcm91bmRlZHxtbV9yb290fG1vdmllfG11c2ljfG51bGx8b258b25sYXllcnxwYXNzfHBhdXNlfHBlcnNpc3RlbnR8cGxheXxwcmludHxweXRob258cXVldWV8cmFpc2V8cmFuZG9tfHJlbnB5fHJlcGVhdHxyZXR1cm58cmlnaHR8cm91bmRlZF93aW5kb3d8c2NlbmV8c2NvcGV8c2V0fHNob3d8c2xvd3xzbG93X2Fib3J0YWJsZXxzbG93X2RvbmV8c291bmR8c3RvcHxzdG9yZXxzdHlsZXxzdHlsZV9ncm91cHxzdWJzdGl0dXRlfHN1ZmZpeHx0aGVtZXx0cmFuc2Zvcm18dHJhbnNmb3JtX2FuY2hvcnx0cmFuc3Bvc2V8dHJ5fHVpfHVuaG92ZXJlZHx1cGRhdGVyfHVzZXx2b2ljZXx3aGlsZXx3aWRnZXR8d2lkZ2V0X2hvdmVyfHdpZGdldF9zZWxlY3RlZHx3aWRnZXRfdGV4dHx5aWVsZClcXGIvLFxuXG5cdCdib29sZWFuJzogL1xcYig/OltGZl1hbHNlfFtUdF1ydWUpXFxiLyxcblxuXHQnbnVtYmVyJzogLyg/OlxcYig/OjBbYm9dKT8oPzooPzpcXGR8MHhbXFxkYS1mXSlbXFxkYS1mXSooPzpcXC5cXGQqKT8pfFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/aj8vaSxcblxuXHQnb3BlcmF0b3InOiAvWy0rJT1dPT98IT18XFwqXFwqPz0/fFxcL1xcLz89P3w8Wzw9Pl0/fD5bPT5dP3xbJnxefl18XFxiKD86YW5kfGF0fG5vdHxvcnx3aXRoKVxcYi8sXG5cblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJweSA9IFByaXNtLmxhbmd1YWdlcy5yZW5weTtcblxuUHJpc20ubGFuZ3VhZ2VzLnJlc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzogeyBwYXR0ZXJuOiAvJyg/OlteXFxyXFxuXFxcXF18XFxcXCg/Oi58XFx3KykpJy8sIGdyZWVkeTogdHJ1ZSB9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfFteXFxcXFxcclxcblwiXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVxcdyp8QFthLXouXSp8I1tBLVphLXpdXFx3KnwjXFxkLyxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9bYS16QS1aXVxcdyooPz1cXCgpfChcXC4pW2Etel1cXHcqLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHR9LFxuXHQnbnVtYmVyJzogLyg/OlxcYjB4KD86W1xcZGEtZl0rKD86XFwuW1xcZGEtZl0qKT98XFwuW1xcZGEtZl0rKSg/OnBbKy1dP1xcZCspP3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVsrLV0/XFxkKyk/KVtmdWxdezAsNH0vaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnYXR0ci12YWx1ZSc6IC9bQS1aYS16XVxcdyooPz09KS8sXG5cdCdjb25zdGFudCc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYnR5cGVcXHMrKVthLXpdXFx3Ki8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQndGFnJzoge1xuXHRcdHBhdHRlcm46IC8oPClbYS16XVxcdyp8KD86PFxcLylbYS16XVxcdyovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnb3BlcmF0b3InOiAvPHw+fFxcLy8sXG5cdFx0fSxcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YW5kfGFzfGFzc2VydHxiZWdpbnxib29sfGNsYXNzfGNvbnN0cmFpbnR8ZG98ZG9uZXxkb3dudG98ZWxzZXxlbmR8ZXhjZXB0aW9ufGV4dGVybmFsfGZsb2F0fGZvcnxmdW58ZnVuY3Rpb258aWZ8aW58aW5jbHVkZXxpbmhlcml0fGluaXRpYWxpemVyfGludHxsYXp5fGxldHxtZXRob2R8bW9kdWxlfG11dGFibGV8bmV3fG5vbnJlY3xvYmplY3R8b2Z8b3Blbnxvcnxwcml2YXRlfHJlY3xzdHJpbmd8c3dpdGNofHRoZW58dG98dHJ5fHR5cGV8d2hlbnx3aGlsZXx3aXRoKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9cXC57M318Ols6PV0/fFxcfD58LT58PSg/Oj09P3w+KT98PD0/fD49P3xbfF4/JyMhfmBdfFsrXFwtKlxcL11cXC4/fFxcYig/OmFzcnxsYW5kfGxvcnxsc2x8bHNyfGx4b3J8bW9kKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVtcXF0sOy5dL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgncmVzY3JpcHQnLCAnc3RyaW5nJywge1xuXHQndGVtcGxhdGUtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9gKD86XFxcXFtcXHNcXFNdfFxcJFxceyg/Oltee31dfFxceyg/Oltee31dfFxce1tefV0qXFx9KSpcXH0pK1xcfXwoPyFcXCRcXHspW15cXFxcYF0pKmAvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0ZW1wbGF0ZS1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL15gfGAkLyxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHR9LFxuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKilcXCRcXHsoPzpbXnt9XXxcXHsoPzpbXnt9XXxcXHtbXn1dKlxcfSkqXFx9KStcXH0vLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFwkXFx7fFxcfSQvLFxuXHRcdFx0XHRcdFx0YWxpYXM6ICd0YWcnXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXN0OiBQcmlzbS5sYW5ndWFnZXMucmVzY3JpcHRcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucmVzID0gUHJpc20ubGFuZ3VhZ2VzLnJlc2NyaXB0O1xuXG5QcmlzbS5sYW5ndWFnZXMucmVzdCA9IHtcblx0J3RhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86XFwrWz0tXSspK1xcKyg/Olxccj9cXG58XFxyKSg/OlxcMVsrfF0uK1srfF0oPzpcXHI/XFxufFxccikpK1xcMSg/OlxcK1s9LV0rKStcXCsvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfHwoPzpcXCtbPS1dKykrXFwrL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKik9KyBbID1dKj0oPzooPzpcXHI/XFxufFxccilcXDEuKykrKD86XFxyP1xcbnxcXHIpXFwxPSsgWyA9XSo9KD89KD86XFxyP1xcbnxcXHIpezJ9fFxccyokKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWz0tXSsvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXG5cdC8vIERpcmVjdGl2ZS1saWtlIHBhdHRlcm5zXG5cblx0J3N1YnN0aXR1dGlvbi1kZWYnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKlxcLlxcLiApXFx8KD86W158XFxzXSg/OltefF0qW158XFxzXSk/KVxcfCBbXjpdKzo6L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdzdWJzdGl0dXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFx8KD86W158XFxzXXxbXnxcXHNdW158XSpbXnxcXHNdKVxcfC8sXG5cdFx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZScsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFx8fFxcfCQvXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCApKD8hIClbXjpdKzo6Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbicsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86OiQvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdsaW5rLXRhcmdldCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuIClcXFtbXlxcXV0rXFxdL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXSQvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuIClfKD86YFteYF0rYHwoPzpbXjpcXFxcXXxcXFxcLikrKTovbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15ffDokL1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuIClbXjpdKzo6L20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC86OiQvXG5cdFx0fVxuXHR9LFxuXHQnY29tbWVudCc6IHtcblx0XHQvLyBUaGUgdHdvIGFsdGVybmF0aXZlcyB0cnkgdG8gcHJldmVudCBoaWdobGlnaHRpbmcgb2YgYmxhbmsgY29tbWVudHNcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qXFwuXFwuKSg/Oig/OiAuKyk/KD86KD86XFxyP1xcbnxcXHIpLispK3wgLispKD89KD86XFxyP1xcbnxcXHIpezJ9fCQpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCd0aXRsZSc6IFtcblx0XHQvLyBPdmVybGluZWQgYW5kIHVuZGVybGluZWRcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXigoWyFcIiMkJSYnKCkqKyxcXC0uXFwvOjs8PT4/QFxcW1xcXFxcXF1eX2B7fH1+XSlcXDIrKSg/Olxccj9cXG58XFxyKS4rKD86XFxyP1xcbnxcXHIpXFwxJC9tLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWyFcIiMkJSYnKCkqKyxcXC0uXFwvOjs8PT4/QFxcW1xcXFxcXF1eX2B7fH1+XSt8WyFcIiMkJSYnKCkqKyxcXC0uXFwvOjs8PT4/QFxcW1xcXFxcXF1eX2B7fH1+XSskLyxcblx0XHRcdFx0J2ltcG9ydGFudCc6IC8uKy9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gVW5kZXJsaW5lZCBvbmx5XG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefCg/Olxccj9cXG58XFxyKXsyfSkuKyg/Olxccj9cXG58XFxyKShbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMisoPz1cXHI/XFxufFxccnwkKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKyQvLFxuXHRcdFx0XHQnaW1wb3J0YW50JzogLy4rL1xuXHRcdFx0fVxuXHRcdH1cblx0XSxcblx0J2hyJzoge1xuXHRcdHBhdHRlcm46IC8oKD86XFxyP1xcbnxcXHIpezJ9KShbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKVxcMnszLH0oPz0oPzpcXHI/XFxufFxccil7Mn0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCdmaWVsZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKTpbXjpcXHJcXG5dKzooPz0gKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdCdjb21tYW5kLWxpbmUtb3B0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86WystXVthLXpcXGRdfCg/Oi0tfFxcLylbYS16XFxkLV0rKSg/OlsgPV0oPzpbYS16XVtcXHctXSp8PFtePD5dKz4pKT8oPzosICg/OlsrLV1bYS16XFxkXXwoPzotLXxcXC8pW2EtelxcZC1dKykoPzpbID1dKD86W2Etel1bXFx3LV0qfDxbXjw+XSs+KSk/KSooPz0oPzpcXHI/XFxufFxccik/IHsyLH1cXFMpL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdzeW1ib2wnXG5cdH0sXG5cdCdsaXRlcmFsLWJsb2NrJzoge1xuXHRcdHBhdHRlcm46IC86Oig/Olxccj9cXG58XFxyKXsyfShbIFxcdF0rKSg/IVsgXFx0XSkuKyg/Oig/Olxccj9cXG58XFxyKVxcMS4rKSovLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2xpdGVyYWwtYmxvY2stcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eOjovLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J3F1b3RlZC1saXRlcmFsLWJsb2NrJzoge1xuXHRcdHBhdHRlcm46IC86Oig/Olxccj9cXG58XFxyKXsyfShbIVwiIyQlJicoKSorLFxcLS5cXC86Ozw9Pj9AXFxbXFxcXFxcXV5fYHt8fX5dKS4qKD86KD86XFxyP1xcbnxcXHIpXFwxLiopKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbGl0ZXJhbC1ibG9jay1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL14oPzo6OnwoWyFcIiMkJSYnKCkqKyxcXC0uXFwvOjs8PT4/QFxcW1xcXFxcXF1eX2B7fH1+XSlcXDEqKS9tLFxuXHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J2xpc3QtYnVsbGV0Jzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86WyorXFwtXHUyMDIyXHUyMDIzXHUyMDQzXXxcXCg/KD86XFxkK3xbYS16XXxbaXZ4ZGNsbV0rKVxcKXwoPzpcXGQrfFthLXpdfFtpdnhkY2xtXSspXFwuKSg/PSApL2ltLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J2RvY3Rlc3QtYmxvY2snOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKik+Pj4gLisoPzooPzpcXHI/XFxufFxccikuKykqL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePj4+L1xuXHRcdH1cblx0fSxcblxuXHQnaW5saW5lJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXFxzXFwtOlxcLydcIjwoXFxbe10pKD86OlteOl0rOmAuKj9gfGAuKj9gOlteOl0rOnwoXFwqXFwqP3xgYD98XFx8KSg/IVxccykoPzooPyFcXDIpLikqXFxTXFwyKD89W1xcc1xcLS4sOjshP1xcXFxcXC8nXCIpXFxdfV18JCkpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdib2xkJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcKlxcKikuKyg/PVxcKlxcKiQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpdGFsaWMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyheXFwqKS4rKD89XFwqJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2lubGluZS1saXRlcmFsJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXmBgKS4rKD89YGAkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3JvbGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL146W146XSs6fDpbXjpdKzokLyxcblx0XHRcdFx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eOnw6JC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbnRlcnByZXRlZC10ZXh0Jzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXmApLisoPz1gJCkvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc3Vic3RpdHV0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXlxcfCkuKyg/PVxcfCQpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcKlxcKj98YGA/fFxcfC9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cblx0J2xpbmsnOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogL1xcW1teXFxbXFxdXStcXF1fKD89W1xcc1xcLS4sOjshP1xcXFxcXC8nXCIpXFxdfV18JCkvLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eXFxbfFxcXV8kL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyg/OlxcYlthLXpcXGRdKyg/OltfLjorXVthLXpcXGRdKykqXz9ffGBbXmBdK2BfP198X2BbXmBdK2ApKD89W1xcc1xcLS4sOjshP1xcXFxcXC8nXCIpXFxdfV18JCkvaSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXl8/YHxgJHxgP18/XyQvXG5cdFx0XHR9XG5cdFx0fVxuXHRdLFxuXG5cdC8vIExpbmUgYmxvY2sgc3RhcnQsXG5cdC8vIHF1b3RlIGF0dHJpYnV0aW9uLFxuXHQvLyBleHBsaWNpdCBtYXJrdXAgc3RhcnQsXG5cdC8vIGFuZCBhbm9ueW1vdXMgaHlwZXJsaW5rIHRhcmdldCBzaG9ydGN1dCAoX18pXG5cdCdwdW5jdHVhdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qKSg/OlxcfCg/PSB8JCl8KD86LS0tP3xcdTIwMTR8XFwuXFwufF9fKSg/PSApfFxcLlxcLiQpL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucmlwID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvIy4qLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxCYFteXFxzYCdcIiwuOjsjXFwvXFxcXCgpPD5cXFtcXF17fV1cXGIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQncmVnZXgnOiB7XG5cdFx0cGF0dGVybjogLyhefFteL10pXFwvKD8hXFwvKSg/OlxcW1teXFxuXFxyXFxdXSpcXF18XFxcXC58W14vXFxcXFxcclxcblxcW10pK1xcLyg/PVxccyooPzokfFtcXHJcXG4sLjt9KV0pKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQna2V5d29yZCc6IC8oPzo9PnwtPil8XFxiKD86Y2FzZXxjYXRjaHxjbGFzc3xlbHNlfGV4aXR8ZmluYWxseXxpZnxyYWlzZXxyZXR1cm58c3dpdGNofHRyeSlcXGIvLFxuXG5cdCdidWlsdGluJzogL0B8XFxiU3lzdGVtXFxiLyxcblxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0J2RhdGUnOiAvXFxiXFxkezR9LVxcZHsyfS1cXGR7Mn1cXGIvLFxuXHQndGltZSc6IC9cXGJcXGR7Mn06XFxkezJ9OlxcZHsyfVxcYi8sXG5cdCdkYXRldGltZSc6IC9cXGJcXGR7NH0tXFxkezJ9LVxcZHsyfVRcXGR7Mn06XFxkezJ9OlxcZHsyfVxcYi8sXG5cblx0J3N5bWJvbCc6IC86W15cXGRcXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XVteXFxzYCdcIiwuOjsjXFwvXFxcXCgpPD5cXFtcXF17fV0qLyxcblx0J251bWJlcic6IC9bKy1dP1xcYig/OlxcZCtcXC5cXGQrfFxcZCspXFxiLyxcblxuXHQncHVuY3R1YXRpb24nOiAvKD86XFwuezIsM30pfFtgLC46Oz1cXC9cXFxcKCk8PlxcW1xcXXt9XS8sXG5cblx0J3JlZmVyZW5jZSc6IC9bXlxcZFxcc2AnXCIsLjo7I1xcL1xcXFwoKTw+XFxbXFxde31dW15cXHNgJ1wiLC46OyNcXC9cXFxcKCk8PlxcW1xcXXt9XSovXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMucm9ib2NvbmYgPSB7XG5cdCdjb21tZW50JzogLyMuKi8sXG5cdCdrZXl3b3JkJzoge1xuXHRcdCdwYXR0ZXJuJzogLyhefFxccykoPzooPzpleHRlcm5hbHxpbXBvcnQpXFxifCg/OmZhY2V0fGluc3RhbmNlIG9mKSg/PVsgXFx0XStbXFx3LV0rWyBcXHRdKlxceykpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdjb21wb25lbnQnOiB7XG5cdFx0cGF0dGVybjogL1tcXHctXSsoPz1bIFxcdF0qXFx7KS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0fSxcblx0J3Byb3BlcnR5JzogL1tcXHcuLV0rKD89WyBcXHRdKjopLyxcblx0J3ZhbHVlJzoge1xuXHRcdHBhdHRlcm46IC8oPVsgXFx0XSooPyFbIFxcdF0pKVteLDtdKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItdmFsdWUnXG5cdH0sXG5cdCdvcHRpb25hbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwob3B0aW9uYWxcXCkvLFxuXHRcdGFsaWFzOiAnYnVpbHRpbidcblx0fSxcblx0J3dpbGRjYXJkJzoge1xuXHRcdHBhdHRlcm46IC8oXFwuKVxcKi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvW3t9LC47Oj1dL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBjb21tZW50ID0ge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSp8IHsyfXxcXHQpIy4qL20sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fTtcblxuXHR2YXIgdmFyaWFibGUgPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFteXFxcXF0pKD86XFxcXHsyfSkqKVskQCYlXVxceyg/Oltee31cXHJcXG5dfFxce1tee31cXHJcXG5dKlxcfSkqXFx9Lyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL15bJEAmJV1cXHt8XFx9JC9cblx0XHR9XG5cdH07XG5cblx0ZnVuY3Rpb24gY3JlYXRlU2VjdGlvbihuYW1lLCBpbnNpZGUpIHtcblx0XHR2YXIgZXh0ZW5kZWNJbnNpZGUgPSB7fTtcblxuXHRcdGV4dGVuZGVjSW5zaWRlWydzZWN0aW9uLWhlYWRlciddID0ge1xuXHRcdFx0cGF0dGVybjogL14gP1xcKnszfS4rP1xcKnszfS8sXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fTtcblxuXHRcdC8vIGNvcHkgaW5zaWRlIHRva2Vuc1xuXHRcdGZvciAodmFyIHRva2VuIGluIGluc2lkZSkge1xuXHRcdFx0ZXh0ZW5kZWNJbnNpZGVbdG9rZW5dID0gaW5zaWRlW3Rva2VuXTtcblx0XHR9XG5cblx0XHRleHRlbmRlY0luc2lkZVsndGFnJ10gPSB7XG5cdFx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dKD86IHsyfXxcXHQpWyBcXHRdKilcXFtbLVxcd10rXFxdLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcW3xcXF0vXG5cdFx0XHR9XG5cdFx0fTtcblx0XHRleHRlbmRlY0luc2lkZVsndmFyaWFibGUnXSA9IHZhcmlhYmxlO1xuXHRcdGV4dGVuZGVjSW5zaWRlWydjb21tZW50J10gPSBjb21tZW50O1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvXiA/XFwqezN9WyBcXHRdKjxuYW1lPlsgXFx0XSpcXCp7M30oPzoufFtcXHJcXG5dKD8hXFwqezN9KSkqLy5zb3VyY2UucmVwbGFjZSgvPG5hbWU+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIG5hbWU7IH0pLCAnaW0nKSxcblx0XHRcdGFsaWFzOiAnc2VjdGlvbicsXG5cdFx0XHRpbnNpZGU6IGV4dGVuZGVjSW5zaWRlXG5cdFx0fTtcblx0fVxuXG5cblx0dmFyIGRvY1RhZyA9IHtcblx0XHRwYXR0ZXJuOiAvKFxcW0RvY3VtZW50YXRpb25cXF0oPzogezJ9fFxcdClbIFxcdF0qKSg/IVsgXFx0XXwjKSg/Oi58KD86XFxyXFxuP3xcXG4pWyBcXHRdKlxcLnszfSkrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9O1xuXG5cdHZhciB0ZXN0TmFtZUxpa2UgPSB7XG5cdFx0cGF0dGVybjogLyhbXFxyXFxuXSA/KSg/ISMpKD86XFxTKD86WyBcXHRdXFxTKSopKy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlXG5cdFx0fVxuXHR9O1xuXG5cdHZhciB0ZXN0UHJvcGVydHlMaWtlID0ge1xuXHRcdHBhdHRlcm46IC8oW1xcclxcbl0oPzogezJ9fFxcdClbIFxcdF0qKSg/IVxcW3xcXC57M318IykoPzpcXFMoPzpbIFxcdF1cXFMpKikrLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3ZhcmlhYmxlJzogdmFyaWFibGVcblx0XHR9XG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydyb2JvdGZyYW1ld29yayddID0ge1xuXHRcdCdzZXR0aW5ncyc6IGNyZWF0ZVNlY3Rpb24oJ1NldHRpbmdzJywge1xuXHRcdFx0J2RvY3VtZW50YXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0gP0RvY3VtZW50YXRpb24oPzogezJ9fFxcdClbIFxcdF0qKSg/IVsgXFx0XXwjKSg/Oi58KD86XFxyXFxuP3xcXG4pWyBcXHRdKlxcLnszfSkrLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0XHR9LFxuXHRcdFx0J3Byb3BlcnR5Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFtcXHJcXG5dID8pKD8hXFwuezN9fCMpKD86XFxTKD86WyBcXHRdXFxTKSopKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHR9KSxcblx0XHQndmFyaWFibGVzJzogY3JlYXRlU2VjdGlvbignVmFyaWFibGVzJyksXG5cdFx0J3Rlc3QtY2FzZXMnOiBjcmVhdGVTZWN0aW9uKCdUZXN0IENhc2VzJywge1xuXHRcdFx0J3Rlc3QtbmFtZSc6IHRlc3ROYW1lTGlrZSxcblx0XHRcdCdkb2N1bWVudGF0aW9uJzogZG9jVGFnLFxuXHRcdFx0J3Byb3BlcnR5JzogdGVzdFByb3BlcnR5TGlrZVxuXHRcdH0pLFxuXHRcdCdrZXl3b3Jkcyc6IGNyZWF0ZVNlY3Rpb24oJ0tleXdvcmRzJywge1xuXHRcdFx0J2tleXdvcmQtbmFtZSc6IHRlc3ROYW1lTGlrZSxcblx0XHRcdCdkb2N1bWVudGF0aW9uJzogZG9jVGFnLFxuXHRcdFx0J3Byb3BlcnR5JzogdGVzdFByb3BlcnR5TGlrZVxuXHRcdH0pLFxuXHRcdCd0YXNrcyc6IGNyZWF0ZVNlY3Rpb24oJ1Rhc2tzJywge1xuXHRcdFx0J3Rhc2stbmFtZSc6IHRlc3ROYW1lTGlrZSxcblx0XHRcdCdkb2N1bWVudGF0aW9uJzogZG9jVGFnLFxuXHRcdFx0J3Byb3BlcnR5JzogdGVzdFByb3BlcnR5TGlrZVxuXHRcdH0pLFxuXHRcdCdjb21tZW50JzogY29tbWVudFxuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5yb2JvdCA9IFByaXNtLmxhbmd1YWdlc1sncm9ib3RmcmFtZXdvcmsnXTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIG11bHRpbGluZUNvbW1lbnQgPSAvXFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopfDxzZWxmPikqXFwqXFwvLy5zb3VyY2U7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgMjsgaSsrKSB7XG5cdFx0Ly8gc3VwcG9ydCA0IGxldmVscyBvZiBuZXN0ZWQgY29tbWVudHNcblx0XHRtdWx0aWxpbmVDb21tZW50ID0gbXVsdGlsaW5lQ29tbWVudC5yZXBsYWNlKC88c2VsZj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gbXVsdGlsaW5lQ29tbWVudDsgfSk7XG5cdH1cblx0bXVsdGlsaW5lQ29tbWVudCA9IG11bHRpbGluZUNvbW1lbnQucmVwbGFjZSgvPHNlbGY+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC9bXlxcc1xcU10vLnNvdXJjZTsgfSk7XG5cblxuXHRQcmlzbS5sYW5ndWFnZXMucnVzdCA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXnxbXlxcXFxdKS8uc291cmNlICsgbXVsdGlsaW5lQ29tbWVudCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKVxcL1xcLy4qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL2I/XCIoPzpcXFxcW1xcc1xcU118W15cXFxcXCJdKSpcInxiP3IoIyopXCIoPzpbXlwiXXxcIig/IVxcMSkpKlwiXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2NoYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiAvYj8nKD86XFxcXCg/OnhbMC03XVtcXGRhLWZBLUZdfHVcXHsoPzpbXFxkYS1mQS1GXV8qKXsxLDZ9XFx9fC4pfFteXFxcXFxcclxcblxcdCddKScvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogLyMhP1xcWyg/OlteXFxbXFxdXCJdfFwiKD86XFxcXFtcXHNcXFNdfFteXFxcXFwiXSkqXCIpKlxcXS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3N0cmluZyc6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIENsb3N1cmUgcGFyYW1zIHNob3VsZCBub3QgYmUgY29uZnVzZWQgd2l0aCBiaXR3aXNlIE9SIHxcblx0XHQnY2xvc3VyZS1wYXJhbXMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFs9KCw6XVxccyp8XFxibW92ZVxccyopXFx8W158XSpcXHx8XFx8W158XSpcXHwoPz1cXHMqKD86XFx7fC0+KSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY2xvc3VyZS1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcfHxcXHwkLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXN0OiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnbGlmZXRpbWUtYW5ub3RhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8nXFx3Ky8sXG5cdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHR9LFxuXG5cdFx0J2ZyYWdtZW50LXNwZWNpZmllcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFwkXFx3KzopW2Etel0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogL1xcJFxcdysvLFxuXG5cdFx0J2Z1bmN0aW9uLWRlZmluaXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmZuXFxzKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J3R5cGUtZGVmaW5pdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxzdHJ1Y3R8dHJhaXR8dHlwZXx1bmlvbilcXHMrKVxcdysvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnY2xhc3MtbmFtZSdcblx0XHR9LFxuXHRcdCdtb2R1bGUtZGVjbGFyYXRpb24nOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxiKD86Y3JhdGV8bW9kKVxccyspW2Etel1bYS16X1xcZF0qLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICduYW1lc3BhY2UnXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNyYXRlfHNlbGZ8c3VwZXIpXFxzKik6OlxccypbYS16XVthLXpfXFxkXSpcXGIoPzpcXHMqOjooPzpcXHMqW2Etel1bYS16X1xcZF0qXFxzKjo6KSopPy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnbmFtZXNwYWNlJyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzo6L1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmVmZXJlbmNlL2Jsb2IvbWFzdGVyL3NyYy9rZXl3b3Jkcy5tZFxuXHRcdFx0L1xcYig/OlNlbGZ8YWJzdHJhY3R8YXN8YXN5bmN8YXdhaXR8YmVjb21lfGJveHxicmVha3xjb25zdHxjb250aW51ZXxjcmF0ZXxkb3xkeW58ZWxzZXxlbnVtfGV4dGVybnxmaW5hbHxmbnxmb3J8aWZ8aW1wbHxpbnxsZXR8bG9vcHxtYWNyb3xtYXRjaHxtb2R8bW92ZXxtdXR8b3ZlcnJpZGV8cHJpdnxwdWJ8cmVmfHJldHVybnxzZWxmfHN0YXRpY3xzdHJ1Y3R8c3VwZXJ8dHJhaXR8dHJ5fHR5cGV8dHlwZW9mfHVuaW9ufHVuc2FmZXx1bnNpemVkfHVzZXx2aXJ0dWFsfHdoZXJlfHdoaWxlfHlpZWxkKVxcYi8sXG5cdFx0XHQvLyBwcmltaXRpdmVzIGFuZCBzdHJcblx0XHRcdC8vIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3J1c3QtYnktZXhhbXBsZS9wcmltaXRpdmVzLmh0bWxcblx0XHRcdC9cXGIoPzpib29sfGNoYXJ8Zig/OjMyfDY0KXxbdWldKD86OHwxNnwzMnw2NHwxMjh8c2l6ZSl8c3RyKVxcYi9cblx0XHRdLFxuXG5cdFx0Ly8gZnVuY3Rpb25zIGNhbiB0ZWNobmljYWxseSBzdGFydCB3aXRoIGFuIHVwcGVyLWNhc2UgbGV0dGVyLCBidXQgdGhpcyB3aWxsIGludHJvZHVjZSBhIGxvdCBvZiBmYWxzZSBwb3NpdGl2ZXNcblx0XHQvLyBhbmQgUnVzdCdzIG5hbWluZyBjb252ZW50aW9ucyByZWNvbW1lbmQgc25ha2VfY2FzZSBhbnl3YXkuXG5cdFx0Ly8gaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy8xLjAuMC9zdHlsZS9zdHlsZS9uYW1pbmcvUkVBRE1FLmh0bWxcblx0XHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccyooPzo6Olxccyo8fFxcKCkpLyxcblx0XHQnbWFjcm8nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFx3KyEvLFxuXHRcdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0XHR9LFxuXHRcdCdjb25zdGFudCc6IC9cXGJbQS1aX11bQS1aX1xcZF0rXFxiLyxcblx0XHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVxcdypcXGIvLFxuXG5cdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPzpcXGJbYS16XVthLXpfXFxkXSpcXHMqOjpcXHMqKSpcXGJbYS16XVthLXpfXFxkXSpcXHMqOjooPyFcXHMqPCkvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC86Oi9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0Ly8gSGV4LCBvY3QsIGJpbiwgZGVjIG51bWJlcnMgd2l0aCB2aXN1YWwgc2VwYXJhdG9ycyBhbmQgdHlwZSBzdWZmaXhcblx0XHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZEEtRmEtZl0oPzpfP1tcXGRBLUZhLWZdKSp8MG9bMC03XSg/Ol8/WzAtN10pKnwwYlswMV0oPzpfP1swMV0pKnwoPzooPzpcXGQoPzpfP1xcZCkqKT9cXC4pP1xcZCg/Ol8/XFxkKSooPzpbRWVdWystXT9cXGQrKT8pKD86Xz8oPzpmMzJ8ZjY0fFtpdV0oPzo4fDE2fDMyfDY0fHNpemUpPykpP1xcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC8tPnxcXC5cXC49fFxcLnsxLDN9fDo6fFt7fVtcXF07KCksOl0vLFxuXHRcdCdvcGVyYXRvcic6IC9bLSsqXFwvJSFeXT0/fD1bPT5dP3wmWyY9XT98XFx8W3w9XT98PDw/PT98Pj4/PT98W0A/XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMucnVzdFsnY2xvc3VyZS1wYXJhbXMnXS5pbnNpZGUucmVzdCA9IFByaXNtLmxhbmd1YWdlcy5ydXN0O1xuXHRQcmlzbS5sYW5ndWFnZXMucnVzdFsnYXR0cmlidXRlJ10uaW5zaWRlWydzdHJpbmcnXSA9IFByaXNtLmxhbmd1YWdlcy5ydXN0WydzdHJpbmcnXTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIHN0cmluZ1BhdHRlcm4gPSAvKD86XCIoPzpcIlwifFteXCJdKSpcIig/IVwiKXwnKD86Jyd8W14nXSkqJyg/IScpKS8uc291cmNlO1xuXG5cdHZhciBudW1iZXIgPSAvXFxiKD86XFxkW1xcZGEtZl0qeHxcXGQrKD86XFwuXFxkKyk/KD86ZVsrLV0/XFxkKyk/KVxcYi9pO1xuXHR2YXIgbnVtZXJpY0NvbnN0YW50ID0ge1xuXHRcdHBhdHRlcm46IFJlZ0V4cChzdHJpbmdQYXR0ZXJuICsgJ1tieF0nKSxcblx0XHRhbGlhczogJ251bWJlcidcblx0fTtcblxuXHR2YXIgbWFjcm9WYXJpYWJsZSA9IHtcblx0XHRwYXR0ZXJuOiAvJlthLXpfXVxcdyovaVxuXHR9O1xuXG5cdHZhciBtYWNyb0tleXdvcmQgPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFxcc3w9fFxcKCkpJSg/OkFCT1JUfEJZfENNU3xDT1BZfERJU1BMQVl8RE98RUxTRXxFTkR8RVZBTHxHTE9CQUx8R098R09UT3xJRnxJTkN8SU5DTFVERXxJTkRFWHxJTlBVVHxLVFJJTXxMRU5HVEh8TEVUfExJU1R8TE9DQUx8UFVUfFFLVFJJTXxRU0NBTnxRU1VCU1RSfFFTWVNGVU5DfFFVUENBU0V8UkVUVVJOfFJVTnxTQ0FOfFNVQlNUUnxTVVBFUlF8U1lNREVMfFNZTUVYSVNUfFNZTUdMT0JMfFNZTUxPQ0FMfFNZU0NBTEx8U1lTRVZBTEZ8U1lTRVhFQ3xTWVNGVU5DfFNZU0dFVHxTWVNSUFVUfFRIRU58VE98VFNPfFVOUVVPVEV8VU5USUx8VVBDQVNFfFdISUxFfFdJTkRPVylcXGIvaSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fTtcblxuXHR2YXIgc3RlcCA9IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OnByb2NcXHMrXFx3K3xkYXRhKD8hPSl8cXVpdHxydW4pXFxiL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cblx0dmFyIGNvbW1lbnQgPSBbXG5cdFx0L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSp8O1xccyopXFwqW147XSo7L20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdO1xuXG5cdHZhciBzdHJpbmcgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZ1BhdHRlcm4pLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9O1xuXG5cdHZhciBwdW5jdHVhdGlvbiA9IC9bJCVALigpe31cXFtcXF07LFxcXFxdLztcblxuXHR2YXIgZnVuYyA9IHtcblx0XHRwYXR0ZXJuOiAvJT9cXGJcXHcrKD89XFwoKS8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9O1xuXG5cdHZhciBhcmdzID0ge1xuXHRcdCdmdW5jdGlvbic6IGZ1bmMsXG5cdFx0J2FyZy12YWx1ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oPVxccyopW0EtWlxcLl0rL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0J21hY3JvLXZhcmlhYmxlJzogbWFjcm9WYXJpYWJsZSxcblx0XHQnYXJnJzoge1xuXHRcdFx0cGF0dGVybjogL1tBLVpdKy9pLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J251bWJlcic6IG51bWJlcixcblx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvbixcblx0XHQnc3RyaW5nJzogc3RyaW5nXG5cdH07XG5cblx0dmFyIGZvcm1hdCA9IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86Zm9ybWF0fHB1dClcXGI9P1tcXHcnJC5dKy9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXig/OmZvcm1hdHxwdXQpKD89PSkvaSxcblx0XHRcdCdlcXVhbHMnOiAvPS8sXG5cdFx0XHQnZm9ybWF0Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKD86XFx3fFxcJFxcZCkrXFwuXFxkPy8sXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblxuXHR2YXIgYWx0Zm9ybWF0ID0ge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpmb3JtYXR8cHV0KVxccytbXFx3J10rKD86XFxzK1skLlxcd10rKSsoPz07KS9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiAvXig/OmZvcm1hdHxwdXQpL2ksXG5cdFx0XHQnZm9ybWF0Jzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvW1xcdyRdK1xcLlxcZD8vLFxuXHRcdFx0XHRhbGlhczogJ251bWJlcidcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGdsb2JhbFN0YXRlbWVudHMgPSB7XG5cdFx0cGF0dGVybjogLygoPzpefFxccyk9PykoPzpjYXRuYW1lfGNoZWNrcG9pbnQgZXhlY3V0ZV9hbHdheXN8ZG18ZW5kc2FzfGZpbGVuYW1lfGZvb3Rub3RlfCVpbmNsdWRlfGxpYm5hbWV8JWxpc3R8bG9ja3xtaXNzaW5nfG9wdGlvbnN8cGFnZXxyZXNldGxpbmV8JXJ1bnxzYXNmaWxlfHNraXB8c3lzZWNob3x0aXRsZVxcZD8pXFxiL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH07XG5cblx0dmFyIHN1Ym1pdFN0YXRlbWVudCA9IHtcblx0XHRwYXR0ZXJuOiAvKF58XFxzKSg/OnN1Ym1pdCg/OlxccysoPzpsb2FkfG5vcnVufHBhcnNlb25seSkpP3xlbmRzdWJtaXQpXFxiL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH07XG5cblx0dmFyIGFjdGlvblNldHMgPSAvYVN0b3JlfGFjY2Vzc0NvbnRyb2x8YWdncmVnYXRpb258YXVkaW98YXV0b3R1bmV8YmF5ZXNpYW5OZXRDbGFzc2lmaWVyfGJpb01lZEltYWdlfGJvb2xSdWxlfGJ1aWx0aW5zfGNhcmRpbmFsaXR5fGNkbXxjbHVzdGVyaW5nfGNvbmRpdGlvbmFsUmFuZG9tRmllbGRzfGNvbmZpZ3VyYXRpb258Y29wdWxhfGNvdW50cmVnfGRhdGFEaXNjb3Zlcnl8ZGF0YVByZXByb2Nlc3N8ZGF0YVNjaWVuY2VQaWxvdHxkYXRhU3RlcHxkZWNpc2lvblRyZWV8ZGVkdXBsaWNhdGlvbnxkZWVwTGVhcm58ZGVlcE5ldXJhbHxkZWVwUm5ufGRzMnxlY218ZW50aXR5UmVzfGVzcENsdXN0ZXJ8ZXhwbGFpbk1vZGVsfGZhY3RtYWN8ZmFzdEtubnxmY21wYWN0fGZlZFNxbHxmcmVxVGFifGdWYXJDbHVzdGVyfGdhbXxnbGVhbXxncmFwaFNlbWlTdXBMZWFybnxoaWRkZW5NYXJrb3ZNb2RlbHxoeXBlckdyb3VwfGljYXxpbWFnZXxpbWx8a2VybmFsUGNhfGxhbmdNb2RlbHxsZGFUb3BpY3xsb2FkU3RyZWFtc3xtYmN8bWl4ZWR8bWxUb29sc3xtb2RlbFB1Ymxpc2hpbmd8bmV0d29ya3xuZXVyYWxOZXR8bm1mfG5vblBhcmFtZXRyaWNCYXllc3xub25saW5lYXJ8b3B0TmV0d29ya3xvcHRpbWl6YXRpb258cGFuZWx8cGNhfHBlcmNlbnRpbGV8cGhyZWd8cGxzfHFrYnxxbGltfHF1YW50cmVnfHJlY29tbWVuZHxyZWdyZXNzaW9ufHJlaW5mb3JjZW1lbnRMZWFybnxyb2J1c3RQY2F8cnVsZU1pbmluZ3xzYW1wbGluZ3xzYW5kd2ljaHxzY2Nhc2x8c2VhcmNoKD86QW5hbHl0aWNzKT98c2VudGltZW50QW5hbHlzaXN8c2VxdWVuY2V8c2Vzc2lvbig/OlByb3ApP3xzZXZlcml0eXxzaW1TeXN0ZW18c2ltcGxlfHNtYXJ0RGF0YXxzcGFya0VtYmVkZGVkUHJvY2Vzc3xzcGFyc2VNTHxzcGF0aWFscmVnfHNwY3xzdGFiaWxpdHlNb25pdG9yaW5nfHN2RGF0YURlc2NyaXB0aW9ufHN2bXx0YWJsZXx0ZXh0KD86RmlsdGVyc3xGcmVxdWVuY3l8TWluaW5nfFBhcnNlfFJ1bGUoPzpEZXZlbG9wfFNjb3JlKXxUb3BpY3xVdGlsKXx0aW1lRGF0YXx0cmFuc3Bvc2V8dHNJbmZvfHRzUmVjb25jaWxlfHVuaVRpbWVTZXJpZXN8dmFyUmVkdWNlLy5zb3VyY2U7XG5cblx0dmFyIGNhc0FjdGlvbnMgPSB7XG5cdFx0cGF0dGVybjogUmVnRXhwKC8oXnxcXHMpKD86YWN0aW9uXFxzKyk/KD86PGFjdD4pXFwuW2Etel0rXFxiW147XSsvLnNvdXJjZS5yZXBsYWNlKC88YWN0Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBhY3Rpb25TZXRzOyB9KSwgJ2knKSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2tleXdvcmQnOiBSZWdFeHAoLyg/OjxhY3Q+KVxcLlthLXpdK1xcYi8uc291cmNlLnJlcGxhY2UoLzxhY3Q+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGFjdGlvblNldHM7IH0pLCAnaScpLFxuXHRcdFx0J2FjdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogLyg/OmFjdGlvbikvaSxcblx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0fSxcblx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdCdmdW5jdGlvbic6IGZ1bmMsXG5cdFx0XHQnYXJnLXZhbHVlJzogYXJnc1snYXJnLXZhbHVlJ10sXG5cdFx0XHQnb3BlcmF0b3InOiBhcmdzLm9wZXJhdG9yLFxuXHRcdFx0J2FyZ3VtZW50JzogYXJncy5hcmcsXG5cdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0J251bWVyaWMtY29uc3RhbnQnOiBudW1lcmljQ29uc3RhbnQsXG5cdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvbixcblx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHR9XG5cdH07XG5cblx0dmFyIGtleXdvcmRzID0ge1xuXHRcdHBhdHRlcm46IC8oKD86XnxcXHMpPT8pKD86YWZ0ZXJ8YW5hbHlzaXN8YW5kfGFycmF5fGJhcmNoYXJ0fGJhcndpZHRofGJlZ2luZ3JhcGh8Ynl8Y2FsbHxjYXN8Y2JhcmxpbmV8Y2ZpbGx8Y2xhc3MoPzpsZXYpP3xjbG9zZXxjb2x1bW58Y29tcHV0ZWQ/fGNvbnRhaW5zfGNvbnRpbnVlfGRhdGEoPz09KXxkZWZpbmV8ZGVsZXRlfGRlc2NyaWJlfGRvY3VtZW50fGRvXFxzK292ZXJ8ZG98ZG9sfGRyb3B8ZHVsfGVsc2V8ZW5kKD86Y29tcHxzb3VyY2UpP3xlbnRyeVRpdGxlfGV2YWwoPzp1YXRlKT98ZXhlYyg/OnV0ZSk/fGV4aXR8ZmlsZSg/Om5hbWUpP3xmaWxsKD86YXR0cnMpP3xmbGlzdHxmbmN8ZnVuY3Rpb24oPzpsaXN0KT98Z2xvYmFsfGdvdG98Z3JvdXAoPzpieSk/fGhlYWRsaW5lfGhlYWRza2lwfGhpc3RvZ3JhbXxpZnxpbmZpbGV8a2VlcHxrZXlsYWJlbHxrZXl3b3JkfGxhYmVsfGxheW91dHxsZWF2ZXxsZWdlbmRsYWJlbHxsZW5ndGh8bGlibmFtZXxsb2FkYWN0aW9uc2V0fG1lcmdlfG1pZHBvaW50c3xfP251bGxffG5hbWV8bm9vYnN8bm93ZHxvZHN8b3B0aW9uc3xvcnxvdGhlcndpc2V8b3V0KD86cHV0KT98b3Zlcig/OmxheSk/fHBsb3R8cHJpbnR8cHV0fHJhaXNlfHJhbmV4cHxyYW5ub3J8cmJyZWFrfHJldGFpbnxyZXR1cm58c2VsZWN0fHNlc3Npb258c2Vzc3JlZnxzZXR8c291cmNlfHN0YXRncmFwaHxzdW18c3VtbWFyaXplfHRhYmxlfHRlbXB8dGVybWluYXRlfHRoZW5cXHMrZG98dGhlbnx0aXRsZVxcZD98dG98dmFyfHdoZW58d2hlcmV8eGF4aXNvcHRzfHkyYXhpc29wdHN8eWF4aXNvcHRzKVxcYi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnNhcyA9IHtcblx0XHQnZGF0YWxpbmVzJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKikoPzpjYXJkc3woPzpkYXRhKT9saW5lcyk7W1xcc1xcU10rP15bIFxcdF0qOy9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2tleXdvcmQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oPzpjYXJkc3woPzpkYXRhKT9saW5lcykvaVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOy9cblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2Mtc3FsJzoge1xuXHRcdFx0cGF0dGVybjogLyhecHJvY1xccysoPzpmZWQpP3NxbCg/OlxccytbXFx3fD1dKyk/OylbXFxzXFxTXSs/KD89Xig/OnByb2NcXHMrXFx3K3xkYXRhfHF1aXR8cnVuKTt8KD8hW1xcc1xcU10pKS9pbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3NxbCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoL15bIFxcdF0qKD86c2VsZWN0fGFsdGVyXFxzK3RhYmxlfCg/OmNyZWF0ZXxkZXNjcmliZXxkcm9wKVxccysoPzppbmRleHx0YWJsZSg/Olxccytjb25zdHJhaW50cyk/fHZpZXcpfGNyZWF0ZVxccyt1bmlxdWVcXHMraW5kZXh8aW5zZXJ0XFxzK2ludG98dXBkYXRlKSg/OjxzdHI+fFteO1wiJ10pKzsvLnNvdXJjZS5yZXBsYWNlKC88c3RyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmdQYXR0ZXJuOyB9KSwgJ2ltJyksXG5cdFx0XHRcdFx0YWxpYXM6ICdsYW5ndWFnZS1zcWwnLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnNxbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnZ2xvYmFsLXN0YXRlbWVudHMnOiBnbG9iYWxTdGF0ZW1lbnRzLFxuXHRcdFx0XHQnc3FsLXN0YXRlbWVudHMnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogLyhefFxccykoPzpkaXNjb25uZWN0XFxzK2Zyb218YmVnaW58Y29tbWl0fGV4ZWMoPzp1dGUpP3xyZXNldHxyb2xsYmFja3x2YWxpZGF0ZSlcXGIvaSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAna2V5d29yZCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0J251bWVyaWMtY29uc3RhbnQnOiBudW1lcmljQ29uc3RhbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwcm9jLWdyb292eSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnByb2NcXHMrZ3Jvb3Z5KD86XFxzK1tcXHd8PV0rKT87KVtcXHNcXFNdKz8oPz1eKD86cHJvY1xccytcXHcrfGRhdGF8cXVpdHxydW4pO3woPyFbXFxzXFxTXSkpL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdCdncm9vdnknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oXlsgXFx0XSpzdWJtaXQoPzpcXHMrKD86bG9hZHxub3J1bnxwYXJzZW9ubHkpKT8pKD86PHN0cj58W15cIiddKSs/KD89ZW5kc3VibWl0OykvLnNvdXJjZS5yZXBsYWNlKC88c3RyPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBzdHJpbmdQYXR0ZXJuOyB9KSwgJ2ltJyksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLWdyb292eScsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuZ3Jvb3Z5XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdzdWJtaXQtc3RhdGVtZW50Jzogc3VibWl0U3RhdGVtZW50LFxuXHRcdFx0XHQnZ2xvYmFsLXN0YXRlbWVudHMnOiBnbG9iYWxTdGF0ZW1lbnRzLFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb24sXG5cdFx0XHRcdCdzdHJpbmcnOiBzdHJpbmdcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J3Byb2MtbHVhJzoge1xuXHRcdFx0cGF0dGVybjogLyhecHJvY1xccytsdWEoPzpcXHMrW1xcd3w9XSspPzspW1xcc1xcU10rPyg/PV4oPzpwcm9jXFxzK1xcdyt8ZGF0YXxxdWl0fHJ1bik7fCg/IVtcXHNcXFNdKSkvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J2x1YSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyheWyBcXHRdKnN1Ym1pdCg/OlxccysoPzpsb2FkfG5vcnVufHBhcnNlb25seSkpPykoPzo8c3RyPnxbXlwiJ10pKz8oPz1lbmRzdWJtaXQ7KS8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtbHVhJyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5sdWFcblx0XHRcdFx0fSxcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J3N1Ym1pdC1zdGF0ZW1lbnQnOiBzdWJtaXRTdGF0ZW1lbnQsXG5cdFx0XHRcdCdnbG9iYWwtc3RhdGVtZW50cyc6IGdsb2JhbFN0YXRlbWVudHMsXG5cdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdCdudW1lcmljLWNvbnN0YW50JzogbnVtZXJpY0NvbnN0YW50LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiBwdW5jdHVhdGlvbixcblx0XHRcdFx0J3N0cmluZyc6IHN0cmluZ1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQncHJvYy1jYXMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5wcm9jXFxzK2Nhcyg/OlxccytbXFx3fD1dKyk/OylbXFxzXFxTXSs/KD89Xig/OnByb2NcXHMrXFx3K3xxdWl0fGRhdGEpO3woPyFbXFxzXFxTXSkpL2ltLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnY29tbWVudCc6IGNvbW1lbnQsXG5cdFx0XHRcdCdzdGF0ZW1lbnQtdmFyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHMpPT8pc2F2ZXJlc3VsdFxcc1teO10rL2ltLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cblx0XHRcdFx0XHRcdCdzdGF0ZW1lbnQnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9ec2F2ZXJlc3VsdFxccytcXFMrL2ksXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdGtleXdvcmQ6IC9eKD86c2F2ZXJlc3VsdCkvaVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0cmVzdDogYXJnc1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J2Nhcy1hY3Rpb25zJzogY2FzQWN0aW9ucyxcblx0XHRcdFx0J3N0YXRlbWVudCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58XFxzKT0/KSg/OmRlZmF1bHR8KD86dW4pP3NldHxvbnxvdXRwdXR8dXBsb2FkKVteO10rL2ltLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiBhcmdzXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdGVwJzogc3RlcCxcblx0XHRcdFx0J2tleXdvcmQnOiBrZXl3b3Jkcyxcblx0XHRcdFx0J2Z1bmN0aW9uJzogZnVuYyxcblx0XHRcdFx0J2Zvcm1hdCc6IGZvcm1hdCxcblx0XHRcdFx0J2FsdGZvcm1hdCc6IGFsdGZvcm1hdCxcblx0XHRcdFx0J2dsb2JhbC1zdGF0ZW1lbnRzJzogZ2xvYmFsU3RhdGVtZW50cyxcblx0XHRcdFx0J251bWJlcic6IG51bWJlcixcblx0XHRcdFx0J251bWVyaWMtY29uc3RhbnQnOiBudW1lcmljQ29uc3RhbnQsXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uLFxuXHRcdFx0XHQnc3RyaW5nJzogc3RyaW5nXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwcm9jLWFyZ3MnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhecHJvY1xccytcXHcrXFxzKykoPyFcXHMpKD86W147XCInXXw8c3RyPikrOy8uc291cmNlLnJlcGxhY2UoLzxzdHI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ1BhdHRlcm47IH0pLCAnaW0nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IGFyZ3Ncblx0XHR9LFxuXHRcdC8qU3BlY2lhbCBrZXl3b3JkcyB3aXRoaW4gbWFjcm9zKi9cblx0XHQnbWFjcm8ta2V5d29yZCc6IG1hY3JvS2V5d29yZCxcblx0XHQnbWFjcm8tdmFyaWFibGUnOiBtYWNyb1ZhcmlhYmxlLFxuXHRcdCdtYWNyby1zdHJpbmctZnVuY3Rpb25zJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFxcc3w9KSklKD86QlFVT1RFfE5SQlFVT1RFfE5SUVVPVEV8TlJTVFJ8UVVPVEV8U1RSKVxcKC4qPyg/OlteJV1cXCkpL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvJSg/OkJRVU9URXxOUkJRVU9URXxOUlFVT1RFfE5SU1RSfFFVT1RFfFNUUikvaSxcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdtYWNyby1rZXl3b3JkJzogbWFjcm9LZXl3b3JkLFxuXHRcdFx0XHQnbWFjcm8tdmFyaWFibGUnOiBtYWNyb1ZhcmlhYmxlLFxuXHRcdFx0XHQnZXNjYXBlZC1jaGFyJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8lWydcIigpPD49XHUwMEFDXn47LCNdLyxcblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogcHVuY3R1YXRpb25cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdtYWNyby1kZWNsYXJhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC9eJW1hY3JvW147XSsoPz07KS9pbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IC8lbWFjcm8vaSxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdtYWNyby1lbmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXiVtZW5kW147XSsoPz07KS9pbSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IC8lbWVuZC9pLFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0LyolX3pzY29yZShoZWFkY2lyLCBfbGhjLCBfbWhjLCBfc2hjLCBoZWFkY3osIGhlYWRjcGN0LCBfRmhlYWRjeik7ICovXG5cdFx0J21hY3JvJzoge1xuXHRcdFx0cGF0dGVybjogLyVfXFx3Kyg/PVxcKCkvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2lucHV0Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcYmlucHV0XFxzWy1cXHdcXHMvKi4kJl0rOy9pLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnB1dCc6IHtcblx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnLFxuXHRcdFx0XHRcdHBhdHRlcm46IC9eaW5wdXQvaSxcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbW1lbnQnOiBjb21tZW50LFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdFx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J29wdGlvbnMtYXJncyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXm9wdGlvbnMpWy0nXCJ8L1xcXFw8PiorPTooKVxcd1xcc10qKD89OykvaW0sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiBhcmdzXG5cdFx0fSxcblx0XHQnY2FzLWFjdGlvbnMnOiBjYXNBY3Rpb25zLFxuXHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHQnZnVuY3Rpb24nOiBmdW5jLFxuXHRcdCdmb3JtYXQnOiBmb3JtYXQsXG5cdFx0J2FsdGZvcm1hdCc6IGFsdGZvcm1hdCxcblx0XHQnbnVtZXJpYy1jb25zdGFudCc6IG51bWVyaWNDb25zdGFudCxcblx0XHQnZGF0ZXRpbWUnOiB7XG5cdFx0XHQvLyAnMWphbjIwMTMnZCwgJzk6MjU6MTlwbSd0LCAnMThqYW4yMDAzOjk6Mjc6MDVhbSdkdFxuXHRcdFx0cGF0dGVybjogUmVnRXhwKHN0cmluZ1BhdHRlcm4gKyAnKD86ZHQ/fHQpJyksXG5cdFx0XHRhbGlhczogJ251bWJlcidcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiBzdHJpbmcsXG5cdFx0J3N0ZXAnOiBzdGVwLFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0Ly8gSW4gU0FTIFN0dWRpbyBzeW50YXggaGlnaGxpZ2h0aW5nLCB0aGVzZSBvcGVyYXRvcnMgYXJlIHN0eWxlZCBsaWtlIGtleXdvcmRzXG5cdFx0J29wZXJhdG9yLWtleXdvcmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86ZXF8Z2V8Z3R8aW58bGV8bHR8bmV8bm90KVxcYi9pLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdC8vIERlY2ltYWwgKDEuMmUyMyksIGhleGFkZWNpbWFsICgwYzF4KVxuXHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0J29wZXJhdG9yJzogL1xcKlxcKj98XFx8XFx8P3whIT98XHUwMEE2XHUwMEE2P3w8Wz49XT98Pls8PV0/fFstK1xcLz0mXXxbflx1MDBBQ15dPT8vLFxuXHRcdCdwdW5jdHVhdGlvbic6IHB1bmN0dWF0aW9uXG5cdH07XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHRQcmlzbS5sYW5ndWFnZXMuc2FzcyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NzcycsIHtcblx0XHQvLyBTYXNzIGNvbW1lbnRzIGRvbid0IG5lZWQgdG8gYmUgY2xvc2VkLCBvbmx5IGluZGVudGVkXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKVxcL1tcXC8qXS4qKD86KD86XFxyP1xcbnxcXHIpXFwxWyBcXHRdLispKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2FzcycsICdhdHJ1bGUnLCB7XG5cdFx0Ly8gV2Ugd2FudCB0byBjb25zdW1lIHRoZSB3aG9sZSBsaW5lXG5cdFx0J2F0cnVsZS1saW5lJzoge1xuXHRcdFx0Ly8gSW5jbHVkZXMgc3VwcG9ydCBmb3IgPSBhbmQgKyBzaG9ydGN1dHNcblx0XHRcdHBhdHRlcm46IC9eKD86WyBcXHRdKilbQCs9XS4rL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2F0cnVsZSc6IC8oPzpAW1xcdy1dK3xbKz1dKS9cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXHRkZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNhc3MuYXRydWxlO1xuXG5cblx0dmFyIHZhcmlhYmxlID0gL1xcJFstXFx3XSt8I1xce1xcJFstXFx3XStcXH0vO1xuXHR2YXIgb3BlcmF0b3IgPSBbXG5cdFx0L1srKlxcLyVdfFs9IV09fDw9P3w+PT98XFxiKD86YW5kfG5vdHxvcilcXGIvLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFxzKS0oPz1cXHMpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2FzcycsICdwcm9wZXJ0eScsIHtcblx0XHQvLyBXZSB3YW50IHRvIGNvbnN1bWUgdGhlIHdob2xlIGxpbmVcblx0XHQndmFyaWFibGUtbGluZSc6IHtcblx0XHRcdHBhdHRlcm46IC9eWyBcXHRdKlxcJC4rL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogLzovLFxuXHRcdFx0XHQndmFyaWFibGUnOiB2YXJpYWJsZSxcblx0XHRcdFx0J29wZXJhdG9yJzogb3BlcmF0b3Jcblx0XHRcdH1cblx0XHR9LFxuXHRcdC8vIFdlIHdhbnQgdG8gY29uc3VtZSB0aGUgd2hvbGUgbGluZVxuXHRcdCdwcm9wZXJ0eS1saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL15bIFxcdF0qKD86W146XFxzXSsgKjouKnw6W146XFxzXS4qKS9tLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwcm9wZXJ0eSc6IFtcblx0XHRcdFx0XHQvW146XFxzXSsoPz1cXHMqOikvLFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOilbXjpcXHNdKy8sXG5cdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRdLFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdCd2YXJpYWJsZSc6IHZhcmlhYmxlLFxuXHRcdFx0XHQnb3BlcmF0b3InOiBvcGVyYXRvcixcblx0XHRcdFx0J2ltcG9ydGFudCc6IFByaXNtLmxhbmd1YWdlcy5zYXNzLmltcG9ydGFudFxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMuc2Fzcy5wcm9wZXJ0eTtcblx0ZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5zYXNzLmltcG9ydGFudDtcblxuXHQvLyBOb3cgdGhhdCB3aG9sZSBsaW5lcyBmb3Igb3RoZXIgcGF0dGVybnMgYXJlIGNvbnN1bWVkLFxuXHQvLyB3aGF0J3MgbGVmdCBzaG91bGQgYmUgc2VsZWN0b3JzXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3Nhc3MnLCAncHVuY3R1YXRpb24nLCB7XG5cdFx0J3NlbGVjdG9yJzoge1xuXHRcdFx0cGF0dGVybjogL14oWyBcXHRdKilcXFMoPzosW14sXFxyXFxuXSt8W14sXFxyXFxuXSopKD86LFteLFxcclxcbl0rKSooPzosKD86XFxyP1xcbnxcXHIpXFwxWyBcXHRdK1xcUyg/OixbXixcXHJcXG5dK3xbXixcXHJcXG5dKikoPzosW14sXFxyXFxuXSspKikqL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMuc2NzcyA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NzcycsIHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pKD86XFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2F0cnVsZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFtcXHctXSg/OlxcKFteKCldK1xcKXxbXigpXFxzXXxcXHMrKD8hXFxzKSkqPyg/PVxccytbeztdKS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncnVsZSc6IC9AW1xcdy1dKy9cblx0XHRcdC8vIFNlZSByZXN0IGJlbG93XG5cdFx0fVxuXHR9LFxuXHQvLyB1cmwsIGNvbXBhc3NpZmllZFxuXHQndXJsJzogLyg/OlstYS16XSstKT91cmwoPz1cXCgpL2ksXG5cdC8vIENTUyBzZWxlY3RvciByZWdleCBpcyBub3QgYXBwcm9wcmlhdGUgZm9yIFNhc3Ncblx0Ly8gc2luY2UgdGhlcmUgY2FuIGJlIGxvdCBtb3JlIHRoaW5ncyAodmFyLCBAIGRpcmVjdGl2ZSwgbmVzdGluZy4uKVxuXHQvLyBhIHNlbGVjdG9yIG11c3Qgc3RhcnQgYXQgdGhlIGVuZCBvZiBhIHByb3BlcnR5IG9yIGFmdGVyIGEgYnJhY2UgKGVuZCBvZiBvdGhlciBydWxlcyBvciBuZXN0aW5nKVxuXHQvLyBpdCBjYW4gY29udGFpbiBzb21lIGNoYXJhY3RlcnMgdGhhdCBhcmVuJ3QgdXNlZCBmb3IgZGVmaW5pbmcgcnVsZXMgb3IgZW5kIG9mIHNlbGVjdG9yLCAmIChwYXJlbnQgc2VsZWN0b3IpLCBvciBpbnRlcnBvbGF0ZWQgdmFyaWFibGVcblx0Ly8gdGhlIGVuZCBvZiBhIHNlbGVjdG9yIGlzIGZvdW5kIHdoZW4gdGhlcmUgaXMgbm8gcnVsZXMgaW4gaXQgKCB7fSBvciB7XFxzfSkgb3IgaWYgdGhlcmUgaXMgYSBwcm9wZXJ0eSAoYmVjYXVzZSBhbiBpbnRlcnBvbGF0ZWQgdmFyXG5cdC8vIGNhbiBcInBhc3NcIiBhcyBhIHNlbGVjdG9yLSBlLmc6IHByb3BlciN7JGVydHl9KVxuXHQvLyB0aGlzIG9uZSB3YXMgaGFyZCB0byBkbywgc28gcGxlYXNlIGJlIGNhcmVmdWwgaWYgeW91IGVkaXQgdGhpcyBvbmUgOilcblx0J3NlbGVjdG9yJzoge1xuXHRcdC8vIEluaXRpYWwgbG9vay1haGVhZCBpcyB1c2VkIHRvIHByZXZlbnQgbWF0Y2hpbmcgb2YgYmxhbmsgc2VsZWN0b3JzXG5cdFx0cGF0dGVybjogLyg/PVxcUylbXkA7e30oKV0/KD86W15AO3t9KClcXHNdfFxccysoPyFcXHMpfCNcXHtcXCRbLVxcd10rXFx9KSsoPz1cXHMqXFx7KD86XFx9fFxcc3xbXn1dW146e31dKls6e11bXn1dKSkvLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3BhcmVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogLyYvLFxuXHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHRcdH0sXG5cdFx0XHQncGxhY2Vob2xkZXInOiAvJVstXFx3XSsvLFxuXHRcdFx0J3ZhcmlhYmxlJzogL1xcJFstXFx3XSt8I1xce1xcJFstXFx3XStcXH0vXG5cdFx0fVxuXHR9LFxuXHQncHJvcGVydHknOiB7XG5cdFx0cGF0dGVybjogLyg/OlstXFx3XXxcXCRbLVxcd118I1xce1xcJFstXFx3XStcXH0pKyg/PVxccyo6KS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvXFwkWy1cXHddK3wjXFx7XFwkWy1cXHddK1xcfS9cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY3NzJywgJ2F0cnVsZScsIHtcblx0J2tleXdvcmQnOiBbXG5cdFx0L0AoPzpjb250ZW50fGRlYnVnfGVhY2h8ZWxzZSg/OiBpZik/fGV4dGVuZHxmb3J8Zm9yd2FyZHxmdW5jdGlvbnxpZnxpbXBvcnR8aW5jbHVkZXxtaXhpbnxyZXR1cm58dXNlfHdhcm58d2hpbGUpXFxiL2ksXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyggKSg/OmZyb218dGhyb3VnaCkoPz0gKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2NzcycsICdpbXBvcnRhbnQnLCB7XG5cdC8vIHZhciBhbmQgaW50ZXJwb2xhdGVkIHZhcnNcblx0J3ZhcmlhYmxlJzogL1xcJFstXFx3XSt8I1xce1xcJFstXFx3XStcXH0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc2NzcycsICdmdW5jdGlvbicsIHtcblx0J21vZHVsZS1tb2RpZmllcic6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YXN8aGlkZXxzaG93fHdpdGgpXFxiL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQncGxhY2Vob2xkZXInOiB7XG5cdFx0cGF0dGVybjogLyVbLVxcd10rLyxcblx0XHRhbGlhczogJ3NlbGVjdG9yJ1xuXHR9LFxuXHQnc3RhdGVtZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXEIhKD86ZGVmYXVsdHxvcHRpb25hbClcXGIvaSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bGwnOiB7XG5cdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J29wZXJhdG9yJzoge1xuXHRcdHBhdHRlcm46IC8oXFxzKSg/OlstKypcXC8lXXxbPSFdPXw8PT98Pj0/fGFuZHxub3R8b3IpKD89XFxzKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNjc3NbJ2F0cnVsZSddLmluc2lkZS5yZXN0ID0gUHJpc20ubGFuZ3VhZ2VzLnNjc3M7XG5cblByaXNtLmxhbmd1YWdlcy5zY2FsYSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2phdmEnLCB7XG5cdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXCJ8JykoPzpcXFxcLnwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvPC18PT58XFxiKD86YWJzdHJhY3R8Y2FzZXxjYXRjaHxjbGFzc3xkZWZ8ZG98ZWxzZXxleHRlbmRzfGZpbmFsfGZpbmFsbHl8Zm9yfGZvclNvbWV8aWZ8aW1wbGljaXR8aW1wb3J0fGxhenl8bWF0Y2h8bmV3fG51bGx8b2JqZWN0fG92ZXJyaWRlfHBhY2thZ2V8cHJpdmF0ZXxwcm90ZWN0ZWR8cmV0dXJufHNlYWxlZHxzZWxmfHN1cGVyfHRoaXN8dGhyb3d8dHJhaXR8dHJ5fHR5cGV8dmFsfHZhcnx3aGlsZXx3aXRofHlpZWxkKVxcYi8sXG5cdCdudW1iZXInOiAvXFxiMHgoPzpbXFxkYS1mXSpcXC4pP1tcXGRhLWZdK3woPzpcXGJcXGQrKD86XFwuXFxkKik/fFxcQlxcLlxcZCspKD86ZVxcZCspP1tkZmxdPy9pLFxuXHQnYnVpbHRpbic6IC9cXGIoPzpBbnl8QW55UmVmfEFueVZhbHxCb29sZWFufEJ5dGV8Q2hhcnxEb3VibGV8RmxvYXR8SW50fExvbmd8Tm90aGluZ3xTaG9ydHxTdHJpbmd8VW5pdClcXGIvLFxuXHQnc3ltYm9sJzogLydbXlxcZFxcc1xcXFxdXFx3Ki9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzY2FsYScsICd0cmlwbGUtcXVvdGVkLXN0cmluZycsIHtcblx0J3N0cmluZy1pbnRlcnBvbGF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbYS16XVxcdyooPzpcIlwiXCIoPzpbXiRdfFxcJCg/Oltee118XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKSo/XCJcIlwifFwiKD86W14kXCJcXHJcXG5dfFxcJCg/Oltee118XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKSpcIikvaSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnaWQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9eXFx3Ky8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHRcdH0sXG5cdFx0XHQnZXNjYXBlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxcXFxcJFwifFxcJFskXCJdLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ3N5bWJvbCdcblx0XHRcdH0sXG5cdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0cGF0dGVybjogL1xcJCg/Olxcdyt8XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pLyxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcJFxcez98XFx9JC8sXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnNjYWxhXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0fVxuXHR9XG59KTtcblxuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5zY2FsYVsnY2xhc3MtbmFtZSddO1xuZGVsZXRlIFByaXNtLmxhbmd1YWdlcy5zY2FsYVsnZnVuY3Rpb24nXTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIENBUkVGVUwhXG5cdC8vIFRoZSBmb2xsb3dpbmcgcGF0dGVybnMgYXJlIGNvbmNhdGVuYXRlZCwgc28gdGhlIGdyb3VwIHJlZmVyZW5jZWQgYnkgYSBiYWNrIHJlZmVyZW5jZSBpcyBub24tb2J2aW91cyFcblxuXHR2YXIgc3RyaW5ncyA9IFtcblx0XHQvLyBub3JtYWwgc3RyaW5nXG5cdFx0L1wiKD86XFxcXFtcXHNcXFNdfFxcJFxcKFteKV0rXFwpfFxcJCg/IVxcKCl8YFteYF0rYHxbXlwiXFxcXGAkXSkqXCIvLnNvdXJjZSxcblx0XHQvJ1teJ10qJy8uc291cmNlLFxuXHRcdC9cXCQnKD86W14nXFxcXF18XFxcXFtcXHNcXFNdKSonLy5zb3VyY2UsXG5cblx0XHQvLyBoZXJlIGRvY1xuXHRcdC8vIDIgY2FwdHVyaW5nIGdyb3Vwc1xuXHRcdC88PC0/XFxzKihbXCInXT8pKFxcdyspXFwxXFxzW1xcc1xcU10qP1tcXHJcXG5dXFwyLy5zb3VyY2Vcblx0XS5qb2luKCd8Jyk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydzaGVsbC1zZXNzaW9uJ10gPSB7XG5cdFx0J2NvbW1hbmQnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8vIHVzZXIgaW5mb1xuXHRcdFx0XHQvXi8uc291cmNlICtcblx0XHRcdFx0Jyg/OicgK1xuXHRcdFx0XHQoXG5cdFx0XHRcdFx0Ly8gPHVzZXI+IFwiOlwiICggPHBhdGg+ICk/XG5cdFx0XHRcdFx0L1teXFxzQDokIyUqIS9cXFxcXStAW15cXHJcXG5AOiQjJSohL1xcXFxdKyg/OjpbXlxcMC1cXHgxRiQjJSo/XCI8Pjo7fF0rKT8vLnNvdXJjZSArXG5cdFx0XHRcdFx0J3wnICtcblx0XHRcdFx0XHQvLyA8cGF0aD5cblx0XHRcdFx0XHQvLyBTaW5jZSB0aGUgcGF0aCBwYXR0ZXJuIGlzIHF1aXRlIGdlbmVyYWwsIHdlIHdpbGwgcmVxdWlyZSBpdCB0byBzdGFydCB3aXRoIGEgc3BlY2lhbCBjaGFyYWN0ZXIgdG9cblx0XHRcdFx0XHQvLyBwcmV2ZW50IGZhbHNlIHBvc2l0aXZlcy5cblx0XHRcdFx0XHQvWy9+Ll1bXlxcMC1cXHgxRiQjJSo/XCI8PkA6O3xdKi8uc291cmNlXG5cdFx0XHRcdCkgK1xuXHRcdFx0XHQnKT8nICtcblx0XHRcdFx0Ly8gc2hlbGwgc3ltYm9sXG5cdFx0XHRcdC9bJCMlXSg/PVxccykvLnNvdXJjZSArXG5cdFx0XHRcdC8vIGJhc2ggY29tbWFuZFxuXHRcdFx0XHQvKD86W15cXFxcXFxyXFxuIFxcdCdcIjwkXXxbIFxcdF0oPzooPyEjKXwjLiokKXxcXFxcKD86W15cXHJdfFxcclxcbj8pfFxcJCg/IScpfDwoPyE8KXw8PHN0cj4+KSsvLnNvdXJjZS5yZXBsYWNlKC88PHN0cj4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ3M7IH0pLFxuXHRcdFx0XHQnbSdcblx0XHRcdCksXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2luZm8nOiB7XG5cdFx0XHRcdFx0Ly8gZm9vQGJhcjp+L2ZpbGVzJCBleGl0XG5cdFx0XHRcdFx0Ly8gZm9vQGJhciQgZXhpdFxuXHRcdFx0XHRcdC8vIH4vZmlsZXMkIGV4aXRcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlteIyQlXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3VzZXInOiAvXlteXFxzQDokIyUqIS9cXFxcXStAW15cXHJcXG5AOiQjJSohL1xcXFxdKy8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi8sXG5cdFx0XHRcdFx0XHQncGF0aCc6IC9bXFxzXFxTXSsvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYmFzaCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5bJCMlXVxccyopXFxTW1xcc1xcU10qLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtYmFzaCcsXG5cdFx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuYmFzaFxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnc2hlbGwtc3ltYm9sJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eWyQjJV0vLFxuXHRcdFx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb3V0cHV0JzogLy4oPzouKig/OltcXHJcXG5dfC4kKSkqL1xuXHR9O1xuXG5cdFByaXNtLmxhbmd1YWdlc1snc2gtc2Vzc2lvbiddID0gUHJpc20ubGFuZ3VhZ2VzWydzaGVsbHNlc3Npb24nXSA9IFByaXNtLmxhbmd1YWdlc1snc2hlbGwtc2Vzc2lvbiddO1xuXG59KFByaXNtKSk7XG5cbi8vIFRlc3QgZmlsZXMgZm9yIHRoZSBwYXJzZXIgaXRzZWxmOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL0plc3VzRnJla2Uvc21hbGkvdHJlZS9tYXN0ZXIvc21hbGkvc3JjL3Rlc3QvcmVzb3VyY2VzL0xleGVyVGVzdFxuXG5QcmlzbS5sYW5ndWFnZXMuc21hbGkgPSB7XG5cdCdjb21tZW50JzogLyMuKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXHJcXG5cXFxcXCJdfFxcXFwuKSpcInwnKD86W15cXHJcXG5cXFxcJ118XFxcXCg/Oi58dVtcXGRhLWZBLUZdezR9KSknLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15MXSlMKD86KD86XFx3K3xgW15gXFxyXFxuXSpgKVxcLykqKD86W1xcdyRdK3xgW15gXFxyXFxuXSpgKSg/PVxccyo7KS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdjbGFzcy1uYW1lJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF5MfFxcLykoPzpbXFx3JF0rfGBbXmBcXHJcXG5dKmApJC8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnbmFtZXNwYWNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihMKSg/Oig/Olxcdyt8YFteYFxcclxcbl0qYClcXC8pKy8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC8vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHQnYnVpbHRpbic6IC9eTC9cblx0XHR9XG5cdH0sXG5cdCdidWlsdGluJzogW1xuXHRcdHtcblx0XHRcdC8vIFJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL0plc3VzRnJla2Uvc21hbGkvd2lraS9UeXBlc01ldGhvZHNBbmRGaWVsZHMjdHlwZXNcblx0XHRcdHBhdHRlcm46IC8oWygpO1xcW10pW0JDREZJSlNWWl0rLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdC8vIGUuZy4gLmZpZWxkIG1XaWZpT25VaWQ6SVxuXHRcdFx0cGF0dGVybjogLyhbXFx3JD5dOilbQkNERklKU1ZaXS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQna2V5d29yZCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcLmVuZFxccyspW1xcdy1dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pXFwuKD8hXFxkKVtcXHctXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3Li1dKSg/OmFic3RyYWN0fGFubm90YXRpb258YnJpZGdlfGNvbnN0cnVjdG9yfGVudW18ZmluYWx8aW50ZXJmYWNlfHByaXZhdGV8cHJvdGVjdGVkfHB1YmxpY3xydW50aW1lfHN0YXRpY3xzeW50aGV0aWN8c3lzdGVtfHRyYW5zaWVudCkoPyFbXFx3Li1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fVxuXHRdLFxuXHQnZnVuY3Rpb24nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Li1dKSg/Olxcdyt8PFtcXHckLV0rPikoPz1cXCgpLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cblx0J2ZpZWxkJzoge1xuXHRcdHBhdHRlcm46IC9bXFx3JF0rKD89OikvLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cdCdyZWdpc3Rlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pW3ZwXVxcZCg/IVtcXHcuLV0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdH0sXG5cblx0J2Jvb2xlYW4nOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFx3Li1dKSg/OmZhbHNlfHRydWUpKD8hW1xcdy4tXSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J251bWJlcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W14vXFx3Li1dKS0/KD86TkFOfElORklOSVRZfDB4KD86W1xcZEEtRl0rKD86XFwuW1xcZEEtRl0qKT98XFwuW1xcZEEtRl0rKSg/OnBbKy1dP1tcXGRBLUZdKyk/fCg/OlxcZCsoPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT8pW2RmbHN0XT8oPyFbXFx3Li1dKS9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogLyg6KVxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblxuXHQnb3BlcmF0b3InOiAvLT58XFwuXFwufFtcXFs9XS8sXG5cdCdwdW5jdHVhdGlvbic6IC9be30oKSw7Ol0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc21hbGx0YWxrID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFteXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC9cXCQuLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvJyg/OicnfFteJ10pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3ltYm9sJzogLyNbXFxkYS16XSt8Iyg/Oi18KFsrXFwvXFxcXCp+PD49QCV8Jj8hXSlcXDE/KXwjKD89XFwoKS9pLFxuXHQnYmxvY2stYXJndW1lbnRzJzoge1xuXHRcdHBhdHRlcm46IC8oXFxbXFxzKik6W15cXFt8XSpcXHwvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvOltcXGRhLXpdKy9pLFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfC9cblx0XHR9XG5cdH0sXG5cdCd0ZW1wb3JhcnktdmFyaWFibGVzJzoge1xuXHRcdHBhdHRlcm46IC9cXHxbXnxdK1xcfC8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndmFyaWFibGUnOiAvW1xcZGEtel0rL2ksXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFx8L1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86bmV3fG5pbHxzZWxmfHN1cGVyKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0J251bWJlcic6IFtcblx0XHQvXFxkK3ItP1tcXGRBLVpdKyg/OlxcLltcXGRBLVpdKyk/KD86ZS0/XFxkKyk/Lyxcblx0XHQvXFxiXFxkKyg/OlxcLlxcZCspPyg/OmUtP1xcZCspPy9cblx0XSxcblx0J29wZXJhdG9yJzogL1s8PV09P3w6PXx+W349XXxcXC9cXC8/fFxcXFxcXFxcfD5bPj1dP3xbIV4rXFwtKiZ8LEBdLyxcblx0J3B1bmN0dWF0aW9uJzogL1suOzo/XFxbXFxdKCl7fV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnNtYXJ0eSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7XFwqW1xcc1xcU10qP1xcKlxcfS8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdlbWJlZGRlZC1waHAnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXlxce3BocFxcfVtcXHNcXFNdKj9cXHtcXC9waHBcXH0vLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdzbWFydHknOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXHtwaHBcXH18XFx7XFwvcGhwXFx9JC8sXG5cdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHR9LFxuXHRcdFx0XHQncGhwJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGFsaWFzOiAnbGFuZ3VhZ2UtcGhwJyxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy5waHBcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1wiKD86XFxcXC58W15cIlxcXFxcXHJcXG5dKSpcIi8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXFx7W157fV0qXFx9fGBbXmBdKmAvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRcdHBhdHRlcm46IC9eW3tgXXxbYH1dJC8sXG5cdFx0XHRcdFx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHQndmFyaWFibGUnOiAvXFwkXFx3Ky9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLycoPzpcXFxcLnxbXidcXFxcXFxyXFxuXSkqJy8sXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRdLFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyheXFx7XFwvPylbYS16X11cXHcqXFxiKD8hXFwoKS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eXFx7XFwvP3xcXH0kLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fSxcblx0XHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rfCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdWy0rXT9cXGQrKT8vLFxuXHRcdCd2YXJpYWJsZSc6IFtcblx0XHRcdC9cXCQoPyFcXGQpXFx3Ky8sXG5cdFx0XHQvIyg/IVxcZClcXHcrIy8sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFwufC0+fFxcd1xccyo9KSg/IVxcZClcXHcrXFxiKD8hXFwoKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXFxbKSg/IVxcZClcXHcrKD89XFxdKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdmdW5jdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oXFx8XFxzKilAP1thLXpfXVxcdyp8XFxiW2Etel9dXFx3Kig/PVxcKCkvaSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdhdHRyLW5hbWUnOiAvXFxiW2Etel9dXFx3Kig/PVxccyo9KS9pLFxuXHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG5vfG9mZnxvbnx0cnVlfHllcylcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fS4sOmBdfC0+Lyxcblx0XHQnb3BlcmF0b3InOiBbXG5cdFx0XHQvWytcXC0qXFwvJV18PT0/PT98WyE8Pl09P3wmJnxcXHxcXHw/Lyxcblx0XHRcdC9cXGJpc1xccysoPzpub3RcXHMrKT8oPzpkaXZ8ZXZlbnxvZGQpKD86XFxzK2J5KT9cXGIvLFxuXHRcdFx0L1xcYig/OmFuZHxlcXxndD9lfGd0fGx0P2V8bHR8bW9kfG5lcT98bm90fG9yKVxcYi9cblx0XHRdXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnNtYXJ0eVsnZW1iZWRkZWQtcGhwJ10uaW5zaWRlLnNtYXJ0eS5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuc21hcnR5O1xuXHRQcmlzbS5sYW5ndWFnZXMuc21hcnR5LnN0cmluZ1swXS5pbnNpZGUuaW50ZXJwb2xhdGlvbi5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuc21hcnR5O1xuXG5cdHZhciBzdHJpbmcgPSAvXCIoPzpcXFxcLnxbXlwiXFxcXFxcclxcbl0pKlwifCcoPzpcXFxcLnxbXidcXFxcXFxyXFxuXSkqJy87XG5cdHZhciBzbWFydHlQYXR0ZXJuID0gUmVnRXhwKFxuXHRcdC8vIGNvbW1lbnRzXG5cdFx0L1xce1xcKltcXHNcXFNdKj9cXCpcXH0vLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvLyBwaHAgdGFnc1xuXHRcdC9cXHtwaHBcXH1bXFxzXFxTXSo/XFx7XFwvcGhwXFx9Ly5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0Ly8gc21hcnR5IGJsb2Nrc1xuXHRcdC9cXHsoPzpbXnt9XCInXXw8c3RyPnxcXHsoPzpbXnt9XCInXXw8c3RyPnxcXHsoPzpbXnt9XCInXXw8c3RyPikqXFx9KSpcXH0pKlxcfS8uc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPHN0cj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gc3RyaW5nLnNvdXJjZTsgfSksXG5cdFx0J2cnXG5cdCk7XG5cblx0Ly8gVG9rZW5pemUgYWxsIGlubGluZSBTbWFydHkgZXhwcmVzc2lvbnNcblx0UHJpc20uaG9va3MuYWRkKCdiZWZvcmUtdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIHNtYXJ0eUxpdGVyYWxTdGFydCA9ICd7bGl0ZXJhbH0nO1xuXHRcdHZhciBzbWFydHlMaXRlcmFsRW5kID0gJ3svbGl0ZXJhbH0nO1xuXHRcdHZhciBzbWFydHlMaXRlcmFsTW9kZSA9IGZhbHNlO1xuXG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLmJ1aWxkUGxhY2Vob2xkZXJzKGVudiwgJ3NtYXJ0eScsIHNtYXJ0eVBhdHRlcm4sIGZ1bmN0aW9uIChtYXRjaCkge1xuXHRcdFx0Ly8gU21hcnR5IHRhZ3MgaW5zaWRlIHtsaXRlcmFsfSBibG9jayBhcmUgaWdub3JlZFxuXHRcdFx0aWYgKG1hdGNoID09PSBzbWFydHlMaXRlcmFsRW5kKSB7XG5cdFx0XHRcdHNtYXJ0eUxpdGVyYWxNb2RlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc21hcnR5TGl0ZXJhbE1vZGUpIHtcblx0XHRcdFx0aWYgKG1hdGNoID09PSBzbWFydHlMaXRlcmFsU3RhcnQpIHtcblx0XHRcdFx0XHRzbWFydHlMaXRlcmFsTW9kZSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fSk7XG5cblx0Ly8gUmUtaW5zZXJ0IHRoZSB0b2tlbnMgYWZ0ZXIgdG9rZW5pemluZ1xuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdzbWFydHknKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuLy8gaHR0cHM6Ly9zbWxmYW1pbHkuZ2l0aHViLmlvL3NtbDk3LWRlZm4ucGRmXG4vLyBodHRwczovL3Blb3BsZS5tcGktc3dzLm9yZy9+cm9zc2Jlcmcvc21sLmh0bWxcbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5d29yZHMgPSAvXFxiKD86YWJzdHlwZXxhbmR8YW5kYWxzb3xhc3xjYXNlfGRhdGF0eXBlfGRvfGVsc2V8ZW5kfGVxdHlwZXxleGNlcHRpb258Zm58ZnVufGZ1bmN0b3J8aGFuZGxlfGlmfGlufGluY2x1ZGV8aW5maXh8aW5maXhyfGxldHxsb2NhbHxub25maXh8b2Z8b3B8b3BlbnxvcmVsc2V8cmFpc2V8cmVjfHNoYXJpbmd8c2lnfHNpZ25hdHVyZXxzdHJ1Y3R8c3RydWN0dXJlfHRoZW58dHlwZXx2YWx8d2hlcmV8d2hpbGV8d2l0aHx3aXRodHlwZSlcXGIvaTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21sID0ge1xuXHRcdC8vIGFsbG93IG9uZSBsZXZlbCBvZiBuZXN0aW5nXG5cdFx0J2NvbW1lbnQnOiAvXFwoXFwqKD86W14qKF18XFwqKD8hXFwpKXxcXCgoPyFcXCopfFxcKFxcKig/OlteKihdfFxcKig/IVxcKSl8XFwoKD8hXFwqKSkqXFwqXFwpKSpcXCpcXCkvLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvIz9cIig/OlteXCJcXFxcXXxcXFxcLikqXCIvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0e1xuXHRcdFx0XHQvLyBUaGlzIGlzIG9ubHkgYW4gYXBwcm94aW1hdGlvbiBzaW5jZSB0aGUgcmVhbCBncmFtbWFyIGlzIGNvbnRleHQtZnJlZVxuXHRcdFx0XHQvL1xuXHRcdFx0XHQvLyBXaHkgdGhlIG1haW4gbG9vcCBzbyBjb21wbGV4P1xuXHRcdFx0XHQvLyBUaGUgbWFpbiBsb29wIGlzIGFwcHJveGltYXRlbHkgdGhlIHNhbWUgYXMgLyg/OlxccyooPzpbKixdfC0+KVxccyo8VEVSTUlOQUw+KSovIHdoaWNoIGlzLCBvYnZpb3VzbHksIGEgbG90XG5cdFx0XHRcdC8vIHNpbXBsZXIuIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgaWYgYSBjb21tYSBpcyB0aGUgbGFzdCBpdGVyYXRpb24gb2YgdGhlIGxvb3AsIHRoZW4gdGhlIHRlcm1pbmFsIG11c3QgYmVcblx0XHRcdFx0Ly8gZm9sbG93ZWQgYnkgYSBsb25nIGlkZW50aWZpZXIuXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdFx0XHQvKCg/Ol58W146XSk6XFxzKik8VEVSTUlOQUw+KD86XFxzKig/Oig/OlxcKnwtPilcXHMqPFRFUk1JTkFMPnwsXFxzKjxURVJNSU5BTD4oPzooPz08Tk9ULUxBU1Q+KXwoPyE8Tk9ULUxBU1Q+KVxccys8TE9ORy1JRD4pKSkqLy5zb3VyY2Vcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC88Tk9ULUxBU1Q+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC9cXHMqKD86WyosXXwtPikvLnNvdXJjZTsgfSlcblx0XHRcdFx0XHRcdC5yZXBsYWNlKC88VEVSTUlOQUw+L2csIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIC8oPzonW1xcdyddKnw8TE9ORy1JRD58XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8XFx7KD86W157fV18XFx7W157fV0qXFx9KSpcXH0pKD86XFxzKzxMT05HLUlEPikqLy5zb3VyY2U7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdFx0LnJlcGxhY2UoLzxMT05HLUlEPi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiAvKD8hPEtFWVdPUkQ+KVthLXpcXGRfXVtcXHcnLl0qLy5zb3VyY2U7IH0pXG5cdFx0XHRcdFx0XHQucmVwbGFjZSgvPEtFWVdPUkQ+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleXdvcmRzLnNvdXJjZTsgfSksXG5cdFx0XHRcdFx0J2knXG5cdFx0XHRcdCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLygoPzpefFteXFx3J10pKD86ZGF0YXR5cGV8ZXhjZXB0aW9ufGZ1bmN0b3J8c2lnbmF0dXJlfHN0cnVjdHVyZXx0eXBlKVxccyspW2Etel9dW1xcdycuXSovaSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLygoPzpefFteXFx3J10pZnVuXFxzKylbYS16X11bXFx3Jy5dKi9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cblx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdyddKSdbXFx3J10qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0fSxcblxuXHRcdCdudW1iZXInOiAvfj9cXGIoPzpcXGQrKD86XFwuXFxkKyk/KD86ZX4/XFxkKyk/fDB4W1xcZGEtZl0rKVxcYi9pLFxuXHRcdCd3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYjB3KD86XFxkK3x4W1xcZGEtZl0rKVxcYi9pLFxuXHRcdFx0YWxpYXM6ICdjb25zdGFudCdcblx0XHR9LFxuXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0XHQnb3BlcmF0b3InOiAvXFwuXFwuXFwufDpbPj06XXw9Pj98LT58Wzw+XT0/fFshK1xcLSovXiN8QH5dLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31cXFtcXF0uOiw7XS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21sWydjbGFzcy1uYW1lJ11bMF0uaW5zaWRlID0gUHJpc20ubGFuZ3VhZ2VzLnNtbDtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc21sbmogPSBQcmlzbS5sYW5ndWFnZXMuc21sO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5zb2xpZGl0eSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNvbnRyYWN0fGVudW18aW50ZXJmYWNlfGxpYnJhcnl8bmV3fHN0cnVjdHx1c2luZylcXHMrKSg/IVxcZClbXFx3JF0rLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/Ol98YW5vbnltb3VzfGFzfGFzc2VtYmx5fGFzc2VydHxicmVha3xjYWxsZGF0YXxjYXNlfGNvbnN0YW50fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGNvbnRyYWN0fGRlZmF1bHR8ZGVsZXRlfGRvfGVsc2V8ZW1pdHxlbnVtfGV2ZW50fGV4dGVybmFsfGZvcnxmcm9tfGZ1bmN0aW9ufGlmfGltcG9ydHxpbmRleGVkfGluaGVyaXRlZHxpbnRlcmZhY2V8aW50ZXJuYWx8aXN8bGV0fGxpYnJhcnl8bWFwcGluZ3xtZW1vcnl8bW9kaWZpZXJ8bmV3fHBheWFibGV8cHJhZ21hfHByaXZhdGV8cHVibGljfHB1cmV8cmVxdWlyZXxyZXR1cm5zP3xyZXZlcnR8c2VsZmRlc3RydWN0fHNvbGlkaXR5fHN0b3JhZ2V8c3RydWN0fHN1aWNpZGV8c3dpdGNofHRoaXN8dGhyb3d8dXNpbmd8dmFyfHZpZXd8d2hpbGUpXFxiLyxcblx0J29wZXJhdG9yJzogLz0+fC0+fDo9fD06fFxcKlxcKnxcXCtcXCt8LS18XFx8XFx8fCYmfDw8PT98Pj49P3xbLSsqLyVeJnw8PiE9XT0/fFt+P10vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc29saWRpdHknLCAna2V5d29yZCcsIHtcblx0J2J1aWx0aW4nOiAvXFxiKD86YWRkcmVzc3xib29sfGJ5dGV8dT9pbnQoPzo4fDE2fDI0fDMyfDQwfDQ4fDU2fDY0fDcyfDgwfDg4fDk2fDEwNHwxMTJ8MTIwfDEyOHwxMzZ8MTQ0fDE1MnwxNjB8MTY4fDE3NnwxODR8MTkyfDIwMHwyMDh8MjE2fDIyNHwyMzJ8MjQwfDI0OHwyNTYpP3xzdHJpbmd8Ynl0ZXMoPzpbMS05XXxbMTJdXFxkfDNbMC0yXSk/KVxcYi9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzb2xpZGl0eScsICdudW1iZXInLCB7XG5cdCd2ZXJzaW9uJzoge1xuXHRcdHBhdHRlcm46IC8oWzw+XT0/fFxcXilcXGQrXFwuXFxkK1xcLlxcZCtcXGIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdudW1iZXInLFxuXHR9XG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNvbCA9IFByaXNtLmxhbmd1YWdlcy5zb2xpZGl0eTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdHZhciBndWlkID0ge1xuXHRcdC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VuaXZlcnNhbGx5X3VuaXF1ZV9pZGVudGlmaWVyI0Zvcm1hdFxuXHRcdHBhdHRlcm46IC9cXHtbXFxkYS1mXXs4fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXs0fS1bXFxkYS1mXXsxMn1cXH0vaSxcblx0XHRhbGlhczogJ2NvbnN0YW50Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dL1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXNbJ3NvbHV0aW9uLWZpbGUnXSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIlxcclxcbl0qXCJ8J1teJ1xcclxcbl0qJy8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2d1aWQnOiBndWlkXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnb2JqZWN0Jzoge1xuXHRcdFx0Ly8gRm9vXG5cdFx0XHQvLyAgIEJhcihcImFic1wiKSA9IDlcblx0XHRcdC8vICAgRW5kQmFyXG5cdFx0XHQvLyAgIFByb3AgPSBUUlVFXG5cdFx0XHQvLyBFbmRGb29cblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopKD86KFtBLVpdXFx3KilcXGIoPz0uKig/Olxcclxcbj98XFxuKSg/OlxcMVsgXFx0XS4qKD86XFxyXFxuP3xcXG4pKSpcXDFFbmRcXDIoPz1bIFxcdF0qJCkpfEVuZFtBLVpdXFx3Kig/PVsgXFx0XSokKSkvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0fSxcblx0XHQncHJvcGVydHknOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXihbIFxcdF0qKSg/IVxccylbXlxcclxcblwiIz0oKV0qW15cXHNcIiM9KCldKD89XFxzKj0pL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdndWlkJzogZ3VpZFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2d1aWQnOiBndWlkLFxuXHRcdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspKlxcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86RkFMU0V8VFJVRSlcXGIvLFxuXHRcdCdvcGVyYXRvcic6IC89Lyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpLF0vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzWydzbG4nXSA9IFByaXNtLmxhbmd1YWdlc1snc29sdXRpb24tZmlsZSddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHN0cmluZ1BhdHRlcm4gPSAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvO1xuXHR2YXIgbnVtYmVyUGF0dGVybiA9IC9cXGJcXGQrKD86XFwuXFxkKyk/KD86W2VFXVsrLV0/XFxkKyk/XFxifFxcYjB4W1xcZEEtRl0rXFxiLztcblxuXHRQcmlzbS5sYW5ndWFnZXMuc295ID0ge1xuXHRcdCdjb21tZW50JzogW1xuXHRcdFx0L1xcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKFxccylcXC9cXC8uKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fVxuXHRcdF0sXG5cdFx0J2NvbW1hbmQtYXJnJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHsrXFwvP1xccyooPzphbGlhc3xjYWxsfGRlbGNhbGx8ZGVscGFja2FnZXxkZWx0ZW1wbGF0ZXxuYW1lc3BhY2V8dGVtcGxhdGUpXFxzKylcXC4/W1xcdy5dKy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXC4vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncGFyYW1ldGVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXHsrXFwvP1xccypAP3BhcmFtXFw/P1xccyspXFwuP1tcXHcuXSsvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndmFyaWFibGUnXG5cdFx0fSxcblx0XHQna2V5d29yZCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHsrXFwvP1teXFxTXFxyXFxuXSopKD86XFxcXFtucnRdfGFsaWFzfGNhbGx8Y2FzZXxjc3N8ZGVmYXVsdHxkZWxjYWxsfGRlbHBhY2thZ2V8ZGVsdGVtcGxhdGV8ZWxzZSg/OmlmKT98ZmFsbGJhY2ttc2d8Zm9yKD86ZWFjaCk/fGlmKD86ZW1wdHkpP3xsYnxsZXR8bGl0ZXJhbHxtc2d8bmFtZXNwYWNlfG5pbHxAP3BhcmFtXFw/P3xyYnxzcHxzd2l0Y2h8dGVtcGxhdGV8eGlkKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQvXFxiKD86YW55fGFzfGF0dHJpYnV0ZXN8Ym9vbHxjc3N8ZmxvYXR8aHRtbHxpbnxpbnR8anN8bGlzdHxtYXB8bnVsbHxudW1iZXJ8c3RyaW5nfHVyaSlcXGIvXG5cdFx0XSxcblx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0cGF0dGVybjogL15cXHsrXFwvP3xcXC8/XFx9KyQvLFxuXHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHR9LFxuXHRcdCdwcm9wZXJ0eSc6IC9cXHcrKD89PSkvLFxuXHRcdCd2YXJpYWJsZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCRbXlxcV1xcZF1cXHcqKD86XFw/Pyg/OlxcLlxcdyt8XFxbW15cXF1dK1xcXSkpKi8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3N0cmluZyc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBzdHJpbmdQYXR0ZXJuLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnbnVtYmVyJzogbnVtYmVyUGF0dGVybixcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcXFtcXF0uP10vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogc3RyaW5nUGF0dGVybixcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogW1xuXHRcdFx0L1xcdysoPz1cXCgpLyxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHxbXlxcU1xcclxcbl0qKVxcdysvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J251bWJlcic6IG51bWJlclBhdHRlcm4sXG5cdFx0J29wZXJhdG9yJzogL1xcPzo/fDw9P3w+PT98PT0/fCE9fFsrKi8lLV18XFxiKD86YW5kfG5vdHxvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be30oKVxcW1xcXXwuLDpdL1xuXHR9O1xuXG5cdC8vIFRva2VuaXplIGFsbCBpbmxpbmUgU295IGV4cHJlc3Npb25zXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdHZhciBzb3lQYXR0ZXJuID0gL1xce1xcey4rP1xcfVxcfXxcXHsuKz9cXH18XFxzXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy9nO1xuXHRcdHZhciBzb3lMaXR0ZXJhbFN0YXJ0ID0gJ3tsaXRlcmFsfSc7XG5cdFx0dmFyIHNveUxpdHRlcmFsRW5kID0gJ3svbGl0ZXJhbH0nO1xuXHRcdHZhciBzb3lMaXR0ZXJhbE1vZGUgPSBmYWxzZTtcblxuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICdzb3knLCBzb3lQYXR0ZXJuLCBmdW5jdGlvbiAobWF0Y2gpIHtcblx0XHRcdC8vIFNveSB0YWdzIGluc2lkZSB7bGl0ZXJhbH0gYmxvY2sgYXJlIGlnbm9yZWRcblx0XHRcdGlmIChtYXRjaCA9PT0gc295TGl0dGVyYWxFbmQpIHtcblx0XHRcdFx0c295TGl0dGVyYWxNb2RlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghc295TGl0dGVyYWxNb2RlKSB7XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gc295TGl0dGVyYWxTdGFydCkge1xuXHRcdFx0XHRcdHNveUxpdHRlcmFsTW9kZSA9IHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fSk7XG5cblx0Ly8gUmUtaW5zZXJ0IHRoZSB0b2tlbnMgYWZ0ZXIgdG9rZW5pemluZ1xuXHRQcmlzbS5ob29rcy5hZGQoJ2FmdGVyLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRcdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS50b2tlbml6ZVBsYWNlaG9sZGVycyhlbnYsICdzb3knKTtcblx0fSk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnR1cnRsZSA9IHtcblx0J2NvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyMuKi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdtdWx0aWxpbmUtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIlwiXCIoPzooPzpcIlwiPyk/KD86W15cIlxcXFxdfFxcXFwuKSkqXCJcIlwifCcnJyg/Oig/OicnPyk/KD86W14nXFxcXF18XFxcXC4pKSonJycvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ3N0cmluZycsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnY29tbWVudCc6IC8jLiovXG5cdFx0fVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlteXFxcXFwiXFxyXFxuXXxcXFxcLikqXCJ8Jyg/OlteXFxcXCdcXHJcXG5dfFxcXFwuKSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3VybCc6IHtcblx0XHRwYXR0ZXJuOiAvPCg/OlteXFx4MDAtXFx4MjA8Plwie318XmBcXFxcXXxcXFxcKD86dVtcXGRhLWZBLUZdezR9fFVbXFxkYS1mQS1GXXs4fSkpKj4vLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bPD5dL1xuXHRcdH1cblx0fSxcblx0J2Z1bmN0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oPzooPyFbLS5cXGRcXHhCN10pWy0uXFx3XFx4QjdcXHhDMC1cXHVGRkZEXSspPzooPzooPyFbLS5dKSg/OlstLjpcXHdcXHhDMC1cXHVGRkZEXXwlW1xcZGEtZl17Mn18XFxcXC4pKyk/L2ksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnbG9jYWwtbmFtZSc6IHtcblx0XHRcdFx0cGF0dGVybjogLyhbXjpdKjopW1xcc1xcU10rLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwcmVmaXgnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvOi9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0J251bWJlcic6IC9bKy1dP1xcYlxcZCsoPzpcXC5cXGQqKT8oPzplWystXT9cXGQrKT8vaSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fS4sOygpW1xcXV18XFxeXFxeLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQna2V5d29yZCc6IFtcblx0XHQvKD86XFxiYXxAcHJlZml4fEBiYXNlKVxcYnw9Lyxcblx0XHQvXFxiKD86YmFzZXxncmFwaHxwcmVmaXgpXFxiL2lcblx0XSxcblx0J3RhZyc6IHtcblx0XHRwYXR0ZXJuOiAvQFthLXpdKyg/Oi1bYS16XFxkXSspKi9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3B1bmN0dWF0aW9uJzogL0AvXG5cdFx0fVxuXHR9XG59O1xuUHJpc20ubGFuZ3VhZ2VzLnRyaWcgPSBQcmlzbS5sYW5ndWFnZXNbJ3R1cnRsZSddO1xuXG5QcmlzbS5sYW5ndWFnZXMuc3BhcnFsID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgndHVydGxlJywge1xuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQndmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1s/JF1cXHcrLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcbn1cbik7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NwYXJxbCcsICdwdW5jdHVhdGlvbicsIHtcblx0J2tleXdvcmQnOiBbXG5cdFx0L1xcYig/OkF8QUREfEFMTHxBU3xBU0N8QVNLfEJOT0RFfEJZfENMRUFSfENPTlNUUlVDVHxDT1BZfENSRUFURXxEQVRBfERFRkFVTFR8REVMRVRFfERFU0N8REVTQ1JJQkV8RElTVElOQ1R8RFJPUHxFWElTVFN8RklMVEVSfEZST018R1JPVVB8SEFWSU5HfElOU0VSVHxJTlRPfExJTUlUfExPQUR8TUlOVVN8TU9WRXxOQU1FRHxOT1R8Tk9XfE9GRlNFVHxPUFRJT05BTHxPUkRFUnxSQU5EfFJFRFVDRUR8U0VMRUNUfFNFUEFSQVRPUnxTRVJWSUNFfFNJTEVOVHxTVFJVVUlEfFVOSU9OfFVTSU5HfFVVSUR8VkFMVUVTfFdIRVJFKVxcYi9pLFxuXHRcdC9cXGIoPzpBQlN8QVZHfEJJTkR8Qk9VTkR8Q0VJTHxDT0FMRVNDRXxDT05DQVR8Q09OVEFJTlN8Q09VTlR8REFUQVRZUEV8REFZfEVOQ09ERV9GT1JfVVJJfEZMT09SfEdST1VQX0NPTkNBVHxIT1VSU3xJRnxJUkl8aXNCTEFOS3xpc0lSSXxpc0xJVEVSQUx8aXNOVU1FUklDfGlzVVJJfExBTkd8TEFOR01BVENIRVN8TENBU0V8TUFYfE1ENXxNSU58TUlOVVRFU3xNT05USHxSRUdFWHxSRVBMQUNFfFJPVU5EfHNhbWVUZXJtfFNBTVBMRXxTRUNPTkRTfFNIQTF8U0hBMjU2fFNIQTM4NHxTSEE1MTJ8U1RSfFNUUkFGVEVSfFNUUkJFRk9SRXxTVFJEVHxTVFJFTkRTfFNUUkxBTkd8U1RSTEVOfFNUUlNUQVJUU3xTVUJTVFJ8U1VNfFRJTUVaT05FfFRafFVDQVNFfFVSSXxZRUFSKVxcYig/PVxccypcXCgpL2ksXG5cdFx0L1xcYig/OkJBU0V8R1JBUEh8UFJFRklYKVxcYi9pXG5cdF1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMucnEgPSBQcmlzbS5sYW5ndWFnZXMuc3BhcnFsO1xuXG5QcmlzbS5sYW5ndWFnZXNbJ3NwbHVuay1zcGwnXSA9IHtcblx0J2NvbW1lbnQnOiAvYGNvbW1lbnRcXChcIig/OlxcXFwufFteXFxcXFwiXSkqXCJcXClgLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcLnxbXlxcXFxcIl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0Ly8gaHR0cHM6Ly9kb2NzLnNwbHVuay5jb20vRG9jdW1lbnRhdGlvbi9TcGx1bmsvNy4zLjAvU2VhcmNoUmVmZXJlbmNlL0xpc3RPZlNlYXJjaENvbW1hbmRzXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGFjY3VtfGFkZGNvbHRvdGFsc3xhZGRpbmZvfGFkZHRvdGFsc3xhbmFseXplZmllbGRzfGFub21hbGllc3xhbm9tYWxvdXN2YWx1ZXxhbm9tYWx5ZGV0ZWN0aW9ufGFwcGVuZHxhcHBlbmRjb2xzfGFwcGVuZGNzdnxhcHBlbmRsb29rdXB8YXBwZW5kcGlwZXxhcnVsZXN8YXNzb2NpYXRlfGF1ZGl0fGF1dG9yZWdyZXNzfGJpbnxidWNrZXR8YnVja2V0ZGlyfGNoYXJ0fGNsdXN0ZXJ8Y29maWx0ZXJ8Y29sbGVjdHxjb25jdXJyZW5jeXxjb250aW5nZW5jeXxjb252ZXJ0fGNvcnJlbGF0ZXxkYXRhbW9kZWx8ZGJpbnNwZWN0fGRlZHVwfGRlbGV0ZXxkZWx0YXxkaWZmfGVyZXh8ZXZhbHxldmVudGNvdW50fGV2ZW50c3RhdHN8ZXh0cmFjdHxmaWVsZGZvcm1hdHxmaWVsZHN8ZmllbGRzdW1tYXJ5fGZpbGxkb3dufGZpbGxudWxsfGZpbmR0eXBlc3xmb2xkZXJpemV8Zm9yZWFjaHxmb3JtYXR8ZnJvbXxnYXVnZXxnZW50aW1lc3xnZW9tfGdlb21maWx0ZXJ8Z2Vvc3RhdHN8aGVhZHxoaWdobGlnaHR8aGlzdG9yeXxpY29uaWZ5fGlucHV0fGlucHV0Y3N2fGlucHV0bG9va3VwfGlwbG9jYXRpb258am9pbnxrbWVhbnN8a3Z8a3Zmb3JtfGxvYWRqb2J8bG9jYWxpemV8bG9jYWxvcHxsb29rdXB8bWFrZWNvbnRpbnVvdXN8bWFrZW12fG1ha2VyZXN1bHRzfG1hcHxtY29sbGVjdHxtZXRhZGF0YXxtZXRhc2VhcmNofG1ldmVudGNvbGxlY3R8bXN0YXRzfG11bHRpa3Z8bXVsdGlzZWFyY2h8bXZjb21iaW5lfG12ZXhwYW5kfG5vbXZ8b3V0bGllcnxvdXRwdXRjc3Z8b3V0cHV0bG9va3VwfG91dHB1dHRleHR8b3ZlcmxhcHxwaXZvdHxwcmVkaWN0fHJhbmdlbWFwfHJhcmV8cmVnZXh8cmVsZXZhbmN5fHJlbHRpbWV8cmVuYW1lfHJlcGxhY2V8cmVzdHxyZXR1cm58cmV2ZXJzZXxyZXh8cnRvcmRlcnxydW58c2F2ZWRzZWFyY2h8c2NyaXB0fHNjcnVifHNlYXJjaHxzZWFyY2h0eG58c2VsZmpvaW58c2VuZGVtYWlsfHNldHxzZXRmaWVsZHN8c2ljaGFydHxzaXJhcmV8c2lzdGF0c3xzaXRpbWVjaGFydHxzaXRvcHxzb3J0fHNwYXRofHN0YXRzfHN0cmNhdHxzdHJlYW1zdGF0c3x0YWJsZXx0YWdzfHRhaWx8dGltZWNoYXJ0fHRpbWV3cmFwfHRvcHx0cmFuc2FjdGlvbnx0cmFuc3Bvc2V8dHJlbmRsaW5lfHRzY29sbGVjdHx0c3RhdHN8dHlwZWFoZWFkfHR5cGVsZWFybmVyfHR5cGVyfHVuaW9ufHVuaXF8dW50YWJsZXx3aGVyZXx4MTF8eG1sa3Z8eG1sdW5lc2NhcGV8eHBhdGh8eHlzZXJpZXMpXFxiL2ksXG5cdCdvcGVyYXRvci13b3JkJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzphbmR8YXN8Ynl8bm90fG9yfHhvcilcXGIvaSxcblx0XHRhbGlhczogJ29wZXJhdG9yJ1xuXHR9LFxuXHQnZnVuY3Rpb24nOiAvXFxiXFx3Kyg/PVxccypcXCgpLyxcblx0J3Byb3BlcnR5JzogL1xcYlxcdysoPz1cXHMqPSg/IT0pKS8sXG5cdCdkYXRlJzoge1xuXHRcdC8vIE1NL0REL1lZWVkoOkhIOk1NOlNTKT9cblx0XHRwYXR0ZXJuOiAvXFxiXFxkezEsMn1cXC9cXGR7MSwyfVxcL1xcZHsxLDR9KD86KD86OlxcZHsxLDJ9KXszfSk/XFxiLyxcblx0XHRhbGlhczogJ251bWJlcidcblx0fSxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZnxmYWxzZXx0fHRydWUpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bPD49XT0/fFstKyovJXxdLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF0sXS9cbn07XG5cblByaXNtLmxhbmd1YWdlcy5zcWYgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzooPzpcIlwiKT9bXlwiXSkqXCIoPyFcIil8Jyg/OlteJ10pKicvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpicmVha091dHxicmVha1RvfGNhbGx8Y2FzZXxjYXRjaHxkZWZhdWx0fGRvfGVjaG98ZWxzZXxleGVjRlNNfGV4ZWNWTXxleGl0V2l0aHxmb3J8Zm9yRWFjaHxmb3JFYWNoTWVtYmVyfGZvckVhY2hNZW1iZXJBZ2VudHxmb3JFYWNoTWVtYmVyVGVhbXxmcm9tfGdvdG98aWZ8bmlsfHByZXByb2Nlc3NGaWxlfHByZXByb2Nlc3NGaWxlTGluZU51bWJlcnN8cHJpdmF0ZXxzY29wZU5hbWV8c3Bhd258c3RlcHxzd2l0Y2h8dGhlbnx0aHJvd3x0b3x0cnl8d2hpbGV8d2l0aClcXGIvaSxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OmFic3xhY2NUaW1lfGFjb3N8YWN0aW9ufGFjdGlvbklEc3xhY3Rpb25LZXlzfGFjdGlvbktleXNJbWFnZXN8YWN0aW9uS2V5c05hbWVzfGFjdGlvbktleXNOYW1lc0FycmF5fGFjdGlvbk5hbWV8YWN0aW9uUGFyYW1zfGFjdGl2YXRlQWRkb25zfGFjdGl2YXRlZEFkZG9uc3xhY3RpdmF0ZUtleXxhZGQzREVOQ29ubmVjdGlvbnxhZGQzREVORXZlbnRIYW5kbGVyfGFkZDNERU5MYXllcnxhZGRBY3Rpb258YWRkQmFja3BhY2t8YWRkQmFja3BhY2tDYXJnb3xhZGRCYWNrcGFja0NhcmdvR2xvYmFsfGFkZEJhY2twYWNrR2xvYmFsfGFkZENhbVNoYWtlfGFkZEN1cmF0b3JBZGRvbnN8YWRkQ3VyYXRvckNhbWVyYUFyZWF8YWRkQ3VyYXRvckVkaXRhYmxlT2JqZWN0c3xhZGRDdXJhdG9yRWRpdGluZ0FyZWF8YWRkQ3VyYXRvclBvaW50c3xhZGRFZGl0b3JPYmplY3R8YWRkRXZlbnRIYW5kbGVyfGFkZEZvcmNlfGFkZEZvcmNlR2VuZXJhdG9yUlREfGFkZEdvZ2dsZXN8YWRkR3JvdXBJY29ufGFkZEhhbmRndW5JdGVtfGFkZEhlYWRnZWFyfGFkZEl0ZW18YWRkSXRlbUNhcmdvfGFkZEl0ZW1DYXJnb0dsb2JhbHxhZGRJdGVtUG9vbHxhZGRJdGVtVG9CYWNrcGFja3xhZGRJdGVtVG9Vbmlmb3JtfGFkZEl0ZW1Ub1Zlc3R8YWRkTGl2ZVN0YXRzfGFkZE1hZ2F6aW5lfGFkZE1hZ2F6aW5lQW1tb0NhcmdvfGFkZE1hZ2F6aW5lQ2FyZ298YWRkTWFnYXppbmVDYXJnb0dsb2JhbHxhZGRNYWdhemluZUdsb2JhbHxhZGRNYWdhemluZVBvb2x8YWRkTWFnYXppbmVzfGFkZE1hZ2F6aW5lVHVycmV0fGFkZE1lbnV8YWRkTWVudUl0ZW18YWRkTWlzc2lvbkV2ZW50SGFuZGxlcnxhZGRNUEV2ZW50SGFuZGxlcnxhZGRNdXNpY0V2ZW50SGFuZGxlcnxhZGRPd25lZE1pbmV8YWRkUGxheWVyU2NvcmVzfGFkZFByaW1hcnlXZWFwb25JdGVtfGFkZFB1YmxpY1ZhcmlhYmxlRXZlbnRIYW5kbGVyfGFkZFJhdGluZ3xhZGRSZXNvdXJjZXN8YWRkU2NvcmV8YWRkU2NvcmVTaWRlfGFkZFNlY29uZGFyeVdlYXBvbkl0ZW18YWRkU3dpdGNoYWJsZVVuaXR8YWRkVGVhbU1lbWJlcnxhZGRUb1JlbWFpbnNDb2xsZWN0b3J8YWRkVG9ycXVlfGFkZFVuaWZvcm18YWRkVmVoaWNsZXxhZGRWZXN0fGFkZFdheXBvaW50fGFkZFdlYXBvbnxhZGRXZWFwb25DYXJnb3xhZGRXZWFwb25DYXJnb0dsb2JhbHxhZGRXZWFwb25HbG9iYWx8YWRkV2VhcG9uSXRlbXxhZGRXZWFwb25Qb29sfGFkZFdlYXBvblR1cnJldHxhZG1pbnxhZ2VudHxhZ2VudHN8QUdMVG9BU0x8YWltZWRBdFRhcmdldHxhaW1Qb3N8YWlyRGVuc2l0eUN1cnZlUlREfGFpckRlbnNpdHlSVER8YWlycGxhbmVUaHJvdHRsZXxhaXJwb3J0U2lkZXxBSVNGaW5pc2hIZWFsfGFsaXZlfGFsbDNERU5FbnRpdGllc3xhbGxBaXJwb3J0c3xhbGxDb250cm9sc3xhbGxDdXJhdG9yc3xhbGxDdXRMYXllcnN8YWxsRGVhZHxhbGxEZWFkTWVufGFsbERpc3BsYXlzfGFsbEdyb3Vwc3xhbGxNYXBNYXJrZXJzfGFsbE1pbmVzfGFsbE1pc3Npb25PYmplY3RzfGFsbG93M0RNb2RlfGFsbG93Q3Jld0luSW1tb2JpbGV8YWxsb3dDdXJhdG9yTG9naWNJZ25vcmVBcmVhc3xhbGxvd0RhbWFnZXxhbGxvd0RhbW1hZ2V8YWxsb3dGaWxlT3BlcmF0aW9uc3xhbGxvd0ZsZWVpbmd8YWxsb3dHZXRJbnxhbGxvd1NwcmludHxhbGxQbGF5ZXJzfGFsbFNpbXBsZU9iamVjdHN8YWxsU2l0ZXN8YWxsVHVycmV0c3xhbGxVbml0c3xhbGxVbml0c1VBVnxhbGxWYXJpYWJsZXN8YW1tb3xhbW1vT25QeWxvbnxhbmltYXRlfGFuaW1hdGVCYXl8YW5pbWF0ZURvb3J8YW5pbWF0ZVB5bG9ufGFuaW1hdGVTb3VyY2V8YW5pbWF0aW9uTmFtZXN8YW5pbWF0aW9uUGhhc2V8YW5pbWF0aW9uU291cmNlUGhhc2V8YW5pbWF0aW9uU3RhdGV8YXBwZW5kfGFwcGx5fGFybW9yeVBvaW50c3xhcnJheUludGVyc2VjdHxhc2lufEFTTFRvQUdMfEFTTFRvQVRMfGFzc2VydHxhc3NpZ25Bc0NhcmdvfGFzc2lnbkFzQ2FyZ29JbmRleHxhc3NpZ25Bc0NvbW1hbmRlcnxhc3NpZ25Bc0RyaXZlcnxhc3NpZ25Bc0d1bm5lcnxhc3NpZ25Bc1R1cnJldHxhc3NpZ25DdXJhdG9yfGFzc2lnbmVkQ2FyZ298YXNzaWduZWRDb21tYW5kZXJ8YXNzaWduZWREcml2ZXJ8YXNzaWduZWRHdW5uZXJ8YXNzaWduZWRJdGVtc3xhc3NpZ25lZFRhcmdldHxhc3NpZ25lZFRlYW18YXNzaWduZWRWZWhpY2xlfGFzc2lnbmVkVmVoaWNsZVJvbGV8YXNzaWduSXRlbXxhc3NpZ25UZWFtfGFzc2lnblRvQWlycG9ydHxhdGFufGF0YW4yfGF0Z3xBVExUb0FTTHxhdHRhY2hlZE9iamVjdHxhdHRhY2hlZE9iamVjdHN8YXR0YWNoZWRUb3xhdHRhY2hPYmplY3R8YXR0YWNoVG98YXR0YWNrRW5hYmxlZHxiYWNrcGFja3xiYWNrcGFja0NhcmdvfGJhY2twYWNrQ29udGFpbmVyfGJhY2twYWNrSXRlbXN8YmFja3BhY2tNYWdhemluZXN8YmFja3BhY2tTcGFjZUZvcnxiZWhhdmlvdXJ8YmVuY2htYXJrfGJpbm9jdWxhcnxibHVmb3J8Ym91bmRpbmdCb3h8Ym91bmRpbmdCb3hSZWFsfGJvdW5kaW5nQ2VudGVyfGJyaWVmaW5nTmFtZXxidWlsZGluZ0V4aXR8YnVpbGRpbmdQb3N8YnVsZG96ZXJfRW5hYmxlUm9hZERpYWd8YnVsZG96ZXJfSXNFbmFibGVkUm9hZERpYWd8YnVsZG96ZXJfTG9hZE5ld1JvYWRzfGJ1bGRvemVyX3JlbG9hZE9wZXJNYXB8YnV0dG9uQWN0aW9ufGJ1dHRvblNldEFjdGlvbnxjYWRldE1vZGV8Y2FsbEV4dGVuc2lvbnxjYW1Db21tYW5kfGNhbUNvbW1pdHxjYW1Db21taXRQcmVwYXJlZHxjYW1Db21taXR0ZWR8Y2FtQ29uc3R1Y3Rpb25TZXRQYXJhbXN8Y2FtQ3JlYXRlfGNhbURlc3Ryb3l8Y2FtZXJhRWZmZWN0fGNhbWVyYUVmZmVjdEVuYWJsZUhVRHxjYW1lcmFJbnRlcmVzdHxjYW1lcmFPbnxjYW1lcmFWaWV3fGNhbXBhaWduQ29uZmlnRmlsZXxjYW1QcmVsb2FkfGNhbVByZWxvYWRlZHxjYW1QcmVwYXJlQmFua3xjYW1QcmVwYXJlRGlyfGNhbVByZXBhcmVEaXZlfGNhbVByZXBhcmVGb2N1c3xjYW1QcmVwYXJlRm92fGNhbVByZXBhcmVGb3ZSYW5nZXxjYW1QcmVwYXJlUG9zfGNhbVByZXBhcmVSZWxQb3N8Y2FtUHJlcGFyZVRhcmdldHxjYW1TZXRCYW5rfGNhbVNldERpcnxjYW1TZXREaXZlfGNhbVNldEZvY3VzfGNhbVNldEZvdnxjYW1TZXRGb3ZSYW5nZXxjYW1TZXRQb3N8Y2FtU2V0UmVsUG9zfGNhbVNldFRhcmdldHxjYW1UYXJnZXR8Y2FtVXNlTlZHfGNhbkFkZHxjYW5BZGRJdGVtVG9CYWNrcGFja3xjYW5BZGRJdGVtVG9Vbmlmb3JtfGNhbkFkZEl0ZW1Ub1Zlc3R8Y2FuY2VsU2ltcGxlVGFza0Rlc3RpbmF0aW9ufGNhbkZpcmV8Y2FuTW92ZXxjYW5TbGluZ0xvYWR8Y2FuU3RhbmR8Y2FuU3VzcGVuZHxjYW5UcmlnZ2VyRHluYW1pY1NpbXVsYXRpb258Y2FuVW5sb2FkSW5Db21iYXR8Y2FuVmVoaWNsZUNhcmdvfGNhcHRpdmV8Y2FwdGl2ZU51bXxjYkNoZWNrZWR8Y2JTZXRDaGVja2VkfGNlaWx8Y2hhbm5lbEVuYWJsZWR8Y2hlYXRzRW5hYmxlZHxjaGVja0FJRmVhdHVyZXxjaGVja1Zpc2liaWxpdHl8Y2l2aWxpYW58Y2xhc3NOYW1lfGNsZWFyM0RFTkF0dHJpYnV0ZXxjbGVhcjNERU5JbnZlbnRvcnl8Y2xlYXJBbGxJdGVtc0Zyb21CYWNrcGFja3xjbGVhckJhY2twYWNrQ2FyZ298Y2xlYXJCYWNrcGFja0NhcmdvR2xvYmFsfGNsZWFyRm9yY2VzUlREfGNsZWFyR3JvdXBJY29uc3xjbGVhckl0ZW1DYXJnb3xjbGVhckl0ZW1DYXJnb0dsb2JhbHxjbGVhckl0ZW1Qb29sfGNsZWFyTWFnYXppbmVDYXJnb3xjbGVhck1hZ2F6aW5lQ2FyZ29HbG9iYWx8Y2xlYXJNYWdhemluZVBvb2x8Y2xlYXJPdmVybGF5fGNsZWFyUmFkaW98Y2xlYXJWZWhpY2xlSW5pdHxjbGVhcldlYXBvbkNhcmdvfGNsZWFyV2VhcG9uQ2FyZ29HbG9iYWx8Y2xlYXJXZWFwb25Qb29sfGNsaWVudE93bmVyfGNsb3NlRGlhbG9nfGNsb3NlRGlzcGxheXxjbG9zZU92ZXJsYXl8Y29sbGFwc2VPYmplY3RUcmVlfGNvbGxlY3QzREVOSGlzdG9yeXxjb2xsZWN0aXZlUlREfGNvbWJhdE1vZGV8Y29tbWFuZEFydGlsbGVyeUZpcmV8Y29tbWFuZENoYXR8Y29tbWFuZGVyfGNvbW1hbmRGaXJlfGNvbW1hbmRGb2xsb3d8Y29tbWFuZEZTTXxjb21tYW5kR2V0T3V0fGNvbW1hbmRpbmdNZW51fGNvbW1hbmRNb3ZlfGNvbW1hbmRSYWRpb3xjb21tYW5kU3RvcHxjb21tYW5kU3VwcHJlc3NpdmVGaXJlfGNvbW1hbmRUYXJnZXR8Y29tbWFuZFdhdGNofGNvbW1lbnR8Y29tbWl0T3ZlcmxheXxjb21waWxlfGNvbXBpbGVGaW5hbHxjb21wbGV0ZWRGU018Y29tcG9zZVRleHR8Y29uZmlnQ2xhc3Nlc3xjb25maWdGaWxlfGNvbmZpZ0hpZXJhcmNoeXxjb25maWdOYW1lfGNvbmZpZ051bGx8Y29uZmlnUHJvcGVydGllc3xjb25maWdTb3VyY2VBZGRvbkxpc3R8Y29uZmlnU291cmNlTW9kfGNvbmZpZ1NvdXJjZU1vZExpc3R8Y29uZmlybVNlbnNvclRhcmdldHxjb25uZWN0VGVybWluYWxUb1VBVnxjb250cm9sTnVsbHxjb250cm9sc0dyb3VwQ3RybHxjb3B5RnJvbUNsaXBib2FyZHxjb3B5VG9DbGlwYm9hcmR8Y29weVdheXBvaW50c3xjb3N8Y291bnR8Y291bnRFbmVteXxjb3VudEZyaWVuZGx5fGNvdW50U2lkZXxjb3VudFR5cGV8Y291bnRVbmtub3dufGNyZWF0ZTNERU5Db21wb3NpdGlvbnxjcmVhdGUzREVORW50aXR5fGNyZWF0ZUFnZW50fGNyZWF0ZUNlbnRlcnxjcmVhdGVEaWFsb2d8Y3JlYXRlRGlhcnlMaW5rfGNyZWF0ZURpYXJ5UmVjb3JkfGNyZWF0ZURpYXJ5U3ViamVjdHxjcmVhdGVEaXNwbGF5fGNyZWF0ZUdlYXJEaWFsb2d8Y3JlYXRlR3JvdXB8Y3JlYXRlR3VhcmRlZFBvaW50fGNyZWF0ZUxvY2F0aW9ufGNyZWF0ZU1hcmtlcnxjcmVhdGVNYXJrZXJMb2NhbHxjcmVhdGVNZW51fGNyZWF0ZU1pbmV8Y3JlYXRlTWlzc2lvbkRpc3BsYXl8Y3JlYXRlTVBDYW1wYWlnbkRpc3BsYXl8Y3JlYXRlU2ltcGxlT2JqZWN0fGNyZWF0ZVNpbXBsZVRhc2t8Y3JlYXRlU2l0ZXxjcmVhdGVTb3VuZFNvdXJjZXxjcmVhdGVUYXNrfGNyZWF0ZVRlYW18Y3JlYXRlVHJpZ2dlcnxjcmVhdGVVbml0fGNyZWF0ZVZlaGljbGV8Y3JlYXRlVmVoaWNsZUNyZXd8Y3JlYXRlVmVoaWNsZUxvY2FsfGNyZXd8Y3RBZGRIZWFkZXJ8Y3RBZGRSb3d8Y3RDbGVhcnxjdEN1clNlbHxjdERhdGF8Y3RGaW5kSGVhZGVyUm93c3xjdEZpbmRSb3dIZWFkZXJ8Y3RIZWFkZXJDb250cm9sc3xjdEhlYWRlckNvdW50fGN0UmVtb3ZlSGVhZGVyc3xjdFJlbW92ZVJvd3N8Y3RybEFjdGl2YXRlfGN0cmxBZGRFdmVudEhhbmRsZXJ8Y3RybEFuZ2xlfGN0cmxBdXRvU2Nyb2xsRGVsYXl8Y3RybEF1dG9TY3JvbGxSZXdpbmR8Y3RybEF1dG9TY3JvbGxTcGVlZHxjdHJsQ2hlY2tlZHxjdHJsQ2xhc3NOYW1lfGN0cmxDb21taXR8Y3RybENvbW1pdHRlZHxjdHJsQ3JlYXRlfGN0cmxEZWxldGV8Y3RybEVuYWJsZXxjdHJsRW5hYmxlZHxjdHJsRmFkZXxjdHJsSFRNTExvYWRlZHxjdHJsSURDfGN0cmxJRER8Y3RybE1hcEFuaW1BZGR8Y3RybE1hcEFuaW1DbGVhcnxjdHJsTWFwQW5pbUNvbW1pdHxjdHJsTWFwQW5pbURvbmV8Y3RybE1hcEN1cnNvcnxjdHJsTWFwTW91c2VPdmVyfGN0cmxNYXBTY2FsZXxjdHJsTWFwU2NyZWVuVG9Xb3JsZHxjdHJsTWFwV29ybGRUb1NjcmVlbnxjdHJsTW9kZWx8Y3RybE1vZGVsRGlyQW5kVXB8Y3RybE1vZGVsU2NhbGV8Y3RybFBhcmVudHxjdHJsUGFyZW50Q29udHJvbHNHcm91cHxjdHJsUG9zaXRpb258Y3RybFJlbW92ZUFsbEV2ZW50SGFuZGxlcnN8Y3RybFJlbW92ZUV2ZW50SGFuZGxlcnxjdHJsU2NhbGV8Y3RybFNldEFjdGl2ZUNvbG9yfGN0cmxTZXRBbmdsZXxjdHJsU2V0QXV0b1Njcm9sbERlbGF5fGN0cmxTZXRBdXRvU2Nyb2xsUmV3aW5kfGN0cmxTZXRBdXRvU2Nyb2xsU3BlZWR8Y3RybFNldEJhY2tncm91bmRDb2xvcnxjdHJsU2V0Q2hlY2tlZHxjdHJsU2V0RGlzYWJsZWRDb2xvcnxjdHJsU2V0RXZlbnRIYW5kbGVyfGN0cmxTZXRGYWRlfGN0cmxTZXRGb2N1c3xjdHJsU2V0Rm9udHxjdHJsU2V0Rm9udEgxfGN0cmxTZXRGb250SDFCfGN0cmxTZXRGb250SDJ8Y3RybFNldEZvbnRIMkJ8Y3RybFNldEZvbnRIM3xjdHJsU2V0Rm9udEgzQnxjdHJsU2V0Rm9udEg0fGN0cmxTZXRGb250SDRCfGN0cmxTZXRGb250SDV8Y3RybFNldEZvbnRINUJ8Y3RybFNldEZvbnRINnxjdHJsU2V0Rm9udEg2QnxjdHJsU2V0Rm9udEhlaWdodHxjdHJsU2V0Rm9udEhlaWdodEgxfGN0cmxTZXRGb250SGVpZ2h0SDJ8Y3RybFNldEZvbnRIZWlnaHRIM3xjdHJsU2V0Rm9udEhlaWdodEg0fGN0cmxTZXRGb250SGVpZ2h0SDV8Y3RybFNldEZvbnRIZWlnaHRINnxjdHJsU2V0Rm9udEhlaWdodFNlY29uZGFyeXxjdHJsU2V0Rm9udFB8Y3RybFNldEZvbnRQQnxjdHJsU2V0Rm9udFNlY29uZGFyeXxjdHJsU2V0Rm9yZWdyb3VuZENvbG9yfGN0cmxTZXRNb2RlbHxjdHJsU2V0TW9kZWxEaXJBbmRVcHxjdHJsU2V0TW9kZWxTY2FsZXxjdHJsU2V0UGl4ZWxQcmVjaXNpb258Y3RybFNldFBvc2l0aW9ufGN0cmxTZXRTY2FsZXxjdHJsU2V0U3RydWN0dXJlZFRleHR8Y3RybFNldFRleHR8Y3RybFNldFRleHRDb2xvcnxjdHJsU2V0VGV4dENvbG9yU2Vjb25kYXJ5fGN0cmxTZXRUZXh0U2Vjb25kYXJ5fGN0cmxTZXRUb29sdGlwfGN0cmxTZXRUb29sdGlwQ29sb3JCb3h8Y3RybFNldFRvb2x0aXBDb2xvclNoYWRlfGN0cmxTZXRUb29sdGlwQ29sb3JUZXh0fGN0cmxTaG93fGN0cmxTaG93bnxjdHJsVGV4dHxjdHJsVGV4dEhlaWdodHxjdHJsVGV4dFNlY29uZGFyeXxjdHJsVGV4dFdpZHRofGN0cmxUeXBlfGN0cmxWaXNpYmxlfGN0Um93Q29udHJvbHN8Y3RSb3dDb3VudHxjdFNldEN1clNlbHxjdFNldERhdGF8Y3RTZXRIZWFkZXJUZW1wbGF0ZXxjdFNldFJvd1RlbXBsYXRlfGN0U2V0VmFsdWV8Y3RWYWx1ZXxjdXJhdG9yQWRkb25zfGN1cmF0b3JDYW1lcmF8Y3VyYXRvckNhbWVyYUFyZWF8Y3VyYXRvckNhbWVyYUFyZWFDZWlsaW5nfGN1cmF0b3JDb2VmfGN1cmF0b3JFZGl0YWJsZU9iamVjdHN8Y3VyYXRvckVkaXRpbmdBcmVhfGN1cmF0b3JFZGl0aW5nQXJlYVR5cGV8Y3VyYXRvck1vdXNlT3ZlcnxjdXJhdG9yUG9pbnRzfGN1cmF0b3JSZWdpc3RlcmVkT2JqZWN0c3xjdXJhdG9yU2VsZWN0ZWR8Y3VyYXRvcldheXBvaW50Q29zdHxjdXJyZW50M0RFTk9wZXJhdGlvbnxjdXJyZW50Q2hhbm5lbHxjdXJyZW50Q29tbWFuZHxjdXJyZW50TWFnYXppbmV8Y3VycmVudE1hZ2F6aW5lRGV0YWlsfGN1cnJlbnRNYWdhemluZURldGFpbFR1cnJldHxjdXJyZW50TWFnYXppbmVUdXJyZXR8Y3VycmVudE11enpsZXxjdXJyZW50TmFtZXNwYWNlfGN1cnJlbnRUYXNrfGN1cnJlbnRUYXNrc3xjdXJyZW50VGhyb3dhYmxlfGN1cnJlbnRWaXNpb25Nb2RlfGN1cnJlbnRXYXlwb2ludHxjdXJyZW50V2VhcG9ufGN1cnJlbnRXZWFwb25Nb2RlfGN1cnJlbnRXZWFwb25UdXJyZXR8Y3VycmVudFplcm9pbmd8Y3Vyc29yT2JqZWN0fGN1cnNvclRhcmdldHxjdXN0b21DaGF0fGN1c3RvbVJhZGlvfGN1dEZhZGVPdXR8Y3V0T2JqfGN1dFJzY3xjdXRUZXh0fGRhbWFnZXxkYXRlfGRhdGVUb051bWJlcnxkYXl0aW1lfGRlQWN0aXZhdGVLZXl8ZGVicmllZmluZ1RleHR8ZGVidWdGU018ZGVidWdMb2d8ZGVnfGRlbGV0ZTNERU5FbnRpdGllc3xkZWxldGVBdHxkZWxldGVDZW50ZXJ8ZGVsZXRlQ29sbGVjdGlvbnxkZWxldGVFZGl0b3JPYmplY3R8ZGVsZXRlR3JvdXB8ZGVsZXRlR3JvdXBXaGVuRW1wdHl8ZGVsZXRlSWRlbnRpdHl8ZGVsZXRlTG9jYXRpb258ZGVsZXRlTWFya2VyfGRlbGV0ZU1hcmtlckxvY2FsfGRlbGV0ZVJhbmdlfGRlbGV0ZVJlc291cmNlc3xkZWxldGVTaXRlfGRlbGV0ZVN0YXR1c3xkZWxldGVUZWFtfGRlbGV0ZVZlaGljbGV8ZGVsZXRlVmVoaWNsZUNyZXd8ZGVsZXRlV2F5cG9pbnR8ZGV0YWNofGRldGVjdGVkTWluZXN8ZGlhZ19hY3RpdmVNaXNzaW9uRlNNc3xkaWFnX2FjdGl2ZVNjcmlwdHN8ZGlhZ19hY3RpdmVTUUZTY3JpcHRzfGRpYWdfYWN0aXZlU1FTU2NyaXB0c3xkaWFnX2NhcHR1cmVGcmFtZXxkaWFnX2NhcHR1cmVGcmFtZVRvRmlsZXxkaWFnX2NhcHR1cmVTbG93RnJhbWV8ZGlhZ19jb2RlUGVyZm9ybWFuY2V8ZGlhZ19kcmF3TW9kZXxkaWFnX2R5bmFtaWNTaW11bGF0aW9uRW5kfGRpYWdfZW5hYmxlfGRpYWdfZW5hYmxlZHxkaWFnX2Zwc3xkaWFnX2Zwc01pbnxkaWFnX2ZyYW1lTm98ZGlhZ19saWdodE5ld0xvYWR8ZGlhZ19saXN0fGRpYWdfbG9nfGRpYWdfbG9nU2xvd0ZyYW1lfGRpYWdfbWVyZ2VDb25maWdGaWxlfGRpYWdfcmVjb3JkVHVycmV0TGltaXRzfGRpYWdfc2V0TGlnaHROZXd8ZGlhZ190aWNrVGltZXxkaWFnX3RvZ2dsZXxkaWFsb2d8ZGlhcnlTdWJqZWN0RXhpc3RzfGRpZEpJUHxkaWRKSVBPd25lcnxkaWZmaWN1bHR5fGRpZmZpY3VsdHlFbmFibGVkfGRpZmZpY3VsdHlFbmFibGVkUlREfGRpZmZpY3VsdHlPcHRpb258ZGlyZWN0aW9ufGRpcmVjdFNheXxkaXNhYmxlQUl8ZGlzYWJsZUNvbGxpc2lvbldpdGh8ZGlzYWJsZUNvbnZlcnNhdGlvbnxkaXNhYmxlRGVicmllZmluZ1N0YXRzfGRpc2FibGVNYXBJbmRpY2F0b3JzfGRpc2FibGVOVkdFcXVpcG1lbnR8ZGlzYWJsZVJlbW90ZVNlbnNvcnN8ZGlzYWJsZVNlcmlhbGl6YXRpb258ZGlzYWJsZVRJRXF1aXBtZW50fGRpc2FibGVVQVZDb25uZWN0YWJpbGl0eXxkaXNhYmxlVXNlcklucHV0fGRpc3BsYXlBZGRFdmVudEhhbmRsZXJ8ZGlzcGxheUN0cmx8ZGlzcGxheU51bGx8ZGlzcGxheVBhcmVudHxkaXNwbGF5UmVtb3ZlQWxsRXZlbnRIYW5kbGVyc3xkaXNwbGF5UmVtb3ZlRXZlbnRIYW5kbGVyfGRpc3BsYXlTZXRFdmVudEhhbmRsZXJ8ZGlzc29sdmVUZWFtfGRpc3RhbmNlfGRpc3RhbmNlMkR8ZGlzdGFuY2VTcXJ8ZGlzdHJpYnV0aW9uUmVnaW9ufGRvM0RFTkFjdGlvbnxkb0FydGlsbGVyeUZpcmV8ZG9GaXJlfGRvRm9sbG93fGRvRlNNfGRvR2V0T3V0fGRvTW92ZXxkb29yUGhhc2V8ZG9TdG9wfGRvU3VwcHJlc3NpdmVGaXJlfGRvVGFyZ2V0fGRvV2F0Y2h8ZHJhd0Fycm93fGRyYXdFbGxpcHNlfGRyYXdJY29ufGRyYXdJY29uM0R8ZHJhd0xpbmV8ZHJhd0xpbmUzRHxkcmF3TGlua3xkcmF3TG9jYXRpb258ZHJhd1BvbHlnb258ZHJhd1JlY3RhbmdsZXxkcmF3VHJpYW5nbGV8ZHJpdmVyfGRyb3B8ZHluYW1pY1NpbXVsYXRpb25EaXN0YW5jZXxkeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlQ29lZnxkeW5hbWljU2ltdWxhdGlvbkVuYWJsZWR8ZHluYW1pY1NpbXVsYXRpb25TeXN0ZW1FbmFibGVkfGVhc3R8ZWRpdDNERU5NaXNzaW9uQXR0cmlidXRlc3xlZGl0T2JqZWN0fGVkaXRvclNldEV2ZW50SGFuZGxlcnxlZmZlY3RpdmVDb21tYW5kZXJ8ZW1wdHlQb3NpdGlvbnN8ZW5hYmxlQUl8ZW5hYmxlQUlGZWF0dXJlfGVuYWJsZUFpbVByZWNpc2lvbnxlbmFibGVBdHRhY2t8ZW5hYmxlQXVkaW9GZWF0dXJlfGVuYWJsZUF1dG9TdGFydFVwUlREfGVuYWJsZUF1dG9UcmltUlREfGVuYWJsZUNhbVNoYWtlfGVuYWJsZUNhdXN0aWNzfGVuYWJsZUNoYW5uZWx8ZW5hYmxlQ29sbGlzaW9uV2l0aHxlbmFibGVDb3BpbG90fGVuYWJsZURlYnJpZWZpbmdTdGF0c3xlbmFibGVEaWFnTGVnZW5kfGVuYWJsZUR5bmFtaWNTaW11bGF0aW9ufGVuYWJsZUR5bmFtaWNTaW11bGF0aW9uU3lzdGVtfGVuYWJsZUVuZERpYWxvZ3xlbmFibGVFbmdpbmVBcnRpbGxlcnl8ZW5hYmxlRW52aXJvbm1lbnR8ZW5hYmxlRmF0aWd1ZXxlbmFibGVHdW5MaWdodHN8ZW5hYmxlSW5mb1BhbmVsQ29tcG9uZW50fGVuYWJsZUlSTGFzZXJzfGVuYWJsZU1pbWljc3xlbmFibGVQZXJzb25UdXJyZXR8ZW5hYmxlUmFkaW98ZW5hYmxlUmVsb2FkfGVuYWJsZVJvcGVBdHRhY2h8ZW5hYmxlU2F0Tm9ybWFsT25EZXRhaWx8ZW5hYmxlU2F2aW5nfGVuYWJsZVNlbnRlbmNlc3xlbmFibGVTaW11bGF0aW9ufGVuYWJsZVNpbXVsYXRpb25HbG9iYWx8ZW5hYmxlU3RhbWluYXxlbmFibGVTdHJlc3NEYW1hZ2V8ZW5hYmxlVGVhbVN3aXRjaHxlbmFibGVUcmFmZmljfGVuYWJsZVVBVkNvbm5lY3RhYmlsaXR5fGVuYWJsZVVBVldheXBvaW50c3xlbmFibGVWZWhpY2xlQ2FyZ298ZW5hYmxlVmVoaWNsZVNlbnNvcnxlbmFibGVXZWFwb25EaXNhc3NlbWJseXxlbmRsfGVuZExvYWRpbmdTY3JlZW58ZW5kTWlzc2lvbnxlbmdpbmVPbnxlbmdpbmVzSXNPblJURHxlbmdpbmVzUG93ZXJSVER8ZW5naW5lc1JwbVJURHxlbmdpbmVzVG9ycXVlUlREfGVudGl0aWVzfGVudmlyb25tZW50RW5hYmxlZHxlc3RpbWF0ZWRFbmRTZXJ2ZXJUaW1lfGVzdGltYXRlZFRpbWVMZWZ0fGV2YWxPYmplY3RBcmd1bWVudHxldmVyeUJhY2twYWNrfGV2ZXJ5Q29udGFpbmVyfGV4ZWN8ZXhlY0VkaXRvclNjcmlwdHxleHB8ZXhwZWN0ZWREZXN0aW5hdGlvbnxleHBvcnRKSVBNZXNzYWdlc3xleWVEaXJlY3Rpb258ZXllUG9zfGZhY2V8ZmFjdGlvbnxmYWRlTXVzaWN8ZmFkZVJhZGlvfGZhZGVTb3VuZHxmYWRlU3BlZWNofGZhaWxNaXNzaW9ufGZpbGxXZWFwb25zRnJvbVBvb2x8ZmluZHxmaW5kQ292ZXJ8ZmluZERpc3BsYXl8ZmluZEVkaXRvck9iamVjdHxmaW5kRW1wdHlQb3NpdGlvbnxmaW5kRW1wdHlQb3NpdGlvblJlYWR5fGZpbmRJZnxmaW5kTmVhcmVzdEVuZW15fGZpbmlzaE1pc3Npb25Jbml0fGZpbml0ZXxmaXJlfGZpcmVBdFRhcmdldHxmaXJzdEJhY2twYWNrfGZsYWd8ZmxhZ0FuaW1hdGlvblBoYXNlfGZsYWdPd25lcnxmbGFnU2lkZXxmbGFnVGV4dHVyZXxmbGVlaW5nfGZsb29yfGZseUluSGVpZ2h0fGZseUluSGVpZ2h0QVNMfGZvZ3xmb2dGb3JlY2FzdHxmb2dQYXJhbXN8Zm9yY2VBZGRVbmlmb3JtfGZvcmNlQXRQb3NpdGlvblJURHxmb3JjZWRNYXB8Zm9yY2VFbmR8Zm9yY2VGbGFnVGV4dHVyZXxmb3JjZUZvbGxvd1JvYWR8Zm9yY2VHZW5lcmF0b3JSVER8Zm9yY2VNYXB8Zm9yY2VSZXNwYXdufGZvcmNlU3BlZWR8Zm9yY2VXYWxrfGZvcmNlV2VhcG9uRmlyZXxmb3JjZVdlYXRoZXJDaGFuZ2V8Zm9yZ2V0VGFyZ2V0fGZvcm1hdHxmb3JtYXRpb258Zm9ybWF0aW9uRGlyZWN0aW9ufGZvcm1hdGlvbkxlYWRlcnxmb3JtYXRpb25NZW1iZXJzfGZvcm1hdGlvblBvc2l0aW9ufGZvcm1hdGlvblRhc2t8Zm9ybWF0VGV4dHxmb3JtTGVhZGVyfGZyZWVMb29rfGZyb21FZGl0b3J8ZnVlbHxmdWxsQ3Jld3xnZWFySURDQW1tb0NvdW50fGdlYXJTbG90QW1tb0NvdW50fGdlYXJTbG90RGF0YXxnZXQzREVOQWN0aW9uU3RhdGV8Z2V0M0RFTkF0dHJpYnV0ZXxnZXQzREVOQ2FtZXJhfGdldDNERU5Db25uZWN0aW9uc3xnZXQzREVORW50aXR5fGdldDNERU5FbnRpdHlJRHxnZXQzREVOR3JpZHxnZXQzREVOSWNvbnNWaXNpYmxlfGdldDNERU5MYXllckVudGl0aWVzfGdldDNERU5MaW5lc1Zpc2libGV8Z2V0M0RFTk1pc3Npb25BdHRyaWJ1dGV8Z2V0M0RFTk1vdXNlT3ZlcnxnZXQzREVOU2VsZWN0ZWR8Z2V0QWltaW5nQ29lZnxnZXRBbGxFbnZTb3VuZENvbnRyb2xsZXJzfGdldEFsbEhpdFBvaW50c0RhbWFnZXxnZXRBbGxPd25lZE1pbmVzfGdldEFsbFNvdW5kQ29udHJvbGxlcnN8Z2V0QW1tb0NhcmdvfGdldEFuaW1BaW1QcmVjaXNpb258Z2V0QW5pbVNwZWVkQ29lZnxnZXRBcnJheXxnZXRBcnRpbGxlcnlBbW1vfGdldEFydGlsbGVyeUNvbXB1dGVyU2V0dGluZ3N8Z2V0QXJ0aWxsZXJ5RVRBfGdldEFzc2lnbmVkQ3VyYXRvckxvZ2ljfGdldEFzc2lnbmVkQ3VyYXRvclVuaXR8Z2V0QmFja3BhY2tDYXJnb3xnZXRCbGVlZGluZ1JlbWFpbmluZ3xnZXRCdXJuaW5nVmFsdWV8Z2V0Q2FtZXJhVmlld0RpcmVjdGlvbnxnZXRDYXJnb0luZGV4fGdldENlbnRlck9mTWFzc3xnZXRDbGllbnRTdGF0ZXxnZXRDbGllbnRTdGF0ZU51bWJlcnxnZXRDb21wYXRpYmxlUHlsb25NYWdhemluZXN8Z2V0Q29ubmVjdGVkVUFWfGdldENvbnRhaW5lck1heExvYWR8Z2V0Q3Vyc29yT2JqZWN0UGFyYW1zfGdldEN1c3RvbUFpbUNvZWZ8Z2V0RGFtbWFnZXxnZXREZXNjcmlwdGlvbnxnZXREaXJ8Z2V0RGlyVmlzdWFsfGdldERMQ0Fzc2V0c1VzYWdlfGdldERMQ0Fzc2V0c1VzYWdlQnlOYW1lfGdldERMQ3N8Z2V0RExDVXNhZ2VUaW1lfGdldEVkaXRvckNhbWVyYXxnZXRFZGl0b3JNb2RlfGdldEVkaXRvck9iamVjdFNjb3BlfGdldEVsZXZhdGlvbk9mZnNldHxnZXRFbmdpbmVUYXJnZXRScG1SVER8Z2V0RW52U291bmRDb250cm9sbGVyfGdldEZhdGlndWV8Z2V0RmllbGRNYW51YWxTdGFydFBhZ2V8Z2V0Rm9yY2VkRmxhZ1RleHR1cmV8Z2V0RnJpZW5kfGdldEZTTVZhcmlhYmxlfGdldEZ1ZWxDYXJnb3xnZXRHcm91cEljb258Z2V0R3JvdXBJY29uUGFyYW1zfGdldEdyb3VwSWNvbnN8Z2V0SGlkZUZyb218Z2V0SGl0fGdldEhpdEluZGV4fGdldEhpdFBvaW50RGFtYWdlfGdldEl0ZW1DYXJnb3xnZXRNYWdhemluZUNhcmdvfGdldE1hcmtlckNvbG9yfGdldE1hcmtlclBvc3xnZXRNYXJrZXJTaXplfGdldE1hcmtlclR5cGV8Z2V0TWFzc3xnZXRNaXNzaW9uQ29uZmlnfGdldE1pc3Npb25Db25maWdWYWx1ZXxnZXRNaXNzaW9uRExDc3xnZXRNaXNzaW9uTGF5ZXJFbnRpdGllc3xnZXRNaXNzaW9uTGF5ZXJzfGdldE1vZGVsSW5mb3xnZXRNb3VzZVBvc2l0aW9ufGdldE11c2ljUGxheWVkVGltZXxnZXROdW1iZXJ8Z2V0T2JqZWN0QXJndW1lbnR8Z2V0T2JqZWN0Q2hpbGRyZW58Z2V0T2JqZWN0RExDfGdldE9iamVjdE1hdGVyaWFsc3xnZXRPYmplY3RQcm94eXxnZXRPYmplY3RUZXh0dXJlc3xnZXRPYmplY3RUeXBlfGdldE9iamVjdFZpZXdEaXN0YW5jZXxnZXRPeHlnZW5SZW1haW5pbmd8Z2V0UGVyc29uVXNlZERMQ3N8Z2V0UGlsb3RDYW1lcmFEaXJlY3Rpb258Z2V0UGlsb3RDYW1lcmFQb3NpdGlvbnxnZXRQaWxvdENhbWVyYVJvdGF0aW9ufGdldFBpbG90Q2FtZXJhVGFyZ2V0fGdldFBsYXRlTnVtYmVyfGdldFBsYXllckNoYW5uZWx8Z2V0UGxheWVyU2NvcmVzfGdldFBsYXllclVJRHxnZXRQbGF5ZXJVSURPbGR8Z2V0UG9zfGdldFBvc0FTTHxnZXRQb3NBU0xWaXN1YWx8Z2V0UG9zQVNMV3xnZXRQb3NBVEx8Z2V0UG9zQVRMVmlzdWFsfGdldFBvc1Zpc3VhbHxnZXRQb3NXb3JsZHxnZXRQeWxvbk1hZ2F6aW5lc3xnZXRSZWxEaXJ8Z2V0UmVsUG9zfGdldFJlbW90ZVNlbnNvcnNEaXNhYmxlZHxnZXRSZXBhaXJDYXJnb3xnZXRSZXNvbHV0aW9ufGdldFJvdG9yQnJha2VSVER8Z2V0U2hhZG93RGlzdGFuY2V8Z2V0U2hvdFBhcmVudHN8Z2V0U2xpbmdMb2FkfGdldFNvdW5kQ29udHJvbGxlcnxnZXRTb3VuZENvbnRyb2xsZXJSZXN1bHR8Z2V0U3BlZWR8Z2V0U3RhbWluYXxnZXRTdGF0VmFsdWV8Z2V0U3VwcHJlc3Npb258Z2V0VGVycmFpbkdyaWR8Z2V0VGVycmFpbkhlaWdodEFTTHxnZXRUZXh0fGdldFRvdGFsRExDVXNhZ2VUaW1lfGdldFRyaW1PZmZzZXRSVER8Z2V0VW5pdExvYWRvdXR8Z2V0VW5pdFRyYWl0fGdldFVzZXJNRkRUZXh0fGdldFVzZXJNRkRWYWx1ZXxnZXRWYXJpYWJsZXxnZXRWZWhpY2xlQ2FyZ298Z2V0V2VhcG9uQ2FyZ298Z2V0V2VhcG9uU3dheXxnZXRXaW5nc09yaWVudGF0aW9uUlREfGdldFdpbmdzUG9zaXRpb25SVER8Z2V0V1BQb3N8Z2xhbmNlQXR8Z2xvYmFsQ2hhdHxnbG9iYWxSYWRpb3xnb2dnbGVzfGdyb3VwfGdyb3VwQ2hhdHxncm91cEZyb21OZXRJZHxncm91cEljb25TZWxlY3RhYmxlfGdyb3VwSWNvbnNWaXNpYmxlfGdyb3VwSWR8Z3JvdXBPd25lcnxncm91cFJhZGlvfGdyb3VwU2VsZWN0ZWRVbml0c3xncm91cFNlbGVjdFVuaXR8Z3JwTnVsbHxndW5uZXJ8Z3VzdHN8aGFsdHxoYW5kZ3VuSXRlbXN8aGFuZGd1bk1hZ2F6aW5lfGhhbmRndW5XZWFwb258aGFuZHNIaXR8aGFzSW50ZXJmYWNlfGhhc1BpbG90Q2FtZXJhfGhhc1dlYXBvbnxoY0FsbEdyb3Vwc3xoY0dyb3VwUGFyYW1zfGhjTGVhZGVyfGhjUmVtb3ZlQWxsR3JvdXBzfGhjUmVtb3ZlR3JvdXB8aGNTZWxlY3RlZHxoY1NlbGVjdEdyb3VwfGhjU2V0R3JvdXB8aGNTaG93QmFyfGhjU2hvd25CYXJ8aGVhZGdlYXJ8aGlkZUJvZHl8aGlkZU9iamVjdHxoaWRlT2JqZWN0R2xvYmFsfGhpZGVTZWxlY3Rpb258aGludHxoaW50Q3xoaW50Q2FkZXR8aGludFNpbGVudHxobWR8aG9zdE1pc3Npb258aHRtbExvYWR8SFVETW92ZW1lbnRMZXZlbHN8aHVtaWRpdHl8aW1hZ2V8aW1wb3J0QWxsR3JvdXBzfGltcG9ydGFuY2V8aW58aW5BcmVhfGluQXJlYUFycmF5fGluY2FwYWNpdGF0ZWRTdGF0ZXxpbmRlcGVuZGVudHxpbmZsYW1lfGluZmxhbWVkfGluZm9QYW5lbHxpbmZvUGFuZWxDb21wb25lbnRFbmFibGVkfGluZm9QYW5lbENvbXBvbmVudHN8aW5mb1BhbmVsc3xpbkdhbWVVSVNldEV2ZW50SGFuZGxlcnxpbmhlcml0c0Zyb218aW5pdEFtYmllbnRMaWZlfGluUG9seWdvbnxpbnB1dEFjdGlvbnxpblJhbmdlT2ZBcnRpbGxlcnl8aW5zZXJ0RWRpdG9yT2JqZWN0fGludGVyc2VjdHxpczNERU58aXMzREVOTXVsdGlwbGF5ZXJ8aXNBYmxlVG9CcmVhdGhlfGlzQWdlbnR8aXNBaW1QcmVjaXNpb25FbmFibGVkfGlzQXJyYXl8aXNBdXRvSG92ZXJPbnxpc0F1dG9ub21vdXN8aXNBdXRvU3RhcnRVcEVuYWJsZWRSVER8aXNBdXRvdGVzdHxpc0F1dG9UcmltT25SVER8aXNCbGVlZGluZ3xpc0J1cm5pbmd8aXNDbGFzc3xpc0NvbGxpc2lvbkxpZ2h0T258aXNDb3BpbG90RW5hYmxlZHxpc0RhbWFnZUFsbG93ZWR8aXNEZWRpY2F0ZWR8aXNETENBdmFpbGFibGV8aXNFbmdpbmVPbnxpc0VxdWFsVG98aXNFcXVhbFR5cGV8aXNFcXVhbFR5cGVBbGx8aXNFcXVhbFR5cGVBbnl8aXNFcXVhbFR5cGVBcnJheXxpc0VxdWFsVHlwZVBhcmFtc3xpc0ZpbGVQYXRjaGluZ0VuYWJsZWR8aXNGbGFzaGxpZ2h0T258aXNGbGF0RW1wdHl8aXNGb3JjZWRXYWxrfGlzRm9ybWF0aW9uTGVhZGVyfGlzR3JvdXBEZWxldGVkV2hlbkVtcHR5fGlzSGlkZGVufGlzSW5SZW1haW5zQ29sbGVjdG9yfGlzSW5zdHJ1Y3RvckZpZ3VyZUVuYWJsZWR8aXNJUkxhc2VyT258aXNLZXlBY3RpdmV8aXNLaW5kT2Z8aXNMYXNlck9ufGlzTGlnaHRPbnxpc0xvY2FsaXplZHxpc01hbnVhbEZpcmV8aXNNYXJrZWRGb3JDb2xsZWN0aW9ufGlzTXVsdGlwbGF5ZXJ8aXNNdWx0aXBsYXllclNvbG98aXNOaWx8aXNOdWxsfGlzTnVtYmVyfGlzT2JqZWN0SGlkZGVufGlzT2JqZWN0UlREfGlzT25Sb2FkfGlzUGlwRW5hYmxlZHxpc1BsYXllcnxpc1JlYWxUaW1lfGlzUmVtb3RlRXhlY3V0ZWR8aXNSZW1vdGVFeGVjdXRlZEpJUHxpc1NlcnZlcnxpc1Nob3dpbmczREljb25zfGlzU2ltcGxlT2JqZWN0fGlzU3ByaW50QWxsb3dlZHxpc1N0YW1pbmFFbmFibGVkfGlzU3RlYW1NaXNzaW9ufGlzU3RyZWFtRnJpZW5kbHlVSUVuYWJsZWR8aXNTdHJlc3NEYW1hZ2VFbmFibGVkfGlzVGV4dHxpc1RvdWNoaW5nR3JvdW5kfGlzVHVybmVkT3V0fGlzVHV0SGludHNFbmFibGVkfGlzVUFWQ29ubmVjdGFibGV8aXNVQVZDb25uZWN0ZWR8aXNVSUNvbnRleHR8aXNVbmlmb3JtQWxsb3dlZHxpc1ZlaGljbGVDYXJnb3xpc1ZlaGljbGVSYWRhck9ufGlzVmVoaWNsZVNlbnNvckVuYWJsZWR8aXNXYWxraW5nfGlzV2VhcG9uRGVwbG95ZWR8aXNXZWFwb25SZXN0ZWR8aXRlbUNhcmdvfGl0ZW1zfGl0ZW1zV2l0aE1hZ2F6aW5lc3xqb2lufGpvaW5Bc3xqb2luQXNTaWxlbnR8am9pblNpbGVudHxqb2luU3RyaW5nfGtiQWRkRGF0YWJhc2V8a2JBZGREYXRhYmFzZVRhcmdldHN8a2JBZGRUb3BpY3xrYkhhc1RvcGljfGtiUmVhY3R8a2JSZW1vdmVUb3BpY3xrYlRlbGx8a2JXYXNTYWlkfGtleUltYWdlfGtleU5hbWV8a25vd3NBYm91dHxsYW5kfGxhbmRBdHxsYW5kUmVzdWx0fGxhbmd1YWdlfGxhc2VyVGFyZ2V0fGxiQWRkfGxiQ2xlYXJ8bGJDb2xvcnxsYkNvbG9yUmlnaHR8bGJDdXJTZWx8bGJEYXRhfGxiRGVsZXRlfGxiSXNTZWxlY3RlZHxsYlBpY3R1cmV8bGJQaWN0dXJlUmlnaHR8bGJTZWxlY3Rpb258bGJTZXRDb2xvcnxsYlNldENvbG9yUmlnaHR8bGJTZXRDdXJTZWx8bGJTZXREYXRhfGxiU2V0UGljdHVyZXxsYlNldFBpY3R1cmVDb2xvcnxsYlNldFBpY3R1cmVDb2xvckRpc2FibGVkfGxiU2V0UGljdHVyZUNvbG9yU2VsZWN0ZWR8bGJTZXRQaWN0dXJlUmlnaHR8bGJTZXRQaWN0dXJlUmlnaHRDb2xvcnxsYlNldFBpY3R1cmVSaWdodENvbG9yRGlzYWJsZWR8bGJTZXRQaWN0dXJlUmlnaHRDb2xvclNlbGVjdGVkfGxiU2V0U2VsZWN0Q29sb3J8bGJTZXRTZWxlY3RDb2xvclJpZ2h0fGxiU2V0U2VsZWN0ZWR8bGJTZXRUZXh0fGxiU2V0VGV4dFJpZ2h0fGxiU2V0VG9vbHRpcHxsYlNldFZhbHVlfGxiU2l6ZXxsYlNvcnR8bGJTb3J0QnlWYWx1ZXxsYlRleHR8bGJUZXh0UmlnaHR8bGJWYWx1ZXxsZWFkZXJ8bGVhZGVyYm9hcmREZUluaXR8bGVhZGVyYm9hcmRHZXRSb3dzfGxlYWRlcmJvYXJkSW5pdHxsZWFkZXJib2FyZFJlcXVlc3RSb3dzRnJpZW5kc3xsZWFkZXJib2FyZFJlcXVlc3RSb3dzR2xvYmFsfGxlYWRlcmJvYXJkUmVxdWVzdFJvd3NHbG9iYWxBcm91bmRVc2VyfGxlYWRlcmJvYXJkc1JlcXVlc3RVcGxvYWRTY29yZXxsZWFkZXJib2FyZHNSZXF1ZXN0VXBsb2FkU2NvcmVLZWVwQmVzdHxsZWFkZXJib2FyZFN0YXRlfGxlYXZlVmVoaWNsZXxsaWJyYXJ5Q3JlZGl0c3xsaWJyYXJ5RGlzY2xhaW1lcnN8bGlmZVN0YXRlfGxpZ2h0QXR0YWNoT2JqZWN0fGxpZ2h0RGV0YWNoT2JqZWN0fGxpZ2h0SXNPbnxsaWdodG5pbmdzfGxpbWl0U3BlZWR8bGluZWFyQ29udmVyc2lvbnxsaW5lQnJlYWt8bGluZUludGVyc2VjdHN8bGluZUludGVyc2VjdHNPYmpzfGxpbmVJbnRlcnNlY3RzU3VyZmFjZXN8bGluZUludGVyc2VjdHNXaXRofGxpbmtJdGVtfGxpc3R8bGlzdE9iamVjdHN8bGlzdFJlbW90ZVRhcmdldHN8bGlzdFZlaGljbGVTZW5zb3JzfGxufGxuYkFkZEFycmF5fGxuYkFkZENvbHVtbnxsbmJBZGRSb3d8bG5iQ2xlYXJ8bG5iQ29sb3J8bG5iQ29sb3JSaWdodHxsbmJDdXJTZWxSb3d8bG5iRGF0YXxsbmJEZWxldGVDb2x1bW58bG5iRGVsZXRlUm93fGxuYkdldENvbHVtbnNQb3NpdGlvbnxsbmJQaWN0dXJlfGxuYlBpY3R1cmVSaWdodHxsbmJTZXRDb2xvcnxsbmJTZXRDb2xvclJpZ2h0fGxuYlNldENvbHVtbnNQb3N8bG5iU2V0Q3VyU2VsUm93fGxuYlNldERhdGF8bG5iU2V0UGljdHVyZXxsbmJTZXRQaWN0dXJlQ29sb3J8bG5iU2V0UGljdHVyZUNvbG9yUmlnaHR8bG5iU2V0UGljdHVyZUNvbG9yU2VsZWN0ZWR8bG5iU2V0UGljdHVyZUNvbG9yU2VsZWN0ZWRSaWdodHxsbmJTZXRQaWN0dXJlUmlnaHR8bG5iU2V0VGV4dHxsbmJTZXRUZXh0UmlnaHR8bG5iU2V0VmFsdWV8bG5iU2l6ZXxsbmJTb3J0fGxuYlNvcnRCeVZhbHVlfGxuYlRleHR8bG5iVGV4dFJpZ2h0fGxuYlZhbHVlfGxvYWR8bG9hZEFic3xsb2FkQmFja3BhY2t8bG9hZEZpbGV8bG9hZEdhbWV8bG9hZElkZW50aXR5fGxvYWRNYWdhemluZXxsb2FkT3ZlcmxheXxsb2FkU3RhdHVzfGxvYWRVbmlmb3JtfGxvYWRWZXN0fGxvY2FsfGxvY2FsaXplfGxvY2F0aW9uTnVsbHxsb2NhdGlvblBvc2l0aW9ufGxvY2t8bG9ja0NhbWVyYVRvfGxvY2tDYXJnb3xsb2NrRHJpdmVyfGxvY2tlZHxsb2NrZWRDYXJnb3xsb2NrZWREcml2ZXJ8bG9ja2VkVHVycmV0fGxvY2tJZGVudGl0eXxsb2NrVHVycmV0fGxvY2tXUHxsb2d8bG9nRW50aXRpZXN8bG9nTmV0d29ya3xsb2dOZXR3b3JrVGVybWluYXRlfGxvb2tBdHxsb29rQXRQb3N8bWFnYXppbmVDYXJnb3xtYWdhemluZXN8bWFnYXppbmVzQWxsVHVycmV0c3xtYWdhemluZXNBbW1vfG1hZ2F6aW5lc0FtbW9DYXJnb3xtYWdhemluZXNBbW1vRnVsbHxtYWdhemluZXNEZXRhaWx8bWFnYXppbmVzRGV0YWlsQmFja3BhY2t8bWFnYXppbmVzRGV0YWlsVW5pZm9ybXxtYWdhemluZXNEZXRhaWxWZXN0fG1hZ2F6aW5lc1R1cnJldHxtYWdhemluZVR1cnJldEFtbW98bWFwQW5pbUFkZHxtYXBBbmltQ2xlYXJ8bWFwQW5pbUNvbW1pdHxtYXBBbmltRG9uZXxtYXBDZW50ZXJPbkNhbWVyYXxtYXBHcmlkUG9zaXRpb258bWFya0FzRmluaXNoZWRPblN0ZWFtfG1hcmtlckFscGhhfG1hcmtlckJydXNofG1hcmtlckNvbG9yfG1hcmtlckRpcnxtYXJrZXJQb3N8bWFya2VyU2hhcGV8bWFya2VyU2l6ZXxtYXJrZXJUZXh0fG1hcmtlclR5cGV8bWF4fG1lbWJlcnN8bWVudUFjdGlvbnxtZW51QWRkfG1lbnVDaGVja2VkfG1lbnVDbGVhcnxtZW51Q29sbGFwc2V8bWVudURhdGF8bWVudURlbGV0ZXxtZW51RW5hYmxlfG1lbnVFbmFibGVkfG1lbnVFeHBhbmR8bWVudUhvdmVyfG1lbnVQaWN0dXJlfG1lbnVTZXRBY3Rpb258bWVudVNldENoZWNrfG1lbnVTZXREYXRhfG1lbnVTZXRQaWN0dXJlfG1lbnVTZXRWYWx1ZXxtZW51U2hvcnRjdXR8bWVudVNob3J0Y3V0VGV4dHxtZW51U2l6ZXxtZW51U29ydHxtZW51VGV4dHxtZW51VVJMfG1lbnVWYWx1ZXxtaW58bWluZUFjdGl2ZXxtaW5lRGV0ZWN0ZWRCeXxtaXNzaW9uQ29uZmlnRmlsZXxtaXNzaW9uRGlmZmljdWx0eXxtaXNzaW9uTmFtZXxtaXNzaW9uTmFtZXNwYWNlfG1pc3Npb25TdGFydHxtaXNzaW9uVmVyc2lvbnxtb2RlbFRvV29ybGR8bW9kZWxUb1dvcmxkVmlzdWFsfG1vZGVsVG9Xb3JsZFZpc3VhbFdvcmxkfG1vZGVsVG9Xb3JsZFdvcmxkfG1vZFBhcmFtc3xtb29uSW50ZW5zaXR5fG1vb25QaGFzZXxtb3JhbGV8bW92ZXxtb3ZlM0RFTkNhbWVyYXxtb3ZlSW5Bbnl8bW92ZUluQ2FyZ298bW92ZUluQ29tbWFuZGVyfG1vdmVJbkRyaXZlcnxtb3ZlSW5HdW5uZXJ8bW92ZUluVHVycmV0fG1vdmVPYmplY3RUb0VuZHxtb3ZlT3V0fG1vdmVUaW1lfG1vdmVUb3xtb3ZlVG9Db21wbGV0ZWR8bW92ZVRvRmFpbGVkfG11c2ljVm9sdW1lfG5hbWV8bmFtZVNvdW5kfG5lYXJFbnRpdGllc3xuZWFyZXN0QnVpbGRpbmd8bmVhcmVzdExvY2F0aW9ufG5lYXJlc3RMb2NhdGlvbnN8bmVhcmVzdExvY2F0aW9uV2l0aER1YmJpbmd8bmVhcmVzdE9iamVjdHxuZWFyZXN0T2JqZWN0c3xuZWFyZXN0VGVycmFpbk9iamVjdHN8bmVhck9iamVjdHN8bmVhck9iamVjdHNSZWFkeXxuZWFyUm9hZHN8bmVhclN1cHBsaWVzfG5lYXJUYXJnZXRzfG5lZWRSZWxvYWR8bmV0SWR8bmV0T2JqTnVsbHxuZXdPdmVybGF5fG5leHRNZW51SXRlbUluZGV4fG5leHRXZWF0aGVyQ2hhbmdlfG5NZW51SXRlbXN8bnVtYmVyT2ZFbmdpbmVzUlREfG51bWJlclRvRGF0ZXxvYmplY3RDdXJhdG9yc3xvYmplY3RGcm9tTmV0SWR8b2JqZWN0UGFyZW50fG9iak51bGx8b2JqU3RhdHVzfG9uQnJpZWZpbmdHZWFyfG9uQnJpZWZpbmdHcm91cHxvbkJyaWVmaW5nTm90ZXN8b25CcmllZmluZ1BsYW58b25CcmllZmluZ1RlYW1Td2l0Y2h8b25Db21tYW5kTW9kZUNoYW5nZWR8b25Eb3VibGVDbGlja3xvbkVhY2hGcmFtZXxvbkdyb3VwSWNvbkNsaWNrfG9uR3JvdXBJY29uT3ZlckVudGVyfG9uR3JvdXBJY29uT3ZlckxlYXZlfG9uSENHcm91cFNlbGVjdGlvbkNoYW5nZWR8b25NYXBTaW5nbGVDbGlja3xvblBsYXllckNvbm5lY3RlZHxvblBsYXllckRpc2Nvbm5lY3RlZHxvblByZWxvYWRGaW5pc2hlZHxvblByZWxvYWRTdGFydGVkfG9uU2hvd05ld09iamVjdHxvblRlYW1Td2l0Y2h8b3BlbkN1cmF0b3JJbnRlcmZhY2V8b3BlbkRMQ1BhZ2V8b3BlbkRTSW50ZXJmYWNlfG9wZW5NYXB8b3BlblN0ZWFtQXBwfG9wZW5Zb3V0dWJlVmlkZW98b3Bmb3J8b3JkZXJHZXRJbnxvdmVyY2FzdHxvdmVyY2FzdEZvcmVjYXN0fG93bmVyfHBhcmFtfHBhcmFtc3xwYXJzZU51bWJlcnxwYXJzZVNpbXBsZUFycmF5fHBhcnNlVGV4dHxwYXJzaW5nTmFtZXNwYWNlfHBhcnRpY2xlc1F1YWxpdHl8cGl8cGlja1dlYXBvblBvb2x8cGl0Y2h8cGl4ZWxHcmlkfHBpeGVsR3JpZEJhc2V8cGl4ZWxHcmlkTm9VSVNjYWxlfHBpeGVsSHxwaXhlbFd8cGxheWFibGVTbG90c051bWJlcnxwbGF5YWJsZVVuaXRzfHBsYXlBY3Rpb258cGxheUFjdGlvbk5vd3xwbGF5ZXJ8cGxheWVyUmVzcGF3blRpbWV8cGxheWVyU2lkZXxwbGF5ZXJzTnVtYmVyfHBsYXlHZXN0dXJlfHBsYXlNaXNzaW9ufHBsYXlNb3ZlfHBsYXlNb3ZlTm93fHBsYXlNdXNpY3xwbGF5U2NyaXB0ZWRNaXNzaW9ufHBsYXlTb3VuZHxwbGF5U291bmQzRHxwb3NpdGlvbnxwb3NpdGlvbkNhbWVyYVRvV29ybGR8cG9zU2NyZWVuVG9Xb3JsZHxwb3NXb3JsZFRvU2NyZWVufHBwRWZmZWN0QWRqdXN0fHBwRWZmZWN0Q29tbWl0fHBwRWZmZWN0Q29tbWl0dGVkfHBwRWZmZWN0Q3JlYXRlfHBwRWZmZWN0RGVzdHJveXxwcEVmZmVjdEVuYWJsZXxwcEVmZmVjdEVuYWJsZWR8cHBFZmZlY3RGb3JjZUluTlZHfHByZWNpc2lvbnxwcmVsb2FkQ2FtZXJhfHByZWxvYWRPYmplY3R8cHJlbG9hZFNvdW5kfHByZWxvYWRUaXRsZU9ianxwcmVsb2FkVGl0bGVSc2N8cHJpbWFyeVdlYXBvbnxwcmltYXJ5V2VhcG9uSXRlbXN8cHJpbWFyeVdlYXBvbk1hZ2F6aW5lfHByaW9yaXR5fHByb2Nlc3NEaWFyeUxpbmt8cHJvY2Vzc0luaXRDb21tYW5kc3xwcm9kdWN0VmVyc2lvbnxwcm9maWxlTmFtZXxwcm9maWxlTmFtZXNwYWNlfHByb2ZpbGVOYW1lU3RlYW18cHJvZ3Jlc3NMb2FkaW5nU2NyZWVufHByb2dyZXNzUG9zaXRpb258cHJvZ3Jlc3NTZXRQb3NpdGlvbnxwdWJsaWNWYXJpYWJsZXxwdWJsaWNWYXJpYWJsZUNsaWVudHxwdWJsaWNWYXJpYWJsZVNlcnZlcnxwdXNoQmFja3xwdXNoQmFja1VuaXF1ZXxwdXRXZWFwb25Qb29sfHF1ZXJ5SXRlbXNQb29sfHF1ZXJ5TWFnYXppbmVQb29sfHF1ZXJ5V2VhcG9uUG9vbHxyYWR8cmFkaW9DaGFubmVsQWRkfHJhZGlvQ2hhbm5lbENyZWF0ZXxyYWRpb0NoYW5uZWxSZW1vdmV8cmFkaW9DaGFubmVsU2V0Q2FsbFNpZ258cmFkaW9DaGFubmVsU2V0TGFiZWx8cmFkaW9Wb2x1bWV8cmFpbnxyYWluYm93fHJhbmRvbXxyYW5rfHJhbmtJZHxyYXRpbmd8cmVjdGFuZ3VsYXJ8cmVnaXN0ZXJlZFRhc2tzfHJlZ2lzdGVyVGFza3xyZWxvYWR8cmVsb2FkRW5hYmxlZHxyZW1vdGVDb250cm9sfHJlbW90ZUV4ZWN8cmVtb3RlRXhlY0NhbGx8cmVtb3RlRXhlY3V0ZWRPd25lcnxyZW1vdmUzREVOQ29ubmVjdGlvbnxyZW1vdmUzREVORXZlbnRIYW5kbGVyfHJlbW92ZTNERU5MYXllcnxyZW1vdmVBY3Rpb258cmVtb3ZlQWxsM0RFTkV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsQWN0aW9uc3xyZW1vdmVBbGxBc3NpZ25lZEl0ZW1zfHJlbW92ZUFsbENvbnRhaW5lcnN8cmVtb3ZlQWxsQ3VyYXRvckFkZG9uc3xyZW1vdmVBbGxDdXJhdG9yQ2FtZXJhQXJlYXN8cmVtb3ZlQWxsQ3VyYXRvckVkaXRpbmdBcmVhc3xyZW1vdmVBbGxFdmVudEhhbmRsZXJzfHJlbW92ZUFsbEhhbmRndW5JdGVtc3xyZW1vdmVBbGxJdGVtc3xyZW1vdmVBbGxJdGVtc1dpdGhNYWdhemluZXN8cmVtb3ZlQWxsTWlzc2lvbkV2ZW50SGFuZGxlcnN8cmVtb3ZlQWxsTVBFdmVudEhhbmRsZXJzfHJlbW92ZUFsbE11c2ljRXZlbnRIYW5kbGVyc3xyZW1vdmVBbGxPd25lZE1pbmVzfHJlbW92ZUFsbFByaW1hcnlXZWFwb25JdGVtc3xyZW1vdmVBbGxXZWFwb25zfHJlbW92ZUJhY2twYWNrfHJlbW92ZUJhY2twYWNrR2xvYmFsfHJlbW92ZUN1cmF0b3JBZGRvbnN8cmVtb3ZlQ3VyYXRvckNhbWVyYUFyZWF8cmVtb3ZlQ3VyYXRvckVkaXRhYmxlT2JqZWN0c3xyZW1vdmVDdXJhdG9yRWRpdGluZ0FyZWF8cmVtb3ZlRHJhd0ljb258cmVtb3ZlRHJhd0xpbmtzfHJlbW92ZUV2ZW50SGFuZGxlcnxyZW1vdmVGcm9tUmVtYWluc0NvbGxlY3RvcnxyZW1vdmVHb2dnbGVzfHJlbW92ZUdyb3VwSWNvbnxyZW1vdmVIYW5kZ3VuSXRlbXxyZW1vdmVIZWFkZ2VhcnxyZW1vdmVJdGVtfHJlbW92ZUl0ZW1Gcm9tQmFja3BhY2t8cmVtb3ZlSXRlbUZyb21Vbmlmb3JtfHJlbW92ZUl0ZW1Gcm9tVmVzdHxyZW1vdmVJdGVtc3xyZW1vdmVNYWdhemluZXxyZW1vdmVNYWdhemluZUdsb2JhbHxyZW1vdmVNYWdhemluZXN8cmVtb3ZlTWFnYXppbmVzVHVycmV0fHJlbW92ZU1hZ2F6aW5lVHVycmV0fHJlbW92ZU1lbnVJdGVtfHJlbW92ZU1pc3Npb25FdmVudEhhbmRsZXJ8cmVtb3ZlTVBFdmVudEhhbmRsZXJ8cmVtb3ZlTXVzaWNFdmVudEhhbmRsZXJ8cmVtb3ZlT3duZWRNaW5lfHJlbW92ZVByaW1hcnlXZWFwb25JdGVtfHJlbW92ZVNlY29uZGFyeVdlYXBvbkl0ZW18cmVtb3ZlU2ltcGxlVGFza3xyZW1vdmVTd2l0Y2hhYmxlVW5pdHxyZW1vdmVUZWFtTWVtYmVyfHJlbW92ZVVuaWZvcm18cmVtb3ZlVmVzdHxyZW1vdmVXZWFwb258cmVtb3ZlV2VhcG9uQXR0YWNobWVudENhcmdvfHJlbW92ZVdlYXBvbkNhcmdvfHJlbW92ZVdlYXBvbkdsb2JhbHxyZW1vdmVXZWFwb25UdXJyZXR8cmVwb3J0UmVtb3RlVGFyZ2V0fHJlcXVpcmVkVmVyc2lvbnxyZXNldENhbVNoYWtlfHJlc2V0U3ViZ3JvdXBEaXJlY3Rpb258cmVzaXN0YW5jZXxyZXNpemV8cmVzb3VyY2VzfHJlc3Bhd25WZWhpY2xlfHJlc3RhcnRFZGl0b3JDYW1lcmF8cmV2ZWFsfHJldmVhbE1pbmV8cmV2ZXJzZXxyZXZlcnNlZE1vdXNlWXxyb2FkQXR8cm9hZHNDb25uZWN0ZWRUb3xyb2xlRGVzY3JpcHRpb258cm9wZUF0dGFjaGVkT2JqZWN0c3xyb3BlQXR0YWNoZWRUb3xyb3BlQXR0YWNoRW5hYmxlZHxyb3BlQXR0YWNoVG98cm9wZUNyZWF0ZXxyb3BlQ3V0fHJvcGVEZXN0cm95fHJvcGVEZXRhY2h8cm9wZUVuZFBvc2l0aW9ufHJvcGVMZW5ndGh8cm9wZXN8cm9wZVVud2luZHxyb3BlVW53b3VuZHxyb3RvcnNGb3JjZXNSVER8cm90b3JzUnBtUlREfHJvdW5kfHJ1bkluaXRTY3JpcHR8c2FmZVpvbmVIfHNhZmVab25lV3xzYWZlWm9uZVdBYnN8c2FmZVpvbmVYfHNhZmVab25lWEFic3xzYWZlWm9uZVl8c2F2ZTNERU5JbnZlbnRvcnl8c2F2ZUdhbWV8c2F2ZUlkZW50aXR5fHNhdmVKb3lzdGlja3N8c2F2ZU92ZXJsYXl8c2F2ZVByb2ZpbGVOYW1lc3BhY2V8c2F2ZVN0YXR1c3xzYXZlVmFyfHNhdmluZ0VuYWJsZWR8c2F5fHNheTJEfHNheTNEfHNjb3JlfHNjb3JlU2lkZXxzY3JlZW5zaG90fHNjcmVlblRvV29ybGR8c2NyaXB0RG9uZXxzY3JpcHROYW1lfHNjcmlwdE51bGx8c2N1ZFN0YXRlfHNlY29uZGFyeVdlYXBvbnxzZWNvbmRhcnlXZWFwb25JdGVtc3xzZWNvbmRhcnlXZWFwb25NYWdhemluZXxzZWxlY3R8c2VsZWN0QmVzdFBsYWNlc3xzZWxlY3REaWFyeVN1YmplY3R8c2VsZWN0ZWRFZGl0b3JPYmplY3RzfHNlbGVjdEVkaXRvck9iamVjdHxzZWxlY3Rpb25OYW1lc3xzZWxlY3Rpb25Qb3NpdGlvbnxzZWxlY3RMZWFkZXJ8c2VsZWN0TWF4fHNlbGVjdE1pbnxzZWxlY3ROb1BsYXllcnxzZWxlY3RQbGF5ZXJ8c2VsZWN0UmFuZG9tfHNlbGVjdFJhbmRvbVdlaWdodGVkfHNlbGVjdFdlYXBvbnxzZWxlY3RXZWFwb25UdXJyZXR8c2VuZEFVTWVzc2FnZXxzZW5kU2ltcGxlQ29tbWFuZHxzZW5kVGFza3xzZW5kVGFza1Jlc3VsdHxzZW5kVURQTWVzc2FnZXxzZXJ2ZXJDb21tYW5kfHNlcnZlckNvbW1hbmRBdmFpbGFibGV8c2VydmVyQ29tbWFuZEV4ZWN1dGFibGV8c2VydmVyTmFtZXxzZXJ2ZXJUaW1lfHNldHxzZXQzREVOQXR0cmlidXRlfHNldDNERU5BdHRyaWJ1dGVzfHNldDNERU5HcmlkfHNldDNERU5JY29uc1Zpc2libGV8c2V0M0RFTkxheWVyfHNldDNERU5MaW5lc1Zpc2libGV8c2V0M0RFTkxvZ2ljVHlwZXxzZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXxzZXQzREVOTWlzc2lvbkF0dHJpYnV0ZXN8c2V0M0RFTk1vZGVsc1Zpc2libGV8c2V0M0RFTk9iamVjdFR5cGV8c2V0M0RFTlNlbGVjdGVkfHNldEFjY1RpbWV8c2V0QWN0dWFsQ29sbGVjdGl2ZVJURHxzZXRBaXJwbGFuZVRocm90dGxlfHNldEFpcnBvcnRTaWRlfHNldEFtbW98c2V0QW1tb0NhcmdvfHNldEFtbW9PblB5bG9ufHNldEFuaW1TcGVlZENvZWZ8c2V0QXBlcnR1cmV8c2V0QXBlcnR1cmVOZXd8c2V0QXJtb3J5UG9pbnRzfHNldEF0dHJpYnV0ZXN8c2V0QXV0b25vbW91c3xzZXRCZWhhdmlvdXJ8c2V0QmxlZWRpbmdSZW1haW5pbmd8c2V0QnJha2VzUlREfHNldENhbWVyYUludGVyZXN0fHNldENhbVNoYWtlRGVmUGFyYW1zfHNldENhbVNoYWtlUGFyYW1zfHNldENhbVVzZVRJfHNldENhcHRpdmV8c2V0Q2VudGVyT2ZNYXNzfHNldENvbGxpc2lvbkxpZ2h0fHNldENvbWJhdE1vZGV8c2V0Q29tcGFzc09zY2lsbGF0aW9ufHNldENvbnZveVNlcGFyYXRpb258c2V0Q3VyYXRvckNhbWVyYUFyZWFDZWlsaW5nfHNldEN1cmF0b3JDb2VmfHNldEN1cmF0b3JFZGl0aW5nQXJlYVR5cGV8c2V0Q3VyYXRvcldheXBvaW50Q29zdHxzZXRDdXJyZW50Q2hhbm5lbHxzZXRDdXJyZW50VGFza3xzZXRDdXJyZW50V2F5cG9pbnR8c2V0Q3VzdG9tQWltQ29lZnxzZXRDdXN0b21XZWlnaHRSVER8c2V0RGFtYWdlfHNldERhbW1hZ2V8c2V0RGF0ZXxzZXREZWJyaWVmaW5nVGV4dHxzZXREZWZhdWx0Q2FtZXJhfHNldERlc3RpbmF0aW9ufHNldERldGFpbE1hcEJsZW5kUGFyc3xzZXREaXJ8c2V0RGlyZWN0aW9ufHNldERyYXdJY29ufHNldERyaXZlT25QYXRofHNldERyb3BJbnRlcnZhbHxzZXREeW5hbWljU2ltdWxhdGlvbkRpc3RhbmNlfHNldER5bmFtaWNTaW11bGF0aW9uRGlzdGFuY2VDb2VmfHNldEVkaXRvck1vZGV8c2V0RWRpdG9yT2JqZWN0U2NvcGV8c2V0RWZmZWN0Q29uZGl0aW9ufHNldEVuZ2luZVJwbVJURHxzZXRGYWNlfHNldEZhY2VBbmltYXRpb258c2V0RmF0aWd1ZXxzZXRGZWF0dXJlVHlwZXxzZXRGbGFnQW5pbWF0aW9uUGhhc2V8c2V0RmxhZ093bmVyfHNldEZsYWdTaWRlfHNldEZsYWdUZXh0dXJlfHNldEZvZ3xzZXRGb3JjZUdlbmVyYXRvclJURHxzZXRGb3JtYXRpb258c2V0Rm9ybWF0aW9uVGFza3xzZXRGb3JtRGlyfHNldEZyaWVuZHxzZXRGcm9tRWRpdG9yfHNldEZTTVZhcmlhYmxlfHNldEZ1ZWx8c2V0RnVlbENhcmdvfHNldEdyb3VwSWNvbnxzZXRHcm91cEljb25QYXJhbXN8c2V0R3JvdXBJY29uc1NlbGVjdGFibGV8c2V0R3JvdXBJY29uc1Zpc2libGV8c2V0R3JvdXBJZHxzZXRHcm91cElkR2xvYmFsfHNldEdyb3VwT3duZXJ8c2V0R3VzdHN8c2V0SGlkZUJlaGluZHxzZXRIaXR8c2V0SGl0SW5kZXh8c2V0SGl0UG9pbnREYW1hZ2V8c2V0SG9yaXpvblBhcmFsbGF4Q29lZnxzZXRIVURNb3ZlbWVudExldmVsc3xzZXRJZGVudGl0eXxzZXRJbXBvcnRhbmNlfHNldEluZm9QYW5lbHxzZXRMZWFkZXJ8c2V0TGlnaHRBbWJpZW50fHNldExpZ2h0QXR0ZW51YXRpb258c2V0TGlnaHRCcmlnaHRuZXNzfHNldExpZ2h0Q29sb3J8c2V0TGlnaHREYXlMaWdodHxzZXRMaWdodEZsYXJlTWF4RGlzdGFuY2V8c2V0TGlnaHRGbGFyZVNpemV8c2V0TGlnaHRJbnRlbnNpdHl8c2V0TGlnaHRuaW5nc3xzZXRMaWdodFVzZUZsYXJlfHNldExvY2FsV2luZFBhcmFtc3xzZXRNYWdhemluZVR1cnJldEFtbW98c2V0TWFya2VyQWxwaGF8c2V0TWFya2VyQWxwaGFMb2NhbHxzZXRNYXJrZXJCcnVzaHxzZXRNYXJrZXJCcnVzaExvY2FsfHNldE1hcmtlckNvbG9yfHNldE1hcmtlckNvbG9yTG9jYWx8c2V0TWFya2VyRGlyfHNldE1hcmtlckRpckxvY2FsfHNldE1hcmtlclBvc3xzZXRNYXJrZXJQb3NMb2NhbHxzZXRNYXJrZXJTaGFwZXxzZXRNYXJrZXJTaGFwZUxvY2FsfHNldE1hcmtlclNpemV8c2V0TWFya2VyU2l6ZUxvY2FsfHNldE1hcmtlclRleHR8c2V0TWFya2VyVGV4dExvY2FsfHNldE1hcmtlclR5cGV8c2V0TWFya2VyVHlwZUxvY2FsfHNldE1hc3N8c2V0TWltaWN8c2V0TW91c2VQb3NpdGlvbnxzZXRNdXNpY0VmZmVjdHxzZXRNdXNpY0V2ZW50SGFuZGxlcnxzZXROYW1lfHNldE5hbWVTb3VuZHxzZXRPYmplY3RBcmd1bWVudHN8c2V0T2JqZWN0TWF0ZXJpYWx8c2V0T2JqZWN0TWF0ZXJpYWxHbG9iYWx8c2V0T2JqZWN0UHJveHl8c2V0T2JqZWN0VGV4dHVyZXxzZXRPYmplY3RUZXh0dXJlR2xvYmFsfHNldE9iamVjdFZpZXdEaXN0YW5jZXxzZXRPdmVyY2FzdHxzZXRPd25lcnxzZXRPeHlnZW5SZW1haW5pbmd8c2V0UGFydGljbGVDaXJjbGV8c2V0UGFydGljbGVDbGFzc3xzZXRQYXJ0aWNsZUZpcmV8c2V0UGFydGljbGVQYXJhbXN8c2V0UGFydGljbGVSYW5kb218c2V0UGlsb3RDYW1lcmFEaXJlY3Rpb258c2V0UGlsb3RDYW1lcmFSb3RhdGlvbnxzZXRQaWxvdENhbWVyYVRhcmdldHxzZXRQaWxvdExpZ2h0fHNldFBpUEVmZmVjdHxzZXRQaXRjaHxzZXRQbGF0ZU51bWJlcnxzZXRQbGF5YWJsZXxzZXRQbGF5ZXJSZXNwYXduVGltZXxzZXRQb3N8c2V0UG9zQVNMfHNldFBvc0FTTDJ8c2V0UG9zQVNMV3xzZXRQb3NBVEx8c2V0UG9zaXRpb258c2V0UG9zV29ybGR8c2V0UHlsb25Mb2FkT3V0fHNldFB5bG9uc1ByaW9yaXR5fHNldFJhZGlvTXNnfHNldFJhaW58c2V0UmFpbmJvd3xzZXRSYW5kb21MaXB8c2V0UmFua3xzZXRSZWN0YW5ndWxhcnxzZXRSZXBhaXJDYXJnb3xzZXRSb3RvckJyYWtlUlREfHNldFNoYWRvd0Rpc3RhbmNlfHNldFNob3RQYXJlbnRzfHNldFNpZGV8c2V0U2ltcGxlVGFza0Fsd2F5c1Zpc2libGV8c2V0U2ltcGxlVGFza0N1c3RvbURhdGF8c2V0U2ltcGxlVGFza0Rlc2NyaXB0aW9ufHNldFNpbXBsZVRhc2tEZXN0aW5hdGlvbnxzZXRTaW1wbGVUYXNrVGFyZ2V0fHNldFNpbXBsZVRhc2tUeXBlfHNldFNpbXVsV2VhdGhlckxheWVyc3xzZXRTaXplfHNldFNraWxsfHNldFNsaW5nTG9hZHxzZXRTb3VuZEVmZmVjdHxzZXRTcGVha2VyfHNldFNwZWVjaHxzZXRTcGVlZE1vZGV8c2V0U3RhbWluYXxzZXRTdGFtaW5hU2NoZW1lfHNldFN0YXRWYWx1ZXxzZXRTdXBwcmVzc2lvbnxzZXRTeXN0ZW1PZlVuaXRzfHNldFRhcmdldEFnZXxzZXRUYXNrTWFya2VyT2Zmc2V0fHNldFRhc2tSZXN1bHR8c2V0VGFza1N0YXRlfHNldFRlcnJhaW5HcmlkfHNldFRleHR8c2V0VGltZU11bHRpcGxpZXJ8c2V0VGl0bGVFZmZlY3R8c2V0VG9uZU1hcHBpbmd8c2V0VG9uZU1hcHBpbmdQYXJhbXN8c2V0VHJhZmZpY0RlbnNpdHl8c2V0VHJhZmZpY0Rpc3RhbmNlfHNldFRyYWZmaWNHYXB8c2V0VHJhZmZpY1NwZWVkfHNldFRyaWdnZXJBY3RpdmF0aW9ufHNldFRyaWdnZXJBcmVhfHNldFRyaWdnZXJTdGF0ZW1lbnRzfHNldFRyaWdnZXJUZXh0fHNldFRyaWdnZXJUaW1lb3V0fHNldFRyaWdnZXJUeXBlfHNldFR5cGV8c2V0VW5jb25zY2lvdXN8c2V0VW5pdEFiaWxpdHl8c2V0VW5pdExvYWRvdXR8c2V0VW5pdFBvc3xzZXRVbml0UG9zV2Vha3xzZXRVbml0UmFua3xzZXRVbml0UmVjb2lsQ29lZmZpY2llbnR8c2V0VW5pdFRyYWl0fHNldFVubG9hZEluQ29tYmF0fHNldFVzZXJBY3Rpb25UZXh0fHNldFVzZXJNRkRUZXh0fHNldFVzZXJNRkRWYWx1ZXxzZXRWYXJpYWJsZXxzZXRWZWN0b3JEaXJ8c2V0VmVjdG9yRGlyQW5kVXB8c2V0VmVjdG9yVXB8c2V0VmVoaWNsZUFtbW98c2V0VmVoaWNsZUFtbW9EZWZ8c2V0VmVoaWNsZUFybW9yfHNldFZlaGljbGVDYXJnb3xzZXRWZWhpY2xlSWR8c2V0VmVoaWNsZUluaXR8c2V0VmVoaWNsZUxvY2t8c2V0VmVoaWNsZVBvc2l0aW9ufHNldFZlaGljbGVSYWRhcnxzZXRWZWhpY2xlUmVjZWl2ZVJlbW90ZVRhcmdldHN8c2V0VmVoaWNsZVJlcG9ydE93blBvc2l0aW9ufHNldFZlaGljbGVSZXBvcnRSZW1vdGVUYXJnZXRzfHNldFZlaGljbGVUSVBhcnN8c2V0VmVoaWNsZVZhck5hbWV8c2V0VmVsb2NpdHl8c2V0VmVsb2NpdHlNb2RlbFNwYWNlfHNldFZlbG9jaXR5VHJhbnNmb3JtYXRpb258c2V0Vmlld0Rpc3RhbmNlfHNldFZpc2libGVJZlRyZWVDb2xsYXBzZWR8c2V0V2FudGVkUnBtUlREfHNldFdhdmVzfHNldFdheXBvaW50QmVoYXZpb3VyfHNldFdheXBvaW50Q29tYmF0TW9kZXxzZXRXYXlwb2ludENvbXBsZXRpb25SYWRpdXN8c2V0V2F5cG9pbnREZXNjcmlwdGlvbnxzZXRXYXlwb2ludEZvcmNlQmVoYXZpb3VyfHNldFdheXBvaW50Rm9ybWF0aW9ufHNldFdheXBvaW50SG91c2VQb3NpdGlvbnxzZXRXYXlwb2ludExvaXRlclJhZGl1c3xzZXRXYXlwb2ludExvaXRlclR5cGV8c2V0V2F5cG9pbnROYW1lfHNldFdheXBvaW50UG9zaXRpb258c2V0V2F5cG9pbnRTY3JpcHR8c2V0V2F5cG9pbnRTcGVlZHxzZXRXYXlwb2ludFN0YXRlbWVudHN8c2V0V2F5cG9pbnRUaW1lb3V0fHNldFdheXBvaW50VHlwZXxzZXRXYXlwb2ludFZpc2libGV8c2V0V2VhcG9uUmVsb2FkaW5nVGltZXxzZXRXaW5kfHNldFdpbmREaXJ8c2V0V2luZEZvcmNlfHNldFdpbmRTdHJ8c2V0V2luZ0ZvcmNlU2NhbGVSVER8c2V0V1BQb3N8c2hvdzNESWNvbnN8c2hvd0NoYXR8c2hvd0NpbmVtYUJvcmRlcnxzaG93Q29tbWFuZGluZ01lbnV8c2hvd0NvbXBhc3N8c2hvd0N1cmF0b3JDb21wYXNzfHNob3dHUFN8c2hvd0hVRHxzaG93TGVnZW5kfHNob3dNYXB8c2hvd25BcnRpbGxlcnlDb21wdXRlcnxzaG93bkNoYXR8c2hvd25Db21wYXNzfHNob3duQ3VyYXRvckNvbXBhc3N8c2hvd05ld0VkaXRvck9iamVjdHxzaG93bkdQU3xzaG93bkhVRHxzaG93bk1hcHxzaG93blBhZHxzaG93blJhZGlvfHNob3duU2NvcmV0YWJsZXxzaG93blVBVkZlZWR8c2hvd25XYXJyYW50fHNob3duV2F0Y2h8c2hvd1BhZHxzaG93UmFkaW98c2hvd1Njb3JldGFibGV8c2hvd1N1YnRpdGxlc3xzaG93VUFWRmVlZHxzaG93V2FycmFudHxzaG93V2F0Y2h8c2hvd1dheXBvaW50fHNob3dXYXlwb2ludHN8c2lkZXxzaWRlQW1iaWVudExpZmV8c2lkZUNoYXR8c2lkZUVtcHR5fHNpZGVFbmVteXxzaWRlRnJpZW5kbHl8c2lkZUxvZ2ljfHNpZGVSYWRpb3xzaWRlVW5rbm93bnxzaW1wbGVUYXNrc3xzaW11bGF0aW9uRW5hYmxlZHxzaW11bENsb3VkRGVuc2l0eXxzaW11bENsb3VkT2NjbHVzaW9ufHNpbXVsSW5DbG91ZHN8c2ltdWxXZWF0aGVyU3luY3xzaW58c2l6ZXxzaXplT2Z8c2tpbGx8c2tpbGxGaW5hbHxza2lwVGltZXxzbGVlcHxzbGlkZXJQb3NpdGlvbnxzbGlkZXJSYW5nZXxzbGlkZXJTZXRQb3NpdGlvbnxzbGlkZXJTZXRSYW5nZXxzbGlkZXJTZXRTcGVlZHxzbGlkZXJTcGVlZHxzbGluZ0xvYWRBc3Npc3RhbnRTaG93bnxzb2xkaWVyTWFnYXppbmVzfHNvbWVBbW1vfHNvcnR8c291bmRWb2x1bWV8c3BlYWtlcnxzcGVlZHxzcGVlZE1vZGV8c3BsaXRTdHJpbmd8c3FydHxzcXVhZFBhcmFtc3xzdGFuY2V8c3RhcnRMb2FkaW5nU2NyZWVufHN0b3B8c3RvcEVuZ2luZVJURHxzdG9wcGVkfHN0cnxzdW5Pck1vb258c3VwcG9ydEluZm98c3VwcHJlc3NGb3J8c3VyZmFjZUlzV2F0ZXJ8c3VyZmFjZU5vcm1hbHxzdXJmYWNlVHlwZXxzd2ltSW5EZXB0aHxzd2l0Y2hhYmxlVW5pdHN8c3dpdGNoQWN0aW9ufHN3aXRjaENhbWVyYXxzd2l0Y2hHZXN0dXJlfHN3aXRjaExpZ2h0fHN3aXRjaE1vdmV8c3luY2hyb25pemVkT2JqZWN0c3xzeW5jaHJvbml6ZWRUcmlnZ2Vyc3xzeW5jaHJvbml6ZWRXYXlwb2ludHN8c3luY2hyb25pemVPYmplY3RzQWRkfHN5bmNocm9uaXplT2JqZWN0c1JlbW92ZXxzeW5jaHJvbml6ZVRyaWdnZXJ8c3luY2hyb25pemVXYXlwb2ludHxzeXN0ZW1DaGF0fHN5c3RlbU9mVW5pdHN8dGFufHRhcmdldEtub3dsZWRnZXx0YXJnZXRzfHRhcmdldHNBZ2dyZWdhdGV8dGFyZ2V0c1F1ZXJ5fHRhc2tBbHdheXNWaXNpYmxlfHRhc2tDaGlsZHJlbnx0YXNrQ29tcGxldGVkfHRhc2tDdXN0b21EYXRhfHRhc2tEZXNjcmlwdGlvbnx0YXNrRGVzdGluYXRpb258dGFza0hpbnR8dGFza01hcmtlck9mZnNldHx0YXNrTnVsbHx0YXNrUGFyZW50fHRhc2tSZXN1bHR8dGFza1N0YXRlfHRhc2tUeXBlfHRlYW1NZW1iZXJ8dGVhbU1lbWJlck51bGx8dGVhbU5hbWV8dGVhbXN8dGVhbVN3aXRjaHx0ZWFtU3dpdGNoRW5hYmxlZHx0ZWFtVHlwZXx0ZXJtaW5hdGV8dGVycmFpbkludGVyc2VjdHx0ZXJyYWluSW50ZXJzZWN0QVNMfHRlcnJhaW5JbnRlcnNlY3RBdEFTTHx0ZXh0fHRleHRMb2d8dGV4dExvZ0Zvcm1hdHx0Z3x0aW1lfHRpbWVNdWx0aXBsaWVyfHRpdGxlQ3V0fHRpdGxlRmFkZU91dHx0aXRsZU9ianx0aXRsZVJzY3x0aXRsZVRleHR8dG9BcnJheXx0b0ZpeGVkfHRvTG93ZXJ8dG9TdHJpbmd8dG9VcHBlcnx0cmlnZ2VyQWN0aXZhdGVkfHRyaWdnZXJBY3RpdmF0aW9ufHRyaWdnZXJBcmVhfHRyaWdnZXJBdHRhY2hlZFZlaGljbGV8dHJpZ2dlckF0dGFjaE9iamVjdHx0cmlnZ2VyQXR0YWNoVmVoaWNsZXx0cmlnZ2VyRHluYW1pY1NpbXVsYXRpb258dHJpZ2dlclN0YXRlbWVudHN8dHJpZ2dlclRleHR8dHJpZ2dlclRpbWVvdXR8dHJpZ2dlclRpbWVvdXRDdXJyZW50fHRyaWdnZXJUeXBlfHR1cnJldExvY2FsfHR1cnJldE93bmVyfHR1cnJldFVuaXR8dHZBZGR8dHZDbGVhcnx0dkNvbGxhcHNlfHR2Q29sbGFwc2VBbGx8dHZDb3VudHx0dkN1clNlbHx0dkRhdGF8dHZEZWxldGV8dHZFeHBhbmR8dHZFeHBhbmRBbGx8dHZQaWN0dXJlfHR2UGljdHVyZVJpZ2h0fHR2U2V0Q29sb3J8dHZTZXRDdXJTZWx8dHZTZXREYXRhfHR2U2V0UGljdHVyZXx0dlNldFBpY3R1cmVDb2xvcnx0dlNldFBpY3R1cmVDb2xvckRpc2FibGVkfHR2U2V0UGljdHVyZUNvbG9yU2VsZWN0ZWR8dHZTZXRQaWN0dXJlUmlnaHR8dHZTZXRQaWN0dXJlUmlnaHRDb2xvcnx0dlNldFBpY3R1cmVSaWdodENvbG9yRGlzYWJsZWR8dHZTZXRQaWN0dXJlUmlnaHRDb2xvclNlbGVjdGVkfHR2U2V0U2VsZWN0Q29sb3J8dHZTZXRUZXh0fHR2U2V0VG9vbHRpcHx0dlNldFZhbHVlfHR2U29ydHx0dlNvcnRCeVZhbHVlfHR2VGV4dHx0dlRvb2x0aXB8dHZWYWx1ZXx0eXBlfHR5cGVOYW1lfHR5cGVPZnxVQVZDb250cm9sfHVpTmFtZXNwYWNlfHVpU2xlZXB8dW5hc3NpZ25DdXJhdG9yfHVuYXNzaWduSXRlbXx1bmFzc2lnblRlYW18dW5hc3NpZ25WZWhpY2xlfHVuZGVyd2F0ZXJ8dW5pZm9ybXx1bmlmb3JtQ29udGFpbmVyfHVuaWZvcm1JdGVtc3x1bmlmb3JtTWFnYXppbmVzfHVuaXRBZGRvbnN8dW5pdEFpbVBvc2l0aW9ufHVuaXRBaW1Qb3NpdGlvblZpc3VhbHx1bml0QmFja3BhY2t8dW5pdElzVUFWfHVuaXRQb3N8dW5pdFJlYWR5fHVuaXRSZWNvaWxDb2VmZmljaWVudHx1bml0c3x1bml0c0JlbG93SGVpZ2h0fHVubGlua0l0ZW18dW5sb2NrQWNoaWV2ZW1lbnR8dW5yZWdpc3RlclRhc2t8dXBkYXRlRHJhd0ljb258dXBkYXRlTWVudUl0ZW18dXBkYXRlT2JqZWN0VHJlZXx1c2VBSU9wZXJNYXBPYnN0cnVjdGlvblRlc3R8dXNlQUlTdGVlcmluZ0NvbXBvbmVudHx1c2VBdWRpb1RpbWVGb3JNb3Zlc3x1c2VySW5wdXREaXNhYmxlZHx2ZWN0b3JBZGR8dmVjdG9yQ29zfHZlY3RvckNyb3NzUHJvZHVjdHx2ZWN0b3JEaWZmfHZlY3RvckRpcnx2ZWN0b3JEaXJWaXN1YWx8dmVjdG9yRGlzdGFuY2V8dmVjdG9yRGlzdGFuY2VTcXJ8dmVjdG9yRG90UHJvZHVjdHx2ZWN0b3JGcm9tVG98dmVjdG9yTWFnbml0dWRlfHZlY3Rvck1hZ25pdHVkZVNxcnx2ZWN0b3JNb2RlbFRvV29ybGR8dmVjdG9yTW9kZWxUb1dvcmxkVmlzdWFsfHZlY3Rvck11bHRpcGx5fHZlY3Rvck5vcm1hbGl6ZWR8dmVjdG9yVXB8dmVjdG9yVXBWaXN1YWx8dmVjdG9yV29ybGRUb01vZGVsfHZlY3RvcldvcmxkVG9Nb2RlbFZpc3VhbHx2ZWhpY2xlfHZlaGljbGVDYXJnb0VuYWJsZWR8dmVoaWNsZUNoYXR8dmVoaWNsZVJhZGlvfHZlaGljbGVSZWNlaXZlUmVtb3RlVGFyZ2V0c3x2ZWhpY2xlUmVwb3J0T3duUG9zaXRpb258dmVoaWNsZVJlcG9ydFJlbW90ZVRhcmdldHN8dmVoaWNsZXN8dmVoaWNsZVZhck5hbWV8dmVsb2NpdHl8dmVsb2NpdHlNb2RlbFNwYWNlfHZlcmlmeVNpZ25hdHVyZXx2ZXN0fHZlc3RDb250YWluZXJ8dmVzdEl0ZW1zfHZlc3RNYWdhemluZXN8dmlld0Rpc3RhbmNlfHZpc2libGVDb21wYXNzfHZpc2libGVHUFN8dmlzaWJsZU1hcHx2aXNpYmxlUG9zaXRpb258dmlzaWJsZVBvc2l0aW9uQVNMfHZpc2libGVTY29yZXRhYmxlfHZpc2libGVXYXRjaHx3YWl0VW50aWx8d2F2ZXN8d2F5cG9pbnRBdHRhY2hlZE9iamVjdHx3YXlwb2ludEF0dGFjaGVkVmVoaWNsZXx3YXlwb2ludEF0dGFjaE9iamVjdHx3YXlwb2ludEF0dGFjaFZlaGljbGV8d2F5cG9pbnRCZWhhdmlvdXJ8d2F5cG9pbnRDb21iYXRNb2RlfHdheXBvaW50Q29tcGxldGlvblJhZGl1c3x3YXlwb2ludERlc2NyaXB0aW9ufHdheXBvaW50Rm9yY2VCZWhhdmlvdXJ8d2F5cG9pbnRGb3JtYXRpb258d2F5cG9pbnRIb3VzZVBvc2l0aW9ufHdheXBvaW50TG9pdGVyUmFkaXVzfHdheXBvaW50TG9pdGVyVHlwZXx3YXlwb2ludE5hbWV8d2F5cG9pbnRQb3NpdGlvbnx3YXlwb2ludHN8d2F5cG9pbnRTY3JpcHR8d2F5cG9pbnRzRW5hYmxlZFVBVnx3YXlwb2ludFNob3d8d2F5cG9pbnRTcGVlZHx3YXlwb2ludFN0YXRlbWVudHN8d2F5cG9pbnRUaW1lb3V0fHdheXBvaW50VGltZW91dEN1cnJlbnR8d2F5cG9pbnRUeXBlfHdheXBvaW50VmlzaWJsZXx3ZWFwb25BY2Nlc3Nvcmllc3x3ZWFwb25BY2Nlc3Nvcmllc0NhcmdvfHdlYXBvbkNhcmdvfHdlYXBvbkRpcmVjdGlvbnx3ZWFwb25JbmVydGlhfHdlYXBvbkxvd2VyZWR8d2VhcG9uc3x3ZWFwb25zSXRlbXN8d2VhcG9uc0l0ZW1zQ2FyZ298d2VhcG9uU3RhdGV8d2VhcG9uc1R1cnJldHx3ZWlnaHRSVER8d2VzdHxXRlNpZGVUZXh0fHdpbmR8d2luZERpcnx3aW5kUlREfHdpbmRTdHJ8d2luZ3NGb3JjZXNSVER8d29ybGROYW1lfHdvcmxkU2l6ZXx3b3JsZFRvTW9kZWx8d29ybGRUb01vZGVsVmlzdWFsfHdvcmxkVG9TY3JlZW4pXFxiL2ksXG5cdCdudW1iZXInOiAvKD86XFwkfFxcYjB4KVtcXGRhLWZdK1xcYnwoPzpcXEJcXC5cXGQrfFxcYlxcZCsoPzpcXC5cXGQrKT8pKD86ZVsrLV0/XFxkKyk/XFxiL2ksXG5cdCdvcGVyYXRvcic6IC8jI3w+PnwmJnxcXHxcXHx8WyE9PD5dPT98Wy0rKi8lI15dfFxcYig/OmFuZHxtb2R8bm90fG9yKVxcYi9pLFxuXHQnbWFnaWMtdmFyaWFibGUnOiB7XG5cdFx0cGF0dGVybjogL1xcYig/OnRoaXN8dGhpc0xpc3R8dGhpc1RyaWdnZXJ8X2V4Y2VwdGlvbnxfZm5jX3NjcmlwdE5hbWV8X2ZuY19zY3JpcHROYW1lUGFyZW50fF9mb3JFYWNoSW5kZXh8X3RoaXN8X3RoaXNFdmVudEhhbmRsZXJ8X3RoaXNGU018X3RoaXNTY3JpcHR8X3gpXFxiL2ksXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnY29uc3RhbnQnOiAvXFxiRElLKD86X1thLXpcXGRdKykrXFxiL2lcbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCdzcWYnLCAnc3RyaW5nJywge1xuXHQnbWFjcm8nOiB7XG5cdFx0cGF0dGVybjogLyheWyBcXHRdKikjW2Etel0oPzpbXlxcclxcblxcXFxdfFxcXFwoPzpcXHJcXG58W1xcc1xcU10pKSovaW0sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGlyZWN0aXZlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvI1thLXpdK1xcYi9pLFxuXHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHR9LFxuXHRcdFx0J2NvbW1lbnQnOiBQcmlzbS5sYW5ndWFnZXMuc3FmLmNvbW1lbnRcblx0XHR9XG5cdH1cbn0pO1xuXG5kZWxldGUgUHJpc20ubGFuZ3VhZ2VzLnNxZlsnY2xhc3MtbmFtZSddO1xuXG5QcmlzbS5sYW5ndWFnZXMuc3F1aXJyZWwgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0J2NvbW1lbnQnOiBbXG5cdFx0UHJpc20ubGFuZ3VhZ2VzLmNsaWtlWydjb21tZW50J11bMF0sXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXDpdKSg/OlxcL1xcL3wjKS4qLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXFwiJ0BdKSg/OkBcIig/OlteXCJdfFwiXCIpKlwiKD8hXCIpfFwiKD86W15cXFxcXFxyXFxuXCJdfFxcXFwuKSpcIikvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cblx0J2NsYXNzLW5hbWUnOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzpjbGFzc3xlbnVtfGV4dGVuZHN8aW5zdGFuY2VvZilcXHMrKVxcdysoPzpcXC5cXHcrKSovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdH1cblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86X19GSUxFX198X19MSU5FX198YmFzZXxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNsb25lfGNvbnN0fGNvbnN0cnVjdG9yfGNvbnRpbnVlfGRlZmF1bHR8ZGVsZXRlfGVsc2V8ZW51bXxleHRlbmRzfGZvcnxmb3JlYWNofGZ1bmN0aW9ufGlmfGlufGluc3RhbmNlb2Z8bG9jYWx8bnVsbHxyZXN1bWV8cmV0dXJufHN0YXRpY3xzd2l0Y2h8dGhpc3x0aHJvd3x0cnl8dHlwZW9mfHdoaWxlfHlpZWxkKVxcYi8sXG5cblx0J251bWJlcic6IC9cXGIoPzoweFswLTlhLWZBLUZdK3xcXGQrKD86XFwuKD86XFxkK3xbZUVdWystXT9cXGQrKSk/KVxcYi8sXG5cdCdvcGVyYXRvcic6IC9cXCtcXCt8LS18PD0+fDxbLTxdfD4+Pj98JiY/fFxcfFxcfD98Wy0rKi8lIT08Pl09P3xbfl5dfDo6Py8sXG5cdCdwdW5jdHVhdGlvbic6IC9bKCl7fVxcW1xcXSw7Ll0vXG59KTtcblxuUHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgnc3F1aXJyZWwnLCAnc3RyaW5nJywge1xuXHQnY2hhcic6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXCInXSknKD86W15cXFxcJ118XFxcXCg/Olt4dVVdWzAtOWEtZkEtRl17MCw4fXxbXFxzXFxTXSkpJy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3NxdWlycmVsJywgJ29wZXJhdG9yJywge1xuXHQnYXR0cmlidXRlLXB1bmN0dWF0aW9uJzoge1xuXHRcdHBhdHRlcm46IC88XFwvfFxcLz4vLFxuXHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHR9LFxuXHQnbGFtYmRhJzoge1xuXHRcdHBhdHRlcm46IC9AKD89XFwoKS8sXG5cdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0fVxufSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHQvLyBodHRwczovL21jLXN0YW4ub3JnL2RvY3MvMl8yOC9yZWZlcmVuY2UtbWFudWFsL2JuZi1ncmFtbWFycy5odG1sXG5cblx0dmFyIGhpZ2hlck9yZGVyRnVuY3Rpb25zID0gL1xcYig/OmFsZ2VicmFfc29sdmVyfGFsZ2VicmFfc29sdmVyX25ld3RvbnxpbnRlZ3JhdGVfMWR8aW50ZWdyYXRlX29kZXxpbnRlZ3JhdGVfb2RlX2JkZnxpbnRlZ3JhdGVfb2RlX3JrNDV8bWFwX3JlY3R8b2RlXyg/OmFkYW1zfGJkZnxja3JrfHJrNDUpKD86X3RvbCk/fG9kZV9hZGpvaW50X3RvbF9jdGx8cmVkdWNlX3N1bXxyZWR1Y2Vfc3VtX3N0YXRpYylcXGIvO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zdGFuID0ge1xuXHRcdCdjb21tZW50JzogL1xcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC98Iyg/IWluY2x1ZGUpLiovLFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHQvLyBTdHJpbmcgbGl0ZXJhbHMgY2FuIGNvbnRhaW4gc3BhY2VzIGFuZCBhbnkgcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlcnMgZXhjZXB0IGZvciBcIiBhbmQgXFxcblx0XHRcdC8vIGh0dHBzOi8vbWMtc3Rhbi5vcmcvZG9jcy8yXzI0L3JlZmVyZW5jZS1tYW51YWwvcHJpbnQtc3RhdGVtZW50cy1zZWN0aW9uLmh0bWwjc3RyaW5nLWxpdGVyYWxzXG5cdFx0XHRwYXR0ZXJuOiAvXCJbXFx4MjBcXHgyMVxceDIzLVxceDVCXFx4NUQtXFx4N0VdKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC9eKFsgXFx0XSopI2luY2x1ZGVcXGIuKi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAncHJvcGVydHknXG5cdFx0fSxcblxuXHRcdCdmdW5jdGlvbi1hcmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdCcoJyArXG5cdFx0XHRcdGhpZ2hlck9yZGVyRnVuY3Rpb25zLnNvdXJjZSArXG5cdFx0XHRcdC9cXHMqXFwoXFxzKi8uc291cmNlICtcblx0XHRcdFx0JyknICtcblx0XHRcdFx0L1thLXpBLVpdXFx3Ki8uc291cmNlXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnZnVuY3Rpb24nXG5cdFx0fSxcblx0XHQnY29uc3RyYWludCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86aW50fG1hdHJpeHxyZWFsfHJvd192ZWN0b3J8dmVjdG9yKVxccyopPFtePD5dKj4vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKD1cXHMqKVxcUyg/OlxcU3xcXHMrKD8hXFxzKSkqPyg/PVxccyooPzo+JHwsXFxzKlxcdytcXHMqPSkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J3Byb3BlcnR5JzogL1xcYlthLXpdXFx3Kig/PVxccyo9KS9pLFxuXHRcdFx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePHw+JHwsL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGJkYXRhKD89XFxzKlxceyl8XFxiKD86ZnVuY3Rpb25zfGdlbmVyYXRlZHxtb2RlbHxwYXJhbWV0ZXJzfHF1YW50aXRpZXN8dHJhbnNmb3JtZWQpXFxiLyxcblx0XHRcdFx0YWxpYXM6ICdwcm9ncmFtLWJsb2NrJ1xuXHRcdFx0fSxcblx0XHRcdC9cXGIoPzphcnJheXxicmVha3xjaG9sZXNreV9mYWN0b3JfY29ycnxjaG9sZXNreV9mYWN0b3JfY292fGNvbXBsZXh8Y29udGludWV8Y29ycl9tYXRyaXh8Y292X21hdHJpeHxkYXRhfGVsc2V8Zm9yfGlmfGlufGluY3JlbWVudF9sb2dfcHJvYnxpbnR8bWF0cml4fG9yZGVyZWR8cG9zaXRpdmVfb3JkZXJlZHxwcmludHxyZWFsfHJlamVjdHxyZXR1cm58cm93X3ZlY3RvcnxzaW1wbGV4fHRhcmdldHx1bml0X3ZlY3Rvcnx2ZWN0b3J8dm9pZHx3aGlsZSlcXGIvLFxuXHRcdFx0Ly8gdGhlc2UgYXJlIGZ1bmN0aW9ucyB0aGF0IGFyZSBrbm93biB0byB0YWtlIGFub3RoZXIgZnVuY3Rpb24gYXMgdGhlaXIgZmlyc3QgYXJndW1lbnQuXG5cdFx0XHRoaWdoZXJPcmRlckZ1bmN0aW9uc1xuXHRcdF0sXG5cdFx0J2Z1bmN0aW9uJzogL1xcYlthLXpdXFx3Kig/PVxccypcXCgpL2ksXG5cdFx0J251bWJlcic6IC8oPzpcXGJcXGQrKD86X1xcZCspKig/OlxcLig/OlxcZCsoPzpfXFxkKykqKT8pP3xcXEJcXC5cXGQrKD86X1xcZCspKikoPzpFWystXT9cXGQrKD86X1xcZCspKik/aT8oPyFcXHcpL2ksXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXG5cdFx0J29wZXJhdG9yJzogLzwtfFxcLlsqL109P3xcXHxcXHw/fCYmfFshPTw+K1xcLSovXT0/fFsnXiV+PzpdLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpXFxbXFxde30sO10vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnN0YW4uY29uc3RyYWludC5pbnNpZGUuZXhwcmVzc2lvbi5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuc3RhbjtcblxufShQcmlzbSkpO1xuXG4vLyBodHRwczovL3d3dy5zdGF0YS5jb20vbWFudWFscy91LnBkZlxuLy8gaHR0cHM6Ly93d3cuc3RhdGEuY29tL21hbnVhbHMvcC5wZGZcblxuUHJpc20ubGFuZ3VhZ2VzLnN0YXRhID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKVxcKi4qL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58XFxzKVxcL1xcLy4qfFxcL1xcKltcXHNcXFNdKj9cXCpcXC8vLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZy1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cIlteXCJcXHJcXG5dKlwifFtcdTIwMThgJ11cIi4qP1wiW1x1MjAxOWAnXS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J2ludGVycG9sYXRpb24nOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXCRcXHtbXnt9XSpcXH18W1x1MjAxOGAnXVxcd1teXHUyMDE5YCdcXHJcXG5dKltcdTIwMTlgJ10vLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXlxcJFxce3xcXH0kLyxcblx0XHRcdFx0XHQnZXhwcmVzc2lvbic6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRcdFx0aW5zaWRlOiBudWxsIC8vIHNlZSBiZWxvd1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fSxcblxuXHQnbWF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qbWF0YVsgXFx0XSo6KVtcXHNcXFNdKz8oPz1eZW5kXFxiKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbGFuZ3VhZ2UtbWF0YScsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWF0YVxuXHR9LFxuXHQnamF2YSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qamF2YVsgXFx0XSo6KVtcXHNcXFNdKz8oPz1eZW5kXFxiKS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnbGFuZ3VhZ2UtamF2YScsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMuamF2YVxuXHR9LFxuXHQncHl0aG9uJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSpweXRob25bIFxcdF0qOilbXFxzXFxTXSs/KD89XmVuZFxcYikvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2xhbmd1YWdlLXB5dGhvbicsXG5cdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucHl0aG9uXG5cdH0sXG5cblxuXHQnY29tbWFuZCc6IHtcblx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKD86XFwuWyBcXHRdKyk/KD86KD86YmF5ZXN8Ym9vdHN0cmFwfGJ5fGJ5c29ydHxjYXB0dXJlfGNvbGxlY3R8Zm1tfGZwfGZyYW1lfGphY2trbmlmZXxtZnB8bWl8bmVzdHJlZ3xub2lzaWx5fHBlcm11dGV8cXVpZXRseXxyb2xsaW5nfHNpbXVsYXRlfHN0YXRzYnl8c3RlcHdpc2V8c3Z5fHZlcnNpb258eGkpXFxiW146XFxyXFxuXSo6WyBcXHRdKnwoPzpjYXB0dXJlfG5vaXNpbHl8cXVpZXRseXx2ZXJzaW9uKVsgXFx0XSspPylbYS16QS1aXVxcdyovbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCd2YXJpYWJsZSc6IC9cXCRcXHcrfFtcdTIwMThgJ11cXHdbXlx1MjAxOWAnXFxyXFxuXSpbXHUyMDE5YCddLyxcblx0J2tleXdvcmQnOiAvXFxiKD86YmF5ZXN8Ym9vdHN0cmFwfGJ5fGJ5c29ydHxjYXB0dXJlfGNsZWFyfGNvbGxlY3R8Zm1tfGZwfGZyYW1lfGlmfGlufGphY2trbmlmZXxtaVsgXFx0XStlc3RpbWF0ZXxtZnB8bmVzdHJlZ3xub2lzaWx5fG9mfHBlcm11dGV8cXVpZXRseXxyb2xsaW5nfHNpbXVsYXRlfHNvcnR8c3RhdHNieXxzdGVwd2lzZXxzdnl8dmFybGlzdHx2ZXJzaW9ufHhpKVxcYi8sXG5cblxuXHQnYm9vbGVhbic6IC9cXGIoPzpvZmZ8b24pXFxiLyxcblx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/XFxifFxcQlxcLlxcZCsvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxcKCkvaSxcblxuXHQnb3BlcmF0b3InOiAvXFwrXFwrfC0tfCMjP3xbPD4hPX5dPT98WytcXC0qXiZ8L10vLFxuXHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdLDpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnN0YXRhWydzdHJpbmctbGl0ZXJhbCddLmluc2lkZS5pbnRlcnBvbGF0aW9uLmluc2lkZS5leHByZXNzaW9uLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zdGF0YTtcblxuUHJpc20ubGFuZ3VhZ2VzLmllY3N0ID0ge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpfFxcKFxcKltcXHNcXFNdKj8oPzpcXCpcXCl8JCl8XFx7W1xcc1xcU10qPyg/OlxcfXwkKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdH0sXG5cdF0sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwoPyFcXDEpW15cXFxcXFxyXFxuXSkqXFwxLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdC9cXGIoPzpFTkRfKT8oPzpQUk9HUkFNfENPTkZJR1VSQVRJT058SU5URVJGQUNFfEZVTkNUSU9OX0JMT0NLfEZVTkNUSU9OfEFDVElPTnxUUkFOU0lUSU9OfFRZUEV8U1RSVUNUfCg/OklOSVRJQUxfKT9TVEVQfE5BTUVTUEFDRXxMSUJSQVJZfENIQU5ORUx8Rk9MREVSfFJFU09VUkNFfFZBUl8oPzpBQ0NFU1N8Q09ORklHfEVYVEVSTkFMfEdMT0JBTHxJTlBVVHxJTl9PVVR8T1VUUFVUfFRFTVApfFZBUnxNRVRIT0R8UFJPUEVSVFkpXFxiL2ksXG5cdFx0L1xcYig/OkFUfEJZfCg/OkVORF8pPyg/OkNBU0V8Rk9SfElGfFJFUEVBVHxXSElMRSl8Q09OU1RBTlR8Q09OVElOVUV8RE98RUxTRXxFTFNJRnxFWElUfEVYVEVORFN8RlJPTXxHRVR8R09UT3xJTVBMRU1FTlRTfEpNUHxOT05fUkVUQUlOfE9GfFBSSVZBVEV8UFJPVEVDVEVEfFBVQkxJQ3xSRVRBSU58UkVUVVJOfFNFVHxUQVNLfFRIRU58VE98VU5USUx8VVNJTkd8V0lUSHxfX0NBVENIfF9fRU5EVFJZfF9fRklOQUxMWXxfX1RSWSlcXGIvXG5cdF0sXG5cdCdjbGFzcy1uYW1lJzogL1xcYig/OkFOWXxBUlJBWXxCT09MfEJZVEV8VT8oPzpEfEx8Uyk/SU5UfCg/OkR8TCk/V09SRHxEQVRFKD86X0FORF9USU1FKT98RFR8TD9SRUFMfFBPSU5URVJ8U1RSSU5HfFRJTUUoPzpfT0ZfREFZKT98VE9EKVxcYi8sXG5cdCdhZGRyZXNzJzoge1xuXHRcdHBhdHRlcm46IC8lW0lRTV1bWEJXRExdW1xcZC5dKnwlW0lRXVtcXGQuXSovLFxuXHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHR9LFxuXHQnbnVtYmVyJzogL1xcYig/OjE2I1tcXGRhLWZdK3wyI1swMV9dK3wweFtcXGRhLWZdKylcXGJ8XFxiKD86RHxEVHxUfFRPRCkjW1xcZF9zaG1kOl0qfFxcYltBLVpdKiNbXFxkLixfXSp8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPy9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGQUxTRXxOVUxMfFRSVUUpXFxiLyxcblx0J29wZXJhdG9yJzogL1M/Uj86Pz0+P3wmJj98XFwqXFwqP3w8Wz0+XT98Pj0/fFstOl4vKyNdfFxcYig/OkFORHxFUXxFWFBUfEdFfEdUfExFfExUfE1PRHxORXxOT1R8T1J8WE9SKVxcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF0uLDtdLyxcbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0dmFyIHVuaXQgPSB7XG5cdFx0cGF0dGVybjogLyhcXGJcXGQrKSg/OiV8W2Etel0rKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9O1xuXHQvLyAxMjMgLTEyMyAuMTIzIC0uMTIzIDEyLjMgLTEyLjNcblx0dmFyIG51bWJlciA9IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXHcuLV0pLT8oPzpcXGQrKD86XFwuXFxkKyk/fFxcLlxcZCspLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH07XG5cblx0dmFyIGluc2lkZSA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98XFwvXFwvLiopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCd1cmwnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxidXJsXFwoKFtcIiddPykuKj9cXDFcXCkvaSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXCJ8JykoPzooPyFcXDEpW15cXFxcXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXFwxLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2ludGVycG9sYXRpb24nOiBudWxsLCAvLyBTZWUgYmVsb3dcblx0XHQnZnVuYyc6IG51bGwsIC8vIFNlZSBiZWxvd1xuXHRcdCdpbXBvcnRhbnQnOiAvXFxCISg/OmltcG9ydGFudHxvcHRpb25hbClcXGIvaSxcblx0XHQna2V5d29yZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxcXHMrKSg/Oig/OmVsc2V8Zm9yfGlmfHJldHVybnx1bmxlc3MpKD89XFxzfCQpfEBbXFx3LV0rKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnaGV4Y29kZSc6IC8jW1xcZGEtZl17Myw2fS9pLFxuXHRcdCdjb2xvcic6IFtcblx0XHRcdC9cXGIoPzpBbGljZUJsdWV8QW50aXF1ZVdoaXRlfEFxdWF8QXF1YW1hcmluZXxBenVyZXxCZWlnZXxCaXNxdWV8QmxhY2t8QmxhbmNoZWRBbG1vbmR8Qmx1ZXxCbHVlVmlvbGV0fEJyb3dufEJ1cmx5V29vZHxDYWRldEJsdWV8Q2hhcnRyZXVzZXxDaG9jb2xhdGV8Q29yYWx8Q29ybmZsb3dlckJsdWV8Q29ybnNpbGt8Q3JpbXNvbnxDeWFufERhcmtCbHVlfERhcmtDeWFufERhcmtHb2xkZW5Sb2R8RGFya0dyW2FlXXl8RGFya0dyZWVufERhcmtLaGFraXxEYXJrTWFnZW50YXxEYXJrT2xpdmVHcmVlbnxEYXJrT3JhbmdlfERhcmtPcmNoaWR8RGFya1JlZHxEYXJrU2FsbW9ufERhcmtTZWFHcmVlbnxEYXJrU2xhdGVCbHVlfERhcmtTbGF0ZUdyW2FlXXl8RGFya1R1cnF1b2lzZXxEYXJrVmlvbGV0fERlZXBQaW5rfERlZXBTa3lCbHVlfERpbUdyW2FlXXl8RG9kZ2VyQmx1ZXxGaXJlQnJpY2t8RmxvcmFsV2hpdGV8Rm9yZXN0R3JlZW58RnVjaHNpYXxHYWluc2Jvcm98R2hvc3RXaGl0ZXxHb2xkfEdvbGRlblJvZHxHclthZV15fEdyZWVufEdyZWVuWWVsbG93fEhvbmV5RGV3fEhvdFBpbmt8SW5kaWFuUmVkfEluZGlnb3xJdm9yeXxLaGFraXxMYXZlbmRlcnxMYXZlbmRlckJsdXNofExhd25HcmVlbnxMZW1vbkNoaWZmb258TGlnaHRCbHVlfExpZ2h0Q29yYWx8TGlnaHRDeWFufExpZ2h0R29sZGVuUm9kWWVsbG93fExpZ2h0R3JbYWVdeXxMaWdodEdyZWVufExpZ2h0UGlua3xMaWdodFNhbG1vbnxMaWdodFNlYUdyZWVufExpZ2h0U2t5Qmx1ZXxMaWdodFNsYXRlR3JbYWVdeXxMaWdodFN0ZWVsQmx1ZXxMaWdodFllbGxvd3xMaW1lfExpbWVHcmVlbnxMaW5lbnxNYWdlbnRhfE1hcm9vbnxNZWRpdW1BcXVhTWFyaW5lfE1lZGl1bUJsdWV8TWVkaXVtT3JjaGlkfE1lZGl1bVB1cnBsZXxNZWRpdW1TZWFHcmVlbnxNZWRpdW1TbGF0ZUJsdWV8TWVkaXVtU3ByaW5nR3JlZW58TWVkaXVtVHVycXVvaXNlfE1lZGl1bVZpb2xldFJlZHxNaWRuaWdodEJsdWV8TWludENyZWFtfE1pc3R5Um9zZXxNb2NjYXNpbnxOYXZham9XaGl0ZXxOYXZ5fE9sZExhY2V8T2xpdmV8T2xpdmVEcmFifE9yYW5nZXxPcmFuZ2VSZWR8T3JjaGlkfFBhbGVHb2xkZW5Sb2R8UGFsZUdyZWVufFBhbGVUdXJxdW9pc2V8UGFsZVZpb2xldFJlZHxQYXBheWFXaGlwfFBlYWNoUHVmZnxQZXJ1fFBpbmt8UGx1bXxQb3dkZXJCbHVlfFB1cnBsZXxSZWR8Um9zeUJyb3dufFJveWFsQmx1ZXxTYWRkbGVCcm93bnxTYWxtb258U2FuZHlCcm93bnxTZWFHcmVlbnxTZWFTaGVsbHxTaWVubmF8U2lsdmVyfFNreUJsdWV8U2xhdGVCbHVlfFNsYXRlR3JbYWVdeXxTbm93fFNwcmluZ0dyZWVufFN0ZWVsQmx1ZXxUYW58VGVhbHxUaGlzdGxlfFRvbWF0b3xUcmFuc3BhcmVudHxUdXJxdW9pc2V8VmlvbGV0fFdoZWF0fFdoaXRlfFdoaXRlU21va2V8WWVsbG93fFllbGxvd0dyZWVuKVxcYi9pLFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiKD86aHNsfHJnYilcXChcXHMqXFxkezEsM31cXHMqLFxccypcXGR7MSwzfSU/XFxzKixcXHMqXFxkezEsM30lP1xccypcXClcXEJ8XFxiKD86aHNsfHJnYilhXFwoXFxzKlxcZHsxLDN9XFxzKixcXHMqXFxkezEsM30lP1xccyosXFxzKlxcZHsxLDN9JT9cXHMqLFxccyooPzowfDA/XFwuXFxkK3wxKVxccypcXClcXEIvaSxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3VuaXQnOiB1bml0LFxuXHRcdFx0XHRcdCdudW1iZXInOiBudW1iZXIsXG5cdFx0XHRcdFx0J2Z1bmN0aW9uJzogL1tcXHctXSsoPz1cXCgpLyxcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpLF0vXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRdLFxuXHRcdCdlbnRpdHknOiAvXFxcXFtcXGRhLWZdezEsOH0vaSxcblx0XHQndW5pdCc6IHVuaXQsXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdvcGVyYXRvcic6IFtcblx0XHRcdC8vIFdlIHdhbnQgbm9uLXdvcmQgY2hhcnMgYXJvdW5kIFwiLVwiIGJlY2F1c2UgaXQgaXNcblx0XHRcdC8vIGFjY2VwdGVkIGluIHByb3BlcnR5IG5hbWVzLlxuXHRcdFx0L358WyshXFwvJTw+Pz1dPT98Wy06XT18XFwqWyo9XT98XFwuezIsM318JiZ8XFx8XFx8fFxcQi1cXEJ8XFxiKD86YW5kfGlufGlzKD86IGF8IGRlZmluZWR8IG5vdHxudCk/fG5vdHxvcilcXGIvXG5cdFx0XSxcblx0XHQnbnVtYmVyJzogbnVtYmVyLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be30oKVxcW1xcXTs6LF0vXG5cdH07XG5cblx0aW5zaWRlWydpbnRlcnBvbGF0aW9uJ10gPSB7XG5cdFx0cGF0dGVybjogL1xce1teXFxyXFxufTpdK1xcfS8sXG5cdFx0YWxpYXM6ICd2YXJpYWJsZScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGVsaW1pdGVyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXlxce3xcXH0kLyxcblx0XHRcdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0XHRcdH0sXG5cdFx0XHRyZXN0OiBpbnNpZGVcblx0XHR9XG5cdH07XG5cdGluc2lkZVsnZnVuYyddID0ge1xuXHRcdHBhdHRlcm46IC9bXFx3LV0rXFwoW14pXSpcXCkuKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnVuY3Rpb24nOiAvXlteKF0rLyxcblx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuc3R5bHVzID0ge1xuXHRcdCdhdHJ1bGUtZGVjbGFyYXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bIFxcdF0qKUAuKy9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnYXRydWxlJzogL15AW1xcdy1dKy8sXG5cdFx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlLWRlY2xhcmF0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKilbXFx3JC1dK1xccyouPz1bIFxcdF0qKD86XFx7W157fV0qXFx9fFxcUy4qfCQpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCd2YXJpYWJsZSc6IC9eXFxTKy8sXG5cdFx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQnc3RhdGVtZW50Jzoge1xuXHRcdFx0cGF0dGVybjogLyheWyBcXHRdKikoPzplbHNlfGZvcnxpZnxyZXR1cm58dW5sZXNzKVsgXFx0XS4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdrZXl3b3JkJzogL15cXFMrLyxcblx0XHRcdFx0cmVzdDogaW5zaWRlXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEEgcHJvcGVydHkvdmFsdWUgcGFpciBjYW5ub3QgZW5kIHdpdGggYSBjb21tYSBvciBhIGJyYWNlXG5cdFx0Ly8gSXQgY2Fubm90IGhhdmUgaW5kZW50ZWQgY29udGVudCB1bmxlc3MgaXQgZW5kZWQgd2l0aCBhIHNlbWljb2xvblxuXHRcdCdwcm9wZXJ0eS1kZWNsYXJhdGlvbic6IHtcblx0XHRcdHBhdHRlcm46IC8oKD86XnxcXHspKFsgXFx0XSopKSg/OltcXHctXXxcXHtbXn1cXHJcXG5dK1xcfSkrKD86XFxzKjpcXHMqfFsgXFx0XSspKD8hXFxzKVtee1xcclxcbl0qKD86O3xbXntcXHJcXG4sXSQoPyEoPzpcXHI/XFxufFxccikoPzpcXHt8XFwyWyBcXHRdKSkpL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwcm9wZXJ0eSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXlteXFxzOl0rLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzogaW5zaWRlLmludGVycG9sYXRpb25cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHJlc3Q6IGluc2lkZVxuXHRcdFx0fVxuXHRcdH0sXG5cblxuXHRcdC8vIEEgc2VsZWN0b3IgY2FuIGNvbnRhaW4gcGFyZW50aGVzZXMgb25seSBhcyBwYXJ0IG9mIGEgcHNldWRvLWVsZW1lbnRcblx0XHQvLyBJdCBjYW4gc3BhbiBtdWx0aXBsZSBsaW5lcy5cblx0XHQvLyBJdCBtdXN0IGVuZCB3aXRoIGEgY29tbWEgb3IgYW4gYWNjb2xhZGUgb3IgaGF2ZSBpbmRlbnRlZCBjb250ZW50LlxuXHRcdCdzZWxlY3Rvcic6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopKD86KD89XFxTKSg/Oltee31cXHJcXG46KCldfDo6P1tcXHctXSsoPzpcXChbXilcXHJcXG5dKlxcKXwoPyFbXFx3LV0pKXxcXHtbXn1cXHJcXG5dK1xcfSkrKSg/Oig/Olxccj9cXG58XFxyKSg/OlxcMSg/Oig/PVxcUykoPzpbXnt9XFxyXFxuOigpXXw6Oj9bXFx3LV0rKD86XFwoW14pXFxyXFxuXSpcXCl8KD8hW1xcdy1dKSl8XFx7W159XFxyXFxuXStcXH0pKykpKSooPzosJHxcXHt8KD89KD86XFxyP1xcbnxcXHIpKD86XFx7fFxcMVsgXFx0XSkpKS9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IGluc2lkZS5pbnRlcnBvbGF0aW9uLFxuXHRcdFx0XHQnY29tbWVudCc6IGluc2lkZS5jb21tZW50LFxuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW3t9LF0vXG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdmdW5jJzogaW5zaWRlLmZ1bmMsXG5cdFx0J3N0cmluZyc6IGluc2lkZS5zdHJpbmcsXG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkoPzpcXC9cXCpbXFxzXFxTXSo/XFwqXFwvfFxcL1xcLy4qKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnaW50ZXJwb2xhdGlvbic6IGluc2lkZS5pbnRlcnBvbGF0aW9uLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9be30oKVxcW1xcXTs6Ll0vXG5cdH07XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy5zdXBlcmNvbGxpZGVyID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopfFxcL1xcKig/OlteKl18XFwqKD8hXFwvKSkqXFwqXFwvKSpcXCpcXC8vLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKVwiKD86W15cIlxcXFxdfFxcXFxbXFxzXFxTXSkqXCIvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjaGFyJzoge1xuXHRcdHBhdHRlcm46IC9cXCQoPzpbXlxcXFxcXHJcXG5dfFxcXFwuKS8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdzeW1ib2wnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pJyg/OlteJ1xcXFxdfFxcXFxbXFxzXFxTXSkqJ3xcXFxcXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblxuXHQna2V5d29yZCc6IC9cXGIoPzpffGFyZ3xjbGFzc3Zhcnxjb25zdHxuaWx8dmFyfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblxuXHQnbGFiZWwnOiB7XG5cdFx0cGF0dGVybjogL1xcYlthLXpfXVxcdyooPz1cXHMqOikvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0J251bWJlcic6IC9cXGIoPzppbmZ8cGl8MHhbMC05YS1mQS1GXSt8XFxkKyg/OlxcLlxcZCspPyg/OltlRV1bKy1dP1xcZCspPyg/OnBpKT98XFxkK3JbMC05YS16QS1aXSsoPzpcXC5bMC05YS16QS1aXSspP3xcXGQrW3NiXXsxLDR9XFxkKilcXGIvLFxuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXVxcdypcXGIvLFxuXG5cdCdvcGVyYXRvcic6IC9cXC57MiwzfXwjKD8hW1t7XSl8JiZ8WyE9XT09P3xcXCs+PnxcXCt7MSwzfXwtWy0+XXw9Pnw+PnxcXD9cXD98QFxcfD9AfFxcfCg/OkB8WyE9XT0pP1xcfHwhXFw/fDxbIT0+XXxcXCp7MSwyfXw8ezIsM31cXCo/fFstISUmLzw+P0B8PWBdLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpW1xcXS46LDtdfCNbW3tdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnNjbGFuZyA9IFByaXNtLmxhbmd1YWdlcy5zdXBlcmNvbGxpZGVyO1xuXG5QcmlzbS5sYW5ndWFnZXMuc3dpZnQgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdC8vIE5lc3RlZCBjb21tZW50cyBhcmUgc3VwcG9ydGVkIHVwIHRvIDIgbGV2ZWxzXG5cdFx0cGF0dGVybjogLyhefFteXFxcXDpdKSg/OlxcL1xcLy4qfFxcL1xcKig/OlteLypdfFxcLyg/IVxcKil8XFwqKD8hXFwvKXxcXC9cXCooPzpbXipdfFxcKig/IVxcLykpKlxcKlxcLykqXFwqXFwvKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZy1saXRlcmFsJzogW1xuXHRcdC8vIGh0dHBzOi8vZG9jcy5zd2lmdC5vcmcvc3dpZnQtYm9vay9MYW5ndWFnZUd1aWRlL1N0cmluZ3NBbmRDaGFyYWN0ZXJzLmh0bWxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oXnxbXlwiI10pLy5zb3VyY2Vcblx0XHRcdFx0KyAnKD86J1xuXHRcdFx0XHQvLyBzaW5nbGUtbGluZSBzdHJpbmdcblx0XHRcdFx0KyAvXCIoPzpcXFxcKD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8XFxyXFxufFteKF0pfFteXFxcXFxcclxcblwiXSkqXCIvLnNvdXJjZVxuXHRcdFx0XHQrICd8J1xuXHRcdFx0XHQvLyBtdWx0aS1saW5lIHN0cmluZ1xuXHRcdFx0XHQrIC9cIlwiXCIoPzpcXFxcKD86XFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8W14oXSl8W15cXFxcXCJdfFwiKD8hXCJcIikpKlwiXCJcIi8uc291cmNlXG5cdFx0XHRcdCsgJyknXG5cdFx0XHRcdCsgLyg/IVtcIiNdKS8uc291cmNlXG5cdFx0XHQpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKFxcXFxcXCgpKD86W14oKV18XFwoW14oKV0qXFwpKSooPz1cXCkpLyxcblx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdGluc2lkZTogbnVsbCAvLyBzZWUgYmVsb3dcblx0XHRcdFx0fSxcblx0XHRcdFx0J2ludGVycG9sYXRpb24tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL15cXCl8XFxcXFxcKCQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcKD89W1xcclxcbl0pLyxcblx0XHRcdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHRcdC8oXnxbXlwiI10pKCMrKS8uc291cmNlXG5cdFx0XHRcdCsgJyg/Oidcblx0XHRcdFx0Ly8gc2luZ2xlLWxpbmUgc3RyaW5nXG5cdFx0XHRcdCsgL1wiKD86XFxcXCg/OiMrXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCl8XFxyXFxufFteI10pfFteXFxcXFxcclxcbl0pKj9cIi8uc291cmNlXG5cdFx0XHRcdCsgJ3wnXG5cdFx0XHRcdC8vIG11bHRpLWxpbmUgc3RyaW5nXG5cdFx0XHRcdCsgL1wiXCJcIig/OlxcXFwoPzojK1xcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpfFteI10pfFteXFxcXF0pKj9cIlwiXCIvLnNvdXJjZVxuXHRcdFx0XHQrICcpJ1xuXHRcdFx0XHQrICdcXFxcMidcblx0XHRcdCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oXFxcXCMrXFwoKSg/OlteKCldfFxcKFteKCldKlxcKSkqKD89XFwpKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFwpfFxcXFwjK1xcKCQvLFxuXHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdFx0fVxuXHRcdH0sXG5cdF0sXG5cblx0J2RpcmVjdGl2ZSc6IHtcblx0XHQvLyBkaXJlY3RpdmVzIHdpdGggY29uZGl0aW9uc1xuXHRcdHBhdHRlcm46IFJlZ0V4cChcblx0XHRcdC8jLy5zb3VyY2Vcblx0XHRcdCsgJyg/Oidcblx0XHRcdCsgKFxuXHRcdFx0XHQvKD86ZWxzZWlmfGlmKVxcYi8uc291cmNlXG5cdFx0XHRcdCsgJyg/OlsgXFx0XSonXG5cdFx0XHRcdC8vIFRoaXMgcmVnZXggaXMgYSBsaXR0bGUgY29tcGxleC4gSXQncyBlcXVpdmFsZW50IHRvIHRoaXM6XG5cdFx0XHRcdC8vICAgKD86IVsgXFx0XSopPyg/OlxcYlxcdytcXGIoPzpbIFxcdF0qPHJvdW5kPik/fDxyb3VuZD4pKD86WyBcXHRdKig/OiYmfFxcfFxcfCkpP1xuXHRcdFx0XHQvLyB3aGVyZSA8cm91bmQ+IGlzIGEgZ2VuZXJhbCBwYXJlbnRoZXNlcyBleHByZXNzaW9uLlxuXHRcdFx0XHQrIC8oPzohWyBcXHRdKik/KD86XFxiXFx3K1xcYig/OlsgXFx0XSpcXCgoPzpbXigpXXxcXChbXigpXSpcXCkpKlxcKSk/fFxcKCg/OlteKCldfFxcKFteKCldKlxcKSkqXFwpKSg/OlsgXFx0XSooPzomJnxcXHxcXHwpKT8vLnNvdXJjZVxuXHRcdFx0XHQrICcpKydcblx0XHRcdClcblx0XHRcdCsgJ3wnXG5cdFx0XHQrIC8oPzplbHNlfGVuZGlmKVxcYi8uc291cmNlXG5cdFx0XHQrICcpJ1xuXHRcdCksXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eScsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZGlyZWN0aXZlLW5hbWUnOiAvXiNcXHcrLyxcblx0XHRcdCdib29sZWFuJzogL1xcYig/OmZhbHNlfHRydWUpXFxiLyxcblx0XHRcdCdudW1iZXInOiAvXFxiXFxkKyg/OlxcLlxcZCspKlxcYi8sXG5cdFx0XHQnb3BlcmF0b3InOiAvIXwmJnxcXHxcXHx8Wzw+XT0/Lyxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9bKCksXS9cblx0XHR9XG5cdH0sXG5cdCdsaXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC8jKD86Y29sb3JMaXRlcmFsfGNvbHVtbnxkc29oYW5kbGV8ZmlsZSg/OklEfExpdGVyYWx8UGF0aCk/fGZ1bmN0aW9ufGltYWdlTGl0ZXJhbHxsaW5lKVxcYi8sXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J290aGVyLWRpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvI1xcdytcXGIvLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cblx0J2F0dHJpYnV0ZSc6IHtcblx0XHRwYXR0ZXJuOiAvQFxcdysvLFxuXHRcdGFsaWFzOiAnYXRydWxlJ1xuXHR9LFxuXG5cdCdmdW5jdGlvbi1kZWZpbml0aW9uJzoge1xuXHRcdHBhdHRlcm46IC8oXFxiZnVuY1xccyspXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHR9LFxuXHQnbGFiZWwnOiB7XG5cdFx0Ly8gaHR0cHM6Ly9kb2NzLnN3aWZ0Lm9yZy9zd2lmdC1ib29rL0xhbmd1YWdlR3VpZGUvQ29udHJvbEZsb3cuaHRtbCNJRDE0MVxuXHRcdHBhdHRlcm46IC9cXGIoYnJlYWt8Y29udGludWUpXFxzK1xcdyt8XFxiW2EtekEtWl9dXFx3Kig/PVxccyo6XFxzKig/OmZvcnxyZXBlYXR8d2hpbGUpXFxiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0fSxcblxuXHQna2V5d29yZCc6IC9cXGIoPzpBbnl8UHJvdG9jb2x8U2VsZnxUeXBlfGFjdG9yfGFzfGFzc2lnbm1lbnR8YXNzb2NpYXRlZHR5cGV8YXNzb2NpYXRpdml0eXxhc3luY3xhd2FpdHxicmVha3xjYXNlfGNhdGNofGNsYXNzfGNvbnRpbnVlfGNvbnZlbmllbmNlfGRlZmF1bHR8ZGVmZXJ8ZGVpbml0fGRpZFNldHxkb3xkeW5hbWljfGVsc2V8ZW51bXxleHRlbnNpb258ZmFsbHRocm91Z2h8ZmlsZXByaXZhdGV8ZmluYWx8Zm9yfGZ1bmN8Z2V0fGd1YXJkfGhpZ2hlclRoYW58aWZ8aW1wb3J0fGlufGluZGlyZWN0fGluZml4fGluaXR8aW5vdXR8aW50ZXJuYWx8aXN8aXNvbGF0ZWR8bGF6eXxsZWZ0fGxldHxsb3dlclRoYW58bXV0YXRpbmd8bm9uZXxub25pc29sYXRlZHxub25tdXRhdGluZ3xvcGVufG9wZXJhdG9yfG9wdGlvbmFsfG92ZXJyaWRlfHBvc3RmaXh8cHJlY2VkZW5jZWdyb3VwfHByZWZpeHxwcml2YXRlfHByb3RvY29sfHB1YmxpY3xyZXBlYXR8cmVxdWlyZWR8cmV0aHJvd3N8cmV0dXJufHJpZ2h0fHNhZmV8c2VsZnxzZXR8c29tZXxzdGF0aWN8c3RydWN0fHN1YnNjcmlwdHxzdXBlcnxzd2l0Y2h8dGhyb3d8dGhyb3dzfHRyeXx0eXBlYWxpYXN8dW5vd25lZHx1bnNhZmV8dmFyfHdlYWt8d2hlcmV8d2hpbGV8d2lsbFNldClcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCduaWwnOiB7XG5cdFx0cGF0dGVybjogL1xcYm5pbFxcYi8sXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblxuXHQnc2hvcnQtYXJndW1lbnQnOiAvXFwkXFxkK1xcYi8sXG5cdCdvbWl0Jzoge1xuXHRcdHBhdHRlcm46IC9cXGJfXFxiLyxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdudW1iZXInOiAvXFxiKD86W1xcZF9dKyg/OlxcLltcXGRlX10rKT98MHhbYS1mMC05X10rKD86XFwuW2EtZjAtOXBfXSspP3wwYlswMV9dK3wwb1swLTdfXSspXFxiL2ksXG5cblx0Ly8gQSBjbGFzcyBuYW1lIG11c3Qgc3RhcnQgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlciBhbmQgYmUgZWl0aGVyIDEgbGV0dGVyIGxvbmcgb3IgY29udGFpbiBhIGxvd2VyLWNhc2UgbGV0dGVyLlxuXHQnY2xhc3MtbmFtZSc6IC9cXGJbQS1aXSg/OltBLVpfXFxkXSpbYS16XVxcdyopP1xcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKlxcKCkvaSxcblx0J2NvbnN0YW50JzogL1xcYig/OltBLVpfXXsyLH18a1tBLVpdW0EtWmEtel9dKylcXGIvLFxuXG5cdC8vIE9wZXJhdG9ycyBhcmUgZ2VuZXJpYyBpbiBTd2lmdC4gRGV2ZWxvcGVycyBjYW4gZXZlbiBjcmVhdGUgbmV3IG9wZXJhdG9ycyAoZS5nLiArKyspLlxuXHQvLyBodHRwczovL2RvY3Muc3dpZnQub3JnL3N3aWZ0LWJvb2svUmVmZXJlbmNlTWFudWFsL3p6U3VtbWFyeU9mVGhlR3JhbW1hci5odG1sI0lENDgxXG5cdC8vIFRoaXMgcmVnZXggb25seSBzdXBwb3J0cyBBU0NJSSBvcGVyYXRvcnMuXG5cdCdvcGVyYXRvcic6IC9bLSsqLyU9ITw+Jnxefj9dK3xcXC5bLlxcLSsqLyU9ITw+Jnxefj9dKy8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdKCk7LC46XFxcXF0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMuc3dpZnRbJ3N0cmluZy1saXRlcmFsJ10uZm9yRWFjaChmdW5jdGlvbiAocnVsZSkge1xuXHRydWxlLmluc2lkZVsnaW50ZXJwb2xhdGlvbiddLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy5zd2lmdDtcbn0pO1xuXG4vLyBodHRwczovL3d3dy5mcmVlZGVza3RvcC5vcmcvc29mdHdhcmUvc3lzdGVtZC9tYW4vc3lzdGVtZC5zeW50YXguaHRtbFxuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGNvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogL15bOyNdLiovbSxcblx0XHRncmVlZHk6IHRydWVcblx0fTtcblxuXHR2YXIgcXVvdGVzU291cmNlID0gL1wiKD86W15cXHJcXG5cIlxcXFxdfFxcXFwoPzpbXlxccl18XFxyXFxuPykpKlwiKD8hXFxTKS8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5zeXN0ZW1kID0ge1xuXHRcdCdjb21tZW50JzogY29tbWVudCxcblxuXHRcdCdzZWN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogL15cXFtbXlxcblxcclxcW1xcXV0qXFxdKD89WyBcXHRdKiQpL20sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL15cXFt8XFxdJC8sXG5cdFx0XHRcdCdzZWN0aW9uLW5hbWUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0YWxpYXM6ICdzZWxlY3Rvcidcblx0XHRcdFx0fSxcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0J2tleSc6IHtcblx0XHRcdHBhdHRlcm46IC9eW15cXHM9XSsoPz1bIFxcdF0qPSkvbSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdH0sXG5cdFx0J3ZhbHVlJzoge1xuXHRcdFx0Ly8gVGhpcyBwYXR0ZXJuIGlzIHF1aXRlIGNvbXBsZXggYmVjYXVzZSBvZiB0d28gcHJvcGVydGllczpcblx0XHRcdC8vICAxKSBRdW90ZXMgKHN0cmluZ3MpIG11c3QgYmUgcHJlY2VkZWQgYnkgYSBzcGFjZS4gU2luY2Ugd2UgY2FuJ3QgdXNlIGxvb2tiZWhpbmRzLCB3ZSBoYXZlIHRvIFwicmVzb2x2ZVwiXG5cdFx0XHQvLyAgICAgdGhlIGxvb2tiZWhpbmQuIFlvdSB3aWxsIHNlZSB0aGlzIGluIHRoZSBtYWluIGxvb3Agd2hlcmUgc3BhY2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkuXG5cdFx0XHQvLyAgMikgTGluZSBjb250aW51YXRpb25zLlxuXHRcdFx0Ly8gICAgIEFmdGVyIGxpbmUgY29udGludWF0aW9ucywgZW1wdHkgbGluZXMgYW5kIGNvbW1lbnRzIGFyZSBpZ25vcmVkIHNvIHdlIGhhdmUgdG8gY29uc3VtZSB0aGVtLlxuXHRcdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0XHQvKD1bIFxcdF0qKD8hXFxzKSkvLnNvdXJjZSArXG5cdFx0XHRcdC8vIHRoZSB2YWx1ZSBlaXRoZXIgc3RhcnRzIHdpdGggcXVvdGVzIG9yIG5vdFxuXHRcdFx0XHQnKD86JyArIHF1b3Rlc1NvdXJjZSArICd8KD89W15cIlxcclxcbl0pKScgK1xuXHRcdFx0XHQvLyBtYWluIGxvb3Bcblx0XHRcdFx0Jyg/OicgKyAoXG5cdFx0XHRcdFx0L1teXFxzXFxcXF0vLnNvdXJjZSArXG5cdFx0XHRcdFx0Ly8gaGFuZGxlIHNwYWNlcyBzZXBhcmF0ZWx5IGJlY2F1c2Ugb2YgcXVvdGVzXG5cdFx0XHRcdFx0J3wnICsgJ1sgXFx0XSsoPzooPyFbIFxcdFwiXSl8JyArIHF1b3Rlc1NvdXJjZSArICcpJyArXG5cdFx0XHRcdFx0Ly8gbGluZSBjb250aW51YXRpb25cblx0XHRcdFx0XHQnfCcgKyAvXFxcXFtcXHJcXG5dKyg/OlsjO10uKltcXHJcXG5dKykqKD8hWyM7XSkvLnNvdXJjZVxuXHRcdFx0XHQpICtcblx0XHRcdFx0JykqJ1xuXHRcdFx0KSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2F0dHItdmFsdWUnLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdjb21tZW50JzogY29tbWVudCxcblx0XHRcdFx0J3F1b3RlZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhefFxccykvLnNvdXJjZSArIHF1b3Rlc1NvdXJjZSksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9cXFxcJC9tLFxuXG5cdFx0XHRcdCdib29sZWFuJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eKD86ZmFsc2V8bm98b2ZmfG9ufHRydWV8eWVzKSQvLFxuXHRcdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdCdwdW5jdHVhdGlvbic6IC89L1xuXHR9O1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHRmdW5jdGlvbiBjcmVhdGVCbG9jayhwcmVmaXgsIGluc2lkZSwgY29udGVudEFsaWFzKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgnPCMnICsgcHJlZml4ICsgJ1tcXFxcc1xcXFxTXSo/Iz4nKSxcblx0XHRcdGFsaWFzOiAnYmxvY2snLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogUmVnRXhwKCdePCMnICsgcHJlZml4ICsgJ3wjPiQnKSxcblx0XHRcdFx0XHRhbGlhczogJ2ltcG9ydGFudCdcblx0XHRcdFx0fSxcblx0XHRcdFx0J2NvbnRlbnQnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0XHRcdFx0aW5zaWRlOiBpbnNpZGUsXG5cdFx0XHRcdFx0YWxpYXM6IGNvbnRlbnRBbGlhc1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdGZ1bmN0aW9uIGNyZWF0ZVQ0KGluc2lkZUxhbmcpIHtcblx0XHR2YXIgZ3JhbW1hciA9IFByaXNtLmxhbmd1YWdlc1tpbnNpZGVMYW5nXTtcblx0XHR2YXIgY2xhc3NOYW1lID0gJ2xhbmd1YWdlLScgKyBpbnNpZGVMYW5nO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdCdibG9jayc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwjW1xcc1xcU10rPyM+Lyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2RpcmVjdGl2ZSc6IGNyZWF0ZUJsb2NrKCdAJywge1xuXHRcdFx0XHRcdFx0J2F0dHItdmFsdWUnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC89KD86KFwifCcpKD86XFxcXFtcXHNcXFNdfCg/IVxcMSlbXlxcXFxdKSpcXDF8W15cXHMnXCI+PV0rKS8sXG5cdFx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePXxeW1wiJ118W1wiJ10kL1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2tleXdvcmQnOiAvXFxiXFx3Kyg/PVxccykvLFxuXHRcdFx0XHRcdFx0J2F0dHItbmFtZSc6IC9cXGJcXHcrL1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdCdleHByZXNzaW9uJzogY3JlYXRlQmxvY2soJz0nLCBncmFtbWFyLCBjbGFzc05hbWUpLFxuXHRcdFx0XHRcdCdjbGFzcy1mZWF0dXJlJzogY3JlYXRlQmxvY2soJ1xcXFwrJywgZ3JhbW1hciwgY2xhc3NOYW1lKSxcblx0XHRcdFx0XHQnc3RhbmRhcmQnOiBjcmVhdGVCbG9jaygnJywgZ3JhbW1hciwgY2xhc3NOYW1lKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlc1sndDQtdGVtcGxhdGluZyddID0gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnY3JlYXRlVDQnLCB7IHZhbHVlOiBjcmVhdGVUNCB9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudDQgPSBQcmlzbS5sYW5ndWFnZXNbJ3Q0LWNzJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ3Q0LXRlbXBsYXRpbmcnXS5jcmVhdGVUNCgnY3NoYXJwJyk7XG5cblByaXNtLmxhbmd1YWdlcy52Ym5ldCA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2Jhc2ljJywge1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKD86IXxSRU1cXGIpLisvaSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IC9eUkVNL2lcblx0XHRcdH1cblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSknLiovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cIl0pXCIoPzpcIlwifFteXCJdKSpcIig/IVwiKS8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiAvKD86XFxiKD86QURESEFORExFUnxBRERSRVNTT0Z8QUxJQVN8QU5EfEFOREFMU098QVN8QkVFUHxCTE9BRHxCT09MRUFOfEJTQVZFfEJZUkVGfEJZVEV8QllWQUx8Q0FMTCg/OiBBQlNPTFVURSk/fENBU0V8Q0FUQ0h8Q0JPT0x8Q0JZVEV8Q0NIQVJ8Q0RBVEV8Q0RCTHxDREVDfENIQUlOfENIQVJ8Q0hESVJ8Q0lOVHxDTEFTU3xDTEVBUnxDTE5HfENMT1NFfENMU3xDT0JKfENPTXxDT01NT058Q09OU1R8Q09OVElOVUV8Q1NCWVRFfENTSE9SVHxDU05HfENTVFJ8Q1RZUEV8Q1VJTlR8Q1VMTkd8Q1VTSE9SVHxEQVRBfERBVEV8REVDSU1BTHxERUNMQVJFfERFRig/OiBGTnwgU0VHfERCTHxJTlR8TE5HfFNOR3xTVFIpfERFRkFVTFR8REVMRUdBVEV8RElNfERJUkVDVENBU1R8RE98RE9VQkxFfEVMU0V8RUxTRUlGfEVORHxFTlVNfEVOVklST058RVJBU0V8RVJST1J8RVZFTlR8RVhJVHxGQUxTRXxGSUVMRHxGSUxFU3xGSU5BTExZfEZPUig/OiBFQUNIKT98RlJJRU5EfEZVTkNUSU9OfEdFVHxHRVRUWVBFfEdFVFhNTE5BTUVTUEFDRXxHTE9CQUx8R09TVUJ8R09UT3xIQU5ETEVTfElGfElNUExFTUVOVFN8SU1QT1JUU3xJTnxJTkhFUklUU3xJTlBVVHxJTlRFR0VSfElOVEVSRkFDRXxJT0NUTHxJU3xJU05PVHxLRVl8S0lMTHxMRVR8TElCfExJS0V8TElORSBJTlBVVHxMT0NBVEV8TE9DS3xMT05HfExPT1B8TFNFVHxNRXxNS0RJUnxNT0R8TU9EVUxFfE1VU1RJTkhFUklUfE1VU1RPVkVSUklERXxNWUJBU0V8TVlDTEFTU3xOQU1FfE5BTUVTUEFDRXxOQVJST1dJTkd8TkVXfE5FWFR8Tk9UfE5PVEhJTkd8Tk9USU5IRVJJVEFCTEV8Tk9UT1ZFUlJJREFCTEV8T0JKRUNUfE9GfE9GRnxPTig/OiBDT018IEVSUk9SfCBLRVl8IFRJTUVSKT98T1BFTnxPUEVSQVRPUnxPUFRJT04oPzogQkFTRSk/fE9QVElPTkFMfE9SfE9SRUxTRXxPVVR8T1ZFUkxPQURTfE9WRVJSSURBQkxFfE9WRVJSSURFU3xQQVJBTUFSUkFZfFBBUlRJQUx8UE9LRXxQUklWQVRFfFBST1BFUlRZfFBST1RFQ1RFRHxQVUJMSUN8UFVUfFJBSVNFRVZFTlR8UkVBRHxSRUFET05MWXxSRURJTXxSRU18UkVNT1ZFSEFORExFUnxSRVNUT1JFfFJFU1VNRXxSRVRVUk58Uk1ESVJ8UlNFVHxSVU58U0JZVEV8U0VMRUNUKD86IENBU0UpP3xTRVR8U0hBRE9XU3xTSEFSRUR8U0hFTEx8U0hPUlR8U0lOR0xFfFNMRUVQfFNUQVRJQ3xTVEVQfFNUT1B8U1RSSU5HfFNUUlVDVFVSRXxTVUJ8U1dBUHxTWU5DTE9DS3xTWVNURU18VEhFTnxUSFJPV3xUSU1FUnxUT3xUUk9GRnxUUk9OfFRSVUV8VFJZfFRSWUNBU1R8VFlQRXxUWVBFT0Z8VUlOVEVHRVJ8VUxPTkd8VU5MT0NLfFVOVElMfFVTSE9SVHxVU0lOR3xWSUVXIFBSSU5UfFdBSVR8V0VORHxXSEVOfFdISUxFfFdJREVOSU5HfFdJVEh8V0lUSEVWRU5UU3xXUklURXxXUklURU9OTFl8WE9SKXxcXEIoPzojQ09OU1R8I0VMU0V8I0VMU0VJRnwjRU5EfCNJRikpKD86XFwkfFxcYikvaSxcblx0J3B1bmN0dWF0aW9uJzogL1ssOzooKXt9XS9cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXNbJ3Q0LXZiJ10gPSBQcmlzbS5sYW5ndWFnZXNbJ3Q0LXRlbXBsYXRpbmcnXS5jcmVhdGVUNCgndmJuZXQnKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8vIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2MtbnMtYW5jaG9yLXByb3BlcnR5XG5cdC8vIGh0dHBzOi8veWFtbC5vcmcvc3BlYy8xLjIvc3BlYy5odG1sI2MtbnMtYWxpYXMtbm9kZVxuXHR2YXIgYW5jaG9yT3JBbGlhcyA9IC9bKiZdW15cXHNbXFxde30sXSsvO1xuXHQvLyBodHRwczovL3lhbWwub3JnL3NwZWMvMS4yL3NwZWMuaHRtbCNjLW5zLXRhZy1wcm9wZXJ0eVxuXHR2YXIgdGFnID0gLyEoPzo8W1xcd1xcLSUjOy8/OkAmPSskLC4hfionKClbXFxdXSs+fCg/OlthLXpBLVpcXGQtXSohKT9bXFx3XFwtJSM7Lz86QCY9KyQufionKCldKyk/Lztcblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjYy1ucy1wcm9wZXJ0aWVzKG4sYylcblx0dmFyIHByb3BlcnRpZXMgPSAnKD86JyArIHRhZy5zb3VyY2UgKyAnKD86WyBcXHRdKycgKyBhbmNob3JPckFsaWFzLnNvdXJjZSArICcpP3wnXG5cdFx0KyBhbmNob3JPckFsaWFzLnNvdXJjZSArICcoPzpbIFxcdF0rJyArIHRhZy5zb3VyY2UgKyAnKT8pJztcblx0Ly8gaHR0cHM6Ly95YW1sLm9yZy9zcGVjLzEuMi9zcGVjLmh0bWwjbnMtcGxhaW4obixjKVxuXHQvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIHRoYXQgZG9lc24ndCBzdXBwb3J0IFwiI1wiIGFuZCBtdWx0aWxpbmUga2V5c1xuXHQvLyBBbGwgdGhlc2UgbG9uZyBzY2FycnkgY2hhcmFjdGVyIGNsYXNzZXMgYXJlIHNpbXBsaWZpZWQgdmVyc2lvbnMgb2YgWUFNTCdzIGNoYXJhY3RlcnNcblx0dmFyIHBsYWluS2V5ID0gLyg/OlteXFxzXFx4MDAtXFx4MDhcXHgwZS1cXHgxZiFcIiMlJicqLFxcLTo+P0BbXFxdYHt8fVxceDdmLVxceDg0XFx4ODYtXFx4OWZcXHVkODAwLVxcdWRmZmZcXHVmZmZlXFx1ZmZmZl18Wz86LV08UExBSU4+KSg/OlsgXFx0XSooPzooPyFbIzpdKTxQTEFJTj58OjxQTEFJTj4pKSovLnNvdXJjZVxuXHRcdC5yZXBsYWNlKC88UExBSU4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIC9bXlxcc1xceDAwLVxceDA4XFx4MGUtXFx4MWYsW1xcXXt9XFx4N2YtXFx4ODRcXHg4Ni1cXHg5ZlxcdWQ4MDAtXFx1ZGZmZlxcdWZmZmVcXHVmZmZmXS8uc291cmNlOyB9KTtcblx0dmFyIHN0cmluZyA9IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCJ8Jyg/OlteJ1xcXFxcXHJcXG5dfFxcXFwuKSonLy5zb3VyY2U7XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuXHQgKiBAcmV0dXJucyB7UmVnRXhwfVxuXHQgKi9cblx0ZnVuY3Rpb24gY3JlYXRlVmFsdWVQYXR0ZXJuKHZhbHVlLCBmbGFncykge1xuXHRcdGZsYWdzID0gKGZsYWdzIHx8ICcnKS5yZXBsYWNlKC9tL2csICcnKSArICdtJzsgLy8gYWRkIG0gZmxhZ1xuXHRcdHZhciBwYXR0ZXJuID0gLyhbOlxcLSxbe11cXHMqKD86XFxzPDxwcm9wPj5bIFxcdF0rKT8pKD86PDx2YWx1ZT4+KSg/PVsgXFx0XSooPzokfCx8XFxdfFxcfXwoPzpbXFxyXFxuXVxccyopPyMpKS8uc291cmNlXG5cdFx0XHQucmVwbGFjZSgvPDxwcm9wPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcGVydGllczsgfSkucmVwbGFjZSgvPDx2YWx1ZT4+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHZhbHVlOyB9KTtcblx0XHRyZXR1cm4gUmVnRXhwKHBhdHRlcm4sIGZsYWdzKTtcblx0fVxuXG5cdFByaXNtLmxhbmd1YWdlcy55YW1sID0ge1xuXHRcdCdzY2FsYXInOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhbXFwtOl1cXHMqKD86XFxzPDxwcm9wPj5bIFxcdF0rKT9bfD5dKVsgXFx0XSooPzooKD86XFxyP1xcbnxcXHIpWyBcXHRdKylcXFNbXlxcclxcbl0qKD86XFwyW15cXHJcXG5dKykqKS8uc291cmNlXG5cdFx0XHRcdC5yZXBsYWNlKC88PHByb3A+Pi9nLCBmdW5jdGlvbiAoKSB7IHJldHVybiBwcm9wZXJ0aWVzOyB9KSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdzdHJpbmcnXG5cdFx0fSxcblx0XHQnY29tbWVudCc6IC8jLiovLFxuXHRcdCdrZXknOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLygoPzpefFs6XFwtLFt7XFxyXFxuP10pWyBcXHRdKig/Ojw8cHJvcD4+WyBcXHRdKyk/KTw8a2V5Pj4oPz1cXHMqOlxccykvLnNvdXJjZVxuXHRcdFx0XHQucmVwbGFjZSgvPDxwcm9wPj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gcHJvcGVydGllczsgfSlcblx0XHRcdFx0LnJlcGxhY2UoLzw8a2V5Pj4vZywgZnVuY3Rpb24gKCkgeyByZXR1cm4gJyg/OicgKyBwbGFpbktleSArICd8JyArIHN0cmluZyArICcpJzsgfSkpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXRydWxlJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXlsgXFx0XSopJS4rL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdpbXBvcnRhbnQnXG5cdFx0fSxcblx0XHQnZGF0ZXRpbWUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBjcmVhdGVWYWx1ZVBhdHRlcm4oL1xcZHs0fS1cXGRcXGQ/LVxcZFxcZD8oPzpbdFRdfFsgXFx0XSspXFxkXFxkPzpcXGR7Mn06XFxkezJ9KD86XFwuXFxkKik/KD86WyBcXHRdKig/Olp8Wy0rXVxcZFxcZD8oPzo6XFxkezJ9KT8pKT98XFxkezR9LVxcZHsyfS1cXGR7Mn18XFxkXFxkPzpcXGR7Mn0oPzo6XFxkezJ9KD86XFwuXFxkKik/KT8vLnNvdXJjZSksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdudW1iZXInXG5cdFx0fSxcblx0XHQnYm9vbGVhbic6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvZmFsc2V8dHJ1ZS8uc291cmNlLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J251bGwnOiB7XG5cdFx0XHRwYXR0ZXJuOiBjcmVhdGVWYWx1ZVBhdHRlcm4oL251bGx8fi8uc291cmNlLCAnaScpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnaW1wb3J0YW50J1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybihzdHJpbmcpLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHtcblx0XHRcdHBhdHRlcm46IGNyZWF0ZVZhbHVlUGF0dGVybigvWystXT8oPzoweFtcXGRhLWZdK3wwb1swLTddK3woPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/fFxcLmluZnxcXC5uYW4pLy5zb3VyY2UsICdpJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQndGFnJzogdGFnLFxuXHRcdCdpbXBvcnRhbnQnOiBhbmNob3JPckFsaWFzLFxuXHRcdCdwdW5jdHVhdGlvbic6IC8tLS18WzpbXFxde31cXC0sfD4/XXxcXC5cXC5cXC4vXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnltbCA9IFByaXNtLmxhbmd1YWdlcy55YW1sO1xuXG59KFByaXNtKSk7XG5cbi8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Rlc3RfQW55dGhpbmdfUHJvdG9jb2xcblxuUHJpc20ubGFuZ3VhZ2VzLnRhcCA9IHtcblx0J2ZhaWwnOiAvbm90IG9rW14je1xcblxccl0qLyxcblx0J3Bhc3MnOiAvb2tbXiN7XFxuXFxyXSovLFxuXHQncHJhZ21hJzogL3ByYWdtYSBbKy1dW2Etel0rLyxcblx0J2JhaWxvdXQnOiAvYmFpbCBvdXQhLiovaSxcblx0J3ZlcnNpb24nOiAvVEFQIHZlcnNpb24gXFxkKy9pLFxuXHQncGxhbic6IC9cXGJcXGQrXFwuXFwuXFxkKyg/OiArIy4qKT8vLFxuXHQnc3VidGVzdCc6IHtcblx0XHRwYXR0ZXJuOiAvIyBTdWJ0ZXN0KD86OiAuKik/Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fV0vLFxuXHQnZGlyZWN0aXZlJzogLyMuKi8sXG5cdCd5YW1saXNoJzoge1xuXHRcdHBhdHRlcm46IC8oXlsgXFx0XSopLS0tW1xcc1xcU10qP1tcXHJcXG5dWyBcXHRdKlxcLlxcLlxcLiQvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnlhbWwsXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS15YW1sJ1xuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudGNsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjLiovLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpbXlwiXFxcXFxcclxcbl18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXFwkKSg/Ojo6KT8oPzpbYS16QS1aMC05XSs6OikqXFx3Ky8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKFxcJClcXHtbXn1dK1xcfS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qc2V0WyBcXHRdKykoPzo6Oik/KD86W2EtekEtWjAtOV0rOjopKlxcdysvbSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9XG5cdF0sXG5cdCdmdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvKF5bXFx0IF0qcHJvY1sgXFx0XSspXFxTKy9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J2J1aWx0aW4nOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKikoPzpicmVha3xjbGFzc3xjb250aW51ZXxlcnJvcnxldmFsfGV4aXR8Zm9yfGZvcmVhY2h8aWZ8cHJvY3xyZXR1cm58c3dpdGNofHdoaWxlKVxcYi9tLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0L1xcYig/OmVsc2V8ZWxzZWlmKVxcYi9cblx0XSxcblx0J3Njb3BlJzoge1xuXHRcdHBhdHRlcm46IC8oXltcXHQgXSopKD86Z2xvYmFsfHVwdmFyfHZhcmlhYmxlKVxcYi9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdjb25zdGFudCdcblx0fSxcblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyheW1xcdCBdKnxcXFspKD86U2FmZV9CYXNlfFRjbHxhZnRlcnxhcHBlbmR8YXBwbHl8YXJyYXl8YXV0b18oPzpleGVjb2t8aW1wb3J0fGxvYWR8bWtpbmRleHxxdWFsaWZ5fHJlc2V0KXxhdXRvbWtpbmRleF9vbGR8YmdlcnJvcnxiaW5hcnl8Y2F0Y2h8Y2R8Y2hhbnxjbG9ja3xjbG9zZXxjb25jYXR8ZGRlfGRpY3R8ZW5jb2Rpbmd8ZW9mfGV4ZWN8ZXhwcnxmYmxvY2tlZHxmY29uZmlndXJlfGZjb3B5fGZpbGUoPzpldmVudHxuYW1lKT98Zmx1c2h8Z2V0c3xnbG9ifGhpc3Rvcnl8aHR0cHxpbmNyfGluZm98aW50ZXJwfGpvaW58bGFwcGVuZHxsYXNzaWdufGxpbmRleHxsaW5zZXJ0fGxpc3R8bGxlbmd0aHxsb2FkfGxyYW5nZXxscmVwZWF0fGxyZXBsYWNlfGxyZXZlcnNlfGxzZWFyY2h8bHNldHxsc29ydHxtYXRoKD86ZnVuY3xvcCl8bWVtb3J5fG1zZ2NhdHxuYW1lc3BhY2V8b3BlbnxwYWNrYWdlfHBhcnJheXxwaWR8cGtnX21rSW5kZXh8cGxhdGZvcm18cHV0c3xwd2R8cmVfc3ludGF4fHJlYWR8cmVmY2hhbnxyZWdleHB8cmVnaXN0cnl8cmVnc3VifHJlbmFtZXxzY2FufHNlZWt8c2V0fHNvY2tldHxzb3VyY2V8c3BsaXR8c3RyaW5nfHN1YnN0fHRjbCg/Ol9lbmRPZldvcmR8X2ZpbmRMaWJyYXJ5fHN0YXJ0T2YoPzpOZXh0fFByZXZpb3VzKVdvcmR8dGVzdHx2YXJzfHdvcmRCcmVhayg/OkFmdGVyfEJlZm9yZSkpfHRlbGx8dGltZXx0bXx0cmFjZXx1bmtub3dufHVubG9hZHx1bnNldHx1cGRhdGV8dXBsZXZlbHx2d2FpdClcXGIvbSxcblx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdH0sXG5cdCdvcGVyYXRvcic6IC8hPT98XFwqXFwqP3w9PXwmJj98XFx8XFx8P3w8Wz08XT98Pls9Pl0/fFstK35cXC8lP15dfFxcYig/OmVxfGlufG5lfG5pKVxcYi8sXG5cdCdwdW5jdHVhdGlvbic6IC9be30oKVxcW1xcXV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnR0MiA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ2NsaWtlJywge1xuXHRcdCdjb21tZW50JzogLyMuKnxcXFslI1tcXHNcXFNdKj8lXFxdLyxcblx0XHQna2V5d29yZCc6IC9cXGIoPzpCTE9DS3xDQUxMfENBU0V8Q0FUQ0h8Q0xFQVJ8REVCVUd8REVGQVVMVHxFTFNFfEVMU0lGfEVORHxGSUxURVJ8RklOQUx8Rk9SRUFDSHxHRVR8SUZ8SU58SU5DTFVERXxJTlNFUlR8TEFTVHxNQUNST3xNRVRBfE5FWFR8UEVSTHxQUk9DRVNTfFJBV1BFUkx8UkVUVVJOfFNFVHxTVE9QfFNXSVRDSHxUQUdTfFRIUk9XfFRSWXxVTkxFU1N8VVNFfFdISUxFfFdSQVBQRVIpXFxiLyxcblx0XHQncHVuY3R1YXRpb24nOiAvW1tcXF17fSwoKV0vXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3R0MicsICdudW1iZXInLCB7XG5cdFx0J29wZXJhdG9yJzogLz1bPj1dP3whPT98PD0/fD49P3wmJnxcXHxcXHw/fFxcYig/OmFuZHxub3R8b3IpXFxiLyxcblx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiW2Etel1cXHcqKD86XFxzKlxcLlxccyooPzpcXGQrfFxcJD9bYS16XVxcdyopKSpcXGIvaVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndHQyJywgJ2tleXdvcmQnLCB7XG5cdFx0J2RlbGltaXRlcic6IHtcblx0XHRcdHBhdHRlcm46IC9eKD86XFxbJXwlJSktP3wtPyVcXF0kLyxcblx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd0dDInLCAnc3RyaW5nJywge1xuXHRcdCdzaW5nbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC8nW15cXFxcJ10qKD86XFxcXFtcXHNcXFNdW15cXFxcJ10qKSonLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdH0sXG5cdFx0J2RvdWJsZS1xdW90ZWQtc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cXFxcXCJdKig/OlxcXFxbXFxzXFxTXVteXFxcXFwiXSopKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnc3RyaW5nJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQndmFyaWFibGUnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJCg/OlthLXpdXFx3Kig/OlxcLig/OlxcZCt8XFwkP1thLXpdXFx3KikpKikvaVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9KTtcblxuXHQvLyBUaGUgZGlmZmVyZW50IHR5cGVzIG9mIFRUMiBzdHJpbmdzIFwicmVwbGFjZVwiIHRoZSBDLWxpa2Ugc3RhbmRhcmQgc3RyaW5nXG5cdGRlbGV0ZSBQcmlzbS5sYW5ndWFnZXMudHQyLnN0cmluZztcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHR2YXIgdHQyUGF0dGVybiA9IC9cXFslW1xcc1xcU10rPyVcXF0vZztcblx0XHRQcmlzbS5sYW5ndWFnZXNbJ21hcmt1cC10ZW1wbGF0aW5nJ10uYnVpbGRQbGFjZWhvbGRlcnMoZW52LCAndHQyJywgdHQyUGF0dGVybik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnYWZ0ZXItdG9rZW5pemUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3R0MicpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdC8vIFdlIGRvbid0IGFsbG93IGZvciBwaXBlcyBpbnNpZGUgcGFyZW50aGVzZXNcblx0Ly8gdG8gbm90IGJyZWFrIHRhYmxlIHBhdHRlcm4gfCguIGZvbyB8KS4gYmFyIHxcblx0dmFyIG1vZGlmaWVyUmVnZXggPSAvXFwoW158KClcXG5dK1xcKXxcXFtbXlxcXVxcbl0rXFxdfFxce1tefVxcbl0rXFx9Ly5zb3VyY2U7XG5cdC8vIE9wZW5pbmcgYW5kIGNsb3NpbmcgcGFyZW50aGVzZXMgd2hpY2ggYXJlIG5vdCBhIG1vZGlmaWVyXG5cdC8vIFRoaXMgcGF0dGVybiBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBleHBvbmVudGlhbCBiYWNrdHJhY2tpbmdcblx0dmFyIHBhcmVudGhlc2VzUmVnZXggPSAvXFwpfFxcKCg/IVtefCgpXFxuXStcXCkpLy5zb3VyY2U7XG5cdC8qKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG5cdCAqL1xuXHRmdW5jdGlvbiB3aXRoTW9kaWZpZXIoc291cmNlLCBmbGFncykge1xuXHRcdHJldHVybiBSZWdFeHAoXG5cdFx0XHRzb3VyY2Vcblx0XHRcdFx0LnJlcGxhY2UoLzxNT0Q+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcoPzonICsgbW9kaWZpZXJSZWdleCArICcpJzsgfSlcblx0XHRcdFx0LnJlcGxhY2UoLzxQQVI+L2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuICcoPzonICsgcGFyZW50aGVzZXNSZWdleCArICcpJzsgfSksXG5cdFx0XHRmbGFncyB8fCAnJyk7XG5cdH1cblxuXHR2YXIgbW9kaWZpZXJUb2tlbnMgPSB7XG5cdFx0J2Nzcyc6IHtcblx0XHRcdHBhdHRlcm46IC9cXHtbXnt9XStcXH0vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHJlc3Q6IFByaXNtLmxhbmd1YWdlcy5jc3Ncblx0XHRcdH1cblx0XHR9LFxuXHRcdCdjbGFzcy1pZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFwoKVteKCldKyg/PVxcKSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0XHR9LFxuXHRcdCdsYW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXFspW15cXFtcXF1dKyg/PVxcXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci12YWx1ZSdcblx0XHR9LFxuXHRcdC8vIEFueXRoaW5nIGVsc2UgaXMgcHVuY3R1YXRpb24gKHRoZSBmaXJzdCBwYXR0ZXJuIGlzIGZvciByb3cvY29sIHNwYW5zIGluc2lkZSB0YWJsZXMpXG5cdFx0J3B1bmN0dWF0aW9uJzogL1tcXFxcXFwvXVxcZCt8XFxTL1xuXHR9O1xuXG5cblx0dmFyIHRleHRpbGUgPSBQcmlzbS5sYW5ndWFnZXMudGV4dGlsZSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0XHQncGhyYXNlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFxccnxcXG4pXFxTW1xcc1xcU10qPyg/PSR8XFxyP1xcblxccj9cXG58XFxyXFxyKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cblx0XHRcdFx0Ly8gaDEuIEhlYWRlciAxXG5cdFx0XHRcdCdibG9jay10YWcnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC9eW2Etel1cXHcqKD86PE1PRD58PFBBUj58Wzw+PV0pKlxcLi8uc291cmNlKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlthLXpdXFx3KikoPzo8TU9EPnw8UEFSPnxbPD49XSkrKD89XFwuKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd0YWcnOiAvXlthLXpdXFx3Ki8sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuJC9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gIyBMaXN0IGl0ZW1cblx0XHRcdFx0Ly8gKiBMaXN0IGl0ZW1cblx0XHRcdFx0J2xpc3QnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC9eWyojXSs8TU9EPipcXHMrXFxTLiovLnNvdXJjZSwgJ20nKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXlsqI10rKTxNT0Q+Ky8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eWyojXSsvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIHwgY2VsbCB8IGNlbGwgfCBjZWxsIHxcblx0XHRcdFx0J3RhYmxlJzoge1xuXHRcdFx0XHRcdC8vIE1vZGlmaWVycyBjYW4gYmUgYXBwbGllZCB0byB0aGUgcm93OiB7Y29sb3I6cmVkfS58MXwyfDN8XG5cdFx0XHRcdFx0Ly8gb3IgdGhlIGNlbGw6IHx7Y29sb3I6cmVkfS4xfDJ8M3xcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoL14oPzooPzo8TU9EPnw8UEFSPnxbPD49Xn5dKStcXC5cXHMqKT8oPzpcXHwoPzooPzo8TU9EPnw8UEFSPnxbPD49Xn5fXXxbXFxcXC9dXFxkKykrXFwufCg/ISg/OjxNT0Q+fDxQQVI+fFs8Pj1efl9dfFtcXFxcL11cXGQrKStcXC4pKVtefF0qKStcXHwvLnNvdXJjZSwgJ20nKSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0Ly8gTW9kaWZpZXJzIGZvciByb3dzIGFmdGVyIHRoZSBmaXJzdCBvbmUgYXJlXG5cdFx0XHRcdFx0XHRcdC8vIHByZWNlZGVkIGJ5IGEgcGlwZSBhbmQgYSBsaW5lIGZlZWRcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXnxcXHwoPzpcXHI/XFxufFxccik/KSg/OjxNT0Q+fDxQQVI+fFs8Pj1efl9dfFtcXFxcL11cXGQrKSsoPz1cXC4pLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRpbnNpZGU6IG1vZGlmaWVyVG9rZW5zXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcfHxeXFwuL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQnaW5saW5lJzoge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF58W15hLXpBLVpcXGRdKShcXCpcXCp8X198XFw/XFw/fFsqXyVAK1xcLV5+XSk8TU9EPiouKz9cXDIoPyFbYS16QS1aXFxkXSkvLnNvdXJjZSksXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdC8vIE5vdGU6IHN1cGVyc2NyaXB0cyBhbmQgc3Vic2NyaXB0cyBhcmUgbm90IGhhbmRsZWQgc3BlY2lmaWNhbGx5XG5cblx0XHRcdFx0XHRcdC8vICpib2xkKiwgKipib2xkKipcblx0XHRcdFx0XHRcdCdib2xkJzoge1xuXHRcdFx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXN1cGVyLWxpbmVhci1iYWNrdHJhY2tpbmdcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXihcXCpcXCo/KTxNT0Q+KikuKz8oPz1cXDIpLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyBfaXRhbGljXywgX19pdGFsaWNfX1xuXHRcdFx0XHRcdFx0J2l0YWxpYyc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF4oX18/KTxNT0Q+KikuKz8oPz1cXDIpLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyA/P2NpdGU/P1xuXHRcdFx0XHRcdFx0J2NpdGUnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheXFw/XFw/PE1PRD4qKS4rPyg/PVxcP1xcPykvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0Ly8gQGNvZGVAXG5cdFx0XHRcdFx0XHQnY29kZSc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5APE1PRD4qKS4rPyg/PUApLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlhczogJ2tleXdvcmQnXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQvLyAraW5zZXJ0ZWQrXG5cdFx0XHRcdFx0XHQnaW5zZXJ0ZWQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheXFwrPE1PRD4qKS4rPyg/PVxcKykvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cblx0XHRcdFx0XHRcdC8vIC1kZWxldGVkLVxuXHRcdFx0XHRcdFx0J2RlbGV0ZWQnOiB7XG5cdFx0XHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyheLTxNT0Q+KikuKz8oPz0tKS8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0Ly8gJXNwYW4lXG5cdFx0XHRcdFx0XHQnc3Bhbic6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF4lPE1PRD4qKS4rPyg/PSUpLy5zb3VyY2UpLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHQnbW9kaWZpZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cXCpcXCp8X198XFw/XFw/fFsqXyVAK1xcLV5+XSk8TU9EPisvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbW9kaWZpZXJUb2tlbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWypfJT9AK1xcLV5+XSsvXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFthbGlhc11odHRwOi8vZXhhbXBsZS5jb21cblx0XHRcdFx0J2xpbmstcmVmJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eXFxbW15cXF1dK1xcXVxcUyskL20sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnc3RyaW5nJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5cXFspW15cXF1dKyg/PVxcXSkvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3VybCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyheXFxdKVxcUyskLyxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdXS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gXCJ0ZXh0XCI6aHR0cDovL2V4YW1wbGUuY29tXG5cdFx0XHRcdC8vIFwidGV4dFwiOmxpbmstcmVmXG5cdFx0XHRcdCdsaW5rJzoge1xuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWdleHAvbm8tc3VwZXItbGluZWFyLWJhY2t0cmFja2luZ1xuXHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvXCI8TU9EPipbXlwiXStcIjouKz8oPz1bXlxcdy9dPyg/Olxcc3wkKSkvLnNvdXJjZSksXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGV4dCc6IHtcblx0XHRcdFx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1zdXBlci1saW5lYXItYmFja3RyYWNraW5nXG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cIjxNT0Q+KilbXlwiXSsoPz1cIikvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnbW9kaWZpZXInOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IHdpdGhNb2RpZmllcigvKF5cIik8TU9EPisvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGluc2lkZTogbW9kaWZpZXJUb2tlbnNcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQndXJsJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvKDopLisvLFxuXHRcdFx0XHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1tcIjpdL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyAhaW1hZ2UuanBnIVxuXHRcdFx0XHQvLyAhaW1hZ2UuanBnKFRpdGxlKSE6aHR0cDovL2V4YW1wbGUuY29tXG5cdFx0XHRcdCdpbWFnZSc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiB3aXRoTW9kaWZpZXIoLyEoPzo8TU9EPnw8UEFSPnxbPD49XSkqKD8hWzw+PV0pW14hXFxzKCldKyg/OlxcKFteKV0rXFwpKT8hKD86Oi4rPyg/PVteXFx3L10/KD86XFxzfCQpKSk/Ly5zb3VyY2UpLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3NvdXJjZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXiEoPzo8TU9EPnw8UEFSPnxbPD49XSkqKSg/IVs8Pj1dKVteIVxccygpXSsoPzpcXChbXildK1xcKSk/KD89ISkvLnNvdXJjZSksXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAndXJsJ1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCdtb2RpZmllcic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogd2l0aE1vZGlmaWVyKC8oXiEpKD86PE1PRD58PFBBUj58Wzw+PV0pKy8uc291cmNlKSxcblx0XHRcdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRcdFx0aW5zaWRlOiBtb2RpZmllclRva2Vuc1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdCd1cmwnOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8oOikuKy8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWyE6XS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gRm9vdG5vdGVbMV1cblx0XHRcdFx0J2Zvb3Rub3RlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXGJcXFtcXGQrXFxdLyxcblx0XHRcdFx0XHRhbGlhczogJ2NvbW1lbnQnLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcW3xcXF0vXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENTUyhDYXNjYWRpbmcgU3R5bGUgU2hlZXQpXG5cdFx0XHRcdCdhY3JvbnltJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXGJbQS1aXFxkXStcXChbXildK1xcKS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnY29tbWVudCc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyhcXCgpW14oKV0rKD89XFwpKS8sXG5cdFx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpXS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUHJpc20oQylcblx0XHRcdFx0J21hcmsnOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcYlxcKCg/OkN8UnxUTSlcXCkvLFxuXHRcdFx0XHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvWygpXS9cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0pO1xuXG5cdHZhciBwaHJhc2VJbnNpZGUgPSB0ZXh0aWxlWydwaHJhc2UnXS5pbnNpZGU7XG5cdHZhciBuZXN0ZWRQYXR0ZXJucyA9IHtcblx0XHQnaW5saW5lJzogcGhyYXNlSW5zaWRlWydpbmxpbmUnXSxcblx0XHQnbGluayc6IHBocmFzZUluc2lkZVsnbGluayddLFxuXHRcdCdpbWFnZSc6IHBocmFzZUluc2lkZVsnaW1hZ2UnXSxcblx0XHQnZm9vdG5vdGUnOiBwaHJhc2VJbnNpZGVbJ2Zvb3Rub3RlJ10sXG5cdFx0J2Fjcm9ueW0nOiBwaHJhc2VJbnNpZGVbJ2Fjcm9ueW0nXSxcblx0XHQnbWFyayc6IHBocmFzZUluc2lkZVsnbWFyayddXG5cdH07XG5cblx0Ly8gT25seSBhbGxvdyBhbHBoYS1udW1lcmljIEhUTUwgdGFncywgbm90IFhNTCB0YWdzXG5cdHRleHRpbGUudGFnLnBhdHRlcm4gPSAvPFxcLz8oPyFcXGQpW2EtejAtOV0rKD86XFxzK1teXFxzPlxcLz1dKyg/Oj0oPzooXCJ8JykoPzpcXFxcW1xcc1xcU118KD8hXFwxKVteXFxcXF0pKlxcMXxbXlxccydcIj49XSspKT8pKlxccypcXC8/Pi9pO1xuXG5cdC8vIEFsbG93IHNvbWUgbmVzdGluZ1xuXHR2YXIgcGhyYXNlSW5saW5lSW5zaWRlID0gcGhyYXNlSW5zaWRlWydpbmxpbmUnXS5pbnNpZGU7XG5cdHBocmFzZUlubGluZUluc2lkZVsnYm9sZCddLmluc2lkZSA9IG5lc3RlZFBhdHRlcm5zO1xuXHRwaHJhc2VJbmxpbmVJbnNpZGVbJ2l0YWxpYyddLmluc2lkZSA9IG5lc3RlZFBhdHRlcm5zO1xuXHRwaHJhc2VJbmxpbmVJbnNpZGVbJ2luc2VydGVkJ10uaW5zaWRlID0gbmVzdGVkUGF0dGVybnM7XG5cdHBocmFzZUlubGluZUluc2lkZVsnZGVsZXRlZCddLmluc2lkZSA9IG5lc3RlZFBhdHRlcm5zO1xuXHRwaHJhc2VJbmxpbmVJbnNpZGVbJ3NwYW4nXS5pbnNpZGUgPSBuZXN0ZWRQYXR0ZXJucztcblxuXHQvLyBBbGxvdyBzb21lIHN0eWxlcyBpbnNpZGUgdGFibGUgY2VsbHNcblx0dmFyIHBocmFzZVRhYmxlSW5zaWRlID0gcGhyYXNlSW5zaWRlWyd0YWJsZSddLmluc2lkZTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ2lubGluZSddID0gbmVzdGVkUGF0dGVybnNbJ2lubGluZSddO1xuXHRwaHJhc2VUYWJsZUluc2lkZVsnbGluayddID0gbmVzdGVkUGF0dGVybnNbJ2xpbmsnXTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ2ltYWdlJ10gPSBuZXN0ZWRQYXR0ZXJuc1snaW1hZ2UnXTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ2Zvb3Rub3RlJ10gPSBuZXN0ZWRQYXR0ZXJuc1snZm9vdG5vdGUnXTtcblx0cGhyYXNlVGFibGVJbnNpZGVbJ2Fjcm9ueW0nXSA9IG5lc3RlZFBhdHRlcm5zWydhY3JvbnltJ107XG5cdHBocmFzZVRhYmxlSW5zaWRlWydtYXJrJ10gPSBuZXN0ZWRQYXR0ZXJuc1snbWFyayddO1xuXG59KFByaXNtKSk7XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblxuXHR2YXIga2V5ID0gLyg/OltcXHctXSt8J1teJ1xcblxccl0qJ3xcIig/OlxcXFwufFteXFxcXFwiXFxyXFxuXSkqXCIpLy5zb3VyY2U7XG5cblx0LyoqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBwYXR0ZXJuXG5cdCAqL1xuXHRmdW5jdGlvbiBpbnNlcnRLZXkocGF0dGVybikge1xuXHRcdHJldHVybiBwYXR0ZXJuLnJlcGxhY2UoL19fL2csIGZ1bmN0aW9uICgpIHsgcmV0dXJuIGtleTsgfSk7XG5cdH1cblxuXHRQcmlzbS5sYW5ndWFnZXMudG9tbCA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQndGFibGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiBSZWdFeHAoaW5zZXJ0S2V5KC8oXltcXHQgXSpcXFtcXHMqKD86XFxbXFxzKik/KV9fKD86XFxzKlxcLlxccypfXykqKD89XFxzKlxcXSkvLnNvdXJjZSksICdtJyksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHRcdH0sXG5cdFx0J2tleSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cChpbnNlcnRLZXkoLyheW1xcdCBdKnxbeyxdXFxzKilfXyg/OlxccypcXC5cXHMqX18pKig/PVxccyo9KS8uc291cmNlKSwgJ20nKSxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHRcdH0sXG5cdFx0J3N0cmluZyc6IHtcblx0XHRcdHBhdHRlcm46IC9cIlwiXCIoPzpcXFxcW1xcc1xcU118W15cXFxcXSkqP1wiXCJcInwnJydbXFxzXFxTXSo/JycnfCdbXidcXG5cXHJdKid8XCIoPzpcXFxcLnxbXlxcXFxcIlxcclxcbl0pKlwiLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH0sXG5cdFx0J2RhdGUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIE9mZnNldCBEYXRlLVRpbWUsIExvY2FsIERhdGUtVGltZSwgTG9jYWwgRGF0ZVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFxkezR9LVxcZHsyfS1cXGR7Mn0oPzpbVFxcc11cXGR7Mn06XFxkezJ9OlxcZHsyfSg/OlxcLlxcZCspPyg/Olp8WystXVxcZHsyfTpcXGR7Mn0pPyk/XFxiL2ksXG5cdFx0XHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gTG9jYWwgVGltZVxuXHRcdFx0XHRwYXR0ZXJuOiAvXFxiXFxkezJ9OlxcZHsyfTpcXGR7Mn0oPzpcXC5cXGQrKT9cXGIvLFxuXHRcdFx0XHRhbGlhczogJ251bWJlcidcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdudW1iZXInOiAvKD86XFxiMCg/OnhbXFxkYS16QS1aXSsoPzpfW1xcZGEtekEtWl0rKSp8b1swLTddKyg/Ol9bMC03XSspKnxiWzEwXSsoPzpfWzEwXSspKikpXFxifFstK10/XFxiXFxkKyg/Ol9cXGQrKSooPzpcXC5cXGQrKD86X1xcZCspKik/KD86W2VFXVsrLV0/XFxkKyg/Ol9cXGQrKSopP1xcYnxbLStdP1xcYig/OmluZnxuYW4pXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1suLD1bXFxde31dL1xuXHR9O1xufShQcmlzbSkpO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnRyZW1vciA9IHtcblx0XHQnY29tbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSg/OlxcL1xcKltcXHNcXFNdKj9cXCpcXC98KD86LS18XFwvXFwvfCMpLiopLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdpbnRlcnBvbGF0ZWQtc3RyaW5nJzogbnVsbCwgLy8gc2VlIGJlbG93XG5cdFx0J2V4dHJhY3Rvcic6IHtcblx0XHRcdHBhdHRlcm46IC9cXGJbYS16X11cXHcqXFx8KD86W15cXHJcXG5cXFxcfF18XFxcXCg/OlxcclxcbnxbXFxzXFxTXSkpKlxcfC9pLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdyZWdleCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKF5yZSlcXHxbXFxzXFxTXSsvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0J2Z1bmN0aW9uJzogL15cXHcrLyxcblx0XHRcdFx0J3ZhbHVlJzogL1xcfFtcXHNcXFNdKy9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdpZGVudGlmaWVyJzoge1xuXHRcdFx0cGF0dGVybjogL2BbXmBdKmAvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblxuXHRcdCdmdW5jdGlvbic6IC9cXGJbYS16X11cXHcqKD89XFxzKig/Ojo6XFxzKjx8XFwoKSlcXGIvLFxuXG5cdFx0J2tleXdvcmQnOiAvXFxiKD86YXJnc3xhc3xieXxjYXNlfGNvbmZpZ3xjb25uZWN0fGNvbm5lY3Rvcnxjb25zdHxjb3B5fGNyZWF0ZXxkZWZhdWx0fGRlZmluZXxkZXBsb3l8ZHJvcHxlYWNofGVtaXR8ZW5kfGVyYXNlfGV2ZW50fGZsb3d8Zm58Zm9yfGZyb218Z3JvdXB8aGF2aW5nfGluc2VydHxpbnRvfGludHJpbnNpY3xsZXR8bGlua3N8bWF0Y2h8bWVyZ2V8bW9kfG1vdmV8b2Z8b3BlcmF0b3J8cGF0Y2h8cGlwZWxpbmV8cmVjdXJ8c2NyaXB0fHNlbGVjdHxzZXR8c2xpZGluZ3xzdGF0ZXxzdHJlYW18dG98dHVtYmxpbmd8dXBkYXRlfHVzZXx3aGVufHdoZXJlfHdpbmRvd3x3aXRoKVxcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8bnVsbHx0cnVlKVxcYi9pLFxuXG5cdFx0J251bWJlcic6IC9cXGIoPzowYlswMV9dKnwweFswLTlhLWZBLUZfXSp8XFxkW1xcZF9dKig/OlxcLlxcZFtcXGRfXSopPyg/OltFZV1bKy1dP1tcXGRfXSspPylcXGIvLFxuXG5cdFx0J3BhdHRlcm4tcHVuY3R1YXRpb24nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvJSg/PVsoe1tdKS8sXG5cdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdH0sXG5cdFx0J29wZXJhdG9yJzogL1stKypcXC8lfiFeXT0/fD1bPT5dP3wmWyY9XT98XFx8W3w9XT98PDw/PT98Pj4/Pj89P3woPzphYnNlbnR8YW5kfG5vdHxvcnxwcmVzZW50fHhvcilcXGIvLFxuXHRcdCdwdW5jdHVhdGlvbic6IC86OnxbO1xcW1xcXSgpXFx7XFx9LC46XS8sXG5cdH07XG5cblx0dmFyIGludGVycG9sYXRpb25QYXR0ZXJuID0gLyNcXHsoPzpbXlwie31dfFxce1tee31dKlxcfXxcIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXCIpKlxcfS8uc291cmNlO1xuXG5cdFByaXNtLmxhbmd1YWdlcy50cmVtb3JbJ2ludGVycG9sYXRlZC1zdHJpbmcnXSA9IHtcblx0XHRwYXR0ZXJuOiBSZWdFeHAoXG5cdFx0XHQvKF58W15cXFxcXSkvLnNvdXJjZSArXG5cdFx0XHQnKD86JyArXG5cdFx0XHQnXCJcIlwiKD86JyArIC9bXlwiXFxcXCNdfFxcXFxbXFxzXFxTXXxcIig/IVwiXCIpfCMoPyFcXHspLy5zb3VyY2UgKyAnfCcgKyBpbnRlcnBvbGF0aW9uUGF0dGVybiArICcpKlwiXCJcIicgK1xuXHRcdFx0J3wnICtcblx0XHRcdCdcIig/OicgKyAvW15cIlxcXFxcXHJcXG4jXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKXwjKD8hXFx7KS8uc291cmNlICsgJ3wnICsgaW50ZXJwb2xhdGlvblBhdHRlcm4gKyAnKSpcIicgK1xuXHRcdFx0JyknXG5cdFx0KSxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoaW50ZXJwb2xhdGlvblBhdHRlcm4pLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXiNcXHt8XFx9JC8sXG5cdFx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnRyZW1vclxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHJveSA9IFByaXNtLmxhbmd1YWdlc1sndHJlbW9yJ107XG5cdFByaXNtLmxhbmd1YWdlcy50cmlja2xlID0gUHJpc20ubGFuZ3VhZ2VzWyd0cmVtb3InXTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudHdpZyA9IHtcblx0J2NvbW1lbnQnOiAvXlxceyNbXFxzXFxTXSo/I1xcfSQvLFxuXG5cdCd0YWctbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKF5cXHslLT9cXHMqKVxcdysvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnZGVsaW1pdGVyJzoge1xuXHRcdHBhdHRlcm46IC9eXFx7W3slXS0/fC0/WyV9XVxcfSQvLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXlsnXCJdfFsnXCJdJC9cblx0XHR9XG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmV2ZW58aWZ8b2RkKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG51bGx8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rfCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdWy0rXT9cXGQrKT8vLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHMpKD86YW5kfGItYW5kfGItb3J8Yi14b3J8ZW5kcyB3aXRofGlufGlzfG1hdGNoZXN8bm90fG9yfHNhbWUgYXN8c3RhcnRzIHdpdGgpKD89XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvWz08Pl09P3whPXxcXCpcXCo/fFxcL1xcLz98XFw/Oj98Wy0rfiV8XS9cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXXt9Oi4sXS9cbn07XG5cblByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLXRva2VuaXplJywgZnVuY3Rpb24gKGVudikge1xuXHRpZiAoZW52Lmxhbmd1YWdlICE9PSAndHdpZycpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHR2YXIgcGF0dGVybiA9IC9cXHsoPzojW1xcc1xcU10qPyN8JVtcXHNcXFNdKj8lfFxce1tcXHNcXFNdKj9cXH0pXFx9L2c7XG5cdFByaXNtLmxhbmd1YWdlc1snbWFya3VwLXRlbXBsYXRpbmcnXS5idWlsZFBsYWNlaG9sZGVycyhlbnYsICd0d2lnJywgcGF0dGVybik7XG59KTtcblxuUHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0UHJpc20ubGFuZ3VhZ2VzWydtYXJrdXAtdGVtcGxhdGluZyddLnRva2VuaXplUGxhY2Vob2xkZXJzKGVudiwgJ3R3aWcnKTtcbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGtleXdvcmRzID0gL1xcYig/OkFDVHxBQ1RJRlNVQnxDQVJSQVl8Q0FTRXxDTEVBUkdJRnxDT0F8Q09BX0lOVHxDT05TVEFOVFN8Q09OVEVOVHxDVVJ8RURJVFBBTkVMfEVGRkVDVHxFWFR8RklMRXxGTFVJRFRFTVBMQVRFfEZPUk18RlJBTUV8RlJBTUVTRVR8R0lGQlVJTERFUnxHTUVOVXxHTUVOVV9GT0xET1VUfEdNRU5VX0xBWUVSU3xHUHxITUVOVXxIUlVMRVJ8SFRNTHxJRU5WfElGU1VCfElNQUdFfElNR01FTlV8SU1HTUVOVUlURU18SU1HVEVYVHxJTUdfUkVTT1VSQ0V8SU5DTFVERV9UWVBPU0NSSVBUfEpTTUVOVXxKU01FTlVJVEVNfExMTHxMT0FEX1JFR0lTVEVSfE5PfFBBR0V8UkVDT1JEU3xSRVNUT1JFX1JFR0lTVEVSfFRFTVBMQVRFfFRFWFR8VE1FTlV8VE1FTlVJVEVNfFRNRU5VX0xBWUVSU3xVU0VSfFVTRVJfSU5UfF9HSUZCVUlMREVSfGdsb2JhbHxnbG9iYWxTdHJpbmd8Z2xvYmFsVmFyKVxcYi87XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnR5cG9zY3JpcHQgPSB7XG5cdFx0J2NvbW1lbnQnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG11bHRpbGluZSBjb21tZW50cyAvKiAqL1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSlcXC9cXCpbXFxzXFxTXSo/KD86XFwqXFwvfCQpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gZG91YmxlLXNsYXNoIGNvbW1lbnRzIC0gaWdub3JlZCB3aGVuIGJhY2tzbGFzaGVzIG9yIGNvbG9uIGlzIGZvdW5kIGluIGZyb250XG5cdFx0XHRcdC8vIGFsc28gaWdub3JlZCB3aGVuZXZlciBkaXJlY3RseSBhZnRlciBhbiBlcXVhbC1zaWduLCBiZWNhdXNlIGl0IHdvdWxkIHByb2JhYmx5IGJlIGFuIHVybCB3aXRob3V0IHByb3RvY29sXG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6PSBcXHRdfCg/Ol58W149IFxcdF0pWyBcXHRdKylcXC9cXC8uKi8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaGFzaCBjb21tZW50cyAtIGlnbm9yZWQgd2hlbiBsZWFkaW5nIHF1b3RlIGlzIGZvdW5kIGZvciBoZXggY29sb3JzIGluIHN0cmluZ3Ncblx0XHRcdFx0cGF0dGVybjogLyhefFteXCInXSkjLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdmdW5jdGlvbic6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gb2xkIGluY2x1ZGUgc3R5bGVcblx0XHRcdFx0cGF0dGVybjogLzxJTkNMVURFX1RZUE9TQ1JJUFQ6XFxzKnNvdXJjZVxccyo9XFxzKig/OlwiW15cIlxcclxcbl0qXCJ8J1teJ1xcclxcbl0qJylcXHMqPi8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXFxyXFxuXSpcInwnW14nXFxyXFxuXSonLyxcblx0XHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0XHQna2V5d29yZCc6IGtleXdvcmRzLFxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0XHRcdFx0cGF0dGVybjogL0lOQ0xVREVfVFlQT1NDUklQVC8sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdC8vIG5ldyBpbmNsdWRlIHN0eWxlXG5cdFx0XHRcdHBhdHRlcm46IC9AaW1wb3J0XFxzKig/OlwiW15cIlxcclxcbl0qXCJ8J1teJ1xcclxcbl0qJykvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnc3RyaW5nJzogL1wiW15cIlxcclxcbl0qXCJ8J1teJ1xcclxcbl0qJy8sXG5cdFx0XHRcdH0sXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL14oW149XSo9WzwgXT8pKD86KD8hXFxdXFxuKS4pKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9cXHtcXCQuKlxcfS8sIC8vIGNvbnN0YW50cyBpbmNsdWRlXG5cdFx0XHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0XHRcdCdudW1iZXInOiAvXlxcZCskLyxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1ssfDpdLyxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoga2V5d29yZHMsXG5cdFx0J251bWJlcic6IHtcblx0XHRcdC8vIHNwZWNpYWwgaGlnaGxpZ2h0aW5nIGZvciBpbmRleGVzIG9mIGFycmF5cyBpbiB0YWdzXG5cdFx0XHRwYXR0ZXJuOiAvXFxiXFxkK1xccypbLns9XS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J29wZXJhdG9yJzogL1suez1dLyxcblx0XHRcdH1cblx0XHR9LFxuXHRcdCd0YWcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwuP1stXFx3XFxcXF0rXFwuPy8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1xcLi8sXG5cdFx0XHR9XG5cdFx0fSxcblx0XHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOnxdLyxcblx0XHQnb3BlcmF0b3InOiAvWzw+XT0/fFshPV09Pz0/fC0tP3xcXCtcXCs/fCYmP3xcXHxcXHw/fFs/Ki9+XiVdLyxcblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMudHNjb25maWcgPSBQcmlzbS5sYW5ndWFnZXMudHlwb3NjcmlwdDtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMudW5yZWFsc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnY2F0ZWdvcnknOiB7XG5cdFx0cGF0dGVybjogLyhcXGIoPzooPzphdXRvZXhwYW5kfGhpZGV8c2hvdyljYXRlZ29yaWVzfHZhcilcXHMqXFwoKVteKCldKyg/PVxcKSkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdtZXRhZGF0YSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcd1xccyopPFxccypcXHcrXFxzKj1bXjw+fD1cXHJcXG5dKyg/OlxcfFxccypcXHcrXFxzKj1bXjw+fD1cXHJcXG5dKykqPi8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHJvcGVydHknOiAvXFxiXFx3Kyg/PVxccyo9KS8sXG5cdFx0XHQnb3BlcmF0b3InOiAvPS8sXG5cdFx0XHQncHVuY3R1YXRpb24nOiAvWzw+fF0vXG5cdFx0fVxuXHR9LFxuXHQnbWFjcm8nOiB7XG5cdFx0cGF0dGVybjogL2BcXHcrLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGVudW18ZXh0ZW5kc3xpbnRlcmZhY2V8c3RhdGUoPzpcXChcXCkpP3xzdHJ1Y3R8d2l0aGluKVxccyspXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGFjdG9yfGFycmF5fGF1dG98YXV0b2V4cGFuZGNhdGVnb3JpZXN8Ym9vbHxicmVha3xieXRlfGNhc2V8Y2xhc3N8Y2xhc3Nncm91cHxjbGllbnR8Y29lcmNlfGNvbGxhcHNlY2F0ZWdvcmllc3xjb25maWd8Y29uc3R8Y29udGludWV8ZGVmYXVsdHxkZWZhdWx0cHJvcGVydGllc3xkZWxlZ2F0ZXxkZXBlbmRzb258ZGVwcmVjYXRlZHxkb3xkb250Y29sbGFwc2VjYXRlZ29yaWVzfGVkaXRjb25zdHxlZGl0aW5saW5lbmV3fGVsc2V8ZW51bXxldmVudHxleGVjfGV4cG9ydHxleHRlbmRzfGZpbmFsfGZsb2F0fGZvcnxmb3JjZXNjcmlwdG9yZGVyfGZvcmVhY2h8ZnVuY3Rpb258Z290b3xndWlkfGhpZGVjYXRlZ29yaWVzfGhpZGVkcm9wZG93bnxpZnxpZ25vcmVzfGltcGxlbWVudHN8aW5oZXJpdHN8aW5wdXR8aW50fGludGVyZmFjZXxpdGVyYXRvcnxsYXRlbnR8bG9jYWx8bWF0ZXJpYWx8bmFtZXxuYXRpdmV8bmF0aXZlcmVwbGljYXRpb258bm9leHBvcnR8bm9udHJhbnNpZW50fG5vdGVkaXRpbmxpbmVuZXd8bm90cGxhY2VhYmxlfG9wZXJhdG9yfG9wdGlvbmFsfG91dHxwYXdufHBlcm9iamVjdGNvbmZpZ3xwZXJvYmplY3Rsb2NhbGl6ZWR8cGxhY2VhYmxlfHBvc3RvcGVyYXRvcnxwcmVvcGVyYXRvcnxwcml2YXRlfHByb3RlY3RlZHxyZWxpYWJsZXxyZXBsaWNhdGlvbnxyZXR1cm58c2VydmVyfHNob3djYXRlZ29yaWVzfHNpbXVsYXRlZHxzaW5ndWxhcnxzdGF0ZXxzdGF0aWN8c3RyaW5nfHN0cnVjdHxzdHJ1Y3RkZWZhdWx0fHN0cnVjdGRlZmF1bHRwcm9wZXJ0aWVzfHN3aXRjaHx0ZXh0dXJlfHRyYW5zaWVudHx0cmF2ZWx8dW5yZWxpYWJsZXx1bnRpbHx2YXJ8dmVjdG9yfHdoaWxlfHdpdGhpbilcXGIvLFxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypcXCgpL2ksXG5cblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZGEtZl0rXFxifCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzplWystXT9cXGQrKT8vaSxcblx0Ly8gaHR0cHM6Ly9kb2NzLnVucmVhbGVuZ2luZS5jb20vdWRrL1RocmVlL1VucmVhbFNjcmlwdEV4cHJlc3Npb25zLmh0bWxcblx0J29wZXJhdG9yJzogLz4+fDw8fC0tfFxcK1xcK3xcXCpcXCp8Wy0rKi9+IT08PiRAXT0/fCYmP3xcXHxcXHw/fFxcXlxcXj98Wz86JV18XFxiKD86Q2xvY2t3aXNlRnJvbXxDcm9zc3xEb3QpXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKVtcXF17fTssLl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudWMgPSBQcmlzbS5sYW5ndWFnZXMudXNjcmlwdCA9IFByaXNtLmxhbmd1YWdlcy51bnJlYWxzY3JpcHQ7XG5cblByaXNtLmxhbmd1YWdlcy51b3Jhem9yID0ge1xuXHQnY29tbWVudC1oYXNoJzoge1xuXHRcdHBhdHRlcm46IC8jLiovLFxuXHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdjb21tZW50LXNsYXNoJzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKi8sXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvKFwifCcpKD86XFxcXC58KD8hXFwxKVteXFxcXFxcclxcbl0pKlxcMS8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncHVuY3R1YXRpb24nOiAvXlsnXCJdfFsnXCJdJC9cblx0XHR9LFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQnc291cmNlLWxheWVycyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YXJtc3xiYWNrcGFja3xibHVlfGJyYWNlbGV0fGNhbmNlbHxjbGVhcnxjbG9ha3xjcmltaW5hbHxlYXJyaW5nc3xlbmVteXxmYWNpYWxoYWlyfGZyaWVuZHxmcmllbmRseXxnbG92ZXN8Z3JheXxncmV5fGdyb3VuZHxoYWlyfGhlYWR8aW5uZXJsZWdzfGlubmVydG9yc298aW5ub2NlbnR8bGVmdGhhbmR8bWlkZGxldG9yc298bXVyZGVyZXJ8bmVja3xub25mcmllbmRseXxvbmVoYW5kZWRzZWNvbmRhcnl8b3V0ZXJsZWdzfG91dGVydG9yc298cGFudHN8cmVkfHJpZ2h0aGFuZHxyaW5nfHNlbGZ8c2hpcnR8c2hvZXN8dGFsaXNtYW58d2Fpc3QpXFxiL2ksXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3NvdXJjZS1jb21tYW5kcyc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiKD86YWxsaWFuY2V8YXR0YWNrfGNhc3R8Y2xlYXJhbGx8Y2xlYXJpZ25vcmV8Y2xlYXJqb3VybmFsfGNsZWFybGlzdHxjbGVhcnN5c21zZ3xjcmVhdGVsaXN0fGNyZWF0ZXRpbWVyfGRjbGlja3xkY2xpY2t0eXBlfGRjbGlja3ZhcnxkcmVzc3xkcmVzc2NvbmZpZ3xkcm9wfGRyb3ByZWxsb2N8ZW1vdGV8Z2V0bGFiZWx8Z3VpbGR8Z3VtcGNsb3NlfGd1bXByZXNwb25zZXxob3RrZXl8aWdub3JlfGxhc3R0YXJnZXR8bGlmdHxsaWZ0dHlwZXxtZW51fG1lbnVyZXNwb25zZXxtc2d8b3JnfG9yZ2FuaXplfG9yZ2FuaXplcnxvdmVyaGVhZHxwYXVzZXxwb3BsaXN0fHBvdGlvbnxwcm9tcHRyZXNwb25zZXxwdXNobGlzdHxyZW1vdmVsaXN0fHJlbW92ZXRpbWVyfHJlbmFtZXxyZXN0b2NrfHNheXxzY2F2fHNjYXZlbmdlcnxzY3JpcHR8c2V0YWJpbGl0eXxzZXRsYXN0dGFyZ2V0fHNldHNraWxsfHNldHRpbWVyfHNldHZhcnxzeXNtc2d8dGFyZ2V0fHRhcmdldGxvY3x0YXJnZXRyZWxsb2N8dGFyZ2V0dHlwZXx1bmRyZXNzfHVuaWdub3JlfHVuc2V0dmFyfHVzZW9iamVjdHx1c2VvbmNlfHVzZXNraWxsfHVzZXR5cGV8dmlydHVlfHdhaXR8d2FpdGZvcmd1bXB8d2FpdGZvcm1lbnV8d2FpdGZvcnByb21wdHx3YWl0Zm9yc3RhdHx3YWl0Zm9yc3lzbXNnfHdhaXRmb3J0YXJnZXR8d2Fsa3x3ZnN5c21zZ3x3ZnR8d2hpc3Blcnx5ZWxsKVxcYi8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3RhZy1uYW1lJzoge1xuXHRcdHBhdHRlcm46IC8oXlxceyUtP1xccyopXFx3Ky8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2tleXdvcmQnXG5cdH0sXG5cdCdkZWxpbWl0ZXInOiB7XG5cdFx0cGF0dGVybjogL15cXHtbeyVdLT98LT9bJX1dXFx9JC8sXG5cdFx0YWxpYXM6ICdwdW5jdHVhdGlvbidcblx0fSxcblx0J2Z1bmN0aW9uJzogL1xcYig/OmF0bGlzdHxjbG9zZXxjbG9zZXN0fGNvdW50fGNvdW50ZXJ8Y291bnR0eXBlfGRlYWR8ZGV4fGRpZmZoaXRzfGRpZmZtYW5hfGRpZmZzdGFtfGRpZmZ3ZWlnaHR8ZmluZHxmaW5kYnVmZnxmaW5kZGVidWZmfGZpbmRsYXllcnxmaW5kdHlwZXxmaW5kdHlwZWxpc3R8Zm9sbG93ZXJzfGd1bXBleGlzdHN8aGlkZGVufGhpdHN8aHB8aHVlfGh1bWFufGh1bWFub2lkfGluZ3VtcHxpbmxpc3R8aW5zeXNtZXNzYWdlfGluc3lzbXNnfGludHxpbnZ1bHxsaGFuZGVtcHR5fGxpc3R8bGlzdGV4aXN0c3xtYW5hfG1heGhpdHN8bWF4aHB8bWF4bWFuYXxtYXhzdGFtfG1heHdlaWdodHxtb25zdGVyfG1vdW50ZWR8bmFtZXxuZXh0fG5vdG98cGFyYWx5emVkfHBvaXNvbmVkfHBvc2l0aW9ufHByZXZ8cHJldmlvdXN8cXVldWVkfHJhbmR8cmFuZG9tfHJoYW5kZW1wdHl8c2tpbGx8c3RhbXxzdHJ8dGFyZ2V0ZXhpc3RzfHRpbWVyfHRpbWVyZXhpc3RzfHZhcmV4aXN0fHdhcm1vZGV8d2VpZ2h0KVxcYi8sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFuZHxhc3xicmVha3xjb250aW51ZXxlbHNlfGVsc2VpZnxlbmRmb3J8ZW5kaWZ8ZW5kd2hpbGV8Zm9yfGlmfGxvb3B8bm90fG9yfHJlcGxheXxzdG9wfHdoaWxlKVxcYi8sXG5cdCdib29sZWFuJzogL1xcYig/OmZhbHNlfG51bGx8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYjB4W1xcZEEtRmEtZl0rfCg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpbRWVdWy0rXT9cXGQrKT8vLFxuXHQnb3BlcmF0b3InOiBbXG5cdFx0e1xuXHRcdFx0cGF0dGVybjogLyhcXHMpKD86YW5kfGItYW5kfGItb3J8Yi14b3J8ZW5kcyB3aXRofGlufGlzfG1hdGNoZXN8bm90fG9yfHNhbWUgYXN8c3RhcnRzIHdpdGgpKD89XFxzKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQvWz08Pl09P3whPXxcXCpcXCo/fFxcL1xcLz98XFw/Oj98Wy0rfiV8XS9cblx0XSxcblx0J3B1bmN0dWF0aW9uJzogL1soKVxcW1xcXXt9Oi4sXS9cbn07XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcblxuUHJpc20ubGFuZ3VhZ2VzLnVyaSA9IHtcblx0J3NjaGVtZSc6IHtcblx0XHRwYXR0ZXJuOiAvXlthLXpdW2EtejAtOSsuLV0qOi9pbSxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnc2NoZW1lLWRlbGltaXRlcic6IC86JC9cblx0XHR9XG5cdH0sXG5cdCdmcmFnbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvI1tcXHdcXC0ufiEkJicoKSorLDs9JTpALz9dKi8sXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnZnJhZ21lbnQtZGVsaW1pdGVyJzogL14jL1xuXHRcdH1cblx0fSxcblx0J3F1ZXJ5Jzoge1xuXHRcdHBhdHRlcm46IC9cXD9bXFx3XFwtLn4hJCYnKCkqKyw7PSU6QC8/XSovLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3F1ZXJ5LWRlbGltaXRlcic6IHtcblx0XHRcdFx0cGF0dGVybjogL15cXD8vLFxuXHRcdFx0XHRncmVlZHk6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQncGFpci1kZWxpbWl0ZXInOiAvWyY7XS8sXG5cdFx0XHQncGFpcic6IHtcblx0XHRcdFx0cGF0dGVybjogL15bXj1dW1xcc1xcU10qLyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J2tleSc6IC9eW149XSsvLFxuXHRcdFx0XHRcdCd2YWx1ZSc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC8oXj0pW1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdhdXRob3JpdHknOiB7XG5cdFx0cGF0dGVybjogUmVnRXhwKFxuXHRcdFx0L15cXC9cXC8vLnNvdXJjZVxuXHRcdFx0Ly8gWyB1c2VyaW5mbyBcIkBcIiBdXG5cdFx0XHQrIC8oPzpbXFx3XFwtLn4hJCYnKCkqKyw7PSU6XSpAKT8vLnNvdXJjZVxuXHRcdFx0Ly8gaG9zdFxuXHRcdFx0KyAoXG5cdFx0XHRcdCcoPzonXG5cdFx0XHRcdC8vIElQLWxpdGVyYWxcblx0XHRcdFx0KyAvXFxbKD86WzAtOWEtZkEtRjouXXsyLDQ4fXx2WzAtOWEtZkEtRl0rXFwuW1xcd1xcLS5+ISQmJygpKissOz1dKylcXF0vLnNvdXJjZVxuXHRcdFx0XHQrICd8J1xuXHRcdFx0XHQvLyBJUHY0YWRkcmVzcyBvciByZWdpc3RlcmVkIG5hbWVcblx0XHRcdFx0KyAvW1xcd1xcLS5+ISQmJygpKissOz0lXSovLnNvdXJjZVxuXHRcdFx0XHQrICcpJ1xuXHRcdFx0KVxuXHRcdFx0Ly8gWyBcIjpcIiBwb3J0IF1cblx0XHRcdCsgLyg/OjpcXGQqKT8vLnNvdXJjZSxcblx0XHRcdCdtJ1xuXHRcdCksXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYXV0aG9yaXR5LWRlbGltaXRlcic6IC9eXFwvXFwvLyxcblx0XHRcdCd1c2VyLWluZm8tc2VnbWVudCc6IHtcblx0XHRcdFx0cGF0dGVybjogL15bXFx3XFwtLn4hJCYnKCkqKyw7PSU6XSpALyxcblx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0J3VzZXItaW5mby1kZWxpbWl0ZXInOiAvQCQvLFxuXHRcdFx0XHRcdCd1c2VyLWluZm8nOiAvXltcXHdcXC0ufiEkJicoKSorLDs9JTpdKy9cblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdwb3J0LXNlZ21lbnQnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC86XFxkKiQvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQncG9ydC1kZWxpbWl0ZXInOiAvXjovLFxuXHRcdFx0XHRcdCdwb3J0JzogL15cXGQrL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0J2hvc3QnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9bXFxzXFxTXSsvLFxuXHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHQnaXAtbGl0ZXJhbCc6IHtcblx0XHRcdFx0XHRcdHBhdHRlcm46IC9eXFxbW1xcc1xcU10rXFxdJC8sXG5cdFx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdFx0J2lwLWxpdGVyYWwtZGVsaW1pdGVyJzogL15cXFt8XFxdJC8sXG5cdFx0XHRcdFx0XHRcdCdpcHYtZnV0dXJlJzogL152W1xcc1xcU10rLyxcblx0XHRcdFx0XHRcdFx0J2lwdjYtYWRkcmVzcyc6IC9eW1xcc1xcU10rL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0J2lwdjQtYWRkcmVzcyc6IC9eKD86KD86WzAzLTldXFxkP3xbMTJdXFxkezAsMn0pXFwuKXszfSg/OlswMy05XVxcZD98WzEyXVxcZHswLDJ9KSQvXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdCdwYXRoJzoge1xuXHRcdHBhdHRlcm46IC9eW1xcd1xcLS5+ISQmJygpKissOz0lOkAvXSsvbSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwYXRoLXNlcGFyYXRvcic6IC9cXC8vXG5cdFx0fVxuXHR9XG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudXJsID0gUHJpc20ubGFuZ3VhZ2VzLnVyaTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXHR2YXIgaW50ZXJwb2xhdGlvbkV4cHIgPSB7XG5cdFx0cGF0dGVybjogL1tcXHNcXFNdKy8sXG5cdFx0aW5zaWRlOiBudWxsXG5cdH07XG5cblx0UHJpc20ubGFuZ3VhZ2VzLnYgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdjbGlrZScsIHtcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL3I/KFtcIiddKSg/OlxcXFwoPzpcXHJcXG58W1xcc1xcU10pfCg/IVxcMSlbXlxcXFxcXHJcXG5dKSpcXDEvLFxuXHRcdFx0YWxpYXM6ICdxdW90ZWQtc3RyaW5nJyxcblx0XHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQnaW50ZXJwb2xhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvKCg/Ol58W15cXFxcXSkoPzpcXFxcezJ9KSopXFwkKD86XFx7W157fV0qXFx9fFxcdysoPzpcXC5cXHcrKD86XFwoW15cXChcXCldKlxcKSk/fFxcW1teXFxbXFxdXStcXF0pKikvLFxuXHRcdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi12YXJpYWJsZSc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHdbXFxzXFxTXSokLyxcblx0XHRcdFx0XHRcdFx0YWxpYXM6ICd2YXJpYWJsZSdcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHQnaW50ZXJwb2xhdGlvbi1wdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogL15cXCRcXHt8XFx9JC8sXG5cdFx0XHRcdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J2ludGVycG9sYXRpb24tZXhwcmVzc2lvbic6IGludGVycG9sYXRpb25FeHByXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblx0XHQnY2xhc3MtbmFtZSc6IHtcblx0XHRcdHBhdHRlcm46IC8oXFxiKD86ZW51bXxpbnRlcmZhY2V8c3RydWN0fHR5cGUpXFxzKykoPzpDXFwuKT9cXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzogLyg/OlxcYig/Ol9fZ2xvYmFsfGFzfGFzbXxhc3NlcnR8YXRvbWljfGJyZWFrfGNoYW58Y29uc3R8Y29udGludWV8ZGVmZXJ8ZWxzZXxlbWJlZHxlbnVtfGZufGZvcnxnbyg/OnRvKT98aWZ8aW1wb3J0fGlufGludGVyZmFjZXxpc3xsb2NrfG1hdGNofG1vZHVsZXxtdXR8bm9uZXxvcnxwdWJ8cmV0dXJufHJsb2NrfHNlbGVjdHxzaGFyZWR8c2l6ZW9mfHN0YXRpY3xzdHJ1Y3R8dHlwZSg/Om9mKT98dW5pb258dW5zYWZlKXxcXCQoPzplbHNlfGZvcnxpZil8Iyg/OmZsYWd8aW5jbHVkZSkpXFxiLyxcblx0XHQnbnVtYmVyJzogL1xcYig/OjB4W2EtZlxcZF0rKD86X1thLWZcXGRdKykqfDBiWzAxXSsoPzpfWzAxXSspKnwwb1swLTddKyg/Ol9bMC03XSspKnxcXGQrKD86X1xcZCspKig/OlxcLlxcZCsoPzpfXFxkKykqKT8pXFxiL2ksXG5cdFx0J29wZXJhdG9yJzogL358XFw/fFsqXFwvJV4hPV09P3xcXCtbPStdP3wtWz0tXT98XFx8Wz18XT98Jig/Oj18JnxcXF49Pyk/fD4oPzo+PT98PSk/fDwoPzo8PT98PXwtKT98Oj18XFwuXFwuXFwuPy8sXG5cdFx0J2J1aWx0aW4nOiAvXFxiKD86YW55KD86X2Zsb2F0fF9pbnQpP3xib29sfGJ5dGUoPzpwdHIpP3xjaGFycHRyfGYoPzozMnw2NCl8aSg/Ojh8MTZ8NjR8MTI4fG50KXxydW5lfHNpemVfdHxzdHJpbmd8dSg/OjE2fDMyfDY0fDEyOCl8dm9pZHB0cilcXGIvXG5cdH0pO1xuXG5cdGludGVycG9sYXRpb25FeHByLmluc2lkZSA9IFByaXNtLmxhbmd1YWdlcy52O1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3YnLCAnc3RyaW5nJywge1xuXHRcdCdjaGFyJzoge1xuXHRcdFx0cGF0dGVybjogL2AoPzpcXFxcYHxcXFxcP1teYF17MSwyfSlgLywgLy8gdXNpbmcgezEsMn0gaW5zdGVhZCBvZiBgdWAgZmxhZyBmb3IgY29tcGF0aWJpbGl0eVxuXHRcdFx0YWxpYXM6ICdydW5lJ1xuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndicsICdvcGVyYXRvcicsIHtcblx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0cGF0dGVybjogLyheW1xcdCBdKilcXFsoPzpkZXByZWNhdGVkfGRpcmVjdF9hcnJheV9hY2Nlc3N8ZmxhZ3xpbmxpbmV8bGl2ZXxyZWZfb25seXx0eXBlZGVmfHVuc2FmZV9mbnx3aW5kb3dzX3N0ZGNhbGwpXFxdL20sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdhbm5vdGF0aW9uJyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvW1xcW1xcXV0vLFxuXHRcdFx0XHQna2V5d29yZCc6IC9cXHcrL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J2dlbmVyaWMnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvPFxcdys+KD89XFxzKltcXClcXHtdKS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzogL1s8Pl0vLFxuXHRcdFx0XHQnY2xhc3MtbmFtZSc6IC9cXHcrL1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cblx0UHJpc20ubGFuZ3VhZ2VzLmluc2VydEJlZm9yZSgndicsICdmdW5jdGlvbicsIHtcblx0XHQnZ2VuZXJpYy1mdW5jdGlvbic6IHtcblx0XHRcdC8vIGUuZy4gZm9vPFQ+KCAuLi5cblx0XHRcdHBhdHRlcm46IC9cXGJcXHcrXFxzKjxcXHcrPig/PVxcKCkvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdmdW5jdGlvbic6IC9eXFx3Ky8sXG5cdFx0XHRcdCdnZW5lcmljJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC88XFx3Kz4vLFxuXHRcdFx0XHRcdGluc2lkZTogUHJpc20ubGFuZ3VhZ2VzLnYuZ2VuZXJpYy5pbnNpZGVcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy52YWxhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnY2xpa2UnLCB7XG5cdC8vIENsYXNzZXMgY29waWVkIGZyb20gcHJpc20tY3NoYXJwXG5cdCdjbGFzcy1uYW1lJzogW1xuXHRcdHtcblx0XHRcdC8vIChGb28gYmFyLCBCYXIgYmF6KVxuXHRcdFx0cGF0dGVybjogL1xcYltBLVpdXFx3Kig/OlxcLlxcdyspKlxcYig/PSg/OlxcP1xccyt8XFwqP1xccytcXCo/KVxcdykvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gW0Zvb11cblx0XHRcdHBhdHRlcm46IC8oXFxbKVtBLVpdXFx3Kig/OlxcLlxcdyspKlxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gY2xhc3MgRm9vIDogQmFyXG5cdFx0XHRwYXR0ZXJuOiAvKFxcYig/OmNsYXNzfGludGVyZmFjZSlcXHMrW0EtWl1cXHcqKD86XFwuXFx3KykqXFxzKjpcXHMqKVtBLVpdXFx3Kig/OlxcLlxcdyspKlxcYi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdHB1bmN0dWF0aW9uOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0Ly8gY2xhc3MgRm9vXG5cdFx0XHRwYXR0ZXJuOiAvKCg/OlxcYig/OmNsYXNzfGVudW18aW50ZXJmYWNlfG5ld3xzdHJ1Y3QpXFxzKyl8KD86Y2F0Y2hcXHMrXFwoKSlbQS1aXVxcdyooPzpcXC5cXHcrKSpcXGIvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRwdW5jdHVhdGlvbjogL1xcLi9cblx0XHRcdH1cblx0XHR9XG5cdF0sXG5cdCdrZXl3b3JkJzogL1xcYig/OmFic3RyYWN0fGFzfGFzc2VydHxhc3luY3xiYXNlfGJvb2x8YnJlYWt8Y2FzZXxjYXRjaHxjaGFyfGNsYXNzfGNvbnN0fGNvbnN0cnVjdHxjb250aW51ZXxkZWZhdWx0fGRlbGVnYXRlfGRlbGV0ZXxkb3xkb3VibGV8ZHluYW1pY3xlbHNlfGVuc3VyZXN8ZW51bXxlcnJvcmRvbWFpbnxleHRlcm58ZmluYWxseXxmbG9hdHxmb3J8Zm9yZWFjaHxnZXR8aWZ8aW58aW5saW5lfGludHxpbnQxNnxpbnQzMnxpbnQ2NHxpbnQ4fGludGVyZmFjZXxpbnRlcm5hbHxpc3xsb2NrfGxvbmd8bmFtZXNwYWNlfG5ld3xudWxsfG91dHxvdmVycmlkZXxvd25lZHxwYXJhbXN8cHJpdmF0ZXxwcm90ZWN0ZWR8cHVibGljfHJlZnxyZXF1aXJlc3xyZXR1cm58c2V0fHNob3J0fHNpZ25hbHxzaXplb2Z8c2l6ZV90fHNzaXplX3R8c3RhdGljfHN0cmluZ3xzdHJ1Y3R8c3dpdGNofHRoaXN8dGhyb3d8dGhyb3dzfHRyeXx0eXBlb2Z8dWNoYXJ8dWludHx1aW50MTZ8dWludDMyfHVpbnQ2NHx1aW50OHx1bG9uZ3x1bmljaGFyfHVub3duZWR8dXNob3J0fHVzaW5nfHZhbHVlfHZhcnx2aXJ0dWFsfHZvaWR8dm9sYXRpbGV8d2Vha3x3aGlsZXx5aWVsZClcXGIvaSxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXHMqXFwoKS8sXG5cdCdudW1iZXInOiAvKD86XFxiMHhbXFxkYS1mXStcXGJ8KD86XFxiXFxkKyg/OlxcLlxcZCopP3xcXEJcXC5cXGQrKSg/OmVbKy1dP1xcZCspPykoPzpmfHU/bD8pPy9pLFxuXHQnb3BlcmF0b3InOiAvXFwrXFwrfC0tfCYmfFxcfFxcfHw8PD0/fD4+PT98PT58LT58fnxbK1xcLSpcXC8lJl58PSE8Pl09P3xcXD9cXD8/fFxcLlxcLlxcLi8sXG5cdCdwdW5jdHVhdGlvbic6IC9be31bXFxdOygpLC46XS8sXG5cdCdjb25zdGFudCc6IC9cXGJbQS1aMC05X10rXFxiL1xufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3ZhbGEnLCAnc3RyaW5nJywge1xuXHQncmF3LXN0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXHQndGVtcGxhdGUtc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9AXCJbXFxzXFxTXSo/XCIvLFxuXHRcdGdyZWVkeTogdHJ1ZSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86XFwoW14pXSpcXCl8W2EtekEtWl1cXHcqKS8sXG5cdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdCdkZWxpbWl0ZXInOiB7XG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiAvXlxcJFxcKD98XFwpJC8sXG5cdFx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLnZhbGFcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdCdzdHJpbmcnOiAvW1xcc1xcU10rL1xuXHRcdH1cblx0fVxufSk7XG5cblByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ3ZhbGEnLCAna2V5d29yZCcsIHtcblx0J3JlZ2V4Jzoge1xuXHRcdHBhdHRlcm46IC9cXC8oPzpcXFsoPzpbXlxcXVxcXFxcXHJcXG5dfFxcXFwuKSpcXF18XFxcXC58W14vXFxcXFxcW1xcclxcbl0pK1xcL1tpbXN4XXswLDR9KD89XFxzKig/OiR8W1xcclxcbiwuO30pXFxdXSkpLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQncmVnZXgtc291cmNlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXihcXC8pW1xcc1xcU10rKD89XFwvW2Etel0qJCkvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRhbGlhczogJ2xhbmd1YWdlLXJlZ2V4Jyxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMucmVnZXhcblx0XHRcdH0sXG5cdFx0XHQncmVnZXgtZGVsaW1pdGVyJzogL15cXC8vLFxuXHRcdFx0J3JlZ2V4LWZsYWdzJzogL15bYS16XSskLyxcblx0XHR9XG5cdH1cbn0pO1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cdFByaXNtLmxhbmd1YWdlcy52ZWxvY2l0eSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHt9KTtcblxuXHR2YXIgdmVsb2NpdHkgPSB7XG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0oPzpcXFxcXFxcXCkqKVxcJCE/KD86W2Etel1bXFx3LV0qKD86XFwoW14pXSpcXCkpPyg/OlxcLlthLXpdW1xcdy1dKig/OlxcKFteKV0qXFwpKT98XFxbW15cXF1dK1xcXSkqfFxce1tefV0rXFx9KS9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge30gLy8gU2VlIGJlbG93XG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogL1wiW15cIl0qXCJ8J1teJ10qJy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdudW1iZXInOiAvXFxiXFxkK1xcYi8sXG5cdFx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHRcdCdvcGVyYXRvcic6IC9bPSE8Pl09P3xbKyovJS1dfCYmfFxcfFxcfHxcXC5cXC58XFxiKD86ZXF8Z1tldF18bFtldF18big/OmV8b3QpKVxcYi8sXG5cdFx0J3B1bmN0dWF0aW9uJzogL1soKXt9W1xcXTosLl0vXG5cdH07XG5cblx0dmVsb2NpdHkudmFyaWFibGUuaW5zaWRlID0ge1xuXHRcdCdzdHJpbmcnOiB2ZWxvY2l0eVsnc3RyaW5nJ10sXG5cdFx0J2Z1bmN0aW9uJzoge1xuXHRcdFx0cGF0dGVybjogLyhbXlxcdy1dKVthLXpdW1xcdy1dKig/PVxcKCkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IHZlbG9jaXR5WydudW1iZXInXSxcblx0XHQnYm9vbGVhbic6IHZlbG9jaXR5Wydib29sZWFuJ10sXG5cdFx0J3B1bmN0dWF0aW9uJzogdmVsb2NpdHlbJ3B1bmN0dWF0aW9uJ11cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd2ZWxvY2l0eScsICdjb21tZW50Jywge1xuXHRcdCd1bnBhcnNlZCc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSNcXFtcXFtbXFxzXFxTXSo/XFxdXFxdIy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9eI1xcW1xcW3xcXF1cXF0jJC9cblx0XHRcdH1cblx0XHR9LFxuXHRcdCd2ZWxvY2l0eS1jb21tZW50JzogW1xuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSkjXFwqW1xcc1xcU10qP1xcKiMvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHRcdH0sXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFxdKSMjLiovLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRcdGFsaWFzOiAnY29tbWVudCdcblx0XHRcdH1cblx0XHRdLFxuXHRcdCdkaXJlY3RpdmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W15cXFxcXSg/OlxcXFxcXFxcKSopI0A/KD86W2Etel1bXFx3LV0qfFxce1thLXpdW1xcdy1dKlxcfSkoPzpcXHMqXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkpPy9pLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQna2V5d29yZCc6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXiNAPyg/OlthLXpdW1xcdy1dKnxcXHtbYS16XVtcXHctXSpcXH0pfFxcYmluXFxiLyxcblx0XHRcdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0XHRcdCdwdW5jdHVhdGlvbic6IC9be31dL1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzdDogdmVsb2NpdHlcblx0XHRcdH1cblx0XHR9LFxuXHRcdCd2YXJpYWJsZSc6IHZlbG9jaXR5Wyd2YXJpYWJsZSddXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy52ZWxvY2l0eVsndGFnJ10uaW5zaWRlWydhdHRyLXZhbHVlJ10uaW5zaWRlLnJlc3QgPSBQcmlzbS5sYW5ndWFnZXMudmVsb2NpdHk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZlcmlsb2cgPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC9cXC9cXC8uKnxcXC9cXCpbXFxzXFxTXSo/XFwqXFwvLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcKD86XFxyXFxufFtcXHNcXFNdKXxbXlwiXFxcXFxcclxcbl0pKlwiLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tlcm5lbC1mdW5jdGlvbic6IHtcblx0XHQvLyBzdXBwb3J0IGZvciBhbnkga2VybmVsIGZ1bmN0aW9uIChleDogJGRpc3BsYXkoKSlcblx0XHRwYXR0ZXJuOiAvXFxCXFwkXFx3K1xcYi8sXG5cdFx0YWxpYXM6ICdwcm9wZXJ0eSdcblx0fSxcblx0Ly8gc3VwcG9ydCBmb3IgdXNlciBkZWZpbmVkIGNvbnN0YW50cyAoZXg6IGBkZWZpbmUpXG5cdCdjb25zdGFudCc6IC9cXEJgXFx3K1xcYi8sXG5cdCdmdW5jdGlvbic6IC9cXGJcXHcrKD89XFwoKS8sXG5cdC8vIHN1cHBvcnQgZm9yIHZlcmlsb2cgYW5kIHN5c3RlbSB2ZXJpbG9nIGtleXdvcmRzXG5cdCdrZXl3b3JkJzogL1xcYig/OmFsaWFzfGFuZHxhc3NlcnR8YXNzaWdufGFzc3VtZXxhdXRvbWF0aWN8YmVmb3JlfGJlZ2lufGJpbmR8Ymluc3xiaW5zb2Z8Yml0fGJyZWFrfGJ1ZnxidWZpZjB8YnVmaWYxfGJ5dGV8Y2FzZXxjYXNleHxjYXNlenxjZWxsfGNoYW5kbGV8Y2xhc3N8Y2xvY2tpbmd8Y21vc3xjb25maWd8Y29uc3R8Y29uc3RyYWludHxjb250ZXh0fGNvbnRpbnVlfGNvdmVyfGNvdmVyZ3JvdXB8Y292ZXJwb2ludHxjcm9zc3xkZWFzc2lnbnxkZWZhdWx0fGRlZnBhcmFtfGRlc2lnbnxkaXNhYmxlfGRpc3R8ZG98ZWRnZXxlbHNlfGVuZHxlbmRjYXNlfGVuZGNsYXNzfGVuZGNsb2NraW5nfGVuZGNvbmZpZ3xlbmRmdW5jdGlvbnxlbmRnZW5lcmF0ZXxlbmRncm91cHxlbmRpbnRlcmZhY2V8ZW5kbW9kdWxlfGVuZHBhY2thZ2V8ZW5kcHJpbWl0aXZlfGVuZHByb2dyYW18ZW5kcHJvcGVydHl8ZW5kc2VxdWVuY2V8ZW5kc3BlY2lmeXxlbmR0YWJsZXxlbmR0YXNrfGVudW18ZXZlbnR8ZXhwZWN0fGV4cG9ydHxleHRlbmRzfGV4dGVybnxmaW5hbHxmaXJzdF9tYXRjaHxmb3J8Zm9yY2V8Zm9yZWFjaHxmb3JldmVyfGZvcmt8Zm9ya2pvaW58ZnVuY3Rpb258Z2VuZXJhdGV8Z2VudmFyfGhpZ2h6MHxoaWdoejF8aWZ8aWZmfGlmbm9uZXxpZ25vcmVfYmluc3xpbGxlZ2FsX2JpbnN8aW1wb3J0fGluY2RpcnxpbmNsdWRlfGluaXRpYWx8aW5vdXR8aW5wdXR8aW5zaWRlfGluc3RhbmNlfGludHxpbnRlZ2VyfGludGVyZmFjZXxpbnRlcnNlY3R8am9pbnxqb2luX2FueXxqb2luX25vbmV8bGFyZ2V8bGlibGlzdHxsaWJyYXJ5fGxvY2FsfGxvY2FscGFyYW18bG9naWN8bG9uZ2ludHxtYWNyb21vZHVsZXxtYXRjaGVzfG1lZGl1bXxtb2Rwb3J0fG1vZHVsZXxuYW5kfG5lZ2VkZ2V8bmV3fG5tb3N8bm9yfG5vc2hvd2NhbmNlbGxlZHxub3R8bm90aWYwfG5vdGlmMXxudWxsfG9yfG91dHB1dHxwYWNrYWdlfHBhY2tlZHxwYXJhbWV0ZXJ8cG1vc3xwb3NlZGdlfHByaW1pdGl2ZXxwcmlvcml0eXxwcm9ncmFtfHByb3BlcnR5fHByb3RlY3RlZHxwdWxsMHxwdWxsMXxwdWxsZG93bnxwdWxsdXB8cHVsc2VzdHlsZV9vbmRldGVjdHxwdWxzZXN0eWxlX29uZXZlbnR8cHVyZXxyYW5kfHJhbmRjfHJhbmRjYXNlfHJhbmRzZXF1ZW5jZXxyY21vc3xyZWFsfHJlYWx0aW1lfHJlZnxyZWd8cmVsZWFzZXxyZXBlYXR8cmV0dXJufHJubW9zfHJwbW9zfHJ0cmFufHJ0cmFuaWYwfHJ0cmFuaWYxfHNjYWxhcmVkfHNlcXVlbmNlfHNob3J0aW50fHNob3J0cmVhbHxzaG93Y2FuY2VsbGVkfHNpZ25lZHxzbWFsbHxzb2x2ZXxzcGVjaWZ5fHNwZWNwYXJhbXxzdGF0aWN8c3RyaW5nfHN0cm9uZzB8c3Ryb25nMXxzdHJ1Y3R8c3VwZXJ8c3VwcGx5MHxzdXBwbHkxfHRhYmxlfHRhZ2dlZHx0YXNrfHRoaXN8dGhyb3VnaG91dHx0aW1lfHRpbWVwcmVjaXNpb258dGltZXVuaXR8dHJhbnx0cmFuaWYwfHRyYW5pZjF8dHJpfHRyaTB8dHJpMXx0cmlhbmR8dHJpb3J8dHJpcmVnfHR5cGV8dHlwZWRlZnx1bmlvbnx1bmlxdWV8dW5zaWduZWR8dXNlfHV3aXJlfHZhcnx2ZWN0b3JlZHx2aXJ0dWFsfHZvaWR8d2FpdHx3YWl0X29yZGVyfHdhbmR8d2VhazB8d2VhazF8d2hpbGV8d2lsZGNhcmR8d2lyZXx3aXRofHdpdGhpbnx3b3J8eG5vcnx4b3IpXFxiLyxcblx0Ly8gYm9sZCBoaWdobGlnaHRpbmcgZm9yIGFsbCB2ZXJpbG9nIGFuZCBzeXN0ZW0gdmVyaWxvZyBsb2dpYyBibG9ja3Ncblx0J2ltcG9ydGFudCc6IC9cXGIoPzphbHdheXN8YWx3YXlzX2NvbWJ8YWx3YXlzX2ZmfGFsd2F5c19sYXRjaClcXGIoPzogKkApPy8sXG5cdC8vIHN1cHBvcnQgZm9yIHRpbWUgdGlja3MsIHZlY3RvcnMsIGFuZCByZWFsIG51bWJlcnNcblx0J251bWJlcic6IC9cXEIjIz9cXGQrfCg/OlxcYlxcZCspPydbb2RiaF0gP1tcXGRhLWZ6eF8/XSt8XFxiKD86XFxkKlsuX10pP1xcZCsoPzplWy0rXT9cXGQrKT8vaSxcblx0J29wZXJhdG9yJzogL1stK3t9Xn4lKlxcLz89ITw+JnxdKy8sXG5cdCdwdW5jdHVhdGlvbic6IC9bW1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudmhkbCA9IHtcblx0J2NvbW1lbnQnOiAvLS0uKy8sXG5cdC8vIHN1cHBvcnQgZm9yIGFsbCBsb2dpYyB2ZWN0b3JzXG5cdCd2aGRsLXZlY3RvcnMnOiB7XG5cdFx0J3BhdHRlcm4nOiAvXFxiW294Yl1cIltcXGRhLWZfXStcInxcIlswMXV4endsaC1dK1wiL2ksXG5cdFx0J2FsaWFzJzogJ251bWJlcidcblx0fSxcblx0Ly8gc3VwcG9ydCBmb3Igb3BlcmF0b3Igb3ZlcmxvYWRpbmcgaW5jbHVkZWRcblx0J3F1b3RlZC1mdW5jdGlvbic6IHtcblx0XHRwYXR0ZXJuOiAvXCJcXFMrP1wiKD89XFwoKS8sXG5cdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0fSxcblx0J3N0cmluZyc6IC9cIig/OlteXFxcXFwiXFxyXFxuXXxcXFxcKD86XFxyXFxufFtcXHNcXFNdKSkqXCIvLFxuXHQnYXR0cmlidXRlJzoge1xuXHRcdHBhdHRlcm46IC9cXGInXFx3Ky8sXG5cdFx0YWxpYXM6ICdhdHRyLW5hbWUnXG5cdH0sXG5cdC8vIHN1cHBvcnQgZm9yIHByZWRlZmluZWQgYXR0cmlidXRlcyBpbmNsdWRlZFxuXHQna2V5d29yZCc6IC9cXGIoPzphY2Nlc3N8YWZ0ZXJ8YWxpYXN8YWxsfGFyY2hpdGVjdHVyZXxhcnJheXxhc3NlcnR8YXR0cmlidXRlfGJlZ2lufGJsb2NrfGJvZHl8YnVmZmVyfGJ1c3xjYXNlfGNvbXBvbmVudHxjb25maWd1cmF0aW9ufGNvbnN0YW50fGRpc2Nvbm5lY3R8ZG93bnRvfGVsc2V8ZWxzaWZ8ZW5kfGVudGl0eXxleGl0fGZpbGV8Zm9yfGZ1bmN0aW9ufGdlbmVyYXRlfGdlbmVyaWN8Z3JvdXB8Z3VhcmRlZHxpZnxpbXB1cmV8aW58aW5lcnRpYWx8aW5vdXR8aXN8bGFiZWx8bGlicmFyeXxsaW5rYWdlfGxpdGVyYWx8bG9vcHxtYXB8bmV3fG5leHR8bnVsbHxvZnxvbnxvcGVufG90aGVyc3xvdXR8cGFja2FnZXxwb3J0fHBvc3Rwb25lZHxwcml2YXRlfHByb2NlZHVyZXxwcm9jZXNzfHB1cmV8cmFuZ2V8cmVjb3JkfHJlZ2lzdGVyfHJlamVjdHxyZXBvcnR8cmV0dXJufHNlbGVjdHxzZXZlcml0eXxzaGFyZWR8c2lnbmFsfHN1YnR5cGV8dGhlbnx0b3x0cmFuc3BvcnR8dHlwZXx1bmFmZmVjdGVkfHVuaXRzfHVudGlsfHVzZXx2YXJpYWJsZXx2aWV3fHdhaXR8d2hlbnx3aGlsZXx3aXRoKVxcYi9pLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi9pLFxuXHQnZnVuY3Rpb24nOiAvXFx3Kyg/PVxcKCkvLFxuXHQvLyBkZWNpbWFsLCBiYXNlZCwgcGh5c2ljYWwsIGFuZCBleHBvbmVudGlhbCBudW1iZXJzIHN1cHBvcnRlZFxuXHQnbnVtYmVyJzogLydbMDF1eHp3bGgtXSd8XFxiKD86XFxkKyNbXFxkYS1mXy5dKyN8XFxkW1xcZF8uXSopKD86ZVstK10/XFxkKyk/L2ksXG5cdCdvcGVyYXRvcic6IC9bPD5dPT98Oj18Wy0rKi8mPV18XFxiKD86YWJzfGFuZHxtb2R8bmFuZHxub3J8bm90fG9yfHJlbXxyb2x8cm9yfHNsYXxzbGx8c3JhfHNybHx4bm9yfHhvcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF07KCksLjpdL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLnZpbSA9IHtcblx0J3N0cmluZyc6IC9cIig/OlteXCJcXFxcXFxyXFxuXXxcXFxcLikqXCJ8Jyg/OlteJ1xcclxcbl18JycpKicvLFxuXHQnY29tbWVudCc6IC9cIi4qLyxcblx0J2Z1bmN0aW9uJzogL1xcYlxcdysoPz1cXCgpLyxcblx0J2tleXdvcmQnOiAvXFxiKD86TnxOZXh0fFB8UHJpbnR8WHxYTUxlbnR8WE1MbnN8YWJ8YWJicmV2aWF0ZXxhYmN8YWJjbGVhcnxhYm98YWJvdmVsZWZ0fGFsfGFsbHxhcnxhcmdhfGFyZ2FkZHxhcmdkfGFyZ2RlbGV0ZXxhcmdkb3xhcmdlfGFyZ2VkaXR8YXJnZ3xhcmdnbG9iYWx8YXJnbHxhcmdsb2NhbHxhcmdzfGFyZ3V8YXJndW1lbnR8YXN8YXNjaWl8YnxiTnxiTmV4dHxiYXxiYWR8YmFkZHxiYWxsfGJkfGJkZWxldGV8YmV8YmVsfGJlbG93cmlnaHR8YmZ8YmZpcnN0fGJsfGJsYXN0fGJtfGJtb2RpZmllZHxibnxibmV4dHxib3xib3RyaWdodHxicHxicHJldmlvdXN8YnJ8YnJlYXxicmVha3xicmVha2F8YnJlYWthZGR8YnJlYWtkfGJyZWFrZGVsfGJyZWFrbHxicmVha2xpc3R8YnJld2luZHxicm98YnJvd3NlfGJ1ZmRvfGJ1ZmZlcnxidWZmZXJzfGJ1bnxidW5sb2FkfGJ3fGJ3aXBlb3V0fGN8Y058Y05leHR8Y05mY05maWxlfGNhfGNhYmJyZXZ8Y2FiY3xjYWJjbGVhcnxjYWR8Y2FkZGJ8Y2FkZGJ1ZmZlcnxjYWRkZXhwcnxjYWRkZnxjYWRkZmlsZXxjYWx8Y2FsbHxjYXR8Y2F0Y2h8Y2J8Y2J1ZmZlcnxjY3xjY2x8Y2Nsb3NlfGNkfGNlfGNlbnRlcnxjZXh8Y2V4cHJ8Y2Z8Y2ZpbGV8Y2ZpcnxjZmlyc3R8Y2d8Y2dldGJ8Y2dldGJ1ZmZlcnxjZ2V0ZXxjZ2V0ZXhwcnxjZ2V0ZmlsZXxjaGFuZ2V8Y2hhbmdlc3xjaGR8Y2hkaXJ8Y2hlfGNoZWNrcGF0aHxjaGVja3R8Y2hlY2t0aW1lfGNsfGNsYXxjbGFzdHxjbGlzdHxjbG98Y2xvc2V8Y21hcGN8Y21hcGNsZWFyfGNufGNuZXd8Y25ld2VyfGNuZXh0fGNuZnxjbmZpbGV8Y25vcmVhfGNub3JlYWJicmV2fGNvfGNvbHxjb2xkZXJ8Y29sb3xjb2xvcnNjaGVtZXxjb21jfGNvbWNsZWFyfGNvbXB8Y29tcGlsZXJ8Y29ufGNvbmZ8Y29uZmlybXxjb250aW51ZXxjb3BlfGNvcGVufGNvcHl8Y3B8Y3BmfGNwZmlsZXxjcHJldmlvdXN8Y3F8Y3F1aXR8Y3J8Y3Jld2luZHxjdXxjdW5hfGN1bmFiYnJldnxjdW5tYXB8Y3d8Y3dpbmRvd3xkfGRlYnVnZ3xkZWJ1Z2dyZWVkeXxkZWxjfGRlbGNvbW1hbmR8ZGVsZXRlfGRlbGZ8ZGVsZnVuY3Rpb258ZGVsbXxkZWxtYXJrc3xkaXxkaWZmZ3xkaWZmZ2V0fGRpZmZvZmZ8ZGlmZnBhdGNofGRpZmZwdXxkaWZmcHV0fGRpZmZzcGxpdHxkaWZmdGhpc3xkaWZmdXxkaWZmdXBkYXRlfGRpZ3xkaWdyYXBoc3xkaXNwbGF5fGRqfGRqdW1wfGRsfGRsaXN0fGRyfGRyb3B8ZHN8ZHNlYXJjaHxkc3B8ZHNwbGl0fGV8ZWFybGllcnxlY2hvZXxlY2hvZXJyfGVjaG9tfGVjaG9tc2d8ZWNob258ZWRpdHxlbHxlbHNlfGVsc2VpfGVsc2VpZnxlbXxlbWVudXxlbnxlbmRmfGVuZGZvfGVuZGZvcnxlbmRmdW58ZW5kZnVuY3Rpb258ZW5kaWZ8ZW5kdHxlbmR0cnl8ZW5kd3xlbmR3aGlsZXxlbmV8ZW5ld3xleHxleGl8ZXhpdHxleHV8ZXh1c2FnZXxmfGZpbGV8ZmlsZXN8ZmlsZXR5cGV8ZmlufGZpbmF8ZmluYWxseXxmaW5kfGZpbml8ZmluaXNofGZpcnxmaXJzdHxmaXh8Zml4ZGVsfGZvfGZvbGR8Zm9sZGN8Zm9sZGNsb3NlfGZvbGRkfGZvbGRkb2N8Zm9sZGRvY2xvc2VkfGZvbGRkb29wZW58Zm9sZG98Zm9sZG9wZW58Zm9yfGZ1fGZ1bnxmdW5jdGlvbnxnb3xnb3RvfGdyfGdyZXB8Z3JlcGF8Z3JlcGFkZHxofGhhfGhhcmRjb3B5fGhlbHB8aGVscGZ8aGVscGZpbmR8aGVscGd8aGVscGdyZXB8aGVscHR8aGVscHRhZ3N8aGlkfGhpZGV8aGlzfGhpc3Rvcnl8aWF8aWFiYnJldnxpYWJjfGlhYmNsZWFyfGlmfGlqfGlqdW1wfGlsfGlsaXN0fGltYXBjfGltYXBjbGVhcnxpbnxpbm9yZWF8aW5vcmVhYmJyZXZ8aXNlYXJjaHxpc3B8aXNwbGl0fGl1fGl1bmF8aXVuYWJicmV2fGl1bm1hcHxqfGpvaW58anV8anVtcHN8a3xrZWV8a2VlcGFsdHxrZWVwanxrZWVwanVtcHN8a2VlcG1hcmtzfGx8bE58bE5leHR8bE5mfGxOZmlsZXxsYXxsYWR8bGFkZGJ8bGFkZGJ1ZmZlcnxsYWRkZXhwcnxsYWRkZnxsYWRkZmlsZXxsYW58bGFuZ3VhZ2V8bGFzdHxsYXRlcnxsYnxsYnVmZmVyfGxjfGxjZHxsY2h8bGNoZGlyfGxjbHxsY2xvc2V8bGVmdHxsZWZ0YXxsZWZ0YWJvdmV8bGV0fGxleHxsZXhwcnxsZnxsZmlsZXxsZmlyfGxmaXJzdHxsZ3xsZ2V0YnxsZ2V0YnVmZmVyfGxnZXRlfGxnZXRleHByfGxnZXRmaWxlfGxncnxsZ3JlcHxsZ3JlcGF8bGdyZXBhZGR8bGh8bGhlbHBncmVwfGxpc3R8bGx8bGxhfGxsYXN0fGxsaXxsbGlzdHxsbXxsbWFrfGxtYWtlfGxtYXB8bG1hcGN8bG1hcGNsZWFyfGxufGxuZXxsbmV3fGxuZXdlcnxsbmV4dHxsbmZ8bG5maWxlfGxub3JlbWFwfGxvfGxvYWR2aWV3fGxvY3xsb2NrbWFya3N8bG9ja3Z8bG9ja3Zhcnxsb2x8bG9sZGVyfGxvcHxsb3BlbnxscHxscGZ8bHBmaWxlfGxwcmV2aW91c3xscnxscmV3aW5kfGxzfGx0fGx0YWd8bHV8bHVubWFwfGx2fGx2aW1ncmVwfGx2aW1ncmVwYXxsdmltZ3JlcGFkZHxsd3xsd2luZG93fG18bWF8bWFrfG1ha2V8bWFya3xtYXJrc3xtYXR8bWF0Y2h8bWVudXR8bWVudXRyYW5zbGF0ZXxta3xta2V4cmN8bWtzfG1rc2Vzc2lvbnxta3NwfG1rc3BlbGx8bWt2fG1rdmllfG1rdmlld3xta3ZpbXJjfG1vZHxtb2RlfG1vdmV8bXp8bXpmfG16ZmlsZXxtenNjaGVtZXxufG5ia2V5fG5ld3xuZXh0fG5tYXBjfG5tYXBjbGVhcnxub2h8bm9obHNlYXJjaHxub3JlYXxub3JlYWJicmV2fG51fG51bWJlcnxudW58bnVubWFwfG98b21hcGN8b21hcGNsZWFyfG9ufG9ubHl8b3BlbnxvcHR8b3B0aW9uc3xvdXxvdW5tYXB8cHxwY3xwY2xvc2V8cGV8cGVkfHBlZGl0fHBlcmx8cGVybGR8cGVybGRvfHBvfHBvcHxwb3B1fHBvcHVwfHBwfHBwb3B8cHJlfHByZXNlcnZlfHByZXZ8cHJldmlvdXN8cHJpbnR8cHJvZnxwcm9mZHxwcm9mZGVsfHByb2ZpbGV8cHJvbXB0Znxwcm9tcHRmaW5kfHByb21wdHJ8cHJvbXB0cmVwbHxwc3xwc2VhcmNofHB0TnxwdE5leHR8cHRhfHB0YWd8cHRmfHB0Zmlyc3R8cHRqfHB0anVtcHxwdGx8cHRsYXN0fHB0bnxwdG5leHR8cHRwfHB0cHJldmlvdXN8cHRyfHB0cmV3aW5kfHB0c3xwdHNlbGVjdHxwdXxwdXR8cHd8cHdkfHB5fHB5ZnxweWZpbGV8cHl0aG9ufHF8cWF8cWFsbHxxdWl0fHF1aXRhfHF1aXRhbGx8cnxyZWFkfHJlY3xyZWNvdmVyfHJlZHxyZWRpfHJlZGlyfHJlZG98cmVkcnxyZWRyYXd8cmVkcmF3c3xyZWRyYXdzdGF0dXN8cmVnfHJlZ2lzdGVyc3xyZXN8cmVzaXplfHJldHxyZXRhYnxyZXR1fHJldHVybnxyZXd8cmV3aW5kfHJpfHJpZ2h0fHJpZ2h0YnxyaWdodGJlbG93fHJ1fHJ1YnxydWJ5fHJ1YnlkfHJ1Ynlkb3xydWJ5ZnxydWJ5ZmlsZXxydW50aW1lfHJ2fHJ2aW1pbmZvfHNOfHNOZXh0fHNhfHNhbHxzYWxsfHNhbnxzYW5kYm94fHNhcmd1bWVudHxzYXZ8c2F2ZWFzfHNifHNiTnxzYk5leHR8c2JhfHNiYWxsfHNiZnxzYmZpcnN0fHNibHxzYmxhc3R8c2JtfHNibW9kaWZpZWR8c2JufHNibmV4dHxzYnB8c2JwcmV2aW91c3xzYnJ8c2JyZXdpbmR8c2J1ZmZlcnxzY3JpcHxzY3JpcHRlfHNjcmlwdGVuY29kaW5nfHNjcmlwdG5hbWVzfHNlfHNldHxzZXRmfHNldGZpbGV0eXBlfHNldGd8c2V0Z2xvYmFsfHNldGx8c2V0bG9jYWx8c2Z8c2ZpbmR8c2ZpcnxzZmlyc3R8c2h8c2hlbGx8c2lnbnxzaWx8c2lsZW50fHNpbXxzaW1hbHR8c2x8c2xhfHNsYXN0fHNsZWVwfHNtfHNtYWdpY3xzbWFwfHNtYXBjfHNtYXBjbGVhcnxzbWV8c21lbnV8c258c25leHR8c25pfHNuaWZmfHNub3xzbm9tYWdpY3xzbm9yfHNub3JlbWFwfHNub3JlbWV8c25vcmVtZW51fHNvfHNvcnxzb3J0fHNvdXJjZXxzcHxzcGV8c3BlbGxkfHNwZWxsZHVtcHxzcGVsbGdvb2R8c3BlbGxpfHNwZWxsaW5mb3xzcGVsbHJ8c3BlbGxyZXBhbGx8c3BlbGx1fHNwZWxsdW5kb3xzcGVsbHd8c3BlbGx3cm9uZ3xzcGxpdHxzcHJ8c3ByZXZpb3VzfHNyZXxzcmV3aW5kfHN0fHN0YXxzdGFnfHN0YXJ8c3RhcnRnfHN0YXJ0Z3JlcGxhY2V8c3RhcnRpbnNlcnR8c3RhcnRyfHN0YXJ0cmVwbGFjZXxzdGp8c3RqdW1wfHN0b3B8c3RvcGl8c3RvcGluc2VydHxzdHN8c3RzZWxlY3R8c3VufHN1bmhpZGV8c3VubXxzdW5tYXB8c3VzfHN1c3BlbmR8c3Z8c3ZpZXd8c3luY2JpbmR8dHx0Tnx0TmV4dHx0YXx0YWJ8dGFiTnx0YWJOZXh0fHRhYmN8dGFiY2xvc2V8dGFiZHx0YWJkb3x0YWJlfHRhYmVkaXR8dGFiZnx0YWJmaW5kfHRhYmZpcnx0YWJmaXJzdHx0YWJsfHRhYmxhc3R8dGFibXx0YWJtb3ZlfHRhYm58dGFibmV3fHRhYm5leHR8dGFib3x0YWJvbmx5fHRhYnB8dGFicHJldmlvdXN8dGFicnx0YWJyZXdpbmR8dGFic3x0YWd8dGFnc3x0Y3x0Y2x8dGNsZHx0Y2xkb3x0Y2xmfHRjbGZpbGV8dGV8dGVhcm9mZnx0Znx0Zmlyc3R8dGh8dGhyb3d8dGp8dGp1bXB8dGx8dGxhc3R8dG18dG1lbnV8dG58dG5leHR8dG98dG9wbGVmdHx0cHx0cHJldmlvdXN8dHJ8dHJld2luZHx0cnl8dHN8dHNlbGVjdHx0dXx0dW5tZW51fHV8dW5hfHVuYWJicmV2aWF0ZXx1bmRvfHVuZG9qfHVuZG9qb2lufHVuZG9sfHVuZG9saXN0fHVuaHx1bmhpZGV8dW5sZXR8dW5sb3x1bmxvY2t2YXJ8dW5tfHVubWFwfHVwfHVwZGF0ZXx2ZXx2ZXJifHZlcmJvc2V8dmVyc2lvbnx2ZXJ0fHZlcnRpY2FsfHZpfHZpZXx2aWV3fHZpbXx2aW1ncmVwfHZpbWdyZXBhfHZpbWdyZXBhZGR8dmlzdWFsfHZpdXx2aXVzYWdlfHZtYXBjfHZtYXBjbGVhcnx2bmV8dm5ld3x2c3x2c3BsaXR8dnV8dnVubWFwfHd8d058d05leHR8d2F8d2FsbHx3aHx3aGlsZXx3aW58d2luY3x3aW5jbWR8d2luZG98d2lucHx3aW5wb3N8d2luc2l6ZXx3bnx3bmV4dHx3cHx3cHJldmlvdXN8d3F8d3FhfHdxYWxsfHdyaXRlfHdzfHdzdmVyYnx3dnx3dmltaW5mb3x4fHhhfHhhbGx8eGl0fHhtfHhtYXB8eG1hcGN8eG1hcGNsZWFyfHhtZXx4bWVudXx4bnx4bm9yZW1hcHx4bm9yZW1lfHhub3JlbWVudXx4dXx4dW5tYXB8eXx5YW5rKVxcYi8sXG5cdCdidWlsdGluJzogL1xcYig/OmFjZHxhaXxha218YWxlcGh8YWxsb3dyZXZpbnN8YWx0a2V5bWFwfGFtYml3aWR0aHxhbWJ3fGFudGl8YW50aWFsaWFzfGFyYWJ8YXJhYmljfGFyYWJpY3NoYXBlfGFyaXxhcnNoYXBlfGF1dG9jaGRpcnxhdXRvY21kfGF1dG9pbmRlbnR8YXV0b3JlYWR8YXV0b3dyaXRlfGF1dG93cml0ZWFsbHxhd3xhd2F8YmFja2dyb3VuZHxiYWNrc3BhY2V8YmFja3VwfGJhY2t1cGNvcHl8YmFja3VwZGlyfGJhY2t1cGV4dHxiYWNrdXBza2lwfGJhbGxvb25kZWxheXxiYWxsb29uZXZhbHxiYWxsb29uZXhwcnxiZGlyfGJkbGF5fGJldmFsfGJleHxiZXhwcnxiZ3xiaHxiaW58YmluYXJ5fGJpb3NrfGJpb3NrZXl8Ymt8YmtjfGJvbWJ8YnJlYWthdHxicmt8YnJvd3NlZGlyfGJzfGJzZGlyfGJza3xidHxidWZoaWRkZW58YnVmbGlzdGVkfGJ1ZnR5cGV8Y2FzZW1hcHxjY3Z8Y2RwYXRofGNlZGl0fGNmdXxjaHxjaGFyY29udmVydHxjaXxjaW58Y2luZGVudHxjaW5rfGNpbmtleXN8Y2lub3xjaW5vcHRpb25zfGNpbnd8Y2lud29yZHN8Y2xpcGJvYXJkfGNtZGhlaWdodHxjbWR3aW5oZWlnaHR8Y21wfGNtc3xjb2x1bW5zfGNvbXxjb21tZW50c3xjb21tZW50c3RyaW5nfGNvbXBhdGlibGV8Y29tcGxldGV8Y29tcGxldGVmdW5jfGNvbXBsZXRlb3B0fGNvbnNrfGNvbnNrZXl8Y29weWluZGVudHxjb3R8Y3BvfGNwb3B0aW9uc3xjcHR8Y3Njb3BlcGF0aGNvbXB8Y3Njb3BlcHJnfGNzY29wZXF1aWNrZml4fGNzY29wZXRhZ3xjc2NvcGV0YWdvcmRlcnxjc2NvcGV2ZXJib3NlfGNzcGN8Y3Nwcmd8Y3NxZnxjc3R8Y3N0b3xjc3ZlcmJ8Y3VjfGN1bHxjdXJzb3Jjb2x1bW58Y3Vyc29ybGluZXxjd2h8ZGVidWd8ZGVjb3xkZWZ8ZGVmaW5lfGRlbGNvbWJpbmV8ZGV4fGRnfGRpY3R8ZGljdGlvbmFyeXxkaWZmfGRpZmZleHByfGRpZmZvcHR8ZGlncmFwaHxkaXB8ZGlyfGRpcmVjdG9yeXxkeXxlYXxlYWR8ZWFkaXJlY3Rpb258ZWJ8ZWR8ZWRjb21wYXRpYmxlfGVmfGVmbXxlaXxla3xlbmN8ZW5jb2Rpbmd8ZW5kb2ZsaW5lfGVvbHxlcHxlcXVhbGFsd2F5c3xlcXVhbHByZ3xlcnJvcmJlbGxzfGVycm9yZmlsZXxlcnJvcmZvcm1hdHxlc2NrZXlzfGV0fGV2ZW50aWdub3JlfGV4cGFuZHRhYnxleHJjfGZjbHxmY3N8ZmRjfGZkZXxmZGl8ZmRsfGZkbHN8ZmRtfGZkbnxmZG98ZmR0fGZlbnxmZW5jfGZlbmNzfGZleHxmZnxmZnN8ZmlsZWVuY29kaW5nfGZpbGVlbmNvZGluZ3N8ZmlsZWZvcm1hdHxmaWxlZm9ybWF0c3xmaWxsY2hhcnN8Zmt8ZmttYXB8ZmxwfGZtbHxmbXJ8Zm9sZGNvbHVtbnxmb2xkZW5hYmxlfGZvbGRleHByfGZvbGRpZ25vcmV8Zm9sZGxldmVsfGZvbGRsZXZlbHN0YXJ0fGZvbGRtYXJrZXJ8Zm9sZG1ldGhvZHxmb2xkbWlubGluZXN8Zm9sZG5lc3RtYXh8Zm9sZHRleHR8Zm9ybWF0ZXhwcnxmb3JtYXRsaXN0cGF0fGZvcm1hdG9wdGlvbnN8Zm9ybWF0cHJnfGZwfGZzfGZzeW5jfGZ0fGdjcnxnZHxnZGVmYXVsdHxnZm18Z2ZufGdmc3xnZnd8Z2hyfGdwfGdyZXBmb3JtYXR8Z3JlcHByZ3xndGx8Z3R0fGd1aWN1cnNvcnxndWlmb250fGd1aWZvbnRzZXR8Z3VpZm9udHdpZGV8Z3VpaGVhZHJvb218Z3Vpb3B0aW9uc3xndWlwdHl8Z3VpdGFibGFiZWx8Z3VpdGFidG9vbHRpcHxoZWxwZmlsZXxoZWxwaGVpZ2h0fGhlbHBsYW5nfGhmfGhofGhpfGhpZGRlbnxoaWdobGlnaHR8aGt8aGttYXB8aGttYXBwfGhrcHxobHxobGd8aGxzfGhsc2VhcmNofGljfGljb258aWNvbnN0cmluZ3xpZ25vcmVjYXNlfGltfGltYWN0aXZhdGVrZXl8aW1ha3xpbWN8aW1jbWRsaW5lfGltZHxpbWRpc2FibGV8aW1pfGltaW5zZXJ0fGltc3xpbXNlYXJjaHxpbmN8aW5jbHVkZXxpbmNsdWRlZXhwcnxpbmNzZWFyY2h8aW5kZXxpbmRlbnRleHByfGluZGVudGtleXN8aW5ka3xpbmV4fGluZnxpbmZlcmNhc2V8aW5zZXJ0bW9kZXxpbnZhY2R8aW52YWl8aW52YWttfGludmFsbG93cmV2aW5zfGludmFsdGtleW1hcHxpbnZhbnRpfGludmFudGlhbGlhc3xpbnZhcnxpbnZhcmFifGludmFyYWJpY3xpbnZhcmFiaWNzaGFwZXxpbnZhcml8aW52YXJzaGFwZXxpbnZhdXRvY2hkaXJ8aW52YXV0b2luZGVudHxpbnZhdXRvcmVhZHxpbnZhdXRvd3JpdGV8aW52YXV0b3dyaXRlYWxsfGludmF3fGludmF3YXxpbnZiYWNrdXB8aW52YmFsbG9vbmV2YWx8aW52YmV2YWx8aW52YmlufGludmJpbmFyeXxpbnZiaW9za3xpbnZiaW9za2V5fGludmJrfGludmJsfGludmJvbWJ8aW52YnVmbGlzdGVkfGludmNmfGludmNpfGludmNpbnxpbnZjaW5kZW50fGludmNvbXBhdGlibGV8aW52Y29uZmlybXxpbnZjb25za3xpbnZjb25za2V5fGludmNvcHlpbmRlbnR8aW52Y3B8aW52Y3Njb3BldGFnfGludmNzY29wZXZlcmJvc2V8aW52Y3N0fGludmNzdmVyYnxpbnZjdWN8aW52Y3VsfGludmN1cnNvcmNvbHVtbnxpbnZjdXJzb3JsaW5lfGludmRlY298aW52ZGVsY29tYmluZXxpbnZkZ3xpbnZkaWZmfGludmRpZ3JhcGh8aW52ZGlzYWJsZXxpbnZlYXxpbnZlYnxpbnZlZHxpbnZlZGNvbXBhdGlibGV8aW52ZWt8aW52ZW5kb2ZsaW5lfGludmVvbHxpbnZlcXVhbGFsd2F5c3xpbnZlcnJvcmJlbGxzfGludmVzY2tleXN8aW52ZXR8aW52ZXh8aW52ZXhwYW5kdGFifGludmV4cmN8aW52ZmVufGludmZrfGludmZrbWFwfGludmZvbGRlbmFibGV8aW52Z2R8aW52Z2RlZmF1bHR8aW52Z3VpcHR5fGludmhpZHxpbnZoaWRkZW58aW52aGt8aW52aGttYXB8aW52aGttYXBwfGludmhrcHxpbnZobHN8aW52aGxzZWFyY2h8aW52aWN8aW52aWNvbnxpbnZpZ25vcmVjYXNlfGludmltfGludmltY3xpbnZpbWNtZGxpbmV8aW52aW1kfGludmluY3NlYXJjaHxpbnZpbmZ8aW52aW5mZXJjYXNlfGludmluc2VydG1vZGV8aW52aXN8aW52am9pbnNwYWNlc3xpbnZqc3xpbnZsYXp5cmVkcmF3fGludmxicnxpbnZsaW5lYnJlYWt8aW52bGlzcHxpbnZsaXN0fGludmxvYWRwbHVnaW5zfGludmxwbHxpbnZsenxpbnZtYXxpbnZtYWNhdHN1aXxpbnZtYWdpY3xpbnZtaHxpbnZtbHxpbnZtb2R8aW52bW9kZWxpbmV8aW52bW9kaWZpYWJsZXxpbnZtb2RpZmllZHxpbnZtb3JlfGludm1vdXNlZnxpbnZtb3VzZWZvY3VzfGludm1vdXNlaGlkZXxpbnZudXxpbnZudW1iZXJ8aW52b2RldnxpbnZvcGVuZGV2aWNlfGludnBhc3RlfGludnBpfGludnByZXNlcnZlaW5kZW50fGludnByZXZpZXd3aW5kb3d8aW52cHJvbXB0fGludnB2d3xpbnZyZWFkb25seXxpbnZyZW1hcHxpbnZyZXN0b3Jlc2NyZWVufGludnJldmluc3xpbnZyaXxpbnZyaWdodGxlZnR8aW52cmlnaHRsZWZ0Y21kfGludnJsfGludnJsY3xpbnZyb3xpbnZyc3xpbnZydXxpbnZydWxlcnxpbnZzYnxpbnZzY3xpbnZzY2J8aW52c2Nyb2xsYmluZHxpbnZzY3N8aW52c2VjdXJlfGludnNmdHxpbnZzaGVsbHNsYXNofGludnNoZWxsdGVtcHxpbnZzaGlmdHJvdW5kfGludnNob3J0bmFtZXxpbnZzaG93Y21kfGludnNob3dmdWxsdGFnfGludnNob3dtYXRjaHxpbnZzaG93bW9kZXxpbnZzaXxpbnZzbXxpbnZzbWFydGNhc2V8aW52c21hcnRpbmRlbnR8aW52c21hcnR0YWJ8aW52c21kfGludnNufGludnNvbHxpbnZzcGVsbHxpbnZzcGxpdGJlbG93fGludnNwbGl0cmlnaHR8aW52c3ByfGludnNyfGludnNzbHxpbnZzdGF8aW52c3RhcnRvZmxpbmV8aW52c3RtcHxpbnZzd2FwZmlsZXxpbnZzd2Z8aW52dGF8aW52dGFnYnNlYXJjaHxpbnZ0YWdyZWxhdGl2ZXxpbnZ0YWdzdGFja3xpbnZ0Yml8aW52dGJpZGl8aW52dGJzfGludnRlcm1iaWRpfGludnRlcnNlfGludnRleHRhdXRvfGludnRleHRtb2RlfGludnRmfGludnRnc3R8aW52dGlsZGVvcHxpbnZ0aW1lb3V0fGludnRpdGxlfGludnRvfGludnRvcHxpbnZ0cnxpbnZ0dGltZW91dHxpbnZ0dHlidWlsdGlufGludnR0eWZhc3R8aW52dHh8aW52dmJ8aW52dmlzdWFsYmVsbHxpbnZ3YXxpbnZ3YXJufGludndifGludndlaXJkaW52ZXJ0fGludndmaHxpbnZ3Znd8aW52d2lsZG1lbnV8aW52d2luZml4aGVpZ2h0fGludndpbmZpeHdpZHRofGludndpdnxpbnZ3bW51fGludndyYXB8aW52d3JhcHNjYW58aW52d3JpdGV8aW52d3JpdGVhbnl8aW52d3JpdGViYWNrdXB8aW52d3N8aXNmfGlzZm5hbWV8aXNpfGlzaWRlbnR8aXNrfGlza2V5d29yZHxpc3ByaW50fGpvaW5zcGFjZXN8anN8a2V5fGtleW1hcHxrZXltb2RlbHxrZXl3b3JkcHJnfGttfGttcHxrcHxsYW5nbWFwfGxhbmdtZW51fGxhc3RzdGF0dXN8bGF6eXJlZHJhd3xsYnJ8bGNzfGxpbmVicmVha3xsaW5lc3xsaW5lc3BhY2V8bGlzcHxsaXNwd29yZHN8bGlzdGNoYXJzfGxvYWRwbHVnaW5zfGxwbHxsc3B8bHp8bWFjYXRzdWl8bWFnaWN8bWFrZWVmfG1ha2Vwcmd8bWF0Y2hwYWlyc3xtYXRjaHRpbWV8bWF4Y29tYmluZXxtYXhmdW5jZGVwdGh8bWF4bWFwZGVwdGh8bWF4bWVtfG1heG1lbXBhdHRlcm58bWF4bWVtdG90fG1jb3xtZWZ8bWVudWl0ZW1zfG1mZHxtaHxtaXN8bWtzcGVsbG1lbXxtbHxtbHN8bW18bW1kfG1tcHxtbXR8bW9kZWxpbmV8bW9kZWxpbmVzfG1vZGlmaWFibGV8bW9kaWZpZWR8bW9yZXxtb3VzZXxtb3VzZWZ8bW91c2Vmb2N1c3xtb3VzZWhpZGV8bW91c2VtfG1vdXNlbW9kZWx8bW91c2VzfG1vdXNlc2hhcGV8bW91c2V0fG1vdXNldGltZXxtcHxtcHN8bXNtfG16cXxtenF1YW50dW18bmZ8bm9hY2R8bm9haXxub2FrbXxub2FsbG93cmV2aW5zfG5vYWx0a2V5bWFwfG5vYW50aXxub2FudGlhbGlhc3xub2FyfG5vYXJhYnxub2FyYWJpY3xub2FyYWJpY3NoYXBlfG5vYXJpfG5vYXJzaGFwZXxub2F1dG9jaGRpcnxub2F1dG9pbmRlbnR8bm9hdXRvcmVhZHxub2F1dG93cml0ZXxub2F1dG93cml0ZWFsbHxub2F3fG5vYXdhfG5vYmFja3VwfG5vYmFsbG9vbmV2YWx8bm9iZXZhbHxub2Jpbnxub2JpbmFyeXxub2Jpb3NrfG5vYmlvc2tleXxub2JrfG5vYmx8bm9ib21ifG5vYnVmbGlzdGVkfG5vY2Z8bm9jaXxub2Npbnxub2NpbmRlbnR8bm9jb21wYXRpYmxlfG5vY29uZmlybXxub2NvbnNrfG5vY29uc2tleXxub2NvcHlpbmRlbnR8bm9jcHxub2NzY29wZXRhZ3xub2NzY29wZXZlcmJvc2V8bm9jc3R8bm9jc3ZlcmJ8bm9jdWN8bm9jdWx8bm9jdXJzb3Jjb2x1bW58bm9jdXJzb3JsaW5lfG5vZGVjb3xub2RlbGNvbWJpbmV8bm9kZ3xub2RpZmZ8bm9kaWdyYXBofG5vZGlzYWJsZXxub2VhfG5vZWJ8bm9lZHxub2VkY29tcGF0aWJsZXxub2VrfG5vZW5kb2ZsaW5lfG5vZW9sfG5vZXF1YWxhbHdheXN8bm9lcnJvcmJlbGxzfG5vZXNja2V5c3xub2V0fG5vZXh8bm9leHBhbmR0YWJ8bm9leHJjfG5vZmVufG5vZmt8bm9ma21hcHxub2ZvbGRlbmFibGV8bm9nZHxub2dkZWZhdWx0fG5vZ3VpcHR5fG5vaGlkfG5vaGlkZGVufG5vaGt8bm9oa21hcHxub2hrbWFwcHxub2hrcHxub2hsc3xub2ljfG5vaWNvbnxub2lnbm9yZWNhc2V8bm9pbXxub2ltY3xub2ltY21kbGluZXxub2ltZHxub2luY3NlYXJjaHxub2luZnxub2luZmVyY2FzZXxub2luc2VydG1vZGV8bm9pc3xub2pvaW5zcGFjZXN8bm9qc3xub2xhenlyZWRyYXd8bm9sYnJ8bm9saW5lYnJlYWt8bm9saXNwfG5vbGlzdHxub2xvYWRwbHVnaW5zfG5vbHBsfG5vbHp8bm9tYXxub21hY2F0c3VpfG5vbWFnaWN8bm9taHxub21sfG5vbW9kfG5vbW9kZWxpbmV8bm9tb2RpZmlhYmxlfG5vbW9kaWZpZWR8bm9tb3JlfG5vbW91c2VmfG5vbW91c2Vmb2N1c3xub21vdXNlaGlkZXxub251fG5vbnVtYmVyfG5vb2Rldnxub29wZW5kZXZpY2V8bm9wYXN0ZXxub3BpfG5vcHJlc2VydmVpbmRlbnR8bm9wcmV2aWV3d2luZG93fG5vcHJvbXB0fG5vcHZ3fG5vcmVhZG9ubHl8bm9yZW1hcHxub3Jlc3RvcmVzY3JlZW58bm9yZXZpbnN8bm9yaXxub3JpZ2h0bGVmdHxub3JpZ2h0bGVmdGNtZHxub3JsfG5vcmxjfG5vcm98bm9yc3xub3J1fG5vcnVsZXJ8bm9zYnxub3NjfG5vc2NifG5vc2Nyb2xsYmluZHxub3Njc3xub3NlY3VyZXxub3NmdHxub3NoZWxsc2xhc2h8bm9zaGVsbHRlbXB8bm9zaGlmdHJvdW5kfG5vc2hvcnRuYW1lfG5vc2hvd2NtZHxub3Nob3dmdWxsdGFnfG5vc2hvd21hdGNofG5vc2hvd21vZGV8bm9zaXxub3NtfG5vc21hcnRjYXNlfG5vc21hcnRpbmRlbnR8bm9zbWFydHRhYnxub3NtZHxub3NufG5vc29sfG5vc3BlbGx8bm9zcGxpdGJlbG93fG5vc3BsaXRyaWdodHxub3Nwcnxub3NyfG5vc3NsfG5vc3RhfG5vc3RhcnRvZmxpbmV8bm9zdG1wfG5vc3dhcGZpbGV8bm9zd2Z8bm90YXxub3RhZ2JzZWFyY2h8bm90YWdyZWxhdGl2ZXxub3RhZ3N0YWNrfG5vdGJpfG5vdGJpZGl8bm90YnN8bm90ZXJtYmlkaXxub3RlcnNlfG5vdGV4dGF1dG98bm90ZXh0bW9kZXxub3RmfG5vdGdzdHxub3RpbGRlb3B8bm90aW1lb3V0fG5vdGl0bGV8bm90b3xub3RvcHxub3RyfG5vdHRpbWVvdXR8bm90dHlidWlsdGlufG5vdHR5ZmFzdHxub3R4fG5vdmJ8bm92aXN1YWxiZWxsfG5vd2F8bm93YXJufG5vd2J8bm93ZWlyZGludmVydHxub3dmaHxub3dmd3xub3dpbGRtZW51fG5vd2luZml4aGVpZ2h0fG5vd2luZml4d2lkdGh8bm93aXZ8bm93bW51fG5vd3JhcHxub3dyYXBzY2FufG5vd3JpdGV8bm93cml0ZWFueXxub3dyaXRlYmFja3VwfG5vd3N8bnJmb3JtYXRzfG51bWJlcndpZHRofG51d3xvZGV2fG9mdHxvZnV8b21uaWZ1bmN8b3BlbmRldmljZXxvcGVyYXRvcmZ1bmN8b3BmdW5jfG9zZmlsZXR5cGV8cGF8cGFyYXxwYXJhZ3JhcGhzfHBhc3RlfHBhc3RldG9nZ2xlfHBhdGNoZXhwcnxwYXRjaG1vZGV8cGF0aHxwZGV2fHBlbmN8cGV4fHBleHByfHBmbnxwaHxwaGVhZGVyfHBpfHBtfHBtYmNzfHBtYmZufHBvcHR8cHJlc2VydmVpbmRlbnR8cHJldmlld2hlaWdodHxwcmV2aWV3d2luZG93fHByaW50ZGV2aWNlfHByaW50ZW5jb2Rpbmd8cHJpbnRleHByfHByaW50Zm9udHxwcmludGhlYWRlcnxwcmludG1iY2hhcnNldHxwcmludG1iZm9udHxwcmludG9wdGlvbnN8cHJvbXB0fHB0fHB1bWhlaWdodHxwdmh8cHZ3fHFlfHF1b3RlZXNjYXBlfHJlYWRvbmx5fHJlbWFwfHJlcG9ydHxyZXN0b3Jlc2NyZWVufHJldmluc3xyaWdodGxlZnR8cmlnaHRsZWZ0Y21kfHJsfHJsY3xyb3xyc3xydHB8cnVmfHJ1bGVyfHJ1bGVyZm9ybWF0fHJ1bnRpbWVwYXRofHNib3xzY3xzY2J8c2NyfHNjcm9sbHxzY3JvbGxiaW5kfHNjcm9sbGp1bXB8c2Nyb2xsb2ZmfHNjcm9sbG9wdHxzY3N8c2VjdHxzZWN0aW9uc3xzZWN1cmV8c2VsfHNlbGVjdGlvbnxzZWxlY3Rtb2RlfHNlc3Npb25vcHRpb25zfHNmdHxzaGNmfHNoZWxsY21kZmxhZ3xzaGVsbHBpcGV8c2hlbGxxdW90ZXxzaGVsbHJlZGlyfHNoZWxsc2xhc2h8c2hlbGx0ZW1wfHNoZWxsdHlwZXxzaGVsbHhxdW90ZXxzaGlmdHJvdW5kfHNoaWZ0d2lkdGh8c2htfHNob3J0bWVzc3xzaG9ydG5hbWV8c2hvd2JyZWFrfHNob3djbWR8c2hvd2Z1bGx0YWd8c2hvd21hdGNofHNob3dtb2RlfHNob3d0YWJsaW5lfHNocXxzaXxzaWRlc2Nyb2xsfHNpZGVzY3JvbGxvZmZ8c2lzb3xzanxzbG18c21hcnRjYXNlfHNtYXJ0aW5kZW50fHNtYXJ0dGFifHNtY3xzbWR8c29mdHRhYnN0b3B8c29sfHNwY3xzcGVsbHxzcGVsbGNhcGNoZWNrfHNwZWxsZmlsZXxzcGVsbGxhbmd8c3BlbGxzdWdnZXN0fHNwZnxzcGx8c3BsaXRiZWxvd3xzcGxpdHJpZ2h0fHNwc3xzcnxzcnJ8c3N8c3NsfHNzb3B8c3RhbHxzdGFydG9mbGluZXxzdGF0dXNsaW5lfHN0bHxzdG1wfHN1fHN1YXxzdWZmaXhlc3xzdWZmaXhlc2FkZHxzd3xzd2FwZmlsZXxzd2Fwc3luY3xzd2J8c3dmfHN3aXRjaGJ1Znxzd3N8c3hxfHN5bnxzeW5tYXhjb2x8c3ludGF4fHRfQUJ8dF9BRnx0X0FMfHRfQ1N8dF9DVnx0X0NlfHRfQ298dF9Dc3x0X0RMfHRfRUl8dF9GMXx0X0YyfHRfRjN8dF9GNHx0X0Y1fHRfRjZ8dF9GN3x0X0Y4fHRfRjl8dF9JRXx0X0lTfHRfSzF8dF9LM3x0X0s0fHRfSzV8dF9LNnx0X0s3fHRfSzh8dF9LOXx0X0tBfHRfS0J8dF9LQ3x0X0tEfHRfS0V8dF9LRnx0X0tHfHRfS0h8dF9LSXx0X0tKfHRfS0t8dF9LTHx0X1JJfHRfUlZ8dF9TSXx0X1NifHRfU2Z8dF9XUHx0X1dTfHRfWkh8dF9aUnx0X2FsfHRfYmN8dF9jZHx0X2NlfHRfY2x8dF9jbXx0X2NzfHRfZGF8dF9kYnx0X2RsfHRfZnN8dF9rMXx0X2syfHRfazN8dF9rNHx0X2s1fHRfazZ8dF9rN3x0X2s4fHRfazl8dF9rQnx0X2tEfHRfa0l8dF9rTnx0X2tQfHRfa2J8dF9rZHx0X2tlfHRfa2h8dF9rbHx0X2tyfHRfa3N8dF9rdXx0X2xlfHRfbWJ8dF9tZHx0X21lfHRfbXJ8dF9tc3x0X25kfHRfb3B8dF9zZXx0X3NvfHRfc3J8dF90ZXx0X3RpfHRfdHN8dF91ZXx0X3VzfHRfdXR8dF92Ynx0X3ZlfHRfdml8dF92c3x0X3hzfHRhYmxpbmV8dGFicGFnZW1heHx0YWJzdG9wfHRhZ2JzZWFyY2h8dGFnbGVuZ3RofHRhZ3JlbGF0aXZlfHRhZ3N0YWNrfHRhbHx0Ynx0Yml8dGJpZGl8dGJpc3x0YnN8dGVuY3x0ZXJtfHRlcm1iaWRpfHRlcm1lbmNvZGluZ3x0ZXJzZXx0ZXh0YXV0b3x0ZXh0bW9kZXx0ZXh0d2lkdGh8dGdzdHx0aGVzYXVydXN8dGlsZGVvcHx0aW1lb3V0fHRpbWVvdXRsZW58dGl0bGV8dGl0bGVsZW58dGl0bGVvbGR8dGl0bGVzdHJpbmd8dG9vbGJhcnx0b29sYmFyaWNvbnNpemV8dG9wfHRwbXx0c2x8dHNyfHR0aW1lb3V0fHR0aW1lb3V0bGVufHR0bXx0dHl8dHR5YnVpbHRpbnx0dHlmYXN0fHR0eW18dHR5bW91c2V8dHR5c2Nyb2xsfHR0eXR5cGV8dHd8dHh8dWN8dWx8dW5kb2xldmVsc3x1cGRhdGVjb3VudHx1cGRhdGV0aW1lfHV0fHZifHZic3x2ZGlyfHZlcmJvc2VmaWxlfHZmaWxlfHZpZXdkaXJ8dmlld29wdGlvbnN8dmltaW5mb3x2aXJ0dWFsZWRpdHx2aXN1YWxiZWxsfHZvcHx3YWt8d2Fybnx3Ynx3Y3x3Y218d2R8d2VpcmRpbnZlcnR8d2ZofHdmd3x3aGljaHdyYXB8d2l8d2lnfHdpbGRjaGFyfHdpbGRjaGFybXx3aWxkaWdub3JlfHdpbGRtZW51fHdpbGRtb2RlfHdpbGRvcHRpb25zfHdpbXx3aW5hbHRrZXlzfHdpbmRvd3x3aW5maXhoZWlnaHR8d2luZml4d2lkdGh8d2luaGVpZ2h0fHdpbm1pbmhlaWdodHx3aW5taW53aWR0aHx3aW53aWR0aHx3aXZ8d2l3fHdtfHdtaHx3bW51fHdtd3x3b3B8d3JhcHx3cmFwbWFyZ2lufHdyYXBzY2FufHdyaXRlYW55fHdyaXRlYmFja3VwfHdyaXRlZGVsYXl8d3cpXFxiLyxcblx0J251bWJlcic6IC9cXGIoPzoweFtcXGRhLWZdK3xcXGQrKD86XFwuXFxkKyk/KVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvXFx8XFx8fCYmfFstKy5dPT98Wz0hXSg/Ols9fl1bIz9dPyk/fFs8Pl09P1sjP10/fFsqXFwvJT9dfFxcYig/OmlzKD86bm90KT8pXFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fVtcXF0oKSw7Ol0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXNbJ3Zpc3VhbC1iYXNpYyddID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvKD86WydcdTIwMThcdTIwMTldfFJFTVxcYikoPzpbXlxcclxcbl9dfF8oPzpcXHJcXG4/fFxcbik/KSovaSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdrZXl3b3JkJzogL15SRU0vaVxuXHRcdH1cblx0fSxcblx0J2RpcmVjdGl2ZSc6IHtcblx0XHRwYXR0ZXJuOiAvIyg/OkNvbnN0fEVsc2V8RWxzZUlmfEVuZHxFeHRlcm5hbENoZWNrc3VtfEV4dGVybmFsU291cmNlfElmfFJlZ2lvbikoPzpcXGJfWyBcXHRdKig/Olxcclxcbj98XFxuKXwuKSsvaSxcblx0XHRhbGlhczogJ3Byb3BlcnR5Jyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXFwkP1tcIlx1MjAxQ1x1MjAxRF0oPzpbXCJcdTIwMUNcdTIwMURdezJ9fFteXCJcdTIwMUNcdTIwMURdKSpbXCJcdTIwMUNcdTIwMURdQz8vaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2RhdGUnOiB7XG5cdFx0cGF0dGVybjogLyNbIFxcdF0qKD86XFxkKyhbLy1dKVxcZCtcXDFcXGQrKD86WyBcXHRdKyg/OlxcZCtbIFxcdF0qKD86QU18UE0pfFxcZCs6XFxkKyg/OjpcXGQrKT8oPzpbIFxcdF0qKD86QU18UE0pKT8pKT98XFxkK1sgXFx0XSooPzpBTXxQTSl8XFxkKzpcXGQrKD86OlxcZCspPyg/OlsgXFx0XSooPzpBTXxQTSkpPylbIFxcdF0qIy9pLFxuXHRcdGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnbnVtYmVyJzogLyg/Oig/OlxcYlxcZCsoPzpcXC5cXGQrKT98XFwuXFxkKykoPzpFWystXT9cXGQrKT98JltIT11bXFxkQS1GXSspKD86W0ZSRF18VT9bSUxTXSk/L2ksXG5cdCdib29sZWFuJzogL1xcYig/OkZhbHNlfE5vdGhpbmd8VHJ1ZSlcXGIvaSxcblx0J2tleXdvcmQnOiAvXFxiKD86QWRkSGFuZGxlcnxBZGRyZXNzT2Z8QWxpYXN8QW5kKD86QWxzbyk/fEFzfEJvb2xlYW58QnlSZWZ8Qnl0ZXxCeVZhbHxDYWxsfENhc2V8Q2F0Y2h8Qyg/OkJvb2x8Qnl0ZXxDaGFyfERhdGV8RGJsfERlY3xJbnR8TG5nfE9ianxTQnl0ZXxTaG9ydHxTbmd8U3RyfFR5cGV8VUludHxVTG5nfFVTaG9ydCl8Q2hhcnxDbGFzc3xDb25zdHxDb250aW51ZXxDdXJyZW5jeXxEYXRlfERlY2ltYWx8RGVjbGFyZXxEZWZhdWx0fERlbGVnYXRlfERpbXxEaXJlY3RDYXN0fERvfERvdWJsZXxFYWNofEVsc2UoPzpJZik/fEVuZCg/OklmKT98RW51bXxFcmFzZXxFcnJvcnxFdmVudHxFeGl0fEZpbmFsbHl8Rm9yfEZyaWVuZHxGdW5jdGlvbnxHZXQoPzpUeXBlfFhNTE5hbWVzcGFjZSk/fEdsb2JhbHxHb1N1YnxHb1RvfEhhbmRsZXN8SWZ8SW1wbGVtZW50c3xJbXBvcnRzfElufEluaGVyaXRzfEludGVnZXJ8SW50ZXJmYWNlfElzfElzTm90fExldHxMaWJ8TGlrZXxMb25nfExvb3B8TWV8TW9kfE1vZHVsZXxNdXN0KD86SW5oZXJpdHxPdmVycmlkZSl8TXkoPzpCYXNlfENsYXNzKXxOYW1lc3BhY2V8TmFycm93aW5nfE5ld3xOZXh0fE5vdCg/OkluaGVyaXRhYmxlfE92ZXJyaWRhYmxlKT98T2JqZWN0fE9mfE9ufE9wZXJhdG9yfE9wdGlvbig/OmFsKT98T3IoPzpFbHNlKT98T3V0fE92ZXJsb2Fkc3xPdmVycmlkYWJsZXxPdmVycmlkZXN8UGFyYW1BcnJheXxQYXJ0aWFsfFByaXZhdGV8UHJvcGVydHl8UHJvdGVjdGVkfFB1YmxpY3xSYWlzZUV2ZW50fFJlYWRPbmx5fFJlRGltfFJlbW92ZUhhbmRsZXJ8UmVzdW1lfFJldHVybnxTQnl0ZXxTZWxlY3R8U2V0fFNoYWRvd3N8U2hhcmVkfHNob3J0fFNpbmdsZXxTdGF0aWN8U3RlcHxTdG9wfFN0cmluZ3xTdHJ1Y3R1cmV8U3VifFN5bmNMb2NrfFRoZW58VGhyb3d8VG98VHJ5fFRyeUNhc3R8VHlwZXxUeXBlT2Z8VSg/OkludGVnZXJ8TG9uZ3xTaG9ydCl8VW50aWx8VXNpbmd8VmFyaWFudHxXZW5kfFdoZW58V2hpbGV8V2lkZW5pbmd8V2l0aCg/OkV2ZW50cyk/fFdyaXRlT25seXxYb3IpXFxiL2ksXG5cdCdvcGVyYXRvcic6IC9bK1xcLSovXFxcXF48PT4mI0AkJSFdfFxcYl8oPz1bIFxcdF0qW1xcclxcbl0pLyxcblx0J3B1bmN0dWF0aW9uJzogL1t7fSgpLiw6P10vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMudmIgPSBQcmlzbS5sYW5ndWFnZXNbJ3Zpc3VhbC1iYXNpYyddO1xuUHJpc20ubGFuZ3VhZ2VzLnZiYSA9IFByaXNtLmxhbmd1YWdlc1sndmlzdWFsLWJhc2ljJ107XG5cblByaXNtLmxhbmd1YWdlcy53YXJwc2NyaXB0ID0ge1xuXHQnY29tbWVudCc6IC8jLip8XFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cIlxcXFxcXHJcXG5dfFxcXFwuKSpcInwnKD86W14nXFxcXFxcclxcbl18XFxcXC4pKid8PCcoPzpbXlxcXFwnXXwnKD8hPil8XFxcXC4pKic+Lyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3ZhcmlhYmxlJzogL1xcJFxcUysvLFxuXHQnbWFjcm8nOiB7XG5cdFx0cGF0dGVybjogL0BcXFMrLyxcblx0XHRhbGlhczogJ3Byb3BlcnR5J1xuXHR9LFxuXHQvLyBXYXJwU2NyaXB0IGRvZXNuJ3QgaGF2ZSBhbnkga2V5d29yZHMsIHRoZXNlIGFyZSBhbGwgZnVuY3Rpb25zIHVuZGVyIHRoZSBjb250cm9sIGNhdGVnb3J5XG5cdC8vIGh0dHBzOi8vd3d3LndhcnAxMC5pby90YWdzL2NvbnRyb2xcblx0J2tleXdvcmQnOiAvXFxiKD86QlJFQUt8Q0hFQ0tNQUNST3xDT05USU5VRXxDVURGfERFRklORUR8REVGSU5FRE1BQ1JPfEVWQUx8RkFJTHxGT1J8Rk9SRUFDSHxGT1JTVEVQfElGVHxJRlRFfE1TR0ZBSUx8TlJFVFVSTnxSRVRIUk9XfFJFVFVSTnxTV0lUQ0h8VFJZfFVERnxVTlRJTHxXSElMRSlcXGIvLFxuXHQnbnVtYmVyJzogL1srLV0/XFxiKD86TmFOfEluZmluaXR5fFxcZCsoPzpcXC5cXGQqKT8oPzpbRWVdWystXT9cXGQrKT98MHhbXFxkYS1mQS1GXSt8MGJbMDFdKylcXGIvLFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGfFR8ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQncHVuY3R1YXRpb24nOiAvPCV8JT58W3t9W1xcXSgpXS8sXG5cdC8vIFNvbWUgb3BlcmF0b3JzIGZyb20gdGhlIFwib3BlcmF0b3JzXCIgY2F0ZWdvcnlcblx0Ly8gaHR0cHM6Ly93d3cud2FycDEwLmlvL3RhZ3Mvb3BlcmF0b3JzXG5cdCdvcGVyYXRvcic6IC89PXwmJj98XFx8XFx8P3xcXCpcXCo/fD4+Pj98PDx8Wzw+IX5dPT98Wy0vJV5dfFxcKyE/fFxcYig/OkFORHxOT1R8T1IpXFxiL1xufTtcblxuUHJpc20ubGFuZ3VhZ2VzLndhc20gPSB7XG5cdCdjb21tZW50JzogW1xuXHRcdC9cXCg7W1xcc1xcU10qPztcXCkvLFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC87Oy4qLyxcblx0XHRcdGdyZWVkeTogdHJ1ZVxuXHRcdH1cblx0XSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcXFxcW1xcc1xcU118W15cIlxcXFxdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdrZXl3b3JkJzogW1xuXHRcdHtcblx0XHRcdHBhdHRlcm46IC9cXGIoPzphbGlnbnxvZmZzZXQpPS8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J29wZXJhdG9yJzogLz0vXG5cdFx0XHR9XG5cdFx0fSxcblx0XHR7XG5cdFx0XHRwYXR0ZXJuOiAvXFxiKD86KD86ZjMyfGY2NHxpMzJ8aTY0KSg/OlxcLig/OmFic3xhZGR8YW5kfGNlaWx8Y2x6fGNvbnN0fGNvbnZlcnRfW3N1XVxcL2koPzozMnw2NCl8Y29weXNpZ258Y3R6fGRlbW90ZVxcL2Y2NHxkaXYoPzpfW3N1XSk/fGVxej98ZXh0ZW5kX1tzdV1cXC9pMzJ8Zmxvb3J8Z2UoPzpfW3N1XSk/fGd0KD86X1tzdV0pP3xsZSg/Ol9bc3VdKT98bG9hZCg/Oig/Ojh8MTZ8MzIpX1tzdV0pP3xsdCg/Ol9bc3VdKT98bWF4fG1pbnxtdWx8bmVnP3xuZWFyZXN0fG9yfHBvcGNudHxwcm9tb3RlXFwvZjMyfHJlaW50ZXJwcmV0XFwvW2ZpXSg/OjMyfDY0KXxyZW1fW3N1XXxyb3RbbHJdfHNobHxzaHJfW3N1XXxzcXJ0fHN0b3JlKD86OHwxNnwzMik/fHN1Ynx0cnVuYyg/Ol9bc3VdXFwvZig/OjMyfDY0KSk/fHdyYXBcXC9pNjR8eG9yKSk/fG1lbW9yeVxcLig/Omdyb3d8c2l6ZSkpXFxiLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiAvXFwuL1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0L1xcYig/OmFueWZ1bmN8YmxvY2t8YnIoPzpfaWZ8X3RhYmxlKT98Y2FsbCg/Ol9pbmRpcmVjdCk/fGRhdGF8ZHJvcHxlbGVtfGVsc2V8ZW5kfGV4cG9ydHxmdW5jfGdldF8oPzpnbG9iYWx8bG9jYWwpfGdsb2JhbHxpZnxpbXBvcnR8bG9jYWx8bG9vcHxtZW1vcnl8bW9kdWxlfG11dHxub3B8b2Zmc2V0fHBhcmFtfHJlc3VsdHxyZXR1cm58c2VsZWN0fHNldF8oPzpnbG9iYWx8bG9jYWwpfHN0YXJ0fHRhYmxlfHRlZV9sb2NhbHx0aGVufHR5cGV8dW5yZWFjaGFibGUpXFxiL1xuXHRdLFxuXHQndmFyaWFibGUnOiAvXFwkW1xcdyEjJCUmJyorXFwtLi86PD0+P0BcXFxcXmB8fl0rLyxcblx0J251bWJlcic6IC9bKy1dP1xcYig/OlxcZCg/Ol8/XFxkKSooPzpcXC5cXGQoPzpfP1xcZCkqKT8oPzpbZUVdWystXT9cXGQoPzpfP1xcZCkqKT98MHhbXFxkYS1mQS1GXSg/Ol8/W1xcZGEtZkEtRl0pKig/OlxcLltcXGRhLWZBLUZdKD86Xz9bXFxkYS1mQS1EXSkqKT8oPzpbcFBdWystXT9cXGQoPzpfP1xcZCkqKT8pXFxifFxcYmluZlxcYnxcXGJuYW4oPzo6MHhbXFxkYS1mQS1GXSg/Ol8/W1xcZGEtZkEtRF0pKik/XFxiLyxcblx0J3B1bmN0dWF0aW9uJzogL1soKV0vXG59O1xuXG4oZnVuY3Rpb24gKFByaXNtKSB7XG5cblx0dmFyIGlkID0gLyg/OlxcQi18XFxiX3xcXGIpW0EtWmEtel1bXFx3LV0qKD8hW1xcdy1dKS8uc291cmNlO1xuXHR2YXIgdHlwZSA9XG5cdFx0Jyg/OicgK1xuXHRcdC9cXGIoPzp1bnNpZ25lZFxccyspP2xvbmdcXHMrbG9uZyg/IVtcXHctXSkvLnNvdXJjZSArXG5cdFx0J3wnICtcblx0XHQvXFxiKD86dW5yZXN0cmljdGVkfHVuc2lnbmVkKVxccytbYS16XSsoPyFbXFx3LV0pLy5zb3VyY2UgK1xuXHRcdCd8JyArXG5cdFx0Lyg/ISg/OnVucmVzdHJpY3RlZHx1bnNpZ25lZClcXGIpLy5zb3VyY2UgKyBpZCArIC8oPzpcXHMqPCg/OltePD5dfDxbXjw+XSo+KSo+KT8vLnNvdXJjZSArXG5cdFx0JyknICsgLyg/OlxccypcXD8pPy8uc291cmNlO1xuXG5cdHZhciB0eXBlSW5zaWRlID0ge307XG5cblx0UHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ10gPSB7XG5cdFx0J2NvbW1lbnQnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdCdzdHJpbmcnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXCJbXlwiXSpcIi8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXG5cdFx0J25hbWVzcGFjZSc6IHtcblx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYm5hbWVzcGFjZVxccyspLy5zb3VyY2UgKyBpZCksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdH0sXG5cdFx0J2NsYXNzLW5hbWUnOiBbXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IC8oXnxbXlxcdy1dKSg/Oml0ZXJhYmxlfG1hcGxpa2V8c2V0bGlrZSlcXHMqPCg/OltePD5dfDxbXjw+XSo+KSo+Lyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGIoPzphdHRyaWJ1dGV8Y29uc3R8ZGVsZXRlcnxnZXR0ZXJ8b3B0aW9uYWx8c2V0dGVyKVxccyspLy5zb3VyY2UgKyB0eXBlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjYWxsYmFjayByZXR1cm4gdHlwZVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoJygnICsgL1xcYmNhbGxiYWNrXFxzKy8uc291cmNlICsgaWQgKyAvXFxzKj1cXHMqLy5zb3VyY2UgKyAnKScgKyB0eXBlKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0aW5zaWRlOiB0eXBlSW5zaWRlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyB0eXBlZGVmXG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYnR5cGVkZWZcXGJcXHMqKS8uc291cmNlICsgdHlwZSksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRcdGluc2lkZTogdHlwZUluc2lkZVxuXHRcdFx0fSxcblxuXHRcdFx0e1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXGIoPzpjYWxsYmFja3xkaWN0aW9uYXJ5fGVudW18aW50ZXJmYWNlKD86XFxzK21peGluKT8pXFxzKykoPyEoPzppbnRlcmZhY2V8bWl4aW4pXFxiKS8uc291cmNlICsgaWQpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0fSxcblx0XHRcdHtcblx0XHRcdFx0Ly8gaW5oZXJpdGFuY2Vcblx0XHRcdFx0cGF0dGVybjogUmVnRXhwKC8oOlxccyopLy5zb3VyY2UgKyBpZCksXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBpbmNsdWRlcyBhbmQgaW1wbGVtZW50c1xuXHRcdFx0UmVnRXhwKGlkICsgLyg/PVxccysoPzppbXBsZW1lbnRzfGluY2x1ZGVzKVxcYikvLnNvdXJjZSksXG5cdFx0XHR7XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKFxcYig/OmltcGxlbWVudHN8aW5jbHVkZXMpXFxzKykvLnNvdXJjZSArIGlkKSxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdH0sXG5cblx0XHRcdHtcblx0XHRcdFx0Ly8gZnVuY3Rpb24gcmV0dXJuIHR5cGUsIHBhcmFtZXRlciB0eXBlcywgYW5kIGRpY3Rpb25hcnkgbWVtYmVyc1xuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAodHlwZSArICcoPz0nICsgL1xccyooPzpcXC57M31cXHMqKT8vLnNvdXJjZSArIGlkICsgL1xccypbKCksOz1dLy5zb3VyY2UgKyAnKScpLFxuXHRcdFx0XHRpbnNpZGU6IHR5cGVJbnNpZGVcblx0XHRcdH0sXG5cdFx0XSxcblxuXHRcdCdidWlsdGluJzogL1xcYig/OkFycmF5QnVmZmVyfEJpZ0ludDY0QXJyYXl8QmlnVWludDY0QXJyYXl8Qnl0ZVN0cmluZ3xET01TdHJpbmd8RGF0YVZpZXd8RmxvYXQzMkFycmF5fEZsb2F0NjRBcnJheXxGcm96ZW5BcnJheXxJbnQxNkFycmF5fEludDMyQXJyYXl8SW50OEFycmF5fE9ic2VydmFibGVBcnJheXxQcm9taXNlfFVTVlN0cmluZ3xVaW50MTZBcnJheXxVaW50MzJBcnJheXxVaW50OEFycmF5fFVpbnQ4Q2xhbXBlZEFycmF5KVxcYi8sXG5cdFx0J2tleXdvcmQnOiBbXG5cdFx0XHQvXFxiKD86YXN5bmN8YXR0cmlidXRlfGNhbGxiYWNrfGNvbnN0fGNvbnN0cnVjdG9yfGRlbGV0ZXJ8ZGljdGlvbmFyeXxlbnVtfGdldHRlcnxpbXBsZW1lbnRzfGluY2x1ZGVzfGluaGVyaXR8aW50ZXJmYWNlfG1peGlufG5hbWVzcGFjZXxudWxsfG9wdGlvbmFsfG9yfHBhcnRpYWx8cmVhZG9ubHl8cmVxdWlyZWR8c2V0dGVyfHN0YXRpY3xzdHJpbmdpZmllcnx0eXBlZGVmfHVucmVzdHJpY3RlZClcXGIvLFxuXHRcdFx0Ly8gdHlwZSBrZXl3b3Jkc1xuXHRcdFx0L1xcYig/OmFueXxiaWdpbnR8Ym9vbGVhbnxieXRlfGRvdWJsZXxmbG9hdHxpdGVyYWJsZXxsb25nfG1hcGxpa2V8b2JqZWN0fG9jdGV0fHJlY29yZHxzZXF1ZW5jZXxzZXRsaWtlfHNob3J0fHN5bWJvbHx1bmRlZmluZWR8dW5zaWduZWR8dm9pZClcXGIvXG5cdFx0XSxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cblx0XHQnbnVtYmVyJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteXFx3LV0pLT8oPzoweFswLTlhLWZdK3woPzpcXGQrKD86XFwuXFxkKik/fFxcLlxcZCspKD86ZVsrLV0/XFxkKyk/fE5hTnxJbmZpbml0eSkoPyFbXFx3LV0pL2ksXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0fSxcblx0XHQnb3BlcmF0b3InOiAvXFwuezN9fFs9Oj88Pi1dLyxcblx0XHQncHVuY3R1YXRpb24nOiAvWygpe31bXFxdLiw7XS9cblx0fTtcblxuXHRmb3IgKHZhciBrZXkgaW4gUHJpc20ubGFuZ3VhZ2VzWyd3ZWItaWRsJ10pIHtcblx0XHRpZiAoa2V5ICE9PSAnY2xhc3MtbmFtZScpIHtcblx0XHRcdHR5cGVJbnNpZGVba2V5XSA9IFByaXNtLmxhbmd1YWdlc1snd2ViLWlkbCddW2tleV07XG5cdFx0fVxuXHR9XG5cblx0UHJpc20ubGFuZ3VhZ2VzWyd3ZWJpZGwnXSA9IFByaXNtLmxhbmd1YWdlc1snd2ViLWlkbCddO1xuXG59KFByaXNtKSk7XG5cblByaXNtLmxhbmd1YWdlcy53Z3NsID0ge1xuXHQnY29tbWVudCc6IHtcblx0XHRwYXR0ZXJuOiAvXFwvXFwvLip8XFwvXFwqW1xcc1xcU10qPyg/OlxcKlxcL3wkKS8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHR9LFxuXHQnYnVpbHRpbi1hdHRyaWJ1dGUnOiB7XG5cdFx0cGF0dGVybjogLyhAKWJ1aWx0aW5cXCguKj9cXCkvLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXmJ1aWx0aW4vLFxuXHRcdFx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdFx0XHR9LFxuXHRcdFx0J3B1bmN0dWF0aW9uJzogL1soKSxdLyxcblx0XHRcdCdidWlsdC1pbi12YWx1ZXMnOiB7XG5cdFx0XHRcdHBhdHRlcm46IC9cXGIoPzpmcmFnX2RlcHRofGZyb250X2ZhY2luZ3xnbG9iYWxfaW52b2NhdGlvbl9pZHxpbnN0YW5jZV9pbmRleHxsb2NhbF9pbnZvY2F0aW9uX2lkfGxvY2FsX2ludm9jYXRpb25faW5kZXh8bnVtX3dvcmtncm91cHN8cG9zaXRpb258c2FtcGxlX2luZGV4fHNhbXBsZV9tYXNrfHZlcnRleF9pbmRleHx3b3JrZ3JvdXBfaWQpXFxiLyxcblx0XHRcdFx0YWxpYXM6ICdhdHRyLXZhbHVlJyxcblx0XHRcdH0sXG5cdFx0fSxcblx0fSxcblx0J2F0dHJpYnV0ZXMnOiB7XG5cdFx0cGF0dGVybjogLyhAKSg/OmFsaWdufGJpbmRpbmd8Y29tcHV0ZXxjb25zdHxmcmFnbWVudHxncm91cHxpZHxpbnRlcnBvbGF0ZXxpbnZhcmlhbnR8bG9jYXRpb258c2l6ZXx2ZXJ0ZXh8d29ya2dyb3VwX3NpemUpL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2F0dHItbmFtZScsXG5cdH0sXG5cdCdmdW5jdGlvbnMnOiB7XG5cdFx0cGF0dGVybjogL1xcYihmblxccyspW19hLXpBLVpdXFx3Kig/PVsoPF0pLyxcblx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpiaXRjYXN0fGJyZWFrfGNhc2V8Y29uc3R8Y29udGludWV8Y29udGludWluZ3xkZWZhdWx0fGRpc2NhcmR8ZWxzZXxlbmFibGV8ZmFsbHRocm91Z2h8Zm58Zm9yfGZ1bmN0aW9ufGlmfGxldHxsb29wfHByaXZhdGV8cmV0dXJufHN0b3JhZ2V8c3RydWN0fHN3aXRjaHx0eXBlfHVuaWZvcm18dmFyfHdoaWxlfHdvcmtncm91cClcXGIvLFxuXHQnYnVpbHRpbic6IC9cXGIoPzphYnN8YWNvc3xhY29zaHxhbGx8YW55fGFycmF5fGFzaW58YXNpbmh8YXRhbnxhdGFuMnxhdGFuaHxhdG9taWN8YXRvbWljQWRkfGF0b21pY0FuZHxhdG9taWNDb21wYXJlRXhjaGFuZ2VXZWFrfGF0b21pY0V4Y2hhbmdlfGF0b21pY0xvYWR8YXRvbWljTWF4fGF0b21pY01pbnxhdG9taWNPcnxhdG9taWNTdG9yZXxhdG9taWNTdWJ8YXRvbWljWG9yfGJvb2x8Y2VpbHxjbGFtcHxjb3N8Y29zaHxjb3VudExlYWRpbmdaZXJvc3xjb3VudE9uZUJpdHN8Y291bnRUcmFpbGluZ1plcm9zfGNyb3NzfGRlZ3JlZXN8ZGV0ZXJtaW5hbnR8ZGlzdGFuY2V8ZG90fGRwZHh8ZHBkeENvYXJzZXxkcGR4RmluZXxkcGR5fGRwZHlDb2Fyc2V8ZHBkeUZpbmV8ZXhwfGV4cDJ8ZXh0cmFjdEJpdHN8ZjMyfGY2NHxmYWNlRm9yd2FyZHxmaXJzdExlYWRpbmdCaXR8Zmxvb3J8Zm1hfGZyYWN0fGZyZXhwfGZ3aWR0aHxmd2lkdGhDb2Fyc2V8ZndpZHRoRmluZXxpMzJ8aTY0fGluc2VydEJpdHN8aW52ZXJzZVNxcnR8bGRleHB8bGVuZ3RofGxvZ3xsb2cyfG1hdFsyLTRdeFsyLTRdfG1heHxtaW58bWl4fG1vZGZ8bm9ybWFsaXplfG92ZXJyaWRlfHBhY2syeDE2ZmxvYXR8cGFjazJ4MTZzbm9ybXxwYWNrMngxNnVub3JtfHBhY2s0eDhzbm9ybXxwYWNrNHg4dW5vcm18cG93fHB0cnxxdWFudGl6ZVRvRjE2fHJhZGlhbnN8cmVmbGVjdHxyZWZyYWN0fHJldmVyc2VCaXRzfHJvdW5kfHNhbXBsZXJ8c2FtcGxlcl9jb21wYXJpc29ufHNlbGVjdHxzaGlmdExlZnR8c2hpZnRSaWdodHxzaWdufHNpbnxzaW5ofHNtb290aHN0ZXB8c3FydHxzdGF0aWNBc3NlcnR8c3RlcHxzdG9yYWdlQmFycmllcnx0YW58dGFuaHx0ZXh0dXJlRGltZW5zaW9uc3x0ZXh0dXJlR2F0aGVyfHRleHR1cmVHYXRoZXJDb21wYXJlfHRleHR1cmVMb2FkfHRleHR1cmVOdW1MYXllcnN8dGV4dHVyZU51bUxldmVsc3x0ZXh0dXJlTnVtU2FtcGxlc3x0ZXh0dXJlU2FtcGxlfHRleHR1cmVTYW1wbGVCaWFzfHRleHR1cmVTYW1wbGVDb21wYXJlfHRleHR1cmVTYW1wbGVDb21wYXJlTGV2ZWx8dGV4dHVyZVNhbXBsZUdyYWR8dGV4dHVyZVNhbXBsZUxldmVsfHRleHR1cmVTdG9yZXx0ZXh0dXJlXzFkfHRleHR1cmVfMmR8dGV4dHVyZV8yZF9hcnJheXx0ZXh0dXJlXzNkfHRleHR1cmVfY3ViZXx0ZXh0dXJlX2N1YmVfYXJyYXl8dGV4dHVyZV9kZXB0aF8yZHx0ZXh0dXJlX2RlcHRoXzJkX2FycmF5fHRleHR1cmVfZGVwdGhfY3ViZXx0ZXh0dXJlX2RlcHRoX2N1YmVfYXJyYXl8dGV4dHVyZV9kZXB0aF9tdWx0aXNhbXBsZWRfMmR8dGV4dHVyZV9tdWx0aXNhbXBsZWRfMmR8dGV4dHVyZV9zdG9yYWdlXzFkfHRleHR1cmVfc3RvcmFnZV8yZHx0ZXh0dXJlX3N0b3JhZ2VfMmRfYXJyYXl8dGV4dHVyZV9zdG9yYWdlXzNkfHRyYW5zcG9zZXx0cnVuY3x1MzJ8dTY0fHVucGFjazJ4MTZmbG9hdHx1bnBhY2syeDE2c25vcm18dW5wYWNrMngxNnVub3JtfHVucGFjazR4OHNub3JtfHVucGFjazR4OHVub3JtfHZlY1syLTRdfHdvcmtncm91cEJhcnJpZXIpXFxiLyxcblx0J2Z1bmN0aW9uLWNhbGxzJzoge1xuXHRcdHBhdHRlcm46IC9cXGJbX2Etel1cXHcqKD89XFwoKS9pLFxuXHRcdGFsaWFzOiAnZnVuY3Rpb24nLFxuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IC9cXGIoPzpbQS1aXVtBLVphLXowLTldKilcXGIvLFxuXHQnYm9vbC1saXRlcmFsJzoge1xuXHRcdHBhdHRlcm46IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0YWxpYXM6ICdib29sZWFuJyxcblx0fSxcblx0J2hleC1pbnQtbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiMFt4WF1bMC05YS1mQS1GXStbaXVdP1xcYig/IVsucFBdKS8sXG5cdFx0YWxpYXM6ICdudW1iZXInLFxuXHR9LFxuXHQnaGV4LWZsb2F0LWxpdGVyYWwnOiB7XG5cdFx0cGF0dGVybjogL1xcYjBbeFhdWzAtOWEtZkEtRl0qKD86XFwuWzAtOWEtZkEtRl0qKT8oPzpbcFBdWystXT9cXGQrW2ZoXT8pPy8sIGFsaWFzOiAnbnVtYmVyJ1xuXHR9LFxuXHQnZGVjaW1hbC1mbG9hdC1saXRlcmFsJzogW1xuXHRcdHsgcGF0dGVybjogL1xcZCpcXC5cXGQrKD86W2VFXSg/OlxcK3wtKT9cXGQrKT9bZmhdPy8sIGFsaWFzOiAnbnVtYmVyJyB9LFxuXHRcdHsgcGF0dGVybjogL1xcZCtcXC5cXGQqKD86W2VFXSg/OlxcK3wtKT9cXGQrKT9bZmhdPy8sIGFsaWFzOiAnbnVtYmVyJyB9LFxuXHRcdHsgcGF0dGVybjogL1xcZCtbZUVdKD86XFwrfC0pP1xcZCtbZmhdPy8sIGFsaWFzOiAnbnVtYmVyJyB9LFxuXHRcdHsgcGF0dGVybjogL1xcYlxcZCtbZmhdXFxiLywgYWxpYXM6ICdudW1iZXInIH0sXG5cdF0sXG5cdCdpbnQtbGl0ZXJhbCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFxkK1tpdV0/XFxiLyxcblx0XHRhbGlhczogJ251bWJlcicsXG5cdH0sXG5cdCdvcGVyYXRvcic6IFtcblx0XHR7IHBhdHRlcm46IC8oPzpcXF58fnxcXHwoPyFcXHwpfFxcfFxcfHwmJnw8PHw+PnwhKSg/IT0pLyB9LFxuXHRcdHsgcGF0dGVybjogLyYoPyFbJj1dKS8gfSxcblx0XHR7IHBhdHRlcm46IC8oPzpcXCs9fC09fFxcKj18XFwvPXwlPXxcXF49fCY9fFxcfD18PDw9fD4+PSkvIH0sXG5cdFx0eyBwYXR0ZXJuOiAvKF58W148Pj0hXSk9KD8hWz0+XSkvLCBsb29rYmVoaW5kOiB0cnVlIH0sXG5cdFx0eyBwYXR0ZXJuOiAvKD86PT18IT18PD18XFwrXFwrfC0tfChefFtePV0pPj0pLywgbG9va2JlaGluZDogdHJ1ZSB9LFxuXHRcdHsgcGF0dGVybjogLyg/Oig/OlsrJV18KD86XFwqKD8hXFx3KSkpKD8hPSkpfCg/Oi0oPyE+KSl8KD86XFwvKD8hXFwvKSkvIH0sXG5cdFx0eyBwYXR0ZXJuOiAvLT4vIH0sXG5cdF0sXG5cdCdwdW5jdHVhdGlvbic6IC9bQCgpe31bXFxdLDs8PjouXS8sXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMud2lraSA9IFByaXNtLmxhbmd1YWdlcy5leHRlbmQoJ21hcmt1cCcsIHtcblx0J2Jsb2NrLWNvbW1lbnQnOiB7XG5cdFx0cGF0dGVybjogLyhefFteXFxcXF0pXFwvXFwqW1xcc1xcU10qP1xcKlxcLy8sXG5cdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdH0sXG5cdCdoZWFkaW5nJzoge1xuXHRcdHBhdHRlcm46IC9eKD0rKVtePVxcclxcbl0uKj9cXDEvbSxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9ePSt8PSskLyxcblx0XHRcdCdpbXBvcnRhbnQnOiAvLisvXG5cdFx0fVxuXHR9LFxuXHQnZW1waGFzaXMnOiB7XG5cdFx0Ly8gVE9ETyBNdWx0aS1saW5lXG5cdFx0cGF0dGVybjogLygnezIsNX0pLis/XFwxLyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCdib2xkLWl0YWxpYyc6IHtcblx0XHRcdFx0cGF0dGVybjogLygnJycnJykuKz8oPz1cXDEpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0YWxpYXM6IFsnYm9sZCcsICdpdGFsaWMnXVxuXHRcdFx0fSxcblx0XHRcdCdib2xkJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCcnJylbXiddKD86Lio/W14nXSk/KD89XFwxKS8sXG5cdFx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHQnaXRhbGljJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvKCcnKVteJ10oPzouKj9bXiddKT8oPz1cXDEpLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdCdwdW5jdHVhdGlvbic6IC9eJycrfCcnKyQvXG5cdFx0fVxuXHR9LFxuXHQnaHInOiB7XG5cdFx0cGF0dGVybjogL14tezQsfS9tLFxuXHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdH0sXG5cdCd1cmwnOiBbXG5cdFx0L0lTQk4gKyg/Ojk3Wzg5XVsgLV0/KT8oPzpcXGRbIC1dPyl7OX1bXFxkeF1cXGJ8KD86UE1JRHxSRkMpICtcXGQrL2ksXG5cdFx0L1xcW1xcWy4rP1xcXVxcXXxcXFsuKz9cXF0vXG5cdF0sXG5cdCd2YXJpYWJsZSc6IFtcblx0XHQvX19bQS1aXStfXy8sXG5cdFx0Ly8gRklYTUUgTmVzdGVkIHN0cnVjdHVyZXMgc2hvdWxkIGJlIGhhbmRsZWRcblx0XHQvLyB7e2Zvcm1hdG51bTp7eyNleHByOnt7ezN9fX19fX19XG5cdFx0L1xce3szfS4rP1xcfXszfS8sXG5cdFx0L1xce1xcey4rP1xcfVxcfS9cblx0XSxcblx0J3N5bWJvbCc6IFtcblx0XHQvXiNyZWRpcmVjdC9pbSxcblx0XHQvfnszLDV9L1xuXHRdLFxuXHQvLyBIYW5kbGUgdGFibGUgYXR0cnM6XG5cdC8vIHt8XG5cdC8vICEgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnQ7XCJ8IEl0ZW1cblx0Ly8gfH1cblx0J3RhYmxlLXRhZyc6IHtcblx0XHRwYXR0ZXJuOiAvKCg/Ol58W3whXSlbfCFdKVtefFxcclxcbl0rXFx8KD8hXFx8KS9tLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndGFibGUtYmFyJzoge1xuXHRcdFx0XHRwYXR0ZXJuOiAvXFx8JC8sXG5cdFx0XHRcdGFsaWFzOiAncHVuY3R1YXRpb24nXG5cdFx0XHR9LFxuXHRcdFx0cmVzdDogUHJpc20ubGFuZ3VhZ2VzLm1hcmt1cFsndGFnJ10uaW5zaWRlXG5cdFx0fVxuXHR9LFxuXHQncHVuY3R1YXRpb24nOiAvXig/Olxce1xcfHxcXHxcXH18XFx8LXxbKiM6OyF8XSl8XFx8XFx8fCEhL21cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMuaW5zZXJ0QmVmb3JlKCd3aWtpJywgJ3RhZycsIHtcblx0Ly8gUHJldmVudCBoaWdobGlnaHRpbmcgaW5zaWRlIDxub3dpa2k+LCA8c291cmNlPiBhbmQgPHByZT4gdGFnc1xuXHQnbm93aWtpJzoge1xuXHRcdHBhdHRlcm46IC88KG5vd2lraXxwcmV8c291cmNlKVxcYltePl0qPltcXHNcXFNdKj88XFwvXFwxPi9pLFxuXHRcdGluc2lkZToge1xuXHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0cGF0dGVybjogLzwoPzpub3dpa2l8cHJlfHNvdXJjZSlcXGJbXj5dKj58PFxcLyg/Om5vd2lraXxwcmV8c291cmNlKT4vaSxcblx0XHRcdFx0aW5zaWRlOiBQcmlzbS5sYW5ndWFnZXMubWFya3VwWyd0YWcnXS5pbnNpZGVcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0pO1xuXG5QcmlzbS5sYW5ndWFnZXMud29sZnJhbSA9IHtcblx0J2NvbW1lbnQnOiAvLyBBbGxvdyBvbmUgbGV2ZWwgb2YgbmVzdGluZyAtIG5vdGU6IHJlZ2V4IHRha2VuIGZyb20gYXBwbGVzY2lwdFxuXHRcdC9cXChcXCooPzpcXChcXCooPzpbXipdfFxcKig/IVxcKSkpKlxcKlxcKXwoPyFcXChcXCopW1xcc1xcU10pKj9cXCpcXCkvLFxuXHQnc3RyaW5nJzoge1xuXHRcdHBhdHRlcm46IC9cIig/OlxcXFwufFteXCJcXFxcXFxyXFxuXSkqXCIvLFxuXHRcdGdyZWVkeTogdHJ1ZVxuXHR9LFxuXHQna2V5d29yZCc6IC9cXGIoPzpBYnN8QWJzQXJnfEFjY3VyYWN5fEJsb2NrfERvfEZvcnxGdW5jdGlvbnxJZnxNYW5pcHVsYXRlfE1vZHVsZXxOZXN0fE5lc3RMaXN0fE5vbmV8UmV0dXJufFN3aXRjaHxUYWJsZXxXaGljaHxXaGlsZSlcXGIvLFxuXHQnY29udGV4dCc6IHtcblx0XHRwYXR0ZXJuOiAvXFxiXFx3K2ArXFx3Ki8sXG5cdFx0YWxpYXM6ICdjbGFzcy1uYW1lJ1xuXHR9LFxuXHQnYmxhbmsnOiB7XG5cdFx0cGF0dGVybjogL1xcYlxcdytfXFxiLyxcblx0XHRhbGlhczogJ3JlZ2V4J1xuXHR9LFxuXHQnZ2xvYmFsLXZhcmlhYmxlJzoge1xuXHRcdHBhdHRlcm46IC9cXCRcXHcrLyxcblx0XHRhbGlhczogJ3ZhcmlhYmxlJ1xuXHR9LFxuXHQnYm9vbGVhbic6IC9cXGIoPzpGYWxzZXxUcnVlKVxcYi8sXG5cdCdudW1iZXInOiAvKD86XFxiKD89XFxkKXxcXEIoPz1cXC4pKSg/OjBbYm9dKT8oPzooPzpcXGR8MHhbXFxkYS1mXSlbXFxkYS1mXSooPzpcXC5cXGQqKT98XFwuXFxkKykoPzplWystXT9cXGQrKT9qP1xcYi9pLFxuXHQnb3BlcmF0b3InOiAvXFwvXFwufDt8PVxcLnxcXF49fFxcXjo9fDo9fDw8fD4+fDxcXHx8XFx8Pnw6PnxcXHwtPnwtPnw8LXxAQEB8QEB8QHxcXC9AfD0hPXw9PT18PT18PXxcXCt8LXxcXFtcXC8tKyU9XFxdPT98IT18XFwqXFwqPz0/fFxcL1xcLz89P3w8Wzw9Pl0/fD5bPT5dP3xbJnxefl0vLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9W1xcXTsoKSwuOl0vXG59O1xuXG5QcmlzbS5sYW5ndWFnZXMubWF0aGVtYXRpY2EgPSBQcmlzbS5sYW5ndWFnZXMud29sZnJhbTtcblByaXNtLmxhbmd1YWdlcy53bCA9IFByaXNtLmxhbmd1YWdlcy53b2xmcmFtO1xuUHJpc20ubGFuZ3VhZ2VzLm5iID0gUHJpc20ubGFuZ3VhZ2VzLndvbGZyYW07XG5cbi8vIGh0dHBzOi8vd3Jlbi5pby9cblxuUHJpc20ubGFuZ3VhZ2VzLndyZW4gPSB7XG5cdC8vIE11bHRpbGluZSBjb21tZW50cyBpbiBXcmVuIGNhbiBoYXZlIG5lc3RlZCBtdWx0aWxpbmUgY29tbWVudHNcblx0Ly8gQ29tbWVudHM6IC8vIGFuZCAvKiAqL1xuXHQnY29tbWVudCc6IFtcblx0XHR7XG5cdFx0XHQvLyBzdXBwb3J0IDMgbGV2ZWxzIG9mIG5lc3Rpbmdcblx0XHRcdC8vIHJlZ2V4OiBcXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8PHNlbGY+KSpcXCpcXC9cblx0XHRcdHBhdHRlcm46IC9cXC9cXCooPzpbXiovXXxcXCooPyFcXC8pfFxcLyg/IVxcKil8XFwvXFwqKD86W14qL118XFwqKD8hXFwvKXxcXC8oPyFcXCopfFxcL1xcKig/OlteKi9dfFxcKig/IVxcLyl8XFwvKD8hXFwqKSkqXFwqXFwvKSpcXCpcXC8pKlxcKlxcLy8sXG5cdFx0XHRncmVlZHk6IHRydWVcblx0XHR9LFxuXHRcdHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXlxcXFw6XSlcXC9cXC8uKi8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fVxuXHRdLFxuXG5cdC8vIFRyaXBsZSBxdW90ZWQgc3RyaW5ncyBhcmUgbXVsdGlsaW5lIGJ1dCBjYW5ub3QgaGF2ZSBpbnRlcnBvbGF0aW9uIChyYXcgc3RyaW5ncylcblx0Ly8gQmFzZWQgb24gcHJpc20tcHl0aG9uLmpzXG5cdCd0cmlwbGUtcXVvdGVkLXN0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCJcIlwiW1xcc1xcU10qP1wiXCJcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnc3RyaW5nJ1xuXHR9LFxuXG5cdC8vIHNlZSBiZWxvd1xuXHQnc3RyaW5nLWxpdGVyYWwnOiBudWxsLFxuXG5cdC8vICMhL3Vzci9iaW4vZW52IHdyZW4gb24gdGhlIGZpcnN0IGxpbmVcblx0J2hhc2hiYW5nJzoge1xuXHRcdHBhdHRlcm46IC9eIyFcXC8uKy8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCdcblx0fSxcblxuXHQvLyBBdHRyaWJ1dGVzIGFyZSBzcGVjaWFsIGtleXdvcmRzIHRvIGFkZCBtZXRhIGRhdGEgdG8gY2xhc3Nlc1xuXHQnYXR0cmlidXRlJzoge1xuXHRcdC8vICMhIGF0dHJpYnV0ZXMgYXJlIHN0b3JlZCBpbiBjbGFzcyBwcm9wZXJ0aWVzXG5cdFx0Ly8gIyFteXZhciA9IHRydWVcblx0XHQvLyAjYXR0cmlidXRlcyBhcmUgbm90IHN0b3JlZCBhbmQgZGlzbWlzc2VkIGF0IGNvbXBpbGF0aW9uXG5cdFx0cGF0dGVybjogLyMhP1sgXFx0XFx1MzAwMF0qXFx3Ky8sXG5cdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHR9LFxuXHQnY2xhc3MtbmFtZSc6IFtcblx0XHR7XG5cdFx0XHQvLyBjbGFzcyBkZWZpbml0aW9uXG5cdFx0XHQvLyBjbGFzcyBNZXRhIHt9XG5cdFx0XHRwYXR0ZXJuOiAvKFxcYmNsYXNzXFxzKylcXHcrLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdC8vIEEgY2xhc3MgbXVzdCBhbHdheXMgc3RhcnQgd2l0aCBhbiB1cHBlcmNhc2UuXG5cdFx0Ly8gRmlsZS5yZWFkXG5cdFx0L1xcYltBLVpdW2EtelxcZF9dKlxcYi8sXG5cdF0sXG5cblx0Ly8gQSBjb25zdGFudCBjYW4gYmUgYSB2YXJpYWJsZSwgY2xhc3MsIHByb3BlcnR5IG9yIG1ldGhvZC4gSnVzdCBuYW1lZCBpbiBhbGwgdXBwZXJjYXNlIGxldHRlcnNcblx0J2NvbnN0YW50JzogL1xcYltBLVpdW0EtWlxcZF9dKlxcYi8sXG5cblx0J251bGwnOiB7XG5cdFx0cGF0dGVybjogL1xcYm51bGxcXGIvLFxuXHRcdGFsaWFzOiAna2V5d29yZCdcblx0fSxcblx0J2tleXdvcmQnOiAvXFxiKD86YXN8YnJlYWt8Y2xhc3N8Y29uc3RydWN0fGNvbnRpbnVlfGVsc2V8Zm9yfGZvcmVpZ258aWZ8aW1wb3J0fGlufGlzfHJldHVybnxzdGF0aWN8c3VwZXJ8dGhpc3x2YXJ8d2hpbGUpXFxiLyxcblx0J2Jvb2xlYW4nOiAvXFxiKD86ZmFsc2V8dHJ1ZSlcXGIvLFxuXHQnbnVtYmVyJzogL1xcYig/OjB4W1xcZGEtZl0rfFxcZCsoPzpcXC5cXGQrKT8oPzplWystXT9cXGQrKT8pXFxiL2ksXG5cblx0Ly8gRnVuY3Rpb25zIGNhbiBiZSBDbGFzcy5tZXRob2QoKVxuXHQnZnVuY3Rpb24nOiAvXFxiW2Etel9dXFx3Kig/PVxccypbKHtdKS9pLFxuXG5cdCdvcGVyYXRvcic6IC88PHw+PnxbPSE8Pl09P3wmJnxcXHxcXHx8Wy0rKi8lfl4mfD86XXxcXC57MiwzfS8sXG5cdCdwdW5jdHVhdGlvbic6IC9bXFxbXFxdKCl7fS4sO10vLFxufTtcblxuUHJpc20ubGFuZ3VhZ2VzLndyZW5bJ3N0cmluZy1saXRlcmFsJ10gPSB7XG5cdC8vIEEgc2luZ2xlIHF1b3RlIHN0cmluZyBpcyBtdWx0aWxpbmUgYW5kIGNhbiBoYXZlIGludGVycG9sYXRpb24gKHNpbWlsYXIgdG8gSlMgYmFja3RpY2tzIGBgKVxuXHRwYXR0ZXJuOiAvKF58W15cXFxcXCJdKVwiKD86W15cXFxcXCIlXXxcXFxcW1xcc1xcU118JSg/IVxcKCl8JVxcKCg/OlteKCldfFxcKCg/OlteKCldfFxcKFteKV0qXFwpKSpcXCkpKlxcKSkqXCIvLFxuXHRsb29rYmVoaW5kOiB0cnVlLFxuXHRncmVlZHk6IHRydWUsXG5cdGluc2lkZToge1xuXHRcdCdpbnRlcnBvbGF0aW9uJzoge1xuXHRcdFx0Ly8gXCIlKGludGVycG9sYXRpb24pXCJcblx0XHRcdHBhdHRlcm46IC8oKD86XnxbXlxcXFxdKSg/OlxcXFx7Mn0pKiklXFwoKD86W14oKV18XFwoKD86W14oKV18XFwoW14pXSpcXCkpKlxcKSkqXFwpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWUsXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J2V4cHJlc3Npb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL14oJVxcKClbXFxzXFxTXSsoPz1cXCkkKS8sXG5cdFx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy53cmVuXG5cdFx0XHRcdH0sXG5cdFx0XHRcdCdpbnRlcnBvbGF0aW9uLXB1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9eJVxcKHxcXCkkLyxcblx0XHRcdFx0XHRhbGlhczogJ3B1bmN0dWF0aW9uJ1xuXHRcdFx0XHR9LFxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3N0cmluZyc6IC9bXFxzXFxTXSsvXG5cdH1cbn07XG5cbihmdW5jdGlvbiAoUHJpc20pIHtcblx0UHJpc20ubGFuZ3VhZ2VzLnhlb3JhID0gUHJpc20ubGFuZ3VhZ2VzLmV4dGVuZCgnbWFya3VwJywge1xuXHRcdCdjb25zdGFudCc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCQoPzpEb21haW5Db250ZW50c3xQYWdlUmVuZGVyRHVyYXRpb24pXFwkLyxcblx0XHRcdGluc2lkZToge1xuXHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0cGF0dGVybjogL1xcJC9cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJEA/KD86Iyt8Wy0rKn49Xl0pP1tcXHcuXStcXCQvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvWyQuXS9cblx0XHRcdFx0fSxcblx0XHRcdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8jK3xbLSsqfj1eQF0vXG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9LFxuXHRcdCdmdW5jdGlvbi1pbmxpbmUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvXFwkRjpbLVxcdy5dK1xcP1stXFx3Ll0rKD86LCg/Oig/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikqXFx8KSooPzooPzpbXFx3K118Wy0jKi5+Xl0rW1xcdytdfD1cXFMpKD86W14kPV18PStbXj1dKSo9KnwoPzpAWy0jXSpcXHcrXFwuW1xcdysuXVxcLiopKyg/Oig/OltcXHcrXXxbLSMqfl5dWy0jKi5+Xl0qW1xcdytdfD1cXFMpKD86W14kPV18PStbXj1dKSo9Kik/KT8pP1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3ZhcmlhYmxlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8oPzpbLHxdKUA/KD86Iyt8Wy0rKn49Xl0pP1tcXHcuXSsvLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvWywufF0vXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0J29wZXJhdG9yJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvIyt8Wy0rKn49XkBdL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXCRcXHc6fFskOj8uLHxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdmdW5jdGlvbi1ibG9jayc6IHtcblx0XHRcdHBhdHRlcm46IC9cXCRYRjpcXHtbLVxcdy5dK1xcP1stXFx3Ll0rKD86LCg/Oig/OkBbLSNdKlxcdytcXC5bXFx3Ky5dXFwuKikqXFx8KSooPzooPzpbXFx3K118Wy0jKi5+Xl0rW1xcdytdfD1cXFMpKD86W14kPV18PStbXj1dKSo9KnwoPzpAWy0jXSpcXHcrXFwuW1xcdysuXVxcLiopKyg/Oig/OltcXHcrXXxbLSMqfl5dWy0jKi5+Xl0qW1xcdytdfD1cXFMpKD86W14kPV18PStbXj1dKSo9Kik/KT8pP1xcfTpYRlxcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9bJDp7fT8uLHxdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdkaXJlY3RpdmUtaW5saW5lJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFxcdyg/OiNcXGQrXFwrPyk/KD86XFxbWy1cXHcuXStcXF0pPzpbLVxcL1xcdy5dK1xcJC8sXG5cdFx0XHRpbnNpZGU6IHtcblx0XHRcdFx0J3B1bmN0dWF0aW9uJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC9cXCQoPzpcXHc6fEMoPzpcXFt8I1xcZCkpP3xbOntbXFxdXS8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQndGFnJzoge1xuXHRcdFx0XHRcdFx0XHRwYXR0ZXJuOiAvI1xcZC9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1ibG9jay1vcGVuJzoge1xuXHRcdFx0cGF0dGVybjogL1xcJFxcdys6XFx7fFxcJFxcdyg/OiNcXGQrXFwrPyk/KD86XFxbWy1cXHcuXStcXF0pPzpbLVxcdy5dKzpcXHsoPzohW0EtWl0rKT8vLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvXFwkKD86XFx3OnxDKD86XFxbfCNcXGQpKT98Wzp7W1xcXV0vLFxuXHRcdFx0XHRcdGluc2lkZToge1xuXHRcdFx0XHRcdFx0J3RhZyc6IHtcblx0XHRcdFx0XHRcdFx0cGF0dGVybjogLyNcXGQvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHQnYXR0cmlidXRlJzoge1xuXHRcdFx0XHRcdHBhdHRlcm46IC8hW0EtWl0rJC8sXG5cdFx0XHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdFx0XHQncHVuY3R1YXRpb24nOiB7XG5cdFx0XHRcdFx0XHRcdHBhdHRlcm46IC8hL1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9LFxuXHRcdCdkaXJlY3RpdmUtYmxvY2stc2VwYXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogL1xcfTpbLVxcdy5dKzpcXHsvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvWzp7fV0vXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRhbGlhczogJ2Z1bmN0aW9uJ1xuXHRcdH0sXG5cdFx0J2RpcmVjdGl2ZS1ibG9jay1jbG9zZSc6IHtcblx0XHRcdHBhdHRlcm46IC9cXH06Wy1cXHcuXStcXCQvLFxuXHRcdFx0aW5zaWRlOiB7XG5cdFx0XHRcdCdwdW5jdHVhdGlvbic6IHtcblx0XHRcdFx0XHRwYXR0ZXJuOiAvWzp7fSRdL1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0YWxpYXM6ICdmdW5jdGlvbidcblx0XHR9XG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUoJ2luc2lkZScsICdwdW5jdHVhdGlvbicsIHtcblx0XHQndmFyaWFibGUnOiBQcmlzbS5sYW5ndWFnZXMueGVvcmFbJ2Z1bmN0aW9uLWlubGluZSddLmluc2lkZVsndmFyaWFibGUnXVxuXHR9LCBQcmlzbS5sYW5ndWFnZXMueGVvcmFbJ2Z1bmN0aW9uLWJsb2NrJ10pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy54ZW9yYWN1YmUgPSBQcmlzbS5sYW5ndWFnZXMueGVvcmE7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdC8qKlxuXHQgKiBJZiB0aGUgZ2l2ZW4gbGFuZ3VhZ2UgaXMgcHJlc2VudCwgaXQgd2lsbCBpbnNlcnQgdGhlIGdpdmVuIGRvYyBjb21tZW50IGdyYW1tYXIgdG9rZW4gaW50byBpdC5cblx0ICpcblx0ICogQHBhcmFtIHtzdHJpbmd9IGxhbmdcblx0ICogQHBhcmFtIHthbnl9IGRvY0NvbW1lbnRcblx0ICovXG5cdGZ1bmN0aW9uIGluc2VydERvY0NvbW1lbnQobGFuZywgZG9jQ29tbWVudCkge1xuXHRcdGlmIChQcmlzbS5sYW5ndWFnZXNbbGFuZ10pIHtcblx0XHRcdFByaXNtLmxhbmd1YWdlcy5pbnNlcnRCZWZvcmUobGFuZywgJ2NvbW1lbnQnLCB7XG5cdFx0XHRcdCdkb2MtY29tbWVudCc6IGRvY0NvbW1lbnRcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdHZhciB0YWcgPSBQcmlzbS5sYW5ndWFnZXMubWFya3VwLnRhZztcblxuXHR2YXIgc2xhc2hEb2NDb21tZW50ID0ge1xuXHRcdHBhdHRlcm46IC9cXC9cXC9cXC8uKi8sXG5cdFx0Z3JlZWR5OiB0cnVlLFxuXHRcdGFsaWFzOiAnY29tbWVudCcsXG5cdFx0aW5zaWRlOiB7XG5cdFx0XHQndGFnJzogdGFnXG5cdFx0fVxuXHR9O1xuXHR2YXIgdGlja0RvY0NvbW1lbnQgPSB7XG5cdFx0cGF0dGVybjogLycnJy4qLyxcblx0XHRncmVlZHk6IHRydWUsXG5cdFx0YWxpYXM6ICdjb21tZW50Jyxcblx0XHRpbnNpZGU6IHtcblx0XHRcdCd0YWcnOiB0YWdcblx0XHR9XG5cdH07XG5cblx0aW5zZXJ0RG9jQ29tbWVudCgnY3NoYXJwJywgc2xhc2hEb2NDb21tZW50KTtcblx0aW5zZXJ0RG9jQ29tbWVudCgnZnNoYXJwJywgc2xhc2hEb2NDb21tZW50KTtcblx0aW5zZXJ0RG9jQ29tbWVudCgndmJuZXQnLCB0aWNrRG9jQ29tbWVudCk7XG5cbn0oUHJpc20pKTtcblxuUHJpc20ubGFuZ3VhZ2VzLnhvam8gPSB7XG5cdCdjb21tZW50Jzoge1xuXHRcdHBhdHRlcm46IC8oPzonfFxcL1xcL3xSZW1cXGIpLisvaSxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J3N0cmluZyc6IHtcblx0XHRwYXR0ZXJuOiAvXCIoPzpcIlwifFteXCJdKSpcIi8sXG5cdFx0Z3JlZWR5OiB0cnVlXG5cdH0sXG5cdCdudW1iZXInOiBbXG5cdFx0Lyg/OlxcYlxcZCsoPzpcXC5cXGQqKT98XFxCXFwuXFxkKykoPzpFWystXT9cXGQrKT8vaSxcblx0XHQvJltiY2hvdV1bYS16XFxkXSsvaVxuXHRdLFxuXHQnZGlyZWN0aXZlJzoge1xuXHRcdHBhdHRlcm46IC8jKD86RWxzZXxFbHNlSWZ8RW5kaWZ8SWZ8UHJhZ21hKVxcYi9pLFxuXHRcdGFsaWFzOiAncHJvcGVydHknXG5cdH0sXG5cdCdrZXl3b3JkJzogL1xcYig/OkFkZEhhbmRsZXJ8QXBwfEFycmF5fEFzKD86c2lnbnMpP3xBdXRvfEJvb2xlYW58QnJlYWt8QnkoPzpSZWZ8VmFsKXxCeXRlfENhbGx8Q2FzZXxDYXRjaHxDRlN0cmluZ1JlZnxDR0Zsb2F0fENsYXNzfENvbG9yfENvbnN0fENvbnRpbnVlfENTdHJpbmd8Q3VycmVuY3l8Q3VycmVudE1ldGhvZE5hbWV8RGVjbGFyZXxEZWxlZ2F0ZXxEaW18RG8oPzp1YmxlfHduVG8pP3xFYWNofEVsc2UoPzpJZik/fEVuZHxFbnVtZXJhdGlvbnxFdmVudHxFeGNlcHRpb258RXhpdHxFeHRlbmRzfEZhbHNlfEZpbmFsbHl8Rm9yfEZ1bmN0aW9ufEdldHxHZXRUeXBlSW5mb3xHbG9iYWx8R09UT3xJZnxJbXBsZW1lbnRzfElufEluaGVyaXRzfEludCg/Ojh8MTZ8MzJ8NjR8ZWdlcnxlcmZhY2UpP3xMaWJ8TG9vcHxNZXxNb2R1bGV8TmV4dHxOaWx8T2JqZWN0fE9wdGlvbmFsfE9TVHlwZXxQYXJhbUFycmF5fFByaXZhdGV8UHJvcGVydHl8UHJvdGVjdGVkfFBTdHJpbmd8UHRyfFJhaXNlKD86RXZlbnQpP3xSZURpbXxSZW1vdmVIYW5kbGVyfFJldHVybnxTZWxlY3QoPzpvcik/fFNlbGZ8U2V0fFNoYXJlZHxTaG9ydHxTaW5nbGV8U29mdHxTdGF0aWN8U3RlcHxTdHJpbmd8U3VifFN1cGVyfFRleHR8VGhlbnxUb3xUcnVlfFRyeXxVYm91bmR8VUludCg/Ojh8MTZ8MzJ8NjR8ZWdlcik/fFVudGlsfFVzaW5nfFZhcig/OmlhbnQpP3xXZW5kfFdoaWxlfFdpbmRvd1B0cnxXU3RyaW5nKVxcYi9pLFxuXHQnb3BlcmF0b3InOiAvPFs9Pl0/fD49P3xbK1xcLSpcXC9cXFxcXj1dfFxcYig/OkFkZHJlc3NPZnxBbmR8Q3R5cGV8SXNBP3xNb2R8TmV3fE5vdHxPcnxXZWFrQWRkcmVzc09mfFhvcilcXGIvaSxcblx0J3B1bmN0dWF0aW9uJzogL1suLDs6KCldL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnkgPSBQcmlzbS5sYW5ndWFnZXMuZXh0ZW5kKCdtYXJrdXAnLCB7XG5cdFx0J3hxdWVyeS1jb21tZW50Jzoge1xuXHRcdFx0cGF0dGVybjogL1xcKDpbXFxzXFxTXSo/OlxcKS8sXG5cdFx0XHRncmVlZHk6IHRydWUsXG5cdFx0XHRhbGlhczogJ2NvbW1lbnQnXG5cdFx0fSxcblx0XHQnc3RyaW5nJzoge1xuXHRcdFx0cGF0dGVybjogLyhbXCInXSkoPzpcXDFcXDF8KD8hXFwxKVtcXHNcXFNdKSpcXDEvLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnZXh0ZW5zaW9uJzoge1xuXHRcdFx0cGF0dGVybjogL1xcKCMuKz8jXFwpLyxcblx0XHRcdGFsaWFzOiAnc3ltYm9sJ1xuXHRcdH0sXG5cdFx0J3ZhcmlhYmxlJzogL1xcJFstXFx3Ol0rLyxcblx0XHQnYXhpcyc6IHtcblx0XHRcdHBhdHRlcm46IC8oXnxbXi1dKSg/OmFuY2VzdG9yKD86LW9yLXNlbGYpP3xhdHRyaWJ1dGV8Y2hpbGR8ZGVzY2VuZGFudCg/Oi1vci1zZWxmKT98Zm9sbG93aW5nKD86LXNpYmxpbmcpP3xwYXJlbnR8cHJlY2VkaW5nKD86LXNpYmxpbmcpP3xzZWxmKSg/PTo6KS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdCdrZXl3b3JkLW9wZXJhdG9yJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteOi1dKVxcYig/OmFuZHxjYXN0YWJsZSBhc3xkaXZ8ZXF8ZXhjZXB0fGdlfGd0fGlkaXZ8aW5zdGFuY2Ugb2Z8aW50ZXJzZWN0fGlzfGxlfGx0fG1vZHxuZXxvcnx1bmlvbilcXGIoPz0kfFteOi1dKS8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0YWxpYXM6ICdvcGVyYXRvcidcblx0XHR9LFxuXHRcdCdrZXl3b3JkJzoge1xuXHRcdFx0cGF0dGVybjogLyhefFteOi1dKVxcYig/OmFzfGFzY2VuZGluZ3xhdHxiYXNlLXVyaXxib3VuZGFyeS1zcGFjZXxjYXNlfGNhc3QgYXN8Y29sbGF0aW9ufGNvbnN0cnVjdGlvbnxjb3B5LW5hbWVzcGFjZXN8ZGVjbGFyZXxkZWZhdWx0fGRlc2NlbmRpbmd8ZWxzZXxlbXB0eSAoPzpncmVhdGVzdHxsZWFzdCl8ZW5jb2Rpbmd8ZXZlcnl8ZXh0ZXJuYWx8Zm9yfGZ1bmN0aW9ufGlmfGltcG9ydHxpbnxpbmhlcml0fGxheHxsZXR8bWFwfG1vZHVsZXxuYW1lc3BhY2V8bm8taW5oZXJpdHxuby1wcmVzZXJ2ZXxvcHRpb258b3JkZXIoPzogYnl8ZWR8aW5nKT98cHJlc2VydmV8cmV0dXJufHNhdGlzZmllc3xzY2hlbWF8c29tZXxzdGFibGV8c3RyaWN0fHN0cmlwfHRoZW58dG98dHJlYXQgYXN8dHlwZXN3aXRjaHx1bm9yZGVyZWR8dmFsaWRhdGV8dmFyaWFibGV8dmVyc2lvbnx3aGVyZXx4cXVlcnkpXFxiKD89JHxbXjotXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J2Z1bmN0aW9uJzogL1tcXHctXSsoPzo6W1xcdy1dKykqKD89XFxzKlxcKCkvLFxuXHRcdCd4cXVlcnktZWxlbWVudCc6IHtcblx0XHRcdHBhdHRlcm46IC8oZWxlbWVudFxccyspW1xcdy1dKyg/OjpbXFx3LV0rKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAndGFnJ1xuXHRcdH0sXG5cdFx0J3hxdWVyeS1hdHRyaWJ1dGUnOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKGF0dHJpYnV0ZVxccyspW1xcdy1dKyg/OjpbXFx3LV0rKSovLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdGFsaWFzOiAnYXR0ci1uYW1lJ1xuXHRcdH0sXG5cdFx0J2J1aWx0aW4nOiB7XG5cdFx0XHRwYXR0ZXJuOiAvKF58W146LV0pXFxiKD86YXR0cmlidXRlfGNvbW1lbnR8ZG9jdW1lbnR8ZWxlbWVudHxwcm9jZXNzaW5nLWluc3RydWN0aW9ufHRleHR8eHM6KD86RU5USVRJRVN8RU5USVRZfElEfElEUkVGUz98TkNOYW1lfE5NVE9LRU5TP3xOT1RBVElPTnxOYW1lfFFOYW1lfGFueUF0b21pY1R5cGV8YW55VHlwZXxhbnlVUkl8YmFzZTY0QmluYXJ5fGJvb2xlYW58Ynl0ZXxkYXRlfGRhdGVUaW1lfGRheVRpbWVEdXJhdGlvbnxkZWNpbWFsfGRvdWJsZXxkdXJhdGlvbnxmbG9hdHxnRGF5fGdNb250aHxnTW9udGhEYXl8Z1llYXJ8Z1llYXJNb250aHxoZXhCaW5hcnl8aW50fGludGVnZXJ8bGFuZ3VhZ2V8bG9uZ3xuZWdhdGl2ZUludGVnZXJ8bm9uTmVnYXRpdmVJbnRlZ2VyfG5vblBvc2l0aXZlSW50ZWdlcnxub3JtYWxpemVkU3RyaW5nfHBvc2l0aXZlSW50ZWdlcnxzaG9ydHxzdHJpbmd8dGltZXx0b2tlbnx1bnNpZ25lZCg/OkJ5dGV8SW50fExvbmd8U2hvcnQpfHVudHlwZWQoPzpBdG9taWMpP3x5ZWFyTW9udGhEdXJhdGlvbikpXFxiKD89JHxbXjotXSkvLFxuXHRcdFx0bG9va2JlaGluZDogdHJ1ZVxuXHRcdH0sXG5cdFx0J251bWJlcic6IC9cXGJcXGQrKD86XFwuXFxkKyk/KD86RVsrLV0/XFxkKyk/Lyxcblx0XHQnb3BlcmF0b3InOiBbXG5cdFx0XHQvWysqPT98QF18XFwuXFwuP3w6PXwhPXw8Wz08XT98Pls9Pl0/Lyxcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogLyhcXHMpLSg/PVxccykvLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQncHVuY3R1YXRpb24nOiAvW1tcXF0oKXt9LDs6L10vXG5cdH0pO1xuXG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnkudGFnLnBhdHRlcm4gPSAvPFxcLz8oPyFcXGQpW15cXHM+XFwvPSQ8JV0rKD86XFxzK1teXFxzPlxcLz1dKyg/Oj0oPzooXCJ8JykoPzpcXFxcW1xcc1xcU118XFx7KD8hXFx7KSg/Olxceyg/Olxce1tee31dKlxcfXxbXnt9XSkqXFx9fFtee31dKStcXH18KD8hXFwxKVteXFxcXF0pKlxcMXxbXlxccydcIj49XSspKT8pKlxccypcXC8/Pi87XG5cdFByaXNtLmxhbmd1YWdlcy54cXVlcnlbJ3RhZyddLmluc2lkZVsnYXR0ci12YWx1ZSddLnBhdHRlcm4gPSAvPSg/OihcInwnKSg/OlxcXFxbXFxzXFxTXXxcXHsoPyFcXHspKD86XFx7KD86XFx7W157fV0qXFx9fFtee31dKSpcXH18W157fV0pK1xcfXwoPyFcXDEpW15cXFxcXSkqXFwxfFteXFxzJ1wiPj1dKykvO1xuXHRQcmlzbS5sYW5ndWFnZXMueHF1ZXJ5Wyd0YWcnXS5pbnNpZGVbJ2F0dHItdmFsdWUnXS5pbnNpZGVbJ3B1bmN0dWF0aW9uJ10gPSAvXj1cInxcIiQvO1xuXHRQcmlzbS5sYW5ndWFnZXMueHF1ZXJ5Wyd0YWcnXS5pbnNpZGVbJ2F0dHItdmFsdWUnXS5pbnNpZGVbJ2V4cHJlc3Npb24nXSA9IHtcblx0XHQvLyBBbGxvdyBmb3IgdHdvIGxldmVscyBvZiBuZXN0aW5nXG5cdFx0cGF0dGVybjogL1xceyg/IVxceykoPzpcXHsoPzpcXHtbXnt9XSpcXH18W157fV0pKlxcfXxbXnt9XSkrXFx9Lyxcblx0XHRpbnNpZGU6IFByaXNtLmxhbmd1YWdlcy54cXVlcnksXG5cdFx0YWxpYXM6ICdsYW5ndWFnZS14cXVlcnknXG5cdH07XG5cblx0Ly8gVGhlIGZvbGxvd2luZyB3aWxsIGhhbmRsZSBwbGFpbiB0ZXh0IGluc2lkZSB0YWdzXG5cdHZhciBzdHJpbmdpZnlUb2tlbiA9IGZ1bmN0aW9uICh0b2tlbikge1xuXHRcdGlmICh0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRyZXR1cm4gdG9rZW47XG5cdFx0fVxuXHRcdGlmICh0eXBlb2YgdG9rZW4uY29udGVudCA9PT0gJ3N0cmluZycpIHtcblx0XHRcdHJldHVybiB0b2tlbi5jb250ZW50O1xuXHRcdH1cblx0XHRyZXR1cm4gdG9rZW4uY29udGVudC5tYXAoc3RyaW5naWZ5VG9rZW4pLmpvaW4oJycpO1xuXHR9O1xuXG5cdHZhciB3YWxrVG9rZW5zID0gZnVuY3Rpb24gKHRva2Vucykge1xuXHRcdHZhciBvcGVuZWRUYWdzID0gW107XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCB0b2tlbnMubGVuZ3RoOyBpKyspIHtcblx0XHRcdHZhciB0b2tlbiA9IHRva2Vuc1tpXTtcblx0XHRcdHZhciBub3RUYWdOb3JCcmFjZSA9IGZhbHNlO1xuXG5cdFx0XHRpZiAodHlwZW9mIHRva2VuICE9PSAnc3RyaW5nJykge1xuXHRcdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gJ3RhZycgJiYgdG9rZW4uY29udGVudFswXSAmJiB0b2tlbi5jb250ZW50WzBdLnR5cGUgPT09ICd0YWcnKSB7XG5cdFx0XHRcdFx0Ly8gV2UgZm91bmQgYSB0YWcsIG5vdyBmaW5kIGl0cyBraW5kXG5cblx0XHRcdFx0XHRpZiAodG9rZW4uY29udGVudFswXS5jb250ZW50WzBdLmNvbnRlbnQgPT09ICc8LycpIHtcblx0XHRcdFx0XHRcdC8vIENsb3NpbmcgdGFnXG5cdFx0XHRcdFx0XHRpZiAob3BlbmVkVGFncy5sZW5ndGggPiAwICYmIG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS50YWdOYW1lID09PSBzdHJpbmdpZnlUb2tlbih0b2tlbi5jb250ZW50WzBdLmNvbnRlbnRbMV0pKSB7XG5cdFx0XHRcdFx0XHRcdC8vIFBvcCBtYXRjaGluZyBvcGVuaW5nIHRhZ1xuXHRcdFx0XHRcdFx0XHRvcGVuZWRUYWdzLnBvcCgpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAodG9rZW4uY29udGVudFt0b2tlbi5jb250ZW50Lmxlbmd0aCAtIDFdLmNvbnRlbnQgPT09ICcvPicpIHtcblx0XHRcdFx0XHRcdFx0Ly8gQXV0b2Nsb3NlZCB0YWcsIGlnbm9yZVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gT3BlbmluZyB0YWdcblx0XHRcdFx0XHRcdFx0b3BlbmVkVGFncy5wdXNoKHtcblx0XHRcdFx0XHRcdFx0XHR0YWdOYW1lOiBzdHJpbmdpZnlUb2tlbih0b2tlbi5jb250ZW50WzBdLmNvbnRlbnRbMV0pLFxuXHRcdFx0XHRcdFx0XHRcdG9wZW5lZEJyYWNlczogMFxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdFx0b3BlbmVkVGFncy5sZW5ndGggPiAwICYmIHRva2VuLnR5cGUgPT09ICdwdW5jdHVhdGlvbicgJiYgdG9rZW4uY29udGVudCA9PT0gJ3snICYmXG5cdFx0XHRcdFx0Ly8gSWdub3JlIGB7e2Bcblx0XHRcdFx0XHQoIXRva2Vuc1tpICsgMV0gfHwgdG9rZW5zW2kgKyAxXS50eXBlICE9PSAncHVuY3R1YXRpb24nIHx8IHRva2Vuc1tpICsgMV0uY29udGVudCAhPT0gJ3snKSAmJlxuXHRcdFx0XHRcdCghdG9rZW5zW2kgLSAxXSB8fCB0b2tlbnNbaSAtIDFdLnR5cGUgIT09ICdwbGFpbi10ZXh0JyB8fCB0b2tlbnNbaSAtIDFdLmNvbnRlbnQgIT09ICd7Jylcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0Ly8gSGVyZSB3ZSBtaWdodCBoYXZlIGVudGVyZWQgYW4gWFF1ZXJ5IGV4cHJlc3Npb24gaW5zaWRlIGEgdGFnXG5cdFx0XHRcdFx0b3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcysrO1xuXG5cdFx0XHRcdH0gZWxzZSBpZiAob3BlbmVkVGFncy5sZW5ndGggPiAwICYmIG9wZW5lZFRhZ3Nbb3BlbmVkVGFncy5sZW5ndGggLSAxXS5vcGVuZWRCcmFjZXMgPiAwICYmIHRva2VuLnR5cGUgPT09ICdwdW5jdHVhdGlvbicgJiYgdG9rZW4uY29udGVudCA9PT0gJ30nKSB7XG5cblx0XHRcdFx0XHQvLyBIZXJlIHdlIG1pZ2h0IGhhdmUgbGVmdCBhbiBYUXVlcnkgZXhwcmVzc2lvbiBpbnNpZGUgYSB0YWdcblx0XHRcdFx0XHRvcGVuZWRUYWdzW29wZW5lZFRhZ3MubGVuZ3RoIC0gMV0ub3BlbmVkQnJhY2VzLS07XG5cblx0XHRcdFx0fSBlbHNlIGlmICh0b2tlbi50eXBlICE9PSAnY29tbWVudCcpIHtcblx0XHRcdFx0XHRub3RUYWdOb3JCcmFjZSA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmIChub3RUYWdOb3JCcmFjZSB8fCB0eXBlb2YgdG9rZW4gPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdGlmIChvcGVuZWRUYWdzLmxlbmd0aCA+IDAgJiYgb3BlbmVkVGFnc1tvcGVuZWRUYWdzLmxlbmd0aCAtIDFdLm9wZW5lZEJyYWNlcyA9PT0gMCkge1xuXHRcdFx0XHRcdC8vIEhlcmUgd2UgYXJlIGluc2lkZSBhIHRhZywgYW5kIG5vdCBpbnNpZGUgYW4gWFF1ZXJ5IGV4cHJlc3Npb24uXG5cdFx0XHRcdFx0Ly8gVGhhdCdzIHBsYWluIHRleHQ6IGRyb3AgYW55IHRva2VucyBtYXRjaGVkLlxuXHRcdFx0XHRcdHZhciBwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbik7XG5cblx0XHRcdFx0XHQvLyBBbmQgbWVyZ2UgdGV4dCB3aXRoIGFkamFjZW50IHRleHRcblx0XHRcdFx0XHRpZiAoaSA8IHRva2Vucy5sZW5ndGggLSAxICYmICh0eXBlb2YgdG9rZW5zW2kgKyAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgKyAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgKz0gc3RyaW5naWZ5VG9rZW4odG9rZW5zW2kgKyAxXSk7XG5cdFx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKGkgKyAxLCAxKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGkgPiAwICYmICh0eXBlb2YgdG9rZW5zW2kgLSAxXSA9PT0gJ3N0cmluZycgfHwgdG9rZW5zW2kgLSAxXS50eXBlID09PSAncGxhaW4tdGV4dCcpKSB7XG5cdFx0XHRcdFx0XHRwbGFpblRleHQgPSBzdHJpbmdpZnlUb2tlbih0b2tlbnNbaSAtIDFdKSArIHBsYWluVGV4dDtcblx0XHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoaSAtIDEsIDEpO1xuXHRcdFx0XHRcdFx0aS0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmICgvXlxccyskLy50ZXN0KHBsYWluVGV4dCkpIHtcblx0XHRcdFx0XHRcdHRva2Vuc1tpXSA9IHBsYWluVGV4dDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dG9rZW5zW2ldID0gbmV3IFByaXNtLlRva2VuKCdwbGFpbi10ZXh0JywgcGxhaW5UZXh0LCBudWxsLCBwbGFpblRleHQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodG9rZW4uY29udGVudCAmJiB0eXBlb2YgdG9rZW4uY29udGVudCAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0d2Fsa1Rva2Vucyh0b2tlbi5jb250ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0UHJpc20uaG9va3MuYWRkKCdhZnRlci10b2tlbml6ZScsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRpZiAoZW52Lmxhbmd1YWdlICE9PSAneHF1ZXJ5Jykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR3YWxrVG9rZW5zKGVudi50b2tlbnMpO1xuXHR9KTtcblxufShQcmlzbSkpO1xuXG5QcmlzbS5sYW5ndWFnZXMueWFuZyA9IHtcblx0Ly8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzYwMjAjcGFnZS0zNFxuXHQvLyBodHRwOi8vd3d3LnlhbmctY2VudHJhbC5vcmcvdHdpa2kvYmluL3ZpZXcvTWFpbi9ZYW5nRXhhbXBsZXNcblx0J2NvbW1lbnQnOiAvXFwvXFwqW1xcc1xcU10qP1xcKlxcL3xcXC9cXC8uKi8sXG5cdCdzdHJpbmcnOiB7XG5cdFx0cGF0dGVybjogL1wiKD86W15cXFxcXCJdfFxcXFwuKSpcInwnW14nXSonLyxcblx0XHRncmVlZHk6IHRydWVcblx0fSxcblx0J2tleXdvcmQnOiB7XG5cdFx0cGF0dGVybjogLyhefFt7fTtcXHJcXG5dWyBcXHRdKilbYS16X11bXFx3Li1dKi9pLFxuXHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0fSxcblx0J25hbWVzcGFjZSc6IHtcblx0XHRwYXR0ZXJuOiAvKFxccylbYS16X11bXFx3Li1dKig/PTopL2ksXG5cdFx0bG9va2JlaGluZDogdHJ1ZVxuXHR9LFxuXHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdCdvcGVyYXRvcic6IC9cXCsvLFxuXHQncHVuY3R1YXRpb24nOiAvW3t9OzpdL1xufTtcblxuKGZ1bmN0aW9uIChQcmlzbSkge1xuXG5cdGZ1bmN0aW9uIGxpdGVyYWwoc3RyKSB7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cjsgfTtcblx0fVxuXG5cdHZhciBrZXl3b3JkID0gL1xcYig/OmFsaWdufGFsbG93emVyb3xhbmR8YW55ZnJhbWV8YW55dHlwZXxhc218YXN5bmN8YXdhaXR8YnJlYWt8Y2FuY2VsfGNhdGNofGNvbXB0aW1lfGNvbnN0fGNvbnRpbnVlfGRlZmVyfGVsc2V8ZW51bXxlcnJkZWZlcnxlcnJvcnxleHBvcnR8ZXh0ZXJufGZufGZvcnxpZnxpbmxpbmV8bGlua3NlY3Rpb258bmFrZWRjY3xub2FsaWFzfG5vc3VzcGVuZHxudWxsfG9yfG9yZWxzZXxwYWNrZWR8cHJvbWlzZXxwdWJ8cmVzdW1lfHJldHVybnxzdGRjYWxsY2N8c3RydWN0fHN1c3BlbmR8c3dpdGNofHRlc3R8dGhyZWFkbG9jYWx8dHJ5fHVuZGVmaW5lZHx1bmlvbnx1bnJlYWNoYWJsZXx1c2luZ25hbWVzcGFjZXx2YXJ8dm9sYXRpbGV8d2hpbGUpXFxiLztcblxuXHR2YXIgSURFTlRJRklFUiA9ICdcXFxcYig/IScgKyBrZXl3b3JkLnNvdXJjZSArICcpKD8hXFxcXGQpXFxcXHcrXFxcXGInO1xuXHR2YXIgQUxJR04gPSAvYWxpZ25cXHMqXFwoKD86W14oKV18XFwoW14oKV0qXFwpKSpcXCkvLnNvdXJjZTtcblx0dmFyIFBSRUZJWF9UWVBFX09QID0gLyg/OlxcP3xcXGJwcm9taXNlLT58KD86XFxbW15bXFxdXSpcXF18XFwqKD8hXFwqKXxcXCpcXCopKD86XFxzKjxBTElHTj58XFxzKmNvbnN0XFxifFxccyp2b2xhdGlsZVxcYnxcXHMqYWxsb3d6ZXJvXFxiKSopLy5zb3VyY2UucmVwbGFjZSgvPEFMSUdOPi9nLCBsaXRlcmFsKEFMSUdOKSk7XG5cdHZhciBTVUZGSVhfRVhQUiA9IC8oPzpcXGJwcm9taXNlXFxifCg/OlxcYmVycm9yXFwuKT88SUQ+KD86XFwuPElEPikqKD8hXFxzKzxJRD4pKS8uc291cmNlLnJlcGxhY2UoLzxJRD4vZywgbGl0ZXJhbChJREVOVElGSUVSKSk7XG5cdHZhciBUWVBFID0gJyg/IVxcXFxzKSg/OiE/XFxcXHMqKD86JyArIFBSRUZJWF9UWVBFX09QICsgJ1xcXFxzKikqJyArIFNVRkZJWF9FWFBSICsgJykrJztcblxuXHQvKlxuXHQgKiBBIHNpbXBsaWZpZWQgZ3JhbW1hciBmb3IgWmlnIGNvbXBpbGUgdGltZSB0eXBlIGxpdGVyYWxzOlxuXHQgKlxuXHQgKiBUeXBlRXhwciA9ICggXCIhXCI/IFBSRUZJWF9UWVBFX09QKiBTVUZGSVhfRVhQUiApK1xuXHQgKlxuXHQgKiBTVUZGSVhfRVhQUiA9ICggXFxiIFwicHJvbWlzZVwiIFxcYiB8ICggXFxiIFwiZXJyb3JcIiBcIi5cIiApPyBJREVOVElGSUVSICggXCIuXCIgSURFTlRJRklFUiApKiAoPyEgXFxzKyBJREVOVElGSUVSICkgKVxuXHQgKlxuXHQgKiBQUkVGSVhfVFlQRV9PUCA9IFwiP1wiXG5cdCAqICAgICAgICAgICAgICAgIHwgXFxiIFwicHJvbWlzZVwiIFwiLT5cIlxuXHQgKiAgICAgICAgICAgICAgICB8ICggXCJbXCIgW15cXFtcXF1dKiBcIl1cIiB8IFwiKlwiIHwgXCIqKlwiICkgKCBBTElHTiB8IFwiY29uc3RcIiBcXGIgfCBcInZvbGF0aWxlXCIgXFxiIHwgXCJhbGxvd3plcm9cIiBcXGIgKSpcblx0ICpcblx0ICogQUxJR04gPSBcImFsaWduXCIgXCIoXCIgKCBbXigpXSB8IFwiKFwiIFteKCldKiBcIilcIiApKiBcIilcIlxuXHQgKlxuXHQgKiBJREVOVElGSUVSID0gXFxiICg/ISBLRVlXT1JEICkgW2EtekEtWl9dIFxcdyogXFxiXG5cdCAqXG5cdCovXG5cblx0UHJpc20ubGFuZ3VhZ2VzLnppZyA9IHtcblx0XHQnY29tbWVudCc6IFtcblx0XHRcdHtcblx0XHRcdFx0cGF0dGVybjogL1xcL1xcL1svIV0uKi8sXG5cdFx0XHRcdGFsaWFzOiAnZG9jLWNvbW1lbnQnXG5cdFx0XHR9LFxuXHRcdFx0L1xcL3syfS4qL1xuXHRcdF0sXG5cdFx0J3N0cmluZyc6IFtcblx0XHRcdHtcblx0XHRcdFx0Ly8gXCJzdHJpbmdcIiBhbmQgY1wic3RyaW5nXCJcblx0XHRcdFx0cGF0dGVybjogLyhefFteXFxcXEBdKWM/XCIoPzpbXlwiXFxcXFxcclxcbl18XFxcXC4pKlwiLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBtdWx0aWxpbmUgc3RyaW5ncyBhbmQgYy1zdHJpbmdzXG5cdFx0XHRcdHBhdHRlcm46IC8oW1xcclxcbl0pKFsgXFx0XStjP1xcXFx7Mn0pLiooPzooPzpcXHJcXG4/fFxcbilcXDIuKikqLyxcblx0XHRcdFx0bG9va2JlaGluZDogdHJ1ZSxcblx0XHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnY2hhcic6IHtcblx0XHRcdC8vIGNoYXJhY3RlcnMgJ2EnLCAnXFxuJywgJ1xceEZGJywgJ1xcdXsxMEZGRkZ9J1xuXHRcdFx0cGF0dGVybjogLyhefFteXFxcXF0pJyg/OlteJ1xcXFxcXHJcXG5dfFtcXHVEODAwLVxcdURGRkZdezJ9fFxcXFwoPzoufHhbYS1mQS1GXFxkXXsyfXx1XFx7W2EtZkEtRlxcZF17MSw2fVxcfSkpJy8sXG5cdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0Z3JlZWR5OiB0cnVlXG5cdFx0fSxcblx0XHQnYnVpbHRpbic6IC9cXEJAKD8hXFxkKVxcdysoPz1cXHMqXFwoKS8sXG5cdFx0J2xhYmVsJzoge1xuXHRcdFx0cGF0dGVybjogLyhcXGIoPzpicmVha3xjb250aW51ZSlcXHMqOlxccyopXFx3K1xcYnxcXGIoPyFcXGQpXFx3K1xcYig/PVxccyo6XFxzKig/Olxce3x3aGlsZVxcYikpLyxcblx0XHRcdGxvb2tiZWhpbmQ6IHRydWVcblx0XHR9LFxuXHRcdCdjbGFzcy1uYW1lJzogW1xuXHRcdFx0Ly8gY29uc3QgRm9vID0gc3RydWN0IHt9O1xuXHRcdFx0L1xcYig/IVxcZClcXHcrKD89XFxzKj1cXHMqKD86KD86ZXh0ZXJufHBhY2tlZClcXHMrKT8oPzplbnVtfHN0cnVjdHx1bmlvbilcXHMqWyh7XSkvLFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBjb25zdCB4OiBpMzIgPSA5O1xuXHRcdFx0XHQvLyB2YXIgeDogQmFyO1xuXHRcdFx0XHQvLyBmbiBmb28oeDogYm9vbCwgeTogZjMyKSB2b2lkIHt9XG5cdFx0XHRcdHBhdHRlcm46IFJlZ0V4cCgvKDpcXHMqKTxUWVBFPig/PVxccyooPzo8QUxJR04+XFxzKik/Wz07LCldKXw8VFlQRT4oPz1cXHMqKD86PEFMSUdOPlxccyopP1xceykvLnNvdXJjZS5yZXBsYWNlKC88VFlQRT4vZywgbGl0ZXJhbChUWVBFKSkucmVwbGFjZSgvPEFMSUdOPi9nLCBsaXRlcmFsKEFMSUdOKSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHQvLyBleHRlcm4gZm4gZm9vKHg6IGY2NCkgZjY0OyAob3B0aW9uYWwgYWxpZ25tZW50KVxuXHRcdFx0XHRwYXR0ZXJuOiBSZWdFeHAoLyhcXClcXHMqKTxUWVBFPig/PVxccyooPzo8QUxJR04+XFxzKik/OykvLnNvdXJjZS5yZXBsYWNlKC88VFlQRT4vZywgbGl0ZXJhbChUWVBFKSkucmVwbGFjZSgvPEFMSUdOPi9nLCBsaXRlcmFsKEFMSUdOKSkpLFxuXHRcdFx0XHRsb29rYmVoaW5kOiB0cnVlLFxuXHRcdFx0XHRpbnNpZGU6IG51bGwgLy8gc2VlIGJlbG93XG5cdFx0XHR9XG5cdFx0XSxcblx0XHQnYnVpbHRpbi10eXBlJzoge1xuXHRcdFx0cGF0dGVybjogL1xcYig/OmFueWVycm9yfGJvb2x8Y191Pyg/OmludHxsb25nfGxvbmdsb25nfHNob3J0KXxjX2xvbmdkb3VibGV8Y192b2lkfGNvbXB0aW1lXyg/OmZsb2F0fGludCl8Zig/OjE2fDMyfDY0fDEyOCl8W2l1XSg/Ojh8MTZ8MzJ8NjR8MTI4fHNpemUpfG5vcmV0dXJufHR5cGV8dm9pZClcXGIvLFxuXHRcdFx0YWxpYXM6ICdrZXl3b3JkJ1xuXHRcdH0sXG5cdFx0J2tleXdvcmQnOiBrZXl3b3JkLFxuXHRcdCdmdW5jdGlvbic6IC9cXGIoPyFcXGQpXFx3Kyg/PVxccypcXCgpLyxcblx0XHQnbnVtYmVyJzogL1xcYig/OjBiWzAxXSt8MG9bMC03XSt8MHhbYS1mQS1GXFxkXSsoPzpcXC5bYS1mQS1GXFxkXSopPyg/OltwUF1bKy1dP1thLWZBLUZcXGRdKyk/fFxcZCsoPzpcXC5cXGQqKT8oPzpbZUVdWystXT9cXGQrKT8pXFxiLyxcblx0XHQnYm9vbGVhbic6IC9cXGIoPzpmYWxzZXx0cnVlKVxcYi8sXG5cdFx0J29wZXJhdG9yJzogL1xcLlsqP118XFwuezIsM318Wy09XT58XFwqXFwqfFxcK1xcK3xcXHxcXHx8KD86PDx8Pj58Wy0rKl0lfFstKyovJV4mfDw+IT1dKT0/fFs/fl0vLFxuXHRcdCdwdW5jdHVhdGlvbic6IC9bLjosOygpe31bXFxdXS9cblx0fTtcblxuXHRQcmlzbS5sYW5ndWFnZXMuemlnWydjbGFzcy1uYW1lJ10uZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG5cdFx0aWYgKG9iai5pbnNpZGUgPT09IG51bGwpIHtcblx0XHRcdG9iai5pbnNpZGUgPSBQcmlzbS5sYW5ndWFnZXMuemlnO1xuXHRcdH1cblx0fSk7XG5cbn0oUHJpc20pKTtcblxuKGZ1bmN0aW9uICgpIHtcblxuXHRpZiAodHlwZW9mIFByaXNtID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0LyoqXG5cdCAqIFBsdWdpbiBuYW1lIHdoaWNoIGlzIHVzZWQgYXMgYSBjbGFzcyBuYW1lIGZvciA8cHJlPiB3aGljaCBpcyBhY3RpdmF0aW5nIHRoZSBwbHVnaW5cblx0ICpcblx0ICogQHR5cGUge3N0cmluZ31cblx0ICovXG5cdHZhciBQTFVHSU5fTkFNRSA9ICdsaW5lLW51bWJlcnMnO1xuXG5cdC8qKlxuXHQgKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCBmb3IgZGV0ZXJtaW5pbmcgbGluZSBicmVha3Ncblx0ICpcblx0ICogQHR5cGUge1JlZ0V4cH1cblx0ICovXG5cdHZhciBORVdfTElORV9FWFAgPSAvXFxuKD8hJCkvZztcblxuXG5cdC8qKlxuXHQgKiBHbG9iYWwgZXhwb3J0c1xuXHQgKi9cblx0dmFyIGNvbmZpZyA9IFByaXNtLnBsdWdpbnMubGluZU51bWJlcnMgPSB7XG5cdFx0LyoqXG5cdFx0ICogR2V0IG5vZGUgZm9yIHByb3ZpZGVkIGxpbmUgbnVtYmVyXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0VsZW1lbnR9IGVsZW1lbnQgcHJlIGVsZW1lbnRcblx0XHQgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyIGxpbmUgbnVtYmVyXG5cdFx0ICogQHJldHVybnMge0VsZW1lbnR8dW5kZWZpbmVkfVxuXHRcdCAqL1xuXHRcdGdldExpbmU6IGZ1bmN0aW9uIChlbGVtZW50LCBudW1iZXIpIHtcblx0XHRcdGlmIChlbGVtZW50LnRhZ05hbWUgIT09ICdQUkUnIHx8ICFlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhQTFVHSU5fTkFNRSkpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGluZU51bWJlclJvd3MgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saW5lLW51bWJlcnMtcm93cycpO1xuXHRcdFx0aWYgKCFsaW5lTnVtYmVyUm93cykge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHR2YXIgbGluZU51bWJlclN0YXJ0ID0gcGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtc3RhcnQnKSwgMTApIHx8IDE7XG5cdFx0XHR2YXIgbGluZU51bWJlckVuZCA9IGxpbmVOdW1iZXJTdGFydCArIChsaW5lTnVtYmVyUm93cy5jaGlsZHJlbi5sZW5ndGggLSAxKTtcblxuXHRcdFx0aWYgKG51bWJlciA8IGxpbmVOdW1iZXJTdGFydCkge1xuXHRcdFx0XHRudW1iZXIgPSBsaW5lTnVtYmVyU3RhcnQ7XG5cdFx0XHR9XG5cdFx0XHRpZiAobnVtYmVyID4gbGluZU51bWJlckVuZCkge1xuXHRcdFx0XHRudW1iZXIgPSBsaW5lTnVtYmVyRW5kO1xuXHRcdFx0fVxuXG5cdFx0XHR2YXIgbGluZUluZGV4ID0gbnVtYmVyIC0gbGluZU51bWJlclN0YXJ0O1xuXG5cdFx0XHRyZXR1cm4gbGluZU51bWJlclJvd3MuY2hpbGRyZW5bbGluZUluZGV4XTtcblx0XHR9LFxuXG5cdFx0LyoqXG5cdFx0ICogUmVzaXplcyB0aGUgbGluZSBudW1iZXJzIG9mIHRoZSBnaXZlbiBlbGVtZW50LlxuXHRcdCAqXG5cdFx0ICogVGhpcyBmdW5jdGlvbiB3aWxsIG5vdCBhZGQgbGluZSBudW1iZXJzLiBJdCB3aWxsIG9ubHkgcmVzaXplIGV4aXN0aW5nIG9uZXMuXG5cdFx0ICpcblx0XHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50IEEgYDxwcmU+YCBlbGVtZW50IHdpdGggbGluZSBudW1iZXJzLlxuXHRcdCAqIEByZXR1cm5zIHt2b2lkfVxuXHRcdCAqL1xuXHRcdHJlc2l6ZTogZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdHJlc2l6ZUVsZW1lbnRzKFtlbGVtZW50XSk7XG5cdFx0fSxcblxuXHRcdC8qKlxuXHRcdCAqIFdoZXRoZXIgdGhlIHBsdWdpbiBjYW4gYXNzdW1lIHRoYXQgdGhlIHVuaXRzIGZvbnQgc2l6ZXMgYW5kIG1hcmdpbnMgYXJlIG5vdCBkZXBlbmRlZCBvbiB0aGUgc2l6ZSBvZlxuXHRcdCAqIHRoZSBjdXJyZW50IHZpZXdwb3J0LlxuXHRcdCAqXG5cdFx0ICogU2V0dGluZyB0aGlzIHRvIGB0cnVlYCB3aWxsIGFsbG93IHRoZSBwbHVnaW4gdG8gZG8gY2VydGFpbiBvcHRpbWl6YXRpb25zIGZvciBiZXR0ZXIgcGVyZm9ybWFuY2UuXG5cdFx0ICpcblx0XHQgKiBTZXQgdGhpcyB0byBgZmFsc2VgIGlmIHlvdSB1c2UgYW55IG9mIHRoZSBmb2xsb3dpbmcgQ1NTIHVuaXRzOiBgdmhgLCBgdndgLCBgdm1pbmAsIGB2bWF4YC5cblx0XHQgKlxuXHRcdCAqIEB0eXBlIHtib29sZWFufVxuXHRcdCAqL1xuXHRcdGFzc3VtZVZpZXdwb3J0SW5kZXBlbmRlbmNlOiB0cnVlXG5cdH07XG5cblx0LyoqXG5cdCAqIFJlc2l6ZXMgdGhlIGdpdmVuIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0hUTUxFbGVtZW50W119IGVsZW1lbnRzXG5cdCAqL1xuXHRmdW5jdGlvbiByZXNpemVFbGVtZW50cyhlbGVtZW50cykge1xuXHRcdGVsZW1lbnRzID0gZWxlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChlKSB7XG5cdFx0XHR2YXIgY29kZVN0eWxlcyA9IGdldFN0eWxlcyhlKTtcblx0XHRcdHZhciB3aGl0ZVNwYWNlID0gY29kZVN0eWxlc1snd2hpdGUtc3BhY2UnXTtcblx0XHRcdHJldHVybiB3aGl0ZVNwYWNlID09PSAncHJlLXdyYXAnIHx8IHdoaXRlU3BhY2UgPT09ICdwcmUtbGluZSc7XG5cdFx0fSk7XG5cblx0XHRpZiAoZWxlbWVudHMubGVuZ3RoID09IDApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgaW5mb3MgPSBlbGVtZW50cy5tYXAoZnVuY3Rpb24gKGVsZW1lbnQpIHtcblx0XHRcdHZhciBjb2RlRWxlbWVudCA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignY29kZScpO1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJzV3JhcHBlciA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcignLmxpbmUtbnVtYmVycy1yb3dzJyk7XG5cdFx0XHRpZiAoIWNvZGVFbGVtZW50IHx8ICFsaW5lTnVtYmVyc1dyYXBwZXIpIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblxuXHRcdFx0LyoqIEB0eXBlIHtIVE1MRWxlbWVudH0gKi9cblx0XHRcdHZhciBsaW5lTnVtYmVyU2l6ZXIgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saW5lLW51bWJlcnMtc2l6ZXInKTtcblx0XHRcdHZhciBjb2RlTGluZXMgPSBjb2RlRWxlbWVudC50ZXh0Q29udGVudC5zcGxpdChORVdfTElORV9FWFApO1xuXG5cdFx0XHRpZiAoIWxpbmVOdW1iZXJTaXplcikge1xuXHRcdFx0XHRsaW5lTnVtYmVyU2l6ZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG5cdFx0XHRcdGxpbmVOdW1iZXJTaXplci5jbGFzc05hbWUgPSAnbGluZS1udW1iZXJzLXNpemVyJztcblxuXHRcdFx0XHRjb2RlRWxlbWVudC5hcHBlbmRDaGlsZChsaW5lTnVtYmVyU2l6ZXIpO1xuXHRcdFx0fVxuXG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuaW5uZXJIVE1MID0gJzAnO1xuXHRcdFx0bGluZU51bWJlclNpemVyLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG5cdFx0XHR2YXIgb25lTGluZXJIZWlnaHQgPSBsaW5lTnVtYmVyU2l6ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdFx0bGluZU51bWJlclNpemVyLmlubmVySFRNTCA9ICcnO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRlbGVtZW50OiBlbGVtZW50LFxuXHRcdFx0XHRsaW5lczogY29kZUxpbmVzLFxuXHRcdFx0XHRsaW5lSGVpZ2h0czogW10sXG5cdFx0XHRcdG9uZUxpbmVySGVpZ2h0OiBvbmVMaW5lckhlaWdodCxcblx0XHRcdFx0c2l6ZXI6IGxpbmVOdW1iZXJTaXplcixcblx0XHRcdH07XG5cdFx0fSkuZmlsdGVyKEJvb2xlYW4pO1xuXG5cdFx0aW5mb3MuZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuXHRcdFx0dmFyIGxpbmVOdW1iZXJTaXplciA9IGluZm8uc2l6ZXI7XG5cdFx0XHR2YXIgbGluZXMgPSBpbmZvLmxpbmVzO1xuXHRcdFx0dmFyIGxpbmVIZWlnaHRzID0gaW5mby5saW5lSGVpZ2h0cztcblx0XHRcdHZhciBvbmVMaW5lckhlaWdodCA9IGluZm8ub25lTGluZXJIZWlnaHQ7XG5cblx0XHRcdGxpbmVIZWlnaHRzW2xpbmVzLmxlbmd0aCAtIDFdID0gdW5kZWZpbmVkO1xuXHRcdFx0bGluZXMuZm9yRWFjaChmdW5jdGlvbiAobGluZSwgaW5kZXgpIHtcblx0XHRcdFx0aWYgKGxpbmUgJiYgbGluZS5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0dmFyIGUgPSBsaW5lTnVtYmVyU2l6ZXIuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpKTtcblx0XHRcdFx0XHRlLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXHRcdFx0XHRcdGUudGV4dENvbnRlbnQgPSBsaW5lO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpbmVIZWlnaHRzW2luZGV4XSA9IG9uZUxpbmVySGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9KTtcblxuXHRcdGluZm9zLmZvckVhY2goZnVuY3Rpb24gKGluZm8pIHtcblx0XHRcdHZhciBsaW5lTnVtYmVyU2l6ZXIgPSBpbmZvLnNpemVyO1xuXHRcdFx0dmFyIGxpbmVIZWlnaHRzID0gaW5mby5saW5lSGVpZ2h0cztcblxuXHRcdFx0dmFyIGNoaWxkSW5kZXggPSAwO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBsaW5lSGVpZ2h0cy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAobGluZUhlaWdodHNbaV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGxpbmVIZWlnaHRzW2ldID0gbGluZU51bWJlclNpemVyLmNoaWxkcmVuW2NoaWxkSW5kZXgrK10uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG5cdFx0XHR2YXIgbGluZU51bWJlclNpemVyID0gaW5mby5zaXplcjtcblx0XHRcdHZhciB3cmFwcGVyID0gaW5mby5lbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5saW5lLW51bWJlcnMtcm93cycpO1xuXG5cdFx0XHRsaW5lTnVtYmVyU2l6ZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblx0XHRcdGxpbmVOdW1iZXJTaXplci5pbm5lckhUTUwgPSAnJztcblxuXHRcdFx0aW5mby5saW5lSGVpZ2h0cy5mb3JFYWNoKGZ1bmN0aW9uIChoZWlnaHQsIGxpbmVOdW1iZXIpIHtcblx0XHRcdFx0d3JhcHBlci5jaGlsZHJlbltsaW5lTnVtYmVyXS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBzdHlsZSBkZWNsYXJhdGlvbnMgZm9yIHRoZSBlbGVtZW50XG5cdCAqXG5cdCAqIEBwYXJhbSB7RWxlbWVudH0gZWxlbWVudFxuXHQgKi9cblx0ZnVuY3Rpb24gZ2V0U3R5bGVzKGVsZW1lbnQpIHtcblx0XHRpZiAoIWVsZW1lbnQpIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblxuXHRcdHJldHVybiB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSA/IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkgOiAoZWxlbWVudC5jdXJyZW50U3R5bGUgfHwgbnVsbCk7XG5cdH1cblxuXHR2YXIgbGFzdFdpZHRoID0gdW5kZWZpbmVkO1xuXHR3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24gKCkge1xuXHRcdGlmIChjb25maWcuYXNzdW1lVmlld3BvcnRJbmRlcGVuZGVuY2UgJiYgbGFzdFdpZHRoID09PSB3aW5kb3cuaW5uZXJXaWR0aCkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRsYXN0V2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aDtcblxuXHRcdHJlc2l6ZUVsZW1lbnRzKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3ByZS4nICsgUExVR0lOX05BTUUpKSk7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnY29tcGxldGUnLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0aWYgKCFlbnYuY29kZSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhciBjb2RlID0gLyoqIEB0eXBlIHtFbGVtZW50fSAqLyAoZW52LmVsZW1lbnQpO1xuXHRcdHZhciBwcmUgPSAvKiogQHR5cGUge0hUTUxFbGVtZW50fSAqLyAoY29kZS5wYXJlbnROb2RlKTtcblxuXHRcdC8vIHdvcmtzIG9ubHkgZm9yIDxjb2RlPiB3cmFwcGVkIGluc2lkZSA8cHJlPiAobm90IGlubGluZSlcblx0XHRpZiAoIXByZSB8fCAhL3ByZS9pLnRlc3QocHJlLm5vZGVOYW1lKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0IGlmIGxpbmUgbnVtYmVycyBhbHJlYWR5IGV4aXN0c1xuXHRcdGlmIChjb2RlLnF1ZXJ5U2VsZWN0b3IoJy5saW5lLW51bWJlcnMtcm93cycpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gb25seSBhZGQgbGluZSBudW1iZXJzIGlmIDxjb2RlPiBvciBvbmUgb2YgaXRzIGFuY2VzdG9ycyBoYXMgdGhlIGBsaW5lLW51bWJlcnNgIGNsYXNzXG5cdFx0aWYgKCFQcmlzbS51dGlsLmlzQWN0aXZlKGNvZGUsIFBMVUdJTl9OQU1FKSkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSB0aGUgY2xhc3MgJ2xpbmUtbnVtYmVycycgZnJvbSB0aGUgPGNvZGU+XG5cdFx0Y29kZS5jbGFzc0xpc3QucmVtb3ZlKFBMVUdJTl9OQU1FKTtcblx0XHQvLyBBZGQgdGhlIGNsYXNzICdsaW5lLW51bWJlcnMnIHRvIHRoZSA8cHJlPlxuXHRcdHByZS5jbGFzc0xpc3QuYWRkKFBMVUdJTl9OQU1FKTtcblxuXHRcdHZhciBtYXRjaCA9IGVudi5jb2RlLm1hdGNoKE5FV19MSU5FX0VYUCk7XG5cdFx0dmFyIGxpbmVzTnVtID0gbWF0Y2ggPyBtYXRjaC5sZW5ndGggKyAxIDogMTtcblx0XHR2YXIgbGluZU51bWJlcnNXcmFwcGVyO1xuXG5cdFx0dmFyIGxpbmVzID0gbmV3IEFycmF5KGxpbmVzTnVtICsgMSkuam9pbignPHNwYW4+PC9zcGFuPicpO1xuXG5cdFx0bGluZU51bWJlcnNXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuXHRcdGxpbmVOdW1iZXJzV3JhcHBlci5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgJ3RydWUnKTtcblx0XHRsaW5lTnVtYmVyc1dyYXBwZXIuY2xhc3NOYW1lID0gJ2xpbmUtbnVtYmVycy1yb3dzJztcblx0XHRsaW5lTnVtYmVyc1dyYXBwZXIuaW5uZXJIVE1MID0gbGluZXM7XG5cblx0XHRpZiAocHJlLmhhc0F0dHJpYnV0ZSgnZGF0YS1zdGFydCcpKSB7XG5cdFx0XHRwcmUuc3R5bGUuY291bnRlclJlc2V0ID0gJ2xpbmVudW1iZXIgJyArIChwYXJzZUludChwcmUuZ2V0QXR0cmlidXRlKCdkYXRhLXN0YXJ0JyksIDEwKSAtIDEpO1xuXHRcdH1cblxuXHRcdGVudi5lbGVtZW50LmFwcGVuZENoaWxkKGxpbmVOdW1iZXJzV3JhcHBlcik7XG5cblx0XHRyZXNpemVFbGVtZW50cyhbcHJlXSk7XG5cblx0XHRQcmlzbS5ob29rcy5ydW4oJ2xpbmUtbnVtYmVycycsIGVudik7XG5cdH0pO1xuXG5cdFByaXNtLmhvb2tzLmFkZCgnbGluZS1udW1iZXJzJywgZnVuY3Rpb24gKGVudikge1xuXHRcdGVudi5wbHVnaW5zID0gZW52LnBsdWdpbnMgfHwge307XG5cdFx0ZW52LnBsdWdpbnMubGluZU51bWJlcnMgPSB0cnVlO1xuXHR9KTtcblxufSgpKTtcblxuKGZ1bmN0aW9uICgpIHtcblxuXHRpZiAodHlwZW9mIFByaXNtID09PSAndW5kZWZpbmVkJyB8fCB0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0VsZW1lbnQvbWF0Y2hlcyNQb2x5ZmlsbFxuXHRpZiAoIUVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXMpIHtcblx0XHRFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzID0gRWxlbWVudC5wcm90b3R5cGUubXNNYXRjaGVzU2VsZWN0b3IgfHwgRWxlbWVudC5wcm90b3R5cGUud2Via2l0TWF0Y2hlc1NlbGVjdG9yO1xuXHR9XG5cblx0dmFyIExPQURJTkdfTUVTU0FHRSA9ICdMb2FkaW5nXHUyMDI2Jztcblx0dmFyIEZBSUxVUkVfTUVTU0FHRSA9IGZ1bmN0aW9uIChzdGF0dXMsIG1lc3NhZ2UpIHtcblx0XHRyZXR1cm4gJ1x1MjcxNiBFcnJvciAnICsgc3RhdHVzICsgJyB3aGlsZSBmZXRjaGluZyBmaWxlOiAnICsgbWVzc2FnZTtcblx0fTtcblx0dmFyIEZBSUxVUkVfRU1QVFlfTUVTU0FHRSA9ICdcdTI3MTYgRXJyb3I6IEZpbGUgZG9lcyBub3QgZXhpc3Qgb3IgaXMgZW1wdHknO1xuXG5cdHZhciBFWFRFTlNJT05TID0ge1xuXHRcdCdqcyc6ICdqYXZhc2NyaXB0Jyxcblx0XHQncHknOiAncHl0aG9uJyxcblx0XHQncmInOiAncnVieScsXG5cdFx0J3BzMSc6ICdwb3dlcnNoZWxsJyxcblx0XHQncHNtMSc6ICdwb3dlcnNoZWxsJyxcblx0XHQnc2gnOiAnYmFzaCcsXG5cdFx0J2JhdCc6ICdiYXRjaCcsXG5cdFx0J2gnOiAnYycsXG5cdFx0J3RleCc6ICdsYXRleCdcblx0fTtcblxuXHR2YXIgU1RBVFVTX0FUVFIgPSAnZGF0YS1zcmMtc3RhdHVzJztcblx0dmFyIFNUQVRVU19MT0FESU5HID0gJ2xvYWRpbmcnO1xuXHR2YXIgU1RBVFVTX0xPQURFRCA9ICdsb2FkZWQnO1xuXHR2YXIgU1RBVFVTX0ZBSUxFRCA9ICdmYWlsZWQnO1xuXG5cdHZhciBTRUxFQ1RPUiA9ICdwcmVbZGF0YS1zcmNdOm5vdChbJyArIFNUQVRVU19BVFRSICsgJz1cIicgKyBTVEFUVVNfTE9BREVEICsgJ1wiXSknXG5cdFx0KyAnOm5vdChbJyArIFNUQVRVU19BVFRSICsgJz1cIicgKyBTVEFUVVNfTE9BRElORyArICdcIl0pJztcblxuXHQvKipcblx0ICogTG9hZHMgdGhlIGdpdmVuIGZpbGUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgVGhlIFVSTCBvciBwYXRoIG9mIHRoZSBzb3VyY2UgZmlsZSB0byBsb2FkLlxuXHQgKiBAcGFyYW0geyhyZXN1bHQ6IHN0cmluZykgPT4gdm9pZH0gc3VjY2Vzc1xuXHQgKiBAcGFyYW0geyhyZWFzb246IHN0cmluZykgPT4gdm9pZH0gZXJyb3Jcblx0ICovXG5cdGZ1bmN0aW9uIGxvYWRGaWxlKHNyYywgc3VjY2VzcywgZXJyb3IpIHtcblx0XHR2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XG5cdFx0eGhyLm9wZW4oJ0dFVCcsIHNyYywgdHJ1ZSk7XG5cdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcblx0XHRcdGlmICh4aHIucmVhZHlTdGF0ZSA9PSA0KSB7XG5cdFx0XHRcdGlmICh4aHIuc3RhdHVzIDwgNDAwICYmIHhoci5yZXNwb25zZVRleHQpIHtcblx0XHRcdFx0XHRzdWNjZXNzKHhoci5yZXNwb25zZVRleHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGlmICh4aHIuc3RhdHVzID49IDQwMCkge1xuXHRcdFx0XHRcdFx0ZXJyb3IoRkFJTFVSRV9NRVNTQUdFKHhoci5zdGF0dXMsIHhoci5zdGF0dXNUZXh0KSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdGVycm9yKEZBSUxVUkVfRU1QVFlfTUVTU0FHRSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR4aHIuc2VuZChudWxsKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZXMgdGhlIGdpdmVuIHJhbmdlLlxuXHQgKlxuXHQgKiBUaGlzIHJldHVybnMgYSByYW5nZSB3aXRoIGluY2x1c2l2ZSBlbmRzLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IHJhbmdlXG5cdCAqIEByZXR1cm5zIHtbbnVtYmVyLCBudW1iZXIgfCB1bmRlZmluZWRdIHwgdW5kZWZpbmVkfVxuXHQgKi9cblx0ZnVuY3Rpb24gcGFyc2VSYW5nZShyYW5nZSkge1xuXHRcdHZhciBtID0gL15cXHMqKFxcZCspXFxzKig/OigsKVxccyooPzooXFxkKylcXHMqKT8pPyQvLmV4ZWMocmFuZ2UgfHwgJycpO1xuXHRcdGlmIChtKSB7XG5cdFx0XHR2YXIgc3RhcnQgPSBOdW1iZXIobVsxXSk7XG5cdFx0XHR2YXIgY29tbWEgPSBtWzJdO1xuXHRcdFx0dmFyIGVuZCA9IG1bM107XG5cblx0XHRcdGlmICghY29tbWEpIHtcblx0XHRcdFx0cmV0dXJuIFtzdGFydCwgc3RhcnRdO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCFlbmQpIHtcblx0XHRcdFx0cmV0dXJuIFtzdGFydCwgdW5kZWZpbmVkXTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBbc3RhcnQsIE51bWJlcihlbmQpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdFByaXNtLmhvb2tzLmFkZCgnYmVmb3JlLWhpZ2hsaWdodGFsbCcsIGZ1bmN0aW9uIChlbnYpIHtcblx0XHRlbnYuc2VsZWN0b3IgKz0gJywgJyArIFNFTEVDVE9SO1xuXHR9KTtcblxuXHRQcmlzbS5ob29rcy5hZGQoJ2JlZm9yZS1zYW5pdHktY2hlY2snLCBmdW5jdGlvbiAoZW52KSB7XG5cdFx0dmFyIHByZSA9IC8qKiBAdHlwZSB7SFRNTFByZUVsZW1lbnR9ICovIChlbnYuZWxlbWVudCk7XG5cdFx0aWYgKHByZS5tYXRjaGVzKFNFTEVDVE9SKSkge1xuXHRcdFx0ZW52LmNvZGUgPSAnJzsgLy8gZmFzdC1wYXRoIHRoZSB3aG9sZSB0aGluZyBhbmQgZ28gdG8gY29tcGxldGVcblxuXHRcdFx0cHJlLnNldEF0dHJpYnV0ZShTVEFUVVNfQVRUUiwgU1RBVFVTX0xPQURJTkcpOyAvLyBtYXJrIGFzIGxvYWRpbmdcblxuXHRcdFx0Ly8gYWRkIGNvZGUgZWxlbWVudCB3aXRoIGxvYWRpbmcgbWVzc2FnZVxuXHRcdFx0dmFyIGNvZGUgPSBwcmUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnQ09ERScpKTtcblx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSBMT0FESU5HX01FU1NBR0U7XG5cblx0XHRcdHZhciBzcmMgPSBwcmUuZ2V0QXR0cmlidXRlKCdkYXRhLXNyYycpO1xuXG5cdFx0XHR2YXIgbGFuZ3VhZ2UgPSBlbnYubGFuZ3VhZ2U7XG5cdFx0XHRpZiAobGFuZ3VhZ2UgPT09ICdub25lJykge1xuXHRcdFx0XHQvLyB0aGUgbGFuZ3VhZ2UgbWlnaHQgYmUgJ25vbmUnIGJlY2F1c2UgdGhlcmUgaXMgbm8gbGFuZ3VhZ2Ugc2V0O1xuXHRcdFx0XHQvLyBpbiB0aGlzIGNhc2UsIHdlIHdhbnQgdG8gdXNlIHRoZSBleHRlbnNpb24gYXMgdGhlIGxhbmd1YWdlXG5cdFx0XHRcdHZhciBleHRlbnNpb24gPSAoL1xcLihcXHcrKSQvLmV4ZWMoc3JjKSB8fCBbLCAnbm9uZSddKVsxXTtcblx0XHRcdFx0bGFuZ3VhZ2UgPSBFWFRFTlNJT05TW2V4dGVuc2lvbl0gfHwgZXh0ZW5zaW9uO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBzZXQgbGFuZ3VhZ2UgY2xhc3Nlc1xuXHRcdFx0UHJpc20udXRpbC5zZXRMYW5ndWFnZShjb2RlLCBsYW5ndWFnZSk7XG5cdFx0XHRQcmlzbS51dGlsLnNldExhbmd1YWdlKHByZSwgbGFuZ3VhZ2UpO1xuXG5cdFx0XHQvLyBwcmVsb2FkIHRoZSBsYW5ndWFnZVxuXHRcdFx0dmFyIGF1dG9sb2FkZXIgPSBQcmlzbS5wbHVnaW5zLmF1dG9sb2FkZXI7XG5cdFx0XHRpZiAoYXV0b2xvYWRlcikge1xuXHRcdFx0XHRhdXRvbG9hZGVyLmxvYWRMYW5ndWFnZXMobGFuZ3VhZ2UpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBsb2FkIGZpbGVcblx0XHRcdGxvYWRGaWxlKFxuXHRcdFx0XHRzcmMsXG5cdFx0XHRcdGZ1bmN0aW9uICh0ZXh0KSB7XG5cdFx0XHRcdFx0Ly8gbWFyayBhcyBsb2FkZWRcblx0XHRcdFx0XHRwcmUuc2V0QXR0cmlidXRlKFNUQVRVU19BVFRSLCBTVEFUVVNfTE9BREVEKTtcblxuXHRcdFx0XHRcdC8vIGhhbmRsZSBkYXRhLXJhbmdlXG5cdFx0XHRcdFx0dmFyIHJhbmdlID0gcGFyc2VSYW5nZShwcmUuZ2V0QXR0cmlidXRlKCdkYXRhLXJhbmdlJykpO1xuXHRcdFx0XHRcdGlmIChyYW5nZSkge1xuXHRcdFx0XHRcdFx0dmFyIGxpbmVzID0gdGV4dC5zcGxpdCgvXFxyXFxuP3xcXG4vZyk7XG5cblx0XHRcdFx0XHRcdC8vIHRoZSByYW5nZSBpcyBvbmUtYmFzZWQgYW5kIGluY2x1c2l2ZSBvbiBib3RoIGVuZHNcblx0XHRcdFx0XHRcdHZhciBzdGFydCA9IHJhbmdlWzBdO1xuXHRcdFx0XHRcdFx0dmFyIGVuZCA9IHJhbmdlWzFdID09IG51bGwgPyBsaW5lcy5sZW5ndGggOiByYW5nZVsxXTtcblxuXHRcdFx0XHRcdFx0aWYgKHN0YXJ0IDwgMCkgeyBzdGFydCArPSBsaW5lcy5sZW5ndGg7IH1cblx0XHRcdFx0XHRcdHN0YXJ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc3RhcnQgLSAxLCBsaW5lcy5sZW5ndGgpKTtcblx0XHRcdFx0XHRcdGlmIChlbmQgPCAwKSB7IGVuZCArPSBsaW5lcy5sZW5ndGg7IH1cblx0XHRcdFx0XHRcdGVuZCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVuZCwgbGluZXMubGVuZ3RoKSk7XG5cblx0XHRcdFx0XHRcdHRleHQgPSBsaW5lcy5zbGljZShzdGFydCwgZW5kKS5qb2luKCdcXG4nKTtcblxuXHRcdFx0XHRcdFx0Ly8gYWRkIGRhdGEtc3RhcnQgZm9yIGxpbmUgbnVtYmVyc1xuXHRcdFx0XHRcdFx0aWYgKCFwcmUuaGFzQXR0cmlidXRlKCdkYXRhLXN0YXJ0JykpIHtcblx0XHRcdFx0XHRcdFx0cHJlLnNldEF0dHJpYnV0ZSgnZGF0YS1zdGFydCcsIFN0cmluZyhzdGFydCArIDEpKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBoaWdobGlnaHQgY29kZVxuXHRcdFx0XHRcdGNvZGUudGV4dENvbnRlbnQgPSB0ZXh0O1xuXHRcdFx0XHRcdFByaXNtLmhpZ2hsaWdodEVsZW1lbnQoY29kZSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGZ1bmN0aW9uIChlcnJvcikge1xuXHRcdFx0XHRcdC8vIG1hcmsgYXMgZmFpbGVkXG5cdFx0XHRcdFx0cHJlLnNldEF0dHJpYnV0ZShTVEFUVVNfQVRUUiwgU1RBVFVTX0ZBSUxFRCk7XG5cblx0XHRcdFx0XHRjb2RlLnRleHRDb250ZW50ID0gZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHR9KTtcblxuXHRQcmlzbS5wbHVnaW5zLmZpbGVIaWdobGlnaHQgPSB7XG5cdFx0LyoqXG5cdFx0ICogRXhlY3V0ZXMgdGhlIEZpbGUgSGlnaGxpZ2h0IHBsdWdpbiBmb3IgYWxsIG1hdGNoaW5nIGBwcmVgIGVsZW1lbnRzIHVuZGVyIHRoZSBnaXZlbiBjb250YWluZXIuXG5cdFx0ICpcblx0XHQgKiBOb3RlOiBFbGVtZW50cyB3aGljaCBhcmUgYWxyZWFkeSBsb2FkZWQgb3IgY3VycmVudGx5IGxvYWRpbmcgd2lsbCBub3QgYmUgdG91Y2hlZCBieSB0aGlzIG1ldGhvZC5cblx0XHQgKlxuXHRcdCAqIEBwYXJhbSB7UGFyZW50Tm9kZX0gW2NvbnRhaW5lcj1kb2N1bWVudF1cblx0XHQgKi9cblx0XHRoaWdobGlnaHQ6IGZ1bmN0aW9uIGhpZ2hsaWdodChjb250YWluZXIpIHtcblx0XHRcdHZhciBlbGVtZW50cyA9IChjb250YWluZXIgfHwgZG9jdW1lbnQpLnF1ZXJ5U2VsZWN0b3JBbGwoU0VMRUNUT1IpO1xuXG5cdFx0XHRmb3IgKHZhciBpID0gMCwgZWxlbWVudDsgKGVsZW1lbnQgPSBlbGVtZW50c1tpKytdKTspIHtcblx0XHRcdFx0UHJpc20uaGlnaGxpZ2h0RWxlbWVudChlbGVtZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH07XG5cblx0dmFyIGxvZ2dlZCA9IGZhbHNlO1xuXHQvKiogQGRlcHJlY2F0ZWQgVXNlIGBQcmlzbS5wbHVnaW5zLmZpbGVIaWdobGlnaHQuaGlnaGxpZ2h0YCBpbnN0ZWFkLiAqL1xuXHRQcmlzbS5maWxlSGlnaGxpZ2h0ID0gZnVuY3Rpb24gKCkge1xuXHRcdGlmICghbG9nZ2VkKSB7XG5cdFx0XHRjb25zb2xlLndhcm4oJ1ByaXNtLmZpbGVIaWdobGlnaHQgaXMgZGVwcmVjYXRlZC4gVXNlIGBQcmlzbS5wbHVnaW5zLmZpbGVIaWdobGlnaHQuaGlnaGxpZ2h0YCBpbnN0ZWFkLicpO1xuXHRcdFx0bG9nZ2VkID0gdHJ1ZTtcblx0XHR9XG5cdFx0UHJpc20ucGx1Z2lucy5maWxlSGlnaGxpZ2h0LmhpZ2hsaWdodC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXHR9O1xuXG59KCkpO1xuXG4iLCAiLyoqXG4gKiBAbGljZW5zZSBNSVRcbiAqIHRvcGJhciAxLjAuMCwgMjAyMS0wMS0wNlxuICogaHR0cDovL2J1dW5ndXllbi5naXRodWIuaW8vdG9wYmFyXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjEgQnV1IE5ndXllblxuICovXG4oZnVuY3Rpb24gKHdpbmRvdywgZG9jdW1lbnQpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgLy8gaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vcGF1bGlyaXNoLzE1Nzk2NzFcbiAgKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgbGFzdFRpbWUgPSAwO1xuICAgIHZhciB2ZW5kb3JzID0gW1wibXNcIiwgXCJtb3pcIiwgXCJ3ZWJraXRcIiwgXCJvXCJdO1xuICAgIGZvciAodmFyIHggPSAwOyB4IDwgdmVuZG9ycy5sZW5ndGggJiYgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7ICsreCkge1xuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9XG4gICAgICAgIHdpbmRvd1t2ZW5kb3JzW3hdICsgXCJSZXF1ZXN0QW5pbWF0aW9uRnJhbWVcIl07XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPVxuICAgICAgICB3aW5kb3dbdmVuZG9yc1t4XSArIFwiQ2FuY2VsQW5pbWF0aW9uRnJhbWVcIl0gfHxcbiAgICAgICAgd2luZG93W3ZlbmRvcnNbeF0gKyBcIkNhbmNlbFJlcXVlc3RBbmltYXRpb25GcmFtZVwiXTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKVxuICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IGZ1bmN0aW9uIChjYWxsYmFjaywgZWxlbWVudCkge1xuICAgICAgICB2YXIgY3VyclRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcbiAgICAgICAgdmFyIHRpbWVUb0NhbGwgPSBNYXRoLm1heCgwLCAxNiAtIChjdXJyVGltZSAtIGxhc3RUaW1lKSk7XG4gICAgICAgIHZhciBpZCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjYWxsYmFjayhjdXJyVGltZSArIHRpbWVUb0NhbGwpO1xuICAgICAgICB9LCB0aW1lVG9DYWxsKTtcbiAgICAgICAgbGFzdFRpbWUgPSBjdXJyVGltZSArIHRpbWVUb0NhbGw7XG4gICAgICAgIHJldHVybiBpZDtcbiAgICAgIH07XG4gICAgaWYgKCF3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUpXG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGlkKTtcbiAgICAgIH07XG4gIH0pKCk7XG5cbiAgdmFyIGNhbnZhcyxcbiAgICBwcm9ncmVzc1RpbWVySWQsXG4gICAgZmFkZVRpbWVySWQsXG4gICAgY3VycmVudFByb2dyZXNzLFxuICAgIHNob3dpbmcsXG4gICAgYWRkRXZlbnQgPSBmdW5jdGlvbiAoZWxlbSwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgaWYgKGVsZW0uYWRkRXZlbnRMaXN0ZW5lcikgZWxlbS5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKTtcbiAgICAgIGVsc2UgaWYgKGVsZW0uYXR0YWNoRXZlbnQpIGVsZW0uYXR0YWNoRXZlbnQoXCJvblwiICsgdHlwZSwgaGFuZGxlcik7XG4gICAgICBlbHNlIGVsZW1bXCJvblwiICsgdHlwZV0gPSBoYW5kbGVyO1xuICAgIH0sXG4gICAgb3B0aW9ucyA9IHtcbiAgICAgIGF1dG9SdW46IHRydWUsXG4gICAgICBiYXJUaGlja25lc3M6IDMsXG4gICAgICBiYXJDb2xvcnM6IHtcbiAgICAgICAgMDogXCJyZ2JhKDI2LCAgMTg4LCAxNTYsIC45KVwiLFxuICAgICAgICBcIi4yNVwiOiBcInJnYmEoNTIsICAxNTIsIDIxOSwgLjkpXCIsXG4gICAgICAgIFwiLjUwXCI6IFwicmdiYSgyNDEsIDE5NiwgMTUsICAuOSlcIixcbiAgICAgICAgXCIuNzVcIjogXCJyZ2JhKDIzMCwgMTI2LCAzNCwgIC45KVwiLFxuICAgICAgICBcIjEuMFwiOiBcInJnYmEoMjExLCA4NCwgIDAsICAgLjkpXCIsXG4gICAgICB9LFxuICAgICAgc2hhZG93Qmx1cjogMTAsXG4gICAgICBzaGFkb3dDb2xvcjogXCJyZ2JhKDAsICAgMCwgICAwLCAgIC42KVwiLFxuICAgICAgY2xhc3NOYW1lOiBudWxsLFxuICAgIH0sXG4gICAgcmVwYWludCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGNhbnZhcy53aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoO1xuICAgICAgY2FudmFzLmhlaWdodCA9IG9wdGlvbnMuYmFyVGhpY2tuZXNzICogNTsgLy8gbmVlZCBzcGFjZSBmb3Igc2hhZG93XG5cbiAgICAgIHZhciBjdHggPSBjYW52YXMuZ2V0Q29udGV4dChcIjJkXCIpO1xuICAgICAgY3R4LnNoYWRvd0JsdXIgPSBvcHRpb25zLnNoYWRvd0JsdXI7XG4gICAgICBjdHguc2hhZG93Q29sb3IgPSBvcHRpb25zLnNoYWRvd0NvbG9yO1xuXG4gICAgICB2YXIgbGluZUdyYWRpZW50ID0gY3R4LmNyZWF0ZUxpbmVhckdyYWRpZW50KDAsIDAsIGNhbnZhcy53aWR0aCwgMCk7XG4gICAgICBmb3IgKHZhciBzdG9wIGluIG9wdGlvbnMuYmFyQ29sb3JzKVxuICAgICAgICBsaW5lR3JhZGllbnQuYWRkQ29sb3JTdG9wKHN0b3AsIG9wdGlvbnMuYmFyQ29sb3JzW3N0b3BdKTtcbiAgICAgIGN0eC5saW5lV2lkdGggPSBvcHRpb25zLmJhclRoaWNrbmVzcztcbiAgICAgIGN0eC5iZWdpblBhdGgoKTtcbiAgICAgIGN0eC5tb3ZlVG8oMCwgb3B0aW9ucy5iYXJUaGlja25lc3MgLyAyKTtcbiAgICAgIGN0eC5saW5lVG8oXG4gICAgICAgIE1hdGguY2VpbChjdXJyZW50UHJvZ3Jlc3MgKiBjYW52YXMud2lkdGgpLFxuICAgICAgICBvcHRpb25zLmJhclRoaWNrbmVzcyAvIDJcbiAgICAgICk7XG4gICAgICBjdHguc3Ryb2tlU3R5bGUgPSBsaW5lR3JhZGllbnQ7XG4gICAgICBjdHguc3Ryb2tlKCk7XG4gICAgfSxcbiAgICBjcmVhdGVDYW52YXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xuICAgICAgdmFyIHN0eWxlID0gY2FudmFzLnN0eWxlO1xuICAgICAgc3R5bGUucG9zaXRpb24gPSBcImZpeGVkXCI7XG4gICAgICBzdHlsZS50b3AgPSBzdHlsZS5sZWZ0ID0gc3R5bGUucmlnaHQgPSBzdHlsZS5tYXJnaW4gPSBzdHlsZS5wYWRkaW5nID0gMDtcbiAgICAgIHN0eWxlLnpJbmRleCA9IDEwMDAwMTtcbiAgICAgIHN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIjtcbiAgICAgIGlmIChvcHRpb25zLmNsYXNzTmFtZSkgY2FudmFzLmNsYXNzTGlzdC5hZGQob3B0aW9ucy5jbGFzc05hbWUpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjYW52YXMpO1xuICAgICAgYWRkRXZlbnQod2luZG93LCBcInJlc2l6ZVwiLCByZXBhaW50KTtcbiAgICB9LFxuICAgIHRvcGJhciA9IHtcbiAgICAgIGNvbmZpZzogZnVuY3Rpb24gKG9wdHMpIHtcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdHMpXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGFzT3duUHJvcGVydHkoa2V5KSkgb3B0aW9uc1trZXldID0gb3B0c1trZXldO1xuICAgICAgfSxcbiAgICAgIHNob3c6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHNob3dpbmcpIHJldHVybjtcbiAgICAgICAgc2hvd2luZyA9IHRydWU7XG4gICAgICAgIGlmIChmYWRlVGltZXJJZCAhPT0gbnVsbCkgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKGZhZGVUaW1lcklkKTtcbiAgICAgICAgaWYgKCFjYW52YXMpIGNyZWF0ZUNhbnZhcygpO1xuICAgICAgICBjYW52YXMuc3R5bGUub3BhY2l0eSA9IDE7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICB0b3BiYXIucHJvZ3Jlc3MoMCk7XG4gICAgICAgIGlmIChvcHRpb25zLmF1dG9SdW4pIHtcbiAgICAgICAgICAoZnVuY3Rpb24gbG9vcCgpIHtcbiAgICAgICAgICAgIHByb2dyZXNzVGltZXJJZCA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG4gICAgICAgICAgICB0b3BiYXIucHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIFwiK1wiICsgMC4wNSAqIE1hdGgucG93KDEgLSBNYXRoLnNxcnQoY3VycmVudFByb2dyZXNzKSwgMilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSkoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHByb2dyZXNzOiBmdW5jdGlvbiAodG8pIHtcbiAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gXCJ1bmRlZmluZWRcIikgcmV0dXJuIGN1cnJlbnRQcm9ncmVzcztcbiAgICAgICAgaWYgKHR5cGVvZiB0byA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHRvID1cbiAgICAgICAgICAgICh0by5pbmRleE9mKFwiK1wiKSA+PSAwIHx8IHRvLmluZGV4T2YoXCItXCIpID49IDBcbiAgICAgICAgICAgICAgPyBjdXJyZW50UHJvZ3Jlc3NcbiAgICAgICAgICAgICAgOiAwKSArIHBhcnNlRmxvYXQodG8pO1xuICAgICAgICB9XG4gICAgICAgIGN1cnJlbnRQcm9ncmVzcyA9IHRvID4gMSA/IDEgOiB0bztcbiAgICAgICAgcmVwYWludCgpO1xuICAgICAgICByZXR1cm4gY3VycmVudFByb2dyZXNzO1xuICAgICAgfSxcbiAgICAgIGhpZGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKCFzaG93aW5nKSByZXR1cm47XG4gICAgICAgIHNob3dpbmcgPSBmYWxzZTtcbiAgICAgICAgaWYgKHByb2dyZXNzVGltZXJJZCAhPSBudWxsKSB7XG4gICAgICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHByb2dyZXNzVGltZXJJZCk7XG4gICAgICAgICAgcHJvZ3Jlc3NUaW1lcklkID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICAoZnVuY3Rpb24gbG9vcCgpIHtcbiAgICAgICAgICBpZiAodG9wYmFyLnByb2dyZXNzKFwiKy4xXCIpID49IDEpIHtcbiAgICAgICAgICAgIGNhbnZhcy5zdHlsZS5vcGFjaXR5IC09IDAuMDU7XG4gICAgICAgICAgICBpZiAoY2FudmFzLnN0eWxlLm9wYWNpdHkgPD0gMC4wNSkge1xuICAgICAgICAgICAgICBjYW52YXMuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiO1xuICAgICAgICAgICAgICBmYWRlVGltZXJJZCA9IG51bGw7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmFkZVRpbWVySWQgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuICAgICAgICB9KSgpO1xuICAgICAgfSxcbiAgICB9O1xuXG4gIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xuICAgIG1vZHVsZS5leHBvcnRzID0gdG9wYmFyO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0b3BiYXI7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy50b3BiYXIgPSB0b3BiYXI7XG4gIH1cbn0uY2FsbCh0aGlzLCB3aW5kb3csIGRvY3VtZW50KSk7XG4iLCAiaW1wb3J0ICQgZnJvbSBcImpxdWVyeVwiO1xud2luZG93LiQgPSAkO1xud2luZG93LmpRdWVyeSA9ICQ7XG5cbmltcG9ydCBcImJvb3RzdHJhcFwiO1xuaW1wb3J0IFwiLi4vdmVuZG9yL3ByaXNtXCI7XG5cbmltcG9ydCBcIi4vcmVwb3NpdG9yeVwiO1xuaW1wb3J0IFwiLi9rbXhfYW5pbVwiO1xuXG4vLyBJZiB5b3Ugd2FudCB0byB1c2UgUGhvZW5peCBjaGFubmVscywgcnVuIGBtaXggaGVscCBwaHguZ2VuLmNoYW5uZWxgXG4vLyB0byBnZXQgc3RhcnRlZCBhbmQgdGhlbiB1bmNvbW1lbnQgdGhlIGxpbmUgYmVsb3cuXG4vLyBpbXBvcnQgXCIuL3VzZXJfc29ja2V0LmpzXCJcblxuLy8gSW5jbHVkZSBwaG9lbml4X2h0bWwgdG8gaGFuZGxlIG1ldGhvZD1QVVQvREVMRVRFIGluIGZvcm1zIGFuZCBidXR0b25zLlxuaW1wb3J0IFwicGhvZW5peF9odG1sXCI7XG4vLyBFc3RhYmxpc2ggUGhvZW5peCBTb2NrZXQgYW5kIExpdmVWaWV3IGNvbmZpZ3VyYXRpb24uXG5pbXBvcnQge1NvY2tldH0gZnJvbSBcInBob2VuaXhcIjtcbmltcG9ydCB7TGl2ZVNvY2tldH0gZnJvbSBcInBob2VuaXhfbGl2ZV92aWV3XCI7XG5pbXBvcnQgdG9wYmFyIGZyb20gXCIuLi92ZW5kb3IvdG9wYmFyXCI7XG5cbmxldCBjc3JmVG9rZW4gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwibWV0YVtuYW1lPSdjc3JmLXRva2VuJ11cIikuZ2V0QXR0cmlidXRlKFwiY29udGVudFwiKTtcbmxldCBsaXZlU29ja2V0ID0gbmV3IExpdmVTb2NrZXQoXCIvbGl2ZVwiLCBTb2NrZXQsIHtwYXJhbXM6IHtfY3NyZl90b2tlbjogY3NyZlRva2VufX0pO1xuXG4vLyBTaG93IHByb2dyZXNzIGJhciBvbiBsaXZlIG5hdmlnYXRpb24gYW5kIGZvcm0gc3VibWl0c1xudG9wYmFyLmNvbmZpZyh7YmFyQ29sb3JzOiB7MDogXCIjMjlkXCJ9LCBzaGFkb3dDb2xvcjogXCJyZ2JhKDAsIDAsIDAsIC4zKVwifSk7XG53aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBoeDpwYWdlLWxvYWRpbmctc3RhcnRcIiwgaW5mbyA9PiB0b3BiYXIuc2hvdygpKTtcbndpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGh4OnBhZ2UtbG9hZGluZy1zdG9wXCIsIGluZm8gPT4gdG9wYmFyLmhpZGUoKSk7XG5cbi8vIGNvbm5lY3QgaWYgdGhlcmUgYXJlIGFueSBMaXZlVmlld3Mgb24gdGhlIHBhZ2VcbmxpdmVTb2NrZXQuY29ubmVjdCgpO1xuXG4vLyBleHBvc2UgbGl2ZVNvY2tldCBvbiB3aW5kb3cgZm9yIHdlYiBjb25zb2xlIGRlYnVnIGxvZ3MgYW5kIGxhdGVuY3kgc2ltdWxhdGlvbjpcbi8vID4+IGxpdmVTb2NrZXQuZW5hYmxlRGVidWcoKVxuLy8gPj4gbGl2ZVNvY2tldC5lbmFibGVMYXRlbmN5U2ltKDEwMDApICAvLyBlbmFibGVkIGZvciBkdXJhdGlvbiBvZiBicm93c2VyIHNlc3Npb25cbi8vID4+IGxpdmVTb2NrZXQuZGlzYWJsZUxhdGVuY3lTaW0oKVxud2luZG93LmxpdmVTb2NrZXQgPSBsaXZlU29ja2V0O1xuIiwgImV4cG9ydCAqIGZyb20gXCIuL2VudW1zLmpzXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9tb2RpZmllcnMvaW5kZXguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93LCBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyQmFzZSB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciB9IGZyb20gXCIuL3BvcHBlci5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciBhcyBjcmVhdGVQb3BwZXJMaXRlIH0gZnJvbSBcIi4vcG9wcGVyLWxpdGUuanNcIjsiLCAiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Tm9kZU5hbWUoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudCA/IChlbGVtZW50Lm5vZGVOYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpIDogbnVsbDtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwgImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7IC8vIFRoaXMgbW9kaWZpZXIgdGFrZXMgdGhlIHN0eWxlcyBwcmVwYXJlZCBieSB0aGUgYGNvbXB1dGVTdHlsZXNgIG1vZGlmaWVyXG4vLyBhbmQgYXBwbGllcyB0aGVtIHRvIHRoZSBIVE1MRWxlbWVudHMgc3VjaCBhcyBwb3BwZXIgYW5kIGFycm93XG5cbmZ1bmN0aW9uIGFwcGx5U3R5bGVzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZTtcbiAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB2YXIgc3R5bGUgPSBzdGF0ZS5zdHlsZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gRmxvdyBkb2Vzbid0IHN1cHBvcnQgdG8gZXh0ZW5kIHRoaXMgcHJvcGVydHksIGJ1dCBpdCdzIHRoZSBtb3N0XG4gICAgLy8gZWZmZWN0aXZlIHdheSB0byBhcHBseSBzdHlsZXMgdG8gYW4gSFRNTEVsZW1lbnRcbiAgICAvLyAkRmxvd0ZpeE1lW2Nhbm5vdC13cml0ZV1cblxuXG4gICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIHZhbHVlID0gYXR0cmlidXRlc1tuYW1lXTtcblxuICAgICAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlID09PSB0cnVlID8gJycgOiB2YWx1ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGU7XG4gIHZhciBpbml0aWFsU3R5bGVzID0ge1xuICAgIHBvcHBlcjoge1xuICAgICAgcG9zaXRpb246IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBsZWZ0OiAnMCcsXG4gICAgICB0b3A6ICcwJyxcbiAgICAgIG1hcmdpbjogJzAnXG4gICAgfSxcbiAgICBhcnJvdzoge1xuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZSdcbiAgICB9LFxuICAgIHJlZmVyZW5jZToge31cbiAgfTtcbiAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5wb3BwZXIuc3R5bGUsIGluaXRpYWxTdHlsZXMucG9wcGVyKTtcbiAgc3RhdGUuc3R5bGVzID0gaW5pdGlhbFN0eWxlcztcblxuICBpZiAoc3RhdGUuZWxlbWVudHMuYXJyb3cpIHtcbiAgICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLmFycm93LnN0eWxlLCBpbml0aWFsU3R5bGVzLmFycm93KTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgT2JqZWN0LmtleXMoc3RhdGUuZWxlbWVudHMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbbmFtZV07XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgICB2YXIgc3R5bGVQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc3RhdGUuc3R5bGVzLmhhc093blByb3BlcnR5KG5hbWUpID8gc3RhdGUuc3R5bGVzW25hbWVdIDogaW5pdGlhbFN0eWxlc1tuYW1lXSk7IC8vIFNldCBhbGwgdmFsdWVzIHRvIGFuIGVtcHR5IHN0cmluZyB0byB1bnNldCB0aGVtXG5cbiAgICAgIHZhciBzdHlsZSA9IHN0eWxlUHJvcGVydGllcy5yZWR1Y2UoZnVuY3Rpb24gKHN0eWxlLCBwcm9wZXJ0eSkge1xuICAgICAgICBzdHlsZVtwcm9wZXJ0eV0gPSAnJztcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfSwge30pOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgICAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8ICFnZXROb2RlTmFtZShlbGVtZW50KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgICAgT2JqZWN0LmtleXMoYXR0cmlidXRlcykuZm9yRWFjaChmdW5jdGlvbiAoYXR0cmlidXRlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBhcHBseVN0eWxlcyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ2NvbXB1dGVTdHlsZXMnXVxufTsiLCAiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsICJleHBvcnQgdmFyIG1heCA9IE1hdGgubWF4O1xuZXhwb3J0IHZhciBtaW4gPSBNYXRoLm1pbjtcbmV4cG9ydCB2YXIgcm91bmQgPSBNYXRoLnJvdW5kOyIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRVQVN0cmluZygpIHtcbiAgdmFyIHVhRGF0YSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhO1xuXG4gIGlmICh1YURhdGEgIT0gbnVsbCAmJiB1YURhdGEuYnJhbmRzICYmIEFycmF5LmlzQXJyYXkodWFEYXRhLmJyYW5kcykpIHtcbiAgICByZXR1cm4gdWFEYXRhLmJyYW5kcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLmJyYW5kICsgXCIvXCIgKyBpdGVtLnZlcnNpb247XG4gICAgfSkuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG59IiwgImltcG9ydCBnZXRVQVN0cmluZyBmcm9tIFwiLi4vdXRpbHMvdXNlckFnZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0xheW91dFZpZXdwb3J0KCkge1xuICByZXR1cm4gIS9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QoZ2V0VUFTdHJpbmcoKSk7XG59IiwgImltcG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgaW5jbHVkZVNjYWxlLCBpc0ZpeGVkU3RyYXRlZ3kpIHtcbiAgaWYgKGluY2x1ZGVTY2FsZSA9PT0gdm9pZCAwKSB7XG4gICAgaW5jbHVkZVNjYWxlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoaXNGaXhlZFN0cmF0ZWd5ID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkU3RyYXRlZ3kgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBjbGllbnRSZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpbmNsdWRlU2NhbGUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIHNjYWxlWCA9IGVsZW1lbnQub2Zmc2V0V2lkdGggPiAwID8gcm91bmQoY2xpZW50UmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDEgOiAxO1xuICAgIHNjYWxlWSA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0ID4gMCA/IHJvdW5kKGNsaWVudFJlY3QuaGVpZ2h0KSAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDEgOiAxO1xuICB9XG5cbiAgdmFyIF9yZWYgPSBpc0VsZW1lbnQoZWxlbWVudCkgPyBnZXRXaW5kb3coZWxlbWVudCkgOiB3aW5kb3csXG4gICAgICB2aXN1YWxWaWV3cG9ydCA9IF9yZWYudmlzdWFsVmlld3BvcnQ7XG5cbiAgdmFyIGFkZFZpc3VhbE9mZnNldHMgPSAhaXNMYXlvdXRWaWV3cG9ydCgpICYmIGlzRml4ZWRTdHJhdGVneTtcbiAgdmFyIHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgKGFkZFZpc3VhbE9mZnNldHMgJiYgdmlzdWFsVmlld3BvcnQgPyB2aXN1YWxWaWV3cG9ydC5vZmZzZXRMZWZ0IDogMCkpIC8gc2NhbGVYO1xuICB2YXIgeSA9IChjbGllbnRSZWN0LnRvcCArIChhZGRWaXN1YWxPZmZzZXRzICYmIHZpc3VhbFZpZXdwb3J0ID8gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wIDogMCkpIC8gc2NhbGVZO1xuICB2YXIgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoIC8gc2NhbGVYO1xuICB2YXIgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZVk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHRvcDogeSxcbiAgICByaWdodDogeCArIHdpZHRoLFxuICAgIGJvdHRvbTogeSArIGhlaWdodCxcbiAgICBsZWZ0OiB4LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiOyAvLyBSZXR1cm5zIHRoZSBsYXlvdXQgcmVjdCBvZiBhbiBlbGVtZW50IHJlbGF0aXZlIHRvIGl0cyBvZmZzZXRQYXJlbnQuIExheW91dFxuLy8gbWVhbnMgaXQgZG9lc24ndCB0YWtlIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRMYXlvdXRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7IC8vIFVzZSB0aGUgY2xpZW50UmVjdCBzaXplcyBpZiBpdCdzIG5vdCBiZWVuIHRyYW5zZm9ybWVkLlxuICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEyMjNcblxuICB2YXIgd2lkdGggPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3Qud2lkdGggLSB3aWR0aCkgPD0gMSkge1xuICAgIHdpZHRoID0gY2xpZW50UmVjdC53aWR0aDtcbiAgfVxuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LmhlaWdodCAtIGhlaWdodCkgPD0gMSkge1xuICAgIGhlaWdodCA9IGNsaWVudFJlY3QuaGVpZ2h0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiBlbGVtZW50Lm9mZnNldExlZnQsXG4gICAgeTogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsICJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzVGFibGVFbGVtZW50KGVsZW1lbnQpIHtcbiAgcmV0dXJuIFsndGFibGUnLCAndGQnLCAndGgnXS5pbmRleE9mKGdldE5vZGVOYW1lKGVsZW1lbnQpKSA+PSAwO1xufSIsICJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCAiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQsIGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGdldFVBU3RyaW5nIGZyb20gXCIuLi91dGlscy91c2VyQWdlbnQuanNcIjtcblxuZnVuY3Rpb24gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzgzN1xuICBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5vZmZzZXRQYXJlbnQ7XG59IC8vIGAub2Zmc2V0UGFyZW50YCByZXBvcnRzIGBudWxsYCBmb3IgZml4ZWQgZWxlbWVudHMsIHdoaWxlIGFic29sdXRlIGVsZW1lbnRzXG4vLyByZXR1cm4gdGhlIGNvbnRhaW5pbmcgYmxvY2tcblxuXG5mdW5jdGlvbiBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkge1xuICB2YXIgaXNGaXJlZm94ID0gL2ZpcmVmb3gvaS50ZXN0KGdldFVBU3RyaW5nKCkpO1xuICB2YXIgaXNJRSA9IC9UcmlkZW50L2kudGVzdChnZXRVQVN0cmluZygpKTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIGlmIChpc1NoYWRvd1Jvb3QoY3VycmVudE5vZGUpKSB7XG4gICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5ob3N0O1xuICB9XG5cbiAgd2hpbGUgKGlzSFRNTEVsZW1lbnQoY3VycmVudE5vZGUpICYmIFsnaHRtbCcsICdib2R5J10uaW5kZXhPZihnZXROb2RlTmFtZShjdXJyZW50Tm9kZSkpIDwgMCkge1xuICAgIHZhciBjc3MgPSBnZXRDb21wdXRlZFN0eWxlKGN1cnJlbnROb2RlKTsgLy8gVGhpcyBpcyBub24tZXhoYXVzdGl2ZSBidXQgY292ZXJzIHRoZSBtb3N0IGNvbW1vbiBDU1MgcHJvcGVydGllcyB0aGF0XG4gICAgLy8gY3JlYXRlIGEgY29udGFpbmluZyBibG9jay5cbiAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9DU1MvQ29udGFpbmluZ19ibG9jayNpZGVudGlmeWluZ190aGVfY29udGFpbmluZ19ibG9ja1xuXG4gICAgaWYgKGNzcy50cmFuc2Zvcm0gIT09ICdub25lJyB8fCBjc3MucGVyc3BlY3RpdmUgIT09ICdub25lJyB8fCBjc3MuY29udGFpbiA9PT0gJ3BhaW50JyB8fCBbJ3RyYW5zZm9ybScsICdwZXJzcGVjdGl2ZSddLmluZGV4T2YoY3NzLndpbGxDaGFuZ2UpICE9PSAtMSB8fCBpc0ZpcmVmb3ggJiYgY3NzLndpbGxDaGFuZ2UgPT09ICdmaWx0ZXInIHx8IGlzRmlyZWZveCAmJiBjc3MuZmlsdGVyICYmIGNzcy5maWx0ZXIgIT09ICdub25lJykge1xuICAgICAgcmV0dXJuIGN1cnJlbnROb2RlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50Tm9kZSA9IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59IC8vIEdldHMgdGhlIGNsb3Nlc3QgYW5jZXN0b3IgcG9zaXRpb25lZCBlbGVtZW50LiBIYW5kbGVzIHNvbWUgZWRnZSBjYXNlcyxcbi8vIHN1Y2ggYXMgdGFibGUgYW5jZXN0b3JzIGFuZCBjcm9zcyBicm93c2VyIGJ1Z3MuXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgd2hpbGUgKG9mZnNldFBhcmVudCAmJiBpc1RhYmxlRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCk7XG4gIH1cblxuICBpZiAob2Zmc2V0UGFyZW50ICYmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnaHRtbCcgfHwgZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2JvZHknICYmIGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiA9PT0gJ3N0YXRpYycpKSB7XG4gICAgcmV0dXJuIHdpbmRvdztcbiAgfVxuXG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbmRvdztcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwgImltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuL21hdGguanNcIjtcbmV4cG9ydCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59XG5leHBvcnQgZnVuY3Rpb24gd2l0aGluTWF4Q2xhbXAobWluLCB2YWx1ZSwgbWF4KSB7XG4gIHZhciB2ID0gd2l0aGluKG1pbiwgdmFsdWUsIG1heCk7XG4gIHJldHVybiB2ID4gbWF4ID8gbWF4IDogdjtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsICJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZXhwYW5kVG9IYXNoTWFwKHZhbHVlLCBrZXlzKSB7XG4gIHJldHVybiBrZXlzLnJlZHVjZShmdW5jdGlvbiAoaGFzaE1hcCwga2V5KSB7XG4gICAgaGFzaE1hcFtrZXldID0gdmFsdWU7XG4gICAgcmV0dXJuIGhhc2hNYXA7XG4gIH0sIHt9KTtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgd2l0aGluIH0gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwgImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdW5zZXRTaWRlcyA9IHtcbiAgdG9wOiAnYXV0bycsXG4gIHJpZ2h0OiAnYXV0bycsXG4gIGJvdHRvbTogJ2F1dG8nLFxuICBsZWZ0OiAnYXV0bydcbn07IC8vIFJvdW5kIHRoZSBvZmZzZXRzIHRvIHRoZSBuZWFyZXN0IHN1aXRhYmxlIHN1YnBpeGVsIGJhc2VkIG9uIHRoZSBEUFIuXG4vLyBab29taW5nIGNhbiBjaGFuZ2UgdGhlIERQUiwgYnV0IGl0IHNlZW1zIHRvIHJlcG9ydCBhIHZhbHVlIHRoYXQgd2lsbFxuLy8gY2xlYW5seSBkaXZpZGUgdGhlIHZhbHVlcyBpbnRvIHRoZSBhcHByb3ByaWF0ZSBzdWJwaXhlbHMuXG5cbmZ1bmN0aW9uIHJvdW5kT2Zmc2V0c0J5RFBSKF9yZWYsIHdpbikge1xuICB2YXIgeCA9IF9yZWYueCxcbiAgICAgIHkgPSBfcmVmLnk7XG4gIHZhciBkcHIgPSB3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xuICByZXR1cm4ge1xuICAgIHg6IHJvdW5kKHggKiBkcHIpIC8gZHByIHx8IDAsXG4gICAgeTogcm91bmQoeSAqIGRwcikgLyBkcHIgfHwgMFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFwVG9TdHlsZXMoX3JlZjIpIHtcbiAgdmFyIF9PYmplY3QkYXNzaWduMjtcblxuICB2YXIgcG9wcGVyID0gX3JlZjIucG9wcGVyLFxuICAgICAgcG9wcGVyUmVjdCA9IF9yZWYyLnBvcHBlclJlY3QsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmMi5wbGFjZW1lbnQsXG4gICAgICB2YXJpYXRpb24gPSBfcmVmMi52YXJpYXRpb24sXG4gICAgICBvZmZzZXRzID0gX3JlZjIub2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uID0gX3JlZjIucG9zaXRpb24sXG4gICAgICBncHVBY2NlbGVyYXRpb24gPSBfcmVmMi5ncHVBY2NlbGVyYXRpb24sXG4gICAgICBhZGFwdGl2ZSA9IF9yZWYyLmFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzID0gX3JlZjIucm91bmRPZmZzZXRzLFxuICAgICAgaXNGaXhlZCA9IF9yZWYyLmlzRml4ZWQ7XG4gIHZhciBfb2Zmc2V0cyR4ID0gb2Zmc2V0cy54LFxuICAgICAgeCA9IF9vZmZzZXRzJHggPT09IHZvaWQgMCA/IDAgOiBfb2Zmc2V0cyR4LFxuICAgICAgX29mZnNldHMkeSA9IG9mZnNldHMueSxcbiAgICAgIHkgPSBfb2Zmc2V0cyR5ID09PSB2b2lkIDAgPyAwIDogX29mZnNldHMkeTtcblxuICB2YXIgX3JlZjMgPSB0eXBlb2Ygcm91bmRPZmZzZXRzID09PSAnZnVuY3Rpb24nID8gcm91bmRPZmZzZXRzKHtcbiAgICB4OiB4LFxuICAgIHk6IHlcbiAgfSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWYzLng7XG4gIHkgPSBfcmVmMy55O1xuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTtcbiAgICAgIHZhciBvZmZzZXRZID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQuaGVpZ2h0IDogLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgICBvZmZzZXRQYXJlbnRbaGVpZ2h0UHJvcF07XG4gICAgICB5IC09IG9mZnNldFkgLSBwb3BwZXJSZWN0LmhlaWdodDtcbiAgICAgIHkgKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cblxuICAgIGlmIChwbGFjZW1lbnQgPT09IGxlZnQgfHwgKHBsYWNlbWVudCA9PT0gdG9wIHx8IHBsYWNlbWVudCA9PT0gYm90dG9tKSAmJiB2YXJpYXRpb24gPT09IGVuZCkge1xuICAgICAgc2lkZVggPSByaWdodDtcbiAgICAgIHZhciBvZmZzZXRYID0gaXNGaXhlZCAmJiBvZmZzZXRQYXJlbnQgPT09IHdpbiAmJiB3aW4udmlzdWFsVmlld3BvcnQgPyB3aW4udmlzdWFsVmlld3BvcnQud2lkdGggOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgICAgIG9mZnNldFBhcmVudFt3aWR0aFByb3BdO1xuICAgICAgeCAtPSBvZmZzZXRYIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgdmFyIF9yZWY0ID0gcm91bmRPZmZzZXRzID09PSB0cnVlID8gcm91bmRPZmZzZXRzQnlEUFIoe1xuICAgIHg6IHgsXG4gICAgeTogeVxuICB9LCBnZXRXaW5kb3cocG9wcGVyKSkgOiB7XG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG5cbiAgeCA9IF9yZWY0Lng7XG4gIHkgPSBfcmVmNC55O1xuXG4gIGlmIChncHVBY2NlbGVyYXRpb24pIHtcbiAgICB2YXIgX09iamVjdCRhc3NpZ247XG5cbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCAoX09iamVjdCRhc3NpZ24gPSB7fSwgX09iamVjdCRhc3NpZ25bc2lkZVldID0gaGFzWSA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbltzaWRlWF0gPSBoYXNYID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduLnRyYW5zZm9ybSA9ICh3aW4uZGV2aWNlUGl4ZWxSYXRpbyB8fCAxKSA8PSAxID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY1KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY1LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY1Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHZhcmlhdGlvbjogZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCksXG4gICAgcG9wcGVyOiBzdGF0ZS5lbGVtZW50cy5wb3BwZXIsXG4gICAgcG9wcGVyUmVjdDogc3RhdGUucmVjdHMucG9wcGVyLFxuICAgIGdwdUFjY2VsZXJhdGlvbjogZ3B1QWNjZWxlcmF0aW9uLFxuICAgIGlzRml4ZWQ6IHN0YXRlLm9wdGlvbnMuc3RyYXRlZ3kgPT09ICdmaXhlZCdcbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciBwYXNzaXZlID0ge1xuICBwYXNzaXZlOiB0cnVlXG59O1xuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgaW5zdGFuY2UgPSBfcmVmLmluc3RhbmNlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJHNjcm9sbCA9IG9wdGlvbnMuc2Nyb2xsLFxuICAgICAgc2Nyb2xsID0gX29wdGlvbnMkc2Nyb2xsID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkc2Nyb2xsLFxuICAgICAgX29wdGlvbnMkcmVzaXplID0gb3B0aW9ucy5yZXNpemUsXG4gICAgICByZXNpemUgPSBfb3B0aW9ucyRyZXNpemUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyZXNpemU7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coc3RhdGUuZWxlbWVudHMucG9wcGVyKTtcbiAgdmFyIHNjcm9sbFBhcmVudHMgPSBbXS5jb25jYXQoc3RhdGUuc2Nyb2xsUGFyZW50cy5yZWZlcmVuY2UsIHN0YXRlLnNjcm9sbFBhcmVudHMucG9wcGVyKTtcblxuICBpZiAoc2Nyb2xsKSB7XG4gICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgIHNjcm9sbFBhcmVudC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgaWYgKHJlc2l6ZSkge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoc2Nyb2xsKSB7XG4gICAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgICBzY3JvbGxQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChyZXNpemUpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgIH1cbiAgfTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2V2ZW50TGlzdGVuZXJzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICd3cml0ZScsXG4gIGZuOiBmdW5jdGlvbiBmbigpIHt9LFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgZGF0YToge31cbn07IiwgInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsICJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGwobm9kZSkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KG5vZGUpO1xuICB2YXIgc2Nyb2xsTGVmdCA9IHdpbi5wYWdlWE9mZnNldDtcbiAgdmFyIHNjcm9sbFRvcCA9IHdpbi5wYWdlWU9mZnNldDtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wXG4gIH07XG59IiwgImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCAiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgaXNMYXlvdXRWaWV3cG9ydCBmcm9tIFwiLi9pc0xheW91dFZpZXdwb3J0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgdmFyIGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIHZhciB2aXN1YWxWaWV3cG9ydCA9IHdpbi52aXN1YWxWaWV3cG9ydDtcbiAgdmFyIHdpZHRoID0gaHRtbC5jbGllbnRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGh0bWwuY2xpZW50SGVpZ2h0O1xuICB2YXIgeCA9IDA7XG4gIHZhciB5ID0gMDtcblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDtcbiAgICB2YXIgbGF5b3V0Vmlld3BvcnQgPSBpc0xheW91dFZpZXdwb3J0KCk7XG5cbiAgICBpZiAobGF5b3V0Vmlld3BvcnQgfHwgIWxheW91dFZpZXdwb3J0ICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsICJpbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1Njcm9sbFBhcmVudChlbGVtZW50KSB7XG4gIC8vIEZpcmVmb3ggd2FudHMgdXMgdG8gY2hlY2sgYC14YCBhbmQgYC15YCB2YXJpYXRpb25zIGFzIHdlbGxcbiAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KSxcbiAgICAgIG92ZXJmbG93ID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3csXG4gICAgICBvdmVyZmxvd1ggPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1gsXG4gICAgICBvdmVyZmxvd1kgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvd1k7XG5cbiAgcmV0dXJuIC9hdXRvfHNjcm9sbHxvdmVybGF5fGhpZGRlbi8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCk7XG59IiwgImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwgImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVjdFRvQ2xpZW50UmVjdChyZWN0KSB7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCByZWN0LCB7XG4gICAgbGVmdDogcmVjdC54LFxuICAgIHRvcDogcmVjdC55LFxuICAgIHJpZ2h0OiByZWN0LnggKyByZWN0LndpZHRoLFxuICAgIGJvdHRvbTogcmVjdC55ICsgcmVjdC5oZWlnaHRcbiAgfSk7XG59IiwgImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGZhbHNlLCBzdHJhdGVneSA9PT0gJ2ZpeGVkJyk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50LCBzdHJhdGVneSkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCwgc3RyYXRlZ3kpKSA6IGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpIDogcmVjdFRvQ2xpZW50UmVjdChnZXREb2N1bWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKSk7XG59IC8vIEEgXCJjbGlwcGluZyBwYXJlbnRcIiBpcyBhbiBvdmVyZmxvd2FibGUgY29udGFpbmVyIHdpdGggdGhlIGNoYXJhY3RlcmlzdGljIG9mXG4vLyBjbGlwcGluZyAob3IgaGlkaW5nKSBvdmVyZmxvd2luZyBlbGVtZW50cyB3aXRoIGEgcG9zaXRpb24gZGlmZmVyZW50IGZyb21cbi8vIGBpbml0aWFsYFxuXG5cbmZ1bmN0aW9uIGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSB7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKGVsZW1lbnQpKTtcbiAgdmFyIGNhbkVzY2FwZUNsaXBwaW5nID0gWydhYnNvbHV0ZScsICdmaXhlZCddLmluZGV4T2YoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbikgPj0gMDtcbiAgdmFyIGNsaXBwZXJFbGVtZW50ID0gY2FuRXNjYXBlQ2xpcHBpbmcgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSA/IGdldE9mZnNldFBhcmVudChlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgaWYgKCFpc0VsZW1lbnQoY2xpcHBlckVsZW1lbnQpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXJldHVybl06IGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9mbG93L2lzc3Vlcy8xNDE0XG5cblxuICByZXR1cm4gY2xpcHBpbmdQYXJlbnRzLmZpbHRlcihmdW5jdGlvbiAoY2xpcHBpbmdQYXJlbnQpIHtcbiAgICByZXR1cm4gaXNFbGVtZW50KGNsaXBwaW5nUGFyZW50KSAmJiBjb250YWlucyhjbGlwcGluZ1BhcmVudCwgY2xpcHBlckVsZW1lbnQpICYmIGdldE5vZGVOYW1lKGNsaXBwaW5nUGFyZW50KSAhPT0gJ2JvZHknO1xuICB9KTtcbn0gLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgcGFyZW50c1xuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENsaXBwaW5nUmVjdChlbGVtZW50LCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5LCBzdHJhdGVneSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCwgc3RyYXRlZ3kpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQsIHN0cmF0ZWd5KSk7XG4gIGNsaXBwaW5nUmVjdC53aWR0aCA9IGNsaXBwaW5nUmVjdC5yaWdodCAtIGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QuaGVpZ2h0ID0gY2xpcHBpbmdSZWN0LmJvdHRvbSAtIGNsaXBwaW5nUmVjdC50b3A7XG4gIGNsaXBwaW5nUmVjdC54ID0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC55ID0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgcmV0dXJuIGNsaXBwaW5nUmVjdDtcbn0iLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwgImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJHN0cmF0ZWd5ID0gX29wdGlvbnMuc3RyYXRlZ3ksXG4gICAgICBzdHJhdGVneSA9IF9vcHRpb25zJHN0cmF0ZWd5ID09PSB2b2lkIDAgPyBzdGF0ZS5zdHJhdGVneSA6IF9vcHRpb25zJHN0cmF0ZWd5LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1thbHRCb3VuZGFyeSA/IGFsdENvbnRleHQgOiBlbGVtZW50Q29udGV4dF07XG4gIHZhciBjbGlwcGluZ0NsaWVudFJlY3QgPSBnZXRDbGlwcGluZ1JlY3QoaXNFbGVtZW50KGVsZW1lbnQpID8gZWxlbWVudCA6IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgfHwgZ2V0RG9jdW1lbnRFbGVtZW50KHN0YXRlLmVsZW1lbnRzLnBvcHBlciksIGJvdW5kYXJ5LCByb290Qm91bmRhcnksIHN0cmF0ZWd5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCAiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwgImltcG9ydCBnZXRPcHBvc2l0ZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgY29tcHV0ZUF1dG9QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyBib3R0b20sIHRvcCwgc3RhcnQsIHJpZ2h0LCBsZWZ0LCBhdXRvIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgaWYgKGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHZhciBvcHBvc2l0ZVBsYWNlbWVudCA9IGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHJldHVybiBbZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQocGxhY2VtZW50KSwgb3Bwb3NpdGVQbGFjZW1lbnQsIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KG9wcG9zaXRlUGxhY2VtZW50KV07XG59XG5cbmZ1bmN0aW9uIGZsaXAoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFsdEF4aXMsXG4gICAgICBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgPSBvcHRpb25zLmZhbGxiYWNrUGxhY2VtZW50cyxcbiAgICAgIHBhZGRpbmcgPSBvcHRpb25zLnBhZGRpbmcsXG4gICAgICBib3VuZGFyeSA9IG9wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBvcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5ID0gb3B0aW9ucy5hbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9IG9wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zJGZsaXBWYXJpYXRpbyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGZsaXBWYXJpYXRpbyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50cyA9IG9wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzO1xuICB2YXIgcHJlZmVycmVkUGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gYmFzZVBsYWNlbWVudCA9PT0gcHJlZmVycmVkUGxhY2VtZW50O1xuICB2YXIgZmFsbGJhY2tQbGFjZW1lbnRzID0gc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzIHx8IChpc0Jhc2VQbGFjZW1lbnQgfHwgIWZsaXBWYXJpYXRpb25zID8gW2dldE9wcG9zaXRlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCldIDogZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocHJlZmVycmVkUGxhY2VtZW50KSk7XG4gIHZhciBwbGFjZW1lbnRzID0gW3ByZWZlcnJlZFBsYWNlbWVudF0uY29uY2F0KGZhbGxiYWNrUGxhY2VtZW50cykucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA9PT0gYXV0byA/IGNvbXB1dGVBdXRvUGxhY2VtZW50KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zOiBmbGlwVmFyaWF0aW9ucyxcbiAgICAgIGFsbG93ZWRBdXRvUGxhY2VtZW50czogYWxsb3dlZEF1dG9QbGFjZW1lbnRzXG4gICAgfSkgOiBwbGFjZW1lbnQpO1xuICB9LCBbXSk7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIGNoZWNrc01hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIG1ha2VGYWxsYmFja0NoZWNrcyA9IHRydWU7XG4gIHZhciBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzWzBdO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGxhY2VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwbGFjZW1lbnQgPSBwbGFjZW1lbnRzW2ldO1xuXG4gICAgdmFyIF9iYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuXG4gICAgdmFyIGlzU3RhcnRWYXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gc3RhcnQ7XG4gICAgdmFyIGlzVmVydGljYWwgPSBbdG9wLCBib3R0b21dLmluZGV4T2YoX2Jhc2VQbGFjZW1lbnQpID49IDA7XG4gICAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnd2lkdGgnIDogJ2hlaWdodCc7XG4gICAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSk7XG4gICAgdmFyIG1haW5WYXJpYXRpb25TaWRlID0gaXNWZXJ0aWNhbCA/IGlzU3RhcnRWYXJpYXRpb24gPyByaWdodCA6IGxlZnQgOiBpc1N0YXJ0VmFyaWF0aW9uID8gYm90dG9tIDogdG9wO1xuXG4gICAgaWYgKHJlZmVyZW5jZVJlY3RbbGVuXSA+IHBvcHBlclJlY3RbbGVuXSkge1xuICAgICAgbWFpblZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgfVxuXG4gICAgdmFyIGFsdFZhcmlhdGlvblNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluVmFyaWF0aW9uU2lkZSk7XG4gICAgdmFyIGNoZWNrcyA9IFtdO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W19iYXNlUGxhY2VtZW50XSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1ttYWluVmFyaWF0aW9uU2lkZV0gPD0gMCwgb3ZlcmZsb3dbYWx0VmFyaWF0aW9uU2lkZV0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrcy5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgIHJldHVybiBjaGVjaztcbiAgICB9KSkge1xuICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50O1xuICAgICAgbWFrZUZhbGxiYWNrQ2hlY2tzID0gZmFsc2U7XG4gICAgICBicmVhaztcbiAgICB9XG5cbiAgICBjaGVja3NNYXAuc2V0KHBsYWNlbWVudCwgY2hlY2tzKTtcbiAgfVxuXG4gIGlmIChtYWtlRmFsbGJhY2tDaGVja3MpIHtcbiAgICAvLyBgMmAgbWF5IGJlIGRlc2lyZWQgaW4gc29tZSBjYXNlcyBcdTIwMTMgcmVzZWFyY2ggbGF0ZXJcbiAgICB2YXIgbnVtYmVyT2ZDaGVja3MgPSBmbGlwVmFyaWF0aW9ucyA/IDMgOiAxO1xuXG4gICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoX2kpIHtcbiAgICAgIHZhciBmaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50cy5maW5kKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICAgICAgdmFyIGNoZWNrcyA9IGNoZWNrc01hcC5nZXQocGxhY2VtZW50KTtcblxuICAgICAgICBpZiAoY2hlY2tzKSB7XG4gICAgICAgICAgcmV0dXJuIGNoZWNrcy5zbGljZSgwLCBfaSkuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBpZiAoZml0dGluZ1BsYWNlbWVudCkge1xuICAgICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBmaXR0aW5nUGxhY2VtZW50O1xuICAgICAgICByZXR1cm4gXCJicmVha1wiO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBmb3IgKHZhciBfaSA9IG51bWJlck9mQ2hlY2tzOyBfaSA+IDA7IF9pLS0pIHtcbiAgICAgIHZhciBfcmV0ID0gX2xvb3AoX2kpO1xuXG4gICAgICBpZiAoX3JldCA9PT0gXCJicmVha1wiKSBicmVhaztcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUucGxhY2VtZW50ICE9PSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwID0gdHJ1ZTtcbiAgICBzdGF0ZS5wbGFjZW1lbnQgPSBmaXJzdEZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgc3RhdGUucmVzZXQgPSB0cnVlO1xuICB9XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdmbGlwJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IGZsaXAsXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J10sXG4gIGRhdGE6IHtcbiAgICBfc2tpcDogZmFsc2VcbiAgfVxufTsiLCAiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCAiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZnVuY3Rpb24gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCByZWN0cywgb2Zmc2V0KSB7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICB2YXIgaW52ZXJ0RGlzdGFuY2UgPSBbbGVmdCwgdG9wXS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyAtMSA6IDE7XG5cbiAgdmFyIF9yZWYgPSB0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gb2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSkpIDogb2Zmc2V0LFxuICAgICAgc2tpZGRpbmcgPSBfcmVmWzBdLFxuICAgICAgZGlzdGFuY2UgPSBfcmVmWzFdO1xuXG4gIHNraWRkaW5nID0gc2tpZGRpbmcgfHwgMDtcbiAgZGlzdGFuY2UgPSAoZGlzdGFuY2UgfHwgMCkgKiBpbnZlcnREaXN0YW5jZTtcbiAgcmV0dXJuIFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8ge1xuICAgIHg6IGRpc3RhbmNlLFxuICAgIHk6IHNraWRkaW5nXG4gIH0gOiB7XG4gICAgeDogc2tpZGRpbmcsXG4gICAgeTogZGlzdGFuY2VcbiAgfTtcbn1cblxuZnVuY3Rpb24gb2Zmc2V0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWYyLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZjIubmFtZTtcbiAgdmFyIF9vcHRpb25zJG9mZnNldCA9IG9wdGlvbnMub2Zmc2V0LFxuICAgICAgb2Zmc2V0ID0gX29wdGlvbnMkb2Zmc2V0ID09PSB2b2lkIDAgPyBbMCwgMF0gOiBfb3B0aW9ucyRvZmZzZXQ7XG4gIHZhciBkYXRhID0gcGxhY2VtZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgYWNjW3BsYWNlbWVudF0gPSBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHN0YXRlLnJlY3RzLCBvZmZzZXQpO1xuICAgIHJldHVybiBhY2M7XG4gIH0sIHt9KTtcbiAgdmFyIF9kYXRhJHN0YXRlJHBsYWNlbWVudCA9IGRhdGFbc3RhdGUucGxhY2VtZW50XSxcbiAgICAgIHggPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueCxcbiAgICAgIHkgPSBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQueTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueCArPSB4O1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy55ICs9IHk7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ29mZnNldCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgZm46IG9mZnNldFxufTsiLCAiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsICJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIHN0YXJ0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QWx0QXhpcyBmcm9tIFwiLi4vdXRpbHMvZ2V0QWx0QXhpcy5qc1wiO1xuaW1wb3J0IHsgd2l0aGluLCB3aXRoaW5NYXhDbGFtcCB9IGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1pbiBhcyBtYXRoTWluLCBtYXggYXMgbWF0aE1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlID0gdHlwZW9mIHRldGhlck9mZnNldFZhbHVlID09PSAnbnVtYmVyJyA/IHtcbiAgICBtYWluQXhpczogdGV0aGVyT2Zmc2V0VmFsdWUsXG4gICAgYWx0QXhpczogdGV0aGVyT2Zmc2V0VmFsdWVcbiAgfSA6IE9iamVjdC5hc3NpZ24oe1xuICAgIG1haW5BeGlzOiAwLFxuICAgIGFsdEF4aXM6IDBcbiAgfSwgdGV0aGVyT2Zmc2V0VmFsdWUpO1xuICB2YXIgb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0ID8gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXRbc3RhdGUucGxhY2VtZW50XSA6IG51bGw7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclN0YXRlJDtcblxuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gb2Zmc2V0ICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBvZmZzZXQgLSBvdmVyZmxvd1thbHRTaWRlXTtcbiAgICB2YXIgYWRkaXRpdmUgPSB0ZXRoZXIgPyAtcG9wcGVyUmVjdFtsZW5dIC8gMiA6IDA7XG4gICAgdmFyIG1pbkxlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gOiBwb3BwZXJSZWN0W2xlbl07XG4gICAgdmFyIG1heExlbiA9IHZhcmlhdGlvbiA9PT0gc3RhcnQgPyAtcG9wcGVyUmVjdFtsZW5dIDogLXJlZmVyZW5jZVJlY3RbbGVuXTsgLy8gV2UgbmVlZCB0byBpbmNsdWRlIHRoZSBhcnJvdyBpbiB0aGUgY2FsY3VsYXRpb24gc28gdGhlIGFycm93IGRvZXNuJ3QgZ29cbiAgICAvLyBvdXRzaWRlIHRoZSByZWZlcmVuY2UgYm91bmRzXG5cbiAgICB2YXIgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3c7XG4gICAgdmFyIGFycm93UmVjdCA9IHRldGhlciAmJiBhcnJvd0VsZW1lbnQgPyBnZXRMYXlvdXRSZWN0KGFycm93RWxlbWVudCkgOiB7XG4gICAgICB3aWR0aDogMCxcbiAgICAgIGhlaWdodDogMFxuICAgIH07XG4gICAgdmFyIGFycm93UGFkZGluZ09iamVjdCA9IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXSA/IHN0YXRlLm1vZGlmaWVyc0RhdGFbJ2Fycm93I3BlcnNpc3RlbnQnXS5wYWRkaW5nIDogZ2V0RnJlc2hTaWRlT2JqZWN0KCk7XG4gICAgdmFyIGFycm93UGFkZGluZ01pbiA9IGFycm93UGFkZGluZ09iamVjdFttYWluU2lkZV07XG4gICAgdmFyIGFycm93UGFkZGluZ01heCA9IGFycm93UGFkZGluZ09iamVjdFthbHRTaWRlXTsgLy8gSWYgdGhlIHJlZmVyZW5jZSBsZW5ndGggaXMgc21hbGxlciB0aGFuIHRoZSBhcnJvdyBsZW5ndGgsIHdlIGRvbid0IHdhbnRcbiAgICAvLyB0byBpbmNsdWRlIGl0cyBmdWxsIHNpemUgaW4gdGhlIGNhbGN1bGF0aW9uLiBJZiB0aGUgcmVmZXJlbmNlIGlzIHNtYWxsXG4gICAgLy8gYW5kIG5lYXIgdGhlIGVkZ2Ugb2YgYSBib3VuZGFyeSwgdGhlIHBvcHBlciBjYW4gb3ZlcmZsb3cgZXZlbiBpZiB0aGVcbiAgICAvLyByZWZlcmVuY2UgaXMgbm90IG92ZXJmbG93aW5nIGFzIHdlbGwgKGUuZy4gdmlydHVhbCBlbGVtZW50cyB3aXRoIG5vXG4gICAgLy8gd2lkdGggb3IgaGVpZ2h0KVxuXG4gICAgdmFyIGFycm93TGVuID0gd2l0aGluKDAsIHJlZmVyZW5jZVJlY3RbbGVuXSwgYXJyb3dSZWN0W2xlbl0pO1xuICAgIHZhciBtaW5PZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyByZWZlcmVuY2VSZWN0W2xlbl0gLyAyIC0gYWRkaXRpdmUgLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcyA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gbm9ybWFsaXplZFRldGhlck9mZnNldFZhbHVlLm1haW5BeGlzO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyBub3JtYWxpemVkVGV0aGVyT2Zmc2V0VmFsdWUubWFpbkF4aXMgOiBtYXhMZW4gKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5tYWluQXhpcztcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSAoX29mZnNldE1vZGlmaWVyU3RhdGUkID0gb2Zmc2V0TW9kaWZpZXJTdGF0ZSA9PSBudWxsID8gdm9pZCAwIDogb2Zmc2V0TW9kaWZpZXJTdGF0ZVttYWluQXhpc10pICE9IG51bGwgPyBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQgOiAwO1xuICAgIHZhciB0ZXRoZXJNaW4gPSBvZmZzZXQgKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBvZmZzZXQgKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgIHBvcHBlck9mZnNldHNbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0O1xuICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICB9XG5cbiAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBfb2Zmc2V0TW9kaWZpZXJTdGF0ZSQyO1xuXG4gICAgdmFyIF9tYWluU2lkZSA9IG1haW5BeGlzID09PSAneCcgPyB0b3AgOiBsZWZ0O1xuXG4gICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgdmFyIF9sZW4gPSBhbHRBeGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgdmFyIF9tYXggPSBfb2Zmc2V0IC0gb3ZlcmZsb3dbX2FsdFNpZGVdO1xuXG4gICAgdmFyIGlzT3JpZ2luU2lkZSA9IFt0b3AsIGxlZnRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgIT09IC0xO1xuXG4gICAgdmFyIF9vZmZzZXRNb2RpZmllclZhbHVlID0gKF9vZmZzZXRNb2RpZmllclN0YXRlJDIgPSBvZmZzZXRNb2RpZmllclN0YXRlID09IG51bGwgPyB2b2lkIDAgOiBvZmZzZXRNb2RpZmllclN0YXRlW2FsdEF4aXNdKSAhPSBudWxsID8gX29mZnNldE1vZGlmaWVyU3RhdGUkMiA6IDA7XG5cbiAgICB2YXIgX3RldGhlck1pbiA9IGlzT3JpZ2luU2lkZSA/IF9taW4gOiBfb2Zmc2V0IC0gcmVmZXJlbmNlUmVjdFtfbGVuXSAtIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSArIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzO1xuXG4gICAgdmFyIF90ZXRoZXJNYXggPSBpc09yaWdpblNpZGUgPyBfb2Zmc2V0ICsgcmVmZXJlbmNlUmVjdFtfbGVuXSArIHBvcHBlclJlY3RbX2xlbl0gLSBfb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIG5vcm1hbGl6ZWRUZXRoZXJPZmZzZXRWYWx1ZS5hbHRBeGlzIDogX21heDtcblxuICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gdGV0aGVyICYmIGlzT3JpZ2luU2lkZSA/IHdpdGhpbk1heENsYW1wKF90ZXRoZXJNaW4sIF9vZmZzZXQsIF90ZXRoZXJNYXgpIDogd2l0aGluKHRldGhlciA/IF90ZXRoZXJNaW4gOiBfbWluLCBfb2Zmc2V0LCB0ZXRoZXIgPyBfdGV0aGVyTWF4IDogX21heCk7XG5cbiAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICBkYXRhW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldCAtIF9vZmZzZXQ7XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwgImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEhUTUxFbGVtZW50U2Nyb2xsKGVsZW1lbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICB9O1xufSIsICJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCAiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCB7IHJvdW5kIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcm91bmQocmVjdC53aWR0aCkgLyBlbGVtZW50Lm9mZnNldFdpZHRoIHx8IDE7XG4gIHZhciBzY2FsZVkgPSByb3VuZChyZWN0LmhlaWdodCkgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkLCBpc0ZpeGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwgImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCAiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVib3VuY2UoZm4pIHtcbiAgdmFyIHBlbmRpbmc7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFwZW5kaW5nKSB7XG4gICAgICBwZW5kaW5nID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUpIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcGVuZGluZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgICByZXNvbHZlKGZuKCkpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwZW5kaW5nO1xuICB9O1xufSIsICJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCAiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgbWVyZ2VCeU5hbWUgZnJvbSBcIi4vdXRpbHMvbWVyZ2VCeU5hbWUuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjtcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTtcbiAgICAgICAgcnVuTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZS51cGRhdGUoKTtcbiAgICAgIH0sXG4gICAgICAvLyBTeW5jIHVwZGF0ZSBcdTIwMTMgaXQgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQsIGV2ZW4gaWYgbm90IG5lY2Vzc2FyeS4gVGhpc1xuICAgICAgLy8gaXMgdXNlZnVsIGZvciBsb3cgZnJlcXVlbmN5IHVwZGF0ZXMgd2hlcmUgc3luYyBiZWhhdmlvciBzaW1wbGlmaWVzIHRoZVxuICAgICAgLy8gbG9naWMuXG4gICAgICAvLyBGb3IgaGlnaCBmcmVxdWVuY3kgdXBkYXRlcyAoZS5nLiBgcmVzaXplYCBhbmQgYHNjcm9sbGAgZXZlbnRzKSwgYWx3YXlzXG4gICAgICAvLyBwcmVmZXIgdGhlIGFzeW5jIFBvcHBlciN1cGRhdGUgbWV0aG9kXG4gICAgICBmb3JjZVVwZGF0ZTogZnVuY3Rpb24gZm9yY2VVcGRhdGUoKSB7XG4gICAgICAgIGlmIChpc0Rlc3Ryb3llZCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBfc3RhdGUkZWxlbWVudHMgPSBzdGF0ZS5lbGVtZW50cyxcbiAgICAgICAgICAgIHJlZmVyZW5jZSA9IF9zdGF0ZSRlbGVtZW50cy5yZWZlcmVuY2UsXG4gICAgICAgICAgICBwb3BwZXIgPSBfc3RhdGUkZWxlbWVudHMucG9wcGVyOyAvLyBEb24ndCBwcm9jZWVkIGlmIGByZWZlcmVuY2VgIG9yIGBwb3BwZXJgIGFyZSBub3QgdmFsaWQgZWxlbWVudHNcbiAgICAgICAgLy8gYW55bW9yZVxuXG4gICAgICAgIGlmICghYXJlVmFsaWRFbGVtZW50cyhyZWZlcmVuY2UsIHBvcHBlcikpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIFx1MjAxMyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfVxuXG4gICAgaW5zdGFuY2Uuc2V0T3B0aW9ucyhvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChzdGF0ZSkge1xuICAgICAgaWYgKCFpc0Rlc3Ryb3llZCAmJiBvcHRpb25zLm9uRmlyc3RVcGRhdGUpIHtcbiAgICAgICAgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKHN0YXRlKTtcbiAgICAgIH1cbiAgICB9KTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gZXhlY3V0ZSBhcmJpdHJhcnkgY29kZSBiZWZvcmUgdGhlIGZpcnN0XG4gICAgLy8gdXBkYXRlIGN5Y2xlIHJ1bnMuIFRoZXkgd2lsbCBiZSBleGVjdXRlZCBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgdXBkYXRlXG4gICAgLy8gY3ljbGUuIFRoaXMgaXMgdXNlZnVsIHdoZW4gYSBtb2RpZmllciBhZGRzIHNvbWUgcGVyc2lzdGVudCBkYXRhIHRoYXRcbiAgICAvLyBvdGhlciBtb2RpZmllcnMgbmVlZCB0byB1c2UsIGJ1dCB0aGUgbW9kaWZpZXIgaXMgcnVuIGFmdGVyIHRoZSBkZXBlbmRlbnRcbiAgICAvLyBvbmUuXG5cbiAgICBmdW5jdGlvbiBydW5Nb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWUsXG4gICAgICAgICAgICBfcmVmJG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZiRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYkb3B0aW9ucyxcbiAgICAgICAgICAgIGVmZmVjdCA9IF9yZWYuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IiwgImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgZWxlbWVudE1hcCA9IG5ldyBNYXAoKVxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHNldChlbGVtZW50LCBrZXksIGluc3RhbmNlKSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgZWxlbWVudE1hcC5zZXQoZWxlbWVudCwgbmV3IE1hcCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIC8vIG1ha2UgaXQgY2xlYXIgd2Ugb25seSB3YW50IG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudFxuICAgIC8vIGNhbiBiZSByZW1vdmVkIGxhdGVyIHdoZW4gbXVsdGlwbGUga2V5L2luc3RhbmNlcyBhcmUgZmluZSB0byBiZSB1c2VkXG4gICAgaWYgKCFpbnN0YW5jZU1hcC5oYXMoa2V5KSAmJiBpbnN0YW5jZU1hcC5zaXplICE9PSAwKSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS5lcnJvcihgQm9vdHN0cmFwIGRvZXNuJ3QgYWxsb3cgbW9yZSB0aGFuIG9uZSBpbnN0YW5jZSBwZXIgZWxlbWVudC4gQm91bmQgaW5zdGFuY2U6ICR7QXJyYXkuZnJvbShpbnN0YW5jZU1hcC5rZXlzKCkpWzBdfS5gKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaW5zdGFuY2VNYXAuc2V0KGtleSwgaW5zdGFuY2UpXG4gIH0sXG5cbiAgZ2V0KGVsZW1lbnQsIGtleSkge1xuICAgIGlmIChlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuIGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpLmdldChrZXkpIHx8IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIHJlbW92ZShlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICBpbnN0YW5jZU1hcC5kZWxldGUoa2V5KVxuXG4gICAgLy8gZnJlZSB1cCBlbGVtZW50IHJlZmVyZW5jZXMgaWYgdGhlcmUgYXJlIG5vIGluc3RhbmNlcyBsZWZ0IGZvciBhbiBlbGVtZW50XG4gICAgaWYgKGluc3RhbmNlTWFwLnNpemUgPT09IDApIHtcbiAgICAgIGVsZW1lbnRNYXAuZGVsZXRlKGVsZW1lbnQpXG4gICAgfVxuICB9XG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMV8wMDBfMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnXG5cbi8qKlxuICogUHJvcGVybHkgZXNjYXBlIElEcyBzZWxlY3RvcnMgdG8gaGFuZGxlIHdlaXJkIElEc1xuICogQHBhcmFtIHtzdHJpbmd9IHNlbGVjdG9yXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5jb25zdCBwYXJzZVNlbGVjdG9yID0gc2VsZWN0b3IgPT4ge1xuICBpZiAoc2VsZWN0b3IgJiYgd2luZG93LkNTUyAmJiB3aW5kb3cuQ1NTLmVzY2FwZSkge1xuICAgIC8vIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IgbmVlZHMgZXNjYXBpbmcgdG8gaGFuZGxlIElEcyAoaHRtbDUrKSBjb250YWluaW5nIGZvciBpbnN0YW5jZSAvXG4gICAgc2VsZWN0b3IgPSBzZWxlY3Rvci5yZXBsYWNlKC8jKFteXFxzXCIjJ10rKS9nLCAobWF0Y2gsIGlkKSA9PiBgIyR7Q1NTLmVzY2FwZShpZCl9YClcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG4vLyBTaG91dC1vdXQgQW5ndXMgQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iamVjdCA9PiB7XG4gIGlmIChvYmplY3QgPT09IG51bGwgfHwgb2JqZWN0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqZWN0fWBcbiAgfVxuXG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KS5tYXRjaCgvXFxzKFthLXpdKykvaSlbMV0udG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFB1YmxpYyBVdGlsIEFQSVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcblxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbilcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdXG5cbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUlxufVxuXG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSlcbn1cblxuY29uc3QgaXNFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgaWYgKCFvYmplY3QgfHwgdHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0LmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmplY3QgPSBvYmplY3RbMF1cbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5jb25zdCBnZXRFbGVtZW50ID0gb2JqZWN0ID0+IHtcbiAgLy8gaXQncyBhIGpRdWVyeSBvYmplY3Qgb3IgYSBub2RlIGVsZW1lbnRcbiAgaWYgKGlzRWxlbWVudChvYmplY3QpKSB7XG4gICAgcmV0dXJuIG9iamVjdC5qcXVlcnkgPyBvYmplY3RbMF0gOiBvYmplY3RcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJyAmJiBvYmplY3QubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHBhcnNlU2VsZWN0b3Iob2JqZWN0KSlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBjb25zdCBlbGVtZW50SXNWaXNpYmxlID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJ1xuICAvLyBIYW5kbGUgYGRldGFpbHNgIGVsZW1lbnQgYXMgaXRzIGNvbnRlbnQgbWF5IGZhbHNpZSBhcHBlYXIgdmlzaWJsZSB3aGVuIGl0IGlzIGNsb3NlZFxuICBjb25zdCBjbG9zZWREZXRhaWxzID0gZWxlbWVudC5jbG9zZXN0KCdkZXRhaWxzOm5vdChbb3Blbl0pJylcblxuICBpZiAoIWNsb3NlZERldGFpbHMpIHtcbiAgICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxuICB9XG5cbiAgaWYgKGNsb3NlZERldGFpbHMgIT09IGVsZW1lbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gZWxlbWVudC5jbG9zZXN0KCdzdW1tYXJ5JylcbiAgICBpZiAoc3VtbWFyeSAmJiBzdW1tYXJ5LnBhcmVudE5vZGUgIT09IGNsb3NlZERldGFpbHMpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChzdW1tYXJ5ID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZWxlbWVudElzVmlzaWJsZVxufVxuXG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkXG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSdcbn1cblxuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgfVxuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG59XG5cbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgaWYgKHdpbmRvdy5qUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIHdpbmRvdy5qUXVlcnlcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MgPSBbXVxuXG5jb25zdCBvbkRPTUNvbnRlbnRMb2FkZWQgPSBjYWxsYmFjayA9PiB7XG4gIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIHtcbiAgICAvLyBhZGQgbGlzdGVuZXIgb24gdGhlIGZpcnN0IGNhbGwgd2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gbG9hZGluZyBzdGF0ZVxuICAgIGlmICghRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5sZW5ndGgpIHtcbiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcykge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spXG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbmNvbnN0IGlzUlRMID0gKCkgPT4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PT0gJ3J0bCdcblxuY29uc3QgZGVmaW5lSlF1ZXJ5UGx1Z2luID0gcGx1Z2luID0+IHtcbiAgb25ET01Db250ZW50TG9hZGVkKCgpID0+IHtcbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoJCkge1xuICAgICAgY29uc3QgbmFtZSA9IHBsdWdpbi5OQU1FXG4gICAgICBjb25zdCBKUVVFUllfTk9fQ09ORkxJQ1QgPSAkLmZuW25hbWVdXG4gICAgICAkLmZuW25hbWVdID0gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgJC5mbltuYW1lXS5Db25zdHJ1Y3RvciA9IHBsdWdpblxuICAgICAgJC5mbltuYW1lXS5ub0NvbmZsaWN0ID0gKCkgPT4ge1xuICAgICAgICAkLmZuW25hbWVdID0gSlFVRVJZX05PX0NPTkZMSUNUXG4gICAgICAgIHJldHVybiBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlXG4gICAgICB9XG4gICAgfVxuICB9KVxufVxuXG5jb25zdCBleGVjdXRlID0gKHBvc3NpYmxlQ2FsbGJhY2ssIGFyZ3MgPSBbXSwgZGVmYXVsdFZhbHVlID0gcG9zc2libGVDYWxsYmFjaykgPT4ge1xuICByZXR1cm4gdHlwZW9mIHBvc3NpYmxlQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicgPyBwb3NzaWJsZUNhbGxiYWNrKC4uLmFyZ3MpIDogZGVmYXVsdFZhbHVlXG59XG5cbmNvbnN0IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24gPSAoY2FsbGJhY2ssIHRyYW5zaXRpb25FbGVtZW50LCB3YWl0Rm9yVHJhbnNpdGlvbiA9IHRydWUpID0+IHtcbiAgaWYgKCF3YWl0Rm9yVHJhbnNpdGlvbikge1xuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBkdXJhdGlvblBhZGRpbmcgPSA1XG4gIGNvbnN0IGVtdWxhdGVkRHVyYXRpb24gPSBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCh0cmFuc2l0aW9uRWxlbWVudCkgKyBkdXJhdGlvblBhZGRpbmdcblxuICBsZXQgY2FsbGVkID0gZmFsc2VcblxuICBjb25zdCBoYW5kbGVyID0gKHsgdGFyZ2V0IH0pID0+IHtcbiAgICBpZiAodGFyZ2V0ICE9PSB0cmFuc2l0aW9uRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2FsbGVkID0gdHJ1ZVxuICAgIHRyYW5zaXRpb25FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoVFJBTlNJVElPTl9FTkQsIGhhbmRsZXIpXG4gIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIGlmICghY2FsbGVkKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0cmFuc2l0aW9uRWxlbWVudClcbiAgICB9XG4gIH0sIGVtdWxhdGVkRHVyYXRpb24pXG59XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwcmV2aW91cy9uZXh0IGVsZW1lbnQgb2YgYSBsaXN0LlxuICpcbiAqIEBwYXJhbSB7YXJyYXl9IGxpc3QgICAgVGhlIGxpc3Qgb2YgZWxlbWVudHNcbiAqIEBwYXJhbSBhY3RpdmVFbGVtZW50ICAgVGhlIGFjdGl2ZSBlbGVtZW50XG4gKiBAcGFyYW0gc2hvdWxkR2V0TmV4dCAgIENob29zZSB0byBnZXQgbmV4dCBvciBwcmV2aW91cyBlbGVtZW50XG4gKiBAcGFyYW0gaXNDeWNsZUFsbG93ZWRcbiAqIEByZXR1cm4ge0VsZW1lbnR8ZWxlbX0gVGhlIHByb3BlciBlbGVtZW50XG4gKi9cbmNvbnN0IGdldE5leHRBY3RpdmVFbGVtZW50ID0gKGxpc3QsIGFjdGl2ZUVsZW1lbnQsIHNob3VsZEdldE5leHQsIGlzQ3ljbGVBbGxvd2VkKSA9PiB7XG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aFxuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudClcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudFxuICAvLyBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuICFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdFtsaXN0TGVuZ3RoIC0gMV0gOiBsaXN0WzBdXG4gIH1cblxuICBpbmRleCArPSBzaG91bGRHZXROZXh0ID8gMSA6IC0xXG5cbiAgaWYgKGlzQ3ljbGVBbGxvd2VkKSB7XG4gICAgaW5kZXggPSAoaW5kZXggKyBsaXN0TGVuZ3RoKSAlIGxpc3RMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBsaXN0W01hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBsaXN0TGVuZ3RoIC0gMSkpXVxufVxuXG5leHBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGV4ZWN1dGUsXG4gIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sXG4gIGZpbmRTaGFkb3dSb290LFxuICBnZXRFbGVtZW50LFxuICBnZXRqUXVlcnksXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0Rpc2FibGVkLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIG5vb3AsXG4gIG9uRE9NQ29udGVudExvYWRlZCxcbiAgcGFyc2VTZWxlY3RvcixcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCxcbiAgdG9UeXBlXG59XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9ldmVudC1oYW5kbGVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZ2V0alF1ZXJ5IH0gZnJvbSAnLi4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi9cbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qL1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskL1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxXG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59XG5cbmNvbnN0IG5hdGl2ZUV2ZW50cyA9IG5ldyBTZXQoW1xuICAnY2xpY2snLFxuICAnZGJsY2xpY2snLFxuICAnbW91c2V1cCcsXG4gICdtb3VzZWRvd24nLFxuICAnY29udGV4dG1lbnUnLFxuICAnbW91c2V3aGVlbCcsXG4gICdET01Nb3VzZVNjcm9sbCcsXG4gICdtb3VzZW92ZXInLFxuICAnbW91c2VvdXQnLFxuICAnbW91c2Vtb3ZlJyxcbiAgJ3NlbGVjdHN0YXJ0JyxcbiAgJ3NlbGVjdGVuZCcsXG4gICdrZXlkb3duJyxcbiAgJ2tleXByZXNzJyxcbiAgJ2tleXVwJyxcbiAgJ29yaWVudGF0aW9uY2hhbmdlJyxcbiAgJ3RvdWNoc3RhcnQnLFxuICAndG91Y2htb3ZlJyxcbiAgJ3RvdWNoZW5kJyxcbiAgJ3RvdWNoY2FuY2VsJyxcbiAgJ3BvaW50ZXJkb3duJyxcbiAgJ3BvaW50ZXJtb3ZlJyxcbiAgJ3BvaW50ZXJ1cCcsXG4gICdwb2ludGVybGVhdmUnLFxuICAncG9pbnRlcmNhbmNlbCcsXG4gICdnZXN0dXJlc3RhcnQnLFxuICAnZ2VzdHVyZWNoYW5nZScsXG4gICdnZXN0dXJlZW5kJyxcbiAgJ2ZvY3VzJyxcbiAgJ2JsdXInLFxuICAnY2hhbmdlJyxcbiAgJ3Jlc2V0JyxcbiAgJ3NlbGVjdCcsXG4gICdzdWJtaXQnLFxuICAnZm9jdXNpbicsXG4gICdmb2N1c291dCcsXG4gICdsb2FkJyxcbiAgJ3VubG9hZCcsXG4gICdiZWZvcmV1bmxvYWQnLFxuICAncmVzaXplJyxcbiAgJ21vdmUnLFxuICAnRE9NQ29udGVudExvYWRlZCcsXG4gICdyZWFkeXN0YXRlY2hhbmdlJyxcbiAgJ2Vycm9yJyxcbiAgJ2Fib3J0JyxcbiAgJ3Njcm9sbCdcbl0pXG5cbi8qKlxuICogUHJpdmF0ZSBtZXRob2RzXG4gKi9cblxuZnVuY3Rpb24gbWFrZUV2ZW50VWlkKGVsZW1lbnQsIHVpZCkge1xuICByZXR1cm4gKHVpZCAmJiBgJHt1aWR9Ojoke3VpZEV2ZW50Kyt9YCkgfHwgZWxlbWVudC51aWRFdmVudCB8fCB1aWRFdmVudCsrXG59XG5cbmZ1bmN0aW9uIGdldEVsZW1lbnRFdmVudHMoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoZWxlbWVudClcblxuICBlbGVtZW50LnVpZEV2ZW50ID0gdWlkXG4gIGV2ZW50UmVnaXN0cnlbdWlkXSA9IGV2ZW50UmVnaXN0cnlbdWlkXSB8fCB7fVxuXG4gIHJldHVybiBldmVudFJlZ2lzdHJ5W3VpZF1cbn1cblxuZnVuY3Rpb24gYm9vdHN0cmFwSGFuZGxlcihlbGVtZW50LCBmbikge1xuICByZXR1cm4gZnVuY3Rpb24gaGFuZGxlcihldmVudCkge1xuICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IGVsZW1lbnQgfSlcblxuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbilcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcblxuICAgIGZvciAobGV0IHsgdGFyZ2V0IH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAoY29uc3QgZG9tRWxlbWVudCBvZiBkb21FbGVtZW50cykge1xuICAgICAgICBpZiAoZG9tRWxlbWVudCAhPT0gdGFyZ2V0KSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGh5ZHJhdGVPYmooZXZlbnQsIHsgZGVsZWdhdGVUYXJnZXQ6IHRhcmdldCB9KVxuXG4gICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZmluZEhhbmRsZXIoZXZlbnRzLCBjYWxsYWJsZSwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhldmVudHMpXG4gICAgLmZpbmQoZXZlbnQgPT4gZXZlbnQuY2FsbGFibGUgPT09IGNhbGxhYmxlICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgY29uc3QgaXNEZWxlZ2F0ZWQgPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZydcbiAgLy8gVE9ETzogdG9vbHRpcCBwYXNzZXMgYGZhbHNlYCBpbnN0ZWFkIG9mIHNlbGVjdG9yLCBzbyB3ZSBuZWVkIHRvIGNoZWNrXG4gIGNvbnN0IGNhbGxhYmxlID0gaXNEZWxlZ2F0ZWQgPyBkZWxlZ2F0aW9uRnVuY3Rpb24gOiAoaGFuZGxlciB8fCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gIGxldCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQob3JpZ2luYWxUeXBlRXZlbnQpXG5cbiAgaWYgKCFuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudCkpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudFxuICB9XG5cbiAgcmV0dXJuIFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF1cbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGxldCBbaXNEZWxlZ2F0ZWQsIGNhbGxhYmxlLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1ldGVycyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKVxuXG4gIC8vIGluIGNhc2Ugb2YgbW91c2VlbnRlciBvciBtb3VzZWxlYXZlIHdyYXAgdGhlIGhhbmRsZXIgd2l0aGluIGEgZnVuY3Rpb24gdGhhdCBjaGVja3MgZm9yIGl0cyBET00gcG9zaXRpb25cbiAgLy8gdGhpcyBwcmV2ZW50cyB0aGUgaGFuZGxlciBmcm9tIGJlaW5nIGRpc3BhdGNoZWQgdGhlIHNhbWUgd2F5IGFzIG1vdXNlb3ZlciBvciBtb3VzZW91dCBkb2VzXG4gIGlmIChvcmlnaW5hbFR5cGVFdmVudCBpbiBjdXN0b21FdmVudHMpIHtcbiAgICBjb25zdCB3cmFwRnVuY3Rpb24gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FsbGFibGUgPSB3cmFwRnVuY3Rpb24oY2FsbGFibGUpXG4gIH1cblxuICBjb25zdCBldmVudHMgPSBnZXRFbGVtZW50RXZlbnRzKGVsZW1lbnQpXG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pXG4gIGNvbnN0IHByZXZpb3VzRnVuY3Rpb24gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgY2FsbGFibGUsIGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGwpXG5cbiAgaWYgKHByZXZpb3VzRnVuY3Rpb24pIHtcbiAgICBwcmV2aW91c0Z1bmN0aW9uLm9uZU9mZiA9IHByZXZpb3VzRnVuY3Rpb24ub25lT2ZmICYmIG9uZU9mZlxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1aWQgPSBtYWtlRXZlbnRVaWQoY2FsbGFibGUsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSlcbiAgY29uc3QgZm4gPSBpc0RlbGVnYXRlZCA/XG4gICAgYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgaGFuZGxlciwgY2FsbGFibGUpIDpcbiAgICBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGNhbGxhYmxlKVxuXG4gIGZuLmRlbGVnYXRpb25TZWxlY3RvciA9IGlzRGVsZWdhdGVkID8gaGFuZGxlciA6IG51bGxcbiAgZm4uY2FsbGFibGUgPSBjYWxsYWJsZVxuICBmbi5vbmVPZmYgPSBvbmVPZmZcbiAgZm4udWlkRXZlbnQgPSB1aWRcbiAgaGFuZGxlcnNbdWlkXSA9IGZuXG5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGlzRGVsZWdhdGVkKVxufVxuXG5mdW5jdGlvbiByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgY29uc3QgZm4gPSBmaW5kSGFuZGxlcihldmVudHNbdHlwZUV2ZW50XSwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKVxuXG4gIGlmICghZm4pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlRXZlbnQsIGZuLCBCb29sZWFuKGRlbGVnYXRpb25TZWxlY3RvcikpXG4gIGRlbGV0ZSBldmVudHNbdHlwZUV2ZW50XVtmbi51aWRFdmVudF1cbn1cblxuZnVuY3Rpb24gcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBuYW1lc3BhY2UpIHtcbiAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuXG4gIGZvciAoY29uc3QgW2hhbmRsZXJLZXksIGV2ZW50XSBvZiBPYmplY3QuZW50cmllcyhzdG9yZUVsZW1lbnRFdmVudCkpIHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRUeXBlRXZlbnQoZXZlbnQpIHtcbiAgLy8gYWxsb3cgdG8gZ2V0IHRoZSBuYXRpdmUgZXZlbnRzIGZyb20gbmFtZXNwYWNlZCBldmVudHMgKCdjbGljay5icy5idXR0b24nIC0tPiAnY2xpY2snKVxuICBldmVudCA9IGV2ZW50LnJlcGxhY2Uoc3RyaXBOYW1lUmVnZXgsICcnKVxuICByZXR1cm4gY3VzdG9tRXZlbnRzW2V2ZW50XSB8fCBldmVudFxufVxuXG5jb25zdCBFdmVudEhhbmRsZXIgPSB7XG4gIG9uKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24sIGZhbHNlKVxuICB9LFxuXG4gIG9uZShlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uLCB0cnVlKVxuICB9LFxuXG4gIG9mZihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZ1bmN0aW9uKSB7XG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IFtpc0RlbGVnYXRlZCwgY2FsbGFibGUsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbWV0ZXJzKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRnVuY3Rpb24pXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RWxlbWVudEV2ZW50cyhlbGVtZW50KVxuICAgIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge31cbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYWJsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIFNpbXBsZXN0IGNhc2U6IGhhbmRsZXIgaXMgcGFzc2VkLCByZW1vdmUgdGhhdCBsaXN0ZW5lciBPTkxZLlxuICAgICAgaWYgKCFPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkubGVuZ3RoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBjYWxsYWJsZSwgaXNEZWxlZ2F0ZWQgPyBoYW5kbGVyIDogbnVsbClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc05hbWVzcGFjZSkge1xuICAgICAgZm9yIChjb25zdCBlbGVtZW50RXZlbnQgb2YgT2JqZWN0LmtleXMoZXZlbnRzKSkge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAoY29uc3QgW2tleUhhbmRsZXJzLCBldmVudF0gb2YgT2JqZWN0LmVudHJpZXMoc3RvcmVFbGVtZW50RXZlbnQpKSB7XG4gICAgICBjb25zdCBoYW5kbGVyS2V5ID0ga2V5SGFuZGxlcnMucmVwbGFjZShzdHJpcFVpZFJlZ2V4LCAnJylcblxuICAgICAgaWYgKCFpbk5hbWVzcGFjZSB8fCBvcmlnaW5hbFR5cGVFdmVudC5pbmNsdWRlcyhoYW5kbGVyS2V5KSkge1xuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5jYWxsYWJsZSwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudFxuXG4gICAgbGV0IGpRdWVyeUV2ZW50ID0gbnVsbFxuICAgIGxldCBidWJibGVzID0gdHJ1ZVxuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWVcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlXG5cbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKVxuXG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpXG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICAgIH1cblxuICAgIGNvbnN0IGV2dCA9IGh5ZHJhdGVPYmoobmV3IEV2ZW50KGV2ZW50LCB7IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUgfSksIGFyZ3MpXG5cbiAgICBpZiAoZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KClcbiAgICB9XG5cbiAgICBpZiAobmF0aXZlRGlzcGF0Y2gpIHtcbiAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChldnQpXG4gICAgfVxuXG4gICAgaWYgKGV2dC5kZWZhdWx0UHJldmVudGVkICYmIGpRdWVyeUV2ZW50KSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmZ1bmN0aW9uIGh5ZHJhdGVPYmoob2JqLCBtZXRhID0ge30pIHtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobWV0YSkpIHtcbiAgICB0cnkge1xuICAgICAgb2JqW2tleV0gPSB2YWx1ZVxuICAgIH0gY2F0Y2gge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZXhwb3J0IGRlZmF1bHQgRXZlbnRIYW5kbGVyXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRvbS9tYW5pcHVsYXRvci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGEodmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodmFsdWUgPT09IE51bWJlcih2YWx1ZSkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsdWUpXG4gIH1cblxuICBpZiAodmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApXG59XG5cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSlcbiAgfSxcblxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9XG4gICAgY29uc3QgYnNLZXlzID0gT2JqZWN0LmtleXMoZWxlbWVudC5kYXRhc2V0KS5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpICYmICFrZXkuc3RhcnRzV2l0aCgnYnNDb25maWcnKSlcblxuICAgIGZvciAoY29uc3Qga2V5IG9mIGJzS2V5cykge1xuICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpXG4gICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpXG4gICAgICBhdHRyaWJ1dGVzW3B1cmVLZXldID0gbm9ybWFsaXplRGF0YShlbGVtZW50LmRhdGFzZXRba2V5XSlcbiAgICB9XG5cbiAgICByZXR1cm4gYXR0cmlidXRlc1xuICB9LFxuXG4gIGdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZURhdGEoZWxlbWVudC5nZXRBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0b3JcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdXRpbC9jb25maWcuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IHsgaXNFbGVtZW50LCB0b1R5cGUgfSBmcm9tICcuL2luZGV4LmpzJ1xuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBDb25maWcge1xuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4ge31cbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWVyZ2VDb25maWdPYmooY29uZmlnLCBlbGVtZW50KSB7XG4gICAgY29uc3QganNvbkNvbmZpZyA9IGlzRWxlbWVudChlbGVtZW50KSA/IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgJ2NvbmZpZycpIDoge30gLy8gdHJ5IHRvIHBhcnNlXG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uKHR5cGVvZiBqc29uQ29uZmlnID09PSAnb2JqZWN0JyA/IGpzb25Db25maWcgOiB7fSksXG4gICAgICAuLi4oaXNFbGVtZW50KGVsZW1lbnQpID8gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkgOiB7fSksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gIH1cblxuICBfdHlwZUNoZWNrQ29uZmlnKGNvbmZpZywgY29uZmlnVHlwZXMgPSB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKSB7XG4gICAgZm9yIChjb25zdCBbcHJvcGVydHksIGV4cGVjdGVkVHlwZXNdIG9mIE9iamVjdC5lbnRyaWVzKGNvbmZpZ1R5cGVzKSkge1xuICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldXG4gICAgICBjb25zdCB2YWx1ZVR5cGUgPSBpc0VsZW1lbnQodmFsdWUpID8gJ2VsZW1lbnQnIDogdG9UeXBlKHZhbHVlKVxuXG4gICAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlnXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGJhc2UtY29tcG9uZW50LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IERhdGEgZnJvbSAnLi9kb20vZGF0YS5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi91dGlsL2NvbmZpZy5qcydcbmltcG9ydCB7IGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sIGdldEVsZW1lbnQgfSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjMuMydcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQmFzZUNvbXBvbmVudCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKClcblxuICAgIGVsZW1lbnQgPSBnZXRFbGVtZW50KGVsZW1lbnQpXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG5cbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGRpc3Bvc2UoKSB7XG4gICAgRGF0YS5yZW1vdmUodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5EQVRBX0tFWSlcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRVZFTlRfS0VZKVxuXG4gICAgZm9yIChjb25zdCBwcm9wZXJ0eU5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpIHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfcXVldWVDYWxsYmFjayhjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZCA9IHRydWUpIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcsIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKVxuICB9XG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YFxuICB9XG5cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWBcbiAgfVxuXG4gIHN0YXRpYyBldmVudE5hbWUobmFtZSkge1xuICAgIHJldHVybiBgJHtuYW1lfSR7dGhpcy5FVkVOVF9LRVl9YFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhc2VDb21wb25lbnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGlzRGlzYWJsZWQsIGlzVmlzaWJsZSwgcGFyc2VTZWxlY3RvciB9IGZyb20gJy4uL3V0aWwvaW5kZXguanMnXG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyaWJ1dGUgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpXG5cbiAgICAvLyBUaGUgb25seSB2YWxpZCBjb250ZW50IHRoYXQgY291bGQgZG91YmxlIGFzIGEgc2VsZWN0b3IgYXJlIElEcyBvciBjbGFzc2VzLFxuICAgIC8vIHNvIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgd2l0aCBgI2Agb3IgYC5gLiBJZiBhIFwicmVhbFwiIFVSTCBpcyB1c2VkIGFzIHRoZSBzZWxlY3RvcixcbiAgICAvLyBgZG9jdW1lbnQucXVlcnlTZWxlY3RvcmAgd2lsbCByaWdodGZ1bGx5IGNvbXBsYWluIGl0IGlzIGludmFsaWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9pc3N1ZXMvMzIyNzNcbiAgICBpZiAoIWhyZWZBdHRyaWJ1dGUgfHwgKCFocmVmQXR0cmlidXRlLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyaWJ1dGUuc3RhcnRzV2l0aCgnLicpKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyBKdXN0IGluIGNhc2Ugc29tZSBDTVMgcHV0cyBvdXQgYSBmdWxsIFVSTCB3aXRoIHRoZSBhbmNob3IgYXBwZW5kZWRcbiAgICBpZiAoaHJlZkF0dHJpYnV0ZS5pbmNsdWRlcygnIycpICYmICFocmVmQXR0cmlidXRlLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHJpYnV0ZSA9IGAjJHtocmVmQXR0cmlidXRlLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHJpYnV0ZSAmJiBocmVmQXR0cmlidXRlICE9PSAnIycgPyBocmVmQXR0cmlidXRlLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvciA/IHNlbGVjdG9yLnNwbGl0KCcsJykubWFwKHNlbCA9PiBwYXJzZVNlbGVjdG9yKHNlbCkpLmpvaW4oJywnKSA6IG51bGxcbn1cblxuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpXG4gIH0sXG5cbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpXG4gIH0sXG5cbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pLmZpbHRlcihjaGlsZCA9PiBjaGlsZC5tYXRjaGVzKHNlbGVjdG9yKSlcbiAgfSxcblxuICBwYXJlbnRzKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgcGFyZW50cyA9IFtdXG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlLmNsb3Nlc3Qoc2VsZWN0b3IpXG5cbiAgICB3aGlsZSAoYW5jZXN0b3IpIHtcbiAgICAgIHBhcmVudHMucHVzaChhbmNlc3RvcilcbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZS5jbG9zZXN0KHNlbGVjdG9yKVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzXG4gIH0sXG5cbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c11cbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG4gIC8vIFRPRE86IHRoaXMgaXMgbm93IHVudXNlZDsgcmVtb3ZlIGxhdGVyIGFsb25nIHdpdGggcHJldigpXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nXG5cbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XVxuICAgICAgfVxuXG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFtcbiAgICAgICdhJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICd0ZXh0YXJlYScsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdbdGFiaW5kZXhdJyxcbiAgICAgICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICBdLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywnKVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpXG4gIH0sXG5cbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbFxuICB9LFxuXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IpIDogbnVsbFxuICB9LFxuXG4gIGdldE11bHRpcGxlRWxlbWVudHNGcm9tU2VsZWN0b3IoZWxlbWVudCkge1xuICAgIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICAgIHJldHVybiBzZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpIDogW11cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvckVuZ2luZVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4uL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4uL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgeyBpc0Rpc2FibGVkIH0gZnJvbSAnLi9pbmRleC5qcydcblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWBcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IFNlbGVjdG9yRW5naW5lLmdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKVxuICB9KVxufVxuXG5leHBvcnQge1xuICBlbmFibGVEaXNtaXNzVHJpZ2dlclxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQuanMnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXIuanMnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzJ1xuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnYWxlcnQnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5hbGVydCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX0NMT1NFID0gYGNsb3NlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xPU0VEID0gYGNsb3NlZCR7RVZFTlRfS0VZfWBcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2J1dHRvbidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmJ1dHRvbidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgdG9nZ2xlKCkge1xuICAgIC8vIFRvZ2dsZSBjbGFzcyBhbmQgc3luYyB0aGUgYGFyaWEtcHJlc3NlZGAgYXR0cmlidXRlIHdpdGggdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgYC50b2dnbGUoKWAgbWV0aG9kXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtcHJlc3NlZCcsIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0FDVElWRSkpXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudCA9PiB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcblxuICBjb25zdCBidXR0b24gPSBldmVudC50YXJnZXQuY2xvc2VzdChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcbiAgY29uc3QgZGF0YSA9IEJ1dHRvbi5nZXRPckNyZWF0ZUluc3RhbmNlKGJ1dHRvbilcblxuICBkYXRhLnRvZ2dsZSgpXG59KVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pXG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3N3aXBlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5pbXBvcnQgeyBleGVjdXRlIH0gZnJvbSAnLi9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3N3aXBlJ1xuY29uc3QgRVZFTlRfS0VZID0gJy5icy5zd2lwZSdcbmNvbnN0IEVWRU5UX1RPVUNIU1RBUlQgPSBgdG91Y2hzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNITU9WRSA9IGB0b3VjaG1vdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSEVORCA9IGB0b3VjaGVuZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJET1dOID0gYHBvaW50ZXJkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUlVQID0gYHBvaW50ZXJ1cCR7RVZFTlRfS0VZfWBcbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBlbmRDYWxsYmFjazogbnVsbCxcbiAgbGVmdENhbGxiYWNrOiBudWxsLFxuICByaWdodENhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBlbmRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIGxlZnRDYWxsYmFjazogJyhmdW5jdGlvbnxudWxsKScsXG4gIHJpZ2h0Q2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFN3aXBlIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2VsZW1lbnQgPSBlbGVtZW50XG5cbiAgICBpZiAoIWVsZW1lbnQgfHwgIVN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fZGVsdGFYID0gMFxuICAgIHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuICAgIHRoaXMuX2luaXRFdmVudHMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBkaXNwb3NlKCkge1xuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfc3RhcnQoZXZlbnQpIHtcbiAgICBpZiAoIXRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2V2ZW50SXNQb2ludGVyUGVuVG91Y2goZXZlbnQpKSB7XG4gICAgICB0aGlzLl9kZWx0YVggPSBldmVudC5jbGllbnRYXG4gICAgfVxuICB9XG5cbiAgX2VuZChldmVudCkge1xuICAgIGlmICh0aGlzLl9ldmVudElzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgdGhpcy5fZGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMuX2RlbHRhWFxuICAgIH1cblxuICAgIHRoaXMuX2hhbmRsZVN3aXBlKClcbiAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5lbmRDYWxsYmFjaylcbiAgfVxuXG4gIF9tb3ZlKGV2ZW50KSB7XG4gICAgdGhpcy5fZGVsdGFYID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDEgP1xuICAgICAgMCA6XG4gICAgICBldmVudC50b3VjaGVzWzBdLmNsaWVudFggLSB0aGlzLl9kZWx0YVhcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YVggPSBNYXRoLmFicyh0aGlzLl9kZWx0YVgpXG5cbiAgICBpZiAoYWJzRGVsdGFYIDw9IFNXSVBFX1RIUkVTSE9MRCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gYWJzRGVsdGFYIC8gdGhpcy5fZGVsdGFYXG5cbiAgICB0aGlzLl9kZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXhlY3V0ZShkaXJlY3Rpb24gPiAwID8gdGhpcy5fY29uZmlnLnJpZ2h0Q2FsbGJhY2sgOiB0aGlzLl9jb25maWcubGVmdENhbGxiYWNrKVxuICB9XG5cbiAgX2luaXRFdmVudHMoKSB7XG4gICAgaWYgKHRoaXMuX3N1cHBvcnRQb2ludGVyRXZlbnRzKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHRoaXMuX3N0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IHRoaXMuX2VuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiB0aGlzLl9zdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiB0aGlzLl9tb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gdGhpcy5fZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfZXZlbnRJc1BvaW50ZXJQZW5Ub3VjaChldmVudCkge1xuICAgIHJldHVybiB0aGlzLl9zdXBwb3J0UG9pbnRlckV2ZW50cyAmJiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9QRU4gfHwgZXZlbnQucG9pbnRlclR5cGUgPT09IFBPSU5URVJfVFlQRV9UT1VDSClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgaXNTdXBwb3J0ZWQoKSB7XG4gICAgcmV0dXJuICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU3dpcGVcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIHJlZmxvdyxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmRcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IFN3aXBlIGZyb20gJy4vdXRpbC9zd2lwZS5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Nhcm91c2VsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY2Fyb3VzZWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0J1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnXG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuXG5jb25zdCBPUkRFUl9ORVhUID0gJ25leHQnXG5jb25zdCBPUkRFUl9QUkVWID0gJ3ByZXYnXG5jb25zdCBESVJFQ1RJT05fTEVGVCA9ICdsZWZ0J1xuY29uc3QgRElSRUNUSU9OX1JJR0hUID0gJ3JpZ2h0J1xuXG5jb25zdCBFVkVOVF9TTElERSA9IGBzbGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NMSUQgPSBgc2xpZCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV04gPSBga2V5ZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFRU5URVIgPSBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFTEVBVkUgPSBgbW91c2VsZWF2ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0RSQUdfU1RBUlQgPSBgZHJhZ3N0YXJ0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfQ0FST1VTRUwgPSAnY2Fyb3VzZWwnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX1NMSURFID0gJ3NsaWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9FTkQgPSAnY2Fyb3VzZWwtaXRlbS1lbmQnXG5jb25zdCBDTEFTU19OQU1FX1NUQVJUID0gJ2Nhcm91c2VsLWl0ZW0tc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX05FWFQgPSAnY2Fyb3VzZWwtaXRlbS1uZXh0J1xuY29uc3QgQ0xBU1NfTkFNRV9QUkVWID0gJ2Nhcm91c2VsLWl0ZW0tcHJldidcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSBTRUxFQ1RPUl9BQ1RJVkUgKyBTRUxFQ1RPUl9JVEVNXG5jb25zdCBTRUxFQ1RPUl9JVEVNX0lNRyA9ICcuY2Fyb3VzZWwtaXRlbSBpbWcnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nXG5cbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWV06IERJUkVDVElPTl9MRUZUXG59XG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGludGVydmFsOiA1MDAwLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHJpZGU6IGZhbHNlLFxuICB0b3VjaDogdHJ1ZSxcbiAgd3JhcDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJywgLy8gVE9ETzp2NiByZW1vdmUgYm9vbGVhbiBzdXBwb3J0XG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHBhdXNlOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHJpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgdG91Y2g6ICdib29sZWFuJyxcbiAgd3JhcDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5faXNTbGlkaW5nID0gZmFsc2VcbiAgICB0aGlzLnRvdWNoVGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9zd2lwZUhlbHBlciA9IG51bGxcblxuICAgIHRoaXMuX2luZGljYXRvcnNFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9JTkRJQ0FUT1JTLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcblxuICAgIGlmICh0aGlzLl9jb25maWcucmlkZSA9PT0gQ0xBU1NfTkFNRV9DQVJPVVNFTCkge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpXG4gIH1cblxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRklYTUUgVE9ETyB1c2UgYGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZWBcbiAgICAvLyBEb24ndCBjYWxsIG5leHQgd2hlbiB0aGUgcGFnZSBpc24ndCB2aXNpYmxlXG4gICAgLy8gb3IgdGhlIGNhcm91c2VsIG9yIGl0cyBwYXJlbnQgaXNuJ3QgdmlzaWJsZVxuICAgIGlmICghZG9jdW1lbnQuaGlkZGVuICYmIGlzVmlzaWJsZSh0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdGhpcy5uZXh0KClcbiAgICB9XG4gIH1cblxuICBwcmV2KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX1BSRVYpXG4gIH1cblxuICBwYXVzZSgpIHtcbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFySW50ZXJ2YWwoKVxuICB9XG5cbiAgY3ljbGUoKSB7XG4gICAgdGhpcy5fY2xlYXJJbnRlcnZhbCgpXG4gICAgdGhpcy5fdXBkYXRlSW50ZXJ2YWwoKVxuXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbCgoKSA9PiB0aGlzLm5leHRXaGVuVmlzaWJsZSgpLCB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXG4gIH1cblxuICBfbWF5YmVFbmFibGVDeWNsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5yaWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICBFdmVudEhhbmRsZXIub25lKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsICgpID0+IHRoaXMuY3ljbGUoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY3ljbGUoKVxuICB9XG5cbiAgdG8oaW5kZXgpIHtcbiAgICBjb25zdCBpdGVtcyA9IHRoaXMuX2dldEl0ZW1zKClcbiAgICBpZiAoaW5kZXggPiBpdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2dldEFjdGl2ZSgpKVxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9yZGVyID0gaW5kZXggPiBhY3RpdmVJbmRleCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShvcmRlciwgaXRlbXNbaW5kZXhdKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fc3dpcGVIZWxwZXIpIHtcbiAgICAgIHRoaXMuX3N3aXBlSGVscGVyLmRpc3Bvc2UoKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuZGVmYXVsdEludGVydmFsID0gY29uZmlnLmludGVydmFsXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiwgKCkgPT4gdGhpcy5wYXVzZSgpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUsICgpID0+IHRoaXMuX21heWJlRW5hYmxlQ3ljbGUoKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvdWNoICYmIFN3aXBlLmlzU3VwcG9ydGVkKCkpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGZvciAoY29uc3QgaW1nIG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTV9JTUcsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24oaW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIH1cblxuICAgIGNvbnN0IGVuZENhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSAhPT0gJ2hvdmVyJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gSWYgaXQncyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlLCBtb3VzZWVudGVyL2xlYXZlIGFyZSBmaXJlZCBhc1xuICAgICAgLy8gcGFydCBvZiB0aGUgbW91c2UgY29tcGF0aWJpbGl0eSBldmVudHMgb24gZmlyc3QgdGFwIC0gdGhlIGNhcm91c2VsXG4gICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgLy8gaGVyZSwgd2UgbGlzdGVuIGZvciB0b3VjaGVuZCwgZXhwbGljaXRseSBwYXVzZSB0aGUgY2Fyb3VzZWxcbiAgICAgIC8vIChhcyBpZiBpdCdzIHRoZSBzZWNvbmQgdGltZSB3ZSB0YXAgb24gaXQsIG1vdXNlZW50ZXIgY29tcGF0IGV2ZW50XG4gICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAvLyBldmVudHMgdG8gZmlyZSkgd2UgZXhwbGljaXRseSByZXN0YXJ0IGN5Y2xpbmdcblxuICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMudG91Y2hUaW1lb3V0KVxuICAgICAgfVxuXG4gICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fbWF5YmVFbmFibGVDeWNsZSgpLCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUICsgdGhpcy5fY29uZmlnLmludGVydmFsKVxuICAgIH1cblxuICAgIGNvbnN0IHN3aXBlQ29uZmlnID0ge1xuICAgICAgbGVmdENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9MRUZUKSksXG4gICAgICByaWdodENhbGxiYWNrOiAoKSA9PiB0aGlzLl9zbGlkZSh0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKERJUkVDVElPTl9SSUdIVCkpLFxuICAgICAgZW5kQ2FsbGJhY2s6IGVuZENhbGxCYWNrXG4gICAgfVxuXG4gICAgdGhpcy5fc3dpcGVIZWxwZXIgPSBuZXcgU3dpcGUodGhpcy5fZWxlbWVudCwgc3dpcGVDb25maWcpXG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5fc2xpZGUodGhpcy5fZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHJldHVybiB0aGlzLl9nZXRJdGVtcygpLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KGluZGV4KSB7XG4gICAgaWYgKCF0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgYWN0aXZlSW5kaWNhdG9yLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JylcblxuICAgIGNvbnN0IG5ld0FjdGl2ZUluZGljYXRvciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoYFtkYXRhLWJzLXNsaWRlLXRvPVwiJHtpbmRleH1cIl1gLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgIGlmIChuZXdBY3RpdmVJbmRpY2F0b3IpIHtcbiAgICAgIG5ld0FjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgbmV3QWN0aXZlSW5kaWNhdG9yLnNldEF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JywgJ3RydWUnKVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCB0aGlzLl9nZXRBY3RpdmUoKVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApXG5cbiAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSBlbGVtZW50SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbFxuICB9XG5cbiAgX3NsaWRlKG9yZGVyLCBlbGVtZW50ID0gbnVsbCkge1xuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGFjdGl2ZUVsZW1lbnQgPSB0aGlzLl9nZXRBY3RpdmUoKVxuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2dldEl0ZW1zKCksIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApXG5cbiAgICBpZiAobmV4dEVsZW1lbnQgPT09IGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgobmV4dEVsZW1lbnQpXG5cbiAgICBjb25zdCB0cmlnZ2VyRXZlbnQgPSBldmVudE5hbWUgPT4ge1xuICAgICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIGV2ZW50TmFtZSwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSxcbiAgICAgICAgZnJvbTogdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpLFxuICAgICAgICB0bzogbmV4dEVsZW1lbnRJbmRleFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdHJpZ2dlckV2ZW50KEVWRU5UX1NMSURFKVxuXG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICAvLyBUT0RPOiBjaGFuZ2UgdGVzdHMgdGhhdCB1c2UgZW1wdHkgZGl2cyB0byBhdm9pZCB0aGlzIGNoZWNrXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKVxuICAgIHRoaXMucGF1c2UoKVxuXG4gICAgdGhpcy5faXNTbGlkaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5fc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChuZXh0RWxlbWVudEluZGV4KVxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudFxuXG4gICAgY29uc3QgZGlyZWN0aW9uYWxDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX1NUQVJUIDogQ0xBU1NfTkFNRV9FTkRcbiAgICBjb25zdCBvcmRlckNsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfTkVYVCA6IENMQVNTX05BTUVfUFJFVlxuXG4gICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSlcblxuICAgIHJlZmxvdyhuZXh0RWxlbWVudClcblxuICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcbiAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKVxuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgYWN0aXZlRWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFLCBvcmRlckNsYXNzTmFtZSwgZGlyZWN0aW9uYWxDbGFzc05hbWUpXG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG5cbiAgICAgIHRyaWdnZXJFdmVudChFVkVOVF9TTElEKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsQmFjaywgYWN0aXZlRWxlbWVudCwgdGhpcy5faXNBbmltYXRlZCgpKVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgX2lzQW5pbWF0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpXG4gIH1cblxuICBfZ2V0QWN0aXZlKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICB9XG5cbiAgX2dldEl0ZW1zKCkge1xuICAgIHJldHVybiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gIH1cblxuICBfY2xlYXJJbnRlcnZhbCgpIHtcbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoaXNSVEwoKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9QUkVWIDogT1JERVJfTkVYVFxuICAgIH1cblxuICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfTkVYVCA6IE9SREVSX1BSRVZcbiAgfVxuXG4gIF9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKSB7XG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlRcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZGF0YS50byhjb25maWcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgY2Fyb3VzZWwgPSBDYXJvdXNlbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcbiAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJylcblxuICBpZiAoc2xpZGVJbmRleCkge1xuICAgIGNhcm91c2VsLnRvKHNsaWRlSW5kZXgpXG4gICAgY2Fyb3VzZWwuX21heWJlRW5hYmxlQ3ljbGUoKVxuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUodGhpcywgJ3NsaWRlJykgPT09ICduZXh0Jykge1xuICAgIGNhcm91c2VsLm5leHQoKVxuICAgIGNhcm91c2VsLl9tYXliZUVuYWJsZUN5Y2xlKClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNhcm91c2VsLnByZXYoKVxuICBjYXJvdXNlbC5fbWF5YmVFbmFibGVDeWNsZSgpXG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKVxuXG4gIGZvciAoY29uc3QgY2Fyb3VzZWwgb2YgY2Fyb3VzZWxzKSB7XG4gICAgQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShjYXJvdXNlbClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ2Fyb3VzZWwpXG5cbmV4cG9ydCBkZWZhdWx0IENhcm91c2VsXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGNvbGxhcHNlLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjb2xsYXBzZSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNvbGxhcHNlJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCdcbmNvbnN0IENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOID0gYDpzY29wZSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfSAuJHtDTEFTU19OQU1FX0NPTExBUFNFfWBcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJ1xuXG5jb25zdCBXSURUSCA9ICd3aWR0aCdcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLmNvbGxhcHNlLnNob3csIC5jb2xsYXBzZS5jb2xsYXBzaW5nJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHBhcmVudDogbnVsbCxcbiAgdG9nZ2xlOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KScsXG4gIHRvZ2dsZTogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW11cblxuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChjb25zdCBlbGVtIG9mIHRvZ2dsZUxpc3QpIHtcbiAgICAgIGNvbnN0IHNlbGVjdG9yID0gU2VsZWN0b3JFbmdpbmUuZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtKVxuICAgICAgY29uc3QgZmlsdGVyRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG4gICAgICAgIC5maWx0ZXIoZm91bmRFbGVtZW50ID0+IGZvdW5kRWxlbWVudCA9PT0gdGhpcy5fZWxlbWVudClcblxuICAgICAgaWYgKHNlbGVjdG9yICE9PSBudWxsICYmIGZpbHRlckVsZW1lbnQubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlQ2hpbGRyZW4gPSBbXVxuXG4gICAgLy8gZmluZCBhY3RpdmUgY2hpbGRyZW5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgYWN0aXZlQ2hpbGRyZW4gPSB0aGlzLl9nZXRGaXJzdExldmVsQ2hpbGRyZW4oU0VMRUNUT1JfQUNUSVZFUylcbiAgICAgICAgLmZpbHRlcihlbGVtZW50ID0+IGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQpXG4gICAgICAgIC5tYXAoZWxlbWVudCA9PiBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHsgdG9nZ2xlOiBmYWxzZSB9KSlcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2hpbGRyZW4ubGVuZ3RoICYmIGFjdGl2ZUNoaWxkcmVuWzBdLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgYWN0aXZlSW5zdGFuY2Ugb2YgYWN0aXZlQ2hpbGRyZW4pIHtcbiAgICAgIGFjdGl2ZUluc3RhbmNlLmhpZGUoKVxuICAgIH1cblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSlcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWBcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGBcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YFxuXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdGhpcy5fdHJpZ2dlckFycmF5KSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0cmlnZ2VyKVxuXG4gICAgICBpZiAoZWxlbWVudCAmJiAhdGhpcy5faXNTaG93bihlbGVtZW50KSkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW3RyaWdnZXJdLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0UpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gJydcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpIC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudClcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFRcbiAgfVxuXG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldEZpcnN0TGV2ZWxDaGlsZHJlbihTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjaGlsZHJlbikge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICB0aGlzLl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MoW2VsZW1lbnRdLCB0aGlzLl9pc1Nob3duKHNlbGVjdGVkKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfZ2V0Rmlyc3RMZXZlbENoaWxkcmVuKHNlbGVjdG9yKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgIC8vIHJlbW92ZSBjaGlsZHJlbiBpZiBncmVhdGVyIGRlcHRoXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2NvbmZpZy5wYXJlbnQpLmZpbHRlcihlbGVtZW50ID0+ICFjaGlsZHJlbi5pbmNsdWRlcyhlbGVtZW50KSlcbiAgfVxuXG4gIF9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3ModHJpZ2dlckFycmF5LCBpc09wZW4pIHtcbiAgICBpZiAoIXRyaWdnZXJBcnJheS5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0cmlnZ2VyQXJyYXkpIHtcbiAgICAgIGVsZW1lbnQuY2xhc3NMaXN0LnRvZ2dsZShDTEFTU19OQU1FX0NPTExBUFNFRCwgIWlzT3BlbilcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgaXNPcGVuKVxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIGNvbnN0IF9jb25maWcgPSB7fVxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgIF9jb25maWcudG9nZ2xlID0gZmFsc2VcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgLy8gcHJldmVudERlZmF1bHQgb25seSBmb3IgPGE+IGVsZW1lbnRzICh3aGljaCBjaGFuZ2UgdGhlIFVSTCkgbm90IGluc2lkZSB0aGUgY29sbGFwc2libGUgZWxlbWVudFxuICBpZiAoZXZlbnQudGFyZ2V0LnRhZ05hbWUgPT09ICdBJyB8fCAoZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgZXZlbnQuZGVsZWdhdGVUYXJnZXQudGFnTmFtZSA9PT0gJ0EnKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5nZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yKHRoaXMpKSB7XG4gICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCB7IHRvZ2dsZTogZmFsc2UgfSkudG9nZ2xlKClcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIGRyb3Bkb3duLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0ICogYXMgUG9wcGVyIGZyb20gJ0Bwb3BwZXJqcy9jb3JlJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGV4ZWN1dGUsXG4gIGdldEVsZW1lbnQsXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICBpc0Rpc2FibGVkLFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIG5vb3Bcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnZHJvcGRvd24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5kcm9wZG93bidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnXG5jb25zdCBBUlJPV19ET1dOX0tFWSA9ICdBcnJvd0Rvd24nXG5jb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyIC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSA9IGBrZXlkb3duJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZVVBfREFUQV9BUEkgPSBga2V5dXAke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QVVAgPSAnZHJvcHVwJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRU5EID0gJ2Ryb3BlbmQnXG5jb25zdCBDTEFTU19OQU1FX0RST1BTVEFSVCA9ICdkcm9wc3RhcnQnXG5jb25zdCBDTEFTU19OQU1FX0RST1BVUF9DRU5URVIgPSAnZHJvcHVwLWNlbnRlcidcbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fQ0VOVEVSID0gJ2Ryb3Bkb3duLWNlbnRlcidcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiA9IGAke1NFTEVDVE9SX0RBVEFfVE9HR0xFfS4ke0NMQVNTX05BTUVfU0hPV31gXG5jb25zdCBTRUxFQ1RPUl9NRU5VID0gJy5kcm9wZG93bi1tZW51J1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSID0gJy5uYXZiYXInXG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2J1xuY29uc3QgU0VMRUNUT1JfVklTSUJMRV9JVEVNUyA9ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcblxuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0J1xuY29uc3QgUExBQ0VNRU5UX1RPUEVORCA9IGlzUlRMKCkgPyAndG9wLXN0YXJ0JyA6ICd0b3AtZW5kJ1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTSA9IGlzUlRMKCkgPyAnYm90dG9tLWVuZCcgOiAnYm90dG9tLXN0YXJ0J1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJ1xuY29uc3QgUExBQ0VNRU5UX1JJR0hUID0gaXNSVEwoKSA/ICdsZWZ0LXN0YXJ0JyA6ICdyaWdodC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9MRUZUID0gaXNSVEwoKSA/ICdyaWdodC1zdGFydCcgOiAnbGVmdC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BDRU5URVIgPSAndG9wJ1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUNFTlRFUiA9ICdib3R0b20nXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGF1dG9DbG9zZTogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBkaXNwbGF5OiAnZHluYW1pYycsXG4gIG9mZnNldDogWzAsIDJdLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZSdcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX3BvcHBlciA9IG51bGxcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgLy8gZHJvcGRvd24gd3JhcHBlclxuICAgIC8vIFRPRE86IHY2IHJldmVydCAjMzcwMTEgJiBjaGFuZ2UgbWFya3VwIGh0dHBzOi8vZ2V0Ym9vdHN0cmFwLmNvbS9kb2NzLzUuMy9mb3Jtcy9pbnB1dC1ncm91cC9cbiAgICB0aGlzLl9tZW51ID0gU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fFxuICAgICAgU2VsZWN0b3JFbmdpbmUucHJldih0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXSB8fFxuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NRU5VLCB0aGlzLl9wYXJlbnQpXG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24oKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHJlbGF0ZWRUYXJnZXQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NyZWF0ZVBvcHBlcigpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgIXRoaXMuX3BhcmVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUl9OQVYpKSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfVxuXG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFLCByZWxhdGVkVGFyZ2V0KVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbikpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgdGhpcy5fbWVudS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgJ2ZhbHNlJylcbiAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTiwgcmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0gc3VwZXIuX2dldENvbmZpZyhjb25maWcpXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiZcbiAgICAgIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwicmVmZXJlbmNlXCIgcHJvdmlkZWQgdHlwZSBcIm9iamVjdFwiIHdpdGhvdXQgYSByZXF1aXJlZCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiIG1ldGhvZC5gKVxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9jcmVhdGVQb3BwZXIoKSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpXG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9wYXJlbnRcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSkge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IGdldEVsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2VcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZXJDb25maWcgPSB0aGlzLl9nZXRQb3BwZXJDb25maWcoKVxuICAgIHRoaXMuX3BvcHBlciA9IFBvcHBlci5jcmVhdGVQb3BwZXIocmVmZXJlbmNlRWxlbWVudCwgdGhpcy5fbWVudSwgcG9wcGVyQ29uZmlnKVxuICB9XG5cbiAgX2lzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX21lbnUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9wYXJlbnRcblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRU5EKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9SSUdIVFxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlRcbiAgICB9XG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfVE9QQ0VOVEVSXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUikpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSXG4gICAgfVxuXG4gICAgLy8gV2UgbmVlZCB0byB0cmltIHRoZSB2YWx1ZSBiZWNhdXNlIGN1c3RvbSBwcm9wZXJ0aWVzIGNhbiBhbHNvIGluY2x1ZGUgc3BhY2VzXG4gICAgY29uc3QgaXNFbmQgPSBnZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lbnUpLmdldFByb3BlcnR5VmFsdWUoJy0tYnMtcG9zaXRpb24nKS50cmltKCkgPT09ICdlbmQnXG5cbiAgICBpZiAocGFyZW50RHJvcGRvd24uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUFVQKSkge1xuICAgICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX1RPUEVORCA6IFBMQUNFTUVOVF9UT1BcbiAgICB9XG5cbiAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfQk9UVE9NRU5EIDogUExBQ0VNRU5UX0JPVFRPTVxuICB9XG5cbiAgX2RldGVjdE5hdmJhcigpIHtcbiAgICByZXR1cm4gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUikgIT09IG51bGxcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXkgb3IgRHJvcGRvd24gaXMgaW4gTmF2YmFyXG4gICAgaWYgKHRoaXMuX2luTmF2YmFyIHx8IHRoaXMuX2NvbmZpZy5kaXNwbGF5ID09PSAnc3RhdGljJykge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ3N0YXRpYycpIC8vIFRPRE86IHY2IHJlbW92ZVxuICAgICAgZGVmYXVsdEJzUG9wcGVyQ29uZmlnLm1vZGlmaWVycyA9IFt7XG4gICAgICAgIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gICAgICAgIGVuYWJsZWQ6IGZhbHNlXG4gICAgICB9XVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH1cbiAgfVxuXG4gIF9zZWxlY3RNZW51SXRlbSh7IGtleSwgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBpdGVtcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVklTSUJMRV9JVEVNUywgdGhpcy5fbWVudSkuZmlsdGVyKGVsZW1lbnQgPT4gaXNWaXNpYmxlKGVsZW1lbnQpKVxuXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBjbGVhck1lbnVzKGV2ZW50KSB7XG4gICAgaWYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG9wZW5Ub2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTilcblxuICAgIGZvciAoY29uc3QgdG9nZ2xlIG9mIG9wZW5Ub2dnbGVzKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlKVxuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSlcbiAgICAgIGlmIChcbiAgICAgICAgY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8XG4gICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0KSB8fFxuICAgICAgICAoY29udGV4dC5fY29uZmlnLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnICYmIGlzTWVudVRhcmdldClcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmICgoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkpIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHsgcmVsYXRlZFRhcmdldDogY29udGV4dC5fZWxlbWVudCB9XG5cbiAgICAgIGlmIChldmVudC50eXBlID09PSAnY2xpY2snKSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgYW4gVVAgfCBET1dOIHwgRVNDQVBFIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWEgJiYgaWYga2V5IGlzIG90aGVyIHRoYW4gRVNDQVBFID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcblxuICAgIGNvbnN0IGlzSW5wdXQgPSAvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKVxuICAgIGNvbnN0IGlzRXNjYXBlRXZlbnQgPSBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVlcbiAgICBjb25zdCBpc1VwT3JEb3duRXZlbnQgPSBbQVJST1dfVVBfS0VZLCBBUlJPV19ET1dOX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KVxuXG4gICAgaWYgKCFpc1VwT3JEb3duRXZlbnQgJiYgIWlzRXNjYXBlRXZlbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0lucHV0ICYmICFpc0VzY2FwZUV2ZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAvLyBUT0RPOiB2NiByZXZlcnQgIzM3MDExICYgY2hhbmdlIG1hcmt1cCBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy81LjMvZm9ybXMvaW5wdXQtZ3JvdXAvXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSA/XG4gICAgICB0aGlzIDpcbiAgICAgIChTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5uZXh0KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXSB8fFxuICAgICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBldmVudC5kZWxlZ2F0ZVRhcmdldC5wYXJlbnROb2RlKSlcblxuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pXG5cbiAgICBpZiAoaXNVcE9yRG93bkV2ZW50KSB7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKVxuICAgICAgaW5zdGFuY2Uuc2hvdygpXG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaW5zdGFuY2UuX2lzU2hvd24oKSkgeyAvLyBlbHNlIGlzIGVzY2FwZSBhbmQgd2UgY2hlY2sgaWYgaXQgaXMgc2hvd25cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICBpbnN0YW5jZS5oaWRlKClcbiAgICAgIGdldFRvZ2dsZUJ1dHRvbi5mb2N1cygpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogRGF0YSBBUEkgaW1wbGVtZW50YXRpb25cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5pbXBvcnQge1xuICBleGVjdXRlLCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLCBnZXRFbGVtZW50LCByZWZsb3dcbn0gZnJvbSAnLi9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2JhY2tkcm9wJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWBcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBjbGlja0NhbGxiYWNrOiBudWxsLFxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgaXNWaXNpYmxlOiB0cnVlLCAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICByb290RWxlbWVudDogJ2JvZHknIC8vIGdpdmUgdGhlIGNob2ljZSB0byBwbGFjZSBiYWNrZHJvcCB1bmRlciBkaWZmZXJlbnQgZWxlbWVudHNcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEJhY2tkcm9wIGV4dGVuZHMgQ29uZmlnIHtcbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgc2hvdyhjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2FwcGVuZCgpXG5cbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fZ2V0RWxlbWVudCgpXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3coZWxlbWVudClcbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICBoaWRlKGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZ2V0RWxlbWVudCgpLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgdGhpcy5fZW11bGF0ZUFuaW1hdGlvbigoKSA9PiB7XG4gICAgICB0aGlzLmRpc3Bvc2UoKVxuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWVcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRcbiAgfVxuXG4gIF9jb25maWdBZnRlck1lcmdlKGNvbmZpZykge1xuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9nZXRFbGVtZW50KClcbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpXG5cbiAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKVxuICAgIH0pXG5cbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZVxuICB9XG5cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IENvbmZpZyBmcm9tICcuL2NvbmZpZy5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ2ZvY3VzdHJhcCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmZvY3VzdHJhcCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBFVkVOVF9GT0NVU0lOID0gYGZvY3VzaW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOX1RBQiA9IGBrZXlkb3duLnRhYiR7RVZFTlRfS0VZfWBcblxuY29uc3QgVEFCX0tFWSA9ICdUYWInXG5jb25zdCBUQUJfTkFWX0ZPUldBUkQgPSAnZm9yd2FyZCdcbmNvbnN0IFRBQl9OQVZfQkFDS1dBUkQgPSAnYmFja3dhcmQnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGF1dG9mb2N1czogdHJ1ZSxcbiAgdHJhcEVsZW1lbnQ6IG51bGwgLy8gVGhlIGVsZW1lbnQgdG8gdHJhcCBmb2N1cyBpbnNpZGUgb2Zcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGF1dG9mb2N1czogJ2Jvb2xlYW4nLFxuICB0cmFwRWxlbWVudDogJ2VsZW1lbnQnXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIEZvY3VzVHJhcCBleHRlbmRzIENvbmZpZyB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2VcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbFxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBhY3RpdmF0ZSgpIHtcbiAgICBpZiAodGhpcy5faXNBY3RpdmUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcuYXV0b2ZvY3VzKSB7XG4gICAgICB0aGlzLl9jb25maWcudHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSkgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSlcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSlcblxuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZVxuICB9XG5cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaGFuZGxlRm9jdXNpbihldmVudCkge1xuICAgIGNvbnN0IHsgdHJhcEVsZW1lbnQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZG9jdW1lbnQgfHwgZXZlbnQudGFyZ2V0ID09PSB0cmFwRWxlbWVudCB8fCB0cmFwRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9jdXNUcmFwXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2Nyb2xsQmFyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4uL2RvbS9tYW5pcHVsYXRvci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lLmpzJ1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSAnLi9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnXG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCdcbmNvbnN0IFBST1BFUlRZX1BBRERJTkcgPSAncGFkZGluZy1yaWdodCdcbmNvbnN0IFBST1BFUlRZX01BUkdJTiA9ICdtYXJnaW4tcmlnaHQnXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbEJhckhlbHBlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VsZW1lbnQgPSBkb2N1bWVudC5ib2R5XG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0V2lkdGgoKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aFxuICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KClcbiAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSArIHdpZHRoKVxuICAgIC8vIHRyaWNrOiBXZSBhZGp1c3QgcG9zaXRpdmUgcGFkZGluZ1JpZ2h0IGFuZCBuZWdhdGl2ZSBtYXJnaW5SaWdodCB0byBzdGlja3ktdG9wIGVsZW1lbnRzIHRvIGtlZXAgc2hvd2luZyBmdWxsd2lkdGhcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCBQUk9QRVJUWV9QQURESU5HLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsIFBST1BFUlRZX01BUkdJTiwgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgUFJPUEVSVFlfUEFERElORylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsIFBST1BFUlRZX1BBRERJTkcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgUFJPUEVSVFlfTUFSR0lOKVxuICB9XG5cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMFxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGlzYWJsZU92ZXJGbG93KCkge1xuICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKHRoaXMuX2VsZW1lbnQsICdvdmVyZmxvdycpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5vdmVyZmxvdyA9ICdoaWRkZW4nXG4gIH1cblxuICBfc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHksIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKClcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpXG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHN0eWxlUHJvcGVydHkpXG4gICAgICBlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHN0eWxlUHJvcGVydHksIGAke2NhbGxiYWNrKE51bWJlci5wYXJzZUZsb2F0KGNhbGN1bGF0ZWRWYWx1ZSkpfXB4YClcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3BlcnR5KSB7XG4gICAgY29uc3QgYWN0dWFsVmFsdWUgPSBlbGVtZW50LnN0eWxlLmdldFByb3BlcnR5VmFsdWUoc3R5bGVQcm9wZXJ0eSlcbiAgICBpZiAoYWN0dWFsVmFsdWUpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSwgYWN0dWFsVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcGVydHkpIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcGVydHkpXG4gICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gcmVtb3ZlIHRoZSBwcm9wZXJ0eSBpZiB0aGUgdmFsdWUgaXMgYG51bGxgOyB0aGUgdmFsdWUgY2FuIGFsc28gYmUgemVyb1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wZXJ0eSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wZXJ0eSlcbiAgICAgIGVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoc3R5bGVQcm9wZXJ0eSwgdmFsdWUpXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHNlbCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgY2FsbEJhY2soc2VsKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxCYXJIZWxwZXJcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgbW9kYWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AuanMnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zLmpzJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBpc1JUTCwgaXNWaXNpYmxlLCByZWZsb3dcbn0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyLmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAnbW9kYWwnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5tb2RhbCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOX0RJU01JU1MgPSBga2V5ZG93bi5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfT1BFTiA9ICdtb2RhbC1vcGVuJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfU1RBVElDID0gJ21vZGFsLXN0YXRpYydcblxuY29uc3QgT1BFTl9TRUxFQ1RPUiA9ICcubW9kYWwuc2hvdydcbmNvbnN0IFNFTEVDVE9SX0RJQUxPRyA9ICcubW9kYWwtZGlhbG9nJ1xuY29uc3QgU0VMRUNUT1JfTU9EQUxfQk9EWSA9ICcubW9kYWwtYm9keSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm1vZGFsXCJdJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAgZm9jdXM6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBmb2N1czogJ2Jvb2xlYW4nLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKClcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKClcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKVxuXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuXG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKVxuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTilcblxuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG5cbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KCgpID0+IHRoaXMuX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24gfHwgdGhpcy5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFKVxuXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5faGlkZU1vZGFsKCksIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2lzQW5pbWF0ZWQoKSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX0tFWSlcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2RpYWxvZywgRVZFTlRfS0VZKVxuXG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICBoYW5kbGVVcGRhdGUoKSB7XG4gICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGlzVmlzaWJsZTogQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApLCAvLyAnc3RhdGljJyBvcHRpb24gd2lsbCBiZSB0cmFuc2xhdGVkIHRvIHRydWUsIGFuZCBib29sZWFucyB3aWxsIGtlZXAgdGhlaXIgdmFsdWUsXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICAvLyB0cnkgdG8gYXBwZW5kIGR5bmFtaWMgbW9kYWxcbiAgICBpZiAoIWRvY3VtZW50LmJvZHkuY29udGFpbnModGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJ1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWhpZGRlbicpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnLCB0cnVlKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdyb2xlJywgJ2RpYWxvZycpXG4gICAgdGhpcy5fZWxlbWVudC5zY3JvbGxUb3AgPSAwXG5cbiAgICBjb25zdCBtb2RhbEJvZHkgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX01PREFMX0JPRFksIHRoaXMuX2RpYWxvZylcbiAgICBpZiAobW9kYWxCb2R5KSB7XG4gICAgICBtb2RhbEJvZHkuc2Nyb2xsVG9wID0gMFxuICAgIH1cblxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgdGhpcy5faXNBbmltYXRlZCgpKVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKVxuICAgIH0pXG5cbiAgICBFdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUsICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1Nob3duICYmICF0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgICAgdGhpcy5fYWRqdXN0RGlhbG9nKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAvLyBhIGJhZCB0cmljayB0byBzZWdyZWdhdGUgY2xpY2tzIHRoYXQgbWF5IHN0YXJ0IGluc2lkZSBkaWFsb2cgYnV0IGVuZCBvdXRzaWRlLCBhbmQgYXZvaWQgbGlzdGVuIHRvIHNjcm9sbGJhciBjbGlja3NcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfQ0xJQ0tfRElTTUlTUywgZXZlbnQyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnQgIT09IGV2ZW50LnRhcmdldCB8fCB0aGlzLl9lbGVtZW50ICE9PSBldmVudDIudGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICAgIHRoaXMuX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24oKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIF9oaWRlTW9kYWwoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKVxuICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICB0aGlzLl9iYWNrZHJvcC5oaWRlKCgpID0+IHtcbiAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX09QRU4pXG4gICAgICB0aGlzLl9yZXNldEFkanVzdG1lbnRzKClcbiAgICAgIHRoaXMuX3Njcm9sbEJhci5yZXNldCgpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfSlcbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gIH1cblxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGlzTW9kYWxPdmVyZmxvd2luZyA9IHRoaXMuX2VsZW1lbnQuc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuICAgIGNvbnN0IGluaXRpYWxPdmVyZmxvd1kgPSB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WVxuICAgIC8vIHJldHVybiBpZiB0aGUgZm9sbG93aW5nIGJhY2tncm91bmQgdHJhbnNpdGlvbiBoYXNuJ3QgeWV0IGNvbXBsZXRlZFxuICAgIGlmIChpbml0aWFsT3ZlcmZsb3dZID09PSAnaGlkZGVuJyB8fCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93WSA9ICdoaWRkZW4nXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU1RBVElDKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKVxuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3dZID0gaW5pdGlhbE92ZXJmbG93WVxuICAgICAgfSwgdGhpcy5fZGlhbG9nKVxuICAgIH0sIHRoaXMuX2RpYWxvZylcblxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyBhcmUgdXNlZCB0byBoYW5kbGUgb3ZlcmZsb3dpbmcgbW9kYWxzXG4gICAqL1xuXG4gIF9hZGp1c3REaWFsb2coKSB7XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gdGhpcy5fZWxlbWVudC5zY3JvbGxIZWlnaHQgPiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLl9zY3JvbGxCYXIuZ2V0V2lkdGgoKVxuICAgIGNvbnN0IGlzQm9keU92ZXJmbG93aW5nID0gc2Nyb2xsYmFyV2lkdGggPiAwXG5cbiAgICBpZiAoaXNCb2R5T3ZlcmZsb3dpbmcgJiYgIWlzTW9kYWxPdmVyZmxvd2luZykge1xuICAgICAgY29uc3QgcHJvcGVydHkgPSBpc1JUTCgpID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW3Byb3BlcnR5XSA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cblxuICAgIGlmICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGlzUlRMKCkgPyAncGFkZGluZ1JpZ2h0JyA6ICdwYWRkaW5nTGVmdCdcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbcHJvcGVydHldID0gYCR7c2Nyb2xsYmFyV2lkdGh9cHhgXG4gICAgfVxuICB9XG5cbiAgX3Jlc2V0QWRqdXN0bWVudHMoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcnXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZS5wYWRkaW5nUmlnaHQgPSAnJ1xuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpXG5cbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9TSE9XLCBzaG93RXZlbnQgPT4ge1xuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgLy8gb25seSByZWdpc3RlciBmb2N1cyByZXN0b3JlciBpZiBtb2RhbCB3aWxsIGFjdHVhbGx5IGdldCBzaG93blxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgICAgaWYgKGlzVmlzaWJsZSh0aGlzKSkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIC8vIGF2b2lkIGNvbmZsaWN0IHdoZW4gY2xpY2tpbmcgbW9kYWwgdG9nZ2xlciB3aGlsZSBhbm90aGVyIG9uZSBpcyBvcGVuXG4gIGNvbnN0IGFscmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxyZWFkeU9wZW4pIHtcbiAgICBNb2RhbC5nZXRJbnN0YW5jZShhbHJlYWR5T3BlbikuaGlkZSgpXG4gIH1cblxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgZGF0YS50b2dnbGUodGhpcylcbn0pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKVxuXG4vKipcbiAqIGpRdWVyeVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbClcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wLmpzJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcydcbmltcG9ydCBGb2N1c1RyYXAgZnJvbSAnLi91dGlsL2ZvY3VzdHJhcC5qcydcbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgaXNEaXNhYmxlZCxcbiAgaXNWaXNpYmxlXG59IGZyb20gJy4vdXRpbC9pbmRleC5qcydcbmltcG9ydCBTY3JvbGxCYXJIZWxwZXIgZnJvbSAnLi91dGlsL3Njcm9sbGJhci5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XSU5HID0gJ3Nob3dpbmcnXG5jb25zdCBDTEFTU19OQU1FX0hJRElORyA9ICdoaWRpbmcnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwib2ZmY2FudmFzXCJdJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNjcm9sbDogZmFsc2Vcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGJhY2tkcm9wOiAnKGJvb2xlYW58c3RyaW5nKScsXG4gIGtleWJvYXJkOiAnYm9vbGVhbicsXG4gIHNjcm9sbDogJ2Jvb2xlYW4nXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9iYWNrZHJvcC5zaG93KClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLmhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsIHx8IHRoaXMuX2NvbmZpZy5iYWNrZHJvcCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7IHJlbGF0ZWRUYXJnZXQgfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHRoaXMuX2VsZW1lbnQuYmx1cigpXG4gICAgdGhpcy5faXNTaG93biA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElESU5HKVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsYmFjayA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1csIENMQVNTX05BTUVfSElESU5HKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3JvbGUnKVxuXG4gICAgICBpZiAoIXRoaXMuX2NvbmZpZy5zY3JvbGwpIHtcbiAgICAgICAgbmV3IFNjcm9sbEJhckhlbHBlcigpLnJlc2V0KClcbiAgICAgIH1cblxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGVDYWxsYmFjaywgdGhpcy5fZWxlbWVudCwgdHJ1ZSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fYmFja2Ryb3AuZGlzcG9zZSgpXG4gICAgdGhpcy5fZm9jdXN0cmFwLmRlYWN0aXZhdGUoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfaW5pdGlhbGl6ZUJhY2tEcm9wKCkge1xuICAgIGNvbnN0IGNsaWNrQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfVxuXG4gICAgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgY29uc3QgaXNWaXNpYmxlID0gQm9vbGVhbih0aGlzLl9jb25maWcuYmFja2Ryb3ApXG5cbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZSxcbiAgICAgIGlzQW5pbWF0ZWQ6IHRydWUsXG4gICAgICByb290RWxlbWVudDogdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLFxuICAgICAgY2xpY2tDYWxsYmFjazogaXNWaXNpYmxlID8gY2xpY2tDYWxsYmFjayA6IG51bGxcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOX0RJU01JU1MsIGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREVfUFJFVkVOVEVEKVxuICAgIH0pXG4gIH1cblxuICAvLyBTdGF0aWNcbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpXG5cbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfSElEREVOLCAoKSA9PiB7XG4gICAgLy8gZm9jdXMgb24gdHJpZ2dlciB3aGVuIGl0IGlzIGNsb3NlZFxuICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSlcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIGEgdG9nZ2xlciBvZiBhbiBvZmZjYW52YXMsIHdoaWxlIGFub3RoZXIgaXMgb3BlblxuICBjb25zdCBhbHJlYWR5T3BlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoT1BFTl9TRUxFQ1RPUilcbiAgaWYgKGFscmVhZHlPcGVuICYmIGFscmVhZHlPcGVuICE9PSB0YXJnZXQpIHtcbiAgICBPZmZjYW52YXMuZ2V0SW5zdGFuY2UoYWxyZWFkeU9wZW4pLmhpZGUoKVxuICB9XG5cbiAgY29uc3QgZGF0YSA9IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcbiAgZGF0YS50b2dnbGUodGhpcylcbn0pXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBTZWxlY3RvckVuZ2luZS5maW5kKE9QRU5fU0VMRUNUT1IpKSB7XG4gICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2Uoc2VsZWN0b3IpLnNob3coKVxuICB9XG59KVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9SRVNJWkUsICgpID0+IHtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIFNlbGVjdG9yRW5naW5lLmZpbmQoJ1thcmlhLW1vZGFsXVtjbGFzcyo9c2hvd11bY2xhc3MqPW9mZmNhbnZhcy1dJykpIHtcbiAgICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiAhPT0gJ2ZpeGVkJykge1xuICAgICAgT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCkuaGlkZSgpXG4gICAgfVxuICB9XG59KVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihPZmZjYW52YXMpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKE9mZmNhbnZhcylcblxuZXhwb3J0IGRlZmF1bHQgT2ZmY2FudmFzXG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHV0aWwvc2FuaXRpemVyLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLy8ganMtZG9jcy1zdGFydCBhbGxvdy1saXN0XG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lcblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGQ6IFtdLFxuICBkaXY6IFtdLFxuICBkbDogW10sXG4gIGR0OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn1cbi8vIGpzLWRvY3MtZW5kIGFsbG93LWxpc3RcblxuY29uc3QgdXJpQXR0cmlidXRlcyA9IG5ldyBTZXQoW1xuICAnYmFja2dyb3VuZCcsXG4gICdjaXRlJyxcbiAgJ2hyZWYnLFxuICAnaXRlbXR5cGUnLFxuICAnbG9uZ2Rlc2MnLFxuICAncG9zdGVyJyxcbiAgJ3NyYycsXG4gICd4bGluazpocmVmJ1xuXSlcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIFVSTHMgdGhhdCBhcmUgc2FmZSB3cnQuIFhTUyBpbiBVUkwgbmF2aWdhdGlvblxuICogY29udGV4dHMuXG4gKlxuICogU2hvdXQtb3V0IHRvIEFuZ3VsYXIgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9ibG9iLzE1LjIuOC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50cyNMMzhcbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vYmV0dGVyLXJlZ2V4XG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPyFqYXZhc2NyaXB0OikoPzpbYS16MC05Ky4tXSs6fFteJjovPyNdKig/OlsvPyNdfCQpKS9pXG5cbmNvbnN0IGFsbG93ZWRBdHRyaWJ1dGUgPSAoYXR0cmlidXRlLCBhbGxvd2VkQXR0cmlidXRlTGlzdCkgPT4ge1xuICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKClcblxuICBpZiAoYWxsb3dlZEF0dHJpYnV0ZUxpc3QuaW5jbHVkZXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICBpZiAodXJpQXR0cmlidXRlcy5oYXMoYXR0cmlidXRlTmFtZSkpIHtcbiAgICAgIHJldHVybiBCb29sZWFuKFNBRkVfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gQ2hlY2sgaWYgYSByZWd1bGFyIGV4cHJlc3Npb24gdmFsaWRhdGVzIHRoZSBhdHRyaWJ1dGUuXG4gIHJldHVybiBhbGxvd2VkQXR0cmlidXRlTGlzdC5maWx0ZXIoYXR0cmlidXRlUmVnZXggPT4gYXR0cmlidXRlUmVnZXggaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgLnNvbWUocmVnZXggPT4gcmVnZXgudGVzdChhdHRyaWJ1dGVOYW1lKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRnVuY3Rpb24pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sXG4gIH1cblxuICBpZiAoc2FuaXRpemVGdW5jdGlvbiAmJiB0eXBlb2Ygc2FuaXRpemVGdW5jdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZ1bmN0aW9uKHVuc2FmZUh0bWwpXG4gIH1cblxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpXG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpXG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgZWxlbWVudHMpIHtcbiAgICBjb25zdCBlbGVtZW50TmFtZSA9IGVsZW1lbnQubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFPYmplY3Qua2V5cyhhbGxvd0xpc3QpLmluY2x1ZGVzKGVsZW1lbnROYW1lKSkge1xuICAgICAgZWxlbWVudC5yZW1vdmUoKVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVMaXN0ID0gW10uY29uY2F0KC4uLmVsZW1lbnQuYXR0cmlidXRlcylcbiAgICBjb25zdCBhbGxvd2VkQXR0cmlidXRlcyA9IFtdLmNvbmNhdChhbGxvd0xpc3RbJyonXSB8fCBbXSwgYWxsb3dMaXN0W2VsZW1lbnROYW1lXSB8fCBbXSlcblxuICAgIGZvciAoY29uc3QgYXR0cmlidXRlIG9mIGF0dHJpYnV0ZUxpc3QpIHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVzKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubm9kZU5hbWUpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNyZWF0ZWREb2N1bWVudC5ib2R5LmlubmVySFRNTFxufVxuIiwgIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCB1dGlsL3RlbXBsYXRlLWZhY3RvcnkuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZS5qcydcbmltcG9ydCBDb25maWcgZnJvbSAnLi9jb25maWcuanMnXG5pbXBvcnQgeyBEZWZhdWx0QWxsb3dsaXN0LCBzYW5pdGl6ZUh0bWwgfSBmcm9tICcuL3Nhbml0aXplci5qcydcbmltcG9ydCB7IGV4ZWN1dGUsIGdldEVsZW1lbnQsIGlzRWxlbWVudCB9IGZyb20gJy4vaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdUZW1wbGF0ZUZhY3RvcnknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGFsbG93TGlzdDogRGVmYXVsdEFsbG93bGlzdCxcbiAgY29udGVudDoge30sIC8vIHsgc2VsZWN0b3IgOiB0ZXh0ICwgIHNlbGVjdG9yMiA6IHRleHQyICwgfVxuICBleHRyYUNsYXNzOiAnJyxcbiAgaHRtbDogZmFsc2UsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICB0ZW1wbGF0ZTogJzxkaXY+PC9kaXY+J1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYWxsb3dMaXN0OiAnb2JqZWN0JyxcbiAgY29udGVudDogJ29iamVjdCcsXG4gIGV4dHJhQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGh0bWw6ICdib29sZWFuJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJ1xufVxuXG5jb25zdCBEZWZhdWx0Q29udGVudFR5cGUgPSB7XG4gIGVudHJ5OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9ufG51bGwpJyxcbiAgc2VsZWN0b3I6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBUZW1wbGF0ZUZhY3RvcnkgZXh0ZW5kcyBDb25maWcge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgfVxuXG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcbiAgZ2V0Q29udGVudCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLl9jb25maWcuY29udGVudClcbiAgICAgIC5tYXAoY29uZmlnID0+IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbmZpZykpXG4gICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gIH1cblxuICBoYXNDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldENvbnRlbnQoKS5sZW5ndGggPiAwXG4gIH1cblxuICBjaGFuZ2VDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9jaGVja0NvbnRlbnQoY29udGVudClcbiAgICB0aGlzLl9jb25maWcuY29udGVudCA9IHsgLi4udGhpcy5fY29uZmlnLmNvbnRlbnQsIC4uLmNvbnRlbnQgfVxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICB0b0h0bWwoKSB7XG4gICAgY29uc3QgdGVtcGxhdGVXcmFwcGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICB0ZW1wbGF0ZVdyYXBwZXIuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZSh0aGlzLl9jb25maWcudGVtcGxhdGUpXG5cbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgdGV4dF0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnLmNvbnRlbnQpKSB7XG4gICAgICB0aGlzLl9zZXRDb250ZW50KHRlbXBsYXRlV3JhcHBlciwgdGV4dCwgc2VsZWN0b3IpXG4gICAgfVxuXG4gICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZVdyYXBwZXIuY2hpbGRyZW5bMF1cbiAgICBjb25zdCBleHRyYUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmV4dHJhQ2xhc3MpXG5cbiAgICBpZiAoZXh0cmFDbGFzcykge1xuICAgICAgdGVtcGxhdGUuY2xhc3NMaXN0LmFkZCguLi5leHRyYUNsYXNzLnNwbGl0KCcgJykpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRlbXBsYXRlXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF90eXBlQ2hlY2tDb25maWcoY29uZmlnKSB7XG4gICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fY2hlY2tDb250ZW50KGNvbmZpZy5jb250ZW50KVxuICB9XG5cbiAgX2NoZWNrQ29udGVudChhcmcpIHtcbiAgICBmb3IgKGNvbnN0IFtzZWxlY3RvciwgY29udGVudF0gb2YgT2JqZWN0LmVudHJpZXMoYXJnKSkge1xuICAgICAgc3VwZXIuX3R5cGVDaGVja0NvbmZpZyh7IHNlbGVjdG9yLCBlbnRyeTogY29udGVudCB9LCBEZWZhdWx0Q29udGVudFR5cGUpXG4gICAgfVxuICB9XG5cbiAgX3NldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpXG5cbiAgICBpZiAoIXRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29udGVudCA9IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpXG5cbiAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgIHRlbXBsYXRlRWxlbWVudC5yZW1vdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgdGhpcy5fcHV0RWxlbWVudEluVGVtcGxhdGUoZ2V0RWxlbWVudChjb250ZW50KSwgdGVtcGxhdGVFbGVtZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fbWF5YmVTYW5pdGl6ZShjb250ZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGVtcGxhdGVFbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudFxuICB9XG5cbiAgX21heWJlU2FuaXRpemUoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZSA/IHNhbml0aXplSHRtbChhcmcsIHRoaXMuX2NvbmZpZy5hbGxvd0xpc3QsIHRoaXMuX2NvbmZpZy5zYW5pdGl6ZUZuKSA6IGFyZ1xuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBleGVjdXRlKGFyZywgW3RoaXNdKVxuICB9XG5cbiAgX3B1dEVsZW1lbnRJblRlbXBsYXRlKGVsZW1lbnQsIHRlbXBsYXRlRWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9jb25maWcuaHRtbCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LmlubmVySFRNTCA9ICcnXG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQuYXBwZW5kKGVsZW1lbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0ZW1wbGF0ZUVsZW1lbnQudGV4dENvbnRlbnQgPSBlbGVtZW50LnRleHRDb250ZW50XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVtcGxhdGVGYWN0b3J5XG4iLCAiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwIHRvb2x0aXAuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yLmpzJ1xuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLCBleGVjdXRlLCBmaW5kU2hhZG93Um9vdCwgZ2V0RWxlbWVudCwgZ2V0VUlELCBpc1JUTCwgbm9vcFxufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5pbXBvcnQgeyBEZWZhdWx0QWxsb3dsaXN0IH0gZnJvbSAnLi91dGlsL3Nhbml0aXplci5qcydcbmltcG9ydCBUZW1wbGF0ZUZhY3RvcnkgZnJvbSAnLi91dGlsL3RlbXBsYXRlLWZhY3RvcnkuanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b29sdGlwJ1xuY29uc3QgRElTQUxMT1dFRF9BVFRSSUJVVEVTID0gbmV3IFNldChbJ3Nhbml0aXplJywgJ2FsbG93TGlzdCcsICdzYW5pdGl6ZUZuJ10pXG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJ1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gXG5cbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCdcblxuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3ZlcidcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnXG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJ1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJ1xuXG5jb25zdCBFVkVOVF9ISURFID0gJ2hpZGUnXG5jb25zdCBFVkVOVF9ISURERU4gPSAnaGlkZGVuJ1xuY29uc3QgRVZFTlRfU0hPVyA9ICdzaG93J1xuY29uc3QgRVZFTlRfU0hPV04gPSAnc2hvd24nXG5jb25zdCBFVkVOVF9JTlNFUlRFRCA9ICdpbnNlcnRlZCdcbmNvbnN0IEVWRU5UX0NMSUNLID0gJ2NsaWNrJ1xuY29uc3QgRVZFTlRfRk9DVVNJTiA9ICdmb2N1c2luJ1xuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSAnZm9jdXNvdXQnXG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gJ21vdXNlZW50ZXInXG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gJ21vdXNlbGVhdmUnXG5cbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIGFuaW1hdGlvbjogdHJ1ZSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjb250YWluZXI6IGZhbHNlLFxuICBjdXN0b21DbGFzczogJycsXG4gIGRlbGF5OiAwLFxuICBmYWxsYmFja1BsYWNlbWVudHM6IFsndG9wJywgJ3JpZ2h0JywgJ2JvdHRvbScsICdsZWZ0J10sXG4gIGh0bWw6IGZhbHNlLFxuICBvZmZzZXQ6IFswLCA2XSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBzYW5pdGl6ZTogdHJ1ZSxcbiAgc2FuaXRpemVGbjogbnVsbCxcbiAgc2VsZWN0b3I6IGZhbHNlLFxuICB0ZW1wbGF0ZTogJzxkaXYgY2xhc3M9XCJ0b29sdGlwXCIgcm9sZT1cInRvb2x0aXBcIj4nICtcbiAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwidG9vbHRpcC1hcnJvd1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgdGl0bGU6ICcnLFxuICB0cmlnZ2VyOiAnaG92ZXIgZm9jdXMnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBhbGxvd0xpc3Q6ICdvYmplY3QnLFxuICBhbmltYXRpb246ICdib29sZWFuJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgY3VzdG9tQ2xhc3M6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBodG1sOiAnYm9vbGVhbicsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgcGxhY2VtZW50OiAnKHN0cmluZ3xmdW5jdGlvbiknLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIHNlbGVjdG9yOiAnKHN0cmluZ3xib29sZWFuKScsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZydcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIHN1cGVyKGVsZW1lbnQsIGNvbmZpZylcblxuICAgIC8vIFByaXZhdGVcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlXG4gICAgdGhpcy5fdGltZW91dCA9IDBcbiAgICB0aGlzLl9pc0hvdmVyZWQgPSBudWxsXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIHRoaXMuX3RlbXBsYXRlRmFjdG9yeSA9IG51bGxcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gbnVsbFxuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy50aXAgPSBudWxsXG5cbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2VsZWN0b3IpIHtcbiAgICAgIHRoaXMuX2ZpeFRpdGxlKClcbiAgICB9XG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIGVuYWJsZSgpIHtcbiAgICB0aGlzLl9pc0VuYWJsZWQgPSB0cnVlXG4gIH1cblxuICBkaXNhYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IGZhbHNlXG4gIH1cblxuICB0b2dnbGVFbmFibGVkKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9ICF0aGlzLl9pc0VuYWJsZWRcbiAgfVxuXG4gIHRvZ2dsZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICF0aGlzLl9hY3RpdmVUcmlnZ2VyLmNsaWNrXG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5fbGVhdmUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZW50ZXIoKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX01PREFMKSwgRVZFTlRfTU9EQUxfSElERSwgdGhpcy5faGlkZU1vZGFsSGFuZGxlcilcblxuICAgIGlmICh0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpKVxuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKVxuICAgIH1cblxuICAgIGlmICghKHRoaXMuX2lzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9TSE9XKSlcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBpc0luVGhlRG9tID0gKHNoYWRvd1Jvb3QgfHwgdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuY29udGFpbnModGhpcy5fZWxlbWVudClcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gVE9ETzogdjYgcmVtb3ZlIHRoaXMgb3IgbWFrZSBpdCBvcHRpb25hbFxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuXG4gICAgY29uc3QgdGlwID0gdGhpcy5fZ2V0VGlwRWxlbWVudCgpXG5cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcC5nZXRBdHRyaWJ1dGUoJ2lkJykpXG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQub3duZXJEb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY29udGFpbnModGhpcy50aXApKSB7XG4gICAgICBjb250YWluZXIuYXBwZW5kKHRpcClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0lOU0VSVEVEKSlcbiAgICB9XG5cbiAgICB0aGlzLl9wb3BwZXIgPSB0aGlzLl9jcmVhdGVQb3BwZXIodGlwKVxuXG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIGFkZCBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgdG8gdGhlIGJvZHkncyBpbW1lZGlhdGUgY2hpbGRyZW47XG4gICAgLy8gb25seSBuZWVkZWQgYmVjYXVzZSBvZiBicm9rZW4gZXZlbnQgZGVsZWdhdGlvbiBvbiBpT1NcbiAgICAvLyBodHRwczovL3d3dy5xdWlya3Ntb2RlLm9yZy9ibG9nL2FyY2hpdmVzLzIwMTQvMDIvbW91c2VfZXZlbnRfYnViLmh0bWxcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX1NIT1dOKSlcblxuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5fbGVhdmUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9pc0hvdmVyZWQgPSBmYWxzZVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCB0aGlzLl9pc0FuaW1hdGVkKCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9ISURFKSlcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRpcEVsZW1lbnQoKVxuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlXG4gICAgdGhpcy5faXNIb3ZlcmVkID0gbnVsbCAvLyBpdCBpcyBhIHRyaWNrIHRvIHN1cHBvcnQgbWFudWFsIHRyaWdnZXJpbmdcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgICAgdGhpcy5fZGlzcG9zZVBvcHBlcigpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0hJRERFTikpXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy50aXAsIHRoaXMuX2lzQW5pbWF0ZWQoKSlcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5fZ2V0VGl0bGUoKSlcbiAgfVxuXG4gIF9nZXRUaXBFbGVtZW50KCkge1xuICAgIGlmICghdGhpcy50aXApIHtcbiAgICAgIHRoaXMudGlwID0gdGhpcy5fY3JlYXRlVGlwRWxlbWVudCh0aGlzLl9uZXdDb250ZW50IHx8IHRoaXMuX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRpcFxuICB9XG5cbiAgX2NyZWF0ZVRpcEVsZW1lbnQoY29udGVudCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuX2dldFRlbXBsYXRlRmFjdG9yeShjb250ZW50KS50b0h0bWwoKVxuXG4gICAgLy8gVE9ETzogcmVtb3ZlIHRoaXMgY2hlY2sgaW4gdjZcbiAgICBpZiAoIXRpcCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0ZBREUsIENMQVNTX05BTUVfU0hPVylcbiAgICAvLyBUT0RPOiB2NiB0aGUgZm9sbG93aW5nIGNhbiBiZSBhY2hpZXZlZCB3aXRoIENTUyBvbmx5XG4gICAgdGlwLmNsYXNzTGlzdC5hZGQoYGJzLSR7dGhpcy5jb25zdHJ1Y3Rvci5OQU1FfS1hdXRvYClcblxuICAgIGNvbnN0IHRpcElkID0gZ2V0VUlEKHRoaXMuY29uc3RydWN0b3IuTkFNRSkudG9TdHJpbmcoKVxuXG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZClcblxuICAgIGlmICh0aGlzLl9pc0FuaW1hdGVkKCkpIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICByZXR1cm4gdGlwXG4gIH1cblxuICBzZXRDb250ZW50KGNvbnRlbnQpIHtcbiAgICB0aGlzLl9uZXdDb250ZW50ID0gY29udGVudFxuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBfZ2V0VGVtcGxhdGVGYWN0b3J5KGNvbnRlbnQpIHtcbiAgICBpZiAodGhpcy5fdGVtcGxhdGVGYWN0b3J5KSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkuY2hhbmdlQ29udGVudChjb250ZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl90ZW1wbGF0ZUZhY3RvcnkgPSBuZXcgVGVtcGxhdGVGYWN0b3J5KHtcbiAgICAgICAgLi4udGhpcy5fY29uZmlnLFxuICAgICAgICAvLyB0aGUgYGNvbnRlbnRgIHZhciBoYXMgdG8gYmUgYWZ0ZXIgYHRoaXMuX2NvbmZpZ2BcbiAgICAgICAgLy8gdG8gb3ZlcnJpZGUgY29uZmlnLmNvbnRlbnQgaW4gY2FzZSBvZiBwb3BvdmVyXG4gICAgICAgIGNvbnRlbnQsXG4gICAgICAgIGV4dHJhQ2xhc3M6IHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jdXN0b21DbGFzcylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3RlbXBsYXRlRmFjdG9yeVxuICB9XG5cbiAgX2dldENvbnRlbnRGb3JUZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgW1NFTEVDVE9SX1RPT0xUSVBfSU5ORVJdOiB0aGlzLl9nZXRUaXRsZSgpXG4gICAgfVxuICB9XG5cbiAgX2dldFRpdGxlKCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcudGl0bGUpIHx8IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLW9yaWdpbmFsLXRpdGxlJylcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCkge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmdldE9yQ3JlYXRlSW5zdGFuY2UoZXZlbnQuZGVsZWdhdGVUYXJnZXQsIHRoaXMuX2dldERlbGVnYXRlQ29uZmlnKCkpXG4gIH1cblxuICBfaXNBbmltYXRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29uZmlnLmFuaW1hdGlvbiB8fCAodGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSkpXG4gIH1cblxuICBfaXNTaG93bigpIHtcbiAgICByZXR1cm4gdGhpcy50aXAgJiYgdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIF9jcmVhdGVQb3BwZXIodGlwKSB7XG4gICAgY29uc3QgcGxhY2VtZW50ID0gZXhlY3V0ZSh0aGlzLl9jb25maWcucGxhY2VtZW50LCBbdGhpcywgdGlwLCB0aGlzLl9lbGVtZW50XSlcbiAgICBjb25zdCBhdHRhY2htZW50ID0gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV1cbiAgICByZXR1cm4gUG9wcGVyLmNyZWF0ZVBvcHBlcih0aGlzLl9lbGVtZW50LCB0aXAsIHRoaXMuX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSlcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUludCh2YWx1ZSwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24oYXJnKSB7XG4gICAgcmV0dXJuIGV4ZWN1dGUoYXJnLCBbdGhpcy5fZWxlbWVudF0pXG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByZVNldFBsYWNlbWVudCcsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBwaGFzZTogJ2JlZm9yZU1haW4nLFxuICAgICAgICAgIGZuOiBkYXRhID0+IHtcbiAgICAgICAgICAgIC8vIFByZS1zZXQgUG9wcGVyJ3MgcGxhY2VtZW50IGF0dHJpYnV0ZSBpbiBvcmRlciB0byByZWFkIHRoZSBhcnJvdyBzaXplcyBwcm9wZXJseS5cbiAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgUG9wcGVyIG1peGVzIHVwIHRoZSB3aWR0aCBhbmQgaGVpZ2h0IGRpbWVuc2lvbnMgc2luY2UgdGhlIGluaXRpYWwgYXJyb3cgc3R5bGUgaXMgZm9yIHRvcCBwbGFjZW1lbnRcbiAgICAgICAgICAgIHRoaXMuX2dldFRpcEVsZW1lbnQoKS5zZXRBdHRyaWJ1dGUoJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCcsIGRhdGEuc3RhdGUucGxhY2VtZW50KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAuLi5kZWZhdWx0QnNQb3BwZXJDb25maWcsXG4gICAgICAuLi5leGVjdXRlKHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcsIFtkZWZhdWx0QnNQb3BwZXJDb25maWddKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgnICcpXG5cbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgb2YgdHJpZ2dlcnMpIHtcbiAgICAgIGlmICh0cmlnZ2VyID09PSAnY2xpY2snKSB7XG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLmV2ZW50TmFtZShFVkVOVF9DTElDSyksIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQpXG4gICAgICAgICAgY29udGV4dC50b2dnbGUoKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VFTlRFUikgOlxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTSU4pXG4gICAgICAgIGNvbnN0IGV2ZW50T3V0ID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5ldmVudE5hbWUoRVZFTlRfTU9VU0VMRUFWRSkgOlxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuZXZlbnROYW1lKEVWRU5UX0ZPQ1VTT1VUKVxuXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudEluLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3VzaW4nID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJdID0gdHJ1ZVxuICAgICAgICAgIGNvbnRleHQuX2VudGVyKClcbiAgICAgICAgfSlcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50KVxuICAgICAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbZXZlbnQudHlwZSA9PT0gJ2ZvY3Vzb3V0JyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXSA9XG4gICAgICAgICAgICBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG5cbiAgICAgICAgICBjb250ZXh0Ll9sZWF2ZSgpXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faGlkZU1vZGFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpXG4gIH1cblxuICBfZml4VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuXG4gICAgaWYgKCF0aXRsZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmICF0aGlzLl9lbGVtZW50LnRleHRDb250ZW50LnRyaW0oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCB0aXRsZSlcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScsIHRpdGxlKSAvLyBETyBOT1QgVVNFIElULiBJcyBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCd0aXRsZScpXG4gIH1cblxuICBfZW50ZXIoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSB8fCB0aGlzLl9pc0hvdmVyZWQpIHtcbiAgICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWVcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IHRydWVcblxuICAgIHRoaXMuX3NldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2lzSG92ZXJlZCkge1xuICAgICAgICB0aGlzLnNob3coKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2NvbmZpZy5kZWxheS5zaG93KVxuICB9XG5cbiAgX2xlYXZlKCkge1xuICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzSG92ZXJlZCA9IGZhbHNlXG5cbiAgICB0aGlzLl9zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5faXNIb3ZlcmVkKSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICB9XG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5LmhpZGUpXG4gIH1cblxuICBfc2V0VGltZW91dChoYW5kbGVyLCB0aW1lb3V0KSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoaGFuZGxlciwgdGltZW91dClcbiAgfVxuXG4gIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgIHJldHVybiBPYmplY3QudmFsdWVzKHRoaXMuX2FjdGl2ZVRyaWdnZXIpLmluY2x1ZGVzKHRydWUpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbnN0IGRhdGFBdHRyaWJ1dGVzID0gTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudClcblxuICAgIGZvciAoY29uc3QgZGF0YUF0dHJpYnV0ZSBvZiBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykpIHtcbiAgICAgIGlmIChESVNBTExPV0VEX0FUVFJJQlVURVMuaGFzKGRhdGFBdHRyaWJ1dGUpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhQXR0cmlidXRlc1tkYXRhQXR0cmlidXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLmRhdGFBdHRyaWJ1dGVzLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cbiAgICBjb25maWcgPSB0aGlzLl9tZXJnZUNvbmZpZ09iaihjb25maWcpXG4gICAgY29uZmlnID0gdGhpcy5fY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpXG4gICAgdGhpcy5fdHlwZUNoZWNrQ29uZmlnKGNvbmZpZylcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICBjb25maWcuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogZ2V0RWxlbWVudChjb25maWcuY29udGFpbmVyKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGVsZWdhdGVDb25maWcoKSB7XG4gICAgY29uc3QgY29uZmlnID0ge31cblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdmFsdWUpIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbmZpZy5zZWxlY3RvciA9IGZhbHNlXG4gICAgY29uZmlnLnRyaWdnZXIgPSAnbWFudWFsJ1xuXG4gICAgLy8gSW4gdGhlIGZ1dHVyZSBjYW4gYmUgcmVwbGFjZWQgd2l0aDpcbiAgICAvLyBjb25zdCBrZXlzV2l0aERpZmZlcmVudFZhbHVlcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuX2NvbmZpZykuZmlsdGVyKGVudHJ5ID0+IHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFtlbnRyeVswXV0gIT09IHRoaXMuX2NvbmZpZ1tlbnRyeVswXV0pXG4gICAgLy8gYE9iamVjdC5mcm9tRW50cmllcyhrZXlzV2l0aERpZmZlcmVudFZhbHVlcylgXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2Rpc3Bvc2VQb3BwZXIoKSB7XG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLnRpcCkge1xuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICAgIHRoaXMudGlwID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvb2x0aXAuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBUb29sdGlwIGZyb20gJy4vdG9vbHRpcC5qcydcbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleC5qcydcblxuLyoqXG4gKiBDb25zdGFudHNcbiAqL1xuXG5jb25zdCBOQU1FID0gJ3BvcG92ZXInXG5cbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcidcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBjb250ZW50OiAnJyxcbiAgb2Zmc2V0OiBbMCwgOF0sXG4gIHBsYWNlbWVudDogJ3JpZ2h0JyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArXG4gICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWFycm93XCI+PC9kaXY+JyArXG4gICAgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICtcbiAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PicgK1xuICAgICc8L2Rpdj4nLFxuICB0cmlnZ2VyOiAnY2xpY2snXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKG51bGx8c3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufVxuXG4vKipcbiAqIENsYXNzIGRlZmluaXRpb25cbiAqL1xuXG5jbGFzcyBQb3BvdmVyIGV4dGVuZHMgVG9vbHRpcCB7XG4gIC8vIEdldHRlcnNcbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBPdmVycmlkZXNcbiAgX2lzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpXG4gIH1cblxuICAvLyBQcml2YXRlXG4gIF9nZXRDb250ZW50Rm9yVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtTRUxFQ1RPUl9USVRMRV06IHRoaXMuX2dldFRpdGxlKCksXG4gICAgICBbU0VMRUNUT1JfQ09OVEVOVF06IHRoaXMuX2dldENvbnRlbnQoKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFBvcG92ZXIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpXG5cbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXJcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldEVsZW1lbnQsIGlzRGlzYWJsZWQsIGlzVmlzaWJsZVxufSBmcm9tICcuL3V0aWwvaW5kZXguanMnXG5cbi8qKlxuICogQ29uc3RhbnRzXG4gKi9cblxuY29uc3QgTkFNRSA9ICdzY3JvbGxzcHknXG5jb25zdCBEQVRBX0tFWSA9ICdicy5zY3JvbGxzcHknXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDSyA9IGBjbGljayR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNID0gJ2Ryb3Bkb3duLWl0ZW0nXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfU1BZID0gJ1tkYXRhLWJzLXNweT1cInNjcm9sbFwiXSdcbmNvbnN0IFNFTEVDVE9SX1RBUkdFVF9MSU5LUyA9ICdbaHJlZl0nXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCdcbmNvbnN0IFNFTEVDVE9SX05BVl9MSU5LUyA9ICcubmF2LWxpbmsnXG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElOS19JVEVNUyA9IGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTkFWX0lURU1TfSA+ICR7U0VMRUNUT1JfTkFWX0xJTktTfSwgJHtTRUxFQ1RPUl9MSVNUX0lURU1TfWBcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOID0gJy5kcm9wZG93bidcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBvZmZzZXQ6IG51bGwsIC8vIFRPRE86IHY2IEBkZXByZWNhdGVkLCBrZWVwIGl0IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSByZWFzb25zXG4gIHJvb3RNYXJnaW46ICcwcHggMHB4IC0yNSUnLFxuICBzbW9vdGhTY3JvbGw6IGZhbHNlLFxuICB0YXJnZXQ6IG51bGwsXG4gIHRocmVzaG9sZDogWzAuMSwgMC41LCAxXVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgb2Zmc2V0OiAnKG51bWJlcnxudWxsKScsIC8vIFRPRE8gdjYgQGRlcHJlY2F0ZWQsIGtlZXAgaXQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHJlYXNvbnNcbiAgcm9vdE1hcmdpbjogJ3N0cmluZycsXG4gIHNtb290aFNjcm9sbDogJ2Jvb2xlYW4nLFxuICB0YXJnZXQ6ICdlbGVtZW50JyxcbiAgdGhyZXNob2xkOiAnYXJyYXknXG59XG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFNjcm9sbFNweSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50LCBjb25maWcpXG5cbiAgICAvLyB0aGlzLl9lbGVtZW50IGlzIHRoZSBvYnNlcnZhYmxlc0NvbnRhaW5lciBhbmQgY29uZmlnLnRhcmdldCB0aGUgbWVudSBsaW5rcyB3cmFwcGVyXG4gICAgdGhpcy5fdGFyZ2V0TGlua3MgPSBuZXcgTWFwKClcbiAgICB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMgPSBuZXcgTWFwKClcbiAgICB0aGlzLl9yb290RWxlbWVudCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fZWxlbWVudCkub3ZlcmZsb3dZID09PSAndmlzaWJsZScgPyBudWxsIDogdGhpcy5fZWxlbWVudFxuICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGxcbiAgICB0aGlzLl9vYnNlcnZlciA9IG51bGxcbiAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEgPSB7XG4gICAgICB2aXNpYmxlRW50cnlUb3A6IDAsXG4gICAgICBwYXJlbnRTY3JvbGxUb3A6IDBcbiAgICB9XG4gICAgdGhpcy5yZWZyZXNoKCkgLy8gaW5pdGlhbGl6ZVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICByZWZyZXNoKCkge1xuICAgIHRoaXMuX2luaXRpYWxpemVUYXJnZXRzQW5kT2JzZXJ2YWJsZXMoKVxuICAgIHRoaXMuX21heWJlRW5hYmxlU21vb3RoU2Nyb2xsKClcblxuICAgIGlmICh0aGlzLl9vYnNlcnZlcikge1xuICAgICAgdGhpcy5fb2JzZXJ2ZXIuZGlzY29ubmVjdCgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX29ic2VydmVyID0gdGhpcy5fZ2V0TmV3T2JzZXJ2ZXIoKVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiB0aGlzLl9vYnNlcnZhYmxlU2VjdGlvbnMudmFsdWVzKCkpIHtcbiAgICAgIHRoaXMuX29ic2VydmVyLm9ic2VydmUoc2VjdGlvbilcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIHRoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfY29uZmlnQWZ0ZXJNZXJnZShjb25maWcpIHtcbiAgICAvLyBUT0RPOiBvbiB2NiB0YXJnZXQgc2hvdWxkIGJlIGdpdmVuIGV4cGxpY2l0bHkgJiByZW1vdmUgdGhlIHt0YXJnZXQ6ICdzcy10YXJnZXQnfSBjYXNlXG4gICAgY29uZmlnLnRhcmdldCA9IGdldEVsZW1lbnQoY29uZmlnLnRhcmdldCkgfHwgZG9jdW1lbnQuYm9keVxuXG4gICAgLy8gVE9ETzogdjYgT25seSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucy4gVXNlIHJvb3RNYXJnaW4gb25seVxuICAgIGNvbmZpZy5yb290TWFyZ2luID0gY29uZmlnLm9mZnNldCA/IGAke2NvbmZpZy5vZmZzZXR9cHggMHB4IC0zMCVgIDogY29uZmlnLnJvb3RNYXJnaW5cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRocmVzaG9sZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbmZpZy50aHJlc2hvbGQgPSBjb25maWcudGhyZXNob2xkLnNwbGl0KCcsJykubWFwKHZhbHVlID0+IE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuc21vb3RoU2Nyb2xsKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB1bnJlZ2lzdGVyIGFueSBwcmV2aW91cyBsaXN0ZW5lcnNcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2NvbmZpZy50YXJnZXQsIEVWRU5UX0NMSUNLLCBTRUxFQ1RPUl9UQVJHRVRfTElOS1MsIGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLmdldChldmVudC50YXJnZXQuaGFzaClcbiAgICAgIGlmIChvYnNlcnZhYmxlU2VjdGlvbikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgIGNvbnN0IHJvb3QgPSB0aGlzLl9yb290RWxlbWVudCB8fCB3aW5kb3dcbiAgICAgICAgY29uc3QgaGVpZ2h0ID0gb2JzZXJ2YWJsZVNlY3Rpb24ub2Zmc2V0VG9wIC0gdGhpcy5fZWxlbWVudC5vZmZzZXRUb3BcbiAgICAgICAgaWYgKHJvb3Quc2Nyb2xsVG8pIHtcbiAgICAgICAgICByb290LnNjcm9sbFRvKHsgdG9wOiBoZWlnaHQsIGJlaGF2aW9yOiAnc21vb3RoJyB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ2hyb21lIDYwIGRvZXNuJ3Qgc3VwcG9ydCBgc2Nyb2xsVG9gXG4gICAgICAgIHJvb3Quc2Nyb2xsVG9wID0gaGVpZ2h0XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIF9nZXROZXdPYnNlcnZlcigpIHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcm9vdDogdGhpcy5fcm9vdEVsZW1lbnQsXG4gICAgICB0aHJlc2hvbGQ6IHRoaXMuX2NvbmZpZy50aHJlc2hvbGQsXG4gICAgICByb290TWFyZ2luOiB0aGlzLl9jb25maWcucm9vdE1hcmdpblxuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLl9vYnNlcnZlckNhbGxiYWNrKGVudHJpZXMpLCBvcHRpb25zKVxuICB9XG5cbiAgLy8gVGhlIGxvZ2ljIG9mIHNlbGVjdGlvblxuICBfb2JzZXJ2ZXJDYWxsYmFjayhlbnRyaWVzKSB7XG4gICAgY29uc3QgdGFyZ2V0RWxlbWVudCA9IGVudHJ5ID0+IHRoaXMuX3RhcmdldExpbmtzLmdldChgIyR7ZW50cnkudGFyZ2V0LmlkfWApXG4gICAgY29uc3QgYWN0aXZhdGUgPSBlbnRyeSA9PiB7XG4gICAgICB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcFxuICAgICAgdGhpcy5fcHJvY2Vzcyh0YXJnZXRFbGVtZW50KGVudHJ5KSlcbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnRTY3JvbGxUb3AgPSAodGhpcy5fcm9vdEVsZW1lbnQgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KS5zY3JvbGxUb3BcbiAgICBjb25zdCB1c2VyU2Nyb2xsc0Rvd24gPSBwYXJlbnRTY3JvbGxUb3AgPj0gdGhpcy5fcHJldmlvdXNTY3JvbGxEYXRhLnBhcmVudFNjcm9sbFRvcFxuICAgIHRoaXMuX3ByZXZpb3VzU2Nyb2xsRGF0YS5wYXJlbnRTY3JvbGxUb3AgPSBwYXJlbnRTY3JvbGxUb3BcblxuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgaWYgKCFlbnRyeS5pc0ludGVyc2VjdGluZykge1xuICAgICAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgICAgIHRoaXMuX2NsZWFyQWN0aXZlQ2xhc3ModGFyZ2V0RWxlbWVudChlbnRyeSkpXG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzID0gZW50cnkudGFyZ2V0Lm9mZnNldFRvcCA+PSB0aGlzLl9wcmV2aW91c1Njcm9sbERhdGEudmlzaWJsZUVudHJ5VG9wXG4gICAgICAvLyBpZiB3ZSBhcmUgc2Nyb2xsaW5nIGRvd24sIHBpY2sgdGhlIGJpZ2dlciBvZmZzZXRUb3BcbiAgICAgIGlmICh1c2VyU2Nyb2xsc0Rvd24gJiYgZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KVxuICAgICAgICAvLyBpZiBwYXJlbnQgaXNuJ3Qgc2Nyb2xsZWQsIGxldCdzIGtlZXAgdGhlIGZpcnN0IHZpc2libGUgaXRlbSwgYnJlYWtpbmcgdGhlIGl0ZXJhdGlvblxuICAgICAgICBpZiAoIXBhcmVudFNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gaWYgd2UgYXJlIHNjcm9sbGluZyB1cCwgcGljayB0aGUgc21hbGxlc3Qgb2Zmc2V0VG9wXG4gICAgICBpZiAoIXVzZXJTY3JvbGxzRG93biAmJiAhZW50cnlJc0xvd2VyVGhhblByZXZpb3VzKSB7XG4gICAgICAgIGFjdGl2YXRlKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9pbml0aWFsaXplVGFyZ2V0c0FuZE9ic2VydmFibGVzKCkge1xuICAgIHRoaXMuX3RhcmdldExpbmtzID0gbmV3IE1hcCgpXG4gICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zID0gbmV3IE1hcCgpXG5cbiAgICBjb25zdCB0YXJnZXRMaW5rcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfVEFSR0VUX0xJTktTLCB0aGlzLl9jb25maWcudGFyZ2V0KVxuXG4gICAgZm9yIChjb25zdCBhbmNob3Igb2YgdGFyZ2V0TGlua3MpIHtcbiAgICAgIC8vIGVuc3VyZSB0aGF0IHRoZSBhbmNob3IgaGFzIGFuIGlkIGFuZCBpcyBub3QgZGlzYWJsZWRcbiAgICAgIGlmICghYW5jaG9yLmhhc2ggfHwgaXNEaXNhYmxlZChhbmNob3IpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9ic2VydmFibGVTZWN0aW9uID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShkZWNvZGVVUkkoYW5jaG9yLmhhc2gpLCB0aGlzLl9lbGVtZW50KVxuXG4gICAgICAvLyBlbnN1cmUgdGhhdCB0aGUgb2JzZXJ2YWJsZVNlY3Rpb24gZXhpc3RzICYgaXMgdmlzaWJsZVxuICAgICAgaWYgKGlzVmlzaWJsZShvYnNlcnZhYmxlU2VjdGlvbikpIHtcbiAgICAgICAgdGhpcy5fdGFyZ2V0TGlua3Muc2V0KGRlY29kZVVSSShhbmNob3IuaGFzaCksIGFuY2hvcilcbiAgICAgICAgdGhpcy5fb2JzZXJ2YWJsZVNlY3Rpb25zLnNldChhbmNob3IuaGFzaCwgb2JzZXJ2YWJsZVNlY3Rpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3Byb2Nlc3ModGFyZ2V0KSB7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZVRhcmdldCA9PT0gdGFyZ2V0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhckFjdGl2ZUNsYXNzKHRoaXMuX2NvbmZpZy50YXJnZXQpXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG4gICAgdGFyZ2V0LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgdGhpcy5fYWN0aXZhdGVQYXJlbnRzKHRhcmdldClcblxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0FDVElWQVRFLCB7IHJlbGF0ZWRUYXJnZXQ6IHRhcmdldCB9KVxuICB9XG5cbiAgX2FjdGl2YXRlUGFyZW50cyh0YXJnZXQpIHtcbiAgICAvLyBBY3RpdmF0ZSBkcm9wZG93biBwYXJlbnRzXG4gICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNKSkge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUsIHRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSlcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IGxpc3RHcm91cCBvZiBTZWxlY3RvckVuZ2luZS5wYXJlbnRzKHRhcmdldCwgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApKSB7XG4gICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAvLyBXaXRoIGJvdGggPHVsPiBhbmQgPG5hdj4gbWFya3VwIGEgcGFyZW50IGlzIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIGFueSBuYXYgYW5jZXN0b3JcbiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBTZWxlY3RvckVuZ2luZS5wcmV2KGxpc3RHcm91cCwgU0VMRUNUT1JfTElOS19JVEVNUykpIHtcbiAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9jbGVhckFjdGl2ZUNsYXNzKHBhcmVudCkge1xuICAgIHBhcmVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgY29uc3QgYWN0aXZlTm9kZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGAke1NFTEVDVE9SX1RBUkdFVF9MSU5LU30uJHtDTEFTU19OQU1FX0FDVElWRX1gLCBwYXJlbnQpXG4gICAgZm9yIChjb25zdCBub2RlIG9mIGFjdGl2ZU5vZGVzKSB7XG4gICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBmb3IgKGNvbnN0IHNweSBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKSkge1xuICAgIFNjcm9sbFNweS5nZXRPckNyZWF0ZUluc3RhbmNlKHNweSlcbiAgfVxufSlcblxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oU2Nyb2xsU3B5KVxuXG5leHBvcnQgZGVmYXVsdCBTY3JvbGxTcHlcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdGFiLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudC5qcydcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlci5qcydcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMnXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4sIGdldE5leHRBY3RpdmVFbGVtZW50LCBpc0Rpc2FibGVkIH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndGFiJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMudGFiJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX1gXG5cbmNvbnN0IEFSUk9XX0xFRlRfS0VZID0gJ0Fycm93TGVmdCdcbmNvbnN0IEFSUk9XX1JJR0hUX0tFWSA9ICdBcnJvd1JpZ2h0J1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnXG5jb25zdCBBUlJPV19ET1dOX0tFWSA9ICdBcnJvd0Rvd24nXG5jb25zdCBIT01FX0tFWSA9ICdIb21lJ1xuY29uc3QgRU5EX0tFWSA9ICdFbmQnXG5cbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSdcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19EUk9QRE9XTiA9ICdkcm9wZG93bidcblxuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9NRU5VID0gJy5kcm9wZG93bi1tZW51J1xuY29uc3QgTk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9IGA6bm90KCR7U0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSlgXG5cbmNvbnN0IFNFTEVDVE9SX1RBQl9QQU5FTCA9ICcubGlzdC1ncm91cCwgLm5hdiwgW3JvbGU9XCJ0YWJsaXN0XCJdJ1xuY29uc3QgU0VMRUNUT1JfT1VURVIgPSAnLm5hdi1pdGVtLCAubGlzdC1ncm91cC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfSU5ORVIgPSBgLm5hdi1saW5rJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfSwgLmxpc3QtZ3JvdXAtaXRlbSR7Tk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRX0sIFtyb2xlPVwidGFiXCJdJHtOT1RfU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFfWBcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXScgLy8gVE9ETzogY291bGQgb25seSBiZSBgdGFiYCBpbiB2NlxuY29uc3QgU0VMRUNUT1JfSU5ORVJfRUxFTSA9IGAke1NFTEVDVE9SX0lOTkVSfSwgJHtTRUxFQ1RPUl9EQVRBX1RPR0dMRX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSA9IGAuJHtDTEFTU19OQU1FX0FDVElWRX1bZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIC4ke0NMQVNTX05BTUVfQUNUSVZFfVtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl1gXG5cbi8qKlxuICogQ2xhc3MgZGVmaW5pdGlvblxuICovXG5cbmNsYXNzIFRhYiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgc3VwZXIoZWxlbWVudClcbiAgICB0aGlzLl9wYXJlbnQgPSB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfVEFCX1BBTkVMKVxuXG4gICAgaWYgKCF0aGlzLl9wYXJlbnQpIHtcbiAgICAgIHJldHVyblxuICAgICAgLy8gVE9ETzogc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBpbiB2NlxuICAgICAgLy8gdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtlbGVtZW50Lm91dGVySFRNTH0gaGFzIG5vdCBhIHZhbGlkIHBhcmVudCAke1NFTEVDVE9SX0lOTkVSX0VMRU19YClcbiAgICB9XG5cbiAgICAvLyBTZXQgdXAgaW5pdGlhbCBhcmlhIGF0dHJpYnV0ZXNcbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlcyh0aGlzLl9wYXJlbnQsIHRoaXMuX2dldENoaWxkcmVuKCkpXG5cbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG4gIHNob3coKSB7IC8vIFNob3dzIHRoaXMgZWxlbSBhbmQgZGVhY3RpdmF0ZSB0aGUgYWN0aXZlIHNpYmxpbmcgaWYgZXhpc3RzXG4gICAgY29uc3QgaW5uZXJFbGVtID0gdGhpcy5fZWxlbWVudFxuICAgIGlmICh0aGlzLl9lbGVtSXNBY3RpdmUoaW5uZXJFbGVtKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gU2VhcmNoIGZvciBhY3RpdmUgdGFiIG9uIHNhbWUgcGFyZW50IHRvIGRlYWN0aXZhdGUgaXRcbiAgICBjb25zdCBhY3RpdmUgPSB0aGlzLl9nZXRBY3RpdmVFbGVtKClcblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IGFjdGl2ZSA/XG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihhY3RpdmUsIEVWRU5UX0hJREUsIHsgcmVsYXRlZFRhcmdldDogaW5uZXJFbGVtIH0pIDpcbiAgICAgIG51bGxcblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKGlubmVyRWxlbSwgRVZFTlRfU0hPVywgeyByZWxhdGVkVGFyZ2V0OiBhY3RpdmUgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAoaGlkZUV2ZW50ICYmIGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZGVhY3RpdmF0ZShhY3RpdmUsIGlubmVyRWxlbSlcbiAgICB0aGlzLl9hY3RpdmF0ZShpbm5lckVsZW0sIGFjdGl2ZSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2FjdGl2YXRlKGVsZW1lbnQsIHJlbGF0ZWRFbGVtKSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICB0aGlzLl9hY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKSAvLyBTZWFyY2ggYW5kIGFjdGl2YXRlL3Nob3cgdGhlIHByb3BlciBzZWN0aW9uXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4JylcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSlcbiAgICAgIHRoaXMuX3RvZ2dsZURyb3BEb3duKGVsZW1lbnQsIHRydWUpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcihlbGVtZW50LCBFVkVOVF9TSE9XTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuICB9XG5cbiAgX2RlYWN0aXZhdGUoZWxlbWVudCwgcmVsYXRlZEVsZW0pIHtcbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICBlbGVtZW50LmJsdXIoKVxuXG4gICAgdGhpcy5fZGVhY3RpdmF0ZShTZWxlY3RvckVuZ2luZS5nZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpKSAvLyBTZWFyY2ggYW5kIGRlYWN0aXZhdGUgdGhlIHNob3duIHNlY3Rpb24gdG9vXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmIChlbGVtZW50LmdldEF0dHJpYnV0ZSgncm9sZScpICE9PSAndGFiJykge1xuICAgICAgICBlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSlcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpXG4gICAgICB0aGlzLl90b2dnbGVEcm9wRG93bihlbGVtZW50LCBmYWxzZSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKGVsZW1lbnQsIEVWRU5UX0hJRERFTiwgeyByZWxhdGVkVGFyZ2V0OiByZWxhdGVkRWxlbSB9KVxuICAgIH1cblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIGVsZW1lbnQsIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSkpXG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICghKFtBUlJPV19MRUZUX0tFWSwgQVJST1dfUklHSFRfS0VZLCBBUlJPV19VUF9LRVksIEFSUk9XX0RPV05fS0VZLCBIT01FX0tFWSwgRU5EX0tFWV0uaW5jbHVkZXMoZXZlbnQua2V5KSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpLy8gc3RvcFByb3BhZ2F0aW9uL3ByZXZlbnREZWZhdWx0IGJvdGggYWRkZWQgdG8gc3VwcG9ydCB1cC9kb3duIGtleXMgd2l0aG91dCBzY3JvbGxpbmcgdGhlIHBhZ2VcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IHRoaXMuX2dldENoaWxkcmVuKCkuZmlsdGVyKGVsZW1lbnQgPT4gIWlzRGlzYWJsZWQoZWxlbWVudCkpXG4gICAgbGV0IG5leHRBY3RpdmVFbGVtZW50XG5cbiAgICBpZiAoW0hPTUVfS0VZLCBFTkRfS0VZXS5pbmNsdWRlcyhldmVudC5rZXkpKSB7XG4gICAgICBuZXh0QWN0aXZlRWxlbWVudCA9IGNoaWxkcmVuW2V2ZW50LmtleSA9PT0gSE9NRV9LRVkgPyAwIDogY2hpbGRyZW4ubGVuZ3RoIC0gMV1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXNOZXh0ID0gW0FSUk9XX1JJR0hUX0tFWSwgQVJST1dfRE9XTl9LRVldLmluY2x1ZGVzKGV2ZW50LmtleSlcbiAgICAgIG5leHRBY3RpdmVFbGVtZW50ID0gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoY2hpbGRyZW4sIGV2ZW50LnRhcmdldCwgaXNOZXh0LCB0cnVlKVxuICAgIH1cblxuICAgIGlmIChuZXh0QWN0aXZlRWxlbWVudCkge1xuICAgICAgbmV4dEFjdGl2ZUVsZW1lbnQuZm9jdXMoeyBwcmV2ZW50U2Nyb2xsOiB0cnVlIH0pXG4gICAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShuZXh0QWN0aXZlRWxlbWVudCkuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgX2dldENoaWxkcmVuKCkgeyAvLyBjb2xsZWN0aW9uIG9mIGlubmVyIGVsZW1lbnRzXG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSU5ORVJfRUxFTSwgdGhpcy5fcGFyZW50KVxuICB9XG5cbiAgX2dldEFjdGl2ZUVsZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2dldENoaWxkcmVuKCkuZmluZChjaGlsZCA9PiB0aGlzLl9lbGVtSXNBY3RpdmUoY2hpbGQpKSB8fCBudWxsXG4gIH1cblxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXMocGFyZW50LCBjaGlsZHJlbikge1xuICAgIHRoaXMuX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKHBhcmVudCwgJ3JvbGUnLCAndGFibGlzdCcpXG5cbiAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG4gICAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uQ2hpbGQoY2hpbGQpXG4gICAgfVxuICB9XG5cbiAgX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZChjaGlsZCkge1xuICAgIGNoaWxkID0gdGhpcy5fZ2V0SW5uZXJFbGVtZW50KGNoaWxkKVxuICAgIGNvbnN0IGlzQWN0aXZlID0gdGhpcy5fZWxlbUlzQWN0aXZlKGNoaWxkKVxuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChjaGlsZClcbiAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBpc0FjdGl2ZSlcblxuICAgIGlmIChvdXRlckVsZW0gIT09IGNoaWxkKSB7XG4gICAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyhvdXRlckVsZW0sICdyb2xlJywgJ3ByZXNlbnRhdGlvbicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0FjdGl2ZSkge1xuICAgICAgY2hpbGQuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsICctMScpXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMoY2hpbGQsICdyb2xlJywgJ3RhYicpXG5cbiAgICAvLyBzZXQgYXR0cmlidXRlcyB0byB0aGUgcmVsYXRlZCBwYW5lbCB0b29cbiAgICB0aGlzLl9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwoY2hpbGQpXG4gIH1cblxuICBfc2V0SW5pdGlhbEF0dHJpYnV0ZXNPblRhcmdldFBhbmVsKGNoaWxkKSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gU2VsZWN0b3JFbmdpbmUuZ2V0RWxlbWVudEZyb21TZWxlY3RvcihjaGlsZClcblxuICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9zZXRBdHRyaWJ1dGVJZk5vdEV4aXN0cyh0YXJnZXQsICdyb2xlJywgJ3RhYnBhbmVsJylcblxuICAgIGlmIChjaGlsZC5pZCkge1xuICAgICAgdGhpcy5fc2V0QXR0cmlidXRlSWZOb3RFeGlzdHModGFyZ2V0LCAnYXJpYS1sYWJlbGxlZGJ5JywgYCR7Y2hpbGQuaWR9YClcbiAgICB9XG4gIH1cblxuICBfdG9nZ2xlRHJvcERvd24oZWxlbWVudCwgb3Blbikge1xuICAgIGNvbnN0IG91dGVyRWxlbSA9IHRoaXMuX2dldE91dGVyRWxlbWVudChlbGVtZW50KVxuICAgIGlmICghb3V0ZXJFbGVtLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19EUk9QRE9XTikpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRvZ2dsZSA9IChzZWxlY3RvciwgY2xhc3NOYW1lKSA9PiB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3Rvciwgb3V0ZXJFbGVtKVxuICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKGNsYXNzTmFtZSwgb3BlbilcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBDTEFTU19OQU1FX0FDVElWRSlcbiAgICB0b2dnbGUoU0VMRUNUT1JfRFJPUERPV05fTUVOVSwgQ0xBU1NfTkFNRV9TSE9XKVxuICAgIG91dGVyRWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBvcGVuKVxuICB9XG5cbiAgX3NldEF0dHJpYnV0ZUlmTm90RXhpc3RzKGVsZW1lbnQsIGF0dHJpYnV0ZSwgdmFsdWUpIHtcbiAgICBpZiAoIWVsZW1lbnQuaGFzQXR0cmlidXRlKGF0dHJpYnV0ZSkpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSwgdmFsdWUpXG4gICAgfVxuICB9XG5cbiAgX2VsZW1Jc0FjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKVxuICB9XG5cbiAgLy8gVHJ5IHRvIGdldCB0aGUgaW5uZXIgZWxlbWVudCAodXN1YWxseSB0aGUgLm5hdi1saW5rKVxuICBfZ2V0SW5uZXJFbGVtZW50KGVsZW0pIHtcbiAgICByZXR1cm4gZWxlbS5tYXRjaGVzKFNFTEVDVE9SX0lOTkVSX0VMRU0pID8gZWxlbSA6IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ORVJfRUxFTSwgZWxlbSlcbiAgfVxuXG4gIC8vIFRyeSB0byBnZXQgdGhlIG91dGVyIGVsZW1lbnQgKHVzdWFsbHkgdGhlIC5uYXYtaXRlbSlcbiAgX2dldE91dGVyRWxlbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGVsZW0uY2xvc2VzdChTRUxFQ1RPUl9PVVRFUikgfHwgZWxlbVxuICB9XG5cbiAgLy8gU3RhdGljXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVGFiLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YVtjb25maWddID09PSB1bmRlZmluZWQgfHwgY29uZmlnLnN0YXJ0c1dpdGgoJ18nKSB8fCBjb25maWcgPT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBEYXRhIEFQSSBpbXBsZW1lbnRhdGlvblxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuXG4gIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS5zaG93KClcbn0pXG5cbi8qKlxuICogSW5pdGlhbGl6ZSBvbiBmb2N1c1xuICovXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFX0FDVElWRSkpIHtcbiAgICBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50KVxuICB9XG59KVxuLyoqXG4gKiBqUXVlcnlcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oVGFiKVxuXG5leHBvcnQgZGVmYXVsdCBUYWJcbiIsICIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgdG9hc3QuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50LmpzJ1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyLmpzJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcydcbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiwgcmVmbG93IH0gZnJvbSAnLi91dGlsL2luZGV4LmpzJ1xuXG4vKipcbiAqIENvbnN0YW50c1xuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnXG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZydcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn1cblxuLyoqXG4gKiBDbGFzcyBkZWZpbml0aW9uXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuICBzaG93KCkge1xuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1cpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmFuaW1hdGlvbikge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcblxuICAgICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0hJREUpIC8vIEBkZXByZWNhdGVkXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVywgQ0xBU1NfTkFNRV9TSE9XSU5HKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORywgQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLmlzU2hvd24oKSkge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGlzU2hvd24oKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KVxuICB9XG5cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6IHtcbiAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnZm9jdXNpbic6XG4gICAgICBjYXNlICdmb2N1c291dCc6IHtcbiAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc0ludGVyYWN0aW5nKSB7XG4gICAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBldmVudC5yZWxhdGVkVGFyZ2V0XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQgPT09IG5leHRFbGVtZW50IHx8IHRoaXMuX2VsZW1lbnQuY29udGFpbnMobmV4dEVsZW1lbnQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpXG4gIH1cblxuICBfc2V0TGlzdGVuZXJzKCkge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9WRVIsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9NT1VTRU9VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgfVxuXG4gIF9jbGVhclRpbWVvdXQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgfVxuXG4gIC8vIFN0YXRpY1xuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIERhdGEgQVBJIGltcGxlbWVudGF0aW9uXG4gKi9cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpXG5cbi8qKlxuICogalF1ZXJ5XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIlxuXG4kKGZ1bmN0aW9uICgpIHtcbiAgJChcInNlbGVjdC50cmVlXCIpLmNoYW5nZShmdW5jdGlvbiAoKSB7XG4gICAgZG9jdW1lbnQubG9jYXRpb24gPSB0aGlzLnZhbHVlO1xuICB9KTtcbn0pO1xuIiwgImltcG9ydCAkIGZyb20gXCJqcXVlcnlcIjtcbmltcG9ydCBrbXhfY29sb3JzIGZyb20gXCIuL2tteF9jb2xvcnNcIjtcblxuZnVuY3Rpb24gZ2V0UmFuZG9tSW50KG1heCkge1xuICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogbWF4KTtcbn1cblxuJChmdW5jdGlvbigpIHtcbiAgc2V0SW50ZXJ2YWwoZnVuY3Rpb24oKSB7XG4gICAgY29uc3QgaSA9IGdldFJhbmRvbUludChrbXhfY29sb3JzLmluZGV4Lmxlbmd0aCk7XG4gICAgY29uc3QgbmFtZSA9IGtteF9jb2xvcnMuaW5kZXhbaV07XG4gICAgY29uc3QgY29sb3IgPSBrbXhfY29sb3JzW25hbWVdO1xuICAgIGNvbnN0IHggPSAoZ2V0UmFuZG9tSW50KDk5KSAtIDQ4KSAqIDAuMDAyO1xuICAgICQoXCJhXCIpLmNzcyhcInRleHQtc2hhZG93XCIsIFwiMCAwIDBcIik7XG4gICAgJChcImE6aG92ZXJcIikuY3NzKFwidGV4dC1zaGFkb3dcIiwgeCArIFwiZW0gMCAwIFwiICsgY29sb3IpO1xuICB9LCAyMDApO1xufSk7XG4iLCAiY29uc3Qga214X2NvbG9ycyA9IHtcbiAgXCJrbXgtYmxhY2tcIjogICBcIiMxZTFmMWRcIixcbiAgXCJrbXgtYmx1ZVwiOiAgICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTFcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTJcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJrbXgtYmx1ZTNcIjogICBcIiM1YTYwZjlcIixcbiAgXCJrbXgtYmx1ZTRcIjogICBcIiM2ZjcyZjlcIixcbiAgXCJrbXgtYmx1ZTVcIjogICBcIiM5Yzk5ZmRcIixcbiAgXCJpbmRleFwiOiBbXG4gICAgXCJrbXgtYmxhY2tcIixcbiAgICBcImtteC1ibHVlXCIsXG4gICAgXCJrbXgtYmx1ZTFcIixcbiAgICBcImtteC1ibHVlMlwiLFxuICAgIFwia214LWJsdWUzXCIsXG4gICAgXCJrbXgtYmx1ZTRcIixcbiAgICBcImtteC1ibHVlNVwiLFxuICAgIFwia214LWN5YW5cIixcbiAgICBcImtteC1jeWFuMVwiLFxuICAgIFwia214LWdyZWVuXCIsXG4gICAgXCJrbXgtZ3JlZW4xXCIsXG4gICAgXCJrbXgtb3JhbmdlXCIsXG4gICAgXCJrbXgtb3JhbmdlMVwiLFxuICAgIFwia214LW9yYW5nZTJcIixcbiAgICBcImtteC1waW5rXCIsXG4gICAgXCJrbXgtd2hpdGVcIixcbiAgICBcImtteC13aGl0ZTFcIixcbiAgICBcImtteC13aGl0ZTJcIixcbiAgICBcImtteC15ZWxsb3dcIixcbiAgICBcImtteC15ZWxsb3cxXCIsXG4gICAgXCJrbXgteWVsbG93MlwiLFxuICAgIFwia214LXllbGxvdzNcIlxuICBdLFxuICBcImtteC1jeWFuXCI6ICAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1jeWFuMVwiOiAgIFwiI2Q0ZjNmNlwiLFxuICBcImtteC1ncmVlblwiOiAgIFwiI2M0ZWQzYVwiLFxuICBcImtteC1ncmVlbjFcIjogIFwiI2M0ZWQzYVwiLFxuICBcImtteC1vcmFuZ2VcIjogIFwiI2Y4NjgxY1wiLFxuICBcImtteC1vcmFuZ2UxXCI6IFwiI2ZhNzczNFwiLFxuICBcImtteC1vcmFuZ2UyXCI6IFwiI2ZmYTUzMlwiLFxuICBcImtteC1waW5rXCI6ICAgIFwiI2ZjOWVmOVwiLFxuICBcImtteC13aGl0ZVwiOiAgIFwiI2Y1ZjhmNFwiLFxuICBcImtteC13aGl0ZTFcIjogIFwiI2ZmZjlmMlwiLFxuICBcImtteC13aGl0ZTJcIjogIFwiI2ZmZmZmZlwiLFxuICBcImtteC15ZWxsb3dcIjogIFwiI2VjZmU0OVwiLFxuICBcImtteC15ZWxsb3cxXCI6IFwiI2ZmZjQzZVwiLFxuICBcImtteC15ZWxsb3cyXCI6ICBcIiNlY2ZlNDlcIixcbiAgXCJrbXgteWVsbG93M1wiOiBcIiNmZmY0M2VcIlxufTtcbmV4cG9ydCBkZWZhdWx0IGtteF9jb2xvcnM7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5cbihmdW5jdGlvbigpIHtcbiAgdmFyIFBvbHlmaWxsRXZlbnQgPSBldmVudENvbnN0cnVjdG9yKCk7XG5cbiAgZnVuY3Rpb24gZXZlbnRDb25zdHJ1Y3RvcigpIHtcbiAgICBpZiAodHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gd2luZG93LkN1c3RvbUV2ZW50O1xuICAgIC8vIElFPD05IFN1cHBvcnRcbiAgICBmdW5jdGlvbiBDdXN0b21FdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICBwYXJhbXMgPSBwYXJhbXMgfHwge2J1YmJsZXM6IGZhbHNlLCBjYW5jZWxhYmxlOiBmYWxzZSwgZGV0YWlsOiB1bmRlZmluZWR9O1xuICAgICAgdmFyIGV2dCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdDdXN0b21FdmVudCcpO1xuICAgICAgZXZ0LmluaXRDdXN0b21FdmVudChldmVudCwgcGFyYW1zLmJ1YmJsZXMsIHBhcmFtcy5jYW5jZWxhYmxlLCBwYXJhbXMuZGV0YWlsKTtcbiAgICAgIHJldHVybiBldnQ7XG4gICAgfVxuICAgIEN1c3RvbUV2ZW50LnByb3RvdHlwZSA9IHdpbmRvdy5FdmVudC5wcm90b3R5cGU7XG4gICAgcmV0dXJuIEN1c3RvbUV2ZW50O1xuICB9XG5cbiAgZnVuY3Rpb24gYnVpbGRIaWRkZW5JbnB1dChuYW1lLCB2YWx1ZSkge1xuICAgIHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiKTtcbiAgICBpbnB1dC50eXBlID0gXCJoaWRkZW5cIjtcbiAgICBpbnB1dC5uYW1lID0gbmFtZTtcbiAgICBpbnB1dC52YWx1ZSA9IHZhbHVlO1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZUNsaWNrKGVsZW1lbnQsIHRhcmdldE1vZGlmaWVyS2V5KSB7XG4gICAgdmFyIHRvID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLXRvXCIpLFxuICAgICAgICBtZXRob2QgPSBidWlsZEhpZGRlbklucHV0KFwiX21ldGhvZFwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtbWV0aG9kXCIpKSxcbiAgICAgICAgY3NyZiA9IGJ1aWxkSGlkZGVuSW5wdXQoXCJfY3NyZl90b2tlblwiLCBlbGVtZW50LmdldEF0dHJpYnV0ZShcImRhdGEtY3NyZlwiKSksXG4gICAgICAgIGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZm9ybVwiKSxcbiAgICAgICAgc3VibWl0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlucHV0XCIpLFxuICAgICAgICB0YXJnZXQgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShcInRhcmdldFwiKTtcblxuICAgIGZvcm0ubWV0aG9kID0gKGVsZW1lbnQuZ2V0QXR0cmlidXRlKFwiZGF0YS1tZXRob2RcIikgPT09IFwiZ2V0XCIpID8gXCJnZXRcIiA6IFwicG9zdFwiO1xuICAgIGZvcm0uYWN0aW9uID0gdG87XG4gICAgZm9ybS5zdHlsZS5kaXNwbGF5ID0gXCJub25lXCI7XG5cbiAgICBpZiAodGFyZ2V0KSBmb3JtLnRhcmdldCA9IHRhcmdldDtcbiAgICBlbHNlIGlmICh0YXJnZXRNb2RpZmllcktleSkgZm9ybS50YXJnZXQgPSBcIl9ibGFua1wiO1xuXG4gICAgZm9ybS5hcHBlbmRDaGlsZChjc3JmKTtcbiAgICBmb3JtLmFwcGVuZENoaWxkKG1ldGhvZCk7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChmb3JtKTtcblxuICAgIC8vIEluc2VydCBhIGJ1dHRvbiBhbmQgY2xpY2sgaXQgaW5zdGVhZCBvZiB1c2luZyBgZm9ybS5zdWJtaXRgXG4gICAgLy8gYmVjYXVzZSB0aGUgYHN1Ym1pdGAgZnVuY3Rpb24gZG9lcyBub3QgZW1pdCBhIGBzdWJtaXRgIGV2ZW50LlxuICAgIHN1Ym1pdC50eXBlID0gXCJzdWJtaXRcIjtcbiAgICBmb3JtLmFwcGVuZENoaWxkKHN1Ym1pdCk7XG4gICAgc3VibWl0LmNsaWNrKCk7XG4gIH1cblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgZWxlbWVudCA9IGUudGFyZ2V0O1xuICAgIGlmIChlLmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcblxuICAgIHdoaWxlIChlbGVtZW50ICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKSB7XG4gICAgICB2YXIgcGhvZW5peExpbmtFdmVudCA9IG5ldyBQb2x5ZmlsbEV2ZW50KCdwaG9lbml4LmxpbmsuY2xpY2snLCB7XG4gICAgICAgIFwiYnViYmxlc1wiOiB0cnVlLCBcImNhbmNlbGFibGVcIjogdHJ1ZVxuICAgICAgfSk7XG5cbiAgICAgIGlmICghZWxlbWVudC5kaXNwYXRjaEV2ZW50KHBob2VuaXhMaW5rRXZlbnQpKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJkYXRhLW1ldGhvZFwiKSkge1xuICAgICAgICBoYW5kbGVDbGljayhlbGVtZW50LCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSk7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudCA9IGVsZW1lbnQucGFyZW50Tm9kZTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIGZhbHNlKTtcblxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncGhvZW5peC5saW5rLmNsaWNrJywgZnVuY3Rpb24gKGUpIHtcbiAgICB2YXIgbWVzc2FnZSA9IGUudGFyZ2V0LmdldEF0dHJpYnV0ZShcImRhdGEtY29uZmlybVwiKTtcbiAgICBpZihtZXNzYWdlICYmICF3aW5kb3cuY29uZmlybShtZXNzYWdlKSkge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgfSwgZmFsc2UpO1xufSkoKTtcbiIsICIvLyB3cmFwcyB2YWx1ZSBpbiBjbG9zdXJlIG9yIHJldHVybnMgY2xvc3VyZVxuZXhwb3J0IGxldCBjbG9zdXJlID0gKHZhbHVlKSA9PiB7XG4gIGlmKHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiKXtcbiAgICByZXR1cm4gdmFsdWVcbiAgfSBlbHNlIHtcbiAgICBsZXQgY2xvc3VyZSA9IGZ1bmN0aW9uICgpeyByZXR1cm4gdmFsdWUgfVxuICAgIHJldHVybiBjbG9zdXJlXG4gIH1cbn1cbiIsICJleHBvcnQgY29uc3QgZ2xvYmFsU2VsZiA9IHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6IG51bGxcbmV4cG9ydCBjb25zdCBwaHhXaW5kb3cgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogbnVsbFxuZXhwb3J0IGNvbnN0IGdsb2JhbCA9IGdsb2JhbFNlbGYgfHwgcGh4V2luZG93IHx8IGdsb2JhbFxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVlNOID0gXCIyLjAuMFwiXG5leHBvcnQgY29uc3QgU09DS0VUX1NUQVRFUyA9IHtjb25uZWN0aW5nOiAwLCBvcGVuOiAxLCBjbG9zaW5nOiAyLCBjbG9zZWQ6IDN9XG5leHBvcnQgY29uc3QgREVGQVVMVF9USU1FT1VUID0gMTAwMDBcbmV4cG9ydCBjb25zdCBXU19DTE9TRV9OT1JNQUwgPSAxMDAwXG5leHBvcnQgY29uc3QgQ0hBTk5FTF9TVEFURVMgPSB7XG4gIGNsb3NlZDogXCJjbG9zZWRcIixcbiAgZXJyb3JlZDogXCJlcnJvcmVkXCIsXG4gIGpvaW5lZDogXCJqb2luZWRcIixcbiAgam9pbmluZzogXCJqb2luaW5nXCIsXG4gIGxlYXZpbmc6IFwibGVhdmluZ1wiLFxufVxuZXhwb3J0IGNvbnN0IENIQU5ORUxfRVZFTlRTID0ge1xuICBjbG9zZTogXCJwaHhfY2xvc2VcIixcbiAgZXJyb3I6IFwicGh4X2Vycm9yXCIsXG4gIGpvaW46IFwicGh4X2pvaW5cIixcbiAgcmVwbHk6IFwicGh4X3JlcGx5XCIsXG4gIGxlYXZlOiBcInBoeF9sZWF2ZVwiXG59XG5cbmV4cG9ydCBjb25zdCBUUkFOU1BPUlRTID0ge1xuICBsb25ncG9sbDogXCJsb25ncG9sbFwiLFxuICB3ZWJzb2NrZXQ6IFwid2Vic29ja2V0XCJcbn1cbmV4cG9ydCBjb25zdCBYSFJfU1RBVEVTID0ge1xuICBjb21wbGV0ZTogNFxufVxuIiwgIi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIFB1c2hcbiAqIEBwYXJhbSB7Q2hhbm5lbH0gY2hhbm5lbCAtIFRoZSBDaGFubmVsXG4gKiBAcGFyYW0ge3N0cmluZ30gZXZlbnQgLSBUaGUgZXZlbnQsIGZvciBleGFtcGxlIGBcInBoeF9qb2luXCJgXG4gKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZCAtIFRoZSBwYXlsb2FkLCBmb3IgZXhhbXBsZSBge3VzZXJfaWQ6IDEyM31gXG4gKiBAcGFyYW0ge251bWJlcn0gdGltZW91dCAtIFRoZSBwdXNoIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFB1c2gge1xuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBldmVudCwgcGF5bG9hZCwgdGltZW91dCl7XG4gICAgdGhpcy5jaGFubmVsID0gY2hhbm5lbFxuICAgIHRoaXMuZXZlbnQgPSBldmVudFxuICAgIHRoaXMucGF5bG9hZCA9IHBheWxvYWQgfHwgZnVuY3Rpb24gKCl7IHJldHVybiB7fSB9XG4gICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICAgIHRoaXMudGltZW91dFRpbWVyID0gbnVsbFxuICAgIHRoaXMucmVjSG9va3MgPSBbXVxuICAgIHRoaXMuc2VudCA9IGZhbHNlXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRcbiAgICovXG4gIHJlc2VuZCh0aW1lb3V0KXtcbiAgICB0aGlzLnRpbWVvdXQgPSB0aW1lb3V0XG4gICAgdGhpcy5yZXNldCgpXG4gICAgdGhpcy5zZW5kKClcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKi9cbiAgc2VuZCgpe1xuICAgIGlmKHRoaXMuaGFzUmVjZWl2ZWQoXCJ0aW1lb3V0XCIpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnN0YXJ0VGltZW91dCgpXG4gICAgdGhpcy5zZW50ID0gdHJ1ZVxuICAgIHRoaXMuY2hhbm5lbC5zb2NrZXQucHVzaCh7XG4gICAgICB0b3BpYzogdGhpcy5jaGFubmVsLnRvcGljLFxuICAgICAgZXZlbnQ6IHRoaXMuZXZlbnQsXG4gICAgICBwYXlsb2FkOiB0aGlzLnBheWxvYWQoKSxcbiAgICAgIHJlZjogdGhpcy5yZWYsXG4gICAgICBqb2luX3JlZjogdGhpcy5jaGFubmVsLmpvaW5SZWYoKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsqfSBzdGF0dXNcbiAgICogQHBhcmFtIHsqfSBjYWxsYmFja1xuICAgKi9cbiAgcmVjZWl2ZShzdGF0dXMsIGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLmhhc1JlY2VpdmVkKHN0YXR1cykpe1xuICAgICAgY2FsbGJhY2sodGhpcy5yZWNlaXZlZFJlc3AucmVzcG9uc2UpXG4gICAgfVxuXG4gICAgdGhpcy5yZWNIb29rcy5wdXNoKHtzdGF0dXMsIGNhbGxiYWNrfSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICByZXNldCgpe1xuICAgIHRoaXMuY2FuY2VsUmVmRXZlbnQoKVxuICAgIHRoaXMucmVmID0gbnVsbFxuICAgIHRoaXMucmVmRXZlbnQgPSBudWxsXG4gICAgdGhpcy5yZWNlaXZlZFJlc3AgPSBudWxsXG4gICAgdGhpcy5zZW50ID0gZmFsc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgbWF0Y2hSZWNlaXZlKHtzdGF0dXMsIHJlc3BvbnNlLCBfcmVmfSl7XG4gICAgdGhpcy5yZWNIb29rcy5maWx0ZXIoaCA9PiBoLnN0YXR1cyA9PT0gc3RhdHVzKVxuICAgICAgLmZvckVhY2goaCA9PiBoLmNhbGxiYWNrKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY2FuY2VsUmVmRXZlbnQoKXtcbiAgICBpZighdGhpcy5yZWZFdmVudCl7IHJldHVybiB9XG4gICAgdGhpcy5jaGFubmVsLm9mZih0aGlzLnJlZkV2ZW50KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjYW5jZWxUaW1lb3V0KCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dFRpbWVyKVxuICAgIHRoaXMudGltZW91dFRpbWVyID0gbnVsbFxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGFydFRpbWVvdXQoKXtcbiAgICBpZih0aGlzLnRpbWVvdXRUaW1lcil7IHRoaXMuY2FuY2VsVGltZW91dCgpIH1cbiAgICB0aGlzLnJlZiA9IHRoaXMuY2hhbm5lbC5zb2NrZXQubWFrZVJlZigpXG4gICAgdGhpcy5yZWZFdmVudCA9IHRoaXMuY2hhbm5lbC5yZXBseUV2ZW50TmFtZSh0aGlzLnJlZilcblxuICAgIHRoaXMuY2hhbm5lbC5vbih0aGlzLnJlZkV2ZW50LCBwYXlsb2FkID0+IHtcbiAgICAgIHRoaXMuY2FuY2VsUmVmRXZlbnQoKVxuICAgICAgdGhpcy5jYW5jZWxUaW1lb3V0KClcbiAgICAgIHRoaXMucmVjZWl2ZWRSZXNwID0gcGF5bG9hZFxuICAgICAgdGhpcy5tYXRjaFJlY2VpdmUocGF5bG9hZClcbiAgICB9KVxuXG4gICAgdGhpcy50aW1lb3V0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMudHJpZ2dlcihcInRpbWVvdXRcIiwge30pXG4gICAgfSwgdGhpcy50aW1lb3V0KVxuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBoYXNSZWNlaXZlZChzdGF0dXMpe1xuICAgIHJldHVybiB0aGlzLnJlY2VpdmVkUmVzcCAmJiB0aGlzLnJlY2VpdmVkUmVzcC5zdGF0dXMgPT09IHN0YXR1c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICB0cmlnZ2VyKHN0YXR1cywgcmVzcG9uc2Upe1xuICAgIHRoaXMuY2hhbm5lbC50cmlnZ2VyKHRoaXMucmVmRXZlbnQsIHtzdGF0dXMsIHJlc3BvbnNlfSlcbiAgfVxufVxuIiwgIi8qKlxuICpcbiAqIENyZWF0ZXMgYSB0aW1lciB0aGF0IGFjY2VwdHMgYSBgdGltZXJDYWxjYCBmdW5jdGlvbiB0byBwZXJmb3JtXG4gKiBjYWxjdWxhdGVkIHRpbWVvdXQgcmV0cmllcywgc3VjaCBhcyBleHBvbmVudGlhbCBiYWNrb2ZmLlxuICpcbiAqIEBleGFtcGxlXG4gKiBsZXQgcmVjb25uZWN0VGltZXIgPSBuZXcgVGltZXIoKCkgPT4gdGhpcy5jb25uZWN0KCksIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMDAwLCA1MDAwLCAxMDAwMF1bdHJpZXMgLSAxXSB8fCAxMDAwMFxuICogfSlcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDUwMDBcbiAqIHJlY29ubmVjdFRpbWVyLnJlc2V0KClcbiAqIHJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpIC8vIGZpcmVzIGFmdGVyIDEwMDBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICogQHBhcmFtIHtGdW5jdGlvbn0gdGltZXJDYWxjXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRpbWVyIHtcbiAgY29uc3RydWN0b3IoY2FsbGJhY2ssIHRpbWVyQ2FsYyl7XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy50aW1lckNhbGMgPSB0aW1lckNhbGNcbiAgICB0aGlzLnRpbWVyID0gbnVsbFxuICAgIHRoaXMudHJpZXMgPSAwXG4gIH1cblxuICByZXNldCgpe1xuICAgIHRoaXMudHJpZXMgPSAwXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpXG4gIH1cblxuICAvKipcbiAgICogQ2FuY2VscyBhbnkgcHJldmlvdXMgc2NoZWR1bGVUaW1lb3V0IGFuZCBzY2hlZHVsZXMgY2FsbGJhY2tcbiAgICovXG4gIHNjaGVkdWxlVGltZW91dCgpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVyKVxuXG4gICAgdGhpcy50aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy50cmllcyA9IHRoaXMudHJpZXMgKyAxXG4gICAgICB0aGlzLmNhbGxiYWNrKClcbiAgICB9LCB0aGlzLnRpbWVyQ2FsYyh0aGlzLnRyaWVzICsgMSkpXG4gIH1cbn1cbiIsICJpbXBvcnQge2Nsb3N1cmV9IGZyb20gXCIuL3V0aWxzXCJcbmltcG9ydCB7XG4gIENIQU5ORUxfRVZFTlRTLFxuICBDSEFOTkVMX1NUQVRFUyxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IFB1c2ggZnJvbSBcIi4vcHVzaFwiXG5pbXBvcnQgVGltZXIgZnJvbSBcIi4vdGltZXJcIlxuXG4vKipcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdG9waWNcbiAqIEBwYXJhbSB7KE9iamVjdHxmdW5jdGlvbil9IHBhcmFtc1xuICogQHBhcmFtIHtTb2NrZXR9IHNvY2tldFxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVsIHtcbiAgY29uc3RydWN0b3IodG9waWMsIHBhcmFtcywgc29ja2V0KXtcbiAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuY2xvc2VkXG4gICAgdGhpcy50b3BpYyA9IHRvcGljXG4gICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKHBhcmFtcyB8fCB7fSlcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMuYmluZGluZ3MgPSBbXVxuICAgIHRoaXMuYmluZGluZ1JlZiA9IDBcbiAgICB0aGlzLnRpbWVvdXQgPSB0aGlzLnNvY2tldC50aW1lb3V0XG4gICAgdGhpcy5qb2luZWRPbmNlID0gZmFsc2VcbiAgICB0aGlzLmpvaW5QdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMuam9pbiwgdGhpcy5wYXJhbXMsIHRoaXMudGltZW91dClcbiAgICB0aGlzLnB1c2hCdWZmZXIgPSBbXVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VSZWZzID0gW11cblxuICAgIHRoaXMucmVqb2luVGltZXIgPSBuZXcgVGltZXIoKCkgPT4ge1xuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luKCkgfVxuICAgIH0sIHRoaXMuc29ja2V0LnJlam9pbkFmdGVyTXMpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZVJlZnMucHVzaCh0aGlzLnNvY2tldC5vbkVycm9yKCgpID0+IHRoaXMucmVqb2luVGltZXIucmVzZXQoKSkpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZVJlZnMucHVzaCh0aGlzLnNvY2tldC5vbk9wZW4oKCkgPT4ge1xuICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgICBpZih0aGlzLmlzRXJyb3JlZCgpKXsgdGhpcy5yZWpvaW4oKSB9XG4gICAgfSlcbiAgICApXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwib2tcIiwgKCkgPT4ge1xuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmpvaW5lZFxuICAgICAgdGhpcy5yZWpvaW5UaW1lci5yZXNldCgpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIuZm9yRWFjaChwdXNoRXZlbnQgPT4gcHVzaEV2ZW50LnNlbmQoKSlcbiAgICAgIHRoaXMucHVzaEJ1ZmZlciA9IFtdXG4gICAgfSlcbiAgICB0aGlzLmpvaW5QdXNoLnJlY2VpdmUoXCJlcnJvclwiLCAoKSA9PiB7XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5vbkNsb3NlKCgpID0+IHtcbiAgICAgIHRoaXMucmVqb2luVGltZXIucmVzZXQoKVxuICAgICAgaWYodGhpcy5zb2NrZXQuaGFzTG9nZ2VyKCkpIHRoaXMuc29ja2V0LmxvZyhcImNoYW5uZWxcIiwgYGNsb3NlICR7dGhpcy50b3BpY30gJHt0aGlzLmpvaW5SZWYoKX1gKVxuICAgICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmNsb3NlZFxuICAgICAgdGhpcy5zb2NrZXQucmVtb3ZlKHRoaXMpXG4gICAgfSlcbiAgICB0aGlzLm9uRXJyb3IocmVhc29uID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBlcnJvciAke3RoaXMudG9waWN9YCwgcmVhc29uKVxuICAgICAgaWYodGhpcy5pc0pvaW5pbmcoKSl7IHRoaXMuam9pblB1c2gucmVzZXQoKSB9XG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgaWYodGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSl7IHRoaXMucmVqb2luVGltZXIuc2NoZWR1bGVUaW1lb3V0KCkgfVxuICAgIH0pXG4gICAgdGhpcy5qb2luUHVzaC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiB7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBgdGltZW91dCAke3RoaXMudG9waWN9ICgke3RoaXMuam9pblJlZigpfSlgLCB0aGlzLmpvaW5QdXNoLnRpbWVvdXQpXG4gICAgICBsZXQgbGVhdmVQdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMubGVhdmUsIGNsb3N1cmUoe30pLCB0aGlzLnRpbWVvdXQpXG4gICAgICBsZWF2ZVB1c2guc2VuZCgpXG4gICAgICB0aGlzLnN0YXRlID0gQ0hBTk5FTF9TVEFURVMuZXJyb3JlZFxuICAgICAgdGhpcy5qb2luUHVzaC5yZXNldCgpXG4gICAgICBpZih0aGlzLnNvY2tldC5pc0Nvbm5lY3RlZCgpKXsgdGhpcy5yZWpvaW5UaW1lci5zY2hlZHVsZVRpbWVvdXQoKSB9XG4gICAgfSlcbiAgICB0aGlzLm9uKENIQU5ORUxfRVZFTlRTLnJlcGx5LCAocGF5bG9hZCwgcmVmKSA9PiB7XG4gICAgICB0aGlzLnRyaWdnZXIodGhpcy5yZXBseUV2ZW50TmFtZShyZWYpLCBwYXlsb2FkKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogSm9pbiB0aGUgY2hhbm5lbFxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWVvdXRcbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBqb2luKHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpe1xuICAgIGlmKHRoaXMuam9pbmVkT25jZSl7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ0cmllZCB0byBqb2luIG11bHRpcGxlIHRpbWVzLiAnam9pbicgY2FuIG9ubHkgYmUgY2FsbGVkIGEgc2luZ2xlIHRpbWUgcGVyIGNoYW5uZWwgaW5zdGFuY2VcIilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy50aW1lb3V0ID0gdGltZW91dFxuICAgICAgdGhpcy5qb2luZWRPbmNlID0gdHJ1ZVxuICAgICAgdGhpcy5yZWpvaW4oKVxuICAgICAgcmV0dXJuIHRoaXMuam9pblB1c2hcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSG9vayBpbnRvIGNoYW5uZWwgY2xvc2VcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uQ2xvc2UoY2FsbGJhY2spe1xuICAgIHRoaXMub24oQ0hBTk5FTF9FVkVOVFMuY2xvc2UsIGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIEhvb2sgaW50byBjaGFubmVsIGVycm9yc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25FcnJvcihjYWxsYmFjayl7XG4gICAgcmV0dXJuIHRoaXMub24oQ0hBTk5FTF9FVkVOVFMuZXJyb3IsIHJlYXNvbiA9PiBjYWxsYmFjayhyZWFzb24pKVxuICB9XG5cbiAgLyoqXG4gICAqIFN1YnNjcmliZXMgb24gY2hhbm5lbCBldmVudHNcbiAgICpcbiAgICogU3Vic2NyaXB0aW9uIHJldHVybnMgYSByZWYgY291bnRlciwgd2hpY2ggY2FuIGJlIHVzZWQgbGF0ZXIgdG9cbiAgICogdW5zdWJzY3JpYmUgdGhlIGV4YWN0IGV2ZW50IGxpc3RlbmVyXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNvbnN0IHJlZjEgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fc3R1ZmYpXG4gICAqIGNvbnN0IHJlZjIgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fb3RoZXJfc3R1ZmYpXG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIiwgcmVmMSlcbiAgICogLy8gU2luY2UgdW5zdWJzY3JpcHRpb24sIGRvX3N0dWZmIHdvbid0IGZpcmUsXG4gICAqIC8vIHdoaWxlIGRvX290aGVyX3N0dWZmIHdpbGwga2VlcCBmaXJpbmcgb24gdGhlIFwiZXZlbnRcIlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICogQHJldHVybnMge2ludGVnZXJ9IHJlZlxuICAgKi9cbiAgb24oZXZlbnQsIGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5iaW5kaW5nUmVmKytcbiAgICB0aGlzLmJpbmRpbmdzLnB1c2goe2V2ZW50LCByZWYsIGNhbGxiYWNrfSlcbiAgICByZXR1cm4gcmVmXG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmVzIG9mZiBvZiBjaGFubmVsIGV2ZW50c1xuICAgKlxuICAgKiBVc2UgdGhlIHJlZiByZXR1cm5lZCBmcm9tIGEgY2hhbm5lbC5vbigpIHRvIHVuc3Vic2NyaWJlIG9uZVxuICAgKiBoYW5kbGVyLCBvciBwYXNzIG5vdGhpbmcgZm9yIHRoZSByZWYgdG8gdW5zdWJzY3JpYmUgYWxsXG4gICAqIGhhbmRsZXJzIGZvciB0aGUgZ2l2ZW4gZXZlbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIFVuc3Vic2NyaWJlIHRoZSBkb19zdHVmZiBoYW5kbGVyXG4gICAqIGNvbnN0IHJlZjEgPSBjaGFubmVsLm9uKFwiZXZlbnRcIiwgZG9fc3R1ZmYpXG4gICAqIGNoYW5uZWwub2ZmKFwiZXZlbnRcIiwgcmVmMSlcbiAgICpcbiAgICogLy8gVW5zdWJzY3JpYmUgYWxsIGhhbmRsZXJzIGZyb20gZXZlbnRcbiAgICogY2hhbm5lbC5vZmYoXCJldmVudFwiKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtpbnRlZ2VyfSByZWZcbiAgICovXG4gIG9mZihldmVudCwgcmVmKXtcbiAgICB0aGlzLmJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncy5maWx0ZXIoKGJpbmQpID0+IHtcbiAgICAgIHJldHVybiAhKGJpbmQuZXZlbnQgPT09IGV2ZW50ICYmICh0eXBlb2YgcmVmID09PSBcInVuZGVmaW5lZFwiIHx8IHJlZiA9PT0gYmluZC5yZWYpKVxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNhblB1c2goKXsgcmV0dXJuIHRoaXMuc29ja2V0LmlzQ29ubmVjdGVkKCkgJiYgdGhpcy5pc0pvaW5lZCgpIH1cblxuICAvKipcbiAgICogU2VuZHMgYSBtZXNzYWdlIGBldmVudGAgdG8gcGhvZW5peCB3aXRoIHRoZSBwYXlsb2FkIGBwYXlsb2FkYC5cbiAgICogUGhvZW5peCByZWNlaXZlcyB0aGlzIGluIHRoZSBgaGFuZGxlX2luKGV2ZW50LCBwYXlsb2FkLCBzb2NrZXQpYFxuICAgKiBmdW5jdGlvbi4gaWYgcGhvZW5peCByZXBsaWVzIG9yIGl0IHRpbWVzIG91dCAoZGVmYXVsdCAxMDAwMG1zKSxcbiAgICogdGhlbiBvcHRpb25hbGx5IHRoZSByZXBseSBjYW4gYmUgcmVjZWl2ZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGNoYW5uZWwucHVzaChcImV2ZW50XCIpXG4gICAqICAgLnJlY2VpdmUoXCJva1wiLCBwYXlsb2FkID0+IGNvbnNvbGUubG9nKFwicGhvZW5peCByZXBsaWVkOlwiLCBwYXlsb2FkKSlcbiAgICogICAucmVjZWl2ZShcImVycm9yXCIsIGVyciA9PiBjb25zb2xlLmxvZyhcInBob2VuaXggZXJyb3JlZFwiLCBlcnIpKVxuICAgKiAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiBjb25zb2xlLmxvZyhcInRpbWVkIG91dCBwdXNoaW5nXCIpKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IHBheWxvYWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt0aW1lb3V0XVxuICAgKiBAcmV0dXJucyB7UHVzaH1cbiAgICovXG4gIHB1c2goZXZlbnQsIHBheWxvYWQsIHRpbWVvdXQgPSB0aGlzLnRpbWVvdXQpe1xuICAgIHBheWxvYWQgPSBwYXlsb2FkIHx8IHt9XG4gICAgaWYoIXRoaXMuam9pbmVkT25jZSl7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHRyaWVkIHRvIHB1c2ggJyR7ZXZlbnR9JyB0byAnJHt0aGlzLnRvcGljfScgYmVmb3JlIGpvaW5pbmcuIFVzZSBjaGFubmVsLmpvaW4oKSBiZWZvcmUgcHVzaGluZyBldmVudHNgKVxuICAgIH1cbiAgICBsZXQgcHVzaEV2ZW50ID0gbmV3IFB1c2godGhpcywgZXZlbnQsIGZ1bmN0aW9uICgpeyByZXR1cm4gcGF5bG9hZCB9LCB0aW1lb3V0KVxuICAgIGlmKHRoaXMuY2FuUHVzaCgpKXtcbiAgICAgIHB1c2hFdmVudC5zZW5kKClcbiAgICB9IGVsc2Uge1xuICAgICAgcHVzaEV2ZW50LnN0YXJ0VGltZW91dCgpXG4gICAgICB0aGlzLnB1c2hCdWZmZXIucHVzaChwdXNoRXZlbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIHB1c2hFdmVudFxuICB9XG5cbiAgLyoqIExlYXZlcyB0aGUgY2hhbm5lbFxuICAgKlxuICAgKiBVbnN1YnNjcmliZXMgZnJvbSBzZXJ2ZXIgZXZlbnRzLCBhbmRcbiAgICogaW5zdHJ1Y3RzIGNoYW5uZWwgdG8gdGVybWluYXRlIG9uIHNlcnZlclxuICAgKlxuICAgKiBUcmlnZ2VycyBvbkNsb3NlKCkgaG9va3NcbiAgICpcbiAgICogVG8gcmVjZWl2ZSBsZWF2ZSBhY2tub3dsZWRnZW1lbnRzLCB1c2UgdGhlIGByZWNlaXZlYFxuICAgKiBob29rIHRvIGJpbmQgdG8gdGhlIHNlcnZlciBhY2ssIGllOlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjaGFubmVsLmxlYXZlKCkucmVjZWl2ZShcIm9rXCIsICgpID0+IGFsZXJ0KFwibGVmdCFcIikgKVxuICAgKlxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHRpbWVvdXRcbiAgICogQHJldHVybnMge1B1c2h9XG4gICAqL1xuICBsZWF2ZSh0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICB0aGlzLnJlam9pblRpbWVyLnJlc2V0KClcbiAgICB0aGlzLmpvaW5QdXNoLmNhbmNlbFRpbWVvdXQoKVxuXG4gICAgdGhpcy5zdGF0ZSA9IENIQU5ORUxfU1RBVEVTLmxlYXZpbmdcbiAgICBsZXQgb25DbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmKHRoaXMuc29ja2V0Lmhhc0xvZ2dlcigpKSB0aGlzLnNvY2tldC5sb2coXCJjaGFubmVsXCIsIGBsZWF2ZSAke3RoaXMudG9waWN9YClcbiAgICAgIHRoaXMudHJpZ2dlcihDSEFOTkVMX0VWRU5UUy5jbG9zZSwgXCJsZWF2ZVwiKVxuICAgIH1cbiAgICBsZXQgbGVhdmVQdXNoID0gbmV3IFB1c2godGhpcywgQ0hBTk5FTF9FVkVOVFMubGVhdmUsIGNsb3N1cmUoe30pLCB0aW1lb3V0KVxuICAgIGxlYXZlUHVzaC5yZWNlaXZlKFwib2tcIiwgKCkgPT4gb25DbG9zZSgpKVxuICAgICAgLnJlY2VpdmUoXCJ0aW1lb3V0XCIsICgpID0+IG9uQ2xvc2UoKSlcbiAgICBsZWF2ZVB1c2guc2VuZCgpXG4gICAgaWYoIXRoaXMuY2FuUHVzaCgpKXsgbGVhdmVQdXNoLnRyaWdnZXIoXCJva1wiLCB7fSkgfVxuXG4gICAgcmV0dXJuIGxlYXZlUHVzaFxuICB9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRhYmxlIG1lc3NhZ2UgaG9va1xuICAgKlxuICAgKiBSZWNlaXZlcyBhbGwgZXZlbnRzIGZvciBzcGVjaWFsaXplZCBtZXNzYWdlIGhhbmRsaW5nXG4gICAqIGJlZm9yZSBkaXNwYXRjaGluZyB0byB0aGUgY2hhbm5lbCBjYWxsYmFja3MuXG4gICAqXG4gICAqIE11c3QgcmV0dXJuIHRoZSBwYXlsb2FkLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcGFyYW0ge09iamVjdH0gcGF5bG9hZFxuICAgKiBAcGFyYW0ge2ludGVnZXJ9IHJlZlxuICAgKiBAcmV0dXJucyB7T2JqZWN0fVxuICAgKi9cbiAgb25NZXNzYWdlKF9ldmVudCwgcGF5bG9hZCwgX3JlZil7IHJldHVybiBwYXlsb2FkIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pblJlZil7XG4gICAgaWYodGhpcy50b3BpYyAhPT0gdG9waWMpeyByZXR1cm4gZmFsc2UgfVxuXG4gICAgaWYoam9pblJlZiAmJiBqb2luUmVmICE9PSB0aGlzLmpvaW5SZWYoKSl7XG4gICAgICBpZih0aGlzLnNvY2tldC5oYXNMb2dnZXIoKSkgdGhpcy5zb2NrZXQubG9nKFwiY2hhbm5lbFwiLCBcImRyb3BwaW5nIG91dGRhdGVkIG1lc3NhZ2VcIiwge3RvcGljLCBldmVudCwgcGF5bG9hZCwgam9pblJlZn0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIGpvaW5SZWYoKXsgcmV0dXJuIHRoaXMuam9pblB1c2gucmVmIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHJlam9pbih0aW1lb3V0ID0gdGhpcy50aW1lb3V0KXtcbiAgICBpZih0aGlzLmlzTGVhdmluZygpKXsgcmV0dXJuIH1cbiAgICB0aGlzLnNvY2tldC5sZWF2ZU9wZW5Ub3BpYyh0aGlzLnRvcGljKVxuICAgIHRoaXMuc3RhdGUgPSBDSEFOTkVMX1NUQVRFUy5qb2luaW5nXG4gICAgdGhpcy5qb2luUHVzaC5yZXNlbmQodGltZW91dClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJpZ2dlcihldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luUmVmKXtcbiAgICBsZXQgaGFuZGxlZFBheWxvYWQgPSB0aGlzLm9uTWVzc2FnZShldmVudCwgcGF5bG9hZCwgcmVmLCBqb2luUmVmKVxuICAgIGlmKHBheWxvYWQgJiYgIWhhbmRsZWRQYXlsb2FkKXsgdGhyb3cgbmV3IEVycm9yKFwiY2hhbm5lbCBvbk1lc3NhZ2UgY2FsbGJhY2tzIG11c3QgcmV0dXJuIHRoZSBwYXlsb2FkLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkXCIpIH1cblxuICAgIGxldCBldmVudEJpbmRpbmdzID0gdGhpcy5iaW5kaW5ncy5maWx0ZXIoYmluZCA9PiBiaW5kLmV2ZW50ID09PSBldmVudClcblxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBldmVudEJpbmRpbmdzLmxlbmd0aDsgaSsrKXtcbiAgICAgIGxldCBiaW5kID0gZXZlbnRCaW5kaW5nc1tpXVxuICAgICAgYmluZC5jYWxsYmFjayhoYW5kbGVkUGF5bG9hZCwgcmVmLCBqb2luUmVmIHx8IHRoaXMuam9pblJlZigpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcmVwbHlFdmVudE5hbWUocmVmKXsgcmV0dXJuIGBjaGFuX3JlcGx5XyR7cmVmfWAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNDbG9zZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmNsb3NlZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0Vycm9yZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmVycm9yZWQgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNKb2luZWQoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5lZCB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBpc0pvaW5pbmcoKXsgcmV0dXJuIHRoaXMuc3RhdGUgPT09IENIQU5ORUxfU1RBVEVTLmpvaW5pbmcgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgaXNMZWF2aW5nKCl7IHJldHVybiB0aGlzLnN0YXRlID09PSBDSEFOTkVMX1NUQVRFUy5sZWF2aW5nIH1cbn1cbiIsICJpbXBvcnQge1xuICBnbG9iYWwsXG4gIFhIUl9TVEFURVNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWpheCB7XG5cbiAgc3RhdGljIHJlcXVlc3QobWV0aG9kLCBlbmRQb2ludCwgYWNjZXB0LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICBpZihnbG9iYWwuWERvbWFpblJlcXVlc3Qpe1xuICAgICAgbGV0IHJlcSA9IG5ldyBnbG9iYWwuWERvbWFpblJlcXVlc3QoKSAvLyBJRTgsIElFOVxuICAgICAgcmV0dXJuIHRoaXMueGRvbWFpblJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgcmVxID0gbmV3IGdsb2JhbC5YTUxIdHRwUmVxdWVzdCgpIC8vIElFNyssIEZpcmVmb3gsIENocm9tZSwgT3BlcmEsIFNhZmFyaVxuICAgICAgcmV0dXJuIHRoaXMueGhyUmVxdWVzdChyZXEsIG1ldGhvZCwgZW5kUG9pbnQsIGFjY2VwdCwgYm9keSwgdGltZW91dCwgb250aW1lb3V0LCBjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgeGRvbWFpblJlcXVlc3QocmVxLCBtZXRob2QsIGVuZFBvaW50LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICByZXEudGltZW91dCA9IHRpbWVvdXRcbiAgICByZXEub3BlbihtZXRob2QsIGVuZFBvaW50KVxuICAgIHJlcS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLnBhcnNlSlNPTihyZXEucmVzcG9uc2VUZXh0KVxuICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcG9uc2UpXG4gICAgfVxuICAgIGlmKG9udGltZW91dCl7IHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQgfVxuXG4gICAgLy8gV29yayBhcm91bmQgYnVnIGluIElFOSB0aGF0IHJlcXVpcmVzIGFuIGF0dGFjaGVkIG9ucHJvZ3Jlc3MgaGFuZGxlclxuICAgIHJlcS5vbnByb2dyZXNzID0gKCkgPT4geyB9XG5cbiAgICByZXEuc2VuZChib2R5KVxuICAgIHJldHVybiByZXFcbiAgfVxuXG4gIHN0YXRpYyB4aHJSZXF1ZXN0KHJlcSwgbWV0aG9kLCBlbmRQb2ludCwgYWNjZXB0LCBib2R5LCB0aW1lb3V0LCBvbnRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICByZXEub3BlbihtZXRob2QsIGVuZFBvaW50LCB0cnVlKVxuICAgIHJlcS50aW1lb3V0ID0gdGltZW91dFxuICAgIHJlcS5zZXRSZXF1ZXN0SGVhZGVyKFwiQ29udGVudC1UeXBlXCIsIGFjY2VwdClcbiAgICByZXEub25lcnJvciA9ICgpID0+IGNhbGxiYWNrICYmIGNhbGxiYWNrKG51bGwpXG4gICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmKHJlcS5yZWFkeVN0YXRlID09PSBYSFJfU1RBVEVTLmNvbXBsZXRlICYmIGNhbGxiYWNrKXtcbiAgICAgICAgbGV0IHJlc3BvbnNlID0gdGhpcy5wYXJzZUpTT04ocmVxLnJlc3BvbnNlVGV4dClcbiAgICAgICAgY2FsbGJhY2socmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuICAgIGlmKG9udGltZW91dCl7IHJlcS5vbnRpbWVvdXQgPSBvbnRpbWVvdXQgfVxuXG4gICAgcmVxLnNlbmQoYm9keSlcbiAgICByZXR1cm4gcmVxXG4gIH1cblxuICBzdGF0aWMgcGFyc2VKU09OKHJlc3Ape1xuICAgIGlmKCFyZXNwIHx8IHJlc3AgPT09IFwiXCIpeyByZXR1cm4gbnVsbCB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVzcClcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgIGNvbnNvbGUgJiYgY29uc29sZS5sb2coXCJmYWlsZWQgdG8gcGFyc2UgSlNPTiByZXNwb25zZVwiLCByZXNwKVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplKG9iaiwgcGFyZW50S2V5KXtcbiAgICBsZXQgcXVlcnlTdHIgPSBbXVxuICAgIGZvcih2YXIga2V5IGluIG9iail7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSl7IGNvbnRpbnVlIH1cbiAgICAgIGxldCBwYXJhbUtleSA9IHBhcmVudEtleSA/IGAke3BhcmVudEtleX1bJHtrZXl9XWAgOiBrZXlcbiAgICAgIGxldCBwYXJhbVZhbCA9IG9ialtrZXldXG4gICAgICBpZih0eXBlb2YgcGFyYW1WYWwgPT09IFwib2JqZWN0XCIpe1xuICAgICAgICBxdWVyeVN0ci5wdXNoKHRoaXMuc2VyaWFsaXplKHBhcmFtVmFsLCBwYXJhbUtleSkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWVyeVN0ci5wdXNoKGVuY29kZVVSSUNvbXBvbmVudChwYXJhbUtleSkgKyBcIj1cIiArIGVuY29kZVVSSUNvbXBvbmVudChwYXJhbVZhbCkpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBxdWVyeVN0ci5qb2luKFwiJlwiKVxuICB9XG5cbiAgc3RhdGljIGFwcGVuZFBhcmFtcyh1cmwsIHBhcmFtcyl7XG4gICAgaWYoT2JqZWN0LmtleXMocGFyYW1zKS5sZW5ndGggPT09IDApeyByZXR1cm4gdXJsIH1cblxuICAgIGxldCBwcmVmaXggPSB1cmwubWF0Y2goL1xcPy8pID8gXCImXCIgOiBcIj9cIlxuICAgIHJldHVybiBgJHt1cmx9JHtwcmVmaXh9JHt0aGlzLnNlcmlhbGl6ZShwYXJhbXMpfWBcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFNPQ0tFVF9TVEFURVMsXG4gIFRSQU5TUE9SVFNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IEFqYXggZnJvbSBcIi4vYWpheFwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvbmdQb2xsIHtcblxuICBjb25zdHJ1Y3RvcihlbmRQb2ludCl7XG4gICAgdGhpcy5lbmRQb2ludCA9IG51bGxcbiAgICB0aGlzLnRva2VuID0gbnVsbFxuICAgIHRoaXMuc2tpcEhlYXJ0YmVhdCA9IHRydWVcbiAgICB0aGlzLnJlcXMgPSBuZXcgU2V0KClcbiAgICB0aGlzLm9ub3BlbiA9IGZ1bmN0aW9uICgpeyB9IC8vIG5vb3BcbiAgICB0aGlzLm9uZXJyb3IgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgdGhpcy5vbmNsb3NlID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgIHRoaXMucG9sbEVuZHBvaW50ID0gdGhpcy5ub3JtYWxpemVFbmRwb2ludChlbmRQb2ludClcbiAgICB0aGlzLnJlYWR5U3RhdGUgPSBTT0NLRVRfU1RBVEVTLmNvbm5lY3RpbmdcbiAgICB0aGlzLnBvbGwoKVxuICB9XG5cbiAgbm9ybWFsaXplRW5kcG9pbnQoZW5kUG9pbnQpe1xuICAgIHJldHVybiAoZW5kUG9pbnRcbiAgICAgIC5yZXBsYWNlKFwid3M6Ly9cIiwgXCJodHRwOi8vXCIpXG4gICAgICAucmVwbGFjZShcIndzczovL1wiLCBcImh0dHBzOi8vXCIpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKFwiKC4qKVxcL1wiICsgVFJBTlNQT1JUUy53ZWJzb2NrZXQpLCBcIiQxL1wiICsgVFJBTlNQT1JUUy5sb25ncG9sbCkpXG4gIH1cblxuICBlbmRwb2ludFVSTCgpe1xuICAgIHJldHVybiBBamF4LmFwcGVuZFBhcmFtcyh0aGlzLnBvbGxFbmRwb2ludCwge3Rva2VuOiB0aGlzLnRva2VufSlcbiAgfVxuXG4gIGNsb3NlQW5kUmV0cnkoY29kZSwgcmVhc29uLCB3YXNDbGVhbil7XG4gICAgdGhpcy5jbG9zZShjb2RlLCByZWFzb24sIHdhc0NsZWFuKVxuICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMuY29ubmVjdGluZ1xuICB9XG5cbiAgb250aW1lb3V0KCl7XG4gICAgdGhpcy5vbmVycm9yKFwidGltZW91dFwiKVxuICAgIHRoaXMuY2xvc2VBbmRSZXRyeSgxMDA1LCBcInRpbWVvdXRcIiwgZmFsc2UpXG4gIH1cblxuICBpc0FjdGl2ZSgpeyByZXR1cm4gdGhpcy5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLm9wZW4gfHwgdGhpcy5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLmNvbm5lY3RpbmcgfVxuXG4gIHBvbGwoKXtcbiAgICB0aGlzLmFqYXgoXCJHRVRcIiwgbnVsbCwgKCkgPT4gdGhpcy5vbnRpbWVvdXQoKSwgcmVzcCA9PiB7XG4gICAgICBpZihyZXNwKXtcbiAgICAgICAgdmFyIHtzdGF0dXMsIHRva2VuLCBtZXNzYWdlc30gPSByZXNwXG4gICAgICAgIHRoaXMudG9rZW4gPSB0b2tlblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3RhdHVzID0gMFxuICAgICAgfVxuXG4gICAgICBzd2l0Y2goc3RhdHVzKXtcbiAgICAgICAgY2FzZSAyMDA6XG4gICAgICAgICAgbWVzc2FnZXMuZm9yRWFjaChtc2cgPT4ge1xuICAgICAgICAgICAgLy8gVGFza3MgYXJlIHdoYXQgdGhpbmdzIGxpa2UgZXZlbnQgaGFuZGxlcnMsIHNldFRpbWVvdXQgY2FsbGJhY2tzLFxuICAgICAgICAgICAgLy8gcHJvbWlzZSByZXNvbHZlcyBhbmQgbW9yZSBhcmUgcnVuIHdpdGhpbi5cbiAgICAgICAgICAgIC8vIEluIG1vZGVybiBicm93c2VycywgdGhlcmUgYXJlIHR3byBkaWZmZXJlbnQga2luZHMgb2YgdGFza3MsXG4gICAgICAgICAgICAvLyBtaWNyb3Rhc2tzIGFuZCBtYWNyb3Rhc2tzLlxuICAgICAgICAgICAgLy8gTWljcm90YXNrcyBhcmUgbWFpbmx5IHVzZWQgZm9yIFByb21pc2VzLCB3aGlsZSBtYWNyb3Rhc2tzIGFyZVxuICAgICAgICAgICAgLy8gdXNlZCBmb3IgZXZlcnl0aGluZyBlbHNlLlxuICAgICAgICAgICAgLy8gTWljcm90YXNrcyBhbHdheXMgaGF2ZSBwcmlvcml0eSBvdmVyIG1hY3JvdGFza3MuIElmIHRoZSBKUyBlbmdpbmVcbiAgICAgICAgICAgIC8vIGlzIGxvb2tpbmcgZm9yIGEgdGFzayB0byBydW4sIGl0IHdpbGwgYWx3YXlzIHRyeSB0byBlbXB0eSB0aGVcbiAgICAgICAgICAgIC8vIG1pY3JvdGFzayBxdWV1ZSBiZWZvcmUgYXR0ZW1wdGluZyB0byBydW4gYW55dGhpbmcgZnJvbSB0aGVcbiAgICAgICAgICAgIC8vIG1hY3JvdGFzayBxdWV1ZS5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBGb3IgdGhlIFdlYlNvY2tldCB0cmFuc3BvcnQsIG1lc3NhZ2VzIGFsd2F5cyBhcnJpdmUgaW4gdGhlaXIgb3duXG4gICAgICAgICAgICAvLyBldmVudC4gVGhpcyBtZWFucyB0aGF0IGlmIGFueSBwcm9taXNlcyBhcmUgcmVzb2x2ZWQgZnJvbSB3aXRoaW4sXG4gICAgICAgICAgICAvLyB0aGVpciBjYWxsYmFja3Mgd2lsbCBhbHdheXMgZmluaXNoIGV4ZWN1dGlvbiBieSB0aGUgdGltZSB0aGVcbiAgICAgICAgICAgIC8vIG5leHQgbWVzc2FnZSBldmVudCBoYW5kbGVyIGlzIHJ1bi5cbiAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAvLyBJbiBvcmRlciB0byBlbXVsYXRlIHRoaXMgYmVoYXZpb3VyLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSBlYWNoXG4gICAgICAgICAgICAvLyBvbm1lc3NhZ2UgaGFuZGxlciBpcyBydW4gd2l0aGluIGl0J3Mgb3duIG1hY3JvdGFzay5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5vbm1lc3NhZ2Uoe2RhdGE6IG1zZ30pLCAwKVxuICAgICAgICAgIH0pXG4gICAgICAgICAgdGhpcy5wb2xsKClcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDIwNDpcbiAgICAgICAgICB0aGlzLnBvbGwoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgNDEwOlxuICAgICAgICAgIHRoaXMucmVhZHlTdGF0ZSA9IFNPQ0tFVF9TVEFURVMub3BlblxuICAgICAgICAgIHRoaXMub25vcGVuKHt9KVxuICAgICAgICAgIHRoaXMucG9sbCgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0MDM6XG4gICAgICAgICAgdGhpcy5vbmVycm9yKDQwMylcbiAgICAgICAgICB0aGlzLmNsb3NlKDEwMDgsIFwiZm9yYmlkZGVuXCIsIGZhbHNlKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgdGhpcy5vbmVycm9yKDUwMClcbiAgICAgICAgICB0aGlzLmNsb3NlQW5kUmV0cnkoMTAxMSwgXCJpbnRlcm5hbCBzZXJ2ZXIgZXJyb3JcIiwgNTAwKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGRlZmF1bHQ6IHRocm93IG5ldyBFcnJvcihgdW5oYW5kbGVkIHBvbGwgc3RhdHVzICR7c3RhdHVzfWApXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHNlbmQoYm9keSl7XG4gICAgdGhpcy5hamF4KFwiUE9TVFwiLCBib2R5LCAoKSA9PiB0aGlzLm9uZXJyb3IoXCJ0aW1lb3V0XCIpLCByZXNwID0+IHtcbiAgICAgIGlmKCFyZXNwIHx8IHJlc3Auc3RhdHVzICE9PSAyMDApe1xuICAgICAgICB0aGlzLm9uZXJyb3IocmVzcCAmJiByZXNwLnN0YXR1cylcbiAgICAgICAgdGhpcy5jbG9zZUFuZFJldHJ5KDEwMTEsIFwiaW50ZXJuYWwgc2VydmVyIGVycm9yXCIsIGZhbHNlKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjbG9zZShjb2RlLCByZWFzb24sIHdhc0NsZWFuKXtcbiAgICBmb3IobGV0IHJlcSBvZiB0aGlzLnJlcXMpeyByZXEuYWJvcnQoKSB9XG4gICAgdGhpcy5yZWFkeVN0YXRlID0gU09DS0VUX1NUQVRFUy5jbG9zZWRcbiAgICBsZXQgb3B0cyA9IE9iamVjdC5hc3NpZ24oe2NvZGU6IDEwMDAsIHJlYXNvbjogdW5kZWZpbmVkLCB3YXNDbGVhbjogdHJ1ZX0sIHtjb2RlLCByZWFzb24sIHdhc0NsZWFufSlcbiAgICBpZih0eXBlb2YoQ2xvc2VFdmVudCkgIT09IFwidW5kZWZpbmVkXCIpe1xuICAgICAgdGhpcy5vbmNsb3NlKG5ldyBDbG9zZUV2ZW50KFwiY2xvc2VcIiwgb3B0cykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub25jbG9zZShvcHRzKVxuICAgIH1cbiAgfVxuXG4gIGFqYXgobWV0aG9kLCBib2R5LCBvbkNhbGxlclRpbWVvdXQsIGNhbGxiYWNrKXtcbiAgICBsZXQgcmVxXG4gICAgbGV0IG9udGltZW91dCA9ICgpID0+IHtcbiAgICAgIHRoaXMucmVxcy5kZWxldGUocmVxKVxuICAgICAgb25DYWxsZXJUaW1lb3V0KClcbiAgICB9XG4gICAgcmVxID0gQWpheC5yZXF1ZXN0KG1ldGhvZCwgdGhpcy5lbmRwb2ludFVSTCgpLCBcImFwcGxpY2F0aW9uL2pzb25cIiwgYm9keSwgdGhpcy50aW1lb3V0LCBvbnRpbWVvdXQsIHJlc3AgPT4ge1xuICAgICAgdGhpcy5yZXFzLmRlbGV0ZShyZXEpXG4gICAgICBpZih0aGlzLmlzQWN0aXZlKCkpeyBjYWxsYmFjayhyZXNwKSB9XG4gICAgfSlcbiAgICB0aGlzLnJlcXMuYWRkKHJlcSlcbiAgfVxufVxuIiwgIi8qKlxuICogSW5pdGlhbGl6ZXMgdGhlIFByZXNlbmNlXG4gKiBAcGFyYW0ge0NoYW5uZWx9IGNoYW5uZWwgLSBUaGUgQ2hhbm5lbFxuICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBUaGUgb3B0aW9ucyxcbiAqICAgICAgICBmb3IgZXhhbXBsZSBge2V2ZW50czoge3N0YXRlOiBcInN0YXRlXCIsIGRpZmY6IFwiZGlmZlwifX1gXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByZXNlbmNlIHtcblxuICBjb25zdHJ1Y3RvcihjaGFubmVsLCBvcHRzID0ge30pe1xuICAgIGxldCBldmVudHMgPSBvcHRzLmV2ZW50cyB8fCB7c3RhdGU6IFwicHJlc2VuY2Vfc3RhdGVcIiwgZGlmZjogXCJwcmVzZW5jZV9kaWZmXCJ9XG4gICAgdGhpcy5zdGF0ZSA9IHt9XG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgIHRoaXMuY2hhbm5lbCA9IGNoYW5uZWxcbiAgICB0aGlzLmpvaW5SZWYgPSBudWxsXG4gICAgdGhpcy5jYWxsZXIgPSB7XG4gICAgICBvbkpvaW46IGZ1bmN0aW9uICgpeyB9LFxuICAgICAgb25MZWF2ZTogZnVuY3Rpb24gKCl7IH0sXG4gICAgICBvblN5bmM6IGZ1bmN0aW9uICgpeyB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFubmVsLm9uKGV2ZW50cy5zdGF0ZSwgbmV3U3RhdGUgPT4ge1xuICAgICAgbGV0IHtvbkpvaW4sIG9uTGVhdmUsIG9uU3luY30gPSB0aGlzLmNhbGxlclxuXG4gICAgICB0aGlzLmpvaW5SZWYgPSB0aGlzLmNoYW5uZWwuam9pblJlZigpXG4gICAgICB0aGlzLnN0YXRlID0gUHJlc2VuY2Uuc3luY1N0YXRlKHRoaXMuc3RhdGUsIG5ld1N0YXRlLCBvbkpvaW4sIG9uTGVhdmUpXG5cbiAgICAgIHRoaXMucGVuZGluZ0RpZmZzLmZvckVhY2goZGlmZiA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpXG4gICAgICB9KVxuICAgICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICAgICAgb25TeW5jKClcbiAgICB9KVxuXG4gICAgdGhpcy5jaGFubmVsLm9uKGV2ZW50cy5kaWZmLCBkaWZmID0+IHtcbiAgICAgIGxldCB7b25Kb2luLCBvbkxlYXZlLCBvblN5bmN9ID0gdGhpcy5jYWxsZXJcblxuICAgICAgaWYodGhpcy5pblBlbmRpbmdTeW5jU3RhdGUoKSl7XG4gICAgICAgIHRoaXMucGVuZGluZ0RpZmZzLnB1c2goZGlmZilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RhdGUgPSBQcmVzZW5jZS5zeW5jRGlmZih0aGlzLnN0YXRlLCBkaWZmLCBvbkpvaW4sIG9uTGVhdmUpXG4gICAgICAgIG9uU3luYygpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uSm9pbihjYWxsYmFjayl7IHRoaXMuY2FsbGVyLm9uSm9pbiA9IGNhbGxiYWNrIH1cblxuICBvbkxlYXZlKGNhbGxiYWNrKXsgdGhpcy5jYWxsZXIub25MZWF2ZSA9IGNhbGxiYWNrIH1cblxuICBvblN5bmMoY2FsbGJhY2speyB0aGlzLmNhbGxlci5vblN5bmMgPSBjYWxsYmFjayB9XG5cbiAgbGlzdChieSl7IHJldHVybiBQcmVzZW5jZS5saXN0KHRoaXMuc3RhdGUsIGJ5KSB9XG5cbiAgaW5QZW5kaW5nU3luY1N0YXRlKCl7XG4gICAgcmV0dXJuICF0aGlzLmpvaW5SZWYgfHwgKHRoaXMuam9pblJlZiAhPT0gdGhpcy5jaGFubmVsLmpvaW5SZWYoKSlcbiAgfVxuXG4gIC8vIGxvd2VyLWxldmVsIHB1YmxpYyBzdGF0aWMgQVBJXG5cbiAgLyoqXG4gICAqIFVzZWQgdG8gc3luYyB0aGUgbGlzdCBvZiBwcmVzZW5jZXMgb24gdGhlIHNlcnZlclxuICAgKiB3aXRoIHRoZSBjbGllbnQncyBzdGF0ZS4gQW4gb3B0aW9uYWwgYG9uSm9pbmAgYW5kIGBvbkxlYXZlYCBjYWxsYmFjayBjYW5cbiAgICogYmUgcHJvdmlkZWQgdG8gcmVhY3QgdG8gY2hhbmdlcyBpbiB0aGUgY2xpZW50J3MgbG9jYWwgcHJlc2VuY2VzIGFjcm9zc1xuICAgKiBkaXNjb25uZWN0cyBhbmQgcmVjb25uZWN0cyB3aXRoIHRoZSBzZXJ2ZXIuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcmVzZW5jZX1cbiAgICovXG4gIHN0YXRpYyBzeW5jU3RhdGUoY3VycmVudFN0YXRlLCBuZXdTdGF0ZSwgb25Kb2luLCBvbkxlYXZlKXtcbiAgICBsZXQgc3RhdGUgPSB0aGlzLmNsb25lKGN1cnJlbnRTdGF0ZSlcbiAgICBsZXQgam9pbnMgPSB7fVxuICAgIGxldCBsZWF2ZXMgPSB7fVxuXG4gICAgdGhpcy5tYXAoc3RhdGUsIChrZXksIHByZXNlbmNlKSA9PiB7XG4gICAgICBpZighbmV3U3RhdGVba2V5XSl7XG4gICAgICAgIGxlYXZlc1trZXldID0gcHJlc2VuY2VcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMubWFwKG5ld1N0YXRlLCAoa2V5LCBuZXdQcmVzZW5jZSkgPT4ge1xuICAgICAgbGV0IGN1cnJlbnRQcmVzZW5jZSA9IHN0YXRlW2tleV1cbiAgICAgIGlmKGN1cnJlbnRQcmVzZW5jZSl7XG4gICAgICAgIGxldCBuZXdSZWZzID0gbmV3UHJlc2VuY2UubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgICBsZXQgY3VyUmVmcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5tYXAobSA9PiBtLnBoeF9yZWYpXG4gICAgICAgIGxldCBqb2luZWRNZXRhcyA9IG5ld1ByZXNlbmNlLm1ldGFzLmZpbHRlcihtID0+IGN1clJlZnMuaW5kZXhPZihtLnBoeF9yZWYpIDwgMClcbiAgICAgICAgbGV0IGxlZnRNZXRhcyA9IGN1cnJlbnRQcmVzZW5jZS5tZXRhcy5maWx0ZXIobSA9PiBuZXdSZWZzLmluZGV4T2YobS5waHhfcmVmKSA8IDApXG4gICAgICAgIGlmKGpvaW5lZE1ldGFzLmxlbmd0aCA+IDApe1xuICAgICAgICAgIGpvaW5zW2tleV0gPSBuZXdQcmVzZW5jZVxuICAgICAgICAgIGpvaW5zW2tleV0ubWV0YXMgPSBqb2luZWRNZXRhc1xuICAgICAgICB9XG4gICAgICAgIGlmKGxlZnRNZXRhcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZWF2ZXNba2V5XSA9IHRoaXMuY2xvbmUoY3VycmVudFByZXNlbmNlKVxuICAgICAgICAgIGxlYXZlc1trZXldLm1ldGFzID0gbGVmdE1ldGFzXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGpvaW5zW2tleV0gPSBuZXdQcmVzZW5jZVxuICAgICAgfVxuICAgIH0pXG4gICAgcmV0dXJuIHRoaXMuc3luY0RpZmYoc3RhdGUsIHtqb2luczogam9pbnMsIGxlYXZlczogbGVhdmVzfSwgb25Kb2luLCBvbkxlYXZlKVxuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIFVzZWQgdG8gc3luYyBhIGRpZmYgb2YgcHJlc2VuY2Ugam9pbiBhbmQgbGVhdmVcbiAgICogZXZlbnRzIGZyb20gdGhlIHNlcnZlciwgYXMgdGhleSBoYXBwZW4uIExpa2UgYHN5bmNTdGF0ZWAsIGBzeW5jRGlmZmBcbiAgICogYWNjZXB0cyBvcHRpb25hbCBgb25Kb2luYCBhbmQgYG9uTGVhdmVgIGNhbGxiYWNrcyB0byByZWFjdCB0byBhIHVzZXJcbiAgICogam9pbmluZyBvciBsZWF2aW5nIGZyb20gYSBkZXZpY2UuXG4gICAqXG4gICAqIEByZXR1cm5zIHtQcmVzZW5jZX1cbiAgICovXG4gIHN0YXRpYyBzeW5jRGlmZihzdGF0ZSwgZGlmZiwgb25Kb2luLCBvbkxlYXZlKXtcbiAgICBsZXQge2pvaW5zLCBsZWF2ZXN9ID0gdGhpcy5jbG9uZShkaWZmKVxuICAgIGlmKCFvbkpvaW4peyBvbkpvaW4gPSBmdW5jdGlvbiAoKXsgfSB9XG4gICAgaWYoIW9uTGVhdmUpeyBvbkxlYXZlID0gZnVuY3Rpb24gKCl7IH0gfVxuXG4gICAgdGhpcy5tYXAoam9pbnMsIChrZXksIG5ld1ByZXNlbmNlKSA9PiB7XG4gICAgICBsZXQgY3VycmVudFByZXNlbmNlID0gc3RhdGVba2V5XVxuICAgICAgc3RhdGVba2V5XSA9IHRoaXMuY2xvbmUobmV3UHJlc2VuY2UpXG4gICAgICBpZihjdXJyZW50UHJlc2VuY2Upe1xuICAgICAgICBsZXQgam9pbmVkUmVmcyA9IHN0YXRlW2tleV0ubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgICBsZXQgY3VyTWV0YXMgPSBjdXJyZW50UHJlc2VuY2UubWV0YXMuZmlsdGVyKG0gPT4gam9pbmVkUmVmcy5pbmRleE9mKG0ucGh4X3JlZikgPCAwKVxuICAgICAgICBzdGF0ZVtrZXldLm1ldGFzLnVuc2hpZnQoLi4uY3VyTWV0YXMpXG4gICAgICB9XG4gICAgICBvbkpvaW4oa2V5LCBjdXJyZW50UHJlc2VuY2UsIG5ld1ByZXNlbmNlKVxuICAgIH0pXG4gICAgdGhpcy5tYXAobGVhdmVzLCAoa2V5LCBsZWZ0UHJlc2VuY2UpID0+IHtcbiAgICAgIGxldCBjdXJyZW50UHJlc2VuY2UgPSBzdGF0ZVtrZXldXG4gICAgICBpZighY3VycmVudFByZXNlbmNlKXsgcmV0dXJuIH1cbiAgICAgIGxldCByZWZzVG9SZW1vdmUgPSBsZWZ0UHJlc2VuY2UubWV0YXMubWFwKG0gPT4gbS5waHhfcmVmKVxuICAgICAgY3VycmVudFByZXNlbmNlLm1ldGFzID0gY3VycmVudFByZXNlbmNlLm1ldGFzLmZpbHRlcihwID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZnNUb1JlbW92ZS5pbmRleE9mKHAucGh4X3JlZikgPCAwXG4gICAgICB9KVxuICAgICAgb25MZWF2ZShrZXksIGN1cnJlbnRQcmVzZW5jZSwgbGVmdFByZXNlbmNlKVxuICAgICAgaWYoY3VycmVudFByZXNlbmNlLm1ldGFzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGRlbGV0ZSBzdGF0ZVtrZXldXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gc3RhdGVcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBhcnJheSBvZiBwcmVzZW5jZXMsIHdpdGggc2VsZWN0ZWQgbWV0YWRhdGEuXG4gICAqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcmVzZW5jZXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2hvb3NlclxuICAgKlxuICAgKiBAcmV0dXJucyB7UHJlc2VuY2V9XG4gICAqL1xuICBzdGF0aWMgbGlzdChwcmVzZW5jZXMsIGNob29zZXIpe1xuICAgIGlmKCFjaG9vc2VyKXsgY2hvb3NlciA9IGZ1bmN0aW9uIChrZXksIHByZXMpeyByZXR1cm4gcHJlcyB9IH1cblxuICAgIHJldHVybiB0aGlzLm1hcChwcmVzZW5jZXMsIChrZXksIHByZXNlbmNlKSA9PiB7XG4gICAgICByZXR1cm4gY2hvb3NlcihrZXksIHByZXNlbmNlKVxuICAgIH0pXG4gIH1cblxuICAvLyBwcml2YXRlXG5cbiAgc3RhdGljIG1hcChvYmosIGZ1bmMpe1xuICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopLm1hcChrZXkgPT4gZnVuYyhrZXksIG9ialtrZXldKSlcbiAgfVxuXG4gIHN0YXRpYyBjbG9uZShvYmopeyByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKSB9XG59XG4iLCAiLyogVGhlIGRlZmF1bHQgc2VyaWFsaXplciBmb3IgZW5jb2RpbmcgYW5kIGRlY29kaW5nIG1lc3NhZ2VzICovXG5pbXBvcnQge1xuICBDSEFOTkVMX0VWRU5UU1xufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEhFQURFUl9MRU5HVEg6IDEsXG4gIE1FVEFfTEVOR1RIOiA0LFxuICBLSU5EUzoge3B1c2g6IDAsIHJlcGx5OiAxLCBicm9hZGNhc3Q6IDJ9LFxuXG4gIGVuY29kZShtc2csIGNhbGxiYWNrKXtcbiAgICBpZihtc2cucGF5bG9hZC5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpe1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKHRoaXMuYmluYXJ5RW5jb2RlKG1zZykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBwYXlsb2FkID0gW21zZy5qb2luX3JlZiwgbXNnLnJlZiwgbXNnLnRvcGljLCBtc2cuZXZlbnQsIG1zZy5wYXlsb2FkXVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKEpTT04uc3RyaW5naWZ5KHBheWxvYWQpKVxuICAgIH1cbiAgfSxcblxuICBkZWNvZGUocmF3UGF5bG9hZCwgY2FsbGJhY2spe1xuICAgIGlmKHJhd1BheWxvYWQuY29uc3RydWN0b3IgPT09IEFycmF5QnVmZmVyKXtcbiAgICAgIHJldHVybiBjYWxsYmFjayh0aGlzLmJpbmFyeURlY29kZShyYXdQYXlsb2FkKSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IFtqb2luX3JlZiwgcmVmLCB0b3BpYywgZXZlbnQsIHBheWxvYWRdID0gSlNPTi5wYXJzZShyYXdQYXlsb2FkKVxuICAgICAgcmV0dXJuIGNhbGxiYWNrKHtqb2luX3JlZiwgcmVmLCB0b3BpYywgZXZlbnQsIHBheWxvYWR9KVxuICAgIH1cbiAgfSxcblxuICAvLyBwcml2YXRlXG5cbiAgYmluYXJ5RW5jb2RlKG1lc3NhZ2Upe1xuICAgIGxldCB7am9pbl9yZWYsIHJlZiwgZXZlbnQsIHRvcGljLCBwYXlsb2FkfSA9IG1lc3NhZ2VcbiAgICBsZXQgbWV0YUxlbmd0aCA9IHRoaXMuTUVUQV9MRU5HVEggKyBqb2luX3JlZi5sZW5ndGggKyByZWYubGVuZ3RoICsgdG9waWMubGVuZ3RoICsgZXZlbnQubGVuZ3RoXG4gICAgbGV0IGhlYWRlciA9IG5ldyBBcnJheUJ1ZmZlcih0aGlzLkhFQURFUl9MRU5HVEggKyBtZXRhTGVuZ3RoKVxuICAgIGxldCB2aWV3ID0gbmV3IERhdGFWaWV3KGhlYWRlcilcbiAgICBsZXQgb2Zmc2V0ID0gMFxuXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgdGhpcy5LSU5EUy5wdXNoKSAvLyBraW5kXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgam9pbl9yZWYubGVuZ3RoKVxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIHJlZi5sZW5ndGgpXG4gICAgdmlldy5zZXRVaW50OChvZmZzZXQrKywgdG9waWMubGVuZ3RoKVxuICAgIHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGV2ZW50Lmxlbmd0aClcbiAgICBBcnJheS5mcm9tKGpvaW5fcmVmLCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG4gICAgQXJyYXkuZnJvbShyZWYsIGNoYXIgPT4gdmlldy5zZXRVaW50OChvZmZzZXQrKywgY2hhci5jaGFyQ29kZUF0KDApKSlcbiAgICBBcnJheS5mcm9tKHRvcGljLCBjaGFyID0+IHZpZXcuc2V0VWludDgob2Zmc2V0KyssIGNoYXIuY2hhckNvZGVBdCgwKSkpXG4gICAgQXJyYXkuZnJvbShldmVudCwgY2hhciA9PiB2aWV3LnNldFVpbnQ4KG9mZnNldCsrLCBjaGFyLmNoYXJDb2RlQXQoMCkpKVxuXG4gICAgdmFyIGNvbWJpbmVkID0gbmV3IFVpbnQ4QXJyYXkoaGVhZGVyLmJ5dGVMZW5ndGggKyBwYXlsb2FkLmJ5dGVMZW5ndGgpXG4gICAgY29tYmluZWQuc2V0KG5ldyBVaW50OEFycmF5KGhlYWRlciksIDApXG4gICAgY29tYmluZWQuc2V0KG5ldyBVaW50OEFycmF5KHBheWxvYWQpLCBoZWFkZXIuYnl0ZUxlbmd0aClcblxuICAgIHJldHVybiBjb21iaW5lZC5idWZmZXJcbiAgfSxcblxuICBiaW5hcnlEZWNvZGUoYnVmZmVyKXtcbiAgICBsZXQgdmlldyA9IG5ldyBEYXRhVmlldyhidWZmZXIpXG4gICAgbGV0IGtpbmQgPSB2aWV3LmdldFVpbnQ4KDApXG4gICAgbGV0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuICAgIHN3aXRjaChraW5kKXtcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5wdXNoOiByZXR1cm4gdGhpcy5kZWNvZGVQdXNoKGJ1ZmZlciwgdmlldywgZGVjb2RlcilcbiAgICAgIGNhc2UgdGhpcy5LSU5EUy5yZXBseTogcmV0dXJuIHRoaXMuZGVjb2RlUmVwbHkoYnVmZmVyLCB2aWV3LCBkZWNvZGVyKVxuICAgICAgY2FzZSB0aGlzLktJTkRTLmJyb2FkY2FzdDogcmV0dXJuIHRoaXMuZGVjb2RlQnJvYWRjYXN0KGJ1ZmZlciwgdmlldywgZGVjb2RlcilcbiAgICB9XG4gIH0sXG5cbiAgZGVjb2RlUHVzaChidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCBqb2luUmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSlcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgyKVxuICAgIGxldCBldmVudFNpemUgPSB2aWV3LmdldFVpbnQ4KDMpXG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEggLSAxIC8vIHB1c2hlcyBoYXZlIG5vIHJlZlxuICAgIGxldCBqb2luUmVmID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgam9pblJlZlNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGpvaW5SZWZTaXplXG4gICAgbGV0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemVcbiAgICBsZXQgZXZlbnQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBldmVudFNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZVxuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgcmV0dXJuIHtqb2luX3JlZjogam9pblJlZiwgcmVmOiBudWxsLCB0b3BpYzogdG9waWMsIGV2ZW50OiBldmVudCwgcGF5bG9hZDogZGF0YX1cbiAgfSxcblxuICBkZWNvZGVSZXBseShidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCBqb2luUmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMSlcbiAgICBsZXQgcmVmU2l6ZSA9IHZpZXcuZ2V0VWludDgoMilcbiAgICBsZXQgdG9waWNTaXplID0gdmlldy5nZXRVaW50OCgzKVxuICAgIGxldCBldmVudFNpemUgPSB2aWV3LmdldFVpbnQ4KDQpXG4gICAgbGV0IG9mZnNldCA9IHRoaXMuSEVBREVSX0xFTkdUSCArIHRoaXMuTUVUQV9MRU5HVEhcbiAgICBsZXQgam9pblJlZiA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIGpvaW5SZWZTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBqb2luUmVmU2l6ZVxuICAgIGxldCByZWYgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyByZWZTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyByZWZTaXplXG4gICAgbGV0IHRvcGljID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgdG9waWNTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyB0b3BpY1NpemVcbiAgICBsZXQgZXZlbnQgPSBkZWNvZGVyLmRlY29kZShidWZmZXIuc2xpY2Uob2Zmc2V0LCBvZmZzZXQgKyBldmVudFNpemUpKVxuICAgIG9mZnNldCA9IG9mZnNldCArIGV2ZW50U2l6ZVxuICAgIGxldCBkYXRhID0gYnVmZmVyLnNsaWNlKG9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG4gICAgbGV0IHBheWxvYWQgPSB7c3RhdHVzOiBldmVudCwgcmVzcG9uc2U6IGRhdGF9XG4gICAgcmV0dXJuIHtqb2luX3JlZjogam9pblJlZiwgcmVmOiByZWYsIHRvcGljOiB0b3BpYywgZXZlbnQ6IENIQU5ORUxfRVZFTlRTLnJlcGx5LCBwYXlsb2FkOiBwYXlsb2FkfVxuICB9LFxuXG4gIGRlY29kZUJyb2FkY2FzdChidWZmZXIsIHZpZXcsIGRlY29kZXIpe1xuICAgIGxldCB0b3BpY1NpemUgPSB2aWV3LmdldFVpbnQ4KDEpXG4gICAgbGV0IGV2ZW50U2l6ZSA9IHZpZXcuZ2V0VWludDgoMilcbiAgICBsZXQgb2Zmc2V0ID0gdGhpcy5IRUFERVJfTEVOR1RIICsgMlxuICAgIGxldCB0b3BpYyA9IGRlY29kZXIuZGVjb2RlKGJ1ZmZlci5zbGljZShvZmZzZXQsIG9mZnNldCArIHRvcGljU2l6ZSkpXG4gICAgb2Zmc2V0ID0gb2Zmc2V0ICsgdG9waWNTaXplXG4gICAgbGV0IGV2ZW50ID0gZGVjb2Rlci5kZWNvZGUoYnVmZmVyLnNsaWNlKG9mZnNldCwgb2Zmc2V0ICsgZXZlbnRTaXplKSlcbiAgICBvZmZzZXQgPSBvZmZzZXQgKyBldmVudFNpemVcbiAgICBsZXQgZGF0YSA9IGJ1ZmZlci5zbGljZShvZmZzZXQsIGJ1ZmZlci5ieXRlTGVuZ3RoKVxuXG4gICAgcmV0dXJuIHtqb2luX3JlZjogbnVsbCwgcmVmOiBudWxsLCB0b3BpYzogdG9waWMsIGV2ZW50OiBldmVudCwgcGF5bG9hZDogZGF0YX1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIGdsb2JhbCxcbiAgcGh4V2luZG93LFxuICBDSEFOTkVMX0VWRU5UUyxcbiAgREVGQVVMVF9USU1FT1VULFxuICBERUZBVUxUX1ZTTixcbiAgU09DS0VUX1NUQVRFUyxcbiAgVFJBTlNQT1JUUyxcbiAgV1NfQ0xPU0VfTk9STUFMXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb3N1cmVcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQWpheCBmcm9tIFwiLi9hamF4XCJcbmltcG9ydCBDaGFubmVsIGZyb20gXCIuL2NoYW5uZWxcIlxuaW1wb3J0IExvbmdQb2xsIGZyb20gXCIuL2xvbmdwb2xsXCJcbmltcG9ydCBTZXJpYWxpemVyIGZyb20gXCIuL3NlcmlhbGl6ZXJcIlxuaW1wb3J0IFRpbWVyIGZyb20gXCIuL3RpbWVyXCJcblxuLyoqIEluaXRpYWxpemVzIHRoZSBTb2NrZXQgKlxuICpcbiAqIEZvciBJRTggc3VwcG9ydCB1c2UgYW4gRVM1LXNoaW0gKGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5kUG9pbnQgLSBUaGUgc3RyaW5nIFdlYlNvY2tldCBlbmRwb2ludCwgaWUsIGBcIndzOi8vZXhhbXBsZS5jb20vc29ja2V0XCJgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIndzczovL2V4YW1wbGUuY29tXCJgXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFwiL3NvY2tldFwiYCAoaW5oZXJpdGVkIGhvc3QgJiBwcm90b2NvbClcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBPcHRpb25hbCBjb25maWd1cmF0aW9uXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy50cmFuc3BvcnRdIC0gVGhlIFdlYnNvY2tldCBUcmFuc3BvcnQsIGZvciBleGFtcGxlIFdlYlNvY2tldCBvciBQaG9lbml4LkxvbmdQb2xsLlxuICpcbiAqIERlZmF1bHRzIHRvIFdlYlNvY2tldCB3aXRoIGF1dG9tYXRpYyBMb25nUG9sbCBmYWxsYmFjay5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRzLmVuY29kZV0gLSBUaGUgZnVuY3Rpb24gdG8gZW5jb2RlIG91dGdvaW5nIG1lc3NhZ2VzLlxuICpcbiAqIERlZmF1bHRzIHRvIEpTT04gZW5jb2Rlci5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5kZWNvZGVdIC0gVGhlIGZ1bmN0aW9uIHRvIGRlY29kZSBpbmNvbWluZyBtZXNzYWdlcy5cbiAqXG4gKiBEZWZhdWx0cyB0byBKU09OOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIChwYXlsb2FkLCBjYWxsYmFjaykgPT4gY2FsbGJhY2soSlNPTi5wYXJzZShwYXlsb2FkKSlcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBbb3B0cy50aW1lb3V0XSAtIFRoZSBkZWZhdWx0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzIHRvIHRyaWdnZXIgcHVzaCB0aW1lb3V0cy5cbiAqXG4gKiBEZWZhdWx0cyBgREVGQVVMVF9USU1FT1VUYFxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmhlYXJ0YmVhdEludGVydmFsTXNdIC0gVGhlIG1pbGxpc2VjIGludGVydmFsIHRvIHNlbmQgYSBoZWFydGJlYXQgbWVzc2FnZVxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLnJlY29ubmVjdEFmdGVyTXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0aGUgbWlsbGlzZWNcbiAqIHNvY2tldCByZWNvbm5lY3QgaW50ZXJ2YWwuXG4gKlxuICogRGVmYXVsdHMgdG8gc3RlcHBlZCBiYWNrb2ZmIG9mOlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMCwgNTAsIDEwMCwgMTUwLCAyMDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwXVt0cmllcyAtIDFdIHx8IDUwMDBcbiAqIH1cbiAqIGBgYGBcbiAqXG4gKiBAcGFyYW0ge251bWJlcn0gW29wdHMucmVqb2luQWZ0ZXJNc10gLSBUaGUgb3B0aW9uYWwgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBtaWxsaXNlY1xuICogcmVqb2luIGludGVydmFsIGZvciBpbmRpdmlkdWFsIGNoYW5uZWxzLlxuICpcbiAqIGBgYGphdmFzY3JpcHRcbiAqIGZ1bmN0aW9uKHRyaWVzKXtcbiAqICAgcmV0dXJuIFsxMDAwLCAyMDAwLCA1MDAwXVt0cmllcyAtIDFdIHx8IDEwMDAwXG4gKiB9XG4gKiBgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdHMubG9nZ2VyXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiBmb3Igc3BlY2lhbGl6ZWQgbG9nZ2luZywgaWU6XG4gKlxuICogYGBgamF2YXNjcmlwdFxuICogZnVuY3Rpb24oa2luZCwgbXNnLCBkYXRhKSB7XG4gKiAgIGNvbnNvbGUubG9nKGAke2tpbmR9OiAke21zZ31gLCBkYXRhKVxuICogfVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IFtvcHRzLmxvbmdwb2xsZXJUaW1lb3V0XSAtIFRoZSBtYXhpbXVtIHRpbWVvdXQgb2YgYSBsb25nIHBvbGwgQUpBWCByZXF1ZXN0LlxuICpcbiAqIERlZmF1bHRzIHRvIDIwcyAoZG91YmxlIHRoZSBzZXJ2ZXIgbG9uZyBwb2xsIHRpbWVyKS5cbiAqXG4gKiBAcGFyYW0geyhPYmplY3R8ZnVuY3Rpb24pfSBbb3B0cy5wYXJhbXNdIC0gVGhlIG9wdGlvbmFsIHBhcmFtcyB0byBwYXNzIHdoZW4gY29ubmVjdGluZ1xuICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmJpbmFyeVR5cGVdIC0gVGhlIGJpbmFyeSB0eXBlIHRvIHVzZSBmb3IgYmluYXJ5IFdlYlNvY2tldCBmcmFtZXMuXG4gKlxuICogRGVmYXVsdHMgdG8gXCJhcnJheWJ1ZmZlclwiXG4gKlxuICogQHBhcmFtIHt2c259IFtvcHRzLnZzbl0gLSBUaGUgc2VyaWFsaXplcidzIHByb3RvY29sIHZlcnNpb24gdG8gc2VuZCBvbiBjb25uZWN0LlxuICpcbiAqIERlZmF1bHRzIHRvIERFRkFVTFRfVlNOLlxuKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNvY2tldCB7XG4gIGNvbnN0cnVjdG9yKGVuZFBvaW50LCBvcHRzID0ge30pe1xuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MgPSB7b3BlbjogW10sIGNsb3NlOiBbXSwgZXJyb3I6IFtdLCBtZXNzYWdlOiBbXX1cbiAgICB0aGlzLmNoYW5uZWxzID0gW11cbiAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIHRoaXMucmVmID0gMFxuICAgIHRoaXMudGltZW91dCA9IG9wdHMudGltZW91dCB8fCBERUZBVUxUX1RJTUVPVVRcbiAgICB0aGlzLnRyYW5zcG9ydCA9IG9wdHMudHJhbnNwb3J0IHx8IGdsb2JhbC5XZWJTb2NrZXQgfHwgTG9uZ1BvbGxcbiAgICB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnMgPSAwXG4gICAgdGhpcy5kZWZhdWx0RW5jb2RlciA9IFNlcmlhbGl6ZXIuZW5jb2RlLmJpbmQoU2VyaWFsaXplcilcbiAgICB0aGlzLmRlZmF1bHREZWNvZGVyID0gU2VyaWFsaXplci5kZWNvZGUuYmluZChTZXJpYWxpemVyKVxuICAgIHRoaXMuY2xvc2VXYXNDbGVhbiA9IGZhbHNlXG4gICAgdGhpcy5iaW5hcnlUeXBlID0gb3B0cy5iaW5hcnlUeXBlIHx8IFwiYXJyYXlidWZmZXJcIlxuICAgIHRoaXMuY29ubmVjdENsb2NrID0gMVxuICAgIGlmKHRoaXMudHJhbnNwb3J0ICE9PSBMb25nUG9sbCl7XG4gICAgICB0aGlzLmVuY29kZSA9IG9wdHMuZW5jb2RlIHx8IHRoaXMuZGVmYXVsdEVuY29kZXJcbiAgICAgIHRoaXMuZGVjb2RlID0gb3B0cy5kZWNvZGUgfHwgdGhpcy5kZWZhdWx0RGVjb2RlclxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVuY29kZSA9IHRoaXMuZGVmYXVsdEVuY29kZXJcbiAgICAgIHRoaXMuZGVjb2RlID0gdGhpcy5kZWZhdWx0RGVjb2RlclxuICAgIH1cbiAgICBsZXQgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IG51bGxcbiAgICBpZihwaHhXaW5kb3cgJiYgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIpe1xuICAgICAgcGh4V2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCBfZSA9PiB7XG4gICAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgICAgdGhpcy5kaXNjb25uZWN0KClcbiAgICAgICAgICBhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID0gdGhpcy5jb25uZWN0Q2xvY2tcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIHBoeFdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwicGFnZXNob3dcIiwgX2UgPT4ge1xuICAgICAgICBpZihhd2FpdGluZ0Nvbm5lY3Rpb25PblBhZ2VTaG93ID09PSB0aGlzLmNvbm5lY3RDbG9jayl7XG4gICAgICAgICAgYXdhaXRpbmdDb25uZWN0aW9uT25QYWdlU2hvdyA9IG51bGxcbiAgICAgICAgICB0aGlzLmNvbm5lY3QoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgICB0aGlzLmhlYXJ0YmVhdEludGVydmFsTXMgPSBvcHRzLmhlYXJ0YmVhdEludGVydmFsTXMgfHwgMzAwMDBcbiAgICB0aGlzLnJlam9pbkFmdGVyTXMgPSAodHJpZXMpID0+IHtcbiAgICAgIGlmKG9wdHMucmVqb2luQWZ0ZXJNcyl7XG4gICAgICAgIHJldHVybiBvcHRzLnJlam9pbkFmdGVyTXModHJpZXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gWzEwMDAsIDIwMDAsIDUwMDBdW3RyaWVzIC0gMV0gfHwgMTAwMDBcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5yZWNvbm5lY3RBZnRlck1zID0gKHRyaWVzKSA9PiB7XG4gICAgICBpZihvcHRzLnJlY29ubmVjdEFmdGVyTXMpe1xuICAgICAgICByZXR1cm4gb3B0cy5yZWNvbm5lY3RBZnRlck1zKHRyaWVzKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFsxMCwgNTAsIDEwMCwgMTUwLCAyMDAsIDI1MCwgNTAwLCAxMDAwLCAyMDAwXVt0cmllcyAtIDFdIHx8IDUwMDBcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2dnZXIgPSBvcHRzLmxvZ2dlciB8fCBudWxsXG4gICAgdGhpcy5sb25ncG9sbGVyVGltZW91dCA9IG9wdHMubG9uZ3BvbGxlclRpbWVvdXQgfHwgMjAwMDBcbiAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUob3B0cy5wYXJhbXMgfHwge30pXG4gICAgdGhpcy5lbmRQb2ludCA9IGAke2VuZFBvaW50fS8ke1RSQU5TUE9SVFMud2Vic29ja2V0fWBcbiAgICB0aGlzLnZzbiA9IG9wdHMudnNuIHx8IERFRkFVTFRfVlNOXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lb3V0VGltZXIgPSBudWxsXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IG51bGxcbiAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG5ldyBUaW1lcigoKSA9PiB7XG4gICAgICB0aGlzLnRlYXJkb3duKCgpID0+IHRoaXMuY29ubmVjdCgpKVxuICAgIH0sIHRoaXMucmVjb25uZWN0QWZ0ZXJNcylcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBMb25nUG9sbCB0cmFuc3BvcnQgcmVmZXJlbmNlXG4gICAqL1xuICBnZXRMb25nUG9sbFRyYW5zcG9ydCgpeyByZXR1cm4gTG9uZ1BvbGwgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyBhbmQgcmVwbGFjZXMgdGhlIGFjdGl2ZSB0cmFuc3BvcnRcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbmV3VHJhbnNwb3J0IC0gVGhlIG5ldyB0cmFuc3BvcnQgY2xhc3MgdG8gaW5zdGFudGlhdGVcbiAgICpcbiAgICovXG4gIHJlcGxhY2VUcmFuc3BvcnQobmV3VHJhbnNwb3J0KXtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMuc2VuZEJ1ZmZlciA9IFtdXG4gICAgaWYodGhpcy5jb25uKXtcbiAgICAgIHRoaXMuY29ubi5jbG9zZSgpXG4gICAgICB0aGlzLmNvbm4gPSBudWxsXG4gICAgfVxuICAgIHRoaXMudHJhbnNwb3J0ID0gbmV3VHJhbnNwb3J0XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc29ja2V0IHByb3RvY29sXG4gICAqXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBwcm90b2NvbCgpeyByZXR1cm4gbG9jYXRpb24ucHJvdG9jb2wubWF0Y2goL15odHRwcy8pID8gXCJ3c3NcIiA6IFwid3NcIiB9XG5cbiAgLyoqXG4gICAqIFRoZSBmdWxseSBxdWFsaWZpZWQgc29ja2V0IHVybFxuICAgKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZW5kUG9pbnRVUkwoKXtcbiAgICBsZXQgdXJpID0gQWpheC5hcHBlbmRQYXJhbXMoXG4gICAgICBBamF4LmFwcGVuZFBhcmFtcyh0aGlzLmVuZFBvaW50LCB0aGlzLnBhcmFtcygpKSwge3ZzbjogdGhpcy52c259KVxuICAgIGlmKHVyaS5jaGFyQXQoMCkgIT09IFwiL1wiKXsgcmV0dXJuIHVyaSB9XG4gICAgaWYodXJpLmNoYXJBdCgxKSA9PT0gXCIvXCIpeyByZXR1cm4gYCR7dGhpcy5wcm90b2NvbCgpfToke3VyaX1gIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnByb3RvY29sKCl9Oi8vJHtsb2NhdGlvbi5ob3N0fSR7dXJpfWBcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNjb25uZWN0cyB0aGUgc29ja2V0XG4gICAqXG4gICAqIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvQ2xvc2VFdmVudCNTdGF0dXNfY29kZXMgZm9yIHZhbGlkIHN0YXR1cyBjb2Rlcy5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgLSBPcHRpb25hbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgYWZ0ZXIgc29ja2V0IGlzIGRpc2Nvbm5lY3RlZC5cbiAgICogQHBhcmFtIHtpbnRlZ2VyfSBjb2RlIC0gQSBzdGF0dXMgY29kZSBmb3IgZGlzY29ubmVjdGlvbiAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gQSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFzb24gdG8gZGlzY29ubmVjdC4gKE9wdGlvbmFsKVxuICAgKi9cbiAgZGlzY29ubmVjdChjYWxsYmFjaywgY29kZSwgcmVhc29uKXtcbiAgICB0aGlzLmNvbm5lY3RDbG9jaysrXG4gICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gdHJ1ZVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMudGVhcmRvd24oY2FsbGJhY2ssIGNvZGUsIHJlYXNvbilcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHBhcmFtcyB0byBzZW5kIHdoZW4gY29ubmVjdGluZywgZm9yIGV4YW1wbGUgYHt1c2VyX2lkOiB1c2VyVG9rZW59YFxuICAgKlxuICAgKiBQYXNzaW5nIHBhcmFtcyB0byBjb25uZWN0IGlzIGRlcHJlY2F0ZWQ7IHBhc3MgdGhlbSBpbiB0aGUgU29ja2V0IGNvbnN0cnVjdG9yIGluc3RlYWQ6XG4gICAqIGBuZXcgU29ja2V0KFwiL3NvY2tldFwiLCB7cGFyYW1zOiB7dXNlcl9pZDogdXNlclRva2VufX0pYC5cbiAgICovXG4gIGNvbm5lY3QocGFyYW1zKXtcbiAgICBpZihwYXJhbXMpe1xuICAgICAgY29uc29sZSAmJiBjb25zb2xlLmxvZyhcInBhc3NpbmcgcGFyYW1zIHRvIGNvbm5lY3QgaXMgZGVwcmVjYXRlZC4gSW5zdGVhZCBwYXNzIDpwYXJhbXMgdG8gdGhlIFNvY2tldCBjb25zdHJ1Y3RvclwiKVxuICAgICAgdGhpcy5wYXJhbXMgPSBjbG9zdXJlKHBhcmFtcylcbiAgICB9XG4gICAgaWYodGhpcy5jb25uKXsgcmV0dXJuIH1cblxuICAgIHRoaXMuY29ubmVjdENsb2NrKytcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIHRoaXMuY29ubiA9IG5ldyB0aGlzLnRyYW5zcG9ydCh0aGlzLmVuZFBvaW50VVJMKCkpXG4gICAgdGhpcy5jb25uLmJpbmFyeVR5cGUgPSB0aGlzLmJpbmFyeVR5cGVcbiAgICB0aGlzLmNvbm4udGltZW91dCA9IHRoaXMubG9uZ3BvbGxlclRpbWVvdXRcbiAgICB0aGlzLmNvbm4ub25vcGVuID0gKCkgPT4gdGhpcy5vbkNvbm5PcGVuKClcbiAgICB0aGlzLmNvbm4ub25lcnJvciA9IGVycm9yID0+IHRoaXMub25Db25uRXJyb3IoZXJyb3IpXG4gICAgdGhpcy5jb25uLm9ubWVzc2FnZSA9IGV2ZW50ID0+IHRoaXMub25Db25uTWVzc2FnZShldmVudClcbiAgICB0aGlzLmNvbm4ub25jbG9zZSA9IGV2ZW50ID0+IHRoaXMub25Db25uQ2xvc2UoZXZlbnQpXG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgbWVzc2FnZS4gT3ZlcnJpZGUgYHRoaXMubG9nZ2VyYCBmb3Igc3BlY2lhbGl6ZWQgbG9nZ2luZy4gbm9vcHMgYnkgZGVmYXVsdFxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2luZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbXNnXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuICBsb2coa2luZCwgbXNnLCBkYXRhKXsgdGhpcy5sb2dnZXIoa2luZCwgbXNnLCBkYXRhKSB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhIGxvZ2dlciBoYXMgYmVlbiBzZXQgb24gdGhpcyBzb2NrZXQuXG4gICAqL1xuICBoYXNMb2dnZXIoKXsgcmV0dXJuIHRoaXMubG9nZ2VyICE9PSBudWxsIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXJzIGNhbGxiYWNrcyBmb3IgY29ubmVjdGlvbiBvcGVuIGV2ZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZSBzb2NrZXQub25PcGVuKGZ1bmN0aW9uKCl7IGNvbnNvbGUuaW5mbyhcInRoZSBzb2NrZXQgd2FzIG9wZW5lZFwiKSB9KVxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFja1xuICAgKi9cbiAgb25PcGVuKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm9wZW4ucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gY2xvc2UgZXZlbnRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqL1xuICBvbkNsb3NlKGNhbGxiYWNrKXtcbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmNsb3NlLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlcnMgY2FsbGJhY2tzIGZvciBjb25uZWN0aW9uIGVycm9yIGV2ZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZSBzb2NrZXQub25FcnJvcihmdW5jdGlvbihlcnJvcil7IGFsZXJ0KFwiQW4gZXJyb3Igb2NjdXJyZWRcIikgfSlcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uRXJyb3IoY2FsbGJhY2spe1xuICAgIGxldCByZWYgPSB0aGlzLm1ha2VSZWYoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuZXJyb3IucHVzaChbcmVmLCBjYWxsYmFja10pXG4gICAgcmV0dXJuIHJlZlxuICB9XG5cbiAgLyoqXG4gICAqIFJlZ2lzdGVycyBjYWxsYmFja3MgZm9yIGNvbm5lY3Rpb24gbWVzc2FnZSBldmVudHNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAgICovXG4gIG9uTWVzc2FnZShjYWxsYmFjayl7XG4gICAgbGV0IHJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlLnB1c2goW3JlZiwgY2FsbGJhY2tdKVxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIC8qKlxuICAgKiBQaW5ncyB0aGUgc2VydmVyIGFuZCBpbnZva2VzIHRoZSBjYWxsYmFjayB3aXRoIHRoZSBSVFQgaW4gbWlsbGlzZWNvbmRzXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcGluZyB3YXMgcHVzaGVkIG9yIGZhbHNlIGlmIHVuYWJsZSB0byBiZSBwdXNoZWQuXG4gICAqL1xuICBwaW5nKGNhbGxiYWNrKXtcbiAgICBpZighdGhpcy5pc0Nvbm5lY3RlZCgpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICBsZXQgcmVmID0gdGhpcy5tYWtlUmVmKClcbiAgICBsZXQgc3RhcnRUaW1lID0gRGF0ZS5ub3coKVxuICAgIHRoaXMucHVzaCh7dG9waWM6IFwicGhvZW5peFwiLCBldmVudDogXCJoZWFydGJlYXRcIiwgcGF5bG9hZDoge30sIHJlZjogcmVmfSlcbiAgICBsZXQgb25Nc2dSZWYgPSB0aGlzLm9uTWVzc2FnZShtc2cgPT4ge1xuICAgICAgaWYobXNnLnJlZiA9PT0gcmVmKXtcbiAgICAgICAgdGhpcy5vZmYoW29uTXNnUmVmXSlcbiAgICAgICAgY2FsbGJhY2soRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgY2xlYXJIZWFydGJlYXRzKCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnRiZWF0VGltZXIpXG4gICAgY2xlYXJUaW1lb3V0KHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyKVxuICB9XG5cbiAgb25Db25uT3Blbigpe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGBjb25uZWN0ZWQgdG8gJHt0aGlzLmVuZFBvaW50VVJMKCl9YClcbiAgICB0aGlzLmNsb3NlV2FzQ2xlYW4gPSBmYWxzZVxuICAgIHRoaXMuZXN0YWJsaXNoZWRDb25uZWN0aW9ucysrXG4gICAgdGhpcy5mbHVzaFNlbmRCdWZmZXIoKVxuICAgIHRoaXMucmVjb25uZWN0VGltZXIucmVzZXQoKVxuICAgIHRoaXMucmVzZXRIZWFydGJlYXQoKVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mub3Blbi5mb3JFYWNoKChbLCBjYWxsYmFja10pID0+IGNhbGxiYWNrKCkpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgaGVhcnRiZWF0VGltZW91dCgpe1xuICAgIGlmKHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZil7XG4gICAgICB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYgPSBudWxsXG4gICAgICBpZih0aGlzLmhhc0xvZ2dlcigpKXsgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJoZWFydGJlYXQgdGltZW91dC4gQXR0ZW1wdGluZyB0byByZS1lc3RhYmxpc2ggY29ubmVjdGlvblwiKSB9XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgICAgdGhpcy5jbG9zZVdhc0NsZWFuID0gZmFsc2VcbiAgICAgIHRoaXMudGVhcmRvd24oKCkgPT4gdGhpcy5yZWNvbm5lY3RUaW1lci5zY2hlZHVsZVRpbWVvdXQoKSwgV1NfQ0xPU0VfTk9STUFMLCBcImhlYXJ0YmVhdCB0aW1lb3V0XCIpXG4gICAgfVxuICB9XG5cbiAgcmVzZXRIZWFydGJlYXQoKXtcbiAgICBpZih0aGlzLmNvbm4gJiYgdGhpcy5jb25uLnNraXBIZWFydGJlYXQpeyByZXR1cm4gfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpXG4gICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgfVxuXG4gIHRlYXJkb3duKGNhbGxiYWNrLCBjb2RlLCByZWFzb24pe1xuICAgIGlmKCF0aGlzLmNvbm4pe1xuICAgICAgcmV0dXJuIGNhbGxiYWNrICYmIGNhbGxiYWNrKClcbiAgICB9XG5cbiAgICB0aGlzLndhaXRGb3JCdWZmZXJEb25lKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuY29ubil7XG4gICAgICAgIGlmKGNvZGUpeyB0aGlzLmNvbm4uY2xvc2UoY29kZSwgcmVhc29uIHx8IFwiXCIpIH0gZWxzZSB7IHRoaXMuY29ubi5jbG9zZSgpIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy53YWl0Rm9yU29ja2V0Q2xvc2VkKCgpID0+IHtcbiAgICAgICAgaWYodGhpcy5jb25uKXtcbiAgICAgICAgICB0aGlzLmNvbm4ub25vcGVuID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubi5vbmVycm9yID0gZnVuY3Rpb24gKCl7IH0gLy8gbm9vcFxuICAgICAgICAgIHRoaXMuY29ubi5vbm1lc3NhZ2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgICAgICAgdGhpcy5jb25uLm9uY2xvc2UgPSBmdW5jdGlvbiAoKXsgfSAvLyBub29wXG4gICAgICAgICAgdGhpcy5jb25uID0gbnVsbFxuICAgICAgICB9XG5cbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2soKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgd2FpdEZvckJ1ZmZlckRvbmUoY2FsbGJhY2ssIHRyaWVzID0gMSl7XG4gICAgaWYodHJpZXMgPT09IDUgfHwgIXRoaXMuY29ubiB8fCAhdGhpcy5jb25uLmJ1ZmZlcmVkQW1vdW50KXtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy53YWl0Rm9yQnVmZmVyRG9uZShjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgd2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgPSAxKXtcbiAgICBpZih0cmllcyA9PT0gNSB8fCAhdGhpcy5jb25uIHx8IHRoaXMuY29ubi5yZWFkeVN0YXRlID09PSBTT0NLRVRfU1RBVEVTLmNsb3NlZCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMud2FpdEZvclNvY2tldENsb3NlZChjYWxsYmFjaywgdHJpZXMgKyAxKVxuICAgIH0sIDE1MCAqIHRyaWVzKVxuICB9XG5cbiAgb25Db25uQ2xvc2UoZXZlbnQpe1xuICAgIGxldCBjbG9zZUNvZGUgPSBldmVudCAmJiBldmVudC5jb2RlXG4gICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJ0cmFuc3BvcnRcIiwgXCJjbG9zZVwiLCBldmVudClcbiAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgIHRoaXMuY2xlYXJIZWFydGJlYXRzKClcbiAgICBpZighdGhpcy5jbG9zZVdhc0NsZWFuICYmIGNsb3NlQ29kZSAhPT0gMTAwMCl7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyLnNjaGVkdWxlVGltZW91dCgpXG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3MuY2xvc2UuZm9yRWFjaCgoWywgY2FsbGJhY2tdKSA9PiBjYWxsYmFjayhldmVudCkpXG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG4gIG9uQ29ubkVycm9yKGVycm9yKXtcbiAgICBpZih0aGlzLmhhc0xvZ2dlcigpKSB0aGlzLmxvZyhcInRyYW5zcG9ydFwiLCBlcnJvcilcbiAgICBsZXQgdHJhbnNwb3J0QmVmb3JlID0gdGhpcy50cmFuc3BvcnRcbiAgICBsZXQgZXN0YWJsaXNoZWRCZWZvcmUgPSB0aGlzLmVzdGFibGlzaGVkQ29ubmVjdGlvbnNcbiAgICB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLmVycm9yLmZvckVhY2goKFssIGNhbGxiYWNrXSkgPT4ge1xuICAgICAgY2FsbGJhY2soZXJyb3IsIHRyYW5zcG9ydEJlZm9yZSwgZXN0YWJsaXNoZWRCZWZvcmUpXG4gICAgfSlcbiAgICBpZih0cmFuc3BvcnRCZWZvcmUgPT09IHRoaXMudHJhbnNwb3J0IHx8IGVzdGFibGlzaGVkQmVmb3JlID4gMCl7XG4gICAgICB0aGlzLnRyaWdnZXJDaGFuRXJyb3IoKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgdHJpZ2dlckNoYW5FcnJvcigpe1xuICAgIHRoaXMuY2hhbm5lbHMuZm9yRWFjaChjaGFubmVsID0+IHtcbiAgICAgIGlmKCEoY2hhbm5lbC5pc0Vycm9yZWQoKSB8fCBjaGFubmVsLmlzTGVhdmluZygpIHx8IGNoYW5uZWwuaXNDbG9zZWQoKSkpe1xuICAgICAgICBjaGFubmVsLnRyaWdnZXIoQ0hBTk5FTF9FVkVOVFMuZXJyb3IpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgY29ubmVjdGlvblN0YXRlKCl7XG4gICAgc3dpdGNoKHRoaXMuY29ubiAmJiB0aGlzLmNvbm4ucmVhZHlTdGF0ZSl7XG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMuY29ubmVjdGluZzogcmV0dXJuIFwiY29ubmVjdGluZ1wiXG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMub3BlbjogcmV0dXJuIFwib3BlblwiXG4gICAgICBjYXNlIFNPQ0tFVF9TVEFURVMuY2xvc2luZzogcmV0dXJuIFwiY2xvc2luZ1wiXG4gICAgICBkZWZhdWx0OiByZXR1cm4gXCJjbG9zZWRcIlxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIGlzQ29ubmVjdGVkKCl7IHJldHVybiB0aGlzLmNvbm5lY3Rpb25TdGF0ZSgpID09PSBcIm9wZW5cIiB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqXG4gICAqIEBwYXJhbSB7Q2hhbm5lbH1cbiAgICovXG4gIHJlbW92ZShjaGFubmVsKXtcbiAgICB0aGlzLm9mZihjaGFubmVsLnN0YXRlQ2hhbmdlUmVmcylcbiAgICB0aGlzLmNoYW5uZWxzID0gdGhpcy5jaGFubmVscy5maWx0ZXIoYyA9PiBjLmpvaW5SZWYoKSAhPT0gY2hhbm5lbC5qb2luUmVmKCkpXG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBgb25PcGVuYCwgYG9uQ2xvc2VgLCBgb25FcnJvcixgIGFuZCBgb25NZXNzYWdlYCByZWdpc3RyYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3JlZnN9IC0gbGlzdCBvZiByZWZzIHJldHVybmVkIGJ5IGNhbGxzIHRvXG4gICAqICAgICAgICAgICAgICAgICBgb25PcGVuYCwgYG9uQ2xvc2VgLCBgb25FcnJvcixgIGFuZCBgb25NZXNzYWdlYFxuICAgKi9cbiAgb2ZmKHJlZnMpe1xuICAgIGZvcihsZXQga2V5IGluIHRoaXMuc3RhdGVDaGFuZ2VDYWxsYmFja3Mpe1xuICAgICAgdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrc1trZXldID0gdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrc1trZXldLmZpbHRlcigoW3JlZl0pID0+IHtcbiAgICAgICAgcmV0dXJuIHJlZnMuaW5kZXhPZihyZWYpID09PSAtMVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhdGVzIGEgbmV3IGNoYW5uZWwgZm9yIHRoZSBnaXZlbiB0b3BpY1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdG9waWNcbiAgICogQHBhcmFtIHtPYmplY3R9IGNoYW5QYXJhbXMgLSBQYXJhbWV0ZXJzIGZvciB0aGUgY2hhbm5lbFxuICAgKiBAcmV0dXJucyB7Q2hhbm5lbH1cbiAgICovXG4gIGNoYW5uZWwodG9waWMsIGNoYW5QYXJhbXMgPSB7fSl7XG4gICAgbGV0IGNoYW4gPSBuZXcgQ2hhbm5lbCh0b3BpYywgY2hhblBhcmFtcywgdGhpcylcbiAgICB0aGlzLmNoYW5uZWxzLnB1c2goY2hhbilcbiAgICByZXR1cm4gY2hhblxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBkYXRhXG4gICAqL1xuICBwdXNoKGRhdGEpe1xuICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpe1xuICAgICAgbGV0IHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWZ9ID0gZGF0YVxuICAgICAgdGhpcy5sb2coXCJwdXNoXCIsIGAke3RvcGljfSAke2V2ZW50fSAoJHtqb2luX3JlZn0sICR7cmVmfSlgLCBwYXlsb2FkKVxuICAgIH1cblxuICAgIGlmKHRoaXMuaXNDb25uZWN0ZWQoKSl7XG4gICAgICB0aGlzLmVuY29kZShkYXRhLCByZXN1bHQgPT4gdGhpcy5jb25uLnNlbmQocmVzdWx0KSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZW5kQnVmZmVyLnB1c2goKCkgPT4gdGhpcy5lbmNvZGUoZGF0YSwgcmVzdWx0ID0+IHRoaXMuY29ubi5zZW5kKHJlc3VsdCkpKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5leHQgbWVzc2FnZSByZWYsIGFjY291bnRpbmcgZm9yIG92ZXJmbG93c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgbWFrZVJlZigpe1xuICAgIGxldCBuZXdSZWYgPSB0aGlzLnJlZiArIDFcbiAgICBpZihuZXdSZWYgPT09IHRoaXMucmVmKXsgdGhpcy5yZWYgPSAwIH0gZWxzZSB7IHRoaXMucmVmID0gbmV3UmVmIH1cblxuICAgIHJldHVybiB0aGlzLnJlZi50b1N0cmluZygpXG4gIH1cblxuICBzZW5kSGVhcnRiZWF0KCl7XG4gICAgaWYodGhpcy5wZW5kaW5nSGVhcnRiZWF0UmVmICYmICF0aGlzLmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IHRoaXMubWFrZVJlZigpXG4gICAgdGhpcy5wdXNoKHt0b3BpYzogXCJwaG9lbml4XCIsIGV2ZW50OiBcImhlYXJ0YmVhdFwiLCBwYXlsb2FkOiB7fSwgcmVmOiB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWZ9KVxuICAgIHRoaXMuaGVhcnRiZWF0VGltZW91dFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLmhlYXJ0YmVhdFRpbWVvdXQoKSwgdGhpcy5oZWFydGJlYXRJbnRlcnZhbE1zKVxuICB9XG5cbiAgZmx1c2hTZW5kQnVmZmVyKCl7XG4gICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpICYmIHRoaXMuc2VuZEJ1ZmZlci5sZW5ndGggPiAwKXtcbiAgICAgIHRoaXMuc2VuZEJ1ZmZlci5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpXG4gICAgICB0aGlzLnNlbmRCdWZmZXIgPSBbXVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubk1lc3NhZ2UocmF3TWVzc2FnZSl7XG4gICAgdGhpcy5kZWNvZGUocmF3TWVzc2FnZS5kYXRhLCBtc2cgPT4ge1xuICAgICAgbGV0IHt0b3BpYywgZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWZ9ID0gbXNnXG4gICAgICBpZihyZWYgJiYgcmVmID09PSB0aGlzLnBlbmRpbmdIZWFydGJlYXRSZWYpe1xuICAgICAgICB0aGlzLmNsZWFySGVhcnRiZWF0cygpXG4gICAgICAgIHRoaXMucGVuZGluZ0hlYXJ0YmVhdFJlZiA9IG51bGxcbiAgICAgICAgdGhpcy5oZWFydGJlYXRUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZW5kSGVhcnRiZWF0KCksIHRoaXMuaGVhcnRiZWF0SW50ZXJ2YWxNcylcbiAgICAgIH1cblxuICAgICAgaWYodGhpcy5oYXNMb2dnZXIoKSkgdGhpcy5sb2coXCJyZWNlaXZlXCIsIGAke3BheWxvYWQuc3RhdHVzIHx8IFwiXCJ9ICR7dG9waWN9ICR7ZXZlbnR9ICR7cmVmICYmIFwiKFwiICsgcmVmICsgXCIpXCIgfHwgXCJcIn1gLCBwYXlsb2FkKVxuXG4gICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdGhpcy5jaGFubmVscy5sZW5ndGg7IGkrKyl7XG4gICAgICAgIGNvbnN0IGNoYW5uZWwgPSB0aGlzLmNoYW5uZWxzW2ldXG4gICAgICAgIGlmKCFjaGFubmVsLmlzTWVtYmVyKHRvcGljLCBldmVudCwgcGF5bG9hZCwgam9pbl9yZWYpKXsgY29udGludWUgfVxuICAgICAgICBjaGFubmVsLnRyaWdnZXIoZXZlbnQsIHBheWxvYWQsIHJlZiwgam9pbl9yZWYpXG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLnN0YXRlQ2hhbmdlQ2FsbGJhY2tzLm1lc3NhZ2UubGVuZ3RoOyBpKyspe1xuICAgICAgICBsZXQgWywgY2FsbGJhY2tdID0gdGhpcy5zdGF0ZUNoYW5nZUNhbGxiYWNrcy5tZXNzYWdlW2ldXG4gICAgICAgIGNhbGxiYWNrKG1zZylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbGVhdmVPcGVuVG9waWModG9waWMpe1xuICAgIGxldCBkdXBDaGFubmVsID0gdGhpcy5jaGFubmVscy5maW5kKGMgPT4gYy50b3BpYyA9PT0gdG9waWMgJiYgKGMuaXNKb2luZWQoKSB8fCBjLmlzSm9pbmluZygpKSlcbiAgICBpZihkdXBDaGFubmVsKXtcbiAgICAgIGlmKHRoaXMuaGFzTG9nZ2VyKCkpIHRoaXMubG9nKFwidHJhbnNwb3J0XCIsIGBsZWF2aW5nIGR1cGxpY2F0ZSB0b3BpYyBcIiR7dG9waWN9XCJgKVxuICAgICAgZHVwQ2hhbm5lbC5sZWF2ZSgpXG4gICAgfVxuICB9XG59IiwgIlxuZXhwb3J0IGNvbnN0IENPTlNFQ1VUSVZFX1JFTE9BRFMgPSBcImNvbnNlY3V0aXZlLXJlbG9hZHNcIlxuZXhwb3J0IGNvbnN0IE1BWF9SRUxPQURTID0gMTBcbmV4cG9ydCBjb25zdCBSRUxPQURfSklUVEVSX01JTiA9IDUwMDBcbmV4cG9ydCBjb25zdCBSRUxPQURfSklUVEVSX01BWCA9IDEwMDAwXG5leHBvcnQgY29uc3QgRkFJTFNBRkVfSklUVEVSID0gMzAwMDBcbmV4cG9ydCBjb25zdCBQSFhfRVZFTlRfQ0xBU1NFUyA9IFtcbiAgXCJwaHgtY2xpY2stbG9hZGluZ1wiLCBcInBoeC1jaGFuZ2UtbG9hZGluZ1wiLCBcInBoeC1zdWJtaXQtbG9hZGluZ1wiLFxuICBcInBoeC1rZXlkb3duLWxvYWRpbmdcIiwgXCJwaHgta2V5dXAtbG9hZGluZ1wiLCBcInBoeC1ibHVyLWxvYWRpbmdcIiwgXCJwaHgtZm9jdXMtbG9hZGluZ1wiXG5dXG5leHBvcnQgY29uc3QgUEhYX0NPTVBPTkVOVCA9IFwiZGF0YS1waHgtY29tcG9uZW50XCJcbmV4cG9ydCBjb25zdCBQSFhfTElWRV9MSU5LID0gXCJkYXRhLXBoeC1saW5rXCJcbmV4cG9ydCBjb25zdCBQSFhfVFJBQ0tfU1RBVElDID0gXCJ0cmFjay1zdGF0aWNcIlxuZXhwb3J0IGNvbnN0IFBIWF9MSU5LX1NUQVRFID0gXCJkYXRhLXBoeC1saW5rLXN0YXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfUkVGID0gXCJkYXRhLXBoeC1yZWZcIlxuZXhwb3J0IGNvbnN0IFBIWF9SRUZfU1JDID0gXCJkYXRhLXBoeC1yZWYtc3JjXCJcbmV4cG9ydCBjb25zdCBQSFhfVFJBQ0tfVVBMT0FEUyA9IFwidHJhY2stdXBsb2Fkc1wiXG5leHBvcnQgY29uc3QgUEhYX1VQTE9BRF9SRUYgPSBcImRhdGEtcGh4LXVwbG9hZC1yZWZcIlxuZXhwb3J0IGNvbnN0IFBIWF9QUkVGTElHSFRFRF9SRUZTID0gXCJkYXRhLXBoeC1wcmVmbGlnaHRlZC1yZWZzXCJcbmV4cG9ydCBjb25zdCBQSFhfRE9ORV9SRUZTID0gXCJkYXRhLXBoeC1kb25lLXJlZnNcIlxuZXhwb3J0IGNvbnN0IFBIWF9EUk9QX1RBUkdFVCA9IFwiZHJvcC10YXJnZXRcIlxuZXhwb3J0IGNvbnN0IFBIWF9BQ1RJVkVfRU5UUllfUkVGUyA9IFwiZGF0YS1waHgtYWN0aXZlLXJlZnNcIlxuZXhwb3J0IGNvbnN0IFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCA9IFwicGh4OmxpdmUtZmlsZTp1cGRhdGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfU0tJUCA9IFwiZGF0YS1waHgtc2tpcFwiXG5leHBvcnQgY29uc3QgUEhYX1BSVU5FID0gXCJkYXRhLXBoeC1wcnVuZVwiXG5leHBvcnQgY29uc3QgUEhYX1BBR0VfTE9BRElORyA9IFwicGFnZS1sb2FkaW5nXCJcbmV4cG9ydCBjb25zdCBQSFhfQ09OTkVDVEVEX0NMQVNTID0gXCJwaHgtY29ubmVjdGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfRElTQ09OTkVDVEVEX0NMQVNTID0gXCJwaHgtbG9hZGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX05PX0ZFRURCQUNLX0NMQVNTID0gXCJwaHgtbm8tZmVlZGJhY2tcIlxuZXhwb3J0IGNvbnN0IFBIWF9FUlJPUl9DTEFTUyA9IFwicGh4LWVycm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfUEFSRU5UX0lEID0gXCJkYXRhLXBoeC1wYXJlbnQtaWRcIlxuZXhwb3J0IGNvbnN0IFBIWF9NQUlOID0gXCJkYXRhLXBoeC1tYWluXCJcbmV4cG9ydCBjb25zdCBQSFhfUk9PVF9JRCA9IFwiZGF0YS1waHgtcm9vdC1pZFwiXG5leHBvcnQgY29uc3QgUEhYX1RSSUdHRVJfQUNUSU9OID0gXCJ0cmlnZ2VyLWFjdGlvblwiXG5leHBvcnQgY29uc3QgUEhYX0ZFRURCQUNLX0ZPUiA9IFwiZmVlZGJhY2stZm9yXCJcbmV4cG9ydCBjb25zdCBQSFhfSEFTX0ZPQ1VTRUQgPSBcInBoeC1oYXMtZm9jdXNlZFwiXG5leHBvcnQgY29uc3QgRk9DVVNBQkxFX0lOUFVUUyA9IFtcInRleHRcIiwgXCJ0ZXh0YXJlYVwiLCBcIm51bWJlclwiLCBcImVtYWlsXCIsIFwicGFzc3dvcmRcIiwgXCJzZWFyY2hcIiwgXCJ0ZWxcIiwgXCJ1cmxcIiwgXCJkYXRlXCIsIFwidGltZVwiLCBcImRhdGV0aW1lLWxvY2FsXCIsIFwiY29sb3JcIiwgXCJyYW5nZVwiXVxuZXhwb3J0IGNvbnN0IENIRUNLQUJMRV9JTlBVVFMgPSBbXCJjaGVja2JveFwiLCBcInJhZGlvXCJdXG5leHBvcnQgY29uc3QgUEhYX0hBU19TVUJNSVRURUQgPSBcInBoeC1oYXMtc3VibWl0dGVkXCJcbmV4cG9ydCBjb25zdCBQSFhfU0VTU0lPTiA9IFwiZGF0YS1waHgtc2Vzc2lvblwiXG5leHBvcnQgY29uc3QgUEhYX1ZJRVdfU0VMRUNUT1IgPSBgWyR7UEhYX1NFU1NJT059XWBcbmV4cG9ydCBjb25zdCBQSFhfU1RJQ0tZID0gXCJkYXRhLXBoeC1zdGlja3lcIlxuZXhwb3J0IGNvbnN0IFBIWF9TVEFUSUMgPSBcImRhdGEtcGh4LXN0YXRpY1wiXG5leHBvcnQgY29uc3QgUEhYX1JFQURPTkxZID0gXCJkYXRhLXBoeC1yZWFkb25seVwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVEID0gXCJkYXRhLXBoeC1kaXNhYmxlZFwiXG5leHBvcnQgY29uc3QgUEhYX0RJU0FCTEVfV0lUSCA9IFwiZGlzYWJsZS13aXRoXCJcbmV4cG9ydCBjb25zdCBQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUgPSBcImRhdGEtcGh4LWRpc2FibGUtd2l0aC1yZXN0b3JlXCJcbmV4cG9ydCBjb25zdCBQSFhfSE9PSyA9IFwiaG9va1wiXG5leHBvcnQgY29uc3QgUEhYX0RFQk9VTkNFID0gXCJkZWJvdW5jZVwiXG5leHBvcnQgY29uc3QgUEhYX1RIUk9UVExFID0gXCJ0aHJvdHRsZVwiXG5leHBvcnQgY29uc3QgUEhYX1VQREFURSA9IFwidXBkYXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfS0VZID0gXCJrZXlcIlxuZXhwb3J0IGNvbnN0IFBIWF9QUklWQVRFID0gXCJwaHhQcml2YXRlXCJcbmV4cG9ydCBjb25zdCBQSFhfQVVUT19SRUNPVkVSID0gXCJhdXRvLXJlY292ZXJcIlxuZXhwb3J0IGNvbnN0IFBIWF9MVl9ERUJVRyA9IFwicGh4OmxpdmUtc29ja2V0OmRlYnVnXCJcbmV4cG9ydCBjb25zdCBQSFhfTFZfUFJPRklMRSA9IFwicGh4OmxpdmUtc29ja2V0OnByb2ZpbGluZ1wiXG5leHBvcnQgY29uc3QgUEhYX0xWX0xBVEVOQ1lfU0lNID0gXCJwaHg6bGl2ZS1zb2NrZXQ6bGF0ZW5jeS1zaW1cIlxuZXhwb3J0IGNvbnN0IFBIWF9QUk9HUkVTUyA9IFwicHJvZ3Jlc3NcIlxuZXhwb3J0IGNvbnN0IExPQURFUl9USU1FT1VUID0gMVxuZXhwb3J0IGNvbnN0IEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQgPSAyMDBcbmV4cG9ydCBjb25zdCBCSU5ESU5HX1BSRUZJWCA9IFwicGh4LVwiXG5leHBvcnQgY29uc3QgUFVTSF9USU1FT1VUID0gMzAwMDBcbmV4cG9ydCBjb25zdCBMSU5LX0hFQURFUiA9IFwieC1yZXF1ZXN0ZWQtd2l0aFwiXG5leHBvcnQgY29uc3QgUkVTUE9OU0VfVVJMX0hFQURFUiA9IFwieC1yZXNwb25zZS11cmxcIlxuZXhwb3J0IGNvbnN0IERFQk9VTkNFX1RSSUdHRVIgPSBcImRlYm91bmNlLXRyaWdnZXJcIlxuZXhwb3J0IGNvbnN0IFRIUk9UVExFRCA9IFwidGhyb3R0bGVkXCJcbmV4cG9ydCBjb25zdCBERUJPVU5DRV9QUkVWX0tFWSA9IFwiZGVib3VuY2UtcHJldi1rZXlcIlxuZXhwb3J0IGNvbnN0IERFRkFVTFRTID0ge1xuICBkZWJvdW5jZTogMzAwLFxuICB0aHJvdHRsZTogMzAwXG59XG5cbi8vIFJlbmRlcmVkXG5leHBvcnQgY29uc3QgRFlOQU1JQ1MgPSBcImRcIlxuZXhwb3J0IGNvbnN0IFNUQVRJQyA9IFwic1wiXG5leHBvcnQgY29uc3QgQ09NUE9ORU5UUyA9IFwiY1wiXG5leHBvcnQgY29uc3QgRVZFTlRTID0gXCJlXCJcbmV4cG9ydCBjb25zdCBSRVBMWSA9IFwiclwiXG5leHBvcnQgY29uc3QgVElUTEUgPSBcInRcIlxuZXhwb3J0IGNvbnN0IFRFTVBMQVRFUyA9IFwicFwiXG4iLCAiaW1wb3J0IHtcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnRyeVVwbG9hZGVyIHtcbiAgY29uc3RydWN0b3IoZW50cnksIGNodW5rU2l6ZSwgbGl2ZVNvY2tldCl7XG4gICAgdGhpcy5saXZlU29ja2V0ID0gbGl2ZVNvY2tldFxuICAgIHRoaXMuZW50cnkgPSBlbnRyeVxuICAgIHRoaXMub2Zmc2V0ID0gMFxuICAgIHRoaXMuY2h1bmtTaXplID0gY2h1bmtTaXplXG4gICAgdGhpcy5jaHVua1RpbWVyID0gbnVsbFxuICAgIHRoaXMudXBsb2FkQ2hhbm5lbCA9IGxpdmVTb2NrZXQuY2hhbm5lbChgbHZ1OiR7ZW50cnkucmVmfWAsIHt0b2tlbjogZW50cnkubWV0YWRhdGEoKX0pXG4gIH1cblxuICBlcnJvcihyZWFzb24pe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLmNodW5rVGltZXIpXG4gICAgdGhpcy51cGxvYWRDaGFubmVsLmxlYXZlKClcbiAgICB0aGlzLmVudHJ5LmVycm9yKHJlYXNvbilcbiAgfVxuXG4gIHVwbG9hZCgpe1xuICAgIHRoaXMudXBsb2FkQ2hhbm5lbC5vbkVycm9yKHJlYXNvbiA9PiB0aGlzLmVycm9yKHJlYXNvbikpXG4gICAgdGhpcy51cGxvYWRDaGFubmVsLmpvaW4oKVxuICAgICAgLnJlY2VpdmUoXCJva1wiLCBfZGF0YSA9PiB0aGlzLnJlYWROZXh0Q2h1bmsoKSlcbiAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgcmVhc29uID0+IHRoaXMuZXJyb3IocmVhc29uKSlcbiAgfVxuXG4gIGlzRG9uZSgpeyByZXR1cm4gdGhpcy5vZmZzZXQgPj0gdGhpcy5lbnRyeS5maWxlLnNpemUgfVxuXG4gIHJlYWROZXh0Q2h1bmsoKXtcbiAgICBsZXQgcmVhZGVyID0gbmV3IHdpbmRvdy5GaWxlUmVhZGVyKClcbiAgICBsZXQgYmxvYiA9IHRoaXMuZW50cnkuZmlsZS5zbGljZSh0aGlzLm9mZnNldCwgdGhpcy5jaHVua1NpemUgKyB0aGlzLm9mZnNldClcbiAgICByZWFkZXIub25sb2FkID0gKGUpID0+IHtcbiAgICAgIGlmKGUudGFyZ2V0LmVycm9yID09PSBudWxsKXtcbiAgICAgICAgdGhpcy5vZmZzZXQgKz0gZS50YXJnZXQucmVzdWx0LmJ5dGVMZW5ndGhcbiAgICAgICAgdGhpcy5wdXNoQ2h1bmsoZS50YXJnZXQucmVzdWx0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGxvZ0Vycm9yKFwiUmVhZCBlcnJvcjogXCIgKyBlLnRhcmdldC5lcnJvcilcbiAgICAgIH1cbiAgICB9XG4gICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gIH1cblxuICBwdXNoQ2h1bmsoY2h1bmspe1xuICAgIGlmKCF0aGlzLnVwbG9hZENoYW5uZWwuaXNKb2luZWQoKSl7IHJldHVybiB9XG4gICAgdGhpcy51cGxvYWRDaGFubmVsLnB1c2goXCJjaHVua1wiLCBjaHVuaylcbiAgICAgIC5yZWNlaXZlKFwib2tcIiwgKCkgPT4ge1xuICAgICAgICB0aGlzLmVudHJ5LnByb2dyZXNzKCh0aGlzLm9mZnNldCAvIHRoaXMuZW50cnkuZmlsZS5zaXplKSAqIDEwMClcbiAgICAgICAgaWYoIXRoaXMuaXNEb25lKCkpe1xuICAgICAgICAgIHRoaXMuY2h1bmtUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5yZWFkTmV4dENodW5rKCksIHRoaXMubGl2ZVNvY2tldC5nZXRMYXRlbmN5U2ltKCkgfHwgMClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFBIWF9WSUVXX1NFTEVDVE9SXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBFbnRyeVVwbG9hZGVyIGZyb20gXCIuL2VudHJ5X3VwbG9hZGVyXCJcblxuZXhwb3J0IGxldCBsb2dFcnJvciA9IChtc2csIG9iaikgPT4gY29uc29sZS5lcnJvciAmJiBjb25zb2xlLmVycm9yKG1zZywgb2JqKVxuXG5leHBvcnQgbGV0IGlzQ2lkID0gKGNpZCkgPT4ge1xuICBsZXQgdHlwZSA9IHR5cGVvZihjaWQpXG4gIHJldHVybiB0eXBlID09PSBcIm51bWJlclwiIHx8ICh0eXBlID09PSBcInN0cmluZ1wiICYmIC9eKDB8WzEtOV1cXGQqKSQvLnRlc3QoY2lkKSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRldGVjdER1cGxpY2F0ZUlkcygpe1xuICBsZXQgaWRzID0gbmV3IFNldCgpXG4gIGxldCBlbGVtcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCIqW2lkXVwiKVxuICBmb3IobGV0IGkgPSAwLCBsZW4gPSBlbGVtcy5sZW5ndGg7IGkgPCBsZW47IGkrKyl7XG4gICAgaWYoaWRzLmhhcyhlbGVtc1tpXS5pZCkpe1xuICAgICAgY29uc29sZS5lcnJvcihgTXVsdGlwbGUgSURzIGRldGVjdGVkOiAke2VsZW1zW2ldLmlkfS4gRW5zdXJlIHVuaXF1ZSBlbGVtZW50IGlkcy5gKVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHMuYWRkKGVsZW1zW2ldLmlkKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgbGV0IGRlYnVnID0gKHZpZXcsIGtpbmQsIG1zZywgb2JqKSA9PiB7XG4gIGlmKHZpZXcubGl2ZVNvY2tldC5pc0RlYnVnRW5hYmxlZCgpKXtcbiAgICBjb25zb2xlLmxvZyhgJHt2aWV3LmlkfSAke2tpbmR9OiAke21zZ30gLSBgLCBvYmopXG4gIH1cbn1cblxuLy8gd3JhcHMgdmFsdWUgaW4gY2xvc3VyZSBvciByZXR1cm5zIGNsb3N1cmVcbmV4cG9ydCBsZXQgY2xvc3VyZSA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09IFwiZnVuY3Rpb25cIiA/IHZhbCA6IGZ1bmN0aW9uICgpeyByZXR1cm4gdmFsIH1cblxuZXhwb3J0IGxldCBjbG9uZSA9IChvYmopID0+IHsgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSkgfVxuXG5leHBvcnQgbGV0IGNsb3Nlc3RQaHhCaW5kaW5nID0gKGVsLCBiaW5kaW5nLCBib3JkZXJFbCkgPT4ge1xuICBkbyB7XG4gICAgaWYoZWwubWF0Y2hlcyhgWyR7YmluZGluZ31dYCkpeyByZXR1cm4gZWwgfVxuICAgIGVsID0gZWwucGFyZW50RWxlbWVudCB8fCBlbC5wYXJlbnROb2RlXG4gIH0gd2hpbGUoZWwgIT09IG51bGwgJiYgZWwubm9kZVR5cGUgPT09IDEgJiYgISgoYm9yZGVyRWwgJiYgYm9yZGVyRWwuaXNTYW1lTm9kZShlbCkpIHx8IGVsLm1hdGNoZXMoUEhYX1ZJRVdfU0VMRUNUT1IpKSlcbiAgcmV0dXJuIG51bGxcbn1cblxuZXhwb3J0IGxldCBpc09iamVjdCA9IChvYmopID0+IHtcbiAgcmV0dXJuIG9iaiAhPT0gbnVsbCAmJiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiICYmICEob2JqIGluc3RhbmNlb2YgQXJyYXkpXG59XG5cbmV4cG9ydCBsZXQgaXNFcXVhbE9iaiA9IChvYmoxLCBvYmoyKSA9PiBKU09OLnN0cmluZ2lmeShvYmoxKSA9PT0gSlNPTi5zdHJpbmdpZnkob2JqMilcblxuZXhwb3J0IGxldCBpc0VtcHR5ID0gKG9iaikgPT4ge1xuICBmb3IobGV0IHggaW4gb2JqKXsgcmV0dXJuIGZhbHNlIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZXhwb3J0IGxldCBtYXliZSA9IChlbCwgY2FsbGJhY2spID0+IGVsICYmIGNhbGxiYWNrKGVsKVxuXG5leHBvcnQgbGV0IGNoYW5uZWxVcGxvYWRlciA9IGZ1bmN0aW9uIChlbnRyaWVzLCBvbkVycm9yLCByZXNwLCBsaXZlU29ja2V0KXtcbiAgZW50cmllcy5mb3JFYWNoKGVudHJ5ID0+IHtcbiAgICBsZXQgZW50cnlVcGxvYWRlciA9IG5ldyBFbnRyeVVwbG9hZGVyKGVudHJ5LCByZXNwLmNvbmZpZy5jaHVua19zaXplLCBsaXZlU29ja2V0KVxuICAgIGVudHJ5VXBsb2FkZXIudXBsb2FkKClcbiAgfSlcbn1cbiIsICJsZXQgQnJvd3NlciA9IHtcbiAgY2FuUHVzaFN0YXRlKCl7IHJldHVybiAodHlwZW9mIChoaXN0b3J5LnB1c2hTdGF0ZSkgIT09IFwidW5kZWZpbmVkXCIpIH0sXG5cbiAgZHJvcExvY2FsKGxvY2FsU3RvcmFnZSwgbmFtZXNwYWNlLCBzdWJrZXkpe1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLmxvY2FsS2V5KG5hbWVzcGFjZSwgc3Via2V5KSlcbiAgfSxcblxuICB1cGRhdGVMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5LCBpbml0aWFsLCBmdW5jKXtcbiAgICBsZXQgY3VycmVudCA9IHRoaXMuZ2V0TG9jYWwobG9jYWxTdG9yYWdlLCBuYW1lc3BhY2UsIHN1YmtleSlcbiAgICBsZXQga2V5ID0gdGhpcy5sb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSlcbiAgICBsZXQgbmV3VmFsID0gY3VycmVudCA9PT0gbnVsbCA/IGluaXRpYWwgOiBmdW5jKGN1cnJlbnQpXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeShuZXdWYWwpKVxuICAgIHJldHVybiBuZXdWYWxcbiAgfSxcblxuICBnZXRMb2NhbChsb2NhbFN0b3JhZ2UsIG5hbWVzcGFjZSwgc3Via2V5KXtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLmxvY2FsS2V5KG5hbWVzcGFjZSwgc3Via2V5KSkpXG4gIH0sXG5cbiAgdXBkYXRlQ3VycmVudFN0YXRlKGNhbGxiYWNrKXtcbiAgICBpZighdGhpcy5jYW5QdXNoU3RhdGUoKSl7IHJldHVybiB9XG4gICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY2FsbGJhY2soaGlzdG9yeS5zdGF0ZSB8fCB7fSksIFwiXCIsIHdpbmRvdy5sb2NhdGlvbi5ocmVmKVxuICB9LFxuXG4gIHB1c2hTdGF0ZShraW5kLCBtZXRhLCB0byl7XG4gICAgaWYodGhpcy5jYW5QdXNoU3RhdGUoKSl7XG4gICAgICBpZih0byAhPT0gd2luZG93LmxvY2F0aW9uLmhyZWYpe1xuICAgICAgICBpZihtZXRhLnR5cGUgPT0gXCJyZWRpcmVjdFwiICYmIG1ldGEuc2Nyb2xsKXtcbiAgICAgICAgICAvLyBJZiB3ZSdyZSByZWRpcmVjdGluZyBzdG9yZSB0aGUgY3VycmVudCBzY3JvbGxZIGZvciB0aGUgY3VycmVudCBoaXN0b3J5IHN0YXRlLlxuICAgICAgICAgIGxldCBjdXJyZW50U3RhdGUgPSBoaXN0b3J5LnN0YXRlIHx8IHt9XG4gICAgICAgICAgY3VycmVudFN0YXRlLnNjcm9sbCA9IG1ldGEuc2Nyb2xsXG4gICAgICAgICAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoY3VycmVudFN0YXRlLCBcIlwiLCB3aW5kb3cubG9jYXRpb24uaHJlZilcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSBtZXRhLnNjcm9sbCAvLyBPbmx5IHN0b3JlIHRoZSBzY3JvbGwgaW4gdGhlIHJlZGlyZWN0IGNhc2UuXG4gICAgICAgIGhpc3Rvcnlba2luZCArIFwiU3RhdGVcIl0obWV0YSwgXCJcIiwgdG8gfHwgbnVsbCkgLy8gSUUgd2lsbCBjb2VyY2UgdW5kZWZpbmVkIHRvIHN0cmluZ1xuICAgICAgICBsZXQgaGFzaEVsID0gdGhpcy5nZXRIYXNoVGFyZ2V0RWwod2luZG93LmxvY2F0aW9uLmhhc2gpXG5cbiAgICAgICAgaWYoaGFzaEVsKXtcbiAgICAgICAgICBoYXNoRWwuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICB9IGVsc2UgaWYobWV0YS50eXBlID09PSBcInJlZGlyZWN0XCIpe1xuICAgICAgICAgIHdpbmRvdy5zY3JvbGwoMCwgMClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlZGlyZWN0KHRvKVxuICAgIH1cbiAgfSxcblxuICBzZXRDb29raWUobmFtZSwgdmFsdWUpe1xuICAgIGRvY3VtZW50LmNvb2tpZSA9IGAke25hbWV9PSR7dmFsdWV9YFxuICB9LFxuXG4gIGdldENvb2tpZShuYW1lKXtcbiAgICByZXR1cm4gZG9jdW1lbnQuY29va2llLnJlcGxhY2UobmV3IFJlZ0V4cChgKD86KD86XnwuKjtcXHMqKSR7bmFtZX1cXHMqXFw9XFxzKihbXjtdKikuKiQpfF4uKiRgKSwgXCIkMVwiKVxuICB9LFxuXG4gIHJlZGlyZWN0KHRvVVJMLCBmbGFzaCl7XG4gICAgaWYoZmxhc2gpeyBCcm93c2VyLnNldENvb2tpZShcIl9fcGhvZW5peF9mbGFzaF9fXCIsIGZsYXNoICsgXCI7IG1heC1hZ2U9NjAwMDA7IHBhdGg9L1wiKSB9XG4gICAgd2luZG93LmxvY2F0aW9uID0gdG9VUkxcbiAgfSxcblxuICBsb2NhbEtleShuYW1lc3BhY2UsIHN1YmtleSl7IHJldHVybiBgJHtuYW1lc3BhY2V9LSR7c3Via2V5fWAgfSxcblxuICBnZXRIYXNoVGFyZ2V0RWwobWF5YmVIYXNoKXtcbiAgICBsZXQgaGFzaCA9IG1heWJlSGFzaC50b1N0cmluZygpLnN1YnN0cmluZygxKVxuICAgIGlmKGhhc2ggPT09IFwiXCIpeyByZXR1cm4gfVxuICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChoYXNoKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGBhW25hbWU9XCIke2hhc2h9XCJdYClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCcm93c2VyXG4iLCAiaW1wb3J0IHtcbiAgQ0hFQ0tBQkxFX0lOUFVUUyxcbiAgREVCT1VOQ0VfUFJFVl9LRVksXG4gIERFQk9VTkNFX1RSSUdHRVIsXG4gIEZPQ1VTQUJMRV9JTlBVVFMsXG4gIFBIWF9DT01QT05FTlQsXG4gIFBIWF9FVkVOVF9DTEFTU0VTLFxuICBQSFhfSEFTX0ZPQ1VTRUQsXG4gIFBIWF9IQVNfU1VCTUlUVEVELFxuICBQSFhfTUFJTixcbiAgUEhYX05PX0ZFRURCQUNLX0NMQVNTLFxuICBQSFhfUEFSRU5UX0lELFxuICBQSFhfUFJJVkFURSxcbiAgUEhYX1JFRixcbiAgUEhYX1JFRl9TUkMsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfU0VTU0lPTixcbiAgUEhYX1NUQVRJQyxcbiAgUEhYX1VQTE9BRF9SRUYsXG4gIFBIWF9WSUVXX1NFTEVDVE9SLFxuICBQSFhfU1RJQ0tZLFxuICBUSFJPVFRMRURcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgbG9nRXJyb3Jcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5sZXQgRE9NID0ge1xuICBieUlkKGlkKXsgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKSB8fCBsb2dFcnJvcihgbm8gaWQgZm91bmQgZm9yICR7aWR9YCkgfSxcblxuICByZW1vdmVDbGFzcyhlbCwgY2xhc3NOYW1lKXtcbiAgICBlbC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSlcbiAgICBpZihlbC5jbGFzc0xpc3QubGVuZ3RoID09PSAwKXsgZWwucmVtb3ZlQXR0cmlidXRlKFwiY2xhc3NcIikgfVxuICB9LFxuXG4gIGFsbChub2RlLCBxdWVyeSwgY2FsbGJhY2spe1xuICAgIGlmKCFub2RlKXsgcmV0dXJuIFtdIH1cbiAgICBsZXQgYXJyYXkgPSBBcnJheS5mcm9tKG5vZGUucXVlcnlTZWxlY3RvckFsbChxdWVyeSkpXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gYXJyYXkuZm9yRWFjaChjYWxsYmFjaykgOiBhcnJheVxuICB9LFxuXG4gIGNoaWxkTm9kZUxlbmd0aChodG1sKXtcbiAgICBsZXQgdGVtcGxhdGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwidGVtcGxhdGVcIilcbiAgICB0ZW1wbGF0ZS5pbm5lckhUTUwgPSBodG1sXG4gICAgcmV0dXJuIHRlbXBsYXRlLmNvbnRlbnQuY2hpbGRFbGVtZW50Q291bnRcbiAgfSxcblxuICBpc1VwbG9hZElucHV0KGVsKXsgcmV0dXJuIGVsLnR5cGUgPT09IFwiZmlsZVwiICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikgIT09IG51bGwgfSxcblxuICBmaW5kVXBsb2FkSW5wdXRzKG5vZGUpeyByZXR1cm4gdGhpcy5hbGwobm9kZSwgYGlucHV0W3R5cGU9XCJmaWxlXCJdWyR7UEhYX1VQTE9BRF9SRUZ9XWApIH0sXG5cbiAgZmluZENvbXBvbmVudE5vZGVMaXN0KG5vZGUsIGNpZCl7XG4gICAgcmV0dXJuIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXWApLCBub2RlKVxuICB9LFxuXG4gIGlzUGh4RGVzdHJveWVkKG5vZGUpe1xuICAgIHJldHVybiBub2RlLmlkICYmIERPTS5wcml2YXRlKG5vZGUsIFwiZGVzdHJveWVkXCIpID8gdHJ1ZSA6IGZhbHNlXG4gIH0sXG5cbiAgbWFya1BoeENoaWxkRGVzdHJveWVkKGVsKXtcbiAgICBpZih0aGlzLmlzUGh4Q2hpbGQoZWwpKXsgZWwuc2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OLCBcIlwiKSB9XG4gICAgdGhpcy5wdXRQcml2YXRlKGVsLCBcImRlc3Ryb3llZFwiLCB0cnVlKVxuICB9LFxuXG4gIGZpbmRQaHhDaGlsZHJlbkluRnJhZ21lbnQoaHRtbCwgcGFyZW50SWQpe1xuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IGh0bWxcbiAgICByZXR1cm4gdGhpcy5maW5kUGh4Q2hpbGRyZW4odGVtcGxhdGUuY29udGVudCwgcGFyZW50SWQpXG4gIH0sXG5cbiAgaXNJZ25vcmVkKGVsLCBwaHhVcGRhdGUpe1xuICAgIHJldHVybiAoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkgfHwgZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtdXBkYXRlXCIpKSA9PT0gXCJpZ25vcmVcIlxuICB9LFxuXG4gIGlzUGh4VXBkYXRlKGVsLCBwaHhVcGRhdGUsIHVwZGF0ZVR5cGVzKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlICYmIHVwZGF0ZVR5cGVzLmluZGV4T2YoZWwuZ2V0QXR0cmlidXRlKHBoeFVwZGF0ZSkpID49IDBcbiAgfSxcblxuICBmaW5kUGh4U3RpY2t5KGVsKXsgcmV0dXJuIHRoaXMuYWxsKGVsLCBgWyR7UEhYX1NUSUNLWX1dYCkgfSxcblxuICBmaW5kUGh4Q2hpbGRyZW4oZWwsIHBhcmVudElkKXtcbiAgICByZXR1cm4gdGhpcy5hbGwoZWwsIGAke1BIWF9WSUVXX1NFTEVDVE9SfVske1BIWF9QQVJFTlRfSUR9PVwiJHtwYXJlbnRJZH1cIl1gKVxuICB9LFxuXG4gIGZpbmRQYXJlbnRDSURzKG5vZGUsIGNpZHMpe1xuICAgIGxldCBpbml0aWFsID0gbmV3IFNldChjaWRzKVxuICAgIHJldHVybiBjaWRzLnJlZHVjZSgoYWNjLCBjaWQpID0+IHtcbiAgICAgIGxldCBzZWxlY3RvciA9IGBbJHtQSFhfQ09NUE9ORU5UfT1cIiR7Y2lkfVwiXSBbJHtQSFhfQ09NUE9ORU5UfV1gXG5cbiAgICAgIHRoaXMuZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KHRoaXMuYWxsKG5vZGUsIHNlbGVjdG9yKSwgbm9kZSlcbiAgICAgICAgLm1hcChlbCA9PiBwYXJzZUludChlbC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkpKVxuICAgICAgICAuZm9yRWFjaChjaGlsZENJRCA9PiBhY2MuZGVsZXRlKGNoaWxkQ0lEKSlcblxuICAgICAgcmV0dXJuIGFjY1xuICAgIH0sIGluaXRpYWwpXG4gIH0sXG5cbiAgZmlsdGVyV2l0aGluU2FtZUxpdmVWaWV3KG5vZGVzLCBwYXJlbnQpe1xuICAgIGlmKHBhcmVudC5xdWVyeVNlbGVjdG9yKFBIWF9WSUVXX1NFTEVDVE9SKSl7XG4gICAgICByZXR1cm4gbm9kZXMuZmlsdGVyKGVsID0+IHRoaXMud2l0aGluU2FtZUxpdmVWaWV3KGVsLCBwYXJlbnQpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbm9kZXNcbiAgICB9XG4gIH0sXG5cbiAgd2l0aGluU2FtZUxpdmVWaWV3KG5vZGUsIHBhcmVudCl7XG4gICAgd2hpbGUobm9kZSA9IG5vZGUucGFyZW50Tm9kZSl7XG4gICAgICBpZihub2RlLmlzU2FtZU5vZGUocGFyZW50KSl7IHJldHVybiB0cnVlIH1cbiAgICAgIGlmKG5vZGUuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSAhPT0gbnVsbCl7IHJldHVybiBmYWxzZSB9XG4gICAgfVxuICB9LFxuXG4gIHByaXZhdGUoZWwsIGtleSl7IHJldHVybiBlbFtQSFhfUFJJVkFURV0gJiYgZWxbUEhYX1BSSVZBVEVdW2tleV0gfSxcblxuICBkZWxldGVQcml2YXRlKGVsLCBrZXkpeyBlbFtQSFhfUFJJVkFURV0gJiYgZGVsZXRlIChlbFtQSFhfUFJJVkFURV1ba2V5XSkgfSxcblxuICBwdXRQcml2YXRlKGVsLCBrZXksIHZhbHVlKXtcbiAgICBpZighZWxbUEhYX1BSSVZBVEVdKXsgZWxbUEhYX1BSSVZBVEVdID0ge30gfVxuICAgIGVsW1BIWF9QUklWQVRFXVtrZXldID0gdmFsdWVcbiAgfSxcblxuICB1cGRhdGVQcml2YXRlKGVsLCBrZXksIGRlZmF1bHRWYWwsIHVwZGF0ZUZ1bmMpe1xuICAgIGxldCBleGlzdGluZyA9IHRoaXMucHJpdmF0ZShlbCwga2V5KVxuICAgIGlmKGV4aXN0aW5nID09PSB1bmRlZmluZWQpe1xuICAgICAgdGhpcy5wdXRQcml2YXRlKGVsLCBrZXksIHVwZGF0ZUZ1bmMoZGVmYXVsdFZhbCkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHV0UHJpdmF0ZShlbCwga2V5LCB1cGRhdGVGdW5jKGV4aXN0aW5nKSlcbiAgICB9XG4gIH0sXG5cbiAgY29weVByaXZhdGVzKHRhcmdldCwgc291cmNlKXtcbiAgICBpZihzb3VyY2VbUEhYX1BSSVZBVEVdKXtcbiAgICAgIHRhcmdldFtQSFhfUFJJVkFURV0gPSBzb3VyY2VbUEhYX1BSSVZBVEVdXG4gICAgfVxuICB9LFxuXG4gIHB1dFRpdGxlKHN0cil7XG4gICAgbGV0IHRpdGxlRWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFwidGl0bGVcIilcbiAgICBsZXQge3ByZWZpeCwgc3VmZml4fSA9IHRpdGxlRWwuZGF0YXNldFxuICAgIGRvY3VtZW50LnRpdGxlID0gYCR7cHJlZml4IHx8IFwiXCJ9JHtzdHJ9JHtzdWZmaXggfHwgXCJcIn1gXG4gIH0sXG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBwaHhEZWJvdW5jZSwgZGVmYXVsdERlYm91bmNlLCBwaHhUaHJvdHRsZSwgZGVmYXVsdFRocm90dGxlLCBhc3luY0ZpbHRlciwgY2FsbGJhY2spe1xuICAgIGxldCBkZWJvdW5jZSA9IGVsLmdldEF0dHJpYnV0ZShwaHhEZWJvdW5jZSlcbiAgICBsZXQgdGhyb3R0bGUgPSBlbC5nZXRBdHRyaWJ1dGUocGh4VGhyb3R0bGUpXG4gICAgaWYoZGVib3VuY2UgPT09IFwiXCIpeyBkZWJvdW5jZSA9IGRlZmF1bHREZWJvdW5jZSB9XG4gICAgaWYodGhyb3R0bGUgPT09IFwiXCIpeyB0aHJvdHRsZSA9IGRlZmF1bHRUaHJvdHRsZSB9XG4gICAgbGV0IHZhbHVlID0gZGVib3VuY2UgfHwgdGhyb3R0bGVcbiAgICBzd2l0Y2godmFsdWUpe1xuICAgICAgY2FzZSBudWxsOiByZXR1cm4gY2FsbGJhY2soKVxuXG4gICAgICBjYXNlIFwiYmx1clwiOlxuICAgICAgICBpZih0aGlzLm9uY2UoZWwsIFwiZGVib3VuY2UtYmx1clwiKSl7XG4gICAgICAgICAgZWwuYWRkRXZlbnRMaXN0ZW5lcihcImJsdXJcIiwgKCkgPT4gY2FsbGJhY2soKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm5cblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgbGV0IHRpbWVvdXQgPSBwYXJzZUludCh2YWx1ZSlcbiAgICAgICAgbGV0IHRyaWdnZXIgPSAoKSA9PiB0aHJvdHRsZSA/IHRoaXMuZGVsZXRlUHJpdmF0ZShlbCwgVEhST1RUTEVEKSA6IGNhbGxiYWNrKClcbiAgICAgICAgbGV0IGN1cnJlbnRDeWNsZSA9IHRoaXMuaW5jQ3ljbGUoZWwsIERFQk9VTkNFX1RSSUdHRVIsIHRyaWdnZXIpXG4gICAgICAgIGlmKGlzTmFOKHRpbWVvdXQpKXsgcmV0dXJuIGxvZ0Vycm9yKGBpbnZhbGlkIHRocm90dGxlL2RlYm91bmNlIHZhbHVlOiAke3ZhbHVlfWApIH1cbiAgICAgICAgaWYodGhyb3R0bGUpe1xuICAgICAgICAgIGxldCBuZXdLZXlEb3duID0gZmFsc2VcbiAgICAgICAgICBpZihldmVudC50eXBlID09PSBcImtleWRvd25cIil7XG4gICAgICAgICAgICBsZXQgcHJldktleSA9IHRoaXMucHJpdmF0ZShlbCwgREVCT1VOQ0VfUFJFVl9LRVkpXG4gICAgICAgICAgICB0aGlzLnB1dFByaXZhdGUoZWwsIERFQk9VTkNFX1BSRVZfS0VZLCBldmVudC5rZXkpXG4gICAgICAgICAgICBuZXdLZXlEb3duID0gcHJldktleSAhPT0gZXZlbnQua2V5XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYoIW5ld0tleURvd24gJiYgdGhpcy5wcml2YXRlKGVsLCBUSFJPVFRMRUQpKXtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICB0aGlzLnB1dFByaXZhdGUoZWwsIFRIUk9UVExFRCwgdHJ1ZSlcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpZihhc3luY0ZpbHRlcigpKXsgdGhpcy50cmlnZ2VyQ3ljbGUoZWwsIERFQk9VTkNFX1RSSUdHRVIpIH1cbiAgICAgICAgICAgIH0sIHRpbWVvdXQpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgaWYoYXN5bmNGaWx0ZXIoKSl7IHRoaXMudHJpZ2dlckN5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSLCBjdXJyZW50Q3ljbGUpIH1cbiAgICAgICAgICB9LCB0aW1lb3V0KVxuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZvcm0gPSBlbC5mb3JtXG4gICAgICAgIGlmKGZvcm0gJiYgdGhpcy5vbmNlKGZvcm0sIFwiYmluZC1kZWJvdW5jZVwiKSl7XG4gICAgICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKFwic3VibWl0XCIsICgpID0+IHtcbiAgICAgICAgICAgIEFycmF5LmZyb20oKG5ldyBGb3JtRGF0YShmb3JtKSkuZW50cmllcygpLCAoW25hbWVdKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBpbnB1dCA9IGZvcm0ucXVlcnlTZWxlY3RvcihgW25hbWU9XCIke25hbWV9XCJdYClcbiAgICAgICAgICAgICAgdGhpcy5pbmNDeWNsZShpbnB1dCwgREVCT1VOQ0VfVFJJR0dFUilcbiAgICAgICAgICAgICAgdGhpcy5kZWxldGVQcml2YXRlKGlucHV0LCBUSFJPVFRMRUQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgaWYodGhpcy5vbmNlKGVsLCBcImJpbmQtZGVib3VuY2VcIikpe1xuICAgICAgICAgIGVsLmFkZEV2ZW50TGlzdGVuZXIoXCJibHVyXCIsICgpID0+IHRoaXMudHJpZ2dlckN5Y2xlKGVsLCBERUJPVU5DRV9UUklHR0VSKSlcbiAgICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0cmlnZ2VyQ3ljbGUoZWwsIGtleSwgY3VycmVudEN5Y2xlKXtcbiAgICBsZXQgW2N5Y2xlLCB0cmlnZ2VyXSA9IHRoaXMucHJpdmF0ZShlbCwga2V5KVxuICAgIGlmKCFjdXJyZW50Q3ljbGUpeyBjdXJyZW50Q3ljbGUgPSBjeWNsZSB9XG4gICAgaWYoY3VycmVudEN5Y2xlID09PSBjeWNsZSl7XG4gICAgICB0aGlzLmluY0N5Y2xlKGVsLCBrZXkpXG4gICAgICB0cmlnZ2VyKClcbiAgICB9XG4gIH0sXG5cbiAgb25jZShlbCwga2V5KXtcbiAgICBpZih0aGlzLnByaXZhdGUoZWwsIGtleSkgPT09IHRydWUpeyByZXR1cm4gZmFsc2UgfVxuICAgIHRoaXMucHV0UHJpdmF0ZShlbCwga2V5LCB0cnVlKVxuICAgIHJldHVybiB0cnVlXG4gIH0sXG5cbiAgaW5jQ3ljbGUoZWwsIGtleSwgdHJpZ2dlciA9IGZ1bmN0aW9uICgpeyB9KXtcbiAgICBsZXQgW2N1cnJlbnRDeWNsZV0gPSB0aGlzLnByaXZhdGUoZWwsIGtleSkgfHwgWzAsIHRyaWdnZXJdXG4gICAgY3VycmVudEN5Y2xlKytcbiAgICB0aGlzLnB1dFByaXZhdGUoZWwsIGtleSwgW2N1cnJlbnRDeWNsZSwgdHJpZ2dlcl0pXG4gICAgcmV0dXJuIGN1cnJlbnRDeWNsZVxuICB9LFxuXG4gIGRpc2NhcmRFcnJvcihjb250YWluZXIsIGVsLCBwaHhGZWVkYmFja0Zvcil7XG4gICAgbGV0IGZpZWxkID0gZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShwaHhGZWVkYmFja0ZvcilcbiAgICAvLyBUT0RPOiBSZW1vdmUgaWQgbG9va3VwIGFmdGVyIHdlIHVwZGF0ZSBQaG9lbml4IHRvIHVzZSBpbnB1dF9uYW1lIGluc3RlYWQgb2YgaW5wdXRfaWRcbiAgICBsZXQgaW5wdXQgPSBmaWVsZCAmJiBjb250YWluZXIucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtmaWVsZH1cIl0sIFtuYW1lPVwiJHtmaWVsZH1cIl1gKVxuICAgIGlmKCFpbnB1dCl7IHJldHVybiB9XG5cbiAgICBpZighKHRoaXMucHJpdmF0ZShpbnB1dCwgUEhYX0hBU19GT0NVU0VEKSB8fCB0aGlzLnByaXZhdGUoaW5wdXQuZm9ybSwgUEhYX0hBU19TVUJNSVRURUQpKSl7XG4gICAgICBlbC5jbGFzc0xpc3QuYWRkKFBIWF9OT19GRUVEQkFDS19DTEFTUylcbiAgICB9XG4gIH0sXG5cbiAgc2hvd0Vycm9yKGlucHV0RWwsIHBoeEZlZWRiYWNrRm9yKXtcbiAgICBpZihpbnB1dEVsLmlkIHx8IGlucHV0RWwubmFtZSl7XG4gICAgICB0aGlzLmFsbChpbnB1dEVsLmZvcm0sIGBbJHtwaHhGZWVkYmFja0Zvcn09XCIke2lucHV0RWwuaWR9XCJdLCBbJHtwaHhGZWVkYmFja0Zvcn09XCIke2lucHV0RWwubmFtZX1cIl1gLCAoZWwpID0+IHtcbiAgICAgICAgdGhpcy5yZW1vdmVDbGFzcyhlbCwgUEhYX05PX0ZFRURCQUNLX0NMQVNTKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgaXNQaHhDaGlsZChub2RlKXtcbiAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoUEhYX1BBUkVOVF9JRClcbiAgfSxcblxuICBpc1BoeFN0aWNreShub2RlKXtcbiAgICByZXR1cm4gbm9kZS5nZXRBdHRyaWJ1dGUgJiYgbm9kZS5nZXRBdHRyaWJ1dGUoUEhYX1NUSUNLWSkgIT09IG51bGxcbiAgfSxcblxuICBmaXJzdFBoeENoaWxkKGVsKXtcbiAgICByZXR1cm4gdGhpcy5pc1BoeENoaWxkKGVsKSA/IGVsIDogdGhpcy5hbGwoZWwsIGBbJHtQSFhfUEFSRU5UX0lEfV1gKVswXVxuICB9LFxuXG4gIGRpc3BhdGNoRXZlbnQodGFyZ2V0LCBuYW1lLCBvcHRzID0ge30pe1xuICAgIGxldCBidWJibGVzID0gb3B0cy5idWJibGVzID09PSB1bmRlZmluZWQgPyB0cnVlIDogISFvcHRzLmJ1YmJsZXNcbiAgICBsZXQgZXZlbnRPcHRzID0ge2J1YmJsZXM6IGJ1YmJsZXMsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogb3B0cy5kZXRhaWwgfHwge319XG4gICAgbGV0IGV2ZW50ID0gbmFtZSA9PT0gXCJjbGlja1wiID8gbmV3IE1vdXNlRXZlbnQoXCJjbGlja1wiLCBldmVudE9wdHMpIDogbmV3IEN1c3RvbUV2ZW50KG5hbWUsIGV2ZW50T3B0cylcbiAgICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbiAgfSxcblxuICBjbG9uZU5vZGUobm9kZSwgaHRtbCl7XG4gICAgaWYodHlwZW9mIChodG1sKSA9PT0gXCJ1bmRlZmluZWRcIil7XG4gICAgICByZXR1cm4gbm9kZS5jbG9uZU5vZGUodHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGNsb25lZCA9IG5vZGUuY2xvbmVOb2RlKGZhbHNlKVxuICAgICAgY2xvbmVkLmlubmVySFRNTCA9IGh0bWxcbiAgICAgIHJldHVybiBjbG9uZWRcbiAgICB9XG4gIH0sXG5cbiAgbWVyZ2VBdHRycyh0YXJnZXQsIHNvdXJjZSwgb3B0cyA9IHt9KXtcbiAgICBsZXQgZXhjbHVkZSA9IG9wdHMuZXhjbHVkZSB8fCBbXVxuICAgIGxldCBpc0lnbm9yZWQgPSBvcHRzLmlzSWdub3JlZFxuICAgIGxldCBzb3VyY2VBdHRycyA9IHNvdXJjZS5hdHRyaWJ1dGVzXG4gICAgZm9yKGxldCBpID0gc291cmNlQXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pe1xuICAgICAgbGV0IG5hbWUgPSBzb3VyY2VBdHRyc1tpXS5uYW1lXG4gICAgICBpZihleGNsdWRlLmluZGV4T2YobmFtZSkgPCAwKXsgdGFyZ2V0LnNldEF0dHJpYnV0ZShuYW1lLCBzb3VyY2UuZ2V0QXR0cmlidXRlKG5hbWUpKSB9XG4gICAgfVxuXG4gICAgbGV0IHRhcmdldEF0dHJzID0gdGFyZ2V0LmF0dHJpYnV0ZXNcbiAgICBmb3IobGV0IGkgPSB0YXJnZXRBdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSl7XG4gICAgICBsZXQgbmFtZSA9IHRhcmdldEF0dHJzW2ldLm5hbWVcbiAgICAgIGlmKGlzSWdub3JlZCl7XG4gICAgICAgIGlmKG5hbWUuc3RhcnRzV2l0aChcImRhdGEtXCIpICYmICFzb3VyY2UuaGFzQXR0cmlidXRlKG5hbWUpKXsgdGFyZ2V0LnJlbW92ZUF0dHJpYnV0ZShuYW1lKSB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZighc291cmNlLmhhc0F0dHJpYnV0ZShuYW1lKSl7IHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUobmFtZSkgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXJnZUZvY3VzZWRJbnB1dCh0YXJnZXQsIHNvdXJjZSl7XG4gICAgLy8gc2tpcCBzZWxlY3RzIGJlY2F1c2UgRkYgd2lsbCByZXNldCBoaWdobGlnaHRlZCBpbmRleCBmb3IgYW55IHNldEF0dHJpYnV0ZVxuICAgIGlmKCEodGFyZ2V0IGluc3RhbmNlb2YgSFRNTFNlbGVjdEVsZW1lbnQpKXsgRE9NLm1lcmdlQXR0cnModGFyZ2V0LCBzb3VyY2UsIHtleGNsdWRlOiBbXCJ2YWx1ZVwiXX0pIH1cbiAgICBpZihzb3VyY2UucmVhZE9ubHkpe1xuICAgICAgdGFyZ2V0LnNldEF0dHJpYnV0ZShcInJlYWRvbmx5XCIsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRhcmdldC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKVxuICAgIH1cbiAgfSxcblxuICBoYXNTZWxlY3Rpb25SYW5nZShlbCl7XG4gICAgcmV0dXJuIGVsLnNldFNlbGVjdGlvblJhbmdlICYmIChlbC50eXBlID09PSBcInRleHRcIiB8fCBlbC50eXBlID09PSBcInRleHRhcmVhXCIpXG4gIH0sXG5cbiAgcmVzdG9yZUZvY3VzKGZvY3VzZWQsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpe1xuICAgIGlmKCFET00uaXNUZXh0dWFsSW5wdXQoZm9jdXNlZCkpeyByZXR1cm4gfVxuICAgIGxldCB3YXNGb2N1c2VkID0gZm9jdXNlZC5tYXRjaGVzKFwiOmZvY3VzXCIpXG4gICAgaWYoZm9jdXNlZC5yZWFkT25seSl7IGZvY3VzZWQuYmx1cigpIH1cbiAgICBpZighd2FzRm9jdXNlZCl7IGZvY3VzZWQuZm9jdXMoKSB9XG4gICAgaWYodGhpcy5oYXNTZWxlY3Rpb25SYW5nZShmb2N1c2VkKSl7XG4gICAgICBmb2N1c2VkLnNldFNlbGVjdGlvblJhbmdlKHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpXG4gICAgfVxuICB9LFxuXG4gIGlzRm9ybUlucHV0KGVsKXsgcmV0dXJuIC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhKSQvaS50ZXN0KGVsLnRhZ05hbWUpICYmIGVsLnR5cGUgIT09IFwiYnV0dG9uXCIgfSxcblxuICBzeW5jQXR0cnNUb1Byb3BzKGVsKXtcbiAgICBpZihlbCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQgJiYgQ0hFQ0tBQkxFX0lOUFVUUy5pbmRleE9mKGVsLnR5cGUudG9Mb2NhbGVMb3dlckNhc2UoKSkgPj0gMCl7XG4gICAgICBlbC5jaGVja2VkID0gZWwuZ2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiKSAhPT0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBpc1RleHR1YWxJbnB1dChlbCl7IHJldHVybiBGT0NVU0FCTEVfSU5QVVRTLmluZGV4T2YoZWwudHlwZSkgPj0gMCB9LFxuXG4gIGlzTm93VHJpZ2dlckZvcm1FeHRlcm5hbChlbCwgcGh4VHJpZ2dlckV4dGVybmFsKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShwaHhUcmlnZ2VyRXh0ZXJuYWwpICE9PSBudWxsXG4gIH0sXG5cbiAgc3luY1BlbmRpbmdSZWYoZnJvbUVsLCB0b0VsLCBkaXNhYmxlV2l0aCl7XG4gICAgbGV0IHJlZiA9IGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICBpZihyZWYgPT09IG51bGwpeyByZXR1cm4gdHJ1ZSB9XG4gICAgbGV0IHJlZlNyYyA9IGZyb21FbC5nZXRBdHRyaWJ1dGUoUEhYX1JFRl9TUkMpXG5cbiAgICBpZihET00uaXNGb3JtSW5wdXQoZnJvbUVsKSB8fCBmcm9tRWwuZ2V0QXR0cmlidXRlKGRpc2FibGVXaXRoKSAhPT0gbnVsbCl7XG4gICAgICBpZihET00uaXNVcGxvYWRJbnB1dChmcm9tRWwpKXsgRE9NLm1lcmdlQXR0cnMoZnJvbUVsLCB0b0VsLCB7aXNJZ25vcmVkOiB0cnVlfSkgfVxuICAgICAgRE9NLnB1dFByaXZhdGUoZnJvbUVsLCBQSFhfUkVGLCB0b0VsKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIFBIWF9FVkVOVF9DTEFTU0VTLmZvckVhY2goY2xhc3NOYW1lID0+IHtcbiAgICAgICAgZnJvbUVsLmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpICYmIHRvRWwuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpXG4gICAgICB9KVxuICAgICAgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRiwgcmVmKVxuICAgICAgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1JFRl9TUkMsIHJlZlNyYylcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNsZWFuQ2hpbGROb2Rlcyhjb250YWluZXIsIHBoeFVwZGF0ZSl7XG4gICAgaWYoRE9NLmlzUGh4VXBkYXRlKGNvbnRhaW5lciwgcGh4VXBkYXRlLCBbXCJhcHBlbmRcIiwgXCJwcmVwZW5kXCJdKSl7XG4gICAgICBsZXQgdG9SZW1vdmUgPSBbXVxuICAgICAgY29udGFpbmVyLmNoaWxkTm9kZXMuZm9yRWFjaChjaGlsZE5vZGUgPT4ge1xuICAgICAgICBpZighY2hpbGROb2RlLmlkKXtcbiAgICAgICAgICAvLyBTa2lwIHdhcm5pbmcgaWYgaXQncyBhbiBlbXB0eSB0ZXh0IG5vZGUgKGUuZy4gYSBuZXctbGluZSlcbiAgICAgICAgICBsZXQgaXNFbXB0eVRleHROb2RlID0gY2hpbGROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBjaGlsZE5vZGUubm9kZVZhbHVlLnRyaW0oKSA9PT0gXCJcIlxuICAgICAgICAgIGlmKCFpc0VtcHR5VGV4dE5vZGUpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJvbmx5IEhUTUwgZWxlbWVudCB0YWdzIHdpdGggYW4gaWQgYXJlIGFsbG93ZWQgaW5zaWRlIGNvbnRhaW5lcnMgd2l0aCBwaHgtdXBkYXRlLlxcblxcblwiICtcbiAgICAgICAgICAgICAgYHJlbW92aW5nIGlsbGVnYWwgbm9kZTogXCIkeyhjaGlsZE5vZGUub3V0ZXJIVE1MIHx8IGNoaWxkTm9kZS5ub2RlVmFsdWUpLnRyaW0oKX1cIlxcblxcbmApXG4gICAgICAgICAgfVxuICAgICAgICAgIHRvUmVtb3ZlLnB1c2goY2hpbGROb2RlKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgdG9SZW1vdmUuZm9yRWFjaChjaGlsZE5vZGUgPT4gY2hpbGROb2RlLnJlbW92ZSgpKVxuICAgIH1cbiAgfSxcblxuICByZXBsYWNlUm9vdENvbnRhaW5lcihjb250YWluZXIsIHRhZ05hbWUsIGF0dHJzKXtcbiAgICBsZXQgcmV0YWluZWRBdHRycyA9IG5ldyBTZXQoW1wiaWRcIiwgUEhYX1NFU1NJT04sIFBIWF9TVEFUSUMsIFBIWF9NQUlOLCBQSFhfUk9PVF9JRF0pXG4gICAgaWYoY29udGFpbmVyLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZS50b0xvd2VyQ2FzZSgpKXtcbiAgICAgIEFycmF5LmZyb20oY29udGFpbmVyLmF0dHJpYnV0ZXMpXG4gICAgICAgIC5maWx0ZXIoYXR0ciA9PiAhcmV0YWluZWRBdHRycy5oYXMoYXR0ci5uYW1lLnRvTG93ZXJDYXNlKCkpKVxuICAgICAgICAuZm9yRWFjaChhdHRyID0+IGNvbnRhaW5lci5yZW1vdmVBdHRyaWJ1dGUoYXR0ci5uYW1lKSlcblxuICAgICAgT2JqZWN0LmtleXMoYXR0cnMpXG4gICAgICAgIC5maWx0ZXIobmFtZSA9PiAhcmV0YWluZWRBdHRycy5oYXMobmFtZS50b0xvd2VyQ2FzZSgpKSlcbiAgICAgICAgLmZvckVhY2goYXR0ciA9PiBjb250YWluZXIuc2V0QXR0cmlidXRlKGF0dHIsIGF0dHJzW2F0dHJdKSlcblxuICAgICAgcmV0dXJuIGNvbnRhaW5lclxuXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZXdDb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpXG4gICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaChhdHRyID0+IG5ld0NvbnRhaW5lci5zZXRBdHRyaWJ1dGUoYXR0ciwgYXR0cnNbYXR0cl0pKVxuICAgICAgcmV0YWluZWRBdHRycy5mb3JFYWNoKGF0dHIgPT4gbmV3Q29udGFpbmVyLnNldEF0dHJpYnV0ZShhdHRyLCBjb250YWluZXIuZ2V0QXR0cmlidXRlKGF0dHIpKSlcbiAgICAgIG5ld0NvbnRhaW5lci5pbm5lckhUTUwgPSBjb250YWluZXIuaW5uZXJIVE1MXG4gICAgICBjb250YWluZXIucmVwbGFjZVdpdGgobmV3Q29udGFpbmVyKVxuICAgICAgcmV0dXJuIG5ld0NvbnRhaW5lclxuICAgIH1cbiAgfSxcblxuICBnZXRTdGlja3koZWwsIG5hbWUsIGRlZmF1bHRWYWwpe1xuICAgIGxldCBvcCA9IChET00ucHJpdmF0ZShlbCwgXCJzdGlja3lcIikgfHwgW10pLmZpbmQoKFtleGlzdGluZ05hbWUsIF0pID0+IG5hbWUgPT09IGV4aXN0aW5nTmFtZSlcbiAgICBpZihvcCl7XG4gICAgICBsZXQgW19uYW1lLCBfb3AsIHN0YXNoZWRSZXN1bHRdID0gb3BcbiAgICAgIHJldHVybiBzdGFzaGVkUmVzdWx0XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0eXBlb2YoZGVmYXVsdFZhbCkgPT09IFwiZnVuY3Rpb25cIiA/IGRlZmF1bHRWYWwoKSA6IGRlZmF1bHRWYWxcbiAgICB9XG4gIH0sXG5cbiAgZGVsZXRlU3RpY2t5KGVsLCBuYW1lKXtcbiAgICB0aGlzLnVwZGF0ZVByaXZhdGUoZWwsIFwic3RpY2t5XCIsIFtdLCBvcHMgPT4ge1xuICAgICAgcmV0dXJuIG9wcy5maWx0ZXIoKFtleGlzdGluZ05hbWUsIF9dKSA9PiBleGlzdGluZ05hbWUgIT09IG5hbWUpXG4gICAgfSlcbiAgfSxcblxuICBwdXRTdGlja3koZWwsIG5hbWUsIG9wKXtcbiAgICBsZXQgc3Rhc2hlZFJlc3VsdCA9IG9wKGVsKVxuICAgIHRoaXMudXBkYXRlUHJpdmF0ZShlbCwgXCJzdGlja3lcIiwgW10sIG9wcyA9PiB7XG4gICAgICBsZXQgZXhpc3RpbmdJbmRleCA9IG9wcy5maW5kSW5kZXgoKFtleGlzdGluZ05hbWUsIF0pID0+IG5hbWUgPT09IGV4aXN0aW5nTmFtZSlcbiAgICAgIGlmKGV4aXN0aW5nSW5kZXggPj0gMCl7XG4gICAgICAgIG9wc1tleGlzdGluZ0luZGV4XSA9IFtuYW1lLCBvcCwgc3Rhc2hlZFJlc3VsdF1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wcy5wdXNoKFtuYW1lLCBvcCwgc3Rhc2hlZFJlc3VsdF0pXG4gICAgICB9XG4gICAgICByZXR1cm4gb3BzXG4gICAgfSlcbiAgfSxcblxuICBhcHBseVN0aWNreU9wZXJhdGlvbnMoZWwpe1xuICAgIGxldCBvcHMgPSBET00ucHJpdmF0ZShlbCwgXCJzdGlja3lcIilcbiAgICBpZighb3BzKXsgcmV0dXJuIH1cblxuICAgIG9wcy5mb3JFYWNoKChbbmFtZSwgb3AsIF9zdGFzaGVkXSkgPT4gdGhpcy5wdXRTdGlja3koZWwsIG5hbWUsIG9wKSlcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBET01cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlNcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcblxuaW1wb3J0IHtcbiAgY2hhbm5lbFVwbG9hZGVyLFxuICBsb2dFcnJvclxufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFVwbG9hZEVudHJ5IHtcbiAgc3RhdGljIGlzQWN0aXZlKGZpbGVFbCwgZmlsZSl7XG4gICAgbGV0IGlzTmV3ID0gZmlsZS5fcGh4UmVmID09PSB1bmRlZmluZWRcbiAgICBsZXQgYWN0aXZlUmVmcyA9IGZpbGVFbC5nZXRBdHRyaWJ1dGUoUEhYX0FDVElWRV9FTlRSWV9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNBY3RpdmUgPSBhY3RpdmVSZWZzLmluZGV4T2YoTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSkpID49IDBcbiAgICByZXR1cm4gZmlsZS5zaXplID4gMCAmJiAoaXNOZXcgfHwgaXNBY3RpdmUpXG4gIH1cblxuICBzdGF0aWMgaXNQcmVmbGlnaHRlZChmaWxlRWwsIGZpbGUpe1xuICAgIGxldCBwcmVmbGlnaHRlZFJlZnMgPSBmaWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKS5zcGxpdChcIixcIilcbiAgICBsZXQgaXNQcmVmbGlnaHRlZCA9IHByZWZsaWdodGVkUmVmcy5pbmRleE9mKExpdmVVcGxvYWRlci5nZW5GaWxlUmVmKGZpbGUpKSA+PSAwXG4gICAgcmV0dXJuIGlzUHJlZmxpZ2h0ZWQgJiYgdGhpcy5pc0FjdGl2ZShmaWxlRWwsIGZpbGUpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihmaWxlRWwsIGZpbGUsIHZpZXcpe1xuICAgIHRoaXMucmVmID0gTGl2ZVVwbG9hZGVyLmdlbkZpbGVSZWYoZmlsZSlcbiAgICB0aGlzLmZpbGVFbCA9IGZpbGVFbFxuICAgIHRoaXMuZmlsZSA9IGZpbGVcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5tZXRhID0gbnVsbFxuICAgIHRoaXMuX2lzQ2FuY2VsbGVkID0gZmFsc2VcbiAgICB0aGlzLl9pc0RvbmUgPSBmYWxzZVxuICAgIHRoaXMuX3Byb2dyZXNzID0gMFxuICAgIHRoaXMuX2xhc3RQcm9ncmVzc1NlbnQgPSAtMVxuICAgIHRoaXMuX29uRG9uZSA9IGZ1bmN0aW9uICgpeyB9XG4gICAgdGhpcy5fb25FbFVwZGF0ZWQgPSB0aGlzLm9uRWxVcGRhdGVkLmJpbmQodGhpcylcbiAgICB0aGlzLmZpbGVFbC5hZGRFdmVudExpc3RlbmVyKFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCwgdGhpcy5fb25FbFVwZGF0ZWQpXG4gIH1cblxuICBtZXRhZGF0YSgpeyByZXR1cm4gdGhpcy5tZXRhIH1cblxuICBwcm9ncmVzcyhwcm9ncmVzcyl7XG4gICAgdGhpcy5fcHJvZ3Jlc3MgPSBNYXRoLmZsb29yKHByb2dyZXNzKVxuICAgIGlmKHRoaXMuX3Byb2dyZXNzID4gdGhpcy5fbGFzdFByb2dyZXNzU2VudCl7XG4gICAgICBpZih0aGlzLl9wcm9ncmVzcyA+PSAxMDApe1xuICAgICAgICB0aGlzLl9wcm9ncmVzcyA9IDEwMFxuICAgICAgICB0aGlzLl9sYXN0UHJvZ3Jlc3NTZW50ID0gMTAwXG4gICAgICAgIHRoaXMuX2lzRG9uZSA9IHRydWVcbiAgICAgICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCAxMDAsICgpID0+IHtcbiAgICAgICAgICBMaXZlVXBsb2FkZXIudW50cmFja0ZpbGUodGhpcy5maWxlRWwsIHRoaXMuZmlsZSlcbiAgICAgICAgICB0aGlzLl9vbkRvbmUoKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbGFzdFByb2dyZXNzU2VudCA9IHRoaXMuX3Byb2dyZXNzXG4gICAgICAgIHRoaXMudmlldy5wdXNoRmlsZVByb2dyZXNzKHRoaXMuZmlsZUVsLCB0aGlzLnJlZiwgdGhpcy5fcHJvZ3Jlc3MpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FuY2VsKCl7XG4gICAgdGhpcy5faXNDYW5jZWxsZWQgPSB0cnVlXG4gICAgdGhpcy5faXNEb25lID0gdHJ1ZVxuICAgIHRoaXMuX29uRG9uZSgpXG4gIH1cblxuICBpc0RvbmUoKXsgcmV0dXJuIHRoaXMuX2lzRG9uZSB9XG5cbiAgZXJyb3IocmVhc29uID0gXCJmYWlsZWRcIil7XG4gICAgdGhpcy52aWV3LnB1c2hGaWxlUHJvZ3Jlc3ModGhpcy5maWxlRWwsIHRoaXMucmVmLCB7ZXJyb3I6IHJlYXNvbn0pXG4gICAgTGl2ZVVwbG9hZGVyLmNsZWFyRmlsZXModGhpcy5maWxlRWwpXG4gIH1cblxuICAvL3ByaXZhdGVcblxuICBvbkRvbmUoY2FsbGJhY2spe1xuICAgIHRoaXMuX29uRG9uZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuZmlsZUVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoUEhYX0xJVkVfRklMRV9VUERBVEVELCB0aGlzLl9vbkVsVXBkYXRlZClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBvbkVsVXBkYXRlZCgpe1xuICAgIGxldCBhY3RpdmVSZWZzID0gdGhpcy5maWxlRWwuZ2V0QXR0cmlidXRlKFBIWF9BQ1RJVkVfRU5UUllfUkVGUykuc3BsaXQoXCIsXCIpXG4gICAgaWYoYWN0aXZlUmVmcy5pbmRleE9mKHRoaXMucmVmKSA9PT0gLTEpeyB0aGlzLmNhbmNlbCgpIH1cbiAgfVxuXG4gIHRvUHJlZmxpZ2h0UGF5bG9hZCgpe1xuICAgIHJldHVybiB7XG4gICAgICBsYXN0X21vZGlmaWVkOiB0aGlzLmZpbGUubGFzdE1vZGlmaWVkLFxuICAgICAgbmFtZTogdGhpcy5maWxlLm5hbWUsXG4gICAgICBzaXplOiB0aGlzLmZpbGUuc2l6ZSxcbiAgICAgIHR5cGU6IHRoaXMuZmlsZS50eXBlLFxuICAgICAgcmVmOiB0aGlzLnJlZlxuICAgIH1cbiAgfVxuXG4gIHVwbG9hZGVyKHVwbG9hZGVycyl7XG4gICAgaWYodGhpcy5tZXRhLnVwbG9hZGVyKXtcbiAgICAgIGxldCBjYWxsYmFjayA9IHVwbG9hZGVyc1t0aGlzLm1ldGEudXBsb2FkZXJdIHx8IGxvZ0Vycm9yKGBubyB1cGxvYWRlciBjb25maWd1cmVkIGZvciAke3RoaXMubWV0YS51cGxvYWRlcn1gKVxuICAgICAgcmV0dXJuIHtuYW1lOiB0aGlzLm1ldGEudXBsb2FkZXIsIGNhbGxiYWNrOiBjYWxsYmFja31cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHtuYW1lOiBcImNoYW5uZWxcIiwgY2FsbGJhY2s6IGNoYW5uZWxVcGxvYWRlcn1cbiAgICB9XG4gIH1cblxuICB6aXBQb3N0RmxpZ2h0KHJlc3Ape1xuICAgIHRoaXMubWV0YSA9IHJlc3AuZW50cmllc1t0aGlzLnJlZl1cbiAgICBpZighdGhpcy5tZXRhKXsgbG9nRXJyb3IoYG5vIHByZWZsaWdodCB1cGxvYWQgcmVzcG9uc2UgcmV0dXJuZWQgd2l0aCByZWYgJHt0aGlzLnJlZn1gLCB7aW5wdXQ6IHRoaXMuZmlsZUVsLCByZXNwb25zZTogcmVzcH0pIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIFBIWF9ET05FX1JFRlMsXG4gIFBIWF9QUkVGTElHSFRFRF9SRUZTLFxuICBQSFhfVVBMT0FEX1JFRlxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xufSBmcm9tIFwiLi91dGlsc1wiXG5cbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBVcGxvYWRFbnRyeSBmcm9tIFwiLi91cGxvYWRfZW50cnlcIlxuXG5sZXQgbGl2ZVVwbG9hZGVyRmlsZVJlZiA9IDBcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTGl2ZVVwbG9hZGVyIHtcbiAgc3RhdGljIGdlbkZpbGVSZWYoZmlsZSl7XG4gICAgbGV0IHJlZiA9IGZpbGUuX3BoeFJlZlxuICAgIGlmKHJlZiAhPT0gdW5kZWZpbmVkKXtcbiAgICAgIHJldHVybiByZWZcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZS5fcGh4UmVmID0gKGxpdmVVcGxvYWRlckZpbGVSZWYrKykudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuIGZpbGUuX3BoeFJlZlxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRFbnRyeURhdGFVUkwoaW5wdXRFbCwgcmVmLCBjYWxsYmFjayl7XG4gICAgbGV0IGZpbGUgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpLmZpbmQoZmlsZSA9PiB0aGlzLmdlbkZpbGVSZWYoZmlsZSkgPT09IHJlZilcbiAgICBjYWxsYmFjayhVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGUpKVxuICB9XG5cbiAgc3RhdGljIGhhc1VwbG9hZHNJblByb2dyZXNzKGZvcm1FbCl7XG4gICAgbGV0IGFjdGl2ZSA9IDBcbiAgICBET00uZmluZFVwbG9hZElucHV0cyhmb3JtRWwpLmZvckVhY2goaW5wdXQgPT4ge1xuICAgICAgaWYoaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSAhPT0gaW5wdXQuZ2V0QXR0cmlidXRlKFBIWF9ET05FX1JFRlMpKXtcbiAgICAgICAgYWN0aXZlKytcbiAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBhY3RpdmUgPiAwXG4gIH1cblxuICBzdGF0aWMgc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKXtcbiAgICBsZXQgZmlsZXMgPSB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0RWwpXG4gICAgbGV0IGZpbGVEYXRhID0ge31cbiAgICBmaWxlcy5mb3JFYWNoKGZpbGUgPT4ge1xuICAgICAgbGV0IGVudHJ5ID0ge3BhdGg6IGlucHV0RWwubmFtZX1cbiAgICAgIGxldCB1cGxvYWRSZWYgPSBpbnB1dEVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRilcbiAgICAgIGZpbGVEYXRhW3VwbG9hZFJlZl0gPSBmaWxlRGF0YVt1cGxvYWRSZWZdIHx8IFtdXG4gICAgICBlbnRyeS5yZWYgPSB0aGlzLmdlbkZpbGVSZWYoZmlsZSlcbiAgICAgIGVudHJ5Lm5hbWUgPSBmaWxlLm5hbWUgfHwgZW50cnkucmVmXG4gICAgICBlbnRyeS50eXBlID0gZmlsZS50eXBlXG4gICAgICBlbnRyeS5zaXplID0gZmlsZS5zaXplXG4gICAgICBmaWxlRGF0YVt1cGxvYWRSZWZdLnB1c2goZW50cnkpXG4gICAgfSlcbiAgICByZXR1cm4gZmlsZURhdGFcbiAgfVxuXG4gIHN0YXRpYyBjbGVhckZpbGVzKGlucHV0RWwpe1xuICAgIGlucHV0RWwudmFsdWUgPSBudWxsXG4gICAgaW5wdXRFbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpXG4gICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBbXSlcbiAgfVxuXG4gIHN0YXRpYyB1bnRyYWNrRmlsZShpbnB1dEVsLCBmaWxlKXtcbiAgICBET00ucHV0UHJpdmF0ZShpbnB1dEVsLCBcImZpbGVzXCIsIERPTS5wcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIikuZmlsdGVyKGYgPT4gIU9iamVjdC5pcyhmLCBmaWxlKSkpXG4gIH1cblxuICBzdGF0aWMgdHJhY2tGaWxlcyhpbnB1dEVsLCBmaWxlcyl7XG4gICAgaWYoaW5wdXRFbC5nZXRBdHRyaWJ1dGUoXCJtdWx0aXBsZVwiKSAhPT0gbnVsbCl7XG4gICAgICBsZXQgbmV3RmlsZXMgPSBmaWxlcy5maWx0ZXIoZmlsZSA9PiAhdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5maW5kKGYgPT4gT2JqZWN0LmlzKGYsIGZpbGUpKSlcbiAgICAgIERPTS5wdXRQcml2YXRlKGlucHV0RWwsIFwiZmlsZXNcIiwgdGhpcy5hY3RpdmVGaWxlcyhpbnB1dEVsKS5jb25jYXQobmV3RmlsZXMpKVxuICAgICAgaW5wdXRFbC52YWx1ZSA9IG51bGxcbiAgICB9IGVsc2Uge1xuICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXRFbCwgXCJmaWxlc1wiLCBmaWxlcylcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYWN0aXZlRmlsZUlucHV0cyhmb3JtRWwpe1xuICAgIGxldCBmaWxlSW5wdXRzID0gRE9NLmZpbmRVcGxvYWRJbnB1dHMoZm9ybUVsKVxuICAgIHJldHVybiBBcnJheS5mcm9tKGZpbGVJbnB1dHMpLmZpbHRlcihlbCA9PiBlbC5maWxlcyAmJiB0aGlzLmFjdGl2ZUZpbGVzKGVsKS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGFjdGl2ZUZpbGVzKGlucHV0KXtcbiAgICByZXR1cm4gKERPTS5wcml2YXRlKGlucHV0LCBcImZpbGVzXCIpIHx8IFtdKS5maWx0ZXIoZiA9PiBVcGxvYWRFbnRyeS5pc0FjdGl2ZShpbnB1dCwgZikpXG4gIH1cblxuICBzdGF0aWMgaW5wdXRzQXdhaXRpbmdQcmVmbGlnaHQoZm9ybUVsKXtcbiAgICBsZXQgZmlsZUlucHV0cyA9IERPTS5maW5kVXBsb2FkSW5wdXRzKGZvcm1FbClcbiAgICByZXR1cm4gQXJyYXkuZnJvbShmaWxlSW5wdXRzKS5maWx0ZXIoaW5wdXQgPT4gdGhpcy5maWxlc0F3YWl0aW5nUHJlZmxpZ2h0KGlucHV0KS5sZW5ndGggPiAwKVxuICB9XG5cbiAgc3RhdGljIGZpbGVzQXdhaXRpbmdQcmVmbGlnaHQoaW5wdXQpe1xuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZpbGVzKGlucHV0KS5maWx0ZXIoZiA9PiAhVXBsb2FkRW50cnkuaXNQcmVmbGlnaHRlZChpbnB1dCwgZikpXG4gIH1cblxuICBjb25zdHJ1Y3RvcihpbnB1dEVsLCB2aWV3LCBvbkNvbXBsZXRlKXtcbiAgICB0aGlzLnZpZXcgPSB2aWV3XG4gICAgdGhpcy5vbkNvbXBsZXRlID0gb25Db21wbGV0ZVxuICAgIHRoaXMuX2VudHJpZXMgPVxuICAgICAgQXJyYXkuZnJvbShMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKSB8fCBbXSlcbiAgICAgICAgLm1hcChmaWxlID0+IG5ldyBVcGxvYWRFbnRyeShpbnB1dEVsLCBmaWxlLCB2aWV3KSlcblxuICAgIHRoaXMubnVtRW50cmllc0luUHJvZ3Jlc3MgPSB0aGlzLl9lbnRyaWVzLmxlbmd0aFxuICB9XG5cbiAgZW50cmllcygpeyByZXR1cm4gdGhpcy5fZW50cmllcyB9XG5cbiAgaW5pdEFkYXB0ZXJVcGxvYWQocmVzcCwgb25FcnJvciwgbGl2ZVNvY2tldCl7XG4gICAgdGhpcy5fZW50cmllcyA9XG4gICAgICB0aGlzLl9lbnRyaWVzLm1hcChlbnRyeSA9PiB7XG4gICAgICAgIGVudHJ5LnppcFBvc3RGbGlnaHQocmVzcClcbiAgICAgICAgZW50cnkub25Eb25lKCgpID0+IHtcbiAgICAgICAgICB0aGlzLm51bUVudHJpZXNJblByb2dyZXNzLS1cbiAgICAgICAgICBpZih0aGlzLm51bUVudHJpZXNJblByb2dyZXNzID09PSAwKXsgdGhpcy5vbkNvbXBsZXRlKCkgfVxuICAgICAgICB9KVxuICAgICAgICByZXR1cm4gZW50cnlcbiAgICAgIH0pXG5cbiAgICBsZXQgZ3JvdXBlZEVudHJpZXMgPSB0aGlzLl9lbnRyaWVzLnJlZHVjZSgoYWNjLCBlbnRyeSkgPT4ge1xuICAgICAgbGV0IHtuYW1lLCBjYWxsYmFja30gPSBlbnRyeS51cGxvYWRlcihsaXZlU29ja2V0LnVwbG9hZGVycylcbiAgICAgIGFjY1tuYW1lXSA9IGFjY1tuYW1lXSB8fCB7Y2FsbGJhY2s6IGNhbGxiYWNrLCBlbnRyaWVzOiBbXX1cbiAgICAgIGFjY1tuYW1lXS5lbnRyaWVzLnB1c2goZW50cnkpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwge30pXG5cbiAgICBmb3IobGV0IG5hbWUgaW4gZ3JvdXBlZEVudHJpZXMpe1xuICAgICAgbGV0IHtjYWxsYmFjaywgZW50cmllc30gPSBncm91cGVkRW50cmllc1tuYW1lXVxuICAgICAgY2FsbGJhY2soZW50cmllcywgb25FcnJvciwgcmVzcCwgbGl2ZVNvY2tldClcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQge1xuICBQSFhfQUNUSVZFX0VOVFJZX1JFRlMsXG4gIFBIWF9MSVZFX0ZJTEVfVVBEQVRFRCxcbiAgUEhYX1BSRUZMSUdIVEVEX1JFRlMsXG4gIFBIWF9VUExPQURfUkVGXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCBMaXZlVXBsb2FkZXIgZnJvbSBcIi4vbGl2ZV91cGxvYWRlclwiXG5cbmxldCBIb29rcyA9IHtcbiAgTGl2ZUZpbGVVcGxvYWQ6IHtcbiAgICBhY3RpdmVSZWZzKCl7IHJldHVybiB0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfQUNUSVZFX0VOVFJZX1JFRlMpIH0sXG5cbiAgICBwcmVmbGlnaHRlZFJlZnMoKXsgcmV0dXJuIHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9QUkVGTElHSFRFRF9SRUZTKSB9LFxuXG4gICAgbW91bnRlZCgpeyB0aGlzLnByZWZsaWdodGVkV2FzID0gdGhpcy5wcmVmbGlnaHRlZFJlZnMoKSB9LFxuXG4gICAgdXBkYXRlZCgpe1xuICAgICAgbGV0IG5ld1ByZWZsaWdodHMgPSB0aGlzLnByZWZsaWdodGVkUmVmcygpXG4gICAgICBpZih0aGlzLnByZWZsaWdodGVkV2FzICE9PSBuZXdQcmVmbGlnaHRzKXtcbiAgICAgICAgdGhpcy5wcmVmbGlnaHRlZFdhcyA9IG5ld1ByZWZsaWdodHNcbiAgICAgICAgaWYobmV3UHJlZmxpZ2h0cyA9PT0gXCJcIil7XG4gICAgICAgICAgdGhpcy5fX3ZpZXcuY2FuY2VsU3VibWl0KHRoaXMuZWwuZm9ybSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZih0aGlzLmFjdGl2ZVJlZnMoKSA9PT0gXCJcIil7IHRoaXMuZWwudmFsdWUgPSBudWxsIH1cbiAgICAgIHRoaXMuZWwuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoUEhYX0xJVkVfRklMRV9VUERBVEVEKSlcbiAgICB9XG4gIH0sXG5cbiAgTGl2ZUltZ1ByZXZpZXc6IHtcbiAgICBtb3VudGVkKCl7XG4gICAgICB0aGlzLnJlZiA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtZW50cnktcmVmXCIpXG4gICAgICB0aGlzLmlucHV0RWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRikpXG4gICAgICBMaXZlVXBsb2FkZXIuZ2V0RW50cnlEYXRhVVJMKHRoaXMuaW5wdXRFbCwgdGhpcy5yZWYsIHVybCA9PiB7XG4gICAgICAgIHRoaXMudXJsID0gdXJsXG4gICAgICAgIHRoaXMuZWwuc3JjID0gdXJsXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGVzdHJveWVkKCl7XG4gICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKHRoaXMudXJsKVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBIb29rc1xuIiwgImltcG9ydCB7XG4gIG1heWJlXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01Qb3N0TW9ycGhSZXN0b3JlciB7XG4gIGNvbnN0cnVjdG9yKGNvbnRhaW5lckJlZm9yZSwgY29udGFpbmVyQWZ0ZXIsIHVwZGF0ZVR5cGUpe1xuICAgIGxldCBpZHNCZWZvcmUgPSBuZXcgU2V0KClcbiAgICBsZXQgaWRzQWZ0ZXIgPSBuZXcgU2V0KFsuLi5jb250YWluZXJBZnRlci5jaGlsZHJlbl0ubWFwKGNoaWxkID0+IGNoaWxkLmlkKSlcblxuICAgIGxldCBlbGVtZW50c1RvTW9kaWZ5ID0gW11cblxuICAgIEFycmF5LmZyb20oY29udGFpbmVyQmVmb3JlLmNoaWxkcmVuKS5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmKGNoaWxkLmlkKXsgLy8gYWxsIG9mIG91ciBjaGlsZHJlbiBzaG91bGQgYmUgZWxlbWVudHMgd2l0aCBpZHNcbiAgICAgICAgaWRzQmVmb3JlLmFkZChjaGlsZC5pZClcbiAgICAgICAgaWYoaWRzQWZ0ZXIuaGFzKGNoaWxkLmlkKSl7XG4gICAgICAgICAgbGV0IHByZXZpb3VzRWxlbWVudElkID0gY2hpbGQucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBjaGlsZC5wcmV2aW91c0VsZW1lbnRTaWJsaW5nLmlkXG4gICAgICAgICAgZWxlbWVudHNUb01vZGlmeS5wdXNoKHtlbGVtZW50SWQ6IGNoaWxkLmlkLCBwcmV2aW91c0VsZW1lbnRJZDogcHJldmlvdXNFbGVtZW50SWR9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuY29udGFpbmVySWQgPSBjb250YWluZXJBZnRlci5pZFxuICAgIHRoaXMudXBkYXRlVHlwZSA9IHVwZGF0ZVR5cGVcbiAgICB0aGlzLmVsZW1lbnRzVG9Nb2RpZnkgPSBlbGVtZW50c1RvTW9kaWZ5XG4gICAgdGhpcy5lbGVtZW50SWRzVG9BZGQgPSBbLi4uaWRzQWZ0ZXJdLmZpbHRlcihpZCA9PiAhaWRzQmVmb3JlLmhhcyhpZCkpXG4gIH1cblxuICAvLyBXZSBkbyB0aGUgZm9sbG93aW5nIHRvIG9wdGltaXplIGFwcGVuZC9wcmVwZW5kIG9wZXJhdGlvbnM6XG4gIC8vICAgMSkgVHJhY2sgaWRzIG9mIG1vZGlmaWVkIGVsZW1lbnRzICYgb2YgbmV3IGVsZW1lbnRzXG4gIC8vICAgMikgQWxsIHRoZSBtb2RpZmllZCBlbGVtZW50cyBhcmUgcHV0IGJhY2sgaW4gdGhlIGNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIERPTSB0cmVlXG4gIC8vICAgICAgYnkgc3RvcmluZyB0aGUgaWQgb2YgdGhlaXIgcHJldmlvdXMgc2libGluZ1xuICAvLyAgIDMpIE5ldyBlbGVtZW50cyBhcmUgZ29pbmcgdG8gYmUgcHV0IGluIHRoZSByaWdodCBwbGFjZSBieSBtb3JwaGRvbSBkdXJpbmcgYXBwZW5kLlxuICAvLyAgICAgIEZvciBwcmVwZW5kLCB3ZSBtb3ZlIHRoZW0gdG8gdGhlIGZpcnN0IHBvc2l0aW9uIGluIHRoZSBjb250YWluZXJcbiAgcGVyZm9ybSgpe1xuICAgIGxldCBjb250YWluZXIgPSBET00uYnlJZCh0aGlzLmNvbnRhaW5lcklkKVxuICAgIHRoaXMuZWxlbWVudHNUb01vZGlmeS5mb3JFYWNoKGVsZW1lbnRUb01vZGlmeSA9PiB7XG4gICAgICBpZihlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpe1xuICAgICAgICBtYXliZShkb2N1bWVudC5nZXRFbGVtZW50QnlJZChlbGVtZW50VG9Nb2RpZnkucHJldmlvdXNFbGVtZW50SWQpLCBwcmV2aW91c0VsZW0gPT4ge1xuICAgICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICAgIGxldCBpc0luUmlnaHRQbGFjZSA9IGVsZW0ucHJldmlvdXNFbGVtZW50U2libGluZyAmJiBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcuaWQgPT0gcHJldmlvdXNFbGVtLmlkXG4gICAgICAgICAgICBpZighaXNJblJpZ2h0UGxhY2Upe1xuICAgICAgICAgICAgICBwcmV2aW91c0VsZW0uaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJlbmRcIiwgZWxlbSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBpcyB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgY29udGFpbmVyXG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1lbnRUb01vZGlmeS5lbGVtZW50SWQpLCBlbGVtID0+IHtcbiAgICAgICAgICBsZXQgaXNJblJpZ2h0UGxhY2UgPSBlbGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgPT0gbnVsbFxuICAgICAgICAgIGlmKCFpc0luUmlnaHRQbGFjZSl7XG4gICAgICAgICAgICBjb250YWluZXIuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYWZ0ZXJiZWdpblwiLCBlbGVtKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgaWYodGhpcy51cGRhdGVUeXBlID09IFwicHJlcGVuZFwiKXtcbiAgICAgIHRoaXMuZWxlbWVudElkc1RvQWRkLnJldmVyc2UoKS5mb3JFYWNoKGVsZW1JZCA9PiB7XG4gICAgICAgIG1heWJlKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGVsZW1JZCksIGVsZW0gPT4gY29udGFpbmVyLmluc2VydEFkamFjZW50RWxlbWVudChcImFmdGVyYmVnaW5cIiwgZWxlbSkpXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIiwgInZhciBET0NVTUVOVF9GUkFHTUVOVF9OT0RFID0gMTE7XG5cbmZ1bmN0aW9uIG1vcnBoQXR0cnMoZnJvbU5vZGUsIHRvTm9kZSkge1xuICAgIHZhciB0b05vZGVBdHRycyA9IHRvTm9kZS5hdHRyaWJ1dGVzO1xuICAgIHZhciBhdHRyO1xuICAgIHZhciBhdHRyTmFtZTtcbiAgICB2YXIgYXR0ck5hbWVzcGFjZVVSSTtcbiAgICB2YXIgYXR0clZhbHVlO1xuICAgIHZhciBmcm9tVmFsdWU7XG5cbiAgICAvLyBkb2N1bWVudC1mcmFnbWVudHMgZG9udCBoYXZlIGF0dHJpYnV0ZXMgc28gbGV0cyBub3QgZG8gYW55dGhpbmdcbiAgICBpZiAodG9Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFIHx8IGZyb21Ob2RlLm5vZGVUeXBlID09PSBET0NVTUVOVF9GUkFHTUVOVF9OT0RFKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdXBkYXRlIGF0dHJpYnV0ZXMgb24gb3JpZ2luYWwgRE9NIGVsZW1lbnRcbiAgICBmb3IgKHZhciBpID0gdG9Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgYXR0ciA9IHRvTm9kZUF0dHJzW2ldO1xuICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTtcbiAgICAgICAgYXR0ck5hbWVzcGFjZVVSSSA9IGF0dHIubmFtZXNwYWNlVVJJO1xuICAgICAgICBhdHRyVmFsdWUgPSBhdHRyLnZhbHVlO1xuXG4gICAgICAgIGlmIChhdHRyTmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubG9jYWxOYW1lIHx8IGF0dHJOYW1lO1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlTlMoYXR0ck5hbWVzcGFjZVVSSSwgYXR0ck5hbWUpO1xuXG4gICAgICAgICAgICBpZiAoZnJvbVZhbHVlICE9PSBhdHRyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXR0ci5wcmVmaXggPT09ICd4bWxucycpe1xuICAgICAgICAgICAgICAgICAgICBhdHRyTmFtZSA9IGF0dHIubmFtZTsgLy8gSXQncyBub3QgYWxsb3dlZCB0byBzZXQgYW4gYXR0cmlidXRlIHdpdGggdGhlIFhNTE5TIG5hbWVzcGFjZSB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGB4bWxuc2AgcHJlZml4XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnNldEF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbVZhbHVlID0gZnJvbU5vZGUuZ2V0QXR0cmlidXRlKGF0dHJOYW1lKTtcblxuICAgICAgICAgICAgaWYgKGZyb21WYWx1ZSAhPT0gYXR0clZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZnJvbU5vZGUuc2V0QXR0cmlidXRlKGF0dHJOYW1lLCBhdHRyVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gUmVtb3ZlIGFueSBleHRyYSBhdHRyaWJ1dGVzIGZvdW5kIG9uIHRoZSBvcmlnaW5hbCBET00gZWxlbWVudCB0aGF0XG4gICAgLy8gd2VyZW4ndCBmb3VuZCBvbiB0aGUgdGFyZ2V0IGVsZW1lbnQuXG4gICAgdmFyIGZyb21Ob2RlQXR0cnMgPSBmcm9tTm9kZS5hdHRyaWJ1dGVzO1xuXG4gICAgZm9yICh2YXIgZCA9IGZyb21Ob2RlQXR0cnMubGVuZ3RoIC0gMTsgZCA+PSAwOyBkLS0pIHtcbiAgICAgICAgYXR0ciA9IGZyb21Ob2RlQXR0cnNbZF07XG4gICAgICAgIGF0dHJOYW1lID0gYXR0ci5uYW1lO1xuICAgICAgICBhdHRyTmFtZXNwYWNlVVJJID0gYXR0ci5uYW1lc3BhY2VVUkk7XG5cbiAgICAgICAgaWYgKGF0dHJOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgIGF0dHJOYW1lID0gYXR0ci5sb2NhbE5hbWUgfHwgYXR0ck5hbWU7XG5cbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKSkge1xuICAgICAgICAgICAgICAgIGZyb21Ob2RlLnJlbW92ZUF0dHJpYnV0ZU5TKGF0dHJOYW1lc3BhY2VVUkksIGF0dHJOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdG9Ob2RlLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBmcm9tTm9kZS5yZW1vdmVBdHRyaWJ1dGUoYXR0ck5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG52YXIgcmFuZ2U7IC8vIENyZWF0ZSBhIHJhbmdlIG9iamVjdCBmb3IgZWZmaWNlbnRseSByZW5kZXJpbmcgc3RyaW5ncyB0byBlbGVtZW50cy5cbnZhciBOU19YSFRNTCA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJztcblxudmFyIGRvYyA9IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBkb2N1bWVudDtcbnZhciBIQVNfVEVNUExBVEVfU1VQUE9SVCA9ICEhZG9jICYmICdjb250ZW50JyBpbiBkb2MuY3JlYXRlRWxlbWVudCgndGVtcGxhdGUnKTtcbnZhciBIQVNfUkFOR0VfU1VQUE9SVCA9ICEhZG9jICYmIGRvYy5jcmVhdGVSYW5nZSAmJiAnY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50JyBpbiBkb2MuY3JlYXRlUmFuZ2UoKTtcblxuZnVuY3Rpb24gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKSB7XG4gICAgdmFyIHRlbXBsYXRlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gc3RyO1xuICAgIHJldHVybiB0ZW1wbGF0ZS5jb250ZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVJhbmdlKHN0cikge1xuICAgIGlmICghcmFuZ2UpIHtcbiAgICAgICAgcmFuZ2UgPSBkb2MuY3JlYXRlUmFuZ2UoKTtcbiAgICAgICAgcmFuZ2Uuc2VsZWN0Tm9kZShkb2MuYm9keSk7XG4gICAgfVxuXG4gICAgdmFyIGZyYWdtZW50ID0gcmFuZ2UuY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50KHN0cik7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZyYWdtZW50RnJvbVdyYXAoc3RyKSB7XG4gICAgdmFyIGZyYWdtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2JvZHknKTtcbiAgICBmcmFnbWVudC5pbm5lckhUTUwgPSBzdHI7XG4gICAgcmV0dXJuIGZyYWdtZW50LmNoaWxkTm9kZXNbMF07XG59XG5cbi8qKlxuICogVGhpcyBpcyBhYm91dCB0aGUgc2FtZVxuICogdmFyIGh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHN0ciwgJ3RleHQvaHRtbCcpO1xuICogcmV0dXJuIGh0bWwuYm9keS5maXJzdENoaWxkO1xuICpcbiAqIEBtZXRob2QgdG9FbGVtZW50XG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKi9cbmZ1bmN0aW9uIHRvRWxlbWVudChzdHIpIHtcbiAgICBzdHIgPSBzdHIudHJpbSgpO1xuICAgIGlmIChIQVNfVEVNUExBVEVfU1VQUE9SVCkge1xuICAgICAgLy8gYXZvaWQgcmVzdHJpY3Rpb25zIG9uIGNvbnRlbnQgZm9yIHRoaW5ncyBsaWtlIGA8dHI+PHRoPkhpPC90aD48L3RyPmAgd2hpY2hcbiAgICAgIC8vIGNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCBkb2Vzbid0IHN1cHBvcnRcbiAgICAgIC8vIDx0ZW1wbGF0ZT4gc3VwcG9ydCBub3QgYXZhaWxhYmxlIGluIElFXG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tVGVtcGxhdGUoc3RyKTtcbiAgICB9IGVsc2UgaWYgKEhBU19SQU5HRV9TVVBQT1JUKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tUmFuZ2Uoc3RyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY3JlYXRlRnJhZ21lbnRGcm9tV3JhcChzdHIpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0d28gbm9kZSdzIG5hbWVzIGFyZSB0aGUgc2FtZS5cbiAqXG4gKiBOT1RFOiBXZSBkb24ndCBib3RoZXIgY2hlY2tpbmcgYG5hbWVzcGFjZVVSSWAgYmVjYXVzZSB5b3Ugd2lsbCBuZXZlciBmaW5kIHR3byBIVE1MIGVsZW1lbnRzIHdpdGggdGhlIHNhbWVcbiAqICAgICAgIG5vZGVOYW1lIGFuZCBkaWZmZXJlbnQgbmFtZXNwYWNlIFVSSXMuXG4gKlxuICogQHBhcmFtIHtFbGVtZW50fSBhXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGIgVGhlIHRhcmdldCBlbGVtZW50XG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlTm9kZU5hbWVzKGZyb21FbCwgdG9FbCkge1xuICAgIHZhciBmcm9tTm9kZU5hbWUgPSBmcm9tRWwubm9kZU5hbWU7XG4gICAgdmFyIHRvTm9kZU5hbWUgPSB0b0VsLm5vZGVOYW1lO1xuICAgIHZhciBmcm9tQ29kZVN0YXJ0LCB0b0NvZGVTdGFydDtcblxuICAgIGlmIChmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgZnJvbUNvZGVTdGFydCA9IGZyb21Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuICAgIHRvQ29kZVN0YXJ0ID0gdG9Ob2RlTmFtZS5jaGFyQ29kZUF0KDApO1xuXG4gICAgLy8gSWYgdGhlIHRhcmdldCBlbGVtZW50IGlzIGEgdmlydHVhbCBET00gbm9kZSBvciBTVkcgbm9kZSB0aGVuIHdlIG1heVxuICAgIC8vIG5lZWQgdG8gbm9ybWFsaXplIHRoZSB0YWcgbmFtZSBiZWZvcmUgY29tcGFyaW5nLiBOb3JtYWwgSFRNTCBlbGVtZW50cyB0aGF0IGFyZVxuICAgIC8vIGluIHRoZSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWxcIlxuICAgIC8vIGFyZSBjb252ZXJ0ZWQgdG8gdXBwZXIgY2FzZVxuICAgIGlmIChmcm9tQ29kZVN0YXJ0IDw9IDkwICYmIHRvQ29kZVN0YXJ0ID49IDk3KSB7IC8vIGZyb20gaXMgdXBwZXIgYW5kIHRvIGlzIGxvd2VyXG4gICAgICAgIHJldHVybiBmcm9tTm9kZU5hbWUgPT09IHRvTm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICB9IGVsc2UgaWYgKHRvQ29kZVN0YXJ0IDw9IDkwICYmIGZyb21Db2RlU3RhcnQgPj0gOTcpIHsgLy8gdG8gaXMgdXBwZXIgYW5kIGZyb20gaXMgbG93ZXJcbiAgICAgICAgcmV0dXJuIHRvTm9kZU5hbWUgPT09IGZyb21Ob2RlTmFtZS50b1VwcGVyQ2FzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuIGVsZW1lbnQsIG9wdGlvbmFsbHkgd2l0aCBhIGtub3duIG5hbWVzcGFjZSBVUkkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgdGhlIGVsZW1lbnQgbmFtZSwgZS5nLiAnZGl2JyBvciAnc3ZnJ1xuICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lc3BhY2VVUkldIHRoZSBlbGVtZW50J3MgbmFtZXNwYWNlIFVSSSwgaS5lLiB0aGUgdmFsdWUgb2ZcbiAqIGl0cyBgeG1sbnNgIGF0dHJpYnV0ZSBvciBpdHMgaW5mZXJyZWQgbmFtZXNwYWNlLlxuICpcbiAqIEByZXR1cm4ge0VsZW1lbnR9XG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnROUyhuYW1lLCBuYW1lc3BhY2VVUkkpIHtcbiAgICByZXR1cm4gIW5hbWVzcGFjZVVSSSB8fCBuYW1lc3BhY2VVUkkgPT09IE5TX1hIVE1MID9cbiAgICAgICAgZG9jLmNyZWF0ZUVsZW1lbnQobmFtZSkgOlxuICAgICAgICBkb2MuY3JlYXRlRWxlbWVudE5TKG5hbWVzcGFjZVVSSSwgbmFtZSk7XG59XG5cbi8qKlxuICogQ29waWVzIHRoZSBjaGlsZHJlbiBvZiBvbmUgRE9NIGVsZW1lbnQgdG8gYW5vdGhlciBET00gZWxlbWVudFxuICovXG5mdW5jdGlvbiBtb3ZlQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKSB7XG4gICAgdmFyIGN1ckNoaWxkID0gZnJvbUVsLmZpcnN0Q2hpbGQ7XG4gICAgd2hpbGUgKGN1ckNoaWxkKSB7XG4gICAgICAgIHZhciBuZXh0Q2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgdG9FbC5hcHBlbmRDaGlsZChjdXJDaGlsZCk7XG4gICAgICAgIGN1ckNoaWxkID0gbmV4dENoaWxkO1xuICAgIH1cbiAgICByZXR1cm4gdG9FbDtcbn1cblxuZnVuY3Rpb24gc3luY0Jvb2xlYW5BdHRyUHJvcChmcm9tRWwsIHRvRWwsIG5hbWUpIHtcbiAgICBpZiAoZnJvbUVsW25hbWVdICE9PSB0b0VsW25hbWVdKSB7XG4gICAgICAgIGZyb21FbFtuYW1lXSA9IHRvRWxbbmFtZV07XG4gICAgICAgIGlmIChmcm9tRWxbbmFtZV0pIHtcbiAgICAgICAgICAgIGZyb21FbC5zZXRBdHRyaWJ1dGUobmFtZSwgJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxudmFyIHNwZWNpYWxFbEhhbmRsZXJzID0ge1xuICAgIE9QVElPTjogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHZhciBwYXJlbnROb2RlID0gZnJvbUVsLnBhcmVudE5vZGU7XG4gICAgICAgIGlmIChwYXJlbnROb2RlKSB7XG4gICAgICAgICAgICB2YXIgcGFyZW50TmFtZSA9IHBhcmVudE5vZGUubm9kZU5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIGlmIChwYXJlbnROYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICAgICAgICAgICAgICBwYXJlbnROYW1lID0gcGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocGFyZW50TmFtZSA9PT0gJ1NFTEVDVCcgJiYgIXBhcmVudE5vZGUuaGFzQXR0cmlidXRlKCdtdWx0aXBsZScpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZyb21FbC5oYXNBdHRyaWJ1dGUoJ3NlbGVjdGVkJykgJiYgIXRvRWwuc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgTVMgRWRnZSBidWcgd2hlcmUgdGhlICdzZWxlY3RlZCcgYXR0cmlidXRlIGNhbiBvbmx5IGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIHJlbW92ZWQgaWYgc2V0IHRvIGEgbm9uLWVtcHR5IHZhbHVlOlxuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5taWNyb3NvZnQuY29tL2VuLXVzL21pY3Jvc29mdC1lZGdlL3BsYXRmb3JtL2lzc3Vlcy8xMjA4NzY3OS9cbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCAnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICAgICAgZnJvbUVsLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byByZXNldCBzZWxlY3QgZWxlbWVudCdzIHNlbGVjdGVkSW5kZXggdG8gLTEsIG90aGVyd2lzZSBzZXR0aW5nXG4gICAgICAgICAgICAgICAgLy8gZnJvbUVsLnNlbGVjdGVkIHVzaW5nIHRoZSBzeW5jQm9vbGVhbkF0dHJQcm9wIGJlbG93IGhhcyBubyBlZmZlY3QuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvcnJlY3Qgc2VsZWN0ZWRJbmRleCB3aWxsIGJlIHNldCBpbiB0aGUgU0VMRUNUIHNwZWNpYWwgaGFuZGxlciBiZWxvdy5cbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ3NlbGVjdGVkJyk7XG4gICAgfSxcbiAgICAvKipcbiAgICAgKiBUaGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBpcyBzcGVjaWFsIGZvciB0aGUgPGlucHV0PiBlbGVtZW50IHNpbmNlIGl0IHNldHNcbiAgICAgKiB0aGUgaW5pdGlhbCB2YWx1ZS4gQ2hhbmdpbmcgdGhlIFwidmFsdWVcIiBhdHRyaWJ1dGUgd2l0aG91dCBjaGFuZ2luZyB0aGVcbiAgICAgKiBcInZhbHVlXCIgcHJvcGVydHkgd2lsbCBoYXZlIG5vIGVmZmVjdCBzaW5jZSBpdCBpcyBvbmx5IHVzZWQgdG8gdGhlIHNldCB0aGVcbiAgICAgKiBpbml0aWFsIHZhbHVlLiAgU2ltaWxhciBmb3IgdGhlIFwiY2hlY2tlZFwiIGF0dHJpYnV0ZSwgYW5kIFwiZGlzYWJsZWRcIi5cbiAgICAgKi9cbiAgICBJTlBVVDogZnVuY3Rpb24oZnJvbUVsLCB0b0VsKSB7XG4gICAgICAgIHN5bmNCb29sZWFuQXR0clByb3AoZnJvbUVsLCB0b0VsLCAnY2hlY2tlZCcpO1xuICAgICAgICBzeW5jQm9vbGVhbkF0dHJQcm9wKGZyb21FbCwgdG9FbCwgJ2Rpc2FibGVkJyk7XG5cbiAgICAgICAgaWYgKGZyb21FbC52YWx1ZSAhPT0gdG9FbC52YWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gdG9FbC52YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdG9FbC5oYXNBdHRyaWJ1dGUoJ3ZhbHVlJykpIHtcbiAgICAgICAgICAgIGZyb21FbC5yZW1vdmVBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG4gICAgICAgIH1cbiAgICB9LFxuXG4gICAgVEVYVEFSRUE6IGZ1bmN0aW9uKGZyb21FbCwgdG9FbCkge1xuICAgICAgICB2YXIgbmV3VmFsdWUgPSB0b0VsLnZhbHVlO1xuICAgICAgICBpZiAoZnJvbUVsLnZhbHVlICE9PSBuZXdWYWx1ZSkge1xuICAgICAgICAgICAgZnJvbUVsLnZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZmlyc3RDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICBpZiAoZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gTmVlZGVkIGZvciBJRS4gQXBwYXJlbnRseSBJRSBzZXRzIHRoZSBwbGFjZWhvbGRlciBhcyB0aGVcbiAgICAgICAgICAgIC8vIG5vZGUgdmFsdWUgYW5kIHZpc2UgdmVyc2EuIFRoaXMgaWdub3JlcyBhbiBlbXB0eSB1cGRhdGUuXG4gICAgICAgICAgICB2YXIgb2xkVmFsdWUgPSBmaXJzdENoaWxkLm5vZGVWYWx1ZTtcblxuICAgICAgICAgICAgaWYgKG9sZFZhbHVlID09IG5ld1ZhbHVlIHx8ICghbmV3VmFsdWUgJiYgb2xkVmFsdWUgPT0gZnJvbUVsLnBsYWNlaG9sZGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZmlyc3RDaGlsZC5ub2RlVmFsdWUgPSBuZXdWYWx1ZTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgU0VMRUNUOiBmdW5jdGlvbihmcm9tRWwsIHRvRWwpIHtcbiAgICAgICAgaWYgKCF0b0VsLmhhc0F0dHJpYnV0ZSgnbXVsdGlwbGUnKSkge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSAtMTtcbiAgICAgICAgICAgIHZhciBpID0gMDtcbiAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gbG9vcCB0aHJvdWdoIGNoaWxkcmVuIG9mIGZyb21FbCwgbm90IHRvRWwgc2luY2Ugbm9kZXMgY2FuIGJlIG1vdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRvRWwgdG8gZnJvbUVsIGRpcmVjdGx5IHdoZW4gbW9ycGhpbmcuXG4gICAgICAgICAgICAvLyBBdCB0aGUgdGltZSB0aGlzIHNwZWNpYWwgaGFuZGxlciBpcyBpbnZva2VkLCBhbGwgY2hpbGRyZW4gaGF2ZSBhbHJlYWR5IGJlZW4gbW9ycGhlZFxuICAgICAgICAgICAgLy8gYW5kIGFwcGVuZGVkIHRvIC8gcmVtb3ZlZCBmcm9tIGZyb21FbCwgc28gdXNpbmcgZnJvbUVsIGhlcmUgaXMgc2FmZSBhbmQgY29ycmVjdC5cbiAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IGZyb21FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIG9wdGdyb3VwO1xuICAgICAgICAgICAgdmFyIG5vZGVOYW1lO1xuICAgICAgICAgICAgd2hpbGUoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICBub2RlTmFtZSA9IGN1ckNoaWxkLm5vZGVOYW1lICYmIGN1ckNoaWxkLm5vZGVOYW1lLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5vZGVOYW1lID09PSAnT1BUR1JPVVAnKSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gY3VyQ2hpbGQ7XG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gb3B0Z3JvdXAuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU5hbWUgPT09ICdPUFRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuaGFzQXR0cmlidXRlKCdzZWxlY3RlZCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRJbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBjdXJDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJDaGlsZCAmJiBvcHRncm91cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBvcHRncm91cC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGdyb3VwID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZnJvbUVsLnNlbGVjdGVkSW5kZXggPSBzZWxlY3RlZEluZGV4O1xuICAgICAgICB9XG4gICAgfVxufTtcblxudmFyIEVMRU1FTlRfTk9ERSA9IDE7XG52YXIgRE9DVU1FTlRfRlJBR01FTlRfTk9ERSQxID0gMTE7XG52YXIgVEVYVF9OT0RFID0gMztcbnZhciBDT01NRU5UX05PREUgPSA4O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxuZnVuY3Rpb24gZGVmYXVsdEdldE5vZGVLZXkobm9kZSkge1xuICBpZiAobm9kZSkge1xuICAgICAgcmV0dXJuIChub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSgnaWQnKSkgfHwgbm9kZS5pZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb3JwaGRvbUZhY3RvcnkobW9ycGhBdHRycykge1xuXG4gICAgcmV0dXJuIGZ1bmN0aW9uIG1vcnBoZG9tKGZyb21Ob2RlLCB0b05vZGUsIG9wdGlvbnMpIHtcbiAgICAgICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICAgICAgICBvcHRpb25zID0ge307XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHRvTm9kZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGlmIChmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudCcgfHwgZnJvbU5vZGUubm9kZU5hbWUgPT09ICdIVE1MJyB8fCBmcm9tTm9kZS5ub2RlTmFtZSA9PT0gJ0JPRFknKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRvTm9kZUh0bWwgPSB0b05vZGU7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2h0bWwnKTtcbiAgICAgICAgICAgICAgICB0b05vZGUuaW5uZXJIVE1MID0gdG9Ob2RlSHRtbDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdG9Ob2RlID0gdG9FbGVtZW50KHRvTm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZ2V0Tm9kZUtleSA9IG9wdGlvbnMuZ2V0Tm9kZUtleSB8fCBkZWZhdWx0R2V0Tm9kZUtleTtcbiAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVBZGRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25Ob2RlQWRkZWQgPSBvcHRpb25zLm9uTm9kZUFkZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsVXBkYXRlZCA9IG9wdGlvbnMub25CZWZvcmVFbFVwZGF0ZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uRWxVcGRhdGVkID0gb3B0aW9ucy5vbkVsVXBkYXRlZCB8fCBub29wO1xuICAgICAgICB2YXIgb25CZWZvcmVOb2RlRGlzY2FyZGVkID0gb3B0aW9ucy5vbkJlZm9yZU5vZGVEaXNjYXJkZWQgfHwgbm9vcDtcbiAgICAgICAgdmFyIG9uTm9kZURpc2NhcmRlZCA9IG9wdGlvbnMub25Ob2RlRGlzY2FyZGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBvbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkID0gb3B0aW9ucy5vbkJlZm9yZUVsQ2hpbGRyZW5VcGRhdGVkIHx8IG5vb3A7XG4gICAgICAgIHZhciBjaGlsZHJlbk9ubHkgPSBvcHRpb25zLmNoaWxkcmVuT25seSA9PT0gdHJ1ZTtcblxuICAgICAgICAvLyBUaGlzIG9iamVjdCBpcyB1c2VkIGFzIGEgbG9va3VwIHRvIHF1aWNrbHkgZmluZCBhbGwga2V5ZWQgZWxlbWVudHMgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlLlxuICAgICAgICB2YXIgZnJvbU5vZGVzTG9va3VwID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgdmFyIGtleWVkUmVtb3ZhbExpc3QgPSBbXTtcblxuICAgICAgICBmdW5jdGlvbiBhZGRLZXllZFJlbW92YWwoa2V5KSB7XG4gICAgICAgICAgICBrZXllZFJlbW92YWxMaXN0LnB1c2goa2V5KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKG5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gbm9kZS5maXJzdENoaWxkO1xuICAgICAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuXG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXkgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHNraXBLZXllZE5vZGVzICYmIChrZXkgPSBnZXROb2RlS2V5KGN1ckNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFyZSBza2lwcGluZyBrZXllZCBub2RlcyB0aGVuIHdlIGFkZCB0aGUga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBhIGxpc3Qgc28gdGhhdCBpdCBjYW4gYmUgaGFuZGxlZCBhdCB0aGUgdmVyeSBlbmQuXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgcmVwb3J0IHRoZSBub2RlIGFzIGRpc2NhcmRlZCBpZiBpdCBpcyBub3Qga2V5ZWQuIFdlIGRvIHRoaXMgYmVjYXVzZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXQgdGhlIGVuZCB3ZSBsb29wIHRocm91Z2ggYWxsIGtleWVkIGVsZW1lbnRzIHRoYXQgd2VyZSB1bm1hdGNoZWRcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCB0aGVuIGRpc2NhcmQgdGhlbSBpbiBvbmUgZmluYWwgcGFzcy5cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uTm9kZURpc2NhcmRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyQ2hpbGQuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtEaXNjYXJkZWRDaGlsZE5vZGVzKGN1ckNoaWxkLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJDaGlsZCA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBSZW1vdmVzIGEgRE9NIG5vZGUgb3V0IG9mIHRoZSBvcmlnaW5hbCBET01cbiAgICAgICAgICpcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBUaGUgbm9kZSB0byByZW1vdmVcbiAgICAgICAgICogQHBhcmFtICB7Tm9kZX0gcGFyZW50Tm9kZSBUaGUgbm9kZXMgcGFyZW50XG4gICAgICAgICAqIEBwYXJhbSAge0Jvb2xlYW59IHNraXBLZXllZE5vZGVzIElmIHRydWUgdGhlbiBlbGVtZW50cyB3aXRoIGtleXMgd2lsbCBiZSBza2lwcGVkIGFuZCBub3QgZGlzY2FyZGVkLlxuICAgICAgICAgKiBAcmV0dXJuIHt1bmRlZmluZWR9XG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiByZW1vdmVOb2RlKG5vZGUsIHBhcmVudE5vZGUsIHNraXBLZXllZE5vZGVzKSB7XG4gICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlRGlzY2FyZGVkKG5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgICAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQobm9kZSk7XG4gICAgICAgICAgICB3YWxrRGlzY2FyZGVkQ2hpbGROb2Rlcyhub2RlLCBza2lwS2V5ZWROb2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyAvLyBUcmVlV2Fsa2VyIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUocm9vdCkge1xuICAgICAgICAvLyAgICAgdmFyIHRyZWVXYWxrZXIgPSBkb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyKFxuICAgICAgICAvLyAgICAgICAgIHJvb3QsXG4gICAgICAgIC8vICAgICAgICAgTm9kZUZpbHRlci5TSE9XX0VMRU1FTlQpO1xuICAgICAgICAvL1xuICAgICAgICAvLyAgICAgdmFyIGVsO1xuICAgICAgICAvLyAgICAgd2hpbGUoKGVsID0gdHJlZVdhbGtlci5uZXh0Tm9kZSgpKSkge1xuICAgICAgICAvLyAgICAgICAgIHZhciBrZXkgPSBnZXROb2RlS2V5KGVsKTtcbiAgICAgICAgLy8gICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgIC8vICAgICAgICAgICAgIGZyb21Ob2Rlc0xvb2t1cFtrZXldID0gZWw7XG4gICAgICAgIC8vICAgICAgICAgfVxuICAgICAgICAvLyAgICAgfVxuICAgICAgICAvLyB9XG5cbiAgICAgICAgLy8gLy8gTm9kZUl0ZXJhdG9yIGltcGxlbWVudGF0aW9uIGlzIG5vIGZhc3RlciwgYnV0IGtlZXBpbmcgdGhpcyBhcm91bmQgaW4gY2FzZSB0aGlzIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZVxuICAgICAgICAvL1xuICAgICAgICAvLyBmdW5jdGlvbiBpbmRleFRyZWUobm9kZSkge1xuICAgICAgICAvLyAgICAgdmFyIG5vZGVJdGVyYXRvciA9IGRvY3VtZW50LmNyZWF0ZU5vZGVJdGVyYXRvcihub2RlLCBOb2RlRmlsdGVyLlNIT1dfRUxFTUVOVCk7XG4gICAgICAgIC8vICAgICB2YXIgZWw7XG4gICAgICAgIC8vICAgICB3aGlsZSgoZWwgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkpIHtcbiAgICAgICAgLy8gICAgICAgICB2YXIga2V5ID0gZ2V0Tm9kZUtleShlbCk7XG4gICAgICAgIC8vICAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAvLyAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGVsO1xuICAgICAgICAvLyAgICAgICAgIH1cbiAgICAgICAgLy8gICAgIH1cbiAgICAgICAgLy8gfVxuXG4gICAgICAgIGZ1bmN0aW9uIGluZGV4VHJlZShub2RlKSB7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PT0gRUxFTUVOVF9OT0RFIHx8IG5vZGUubm9kZVR5cGUgPT09IERPQ1VNRU5UX0ZSQUdNRU5UX05PREUkMSkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJDaGlsZCA9IG5vZGUuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgICAgICB3aGlsZSAoY3VyQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tTm9kZXNMb29rdXBba2V5XSA9IGN1ckNoaWxkO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gV2FsayByZWN1cnNpdmVseVxuICAgICAgICAgICAgICAgICAgICBpbmRleFRyZWUoY3VyQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGN1ckNoaWxkID0gY3VyQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaW5kZXhUcmVlKGZyb21Ob2RlKTtcblxuICAgICAgICBmdW5jdGlvbiBoYW5kbGVOb2RlQWRkZWQoZWwpIHtcbiAgICAgICAgICAgIG9uTm9kZUFkZGVkKGVsKTtcblxuICAgICAgICAgICAgdmFyIGN1ckNoaWxkID0gZWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHdoaWxlIChjdXJDaGlsZCkge1xuICAgICAgICAgICAgICAgIHZhciBuZXh0U2libGluZyA9IGN1ckNoaWxkLm5leHRTaWJsaW5nO1xuXG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGdldE5vZGVLZXkoY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHVubWF0Y2hlZEZyb21FbCA9IGZyb21Ob2Rlc0xvb2t1cFtrZXldO1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB3ZSBmaW5kIGEgZHVwbGljYXRlICNpZCBub2RlIGluIGNhY2hlLCByZXBsYWNlIGBlbGAgd2l0aCBjYWNoZSB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAvLyBhbmQgbW9ycGggaXQgdG8gdGhlIGNoaWxkIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgIGlmICh1bm1hdGNoZWRGcm9tRWwgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJDaGlsZCwgdW5tYXRjaGVkRnJvbUVsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyQ2hpbGQucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQodW5tYXRjaGVkRnJvbUVsLCBjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKHVubWF0Y2hlZEZyb21FbCwgY3VyQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgLy8gcmVjdXJzaXZlbHkgY2FsbCBmb3IgY3VyQ2hpbGQgYW5kIGl0J3MgY2hpbGRyZW4gdG8gc2VlIGlmIHdlIGZpbmQgc29tZXRoaW5nIGluXG4gICAgICAgICAgICAgICAgICAvLyBmcm9tTm9kZXNMb29rdXBcbiAgICAgICAgICAgICAgICAgIGhhbmRsZU5vZGVBZGRlZChjdXJDaGlsZCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyQ2hpbGQgPSBuZXh0U2libGluZztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgLy8gV2UgaGF2ZSBwcm9jZXNzZWQgYWxsIG9mIHRoZSBcInRvIG5vZGVzXCIuIElmIGN1ckZyb21Ob2RlQ2hpbGQgaXNcbiAgICAgICAgICAgIC8vIG5vbi1udWxsIHRoZW4gd2Ugc3RpbGwgaGF2ZSBzb21lIGZyb20gbm9kZXMgbGVmdCBvdmVyIHRoYXQgbmVlZFxuICAgICAgICAgICAgLy8gdG8gYmUgcmVtb3ZlZFxuICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB2YXIgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcbiAgICAgICAgICAgICAgICBpZiAoKGN1ckZyb21Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJGcm9tTm9kZUNoaWxkKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgYWRkS2V5ZWRSZW1vdmFsKGN1ckZyb21Ob2RlS2V5KTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgc3RpbGwgYSBjaGFuY2UgdGhleSB3aWxsIGJlIG1hdGNoZWQgdXAgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaEVsKGZyb21FbCwgdG9FbCwgY2hpbGRyZW5Pbmx5KSB7XG4gICAgICAgICAgICB2YXIgdG9FbEtleSA9IGdldE5vZGVLZXkodG9FbCk7XG5cbiAgICAgICAgICAgIGlmICh0b0VsS2V5KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgYW4gZWxlbWVudCB3aXRoIGFuIElEIGlzIGJlaW5nIG1vcnBoZWQgdGhlbiBpdCB3aWxsIGJlIGluIHRoZSBmaW5hbFxuICAgICAgICAgICAgICAgIC8vIERPTSBzbyBjbGVhciBpdCBvdXQgb2YgdGhlIHNhdmVkIGVsZW1lbnRzIGNvbGxlY3Rpb25cbiAgICAgICAgICAgICAgICBkZWxldGUgZnJvbU5vZGVzTG9va3VwW3RvRWxLZXldO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWNoaWxkcmVuT25seSkge1xuICAgICAgICAgICAgICAgIC8vIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgaWYgKG9uQmVmb3JlRWxVcGRhdGVkKGZyb21FbCwgdG9FbCkgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB1cGRhdGUgYXR0cmlidXRlcyBvbiBvcmlnaW5hbCBET00gZWxlbWVudCBmaXJzdFxuICAgICAgICAgICAgICAgIG1vcnBoQXR0cnMoZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25hbFxuICAgICAgICAgICAgICAgIG9uRWxVcGRhdGVkKGZyb21FbCk7XG5cbiAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVFbENoaWxkcmVuVXBkYXRlZChmcm9tRWwsIHRvRWwpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZnJvbUVsLm5vZGVOYW1lICE9PSAnVEVYVEFSRUEnKSB7XG4gICAgICAgICAgICAgIG1vcnBoQ2hpbGRyZW4oZnJvbUVsLCB0b0VsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNwZWNpYWxFbEhhbmRsZXJzLlRFWFRBUkVBKGZyb21FbCwgdG9FbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBtb3JwaENoaWxkcmVuKGZyb21FbCwgdG9FbCkge1xuICAgICAgICAgICAgdmFyIGN1clRvTm9kZUNoaWxkID0gdG9FbC5maXJzdENoaWxkO1xuICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tRWwuZmlyc3RDaGlsZDtcbiAgICAgICAgICAgIHZhciBjdXJUb05vZGVLZXk7XG4gICAgICAgICAgICB2YXIgY3VyRnJvbU5vZGVLZXk7XG5cbiAgICAgICAgICAgIHZhciBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB2YXIgdG9OZXh0U2libGluZztcbiAgICAgICAgICAgIHZhciBtYXRjaGluZ0Zyb21FbDtcblxuICAgICAgICAgICAgLy8gd2FsayB0aGUgY2hpbGRyZW5cbiAgICAgICAgICAgIG91dGVyOiB3aGlsZSAoY3VyVG9Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICB0b05leHRTaWJsaW5nID0gY3VyVG9Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlS2V5ID0gZ2V0Tm9kZUtleShjdXJUb05vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAvLyB3YWxrIHRoZSBmcm9tTm9kZSBjaGlsZHJlbiBhbGwgdGhlIHdheSB0aHJvdWdoXG4gICAgICAgICAgICAgICAgd2hpbGUgKGN1ckZyb21Ob2RlQ2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnJvbU5leHRTaWJsaW5nID0gY3VyRnJvbU5vZGVDaGlsZC5uZXh0U2libGluZztcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuaXNTYW1lTm9kZSAmJiBjdXJUb05vZGVDaGlsZC5pc1NhbWVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IHRvTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWUgb3V0ZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUtleSA9IGdldE5vZGVLZXkoY3VyRnJvbU5vZGVDaGlsZCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdmFyIGN1ckZyb21Ob2RlVHlwZSA9IGN1ckZyb21Ob2RlQ2hpbGQubm9kZVR5cGU7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyBpZiB0aGUgY3VyRnJvbU5vZGVDaGlsZCBkb2VzbnQgaGF2ZSBhIG1hdGNoIHdpdGggdGhlIGN1clRvTm9kZUNoaWxkXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc0NvbXBhdGlibGUgPSB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlVHlwZSA9PT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJvdGggbm9kZXMgYmVpbmcgY29tcGFyZWQgYXJlIEVsZW1lbnQgbm9kZXNcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHRhcmdldCBub2RlIGhhcyBhIGtleSBzbyB3ZSB3YW50IHRvIG1hdGNoIGl0IHVwIHdpdGggdGhlIGNvcnJlY3QgZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1clRvTm9kZUtleSAhPT0gY3VyRnJvbU5vZGVLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBjdXJyZW50IGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIERPTSB0cmVlIGRvZXMgbm90IGhhdmUgYSBtYXRjaGluZyBrZXkgc29cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCdzIGNoZWNrIG91ciBsb29rdXAgdG8gc2VlIGlmIHRoZXJlIGlzIGEgbWF0Y2hpbmcgZWxlbWVudCBpbiB0aGUgb3JpZ2luYWxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSB0cmVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyb21OZXh0U2libGluZyA9PT0gbWF0Y2hpbmdGcm9tRWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gU3BlY2lhbCBjYXNlIGZvciBzaW5nbGUgZWxlbWVudCByZW1vdmFscy4gVG8gYXZvaWQgcmVtb3ZpbmcgdGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERPTSBub2RlIG91dCBvZiB0aGUgdHJlZSAoc2luY2UgdGhhdCBjYW4gYnJlYWsgQ1NTIHRyYW5zaXRpb25zLCBldGMuKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2Ugd2lsbCBpbnN0ZWFkIGRpc2NhcmQgdGhlIGN1cnJlbnQgbm9kZSBhbmQgd2FpdCB1bnRpbCB0aGUgbmV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdGVyYXRpb24gdG8gcHJvcGVybHkgbWF0Y2ggdXAgdGhlIGtleWVkIHRhcmdldCBlbGVtZW50IHdpdGggaXRzIG1hdGNoaW5nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsZW1lbnQgaW4gdGhlIG9yaWdpbmFsIHRyZWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UgZm91bmQgYSBtYXRjaGluZyBrZXllZCBlbGVtZW50IHNvbWV3aGVyZSBpbiB0aGUgb3JpZ2luYWwgRE9NIHRyZWUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIExldCdzIG1vdmUgdGhlIG9yaWdpbmFsIERPTSBub2RlIGludG8gdGhlIGN1cnJlbnQgcG9zaXRpb24gYW5kIG1vcnBoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0LlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE5PVEU6IFdlIHVzZSBpbnNlcnRCZWZvcmUgaW5zdGVhZCBvZiByZXBsYWNlQ2hpbGQgYmVjYXVzZSB3ZSB3YW50IHRvIGdvIHRocm91Z2hcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGByZW1vdmVOb2RlKClgIGZ1bmN0aW9uIGZvciB0aGUgbm9kZSB0aGF0IGlzIGJlaW5nIGRpc2NhcmRlZCBzbyB0aGF0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBsaWZlY3ljbGUgaG9va3MgYXJlIGNvcnJlY3RseSBpbnZva2VkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5pbnNlcnRCZWZvcmUobWF0Y2hpbmdGcm9tRWwsIGN1ckZyb21Ob2RlQ2hpbGQpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGZyb21OZXh0U2libGluZyA9IGN1ckZyb21Ob2RlQ2hpbGQubmV4dFNpYmxpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGN1ckZyb21Ob2RlS2V5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB0aGUgbm9kZSBpcyBrZXllZCBpdCBtaWdodCBiZSBtYXRjaGVkIHVwIGxhdGVyIHNvIHdlIGRlZmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgYWN0dWFsIHJlbW92YWwgdG8gbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEtleWVkUmVtb3ZhbChjdXJGcm9tTm9kZUtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiB3ZSBza2lwIG5lc3RlZCBrZXllZCBub2RlcyBmcm9tIGJlaW5nIHJlbW92ZWQgc2luY2UgdGhlcmUgaXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgIHN0aWxsIGEgY2hhbmNlIHRoZXkgd2lsbCBiZSBtYXRjaGVkIHVwIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVOb2RlKGN1ckZyb21Ob2RlQ2hpbGQsIGZyb21FbCwgdHJ1ZSAvKiBza2lwIGtleWVkIG5vZGVzICovKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBtYXRjaGluZ0Zyb21FbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSBub2RlcyBhcmUgbm90IGNvbXBhdGlibGUgc2luY2UgdGhlIFwidG9cIiBub2RlIGhhcyBhIGtleSBhbmQgdGhlcmVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpcyBubyBtYXRjaGluZyBrZXllZCBub2RlIGluIHRoZSBzb3VyY2UgdHJlZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgb3JpZ2luYWwgaGFzIGEga2V5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQ29tcGF0aWJsZSA9IGlzQ29tcGF0aWJsZSAhPT0gZmFsc2UgJiYgY29tcGFyZU5vZGVOYW1lcyhjdXJGcm9tTm9kZUNoaWxkLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBjb21wYXRpYmxlIERPTSBlbGVtZW50cyBzbyB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGN1cnJlbnQgXCJmcm9tXCIgbm9kZSB0byBtYXRjaCB0aGUgY3VycmVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0YXJnZXQgRE9NIG5vZGUuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIE1PUlBIXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoRWwoY3VyRnJvbU5vZGVDaGlsZCwgY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJGcm9tTm9kZVR5cGUgPT09IFRFWFRfTk9ERSB8fCBjdXJGcm9tTm9kZVR5cGUgPT0gQ09NTUVOVF9OT0RFKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQm90aCBub2RlcyBiZWluZyBjb21wYXJlZCBhcmUgVGV4dCBvciBDb21tZW50IG5vZGVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNDb21wYXRpYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW1wbHkgdXBkYXRlIG5vZGVWYWx1ZSBvbiB0aGUgb3JpZ2luYWwgbm9kZSB0b1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNoYW5nZSB0aGUgdGV4dCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUNoaWxkLm5vZGVWYWx1ZSAhPT0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQubm9kZVZhbHVlID0gY3VyVG9Ob2RlQ2hpbGQubm9kZVZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzQ29tcGF0aWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gQWR2YW5jZSBib3RoIHRoZSBcInRvXCIgY2hpbGQgYW5kIHRoZSBcImZyb21cIiBjaGlsZCBzaW5jZSB3ZSBmb3VuZCBhIG1hdGNoXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBOb3RoaW5nIGVsc2UgdG8gZG8gYXMgd2UgYWxyZWFkeSByZWN1cnNpdmVseSBjYWxsZWQgbW9ycGhDaGlsZHJlbiBhYm92ZVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgICAgICAgICAgY3VyRnJvbU5vZGVDaGlsZCA9IGZyb21OZXh0U2libGluZztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIG91dGVyO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm8gY29tcGF0aWJsZSBtYXRjaCBzbyByZW1vdmUgdGhlIG9sZCBub2RlIGZyb20gdGhlIERPTSBhbmQgY29udGludWUgdHJ5aW5nIHRvIGZpbmQgYVxuICAgICAgICAgICAgICAgICAgICAvLyBtYXRjaCBpbiB0aGUgb3JpZ2luYWwgRE9NLiBIb3dldmVyLCB3ZSBvbmx5IGRvIHRoaXMgaWYgdGhlIGZyb20gbm9kZSBpcyBub3Qga2V5ZWRcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgaXQgaXMgcG9zc2libGUgdGhhdCBhIGtleWVkIG5vZGUgbWlnaHQgbWF0Y2ggdXAgd2l0aCBhIG5vZGUgc29tZXdoZXJlIGVsc2UgaW4gdGhlXG4gICAgICAgICAgICAgICAgICAgIC8vIHRhcmdldCB0cmVlIGFuZCB3ZSBkb24ndCB3YW50IHRvIGRpc2NhcmQgaXQganVzdCB5ZXQgc2luY2UgaXQgc3RpbGwgbWlnaHQgZmluZCBhXG4gICAgICAgICAgICAgICAgICAgIC8vIGhvbWUgaW4gdGhlIGZpbmFsIERPTSB0cmVlLiBBZnRlciBldmVyeXRoaW5nIGlzIGRvbmUgd2Ugd2lsbCByZW1vdmUgYW55IGtleWVkIG5vZGVzXG4gICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgZGlkbid0IGZpbmQgYSBob21lXG4gICAgICAgICAgICAgICAgICAgIGlmIChjdXJGcm9tTm9kZUtleSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2UgdGhlIG5vZGUgaXMga2V5ZWQgaXQgbWlnaHQgYmUgbWF0Y2hlZCB1cCBsYXRlciBzbyB3ZSBkZWZlclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGFjdHVhbCByZW1vdmFsIHRvIGxhdGVyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRLZXllZFJlbW92YWwoY3VyRnJvbU5vZGVLZXkpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTk9URTogd2Ugc2tpcCBuZXN0ZWQga2V5ZWQgbm9kZXMgZnJvbSBiZWluZyByZW1vdmVkIHNpbmNlIHRoZXJlIGlzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBzdGlsbCBhIGNoYW5jZSB0aGV5IHdpbGwgYmUgbWF0Y2hlZCB1cCBsYXRlclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlTm9kZShjdXJGcm9tTm9kZUNoaWxkLCBmcm9tRWwsIHRydWUgLyogc2tpcCBrZXllZCBub2RlcyAqLyk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjdXJGcm9tTm9kZUNoaWxkID0gZnJvbU5leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIH0gLy8gRU5EOiB3aGlsZShjdXJGcm9tTm9kZUNoaWxkKSB7fVxuXG4gICAgICAgICAgICAgICAgLy8gSWYgd2UgZ290IHRoaXMgZmFyIHRoZW4gd2UgZGlkIG5vdCBmaW5kIGEgY2FuZGlkYXRlIG1hdGNoIGZvclxuICAgICAgICAgICAgICAgIC8vIG91ciBcInRvIG5vZGVcIiBhbmQgd2UgZXhoYXVzdGVkIGFsbCBvZiB0aGUgY2hpbGRyZW4gXCJmcm9tXCJcbiAgICAgICAgICAgICAgICAvLyBub2Rlcy4gVGhlcmVmb3JlLCB3ZSB3aWxsIGp1c3QgYXBwZW5kIHRoZSBjdXJyZW50IFwidG9cIiBub2RlXG4gICAgICAgICAgICAgICAgLy8gdG8gdGhlIGVuZFxuICAgICAgICAgICAgICAgIGlmIChjdXJUb05vZGVLZXkgJiYgKG1hdGNoaW5nRnJvbUVsID0gZnJvbU5vZGVzTG9va3VwW2N1clRvTm9kZUtleV0pICYmIGNvbXBhcmVOb2RlTmFtZXMobWF0Y2hpbmdGcm9tRWwsIGN1clRvTm9kZUNoaWxkKSkge1xuICAgICAgICAgICAgICAgICAgICBmcm9tRWwuYXBwZW5kQ2hpbGQobWF0Y2hpbmdGcm9tRWwpO1xuICAgICAgICAgICAgICAgICAgICAvLyBNT1JQSFxuICAgICAgICAgICAgICAgICAgICBtb3JwaEVsKG1hdGNoaW5nRnJvbUVsLCBjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0ID0gb25CZWZvcmVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob25CZWZvcmVOb2RlQWRkZWRSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJUb05vZGVDaGlsZCA9IG9uQmVmb3JlTm9kZUFkZGVkUmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyVG9Ob2RlQ2hpbGQuYWN0dWFsaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSBjdXJUb05vZGVDaGlsZC5hY3R1YWxpemUoZnJvbUVsLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21FbC5hcHBlbmRDaGlsZChjdXJUb05vZGVDaGlsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVOb2RlQWRkZWQoY3VyVG9Ob2RlQ2hpbGQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VyVG9Ob2RlQ2hpbGQgPSB0b05leHRTaWJsaW5nO1xuICAgICAgICAgICAgICAgIGN1ckZyb21Ob2RlQ2hpbGQgPSBmcm9tTmV4dFNpYmxpbmc7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNsZWFudXBGcm9tRWwoZnJvbUVsLCBjdXJGcm9tTm9kZUNoaWxkLCBjdXJGcm9tTm9kZUtleSk7XG5cbiAgICAgICAgICAgIHZhciBzcGVjaWFsRWxIYW5kbGVyID0gc3BlY2lhbEVsSGFuZGxlcnNbZnJvbUVsLm5vZGVOYW1lXTtcbiAgICAgICAgICAgIGlmIChzcGVjaWFsRWxIYW5kbGVyKSB7XG4gICAgICAgICAgICAgICAgc3BlY2lhbEVsSGFuZGxlcihmcm9tRWwsIHRvRWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IC8vIEVORDogbW9ycGhDaGlsZHJlbiguLi4pXG5cbiAgICAgICAgdmFyIG1vcnBoZWROb2RlID0gZnJvbU5vZGU7XG4gICAgICAgIHZhciBtb3JwaGVkTm9kZVR5cGUgPSBtb3JwaGVkTm9kZS5ub2RlVHlwZTtcbiAgICAgICAgdmFyIHRvTm9kZVR5cGUgPSB0b05vZGUubm9kZVR5cGU7XG5cbiAgICAgICAgaWYgKCFjaGlsZHJlbk9ubHkpIHtcbiAgICAgICAgICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBhcmUgZ2l2ZW4gdHdvIERPTSBub2RlcyB0aGF0IGFyZSBub3RcbiAgICAgICAgICAgIC8vIGNvbXBhdGlibGUgKGUuZy4gPGRpdj4gLS0+IDxzcGFuPiBvciA8ZGl2PiAtLT4gVEVYVClcbiAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZVR5cGUgPT09IEVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgICAgIGlmICh0b05vZGVUeXBlID09PSBFTEVNRU5UX05PREUpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlTm9kZU5hbWVzKGZyb21Ob2RlLCB0b05vZGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvbk5vZGVEaXNjYXJkZWQoZnJvbU5vZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgbW9ycGhlZE5vZGUgPSBtb3ZlQ2hpbGRyZW4oZnJvbU5vZGUsIGNyZWF0ZUVsZW1lbnROUyh0b05vZGUubm9kZU5hbWUsIHRvTm9kZS5uYW1lc3BhY2VVUkkpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEdvaW5nIGZyb20gYW4gZWxlbWVudCBub2RlIHRvIGEgdGV4dCBub2RlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobW9ycGhlZE5vZGVUeXBlID09PSBURVhUX05PREUgfHwgbW9ycGhlZE5vZGVUeXBlID09PSBDT01NRU5UX05PREUpIHsgLy8gVGV4dCBvciBjb21tZW50IG5vZGVcbiAgICAgICAgICAgICAgICBpZiAodG9Ob2RlVHlwZSA9PT0gbW9ycGhlZE5vZGVUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtb3JwaGVkTm9kZS5ub2RlVmFsdWUgIT09IHRvTm9kZS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlLm5vZGVWYWx1ZSA9IHRvTm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGV4dCBub2RlIHRvIHNvbWV0aGluZyBlbHNlXG4gICAgICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gdG9Ob2RlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtb3JwaGVkTm9kZSA9PT0gdG9Ob2RlKSB7XG4gICAgICAgICAgICAvLyBUaGUgXCJ0byBub2RlXCIgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIFwiZnJvbSBub2RlXCIgc28gd2UgaGFkIHRvXG4gICAgICAgICAgICAvLyB0b3NzIG91dCB0aGUgXCJmcm9tIG5vZGVcIiBhbmQgdXNlIHRoZSBcInRvIG5vZGVcIlxuICAgICAgICAgICAgb25Ob2RlRGlzY2FyZGVkKGZyb21Ob2RlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0b05vZGUuaXNTYW1lTm9kZSAmJiB0b05vZGUuaXNTYW1lTm9kZShtb3JwaGVkTm9kZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIG1vcnBoRWwobW9ycGhlZE5vZGUsIHRvTm9kZSwgY2hpbGRyZW5Pbmx5KTtcblxuICAgICAgICAgICAgLy8gV2Ugbm93IG5lZWQgdG8gbG9vcCBvdmVyIGFueSBrZXllZCBub2RlcyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmVcbiAgICAgICAgICAgIC8vIHJlbW92ZWQuIFdlIG9ubHkgZG8gdGhlIHJlbW92YWwgaWYgd2Uga25vdyB0aGF0IHRoZSBrZXllZCBub2RlXG4gICAgICAgICAgICAvLyBuZXZlciBmb3VuZCBhIG1hdGNoLiBXaGVuIGEga2V5ZWQgbm9kZSBpcyBtYXRjaGVkIHVwIHdlIHJlbW92ZVxuICAgICAgICAgICAgLy8gaXQgb3V0IG9mIGZyb21Ob2Rlc0xvb2t1cCBhbmQgd2UgdXNlIGZyb21Ob2Rlc0xvb2t1cCB0byBkZXRlcm1pbmVcbiAgICAgICAgICAgIC8vIGlmIGEga2V5ZWQgbm9kZSBoYXMgYmVlbiBtYXRjaGVkIHVwIG9yIG5vdFxuICAgICAgICAgICAgaWYgKGtleWVkUmVtb3ZhbExpc3QpIHtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpPTAsIGxlbj1rZXllZFJlbW92YWxMaXN0Lmxlbmd0aDsgaTxsZW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZWxUb1JlbW92ZSA9IGZyb21Ob2Rlc0xvb2t1cFtrZXllZFJlbW92YWxMaXN0W2ldXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsVG9SZW1vdmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZU5vZGUoZWxUb1JlbW92ZSwgZWxUb1JlbW92ZS5wYXJlbnROb2RlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoaWxkcmVuT25seSAmJiBtb3JwaGVkTm9kZSAhPT0gZnJvbU5vZGUgJiYgZnJvbU5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG1vcnBoZWROb2RlLmFjdHVhbGl6ZSkge1xuICAgICAgICAgICAgICAgIG1vcnBoZWROb2RlID0gbW9ycGhlZE5vZGUuYWN0dWFsaXplKGZyb21Ob2RlLm93bmVyRG9jdW1lbnQgfHwgZG9jKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhZCB0byBzd2FwIG91dCB0aGUgZnJvbSBub2RlIHdpdGggYSBuZXcgbm9kZSBiZWNhdXNlIHRoZSBvbGRcbiAgICAgICAgICAgIC8vIG5vZGUgd2FzIG5vdCBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBub2RlIHRoZW4gd2UgbmVlZCB0b1xuICAgICAgICAgICAgLy8gcmVwbGFjZSB0aGUgb2xkIERPTSBub2RlIGluIHRoZSBvcmlnaW5hbCBET00gdHJlZS4gVGhpcyBpcyBvbmx5XG4gICAgICAgICAgICAvLyBwb3NzaWJsZSBpZiB0aGUgb3JpZ2luYWwgRE9NIG5vZGUgd2FzIHBhcnQgb2YgYSBET00gdHJlZSB3aGljaFxuICAgICAgICAgICAgLy8gd2Uga25vdyBpcyB0aGUgY2FzZSBpZiBpdCBoYXMgYSBwYXJlbnQgbm9kZS5cbiAgICAgICAgICAgIGZyb21Ob2RlLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG1vcnBoZWROb2RlLCBmcm9tTm9kZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbW9ycGhlZE5vZGU7XG4gICAgfTtcbn1cblxudmFyIG1vcnBoZG9tID0gbW9ycGhkb21GYWN0b3J5KG1vcnBoQXR0cnMpO1xuXG5leHBvcnQgZGVmYXVsdCBtb3JwaGRvbTtcbiIsICJpbXBvcnQge1xuICBQSFhfQ09NUE9ORU5ULFxuICBQSFhfRElTQUJMRV9XSVRILFxuICBQSFhfRkVFREJBQ0tfRk9SLFxuICBQSFhfUFJVTkUsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfU0VTU0lPTixcbiAgUEhYX1NLSVAsXG4gIFBIWF9TVEFUSUMsXG4gIFBIWF9UUklHR0VSX0FDVElPTixcbiAgUEhYX1VQREFURVxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBkZXRlY3REdXBsaWNhdGVJZHMsXG4gIGlzQ2lkXG59IGZyb20gXCIuL3V0aWxzXCJcblxuaW1wb3J0IERPTSBmcm9tIFwiLi9kb21cIlxuaW1wb3J0IERPTVBvc3RNb3JwaFJlc3RvcmVyIGZyb20gXCIuL2RvbV9wb3N0X21vcnBoX3Jlc3RvcmVyXCJcbmltcG9ydCBtb3JwaGRvbSBmcm9tIFwibW9ycGhkb21cIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBET01QYXRjaCB7XG4gIHN0YXRpYyBwYXRjaEVsKGZyb21FbCwgdG9FbCwgYWN0aXZlRWxlbWVudCl7XG4gICAgbW9ycGhkb20oZnJvbUVsLCB0b0VsLCB7XG4gICAgICBjaGlsZHJlbk9ubHk6IGZhbHNlLFxuICAgICAgb25CZWZvcmVFbFVwZGF0ZWQ6IChmcm9tRWwsIHRvRWwpID0+IHtcbiAgICAgICAgaWYoYWN0aXZlRWxlbWVudCAmJiBhY3RpdmVFbGVtZW50LmlzU2FtZU5vZGUoZnJvbUVsKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKSl7XG4gICAgICAgICAgRE9NLm1lcmdlRm9jdXNlZElucHV0KGZyb21FbCwgdG9FbClcbiAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBjb25zdHJ1Y3Rvcih2aWV3LCBjb250YWluZXIsIGlkLCBodG1sLCB0YXJnZXRDSUQpe1xuICAgIHRoaXMudmlldyA9IHZpZXdcbiAgICB0aGlzLmxpdmVTb2NrZXQgPSB2aWV3LmxpdmVTb2NrZXRcbiAgICB0aGlzLmNvbnRhaW5lciA9IGNvbnRhaW5lclxuICAgIHRoaXMuaWQgPSBpZFxuICAgIHRoaXMucm9vdElEID0gdmlldy5yb290LmlkXG4gICAgdGhpcy5odG1sID0gaHRtbFxuICAgIHRoaXMudGFyZ2V0Q0lEID0gdGFyZ2V0Q0lEXG4gICAgdGhpcy5jaWRQYXRjaCA9IGlzQ2lkKHRoaXMudGFyZ2V0Q0lEKVxuICAgIHRoaXMuY2FsbGJhY2tzID0ge1xuICAgICAgYmVmb3JlYWRkZWQ6IFtdLCBiZWZvcmV1cGRhdGVkOiBbXSwgYmVmb3JlcGh4Q2hpbGRBZGRlZDogW10sXG4gICAgICBhZnRlcmFkZGVkOiBbXSwgYWZ0ZXJ1cGRhdGVkOiBbXSwgYWZ0ZXJkaXNjYXJkZWQ6IFtdLCBhZnRlcnBoeENoaWxkQWRkZWQ6IFtdLFxuICAgICAgYWZ0ZXJ0cmFuc2l0aW9uc0Rpc2NhcmRlZDogW11cbiAgICB9XG4gIH1cblxuICBiZWZvcmUoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYmVmb3JlJHtraW5kfWBdLnB1c2goY2FsbGJhY2spIH1cbiAgYWZ0ZXIoa2luZCwgY2FsbGJhY2speyB0aGlzLmNhbGxiYWNrc1tgYWZ0ZXIke2tpbmR9YF0ucHVzaChjYWxsYmFjaykgfVxuXG4gIHRyYWNrQmVmb3JlKGtpbmQsIC4uLmFyZ3Mpe1xuICAgIHRoaXMuY2FsbGJhY2tzW2BiZWZvcmUke2tpbmR9YF0uZm9yRWFjaChjYWxsYmFjayA9PiBjYWxsYmFjayguLi5hcmdzKSlcbiAgfVxuXG4gIHRyYWNrQWZ0ZXIoa2luZCwgLi4uYXJncyl7XG4gICAgdGhpcy5jYWxsYmFja3NbYGFmdGVyJHtraW5kfWBdLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soLi4uYXJncykpXG4gIH1cblxuICBtYXJrUHJ1bmFibGVDb250ZW50Rm9yUmVtb3ZhbCgpe1xuICAgIERPTS5hbGwodGhpcy5jb250YWluZXIsIFwiW3BoeC11cGRhdGU9YXBwZW5kXSA+ICosIFtwaHgtdXBkYXRlPXByZXBlbmRdID4gKlwiLCBlbCA9PiB7XG4gICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX1BSVU5FLCBcIlwiKVxuICAgIH0pXG4gIH1cblxuICBwZXJmb3JtKCl7XG4gICAgbGV0IHt2aWV3LCBsaXZlU29ja2V0LCBjb250YWluZXIsIGh0bWx9ID0gdGhpc1xuICAgIGxldCB0YXJnZXRDb250YWluZXIgPSB0aGlzLmlzQ0lEUGF0Y2goKSA/IHRoaXMudGFyZ2V0Q0lEQ29udGFpbmVyKGh0bWwpIDogY29udGFpbmVyXG4gICAgaWYodGhpcy5pc0NJRFBhdGNoKCkgJiYgIXRhcmdldENvbnRhaW5lcil7IHJldHVybiB9XG5cbiAgICBsZXQgZm9jdXNlZCA9IGxpdmVTb2NrZXQuZ2V0QWN0aXZlRWxlbWVudCgpXG4gICAgbGV0IHtzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uRW5kfSA9IGZvY3VzZWQgJiYgRE9NLmhhc1NlbGVjdGlvblJhbmdlKGZvY3VzZWQpID8gZm9jdXNlZCA6IHt9XG4gICAgbGV0IHBoeFVwZGF0ZSA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfVVBEQVRFKVxuICAgIGxldCBwaHhGZWVkYmFja0ZvciA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKVxuICAgIGxldCBkaXNhYmxlV2l0aCA9IGxpdmVTb2NrZXQuYmluZGluZyhQSFhfRElTQUJMRV9XSVRIKVxuICAgIGxldCBwaHhUcmlnZ2VyRXh0ZXJuYWwgPSBsaXZlU29ja2V0LmJpbmRpbmcoUEhYX1RSSUdHRVJfQUNUSU9OKVxuICAgIGxldCBwaHhSZW1vdmUgPSBsaXZlU29ja2V0LmJpbmRpbmcoXCJyZW1vdmVcIilcbiAgICBsZXQgYWRkZWQgPSBbXVxuICAgIGxldCB1cGRhdGVzID0gW11cbiAgICBsZXQgYXBwZW5kUHJlcGVuZFVwZGF0ZXMgPSBbXVxuICAgIGxldCBwZW5kaW5nUmVtb3ZlcyA9IFtdXG4gICAgbGV0IGV4dGVybmFsRm9ybVRyaWdnZXJlZCA9IG51bGxcblxuICAgIGxldCBkaWZmSFRNTCA9IGxpdmVTb2NrZXQudGltZShcInByZW1vcnBoIGNvbnRhaW5lciBwcmVwXCIsICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmJ1aWxkRGlmZkhUTUwoY29udGFpbmVyLCBodG1sLCBwaHhVcGRhdGUsIHRhcmdldENvbnRhaW5lcilcbiAgICB9KVxuXG4gICAgdGhpcy50cmFja0JlZm9yZShcImFkZGVkXCIsIGNvbnRhaW5lcilcbiAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBjb250YWluZXIsIGNvbnRhaW5lcilcblxuICAgIGxpdmVTb2NrZXQudGltZShcIm1vcnBoZG9tXCIsICgpID0+IHtcbiAgICAgIG1vcnBoZG9tKHRhcmdldENvbnRhaW5lciwgZGlmZkhUTUwsIHtcbiAgICAgICAgY2hpbGRyZW5Pbmx5OiB0YXJnZXRDb250YWluZXIuZ2V0QXR0cmlidXRlKFBIWF9DT01QT05FTlQpID09PSBudWxsLFxuICAgICAgICBnZXROb2RlS2V5OiAobm9kZSkgPT4ge1xuICAgICAgICAgIHJldHVybiBET00uaXNQaHhEZXN0cm95ZWQobm9kZSkgPyBudWxsIDogbm9kZS5pZFxuICAgICAgICB9LFxuICAgICAgICBvbkJlZm9yZU5vZGVBZGRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgdGhpcy50cmFja0JlZm9yZShcImFkZGVkXCIsIGVsKVxuICAgICAgICAgIHJldHVybiBlbFxuICAgICAgICB9LFxuICAgICAgICBvbk5vZGVBZGRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgLy8gaGFjayB0byBmaXggU2FmYXJpIGhhbmRsaW5nIG9mIGltZyBzcmNzZXQgYW5kIHZpZGVvIHRhZ3NcbiAgICAgICAgICBpZihlbCBpbnN0YW5jZW9mIEhUTUxJbWFnZUVsZW1lbnQgJiYgZWwuc3Jjc2V0KXtcbiAgICAgICAgICAgIGVsLnNyY3NldCA9IGVsLnNyY3NldFxuICAgICAgICAgIH0gZWxzZSBpZihlbCBpbnN0YW5jZW9mIEhUTUxWaWRlb0VsZW1lbnQgJiYgZWwuYXV0b3BsYXkpe1xuICAgICAgICAgICAgZWwucGxheSgpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKERPTS5pc05vd1RyaWdnZXJGb3JtRXh0ZXJuYWwoZWwsIHBoeFRyaWdnZXJFeHRlcm5hbCkpe1xuICAgICAgICAgICAgZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkID0gZWxcbiAgICAgICAgICB9XG4gICAgICAgICAgLy9pbnB1dCBoYW5kbGluZ1xuICAgICAgICAgIERPTS5kaXNjYXJkRXJyb3IodGFyZ2V0Q29udGFpbmVyLCBlbCwgcGh4RmVlZGJhY2tGb3IpXG4gICAgICAgICAgLy8gbmVzdGVkIHZpZXcgaGFuZGxpbmdcbiAgICAgICAgICBpZigoRE9NLmlzUGh4Q2hpbGQoZWwpICYmIHZpZXcub3duc0VsZW1lbnQoZWwpKSB8fCBET00uaXNQaHhTdGlja3koZWwpICYmIHZpZXcub3duc0VsZW1lbnQoZWwucGFyZW50Tm9kZSkpe1xuICAgICAgICAgICAgdGhpcy50cmFja0FmdGVyKFwicGh4Q2hpbGRBZGRlZFwiLCBlbClcbiAgICAgICAgICB9XG4gICAgICAgICAgYWRkZWQucHVzaChlbClcbiAgICAgICAgfSxcbiAgICAgICAgb25Ob2RlRGlzY2FyZGVkOiAoZWwpID0+IHtcbiAgICAgICAgICAvLyBuZXN0ZWQgdmlldyBoYW5kbGluZ1xuICAgICAgICAgIGlmKERPTS5pc1BoeENoaWxkKGVsKSB8fCBET00uaXNQaHhTdGlja3koZWwpKXsgbGl2ZVNvY2tldC5kZXN0cm95Vmlld0J5RWwoZWwpIH1cbiAgICAgICAgICB0aGlzLnRyYWNrQWZ0ZXIoXCJkaXNjYXJkZWRcIiwgZWwpXG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlTm9kZURpc2NhcmRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgaWYoZWwuZ2V0QXR0cmlidXRlICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfUFJVTkUpICE9PSBudWxsKXsgcmV0dXJuIHRydWUgfVxuICAgICAgICAgIGlmKGVsLnBhcmVudE5vZGUgIT09IG51bGwgJiYgRE9NLmlzUGh4VXBkYXRlKGVsLnBhcmVudE5vZGUsIHBoeFVwZGF0ZSwgW1wiYXBwZW5kXCIsIFwicHJlcGVuZFwiXSkgJiYgZWwuaWQpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUocGh4UmVtb3ZlKSl7XG4gICAgICAgICAgICBwZW5kaW5nUmVtb3Zlcy5wdXNoKGVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHRoaXMuc2tpcENJRFNpYmxpbmcoZWwpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBvbkVsVXBkYXRlZDogKGVsKSA9PiB7XG4gICAgICAgICAgaWYoRE9NLmlzTm93VHJpZ2dlckZvcm1FeHRlcm5hbChlbCwgcGh4VHJpZ2dlckV4dGVybmFsKSl7XG4gICAgICAgICAgICBleHRlcm5hbEZvcm1UcmlnZ2VyZWQgPSBlbFxuICAgICAgICAgIH1cbiAgICAgICAgICB1cGRhdGVzLnB1c2goZWwpXG4gICAgICAgIH0sXG4gICAgICAgIG9uQmVmb3JlRWxVcGRhdGVkOiAoZnJvbUVsLCB0b0VsKSA9PiB7XG4gICAgICAgICAgRE9NLmNsZWFuQ2hpbGROb2Rlcyh0b0VsLCBwaHhVcGRhdGUpXG4gICAgICAgICAgaWYodGhpcy5za2lwQ0lEU2libGluZyh0b0VsKSl7IHJldHVybiBmYWxzZSB9XG4gICAgICAgICAgaWYoRE9NLmlzUGh4U3RpY2t5KGZyb21FbCkpeyByZXR1cm4gZmFsc2UgfVxuICAgICAgICAgIGlmKERPTS5pc0lnbm9yZWQoZnJvbUVsLCBwaHhVcGRhdGUpKXtcbiAgICAgICAgICAgIHRoaXMudHJhY2tCZWZvcmUoXCJ1cGRhdGVkXCIsIGZyb21FbCwgdG9FbClcbiAgICAgICAgICAgIERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2lzSWdub3JlZDogdHJ1ZX0pXG4gICAgICAgICAgICB1cGRhdGVzLnB1c2goZnJvbUVsKVxuICAgICAgICAgICAgRE9NLmFwcGx5U3RpY2t5T3BlcmF0aW9ucyhmcm9tRWwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYoZnJvbUVsLnR5cGUgPT09IFwibnVtYmVyXCIgJiYgKGZyb21FbC52YWxpZGl0eSAmJiBmcm9tRWwudmFsaWRpdHkuYmFkSW5wdXQpKXsgcmV0dXJuIGZhbHNlIH1cbiAgICAgICAgICBpZighRE9NLnN5bmNQZW5kaW5nUmVmKGZyb21FbCwgdG9FbCwgZGlzYWJsZVdpdGgpKXtcbiAgICAgICAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGZyb21FbCkpe1xuICAgICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICAgIHVwZGF0ZXMucHVzaChmcm9tRWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKGZyb21FbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIG5lc3RlZCB2aWV3IGhhbmRsaW5nXG4gICAgICAgICAgaWYoRE9NLmlzUGh4Q2hpbGQodG9FbCkpe1xuICAgICAgICAgICAgbGV0IHByZXZTZXNzaW9uID0gZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfU0VTU0lPTilcbiAgICAgICAgICAgIERPTS5tZXJnZUF0dHJzKGZyb21FbCwgdG9FbCwge2V4Y2x1ZGU6IFtQSFhfU1RBVElDXX0pXG4gICAgICAgICAgICBpZihwcmV2U2Vzc2lvbiAhPT0gXCJcIil7IGZyb21FbC5zZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04sIHByZXZTZXNzaW9uKSB9XG4gICAgICAgICAgICBmcm9tRWwuc2V0QXR0cmlidXRlKFBIWF9ST09UX0lELCB0aGlzLnJvb3RJRClcbiAgICAgICAgICAgIERPTS5hcHBseVN0aWNreU9wZXJhdGlvbnMoZnJvbUVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gaW5wdXQgaGFuZGxpbmdcbiAgICAgICAgICBET00uY29weVByaXZhdGVzKHRvRWwsIGZyb21FbClcbiAgICAgICAgICBET00uZGlzY2FyZEVycm9yKHRhcmdldENvbnRhaW5lciwgdG9FbCwgcGh4RmVlZGJhY2tGb3IpXG5cbiAgICAgICAgICBsZXQgaXNGb2N1c2VkRm9ybUVsID0gZm9jdXNlZCAmJiBmcm9tRWwuaXNTYW1lTm9kZShmb2N1c2VkKSAmJiBET00uaXNGb3JtSW5wdXQoZnJvbUVsKVxuICAgICAgICAgIGlmKGlzRm9jdXNlZEZvcm1FbCl7XG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICBET00ubWVyZ2VGb2N1c2VkSW5wdXQoZnJvbUVsLCB0b0VsKVxuICAgICAgICAgICAgRE9NLnN5bmNBdHRyc1RvUHJvcHMoZnJvbUVsKVxuICAgICAgICAgICAgdXBkYXRlcy5wdXNoKGZyb21FbClcbiAgICAgICAgICAgIERPTS5hcHBseVN0aWNreU9wZXJhdGlvbnMoZnJvbUVsKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmKERPTS5pc1BoeFVwZGF0ZSh0b0VsLCBwaHhVcGRhdGUsIFtcImFwcGVuZFwiLCBcInByZXBlbmRcIl0pKXtcbiAgICAgICAgICAgICAgYXBwZW5kUHJlcGVuZFVwZGF0ZXMucHVzaChuZXcgRE9NUG9zdE1vcnBoUmVzdG9yZXIoZnJvbUVsLCB0b0VsLCB0b0VsLmdldEF0dHJpYnV0ZShwaHhVcGRhdGUpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIERPTS5zeW5jQXR0cnNUb1Byb3BzKHRvRWwpXG4gICAgICAgICAgICBET00uYXBwbHlTdGlja3lPcGVyYXRpb25zKHRvRWwpXG4gICAgICAgICAgICB0aGlzLnRyYWNrQmVmb3JlKFwidXBkYXRlZFwiLCBmcm9tRWwsIHRvRWwpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYobGl2ZVNvY2tldC5pc0RlYnVnRW5hYmxlZCgpKXsgZGV0ZWN0RHVwbGljYXRlSWRzKCkgfVxuXG4gICAgaWYoYXBwZW5kUHJlcGVuZFVwZGF0ZXMubGVuZ3RoID4gMCl7XG4gICAgICBsaXZlU29ja2V0LnRpbWUoXCJwb3N0LW1vcnBoIGFwcGVuZC9wcmVwZW5kIHJlc3RvcmF0aW9uXCIsICgpID0+IHtcbiAgICAgICAgYXBwZW5kUHJlcGVuZFVwZGF0ZXMuZm9yRWFjaCh1cGRhdGUgPT4gdXBkYXRlLnBlcmZvcm0oKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgbGl2ZVNvY2tldC5zaWxlbmNlRXZlbnRzKCgpID0+IERPTS5yZXN0b3JlRm9jdXMoZm9jdXNlZCwgc2VsZWN0aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCkpXG4gICAgRE9NLmRpc3BhdGNoRXZlbnQoZG9jdW1lbnQsIFwicGh4OnVwZGF0ZVwiKVxuICAgIGFkZGVkLmZvckVhY2goZWwgPT4gdGhpcy50cmFja0FmdGVyKFwiYWRkZWRcIiwgZWwpKVxuICAgIHVwZGF0ZXMuZm9yRWFjaChlbCA9PiB0aGlzLnRyYWNrQWZ0ZXIoXCJ1cGRhdGVkXCIsIGVsKSlcblxuICAgIGlmKHBlbmRpbmdSZW1vdmVzLmxlbmd0aCA+IDApe1xuICAgICAgbGl2ZVNvY2tldC50cmFuc2l0aW9uUmVtb3ZlcyhwZW5kaW5nUmVtb3ZlcylcbiAgICAgIGxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIHBlbmRpbmdSZW1vdmVzLmZvckVhY2goZWwgPT4ge1xuICAgICAgICAgIGxldCBjaGlsZCA9IERPTS5maXJzdFBoeENoaWxkKGVsKVxuICAgICAgICAgIGlmKGNoaWxkKXsgbGl2ZVNvY2tldC5kZXN0cm95Vmlld0J5RWwoY2hpbGQpIH1cbiAgICAgICAgICBlbC5yZW1vdmUoKVxuICAgICAgICB9KVxuICAgICAgICB0aGlzLnRyYWNrQWZ0ZXIoXCJ0cmFuc2l0aW9uc0Rpc2NhcmRlZFwiLCBwZW5kaW5nUmVtb3ZlcylcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYoZXh0ZXJuYWxGb3JtVHJpZ2dlcmVkKXtcbiAgICAgIGxpdmVTb2NrZXQuZGlzY29ubmVjdCgpXG4gICAgICBleHRlcm5hbEZvcm1UcmlnZ2VyZWQuc3VibWl0KClcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlzQ0lEUGF0Y2goKXsgcmV0dXJuIHRoaXMuY2lkUGF0Y2ggfVxuXG4gIHNraXBDSURTaWJsaW5nKGVsKXtcbiAgICByZXR1cm4gZWwubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGVsLmdldEF0dHJpYnV0ZShQSFhfU0tJUCkgIT09IG51bGxcbiAgfVxuXG4gIHRhcmdldENJRENvbnRhaW5lcihodG1sKXtcbiAgICBpZighdGhpcy5pc0NJRFBhdGNoKCkpeyByZXR1cm4gfVxuICAgIGxldCBbZmlyc3QsIC4uLnJlc3RdID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmNvbnRhaW5lciwgdGhpcy50YXJnZXRDSUQpXG4gICAgaWYocmVzdC5sZW5ndGggPT09IDAgJiYgRE9NLmNoaWxkTm9kZUxlbmd0aChodG1sKSA9PT0gMSl7XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZpcnN0ICYmIGZpcnN0LnBhcmVudE5vZGVcbiAgICB9XG4gIH1cblxuICAvLyBidWlsZHMgSFRNTCBmb3IgbW9ycGhkb20gcGF0Y2hcbiAgLy8gLSBmb3IgZnVsbCBwYXRjaGVzIG9mIExpdmVWaWV3IG9yIGEgY29tcG9uZW50IHdpdGggYSBzaW5nbGVcbiAgLy8gICByb290IG5vZGUsIHNpbXBseSByZXR1cm5zIHRoZSBIVE1MXG4gIC8vIC0gZm9yIHBhdGNoZXMgb2YgYSBjb21wb25lbnQgd2l0aCBtdWx0aXBsZSByb290IG5vZGVzLCB0aGVcbiAgLy8gICBwYXJlbnQgbm9kZSBiZWNvbWVzIHRoZSB0YXJnZXQgY29udGFpbmVyIGFuZCBub24tY29tcG9uZW50XG4gIC8vICAgc2libGluZ3MgYXJlIG1hcmtlZCBhcyBza2lwLlxuICBidWlsZERpZmZIVE1MKGNvbnRhaW5lciwgaHRtbCwgcGh4VXBkYXRlLCB0YXJnZXRDb250YWluZXIpe1xuICAgIGxldCBpc0NJRFBhdGNoID0gdGhpcy5pc0NJRFBhdGNoKClcbiAgICBsZXQgaXNDSURXaXRoU2luZ2xlUm9vdCA9IGlzQ0lEUGF0Y2ggJiYgdGFyZ2V0Q29udGFpbmVyLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSA9PT0gdGhpcy50YXJnZXRDSUQudG9TdHJpbmcoKVxuICAgIGlmKCFpc0NJRFBhdGNoIHx8IGlzQ0lEV2l0aFNpbmdsZVJvb3Qpe1xuICAgICAgcmV0dXJuIGh0bWxcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gY29tcG9uZW50IHBhdGNoIHdpdGggbXVsdGlwbGUgQ0lEIHJvb3RzXG4gICAgICBsZXQgZGlmZkNvbnRhaW5lciA9IG51bGxcbiAgICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgICAgZGlmZkNvbnRhaW5lciA9IERPTS5jbG9uZU5vZGUodGFyZ2V0Q29udGFpbmVyKVxuICAgICAgbGV0IFtmaXJzdENvbXBvbmVudCwgLi4ucmVzdF0gPSBET00uZmluZENvbXBvbmVudE5vZGVMaXN0KGRpZmZDb250YWluZXIsIHRoaXMudGFyZ2V0Q0lEKVxuICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFxuICAgICAgcmVzdC5mb3JFYWNoKGVsID0+IGVsLnJlbW92ZSgpKVxuICAgICAgQXJyYXkuZnJvbShkaWZmQ29udGFpbmVyLmNoaWxkTm9kZXMpLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgICAvLyB3ZSBjYW4gb25seSBza2lwIHRyYWNrYWJsZSBub2RlcyB3aXRoIGFuIElEXG4gICAgICAgIGlmKGNoaWxkLmlkICYmIGNoaWxkLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBjaGlsZC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCkgIT09IHRoaXMudGFyZ2V0Q0lELnRvU3RyaW5nKCkpe1xuICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShQSFhfU0tJUCwgXCJcIilcbiAgICAgICAgICBjaGlsZC5pbm5lckhUTUwgPSBcIlwiXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBBcnJheS5mcm9tKHRlbXBsYXRlLmNvbnRlbnQuY2hpbGROb2RlcykuZm9yRWFjaChlbCA9PiBkaWZmQ29udGFpbmVyLmluc2VydEJlZm9yZShlbCwgZmlyc3RDb21wb25lbnQpKVxuICAgICAgZmlyc3RDb21wb25lbnQucmVtb3ZlKClcbiAgICAgIHJldHVybiBkaWZmQ29udGFpbmVyLm91dGVySFRNTFxuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7XG4gIENPTVBPTkVOVFMsXG4gIERZTkFNSUNTLFxuICBURU1QTEFURVMsXG4gIEVWRU5UUyxcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX1NLSVAsXG4gIFJFUExZLFxuICBTVEFUSUMsXG4gIFRJVExFXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBsb2dFcnJvcixcbiAgaXNDaWQsXG59IGZyb20gXCIuL3V0aWxzXCJcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyZWQge1xuICBzdGF0aWMgZXh0cmFjdChkaWZmKXtcbiAgICBsZXQge1tSRVBMWV06IHJlcGx5LCBbRVZFTlRTXTogZXZlbnRzLCBbVElUTEVdOiB0aXRsZX0gPSBkaWZmXG4gICAgZGVsZXRlIGRpZmZbUkVQTFldXG4gICAgZGVsZXRlIGRpZmZbRVZFTlRTXVxuICAgIGRlbGV0ZSBkaWZmW1RJVExFXVxuICAgIHJldHVybiB7ZGlmZiwgdGl0bGUsIHJlcGx5OiByZXBseSB8fCBudWxsLCBldmVudHM6IGV2ZW50cyB8fCBbXX1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHZpZXdJZCwgcmVuZGVyZWQpe1xuICAgIHRoaXMudmlld0lkID0gdmlld0lkXG4gICAgdGhpcy5yZW5kZXJlZCA9IHt9XG4gICAgdGhpcy5tZXJnZURpZmYocmVuZGVyZWQpXG4gIH1cblxuICBwYXJlbnRWaWV3SWQoKXsgcmV0dXJuIHRoaXMudmlld0lkIH1cblxuICB0b1N0cmluZyhvbmx5Q2lkcyl7XG4gICAgcmV0dXJuIHRoaXMucmVjdXJzaXZlVG9TdHJpbmcodGhpcy5yZW5kZXJlZCwgdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSwgb25seUNpZHMpXG4gIH1cblxuICByZWN1cnNpdmVUb1N0cmluZyhyZW5kZXJlZCwgY29tcG9uZW50cyA9IHJlbmRlcmVkW0NPTVBPTkVOVFNdLCBvbmx5Q2lkcyl7XG4gICAgb25seUNpZHMgPSBvbmx5Q2lkcyA/IG5ldyBTZXQob25seUNpZHMpIDogbnVsbFxuICAgIGxldCBvdXRwdXQgPSB7YnVmZmVyOiBcIlwiLCBjb21wb25lbnRzOiBjb21wb25lbnRzLCBvbmx5Q2lkczogb25seUNpZHN9XG4gICAgdGhpcy50b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgbnVsbCwgb3V0cHV0KVxuICAgIHJldHVybiBvdXRwdXQuYnVmZmVyXG4gIH1cblxuICBjb21wb25lbnRDSURzKGRpZmYpeyByZXR1cm4gT2JqZWN0LmtleXMoZGlmZltDT01QT05FTlRTXSB8fCB7fSkubWFwKGkgPT4gcGFyc2VJbnQoaSkpIH1cblxuICBpc0NvbXBvbmVudE9ubHlEaWZmKGRpZmYpe1xuICAgIGlmKCFkaWZmW0NPTVBPTkVOVFNdKXsgcmV0dXJuIGZhbHNlIH1cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoZGlmZikubGVuZ3RoID09PSAxXG4gIH1cblxuICBnZXRDb21wb25lbnQoZGlmZiwgY2lkKXsgcmV0dXJuIGRpZmZbQ09NUE9ORU5UU11bY2lkXSB9XG5cbiAgbWVyZ2VEaWZmKGRpZmYpe1xuICAgIGxldCBuZXdjID0gZGlmZltDT01QT05FTlRTXVxuICAgIGxldCBjYWNoZSA9IHt9XG4gICAgZGVsZXRlIGRpZmZbQ09NUE9ORU5UU11cbiAgICB0aGlzLnJlbmRlcmVkID0gdGhpcy5tdXRhYmxlTWVyZ2UodGhpcy5yZW5kZXJlZCwgZGlmZilcbiAgICB0aGlzLnJlbmRlcmVkW0NPTVBPTkVOVFNdID0gdGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSB8fCB7fVxuXG4gICAgaWYobmV3Yyl7XG4gICAgICBsZXQgb2xkYyA9IHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU11cblxuICAgICAgZm9yKGxldCBjaWQgaW4gbmV3Yyl7XG4gICAgICAgIG5ld2NbY2lkXSA9IHRoaXMuY2FjaGVkRmluZENvbXBvbmVudChjaWQsIG5ld2NbY2lkXSwgb2xkYywgbmV3YywgY2FjaGUpXG4gICAgICB9XG5cbiAgICAgIGZvcihsZXQgY2lkIGluIG5ld2MpeyBvbGRjW2NpZF0gPSBuZXdjW2NpZF0gfVxuICAgICAgZGlmZltDT01QT05FTlRTXSA9IG5ld2NcbiAgICB9XG4gIH1cblxuICBjYWNoZWRGaW5kQ29tcG9uZW50KGNpZCwgY2RpZmYsIG9sZGMsIG5ld2MsIGNhY2hlKXtcbiAgICBpZihjYWNoZVtjaWRdKXtcbiAgICAgIHJldHVybiBjYWNoZVtjaWRdXG4gICAgfSBlbHNlIHtcbiAgICAgIGxldCBuZGlmZiwgc3RhdCwgc2NpZCA9IGNkaWZmW1NUQVRJQ11cblxuICAgICAgaWYoaXNDaWQoc2NpZCkpe1xuICAgICAgICBsZXQgdGRpZmZcblxuICAgICAgICBpZihzY2lkID4gMCl7XG4gICAgICAgICAgdGRpZmYgPSB0aGlzLmNhY2hlZEZpbmRDb21wb25lbnQoc2NpZCwgbmV3Y1tzY2lkXSwgb2xkYywgbmV3YywgY2FjaGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGRpZmYgPSBvbGRjWy1zY2lkXVxuICAgICAgICB9XG5cbiAgICAgICAgc3RhdCA9IHRkaWZmW1NUQVRJQ11cbiAgICAgICAgbmRpZmYgPSB0aGlzLmNsb25lTWVyZ2UodGRpZmYsIGNkaWZmKVxuICAgICAgICBuZGlmZltTVEFUSUNdID0gc3RhdFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmRpZmYgPSBjZGlmZltTVEFUSUNdICE9PSB1bmRlZmluZWQgPyBjZGlmZiA6IHRoaXMuY2xvbmVNZXJnZShvbGRjW2NpZF0gfHwge30sIGNkaWZmKVxuICAgICAgfVxuXG4gICAgICBjYWNoZVtjaWRdID0gbmRpZmZcbiAgICAgIHJldHVybiBuZGlmZlxuICAgIH1cbiAgfVxuXG4gIG11dGFibGVNZXJnZSh0YXJnZXQsIHNvdXJjZSl7XG4gICAgaWYoc291cmNlW1NUQVRJQ10gIT09IHVuZGVmaW5lZCl7XG4gICAgICByZXR1cm4gc291cmNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2UpXG4gICAgICByZXR1cm4gdGFyZ2V0XG4gICAgfVxuICB9XG5cbiAgZG9NdXRhYmxlTWVyZ2UodGFyZ2V0LCBzb3VyY2Upe1xuICAgIGZvcihsZXQga2V5IGluIHNvdXJjZSl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICB0aGlzLmRvTXV0YWJsZU1lcmdlKHRhcmdldFZhbCwgdmFsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjbG9uZU1lcmdlKHRhcmdldCwgc291cmNlKXtcbiAgICBsZXQgbWVyZ2VkID0gey4uLnRhcmdldCwgLi4uc291cmNlfVxuICAgIGZvcihsZXQga2V5IGluIG1lcmdlZCl7XG4gICAgICBsZXQgdmFsID0gc291cmNlW2tleV1cbiAgICAgIGxldCB0YXJnZXRWYWwgPSB0YXJnZXRba2V5XVxuICAgICAgaWYoaXNPYmplY3QodmFsKSAmJiB2YWxbU1RBVElDXSA9PT0gdW5kZWZpbmVkICYmIGlzT2JqZWN0KHRhcmdldFZhbCkpe1xuICAgICAgICBtZXJnZWRba2V5XSA9IHRoaXMuY2xvbmVNZXJnZSh0YXJnZXRWYWwsIHZhbClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG1lcmdlZFxuICB9XG5cbiAgY29tcG9uZW50VG9TdHJpbmcoY2lkKXsgcmV0dXJuIHRoaXMucmVjdXJzaXZlQ0lEVG9TdHJpbmcodGhpcy5yZW5kZXJlZFtDT01QT05FTlRTXSwgY2lkKSB9XG5cbiAgcHJ1bmVDSURzKGNpZHMpe1xuICAgIGNpZHMuZm9yRWFjaChjaWQgPT4gZGVsZXRlIHRoaXMucmVuZGVyZWRbQ09NUE9ORU5UU11bY2lkXSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICBnZXQoKXsgcmV0dXJuIHRoaXMucmVuZGVyZWQgfVxuXG4gIGlzTmV3RmluZ2VycHJpbnQoZGlmZiA9IHt9KXsgcmV0dXJuICEhZGlmZltTVEFUSUNdIH1cblxuICB0ZW1wbGF0ZVN0YXRpYyhwYXJ0LCB0ZW1wbGF0ZXMpe1xuICAgIGlmKHR5cGVvZiAocGFydCkgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIHJldHVybiB0ZW1wbGF0ZXNbcGFydF1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHBhcnRcbiAgICB9XG4gIH1cblxuICB0b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpe1xuICAgIGlmKHJlbmRlcmVkW0RZTkFNSUNTXSl7IHJldHVybiB0aGlzLmNvbXByZWhlbnNpb25Ub0J1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpIH1cbiAgICBsZXQge1tTVEFUSUNdOiBzdGF0aWNzfSA9IHJlbmRlcmVkXG4gICAgc3RhdGljcyA9IHRoaXMudGVtcGxhdGVTdGF0aWMoc3RhdGljcywgdGVtcGxhdGVzKVxuXG4gICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzWzBdXG4gICAgZm9yKGxldCBpID0gMTsgaSA8IHN0YXRpY3MubGVuZ3RoOyBpKyspe1xuICAgICAgdGhpcy5keW5hbWljVG9CdWZmZXIocmVuZGVyZWRbaSAtIDFdLCB0ZW1wbGF0ZXMsIG91dHB1dClcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gc3RhdGljc1tpXVxuICAgIH1cbiAgfVxuXG4gIGNvbXByZWhlbnNpb25Ub0J1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpe1xuICAgIGxldCB7W0RZTkFNSUNTXTogZHluYW1pY3MsIFtTVEFUSUNdOiBzdGF0aWNzfSA9IHJlbmRlcmVkXG4gICAgc3RhdGljcyA9IHRoaXMudGVtcGxhdGVTdGF0aWMoc3RhdGljcywgdGVtcGxhdGVzKVxuICAgIGxldCBjb21wVGVtcGxhdGVzID0gdGVtcGxhdGVzIHx8IHJlbmRlcmVkW1RFTVBMQVRFU11cblxuICAgIGZvcihsZXQgZCA9IDA7IGQgPCBkeW5hbWljcy5sZW5ndGg7IGQrKyl7XG4gICAgICBsZXQgZHluYW1pYyA9IGR5bmFtaWNzW2RdXG4gICAgICBvdXRwdXQuYnVmZmVyICs9IHN0YXRpY3NbMF1cbiAgICAgIGZvcihsZXQgaSA9IDE7IGkgPCBzdGF0aWNzLmxlbmd0aDsgaSsrKXtcbiAgICAgICAgdGhpcy5keW5hbWljVG9CdWZmZXIoZHluYW1pY1tpIC0gMV0sIGNvbXBUZW1wbGF0ZXMsIG91dHB1dClcbiAgICAgICAgb3V0cHV0LmJ1ZmZlciArPSBzdGF0aWNzW2ldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZHluYW1pY1RvQnVmZmVyKHJlbmRlcmVkLCB0ZW1wbGF0ZXMsIG91dHB1dCl7XG4gICAgaWYodHlwZW9mIChyZW5kZXJlZCkgPT09IFwibnVtYmVyXCIpe1xuICAgICAgb3V0cHV0LmJ1ZmZlciArPSB0aGlzLnJlY3Vyc2l2ZUNJRFRvU3RyaW5nKG91dHB1dC5jb21wb25lbnRzLCByZW5kZXJlZCwgb3V0cHV0Lm9ubHlDaWRzKVxuICAgIH0gZWxzZSBpZihpc09iamVjdChyZW5kZXJlZCkpe1xuICAgICAgdGhpcy50b091dHB1dEJ1ZmZlcihyZW5kZXJlZCwgdGVtcGxhdGVzLCBvdXRwdXQpXG4gICAgfSBlbHNlIHtcbiAgICAgIG91dHB1dC5idWZmZXIgKz0gcmVuZGVyZWRcbiAgICB9XG4gIH1cblxuICByZWN1cnNpdmVDSURUb1N0cmluZyhjb21wb25lbnRzLCBjaWQsIG9ubHlDaWRzKXtcbiAgICBsZXQgY29tcG9uZW50ID0gY29tcG9uZW50c1tjaWRdIHx8IGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm9yIENJRCAke2NpZH1gLCBjb21wb25lbnRzKVxuICAgIGxldCB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKVxuICAgIHRlbXBsYXRlLmlubmVySFRNTCA9IHRoaXMucmVjdXJzaXZlVG9TdHJpbmcoY29tcG9uZW50LCBjb21wb25lbnRzLCBvbmx5Q2lkcylcbiAgICBsZXQgY29udGFpbmVyID0gdGVtcGxhdGUuY29udGVudFxuICAgIGxldCBza2lwID0gb25seUNpZHMgJiYgIW9ubHlDaWRzLmhhcyhjaWQpXG5cbiAgICBsZXQgW2hhc0NoaWxkTm9kZXMsIGhhc0NoaWxkQ29tcG9uZW50c10gPVxuICAgICAgQXJyYXkuZnJvbShjb250YWluZXIuY2hpbGROb2RlcykucmVkdWNlKChbaGFzTm9kZXMsIGhhc0NvbXBvbmVudHNdLCBjaGlsZCwgaSkgPT4ge1xuICAgICAgICBpZihjaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpe1xuICAgICAgICAgIGlmKGNoaWxkLmdldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5UKSl7XG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCB0cnVlXVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGlsZC5zZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVCwgY2lkKVxuICAgICAgICAgIGlmKCFjaGlsZC5pZCl7IGNoaWxkLmlkID0gYCR7dGhpcy5wYXJlbnRWaWV3SWQoKX0tJHtjaWR9LSR7aX1gIH1cbiAgICAgICAgICBpZihza2lwKXtcbiAgICAgICAgICAgIGNoaWxkLnNldEF0dHJpYnV0ZShQSFhfU0tJUCwgXCJcIilcbiAgICAgICAgICAgIGNoaWxkLmlubmVySFRNTCA9IFwiXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFt0cnVlLCBoYXNDb21wb25lbnRzXVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKGNoaWxkLm5vZGVWYWx1ZS50cmltKCkgIT09IFwiXCIpe1xuICAgICAgICAgICAgbG9nRXJyb3IoXCJvbmx5IEhUTUwgZWxlbWVudCB0YWdzIGFyZSBhbGxvd2VkIGF0IHRoZSByb290IG9mIGNvbXBvbmVudHMuXFxuXFxuXCIgK1xuICAgICAgICAgICAgICBgZ290OiBcIiR7Y2hpbGQubm9kZVZhbHVlLnRyaW0oKX1cIlxcblxcbmAgK1xuICAgICAgICAgICAgICBcIndpdGhpbjpcXG5cIiwgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgICAgICAgIGNoaWxkLnJlcGxhY2VXaXRoKHRoaXMuY3JlYXRlU3BhbihjaGlsZC5ub2RlVmFsdWUsIGNpZCkpXG4gICAgICAgICAgICByZXR1cm4gW3RydWUsIGhhc0NvbXBvbmVudHNdXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkLnJlbW92ZSgpXG4gICAgICAgICAgICByZXR1cm4gW2hhc05vZGVzLCBoYXNDb21wb25lbnRzXVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSwgW2ZhbHNlLCBmYWxzZV0pXG5cbiAgICBpZighaGFzQ2hpbGROb2RlcyAmJiAhaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgdGhlIGNvbXBvbmVudCBpcyBlbXB0eTpcXG5cIixcbiAgICAgICAgdGVtcGxhdGUuaW5uZXJIVE1MLnRyaW0oKSlcbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVNwYW4oXCJcIiwgY2lkKS5vdXRlckhUTUxcbiAgICB9IGVsc2UgaWYoIWhhc0NoaWxkTm9kZXMgJiYgaGFzQ2hpbGRDb21wb25lbnRzKXtcbiAgICAgIGxvZ0Vycm9yKFwiZXhwZWN0ZWQgYXQgbGVhc3Qgb25lIEhUTUwgZWxlbWVudCB0YWcgZGlyZWN0bHkgaW5zaWRlIGEgY29tcG9uZW50LCBidXQgb25seSBzdWJjb21wb25lbnRzIHdlcmUgZm91bmQuIEEgY29tcG9uZW50IG11c3QgcmVuZGVyIGF0IGxlYXN0IG9uZSBIVE1MIHRhZyBkaXJlY3RseSBpbnNpZGUgaXRzZWxmLlwiLFxuICAgICAgICB0ZW1wbGF0ZS5pbm5lckhUTUwudHJpbSgpKVxuICAgICAgcmV0dXJuIHRlbXBsYXRlLmlubmVySFRNTFxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGVtcGxhdGUuaW5uZXJIVE1MXG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU3Bhbih0ZXh0LCBjaWQpe1xuICAgIGxldCBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNwYW5cIilcbiAgICBzcGFuLmlubmVyVGV4dCA9IHRleHRcbiAgICBzcGFuLnNldEF0dHJpYnV0ZShQSFhfQ09NUE9ORU5ULCBjaWQpXG4gICAgcmV0dXJuIHNwYW5cbiAgfVxufVxuIiwgImxldCB2aWV3SG9va0lEID0gMVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlld0hvb2sge1xuICBzdGF0aWMgbWFrZUlEKCl7IHJldHVybiB2aWV3SG9va0lEKysgfVxuICBzdGF0aWMgZWxlbWVudElEKGVsKXsgcmV0dXJuIGVsLnBoeEhvb2tJZCB9XG5cbiAgY29uc3RydWN0b3IodmlldywgZWwsIGNhbGxiYWNrcyl7XG4gICAgdGhpcy5fX3ZpZXcgPSB2aWV3XG4gICAgdGhpcy5saXZlU29ja2V0ID0gdmlldy5saXZlU29ja2V0XG4gICAgdGhpcy5fX2NhbGxiYWNrcyA9IGNhbGxiYWNrc1xuICAgIHRoaXMuX19saXN0ZW5lcnMgPSBuZXcgU2V0KClcbiAgICB0aGlzLl9faXNEaXNjb25uZWN0ZWQgPSBmYWxzZVxuICAgIHRoaXMuZWwgPSBlbFxuICAgIHRoaXMuZWwucGh4SG9va0lkID0gdGhpcy5jb25zdHJ1Y3Rvci5tYWtlSUQoKVxuICAgIGZvcihsZXQga2V5IGluIHRoaXMuX19jYWxsYmFja3MpeyB0aGlzW2tleV0gPSB0aGlzLl9fY2FsbGJhY2tzW2tleV0gfVxuICB9XG5cbiAgX19tb3VudGVkKCl7IHRoaXMubW91bnRlZCAmJiB0aGlzLm1vdW50ZWQoKSB9XG4gIF9fdXBkYXRlZCgpeyB0aGlzLnVwZGF0ZWQgJiYgdGhpcy51cGRhdGVkKCkgfVxuICBfX2JlZm9yZVVwZGF0ZSgpeyB0aGlzLmJlZm9yZVVwZGF0ZSAmJiB0aGlzLmJlZm9yZVVwZGF0ZSgpIH1cbiAgX19kZXN0cm95ZWQoKXsgdGhpcy5kZXN0cm95ZWQgJiYgdGhpcy5kZXN0cm95ZWQoKSB9XG4gIF9fcmVjb25uZWN0ZWQoKXtcbiAgICBpZih0aGlzLl9faXNEaXNjb25uZWN0ZWQpe1xuICAgICAgdGhpcy5fX2lzRGlzY29ubmVjdGVkID0gZmFsc2VcbiAgICAgIHRoaXMucmVjb25uZWN0ZWQgJiYgdGhpcy5yZWNvbm5lY3RlZCgpXG4gICAgfVxuICB9XG4gIF9fZGlzY29ubmVjdGVkKCl7XG4gICAgdGhpcy5fX2lzRGlzY29ubmVjdGVkID0gdHJ1ZVxuICAgIHRoaXMuZGlzY29ubmVjdGVkICYmIHRoaXMuZGlzY29ubmVjdGVkKClcbiAgfVxuXG4gIHB1c2hFdmVudChldmVudCwgcGF5bG9hZCA9IHt9LCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy5wdXNoSG9va0V2ZW50KG51bGwsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5KVxuICB9XG5cbiAgcHVzaEV2ZW50VG8ocGh4VGFyZ2V0LCBldmVudCwgcGF5bG9hZCA9IHt9LCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy53aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgKHZpZXcsIHRhcmdldEN0eCkgPT4ge1xuICAgICAgcmV0dXJuIHZpZXcucHVzaEhvb2tFdmVudCh0YXJnZXRDdHgsIGV2ZW50LCBwYXlsb2FkLCBvblJlcGx5KVxuICAgIH0pXG4gIH1cblxuICBoYW5kbGVFdmVudChldmVudCwgY2FsbGJhY2spe1xuICAgIGxldCBjYWxsYmFja1JlZiA9IChjdXN0b21FdmVudCwgYnlwYXNzKSA9PiBieXBhc3MgPyBldmVudCA6IGNhbGxiYWNrKGN1c3RvbUV2ZW50LmRldGFpbClcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihgcGh4OiR7ZXZlbnR9YCwgY2FsbGJhY2tSZWYpXG4gICAgdGhpcy5fX2xpc3RlbmVycy5hZGQoY2FsbGJhY2tSZWYpXG4gICAgcmV0dXJuIGNhbGxiYWNrUmVmXG4gIH1cblxuICByZW1vdmVIYW5kbGVFdmVudChjYWxsYmFja1JlZil7XG4gICAgbGV0IGV2ZW50ID0gY2FsbGJhY2tSZWYobnVsbCwgdHJ1ZSlcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihgcGh4OiR7ZXZlbnR9YCwgY2FsbGJhY2tSZWYpXG4gICAgdGhpcy5fX2xpc3RlbmVycy5kZWxldGUoY2FsbGJhY2tSZWYpXG4gIH1cblxuICB1cGxvYWQobmFtZSwgZmlsZXMpe1xuICAgIHJldHVybiB0aGlzLl9fdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpXG4gIH1cblxuICB1cGxvYWRUbyhwaHhUYXJnZXQsIG5hbWUsIGZpbGVzKXtcbiAgICByZXR1cm4gdGhpcy5fX3ZpZXcud2l0aGluVGFyZ2V0cyhwaHhUYXJnZXQsIHZpZXcgPT4gdmlldy5kaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXMpKVxuICB9XG5cbiAgX19jbGVhbnVwX18oKXtcbiAgICB0aGlzLl9fbGlzdGVuZXJzLmZvckVhY2goY2FsbGJhY2tSZWYgPT4gdGhpcy5yZW1vdmVIYW5kbGVFdmVudChjYWxsYmFja1JlZikpXG4gIH1cbn1cbiIsICJpbXBvcnQgRE9NIGZyb20gXCIuL2RvbVwiXG5cbmxldCBKUyA9IHtcbiAgZXhlYyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZGVmYXVsdHMpe1xuICAgIGxldCBbZGVmYXVsdEtpbmQsIGRlZmF1bHRBcmdzXSA9IGRlZmF1bHRzIHx8IFtudWxsLCB7fV1cbiAgICBsZXQgY29tbWFuZHMgPSBwaHhFdmVudC5jaGFyQXQoMCkgPT09IFwiW1wiID9cbiAgICAgIEpTT04ucGFyc2UocGh4RXZlbnQpIDogW1tkZWZhdWx0S2luZCwgZGVmYXVsdEFyZ3NdXVxuXG4gICAgY29tbWFuZHMuZm9yRWFjaCgoW2tpbmQsIGFyZ3NdKSA9PiB7XG4gICAgICBpZihraW5kID09PSBkZWZhdWx0S2luZCAmJiBkZWZhdWx0QXJncy5kYXRhKXtcbiAgICAgICAgYXJncy5kYXRhID0gT2JqZWN0LmFzc2lnbihhcmdzLmRhdGEgfHwge30sIGRlZmF1bHRBcmdzLmRhdGEpXG4gICAgICB9XG4gICAgICB0aGlzLmZpbHRlclRvRWxzKHNvdXJjZUVsLCBhcmdzKS5mb3JFYWNoKGVsID0+IHtcbiAgICAgICAgdGhpc1tgZXhlY18ke2tpbmR9YF0oZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCBhcmdzKVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuXG4gIGlzVmlzaWJsZShlbCl7XG4gICAgcmV0dXJuICEhKGVsLm9mZnNldFdpZHRoIHx8IGVsLm9mZnNldEhlaWdodCB8fCBlbC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA+IDApXG4gIH0sXG5cbiAgLy8gcHJpdmF0ZVxuXG4gIC8vIGNvbW1hbmRzXG5cbiAgZXhlY19kaXNwYXRjaChldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHt0bywgZXZlbnQsIGRldGFpbCwgYnViYmxlc30pe1xuICAgIGRldGFpbCA9IGRldGFpbCB8fCB7fVxuICAgIGRldGFpbC5kaXNwYXRjaGVyID0gc291cmNlRWxcbiAgICBET00uZGlzcGF0Y2hFdmVudChlbCwgZXZlbnQsIHtkZXRhaWwsIGJ1YmJsZXN9KVxuICB9LFxuXG4gIGV4ZWNfcHVzaChldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIGFyZ3Mpe1xuICAgIGlmKCF2aWV3LmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuXG4gICAgbGV0IHtldmVudCwgZGF0YSwgdGFyZ2V0LCBwYWdlX2xvYWRpbmcsIGxvYWRpbmcsIHZhbHVlLCBkaXNwYXRjaGVyfSA9IGFyZ3NcbiAgICBsZXQgcHVzaE9wdHMgPSB7bG9hZGluZywgdmFsdWUsIHRhcmdldCwgcGFnZV9sb2FkaW5nOiAhIXBhZ2VfbG9hZGluZ31cbiAgICBsZXQgdGFyZ2V0U3JjID0gZXZlbnRUeXBlID09PSBcImNoYW5nZVwiICYmIGRpc3BhdGNoZXIgPyBkaXNwYXRjaGVyIDogc291cmNlRWxcbiAgICBsZXQgcGh4VGFyZ2V0ID0gdGFyZ2V0IHx8IHRhcmdldFNyYy5nZXRBdHRyaWJ1dGUodmlldy5iaW5kaW5nKFwidGFyZ2V0XCIpKSB8fCB0YXJnZXRTcmNcbiAgICB2aWV3LndpdGhpblRhcmdldHMocGh4VGFyZ2V0LCAodGFyZ2V0VmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICBpZihldmVudFR5cGUgPT09IFwiY2hhbmdlXCIpe1xuICAgICAgICBsZXQge25ld0NpZCwgX3RhcmdldCwgY2FsbGJhY2t9ID0gYXJnc1xuICAgICAgICBfdGFyZ2V0ID0gX3RhcmdldCB8fCAoc291cmNlRWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ID8gc291cmNlRWwubmFtZSA6IHVuZGVmaW5lZClcbiAgICAgICAgaWYoX3RhcmdldCl7IHB1c2hPcHRzLl90YXJnZXQgPSBfdGFyZ2V0IH1cbiAgICAgICAgdGFyZ2V0Vmlldy5wdXNoSW5wdXQoc291cmNlRWwsIHRhcmdldEN0eCwgbmV3Q2lkLCBldmVudCB8fCBwaHhFdmVudCwgcHVzaE9wdHMsIGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIGlmKGV2ZW50VHlwZSA9PT0gXCJzdWJtaXRcIil7XG4gICAgICAgIHRhcmdldFZpZXcuc3VibWl0Rm9ybShzb3VyY2VFbCwgdGFyZ2V0Q3R4LCBldmVudCB8fCBwaHhFdmVudCwgcHVzaE9wdHMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRWaWV3LnB1c2hFdmVudChldmVudFR5cGUsIHNvdXJjZUVsLCB0YXJnZXRDdHgsIGV2ZW50IHx8IHBoeEV2ZW50LCBkYXRhLCBwdXNoT3B0cylcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIGV4ZWNfYWRkX2NsYXNzKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge25hbWVzLCB0cmFuc2l0aW9uLCB0aW1lfSl7XG4gICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIG5hbWVzLCBbXSwgdHJhbnNpdGlvbiwgdGltZSwgdmlldylcbiAgfSxcblxuICBleGVjX3JlbW92ZV9jbGFzcyhldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtuYW1lcywgdHJhbnNpdGlvbiwgdGltZX0pe1xuICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBbXSwgbmFtZXMsIHRyYW5zaXRpb24sIHRpbWUsIHZpZXcpXG4gIH0sXG5cbiAgZXhlY190cmFuc2l0aW9uKGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge3RpbWUsIHRyYW5zaXRpb259KXtcbiAgICBsZXQgW3RyYW5zaXRpb25fc3RhcnQsIHJ1bm5pbmcsIHRyYW5zaXRpb25fZW5kXSA9IHRyYW5zaXRpb25cbiAgICBsZXQgb25TdGFydCA9ICgpID0+IHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCB0cmFuc2l0aW9uX3N0YXJ0LmNvbmNhdChydW5uaW5nKSwgW10pXG4gICAgbGV0IG9uRG9uZSA9ICgpID0+IHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCB0cmFuc2l0aW9uX2VuZCwgdHJhbnNpdGlvbl9zdGFydC5jb25jYXQocnVubmluZykpXG4gICAgdmlldy50cmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSlcbiAgfSxcblxuICBleGVjX3RvZ2dsZShldmVudFR5cGUsIHBoeEV2ZW50LCB2aWV3LCBzb3VyY2VFbCwgZWwsIHtkaXNwbGF5LCBpbnMsIG91dHMsIHRpbWV9KXtcbiAgICB0aGlzLnRvZ2dsZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCBpbnMsIG91dHMsIHRpbWUpXG4gIH0sXG5cbiAgZXhlY19zaG93KGV2ZW50VHlwZSwgcGh4RXZlbnQsIHZpZXcsIHNvdXJjZUVsLCBlbCwge2Rpc3BsYXksIHRyYW5zaXRpb24sIHRpbWV9KXtcbiAgICB0aGlzLnNob3coZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZSlcbiAgfSxcblxuICBleGVjX2hpZGUoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7ZGlzcGxheSwgdHJhbnNpdGlvbiwgdGltZX0pe1xuICAgIHRoaXMuaGlkZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lKVxuICB9LFxuXG4gIGV4ZWNfc2V0X2F0dHIoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7YXR0cjogW2F0dHIsIHZhbF19KXtcbiAgICB0aGlzLnNldE9yUmVtb3ZlQXR0cnMoZWwsIFtbYXR0ciwgdmFsXV0sIFtdKVxuICB9LFxuXG4gIGV4ZWNfcmVtb3ZlX2F0dHIoZXZlbnRUeXBlLCBwaHhFdmVudCwgdmlldywgc291cmNlRWwsIGVsLCB7YXR0cn0pe1xuICAgIHRoaXMuc2V0T3JSZW1vdmVBdHRycyhlbCwgW10sIFthdHRyXSlcbiAgfSxcblxuICAvLyB1dGlscyBmb3IgY29tbWFuZHNcblxuICBzaG93KGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIHRyYW5zaXRpb24sIHRpbWUpe1xuICAgIGlmKCF0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgdGhpcy50b2dnbGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgdHJhbnNpdGlvbiwgbnVsbCwgdGltZSlcbiAgICB9XG4gIH0sXG5cbiAgaGlkZShldmVudFR5cGUsIHZpZXcsIGVsLCBkaXNwbGF5LCB0cmFuc2l0aW9uLCB0aW1lKXtcbiAgICBpZih0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgdGhpcy50b2dnbGUoZXZlbnRUeXBlLCB2aWV3LCBlbCwgZGlzcGxheSwgbnVsbCwgdHJhbnNpdGlvbiwgdGltZSlcbiAgICB9XG4gIH0sXG5cbiAgdG9nZ2xlKGV2ZW50VHlwZSwgdmlldywgZWwsIGRpc3BsYXksIGlucywgb3V0cywgdGltZSl7XG4gICAgbGV0IFtpbkNsYXNzZXMsIGluU3RhcnRDbGFzc2VzLCBpbkVuZENsYXNzZXNdID0gaW5zIHx8IFtbXSwgW10sIFtdXVxuICAgIGxldCBbb3V0Q2xhc3Nlcywgb3V0U3RhcnRDbGFzc2VzLCBvdXRFbmRDbGFzc2VzXSA9IG91dHMgfHwgW1tdLCBbXSwgW11dXG4gICAgaWYoaW5DbGFzc2VzLmxlbmd0aCA+IDAgfHwgb3V0Q2xhc3Nlcy5sZW5ndGggPiAwKXtcbiAgICAgIGlmKHRoaXMuaXNWaXNpYmxlKGVsKSl7XG4gICAgICAgIGxldCBvblN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBvdXRTdGFydENsYXNzZXMsIGluQ2xhc3Nlcy5jb25jYXQoaW5TdGFydENsYXNzZXMpLmNvbmNhdChpbkVuZENsYXNzZXMpKVxuICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIG91dENsYXNzZXMsIFtdKVxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgb3V0RW5kQ2xhc3Nlcywgb3V0U3RhcnRDbGFzc2VzKSlcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OmhpZGUtc3RhcnRcIikpXG4gICAgICAgIHZpZXcudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hZGRPclJlbW92ZUNsYXNzZXMoZWwsIFtdLCBvdXRDbGFzc2VzLmNvbmNhdChvdXRFbmRDbGFzc2VzKSlcbiAgICAgICAgICBET00ucHV0U3RpY2t5KGVsLCBcInRvZ2dsZVwiLCBjdXJyZW50RWwgPT4gY3VycmVudEVsLnN0eWxlLmRpc3BsYXkgPSBcIm5vbmVcIilcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKGV2ZW50VHlwZSA9PT0gXCJyZW1vdmVcIil7IHJldHVybiB9XG4gICAgICAgIGxldCBvblN0YXJ0ID0gKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBpblN0YXJ0Q2xhc3Nlcywgb3V0Q2xhc3Nlcy5jb25jYXQob3V0U3RhcnRDbGFzc2VzKS5jb25jYXQob3V0RW5kQ2xhc3NlcykpXG4gICAgICAgICAgRE9NLnB1dFN0aWNreShlbCwgXCJ0b2dnbGVcIiwgY3VycmVudEVsID0+IGN1cnJlbnRFbC5zdHlsZS5kaXNwbGF5ID0gKGRpc3BsYXkgfHwgXCJibG9ja1wiKSlcbiAgICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBpbkNsYXNzZXMsIFtdKVxuICAgICAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgaW5FbmRDbGFzc2VzLCBpblN0YXJ0Q2xhc3NlcykpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpzaG93LXN0YXJ0XCIpKVxuICAgICAgICB2aWV3LnRyYW5zaXRpb24odGltZSwgb25TdGFydCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBbXSwgaW5DbGFzc2VzLmNvbmNhdChpbkVuZENsYXNzZXMpKVxuICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OnNob3ctZW5kXCIpKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZih0aGlzLmlzVmlzaWJsZShlbCkpe1xuICAgICAgICB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpoaWRlLXN0YXJ0XCIpKVxuICAgICAgICAgIERPTS5wdXRTdGlja3koZWwsIFwidG9nZ2xlXCIsIGN1cnJlbnRFbCA9PiBjdXJyZW50RWwuc3R5bGUuZGlzcGxheSA9IFwibm9uZVwiKVxuICAgICAgICAgIGVsLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwicGh4OmhpZGUtZW5kXCIpKVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgZWwuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJwaHg6c2hvdy1zdGFydFwiKSlcbiAgICAgICAgICBET00ucHV0U3RpY2t5KGVsLCBcInRvZ2dsZVwiLCBjdXJyZW50RWwgPT4gY3VycmVudEVsLnN0eWxlLmRpc3BsYXkgPSBkaXNwbGF5IHx8IFwiYmxvY2tcIilcbiAgICAgICAgICBlbC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInBoeDpzaG93LWVuZFwiKSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYWRkT3JSZW1vdmVDbGFzc2VzKGVsLCBhZGRzLCByZW1vdmVzLCB0cmFuc2l0aW9uLCB0aW1lLCB2aWV3KXtcbiAgICBsZXQgW3RyYW5zaXRpb25fcnVuLCB0cmFuc2l0aW9uX3N0YXJ0LCB0cmFuc2l0aW9uX2VuZF0gPSB0cmFuc2l0aW9uIHx8IFtbXSwgW10sIFtdXVxuICAgIGlmKHRyYW5zaXRpb25fcnVuLmxlbmd0aCA+IDApe1xuICAgICAgbGV0IG9uU3RhcnQgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgdHJhbnNpdGlvbl9zdGFydC5jb25jYXQodHJhbnNpdGlvbl9ydW4pLCBbXSlcbiAgICAgIGxldCBvbkRvbmUgPSAoKSA9PiB0aGlzLmFkZE9yUmVtb3ZlQ2xhc3NlcyhlbCwgYWRkcy5jb25jYXQodHJhbnNpdGlvbl9lbmQpLCByZW1vdmVzLmNvbmNhdCh0cmFuc2l0aW9uX3J1bikuY29uY2F0KHRyYW5zaXRpb25fc3RhcnQpKVxuICAgICAgcmV0dXJuIHZpZXcudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpXG4gICAgfVxuICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgbGV0IFtwcmV2QWRkcywgcHJldlJlbW92ZXNdID0gRE9NLmdldFN0aWNreShlbCwgXCJjbGFzc2VzXCIsIFtbXSwgW11dKVxuICAgICAgbGV0IGtlZXBBZGRzID0gYWRkcy5maWx0ZXIobmFtZSA9PiBwcmV2QWRkcy5pbmRleE9mKG5hbWUpIDwgMCAmJiAhZWwuY2xhc3NMaXN0LmNvbnRhaW5zKG5hbWUpKVxuICAgICAgbGV0IGtlZXBSZW1vdmVzID0gcmVtb3Zlcy5maWx0ZXIobmFtZSA9PiBwcmV2UmVtb3Zlcy5pbmRleE9mKG5hbWUpIDwgMCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMobmFtZSkpXG4gICAgICBsZXQgbmV3QWRkcyA9IHByZXZBZGRzLmZpbHRlcihuYW1lID0+IHJlbW92ZXMuaW5kZXhPZihuYW1lKSA8IDApLmNvbmNhdChrZWVwQWRkcylcbiAgICAgIGxldCBuZXdSZW1vdmVzID0gcHJldlJlbW92ZXMuZmlsdGVyKG5hbWUgPT4gYWRkcy5pbmRleE9mKG5hbWUpIDwgMCkuY29uY2F0KGtlZXBSZW1vdmVzKVxuXG4gICAgICBET00ucHV0U3RpY2t5KGVsLCBcImNsYXNzZXNcIiwgY3VycmVudEVsID0+IHtcbiAgICAgICAgY3VycmVudEVsLmNsYXNzTGlzdC5yZW1vdmUoLi4ubmV3UmVtb3ZlcylcbiAgICAgICAgY3VycmVudEVsLmNsYXNzTGlzdC5hZGQoLi4ubmV3QWRkcylcbiAgICAgICAgcmV0dXJuIFtuZXdBZGRzLCBuZXdSZW1vdmVzXVxuICAgICAgfSlcbiAgICB9KVxuICB9LFxuXG4gIHNldE9yUmVtb3ZlQXR0cnMoZWwsIHNldHMsIHJlbW92ZXMpe1xuICAgIGxldCBbcHJldlNldHMsIHByZXZSZW1vdmVzXSA9IERPTS5nZXRTdGlja3koZWwsIFwiYXR0cnNcIiwgW1tdLCBbXV0pXG5cbiAgICBsZXQgYWx0ZXJlZEF0dHJzID0gc2V0cy5tYXAoKFthdHRyLCBfdmFsXSkgPT4gYXR0cikuY29uY2F0KHJlbW92ZXMpO1xuICAgIGxldCBuZXdTZXRzID0gcHJldlNldHMuZmlsdGVyKChbYXR0ciwgX3ZhbF0pID0+ICFhbHRlcmVkQXR0cnMuaW5jbHVkZXMoYXR0cikpLmNvbmNhdChzZXRzKTtcbiAgICBsZXQgbmV3UmVtb3ZlcyA9IHByZXZSZW1vdmVzLmZpbHRlcigoYXR0cikgPT4gIWFsdGVyZWRBdHRycy5pbmNsdWRlcyhhdHRyKSkuY29uY2F0KHJlbW92ZXMpO1xuXG4gICAgRE9NLnB1dFN0aWNreShlbCwgXCJhdHRyc1wiLCBjdXJyZW50RWwgPT4ge1xuICAgICAgbmV3UmVtb3Zlcy5mb3JFYWNoKGF0dHIgPT4gY3VycmVudEVsLnJlbW92ZUF0dHJpYnV0ZShhdHRyKSlcbiAgICAgIG5ld1NldHMuZm9yRWFjaCgoW2F0dHIsIHZhbF0pID0+IGN1cnJlbnRFbC5zZXRBdHRyaWJ1dGUoYXR0ciwgdmFsKSlcbiAgICAgIHJldHVybiBbbmV3U2V0cywgbmV3UmVtb3Zlc11cbiAgICB9KVxuICB9LFxuXG4gIGhhc0FsbENsYXNzZXMoZWwsIGNsYXNzZXMpeyByZXR1cm4gY2xhc3Nlcy5ldmVyeShuYW1lID0+IGVsLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKSkgfSxcblxuICBpc1RvZ2dsZWRPdXQoZWwsIG91dENsYXNzZXMpe1xuICAgIHJldHVybiAhdGhpcy5pc1Zpc2libGUoZWwpIHx8IHRoaXMuaGFzQWxsQ2xhc3NlcyhlbCwgb3V0Q2xhc3NlcylcbiAgfSxcblxuICBmaWx0ZXJUb0Vscyhzb3VyY2VFbCwge3RvfSl7XG4gICAgcmV0dXJuIHRvID8gRE9NLmFsbChkb2N1bWVudCwgdG8pIDogW3NvdXJjZUVsXVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEpTXG4iLCAiaW1wb3J0IHtcbiAgQkVGT1JFX1VOTE9BRF9MT0FERVJfVElNRU9VVCxcbiAgQ0hFQ0tBQkxFX0lOUFVUUyxcbiAgQ09OU0VDVVRJVkVfUkVMT0FEUyxcbiAgUEhYX0FVVE9fUkVDT1ZFUixcbiAgUEhYX0NPTVBPTkVOVCxcbiAgUEhYX0NPTk5FQ1RFRF9DTEFTUyxcbiAgUEhYX0RJU0FCTEVfV0lUSCxcbiAgUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFLFxuICBQSFhfRElTQUJMRUQsXG4gIFBIWF9ESVNDT05ORUNURURfQ0xBU1MsXG4gIFBIWF9FVkVOVF9DTEFTU0VTLFxuICBQSFhfRVJST1JfQ0xBU1MsXG4gIFBIWF9GRUVEQkFDS19GT1IsXG4gIFBIWF9IQVNfU1VCTUlUVEVELFxuICBQSFhfSE9PSyxcbiAgUEhYX1BBR0VfTE9BRElORyxcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1BST0dSRVNTLFxuICBQSFhfUkVBRE9OTFksXG4gIFBIWF9SRUYsXG4gIFBIWF9SRUZfU1JDLFxuICBQSFhfUk9PVF9JRCxcbiAgUEhYX1NFU1NJT04sXG4gIFBIWF9TVEFUSUMsXG4gIFBIWF9UUkFDS19TVEFUSUMsXG4gIFBIWF9UUkFDS19VUExPQURTLFxuICBQSFhfVVBEQVRFLFxuICBQSFhfVVBMT0FEX1JFRixcbiAgUEhYX1ZJRVdfU0VMRUNUT1IsXG4gIFBVU0hfVElNRU9VVCxcbiAgUEhYX01BSU4sXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5cbmltcG9ydCB7XG4gIGNsb25lLFxuICBjbG9zZXN0UGh4QmluZGluZyxcbiAgaXNFbXB0eSxcbiAgaXNFcXVhbE9iaixcbiAgbG9nRXJyb3IsXG4gIG1heWJlLFxuICBpc0NpZCxcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBET01QYXRjaCBmcm9tIFwiLi9kb21fcGF0Y2hcIlxuaW1wb3J0IExpdmVVcGxvYWRlciBmcm9tIFwiLi9saXZlX3VwbG9hZGVyXCJcbmltcG9ydCBSZW5kZXJlZCBmcm9tIFwiLi9yZW5kZXJlZFwiXG5pbXBvcnQgVmlld0hvb2sgZnJvbSBcIi4vdmlld19ob29rXCJcbmltcG9ydCBKUyBmcm9tIFwiLi9qc1wiXG5cbmxldCBzZXJpYWxpemVGb3JtID0gKGZvcm0sIG1ldGEsIG9ubHlOYW1lcyA9IFtdKSA9PiB7XG4gIGxldCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YShmb3JtKVxuICBsZXQgdG9SZW1vdmUgPSBbXVxuXG4gIGZvcm1EYXRhLmZvckVhY2goKHZhbCwga2V5LCBfaW5kZXgpID0+IHtcbiAgICBpZih2YWwgaW5zdGFuY2VvZiBGaWxlKXsgdG9SZW1vdmUucHVzaChrZXkpIH1cbiAgfSlcblxuICAvLyBDbGVhbnVwIGFmdGVyIGJ1aWxkaW5nIGZpbGVEYXRhXG4gIHRvUmVtb3ZlLmZvckVhY2goa2V5ID0+IGZvcm1EYXRhLmRlbGV0ZShrZXkpKVxuXG4gIGxldCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgZm9yKGxldCBba2V5LCB2YWxdIG9mIGZvcm1EYXRhLmVudHJpZXMoKSl7XG4gICAgaWYob25seU5hbWVzLmxlbmd0aCA9PT0gMCB8fCBvbmx5TmFtZXMuaW5kZXhPZihrZXkpID49IDApe1xuICAgICAgcGFyYW1zLmFwcGVuZChrZXksIHZhbClcbiAgICB9XG4gIH1cbiAgZm9yKGxldCBtZXRhS2V5IGluIG1ldGEpeyBwYXJhbXMuYXBwZW5kKG1ldGFLZXksIG1ldGFbbWV0YUtleV0pIH1cblxuICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKClcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlldyB7XG4gIGNvbnN0cnVjdG9yKGVsLCBsaXZlU29ja2V0LCBwYXJlbnRWaWV3LCBmbGFzaCl7XG4gICAgdGhpcy5saXZlU29ja2V0ID0gbGl2ZVNvY2tldFxuICAgIHRoaXMuZmxhc2ggPSBmbGFzaFxuICAgIHRoaXMucGFyZW50ID0gcGFyZW50Vmlld1xuICAgIHRoaXMucm9vdCA9IHBhcmVudFZpZXcgPyBwYXJlbnRWaWV3LnJvb3QgOiB0aGlzXG4gICAgdGhpcy5lbCA9IGVsXG4gICAgdGhpcy5pZCA9IHRoaXMuZWwuaWRcbiAgICB0aGlzLnJlZiA9IDBcbiAgICB0aGlzLmNoaWxkSm9pbnMgPSAwXG4gICAgdGhpcy5sb2FkZXJUaW1lciA9IG51bGxcbiAgICB0aGlzLnBlbmRpbmdEaWZmcyA9IFtdXG4gICAgdGhpcy5wcnVuaW5nQ0lEcyA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdCA9IGZhbHNlXG4gICAgdGhpcy5ocmVmID0gbnVsbFxuICAgIHRoaXMuam9pbkNvdW50ID0gdGhpcy5wYXJlbnQgPyB0aGlzLnBhcmVudC5qb2luQ291bnQgLSAxIDogMFxuICAgIHRoaXMuam9pblBlbmRpbmcgPSB0cnVlXG4gICAgdGhpcy5kZXN0cm95ZWQgPSBmYWxzZVxuICAgIHRoaXMuam9pbkNhbGxiYWNrID0gZnVuY3Rpb24ob25Eb25lKXsgb25Eb25lICYmIG9uRG9uZSgpIH1cbiAgICB0aGlzLnN0b3BDYWxsYmFjayA9IGZ1bmN0aW9uKCl7IH1cbiAgICB0aGlzLnBlbmRpbmdKb2luT3BzID0gdGhpcy5wYXJlbnQgPyBudWxsIDogW11cbiAgICB0aGlzLnZpZXdIb29rcyA9IHt9XG4gICAgdGhpcy51cGxvYWRlcnMgPSB7fVxuICAgIHRoaXMuZm9ybVN1Ym1pdHMgPSBbXVxuICAgIHRoaXMuY2hpbGRyZW4gPSB0aGlzLnBhcmVudCA/IG51bGwgOiB7fVxuICAgIHRoaXMucm9vdC5jaGlsZHJlblt0aGlzLmlkXSA9IHt9XG4gICAgdGhpcy5jaGFubmVsID0gdGhpcy5saXZlU29ja2V0LmNoYW5uZWwoYGx2OiR7dGhpcy5pZH1gLCAoKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZWRpcmVjdDogdGhpcy5yZWRpcmVjdCA/IHRoaXMuaHJlZiA6IHVuZGVmaW5lZCxcbiAgICAgICAgdXJsOiB0aGlzLnJlZGlyZWN0ID8gdW5kZWZpbmVkIDogdGhpcy5ocmVmIHx8IHVuZGVmaW5lZCxcbiAgICAgICAgcGFyYW1zOiB0aGlzLmNvbm5lY3RQYXJhbXMoKSxcbiAgICAgICAgc2Vzc2lvbjogdGhpcy5nZXRTZXNzaW9uKCksXG4gICAgICAgIHN0YXRpYzogdGhpcy5nZXRTdGF0aWMoKSxcbiAgICAgICAgZmxhc2g6IHRoaXMuZmxhc2hcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuc2hvd0xvYWRlcih0aGlzLmxpdmVTb2NrZXQubG9hZGVyVGltZW91dClcbiAgICB0aGlzLmJpbmRDaGFubmVsKClcbiAgfVxuXG4gIHNldEhyZWYoaHJlZil7IHRoaXMuaHJlZiA9IGhyZWYgfVxuXG4gIHNldFJlZGlyZWN0KGhyZWYpe1xuICAgIHRoaXMucmVkaXJlY3QgPSB0cnVlXG4gICAgdGhpcy5ocmVmID0gaHJlZlxuICB9XG5cbiAgaXNNYWluKCl7IHJldHVybiB0aGlzLmVsLmhhc0F0dHJpYnV0ZShQSFhfTUFJTikgfVxuXG4gIGNvbm5lY3RQYXJhbXMoKXtcbiAgICBsZXQgcGFyYW1zID0gdGhpcy5saXZlU29ja2V0LnBhcmFtcyh0aGlzLmVsKVxuICAgIGxldCBtYW5pZmVzdCA9XG4gICAgICBET00uYWxsKGRvY3VtZW50LCBgWyR7dGhpcy5iaW5kaW5nKFBIWF9UUkFDS19TVEFUSUMpfV1gKVxuICAgICAgICAubWFwKG5vZGUgPT4gbm9kZS5zcmMgfHwgbm9kZS5ocmVmKS5maWx0ZXIodXJsID0+IHR5cGVvZiAodXJsKSA9PT0gXCJzdHJpbmdcIilcblxuICAgIGlmKG1hbmlmZXN0Lmxlbmd0aCA+IDApeyBwYXJhbXNbXCJfdHJhY2tfc3RhdGljXCJdID0gbWFuaWZlc3QgfVxuICAgIHBhcmFtc1tcIl9tb3VudHNcIl0gPSB0aGlzLmpvaW5Db3VudFxuXG4gICAgcmV0dXJuIHBhcmFtc1xuICB9XG5cbiAgaXNDb25uZWN0ZWQoKXsgcmV0dXJuIHRoaXMuY2hhbm5lbC5jYW5QdXNoKCkgfVxuXG4gIGdldFNlc3Npb24oKXsgcmV0dXJuIHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9TRVNTSU9OKSB9XG5cbiAgZ2V0U3RhdGljKCl7XG4gICAgbGV0IHZhbCA9IHRoaXMuZWwuZ2V0QXR0cmlidXRlKFBIWF9TVEFUSUMpXG4gICAgcmV0dXJuIHZhbCA9PT0gXCJcIiA/IG51bGwgOiB2YWxcbiAgfVxuXG4gIGRlc3Ryb3koY2FsbGJhY2sgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgdGhpcy5kZXN0cm95QWxsQ2hpbGRyZW4oKVxuICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgIGRlbGV0ZSB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1cbiAgICBpZih0aGlzLnBhcmVudCl7IGRlbGV0ZSB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5wYXJlbnQuaWRdW3RoaXMuaWRdIH1cbiAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkZXJUaW1lcilcbiAgICBsZXQgb25GaW5pc2hlZCA9ICgpID0+IHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3Mpe1xuICAgICAgICB0aGlzLmRlc3Ryb3lIb29rKHRoaXMudmlld0hvb2tzW2lkXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBET00ubWFya1BoeENoaWxkRGVzdHJveWVkKHRoaXMuZWwpXG5cbiAgICB0aGlzLmxvZyhcImRlc3Ryb3llZFwiLCAoKSA9PiBbXCJ0aGUgY2hpbGQgaGFzIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBwYXJlbnRcIl0pXG4gICAgdGhpcy5jaGFubmVsLmxlYXZlKClcbiAgICAgIC5yZWNlaXZlKFwib2tcIiwgb25GaW5pc2hlZClcbiAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgb25GaW5pc2hlZClcbiAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCBvbkZpbmlzaGVkKVxuICB9XG5cbiAgc2V0Q29udGFpbmVyQ2xhc3NlcyguLi5jbGFzc2VzKXtcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5yZW1vdmUoXG4gICAgICBQSFhfQ09OTkVDVEVEX0NMQVNTLFxuICAgICAgUEhYX0RJU0NPTk5FQ1RFRF9DTEFTUyxcbiAgICAgIFBIWF9FUlJPUl9DTEFTU1xuICAgIClcbiAgICB0aGlzLmVsLmNsYXNzTGlzdC5hZGQoLi4uY2xhc3NlcylcbiAgfVxuXG4gIHNob3dMb2FkZXIodGltZW91dCl7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMubG9hZGVyVGltZXIpXG4gICAgaWYodGltZW91dCl7XG4gICAgICB0aGlzLmxvYWRlclRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dMb2FkZXIoKSwgdGltZW91dClcbiAgICB9IGVsc2Uge1xuICAgICAgZm9yKGxldCBpZCBpbiB0aGlzLnZpZXdIb29rcyl7IHRoaXMudmlld0hvb2tzW2lkXS5fX2Rpc2Nvbm5lY3RlZCgpIH1cbiAgICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xhc3NlcyhQSFhfRElTQ09OTkVDVEVEX0NMQVNTKVxuICAgIH1cbiAgfVxuXG4gIGhpZGVMb2FkZXIoKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5sb2FkZXJUaW1lcilcbiAgICB0aGlzLnNldENvbnRhaW5lckNsYXNzZXMoUEhYX0NPTk5FQ1RFRF9DTEFTUylcbiAgfVxuXG4gIHRyaWdnZXJSZWNvbm5lY3RlZCgpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy52aWV3SG9va3MpeyB0aGlzLnZpZXdIb29rc1tpZF0uX19yZWNvbm5lY3RlZCgpIH1cbiAgfVxuXG4gIGxvZyhraW5kLCBtc2dDYWxsYmFjayl7XG4gICAgdGhpcy5saXZlU29ja2V0LmxvZyh0aGlzLCBraW5kLCBtc2dDYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lID0gZnVuY3Rpb24oKXt9KXtcbiAgICB0aGlzLmxpdmVTb2NrZXQudHJhbnNpdGlvbih0aW1lLCBvblN0YXJ0LCBvbkRvbmUpXG4gIH1cblxuICB3aXRoaW5UYXJnZXRzKHBoeFRhcmdldCwgY2FsbGJhY2spe1xuICAgIGlmKHBoeFRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50IHx8IHBoeFRhcmdldCBpbnN0YW5jZW9mIFNWR0VsZW1lbnQpe1xuICAgICAgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5vd25lcihwaHhUYXJnZXQsIHZpZXcgPT4gY2FsbGJhY2sodmlldywgcGh4VGFyZ2V0KSlcbiAgICB9XG5cbiAgICBpZihpc0NpZChwaHhUYXJnZXQpKXtcbiAgICAgIGxldCB0YXJnZXRzID0gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBwaHhUYXJnZXQpXG4gICAgICBpZih0YXJnZXRzLmxlbmd0aCA9PT0gMCl7XG4gICAgICAgIGxvZ0Vycm9yKGBubyBjb21wb25lbnQgZm91bmQgbWF0Y2hpbmcgcGh4LXRhcmdldCBvZiAke3BoeFRhcmdldH1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sodGhpcywgcGFyc2VJbnQocGh4VGFyZ2V0KSlcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IHRhcmdldHMgPSBBcnJheS5mcm9tKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwocGh4VGFyZ2V0KSlcbiAgICAgIGlmKHRhcmdldHMubGVuZ3RoID09PSAwKXsgbG9nRXJyb3IoYG5vdGhpbmcgZm91bmQgbWF0Y2hpbmcgdGhlIHBoeC10YXJnZXQgc2VsZWN0b3IgXCIke3BoeFRhcmdldH1cImApIH1cbiAgICAgIHRhcmdldHMuZm9yRWFjaCh0YXJnZXQgPT4gdGhpcy5saXZlU29ja2V0Lm93bmVyKHRhcmdldCwgdmlldyA9PiBjYWxsYmFjayh2aWV3LCB0YXJnZXQpKSlcbiAgICB9XG4gIH1cblxuICBhcHBseURpZmYodHlwZSwgcmF3RGlmZiwgY2FsbGJhY2spe1xuICAgIHRoaXMubG9nKHR5cGUsICgpID0+IFtcIlwiLCBjbG9uZShyYXdEaWZmKV0pXG4gICAgbGV0IHtkaWZmLCByZXBseSwgZXZlbnRzLCB0aXRsZX0gPSBSZW5kZXJlZC5leHRyYWN0KHJhd0RpZmYpXG4gICAgaWYodGl0bGUpeyBET00ucHV0VGl0bGUodGl0bGUpIH1cblxuICAgIGNhbGxiYWNrKHtkaWZmLCByZXBseSwgZXZlbnRzfSlcbiAgICByZXR1cm4gcmVwbHlcbiAgfVxuXG4gIG9uSm9pbihyZXNwKXtcbiAgICBsZXQge3JlbmRlcmVkLCBjb250YWluZXJ9ID0gcmVzcFxuICAgIGlmKGNvbnRhaW5lcil7XG4gICAgICBsZXQgW3RhZywgYXR0cnNdID0gY29udGFpbmVyXG4gICAgICB0aGlzLmVsID0gRE9NLnJlcGxhY2VSb290Q29udGFpbmVyKHRoaXMuZWwsIHRhZywgYXR0cnMpXG4gICAgfVxuICAgIHRoaXMuY2hpbGRKb2lucyA9IDBcbiAgICB0aGlzLmpvaW5QZW5kaW5nID0gdHJ1ZVxuICAgIHRoaXMuZmxhc2ggPSBudWxsXG5cbiAgICBCcm93c2VyLmRyb3BMb2NhbCh0aGlzLmxpdmVTb2NrZXQubG9jYWxTdG9yYWdlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIENPTlNFQ1VUSVZFX1JFTE9BRFMpXG4gICAgdGhpcy5hcHBseURpZmYoXCJtb3VudFwiLCByZW5kZXJlZCwgKHtkaWZmLCBldmVudHN9KSA9PiB7XG4gICAgICB0aGlzLnJlbmRlcmVkID0gbmV3IFJlbmRlcmVkKHRoaXMuaWQsIGRpZmYpXG4gICAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyQ29udGFpbmVyKG51bGwsIFwiam9pblwiKVxuICAgICAgdGhpcy5kcm9wUGVuZGluZ1JlZnMoKVxuICAgICAgbGV0IGZvcm1zID0gdGhpcy5mb3Jtc0ZvclJlY292ZXJ5KGh0bWwpXG4gICAgICB0aGlzLmpvaW5Db3VudCsrXG5cbiAgICAgIGlmKGZvcm1zLmxlbmd0aCA+IDApe1xuICAgICAgICBmb3Jtcy5mb3JFYWNoKChbZm9ybSwgbmV3Rm9ybSwgbmV3Q2lkXSwgaSkgPT4ge1xuICAgICAgICAgIHRoaXMucHVzaEZvcm1SZWNvdmVyeShmb3JtLCBuZXdDaWQsIHJlc3AgPT4ge1xuICAgICAgICAgICAgaWYoaSA9PT0gZm9ybXMubGVuZ3RoIC0gMSl7XG4gICAgICAgICAgICAgIHRoaXMub25Kb2luQ29tcGxldGUocmVzcCwgaHRtbCwgZXZlbnRzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uSm9pbkNvbXBsZXRlKHJlc3AsIGh0bWwsIGV2ZW50cylcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZHJvcFBlbmRpbmdSZWZzKCl7XG4gICAgRE9NLmFsbChkb2N1bWVudCwgYFske1BIWF9SRUZfU1JDfT1cIiR7dGhpcy5pZH1cIl1bJHtQSFhfUkVGfV1gLCBlbCA9PiB7XG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVGX1NSQylcbiAgICB9KVxuICB9XG5cbiAgb25Kb2luQ29tcGxldGUoe2xpdmVfcGF0Y2h9LCBodG1sLCBldmVudHMpe1xuICAgIC8vIEluIG9yZGVyIHRvIHByb3ZpZGUgYSBiZXR0ZXIgZXhwZXJpZW5jZSwgd2Ugd2FudCB0byBqb2luXG4gICAgLy8gYWxsIExpdmVWaWV3cyBmaXJzdCBhbmQgb25seSB0aGVuIGFwcGx5IHRoZWlyIHBhdGNoZXMuXG4gICAgaWYodGhpcy5qb2luQ291bnQgPiAxIHx8ICh0aGlzLnBhcmVudCAmJiAhdGhpcy5wYXJlbnQuaXNKb2luUGVuZGluZygpKSl7XG4gICAgICByZXR1cm4gdGhpcy5hcHBseUpvaW5QYXRjaChsaXZlX3BhdGNoLCBodG1sLCBldmVudHMpXG4gICAgfVxuXG4gICAgLy8gT25lIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCB3ZSBuZWVkIHRvIGZpbmQgcGh4Q2hpbGRyZW5cbiAgICAvLyBpbiB0aGUgaHRtbCBmcmFnbWVudCwgaW5zdGVhZCBvZiBkaXJlY3RseSBvbiB0aGUgRE9NLiBUaGUgZnJhZ21lbnRcbiAgICAvLyBhbHNvIGRvZXMgbm90IGluY2x1ZGUgUEhYX1NUQVRJQywgc28gd2UgbmVlZCB0byBjb3B5IGl0IG92ZXIgZnJvbVxuICAgIC8vIHRoZSBET00uXG4gICAgbGV0IG5ld0NoaWxkcmVuID0gRE9NLmZpbmRQaHhDaGlsZHJlbkluRnJhZ21lbnQoaHRtbCwgdGhpcy5pZCkuZmlsdGVyKHRvRWwgPT4ge1xuICAgICAgbGV0IGZyb21FbCA9IHRvRWwuaWQgJiYgdGhpcy5lbC5xdWVyeVNlbGVjdG9yKGBbaWQ9XCIke3RvRWwuaWR9XCJdYClcbiAgICAgIGxldCBwaHhTdGF0aWMgPSBmcm9tRWwgJiYgZnJvbUVsLmdldEF0dHJpYnV0ZShQSFhfU1RBVElDKVxuICAgICAgaWYocGh4U3RhdGljKXsgdG9FbC5zZXRBdHRyaWJ1dGUoUEhYX1NUQVRJQywgcGh4U3RhdGljKSB9XG4gICAgICByZXR1cm4gdGhpcy5qb2luQ2hpbGQodG9FbClcbiAgICB9KVxuXG4gICAgaWYobmV3Q2hpbGRyZW4ubGVuZ3RoID09PSAwKXtcbiAgICAgIGlmKHRoaXMucGFyZW50KXtcbiAgICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKV0pXG4gICAgICAgIHRoaXMucGFyZW50LmFja0pvaW4odGhpcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMub25BbGxDaGlsZEpvaW5zQ29tcGxldGUoKVxuICAgICAgICB0aGlzLmFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cylcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IHRoaXMuYXBwbHlKb2luUGF0Y2gobGl2ZV9wYXRjaCwgaHRtbCwgZXZlbnRzKV0pXG4gICAgfVxuICB9XG5cbiAgYXR0YWNoVHJ1ZURvY0VsKCl7XG4gICAgdGhpcy5lbCA9IERPTS5ieUlkKHRoaXMuaWQpXG4gICAgdGhpcy5lbC5zZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQsIHRoaXMucm9vdC5pZClcbiAgfVxuXG4gIGFwcGx5Sm9pblBhdGNoKGxpdmVfcGF0Y2gsIGh0bWwsIGV2ZW50cyl7XG4gICAgdGhpcy5hdHRhY2hUcnVlRG9jRWwoKVxuICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBudWxsKVxuICAgIHBhdGNoLm1hcmtQcnVuYWJsZUNvbnRlbnRGb3JSZW1vdmFsKClcbiAgICB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgZmFsc2UpXG4gICAgdGhpcy5qb2luTmV3Q2hpbGRyZW4oKVxuICAgIERPTS5hbGwodGhpcy5lbCwgYFske3RoaXMuYmluZGluZyhQSFhfSE9PSyl9XSwgW2RhdGEtcGh4LSR7UEhYX0hPT0t9XWAsIGhvb2tFbCA9PiB7XG4gICAgICBsZXQgaG9vayA9IHRoaXMuYWRkSG9vayhob29rRWwpXG4gICAgICBpZihob29rKXsgaG9vay5fX21vdW50ZWQoKSB9XG4gICAgfSlcblxuICAgIHRoaXMuam9pblBlbmRpbmcgPSBmYWxzZVxuICAgIHRoaXMubGl2ZVNvY2tldC5kaXNwYXRjaEV2ZW50cyhldmVudHMpXG4gICAgdGhpcy5hcHBseVBlbmRpbmdVcGRhdGVzKClcblxuICAgIGlmKGxpdmVfcGF0Y2gpe1xuICAgICAgbGV0IHtraW5kLCB0b30gPSBsaXZlX3BhdGNoXG4gICAgICB0aGlzLmxpdmVTb2NrZXQuaGlzdG9yeVBhdGNoKHRvLCBraW5kKVxuICAgIH1cbiAgICB0aGlzLmhpZGVMb2FkZXIoKVxuICAgIGlmKHRoaXMuam9pbkNvdW50ID4gMSl7IHRoaXMudHJpZ2dlclJlY29ubmVjdGVkKCkgfVxuICAgIHRoaXMuc3RvcENhbGxiYWNrKClcbiAgfVxuXG4gIHRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGZyb21FbCwgdG9FbCl7XG4gICAgdGhpcy5saXZlU29ja2V0LnRyaWdnZXJET00oXCJvbkJlZm9yZUVsVXBkYXRlZFwiLCBbZnJvbUVsLCB0b0VsXSlcbiAgICBsZXQgaG9vayA9IHRoaXMuZ2V0SG9vayhmcm9tRWwpXG4gICAgbGV0IGlzSWdub3JlZCA9IGhvb2sgJiYgRE9NLmlzSWdub3JlZChmcm9tRWwsIHRoaXMuYmluZGluZyhQSFhfVVBEQVRFKSlcbiAgICBpZihob29rICYmICFmcm9tRWwuaXNFcXVhbE5vZGUodG9FbCkgJiYgIShpc0lnbm9yZWQgJiYgaXNFcXVhbE9iaihmcm9tRWwuZGF0YXNldCwgdG9FbC5kYXRhc2V0KSkpe1xuICAgICAgaG9vay5fX2JlZm9yZVVwZGF0ZSgpXG4gICAgICByZXR1cm4gaG9va1xuICAgIH1cbiAgfVxuXG4gIHBlcmZvcm1QYXRjaChwYXRjaCwgcHJ1bmVDaWRzKXtcbiAgICBsZXQgcmVtb3ZlZEVscyA9IFtdXG4gICAgbGV0IHBoeENoaWxkcmVuQWRkZWQgPSBmYWxzZVxuICAgIGxldCB1cGRhdGVkSG9va0lkcyA9IG5ldyBTZXQoKVxuXG4gICAgcGF0Y2guYWZ0ZXIoXCJhZGRlZFwiLCBlbCA9PiB7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQudHJpZ2dlckRPTShcIm9uTm9kZUFkZGVkXCIsIFtlbF0pXG5cbiAgICAgIGxldCBuZXdIb29rID0gdGhpcy5hZGRIb29rKGVsKVxuICAgICAgaWYobmV3SG9vayl7IG5ld0hvb2suX19tb3VudGVkKCkgfVxuICAgIH0pXG5cbiAgICBwYXRjaC5hZnRlcihcInBoeENoaWxkQWRkZWRcIiwgZWwgPT4ge1xuICAgICAgaWYoRE9NLmlzUGh4U3RpY2t5KGVsKSl7XG4gICAgICAgIHRoaXMubGl2ZVNvY2tldC5qb2luUm9vdFZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBoeENoaWxkcmVuQWRkZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSlcblxuICAgIHBhdGNoLmJlZm9yZShcInVwZGF0ZWRcIiwgKGZyb21FbCwgdG9FbCkgPT4ge1xuICAgICAgbGV0IGhvb2sgPSB0aGlzLnRyaWdnZXJCZWZvcmVVcGRhdGVIb29rKGZyb21FbCwgdG9FbClcbiAgICAgIGlmKGhvb2speyB1cGRhdGVkSG9va0lkcy5hZGQoZnJvbUVsLmlkKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwidXBkYXRlZFwiLCBlbCA9PiB7XG4gICAgICBpZih1cGRhdGVkSG9va0lkcy5oYXMoZWwuaWQpKXsgdGhpcy5nZXRIb29rKGVsKS5fX3VwZGF0ZWQoKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwiZGlzY2FyZGVkXCIsIChlbCkgPT4ge1xuICAgICAgaWYoZWwubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFKXsgcmVtb3ZlZEVscy5wdXNoKGVsKSB9XG4gICAgfSlcblxuICAgIHBhdGNoLmFmdGVyKFwidHJhbnNpdGlvbnNEaXNjYXJkZWRcIiwgZWxzID0+IHRoaXMuYWZ0ZXJFbGVtZW50c1JlbW92ZWQoZWxzLCBwcnVuZUNpZHMpKVxuICAgIHBhdGNoLnBlcmZvcm0oKVxuICAgIHRoaXMuYWZ0ZXJFbGVtZW50c1JlbW92ZWQocmVtb3ZlZEVscywgcHJ1bmVDaWRzKVxuXG4gICAgcmV0dXJuIHBoeENoaWxkcmVuQWRkZWRcbiAgfVxuXG4gIGFmdGVyRWxlbWVudHNSZW1vdmVkKGVsZW1lbnRzLCBwcnVuZUNpZHMpe1xuICAgIGxldCBkZXN0cm95ZWRDSURzID0gW11cbiAgICBlbGVtZW50cy5mb3JFYWNoKHBhcmVudCA9PiB7XG4gICAgICBsZXQgY29tcG9uZW50cyA9IERPTS5hbGwocGFyZW50LCBgWyR7UEhYX0NPTVBPTkVOVH1dYClcbiAgICAgIGxldCBob29rcyA9IERPTS5hbGwocGFyZW50LCBgWyR7dGhpcy5iaW5kaW5nKFBIWF9IT09LKX1dYClcbiAgICAgIGNvbXBvbmVudHMuY29uY2F0KHBhcmVudCkuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgIGxldCBjaWQgPSB0aGlzLmNvbXBvbmVudElEKGVsKVxuICAgICAgICBpZihpc0NpZChjaWQpICYmIGRlc3Ryb3llZENJRHMuaW5kZXhPZihjaWQpID09PSAtMSl7IGRlc3Ryb3llZENJRHMucHVzaChjaWQpIH1cbiAgICAgIH0pXG4gICAgICBob29rcy5jb25jYXQocGFyZW50KS5mb3JFYWNoKGhvb2tFbCA9PiB7XG4gICAgICAgIGxldCBob29rID0gdGhpcy5nZXRIb29rKGhvb2tFbClcbiAgICAgICAgaG9vayAmJiB0aGlzLmRlc3Ryb3lIb29rKGhvb2spXG4gICAgICB9KVxuICAgIH0pXG4gICAgLy8gV2Ugc2hvdWxkIG5vdCBwcnVuZUNpZHMgb24gam9pbnMuIE90aGVyd2lzZSwgaW4gY2FzZSBvZlxuICAgIC8vIHJlam9pbnMsIHdlIG1heSBub3RpZnkgY2lkcyB0aGF0IG5vIGxvbmdlciBiZWxvbmcgdG8gdGhlXG4gICAgLy8gY3VycmVudCBMaXZlVmlldyB0byBiZSByZW1vdmVkLlxuICAgIGlmKHBydW5lQ2lkcyl7XG4gICAgICB0aGlzLm1heWJlUHVzaENvbXBvbmVudHNEZXN0cm95ZWQoZGVzdHJveWVkQ0lEcylcbiAgICB9XG4gIH1cblxuICBqb2luTmV3Q2hpbGRyZW4oKXtcbiAgICBET00uZmluZFBoeENoaWxkcmVuKHRoaXMuZWwsIHRoaXMuaWQpLmZvckVhY2goZWwgPT4gdGhpcy5qb2luQ2hpbGQoZWwpKVxuICB9XG5cbiAgZ2V0Q2hpbGRCeUlkKGlkKXsgcmV0dXJuIHRoaXMucm9vdC5jaGlsZHJlblt0aGlzLmlkXVtpZF0gfVxuXG4gIGdldERlc2NlbmRlbnRCeUVsKGVsKXtcbiAgICBpZihlbC5pZCA9PT0gdGhpcy5pZCl7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5jaGlsZHJlbltlbC5nZXRBdHRyaWJ1dGUoUEhYX1BBUkVOVF9JRCldW2VsLmlkXVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lEZXNjZW5kZW50KGlkKXtcbiAgICBmb3IobGV0IHBhcmVudElkIGluIHRoaXMucm9vdC5jaGlsZHJlbil7XG4gICAgICBmb3IobGV0IGNoaWxkSWQgaW4gdGhpcy5yb290LmNoaWxkcmVuW3BhcmVudElkXSl7XG4gICAgICAgIGlmKGNoaWxkSWQgPT09IGlkKXsgcmV0dXJuIHRoaXMucm9vdC5jaGlsZHJlbltwYXJlbnRJZF1bY2hpbGRJZF0uZGVzdHJveSgpIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBqb2luQ2hpbGQoZWwpe1xuICAgIGxldCBjaGlsZCA9IHRoaXMuZ2V0Q2hpbGRCeUlkKGVsLmlkKVxuICAgIGlmKCFjaGlsZCl7XG4gICAgICBsZXQgdmlldyA9IG5ldyBWaWV3KGVsLCB0aGlzLmxpdmVTb2NrZXQsIHRoaXMpXG4gICAgICB0aGlzLnJvb3QuY2hpbGRyZW5bdGhpcy5pZF1bdmlldy5pZF0gPSB2aWV3XG4gICAgICB2aWV3LmpvaW4oKVxuICAgICAgdGhpcy5jaGlsZEpvaW5zKytcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgaXNKb2luUGVuZGluZygpeyByZXR1cm4gdGhpcy5qb2luUGVuZGluZyB9XG5cbiAgYWNrSm9pbihfY2hpbGQpe1xuICAgIHRoaXMuY2hpbGRKb2lucy0tXG5cbiAgICBpZih0aGlzLmNoaWxkSm9pbnMgPT09IDApe1xuICAgICAgaWYodGhpcy5wYXJlbnQpe1xuICAgICAgICB0aGlzLnBhcmVudC5hY2tKb2luKHRoaXMpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQWxsQ2hpbGRKb2luc0NvbXBsZXRlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkFsbENoaWxkSm9pbnNDb21wbGV0ZSgpe1xuICAgIHRoaXMuam9pbkNhbGxiYWNrKCgpID0+IHtcbiAgICAgIHRoaXMucGVuZGluZ0pvaW5PcHMuZm9yRWFjaCgoW3ZpZXcsIG9wXSkgPT4ge1xuICAgICAgICBpZighdmlldy5pc0Rlc3Ryb3llZCgpKXsgb3AoKSB9XG4gICAgICB9KVxuICAgICAgdGhpcy5wZW5kaW5nSm9pbk9wcyA9IFtdXG4gICAgfSlcbiAgfVxuXG4gIHVwZGF0ZShkaWZmLCBldmVudHMpe1xuICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpIHx8ICh0aGlzLmxpdmVTb2NrZXQuaGFzUGVuZGluZ0xpbmsoKSAmJiAhRE9NLmlzUGh4U3RpY2t5KHRoaXMuZWwpKSl7XG4gICAgICByZXR1cm4gdGhpcy5wZW5kaW5nRGlmZnMucHVzaCh7ZGlmZiwgZXZlbnRzfSlcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVkLm1lcmdlRGlmZihkaWZmKVxuICAgIGxldCBwaHhDaGlsZHJlbkFkZGVkID0gZmFsc2VcblxuICAgIC8vIFdoZW4gdGhlIGRpZmYgb25seSBjb250YWlucyBjb21wb25lbnQgZGlmZnMsIHRoZW4gd2FsayBjb21wb25lbnRzXG4gICAgLy8gYW5kIHBhdGNoIG9ubHkgdGhlIHBhcmVudCBjb21wb25lbnQgY29udGFpbmVycyBmb3VuZCBpbiB0aGUgZGlmZi5cbiAgICAvLyBPdGhlcndpc2UsIHBhdGNoIGVudGlyZSBMViBjb250YWluZXIuXG4gICAgaWYodGhpcy5yZW5kZXJlZC5pc0NvbXBvbmVudE9ubHlEaWZmKGRpZmYpKXtcbiAgICAgIHRoaXMubGl2ZVNvY2tldC50aW1lKFwiY29tcG9uZW50IHBhdGNoIGNvbXBsZXRlXCIsICgpID0+IHtcbiAgICAgICAgbGV0IHBhcmVudENpZHMgPSBET00uZmluZFBhcmVudENJRHModGhpcy5lbCwgdGhpcy5yZW5kZXJlZC5jb21wb25lbnRDSURzKGRpZmYpKVxuICAgICAgICBwYXJlbnRDaWRzLmZvckVhY2gocGFyZW50Q0lEID0+IHtcbiAgICAgICAgICBpZih0aGlzLmNvbXBvbmVudFBhdGNoKHRoaXMucmVuZGVyZWQuZ2V0Q29tcG9uZW50KGRpZmYsIHBhcmVudENJRCksIHBhcmVudENJRCkpeyBwaHhDaGlsZHJlbkFkZGVkID0gdHJ1ZSB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZighaXNFbXB0eShkaWZmKSl7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQudGltZShcImZ1bGwgcGF0Y2ggY29tcGxldGVcIiwgKCkgPT4ge1xuICAgICAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyQ29udGFpbmVyKGRpZmYsIFwidXBkYXRlXCIpXG4gICAgICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBudWxsKVxuICAgICAgICBwaHhDaGlsZHJlbkFkZGVkID0gdGhpcy5wZXJmb3JtUGF0Y2gocGF0Y2gsIHRydWUpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMubGl2ZVNvY2tldC5kaXNwYXRjaEV2ZW50cyhldmVudHMpXG4gICAgaWYocGh4Q2hpbGRyZW5BZGRlZCl7IHRoaXMuam9pbk5ld0NoaWxkcmVuKCkgfVxuICB9XG5cbiAgcmVuZGVyQ29udGFpbmVyKGRpZmYsIGtpbmQpe1xuICAgIHJldHVybiB0aGlzLmxpdmVTb2NrZXQudGltZShgdG9TdHJpbmcgZGlmZiAoJHtraW5kfSlgLCAoKSA9PiB7XG4gICAgICBsZXQgdGFnID0gdGhpcy5lbC50YWdOYW1lXG4gICAgICAvLyBEb24ndCBza2lwIGFueSBjb21wb25lbnQgaW4gdGhlIGRpZmYgbm9yIGFueSBtYXJrZWQgYXMgcHJ1bmVkXG4gICAgICAvLyAoYXMgdGhleSBtYXkgaGF2ZSBiZWVuIGFkZGVkIGJhY2spXG4gICAgICBsZXQgY2lkcyA9IGRpZmYgPyB0aGlzLnJlbmRlcmVkLmNvbXBvbmVudENJRHMoZGlmZikuY29uY2F0KHRoaXMucHJ1bmluZ0NJRHMpIDogbnVsbFxuICAgICAgbGV0IGh0bWwgPSB0aGlzLnJlbmRlcmVkLnRvU3RyaW5nKGNpZHMpXG4gICAgICByZXR1cm4gYDwke3RhZ30+JHtodG1sfTwvJHt0YWd9PmBcbiAgICB9KVxuICB9XG5cbiAgY29tcG9uZW50UGF0Y2goZGlmZiwgY2lkKXtcbiAgICBpZihpc0VtcHR5KGRpZmYpKSByZXR1cm4gZmFsc2VcbiAgICBsZXQgaHRtbCA9IHRoaXMucmVuZGVyZWQuY29tcG9uZW50VG9TdHJpbmcoY2lkKVxuICAgIGxldCBwYXRjaCA9IG5ldyBET01QYXRjaCh0aGlzLCB0aGlzLmVsLCB0aGlzLmlkLCBodG1sLCBjaWQpXG4gICAgbGV0IGNoaWxkcmVuQWRkZWQgPSB0aGlzLnBlcmZvcm1QYXRjaChwYXRjaCwgdHJ1ZSlcbiAgICByZXR1cm4gY2hpbGRyZW5BZGRlZFxuICB9XG5cbiAgZ2V0SG9vayhlbCl7IHJldHVybiB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoZWwpXSB9XG5cbiAgYWRkSG9vayhlbCl7XG4gICAgaWYoVmlld0hvb2suZWxlbWVudElEKGVsKSB8fCAhZWwuZ2V0QXR0cmlidXRlKXsgcmV0dXJuIH1cbiAgICBsZXQgaG9va05hbWUgPSBlbC5nZXRBdHRyaWJ1dGUoYGRhdGEtcGh4LSR7UEhYX0hPT0t9YCkgfHwgZWwuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfSE9PSykpXG4gICAgaWYoaG9va05hbWUgJiYgIXRoaXMub3duc0VsZW1lbnQoZWwpKXsgcmV0dXJuIH1cbiAgICBsZXQgY2FsbGJhY2tzID0gdGhpcy5saXZlU29ja2V0LmdldEhvb2tDYWxsYmFja3MoaG9va05hbWUpXG5cbiAgICBpZihjYWxsYmFja3Mpe1xuICAgICAgaWYoIWVsLmlkKXsgbG9nRXJyb3IoYG5vIERPTSBJRCBmb3IgaG9vayBcIiR7aG9va05hbWV9XCIuIEhvb2tzIHJlcXVpcmUgYSB1bmlxdWUgSUQgb24gZWFjaCBlbGVtZW50LmAsIGVsKSB9XG4gICAgICBsZXQgaG9vayA9IG5ldyBWaWV3SG9vayh0aGlzLCBlbCwgY2FsbGJhY2tzKVxuICAgICAgdGhpcy52aWV3SG9va3NbVmlld0hvb2suZWxlbWVudElEKGhvb2suZWwpXSA9IGhvb2tcbiAgICAgIHJldHVybiBob29rXG4gICAgfSBlbHNlIGlmKGhvb2tOYW1lICE9PSBudWxsKXtcbiAgICAgIGxvZ0Vycm9yKGB1bmtub3duIGhvb2sgZm91bmQgZm9yIFwiJHtob29rTmFtZX1cImAsIGVsKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3lIb29rKGhvb2spe1xuICAgIGhvb2suX19kZXN0cm95ZWQoKVxuICAgIGhvb2suX19jbGVhbnVwX18oKVxuICAgIGRlbGV0ZSB0aGlzLnZpZXdIb29rc1tWaWV3SG9vay5lbGVtZW50SUQoaG9vay5lbCldXG4gIH1cblxuICBhcHBseVBlbmRpbmdVcGRhdGVzKCl7XG4gICAgdGhpcy5wZW5kaW5nRGlmZnMuZm9yRWFjaCgoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgdGhpcy5wZW5kaW5nRGlmZnMgPSBbXVxuICB9XG5cbiAgb25DaGFubmVsKGV2ZW50LCBjYil7XG4gICAgdGhpcy5saXZlU29ja2V0Lm9uQ2hhbm5lbCh0aGlzLmNoYW5uZWwsIGV2ZW50LCByZXNwID0+IHtcbiAgICAgIGlmKHRoaXMuaXNKb2luUGVuZGluZygpKXtcbiAgICAgICAgdGhpcy5yb290LnBlbmRpbmdKb2luT3BzLnB1c2goW3RoaXMsICgpID0+IGNiKHJlc3ApXSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXF1ZXN0RE9NVXBkYXRlKCgpID0+IGNiKHJlc3ApKVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBiaW5kQ2hhbm5lbCgpe1xuICAgIC8vIFRoZSBkaWZmIGV2ZW50IHNob3VsZCBiZSBoYW5kbGVkIGJ5IHRoZSByZWd1bGFyIHVwZGF0ZSBvcGVyYXRpb25zLlxuICAgIC8vIEFsbCBvdGhlciBvcGVyYXRpb25zIGFyZSBxdWV1ZWQgdG8gYmUgYXBwbGllZCBvbmx5IGFmdGVyIGpvaW4uXG4gICAgdGhpcy5saXZlU29ja2V0Lm9uQ2hhbm5lbCh0aGlzLmNoYW5uZWwsIFwiZGlmZlwiLCAocmF3RGlmZikgPT4ge1xuICAgICAgdGhpcy5saXZlU29ja2V0LnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICB0aGlzLmFwcGx5RGlmZihcInVwZGF0ZVwiLCByYXdEaWZmLCAoe2RpZmYsIGV2ZW50c30pID0+IHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cykpXG4gICAgICB9KVxuICAgIH0pXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJyZWRpcmVjdFwiLCAoe3RvLCBmbGFzaH0pID0+IHRoaXMub25SZWRpcmVjdCh7dG8sIGZsYXNofSkpXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJsaXZlX3BhdGNoXCIsIChyZWRpcikgPT4gdGhpcy5vbkxpdmVQYXRjaChyZWRpcikpXG4gICAgdGhpcy5vbkNoYW5uZWwoXCJsaXZlX3JlZGlyZWN0XCIsIChyZWRpcikgPT4gdGhpcy5vbkxpdmVSZWRpcmVjdChyZWRpcikpXG4gICAgdGhpcy5jaGFubmVsLm9uRXJyb3IocmVhc29uID0+IHRoaXMub25FcnJvcihyZWFzb24pKVxuICAgIHRoaXMuY2hhbm5lbC5vbkNsb3NlKHJlYXNvbiA9PiB0aGlzLm9uQ2xvc2UocmVhc29uKSlcbiAgfVxuXG4gIGRlc3Ryb3lBbGxDaGlsZHJlbigpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy5yb290LmNoaWxkcmVuW3RoaXMuaWRdKXtcbiAgICAgIHRoaXMuZ2V0Q2hpbGRCeUlkKGlkKS5kZXN0cm95KClcbiAgICB9XG4gIH1cblxuICBvbkxpdmVSZWRpcmVjdChyZWRpcil7XG4gICAgbGV0IHt0bywga2luZCwgZmxhc2h9ID0gcmVkaXJcbiAgICBsZXQgdXJsID0gdGhpcy5leHBhbmRVUkwodG8pXG4gICAgdGhpcy5saXZlU29ja2V0Lmhpc3RvcnlSZWRpcmVjdCh1cmwsIGtpbmQsIGZsYXNoKVxuICB9XG5cbiAgb25MaXZlUGF0Y2gocmVkaXIpe1xuICAgIGxldCB7dG8sIGtpbmR9ID0gcmVkaXJcbiAgICB0aGlzLmhyZWYgPSB0aGlzLmV4cGFuZFVSTCh0bylcbiAgICB0aGlzLmxpdmVTb2NrZXQuaGlzdG9yeVBhdGNoKHRvLCBraW5kKVxuICB9XG5cbiAgZXhwYW5kVVJMKHRvKXtcbiAgICByZXR1cm4gdG8uc3RhcnRzV2l0aChcIi9cIikgPyBgJHt3aW5kb3cubG9jYXRpb24ucHJvdG9jb2x9Ly8ke3dpbmRvdy5sb2NhdGlvbi5ob3N0fSR7dG99YCA6IHRvXG4gIH1cblxuICBvblJlZGlyZWN0KHt0bywgZmxhc2h9KXsgdGhpcy5saXZlU29ja2V0LnJlZGlyZWN0KHRvLCBmbGFzaCkgfVxuXG4gIGlzRGVzdHJveWVkKCl7IHJldHVybiB0aGlzLmRlc3Ryb3llZCB9XG5cbiAgam9pbihjYWxsYmFjayl7XG4gICAgaWYodGhpcy5pc01haW4oKSl7XG4gICAgICB0aGlzLnN0b3BDYWxsYmFjayA9IHRoaXMubGl2ZVNvY2tldC53aXRoUGFnZUxvYWRpbmcoe3RvOiB0aGlzLmhyZWYsIGtpbmQ6IFwiaW5pdGlhbFwifSlcbiAgICB9XG4gICAgdGhpcy5qb2luQ2FsbGJhY2sgPSAob25Eb25lKSA9PiB7XG4gICAgICBvbkRvbmUgPSBvbkRvbmUgfHwgZnVuY3Rpb24oKXt9XG4gICAgICBjYWxsYmFjayA/IGNhbGxiYWNrKHRoaXMuam9pbkNvdW50LCBvbkRvbmUpIDogb25Eb25lKClcbiAgICB9XG4gICAgdGhpcy5saXZlU29ja2V0LndyYXBQdXNoKHRoaXMsIHt0aW1lb3V0OiBmYWxzZX0sICgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwuam9pbigpXG4gICAgICAgIC5yZWNlaXZlKFwib2tcIiwgZGF0YSA9PiB7XG4gICAgICAgICAgaWYoIXRoaXMuaXNEZXN0cm95ZWQoKSl7XG4gICAgICAgICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB0aGlzLm9uSm9pbihkYXRhKSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIC5yZWNlaXZlKFwiZXJyb3JcIiwgcmVzcCA9PiAhdGhpcy5pc0Rlc3Ryb3llZCgpICYmIHRoaXMub25Kb2luRXJyb3IocmVzcCkpXG4gICAgICAgIC5yZWNlaXZlKFwidGltZW91dFwiLCAoKSA9PiAhdGhpcy5pc0Rlc3Ryb3llZCgpICYmIHRoaXMub25Kb2luRXJyb3Ioe3JlYXNvbjogXCJ0aW1lb3V0XCJ9KSlcbiAgICB9KVxuICB9XG5cbiAgb25Kb2luRXJyb3IocmVzcCl7XG4gICAgaWYocmVzcC5yZWFzb24gPT09IFwidW5hdXRob3JpemVkXCIgfHwgcmVzcC5yZWFzb24gPT09IFwic3RhbGVcIil7XG4gICAgICB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInVuYXV0aG9yaXplZCBsaXZlX3JlZGlyZWN0LiBGYWxsaW5nIGJhY2sgdG8gcGFnZSByZXF1ZXN0XCIsIHJlc3BdKVxuICAgICAgcmV0dXJuIHRoaXMub25SZWRpcmVjdCh7dG86IHRoaXMuaHJlZn0pXG4gICAgfVxuICAgIGlmKHJlc3AucmVkaXJlY3QgfHwgcmVzcC5saXZlX3JlZGlyZWN0KXtcbiAgICAgIHRoaXMuam9pblBlbmRpbmcgPSBmYWxzZVxuICAgICAgdGhpcy5jaGFubmVsLmxlYXZlKClcbiAgICB9XG4gICAgaWYocmVzcC5yZWRpcmVjdCl7IHJldHVybiB0aGlzLm9uUmVkaXJlY3QocmVzcC5yZWRpcmVjdCkgfVxuICAgIGlmKHJlc3AubGl2ZV9yZWRpcmVjdCl7IHJldHVybiB0aGlzLm9uTGl2ZVJlZGlyZWN0KHJlc3AubGl2ZV9yZWRpcmVjdCkgfVxuICAgIHRoaXMubG9nKFwiZXJyb3JcIiwgKCkgPT4gW1widW5hYmxlIHRvIGpvaW5cIiwgcmVzcF0pXG4gICAgaWYodGhpcy5saXZlU29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLmxpdmVTb2NrZXQucmVsb2FkV2l0aEppdHRlcih0aGlzKSB9XG4gIH1cblxuICBvbkNsb3NlKHJlYXNvbil7XG4gICAgaWYodGhpcy5pc0Rlc3Ryb3llZCgpKXsgcmV0dXJuIH1cbiAgICBpZih0aGlzLmxpdmVTb2NrZXQuaGFzUGVuZGluZ0xpbmsoKSAmJiByZWFzb24gIT09IFwibGVhdmVcIil7XG4gICAgICByZXR1cm4gdGhpcy5saXZlU29ja2V0LnJlbG9hZFdpdGhKaXR0ZXIodGhpcylcbiAgICB9XG4gICAgdGhpcy5kZXN0cm95QWxsQ2hpbGRyZW4oKVxuICAgIHRoaXMubGl2ZVNvY2tldC5kcm9wQWN0aXZlRWxlbWVudCh0aGlzKVxuICAgIC8vIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgY2FuIGJlIG51bGwgaW4gSW50ZXJuZXQgRXhwbG9yZXIgMTFcbiAgICBpZihkb2N1bWVudC5hY3RpdmVFbGVtZW50KXsgZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCkgfVxuICAgIGlmKHRoaXMubGl2ZVNvY2tldC5pc1VubG9hZGVkKCkpe1xuICAgICAgdGhpcy5zaG93TG9hZGVyKEJFRk9SRV9VTkxPQURfTE9BREVSX1RJTUVPVVQpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvcihyZWFzb24pe1xuICAgIHRoaXMub25DbG9zZShyZWFzb24pXG4gICAgaWYodGhpcy5saXZlU29ja2V0LmlzQ29ubmVjdGVkKCkpeyB0aGlzLmxvZyhcImVycm9yXCIsICgpID0+IFtcInZpZXcgY3Jhc2hlZFwiLCByZWFzb25dKSB9XG4gICAgaWYoIXRoaXMubGl2ZVNvY2tldC5pc1VubG9hZGVkKCkpeyB0aGlzLmRpc3BsYXlFcnJvcigpIH1cbiAgfVxuXG4gIGRpc3BsYXlFcnJvcigpe1xuICAgIGlmKHRoaXMuaXNNYWluKCkpeyBET00uZGlzcGF0Y2hFdmVudCh3aW5kb3csIFwicGh4OnBhZ2UtbG9hZGluZy1zdGFydFwiLCB7ZGV0YWlsOiB7dG86IHRoaXMuaHJlZiwga2luZDogXCJlcnJvclwifX0pIH1cbiAgICB0aGlzLnNob3dMb2FkZXIoKVxuICAgIHRoaXMuc2V0Q29udGFpbmVyQ2xhc3NlcyhQSFhfRElTQ09OTkVDVEVEX0NMQVNTLCBQSFhfRVJST1JfQ0xBU1MpXG4gIH1cblxuICBwdXNoV2l0aFJlcGx5KHJlZkdlbmVyYXRvciwgZXZlbnQsIHBheWxvYWQsIG9uUmVwbHkgPSBmdW5jdGlvbiAoKXsgfSl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7IHJldHVybiB9XG5cbiAgICBsZXQgW3JlZiwgW2VsXSwgb3B0c10gPSByZWZHZW5lcmF0b3IgPyByZWZHZW5lcmF0b3IoKSA6IFtudWxsLCBbXSwge31dXG4gICAgbGV0IG9uTG9hZGluZ0RvbmUgPSBmdW5jdGlvbigpeyB9XG4gICAgaWYob3B0cy5wYWdlX2xvYWRpbmcgfHwgKGVsICYmIChlbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9QQUdFX0xPQURJTkcpKSAhPT0gbnVsbCkpKXtcbiAgICAgIG9uTG9hZGluZ0RvbmUgPSB0aGlzLmxpdmVTb2NrZXQud2l0aFBhZ2VMb2FkaW5nKHtraW5kOiBcImVsZW1lbnRcIiwgdGFyZ2V0OiBlbH0pXG4gICAgfVxuXG4gICAgaWYodHlwZW9mIChwYXlsb2FkLmNpZCkgIT09IFwibnVtYmVyXCIpeyBkZWxldGUgcGF5bG9hZC5jaWQgfVxuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmxpdmVTb2NrZXQud3JhcFB1c2godGhpcywge3RpbWVvdXQ6IHRydWV9LCAoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoYW5uZWwucHVzaChldmVudCwgcGF5bG9hZCwgUFVTSF9USU1FT1VUKS5yZWNlaXZlKFwib2tcIiwgcmVzcCA9PiB7XG4gICAgICAgICAgaWYocmVmICE9PSBudWxsKXsgdGhpcy51bmRvUmVmcyhyZWYpIH1cbiAgICAgICAgICBsZXQgZmluaXNoID0gKGhvb2tSZXBseSkgPT4ge1xuICAgICAgICAgICAgaWYocmVzcC5yZWRpcmVjdCl7IHRoaXMub25SZWRpcmVjdChyZXNwLnJlZGlyZWN0KSB9XG4gICAgICAgICAgICBpZihyZXNwLmxpdmVfcGF0Y2gpeyB0aGlzLm9uTGl2ZVBhdGNoKHJlc3AubGl2ZV9wYXRjaCkgfVxuICAgICAgICAgICAgaWYocmVzcC5saXZlX3JlZGlyZWN0KXsgdGhpcy5vbkxpdmVSZWRpcmVjdChyZXNwLmxpdmVfcmVkaXJlY3QpIH1cbiAgICAgICAgICAgIG9uTG9hZGluZ0RvbmUoKVxuICAgICAgICAgICAgb25SZXBseShyZXNwLCBob29rUmVwbHkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmKHJlc3AuZGlmZil7XG4gICAgICAgICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgICAgICAgIGxldCBob29rUmVwbHkgPSB0aGlzLmFwcGx5RGlmZihcInVwZGF0ZVwiLCByZXNwLmRpZmYsICh7ZGlmZiwgZXZlbnRzfSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlKGRpZmYsIGV2ZW50cylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgZmluaXNoKGhvb2tSZXBseSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbmlzaChudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgKVxuICB9XG5cbiAgdW5kb1JlZnMocmVmKXtcbiAgICBET00uYWxsKGRvY3VtZW50LCBgWyR7UEhYX1JFRl9TUkN9PVwiJHt0aGlzLmlkfVwiXVske1BIWF9SRUZ9PVwiJHtyZWZ9XCJdYCwgZWwgPT4ge1xuICAgICAgbGV0IGRpc2FibGVkVmFsID0gZWwuZ2V0QXR0cmlidXRlKFBIWF9ESVNBQkxFRClcbiAgICAgIC8vIHJlbW92ZSByZWZzXG4gICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX1JFRilcbiAgICAgIGVsLnJlbW92ZUF0dHJpYnV0ZShQSFhfUkVGX1NSQylcbiAgICAgIC8vIHJlc3RvcmUgaW5wdXRzXG4gICAgICBpZihlbC5nZXRBdHRyaWJ1dGUoUEhYX1JFQURPTkxZKSAhPT0gbnVsbCl7XG4gICAgICAgIGVsLnJlYWRPbmx5ID0gZmFsc2VcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9SRUFET05MWSlcbiAgICAgIH1cbiAgICAgIGlmKGRpc2FibGVkVmFsICE9PSBudWxsKXtcbiAgICAgICAgZWwuZGlzYWJsZWQgPSBkaXNhYmxlZFZhbCA9PT0gXCJ0cnVlXCIgPyB0cnVlIDogZmFsc2VcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKFBIWF9ESVNBQkxFRClcbiAgICAgIH1cbiAgICAgIC8vIHJlbW92ZSBjbGFzc2VzXG4gICAgICBQSFhfRVZFTlRfQ0xBU1NFUy5mb3JFYWNoKGNsYXNzTmFtZSA9PiBET00ucmVtb3ZlQ2xhc3MoZWwsIGNsYXNzTmFtZSkpXG4gICAgICAvLyByZXN0b3JlIGRpc2FibGVzXG4gICAgICBsZXQgZGlzYWJsZVJlc3RvcmUgPSBlbC5nZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFKVxuICAgICAgaWYoZGlzYWJsZVJlc3RvcmUgIT09IG51bGwpe1xuICAgICAgICBlbC5pbm5lclRleHQgPSBkaXNhYmxlUmVzdG9yZVxuICAgICAgICBlbC5yZW1vdmVBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFKVxuICAgICAgfVxuICAgICAgbGV0IHRvRWwgPSBET00ucHJpdmF0ZShlbCwgUEhYX1JFRilcbiAgICAgIGlmKHRvRWwpe1xuICAgICAgICBsZXQgaG9vayA9IHRoaXMudHJpZ2dlckJlZm9yZVVwZGF0ZUhvb2soZWwsIHRvRWwpXG4gICAgICAgIERPTVBhdGNoLnBhdGNoRWwoZWwsIHRvRWwsIHRoaXMubGl2ZVNvY2tldC5nZXRBY3RpdmVFbGVtZW50KCkpXG4gICAgICAgIGlmKGhvb2speyBob29rLl9fdXBkYXRlZCgpIH1cbiAgICAgICAgRE9NLmRlbGV0ZVByaXZhdGUoZWwsIFBIWF9SRUYpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHB1dFJlZihlbGVtZW50cywgZXZlbnQsIG9wdHMgPSB7fSl7XG4gICAgbGV0IG5ld1JlZiA9IHRoaXMucmVmKytcbiAgICBsZXQgZGlzYWJsZVdpdGggPSB0aGlzLmJpbmRpbmcoUEhYX0RJU0FCTEVfV0lUSClcbiAgICBpZihvcHRzLmxvYWRpbmcpeyBlbGVtZW50cyA9IGVsZW1lbnRzLmNvbmNhdChET00uYWxsKGRvY3VtZW50LCBvcHRzLmxvYWRpbmcpKX1cblxuICAgIGVsZW1lbnRzLmZvckVhY2goZWwgPT4ge1xuICAgICAgZWwuY2xhc3NMaXN0LmFkZChgcGh4LSR7ZXZlbnR9LWxvYWRpbmdgKVxuICAgICAgZWwuc2V0QXR0cmlidXRlKFBIWF9SRUYsIG5ld1JlZilcbiAgICAgIGVsLnNldEF0dHJpYnV0ZShQSFhfUkVGX1NSQywgdGhpcy5lbC5pZClcbiAgICAgIGxldCBkaXNhYmxlVGV4dCA9IGVsLmdldEF0dHJpYnV0ZShkaXNhYmxlV2l0aClcbiAgICAgIGlmKGRpc2FibGVUZXh0ICE9PSBudWxsKXtcbiAgICAgICAgaWYoIWVsLmdldEF0dHJpYnV0ZShQSFhfRElTQUJMRV9XSVRIX1JFU1RPUkUpKXtcbiAgICAgICAgICBlbC5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVfV0lUSF9SRVNUT1JFLCBlbC5pbm5lclRleHQpXG4gICAgICAgIH1cbiAgICAgICAgaWYoZGlzYWJsZVRleHQgIT09IFwiXCIpeyBlbC5pbm5lclRleHQgPSBkaXNhYmxlVGV4dCB9XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZShcImRpc2FibGVkXCIsIFwiXCIpXG4gICAgICB9XG4gICAgfSlcbiAgICByZXR1cm4gW25ld1JlZiwgZWxlbWVudHMsIG9wdHNdXG4gIH1cblxuICBjb21wb25lbnRJRChlbCl7XG4gICAgbGV0IGNpZCA9IGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX0NPTVBPTkVOVClcbiAgICByZXR1cm4gY2lkID8gcGFyc2VJbnQoY2lkKSA6IG51bGxcbiAgfVxuXG4gIHRhcmdldENvbXBvbmVudElEKHRhcmdldCwgdGFyZ2V0Q3R4LCBvcHRzID0ge30pe1xuICAgIGlmKGlzQ2lkKHRhcmdldEN0eCkpeyByZXR1cm4gdGFyZ2V0Q3R4IH1cblxuICAgIGxldCBjaWRPclNlbGVjdG9yID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJ0YXJnZXRcIikpXG4gICAgaWYoaXNDaWQoY2lkT3JTZWxlY3Rvcikpe1xuICAgICAgcmV0dXJuIHBhcnNlSW50KGNpZE9yU2VsZWN0b3IpXG4gICAgfSBlbHNlIGlmKHRhcmdldEN0eCAmJiAoY2lkT3JTZWxlY3RvciAhPT0gbnVsbCB8fCBvcHRzLnRhcmdldCkpe1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2VzdENvbXBvbmVudElEKHRhcmdldEN0eClcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG4gIH1cblxuICBjbG9zZXN0Q29tcG9uZW50SUQodGFyZ2V0Q3R4KXtcbiAgICBpZihpc0NpZCh0YXJnZXRDdHgpKXtcbiAgICAgIHJldHVybiB0YXJnZXRDdHhcbiAgICB9IGVsc2UgaWYodGFyZ2V0Q3R4KXtcbiAgICAgIHJldHVybiBtYXliZSh0YXJnZXRDdHguY2xvc2VzdChgWyR7UEhYX0NPTVBPTkVOVH1dYCksIGVsID0+IHRoaXMub3duc0VsZW1lbnQoZWwpICYmIHRoaXMuY29tcG9uZW50SUQoZWwpKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHB1c2hIb29rRXZlbnQodGFyZ2V0Q3R4LCBldmVudCwgcGF5bG9hZCwgb25SZXBseSl7XG4gICAgaWYoIXRoaXMuaXNDb25uZWN0ZWQoKSl7XG4gICAgICB0aGlzLmxvZyhcImhvb2tcIiwgKCkgPT4gW1widW5hYmxlIHRvIHB1c2ggaG9vayBldmVudC4gTGl2ZVZpZXcgbm90IGNvbm5lY3RlZFwiLCBldmVudCwgcGF5bG9hZF0pXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgbGV0IFtyZWYsIGVscywgb3B0c10gPSB0aGlzLnB1dFJlZihbXSwgXCJob29rXCIpXG4gICAgdGhpcy5wdXNoV2l0aFJlcGx5KCgpID0+IFtyZWYsIGVscywgb3B0c10sIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogXCJob29rXCIsXG4gICAgICBldmVudDogZXZlbnQsXG4gICAgICB2YWx1ZTogcGF5bG9hZCxcbiAgICAgIGNpZDogdGhpcy5jbG9zZXN0Q29tcG9uZW50SUQodGFyZ2V0Q3R4KVxuICAgIH0sIChyZXNwLCByZXBseSkgPT4gb25SZXBseShyZXBseSwgcmVmKSlcblxuICAgIHJldHVybiByZWZcbiAgfVxuXG4gIGV4dHJhY3RNZXRhKGVsLCBtZXRhLCB2YWx1ZSl7XG4gICAgbGV0IHByZWZpeCA9IHRoaXMuYmluZGluZyhcInZhbHVlLVwiKVxuICAgIGZvcihsZXQgaSA9IDA7IGkgPCBlbC5hdHRyaWJ1dGVzLmxlbmd0aDsgaSsrKXtcbiAgICAgIGlmKCFtZXRhKXsgbWV0YSA9IHt9IH1cbiAgICAgIGxldCBuYW1lID0gZWwuYXR0cmlidXRlc1tpXS5uYW1lXG4gICAgICBpZihuYW1lLnN0YXJ0c1dpdGgocHJlZml4KSl7IG1ldGFbbmFtZS5yZXBsYWNlKHByZWZpeCwgXCJcIildID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpIH1cbiAgICB9XG4gICAgaWYoZWwudmFsdWUgIT09IHVuZGVmaW5lZCl7XG4gICAgICBpZighbWV0YSl7IG1ldGEgPSB7fSB9XG4gICAgICBtZXRhLnZhbHVlID0gZWwudmFsdWVcblxuICAgICAgaWYoZWwudGFnTmFtZSA9PT0gXCJJTlBVVFwiICYmIENIRUNLQUJMRV9JTlBVVFMuaW5kZXhPZihlbC50eXBlKSA+PSAwICYmICFlbC5jaGVja2VkKXtcbiAgICAgICAgZGVsZXRlIG1ldGEudmFsdWVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYodmFsdWUpe1xuICAgICAgaWYoIW1ldGEpeyBtZXRhID0ge30gfVxuICAgICAgZm9yKGxldCBrZXkgaW4gdmFsdWUpeyBtZXRhW2tleV0gPSB2YWx1ZVtrZXldIH1cbiAgICB9XG4gICAgcmV0dXJuIG1ldGFcbiAgfVxuXG4gIHB1c2hFdmVudCh0eXBlLCBlbCwgdGFyZ2V0Q3R4LCBwaHhFdmVudCwgbWV0YSwgb3B0cyA9IHt9KXtcbiAgICB0aGlzLnB1c2hXaXRoUmVwbHkoKCkgPT4gdGhpcy5wdXRSZWYoW2VsXSwgdHlwZSwgb3B0cyksIFwiZXZlbnRcIiwge1xuICAgICAgdHlwZTogdHlwZSxcbiAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgIHZhbHVlOiB0aGlzLmV4dHJhY3RNZXRhKGVsLCBtZXRhLCBvcHRzLnZhbHVlKSxcbiAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChlbCwgdGFyZ2V0Q3R4LCBvcHRzKVxuICAgIH0pXG4gIH1cblxuICBwdXNoRmlsZVByb2dyZXNzKGZpbGVFbCwgZW50cnlSZWYsIHByb2dyZXNzLCBvblJlcGx5ID0gZnVuY3Rpb24gKCl7IH0pe1xuICAgIHRoaXMubGl2ZVNvY2tldC53aXRoaW5Pd25lcnMoZmlsZUVsLmZvcm0sICh2aWV3LCB0YXJnZXRDdHgpID0+IHtcbiAgICAgIHZpZXcucHVzaFdpdGhSZXBseShudWxsLCBcInByb2dyZXNzXCIsIHtcbiAgICAgICAgZXZlbnQ6IGZpbGVFbC5nZXRBdHRyaWJ1dGUodmlldy5iaW5kaW5nKFBIWF9QUk9HUkVTUykpLFxuICAgICAgICByZWY6IGZpbGVFbC5nZXRBdHRyaWJ1dGUoUEhYX1VQTE9BRF9SRUYpLFxuICAgICAgICBlbnRyeV9yZWY6IGVudHJ5UmVmLFxuICAgICAgICBwcm9ncmVzczogcHJvZ3Jlc3MsXG4gICAgICAgIGNpZDogdmlldy50YXJnZXRDb21wb25lbnRJRChmaWxlRWwuZm9ybSwgdGFyZ2V0Q3R4KVxuICAgICAgfSwgb25SZXBseSlcbiAgICB9KVxuICB9XG5cbiAgcHVzaElucHV0KGlucHV0RWwsIHRhcmdldEN0eCwgZm9yY2VDaWQsIHBoeEV2ZW50LCBvcHRzLCBjYWxsYmFjayl7XG4gICAgbGV0IHVwbG9hZHNcbiAgICBsZXQgY2lkID0gaXNDaWQoZm9yY2VDaWQpID8gZm9yY2VDaWQgOiB0aGlzLnRhcmdldENvbXBvbmVudElEKGlucHV0RWwuZm9ybSwgdGFyZ2V0Q3R4KVxuICAgIGxldCByZWZHZW5lcmF0b3IgPSAoKSA9PiB0aGlzLnB1dFJlZihbaW5wdXRFbCwgaW5wdXRFbC5mb3JtXSwgXCJjaGFuZ2VcIiwgb3B0cylcbiAgICBsZXQgZm9ybURhdGFcbiAgICBpZihpbnB1dEVsLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIikpKXtcbiAgICAgIGZvcm1EYXRhID0gc2VyaWFsaXplRm9ybShpbnB1dEVsLmZvcm0sIHtfdGFyZ2V0OiBvcHRzLl90YXJnZXR9LCBbaW5wdXRFbC5uYW1lXSlcbiAgICB9IGVsc2Uge1xuICAgICAgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGlucHV0RWwuZm9ybSwge190YXJnZXQ6IG9wdHMuX3RhcmdldH0pXG4gICAgfVxuICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGlucHV0RWwpICYmIGlucHV0RWwuZmlsZXMgJiYgaW5wdXRFbC5maWxlcy5sZW5ndGggPiAwKXtcbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKGlucHV0RWwsIEFycmF5LmZyb20oaW5wdXRFbC5maWxlcykpXG4gICAgfVxuICAgIHVwbG9hZHMgPSBMaXZlVXBsb2FkZXIuc2VyaWFsaXplVXBsb2FkcyhpbnB1dEVsKVxuICAgIGxldCBldmVudCA9IHtcbiAgICAgIHR5cGU6IFwiZm9ybVwiLFxuICAgICAgZXZlbnQ6IHBoeEV2ZW50LFxuICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgdXBsb2FkczogdXBsb2FkcyxcbiAgICAgIGNpZDogY2lkXG4gICAgfVxuICAgIHRoaXMucHVzaFdpdGhSZXBseShyZWZHZW5lcmF0b3IsIFwiZXZlbnRcIiwgZXZlbnQsIHJlc3AgPT4ge1xuICAgICAgRE9NLnNob3dFcnJvcihpbnB1dEVsLCB0aGlzLmxpdmVTb2NrZXQuYmluZGluZyhQSFhfRkVFREJBQ0tfRk9SKSlcbiAgICAgIGlmKERPTS5pc1VwbG9hZElucHV0KGlucHV0RWwpICYmIGlucHV0RWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1waHgtYXV0by11cGxvYWRcIikgIT09IG51bGwpe1xuICAgICAgICBpZihMaXZlVXBsb2FkZXIuZmlsZXNBd2FpdGluZ1ByZWZsaWdodChpbnB1dEVsKS5sZW5ndGggPiAwKXtcbiAgICAgICAgICBsZXQgW3JlZiwgX2Vsc10gPSByZWZHZW5lcmF0b3IoKVxuICAgICAgICAgIHRoaXMudXBsb2FkRmlsZXMoaW5wdXRFbC5mb3JtLCB0YXJnZXRDdHgsIHJlZiwgY2lkLCAoX3VwbG9hZHMpID0+IHtcbiAgICAgICAgICAgIGNhbGxiYWNrICYmIGNhbGxiYWNrKHJlc3ApXG4gICAgICAgICAgICB0aGlzLnRyaWdnZXJBd2FpdGluZ1N1Ym1pdChpbnB1dEVsLmZvcm0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2socmVzcClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdHJpZ2dlckF3YWl0aW5nU3VibWl0KGZvcm1FbCl7XG4gICAgbGV0IGF3YWl0aW5nU3VibWl0ID0gdGhpcy5nZXRTY2hlZHVsZWRTdWJtaXQoZm9ybUVsKVxuICAgIGlmKGF3YWl0aW5nU3VibWl0KXtcbiAgICAgIGxldCBbX2VsLCBfcmVmLCBfb3B0cywgY2FsbGJhY2tdID0gYXdhaXRpbmdTdWJtaXRcbiAgICAgIHRoaXMuY2FuY2VsU3VibWl0KGZvcm1FbClcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICBnZXRTY2hlZHVsZWRTdWJtaXQoZm9ybUVsKXtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3VibWl0cy5maW5kKChbZWwsIF9yZWYsIF9vcHRzLCBfY2FsbGJhY2tdKSA9PiBlbC5pc1NhbWVOb2RlKGZvcm1FbCkpXG4gIH1cblxuICBzY2hlZHVsZVN1Ym1pdChmb3JtRWwsIHJlZiwgb3B0cywgY2FsbGJhY2spe1xuICAgIGlmKHRoaXMuZ2V0U2NoZWR1bGVkU3VibWl0KGZvcm1FbCkpeyByZXR1cm4gdHJ1ZSB9XG4gICAgdGhpcy5mb3JtU3VibWl0cy5wdXNoKFtmb3JtRWwsIHJlZiwgb3B0cywgY2FsbGJhY2tdKVxuICB9XG5cbiAgY2FuY2VsU3VibWl0KGZvcm1FbCl7XG4gICAgdGhpcy5mb3JtU3VibWl0cyA9IHRoaXMuZm9ybVN1Ym1pdHMuZmlsdGVyKChbZWwsIHJlZiwgX2NhbGxiYWNrXSkgPT4ge1xuICAgICAgaWYoZWwuaXNTYW1lTm9kZShmb3JtRWwpKXtcbiAgICAgICAgdGhpcy51bmRvUmVmcyhyZWYpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgcHVzaEZvcm1TdWJtaXQoZm9ybUVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzLCBvblJlcGx5KXtcbiAgICBsZXQgZmlsdGVySWdub3JlZCA9IGVsID0+IHtcbiAgICAgIGxldCB1c2VySWdub3JlZCA9IGNsb3Nlc3RQaHhCaW5kaW5nKGVsLCBgJHt0aGlzLmJpbmRpbmcoUEhYX1VQREFURSl9PWlnbm9yZWAsIGVsLmZvcm0pXG4gICAgICByZXR1cm4gISh1c2VySWdub3JlZCB8fCBjbG9zZXN0UGh4QmluZGluZyhlbCwgXCJkYXRhLXBoeC11cGRhdGU9aWdub3JlXCIsIGVsLmZvcm0pKVxuICAgIH1cbiAgICBsZXQgZmlsdGVyRGlzYWJsZXMgPSBlbCA9PiB7XG4gICAgICByZXR1cm4gZWwuaGFzQXR0cmlidXRlKHRoaXMuYmluZGluZyhQSFhfRElTQUJMRV9XSVRIKSlcbiAgICB9XG4gICAgbGV0IGZpbHRlckJ1dHRvbiA9IGVsID0+IGVsLnRhZ05hbWUgPT0gXCJCVVRUT05cIlxuXG4gICAgbGV0IGZpbHRlcklucHV0ID0gZWwgPT4gW1wiSU5QVVRcIiwgXCJURVhUQVJFQVwiLCBcIlNFTEVDVFwiXS5pbmNsdWRlcyhlbC50YWdOYW1lKVxuXG4gICAgbGV0IHJlZkdlbmVyYXRvciA9ICgpID0+IHtcbiAgICAgIGxldCBmb3JtRWxlbWVudHMgPSBBcnJheS5mcm9tKGZvcm1FbC5lbGVtZW50cylcbiAgICAgIGxldCBkaXNhYmxlcyA9IGZvcm1FbGVtZW50cy5maWx0ZXIoZmlsdGVyRGlzYWJsZXMpXG4gICAgICBsZXQgYnV0dG9ucyA9IGZvcm1FbGVtZW50cy5maWx0ZXIoZmlsdGVyQnV0dG9uKS5maWx0ZXIoZmlsdGVySWdub3JlZClcbiAgICAgIGxldCBpbnB1dHMgPSBmb3JtRWxlbWVudHMuZmlsdGVyKGZpbHRlcklucHV0KS5maWx0ZXIoZmlsdGVySWdub3JlZClcblxuICAgICAgYnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgIGJ1dHRvbi5zZXRBdHRyaWJ1dGUoUEhYX0RJU0FCTEVELCBidXR0b24uZGlzYWJsZWQpXG4gICAgICAgIGJ1dHRvbi5kaXNhYmxlZCA9IHRydWVcbiAgICAgIH0pXG4gICAgICBpbnB1dHMuZm9yRWFjaChpbnB1dCA9PiB7XG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShQSFhfUkVBRE9OTFksIGlucHV0LnJlYWRPbmx5KVxuICAgICAgICBpbnB1dC5yZWFkT25seSA9IHRydWVcbiAgICAgICAgaWYoaW5wdXQuZmlsZXMpe1xuICAgICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZShQSFhfRElTQUJMRUQsIGlucHV0LmRpc2FibGVkKVxuICAgICAgICAgIGlucHV0LmRpc2FibGVkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgZm9ybUVsLnNldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX1BBR0VfTE9BRElORyksIFwiXCIpXG4gICAgICByZXR1cm4gdGhpcy5wdXRSZWYoW2Zvcm1FbF0uY29uY2F0KGRpc2FibGVzKS5jb25jYXQoYnV0dG9ucykuY29uY2F0KGlucHV0cyksIFwic3VibWl0XCIsIG9wdHMpXG4gICAgfVxuXG4gICAgbGV0IGNpZCA9IHRoaXMudGFyZ2V0Q29tcG9uZW50SUQoZm9ybUVsLCB0YXJnZXRDdHgpXG4gICAgaWYoTGl2ZVVwbG9hZGVyLmhhc1VwbG9hZHNJblByb2dyZXNzKGZvcm1FbCkpe1xuICAgICAgbGV0IFtyZWYsIF9lbHNdID0gcmVmR2VuZXJhdG9yKClcbiAgICAgIGxldCBwdXNoID0gKCkgPT4gdGhpcy5wdXNoRm9ybVN1Ym1pdChmb3JtRWwsIHRhcmdldEN0eCwgcGh4RXZlbnQsIG9wdHMsIG9uUmVwbHkpXG4gICAgICByZXR1cm4gdGhpcy5zY2hlZHVsZVN1Ym1pdChmb3JtRWwsIHJlZiwgb3B0cywgcHVzaClcbiAgICB9IGVsc2UgaWYoTGl2ZVVwbG9hZGVyLmlucHV0c0F3YWl0aW5nUHJlZmxpZ2h0KGZvcm1FbCkubGVuZ3RoID4gMCl7XG4gICAgICBsZXQgW3JlZiwgZWxzXSA9IHJlZkdlbmVyYXRvcigpXG4gICAgICBsZXQgcHJveHlSZWZHZW4gPSAoKSA9PiBbcmVmLCBlbHMsIG9wdHNdXG4gICAgICB0aGlzLnVwbG9hZEZpbGVzKGZvcm1FbCwgdGFyZ2V0Q3R4LCByZWYsIGNpZCwgKF91cGxvYWRzKSA9PiB7XG4gICAgICAgIGxldCBmb3JtRGF0YSA9IHNlcmlhbGl6ZUZvcm0oZm9ybUVsLCB7fSlcbiAgICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KHByb3h5UmVmR2VuLCBcImV2ZW50XCIsIHtcbiAgICAgICAgICB0eXBlOiBcImZvcm1cIixcbiAgICAgICAgICBldmVudDogcGh4RXZlbnQsXG4gICAgICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgICAgIGNpZDogY2lkXG4gICAgICAgIH0sIG9uUmVwbHkpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgZm9ybURhdGEgPSBzZXJpYWxpemVGb3JtKGZvcm1FbCwge30pXG4gICAgICB0aGlzLnB1c2hXaXRoUmVwbHkocmVmR2VuZXJhdG9yLCBcImV2ZW50XCIsIHtcbiAgICAgICAgdHlwZTogXCJmb3JtXCIsXG4gICAgICAgIGV2ZW50OiBwaHhFdmVudCxcbiAgICAgICAgdmFsdWU6IGZvcm1EYXRhLFxuICAgICAgICBjaWQ6IGNpZFxuICAgICAgfSwgb25SZXBseSlcbiAgICB9XG4gIH1cblxuICB1cGxvYWRGaWxlcyhmb3JtRWwsIHRhcmdldEN0eCwgcmVmLCBjaWQsIG9uQ29tcGxldGUpe1xuICAgIGxldCBqb2luQ291bnRBdFVwbG9hZCA9IHRoaXMuam9pbkNvdW50XG4gICAgbGV0IGlucHV0RWxzID0gTGl2ZVVwbG9hZGVyLmFjdGl2ZUZpbGVJbnB1dHMoZm9ybUVsKVxuICAgIGxldCBudW1GaWxlSW5wdXRzSW5Qcm9ncmVzcyA9IGlucHV0RWxzLmxlbmd0aFxuXG4gICAgLy8gZ2V0IGVhY2ggZmlsZSBpbnB1dFxuICAgIGlucHV0RWxzLmZvckVhY2goaW5wdXRFbCA9PiB7XG4gICAgICBsZXQgdXBsb2FkZXIgPSBuZXcgTGl2ZVVwbG9hZGVyKGlucHV0RWwsIHRoaXMsICgpID0+IHtcbiAgICAgICAgbnVtRmlsZUlucHV0c0luUHJvZ3Jlc3MtLVxuICAgICAgICBpZihudW1GaWxlSW5wdXRzSW5Qcm9ncmVzcyA9PT0gMCl7IG9uQ29tcGxldGUoKSB9XG4gICAgICB9KTtcblxuICAgICAgdGhpcy51cGxvYWRlcnNbaW5wdXRFbF0gPSB1cGxvYWRlclxuICAgICAgbGV0IGVudHJpZXMgPSB1cGxvYWRlci5lbnRyaWVzKCkubWFwKGVudHJ5ID0+IGVudHJ5LnRvUHJlZmxpZ2h0UGF5bG9hZCgpKVxuXG4gICAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgICAgcmVmOiBpbnB1dEVsLmdldEF0dHJpYnV0ZShQSFhfVVBMT0FEX1JFRiksXG4gICAgICAgIGVudHJpZXM6IGVudHJpZXMsXG4gICAgICAgIGNpZDogdGhpcy50YXJnZXRDb21wb25lbnRJRChpbnB1dEVsLmZvcm0sIHRhcmdldEN0eClcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2coXCJ1cGxvYWRcIiwgKCkgPT4gW1wic2VuZGluZyBwcmVmbGlnaHQgcmVxdWVzdFwiLCBwYXlsb2FkXSlcblxuICAgICAgdGhpcy5wdXNoV2l0aFJlcGx5KG51bGwsIFwiYWxsb3dfdXBsb2FkXCIsIHBheWxvYWQsIHJlc3AgPT4ge1xuICAgICAgICB0aGlzLmxvZyhcInVwbG9hZFwiLCAoKSA9PiBbXCJnb3QgcHJlZmxpZ2h0IHJlc3BvbnNlXCIsIHJlc3BdKVxuICAgICAgICBpZihyZXNwLmVycm9yKXtcbiAgICAgICAgICB0aGlzLnVuZG9SZWZzKHJlZilcbiAgICAgICAgICBsZXQgW2VudHJ5X3JlZiwgcmVhc29uXSA9IHJlc3AuZXJyb3JcbiAgICAgICAgICB0aGlzLmxvZyhcInVwbG9hZFwiLCAoKSA9PiBbYGVycm9yIGZvciBlbnRyeSAke2VudHJ5X3JlZn1gLCByZWFzb25dKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxldCBvbkVycm9yID0gKGNhbGxiYWNrKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNoYW5uZWwub25FcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmKHRoaXMuam9pbkNvdW50ID09PSBqb2luQ291bnRBdFVwbG9hZCl7IGNhbGxiYWNrKCkgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdXBsb2FkZXIuaW5pdEFkYXB0ZXJVcGxvYWQocmVzcCwgb25FcnJvciwgdGhpcy5saXZlU29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaFVwbG9hZHMobmFtZSwgZmlsZXNPckJsb2JzKXtcbiAgICBsZXQgaW5wdXRzID0gRE9NLmZpbmRVcGxvYWRJbnB1dHModGhpcy5lbCkuZmlsdGVyKGVsID0+IGVsLm5hbWUgPT09IG5hbWUpXG4gICAgaWYoaW5wdXRzLmxlbmd0aCA9PT0gMCl7IGxvZ0Vycm9yKGBubyBsaXZlIGZpbGUgaW5wdXRzIGZvdW5kIG1hdGNoaW5nIHRoZSBuYW1lIFwiJHtuYW1lfVwiYCkgfVxuICAgIGVsc2UgaWYoaW5wdXRzLmxlbmd0aCA+IDEpeyBsb2dFcnJvcihgZHVwbGljYXRlIGxpdmUgZmlsZSBpbnB1dHMgZm91bmQgbWF0Y2hpbmcgdGhlIG5hbWUgXCIke25hbWV9XCJgKSB9XG4gICAgZWxzZSB7IERPTS5kaXNwYXRjaEV2ZW50KGlucHV0c1swXSwgUEhYX1RSQUNLX1VQTE9BRFMsIHtkZXRhaWw6IHtmaWxlczogZmlsZXNPckJsb2JzfX0pIH1cbiAgfVxuXG4gIHB1c2hGb3JtUmVjb3ZlcnkoZm9ybSwgbmV3Q2lkLCBjYWxsYmFjayl7XG4gICAgdGhpcy5saXZlU29ja2V0LndpdGhpbk93bmVycyhmb3JtLCAodmlldywgdGFyZ2V0Q3R4KSA9PiB7XG4gICAgICBsZXQgaW5wdXQgPSBmb3JtLmVsZW1lbnRzWzBdXG4gICAgICBsZXQgcGh4RXZlbnQgPSBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0FVVE9fUkVDT1ZFUikpIHx8IGZvcm0uZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcImNoYW5nZVwiKSlcblxuICAgICAgSlMuZXhlYyhcImNoYW5nZVwiLCBwaHhFdmVudCwgdmlldywgaW5wdXQsIFtcInB1c2hcIiwge190YXJnZXQ6IGlucHV0Lm5hbWUsIG5ld0NpZDogbmV3Q2lkLCBjYWxsYmFjazogY2FsbGJhY2t9XSlcbiAgICB9KVxuICB9XG5cbiAgcHVzaExpbmtQYXRjaChocmVmLCB0YXJnZXRFbCwgY2FsbGJhY2spe1xuICAgIGxldCBsaW5rUmVmID0gdGhpcy5saXZlU29ja2V0LnNldFBlbmRpbmdMaW5rKGhyZWYpXG4gICAgbGV0IHJlZkdlbiA9IHRhcmdldEVsID8gKCkgPT4gdGhpcy5wdXRSZWYoW3RhcmdldEVsXSwgXCJjbGlja1wiKSA6IG51bGxcbiAgICBsZXQgZmFsbGJhY2sgPSAoKSA9PiB0aGlzLmxpdmVTb2NrZXQucmVkaXJlY3Qod2luZG93LmxvY2F0aW9uLmhyZWYpXG5cbiAgICBsZXQgcHVzaCA9IHRoaXMucHVzaFdpdGhSZXBseShyZWZHZW4sIFwibGl2ZV9wYXRjaFwiLCB7dXJsOiBocmVmfSwgcmVzcCA9PiB7XG4gICAgICB0aGlzLmxpdmVTb2NrZXQucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmKHJlc3AubGlua19yZWRpcmVjdCl7XG4gICAgICAgICAgdGhpcy5saXZlU29ja2V0LnJlcGxhY2VNYWluKGhyZWYsIG51bGwsIGNhbGxiYWNrLCBsaW5rUmVmKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmKHRoaXMubGl2ZVNvY2tldC5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7XG4gICAgICAgICAgICB0aGlzLmhyZWYgPSBocmVmXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYXBwbHlQZW5kaW5nVXBkYXRlcygpXG4gICAgICAgICAgY2FsbGJhY2sgJiYgY2FsbGJhY2sobGlua1JlZilcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYocHVzaCl7XG4gICAgICBwdXNoLnJlY2VpdmUoXCJ0aW1lb3V0XCIsIGZhbGxiYWNrKVxuICAgIH0gZWxzZSB7XG4gICAgICBmYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgZm9ybXNGb3JSZWNvdmVyeShodG1sKXtcbiAgICBpZih0aGlzLmpvaW5Db3VudCA9PT0gMCl7IHJldHVybiBbXSB9XG5cbiAgICBsZXQgcGh4Q2hhbmdlID0gdGhpcy5iaW5kaW5nKFwiY2hhbmdlXCIpXG4gICAgbGV0IHRlbXBsYXRlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpXG4gICAgdGVtcGxhdGUuaW5uZXJIVE1MID0gaHRtbFxuXG4gICAgcmV0dXJuIChcbiAgICAgIERPTS5hbGwodGhpcy5lbCwgYGZvcm1bJHtwaHhDaGFuZ2V9XWApXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmlkICYmIHRoaXMub3duc0VsZW1lbnQoZm9ybSkpXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmVsZW1lbnRzLmxlbmd0aCA+IDApXG4gICAgICAgIC5maWx0ZXIoZm9ybSA9PiBmb3JtLmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0FVVE9fUkVDT1ZFUikpICE9PSBcImlnbm9yZVwiKVxuICAgICAgICAubWFwKGZvcm0gPT4ge1xuICAgICAgICAgIGxldCBuZXdGb3JtID0gdGVtcGxhdGUuY29udGVudC5xdWVyeVNlbGVjdG9yKGBmb3JtW2lkPVwiJHtmb3JtLmlkfVwiXVske3BoeENoYW5nZX09XCIke2Zvcm0uZ2V0QXR0cmlidXRlKHBoeENoYW5nZSl9XCJdYClcbiAgICAgICAgICBpZihuZXdGb3JtKXtcbiAgICAgICAgICAgIHJldHVybiBbZm9ybSwgbmV3Rm9ybSwgdGhpcy50YXJnZXRDb21wb25lbnRJRChuZXdGb3JtKV1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtmb3JtLCBudWxsLCBudWxsXVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcigoW2Zvcm0sIG5ld0Zvcm0sIG5ld0NpZF0pID0+IG5ld0Zvcm0pXG4gICAgKVxuICB9XG5cbiAgbWF5YmVQdXNoQ29tcG9uZW50c0Rlc3Ryb3llZChkZXN0cm95ZWRDSURzKXtcbiAgICBsZXQgd2lsbERlc3Ryb3lDSURzID0gZGVzdHJveWVkQ0lEcy5maWx0ZXIoY2lkID0+IHtcbiAgICAgIHJldHVybiBET00uZmluZENvbXBvbmVudE5vZGVMaXN0KHRoaXMuZWwsIGNpZCkubGVuZ3RoID09PSAwXG4gICAgfSlcbiAgICBpZih3aWxsRGVzdHJveUNJRHMubGVuZ3RoID4gMCl7XG4gICAgICB0aGlzLnBydW5pbmdDSURzLnB1c2goLi4ud2lsbERlc3Ryb3lDSURzKVxuXG4gICAgICB0aGlzLnB1c2hXaXRoUmVwbHkobnVsbCwgXCJjaWRzX3dpbGxfZGVzdHJveVwiLCB7Y2lkczogd2lsbERlc3Ryb3lDSURzfSwgKCkgPT4ge1xuICAgICAgICAvLyBUaGUgY2lkcyBhcmUgZWl0aGVyIGJhY2sgb24gdGhlIHBhZ2Ugb3IgdGhleSB3aWxsIGJlIGZ1bGx5IHJlbW92ZWQsXG4gICAgICAgIC8vIHNvIHdlIGNhbiByZW1vdmUgdGhlbSBmcm9tIHRoZSBwcnVuaW5nQ0lEcy5cbiAgICAgICAgdGhpcy5wcnVuaW5nQ0lEcyA9IHRoaXMucHJ1bmluZ0NJRHMuZmlsdGVyKGNpZCA9PiB3aWxsRGVzdHJveUNJRHMuaW5kZXhPZihjaWQpICE9PSAtMSlcblxuICAgICAgICAvLyBTZWUgaWYgYW55IG9mIHRoZSBjaWRzIHdlIHdhbnRlZCB0byBkZXN0cm95IHdlcmUgYWRkZWQgYmFjayxcbiAgICAgICAgLy8gaWYgdGhleSB3ZXJlIGFkZGVkIGJhY2ssIHdlIGRvbid0IGFjdHVhbGx5IGRlc3Ryb3kgdGhlbS5cbiAgICAgICAgbGV0IGNvbXBsZXRlbHlEZXN0cm95Q0lEcyA9IHdpbGxEZXN0cm95Q0lEcy5maWx0ZXIoY2lkID0+IHtcbiAgICAgICAgICByZXR1cm4gRE9NLmZpbmRDb21wb25lbnROb2RlTGlzdCh0aGlzLmVsLCBjaWQpLmxlbmd0aCA9PT0gMFxuICAgICAgICB9KVxuXG4gICAgICAgIGlmKGNvbXBsZXRlbHlEZXN0cm95Q0lEcy5sZW5ndGggPiAwKXtcbiAgICAgICAgICB0aGlzLnB1c2hXaXRoUmVwbHkobnVsbCwgXCJjaWRzX2Rlc3Ryb3llZFwiLCB7Y2lkczogY29tcGxldGVseURlc3Ryb3lDSURzfSwgKHJlc3ApID0+IHtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZWQucHJ1bmVDSURzKHJlc3AuY2lkcylcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIG93bnNFbGVtZW50KGVsKXtcbiAgICByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKFBIWF9QQVJFTlRfSUQpID09PSB0aGlzLmlkIHx8XG4gICAgICBtYXliZShlbC5jbG9zZXN0KFBIWF9WSUVXX1NFTEVDVE9SKSwgbm9kZSA9PiBub2RlLmlkKSA9PT0gdGhpcy5pZFxuICB9XG5cbiAgc3VibWl0Rm9ybShmb3JtLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBvcHRzID0ge30pe1xuICAgIERPTS5wdXRQcml2YXRlKGZvcm0sIFBIWF9IQVNfU1VCTUlUVEVELCB0cnVlKVxuICAgIGxldCBwaHhGZWVkYmFjayA9IHRoaXMubGl2ZVNvY2tldC5iaW5kaW5nKFBIWF9GRUVEQkFDS19GT1IpXG4gICAgbGV0IGlucHV0cyA9IEFycmF5LmZyb20oZm9ybS5lbGVtZW50cylcbiAgICB0aGlzLmxpdmVTb2NrZXQuYmx1ckFjdGl2ZUVsZW1lbnQodGhpcylcbiAgICB0aGlzLnB1c2hGb3JtU3VibWl0KGZvcm0sIHRhcmdldEN0eCwgcGh4RXZlbnQsIG9wdHMsICgpID0+IHtcbiAgICAgIGlucHV0cy5mb3JFYWNoKGlucHV0ID0+IERPTS5zaG93RXJyb3IoaW5wdXQsIHBoeEZlZWRiYWNrKSlcbiAgICAgIHRoaXMubGl2ZVNvY2tldC5yZXN0b3JlUHJldmlvdXNseUFjdGl2ZUZvY3VzKClcbiAgICB9KVxuICB9XG5cbiAgYmluZGluZyhraW5kKXsgcmV0dXJuIHRoaXMubGl2ZVNvY2tldC5iaW5kaW5nKGtpbmQpIH1cbn1cbiIsICIvKiogSW5pdGlhbGl6ZXMgdGhlIExpdmVTb2NrZXRcbiAqXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGVuZFBvaW50IC0gVGhlIHN0cmluZyBXZWJTb2NrZXQgZW5kcG9pbnQsIGllLCBgXCJ3c3M6Ly9leGFtcGxlLmNvbS9saXZlXCJgLFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcIi9saXZlXCJgIChpbmhlcml0ZWQgaG9zdCAmIHByb3RvY29sKVxuICogQHBhcmFtIHtQaG9lbml4LlNvY2tldH0gc29ja2V0IC0gdGhlIHJlcXVpcmVkIFBob2VuaXggU29ja2V0IGNsYXNzIGltcG9ydGVkIGZyb20gXCJwaG9lbml4XCIuIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBpbXBvcnQge1NvY2tldH0gZnJvbSBcInBob2VuaXhcIlxuICogICAgIGltcG9ydCB7TGl2ZVNvY2tldH0gZnJvbSBcInBob2VuaXhfbGl2ZV92aWV3XCJcbiAqICAgICBsZXQgbGl2ZVNvY2tldCA9IG5ldyBMaXZlU29ja2V0KFwiL2xpdmVcIiwgU29ja2V0LCB7Li4ufSlcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHNdIC0gT3B0aW9uYWwgY29uZmlndXJhdGlvbi4gT3V0c2lkZSBvZiBrZXlzIGxpc3RlZCBiZWxvdywgYWxsXG4gKiBjb25maWd1cmF0aW9uIGlzIHBhc3NlZCBkaXJlY3RseSB0byB0aGUgUGhvZW5peCBTb2NrZXQgY29uc3RydWN0b3IuXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMuZGVmYXVsdHNdIC0gVGhlIG9wdGlvbmFsIGRlZmF1bHRzIHRvIHVzZSBmb3IgdmFyaW91cyBiaW5kaW5ncyxcbiAqIHN1Y2ggYXMgYHBoeC1kZWJvdW5jZWAuIFN1cHBvcnRzIHRoZSBmb2xsb3dpbmcga2V5czpcbiAqXG4gKiAgIC0gZGVib3VuY2UgLSB0aGUgbWlsbGlzZWNvbmQgcGh4LWRlYm91bmNlIHRpbWUuIERlZmF1bHRzIDMwMFxuICogICAtIHRocm90dGxlIC0gdGhlIG1pbGxpc2Vjb25kIHBoeC10aHJvdHRsZSB0aW1lLiBEZWZhdWx0cyAzMDBcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy5wYXJhbXNdIC0gVGhlIG9wdGlvbmFsIGZ1bmN0aW9uIGZvciBwYXNzaW5nIGNvbm5lY3QgcGFyYW1zLlxuICogVGhlIGZ1bmN0aW9uIHJlY2VpdmVzIHRoZSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIExpdmVWaWV3LiBGb3IgZXhhbXBsZTpcbiAqXG4gKiAgICAgKGVsKSA9PiB7dmlldzogZWwuZ2V0QXR0cmlidXRlKFwiZGF0YS1teS12aWV3LW5hbWVcIiwgdG9rZW46IHdpbmRvdy5teVRva2VufVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5iaW5kaW5nUHJlZml4XSAtIFRoZSBvcHRpb25hbCBwcmVmaXggdG8gdXNlIGZvciBhbGwgcGh4IERPTSBhbm5vdGF0aW9ucy5cbiAqIERlZmF1bHRzIHRvIFwicGh4LVwiLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLmhvb2tzXSAtIFRoZSBvcHRpb25hbCBvYmplY3QgZm9yIHJlZmVyZW5jaW5nIExpdmVWaWV3IGhvb2sgY2FsbGJhY2tzLlxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRzLnVwbG9hZGVyc10gLSBUaGUgb3B0aW9uYWwgb2JqZWN0IGZvciByZWZlcmVuY2luZyBMaXZlVmlldyB1cGxvYWRlciBjYWxsYmFja3MuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLmxvYWRlclRpbWVvdXRdIC0gVGhlIG9wdGlvbmFsIGRlbGF5IGluIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBhcHBseVxuICogbG9hZGluZyBzdGF0ZXMuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLm1heFJlbG9hZHNdIC0gVGhlIG1heGltdW0gcmVsb2FkcyBiZWZvcmUgZW50ZXJpbmcgZmFpbHNhZmUgbW9kZS5cbiAqIEBwYXJhbSB7aW50ZWdlcn0gW29wdHMucmVsb2FkSml0dGVyTWluXSAtIFRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiBub3JtYWwgcmVsb2FkIGF0dGVtcHRzLlxuICogQHBhcmFtIHtpbnRlZ2VyfSBbb3B0cy5yZWxvYWRKaXR0ZXJNYXhdIC0gVGhlIG1heGltdW0gdGltZSBiZXR3ZWVuIG5vcm1hbCByZWxvYWQgYXR0ZW1wdHMuXG4gKiBAcGFyYW0ge2ludGVnZXJ9IFtvcHRzLmZhaWxzYWZlSml0dGVyXSAtIFRoZSB0aW1lIGJldHdlZW4gcmVsb2FkIGF0dGVtcHRzIGluIGZhaWxzYWZlIG1vZGUuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0cy52aWV3TG9nZ2VyXSAtIFRoZSBvcHRpb25hbCBmdW5jdGlvbiB0byBsb2cgZGVidWcgaW5mb3JtYXRpb24uIEZvciBleGFtcGxlOlxuICpcbiAqICAgICAodmlldywga2luZCwgbXNnLCBvYmopID0+IGNvbnNvbGUubG9nKGAke3ZpZXcuaWR9ICR7a2luZH06ICR7bXNnfSAtIGAsIG9iailcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMubWV0YWRhdGFdIC0gVGhlIG9wdGlvbmFsIG9iamVjdCBtYXBwaW5nIGV2ZW50IG5hbWVzIHRvIGZ1bmN0aW9ucyBmb3JcbiAqIHBvcHVsYXRpbmcgZXZlbnQgbWV0YWRhdGEuIEZvciBleGFtcGxlOlxuICpcbiAqICAgICBtZXRhZGF0YToge1xuICogICAgICAgY2xpY2s6IChlLCBlbCkgPT4ge1xuICogICAgICAgICByZXR1cm4ge1xuICogICAgICAgICAgIGN0cmxLZXk6IGUuY3RybEtleSxcbiAqICAgICAgICAgICBtZXRhS2V5OiBlLm1ldGFLZXksXG4gKiAgICAgICAgICAgZGV0YWlsOiBlLmRldGFpbCB8fCAxLFxuICogICAgICAgICB9XG4gKiAgICAgICB9LFxuICogICAgICAga2V5ZG93bjogKGUsIGVsKSA9PiB7XG4gKiAgICAgICAgIHJldHVybiB7XG4gKiAgICAgICAgICAga2V5OiBlLmtleSxcbiAqICAgICAgICAgICBjdHJsS2V5OiBlLmN0cmxLZXksXG4gKiAgICAgICAgICAgbWV0YUtleTogZS5tZXRhS2V5LFxuICogICAgICAgICAgIHNoaWZ0S2V5OiBlLnNoaWZ0S2V5XG4gKiAgICAgICAgIH1cbiAqICAgICAgIH1cbiAqICAgICB9XG4gKiBAcGFyYW0ge09iamVjdH0gW29wdHMuc2Vzc2lvblN0b3JhZ2VdIC0gQW4gb3B0aW9uYWwgU3RvcmFnZSBjb21wYXRpYmxlIG9iamVjdFxuICogVXNlZnVsIHdoZW4gTGl2ZVZpZXcgd29uJ3QgaGF2ZSBhY2Nlc3MgdG8gYHNlc3Npb25TdG9yYWdlYC4gIEZvciBleGFtcGxlLCBUaGlzIGNvdWxkXG4gKiBoYXBwZW4gaWYgYSBzaXRlIGxvYWRzIGEgY3Jvc3MtZG9tYWluIExpdmVWaWV3IGluIGFuIGlmcmFtZS4gIEV4YW1wbGUgdXNhZ2U6XG4gKlxuICogICAgIGNsYXNzIEluTWVtb3J5U3RvcmFnZSB7XG4gKiAgICAgICBjb25zdHJ1Y3RvcigpIHsgdGhpcy5zdG9yYWdlID0ge30gfVxuICogICAgICAgZ2V0SXRlbShrZXlOYW1lKSB7IHJldHVybiB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gfVxuICogICAgICAgcmVtb3ZlSXRlbShrZXlOYW1lKSB7IGRlbGV0ZSB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gfVxuICogICAgICAgc2V0SXRlbShrZXlOYW1lLCBrZXlWYWx1ZSkgeyB0aGlzLnN0b3JhZ2Vba2V5TmFtZV0gPSBrZXlWYWx1ZSB9XG4gKiAgICAgfVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0cy5sb2NhbFN0b3JhZ2VdIC0gQW4gb3B0aW9uYWwgU3RvcmFnZSBjb21wYXRpYmxlIG9iamVjdFxuICogVXNlZnVsIGZvciB3aGVuIExpdmVWaWV3IHdvbid0IGhhdmUgYWNjZXNzIHRvIGBsb2NhbFN0b3JhZ2VgLlxuICogU2VlIGBvcHRzLnNlc3Npb25TdG9yYWdlYCBmb3IgZXhhbXBsZXMuXG4qL1xuXG5pbXBvcnQge1xuICBCSU5ESU5HX1BSRUZJWCxcbiAgQ09OU0VDVVRJVkVfUkVMT0FEUyxcbiAgREVGQVVMVFMsXG4gIEZBSUxTQUZFX0pJVFRFUixcbiAgTE9BREVSX1RJTUVPVVQsXG4gIE1BWF9SRUxPQURTLFxuICBQSFhfREVCT1VOQ0UsXG4gIFBIWF9EUk9QX1RBUkdFVCxcbiAgUEhYX0hBU19GT0NVU0VELFxuICBQSFhfS0VZLFxuICBQSFhfTElOS19TVEFURSxcbiAgUEhYX0xJVkVfTElOSyxcbiAgUEhYX0xWX0RFQlVHLFxuICBQSFhfTFZfTEFURU5DWV9TSU0sXG4gIFBIWF9MVl9QUk9GSUxFLFxuICBQSFhfTUFJTixcbiAgUEhYX1BBUkVOVF9JRCxcbiAgUEhYX1ZJRVdfU0VMRUNUT1IsXG4gIFBIWF9ST09UX0lELFxuICBQSFhfVEhST1RUTEUsXG4gIFBIWF9UUkFDS19VUExPQURTLFxuICBQSFhfU0VTU0lPTixcbiAgUkVMT0FEX0pJVFRFUl9NSU4sXG4gIFJFTE9BRF9KSVRURVJfTUFYLFxufSBmcm9tIFwiLi9jb25zdGFudHNcIlxuXG5pbXBvcnQge1xuICBjbG9uZSxcbiAgY2xvc2VzdFBoeEJpbmRpbmcsXG4gIGNsb3N1cmUsXG4gIGRlYnVnLFxuICBpc09iamVjdCxcbiAgbWF5YmVcbn0gZnJvbSBcIi4vdXRpbHNcIlxuXG5pbXBvcnQgQnJvd3NlciBmcm9tIFwiLi9icm93c2VyXCJcbmltcG9ydCBET00gZnJvbSBcIi4vZG9tXCJcbmltcG9ydCBIb29rcyBmcm9tIFwiLi9ob29rc1wiXG5pbXBvcnQgTGl2ZVVwbG9hZGVyIGZyb20gXCIuL2xpdmVfdXBsb2FkZXJcIlxuaW1wb3J0IFZpZXcgZnJvbSBcIi4vdmlld1wiXG5pbXBvcnQgSlMgZnJvbSBcIi4vanNcIlxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaXZlU29ja2V0IHtcbiAgY29uc3RydWN0b3IodXJsLCBwaHhTb2NrZXQsIG9wdHMgPSB7fSl7XG4gICAgdGhpcy51bmxvYWRlZCA9IGZhbHNlXG4gICAgaWYoIXBoeFNvY2tldCB8fCBwaHhTb2NrZXQuY29uc3RydWN0b3IubmFtZSA9PT0gXCJPYmplY3RcIil7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFxuICAgICAgYSBwaG9lbml4IFNvY2tldCBtdXN0IGJlIHByb3ZpZGVkIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQgdG8gdGhlIExpdmVTb2NrZXQgY29uc3RydWN0b3IuIEZvciBleGFtcGxlOlxuXG4gICAgICAgICAgaW1wb3J0IHtTb2NrZXR9IGZyb20gXCJwaG9lbml4XCJcbiAgICAgICAgICBpbXBvcnQge0xpdmVTb2NrZXR9IGZyb20gXCJwaG9lbml4X2xpdmVfdmlld1wiXG4gICAgICAgICAgbGV0IGxpdmVTb2NrZXQgPSBuZXcgTGl2ZVNvY2tldChcIi9saXZlXCIsIFNvY2tldCwgey4uLn0pXG4gICAgICBgKVxuICAgIH1cbiAgICB0aGlzLnNvY2tldCA9IG5ldyBwaHhTb2NrZXQodXJsLCBvcHRzKVxuICAgIHRoaXMuYmluZGluZ1ByZWZpeCA9IG9wdHMuYmluZGluZ1ByZWZpeCB8fCBCSU5ESU5HX1BSRUZJWFxuICAgIHRoaXMub3B0cyA9IG9wdHNcbiAgICB0aGlzLnBhcmFtcyA9IGNsb3N1cmUob3B0cy5wYXJhbXMgfHwge30pXG4gICAgdGhpcy52aWV3TG9nZ2VyID0gb3B0cy52aWV3TG9nZ2VyXG4gICAgdGhpcy5tZXRhZGF0YUNhbGxiYWNrcyA9IG9wdHMubWV0YWRhdGEgfHwge31cbiAgICB0aGlzLmRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihjbG9uZShERUZBVUxUUyksIG9wdHMuZGVmYXVsdHMgfHwge30pXG4gICAgdGhpcy5hY3RpdmVFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMucHJldkFjdGl2ZSA9IG51bGxcbiAgICB0aGlzLnNpbGVuY2VkID0gZmFsc2VcbiAgICB0aGlzLm1haW4gPSBudWxsXG4gICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IG51bGxcbiAgICB0aGlzLmNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gbnVsbFxuICAgIHRoaXMubGlua1JlZiA9IDFcbiAgICB0aGlzLnJvb3RzID0ge31cbiAgICB0aGlzLmhyZWYgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMucGVuZGluZ0xpbmsgPSBudWxsXG4gICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSBjbG9uZSh3aW5kb3cubG9jYXRpb24pXG4gICAgdGhpcy5ob29rcyA9IG9wdHMuaG9va3MgfHwge31cbiAgICB0aGlzLnVwbG9hZGVycyA9IG9wdHMudXBsb2FkZXJzIHx8IHt9XG4gICAgdGhpcy5sb2FkZXJUaW1lb3V0ID0gb3B0cy5sb2FkZXJUaW1lb3V0IHx8IExPQURFUl9USU1FT1VUXG4gICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIgPSBudWxsXG4gICAgdGhpcy5tYXhSZWxvYWRzID0gb3B0cy5tYXhSZWxvYWRzIHx8IE1BWF9SRUxPQURTXG4gICAgdGhpcy5yZWxvYWRKaXR0ZXJNaW4gPSBvcHRzLnJlbG9hZEppdHRlck1pbiB8fCBSRUxPQURfSklUVEVSX01JTlxuICAgIHRoaXMucmVsb2FkSml0dGVyTWF4ID0gb3B0cy5yZWxvYWRKaXR0ZXJNYXggfHwgUkVMT0FEX0pJVFRFUl9NQVhcbiAgICB0aGlzLmZhaWxzYWZlSml0dGVyID0gb3B0cy5mYWlsc2FmZUppdHRlciB8fCBGQUlMU0FGRV9KSVRURVJcbiAgICB0aGlzLmxvY2FsU3RvcmFnZSA9IG9wdHMubG9jYWxTdG9yYWdlIHx8IHdpbmRvdy5sb2NhbFN0b3JhZ2VcbiAgICB0aGlzLnNlc3Npb25TdG9yYWdlID0gb3B0cy5zZXNzaW9uU3RvcmFnZSB8fCB3aW5kb3cuc2Vzc2lvblN0b3JhZ2VcbiAgICB0aGlzLmJvdW5kVG9wTGV2ZWxFdmVudHMgPSBmYWxzZVxuICAgIHRoaXMuZG9tQ2FsbGJhY2tzID0gT2JqZWN0LmFzc2lnbih7b25Ob2RlQWRkZWQ6IGNsb3N1cmUoKSwgb25CZWZvcmVFbFVwZGF0ZWQ6IGNsb3N1cmUoKX0sIG9wdHMuZG9tIHx8IHt9KVxuICAgIHRoaXMudHJhbnNpdGlvbnMgPSBuZXcgVHJhbnNpdGlvblNldCgpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwYWdlaGlkZVwiLCBfZSA9PiB7XG4gICAgICB0aGlzLnVubG9hZGVkID0gdHJ1ZVxuICAgIH0pXG4gICAgdGhpcy5zb2NrZXQub25PcGVuKCgpID0+IHtcbiAgICAgIGlmKHRoaXMuaXNVbmxvYWRlZCgpKXtcbiAgICAgICAgLy8gcmVsb2FkIHBhZ2UgaWYgYmVpbmcgcmVzdG9yZWQgZnJvbSBiYWNrL2ZvcndhcmQgY2FjaGUgYW5kIGJyb3dzZXIgZG9lcyBub3QgZW1pdCBcInBhZ2VzaG93XCJcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIC8vIHB1YmxpY1xuXG4gIGlzUHJvZmlsZUVuYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfUFJPRklMRSkgPT09IFwidHJ1ZVwiIH1cblxuICBpc0RlYnVnRW5hYmxlZCgpeyByZXR1cm4gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFBIWF9MVl9ERUJVRykgPT09IFwidHJ1ZVwiIH1cblxuICBpc0RlYnVnRGlzYWJsZWQoKXsgcmV0dXJuIHRoaXMuc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShQSFhfTFZfREVCVUcpID09PSBcImZhbHNlXCIgfVxuXG4gIGVuYWJsZURlYnVnKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfREVCVUcsIFwidHJ1ZVwiKSB9XG5cbiAgZW5hYmxlUHJvZmlsaW5nKCl7IHRoaXMuc2Vzc2lvblN0b3JhZ2Uuc2V0SXRlbShQSFhfTFZfUFJPRklMRSwgXCJ0cnVlXCIpIH1cblxuICBkaXNhYmxlRGVidWcoKXsgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFBIWF9MVl9ERUJVRywgXCJmYWxzZVwiKSB9XG5cbiAgZGlzYWJsZVByb2ZpbGluZygpeyB0aGlzLnNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0oUEhYX0xWX1BST0ZJTEUpIH1cblxuICBlbmFibGVMYXRlbmN5U2ltKHVwcGVyQm91bmRNcyl7XG4gICAgdGhpcy5lbmFibGVEZWJ1ZygpXG4gICAgY29uc29sZS5sb2coXCJsYXRlbmN5IHNpbXVsYXRvciBlbmFibGVkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhpcyBicm93c2VyIHNlc3Npb24uIENhbGwgZGlzYWJsZUxhdGVuY3lTaW0oKSB0byBkaXNhYmxlXCIpXG4gICAgdGhpcy5zZXNzaW9uU3RvcmFnZS5zZXRJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSwgdXBwZXJCb3VuZE1zKVxuICB9XG5cbiAgZGlzYWJsZUxhdGVuY3lTaW0oKXsgdGhpcy5zZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSkgfVxuXG4gIGdldExhdGVuY3lTaW0oKXtcbiAgICBsZXQgc3RyID0gdGhpcy5zZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFBIWF9MVl9MQVRFTkNZX1NJTSlcbiAgICByZXR1cm4gc3RyID8gcGFyc2VJbnQoc3RyKSA6IG51bGxcbiAgfVxuXG4gIGdldFNvY2tldCgpeyByZXR1cm4gdGhpcy5zb2NrZXQgfVxuXG4gIGNvbm5lY3QoKXtcbiAgICAvLyBlbmFibGUgZGVidWcgYnkgZGVmYXVsdCBpZiBvbiBsb2NhbGhvc3QgYW5kIG5vdCBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYod2luZG93LmxvY2F0aW9uLmhvc3RuYW1lID09PSBcImxvY2FsaG9zdFwiICYmICF0aGlzLmlzRGVidWdEaXNhYmxlZCgpKXsgdGhpcy5lbmFibGVEZWJ1ZygpIH1cbiAgICBsZXQgZG9Db25uZWN0ID0gKCkgPT4ge1xuICAgICAgaWYodGhpcy5qb2luUm9vdFZpZXdzKCkpe1xuICAgICAgICB0aGlzLmJpbmRUb3BMZXZlbEV2ZW50cygpXG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKVxuICAgICAgfSBlbHNlIGlmKHRoaXMubWFpbil7XG4gICAgICAgIHRoaXMuc29ja2V0LmNvbm5lY3QoKVxuICAgICAgfVxuICAgIH1cbiAgICBpZihbXCJjb21wbGV0ZVwiLCBcImxvYWRlZFwiLCBcImludGVyYWN0aXZlXCJdLmluZGV4T2YoZG9jdW1lbnQucmVhZHlTdGF0ZSkgPj0gMCl7XG4gICAgICBkb0Nvbm5lY3QoKVxuICAgIH0gZWxzZSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiBkb0Nvbm5lY3QoKSlcbiAgICB9XG4gIH1cblxuICBkaXNjb25uZWN0KGNhbGxiYWNrKXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIpXG4gICAgdGhpcy5zb2NrZXQuZGlzY29ubmVjdChjYWxsYmFjaylcbiAgfVxuXG4gIHJlcGxhY2VUcmFuc3BvcnQodHJhbnNwb3J0KXtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5yZWxvYWRXaXRoSml0dGVyVGltZXIpXG4gICAgdGhpcy5zb2NrZXQucmVwbGFjZVRyYW5zcG9ydCh0cmFuc3BvcnQpXG4gICAgdGhpcy5jb25uZWN0KClcbiAgfVxuXG4gIGV4ZWNKUyhlbCwgZW5jb2RlZEpTLCBldmVudFR5cGUgPSBudWxsKXtcbiAgICB0aGlzLm93bmVyKGVsLCB2aWV3ID0+IEpTLmV4ZWMoZXZlbnRUeXBlLCBlbmNvZGVkSlMsIHZpZXcsIGVsKSlcbiAgfVxuXG4gIC8vIHByaXZhdGVcblxuICB0cmlnZ2VyRE9NKGtpbmQsIGFyZ3MpeyB0aGlzLmRvbUNhbGxiYWNrc1traW5kXSguLi5hcmdzKSB9XG5cbiAgdGltZShuYW1lLCBmdW5jKXtcbiAgICBpZighdGhpcy5pc1Byb2ZpbGVFbmFibGVkKCkgfHwgIWNvbnNvbGUudGltZSl7IHJldHVybiBmdW5jKCkgfVxuICAgIGNvbnNvbGUudGltZShuYW1lKVxuICAgIGxldCByZXN1bHQgPSBmdW5jKClcbiAgICBjb25zb2xlLnRpbWVFbmQobmFtZSlcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsb2codmlldywga2luZCwgbXNnQ2FsbGJhY2spe1xuICAgIGlmKHRoaXMudmlld0xvZ2dlcil7XG4gICAgICBsZXQgW21zZywgb2JqXSA9IG1zZ0NhbGxiYWNrKClcbiAgICAgIHRoaXMudmlld0xvZ2dlcih2aWV3LCBraW5kLCBtc2csIG9iailcbiAgICB9IGVsc2UgaWYodGhpcy5pc0RlYnVnRW5hYmxlZCgpKXtcbiAgICAgIGxldCBbbXNnLCBvYmpdID0gbXNnQ2FsbGJhY2soKVxuICAgICAgZGVidWcodmlldywga2luZCwgbXNnLCBvYmopXG4gICAgfVxuICB9XG5cbiAgcmVxdWVzdERPTVVwZGF0ZShjYWxsYmFjayl7XG4gICAgdGhpcy50cmFuc2l0aW9ucy5hZnRlcihjYWxsYmFjaylcbiAgfVxuXG4gIHRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lID0gZnVuY3Rpb24oKXt9KXtcbiAgICB0aGlzLnRyYW5zaXRpb25zLmFkZFRyYW5zaXRpb24odGltZSwgb25TdGFydCwgb25Eb25lKVxuICB9XG5cbiAgb25DaGFubmVsKGNoYW5uZWwsIGV2ZW50LCBjYil7XG4gICAgY2hhbm5lbC5vbihldmVudCwgZGF0YSA9PiB7XG4gICAgICBsZXQgbGF0ZW5jeSA9IHRoaXMuZ2V0TGF0ZW5jeVNpbSgpXG4gICAgICBpZighbGF0ZW5jeSl7XG4gICAgICAgIGNiKGRhdGEpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhgc2ltdWxhdGluZyAke2xhdGVuY3l9bXMgb2YgbGF0ZW5jeSBmcm9tIHNlcnZlciB0byBjbGllbnRgKVxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IGNiKGRhdGEpLCBsYXRlbmN5KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICB3cmFwUHVzaCh2aWV3LCBvcHRzLCBwdXNoKXtcbiAgICBsZXQgbGF0ZW5jeSA9IHRoaXMuZ2V0TGF0ZW5jeVNpbSgpXG4gICAgbGV0IG9sZEpvaW5Db3VudCA9IHZpZXcuam9pbkNvdW50XG4gICAgaWYoIWxhdGVuY3kpe1xuICAgICAgaWYodGhpcy5pc0Nvbm5lY3RlZCgpICYmIG9wdHMudGltZW91dCl7XG4gICAgICAgIHJldHVybiBwdXNoKCkucmVjZWl2ZShcInRpbWVvdXRcIiwgKCkgPT4ge1xuICAgICAgICAgIGlmKHZpZXcuam9pbkNvdW50ID09PSBvbGRKb2luQ291bnQgJiYgIXZpZXcuaXNEZXN0cm95ZWQoKSl7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZFdpdGhKaXR0ZXIodmlldywgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLmxvZyh2aWV3LCBcInRpbWVvdXRcIiwgKCkgPT4gW1wicmVjZWl2ZWQgdGltZW91dCB3aGlsZSBjb21tdW5pY2F0aW5nIHdpdGggc2VydmVyLiBGYWxsaW5nIGJhY2sgdG8gaGFyZCByZWZyZXNoIGZvciByZWNvdmVyeVwiXSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHB1c2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKGBzaW11bGF0aW5nICR7bGF0ZW5jeX1tcyBvZiBsYXRlbmN5IGZyb20gY2xpZW50IHRvIHNlcnZlcmApXG4gICAgbGV0IGZha2VQdXNoID0ge1xuICAgICAgcmVjZWl2ZXM6IFtdLFxuICAgICAgcmVjZWl2ZShraW5kLCBjYil7IHRoaXMucmVjZWl2ZXMucHVzaChba2luZCwgY2JdKSB9XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYodmlldy5pc0Rlc3Ryb3llZCgpKXsgcmV0dXJuIH1cbiAgICAgIGZha2VQdXNoLnJlY2VpdmVzLnJlZHVjZSgoYWNjLCBba2luZCwgY2JdKSA9PiBhY2MucmVjZWl2ZShraW5kLCBjYiksIHB1c2goKSlcbiAgICB9LCBsYXRlbmN5KVxuICAgIHJldHVybiBmYWtlUHVzaFxuICB9XG5cbiAgcmVsb2FkV2l0aEppdHRlcih2aWV3LCBsb2cpe1xuICAgIGNsZWFyVGltZW91dCh0aGlzLnJlbG9hZFdpdGhKaXR0ZXJUaW1lcilcbiAgICB0aGlzLmRpc2Nvbm5lY3QoKVxuICAgIGxldCBtaW5NcyA9IHRoaXMucmVsb2FkSml0dGVyTWluXG4gICAgbGV0IG1heE1zID0gdGhpcy5yZWxvYWRKaXR0ZXJNYXhcbiAgICBsZXQgYWZ0ZXJNcyA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChtYXhNcyAtIG1pbk1zICsgMSkpICsgbWluTXNcbiAgICBsZXQgdHJpZXMgPSBCcm93c2VyLnVwZGF0ZUxvY2FsKHRoaXMubG9jYWxTdG9yYWdlLCB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIENPTlNFQ1VUSVZFX1JFTE9BRFMsIDAsIGNvdW50ID0+IGNvdW50ICsgMSlcbiAgICBpZih0cmllcyA+IHRoaXMubWF4UmVsb2Fkcyl7XG4gICAgICBhZnRlck1zID0gdGhpcy5mYWlsc2FmZUppdHRlclxuICAgIH1cbiAgICB0aGlzLnJlbG9hZFdpdGhKaXR0ZXJUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gaWYgdmlldyBoYXMgcmVjb3ZlcmVkLCBzdWNoIGFzIHRyYW5zcG9ydCByZXBsYWNlZCwgdGhlbiBjYW5jZWxcbiAgICAgIGlmKHZpZXcuaXNEZXN0cm95ZWQoKSB8fCB2aWV3LmlzQ29ubmVjdGVkKCkpeyByZXR1cm4gfVxuICAgICAgdmlldy5kZXN0cm95KClcbiAgICAgIGxvZyA/IGxvZygpIDogdGhpcy5sb2codmlldywgXCJqb2luXCIsICgpID0+IFtgZW5jb3VudGVyZWQgJHt0cmllc30gY29uc2VjdXRpdmUgcmVsb2Fkc2BdKVxuICAgICAgaWYodHJpZXMgPiB0aGlzLm1heFJlbG9hZHMpe1xuICAgICAgICB0aGlzLmxvZyh2aWV3LCBcImpvaW5cIiwgKCkgPT4gW2BleGNlZWRlZCAke3RoaXMubWF4UmVsb2Fkc30gY29uc2VjdXRpdmUgcmVsb2Fkcy4gRW50ZXJpbmcgZmFpbHNhZmUgbW9kZWBdKVxuICAgICAgfVxuICAgICAgaWYodGhpcy5oYXNQZW5kaW5nTGluaygpKXtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uID0gdGhpcy5wZW5kaW5nTGlua1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpXG4gICAgICB9XG4gICAgfSwgYWZ0ZXJNcylcbiAgfVxuXG4gIGdldEhvb2tDYWxsYmFja3MobmFtZSl7XG4gICAgcmV0dXJuIG5hbWUgJiYgbmFtZS5zdGFydHNXaXRoKFwiUGhvZW5peC5cIikgPyBIb29rc1tuYW1lLnNwbGl0KFwiLlwiKVsxXV0gOiB0aGlzLmhvb2tzW25hbWVdXG4gIH1cblxuICBpc1VubG9hZGVkKCl7IHJldHVybiB0aGlzLnVubG9hZGVkIH1cblxuICBpc0Nvbm5lY3RlZCgpeyByZXR1cm4gdGhpcy5zb2NrZXQuaXNDb25uZWN0ZWQoKSB9XG5cbiAgZ2V0QmluZGluZ1ByZWZpeCgpeyByZXR1cm4gdGhpcy5iaW5kaW5nUHJlZml4IH1cblxuICBiaW5kaW5nKGtpbmQpeyByZXR1cm4gYCR7dGhpcy5nZXRCaW5kaW5nUHJlZml4KCl9JHtraW5kfWAgfVxuXG4gIGNoYW5uZWwodG9waWMsIHBhcmFtcyl7IHJldHVybiB0aGlzLnNvY2tldC5jaGFubmVsKHRvcGljLCBwYXJhbXMpIH1cblxuICBqb2luUm9vdFZpZXdzKCl7XG4gICAgbGV0IHJvb3RzRm91bmQgPSBmYWxzZVxuICAgIERPTS5hbGwoZG9jdW1lbnQsIGAke1BIWF9WSUVXX1NFTEVDVE9SfTpub3QoWyR7UEhYX1BBUkVOVF9JRH1dKWAsIHJvb3RFbCA9PiB7XG4gICAgICBpZighdGhpcy5nZXRSb290QnlJZChyb290RWwuaWQpKXtcbiAgICAgICAgbGV0IHZpZXcgPSB0aGlzLm5ld1Jvb3RWaWV3KHJvb3RFbClcbiAgICAgICAgdmlldy5zZXRIcmVmKHRoaXMuZ2V0SHJlZigpKVxuICAgICAgICB2aWV3LmpvaW4oKVxuICAgICAgICBpZihyb290RWwuaGFzQXR0cmlidXRlKFBIWF9NQUlOKSl7IHRoaXMubWFpbiA9IHZpZXcgfVxuICAgICAgfVxuICAgICAgcm9vdHNGb3VuZCA9IHRydWVcbiAgICB9KVxuICAgIHJldHVybiByb290c0ZvdW5kXG4gIH1cblxuICByZWRpcmVjdCh0bywgZmxhc2gpe1xuICAgIHRoaXMuZGlzY29ubmVjdCgpXG4gICAgQnJvd3Nlci5yZWRpcmVjdCh0bywgZmxhc2gpXG4gIH1cblxuICByZXBsYWNlTWFpbihocmVmLCBmbGFzaCwgY2FsbGJhY2sgPSBudWxsLCBsaW5rUmVmID0gdGhpcy5zZXRQZW5kaW5nTGluayhocmVmKSl7XG4gICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IHRoaXMub3V0Z29pbmdNYWluRWwgfHwgdGhpcy5tYWluLmVsXG4gICAgbGV0IG5ld01haW5FbCA9IERPTS5jbG9uZU5vZGUodGhpcy5vdXRnb2luZ01haW5FbCwgXCJcIilcbiAgICB0aGlzLm1haW4uc2hvd0xvYWRlcih0aGlzLmxvYWRlclRpbWVvdXQpXG4gICAgdGhpcy5tYWluLmRlc3Ryb3koKVxuXG4gICAgdGhpcy5tYWluID0gdGhpcy5uZXdSb290VmlldyhuZXdNYWluRWwsIGZsYXNoKVxuICAgIHRoaXMubWFpbi5zZXRSZWRpcmVjdChocmVmKVxuICAgIHRoaXMudHJhbnNpdGlvblJlbW92ZXMoKVxuICAgIHRoaXMubWFpbi5qb2luKChqb2luQ291bnQsIG9uRG9uZSkgPT4ge1xuICAgICAgaWYoam9pbkNvdW50ID09PSAxICYmIHRoaXMuY29tbWl0UGVuZGluZ0xpbmsobGlua1JlZikpe1xuICAgICAgICB0aGlzLnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICAgIERPTS5maW5kUGh4U3RpY2t5KGRvY3VtZW50KS5mb3JFYWNoKGVsID0+IG5ld01haW5FbC5hcHBlbmRDaGlsZChlbCkpXG4gICAgICAgICAgdGhpcy5vdXRnb2luZ01haW5FbC5yZXBsYWNlV2l0aChuZXdNYWluRWwpXG4gICAgICAgICAgdGhpcy5vdXRnb2luZ01haW5FbCA9IG51bGxcbiAgICAgICAgICBjYWxsYmFjayAmJiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2spXG4gICAgICAgICAgb25Eb25lKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgdHJhbnNpdGlvblJlbW92ZXMoZWxlbWVudHMpe1xuICAgIGxldCByZW1vdmVBdHRyID0gdGhpcy5iaW5kaW5nKFwicmVtb3ZlXCIpXG4gICAgZWxlbWVudHMgPSBlbGVtZW50cyB8fCBET00uYWxsKGRvY3VtZW50LCBgWyR7cmVtb3ZlQXR0cn1dYClcbiAgICBlbGVtZW50cy5mb3JFYWNoKGVsID0+IHtcbiAgICAgIGlmKGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpKXsgLy8gc2tpcCBjaGlsZHJlbiBhbHJlYWR5IHJlbW92ZWRcbiAgICAgICAgdGhpcy5leGVjSlMoZWwsIGVsLmdldEF0dHJpYnV0ZShyZW1vdmVBdHRyKSwgXCJyZW1vdmVcIilcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaXNQaHhWaWV3KGVsKXsgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZSAmJiBlbC5nZXRBdHRyaWJ1dGUoUEhYX1NFU1NJT04pICE9PSBudWxsIH1cblxuICBuZXdSb290VmlldyhlbCwgZmxhc2gpe1xuICAgIGxldCB2aWV3ID0gbmV3IFZpZXcoZWwsIHRoaXMsIG51bGwsIGZsYXNoKVxuICAgIHRoaXMucm9vdHNbdmlldy5pZF0gPSB2aWV3XG4gICAgcmV0dXJuIHZpZXdcbiAgfVxuXG4gIG93bmVyKGNoaWxkRWwsIGNhbGxiYWNrKXtcbiAgICBsZXQgdmlldyA9IG1heWJlKGNoaWxkRWwuY2xvc2VzdChQSFhfVklFV19TRUxFQ1RPUiksIGVsID0+IHRoaXMuZ2V0Vmlld0J5RWwoZWwpKSB8fCB0aGlzLm1haW5cbiAgICBpZih2aWV3KXsgY2FsbGJhY2sodmlldykgfVxuICB9XG5cbiAgd2l0aGluT3duZXJzKGNoaWxkRWwsIGNhbGxiYWNrKXtcbiAgICB0aGlzLm93bmVyKGNoaWxkRWwsIHZpZXcgPT4gY2FsbGJhY2sodmlldywgY2hpbGRFbCkpXG4gIH1cblxuICBnZXRWaWV3QnlFbChlbCl7XG4gICAgbGV0IHJvb3RJZCA9IGVsLmdldEF0dHJpYnV0ZShQSFhfUk9PVF9JRClcbiAgICByZXR1cm4gbWF5YmUodGhpcy5nZXRSb290QnlJZChyb290SWQpLCByb290ID0+IHJvb3QuZ2V0RGVzY2VuZGVudEJ5RWwoZWwpKVxuICB9XG5cbiAgZ2V0Um9vdEJ5SWQoaWQpeyByZXR1cm4gdGhpcy5yb290c1tpZF0gfVxuXG4gIGRlc3Ryb3lBbGxWaWV3cygpe1xuICAgIGZvcihsZXQgaWQgaW4gdGhpcy5yb290cyl7XG4gICAgICB0aGlzLnJvb3RzW2lkXS5kZXN0cm95KClcbiAgICAgIGRlbGV0ZSB0aGlzLnJvb3RzW2lkXVxuICAgIH1cbiAgICB0aGlzLm1haW4gPSBudWxsXG4gIH1cblxuICBkZXN0cm95Vmlld0J5RWwoZWwpe1xuICAgIGxldCByb290ID0gdGhpcy5nZXRSb290QnlJZChlbC5nZXRBdHRyaWJ1dGUoUEhYX1JPT1RfSUQpKVxuICAgIGlmKHJvb3QgJiYgcm9vdC5pZCA9PT0gZWwuaWQpe1xuICAgICAgcm9vdC5kZXN0cm95KClcbiAgICAgIGRlbGV0ZSB0aGlzLnJvb3RzW3Jvb3QuaWRdXG4gICAgfSBlbHNlIGlmKHJvb3Qpe1xuICAgICAgcm9vdC5kZXN0cm95RGVzY2VuZGVudChlbC5pZClcbiAgICB9XG4gIH1cblxuICBzZXRBY3RpdmVFbGVtZW50KHRhcmdldCl7XG4gICAgaWYodGhpcy5hY3RpdmVFbGVtZW50ID09PSB0YXJnZXQpeyByZXR1cm4gfVxuICAgIHRoaXMuYWN0aXZlRWxlbWVudCA9IHRhcmdldFxuICAgIGxldCBjYW5jZWwgPSAoKSA9PiB7XG4gICAgICBpZih0YXJnZXQgPT09IHRoaXMuYWN0aXZlRWxlbWVudCl7IHRoaXMuYWN0aXZlRWxlbWVudCA9IG51bGwgfVxuICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIHRoaXMpXG4gICAgICB0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIHRoaXMpXG4gICAgfVxuICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBjYW5jZWwpXG4gICAgdGFyZ2V0LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBjYW5jZWwpXG4gIH1cblxuICBnZXRBY3RpdmVFbGVtZW50KCl7XG4gICAgaWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSl7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50IHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gYmUgbnVsbCBpbiBJbnRlcm5ldCBFeHBsb3JlciAxMVxuICAgICAgcmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYm9keVxuICAgIH1cbiAgfVxuXG4gIGRyb3BBY3RpdmVFbGVtZW50KHZpZXcpe1xuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAmJiB2aWV3Lm93bnNFbGVtZW50KHRoaXMucHJldkFjdGl2ZSkpe1xuICAgICAgdGhpcy5wcmV2QWN0aXZlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIHJlc3RvcmVQcmV2aW91c2x5QWN0aXZlRm9jdXMoKXtcbiAgICBpZih0aGlzLnByZXZBY3RpdmUgJiYgdGhpcy5wcmV2QWN0aXZlICE9PSBkb2N1bWVudC5ib2R5KXtcbiAgICAgIHRoaXMucHJldkFjdGl2ZS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgYmx1ckFjdGl2ZUVsZW1lbnQoKXtcbiAgICB0aGlzLnByZXZBY3RpdmUgPSB0aGlzLmdldEFjdGl2ZUVsZW1lbnQoKVxuICAgIGlmKHRoaXMucHJldkFjdGl2ZSAhPT0gZG9jdW1lbnQuYm9keSl7IHRoaXMucHJldkFjdGl2ZS5ibHVyKCkgfVxuICB9XG5cbiAgYmluZFRvcExldmVsRXZlbnRzKCl7XG4gICAgaWYodGhpcy5ib3VuZFRvcExldmVsRXZlbnRzKXsgcmV0dXJuIH1cblxuICAgIHRoaXMuYm91bmRUb3BMZXZlbEV2ZW50cyA9IHRydWVcbiAgICAvLyBlbnRlciBmYWlsc2FmZSByZWxvYWQgaWYgc2VydmVyIGhhcyBnb25lIGF3YXkgaW50ZW50aW9uYWxseSwgc3VjaCBhcyBcImRpc2Nvbm5lY3RcIiBicm9hZGNhc3RcbiAgICB0aGlzLnNvY2tldC5vbkNsb3NlKGV2ZW50ID0+IHtcbiAgICAgIGlmKGV2ZW50ICYmIGV2ZW50LmNvZGUgPT09IDEwMDAgJiYgdGhpcy5tYWluKXtcbiAgICAgICAgdGhpcy5yZWxvYWRXaXRoSml0dGVyKHRoaXMubWFpbilcbiAgICAgIH1cbiAgICB9KVxuICAgIGRvY3VtZW50LmJvZHkuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGZ1bmN0aW9uICgpeyB9KSAvLyBlbnN1cmUgYWxsIGNsaWNrIGV2ZW50cyBidWJibGUgZm9yIG1vYmlsZSBTYWZhcmlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VzaG93XCIsIGUgPT4ge1xuICAgICAgaWYoZS5wZXJzaXN0ZWQpeyAvLyByZWxvYWQgcGFnZSBpZiBiZWluZyByZXN0b3JlZCBmcm9tIGJhY2svZm9yd2FyZCBjYWNoZVxuICAgICAgICB0aGlzLmdldFNvY2tldCgpLmRpc2Nvbm5lY3QoKVxuICAgICAgICB0aGlzLndpdGhQYWdlTG9hZGluZyh7dG86IHdpbmRvdy5sb2NhdGlvbi5ocmVmLCBraW5kOiBcInJlZGlyZWN0XCJ9KVxuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKClcbiAgICAgIH1cbiAgICB9LCB0cnVlKVxuICAgIHRoaXMuYmluZE5hdigpXG4gICAgdGhpcy5iaW5kQ2xpY2tzKClcbiAgICB0aGlzLmJpbmRGb3JtcygpXG4gICAgdGhpcy5iaW5kKHtrZXl1cDogXCJrZXl1cFwiLCBrZXlkb3duOiBcImtleWRvd25cIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgcGh4RXZlbnQsIGV2ZW50VGFyZ2V0KSA9PiB7XG4gICAgICBsZXQgbWF0Y2hLZXkgPSB0YXJnZXRFbC5nZXRBdHRyaWJ1dGUodGhpcy5iaW5kaW5nKFBIWF9LRVkpKVxuICAgICAgbGV0IHByZXNzZWRLZXkgPSBlLmtleSAmJiBlLmtleS50b0xvd2VyQ2FzZSgpIC8vIGNocm9tZSBjbGlja2VkIGF1dG9jb21wbGV0ZXMgc2VuZCBhIGtleWRvd24gd2l0aG91dCBrZXlcbiAgICAgIGlmKG1hdGNoS2V5ICYmIG1hdGNoS2V5LnRvTG93ZXJDYXNlKCkgIT09IHByZXNzZWRLZXkpeyByZXR1cm4gfVxuXG4gICAgICBsZXQgZGF0YSA9IHtrZXk6IGUua2V5LCAuLi50aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbCl9XG4gICAgICBKUy5leGVjKHR5cGUsIHBoeEV2ZW50LCB2aWV3LCB0YXJnZXRFbCwgW1wicHVzaFwiLCB7ZGF0YX1dKVxuICAgIH0pXG4gICAgdGhpcy5iaW5kKHtibHVyOiBcImZvY3Vzb3V0XCIsIGZvY3VzOiBcImZvY3VzaW5cIn0sIChlLCB0eXBlLCB2aWV3LCB0YXJnZXRFbCwgcGh4RXZlbnQsIGV2ZW50VGFyZ2V0KSA9PiB7XG4gICAgICBpZighZXZlbnRUYXJnZXQpe1xuICAgICAgICBsZXQgZGF0YSA9IHtrZXk6IGUua2V5LCAuLi50aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbCl9XG4gICAgICAgIEpTLmV4ZWModHlwZSwgcGh4RXZlbnQsIHZpZXcsIHRhcmdldEVsLCBbXCJwdXNoXCIsIHtkYXRhfV0pXG4gICAgICB9XG4gICAgfSlcbiAgICB0aGlzLmJpbmQoe2JsdXI6IFwiYmx1clwiLCBmb2N1czogXCJmb2N1c1wifSwgKGUsIHR5cGUsIHZpZXcsIHRhcmdldEVsLCB0YXJnZXRDdHgsIHBoeEV2ZW50LCBwaHhUYXJnZXQpID0+IHtcbiAgICAgIC8vIGJsdXIgYW5kIGZvY3VzIGFyZSB0cmlnZ2VyZWQgb24gZG9jdW1lbnQgYW5kIHdpbmRvdy4gRGlzY2FyZCBvbmUgdG8gYXZvaWQgZHVwc1xuICAgICAgaWYocGh4VGFyZ2V0ID09PSBcIndpbmRvd1wiKXtcbiAgICAgICAgbGV0IGRhdGEgPSB0aGlzLmV2ZW50TWV0YSh0eXBlLCBlLCB0YXJnZXRFbClcbiAgICAgICAgSlMuZXhlYyh0eXBlLCBwaHhFdmVudCwgdmlldywgdGFyZ2V0RWwsIFtcInB1c2hcIiwge2RhdGF9XSlcbiAgICAgIH1cbiAgICB9KVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwiZHJhZ292ZXJcIiwgZSA9PiBlLnByZXZlbnREZWZhdWx0KCkpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJkcm9wXCIsIGUgPT4ge1xuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBsZXQgZHJvcFRhcmdldElkID0gbWF5YmUoY2xvc2VzdFBoeEJpbmRpbmcoZS50YXJnZXQsIHRoaXMuYmluZGluZyhQSFhfRFJPUF9UQVJHRVQpKSwgdHJ1ZVRhcmdldCA9PiB7XG4gICAgICAgIHJldHVybiB0cnVlVGFyZ2V0LmdldEF0dHJpYnV0ZSh0aGlzLmJpbmRpbmcoUEhYX0RST1BfVEFSR0VUKSlcbiAgICAgIH0pXG4gICAgICBsZXQgZHJvcFRhcmdldCA9IGRyb3BUYXJnZXRJZCAmJiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChkcm9wVGFyZ2V0SWQpXG4gICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGUuZGF0YVRyYW5zZmVyLmZpbGVzIHx8IFtdKVxuICAgICAgaWYoIWRyb3BUYXJnZXQgfHwgZHJvcFRhcmdldC5kaXNhYmxlZCB8fCBmaWxlcy5sZW5ndGggPT09IDAgfHwgIShkcm9wVGFyZ2V0LmZpbGVzIGluc3RhbmNlb2YgRmlsZUxpc3QpKXsgcmV0dXJuIH1cblxuICAgICAgTGl2ZVVwbG9hZGVyLnRyYWNrRmlsZXMoZHJvcFRhcmdldCwgZmlsZXMpXG4gICAgICBkcm9wVGFyZ2V0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiaW5wdXRcIiwge2J1YmJsZXM6IHRydWV9KSlcbiAgICB9KVxuICAgIHRoaXMub24oUEhYX1RSQUNLX1VQTE9BRFMsIGUgPT4ge1xuICAgICAgbGV0IHVwbG9hZFRhcmdldCA9IGUudGFyZ2V0XG4gICAgICBpZighRE9NLmlzVXBsb2FkSW5wdXQodXBsb2FkVGFyZ2V0KSl7IHJldHVybiB9XG4gICAgICBsZXQgZmlsZXMgPSBBcnJheS5mcm9tKGUuZGV0YWlsLmZpbGVzIHx8IFtdKS5maWx0ZXIoZiA9PiBmIGluc3RhbmNlb2YgRmlsZSB8fCBmIGluc3RhbmNlb2YgQmxvYilcbiAgICAgIExpdmVVcGxvYWRlci50cmFja0ZpbGVzKHVwbG9hZFRhcmdldCwgZmlsZXMpXG4gICAgICB1cGxvYWRUYXJnZXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJpbnB1dFwiLCB7YnViYmxlczogdHJ1ZX0pKVxuICAgIH0pXG4gIH1cblxuICBldmVudE1ldGEoZXZlbnROYW1lLCBlLCB0YXJnZXRFbCl7XG4gICAgbGV0IGNhbGxiYWNrID0gdGhpcy5tZXRhZGF0YUNhbGxiYWNrc1tldmVudE5hbWVdXG4gICAgcmV0dXJuIGNhbGxiYWNrID8gY2FsbGJhY2soZSwgdGFyZ2V0RWwpIDoge31cbiAgfVxuXG4gIHNldFBlbmRpbmdMaW5rKGhyZWYpe1xuICAgIHRoaXMubGlua1JlZisrXG4gICAgdGhpcy5wZW5kaW5nTGluayA9IGhyZWZcbiAgICByZXR1cm4gdGhpcy5saW5rUmVmXG4gIH1cblxuICBjb21taXRQZW5kaW5nTGluayhsaW5rUmVmKXtcbiAgICBpZih0aGlzLmxpbmtSZWYgIT09IGxpbmtSZWYpe1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaHJlZiA9IHRoaXMucGVuZGluZ0xpbmtcbiAgICAgIHRoaXMucGVuZGluZ0xpbmsgPSBudWxsXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIGdldEhyZWYoKXsgcmV0dXJuIHRoaXMuaHJlZiB9XG5cbiAgaGFzUGVuZGluZ0xpbmsoKXsgcmV0dXJuICEhdGhpcy5wZW5kaW5nTGluayB9XG5cbiAgYmluZChldmVudHMsIGNhbGxiYWNrKXtcbiAgICBmb3IobGV0IGV2ZW50IGluIGV2ZW50cyl7XG4gICAgICBsZXQgYnJvd3NlckV2ZW50TmFtZSA9IGV2ZW50c1tldmVudF1cblxuICAgICAgdGhpcy5vbihicm93c2VyRXZlbnROYW1lLCBlID0+IHtcbiAgICAgICAgbGV0IGJpbmRpbmcgPSB0aGlzLmJpbmRpbmcoZXZlbnQpXG4gICAgICAgIGxldCB3aW5kb3dCaW5kaW5nID0gdGhpcy5iaW5kaW5nKGB3aW5kb3ctJHtldmVudH1gKVxuICAgICAgICBsZXQgdGFyZ2V0UGh4RXZlbnQgPSBlLnRhcmdldC5nZXRBdHRyaWJ1dGUgJiYgZS50YXJnZXQuZ2V0QXR0cmlidXRlKGJpbmRpbmcpXG4gICAgICAgIGlmKHRhcmdldFBoeEV2ZW50KXtcbiAgICAgICAgICB0aGlzLmRlYm91bmNlKGUudGFyZ2V0LCBlLCBicm93c2VyRXZlbnROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLndpdGhpbk93bmVycyhlLnRhcmdldCwgdmlldyA9PiB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGUsIGV2ZW50LCB2aWV3LCBlLnRhcmdldCwgdGFyZ2V0UGh4RXZlbnQsIG51bGwpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgRE9NLmFsbChkb2N1bWVudCwgYFske3dpbmRvd0JpbmRpbmd9XWAsIGVsID0+IHtcbiAgICAgICAgICAgIGxldCBwaHhFdmVudCA9IGVsLmdldEF0dHJpYnV0ZSh3aW5kb3dCaW5kaW5nKVxuICAgICAgICAgICAgdGhpcy5kZWJvdW5jZShlbCwgZSwgYnJvd3NlckV2ZW50TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICB0aGlzLndpdGhpbk93bmVycyhlbCwgdmlldyA9PiB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZSwgZXZlbnQsIHZpZXcsIGVsLCBwaHhFdmVudCwgXCJ3aW5kb3dcIilcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBiaW5kQ2xpY2tzKCl7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZWRvd25cIiwgZSA9PiB0aGlzLmNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gZS50YXJnZXQpXG4gICAgdGhpcy5iaW5kQ2xpY2soXCJjbGlja1wiLCBcImNsaWNrXCIsIGZhbHNlKVxuICAgIHRoaXMuYmluZENsaWNrKFwibW91c2Vkb3duXCIsIFwiY2FwdHVyZS1jbGlja1wiLCB0cnVlKVxuICB9XG5cbiAgYmluZENsaWNrKGV2ZW50TmFtZSwgYmluZGluZ05hbWUsIGNhcHR1cmUpe1xuICAgIGxldCBjbGljayA9IHRoaXMuYmluZGluZyhiaW5kaW5nTmFtZSlcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGUgPT4ge1xuICAgICAgbGV0IHRhcmdldCA9IG51bGxcbiAgICAgIGlmKGNhcHR1cmUpe1xuICAgICAgICB0YXJnZXQgPSBlLnRhcmdldC5tYXRjaGVzKGBbJHtjbGlja31dYCkgPyBlLnRhcmdldCA6IGUudGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoYFske2NsaWNrfV1gKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGNsaWNrU3RhcnRlZEF0VGFyZ2V0ID0gdGhpcy5jbGlja1N0YXJ0ZWRBdFRhcmdldCB8fCBlLnRhcmdldFxuICAgICAgICB0YXJnZXQgPSBjbG9zZXN0UGh4QmluZGluZyhjbGlja1N0YXJ0ZWRBdFRhcmdldCwgY2xpY2spXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hDbGlja0F3YXkoZSwgY2xpY2tTdGFydGVkQXRUYXJnZXQpXG4gICAgICAgIHRoaXMuY2xpY2tTdGFydGVkQXRUYXJnZXQgPSBudWxsXG4gICAgICB9XG4gICAgICBsZXQgcGh4RXZlbnQgPSB0YXJnZXQgJiYgdGFyZ2V0LmdldEF0dHJpYnV0ZShjbGljaylcbiAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICBpZih0YXJnZXQuZ2V0QXR0cmlidXRlKFwiaHJlZlwiKSA9PT0gXCIjXCIpeyBlLnByZXZlbnREZWZhdWx0KCkgfVxuXG4gICAgICB0aGlzLmRlYm91bmNlKHRhcmdldCwgZSwgXCJjbGlja1wiLCAoKSA9PiB7XG4gICAgICAgIHRoaXMud2l0aGluT3duZXJzKHRhcmdldCwgdmlldyA9PiB7XG4gICAgICAgICAgSlMuZXhlYyhcImNsaWNrXCIsIHBoeEV2ZW50LCB2aWV3LCB0YXJnZXQsIFtcInB1c2hcIiwge2RhdGE6IHRoaXMuZXZlbnRNZXRhKFwiY2xpY2tcIiwgZSwgdGFyZ2V0KX1dKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9LCBjYXB0dXJlKVxuICB9XG5cbiAgZGlzcGF0Y2hDbGlja0F3YXkoZSwgY2xpY2tTdGFydGVkQXQpe1xuICAgIGxldCBwaHhDbGlja0F3YXkgPSB0aGlzLmJpbmRpbmcoXCJjbGljay1hd2F5XCIpXG4gICAgRE9NLmFsbChkb2N1bWVudCwgYFske3BoeENsaWNrQXdheX1dYCwgZWwgPT4ge1xuICAgICAgaWYoIShlbC5pc1NhbWVOb2RlKGNsaWNrU3RhcnRlZEF0KSB8fCBlbC5jb250YWlucyhjbGlja1N0YXJ0ZWRBdCkpKXtcbiAgICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICAgIGxldCBwaHhFdmVudCA9IGVsLmdldEF0dHJpYnV0ZShwaHhDbGlja0F3YXkpXG4gICAgICAgICAgaWYoSlMuaXNWaXNpYmxlKGVsKSl7XG4gICAgICAgICAgICBKUy5leGVjKFwiY2xpY2tcIiwgcGh4RXZlbnQsIHZpZXcsIGVsLCBbXCJwdXNoXCIsIHtkYXRhOiB0aGlzLmV2ZW50TWV0YShcImNsaWNrXCIsIGUsIGUudGFyZ2V0KX1dKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgYmluZE5hdigpe1xuICAgIGlmKCFCcm93c2VyLmNhblB1c2hTdGF0ZSgpKXsgcmV0dXJuIH1cbiAgICBpZihoaXN0b3J5LnNjcm9sbFJlc3RvcmF0aW9uKXsgaGlzdG9yeS5zY3JvbGxSZXN0b3JhdGlvbiA9IFwibWFudWFsXCIgfVxuICAgIGxldCBzY3JvbGxUaW1lciA9IG51bGxcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBfZSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQoc2Nyb2xsVGltZXIpXG4gICAgICBzY3JvbGxUaW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBCcm93c2VyLnVwZGF0ZUN1cnJlbnRTdGF0ZShzdGF0ZSA9PiBPYmplY3QuYXNzaWduKHN0YXRlLCB7c2Nyb2xsOiB3aW5kb3cuc2Nyb2xsWX0pKVxuICAgICAgfSwgMTAwKVxuICAgIH0pXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJwb3BzdGF0ZVwiLCBldmVudCA9PiB7XG4gICAgICBpZighdGhpcy5yZWdpc3Rlck5ld0xvY2F0aW9uKHdpbmRvdy5sb2NhdGlvbikpeyByZXR1cm4gfVxuICAgICAgbGV0IHt0eXBlLCBpZCwgcm9vdCwgc2Nyb2xsfSA9IGV2ZW50LnN0YXRlIHx8IHt9XG4gICAgICBsZXQgaHJlZiA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG5cbiAgICAgIHRoaXMucmVxdWVzdERPTVVwZGF0ZSgoKSA9PiB7XG4gICAgICAgIGlmKHRoaXMubWFpbi5pc0Nvbm5lY3RlZCgpICYmICh0eXBlID09PSBcInBhdGNoXCIgJiYgaWQgPT09IHRoaXMubWFpbi5pZCkpe1xuICAgICAgICAgIHRoaXMubWFpbi5wdXNoTGlua1BhdGNoKGhyZWYsIG51bGwpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5yZXBsYWNlTWFpbihocmVmLCBudWxsLCAoKSA9PiB7XG4gICAgICAgICAgICBpZihyb290KXsgdGhpcy5yZXBsYWNlUm9vdEhpc3RvcnkoKSB9XG4gICAgICAgICAgICBpZih0eXBlb2Yoc2Nyb2xsKSA9PT0gXCJudW1iZXJcIil7XG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCBzY3JvbGwpXG4gICAgICAgICAgICAgIH0sIDApIC8vIHRoZSBib2R5IG5lZWRzIHRvIHJlbmRlciBiZWZvcmUgd2Ugc2Nyb2xsLlxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSwgZmFsc2UpXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBlID0+IHtcbiAgICAgIGxldCB0YXJnZXQgPSBjbG9zZXN0UGh4QmluZGluZyhlLnRhcmdldCwgUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB0eXBlID0gdGFyZ2V0ICYmIHRhcmdldC5nZXRBdHRyaWJ1dGUoUEhYX0xJVkVfTElOSylcbiAgICAgIGxldCB3YW50c05ld1RhYiA9IGUubWV0YUtleSB8fCBlLmN0cmxLZXkgfHwgZS5idXR0b24gPT09IDFcbiAgICAgIGlmKCF0eXBlIHx8ICF0aGlzLmlzQ29ubmVjdGVkKCkgfHwgIXRoaXMubWFpbiB8fCB3YW50c05ld1RhYil7IHJldHVybiB9XG5cbiAgICAgIGxldCBocmVmID0gdGFyZ2V0LmhyZWZcbiAgICAgIGxldCBsaW5rU3RhdGUgPSB0YXJnZXQuZ2V0QXR0cmlidXRlKFBIWF9MSU5LX1NUQVRFKVxuICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICBlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIC8vIGRvIG5vdCBidWJibGUgY2xpY2sgdG8gcmVndWxhciBwaHgtY2xpY2sgYmluZGluZ3NcbiAgICAgIGlmKHRoaXMucGVuZGluZ0xpbmsgPT09IGhyZWYpeyByZXR1cm4gfVxuXG4gICAgICB0aGlzLnJlcXVlc3RET01VcGRhdGUoKCkgPT4ge1xuICAgICAgICBpZih0eXBlID09PSBcInBhdGNoXCIpe1xuICAgICAgICAgIHRoaXMucHVzaEhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIHRhcmdldClcbiAgICAgICAgfSBlbHNlIGlmKHR5cGUgPT09IFwicmVkaXJlY3RcIil7XG4gICAgICAgICAgdGhpcy5oaXN0b3J5UmVkaXJlY3QoaHJlZiwgbGlua1N0YXRlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgZXhwZWN0ZWQgJHtQSFhfTElWRV9MSU5LfSB0byBiZSBcInBhdGNoXCIgb3IgXCJyZWRpcmVjdFwiLCBnb3Q6ICR7dHlwZX1gKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sIGZhbHNlKVxuICB9XG5cbiAgZGlzcGF0Y2hFdmVudChldmVudCwgcGF5bG9hZCA9IHt9KXtcbiAgICBET00uZGlzcGF0Y2hFdmVudCh3aW5kb3csIGBwaHg6JHtldmVudH1gLCB7ZGV0YWlsOiBwYXlsb2FkfSlcbiAgfVxuXG4gIGRpc3BhdGNoRXZlbnRzKGV2ZW50cyl7XG4gICAgZXZlbnRzLmZvckVhY2goKFtldmVudCwgcGF5bG9hZF0pID0+IHRoaXMuZGlzcGF0Y2hFdmVudChldmVudCwgcGF5bG9hZCkpXG4gIH1cblxuICB3aXRoUGFnZUxvYWRpbmcoaW5mbywgY2FsbGJhY2spe1xuICAgIERPTS5kaXNwYXRjaEV2ZW50KHdpbmRvdywgXCJwaHg6cGFnZS1sb2FkaW5nLXN0YXJ0XCIsIHtkZXRhaWw6IGluZm99KVxuICAgIGxldCBkb25lID0gKCkgPT4gRE9NLmRpc3BhdGNoRXZlbnQod2luZG93LCBcInBoeDpwYWdlLWxvYWRpbmctc3RvcFwiLCB7ZGV0YWlsOiBpbmZvfSlcbiAgICByZXR1cm4gY2FsbGJhY2sgPyBjYWxsYmFjayhkb25lKSA6IGRvbmVcbiAgfVxuXG4gIHB1c2hIaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCB0YXJnZXRFbCl7XG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInBhdGNoXCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMubWFpbi5wdXNoTGlua1BhdGNoKGhyZWYsIHRhcmdldEVsLCBsaW5rUmVmID0+IHtcbiAgICAgICAgdGhpcy5oaXN0b3J5UGF0Y2goaHJlZiwgbGlua1N0YXRlLCBsaW5rUmVmKVxuICAgICAgICBkb25lKClcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIGhpc3RvcnlQYXRjaChocmVmLCBsaW5rU3RhdGUsIGxpbmtSZWYgPSB0aGlzLnNldFBlbmRpbmdMaW5rKGhyZWYpKXtcbiAgICBpZighdGhpcy5jb21taXRQZW5kaW5nTGluayhsaW5rUmVmKSl7IHJldHVybiB9XG5cbiAgICBCcm93c2VyLnB1c2hTdGF0ZShsaW5rU3RhdGUsIHt0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9LCBocmVmKVxuICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gIH1cblxuICBoaXN0b3J5UmVkaXJlY3QoaHJlZiwgbGlua1N0YXRlLCBmbGFzaCl7XG4gICAgbGV0IHNjcm9sbCA9IHdpbmRvdy5zY3JvbGxZXG4gICAgdGhpcy53aXRoUGFnZUxvYWRpbmcoe3RvOiBocmVmLCBraW5kOiBcInJlZGlyZWN0XCJ9LCBkb25lID0+IHtcbiAgICAgIHRoaXMucmVwbGFjZU1haW4oaHJlZiwgZmxhc2gsICgpID0+IHtcbiAgICAgICAgQnJvd3Nlci5wdXNoU3RhdGUobGlua1N0YXRlLCB7dHlwZTogXCJyZWRpcmVjdFwiLCBpZDogdGhpcy5tYWluLmlkLCBzY3JvbGw6IHNjcm9sbH0sIGhyZWYpXG4gICAgICAgIHRoaXMucmVnaXN0ZXJOZXdMb2NhdGlvbih3aW5kb3cubG9jYXRpb24pXG4gICAgICAgIGRvbmUoKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgcmVwbGFjZVJvb3RIaXN0b3J5KCl7XG4gICAgQnJvd3Nlci5wdXNoU3RhdGUoXCJyZXBsYWNlXCIsIHtyb290OiB0cnVlLCB0eXBlOiBcInBhdGNoXCIsIGlkOiB0aGlzLm1haW4uaWR9KVxuICB9XG5cbiAgcmVnaXN0ZXJOZXdMb2NhdGlvbihuZXdMb2NhdGlvbil7XG4gICAgbGV0IHtwYXRobmFtZSwgc2VhcmNofSA9IHRoaXMuY3VycmVudExvY2F0aW9uXG4gICAgaWYocGF0aG5hbWUgKyBzZWFyY2ggPT09IG5ld0xvY2F0aW9uLnBhdGhuYW1lICsgbmV3TG9jYXRpb24uc2VhcmNoKXtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IGNsb25lKG5ld0xvY2F0aW9uKVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICBiaW5kRm9ybXMoKXtcbiAgICBsZXQgaXRlcmF0aW9ucyA9IDBcbiAgICB0aGlzLm9uKFwic3VibWl0XCIsIGUgPT4ge1xuICAgICAgbGV0IHBoeEV2ZW50ID0gZS50YXJnZXQuZ2V0QXR0cmlidXRlKHRoaXMuYmluZGluZyhcInN1Ym1pdFwiKSlcbiAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICBlLnByZXZlbnREZWZhdWx0KClcbiAgICAgIGUudGFyZ2V0LmRpc2FibGVkID0gdHJ1ZVxuICAgICAgdGhpcy53aXRoaW5Pd25lcnMoZS50YXJnZXQsIHZpZXcgPT4ge1xuICAgICAgICBKUy5leGVjKFwic3VibWl0XCIsIHBoeEV2ZW50LCB2aWV3LCBlLnRhcmdldCwgW1wicHVzaFwiLCB7fV0pXG4gICAgICB9KVxuICAgIH0sIGZhbHNlKVxuXG4gICAgZm9yKGxldCB0eXBlIG9mIFtcImNoYW5nZVwiLCBcImlucHV0XCJdKXtcbiAgICAgIHRoaXMub24odHlwZSwgZSA9PiB7XG4gICAgICAgIGxldCBwaHhDaGFuZ2UgPSB0aGlzLmJpbmRpbmcoXCJjaGFuZ2VcIilcbiAgICAgICAgbGV0IGlucHV0ID0gZS50YXJnZXRcbiAgICAgICAgbGV0IGlucHV0RXZlbnQgPSBpbnB1dC5nZXRBdHRyaWJ1dGUocGh4Q2hhbmdlKVxuICAgICAgICBsZXQgZm9ybUV2ZW50ID0gaW5wdXQuZm9ybSAmJiBpbnB1dC5mb3JtLmdldEF0dHJpYnV0ZShwaHhDaGFuZ2UpXG4gICAgICAgIGxldCBwaHhFdmVudCA9IGlucHV0RXZlbnQgfHwgZm9ybUV2ZW50XG4gICAgICAgIGlmKCFwaHhFdmVudCl7IHJldHVybiB9XG4gICAgICAgIGlmKGlucHV0LnR5cGUgPT09IFwibnVtYmVyXCIgJiYgaW5wdXQudmFsaWRpdHkgJiYgaW5wdXQudmFsaWRpdHkuYmFkSW5wdXQpeyByZXR1cm4gfVxuXG4gICAgICAgIGxldCBkaXNwYXRjaGVyID0gaW5wdXRFdmVudCA/IGlucHV0IDogaW5wdXQuZm9ybVxuICAgICAgICBsZXQgY3VycmVudEl0ZXJhdGlvbnMgPSBpdGVyYXRpb25zXG4gICAgICAgIGl0ZXJhdGlvbnMrK1xuICAgICAgICBsZXQge2F0OiBhdCwgdHlwZTogbGFzdFR5cGV9ID0gRE9NLnByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIikgfHwge31cbiAgICAgICAgLy8gZGV0ZWN0IGR1cCBiZWNhdXNlIHNvbWUgYnJvd3NlcnMgZGlzcGF0Y2ggYm90aCBcImlucHV0XCIgYW5kIFwiY2hhbmdlXCJcbiAgICAgICAgaWYoYXQgPT09IGN1cnJlbnRJdGVyYXRpb25zIC0gMSAmJiB0eXBlICE9PSBsYXN0VHlwZSl7IHJldHVybiB9XG5cbiAgICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXQsIFwicHJldi1pdGVyYXRpb25cIiwge2F0OiBjdXJyZW50SXRlcmF0aW9ucywgdHlwZTogdHlwZX0pXG5cbiAgICAgICAgdGhpcy5kZWJvdW5jZShpbnB1dCwgZSwgdHlwZSwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMud2l0aGluT3duZXJzKGRpc3BhdGNoZXIsIHZpZXcgPT4ge1xuICAgICAgICAgICAgRE9NLnB1dFByaXZhdGUoaW5wdXQsIFBIWF9IQVNfRk9DVVNFRCwgdHJ1ZSlcbiAgICAgICAgICAgIGlmKCFET00uaXNUZXh0dWFsSW5wdXQoaW5wdXQpKXtcbiAgICAgICAgICAgICAgdGhpcy5zZXRBY3RpdmVFbGVtZW50KGlucHV0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgSlMuZXhlYyhcImNoYW5nZVwiLCBwaHhFdmVudCwgdmlldywgaW5wdXQsIFtcInB1c2hcIiwge190YXJnZXQ6IGUudGFyZ2V0Lm5hbWUsIGRpc3BhdGNoZXI6IGRpc3BhdGNoZXJ9XSlcbiAgICAgICAgICB9KVxuICAgICAgICB9KVxuICAgICAgfSwgZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2UoZWwsIGV2ZW50LCBldmVudFR5cGUsIGNhbGxiYWNrKXtcbiAgICBpZihldmVudFR5cGUgPT09IFwiYmx1clwiIHx8IGV2ZW50VHlwZSA9PT0gXCJmb2N1c291dFwiKXsgcmV0dXJuIGNhbGxiYWNrKCkgfVxuXG4gICAgbGV0IHBoeERlYm91bmNlID0gdGhpcy5iaW5kaW5nKFBIWF9ERUJPVU5DRSlcbiAgICBsZXQgcGh4VGhyb3R0bGUgPSB0aGlzLmJpbmRpbmcoUEhYX1RIUk9UVExFKVxuICAgIGxldCBkZWZhdWx0RGVib3VuY2UgPSB0aGlzLmRlZmF1bHRzLmRlYm91bmNlLnRvU3RyaW5nKClcbiAgICBsZXQgZGVmYXVsdFRocm90dGxlID0gdGhpcy5kZWZhdWx0cy50aHJvdHRsZS50b1N0cmluZygpXG5cbiAgICB0aGlzLndpdGhpbk93bmVycyhlbCwgdmlldyA9PiB7XG4gICAgICBsZXQgYXN5bmNGaWx0ZXIgPSAoKSA9PiAhdmlldy5pc0Rlc3Ryb3llZCgpICYmIGRvY3VtZW50LmJvZHkuY29udGFpbnMoZWwpXG4gICAgICBET00uZGVib3VuY2UoZWwsIGV2ZW50LCBwaHhEZWJvdW5jZSwgZGVmYXVsdERlYm91bmNlLCBwaHhUaHJvdHRsZSwgZGVmYXVsdFRocm90dGxlLCBhc3luY0ZpbHRlciwgKCkgPT4ge1xuICAgICAgICBjYWxsYmFjaygpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICBzaWxlbmNlRXZlbnRzKGNhbGxiYWNrKXtcbiAgICB0aGlzLnNpbGVuY2VkID0gdHJ1ZVxuICAgIGNhbGxiYWNrKClcbiAgICB0aGlzLnNpbGVuY2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uKGV2ZW50LCBjYWxsYmFjayl7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsIGUgPT4ge1xuICAgICAgaWYoIXRoaXMuc2lsZW5jZWQpeyBjYWxsYmFjayhlKSB9XG4gICAgfSlcbiAgfVxufVxuXG5jbGFzcyBUcmFuc2l0aW9uU2V0IHtcbiAgY29uc3RydWN0b3IoKXtcbiAgICB0aGlzLnRyYW5zaXRpb25zID0gbmV3IFNldCgpXG4gICAgdGhpcy5wZW5kaW5nT3BzID0gW11cbiAgICB0aGlzLnJlc2V0KClcbiAgfVxuXG4gIHJlc2V0KCl7XG4gICAgdGhpcy50cmFuc2l0aW9ucy5mb3JFYWNoKHRpbWVyID0+IHtcbiAgICAgIGNhbmNlbFRpbWVvdXQodGltZXIpXG4gICAgICB0aGlzLnRyYW5zaXRpb25zLmRlbGV0ZSh0aW1lcilcbiAgICB9KVxuICAgIHRoaXMuZmx1c2hQZW5kaW5nT3BzKClcbiAgfVxuXG4gIGFmdGVyKGNhbGxiYWNrKXtcbiAgICBpZih0aGlzLnNpemUoKSA9PT0gMCl7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHVzaFBlbmRpbmdPcChjYWxsYmFjaylcbiAgICB9XG4gIH1cblxuICBhZGRUcmFuc2l0aW9uKHRpbWUsIG9uU3RhcnQsIG9uRG9uZSl7XG4gICAgb25TdGFydCgpXG4gICAgbGV0IHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnRyYW5zaXRpb25zLmRlbGV0ZSh0aW1lcilcbiAgICAgIG9uRG9uZSgpXG4gICAgICBpZih0aGlzLnNpemUoKSA9PT0gMCl7IHRoaXMuZmx1c2hQZW5kaW5nT3BzKCkgfVxuICAgIH0sIHRpbWUpXG4gICAgdGhpcy50cmFuc2l0aW9ucy5hZGQodGltZXIpXG4gIH1cblxuICBwdXNoUGVuZGluZ09wKG9wKXsgdGhpcy5wZW5kaW5nT3BzLnB1c2gob3ApIH1cblxuICBzaXplKCl7IHJldHVybiB0aGlzLnRyYW5zaXRpb25zLnNpemUgfVxuXG4gIGZsdXNoUGVuZGluZ09wcygpe1xuICAgIHRoaXMucGVuZGluZ09wcy5mb3JFYWNoKG9wID0+IG9wKCkpXG4gICAgdGhpcy5wZW5kaW5nT3BzID0gW11cbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7QUFVQSxPQUFFLFNBQVVBLFNBQVEsU0FBVTtBQUU3QjtBQUVBLFlBQUssT0FBTyxXQUFXLFlBQVksT0FBTyxPQUFPLFlBQVksVUFBVztBQVN2RSxpQkFBTyxVQUFVQSxRQUFPLFdBQ3ZCLFFBQVNBLFNBQVEsSUFBSyxJQUN0QixTQUFVLEdBQUk7QUFDYixnQkFBSyxDQUFDLEVBQUUsVUFBVztBQUNsQixvQkFBTSxJQUFJLE1BQU8sMENBQTJDO0FBQUEsWUFDN0Q7QUFDQSxtQkFBTyxRQUFTLENBQUU7QUFBQSxVQUNuQjtBQUFBLFFBQ0YsT0FBTztBQUNOLGtCQUFTQSxPQUFPO0FBQUEsUUFDakI7QUFBQSxNQUdELEdBQUssT0FBTyxXQUFXLGNBQWMsU0FBUyxTQUFNLFNB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WUFBYTtBQUFBLFlBQW9CO0FBQUEsWUFBbUI7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFZO0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFhO0FBQUEsWUFBWTtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBTztBQUFBLFlBQVk7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQXFCO0FBQUEsWUFBYztBQUFBLFlBQWU7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWlCO0FBQUEsWUFBcUI7QUFBQSxZQUFpQztBQUFBLFlBQWtDO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWM7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBZ0I7QUFBQSxZQUFnQjtBQUFBLFlBQVM7QUFBQSxZQUFRO0FBQUEsWUFBVTtBQUFBLFlBQWE7QUFBQSxZQUFXO0FBQUEsWUFBUztBQUFBLFlBQVk7QUFBQSxZQUFlO0FBQUEsWUFBWTtBQUFBLFlBQVM7QUFBQSxZQUFhO0FBQUEsWUFBYztBQUFBLFlBQWM7QUFBQSxZQUFzQjtBQUFBLFlBQVU7QUFBQSxZQUFVO0FBQUEsWUFBWTtBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWM7QUFBQSxZQUFRO0FBQUEsWUFBVztBQUFBLFlBQVM7QUFBQSxZQUFVO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFjO0FBQUEsWUFBWTtBQUFBLFlBQWE7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFjO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFhO0FBQUEsWUFBUTtBQUFBLFlBQWE7QUFBQSxZQUFVO0FBQUEsWUFBYTtBQUFBLFlBQWtCO0FBQUEsWUFBVztBQUFBLFlBQWdCO0FBQUEsWUFBVztBQUFBLFlBQWlCO0FBQUEsWUFBZ0I7QUFBQSxZQUFhO0FBQUEsWUFBb0I7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYztBQUFBLFlBQXFCO0FBQUEsWUFBYTtBQUFBLFlBQVc7QUFBQSxZQUFXO0FBQUEsWUFBYTtBQUFBLFlBQVk7QUFBQSxZQUFZO0FBQUEsWUFBYztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBa0I7QUFBQSxZQUFTO0FBQUEsWUFBVztBQUFBLFlBQWE7QUFBQSxZQUFpQjtBQUFBLFlBQWU7QUFBQSxZQUFxQjtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBUTtBQUFBLFlBQVU7QUFBQSxZQUFRO0FBQUEsWUFBdUI7QUFBQSxZQUFjO0FBQUEsWUFBYztBQUFBLFlBQW9CO0FBQUEsWUFBVztBQUFBLFlBQWU7QUFBQSxZQUFVO0FBQUEsWUFBYztBQUFBLFlBQVk7QUFBQSxZQUFtQjtBQUFBLFlBQVE7QUFBQSxZQUFRO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFlBQVU7QUFBQSxZQUFnQjtBQUFBLFlBQWdCO0FBQUEsWUFBWTtBQUFBLFlBQVk7QUFBQSxZQUFPO0FBQUEsWUFBYztBQUFBLFlBQWE7QUFBQSxZQUFZO0FBQUEsWUFBUztBQUFBLFlBQXFCO0FBQUEsWUFBZ0I7QUFBQSxZQUFRO0FBQUEsWUFBZTtBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQVE7QUFBQSxZQUFlO0FBQUEsWUFBVTtBQUFBLFlBQVE7QUFBQSxZQUFpQjtBQUFBLFlBQWE7QUFBQSxVQUN6aUU7QUFBQSxVQUNBLGdCQUFnQjtBQUFBLFlBQ2Y7QUFBQSxZQUFXO0FBQUEsWUFBbUI7QUFBQSxZQUFPO0FBQUEsWUFBZTtBQUFBLFlBQWtCO0FBQUEsWUFBYztBQUFBLFlBQVc7QUFBQSxZQUFnQjtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBZTtBQUFBLFlBQU87QUFBQSxZQUFLO0FBQUEsWUFBSztBQUFBLFlBQWU7QUFBQSxZQUFLO0FBQUEsWUFBTztBQUFBLFlBQUs7QUFBQSxZQUFNO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUF5QjtBQUFBLFlBQVE7QUFBQSxZQUFLO0FBQUEsWUFBUTtBQUFBLFlBQUs7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQWU7QUFBQSxZQUFNO0FBQUEsWUFBUztBQUFBLFlBQWM7QUFBQSxZQUFVO0FBQUEsWUFBUztBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUztBQUFBLFlBQVM7QUFBQSxZQUFXO0FBQUEsWUFBVTtBQUFBLFlBQVc7QUFBQSxZQUFZO0FBQUEsWUFBTTtBQUFBLFlBQWtCO0FBQUEsWUFBTTtBQUFBLFlBQU87QUFBQSxZQUFXO0FBQUEsWUFBYztBQUFBLFlBQU07QUFBQSxZQUFNO0FBQUEsWUFBTztBQUFBLFlBQVM7QUFBQSxZQUFZO0FBQUEsWUFBVTtBQUFBLFlBQU07QUFBQSxZQUFXO0FBQUEsWUFBVztBQUFBLFlBQU87QUFBQSxZQUFVO0FBQUEsWUFBTTtBQUFBLFlBQVU7QUFBQSxZQUFTO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFjO0FBQUEsWUFBVztBQUFBLFlBQVk7QUFBQSxZQUFRO0FBQUEsWUFBYTtBQUFBLFlBQWU7QUFBQSxZQUFTO0FBQUEsWUFBTztBQUFBLFlBQWtCO0FBQUEsWUFBYTtBQUFBLFlBQTBCO0FBQUEsWUFBYztBQUFBLFlBQVM7QUFBQSxZQUFjO0FBQUEsWUFBUztBQUFBLFlBQVc7QUFBQSxZQUFPO0FBQUEsWUFBVTtBQUFBLFlBQXlCO0FBQUEsWUFBTztBQUFBLFlBQVE7QUFBQSxZQUFNO0FBQUEsWUFBUTtBQUFBLFlBQVk7QUFBQSxZQUFTO0FBQUEsWUFBYTtBQUFBLFVBQzc3QjtBQUFBO0FBQUEsUUFFRDtBQUVBLGVBQU8sS0FBSyxRQUFRLEVBQUUsUUFBUSxTQUFVLEdBQUc7QUFDMUMsaUJBQU8sQ0FBQyxFQUFFLFVBQVUsaUJBQWlCLFNBQVMsQ0FBQyxDQUFDO0FBQUEsUUFDakQsQ0FBQztBQUVELFlBQUksY0FBYztBQUFBO0FBQUEsVUFFakI7QUFBQSxVQUFPO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVM7QUFBQSxVQUFXO0FBQUEsVUFBTztBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFXO0FBQUEsVUFBVTtBQUFBLFVBQVE7QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVM7QUFBQSxVQUFPO0FBQUEsVUFBVTtBQUFBLFVBQU07QUFBQSxVQUFXO0FBQUEsVUFBYTtBQUFBLFVBQU87QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBUztBQUFBLFVBQVE7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQU07QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQVk7QUFBQSxVQUFTO0FBQUEsVUFBVztBQUFBLFVBQVE7QUFBQSxVQUFNO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFTO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBWTtBQUFBO0FBQUEsVUFFemY7QUFBQSxVQUFrQjtBQUFBLFVBQW1CO0FBQUEsVUFBVTtBQUFBLFVBQWE7QUFBQSxVQUFTO0FBQUEsVUFBYTtBQUFBLFVBQWE7QUFBQSxVQUFZO0FBQUEsVUFBZTtBQUFBLFVBQVc7QUFBQSxVQUFhO0FBQUEsVUFBaUI7QUFBQSxVQUFvQjtBQUFBLFVBQVU7QUFBQSxVQUFPO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUFjO0FBQUEsVUFBVTtBQUFBLFVBQWU7QUFBQSxVQUFRO0FBQUEsVUFBZ0I7QUFBQSxVQUFhO0FBQUEsVUFBVztBQUFBLFVBQWdCO0FBQUEsVUFBZ0I7QUFBQSxVQUFjO0FBQUEsVUFBbUI7QUFBQSxVQUFTO0FBQUEsVUFBYztBQUFBLFVBQVU7QUFBQSxVQUFnQjtBQUFBLFVBQWE7QUFBQSxVQUFnQjtBQUFBLFVBQVk7QUFBQSxVQUFVO0FBQUEsVUFBWTtBQUFBLFVBQWM7QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQWlCO0FBQUEsVUFBZ0I7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQVc7QUFBQSxVQUFhO0FBQUEsVUFBaUI7QUFBQSxVQUFrQjtBQUFBLFVBQW1CO0FBQUEsVUFBaUI7QUFBQSxVQUFXO0FBQUEsVUFBUTtBQUFBLFVBQWE7QUFBQSxVQUFlO0FBQUEsVUFBVztBQUFBLFVBQWU7QUFBQSxVQUFjO0FBQUEsVUFBUTtBQUFBLFVBQWM7QUFBQSxVQUFrQjtBQUFBLFVBQWM7QUFBQSxVQUFRO0FBQUEsVUFBZ0I7QUFBQSxVQUFlO0FBQUEsVUFBWTtBQUFBLFVBQWlCO0FBQUEsVUFBYTtBQUFBLFVBQVc7QUFBQSxVQUFTO0FBQUEsVUFBYztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBYztBQUFBLFVBQVc7QUFBQSxVQUFjO0FBQUEsVUFBYztBQUFBLFVBQVM7QUFBQSxVQUFRO0FBQUEsVUFBYTtBQUFBLFVBQWtCO0FBQUE7QUFBQSxVQUV0aEM7QUFBQSxVQUFXO0FBQUEsVUFBZ0I7QUFBQSxVQUFlO0FBQUEsVUFBa0I7QUFBQSxVQUFhO0FBQUEsVUFBcUI7QUFBQSxVQUFtQjtBQUFBLFVBQVM7QUFBQSxVQUFrQjtBQUFBLFVBQWdCO0FBQUE7QUFBQSxVQUU1SjtBQUFBLFVBQW1CO0FBQUEsVUFBZTtBQUFBLFVBQWlCO0FBQUEsVUFBaUI7QUFBQSxVQUFtQjtBQUFBO0FBQUEsVUFFdkY7QUFBQSxVQUFRO0FBQUEsVUFBVztBQUFBLFVBQWE7QUFBQSxVQUFhO0FBQUEsVUFBVztBQUFBLFVBQWdCO0FBQUEsVUFBa0I7QUFBQSxVQUFjO0FBQUEsVUFBUTtBQUFBLFVBQVU7QUFBQSxVQUFlO0FBQUEsVUFBc0I7QUFBQSxVQUFVO0FBQUE7QUFBQSxVQUV6SztBQUFBLFVBQU87QUFBQSxVQUFPO0FBQUEsVUFBTztBQUFBLFVBQU87QUFB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QTtBQUFBO0FBQUEsWUFFQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFFBQ0Q7QUFBQSxRQUNBLFdBQVc7QUFBQSxVQUNWO0FBQUEsWUFDQyxTQUFTO0FBQUEsWUFDVCxZQUFZO0FBQUEsVUFDYjtBQUFBLFVBQ0E7QUFBQSxZQUNDLFNBQVM7QUFBQSxZQUNULFlBQVk7QUFBQSxVQUNiO0FBQUEsVUFDQTtBQUFBLFlBQ0MsU0FBUztBQUFBLFlBQ1QsWUFBWTtBQUFBLFVBQ2I7QUFBQSxRQUNEO0FBQUEsUUFDQSxZQUFZO0FBQUEsVUFDWCxTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBRUEsU0FBUztBQUFBLFVBQ1IsU0FBUztBQUFBLFVBQ1QsT0FBTztBQUFBLFFBQ1I7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNYLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxXQUFXO0FBQUEsVUFDVixTQUFTO0FBQUEsVUFDVCxZQUFZO0FBQUEsUUFDYjtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsWUFBWTtBQUFBLFFBQ2I7QUFBQSxRQUVBLFNBQVM7QUFBQSxVQUNSLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLE9BQU87QUFBQSxRQUNSO0FBQUEsUUFFQSxZQUFZO0FBQUEsUUFDWixlQUFlO0FBQUEsTUFDaEI7QUFFQSxZQUFNLFVBQVUsWUFBWTtBQUFBLFFBQzNCLFdBQVc7QUFBQSxVQUNWLFNBQVM7QUFBQSxVQUNULFFBQVE7QUFBQSxRQUNUO0FBQUEsUUFDQSxRQUFRO0FBQUEsVUFDUCxTQUFTO0FBQUEsVUFDVCxRQUFRO0FBQUEsUUFDVDtBQUFBLFFBQ0EsVUFBVTtBQUFBLFVBQ1QsU0FBUztBQUFBLFVBQ1QsUUFBUTtBQUFBLFFBQ1Q7QUFBQSxRQUNBLFVBQVU7QUFBQSxRQUNWLG1CQUFtQjtBQUFBLFVBQ2xCLFNBQVM7QUFBQSxVQUNULFlBQVk7QUFBQSxVQUNaLFFBQVE7QUFB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TTtBQUMzQixhQUFLLFlBQVksT0FBTyxLQUFBO0FBQ3hCLGVBQUE7QUFDQSxZQUFHLEtBQUssS0FBQSxNQUFXLEdBQUU7QUFBRSxlQUFLLGdCQUFBO1FBQUE7TUFBQSxHQUMzQixJQUFBO0FBQ0gsV0FBSyxZQUFZLElBQUksS0FBQTtJQUFBO0lBR3ZCLGNBQWMsSUFBRztBQUFFLFdBQUssV0FBVyxLQUFLLEVBQUE7SUFBQTtJQUV4QyxPQUFNO0FBQUUsYUFBTyxLQUFLLFlBQVk7SUFBQTtJQUVoQyxrQkFBaUI7QUFDZixXQUFLLFdBQVcsUUFBUSxDQUFBLE9BQU0sR0FBQSxDQUFBO0FBQzlCLFdBQUssYUFBYSxDQUFBO0lBQUE7RUFBQTs7O0FoSHgwQnRCLHNCQUFtQjtBQWxCbkIsU0FBTyxJQUFJLGVBQUFJO0FBQ1gsU0FBTyxTQUFTLGVBQUFBO0FBbUJoQixNQUFJLFlBQVksU0FBUyxjQUFjLHlCQUF5QixFQUFFLGFBQWEsU0FBUztBQUN4RixNQUFJLGFBQWEsSUFBSSxXQUFXLFNBQVMsUUFBUSxFQUFDLFFBQVEsRUFBQyxhQUFhLFVBQVMsRUFBQyxDQUFDO0FBR25GLGdCQUFBQyxRQUFPLE9BQU8sRUFBQyxXQUFXLEVBQUMsR0FBRyxPQUFNLEdBQUcsYUFBYSxvQkFBbUIsQ0FBQztBQUN4RSxTQUFPLGlCQUFpQiwwQkFBMEIsVUFBUSxjQUFBQSxRQUFPLEtBQUssQ0FBQztBQUN2RSxTQUFPLGlCQUFpQix5QkFBeUIsVUFBUSxjQUFBQSxRQUFPLEtBQUssQ0FBQztBQUd0RSxhQUFXLFFBQVE7QUFNbkIsU0FBTyxhQUFhOyIsCiAgIm5hbWVzIjogWyJnbG9iYWwiLCAid2luZG93IiwgImlzRnVuY3Rpb24iLCAiaXNXaW5kb3ciLCAiZG9jdW1lbnQiLCAiZG9jIiwgInRvVHlwZSIsICJjbG9uZSIsICJhcnIiLCAicHVzaCIsICJkb2N1bWVudEVsZW1lbnQiLCAicnF1aWNrRXhwciIsICJpIiwgImZuIiwgIm1hdGNoZXMiLCAibm9kZSIsICJzdGFydCIsICJkaXIiLCAiaGFzaCIsICJmaW5kIiwgImVsZW0iLCAic2VsZiIsICJ2YWx1ZSIsICJkZWZlcnJlZCIsICJEYXRhIiwgImRhdGEiLCAibm9kZU5hbWUiLCAibmFtZSIsICJlbmQiLCAiaW5kZXgiLCAibGVuZ3RoIiwgIm1heCIsICJsb2NhdGlvbiIsICJ2YWwiLCAiY29tcGxldGVkIiwgIm9mZnNldCIsICJ0b3AiLCAibWV0aG9kIiwgInR5cGUiLCAiX3NlbGYiLCAiY2xvbmUiLCAibGFuZyIsICJQcmlzbSIsICJvZmZzZXQiLCAiaSIsICJjb250ZW50VHlwZSIsICJyZWZlcmVuY2UiLCAia2V5IiwgImFycm93IiwgInJvdW5kIiwgInJhbmdlIiwgInN0YXJ0IiwgImVuZCIsICJ3aW5kb3ciLCAiZG9jdW1lbnQiLCAidG9wYmFyIiwgImltcG9ydF9qcXVlcnkiLCAiY3JlYXRlUG9wcGVyIiwgIm5hbWUiLCAic3R5bGUiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgIndpbmRvdyIsICJtaW4iLCAibWF4IiwgInRvUGFkZGluZ09iamVjdCIsICJwb3BwZXJPZmZzZXRzIiwgIm1pbiIsICJtYXgiLCAib2Zmc2V0IiwgImVmZmVjdCIsICJwb3BwZXIiLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJlZmZlY3QiLCAid2luZG93IiwgImhhc2giLCAiZ2V0Q29tcHV0ZWRTdHlsZSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImNsaXBwaW5nUGFyZW50cyIsICJnZXRDb21wdXRlZFN0eWxlIiwgInJlZmVyZW5jZSIsICJwb3BwZXJPZmZzZXRzIiwgIm9mZnNldCIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJwbGFjZW1lbnRzIiwgInBsYWNlbWVudCIsICJfbG9vcCIsICJfaSIsICJjaGVja3MiLCAib2Zmc2V0IiwgInBvcHBlck9mZnNldHMiLCAib2Zmc2V0IiwgIm1pbiIsICJtYXgiLCAiZm4iLCAibWVyZ2VkIiwgImRlZmF1bHRNb2RpZmllcnMiLCAiY3JlYXRlUG9wcGVyIiwgInJlZmVyZW5jZSIsICJwb3BwZXIiLCAib3B0aW9ucyIsICJmbiIsICJzdGF0ZSIsICJlZmZlY3QiLCAibm9vcEZuIiwgImNyZWF0ZVBvcHBlciIsICJkZWZhdWx0TW9kaWZpZXJzIiwgImNyZWF0ZVBvcHBlciIsICJlbGVtZW50TWFwIiwgIk1hcCIsICJzZXQiLCAiZWxlbWVudCIsICJrZXkiLCAiaW5zdGFuY2UiLCAiaGFzIiwgImluc3RhbmNlTWFwIiwgImdldCIsICJzaXplIiwgImNvbnNvbGUiLCAiZXJyb3IiLCAiQXJyYXkiLCAiZnJvbSIsICJrZXlzIiwgInJlbW92ZSIsICJkZWxldGUiLCAiTUFYX1VJRCIsICJNSUxMSVNFQ09ORFNfTVVMVElQTElFUiIsICJUUkFOU0lUSU9OX0VORCIsICJwYXJzZVNlbGVjdG9yIiwgInNlbGVjdG9yIiwgIndpbmRvdyIsICJDU1MiLCAiZXNjYXBlIiwgInJlcGxhY2UiLCAibWF0Y2giLCAiaWQiLCAidG9UeXBlIiwgIm9iamVjdCIsICJ1bmRlZmluZWQiLCAiT2JqZWN0IiwgInByb3RvdHlwZSIsICJ0b1N0cmluZyIsICJjYWxsIiwgInRvTG93ZXJDYXNlIiwgImdldFVJRCIsICJwcmVmaXgiLCAiTWF0aCIsICJmbG9vciIsICJyYW5kb20iLCAiZG9jdW1lbnQiLCAiZ2V0RWxlbWVudEJ5SWQiLCAiZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQiLCAidHJhbnNpdGlvbkR1cmF0aW9uIiwgInRyYW5zaXRpb25EZWxheSIsICJnZXRDb21wdXRlZFN0eWxlIiwgImZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uIiwgIk51bWJlciIsICJwYXJzZUZsb2F0IiwgImZsb2F0VHJhbnNpdGlvbkRlbGF5IiwgInNwbGl0IiwgInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwgImRpc3BhdGNoRXZlbnQiLCAiRXZlbnQiLCAiaXNFbGVtZW50IiwgImpxdWVyeSIsICJub2RlVHlwZSIsICJnZXRFbGVtZW50IiwgImxlbmd0aCIsICJxdWVyeVNlbGVjdG9yIiwgImlzVmlzaWJsZSIsICJnZXRDbGllbnRSZWN0cyIsICJlbGVtZW50SXNWaXNpYmxlIiwgImdldFByb3BlcnR5VmFsdWUiLCAiY2xvc2VkRGV0YWlscyIsICJjbG9zZXN0IiwgInN1bW1hcnkiLCAicGFyZW50Tm9kZSIsICJpc0Rpc2FibGVkIiwgIk5vZGUiLCAiRUxFTUVOVF9OT0RFIiwgImNsYXNzTGlzdCIsICJjb250YWlucyIsICJkaXNhYmxlZCIsICJoYXNBdHRyaWJ1dGUiLCAiZ2V0QXR0cmlidXRlIiwgImZpbmRTaGFkb3dSb290IiwgImRvY3VtZW50RWxlbWVudCIsICJhdHRhY2hTaGFkb3ciLCAiZ2V0Um9vdE5vZGUiLCAicm9vdCIsICJTaGFkb3dSb290IiwgIm5vb3AiLCAicmVmbG93IiwgIm9mZnNldEhlaWdodCIsICJnZXRqUXVlcnkiLCAialF1ZXJ5IiwgImJvZHkiLCAiRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyIsICJvbkRPTUNvbnRlbnRMb2FkZWQiLCAiY2FsbGJhY2siLCAicmVhZHlTdGF0ZSIsICJhZGRFdmVudExpc3RlbmVyIiwgInB1c2giLCAiaXNSVEwiLCAiZGlyIiwgImRlZmluZUpRdWVyeVBsdWdpbiIsICJwbHVnaW4iLCAiJCIsICJuYW1lIiwgIk5BTUUiLCAiSlFVRVJZX05PX0NPTkZMSUNUIiwgImZuIiwgImpRdWVyeUludGVyZmFjZSIsICJDb25zdHJ1Y3RvciIsICJub0NvbmZsaWN0IiwgImV4ZWN1dGUiLCAicG9zc2libGVDYWxsYmFjayIsICJhcmdzIiwgImRlZmF1bHRWYWx1ZSIsICJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwgInRyYW5zaXRpb25FbGVtZW50IiwgIndhaXRGb3JUcmFuc2l0aW9uIiwgImR1cmF0aW9uUGFkZGluZyIsICJlbXVsYXRlZER1cmF0aW9uIiwgImNhbGxlZCIsICJoYW5kbGVyIiwgInRhcmdldCIsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgInNldFRpbWVvdXQiLCAiZ2V0TmV4dEFjdGl2ZUVsZW1lbnQiLCAibGlzdCIsICJhY3RpdmVFbGVtZW50IiwgInNob3VsZEdldE5leHQiLCAiaXNDeWNsZUFsbG93ZWQiLCAibGlzdExlbmd0aCIsICJpbmRleCIsICJpbmRleE9mIiwgIm1heCIsICJtaW4iLCAibmFtZXNwYWNlUmVnZXgiLCAic3RyaXBOYW1lUmVnZXgiLCAic3RyaXBVaWRSZWdleCIsICJldmVudFJlZ2lzdHJ5IiwgInVpZEV2ZW50IiwgImN1c3RvbUV2ZW50cyIsICJtb3VzZWVudGVyIiwgIm1vdXNlbGVhdmUiLCAibmF0aXZlRXZlbnRzIiwgIlNldCIsICJtYWtlRXZlbnRVaWQiLCAidWlkIiwgImdldEVsZW1lbnRFdmVudHMiLCAiYm9vdHN0cmFwSGFuZGxlciIsICJldmVudCIsICJoeWRyYXRlT2JqIiwgImRlbGVnYXRlVGFyZ2V0IiwgIm9uZU9mZiIsICJFdmVudEhhbmRsZXIiLCAib2ZmIiwgInR5cGUiLCAiYXBwbHkiLCAiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCAiZG9tRWxlbWVudHMiLCAicXVlcnlTZWxlY3RvckFsbCIsICJkb21FbGVtZW50IiwgImZpbmRIYW5kbGVyIiwgImV2ZW50cyIsICJjYWxsYWJsZSIsICJkZWxlZ2F0aW9uU2VsZWN0b3IiLCAidmFsdWVzIiwgImZpbmQiLCAibm9ybWFsaXplUGFyYW1ldGVycyIsICJvcmlnaW5hbFR5cGVFdmVudCIsICJkZWxlZ2F0aW9uRnVuY3Rpb24iLCAiaXNEZWxlZ2F0ZWQiLCAidHlwZUV2ZW50IiwgImdldFR5cGVFdmVudCIsICJhZGRIYW5kbGVyIiwgIndyYXBGdW5jdGlvbiIsICJyZWxhdGVkVGFyZ2V0IiwgImhhbmRsZXJzIiwgInByZXZpb3VzRnVuY3Rpb24iLCAicmVtb3ZlSGFuZGxlciIsICJCb29sZWFuIiwgInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsICJuYW1lc3BhY2UiLCAic3RvcmVFbGVtZW50RXZlbnQiLCAiaGFuZGxlcktleSIsICJlbnRyaWVzIiwgImluY2x1ZGVzIiwgIm9uIiwgIm9uZSIsICJpbk5hbWVzcGFjZSIsICJpc05hbWVzcGFjZSIsICJzdGFydHNXaXRoIiwgImVsZW1lbnRFdmVudCIsICJzbGljZSIsICJrZXlIYW5kbGVycyIsICJ0cmlnZ2VyIiwgImpRdWVyeUV2ZW50IiwgImJ1YmJsZXMiLCAibmF0aXZlRGlzcGF0Y2giLCAiZGVmYXVsdFByZXZlbnRlZCIsICJpc1Byb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCIsICJpc0RlZmF1bHRQcmV2ZW50ZWQiLCAiZXZ0IiwgImNhbmNlbGFibGUiLCAicHJldmVudERlZmF1bHQiLCAib2JqIiwgIm1ldGEiLCAidmFsdWUiLCAiX3VudXNlZCIsICJkZWZpbmVQcm9wZXJ0eSIsICJjb25maWd1cmFibGUiLCAibm9ybWFsaXplRGF0YSIsICJKU09OIiwgInBhcnNlIiwgImRlY29kZVVSSUNvbXBvbmVudCIsICJub3JtYWxpemVEYXRhS2V5IiwgImNociIsICJNYW5pcHVsYXRvciIsICJzZXREYXRhQXR0cmlidXRlIiwgInNldEF0dHJpYnV0ZSIsICJyZW1vdmVEYXRhQXR0cmlidXRlIiwgInJlbW92ZUF0dHJpYnV0ZSIsICJnZXREYXRhQXR0cmlidXRlcyIsICJhdHRyaWJ1dGVzIiwgImJzS2V5cyIsICJkYXRhc2V0IiwgImZpbHRlciIsICJwdXJlS2V5IiwgImNoYXJBdCIsICJnZXREYXRhQXR0cmlidXRlIiwgIkNvbmZpZyIsICJEZWZhdWx0IiwgIkRlZmF1bHRUeXBlIiwgIkVycm9yIiwgIl9nZXRDb25maWciLCAiY29uZmlnIiwgIl9tZXJnZUNvbmZpZ09iaiIsICJfY29uZmlnQWZ0ZXJNZXJnZSIsICJfdHlwZUNoZWNrQ29uZmlnIiwgImpzb25Db25maWciLCAiY29uc3RydWN0b3IiLCAiY29uZmlnVHlwZXMiLCAicHJvcGVydHkiLCAiZXhwZWN0ZWRUeXBlcyIsICJ2YWx1ZVR5cGUiLCAiUmVnRXhwIiwgInRlc3QiLCAiVHlwZUVycm9yIiwgInRvVXBwZXJDYXNlIiwgIlZFUlNJT04iLCAiQmFzZUNvbXBvbmVudCIsICJfZWxlbWVudCIsICJfY29uZmlnIiwgIkRhdGEiLCAiREFUQV9LRVkiLCAiZGlzcG9zZSIsICJFVkVOVF9LRVkiLCAicHJvcGVydHlOYW1lIiwgImdldE93blByb3BlcnR5TmFtZXMiLCAiX3F1ZXVlQ2FsbGJhY2siLCAiaXNBbmltYXRlZCIsICJnZXRJbnN0YW5jZSIsICJnZXRPckNyZWF0ZUluc3RhbmNlIiwgImV2ZW50TmFtZSIsICJnZXRTZWxlY3RvciIsICJocmVmQXR0cmlidXRlIiwgInRyaW0iLCAibWFwIiwgInNlbCIsICJqb2luIiwgIlNlbGVjdG9yRW5naW5lIiwgImNvbmNhdCIsICJFbGVtZW50IiwgImZpbmRPbmUiLCAiY2hpbGRyZW4iLCAiY2hpbGQiLCAibWF0Y2hlcyIsICJwYXJlbnRzIiwgImFuY2VzdG9yIiwgInByZXYiLCAicHJldmlvdXMiLCAicHJldmlvdXNFbGVtZW50U2libGluZyIsICJuZXh0IiwgIm5leHRFbGVtZW50U2libGluZyIsICJmb2N1c2FibGVDaGlsZHJlbiIsICJmb2N1c2FibGVzIiwgImVsIiwgImdldFNlbGVjdG9yRnJvbUVsZW1lbnQiLCAiZ2V0RWxlbWVudEZyb21TZWxlY3RvciIsICJnZXRNdWx0aXBsZUVsZW1lbnRzRnJvbVNlbGVjdG9yIiwgImVuYWJsZURpc21pc3NUcmlnZ2VyIiwgImNvbXBvbmVudCIsICJtZXRob2QiLCAiY2xpY2tFdmVudCIsICJ0YWdOYW1lIiwgIkVWRU5UX0NMT1NFIiwgIkVWRU5UX0NMT1NFRCIsICJDTEFTU19OQU1FX0ZBREUiLCAiQ0xBU1NfTkFNRV9TSE9XIiwgIkFsZXJ0IiwgImNsb3NlIiwgImNsb3NlRXZlbnQiLCAiX2Rlc3Ryb3lFbGVtZW50IiwgImVhY2giLCAiZGF0YSIsICJEQVRBX0FQSV9LRVkiLCAiQ0xBU1NfTkFNRV9BQ1RJVkUiLCAiU0VMRUNUT1JfREFUQV9UT0dHTEUiLCAiRVZFTlRfQ0xJQ0tfREFUQV9BUEkiLCAiQnV0dG9uIiwgInRvZ2dsZSIsICJidXR0b24iLCAiRVZFTlRfVE9VQ0hTVEFSVCIsICJFVkVOVF9UT1VDSE1PVkUiLCAiRVZFTlRfVE9VQ0hFTkQiLCAiRVZFTlRfUE9JTlRFUkRPV04iLCAiRVZFTlRfUE9JTlRFUlVQIiwgIlBPSU5URVJfVFlQRV9UT1VDSCIsICJQT0lOVEVSX1RZUEVfUEVOIiwgIkNMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCIsICJTV0lQRV9USFJFU0hPTEQiLCAiZW5kQ2FsbGJhY2siLCAibGVmdENhbGxiYWNrIiwgInJpZ2h0Q2FsbGJhY2siLCAiU3dpcGUiLCAiaXNTdXBwb3J0ZWQiLCAiX2RlbHRhWCIsICJfc3VwcG9ydFBvaW50ZXJFdmVudHMiLCAiUG9pbnRlckV2ZW50IiwgIl9pbml0RXZlbnRzIiwgIl9zdGFydCIsICJ0b3VjaGVzIiwgImNsaWVudFgiLCAiX2V2ZW50SXNQb2ludGVyUGVuVG91Y2giLCAiX2VuZCIsICJfaGFuZGxlU3dpcGUiLCAiX21vdmUiLCAiYWJzRGVsdGFYIiwgImFicyIsICJkaXJlY3Rpb24iLCAiYWRkIiwgInBvaW50ZXJUeXBlIiwgIm5hdmlnYXRvciIsICJtYXhUb3VjaFBvaW50cyIsICJBUlJPV19MRUZUX0tFWSIsICJBUlJPV19SSUdIVF9LRVkiLCAiVE9VQ0hFVkVOVF9DT01QQVRfV0FJVCIsICJPUkRFUl9ORVhUIiwgIk9SREVSX1BSRVYiLCAiRElSRUNUSU9OX0xFRlQiLCAiRElSRUNUSU9OX1JJR0hUIiwgIkVWRU5UX1NMSURFIiwgIkVWRU5UX1NMSUQiLCAiRVZFTlRfS0VZRE9XTiIsICJFVkVOVF9NT1VTRUVOVEVSIiwgIkVWRU5UX01PVVNFTEVBVkUiLCAiRVZFTlRfRFJBR19TVEFSVCIsICJFVkVOVF9MT0FEX0RBVEFfQVBJIiwgIkNMQVNTX05BTUVfQ0FST1VTRUwiLCAiQ0xBU1NfTkFNRV9TTElERSIsICJDTEFTU19OQU1FX0VORCIsICJDTEFTU19OQU1FX1NUQVJUIiwgIkNMQVNTX05BTUVfTkVYVCIsICJDTEFTU19OQU1FX1BSRVYiLCAiU0VMRUNUT1JfQUNUSVZFIiwgIlNFTEVDVE9SX0lURU0iLCAiU0VMRUNUT1JfQUNUSVZFX0lURU0iLCAiU0VMRUNUT1JfSVRFTV9JTUciLCAiU0VMRUNUT1JfSU5ESUNBVE9SUyIsICJTRUxFQ1RPUl9EQVRBX1NMSURFIiwgIlNFTEVDVE9SX0RBVEFfUklERSIsICJLRVlfVE9fRElSRUNUSU9OIiwgImludGVydmFsIiwgImtleWJvYXJkIiwgInBhdXNlIiwgInJpZGUiLCAidG91Y2giLCAid3JhcCIsICJDYXJvdXNlbCIsICJfaW50ZXJ2YWwiLCAiX2FjdGl2ZUVsZW1lbnQiLCAiX2lzU2xpZGluZyIsICJ0b3VjaFRpbWVvdXQiLCAiX3N3aXBlSGVscGVyIiwgIl9pbmRpY2F0b3JzRWxlbWVudCIsICJfYWRkRXZlbnRMaXN0ZW5lcnMiLCAiY3ljbGUiLCAiX3NsaWRlIiwgIm5leHRXaGVuVmlzaWJsZSIsICJoaWRkZW4iLCAiX2NsZWFySW50ZXJ2YWwiLCAiX3VwZGF0ZUludGVydmFsIiwgInNldEludGVydmFsIiwgIl9tYXliZUVuYWJsZUN5Y2xlIiwgInRvIiwgIml0ZW1zIiwgIl9nZXRJdGVtcyIsICJhY3RpdmVJbmRleCIsICJfZ2V0SXRlbUluZGV4IiwgIl9nZXRBY3RpdmUiLCAib3JkZXIiLCAiZGVmYXVsdEludGVydmFsIiwgIl9rZXlkb3duIiwgIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwgImltZyIsICJlbmRDYWxsQmFjayIsICJjbGVhclRpbWVvdXQiLCAic3dpcGVDb25maWciLCAiX2RpcmVjdGlvblRvT3JkZXIiLCAiX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQiLCAiYWN0aXZlSW5kaWNhdG9yIiwgIm5ld0FjdGl2ZUluZGljYXRvciIsICJlbGVtZW50SW50ZXJ2YWwiLCAicGFyc2VJbnQiLCAiaXNOZXh0IiwgIm5leHRFbGVtZW50IiwgIm5leHRFbGVtZW50SW5kZXgiLCAidHJpZ2dlckV2ZW50IiwgIl9vcmRlclRvRGlyZWN0aW9uIiwgInNsaWRlRXZlbnQiLCAiaXNDeWNsaW5nIiwgImRpcmVjdGlvbmFsQ2xhc3NOYW1lIiwgIm9yZGVyQ2xhc3NOYW1lIiwgImNvbXBsZXRlQ2FsbEJhY2siLCAiX2lzQW5pbWF0ZWQiLCAiY2xlYXJJbnRlcnZhbCIsICJjYXJvdXNlbCIsICJzbGlkZUluZGV4IiwgImNhcm91c2VscyIsICJFVkVOVF9TSE9XIiwgIkVWRU5UX1NIT1dOIiwgIkVWRU5UX0hJREUiLCAiRVZFTlRfSElEREVOIiwgIkNMQVNTX05BTUVfQ09MTEFQU0UiLCAiQ0xBU1NfTkFNRV9DT0xMQVBTSU5HIiwgIkNMQVNTX05BTUVfQ09MTEFQU0VEIiwgIkNMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOIiwgIkNMQVNTX05BTUVfSE9SSVpPTlRBTCIsICJXSURUSCIsICJIRUlHSFQiLCAiU0VMRUNUT1JfQUNUSVZFUyIsICJwYXJlbnQiLCAiQ29sbGFwc2UiLCAiX2lzVHJhbnNpdGlvbmluZyIsICJfdHJpZ2dlckFycmF5IiwgInRvZ2dsZUxpc3QiLCAiZWxlbSIsICJmaWx0ZXJFbGVtZW50IiwgImZvdW5kRWxlbWVudCIsICJfaW5pdGlhbGl6ZUNoaWxkcmVuIiwgIl9hZGRBcmlhQW5kQ29sbGFwc2VkQ2xhc3MiLCAiX2lzU2hvd24iLCAiaGlkZSIsICJzaG93IiwgImFjdGl2ZUNoaWxkcmVuIiwgIl9nZXRGaXJzdExldmVsQ2hpbGRyZW4iLCAic3RhcnRFdmVudCIsICJhY3RpdmVJbnN0YW5jZSIsICJkaW1lbnNpb24iLCAiX2dldERpbWVuc2lvbiIsICJzdHlsZSIsICJjb21wbGV0ZSIsICJjYXBpdGFsaXplZERpbWVuc2lvbiIsICJzY3JvbGxTaXplIiwgImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsICJzZWxlY3RlZCIsICJ0cmlnZ2VyQXJyYXkiLCAiaXNPcGVuIiwgIkVTQ0FQRV9LRVkiLCAiVEFCX0tFWSIsICJBUlJPV19VUF9LRVkiLCAiQVJST1dfRE9XTl9LRVkiLCAiUklHSFRfTU9VU0VfQlVUVE9OIiwgIkVWRU5UX0tFWURPV05fREFUQV9BUEkiLCAiRVZFTlRfS0VZVVBfREFUQV9BUEkiLCAiQ0xBU1NfTkFNRV9EUk9QVVAiLCAiQ0xBU1NfTkFNRV9EUk9QRU5EIiwgIkNMQVNTX05BTUVfRFJPUFNUQVJUIiwgIkNMQVNTX05BTUVfRFJPUFVQX0NFTlRFUiIsICJDTEFTU19OQU1FX0RST1BET1dOX0NFTlRFUiIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRV9TSE9XTiIsICJTRUxFQ1RPUl9NRU5VIiwgIlNFTEVDVE9SX05BVkJBUiIsICJTRUxFQ1RPUl9OQVZCQVJfTkFWIiwgIlNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMiLCAiUExBQ0VNRU5UX1RPUCIsICJQTEFDRU1FTlRfVE9QRU5EIiwgIlBMQUNFTUVOVF9CT1RUT00iLCAiUExBQ0VNRU5UX0JPVFRPTUVORCIsICJQTEFDRU1FTlRfUklHSFQiLCAiUExBQ0VNRU5UX0xFRlQiLCAiUExBQ0VNRU5UX1RPUENFTlRFUiIsICJQTEFDRU1FTlRfQk9UVE9NQ0VOVEVSIiwgImF1dG9DbG9zZSIsICJib3VuZGFyeSIsICJkaXNwbGF5IiwgIm9mZnNldCIsICJwb3BwZXJDb25maWciLCAicmVmZXJlbmNlIiwgIkRyb3Bkb3duIiwgIl9wb3BwZXIiLCAiX3BhcmVudCIsICJfbWVudSIsICJfaW5OYXZiYXIiLCAiX2RldGVjdE5hdmJhciIsICJzaG93RXZlbnQiLCAiX2NyZWF0ZVBvcHBlciIsICJmb2N1cyIsICJfY29tcGxldGVIaWRlIiwgImRlc3Ryb3kiLCAidXBkYXRlIiwgImhpZGVFdmVudCIsICJQb3BwZXIiLCAicmVmZXJlbmNlRWxlbWVudCIsICJfZ2V0UG9wcGVyQ29uZmlnIiwgImNyZWF0ZVBvcHBlciIsICJfZ2V0UGxhY2VtZW50IiwgInBhcmVudERyb3Bkb3duIiwgImlzRW5kIiwgIl9nZXRPZmZzZXQiLCAicG9wcGVyRGF0YSIsICJkZWZhdWx0QnNQb3BwZXJDb25maWciLCAicGxhY2VtZW50IiwgIm1vZGlmaWVycyIsICJvcHRpb25zIiwgImVuYWJsZWQiLCAiX3NlbGVjdE1lbnVJdGVtIiwgImNsZWFyTWVudXMiLCAib3BlblRvZ2dsZXMiLCAiY29udGV4dCIsICJjb21wb3NlZFBhdGgiLCAiaXNNZW51VGFyZ2V0IiwgImRhdGFBcGlLZXlkb3duSGFuZGxlciIsICJpc0lucHV0IiwgImlzRXNjYXBlRXZlbnQiLCAiaXNVcE9yRG93bkV2ZW50IiwgImdldFRvZ2dsZUJ1dHRvbiIsICJzdG9wUHJvcGFnYXRpb24iLCAiRVZFTlRfTU9VU0VET1dOIiwgImNsYXNzTmFtZSIsICJjbGlja0NhbGxiYWNrIiwgInJvb3RFbGVtZW50IiwgIkJhY2tkcm9wIiwgIl9pc0FwcGVuZGVkIiwgIl9hcHBlbmQiLCAiX2dldEVsZW1lbnQiLCAiX2VtdWxhdGVBbmltYXRpb24iLCAiYmFja2Ryb3AiLCAiY3JlYXRlRWxlbWVudCIsICJhcHBlbmQiLCAiRVZFTlRfRk9DVVNJTiIsICJFVkVOVF9LRVlET1dOX1RBQiIsICJUQUJfTkFWX0ZPUldBUkQiLCAiVEFCX05BVl9CQUNLV0FSRCIsICJhdXRvZm9jdXMiLCAidHJhcEVsZW1lbnQiLCAiRm9jdXNUcmFwIiwgIl9pc0FjdGl2ZSIsICJfbGFzdFRhYk5hdkRpcmVjdGlvbiIsICJhY3RpdmF0ZSIsICJfaGFuZGxlRm9jdXNpbiIsICJfaGFuZGxlS2V5ZG93biIsICJkZWFjdGl2YXRlIiwgImVsZW1lbnRzIiwgInNoaWZ0S2V5IiwgIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCAiU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQiLCAiUFJPUEVSVFlfUEFERElORyIsICJQUk9QRVJUWV9NQVJHSU4iLCAiU2Nyb2xsQmFySGVscGVyIiwgImdldFdpZHRoIiwgImRvY3VtZW50V2lkdGgiLCAiY2xpZW50V2lkdGgiLCAiaW5uZXJXaWR0aCIsICJ3aWR0aCIsICJfZGlzYWJsZU92ZXJGbG93IiwgIl9zZXRFbGVtZW50QXR0cmlidXRlcyIsICJjYWxjdWxhdGVkVmFsdWUiLCAicmVzZXQiLCAiX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCAiaXNPdmVyZmxvd2luZyIsICJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCAib3ZlcmZsb3ciLCAic3R5bGVQcm9wZXJ0eSIsICJzY3JvbGxiYXJXaWR0aCIsICJtYW5pcHVsYXRpb25DYWxsQmFjayIsICJzZXRQcm9wZXJ0eSIsICJfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayIsICJhY3R1YWxWYWx1ZSIsICJyZW1vdmVQcm9wZXJ0eSIsICJjYWxsQmFjayIsICJFVkVOVF9ISURFX1BSRVZFTlRFRCIsICJFVkVOVF9SRVNJWkUiLCAiRVZFTlRfQ0xJQ0tfRElTTUlTUyIsICJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsICJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCAiQ0xBU1NfTkFNRV9PUEVOIiwgIkNMQVNTX05BTUVfU1RBVElDIiwgIk9QRU5fU0VMRUNUT1IiLCAiU0VMRUNUT1JfRElBTE9HIiwgIlNFTEVDVE9SX01PREFMX0JPRFkiLCAiTW9kYWwiLCAiX2RpYWxvZyIsICJfYmFja2Ryb3AiLCAiX2luaXRpYWxpemVCYWNrRHJvcCIsICJfZm9jdXN0cmFwIiwgIl9pbml0aWFsaXplRm9jdXNUcmFwIiwgIl9zY3JvbGxCYXIiLCAiX2FkanVzdERpYWxvZyIsICJfc2hvd0VsZW1lbnQiLCAiX2hpZGVNb2RhbCIsICJoYW5kbGVVcGRhdGUiLCAic2Nyb2xsVG9wIiwgIm1vZGFsQm9keSIsICJ0cmFuc2l0aW9uQ29tcGxldGUiLCAiX3RyaWdnZXJCYWNrZHJvcFRyYW5zaXRpb24iLCAiZXZlbnQyIiwgIl9yZXNldEFkanVzdG1lbnRzIiwgImlzTW9kYWxPdmVyZmxvd2luZyIsICJzY3JvbGxIZWlnaHQiLCAiY2xpZW50SGVpZ2h0IiwgImluaXRpYWxPdmVyZmxvd1kiLCAib3ZlcmZsb3dZIiwgImlzQm9keU92ZXJmbG93aW5nIiwgInBhZGRpbmdMZWZ0IiwgInBhZGRpbmdSaWdodCIsICJhbHJlYWR5T3BlbiIsICJDTEFTU19OQU1FX1NIT1dJTkciLCAiQ0xBU1NfTkFNRV9ISURJTkciLCAiQ0xBU1NfTkFNRV9CQUNLRFJPUCIsICJzY3JvbGwiLCAiT2ZmY2FudmFzIiwgImJsdXIiLCAiY29tcGxldGVDYWxsYmFjayIsICJwb3NpdGlvbiIsICJBUklBX0FUVFJJQlVURV9QQVRURVJOIiwgIkRlZmF1bHRBbGxvd2xpc3QiLCAiYSIsICJhcmVhIiwgImIiLCAiYnIiLCAiY29sIiwgImNvZGUiLCAiZGQiLCAiZGl2IiwgImRsIiwgImR0IiwgImVtIiwgImhyIiwgImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2IiwgImkiLCAibGkiLCAib2wiLCAicCIsICJwcmUiLCAicyIsICJzbWFsbCIsICJzcGFuIiwgInN1YiIsICJzdXAiLCAic3Ryb25nIiwgInUiLCAidWwiLCAidXJpQXR0cmlidXRlcyIsICJTQUZFX1VSTF9QQVRURVJOIiwgImFsbG93ZWRBdHRyaWJ1dGUiLCAiYXR0cmlidXRlIiwgImFsbG93ZWRBdHRyaWJ1dGVMaXN0IiwgImF0dHJpYnV0ZU5hbWUiLCAibm9kZU5hbWUiLCAibm9kZVZhbHVlIiwgImF0dHJpYnV0ZVJlZ2V4IiwgInNvbWUiLCAicmVnZXgiLCAic2FuaXRpemVIdG1sIiwgInVuc2FmZUh0bWwiLCAiYWxsb3dMaXN0IiwgInNhbml0aXplRnVuY3Rpb24iLCAiZG9tUGFyc2VyIiwgIkRPTVBhcnNlciIsICJjcmVhdGVkRG9jdW1lbnQiLCAicGFyc2VGcm9tU3RyaW5nIiwgImVsZW1lbnROYW1lIiwgImF0dHJpYnV0ZUxpc3QiLCAiYWxsb3dlZEF0dHJpYnV0ZXMiLCAiaW5uZXJIVE1MIiwgImNvbnRlbnQiLCAiZXh0cmFDbGFzcyIsICJodG1sIiwgInNhbml0aXplIiwgInNhbml0aXplRm4iLCAidGVtcGxhdGUiLCAiRGVmYXVsdENvbnRlbnRUeXBlIiwgImVudHJ5IiwgIlRlbXBsYXRlRmFjdG9yeSIsICJnZXRDb250ZW50IiwgIl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbiIsICJoYXNDb250ZW50IiwgImNoYW5nZUNvbnRlbnQiLCAiX2NoZWNrQ29udGVudCIsICJ0b0h0bWwiLCAidGVtcGxhdGVXcmFwcGVyIiwgIl9tYXliZVNhbml0aXplIiwgInRleHQiLCAiX3NldENvbnRlbnQiLCAiYXJnIiwgInRlbXBsYXRlRWxlbWVudCIsICJfcHV0RWxlbWVudEluVGVtcGxhdGUiLCAidGV4dENvbnRlbnQiLCAiRElTQUxMT1dFRF9BVFRSSUJVVEVTIiwgIkNMQVNTX05BTUVfTU9EQUwiLCAiU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiIsICJTRUxFQ1RPUl9NT0RBTCIsICJFVkVOVF9NT0RBTF9ISURFIiwgIlRSSUdHRVJfSE9WRVIiLCAiVFJJR0dFUl9GT0NVUyIsICJUUklHR0VSX0NMSUNLIiwgIlRSSUdHRVJfTUFOVUFMIiwgIkVWRU5UX0lOU0VSVEVEIiwgIkVWRU5UX0NMSUNLIiwgIkVWRU5UX0ZPQ1VTT1VUIiwgIkF0dGFjaG1lbnRNYXAiLCAiQVVUTyIsICJUT1AiLCAiUklHSFQiLCAiQk9UVE9NIiwgIkxFRlQiLCAiYW5pbWF0aW9uIiwgImNvbnRhaW5lciIsICJjdXN0b21DbGFzcyIsICJkZWxheSIsICJmYWxsYmFja1BsYWNlbWVudHMiLCAidGl0bGUiLCAiVG9vbHRpcCIsICJfaXNFbmFibGVkIiwgIl90aW1lb3V0IiwgIl9pc0hvdmVyZWQiLCAiX2FjdGl2ZVRyaWdnZXIiLCAiX3RlbXBsYXRlRmFjdG9yeSIsICJfbmV3Q29udGVudCIsICJ0aXAiLCAiX3NldExpc3RlbmVycyIsICJfZml4VGl0bGUiLCAiZW5hYmxlIiwgImRpc2FibGUiLCAidG9nZ2xlRW5hYmxlZCIsICJjbGljayIsICJfbGVhdmUiLCAiX2VudGVyIiwgIl9oaWRlTW9kYWxIYW5kbGVyIiwgIl9kaXNwb3NlUG9wcGVyIiwgIl9pc1dpdGhDb250ZW50IiwgInNoYWRvd1Jvb3QiLCAiaXNJblRoZURvbSIsICJvd25lckRvY3VtZW50IiwgIl9nZXRUaXBFbGVtZW50IiwgIl9pc1dpdGhBY3RpdmVUcmlnZ2VyIiwgIl9nZXRUaXRsZSIsICJfY3JlYXRlVGlwRWxlbWVudCIsICJfZ2V0Q29udGVudEZvclRlbXBsYXRlIiwgIl9nZXRUZW1wbGF0ZUZhY3RvcnkiLCAidGlwSWQiLCAic2V0Q29udGVudCIsICJfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0IiwgIl9nZXREZWxlZ2F0ZUNvbmZpZyIsICJhdHRhY2htZW50IiwgInBoYXNlIiwgInN0YXRlIiwgInRyaWdnZXJzIiwgImV2ZW50SW4iLCAiZXZlbnRPdXQiLCAiX3NldFRpbWVvdXQiLCAidGltZW91dCIsICJkYXRhQXR0cmlidXRlcyIsICJkYXRhQXR0cmlidXRlIiwgIlNFTEVDVE9SX1RJVExFIiwgIlNFTEVDVE9SX0NPTlRFTlQiLCAiUG9wb3ZlciIsICJfZ2V0Q29udGVudCIsICJFVkVOVF9BQ1RJVkFURSIsICJDTEFTU19OQU1FX0RST1BET1dOX0lURU0iLCAiU0VMRUNUT1JfREFUQV9TUFkiLCAiU0VMRUNUT1JfVEFSR0VUX0xJTktTIiwgIlNFTEVDVE9SX05BVl9MSVNUX0dST1VQIiwgIlNFTEVDVE9SX05BVl9MSU5LUyIsICJTRUxFQ1RPUl9OQVZfSVRFTVMiLCAiU0VMRUNUT1JfTElTVF9JVEVNUyIsICJTRUxFQ1RPUl9MSU5LX0lURU1TIiwgIlNFTEVDVE9SX0RST1BET1dOIiwgIlNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSIsICJyb290TWFyZ2luIiwgInNtb290aFNjcm9sbCIsICJ0aHJlc2hvbGQiLCAiU2Nyb2xsU3B5IiwgIl90YXJnZXRMaW5rcyIsICJfb2JzZXJ2YWJsZVNlY3Rpb25zIiwgIl9yb290RWxlbWVudCIsICJfYWN0aXZlVGFyZ2V0IiwgIl9vYnNlcnZlciIsICJfcHJldmlvdXNTY3JvbGxEYXRhIiwgInZpc2libGVFbnRyeVRvcCIsICJwYXJlbnRTY3JvbGxUb3AiLCAicmVmcmVzaCIsICJfaW5pdGlhbGl6ZVRhcmdldHNBbmRPYnNlcnZhYmxlcyIsICJfbWF5YmVFbmFibGVTbW9vdGhTY3JvbGwiLCAiZGlzY29ubmVjdCIsICJfZ2V0TmV3T2JzZXJ2ZXIiLCAic2VjdGlvbiIsICJvYnNlcnZlIiwgIm9ic2VydmFibGVTZWN0aW9uIiwgImhhc2giLCAiaGVpZ2h0IiwgIm9mZnNldFRvcCIsICJzY3JvbGxUbyIsICJ0b3AiLCAiYmVoYXZpb3IiLCAiSW50ZXJzZWN0aW9uT2JzZXJ2ZXIiLCAiX29ic2VydmVyQ2FsbGJhY2siLCAidGFyZ2V0RWxlbWVudCIsICJfcHJvY2VzcyIsICJ1c2VyU2Nyb2xsc0Rvd24iLCAiaXNJbnRlcnNlY3RpbmciLCAiX2NsZWFyQWN0aXZlQ2xhc3MiLCAiZW50cnlJc0xvd2VyVGhhblByZXZpb3VzIiwgInRhcmdldExpbmtzIiwgImFuY2hvciIsICJkZWNvZGVVUkkiLCAiX2FjdGl2YXRlUGFyZW50cyIsICJsaXN0R3JvdXAiLCAiaXRlbSIsICJhY3RpdmVOb2RlcyIsICJub2RlIiwgInNweSIsICJIT01FX0tFWSIsICJFTkRfS0VZIiwgIkNMQVNTX0RST1BET1dOIiwgIlNFTEVDVE9SX0RST1BET1dOX01FTlUiLCAiTk9UX1NFTEVDVE9SX0RST1BET1dOX1RPR0dMRSIsICJTRUxFQ1RPUl9UQUJfUEFORUwiLCAiU0VMRUNUT1JfT1VURVIiLCAiU0VMRUNUT1JfSU5ORVIiLCAiU0VMRUNUT1JfSU5ORVJfRUxFTSIsICJTRUxFQ1RPUl9EQVRBX1RPR0dMRV9BQ1RJVkUiLCAiVGFiIiwgIl9zZXRJbml0aWFsQXR0cmlidXRlcyIsICJfZ2V0Q2hpbGRyZW4iLCAiaW5uZXJFbGVtIiwgIl9lbGVtSXNBY3RpdmUiLCAiYWN0aXZlIiwgIl9nZXRBY3RpdmVFbGVtIiwgIl9kZWFjdGl2YXRlIiwgIl9hY3RpdmF0ZSIsICJyZWxhdGVkRWxlbSIsICJfdG9nZ2xlRHJvcERvd24iLCAibmV4dEFjdGl2ZUVsZW1lbnQiLCAicHJldmVudFNjcm9sbCIsICJfc2V0QXR0cmlidXRlSWZOb3RFeGlzdHMiLCAiX3NldEluaXRpYWxBdHRyaWJ1dGVzT25DaGlsZCIsICJfZ2V0SW5uZXJFbGVtZW50IiwgImlzQWN0aXZlIiwgIm91dGVyRWxlbSIsICJfZ2V0T3V0ZXJFbGVtZW50IiwgIl9zZXRJbml0aWFsQXR0cmlidXRlc09uVGFyZ2V0UGFuZWwiLCAib3BlbiIsICJFVkVOVF9NT1VTRU9WRVIiLCAiRVZFTlRfTU9VU0VPVVQiLCAiQ0xBU1NfTkFNRV9ISURFIiwgImF1dG9oaWRlIiwgIlRvYXN0IiwgIl9oYXNNb3VzZUludGVyYWN0aW9uIiwgIl9oYXNLZXlib2FyZEludGVyYWN0aW9uIiwgIl9jbGVhclRpbWVvdXQiLCAiX21heWJlU2NoZWR1bGVIaWRlIiwgImlzU2hvd24iLCAiX29uSW50ZXJhY3Rpb24iLCAiaXNJbnRlcmFjdGluZyIsICIkIiwgImltcG9ydF9qcXVlcnkiLCAibWF4IiwgIiQiLCAiQ3VzdG9tRXZlbnQiLCAiY2xvc3VyZTIiLCAiZ2xvYmFsIiwgIm9mZnNldCIsICJnbG9iYWwiLCAibGl2ZVNvY2tldCIsICJjbG9zdXJlIiwgImhhc2giLCAiZGVib3VuY2UiLCAibm9vcCIsICIkIiwgInRvcGJhciJdCn0K