Check-in [64dd8bc483]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:update curl to version 7.65.0
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: 64dd8bc483b134f2c738287e38dc7c38857006e2
User & Date: chw 2019-05-24 22:16:39.850
Context
2019-05-25
03:43
add tk upstream changes check-in: a6dff1b79a user: chw tags: trunk
2019-05-24
22:18
merge with trunk check-in: 71cc564ed0 user: chw tags: wtf-8-experiment
22:16
update curl to version 7.65.0 check-in: 64dd8bc483 user: chw tags: trunk
18:46
update libressl to version 2.9.2 check-in: 344943e84b user: chw tags: trunk
Changes
Side-by-Side Diff Ignore Whitespace Patch
Changes to jni/curl/CHANGES.
1
2
3
4
5
6
7


























































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







                                  _   _ ____  _
                              ___| | | |  _ \| |
                             / __| | | | |_) | |
                            | (__| |_| |  _ <| |___
                             \___|\___/|_| \_\_____|

                                  Changelog

Version 7.65.0 (22 May 2019)

Daniel Stenberg (22 May 2019)
- RELEASE-NOTES: 7.65.0 release

- THANKS: from the 7.65.0 release-notes

- url: convert the zone id from a IPv6 URL to correct scope id
  
  Reported-by: GitYuanQu on github
  Fixes #3902
  Closes #3914

- configure: detect getsockname and getpeername on windows too
  
  Made detection macros for these two functions in the same style as other
  functions possibly in winsock in the hope this will work better to
  detect these functions when cross-compiling for Windows.
  
  Follow-up to e91e4816123
  
  Fixes #3913
  Closes #3915

Marcel Raad (21 May 2019)
- examples: remove unused variables
  
  Fixes Codacy/CppCheck warnings.
  
  Closes

Daniel Gustafsson (21 May 2019)
- udpateconninfo: mark variable unused
  
  When compiling without getpeername() or getsockname(), the sockfd
  paramter to Curl_udpateconninfo() became unused after commit e91e481612
  added ifdef guards.
  
  Closes #3910
  Fixes https://curl.haxx.se/dev/log.cgi?id=20190520172441-32196
  Reviewed-by: Marcel Raad, Daniel Stenberg

- ftp: move ftp_ccc in under featureflag
  
  Commit e91e48161235272ff485ff32bd048c53af731f43 moved ftp_ccc in under
  the FTP featureflag in the UserDefined struct, but vtls callsites were
  still using it unprotected.
  
  Closes #3912
  Fixes: https://curl.haxx.se/dev/log.cgi?id=20190520044705-29865
  Reviewed-by: Daniel Stenberg, Marcel Raad

Daniel Stenberg (20 May 2019)
- curl: report error for "--no-" on non-boolean options
  
  Reported-by: Olen Andoni
  Fixes #3906
  Closes #3907

- [Guy Poizat brought this change]

  mbedtls: enable use of EC keys
  
  Closes #3892

- lib1560: add tests for parsing URL with too long scheme
  
  Ref: #3905

- [Omar Ramadan brought this change]

  urlapi: increase supported scheme length to 40 bytes
  
  The longest currently registered URI scheme at IANA is 36 bytes long.
  
  Closes #3905
  Closes #3900

Marcel Raad (20 May 2019)
- lib: reduce variable scopes
  
  Fixes Codacy/CppCheck warnings.
  
  Closes https://github.com/curl/curl/pull/3872

- tool_formparse: remove redundant assignment
  
  Just initialize word_begin with the correct value.
  
  Closes https://github.com/curl/curl/pull/3873

- ssh: move variable declaration to where it's used
  
  This way, we need only one call to free.
  
  Closes https://github.com/curl/curl/pull/3873

- ssh-libssh: remove unused variable
  
  sock was only used to be assigned to fd_read.
  
  Closes https://github.com/curl/curl/pull/3873

Daniel Stenberg (20 May 2019)
- test332: verify the blksize fix

- tftp: use the current blksize for recvfrom()
  
  bug: https://curl.haxx.se/docs/CVE-2019-5436.html
  Reported-by: l00p3r on hackerone
  CVE-2019-5436

Daniel Gustafsson (19 May 2019)
- version: make ssl_version buffer match for multi_ssl
  
  When running a multi TLS backend build the version string needs more
  buffer space. Make the internal ssl_buffer stack buffer match the one
  in Curl_multissl_version() to allow for the longer string. For single
  TLS backend builds there is no use in extended to buffer. This is a
  fallout from #3863 which fixes up the multi_ssl string generation to
  avoid a buffer overflow when the buffer is too small.
  
  Closes #3875
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (18 May 2019)
- http_ntlm_wb: Handle auth for only a single request
  
  Currently when the server responds with 401 on NTLM authenticated
  connection (re-used) we consider it to have failed.  However this is
  legitimate and may happen when for example IIS is set configured to
  'authPersistSingleRequest' or when the request goes thru a proxy (with
  'via' header).
  
  Implemented by imploying an additional state once a connection is
  re-used to indicate that if we receive 401 we need to restart
  authentication.
  
  Missed in fe6049f0.

- http_ntlm_wb: Cleanup handshake after clean NTLM failure
  
  Missed in 50b87c4e.

- http_ntlm_wb: Return the correct error on receiving an empty auth message
  
  Missed in fe20826b as it wasn't implemented in http.c in b4d6db83.
  
  Closes #3894

Daniel Stenberg (18 May 2019)
- curl: make code work with protocol-disabled libcurl
  
  Closes #3844

- libcurl: #ifdef away more code for disabled features/protocols

- progress: CURL_DISABLE_PROGRESS_METER

- hostip: CURL_DISABLE_SHUFFLE_DNS

- netrc: CURL_DISABLE_NETRC

Viktor Szakats (16 May 2019)
- docs: Markdown and misc improvements [ci skip]
  
  Approved-by: Daniel Stenberg
  Closes #3896

- docs/RELEASE-PROCEDURE: link to live iCalendar [ci skip]
  
  Ref: https://github.com/curl/curl/commit/0af41b40b2c7bd379b2251cbe7cd618e21fa0ea1#commitcomment-33563135
  Approved-by: Daniel Stenberg
  Closes #3895

Daniel Stenberg (16 May 2019)
- travis: add an osx http-only build
  
  Closes #3887

- cleanup: remove FIXME and TODO comments
  
  They serve very little purpose and mostly just add noise. Most of them
  have been around for a very long time. I read them all before removing
  or rephrasing them.
  
  Ref: #3876
  Closes #3883

- curl: don't set FTP options for FTP-disabled builds
  
  ... since libcurl has started to be totally unaware of options for
  disabled protocols they now return error.
  
  Bug: https://github.com/curl/curl/commit/c9c5304dd4747cbe75d2f24be85920d572fcb5b8#commitcomment-33533937
  
  Reported-by: Marcel Raad
  Closes #3886

Steve Holme (16 May 2019)
- http_ntlm_wb: Move the type-2 message processing into a dedicated function
  
  This brings the code inline with the other HTTP authentication mechanisms.
  
  Closes #3890

Daniel Stenberg (15 May 2019)
- RELEASE-NOTES: synced

- docs/RELEASE-PROCEDURE: updated coming releases dates [ci skip]

- CURLOPT_READFUNCTION.3: see also CURLOPT_UPLOAD_BUFFERSIZE [ci skip]
  
  Reported-by: Roy Bellingan
  Bug: #3885

- parse_proxy: use the URL parser API
  
  As we treat a given proxy as a URL we should use the unified URL parser
  to extract the parts out of it.
  
  Closes #3878

Steve Holme (15 May 2019)
- http_negotiate: Move the Negotiate state out of the negotiatedata structure
  
  Given that this member variable is not used by the SASL based protocols
  there is no need to have it here.
  
  Closes #3882

- http_ntlm: Move the NTLM state out of the ntlmdata structure
  
  Given that this member variable is not used by the SASL based protocols
  there is no need to have it here.

- url: Move the negotiate state type into a dedicated enum

- url: Remove duplicate clean up of the winbind variables in conn_shutdown()
  
  Given that Curl_disconnect() calls Curl_http_auth_cleanup_ntlm() prior
  to calling conn_shutdown() and it in turn performs this, there is no
  need to perform the same action in conn_shutdown().
  
  Closes #3881

Daniel Stenberg (14 May 2019)
- urlapi: require a non-zero host name length when parsing URL
  
  Updated test 1560 to verify.
  
  Closes #3880

- configure: error out if OpenSSL wasn't detected when asked for
  
  If --with-ssl is used and configure still couldn't enable SSL this
  creates an error instead of just silently ignoring the fact.
  
  Suggested-by: Isaiah Norton
  Fixes #3824
  Closes #3830

Daniel Gustafsson (14 May 2019)
- imap: Fix typo in comment

Steve Holme (14 May 2019)
- url: Remove unnecessary initialisation from allocate_conn()
  
  No need to set variables to zero as calloc() does this for us.
  
  Closes #3879

Daniel Stenberg (14 May 2019)
- CURLOPT_CAINFO.3: with Schannel, you want Windows 8 or later [ci skip]
  
  Clues-provided-by: Jay Satiro
  Clues-provided-by: Jeroen Ooms
  Fixes #3711
  Closes #3874

Daniel Gustafsson (13 May 2019)
- vtls: fix potential ssl_buffer stack overflow
  
  In Curl_multissl_version() it was possible to overflow the passed in
  buffer if the generated version string exceeded the size of the buffer.
  Fix by inverting the logic, and also make sure to not exceed the local
  buffer during the string generation.
  
  Closes #3863
  Reported-by: nevv on HackerOne/curl
  Reviewed-by: Jay Satiro
  Reviewed-by: Daniel Stenberg

Daniel Stenberg (13 May 2019)
- RELEASE-NOTES: synced

- appveyor: also build "/ci" branches like travis

- pingpong: disable more when no pingpong enabled

- proxy: acknowledge DISABLE_PROXY more

- parsedate: CURL_DISABLE_PARSEDATE

- sasl: only enable if there's a protocol enabled using it

- mime: acknowledge CURL_DISABLE_MIME

- wildcard: disable from build when FTP isn't present

- http: CURL_DISABLE_HTTP_AUTH

- base64: build conditionally if there are users

- doh: CURL_DISABLE_DOH

Steve Holme (12 May 2019)
- auth: Rename the various authentication clean up functions
  
  For consistency and to a avoid confusion.
  
  Closes #3869

Daniel Stenberg (12 May 2019)
- [Jay Satiro brought this change]

  docs/INSTALL: fix broken link [ci skip]
  
  Reported-by: Joombalaya on github
  Fixes #3818

Marcel Raad (12 May 2019)
- easy: fix another "clarify calculation precedence" warning
  
  I missed this one in commit 6b3dde7fe62ea5a557fd1fd323fac2bcd0c2e9be.

- build: fix "clarify calculation precedence" warnings
  
  Codacy/CppCheck warns about this. Consistently use parentheses as we
  already do in some places to silence the warning.
  
  Closes https://github.com/curl/curl/pull/3866

- cmake: restore C89 compatibility of CurlTests.c
  
  I broke it in d1b5cf830bfe169745721b21245d2217d2c2453e and
  97de97daefc2ed084c91eff34af2426f2e55e134.
  
  Reported-by: Viktor Szakats
  Ref: https://github.com/curl/curl/commit/97de97daefc2ed084c91eff34af2426f2e55e134#commitcomment-33499044
  Closes https://github.com/curl/curl/pull/3868

Steve Holme (11 May 2019)
- http_ntlm: Corrected the name of the include guard
  
  Missed in f0bdd72c.
  
  Closes #3867

- http_digest: Don't expose functions when HTTP and Crypto Auth are disabled
  
  Closes #3861

- http_negotiate: Don't expose functions when HTTP is disabled

Daniel Stenberg (11 May 2019)
- SECURITY-PROCESS: fix links [ci skip]

Marcel Raad (11 May 2019)
- CMake: suppress unused variable warnings
  
  I missed these in commit d1b5cf830bfe169745721b21245d2217d2c2453e.

Daniel Stenberg (11 May 2019)
- doh: disable DOH for the cases it doesn't work
  
  Due to limitations in Curl_resolver_wait_resolv(), it doesn't work for
  DOH resolves. This fix disables DOH for those.
  
  Limitation added to KNOWN_BUGS.
  
  Fixes #3850
  Closes #3857

Jay Satiro (11 May 2019)
- checksrc.bat: Ignore snprintf warnings in docs/examples
  
  .. because we allow snprintf use in docs/examples.
  
  Closes https://github.com/curl/curl/pull/3862

Steve Holme (10 May 2019)
- vauth: Fix incorrect function description for Curl_auth_user_contains_domain()
  
  ...and misalignment of these comments. From a78c61a4.
  
  Closes #3860

Jay Satiro (10 May 2019)
- Revert "multi: support verbose conncache closure handle"
  
  This reverts commit b0972bc.
  
  - No longer show verbose output for the conncache closure handle.
  
  The offending commit was added so that the conncache closure handle
  would inherit verbose mode from the user's easy handle. (Note there is
  no way for the user to set options for the closure handle which is why
  that was necessary.) Other debug settings such as the debug function
  were not also inherited since we determined that could lead to crashes
  if the user's per-handle private data was used on an unexpected handle.
  
  The reporter here says he has a debug function to capture the verbose
  output, and does not expect or want any output to stderr; however
  because the conncache closure handle does not inherit the debug function
  the verbose output for that handle does go to stderr.
  
  There are other plausible scenarios as well such as the user redirects
  stderr on their handle, which is also not inherited since it could lead
  to crashes when used on an unexpected handle.
  
  Short of allowing the user to set options for the conncache closure
  handle I don't think there's much we can safely do except no longer
  inherit the verbose setting.
  
  Bug: https://curl.haxx.se/mail/lib-2019-05/0021.html
  Reported-by: Kristoffer Gleditsch
  
  Ref: https://github.com/curl/curl/pull/3598
  Ref: https://github.com/curl/curl/pull/3618
  
  Closes https://github.com/curl/curl/pull/3856

Steve Holme (10 May 2019)
- ntlm: Fix misaligned function comments for Curl_auth_ntlm_cleanup()
  
  From 6012fa5a.
  
  Closes #3858

Daniel Stenberg (9 May 2019)
- BUG-BOUNTY: minor formatting fixes [ci skip]

- RELEASE-NOTES: synced

- BUG-BOUNTY.md: add the Dropbox "bonus" extra payout ability [ci skip]
  
  Closes #3839

Kamil Dudka (9 May 2019)
- http_negotiate: do not treat failure of gss_init_sec_context() as fatal
  
  Fixes #3726
  Closes #3849

- spnego_gssapi: fix return code on gss_init_sec_context() failure
  
  Fixes #3726
  Closes #3849

Steve Holme (9 May 2019)
- gen_resp_file.bat: Removed unnecessary @ from all but the first command
  
  There is need to use @ on every command once echo has been turned off.
  
  Closes #3854

Jay Satiro (8 May 2019)
- http: Ignore HTTP/2 prior knowledge setting for HTTP proxies
  
  - Do not switch to HTTP/2 for an HTTP proxy that is not tunnelling to
    the destination host.
  
  We already do something similar for HTTPS proxies by not sending h2. [1]
  
  Prior to this change setting CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE would
  incorrectly use HTTP/2 to talk to the proxy, which is not something we
  support (yet?). Also it's debatable whether or not that setting should
  apply to HTTP/2 proxies.
  
  [1]: https://github.com/curl/curl/commit/17c5d05
  
  Bug: https://github.com/curl/curl/issues/3570
  Bug: https://github.com/curl/curl/issues/3832
  
  Closes https://github.com/curl/curl/pull/3853

Marcel Raad (8 May 2019)
- travis: update mesalink build to xenial
  
  Closes https://github.com/curl/curl/pull/3842

Daniel Stenberg (8 May 2019)
- [Ricky Leverence brought this change]

  OpenSSL: Report -fips in version if OpenSSL is built with FIPS
  
  Older versions of OpenSSL report FIPS availabilty via an OPENSSL_FIPS
  define. It uses this define to determine whether to publish -fips at
  the end of the version displayed. Applications that utilize the version
  reported by OpenSSL will see a mismatch if they compare it to what curl
  reports, as curl is not modifying the version in the same way. This
  change simply adds a check to see if OPENSSL_FIPS is defined, and will
  alter the reported version to match what OpenSSL itself provides. This
  only appears to be applicable in versions of OpenSSL <1.1.1
  
  Closes #3771

Kamil Dudka (7 May 2019)
- [Frank Gevaerts brought this change]

  nss: allow fifos and character devices for certificates.
  
  Currently you can do things like --cert <(cat ./cert.crt) with (at least) the
  openssl backend, but that doesn't work for nss because is_file rejects fifos.
  
  I don't actually know if this is sufficient, nss might do things internally
  (like seeking back) that make this not work, so actual testing is needed.
  
  Closes #3807

Daniel Gustafsson (6 May 2019)
- test2100: Fix typos in test description

Daniel Stenberg (6 May 2019)
- ssh: define USE_SSH if SSH is enabled (any backend)
  
  Closes #3846

Steve Holme (5 May 2019)
- winbuild: Add our standard copyright header to the winbuild batch files

- makedebug: Fix ERRORLEVEL detection after running where.exe
  
  Closes #3838

Daniel Stenberg (5 May 2019)
- urlapi: add CURLUPART_ZONEID to set and get
  
  The zoneid can be used with IPv6 numerical addresses.
  
  Updated test 1560 to verify.
  
  Closes #3834

- [Taiyu Len brought this change]

  WRITEFUNCTION: add missing set_in_callback around callback
  
  Closes #3837

- RELEASE-NOTES: synced

- CURLMOPT_TIMERFUNCTION.3: warn about the recursive risk [ci skip]
  
  Reported-by: Ricardo Gomes
  
  Bug: #3537
  Closes #3836

- CURLOPT_CHUNK_BGN_FUNCTION.3: document the struct and time value
  
  The time field in the curl_fileinfo struct will always be zero. No code
  was ever implemented to actually convert the date string to a time_t.
  
  Fixes #3829
  Closes #3835

- OS400/ccsidcurl.c: code style fixes

- OS400/ccsidcurl: replace use of Curl_vsetopt
  
  (and make the code style comply)
  
  Fixes #3833

- urlapi: strip off scope id from numerical IPv6 addresses
  
  ... to make the host name "usable". Store the scope id and put it back
  when extracting a URL out of it.
  
  Also makes curl_url_set() syntax check CURLUPART_HOST.
  
  Fixes #3817
  Closes #3822

- RELEASE-NOTES: synced

- multiif.h: remove unused protos
  
  ... for functions related to pipelining. Those functions were removed in
  2f44e94efb3df.
  
  Closes #3828

- [Yiming Jing brought this change]

  travis: mesalink: temporarily disable test 3001
  
  ... due to SHA-1 signatures in test certs

- [Yiming Jing brought this change]

  travis: upgrade the MesaLink TLS backend to v1.0.0
  
  Closes #3823
  Closes #3776

- ConnectionExists: improve non-multiplexing use case
  
  - better log output
  
  - make sure multiplex is enabled for it to be used

- multi: provide Curl_multiuse_state to update information
  
  As soon as a TLS backend gets ALPN conformation about the specific HTTP
  version it can now set the multiplex situation for the "bundle" and
  trigger moving potentially queued up transfers to the CONNECT state.

- process_pending_handles: mark queued transfers as previously pending
  
  With transfers being queued up, we only move one at a a time back to the
  CONNECT state but now we mark moved transfers so that when a moved
  transfer is confirmed "successful" (it connected) it will trigger the
  move of another pending transfer. Previously, it would otherwise wait
  until the transfer was done before doing this. This makes queued up
  pending transfers get processed (much) faster.

- http: mark bundle as not for multiuse on < HTTP/2 response
  
  Fixes #3813
  Closes #3815

Daniel Gustafsson (1 May 2019)
- cookie: Guard against possible NULL ptr deref
  
  In case the name pointer isn't set (due to memory pressure most likely)
  we need to skip the prefix matching and reject with a badcookie to avoid
  a possible NULL pointer dereference.
  
  Closes #3820 #3821
  Reported-by: Jonathan Moerman
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Patrick Monnerat (30 Apr 2019)
- os400: Add CURLOPT_MAXAGE_CONN to ILE/RPG bindings

Kamil Dudka (29 Apr 2019)
- nss: provide more specific error messages on failed init
  
  Closes #3808

Daniel Stenberg (29 Apr 2019)
- [Reed Loden brought this change]

  docs: minor polish to the bug bounty / security docs
  
  Closes #3811

- CURL_MAX_INPUT_LENGTH: largest acceptable string input size
  
  This limits all accepted input strings passed to libcurl to be less than
  CURL_MAX_INPUT_LENGTH (8000000) bytes, for these API calls:
  curl_easy_setopt() and curl_url_set().
  
  The 8000000 number is arbitrary picked and is meant to detect mistakes
  or abuse, not to limit actual practical use cases. By limiting the
  acceptable string lengths we also reduce the risk of integer overflows
  all over.
  
  NOTE: This does not apply to `CURLOPT_POSTFIELDS`.
  
  Test 1559 verifies.
  
  Closes #3805

- [Tseng Jun brought this change]

  curlver.h: use parenthesis in CURL_VERSION_BITS macro
  
  Closes #3809

Marcel Raad (27 Apr 2019)
- [Simon Warta brought this change]

  cmake: rename CMAKE_USE_DARWINSSL to CMAKE_USE_SECTRANSP
  
  Closes https://github.com/curl/curl/pull/3769

Steve Holme (23 Apr 2019)
- ntlm: Missed pre-processor || (or) during rebase for cd15acd0

- ntlm: Support the NT response in the type-3 when OpenSSL doesn't include MD4
  
  Just like we do for mbed TLS, use our local implementation of MD4 when
  OpenSSL doesn't support it. This allows a type-3 message to include the
  NT response.

Daniel Gustafsson (23 Apr 2019)
- INTERNALS: fix misindentation of ToC item
  
  Kerberos was incorrectly indented as a subsection under FTP, which is
  incorrect as they are both top level sections. A fix for this was first
  attempted in commit fef38a0898322f285401c5ff2f5e7c90dbf3be63 but that
  was a few paddles short of being complete.

- [Aron Bergman brought this change]

  INTERNALS: Add structs to ToC
  
  Add the subsections under "Structs in libcurl" to the table of contents.
  
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

- [Aron Bergman brought this change]

  INTERNALS: Add code highlighting
  
  Make all struct members under the Curl_handler section
  print in monospace font.
  
  Closes #3801
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>

Daniel Stenberg (22 Apr 2019)
- docs/BUG-BOUNTY: bug bounty time [skip ci]
  
  Introducing the curl bug bounty program on hackerone. We now recommend
  filing security issues directly in the hackerone ticket system which
  only is readable to curl security team members.
  
  Assisted-by: Daniel Gustafsson
  
  Closes #3488

Steve Holme (22 Apr 2019)
- sasl: Don't send authcid as authzid for the PLAIN mechanism as per RFC 4616
  
  RFC 4616 specifies the authzid is optional in the client authentication
  message and that the server will derive the authorisation identity
  (authzid) from the authentication identity (authcid) when not specified
  by the client.

Jay Satiro (22 Apr 2019)
- [Gisle Vanem brought this change]

  memdebug: fix variable name
  
  Follow-up to 76b6348 which renamed logfile as curl_dbg_logfile.
  
  Ref: https://github.com/curl/curl/commit/76b6348#r33259088

Steve Holme (21 Apr 2019)
- vauth/cleartext: Don't send the authzid if it is empty
  
  Follow up to 762a292f.

Daniel Stenberg (21 Apr 2019)
- test 196,197,198: add 'retry' keyword [skip ci]

- RELEASE-NOTES: synced

- CURLOPT_MAXAGE_CONN: set the maximum allowed age for conn reuse
  
  ... and disconnect too old ones instead of trying to reuse.
  
  Default max age is set to 118 seconds.
  
  Ref: #3722
  Closes #3782

Daniel Gustafsson (20 Apr 2019)
- [Po-Chuan Hsieh brought this change]

  altsvc: Fix building with cookies disables
  
  ALTSVC requires Curl_get_line which is defined in lib/cookie.c inside a #if
  check of HTTP and COOKIES. That makes Curl_get_line undefined if COOKIES is
  disabled. Fix by splitting out the function into a separate file which can
  be included where needed.
  
  Closes #3717
  Reviewed-by: Daniel Gustafsson <daniel@yesql.se>
  Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com>

Daniel Stenberg (20 Apr 2019)
- test1002: correct the name [skip ci]

- test660: verify CONNECT_ONLY with IMAP
  
  which basically just makes sure LOGOUT is *not* issued on disconnect

- Curl_disconnect: treat all CONNECT_ONLY connections as "dead"
  
  Since the connection has been used by the "outside" we don't know the
  state of it anymore and curl should not use it anymore.
  
  Bug: https://curl.haxx.se/mail/lib-2019-04/0052.html
  
  Closes #3795

- multi: fix the statenames (follow-up fix from 2f44e94efb3df8e)
  
  The list of names must be in sync with the defined states in the header
  file!

Steve Holme (16 Apr 2019)
- openvms: Remove pre-processors for Windows as VMS cannot support them

- openvms: Remove pre-processor for SecureTransport as VMS cannot support it
  
  Fixes #3768
  Closes #3785

Jay Satiro (16 Apr 2019)
- TODO: Add issue link to an existing entry

Daniel Stenberg (16 Apr 2019)
- RELEASE-NOTES: synced

Jay Satiro (16 Apr 2019)
- tool_help: Warn if curl and libcurl versions do not match
  
  .. because functionality may be affected if the versions differ.
  
  This commit implements TODO 18.7 "warning if curl version is not in sync
  with libcurl version".
  
  Ref: https://github.com/curl/curl/blob/curl-7_64_1/docs/TODO#L1028-L1033
  
  Closes https://github.com/curl/curl/pull/3774

Steve Holme (16 Apr 2019)
- md5: Update the function signature following d84da52d

- md5: Forgot to update the code alignment in d84da52d

- md5: Return CURLcode from the internally accessible functions
  
  Following 28f826b3 to return CURLE_OK instead of numeric 0.

Daniel Gustafsson (15 Apr 2019)
- tests: Run global cleanup at end of tests
  
  Make sure to run curl_global_cleanup() when shutting down the test
  suite to release any resources allocated in the SSL setup. This is
  clearly visible when running tests with PolarSSL where the thread
  lock calloc() memory which isn't released when not running cleanup.
  Below is an excerpt from the autobuild logs:
  
    ==12368== 96 bytes in 1 blocks are possibly lost in loss record 1 of 2
    ==12368== at 0x4837B65: calloc (vg_replace_malloc.c:752)
    ==12368== by 0x11A76E: curl_dbg_calloc (memdebug.c:205)
    ==12368== by 0x145CDF: Curl_polarsslthreadlock_thread_setup
                           (polarssl_threadlock.c:54)
    ==12368== by 0x145B37: Curl_polarssl_init (polarssl.c:865)
    ==12368== by 0x14129D: Curl_ssl_init (vtls.c:171)
    ==12368== by 0x118B4C: global_init (easy.c:158)
    ==12368== by 0x118BF5: curl_global_init (easy.c:221)
    ==12368== by 0x118D0B: curl_easy_init (easy.c:299)
    ==12368== by 0x114E96: test (lib1906.c:32)
    ==12368== by 0x115495: main (first.c:174)
  
  Closes #3783
  Reviewed-by: Marcel Raad <Marcel.Raad@teamviewer.com>
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Marcel Raad (15 Apr 2019)
- travis: use mbedtls from Xenial
  
  No need to build it from source anymore.
  
  Closes https://github.com/curl/curl/pull/3779

- travis: use libpsl from Xenial
  
  This makes building libpsl and libidn2 from source unnecessary and
  removes the need for the autopoint and libunistring-dev packages.
  
  Closes https://github.com/curl/curl/pull/3779

Daniel Stenberg (15 Apr 2019)
- runtests: start socksd like other servers
  
  ... without a $srcdir prefix. Triggered by the failures in several
  autobuilds.
  
  Closes #3781

Daniel Gustafsson (14 Apr 2019)
- socksd: Fix typos
  
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

- socksd: Properly decorate static variables
  
  Mark global variables static to avoid compiler warning in Clang when
  using -Wmissing-variable-declarations.
  
  Closes #3778
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (14 Apr 2019)
- md(4|5): Fixed indentation oddities with the importation of replacement code
  
  The indentation from 211d5329 and 57d6d253 was a little strange as
  parts didn't align correctly, uses 4 spaces rather than 2. Checked
  the indentation of the original source so it aligns, albeit, using
  curl style.

- md5: Code style to return CURLE_OK rather than numeric 0

- md5: Corrected code style for some pointer arguments

Marcel Raad (13 Apr 2019)
- travis: update some builds to xenial
  
  Xenial comes with more up-to-date software versions and more available
  packages, some of which we currently build from source. Unfortunately,
  some builds would fail with Xenial because of assertion failures in
  Valgrind when using OpenSSL, so leave these at Trusty.
  
  Closes https://github.com/curl/curl/pull/3777

Daniel Stenberg (13 Apr 2019)
- test: make tests and test scripts use socksd for SOCKS
  
  Make all SOCKS tests use socksd instead of ssh.

- socksd: new SOCKS 4+5 server for tests
  
  Closes #3752

- singleipconnect: show port in the verbose "Trying ..." message
  
  To aid debugging better.

- [tmilburn brought this change]

  CURLOPT_ADDRESS_SCOPE: fix range check and more
  
  Commit 9081014 fixed most of the confusing issues between scope id and
  scope however 844896d added bad limits checking assuming that the scope
  is being set and not the scope id.
  
  I have fixed the documentation so it all refers to scope ids.
  
  In addition Curl_if2ip refered to the scope id as remote_scope_id which
  is incorrect, so I renamed it to local_scope_id.
  
  Adjusted-by: Daniel Stenberg
  
  Closes #3655
  Closes #3765
  Fixes #3713

- urlapi: stricter CURLUPART_PORT parsing
  
  Only allow well formed decimal numbers in the input.
  
  Document that the number MUST be between 1 and 65535.
  
  Add tests to test 1560 to verify the above.
  
  Ref: https://github.com/curl/curl/issues/3753
  Closes #3762

Jay Satiro (13 Apr 2019)
- [Jan Ehrhardt brought this change]

  winbuild: Support MultiSSL builds
  
  - Remove the lines in winbuild/Makefile.vc that generate an error with
    multiple SSL backends.
  
  - Add /DCURL_WITH_MULTI_SSL in winbuild/MakefileBuild.vc if multiple SSL
    backends are set.
  
  Closes https://github.com/curl/curl/pull/3772

Daniel Stenberg (12 Apr 2019)
- travis: remove mesalink builds (temporarily?)
  
  Since the mesalink build started to fail on travis, even though we build
  a fixed release version, we disable it to prevent it from blocking
  progress.
  
  Closes #3767

- openssl: mark connection for close on TLS close_notify
  
  Without this, detecting and avoid reusing a closed TLS connection
  (without a previous GOAWAY) when doing HTTP/2 is tricky.
  
  Reported-by: Tom van der Woerdt
  Fixes #3750
  Closes #3763

- RELEASE-NOTES: synced

Steve Holme (11 Apr 2019)
- vauth/cleartext: Update the PLAIN login function signature to match RFC 4616
  
  Functionally this doesn't change anything as we still use the username
  for both the authorisation identity and the authentication identity.
  
  Closes #3757

Daniel Stenberg (11 Apr 2019)
- test1906: verify CURLOPT_CURLU + CURLOPT_PORT usage
  
  Based-on-code-by: Poul T Lomholt

- url: always clone the CUROPT_CURLU handle
  
  Since a few code paths actually update that data.
  
  Fixes #3753
  Closes #3761
  
  Reported-by: Poul T Lomholt

- CURLOPT_DNS_USE_GLOBAL_CACHE: remove
  
  Remove the code too. The functionality has been disabled in code since
  7.62.0. Setting this option will from now on simply be ignored and have
  no function.
  
  Closes #3654

Marcel Raad (11 Apr 2019)
- travis: install libgnutls28-dev only for --with-gnutls build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libnss3-dev only for --with-nss build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libssh2-dev only for --with-libssh2 build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install libssh-dev only for --with-libssh build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install krb5-user only for --with-gssapi build
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install lcov only for the coverage job
  
  Reduces the time needed for the other jobs a little.
  
  Closes https://github.com/curl/curl/pull/3721

- travis: install clang only when needed
  
  This reduces the GCC job runtimes a little and it's needed to
  selectively update clang builds to xenial.
  
  Closes https://github.com/curl/curl/pull/3721

- AppVeyor: enable testing for WinSSL build
  
  Closes https://github.com/curl/curl/pull/3725

- build: fix Codacy/CppCheck warnings
  
  - remove unused variables
  - declare conditionally used variables conditionally
  - suppress unused variable warnings in the CMake tests
  - remove dead variable stores
  - consistently use WIN32 macro to detect Windows
  
  Closes https://github.com/curl/curl/pull/3739

- polarssl_threadlock: remove conditionally unused code
  
  Make functions no-ops if neither both USE_THREADS_POSIX and
  HAVE_PTHREAD_H nor both USE_THREADS_WIN32 and HAVE_PROCESS_H are
  defined. Previously, if only one of them was defined, there was either
  code compiled that did nothing useful or the wrong header included for
  the functions used.
  
  Also, move POLARSSL_MUTEX_T define to implementation file as it's not
  used externally.
  
  Closes https://github.com/curl/curl/pull/3739

- lib557: initialize variables
  
  These variables are only conditionally initialized.
  
  Closes https://github.com/curl/curl/pull/3739

- lib509: add missing include for strdup
  
  Closes https://github.com/curl/curl/pull/3739

- README.md: fix no-consecutive-blank-lines Codacy warning
  
  Consistently use one blank line between blocks.
  
  Closes https://github.com/curl/curl/pull/3739

- tests/server/util: fix Windows Unicode build
  
  Always use the ANSI version of FormatMessage as we don't have the
  curl_multibyte gear available here.
  
  Closes https://github.com/curl/curl/pull/3758

Daniel Stenberg (11 Apr 2019)
- curl_easy_getinfo.3: fix minor formatting mistake

Daniel Gustafsson (11 Apr 2019)
- xattr: skip unittest on unsupported platforms
  
  The stripcredentials unittest fails to compile on platforms without
  xattr support, for example the Solaris member in the buildfarm which
  fails with the following:
  
    CC unit1621-unit1621.o
    CC ../libtest/unit1621-first.o
    CCLD unit1621
    Undefined first referenced
    symbol in file
    stripcredentials unit1621-unit1621.o
    goto problem 2
    ld: fatal: symbol referencing errors. No output written to .libs/unit1621
    collect2: error: ld returned 1 exit status
    gmake[2]: *** [Makefile:996: unit1621] Error 1
  
  Fix by excluding the test on such platforms by using the reverse
  logic from where stripcredentials() is defined.
  
  Closes #3759
  Reviewed-by: Daniel Stenberg <daniel@haxx.se>

Steve Holme (11 Apr 2019)
- emailL Added reference to RFC8314 for implicit TLS

- README: Schannel, stop calling it "winssl"
  
  Stick to "Schannel" everywhere - follow up to 180501cb.

Jakub Zakrzewski (10 Apr 2019)
- cmake: clear CMAKE_REQUIRED_LIBRARIES after each use
  
  This fixes GSSAPI builds with the libraries in a non-standard location.
  The testing for recv() were failing because it failed to link
  the Kerberos libraries, which are not needed for this or subsequent
  tests.
  
  fixes #3743
  closes #3744

- cmake: avoid linking executable for some tests with cmake 3.6+
  
  With CMAKE_TRY_COMPILE_TARGET_TYPE set to STATIC_LIBRARY, the try_compile()
  (which is used by check_c_source_compiles()) will build static library
  instead of executable. This avoids linking additional libraries in and thus
  speeds up those checks a little.
  
  This commit also avoids #3743 (GSSAPI build errors) on itself with cmake
  3.6 or above. That issue was fixed separately for all versions.
  
  Ref: #3744

- cmake: minor cleanup
  
  - Remove nneeded include_regular_expression.
    It was setting what is already a default.
  
  - Remove duplicated include.
  
  - Don't check for pre-3.0.0 CMake version.
    We already require at least 3.0.0, so it's just clutter.
  
  Ref: #3744

Steve Holme (8 Apr 2019)
- build-openssl.bat: Fixed support for OpenSSL v1.1.0+

- build-openssl.bat: Perfer the use of if statements rather than goto (where possible)

- build-openssl.bat: Perform the install for each build type directly after the build

- build-openssl.bat: Split the install of static and shared build types

- build-openssl.bat: Split the building of static and shared build types

- build-openssl.bat: Move the installation into a separate function

- build-openssl.bat: Move the build step into a separate function

- build-openssl.bat: Move the OpenSSL configuration into a separate function

- build-openssl.bat: Fixed the BUILD_CONFIG variable not being initialised
  
  Should the parent environment set this variable then the build might
  not be performed as the user intended.

Daniel Stenberg (8 Apr 2019)
- socks: fix error message

- config.d: clarify that initial : and = might need quoting [skip ci]
  
  Fixes #3738
  Closes #3749

- RELEASE-NOTES: synced
  
  bumped to 7.65.0 for next release

- socks5: user name and passwords must be shorter than 256
  
  bytes... since the protocol needs to store the length in a single byte field.
  
  Reported-by: XmiliaH on github
  Fixes #3737
  Closes #3740

- [Jakub Zakrzewski brought this change]

  test: urlapi: urlencode characters above 0x7f correctly

- [Jakub Zakrzewski brought this change]

  urlapi: urlencode characters above 0x7f correctly
  
  fixes #3741
  Closes #3742

- [Even Rouault brought this change]

  multi_runsingle(): fix use-after-free
  
  Fixes #3745
  Closes #3746
  
  The following snippet
  ```
  
  int main()
  {
      CURL* hCurlHandle = curl_easy_init();
      curl_easy_setopt(hCurlHandle, CURLOPT_URL, "http://example.com");
      curl_easy_setopt(hCurlHandle, CURLOPT_PROXY, "1");
      curl_easy_perform(hCurlHandle);
      curl_easy_cleanup(hCurlHandle);
      return 0;
  }
  ```
  triggers the following Valgrind warning
  
  ```
  ==4125== Invalid read of size 8
  ==4125==    at 0x4E7D1EE: Curl_llist_remove (llist.c:97)
  ==4125==    by 0x4E7EF5C: detach_connnection (multi.c:798)
  ==4125==    by 0x4E80545: multi_runsingle (multi.c:1451)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ==4125==  Address 0x9b3d1d0 is 1,120 bytes inside a block of size 1,600 free'd
  ==4125==    at 0x4C2ECF0: free (vg_replace_malloc.c:530)
  ==4125==    by 0x4E62C36: conn_free (url.c:756)
  ==4125==    by 0x4E62D34: Curl_disconnect (url.c:818)
  ==4125==    by 0x4E48DF9: Curl_once_resolved (hostip.c:1097)
  ==4125==    by 0x4E8052D: multi_runsingle (multi.c:1446)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ==4125==  Block was alloc'd at
  ==4125==    at 0x4C2F988: calloc (vg_replace_malloc.c:711)
  ==4125==    by 0x4E6438E: allocate_conn (url.c:1654)
  ==4125==    by 0x4E685B4: create_conn (url.c:3496)
  ==4125==    by 0x4E6968F: Curl_connect (url.c:4023)
  ==4125==    by 0x4E802E7: multi_runsingle (multi.c:1368)
  ==4125==    by 0x4E8197C: curl_multi_perform (multi.c:2072)
  ==4125==    by 0x4E766A0: easy_transfer (easy.c:625)
  ==4125==    by 0x4E76915: easy_perform (easy.c:719)
  ==4125==    by 0x4E7697C: curl_easy_perform (easy.c:738)
  ==4125==    by 0x4008BE: main (in /home/even/curl/test)
  ```
  
  This has been bisected to commit 2f44e94
  
  Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=14109
  Credit to OSS Fuzz

- pipelining: removed
  
  As previously planned and documented in DEPRECATE.md, all pipelining
  code is removed.
  
  Closes #3651

- [cclauss brought this change]

  tests: make Impacket (SMB server) Python 3 compatible
  
  Closes #3731
  Fixes #3289

Marcel Raad (6 Apr 2019)
- [Simon Warta brought this change]

  cmake: set SSL_BACKENDS
  
  This groups all SSL backends into the feature "SSL" and sets the
  SSL_BACKENDS analogue to configure.ac
  
  Closes https://github.com/curl/curl/pull/3736

- [Simon Warta brought this change]

  cmake: don't run SORT on empty list
  
  In case of an empty list, SORTing leads to the cmake error "list
  sub-command SORT requires list to be present."
  
  Closes https://github.com/curl/curl/pull/3736

Daniel Gustafsson (5 Apr 2019)
- [Eli Schwartz brought this change]

  configure: fix default location for fish completions
  
  Fish defines a vendor completions directory for completions that are not
  installed as part of the fish project itself, and the vendor completions
  are preferred if they exist. This prevents trying to overwrite the
  builtin curl.fish completion (or creating file conflicts in distro
  packaging).
  
  Prefer the pkg-config defined location exported by fish, if it can be
  found, and fall back to the correct directory defined by most systems.
  
  Closes #3723
  Reviewed-by: Daniel Gustafsson

Marcel Raad (5 Apr 2019)
- ftplistparser: fix LGTM alert "Empty block without comment"
  
  Removing the block is consistent with line 954/957.
  
  Closes https://github.com/curl/curl/pull/3732

- transfer: fix LGTM alert "Comparison is always true"
  
  Just remove the redundant condition, which also makes it clear that
  k->buf is always 0-terminated if this break is not hit.
  
  Closes https://github.com/curl/curl/pull/3732

Jay Satiro (4 Apr 2019)
- [Rikard Falkeborn brought this change]

  smtp: fix compiler warning
  
  - Fix clang string-plus-int warning.
  
  Clang 8 warns about adding a string to an int does not append to the
  string. Indeed it doesn't, but that was not the intention either. Use
  array indexing as suggested to silence the warning. There should be no
  functional changes.
  
  (In other words clang warns about "foo"+2 but not &"foo"[2] so use the
  latter.)
  
  smtp.c:1221:29: warning: adding 'int' to a string does not append to the
  string [-Wstring-plus-int]
        eob = strdup(SMTP_EOB + 2);
              ~~~~~~~~~~~~~~~~^~~~
  
  Closes https://github.com/curl/curl/pull/3729

Marcel Raad (4 Apr 2019)
- VS projects: use Unicode for VC10+
  
  All Windows APIs have been natively UTF-16 since Windows 2000 and the
  non-Unicode variants are just wrappers around them. Only Windows 9x
  doesn't understand Unicode without the UnicoWS DLL. As later Visual
  Studio versions cannot target Windows 9x anyway, using the ANSI API
  doesn't really have any benefit there.
  
  This avoids issues like KNOWN_BUGS 6.5.
  
  Ref: https://github.com/curl/curl/issues/2120
  Closes https://github.com/curl/curl/pull/3720

Daniel Gustafsson (3 Apr 2019)
- RELEASE-NOTES: synced
  
  Bump the version in progress to 7.64.2, if we merge any "change"
  before the cut-off date we can update the version.

- [Tim Rühsen brought this change]

  documentation: Fix several typos
  
  Closes #3724
  Reviewed-by: Jakub Zakrzewski
  Reviewed-by: Daniel Gustafsson

Jay Satiro (2 Apr 2019)
- [Mert Yazıcıoğlu brought this change]

  vauth/oauth2: Fix OAUTHBEARER token generation
  
  OAUTHBEARER tokens were incorrectly generated in a format similar to
  XOAUTH2 tokens. These changes make OAUTHBEARER tokens conform to the
  RFC7628.
  
  Fixes: #2487
  Reported-by: Paolo Mossino
  
  Closes https://github.com/curl/curl/pull/3377

Marcel Raad (2 Apr 2019)
- tool_cb_wrt: fix bad-function-cast warning
  
  Commit f5bc578f4cdfdc6c708211dfc2962a0e9d79352d reintroduced the
  warning fixed in commit 2f5f31bb57d68b54e03bffcd9648aece1fe564f8.
  Extend fhnd's scope and reuse that variable instead of calling
  _get_osfhandle a second time to fix the warning again.
  
  Closes https://github.com/curl/curl/pull/3718

- VC15 project: remove MinimalRebuild
  
  Already done in commit d5cfefd0ea8e331b884186bff484210fad36e345 for the
  library project, but I forgot the tool project template. Now also
  removed for that.

Dan Fandrich (1 Apr 2019)
- cirrus: Customize the disabled tests per FreeBSD version
  
  Try to run as many test cases as possible on each OS version.
  12.0 passes 13 more tests than the older versions, so we might as well
  run them.

Daniel Stenberg (1 Apr 2019)
- tool_help: include <strings.h> for strcasecmp
  
  Reported-by: Wyatt O'Day
  Fixes #3715
  Closes #3716

Daniel Gustafsson (31 Mar 2019)
- scripts: fix typos

Dan Fandrich (28 Mar 2019)
- travis: allow builds on branches named "ci"
  
  This allows a way to test changes other than through PRs.

Daniel Stenberg (27 Mar 2019)
- [Brad Spencer brought this change]

  resolve: apply Happy Eyeballs philosophy to parallel c-ares queries
  
  Closes #3699

- multi: improved HTTP_1_1_REQUIRED handling
  
  Make sure to downgrade to 1.1 even when we get this HTTP/2 stream error
  on first flight.
  
  Reported-by: niner on github
  Fixes #3696
  Closes #3707

- [Leonardo Taccari brought this change]

  configure: avoid unportable `==' test(1) operator
  
  Closes #3709

Version 7.64.1 (27 Mar 2019)

Daniel Stenberg (27 Mar 2019)
- RELEASE: 7.64.1

- Revert "ntlm: remove USE_WIN32_CRYPTO check to get USE_NTLM2SESSION set"
6400
6401
6402
6403
6404
6405
6406
6407
6408
6409
6410
6411
6412
6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433
6434
6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472
6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505
6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602
6603
6604
6605
6606
6607
6608
6609
6610
6611
6612
6613
6614
6615
6616
6617
6618
6619
6620
6621
6622
6623
6624
6625
6626
6627
6628
6629
6630
6631
6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660
6661
6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716
6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729
6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741
6742
6743
6744
6745
6746
6747
6748
6749
6750
6751
6752
6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
6771
6772
6773
6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829
6830
6831
6832
6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850
6851
6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883
6884
6885
6886
6887
6888
6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007
7008
7009
7010
7011
7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042
7043
7044
7045
7046
7047
7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075
7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
7898
7899
7900
7901
7902
7903
7904













































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
  Closes https://github.com/curl/curl/pull/2808

Daniel Stenberg (29 Jul 2018)
- test1157: follow-up to 35ecffb9
  
  Ignore the user-agent line.
  Pointed-out-by: Marcel Raad

Michael Kaufmann (29 Jul 2018)
- tests/http_pipe.py: Use /usr/bin/env to find python

Daniel Stenberg (28 Jul 2018)
- TODO: Support Authority Information Access certificate extension (AIA)
  
  Closes #2793

- conn_free: updated comment to clarify
  
  Let's call it disassociate instead of disconnect since the latter term
  is used so much for (TCP) connections already.

- test1157: test -H from empty file
  
  Verifies bugfix #2797

- [Tobias Blomberg brought this change]

  curl: Fix segfault when -H @headerfile is empty
  
  The curl binary would crash if the -H command line option was given a
  filename to read using the @filename syntax but that file was empty.
  
  Closes #2797

- mime: check Curl_rand_hex's return code
  
  Bug: https://curl.haxx.se/mail/archive-2018-07/0015.html
  Reported-by: Jeffrey Walton
  Closes #2795

- [Josh Bialkowski brought this change]

  docs/examples: add hiperfifo example using linux epoll/timerfd
  
  Closes #2804

- [Darío Hereñú brought this change]

  docs/INSTALL.md: minor formatting fixes
  
  Closes #2794

- [Christopher Head brought this change]

  docs/CURLOPT_URL: fix indentation
  
  The statement, “The application does not have to keep the string around
  after setting this option,” appears to be indented under the RTMP
  paragraph. It actually applies to all protocols, not just RTMP.
  Eliminate the extra indentation.
  
  Closes #2788

- [Christopher Head brought this change]

  docs/CURLOPT_WRITEFUNCTION: size is always 1
  
  For compatibility with `fwrite`, the `CURLOPT_WRITEFUNCTION` callback is
  passed two `size_t` parameters which, when multiplied, designate the
  number of bytes of data passed in. In practice, CURL always sets the
  first parameter (`size`) to 1.
  
  This practice is also enshrined in documentation and cannot be changed
  in future. The documentation states that the default callback is
  `fwrite`, which means `fwrite` must be a suitable function for this
  purpose. However, the documentation also states that the callback must
  return the number of *bytes* it successfully handled, whereas ISO C
  `fwrite` returns the number of items (each of size `size`) which it
  wrote. The only way these numbers can be equal is if `size` is 1.
  
  Since `size` is 1 and can never be changed in future anyway, document
  that fact explicitly and let users rely on it.
  
  Closes #2787

- [Carie Pointer brought this change]

  wolfSSL/CyaSSL: Fix memory leak in Curl_cyassl_random
  
  RNG structure must be freed by call to FreeRng after its use in
  Curl_cyassl_random. This call fixes Valgrind failures when running the
  test suite with wolfSSL.
  
  Closes #2784

- [Even Rouault brought this change]

  reuse_conn(): free old_conn->options
  
  This fixes a memory leak when CURLOPT_LOGIN_OPTIONS is used, together with
  connection reuse.
  
  I found this with oss-fuzz on GDAL and curl master:
  https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9582
  I couldn't reproduce with the oss-fuzz original test case, but looking
  at curl source code pointed to this well reproducable leak.
  
  Closes #2790

Marcel Raad (25 Jul 2018)
- [Daniel Jelinski brought this change]

  system_win32: fix version checking
  
  In the current version, VERSION_GREATER_THAN_EQUAL 6.3 will return false
  when run on windows 10.0. This patch addresses that error.
  
  Closes https://github.com/curl/curl/pull/2792

Daniel Stenberg (24 Jul 2018)
- [Johannes Schindelin brought this change]

  auth: pick Bearer authentication whenever a token is available
  
  So far, the code tries to pick an authentication method only if
  user/password credentials are available, which is not the case for
  Bearer authentictation...
  
  Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  Closes #2754

- [Johannes Schindelin brought this change]

  auth: only ever pick CURLAUTH_BEARER if we *have* a Bearer token
  
  The Bearer authentication was added to cURL 7.61.0, but there is a
  problem: if CURLAUTH_ANY is selected, and the server supports multiple
  authentication methods including the Bearer method, we strongly prefer
  that latter method (only CURLAUTH_NEGOTIATE beats it), and if the Bearer
  authentication fails, we will never even try to attempt any other
  method.
  
  This is particularly unfortunate when we already know that we do not
  have any Bearer token to work with.
  
  Such a scenario happens e.g. when using Git to push to Visual Studio
  Team Services (which supports Basic and Bearer authentication among
  other methods) and specifying the Personal Access Token directly in the
  URL (this aproach is frequently taken by automated builds).
  
  Let's make sure that we have a Bearer token to work with before we
  select the Bearer authentication among the available authentication
  methods.
  
  Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  Closes #2754

Marcel Raad (22 Jul 2018)
- test320: treat curl320.out file as binary
  
  Otherwise, LF line endings are converted to CRLF on Windows,
  but no conversion is done for the reply, so the test case fails.
  
  Closes https://github.com/curl/curl/pull/2776

Daniel Stenberg (22 Jul 2018)
- vtls: set conn->data when closing TLS
  
  Follow-up to 1b76c38904f0. The VTLS backends that close down the TLS
  layer for a connection still needs a Curl_easy handle for the session_id
  cache etc.
  
  Fixes #2764
  Closes #2771

Marcel Raad (21 Jul 2018)
- tests: fixes for Windows line endlings
  
  Set mode="text" when line endings depend on the system representation.
  
  Closes https://github.com/curl/curl/pull/2772

- test214: disable MSYS2's POSIX path conversion for URL
  
  By default, the MSYS2 bash converts all backslashes to forward slashes
  in URLs. Disable this with MSYS2_ARG_CONV_EXCL for the test to pass.
  
  Ref https://github.com/msys2/msys2/wiki/Porting#filesystem-namespaces

Daniel Stenberg (20 Jul 2018)
- http2: several cleanups
  
  - separate easy handle from connections better
  - added asserts on a number of places
  - added sanity check of pipelines for debug builds
  
  Closes #2751

- smb_getsock: always wait for write socket too
  
  ... the protocol is doing read/write a lot, so it needs to write often
  even when downloading. A more proper fix could check for eactly when it
  wants to write and only ask for it then.
  
  Without this fix, an SMB download could easily get stuck when the event-driven
  API was used.
  
  Closes #2768

Marcel Raad (20 Jul 2018)
- test1143: disable MSYS2's POSIX path conversion
  
  By default, the MSYS2 bash interprets http:/%HOSTIP:%HTTPPORT/want/1143
  as a POSIX file list and converts it to a Windows file list.
  Disable this with MSYS2_ARG_CONV_EXCL for the test to pass.
  
  Ref https://github.com/msys2/msys2/wiki/Porting#filesystem-namespaces
  Closes https://github.com/curl/curl/pull/2765

Daniel Stenberg (18 Jul 2018)
- RELEASE-NOTES: sync
  
  ... and work toward 7.61.1

- [Ruslan Baratov brought this change]

  CMake: Update scripts to use consistent style
  
  Closes #2727
  Reviewed-by: Sergei Nikulov

- header output: switch off all styles, not just unbold
  
  ... the "unbold" sequence doesn't work on the mac Terminal.
  
  Reported-by: Zero King
  Fixes #2736
  Closes #2738

Nick Zitzmann (14 Jul 2018)
- [Rodger Combs brought this change]

  darwinssl: add support for ALPN negotiation

Marcel Raad (14 Jul 2018)
- test1422: add required file feature
  
  curl configured with --enable-debug --disable-file currently complains
  on test1422:
  Info: Protocol "file" not supported or disabled in libcurl
  
  Make test1422 dependend on enabled FILE protocol to fix this.
  
  Fixes https://github.com/curl/curl/issues/2741
  Closes https://github.com/curl/curl/pull/2742

Patrick Monnerat (12 Jul 2018)
- content_encoding: accept up to 4 unknown trailer bytes after raw deflate data
  
  Some servers issue raw deflate data that may be followed by an undocumented
  trailer. This commit makes curl tolerate such a trailer of up to 4 bytes
  before considering the data is in error.
  
  Reported-by: clbr on github
  Fixes #2719

Daniel Stenberg (12 Jul 2018)
- smb: fix memory-leak in URL parse error path
  
  Detected by OSS-Fuzz
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=9369
  Closes #2740

Marcel Raad (12 Jul 2018)
- schannel: enable CALG_TLS1PRF for w32api >= 5.1
  
  The definition of CALG_TLS1PRF has been fixed in the 5.1 branch:
  https://osdn.net/projects/mingw/scm/git/mingw-org-wsl/commits/73aedcc0f2e6ba370de0d86ab878ad76a0dda7b5

Daniel Stenberg (12 Jul 2018)
- docs/SECURITY-PROCESS: mention bounty, drop pre-notify
  
  + The hackerone bounty and its process
  
  - We don't and can't handle pre-notification

- multi: always do the COMPLETED procedure/state
  
  It was previously erroneously skipped in some situations.
  
  libtest/libntlmconnect.c wrongly depended on wrong behavior (that it
  would get a zero timeout) when no handles are "running" in a multi
  handle. That behavior is no longer present with this fix. Now libcurl
  will always return a -1 timeout when all handles are completed.
  
  Closes #2733

- Curl_getoff_all_pipelines: improved for multiplexed
  
  On multiplexed connections, transfers can be removed from anywhere not
  just at the head as for pipelines.

- ares: check for NULL in completed-callback

- conn: remove the boolean 'inuse' field
  
  ... as the usage needs to be counted.

- [Paul Howarth brought this change]

  openssl: assume engine support in 1.0.0 or later
  
  Commit 38203f1585da changed engine detection to be version-based,
  with a baseline of openssl 1.0.1. This does in fact break builds
  with openssl 1.0.0, which has engine support - the configure script
  detects that ENGINE_cleanup() is available - but <openssl/engine.h>
  doesn't get included to declare it.
  
  According to upstream documentation, engine support was added to
  mainstream openssl builds as of version 0.9.7:
  https://github.com/openssl/openssl/blob/master/README.ENGINE
  
  This commit drops the version test down to 1.0.0 as version 1.0.0d
  is the oldest version I have to test with.
  
  Closes #2732

Marcel Raad (11 Jul 2018)
- schannel: fix MinGW compile break
  
  Original MinGW's w32api has a sytax error in its definition of
  CALG_TLS1PRF [0]. Don't use original MinGW w32api's CALG_TLS1PRF
  until this bug [1] is fixed.
  
  [0] https://osdn.net/projects/mingw/scm/git/mingw-org-wsl/blobs/d1d4a17e51a2b78e252ef0147d483267d56c90cc/w32api/include/wincrypt.h
  [1] https://osdn.net/projects/mingw/ticket/38391
  
  Fixes https://github.com/curl/curl/pull/2721#issuecomment-403636043
  Closes https://github.com/curl/curl/pull/2728

Daniel Stenberg (11 Jul 2018)
- examples/crawler.c: move #ifdef to column 0
  
  Apparently the C => HTML converter on the web site doesn't quite like it
  otherwise.
  
  Reported-by: Jeroen Ooms

Version 7.61.0 (11 Jul 2018)

Daniel Stenberg (11 Jul 2018)
- release: 7.61.0

- TODO: Configurable loading of OpenSSL configuration file
  
  Closes #2724

- post303.d: clarify that this is an RFC violation
  
  ... and not the other way around, which this previously said.
  
  Reported-by: Vasiliy Faronov
  Fixes #2723
  Closes #2726

- [Ruslan Baratov brought this change]

  CMake: remove redundant and old end-of-block syntax
  
  Reviewed-by: Jakub Zakrzewski
  Closes #2715

Jay Satiro (9 Jul 2018)
- lib/curl_setup.h: remove unicode character
  
  Follow-up to 82ce416.
  
  Ref: https://github.com/curl/curl/commit/8272ec5#commitcomment-29646818

Daniel Stenberg (9 Jul 2018)
- lib/curl_setup.h: remove unicode bom from 8272ec50f02

Marcel Raad (9 Jul 2018)
- schannel: fix -Wsign-compare warning
  
  MinGW warns:
  /lib/vtls/schannel.c:219:64: warning: signed and unsigned type in
  conditional expression [-Wsign-compare]
  
  Fix this by casting the ptrdiff_t to size_t as we know it's positive.
  
  Closes https://github.com/curl/curl/pull/2721

- schannel: workaround for wrong function signature in w32api
  
  Original MinGW's w32api has CryptHashData's second parameter as BYTE *
  instead of const BYTE *.
  
  Closes https://github.com/curl/curl/pull/2721

- schannel: make more cipher options conditional
  
  They are not defined in the original MinGW's <wincrypt.h>.
  
  Closes https://github.com/curl/curl/pull/2721

- curl_setup: include <winerror.h> before <windows.h>
  
  Otherwise, only part of it gets pulled in through <windows.h> on
  original MinGW.
  
  Fixes https://github.com/curl/curl/issues/2361
  Closes https://github.com/curl/curl/pull/2721

- examples: fix -Wformat warnings
  
  When size_t is not a typedef for unsigned long (as usually the case on
  Windows), GCC emits -Wformat warnings when using lu and lx format
  specifiers with size_t. Silence them with explicit casts to
  unsigned long.
  
  Closes https://github.com/curl/curl/pull/2721

Daniel Stenberg (9 Jul 2018)
- smtp: use the upload buffer size for scratch buffer malloc
  
  ... not the read buffer size, as that can be set smaller and thus cause
  a buffer overflow! CVE-2018-0500
  
  Reported-by: Peter Wu
  Bug: https://curl.haxx.se/docs/adv_2018-70a2.html

- [Dave Reisner brought this change]

  scripts: include _curl as part of CLEANFILES
  
  Closes #2718

- [Nick Zitzmann brought this change]

  darwinssl: allow High Sierra users to build the code using GCC
  
  ...but GCC users lose out on TLS 1.3 support, since we can't weak-link
  enumeration constants.
  
  Fixes #2656
  Closes #2703

- [Ruslan Baratov brought this change]

  CMake: Remove unused 'output_var' from 'collect_true'
  
  Variable 'output_var' is not used and can be removed.
  Function 'collect_true' renamed to 'count_true'.

- [Ruslan Baratov brought this change]

  CMake: Remove unused functions
  
  Closes #2711

- KNOWN_BUGS: Stick to same family over SOCKS proxy

- libssh: goto DISCONNECT state on error, not SSH_SESSION_FREE
  
  ... because otherwise not everything get closed down correctly.
  
  Fixes #2708
  Closes #2712

- libssh: include line number in state change debug messages
  
  Closes #2713

- KNOWN_BUGS: Borland support is dropped, AIX problem is too old

- [Jeroen Ooms brought this change]

  example/crawler.c: simple crawler based on libxml2
  
  Closes #2706

- RELEASE-NOTES: synced

- DEPRECATE: include year when specifying date

- DEPRECATE: linkified

- DEPRECATE: mention the PR that disabled axTLS

- docs/DEPRECATE.md: spelling and minor formatting

- DEPRECATE: new doc describing planned item removals
  
  Closes #2704

- [Gisle Vanem brought this change]

  telnet: fix clang warnings
  
  telnet.c(1401,28): warning: cast from function call of type 'int' to
  non-matching type 'HANDLE' (aka 'void *') [-Wbad-function-cast]
  
  Fixes #2696
  Closes #2700

- docs: fix missed option name markups

- [Gaurav Malhotra brought this change]

  openssl: Remove some dead code
  
  Closes #2698

- openssl: make the requested TLS version the *minimum* wanted
  
  The code treated the set version as the *exact* version to require in
  the TLS handshake, which is not what other TLS backends do and probably
  not what most people expect either.
  
  Reported-by: Andreas Olsson
  Assisted-by: Gaurav Malhotra
  Fixes #2691
  Closes #2694

- RELEASE-NOTES: synced

- openssl: allow TLS 1.3 by default
  
  Reported-by: Andreas Olsson
  Fixes #2692
  Closes #2693

- [Adrian Peniak brought this change]

  CURLINFO_TLS_SSL_PTR.3: improve the example
  
  The previous example was a little bit confusing, because SSL* structure
  (or other "in use" SSL connection pointer) is not accessible after the
  transfer is completed, therefore working with the raw TLS library
  specific pointer needs to be done during transfer.
  
  Closes #2690

- travis: add a build using the synchronous name resolver
  
  ... since default uses the threaded one and we test the c-ares build
  already.
  
  Closes #2689

- configure: remove CURL_CHECK_NI_WITHSCOPEID too
  
  Since it isn't used either and requires the getnameinfo check
  
  Follow-up to 0aeca41702d2

- getnameinfo: not used
  
  Closes #2687

- easy_perform: use *multi_timeout() to get wait times
  
  ... and trim the threaded Curl_resolver_getsock() to return zero
  millisecond wait times during the first three milliseconds so that
  localhost or names in the OS resolver cache gets detected and used
  faster.
  
  Closes #2685

Max Dymond (27 Jun 2018)
- configure: Add dependent libraries after crypto
  
  The linker is pretty dumb and processes things left to right, keeping a
  tally of symbols it hasn't resolved yet. So, we need -ldl to appear
  after -lcrypto otherwise the linker won't find the dl functions.
  
  Closes #2684

Daniel Stenberg (27 Jun 2018)
- GOVERNANCE: linkify, changed some titles

- GOVERNANCE: add maintainer details/duties

- url: check Curl_conncache_add_conn return code
  
  ... it was previously unchecked in two places and thus errors could
  remain undetected and cause trouble.
  
  Closes #2681

- include/README: remove "hacking" advice, not the right place

- RELEASE-NOTES: synced

- CURLOPT_SSL_VERIFYPEER.3: fix syntax mistake
  
  Follow-up to b6a16afa0aa5

- netrc: use a larger buffer
  
  ... to work with longer passwords etc. Grow it from a 256 to a 4096
  bytes buffer.
  
  Reported-by: Dario Nieuwenhuis
  Fixes #2676
  Closes #2680

- [Patrick Schlangen brought this change]

  CURLOPT_SSL_VERIFYPEER.3: Add performance note
  
  Closes #2673

- [Javier Blazquez brought this change]

  multi: fix crash due to dangling entry in connect-pending list
  
  Fixes #2677
  Closes #2679

- ConnectionExists: make sure conn->data is set when "taking" a connection
  
  Follow-up to 2c15693.
  
  Bug #2674
  Closes #2675

- [Kevin R. Bulgrien brought this change]

  system.h: fix for gcc on 32 bit OpenServer
  
  Bug: https://curl.haxx.se/mail/lib-2018-06/0100.html

- [Raphael Gozzo brought this change]

  cmake: allow multiple SSL backends
  
  This will make possible to select the SSL backend (using
  curl_global_sslset()) even when the libcurl is built using CMake
  
  Closes #2665

- url: fix dangling conn->data pointer
  
  By masking sure to use the *current* easy handle with extracted
  connections from the cache, and make sure to NULLify the ->data pointer
  when the connection is put into the cache to make this mistake easier to
  detect in the future.
  
  Reported-by: Will Dietz
  Fixes #2669
  Closes #2672

- CURLOPT_INTERFACE.3: interface names not supported on Windows

- travis: run more tests for coverage check
  
  ... run a few more tortured based and run all tests event-based.
  
  Closes #2664

- multi: fix memory leak when stopped during name resolve
  
  When the application just started the transfer and then stops it while
  the name resolve in the background thread hasn't completed, we need to
  wait for the resolve to complete and then cleanup data accordingly.
  
  Enabled test 1553 again and added test 1590 to also check when the host
  name resolves successfully.
  
  Detected by OSS-fuzz.
  Closes #1968

Viktor Szakats (15 Jun 2018)
- maketgz: delete .bak files, fix indentation
  
  Ref: https://github.com/curl/curl/pull/2660
  
  Closes https://github.com/curl/curl/pull/2662

Daniel Stenberg (15 Jun 2018)
- runtests.pl: remove debug leftover from bb9a340c73f3

- curl-confopts.m4: fix typo from ed224f23d5beb
  
  Fixes my local configure to detect a custom installed c-ares without
  pkgconfig.

- docs/RELEASE-PROCEDURE.md: renamed to use .md extension
  
  Closes #2663

- RELEASE-PROCEDURE: gpg sign the tags

- RELEASE-NOTES: synced

- CURLOPT_HTTPAUTH.3: CURLAUTH_BEARER was added in 7.61.0

- [Mamta Upadhyay brought this change]

  maketgz: fix sed issues on OSX
  
  maketgz creates release tarballs and removes the -DEV string in curl
  version (e.g. 7.58.0-DEV), else -DEV shows up on command line when curl
  is run. maketgz works fine on linux but fails on OSX. Problem is with
  the sed commands that use option -i without an extension. Maketgz
  expects GNU sed instead of BSD and this simply won't work on OSX. Adding
  a backup extension .bak after -i fixes this issue
  
  Running the script as if on OSX gives this error:
  
  sed: -e: No such file or directory
  
  Adding a .bak extension resolves it
  
  Closes #2660

- configure: enhance ability to detect/build with static openssl
  
  Fix the -ldl and -ldl + -lpthread checks for OpenSSL, necessary for
  building with static libs without pkg-config.
  
  Reported-by: Marcel Raad
  Fixes #2199
  Closes #2659

- configure: use pkg-config for c-ares detection
  
  First check if there's c-ares information given as pkg-config info and use
  that as first preference.
  
  Reported-by: pszemus on github
  Fixes #2203
  Closes #2658

- GOVERNANCE.md: explains how this project is run
  
  Closes #2657

- KNOWN_BUGS: NTLM doen't support password with § character
  
  Closes #2120

- KNOWN_BUGS: slow connect to localhost on Windows
  
  Closes #2281

- [Matteo Bignotti brought this change]

  mk-ca-bundle.pl: make -u delete certdata.txt if found not changed
  
  certdata.txt should be deleted also when the process is interrupted by
  "same certificate downloaded, exiting"
  
  The certdata.txt is currently kept on disk even if you give the -u
  option
  
  Closes #2655

- progress: remove a set of unused defines
  
  Reported-by: Peter Wu
  Closes #2654

- TODO: "Option to refuse usernames in URLs" done
  
  Implemented by Björn in 946ce5b61f

- [Lyman Epp brought this change]

  Curl_init_do: handle NULL connection pointer passed in
  
  Closes #2653

- runtests: support variables in <strippart>
  
  ... and make use of that to make 1455 work better without using a fixed
  local port number.
  
  Fixes #2649
  Closes #2650

- Curl_debug: remove dead printhost code
  
  The struct field is never set (since 5e0d9aea3) so remove the use of it
  and remove the connectdata pointer from the prototype.
  
  Reported-by: Tejas
  Bug: https://curl.haxx.se/mail/lib-2018-06/0054.html
  Closes #2647

Viktor Szakats (12 Jun 2018)
- schannel: avoid incompatible pointer warning
  
  with clang-6.0:
  ```
  vtls/schannel_verify.c: In function 'add_certs_to_store':
  vtls/schannel_verify.c:212:30: warning: passing argument 11 of 'CryptQueryObject' from incompatible pointer type [-Wincompatible-pointer-types]
                                &cert_context)) {
                                ^
  In file included from /usr/share/mingw-w64/include/schannel.h:10:0,
                   from /usr/share/mingw-w64/include/schnlsp.h:9,
                   from vtls/schannel.h:29,
                   from vtls/schannel_verify.c:40:
  /usr/share/mingw-w64/include/wincrypt.h:4437:26: note: expected 'const void **' but argument is of type 'CERT_CONTEXT ** {aka struct _CERT_CONTEXT **}'
     WINIMPM WINBOOL WINAPI CryptQueryObject (DWORD dwObjectType, const void *pvObject, DWORD dwExpectedContentTypeFlags, DWORD dwExpectedFormatTypeFlags, DWORD dwFlags,
                            ^~~~~~~~~~~~~~~~
  ```
  Ref: https://msdn.microsoft.com/library/windows/desktop/aa380264
  
  Closes https://github.com/curl/curl/pull/2648

Daniel Stenberg (12 Jun 2018)
- [Robert Prag brought this change]

  schannel: support selecting ciphers
  
  Given the contstraints of SChannel, I'm exposing these as the algorithms
  themselves instead; while replicating the ciphersuite as specified by
  OpenSSL would have been preferable, I found no way in the SChannel API
  to do so.
  
  To use this from the commandline, you need to pass the names of contants
  defining the desired algorithms. For example, curl --ciphers
  "CALG_SHA1:CALG_RSA_SIGN:CALG_RSA_KEYX:CALG_AES_128:CALG_DH_EPHEM"
  https://github.com The specific names come from wincrypt.h
  
  Closes #2630

- [Bernhard M. Wiedemann brought this change]

  test 46: make test pass after 2025
  
  shifting the expiry date to 2037 for now
  to be before the possibly problematic year 2038
  
  similar in spirit to commit e6293cf8764e9eecb
  
  Closes #2646

- [Marian Klymov brought this change]

  cppcheck: fix warnings
  
  - Get rid of variable that was generating false positive warning
  (unitialized)
  
  - Fix issues in tests
  
  - Reduce scope of several variables all over
  
  etc
  
  Closes #2631

- openssl: assume engine support in 1.0.1 or later
  
  Previously it was checked for in configure/cmake, but that would then
  leave other build systems built without engine support.
  
  While engine support probably existed prior to 1.0.1, I decided to play
  safe. If someone experience a problem with this, we can widen the
  version check.
  
  Fixes #2641
  Closes #2644

- RELEASE-NOTES: synced

- RELEASE-PROCEDURE: update the release calendar for 2019

- [Gisle Vanem brought this change]

  boringssl + schannel: undef X509_NAME in lib/schannel.h
  
  Fixes the build problem when both boringssl and schannel are enabled.
  
  Fixes #2634
  Closes #2643

- [Vladimir Kotal brought this change]

  mk-ca-bundle.pl: leave certificate name untouched in decode()
  
  Closes #2640

- [Rikard Falkeborn brought this change]

  tests/libtests/Makefile.am: Add lib1521.c to CLEANFILES
  
  This removes the generated lib1521.c when running make clean.
  
  Closes #2633

- [Rikard Falkeborn brought this change]

  tests/libtest: Add lib1521 to nodist_SOURCES
  
  Since 467da3af0, lib1521.c is generated instead of checked in. According
  to the commit message, the intention was to remove it from the tarball
  as well. However, it is still present when running make dist. To remove
  it, add it to nodist_lib1521_SOURCES. This also means there is no need
  for the manually added dist-rule in the Makefile.
  
  Also update CMakelists.txt to handle the fact that we now may have
  nodist_SOURCES.

- [Stephan Mühlstrasser brought this change]

  system.h: add support for IBM xlc C compiler
  
  Added a section to system.h guarded with __xlc__ for the IBM xml C
  compiler. Before this change the section titled 'generic "safe guess" on
  old 32 bit style' was used, which resulted in a wrong definition of
  CURL_TYPEOF_CURL_SOCKLEN_T, and for 64-bit also CURL_TYPEOF_CURL_OFF_T
  was wrong.
  
  Compilation warnings fixed with this change:
  
    CC       libcurl_la-ftp.lo
  "ftp.c", line 290.55: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "ftp.c", line 293.48: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "ftp.c", line 1070.49: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "ftp.c", line 1154.53: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "ftp.c", line 1187.51: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
    CC       libcurl_la-connect.lo
  "connect.c", line 448.56: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "connect.c", line 516.66: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "connect.c", line 687.55: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  "connect.c", line 696.55: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
    CC       libcurl_la-tftp.lo
  "tftp.c", line 1115.33: 1506-280 (W) Function argument assignment between types "unsigned long* restrict" and "int*" is not allowed.
  
  Closes #2637

- cmdline-opts/cert-type.d: mention "p12" as a recognized type as well

Viktor Szakats (3 Jun 2018)
- spelling fixes
  
  Detected using the `codespell` tool (version 1.13.0).
  
  Also secure and fix an URL.

Daniel Stenberg (2 Jun 2018)
- axtls: follow-up spell fix of comment

- axTLS: not considered fit for use
  
  URL: https://curl.haxx.se/mail/lib-2018-06/0000.html
  
  This is step one. It adds #error statements that require source edits to
  make curl build again if asked to use axTLS. At a later stage we might
  remove the axTLS specific code completely.
  
  Closes #2628

- build: remove the Borland specific makefiles
  
  According to the user survey 2018, not even one out of 670 users use
  them. Nobody on the mailing list spoke up for them either.
  
  Closes #2629

- curl_addrinfo: use same #ifdef conditions in source as header
  
  ... for curl_dofreeaddrinfo

- multi: remove a DEBUGF()
  
  ... it might call infof() with a NULL first argument that isn't harmful
  but makes it not do anything. The infof() line is not very useful
  anymore, it has served it purpose. Good riddance!
  
  Fixes #2627

- [Alibek.Jorajev brought this change]

  CURLOPT_RESOLVE: always purge old entry first
  
  If there's an existing entry using the selected name.
  
  Closes #2622

- fnmatch: use the system one if available
  
  If configure detects fnmatch to be available, use that instead of our
  custom one for FTP wildcard pattern matching. For standard compliance,
  to reduce our footprint and to use already well tested and well
  exercised code.
  
  A POSIX fnmatch behaves slightly different than the internal function
  for a few test patterns currently and the macOS one yet slightly
  different. Test case 1307 is adjusted for these differences.
  
  Closes #2626

Patrick Monnerat (31 May 2018)
- os400: add new option in ILE/RPG binding
  
  Follow-up to commit 946ce5b

Daniel Stenberg (31 May 2018)
- tests/libtest/.gitignore: follow-up fix to ignore lib5* too

- KNOWN_BUGS: CURL_GLOBAL_SSL
  
  Closes #2276

- [Bernhard Walle brought this change]

  configure: check for declaration of getpwuid_r
  
  On our x86 Android toolchain, getpwuid_r is implemented but the header
  is missing:
  
   netrc.c:81:7: error: implicit declaration of function 'getpwuid_r' [-Werror=implicit-function-declaration]
  
  Unfortunately, the function is used in curl_ntlm_wb.c, too, so I moved
  the prototype to curl_setup.h.
  
  Signed-off-by: Bernhard Walle <bernhard@bwalle.de>
  Closes #2609

- [Rikard Falkeborn brought this change]

  tests: update .gitignore for libtests
  
  Closes #2624

- [Rikard Falkeborn brought this change]

  strictness: correct {infof, failf} format specifiers
  
  Closes #2623

- [Björn Stenberg brought this change]

  option: disallow username in URL
  
  Adds CURLOPT_DISALLOW_USERNAME_IN_URL and --disallow-username-in-url. Makes
  libcurl reject URLs with a username in them.
  
  Closes #2340

- libcurl-security.3: improved layout for two rememdy lists

- libcurl-security.3: refer to URL instead of in-source markdown file

Viktor Szakats (30 May 2018)
- curl.rc: embed manifest for correct Windows version detection
  
  * enable it in `src/Makefile.m32`
  * enable it in `winbuild/MakefileBuild.vc` if a custom manifest is
    _not_ enabled via the existing `EMBED_MANIFEST` option
  * enable it for all Windows CMake builds (also disable the built-in
    minimal manifest, added by CMake by default.)
  
  For other build systems, add the `-DCURL_EMBED_MANIFEST` option to
  the list of RC (Resource Compiler) flags to enable the manifest
  included in `src/curl.rc`. This may require to disable whatever
  automatic or other means in which way another manifest is added to
  `curl.exe`.
  
  Notice that Borland C doesn't support this method due to a
  long-pending resource compiler bug. Watcom C may also not handle
  it correctly when the `-zm` `wrc` option is used (this option may
  be unnecessary though) and regardless of options in certain earlier
  revisions of the 2.0 beta version.
  
  Closes https://github.com/curl/curl/pull/1221
  Fixes https://github.com/curl/curl/issues/2591

Patrick Monnerat (30 May 2018)
- os400: sync EBCDIC wrappers and ILE/RPG binding with latest options

- os400: implement mime api EBCDIC wrappers
  
  Also sync ILE/RPG binding to define the new functions.

Daniel Stenberg (29 May 2018)
- setopt: add TLS 1.3 ciphersuites
  
  Adds CURLOPT_TLS13_CIPHERS and CURLOPT_PROXY_TLS13_CIPHERS.
  
  curl: added --tls13-ciphers and --proxy-tls13-ciphers
  
  Fixes #2435
  Reported-by: zzq1015 on github
  Closes #2607

- configure: override AR_FLAGS to silence warning
  
  The automake default ar flags are 'cru', but the 'u' flag in there
  causes warnings on many modern Linux distros. Removing 'u' may have a
  minor performance impact on older distros but should not cause harm.
  
  Explained on the automake mailing list already back in April 2015:
  
  https://www.mail-archive.com/automake-patches@gnu.org/msg07705.html
  
  Reported-by: elephoenix on github
  Fixes #2617
  Closes #2619

Sergei Nikulov (29 May 2018)
- cmake: fixed comments in compile checks code

Daniel Stenberg (29 May 2018)
- INSTALL: LDFLAGS=-Wl,-R/usr/local/ssl/lib
  
  ... the older description doesn't work
  
  Reported-by: Peter Varga
  Fixes #2615
  Closes #2616

- [Will Dietz brought this change]

  KNOWN_BUGS: restore text regarding #2101.
  
  This was added earlier but appears to have been removed accidentally.
  
  AFAICT this is very much still an issue.
  
  -----
  
  I say "accidentally" because the text seems to have harmlessly snuck
  into [1] (which makes no mention of it).  [1] was later reverted for
  unspecified reasons in [2], presumably because the mentioned issue was
  fixed or invalid.
  
  [1] de9fac00c40db321d44fa6fbab6eb62ec4c83998
  [2] 16d1f369403cbb04bd7b085eabbeebf159473fc2
  
  Closes #2618

- fnmatch: insist on escaped bracket to match
  
  A non-escaped bracket ([) is for a character group - as documented. It
  will *not* match an individual bracket anymore. Test case 1307 updated
  accordingly to match.
  
  Problem detected by OSS-Fuzz, although this fix is probably not a final
  fix for the notorious timeout issues.
  
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8525
  Closes #2614

Patrick Monnerat (28 May 2018)
- psl: use latest psl and refresh it periodically
  
  The latest psl is cached in the multi or share handle. It is refreshed
  before use after 72 hours.
  New share lock CURL_LOCK_DATA_PSL controls the psl cache sharing.
  If the latest psl is not available, the builtin psl is used.
  
  Reported-by: Yaakov Selkowitz
  Fixes #2553
  Closes #2601

Daniel Stenberg (28 May 2018)
- [Fabrice Fontaine brought this change]

  configure: fix ssh2 linking when built with a static mbedtls
  
  The ssh2 pkg-config file could contain the following lines when build
  with a static version of mbedtls:
     Libs: -L${libdir} -lssh2 /xxx/libmbedcrypto.a
     Libs.private: /xxx/libmbedcrypto.a
  
  This static mbedtls library must be used to correctly detect ssh2
  support and this library must be copied in libcurl.pc otherwise
  compilation of any application (such as upmpdcli) with libcurl will fail
  when trying to found mbedtls functions included in libssh2.  So, replace
  pkg-config --libs-only-l by pkg-config --libs.
  
  Fixes:
   - http://autobuild.buildroot.net/results/43e24b22a77f616d6198c10435dcc23cc3b9088a
  
  Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
  Closes #2613

- RELEASE-NOTES: synced

- [Bernhard Walle brought this change]

  cmake: check for getpwuid_r
  
  The autotools-based build system does it, so we do it also in CMake.
  
  Bug: #2609
  Signed-off-by: Bernhard Walle <bernhard@bwalle.de>

- cmdline-opts/gen.pl: warn if mutexes: or see-also: list non-existing options

- [Frank Gevaerts brought this change]

  curl.1: Fix cmdline-opts reference errors.
  
  --data, --form, and --ntlm were declared to be mutually exclusive with
  non-existing options. --data and --form referred to --upload (which is
  short for --upload-file and therefore did work, so this one was merely
  a bit confusing), --ntlm referred to --negotiated instead of --negotiate.
  
  Closes #2612

- [Frank Gevaerts brought this change]

  docs: fix cmdline-opts metadata headers case consistency.
  
  Almost all headers start with an uppercase letter, but some didn't.

- mailmap: Max Savenkov

Sergei Nikulov (28 May 2018)
- [Max Savenkov brought this change]

  Fix the test for fsetxattr and strerror_r tests in CMake to work without compiling

Daniel Stenberg (27 May 2018)
- mailmap: a Richard Alcock fixup

- [Richard Alcock brought this change]

  schannel: add failf calls for client certificate failures
  
  Closes #2604

- [Richard Alcock brought this change]

  winbuild: In MakefileBuild.vc fix typo DISTDIR->DIRDIST
  
  Change requirement from $(DISTDIR) to $(DIRDIST)
  
  closes #2603

- [Richard Alcock brought this change]

  winbuild: only delete OUTFILE if it exists
  
  This removes the slightly annoying "Could not file LIBCURL_OBJS.inc" and
  "Could not find CURL_OBJS.inc.inc" message when building into a clean
  folder.
  
  closes #2602

- [Alejandro R. Sedeño brought this change]

  content_encoding: handle zlib versions too old for Z_BLOCK
  
  Fallback on Z_SYNC_FLUSH when Z_BLOCK is not available.
  
  Fixes #2606
  Closes #2608

- multi: provide a socket to wait for in Curl_protocol_getsock
  
  ... even when there's no protocol specific handler setup.
  
  Bug: https://curl.haxx.se/mail/lib-2018-05/0062.html
  Reported-by: Sean Miller
  Closes #2600

- [Linus Lewandowski brought this change]

  httpauth: add support for Bearer tokens
  
  Closes #2102

- TODO: CURLINFO_PAUSE_STATE
  
  Closes #2588

Sergei Nikulov (24 May 2018)
- cmake: set -d postfix for debug builds if not specified
         using -DCMAKE_DEBUG_POSTFIX explicitly
  
         fixes #2121, obsoletes #2384

Daniel Stenberg (23 May 2018)
- configure: add basic test of --with-ssl prefix
  
  When given a prefix, the $PREFIX_OPENSSL/lib/openssl.pc or
  $PREFIX_OPENSSL/include/openssl/ssl.h files must be present or cause an
  error. Helps users detect when giving configure the wrong path.
  
  Reported-by: Oleg Pudeyev
  Assisted-by: Per Malmberg
  Fixes #2580

Patrick Monnerat (22 May 2018)
- http resume: skip body if http code 416 (range error) is ignored.
  
  This avoids appending error data to already existing good data.
  
  Test 92 is updated to match this change.
  New test 1156 checks all combinations of --range/--resume, --fail,
  Content-Range header and http status code 200/416.
  
  Fixes #1163
  Reported-By: Ithubg on github
  Closes #2578

Daniel Stenberg (22 May 2018)
- tftp: make sure error is zero terminated before printfing it

- configure: add missing m4/ax_compile_check_sizeof.m4
  
  follow-up to mistake in 6876ccf90b4

Jay Satiro (22 May 2018)
- [Johannes Schindelin brought this change]

  schannel: make CAinfo parsing resilient to CR/LF
  
  OpenSSL has supported --cacert for ages, always accepting LF-only line
  endings ("Unix line endings") as well as CR/LF line endings ("Windows
  line endings").
  
  When we introduced support for --cacert also with Secure Channel (or in
  cURL speak: "WinSSL"), we did not take care to support CR/LF line
  endings, too, even if we are much more likely to receive input in that
  form when using Windows.
  
  Let's fix that.
  
  Happily, CryptQueryObject(), the function we use to parse the ca-bundle,
  accepts CR/LF input already, and the trailing LF before the END
  CERTIFICATE marker catches naturally any CR/LF line ending, too. So all
  we need to care about is the BEGIN CERTIFICATE marker. We do not
  actually need to verify here that the line ending is CR/LF. Just
  checking for a CR or an LF is really plenty enough.
  
  Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
  
  Closes https://github.com/curl/curl/pull/2592

Daniel Stenberg (22 May 2018)
- CURLOPT_ACCEPT_ENCODING.3: add brotli and clarify a bit

- RELEASE-NOTES: synced

- KNOWN_BUGS: mention the -O with %-encoded file names
  
  Closes #2573

- checksrc: make sure sizeof() is used *with* parentheses
  
  ... and unify the source code to adhere.
  
  Closes #2563

- curl: added --styled-output
  
  It is enabled by default, so --no-styled-output will switch off the
  detection/use of bold headers.
  
  Closes #2538

- curl: show headers in bold
  
  The feature is only enabled if the output is believed to be a tty.
  
  -J: There's some minor differences and improvements in -J handling, as
  now J should work with -i and it actually creates a file first using the
  initial name and then *renames* that to the one found in
  Content-Disposition (if any).
  
  -i: only shows headers for HTTP transfers now (as documented).
  Previously it would also show for pieces of the transfer that were HTTP
  (for example when doing FTP over a HTTP proxy).
  
  -i: now shows trailers as well. Previously they were not shown at all.
  
  --libcurl: the CURLOPT_HEADER is no longer set, as the header output is
  now done in the header callback.

- configure: compile-time SIZEOF checks
  
  ... instead of exeucting code to get the size. Removes the use of
  LD_LIBRARY_PATH for this.
  
  Fixes #2586
  Closes #2589
  Reported-by: Bernhard Walle

- configure: replace AC_TRY_RUN with CURL_RUN_IFELSE
  
  ... and export LD_LIBRARY_PATH properly. This is a follow-up from
  2d4c215.
  
  Fixes #2586
  Reported-by: Bernhard Walle

- docs: clarify CURLOPT_HTTPGET somewhat
  
  Reported-by: bsammon on github
  Fixes #2590

- curl_fnmatch: only allow two asterisks for matching
  
  The previous limit of 5 can still end up in situation that takes a very
  long time and consumes a lot of CPU.
  
  If there is still a rare use case for this, a user can provide their own
  fnmatch callback for a version that allows a larger set of wildcards.
  
  This commit was triggered by yet another OSS-Fuzz timeout due to this.
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8369
  
  Closes #2587

- checksrc: fix too long line
  
  follow-up to e05ad5d

- [Aleks brought this change]

  docs: mention HAproxy protocol "version 1"
  
  ...as there's also a version 2.
  
  Closes #2579

- examples/progressfunc: make it build on older libcurls
  
  This example was changed in ce2140a8c1 to use the new microsecond based
  getinfo option. This change makes it conditionally keep using the older
  option so that the example still builds with older libcurl versions.
  
  Closes #2584

- stub_gssapi: fix numerous 'unused parameter' warnings
  
  follow-up to d9e92fd9fd1d

- [Philip Prindeville brought this change]

  getinfo: add microsecond precise timers for various intervals
  
  Provide a set of new timers that return the time intervals using integer
  number of microseconds instead of floats.
  
  The new info names are as following:
  
  CURLINFO_APPCONNECT_TIME_T
  CURLINFO_CONNECT_TIME_T
  CURLINFO_NAMELOOKUP_TIME_T
  CURLINFO_PRETRANSFER_TIME_T
  CURLINFO_REDIRECT_TIME_T
  CURLINFO_STARTTRANSFER_TIME_T
  CURLINFO_TOTAL_TIME_T
  
  Closes #2495

- openssl: acknowledge --tls-max for default version too
  
  ... previously it only used the max setting if a TLS version was also
  explicitly asked for.
  
  Reported-by: byte_bucket
  Fixes #2571
  Closes #2572

- bump: start working on the pending 7.61.0

- [Dagobert Michelsen brought this change]

  tests/libtest/Makefile: Do not unconditionally add gcc-specific flags
  
  The warning flag leads e.g. Sun Studio compiler to bail out.
  
  Closes #2576

- schannel_verify: fix build for non-schannel

Jay Satiro (16 May 2018)
- rand: fix typo

- schannel: disable manual verify if APIs not available
  
  .. because original MinGW and old compilers do not have the Windows API
  definitions needed to support manual verification.

- [Archangel_SDY brought this change]

  schannel: disable client cert option if APIs not available
  
  Original MinGW targets Windows 2000 by default, which lacks some APIs and
  definitions for this feature. Disable it if these APIs are not available.
  
  Closes https://github.com/curl/curl/pull/2522

Version 7.60.0 (15 May 2018)

Daniel Stenberg (15 May 2018)
- RELEASE-NOTES: 7.60.0 release

- THANKS: added people from the curl 7.60.0 release

- docs/libcurl/index.html: removed
  
  The HTML files are long gone from the dist, now remove the last HTML
  file pointing to those missing files.
  
  d

- [steini2000 brought this change]

  http2: remove unused variable
  
  Closes #2570

- [steini2000 brought this change]

  http2: use easy handle of stream for logging

- gcc: disable picky gcc-8 function pointer warnings in two places
  
  Reported-by: Rikard Falkeborn
  Bug: #2560
  Closes #2569

- http2: use the correct function pointer typedef
  
  Fixes gcc-8 picky compiler warnings
  Reported-by: Rikard Falkeborn
  Bug: #2560
  Closes #2568

- CODE_STYLE: mention return w/o parens, but sizeof with
  
  ... and remove the github markdown syntax so that it renders better on
  the web site. Also, don't use back-ticks inlined to allow the CSS to
  highlight source code better.

- [Rikard Falkeborn brought this change]

  examples: Fix format specifiers
  
  Closes #2561

- [Rikard Falkeborn brought this change]

  tool: Fix format specifiers

- [Rikard Falkeborn brought this change]

  ntlm: Fix format specifiers

- [Rikard Falkeborn brought this change]

  tests: Fix format specifiers

- [Rikard Falkeborn brought this change]

  lib: Fix format specifiers

- contributors.sh: use "on github", not at

- http2: getsock fix for uploads
  
  When there's an upload in progress, make sure to wait for the socket to
  become writable.
  
  Detected-by: steini2000 on github
  Bug: #2520
  Closes #2567

- pingpong: fix response cache memcpy overflow
  
  Response data for a handle with a large buffer might be cached and then
  used with the "closure" handle when it has a smaller buffer and then the
  larger cache will be copied and overflow the new smaller heap based
  buffer.
  
  Reported-by: Dario Weisser
  CVE: CVE-2018-1000300
  Bug: https://curl.haxx.se/docs/adv_2018-82c2.html

- http: restore buffer pointer when bad response-line is parsed
  
  ... leaving the k->str could lead to buffer over-reads later on.
  
  CVE: CVE-2018-1000301
  Assisted-by: Max Dymond
  
  Detected by OSS-Fuzz.
  Bug: https://curl.haxx.se/docs/adv_2018-b138.html
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=7105

Patrick Monnerat (13 May 2018)
- cookies: do not take cookie name as a parameter
  
  RFC 6265 section 4.2.1 does not set restrictions on cookie names.
  This is a follow-up to commit 7f7fcd0.
  Also explicitly check proper syntax of cookie name/value pair.
  
  New test 1155 checks that cookie names are not reserved words.
  
  Reported-By: anshnd at github
  Fixes #2564
  Closes #2566

Daniel Stenberg (12 May 2018)
- smb: reject negative file sizes
  
  Assisted-by: Max Dymond
  
  Detected by OSS-Fuzz
  Bug: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=8245
Changes to jni/curl/CMake/CurlTests.c.
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
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







+















+







typedef void (*func_type)();

int main()
{
#ifndef inet_ntoa_r
  func_type func;
  func = (func_type)inet_ntoa_r;
  (void)func;
#endif
  return 0;
}
#endif
#ifdef HAVE_INET_NTOA_R_DECL_REENTRANT
#define _REENTRANT
#include <arpa/inet.h>

typedef void (*func_type)();

int main()
{
#ifndef inet_ntoa_r
  func_type func;
  func = (func_type)&inet_ntoa_r;
  (void)func;
#endif
  return 0;
}
#endif
#ifdef HAVE_GETADDRINFO
#include <netdb.h>
#include <sys/types.h>
579
580
581
582
583
584
585


586
587
588
589
590
591
592
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596







+
+







  return arg1 + arg2;
}

int
main() {
  int res3 = c99_vmacro3(1, 2, 3);
  int res2 = c99_vmacro2(1, 2);
  (void)res3;
  (void)res2;
  return 0;
}
#endif
#ifdef HAVE_VARIADIC_MACROS_GCC
#define gcc_vmacro3(first, args...) fun3(first, args)
#define gcc_vmacro2(first, args...) fun2(first, args)

600
601
602
603
604
605
606


607
608
609
604
605
606
607
608
609
610
611
612
613
614
615







+
+



  return arg1 + arg2;
}

int
main() {
  int res3 = gcc_vmacro3(1, 2, 3);
  int res2 = gcc_vmacro2(1, 2);
  (void)res3;
  (void)res2;
  return 0;
}
#endif
Changes to jni/curl/CMake/OtherTests.cmake.
20
21
22
23
24
25
26


27
28
29
30
31
32
33
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35







+
+







    set(CMAKE_REQUIRED_LIBRARIES ws2_32)
  endif()
else()
  add_header_include(HAVE_SYS_TYPES_H "sys/types.h")
  add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h")
endif()

set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)

check_c_source_compiles("${_source_epilogue}
int main(void) {
    recv(0, 0, 0, 0);
    return 0;
}" curl_cv_recv)
if(curl_cv_recv)
  if(NOT DEFINED curl_cv_func_recv_args OR "${curl_cv_func_recv_args}" STREQUAL "unknown")
173
174
175
176
177
178
179






































180
181
182
183
184
185
186
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  struct timeval ts;
  ts.tv_sec  = 0;
  ts.tv_usec = 0;
  (void)ts;
  return 0;
}" HAVE_STRUCT_TIMEVAL)

set(HAVE_SIG_ATOMIC_T 1)
set(CMAKE_REQUIRED_FLAGS)
if(HAVE_SIGNAL_H)
  set(CMAKE_REQUIRED_FLAGS "-DHAVE_SIGNAL_H")
  set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
endif()
check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
if(HAVE_SIZEOF_SIG_ATOMIC_T)
  check_c_source_compiles("
    #ifdef HAVE_SIGNAL_H
    #  include <signal.h>
    #endif
    int main(void) {
      static volatile sig_atomic_t dummy = 0;
      (void)dummy;
      return 0;
    }" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
  if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
    set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
  endif()
endif()

if(HAVE_WINDOWS_H)
  set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h)
else()
  set(CMAKE_EXTRA_INCLUDE_FILES)
  if(HAVE_SYS_SOCKET_H)
    set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
  endif()
endif()

check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
  set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
endif()

unset(CMAKE_TRY_COMPILE_TARGET_TYPE)

if(NOT DEFINED CMAKE_TOOLCHAIN_FILE)
  # if not cross-compilation...
  include(CheckCSourceRuns)
  set(CMAKE_REQUIRED_FLAGS "")
  if(HAVE_SYS_POLL_H)
    set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H")
  elseif(HAVE_POLL_H)
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
258
259
260
261
262
263
264










































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
            return 1;
          }
        }
        return 0;
    }" HAVE_POLL_FINE)
endif()

set(HAVE_SIG_ATOMIC_T 1)
set(CMAKE_REQUIRED_FLAGS)
if(HAVE_SIGNAL_H)
  set(CMAKE_REQUIRED_FLAGS "-DHAVE_SIGNAL_H")
  set(CMAKE_EXTRA_INCLUDE_FILES "signal.h")
endif()
check_type_size("sig_atomic_t" SIZEOF_SIG_ATOMIC_T)
if(HAVE_SIZEOF_SIG_ATOMIC_T)
  check_c_source_compiles("
    #ifdef HAVE_SIGNAL_H
    #  include <signal.h>
    #endif
    int main(void) {
      static volatile sig_atomic_t dummy = 0;
      (void)dummy;
      return 0;
    }" HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
  if(NOT HAVE_SIG_ATOMIC_T_NOT_VOLATILE)
    set(HAVE_SIG_ATOMIC_T_VOLATILE 1)
  endif()
endif()

if(HAVE_WINDOWS_H)
  set(CMAKE_EXTRA_INCLUDE_FILES winsock2.h)
else()
  set(CMAKE_EXTRA_INCLUDE_FILES)
  if(HAVE_SYS_SOCKET_H)
    set(CMAKE_EXTRA_INCLUDE_FILES sys/socket.h)
  endif()
endif()

check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE)
if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE)
  set(HAVE_STRUCT_SOCKADDR_STORAGE 1)
endif()
Changes to jni/curl/CMakeLists.txt.
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
53
54
55
56
57
58
59

60
61
62
63
64
65
66







-







string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*"
  CURL_VERSION ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+"
  CURL_VERSION_NUM ${CURL_VERSION_H_CONTENTS})
string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM})

include_regular_expression("^.*$")    # Sukender: Is it necessary?

# Setup package meta-data
# SET(PACKAGE "curl")
message(STATUS "curl version=[${CURL_VERSION}]")
# SET(PACKAGE_TARNAME "curl")
# SET(PACKAGE_NAME "curl")
# SET(PACKAGE_VERSION "-")
100
101
102
103
104
105
106
107
108

109
110
111
112
113
114
115
116
117
118
99
100
101
102
103
104
105


106



107
108
109
110
111
112
113







-
-
+
-
-
-







      endif()
    endforeach()
  endif()
endif()

if(ENABLE_DEBUG)
  # DEBUGBUILD will be defined only for Debug builds
  if(NOT CMAKE_VERSION VERSION_LESS 3.0)
    set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>)
  set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$<CONFIG:Debug>:DEBUGBUILD>)
  else()
    set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS_DEBUG DEBUGBUILD)
  endif()
  set(ENABLE_CURLDEBUG ON)
endif()

if(ENABLE_CURLDEBUG)
  set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG)
endif()

242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
237
238
239
240
241
242
243

244
245
246
247
248
249
250







-







include(CheckFunctionExists)
include(CheckIncludeFile)
include(CheckIncludeFiles)
include(CheckLibraryExists)
include(CheckSymbolExists)
include(CheckTypeSize)
include(CheckCSourceCompiles)
include(CMakeDependentOption)

# On windows preload settings
if(WIN32)
  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -D_WINSOCKAPI_=")
  include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake)
endif()

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
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







-
+









-
+






-
+



















+
+
+
+











-
+







  list(APPEND CURL_LIBS "advapi32")
endif()

# check SSL libraries
# TODO support GNUTLS, NSS, POLARSSL, CYASSL

if(APPLE)
  option(CMAKE_USE_DARWINSSL "enable Apple OS native SSL/TLS" OFF)
  option(CMAKE_USE_SECTRANSP "enable Apple OS native SSL/TLS" OFF)
endif()
if(WIN32)
  option(CMAKE_USE_WINSSL "enable Windows native SSL/TLS" OFF)
  cmake_dependent_option(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without openssl" ON
    CMAKE_USE_WINSSL OFF)
endif()
option(CMAKE_USE_MBEDTLS "Enable mbedTLS for SSL/TLS" OFF)

set(openssl_default ON)
if(WIN32 OR CMAKE_USE_DARWINSSL OR CMAKE_USE_WINSSL OR CMAKE_USE_MBEDTLS)
if(WIN32 OR CMAKE_USE_SECTRANSP OR CMAKE_USE_WINSSL OR CMAKE_USE_MBEDTLS)
  set(openssl_default OFF)
endif()
option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${openssl_default})

count_true(enabled_ssl_options_count
  CMAKE_USE_WINSSL
  CMAKE_USE_DARWINSSL
  CMAKE_USE_SECTRANSP
  CMAKE_USE_OPENSSL
  CMAKE_USE_MBEDTLS
)
if(enabled_ssl_options_count GREATER "1")
  set(CURL_WITH_MULTI_SSL ON)
endif()

if(CMAKE_USE_WINSSL)
  set(SSL_ENABLED ON)
  set(USE_SCHANNEL ON) # Windows native SSL/TLS support
  set(USE_WINDOWS_SSPI ON) # CMAKE_USE_WINSSL implies CURL_WINDOWS_SSPI
  list(APPEND CURL_LIBS "crypt32")
endif()
if(CURL_WINDOWS_SSPI)
  set(USE_WINDOWS_SSPI ON)
  set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DSECURITY_WIN32")
endif()

if(CMAKE_USE_DARWINSSL)
  message(FATAL_ERROR "The cmake option CMAKE_USE_DARWINSSL was renamed to CMAKE_USE_SECTRANSP.")
endif()

if(CMAKE_USE_SECTRANSP)
  find_library(COREFOUNDATION_FRAMEWORK "CoreFoundation")
  if(NOT COREFOUNDATION_FRAMEWORK)
      message(FATAL_ERROR "CoreFoundation framework not found")
  endif()

  find_library(SECURITY_FRAMEWORK "Security")
  if(NOT SECURITY_FRAMEWORK)
     message(FATAL_ERROR "Security framework not found")
  endif()

  set(SSL_ENABLED ON)
  set(USE_DARWINSSL ON)
  set(USE_SECTRANSP ON)
  list(APPEND CURL_LIBS "${COREFOUNDATION_FRAMEWORK}" "${SECURITY_FRAMEWORK}")
endif()

if(CMAKE_USE_OPENSSL)
  find_package(OpenSSL REQUIRED)
  set(SSL_ENABLED ON)
  set(USE_OPENSSL ON)
471
472
473
474
475
476
477

478
479
480
481
482
483
484
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483







+







      )
      set(CMAKE_REQUIRED_DEFINITIONS "${CMAKE_REQUIRED_DEFINITIONS} -DLDAP_DEPRECATED=1")
      list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB})
      if(HAVE_LIBLBER)
        list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB})
      endif()
      check_c_source_compiles("${_SRC_STRING}" NOT_NEED_LBER_H)
      unset(CMAKE_REQUIRED_LIBRARIES)

      if(NOT_NEED_LBER_H)
        set(NEED_LBER_H OFF)
      else()
        set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DNEED_LBER_H")
      endif()
    endif()
566
567
568
569
570
571
572

573
574
575
576
577
578
579
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579







+







    set(CMAKE_EXTRA_INCLUDE_FILES "libssh2.h")
    check_function_exists(libssh2_version           HAVE_LIBSSH2_VERSION)
    check_function_exists(libssh2_init              HAVE_LIBSSH2_INIT)
    check_function_exists(libssh2_exit              HAVE_LIBSSH2_EXIT)
    check_function_exists(libssh2_scp_send64        HAVE_LIBSSH2_SCP_SEND64)
    check_function_exists(libssh2_session_handshake HAVE_LIBSSH2_SESSION_HANDSHAKE)
    set(CMAKE_EXTRA_INCLUDE_FILES "")
    unset(CMAKE_REQUIRED_LIBRARIES)
  endif()
endif()

option(CMAKE_USE_GSSAPI "Use GSSAPI implementation (right now only Heimdal is supported with CMake build)" OFF)
mark_as_advanced(CMAKE_USE_GSSAPI)

if(CMAKE_USE_GSSAPI)
613
614
615
616
617
618
619

620
621
622
623
624
625
626
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627







+








      set(CMAKE_REQUIRED_FLAGS "${_COMPILER_FLAGS_STR} ${_LINKER_FLAGS_STR}")
      set(CMAKE_REQUIRED_LIBRARIES ${GSS_LIBRARIES})
      check_symbol_exists("GSS_C_NT_HOSTBASED_SERVICE" ${_INCLUDE_LIST} HAVE_GSS_C_NT_HOSTBASED_SERVICE)
      if(NOT HAVE_GSS_C_NT_HOSTBASED_SERVICE)
        set(HAVE_OLD_GSSMIT ON)
      endif()
      unset(CMAKE_REQUIRED_LIBRARIES)

    endif()

    include_directories(${GSS_INCLUDE_DIR})
    link_directories(${GSS_LINK_DIRECTORIES})
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
    set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${GSS_LINKER_FLAGS}")
880
881
882
883
884
885
886


887
888
889
890
891
892
893
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896







+
+







check_symbol_exists(fork           "${CURL_INCLUDES}" HAVE_FORK)
check_symbol_exists(getaddrinfo    "${CURL_INCLUDES}" HAVE_GETADDRINFO)
check_symbol_exists(freeaddrinfo   "${CURL_INCLUDES}" HAVE_FREEADDRINFO)
check_symbol_exists(freeifaddrs    "${CURL_INCLUDES}" HAVE_FREEIFADDRS)
check_symbol_exists(pipe           "${CURL_INCLUDES}" HAVE_PIPE)
check_symbol_exists(ftruncate      "${CURL_INCLUDES}" HAVE_FTRUNCATE)
check_symbol_exists(getprotobyname "${CURL_INCLUDES}" HAVE_GETPROTOBYNAME)
check_symbol_exists(getpeername    "${CURL_INCLUDES}" HAVE_GETPEERNAME)
check_symbol_exists(getsockname    "${CURL_INCLUDES}" HAVE_GETSOCKNAME)
check_symbol_exists(getrlimit      "${CURL_INCLUDES}" HAVE_GETRLIMIT)
check_symbol_exists(setlocale      "${CURL_INCLUDES}" HAVE_SETLOCALE)
check_symbol_exists(setmode        "${CURL_INCLUDES}" HAVE_SETMODE)
check_symbol_exists(setrlimit      "${CURL_INCLUDES}" HAVE_SETRLIMIT)
check_symbol_exists(fcntl          "${CURL_INCLUDES}" HAVE_FCNTL)
check_symbol_exists(ioctl          "${CURL_INCLUDES}" HAVE_IOCTL)
check_symbol_exists(setsockopt     "${CURL_INCLUDES}" HAVE_SETSOCKOPT)
1175
1176
1177
1178
1179
1180
1181
1182

1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203

1204
1205
1206
1207
1208
1209
1210
1178
1179
1180
1181
1182
1183
1184

1185



1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202

1203
1204
1205
1206
1207
1208
1209
1210







-
+
-
-
-

















-
+







  if(${ARGN})
    set(_items ${_items} "${label}" PARENT_SCOPE)
  endif()
endfunction()

# Clear list and try to detect available features
set(_items)
_add_if("WinSSL"        SSL_ENABLED AND USE_WINDOWS_SSPI)
_add_if("SSL"           SSL_ENABLED)
_add_if("OpenSSL"       SSL_ENABLED AND USE_OPENSSL)
_add_if("DarwinSSL"     SSL_ENABLED AND USE_DARWINSSL)
_add_if("mbedTLS"       SSL_ENABLED AND USE_MBEDTLS)
_add_if("IPv6"          ENABLE_IPV6)
_add_if("unix-sockets"  USE_UNIX_SOCKETS)
_add_if("libz"          HAVE_LIBZ)
_add_if("AsynchDNS"     USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32)
_add_if("IDN"           HAVE_LIBIDN2)
_add_if("Largefile"     (CURL_SIZEOF_CURL_OFF_T GREATER 4) AND
                        ((SIZEOF_OFF_T GREATER 4) OR USE_WIN32_LARGE_FILES))
# TODO SSP1 (WinSSL) check is missing
_add_if("SSPI"          USE_WINDOWS_SSPI)
_add_if("GSS-API"       HAVE_GSSAPI)
# TODO SSP1 missing for SPNEGO
_add_if("SPNEGO"        NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
_add_if("Kerberos"      NOT CURL_DISABLE_CRYPTO_AUTH AND
                        (HAVE_GSSAPI OR USE_WINDOWS_SSPI))
# NTLM support requires crypto function adaptions from various SSL libs
# TODO alternative SSL libs tests for SSP1, GNUTLS, NSS
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR USE_WINDOWS_SSPI OR USE_DARWINSSL OR USE_MBEDTLS))
if(NOT CURL_DISABLE_CRYPTO_AUTH AND (USE_OPENSSL OR USE_WINDOWS_SSPI OR USE_SECTRANSP OR USE_MBEDTLS))
  _add_if("NTLM"        1)
  # TODO missing option (autoconf: --enable-ntlm-wb)
  _add_if("NTLM_WB"     NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED)
endif()
# TODO missing option (--enable-tls-srp), depends on GNUTLS_SRP/OPENSSL_SRP
_add_if("TLS-SRP"       USE_TLS_SRP)
# TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header
1235
1236
1237
1238
1239
1240
1241

1242


1243
1244
1245












1246
1247
1248
1249
1250
1251
1252
1235
1236
1237
1238
1239
1240
1241
1242

1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266







+
-
+
+



+
+
+
+
+
+
+
+
+
+
+
+







_add_if("IMAPS"         NOT CURL_DISABLE_IMAP AND SSL_ENABLED)
_add_if("SMTP"          NOT CURL_DISABLE_SMTP)
_add_if("SMTPS"         NOT CURL_DISABLE_SMTP AND SSL_ENABLED)
_add_if("SCP"           USE_LIBSSH2)
_add_if("SFTP"          USE_LIBSSH2)
_add_if("RTSP"          NOT CURL_DISABLE_RTSP)
_add_if("RTMP"          USE_LIBRTMP)
if(_items)
list(SORT _items)
  list(SORT _items)
endif()
string(REPLACE ";" " " SUPPORT_PROTOCOLS "${_items}")
message(STATUS "Enabled protocols: ${SUPPORT_PROTOCOLS}")

# Clear list and collect SSL backends
set(_items)
_add_if("WinSSL"           SSL_ENABLED AND USE_WINDOWS_SSPI)
_add_if("OpenSSL"          SSL_ENABLED AND USE_OPENSSL)
_add_if("Secure Transport" SSL_ENABLED AND USE_SECTRANSP)
_add_if("mbedTLS"          SSL_ENABLED AND USE_MBEDTLS)
if(_items)
  list(SORT _items)
endif()
string(REPLACE ";" " " SSL_BACKENDS "${_items}")
message(STATUS "Enabled SSL backends: ${SSL_BACKENDS}")

# curl-config needs the following options to be set.
set(CC                      "${CMAKE_C_COMPILER}")
# TODO probably put a -D... options here?
set(CONFIGURE_OPTIONS       "")
# TODO when to set "-DCURL_STATICLIB" for CPPFLAG_CURL_STATICLIB?
set(CPPFLAG_CURL_STATICLIB  "")
set(CURLVERSION             "${CURL_VERSION}")
Changes to jni/curl/Makefile.in.
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
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







-
+


-
+
















-
+



-
+







  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  ssh.c ssh-libssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c        \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c altsvc.c
  doh.c urlapi.c curl_get_line.c altsvc.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h       \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  altsvc.h
  curl_get_line.h altsvc.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES)

# libcurl has sources that provide functions named curlx_* that aren't part of
# the official API, but we re-use the code here to avoid duplication.
Changes to jni/curl/README.
38
39
40
41
42
43
44






45
46
47
48
49
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55







+
+
+
+
+
+






  To download the very latest source off the GIT server do this:

    git clone https://github.com/curl/curl.git

  (you'll get a directory named curl created, filled with the source code)

SECURITY PROBLEMS

  Report suspected security problems via our HackerOne page and not in public!

    https://hackerone.com/curl

NOTICE

  Curl contains pieces of source code that is Copyright (c) 1998, 1999
  Kungliga Tekniska Högskolan. This notice is included here to comply with the
  distribution terms.
Changes to jni/curl/RELEASE-NOTES.
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

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








-
+

-
+

-
+





-
-
+
+
+



-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+








-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+





-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
curl and libcurl 7.64.1
curl and libcurl 7.65.0

 Public curl releases:         180
 Public curl releases:         181
 Command line options:         221
 curl_easy_setopt() options:   267
 curl_easy_setopt() options:   268
 Public functions in libcurl:  80
 Contributors:                 1929

This release includes the following changes:

 o alt-svc: experiemental support added [74]
 o configure: add --with-amissl [84]
 o CURLOPT_DNS_USE_GLOBAL_CACHE: removed [25]
 o CURLOPT_MAXAGE_CONN: set the maximum allowed age for conn reuse [37]
 o pipelining: removed [10]

This release includes the following bugfixes:

 o AppVeyor: add MinGW-w64 and classic Mingw builds [55]
 o AppVeyor: switch VS 2015 builds to VS 2017 image [49]
 o CURLU: fix NULL dereference when used over proxy [73]
 o CVE-2019-5435: Integer overflows in curl_url_set [87]
 o CVE-2019-5436: tftp: use the current blksize for recvfrom() [82]
 o --config: clarify that initial : and = might need quoting [17]
 o AppVeyor: enable testing for WinSSL build [23]
 o CURLMOPT_TIMERFUNCTION.3: warn about the recursive risk [52]
 o Curl_easy: remove req.maxfd - never used! [58]
 o Curl_now: figure out windows version in win32_init: [11]
 o Curl_resolv: fix a gcc -Werror=maybe-uninitialized warning [20]
 o DoH: inherit some SSL options from user's easy handle [80]
 o Secure Transport: no more "darwinssl" [56]
 o Secure Transport: tvOS 11 is required for ALPN support [94]
 o cirrus: Added FreeBSD builds using Cirrus CI
 o cleanup: make local functions static [5]
 o cli tool: do not use mime.h private structures [27]
 o cmdline-opts/proxytunnel.d: the option tunnnels all protocols [83]
 o configure: add additional libraries to check for LDAP support [45]
 o configure: remove the unused fdopen macro [40]
 o CURLOPT_ADDRESS_SCOPE: fix range check and more [32]
 o CURLOPT_CAINFO.3: with Schannel, you want Windows 8 or later [75]
 o CURLOPT_CHUNK_BGN_FUNCTION.3: document the struct and time value [51]
 o CURLOPT_READFUNCTION.3: see also CURLOPT_UPLOAD_BUFFERSIZE [71]
 o CURL_MAX_INPUT_LENGTH: largest acceptable string input size [44]
 o Curl_disconnect: treat all CONNECT_ONLY connections as "dead" [39]
 o INTERNALS: Add code highlighting [47]
 o OS400/ccsidcurl: replace use of Curl_vsetopt [50]
 o OpenSSL: Report -fips in version if OpenSSL is built with FIPS [55]
 o README.md: fix no-consecutive-blank-lines Codacy warning [22]
 o VC15 project: remove MinimalRebuild
 o configure: show features as well in the final summary [15]
 o conncache: use conn->data to know if a transfer owns it [95]
 o connection: never reuse CONNECT_ONLY connections [35]
 o connection_check: restore original conn->data after the check [14]
 o connection_check: set ->data to the transfer doing the check [3]
 o cookie: Add support for cookie prefixes [29]
 o VS projects: use Unicode for VC10+ [16]
 o WRITEFUNCTION: add missing set_in_callback around callback [60]
 o altsvc: Fix building with cookies disabled [38]
 o auth: Rename the various authentication clean up functions [61]
 o base64: build conditionally if there are users
 o build-openssl.bat: Fixed support for OpenSSL v1.1.0+
 o cookies: dotless names can set cookies again [81]
 o cookies: fix NULL dereference if flushing cookies with no CookieInfo set [47]
 o curl.1: --user and --proxy-user are hidden from ps output [86]
 o curl.1: mark the argument to --cookie as <data|filename> [87]
 o curl.h: use __has_declspec_attribute for shared builds [52]
 o curl: display --version features sorted alphabetically [51]
 o curl: fix FreeBSD compiler warning in the --xattr code [2]
 o curl: remove MANUAL from -M output [38]
 o curl_easy_duphandle.3: clarify that a duped handle has no shares [64]
 o curl_multi_remove_handle.3: use at any time, just not from within callbacks
 o curl_url.3: this API is not experimental anymore
 o dns: release sharelock as soon as possible [1]
 o build: fix "clarify calculation precedence" warnings [63]
 o checksrc.bat: ignore snprintf warnings in docs/examples [67]
 o cirrus: Customize the disabled tests per FreeBSD version
 o cleanup: remove FIXME and TODO comments [81]
 o cmake: avoid linking executable for some tests with cmake 3.6+ [18]
 o cmake: clear CMAKE_REQUIRED_LIBRARIES after each use [19]
 o cmake: rename CMAKE_USE_DARWINSSL to CMAKE_USE_SECTRANSP [46]
 o cmake: set SSL_BACKENDS [12]
 o configure: avoid unportable `==' test(1) operator [1]
 o configure: error out if OpenSSL wasn't detected when asked for [74]
 o configure: fix default location for fish completions [13]
 o cookie: Guard against possible NULL ptr deref [42]
 o docs: update max-redirs.d phrasing [59]
 o easy: fix win32 init to work without CURL_GLOBAL_WIN32 [30]
 o examples/10-at-a-time.c: improve readability and simplify
 o examples/cacertinmem.c: use multiple certificates for loading CA-chain [54]
 o examples/crawler: Fix the Accept-Encoding setting
 o examples/ephiperfifo.c: various fixes [63]
 o examples/externalsocket: add missing close socket calls [78]
 o examples/http2-download: cleaned up
 o examples/http2-serverpush: add some sensible error checks [31]
 o examples/http2-upload: cleaned up
 o curl: make code work with protocol-disabled libcurl [78]
 o curl: report error for "--no-" on non-boolean options [86]
 o curl_easy_getinfo.3: fix minor formatting mistake
 o curlver.h: use parenthesis in CURL_VERSION_BITS macro [45]
 o docs/BUG-BOUNTY: bug bounty time [48]
 o docs/INSTALL: fix broken link [62]
 o docs/RELEASE-PROCEDURE: link to live iCalendar [79]
 o documentation: Fix several typos [7]
 o doh: acknowledge CURL_DISABLE_DOH
 o doh: disable DOH for the cases it doesn't work [66]
 o examples/httpcustomheader: Value stored to 'res' is never read
 o examples/postinmemory: Potential leak of memory pointed to by 'chunk.memory'
 o examples/sftpuploadresume: Value stored to 'result' is never read
 o examples: only include <curl/curl.h> [70]
 o examples: remove recursive calls to curl_multi_socket_action [42]
 o examples: remove superfluous null-pointer checks
 o examples: remove unused variables [88]
 o file: fix "Checking if unsigned variable 'readcount' is less than zero." [90]
 o fnmatch: disable if FTP is disabled [25]
 o gnutls: remove call to deprecated gnutls_compression_get_name [66]
 o gopher: remove check for path == NULL [69]
 o gssapi: fix deprecated header warnings [16]
 o hostip: make create_hostcache_id avoid alloc + free [4]
 o http2: multi_connchanged() moved from multi.c, only used for h2 [21]
 o http2: verify :athority in push promise requests [37]
 o http: make adding a blank header thread-safe [33]
 o http: send payload when (proxy) authentication is done [89]
 o http: set state.infilesize when sending multipart formposts [57]
 o makefile: make checksrc and hugefile commands "silent" [85]
 o mbedtls: make it build even if MBEDTLS_VERSION_C isn't set [24]
 o mbedtls: release sessionid resources on error [28]
 o ftplistparser: fix LGTM alert "Empty block without comment" [14]
 o hostip: acknowledge CURL_DISABLE_SHUFFLE_DNS [78]
 o http: Ignore HTTP/2 prior knowledge setting for HTTP proxies [54]
 o http: acknowledge CURL_DISABLE_HTTP_AUTH
 o http: mark bundle as not for multiuse on < HTTP/2 response [41]
 o http_digest: Don't expose functions when HTTP and Crypto Auth are disabled [65]
 o http_negotiate: do not treat failure of gss_init_sec_context() as fatal [53]
 o http_ntlm: Corrected the name of the include guard [64]
 o http_ntlm_wb: Handle auth for only a single request [77]
 o http_ntlm_wb: Return the correct error on receiving an empty auth message [77]
 o lib509: add missing include for strdup [22]
 o lib557: initialize variables [22]
 o makedebug: Fix ERRORLEVEL detection after running where.exe [58]
 o mbedtls: enable use of EC keys [85]
 o mime: acknowledge CURL_DISABLE_MIME
 o multi: improved HTTP_1_1_REQUIRED handling [2]
 o netrc: acknowledge CURL_DISABLE_NETRC [78]
 o nss: allow fifos and character devices for certificates [56]
 o nss: provide more specific error messages on failed init [43]
 o memdebug: log pointer before freeing its data [91]
 o memdebug: make debug-specific functions use curl_dbg_ prefix [82]
 o ntlm: Fix misaligned function comments for Curl_auth_ntlm_cleanup [70]
 o mime: put the boundary buffer into the curl_mime struct [18]
 o multi: call multi_done on connect timeouts, fixes CURLINFO_TOTAL_TIME [43]
 o multi: remove verbose "Expire in" ... messages [23]
 o multi: removed unused code for request retries [79]
 o multi: support verbose conncache closure handle [72]
 o ntlm: Support the NT response in the type-3 when OpenSSL doesn't include MD4
 o openssl: mark connection for close on TLS close_notify [36]
 o openvms: Remove pre-processor for SecureTransport [40]
 o openvms: Remove pre-processors for Windows [40]
 o parse_proxy: use the URL parser API [72]
 o parsedate: disabled on CURL_DISABLE_PARSEDATE
 o pingpong: disable more when no pingpong protocols are enabled
 o polarssl_threadlock: remove conditionally unused code [22]
 o progress: acknowledge CURL_DISABLE_PROGRESS_METER [78]
 o proxy: acknowledge DISABLE_PROXY more
 o resolve: apply Happy Eyeballs philosophy to parallel c-ares queries [3]
 o revert "multi: support verbose conncache closure handle" [69]
 o negotiate: fix for HTTP POST with Negotiate [88]
 o openssl: add support for TLS ASYNC state [46]
 o openssl: if cert type is ENG and no key specified, key is ENG too [93]
 o pretransfer: don't strlen() POSTFIELDS set for GET requests [22]
 o rand: Fix a mismatch between comments in source and header [32]
 o runtests: detect "schannel" as an alias for "winssl" [50]
 o schannel: be quiet - remove verbose output [19]
 o schannel: close TLS before removing conn from cache [10]
 o sasl: Don't send authcid as authzid for the PLAIN mechanism as per RFC 4616
 o sasl: only enable if there's a protocol enabled using it
 o schannel: support CALG_ECDH_EPHEM algorithm [44]
 o scripts/completion.pl: also generate fish completion file [67]
 o singlesocket: fix the 'sincebefore' placement [36]
 o source: fix two 'nread' may be used uninitialized warnings [68]
 o ssh: fix Condition '!status' is always true [60]
 o ssh: loop the state machine if not done and not blocking [71]
 o scripts: fix typos
 o singleipconnect: show port in the verbose "Trying ..." message
 o smtp: fix compiler warning [15]
 o socks5: user name and passwords must be shorter than 256 [8]
 o socks: fix error message
 o socksd: new SOCKS 4+5 server for tests [31]
 o spnego_gssapi: fix return code on gss_init_sec_context() failure [53]
 o ssh-libssh: remove unused variable [83]
 o ssh: define USE_SSH if SSH is enabled (any backend) [57]
 o strerror: make the strerror function use local buffers [48]
 o system_win32: move win32_init here from easy.c [65]
 o test578: make it read data from the correct test
 o tests: Fixed XML validation errors in some test files
 o tests: add stderr comparison to the test suite [26]
 o tests: fix multiple may be used uninitialized warnings
 o threaded-resolver: shutdown the resolver thread without error message [61]
 o tool_cb_wrt: fix writing to Windows null device NUL [96]
 o tool_getpass: termios.h is present on AmigaOS 3, but no tcgetattr/tcsetattr [84]
 o tool_operate: build on AmigaOS [84]
 o tool_operate: fix typecheck warning [9]
 o transfer.c: do not compute length of undefined hex buffer
 o travis: add build using gnutls [75]
 o travis: add scan-build [13]
 o travis: bump the used wolfSSL version to 4.0.0 [92]
 o travis: enable valgrind for the iconv tests [12]
 o travis: use updated compiler versions: clang 7 and gcc 8 [77]
 o unit1307: require FTP support [17]
 o unit1651: survive curl_easy_init() fails
 o url/idnconvert: remove scan for <= 32 ascii values [6]
 o url: change conn shutdown order to ensure SOCKETFUNCTION callbacks [39]
 o urlapi: reduce variable scope, remove unreachable 'break' [7]
 o urldata: convert bools to bitfields and move to end [53]
 o urldata: simplify bytecounters [62]
 o urlglob: Argument with 'nonnull' attribute passed null
 o version.c: silent scan-build even when librtmp is not enabled
 o vtls: rename some of the SSL functions [84]
 o ssh: move variable declaration to where it's used [83]
 o test1002: correct the name
 o test2100: Fix typos in test description
 o tests/server/util: fix Windows Unicode build [21]
 o tests: Run global cleanup at end of tests [29]
 o tests: make Impacket (SMB server) Python 3 compatible [11]
 o tool_cb_wrt: fix bad-function-cast warning [5]
 o tool_formparse: remove redundant assignment [83]
 o tool_help: Warn if curl and libcurl versions do not match [28]
 o tool_help: include <strings.h> for strcasecmp [4]
 o transfer: fix LGTM alert "Comparison is always true" [14]
 o travis: add an osx http-only build [80]
 o travis: allow builds on branches named "ci"
 o travis: install dependencies only when needed [24]
 o travis: update some builds do Xenial [30]
 o travis: updated mesalink builds [35]
 o url: always clone the CUROPT_CURLU handle [26]
 o url: convert the zone id from a IPv6 URL to correct scope id [89]
 o urlapi: add CURLUPART_ZONEID to set and get [59]
 o urlapi: increase supported scheme length to 40 bytes [84]
 o urlapi: require a non-zero host name length when parsing URL [73]
 o urlapi: stricter CURLUPART_PORT parsing [33]
 o urlapi: strip off zone id from numerical IPv6 addresses [49]
 o urlapi: urlencode characters above 0x7f correctly [9]
 o vauth/cleartext: update the PLAIN login to match RFC 4616 [27]
 o vauth/oauth2: Fix OAUTHBEARER token generation [6]
 o vauth: Fix incorrect function description for Curl_auth_user_contains_domain [68]
 o wolfssl: stop custom-adding curves [41]
 o x509asn1: "Dereference of null pointer"
 o x509asn1: cleanup and unify code layout [34]
 o zsh.pl: escape ':' character [8]
 o zsh.pl: update regex to better match curl -h output [8]
 o vtls: fix potential ssl_buffer stack overflow [76]
 o wildcard: disable from build when FTP isn't present
 o winbuild: Support MultiSSL builds [34]
 o xattr: skip unittest on unsupported platforms [20]

This release includes the following known bugs:

 o see docs/KNOWN_BUGS (https://curl.haxx.se/docs/knownbugs.html)

This release would not have looked like this without help, code, reports and
advice from friends like these:

  accountantM on github, Alessandro Ghedini, Andre Guibert de Bruet,
  Arnaud Rebillout, Bernd Mueller, Björn Stenberg, buzo-ffm on github,
  Chris Araman, Christian Schmitz, Chris Young, d912e3 on github, Dan Fandrich,
  Daniel Gustafsson, Daniel Lublin, Daniel Stenberg, David Garske,
  David Woodhouse, Dominik Hölzl, Don J Olmstead, Eric Curtin, Frank Gevaerts,
  Gisle Vanem, James Brown, Jan Alexander Steffens, jnbr on github,
  MAntoniak on github, Marcel Raad, Marc Schlatter, Matt McClure, Michael Felt,
  Michael Schmid, Michael Wallner, Michał Antoniak, nedres on github,
  nianxuejie on github, Nick Zitzmann, Nicolas Grekas, Patrick Monnerat,
  Aron Bergman, Brad Spencer, cclauss on github, Dan Fandrich,
  Daniel Gustafsson, Daniel Stenberg, Eli Schwartz, Even Rouault,
  Frank Gevaerts, Gisle Vanem, GitYuanQu on github, Guy Poizat, Isaiah Norton,
  Jakub Zakrzewski, Jan Ehrhardt, Jeroen Ooms, Jonathan Cardoso Machado,
  Jonathan Moerman, Joombalaya on github, Kamil Dudka, Kristoffer Gleditsch,
  l00p3r on hackerone, Leonardo Taccari, Marcel Raad, Mert Yazıcıoğlu,
  nevv on HackerOne/curl, niner on github, Olen Andoni, Omar Ramadan,
  Paolo Mossino, Patrick Monnerat, Po-Chuan Hsieh, Poul T Lomholt, Ray Satiro,
  Paul Groke, Pavel Löbl, Ray Satiro, Renaud Allard, Romain Geissler,
  Sara Golemon, Simon Legner, tholin on github, Tim Rühsen, Volker Schmid,
  wesinator on github,
  (49 contributors)
  Reed Loden, Ricardo Gomes, Ricky Leverence, Rikard Falkeborn, Roy Bellingan,
  Simon Warta, Steve Holme, Taiyu Len, Tim Rühsen, Tom van der Woerdt,
  Tseng Jun, Viktor Szakats, Wenchao Li, Wyatt O'Day, XmiliaH on github,
  Yiming Jing,
  (50 contributors)

        Thanks! (and sorry if I forgot to mention someone)

References to bug reports and discussions on issues:

 [1] = https://curl.haxx.se/bug/?i=3516
 [2] = https://curl.haxx.se/bug/?i=3550
 [3] = https://curl.haxx.se/bug/?i=3541
 [4] = https://curl.haxx.se/bug/?i=3544
 [5] = https://curl.haxx.se/bug/?i=3538
 [6] = https://curl.haxx.se/bug/?i=3539
 [7] = https://curl.haxx.se/bug/?i=3540
 [8] = https://bugs.debian.org/921452
 [9] = https://curl.haxx.se/bug/?i=3534
 [10] = https://curl.haxx.se/bug/?i=3412
 [11] = https://curl.haxx.se/bug/?i=3572
 [12] = https://curl.haxx.se/bug/?i=3571
 [13] = https://curl.haxx.se/bug/?i=3564
 [14] = https://curl.haxx.se/bug/?i=3542
 [15] = https://curl.haxx.se/bug/?i=3569
 [16] = https://curl.haxx.se/bug/?i=3566
 [17] = https://curl.haxx.se/bug/?i=3565
 [18] = https://curl.haxx.se/bug/?i=3561
 [19] = https://curl.haxx.se/bug/?i=3552
 [20] = https://curl.haxx.se/bug/?i=3562
 [21] = https://curl.haxx.se/bug/?i=3557
 [22] = https://curl.haxx.se/bug/?i=3548
 [23] = https://curl.haxx.se/mail/archive-2019-02/0013.html
 [24] = https://curl.haxx.se/bug/?i=3553
 [25] = https://curl.haxx.se/bug/?i=3551
 [26] = https://curl.haxx.se/bug/?i=3536
 [27] = https://curl.haxx.se/bug/?i=3532
 [28] = https://curl.haxx.se/bug/?i=3574
 [29] = https://curl.haxx.se/bug/?i=3554
 [30] = https://curl.haxx.se/bug/?i=3313
 [31] = https://curl.haxx.se/bug/?i=3580
 [32] = https://curl.haxx.se/bug/?i=3584
 [33] = https://curl.haxx.se/bug/?i=3578
 [34] = https://curl.haxx.se/bug/?i=3582
 [35] = https://curl.haxx.se/mail/lib-2019-02/0064.html
 [36] = https://curl.haxx.se/bug/?i=3585
 [37] = https://curl.haxx.se/bug/?i=3577
 [38] = https://curl.haxx.se/bug/?i=3587
 [39] = https://curl.haxx.se/mail/lib-2019-02/0101.html
 [40] = https://curl.haxx.se/bug/?i=3600
 [41] = https://curl.haxx.se/bug/?i=3599
 [42] = https://curl.haxx.se/bug/?i=3537
 [43] = https://curl.haxx.se/bug/?i=3602
 [44] = https://curl.haxx.se/bug/?i=3608
 [45] = https://curl.haxx.se/bug/?i=3595
 [46] = https://curl.haxx.se/bug/?i=3591
 [47] = https://curl.haxx.se/bug/?i=3613
 [48] = https://curl.haxx.se/bug/?i=3612
 [49] = https://curl.haxx.se/bug/?i=3606
 [50] = https://curl.haxx.se/bug/?i=3609
 [51] = https://curl.haxx.se/bug/?i=3611
 [52] = https://curl.haxx.se/bug/?i=3616
 [53] = https://curl.haxx.se/bug/?i=3610
 [54] = https://curl.haxx.se/bug/?i=3421
 [55] = https://curl.haxx.se/bug/?i=3623
 [56] = https://curl.haxx.se/bug/?i=3619
 [57] = https://curl.haxx.se/mail/archive-2019-02/0023.html
 [58] = https://curl.haxx.se/bug/?i=3626
 [59] = https://curl.haxx.se/bug/?i=3631
 [60] = https://curl.haxx.se/bug/?i=3628
 [61] = https://curl.haxx.se/bug/?i=3629
 [62] = https://curl.haxx.se/bug/?i=3627
 [63] = https://curl.haxx.se/bug/?i=3632
 [64] = https://curl.haxx.se/bug/?i=3592
 [65] = https://curl.haxx.se/bug/?i=3625
 [66] = https://curl.haxx.se/bug/?i=3636
 [67] = https://curl.haxx.se/bug/?i=3545
 [68] = https://curl.haxx.se/bug/?i=3546
 [69] = https://curl.haxx.se/bug/?i=3617
 [70] = https://curl.haxx.se/bug/?i=3645
 [71] = https://curl.haxx.se/bug/?i=3506
 [72] = https://curl.haxx.se/bug/?i=3618
 [73] = https://curl.haxx.se/bug/?i=3641
 [74] = https://curl.haxx.se/bug/?i=3498
 [76] = https://curl.haxx.se/bug/?i=3637
 [77] = https://curl.haxx.se/bug/?i=3670
 [78] = https://curl.haxx.se/bug/?i=3663
 [79] = https://curl.haxx.se/bug/?i=3666
 [80] = https://curl.haxx.se/bug/?i=3660
 [81] = https://curl.haxx.se/bug/?i=3649
 [82] = https://curl.haxx.se/bug/?i=3656
 [83] = https://curl.haxx.se/bug/?i=3658
 [84] = https://curl.haxx.se/bug/?i=3677
 [85] = https://curl.haxx.se/bug/?i=3681
 [86] = https://curl.haxx.se/bug/?i=3680
 [87] = https://curl.haxx.se/bug/?i=3682
 [88] = https://curl.haxx.se/bug/?i=1261
 [89] = https://curl.haxx.se/bug/?i=2431
 [1] = https://curl.haxx.se/bug/?i=3709
 [2] = https://curl.haxx.se/bug/?i=3707
 [3] = https://curl.haxx.se/bug/?i=3699
 [4] = https://curl.haxx.se/bug/?i=3715
 [5] = https://curl.haxx.se/bug/?i=3718
 [6] = https://curl.haxx.se/bug/?i=2487
 [7] = https://curl.haxx.se/bug/?i=3724
 [8] = https://curl.haxx.se/bug/?i=3737
 [9] = https://curl.haxx.se/bug/?i=3741
 [10] = https://curl.haxx.se/bug/?i=3651
 [11] = https://curl.haxx.se/bug/?i=3731
 [12] = https://curl.haxx.se/bug/?i=3736
 [13] = https://curl.haxx.se/bug/?i=3723
 [14] = https://curl.haxx.se/bug/?i=3732
 [15] = https://curl.haxx.se/bug/?i=3729
 [16] = https://curl.haxx.se/bug/?i=3720
 [17] = https://curl.haxx.se/bug/?i=3738
 [18] = https://curl.haxx.se/bug/?i=3744
 [19] = https://curl.haxx.se/bug/?i=3743
 [20] = https://curl.haxx.se/bug/?i=3759
 [21] = https://curl.haxx.se/bug/?i=3758
 [22] = https://curl.haxx.se/bug/?i=3739
 [23] = https://curl.haxx.se/bug/?i=3725
 [24] = https://curl.haxx.se/bug/?i=3721
 [25] = https://curl.haxx.se/bug/?i=3654
 [26] = https://curl.haxx.se/bug/?i=3753
 [27] = https://curl.haxx.se/bug/?i=3757
 [28] = https://curl.haxx.se/bug/?i=3774
 [29] = https://curl.haxx.se/bug/?i=3783
 [30] = https://curl.haxx.se/bug/?i=3777
 [31] = https://curl.haxx.se/bug/?i=3752
 [32] = https://curl.haxx.se/bug/?i=3713
 [33] = https://curl.haxx.se/bug/?i=3762
 [34] = https://curl.haxx.se/bug/?i=3772
 [35] = https://curl.haxx.se/bug/?i=3823
 [36] = https://curl.haxx.se/bug/?i=3750
 [37] = https://curl.haxx.se/bug/?i=3782
 [38] = https://curl.haxx.se/bug/?i=3717
 [39] = https://curl.haxx.se/mail/lib-2019-04/0052.html
 [40] = https://curl.haxx.se/bug/?i=3768
 [41] = https://curl.haxx.se/bug/?i=3813
 [42] = https://curl.haxx.se/bug/?i=3820
 [43] = https://curl.haxx.se/bug/?i=3808
 [44] = https://curl.haxx.se/bug/?i=3805
 [45] = https://curl.haxx.se/bug/?i=3809
 [46] = https://curl.haxx.se/bug/?i=3769
 [47] = https://curl.haxx.se/bug/?i=3801
 [48] = https://curl.haxx.se/bug/?i=3488
 [49] = https://curl.haxx.se/bug/?i=3817
 [50] = https://curl.haxx.se/bug/?i=3833
 [51] = https://curl.haxx.se/bug/?i=3829
 [52] = https://curl.haxx.se/bug/?i=3537
 [53] = https://curl.haxx.se/bug/?i=3726
 [54] = https://curl.haxx.se/bug/?i=3570
 [55] = https://curl.haxx.se/bug/?i=3771
 [56] = https://curl.haxx.se/bug/?i=3807
 [57] = https://curl.haxx.se/bug/?i=3846
 [58] = https://curl.haxx.se/bug/?i=3838
 [59] = https://curl.haxx.se/bug/?i=3834
 [60] = https://curl.haxx.se/bug/?i=3837
 [61] = https://curl.haxx.se/bug/?i=3869
 [62] = https://curl.haxx.se/bug/?i=3818
 [63] = https://curl.haxx.se/bug/?i=3866
 [64] = https://curl.haxx.se/bug/?i=3867
 [65] = https://curl.haxx.se/bug/?i=3861
 [66] = https://curl.haxx.se/bug/?i=3850
 [67] = https://curl.haxx.se/bug/?i=3862
 [68] = https://curl.haxx.se/bug/?i=3860
 [69] = https://curl.haxx.se/bug/?i=3856
 [70] = https://curl.haxx.se/bug/?i=3858
 [71] = https://curl.haxx.se/bug/?i=3885
 [72] = https://curl.haxx.se/bug/?i=3878
 [73] = https://curl.haxx.se/bug/?i=3880
 [74] = https://curl.haxx.se/bug/?i=3824
 [75] = https://curl.haxx.se/bug/?i=3711
 [76] = https://curl.haxx.se/bug/?i=3863
 [77] = https://curl.haxx.se/bug/?i=3894
 [78] = https://curl.haxx.se/bug/?i=3844
 [79] = https://curl.haxx.se/bug/?i=3895
 [80] = https://curl.haxx.se/bug/?i=3887
 [81] = https://curl.haxx.se/bug/?i=3876
 [82] = https://curl.haxx.se/docs/CVE-2019-5436.html
 [83] = https://curl.haxx.se/bug/?i=3873
 [84] = https://curl.haxx.se/bug/?i=3905
 [85] = https://curl.haxx.se/bug/?i=3892
 [86] = https://curl.haxx.se/bug/?i=3906
 [87] = https://curl.haxx.se/docs/CVE-2019-5435.html
 [88] = https://curl.haxx.se/bug/?i=3908
 [89] = https://curl.haxx.se/bug/?i=3902
 [90] = https://curl.haxx.se/bug/?i=3672
 [91] = https://curl.haxx.se/bug/?i=3671
 [92] = https://curl.haxx.se/bug/?i=3697
 [93] = https://curl.haxx.se/bug/?i=3692
 [94] = https://curl.haxx.se/bug/?i=3689
 [95] = https://curl.haxx.se/bug/?i=3686
 [96] = https://github.com/curl/curl/issues/3175#issuecomment-439068724

Changes to jni/curl/configure.
22248
22249
22250
22251
22252
22253
22254
22255

22256
22257
22258
22259
22260
22261
22262
22248
22249
22250
22251
22252
22253
22254

22255
22256
22257
22258
22259
22260
22261
22262







-
+







if test "${with_amissl+set}" = set; then :
  withval=$with_amissl; OPT_AMISSL=$withval
fi


{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable Amiga native SSL/TLS (AmiSSL)" >&5
$as_echo_n "checking whether to enable Amiga native SSL/TLS (AmiSSL)... " >&6; }
if test "$HAVE_PROTO_BSDSOCKET_H" == "1"; then
if test "$HAVE_PROTO_BSDSOCKET_H" = "1"; then
  if test -z "$ssl_backends" -o "x$OPT_AMISSL" != xno; then
    ssl_msg=
    if test "x$OPT_AMISSL" != "xno"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      ssl_msg="AmiSSL"
      test amissl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
23617
23618
23619
23620
23621
23622
23623










23624
23625
23626
23627
23628
23629
23630
23617
23618
23619
23620
23621
23622
23623
23624
23625
23626
23627
23628
23629
23630
23631
23632
23633
23634
23635
23636
23637
23638
23639
23640







+
+
+
+
+
+
+
+
+
+







  fi

    check_for_ca_bundle=1
  fi

  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi

if test X"$OPT_SSL" != Xoff &&
  test X"$OPT_SSL" != Xno &&
  test "$OPENSSL_ENABLED" != "1"; then
  { $as_echo "$as_me:${as_lineno-$LINENO}: OPT_SSL: $OPT_SSL" >&5
$as_echo "$as_me: OPT_SSL: $OPT_SSL" >&6;}
  { $as_echo "$as_me:${as_lineno-$LINENO}: OPENSSL_ENABLED: $OPENSSL_ENABLED" >&5
$as_echo "$as_me: OPENSSL_ENABLED: $OPENSSL_ENABLED" >&6;}
  as_fn_error $? "--with-ssl was given but OpenSSL could not be detected" "$LINENO" 5
fi


if test X"$OPENSSL_ENABLED" = X"1"; then

# Check whether --with-egd-socket was given.
if test "${with_egd_socket+set}" = set; then :
  withval=$with_egd_socket;  EGD_SOCKET="$withval"
27838
27839
27840
27841
27842
27843
27844

































































































































27845


27846
27847
27848
27849
27850
27851
27852
27848
27849
27850
27851
27852
27853
27854
27855
27856
27857
27858
27859
27860
27861
27862
27863
27864
27865
27866
27867
27868
27869
27870
27871
27872
27873
27874
27875
27876
27877
27878
27879
27880
27881
27882
27883
27884
27885
27886
27887
27888
27889
27890
27891
27892
27893
27894
27895
27896
27897
27898
27899
27900
27901
27902
27903
27904
27905
27906
27907
27908
27909
27910
27911
27912
27913
27914
27915
27916
27917
27918
27919
27920
27921
27922
27923
27924
27925
27926
27927
27928
27929
27930
27931
27932
27933
27934
27935
27936
27937
27938
27939
27940
27941
27942
27943
27944
27945
27946
27947
27948
27949
27950
27951
27952
27953
27954
27955
27956
27957
27958
27959
27960
27961
27962
27963
27964
27965
27966
27967
27968
27969
27970
27971
27972
27973
27974
27975
27976
27977
27978
27979
27980
27981
27982
27983

27984
27985
27986
27987
27988
27989
27990
27991
27992







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+







  withval=$with_fish_functions_dir; OPT_FISH_FPATH=$withval
fi

case "$OPT_FISH_FPATH" in
  no)
        ;;
  default|yes)

    if test -n "$PKG_CONFIG"; then
      PKGCONFIG="$PKG_CONFIG"
    else
      if test -n "$ac_tool_prefix"; then
  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_PKGCONFIG+:} false; then :
  $as_echo_n "(cached) " >&6
else
  case $PKGCONFIG in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_PKGCONFIG="$PKGCONFIG" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_dummy="$PATH:/usr/bin:/usr/local/bin"
for as_dir in $as_dummy
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    ac_cv_path_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac
fi
PKGCONFIG=$ac_cv_path_PKGCONFIG
if test -n "$PKGCONFIG"; then
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKGCONFIG" >&5
$as_echo "$PKGCONFIG" >&6; }
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi


fi
if test -z "$ac_cv_path_PKGCONFIG"; then
  ac_pt_PKGCONFIG=$PKGCONFIG
  # Extract the first word of "pkg-config", so it can be a program name with args.
set dummy pkg-config; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_ac_pt_PKGCONFIG+:} false; then :
  $as_echo_n "(cached) " >&6
else
  case $ac_pt_PKGCONFIG in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_ac_pt_PKGCONFIG="$ac_pt_PKGCONFIG" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_dummy="$PATH:/usr/bin:/usr/local/bin"
for as_dir in $as_dummy
do
  IFS=$as_save_IFS
  test -z "$as_dir" && as_dir=.
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
    ac_cv_path_ac_pt_PKGCONFIG="$as_dir/$ac_word$ac_exec_ext"
    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac
fi
ac_pt_PKGCONFIG=$ac_cv_path_ac_pt_PKGCONFIG
if test -n "$ac_pt_PKGCONFIG"; then
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKGCONFIG" >&5
$as_echo "$ac_pt_PKGCONFIG" >&6; }
else
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi

  if test "x$ac_pt_PKGCONFIG" = x; then
    PKGCONFIG="no"
  else
    case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
    PKGCONFIG=$ac_pt_PKGCONFIG
  fi
else
  PKGCONFIG="$ac_cv_path_PKGCONFIG"
fi

    fi

    if test "x$PKGCONFIG" != "xno"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for fish options with pkg-config" >&5
$as_echo_n "checking for fish options with pkg-config... " >&6; }
            itexists=`
    if test -n ""; then
      PKG_CONFIG_LIBDIR=""
      export PKG_CONFIG_LIBDIR
    fi
         $PKGCONFIG --exists fish >/dev/null 2>&1 && echo 1`

      if test -z "$itexists"; then
                        PKGCONFIG="no"
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      else
        { $as_echo "$as_me:${as_lineno-$LINENO}: result: found" >&5
$as_echo "found" >&6; }
      fi
    fi

    if test "$PKGCONFIG" != "no" ; then
      FISH_FUNCTIONS_DIR="$($PKGCONFIG --variable completionsdir fish)"
    else
        FISH_FUNCTIONS_DIR="$datarootdir/fish/completions"
      FISH_FUNCTIONS_DIR="$datarootdir/fish/vendor_completions.d"
    fi

    ;;
  *)
        FISH_FUNCTIONS_DIR="$withval"

    ;;
esac
33725
33726
33727
33728
33729
33730
33731


































































































































































































































































































33732
33733
33734
33735
33736
33737
33738
33865
33866
33867
33868
33869
33870
33871
33872
33873
33874
33875
33876
33877
33878
33879
33880
33881
33882
33883
33884
33885
33886
33887
33888
33889
33890
33891
33892
33893
33894
33895
33896
33897
33898
33899
33900
33901
33902
33903
33904
33905
33906
33907
33908
33909
33910
33911
33912
33913
33914
33915
33916
33917
33918
33919
33920
33921
33922
33923
33924
33925
33926
33927
33928
33929
33930
33931
33932
33933
33934
33935
33936
33937
33938
33939
33940
33941
33942
33943
33944
33945
33946
33947
33948
33949
33950
33951
33952
33953
33954
33955
33956
33957
33958
33959
33960
33961
33962
33963
33964
33965
33966
33967
33968
33969
33970
33971
33972
33973
33974
33975
33976
33977
33978
33979
33980
33981
33982
33983
33984
33985
33986
33987
33988
33989
33990
33991
33992
33993
33994
33995
33996
33997
33998
33999
34000
34001
34002
34003
34004
34005
34006
34007
34008
34009
34010
34011
34012
34013
34014
34015
34016
34017
34018
34019
34020
34021
34022
34023
34024
34025
34026
34027
34028
34029
34030
34031
34032
34033
34034
34035
34036
34037
34038
34039
34040
34041
34042
34043
34044
34045
34046
34047
34048
34049
34050
34051
34052
34053
34054
34055
34056
34057
34058
34059
34060
34061
34062
34063
34064
34065
34066
34067
34068
34069
34070
34071
34072
34073
34074
34075
34076
34077
34078
34079
34080
34081
34082
34083
34084
34085
34086
34087
34088
34089
34090
34091
34092
34093
34094
34095
34096
34097
34098
34099
34100
34101
34102
34103
34104
34105
34106
34107
34108
34109
34110
34111
34112
34113
34114
34115
34116
34117
34118
34119
34120
34121
34122
34123
34124
34125
34126
34127
34128
34129
34130
34131
34132
34133
34134
34135
34136
34137
34138
34139
34140
34141
34142
34143
34144
34145
34146
34147
34148
34149
34150
34151
34152
34153
34154
34155
34156
34157
34158
34159
34160
34161
34162
34163
34164
34165
34166
34167
34168







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    curl_cv_func_gethostname="yes"
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
    curl_cv_func_gethostname="no"
  fi


          #
  tst_links_getpeername="unknown"
  tst_proto_getpeername="unknown"
  tst_compi_getpeername="unknown"
  tst_allow_getpeername="unknown"
  #
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpeername can be linked" >&5
$as_echo_n "checking if getpeername can be linked... " >&6; }
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket

int main (void)
{

      if(0 != getpeername(0, (void *)0, (void *)0))
        return 1;

 ;
 return 0;
}

_ACEOF
if ac_fn_c_try_link "$LINENO"; then :

    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
    tst_links_getpeername="yes"

else

    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
    tst_links_getpeername="no"

fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
  #
  if test "$tst_links_getpeername" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpeername is prototyped" >&5
$as_echo_n "checking if getpeername is prototyped... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket

_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  $EGREP "getpeername" >/dev/null 2>&1; then :

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_proto_getpeername="yes"

else

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_proto_getpeername="no"

fi
rm -f conftest*

  fi
  #
  if test "$tst_proto_getpeername" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpeername is compilable" >&5
$as_echo_n "checking if getpeername is compilable... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


        $curl_includes_winsock2
        $curl_includes_bsdsocket
        $curl_includes_sys_socket

int main (void)
{

        if(0 != getpeername(0, (void *)0, (void *)0))
          return 1;

 ;
 return 0;
}

_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_compi_getpeername="yes"

else

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_compi_getpeername="no"

fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  #
  if test "$tst_compi_getpeername" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpeername usage allowed" >&5
$as_echo_n "checking if getpeername usage allowed... " >&6; }
    if test "x$curl_disallow_getpeername" != "xyes"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_allow_getpeername="yes"
    else
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_allow_getpeername="no"
    fi
  fi
  #
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getpeername might be used" >&5
$as_echo_n "checking if getpeername might be used... " >&6; }
  if test "$tst_links_getpeername" = "yes" &&
     test "$tst_proto_getpeername" = "yes" &&
     test "$tst_compi_getpeername" = "yes" &&
     test "$tst_allow_getpeername" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }

cat >>confdefs.h <<_ACEOF
#define HAVE_GETPEERNAME 1
_ACEOF

    curl_cv_func_getpeername="yes"
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
    curl_cv_func_getpeername="no"
  fi


          #
  tst_links_getsockname="unknown"
  tst_proto_getsockname="unknown"
  tst_compi_getsockname="unknown"
  tst_allow_getsockname="unknown"
  #
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getsockname can be linked" >&5
$as_echo_n "checking if getsockname can be linked... " >&6; }
  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket

int main (void)
{

      if(0 != getsockname(0, (void *)0, (void *)0))
        return 1;

 ;
 return 0;
}

_ACEOF
if ac_fn_c_try_link "$LINENO"; then :

    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
    tst_links_getsockname="yes"

else

    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
    tst_links_getsockname="no"

fi
rm -f core conftest.err conftest.$ac_objext \
    conftest$ac_exeext conftest.$ac_ext
  #
  if test "$tst_links_getsockname" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getsockname is prototyped" >&5
$as_echo_n "checking if getsockname is prototyped... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */

      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket

_ACEOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
  $EGREP "getsockname" >/dev/null 2>&1; then :

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_proto_getsockname="yes"

else

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_proto_getsockname="no"

fi
rm -f conftest*

  fi
  #
  if test "$tst_proto_getsockname" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getsockname is compilable" >&5
$as_echo_n "checking if getsockname is compilable... " >&6; }
    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h.  */


        $curl_includes_winsock2
        $curl_includes_bsdsocket
        $curl_includes_sys_socket

int main (void)
{

        if(0 != getsockname(0, (void *)0, (void *)0))
          return 1;

 ;
 return 0;
}

_ACEOF
if ac_fn_c_try_compile "$LINENO"; then :

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_compi_getsockname="yes"

else

      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_compi_getsockname="no"

fi
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
  fi
  #
  if test "$tst_compi_getsockname" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getsockname usage allowed" >&5
$as_echo_n "checking if getsockname usage allowed... " >&6; }
    if test "x$curl_disallow_getsockname" != "xyes"; then
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
      tst_allow_getsockname="yes"
    else
      { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
      tst_allow_getsockname="no"
    fi
  fi
  #
  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if getsockname might be used" >&5
$as_echo_n "checking if getsockname might be used... " >&6; }
  if test "$tst_links_getsockname" = "yes" &&
     test "$tst_proto_getsockname" = "yes" &&
     test "$tst_compi_getsockname" = "yes" &&
     test "$tst_allow_getsockname" = "yes"; then
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }

cat >>confdefs.h <<_ACEOF
#define HAVE_GETSOCKNAME 1
_ACEOF

    curl_cv_func_getsockname="yes"
  else
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
    curl_cv_func_getsockname="no"
  fi


      #
  tst_links_getifaddrs="unknown"
  tst_proto_getifaddrs="unknown"
  tst_compi_getifaddrs="unknown"
  tst_works_getifaddrs="unknown"
  tst_allow_getifaddrs="unknown"
Changes to jni/curl/configure.ac.
1565
1566
1567
1568
1569
1570
1571
1572

1573
1574
1575
1576
1577
1578
1579
1565
1566
1567
1568
1569
1570
1571

1572
1573
1574
1575
1576
1577
1578
1579







-
+







OPT_AMISSL=no
AC_ARG_WITH(amissl,dnl
AC_HELP_STRING([--with-amissl],[enable Amiga native SSL/TLS (AmiSSL)])
AC_HELP_STRING([--without-amissl], [disable Amiga native SSL/TLS (AmiSSL)]),
  OPT_AMISSL=$withval)

AC_MSG_CHECKING([whether to enable Amiga native SSL/TLS (AmiSSL)])
if test "$HAVE_PROTO_BSDSOCKET_H" == "1"; then
if test "$HAVE_PROTO_BSDSOCKET_H" = "1"; then
  if test -z "$ssl_backends" -o "x$OPT_AMISSL" != xno; then
    ssl_msg=
    if test "x$OPT_AMISSL" != "xno"; then
      AC_MSG_RESULT(yes)
      ssl_msg="AmiSSL"
      test amissl != "$DEFAULT_SSL_BACKEND" || VALID_DEFAULT_SSL_BACKEND=yes
      AMISSL_ENABLED=1
1884
1885
1886
1887
1888
1889
1890








1891
1892
1893
1894
1895
1896
1897
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905







+
+
+
+
+
+
+
+







    fi
    CURL_CHECK_OPENSSL_API
    check_for_ca_bundle=1
  fi

  test -z "$ssl_msg" || ssl_backends="${ssl_backends:+$ssl_backends, }$ssl_msg"
fi

if test X"$OPT_SSL" != Xoff &&
  test X"$OPT_SSL" != Xno &&
  test "$OPENSSL_ENABLED" != "1"; then
  AC_MSG_NOTICE([OPT_SSL: $OPT_SSL])
  AC_MSG_NOTICE([OPENSSL_ENABLED: $OPENSSL_ENABLED])
  AC_MSG_ERROR([--with-ssl was given but OpenSSL could not be detected])
fi

dnl **********************************************************************
dnl Check for the random seed preferences
dnl **********************************************************************

if test X"$OPENSSL_ENABLED" = X"1"; then
  AC_ARG_WITH(egd-socket,
3475
3476
3477
3478
3479
3480
3481




3482


3483
3484
3485
3486
3487
3488
3489
3483
3484
3485
3486
3487
3488
3489
3490
3491
3492
3493

3494
3495
3496
3497
3498
3499
3500
3501
3502







+
+
+
+
-
+
+







  [OPT_FISH_FPATH=$withval])
case "$OPT_FISH_FPATH" in
  no)
    dnl --without-fish-functions-dir option used
    ;;
  default|yes)
    dnl --with-fish-functions-dir option used without path
    CURL_CHECK_PKGCONFIG(fish)
    if test "$PKGCONFIG" != "no" ; then
      FISH_FUNCTIONS_DIR="$($PKGCONFIG --variable completionsdir fish)"
    else
    FISH_FUNCTIONS_DIR="$datarootdir/fish/completions"
      FISH_FUNCTIONS_DIR="$datarootdir/fish/vendor_completions.d"
    fi
    AC_SUBST(FISH_FUNCTIONS_DIR)
    ;;
  *)
    dnl --with-fish-functions-dir option used with path
    FISH_FUNCTIONS_DIR="$withval"
    AC_SUBST(FISH_FUNCTIONS_DIR)
    ;;
3702
3703
3704
3705
3706
3707
3708


3709
3710
3711
3712
3713
3714
3715
3715
3716
3717
3718
3719
3720
3721
3722
3723
3724
3725
3726
3727
3728
3729
3730







+
+







CURL_CHECK_FUNC_GETADDRINFO
CURL_CHECK_FUNC_GAI_STRERROR
CURL_CHECK_FUNC_GETHOSTBYADDR
CURL_CHECK_FUNC_GETHOSTBYADDR_R
CURL_CHECK_FUNC_GETHOSTBYNAME
CURL_CHECK_FUNC_GETHOSTBYNAME_R
CURL_CHECK_FUNC_GETHOSTNAME
CURL_CHECK_FUNC_GETPEERNAME
CURL_CHECK_FUNC_GETSOCKNAME
CURL_CHECK_FUNC_GETIFADDRS
CURL_CHECK_FUNC_GETSERVBYPORT_R
CURL_CHECK_FUNC_GMTIME_R
CURL_CHECK_FUNC_INET_NTOA_R
CURL_CHECK_FUNC_INET_NTOP
CURL_CHECK_FUNC_INET_PTON
CURL_CHECK_FUNC_IOCTL
Added jni/curl/docs/BUG-BOUNTY.md.










































































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
# The curl bug bounty

The curl project runs a bug bounty program in association with
[HackerOne](https://www.hackerone.com) and the [Internet Bug
Bounty](https://internetbugbounty.org).

# How does it work?

Start out by posting your suspected security vulnerability directly to [curl's
HackerOne program](https://hackerone.com/curl).

After you have reported a security issue, it has been deemed credible, and a
patch and advisory has been made public, you may be eligible for a bounty from
this program.

See all details at [https://hackerone.com/curl](https://hackerone.com/curl)

This bounty is relying on funds from sponsors. If you use curl professionally,
consider help funding this! See
[https://opencollective.com/curl](https://opencollective.com/curl) for
details.

# What are the reward amounts?

The curl projects offer monetary compensation for reported and published
security vulnerabilities. The amount of money that is rewarded depends on how
serious the flaw is determined to be.

We offer reward money *up to* a certain amount per severity. The curl security
team determines the severity of each reported flaw on a case by case basis and
the exact amount rewarded to the reporter is then decided.

Check out the current award amounts at [https://hackerone.com/curl](https://hackerone.com/curl)

# Who is eligible for a reward?

Everyone and anyone who reports a security problem in a released curl version
that hasn't already been reported can ask for a bounty.

Vulnerabilities in features that are off by default and documented as
experimental are not eligible for a reward.

The vulnerability has to be fixed and publicly announced (by the curl project)
before a bug bounty will be considered.

Bounties need to be requested within twelve months from the publication of the
vulnerability.

The vulnerabilities must not have been made public before February 1st, 2019.
We do not retroactively pay for old, already known, or published security
problems.

# Product vulnerabilities only

This bug bounty only concerns the curl and libcurl products and thus their
respective source codes - when running on existing hardware. It does not
include documentation, websites, or other infrastructure.

The curl security team will be the sole arbiter if a reported flaw can be
subject to a bounty or not.

# How are vulnerabilities graded?

The grading of each reported vulnerability that makes a reward claim will be
performed by the curl security team. The grading will be based on the CVSS
(Common Vulnerability Scoring System) 3.0.

# How are reward amounts determined?

The curl security team first gives the vulnerability a score, as mentioned
above, and based on that level we set an amount depending on the specifics of
the individual case. Other sponsors of the program might also get involved and
can raise the amounts depending on the particular issue.

# What happens if the bounty fund is drained?

The bounty fund depends on sponsors. If we pay out more bounties than we add,
the fund will eventually drain. If that end up happening, we will simply not
be able to pay out as high bounties as we would like and hope that we can
convince new sponsors to help us top up the fund again.

# Regarding taxes, etc. on the bounties

In the event that the individual receiving a curl bug bounty needs to pay
taxes on the reward money, the responsibility lies with the receiver. The
curl project or its security team never actually receive any of this money,
hold the money, or pay out the money.

## Bonus levels

In cooperation with [Dropbox](https://www.dropbox.com) the curl bug bounty can
offer the highest levels of rewards if the issue covers one of the interest
areas of theirs - and only if the bug is graded *high* or *critical*. A
non-exhaustive list of vulnerabilities Dropbox is interested in are:

 - RCE
 - URL parsing vulnerabilities with demonstrable security impact

Dropbox would generally hand out rewards for critical vulnerabilities ranging
from 12k-32k USD where RCE is on the upper end of the spectrum.

URL parsing vulnerabilities with demonstrable security impact might include
incorrectly determining the authority of a URL when a special character is
inserted into the path of the URL (as a hypothetical). This type of
vulnerability would likely yield 6k-12k unless further impact could be
demonstrated.
Changes to jni/curl/docs/BUGS.
57
58
59
60
61
62
63

64
65
66







67
68
69
70
71
72
73
57
58
59
60
61
62
63
64



65
66
67
68
69
70
71
72
73
74
75
76
77
78







+
-
-
-
+
+
+
+
+
+
+








  If you find a bug or problem in curl or libcurl that you think has a
  security impact, for example a bug that can put users in danger or make them
  vulnerable if the bug becomes public knowledge, then please report that bug
  using our security development process.

  Security related bugs or bugs that are suspected to have a security impact,
  should be reported on the curl security tracker at HackerOne:
  should be reported by email to curl-security@haxx.se so that they first can
  be dealt with away from the public to minimize the harm and impact it will
  have on existing users out there who might be using the vulnerable versions.

        https://hackerone.com/curl

  This ensures that the report reaches the curl security team so that they
  first can be deal with the report away from the public to minimize the harm
  and impact it will have on existing users out there who might be using the
  vulnerable versions.

  The curl project's process for handling security related issues is
  documented here:

        https://curl.haxx.se/dev/secprocess.html

1.4 What to report
Changes to jni/curl/docs/CIPHERS.md.
267
268
269
270
271
272
273

274

275
276
277
278
279
280
281
267
268
269
270
271
272
273
274

275
276
277
278
279
280
281
282







+
-
+








`ecdhe_rsa_chacha20_poly1305_sha_256`
`ecdhe_ecdsa_chacha20_poly1305_sha_256`
`dhe_rsa_chacha20_poly1305_sha_256`

## GSKit

Ciphers are internally defined as
Ciphers are internally defined as numeric codes (https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/gsk_attribute_set_buffer.htm),
[numeric codes](https://www.ibm.com/support/knowledgecenter/ssw_ibm_i_73/apis/gsk_attribute_set_buffer.htm),
but libcurl maps them to the following case-insensitive names.

### SSL2 cipher suites (insecure: disabled by default)

`rc2-md5`
`rc4-md5`
`exp-rc2-md5`
442
443
444
445
446
447
448
449

450
451




452
453
454
455
456
457
458
443
444
445
446
447
448
449

450
451

452
453
454
455
456
457
458
459
460
461
462







-
+

-
+
+
+
+







`ECDHE-PSK-NULL-SHA256`,
`ECDHE-PSK-AES128-CBC-SHA256`,
`PSK-CHACHA20-POLY1305`,
`ECDHE-PSK-CHACHA20-POLY1305`,
`DHE-PSK-CHACHA20-POLY1305`,
`EDH-RSA-DES-CBC3-SHA`,

## WinSSL
## Schannel

WinSSL allows the enabling and disabling of encryption algorithms, but not specific ciphersuites. They are defined by Microsoft (https://msdn.microsoft.com/en-us/library/windows/desktop/aa375549(v=vs.85).aspx)
Schannel allows the enabling and disabling of encryption algorithms, but not
specific ciphersuites. They are
[defined](https://docs.microsoft.com/windows/desktop/SecCrypto/alg-id) by
Microsoft.

`CALG_MD2`,
`CALG_MD4`,
`CALG_MD5`,
`CALG_SHA`,
`CALG_SHA1`,
`CALG_MAC`,
Changes to jni/curl/docs/CODE_STYLE.md.
1
2
3
4
5
6
7
8
9
10
11
12
13


14
15
16
17
18
19
20
1
2
3
4
5
6
7
8
9
10
11


12
13
14
15
16
17
18
19
20











-
-
+
+







# curl C code style

Source code that has a common style is easier to read than code that uses
different styles in different places. It helps making the code feel like one
single code base. Easy-to-read is a very important property of code and helps
making it easier to review when new things are added and it helps debugging
code when developers are trying to figure out why things go wrong. A unified
style is more important than individual contributors having their own personal
tastes satisfied.

Our C code has a few style rules. Most of them are verified and upheld by the
"lib/checksrc.pl" script. Invoked with "make checksrc" or even by default by
the build system when built after "./configure --enable-debug" has been used.
`lib/checksrc.pl` script. Invoked with `make checksrc` or even by default by
the build system when built after `./configure --enable-debug` has been used.

It is normally not a problem for anyone to follow the guidelines, as you just
need to copy the style already used in the source code and there are no
particularly unusual rules in our set of rules.

We also work hard on writing code that are warning-free on all the major
platforms and in general on as many platforms as possible. Code that obviously
223
224
225
226
227
228
229
230

231
232
233
234
235
236
237
223
224
225
226
227
228
229

230
231
232
233
234
235
236
237







-
+







                 (int)clipamount));

## Platform dependent code

Use **#ifdef HAVE_FEATURE** to do conditional code. We avoid checking for
particular operating systems or hardware in the #ifdef lines. The HAVE_FEATURE
shall be generated by the configure script for unix-like systems and they are
hard-coded in the config-[system].h files for the others.
hard-coded in the `config-[system].h` files for the others.

We also encourage use of macros/functions that possibly are empty or defined
to constants when libcurl is built without that feature, to make the code
seamless. Like this example where the **magic()** function works differently
depending on a build-time conditional:

    #ifdef HAVE_MAGIC
Changes to jni/curl/docs/DEPRECATE.md.
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
1
2
3
4
5
6
7




























































8
9
10
11
12
13
14







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







# Items to be removed from future curl releases

If any of these deprecated features is a cause for concern for you, please
email the curl-library mailing list as soon as possible and explain to us why
this is a problem for you and how your use case can't be satisfied properly
using a work around.

## HTTP pipelining

HTTP pipelining is badly supported by curl in the sense that we have bugs and
it is a fragile feature without enough tests. Also, when something turns out
to have problems it is really tricky to debug due to the timing sensitivity so
very often enabling debug outputs or similar completely changes the nature of
the behavior and things are not reproducing anymore!

HTTP pipelining was never enabled by default by the large desktop browsers due
to all the issues with it. Both Firefox and Chrome have also dropped
pipelining support entirely since a long time back now. We are in fact over
time becoming more and more lonely in supporting pipelining.

The bad state of HTTP pipelining was a primary driving factor behind HTTP/2
and its multiplexing feature. HTTP/2 multiplexing is truly and really
"pipelining done right". It is way more solid, practical and solves the use
case in a better way with better performance and fewer downsides and problems.

In 2018, pipelining *should* be abandoned and HTTP/2 should be used instead.

### State

In 7.62.0, we will add code that ignores the "enable pipeline" option
setting). The *setopt() function would still return "OK" though so the
application couldn't tell that this is happening.

Users who truly need pipelining from that version will need to modify the code
(ever so slightly) and rebuild.

### Removal

Six months later, in sync with the planned release happen in April 2019,
(might be 7.66.0), assuming no major riots have occurred due to this in the
mean time, we rip out the pipelining code. It is in the order of 1000 lines of
libcurl code.

Left to answer: should the *setopt() function start to return error when these
options are set to be able to tell when they're trying to use options that are
no longer around or should we maintain behavior as much as possible?

## `CURLOPT_DNS_USE_GLOBAL_CACHE`

This option makes libcurl use a global non-thread-safe cache for DNS if
enabled. The option has been marked as "obsolete" in the header file and in
documentation for several years already.

There's proper and safe method alternative provided since many years: the
share API.

### State

In curl 7.62.0 setting this option to TRUE will not have any effect. The
global cache will not be enabled. The code still remains so it is easy to
revert if need be.

### Removal

Remove all global-cache related code from curl around April 2019 (might be
7.66.0).

## HTTP/0.9

Supporting this is non-obvious and might even come as a surprise to some
users. Potentially even being a security risk in some cases.

### State

Changes to jni/curl/docs/INSTALL.md.
60
61
62
63
64
65
66
67

68
69
70
71
72
73
74
60
61
62
63
64
65
66

67
68
69
70
71
72
73
74







-
+








If you insist on forcing a build without SSL support, even though you may
have OpenSSL installed in your system, you can run configure like this:

   ./configure --without-ssl

If you have OpenSSL installed, but with the libraries in one place and the
header files somewhere else, you have to set the LDFLAGS and CPPFLAGS
header files somewhere else, you have to set the `LDFLAGS` and `CPPFLAGS`
environment variables prior to running configure.  Something like this should
work:

    CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure

If you have shared SSL libs installed in a directory where your run-time
linker doesn't find them (which usually causes configure failures), you can
117
118
119
120
121
122
123
124
125
126



127
128
129
130
131
132
133
117
118
119
120
121
122
123



124
125
126
127
128
129
130
131
132
133







-
-
-
+
+
+







 discouraged, and intermixing CRTs in the same app is something to avoid at
 any cost.

 Reading and comprehending Microsoft Knowledge Base articles KB94248 and
 KB140584 is a must for any Windows developer. Especially important is full
 understanding if you are not going to follow the advice given above.

 - [How To Use the C Run-Time](https://support.microsoft.com/kb/94248/en-us)
 - [How to link with the correct C Run-Time CRT library](https://support.microsoft.com/kb/140584/en-us)
 - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://msdn.microsoft.com/en-us/library/ms235460)
 - [How To Use the C Run-Time](https://support.microsoft.com/help/94248/how-to-use-the-c-run-time)
 - [Run-Time Library Compiler Options](https://docs.microsoft.com/cpp/build/reference/md-mt-ld-use-run-time-library)
 - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://docs.microsoft.com/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries)

If your app is misbehaving in some strange way, or it is suffering from
memory corruption, before asking for further help, please try first to
rebuild every single library your app uses as well as your app using the
debug multithreaded dynamic C runtime.

 If you get linkage errors read section 5.7 of the FAQ document.
144
145
146
147
148
149
150
151

152
153
154
155
156
157
158
144
145
146
147
148
149
150

151
152
153
154
155
156
157
158







-
+







 - `mingw32-make mingw32-zlib` to build with Zlib support;
 - `mingw32-make mingw32-ssl-zlib` to build with SSL and Zlib enabled;
 - `mingw32-make mingw32-ssh2-ssl-zlib` to build with SSH2, SSL, Zlib;
 - `mingw32-make mingw32-ssh2-ssl-sspi-zlib` to build with SSH2, SSL, Zlib
   and SSPI support.

If you have any problems linking libraries or finding header files, be sure
to verify that the provided "Makefile.m32" files use the proper paths, and
to verify that the provided `Makefile.m32` files use the proper paths, and
adjust as necessary. It is also possible to override these paths with
environment variables, for example:

    set ZLIB_PATH=c:\zlib-1.2.8
    set OPENSSL_PATH=c:\openssl-1.0.2c
    set LIBSSH2_PATH=c:\libssh2-1.6.0

168
169
170
171
172
173
174
175
176


177
178
179
180
181
182
183
168
169
170
171
172
173
174


175
176
177
178
179
180
181
182
183







-
-
+
+







    set USE_LDAP_NOVELL=1

If you want to enable LDAPS support then set LDAPS=1.

## Cygwin

Almost identical to the unix installation. Run the configure script in the
curl source tree root with `sh configure`. Make sure you have the sh
executable in /bin/ or you'll see the configure fail toward the end.
curl source tree root with `sh configure`. Make sure you have the `sh`
executable in `/bin/` or you'll see the configure fail toward the end.

Run `make`

## Disabling Specific Protocols in Windows builds

The configure utility, unfortunately, is not available for the Windows
environment, therefore, you cannot use the various disable-protocol options of
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
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







-
-
-
+
+
+










-
+



-
-
+
+







 - `CURL_DISABLE_HTTP`     disables HTTP
 - `CURL_DISABLE_IMAP`     disables IMAP
 - `CURL_DISABLE_POP3`     disables POP3
 - `CURL_DISABLE_SMTP`     disables SMTP

If you want to set any of these defines you have the following options:

 - Modify lib/config-win32.h
 - Modify lib/curl_setup.h
 - Modify winbuild/Makefile.vc
 - Modify `lib/config-win32.h`
 - Modify `lib/curl_setup.h`
 - Modify `winbuild/Makefile.vc`
 - Modify the "Preprocessor Definitions" in the libcurl project

Note: The pre-processor settings can be found using the Visual Studio IDE
under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
versions.

## Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds

In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is
necessary to make definition of preprocessor symbol USE_LWIPSOCK visible to
necessary to make definition of preprocessor symbol `USE_LWIPSOCK` visible to
libcurl and curl compilation processes. To set this definition you have the
following alternatives:

 - Modify lib/config-win32.h and src/config-win32.h
 - Modify winbuild/Makefile.vc
 - Modify `lib/config-win32.h` and `src/config-win32.h`
 - Modify `winbuild/Makefile.vc`
 - Modify the "Preprocessor Definitions" in the libcurl project

Note: The pre-processor settings can be found using the Visual Studio IDE
under "Project -> Settings -> C/C++ -> General" in VC6 and "Project ->
Properties -> Configuration Properties -> C/C++ -> Preprocessor" in later
versions.

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
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







-
-
+
+




-
+














-
-
-
-
-
-
+
+
+
+
+
+













-
+








When building an application that uses the static libcurl library on Windows,
you must add `-DCURL_STATICLIB` to your `CFLAGS`.  Otherwise the linker will
look for dynamic import symbols.

## Legacy Windows and SSL

WinSSL (specifically Schannel from Windows SSPI), is the native SSL library in
Windows. However, WinSSL in Windows <= XP is unable to connect to servers that
Schannel (from Windows SSPI), is the native SSL library in Windows. However,
Schannel in Windows <= XP is unable to connect to servers that
no longer support the legacy handshakes and algorithms used by those
versions. If you will be using curl in one of those earlier versions of
Windows you should choose another SSL backend such as OpenSSL.

# Apple iOS and Mac OS X
# Apple iOS and macOS

On modern Apple operating systems, curl can be built to use Apple's SSL/TLS
implementation, Secure Transport, instead of OpenSSL. To build with Secure
Transport for SSL/TLS, use the configure option `--with-darwinssl`. (It is not
necessary to use the option `--without-ssl`.) This feature requires iOS 5.0 or
later, or OS X 10.5 ("Leopard") or later.

When Secure Transport is in use, the curl options `--cacert` and `--capath`
and their libcurl equivalents, will be ignored, because Secure Transport uses
the certificates stored in the Keychain to evaluate whether or not to trust
the server. This, of course, includes the root certificates that ship with the
OS. The `--cert` and `--engine` options, and their libcurl equivalents, are
currently unimplemented in curl with Secure Transport.

For OS X users: In OS X 10.8 ("Mountain Lion"), Apple made a major overhaul to
the Secure Transport API that, among other things, added support for the newer
TLS 1.1 and 1.2 protocols. To get curl to support TLS 1.1 and 1.2, you must
build curl on Mountain Lion or later, or by using the equivalent SDK. If you
set the `MACOSX_DEPLOYMENT_TARGET` environmental variable to an earlier
version of OS X prior to building curl, then curl will use the new Secure
For macOS users: In OS X 10.8 ("Mountain Lion"), Apple made a major overhaul
to the Secure Transport API that, among other things, added support for the
newer TLS 1.1 and 1.2 protocols. To get curl to support TLS 1.1 and 1.2, you
must build curl on Mountain Lion or later, or by using the equivalent SDK. If
you set the `MACOSX_DEPLOYMENT_TARGET` environmental variable to an earlier
version of macOS prior to building curl, then curl will use the new Secure
Transport API on Mountain Lion and later, and fall back on the older API when
the same curl binary is executed on older cats. For example, running these
commands in curl's directory in the shell will build the code such that it
will run on cats as old as OS X 10.6 ("Snow Leopard") (using bash):

    export MACOSX_DEPLOYMENT_TARGET="10.6"
    ./configure --with-darwinssl
    make

# Cross compile

Download and unpack the curl package.

'cd' to the new directory. (e.g. `cd curl-7.12.3`)
`cd` to the new directory. (e.g. `cd curl-7.12.3`)

Set environment variables to point to the cross-compile toolchain and call
configure with any options you need.  Be sure and specify the `--host` and
`--build` parameters at configuration time.  The following script is an
example of cross-compiling for the IBM 405GP PowerPC processor using the
toolchain from MonteVista for Hardhat Linux.

323
324
325
326
327
328
329
330

331
332
333
334
335
336
337
323
324
325
326
327
328
329

330
331
332
333
334
335
336
337







-
+








    ./configure --host=ARCH-OS

# REDUCING SIZE

There are a number of configure options that can be used to reduce the size of
libcurl for embedded applications where binary size is an important factor.
First, be sure to set the CFLAGS variable when configuring with any relevant
First, be sure to set the `CFLAGS` variable when configuring with any relevant
compiler optimization flags to reduce the size of the binary.  For gcc, this
would mean at minimum the -Os option, and potentially the `-march=X`,
`-mdynamic-no-pic` and `-flto` options as well, e.g.

    ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'...

Note that newer compilers often produce smaller code than older versions
356
357
358
359
360
361
362
363
364


365
366
367
368
369
370
371
356
357
358
359
360
361
362


363
364
365
366
367
368
369
370
371







-
-
+
+







 - `--without-libidn` (disables support for the libidn DNS library)
 - `--without-librtmp` (disables support for RTMP)
 - `--without-ssl` (disables support for SSL/TLS)
 - `--without-zlib` (disables support for on-the-fly decompression)

The GNU compiler and linker have a number of options that can reduce the
size of the libcurl dynamic libraries on some platforms even further.
Specify them by providing appropriate CFLAGS and LDFLAGS variables on the
configure command-line, e.g.
Specify them by providing appropriate `CFLAGS` and `LDFLAGS` variables on
the configure command-line, e.g.

    CFLAGS="-Os -ffunction-sections -fdata-sections
            -fno-unwind-tables -fno-asynchronous-unwind-tables -flto"
    LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections"

Be sure also to strip debugging symbols from your binaries after compiling
using 'strip' (or the appropriate variant if cross-compiling).  If space is
379
380
381
382
383
384
385
386

387
388
389
390
391
392
393
379
380
381
382
383
384
385

386
387
388
389
390
391
392
393







-
+








You may find that statically linking libcurl to your application will result
in a lower total size than dynamically linking.

Note that the curl test harness can detect the use of some, but not all, of
the `--disable` statements suggested above. Use will cause tests relying on
those features to fail.  The test harness can be manually forced to skip the
relevant tests by specifying certain key words on the runtests.pl command
relevant tests by specifying certain key words on the `runtests.pl` command
line.  Following is a list of appropriate key words:

 - `--disable-cookies`          !cookies
 - `--disable-manual`           !--manual
 - `--disable-proxy`            !HTTP\ proxy !proxytunnel !SOCKS4 !SOCKS5

# PORTS
Changes to jni/curl/docs/INTERNALS.md.
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
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







-
+




















-
+



+
+
+
+
+
+
+







   - [`Curl_connect`](#Curl_connect)
   - [`multi_do`](#multi_do)
   - [`Curl_readwrite`](#Curl_readwrite)
   - [`multi_done`](#multi_done)
   - [`Curl_disconnect`](#Curl_disconnect)
 - [HTTP(S)](#http)
 - [FTP](#ftp)
   - [Kerberos](#kerberos)
 - [Kerberos](#kerberos)
 - [TELNET](#telnet)
 - [FILE](#file)
 - [SMB](#smb)
 - [LDAP](#ldap)
 - [E-mail](#email)
 - [General](#general)
 - [Persistent Connections](#persistent)
 - [multi interface/non-blocking](#multi)
 - [SSL libraries](#ssl)
 - [Library Symbols](#symbols)
 - [Return Codes and Informationals](#returncodes)
 - [AP/ABI](#abi)
 - [Client](#client)
 - [Memory Debugging](#memorydebug)
 - [Test Suite](#test)
 - [Asynchronous name resolves](#asyncdns)
   - [c-ares](#cares)
 - [`curl_off_t`](#curl_off_t)
 - [curlx](#curlx)
 - [Content Encoding](#contentencoding)
 - [hostip.c explained](#hostip)
 - [`hostip.c` explained](#hostip)
 - [Track Down Memory Leaks](#memoryleak)
 - [`multi_socket`](#multi_socket)
 - [Structs in libcurl](#structs)
   - [Curl_easy](#Curl_easy)
   - [connectdata](#connectdata)
   - [Curl_multi](#Curl_multi)
   - [Curl_handler](#Curl_handler)
   - [conncache](#conncache)
   - [Curl_share](#Curl_share)
   - [CookieInfo](#CookieInfo)

<a name="intro"></a>
Intro
=====

 This project is split in two. The library and the client. The client part
 uses the library, but the library is designed to allow other applications to
62
63
64
65
66
67
68
69

70
71
72
73
74
75
76
69
70
71
72
73
74
75

76
77
78
79
80
81
82
83







-
+







 Tagging shall be used extensively, and by the time we release new archives we
 should tag the sources with a name similar to the released version number.

<a name="Portability"></a>
Portability
===========

 We write curl and libcurl to compile with C89 compilers.  On 32bit and up
 We write curl and libcurl to compile with C89 compilers.  On 32-bit and up
 machines. Most of libcurl assumes more or less POSIX compliance but that's
 not a requirement.

 We write libcurl to build and work with lots of third party tools, and we
 want it to remain functional and buildable with these and later versions
 (older versions may still work but is not what we work hard to maintain):

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
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







-
+













-
+








 - GNU Libtool  1.4.2
 - GNU Autoconf 2.57
 - GNU Automake 1.7
 - GNU M4       1.4
 - perl         5.004
 - roffit       0.5
 - groff        ? (any version that supports "groff -Tps -man [in] [out]")
 - groff        ? (any version that supports `groff -Tps -man [in] [out]`)
 - ps2pdf (gs)  ?

<a name="winvsunix"></a>
Windows vs Unix
===============

 There are a few differences in how to program curl the Unix way compared to
 the Windows way. Perhaps the four most notable details are:

 1. Different function names for socket operations.

   In curl, this is solved with defines and macros, so that the source looks
   the same in all places except for the header file that defines them. The
   macros in use are sclose(), sread() and swrite().
   macros in use are `sclose()`, `sread()` and `swrite()`.

 2. Windows requires a couple of init calls for the socket stuff.

   That's taken care of by the `curl_global_init()` call, but if other libs
   also do it etc there might be reasons for applications to alter that
   behaviour.

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
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







-
+






-
+


















-
-
+
+







-
-
-
+
+
+





-
+








-
-
+
+



-
+

-
-
+
+













-
+

-
+








 (See [Structs in libcurl](#structs) for the separate section describing all
 major internal structs and their purposes.)

 There are plenty of entry points to the library, namely each publicly defined
 function that libcurl offers to applications. All of those functions are
 rather small and easy-to-follow. All the ones prefixed with `curl_easy` are
 put in the lib/easy.c file.
 put in the `lib/easy.c` file.

 `curl_global_init()` and `curl_global_cleanup()` should be called by the
 application to initialize and clean up global stuff in the library. As of
 today, it can handle the global SSL initing if SSL is enabled and it can init
 the socket layer on windows machines. libcurl itself has no "global" scope.

 All printf()-style functions use the supplied clones in lib/mprintf.c. This
 All printf()-style functions use the supplied clones in `lib/mprintf.c`. This
 makes sure we stay absolutely platform independent.

 [ `curl_easy_init()`][2] allocates an internal struct and makes some
 initializations.  The returned handle does not reveal internals. This is the
 `Curl_easy` struct which works as an "anchor" struct for all `curl_easy`
 functions. All connections performed will get connect-specific data allocated
 that should be used for things related to particular connections/requests.

 [`curl_easy_setopt()`][1] takes three arguments, where the option stuff must
 be passed in pairs: the parameter-ID and the parameter-value. The list of
 options is documented in the man page. This function mainly sets things in
 the `Curl_easy` struct.

 `curl_easy_perform()` is just a wrapper function that makes use of the multi
 API.  It basically calls `curl_multi_init()`, `curl_multi_add_handle()`,
 `curl_multi_wait()`, and `curl_multi_perform()` until the transfer is done
 and then returns.

 Some of the most important key functions in url.c are called from multi.c
 when certain key steps are to be made in the transfer operation.
 Some of the most important key functions in `url.c` are called from
 `multi.c` when certain key steps are to be made in the transfer operation.

<a name="Curl_connect"></a>
Curl_connect()
--------------

   Analyzes the URL, it separates the different components and connects to the
   remote host. This may involve using a proxy and/or using SSL. The
   `Curl_resolv()` function in lib/hostip.c is used for looking up host names
   (it does then use the proper underlying method, which may vary between
   platforms and builds).
   `Curl_resolv()` function in `lib/hostip.c` is used for looking up host
   names (it does then use the proper underlying method, which may vary
   between platforms and builds).

   When `Curl_connect` is done, we are connected to the remote site. Then it
   is time to tell the server to get a document/file. `Curl_do()` arranges
   this.

   This function makes sure there's an allocated and initiated 'connectdata'
   This function makes sure there's an allocated and initiated `connectdata`
   struct that is used for this particular connection only (although there may
   be several requests performed on the same connect). A bunch of things are
   inited/inherited from the `Curl_easy` struct.

<a name="multi_do"></a>
multi_do()
---------

   `multi_do()` makes sure the proper protocol-specific function is called. The
   functions are named after the protocols they handle.
   `multi_do()` makes sure the proper protocol-specific function is called.
   The functions are named after the protocols they handle.

   The protocol-specific functions of course deal with protocol-specific
   negotiations and setup. They have access to the `Curl_sendf()` (from
   lib/sendf.c) function to send printf-style formatted data to the remote
   `lib/sendf.c`) function to send printf-style formatted data to the remote
   host and when they're ready to make the actual file transfer they call the
   `Curl_setup_transfer()` function (in lib/transfer.c) to setup the transfer
   and returns.
   `Curl_setup_transfer()` function (in `lib/transfer.c`) to setup the
   transfer and returns.

   If this DO function fails and the connection is being re-used, libcurl will
   then close this connection, setup a new connection and re-issue the DO
   request on that. This is because there is no way to be perfectly sure that
   we have discovered a dead connection before the DO function and thus we
   might wrongly be re-using a connection that was closed by the remote peer.

<a name="Curl_readwrite"></a>
Curl_readwrite()
----------------

   Called during the transfer of the actual protocol payload.

   During transfer, the progress functions in lib/progress.c are called at
   During transfer, the progress functions in `lib/progress.c` are called at
   frequent intervals (or at the user's choice, a specified callback might get
   called). The speedcheck functions in lib/speedcheck.c are also used to
   called). The speedcheck functions in `lib/speedcheck.c` are also used to
   verify that the transfer is as fast as required.

<a name="multi_done"></a>
multi_done()
-----------

   Called after a transfer is done. This function takes care of everything
275
276
277
278
279
280
281
282
283


284
285
286



287
288
289
290
291
292
293
282
283
284
285
286
287
288


289
290
291


292
293
294
295
296
297
298
299
300
301







-
-
+
+

-
-
+
+
+







   connection.

<a name="http"></a>
HTTP(S)
=======

 HTTP offers a lot and is the protocol in curl that uses the most lines of
 code. There is a special file (lib/formdata.c) that offers all the multipart
 post functions.
 code. There is a special file `lib/formdata.c` that offers all the
 multipart post functions.

 base64-functions for user+password stuff (and more) is in (lib/base64.c) and
 all functions for parsing and sending cookies are found in (lib/cookie.c).
 base64-functions for user+password stuff (and more) is in `lib/base64.c`
 and all functions for parsing and sending cookies are found in
 `lib/cookie.c`.

 HTTPS uses in almost every case the same procedure as HTTP, with only two
 exceptions: the connect procedure is different and the function used to read
 or write from the socket is different, although the latter fact is hidden in
 the source by the use of `Curl_read()` for reading and `Curl_write()` for
 writing data to the remote server.

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
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







-
+



-
-
+
+





-
+







-
+





-
+





-
+





-
+





-
+
+






-
+

-
-
+
+
+

-
+

-
-
-
+
+
+

-
+

-
-
+
+


-
+













-
+







 servers.

<a name="ftp"></a>
FTP
===

 The `Curl_if2ip()` function can be used for getting the IP number of a
 specified network interface, and it resides in lib/if2ip.c.
 specified network interface, and it resides in `lib/if2ip.c`.

 `Curl_ftpsendf()` is used for sending FTP commands to the remote server. It
 was made a separate function to prevent us programmers from forgetting that
 they must be CRLF terminated. They must also be sent in one single write() to
 make firewalls and similar happy.
 they must be CRLF terminated. They must also be sent in one single `write()`
 to make firewalls and similar happy.

<a name="kerberos"></a>
Kerberos
========

 Kerberos support is mainly in lib/krb5.c and lib/security.c but also
 Kerberos support is mainly in `lib/krb5.c` and `lib/security.c` but also
 `curl_sasl_sspi.c` and `curl_sasl_gssapi.c` for the email protocols and
 `socks_gssapi.c` and `socks_sspi.c` for SOCKS5 proxy specifics.

<a name="telnet"></a>
TELNET
======

 Telnet is implemented in lib/telnet.c.
 Telnet is implemented in `lib/telnet.c`.

<a name="file"></a>
FILE
====

 The file:// protocol is dealt with in lib/file.c.
 The `file://` protocol is dealt with in `lib/file.c`.

<a name="smb"></a>
SMB
===

 The smb:// protocol is dealt with in lib/smb.c.
 The `smb://` protocol is dealt with in `lib/smb.c`.

<a name="ldap"></a>
LDAP
====

 Everything LDAP is in lib/ldap.c and lib/openldap.c
 Everything LDAP is in `lib/ldap.c` and `lib/openldap.c`.

<a name="email"></a>
E-mail
======

 The e-mail related source code is in lib/imap.c, lib/pop3.c and lib/smtp.c.
 The e-mail related source code is in `lib/imap.c`, `lib/pop3.c` and
 `lib/smtp.c`.

<a name="general"></a>
General
=======

 URL encoding and decoding, called escaping and unescaping in the source code,
 is found in lib/escape.c.
 is found in `lib/escape.c`.

 While transferring data in Transfer() a few functions might get used.
 `curl_getdate()` in lib/parsedate.c is for HTTP date comparisons (and more).
 While transferring data in `Transfer()` a few functions might get used.
 `curl_getdate()` in `lib/parsedate.c` is for HTTP date comparisons (and
 more).

 lib/getenv.c offers `curl_getenv()` which is for reading environment
 `lib/getenv.c` offers `curl_getenv()` which is for reading environment
 variables in a neat platform independent way. That's used in the client, but
 also in lib/url.c when checking the proxy environment variables. Note that
 contrary to the normal unix getenv(), this returns an allocated buffer that
 must be free()ed after use.
 also in `lib/url.c` when checking the proxy environment variables. Note that
 contrary to the normal unix `getenv()`, this returns an allocated buffer that
 must be `free()`ed after use.

 lib/netrc.c holds the .netrc parser
 `lib/netrc.c` holds the `.netrc` parser.

 lib/timeval.c features replacement functions for systems that don't have
 gettimeofday() and a few support functions for timeval conversions.
 `lib/timeval.c` features replacement functions for systems that don't have
 `gettimeofday()` and a few support functions for timeval conversions.

 A function named `curl_version()` that returns the full curl version string
 is found in lib/version.c.
 is found in `lib/version.c`.

<a name="persistent"></a>
Persistent Connections
======================

 The persistent connection support in libcurl requires some considerations on
 how to do things inside of the library.

 - The `Curl_easy` struct returned in the [`curl_easy_init()`][2] call
   must never hold connection-oriented data. It is meant to hold the root data
   as well as all the options etc that the library-user may choose.

 - The `Curl_easy` struct holds the "connection cache" (an array of
   pointers to 'connectdata' structs).
   pointers to `connectdata` structs).

 - This enables the 'curl handle' to be reused on subsequent transfers.

 - When libcurl is told to perform a transfer, it first checks for an already
   existing connection in the cache that we can use. Otherwise it creates a
   new one and adds that to the cache. If the cache is full already when a new
   connection is added, it will first close the oldest unused one.
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
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







-
+


-
+


















-
+








 Originally libcurl supported SSLeay for SSL/TLS transports, but that was then
 extended to its successor OpenSSL but has since also been extended to several
 other SSL/TLS libraries and we expect and hope to further extend the support
 in future libcurl versions.

 To deal with this internally in the best way possible, we have a generic SSL
 function API as provided by the vtls/vtls.[ch] system, and they are the only
 function API as provided by the `vtls/vtls.[ch]` system, and they are the only
 SSL functions we must use from within libcurl. vtls is then crafted to use
 the appropriate lower-level function calls to whatever SSL library that is in
 use. For example vtls/openssl.[ch] for the OpenSSL library.
 use. For example `vtls/openssl.[ch]` for the OpenSSL library.

<a name="symbols"></a>
Library Symbols
===============

 All symbols used internally in libcurl must use a `Curl_` prefix if they're
 used in more than a single file. Single-file symbols must be made static.
 Public ("exported") symbols must use a `curl_` prefix. (There are exceptions,
 but they are to be changed to follow this pattern in future versions.) Public
 API functions are marked with `CURL_EXTERN` in the public header files so
 that all others can be hidden on platforms where this is possible.

<a name="returncodes"></a>
Return Codes and Informationals
===============================

 I've made things simple. Almost every function in libcurl returns a CURLcode,
 that must be `CURLE_OK` if everything is OK or otherwise a suitable error
 code as the curl/curl.h include file defines. The very spot that detects an
 code as the `curl/curl.h` include file defines. The very spot that detects an
 error must use the `Curl_failf()` function to set the human-readable error
 description.

 In aiding the user to understand what's happening and to debug curl usage, we
 must supply a fair number of informational messages by using the
 `Curl_infof()` function. Those messages are only displayed when the user
 explicitly asks for them. They are best used when revealing information that
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
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







-
+

-
-
-
-
+
+
+
+

-
+




-
-
+
+










-
-
-
-
-
-
+
+
+
+
+
+

-
-
+
+



-
-
-
+
+
+
+

-
-
-
+
+
+
+

-
+


-
+










-
-
-
+
+
+

-
-
+
+







 that makes it easier to keep a solid API/ABI over time. See docs/libcurl/ABI
 for our promise to users.

<a name="client"></a>
Client
======

 main() resides in `src/tool_main.c`.
 `main()` resides in `src/tool_main.c`.

 `src/tool_hugehelp.c` is automatically generated by the mkhelp.pl perl script
 to display the complete "manual" and the `src/tool_urlglob.c` file holds the
 functions used for the URL-"globbing" support. Globbing in the sense that the
 {} and [] expansion stuff is there.
 `src/tool_hugehelp.c` is automatically generated by the `mkhelp.pl` perl
 script to display the complete "manual" and the `src/tool_urlglob.c` file
 holds the functions used for the URL-"globbing" support. Globbing in the
 sense that the `{}` and `[]` expansion stuff is there.

 The client mostly sets up its 'config' struct properly, then
 The client mostly sets up its `config` struct properly, then
 it calls the `curl_easy_*()` functions of the library and when it gets back
 control after the `curl_easy_perform()` it cleans up the library, checks
 status and exits.

 When the operation is done, the ourWriteOut() function in src/writeout.c may
 be called to report about the operation. That function is using the
 When the operation is done, the `ourWriteOut()` function in `src/writeout.c`
 may be called to report about the operation. That function is using the
 `curl_easy_getinfo()` function to extract useful information from the curl
 session.

 It may loop and do all this several times if many URLs were specified on the
 command line or config file.

<a name="memorydebug"></a>
Memory Debugging
================

 The file lib/memdebug.c contains debug-versions of a few functions. Functions
 such as malloc, free, fopen, fclose, etc that somehow deal with resources
 that might give us problems if we "leak" them. The functions in the memdebug
 system do nothing fancy, they do their normal function and then log
 information about what they just did. The logged data can then be analyzed
 after a complete session,
 The file `lib/memdebug.c` contains debug-versions of a few functions.
 Functions such as `malloc()`, `free()`, `fopen()`, `fclose()`, etc that
 somehow deal with resources that might give us problems if we "leak" them.
 The functions in the memdebug system do nothing fancy, they do their normal
 function and then log information about what they just did. The logged data
 can then be analyzed after a complete session,

 memanalyze.pl is the perl script present in tests/ that analyzes a log file
 generated by the memory tracking system. It detects if resources are
 `memanalyze.pl` is the perl script present in `tests/` that analyzes a log
 file generated by the memory tracking system. It detects if resources are
 allocated but never freed and other kinds of errors related to resource
 management.

 Internally, definition of preprocessor symbol DEBUGBUILD restricts code which
 is only compiled for debug enabled builds. And symbol CURLDEBUG is used to
 differentiate code which is _only_ used for memory tracking/debugging.
 Internally, definition of preprocessor symbol `DEBUGBUILD` restricts code
 which is only compiled for debug enabled builds. And symbol `CURLDEBUG` is
 used to differentiate code which is _only_ used for memory
 tracking/debugging.

 Use -DCURLDEBUG when compiling to enable memory debugging, this is also
 switched on by running configure with --enable-curldebug. Use -DDEBUGBUILD
 when compiling to enable a debug build or run configure with --enable-debug.
 Use `-DCURLDEBUG` when compiling to enable memory debugging, this is also
 switched on by running configure with `--enable-curldebug`. Use
 `-DDEBUGBUILD` when compiling to enable a debug build or run configure with
 `--enable-debug`.

 curl --version will list 'Debug' feature for debug enabled builds, and
 `curl --version` will list 'Debug' feature for debug enabled builds, and
 will list 'TrackMemory' feature for curl debug memory tracking capable
 builds. These features are independent and can be controlled when running
 the configure script. When --enable-debug is given both features will be
 the configure script. When `--enable-debug` is given both features will be
 enabled, unless some restriction prevents memory tracking from being used.

<a name="test"></a>
Test Suite
==========

 The test suite is placed in its own subdirectory directly off the root in the
 curl archive tree, and it contains a bunch of scripts and a lot of test case
 data.

 The main test script is runtests.pl that will invoke test servers like
 httpserver.pl and ftpserver.pl before all the test cases are performed. The
 test suite currently only runs on Unix-like platforms.
 The main test script is `runtests.pl` that will invoke test servers like
 `httpserver.pl` and `ftpserver.pl` before all the test cases are performed.
 The test suite currently only runs on Unix-like platforms.

 You'll find a description of the test suite in the tests/README file, and the
 test case data files in the tests/FILEFORMAT file.
 You'll find a description of the test suite in the `tests/README` file, and
 the test case data files in the `tests/FILEFORMAT` file.

 The test suite automatically detects if curl was built with the memory
 debugging enabled, and if it was, it will detect memory leaks, too.

<a name="asyncdns"></a>
Asynchronous name resolves
==========================
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
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







-
+








-
-
+
+







-
+












-
+






-
-
+
+







### c-ares on win32

 First I compiled c-ares. I changed the default C runtime library to be the
 single-threaded rather than the multi-threaded (this seems to be required to
 prevent linking errors later on). Then I simply build the areslib project
 (the other projects adig/ahost seem to fail under MSVC).

 Next was libcurl. I opened lib/config-win32.h and I added a:
 Next was libcurl. I opened `lib/config-win32.h` and I added a:
 `#define USE_ARES 1`

 Next thing I did was I added the path for the ares includes to the include
 path, and the libares.lib to the libraries.

 Lastly, I also changed libcurl to be single-threaded rather than
 multi-threaded, again this was to prevent some duplicate symbol errors. I'm
 not sure why I needed to change everything to single-threaded, but when I
 didn't I got redefinition errors for several CRT functions (malloc, stricmp,
 etc.)
 didn't I got redefinition errors for several CRT functions (`malloc()`,
 `stricmp()`, etc.)

<a name="curl_off_t"></a>
`curl_off_t`
==========

 `curl_off_t` is a data type provided by the external libcurl include
 headers. It is the type meant to be used for the [`curl_easy_setopt()`][1]
 options that end with LARGE. The type is 64bit large on most modern
 options that end with LARGE. The type is 64-bit large on most modern
 platforms.

<a name="curlx"></a>
curlx
=====

 The libcurl source code offers a few functions by source only. They are not
 part of the official libcurl API, but the source files might be useful for
 others so apps can optionally compile/build with these sources to gain
 additional functions.

 We provide them through a single header file for easy access for apps:
 "curlx.h"
 `curlx.h`

`curlx_strtoofft()`
-------------------
   A macro that converts a string containing a number to a `curl_off_t` number.
   This might use the `curlx_strtoll()` function which is provided as source
   code in strtoofft.c. Note that the function is only provided if no
   strtoll() (or equivalent) function exist on your platform. If `curl_off_t`
   is only a 32 bit number on your platform, this macro uses strtol().
   `strtoll()` (or equivalent) function exist on your platform. If `curl_off_t`
   is only a 32-bit number on your platform, this macro uses `strtol()`.

Future
------

 Several functions will be removed from the public `curl_` name space in a
 future libcurl release. They will then only become available as `curlx_`
 functions instead. To make the transition easier, we already today provide
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
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







-
-
-
-
+
+
+
+


-
-
+
+




-
-
+
+
+



-
+

-
-
+
+







-
+


-
-
-
-
+
+
+
+

-
-
-
+
+
+




-
+



-
+



-
-
+
+

-
-
+
+



-
+






-
+












-
+

-
+

-
-
-
-
-
-
-
+
+
+
+
+
+
+

-
-
+
+











-


-
-
+
+

-
-
+
+







================

## About content encodings

 [HTTP/1.1][4] specifies that a client may request that a server encode its
 response. This is usually used to compress a response using one (or more)
 encodings from a set of commonly available compression techniques. These
 schemes include 'deflate' (the zlib algorithm), 'gzip' 'br' (brotli) and
 'compress'. A client requests that the server perform an encoding by including
 an Accept-Encoding header in the request document. The value of the header
 should be one of the recognized tokens 'deflate', ... (there's a way to
 schemes include `deflate` (the zlib algorithm), `gzip`, `br` (brotli) and
 `compress`. A client requests that the server perform an encoding by including
 an `Accept-Encoding` header in the request document. The value of the header
 should be one of the recognized tokens `deflate`, ... (there's a way to
 register new schemes/tokens, see sec 3.5 of the spec). A server MAY honor
 the client's encoding request. When a response is encoded, the server
 includes a Content-Encoding header in the response. The value of the
 Content-Encoding header indicates which encodings were used to encode the
 includes a `Content-Encoding` header in the response. The value of the
 `Content-Encoding` header indicates which encodings were used to encode the
 data, in the order in which they were applied.

 It's also possible for a client to attach priorities to different schemes so
 that the server knows which it prefers. See sec 14.3 of RFC 2616 for more
 information on the Accept-Encoding header. See sec [3.1.2.2 of RFC 7231][15]
 for more information on the Content-Encoding header.
 information on the `Accept-Encoding` header. See sec
 [3.1.2.2 of RFC 7231][15] for more information on the `Content-Encoding`
 header.

## Supported content encodings

 The 'deflate', 'gzip' and 'br' content encodings are supported by libcurl.
 The `deflate`, `gzip` and `br` content encodings are supported by libcurl.
 Both regular and chunked transfers work fine.  The zlib library is required
 for the 'deflate' and 'gzip' encodings, while the brotli decoding library is
 for the 'br' encoding.
 for the `deflate` and `gzip` encodings, while the brotli decoding library is
 for the `br` encoding.

## The libcurl interface

 To cause libcurl to request a content encoding use:

  [`curl_easy_setopt`][1](curl, [`CURLOPT_ACCEPT_ENCODING`][5], string)

 where string is the intended value of the Accept-Encoding header.
 where string is the intended value of the `Accept-Encoding` header.

 Currently, libcurl does support multiple encodings but only
 understands how to process responses that use the "deflate", "gzip" and/or
 "br" content encodings, so the only values for [`CURLOPT_ACCEPT_ENCODING`][5]
 that will work (besides "identity," which does nothing) are "deflate",
 "gzip" and "br". If a response is encoded using the "compress" or methods,
 understands how to process responses that use the `deflate`, `gzip` and/or
 `br` content encodings, so the only values for [`CURLOPT_ACCEPT_ENCODING`][5]
 that will work (besides `identity`, which does nothing) are `deflate`,
 `gzip` and `br`. If a response is encoded using the `compress` or methods,
 libcurl will return an error indicating that the response could
 not be decoded.  If `<string>` is NULL no Accept-Encoding header is generated.
 If `<string>` is a zero-length string, then an Accept-Encoding header
 containing all supported encodings will be generated.
 not be decoded.  If `<string>` is NULL no `Accept-Encoding` header is
 generated. If `<string>` is a zero-length string, then an `Accept-Encoding`
 header containing all supported encodings will be generated.

 The [`CURLOPT_ACCEPT_ENCODING`][5] must be set to any non-NULL value for
 content to be automatically decoded.  If it is not set and the server still
 sends encoded content (despite not having been asked), the data is returned
 in its raw form and the Content-Encoding type is not checked.
 in its raw form and the `Content-Encoding` type is not checked.

## The curl interface

 Use the [--compressed][6] option with curl to cause it to ask servers to
 Use the [`--compressed`][6] option with curl to cause it to ask servers to
 compress responses using any format supported by curl.

<a name="hostip"></a>
hostip.c explained
==================
`hostip.c` explained
====================

 The main compile-time defines to keep in mind when reading the host*.c source
 file are these:
 The main compile-time defines to keep in mind when reading the `host*.c`
 source file are these:

## `CURLRES_IPV6`

 this host has getaddrinfo() and family, and thus we use that. The host may
 this host has `getaddrinfo()` and family, and thus we use that. The host may
 not be able to resolve IPv6, but we don't really have to take that into
 account. Hosts that aren't IPv6-enabled have `CURLRES_IPV4` defined.

## `CURLRES_ARES`

 is defined if libcurl is built to use c-ares for asynchronous name
 resolves. This can be Windows or *nix.
 resolves. This can be Windows or \*nix.

## `CURLRES_THREADED`

 is defined if libcurl is built to use threading for asynchronous name
 resolves. The name resolve will be done in a new thread, and the supported
 asynch API will be the same as for ares-builds. This is the default under
 (native) Windows.

 If any of the two previous are defined, `CURLRES_ASYNCH` is defined too. If
 libcurl is not built to use an asynchronous resolver, `CURLRES_SYNCH` is
 defined.

## host*.c sources
## `host*.c` sources

 The host*.c sources files are split up like this:
 The `host*.c` sources files are split up like this:

 - hostip.c      - method-independent resolver functions and utility functions
 - hostasyn.c    - functions for asynchronous name resolves
 - hostsyn.c     - functions for synchronous name resolves
 - asyn-ares.c   - functions for asynchronous name resolves using c-ares
 - asyn-thread.c - functions for asynchronous name resolves using threads
 - hostip4.c     - IPv4 specific functions
 - hostip6.c     - IPv6 specific functions
 - `hostip.c`      - method-independent resolver functions and utility functions
 - `hostasyn.c`    - functions for asynchronous name resolves
 - `hostsyn.c`     - functions for synchronous name resolves
 - `asyn-ares.c`   - functions for asynchronous name resolves using c-ares
 - `asyn-thread.c` - functions for asynchronous name resolves using threads
 - `hostip4.c`     - IPv4 specific functions
 - `hostip6.c`     - IPv6 specific functions

 The hostip.h is the single united header file for all this. It defines the
 `CURLRES_*` defines based on the config*.h and `curl_setup.h` defines.
 The `hostip.h` is the single united header file for all this. It defines the
 `CURLRES_*` defines based on the `config*.h` and `curl_setup.h` defines.

<a name="memoryleak"></a>
Track Down Memory Leaks
=======================

## Single-threaded

  Please note that this memory leak system is not adjusted to work in more
  than one thread. If you want/need to use it in a multi-threaded app. Please
  adjust accordingly.


## Build

  Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with
  --enable-debug fixes this). 'make clean' first, then 'make' so that all
  Rebuild libcurl with `-DCURLDEBUG` (usually, rerunning configure with
  `--enable-debug` fixes this). `make clean` first, then `make` so that all
  files are actually rebuilt properly. It will also make sense to build
  libcurl with the debug option (usually -g to the compiler) so that debugging
  it will be easier if you actually do find a leak in the library.
  libcurl with the debug option (usually `-g` to the compiler) so that
  debugging it will be easier if you actually do find a leak in the library.

  This will create a library that has memory debugging enabled.

## Modify Your Application

  Add a line in your application code:

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
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







-
+















-
+

-
-
-
+
+
+
+

-
-
-
-
-
+
+
+
+
+

-
-
-
+
+
+

-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+

-
-
-
-
+
+
+
+

-
-
-
-
-
-
-
+
+
+
+
+
+
+








+



-
+



-
+





-
+


-
-
-
-
-
+
+
+
+
+

-
+




-
+






+







-
+




-
-
+
+


-
+














-
+


+





-
+







  Run your program as usual. Watch the specified memory trace file grow.

  Make your program exit and use the proper libcurl cleanup functions etc. So
  that all non-leaks are returned/freed properly.

## Analyze the Flow

  Use the tests/memanalyze.pl perl script to analyze the dump file:
  Use the `tests/memanalyze.pl` perl script to analyze the dump file:

    tests/memanalyze.pl dump

  This now outputs a report on what resources that were allocated but never
  freed etc. This report is very fine for posting to the list!

  If this doesn't produce any output, no leak was detected in libcurl. Then
  the leak is mostly likely to be in your code.

<a name="multi_socket"></a>
`multi_socket`
==============

 Implementation of the `curl_multi_socket` API

  The main ideas of this API are simply:
 The main ideas of this API are simply:

   1 - The application can use whatever event system it likes as it gets info
       from libcurl about what file descriptors libcurl waits for what action
       on. (The previous API returns `fd_sets` which is very select()-centric).
 1. The application can use whatever event system it likes as it gets info
    from libcurl about what file descriptors libcurl waits for what action
    on. (The previous API returns `fd_sets` which is very
    `select()`-centric).

   2 - When the application discovers action on a single socket, it calls
       libcurl and informs that there was action on this particular socket and
       libcurl can then act on that socket/transfer only and not care about
       any other transfers. (The previous API always had to scan through all
       the existing transfers.)
 2. When the application discovers action on a single socket, it calls
    libcurl and informs that there was action on this particular socket and
    libcurl can then act on that socket/transfer only and not care about
    any other transfers. (The previous API always had to scan through all
    the existing transfers.)

  The idea is that [`curl_multi_socket_action()`][7] calls a given callback
  with information about what socket to wait for what action on, and the
  callback only gets called if the status of that socket has changed.
 The idea is that [`curl_multi_socket_action()`][7] calls a given callback
 with information about what socket to wait for what action on, and the
 callback only gets called if the status of that socket has changed.

  We also added a timer callback that makes libcurl call the application when
  the timeout value changes, and you set that with [`curl_multi_setopt()`][9]
  and the [`CURLMOPT_TIMERFUNCTION`][10] option. To get this to work,
  Internally, there's an added struct to each easy handle in which we store
  an "expire time" (if any). The structs are then "splay sorted" so that we
  can add and remove times from the linked list and yet somewhat swiftly
  figure out both how long there is until the next nearest timer expires
  and which timer (handle) we should take care of now. Of course, the upside
  of all this is that we get a [`curl_multi_timeout()`][8] that should also
  work with old-style applications that use [`curl_multi_perform()`][11].
 We also added a timer callback that makes libcurl call the application when
 the timeout value changes, and you set that with [`curl_multi_setopt()`][9]
 and the [`CURLMOPT_TIMERFUNCTION`][10] option. To get this to work,
 Internally, there's an added struct to each easy handle in which we store
 an "expire time" (if any). The structs are then "splay sorted" so that we
 can add and remove times from the linked list and yet somewhat swiftly
 figure out both how long there is until the next nearest timer expires
 and which timer (handle) we should take care of now. Of course, the upside
 of all this is that we get a [`curl_multi_timeout()`][8] that should also
 work with old-style applications that use [`curl_multi_perform()`][11].

  We created an internal "socket to easy handles" hash table that given
  a socket (file descriptor) returns the easy handle that waits for action on
  that socket.  This hash is made using the already existing hash code
  (previously only used for the DNS cache).
 We created an internal "socket to easy handles" hash table that given
 a socket (file descriptor) returns the easy handle that waits for action on
 that socket.  This hash is made using the already existing hash code
 (previously only used for the DNS cache).

  To make libcurl able to report plain sockets in the socket callback, we had
  to re-organize the internals of the [`curl_multi_fdset()`][12] etc so that
  the conversion from sockets to `fd_sets` for that function is only done in
  the last step before the data is returned. I also had to extend c-ares to
  get a function that can return plain sockets, as that library too returned
  only `fd_sets` and that is no longer good enough. The changes done to c-ares
  are available in c-ares 1.3.1 and later.
 To make libcurl able to report plain sockets in the socket callback, we had
 to re-organize the internals of the [`curl_multi_fdset()`][12] etc so that
 the conversion from sockets to `fd_sets` for that function is only done in
 the last step before the data is returned. I also had to extend c-ares to
 get a function that can return plain sockets, as that library too returned
 only `fd_sets` and that is no longer good enough. The changes done to c-ares
 are available in c-ares 1.3.1 and later.

<a name="structs"></a>
Structs in libcurl
==================

This section should cover 7.32.0 pretty accurately, but will make sense even
for older and later versions as things don't change drastically that often.

<a name="Curl_easy"></a>
## Curl_easy

  The `Curl_easy` struct is the one returned to the outside in the external API
  as a "CURL *". This is usually known as an easy handle in API documentations
  as a `CURL *`. This is usually known as an easy handle in API documentations
  and examples.

  Information and state that is related to the actual connection is in the
  'connectdata' struct. When a transfer is about to be made, libcurl will
  `connectdata` struct. When a transfer is about to be made, libcurl will
  either create a new connection or re-use an existing one. The particular
  connectdata that is used by this handle is pointed out by
  `Curl_easy->easy_conn`.

  Data and information that regard this particular single transfer is put in
  the SingleRequest sub-struct.
  the `SingleRequest` sub-struct.

  When the `Curl_easy` struct is added to a multi handle, as it must be in
  order to do any transfer, the ->multi member will point to the `Curl_multi`
  struct it belongs to. The ->prev and ->next members will then be used by the
  multi code to keep a linked list of `Curl_easy` structs that are added to
  that same multi handle. libcurl always uses multi so ->multi *will* point to
  a `Curl_multi` when a transfer is in progress.
  order to do any transfer, the `->multi` member will point to the `Curl_multi`
  struct it belongs to. The `->prev` and `->next` members will then be used by
  the multi code to keep a linked list of `Curl_easy` structs that are added to
  that same multi handle. libcurl always uses multi so `->multi` *will* point
  to a `Curl_multi` when a transfer is in progress.

  ->mstate is the multi state of this particular `Curl_easy`. When
  `->mstate` is the multi state of this particular `Curl_easy`. When
  `multi_runsingle()` is called, it will act on this handle according to which
  state it is in. The mstate is also what tells which sockets to return for a
  specific `Curl_easy` when [`curl_multi_fdset()`][12] is called etc.

  The libcurl source code generally use the name 'data' for the variable that
  The libcurl source code generally use the name `data` for the variable that
  points to the `Curl_easy`.

  When doing multiplexed HTTP/2 transfers, each `Curl_easy` is associated with
  an individual stream, sharing the same connectdata struct. Multiplexing
  makes it even more important to keep things associated with the right thing!

<a name="connectdata"></a>
## connectdata

  A general idea in libcurl is to keep connections around in a connection
  "cache" after they have been used in case they will be used again and then
  re-use an existing one instead of creating a new as it creates a significant
  performance boost.

  Each 'connectdata' identifies a single physical connection to a server. If
  Each `connectdata` identifies a single physical connection to a server. If
  the connection can't be kept alive, the connection will be closed after use
  and then this struct can be removed from the cache and freed.

  Thus, the same `Curl_easy` can be used multiple times and each time select
  another connectdata struct to use for the connection. Keep this in mind, as
  it is then important to consider if options or choices are based on the
  another `connectdata` struct to use for the connection. Keep this in mind,
  as it is then important to consider if options or choices are based on the
  connection or the `Curl_easy`.

  Functions in libcurl will assume that connectdata->data points to the
  Functions in libcurl will assume that `connectdata->data` points to the
  `Curl_easy` that uses this connection (for the moment).

  As a special complexity, some protocols supported by libcurl require a
  special disconnect procedure that is more than just shutting down the
  socket. It can involve sending one or more commands to the server before
  doing so. Since connections are kept in the connection cache after use, the
  original `Curl_easy` may no longer be around when the time comes to shut down
  a particular connection. For this purpose, libcurl holds a special dummy
  `closure_handle` `Curl_easy` in the `Curl_multi` struct to use when needed.

  FTP uses two TCP connections for a typical transfer but it keeps both in
  this single struct and thus can be considered a single connection for most
  internal concerns.

  The libcurl source code generally use the name 'conn' for the variable that
  The libcurl source code generally use the name `conn` for the variable that
  points to the connectdata.

<a name="Curl_multi"></a>
## Curl_multi

  Internally, the easy interface is implemented as a wrapper around multi
  interface functions. This makes everything multi interface.

  `Curl_multi` is the multi handle struct exposed as "CURLM *" in external
  `Curl_multi` is the multi handle struct exposed as `CURLM *` in external
  APIs.

  This struct holds a list of `Curl_easy` structs that have been added to this
  handle with [`curl_multi_add_handle()`][13]. The start of the list is
  `->easyp` and `->num_easy` is a counter of added `Curl_easy`s.

  `->msglist` is a linked list of messages to send back when
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
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







-
+

-
+


+





-
-
+
+











-
+

-
+







  `->sockhash` is a hash table to allow fast lookups of socket descriptor for
  which `Curl_easy` uses that descriptor. This is necessary for the
  `multi_socket` API.

  `->conn_cache` points to the connection cache. It keeps track of all
  connections that are kept after use. The cache has a maximum size.

  `->closure_handle` is described in the 'connectdata' section.
  `->closure_handle` is described in the `connectdata` section.

  The libcurl source code generally use the name 'multi' for the variable that
  The libcurl source code generally use the name `multi` for the variable that
  points to the `Curl_multi` struct.

<a name="Curl_handler"></a>
## Curl_handler

  Each unique protocol that is supported by libcurl needs to provide at least
  one `Curl_handler` struct. It defines what the protocol is called and what
  functions the main code should call to deal with protocol specific issues.
  In general, there's a source file named [protocol].c in which there's a
  "struct `Curl_handler` `Curl_handler_[protocol]`" declared. In url.c there's
  In general, there's a source file named `[protocol].c` in which there's a
  `struct Curl_handler Curl_handler_[protocol]` declared. In `url.c` there's
  then the main array with all individual `Curl_handler` structs pointed to
  from a single array which is scanned through when a URL is given to libcurl
  to work with.

  `->scheme` is the URL scheme name, usually spelled out in uppercase. That's
  "HTTP" or "FTP" etc. SSL versions of the protocol need their own
  `Curl_handler` setup so HTTPS separate from HTTP.

  `->setup_connection` is called to allow the protocol code to allocate
  protocol specific data that then gets associated with that `Curl_easy` for
  the rest of this transfer. It gets freed again at the end of the transfer.
  It will be called before the 'connectdata' for the transfer has been
  It will be called before the `connectdata` for the transfer has been
  selected/created. Most protocols will allocate its private
  'struct [PROTOCOL]' here and assign `Curl_easy->req.protop` to point to it.
  `struct [PROTOCOL]` here and assign `Curl_easy->req.protop` to point to it.

  `->connect_it` allows a protocol to do some specific actions after the TCP
  connect is done, that can still be considered part of the connection phase.

  Some protocols will alter the `connectdata->recv[]` and
  `connectdata->send[]` function pointers in this function.

988
989
990
991
992
993
994
995
996
997
998




999
1000
1001
1002

1003
1004

1005
1006
1007

1008
1009

1010
1011
1012
1013

1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028

1029
1030
1031
1032
1033
1034
1035

1036
1037
1038
1039
1040
1041

1042
1043
1044
1045

1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057

1058
1059
1060
1061

1062
1063
1064
1065
1066
1067
1068
1005
1006
1007
1008
1009
1010
1011




1012
1013
1014
1015
1016
1017
1018

1019
1020

1021
1022
1023

1024
1025

1026
1027
1028
1029

1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044

1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063

1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080

1081
1082
1083
1084
1085
1086
1087
1088







-
-
-
-
+
+
+
+



-
+

-
+


-
+

-
+



-
+














-
+







+






+



-
+












+



-
+








  `->done` gets called when the transfer is complete and DONE. That's after the
  main data has been transferred.

  `->do_more` gets called during the `DO_MORE` state. The FTP protocol uses
  this state when setting up the second connection.

  ->`proto_getsock`
  ->`doing_getsock`
  ->`domore_getsock`
  ->`perform_getsock`
  `->proto_getsock`
  `->doing_getsock`
  `->domore_getsock`
  `->perform_getsock`
  Functions that return socket information. Which socket(s) to wait for which
  action(s) during the particular multi state.

  ->disconnect is called immediately before the TCP connection is shutdown.
  `->disconnect` is called immediately before the TCP connection is shutdown.

  ->readwrite gets called during transfer to allow the protocol to do extra
  `->readwrite` gets called during transfer to allow the protocol to do extra
  reads/writes

  ->defport is the default report TCP or UDP port this protocol uses
  `->defport` is the default report TCP or UDP port this protocol uses

  ->protocol is one or more bits in the `CURLPROTO_*` set. The SSL versions
  `->protocol` is one or more bits in the `CURLPROTO_*` set. The SSL versions
  have their "base" protocol set and then the SSL variation. Like
  "HTTP|HTTPS".

  ->flags is a bitmask with additional information about the protocol that will
  `->flags` is a bitmask with additional information about the protocol that will
  make it get treated differently by the generic engine:

  - `PROTOPT_SSL` - will make it connect and negotiate SSL

  - `PROTOPT_DUAL` - this protocol uses two connections

  - `PROTOPT_CLOSEACTION` - this protocol has actions to do before closing the
    connection. This flag is no longer used by code, yet still set for a bunch
    of protocol handlers.

  - `PROTOPT_DIRLOCK` - "direction lock". The SSH protocols set this bit to
    limit which "direction" of socket actions that the main engine will
    concern itself with.

  - `PROTOPT_NONETWORK` - a protocol that doesn't use network (read file:)
  - `PROTOPT_NONETWORK` - a protocol that doesn't use network (read `file:`)

  - `PROTOPT_NEEDSPWD` - this protocol needs a password and will use a default
    one unless one is provided

  - `PROTOPT_NOURLQUERY` - this protocol can't handle a query part on the URL
    (?foo=bar)

<a name="conncache"></a>
## conncache

  Is a hash table with connections for later re-use. Each `Curl_easy` has a
  pointer to its connection cache. Each multi handle sets up a connection
  cache that all added `Curl_easy`s share by default.

<a name="Curl_share"></a>
## Curl_share

  The libcurl share API allocates a `Curl_share` struct, exposed to the
  external API as "CURLSH *".
  external API as `CURLSH *`.

  The idea is that the struct can have a set of its own versions of caches and
  pools and then by providing this struct in the `CURLOPT_SHARE` option, those
  specific `Curl_easy`s will use the caches/pools that this share handle
  holds.

  Then individual `Curl_easy` structs can be made to share specific things
  that they otherwise wouldn't, such as cookies.

  The `Curl_share` struct can currently hold cookies, DNS cache and the SSL
  session cache.

<a name="CookieInfo"></a>
## CookieInfo

  This is the main cookie struct. It holds all known cookies and related
  information. Each `Curl_easy` has its own private CookieInfo even when
  information. Each `Curl_easy` has its own private `CookieInfo` even when
  they are added to a multi handle. They can be made to share cookies by using
  the share API.


[1]: https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
[2]: https://curl.haxx.se/libcurl/c/curl_easy_init.html
[3]: https://c-ares.haxx.se/
Changes to jni/curl/docs/KNOWN_BUGS.
15
16
17
18
19
20
21

22
23
24
25
26
27
28
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29







+







 1.1 CURLFORM_CONTENTLEN in an array
 1.2 Disabling HTTP Pipelining
 1.3 STARTTRANSFER time is wrong for HTTP POSTs
 1.4 multipart formposts file name encoding
 1.5 Expect-100 meets 417
 1.6 Unnecessary close when 401 received waiting for 100
 1.7 Deflate error after all content was received
 1.8 DoH isn't used for all name resolves when enabled
 1.9 HTTP/2 frames while in the connection pool kill reuse
 1.10 Strips trailing dot from host name
 1.11 CURLOPT_SEEKFUNCTION not called with CURLFORM_STREAM

 2. TLS
 2.1 CURLINFO_SSL_VERIFYRESULT has limited support
 2.2 DER in keychain
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
43
44
45
46
47
48
49

50
51
52
53
54
55
56







-







 4.1 -J and -O with %-encoded file names
 4.2 -J with -C - fails
 4.3 --retry and transfer timeouts
 4.4 --upload-file . hang if delay in STDIN
 4.5 Improve --data-urlencode space encoding

 5. Build and portability issues
 5.1 tests not compatible with python3
 5.2 curl-config --libs contains private details
 5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
 5.4 Cannot compile against a static build of OpenLDAP
 5.5 can't handle Unicode arguments in Windows
 5.6 cmake support gaps
 5.7 Visual Studio project gaps
 5.8 configure finding libs in wrong directory
158
159
160
161
162
163
164
165

166
167
168










169
170
171
172
173
174
175
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







-
+



+
+
+
+
+
+
+
+
+
+







 waiting for the the 100-continue response.
 https://curl.haxx.se/mail/lib-2008-08/0462.html

1.7 Deflate error after all content was received

 There's a situation where we can get an error in a HTTP response that is
 compressed, when that error is detected after all the actual body contents
 have been received and delivered to the appliction. This is tricky, but is
 have been received and delivered to the application. This is tricky, but is
 ultimately a broken server.

 See https://github.com/curl/curl/issues/2719

1.8 DoH isn't used for all name resolves when enabled

 Even if DoH is specified to be used, there are some name resolves that are
 done without it. This should be fixed. When the internal function
 `Curl_resolver_wait_resolv()` is called, it doesn't use DoH to complete the
 resolve as it otherwise should.

 See https://github.com/curl/curl/pull/3857 and
 https://github.com/curl/curl/pull/3850

1.9 HTTP/2 frames while in the connection pool kill reuse

 If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to
 curl while the connection is held in curl's connection pool, the socket will
 be found readable when considered for reuse and that makes curl think it is
 dead and then it will be closed and a new connection gets created instead.
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
378
379
380
381
382
383
384






385
386
387
388
389
390
391







-
-
-
-
-
-







 ASCII space characters in --data-urlencode are currently encoded as %20
 rather than +, which RFC 1866 says should be used.

 See https://github.com/curl/curl/issues/3229

5. Build and portability issues

5.1 tests not compatible with python3

 The smb test server still needs python2.

 See https://github.com/curl/curl/issues/3289

5.2 curl-config --libs contains private details

 "curl-config --libs" will include details set in LDFLAGS when configure is
 run that might be needed only for building libcurl. Further, curl-config
 --cflags suffers from the same effects with CFLAGS/CPPFLAGS.

5.3 curl compiled on OSX 10.13 failed to run on OSX 10.10
Changes to jni/curl/docs/Makefile.am.
40
41
42
43
44
45
46

47
48
49
50
51
52
53
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54







+








CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1

EXTRA_DIST =                                    \
 $(noinst_man_MANS)                             \
 ALTSVC.md                                      \
 BINDINGS.md                                    \
 BUG-BOUNTY.md                                  \
 BUGS                                           \
 CHECKSRC.md                                    \
 CIPHERS.md                                     \
 CMakeLists.txt                                 \
 CODE_OF_CONDUCT.md                             \
 CODE_STYLE.md                                  \
 CONTRIBUTE.md                                  \
Changes to jni/curl/docs/Makefile.in.
467
468
469
470
471
472
473

474
475
476
477
478
479
480
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481







+







SUBDIRS = . cmdline-opts
DIST_SUBDIRS = $(SUBDIRS) examples libcurl
CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1
EXTRA_DIST = \
 $(noinst_man_MANS)                             \
 ALTSVC.md                                      \
 BINDINGS.md                                    \
 BUG-BOUNTY.md                                  \
 BUGS                                           \
 CHECKSRC.md                                    \
 CIPHERS.md                                     \
 CMakeLists.txt                                 \
 CODE_OF_CONDUCT.md                             \
 CODE_STYLE.md                                  \
 CONTRIBUTE.md                                  \
Changes to jni/curl/docs/RELEASE-PROCEDURE.md.
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26







-
+








- tag the git repo in this style: `git tag -a curl-7_34_0`. -a annotates the
  tag and we use underscores instead of dots in the version number. Make sure
  the tag is GPG signed (using -s).

- run "./maketgz 7.34.0" to build the release tarballs. It is important that
  you run this on a machine with the correct set of autotools etc installed
  as this is what then will be shipped and used by most users on *nix like
  as this is what then will be shipped and used by most users on \*nix like
  systems.

- push the git commits and the new tag

- gpg sign the 4 tarballs as maketgz suggests

- upload the 8 resulting files to the primary download directory
80
81
82
83
84
85
86
87
88
89
90
91








80
81
82
83
84
85
86

87
88
89
90
91
92
93
94
95
96
97
98







-




+
+
+
+
+
+
+
+

Coming dates
------------

Based on the description above, here are some planned release dates (at the
time of this writing):

- March 27, 2019
- May 22, 2019
- July 17, 2019
- September 11, 2019
- November 6, 2019
- January 8, 2020 (moved)
- February 27, 2020
- April 22, 2020
- June 17, 2020

The above (and more) curl-related dates are published in
[iCalendar format](https://calendar.google.com/calendar/ical/c9u5d64odop9js55oltfarjk6g%40group.calendar.google.com/public/basic.ics)
as well.
Changes to jni/curl/docs/SECURITY-PROCESS.md.
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
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












-
-
+
+
-










-
-
+
+


-
-
-
+
+
+





-
-
+
+














-
-
-
+
+
+







+
+
+

-
-
-
-
+
+
+
+
-







curl security process
=====================

This document describes how security vulnerabilities should be handled in the
curl project.

Publishing Information
----------------------

All known and public curl or libcurl related vulnerabilities are listed on
[the curl web site security page](https://curl.haxx.se/docs/security.html).

Security vulnerabilities should not be entered in the project's public bug
tracker unless the necessary configuration is in place to limit access to the
Security vulnerabilities **should not** be entered in the project's public bug
tracker.
issue to only the reporter and the project's security team.

Vulnerability Handling
----------------------

The typical process for handling a new security vulnerability is as follows.

No information should be made public about a vulnerability until it is
formally announced at the end of this process. That means, for example that a
bug tracker entry must NOT be created to track the issue since that will make
the issue public and it should not be discussed on any of the project's public
mailing lists. Also messages associated with any commits should not make
any reference to the security nature of the commit if done prior to the public
mailing lists. Also messages associated with any commits should not make any
reference to the security nature of the commit if done prior to the public
announcement.

- The person discovering the issue, the reporter, reports the vulnerability
  privately to `curl-security@haxx.se`. That's an email alias that reaches a
  handful of selected and trusted people.
- The person discovering the issue, the reporter, reports the vulnerability on
  [https://hackerone.com/curl](https://hackerone.com/curl). Issues filed there
  reach a handful of selected and trusted people.

- Messages that do not relate to the reporting or managing of an undisclosed
  security vulnerability in curl or libcurl are ignored and no further action
  is required.

- A person in the security team sends an e-mail to the original reporter to
  acknowledge the report.
- A person in the security team responds to the original report to acknowledge
  that a human has seen the report.

- The security team investigates the report and either rejects it or accepts
  it.

- If the report is rejected, the team writes to the reporter to explain why.

- If the report is accepted, the team writes to the reporter to let him/her
  know it is accepted and that they are working on a fix.

- The security team discusses the problem, works out a fix, considers the
  impact of the problem and suggests a release schedule. This discussion
  should involve the reporter as much as possible.

- The release of the information should be "as soon as possible" and is most
  often synced with an upcoming release that contains the fix. If the
  reporter, or anyone else, thinks the next planned release is too far away
  then a separate earlier release for security reasons should be considered.
  often synchronized with an upcoming release that contains the fix. If the
  reporter, or anyone else involved, thinks the next planned release is too
  far away, then a separate earlier release should be considered.

- Write a security advisory draft about the problem that explains what the
  problem is, its impact, which versions it affects, solutions or workarounds,
  when the release is out and make sure to credit all contributors properly.
  Figure out the CWE (Common Weakness Enumeration) number for the flaw.

- Request a CVE number from
  [HackerOne](https://docs.hackerone.com/programs/cve-requests.html)

- Consider informing
  [distros@openwall](https://oss-security.openwall.org/wiki/mailing-lists/distros)
  when also informing and preparing them for the upcoming public security
  vulnerability announcement - attach the advisory draft for information. Note
  that 'distros' won't accept an embargo longer than 14 days and they do not
  care for Windows-specific flaws. For windows-specific flaws, request CVE
  to prepare them about the upcoming public security vulnerability
  announcement - attach the advisory draft for information. Note that
  'distros' won't accept an embargo longer than 14 days and they do not care
  for Windows-specific flaws.
  directly from MITRE.

- Update the "security advisory" with the CVE number.

- The security team commits the fix in a private branch. The commit message
  should ideally contain the CVE number. This fix is usually also distributed
  to the 'distros' mailing list to allow them to use the fix prior to the
  public announcement.
88
89
90
91
92
93
94



95
96
97
98
99
100
101
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105







+
+
+







  curl-announce, curl-library and curl-users mailing lists.

- The security web page on the web site should get the new vulnerability
  mentioned.

curl-security (at haxx dot se)
------------------------------

This is a private mailing list for discussions on and about curl security
issues.

Who is on this list? There are a couple of criteria you must meet, and then we
might ask you to join the list or you can ask to join it. It really isn't very
formal. We basically only require that you have a long-term presence in the
curl project and you have shown an understanding for the project and its way
of working. You must've been around for a good while and you should have no
plans in vanishing in the near future.
117
118
119
120
121
122
123
124
125


126
127
128
129
130

131
132
133

134
135
121
122
123
124
125
126
127


128
129
130




131



132









-
-
+
+

-
-
-
-
+
-
-
-
+
-
-
   to the git repo.

5. Run `make` in your local web checkout and verify that things look fine.

6. On security advisory release day, push the changes on the curl-www
   repository's remote master branch.

Hackerone Internet Bug Bounty
-----------------------------
Bug Bounty
----------

The curl project does not run any bounty program on its own, but there are
outside organizations that do. First report your issue the normal way and
proceed as described in this document.

See [BUG-BOUNTY](https://curl.haxx.se/docs/bugbounty.html) for details on the
Then, if the issue is [critical](https://hackerone.com/ibb-data), you are
eligible to apply for a bounty from Hackerone for your find.

bug bounty program.
Once your reported vulnerability has been publicly disclosed by the curl
project, you can submit a [report to them](https://hackerone.com/ibb-data).
Changes to jni/curl/docs/SSL-PROBLEMS.md.
49
50
51
52
53
54
55
56

57
58

59
60
61
62
63
64
65
49
50
51
52
53
54
55

56
57

58
59
60
61
62
63
64
65







-
+

-
+








  You may have to explicitly provide an alternative list of ciphers for curl
  to use to allow the server to use a WEAK cipher for you.

  Note that these weak ciphers are identified as flawed. For example, this
  includes symmetric ciphers with less than 128 bit keys and RC4.

  WinSSL in Windows XP is not able to connect to servers that no longer
  Schannel in Windows XP is not able to connect to servers that no longer
  support the legacy handshakes and algorithms used by those versions, so we
  advice against building curl to use WinSSL on really old Windows versions.
  advice against building curl to use Schannel on really old Windows versions.

  References:

  https://tools.ietf.org/html/draft-popov-tls-prohibiting-rc4-01

## Allow BEAST

73
74
75
76
77
78
79
80
81
82



83
84
85
86
87
73
74
75
76
77
78
79



80
81
82
83
84
85
86
87







-
-
-
+
+
+





  servers.

## Disabling certificate revocation checks

  Some SSL backends may do certificate revocation checks (CRL, OCSP, etc)
  depending on the OS or build configuration. The --ssl-no-revoke option was
  introduced in 7.44.0 to disable revocation checking but currently is only
  supported for WinSSL (the native Windows SSL library), with an exception in
  the case of Windows' Untrusted Publishers blacklist which it seems can't be
  bypassed. This option may have broader support to accommodate other SSL
  supported for Schannel (the native Windows SSL library), with an exception
  in the case of Windows' Untrusted Publishers blacklist which it seems can't
  be bypassed. This option may have broader support to accommodate other SSL
  backends in the future.

  References:

  https://curl.haxx.se/docs/ssl-compared.html
Changes to jni/curl/docs/THANKS.
494
495
496
497
498
499
500

501
502
503
504
505
506
507
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508







+







Edward Rudd
Edward Sheldrake
Edward Thomson
Eelco Dolstra
Eetu Ojanen
Egon Eckert
Eldar Zaitov
Eli Schwartz
Elia Tufarolo
Elliot Saba
Ellis Pritchard
Elmira A Semenova
Emanuele Bovisio
Emil Lerner
Emil Romanus
642
643
644
645
646
647
648

649
650
651
652
653
654
655
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657







+







Grigory Entin
Guenole Bescon
Guido Berhoerster
Guillaume Arluison
Gunter Knauf
Gustaf Hui
Gustavo Grieco
Guy Poizat
GwanYeong Kim
Gwenole Beauchesne
Gökhan Şengün
Götz Babin-Ebell
Hagai Auro
Haibo Huang
Hamish Mackenzie
711
712
713
714
715
716
717

718
719
720
721
722
723
724
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727







+







Inca R
Ingmar Runge
Ingo Ralf Blum
Ingo Wilken
Irfan Adilovic
Irving Wolfe
Isaac Boukris
Isaiah Norton
Ishan SinghLevett
Ithubg on github
Ivan Avdeev
Ivo Bellin Salarin
Jack Zhang
Jackarain on github
Jacky Lam
877
878
879
880
881
882
883

884
885

886
887
888
889
890
891
892
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897







+


+







Jonas Forsman
Jonas Minnberg
Jonas Schnelli
Jonatan Lander
Jonatan Vela
Jonathan Cardoso Machado
Jonathan Hseu
Jonathan Moerman
Jonathan Nieder
Jongki Suwandi
Joombalaya on github
Joonas Kuorilehto
Jose Alf
Jose Kahan
Josef Wolf
Josh Bialkowski
Josh Kapell
Joshua Kwan
968
969
970
971
972
973
974

975
976
977
978
979
980
981
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987







+







Konstantin Kushnir
Kris Kennaway
Krishnendu Majumdar
Krister Johansen
Kristian Gunstone
Kristian Köhntopp
Kristiyan Tsaklev
Kristoffer Gleditsch
Kurt Fankhauser
Kyle J. McKay
Kyle L. Huff
Kyle Sallee
Kyselgov E.N
Lachlan O'Dea
Ladar Levison
1159
1160
1161
1162
1163
1164
1165

1166
1167
1168
1169
1170
1171
1172
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179







+







Maxim Perenesenko
Maxim Prohorov
Maxime Larocque
Maxime Legros
Mehmet Bozkurt
Mekonikum
Melissa Mears
Mert Yazıcıoğlu
Mettgut Jamalla
Michael Anti
Michael Benedict
Michael Calmer
Michael Cronenworth
Michael Curtis
Michael Day
1280
1281
1282
1283
1284
1285
1286

1287
1288
1289
1290
1291
1292
1293

1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304

1305
1306
1307
1308
1309
1310
1311
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321







+







+











+







Octavio Schroeder
Ofer
Okhin Vasilij
Ola Mork
Olaf Flebbe
Olaf Stüben
Oleg Pudeyev
Olen Andoni
Oli Kingshott
Oliver Gondža
Oliver Graute
Oliver Kuckertz
Oliver Schindler
Olivier Berger
Olivier Brunel
Omar Ramadan
Orange Tsai
Oren Souroujon
Oren Tirosh
Orgad Shaneh
Ori Avtalion
Oscar Koeroo
Oscar Norlander
Oskar Liljeblad
Oumph on github
P R Schaffner
Palo Markovic
Paolo Mossino
Paolo Piacentini
Paras Sethia
Pascal Gaudette
Pascal Terjan
Pasha Kuznetsov
Pasi Karkkainen
Pat Ray
1393
1394
1395
1396
1397
1398
1399

1400

1401
1402
1403
1404
1405
1406
1407
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419







+

+







Philippe Vaucher
Pierre
Pierre Brico
Pierre Chapuis
Pierre Joye
Pierre Ynard
Piotr Dobrogost
Po-Chuan Hsieh
Pooyan McSporran
Poul T Lomholt
Pramod Sharma
Prash Dush
Praveen Pvs
Priyanka Shah
Przemysław Tomaszewski
Puneet Pawaia
Quagmire
1429
1430
1431
1432
1433
1434
1435

1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451

1452
1453
1454
1455
1456
1457
1458
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472







+
















+







Randy McMurchy
Raphael Gozzo
Ravi Pratap
Ray Dassen
Ray Pekowski
Ray Satiro
Razvan Cojocaru
Reed Loden
Reinhard Max
Reinout van Schouwen
Remco van Hooff
Remi Gacogne
Remo E
Renato Botelho
Renaud Allard
Renaud Chaillat
Renaud Duhaut
Renaud Guillard
Renaud Lehoux
Rene Bernhardt
Rene Rebe
Reuven Wachtfogel
Reza Arbab
Ricardo Cadime
Ricardo Gomes
Rich Burridge
Rich Gray
Rich Rauenzahn
Rich Turner
Richard Adams
Richard Alcock
Richard Archer
1471
1472
1473
1474
1475
1476
1477

1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499







+







Richard van den Berg
Richy Kim
Rick Deist
Rick Jones
Rick Richardson
Rick Welykochy
Ricki Hirner
Ricky Leverence
Ricky-Tigg on github
Rider Linden
Rikard Falkeborn
Rob Cotrone
Rob Crittenden
Rob Davies
Rob Jones
1518
1519
1520
1521
1522
1523
1524

1525
1526
1527
1528
1529
1530
1531
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547







+







Roman Mamedov
Romulo A. Ceccon
Ron Eldor
Ron Parker
Ron Zapp
Ronnie Mose
Rosimildo da Silva
Roy Bellingan
Roy Shan
Rune Kleveland
Ruslan Baratov
Ruslan Gazizov
Rutger Hofman
Ruurd Beerstra
Ryan Braud
1667
1668
1669
1670
1671
1672
1673

1674
1675
1676
1677
1678
1679
1680
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697







+







Symeon Paraschoudis
Sébastien Willemijns
T. Bharath
T. Yamada
TJ Saunders
Tae Hyoung Ahn
Tae Wong
Taiyu Len
Taneli Vähäkangas
Tanguy Fautre
Tatsuhiro Tsujikawa
Teemu Yli-Elsila
Temprimus
Terri Oda
Terry Wu
1760
1761
1762
1763
1764
1765
1766

1767
1768
1769
1770
1771
1772
1773
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791







+







Toshio Kuratomi
Toshiyuki Maezawa
Traian Nicolescu
Travis Burtrum
Travis Obenhaus
Troels Walsted Hansen
Troy Engel
Tseng Jun
Tuomo Rinne
Tupone Alfredo
Tyler Hall
Török Edwin
Ulf Härnhammar
Ulf Samuelsson
Ulrich Doehner
1803
1804
1805
1806
1807
1808
1809

1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827

1828
1829
1830
1831
1832
1833
1834
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854







+


















+







Vsevolod Novikov
W. Mark Kubacki
Waldek Kozba
Walter J. Mack
Ward Willats
Warren Menzer
Wayne Haigh
Wenchao Li
Wenxiang Qian
Werner Koch
Wesley Laxton
Wesley Miaw
Wez Furlong
Wham Bang
Wilfredo Sanchez
Will Dietz
Willem Sparreboom
William A. Rowe Jr
William Ahern
Wojciech Zwiefka
Wouter Van Rooy
Wu Yongzheng
Wyatt O'Day
Xavier Bouchoux
XhstormR on github
Xiangbin Li
XmiliaH on github
Yaakov Selkowitz
Yang Tse
Yarram Sunil
Yasuharu Yamada
Yasuhiro Matsumoto
Yehezkel Horowitz
Yehoshua Hershberg
1862
1863
1864
1865
1866
1867
1868

1869
1870
1871
1872
1873
1874
1875
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896







+







arainchik on github
asavah on github
baumanj on github
bobmitchell1956 on github
bsammon on github
buzo-ffm on github
cbartl on github
cclauss on github
clbr on github
cmfrolick on github
d912e3 on github
daboul on github
dasimx on github
destman on github
dkjjr89 on github
1889
1890
1891
1892
1893
1894
1895

1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906

1907

1908
1909
1910
1911
1912
1913
1914
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938







+











+

+







jnbr on github
jonrumsey on github
joshhe on github
jungle-boogie on github
jveazey on github
ka7 on github
kreshano on github
l00p3r on Hackerone
lijian996 on github
lukaszgn on github
madblobfish on github
marc-groundctl on github
masbug on github
mccormickt12 on github
mkzero on github
moohoorama on github
nedres on github
neex on github
neheb on github
nevv on HackerOne/curl
nianxuejie on github
niner on github
nk
nopjmp on github
olesteban on github
omau on github
ovidiu-benea on github
patelvivekv1993 on github
pszemus on github
Changes to jni/curl/docs/TODO.
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
31
32
33
34
35
36
37

38
39
40
41
42
43
44







-







 1.12 updated DNS server while running
 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION
 1.14 Typesafe curl_easy_setopt()
 1.15 Monitor connections in the connection pool
 1.16 Try to URL encode given URL
 1.17 Add support for IRIs
 1.18 try next proxy if one doesn't work
 1.19 Timeout idle connections from the pool
 1.20 SRV and URI DNS records
 1.21 Have the URL API offer IDN decoding
 1.22 CURLINFO_PAUSE_STATE
 1.23 Offer API to flush the connection pool
 1.24 TCP Fast Open for windows
 1.25 Expose tried IP addresses that failed
 1.26 CURL_REFUSE_CLEARTEXT
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
145
146
147
148
149
150
151

152
153
154
155
156
157
158







-







 18. Command line tool
 18.1 sync
 18.2 glob posts
 18.3 prevent file overwriting
 18.4 simultaneous parallel transfers
 18.5 UTF-8 filenames in Content-Disposition
 18.6 warning when setting an option
 18.7 warning if curl version is not in sync with libcurl version
 18.8 offer color-coded HTTP header output
 18.9 Choose the name of file in braces for complex URLs
 18.10 improve how curl works in a windows console window
 18.11 Windows: set attribute 'archive' for completed downloads
 18.12 keep running, read instructions from pipe/socket
 18.13 support metalink in http headers
 18.14 --fail without --location should treat 3xx as a failure
256
257
258
259
260
261
262


263
264
265
266
267
268
269
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269







+
+








 Dynamically allocate buffer size depending on protocol in use in combination
 with freeing it after each individual transfer? Other suggestions?

1.7 Support HTTP/2 for HTTP(S) proxies

 Support for doing HTTP/2 to HTTP and HTTPS proxies is still missing.

 See https://github.com/curl/curl/issues/3570

1.8 CURLOPT_RESOLVE for any port number

 This option allows applications to set a replacement IP address for a given
 host + port pair. Consider making support for providing a replacement address
 for the host name on all port numbers.

368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
368
369
370
371
372
373
374










375
376
377
378
379
380
381







-
-
-
-
-
-
-
-
-
-







 Allow an application to specify a list of proxies to try, and failing to
 connect to the first go on and try the next instead until the list is
 exhausted. Browsers support this feature at least when they specify proxies
 using PACs.

 https://github.com/curl/curl/issues/896

1.19 Timeout idle connections from the pool

 libcurl currently keeps connections in its connection pool for an indefinite
 period of time, until it either gets reused, gets noticed that it has been
 closed by the server or gets pruned to make room for a new connection.

 To reduce overhead (especially for when we add monitoring of the connections
 in the pool), we should introduce a timeout so that connections that have
 been idle for N seconds get closed.

1.20 SRV and URI DNS records

 Offer support for resolving SRV and URI DNS records for libcurl to know which
 server to connect to for various protocols (including HTTP!).

1.21 Have the URL API offer IDN decoding

603
604
605
606
607
608
609
610

611
612
613
614
615
616
617
593
594
595
596
597
598
599

600
601
602
603
604
605
606
607







-
+







 which you give headers a value, and then when the HTTP request is built it
 sorts the headers based on that number. We could then have internally created
 headers use a default value so only headers that need to be moved have to be
 specified.

5.4 Allow SAN names in HTTP/2 server push

 curl only allows HTTP/2 push promise if the provided :autority header value
 curl only allows HTTP/2 push promise if the provided :authority header value
 exactly matches the host name given in the URL. It could be extended to allow
 any name that would match the Subject Alternative Names in the server's TLS
 certificate.

 See https://github.com/curl/curl/pull/3581

5.5 auth= in URLs
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1011
1012
1013
1014
1015
1016
1017







1018
1019
1020
1021
1022
1023
1024







-
-
-
-
-
-
-








18.6 warning when setting an option

 Display a warning when libcurl returns an error when setting an option.
 This can be useful to tell when support for a particular feature hasn't been
 compiled into the library.

18.7 warning if curl version is not in sync with libcurl version

 This is usually a sign of a funny, weird or unexpected install situations
 that aren't always quickly nor easily detected by users. curl and libcurl are
 always released in sync and should use the same version numbers unless very
 special situations.

18.8 offer color-coded HTTP header output

 By offering different color output on the header name and the header
 contents, they could be made more readable and thus help users working on
 HTTP services.

18.9 Choose the name of file in braces for complex URLs
Changes to jni/curl/docs/cmdline-opts/alt-svc.d.
1
2
3
4
5
6
7
8
9
10
11
12
13

14
15
16
17
1
2
3
4
5
6
7
8
9
10
11
12

13
14
15
16
17












-
+




Long: alt-svc
Arg: <file name>
Protocols: HTTPS
Help: Enable alt-svc with this cache file
Added: 7.64.1
---
WARNING: this option is experiemental. Do not use in production.

This option enables the alt-svc parser in curl. If the file name points to an
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specifiy a "" file name (zero length) to avoid loading/saving and make curl
Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the the last one will be used for saving.
Changes to jni/curl/docs/cmdline-opts/config.d.
11
12
13
14
15
16
17
18
19
20
21
22
23






24
25
26
27
28
29
30
11
12
13
14
15
16
17






18
19
20
21
22
23
24
25
26
27
28
29
30







-
-
-
-
-
-
+
+
+
+
+
+







Options and their parameters must be specified on the same line in the file,
separated by whitespace, colon, or the equals sign. Long option names can
optionally be given in the config file without the initial double dashes and
if so, the colon or equals characters can be used as separators. If the option
is specified with one or two dashes, there can be no colon or equals character
between the option and its parameter.

If the parameter is to contain whitespace, the parameter must be enclosed
within quotes. Within double quotes, the following escape sequences are
available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
letter is ignored. If the first column of a config line is a '#' character,
the rest of the line will be treated as a comment. Only write one option per
physical line in the config file.
If the parameter contains whitespace (or starts with : or =), the parameter
must be enclosed within quotes. Within double quotes, the following escape
sequences are available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash
preceding any other letter is ignored. If the first column of a config line is
a '#' character, the rest of the line will be treated as a comment. Only write
one option per physical line in the config file.

Specify the filename to --config as '-' to make curl read the file from stdin.

Note that to be able to specify a URL in the config file, you need to specify
it using the --url option, and not by simply writing the URL on its own
line. So, it could look similar to this:

Changes to jni/curl/docs/curl-config.1.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl-config 1 "November 30, 2017" "Curl 7.64.1" "curl-config manual"
.TH curl-config 1 "November 30, 2017" "Curl 7.65.0" "curl-config manual"

.SH NAME
curl-config \- Get information about a libcurl installation
.SH SYNOPSIS
.B curl-config [options]
.SH DESCRIPTION
.B curl-config
Changes to jni/curl/docs/curl.1.
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32







-
+







.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator.
.\"
.TH curl 1 "November 16, 2016" "Curl 7.64.1" "Curl Manual"
.TH curl 1 "November 16, 2016" "Curl 7.65.0" "Curl Manual"

.SH NAME
curl \- transfer a URL
.SH SYNOPSIS
.B curl [options / URLs]
.SH DESCRIPTION
.B curl
149
150
151
152
153
154
155
156

157
158
159
160
161
162
163
149
150
151
152
153
154
155

156
157
158
159
160
161
162
163







-
+







.IP "--alt-svc <file name>"
(HTTPS) WARNING: this option is experiemental. Do not use in production.

This option enables the alt-svc parser in curl. If the file name points to an
existing alt-svc cache file, that will be used. After a completed transfer,
the cache will be saved to the file name again if it has been modified.

Specifiy a "" file name (zero length) to avoid loading/saving and make curl
Specify a "" file name (zero length) to avoid loading/saving and make curl
just handle the cache in memory.

If this option is used several times, curl will load contents from all the
files but the the last one will be used for saving.

Added in 7.64.1.
.IP "--anyauth"
317
318
319
320
321
322
323
324
325
326
327
328
329






330
331
332
333
334
335
336
317
318
319
320
321
322
323






324
325
326
327
328
329
330
331
332
333
334
335
336







-
-
-
-
-
-
+
+
+
+
+
+







Options and their parameters must be specified on the same line in the file,
separated by whitespace, colon, or the equals sign. Long option names can
optionally be given in the config file without the initial double dashes and
if so, the colon or equals characters can be used as separators. If the option
is specified with one or two dashes, there can be no colon or equals character
between the option and its parameter.

If the parameter is to contain whitespace, the parameter must be enclosed
within quotes. Within double quotes, the following escape sequences are
available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash preceding any other
letter is ignored. If the first column of a config line is a '#' character,
the rest of the line will be treated as a comment. Only write one option per
physical line in the config file.
If the parameter contains whitespace (or starts with : or =), the parameter
must be enclosed within quotes. Within double quotes, the following escape
sequences are available: \\\\, \\", \\t, \\n, \\r and \\v. A backslash
preceding any other letter is ignored. If the first column of a config line is
a '#' character, the rest of the line will be treated as a comment. Only write
one option per physical line in the config file.

Specify the filename to \fI-K, --config\fP as '-' to make curl read the file from stdin.

Note that to be able to specify a URL in the config file, you need to specify
it using the \fI--url\fP option, and not by simply writing the URL on its own
line. So, it could look similar to this:

Changes to jni/curl/docs/examples/cacertinmem.c.
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
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







-
+



















-



-







    "r0CodaxWkHS4oJyleW/c6RrIaQXpuvoDs3zk4E7Czp3otkYNbn5XOmeUwssfnHdK\n"
    "Z05phkOTOPu220+DkdRgfks+KzgHVZhepA==\n"
    "-----END CERTIFICATE-----\n";

  BIO *cbio = BIO_new_mem_buf(mypem, sizeof(mypem));
  X509_STORE  *cts = SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
  X509_INFO *itmp;
  int i, count = 0;
  int i;
  STACK_OF(X509_INFO) *inf;
  (void)curl;
  (void)parm;

  if(!cts || !cbio) {
    return rv;
  }

  inf = PEM_X509_INFO_read_bio(cbio, NULL, NULL, NULL);

  if(!inf) {
    BIO_free(cbio);
    return rv;
  }

  for(i = 0; i < sk_X509_INFO_num(inf); i++) {
    itmp = sk_X509_INFO_value(inf, i);
    if(itmp->x509) {
      X509_STORE_add_cert(cts, itmp->x509);
      count++;
    }
    if(itmp->crl) {
      X509_STORE_add_crl(cts, itmp->crl);
      count++;
    }
  }

  sk_X509_INFO_pop_free(inf, X509_INFO_free);
  BIO_free(cbio);

  rv = CURLE_OK;
Changes to jni/curl/docs/examples/curlgtk.c.
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
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







-
















-
+







  gdk_threads_leave();
  return 0;
}

void *my_thread(void *ptr)
{
  CURL *curl;
  CURLcode res;
  FILE *outfile;
  gchar *url = ptr;

  curl = curl_easy_init();
  if(curl) {
    const char *filename = "test.curl";
    outfile = fopen(filename, "wb");

    curl_easy_setopt(curl, CURLOPT_URL, url);
    curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, my_write_func);
    curl_easy_setopt(curl, CURLOPT_READFUNCTION, my_read_func);
    curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
    curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, my_progress_func);
    curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, Bar);

    res = curl_easy_perform(curl);
    curl_easy_perform(curl);

    fclose(outfile);
    /* always cleanup */
    curl_easy_cleanup(curl);
  }

  return NULL;
Changes to jni/curl/docs/examples/curlx.c.
540
541
542
543
544
545
546
547

548
549
550
551
552
553
554
540
541
542
543
544
545
546

547
548
549
550
551
552
553
554







-
+









  /* Perform the request, res will get the return code */

  BIO_printf(p.errorbio, "%d %s %d\n", __LINE__, "curl_easy_perform",
             res = curl_easy_perform(p.curl));
  {
    int result = curl_easy_getinfo(p.curl, CURLINFO_CONTENT_TYPE, &response);
    curl_easy_getinfo(p.curl, CURLINFO_CONTENT_TYPE, &response);
    if(mimetypeaccept && p.verbose) {
      if(!strcmp(mimetypeaccept, response))
        BIO_printf(p.errorbio, "the response has a correct mimetype : %s\n",
                   response);
      else
        BIO_printf(p.errorbio, "the response doesn\'t have an acceptable "
                   "mime type, it is %s instead of %s\n",
Changes to jni/curl/docs/examples/ephiperfifo.c.
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
144
145
146
147
148
149
150

151
152
153
154
155
156
157







-








/* Update the timer after curl_multi library does it's thing. Curl will
 * inform us through this callback what it wants the new timeout to be,
 * after it does some work. */
static int multi_timer_cb(CURLM *multi, long timeout_ms, GlobalInfo *g)
{
  struct itimerspec its;
  CURLMcode rc;

  fprintf(MSG_OUT, "multi_timer_cb: Setting timeout to %ld ms\n", timeout_ms);

  if(timeout_ms > 0) {
    its.it_interval.tv_sec = 1;
    its.it_interval.tv_nsec = 0;
    its.it_value.tv_sec = timeout_ms / 1000;
337
338
339
340
341
342
343
344


345
346
347
348
349
350
351
336
337
338
339
340
341
342

343
344
345
346
347
348
349
350
351







-
+
+









/* CURLOPT_WRITEFUNCTION */
static size_t write_cb(void *ptr _Unused, size_t size, size_t nmemb,
                       void *data)
{
  size_t realsize = size * nmemb;
  ConnInfo *conn _Unused = (ConnInfo*) data;
  (void)_Unused;
  (void)data;

  return realsize;
}


/* CURLOPT_PROGRESSFUNCTION */
static int prog_cb(void *p, double dltotal, double dlnow, double ult _Unused,
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
514
515
516
517
518
519
520



521
522
523
524
525
526
527







-
-
-








  /* we don't call any curl_multi_socket*() function yet as we have no handles
     added! */

  fprintf(MSG_OUT, "Entering wait loop\n");
  fflush(MSG_OUT);
  while(!g_should_exit_) {
    /* TODO(josh): use epoll_pwait to avoid a race on the signal. Mask the
     * signal before the while loop, and then re-enable the signal during
     * epoll wait. Mask at the end of the loop. */
    err = epoll_wait(g.epfd, events, sizeof(events)/sizeof(struct epoll_event),
                     10000);
    if(err == -1) {
      if(errno == EINTR) {
        fprintf(MSG_OUT, "note: wait interrupted\n");
        continue;
      }
Changes to jni/curl/docs/examples/evhiperfifo.c.
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
417
418
419
420
421
422
423

424
425
426
427
428
429
430







-







  ev_io_start(g->loop, &g->fifo_event);
  return (0);
}

int main(int argc, char **argv)
{
  GlobalInfo g;
  CURLMcode rc;
  (void)argc;
  (void)argv;

  memset(&g, 0, sizeof(GlobalInfo));
  g.loop = ev_default_loop(0);

  init_fifo(&g);
Changes to jni/curl/docs/examples/ftpgetinfo.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
52
53
54
55
56
57
58

59
60
61
62
63
64
65







-







  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, ftpurl);
    /* No download if the file */
    curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
    /* Ask for filetime */
    curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
    /* No header output: TODO 14.1 http-style HEAD output for ftp */
    curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, throw_away);
    curl_easy_setopt(curl, CURLOPT_HEADER, 0L);
    /* Switch on full protocol/debug output */
    /* curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L); */

    res = curl_easy_perform(curl);

Changes to jni/curl/docs/examples/ghiper.c.
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
407
408
409
410
411
412
413

414
415
416
417
418
419
420







-








  return socket;
}

int main(int argc, char **argv)
{
  GlobalInfo *g;
  CURLMcode rc;
  GMainLoop*gmain;
  int fd;
  GIOChannel* ch;
  g = g_malloc0(sizeof(GlobalInfo));

  fd = init_fifo();
  ch = g_io_channel_unix_new(fd);
Changes to jni/curl/docs/examples/hiperfifo.c.
303
304
305
306
307
308
309
310


311
312
313
314
315
316
317
303
304
305
306
307
308
309

310
311
312
313
314
315
316
317
318







-
+
+









/* CURLOPT_WRITEFUNCTION */
static size_t write_cb(void *ptr _Unused, size_t size, size_t nmemb,
                       void *data)
{
  size_t realsize = size * nmemb;
  ConnInfo *conn _Unused = (ConnInfo*) data;
  (void)_Unused;
  (void)data;

  return realsize;
}


/* CURLOPT_PROGRESSFUNCTION */
static int prog_cb(void *p, double dltotal, double dlnow, double ult _Unused,
Changes to jni/curl/docs/examples/multithread.c.
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
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







-





-
-
-
-
+
+
+
+








-
+





   void * (*start_func)(void *), void *arg);
*/

int main(int argc, char **argv)
{
  pthread_t tid[NUMT];
  int i;
  int error;

  /* Must initialize libcurl before any threads are started */
  curl_global_init(CURL_GLOBAL_ALL);

  for(i = 0; i< NUMT; i++) {
    error = pthread_create(&tid[i],
                           NULL, /* default attributes please */
                           pull_one_url,
                           (void *)urls[i]);
    int error = pthread_create(&tid[i],
                               NULL, /* default attributes please */
                               pull_one_url,
                               (void *)urls[i]);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
  }

  /* now wait for all threads to terminate */
  for(i = 0; i< NUMT; i++) {
    error = pthread_join(tid[i], NULL);
    pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  return 0;
}
Changes to jni/curl/docs/examples/sampleconv.c.
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
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







-













-
+






    return CURLE_CONV_FAILED;
  }
}

int main(void)
{
  CURL *curl;
  CURLcode res;

  curl = curl_easy_init();
  if(curl) {
    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");

    /* use platform-specific functions for codeset conversions */
    curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
                     my_conv_from_ascii_to_ebcdic);
    curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
                     my_conv_from_ebcdic_to_ascii);
    curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
                     my_conv_from_utf8_to_ebcdic);

    res = curl_easy_perform(curl);
    curl_easy_perform(curl);

    /* always cleanup */
    curl_easy_cleanup(curl);
  }
  return 0;
}
Changes to jni/curl/docs/examples/smooth-gtk-thread.c.
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
64
65
66
67
68
69
70

71
72
73
74
75
76
77







-







  return fwrite(ptr, size, nmemb, stream);
}

/* https://weather.com/weather/today/l/46214?cc=*&dayf=5&unit=i */
void *pull_one_url(void *NaN)
{
  CURL *curl;
  CURLcode res;
  gchar *http;
  FILE *outfile;

  /* Stop threads from entering unless j is incremented */
  pthread_mutex_lock(&lock);
  while(j < num_urls) {
    printf("j = %d\n", j);
94
95
96
97
98
99
100
101

102
103
104
105
106
107
108
93
94
95
96
97
98
99

100
101
102
103
104
105
106
107







-
+







      /* Write to the file */
      curl_easy_setopt(curl, CURLOPT_WRITEDATA, outfile);
      curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_file);

      j++;  /* critical line */
      pthread_mutex_unlock(&lock);

      res = curl_easy_perform(curl);
      curl_easy_perform(curl);

      fclose(outfile);
      printf("fclose\n");

      curl_easy_cleanup(curl);
    }
    g_free(http);
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
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







-



-
-
-
-
+
+
+
+








-
+







  return TRUE;
}

void *create_thread(void *progress_bar)
{
  pthread_t tid[NUMT];
  int i;
  int error;

  /* Make sure I don't create more threads than urls. */
  for(i = 0; i < NUMT && i < num_urls ; i++) {
    error = pthread_create(&tid[i],
                           NULL, /* default attributes please */
                           pull_one_url,
                           NULL);
    int error = pthread_create(&tid[i],
                               NULL, /* default attributes please */
                               pull_one_url,
                               NULL);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
  }

  /* Wait for all threads to terminate. */
  for(i = 0; i < NUMT && i < num_urls; i++) {
    error = pthread_join(tid[i], NULL);
    pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  /* This stops the pulsing if you have it turned on in the progress bar
     section */
  g_source_remove(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(progress_bar),
                                                    "pulse_id")));
Changes to jni/curl/docs/examples/threaded-shared-conn.c.
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
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







-














+












-
+









  return NULL;
}

int main(void)
{
  pthread_t tid[NUM_THREADS];
  int i;
  int error;
  CURLSH *share;
  struct initurl url[NUM_THREADS];

  /* Must initialize libcurl before any threads are started */
  curl_global_init(CURL_GLOBAL_ALL);

  share = curl_share_init();
  curl_share_setopt(share, CURLSHOPT_LOCKFUNC, lock_cb);
  curl_share_setopt(share, CURLSHOPT_UNLOCKFUNC, unlock_cb);
  curl_share_setopt(share, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);

  init_locks();

  for(i = 0; i< NUM_THREADS; i++) {
    int error;
    url[i].url = URL;
    url[i].share = share;
    url[i].threadno = i;
    error = pthread_create(&tid[i], NULL, run_thread, &url[i]);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      fprintf(stderr, "Thread %d, gets %s\n", i, URL);
  }

  /* now wait for all threads to terminate */
  for(i = 0; i< NUM_THREADS; i++) {
    error = pthread_join(tid[i], NULL);
    pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  kill_locks();

  curl_share_cleanup(share);
  curl_global_cleanup();
  return 0;
}
Changes to jni/curl/docs/examples/threaded-ssl.c.
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
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







-









-
-
-
-
+
+
+
+








-
+







  return NULL;
}

int main(int argc, char **argv)
{
  pthread_t tid[NUMT];
  int i;
  int error;
  (void)argc; /* we don't use any arguments in this example */
  (void)argv;

  /* Must initialize libcurl before any threads are started */
  curl_global_init(CURL_GLOBAL_ALL);

  init_locks();

  for(i = 0; i< NUMT; i++) {
    error = pthread_create(&tid[i],
                           NULL, /* default attributes please */
                           pull_one_url,
                           (void *)urls[i]);
    int error = pthread_create(&tid[i],
                               NULL, /* default attributes please */
                               pull_one_url,
                               (void *)urls[i]);
    if(0 != error)
      fprintf(stderr, "Couldn't run thread number %d, errno %d\n", i, error);
    else
      fprintf(stderr, "Thread %d, gets %s\n", i, urls[i]);
  }

  /* now wait for all threads to terminate */
  for(i = 0; i< NUMT; i++) {
    error = pthread_join(tid[i], NULL);
    pthread_join(tid[i], NULL);
    fprintf(stderr, "Thread %d terminated\n", i);
  }

  kill_locks();

  return 0;
}
Changes to jni/curl/docs/libcurl/curl_easy_cleanup.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_cleanup 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_cleanup 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_cleanup - End a libcurl easy handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_cleanup(CURL *" handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_duphandle.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_duphandle 3 "March 01, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_duphandle 3 "March 01, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_duphandle - Clone a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_duphandle(CURL *"handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_escape.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_escape 3 "August 12, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_escape 3 "August 12, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_escape( CURL *" curl ", const char *" string
Changes to jni/curl/docs/libcurl/curl_easy_getinfo.3.
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
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







-
+














-
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_getinfo 3 "May 17, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_getinfo 3 "April 11, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_getinfo - extract information from a curl handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );"
239
240
241
242
243
244
245
246

247
248
249
250
251
252
253
239
240
241
242
243
244
245

246
247
248
249
250
251
252
253







-
+







    |--|--|--APPCONNECT
    |--|--|--|--PRETRANSFER
    |--|--|--|--|--STARTTRANSFER
    |--|--|--|--|--|--TOTAL
    |--|--|--|--|--|--REDIRECT
.fi
.IP NAMELOOKUP
\fICURLINFO_NAMELOOKUP_TIME\fP and \fIfICURLINFO_NAMELOOKUP_TIME_T\fP.
\fICURLINFO_NAMELOOKUP_TIME\fP and \fICURLINFO_NAMELOOKUP_TIME_T\fP.
The time it took from the start until the name resolving was completed.
.IP CONNECT
\fICURLINFO_CONNECT_TIME\fP and \fICURLINFO_CONNECT_TIME_T\fP.
The time it took from the start until the connect
to the remote host (or proxy) was completed.
.IP APPCONNECT
\fICURLINFO_APPCONNECT_TIME\fP and \fICURLINFO_APPCONNECT_TIME_T\fP.
Changes to jni/curl/docs/libcurl/curl_easy_init.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_init 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_init 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_init - Start a libcurl easy session
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURL *curl_easy_init( );"
Changes to jni/curl/docs/libcurl/curl_easy_pause.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_pause 3 "May 01, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_pause 3 "May 01, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_pause - pause and unpause a connection
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );"
Changes to jni/curl/docs/libcurl/curl_easy_perform.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_perform 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_perform 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_perform - perform a blocking file transfer
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_easy_perform(CURL *" easy_handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_recv.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_recv 3 "December 18, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_recv 3 "December 18, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_recv - receives raw data on an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer ","
Changes to jni/curl/docs/libcurl/curl_easy_reset.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_reset 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_reset 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_reset - reset all options of a libcurl session handle
.SH SYNOPSIS
.B #include <curl/curl.h>

.BI "void curl_easy_reset(CURL *"handle ");"
Changes to jni/curl/docs/libcurl/curl_easy_send.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_send 3 "December 18, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_send 3 "December 18, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_send - sends raw data over an "easy" connection
.SH SYNOPSIS
.B #include <curl/easy.h>
.sp
.BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer ","
Changes to jni/curl/docs/libcurl/curl_easy_setopt.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_setopt 3 "March 03, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_setopt 3 "April 14, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_setopt \- set options for a curl easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
465
466
467
468
469
470
471


472
473
474
475
476
477
478
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480







+
+







Cap the download speed to this. See \fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP
.IP CURLOPT_MAXCONNECTS
Maximum number of connections in the connection pool. See \fICURLOPT_MAXCONNECTS(3)\fP
.IP CURLOPT_FRESH_CONNECT
Use a new connection. \fICURLOPT_FRESH_CONNECT(3)\fP
.IP CURLOPT_FORBID_REUSE
Prevent subsequent connections from re-using this. See \fICURLOPT_FORBID_REUSE(3)\fP
.IP CURLOPT_MAXAGE_CONN
Limit the age of connections for reuse. See \fICURLOPT_MAXAGE_CONN(3)\fP
.IP CURLOPT_CONNECTTIMEOUT
Timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT(3)\fP
.IP CURLOPT_CONNECTTIMEOUT_MS
Millisecond timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
.IP CURLOPT_IPRESOLVE
IP version to resolve to. See \fICURLOPT_IPRESOLVE(3)\fP
.IP CURLOPT_CONNECT_ONLY
Changes to jni/curl/docs/libcurl/curl_easy_strerror.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_easy_strerror 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_strerror 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_strerror - return string describing error code
.SH SYNOPSIS
#include <curl/curl.h>

const char *curl_easy_strerror(CURLcode errornum);
Changes to jni/curl/docs/libcurl/curl_easy_unescape.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_easy_unescape 3 "October 04, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_easy_unescape 3 "October 04, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_easy_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url
Changes to jni/curl/docs/libcurl/curl_escape.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_escape 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_escape 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_escape - URL encodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_escape( const char *" url ", int "length " );"
Changes to jni/curl/docs/libcurl/curl_formadd.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formadd 3 "December 11, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_formadd 3 "December 11, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_formadd - add a section to a multipart/formdata HTTP POST
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,
Changes to jni/curl/docs/libcurl/curl_formfree.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formfree 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_formfree 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_formfree - free a previously build multipart/formdata HTTP POST chain
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_formfree(struct curl_httppost *" form);
Changes to jni/curl/docs/libcurl/curl_formget.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_formget 3 "September 02, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_formget 3 "September 02, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_formget - serialize a previously built multipart/formdata HTTP POST chain
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_free.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_free 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_free 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_free - reclaim memory that has been obtained through a libcurl call
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_free( char *" ptr " );"
Changes to jni/curl/docs/libcurl/curl_getdate.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getdate 3 "January 18, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_getdate 3 "January 18, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_getdate - Convert a date string to number of seconds
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"
Changes to jni/curl/docs/libcurl/curl_getenv.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_getenv 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_getenv 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_getenv - return value for environment name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_getenv(const char *" name ");"
Changes to jni/curl/docs/libcurl/curl_global_cleanup.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_cleanup 3 "September 20, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_global_cleanup 3 "September 20, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_global_cleanup - global libcurl cleanup
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_global_cleanup(void);"
Changes to jni/curl/docs/libcurl/curl_global_init.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init 3 "April 17, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_global_init 3 "April 17, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_global_init - Global libcurl initialisation
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_global_init(long " flags ");"
Changes to jni/curl/docs/libcurl/curl_global_init_mem.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_init_mem 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_global_init_mem 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_global_init_mem - Global libcurl initialisation with memory callbacks
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf
.B "CURLcode curl_global_init_mem(long " flags,
Changes to jni/curl/docs/libcurl/curl_global_sslset.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_global_sslset 3 "October 30, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_global_sslset 3 "October 30, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_global_sslset - Select SSL backend to use with libcurl
.SH SYNOPSIS
.B #include <curl/curl.h>
.nf

Changes to jni/curl/docs/libcurl/curl_mime_addpart.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_addpart 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_addpart 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_addpart - append a new empty part to a mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mimepart * curl_mime_addpart(curl_mime * " mime ");"
Changes to jni/curl/docs/libcurl/curl_mime_data.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_data 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_data - set a mime part's body data from memory
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_data(curl_mimepart * " part ", const char * " data
Changes to jni/curl/docs/libcurl/curl_mime_data_cb.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_data_cb 3 "April 17, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_data_cb 3 "April 17, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_data_cb - set a callback-based data source for a mime part's body
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg);
Changes to jni/curl/docs/libcurl/curl_mime_encoder.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_encoder 3 "September 05, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_encoder 3 "September 05, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_encoder - set a mime part's encoder and content transfer encoding
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_encoder(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_filedata.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filedata 3 "April 17, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_filedata 3 "April 17, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_filedata - set a mime part's body data from a file contents
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filedata(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_filename.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_filename 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_filename 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_filename - set a mime part's remote file name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_filename(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_free.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_free 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_free 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_free - free a previously built mime structure
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_mime_free(curl_mime *" mime);
Changes to jni/curl/docs/libcurl/curl_mime_headers.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_headers 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_headers 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_headers - set a mime part's custom headers
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_headers(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_init.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_init 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_init 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_init - create a mime handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_mime * curl_mime_init(CURL * " easy_handle ");"
Changes to jni/curl/docs/libcurl/curl_mime_name.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_name 3 "September 22, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_name 3 "September 22, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_name - set a mime part's name
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_name(curl_mimepart * " part ", const char * " name ");"
Changes to jni/curl/docs/libcurl/curl_mime_subparts.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_subparts 3 "September 05, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_subparts 3 "September 05, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_subparts - set subparts of a multipart mime part
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_subparts(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mime_type.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_mime_type 3 "April 17, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_mime_type 3 "April 17, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_mime_type - set a mime part's content type
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLcode curl_mime_type(curl_mimepart * " part ,
Changes to jni/curl/docs/libcurl/curl_mprintf.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_printf 3 "April 01, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_printf 3 "April 01, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
curl_mvsprintf - formatted output conversion
.SH SYNOPSIS
.B #include <curl/mprintf.h>
Changes to jni/curl/docs/libcurl/curl_multi_add_handle.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_add_handle 3 "June 30, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_add_handle 3 "June 30, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_add_handle - add an easy handle to a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
Changes to jni/curl/docs/libcurl/curl_multi_assign.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_assign 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_assign 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_assign \- set data to associate with an internal socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,
Changes to jni/curl/docs/libcurl/curl_multi_cleanup.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_cleanup 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_cleanup 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_cleanup - close down a multi session
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"
Changes to jni/curl/docs/libcurl/curl_multi_fdset.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_fdset 3 "November 09, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_fdset 3 "November 09, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_fdset - extracts file descriptor information from a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_info_read.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_info_read 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_info_read 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_info_read - read multi stack informationals
.SH SYNOPSIS
#include <curl/curl.h>

CURLMsg *curl_multi_info_read( CURLM *multi_handle,
Changes to jni/curl/docs/libcurl/curl_multi_init.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_init 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_init 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_init - create a multi handle
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLM *curl_multi_init( );"
Changes to jni/curl/docs/libcurl/curl_multi_perform.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_perform 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_perform 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_perform - reads/writes available data from each easy handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
Changes to jni/curl/docs/libcurl/curl_multi_remove_handle.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_remove_handle 3 "February 19, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_remove_handle 3 "February 19, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_remove_handle - remove an easy handle from a multi session
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
Changes to jni/curl/docs/libcurl/curl_multi_setopt.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_setopt 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_setopt 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_setopt \- set options for a curl multi handle
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
Changes to jni/curl/docs/libcurl/curl_multi_socket.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket 3 "June 30, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_socket 3 "June 30, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_socket \- reads/writes available data
.SH SYNOPSIS
.nf
#include <curl/curl.h>
CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
Changes to jni/curl/docs/libcurl/curl_multi_socket_action.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_socket_action 3 "June 30, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_socket_action 3 "June 30, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_socket_action \- reads/writes available data given an action
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_multi_strerror.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_strerror 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_strerror 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"
Changes to jni/curl/docs/libcurl/curl_multi_timeout.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_timeout 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_timeout 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_timeout \- how long to wait for action before proceeding
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
Changes to jni/curl/docs/libcurl/curl_multi_wait.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_multi_wait 3 "March 09, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_multi_wait 3 "March 09, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_multi_wait - polls on all easy handles in a multi handle
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/curl_share_cleanup.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_cleanup 3 "August 09, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_share_cleanup 3 "August 09, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_share_cleanup - Clean up a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");"
Changes to jni/curl/docs/libcurl/curl_share_init.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_init 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_share_init 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_share_init - Create a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "CURLSH *curl_share_init( );"
Changes to jni/curl/docs/libcurl/curl_share_setopt.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_setopt 3 "May 28, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_share_setopt 3 "May 28, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_share_setopt - Set options for a shared object
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);
Changes to jni/curl/docs/libcurl/curl_share_strerror.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_share_strerror 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_share_strerror 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_share_strerror - return string describing error code
.SH SYNOPSIS
.nf
.B #include <curl/curl.h>
.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"
Changes to jni/curl/docs/libcurl/curl_slist_append.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_append 3 "January 02, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_slist_append 3 "January 02, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_slist_append - add a string to an slist
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,
Changes to jni/curl/docs/libcurl/curl_slist_free_all.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_slist_free_all 3 "September 23, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_slist_free_all 3 "September 23, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_slist_free_all - free an entire curl_slist list
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "void curl_slist_free_all(struct curl_slist *" list);
Changes to jni/curl/docs/libcurl/curl_strequal.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_strequal 3 "June 29, 2017" "libcurl 7.64.1" "libcurl Manual"
.TH curl_strequal 3 "June 29, 2017" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_strequal, curl_strnequal - case insensitive string comparisons
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "int curl_strequal(char *" str1 ", char *" str2 ");"
Changes to jni/curl/docs/libcurl/curl_unescape.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_unescape 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_unescape 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_unescape - URL decodes the given string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_unescape( const char *" url ", int "length " );"
Changes to jni/curl/docs/libcurl/curl_url.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url 3 "March 22, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_url 3 "March 22, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_url - returns a new CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url();
Changes to jni/curl/docs/libcurl/curl_url_cleanup.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_cleanup 3 "September 08, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_url_cleanup 3 "September 08, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_url_cleanup - free a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

void curl_url_cleanup(CURLU *handle);
Changes to jni/curl/docs/libcurl/curl_url_dup.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_dup 3 "September 08, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_url_dup 3 "September 08, 2018" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_url_dup - duplicate a CURLU handle
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLU *curl_url_dup(CURLU *inhandle);
Changes to jni/curl/docs/libcurl/curl_url_get.3.
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
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







-
+













-
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_get 3 "October 08, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_url_get 3 "May 03, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_url_get - extract a part from a URL
.SH SYNOPSIS
.B #include <curl/curl.h>

.nf
73
74
75
76
77
78
79




80
81
82
83
84
85
86
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90







+
+
+
+







normalized and possibly cleaned up version of what was previously parsed.
.IP CURLUPART_SCHEME
Scheme cannot be URL decoded on get.
.IP CURLUPART_USER
.IP CURLUPART_PASSWORD
.IP CURLUPART_OPTIONS
.IP CURLUPART_HOST
If the host part is an IPv6 numeric address, the zoneid will not be part of
the extracted host but is provided separately in \fICURLUPART_ZONEID\fP.
.IP CURLUPART_ZONEID
If the host name is a numeric IPv6 address, this field might also be set.
.IP CURLUPART_PORT
Port cannot be URL decoded on get.
.IP CURLUPART_PATH
.IP CURLUPART_QUERY
The query part will also get pluses converted to space when asked to URL
decode on get with the CURLU_URLDECODE bit.
.IP CURLUPART_FRAGMENT
101
102
103
104
105
106
107
108

109
110
111
105
106
107
108
109
110
111

112
113
114
115







-
+



      printf("the scheme is %s\\n", scheme);
      curl_free(scheme);
    }
    curl_url_cleanup(url);
  }
.fi
.SH AVAILABILITY
Added in curl 7.62.0
Added in curl 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
.SH "SEE ALSO"
.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
.BR curl_url_dup "(3), "
Changes to jni/curl/docs/libcurl/curl_url_set.3.
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
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







-
+













-
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_url_set 3 "November 06, 2018" "libcurl 7.64.1" "libcurl Manual"
.TH curl_url_set 3 "May 03, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_url_set - set a URL part
.SH SYNOPSIS
.B #include <curl/curl.h>

CURLUcode curl_url_set(CURLU *url,
59
60
61
62
63
64
65


66
67



68
69
70
71
72
73
74
59
60
61
62
63
64
65
66
67
68

69
70
71
72
73
74
75
76
77
78







+
+

-
+
+
+







Scheme cannot be URL decoded on set.
.IP CURLUPART_USER
.IP CURLUPART_PASSWORD
.IP CURLUPART_OPTIONS
.IP CURLUPART_HOST
The host name can use IDNA. The string must then be encoded as your locale
says or UTF-8 (when winidn is used).
.IP CURLUPART_ZONEID
If the host name is a numeric IPv6 address, this field can also be set.
.IP CURLUPART_PORT
Port cannot be URL encoded on set.
Port cannot be URL encoded on set. The given port number is provided as a
string and the decimal number must be between 1 and 65535. Anything else will
return an error.
.IP CURLUPART_PATH
If a path is set in the URL without a leading slash, a slash will be inserted
automatically when this URL is read from the handle.
.IP CURLUPART_QUERY
The query part will also get spaces converted to pluses when asked to URL
encode on set with the CURLU_URLENCODE bit.

122
123
124
125
126
127
128
129

130
131
132
126
127
128
129
130
131
132

133
134
135
136







-
+



    char *scheme;
    /* change it to an FTP URL */
    rc = curl_url_set(url, CURLUPART_SCHEME, "ftp", 0);
  }
  curl_url_cleanup(url);
.fi
.SH AVAILABILITY
Added in curl 7.62.0
Added in curl 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
.SH "SEE ALSO"
.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_get "(3), "
.BR curl_url_dup "(3), "
Changes to jni/curl/docs/libcurl/curl_version.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH curl_version 3 "February 03, 2016" "libcurl 7.64.1" "libcurl Manual"
.TH curl_version 3 "February 03, 2016" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_version - returns the libcurl version string
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "char *curl_version( );"
Changes to jni/curl/docs/libcurl/curl_version_info.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH curl_version_info 3 "January 29, 2019" "libcurl 7.64.1" "libcurl Manual"
.TH curl_version_info 3 "January 29, 2019" "libcurl 7.65.0" "libcurl Manual"

.SH NAME
curl_version_info - returns run-time libcurl version info
.SH SYNOPSIS
.B #include <curl/curl.h>
.sp
.BI "curl_version_info_data *curl_version_info( CURLversion "age ");"
Changes to jni/curl/docs/libcurl/libcurl-easy.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "February 03, 2016" "libcurl 7.64.1" "libcurl easy interface"
.TH libcurl 3 "February 03, 2016" "libcurl 7.65.0" "libcurl easy interface"

.SH NAME
libcurl-easy \- easy interface overview
.SH DESCRIPTION
When using libcurl's "easy" interface you init your session and get a handle
(often referred to as an "easy handle"), which you use as input to the easy
interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle.
Changes to jni/curl/docs/libcurl/libcurl-env.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-env 3 "April 17, 2018" "libcurl 7.64.1" "libcurl environment variables"
.TH libcurl-env 3 "April 17, 2018" "libcurl 7.65.0" "libcurl environment variables"

.SH NAME
libcurl-env \- environment variables libcurl understands
.SH DESCRIPTION
libcurl reads and understands a set of environment variables that if set will
control and change behaviors. This is the full list of variables to set and
description of what they do. Also note that curl, the command line tool,
Changes to jni/curl/docs/libcurl/libcurl-errors.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-errors 3 "November 19, 2018" "libcurl 7.64.1" "libcurl errors"
.TH libcurl-errors 3 "November 19, 2018" "libcurl 7.65.0" "libcurl errors"

.SH NAME
libcurl-errors \- error codes in libcurl
.SH DESCRIPTION
This man page includes most, if not all, available error codes in libcurl.
Why they occur and possibly what you can do to fix the problem are also included.
.SH "CURLcode"
Changes to jni/curl/docs/libcurl/libcurl-multi.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-multi 3 "June 30, 2018" "libcurl 7.64.1" "libcurl multi interface"
.TH libcurl-multi 3 "June 30, 2018" "libcurl 7.65.0" "libcurl multi interface"

.SH NAME
libcurl-multi \- how to use the multi interface
.SH DESCRIPTION
This is an overview on how to use the libcurl multi interface in your C
programs. There are specific man pages for each function mentioned in
here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete
Changes to jni/curl/docs/libcurl/libcurl-security.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-security 3 "September 23, 2018" "libcurl 7.64.1" "libcurl security"
.TH libcurl-security 3 "September 23, 2018" "libcurl 7.65.0" "libcurl security"

.SH NAME
libcurl-security \- security considerations when using libcurl
.SH "Security"
The libcurl project takes security seriously.  The library is written with
caution and precautions are taken to mitigate many kinds of risks encountered
while operating with potentially malicious servers on the Internet. It is a
Changes to jni/curl/docs/libcurl/libcurl-share.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-share 3 "November 27, 2017" "libcurl 7.64.1" "libcurl share interface"
.TH libcurl-share 3 "November 27, 2017" "libcurl 7.65.0" "libcurl share interface"

.SH NAME
libcurl-share \- how to use the share interface
.SH DESCRIPTION
This is an overview on how to use the libcurl share interface in your C
programs. There are specific man pages for each function mentioned in
here.
Changes to jni/curl/docs/libcurl/libcurl-symbols.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl-symbols 3 "mar 27, 2019" "libcurl 7.41.0" "libcurl symbols"
.TH libcurl-symbols 3 "maj 22, 2019" "libcurl 7.41.0" "libcurl symbols"
.SH NAME
libcurl-symbols \- libcurl symbol version information
.SH "libcurl symbols"
This man page details version information for public symbols provided in the
libcurl header files. This lists the first version in which the symbol was
introduced and for some symbols two additional information pieces:

1000
1001
1002
1003
1004
1005
1006


1007
1008
1009
1010
1011
1012
1013
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015







+
+







Introduced in 7.1
.IP CURLOPT_MAIL_AUTH
Introduced in 7.25.0
.IP CURLOPT_MAIL_FROM
Introduced in 7.20.0
.IP CURLOPT_MAIL_RCPT
Introduced in 7.20.0
.IP CURLOPT_MAXAGE_CONN
Introduced in 7.65.0
.IP CURLOPT_MAXCONNECTS
Introduced in 7.7
.IP CURLOPT_MAXFILESIZE
Introduced in 7.10.8
.IP CURLOPT_MAXFILESIZE_LARGE
Introduced in 7.11.0
.IP CURLOPT_MAXREDIRS
1617
1618
1619
1620
1621
1622
1623


1624
1625
1626
1627
1628
1629
1630
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634







+
+







Introduced in 7.62.0
.IP CURLUPART_SCHEME
Introduced in 7.62.0
.IP CURLUPART_URL
Introduced in 7.62.0
.IP CURLUPART_USER
Introduced in 7.62.0
.IP CURLUPART_ZONEID
Introduced in 7.65.0
.IP CURLUSESSL_ALL
Introduced in 7.17.0
.IP CURLUSESSL_CONTROL
Introduced in 7.17.0
.IP CURLUSESSL_NONE
Introduced in 7.17.0
.IP CURLUSESSL_TRY
Changes to jni/curl/docs/libcurl/libcurl-thread.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-thread 3 "October 30, 2018" "libcurl 7.64.1" "libcurl thread safety"
.TH libcurl-thread 3 "October 30, 2018" "libcurl 7.65.0" "libcurl thread safety"

.SH NAME
libcurl-thread \- libcurl thread safety
.SH "Multi-threading with libcurl"
libcurl is thread safe but has no internal thread synchronization. You may have
to provide your own locking should you meet any of the thread safety exceptions
below.
Changes to jni/curl/docs/libcurl/libcurl-tutorial.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH libcurl-tutorial 3 "September 23, 2018" "libcurl 7.64.1" "libcurl programming"
.TH libcurl-tutorial 3 "September 23, 2018" "libcurl 7.65.0" "libcurl programming"

.SH NAME
libcurl-tutorial \- libcurl programming tutorial
.SH "Objective"
This document attempts to describe the general principles and some basic
approaches to consider when programming with libcurl. The text will focus
mainly on the C interface but might apply fairly well on other interfaces as
Changes to jni/curl/docs/libcurl/libcurl-url.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "September 10, 2018" "libcurl 7.64.1" "libcurl url interface"
.TH libcurl 3 "September 10, 2018" "libcurl 7.65.0" "libcurl url interface"

.SH NAME
libcurl-url \- URL interface overview
.SH DESCRIPTION
The URL interface provides a set of functions for parsing and generating URLs.
.SH INCLUDE
You still only include <curl/curl.h> in your code. Note that the URL API was
Changes to jni/curl/docs/libcurl/libcurl.3.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.TH libcurl 3 "July 15, 2017" "libcurl 7.64.1" "libcurl overview"
.TH libcurl 3 "July 15, 2017" "libcurl 7.65.0" "libcurl overview"

.SH NAME
libcurl \- client-side URL transfers
.SH DESCRIPTION
This is a short overview on how to use libcurl in your C programs. There are
specific man pages for each function mentioned in here. There are also the
\fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the
jni/curl/docs/libcurl/mksymbolsmanpage.pl became executable.
Changes to jni/curl/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_ACTIVESOCKET 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_ACTIVESOCKET 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_ACTIVESOCKET \- get the active socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_APPCONNECT_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_APPCONNECT_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_APPCONNECT_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is completed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CERTINFO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CERTINFO 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CERTINFO 3 "November 07, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CERTINFO \- get the TLS certificate chain
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONDITION_UNMET 3 "February 23, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONDITION_UNMET 3 "February 23, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONDITION_UNMET \- get info on unmet time conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONDITION_UNMET, long *unmet);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONNECT_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONNECT_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONNECT_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONNECT_TIME_T \- get the time until connect
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_CONTENT_TYPE 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_CONTENT_TYPE 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_CONTENT_TYPE \- get Content-Type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_COOKIELIST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_COOKIELIST 3 "March 20, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_COOKIELIST 3 "March 20, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_COOKIELIST \- get all known cookies
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_EFFECTIVE_URL 3 "May 04, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_EFFECTIVE_URL 3 "May 04, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_EFFECTIVE_URL \- get the last used URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FILETIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_FILETIME 3 "January 25, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FILETIME_T \- get the remote time of the retrieved document
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_FTP_ENTRY_PATH 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_FTP_ENTRY_PATH 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char **path);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HEADER_SIZE 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_HEADER_SIZE 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HEADER_SIZE \- get size of retrieved headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTPAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_HTTPAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long *authp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_CONNECTCODE 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_HTTP_CONNECTCODE 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_HTTP_VERSION 3 "May 11, 2016" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_HTTP_VERSION 3 "May 11, 2016" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_HTTP_VERSION \- get the http version used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LASTSOCKET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LASTSOCKET 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_LASTSOCKET 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LASTSOCKET \- get the last socket used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_IP.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_IP 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_LOCAL_IP 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_IP \- get local IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_LOCAL_PORT 3 "March 16, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_LOCAL_PORT 3 "March 16, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_LOCAL_PORT \- get the latest local port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_NAMELOOKUP_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NAMELOOKUP_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_NAMELOOKUP_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_NUM_CONNECTS 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_NUM_CONNECTS 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_NUM_CONNECTS \- get number of created connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_OS_ERRNO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_OS_ERRNO 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_OS_ERRNO 3 "November 07, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_OS_ERRNO \- get errno number from last connect failure
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PRETRANSFER_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRETRANSFER_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PRETRANSFER_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_IP 3 "March 22, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PRIMARY_IP 3 "March 22, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_IP \- get IP address of last connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIMARY_PORT 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PRIMARY_PORT 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIMARY_PORT \- get the latest destination port number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PRIVATE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PRIVATE 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PRIVATE 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PRIVATE \- get the private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROTOCOL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROTOCOL 3 "April 27, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PROTOCOL 3 "April 27, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROTOCOL \- get the protocol used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXYAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PROXYAUTH_AVAIL 3 "October 07, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long *authp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_PROXY_SSL_VERIFYRESULT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, long *result);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_COUNT 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_REDIRECT_COUNT 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_COUNT \- get the number of redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long *countp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_REDIRECT_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_REDIRECT_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REDIRECT_URL 3 "June 24, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_REDIRECT_URL 3 "June 24, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_REQUEST_SIZE 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_REQUEST_SIZE 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_REQUEST_SIZE \- get size of sent request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RESPONSE_CODE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_RESPONSE_CODE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RESPONSE_CODE \- get the last response code
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_RTSP_CLIENT_CSEQ 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_CSEQ_RECV 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_RTSP_CSEQ_RECV 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long *cseq);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SCHEME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SCHEME 3 "April 08, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SCHEME 3 "April 08, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SIZE_DOWNLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SIZE_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, curl_off_t *dlp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SIZE_UPLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double *uploadp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SIZE_UPLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SIZE_UPLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, curl_off_t *uploadp);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SPEED_DOWNLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SPEED_DOWNLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_DOWNLOAD_T \- get download speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, curl_off_t *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD 3 "June 15, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SPEED_UPLOAD 3 "June 15, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SPEED_UPLOAD_T 3 "March 31, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SPEED_UPLOAD_T 3 "March 31, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SPEED_UPLOAD_T \- get upload speed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, curl_off_t *speed);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_ENGINES 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SSL_ENGINES 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,
Changes to jni/curl/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_SSL_VERIFYRESULT 3 "March 21, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_SSL_VERIFYRESULT 3 "March 21, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long *result);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_STARTTRANSFER_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_STARTTRANSFER_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_STARTTRANSFER_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SESSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SESSION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_TLS_SESSION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TLS_SSL_PTR 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_TLS_SSL_PTR 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_TOTAL_TIME 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME \- get total time of previous transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);
Changes to jni/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLINFO_TOTAL_TIME_T 3 "May 17, 2018" "libcurl 7.64.1" "curl_easy_getinfo options"
.TH CURLINFO_TOTAL_TIME_T 3 "May 17, 2018" "libcurl 7.65.0" "curl_easy_getinfo options"

.SH NAME
CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, curl_off_t *timep);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3.
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
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







-
+














-
+








+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size);
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.

Pass a long with a \fBsize\fP in bytes. If a pipelined connection is currently
processing a chunked (Transfer-encoding: chunked) request with a current chunk
length larger than \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP, that pipeline
will not be considered for additional requests, even if it is shorter than
\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the penalization is inactive.
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3.
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
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







-
+














-
+








+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size);
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.

Pass a long with a \fBsize\fP in bytes. If a pipelined connection is currently
processing a request with a Content-Length larger than this
\fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline will then not be
considered for additional requests, even if it is shorter than
\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
.SH DEFAULT
The default value is 0, which means that the size penalization is inactive.
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAXCONNECTS 3 "September 23, 2018" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_MAXCONNECTS 3 "September 23, 2018" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAXCONNECTS \- set size of connection cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_MAX_HOST_CONNECTIONS 3 "May 27, 2017" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single host
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, long max);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3.
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
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







-
+














-
+








+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_MAX_PIPELINE_LENGTH 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long max);
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.

Pass a long. The set \fBmax\fP number will be used as the maximum amount of
outstanding requests in an HTTP/1.1 pipelined connection. This option is only
used for HTTP/1.1 pipelining, not for HTTP/2 multiplexing.

When this limit is reached, libcurl will use another connection to the same
host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until
one of the pipelines to the host is ready to accept a request.  Thus, the
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_MAX_TOTAL_CONNECTIONS 3 "May 27, 2017" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING.3.
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
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







-
+














-
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING 3 "March 25, 2019" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_PIPELINING 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);
68
69
70
71
72
73
74
75
76


77
78
79
80


81
82
83
84
85
86
87
88
89
90
68
69
70
71
72
73
74


75
76

77
78

79
80
81
82
83
84
85
86
87
88
89
90







-
-
+
+
-


-
+
+











Before that, default was \fBCURLPIPE_NOTHING\fP.
.SH PROTOCOLS
HTTP(S)
.SH EXAMPLE
.nf
CURLM *m = curl_multi_init();
/* try HTTP/1 pipelining and HTTP/2 multiplexing */
curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_HTTP1 |
/* try HTTP/2 multiplexing */
curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
                                          CURLPIPE_MULTIPLEX);
.fi
.SH AVAILABILITY
Added in 7.16.0. Multiplex support bit added in 7.43.0.
Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining
support was disabled in 7.62.0.
.SH RETURN VALUE
Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
.BR CURLMOPT_MAX_PIPELINE_LENGTH "(3), "
.BR CURLMOPT_PIPELINING_SITE_BL "(3), "
.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE "(3), "
.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE "(3), "
.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
.BR CURLMOPT_MAXCONNECTS "(3), "
.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3.
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
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







-
+














-
+








+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SERVER_BL 3 "September 23, 2018" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_PIPELINING_SERVER_BL 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SERVER_BL \- pipelining server blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, char **servers);
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.

Pass a \fBservers\fP array of char *, ending with a NULL entry. This is a list
of server types prefixes (in the Server: HTTP header) that are blacklisted
from pipelining, i.e server types that are known to not support HTTP
pipelining. The array is copied by libcurl.

Note that the comparison matches if the Server: header begins with the string
in the blacklist, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3.
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
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







-
+














-
+








+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PIPELINING_SITE_BL 3 "February 03, 2016" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_PIPELINING_SITE_BL 3 "April 05, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PIPELINING_SITE_BL \- pipelining host blacklist
.SH SYNOPSIS
#include <curl/curl.h>

CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char **hosts);
.SH DESCRIPTION
No function since pipelining was removed in 7.62.0.

Pass a \fBhosts\fP array of char *, ending with a NULL entry. This is a list
of sites that are blacklisted from pipelining, i.e sites that are known to not
support HTTP pipelining. The array is copied by libcurl.

Pass a NULL pointer to clear the blacklist.
.SH DEFAULT
The default value is NULL, which means that there is no blacklist.
Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHDATA 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_PUSHDATA 3 "May 27, 2017" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHDATA \- pointer to pass to push callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_PUSHFUNCTION 3 "February 03, 2016" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_PUSHFUNCTION 3 "February 03, 2016" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETDATA 3 "May 31, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_SOCKETDATA 3 "May 31, 2017" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_SOCKETFUNCTION 3 "September 23, 2018" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_SOCKETFUNCTION 3 "September 23, 2018" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERDATA 3 "May 27, 2017" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_TIMERDATA 3 "May 27, 2017" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLMOPT_TIMERFUNCTION 3 "February 22, 2019" "libcurl 7.64.1" "curl_multi_setopt options"
.TH CURLMOPT_TIMERFUNCTION 3 "May 03, 2019" "libcurl 7.65.0" "curl_multi_setopt options"

.SH NAME
CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
.SH SYNOPSIS
.nf
#include <curl/curl.h>

51
52
53
54
55
56
57





58
59
60
61
62
63
64
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69







+
+
+
+
+







The \fBtimer_callback\fP will only be called when the timeout expire time is
changed.

The \fBuserp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.

The timer callback should return 0 on success, and -1 on error. This callback
can be used instead of, or in addition to, \fIcurl_multi_timeout(3)\fP.

\fBWARNING:\fP even if it feels tempting, avoid calling libcurl directly from
within the callback itself when the \fBtimeout_ms\fP value is zero, since it
risks triggering an unpleasant recursive behavior that immediately calls
another call to the callback with a zero timeout...
.SH DEFAULT
NULL
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
static gboolean timeout_cb(gpointer user_data)
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "January 09, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ABSTRACT_UNIX_SOCKET 3 "January 09, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 06, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ACCEPTTIMEOUT_MS 3 "March 06, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ACCEPT_ENCODING 3 "August 27, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ACCEPT_ENCODING 3 "August 27, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ACCEPT_ENCODING \- enables automatic decompression of HTTP downloads
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3.
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
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







-
+














-
+


-
+





-
+
-









+

-
-
+
-
-
-
+








+


.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ADDRESS_SCOPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ADDRESS_SCOPE 3 "March 07, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ADDRESS_SCOPE \- set scope for local IPv6 addresses
CURLOPT_ADDRESS_SCOPE \- set scope id for IPv6 addresses
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope);
.SH DESCRIPTION
Pass a long specifying the scope_id value to use when connecting to IPv6
Pass a long specifying the scope id value to use when connecting to IPv6 addresses.
link-local or site-local addresses.
.SH DEFAULT
0
.SH PROTOCOLS
All, when using IPv6
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  CURLcode ret;
  long my_scope_id;
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
  /* 0x2 link-local
     0x5 site-local
  my_scope_id = if_nametoindex("eth0");
     0x8 organization-local
     0xe global ... */
  curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, 0xEL);
  curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
  ret = curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
Added in 7.19.0
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value.
.SH "SEE ALSO"
.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC.3.
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
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







-
+











-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC 3 "March 03, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ALTSVC 3 "April 03, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC \- set alt-svc cache file name
.SH SYNOPSIS
.nf
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename);
.fi
.SH EXPERIMENTAL
Warning: this feature is early code and is marked as experimental. It can only
be enabled by explictly telling configure with \fB--enable-alt-svc\fP. You are
be enabled by explicitly telling configure with \fB--enable-alt-svc\fP. You are
advised to not ship this in production before the experimental label is
removed.
.SH DESCRIPTION
Pass in a pointer to a \fIfilename\fP to instruct libcurl to use that file as
the Alt-Svc cache to read existing cache contents from and possibly also write
it back to a after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in
\fICURLOPT_ALTSVC_CTRL(3)\fP.
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3.
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
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







-
+


















-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ALTSVC_CTRL 3 "March 03, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ALTSVC_CTRL 3 "April 03, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ALTSVC_CTRL \- control alt-svc behavior
.SH SYNOPSIS
.nf
#include <curl/curl.h>

#define CURLALTSVC_IMMEDIATELY  (1<<0)
#define CURLALTSVC_ALTUSED      (1<<1)
#define CURLALTSVC_READONLYFILE (1<<2)
#define CURLALTSVC_H1           (1<<3)
#define CURLALTSVC_H2           (1<<4)
#define CURLALTSVC_H3           (1<<5)

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask);
.fi
.SH EXPERIMENTAL
Warning: this feature is early code and is marked as experimental. It can only
be enabled by explictly telling configure with \fB--enable-alt-svc\fP. You are
be enabled by explicitly telling configure with \fB--enable-alt-svc\fP. You are
advised to not ship this in production before the experimental label is
removed.
.SH DESCRIPTION
Populate the long \fIbitmask\fP with the correct set of features to instruct
libcurl how to handle Alt-Svc for the transfers using this handle.

libcurl will only accept Alt-Svc headers over a secure transport, meaning
Changes to jni/curl/docs/libcurl/opts/CURLOPT_APPEND.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_APPEND 3 "March 06, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_APPEND 3 "March 06, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_APPEND \- enable appending to the remote file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_AUTOREFERER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_AUTOREFERER 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_AUTOREFERER 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_AUTOREFERER \- automatically update the referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_BUFFERSIZE 3 "May 13, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_BUFFERSIZE 3 "May 13, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_BUFFERSIZE \- set preferred receive buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAINFO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAINFO 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CAINFO 3 "May 12, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path);
43
44
45
46
47
48
49
50

51
52
53
54
55
56
57
58
59





60
61
62
63
64
65
66
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







-
+





-
-
-
-
+
+
+
+
+







(libnsspem.so) needs to be available for this option to work properly.
Starting with curl-7.55.0, if both \fICURLOPT_CAINFO(3)\fP and
\fICURLOPT_CAPATH(3)\fP are unset, NSS-linked libcurl tries to load
libnssckbi.so, which contains a more comprehensive set of trust information
than supported by nss-pem, because libnssckbi.so also includes information
about distrusted certificates.

(iOS and macOS only) If curl is built against Secure Transport, then this
(iOS and macOS) If curl is built against Secure Transport, then this
option is supported for backward compatibility with other SSL engines, but it
should not be set. If the option is not set, then curl will use the
certificates in the system and user Keychain to verify the peer, which is the
preferred method of verifying the peer's certificate chain.

(Schannel only) This option is supported for Schannel in Windows 7 or later
with libcurl 7.60 or later. This option is supported for backward
compatibility with other SSL engines; instead it is recommended to use
Windows' store of root certificates (the default for Schannel).
(Schannel) This option is supported for Schannel in Windows 7 or later but we
recommend not using it until Windows 8 since it works better starting then.
Added in libcurl 7.60. This option is supported for backward compatibility
with other SSL engines; instead it is recommended to use Windows' store of
root certificates (the default for Schannel).

The application does not have to keep the string around after setting this
option.
.SH DEFAULT
Built-in system specific
.SH PROTOCOLS
All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CAPATH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CAPATH 3 "September 10, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CAPATH 3 "September 10, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CAPATH \- specify directory holding CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CERTINFO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CERTINFO 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CERTINFO 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CERTINFO \- request SSL certificate information
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3.
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
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







-
+














-
+






+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CHUNK_BGN_FUNCTION 3 "May 03, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>

struct curl_fileinfo {
  char *filename;
  curlfiletype filetype;
  time_t time;   /* always zero! */
  unsigned int perm;
  int uid;
  int gid;
  curl_off_t size;
  long int hardlinks;

  struct {
    /* If some of these fields is not NULL, it is a pointer to b_data. */
    char *time;
    char *perm;
    char *user;
    char *group;
    char *target; /* pointer to the target filename of a symlink */
  } strings;

  unsigned int flags;

  /* used internally */
  char *b_data;
  size_t b_size;
  size_t b_used;
};

long chunk_bgn_callback(const void *transfer_info, void *ptr,
                        int remains);

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_BGN_FUNCTION,
                          chunk_bgn_callback);
.SH DESCRIPTION
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_DATA 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CHUNK_DATA 3 "November 07, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CHUNK_END_FUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CHUNK_END_FUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETDATA 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CLOSESOCKETDATA 3 "November 07, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CLOSESOCKETFUNCTION 3 "November 07, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CLOSESOCKETFUNCTION 3 "November 07, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement function
.SH SYNOPSIS
#include <curl/curl.h>

int closesocket_callback(void *clientp, curl_socket_t item);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT 3 "October 03, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONNECTTIMEOUT 3 "October 03, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECTTIMEOUT_MS 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONNECTTIMEOUT_MS 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_ONLY 3 "February 18, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONNECT_ONLY 3 "February 18, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_ONLY \- stop when connected to target server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONNECT_TO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONNECT_TO 3 "May 05, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONNECT_TO 3 "May 05, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONNECT_TO \- Connect to a specific host and port instead of the URL's host and port
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONV_FROM_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONV_FROM_UTF8_FUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CONV_TO_NETWORK_FUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIE 3 "December 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COOKIE 3 "December 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIE \- set contents of HTTP Cookie header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEFILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEFILE 3 "March 13, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COOKIEFILE 3 "March 13, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEFILE \- file name to read cookies from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIEJAR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIEJAR 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COOKIEJAR 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIEJAR \- file name to store cookies to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIELIST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIELIST 3 "April 26, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COOKIELIST 3 "April 26, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_COOKIESESSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COOKIESESSION 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COOKIESESSION 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COOKIESESSION \- start a new cookie session
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_COPYPOSTFIELDS 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_COPYPOSTFIELDS 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLF.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLF 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CRLF 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLF \- enable/disable CRLF conversion
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CRLFILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CRLFILE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CRLFILE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CRLFILE \- specify a Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CURLU.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CURLU 3 "January 16, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CURLU 3 "January 16, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CURLU \- set URL with CURLU *
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_CUSTOMREQUEST 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_CUSTOMREQUEST 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_CUSTOMREQUEST \- custom string for request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGDATA 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DEBUGDATA 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGDATA \- custom pointer for debug callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEBUGFUNCTION 3 "October 06, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DEBUGFUNCTION 3 "October 06, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEBUGFUNCTION \- debug callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DEFAULT_PROTOCOL 3 "December 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DEFAULT_PROTOCOL 3 "December 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
scheme name
.SH SYNOPSIS
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DIRLISTONLY 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DIRLISTONLY 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DIRLISTONLY \- ask for names only in a directory listing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "February 25, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DISALLOW_USERNAME_IN_URL 3 "February 25, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the url
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, long disallow);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 09, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_CACHE_TIMEOUT 3 "December 09, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_CACHE_TIMEOUT \- set life-time for DNS cache entries
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_INTERFACE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_INTERFACE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_INTERFACE \- set interface to speak DNS over
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP4 3 "December 10, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_LOCAL_IP4 3 "December 10, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_LOCAL_IP6 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_LOCAL_IP6 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SERVERS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_SERVERS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SERVERS \- set preferred DNS servers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "March 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_SHUFFLE_ADDRESSES 3 "March 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns more than one
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3.
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
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







-
+














-
+









+
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DNS_USE_GLOBAL_CACHE 3 "March 07, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,
                          long enable);
.SH DESCRIPTION
Has no function since 7.62.0. Do note use!

Pass a long. If the \fIenable\fP value is 1, it tells curl to use a global DNS
cache that will survive between easy handle creations and deletions. This is
not thread-safe and this will use a global variable.

\fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over
to using the share interface instead! See \fICURLOPT_SHARE(3)\fP and
\fIcurl_share_init(3)\fP.
50
51
52
53
54
55
56
57

58
59
60
61
52
53
54
55
56
57
58

59
60
61
62
63







-
+




  /* switch off the use of a global, thread unsafe, cache */
  curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L);
  ret = curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}
.fi
.SH AVAILABILITY
Subject for removal in the future. Do not use!
Deprecated since 7.62.0. Has no function.
.SH RETURN VALUE
Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
.SH "SEE ALSO"
.BR CURLOPT_SHARE "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_DOH_URL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_DOH_URL 3 "September 06, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_DOH_URL 3 "September 06, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EGDSOCKET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EGDSOCKET 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_EGDSOCKET 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EGDSOCKET \- set EGD socket path
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ERRORBUFFER 3 "March 13, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ERRORBUFFER 3 "March 13, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ERRORBUFFER \- set error buffer for error messages
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_EXPECT_100_TIMEOUT_MS 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FAILONERROR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FAILONERROR 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FAILONERROR 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FAILONERROR \- request failure on HTTP response >= 400
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FILETIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FILETIME 3 "April 03, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FILETIME 3 "April 03, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FILETIME \- get the modification time of the remote resource
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_DATA 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FNMATCH_DATA 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FNMATCH_FUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FNMATCH_FUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FOLLOWLOCATION 3 "May 02, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FOLLOWLOCATION 3 "May 02, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FORBID_REUSE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FORBID_REUSE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FORBID_REUSE \- make connection get closed at once after use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FRESH_CONNECT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FRESH_CONNECT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FRESH_CONNECT \- force a new connection to be used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPPORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPPORT 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTPPORT 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPPORT \- make FTP transfer active
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTPSSLAUTH 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTPSSLAUTH 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTPSSLAUTH \- set order in which to attempt TLS vs SSL when using FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ACCOUNT 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_ACCOUNT 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ACCOUNT \- set account info for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_ALTERNATIVE_TO_USER 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_CREATE_MISSING_DIRS 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_FILEMETHOD 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_FILEMETHOD 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_RESPONSE_TIMEOUT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_RESPONSE_TIMEOUT 3 "October 03, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_RESPONSE_TIMEOUT 3 "October 03, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_RESPONSE_TIMEOUT \- time allowed to wait for FTP response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_SKIP_PASV_IP 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_SSL_CCC 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_SSL_CCC 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPRT 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_USE_EPRT 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPRT \- enable/disable use of EPRT with FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_EPSV 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_USE_EPSV 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_EPSV \- enable/disable use of EPSV
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_FTP_USE_PRET 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_FTP_USE_PRET 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_FTP_USE_PRET \- enable the PRET command
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_GSSAPI_DELEGATION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_GSSAPI_DELEGATION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_GSSAPI_DELEGATION \- set allowed GSS-API delegation
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "February 21, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "February 21, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for ipv6 for happy eyeballs
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HAPROXYPROTOCOL 3 "May 18, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HAPROXYPROTOCOL 3 "May 18, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADER 3 "October 03, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HEADER 3 "October 03, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADER \- pass headers to the data stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERDATA 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HEADERDATA 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERDATA \- pointer to pass to header callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADERFUNCTION 3 "November 22, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HEADERFUNCTION 3 "November 22, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADERFUNCTION \- callback that receives header data
.SH SYNOPSIS
#include <curl/curl.h>

size_t header_callback(char *buffer,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HEADEROPT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HEADEROPT 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HEADEROPT 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HEADEROPT \- set how to send HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP09_ALLOWED 3 "December 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTP09_ALLOWED 3 "December 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP09 \- allow HTTP/0.9 response
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP09_ALLOWED, long allowed);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP200ALIASES 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTP200ALIASES 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPAUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPAUTH 3 "June 15, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTPAUTH 3 "June 15, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPGET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPGET 3 "May 21, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTPGET 3 "May 21, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPGET \- ask for an HTTP GET request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPHEADER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPHEADER 3 "December 30, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTPHEADER 3 "December 30, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPHEADER \- set custom HTTP headers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist *headers);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPOST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPOST 3 "September 02, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTPPOST 3 "September 02, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPOST \- specify the multipart formpost content
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTPPROXYTUNNEL 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTPPROXYTUNNEL 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTP_CONTENT_DECODING 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTP_TRANSFER_DECODING 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_HTTP_VERSION 3 "December 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_HTTP_VERSION 3 "December 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_IGNORE_CONTENT_LENGTH 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_INFILESIZE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE \- set size of the input file to send off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INFILESIZE_LARGE 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_INFILESIZE_LARGE 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERFACE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERFACE 3 "June 18, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_INTERFACE 3 "June 18, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERFACE \- source interface for outgoing traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEDATA 3 "September 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_INTERLEAVEDATA 3 "September 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEDATA \- custom pointer passed to RTSP interleave callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_INTERLEAVEFUNCTION 3 "August 11, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_INTERLEAVEFUNCTION 3 "August 11, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLDATA 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_IOCTLDATA 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLDATA \- custom pointer passed to I/O callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IOCTLFUNCTION 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_IOCTLFUNCTION 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IOCTLFUNCTION \- callback for I/O operations
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_IPRESOLVE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_IPRESOLVE 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_IPRESOLVE 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_IPRESOLVE \- specify which IP protocol version to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_ISSUERCERT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_ISSUERCERT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_ISSUERCERT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_ISSUERCERT \- issuer SSL certificate filename
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_KEEP_SENDING_ON_ERROR 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KEYPASSWD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KEYPASSWD 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_KEYPASSWD 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KEYPASSWD \- set passphrase to private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_KRBLEVEL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_KRBLEVEL 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_KRBLEVEL 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_KRBLEVEL \- set FTP kerberos security level
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORT 3 "January 31, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_LOCALPORT 3 "January 31, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORT \- set local port number to use for socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOCALPORTRANGE 3 "January 31, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_LOCALPORTRANGE 3 "January 31, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOCALPORTRANGE \- number of additional local ports to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOGIN_OPTIONS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_LOGIN_OPTIONS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOGIN_OPTIONS \- set login options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_LIMIT 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_LOW_SPEED_LIMIT 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_LIMIT \- set low speed limit in bytes per second
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long speedlimit);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_LOW_SPEED_TIME 3 "May 06, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_LOW_SPEED_TIME 3 "May 06, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_LOW_SPEED_TIME \- set low speed limit time period
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long speedtime);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_AUTH 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAIL_AUTH 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_AUTH \- SMTP authentication address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_FROM.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_FROM 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAIL_FROM 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_FROM \- SMTP sender address
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAIL_RCPT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAIL_RCPT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Added jni/curl/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3.


































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXAGE_CONN 3 "April 14, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long maxage);
.SH DESCRIPTION
Pass a long as parameter containing \fImaxage\fP - the maximum time in seconds
that you allow an existing connection to have to be considered for reuse for
this request.

The "connection cache" that holds previously used connections. When a new
request is to be done, it will consider any connection that matches for
reuse. The \fICURLOPT_MAXAGE_CONN(3)\fP limit prevents libcurl from trying
very old connections for reuse, since old connections have a high risk of not
working and thus trying them is a performance loss and sometimes service loss
due to the difficulties to figure out the situation. If a connection is found
in the cache that is older than this set \fImaxage\fP, it will instead be
closed.
.SH DEFAULT
Default maxage is 118 seconds.
.SH PROTOCOLS
All
.SH EXAMPLE
.nf
CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com");

  /* only allow 30 seconds idle time */
  curl_easy_setopt(curl, CURLOPT_MAXAGE_CONN, 30L);

  curl_easy_perform(curl);
}
.fi
.SH AVAILABILITY
Added in libcurl 7.65.0
.SH RETURN VALUE
Returns CURLE_OK.
.SH "SEE ALSO"
.BR CURLOPT_TIMEOUT "(3), " CURLOPT_FORBID_REUSE "(3), "
.BR CURLOPT_FRESH_CONNECT "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXCONNECTS 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAXCONNECTS 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXCONNECTS \- maximum connection cache size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAXFILESIZE 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE \- maximum file size allowed to download
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXFILESIZE_LARGE 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAXFILESIZE_LARGE 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAXREDIRS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAXREDIRS 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAXREDIRS 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAXREDIRS \- maximum number of redirects allowed
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAX_RECV_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MAX_SEND_SPEED_LARGE 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_MIMEPOST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_MIMEPOST 3 "September 04, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_MIMEPOST 3 "September 04, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_MIMEPOST \- set post/send data from mime structure
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC 3 "November 03, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NETRC 3 "November 03, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC \- request that .netrc is used
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NETRC_FILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NETRC_FILE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NETRC_FILE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NETRC_FILE \- file name to read .netrc info from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NEW_DIRECTORY_PERMS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NEW_FILE_PERMS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NEW_FILE_PERMS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOBODY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOBODY 3 "June 21, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NOBODY 3 "June 21, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOBODY \- do the download request without getting the body
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROGRESS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROGRESS 3 "October 09, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NOPROGRESS 3 "October 09, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROGRESS \- switch off the progress meter
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOPROXY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOPROXY 3 "August 24, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NOPROXY 3 "August 24, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOPROXY \- disable proxy use for specific hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_NOSIGNAL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_NOSIGNAL 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_NOSIGNAL 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_NOSIGNAL \- skip all signal handling
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETDATA 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_OPENSOCKETDATA 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETDATA \- custom pointer passed to open socket callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_OPENSOCKETFUNCTION 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_OPENSOCKETFUNCTION 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PASSWORD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PASSWORD 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PASSWORD 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PASSWORD \- password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PATH_AS_IS 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PATH_AS_IS 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PINNEDPUBLICKEY 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PINNEDPUBLICKEY 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PINNEDPUBLICKEY \- set pinned public key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char *pinnedpubkey);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PIPEWAIT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PIPEWAIT 3 "May 01, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PIPEWAIT 3 "May 01, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PORT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PORT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PORT \- set remote port number to work with
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POST 3 "May 21, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POST 3 "May 21, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POST \- request an HTTP POST
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDS 3 "May 21, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POSTFIELDS 3 "May 21, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDS \- specify data to POST to server
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POSTFIELDSIZE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POSTFIELDSIZE_LARGE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTQUOTE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTQUOTE 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POSTQUOTE 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist *cmds);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_POSTREDIR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_POSTREDIR 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_POSTREDIR 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PREQUOTE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PREQUOTE 3 "June 18, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PREQUOTE 3 "June 18, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PREQUOTE \- commands to run before an FTP transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRE_PROXY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRE_PROXY 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PRE_PROXY 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRE_PROXY \- set pre-proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PRIVATE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PRIVATE 3 "December 08, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PRIVATE 3 "December 08, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PRIVATE \- store a private pointer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSDATA 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROGRESSDATA 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSDATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROGRESSFUNCTION 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROGRESSFUNCTION 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROGRESSFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROTOCOLS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROTOCOLS 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROTOCOLS 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROTOCOLS \- set allowed protocols
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY 3 "August 24, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY 3 "August 24, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY \- set proxy to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYAUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYAUTH 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYAUTH 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYAUTH \- set HTTP proxy authentication methods to try
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYHEADER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYHEADER 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYHEADER 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPASSWORD 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYPASSWORD 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPASSWORD \- password to use with proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYPORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYPORT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYPORT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYPORT \- port number the proxy listens on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYTYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYTYPE 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYTYPE 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYTYPE \- proxy protocol type
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERNAME 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYUSERNAME 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXYUSERPWD 3 "May 30, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXYUSERPWD 3 "May 30, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAINFO 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_CAINFO 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CAPATH 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_CAPATH 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_CRLFILE 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_CRLFILE 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_KEYPASSWD 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_KEYPASSWD 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_PINNEDPUBLICKEY 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_PINNEDPUBLICKEY, char *pinnedpubkey);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERT 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSLCERT 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLCERTTYPE 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSLCERTTYPE 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEY 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSLKEY 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLKEYTYPE 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSLKEYTYPE 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSLVERSION 3 "October 30, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSLVERSION 3 "October 30, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_OPTIONS 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSL_OPTIONS 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "May 02, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSL_VERIFYHOST 3 "May 02, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 16, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_SSL_VERIFYPEER 3 "December 16, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "October 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_TLS13_CIPHERS 3 "October 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char *user);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PROXY_TRANSFER_MODE 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PROXY_TRANSFER_MODE 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long enabled);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_PUT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_PUT 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_PUT 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_PUT \- make an HTTP PUT request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_QUOTE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_QUOTE 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_QUOTE 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_QUOTE \- (S)FTP commands to run before transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist *cmds);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANDOM_FILE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RANDOM_FILE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANDOM_FILE \- specify a source for random data
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RANGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RANGE 3 "December 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RANGE 3 "December 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RANGE \- set byte range to request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READDATA 3 "August 11, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_READDATA 3 "August 11, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READDATA \- custom pointer passed to the read callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_READFUNCTION.3.
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
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







-
+














-
+







.\" **************************************************************************
.\" *                                  _   _ ____  _
.\" *  Project                     ___| | | |  _ \| |
.\" *                             / __| | | | |_) | |
.\" *                            | (__| |_| |  _ <| |___
.\" *                             \___|\___/|_| \_\_____|
.\" *
.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
.\" *
.\" * This software is licensed as described in the file COPYING, which
.\" * you should have received as part of this distribution. The terms
.\" * are also available at https://curl.haxx.se/docs/copyright.html.
.\" *
.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell
.\" * copies of the Software, and permit persons to whom the Software is
.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_READFUNCTION 3 "August 11, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_READFUNCTION 3 "May 15, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_READFUNCTION \- read callback for data uploads
.SH SYNOPSIS
#include <curl/curl.h>

size_t read_callback(char *buffer, size_t size, size_t nitems, void *userdata);
76
77
78
79
80
81
82

76
77
78
79
80
81
82
83







+
CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT
was added in 7.12.1.
.SH RETURN VALUE
This will return CURLE_OK.
.SH "SEE ALSO"
.BR CURLOPT_READDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
.BR CURLOPT_SEEKFUNCTION "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
.BR CURLOPT_UPLOAD_BUFFERSIZE "(3), "
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REDIR_PROTOCOLS 3 "September 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_REDIR_PROTOCOLS 3 "September 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REDIR_PROTOCOLS \- set protocols allowed to redirect to
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_PROTOCOLS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REFERER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REFERER 3 "December 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_REFERER 3 "December 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REFERER \- set the HTTP referer header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_REQUEST_TARGET 3 "June 21, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_REQUEST_TARGET 3 "June 21, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_REQUEST_TARGET \- specify an alternative target for this request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVE 3 "May 30, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RESOLVE 3 "May 30, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVE \- provide custom host name to IP address resolves
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_DATA 3 "February 14, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RESOLVER_START_DATA 3 "February 14, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_DATA \- custom pointer passed to the resolver start callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESOLVER_START_FUNCTION 3 "February 14, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RESOLVER_START_FUNCTION 3 "February 14, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESOLVER_START_FUNCTION \- set callback to be called before a new resolve request is started
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RESUME_FROM 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM \- set a point to resume transfer from
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RESUME_FROM_LARGE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RESUME_FROM_LARGE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_CLIENT_CSEQ 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_CLIENT_CSEQ \- set the RTSP client CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_REQUEST 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_REQUEST 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_REQUEST \- specify RTSP request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_SERVER_CSEQ 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SERVER_CSEQ \- set the RTSP server CSEQ number
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_SESSION_ID 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_SESSION_ID \- set RTSP session ID
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_STREAM_URI 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_STREAM_URI 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_STREAM_URI \- set RTSP stream URI
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_RTSP_TRANSPORT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_RTSP_TRANSPORT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SASL_IR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SASL_IR 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SASL_IR 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SASL_IR \- enable sending initial response in first packet
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKDATA 3 "August 12, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SEEKDATA 3 "August 12, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKDATA \- custom pointer passed to the seek callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SEEKFUNCTION 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SEEKFUNCTION 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SERVICE_NAME 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SERVICE_NAME \- authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SHARE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SHARE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SHARE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SHARE \- specify share handle to use
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTDATA 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SOCKOPTDATA 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTDATA \- custom pointer to pass to sockopt callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKOPTFUNCTION 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SOCKOPTFUNCTION 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_AUTH 3 "April 27, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SOCKS5_AUTH 3 "April 27, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_AUTH \- set allowed methods for SOCKS5 proxy authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_AUTH, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SOCKS5_GSSAPI_NEC 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_NEC \- set socks proxy gssapi negotiation protection
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SOCKS5_GSSAPI_SERVICE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char *name);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_AUTH_TYPES 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_AUTH_TYPES 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_AUTH_TYPES \- set desired auth types for SFTP and SCP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_COMPRESSION 3 "August 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_COMPRESSION 3 "August 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_COMPRESSION \- enables compression / decompression of SSH traffic
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_COMPRESSION, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYDATA 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_KEYDATA 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYDATA \- pointer to pass to the SSH key callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KEYFUNCTION 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_KEYFUNCTION 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_KNOWNHOSTS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_KNOWNHOSTS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_PRIVATE_KEYFILE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSH_PUBLIC_KEYFILE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERT 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLCERT 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERT \- set SSL client certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLCERTTYPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLCERTTYPE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLCERTTYPE \- specify type of the client SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLENGINE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE \- set SSL engine identifier
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLENGINE_DEFAULT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLENGINE_DEFAULT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEY 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLKEY 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEY \- specify private keyfile for TLS and SSL client cert
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLKEYTYPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLKEYTYPE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLKEYTYPE \- set type of the private key file
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSLVERSION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSLVERSION 3 "October 30, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSLVERSION 3 "October 30, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSLVERSION \- set preferred TLS/SSL version
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_CIPHER_LIST 3 "October 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CIPHER_LIST \- specify ciphers to use for TLS
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_DATA 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_CTX_DATA 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_DATA \- custom pointer passed to ssl_ctx callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_CTX_FUNCTION 3 "August 29, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_CTX_FUNCTION 3 "August 29, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL/CyaSSL or mbedTLS
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_ALPN 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_ENABLE_ALPN 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_ALPN \- enable ALPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_ENABLE_NPN 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_ENABLE_NPN 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_ENABLE_NPN \- enable NPN
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_FALSESTART 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_FALSESTART 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_FALSESTART \- enable TLS false start
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_OPTIONS 3 "January 29, 2019" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_OPTIONS 3 "January 29, 2019" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_OPTIONS \- set SSL behavior options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_SESSIONID_CACHE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYHOST 3 "February 02, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_VERIFYHOST 3 "February 02, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYPEER 3 "June 24, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_VERIFYPEER 3 "June 24, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SSL_VERIFYSTATUS 3 "October 09, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SSL_VERIFYSTATUS 3 "October 09, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long verify);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STDERR.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STDERR 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_STDERR 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STDERR \- redirect stderr to another stream
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_STREAM_DEPENDS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, CURL *dephandle);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_DEPENDS_E 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_STREAM_DEPENDS_E 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on exclusively
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL *dephandle);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_STREAM_WEIGHT 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_STREAM_WEIGHT 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_STREAM_WEIGHT \- set numerical stream weight
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "April 28, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_SUPPRESS_CONNECT_HEADERS 3 "April 28, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers from user callbacks
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_FASTOPEN 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TCP_FASTOPEN 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_FASTOPEN \- enable TCP Fast Open
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPALIVE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TCP_KEEPALIVE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPALIVE \- enable TCP keep-alive probing
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPIDLE 3 "January 02, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TCP_KEEPIDLE 3 "January 02, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPIDLE \- set TCP keep-alive idle time wait
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_KEEPINTVL 3 "January 02, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TCP_KEEPINTVL 3 "January 02, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_KEEPINTVL \- set TCP keep-alive interval
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TCP_NODELAY 3 "January 15, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TCP_NODELAY 3 "January 15, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TCP_NODELAY \- set the TCP_NODELAY option
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TELNETOPTIONS 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TELNETOPTIONS 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TELNETOPTIONS \- custom telnet options
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_BLKSIZE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TFTP_BLKSIZE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_BLKSIZE \- TFTP block size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TFTP_NO_OPTIONS 3 "April 06, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TFTP_NO_OPTIONS 3 "April 06, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests.
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMECONDITION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMECONDITION 3 "April 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TIMECONDITION 3 "April 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMECONDITION \- select condition for a time request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT 3 "October 03, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TIMEOUT 3 "October 03, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEOUT_MS 3 "September 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TIMEOUT_MS 3 "September 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEOUT_MS \- set maximum time the request is allowed to take
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE 3 "January 25, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TIMEVALUE 3 "January 25, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TIMEVALUE_LARGE 3 "January 25, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TIMEVALUE_LARGE 3 "January 25, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TIMEVALUE_LARGE \- set time value for conditional
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE, curl_off_t val);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLS13_CIPHERS 3 "October 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TLS13_CIPHERS 3 "October 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLS13_CIPHERS \- specify ciphers suites to use for TLS 1.3
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLS13_CIPHERS, char *list);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TLSAUTH_PASSWORD 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TLSAUTH_TYPE 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TLSAUTH_USERNAME 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERDATA 3 "December 14, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TRAILERDATA 3 "December 14, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME:
CURLOPT_TRAILERDATA \- Custom pointer passed to the trailing headers callback
.SH SYNOPSIS:
#include <curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERDATA, void *userdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRAILERFUNCTION 3 "December 14, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TRAILERFUNCTION 3 "December 14, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME:
CURLOPT_TRAILERFUNCTION \- Set callback for sending trailing headers
.SH SYNOPSIS:
#include <curl.h>

int curl_trailer_callback(struct curl_slist ** list, void *userdata);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFERTEXT 3 "May 31, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TRANSFERTEXT 3 "May 31, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_TRANSFER_ENCODING 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_TRANSFER_ENCODING 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long enable);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNIX_SOCKET_PATH 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_UNIX_SOCKET_PATH 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UNRESTRICTED_AUTH 3 "May 15, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_UNRESTRICTED_AUTH 3 "May 15, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD 3 "April 17, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_UPLOAD 3 "April 17, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD \- enable data upload
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "August 18, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_UPLOAD_BUFFERSIZE 3 "August 18, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_UPLOAD_BUFFERSIZE \- set preferred upload buffer size
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_URL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_URL 3 "November 11, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_URL 3 "November 11, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_URL \- provide the URL to use in the request
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERAGENT.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERAGENT 3 "December 21, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_USERAGENT 3 "December 21, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERAGENT \- set HTTP user-agent header
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERNAME.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERNAME 3 "May 05, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_USERNAME 3 "May 05, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERNAME \- user name to use in authentication
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_USERPWD.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USERPWD 3 "August 24, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_USERPWD 3 "August 24, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USERPWD \- user name and password to use in authentication
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_USE_SSL.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_USE_SSL 3 "October 10, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_USE_SSL 3 "October 10, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_USE_SSL \- request using SSL / TLS for the transfer
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_VERBOSE.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_VERBOSE 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_VERBOSE 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_VERBOSE \- set verbose mode on/off
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WILDCARDMATCH 3 "May 18, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_WILDCARDMATCH 3 "May 18, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEDATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEDATA 3 "August 11, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_WRITEDATA 3 "August 11, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEDATA \- custom pointer passed to the write callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_WRITEFUNCTION 3 "November 23, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_WRITEFUNCTION 3 "November 23, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_WRITEFUNCTION \- set callback for writing received data
.SH SYNOPSIS
.nf
#include <curl/curl.h>

Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFODATA.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFODATA 3 "October 09, 2017" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_XFERINFODATA 3 "October 09, 2017" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFODATA \- custom pointer passed to the progress callback
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, void *pointer);
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XFERINFOFUNCTION 3 "February 03, 2016" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_XFERINFOFUNCTION 3 "February 03, 2016" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XFERINFOFUNCTION \- callback to progress meter function
.SH SYNOPSIS
#include <curl/curl.h>

int progress_callback(void *clientp,
Changes to jni/curl/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH CURLOPT_XOAUTH2_BEARER 3 "May 22, 2018" "libcurl 7.64.1" "curl_easy_setopt options"
.TH CURLOPT_XOAUTH2_BEARER 3 "May 22, 2018" "libcurl 7.65.0" "curl_easy_setopt options"

.SH NAME
CURLOPT_XOAUTH2_BEARER \- specify OAuth 2.0 access token
.SH SYNOPSIS
#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token);
Changes to jni/curl/docs/libcurl/opts/Makefile.in.
578
579
580
581
582
583
584

585
586
587
588
589
590
591
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592







+







  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \
  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \
  CURLOPT_MIMEPOST.3                            \
Changes to jni/curl/docs/libcurl/opts/Makefile.inc.
185
186
187
188
189
190
191

192
193
194
195
196
197
198
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199







+







  CURLOPT_LOCALPORTRANGE.3                      \
  CURLOPT_LOGIN_OPTIONS.3                       \
  CURLOPT_LOW_SPEED_LIMIT.3                     \
  CURLOPT_LOW_SPEED_TIME.3                      \
  CURLOPT_MAIL_AUTH.3                           \
  CURLOPT_MAIL_FROM.3                           \
  CURLOPT_MAIL_RCPT.3                           \
  CURLOPT_MAXAGE_CONN.3                         \
  CURLOPT_MAXCONNECTS.3                         \
  CURLOPT_MAXFILESIZE.3                         \
  CURLOPT_MAXFILESIZE_LARGE.3                   \
  CURLOPT_MAXREDIRS.3                           \
  CURLOPT_MAX_RECV_SPEED_LARGE.3                \
  CURLOPT_MAX_SEND_SPEED_LARGE.3                \
  CURLOPT_MIMEPOST.3                            \
Changes to jni/curl/docs/libcurl/symbols-in-versions.
459
460
461
462
463
464
465

466
467
468
469
470
471
472
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473







+







CURLOPT_LOCALPORTRANGE          7.15.2
CURLOPT_LOGIN_OPTIONS           7.34.0
CURLOPT_LOW_SPEED_LIMIT         7.1
CURLOPT_LOW_SPEED_TIME          7.1
CURLOPT_MAIL_AUTH               7.25.0
CURLOPT_MAIL_FROM               7.20.0
CURLOPT_MAIL_RCPT               7.20.0
CURLOPT_MAXAGE_CONN             7.65.0
CURLOPT_MAXCONNECTS             7.7
CURLOPT_MAXFILESIZE             7.10.8
CURLOPT_MAXFILESIZE_LARGE       7.11.0
CURLOPT_MAXREDIRS               7.5
CURLOPT_MAX_RECV_SPEED_LARGE    7.15.5
CURLOPT_MAX_SEND_SPEED_LARGE    7.15.5
CURLOPT_MIMEPOST                7.56.0
759
760
761
762
763
764
765

766
767
768
769
770
771
772
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774







+







CURLUPART_PASSWORD              7.62.0
CURLUPART_PATH                  7.62.0
CURLUPART_PORT                  7.62.0
CURLUPART_QUERY                 7.62.0
CURLUPART_SCHEME                7.62.0
CURLUPART_URL                   7.62.0
CURLUPART_USER                  7.62.0
CURLUPART_ZONEID                7.65.0
CURLUSESSL_ALL                  7.17.0
CURLUSESSL_CONTROL              7.17.0
CURLUSESSL_NONE                 7.17.0
CURLUSESSL_TRY                  7.17.0
CURLU_APPENDQUERY               7.62.0
CURLU_DEFAULT_PORT              7.62.0
CURLU_DEFAULT_SCHEME            7.62.0
Changes to jni/curl/include/curl/Makefile.in.
423
424
425
426
427
428
429
430

431
432

433
434
435
436
437
438
439
423
424
425
426
427
428
429

430
431

432
433
434
435
436
437
438
439







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/curl/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/curl/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu include/curl/Makefile
	  $(AUTOMAKE) --foreign include/curl/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/include/curl/curl.h.
110
111
112
113
114
115
116
117

118
119
120
121
122
123
124
110
111
112
113
114
115
116

117
118
119
120
121
122
123
124







-
+








/*
 * libcurl external API function linkage decorations.
 */

#ifdef CURL_STATICLIB
#  define CURL_EXTERN
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__) || \
#elif defined(WIN32) || defined(__SYMBIAN32__) || \
     (__has_declspec_attribute(dllexport) && \
      __has_declspec_attribute(dllimport))
#  if defined(BUILDING_LIBCURL)
#    define CURL_EXTERN  __declspec(dllexport)
#  else
#    define CURL_EXTERN  __declspec(dllimport)
#  endif
286
287
288
289
290
291
292
293

294
295
296
297
298
299
300
286
287
288
289
290
291
292

293
294
295
296
297
298
299
300







-
+







/* Content of this structure depends on information which is known and is
   achievable (e.g. by FTP LIST parsing). Please see the url_easy_setopt(3) man
   page for callbacks returning this structure -- some fields are mandatory,
   some others are optional. The FLAG field has special meaning. */
struct curl_fileinfo {
  char *filename;
  curlfiletype filetype;
  time_t time;
  time_t time; /* always zero! */
  unsigned int perm;
  int uid;
  int gid;
  curl_off_t size;
  long int hardlinks;

  struct {
1913
1914
1915
1916
1917
1918
1919



1920
1921
1922
1923
1924
1925
1926
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929







+
+
+







  CINIT(HTTP09_ALLOWED, LONG, 285),

  /* alt-svc control bitmask */
  CINIT(ALTSVC_CTRL, LONG, 286),

  /* alt-svc cache file name to possibly read from/write to */
  CINIT(ALTSVC, STRINGPOINT, 287),

  /* maximum age of a connection to consider it for reuse (in seconds) */
  CINIT(MAXAGE_CONN, LONG, 288),

  CURLOPT_LASTENTRY /* the last unused */
} CURLoption;

#ifndef CURL_NO_OLDIES /* define this to test if your app builds with all
                          the obsolete stuff removed! */

Changes to jni/curl/include/curl/curlver.h.
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
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







-
+




-
-
+
+




















-
+










-
+

-
+




   a script at release-time. This was made its own header file in 7.11.2 */

/* This is the global package copyright */
#define LIBCURL_COPYRIGHT "1996 - 2019 Daniel Stenberg, <daniel@haxx.se>."

/* This is the version number of the libcurl package from which this header
   file origins: */
#define LIBCURL_VERSION "7.64.1"
#define LIBCURL_VERSION "7.65.0"

/* The numeric version number is also available "in parts" by using these
   defines: */
#define LIBCURL_VERSION_MAJOR 7
#define LIBCURL_VERSION_MINOR 64
#define LIBCURL_VERSION_PATCH 1
#define LIBCURL_VERSION_MINOR 65
#define LIBCURL_VERSION_PATCH 0

/* This is the numeric version of the libcurl version number, meant for easier
   parsing and comparions by programs. The LIBCURL_VERSION_NUM define will
   always follow this syntax:

         0xXXYYZZ

   Where XX, YY and ZZ are the main version, release and patch numbers in
   hexadecimal (using 8 bits each). All three numbers are always represented
   using two digits.  1.2 would appear as "0x010200" while version 9.11.7
   appears as "0x090b07".

   This 6-digit (24 bits) hexadecimal number does not show pre-release number,
   and it is always a greater number in a more recent release. It makes
   comparisons with greater than and less than work.

   Note: This define is the full hex number and _does not_ use the
   CURL_VERSION_BITS() macro since curl's own configure script greps for it
   and needs it to contain the full number.
*/
#define LIBCURL_VERSION_NUM 0x074001
#define LIBCURL_VERSION_NUM 0x074100

/*
 * This is the date and time when the full source package was created. The
 * timestamp is not stored in git, as the timestamp is properly set in the
 * tarballs by the maketgz script.
 *
 * The format of the date follows this template:
 *
 * "2007-11-23"
 */
#define LIBCURL_TIMESTAMP "2019-03-27"
#define LIBCURL_TIMESTAMP "2019-05-22"

#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|z)
#define CURL_VERSION_BITS(x,y,z) ((x)<<16|(y)<<8|(z))
#define CURL_AT_LEAST_VERSION(x,y,z) \
  (LIBCURL_VERSION_NUM >= CURL_VERSION_BITS(x, y, z))

#endif /* __CURL_CURLVER_H */
Changes to jni/curl/include/curl/typecheck-gcc.h.
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
109
110
111
112
113
114
115

116
117
118
119
120
121
122







-







      if(!_curl_is_ptr((value), CURLSH))                                      \
        _curl_easy_setopt_err_CURLSH();                                       \
  }                                                                           \
  curl_easy_setopt(handle, _curl_opt, value);                                 \
})

/* wraps curl_easy_getinfo() with typechecking */
/* FIXME: don't allow const pointers */
#define curl_easy_getinfo(handle, info, arg)                                  \
__extension__ ({                                                              \
  __typeof__(info) _curl_info = info;                                         \
  if(__builtin_constant_p(_curl_info)) {                                      \
    if(_curl_is_string_info(_curl_info))                                      \
      if(!_curl_is_arr((arg), char *))                                        \
        _curl_easy_getinfo_err_string();                                      \
142
143
144
145
146
147
148
149
150


151
152
153
154
155
156
157
158
141
142
143
144
145
146
147


148
149

150
151
152
153
154
155
156







-
-
+
+
-







    if(_curl_is_off_t_info(_curl_info))                                       \
      if(!_curl_is_arr((arg), curl_off_t))                                    \
        _curl_easy_getinfo_err_curl_off_t();                                  \
  }                                                                           \
  curl_easy_getinfo(handle, _curl_info, arg);                                 \
})

/* TODO: typechecking for curl_share_setopt() and curl_multi_setopt(),
 * for now just make sure that the functions are called with three
/*
 * For now, just make sure that the functions are called with three arguments
 * arguments
 */
#define curl_share_setopt(share,opt,param) curl_share_setopt(share,opt,param)
#define curl_multi_setopt(handle,opt,param) curl_multi_setopt(handle,opt,param)


/* the actual warnings, triggered by calling the _curl_easy_setopt_err*
 * functions */
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
500
501
502
503
504
505
506




507
508
509
510
511
512
513







-
-
-
-








/* evaluates to true if expr can be passed as POST data (void* or char*) */
#define _curl_is_postfields(expr)                                             \
  (_curl_is_ptr((expr), void) ||                                              \
   _curl_is_arr((expr), char) ||                                              \
   _curl_is_arr((expr), unsigned char))

/* FIXME: the whole callback checking is messy...
 * The idea is to tolerate char vs. void and const vs. not const
 * pointers in arguments at least
 */
/* helper: __builtin_types_compatible_p distinguishes between functions and
 * function pointers, hide it */
#define _curl_callback_compatible(func, type)                                 \
  (__builtin_types_compatible_p(__typeof__(func), type) ||                    \
   __builtin_types_compatible_p(__typeof__(func) *, type))

/* evaluates to true if expr is of type curl_resolver_start_callback */
Changes to jni/curl/include/curl/urlapi.h.
56
57
58
59
60
61
62
63


64
65
66
67
68
69
70
56
57
58
59
60
61
62

63
64
65
66
67
68
69
70
71







-
+
+







  CURLUPART_USER,
  CURLUPART_PASSWORD,
  CURLUPART_OPTIONS,
  CURLUPART_HOST,
  CURLUPART_PORT,
  CURLUPART_PATH,
  CURLUPART_QUERY,
  CURLUPART_FRAGMENT
  CURLUPART_FRAGMENT,
  CURLUPART_ZONEID /* added in 7.65.0 */
} CURLUPart;

#define CURLU_DEFAULT_PORT (1<<0)       /* return default port number */
#define CURLU_NO_DEFAULT_PORT (1<<1)    /* act as if no port number was set,
                                           if the port number matches the
                                           default for the scheme */
#define CURLU_DEFAULT_SCHEME (1<<2)     /* return default scheme if
Changes to jni/curl/lib/Makefile.in.
218
219
220
221
222
223
224
225
226


227
228
229
230
231
232


233
234
235
236
237
238
239
218
219
220
221
222
223
224


225
226
227
228
229
230
231

232
233
234
235
236
237
238
239
240







-
-
+
+





-
+
+







	libcurl_la-idn_win32.lo libcurl_la-http_proxy.lo \
	libcurl_la-non-ascii.lo libcurl_la-asyn-ares.lo \
	libcurl_la-asyn-thread.lo libcurl_la-curl_gssapi.lo \
	libcurl_la-http_ntlm.lo libcurl_la-curl_ntlm_wb.lo \
	libcurl_la-curl_ntlm_core.lo libcurl_la-curl_sasl.lo \
	libcurl_la-rand.lo libcurl_la-curl_multibyte.lo \
	libcurl_la-hostcheck.lo libcurl_la-conncache.lo \
	libcurl_la-pipeline.lo libcurl_la-dotdot.lo \
	libcurl_la-x509asn1.lo libcurl_la-http2.lo libcurl_la-smb.lo \
	libcurl_la-dotdot.lo libcurl_la-x509asn1.lo \
	libcurl_la-http2.lo libcurl_la-smb.lo \
	libcurl_la-curl_endian.lo libcurl_la-curl_des.lo \
	libcurl_la-system_win32.lo libcurl_la-mime.lo \
	libcurl_la-sha256.lo libcurl_la-setopt.lo \
	libcurl_la-curl_path.lo libcurl_la-curl_ctype.lo \
	libcurl_la-curl_range.lo libcurl_la-psl.lo libcurl_la-doh.lo \
	libcurl_la-urlapi.lo libcurl_la-altsvc.lo
	libcurl_la-urlapi.lo libcurl_la-curl_get_line.lo \
	libcurl_la-altsvc.lo
am__dirstamp = $(am__leading_dot)dirstamp
am__objects_2 = vauth/libcurl_la-vauth.lo \
	vauth/libcurl_la-cleartext.lo vauth/libcurl_la-cram.lo \
	vauth/libcurl_la-digest.lo vauth/libcurl_la-digest_sspi.lo \
	vauth/libcurl_la-krb5_gssapi.lo vauth/libcurl_la-krb5_sspi.lo \
	vauth/libcurl_la-ntlm.lo vauth/libcurl_la-ntlm_sspi.lo \
	vauth/libcurl_la-oauth2.lo vauth/libcurl_la-spnego_gssapi.lo \
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314









315
316
317
318
319
320
321
300
301
302
303
304
305
306









307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322







-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+







	libcurlu_la-gopher.lo libcurlu_la-idn_win32.lo \
	libcurlu_la-http_proxy.lo libcurlu_la-non-ascii.lo \
	libcurlu_la-asyn-ares.lo libcurlu_la-asyn-thread.lo \
	libcurlu_la-curl_gssapi.lo libcurlu_la-http_ntlm.lo \
	libcurlu_la-curl_ntlm_wb.lo libcurlu_la-curl_ntlm_core.lo \
	libcurlu_la-curl_sasl.lo libcurlu_la-rand.lo \
	libcurlu_la-curl_multibyte.lo libcurlu_la-hostcheck.lo \
	libcurlu_la-conncache.lo libcurlu_la-pipeline.lo \
	libcurlu_la-dotdot.lo libcurlu_la-x509asn1.lo \
	libcurlu_la-http2.lo libcurlu_la-smb.lo \
	libcurlu_la-curl_endian.lo libcurlu_la-curl_des.lo \
	libcurlu_la-system_win32.lo libcurlu_la-mime.lo \
	libcurlu_la-sha256.lo libcurlu_la-setopt.lo \
	libcurlu_la-curl_path.lo libcurlu_la-curl_ctype.lo \
	libcurlu_la-curl_range.lo libcurlu_la-psl.lo \
	libcurlu_la-doh.lo libcurlu_la-urlapi.lo libcurlu_la-altsvc.lo
	libcurlu_la-conncache.lo libcurlu_la-dotdot.lo \
	libcurlu_la-x509asn1.lo libcurlu_la-http2.lo \
	libcurlu_la-smb.lo libcurlu_la-curl_endian.lo \
	libcurlu_la-curl_des.lo libcurlu_la-system_win32.lo \
	libcurlu_la-mime.lo libcurlu_la-sha256.lo \
	libcurlu_la-setopt.lo libcurlu_la-curl_path.lo \
	libcurlu_la-curl_ctype.lo libcurlu_la-curl_range.lo \
	libcurlu_la-psl.lo libcurlu_la-doh.lo libcurlu_la-urlapi.lo \
	libcurlu_la-curl_get_line.lo libcurlu_la-altsvc.lo
am__objects_8 = vauth/libcurlu_la-vauth.lo \
	vauth/libcurlu_la-cleartext.lo vauth/libcurlu_la-cram.lo \
	vauth/libcurlu_la-digest.lo vauth/libcurlu_la-digest_sspi.lo \
	vauth/libcurlu_la-krb5_gssapi.lo \
	vauth/libcurlu_la-krb5_sspi.lo vauth/libcurlu_la-ntlm.lo \
	vauth/libcurlu_la-ntlm_sspi.lo vauth/libcurlu_la-oauth2.lo \
	vauth/libcurlu_la-spnego_gssapi.lo \
360
361
362
363
364
365
366

367
368
369
370
371
372
373
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375







+







	./$(DEPDIR)/libcurl_la-content_encoding.Plo \
	./$(DEPDIR)/libcurl_la-cookie.Plo \
	./$(DEPDIR)/libcurl_la-curl_addrinfo.Plo \
	./$(DEPDIR)/libcurl_la-curl_ctype.Plo \
	./$(DEPDIR)/libcurl_la-curl_des.Plo \
	./$(DEPDIR)/libcurl_la-curl_endian.Plo \
	./$(DEPDIR)/libcurl_la-curl_fnmatch.Plo \
	./$(DEPDIR)/libcurl_la-curl_get_line.Plo \
	./$(DEPDIR)/libcurl_la-curl_gethostname.Plo \
	./$(DEPDIR)/libcurl_la-curl_gssapi.Plo \
	./$(DEPDIR)/libcurl_la-curl_memrchr.Plo \
	./$(DEPDIR)/libcurl_la-curl_multibyte.Plo \
	./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo \
	./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo \
	./$(DEPDIR)/libcurl_la-curl_path.Plo \
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
420
421
422
423
424
425
426

427
428
429
430
431
432
433







-







	./$(DEPDIR)/libcurl_la-multi.Plo \
	./$(DEPDIR)/libcurl_la-netrc.Plo \
	./$(DEPDIR)/libcurl_la-non-ascii.Plo \
	./$(DEPDIR)/libcurl_la-nonblock.Plo \
	./$(DEPDIR)/libcurl_la-openldap.Plo \
	./$(DEPDIR)/libcurl_la-parsedate.Plo \
	./$(DEPDIR)/libcurl_la-pingpong.Plo \
	./$(DEPDIR)/libcurl_la-pipeline.Plo \
	./$(DEPDIR)/libcurl_la-pop3.Plo \
	./$(DEPDIR)/libcurl_la-progress.Plo \
	./$(DEPDIR)/libcurl_la-psl.Plo ./$(DEPDIR)/libcurl_la-rand.Plo \
	./$(DEPDIR)/libcurl_la-rtsp.Plo \
	./$(DEPDIR)/libcurl_la-security.Plo \
	./$(DEPDIR)/libcurl_la-select.Plo \
	./$(DEPDIR)/libcurl_la-sendf.Plo \
468
469
470
471
472
473
474

475
476
477
478
479
480
481
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483







+







	./$(DEPDIR)/libcurlu_la-content_encoding.Plo \
	./$(DEPDIR)/libcurlu_la-cookie.Plo \
	./$(DEPDIR)/libcurlu_la-curl_addrinfo.Plo \
	./$(DEPDIR)/libcurlu_la-curl_ctype.Plo \
	./$(DEPDIR)/libcurlu_la-curl_des.Plo \
	./$(DEPDIR)/libcurlu_la-curl_endian.Plo \
	./$(DEPDIR)/libcurlu_la-curl_fnmatch.Plo \
	./$(DEPDIR)/libcurlu_la-curl_get_line.Plo \
	./$(DEPDIR)/libcurlu_la-curl_gethostname.Plo \
	./$(DEPDIR)/libcurlu_la-curl_gssapi.Plo \
	./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo \
	./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo \
	./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo \
	./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo \
	./$(DEPDIR)/libcurlu_la-curl_path.Plo \
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
530
531
532
533
534
535
536

537
538
539
540
541
542
543







-







	./$(DEPDIR)/libcurlu_la-multi.Plo \
	./$(DEPDIR)/libcurlu_la-netrc.Plo \
	./$(DEPDIR)/libcurlu_la-non-ascii.Plo \
	./$(DEPDIR)/libcurlu_la-nonblock.Plo \
	./$(DEPDIR)/libcurlu_la-openldap.Plo \
	./$(DEPDIR)/libcurlu_la-parsedate.Plo \
	./$(DEPDIR)/libcurlu_la-pingpong.Plo \
	./$(DEPDIR)/libcurlu_la-pipeline.Plo \
	./$(DEPDIR)/libcurlu_la-pop3.Plo \
	./$(DEPDIR)/libcurlu_la-progress.Plo \
	./$(DEPDIR)/libcurlu_la-psl.Plo \
	./$(DEPDIR)/libcurlu_la-rand.Plo \
	./$(DEPDIR)/libcurlu_la-rtsp.Plo \
	./$(DEPDIR)/libcurlu_la-security.Plo \
	./$(DEPDIR)/libcurlu_la-select.Plo \
974
975
976
977
978
979
980
981

982
983
984

985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001

1002
1003
1004
1005

1006
1007
1008
1009
1010
1011
1012
975
976
977
978
979
980
981

982
983
984

985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001

1002
1003
1004
1005

1006
1007
1008
1009
1010
1011
1012
1013







-
+


-
+
















-
+



-
+







  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  ssh.c ssh-libssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c        \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c altsvc.c
  doh.c urlapi.c curl_get_line.c altsvc.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h       \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  altsvc.h
  curl_get_line.h altsvc.h

LIB_RCFILES = libcurl.rc
CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES)

# Makefile.inc provides the CSOURCES and HHEADERS defines
libcurl_la_SOURCES = $(CSOURCES) $(HHEADERS)
1256
1257
1258
1259
1260
1261
1262

1263
1264
1265
1266
1267
1268
1269
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271







+







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-content_encoding.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-cookie.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_addrinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_ctype.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_des.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_endian.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_fnmatch.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_get_line.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_gethostname.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_gssapi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_memrchr.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_multibyte.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-curl_path.Plo@am__quote@ # am--include-marker
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1318
1319
1320
1321
1322
1323
1324

1325
1326
1327
1328
1329
1330
1331







-







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-multi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-netrc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-non-ascii.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-nonblock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pipeline.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rand.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurl_la-select.Plo@am__quote@ # am--include-marker
1368
1369
1370
1371
1372
1373
1374

1375
1376
1377
1378
1379
1380
1381
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383







+







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-content_encoding.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-cookie.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_addrinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_ctype.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_des.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_endian.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_fnmatch.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_get_line.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_gethostname.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_gssapi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-curl_path.Plo@am__quote@ # am--include-marker
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1430
1431
1432
1433
1434
1435
1436

1437
1438
1439
1440
1441
1442
1443







-







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-multi.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-netrc.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-non-ascii.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-nonblock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-openldap.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-parsedate.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pingpong.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pipeline.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-pop3.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-progress.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-psl.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rand.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-rtsp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-security.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcurlu_la-select.Plo@am__quote@ # am--include-marker
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2206
2207
2208
2209
2210
2211
2212







2213
2214
2215
2216
2217
2218
2219







-
-
-
-
-
-
-







libcurl_la-conncache.lo: conncache.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurl_la-conncache.Tpo -c -o libcurl_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-conncache.Tpo $(DEPDIR)/libcurl_la-conncache.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='conncache.c' object='libcurl_la-conncache.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c

libcurl_la-pipeline.lo: pipeline.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-pipeline.lo -MD -MP -MF $(DEPDIR)/libcurl_la-pipeline.Tpo -c -o libcurl_la-pipeline.lo `test -f 'pipeline.c' || echo '$(srcdir)/'`pipeline.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-pipeline.Tpo $(DEPDIR)/libcurl_la-pipeline.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='pipeline.c' object='libcurl_la-pipeline.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-pipeline.lo `test -f 'pipeline.c' || echo '$(srcdir)/'`pipeline.c

libcurl_la-dotdot.lo: dotdot.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-dotdot.lo -MD -MP -MF $(DEPDIR)/libcurl_la-dotdot.Tpo -c -o libcurl_la-dotdot.lo `test -f 'dotdot.c' || echo '$(srcdir)/'`dotdot.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-dotdot.Tpo $(DEPDIR)/libcurl_la-dotdot.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dotdot.c' object='libcurl_la-dotdot.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-dotdot.lo `test -f 'dotdot.c' || echo '$(srcdir)/'`dotdot.c

2324
2325
2326
2327
2328
2329
2330







2331
2332
2333
2334
2335
2336
2337
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338







+
+
+
+
+
+
+







libcurl_la-urlapi.lo: urlapi.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-urlapi.lo -MD -MP -MF $(DEPDIR)/libcurl_la-urlapi.Tpo -c -o libcurl_la-urlapi.lo `test -f 'urlapi.c' || echo '$(srcdir)/'`urlapi.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-urlapi.Tpo $(DEPDIR)/libcurl_la-urlapi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='urlapi.c' object='libcurl_la-urlapi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-urlapi.lo `test -f 'urlapi.c' || echo '$(srcdir)/'`urlapi.c

libcurl_la-curl_get_line.lo: curl_get_line.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-curl_get_line.lo -MD -MP -MF $(DEPDIR)/libcurl_la-curl_get_line.Tpo -c -o libcurl_la-curl_get_line.lo `test -f 'curl_get_line.c' || echo '$(srcdir)/'`curl_get_line.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-curl_get_line.Tpo $(DEPDIR)/libcurl_la-curl_get_line.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='curl_get_line.c' object='libcurl_la-curl_get_line.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-curl_get_line.lo `test -f 'curl_get_line.c' || echo '$(srcdir)/'`curl_get_line.c

libcurl_la-altsvc.lo: altsvc.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -MT libcurl_la-altsvc.lo -MD -MP -MF $(DEPDIR)/libcurl_la-altsvc.Tpo -c -o libcurl_la-altsvc.lo `test -f 'altsvc.c' || echo '$(srcdir)/'`altsvc.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurl_la-altsvc.Tpo $(DEPDIR)/libcurl_la-altsvc.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='altsvc.c' object='libcurl_la-altsvc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurl_la_CPPFLAGS) $(CPPFLAGS) $(libcurl_la_CFLAGS) $(CFLAGS) -c -o libcurl_la-altsvc.lo `test -f 'altsvc.c' || echo '$(srcdir)/'`altsvc.c

3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3165
3166
3167
3168
3169
3170
3171







3172
3173
3174
3175
3176
3177
3178







-
-
-
-
-
-
-







libcurlu_la-conncache.lo: conncache.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-conncache.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-conncache.Tpo -c -o libcurlu_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-conncache.Tpo $(DEPDIR)/libcurlu_la-conncache.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='conncache.c' object='libcurlu_la-conncache.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-conncache.lo `test -f 'conncache.c' || echo '$(srcdir)/'`conncache.c

libcurlu_la-pipeline.lo: pipeline.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-pipeline.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-pipeline.Tpo -c -o libcurlu_la-pipeline.lo `test -f 'pipeline.c' || echo '$(srcdir)/'`pipeline.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-pipeline.Tpo $(DEPDIR)/libcurlu_la-pipeline.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='pipeline.c' object='libcurlu_la-pipeline.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-pipeline.lo `test -f 'pipeline.c' || echo '$(srcdir)/'`pipeline.c

libcurlu_la-dotdot.lo: dotdot.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-dotdot.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-dotdot.Tpo -c -o libcurlu_la-dotdot.lo `test -f 'dotdot.c' || echo '$(srcdir)/'`dotdot.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-dotdot.Tpo $(DEPDIR)/libcurlu_la-dotdot.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='dotdot.c' object='libcurlu_la-dotdot.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-dotdot.lo `test -f 'dotdot.c' || echo '$(srcdir)/'`dotdot.c

3283
3284
3285
3286
3287
3288
3289







3290
3291
3292
3293
3294
3295
3296
3277
3278
3279
3280
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297







+
+
+
+
+
+
+







libcurlu_la-urlapi.lo: urlapi.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-urlapi.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-urlapi.Tpo -c -o libcurlu_la-urlapi.lo `test -f 'urlapi.c' || echo '$(srcdir)/'`urlapi.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-urlapi.Tpo $(DEPDIR)/libcurlu_la-urlapi.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='urlapi.c' object='libcurlu_la-urlapi.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-urlapi.lo `test -f 'urlapi.c' || echo '$(srcdir)/'`urlapi.c

libcurlu_la-curl_get_line.lo: curl_get_line.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-curl_get_line.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-curl_get_line.Tpo -c -o libcurlu_la-curl_get_line.lo `test -f 'curl_get_line.c' || echo '$(srcdir)/'`curl_get_line.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-curl_get_line.Tpo $(DEPDIR)/libcurlu_la-curl_get_line.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='curl_get_line.c' object='libcurlu_la-curl_get_line.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-curl_get_line.lo `test -f 'curl_get_line.c' || echo '$(srcdir)/'`curl_get_line.c

libcurlu_la-altsvc.lo: altsvc.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -MT libcurlu_la-altsvc.lo -MD -MP -MF $(DEPDIR)/libcurlu_la-altsvc.Tpo -c -o libcurlu_la-altsvc.lo `test -f 'altsvc.c' || echo '$(srcdir)/'`altsvc.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/libcurlu_la-altsvc.Tpo $(DEPDIR)/libcurlu_la-altsvc.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='altsvc.c' object='libcurlu_la-altsvc.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcurlu_la_CPPFLAGS) $(CPPFLAGS) $(libcurlu_la_CFLAGS) $(CFLAGS) -c -o libcurlu_la-altsvc.lo `test -f 'altsvc.c' || echo '$(srcdir)/'`altsvc.c

3620
3621
3622
3623
3624
3625
3626

3627
3628
3629
3630
3631
3632
3633
3621
3622
3623
3624
3625
3626
3627
3628
3629
3630
3631
3632
3633
3634
3635







+







	-rm -f ./$(DEPDIR)/libcurl_la-content_encoding.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-cookie.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_addrinfo.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ctype.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_des.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_endian.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_fnmatch.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_get_line.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_gethostname.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_gssapi.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_memrchr.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_multibyte.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_path.Plo
3680
3681
3682
3683
3684
3685
3686
3687
3688
3689
3690
3691
3692
3693
3694
3682
3683
3684
3685
3686
3687
3688

3689
3690
3691
3692
3693
3694
3695







-







	-rm -f ./$(DEPDIR)/libcurl_la-multi.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-netrc.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-non-ascii.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-nonblock.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pipeline.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
3732
3733
3734
3735
3736
3737
3738

3739
3740
3741
3742
3743
3744
3745
3733
3734
3735
3736
3737
3738
3739
3740
3741
3742
3743
3744
3745
3746
3747







+







	-rm -f ./$(DEPDIR)/libcurlu_la-content_encoding.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-cookie.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_addrinfo.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ctype.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_des.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_endian.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_fnmatch.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_get_line.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_gethostname.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_gssapi.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_path.Plo
3792
3793
3794
3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3794
3795
3796
3797
3798
3799
3800

3801
3802
3803
3804
3805
3806
3807







-







	-rm -f ./$(DEPDIR)/libcurlu_la-multi.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-netrc.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-non-ascii.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-nonblock.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pipeline.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
3939
3940
3941
3942
3943
3944
3945

3946
3947
3948
3949
3950
3951
3952
3940
3941
3942
3943
3944
3945
3946
3947
3948
3949
3950
3951
3952
3953
3954







+







	-rm -f ./$(DEPDIR)/libcurl_la-content_encoding.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-cookie.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_addrinfo.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ctype.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_des.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_endian.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_fnmatch.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_get_line.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_gethostname.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_gssapi.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_memrchr.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_multibyte.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_core.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_ntlm_wb.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-curl_path.Plo
3999
4000
4001
4002
4003
4004
4005
4006
4007
4008
4009
4010
4011
4012
4013
4001
4002
4003
4004
4005
4006
4007

4008
4009
4010
4011
4012
4013
4014







-







	-rm -f ./$(DEPDIR)/libcurl_la-multi.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-netrc.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-non-ascii.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-nonblock.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pipeline.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurl_la-select.Plo
4051
4052
4053
4054
4055
4056
4057

4058
4059
4060
4061
4062
4063
4064
4052
4053
4054
4055
4056
4057
4058
4059
4060
4061
4062
4063
4064
4065
4066







+







	-rm -f ./$(DEPDIR)/libcurlu_la-content_encoding.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-cookie.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_addrinfo.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ctype.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_des.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_endian.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_fnmatch.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_get_line.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_gethostname.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_gssapi.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_memrchr.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_multibyte.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_core.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_ntlm_wb.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-curl_path.Plo
4111
4112
4113
4114
4115
4116
4117
4118
4119
4120
4121
4122
4123
4124
4125
4113
4114
4115
4116
4117
4118
4119

4120
4121
4122
4123
4124
4125
4126







-







	-rm -f ./$(DEPDIR)/libcurlu_la-multi.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-netrc.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-non-ascii.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-nonblock.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-openldap.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-parsedate.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pingpong.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pipeline.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-pop3.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-progress.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-psl.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rand.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-rtsp.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-security.Plo
	-rm -f ./$(DEPDIR)/libcurlu_la-select.Plo
Changes to jni/curl/lib/Makefile.inc.
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
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







-
+


-
+
















-
+



-
+





  inet_ntop.c parsedate.c select.c tftp.c splay.c strdup.c socks.c      \
  ssh.c ssh-libssh.c curl_addrinfo.c socks_gssapi.c socks_sspi.c        \
  curl_sspi.c slist.c nonblock.c curl_memrchr.c imap.c pop3.c smtp.c    \
  pingpong.c rtsp.c curl_threads.c warnless.c hmac.c curl_rtmp.c        \
  openldap.c curl_gethostname.c gopher.c idn_win32.c                    \
  http_proxy.c non-ascii.c asyn-ares.c asyn-thread.c curl_gssapi.c      \
  http_ntlm.c curl_ntlm_wb.c curl_ntlm_core.c curl_sasl.c rand.c        \
  curl_multibyte.c hostcheck.c conncache.c pipeline.c dotdot.c          \
  curl_multibyte.c hostcheck.c conncache.c dotdot.c                     \
  x509asn1.c http2.c smb.c curl_endian.c curl_des.c system_win32.c      \
  mime.c sha256.c setopt.c curl_path.c curl_ctype.c curl_range.c psl.c  \
  doh.c urlapi.c altsvc.c
  doh.c urlapi.c curl_get_line.c altsvc.c

LIB_HFILES = arpa_telnet.h netrc.h file.h timeval.h hostip.h progress.h \
  formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h if2ip.h         \
  speedcheck.h urldata.h curl_ldap.h escape.h telnet.h getinfo.h        \
  strcase.h curl_sec.h memdebug.h http_chunks.h curl_fnmatch.h          \
  wildcard.h fileinfo.h ftplistparser.h strtok.h connect.h llist.h      \
  hash.h content_encoding.h share.h curl_md4.h curl_md5.h http_digest.h \
  http_negotiate.h inet_pton.h amigaos.h strtoofft.h strerror.h         \
  inet_ntop.h curlx.h curl_memory.h curl_setup.h transfer.h select.h    \
  easyif.h multiif.h parsedate.h tftp.h sockaddr.h splay.h strdup.h     \
  socks.h ssh.h curl_base64.h curl_addrinfo.h curl_sspi.h      \
  slist.h nonblock.h curl_memrchr.h imap.h pop3.h smtp.h pingpong.h     \
  rtsp.h curl_threads.h warnless.h curl_hmac.h curl_rtmp.h              \
  curl_gethostname.h gopher.h http_proxy.h non-ascii.h asyn.h           \
  http_ntlm.h curl_gssapi.h curl_ntlm_wb.h curl_ntlm_core.h             \
  curl_sasl.h curl_multibyte.h hostcheck.h conncache.h                  \
  curl_setup_once.h multihandle.h setup-vms.h pipeline.h dotdot.h       \
  curl_setup_once.h multihandle.h setup-vms.h dotdot.h                  \
  x509asn1.h http2.h sigpipe.h smb.h curl_endian.h curl_des.h           \
  curl_printf.h system_win32.h rand.h mime.h curl_sha256.h setopt.h     \
  curl_path.h curl_ctype.h curl_range.h psl.h doh.h urlapi-int.h        \
  altsvc.h
  curl_get_line.h altsvc.h

LIB_RCFILES = libcurl.rc

CSOURCES = $(LIB_CFILES) $(LIB_VAUTH_CFILES) $(LIB_VTLS_CFILES)
HHEADERS = $(LIB_HFILES) $(LIB_VAUTH_HFILES) $(LIB_VTLS_HFILES)
Changes to jni/curl/lib/altsvc.c.
25
26
27
28
29
30
31
32

33
34
35
36
37
38
39
25
26
27
28
29
30
31

32
33
34
35
36
37
38
39







-
+







 */
#include "curl_setup.h"

#if !defined(CURL_DISABLE_HTTP) && defined(USE_ALTSVC)
#include <curl/curl.h>
#include "urldata.h"
#include "altsvc.h"
#include "cookie.h" /* for Curl_get_line() */
#include "curl_get_line.h"
#include "strcase.h"
#include "parsedate.h"
#include "sendf.h"
#include "warnless.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
249
250
251
252
253
254
255

256
257
258
259
260
261
262







-








  /* set default behavior */
  asi->flags = CURLALTSVC_H1
#ifdef USE_NGHTTP2
    | CURLALTSVC_H2
#endif
#ifdef USE_HTTP3
    /* TODO: adjust when known */
    | CURLALTSVC_H3
#endif
    ;
  return asi;
}

/*
345
346
347
348
349
350
351
352

353
354
355
356
357
358
359
344
345
346
347
348
349
350

351
352
353
354
355
356
357
358







-
+







    p++;
  protop = p;
  while(*p && ISALNUM(*p))
    p++;
  len = p - protop;

  if(!len || (len >= buflen))
    return CURLE_BAD_FUNCTION_ARGUMENT; /* TODO: improve error code */
    return CURLE_BAD_FUNCTION_ARGUMENT;
  memcpy(alpnbuf, protop, len);
  alpnbuf[len] = 0;
  *ptr = p;
  return CURLE_OK;
}

/* altsvc_flush() removes all alternatives for this source origin from the
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
420
421
422
423
424
425
426

427
428
429
430
431
432
433







-







  DEBUGASSERT(asi);

  /* Flush all cached alternatives for this source origin, if any */
  altsvc_flush(asi, srcalpnid, srchost, srcport);

  /* "clear" is a magic keyword */
  if(strcasecompare(alpnbuf, "clear")) {
    /* TODO: clear whatever it is it should clear */
    return CURLE_OK;
  }

  /* The 'ma' and 'persist' flags are annoyingly meant for all alternatives
     but are set after the list on the line. Scan for the semicolons and get
     those fields first! */
  semip = p;
474
475
476
477
478
479
480
481

482
483
484
485
486
487
488
472
473
474
475
476
477
478

479
480
481
482
483
484
485
486







-
+







        if(*p != ':') {
          /* host name starts here */
          const char *hostp = p;
          while(*p && (ISALNUM(*p) || (*p == '.') || (*p == '-')))
            p++;
          len = p - hostp;
          if(!len || (len >= MAX_ALTSVC_HOSTLEN))
            return CURLE_BAD_FUNCTION_ARGUMENT; /* TODO: improve error code */
            return CURLE_BAD_FUNCTION_ARGUMENT;
          memcpy(namebuf, hostp, len);
          namebuf[len] = 0;
          dsthost = namebuf;
        }
        else {
          /* no destination name, use source host */
          dsthost = srchost;
500
501
502
503
504
505
506
507
508


509
510
511
512
513
514
515
498
499
500
501
502
503
504


505
506
507
508
509
510
511
512
513







-
-
+
+







        }
        if(*p++ != '\"')
          return CURLE_BAD_FUNCTION_ARGUMENT;
        as = altsvc_createid(srchost, dsthost,
                             srcalpnid, dstalpnid,
                             srcport, dstport);
        if(as) {
          /* TODO: the expires time also needs to take the Age: value (if any)
             into account. [See RFC 7838 section 3.1] */
          /* The expires time also needs to take the Age: value (if any) into
             account. [See RFC 7838 section 3.1] */
          as->expires = maxage + time(NULL);
          as->persist = persist;
          Curl_llist_insert_next(&asi->list, asi->list.tail, as, &as->node);
          asi->num++; /* one more entry */
          infof(data, "Added alt-svc: %s:%d over %s\n", dsthost, dstport,
                Curl_alpnid2str(dstalpnid));
        }
Changes to jni/curl/lib/asyn-ares.c.
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
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







-
+




















+

+
+
+
+
+
+
+
+
+
+
+







#include "multiif.h"
#include "inet_pton.h"
#include "connect.h"
#include "select.h"
#include "progress.h"

#  if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
     (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
     (defined(WIN32) || defined(__SYMBIAN32__))
#    define CARES_STATICLIB
#  endif
#  include <ares.h>
#  include <ares_version.h> /* really old c-ares didn't include this by
                               itself */

#if ARES_VERSION >= 0x010500
/* c-ares 1.5.0 or later, the callback proto is modified */
#define HAVE_CARES_CALLBACK_TIMEOUTS 1
#endif

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

struct ResolverResults {
  int num_pending; /* number of ares_gethostbyname() requests */
  Curl_addrinfo *temp_ai; /* intermediary result while fetching c-ares parts */
  int last_status;
  struct curltime happy_eyeballs_dns_time; /* when this timer started, or 0 */
};

/* How long we are willing to wait for additional parallel responses after
   obtaining a "definitive" one.

   This is intended to equal the c-ares default timeout.  cURL always uses that
   default value.  Unfortunately, c-ares doesn't expose its default timeout in
   its API, but it is officially documented as 5 seconds.

   See query_completed_cb() for an explanation of how this is used.
 */
#define HAPPY_EYEBALLS_DNS_TIMEOUT 5000

/*
 * Curl_resolver_global_init() - the generic low-level asynchronous name
 * resolve API.  Called from curl_global_init() to initialize global resolver
 * environment.  Initializes ares library.
 */
int Curl_resolver_global_init(void)
315
316
317
318
319
320
321
322

323
324

325
326
327
328
329
330
331
327
328
329
330
331
332
333

334
335

336
337
338
339
340
341
342
343







-
+

-
+







       above, as otherwise the ares name resolve won't timeout! */
    ares_process_fd((ares_channel)data->state.resolver, ARES_SOCKET_BAD,
                    ARES_SOCKET_BAD);
  else {
    /* move through the descriptors and ask for processing on them */
    for(i = 0; i < num; i++)
      ares_process_fd((ares_channel)data->state.resolver,
                      pfd[i].revents & (POLLRDNORM|POLLIN)?
                      (pfd[i].revents & (POLLRDNORM|POLLIN))?
                      pfd[i].fd:ARES_SOCKET_BAD,
                      pfd[i].revents & (POLLWRNORM|POLLOUT)?
                      (pfd[i].revents & (POLLWRNORM|POLLOUT))?
                      pfd[i].fd:ARES_SOCKET_BAD);
  }
  return nfds;
}

/*
 * Curl_resolver_is_resolved() is called repeatedly to check if a previous
342
343
344
345
346
347
348























349
350
351
352
353
354
355
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    conn->async.os_specific;
  CURLcode result = CURLE_OK;

  if(dns)
    *dns = NULL;

  waitperform(conn, 0);

  /* Now that we've checked for any last minute results above, see if there are
     any responses still pending when the EXPIRE_HAPPY_EYEBALLS_DNS timer
     expires. */
  if(res
     && res->num_pending
     /* This is only set to non-zero if the timer was started. */
     && (res->happy_eyeballs_dns_time.tv_sec
         || res->happy_eyeballs_dns_time.tv_usec)
     && (Curl_timediff(Curl_now(), res->happy_eyeballs_dns_time)
         >= HAPPY_EYEBALLS_DNS_TIMEOUT)) {
    /* Remember that the EXPIRE_HAPPY_EYEBALLS_DNS timer is no longer
       running. */
    memset(
      &res->happy_eyeballs_dns_time, 0, sizeof(res->happy_eyeballs_dns_time));

    /* Cancel the raw c-ares request, which will fire query_completed_cb() with
       ARES_ECANCELLED synchronously for all pending responses.  This will
       leave us with res->num_pending == 0, which is perfect for the next
       block. */
    ares_cancel((ares_channel)data->state.resolver);
    DEBUGASSERT(res->num_pending == 0);
  }

  if(res && !res->num_pending) {
    if(dns) {
      (void)Curl_addrinfo_callback(conn, res->last_status, res->temp_ai);
      /* temp_ai ownership is moved to the connection, so we need not free-up
         them */
      res->temp_ai = NULL;
451
452
453
454
455
456
457
458

459
460
461
462
463
464
465
466
467
486
487
488
489
490
491
492

493


494
495
496
497
498
499
500







-
+
-
-







  /* Operation complete, if the lookup was successful we now have the entry
     in the cache. */
  if(entry)
    *entry = conn->async.dns;

  if(result)
    /* close the connection, since we can't return failure here without
       cleaning up this connection properly.
       cleaning up this connection properly. */
       TODO: remove this action from here, it is not a name resolver decision.
    */
    connclose(conn, "c-ares resolve failed");

  return result;
}

/* Connects results to the list */
static void compound_results(struct ResolverResults *res,
513
514
515
516
517
518
519




























































520
521
522
523
524
525
526
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







      if(ai) {
        compound_results(res, ai);
      }
    }
    /* A successful result overwrites any previous error */
    if(res->last_status != ARES_SUCCESS)
      res->last_status = status;

    /* If there are responses still pending, we presume they must be the
       complementary IPv4 or IPv6 lookups that we started in parallel in
       Curl_resolver_getaddrinfo() (for Happy Eyeballs).  If we've got a
       "definitive" response from one of a set of parallel queries, we need to
       think about how long we're willing to wait for more responses. */
    if(res->num_pending
       /* Only these c-ares status values count as "definitive" for these
          purposes.  For example, ARES_ENODATA is what we expect when there is
          no IPv6 entry for a domain name, and that's not a reason to get more
          aggressive in our timeouts for the other response.  Other errors are
          either a result of bad input (which should affect all parallel
          requests), local or network conditions, non-definitive server
          responses, or us cancelling the request. */
       && (status == ARES_SUCCESS || status == ARES_ENOTFOUND)) {
      /* Right now, there can only be up to two parallel queries, so don't
         bother handling any other cases. */
      DEBUGASSERT(res->num_pending == 1);

      /* It's possible that one of these parallel queries could succeed
         quickly, but the other could always fail or timeout (when we're
         talking to a pool of DNS servers that can only successfully resolve
         IPv4 address, for example).

         It's also possible that the other request could always just take
         longer because it needs more time or only the second DNS server can
         fulfill it successfully.  But, to align with the philosophy of Happy
         Eyeballs, we don't want to wait _too_ long or users will think
         requests are slow when IPv6 lookups don't actually work (but IPv4 ones
         do).

         So, now that we have a usable answer (some IPv4 addresses, some IPv6
         addresses, or "no such domain"), we start a timeout for the remaining
         pending responses.  Even though it is typical that this resolved
         request came back quickly, that needn't be the case.  It might be that
         this completing request didn't get a result from the first DNS server
         or even the first round of the whole DNS server pool.  So it could
         already be quite some time after we issued the DNS queries in the
         first place.  Without modifying c-ares, we can't know exactly where in
         its retry cycle we are.  We could guess based on how much time has
         gone by, but it doesn't really matter.  Happy Eyeballs tells us that,
         given usable information in hand, we simply don't want to wait "too
         much longer" after we get a result.

         We simply wait an additional amount of time equal to the default
         c-ares query timeout.  That is enough time for a typical parallel
         response to arrive without being "too long".  Even on a network
         where one of the two types of queries is failing or timing out
         constantly, this will usually mean we wait a total of the default
         c-ares timeout (5 seconds) plus the round trip time for the successful
         request, which seems bearable.  The downside is that c-ares might race
         with us to issue one more retry just before we give up, but it seems
         better to "waste" that request instead of trying to guess the perfect
         timeout to prevent it.  After all, we don't even know where in the
         c-ares retry cycle each request is.
      */
      res->happy_eyeballs_dns_time = Curl_now();
      Curl_expire(
        conn->data, HAPPY_EYEBALLS_DNS_TIMEOUT, EXPIRE_HAPPY_EYEBALLS_DNS);
    }
  }
}

/*
 * Curl_resolver_getaddrinfo() - when using ares
 *
 * Returns name information about the given hostname and port number. If
Changes to jni/curl/lib/base64.c.
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
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







-
+

















+
+
+
+
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

/* Base64 encoding/decoding */

#include "curl_setup.h"

#if !defined(CURL_DISABLE_HTTP_AUTH) || defined(USE_LIBSSH2) || \
  defined(USE_LIBSSH) || !defined(CURL_DISABLE_LDAP) || \
  !defined(CURL_DISABLE_DOH) || defined(USE_SSL)

#include "urldata.h" /* for the Curl_easy definition */
#include "warnless.h"
#include "curl_base64.h"
#include "non-ascii.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
313
314
315
316
317
318
319


318
319
320
321
322
323
324
325
326







+
+
 */
CURLcode Curl_base64url_encode(struct Curl_easy *data,
                               const char *inputbuff, size_t insize,
                               char **outptr, size_t *outlen)
{
  return base64_encode(base64url, data, inputbuff, insize, outptr, outlen);
}

#endif /* no users so disabled */
Changes to jni/curl/lib/config-win32.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_CONFIG_WIN32_H
#define HEADER_CURL_CONFIG_WIN32_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
180
181
182
183
184
185
186



187
188
189
190
191
192
193
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196







+
+
+







#define HAVE_CLOSESOCKET 1

/* Define if you don't have vprintf but do have _doprnt. */
/* #define HAVE_DOPRNT 1 */

/* Define if you have the ftruncate function. */
#define HAVE_FTRUNCATE 1

/* Define to 1 if you have the `getpeername' function. */
#define HAVE_GETPEERNAME 1

/* Define if you have the gethostbyaddr function. */
#define HAVE_GETHOSTBYADDR 1

/* Define if you have the gethostname function. */
#define HAVE_GETHOSTNAME 1

Changes to jni/curl/lib/conncache.c.
430
431
432
433
434
435
436

437
438
439
440
441
442
443
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444







+







  /* data->multi->maxconnects can be negative, deal with it. */
  size_t maxconnects =
    (data->multi->maxconnects < 0) ? data->multi->num_easy * 4:
    data->multi->maxconnects;
  struct connectdata *conn_candidate = NULL;

  conn->data = NULL; /* no owner anymore */
  conn->lastused = Curl_now(); /* it was used up until now */
  if(maxconnects > 0 &&
     Curl_conncache_size(data) > maxconnects) {
    infof(data, "Connection cache is full, closing the oldest one.\n");

    conn_candidate = Curl_conncache_extract_oldest(data);
    if(conn_candidate) {
      /* the winner gets the honour of being disconnected */
475
476
477
478
479
480
481
482

483
484
485
486
487
488
489
476
477
478
479
480
481
482

483
484
485
486
487
488
489
490







-
+








  curr = bundle->conn_list.head;
  while(curr) {
    conn = curr->ptr;

    if(!CONN_INUSE(conn) && !conn->data) {
      /* Set higher score for the age passed since the connection was used */
      score = Curl_timediff(now, conn->now);
      score = Curl_timediff(now, conn->lastused);

      if(score > highscore) {
        highscore = score;
        conn_candidate = conn;
      }
    }
    curr = curr->next;
533
534
535
536
537
538
539
540

541
542
543
544
545
546
547
534
535
536
537
538
539
540

541
542
543
544
545
546
547
548







-
+








    curr = bundle->conn_list.head;
    while(curr) {
      conn = curr->ptr;

      if(!CONN_INUSE(conn) && !conn->data) {
        /* Set higher score for the age passed since the connection was used */
        score = Curl_timediff(now, conn->now);
        score = Curl_timediff(now, conn->lastused);

        if(score > highscore) {
          highscore = score;
          conn_candidate = conn;
          bundle_candidate = bundle;
        }
      }
Changes to jni/curl/lib/conncache.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_CONNCACHE_H
#define HEADER_CURL_CONNCACHE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2015 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2015 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2012 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
36
37
38
39
40
41
42

43
44
45
46
47
48
49







-







  struct curltime last_cleanup;
  /* handle used for closing cached connections */
  struct Curl_easy *closure_handle;
};

#define BUNDLE_NO_MULTIUSE -1
#define BUNDLE_UNKNOWN     0  /* initial value */
#define BUNDLE_PIPELINING  1
#define BUNDLE_MULTIPLEX   2

struct connectbundle {
  int multiuse;                 /* supports multi-use */
  size_t num_connections;       /* Number of connections in the bundle */
  struct curl_llist conn_list;  /* The connectdata members of the bundle */
};
Changes to jni/curl/lib/connect.c.
353
354
355
356
357
358
359
360

361
362
363
364
365
366
367
353
354
355
356
357
358
359

360
361
362
363
364
365
366
367







-
+







      if(af == AF_INET)
        conn->ip_version = CURL_IPRESOLVE_V4;
#ifdef ENABLE_IPV6
      else if(af == AF_INET6)
        conn->ip_version = CURL_IPRESOLVE_V6;
#endif

      rc = Curl_resolv(conn, dev, 0, &h);
      rc = Curl_resolv(conn, dev, 0, FALSE, &h);
      if(rc == CURLRESOLV_PENDING)
        (void)Curl_resolver_wait_resolv(conn, &h);
      conn->ip_version = ipver;

      if(h) {
        /* convert the resolved address, sizeof myhost >= INET_ADDRSTRLEN */
        Curl_printable_address(h->addr, myhost, sizeof(myhost));
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
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







-













-
+









-
+







                             long *port);

/* retrieves ip address and port from a sockaddr structure.
   note it calls Curl_inet_ntop which sets errno on fail, not SOCKERRNO. */
UNITTEST bool getaddressinfo(struct sockaddr *sa, char *addr,
                             long *port)
{
  unsigned short us_port;
  struct sockaddr_in *si = NULL;
#ifdef ENABLE_IPV6
  struct sockaddr_in6 *si6 = NULL;
#endif
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
  struct sockaddr_un *su = NULL;
#endif

  switch(sa->sa_family) {
    case AF_INET:
      si = (struct sockaddr_in *)(void *) sa;
      if(Curl_inet_ntop(sa->sa_family, &si->sin_addr,
                        addr, MAX_IPADR_LEN)) {
        us_port = ntohs(si->sin_port);
        unsigned short us_port = ntohs(si->sin_port);
        *port = us_port;
        return TRUE;
      }
      break;
#ifdef ENABLE_IPV6
    case AF_INET6:
      si6 = (struct sockaddr_in6 *)(void *) sa;
      if(Curl_inet_ntop(sa->sa_family, &si6->sin6_addr,
                        addr, MAX_IPADR_LEN)) {
        us_port = ntohs(si6->sin6_port);
        unsigned short us_port = ntohs(si6->sin6_port);
        *port = us_port;
        return TRUE;
      }
      break;
#endif
#if defined(HAVE_SYS_UN_H) && defined(AF_UNIX)
    case AF_UNIX:
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
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







-
-
-
-
-




+

+

+
+
+
+







-
+
+








-
+
+







-
+
+






-
+

+
+
+







  return FALSE;
}

/* retrieves the start/end point information of a socket of an established
   connection */
void Curl_updateconninfo(struct connectdata *conn, curl_socket_t sockfd)
{
  curl_socklen_t len;
  struct Curl_sockaddr_storage ssrem;
  struct Curl_sockaddr_storage ssloc;
  struct Curl_easy *data = conn->data;

  if(conn->socktype == SOCK_DGRAM)
    /* there's no connection! */
    return;

#if defined(HAVE_GETPEERNAME) || defined(HAVE_GETSOCKNAME)
  if(!conn->bits.reuse && !conn->bits.tcp_fastopen) {
    struct Curl_easy *data = conn->data;
    char buffer[STRERROR_LEN];
    struct Curl_sockaddr_storage ssrem;
    struct Curl_sockaddr_storage ssloc;
    curl_socklen_t len;
#ifdef HAVE_GETPEERNAME
    len = sizeof(struct Curl_sockaddr_storage);
    if(getpeername(sockfd, (struct sockaddr*) &ssrem, &len)) {
      int error = SOCKERRNO;
      failf(data, "getpeername() failed with errno %d: %s",
            error, Curl_strerror(error, buffer, sizeof(buffer)));
      return;
    }

#endif
#ifdef HAVE_GETSOCKNAME
    len = sizeof(struct Curl_sockaddr_storage);
    memset(&ssloc, 0, sizeof(ssloc));
    if(getsockname(sockfd, (struct sockaddr*) &ssloc, &len)) {
      int error = SOCKERRNO;
      failf(data, "getsockname() failed with errno %d: %s",
            error, Curl_strerror(error, buffer, sizeof(buffer)));
      return;
    }

#endif
#ifdef HAVE_GETPEERNAME
    if(!getaddressinfo((struct sockaddr*)&ssrem,
                       conn->primary_ip, &conn->primary_port)) {
      failf(data, "ssrem inet_ntop() failed with errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      return;
    }
    memcpy(conn->ip_addr_str, conn->primary_ip, MAX_IPADR_LEN);

#endif
#ifdef HAVE_GETSOCKNAME
    if(!getaddressinfo((struct sockaddr*)&ssloc,
                       conn->local_ip, &conn->local_port)) {
      failf(data, "ssloc inet_ntop() failed with errno %d: %s",
            errno, Curl_strerror(errno, buffer, sizeof(buffer)));
      return;
    }

#endif
  }
#else /* !HAVE_GETSOCKNAME && !HAVE_GETPEERNAME */
  (void)sockfd; /* unused */
#endif

  /* persist connection info in session handle */
  Curl_persistconninfo(conn);
}

/*
 * Curl_is_connected() checks if the socket has connected.
1024
1025
1026
1027
1028
1029
1030
1031

1032
1033
1034
1035
1036
1037
1038
1030
1031
1032
1033
1034
1035
1036

1037
1038
1039
1040
1041
1042
1043
1044







-
+







                     ipaddress, &port)) {
    /* malformed address or bug in inet_ntop, try next address */
    failf(data, "sa_addr inet_ntop() failed with errno %d: %s",
          errno, Curl_strerror(errno, buffer, sizeof(buffer)));
    Curl_closesocket(conn, sockfd);
    return CURLE_OK;
  }
  infof(data, "  Trying %s...\n", ipaddress);
  infof(data, "  Trying %s:%ld...\n", ipaddress, port);

#ifdef ENABLE_IPV6
  is_tcp = (addr.family == AF_INET || addr.family == AF_INET6) &&
    addr.socktype == SOCK_STREAM;
#else
  is_tcp = (addr.family == AF_INET) && addr.socktype == SOCK_STREAM;
#endif
Changes to jni/curl/lib/cookie.c.
89
90
91
92
93
94
95

96
97
98
99
100
101
102
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103







+







#include "psl.h"
#include "strtok.h"
#include "sendf.h"
#include "slist.h"
#include "share.h"
#include "strtoofft.h"
#include "strcase.h"
#include "curl_get_line.h"
#include "curl_memrchr.h"
#include "inet_pton.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"
869
870
871
872
873
874
875

876
877
878
879
880






881
882
883
884
885
886
887
870
871
872
873
874
875
876
877





878
879
880
881
882
883
884
885
886
887
888
889
890







+
-
-
-
-
-
+
+
+
+
+
+







        if(curlx_strtoofft(ptr, NULL, 10, &co->expires))
          badcookie = TRUE;
        break;
      case 5:
        co->name = strdup(ptr);
        if(!co->name)
          badcookie = TRUE;
        else {
        /* For Netscape file format cookies we check prefix on the name */
        if(strncasecompare("__Secure-", co->name, 9))
          co->prefix |= COOKIE_PREFIX__SECURE;
        else if(strncasecompare("__Host-", co->name, 7))
          co->prefix |= COOKIE_PREFIX__HOST;
          /* For Netscape file format cookies we check prefix on the name */
          if(strncasecompare("__Secure-", co->name, 9))
            co->prefix |= COOKIE_PREFIX__SECURE;
          else if(strncasecompare("__Host-", co->name, 7))
            co->prefix |= COOKIE_PREFIX__HOST;
        }
        break;
      case 6:
        co->value = strdup(ptr);
        if(!co->value)
          badcookie = TRUE;
        break;
      }
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1084
1085
1086
1087
1088
1089
1090



























1091
1092
1093
1094
1095
1096
1097







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







      c->cookies[myhash] = co;
    c->numcookies++; /* one more cookie in the jar */
  }

  return co;
}

/*
 * get_line() makes sure to only return complete whole lines that fit in 'len'
 * bytes and end with a newline.
 */
char *Curl_get_line(char *buf, int len, FILE *input)
{
  bool partial = FALSE;
  while(1) {
    char *b = fgets(buf, len, input);
    if(b) {
      size_t rlen = strlen(b);
      if(rlen && (b[rlen-1] == '\n')) {
        if(partial) {
          partial = FALSE;
          continue;
        }
        return b;
      }
      /* read a partial, discard the next piece that ends with newline */
      partial = TRUE;
    }
    else
      break;
  }
  return NULL;
}


/*****************************************************************************
 *
 * Curl_cookie_init()
 *
 * Inits a cookie struct to read data from a local file. This is always
 * called before any cookies are set. File may be NULL.
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1505
1506
1507
1508
1509
1510
1511




1512
1513
1514
1515
1516
1517
1518







-
-
-
-







 * The function returns non-zero on write failure.
 */
static int cookie_output(struct CookieInfo *c, const char *dumphere)
{
  struct Cookie *co;
  FILE *out;
  bool use_stdout = FALSE;
  char *format_ptr;
  unsigned int i;
  unsigned int j;
  struct Cookie **array;

  if(!c)
    /* no cookie engine alive */
    return 0;

  /* at first, remove expired cookies */
  remove_expired(c);
1559
1560
1561
1562
1563
1564
1565




1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585

1586
1587
1588
1589
1590
1591
1592
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560

1561
1562
1563
1564
1565
1566
1567
1568







+
+
+
+



















-
+








  fputs("# Netscape HTTP Cookie File\n"
        "# https://curl.haxx.se/docs/http-cookies.html\n"
        "# This file was generated by libcurl! Edit at your own risk.\n\n",
        out);

  if(c->numcookies) {
    unsigned int i;
    unsigned int j;
    struct Cookie **array;

    array = malloc(sizeof(struct Cookie *) * c->numcookies);
    if(!array) {
      if(!use_stdout)
        fclose(out);
      return 1;
    }

    j = 0;
    for(i = 0; i < COOKIE_HASH_SIZE; i++) {
      for(co = c->cookies[i]; co; co = co->next) {
        if(!co->domain)
          continue;
        array[j++] = co;
      }
    }

    qsort(array, c->numcookies, sizeof(struct Cookie *), cookie_sort_ct);

    for(i = 0; i < j; i++) {
      format_ptr = get_netscape_format(array[i]);
      char *format_ptr = get_netscape_format(array[i]);
      if(format_ptr == NULL) {
        fprintf(out, "#\n# Fatal libcurl error\n");
        free(array);
        if(!use_stdout)
          fclose(out);
        return 1;
      }
Changes to jni/curl/lib/cookie.h.
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
97
98
99
100
101
102
103

104
105
106
107
108
109
110







-







                               bool secure);

struct Cookie *Curl_cookie_getlist(struct CookieInfo *, const char *,
                                   const char *, bool);
void Curl_cookie_freelist(struct Cookie *cookies);
void Curl_cookie_clearall(struct CookieInfo *cookies);
void Curl_cookie_clearsess(struct CookieInfo *cookies);
char *Curl_get_line(char *buf, int len, FILE *input);

#if defined(CURL_DISABLE_HTTP) || defined(CURL_DISABLE_COOKIES)
#define Curl_cookie_list(x) NULL
#define Curl_cookie_loadfiles(x) Curl_nop_stmt
#define Curl_cookie_init(x,y,z,w) NULL
#define Curl_cookie_cleanup(x) Curl_nop_stmt
#define Curl_flush_cookies(x,y) Curl_nop_stmt
Changes to jni/curl/lib/curl_config.h.cmake.
230
231
232
233
234
235
236






237
238
239
240
241
242
243
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249







+
+
+
+
+
+







#cmakedefine HAVE_GETPASS_R 1

/* Define to 1 if you have the `getppid' function. */
#cmakedefine HAVE_GETPPID 1

/* Define to 1 if you have the `getprotobyname' function. */
#cmakedefine HAVE_GETPROTOBYNAME 1

/* Define to 1 if you have the `getpeername' function. */
#cmakedefine HAVE_GETPEERNAME 1

/* Define to 1 if you have the `getsockname' function. */
#cmakedefine HAVE_GETSOCKNAME 1

/* Define to 1 if you have the `getpwuid' function. */
#cmakedefine HAVE_GETPWUID 1

/* Define to 1 if you have the `getpwuid_r' function. */
#cmakedefine HAVE_GETPWUID_R 1

926
927
928
929
930
931
932
933
934


935
936
937
938
939
940
941
932
933
934
935
936
937
938


939
940
941
942
943
944
945
946
947







-
-
+
+








/* if GnuTLS is enabled */
#cmakedefine USE_GNUTLS 1

/* if PolarSSL is enabled */
#cmakedefine USE_POLARSSL 1

/* if DarwinSSL is enabled */
#cmakedefine USE_DARWINSSL 1
/* if Secure Transport is enabled */
#cmakedefine USE_SECTRANSP 1

/* if mbedTLS is enabled */
#cmakedefine USE_MBEDTLS 1

/* if libSSH2 is in use */
#cmakedefine USE_LIBSSH2 1

Changes to jni/curl/lib/curl_config.h.in.
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
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







+
+
+















+
+
+







#undef HAVE_GETHOSTNAME

/* Define to 1 if you have a working getifaddrs function. */
#undef HAVE_GETIFADDRS

/* Define to 1 if you have the `getpass_r' function. */
#undef HAVE_GETPASS_R

/* Define to 1 if you have the getpeername function. */
#undef HAVE_GETPEERNAME

/* Define to 1 if you have the `getppid' function. */
#undef HAVE_GETPPID

/* Define to 1 if you have the `getpwuid' function. */
#undef HAVE_GETPWUID

/* Define to 1 if you have the `getpwuid_r' function. */
#undef HAVE_GETPWUID_R

/* Define to 1 if you have the `getrlimit' function. */
#undef HAVE_GETRLIMIT

/* Define to 1 if you have the getservbyport_r function. */
#undef HAVE_GETSERVBYPORT_R

/* Define to 1 if you have the getsockname function. */
#undef HAVE_GETSOCKNAME

/* Define to 1 if you have the `gettimeofday' function. */
#undef HAVE_GETTIMEOFDAY

/* Define to 1 if you have a working glibc-style strerror_r function. */
#undef HAVE_GLIBC_STRERROR_R

Changes to jni/curl/lib/curl_fnmatch.c.
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
28
29
30
31
32
33
34









35
36
37
38
39
40
41







-
-
-
-
-
-
-
-
-







#include "curl_memory.h"

/* The last #include file should be: */
#include "memdebug.h"

#ifndef HAVE_FNMATCH

/*
 * TODO:
 *
 * Make this function match POSIX. Test 1307 includes a set of test patterns
 * that returns different results with a POSIX fnmatch() than with this
 * implementation and this is considered a bug where POSIX is the guiding
 * light.
 */

#define CURLFNM_CHARSET_LEN (sizeof(char) * 256)
#define CURLFNM_CHSET_SIZE (CURLFNM_CHARSET_LEN + 15)

#define CURLFNM_NEGATE  CURLFNM_CHARSET_LEN

#define CURLFNM_ALNUM   (CURLFNM_CHARSET_LEN + 1)
#define CURLFNM_DIGIT   (CURLFNM_CHARSET_LEN + 2)
Added jni/curl/lib/curl_get_line.c.























































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#include "curl_get_line.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/*
 * get_line() makes sure to only return complete whole lines that fit in 'len'
 * bytes and end with a newline.
 */
char *Curl_get_line(char *buf, int len, FILE *input)
{
  bool partial = FALSE;
  while(1) {
    char *b = fgets(buf, len, input);
    if(b) {
      size_t rlen = strlen(b);
      if(rlen && (b[rlen-1] == '\n')) {
        if(partial) {
          partial = FALSE;
          continue;
        }
        return b;
      }
      /* read a partial, discard the next piece that ends with newline */
      partial = TRUE;
    }
    else
      break;
  }
  return NULL;
}
Added jni/curl/lib/curl_get_line.h.





























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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
#ifndef HEADER_CURL_GET_LINE_H
#define HEADER_CURL_GET_LINE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

/* get_line() makes sure to only return complete whole lines that fit in 'len'
 * bytes and end with a newline. */
char *Curl_get_line(char *buf, int len, FILE *input);

#endif /* HEADER_CURL_GET_LINE_H */
Changes to jni/curl/lib/curl_md4.h.
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
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









-
+

















+





+



#ifndef HEADER_CURL_MD4_H
#define HEADER_CURL_MD4_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#if defined(USE_NSS) || defined(USE_OS400CRYPTO) || \
    (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \
    (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C))

void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len);

#endif /* defined(USE_NSS) || defined(USE_OS400CRYPTO) ||
    (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) ||
    (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */

#endif /* HEADER_CURL_MD4_H */
Changes to jni/curl/lib/curl_md5.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_MD5_H
#define HEADER_CURL_MD5_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
49
50
51
52
53
54
55
56
57
58
59




60
61
62
63
49
50
51
52
53
54
55




56
57
58
59
60
61
62
63







-
-
-
-
+
+
+
+




extern const MD5_params Curl_DIGEST_MD5[1];
extern const HMAC_params Curl_HMAC_MD5[1];

void Curl_md5it(unsigned char *output,
                const unsigned char *input);

MD5_context * Curl_MD5_init(const MD5_params *md5params);
int Curl_MD5_update(MD5_context *context,
                    const unsigned char *data,
                    unsigned int len);
int Curl_MD5_final(MD5_context *context, unsigned char *result);
CURLcode Curl_MD5_update(MD5_context *context,
                         const unsigned char *data,
                         unsigned int len);
CURLcode Curl_MD5_final(MD5_context *context, unsigned char *result);

#endif

#endif /* HEADER_CURL_MD5_H */
Changes to jni/curl/lib/curl_memory.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_MEMORY_H
#define HEADER_CURL_MEMORY_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
35
36
37
38
39
40
41
42

43
44
45
46
47
48
49
35
36
37
38
39
40
41

42
43
44
45
46
47
48
49







-
+







 * There is nearly no exception to above rule. All libcurl source
 * files in 'lib' subdirectory as well as those living deep inside
 * 'packages' subdirectories and linked together in order to build
 * libcurl library shall follow it.
 *
 * File lib/strdup.c is an exception, given that it provides a strdup
 * clone implementation while using malloc. Extra care needed inside
 * this one. TODO: revisit this paragraph and related code.
 * this one.
 *
 * The need for curl_memory.h inclusion is due to libcurl's feature
 * of allowing library user to provide memory replacement functions,
 * memory callbacks, at runtime with curl_global_init_mem()
 *
 * Any *.c source file used to build libcurl library that does not
 * include curl_memory.h and uses any memory function of the five
Changes to jni/curl/lib/curl_ntlm_core.c.
53
54
55
56
57
58
59


60
61
62
63
64
65
66
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







+
+







#if !defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO)

#ifdef USE_OPENSSL

#  include <openssl/des.h>
#  ifndef OPENSSL_NO_MD4
#    include <openssl/md4.h>
#  else
#    include "curl_md4.h"
#  endif
#  include <openssl/md5.h>
#  include <openssl/ssl.h>
#  include <openssl/rand.h>
#  if (OPENSSL_VERSION_NUMBER < 0x00907001L)
#    define DES_key_schedule des_key_schedule
#    define DES_cblock des_cblock
564
565
566
567
568
569
570

571
572
573
574



575
576
577
578
579
580
581
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587







+




+
+
+







  result = Curl_convert_to_network(data, (char *)pw, len * 2);
  if(result)
    return result;

  {
    /* Create NT hashed password. */
#ifdef USE_OPENSSL
#if !defined(OPENSSL_NO_MD4)
    MD4_CTX MD4pw;
    MD4_Init(&MD4pw);
    MD4_Update(&MD4pw, pw, 2 * len);
    MD4_Final(ntbuffer, &MD4pw);
#else
    Curl_md4it(ntbuffer, pw, 2 * len);
#endif
#elif defined(USE_GNUTLS_NETTLE)
    struct md4_ctx MD4pw;
    md4_init(&MD4pw);
    md4_update(&MD4pw, (unsigned int)(2 * len), pw);
    md4_digest(&MD4pw, MD4_DIGEST_SIZE, ntbuffer);
#elif defined(USE_GNUTLS)
    gcry_md_hd_t MD4pw;
Changes to jni/curl/lib/curl_ntlm_core.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_NTLM_CORE_H
#define HEADER_CURL_NTLM_CORE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
39
40
41
42
43
44
45

46

47
48
49
50
51
52
53







-

-








#ifdef USE_OPENSSL
#  include <openssl/ssl.h>
#endif

/* Define USE_NTRESPONSES in order to make the type-3 message include
 * the NT response message. */
#if !defined(USE_OPENSSL) || !defined(OPENSSL_NO_MD4)
#define USE_NTRESPONSES
#endif

/* Define USE_NTLM2SESSION in order to make the type-3 message include the
   NTLM2Session response message, requires USE_NTRESPONSES defined to 1 and a
   Crypto engine that we have curl_ssl_md5sum() for. */
#if defined(USE_NTRESPONSES) && !defined(USE_WIN32_CRYPTO)
#define USE_NTLM2SESSION
#endif
Changes to jni/curl/lib/curl_ntlm_wb.c.
49
50
51
52
53
54
55


56
57
58
59
60
61
62
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64







+
+







#include "select.h"
#include "vauth/ntlm.h"
#include "curl_ntlm_core.h"
#include "curl_ntlm_wb.h"
#include "url.h"
#include "strerror.h"
#include "strdup.h"
#include "strcase.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

#if DEBUG_ME
# define DEBUG_OUT(x) x
70
71
72
73
74
75
76
77

78
79
80
81
82
83
84
72
73
74
75
76
77
78

79
80
81
82
83
84
85
86







-
+







#  define sclose_nolog(x)  closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL)
#  define sclose_nolog(x)  CloseSocket((x))
#else
#  define sclose_nolog(x)  close((x))
#endif

void Curl_ntlm_wb_cleanup(struct connectdata *conn)
void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn)
{
  if(conn->ntlm_auth_hlpr_socket != CURL_SOCKET_BAD) {
    sclose(conn->ntlm_auth_hlpr_socket);
    conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
  }

  if(conn->ntlm_auth_hlpr_pid) {
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
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+













-
-
+











-
+





-
+








-
+


















-
+













+




-
+










-
+

-
+



+



+
+
+
-
+
-








  if(!conn->response_header)
    return CURLE_OUT_OF_MEMORY;
  return CURLE_OK;
done:
  free(buf);
  return CURLE_REMOTE_ACCESS_DENIED;
}

CURLcode Curl_input_ntlm_wb(struct connectdata *conn,
                            bool proxy,
                            const char *header)
{
  curlntlm *state = proxy ? &conn->proxy_ntlm_state : &conn->http_ntlm_state;

  if(!checkprefix("NTLM", header))
    return CURLE_BAD_CONTENT_ENCODING;

  header += strlen("NTLM");
  while(*header && ISSPACE(*header))
    header++;

  if(*header) {
    conn->challenge_header = strdup(header);
    if(!conn->challenge_header)
      return CURLE_OUT_OF_MEMORY;

    *state = NTLMSTATE_TYPE2; /* We got a type-2 message */
  }
  else {
    if(*state == NTLMSTATE_LAST) {
      infof(conn->data, "NTLM auth restarted\n");
      Curl_http_auth_cleanup_ntlm_wb(conn);
    }
    else if(*state == NTLMSTATE_TYPE3) {
      infof(conn->data, "NTLM handshake rejected\n");
      Curl_http_auth_cleanup_ntlm_wb(conn);
      *state = NTLMSTATE_NONE;
      return CURLE_REMOTE_ACCESS_DENIED;
    }
    else if(*state >= NTLMSTATE_TYPE1) {
      infof(conn->data, "NTLM handshake failure (internal error)\n");
      return CURLE_REMOTE_ACCESS_DENIED;
    }

    *state = NTLMSTATE_TYPE1; /* We should send away a type-1 */
  }

  return CURLE_OK;
}

/*
 * This is for creating ntlm header output by delegating challenge/response
 * to Samba's winbind daemon helper ntlm_auth.
 */
CURLcode Curl_output_ntlm_wb(struct connectdata *conn,
                              bool proxy)
{
  /* point to the address of the pointer that holds the string to send to the
     server, which is for a plain host or for a HTTP proxy */
  char **allocuserpwd;
  /* point to the name and password for this */
  const char *userp;
  /* point to the correct struct with this */
  struct ntlmdata *ntlm;
  curlntlm *state;
  struct auth *authp;

  CURLcode res = CURLE_OK;
  char *input;

  DEBUGASSERT(conn);
  DEBUGASSERT(conn->data);

  if(proxy) {
    allocuserpwd = &conn->allocptr.proxyuserpwd;
    userp = conn->http_proxy.user;
    ntlm = &conn->proxyntlm;
    state = &conn->proxy_ntlm_state;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;
    ntlm = &conn->ntlm;
    state = &conn->http_ntlm_state;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
    userp = "";

  switch(ntlm->state) {
  switch(*state) {
  case NTLMSTATE_TYPE1:
  default:
    /* Use Samba's 'winbind' daemon to support NTLM authentication,
     * by delegating the NTLM challenge/response protocol to a helper
     * in ntlm_auth.
     * http://devel.squid-cache.org/ntlm/squid_helper_protocol.html
     * https://www.samba.org/samba/docs/man/manpages-3/winbindd.8.html
     * https://www.samba.org/samba/docs/man/manpages-3/ntlm_auth.1.html
     * Preprocessor symbol 'NTLM_WB_ENABLED' is defined when this
     * feature is enabled and 'NTLM_WB_FILE' symbol holds absolute
     * filename of ntlm_auth helper.
     * If NTLM authentication using winbind fails, go back to original
     * request handling process.
     */
    /* Create communication with ntlm_auth */
    res = ntlm_wb_init(conn, userp);
    if(res)
      return res;
    res = ntlm_wb_response(conn, "YR\n", ntlm->state);
    res = ntlm_wb_response(conn, "YR\n", *state);
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                            proxy ? "Proxy-" : "",
                            conn->response_header);
    DEBUG_OUT(fprintf(stderr, "**** Header %s\n ", *allocuserpwd));
    free(conn->response_header);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    conn->response_header = NULL;
    break;

  case NTLMSTATE_TYPE2:
    input = aprintf("TT %s\n", conn->challenge_header);
    if(!input)
      return CURLE_OUT_OF_MEMORY;
    res = ntlm_wb_response(conn, input, ntlm->state);
    res = ntlm_wb_response(conn, input, *state);
    free(input);
    input = NULL;
    if(res)
      return res;

    free(*allocuserpwd);
    *allocuserpwd = aprintf("%sAuthorization: %s\r\n",
                            proxy ? "Proxy-" : "",
                            conn->response_header);
    DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));
    ntlm->state = NTLMSTATE_TYPE3; /* we sent a type-3 */
    *state = NTLMSTATE_TYPE3; /* we sent a type-3 */
    authp->done = TRUE;
    Curl_ntlm_wb_cleanup(conn);
    Curl_http_auth_cleanup_ntlm_wb(conn);
    if(!*allocuserpwd)
      return CURLE_OUT_OF_MEMORY;
    break;

  case NTLMSTATE_TYPE3:
    /* connection is already authenticated,
     * don't send a header in future requests */
    *state = NTLMSTATE_LAST;
    /* FALLTHROUGH */
  case NTLMSTATE_LAST:
    free(*allocuserpwd);
    Curl_safefree(*allocuserpwd);
    *allocuserpwd = NULL;
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}

#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */
Changes to jni/curl/lib/curl_ntlm_wb.h.
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
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









-
+



















+
+
+
+
-
+
-


-
+




#ifndef HEADER_CURL_NTLM_WB_H
#define HEADER_CURL_NTLM_WB_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
    defined(NTLM_WB_ENABLED)

/* this is for ntlm header input */
CURLcode Curl_input_ntlm_wb(struct connectdata *conn, bool proxy,
                            const char *header);

/* this is for creating ntlm header output by delegating challenge/response
/* this is for creating ntlm header output */
   to Samba's winbind daemon helper ntlm_auth */
CURLcode Curl_output_ntlm_wb(struct connectdata *conn, bool proxy);

void Curl_ntlm_wb_cleanup(struct connectdata *conn);
void Curl_http_auth_cleanup_ntlm_wb(struct connectdata *conn);

#endif /* !CURL_DISABLE_HTTP && USE_NTLM && NTLM_WB_ENABLED */

#endif /* HEADER_CURL_NTLM_WB_H */
Changes to jni/curl/lib/curl_path.c.
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32







-
+







 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
#if defined(USE_SSH)

#include <curl/curl.h>
#include "curl_memory.h"
#include "curl_path.h"
#include "escape.h"
#include "memdebug.h"

Changes to jni/curl/lib/curl_sasl.c.
27
28
29
30
31
32
33



34
35
36
37
38
39
40
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43







+
+
+







 * RFC7628 A Set of SASL Mechanisms for OAuth
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
  !defined(CURL_DISABLE_POP3)

#include <curl/curl.h>
#include "urldata.h"

#include "curl_base64.h"
#include "curl_md5.h"
#include "vauth/vauth.h"
#include "vtls/vtls.h"
79
80
81
82
83
84
85
86

87
88
89
90
91
92
93

94
95
96
97
98
99
100
82
83
84
85
86
87
88

89
90
91
92
93
94
95

96
97
98
99
100
101
102
103







-
+






-
+







 * authused [in]     - The authentication mechanism used.
 */
void Curl_sasl_cleanup(struct connectdata *conn, unsigned int authused)
{
#if defined(USE_KERBEROS5)
  /* Cleanup the gssapi structure */
  if(authused == SASL_MECH_GSSAPI) {
    Curl_auth_gssapi_cleanup(&conn->krb5);
    Curl_auth_cleanup_gssapi(&conn->krb5);
  }
#endif

#if defined(USE_NTLM)
  /* Cleanup the NTLM structure */
  if(authused == SASL_MECH_NTLM) {
    Curl_auth_ntlm_cleanup(&conn->ntlm);
    Curl_auth_cleanup_ntlm(&conn->ntlm);
  }
#endif

#if !defined(USE_KERBEROS5) && !defined(USE_NTLM)
  /* Reserved for future use */
  (void)conn;
  (void)authused;
286
287
288
289
290
291
292
293

294
295
296
297
298
299
300
289
290
291
292
293
294
295

296
297
298
299
300
301
302
303







-
+







      result = Curl_auth_create_external_message(data, conn->user, &resp,
                                                 &len);
  }
  else if(conn->bits.user_passwd) {
#if defined(USE_KERBEROS5)
    if((enabledmechs & SASL_MECH_GSSAPI) && Curl_auth_is_gssapi_supported() &&
       Curl_auth_user_contains_domain(conn->user)) {
      sasl->mutual_auth = FALSE; /* TODO: Calculate mutual authentication */
      sasl->mutual_auth = FALSE;
      mech = SASL_MECH_STRING_GSSAPI;
      state1 = SASL_GSSAPI;
      state2 = SASL_GSSAPI_TOKEN;
      sasl->authused = SASL_MECH_GSSAPI;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_gssapi_user_message(data, conn->user,
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
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







-
+
-
-
-
+
+







-
-
+
+







    }
    else if((enabledmechs & SASL_MECH_XOAUTH2) && conn->oauth_bearer) {
      mech = SASL_MECH_STRING_XOAUTH2;
      state1 = SASL_OAUTH2;
      sasl->authused = SASL_MECH_XOAUTH2;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_oauth_bearer_message(data, conn->user,
        result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                       NULL, 0,
                                                       conn->oauth_bearer,
                                                       &resp, &len);
                                                        conn->oauth_bearer,
                                                        &resp, &len);
    }
    else if(enabledmechs & SASL_MECH_PLAIN) {
      mech = SASL_MECH_STRING_PLAIN;
      state1 = SASL_PLAIN;
      sasl->authused = SASL_MECH_PLAIN;

      if(force_ir || data->set.sasl_ir)
        result = Curl_auth_create_plain_message(data, conn->user, conn->passwd,
                                                &resp, &len);
        result = Curl_auth_create_plain_message(data, NULL, conn->user,
                                                conn->passwd, &resp, &len);
    }
    else if(enabledmechs & SASL_MECH_LOGIN) {
      mech = SASL_MECH_STRING_LOGIN;
      state1 = SASL_LOGIN;
      state2 = SASL_LOGIN_PASSWD;
      sasl->authused = SASL_MECH_LOGIN;

447
448
449
450
451
452
453
454
455


456
457
458
459
460
461
462
463
449
450
451
452
453
454
455


456
457

458
459
460
461
462
463
464







-
-
+
+
-







  }

  switch(sasl->state) {
  case SASL_STOP:
    *progress = SASL_DONE;
    return result;
  case SASL_PLAIN:
    result = Curl_auth_create_plain_message(data, conn->user, conn->passwd,
                                            &resp,
    result = Curl_auth_create_plain_message(data, NULL, conn->user,
                                            conn->passwd, &resp, &len);
                                            &len);
    break;
  case SASL_LOGIN:
    result = Curl_auth_create_login_message(data, conn->user, &resp, &len);
    newstate = SASL_LOGIN_PASSWD;
    break;
  case SASL_LOGIN_PASSWD:
    result = Curl_auth_create_login_message(data, conn->passwd, &resp, &len);
558
559
560
561
562
563
564
565

566
567
568


569
570
571
572
573
574
575
559
560
561
562
563
564
565

566



567
568
569
570
571
572
573
574
575







-
+
-
-
-
+
+







                                                     conn->oauth_bearer,
                                                     &resp, &len);

      /* Failures maybe sent by the server as continuations for OAUTHBEARER */
      newstate = SASL_OAUTH2_RESP;
    }
    else
      result = Curl_auth_create_oauth_bearer_message(data, conn->user,
      result = Curl_auth_create_xoauth_bearer_message(data, conn->user,
                                                     NULL, 0,
                                                     conn->oauth_bearer,
                                                     &resp, &len);
                                                      conn->oauth_bearer,
                                                      &resp, &len);
    break;

  case SASL_OAUTH2_RESP:
    /* The continuation is optional so check the response code */
    if(code == sasl->params->finalcode) {
      /* Final response was received so we are done */
      *progress = SASL_DONE;
622
623
624
625
626
627
628

622
623
624
625
626
627
628
629







+

  free(resp);

  state(sasl, conn, newstate);

  return result;
}
#endif /* protocols are enabled that use SASL */
Changes to jni/curl/lib/curl_setup.h.
681
682
683
684
685
686
687




688
689
690
691
692
693
694
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698







+
+
+
+








#endif
#endif

#ifdef CURL_WANTS_CA_BUNDLE_ENV
#error "No longer supported. Set CURLOPT_CAINFO at runtime instead."
#endif

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH) || defined(USE_WOLFSSH)
#define USE_SSH
#endif

/*
 * Provide a mechanism to silence picky compilers, such as gcc 4.6+.
 * Parameters should of course normally not be unused, but for example when
 * we have multiple implementations of the same interface it may happen.
 */

Changes to jni/curl/lib/doh.c.
18
19
20
21
22
23
24


25
26
27
28
29
30
31
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33







+
+







 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_DOH

#include "urldata.h"
#include "curl_addrinfo.h"
#include "doh.h"

#include "sendf.h"
#include "multiif.h"
#include "url.h"
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
580
581
582
583
584
585
586

587
588
589
590
591
592
593







-







                            DNStype dnstype,
                            struct dohentry *d)
{
  unsigned char rcode;
  unsigned short qdcount;
  unsigned short ancount;
  unsigned short type = 0;
  unsigned short class;
  unsigned short rdlength;
  unsigned short nscount;
  unsigned short arcount;
  unsigned int index = 12;
  DOHcode rc;

  if(dohlen < 12)
606
607
608
609
610
611
612

613
614
615
616
617
618
619
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621







+







      return DOH_DNS_OUT_OF_RANGE;
    index += 4; /* skip question's type and class */
    qdcount--;
  }

  ancount = get16bit(doh, 6);
  while(ancount) {
    unsigned short class;
    unsigned int ttl;

    rc = skipqname(doh, dohlen, &index);
    if(rc)
      return rc; /* bad qname */

    if(dohlen < (index + 2))
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
892
893
894
895
896
897
898


899
900
901
902
903
904
905







-
-







    return conn->bits.proxy?CURLE_COULDNT_RESOLVE_PROXY:
      CURLE_COULDNT_RESOLVE_HOST;
  }
  else if(!data->req.doh.pending) {
    DOHcode rc;
    DOHcode rc2;
    struct dohentry de;
    struct Curl_dns_entry *dns;
    struct Curl_addrinfo *ai;
    /* remove DOH handles from multi handle and close them */
    curl_multi_remove_handle(data->multi, data->req.doh.probe[0].easy);
    Curl_close(data->req.doh.probe[0].easy);
    curl_multi_remove_handle(data->multi, data->req.doh.probe[1].easy);
    Curl_close(data->req.doh.probe[1].easy);

    /* parse the responses, create the struct and return it! */
921
922
923
924
925
926
927



928
929
930
931
932
933
934
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937







+
+
+







    free(data->req.doh.probe[1].serverdoh.memory);
    if(rc2) {
      infof(data, "DOH: %s type %s for %s\n", doh_strerror(rc2),
            type2name(data->req.doh.probe[1].dnstype),
            data->req.doh.host);
    }
    if(!rc || !rc2) {
      struct Curl_dns_entry *dns;
      struct Curl_addrinfo *ai;

      infof(data, "DOH Host name: %s\n", data->req.doh.host);
      showdoh(data, &de);

      ai = doh2ai(&de, data->req.doh.host, data->req.doh.port);
      if(!ai) {
        de_cleanup(&de);
        return CURLE_OUT_OF_MEMORY;
956
957
958
959
960
961
962


959
960
961
962
963
964
965
966
967







+
+
    de_cleanup(&de);

    return CURLE_COULDNT_RESOLVE_HOST;
  }

  return CURLE_OK;
}

#endif /* CURL_DISABLE_DOH */
Changes to jni/curl/lib/doh.h.
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
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









-
+
















+
+







#ifndef HEADER_CURL_DOH_H
#define HEADER_CURL_DOH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "urldata.h"
#include "curl_addrinfo.h"

#ifndef CURL_DISABLE_DOH

/*
 * Curl_doh() resolve a name using DoH (DNS-over-HTTPS). It resolves a name
 * and returns a 'Curl_addrinfo *' with the address information.
 */

Curl_addrinfo *Curl_doh(struct connectdata *conn,
98
99
100
101
102
103
104






105
100
101
102
103
104
105
106
107
108
109
110
111
112
113







+
+
+
+
+
+

                   size_t *olen); /* output length */
DOHcode doh_decode(unsigned char *doh,
                   size_t dohlen,
                   DNStype dnstype,
                   struct dohentry *d);
void de_cleanup(struct dohentry *d);
#endif

#else /* if DOH is disabled */
#define Curl_doh(a,b,c,d) NULL
#define Curl_doh_is_resolved(x,y) CURLE_COULDNT_RESOLVE_HOST
#endif

#endif /* HEADER_CURL_DOH_H */
Changes to jni/curl/lib/easy.c.
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
261
262
263
264
265
266
267

268
269
270
271
272
273
274







-







{
  if(!initialized)
    return;

  if(--initialized)
    return;

  Curl_global_host_cache_dtor();
  Curl_ssl_cleanup();
  Curl_resolver_global_cleanup();

#ifdef WIN32
  Curl_win32_cleanup(init_flags);
#endif

424
425
426
427
428
429
430
431
432


433
434
435
436
437
438
439
423
424
425
426
427
428
429


430
431
432
433
434
435
436
437
438







-
-
+
+







        infof(easy, "socket cb: socket %d REMOVED\n", s);
      }
      else {
        /* The socket 's' is already being monitored, update the activity
           mask. Convert from libcurl bitmask to the poll one. */
        m->socket.events = socketcb2poll(what);
        infof(easy, "socket cb: socket %d UPDATED as %s%s\n", s,
              what&CURL_POLL_IN?"IN":"",
              what&CURL_POLL_OUT?"OUT":"");
              (what&CURL_POLL_IN)?"IN":"",
              (what&CURL_POLL_OUT)?"OUT":"");
      }
      break;
    }
    prev = m;
    m = m->next; /* move to next node */
  }
  if(!m) {
448
449
450
451
452
453
454
455
456


457
458
459
460
461
462
463
447
448
449
450
451
452
453


454
455
456
457
458
459
460
461
462







-
-
+
+







      if(m) {
        m->next = ev->list;
        m->socket.fd = s;
        m->socket.events = socketcb2poll(what);
        m->socket.revents = 0;
        ev->list = m;
        infof(easy, "socket cb: socket %d ADDED as %s%s\n", s,
              what&CURL_POLL_IN?"IN":"",
              what&CURL_POLL_OUT?"OUT":"");
              (what&CURL_POLL_IN)?"IN":"",
              (what&CURL_POLL_OUT)?"OUT":"");
      }
      else
        return CURLE_OUT_OF_MEMORY;
    }
  }

  return 0;
556
557
558
559
560
561
562
563

564
565
566
567
568
569
570
555
556
557
558
559
560
561

562
563
564
565
566
567
568
569







-
+







        }
      }
    }
    else
      return CURLE_RECV_ERROR;

    if(mcode)
      return CURLE_URL_MALFORMAT; /* TODO: return a proper error! */
      return CURLE_URL_MALFORMAT;

    /* we don't really care about the "msgs_in_queue" value returned in the
       second argument */
    msg = curl_multi_info_read(multi, &pollrc);
    if(msg) {
      result = msg->data.result;
      done = TRUE;
958
959
960
961
962
963
964
965




966
967
968
969
970
971
972
957
958
959
960
961
962
963

964
965
966
967
968
969
970
971
972
973
974







-
+
+
+
+








  data->progress.flags |= PGRS_HIDE;
  data->state.current_speed = -1; /* init to negative == impossible */

  /* zero out authentication data: */
  memset(&data->state.authhost, 0, sizeof(struct auth));
  memset(&data->state.authproxy, 0, sizeof(struct auth));
  Curl_digest_cleanup(data);

#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
  Curl_http_auth_cleanup_digest(data);
#endif
}

/*
 * curl_easy_pause() allows an application to pause or unpause a specific
 * transfer and direction. This function sets the full new state for the
 * current connection this easy handle operates on.
 *
Changes to jni/curl/lib/fileinfo.c.
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

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







-
+















-
+



















+
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_FTP
#include "strdup.h"
#include "fileinfo.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

struct fileinfo *Curl_fileinfo_alloc(void)
{
  return calloc(1, sizeof(struct fileinfo));
}

void Curl_fileinfo_cleanup(struct fileinfo *finfo)
{
  if(!finfo)
    return;

  Curl_safefree(finfo->info.b_data);
  free(finfo);
}
#endif
Changes to jni/curl/lib/formdata.c.
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
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







-
+


















+
-
+






-







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#include <curl/curl.h>

#include "formdata.h"
#ifndef CURL_DISABLE_HTTP
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)

#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
#endif

#include "urldata.h" /* for struct Curl_easy */
#include "formdata.h"
#include "mime.h"
#include "non-ascii.h"
#include "vtls/vtls.h"
#include "strcase.h"
#include "sendf.h"
#include "strdup.h"
#include "rand.h"
565
566
567
568
569
570
571
572

573
574
575
576
577
578
579
565
566
567
568
569
570
571

572
573
574
575
576
577
578
579







-
+







        ) {
        return_value = CURL_FORMADD_INCOMPLETE;
        break;
      }
      if(((form->flags & HTTPPOST_FILENAME) ||
          (form->flags & HTTPPOST_BUFFER)) &&
         !form->contenttype) {
        char *f = form->flags & HTTPPOST_BUFFER?
        char *f = (form->flags & HTTPPOST_BUFFER)?
          form->showfilename : form->value;
        char const *type;
        type = Curl_mime_contenttype(f);
        if(!type)
          type = prevtype;
        if(!type)
          type = FILE_CONTENTTYPE_DEFAULT;
917
918
919
920
921
922
923
924


925
926
927
928
929
930
931
917
918
919
920
921
922
923

924
925
926
927
928
929
930
931
932







-
+
+








  if(result)
    Curl_mime_cleanpart(finalform);

  return result;
}

#else  /* CURL_DISABLE_HTTP */
#else
/* if disabled */
CURLFORMcode curl_formadd(struct curl_httppost **httppost,
                          struct curl_httppost **last_post,
                          ...)
{
  (void)httppost;
  (void)last_post;
  return CURL_FORMADD_DISABLED;
942
943
944
945
946
947
948
949

950
943
944
945
946
947
948
949

950








-
+
-

void curl_formfree(struct curl_httppost *form)
{
  (void)form;
  /* does nothing HTTP is disabled */
}


#endif  /* if disabled */
#endif  /* !defined(CURL_DISABLE_HTTP) */
Changes to jni/curl/lib/formdata.h.
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
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









-
+














+
+
+
+







#ifndef HEADER_CURL_FORMDATA_H
#define HEADER_CURL_FORMDATA_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_MIME

/* used by FormAdd for temporary storage */
typedef struct FormInfo {
  char *name;
  bool name_alloc;
  size_t namelength;
  char *value;
  bool value_alloc;
43
44
45
46
47
48
49




50

51
47
48
49
50
51
52
53
54
55
56
57
58
59
60







+
+
+
+

+

  struct FormInfo *more;
} FormInfo;

CURLcode Curl_getformdata(struct Curl_easy *data,
                          curl_mimepart *,
                          struct curl_httppost *post,
                          curl_read_callback fread_func);
#else
/* disabled */
#define Curl_getformdata(a,b,c,d) CURLE_NOT_BUILT_IN
#endif


#endif /* HEADER_CURL_FORMDATA_H */
Changes to jni/curl/lib/ftp.c.
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
568
569
570
571
572
573
574

575
576
577
578
579
580
581







-







  CURLcode result = CURLE_OK;
  int code;

  result = Curl_pp_readresp(sockfd, pp, &code, size);

#if defined(HAVE_GSSAPI)
  /* handle the security-oriented responses 6xx ***/
  /* FIXME: some errorchecking perhaps... ***/
  switch(code) {
  case 631:
    code = Curl_sec_read_msg(conn, buf, PROT_SAFE);
    break;
  case 632:
    code = Curl_sec_read_msg(conn, buf, PROT_PRIVATE);
    break;
1076
1077
1078
1079
1080
1081
1082
1083

1084
1085
1086
1087
1088
1089
1090
1075
1076
1077
1078
1079
1080
1081

1082
1083
1084
1085
1086
1087
1088
1089







-
+







      break;
    }
    host = hbuf; /* use this host name */
    possibly_non_local = FALSE; /* we know it is local now */
  }

  /* resolv ip/host to ip */
  rc = Curl_resolv(conn, host, 0, &h);
  rc = Curl_resolv(conn, host, 0, FALSE, &h);
  if(rc == CURLRESOLV_PENDING)
    (void)Curl_resolver_wait_resolv(conn, &h);
  if(h) {
    res = h->addr;
    /* when we return from this function, we can forget about this entry
       to we can unlock it now already */
    Curl_resolv_unlock(data, h);
1930
1931
1932
1933
1934
1935
1936
1937

1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953

1954
1955
1956
1957
1958
1959
1960
1929
1930
1931
1932
1933
1934
1935

1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951

1952
1953
1954
1955
1956
1957
1958
1959







-
+















-
+







    /*
     * This connection uses a proxy and we need to connect to the proxy again
     * here. We don't want to rely on a former host lookup that might've
     * expired now, instead we remake the lookup here and now!
     */
    const char * const host_name = conn->bits.socksproxy ?
      conn->socks_proxy.host.name : conn->http_proxy.host.name;
    rc = Curl_resolv(conn, host_name, (int)conn->port, &addr);
    rc = Curl_resolv(conn, host_name, (int)conn->port, FALSE, &addr);
    if(rc == CURLRESOLV_PENDING)
      /* BLOCKING, ignores the return code but 'addr' will be NULL in
         case of failure */
      (void)Curl_resolver_wait_resolv(conn, &addr);

    connectport =
      (unsigned short)conn->port; /* we connect to the proxy's port */

    if(!addr) {
      failf(data, "Can't resolve proxy host %s:%hu", host_name, connectport);
      return CURLE_COULDNT_RESOLVE_PROXY;
    }
  }
  else {
    /* normal, direct, ftp connection */
    rc = Curl_resolv(conn, ftpc->newhost, ftpc->newport, &addr);
    rc = Curl_resolv(conn, ftpc->newhost, ftpc->newport, FALSE, &addr);
    if(rc == CURLRESOLV_PENDING)
      /* BLOCKING */
      (void)Curl_resolver_wait_resolv(conn, &addr);

    connectport = ftpc->newport; /* we connect to the remote port */

    if(!addr) {
3486
3487
3488
3489
3490
3491
3492
3493

3494
3495
3496
3497
3498
3499
3500
3485
3486
3487
3488
3489
3490
3491

3492
3493
3494
3495
3496
3497
3498
3499







-
+







  /* the ftp struct is inited in ftp_connect() */
  struct FTP *ftp = data->req.protop;

  /* if the second connection isn't done yet, wait for it */
  if(!conn->bits.tcpconnect[SECONDARYSOCKET]) {
    if(Curl_connect_ongoing(conn)) {
      /* As we're in TUNNEL_CONNECT state now, we know the proxy name and port
         aren't used so we blank their arguments. TODO: make this nicer */
         aren't used so we blank their arguments. */
      result = Curl_proxyCONNECT(conn, SECONDARYSOCKET, NULL, 0);

      return result;
    }

    result = Curl_is_connected(conn, SECONDARYSOCKET, &connected);

Changes to jni/curl/lib/ftplistparser.c.
910
911
912
913
914
915
916
917

918
919
920
921
922
923
924
925
926
927
910
911
912
913
914
915
916

917



918
919
920
921
922
923
924







-
+
-
-
-







          }
          break;
        }
        break;
      case PL_WINNT_DIRORSIZE:
        switch(parser->state.NT.sub.dirorsize) {
        case PL_WINNT_DIRORSIZE_PRESPACE:
          if(c == ' ') {
          if(c != ' ') {

          }
          else {
            parser->item_offset = finfo->b_used - 1;
            parser->item_length = 1;
            parser->state.NT.sub.dirorsize = PL_WINNT_DIRORSIZE_CONTENT;
          }
          break;
        case PL_WINNT_DIRORSIZE_CONTENT:
          parser->item_length ++;
Changes to jni/curl/lib/hostcheck.c.
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137

138
139

140
141
142
143
144
145
146
123
124
125
126
127
128
129


130
131
132
133
134

135
136

137
138
139
140
141
142
143
144







-
-





-
+

-
+







    strncasecompare(pattern_wildcard + 1, hostname_label_end - suffixlen,
                    suffixlen) ?
    CURL_HOST_MATCH : CURL_HOST_NOMATCH;
}

int Curl_cert_hostcheck(const char *match_pattern, const char *hostname)
{
  char *matchp;
  char *hostp;
  int res = 0;
  if(!match_pattern || !*match_pattern ||
      !hostname || !*hostname) /* sanity check */
    ;
  else {
    matchp = strdup(match_pattern);
    char *matchp = strdup(match_pattern);
    if(matchp) {
      hostp = strdup(hostname);
      char *hostp = strdup(hostname);
      if(hostp) {
        if(hostmatch(hostp, matchp) == CURL_HOST_MATCH)
          res = 1;
        free(hostp);
      }
      free(matchp);
    }
Changes to jni/curl/lib/hostip.c.
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
110
111
112
113
114
115
116




117
118






























119
120
121
122
123
124
125







-
-
-
-


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







 * asyn-ares.c   - functions for ares-using name resolves
 * asyn-thread.c - functions for threaded name resolves

 * The hostip.h is the united header file for all this. It defines the
 * CURLRES_* defines based on the config*.h and curl_setup.h defines.
 */

/* These two symbols are for the global DNS cache */
static struct curl_hash hostname_cache;
static int host_cache_initialized;

static void freednsentry(void *freethis);

/*
 * Curl_global_host_cache_init() initializes and sets up a global DNS cache.
 * Global DNS cache is general badness. Do not use. This will be removed in
 * a future version. Use the share interface instead!
 *
 * Returns a struct curl_hash pointer on success, NULL on failure.
 */
struct curl_hash *Curl_global_host_cache_init(void)
{
  int rc = 0;
  if(!host_cache_initialized) {
    rc = Curl_hash_init(&hostname_cache, 7, Curl_hash_str,
                        Curl_str_key_compare, freednsentry);
    if(!rc)
      host_cache_initialized = 1;
  }
  return rc?NULL:&hostname_cache;
}

/*
 * Destroy and cleanup the global DNS cache
 */
void Curl_global_host_cache_dtor(void)
{
  if(host_cache_initialized) {
    Curl_hash_destroy(&hostname_cache);
    host_cache_initialized = 0;
  }
}

/*
 * Return # of addresses in a Curl_addrinfo struct
 */
int Curl_num_addresses(const Curl_addrinfo *addr)
{
  int i = 0;
  while(addr) {
364
365
366
367
368
369
370

371
372
373
374
375
376
377
378
379
380
330
331
332
333
334
335
336
337
338
339

340
341
342
343
344
345
346







+


-








  if(data->share)
    Curl_share_unlock(data, CURL_LOCK_DATA_DNS);

  return dns;
}

#ifndef CURL_DISABLE_SHUFFLE_DNS
UNITTEST CURLcode Curl_shuffle_addr(struct Curl_easy *data,
                                    Curl_addrinfo **addr);

/*
 * Curl_shuffle_addr() shuffles the order of addresses in a 'Curl_addrinfo'
 * struct by re-linking its linked list.
 *
 * The addr argument should be the address of a pointer to the head node of a
 * `Curl_addrinfo` list and it will be modified to point to the new head after
 * shuffling.
431
432
433
434
435
436
437

438
439
440
441
442
443
444
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411







+







      free(nodes);
    }
    else
      result = CURLE_OUT_OF_MEMORY;
  }
  return result;
}
#endif

/*
 * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache.
 *
 * When calling Curl_resolv() has resulted in a response with a returned
 * address, we call this function to store the information in the dns
 * cache etc
452
453
454
455
456
457
458

459
460
461
462
463
464

465
466
467
468
469
470
471
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440







+






+







                int port)
{
  char entry_id[MAX_HOSTCACHE_LEN];
  size_t entry_len;
  struct Curl_dns_entry *dns;
  struct Curl_dns_entry *dns2;

#ifndef CURL_DISABLE_SHUFFLE_DNS
  /* shuffle addresses if requested */
  if(data->set.dns_shuffle_addresses) {
    CURLcode result = Curl_shuffle_addr(data, &addr);
    if(result)
      return NULL;
  }
#endif

  /* Create a new cache entry */
  dns = calloc(1, sizeof(struct Curl_dns_entry));
  if(!dns) {
    return NULL;
  }

512
513
514
515
516
517
518

519
520
521
522
523
524
525
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495







+







 * CURLRESOLV_RESOLVED (0) = OK, pointer provided
 * CURLRESOLV_PENDING  (1) = waiting for response, no pointer
 */

int Curl_resolv(struct connectdata *conn,
                const char *hostname,
                int port,
                bool allowDOH,
                struct Curl_dns_entry **entry)
{
  struct Curl_dns_entry *dns = NULL;
  struct Curl_easy *data = conn->data;
  CURLcode result;
  int rc = CURLRESOLV_ERROR; /* default to failure */

557
558
559
560
561
562
563
564

565
566
567
568
569
570
571
527
528
529
530
531
532
533

534
535
536
537
538
539
540
541







-
+







      st = data->set.resolver_start(data->state.resolver, NULL,
                                    data->set.resolver_start_client);
      Curl_set_in_callback(data, false);
      if(st)
        return CURLRESOLV_ERROR;
    }

    if(data->set.doh) {
    if(allowDOH && data->set.doh) {
      addr = Curl_doh(conn, hostname, port, &respwait);
    }
    else {
      /* If Curl_getaddrinfo() returns NULL, 'respwait' might be set to a
         non-zero value indicating that we need to wait for the response to the
         resolve call */
      addr = Curl_getaddrinfo(conn,
683
684
685
686
687
688
689
690

691
692
693
694
695
696
697
653
654
655
656
657
658
659

660
661
662
663
664
665
666
667







-
+







    /* Ignore the timeout when signals are disabled */
    timeout = 0;
  else
    timeout = (timeoutms > LONG_MAX) ? LONG_MAX : (long)timeoutms;

  if(!timeout)
    /* USE_ALARM_TIMEOUT defined, but no timeout actually requested */
    return Curl_resolv(conn, hostname, port, entry);
    return Curl_resolv(conn, hostname, port, TRUE, entry);

  if(timeout < 1000) {
    /* The alarm() function only provides integer second resolution, so if
       we want to wait less than one second we must bail out already now. */
    failf(data,
        "remaining timeout of %ld too small to resolve via SIGALRM method",
        timeout);
745
746
747
748
749
750
751
752

753
754
755
756
757
758
759
715
716
717
718
719
720
721

722
723
724
725
726
727
728
729







-
+







  (void)timeoutms; /* timeoutms not used with an async resolver */
#endif
#endif /* USE_ALARM_TIMEOUT */

  /* Perform the actual name resolution. This might be interrupted by an
   * alarm if it takes too long.
   */
  rc = Curl_resolv(conn, hostname, port, entry);
  rc = Curl_resolv(conn, hostname, port, TRUE, entry);

#ifdef USE_ALARM_TIMEOUT
clean_up:

  if(!prev_alarm)
    /* deactivate a possibly active alarm before uninstalling the handler */
    alarm(0);
Changes to jni/curl/lib/hostip.h.
79
80
81
82
83
84
85
86
87





88
89
90
91
92
93
94
79
80
81
82
83
84
85


86
87
88
89
90
91
92
93
94
95
96
97







-
-
+
+
+
+
+







 * use, or we'll leak memory!
 */
/* return codes */
#define CURLRESOLV_TIMEDOUT -2
#define CURLRESOLV_ERROR    -1
#define CURLRESOLV_RESOLVED  0
#define CURLRESOLV_PENDING   1
int Curl_resolv(struct connectdata *conn, const char *hostname,
                int port, struct Curl_dns_entry **dnsentry);
int Curl_resolv(struct connectdata *conn,
                const char *hostname,
                int port,
                bool allowDOH,
                struct Curl_dns_entry **dnsentry);
int Curl_resolv_timeout(struct connectdata *conn, const char *hostname,
                        int port, struct Curl_dns_entry **dnsentry,
                        time_t timeoutms);

#ifdef CURLRES_IPV6
/*
 * Curl_ipv6works() returns TRUE if IPv6 seems to work.
Changes to jni/curl/lib/hostip6.c.
98
99
100
101
102
103
104
105
106
107
108
109
110


111
112

113
114
115
116
117
118
119
98
99
100
101
102
103
104

105
106
107
108

109
110
111
112
113
114
115
116
117
118
119
120







-




-
+
+


+








#ifdef DEBUG_ADDRINFO
static void dump_addrinfo(struct connectdata *conn, const Curl_addrinfo *ai)
{
  printf("dump_addrinfo:\n");
  for(; ai; ai = ai->ai_next) {
    char buf[INET6_ADDRSTRLEN];
    char buffer[STRERROR_LEN];
    printf("    fam %2d, CNAME %s, ",
           ai->ai_family, ai->ai_canonname ? ai->ai_canonname : "<none>");
    if(Curl_printable_address(ai, buf, sizeof(buf)))
      printf("%s\n", buf);
    else
    else {
      char buffer[STRERROR_LEN];
      printf("failed; %s\n",
             Curl_strerror(SOCKERRNO, buffer, sizeof(buffer)));
    }
  }
}
#else
#define dump_addrinfo(x,y) Curl_nop_stmt
#endif

/*
Changes to jni/curl/lib/http.c.
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
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







-



















+

+







#include "strtoofft.h"
#include "multiif.h"
#include "strcase.h"
#include "content_encoding.h"
#include "http_proxy.h"
#include "warnless.h"
#include "non-ascii.h"
#include "pipeline.h"
#include "http2.h"
#include "connect.h"
#include "strdup.h"
#include "altsvc.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * Forward declarations.
 */

static int http_getsock_do(struct connectdata *conn,
                           curl_socket_t *socks,
                           int numsocks);
static int http_should_fail(struct connectdata *conn);

#ifndef CURL_DISABLE_PROXY
static CURLcode add_haproxy_protocol_header(struct connectdata *conn);
#endif

#ifdef USE_SSL
static CURLcode https_connecting(struct connectdata *conn, bool *done);
static int https_getsock(struct connectdata *conn,
                         curl_socket_t *socks,
                         int numsocks);
#else
173
174
175
176
177
178
179
180

181
182
183
184
185
186
187
174
175
176
177
178
179
180

181
182
183
184
185
186
187
188







-
+







  if(!CONN_INUSE(conn))
    /* if not already multi-using, setup connection details */
    Curl_http2_setup_conn(conn);
  Curl_http2_setup_req(data);
  return CURLE_OK;
}


#ifndef CURL_DISABLE_PROXY
/*
 * checkProxyHeaders() checks the linked list of custom proxy headers
 * if proxy headers are not available, then it will lookup into http header
 * link list
 *
 * It takes a connectdata struct as input instead of the Curl_easy simply to
 * know if this is a proxy request or not, as it then might check a different
200
201
202
203
204
205
206




207
208
209
210
211
212
213
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218







+
+
+
+







    if(strncasecompare(head->data, thisheader, thislen) &&
       Curl_headersep(head->data[thislen]))
      return head->data;
  }

  return NULL;
}
#else
/* disabled */
#define Curl_checkProxyheaders(x,y) NULL
#endif

/*
 * Strip off leading and trailing whitespace from the value in the
 * given HTTP header line and return a strdupped copy. Returns NULL in
 * case of allocation failure. Returns an empty string if the header value
 * consists entirely of whitespace.
 */
254
255
256
257
258
259
260

261
262
263
264
265
266
267
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273







+








  memcpy(value, start, len);
  value[len] = 0; /* zero terminate */

  return value;
}

#ifndef CURL_DISABLE_HTTP_AUTH
/*
 * http_output_basic() sets up an Authorization: header (or the proxy version)
 * for HTTP Basic authentication.
 *
 * Returns CURLcode.
 */
static CURLcode http_output_basic(struct connectdata *conn, bool proxy)
334
335
336
337
338
339
340


341
342
343
344
345
346
347
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355







+
+







    result = CURLE_OUT_OF_MEMORY;
    goto fail;
  }

  fail:
  return result;
}

#endif

/* pickoneauth() selects the most favourable authentication method from the
 * ones available and the ones we want.
 *
 * return TRUE if one was picked
 */
static bool pickoneauth(struct auth *pick, unsigned long mask)
454
455
456
457
458
459
460
461
462


463
464
465
466
467
468
469
462
463
464
465
466
467
468


469
470
471
472
473
474
475
476
477







-
-
+
+







#if defined(USE_NTLM)
    /* There is still data left to send */
    if((data->state.authproxy.picked == CURLAUTH_NTLM) ||
       (data->state.authhost.picked == CURLAUTH_NTLM) ||
       (data->state.authproxy.picked == CURLAUTH_NTLM_WB) ||
       (data->state.authhost.picked == CURLAUTH_NTLM_WB)) {
      if(((expectsend - bytessent) < 2000) ||
         (conn->ntlm.state != NTLMSTATE_NONE) ||
         (conn->proxyntlm.state != NTLMSTATE_NONE)) {
         (conn->http_ntlm_state != NTLMSTATE_NONE) ||
         (conn->proxy_ntlm_state != NTLMSTATE_NONE)) {
        /* The NTLM-negotiation has started *OR* there is just a little (<2K)
           data left to send, keep on sending. */

        /* rewind data when completely done sending! */
        if(!conn->bits.authneg && (conn->writesockfd != CURL_SOCKET_BAD)) {
          conn->bits.rewindaftersend = TRUE;
          infof(data, "Rewind stream after send\n");
482
483
484
485
486
487
488
489
490


491
492
493
494
495
496
497
490
491
492
493
494
495
496


497
498
499
500
501
502
503
504
505







-
-
+
+







    }
#endif
#if defined(USE_SPNEGO)
    /* There is still data left to send */
    if((data->state.authproxy.picked == CURLAUTH_NEGOTIATE) ||
       (data->state.authhost.picked == CURLAUTH_NEGOTIATE)) {
      if(((expectsend - bytessent) < 2000) ||
         (conn->negotiate.state != GSS_AUTHNONE) ||
         (conn->proxyneg.state != GSS_AUTHNONE)) {
         (conn->http_negotiate_state != GSS_AUTHNONE) ||
         (conn->proxy_negotiate_state != GSS_AUTHNONE)) {
        /* The NEGOTIATE-negotiation has started *OR*
        there is just a little (<2K) data left to send, keep on sending. */

        /* rewind data when completely done sending! */
        if(!conn->bits.authneg && (conn->writesockfd != CURL_SOCKET_BAD)) {
          conn->bits.rewindaftersend = TRUE;
          infof(data, "Rewind stream after send\n");
608
609
610
611
612
613
614

615
616
617
618
619
620
621
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630







+







          data->req.httpcode);
    result = CURLE_HTTP_RETURNED_ERROR;
  }

  return result;
}

#ifndef CURL_DISABLE_HTTP_AUTH
/*
 * Output the correct authentication header depending on the auth type
 * and whether or not it is to a proxy.
 */
static CURLcode
output_auth_headers(struct connectdata *conn,
                    struct auth *authstatus,
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
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+















-
-
+
+







  }
  else
    authhost->done = TRUE;

  return result;
}

#else
/* when disabled */
CURLcode
Curl_http_output_auth(struct connectdata *conn,
                      const char *request,
                      const char *path,
                      bool proxytunnel)
{
  (void)conn;
  (void)request;
  (void)path;
  (void)proxytunnel;
  return CURLE_OK;
}
#endif

/*
 * Curl_http_input_auth() deals with Proxy-Authenticate: and WWW-Authenticate:
 * headers. They are dealt with both in the transfer.c main loop and in the
 * proxy CONNECT loop.
 */

CURLcode Curl_http_input_auth(struct connectdata *conn, bool proxy,
                              const char *auth) /* the first non-space */
{
  /*
   * This resource requires authentication
   */
  struct Curl_easy *data = conn->data;

#ifdef USE_SPNEGO
  struct negotiatedata *negdata = proxy?
    &conn->proxyneg:&conn->negotiate;
  curlnegotiate *negstate = proxy ? &conn->proxy_negotiate_state :
                                    &conn->http_negotiate_state;
#endif
  unsigned long *availp;
  struct auth *authp;

  if(proxy) {
    availp = &data->info.proxyauthavail;
    authp = &data->state.authproxy;
859
860
861
862
863
864
865
866

867
868
869
870
871
872
873
884
885
886
887
888
889
890

891
892
893
894
895
896
897
898







-
+







          if(!result) {
            DEBUGASSERT(!data->req.newurl);
            data->req.newurl = strdup(data->change.url);
            if(!data->req.newurl)
              return CURLE_OUT_OF_MEMORY;
            data->state.authproblem = FALSE;
            /* we received a GSS auth token and we dealt with it fine */
            negdata->state = GSS_AUTHRECV;
            *negstate = GSS_AUTHRECV;
          }
          else
            data->state.authproblem = TRUE;
        }
      }
    }
    else
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
915
916
917
918
919
920
921





922
923




924
925




926
927
928
929
930
931
932







-
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-







#ifdef NTLM_WB_ENABLED
              if(authp->picked == CURLAUTH_NTLM_WB) {
                *availp &= ~CURLAUTH_NTLM;
                authp->avail &= ~CURLAUTH_NTLM;
                *availp |= CURLAUTH_NTLM_WB;
                authp->avail |= CURLAUTH_NTLM_WB;

                /* Get the challenge-message which will be passed to
                 * ntlm_auth for generating the type 3 message later */
                while(*auth && ISSPACE(*auth))
                  auth++;
                if(checkprefix("NTLM", auth)) {
                result = Curl_input_ntlm_wb(conn, proxy, auth);
                if(result) {
                  auth += strlen("NTLM");
                  while(*auth && ISSPACE(*auth))
                    auth++;
                  if(*auth) {
                  infof(data, "Authentication problem. Ignoring this.\n");
                  data->state.authproblem = TRUE;
                    conn->challenge_header = strdup(auth);
                    if(!conn->challenge_header)
                      return CURLE_OUT_OF_MEMORY;
                  }
                }
              }
#endif
            }
            else {
              infof(data, "Authentication problem. Ignoring this.\n");
              data->state.authproblem = TRUE;
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1292
1293
1294
1295
1296
1297
1298

1299
1300
1301
1302
1303
1304
1305







-







           when this function is used from the CONNECT sending function. We
           currently (stupidly) assume that the whole request is always sent
           away in the first single chunk.

           This needs FIXing.
        */
        return CURLE_SEND_ERROR;
      Curl_pipeline_leave_write(conn);
    }
  }
  Curl_add_buffer_free(&in);

  return result;
}

1453
1454
1455
1456
1457
1458
1459

1460
1461
1462
1463
1464
1465

1466
1467
1468
1469
1470
1471
1472
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489







+






+







  if(CONNECT_FIRSTSOCKET_PROXY_SSL())
    return CURLE_OK; /* wait for HTTPS proxy SSL initialization to complete */

  if(Curl_connect_ongoing(conn))
    /* nothing else to do except wait right now - we're not done here. */
    return CURLE_OK;

#ifndef CURL_DISABLE_PROXY
  if(conn->data->set.haproxyprotocol) {
    /* add HAProxy PROXY protocol header */
    result = add_haproxy_protocol_header(conn);
    if(result)
      return result;
  }
#endif

  if(conn->given->protocol & CURLPROTO_HTTPS) {
    /* perform SSL initialization */
    result = https_connecting(conn, done);
    if(result)
      return result;
  }
1485
1486
1487
1488
1489
1490
1491

1492
1493
1494
1495
1496
1497
1498
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516







+







{
  /* write mode */
  (void)numsocks; /* unused, we trust it to be at least 1 */
  socks[0] = conn->sock[FIRSTSOCKET];
  return GETSOCK_WRITESOCK(0);
}

#ifndef CURL_DISABLE_PROXY
static CURLcode add_haproxy_protocol_header(struct connectdata *conn)
{
  char proxy_header[128];
  Curl_send_buffer *req_buffer;
  CURLcode result;
  char tcp_version[5];

1525
1526
1527
1528
1529
1530
1531

1532
1533
1534
1535
1536
1537
1538
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557







+







                                conn,
                                &conn->data->info.request_size,
                                0,
                                FIRSTSOCKET);

  return result;
}
#endif

#ifdef USE_SSL
static CURLcode https_connecting(struct connectdata *conn, bool *done)
{
  CURLcode result;
  DEBUGASSERT((conn) && (conn->handler->flags & PROTOPT_SSL));

1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1704
1705
1706
1707
1708
1709
1710


1711
1712
1713
1714
1715
1716
1717







-
-







                                    struct Curl_easy *handle)
{
  char *ptr = NULL;
  CURLcode result = CURLE_OK;
  const char *endofline_native = NULL;
  const char *endofline_network = NULL;

  /* TODO: Maybe split Curl_add_custom_headers to make it reusable here */

  if(
#ifdef CURL_DO_LINEEND_CONV
     (handle->set.prefer_ascii) ||
#endif
     (handle->set.crlf)) {
    /* \n will become \r\n later on */
    endofline_native  = "\n";
1859
1860
1861
1862
1863
1864
1865

1866
1867
1868
1869
1870
1871
1872
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890







+







      headers = headers->next;
    }
  }

  return CURLE_OK;
}

#ifndef CURL_DISABLE_PARSEDATE
CURLcode Curl_add_timecondition(struct Curl_easy *data,
                                Curl_send_buffer *req_buffer)
{
  const struct tm *tm;
  struct tm keeptime;
  CURLcode result;
  char datestr[80];
1917
1918
1919
1920
1921
1922
1923










1924
1925
1926
1927
1928
1929
1930
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958







+
+
+
+
+
+
+
+
+
+







            tm->tm_min,
            tm->tm_sec);

  result = Curl_add_buffer(&req_buffer, datestr, strlen(datestr));

  return result;
}
#else
/* disabled */
CURLcode Curl_add_timecondition(struct Curl_easy *data,
                                Curl_send_buffer *req_buffer)
{
  (void)data;
  (void)req_buffer;
  return CURLE_OK;
}
#endif

/*
 * Curl_http() gets called from the generic multi_do() function when a HTTP
 * request is to be performed. This creates and sends a properly constructed
 * HTTP request.
 */
CURLcode Curl_http(struct connectdata *conn, bool *done)
1968
1969
1970
1971
1972
1973
1974







1975
1976
1977
1978
1979
1980
1981
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016







+
+
+
+
+
+
+







      /* continue with HTTP/1.1 when explicitly requested */
      break;
    default:
      /* Check if user wants to use HTTP/2 with clear TCP*/
#ifdef USE_NGHTTP2
      if(conn->data->set.httpversion ==
         CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE) {
        if(conn->bits.httpproxy && !conn->bits.tunnel_proxy) {
          /* We don't support HTTP/2 proxies yet. Also it's debatable whether
             or not this setting should apply to HTTP/2 proxies. */
          infof(data, "Ignoring HTTP/2 prior knowledge due to proxy\n");
          break;
        }

        DEBUGF(infof(data, "HTTP/2 over clean TCP\n"));
        conn->httpversion = 20;

        result = Curl_http2_switched(conn, NULL, 0);
        if(result)
          return result;
      }
2145
2146
2147
2148
2149
2150
2151

2152
2153
2154
2155
2156
2157
2158
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194







+







      return result;
    http->sendit = &http->form;
    break;
  default:
    http->sendit = NULL;
  }

#ifndef CURL_DISABLE_MIME
  if(http->sendit) {
    const char *cthdr = Curl_checkheaders(conn, "Content-Type");

    /* Read and seek body only. */
    http->sendit->flags |= MIME_BODY_ONLY;

    /* Prepare the mime structure headers & set content type. */
2169
2170
2171
2172
2173
2174
2175

2176
2177
2178
2179
2180
2181
2182
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219







+







    curl_mime_headers(http->sendit, NULL, 0);
    if(!result)
      result = Curl_mime_rewind(http->sendit);
    if(result)
      return result;
    http->postsize = Curl_mime_size(http->sendit);
  }
#endif

  ptr = Curl_checkheaders(conn, "Transfer-Encoding");
  if(ptr) {
    /* Some kind of TE is requested, check if 'chunked' is chosen */
    data->req.upload_chunky =
      Curl_compareheader(ptr, "Transfer-Encoding:", "chunked");
  }
2737
2738
2739
2740
2741
2742
2743

2744
2745
2746
2747
2748
2749
2750
2751
2752
2753

2754
2755
2756
2757
2758
2759
2760
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786
2787
2788
2789
2790
2791
2792
2793
2794
2795
2796
2797
2798
2799







+










+







      result = Curl_add_bufferf(&req_buffer,
                                "Content-Length: %" CURL_FORMAT_CURL_OFF_T
                                "\r\n", postsize);
      if(result)
        return result;
    }

#ifndef CURL_DISABLE_MIME
    /* Output mime-generated headers. */
    {
      struct curl_slist *hdr;

      for(hdr = http->sendit->curlheaders; hdr; hdr = hdr->next) {
        result = Curl_add_bufferf(&req_buffer, "%s\r\n", hdr->data);
        if(result)
          return result;
      }
    }
#endif

    /* For really small posts we don't use Expect: headers at all, and for
       the somewhat bigger ones we allow the app to disable it. Just make
       sure that the expect100header is always set to the preferred value
       here. */
    ptr = Curl_checkheaders(conn, "Expect");
    if(ptr) {
3368
3369
3370
3371
3372
3373
3374
3375

3376
3377

3378
3379
3380
3381
3382
3383
3384
3385

3386
3387

3388
3389
3390
3391

3392
3393

3394
3395

3396
3397

3398
3399
3400
3401
3402
3403
3404
3407
3408
3409
3410
3411
3412
3413

3414
3415

3416
3417
3418
3419
3420
3421
3422
3423

3424
3425

3426
3427
3428
3429

3430
3431

3432
3433

3434
3435

3436
3437
3438
3439
3440
3441
3442
3443







-
+

-
+







-
+

-
+



-
+

-
+

-
+

-
+







      }

      /* At this point we have some idea about the fate of the connection.
         If we are closing the connection it may result auth failure. */
#if defined(USE_NTLM)
      if(conn->bits.close &&
         (((data->req.httpcode == 401) &&
           (conn->ntlm.state == NTLMSTATE_TYPE2)) ||
           (conn->http_ntlm_state == NTLMSTATE_TYPE2)) ||
          ((data->req.httpcode == 407) &&
           (conn->proxyntlm.state == NTLMSTATE_TYPE2)))) {
           (conn->proxy_ntlm_state == NTLMSTATE_TYPE2)))) {
        infof(data, "Connection closure while negotiating auth (HTTP 1.0?)\n");
        data->state.authproblem = TRUE;
      }
#endif
#if defined(USE_SPNEGO)
      if(conn->bits.close &&
        (((data->req.httpcode == 401) &&
          (conn->negotiate.state == GSS_AUTHRECV)) ||
          (conn->http_negotiate_state == GSS_AUTHRECV)) ||
         ((data->req.httpcode == 407) &&
          (conn->proxyneg.state == GSS_AUTHRECV)))) {
          (conn->proxy_negotiate_state == GSS_AUTHRECV)))) {
        infof(data, "Connection closure while negotiating auth (HTTP 1.0?)\n");
        data->state.authproblem = TRUE;
      }
      if((conn->negotiate.state == GSS_AUTHDONE) &&
      if((conn->http_negotiate_state == GSS_AUTHDONE) &&
         (data->req.httpcode != 401)) {
        conn->negotiate.state = GSS_AUTHSUCC;
        conn->http_negotiate_state = GSS_AUTHSUCC;
      }
      if((conn->proxyneg.state == GSS_AUTHDONE) &&
      if((conn->proxy_negotiate_state == GSS_AUTHDONE) &&
         (data->req.httpcode != 407)) {
        conn->proxyneg.state = GSS_AUTHSUCC;
        conn->proxy_negotiate_state = GSS_AUTHSUCC;
      }
#endif
      /*
       * When all the headers have been parsed, see if we should give
       * up and return an error.
       */
      if(http_should_fail(conn)) {
3628
3629
3630
3631
3632
3633
3634




3635
3636
3637
3638
3639
3640
3641
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684







+
+
+
+







          conn->httpversion += 10 * httpversion_major;

          if(k->upgr101 == UPGR101_RECEIVED) {
            /* supposedly upgraded to http2 now */
            if(conn->httpversion != 20)
              infof(data, "Lying server, not serving HTTP/2\n");
          }
          if(conn->httpversion < 20) {
            conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
            infof(data, "Mark bundle as not supporting multiuse\n");
          }
        }
        else if(!nc) {
          /* this is the real world, not a Nirvana
             NCSA 1.5.x returns this crap when asked for HTTP/1.1
          */
          nc = sscanf(HEADER1, " HTTP %3d", &k->httpcode);
          conn->httpversion = 10;
3665
3666
3667
3668
3669
3670
3671
3672
3673
3674
3675
3676
3677
3678
3679
3708
3709
3710
3711
3712
3713
3714

3715
3716
3717
3718
3719
3720
3721







-







                    &separator,
                    &k->httpcode);
        if((nc == 4) && (' ' == separator)) {
          conn->rtspversion += 10 * rtspversion_major;
          conn->httpversion = 11; /* For us, RTSP acts like HTTP 1.1 */
        }
        else {
          /* TODO: do we care about the other cases here? */
          nc = 0;
        }
      }

      if(nc) {
        data->info.httpcode = k->httpcode;

3718
3719
3720
3721
3722
3723
3724
3725

3726
3727
3728

3729
3730
3731
3732
3733
3734
3735
3736
3737
3738
3739
3740
3741
3760
3761
3762
3763
3764
3765
3766

3767

3768

3769






3770
3771
3772
3773
3774
3775
3776







-
+
-

-
+
-
-
-
-
-
-








          /* HTTP/2 cannot blacklist multiplexing since it is a core
             functionality of the protocol */
          conn->bundle->multiuse = BUNDLE_MULTIPLEX;
        }
        else if(conn->httpversion >= 11 &&
                !conn->bits.close) {
          /* If HTTP version is >= 1.1 and connection is persistent
          /* If HTTP version is >= 1.1 and connection is persistent */
             server supports pipelining. */
          DEBUGF(infof(data,
                       "HTTP 1.1 or later with persistent connection, "
                       "HTTP 1.1 or later with persistent connection\n"));
                       "pipelining supported\n"));
          /* Activate pipelining if needed */
          if(conn->bundle) {
            if(!Curl_pipeline_site_blacklisted(data, conn))
              conn->bundle->multiuse = BUNDLE_PIPELINING;
          }
        }

        switch(k->httpcode) {
        case 304:
          /* (quote from RFC2616, section 10.3.5): The 304 response
           * MUST NOT contain a message-body, and thus is always
           * terminated by the first empty line after the header
3812
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837
3838
3847
3848
3849
3850
3851
3852
3853













3854
3855
3856
3857
3858
3859
3860







-
-
-
-
-
-
-
-
-
-
-
-
-







        /* ignore empty data */
        free(contenttype);
      else {
        Curl_safefree(data->info.contenttype);
        data->info.contenttype = contenttype;
      }
    }
    else if(checkprefix("Server:", k->p)) {
      if(conn->httpversion < 20) {
        /* only do this for non-h2 servers */
        char *server_name = Curl_copy_header_value(k->p);

        /* Turn off pipelining if the server version is blacklisted  */
        if(conn->bundle && (conn->bundle->multiuse == BUNDLE_PIPELINING)) {
          if(Curl_pipeline_server_blacklisted(data, server_name))
            conn->bundle->multiuse = BUNDLE_NO_MULTIUSE;
        }
        free(server_name);
      }
    }
    else if((conn->httpversion == 10) &&
            conn->bits.httpproxy &&
            Curl_compareheader(k->p,
                               "Proxy-Connection:", "keep-alive")) {
      /*
       * When a HTTP/1.0 reply comes when using a proxy, the
       * 'Proxy-Connection: keep-alive' line tells us the
Changes to jni/curl/lib/http2.c.
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
107
108
109
110
111
112
113


114
115
116
117
118
119
120







-
-







                                 int numsocks)
{
  const struct http_conn *c = &conn->proto.httpc;
  struct SingleRequest *k = &conn->data->req;
  int bitmap = GETSOCK_BLANK;
  (void)numsocks;

  /* TODO We should check underlying socket state if it is SSL socket
     because of renegotiation. */
  sock[0] = conn->sock[FIRSTSOCKET];

  /* in a HTTP/2 connection we can basically always get a frame so we should
     always be ready for one */
  bitmap |= GETSOCK_READSOCK(FIRSTSOCKET);

  /* we're still uploading or the HTTP/2 layer wants to send data */
616
617
618
619
620
621
622
623

624
625
626
627
628
629
630
614
615
616
617
618
619
620

621
622
623
624
625
626
627
628







-
+







  }
  fail:
  return rv;
}

/*
 * multi_connchanged() is called to tell that there is a connection in
 * this multi handle that has changed state (pipelining become possible, the
 * this multi handle that has changed state (multiplexing become possible, the
 * number of allowed streams changed or similar), and a subsequent use of this
 * multi handle should move CONNECT_PEND handles back to CONNECT to have them
 * retry.
 */
static void multi_connchanged(struct Curl_multi *multi)
{
  multi->recheckstate = TRUE;
966
967
968
969
970
971
972
973

974
975
976
977
978
979
980
964
965
966
967
968
969
970

971
972
973
974
975
976
977
978







-
+








  /* Store received PUSH_PROMISE headers to be used when the subsequent
     PUSH_PROMISE callback comes */
  if(frame->hd.type == NGHTTP2_PUSH_PROMISE) {
    char *h;

    if(!strcmp(":authority", (const char *)name)) {
      /* psuedo headers are lower case */
      /* pseudo headers are lower case */
      int rc = 0;
      char *check = aprintf("%s:%d", conn->host.name, conn->remote_port);
      if(!check)
        /* no memory */
        return NGHTTP2_ERR_CALLBACK_FAILURE;
      if(!Curl_strcasecompare(check, (const char *)value)) {
        /* This is push is not for the same authority that was asked for in
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852



1853
1854
1855
1856
1857
1858
1859
1841
1842
1843
1844
1845
1846
1847



1848
1849
1850
1851
1852
1853
1854
1855
1856
1857







-
-
-
+
+
+







  }
}

static ssize_t http2_send(struct connectdata *conn, int sockindex,
                          const void *mem, size_t len, CURLcode *err)
{
  /*
   * BIG TODO: Currently, we send request in this function, but this
   * function is also used to send request body. It would be nice to
   * add dedicated function for request.
   * Currently, we send request in this function, but this function is also
   * used to send request body. It would be nice to add dedicated function for
   * request.
   */
  int rv;
  struct http_conn *httpc = &conn->proto.httpc;
  struct HTTP *stream = conn->data->req.protop;
  nghttp2_nv *nva = NULL;
  size_t nheader;
  size_t i;
Changes to jni/curl/lib/http_digest.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
24
25
26
27
28
29
30

31
32
33
34
35
36
37
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38







+








#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)

#include "urldata.h"
#include "strcase.h"
#include "vauth/vauth.h"
#include "http_digest.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/* Test example headers:

167
168
169
170
171
172
173
174

175
176
177
178
179
180
168
169
170
171
172
173
174

175
176
177
178
179
180
181







-
+






    return CURLE_OUT_OF_MEMORY;

  authp->done = TRUE;

  return CURLE_OK;
}

void Curl_digest_cleanup(struct Curl_easy *data)
void Curl_http_auth_cleanup_digest(struct Curl_easy *data)
{
  Curl_auth_digest_cleanup(&data->state.digest);
  Curl_auth_digest_cleanup(&data->state.proxydigest);
}

#endif
Changes to jni/curl/lib/http_digest.h.
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
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









-
+















+
+










-
-
-
+
+
-
-
+


#ifndef HEADER_CURL_HTTP_DIGEST_H
#define HEADER_CURL_HTTP_DIGEST_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)

/* this is for digest header input */
CURLcode Curl_input_digest(struct connectdata *conn,
                           bool proxy, const char *header);

/* this is for creating digest header output */
CURLcode Curl_output_digest(struct connectdata *conn,
                            bool proxy,
                            const unsigned char *request,
                            const unsigned char *uripath);

#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
void Curl_digest_cleanup(struct Curl_easy *data);
#else
void Curl_http_auth_cleanup_digest(struct Curl_easy *data);

#define Curl_digest_cleanup(x) Curl_nop_stmt
#endif
#endif /* !CURL_DISABLE_HTTP && !CURL_DISABLE_CRYPTO_AUTH */

#endif /* HEADER_CURL_HTTP_DIGEST_H */
Changes to jni/curl/lib/http_negotiate.c.
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
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







+








+








+

















-
+

-
+

-
+


-
+














-
+










+
+







-
+




-
+






-
+

-
+


-
+



+
+
+
+
+
+
-
+







  const char *userp;
  const char *passwdp;
  const char *service;
  const char *host;

  /* Point to the correct struct with this */
  struct negotiatedata *neg_ctx;
  curlnegotiate state;

  if(proxy) {
    userp = conn->http_proxy.user;
    passwdp = conn->http_proxy.passwd;
    service = data->set.str[STRING_PROXY_SERVICE_NAME] ?
              data->set.str[STRING_PROXY_SERVICE_NAME] : "HTTP";
    host = conn->http_proxy.host.name;
    neg_ctx = &conn->proxyneg;
    state = conn->proxy_negotiate_state;
  }
  else {
    userp = conn->user;
    passwdp = conn->passwd;
    service = data->set.str[STRING_SERVICE_NAME] ?
              data->set.str[STRING_SERVICE_NAME] : "HTTP";
    host = conn->host.name;
    neg_ctx = &conn->negotiate;
    state = conn->http_negotiate_state;
  }

  /* Not set means empty */
  if(!userp)
    userp = "";

  if(!passwdp)
    passwdp = "";

  /* Obtain the input token, if any */
  header += strlen("Negotiate");
  while(*header && ISSPACE(*header))
    header++;

  len = strlen(header);
  neg_ctx->havenegdata = len != 0;
  if(!len) {
    if(neg_ctx->state == GSS_AUTHSUCC) {
    if(state == GSS_AUTHSUCC) {
      infof(conn->data, "Negotiate auth restarted\n");
      Curl_cleanup_negotiate(conn);
      Curl_http_auth_cleanup_negotiate(conn);
    }
    else if(neg_ctx->state != GSS_AUTHNONE) {
    else if(state != GSS_AUTHNONE) {
      /* The server rejected our authentication and hasn't supplied any more
      negotiation mechanisms */
      Curl_cleanup_negotiate(conn);
      Curl_http_auth_cleanup_negotiate(conn);
      return CURLE_LOGIN_DENIED;
    }
  }

  /* Supports SSL channel binding for Windows ISS extended protection */
#if defined(USE_WINDOWS_SSPI) && defined(SECPKG_ATTR_ENDPOINT_BINDINGS)
  neg_ctx->sslContext = conn->sslContext;
#endif

  /* Initialize the security context and decode our challenge */
  result = Curl_auth_decode_spnego_message(data, userp, passwdp, service,
                                           host, header, neg_ctx);

  if(result)
    Curl_auth_spnego_cleanup(neg_ctx);
    Curl_http_auth_cleanup_negotiate(conn);

  return result;
}

CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy)
{
  struct negotiatedata *neg_ctx = proxy ? &conn->proxyneg :
    &conn->negotiate;
  struct auth *authp = proxy ? &conn->data->state.authproxy :
    &conn->data->state.authhost;
  curlnegotiate *state = proxy ? &conn->proxy_negotiate_state :
                                 &conn->http_negotiate_state;
  char *base64 = NULL;
  size_t len = 0;
  char *userp;
  CURLcode result;

  authp->done = FALSE;

  if(neg_ctx->state == GSS_AUTHRECV) {
  if(*state == GSS_AUTHRECV) {
    if(neg_ctx->havenegdata) {
      neg_ctx->havemultiplerequests = TRUE;
    }
  }
  else if(neg_ctx->state == GSS_AUTHSUCC) {
  else if(*state == GSS_AUTHSUCC) {
    if(!neg_ctx->havenoauthpersist) {
      neg_ctx->noauthpersist = !neg_ctx->havemultiplerequests;
    }
  }

  if(neg_ctx->noauthpersist ||
    (neg_ctx->state != GSS_AUTHDONE && neg_ctx->state != GSS_AUTHSUCC)) {
    (*state != GSS_AUTHDONE && *state != GSS_AUTHSUCC)) {

    if(neg_ctx->noauthpersist && neg_ctx->state == GSS_AUTHSUCC) {
    if(neg_ctx->noauthpersist && *state == GSS_AUTHSUCC) {
      infof(conn->data, "Curl_output_negotiate, "
       "no persistent authentication: cleanup existing context");
      Curl_auth_spnego_cleanup(neg_ctx);
      Curl_http_auth_cleanup_negotiate(conn);
    }
    if(!neg_ctx->context) {
      result = Curl_input_negotiate(conn, proxy, "Negotiate");
      if(result == CURLE_LOGIN_DENIED) {
        /* negotiate auth failed, let's continue unauthenticated to stay
         * compatible with the behavior before curl-7_64_0-158-g6c6035532 */
        conn->data->state.authproblem = TRUE;
        return CURLE_OK;
      }
      if(result)
      else if(result)
        return result;
    }

    result = Curl_auth_create_spnego_message(conn->data,
      neg_ctx, &base64, &len);
    if(result)
      return result;
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
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







-
+



-
+





-
+





-
+










-
+

+
+
+
-
-
+
+




    free(base64);

    if(userp == NULL) {
      return CURLE_OUT_OF_MEMORY;
    }

    neg_ctx->state = GSS_AUTHSENT;
    *state = GSS_AUTHSENT;
  #ifdef HAVE_GSSAPI
    if(neg_ctx->status == GSS_S_COMPLETE ||
       neg_ctx->status == GSS_S_CONTINUE_NEEDED) {
      neg_ctx->state = GSS_AUTHDONE;
      *state = GSS_AUTHDONE;
    }
  #else
  #ifdef USE_WINDOWS_SSPI
    if(neg_ctx->status == SEC_E_OK ||
       neg_ctx->status == SEC_I_CONTINUE_NEEDED) {
      neg_ctx->state = GSS_AUTHDONE;
      *state = GSS_AUTHDONE;
    }
  #endif
  #endif
  }

  if(neg_ctx->state == GSS_AUTHDONE || neg_ctx->state == GSS_AUTHSUCC) {
  if(*state == GSS_AUTHDONE || *state == GSS_AUTHSUCC) {
    /* connection is already authenticated,
     * don't send a header in future requests */
    authp->done = TRUE;
  }

  neg_ctx->havenegdata = FALSE;

  return CURLE_OK;
}

void Curl_cleanup_negotiate(struct connectdata *conn)
void Curl_http_auth_cleanup_negotiate(struct connectdata *conn)
{
  conn->http_negotiate_state = GSS_AUTHNONE;
  conn->proxy_negotiate_state = GSS_AUTHNONE;

  Curl_auth_spnego_cleanup(&conn->negotiate);
  Curl_auth_spnego_cleanup(&conn->proxyneg);
  Curl_auth_cleanup_spnego(&conn->negotiate);
  Curl_auth_cleanup_spnego(&conn->proxyneg);
}

#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */
Changes to jni/curl/lib/http_negotiate.h.
18
19
20
21
22
23
24
25

26
27
28
29
30
31
32
33
34

35
36

37
38
18
19
20
21
22
23
24

25
26
27
28
29
30
31
32
33

34
35

36
37
38







-
+








-
+

-
+


 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#ifdef USE_SPNEGO
#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)

/* this is for Negotiate header input */
CURLcode Curl_input_negotiate(struct connectdata *conn, bool proxy,
                              const char *header);

/* this is for creating Negotiate header output */
CURLcode Curl_output_negotiate(struct connectdata *conn, bool proxy);

void Curl_cleanup_negotiate(struct connectdata *conn);
void Curl_http_auth_cleanup_negotiate(struct connectdata *conn);

#endif /* USE_SPNEGO */
#endif /* !CURL_DISABLE_HTTP && USE_SPNEGO */

#endif /* HEADER_CURL_HTTP_NEGOTIATE_H */
Changes to jni/curl/lib/http_ntlm.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
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







+



+












-
+


-
+

-
+

-
+

-
-
+
+


-
+




-
+







CURLcode Curl_input_ntlm(struct connectdata *conn,
                         bool proxy,         /* if proxy or not */
                         const char *header) /* rest of the www-authenticate:
                                                header */
{
  /* point to the correct struct with this */
  struct ntlmdata *ntlm;
  curlntlm *state;
  CURLcode result = CURLE_OK;

  ntlm = proxy ? &conn->proxyntlm : &conn->ntlm;
  state = proxy ? &conn->proxy_ntlm_state : &conn->http_ntlm_state;

  if(checkprefix("NTLM", header)) {
    header += strlen("NTLM");

    while(*header && ISSPACE(*header))
      header++;

    if(*header) {
      result = Curl_auth_decode_ntlm_type2_message(conn->data, header, ntlm);
      if(result)
        return result;

      ntlm->state = NTLMSTATE_TYPE2; /* We got a type-2 message */
      *state = NTLMSTATE_TYPE2; /* We got a type-2 message */
    }
    else {
      if(ntlm->state == NTLMSTATE_LAST) {
      if(*state == NTLMSTATE_LAST) {
        infof(conn->data, "NTLM auth restarted\n");
        Curl_http_ntlm_cleanup(conn);
        Curl_http_auth_cleanup_ntlm(conn);
      }
      else if(ntlm->state == NTLMSTATE_TYPE3) {
      else if(*state == NTLMSTATE_TYPE3) {
        infof(conn->data, "NTLM handshake rejected\n");
        Curl_http_ntlm_cleanup(conn);
        ntlm->state = NTLMSTATE_NONE;
        Curl_http_auth_cleanup_ntlm(conn);
        *state = NTLMSTATE_NONE;
        return CURLE_REMOTE_ACCESS_DENIED;
      }
      else if(ntlm->state >= NTLMSTATE_TYPE1) {
      else if(*state >= NTLMSTATE_TYPE1) {
        infof(conn->data, "NTLM handshake failure (internal error)\n");
        return CURLE_REMOTE_ACCESS_DENIED;
      }

      ntlm->state = NTLMSTATE_TYPE1; /* We should send away a type-1 */
      *state = NTLMSTATE_TYPE1; /* We should send away a type-1 */
    }
  }

  return result;
}

/*
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
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







+


















+










+







  const char *userp;
  const char *passwdp;
  const char *service = NULL;
  const char *hostname = NULL;

  /* point to the correct struct with this */
  struct ntlmdata *ntlm;
  curlntlm *state;
  struct auth *authp;

  DEBUGASSERT(conn);
  DEBUGASSERT(conn->data);

#if defined(NTLM_NEEDS_NSS_INIT)
  if(CURLE_OK != Curl_nss_force_init(conn->data))
    return CURLE_OUT_OF_MEMORY;
#endif

  if(proxy) {
    allocuserpwd = &conn->allocptr.proxyuserpwd;
    userp = conn->http_proxy.user;
    passwdp = conn->http_proxy.passwd;
    service = conn->data->set.str[STRING_PROXY_SERVICE_NAME] ?
              conn->data->set.str[STRING_PROXY_SERVICE_NAME] : "HTTP";
    hostname = conn->http_proxy.host.name;
    ntlm = &conn->proxyntlm;
    state = &conn->proxy_ntlm_state;
    authp = &conn->data->state.authproxy;
  }
  else {
    allocuserpwd = &conn->allocptr.userpwd;
    userp = conn->user;
    passwdp = conn->passwd;
    service = conn->data->set.str[STRING_SERVICE_NAME] ?
              conn->data->set.str[STRING_SERVICE_NAME] : "HTTP";
    hostname = conn->host.name;
    ntlm = &conn->ntlm;
    state = &conn->http_ntlm_state;
    authp = &conn->data->state.authhost;
  }
  authp->done = FALSE;

  /* not set means empty */
  if(!userp)
    userp = "";
176
177
178
179
180
181
182
183

184
185
186
187
188
189
190
181
182
183
184
185
186
187

188
189
190
191
192
193
194
195







-
+







      return err;
  }
#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS
  ntlm->sslContext = conn->sslContext;
#endif
#endif

  switch(ntlm->state) {
  switch(*state) {
  case NTLMSTATE_TYPE1:
  default: /* for the weird cases we (re)start here */
    /* Create a type-1 message */
    result = Curl_auth_create_ntlm_type1_message(conn->data, userp, passwdp,
                                                 service, hostname,
                                                 ntlm, &base64,
                                                 &len);
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
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







-
+







-
+










-
+

-
-
+
+


-
+




                              base64);
      free(base64);
      if(!*allocuserpwd)
        return CURLE_OUT_OF_MEMORY;

      DEBUG_OUT(fprintf(stderr, "**** %s\n ", *allocuserpwd));

      ntlm->state = NTLMSTATE_TYPE3; /* we send a type-3 */
      *state = NTLMSTATE_TYPE3; /* we send a type-3 */
      authp->done = TRUE;
    }
    break;

  case NTLMSTATE_TYPE3:
    /* connection is already authenticated,
     * don't send a header in future requests */
    ntlm->state = NTLMSTATE_LAST;
    *state = NTLMSTATE_LAST;
    /* FALLTHROUGH */
  case NTLMSTATE_LAST:
    Curl_safefree(*allocuserpwd);
    authp->done = TRUE;
    break;
  }

  return CURLE_OK;
}

void Curl_http_ntlm_cleanup(struct connectdata *conn)
void Curl_http_auth_cleanup_ntlm(struct connectdata *conn)
{
  Curl_auth_ntlm_cleanup(&conn->ntlm);
  Curl_auth_ntlm_cleanup(&conn->proxyntlm);
  Curl_auth_cleanup_ntlm(&conn->ntlm);
  Curl_auth_cleanup_ntlm(&conn->proxyntlm);

#if defined(NTLM_WB_ENABLED)
  Curl_ntlm_wb_cleanup(conn);
  Curl_http_auth_cleanup_ntlm_wb(conn);
#endif
}

#endif /* !CURL_DISABLE_HTTP && USE_NTLM */
Changes to jni/curl/lib/http_ntlm.h.
1
2


3
4
5
6
7
8
9
10

11
12
13
14
15
16
17


1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17
-
-
+
+







-
+







#ifndef HEADER_CURL_NTLM_H
#define HEADER_CURL_NTLM_H
#ifndef HEADER_CURL_HTTP_NTLM_H
#define HEADER_CURL_HTTP_NTLM_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
29
30
31
32
33
34
35
36

37
38
39
40

29
30
31
32
33
34
35

36
37
38
39

40







-
+



-
+
/* this is for ntlm header input */
CURLcode Curl_input_ntlm(struct connectdata *conn, bool proxy,
                         const char *header);

/* this is for creating ntlm header output */
CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy);

void Curl_http_ntlm_cleanup(struct connectdata *conn);
void Curl_http_auth_cleanup_ntlm(struct connectdata *conn);

#endif /* !CURL_DISABLE_HTTP && USE_NTLM */

#endif /* HEADER_CURL_NTLM_H */
#endif /* HEADER_CURL_HTTP_NTLM_H */
Changes to jni/curl/lib/if2ip.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
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







-
+











-
+













+

+



















-
+





-
+

-
+
+







  return IPV6_SCOPE_GLOBAL;
}


#if defined(HAVE_GETIFADDRS)

if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
                          unsigned int remote_scope_id, const char *interf,
                          unsigned int local_scope_id, const char *interf,
                          char *buf, int buf_size)
{
  struct ifaddrs *iface, *head;
  if2ip_result_t res = IF2IP_NOT_FOUND;

#ifndef ENABLE_IPV6
  (void) remote_scope;
#endif

#if !defined(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) || \
    !defined(ENABLE_IPV6)
  (void) remote_scope_id;
  (void) local_scope_id;
#endif

  if(getifaddrs(&head) >= 0) {
    for(iface = head; iface != NULL; iface = iface->ifa_next) {
      if(iface->ifa_addr != NULL) {
        if(iface->ifa_addr->sa_family == af) {
          if(strcasecompare(iface->ifa_name, interf)) {
            void *addr;
            char *ip;
            char scope[12] = "";
            char ipstr[64];
#ifdef ENABLE_IPV6
            if(af == AF_INET6) {
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
              unsigned int scopeid = 0;
#endif
              unsigned int ifscope = Curl_ipv6_scope(iface->ifa_addr);

              if(ifscope != remote_scope) {
                /* We are interested only in interface addresses whose
                   scope matches the remote address we want to
                   connect to: global for global, link-local for
                   link-local, etc... */
                if(res == IF2IP_NOT_FOUND) res = IF2IP_AF_NOT_SUPPORTED;
                continue;
              }

              addr =
                &((struct sockaddr_in6 *)(void *)iface->ifa_addr)->sin6_addr;
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
              /* Include the scope of this interface as part of the address */
              scopeid = ((struct sockaddr_in6 *)(void *)iface->ifa_addr)
                            ->sin6_scope_id;

              /* If given, scope id should match. */
              if(remote_scope_id && scopeid != remote_scope_id) {
              if(local_scope_id && scopeid != local_scope_id) {
                if(res == IF2IP_NOT_FOUND)
                  res = IF2IP_AF_NOT_SUPPORTED;

                continue;
              }
#endif

              if(scopeid)
                msnprintf(scope, sizeof(scope), "%%%u", scopeid);
                  msnprintf(scope, sizeof(scope), "%%%u", scopeid);
#endif
            }
            else
#endif
              addr =
                  &((struct sockaddr_in *)(void *)iface->ifa_addr)->sin_addr;
            res = IF2IP_FOUND;
            ip = (char *) Curl_inet_ntop(af, addr, ipstr, sizeof(ipstr));
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
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







-
+









-
+








  return res;
}

#elif defined(HAVE_IOCTL_SIOCGIFADDR)

if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
                          unsigned int remote_scope_id, const char *interf,
                          unsigned int local_scope_id, const char *interf,
                          char *buf, int buf_size)
{
  struct ifreq req;
  struct in_addr in;
  struct sockaddr_in *s;
  curl_socket_t dummy;
  size_t len;

  (void)remote_scope;
  (void)remote_scope_id;
  (void)local_scope_id;

  if(!interf || (af != AF_INET))
    return IF2IP_NOT_FOUND;

  len = strlen(interf);
  if(len >= sizeof(req.ifr_name))
    return IF2IP_NOT_FOUND;
221
222
223
224
225
226
227
228

229
230
231
232
233

234
235
236
237
238
239
240
224
225
226
227
228
229
230

231
232
233
234
235

236
237
238
239
240
241
242
243







-
+




-
+







  sclose(dummy);
  return IF2IP_FOUND;
}

#else

if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
                          unsigned int remote_scope_id, const char *interf,
                          unsigned int local_scope_id, const char *interf,
                          char *buf, int buf_size)
{
    (void) af;
    (void) remote_scope;
    (void) remote_scope_id;
    (void) local_scope_id;
    (void) interf;
    (void) buf;
    (void) buf_size;
    return IF2IP_NOT_FOUND;
}

#endif
Changes to jni/curl/lib/if2ip.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_IF2IP_H
#define HEADER_CURL_IF2IP_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
35
36
37
38
39
40
41
42

43
44
45
46
47
48
49
35
36
37
38
39
40
41

42
43
44
45
46
47
48
49







-
+







typedef enum {
  IF2IP_NOT_FOUND = 0, /* Interface not found */
  IF2IP_AF_NOT_SUPPORTED = 1, /* Int. exists but has no address for this af */
  IF2IP_FOUND = 2 /* The address has been stored in "buf" */
} if2ip_result_t;

if2ip_result_t Curl_if2ip(int af, unsigned int remote_scope,
                          unsigned int remote_scope_id, const char *interf,
                          unsigned int local_scope_id, const char *interf,
                          char *buf, int buf_size);

#ifdef __INTERIX

/* Nedelcho Stanev's work-around for SFU 3.0 */
struct ifreq {
#define IFNAMSIZ 16
Changes to jni/curl/lib/imap.c.
24
25
26
27
28
29
30

31
32
33
34
35
36
37
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38







+







 * RFC3501 IMAPv4 protocol
 * RFC4422 Simple Authentication and Security Layer (SASL)
 * RFC4616 PLAIN authentication
 * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
 * RFC4959 IMAP Extension for SASL Initial Client Response
 * RFC5092 IMAP URL Scheme
 * RFC6749 OAuth 2.0 Authorization Framework
 * RFC8314 Use of TLS for Email Submission and Access
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_IMAP
1038
1039
1040
1041
1042
1043
1044
1045

1046
1047
1048
1049
1050
1051
1052
1039
1040
1041
1042
1043
1044
1045

1046
1047
1048
1049
1050
1051
1052
1053







-
+







  if(imapcode == '*') {
    /* Temporarily add the LF character back and send as body to the client */
    line[len] = '\n';
    result = Curl_client_write(conn, CLIENTWRITE_BODY, line, len + 1);
    line[len] = '\0';
  }
  else if(imapcode != IMAP_RESP_OK)
    result = CURLE_QUOTE_ERROR; /* TODO: Fix error code */
    result = CURLE_QUOTE_ERROR;
  else
    /* End of DO phase */
    state(conn, IMAP_STOP);

  return result;
}

1110
1111
1112
1113
1114
1115
1116
1117

1118
1119
1120
1121
1122
1123
1124
1111
1112
1113
1114
1115
1116
1117

1118
1119
1120
1121
1122
1123
1124
1125







-
+







  curl_off_t size = 0;

  (void)instate; /* no use for this yet */

  if(imapcode != '*') {
    Curl_pgrsSetDownloadSize(data, -1);
    state(conn, IMAP_STOP);
    return CURLE_REMOTE_FILE_NOT_FOUND; /* TODO: Fix error code */
    return CURLE_REMOTE_FILE_NOT_FOUND;
  }

  /* Something like this is received "* 1 FETCH (BODY[TEXT] {2021}\r" so parse
     the continuation data contained within the curly brackets */
  while(*ptr && (*ptr != '{'))
    ptr++;

1487
1488
1489
1490
1491
1492
1493
1494

1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1488
1489
1490
1491
1492
1493
1494

1495





1496
1497
1498
1499
1500
1501
1502







-
+
-
-
-
-
-







    else {
      /* End the APPEND command first by sending an empty line */
      result = Curl_pp_sendf(&conn->proto.imapc.pp, "%s", "");
      if(!result)
        state(conn, IMAP_APPEND_FINAL);
    }

    /* Run the state-machine
    /* Run the state-machine */

       TODO: when the multi interface is used, this _really_ should be using
       the imap_multi_statemach function but we have no general support for
       non-blocking DONE operations!
    */
    if(!result)
      result = imap_block_statemach(conn, FALSE);
  }

  /* Cleanup our per-request based variables */
  Curl_safefree(imap->mailbox);
  Curl_safefree(imap->uidvalidity);
1790
1791
1792
1793
1794
1795
1796
1797

1798
1799
1800
1801
1802
1803
1804
1786
1787
1788
1789
1790
1791
1792

1793
1794
1795
1796
1797
1798
1799
1800







-
+







  size_t newlen = 0;
  char *newstr = NULL;

  if(!str)
    return NULL;

  /* Look for "atom-specials", counting the backslash and quote characters as
     these will need escapping */
     these will need escaping */
  p1 = str;
  while(*p1) {
    if(*p1 == '\\')
      backsp_count++;
    else if(*p1 == '"')
      quote_count++;
    else if(!escape_only) {
Changes to jni/curl/lib/inet_pton.c.
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
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







-
+














+







 */
static int
inet_pton6(const char *src, unsigned char *dst)
{
  static const char xdigits_l[] = "0123456789abcdef",
    xdigits_u[] = "0123456789ABCDEF";
  unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp;
  const char *xdigits, *curtok;
  const char *curtok;
  int ch, saw_xdigit;
  size_t val;

  memset((tp = tmp), 0, IN6ADDRSZ);
  endp = tp + IN6ADDRSZ;
  colonp = NULL;
  /* Leading :: requires some special handling. */
  if(*src == ':')
    if(*++src != ':')
      return (0);
  curtok = src;
  saw_xdigit = 0;
  val = 0;
  while((ch = *src++) != '\0') {
    const char *xdigits;
    const char *pch;

    pch = strchr((xdigits = xdigits_l), ch);
    if(!pch)
      pch = strchr((xdigits = xdigits_u), ch);
    if(pch != NULL) {
      val <<= 4;
Changes to jni/curl/lib/ldap.c.
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080

1081
1082
1083
1084
1085
1086
1087
1065
1066
1067
1068
1069
1070
1071


1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086







-
-







+







  }
  *ludpp = ludp;
  return (rc);
}

static void _ldap_free_urldesc(LDAPURLDesc *ludp)
{
  size_t i;

  if(!ludp)
    return;

  free(ludp->lud_dn);
  free(ludp->lud_filter);

  if(ludp->lud_attrs) {
    size_t i;
    for(i = 0; i < ludp->lud_attrs_dups; i++)
      free(ludp->lud_attrs[i]);
    free(ludp->lud_attrs);
  }

  free(ludp);
}
Changes to jni/curl/lib/libcurl.plist.
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
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







-
+











-
+


-
+


	<key>CFBundleExecutable</key>
	<string>curl</string>

	<key>CFBundleIdentifier</key>
	<string>se.haxx.curl.libcurl</string>

	<key>CFBundleVersion</key>
	<string>7.64.1</string>
	<string>7.65.0</string>

	<key>CFBundleName</key>
	<string>libcurl</string>

	<key>CFBundlePackageType</key>
	<string>FMWK</string>

	<key>CFBundleSignature</key>
	<string>????</string>

	<key>CFBundleShortVersionString</key>
	<string>libcurl 7.64.1</string>
	<string>libcurl 7.65.0</string>

	<key>CFBundleGetInfoString</key>
	<string>libcurl.plist 7.64.1</string>
	<string>libcurl.plist 7.65.0</string>
</dict>
</plist>
Changes to jni/curl/lib/md4.c.
34
35
36
37
38
39
40

41
42


43

44
45
46
47
48
49
50
34
35
36
37
38
39
40
41


42
43
44
45
46
47
48
49
50
51
52







+
-
-
+
+

+







 * It is meant to be fast, but not as fast as possible.  Some known
 * optimizations are not included to reduce source code size and avoid
 * compile-time configuration.
 */

#include "curl_setup.h"

/* The NSS, OS/400, and when not included, OpenSSL and mbed TLS crypto
/* The NSS, OS/400 and sometimes mbed TLS crypto libraries do not provide the
 * MD4 hash algorithm, so we have a local implementation of it */
 * libraries do not provide the MD4 hash algorithm, so we use this
 * implementation of it */
#if defined(USE_NSS) || defined(USE_OS400CRYPTO) || \
    (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) || \
    (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C))

#include "curl_md4.h"
#include "warnless.h"

#ifndef HAVE_OPENSSL

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
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







-









+
+







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+







 * This processes one or more 64-byte data blocks, but does NOT update
 * the bit counters.  There are no alignment requirements.
 */
static const void *body(MD4_CTX *ctx, const void *data, unsigned long size)
{
  const unsigned char *ptr;
  MD4_u32plus a, b, c, d;
  MD4_u32plus saved_a, saved_b, saved_c, saved_d;

  ptr = (const unsigned char *)data;

  a = ctx->a;
  b = ctx->b;
  c = ctx->c;
  d = ctx->d;

  do {
    MD4_u32plus saved_a, saved_b, saved_c, saved_d;

    saved_a = a;
    saved_b = b;
    saved_c = c;
    saved_d = d;

/* Round 1 */
    STEP(F, a, b, c, d, SET(0), 3)
      STEP(F, d, a, b, c, SET(1), 7)
      STEP(F, c, d, a, b, SET(2), 11)
      STEP(F, b, c, d, a, SET(3), 19)
      STEP(F, a, b, c, d, SET(4), 3)
      STEP(F, d, a, b, c, SET(5), 7)
      STEP(F, c, d, a, b, SET(6), 11)
      STEP(F, b, c, d, a, SET(7), 19)
      STEP(F, a, b, c, d, SET(8), 3)
      STEP(F, d, a, b, c, SET(9), 7)
      STEP(F, c, d, a, b, SET(10), 11)
      STEP(F, b, c, d, a, SET(11), 19)
      STEP(F, a, b, c, d, SET(12), 3)
      STEP(F, d, a, b, c, SET(13), 7)
      STEP(F, c, d, a, b, SET(14), 11)
      STEP(F, b, c, d, a, SET(15), 19)
    STEP(F, d, a, b, c, SET(1), 7)
    STEP(F, c, d, a, b, SET(2), 11)
    STEP(F, b, c, d, a, SET(3), 19)
    STEP(F, a, b, c, d, SET(4), 3)
    STEP(F, d, a, b, c, SET(5), 7)
    STEP(F, c, d, a, b, SET(6), 11)
    STEP(F, b, c, d, a, SET(7), 19)
    STEP(F, a, b, c, d, SET(8), 3)
    STEP(F, d, a, b, c, SET(9), 7)
    STEP(F, c, d, a, b, SET(10), 11)
    STEP(F, b, c, d, a, SET(11), 19)
    STEP(F, a, b, c, d, SET(12), 3)
    STEP(F, d, a, b, c, SET(13), 7)
    STEP(F, c, d, a, b, SET(14), 11)
    STEP(F, b, c, d, a, SET(15), 19)

/* Round 2 */
      STEP(G, a, b, c, d, GET(0) + 0x5a827999, 3)
      STEP(G, d, a, b, c, GET(4) + 0x5a827999, 5)
      STEP(G, c, d, a, b, GET(8) + 0x5a827999, 9)
      STEP(G, b, c, d, a, GET(12) + 0x5a827999, 13)
      STEP(G, a, b, c, d, GET(1) + 0x5a827999, 3)
      STEP(G, d, a, b, c, GET(5) + 0x5a827999, 5)
      STEP(G, c, d, a, b, GET(9) + 0x5a827999, 9)
      STEP(G, b, c, d, a, GET(13) + 0x5a827999, 13)
      STEP(G, a, b, c, d, GET(2) + 0x5a827999, 3)
      STEP(G, d, a, b, c, GET(6) + 0x5a827999, 5)
      STEP(G, c, d, a, b, GET(10) + 0x5a827999, 9)
      STEP(G, b, c, d, a, GET(14) + 0x5a827999, 13)
      STEP(G, a, b, c, d, GET(3) + 0x5a827999, 3)
      STEP(G, d, a, b, c, GET(7) + 0x5a827999, 5)
      STEP(G, c, d, a, b, GET(11) + 0x5a827999, 9)
      STEP(G, b, c, d, a, GET(15) + 0x5a827999, 13)
    STEP(G, a, b, c, d, GET(0) + 0x5a827999, 3)
    STEP(G, d, a, b, c, GET(4) + 0x5a827999, 5)
    STEP(G, c, d, a, b, GET(8) + 0x5a827999, 9)
    STEP(G, b, c, d, a, GET(12) + 0x5a827999, 13)
    STEP(G, a, b, c, d, GET(1) + 0x5a827999, 3)
    STEP(G, d, a, b, c, GET(5) + 0x5a827999, 5)
    STEP(G, c, d, a, b, GET(9) + 0x5a827999, 9)
    STEP(G, b, c, d, a, GET(13) + 0x5a827999, 13)
    STEP(G, a, b, c, d, GET(2) + 0x5a827999, 3)
    STEP(G, d, a, b, c, GET(6) + 0x5a827999, 5)
    STEP(G, c, d, a, b, GET(10) + 0x5a827999, 9)
    STEP(G, b, c, d, a, GET(14) + 0x5a827999, 13)
    STEP(G, a, b, c, d, GET(3) + 0x5a827999, 3)
    STEP(G, d, a, b, c, GET(7) + 0x5a827999, 5)
    STEP(G, c, d, a, b, GET(11) + 0x5a827999, 9)
    STEP(G, b, c, d, a, GET(15) + 0x5a827999, 13)

/* Round 3 */
      STEP(H, a, b, c, d, GET(0) + 0x6ed9eba1, 3)
      STEP(H, d, a, b, c, GET(8) + 0x6ed9eba1, 9)
      STEP(H, c, d, a, b, GET(4) + 0x6ed9eba1, 11)
      STEP(H, b, c, d, a, GET(12) + 0x6ed9eba1, 15)
      STEP(H, a, b, c, d, GET(2) + 0x6ed9eba1, 3)
      STEP(H, d, a, b, c, GET(10) + 0x6ed9eba1, 9)
      STEP(H, c, d, a, b, GET(6) + 0x6ed9eba1, 11)
      STEP(H, b, c, d, a, GET(14) + 0x6ed9eba1, 15)
      STEP(H, a, b, c, d, GET(1) + 0x6ed9eba1, 3)
      STEP(H, d, a, b, c, GET(9) + 0x6ed9eba1, 9)
      STEP(H, c, d, a, b, GET(5) + 0x6ed9eba1, 11)
      STEP(H, b, c, d, a, GET(13) + 0x6ed9eba1, 15)
      STEP(H, a, b, c, d, GET(3) + 0x6ed9eba1, 3)
      STEP(H, d, a, b, c, GET(11) + 0x6ed9eba1, 9)
      STEP(H, c, d, a, b, GET(7) + 0x6ed9eba1, 11)
      STEP(H, b, c, d, a, GET(15) + 0x6ed9eba1, 15)
    STEP(H, a, b, c, d, GET(0) + 0x6ed9eba1, 3)
    STEP(H, d, a, b, c, GET(8) + 0x6ed9eba1, 9)
    STEP(H, c, d, a, b, GET(4) + 0x6ed9eba1, 11)
    STEP(H, b, c, d, a, GET(12) + 0x6ed9eba1, 15)
    STEP(H, a, b, c, d, GET(2) + 0x6ed9eba1, 3)
    STEP(H, d, a, b, c, GET(10) + 0x6ed9eba1, 9)
    STEP(H, c, d, a, b, GET(6) + 0x6ed9eba1, 11)
    STEP(H, b, c, d, a, GET(14) + 0x6ed9eba1, 15)
    STEP(H, a, b, c, d, GET(1) + 0x6ed9eba1, 3)
    STEP(H, d, a, b, c, GET(9) + 0x6ed9eba1, 9)
    STEP(H, c, d, a, b, GET(5) + 0x6ed9eba1, 11)
    STEP(H, b, c, d, a, GET(13) + 0x6ed9eba1, 15)
    STEP(H, a, b, c, d, GET(3) + 0x6ed9eba1, 3)
    STEP(H, d, a, b, c, GET(11) + 0x6ed9eba1, 9)
    STEP(H, c, d, a, b, GET(7) + 0x6ed9eba1, 11)
    STEP(H, b, c, d, a, GET(15) + 0x6ed9eba1, 15)

      a += saved_a;
    a += saved_a;
    b += saved_b;
    c += saved_c;
    d += saved_d;

    ptr += 64;
  } while(size -= 64);

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
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







-
+










-
+







  ctx->lo = 0;
  ctx->hi = 0;
}

static void MD4_Update(MD4_CTX *ctx, const void *data, unsigned long size)
{
  MD4_u32plus saved_lo;
  unsigned long used, available;
  unsigned long used;

  saved_lo = ctx->lo;
  ctx->lo = (saved_lo + size) & 0x1fffffff;
  if(ctx->lo < saved_lo)
    ctx->hi++;
  ctx->hi += (MD4_u32plus)size >> 29;

  used = saved_lo & 0x3f;

  if(used) {
    available = 64 - used;
    unsigned long available = 64 - used;

    if(size < available) {
      memcpy(&ctx->buffer[used], data, size);
      return;
    }

    memcpy(&ctx->buffer[used], data, available);
300
301
302
303
304
305
306

307

308
303
304
305
306
307
308
309
310
311
312
313







+

+

void Curl_md4it(unsigned char *output, const unsigned char *input, size_t len)
{
  MD4_CTX ctx;
  MD4_Init(&ctx);
  MD4_Update(&ctx, input, curlx_uztoui(len));
  MD4_Final(output, &ctx);
}

#endif /* defined(USE_NSS) || defined(USE_OS400CRYPTO) ||
    (defined(USE_OPENSSL) && defined(OPENSSL_NO_MD4)) ||
    (defined(USE_MBEDTLS) && !defined(MBEDTLS_MD4_C)) */
Changes to jni/curl/lib/md5.c.
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
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







-
+




-
+






-
+













-
+




-
+






-
+







#include <nettle/md5.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

typedef struct md5_ctx MD5_CTX;

static void MD5_Init(MD5_CTX * ctx)
static void MD5_Init(MD5_CTX *ctx)
{
  md5_init(ctx);
}

static void MD5_Update(MD5_CTX * ctx,
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  md5_update(ctx, inputLen, input);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  md5_digest(ctx, 16, digest);
}

#elif defined(USE_GNUTLS)

#include <gcrypt.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

typedef gcry_md_hd_t MD5_CTX;

static void MD5_Init(MD5_CTX * ctx)
static void MD5_Init(MD5_CTX *ctx)
{
  gcry_md_open(ctx, GCRY_MD_MD5, 0);
}

static void MD5_Update(MD5_CTX * ctx,
static void MD5_Update(MD5_CTX *ctx,
                       const unsigned char *input,
                       unsigned int inputLen)
{
  gcry_md_write(*ctx, input, inputLen);
}

static void MD5_Final(unsigned char digest[16], MD5_CTX * ctx)
static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  memcpy(digest, gcry_md_read(*ctx, 0), 16);
  gcry_md_close(*ctx);
}

#elif defined(USE_OPENSSL) && !defined(USE_AMISSL)
/* When OpenSSL is available we use the MD5-function from OpenSSL */
120
121
122
123
124
125
126
127

128
129
130
131
132
133
134
120
121
122
123
124
125
126

127
128
129
130
131
132
133
134







-
+







}

static void MD5_Final(unsigned char digest[16], MD5_CTX *ctx)
{
  CC_MD5_Final(digest, ctx);
}

#elif defined(_WIN32) && !defined(CURL_WINDOWS_APP)
#elif defined(WIN32) && !defined(CURL_WINDOWS_APP)

#include <wincrypt.h>
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

typedef struct {
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
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







-









+
+







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+







 * This processes one or more 64-byte data blocks, but does NOT update
 * the bit counters.  There are no alignment requirements.
 */
static const void *body(MD5_CTX *ctx, const void *data, unsigned long size)
{
  const unsigned char *ptr;
  MD5_u32plus a, b, c, d;
  MD5_u32plus saved_a, saved_b, saved_c, saved_d;

  ptr = (const unsigned char *)data;

  a = ctx->a;
  b = ctx->b;
  c = ctx->c;
  d = ctx->d;

  do {
    MD5_u32plus saved_a, saved_b, saved_c, saved_d;

    saved_a = a;
    saved_b = b;
    saved_c = c;
    saved_d = d;

/* Round 1 */
    STEP(F, a, b, c, d, SET(0), 0xd76aa478, 7)
      STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
      STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
      STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
      STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
      STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
      STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
      STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
      STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
      STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
      STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
      STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
      STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
      STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
      STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
      STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)
    STEP(F, d, a, b, c, SET(1), 0xe8c7b756, 12)
    STEP(F, c, d, a, b, SET(2), 0x242070db, 17)
    STEP(F, b, c, d, a, SET(3), 0xc1bdceee, 22)
    STEP(F, a, b, c, d, SET(4), 0xf57c0faf, 7)
    STEP(F, d, a, b, c, SET(5), 0x4787c62a, 12)
    STEP(F, c, d, a, b, SET(6), 0xa8304613, 17)
    STEP(F, b, c, d, a, SET(7), 0xfd469501, 22)
    STEP(F, a, b, c, d, SET(8), 0x698098d8, 7)
    STEP(F, d, a, b, c, SET(9), 0x8b44f7af, 12)
    STEP(F, c, d, a, b, SET(10), 0xffff5bb1, 17)
    STEP(F, b, c, d, a, SET(11), 0x895cd7be, 22)
    STEP(F, a, b, c, d, SET(12), 0x6b901122, 7)
    STEP(F, d, a, b, c, SET(13), 0xfd987193, 12)
    STEP(F, c, d, a, b, SET(14), 0xa679438e, 17)
    STEP(F, b, c, d, a, SET(15), 0x49b40821, 22)

/* Round 2 */
      STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
      STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
      STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
      STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
      STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
      STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
      STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
      STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
      STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
      STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
      STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
      STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
      STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
      STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
      STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
      STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)
    STEP(G, a, b, c, d, GET(1), 0xf61e2562, 5)
    STEP(G, d, a, b, c, GET(6), 0xc040b340, 9)
    STEP(G, c, d, a, b, GET(11), 0x265e5a51, 14)
    STEP(G, b, c, d, a, GET(0), 0xe9b6c7aa, 20)
    STEP(G, a, b, c, d, GET(5), 0xd62f105d, 5)
    STEP(G, d, a, b, c, GET(10), 0x02441453, 9)
    STEP(G, c, d, a, b, GET(15), 0xd8a1e681, 14)
    STEP(G, b, c, d, a, GET(4), 0xe7d3fbc8, 20)
    STEP(G, a, b, c, d, GET(9), 0x21e1cde6, 5)
    STEP(G, d, a, b, c, GET(14), 0xc33707d6, 9)
    STEP(G, c, d, a, b, GET(3), 0xf4d50d87, 14)
    STEP(G, b, c, d, a, GET(8), 0x455a14ed, 20)
    STEP(G, a, b, c, d, GET(13), 0xa9e3e905, 5)
    STEP(G, d, a, b, c, GET(2), 0xfcefa3f8, 9)
    STEP(G, c, d, a, b, GET(7), 0x676f02d9, 14)
    STEP(G, b, c, d, a, GET(12), 0x8d2a4c8a, 20)

/* Round 3 */
      STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
      STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
      STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
      STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
      STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
      STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
      STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
      STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
      STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
      STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
      STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
      STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
      STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
      STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
      STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
      STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)
    STEP(H, a, b, c, d, GET(5), 0xfffa3942, 4)
    STEP(H2, d, a, b, c, GET(8), 0x8771f681, 11)
    STEP(H, c, d, a, b, GET(11), 0x6d9d6122, 16)
    STEP(H2, b, c, d, a, GET(14), 0xfde5380c, 23)
    STEP(H, a, b, c, d, GET(1), 0xa4beea44, 4)
    STEP(H2, d, a, b, c, GET(4), 0x4bdecfa9, 11)
    STEP(H, c, d, a, b, GET(7), 0xf6bb4b60, 16)
    STEP(H2, b, c, d, a, GET(10), 0xbebfbc70, 23)
    STEP(H, a, b, c, d, GET(13), 0x289b7ec6, 4)
    STEP(H2, d, a, b, c, GET(0), 0xeaa127fa, 11)
    STEP(H, c, d, a, b, GET(3), 0xd4ef3085, 16)
    STEP(H2, b, c, d, a, GET(6), 0x04881d05, 23)
    STEP(H, a, b, c, d, GET(9), 0xd9d4d039, 4)
    STEP(H2, d, a, b, c, GET(12), 0xe6db99e5, 11)
    STEP(H, c, d, a, b, GET(15), 0x1fa27cf8, 16)
    STEP(H2, b, c, d, a, GET(2), 0xc4ac5665, 23)

/* Round 4 */
      STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
      STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
      STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
      STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
      STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
      STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
      STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
      STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
      STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
      STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
      STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
      STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
      STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
      STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
      STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
      STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)
    STEP(I, a, b, c, d, GET(0), 0xf4292244, 6)
    STEP(I, d, a, b, c, GET(7), 0x432aff97, 10)
    STEP(I, c, d, a, b, GET(14), 0xab9423a7, 15)
    STEP(I, b, c, d, a, GET(5), 0xfc93a039, 21)
    STEP(I, a, b, c, d, GET(12), 0x655b59c3, 6)
    STEP(I, d, a, b, c, GET(3), 0x8f0ccc92, 10)
    STEP(I, c, d, a, b, GET(10), 0xffeff47d, 15)
    STEP(I, b, c, d, a, GET(1), 0x85845dd1, 21)
    STEP(I, a, b, c, d, GET(8), 0x6fa87e4f, 6)
    STEP(I, d, a, b, c, GET(15), 0xfe2ce6e0, 10)
    STEP(I, c, d, a, b, GET(6), 0xa3014314, 15)
    STEP(I, b, c, d, a, GET(13), 0x4e0811a1, 21)
    STEP(I, a, b, c, d, GET(4), 0xf7537e82, 6)
    STEP(I, d, a, b, c, GET(11), 0xbd3af235, 10)
    STEP(I, c, d, a, b, GET(2), 0x2ad7d2bb, 15)
    STEP(I, b, c, d, a, GET(9), 0xeb86d391, 21)

      a += saved_a;
    a += saved_a;
    b += saved_b;
    c += saved_c;
    d += saved_d;

    ptr += 64;
  } while(size -= 64);

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
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







-
+










-
+







  ctx->lo = 0;
  ctx->hi = 0;
}

static void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size)
{
  MD5_u32plus saved_lo;
  unsigned long used, available;
  unsigned long used;

  saved_lo = ctx->lo;
  ctx->lo = (saved_lo + size) & 0x1fffffff;
  if(ctx->lo < saved_lo)
    ctx->hi++;
  ctx->hi += (MD5_u32plus)size >> 29;

  used = saved_lo & 0x3f;

  if(used) {
    available = 64 - used;
    unsigned long available = 64 - used;

    if(size < available) {
      memcpy(&ctx->buffer[used], data, size);
      return;
    }

    memcpy(&ctx->buffer[used], data, available);
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
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







-
-
-
+
+
+



-
+


-
+






-
+



  ctxt->md5_hash = md5params;

  (*md5params->md5_init_func)(ctxt->md5_hashctx);

  return ctxt;
}

int Curl_MD5_update(MD5_context *context,
                    const unsigned char *data,
                    unsigned int len)
CURLcode Curl_MD5_update(MD5_context *context,
                         const unsigned char *data,
                         unsigned int len)
{
  (*context->md5_hash->md5_update_func)(context->md5_hashctx, data, len);

  return 0;
  return CURLE_OK;
}

int Curl_MD5_final(MD5_context *context, unsigned char *result)
CURLcode Curl_MD5_final(MD5_context *context, unsigned char *result)
{
  (*context->md5_hash->md5_final_func)(result, context->md5_hashctx);

  free(context->md5_hashctx);
  free(context);

  return 0;
  return CURLE_OK;
}

#endif /* CURL_DISABLE_CRYPTO_AUTH */
Changes to jni/curl/lib/memdebug.c.
110
111
112
113
114
115
116
117
118


119
120
121
122
123
124
125
110
111
112
113
114
115
116


117
118
119
120
121
122
123
124
125







-
-
+
+







  if(!curl_dbg_logfile) {
    if(logname && *logname)
      curl_dbg_logfile = fopen(logname, FOPEN_WRITETEXT);
    else
      curl_dbg_logfile = stderr;
#ifdef MEMDEBUG_LOG_SYNC
    /* Flush the log file after every line so the log isn't lost in a crash */
    if(logfile)
      setbuf(logfile, (char *)NULL);
    if(curl_dbg_logfile)
      setbuf(curl_dbg_logfile, (char *)NULL);
#endif
  }
}

/* This function sets the number of malloc() calls that should return
   successfully! */
void curl_dbg_memlimit(long limit)
302
303
304
305
306
307
308
309
310
311

312
313
314
315
316
317
318
302
303
304
305
306
307
308


309
310
311
312
313
314
315
316
317







-
-

+







  }

  return NULL;
}

void curl_dbg_free(void *ptr, int line, const char *source)
{
  struct memdebug *mem;

  if(ptr) {
    struct memdebug *mem;

#ifdef __INTEL_COMPILER
#  pragma warning(push)
#  pragma warning(disable:1684)
   /* 1684: conversion from pointer to same-sized integral type */
#endif

Changes to jni/curl/lib/mime.c.
25
26
27
28
29
30
31
32
33


34
35
36
37
38
39
40
25
26
27
28
29
30
31


32
33
34
35
36
37
38
39
40







-
-
+
+







#include <curl/curl.h>

#include "mime.h"
#include "non-ascii.h"
#include "urldata.h"
#include "sendf.h"

#if !defined(CURL_DISABLE_HTTP) || !defined(CURL_DISABLE_SMTP) || \
    !defined(CURL_DISABLE_IMAP)
#if (!defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)) || \
  !defined(CURL_DISABLE_SMTP) || !defined(CURL_DISABLE_IMAP)

#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
#include <libgen.h>
#endif

#include "rand.h"
#include "slist.h"
817
818
819
820
821
822
823
824
825




826
827
828
829
830
831
832
817
818
819
820
821
822
823


824
825
826
827
828
829
830
831
832
833
834







-
-
+
+
+
+







  /* Readback from part. */

  while(bufsize) {
    size_t sz = 0;
    struct curl_slist *hdr = (struct curl_slist *) part->state.ptr;
    switch(part->state.state) {
    case MIMESTATE_BEGIN:
      mimesetstate(&part->state, part->flags & MIME_BODY_ONLY? MIMESTATE_BODY:
                                 MIMESTATE_CURLHEADERS, part->curlheaders);
      mimesetstate(&part->state,
                   (part->flags & MIME_BODY_ONLY)?
                     MIMESTATE_BODY: MIMESTATE_CURLHEADERS,
                   part->curlheaders);
      break;
    case MIMESTATE_USERHEADERS:
      if(!hdr) {
        mimesetstate(&part->state, MIMESTATE_EOH, NULL);
        break;
      }
      if(match_header(hdr, "Content-Type", 12)) {
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907

1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1897
1898
1899
1900
1901
1902
1903






1904






































































-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
{
  (void) part;
  (void) headers;
  (void) take_ownership;
  return CURLE_NOT_BUILT_IN;
}

void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy)
{
  (void) part;
  (void) easy;
}

#endif /* if disabled */
void Curl_mime_cleanpart(curl_mimepart *part)
{
  (void) part;
}

CURLcode Curl_mime_duppart(curl_mimepart *dst, const curl_mimepart *src)
{
  (void) dst;
  (void) src;
  return CURLE_OK;    /* Nothing to duplicate: always succeed. */
}

CURLcode Curl_mime_set_subparts(curl_mimepart *part,
                                curl_mime *subparts, int take_ownership)
{
  (void) part;
  (void) subparts;
  (void) take_ownership;
  return CURLE_NOT_BUILT_IN;
}

CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
                                   const char *contenttype,
                                   const char *disposition,
                                   enum mimestrategy strategy)
{
  (void) part;
  (void) contenttype;
  (void) disposition;
  (void) strategy;
  return CURLE_NOT_BUILT_IN;
}

curl_off_t Curl_mime_size(curl_mimepart *part)
{
  (void) part;
  return (curl_off_t) -1;
}

size_t Curl_mime_read(char *buffer, size_t size, size_t nitems, void *instream)
{
  (void) buffer;
  (void) size;
  (void) nitems;
  (void) instream;
  return 0;
}

CURLcode Curl_mime_rewind(curl_mimepart *part)
{
  (void) part;
  return CURLE_NOT_BUILT_IN;
}

/* VARARGS2 */
CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...)
{
  (void) slp;
  (void) fmt;
  return CURLE_NOT_BUILT_IN;
}

#endif /* !CURL_DISABLE_HTTP || !CURL_DISABLE_SMTP || !CURL_DISABLE_IMAP */
Changes to jni/curl/lib/mime.h.
17
18
19
20
21
22
23


24
25
26
27
28
29
30
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32







+
+







 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#define MIME_RAND_BOUNDARY_CHARS        16  /* Nb. of random boundary chars. */
#define MAX_ENCODED_LINE_LENGTH         76  /* Maximum encoded line length. */
#define ENCODING_BUFFER_SIZE            256 /* Encoding temp buffers size. */

/* Part flags. */
#define MIME_USERHEADERS_OWNER  (1 << 0)
65
66
67
68
69
70
71
72

73
74
75
76
77
78
79
67
68
69
70
71
72
73

74
75
76
77
78
79
80
81







-
+







  MIMESTRATEGY_LAST
};

/* Content transfer encoder. */
typedef struct {
  const char *   name;          /* Encoding name. */
  size_t         (*encodefunc)(char *buffer, size_t size, bool ateof,
                             curl_mimepart *part);  /* Encoded read. */
                               curl_mimepart *part);  /* Encoded read. */
  curl_off_t     (*sizefunc)(curl_mimepart *part);  /* Encoded size. */
}  mime_encoder;

/* Content transfer encoder state. */
typedef struct {
  size_t         pos;           /* Position on output line. */
  size_t         bufbeg;        /* Next data index in input buffer. */
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
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







+
+


















+
+
+
+
+
+
+
+
+
+
+
+
+
+

  curl_off_t datasize;             /* Expected data size. */
  unsigned int flags;              /* Flags. */
  mime_state state;                /* Current readback state. */
  const mime_encoder *encoder;     /* Content data encoder. */
  mime_encoder_state encstate;     /* Data encoder state. */
};

#if (!defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_MIME)) || \
  !defined(CURL_DISABLE_SMTP) || !defined(CURL_DISABLE_IMAP)

/* Prototypes. */
void Curl_mime_initpart(curl_mimepart *part, struct Curl_easy *easy);
void Curl_mime_cleanpart(curl_mimepart *part);
CURLcode Curl_mime_duppart(curl_mimepart *dst, const curl_mimepart *src);
CURLcode Curl_mime_set_subparts(curl_mimepart *part,
                                curl_mime *subparts, int take_ownership);
CURLcode Curl_mime_prepare_headers(curl_mimepart *part,
                                   const char *contenttype,
                                   const char *disposition,
                                   enum mimestrategy strategy);
curl_off_t Curl_mime_size(curl_mimepart *part);
size_t Curl_mime_read(char *buffer, size_t size, size_t nitems,
                      void *instream);
CURLcode Curl_mime_rewind(curl_mimepart *part);
CURLcode Curl_mime_add_header(struct curl_slist **slp, const char *fmt, ...);
const char *Curl_mime_contenttype(const char *filename);

#else
/* if disabled */
#define Curl_mime_initpart(x,y)
#define Curl_mime_cleanpart(x)
#define Curl_mime_duppart(x,y) CURLE_OK /* Nothing to duplicate. Succeed */
#define Curl_mime_set_subparts(a,b,c) CURLE_NOT_BUILT_IN
#define Curl_mime_prepare_headers(a,b,c,d) CURLE_NOT_BUILT_IN
#define Curl_mime_size(x) (curl_off_t) -1
#define Curl_mime_read NULL
#define Curl_mime_rewind(x) ((void)x, CURLE_NOT_BUILT_IN)
#define Curl_mime_add_header(x,y,...) CURLE_NOT_BUILT_IN
#endif


#endif /* HEADER_CURL_MIME_H */
Changes to jni/curl/lib/multi.c.
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
37
38
39
40
41
42
43

44
45
46
47
48
49
50







-







#include "timeval.h"
#include "http.h"
#include "select.h"
#include "warnless.h"
#include "speedcheck.h"
#include "conncache.h"
#include "multihandle.h"
#include "pipeline.h"
#include "sigpipe.h"
#include "vtls/vtls.h"
#include "connect.h"
#include "http_proxy.h"
#include "http2.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
87
88
89
90
91
92
93

94
95
96
97

98
99
100
101
102
103
104







-




-







  "CONNECT_PEND",
  "CONNECT",
  "WAITRESOLVE",
  "WAITCONNECT",
  "WAITPROXYCONNECT",
  "SENDPROTOCONNECT",
  "PROTOCONNECT",
  "WAITDO",
  "DO",
  "DOING",
  "DO_MORE",
  "DO_DONE",
  "WAITPERFORM",
  "PERFORM",
  "TOOFAST",
  "DONE",
  "COMPLETED",
  "MSGSENT",
};
#endif
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
129
130
131
132
133
134
135

136
137
138
139

140
141
142
143
144
145
146







-




-







    NULL,              /* CONNECT_PEND */
    Curl_init_CONNECT, /* CONNECT */
    NULL,              /* WAITRESOLVE */
    NULL,              /* WAITCONNECT */
    NULL,              /* WAITPROXYCONNECT */
    NULL,              /* SENDPROTOCONNECT */
    NULL,              /* PROTOCONNECT */
    NULL,              /* WAITDO */
    Curl_connect_free, /* DO */
    NULL,              /* DOING */
    NULL,              /* DO_MORE */
    NULL,              /* DO_DONE */
    NULL,              /* WAITPERFORM */
    NULL,              /* PERFORM */
    NULL,              /* TOOFAST */
    NULL,              /* DONE */
    Curl_init_completed, /* COMPLETED */
    NULL               /* MSGSENT */
  };

345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
340
341
342
343
344
345
346



347
348
349
350
351
352
353







-
-
-








  if(Curl_conncache_init(&multi->conn_cache, chashsize))
    goto error;

  Curl_llist_init(&multi->msglist, multi_freeamsg);
  Curl_llist_init(&multi->pending, multi_freeamsg);

  multi->max_pipeline_length = 5;
  multi->pipelining = CURLPIPE_MULTIPLEX;

  /* -1 means it not set by user, use the default value */
  multi->maxconnects = -1;
  return multi;

  error:

  Curl_hash_destroy(&multi->sockhash);
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
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







-
-
-
-
-
-
-
-
-
-


-
+



















-
-
-
-
-
+
-







   */
  if(data->set.errorbuffer)
    data->set.errorbuffer[0] = 0;

  /* set the easy handle */
  multistate(data, CURLM_STATE_INIT);

  if((data->set.global_dns_cache) &&
     (data->dns.hostcachetype != HCACHE_GLOBAL)) {
    /* global dns cache was requested but still isn't */
    struct curl_hash *global = Curl_global_host_cache_init();
    if(global) {
      /* only do this if the global cache init works */
      data->dns.hostcache = global;
      data->dns.hostcachetype = HCACHE_GLOBAL;
    }
  }
  /* for multi interface connections, we share DNS cache automatically if the
     easy handle's one is currently not set. */
  else if(!data->dns.hostcache ||
  if(!data->dns.hostcache ||
     (data->dns.hostcachetype == HCACHE_NONE)) {
    data->dns.hostcache = &multi->hostcache;
    data->dns.hostcachetype = HCACHE_MULTI;
  }

  /* Point to the shared or multi handle connection cache */
  if(data->share && (data->share->specifier & (1<< CURL_LOCK_DATA_CONNECT)))
    data->state.conn_cache = &data->share->conn_cache;
  else
    data->state.conn_cache = &multi->conn_cache;

#ifdef USE_LIBPSL
  /* Do the same for PSL. */
  if(data->share && (data->share->specifier & (1 << CURL_LOCK_DATA_PSL)))
    data->psl = &data->share->psl;
  else
    data->psl = &multi->psl;
#endif

  /* This adds the new entry at the 'end' of the doubly-linked circular
     list of Curl_easy structs to try and maintain a FIFO queue so
     the pipelined requests are in order. */

  /* We add this new entry last in the list. */
  /* We add the new entry last in the list. */

  data->next = NULL; /* end of the line */
  if(multi->easyp) {
    struct Curl_easy *last = multi->easylp;
    last->next = data;
    data->prev = last;
    multi->easylp = data; /* the new last node */
  }
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
470
471
472
473
474
475
476


477
478
479
480
481
482
483







-
-







     closure handle always has the same timeouts as the most recently added
     easy handle. */
  data->state.conn_cache->closure_handle->set.timeout = data->set.timeout;
  data->state.conn_cache->closure_handle->set.server_response_timeout =
    data->set.server_response_timeout;
  data->state.conn_cache->closure_handle->set.no_signal =
    data->set.no_signal;
  data->state.conn_cache->closure_handle->set.verbose =
    data->set.verbose;

  update_timer(multi);
  return CURLM_OK;
}

#if 0
/* Debug-function, used like this:
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
509
510
511
512
513
514
515


516
517
518
519
520
521
522







-
-







  if(data->state.done)
    /* Stop if multi_done() has already been called */
    return CURLE_OK;

  /* Stop the resolver and free its own resources (but not dns_entry yet). */
  Curl_resolver_kill(conn);

  Curl_getoff_all_pipelines(data, conn);

  /* Cleanup possible redirect junk */
  Curl_safefree(data->req.newurl);
  Curl_safefree(data->req.location);

  switch(status) {
  case CURLE_ABORTED_BY_CALLBACK:
  case CURLE_READ_ERROR:
569
570
571
572
573
574
575
576
577
578
579




580
581

582
583
584
585
586
587
588
542
543
544
545
546
547
548




549
550
551
552
553

554
555
556
557
558
559
560
561







-
-
-
-
+
+
+
+

-
+







    CURLcode rc = Curl_pgrsDone(conn);
    if(!result && rc)
      result = CURLE_ABORTED_BY_CALLBACK;
  }

  process_pending_handles(data->multi); /* connection / multiplex */

  if(conn->send_pipe.size || conn->recv_pipe.size) {
    /* Stop if pipeline is not empty . */
    detach_connnection(data);
    DEBUGF(infof(data, "Connection still in use %zu/%zu, "
  detach_connnection(data);
  if(CONN_INUSE(conn)) {
    /* Stop if still used. */
    DEBUGF(infof(data, "Connection still in use %zu, "
                 "no more multi_done now!\n",
                 conn->send_pipe.size, conn->recv_pipe.size));
                 conn->easyq.size));
    return CURLE_OK;
  }

  data->state.done = TRUE; /* called just now! */

  if(conn->dns_entry) {
    Curl_resolv_unlock(data, conn->dns_entry); /* done with this */
611
612
613
614
615
616
617
618
619


620
621
622
623


624
625
626
627
628
629
630
584
585
586
587
588
589
590


591
592
593
594


595
596
597
598
599
600
601
602
603







-
-
+
+


-
-
+
+







     state it is for re-using, so we're forced to close it. In a perfect world
     we can add code that keep track of if we really must close it here or not,
     but currently we have no such detail knowledge.
  */

  if((data->set.reuse_forbid
#if defined(USE_NTLM)
      && !(conn->ntlm.state == NTLMSTATE_TYPE2 ||
           conn->proxyntlm.state == NTLMSTATE_TYPE2)
      && !(conn->http_ntlm_state == NTLMSTATE_TYPE2 ||
           conn->proxy_ntlm_state == NTLMSTATE_TYPE2)
#endif
#if defined(USE_SPNEGO)
      && !(conn->negotiate.state == GSS_AUTHRECV ||
           conn->proxyneg.state == GSS_AUTHRECV)
      && !(conn->http_negotiate_state == GSS_AUTHRECV ||
           conn->proxy_negotiate_state == GSS_AUTHRECV)
#endif
     ) || conn->bits.close
       || (premature && !(conn->handler->flags & PROTOPT_STREAM))) {
    CURLcode res2 = Curl_disconnect(data, conn, premature);

    /* If we had an error already, make sure we return that one. But
       if we got a new error, return that. */
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
621
622
623
624
625
626
627

628
629
630
631
632
633
634







-







      data->state.lastconnect = conn;
      infof(data, "%s\n", buffer);
    }
    else
      data->state.lastconnect = NULL;
  }

  detach_connnection(data);
  Curl_free_request_state(data);
  return result;
}

CURLMcode curl_multi_remove_handle(struct Curl_multi *multi,
                                   struct Curl_easy *data)
{
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
666
667
668
669
670
671
672



673
674
675
676
677
678
679







-
-
-








  if(data->conn &&
     data->mstate > CURLM_STATE_DO &&
     data->mstate < CURLM_STATE_COMPLETED) {
    /* Set connection owner so that the DONE function closes it.  We can
       safely do this here since connection is killed. */
    data->conn->data = easy;
    /* If the handle is in a pipeline and has started sending off its
       request but not received its response yet, we need to close
       connection. */
    streamclose(data->conn, "Removed with partial response");
    easy_owns_conn = TRUE;
  }

  /* The timer must be shut down before data->multi is set to NULL,
     else the timenode will remain in the splay tree after
     curl_easy_cleanup is called. */
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
688
689
690
691
692
693
694



695
696
697
698
699
700
701







-
-
-







      /* multi_done() clears the conn->data field to lose the association
         between the easy handle and the connection

         Note that this ignores the return code simply because there's
         nothing really useful to do with it anyway! */
      (void)multi_done(data, data->result, premature);
    }
    else
      /* Clear connection pipelines, if multi_done above was not called */
      Curl_getoff_all_pipelines(data, data->conn);
  }

  if(data->connect_queue.ptr)
    /* the handle was in the pending list waiting for an available connection,
       so go ahead and remove it */
    Curl_llist_remove(&multi->pending, &data->connect_queue, NULL);

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
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







-
-
+
+

-
+






+
+
+








+

+
+







     We do not touch the easy handle here! */
  multi->num_easy--; /* one less to care about now */

  update_timer(multi);
  return CURLM_OK;
}

/* Return TRUE if the application asked for a certain set of pipelining */
bool Curl_pipeline_wanted(const struct Curl_multi *multi, int bits)
/* Return TRUE if the application asked for multiplexing */
bool Curl_multiplex_wanted(const struct Curl_multi *multi)
{
  return (multi && (multi->pipelining & bits)) ? TRUE : FALSE;
  return (multi && (multi->multiplexing));
}

/* This is the only function that should clear data->conn. This will
   occasionally be called with the pointer already cleared. */
static void detach_connnection(struct Curl_easy *data)
{
  struct connectdata *conn = data->conn;
  if(conn)
    Curl_llist_remove(&conn->easyq, &data->conn_queue, NULL);
  data->conn = NULL;
}

/* This is the only function that should assign data->conn */
void Curl_attach_connnection(struct Curl_easy *data,
                             struct connectdata *conn)
{
  DEBUGASSERT(!data->conn);
  DEBUGASSERT(conn);
  data->conn = conn;
  Curl_llist_insert_next(&conn->easyq, conn->easyq.tail, data,
                         &data->conn_queue);
}

static int waitconnect_getsock(struct connectdata *conn,
                               curl_socket_t *sock,
                               int numsocks)
{
  int i;
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
903
904
905
906
907
908
909

910
911
912
913
914
915
916







-







  case CURLM_STATE_DO_MORE:
    return domore_getsock(data->conn, socks, numsocks);

  case CURLM_STATE_DO_DONE: /* since is set after DO is completed, we switch
                               to waiting for the same as the *PERFORM
                               states */
  case CURLM_STATE_PERFORM:
  case CURLM_STATE_WAITPERFORM:
    return Curl_single_getsock(data->conn, socks, numsocks);
  }

}

CURLMcode curl_multi_fdset(struct Curl_multi *multi,
                           fd_set *read_fd_set, fd_set *write_fd_set,
1199
1200
1201
1202
1203
1204
1205
1206

1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218



1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1170
1171
1172
1173
1174
1175
1176

1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208


1209
1210
1211
1212
1213
1214
1215







-
+












+
+
+
















-
-







  return rc;
}

/*
 * do_complete is called when the DO actions are complete.
 *
 * We init chunking and trailer bits to their default values here immediately
 * before receiving any header data for the current request in the pipeline.
 * before receiving any header data for the current request.
 */
static void do_complete(struct connectdata *conn)
{
  conn->data->req.chunk = FALSE;
  Curl_pgrsTime(conn->data, TIMER_PRETRANSFER);
}

static CURLcode multi_do(struct Curl_easy *data, bool *done)
{
  CURLcode result = CURLE_OK;
  struct connectdata *conn = data->conn;

  DEBUGASSERT(conn);
  DEBUGASSERT(conn->handler);

  if(conn->handler->do_it) {
    /* generic protocol-specific function pointer set in curl_connect() */
    result = conn->handler->do_it(conn, done);

    if(!result && *done)
      /* do_complete must be called after the protocol-specific DO function */
      do_complete(conn);
  }
  return result;
}

/*
 * multi_do_more() is called during the DO_MORE multi state. It is basically a
 * second stage DO state which (wrongly) was introduced to support FTP's
 * second connection.
 *
 * TODO: A future libcurl should be able to work away this state.
 *
 * 'complete' can return 0 for incomplete, 1 for done and -1 for go back to
 * DOING state there's more work to do!
 */

static CURLcode multi_do_more(struct connectdata *conn, int *complete)
{
  CURLcode result = CURLE_OK;
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1234
1235
1236
1237
1238
1239
1240

1241
1242
1243
1244
1245
1246
1247







-







  bool connected;
  bool async;
  bool protocol_connect = FALSE;
  bool dophase_done = FALSE;
  bool done = FALSE;
  CURLMcode rc;
  CURLcode result = CURLE_OK;
  struct SingleRequest *k;
  timediff_t timeout_ms;
  timediff_t recv_timeout_ms;
  timediff_t send_timeout_ms;
  int control;

  if(!GOOD_EASY_HANDLE(data))
    return CURLM_BAD_EASY_HANDLE;
1289
1290
1291
1292
1293
1294
1295
1296

1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311

1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325

1326
1327
1328
1329
1330
1331
1332
1260
1261
1262
1263
1264
1265
1266

1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281

1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295

1296
1297
1298
1299
1300
1301
1302
1303







-
+














-
+













-
+







         analyzers. */
      failf(data, "In state %d with no conn, bail out!\n", data->mstate);
      return CURLM_INTERNAL_ERROR;
    }

    if(multi_ischanged(multi, TRUE)) {
      DEBUGF(infof(data, "multi changed, check CONNECT_PEND queue!\n"));
      process_pending_handles(multi); /* pipelined/multiplexed */
      process_pending_handles(multi); /* multiplexed */
    }

    if(data->conn && data->mstate > CURLM_STATE_CONNECT &&
       data->mstate < CURLM_STATE_COMPLETED) {
      /* Make sure we set the connection's current owner */
      data->conn->data = data;
    }

    if(data->conn &&
       (data->mstate >= CURLM_STATE_CONNECT) &&
       (data->mstate < CURLM_STATE_COMPLETED)) {
      /* we need to wait for the connect state as only then is the start time
         stored, but we must not check already completed handles */
      timeout_ms = Curl_timeleft(data, &now,
                                 (data->mstate <= CURLM_STATE_WAITDO)?
                                 (data->mstate <= CURLM_STATE_DO)?
                                 TRUE:FALSE);

      if(timeout_ms < 0) {
        /* Handle timed out */
        if(data->mstate == CURLM_STATE_WAITRESOLVE)
          failf(data, "Resolving timed out after %" CURL_FORMAT_TIMEDIFF_T
                " milliseconds",
                Curl_timediff(now, data->progress.t_startsingle));
        else if(data->mstate == CURLM_STATE_WAITCONNECT)
          failf(data, "Connection timed out after %" CURL_FORMAT_TIMEDIFF_T
                " milliseconds",
                Curl_timediff(now, data->progress.t_startsingle));
        else {
          k = &data->req;
          struct SingleRequest *k = &data->req;
          if(k->size != -1) {
            failf(data, "Operation timed out after %" CURL_FORMAT_TIMEDIFF_T
                  " milliseconds with %" CURL_FORMAT_CURL_OFF_T " out of %"
                  CURL_FORMAT_CURL_OFF_T " bytes received",
                  Curl_timediff(now, data->progress.t_startsingle),
                  k->bytecount, k->size);
          }
1386
1387
1388
1389
1390
1391
1392




1393


1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407








1408
1409
1410


1411
1412

1413
1414
1415
1416



1417
1418

1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431

1432
1433
1434
1435
1436
1437
1438
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367

1368
1369
1370













1371
1372
1373
1374
1375
1376
1377
1378
1379


1380
1381


1382
1383



1384
1385
1386
1387

1388

1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408







+
+
+
+
-
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+

-
-
+
+
-
-
+

-
-
-
+
+
+

-
+
-












+








        /* add this handle to the list of connect-pending handles */
        Curl_llist_insert_next(&multi->pending, multi->pending.tail, data,
                               &data->connect_queue);
        result = CURLE_OK;
        break;
      }
      else if(data->state.previouslypending) {
        /* this transfer comes from the pending queue so try move another */
        infof(data, "Transfer was pending, now try another\n");
        process_pending_handles(data->multi);

      }

      if(!result) {
        /* Add this handle to the send or pend pipeline */
        result = Curl_add_handle_to_pipeline(data, data->conn);
        if(result)
          stream_error = TRUE;
        else {
          if(async)
            /* We're now waiting for an asynchronous name lookup */
            multistate(data, CURLM_STATE_WAITRESOLVE);
          else {
            /* after the connect has been sent off, go WAITCONNECT unless the
               protocol connect is already done and we can go directly to
               WAITDO or DO! */
            rc = CURLM_CALL_MULTI_PERFORM;
        if(async)
          /* We're now waiting for an asynchronous name lookup */
          multistate(data, CURLM_STATE_WAITRESOLVE);
        else {
          /* after the connect has been sent off, go WAITCONNECT unless the
             protocol connect is already done and we can go directly to
             WAITDO or DO! */
          rc = CURLM_CALL_MULTI_PERFORM;

            if(protocol_connect)
              multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
          if(protocol_connect)
            multistate(data, CURLM_STATE_DO);
                         CURLM_STATE_WAITDO:CURLM_STATE_DO);
            else {
          else {
#ifndef CURL_DISABLE_HTTP
              if(Curl_connect_ongoing(data->conn))
                multistate(data, CURLM_STATE_WAITPROXYCONNECT);
              else
            if(Curl_connect_ongoing(data->conn))
              multistate(data, CURLM_STATE_WAITPROXYCONNECT);
            else
#endif
                multistate(data, CURLM_STATE_WAITCONNECT);
              multistate(data, CURLM_STATE_WAITCONNECT);
            }
          }
        }
      }
      break;

    case CURLM_STATE_WAITRESOLVE:
      /* awaiting an asynch name resolve to complete */
    {
      struct Curl_dns_entry *dns = NULL;
      struct connectdata *conn = data->conn;
      const char *hostname;

      DEBUGASSERT(conn);
      if(conn->bits.httpproxy)
        hostname = conn->http_proxy.host.name;
      else if(conn->bits.conn_to_host)
        hostname = conn->conn_to_host.name;
      else
        hostname = conn->host.name;

1463
1464
1465
1466
1467
1468
1469
1470

1471
1472
1473
1474
1475

1476
1477
1478
1479
1480
1481
1482
1483
1433
1434
1435
1436
1437
1438
1439

1440
1441
1442
1443
1444

1445

1446
1447
1448
1449
1450
1451
1452







-
+




-
+
-







        /* Perform the next step in the connection phase, and then move on
           to the WAITCONNECT state */
        result = Curl_once_resolved(data->conn, &protocol_connect);

        if(result)
          /* if Curl_once_resolved() returns failure, the connection struct
             is already freed and gone */
          detach_connnection(data); /* no more connection */
          data->conn = NULL; /* no more connection */
        else {
          /* call again please so that we get the next socket setup */
          rc = CURLM_CALL_MULTI_PERFORM;
          if(protocol_connect)
            multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
            multistate(data, CURLM_STATE_DO);
                       CURLM_STATE_WAITDO:CURLM_STATE_DO);
          else {
#ifndef CURL_DISABLE_HTTP
            if(Curl_connect_ongoing(data->conn))
              multistate(data, CURLM_STATE_WAITPROXYCONNECT);
            else
#endif
              multistate(data, CURLM_STATE_WAITCONNECT);
1492
1493
1494
1495
1496
1497
1498

1499
1500
1501
1502
1503
1504
1505
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475







+







      }
    }
    break;

#ifndef CURL_DISABLE_HTTP
    case CURLM_STATE_WAITPROXYCONNECT:
      /* this is HTTP-specific, but sending CONNECT to a proxy is HTTP... */
      DEBUGASSERT(data->conn);
      result = Curl_http_connect(data->conn, &protocol_connect);

      if(data->conn->bits.proxy_connect_closed) {
        rc = CURLM_CALL_MULTI_PERFORM;
        /* connect back to proxy again */
        result = CURLE_OK;
        multi_done(data, CURLE_OK, FALSE);
1517
1518
1519
1520
1521
1522
1523

1524
1525
1526
1527
1528
1529
1530
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501







+







      else if(result)
        stream_error = TRUE;
      break;
#endif

    case CURLM_STATE_WAITCONNECT:
      /* awaiting a completion of an asynch TCP connect */
      DEBUGASSERT(data->conn);
      result = Curl_is_connected(data->conn, FIRSTSOCKET, &connected);
      if(connected && !result) {
#ifndef CURL_DISABLE_HTTP
        if((data->conn->http_proxy.proxytype == CURLPROXY_HTTPS &&
            !data->conn->bits.proxy_ssl_connected[FIRSTSOCKET]) ||
           Curl_connect_ongoing(data->conn)) {
          multistate(data, CURLM_STATE_WAITPROXYCONNECT);
1548
1549
1550
1551
1552
1553
1554
1555

1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572

1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608

1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619

1620
1621
1622
1623
1624
1625
1626
1519
1520
1521
1522
1523
1524
1525

1526

1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541

1542

1543
1544
1545
1546
1547
1548
1549
1550









1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588







-
+
-















-
+
-








-
-
-
-
-
-
-
-
-


















+











+







    case CURLM_STATE_SENDPROTOCONNECT:
      result = Curl_protocol_connect(data->conn, &protocol_connect);
      if(!result && !protocol_connect)
        /* switch to waiting state */
        multistate(data, CURLM_STATE_PROTOCONNECT);
      else if(!result) {
        /* protocol connect has completed, go WAITDO or DO */
        multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
        multistate(data, CURLM_STATE_DO);
                   CURLM_STATE_WAITDO:CURLM_STATE_DO);
        rc = CURLM_CALL_MULTI_PERFORM;
      }
      else if(result) {
        /* failure detected */
        Curl_posttransfer(data);
        multi_done(data, result, TRUE);
        stream_error = TRUE;
      }
      break;

    case CURLM_STATE_PROTOCONNECT:
      /* protocol-specific connect phase */
      result = Curl_protocol_connecting(data->conn, &protocol_connect);
      if(!result && protocol_connect) {
        /* after the connect has completed, go WAITDO or DO */
        multistate(data, Curl_pipeline_wanted(multi, CURLPIPE_HTTP1)?
        multistate(data, CURLM_STATE_DO);
                   CURLM_STATE_WAITDO:CURLM_STATE_DO);
        rc = CURLM_CALL_MULTI_PERFORM;
      }
      else if(result) {
        /* failure detected */
        Curl_posttransfer(data);
        multi_done(data, result, TRUE);
        stream_error = TRUE;
      }
      break;

    case CURLM_STATE_WAITDO:
      /* Wait for our turn to DO when we're pipelining requests */
      if(Curl_pipeline_checkget_write(data, data->conn)) {
        /* Grabbed the channel */
        multistate(data, CURLM_STATE_DO);
        rc = CURLM_CALL_MULTI_PERFORM;
      }
      break;

    case CURLM_STATE_DO:
      if(data->set.connect_only) {
        /* keep connection open for application to use the socket */
        connkeep(data->conn, "CONNECT_ONLY");
        multistate(data, CURLM_STATE_DONE);
        result = CURLE_OK;
        rc = CURLM_CALL_MULTI_PERFORM;
      }
      else {
        /* Perform the protocol's DO action */
        result = multi_do(data, &dophase_done);

        /* When multi_do() returns failure, data->conn might be NULL! */

        if(!result) {
          if(!dophase_done) {
#ifndef CURL_DISABLE_FTP
            /* some steps needed for wildcard matching */
            if(data->state.wildcardmatch) {
              struct WildcardData *wc = &data->wildcard;
              if(wc->state == CURLWC_DONE || wc->state == CURLWC_SKIP) {
                /* skip some states if it is important */
                multi_done(data, CURLE_OK, FALSE);
                multistate(data, CURLM_STATE_DONE);
                rc = CURLM_CALL_MULTI_PERFORM;
                break;
              }
            }
#endif
            /* DO was not completed in one function call, we must continue
               DOING... */
            multistate(data, CURLM_STATE_DOING);
            rc = CURLM_OK;
          }

          /* after DO, go DO_DONE... or DO_MORE */
1692
1693
1694
1695
1696
1697
1698

1699
1700
1701
1702
1703
1704
1705
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668







+







          stream_error = TRUE;
        }
      }
      break;

    case CURLM_STATE_DOING:
      /* we continue DOING until the DO phase is complete */
      DEBUGASSERT(data->conn);
      result = Curl_protocol_doing(data->conn,
                                   &dophase_done);
      if(!result) {
        if(dophase_done) {
          /* after DO, go DO_DONE or DO_MORE */
          multistate(data, data->conn->bits.do_more?
                     CURLM_STATE_DO_MORE:
1715
1716
1717
1718
1719
1720
1721

1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687


1688
1689
1690
1691
1692
1693
1694







+


-
-







      }
      break;

    case CURLM_STATE_DO_MORE:
      /*
       * When we are connected, DO MORE and then go DO_DONE
       */
      DEBUGASSERT(data->conn);
      result = multi_do_more(data->conn, &control);

      /* No need to remove this handle from the send pipeline here since that
         is done in multi_done() */
      if(!result) {
        if(control) {
          /* if positive, advance to DO_DONE
             if negative, go back to DOING */
          multistate(data, control == 1?
                     CURLM_STATE_DO_DONE:
                     CURLM_STATE_DOING);
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751


1752
1753

1754
1755
1756
1757
1758
1759

1760

1761
1762
1763

1764

1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779

1780
1781
1782
1783
1784
1785
1786
1703
1704
1705
1706
1707
1708
1709




1710
1711
1712

1713
1714
1715
1716
1717
1718

1719
1720
1721
1722
1723

1724
1725
1726
1727
1728
1729
1730
1731









1732
1733
1734
1735
1736
1737
1738
1739
1740







-
-
-
-
+
+

-
+





-
+

+


-
+

+





-
-
-
-
-
-
-
-
-

+







        Curl_posttransfer(data);
        multi_done(data, result, FALSE);
        stream_error = TRUE;
      }
      break;

    case CURLM_STATE_DO_DONE:
      /* Move ourselves from the send to recv pipeline */
      Curl_move_handle_from_send_to_recv_pipe(data, data->conn);

      if(data->conn->bits.multiplex || data->conn->send_pipe.size)
      DEBUGASSERT(data->conn);
      if(data->conn->bits.multiplex)
        /* Check if we can move pending requests to send pipe */
        process_pending_handles(multi); /*  pipelined/multiplexed */
        process_pending_handles(multi); /*  multiplexed */

      /* Only perform the transfer if there's a good socket to work with.
         Having both BAD is a signal to skip immediately to DONE */
      if((data->conn->sockfd != CURL_SOCKET_BAD) ||
         (data->conn->writesockfd != CURL_SOCKET_BAD))
        multistate(data, CURLM_STATE_WAITPERFORM);
        multistate(data, CURLM_STATE_PERFORM);
      else {
#ifndef CURL_DISABLE_FTP
        if(data->state.wildcardmatch &&
           ((data->conn->handler->flags & PROTOPT_WILDCARD) == 0)) {
           data->wildcard.state = CURLWC_DONE;
          data->wildcard.state = CURLWC_DONE;
        }
#endif
        multistate(data, CURLM_STATE_DONE);
      }
      rc = CURLM_CALL_MULTI_PERFORM;
      break;

    case CURLM_STATE_WAITPERFORM:
      /* Wait for our turn to PERFORM */
      if(Curl_pipeline_checkget_read(data, data->conn)) {
        /* Grabbed the channel */
        multistate(data, CURLM_STATE_PERFORM);
        rc = CURLM_CALL_MULTI_PERFORM;
      }
      break;

    case CURLM_STATE_TOOFAST: /* limit-rate exceeded in either direction */
      DEBUGASSERT(data->conn);
      /* if both rates are within spec, resume transfer */
      if(Curl_pgrsUpdate(data->conn))
        result = CURLE_ABORTED_BY_CALLBACK;
      else
        result = Curl_speedcheck(data, now);

      if(!result) {
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884

1885
1886

1887
1888
1889
1890





1891
1892
1893
1894


1895
1896
1897



1898
1899
1900


1901
1902
1903
1904
1905
1906
1907
1800
1801
1802
1803
1804
1805
1806












1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825

1826
1827
1828
1829




1830
1831
1832
1833
1834




1835
1836



1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851







-
-
-
-
-
-
-
-
-
-
-
-



















-
+


+
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
-
-
-
+
+
+



+
+







          Curl_expire(data, recv_timeout_ms, EXPIRE_TOOFAST);
        break;
      }

      /* read/write data if it is ready to do so */
      result = Curl_readwrite(data->conn, data, &done, &comeback);

      k = &data->req;

      if(!(k->keepon & KEEP_RECV)) {
        /* We're done receiving */
        Curl_pipeline_leave_read(data->conn);
      }

      if(!(k->keepon & KEEP_SEND)) {
        /* We're done sending */
        Curl_pipeline_leave_write(data->conn);
      }

      if(done || (result == CURLE_RECV_ERROR)) {
        /* If CURLE_RECV_ERROR happens early enough, we assume it was a race
         * condition and the server closed the re-used connection exactly when
         * we wanted to use it, so figure out if that is indeed the case.
         */
        CURLcode ret = Curl_retry_request(data->conn, &newurl);
        if(!ret)
          retry = (newurl)?TRUE:FALSE;
        else if(!result)
          result = ret;

        if(retry) {
          /* if we are to retry, set the result to OK and consider the
             request as done */
          result = CURLE_OK;
          done = TRUE;
        }
      }
      else if((CURLE_HTTP2_STREAM == result) &&
                Curl_h2_http_1_1_error(data->conn)) {
              Curl_h2_http_1_1_error(data->conn)) {
        CURLcode ret = Curl_retry_request(data->conn, &newurl);

        if(!ret) {
        infof(data, "Forcing HTTP/1.1 for NTLM");
        data->set.httpversion = CURL_HTTP_VERSION_1_1;

        if(!ret)
          infof(data, "Downgrades to HTTP/1.1!\n");
          data->set.httpversion = CURL_HTTP_VERSION_1_1;
          /* clear the error message bit too as we ignore the one we got */
          data->state.errorbuf = FALSE;
          if(!newurl)
          retry = (newurl)?TRUE:FALSE;
        else
          result = ret;

            /* typically for HTTP_1_1_REQUIRED error on first flight */
            newurl = strdup(data->change.url);
        if(retry) {
          /* if we are to retry, set the result to OK and consider the
             request as done */
          /* if we are to retry, set the result to OK and consider the request
             as done */
          retry = TRUE;
          result = CURLE_OK;
          done = TRUE;
        }
        else
          result = ret;
      }

      if(result) {
        /*
         * The transfer phase returned error, we mark the connection to get
         * closed to prevent being re-used. This is because we can't possibly
         * know if the connection is in a good shape or not now.  Unless it is
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950






1951
1952
1953
1954
1955
1956
1957
1958
1862
1863
1864
1865
1866
1867
1868







1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881






1882
1883
1884
1885
1886
1887

1888
1889
1890
1891
1892
1893
1894







-
-
-
-
-
-
-













-
-
-
-
-
-
+
+
+
+
+
+
-







      }
      else if(done) {
        followtype follow = FOLLOW_NONE;

        /* call this even if the readwrite function returned error */
        Curl_posttransfer(data);

        /* we're no longer receiving */
        Curl_removeHandleFromPipeline(data, &data->conn->recv_pipe);

        /* expire the new receiving pipeline head */
        if(data->conn->recv_pipe.head)
          Curl_expire(data->conn->recv_pipe.head->ptr, 0, EXPIRE_RUN_NOW);

        /* When we follow redirects or is set to retry the connection, we must
           to go back to the CONNECT state */
        if(data->req.newurl || retry) {
          if(!retry) {
            /* if the URL is a follow-location and not just a retried request
               then figure out the URL here */
            free(newurl);
            newurl = data->req.newurl;
            data->req.newurl = NULL;
            follow = FOLLOW_REDIR;
          }
          else
            follow = FOLLOW_RETRY;
          result = multi_done(data, CURLE_OK, FALSE);
          if(!result) {
            result = Curl_follow(data, newurl, follow);
            if(!result) {
              multistate(data, CURLM_STATE_CONNECT);
              rc = CURLM_CALL_MULTI_PERFORM;
          (void)multi_done(data, CURLE_OK, FALSE);
          /* multi_done() might return CURLE_GOT_NOTHING */
          result = Curl_follow(data, newurl, follow);
          if(!result) {
            multistate(data, CURLM_STATE_CONNECT);
            rc = CURLM_CALL_MULTI_PERFORM;
            }
          }
          free(newurl);
        }
        else {
          /* after the transfer is done, go DONE */

          /* but first check to see if we got a location info even though we're
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993

1994
1995

1996
1997
1998
1999
2000
2001
2002
2003
2004
2005

2006
2007
2008
2009
2010
2011
2012
2013

2014
2015
2016
2017
2018
2019
2020
2021
2022

2023
2024
2025
2026
2027
2028
2029
1919
1920
1921
1922
1923
1924
1925




1926
1927

1928
1929
1930
1931
1932
1933
1934
1935
1936
1937

1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955

1956
1957
1958
1959
1960
1961
1962
1963







-
-
-
-
+

-
+









-
+








+








-
+







    case CURLM_STATE_DONE:
      /* this state is highly transient, so run another loop after this */
      rc = CURLM_CALL_MULTI_PERFORM;

      if(data->conn) {
        CURLcode res;

        /* Remove ourselves from the receive pipeline, if we are there. */
        Curl_removeHandleFromPipeline(data, &data->conn->recv_pipe);

        if(data->conn->bits.multiplex || data->conn->send_pipe.size)
        if(data->conn->bits.multiplex)
          /* Check if we can move pending requests to connection */
          process_pending_handles(multi); /* pipelined/multiplexing */
          process_pending_handles(multi); /* multiplexing */

        /* post-transfer command */
        res = multi_done(data, result, FALSE);

        /* allow a previously set error code take precedence */
        if(!result)
          result = res;

        /*
         * If there are other handles on the pipeline, multi_done won't set
         * If there are other handles on the connection, multi_done won't set
         * conn to NULL.  In such a case, curl_multi_remove_handle() can
         * access free'd data, if the connection is free'd and the handle
         * removed before we perform the processing in CURLM_STATE_COMPLETED
         */
        if(data->conn)
          detach_connnection(data);
      }

#ifndef CURL_DISABLE_FTP
      if(data->state.wildcardmatch) {
        if(data->wildcard.state != CURLWC_DONE) {
          /* if a wildcard is set and we are not ending -> lets start again
             with CURLM_STATE_INIT */
          multistate(data, CURLM_STATE_INIT);
          break;
        }
      }

#endif
      /* after we have DONE what we're supposed to do, go COMPLETED, and
         it doesn't matter what the multi_done() returned! */
      multistate(data, CURLM_STATE_COMPLETED);
      break;

    case CURLM_STATE_COMPLETED:
      break;
2047
2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2063
2064
2065
2066
1981
1982
1983
1984
1985
1986
1987






1988
1989
1990
1991
1992
1993
1994







-
-
-
-
-
-







        /* NOTE: no attempt to disconnect connections must be made
           in the case blocks above - cleanup happens only here */

        /* Check if we can move pending requests to send pipe */
        process_pending_handles(multi); /* connection */

        if(data->conn) {
          /* if this has a connection, unsubscribe from the pipelines */
          Curl_pipeline_leave_write(data->conn);
          Curl_pipeline_leave_read(data->conn);
          Curl_removeHandleFromPipeline(data, &data->conn->send_pipe);
          Curl_removeHandleFromPipeline(data, &data->conn->recv_pipe);

          if(stream_error) {
            /* Don't attempt to send data over a connection that timed out */
            bool dead_connection = result == CURLE_OPERATION_TIMEDOUT;
            /* disconnect properly */
            Curl_disconnect(data, data->conn, dead_connection);

            /* This is where we make sure that the conn pointer is reset.
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2141
2142
2143
2144
2145
2146
2147






2148
2149
2150
2151
2152
2153
2154







-
-
-
-
-
-







    Curl_hash_destroy(&multi->sockhash);
    Curl_conncache_destroy(&multi->conn_cache);
    Curl_llist_destroy(&multi->msglist, NULL);
    Curl_llist_destroy(&multi->pending, NULL);

    Curl_hash_destroy(&multi->hostcache);
    Curl_psl_destroy(&multi->psl);

    /* Free the blacklists by setting them to NULL */
    (void)Curl_pipeline_set_site_blacklist(NULL, &multi->pipelining_site_bl);
    (void)Curl_pipeline_set_server_blacklist(NULL,
                                             &multi->pipelining_server_bl);

    free(multi);

    return CURLM_OK;
  }
  return CURLM_BAD_HANDLE;
}

2571
2572
2573
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2493
2494
2495
2496
2497
2498
2499













2500
2501
2502
2503
2504
2505
2506







-
-
-
-
-
-
-
-
-
-
-
-
-







      for(e = list->head; e; e = e->next) {
        data = (struct Curl_easy *)e->ptr;

        if(data->magic != CURLEASY_MAGIC_NUMBER)
          /* bad bad bad bad bad bad bad */
          return CURLM_INTERNAL_ERROR;

        /* If the pipeline is enabled, take the handle which is in the head of
           the pipeline. If we should write into the socket, take the
           send_pipe head. If we should read from the socket, take the
           recv_pipe head. */
        if(data->conn) {
          if((ev_bitmask & CURL_POLL_OUT) &&
             data->conn->send_pipe.head)
            data = data->conn->send_pipe.head->ptr;
          else if((ev_bitmask & CURL_POLL_IN) &&
                  data->conn->recv_pipe.head)
            data = data->conn->recv_pipe.head->ptr;
        }

        if(data->conn && !(data->conn->handler->flags & PROTOPT_DIRLOCK))
          /* set socket event bitmask if they're not locked */
          data->conn->cselect_bits = ev_bitmask;

        sigpipe_ignore(data, &pipe_st);
        result = multi_runsingle(multi, now, data);
        sigpipe_restore(&pipe_st);
2690
2691
2692
2693
2694
2695
2696
2697

2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712


2713



2714
2715
2716
2717
2718
2719
2720
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2599
2600
2601
2602
2603
2604
2605

2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619


2620
2621
2622
2623
2624
2625
2626

2627
2628

2629
2630


2631
2632





2633
2634
2635
2636
2637
2638
2639







-
+













-
-
+
+

+
+
+

-


-


-
-


-
-
-
-
-







  case CURLMOPT_PUSHFUNCTION:
    multi->push_cb = va_arg(param, curl_push_callback);
    break;
  case CURLMOPT_PUSHDATA:
    multi->push_userp = va_arg(param, void *);
    break;
  case CURLMOPT_PIPELINING:
    multi->pipelining = va_arg(param, long) & CURLPIPE_MULTIPLEX;
    multi->multiplexing = va_arg(param, long) & CURLPIPE_MULTIPLEX;
    break;
  case CURLMOPT_TIMERFUNCTION:
    multi->timer_cb = va_arg(param, curl_multi_timer_callback);
    break;
  case CURLMOPT_TIMERDATA:
    multi->timer_userp = va_arg(param, void *);
    break;
  case CURLMOPT_MAXCONNECTS:
    multi->maxconnects = va_arg(param, long);
    break;
  case CURLMOPT_MAX_HOST_CONNECTIONS:
    multi->max_host_connections = va_arg(param, long);
    break;
  case CURLMOPT_MAX_PIPELINE_LENGTH:
    multi->max_pipeline_length = va_arg(param, long);
  case CURLMOPT_MAX_TOTAL_CONNECTIONS:
    multi->max_total_connections = va_arg(param, long);
    break;
    /* options formerly used for pipelining */
  case CURLMOPT_MAX_PIPELINE_LENGTH:
    break;
  case CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE:
    multi->content_length_penalty_size = va_arg(param, long);
    break;
  case CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE:
    multi->chunk_length_penalty_size = va_arg(param, long);
    break;
  case CURLMOPT_PIPELINING_SITE_BL:
    res = Curl_pipeline_set_site_blacklist(va_arg(param, char **),
                                           &multi->pipelining_site_bl);
    break;
  case CURLMOPT_PIPELINING_SERVER_BL:
    res = Curl_pipeline_set_server_blacklist(va_arg(param, char **),
                                             &multi->pipelining_server_bl);
    break;
  case CURLMOPT_MAX_TOTAL_CONNECTIONS:
    multi->max_total_connections = va_arg(param, long);
    break;
  default:
    res = CURLM_UNKNOWN_OPTION;
    break;
  }
  va_end(param);
  return res;
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084





3085
3086

3087
3088
3089

3090
3091

3092
3093
3094
3095
3096




3097
3098
3099

3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116



3117
3118
3119
3120
3121
3122
3123
2978
2979
2980
2981
2982
2983
2984



2985
2986
2987
2988
2989


2990

2991

2992


2993





2994
2995
2996
2997



2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025







-
-
-
+
+
+
+
+
-
-
+
-

-
+
-
-
+
-
-
-
-
-
+
+
+
+
-
-
-
+

















+
+
+







}

size_t Curl_multi_max_total_connections(struct Curl_multi *multi)
{
  return multi ? multi->max_total_connections : 0;
}

curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi)
{
  return multi ? multi->content_length_penalty_size : 0;
/*
 * When information about a connection has appeared, call this!
 */

void Curl_multiuse_state(struct connectdata *conn,
}

                         int bundlestate) /* use BUNDLE_* defines */
curl_off_t Curl_multi_chunk_length_penalty_size(struct Curl_multi *multi)
{
  return multi ? multi->chunk_length_penalty_size : 0;
  DEBUGASSERT(conn);
}

  DEBUGASSERT(conn->bundle);
struct curl_llist *Curl_multi_pipelining_site_bl(struct Curl_multi *multi)
{
  return &multi->pipelining_site_bl;
}

  DEBUGASSERT(conn->data);
  DEBUGASSERT(conn->data->multi);

  conn->bundle->multiuse = bundlestate;
struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi)
{
  return &multi->pipelining_server_bl;
  process_pending_handles(conn->data->multi);
}

static void process_pending_handles(struct Curl_multi *multi)
{
  struct curl_llist_element *e = multi->pending.head;
  if(e) {
    struct Curl_easy *data = e->ptr;

    DEBUGASSERT(data->mstate == CURLM_STATE_CONNECT_PEND);

    multistate(data, CURLM_STATE_CONNECT);

    /* Remove this node from the list */
    Curl_llist_remove(&multi->pending, e, NULL);

    /* Make sure that the handle will be processed soonish. */
    Curl_expire(data, 0, EXPIRE_RUN_NOW);

    /* mark this as having been in the pending queue */
    data->state.previouslypending = TRUE;
  }
}

void Curl_set_in_callback(struct Curl_easy *data, bool value)
{
  /* might get called when there is no data pointer! */
  if(data) {
3153
3154
3155
3156
3157
3158
3159
3160
3161


3162
3163
3164
3165
3166
3167
3168
3055
3056
3057
3058
3059
3060
3061


3062
3063
3064
3065
3066
3067
3068
3069
3070







-
-
+
+








        fprintf(stderr, "%d ", (int)s);
        if(!entry) {
          fprintf(stderr, "INTERNAL CONFUSION\n");
          continue;
        }
        fprintf(stderr, "[%s %s] ",
                entry->action&CURL_POLL_IN?"RECVING":"",
                entry->action&CURL_POLL_OUT?"SENDING":"");
                (entry->action&CURL_POLL_IN)?"RECVING":"",
                (entry->action&CURL_POLL_OUT)?"SENDING":"");
      }
      if(data->numsocks)
        fprintf(stderr, "\n");
    }
  }
}
#endif
Changes to jni/curl/lib/multihandle.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_MULTIHANDLE_H
#define HEADER_CURL_MULTIHANDLE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
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







-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+








-
+







  CURLM_STATE_WAITCONNECT,  /* 4 - awaiting the TCP connect to finalize */
  CURLM_STATE_WAITPROXYCONNECT, /* 5 - awaiting HTTPS proxy SSL initialization
                                   to complete and/or proxy CONNECT to
                                   finalize */
  CURLM_STATE_SENDPROTOCONNECT, /* 6 - initiate protocol connect procedure */
  CURLM_STATE_PROTOCONNECT, /* 7 - completing the protocol-specific connect
                                   phase */
  CURLM_STATE_WAITDO,       /* 8 - wait for our turn to send the request */
  CURLM_STATE_DO,           /* 9 - start send off the request (part 1) */
  CURLM_STATE_DOING,        /* 10 - sending off the request (part 1) */
  CURLM_STATE_DO_MORE,      /* 11 - send off the request (part 2) */
  CURLM_STATE_DO_DONE,      /* 12 - done sending off request */
  CURLM_STATE_DO,           /* 8 - start send off the request (part 1) */
  CURLM_STATE_DOING,        /* 9 - sending off the request (part 1) */
  CURLM_STATE_DO_MORE,      /* 10 - send off the request (part 2) */
  CURLM_STATE_DO_DONE,      /* 11 - done sending off request */
  CURLM_STATE_WAITPERFORM,  /* 13 - wait for our turn to read the response */
  CURLM_STATE_PERFORM,      /* 14 - transfer data */
  CURLM_STATE_TOOFAST,      /* 15 - wait because limit-rate exceeded */
  CURLM_STATE_DONE,         /* 16 - post data transfer operation */
  CURLM_STATE_COMPLETED,    /* 17 - operation complete */
  CURLM_STATE_MSGSENT,      /* 18 - the operation complete message is sent */
  CURLM_STATE_LAST          /* 19 - not a true state, never use this */
  CURLM_STATE_PERFORM,      /* 12 - transfer data */
  CURLM_STATE_TOOFAST,      /* 13 - wait because limit-rate exceeded */
  CURLM_STATE_DONE,         /* 14 - post data transfer operation */
  CURLM_STATE_COMPLETED,    /* 15 - operation complete */
  CURLM_STATE_MSGSENT,      /* 16 - the operation complete message is sent */
  CURLM_STATE_LAST          /* 17 - not a true state, never use this */
} CURLMstate;

/* we support N sockets per easy handle. Set the corresponding bit to what
   action we should wait for */
#define MAX_SOCKSPEREASYHANDLE 5
#define GETSOCK_READABLE (0x00ff)
#define GETSOCK_WRITABLE (0xff00)

#define CURLPIPE_ANY (CURLPIPE_HTTP1 | CURLPIPE_MULTIPLEX)
#define CURLPIPE_ANY (CURLPIPE_MULTIPLEX)

/* This is the struct known as CURLM on the outside */
struct Curl_multi {
  /* First a simple identifier to easier detect if a user mix up
     this multi handle with an easy handle. Set this to CURL_MULTI_HANDLE. */
  long type;

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
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







-
-
+
+















-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-









  struct Curl_tree *timetree;

  /* 'sockhash' is the lookup hash for socket descriptor => easy handles (note
     the pluralis form, there can be more than one easy handle waiting on the
     same actual socket) */
  struct curl_hash sockhash;

  /* pipelining wanted bits (CURLPIPE*) */
  long pipelining;
  /* multiplexing wanted */
  bool multiplexing;

  bool recheckstate; /* see Curl_multi_connchanged */

  /* Shared connection cache (bundles)*/
  struct conncache conn_cache;

  long maxconnects; /* if >0, a fixed limit of the maximum number of entries
                       we're allowed to grow the connection cache to */

  long max_host_connections; /* if >0, a fixed limit of the maximum number
                                of connections per host */

  long max_total_connections; /* if >0, a fixed limit of the maximum number
                                 of connections in total */

  long max_pipeline_length; /* if >0, maximum number of requests in a
                               pipeline */

  long content_length_penalty_size; /* a connection with a
                                       content-length bigger than
                                       this is not considered
                                       for pipelining */

  long chunk_length_penalty_size; /* a connection with a chunk length
                                     bigger than this is not
                                     considered for pipelining */

  struct curl_llist pipelining_site_bl; /* List of sites that are blacklisted
                                           from pipelining */

  struct curl_llist pipelining_server_bl; /* List of server types that are
                                             blacklisted from pipelining */

  /* timer callback and user data pointer for the *socket() API */
  curl_multi_timer_callback timer_cb;
  void *timer_userp;
  struct curltime timer_lastcall; /* the fixed time for the timeout for the
                                    previous callback */
  bool in_callback;            /* true while executing a callback */
};

#endif /* HEADER_CURL_MULTIHANDLE_H */
Changes to jni/curl/lib/multiif.h.
26
27
28
29
30
31
32
33
34
35
36

37
38
39
40
41
42
43
26
27
28
29
30
31
32

33
34
35
36
37
38
39
40
41
42
43







-



+







 * Prototypes for library-wide functions provided by multi.c
 */

void Curl_updatesocket(struct Curl_easy *data);
void Curl_expire(struct Curl_easy *data, time_t milli, expire_id);
void Curl_expire_clear(struct Curl_easy *data);
void Curl_expire_done(struct Curl_easy *data, expire_id id);
bool Curl_pipeline_wanted(const struct Curl_multi* multi, int bits);
void Curl_detach_connnection(struct Curl_easy *data);
void Curl_attach_connnection(struct Curl_easy *data,
                             struct connectdata *conn);
bool Curl_multiplex_wanted(const struct Curl_multi *multi);
void Curl_set_in_callback(struct Curl_easy *data, bool value);
bool Curl_is_in_callback(struct Curl_easy *easy);

/* Internal version of curl_multi_init() accepts size parameters for the
   socket and connection hashes */
struct Curl_multi *Curl_multi_handle(int hashsize, int chashsize);

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
60
61
62
63
64
65
66












67
68
69

70
71
72
73
74
75
76
77
78







-
-
-
-
-
-
-
-
-
-
-
-



-
+
+







  */
void Curl_multi_dump(struct Curl_multi *multi);
#endif

/* Return the value of the CURLMOPT_MAX_HOST_CONNECTIONS option */
size_t Curl_multi_max_host_connections(struct Curl_multi *multi);

/* Return the value of the CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE option */
curl_off_t Curl_multi_content_length_penalty_size(struct Curl_multi *multi);

/* Return the value of the CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE option */
curl_off_t Curl_multi_chunk_length_penalty_size(struct Curl_multi *multi);

/* Return the value of the CURLMOPT_PIPELINING_SITE_BL option */
struct curl_llist *Curl_multi_pipelining_site_bl(struct Curl_multi *multi);

/* Return the value of the CURLMOPT_PIPELINING_SERVER_BL option */
struct curl_llist *Curl_multi_pipelining_server_bl(struct Curl_multi *multi);

/* Return the value of the CURLMOPT_MAX_TOTAL_CONNECTIONS option */
size_t Curl_multi_max_total_connections(struct Curl_multi *multi);

void Curl_multi_connchanged(struct Curl_multi *multi);
void Curl_multiuse_state(struct connectdata *conn,
                         int bundlestate); /* use BUNDLE_* defines */

/*
 * Curl_multi_closed()
 *
 * Used by the connect code to tell the multi_socket code that one of the
 * sockets we were using is about to be closed.  This function will then
 * remove it from the sockethash for this handle to make the multi_socket API
Changes to jni/curl/lib/netrc.c.
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
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







-
+















+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"
#ifndef CURL_DISABLE_NETRC

#ifdef HAVE_PWD_H
#include <pwd.h>
#endif

#include <curl/curl.h>
#include "netrc.h"
236
237
238
239
240
241
242


237
238
239
240
241
242
243
244
245







+
+
        free(password);
    }
    fclose(file);
  }

  return retcode;
}

#endif
Changes to jni/curl/lib/netrc.h.
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
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









-
+














+
+
+












+
+
+
+


#ifndef HEADER_CURL_NETRC_H
#define HEADER_CURL_NETRC_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2011, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"
#ifndef CURL_DISABLE_NETRC

/* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */
int Curl_parsenetrc(const char *host,
                    char **loginp,
                    char **passwordp,
                    bool *login_changed,
                    bool *password_changed,
                    char *filename);
  /* Assume: (*passwordp)[0]=0, host[0] != 0.
   * If (*loginp)[0] = 0, search for login and password within a machine
   * section in the netrc.
   * If (*loginp)[0] != 0, search for password within machine and login.
   */
#else
/* disabled */
#define Curl_parsenetrc(a,b,c,d,e,f) 1
#endif

#endif /* HEADER_CURL_NETRC_H */
Changes to jni/curl/lib/openldap.c.
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
192
193
194
195
196
197
198



199
200
201
202
203
204
205







-
-
-








  li = calloc(1, sizeof(ldapconninfo));
  if(!li)
    return CURLE_OUT_OF_MEMORY;
  li->proto = proto;
  conn->proto.generic = li;
  connkeep(conn, "OpenLDAP default");
  /* TODO:
   * - provide option to choose SASL Binds instead of Simple
   */
  return CURLE_OK;
}

#ifdef USE_SSL
static Sockbuf_IO ldapsb_tls;
#endif

506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
503
504
505
506
507
508
509


510
511
512
513
514
515
516







-
-







    }
    else if(msgtype != LDAP_RES_SEARCH_ENTRY)
      continue;

    lr->nument++;
    rc = ldap_get_dn_ber(li->ld, ent, &ber, &bv);
    if(rc < 0) {
      /* TODO: verify that this is really how this return code should be
         handled */
      *err = CURLE_RECV_ERROR;
      return -1;
    }
    writeerr = Curl_client_write(conn, CLIENTWRITE_BODY, (char *)"DN: ", 4);
    if(writeerr) {
      *err = writeerr;
      return -1;
Changes to jni/curl/lib/parsedate.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
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







-
-
-
-
-
-
-
-
-
-
-
-
-
-

















+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







#include <limits.h>

#include <curl/curl.h>
#include "strcase.h"
#include "warnless.h"
#include "parsedate.h"

const char * const Curl_wkday[] =
{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
static const char * const weekday[] =
{ "Monday", "Tuesday", "Wednesday", "Thursday",
  "Friday", "Saturday", "Sunday" };
const char * const Curl_month[]=
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

struct tzinfo {
  char name[5];
  int offset; /* +/- in minutes */
};

/*
 * parsedate()
 *
 * Returns:
 *
 * PARSEDATE_OK     - a fine conversion
 * PARSEDATE_FAIL   - failed to convert
 * PARSEDATE_LATER  - time overflow at the far end of time_t
 * PARSEDATE_SOONER - time underflow at the low end of time_t
 */

static int parsedate(const char *date, time_t *output);

#define PARSEDATE_OK     0
#define PARSEDATE_FAIL   -1
#define PARSEDATE_LATER  1
#define PARSEDATE_SOONER 2

#ifndef CURL_DISABLE_PARSEDATE

const char * const Curl_wkday[] =
{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
static const char * const weekday[] =
{ "Monday", "Tuesday", "Wednesday", "Thursday",
  "Friday", "Saturday", "Sunday" };
const char * const Curl_month[]=
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
  "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };

struct tzinfo {
  char name[5];
  int offset; /* +/- in minutes */
};

/* Here's a bunch of frequently used time zone names. These were supported
   by the old getdate parser. */
#define tDAYZONE -60       /* offset for daylight savings time */
static const struct tzinfo tz[]= {
  {"GMT", 0},              /* Greenwich Mean */
  {"UT",  0},              /* Universal Time */
551
552
553
554
555
556
557









558
559
560
561
562
563
564
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575







+
+
+
+
+
+
+
+
+








  t += tzoff;

  *output = t;

  return PARSEDATE_OK;
}
#else
/* disabled */
static int parsedate(const char *date, time_t *output)
{
  (void)date;
  *output = 0;
  return PARSEDATE_OK; /* a lie */
}
#endif

time_t curl_getdate(const char *p, const time_t *now)
{
  time_t parsed = -1;
  int rc = parsedate(p, &parsed);
  (void)now; /* legacy argument from the past that we ignore */

Deleted jni/curl/lib/pipeline.c.
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




















































































































































































































































































































































































































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2013, Linus Nielsen Feltzing, <linus@haxx.se>
 * Copyright (C) 2013 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#include <curl/curl.h>

#include "urldata.h"
#include "url.h"
#include "progress.h"
#include "multiif.h"
#include "pipeline.h"
#include "sendf.h"
#include "strcase.h"

#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

struct site_blacklist_entry {
  struct curl_llist_element list;
  unsigned short port;
  char hostname[1];
};

static void site_blacklist_llist_dtor(void *user, void *element)
{
  struct site_blacklist_entry *entry = element;
  (void)user;
  free(entry);
}

static void server_blacklist_llist_dtor(void *user, void *element)
{
  (void)user;
  free(element);
}

bool Curl_pipeline_penalized(struct Curl_easy *data,
                             struct connectdata *conn)
{
  if(data) {
    bool penalized = FALSE;
    curl_off_t penalty_size =
      Curl_multi_content_length_penalty_size(data->multi);
    curl_off_t chunk_penalty_size =
      Curl_multi_chunk_length_penalty_size(data->multi);
    curl_off_t recv_size = -2; /* Make it easy to spot in the log */

    /* Find the head of the recv pipe, if any */
    if(conn->recv_pipe.head) {
      struct Curl_easy *recv_handle = conn->recv_pipe.head->ptr;

      recv_size = recv_handle->req.size;

      if(penalty_size > 0 && recv_size > penalty_size)
        penalized = TRUE;
    }

    if(chunk_penalty_size > 0 &&
       (curl_off_t)conn->chunk.datasize > chunk_penalty_size)
      penalized = TRUE;

    infof(data, "Conn: %ld (%p) Receive pipe weight: (%"
          CURL_FORMAT_CURL_OFF_T "/%" CURL_FORMAT_CURL_OFF_T
          "), penalized: %s\n",
          conn->connection_id, (void *)conn, recv_size,
          conn->chunk.datasize, penalized?"TRUE":"FALSE");
    return penalized;
  }
  return FALSE;
}

static CURLcode addHandleToPipeline(struct Curl_easy *data,
                                    struct curl_llist *pipeline)
{
  Curl_llist_insert_next(pipeline, pipeline->tail, data,
                         &data->pipeline_queue);
  return CURLE_OK;
}


CURLcode Curl_add_handle_to_pipeline(struct Curl_easy *handle,
                                     struct connectdata *conn)
{
  struct curl_llist_element *sendhead = conn->send_pipe.head;
  struct curl_llist *pipeline;
  CURLcode result;

  pipeline = &conn->send_pipe;

  result = addHandleToPipeline(handle, pipeline);
  if((conn->bundle->multiuse == BUNDLE_PIPELINING) &&
     (pipeline == &conn->send_pipe && sendhead != conn->send_pipe.head)) {
    /* this is a new one as head, expire it */
    Curl_pipeline_leave_write(conn); /* not in use yet */
    Curl_expire(conn->send_pipe.head->ptr, 0, EXPIRE_RUN_NOW);
  }

#if 0 /* enable for pipeline debugging */
  print_pipeline(conn);
#endif

  return result;
}

/* Move this transfer from the sending list to the receiving list.

   Pay special attention to the new sending list "leader" as it needs to get
   checked to update what sockets it acts on.

*/
void Curl_move_handle_from_send_to_recv_pipe(struct Curl_easy *handle,
                                             struct connectdata *conn)
{
  struct curl_llist_element *curr;

  curr = conn->send_pipe.head;
  while(curr) {
    if(curr->ptr == handle) {
      Curl_llist_move(&conn->send_pipe, curr,
                      &conn->recv_pipe, conn->recv_pipe.tail);

      if(conn->send_pipe.head) {
        /* Since there's a new easy handle at the start of the send pipeline,
           set its timeout value to 1ms to make it trigger instantly */
        Curl_pipeline_leave_write(conn); /* not used now */
#ifdef DEBUGBUILD
        infof(conn->data, "%p is at send pipe head B!\n",
              (void *)conn->send_pipe.head->ptr);
#endif
        Curl_expire(conn->send_pipe.head->ptr, 0, EXPIRE_RUN_NOW);
      }

      /* The receiver's list is not really interesting here since either this
         handle is now first in the list and we'll deal with it soon, or
         another handle is already first and thus is already taken care of */

      break; /* we're done! */
    }
    curr = curr->next;
  }
}

bool Curl_pipeline_site_blacklisted(struct Curl_easy *handle,
                                    struct connectdata *conn)
{
  if(handle->multi) {
    struct curl_llist *blacklist =
      Curl_multi_pipelining_site_bl(handle->multi);

    if(blacklist) {
      struct curl_llist_element *curr;

      curr = blacklist->head;
      while(curr) {
        struct site_blacklist_entry *site;

        site = curr->ptr;
        if(strcasecompare(site->hostname, conn->host.name) &&
           site->port == conn->remote_port) {
          infof(handle, "Site %s:%d is pipeline blacklisted\n",
                conn->host.name, conn->remote_port);
          return TRUE;
        }
        curr = curr->next;
      }
    }
  }
  return FALSE;
}

CURLMcode Curl_pipeline_set_site_blacklist(char **sites,
                                           struct curl_llist *list)
{
  /* Free the old list */
  if(list->size)
    Curl_llist_destroy(list, NULL);

  if(sites) {
    Curl_llist_init(list, (curl_llist_dtor) site_blacklist_llist_dtor);

    /* Parse the URLs and populate the list */
    while(*sites) {
      char *port;
      struct site_blacklist_entry *entry;

      entry = malloc(sizeof(struct site_blacklist_entry) + strlen(*sites));
      if(!entry) {
        Curl_llist_destroy(list, NULL);
        return CURLM_OUT_OF_MEMORY;
      }
      strcpy(entry->hostname, *sites);

      port = strchr(entry->hostname, ':');
      if(port) {
        *port = '\0';
        port++;
        entry->port = (unsigned short)strtol(port, NULL, 10);
      }
      else {
        /* Default port number for HTTP */
        entry->port = 80;
      }

      Curl_llist_insert_next(list, list->tail, entry, &entry->list);
      sites++;
    }
  }

  return CURLM_OK;
}

struct blacklist_node {
  struct curl_llist_element list;
  char server_name[1];
};

bool Curl_pipeline_server_blacklisted(struct Curl_easy *handle,
                                      char *server_name)
{
  if(handle->multi && server_name) {
    struct curl_llist *list =
      Curl_multi_pipelining_server_bl(handle->multi);

    struct curl_llist_element *e = list->head;
    while(e) {
      struct blacklist_node *bl = (struct blacklist_node *)e;
      if(strncasecompare(bl->server_name, server_name,
                         strlen(bl->server_name))) {
        infof(handle, "Server %s is blacklisted\n", server_name);
        return TRUE;
      }
      e = e->next;
    }

    DEBUGF(infof(handle, "Server %s is not blacklisted\n", server_name));
  }
  return FALSE;
}

CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
                                             struct curl_llist *list)
{
  /* Free the old list */
  if(list->size)
    Curl_llist_destroy(list, NULL);

  if(servers) {
    Curl_llist_init(list, (curl_llist_dtor) server_blacklist_llist_dtor);

    /* Parse the URLs and populate the list */
    while(*servers) {
      struct blacklist_node *n;
      size_t len = strlen(*servers);

      n = malloc(sizeof(struct blacklist_node) + len);
      if(!n) {
        Curl_llist_destroy(list, NULL);
        return CURLM_OUT_OF_MEMORY;
      }
      strcpy(n->server_name, *servers);

      Curl_llist_insert_next(list, list->tail, n, &n->list);
      servers++;
    }
  }


  return CURLM_OK;
}

static bool pipe_head(struct Curl_easy *data,
                      struct curl_llist *pipeline)
{
  if(pipeline) {
    struct curl_llist_element *curr = pipeline->head;
    if(curr)
      return (curr->ptr == data) ? TRUE : FALSE;
  }
  return FALSE;
}

/* returns TRUE if the given handle is head of the recv pipe */
bool Curl_recvpipe_head(struct Curl_easy *data,
                        struct connectdata *conn)
{
  return pipe_head(data, &conn->recv_pipe);
}

/* returns TRUE if the given handle is head of the send pipe */
bool Curl_sendpipe_head(struct Curl_easy *data,
                        struct connectdata *conn)
{
  return pipe_head(data, &conn->send_pipe);
}


/*
 * Check if the write channel is available and this handle as at the head,
 * then grab the channel and return TRUE.
 *
 * If not available, return FALSE.
 */

bool Curl_pipeline_checkget_write(struct Curl_easy *data,
                                  struct connectdata *conn)
{
  if(conn->bits.multiplex)
    /* when multiplexing, we can use it at once */
    return TRUE;

  if(!conn->writechannel_inuse && Curl_sendpipe_head(data, conn)) {
    /* Grab the channel */
    conn->writechannel_inuse = TRUE;
    return TRUE;
  }
  return FALSE;
}


/*
 * Check if the read channel is available and this handle as at the head, then
 * grab the channel and return TRUE.
 *
 * If not available, return FALSE.
 */

bool Curl_pipeline_checkget_read(struct Curl_easy *data,
                                 struct connectdata *conn)
{
  if(conn->bits.multiplex)
    /* when multiplexing, we can use it at once */
    return TRUE;

  if(!conn->readchannel_inuse && Curl_recvpipe_head(data, conn)) {
    /* Grab the channel */
    conn->readchannel_inuse = TRUE;
    return TRUE;
  }
  return FALSE;
}

/*
 * The current user of the pipeline write channel gives it up.
 */
void Curl_pipeline_leave_write(struct connectdata *conn)
{
  conn->writechannel_inuse = FALSE;
}

/*
 * The current user of the pipeline read channel gives it up.
 */
void Curl_pipeline_leave_read(struct connectdata *conn)
{
  conn->readchannel_inuse = FALSE;
}


#if 0
void print_pipeline(struct connectdata *conn)
{
  struct curl_llist_element *curr;
  struct connectbundle *cb_ptr;
  struct Curl_easy *data = conn->data;

  cb_ptr = conn->bundle;

  if(cb_ptr) {
    curr = cb_ptr->conn_list->head;
    while(curr) {
      conn = curr->ptr;
      infof(data, "- Conn %ld (%p) send_pipe: %zu, recv_pipe: %zu\n",
            conn->connection_id,
            (void *)conn,
            conn->send_pipe->size,
            conn->recv_pipe->size);
      curr = curr->next;
    }
  }
}

#endif
Deleted jni/curl/lib/pipeline.h.
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
























































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
#ifndef HEADER_CURL_PIPELINE_H
#define HEADER_CURL_PIPELINE_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2015 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2013 - 2014, Linus Nielsen Feltzing, <linus@haxx.se>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

CURLcode Curl_add_handle_to_pipeline(struct Curl_easy *handle,
                                     struct connectdata *conn);
void Curl_move_handle_from_send_to_recv_pipe(struct Curl_easy *handle,
                                             struct connectdata *conn);
bool Curl_pipeline_penalized(struct Curl_easy *data,
                             struct connectdata *conn);

bool Curl_pipeline_site_blacklisted(struct Curl_easy *handle,
                                    struct connectdata *conn);

CURLMcode Curl_pipeline_set_site_blacklist(char **sites,
                                           struct curl_llist *list_ptr);

bool Curl_pipeline_server_blacklisted(struct Curl_easy *handle,
                                      char *server_name);

CURLMcode Curl_pipeline_set_server_blacklist(char **servers,
                                             struct curl_llist *list_ptr);

bool Curl_pipeline_checkget_write(struct Curl_easy *data,
                                  struct connectdata *conn);
bool Curl_pipeline_checkget_read(struct Curl_easy *data,
                                 struct connectdata *conn);
void Curl_pipeline_leave_write(struct connectdata *conn);
void Curl_pipeline_leave_read(struct connectdata *conn);
bool Curl_recvpipe_head(struct Curl_easy *data,
                        struct connectdata *conn);
bool Curl_sendpipe_head(struct Curl_easy *data,
                        struct connectdata *conn);

#endif /* HEADER_CURL_PIPELINE_H */
Changes to jni/curl/lib/pop3.c.
26
27
28
29
30
31
32

33
34
35
36
37
38
39
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40







+







 * RFC2595 Using TLS with IMAP, POP3 and ACAP
 * RFC2831 DIGEST-MD5 authentication
 * RFC4422 Simple Authentication and Security Layer (SASL)
 * RFC4616 PLAIN authentication
 * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
 * RFC5034 POP3 SASL Authentication Mechanism
 * RFC6749 OAuth 2.0 Authorization Framework
 * RFC8314 Use of TLS for Email Submission and Access
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_POP3
Changes to jni/curl/lib/progress.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
27
28
29
30
31
32
33

34
35
36
37
38
39
40
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41







+







#include "multiif.h"
#include "progress.h"
#include "curl_printf.h"

/* check rate limits within this many recent milliseconds, at minimum. */
#define MIN_RATE_LIMIT_PERIOD 3000

#ifndef CURL_DISABLE_PROGRESS_METER
/* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero
   byte) */
static void time2str(char *r, curl_off_t seconds)
{
  curl_off_t h;
  if(seconds <= 0) {
    strcpy(r, "--:--:--");
115
116
117
118
119
120
121

122
123
124
125
126
127
128
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130







+







  else
    msnprintf(max5, 6, "%4" CURL_FORMAT_CURL_OFF_T "M", bytes/ONE_MEGABYTE);

#endif

  return max5;
}
#endif

/*

   New proposed interface, 9th of February 2000:

   pgrsStartNow() - sets start time
   pgrsSetDownloadSize(x) - known expected download size
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
360
361
362
363
364
365
366





367
368
369
370
371
372
373

374
375
376
377
378
379
380







-
-
-
-
-
+
+





-







  }
  else {
    data->progress.size_ul = 0;
    data->progress.flags &= ~PGRS_UL_SIZE_KNOWN;
  }
}

/*
 * Curl_pgrsUpdate() returns 0 for success or the value returned by the
 * progress callback!
 */
int Curl_pgrsUpdate(struct connectdata *conn)
#ifndef CURL_DISABLE_PROGRESS_METER
static void progress_meter(struct connectdata *conn)
{
  struct curltime now;
  curl_off_t timespent;
  curl_off_t timespent_ms; /* milliseconds */
  struct Curl_easy *data = conn->data;
  int nowindex = data->progress.speeder_c% CURR_TIME;
  bool shownow = FALSE;
  curl_off_t dl = data->progress.downloaded;
  curl_off_t ul = data->progress.uploaded;

  now = Curl_now(); /* what time is it */

  /* The time spent so far (from the start) */
395
396
397
398
399
400
401


402

403
404
405
406
407
408
409
393
394
395
396
397
398
399
400
401

402
403
404
405
406
407
408
409







+
+
-
+







    data->progress.ulspeed = (ul * 1000 / (timespent_ms>0?timespent_ms:1));
  else
    data->progress.ulspeed = (ul / (timespent>0?timespent:1));

  /* Calculations done at most once a second, unless end is reached */
  if(data->progress.lastshow != now.tv_sec) {
    int countindex; /* amount of seconds stored in the speeder array */
    int nowindex = data->progress.speeder_c% CURR_TIME;
    if(!(data->progress.flags & PGRS_HIDE))
    shownow = TRUE;
      shownow = TRUE;

    data->progress.lastshow = now.tv_sec;

    /* Let's do the "current speed" thing, with the dl + ul speeds
       combined. Store the speed at entry 'nowindex'. */
    data->progress.speeder[ nowindex ] =
      data->progress.downloaded + data->progress.uploaded;
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
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







-
-
+
+
+
+
+
+














-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







    }
    else
      /* the first second we use the average */
      data->progress.current_speed =
        data->progress.ulspeed + data->progress.dlspeed;

  } /* Calculations end */

  if(!(data->progress.flags & PGRS_HIDE)) {
  if(!shownow)
    /* only show the internal progress meter once per second */
    return;
  else {
    /* If there's no external callback set, use internal code to show
       progress */
    /* progress meter has not been shut off */
    char max5[6][10];
    curl_off_t dlpercen = 0;
    curl_off_t ulpercen = 0;
    curl_off_t total_percen = 0;
    curl_off_t total_transfer;
    curl_off_t total_expected_transfer;
    char time_left[10];
    char time_total[10];
    char time_spent[10];
    curl_off_t ulestimate = 0;
    curl_off_t dlestimate = 0;
    curl_off_t total_estimate;

    if(data->set.fxferinfo) {
      int result;
      /* There's a callback set, call that */
      Curl_set_in_callback(data, true);
      result = data->set.fxferinfo(data->set.progress_client,
                                   data->progress.size_dl,
                                   data->progress.downloaded,
                                   data->progress.size_ul,
                                   data->progress.uploaded);
      Curl_set_in_callback(data, false);
      if(result)
        failf(data, "Callback aborted");
      return result;
    }
    if(data->set.fprogress) {
      int result;
      /* The older deprecated callback is set, call that */
      Curl_set_in_callback(data, true);
      result = data->set.fprogress(data->set.progress_client,
                                   (double)data->progress.size_dl,
                                   (double)data->progress.downloaded,
                                   (double)data->progress.size_ul,
                                   (double)data->progress.uploaded);
      Curl_set_in_callback(data, false);
      if(result)
        failf(data, "Callback aborted");
      return result;
    }

    if(!shownow)
      /* only show the internal progress meter once per second */
      return 0;

    /* If there's no external callback set, use internal code to show
       progress */

    if(!(data->progress.flags & PGRS_HEADERS_OUT)) {
      if(data->state.resume_from) {
        fprintf(data->set.err,
                "** Resuming transfer from byte position %"
                CURL_FORMAT_CURL_OFF_T "\n", data->state.resume_from);
      }
      fprintf(data->set.err,
560
561
562
563
564
565
566
567

568
569

570
571
572
573
574
575
576
528
529
530
531
532
533
534

535
536

537
538
539
540
541
542
543
544







-
+

-
+







    /* create the three time strings */
    time2str(time_left, total_estimate > 0?(total_estimate - timespent):0);
    time2str(time_total, total_estimate);
    time2str(time_spent, timespent);

    /* Get the total amount of data expected to get transferred */
    total_expected_transfer =
      (data->progress.flags & PGRS_UL_SIZE_KNOWN?
      ((data->progress.flags & PGRS_UL_SIZE_KNOWN)?
       data->progress.size_ul:data->progress.uploaded)+
      (data->progress.flags & PGRS_DL_SIZE_KNOWN?
      ((data->progress.flags & PGRS_DL_SIZE_KNOWN)?
       data->progress.size_dl:data->progress.downloaded);

    /* We have transferred this much so far */
    total_transfer = data->progress.downloaded + data->progress.uploaded;

    /* Get the percentage of data transferred so far */
    if(total_expected_transfer > CURL_OFF_T_C(10000))
591
592
593
594
595
596
597
598
599


600
601
602

603
604
605














































606
607
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







-
-
+
+



+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


            ulpercen,      /* 3 letters */                /* xfer % */
            max5data(data->progress.uploaded, max5[1]),   /* xfer size */
            max5data(data->progress.dlspeed, max5[3]),    /* avrg dl speed */
            max5data(data->progress.ulspeed, max5[4]),    /* avrg ul speed */
            time_total,    /* 8 letters */                /* total time */
            time_spent,    /* 8 letters */                /* time spent */
            time_left,     /* 8 letters */                /* time left */
            max5data(data->progress.current_speed, max5[5]) /* current speed */
            );
            max5data(data->progress.current_speed, max5[5])
      );

    /* we flush the output stream to make it appear as soon as possible */
    fflush(data->set.err);
  } /* don't show now */

  } /* !(data->progress.flags & PGRS_HIDE) */

}
#else
 /* progress bar disabled */
#define progress_meter(x)
#endif


/*
 * Curl_pgrsUpdate() returns 0 for success or the value returned by the
 * progress callback!
 */
int Curl_pgrsUpdate(struct connectdata *conn)
{
  struct Curl_easy *data = conn->data;
  if(!(data->progress.flags & PGRS_HIDE)) {
    if(data->set.fxferinfo) {
      int result;
      /* There's a callback set, call that */
      Curl_set_in_callback(data, true);
      result = data->set.fxferinfo(data->set.progress_client,
                                   data->progress.size_dl,
                                   data->progress.downloaded,
                                   data->progress.size_ul,
                                   data->progress.uploaded);
      Curl_set_in_callback(data, false);
      if(result)
        failf(data, "Callback aborted");
      return result;
    }
    if(data->set.fprogress) {
      int result;
      /* The older deprecated callback is set, call that */
      Curl_set_in_callback(data, true);
      result = data->set.fprogress(data->set.progress_client,
                                   (double)data->progress.size_dl,
                                   (double)data->progress.downloaded,
                                   (double)data->progress.size_ul,
                                   (double)data->progress.uploaded);
      Curl_set_in_callback(data, false);
      if(result)
        failf(data, "Callback aborted");
      return result;
    }
  }
  progress_meter(conn);

  return 0;
}
Changes to jni/curl/lib/rtsp.c.
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
37
38
39
40
41
42
43










44
45
46
47
48
49
50







-
-
-
-
-
-
-
-
-
-







#include "select.h"
#include "connect.h"
#include "strdup.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

/*
 * TODO (general)
 *  -incoming server requests
 *      -server CSeq counter
 *  -digest authentication
 *  -connect through proxy
 *  -pipelining?
 */


#define RTP_PKT_CHANNEL(p)   ((int)((unsigned char)((p)[1])))

#define RTP_PKT_LENGTH(p)  ((((int)((unsigned char)((p)[2]))) << 8) | \
                             ((int)((unsigned char)((p)[3]))))

/* protocol-specific functions set up to be called by the main engine */
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
222
223
224
225
226
227
228

229
230
231
232
233
234
235







-







            "The CSeq of this request %ld did not match the response %ld",
            CSeq_sent, CSeq_recv);
      return CURLE_RTSP_CSEQ_ERROR;
    }
    if(data->set.rtspreq == RTSPREQ_RECEIVE &&
            (conn->proto.rtspc.rtp_channel == -1)) {
      infof(data, "Got an RTP Receive with a CSeq of %ld\n", CSeq_recv);
      /* TODO CPC: Server -> Client logic here */
    }
  }

  return httpStatus;
}

static CURLcode rtsp_do(struct connectdata *conn, bool *done)
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
321
322
323
324
325
326
327


328
329
330
331
332
333
334







-
-







  if(!p_session_id &&
     (rtspreq & ~(RTSPREQ_OPTIONS | RTSPREQ_DESCRIBE | RTSPREQ_SETUP))) {
    failf(data, "Refusing to issue an RTSP request [%s] without a session ID.",
          p_request);
    return CURLE_BAD_FUNCTION_ARGUMENT;
  }

  /* TODO: proxy? */

  /* Stream URI. Default to server '*' if not specified */
  if(data->set.str[STRING_RTSP_STREAM_URI]) {
    p_stream_uri = data->set.str[STRING_RTSP_STREAM_URI];
  }
  else {
    p_stream_uri = "*";
  }
Changes to jni/curl/lib/security.c.
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
147
148
149
150
151
152
153

154
155
156
157
158
159
160







-







  while(len > 0) {
    result = Curl_read_plain(fd, to_p, len, &nread);
    if(!result) {
      len -= nread;
      to_p += nread;
    }
    else {
      /* FIXME: We are doing a busy wait */
      if(result == CURLE_AGAIN)
        continue;
      return result;
    }
  }
  return CURLE_OK;
}
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
174
175
176
177
178
179
180

181
182
183
184
185
186
187







-







  while(len > 0) {
    result = Curl_write_plain(conn, fd, to_p, len, &written);
    if(!result) {
      len -= written;
      to_p += written;
    }
    else {
      /* FIXME: We are doing a busy wait */
      if(result == CURLE_AGAIN)
        continue;
      return result;
    }
  }
  return CURLE_OK;
}
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
259
260
261
262
263
264
265

266
267
268
269
270

271
272
273
274
275
276
277







-





-







      return bytes_read;
    }
    bytes_read = buffer_read(&conn->in_buffer, buffer, len);
    len -= bytes_read;
    total_read += bytes_read;
    buffer += bytes_read;
  }
  /* FIXME: Check for overflow */
  return total_read;
}

/* Send |length| bytes from |from| to the |fd| socket taking care of encoding
   and negociating with the server. |from| can be NULL. */
/* FIXME: We don't check for errors nor report any! */
static void do_sec_send(struct connectdata *conn, curl_socket_t fd,
                        const char *from, int length)
{
  int bytes, htonl_bytes; /* 32-bit integers for htonl */
  char *buffer = NULL;
  char *cmd_buffer;
  size_t cmd_size = 0;
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
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







-





-



-
-















+
+
+








  if(buf[3] != '-')
    /* safe to ignore return code */
    (void)sscanf(buf, "%d", &ret_code);

  if(buf[decoded_len - 1] == '\n')
    buf[decoded_len - 1] = '\0';
  /* FIXME: Is |buffer| length always greater than |decoded_len|? */
  strcpy(buffer, buf);
  free(buf);
  return ret_code;
}

/* FIXME: The error code returned here is never checked. */
static int sec_set_protection_level(struct connectdata *conn)
{
  int code;
  char *pbsz;
  static unsigned int buffer_size = 1 << 20; /* 1048576 */
  enum protection_level level = conn->request_data_prot;

  DEBUGASSERT(level > PROT_NONE && level < PROT_LAST);

  if(!conn->sec_complete) {
    infof(conn->data, "Trying to change the protection level after the"
                      " completion of the data exchange.\n");
    return -1;
  }

  /* Bail out if we try to set up the same level */
  if(conn->data_prot == level)
    return 0;

  if(level) {
    char *pbsz;
    static unsigned int buffer_size = 1 << 20; /* 1048576 */

    code = ftp_send_command(conn, "PBSZ %u", buffer_size);
    if(code < 0)
      return -1;

    if(code/100 != 2) {
      failf(conn->data, "Failed to set the protection's buffer size.");
      return -1;
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
499
500
501
502
503
504
505

506
507
508
509
510
511
512







-







      return CURLE_FAILED_INIT;
    }
  }

  infof(data, "Trying mechanism %s...\n", mech->name);
  ret = ftp_send_command(conn, "AUTH %s", mech->name);
  if(ret < 0)
    /* FIXME: This error is too generic but it is OK for now. */
    return CURLE_COULDNT_CONNECT;

  if(ret/100 != 3) {
    switch(ret) {
    case 504:
      infof(data, "Mechanism %s is not supported by the server (server "
            "returned ftp code: 504).\n", mech->name);
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
565
566
567
568
569
570
571

572
573
574
575
576
577
578
579
580
581







-










  free(conn->app_data);
  conn->app_data = NULL;
  if(conn->in_buffer.data) {
    free(conn->in_buffer.data);
    conn->in_buffer.data = NULL;
    conn->in_buffer.size = 0;
    conn->in_buffer.index = 0;
    /* FIXME: Is this really needed? */
    conn->in_buffer.eof_flag = 0;
  }
  conn->sec_complete = 0;
  conn->data_prot = PROT_CLEAR;
  conn->mech = NULL;
}

#endif /* HAVE_GSSAPI */

#endif /* CURL_DISABLE_FTP */
Changes to jni/curl/lib/sendf.c.
591
592
593
594
595
596
597


598


599
600
601
602
603
604
605
591
592
593
594
595
596
597
598
599

600
601
602
603
604
605
606
607
608







+
+
-
+
+







  }

  /* Chop data, write chunks. */
  while(len) {
    size_t chunklen = len <= CURL_MAX_WRITE_SIZE? len: CURL_MAX_WRITE_SIZE;

    if(writebody) {
      size_t wrote;
      Curl_set_in_callback(data, true);
      size_t wrote = writebody(ptr, 1, chunklen, data->set.out);
      wrote = writebody(ptr, 1, chunklen, data->set.out);
      Curl_set_in_callback(data, false);

      if(CURL_WRITEFUNC_PAUSE == wrote) {
        if(conn->handler->flags & PROTOPT_NONETWORK) {
          /* Protocols that work without network cannot be paused. This is
             actually only FILE:// just now, and it can't pause since the
             transfer isn't done using the "normal" procedure. */
          failf(data, "Write callback asked for PAUSE when not supported!");
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
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







-
-
-
-







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
-





-
-
-
-
-
-







{
  CURLcode result = CURLE_RECV_ERROR;
  ssize_t nread = 0;
  size_t bytesfromsocket = 0;
  char *buffertofill = NULL;
  struct Curl_easy *data = conn->data;

  /* if HTTP/1 pipelining is both wanted and possible */
  bool pipelining = Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1) &&
    (conn->bundle->multiuse == BUNDLE_PIPELINING);

  /* Set 'num' to 0 or 1, depending on which socket that has been sent here.
     If it is the second socket, we set num to 1. Otherwise to 0. This lets
     us use the correct ssl handle. */
  int num = (sockfd == conn->sock[SECONDARYSOCKET]);

  *n = 0; /* reset amount to zero */

  /* If session can pipeline, check connection buffer  */
  if(pipelining) {
    size_t bytestocopy = CURLMIN(conn->buf_len - conn->read_pos,
                                 sizerequested);

    /* Copy from our master buffer first if we have some unread data there*/
    if(bytestocopy > 0) {
      memcpy(buf, conn->master_buffer + conn->read_pos, bytestocopy);
      conn->read_pos += bytestocopy;
      conn->bits.stream_was_rewound = FALSE;

      *n = (ssize_t)bytestocopy;
      return CURLE_OK;
    }
    /* If we come here, it means that there is no data to read from the buffer,
     * so we read from the socket */
    bytesfromsocket = CURLMIN(sizerequested, MASTERBUF_SIZE);
    buffertofill = conn->master_buffer;
  }
  else {
    bytesfromsocket = CURLMIN(sizerequested, (size_t)data->set.buffer_size);
    buffertofill = buf;
  bytesfromsocket = CURLMIN(sizerequested, (size_t)data->set.buffer_size);
  buffertofill = buf;
  }

  nread = conn->recv[num](conn, num, buffertofill, bytesfromsocket, &result);
  if(nread < 0)
    return result;

  if(pipelining) {
    memcpy(buf, conn->master_buffer, nread);
    conn->buf_len = nread;
    conn->read_pos = nread;
  }

  *n += nread;

  return CURLE_OK;
}

/* return 0 on success */
int Curl_debug(struct Curl_easy *data, curl_infotype type,
Changes to jni/curl/lib/setopt.c.
57
58
59
60
61
62
63







64
65
66
67
68
69
70
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77







+
+
+
+
+
+
+







     copy of `s'. Return CURLE_OK or CURLE_OUT_OF_MEMORY. */

  Curl_safefree(*charp);

  if(s) {
    char *str = strdup(s);

    if(str) {
      size_t len = strlen(str);
      if(len > CURL_MAX_INPUT_LENGTH) {
        free(str);
        return CURLE_BAD_FUNCTION_ARGUMENT;
      }
    }
    if(!str)
      return CURLE_OUT_OF_MEMORY;

    *charp = str;
  }

  return CURLE_OK;
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
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







+










-
+
-
-
-
-






+





-
+









+









-
+








static CURLcode vsetopt(struct Curl_easy *data, CURLoption option,
                        va_list param)
{
  char *argptr;
  CURLcode result = CURLE_OK;
  long arg;
  unsigned long uarg;
  curl_off_t bigsize;

  switch(option) {
  case CURLOPT_DNS_CACHE_TIMEOUT:
    arg = va_arg(param, long);
    if(arg < -1)
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.dns_cache_timeout = arg;
    break;
  case CURLOPT_DNS_USE_GLOBAL_CACHE:
#if 0 /* deprecated */
    /* deprecated */
    /* remember we want this enabled */
    arg = va_arg(param, long);
    data->set.global_dns_cache = (0 != arg) ? TRUE : FALSE;
#endif
    break;
  case CURLOPT_SSL_CIPHER_LIST:
    /* set a list of cipher we want to use in the SSL connection */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER_LIST_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSL_CIPHER_LIST:
    /* set a list of cipher we want to use in the SSL connection for proxy */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER_LIST_PROXY],
                            va_arg(param, char *));
    break;

#endif
  case CURLOPT_TLS13_CIPHERS:
    if(Curl_ssl_tls13_ciphersuites()) {
      /* set preferred list of TLS 1.3 cipher suites */
      result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST_ORIG],
                              va_arg(param, char *));
    }
    else
      return CURLE_NOT_BUILT_IN;
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_TLS13_CIPHERS:
    if(Curl_ssl_tls13_ciphersuites()) {
      /* set preferred list of TLS 1.3 cipher suites for proxy */
      result = Curl_setstropt(&data->set.str[STRING_SSL_CIPHER13_LIST_PROXY],
                              va_arg(param, char *));
    }
    else
      return CURLE_NOT_BUILT_IN;
    break;

#endif
  case CURLOPT_RANDOM_FILE:
    /*
     * This is the path name to a file that contains random data to seed
     * the random SSL stuff with. The file is only used for reading.
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_RANDOM_FILE],
                            va_arg(param, char *));
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
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







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-












+
















-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
















+







    break;
  case CURLOPT_FILETIME:
    /*
     * Try to get the file time of the remote document. The time will
     * later (possibly) become available using curl_easy_getinfo().
     */
    data->set.get_filetime = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_FTP_CREATE_MISSING_DIRS:
    /*
     * An FTP option that modifies an upload to create missing directories on
     * the server.
     */
    switch(va_arg(param, long)) {
    case 0:
      data->set.ftp_create_missing_dirs = 0;
      break;
    case 1:
      data->set.ftp_create_missing_dirs = 1;
      break;
    case 2:
      data->set.ftp_create_missing_dirs = 2;
      break;
    default:
      /* reserve other values for future use */
      result = CURLE_UNKNOWN_OPTION;
      break;
    }
    break;
  case CURLOPT_SERVER_RESPONSE_TIMEOUT:
    /*
     * Option that specifies how quickly an server response must be obtained
     * before it is considered failure. For pingpong protocols.
     */
    arg = va_arg(param, long);
    if((arg >= 0) && (arg <= (INT_MAX/1000)))
      data->set.server_response_timeout = arg * 1000;
    else
      return CURLE_BAD_FUNCTION_ARGUMENT;
    break;
#ifndef CURL_DISABLE_TFTP
  case CURLOPT_TFTP_NO_OPTIONS:
    /*
     * Option that prevents libcurl from sending TFTP option requests to the
     * server.
     */
    data->set.tftp_no_options = va_arg(param, long) != 0;
    break;
  case CURLOPT_TFTP_BLKSIZE:
    /*
     * TFTP option that specifies the block size to use for data transmission.
     */
    arg = va_arg(param, long);
    if(arg < 0)
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.tftp_blksize = arg;
    break;
  case CURLOPT_DIRLISTONLY:
    /*
     * An option that changes the command to one that asks for a list
     * only, no file info details.
     */
    data->set.ftp_list_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_APPEND:
#endif
#ifndef CURL_DISABLE_NETRC
    /*
     * We want to upload and append to an existing file.
     */
    data->set.ftp_append = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_FTP_FILEMETHOD:
    /*
     * How do access files over FTP.
     */
    arg = va_arg(param, long);
    if((arg < CURLFTPMETHOD_DEFAULT) || (arg > CURLFTPMETHOD_SINGLECWD))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.ftp_filemethod = (curl_ftpfile)arg;
    break;
  case CURLOPT_NETRC:
    /*
     * Parse the $HOME/.netrc file
     */
    arg = va_arg(param, long);
    if((arg < CURL_NETRC_IGNORED) || (arg > CURL_NETRC_REQUIRED))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.use_netrc = (enum CURL_NETRC_OPTION)arg;
    break;
  case CURLOPT_NETRC_FILE:
    /*
     * Use this file instead of the $HOME/.netrc file
     */
    result = Curl_setstropt(&data->set.str[STRING_NETRC_FILE],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_TRANSFERTEXT:
    /*
     * This option was previously named 'FTPASCII'. Renamed to work with
     * more protocols than merely FTP.
     *
     * Transfer using ASCII (instead of BINARY).
     */
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
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







+













-
+







    /*
     * Set a list with HTTP headers to use (or replace internals with)
     */
    data->set.headers = va_arg(param, struct curl_slist *);
    break;

#ifndef CURL_DISABLE_HTTP
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXYHEADER:
    /*
     * Set a list with proxy headers to use (or replace internals with)
     *
     * Since CURLOPT_HTTPHEADER was the only way to set HTTP headers for a
     * long time we remain doing it this way until CURLOPT_PROXYHEADER is
     * used. As soon as this option has been used, if set to anything but
     * NULL, custom headers for proxies are only picked from this list.
     *
     * Set this option to NULL to restore the previous behavior.
     */
    data->set.proxyheaders = va_arg(param, struct curl_slist *);
    break;

#endif
  case CURLOPT_HEADEROPT:
    /*
     * Set header option.
     */
    arg = va_arg(param, long);
    data->set.sep_headers = (bool)((arg & CURLHEADER_SEPARATE)? TRUE: FALSE);
    break;
1068
1069
1070
1071
1072
1073
1074
1075

1076
1077
1078
1079
1080
1081
1082
1083
1084

1085
1086
1087
1088
1089
1090
1091
1036
1037
1038
1039
1040
1041
1042

1043
1044
1045
1046
1047
1048
1049
1050
1051

1052
1053
1054
1055
1056
1057
1058
1059







-
+








-
+







  case CURLOPT_SOCKS5_GSSAPI_NEC:
    /*
     * Set flag for NEC SOCK5 support
     */
    data->set.socks5_gssapi_nec = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
#endif

#ifndef CURL_DISABLE_PROXY
  case CURLOPT_SOCKS5_GSSAPI_SERVICE:
  case CURLOPT_PROXY_SERVICE_NAME:
    /*
     * Set proxy authentication service name for Kerberos 5 and SPNEGO
     */
    result = Curl_setstropt(&data->set.str[STRING_PROXY_SERVICE_NAME],
                            va_arg(param, char *));
    break;

#endif
  case CURLOPT_SERVICE_NAME:
    /*
     * Set authentication service name for DIGEST-MD5, Kerberos 5 and SPNEGO
     */
    result = Curl_setstropt(&data->set.str[STRING_SERVICE_NAME],
                            va_arg(param, char *));
    break;
1106
1107
1108
1109
1110
1111
1112



























1113
1114
1115
1116
1117
1118
1119
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  case CURLOPT_WRITEDATA:
    /*
     * FILE pointer to write to. Or possibly
     * used as argument to the write callback.
     */
    data->set.out = va_arg(param, void *);
    break;

  case CURLOPT_DIRLISTONLY:
    /*
     * An option that changes the command to one that asks for a list only, no
     * file info details. Used for FTP, POP3 and SFTP.
     */
    data->set.ftp_list_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_APPEND:
    /*
     * We want to upload and append to an existing file. Used for FTP and
     * SFTP.
     */
    data->set.ftp_append = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

#ifndef CURL_DISABLE_FTP
  case CURLOPT_FTP_FILEMETHOD:
    /*
     * How do access files over FTP.
     */
    arg = va_arg(param, long);
    if((arg < CURLFTPMETHOD_DEFAULT) || (arg > CURLFTPMETHOD_SINGLECWD))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.ftp_filemethod = (curl_ftpfile)arg;
    break;
  case CURLOPT_FTPPORT:
    /*
     * Use FTP PORT, this also specifies which IP address to use
     */
    result = Curl_setstropt(&data->set.str[STRING_FTPPORT],
                            va_arg(param, char *));
    data->set.ftp_use_port = (data->set.str[STRING_FTPPORT]) ? TRUE : FALSE;
1142
1143
1144
1145
1146
1147
1148

















































1149
1150
1151
1152
1153
1154
1155
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    /*
     * Enable or disable FTP_SKIP_PASV_IP, which will disable/enable the
     * bypass of the IP address in PASV responses.
     */
    data->set.ftp_skip_ip = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_FTP_ACCOUNT:
    result = Curl_setstropt(&data->set.str[STRING_FTP_ACCOUNT],
                            va_arg(param, char *));
    break;

  case CURLOPT_FTP_ALTERNATIVE_TO_USER:
    result = Curl_setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],
                            va_arg(param, char *));
    break;

  case CURLOPT_FTPSSLAUTH:
    /*
     * Set a specific auth for FTP-SSL transfers.
     */
    arg = va_arg(param, long);
    if((arg < CURLFTPAUTH_DEFAULT) || (arg > CURLFTPAUTH_TLS))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.ftpsslauth = (curl_ftpauth)arg;
    break;
  case CURLOPT_KRBLEVEL:
    /*
     * A string that defines the kerberos security level.
     */
    result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL],
                            va_arg(param, char *));
    data->set.krb = (data->set.str[STRING_KRB_LEVEL]) ? TRUE : FALSE;
    break;
#endif
  case CURLOPT_FTP_CREATE_MISSING_DIRS:
    /*
     * An FTP/SFTP option that modifies an upload to create missing
     * directories on the server.
     */
    switch(va_arg(param, long)) {
    case 0:
      data->set.ftp_create_missing_dirs = 0;
      break;
    case 1:
      data->set.ftp_create_missing_dirs = 1;
      break;
    case 2:
      data->set.ftp_create_missing_dirs = 2;
      break;
    default:
      /* reserve other values for future use */
      result = CURLE_UNKNOWN_OPTION;
      break;
    }
    break;
  case CURLOPT_READDATA:
    /*
     * FILE pointer to read the file to be uploaded from. Or possibly
     * used as argument to the read callback.
     */
    data->set.in_set = va_arg(param, void *);
    break;
1550
1551
1552
1553
1554
1555
1556

1557
1558
1559
1560
1561
1562
1563

1564
1565
1566
1567
1568
1569
1570

1571
1572
1573
1574
1575
1576
1577

1578
1579
1580
1581
1582
1583
1584

1585
1586
1587
1588
1589
1590
1591

1592
1593
1594
1595
1596
1597
1598

1599
1600
1601
1602
1603
1604
1605

1606
1607
1608
1609
1610
1611
1612

1613
1614
1615
1616
1617
1618
1619

1620
1621
1622
1623
1624
1625
1626
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680







+







+







+







+







+







+







+







+







+







+







  case CURLOPT_SSLCERT:
    /*
     * String that holds file name of the SSL certificate to use
     */
    result = Curl_setstropt(&data->set.str[STRING_CERT_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSLCERT:
    /*
     * String that holds file name of the SSL certificate to use for proxy
     */
    result = Curl_setstropt(&data->set.str[STRING_CERT_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_SSLCERTTYPE:
    /*
     * String that holds file type of the SSL certificate to use
     */
    result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSLCERTTYPE:
    /*
     * String that holds file type of the SSL certificate to use for proxy
     */
    result = Curl_setstropt(&data->set.str[STRING_CERT_TYPE_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_SSLKEY:
    /*
     * String that holds file name of the SSL key to use
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSLKEY:
    /*
     * String that holds file name of the SSL key to use for proxy
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_SSLKEYTYPE:
    /*
     * String that holds file type of the SSL key to use
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSLKEYTYPE:
    /*
     * String that holds file type of the SSL key to use for proxy
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_TYPE_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_KEYPASSWD:
    /*
     * String that holds the SSL or SSH private key password.
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_KEYPASSWD:
    /*
     * String that holds the SSL private key password for proxy.
     */
    result = Curl_setstropt(&data->set.str[STRING_KEY_PASSWD_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_SSLENGINE:
    /*
     * String that holds the SSL crypto engine.
     */
    argptr = va_arg(param, char *);
    if(argptr && argptr[0]) {
      result = Curl_setstropt(&data->set.str[STRING_SSL_ENGINE], argptr);
1639
1640
1641
1642
1643
1644
1645
1646

1647
1648
1649
1650
1651
1652
1653

1654
1655
1656
1657
1658
1659
1660
1693
1694
1695
1696
1697
1698
1699

1700
1701
1702
1703
1704
1705
1706

1707
1708
1709
1710
1711
1712
1713
1714







-
+






-
+







    break;
  case CURLOPT_CRLF:
    /*
     * Kludgy option to enable CRLF conversions. Subject for removal.
     */
    data->set.crlf = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

#ifndef CURL_DISABLE_PROXY
  case CURLOPT_HAPROXYPROTOCOL:
    /*
     * Set to send the HAProxy Proxy Protocol header
     */
    data->set.haproxyprotocol = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

#endif
  case CURLOPT_INTERFACE:
    /*
     * Set what interface or address/hostname to bind the socket to when
     * performing an operation and thus what from-IP your connection will use.
     */
    result = Curl_setstropt(&data->set.str[STRING_DEVICE],
                            va_arg(param, char *));
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1727
1728
1729
1730
1731
1732
1733








1734
1735
1736
1737
1738
1739
1740







-
-
-
-
-
-
-
-







     * Set number of local ports to try, starting with CURLOPT_LOCALPORT.
     */
    arg = va_arg(param, long);
    if((arg < 0) || (arg > 65535))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.localportrange = curlx_sltosi(arg);
    break;
  case CURLOPT_KRBLEVEL:
    /*
     * A string that defines the kerberos security level.
     */
    result = Curl_setstropt(&data->set.str[STRING_KRB_LEVEL],
                            va_arg(param, char *));
    data->set.krb = (data->set.str[STRING_KRB_LEVEL]) ? TRUE : FALSE;
    break;
  case CURLOPT_GSSAPI_DELEGATION:
    /*
     * GSS-API credential delegation bitmask
     */
    arg = va_arg(param, long);
    if(arg < CURLGSSAPI_DELEGATION_NONE)
      return CURLE_BAD_FUNCTION_ARGUMENT;
1703
1704
1705
1706
1707
1708
1709

1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722

1723
1724
1725
1726
1727
1728
1729
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777







+













+








    /* Update the current connection ssl_config. */
    if(data->conn) {
      data->conn->ssl_config.verifypeer =
        data->set.ssl.primary.verifypeer;
    }
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSL_VERIFYPEER:
    /*
     * Enable peer SSL verifying for proxy.
     */
    data->set.proxy_ssl.primary.verifypeer =
      (0 != va_arg(param, long))?TRUE:FALSE;

    /* Update the current connection proxy_ssl_config. */
    if(data->conn) {
      data->conn->proxy_ssl_config.verifypeer =
        data->set.proxy_ssl.primary.verifypeer;
    }
    break;
#endif
  case CURLOPT_SSL_VERIFYHOST:
    /*
     * Enable verification of the host name in the peer certificate
     */
    arg = va_arg(param, long);

    /* Obviously people are not reading documentation and too many thought
1740
1741
1742
1743
1744
1745
1746

1747
1748
1749
1750
1751
1752
1753
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802







+








    /* Update the current connection ssl_config. */
    if(data->conn) {
      data->conn->ssl_config.verifyhost =
        data->set.ssl.primary.verifyhost;
    }
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSL_VERIFYHOST:
    /*
     * Enable verification of the host name in the peer certificate for proxy
     */
    arg = va_arg(param, long);

    /* Obviously people are not reading documentation and too many thought
1764
1765
1766
1767
1768
1769
1770

1771
1772
1773
1774
1775
1776
1777
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827







+








    /* Update the current connection proxy_ssl_config. */
    if(data->conn) {
      data->conn->proxy_ssl_config.verifyhost =
        data->set.proxy_ssl.primary.verifyhost;
    }
    break;
#endif
  case CURLOPT_SSL_VERIFYSTATUS:
    /*
     * Enable certificate status verifying.
     */
    if(!Curl_ssl_cert_status_request()) {
      result = CURLE_NOT_BUILT_IN;
      break;
1836
1837
1838
1839
1840
1841
1842

1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855

1856
1857
1858
1859
1860
1861
1862

1863
1864
1865
1866
1867
1868
1869
1870

1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884

1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898

1899
1900
1901
1902
1903
1904
1905
1906

1907
1908
1909
1910
1911
1912
1913
1914

1915
1916
1917
1918
1919
1920
1921
1922

1923
1924
1925
1926
1927
1928
1929

1930
1931
1932
1933
1934
1935
1936
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987

1988
1989
1990
1991
1992
1993
1994
1995







+













+







+








+














+














+








+








+








+






-
+







    if(Curl_ssl->supports & SSLSUPP_PINNEDPUBKEY)
      result = Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG],
                              va_arg(param, char *));
    else
#endif
      result = CURLE_NOT_BUILT_IN;
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_PINNEDPUBLICKEY:
    /*
     * Set pinned public key for SSL connection.
     * Specify file name of the public key in DER format.
     */
#ifdef USE_SSL
    if(Curl_ssl->supports & SSLSUPP_PINNEDPUBKEY)
      result = Curl_setstropt(&data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY],
                              va_arg(param, char *));
    else
#endif
      result = CURLE_NOT_BUILT_IN;
    break;
#endif
  case CURLOPT_CAINFO:
    /*
     * Set CA info for SSL connection. Specify file name of the CA certificate
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CAFILE_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_CAINFO:
    /*
     * Set CA info SSL connection for proxy. Specify file name of the
     * CA certificate
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CAFILE_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_CAPATH:
    /*
     * Set CA path info for SSL connection. Specify directory name of the CA
     * certificates which have been prepared using openssl c_rehash utility.
     */
#ifdef USE_SSL
    if(Curl_ssl->supports & SSLSUPP_CA_PATH)
      /* This does not work on windows. */
      result = Curl_setstropt(&data->set.str[STRING_SSL_CAPATH_ORIG],
                              va_arg(param, char *));
    else
#endif
      result = CURLE_NOT_BUILT_IN;
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_CAPATH:
    /*
     * Set CA path info for SSL connection proxy. Specify directory name of the
     * CA certificates which have been prepared using openssl c_rehash utility.
     */
#ifdef USE_SSL
    if(Curl_ssl->supports & SSLSUPP_CA_PATH)
      /* This does not work on windows. */
      result = Curl_setstropt(&data->set.str[STRING_SSL_CAPATH_PROXY],
                              va_arg(param, char *));
    else
#endif
      result = CURLE_NOT_BUILT_IN;
    break;
#endif
  case CURLOPT_CRLFILE:
    /*
     * Set CRL file info for SSL connection. Specify file name of the CRL
     * to check certificates revocation
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_CRLFILE:
    /*
     * Set CRL file info for SSL connection for proxy. Specify file name of the
     * CRL to check certificates revocation
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_CRLFILE_PROXY],
                            va_arg(param, char *));
    break;
#endif
  case CURLOPT_ISSUERCERT:
    /*
     * Set Issuer certificate file
     * to check certificates issuer
     */
    result = Curl_setstropt(&data->set.str[STRING_SSL_ISSUERCERT_ORIG],
                            va_arg(param, char *));
    break;
#ifndef CURL_DISABLE_TELNET
  case CURLOPT_TELNETOPTIONS:
    /*
     * Set a linked list of telnet options
     */
    data->set.telnet_options = va_arg(param, struct curl_slist *);
    break;

#endif
  case CURLOPT_BUFFERSIZE:
    /*
     * The application kindly asks for a differently sized receive buffer.
     * If it seems reasonable, we'll use it.
     */
    arg = va_arg(param, long);

2080
2081
2082
2083
2084
2085
2086

2087
2088
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104

2105
2106
2107
2108
2109
2110
2111
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152

2153









2154
2155
2156
2157
2158
2159
2160
2161
2162







+






-

-
-
-
-
-
-
-
-
-

+







  case CURLOPT_SSL_OPTIONS:
    arg = va_arg(param, long);
    data->set.ssl.enable_beast =
      (bool)((arg&CURLSSLOPT_ALLOW_BEAST) ? TRUE : FALSE);
    data->set.ssl.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
    break;

#ifndef CURL_DISABLE_PROXY
  case CURLOPT_PROXY_SSL_OPTIONS:
    arg = va_arg(param, long);
    data->set.proxy_ssl.enable_beast =
      (bool)((arg&CURLSSLOPT_ALLOW_BEAST) ? TRUE : FALSE);
    data->set.proxy_ssl.no_revoke = !!(arg & CURLSSLOPT_NO_REVOKE);
    break;

#endif
  case CURLOPT_FTPSSLAUTH:
    /*
     * Set a specific auth for FTP-SSL transfers.
     */
    arg = va_arg(param, long);
    if((arg < CURLFTPAUTH_DEFAULT) || (arg > CURLFTPAUTH_TLS))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.ftpsslauth = (curl_ftpauth)arg;
    break;

#endif
  case CURLOPT_IPRESOLVE:
    arg = va_arg(param, long);
    if((arg < CURL_IPRESOLVE_WHATEVER) || (arg > CURL_IPRESOLVE_V6))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.ipver = arg;
    break;

2123
2124
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2174
2175
2176
2177
2178
2179
2180





2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191





2192
2193
2194
2195
2196
2197
2198







-
-
-
-
-











-
-
-
-
-







    /*
     * Enable or disable TCP_NODELAY, which will disable/enable the Nagle
     * algorithm
     */
    data->set.tcp_nodelay = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_FTP_ACCOUNT:
    result = Curl_setstropt(&data->set.str[STRING_FTP_ACCOUNT],
                            va_arg(param, char *));
    break;

  case CURLOPT_IGNORE_CONTENT_LENGTH:
    data->set.ignorecl = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_CONNECT_ONLY:
    /*
     * No data transfer, set up connection and let application use the socket
     */
    data->set.connect_only = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_FTP_ALTERNATIVE_TO_USER:
    result = Curl_setstropt(&data->set.str[STRING_FTP_ALTERNATIVE_TO_USER],
                            va_arg(param, char *));
    break;

  case CURLOPT_SOCKOPTFUNCTION:
    /*
     * socket callback function: called after socket() but before connect()
     */
    data->set.fsockopt = va_arg(param, curl_sockopt_callback);
    break;

2209
2210
2211
2212
2213
2214
2215
2216

2217
2218
2219
2220
2221
2222
2223
2250
2251
2252
2253
2254
2255
2256

2257
2258
2259
2260
2261
2262
2263
2264







-
+








  case CURLOPT_SSL_SESSIONID_CACHE:
    data->set.ssl.primary.sessionid = (0 != va_arg(param, long)) ?
      TRUE : FALSE;
    data->set.proxy_ssl.primary.sessionid = data->set.ssl.primary.sessionid;
    break;

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
#ifdef USE_SSH
    /* we only include SSH options if explicitly built to support SSH */
  case CURLOPT_SSH_AUTH_TYPES:
    data->set.ssh_auth_types = va_arg(param, long);
    break;

  case CURLOPT_SSH_PUBLIC_KEYFILE:
    /*
2259
2260
2261
2262
2263
2264
2265




2266

2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281

2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2292
2293
2294
2295
2296
2297
2298
2299
2300

2301
2302
2303

2304
2305


2306
2307
2308
2309



2310

2311

2312
2313
2314
2315
2316
2317
2318
2300
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310

2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351


2352
2353

2354


2355
2356
2357
2358
2359

2360
2361
2362
2363
2364
2365
2366
2367







+
+
+
+
-
+















+



















+



+
-
-
+
+
-

-
-
+
+
+

+
-
+








  case CURLOPT_SSH_KEYDATA:
    /*
     * Custom client data to pass to the SSH keyfunc callback
     */
    data->set.ssh_keyfunc_userp = va_arg(param, void *);
    break;

  case CURLOPT_SSH_COMPRESSION:
    data->set.ssh_compression = (0 != va_arg(param, long))?TRUE:FALSE;
    break;
#endif /* USE_LIBSSH2 */
#endif /* USE_SSH */

  case CURLOPT_HTTP_TRANSFER_DECODING:
    /*
     * disable libcurl transfer encoding is used
     */
    data->set.http_te_skip = (0 == va_arg(param, long)) ? TRUE : FALSE;
    break;

  case CURLOPT_HTTP_CONTENT_DECODING:
    /*
     * raw data passed to the application when content encoding is used
     */
    data->set.http_ce_skip = (0 == va_arg(param, long)) ? TRUE : FALSE;
    break;

#if !defined(CURL_DISABLE_FTP) || defined(USE_SSH)
  case CURLOPT_NEW_FILE_PERMS:
    /*
     * Uses these permissions instead of 0644
     */
    arg = va_arg(param, long);
    if((arg < 0) || (arg > 0777))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.new_file_perms = arg;
    break;

  case CURLOPT_NEW_DIRECTORY_PERMS:
    /*
     * Uses these permissions instead of 0755
     */
    arg = va_arg(param, long);
    if((arg < 0) || (arg > 0777))
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.new_directory_perms = arg;
    break;
#endif

  case CURLOPT_ADDRESS_SCOPE:
    /*
     * Use this scope id when using IPv6
     * We always get longs when passed plain numericals, but for this value we
     * know that an unsigned int will always hold the value so we blindly
     * We always get longs when passed plain numericals so we should check
     * that the value fits into an unsigned 32 bit integer.
     * typecast to this type
     */
    arg = va_arg(param, long);
    if((arg < 0) || (arg > 0xf))
    uarg = va_arg(param, unsigned long);
#if SIZEOF_LONG > 4
    if(uarg > UINT_MAX)
      return CURLE_BAD_FUNCTION_ARGUMENT;
#endif
    data->set.scope_id = curlx_sltoui(arg);
    data->set.scope_id = (unsigned int)uarg;
    break;

  case CURLOPT_PROTOCOLS:
    /* set the bitmask for the protocols that are allowed to be used for the
       transfer, which thus helps the app which takes URLs from users or other
       external inputs and want to restrict what protocol(s) to deal
       with. Defaults to CURLPROTO_ALL. */
2328
2329
2330
2331
2332
2333
2334
2335

2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351

2352
2353
2354
2355
2356
2357

2358
2359
2360
2361
2362
2363
2364
2377
2378
2379
2380
2381
2382
2383

2384
2385
2386
2387
2388
2389
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406

2407
2408
2409
2410
2411
2412
2413
2414







-
+
















+





-
+







    break;

  case CURLOPT_DEFAULT_PROTOCOL:
    /* Set the protocol to use when the URL doesn't include any protocol */
    result = Curl_setstropt(&data->set.str[STRING_DEFAULT_PROTOCOL],
                            va_arg(param, char *));
    break;

#ifndef CURL_DISABLE_SMTP
  case CURLOPT_MAIL_FROM:
    /* Set the SMTP mail originator */
    result = Curl_setstropt(&data->set.str[STRING_MAIL_FROM],
                            va_arg(param, char *));
    break;

  case CURLOPT_MAIL_AUTH:
    /* Set the SMTP auth originator */
    result = Curl_setstropt(&data->set.str[STRING_MAIL_AUTH],
                            va_arg(param, char *));
    break;

  case CURLOPT_MAIL_RCPT:
    /* Set the list of mail recipients */
    data->set.mail_rcpt = va_arg(param, struct curl_slist *);
    break;
#endif

  case CURLOPT_SASL_IR:
    /* Enable/disable SASL initial response */
    data->set.sasl_ir = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

#ifndef CURL_DISABLE_RTSP
  case CURLOPT_RTSP_REQUEST:
  {
    /*
     * Set the RTSP request method (OPTIONS, SETUP, PLAY, etc...)
     * Would this be better if the RTSPREQ_* were just moved into here?
     */
    long curl_rtspreq = va_arg(param, long);
2459
2460
2461
2462
2463
2464
2465
2466


2467
2468
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484

2485
2486
2487
2488
2489
2490
2491
2509
2510
2511
2512
2513
2514
2515

2516
2517
2518
2519
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543







-
+
+


















+







  case CURLOPT_INTERLEAVEDATA:
    data->set.rtp_out = va_arg(param, void *);
    break;
  case CURLOPT_INTERLEAVEFUNCTION:
    /* Set the user defined RTP write function */
    data->set.fwrite_rtp = va_arg(param, curl_write_callback);
    break;

#endif
#ifndef CURL_DISABLE_FTP
  case CURLOPT_WILDCARDMATCH:
    data->set.wildcard_enabled = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_CHUNK_BGN_FUNCTION:
    data->set.chunk_bgn = va_arg(param, curl_chunk_bgn_callback);
    break;
  case CURLOPT_CHUNK_END_FUNCTION:
    data->set.chunk_end = va_arg(param, curl_chunk_end_callback);
    break;
  case CURLOPT_FNMATCH_FUNCTION:
    data->set.fnmatch = va_arg(param, curl_fnmatch_callback);
    break;
  case CURLOPT_CHUNK_DATA:
    data->wildcard.customptr = va_arg(param, void *);
    break;
  case CURLOPT_FNMATCH_DATA:
    data->set.fnmatch_data = va_arg(param, void *);
    break;
#endif
#ifdef USE_TLS_SRP
  case CURLOPT_TLSAUTH_USERNAME:
    result = Curl_setstropt(&data->set.str[STRING_TLSAUTH_USERNAME_ORIG],
                            va_arg(param, char *));
    if(data->set.str[STRING_TLSAUTH_USERNAME_ORIG] && !data->set.ssl.authtype)
      data->set.ssl.authtype = CURL_TLSAUTH_SRP; /* default to SRP */
    break;
2522
2523
2524
2525
2526
2527
2528

2529
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541

2542
2543
2544
2545
2546
2547
2548
2574
2575
2576
2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590
2591
2592
2593

2594
2595
2596
2597
2598
2599
2600
2601







+












-
+







    if(!argptr ||
       strncasecompare(argptr, "SRP", strlen("SRP")))
      data->set.proxy_ssl.authtype = CURL_TLSAUTH_SRP;
    else
      data->set.proxy_ssl.authtype = CURL_TLSAUTH_NONE;
    break;
#endif
#ifdef USE_ARES
  case CURLOPT_DNS_SERVERS:
    result = Curl_set_dns_servers(data, va_arg(param, char *));
    break;
  case CURLOPT_DNS_INTERFACE:
    result = Curl_set_dns_interface(data, va_arg(param, char *));
    break;
  case CURLOPT_DNS_LOCAL_IP4:
    result = Curl_set_dns_local_ip4(data, va_arg(param, char *));
    break;
  case CURLOPT_DNS_LOCAL_IP6:
    result = Curl_set_dns_local_ip6(data, va_arg(param, char *));
    break;

#endif
  case CURLOPT_TCP_KEEPALIVE:
    data->set.tcp_keepalive = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_TCP_KEEPIDLE:
    arg = va_arg(param, long);
    if(arg < 0)
      return CURLE_BAD_FUNCTION_ARGUMENT;
2558
2559
2560
2561
2562
2563
2564

2565
2566
2567
2568
2569
2570
2571

2572
2573
2574
2575
2576
2577
2578
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624

2625
2626
2627
2628
2629
2630
2631
2632







+






-
+







#if defined(CONNECT_DATA_IDEMPOTENT) || defined(MSG_FASTOPEN) || \
   defined(TCP_FASTOPEN_CONNECT)
    data->set.tcp_fastopen = (0 != va_arg(param, long))?TRUE:FALSE;
#else
    result = CURLE_NOT_BUILT_IN;
#endif
    break;
#ifdef USE_NGHTTP2
  case CURLOPT_SSL_ENABLE_NPN:
    data->set.ssl_enable_npn = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
  case CURLOPT_SSL_ENABLE_ALPN:
    data->set.ssl_enable_alpn = (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;

#endif
#ifdef USE_UNIX_SOCKETS
  case CURLOPT_UNIX_SOCKET_PATH:
    data->set.abstract_unix_socket = FALSE;
    result = Curl_setstropt(&data->set.str[STRING_UNIX_SOCKET_PATH],
                            va_arg(param, char *));
    break;
  case CURLOPT_ABSTRACT_UNIX_SOCKET:
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630

2631
2632
2633

2634
2635
2636
2637

2638
2639
2640
2641
2642

2643
2644
2645
2646
2647
2648






2649
2650
2651
2652
2653
2654
2655
2669
2670
2671
2672
2673
2674
2675



2676
2677
2678
2679
2680
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693
2694
2695
2696
2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716







-
-
-






+



+




+





+






+
+
+
+
+
+







  }
  case CURLOPT_CONNECT_TO:
    data->set.connect_to = va_arg(param, struct curl_slist *);
    break;
  case CURLOPT_SUPPRESS_CONNECT_HEADERS:
    data->set.suppress_connect_headers = (0 != va_arg(param, long))?TRUE:FALSE;
    break;
  case CURLOPT_SSH_COMPRESSION:
    data->set.ssh_compression = (0 != va_arg(param, long))?TRUE:FALSE;
    break;
  case CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS:
    arg = va_arg(param, long);
    if(arg < 0)
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.happy_eyeballs_timeout = arg;
    break;
#ifndef CURL_DISABLE_SHUFFLE_DNS
  case CURLOPT_DNS_SHUFFLE_ADDRESSES:
    data->set.dns_shuffle_addresses = (0 != va_arg(param, long)) ? TRUE:FALSE;
    break;
#endif
  case CURLOPT_DISALLOW_USERNAME_IN_URL:
    data->set.disallow_username_in_url =
      (0 != va_arg(param, long)) ? TRUE : FALSE;
    break;
#ifndef CURL_DISABLE_DOH
  case CURLOPT_DOH_URL:
    result = Curl_setstropt(&data->set.str[STRING_DOH],
                            va_arg(param, char *));
    data->set.doh = data->set.str[STRING_DOH]?TRUE:FALSE;
    break;
#endif
  case CURLOPT_UPKEEP_INTERVAL_MS:
    arg = va_arg(param, long);
    if(arg < 0)
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.upkeep_interval_ms = arg;
    break;
  case CURLOPT_MAXAGE_CONN:
    arg = va_arg(param, long);
    if(arg < 0)
      return CURLE_BAD_FUNCTION_ARGUMENT;
    data->set.maxage_conn = arg;
    break;
  case CURLOPT_TRAILERFUNCTION:
#ifndef CURL_DISABLE_HTTP
    data->set.trailer_callback = va_arg(param, curl_trailer_callback);
#endif
    break;
  case CURLOPT_TRAILERDATA:
#ifndef CURL_DISABLE_HTTP
Changes to jni/curl/lib/smtp.c.
24
25
26
27
28
29
30

31
32
33
34
35
36
37
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38







+







 * RFC3207 SMTP over TLS
 * RFC4422 Simple Authentication and Security Layer (SASL)
 * RFC4616 PLAIN authentication
 * RFC4752 The Kerberos V5 ("GSSAPI") SASL Mechanism
 * RFC4954 SMTP Authentication
 * RFC5321 SMTP protocol
 * RFC6749 OAuth 2.0 Authorization Framework
 * RFC8314 Use of TLS for Email Submission and Access
 * Draft   SMTP URL Interface   <draft-earhart-url-smtp-00.txt>
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

1214
1215
1216
1217
1218
1219
1220
1221

1222
1223
1224
1225
1226
1227
1228
1215
1216
1217
1218
1219
1220
1221

1222
1223
1224
1225
1226
1227
1228
1229







-
+







       is "no mail data". RFC-5321, sect. 4.1.1.4.

       Note: As some SSL backends, such as OpenSSL, will cause Curl_write() to
       fail when using a different pointer following a previous write, that
       returned CURLE_AGAIN, we duplicate the EOB now rather than when the
       bytes written doesn't equal len. */
    if(smtp->trailing_crlf || !conn->data->state.infilesize) {
      eob = strdup(SMTP_EOB + 2);
      eob = strdup(&SMTP_EOB[2]);
      len = SMTP_EOB_LEN - 2;
    }
    else {
      eob = strdup(SMTP_EOB);
      len = SMTP_EOB_LEN;
    }

1248
1249
1250
1251
1252
1253
1254
1255

1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1249
1250
1251
1252
1253
1254
1255

1256





1257
1258
1259
1260
1261
1262
1263







-
+
-
-
-
-
-







      pp->response = Curl_now();

      free(eob);
    }

    state(conn, SMTP_POSTDATA);

    /* Run the state-machine
    /* Run the state-machine */

       TODO: when the multi interface is used, this _really_ should be using
       the smtp_multi_statemach function but we have no general support for
       non-blocking DONE operations!
    */
    result = smtp_block_statemach(conn, FALSE);
  }

  /* Clear the transfer mode for the next request */
  smtp->transfer = FTPTRANSFER_BODY;

  return result;
Changes to jni/curl/lib/socks.c.
151
152
153
154
155
156
157
158

159
160
161
162
163
164
165
151
152
153
154
155
156
157

158
159
160
161
162
163
164
165







-
+








  /* DNS resolve only for SOCKS4, not SOCKS4a */
  if(!protocol4a) {
    struct Curl_dns_entry *dns;
    Curl_addrinfo *hp = NULL;
    int rc;

    rc = Curl_resolv(conn, hostname, remote_port, &dns);
    rc = Curl_resolv(conn, hostname, remote_port, FALSE, &dns);

    if(rc == CURLRESOLV_ERROR)
      return CURLE_COULDNT_RESOLVE_PROXY;

    if(rc == CURLRESOLV_PENDING)
      /* ignores the return code, but 'dns' remains NULL on failure */
      (void)Curl_resolver_wait_resolv(conn, &dns);
286
287
288
289
290
291
292
293

294
295
296
297
298
299
300
286
287
288
289
290
291
292

293
294
295
296
297
298
299
300







-
+







     * 93: request rejected because the client program and identd
     *     report different user-ids
     */

    /* wrong version ? */
    if(socksreq[0] != 0) {
      failf(data,
            "SOCKS4 reply has wrong version, version should be 4.");
            "SOCKS4 reply has wrong version, version should be 0.");
      return CURLE_COULDNT_CONNECT;
    }

    /* Result */
    switch(socksreq[1]) {
    case 90:
      infof(data, "SOCKS4%s request granted.\n", protocol4a?"a":"");
523
524
525
526
527
528
529
530






531

532
533
534






535

536
537
538
539
540
541
542
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







-
+
+
+
+
+
+

+


-
+
+
+
+
+
+

+







     * +----+------+----------+------+----------+
     * | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
     * +----+------+----------+------+----------+
     */
    len = 0;
    socksreq[len++] = 1;    /* username/pw subnegotiation version */
    socksreq[len++] = (unsigned char) proxy_user_len;
    if(proxy_user && proxy_user_len)
    if(proxy_user && proxy_user_len) {
      /* the length must fit in a single byte */
      if(proxy_user_len >= 255) {
        failf(data, "Excessive user name length for proxy auth");
        return CURLE_BAD_FUNCTION_ARGUMENT;
      }
      memcpy(socksreq + len, proxy_user, proxy_user_len);
    }
    len += proxy_user_len;
    socksreq[len++] = (unsigned char) proxy_password_len;
    if(proxy_password && proxy_password_len)
    if(proxy_password && proxy_password_len) {
      /* the length must fit in a single byte */
      if(proxy_password_len > 255) {
        failf(data, "Excessive password length for proxy auth");
        return CURLE_BAD_FUNCTION_ARGUMENT;
      }
      memcpy(socksreq + len, proxy_password, proxy_password_len);
    }
    len += proxy_password_len;

    code = Curl_write_plain(conn, sock, (char *)socksreq, len, &written);
    if(code || (len != written)) {
      failf(data, "Failed to send SOCKS5 sub-negotiation request.");
      return CURLE_COULDNT_CONNECT;
    }
593
594
595
596
597
598
599
600

601
602
603
604
605
606
607
605
606
607
608
609
610
611

612
613
614
615
616
617
618
619







-
+







    socksreq[len++] = (char) hostname_len; /* address length */
    memcpy(&socksreq[len], hostname, hostname_len); /* address str w/o NULL */
    len += hostname_len;
  }
  else {
    struct Curl_dns_entry *dns;
    Curl_addrinfo *hp = NULL;
    int rc = Curl_resolv(conn, hostname, remote_port, &dns);
    int rc = Curl_resolv(conn, hostname, remote_port, FALSE, &dns);

    if(rc == CURLRESOLV_ERROR)
      return CURLE_COULDNT_RESOLVE_HOST;

    if(rc == CURLRESOLV_PENDING) {
      /* this requires that we're in "wait for resolve" state */
      code = Curl_resolver_wait_resolv(conn, &dns);
Changes to jni/curl/lib/splay.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1997 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1997 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
194
195
196
197
198
199
200
201

202
203
204
205
206
207
208
194
195
196
197
198
199
200

201
202
203
204
205
206
207
208







-
+







  return x;
}


/* Deletes the very node we point out from the tree if it's there. Stores a
 * pointer to the new resulting tree in 'newroot'.
 *
 * Returns zero on success and non-zero on errors! TODO: document error codes.
 * Returns zero on success and non-zero on errors!
 * When returning error, it does not touch the 'newroot' pointer.
 *
 * NOTE: when the last node of the tree is removed, there's no tree left so
 * 'newroot' will be made to point to NULL.
 *
 * @unittest: 1309
 */
Changes to jni/curl/lib/ssh-libssh.c.
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956

1957
1958
1959
1960
1961
1962
1963
1942
1943
1944
1945
1946
1947
1948

1949
1950
1951
1952
1953
1954

1955
1956
1957
1958
1959
1960
1961
1962







-






-
+







     for the protocol_connect and doing states */
  return myssh_perform_getsock(conn, sock, numsocks);
}

static void myssh_block2waitfor(struct connectdata *conn, bool block)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
  int dir;

  /* If it didn't block, or nothing was returned by ssh_get_poll_flags
   * have the original set */
  conn->waitfor = sshc->orig_waitfor;

  if(block) {
    dir = ssh_get_poll_flags(sshc->ssh_session);
    int dir = ssh_get_poll_flags(sshc->ssh_session);
    if(dir & SSH_READ_PENDING) {
      /* translate the libssh define bits into our own bit defines */
      conn->waitfor = KEEP_RECV;
    }
    else if(dir & SSH_WRITE_PENDING) {
      conn->waitfor = KEEP_SEND;
    }
2008
2009
2010
2011
2012
2013
2014
2015
2016

2017
2018
2019
2020
2021
2022
2023
2024
2007
2008
2009
2010
2011
2012
2013


2014

2015
2016
2017
2018
2019
2020
2021







-
-
+
-







      if(left < 0) {
        failf(data, "Operation timed out");
        return CURLE_OPERATION_TIMEDOUT;
      }
    }

    if(!result && block) {
      curl_socket_t sock = conn->sock[FIRSTSOCKET];
      curl_socket_t fd_read = CURL_SOCKET_BAD;
      curl_socket_t fd_read = conn->sock[FIRSTSOCKET];
      fd_read = sock;
      /* wait for the socket to become ready */
      (void) Curl_socket_check(fd_read, CURL_SOCKET_BAD,
                               CURL_SOCKET_BAD, left > 1000 ? 1000 : left);
    }

  }

2048
2049
2050
2051
2052
2053
2054
2055
2056
2057
2058
2059
2060
2061
2062
2045
2046
2047
2048
2049
2050
2051

2052
2053
2054
2055
2056
2057
2058







-







 */
static CURLcode myssh_connect(struct connectdata *conn, bool *done)
{
  struct ssh_conn *ssh;
  CURLcode result;
  curl_socket_t sock = conn->sock[FIRSTSOCKET];
  struct Curl_easy *data = conn->data;
  int rc;

  /* initialize per-handle data if not already */
  if(!data->req.protop)
    myssh_setup_connection(conn);

  /* We default to persistent connections. We set this already in this connect
     function to make the re-use checks properly be able to check this bit. */
2102
2103
2104
2105
2106
2107
2108
2109
2110


2111
2112
2113
2114
2115
2116
2117
2098
2099
2100
2101
2102
2103
2104


2105
2106
2107
2108
2109
2110
2111
2112
2113







-
-
+
+







                    "zlib,zlib@openssh.com,none");
  }

  ssh->privkey = NULL;
  ssh->pubkey = NULL;

  if(data->set.str[STRING_SSH_PUBLIC_KEY]) {
    rc = ssh_pki_import_pubkey_file(data->set.str[STRING_SSH_PUBLIC_KEY],
                                    &ssh->pubkey);
    int rc = ssh_pki_import_pubkey_file(data->set.str[STRING_SSH_PUBLIC_KEY],
                                        &ssh->pubkey);
    if(rc != SSH_OK) {
      failf(data, "Could not load public key file");
      /* ignore */
    }
  }

  /* we do not verify here, we do it at the state machine,
2223
2224
2225
2226
2227
2228
2229
2230

2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2219
2220
2221
2222
2223
2224
2225

2226





2227
2228
2229
2230
2231
2232
2233







-
+
-
-
-
-
-







   done functions */
static CURLcode myssh_done(struct connectdata *conn, CURLcode status)
{
  CURLcode result = CURLE_OK;
  struct SSHPROTO *protop = conn->data->req.protop;

  if(!status) {
    /* run the state-machine
    /* run the state-machine */

       TODO: when the multi interface is used, this _really_ should be using
       the ssh_multi_statemach function but we have no general support for
       non-blocking DONE operations!
     */
    result = myssh_block_statemach(conn, FALSE);
  }
  else
    result = status;

  if(protop)
    Curl_safefree(protop->path);
Changes to jni/curl/lib/ssh.c.
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
286
287
288
289
290
291
292




293
294
295
296
297
298
299







-
-
-
-







    case LIBSSH2_ERROR_TIMEOUT:
      return CURLE_OPERATION_TIMEDOUT;

    case LIBSSH2_ERROR_EAGAIN:
      return CURLE_AGAIN;
  }

  /* TODO: map some more of the libssh2 errors to the more appropriate CURLcode
     error code, and possibly add a few new SSH-related one. We must however
     not return or even depend on libssh2 errors in the public libcurl API */

  return CURLE_SSH;
}

static LIBSSH2_ALLOC_FUNC(my_libssh2_malloc)
{
  (void)abstract; /* arg not used */
  return malloc(count);
587
588
589
590
591
592
593
594
595
596
597
598
599
600

601
602
603
604
605
606
607
583
584
585
586
587
588
589

590
591
592
593
594
595
596
597
598
599
600
601
602
603







-






+








static CURLcode ssh_check_fingerprint(struct connectdata *conn)
{
  struct ssh_conn *sshc = &conn->proto.sshc;
  struct Curl_easy *data = conn->data;
  const char *pubkey_md5 = data->set.str[STRING_SSH_HOST_PUBLIC_KEY_MD5];
  char md5buffer[33];
  int i;

  const char *fingerprint = libssh2_hostkey_hash(sshc->ssh_session,
      LIBSSH2_HOSTKEY_HASH_MD5);

  if(fingerprint) {
    /* The fingerprint points to static storage (!), don't free() it. */
    int i;
    for(i = 0; i < 16; i++)
      msnprintf(&md5buffer[i*2], 3, "%02x", (unsigned char) fingerprint[i]);
    infof(data, "SSH MD5 fingerprint: %s\n", md5buffer);
  }

  /* Before we authenticate we check the hostkey's MD5 fingerprint
   * against a known fingerprint, if available.
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
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







-




-
-
-
-



+
+
+
+















+







       * Check the supported auth types in the order I feel is most secure
       * with the requested type of authentication
       */
      sshc->authed = FALSE;

      if((data->set.ssh_auth_types & CURLSSH_AUTH_PUBLICKEY) &&
         (strstr(sshc->authlist, "publickey") != NULL)) {
        char *home = NULL;
        bool out_of_memory = FALSE;

        sshc->rsa_pub = sshc->rsa = NULL;

        /* To ponder about: should really the lib be messing about with the
           HOME environment variable etc? */
        home = curl_getenv("HOME");

        if(data->set.str[STRING_SSH_PRIVATE_KEY])
          sshc->rsa = strdup(data->set.str[STRING_SSH_PRIVATE_KEY]);
        else {
          /* To ponder about: should really the lib be messing about with the
             HOME environment variable etc? */
          char *home = curl_getenv("HOME");

          /* If no private key file is specified, try some common paths. */
          if(home) {
            /* Try ~/.ssh first. */
            sshc->rsa = aprintf("%s/.ssh/id_rsa", home);
            if(!sshc->rsa)
              out_of_memory = TRUE;
            else if(access(sshc->rsa, R_OK) != 0) {
              Curl_safefree(sshc->rsa);
              sshc->rsa = aprintf("%s/.ssh/id_dsa", home);
              if(!sshc->rsa)
                out_of_memory = TRUE;
              else if(access(sshc->rsa, R_OK) != 0) {
                Curl_safefree(sshc->rsa);
              }
            }
            free(home);
          }
          if(!out_of_memory && !sshc->rsa) {
            /* Nothing found; try the current dir. */
            sshc->rsa = strdup("id_rsa");
            if(sshc->rsa && access(sshc->rsa, R_OK) != 0) {
              Curl_safefree(sshc->rsa);
              sshc->rsa = strdup("id_dsa");
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
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







-











-
-







           && data->set.str[STRING_SSH_PUBLIC_KEY][0]) {
          sshc->rsa_pub = strdup(data->set.str[STRING_SSH_PUBLIC_KEY]);
          if(!sshc->rsa_pub)
            out_of_memory = TRUE;
        }

        if(out_of_memory || sshc->rsa == NULL) {
          free(home);
          Curl_safefree(sshc->rsa);
          Curl_safefree(sshc->rsa_pub);
          state(conn, SSH_SESSION_FREE);
          sshc->actualcode = CURLE_OUT_OF_MEMORY;
          break;
        }

        sshc->passphrase = data->set.ssl.key_passwd;
        if(!sshc->passphrase)
          sshc->passphrase = "";

        free(home);

        if(sshc->rsa_pub)
          infof(data, "Using SSH public key file '%s'\n", sshc->rsa_pub);
        infof(data, "Using SSH private key file '%s'\n", sshc->rsa);

        state(conn, SSH_AUTH_PKEY);
      }
      else {
3061
3062
3063
3064
3065
3066
3067
3068

3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3054
3055
3056
3057
3058
3059
3060

3061





3062
3063
3064
3065
3066
3067
3068







-
+
-
-
-
-
-







   done functions */
static CURLcode ssh_done(struct connectdata *conn, CURLcode status)
{
  CURLcode result = CURLE_OK;
  struct SSHPROTO *sftp_scp = conn->data->req.protop;

  if(!status) {
    /* run the state-machine
    /* run the state-machine */

       TODO: when the multi interface is used, this _really_ should be using
       the ssh_multi_statemach function but we have no general support for
       non-blocking DONE operations!
    */
    result = ssh_block_statemach(conn, FALSE);
  }
  else
    result = status;

  if(sftp_scp)
    Curl_safefree(sftp_scp->path);
Changes to jni/curl/lib/tftp.c.
1005
1006
1007
1008
1009
1010
1011
1012

1013
1014
1015
1016
1017
1018
1019
1005
1006
1007
1008
1009
1010
1011

1012
1013
1014
1015
1016
1017
1018
1019







-
+







   * little gain for UDP */
  connclose(conn, "TFTP");

  state->conn = conn;
  state->sockfd = state->conn->sock[FIRSTSOCKET];
  state->state = TFTP_STATE_START;
  state->error = TFTP_ERR_NONE;
  state->blksize = TFTP_BLKSIZE_DEFAULT;
  state->blksize = blksize;
  state->requested_blksize = blksize;

  ((struct sockaddr *)&state->local_addr)->sa_family =
    (CURL_SA_FAMILY_T)(conn->ip_addr->ai_family);

  tftp_set_timeouts(state);

Changes to jni/curl/lib/timeval.c.
62
63
64
65
66
67
68

69

70
71
72
73
74
75
76
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78







+

+







  /*
  ** clock_gettime() is granted to be increased monotonically when the
  ** monotonic clock is queried. Time starting point is unspecified, it
  ** could be the system start-up time, the Epoch, or something else,
  ** in any case the time starting point does not change once that the
  ** system has started up.
  */
#ifdef HAVE_GETTIMEOFDAY
  struct timeval now;
#endif
  struct curltime cnow;
  struct timespec tsnow;

  /*
  ** clock_gettime() may be defined by Apple's SDK as weak symbol thus
  ** code compiles but fails during run-time if clock_gettime() is
  ** called on unsupported OS version.
Changes to jni/curl/lib/transfer.c.
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
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







-
-
-
-
-
-


-
















+
+
+
+







CURLcode Curl_fillreadbuffer(struct connectdata *conn, size_t bytes,
                             size_t *nreadp)
{
  struct Curl_easy *data = conn->data;
  size_t buffersize = bytes;
  size_t nread;

#ifndef CURL_DISABLE_HTTP
  struct curl_slist *trailers = NULL;
  CURLcode c;
  int trailers_ret_code;
#endif

  curl_read_callback readfunc = NULL;
  void *extra_data = NULL;
  bool added_crlf = FALSE;

#ifdef CURL_DOES_CONVERSIONS
  bool sending_http_headers = FALSE;

  if(conn->handler->protocol&(PROTO_FAMILY_HTTP|CURLPROTO_RTSP)) {
    const struct HTTP *http = data->req.protop;

    if(http->sending == HTTPSEND_REQUEST)
      /* We're sending the HTTP request headers, not the data.
         Remember that so we don't re-translate them into garbage. */
      sending_http_headers = TRUE;
  }
#endif

#ifndef CURL_DISABLE_HTTP
  if(data->state.trailers_state == TRAILERS_INITIALIZED) {
    struct curl_slist *trailers = NULL;
    CURLcode c;
    int trailers_ret_code;

    /* at this point we already verified that the callback exists
       so we compile and store the trailers buffer, then proceed */
    infof(data,
          "Moving trailers state machine from initialized to sending.\n");
    data->state.trailers_state = TRAILERS_SENDING;
    data->state.trailers_buf = Curl_add_buffer_init();
    if(!data->state.trailers_buf) {
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
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







-
+




















+







       portion must always be translated to the network encoding.
       To further complicate matters, line end conversion might be
       done later on, so we need to prevent CRLFs from becoming
       CRCRLFs if that's the case.  To do this we use bare LFs
       here, knowing they'll become CRLFs later on.
     */

    char hexbuffer[11] = "";
    bool added_crlf = FALSE;
    int hexlen = 0;
    const char *endofline_native;
    const char *endofline_network;

    if(
#ifdef CURL_DO_LINEEND_CONV
       (data->set.prefer_ascii) ||
#endif
       (data->set.crlf)) {
      /* \n will become \r\n later on */
      endofline_native  = "\n";
      endofline_network = "\x0a";
    }
    else {
      endofline_native  = "\r\n";
      endofline_network = "\x0d\x0a";
    }

    /* if we're not handling trailing data, proceed as usual */
    if(data->state.trailers_state != TRAILERS_SENDING) {
      char hexbuffer[11] = "";
      hexlen = msnprintf(hexbuffer, sizeof(hexbuffer),
                         "%zx%s", nread, endofline_native);

      /* move buffer pointer */
      data->req.upload_fromhere -= hexlen;
      nread += hexlen;

459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
457
458
459
460
461
462
463

464
465
466
467
468
469
470







-







      Curl_set_in_callback(data, true);
      err = (data->set.ioctl_func)(data, CURLIOCMD_RESTARTREAD,
                                   data->set.ioctl_client);
      Curl_set_in_callback(data, false);
      infof(data, "the ioctl callback returned %d\n", (int)err);

      if(err) {
        /* FIXME: convert to a human readable error message */
        failf(data, "ioctl callback returned error %d", (int)err);
        return CURLE_SEND_FAIL_REWIND;
      }
    }
    else {
      /* If no CURLOPT_READFUNCTION is used, we know that we operate on a
         given FILE * stream and we can actually attempt to rewind that
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
496
497
498
499
500
501
502





























503
504
505
506
507
508
509







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







       close, which we emulate it using conn->proto.httpc.closed =
       TRUE. The thing is if we read everything, then http2_recv won't
       be called and we cannot signal the HTTP/2 stream has closed. As
       a workaround, we return nonzero here to call http2_recv. */
    ((conn->handler->protocol&PROTO_FAMILY_HTTP) && conn->httpversion == 20);
#else
    Curl_ssl_data_pending(conn, FIRSTSOCKET);
#endif
}

static void read_rewind(struct connectdata *conn,
                        size_t thismuch)
{
  DEBUGASSERT(conn->read_pos >= thismuch);

  conn->read_pos -= thismuch;
  conn->bits.stream_was_rewound = TRUE;

#ifdef DEBUGBUILD
  {
    char buf[512 + 1];
    size_t show;

    show = CURLMIN(conn->buf_len - conn->read_pos, sizeof(buf)-1);
    if(conn->master_buffer) {
      memcpy(buf, conn->master_buffer + conn->read_pos, show);
      buf[show] = '\0';
    }
    else {
      buf[0] = '\0';
    }

    DEBUGF(infof(conn->data,
                 "Buffer after stream rewind (read_pos = %zu): [%s]\n",
                 conn->read_pos, buf));
  }
#endif
}

/*
 * Check to see if CURLOPT_TIMECONDITION was met by comparing the time of the
 * remote document with the time provided by CURLOPT_TIMEVAL
 */
605
606
607
608
609
610
611
612

613
614
615
616
617
618
619
620
621
573
574
575
576
577
578
579

580


581
582
583
584
585
586
587







-
+
-
-







          call Curl_read to ensure that http2_handle_stream_close is
          called when we read all incoming bytes for a particular
          stream. */
       !((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
         conn->httpversion == 20) &&
#endif
       k->size != -1 && !k->header) {
      /* make sure we don't read "too much" if we can help it since we
      /* make sure we don't read too much */
         might be pipelining and then someone else might want to read what
         follows! */
      curl_off_t totalleft = k->size - k->bytecount;
      if(totalleft < (curl_off_t)bytestoread)
        bytestoread = (size_t)totalleft;
    }

    if(bytestoread) {
      /* receive data from the network! */
646
647
648
649
650
651
652
653

654
655
656
657
658
659
660
612
613
614
615
616
617
618

619
620
621
622
623
624
625
626







-
+







    /* indicates data of zero size, i.e. empty file */
    is_empty_data = ((nread == 0) && (k->bodywrites == 0)) ? TRUE : FALSE;

    /* NUL terminate, allowing string ops to be used */
    if(0 < nread || is_empty_data) {
      k->buf[nread] = 0;
    }
    else if(0 >= nread) {
    else {
      /* if we receive 0 or less here, the server closed the connection
         and we bail out from this! */
      DEBUGF(infof(data, "nread <= 0, server closed connection, bailing\n"));
      k->keepon &= ~KEEP_RECV;
      break;
    }

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
655
656
657
658
659
660
661


662











663
664
665
666

667
668
669
670
671
672
673







-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-







          break;
      }

      if(stop_reading) {
        /* We've stopped dealing with input, get out of the do-while loop */

        if(nread > 0) {
          if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
            infof(data,
          infof(data,
                  "Rewinding stream by : %zd"
                  " bytes on url %s (zero-length body)\n",
                  nread, data->state.up.path);
            read_rewind(conn, (size_t)nread);
          }
          else {
            infof(data,
                  "Excess found in a non pipelined read:"
                  " excess = %zd"
                  " url = %s (zero-length body)\n",
                  nread, data->state.up.path);
                "Excess found:"
                " excess = %zd"
                " url = %s (zero-length body)\n",
                nread, data->state.up.path);
          }
        }

        break;
      }
    }
#endif /* CURL_DISABLE_HTTP */

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
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







-
-






-
-
-
-
-


















-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
-







        if(CHUNKE_STOP == res) {
          size_t dataleft;
          /* we're done reading chunks! */
          k->keepon &= ~KEEP_RECV; /* read no more */

          /* There are now possibly N number of bytes at the end of the
             str buffer that weren't written to the client.

             We DO care about this data if we are pipelining.
             Push it back to be read on the next pass. */

          dataleft = conn->chunk.dataleft;
          if(dataleft != 0) {
            infof(conn->data, "Leftovers after chunking: %zu bytes\n",
                  dataleft);
            if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
              /* only attempt the rewind if we truly are pipelining */
              infof(conn->data, "Rewinding %zu bytes\n",dataleft);
              read_rewind(conn, dataleft);
            }
          }
        }
        /* If it returned OK, we just keep going */
      }
#endif   /* CURL_DISABLE_HTTP */

      /* Account for body content stored in the header buffer */
      if((k->badheader == HEADER_PARTHEADER) && !k->ignorebody) {
        DEBUGF(infof(data, "Increasing bytecount by %zu from hbuflen\n",
                     k->hbuflen));
        k->bytecount += k->hbuflen;
      }

      if((-1 != k->maxdownload) &&
         (k->bytecount + nread >= k->maxdownload)) {

        excess = (size_t)(k->bytecount + nread - k->maxdownload);
        if(excess > 0 && !k->ignorebody) {
          if(Curl_pipeline_wanted(conn->data->multi, CURLPIPE_HTTP1)) {
            infof(data,
          infof(data,
                  "Rewinding stream by : %zu"
                  " bytes on url %s (size = %" CURL_FORMAT_CURL_OFF_T
                  ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
                  ", bytecount = %" CURL_FORMAT_CURL_OFF_T ", nread = %zd)\n",
                  excess, data->state.up.path,
                  k->size, k->maxdownload, k->bytecount, nread);
            read_rewind(conn, excess);
          }
          else {
            infof(data,
                  "Excess found in a non pipelined read:"
                  " excess = %zu"
                  ", size = %" CURL_FORMAT_CURL_OFF_T
                  ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
                  ", bytecount = %" CURL_FORMAT_CURL_OFF_T "\n",
                  excess, k->size, k->maxdownload, k->bytecount);
                "Excess found in a read:"
                " excess = %zu"
                ", size = %" CURL_FORMAT_CURL_OFF_T
                ", maxdownload = %" CURL_FORMAT_CURL_OFF_T
                ", bytecount = %" CURL_FORMAT_CURL_OFF_T "\n",
                excess, k->size, k->maxdownload, k->bytecount);
          }
        }

        nread = (ssize_t) (k->maxdownload - k->bytecount);
        if(nread < 0) /* this should be unusual */
          nread = 0;

        k->keepon &= ~KEEP_RECV; /* we're done reading */
1561
1562
1563
1564
1565
1566
1567

1568
1569
1570
1571
1572
1573
1574
1575

1576
1577
1578
1579
1580
1581
1582
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522







+








+








    /* In case the handle is re-used and an authentication method was picked
       in the session we need to make sure we only use the one(s) we now
       consider to be fine */
    data->state.authhost.picked &= data->state.authhost.want;
    data->state.authproxy.picked &= data->state.authproxy.want;

#ifndef CURL_DISABLE_FTP
    if(data->state.wildcardmatch) {
      struct WildcardData *wc = &data->wildcard;
      if(wc->state < CURLWC_INIT) {
        result = Curl_wildcard_init(wc); /* init wildcard structures */
        if(result)
          return CURLE_OUT_OF_MEMORY;
      }
    }
#endif
  }

  return result;
}

/*
 * Curl_posttransfer() is called immediately after a transfer ends
Changes to jni/curl/lib/url.c.
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
105
106
107
108
109
110
111

112
113
114
115
116
117

118
119
120
121
122
123
124







-






-







#include "curl_ldap.h"
#include "ssh.h"
#include "imap.h"
#include "url.h"
#include "connect.h"
#include "inet_ntop.h"
#include "http_ntlm.h"
#include "curl_ntlm_wb.h"
#include "socks.h"
#include "curl_rtmp.h"
#include "gopher.h"
#include "http_proxy.h"
#include "conncache.h"
#include "multihandle.h"
#include "pipeline.h"
#include "dotdot.h"
#include "strdup.h"
#include "setopt.h"
#include "altsvc.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
183
184
185
186
187
188
189
190

191
192
193
194

195
196
197
198
199
200
201
181
182
183
184
185
186
187

188
189
190
191

192
193
194
195
196
197
198
199







-
+



-
+







  &Curl_handler_file,
#endif

#ifndef CURL_DISABLE_TFTP
  &Curl_handler_tftp,
#endif

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
#if defined(USE_SSH)
  &Curl_handler_scp,
#endif

#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
#if defined(USE_SSH)
  &Curl_handler_sftp,
#endif

#ifndef CURL_DISABLE_IMAP
  &Curl_handler_imap,
#ifdef USE_SSL
  &Curl_handler_imaps,
300
301
302
303
304
305
306
307
308

309
310
311
312
313
314
315
298
299
300
301
302
303
304


305
306
307
308
309
310
311
312







-
-
+







  Curl_safefree(up->hostname);
  Curl_safefree(up->port);
  Curl_safefree(up->user);
  Curl_safefree(up->password);
  Curl_safefree(up->options);
  Curl_safefree(up->path);
  Curl_safefree(up->query);
  if(data->set.uh != data->state.uh)
    curl_url_cleanup(data->state.uh);
  curl_url_cleanup(data->state.uh);
  data->state.uh = NULL;
}

/*
 * This is the internal function curl_easy_cleanup() calls. This should
 * cleanup and free all resources associated with this sessionhandle.
 *
377
378
379
380
381
382
383

384


385
386
387
388
389
390
391
374
375
376
377
378
379
380
381

382
383
384
385
386
387
388
389
390







+
-
+
+







  Curl_safefree(data->state.ulbuf);
  Curl_flush_cookies(data, 1);
#ifdef USE_ALTSVC
  Curl_altsvc_save(data->asi, data->set.str[STRING_ALTSVC]);
  Curl_altsvc_cleanup(data->asi);
  data->asi = NULL;
#endif
#if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH)
  Curl_digest_cleanup(data);
  Curl_http_auth_cleanup_digest(data);
#endif
  Curl_safefree(data->info.contenttype);
  Curl_safefree(data->info.wouldredirect);

  /* this destroys the channel and we cannot use it anymore after this */
  Curl_resolver_cleanup(data->state.resolver);

  Curl_http2_cleanup_dependencies(data);
436
437
438
439
440
441
442

443
444
445
446
447

448
449
450
451
452
453
454
435
436
437
438
439
440
441
442
443
444
445
446

447
448
449
450
451
452
453
454







+




-
+








  set->filesize = -1;        /* we don't know the size */
  set->postfieldsize = -1;   /* unknown size */
  set->maxredirs = -1;       /* allow any amount by default */

  set->httpreq = HTTPREQ_GET; /* Default HTTP request */
  set->rtspreq = RTSPREQ_OPTIONS; /* Default RTSP request */
#ifndef CURL_DISABLE_FILE
  set->ftp_use_epsv = TRUE;   /* FTP defaults to EPSV operations */
  set->ftp_use_eprt = TRUE;   /* FTP defaults to EPRT operations */
  set->ftp_use_pret = FALSE;  /* mainly useful for drftpd servers */
  set->ftp_filemethod = FTPFILE_MULTICWD;

#endif
  set->dns_cache_timeout = 60; /* Timeout every 60 seconds by default */

  /* Set the default size of the SSL session ID cache */
  set->general_ssl.max_ssl_sessions = 5;

  set->proxyport = 0;
  set->proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */
539
540
541
542
543
544
545

546
547
548
549
550
551
552
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553







+







  set->sep_headers = TRUE; /* separated header lists by default */
  set->buffer_size = READBUFFER_SIZE;
  set->upload_buffer_size = UPLOADBUFFER_DEFAULT;
  set->happy_eyeballs_timeout = CURL_HET_DEFAULT;
  set->fnmatch = ZERO_NULL;
  set->upkeep_interval_ms = CURL_UPKEEP_INTERVAL_DEFAULT;
  set->maxconnects = DEFAULT_CONNCACHE_SIZE; /* for easy handles */
  set->maxage_conn = 118;
  set->http09_allowed = TRUE;
  set->httpversion =
#ifdef USE_NGHTTP2
    CURL_HTTP_VERSION_2TLS
#else
    CURL_HTTP_VERSION_1_1
#endif
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
691
692
693
694
695
696
697





698
699
700
701
702
703
704







-
-
-
-
-







  if(CURL_SOCKET_BAD != conn->sock[FIRSTSOCKET])
    Curl_closesocket(conn, conn->sock[FIRSTSOCKET]);
  if(CURL_SOCKET_BAD != conn->tempsock[0])
    Curl_closesocket(conn, conn->tempsock[0]);
  if(CURL_SOCKET_BAD != conn->tempsock[1])
    Curl_closesocket(conn, conn->tempsock[1]);

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
    defined(NTLM_WB_ENABLED)
  Curl_ntlm_wb_cleanup(conn);
#endif

  /* unlink ourselves. this should be called last since other shutdown
     procedures need a valid conn->data and this may clear it. */
  Curl_conncache_remove_conn(conn->data, conn, TRUE);
}

static void conn_free(struct connectdata *conn)
{
735
736
737
738
739
740
741
742
743
744
745
746
747

748
749
750
751
752
753
754
755
756
731
732
733
734
735
736
737

738
739
740


741


742
743
744
745
746
747
748







-



-
-
+
-
-







  Curl_safefree(conn->trailer);
  Curl_safefree(conn->host.rawalloc); /* host name buffer */
  Curl_safefree(conn->conn_to_host.rawalloc); /* host name buffer */
  Curl_safefree(conn->hostname_resolve);
  Curl_safefree(conn->secondaryhostname);
  Curl_safefree(conn->http_proxy.host.rawalloc); /* http proxy name buffer */
  Curl_safefree(conn->socks_proxy.host.rawalloc); /* socks proxy name buffer */
  Curl_safefree(conn->master_buffer);
  Curl_safefree(conn->connect_state);

  conn_reset_all_postponed_data(conn);

  Curl_llist_destroy(&conn->send_pipe, NULL);
  Curl_llist_destroy(&conn->easyq, NULL);
  Curl_llist_destroy(&conn->recv_pipe, NULL);

  Curl_safefree(conn->localdev);
  Curl_free_primary_ssl_config(&conn->ssl_config);
  Curl_free_primary_ssl_config(&conn->proxy_ssl_config);

#ifdef USE_UNIX_SOCKETS
  Curl_safefree(conn->unix_domain_socket);
#endif
800
801
802
803
804
805
806
807

808
809
810
811

812
813
814
815
816




817
818
819
820
821
822
823
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







-
+



-
+





+
+
+
+







    conn->dns_entry = NULL;
  }

  Curl_hostcache_prune(data); /* kill old DNS cache entries */

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM)
  /* Cleanup NTLM connection-related data */
  Curl_http_ntlm_cleanup(conn);
  Curl_http_auth_cleanup_ntlm(conn);
#endif
#if !defined(CURL_DISABLE_HTTP) && defined(USE_SPNEGO)
  /* Cleanup NEGOTIATE connection-related data */
  Curl_cleanup_negotiate(conn);
  Curl_http_auth_cleanup_negotiate(conn);
#endif

  /* the protocol specific disconnect handler and conn_shutdown need a transfer
     for the connection! */
  conn->data = data;

  if(conn->bits.connect_only)
    /* treat the connection as dead in CONNECT_ONLY situations */
    dead_connection = TRUE;

  if(conn->handler->disconnect)
    /* This is set if protocol-specific cleanups should be made */
    conn->handler->disconnect(conn, dead_connection);

  conn_shutdown(conn);
  conn_free(conn);
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
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







-
+

-
-
+
+

-
-
+
+



-
+



-
+
-
-
-
-
-
-
-







-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-











+
+
+
+













-
-
-
+
+
-







    /* timeout */
    ret_val = FALSE;

  return ret_val;
}

/*
 * IsPipeliningPossible()
 * IsMultiplexingPossible()
 *
 * Return a bitmask with the available pipelining and multiplexing options for
 * the given requested connection.
 * Return a bitmask with the available multiplexing options for the given
 * requested connection.
 */
static int IsPipeliningPossible(const struct Curl_easy *handle,
                                const struct connectdata *conn)
static int IsMultiplexingPossible(const struct Curl_easy *handle,
                                  const struct connectdata *conn)
{
  int avail = 0;

  /* If a HTTP protocol and pipelining is enabled */
  /* If a HTTP protocol and multiplexing is enabled */
  if((conn->handler->protocol & PROTO_FAMILY_HTTP) &&
     (!conn->bits.protoconnstart || !conn->bits.close)) {

    if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) &&
    if(Curl_multiplex_wanted(handle->multi) &&
       (handle->set.httpversion != CURL_HTTP_VERSION_1_0) &&
       (handle->set.httpreq == HTTPREQ_GET ||
        handle->set.httpreq == HTTPREQ_HEAD))
      /* didn't ask for HTTP/1.0 and a GET or HEAD */
      avail |= CURLPIPE_HTTP1;

    if(Curl_pipeline_wanted(handle->multi, CURLPIPE_MULTIPLEX) &&
       (handle->set.httpversion >= CURL_HTTP_VERSION_2))
      /* allows HTTP/2 */
      avail |= CURLPIPE_MULTIPLEX;
  }
  return avail;
}

/* Returns non-zero if a handle was removed */
int Curl_removeHandleFromPipeline(struct Curl_easy *handle,
                                  struct curl_llist *pipeline)
{
  if(pipeline) {
    struct curl_llist_element *curr;

#ifndef CURL_DISABLE_PROXY
    curr = pipeline->head;
    while(curr) {
      if(curr->ptr == handle) {
        Curl_llist_remove(pipeline, curr, NULL);
        return 1; /* we removed a handle */
      }
      curr = curr->next;
    }
  }

  return 0;
}

#if 0 /* this code is saved here as it is useful for debugging purposes */
static void Curl_printPipeline(struct curl_llist *pipeline)
{
  struct curl_llist_element *curr;

  curr = pipeline->head;
  while(curr) {
    struct Curl_easy *data = (struct Curl_easy *) curr->ptr;
    infof(data, "Handle in pipeline: %s\n", data->state.path);
    curr = curr->next;
  }
}
#endif

static struct Curl_easy* gethandleathead(struct curl_llist *pipeline)
{
  struct curl_llist_element *curr = pipeline->head;
#ifdef DEBUGBUILD
  {
    struct curl_llist_element *p = pipeline->head;
    while(p) {
      struct Curl_easy *e = p->ptr;
      DEBUGASSERT(GOOD_EASY_HANDLE(e));
      p = p->next;
    }
  }
#endif
  if(curr) {
    return (struct Curl_easy *) curr->ptr;
  }

  return NULL;
}

/* remove the specified connection from all (possible) pipelines and related
   queues */
void Curl_getoff_all_pipelines(struct Curl_easy *data,
                               struct connectdata *conn)
{
  if(!conn->bundle)
    return;
  if(conn->bundle->multiuse == BUNDLE_PIPELINING) {
    bool recv_head = (conn->readchannel_inuse &&
                      Curl_recvpipe_head(data, conn));
    bool send_head = (conn->writechannel_inuse &&
                      Curl_sendpipe_head(data, conn));

    if(Curl_removeHandleFromPipeline(data, &conn->recv_pipe) && recv_head)
      Curl_pipeline_leave_read(conn);
    if(Curl_removeHandleFromPipeline(data, &conn->send_pipe) && send_head)
      Curl_pipeline_leave_write(conn);
  }
  else {
    (void)Curl_removeHandleFromPipeline(data, &conn->recv_pipe);
    (void)Curl_removeHandleFromPipeline(data, &conn->send_pipe);
  }
}

static bool
proxy_info_matches(const struct proxy_info* data,
                   const struct proxy_info* needle)
{
  if((data->proxytype == needle->proxytype) &&
     (data->port == needle->port) &&
     Curl_safe_strcasecompare(data->host.name, needle->host.name))
    return TRUE;

  return FALSE;
}
#else
/* disabled, won't get called */
#define proxy_info_matches(x,y) FALSE
#endif

/*
 * This function checks if the given connection is dead and extracts it from
 * the connection cache if so.
 *
 * When this is called as a Curl_conncache_foreach() callback, the connection
 * cache lock is held!
 *
 * Returns TRUE if the connection was dead and extracted.
 */
static bool extract_if_dead(struct connectdata *conn,
                            struct Curl_easy *data)
{
  size_t pipeLen = conn->send_pipe.size + conn->recv_pipe.size;
  if(!pipeLen && !CONN_INUSE(conn) && !conn->data) {
    /* The check for a dead socket makes sense only if there are no
  if(!CONN_INUSE(conn) && !conn->data) {
    /* The check for a dead socket makes sense only if the connection isn't in
       handles in pipeline and the connection isn't already marked in
       use */
    bool dead;
    if(conn->handler->connection_check) {
      /* The protocol has a special method for checking the state of the
         connection. Use it to check if the connection is dead. */
      unsigned int state;
      struct Curl_easy *olddata = conn->data;
1043
1044
1045
1046
1047
1048
1049


1050
1051



1052







1053
1054
1055
1056





1057
1058
1059
1060
1061
1062
1063
1064
1065
1066

1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079

1080

1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116


1117
1118
1119
1120



1121
1122

1123
1124
1125
1126
1127
1128
1129


1130
1131
1132


1133
1134
1135


1136
1137

1138
1139
1140


1141
1142
1143
1144
1145
1146
1147

1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160

1161
1162
1163
1164
1165
1166


1167
1168

1169
1170
1171

1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188

1189
1190
1191
1192
1193
1194
1195
957
958
959
960
961
962
963
964
965
966

967
968
969
970
971
972
973
974
975
976
977




978
979
980
981
982
983
984
985
986
987
988
989
990
991

992

993
994
995
996
997
998
999
1000
1001
1002
1003

1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020





1021
1022
1023
1024
1025



1026
1027
1028
1029
1030




1031
1032
1033



1034
1035
1036
1037

1038
1039
1040
1041
1042
1043


1044
1045
1046


1047
1048



1049
1050
1051

1052



1053
1054
1055
1056
1057
1058
1059
1060

1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073

1074
1075
1076
1077
1078
1079

1080
1081
1082

1083
1084
1085

1086















1087

1088
1089
1090
1091
1092
1093
1094
1095







+
+

-
+
+
+

+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+









-
+
-











-
+

+














-
-
-
-
-





-
-
-





-
-
-
-
+
+

-
-
-
+
+
+

-
+





-
-
+
+

-
-
+
+
-
-
-
+
+

-
+
-
-
-
+
+






-
+












-
+





-
+
+

-
+


-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
+







      /* disconnect it */
      (void)Curl_disconnect(data, prune.extracted, /* dead_connection */TRUE);
    }
    data->state.conn_cache->last_cleanup = now;
  }
}

/* A connection has to have been idle for a shorter time than 'maxage_conn' to
   be subject for reuse. The success rate is just too low after this. */

static size_t max_pipeline_length(struct Curl_multi *multi)
static bool conn_maxage(struct Curl_easy *data,
                        struct connectdata *conn,
                        struct curltime now)
{
  if(!conn->data) {
    timediff_t idletime = Curl_timediff(now, conn->lastused);
    idletime /= 1000; /* integer seconds is fine */

    if(idletime/1000 > data->set.maxage_conn) {
      infof(data, "Too old connection (%ld seconds), disconnect it\n",
            idletime);
  return multi ? multi->max_pipeline_length : 0;
}


      return TRUE;
    }
  }
  return FALSE;
}
/*
 * Given one filled in connection struct (named needle), this function should
 * detect if there already is one that has all the significant details
 * exactly the same and thus should be used instead.
 *
 * If there is a match, this function returns TRUE - and has marked the
 * connection as 'in-use'. It must later be called with ConnectionDone() to
 * return back to 'idle' (unused) state.
 *
 * The force_reuse flag is set if the connection must be used, even if
 * The force_reuse flag is set if the connection must be used.
 * the pipelining strategy wants to open a new connection instead of reusing.
 */
static bool
ConnectionExists(struct Curl_easy *data,
                 struct connectdata *needle,
                 struct connectdata **usethis,
                 bool *force_reuse,
                 bool *waitpipe)
{
  struct connectdata *check;
  struct connectdata *chosen = 0;
  bool foundPendingCandidate = FALSE;
  int canpipe = IsPipeliningPossible(data, needle);
  bool canmultiplex = IsMultiplexingPossible(data, needle);
  struct connectbundle *bundle;
  struct curltime now = Curl_now();

#ifdef USE_NTLM
  bool wantNTLMhttp = ((data->state.authhost.want &
                      (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
                      (needle->handler->protocol & PROTO_FAMILY_HTTP));
  bool wantProxyNTLMhttp = (needle->bits.proxy_user_passwd &&
                           ((data->state.authproxy.want &
                           (CURLAUTH_NTLM | CURLAUTH_NTLM_WB)) &&
                           (needle->handler->protocol & PROTO_FAMILY_HTTP)));
#endif

  *force_reuse = FALSE;
  *waitpipe = FALSE;

  /* We can't pipeline if the site is blacklisted */
  if((canpipe & CURLPIPE_HTTP1) &&
     Curl_pipeline_site_blacklisted(data, needle))
    canpipe &= ~ CURLPIPE_HTTP1;

  /* Look up the bundle with all the connections to this particular host.
     Locks the connection cache, beware of early returns! */
  bundle = Curl_conncache_find_bundle(needle, data->state.conn_cache);
  if(bundle) {
    /* Max pipe length is zero (unlimited) for multiplexed connections */
    size_t max_pipe_len = (bundle->multiuse != BUNDLE_MULTIPLEX)?
      max_pipeline_length(data->multi):0;
    size_t best_pipe_len = max_pipe_len;
    struct curl_llist_element *curr;

    infof(data, "Found bundle for host %s: %p [%s]\n",
          (needle->bits.conn_to_host ? needle->conn_to_host.name :
           needle->host.name), (void *)bundle,
          (bundle->multiuse == BUNDLE_PIPELINING ?
           "can pipeline" :
           (bundle->multiuse == BUNDLE_MULTIPLEX ?
            "can multiplex" : "serially")));
          (bundle->multiuse == BUNDLE_MULTIPLEX ?
           "can multiplex" : "serially"));

    /* We can't pipeline if we don't know anything about the server */
    if(canpipe) {
      if(bundle->multiuse <= BUNDLE_UNKNOWN) {
    /* We can't multiplex if we don't know anything about the server */
    if(canmultiplex) {
      if(bundle->multiuse == BUNDLE_UNKNOWN) {
        if((bundle->multiuse == BUNDLE_UNKNOWN) && data->set.pipewait) {
          infof(data, "Server doesn't support multi-use yet, wait\n");
          infof(data, "Server doesn't support multiplex yet, wait\n");
          *waitpipe = TRUE;
          Curl_conncache_unlock(data);
          return FALSE; /* no re-use */
        }

        infof(data, "Server doesn't support multi-use (yet)\n");
        canpipe = 0;
        infof(data, "Server doesn't support multiplex (yet)\n");
        canmultiplex = FALSE;
      }
      if((bundle->multiuse == BUNDLE_PIPELINING) &&
         !Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1)) {
      if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
         !Curl_multiplex_wanted(data->multi)) {
        /* not asked for, switch off */
        infof(data, "Could pipeline, but not asked to!\n");
        canpipe = 0;
        infof(data, "Could multiplex, but not asked to!\n");
        canmultiplex = FALSE;
      }
      else if((bundle->multiuse == BUNDLE_MULTIPLEX) &&
      if(bundle->multiuse == BUNDLE_NO_MULTIUSE) {
              !Curl_pipeline_wanted(data->multi, CURLPIPE_MULTIPLEX)) {
        infof(data, "Could multiplex, but not asked to!\n");
        canpipe = 0;
        infof(data, "Can not multiplex, even if we wanted to!\n");
        canmultiplex = FALSE;
      }
    }

    curr = bundle->conn_list.head;
    while(curr) {
      bool match = FALSE;
      size_t pipeLen;
      size_t multiplexed;

      /*
       * Note that if we use a HTTP proxy in normal mode (no tunneling), we
       * check connections to that proxy and not to the actual remote server.
       */
      check = curr->ptr;
      curr = curr->next;

      if(check->bits.connect_only)
        /* connect-only connections will not be reused */
        continue;

      if(extract_if_dead(check, data)) {
      if(conn_maxage(data, check, now) || extract_if_dead(check, data)) {
        /* disconnect it */
        (void)Curl_disconnect(data, check, /* dead_connection */TRUE);
        continue;
      }

      pipeLen = check->send_pipe.size + check->recv_pipe.size;
      multiplexed = CONN_INUSE(check) &&
        (bundle->multiuse == BUNDLE_MULTIPLEX);

      if(canpipe) {
      if(canmultiplex) {
        if(check->bits.protoconnstart && check->bits.close)
          continue;

      }
        if(!check->bits.multiplex) {
          /* If not multiplexing, make sure the connection is fine for HTTP/1
             pipelining */
          struct Curl_easy* sh = gethandleathead(&check->send_pipe);
          struct Curl_easy* rh = gethandleathead(&check->recv_pipe);
          if(sh) {
            if(!(IsPipeliningPossible(sh, check) & CURLPIPE_HTTP1))
              continue;
          }
          else if(rh) {
            if(!(IsPipeliningPossible(rh, check) & CURLPIPE_HTTP1))
              continue;
          }
        }
      }
      else {
        if(pipeLen > 0) {
        if(multiplexed) {
          /* can only happen within multi handles, and means that another easy
             handle is using this connection */
          continue;
        }

        if(Curl_resolver_asynch()) {
          /* ip_addr_str[0] is NUL only if the resolving of the name hasn't
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1106
1107
1108
1109
1110
1111
1112







1113
1114
1115
1116
1117
1118
1119







-
-
-
-
-
-
-







           check->bits.close) {
          if(!check->bits.close)
            foundPendingCandidate = TRUE;
          /* Don't pick a connection that hasn't connected yet or that is going
             to get closed. */
          infof(data, "Connection #%ld isn't open enough, can't reuse\n",
                check->connection_id);
#ifdef DEBUGBUILD
          if(check->recv_pipe.size > 0) {
            infof(data,
                  "BAD! Unconnected #%ld has a non-empty recv pipeline!\n",
                  check->connection_id);
          }
#endif
          continue;
        }
      }

#ifdef USE_UNIX_SOCKETS
      if(needle->unix_domain_socket) {
        if(!check->unix_domain_socket)
1283
1284
1285
1286
1287
1288
1289
1290
1291


1292
1293
1294
1295
1296
1297
1298


1299
1300
1301
1302
1303
1304
1305
1176
1177
1178
1179
1180
1181
1182


1183
1184
1185
1186
1187
1188
1189


1190
1191
1192
1193
1194
1195
1196
1197
1198







-
-
+
+





-
-
+
+







              continue;
            if(check->ssl[FIRSTSOCKET].state != ssl_connection_complete)
              continue;
          }
        }
      }

      if(!canpipe && check->data)
        /* this request can't be pipelined but the checked connection is
      if(!canmultiplex && check->data)
        /* this request can't be multiplexed but the checked connection is
           already in use so we skip it */
        continue;

      if(CONN_INUSE(check) && check->data &&
         (check->data->multi != needle->data->multi))
        /* this could be subject for pipeline/multiplex use, but only if they
           belong to the same multi handle */
        /* this could be subject for multiplex use, but only if they belong to
         * the same multi handle */
        continue;

      if(needle->localdev || needle->localport) {
        /* If we are bound to a specific local end (IP+port), we must not
           re-use a random other one, although if we didn't ask for a
           particular one we can reuse one that was bound.

1382
1383
1384
1385
1386
1387
1388
1389

1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405

1406
1407
1408
1409
1410
1411
1412
1413
1414
1415

1416
1417

1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429



1430
1431
1432

1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448

1449
1450

1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474




1475
1476
1477
1478
1479
1480
1481
1482
1275
1276
1277
1278
1279
1280
1281

1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297

1298
1299
1300
1301
1302
1303
1304
1305
1306
1307

1308
1309

1310
1311
1312
1313
1314
1315
1316
1317
1318
1319



1320
1321
1322

1323

1324
1325
1326
1327
1328
1329





1330
1331
1332
1333
1334

1335
1336

1337
1338
1339
1340
1341




















1342
1343
1344
1345

1346
1347
1348
1349
1350
1351
1352







-
+















-
+









-
+

-
+









-
-
-
+
+
+
-

-
+





-
-
-
-
-





-
+

-
+




-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-







           possible. (Especially we must not reuse the same connection if
           partway through a handshake!) */
        if(wantNTLMhttp) {
          if(strcmp(needle->user, check->user) ||
             strcmp(needle->passwd, check->passwd))
            continue;
        }
        else if(check->ntlm.state != NTLMSTATE_NONE) {
        else if(check->http_ntlm_state != NTLMSTATE_NONE) {
          /* Connection is using NTLM auth but we don't want NTLM */
          continue;
        }

        /* Same for Proxy NTLM authentication */
        if(wantProxyNTLMhttp) {
          /* Both check->http_proxy.user and check->http_proxy.passwd can be
           * NULL */
          if(!check->http_proxy.user || !check->http_proxy.passwd)
            continue;

          if(strcmp(needle->http_proxy.user, check->http_proxy.user) ||
             strcmp(needle->http_proxy.passwd, check->http_proxy.passwd))
            continue;
        }
        else if(check->proxyntlm.state != NTLMSTATE_NONE) {
        else if(check->proxy_ntlm_state != NTLMSTATE_NONE) {
          /* Proxy connection is using NTLM auth but we don't want NTLM */
          continue;
        }

        if(wantNTLMhttp || wantProxyNTLMhttp) {
          /* Credentials are already checked, we can use this connection */
          chosen = check;

          if((wantNTLMhttp &&
             (check->ntlm.state != NTLMSTATE_NONE)) ||
             (check->http_ntlm_state != NTLMSTATE_NONE)) ||
              (wantProxyNTLMhttp &&
               (check->proxyntlm.state != NTLMSTATE_NONE))) {
               (check->proxy_ntlm_state != NTLMSTATE_NONE))) {
            /* We must use this connection, no other */
            *force_reuse = TRUE;
            break;
          }

          /* Continue look up for a better connection */
          continue;
        }
#endif
        if(canpipe) {
          /* We can pipeline if we want to. Let's continue looking for
             the optimal connection to use, i.e the shortest pipe that is not
        if(canmultiplex) {
          /* We can multiplex if we want to. Let's continue looking for
             the optimal connection to use. */
             blacklisted. */

          if(pipeLen == 0) {
          if(!multiplexed) {
            /* We have the optimal connection. Let's stop looking. */
            chosen = check;
            break;
          }

          /* We can't use the connection if the pipe is full */
          if(max_pipe_len && (pipeLen >= max_pipe_len)) {
            infof(data, "Pipe is full, skip (%zu)\n", pipeLen);
            continue;
          }
#ifdef USE_NGHTTP2
          /* If multiplexed, make sure we don't go over concurrency limit */
          if(check->bits.multiplex) {
            /* Multiplexed connections can only be HTTP/2 for now */
            struct http_conn *httpc = &check->proto.httpc;
            if(pipeLen >= httpc->settings.max_concurrent_streams) {
            if(multiplexed >= httpc->settings.max_concurrent_streams) {
              infof(data, "MAX_CONCURRENT_STREAMS reached, skip (%zu)\n",
                    pipeLen);
                    multiplexed);
              continue;
            }
          }
#endif
          /* We can't use the connection if the pipe is penalized */
          if(Curl_pipeline_penalized(data, check)) {
            infof(data, "Penalized, skip\n");
            continue;
          }

          if(max_pipe_len) {
            if(pipeLen < best_pipe_len) {
              /* This connection has a shorter pipe so far. We'll pick this
                 and continue searching */
              chosen = check;
              best_pipe_len = pipeLen;
              continue;
            }
          }
          else {
            /* When not pipelining (== multiplexed), we have a match here! */
            chosen = check;
            infof(data, "Multiplexed connection found!\n");
            break;
          /* When not multiplexed, we have a match here! */
          chosen = check;
          infof(data, "Multiplexed connection found!\n");
          break;
          }
        }
        else {
          /* We have found a connection. Let's stop searching. */
          chosen = check;
          break;
        }
      }
1870
1871
1872
1873
1874
1875
1876
1877

1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910

1911
1912
1913

1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941


1942
1943
1944
1945
1946
1947
1948
1949
1740
1741
1742
1743
1744
1745
1746

1747









1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767

1768
1769
1770
1771
1772
1773

1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787



1788
1789










1790
1791

1792
1793
1794
1795
1796
1797
1798







-
+
-
-
-
-
-
-
-
-
-




















-



+


-
+













-
-
-


-
-
-
-
-
-
-
-
-
-
+
+
-








  conn->data = data; /* Setup the association between this connection
                        and the Curl_easy */

  conn->http_proxy.proxytype = data->set.proxytype;
  conn->socks_proxy.proxytype = CURLPROXY_SOCKS4;

#ifdef CURL_DISABLE_PROXY
#if !defined(CURL_DISABLE_PROXY)

  conn->bits.proxy = FALSE;
  conn->bits.httpproxy = FALSE;
  conn->bits.socksproxy = FALSE;
  conn->bits.proxy_user_passwd = FALSE;
  conn->bits.tunnel_proxy = FALSE;

#else /* CURL_DISABLE_PROXY */

  /* note that these two proxy bits are now just on what looks to be
     requested, they may be altered down the road */
  conn->bits.proxy = (data->set.str[STRING_PROXY] &&
                      *data->set.str[STRING_PROXY]) ? TRUE : FALSE;
  conn->bits.httpproxy = (conn->bits.proxy &&
                          (conn->http_proxy.proxytype == CURLPROXY_HTTP ||
                           conn->http_proxy.proxytype == CURLPROXY_HTTP_1_0 ||
                           conn->http_proxy.proxytype == CURLPROXY_HTTPS)) ?
                           TRUE : FALSE;
  conn->bits.socksproxy = (conn->bits.proxy &&
                           !conn->bits.httpproxy) ? TRUE : FALSE;

  if(data->set.str[STRING_PRE_PROXY] && *data->set.str[STRING_PRE_PROXY]) {
    conn->bits.proxy = TRUE;
    conn->bits.socksproxy = TRUE;
  }

  conn->bits.proxy_user_passwd =
    (data->set.str[STRING_PROXYUSERNAME]) ? TRUE : FALSE;
  conn->bits.tunnel_proxy = data->set.tunnel_thru_httpproxy;

#endif /* CURL_DISABLE_PROXY */

  conn->bits.user_passwd = (data->set.str[STRING_USERNAME]) ? TRUE : FALSE;
#ifndef CURL_DISABLE_FTP
  conn->bits.ftp_use_epsv = data->set.ftp_use_epsv;
  conn->bits.ftp_use_eprt = data->set.ftp_use_eprt;

#endif
  conn->ssl_config.verifystatus = data->set.ssl.primary.verifystatus;
  conn->ssl_config.verifypeer = data->set.ssl.primary.verifypeer;
  conn->ssl_config.verifyhost = data->set.ssl.primary.verifyhost;
  conn->proxy_ssl_config.verifystatus =
    data->set.proxy_ssl.primary.verifystatus;
  conn->proxy_ssl_config.verifypeer = data->set.proxy_ssl.primary.verifypeer;
  conn->proxy_ssl_config.verifyhost = data->set.proxy_ssl.primary.verifyhost;
  conn->ip_version = data->set.ipver;
  conn->bits.connect_only = data->set.connect_only;

#if !defined(CURL_DISABLE_HTTP) && defined(USE_NTLM) && \
    defined(NTLM_WB_ENABLED)
  conn->ntlm_auth_hlpr_socket = CURL_SOCKET_BAD;
  conn->ntlm_auth_hlpr_pid = 0;
  conn->challenge_header = NULL;
  conn->response_header = NULL;
#endif

  if(Curl_pipeline_wanted(data->multi, CURLPIPE_HTTP1) &&
     !conn->master_buffer) {
    /* Allocate master_buffer to be used for HTTP/1 pipelining */
    conn->master_buffer = calloc(MASTERBUF_SIZE, sizeof(char));
    if(!conn->master_buffer)
      goto error;
  }

  /* Initialize the pipeline lists */
  Curl_llist_init(&conn->send_pipe, (curl_llist_dtor) llist_dtor);
  /* Initialize the easy handle list */
  Curl_llist_init(&conn->easyq, (curl_llist_dtor) llist_dtor);
  Curl_llist_init(&conn->recv_pipe, (curl_llist_dtor) llist_dtor);

#ifdef HAVE_GSSAPI
  conn->data_prot = PROT_CLEAR;
#endif

  /* Store the local bind parameters that will be used for this connection */
  if(data->set.str[STRING_DEVICE]) {
1958
1959
1960
1961
1962
1963
1964
1965

1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1807
1808
1809
1810
1811
1812
1813

1814



1815
1816
1817
1818
1819
1820
1821







-
+
-
-
-







     it may live on without (this specific) Curl_easy */
  conn->fclosesocket = data->set.fclosesocket;
  conn->closesocket_client = data->set.closesocket_client;

  return conn;
  error:

  Curl_llist_destroy(&conn->send_pipe, NULL);
  Curl_llist_destroy(&conn->easyq, NULL);
  Curl_llist_destroy(&conn->recv_pipe, NULL);

  free(conn->master_buffer);
  free(conn->localdev);
#ifdef USE_SSL
  free(conn->ssl_extra);
#endif
  free(conn);
  return NULL;
}
2048
2049
2050
2051
2052
2053
2054
2055

2056
2057
2058
2059
2060
2061
2062
1894
1895
1896
1897
1898
1899
1900

1901
1902
1903
1904
1905
1906
1907
1908







-
+







  CURLUcode uc;
  char *hostname;

  up_free(data); /* cleanup previous leftovers first */

  /* parse the URL */
  if(data->set.uh) {
    uh = data->state.uh = data->set.uh;
    uh = data->state.uh = curl_url_dup(data->set.uh);
  }
  else {
    uh = data->state.uh = curl_url();
  }

  if(!uh)
    return CURLE_OUT_OF_MEMORY;
2152
2153
2154
2155
2156
2157
2158
2159

2160
2161



2162
2163
2164






2165
2166
2167
2168
2169
2170
2171
2172
2173


2174
2175

2176
2177
2178

2179
2180
2181
2182
2183
2184
2185
2186
2187
2188
2189
2190
2191
2192
2193
2194
2195




2196
2197
2198
2199
2200

2201
2202
2203
2204

2205
2206
2207
2208


2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
1998
1999
2000
2001
2002
2003
2004

2005
2006

2007
2008
2009
2010


2011
2012
2013
2014
2015
2016
2017
2018







2019
2020


2021

2022
2023
2024
2025
2026



2027











2028
2029
2030
2031





2032


2033

2034



2035
2036
2037
2038




2039
2040
2041
2042
2043
2044
2045







-
+

-
+
+
+

-
-
+
+
+
+
+
+


-
-
-
-
-
-
-
+
+
-
-
+
-


+


-
-
-

-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
-
-
-
-
-
+
-
-

-
+
-
-
-

+
+

-
-
-
-








  hostname = data->state.up.hostname;
  if(!hostname)
    /* this is for file:// transfers, get a dummy made */
    hostname = (char *)"";

  if(hostname[0] == '[') {
    /* This looks like an IPv6 address literal.  See if there is an address
    /* This looks like an IPv6 address literal. See if there is an address
       scope. */
    char *percent = strchr(++hostname, '%');
    char *zoneid;
    size_t hlen;
    uc = curl_url_get(uh, CURLUPART_ZONEID, &zoneid, 0);
    conn->bits.ipv6_ip = TRUE;
    if(percent) {
      unsigned int identifier_offset = 3;

    /* cut off the brackets! */
    hostname++;
    hlen = strlen(hostname);
    hostname[hlen - 1] = 0;
    if(!uc && zoneid) {
      char *endp;
      unsigned long scope;
      if(strncmp("%25", percent, 3) != 0) {
        infof(data,
              "Please URL encode %% as %%25, see RFC 6874.\n");
        identifier_offset = 1;
      }
      scope = strtoul(percent + identifier_offset, &endp, 10);
      if(*endp == ']') {
      scope = strtoul(zoneid, &endp, 10);
      if(!*endp && (scope < UINT_MAX)) {
        /* The address scope was well formed.  Knock it out of the
           hostname. */
        /* A plain number, use it direcly as a scope id. */
        memmove(percent, endp, strlen(endp) + 1);
        conn->scope_id = (unsigned int)scope;
      }
#ifdef HAVE_IF_NAMETOINDEX
      else {
        /* Zone identifier is not numeric */
#if defined(HAVE_NET_IF_H) && defined(IFNAMSIZ) && defined(HAVE_IF_NAMETOINDEX)
        char ifname[IFNAMSIZ + 2];
        char *square_bracket;
        unsigned int scopeidx = 0;
        strncpy(ifname, percent + identifier_offset, IFNAMSIZ + 2);
        /* Ensure nullbyte termination */
        ifname[IFNAMSIZ + 1] = '\0';
        square_bracket = strchr(ifname, ']');
        if(square_bracket) {
          /* Remove ']' */
          *square_bracket = '\0';
          scopeidx = if_nametoindex(ifname);
          if(scopeidx == 0) {
            infof(data, "Invalid network interface: %s; %s\n", ifname,
                  strerror(errno));
        scopeidx = if_nametoindex(zoneid);
        if(!scopeidx)
          infof(data, "Invalid zoneid id: %s; %s\n", zoneid,
                strerror(errno));
          }
        }
        if(scopeidx > 0) {
          char *p = percent + identifier_offset + strlen(ifname);

        else
          /* Remove zone identifier from hostname */
          memmove(percent, p, strlen(p) + 1);
          conn->scope_id = scopeidx;
        }

        else
#endif /* HAVE_NET_IF_H && IFNAMSIZ */
          infof(data, "Invalid IPv6 address format\n");
      }
#endif /* HAVE_IF_NAMETOINDEX */
      free(zoneid);
    }
    percent = strchr(hostname, ']');
    if(percent)
      /* terminate IPv6 numerical at end bracket */
      *percent = 0;
  }

  /* make sure the connect struct gets its own copy of the host name */
  conn->host.rawalloc = strdup(hostname);
  if(!conn->host.rawalloc)
    return CURLE_OUT_OF_MEMORY;
  conn->host.name = conn->host.rawalloc;
2469
2470
2471
2472
2473
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485

2486





2487
2488
2489










2490
2491
2492


2493
2494
2495
2496

2497
2498

2499
2500

2501
2502

2503

2504

2505
2506

2507
2508
2509
2510
2511


2512
2513
2514

2515




2516
2517
2518
2519
2520
2521
2522
2523


2524
2525

2526
2527
2528
2529







2530
2531
2532

2533
2534
2535
2536

2537
2538
2539

2540
2541

2542
2543
2544


2545
2546
2547


2548
2549
2550
2551
2552
2553
2554
2555
2556
2557
2558
2559
2560

2561
2562

2563
2564
2565

2566
2567
2568
2569
2570
2571
2572



2573
2574

2575
2576

2577
2578
2579
2580
2581
2582
2583
2584
2585
2586
2587
2588
2589
2590

2591
2592
2593


2594
2595

2596
2597
2598
2599


2600
2601
2602
2603


2604
2605
2606
2607
2608
2609
2610
2611
2612
2613
2614
2615
2616
2617
2618
2619
2620
2621
2622
2623
2624
2625
2626
2627
2628
2629
2630
2631
2632
2633
2634
2635
2636
2637
2638
2639
2640
2641
2642
2643
2644
2645
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657





2658
2659
2660
2661
2662
2663
2664















2665
2666
2667
2668



2669
2670
2671


2672
2673
2674
2675
2676
2677
2678
2294
2295
2296
2297
2298
2299
2300





2301

2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312


2313
2314
2315
2316
2317
2318
2319
2320
2321
2322



2323
2324




2325
2326

2327
2328

2329
2330

2331
2332
2333

2334
2335

2336
2337
2338
2339
2340

2341
2342
2343
2344

2345

2346
2347
2348
2349
2350
2351
2352
2353
2354
2355
2356

2357
2358
2359
2360
2361




2362
2363
2364
2365
2366
2367
2368
2369
2370

2371




2372



2373


2374



2375
2376



2377
2378













2379


2380



2381







2382
2383
2384


2385


2386














2387



2388
2389


2390




2391
2392




2393
2394






2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405





































2406
2407
2408
2409
2410
2411






2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424
2425
2426




2427
2428
2429



2430
2431
2432
2433
2434
2435
2436
2437
2438







-
-
-
-
-

-



+

+
+
+
+
+

-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
+

-
+

-
+

-
+

+
-
+

-
+




-
+
+


-
+
-
+
+
+
+







-
+
+


+
-
-
-
-
+
+
+
+
+
+
+


-
+
-
-
-
-
+
-
-
-
+
-
-
+
-
-
-
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
+
-
-
-
+
-
-
-
-
-
-
-
+
+
+
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
+
+
-
-
+
-
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-











-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+

-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
+
+







 * host name, so that we can re-use an existing connection
 * that may exist registered to the same proxy host.
 */
static CURLcode parse_proxy(struct Curl_easy *data,
                            struct connectdata *conn, char *proxy,
                            curl_proxytype proxytype)
{
  char *prox_portno;
  char *endofprot;

  /* We use 'proxyptr' to point to the proxy name from now on... */
  char *proxyptr;
  char *portptr;
  char *atsign;
  long port = -1;
  char *proxyuser = NULL;
  char *proxypasswd = NULL;
  char *host;
  bool sockstype;
  CURLUcode uc;
  struct proxy_info *proxyinfo;
  CURLU *uhp = curl_url();
  CURLcode result = CURLE_OK;
  char *scheme = NULL;

  /* We do the proxy host string parsing here. We want the host name and the
   * port name. Accept a protocol:// prefix
  /* When parsing the proxy, allowing non-supported schemes since we have
     these made up ones for proxies. Guess scheme for URLs without it. */
  uc = curl_url_set(uhp, CURLUPART_URL, proxy,
                    CURLU_NON_SUPPORT_SCHEME|CURLU_GUESS_SCHEME);
  if(!uc) {
    /* parsed okay as a URL */
    uc = curl_url_get(uhp, CURLUPART_SCHEME, &scheme, 0);
    if(uc) {
      result = CURLE_OUT_OF_MEMORY;
      goto error;
   */

  /* Parse the protocol part if present */
    }

  endofprot = strstr(proxy, "://");
  if(endofprot) {
    proxyptr = endofprot + 3;
    if(checkprefix("https", proxy))
    if(strcasecompare("https", scheme))
      proxytype = CURLPROXY_HTTPS;
    else if(checkprefix("socks5h", proxy))
    else if(strcasecompare("socks5h", scheme))
      proxytype = CURLPROXY_SOCKS5_HOSTNAME;
    else if(checkprefix("socks5", proxy))
    else if(strcasecompare("socks5", scheme))
      proxytype = CURLPROXY_SOCKS5;
    else if(checkprefix("socks4a", proxy))
    else if(strcasecompare("socks4a", scheme))
      proxytype = CURLPROXY_SOCKS4A;
    else if(strcasecompare("socks4", scheme) ||
    else if(checkprefix("socks4", proxy) || checkprefix("socks", proxy))
            strcasecompare("socks", scheme))
      proxytype = CURLPROXY_SOCKS4;
    else if(checkprefix("http:", proxy))
    else if(strcasecompare("http", scheme))
      ; /* leave it as HTTP or HTTP/1.0 */
    else {
      /* Any other xxx:// reject! */
      failf(data, "Unsupported proxy scheme for \'%s\'", proxy);
      return CURLE_COULDNT_CONNECT;
      result = CURLE_COULDNT_CONNECT;
      goto error;
    }
  }
  else
  else {
    proxyptr = proxy; /* No xxx:// head: It's a HTTP proxy */
    failf(data, "Unsupported proxy syntax in \'%s\'", proxy);
    result = CURLE_COULDNT_RESOLVE_PROXY;
    goto error;
  }

#ifdef USE_SSL
  if(!(Curl_ssl->supports & SSLSUPP_HTTPS_PROXY))
#endif
    if(proxytype == CURLPROXY_HTTPS) {
      failf(data, "Unsupported proxy \'%s\', libcurl is built without the "
                  "HTTPS-proxy support.", proxy);
      return CURLE_NOT_BUILT_IN;
      result = CURLE_NOT_BUILT_IN;
      goto error;
    }

  sockstype =
  sockstype = proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
              proxytype == CURLPROXY_SOCKS5 ||
              proxytype == CURLPROXY_SOCKS4A ||
              proxytype == CURLPROXY_SOCKS4;
    proxytype == CURLPROXY_SOCKS5_HOSTNAME ||
    proxytype == CURLPROXY_SOCKS5 ||
    proxytype == CURLPROXY_SOCKS4A ||
    proxytype == CURLPROXY_SOCKS4;

  proxyinfo = sockstype ? &conn->socks_proxy : &conn->http_proxy;
  proxyinfo->proxytype = proxytype;

  /* Is there a username and password given in this proxy url? */
  atsign = strchr(proxyptr, '@');
  curl_url_get(uhp, CURLUPART_USER, &proxyuser, CURLU_URLDECODE);
  if(atsign) {
    CURLcode result =
      Curl_parse_login_details(proxyptr, atsign - proxyptr,
                               &proxyuser, &proxypasswd, NULL);
  curl_url_get(uhp, CURLUPART_PASSWORD, &proxypasswd, CURLU_URLDECODE);
    if(result)
      return result;
    proxyptr = atsign + 1;
  if(proxyuser || proxypasswd) {
  }

    Curl_safefree(proxyinfo->user);
  /* start scanning for port number at this point */
  portptr = proxyptr;

    proxyinfo->user = proxyuser;
    Curl_safefree(proxyinfo->passwd);
  /* detect and extract RFC6874-style IPv6-addresses */
  if(*proxyptr == '[') {
    char *ptr = ++proxyptr; /* advance beyond the initial bracket */
    if(!proxypasswd) {
      proxypasswd = strdup("");
    while(*ptr && (ISXDIGIT(*ptr) || (*ptr == ':') || (*ptr == '.')))
      ptr++;
    if(*ptr == '%') {
      /* There might be a zone identifier */
      if(strncmp("%25", ptr, 3))
        infof(data, "Please URL encode %% as %%25, see RFC 6874.\n");
      ptr++;
      /* Allow unreserved characters as defined in RFC 3986 */
      while(*ptr && (ISALPHA(*ptr) || ISXDIGIT(*ptr) || (*ptr == '-') ||
                     (*ptr == '.') || (*ptr == '_') || (*ptr == '~')))
        ptr++;
    }
    if(*ptr == ']')
      if(!proxypasswd) {
      /* yeps, it ended nicely with a bracket as well */
      *ptr++ = 0;
        result = CURLE_OUT_OF_MEMORY;
    else
      infof(data, "Invalid IPv6 address format\n");
    portptr = ptr;
        goto error;
    /* Note that if this didn't end with a bracket, we still advanced the
     * proxyptr first, but I can't see anything wrong with that as no host
     * name nor a numeric can legally start with a bracket.
     */
  }

  /* Get port number off proxy.server.com:1080 */
      }
    }
    proxyinfo->passwd = proxypasswd;
  prox_portno = strchr(portptr, ':');
  if(prox_portno) {
    conn->bits.proxy_user_passwd = TRUE; /* enable it */
    char *endp = NULL;

  }
    *prox_portno = 0x0; /* cut off number from host name */
    prox_portno ++;
    /* now set the local port number */
    port = strtol(prox_portno, &endp, 10);
    if((endp && *endp && (*endp != '/') && (*endp != ' ')) ||
       (port < 0) || (port > 65535)) {
      /* meant to detect for example invalid IPv6 numerical addresses without
         brackets: "2a00:fac0:a000::7:13". Accept a trailing slash only
         because we then allow "URL style" with the number followed by a
         slash, used in curl test cases already. Space is also an acceptable
         terminating symbol. */
      infof(data, "No valid port number in proxy string (%s)\n",
            prox_portno);
    }

    else
      conn->port = port;
  }
  curl_url_get(uhp, CURLUPART_PORT, &portptr, 0);

  else {
    if(proxyptr[0]=='/') {
  if(portptr) {
      /* If the first character in the proxy string is a slash, fail
         immediately. The following code will otherwise clear the string which
         will lead to code running as if no proxy was set! */
      Curl_safefree(proxyuser);
    port = strtol(portptr, NULL, 10);
    free(portptr);
      Curl_safefree(proxypasswd);
      return CURLE_COULDNT_RESOLVE_PROXY;
    }

  }
  else {
    /* without a port number after the host name, some people seem to use
       a slash so we strip everything from the first slash */
    atsign = strchr(proxyptr, '/');
    if(atsign)
      *atsign = '\0'; /* cut off path part from host name */

    if(data->set.proxyport)
      /* None given in the proxy string, then get the default one if it is
         given */
      port = data->set.proxyport;
    else {
      if(proxytype == CURLPROXY_HTTPS)
        port = CURL_DEFAULT_HTTPS_PROXY_PORT;
      else
        port = CURL_DEFAULT_PROXY_PORT;
    }
  }

  if(*proxyptr) {
    struct proxy_info *proxyinfo =
      sockstype ? &conn->socks_proxy : &conn->http_proxy;
    proxyinfo->proxytype = proxytype;

    if(proxyuser) {
      /* found user and password, rip them out.  note that we are unescaping
         them, as there is otherwise no way to have a username or password
         with reserved characters like ':' in them. */
      Curl_safefree(proxyinfo->user);
      proxyinfo->user = curl_easy_unescape(data, proxyuser, 0, NULL);
      Curl_safefree(proxyuser);

      if(!proxyinfo->user) {
        Curl_safefree(proxypasswd);
        return CURLE_OUT_OF_MEMORY;
      }

      Curl_safefree(proxyinfo->passwd);
      if(proxypasswd && strlen(proxypasswd) < MAX_CURL_PASSWORD_LENGTH)
        proxyinfo->passwd = curl_easy_unescape(data, proxypasswd, 0, NULL);
      else
        proxyinfo->passwd = strdup("");
      Curl_safefree(proxypasswd);

      if(!proxyinfo->passwd)
        return CURLE_OUT_OF_MEMORY;

      conn->bits.proxy_user_passwd = TRUE; /* enable it */
    }

    if(port >= 0) {
      proxyinfo->port = port;
      if(conn->port < 0 || sockstype || !conn->socks_proxy.host.rawalloc)
        conn->port = port;
    }
  if(port >= 0) {
    proxyinfo->port = port;
    if(conn->port < 0 || sockstype || !conn->socks_proxy.host.rawalloc)
      conn->port = port;
  }

    /* now, clone the cleaned proxy host name */
    Curl_safefree(proxyinfo->host.rawalloc);
    proxyinfo->host.rawalloc = strdup(proxyptr);
    proxyinfo->host.name = proxyinfo->host.rawalloc;

    if(!proxyinfo->host.rawalloc)
  /* now, clone the proxy host name */
  uc = curl_url_get(uhp, CURLUPART_HOST, &host, CURLU_URLDECODE);
  if(uc) {
    result = CURLE_OUT_OF_MEMORY;
    goto error;
  }
  Curl_safefree(proxyinfo->host.rawalloc);
  proxyinfo->host.rawalloc = host;
  if(host[0] == '[') {
    /* this is a numerical IPv6, strip off the brackets */
    size_t len = strlen(host);
    host[len-1] = 0; /* clear the trailing bracket */
    host++;
  }
  proxyinfo->host.name = host;
      return CURLE_OUT_OF_MEMORY;
  }

  Curl_safefree(proxyuser);

  error:
  free(scheme);
  Curl_safefree(proxypasswd);

  return CURLE_OK;
  curl_url_cleanup(uhp);
  return result;
}

/*
 * Extract the user and password from the authentication string
 */
static CURLcode parse_proxy_auth(struct Curl_easy *data,
                                 struct connectdata *conn)
3610
3611
3612
3613
3614
3615
3616
3617
3618

3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3370
3371
3372
3373
3374
3375
3376


3377



3378
3379
3380
3381
3382
3383
3384







-
-
+
-
-
-







  Curl_safefree(old_conn->passwd);
  Curl_safefree(old_conn->options);
  Curl_safefree(old_conn->http_proxy.user);
  Curl_safefree(old_conn->socks_proxy.user);
  Curl_safefree(old_conn->http_proxy.passwd);
  Curl_safefree(old_conn->socks_proxy.passwd);
  Curl_safefree(old_conn->localdev);

  Curl_llist_destroy(&old_conn->send_pipe, NULL);
  Curl_llist_destroy(&old_conn->easyq, NULL);
  Curl_llist_destroy(&old_conn->recv_pipe, NULL);

  Curl_safefree(old_conn->master_buffer);

#ifdef USE_UNIX_SOCKETS
  Curl_safefree(old_conn->unix_domain_socket);
#endif
}

/**
3929
3930
3931
3932
3933
3934
3935
3936
3937
3938
3939
3940
3941






3942
3943
3944
3945
3946
3947
3948
3685
3686
3687
3688
3689
3690
3691






3692
3693
3694
3695
3696
3697
3698
3699
3700
3701
3702
3703
3704







-
-
-
-
-
-
+
+
+
+
+
+







  if((data->set.reuse_fresh && !data->state.this_is_a_follow) ||
     data->set.connect_only)
    reuse = FALSE;
  else
    reuse = ConnectionExists(data, conn, &conn_temp, &force_reuse, &waitpipe);

  /* If we found a reusable connection that is now marked as in use, we may
     still want to open a new connection if we are pipelining. */
  if(reuse && !force_reuse && IsPipeliningPossible(data, conn_temp)) {
    size_t pipelen = conn_temp->send_pipe.size + conn_temp->recv_pipe.size;
    if(pipelen > 0) {
      infof(data, "Found connection %ld, with requests in the pipe (%zu)\n",
            conn_temp->connection_id, pipelen);
     still want to open a new connection if we are multiplexing. */
  if(reuse && !force_reuse && IsMultiplexingPossible(data, conn_temp)) {
    size_t multiplexed = CONN_INUSE(conn_temp);
    if(multiplexed > 0) {
      infof(data, "Found connection %ld, with %zu requests on it\n",
            conn_temp->connection_id, multiplexed);

      if(Curl_conncache_bundle_size(conn_temp) < max_host_connections &&
         Curl_conncache_size(data) < max_total_connections) {
        /* We want a new connection anyway */
        reuse = FALSE;

        infof(data, "We can reuse, but we want a new connection anyway\n");
3984
3985
3986
3987
3988
3989
3990
3991

3992
3993
3994
3995
3996
3997
3998
3740
3741
3742
3743
3744
3745
3746

3747
3748
3749
3750
3751
3752
3753
3754







-
+







      if(data->set.ssl_enable_alpn)
        conn->bits.tls_enable_alpn = TRUE;
      if(data->set.ssl_enable_npn)
        conn->bits.tls_enable_npn = TRUE;
    }

    if(waitpipe)
      /* There is a connection that *might* become usable for pipelining
      /* There is a connection that *might* become usable for multiplexing
         "soon", and we wait for that */
      connections_available = FALSE;
    else {
      /* this gets a lock on the conncache */
      struct connectbundle *bundle =
        Curl_conncache_find_bundle(conn, data->state.conn_cache);

4197
4198
4199
4200
4201
4202
4203
4204

4205
4206
4207
4208
4209
4210
4211
4212
4213
4214
4215
4216
4217
4218
4219
4220
4221
4222

4223
4224
4225
4226
4227
4228
4229
3953
3954
3955
3956
3957
3958
3959

3960
3961
3962
3963
3964
3965
3966
3967
3968
3969
3970
3971
3972
3973
3974
3975
3976
3977

3978
3979
3980
3981
3982
3983
3984
3985







-
+

















-
+







  data->req.maxdownload = -1;

  /* call the stuff that needs to be called */
  result = create_conn(data, &conn, asyncp);

  if(!result) {
    if(CONN_INUSE(conn))
      /* pipelining */
      /* multiplexed */
      *protocol_done = TRUE;
    else if(!*asyncp) {
      /* DNS resolution is done: that's either because this is a reused
         connection, in which case DNS was unnecessary, or because DNS
         really did finish already (synch resolver/fast async resolve) */
      result = Curl_setup_conn(conn, protocol_done);
    }
  }

  if(result == CURLE_NO_CONNECTION_AVAILABLE) {
    return result;
  }
  else if(result && conn) {
    /* We're not allowed to return failure with memory left allocated in the
       connectdata struct, free those here */
    Curl_disconnect(data, conn, TRUE);
  }
  else if(!data->conn)
  else if(!result && !data->conn)
    /* FILE: transfers already have the connection attached */
    Curl_attach_connnection(data, conn);

  return result;
}

/*
Changes to jni/curl/lib/url.h.
67
68
69
70
71
72
73
74
75
76
77
78
79

80
81
82
83
84
85
86
87
88
67
68
69
70
71
72
73






74


75
76
77
78
79
80
81







-
-
-
-
-
-
+
-
-







                          int numsocks);
int Curl_doing_getsock(struct connectdata *conn,
                       curl_socket_t *socks,
                       int numsocks);
CURLcode Curl_parse_login_details(const char *login, const size_t len,
                                  char **userptr, char **passwdptr,
                                  char **optionsptr);

int Curl_removeHandleFromPipeline(struct Curl_easy *handle,
                                  struct curl_llist *pipeline);
/* remove the specified connection from all (possible) pipelines and related
   queues */
void Curl_getoff_all_pipelines(struct Curl_easy *data,
void Curl_close_connections(struct Curl_easy *data);
                               struct connectdata *conn);

CURLcode Curl_upkeep(struct conncache *conn_cache, void *data);

const struct Curl_handler *Curl_builtin_scheme(const char *scheme);

#define CURL_DEFAULT_PROXY_PORT 1080 /* default proxy port unless specified */
#define CURL_DEFAULT_HTTPS_PROXY_PORT 443 /* default https proxy port unless
                                             specified */
Changes to jni/curl/lib/urlapi-int.h.
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
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









-
+














-
+
-
-
+











#ifndef HEADER_CURL_URLAPI_INT_H
#define HEADER_CURL_URLAPI_INT_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"
/* scheme is not URL encoded, the longest libcurl supported ones are 6
/* scheme is not URL encoded, the longest libcurl supported ones are... */
   letters */
#define MAX_SCHEME_LEN 8
#define MAX_SCHEME_LEN 40

bool Curl_is_absolute_url(const char *url, char *scheme, size_t buflen);
char *Curl_concat_url(const char *base, const char *relurl);
size_t Curl_strlen_url(const char *url, bool relative);
void Curl_strcpy_url(char *output, const char *url, bool relative);

#ifdef DEBUGBUILD
CURLUcode Curl_parse_port(struct Curl_URL *u, char *hostname);
#endif

#endif /* HEADER_CURL_URLAPI_INT_H */
Changes to jni/curl/lib/urlapi.c.
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
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







+


















+







/* Internal representation of CURLU. Point to URL-encoded strings. */
struct Curl_URL {
  char *scheme;
  char *user;
  char *password;
  char *options; /* IMAP only? */
  char *host;
  char *zoneid; /* for numerical IPv6 addresses */
  char *port;
  char *path;
  char *query;
  char *fragment;

  char *scratch; /* temporary scratch area */
  long portnum; /* the numerical version */
};

#define DEFAULT_SCHEME "https"

static void free_urlhandle(struct Curl_URL *u)
{
  free(u->scheme);
  free(u->user);
  free(u->password);
  free(u->options);
  free(u->host);
  free(u->zoneid);
  free(u->port);
  free(u->path);
  free(u->query);
  free(u->fragment);
  free(u->scratch);
}

500
501
502
503
504
505
506
507

508
509
510
511
512
513
514
502
503
504
505
506
507
508

509
510
511
512
513
514
515
516







-
+







   */
  if(1 == sscanf(hostname, "[%*45[0123456789abcdefABCDEF:.]%c%n",
                 &endbracket, &len)) {
    if(']' == endbracket)
      portptr = &hostname[len];
    else if('%' == endbracket) {
      int zonelen = len;
      if(1 == sscanf(hostname + zonelen, "25%*[^]]%c%n", &endbracket, &len)) {
      if(1 == sscanf(hostname + zonelen, "%*[^]]%c%n", &endbracket, &len)) {
        if(']' != endbracket)
          return CURLUE_MALFORMED_INPUT;
        portptr = &hostname[--zonelen + len + 1];
      }
      else
        return CURLUE_MALFORMED_INPUT;
    }
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
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







-
+




-



-
+






-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








+
+














-
+













+
+
+
+







      /* since we don't know which part is scanned, return a generic error
         code */
      return CURLUE_MALFORMED_INPUT;
  }
  return CURLUE_OK;
}

static CURLUcode hostname_check(char *hostname, unsigned int flags)
static CURLUcode hostname_check(struct Curl_URL *u, char *hostname)
{
  const char *l = NULL; /* accepted characters */
  size_t len;
  size_t hlen = strlen(hostname);
  (void)flags;

  if(hostname[0] == '[') {
    hostname++;
    l = "0123456789abcdefABCDEF::.%";
    l = "0123456789abcdefABCDEF::.";
    hlen -= 2;
  }

  if(l) {
    /* only valid letters are ok */
    len = strspn(hostname, l);
    if(hlen != len)
      /* hostname with bad content */
      return CURLUE_MALFORMED_INPUT;
    if(hlen != len) {
      if(hostname[len] == '%') {
        /* this could now be '%[zone id]' */
        char zoneid[16];
        int i = 0;
        char *h = &hostname[len + 1];
        /* pass '25' if present and is a url encoded percent sign */
        if(!strncmp(h, "25", 2) && h[2] && (h[2] != ']'))
          h += 2;
        while(*h && (*h != ']') && (i < 15))
          zoneid[i++] = *h++;
        if(!i || (']' != *h))
          return CURLUE_MALFORMED_INPUT;
        zoneid[i] = 0;
        u->zoneid = strdup(zoneid);
        if(!u->zoneid)
          return CURLUE_OUT_OF_MEMORY;
        hostname[len] = ']'; /* insert end bracket */
        hostname[len + 1] = 0; /* terminate the hostname */
      }
      else
        return CURLUE_MALFORMED_INPUT;
      /* hostname is fine */
    }
  }
  else {
    /* letters from the second string is not ok */
    len = strcspn(hostname, " ");
    if(hlen != len)
      /* hostname with bad content */
      return CURLUE_MALFORMED_INPUT;
  }
  if(!hostname[0])
    return CURLUE_NO_HOST;
  return CURLUE_OK;
}

#define HOSTNAME_END(x) (((x) == '/') || ((x) == '?') || ((x) == '#'))

static CURLUcode seturl(const char *url, CURLU *u, unsigned int flags)
{
  char *path;
  bool path_alloced = FALSE;
  char *hostname;
  char *query = NULL;
  char *fragment = NULL;
  CURLUcode result;
  bool url_has_scheme = FALSE;
  char schemebuf[MAX_SCHEME_LEN];
  char schemebuf[MAX_SCHEME_LEN + 1];
  char *schemep = NULL;
  size_t schemelen = 0;
  size_t urllen;
  const struct Curl_handler *h = NULL;

  if(!url)
    return CURLUE_MALFORMED_INPUT;

  /*************************************************************
   * Parse the URL.
   ************************************************************/
  /* allocate scratch area */
  urllen = strlen(url);
  if(urllen > CURL_MAX_INPUT_LENGTH)
    /* excessive input length */
    return CURLUE_MALFORMED_INPUT;

  path = u->scratch = malloc(urllen * 2 + 2);
  if(!path)
    return CURLUE_OUT_OF_MEMORY;

  hostname = &path[urllen + 1];
  hostname[0] = 0;

848
849
850
851
852
853
854
855

856
857
858
859
860
861
862
876
877
878
879
880
881
882

883
884
885
886
887
888
889
890







-
+







    if(result)
      return result;

    result = Curl_parse_port(u, hostname);
    if(result)
      return result;

    result = hostname_check(hostname, flags);
    result = hostname_check(u, hostname);
    if(result)
      return result;

    u->host = strdup(hostname);
    if(!u->host)
      return CURLUE_OUT_OF_MEMORY;
  }
966
967
968
969
970
971
972



973
974
975
976
977
978
979
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010







+
+
+







  case CURLUPART_OPTIONS:
    ptr = u->options;
    ifmissing = CURLUE_NO_OPTIONS;
    break;
  case CURLUPART_HOST:
    ptr = u->host;
    ifmissing = CURLUE_NO_HOST;
    break;
  case CURLUPART_ZONEID:
    ptr = u->zoneid;
    break;
  case CURLUPART_PORT:
    ptr = u->port;
    ifmissing = CURLUE_NO_PORT;
    urldecode = FALSE; /* never for port */
    if(!ptr && (flags & CURLU_DEFAULT_PORT) && u->scheme) {
      /* there's no stored port number, but asked to deliver
1013
1014
1015
1016
1017
1018
1019

1020
1021
1022
1023
1024
1025
1026
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058







+







    ifmissing = CURLUE_NO_FRAGMENT;
    break;
  case CURLUPART_URL: {
    char *url;
    char *scheme;
    char *options = u->options;
    char *port = u->port;
    char *allochost = NULL;
    if(u->scheme && strcasecompare("file", u->scheme)) {
      url = aprintf("file://%s%s%s",
                    u->path,
                    u->fragment? "#": "",
                    u->fragment? u->fragment : "");
    }
    else if(!u->host)
1050
1051
1052
1053
1054
1055
1056












1057
1058
1059
1060
1061
1062
1063
1064
1065
1066

1067
1068
1069
1070
1071
1072
1073
1074

1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109

1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126







+
+
+
+
+
+
+
+
+
+
+
+









-
+








+







          if(h && (h->defport == u->portnum) &&
             (flags & CURLU_NO_DEFAULT_PORT))
            port = NULL;
        }
      }
      if(h && !(h->flags & PROTOPT_URLOPTIONS))
        options = NULL;

      if((u->host[0] == '[') && u->zoneid) {
        /* make it '[ host %25 zoneid ]' */
        size_t hostlen = strlen(u->host);
        size_t alen = hostlen + 3 + strlen(u->zoneid) + 1;
        allochost = malloc(alen);
        if(!allochost)
          return CURLUE_OUT_OF_MEMORY;
        memcpy(allochost, u->host, hostlen - 1);
        msnprintf(&allochost[hostlen - 1], alen - hostlen + 1,
                  "%%25%s]", u->zoneid);
      }

      url = aprintf("%s://%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
                    scheme,
                    u->user ? u->user : "",
                    u->password ? ":": "",
                    u->password ? u->password : "",
                    options ? ";" : "",
                    options ? options : "",
                    (u->user || u->password || options) ? "@": "",
                    u->host,
                    allochost ? allochost : u->host,
                    port ? ":": "",
                    port ? port : "",
                    (u->path && (u->path[0] != '/')) ? "/": "",
                    u->path ? u->path : "/",
                    (u->query && u->query[0]) ? "?": "",
                    (u->query && u->query[0]) ? u->query : "",
                    u->fragment? "#": "",
                    u->fragment? u->fragment : "");
      free(allochost);
    }
    if(!url)
      return CURLUE_OUT_OF_MEMORY;
    *part = url;
    return CURLUE_OK;
  }
  default:
1140
1141
1142
1143
1144
1145
1146



1147

1148
1149
1150
1151
1152
1153
1154
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203







+
+
+

+







      break;
    case CURLUPART_OPTIONS:
      storep = &u->options;
      break;
    case CURLUPART_HOST:
      storep = &u->host;
      break;
    case CURLUPART_ZONEID:
      storep = &u->zoneid;
      break;
    case CURLUPART_PORT:
      u->portnum = 0;
      storep = &u->port;
      break;
    case CURLUPART_PATH:
      storep = &u->path;
      break;
    case CURLUPART_QUERY:
      storep = &u->query;
1164
1165
1166
1167
1168
1169
1170



1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188


1189



1190


1191
1192

1193
1194



1195

1196

1197
1198
1199
1200
1201
1202
1203
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250

1251
1252
1253
1254
1255
1256
1257
1258

1259
1260
1261
1262
1263
1264
1265
1266







+
+
+


















+
+

+
+
+

+
+

-
+


+
+
+

+
-
+







      *storep = NULL;
    }
    return CURLUE_OK;
  }

  switch(what) {
  case CURLUPART_SCHEME:
    if(strlen(part) > MAX_SCHEME_LEN)
      /* too long */
      return CURLUE_MALFORMED_INPUT;
    if(!(flags & CURLU_NON_SUPPORT_SCHEME) &&
       /* verify that it is a fine scheme */
       !Curl_builtin_scheme(part))
      return CURLUE_UNSUPPORTED_SCHEME;
    storep = &u->scheme;
    urlencode = FALSE; /* never */
    break;
  case CURLUPART_USER:
    storep = &u->user;
    break;
  case CURLUPART_PASSWORD:
    storep = &u->password;
    break;
  case CURLUPART_OPTIONS:
    storep = &u->options;
    break;
  case CURLUPART_HOST:
    storep = &u->host;
    free(u->zoneid);
    u->zoneid = NULL;
    break;
  case CURLUPART_ZONEID:
    storep = &u->zoneid;
    break;
  case CURLUPART_PORT:
  {
    char *endp;
    urlencode = FALSE; /* never */
    port = strtol(part, NULL, 10);  /* Port number must be decimal */
    port = strtol(part, &endp, 10);  /* Port number must be decimal */
    if((port <= 0) || (port > 0xffff))
      return CURLUE_BAD_PORT_NUMBER;
    if(*endp)
      /* weirdly provided number, not good! */
      return CURLUE_MALFORMED_INPUT;
    storep = &u->port;
  }
    break;
  break;
  case CURLUPART_PATH:
    urlskipslash = TRUE;
    storep = &u->path;
    break;
  case CURLUPART_QUERY:
    plusencode = urlencode;
    appendquery = (flags & CURLU_APPENDQUERY)?1:0;
1215
1216
1217
1218
1219
1220
1221
1222

1223
1224
1225
1226
1227
1228
1229
1278
1279
1280
1281
1282
1283
1284

1285
1286
1287
1288
1289
1290
1291
1292







-
+







     * replace it.
     */
    CURLUcode result;
    char *oldurl;
    char *redired_url;
    CURLU *handle2;

    if(Curl_is_absolute_url(part, NULL, MAX_SCHEME_LEN)) {
    if(Curl_is_absolute_url(part, NULL, MAX_SCHEME_LEN + 1)) {
      handle2 = curl_url();
      if(!handle2)
        return CURLUE_OUT_OF_MEMORY;
      result = parseurl(part, handle2, flags);
      if(!result)
        mv_urlhandle(handle2, u);
      else
1268
1269
1270
1271
1272
1273
1274




1275
1276

1277
1278
1279
1280
1281
1282
1283
1284

1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295

1296
1297
1298
1299
1300
1301
1302
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342

1343
1344
1345
1346
1347
1348
1349
1350

1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361

1362
1363
1364
1365
1366
1367
1368
1369







+
+
+
+

-
+







-
+










-
+







  default:
    return CURLUE_UNKNOWN_PART;
  }
  if(storep) {
    const char *newp = part;
    size_t nalloc = strlen(part);

    if(nalloc > CURL_MAX_INPUT_LENGTH)
      /* excessive input length */
      return CURLUE_MALFORMED_INPUT;

    if(urlencode) {
      const char *i;
      const unsigned char *i;
      char *o;
      bool free_part = FALSE;
      char *enc = malloc(nalloc * 3 + 1); /* for worst case! */
      if(!enc)
        return CURLUE_OUT_OF_MEMORY;
      if(plusencode) {
        /* space to plus */
        i = part;
        i = (const unsigned char *)part;
        for(o = enc; *i; ++o, ++i)
          *o = (*i == ' ') ? '+' : *i;
        *o = 0; /* zero terminate */
        part = strdup(enc);
        if(!part) {
          free(enc);
          return CURLUE_OUT_OF_MEMORY;
        }
        free_part = TRUE;
      }
      for(i = part, o = enc; *i; i++) {
      for(i = (const unsigned char *)part, o = enc; *i; i++) {
        if(Curl_isunreserved(*i) ||
           ((*i == '/') && urlskipslash) ||
           ((*i == '=') && equalsencode) ||
           ((*i == '+') && plusencode)) {
          if((*i == '=') && equalsencode)
            /* only skip the first equals sign */
            equalsencode = FALSE;
1350
1351
1352
1353
1354
1355
1356







1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440







+
+
+
+
+
+
+










        strcpy(&p[querylen + addamperand], newp); /* new suffix */
        free((char *)newp);
        free(*storep);
        *storep = p;
        return CURLUE_OK;
      }
    }

    if(what == CURLUPART_HOST) {
      if(hostname_check(u, (char *)newp)) {
        free((char *)newp);
        return CURLUE_MALFORMED_INPUT;
      }
    }

    free(*storep);
    *storep = (char *)newp;
  }
  /* set after the string, to make it not assigned if the allocation above
     fails */
  if(port)
    u->portnum = port;
  return CURLUE_OK;
}
Changes to jni/curl/lib/urldata.h.
75
76
77
78
79
80
81




82
83
84
85
86
87
88
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92







+
+
+
+







#define MAX_IPADR_LEN sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")

/* Default FTP/IMAP etc response timeout in milliseconds.
   Symbian OS panics when given a timeout much greater than 1/2 hour.
*/
#define RESP_TIMEOUT (120*1000)

/* Max string intput length is a precaution against abuse and to detect junk
   input easier and better. */
#define CURL_MAX_INPUT_LENGTH 8000000

#include "cookie.h"
#include "psl.h"
#include "formdata.h"

#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
144
145
146
147
148
149
150




151
152
153
154
155
156
157







-
-
-
-







#endif

#ifdef HAVE_LIBSSH2_H
#include <libssh2.h>
#include <libssh2_sftp.h>
#endif /* HAVE_LIBSSH2_H */


/* The "master buffer" is for HTTP pipelining */
#define MASTERBUF_SIZE 16384

/* Initial size of the buffer to store headers in, it'll be enlarged in case
   of need. */
#define HEADERSIZE 256

#define CURLEASY_MAGIC_NUMBER 0xc0dedbadU
#define GOOD_EASY_HANDLE(x) \
  ((x) && ((x)->magic == CURLEASY_MAGIC_NUMBER))
299
300
301
302
303
304
305








306
307
308
309
310
311
312
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320







+
+
+
+
+
+
+
+







  NTLMSTATE_NONE,
  NTLMSTATE_TYPE1,
  NTLMSTATE_TYPE2,
  NTLMSTATE_TYPE3,
  NTLMSTATE_LAST
} curlntlm;

typedef enum {
  GSS_AUTHNONE,
  GSS_AUTHRECV,
  GSS_AUTHSENT,
  GSS_AUTHDONE,
  GSS_AUTHSUCC
} curlnegotiate;

#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
#include <iconv.h>
#endif

/* Struct used for GSSAPI (Kerberos V5) authentication */
#if defined(USE_KERBEROS5)
struct kerberos5data {
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
332
333
334
335
336
337
338

339
340
341
342
343
344
345







-







#endif
};
#endif

/* Struct used for NTLM challenge-response authentication */
#if defined(USE_NTLM)
struct ntlmdata {
  curlntlm state;
#ifdef USE_WINDOWS_SSPI
/* The sslContext is used for the Schannel bindings. The
 * api is available on the Windows 7 SDK and later.
 */
#ifdef SECPKG_ATTR_ENDPOINT_BINDINGS
  CtxtHandle *sslContext;
#endif
350
351
352
353
354
355
356

357
358
359
360
361
362
363
364
365
366
367
368
369
370
357
358
359
360
361
362
363
364
365
366





367
368
369
370
371
372
373







+


-
-
-
-
-







  unsigned char nonce[8];
  void *target_info; /* TargetInfo received in the ntlm type-2 message */
  unsigned int target_info_len;
#endif
};
#endif

/* Struct used for Negotiate (SPNEGO) authentication */
#ifdef USE_SPNEGO
struct negotiatedata {
  /* When doing Negotiate (SPNEGO) auth, we first need to send a token
     and then validate the received one. */
  enum {
    GSS_AUTHNONE, GSS_AUTHRECV, GSS_AUTHSENT, GSS_AUTHDONE, GSS_AUTHSUCC
  } state;
#ifdef HAVE_GSSAPI
  OM_uint32 status;
  gss_ctx_id_t context;
  gss_name_t spn;
  gss_buffer_desc output_token;
#else
#ifdef USE_WINDOWS_SSPI
427
428
429
430
431
432
433

434
435
436
437
438
439
440

441
442
443
444
445
446
447
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452







+







+







                          that we are creating a request with an auth header,
                          but it is not the final request in the auth
                          negotiation. */
  bit rewindaftersend:1;/* TRUE when the sending couldn't be stopped even
                           though it will be discarded. When the whole send
                           operation is done, we must call the data rewind
                           callback. */
#ifndef CURL_DISABLE_FTP
  bit ftp_use_epsv:1;  /* As set with CURLOPT_FTP_USE_EPSV, but if we find out
                          EPSV doesn't work we disable it for the forthcoming
                          requests */
  bit ftp_use_eprt:1;  /* As set with CURLOPT_FTP_USE_EPRT, but if we find out
                          EPRT doesn't work we disable it for the forthcoming
                          requests */
  bit ftp_use_data_ssl:1; /* Enabled SSL for the data connection */
#endif
  bit netrc:1;         /* name+password provided by netrc */
  bit userpwd_in_url:1; /* name+password found in url */
  bit stream_was_rewound:1; /* The stream was rewound after a request read
                               past the end of its response byte boundary */
  bit proxy_connect_closed:1; /* TRUE if a proxy disconnected the connection
                                 in a CONNECT request with auth, so that
                                 libcurl should reconnect and continue. */
600
601
602
603
604
605
606

607

608
609
610
611
612
613
614
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621







+

+







  /* 'upload_fromhere' is used as a read-pointer when we uploaded parts of a
     buffer, so the next read should read from where this pointer points to,
     and the 'upload_present' contains the number of bytes available at this
     position */
  char *upload_fromhere;
  void *protop;       /* Allocated protocol-specific data. Each protocol
                         handler makes sure this points to data it needs. */
#ifndef CURL_DISABLE_DOH
  struct dohdata doh; /* DoH specific data for this request */
#endif
  bit header:1;       /* incoming data has HTTP header */
  bit content_range:1; /* set TRUE if Content-Range: was found */
  bit upload_done:1;  /* set to TRUE when doing chunked transfer-encoding
                         upload and we're uploading the last chunk */
  bit ignorebody:1;   /* we read a response-body but we ignore it! */
  bit ignorecl:1;     /* This HTTP response has no body so we ignore the
                         Content-Length: header */
792
793
794
795
796
797
798
799

800
801

802
803

804
805
806
807
808
809
810
799
800
801
802
803
804
805

806
807

808


809
810
811
812
813
814
815
816







-
+

-
+
-
-
+







     and a HTTP proxy may in fact respond using chunked encoding */
  struct Curl_chunker chunk;

  curl_closesocket_callback fclosesocket; /* function closing the socket(s) */
  void *closesocket_client;

  /* This is used by the connection cache logic. If this returns TRUE, this
     handle is being used by one or more easy handles and can only used by any
     handle is still used by one or more easy handles and can only used by any
     other easy handle without careful consideration (== only for
     pipelining/multiplexing) and it cannot be used by another multi
     multiplexing) and it cannot be used by another multi handle! */
     handle! */
#define CONN_INUSE(c) ((c)->send_pipe.size + (c)->recv_pipe.size)
#define CONN_INUSE(c) ((c)->easyq.size)

  /**** Fields set when inited and not modified again */
  long connection_id; /* Contains a unique number to make it easier to
                         track the connections in the log output */

  /* 'dns_entry' is the particular host we use. This points to an entry in the
     DNS cache and it will not get pruned while locked. It gets unlocked in
867
868
869
870
871
872
873

874
875
876
877
878
879
880
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887







+







  char *oauth_bearer; /* bearer token for OAuth 2.0, allocated */

  int httpversion;        /* the HTTP version*10 reported by the server */
  int rtspversion;        /* the RTSP version*10 reported by the server */

  struct curltime now;     /* "current" time */
  struct curltime created; /* creation time */
  struct curltime lastused; /* when returned to the connection cache */
  curl_socket_t sock[2]; /* two sockets, the second is used for the data
                            transfer when doing FTP */
  curl_socket_t tempsock[2]; /* temporary sockets for happy eyeballs */
  bool sock_accepted[2]; /* TRUE if the socket on this index was created with
                            accept() */
  Curl_recv *recv[2];
  Curl_send *send[2];
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
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







-
-
-
-
-
-
-
-
-
+
-









+
+
+















+
+
+







  struct sockaddr_in local_addr;
#endif

#if defined(USE_KERBEROS5)    /* Consider moving some of the above GSS-API */
  struct kerberos5data krb5;  /* variables into the structure definition, */
#endif                        /* however, some of them are ftp specific. */

  struct curl_llist send_pipe; /* List of handles waiting to send on this
                                  pipeline */
  struct curl_llist recv_pipe; /* List of handles waiting to read their
                                  responses on this pipeline */
  char *master_buffer; /* The master buffer allocated on-demand;
                          used for pipelining. */
  size_t read_pos; /* Current read position in the master buffer */
  size_t buf_len; /* Length of the buffer?? */

  struct curl_llist easyq;    /* List of easy handles using this connection */

  curl_seek_callback seek_func; /* function that seeks the input */
  void *seek_client;            /* pointer to pass to the seek() above */

  /*************** Request - specific items ************/
#if defined(USE_WINDOWS_SSPI) && defined(SECPKG_ATTR_ENDPOINT_BINDINGS)
  CtxtHandle *sslContext;
#endif

#if defined(USE_NTLM)
  curlntlm http_ntlm_state;
  curlntlm proxy_ntlm_state;

  struct ntlmdata ntlm;     /* NTLM differs from other authentication schemes
                               because it authenticates connections, not
                               single requests! */
  struct ntlmdata proxyntlm; /* NTLM data for proxy */

#if defined(NTLM_WB_ENABLED)
  /* used for communication with Samba's winbind daemon helper ntlm_auth */
  curl_socket_t ntlm_auth_hlpr_socket;
  pid_t ntlm_auth_hlpr_pid;
  char *challenge_header;
  char *response_header;
#endif
#endif

#ifdef USE_SPNEGO
  curlnegotiate http_negotiate_state;
  curlnegotiate proxy_negotiate_state;

  struct negotiatedata negotiate; /* state data for host Negotiate auth */
  struct negotiatedata proxyneg; /* state data for proxy Negotiate auth */
#endif

  /* data used for the asynch name resolve callback */
  struct Curl_async async;

1205
1206
1207
1208
1209
1210
1211

1212
1213
1214
1215
1216
1217
1218
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223







+








/* Timers */
typedef enum {
  EXPIRE_100_TIMEOUT,
  EXPIRE_ASYNC_NAME,
  EXPIRE_CONNECTTIMEOUT,
  EXPIRE_DNS_PER_NAME,
  EXPIRE_HAPPY_EYEBALLS_DNS, /* See asyn-ares.c */
  EXPIRE_HAPPY_EYEBALLS,
  EXPIRE_MULTI_PENDING,
  EXPIRE_RUN_NOW,
  EXPIRE_SPEEDCHECK,
  EXPIRE_TIMEOUT,
  EXPIRE_TOOFAST,
  EXPIRE_LAST /* not an actual timer, used as a marker only */
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1288
1289
1290
1291
1292
1293
1294

1295
1296
1297
1298
1299
1300
1301







-







  void (*prev_signal)(int sig);
#endif
  struct digestdata digest;      /* state data for host Digest auth */
  struct digestdata proxydigest; /* state data for proxy Digest auth */

  struct auth authhost;  /* auth details for host */
  struct auth authproxy; /* auth details for proxy */

  void *resolver; /* resolver state, if it is used in the URL state -
                     ares_channel f.e. */

#if defined(USE_OPENSSL)
  /* void instead of ENGINE to avoid bleeding OpenSSL into this header */
  void *engine;
#endif /* USE_OPENSSL */
1367
1368
1369
1370
1371
1372
1373

1374
1375
1376
1377
1378
1379
1380
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385







+







  bit expect100header:1;  /* TRUE if we added Expect: 100-continue */
  bit use_range:1;
  bit rangestringalloc:1; /* the range string is malloc()'ed */
  bit done:1; /* set to FALSE when Curl_init_do() is called and set to TRUE
                  when multi_done() is called, to prevent multi_done() to get
                  invoked twice when the multi interface is used. */
  bit stream_depends_e:1; /* set or don't set the Exclusive bit */
  bit previouslypending:1; /* this transfer WAS in the multi->pending queue */
};


/*
 * This 'DynamicStatic' struct defines dynamic states that actually change
 * values in the 'UserDefined' area, which MUST be taken into consideration
 * if the UserDefined struct is cloned or similar. You can probably just
1457
1458
1459
1460
1461
1462
1463
1464

1465
1466
1467
1468
1469
1470
1471
1462
1463
1464
1465
1466
1467
1468

1469
1470
1471
1472
1473
1474
1475
1476







-
+







  STRING_PROXYUSERNAME,   /* Proxy <username>, if used */
  STRING_PROXYPASSWORD,   /* Proxy <password>, if used */
  STRING_NOPROXY,         /* List of hosts which should not use the proxy, if
                             used */
  STRING_RTSP_SESSION_ID, /* Session ID to use */
  STRING_RTSP_STREAM_URI, /* Stream URI for this request */
  STRING_RTSP_TRANSPORT,  /* Transport for this session */
#if defined(USE_LIBSSH2) || defined(USE_LIBSSH)
#ifdef USE_SSH
  STRING_SSH_PRIVATE_KEY, /* path to the private key file for auth */
  STRING_SSH_PUBLIC_KEY,  /* path to the public key file for auth */
  STRING_SSH_HOST_PUBLIC_KEY_MD5, /* md5 of host public key in ascii hex */
  STRING_SSH_KNOWNHOSTS,  /* file name of knownhosts file */
#endif
  STRING_PROXY_SERVICE_NAME, /* Proxy service name */
  STRING_SERVICE_NAME,    /* Service name */
1562
1563
1564
1565
1566
1567
1568


1569
1570
1571
1572
1573
1574
1575
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582







+
+







  void *progress_client; /* pointer to pass to the progress callback */
  void *ioctl_client;   /* pointer to pass to the ioctl callback */
  long timeout;         /* in milliseconds, 0 means no timeout */
  long connecttimeout;  /* in milliseconds, 0 means no timeout */
  long accepttimeout;   /* in milliseconds, 0 means no timeout */
  long happy_eyeballs_timeout; /* in milliseconds, 0 is a valid value */
  long server_response_timeout; /* in milliseconds, 0 means no timeout */
  long maxage_conn;     /* in seconds, max idle time to allow a connection that
                           is to be reused */
  long tftp_blksize;    /* in bytes, 0 means use default */
  curl_off_t filesize;  /* size of file to upload, -1 means unknown */
  long low_speed_limit; /* bytes/second */
  long low_speed_time;  /* number of seconds */
  curl_off_t max_send_speed; /* high speed limit in bytes/second for upload */
  curl_off_t max_recv_speed; /* high speed limit in bytes/second for
                                download */
1605
1606
1607
1608
1609
1610
1611

1612



1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632


1633
1634
1635
1636
1637
1638
1639







+

+
+
+









-
-







  size_t upload_buffer_size; /* size of upload buffer to use,
                                keep it >= CURL_MAX_WRITE_SIZE */
  void *private_data; /* application-private data */
  struct curl_slist *http200aliases; /* linked list of aliases for http200 */
  long ipver; /* the CURL_IPRESOLVE_* defines in the public header file
                 0 - whatever, 1 - v2, 2 - v6 */
  curl_off_t max_filesize; /* Maximum file size to download */
#ifndef CURL_DISABLE_FTP
  curl_ftpfile ftp_filemethod; /* how to get to a file when FTP is used  */
  curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
  curl_ftpccc ftp_ccc;   /* FTP CCC options */
#endif
  int ftp_create_missing_dirs; /* 1 - create directories that don't exist
                                  2 - the same but also allow MKD to fail once
                               */
  curl_sshkeycallback ssh_keyfunc; /* key matching callback */
  void *ssh_keyfunc_userp;         /* custom pointer to callback */
  enum CURL_NETRC_OPTION
       use_netrc;        /* defined in include/curl.h */
  curl_usessl use_ssl;   /* if AUTH TLS is to be attempted etc, for FTP or
                            IMAP or POP3 or others! */
  curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */
  curl_ftpccc ftp_ccc;   /* FTP CCC options */
  long new_file_perms;    /* Permissions to use when creating remote files */
  long new_directory_perms; /* Permissions to use when creating remote dirs */
  long ssh_auth_types;   /* allowed SSH auth types */
  char *str[STRING_LAST]; /* array of strings, pointing to allocated memory */
  unsigned int scope_id;  /* Scope id for IPv6 */
  long allowed_protocols;
  long redir_protocols;
1677
1678
1679
1680
1681
1682
1683

1684






1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730


1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717



1718
1719

1720
1721


1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738


1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757

1758
1759
1760
1761
1762
1763
1764







+

+
+
+
+
+
+

















-
-
-


-


-
-

















-
-
+
+

















-







   this session. They are STATIC, set by libcurl users or at least initially
   and they don't change during operations. */
  bit get_filetime:1;     /* get the time and get of the remote file */
  bit tunnel_thru_httpproxy:1; /* use CONNECT through a HTTP proxy */
  bit prefer_ascii:1;     /* ASCII rather than binary */
  bit ftp_append:1;       /* append, not overwrite, on upload */
  bit ftp_list_only:1;    /* switch FTP command for listing directories */
#ifndef CURL_DISABLE_FTP
  bit ftp_use_port:1;     /* use the FTP PORT command */
  bit ftp_use_epsv:1;   /* if EPSV is to be attempted or not */
  bit ftp_use_eprt:1;   /* if EPRT is to be attempted or not */
  bit ftp_use_pret:1;   /* if PRET is to be used before PASV or not */
  bit ftp_skip_ip:1;    /* skip the IP address the FTP server passes on to
                            us */
#endif
  bit hide_progress:1;    /* don't use the progress meter */
  bit http_fail_on_error:1;  /* fail on HTTP error codes >= 400 */
  bit http_keep_sending_on_error:1; /* for HTTP status codes >= 300 */
  bit http_follow_location:1; /* follow HTTP redirects */
  bit http_transfer_encoding:1; /* request compressed HTTP
                                    transfer-encoding */
  bit allow_auth_to_other_hosts:1;
  bit include_header:1; /* include received protocol headers in data output */
  bit http_set_referer:1; /* is a custom referer used */
  bit http_auto_referer:1; /* set "correct" referer when following
                               location: */
  bit opt_no_body:1;    /* as set with CURLOPT_NOBODY */
  bit upload:1;         /* upload request */
  bit verbose:1;        /* output verbosity */
  bit krb:1;            /* Kerberos connection requested */
  bit reuse_forbid:1;   /* forbidden to be reused, close after use */
  bit reuse_fresh:1;    /* do not re-use an existing connection  */
  bit ftp_use_epsv:1;   /* if EPSV is to be attempted or not */
  bit ftp_use_eprt:1;   /* if EPRT is to be attempted or not */
  bit ftp_use_pret:1;   /* if PRET is to be used before PASV or not */

  bit no_signal:1;      /* do not use any signal/alarm handler */
  bit global_dns_cache:1; /* subject for future removal */
  bit tcp_nodelay:1;    /* whether to enable TCP_NODELAY or not */
  bit ignorecl:1;       /* ignore content length */
  bit ftp_skip_ip:1;    /* skip the IP address the FTP server passes on to
                            us */
  bit connect_only:1;   /* make connection, let application use the socket */
  bit http_te_skip:1;   /* pass the raw body data to the user, even when
                            transfer-encoded (chunked, compressed) */
  bit http_ce_skip:1;   /* pass the raw body data to the user, even when
                            content-encoded (chunked, compressed) */
  bit proxy_transfer_mode:1; /* set transfer mode (;type=<a|i>) when doing
                                 FTP via an HTTP proxy */
#if defined(HAVE_GSSAPI) || defined(USE_WINDOWS_SSPI)
  bit socks5_gssapi_nec:1; /* Flag to support NEC SOCKS5 server */
#endif
  bit sasl_ir:1;         /* Enable/disable SASL initial response */
  bit wildcard_enabled:1; /* enable wildcard matching */
  bit tcp_keepalive:1;  /* use TCP keepalives */
  bit tcp_fastopen:1;   /* use TCP Fast Open */
  bit ssl_enable_npn:1; /* TLS NPN extension? */
  bit ssl_enable_alpn:1;/* TLS ALPN extension? */
  bit path_as_is:1;     /* allow dotdots? */
  bit pipewait:1;       /* wait for pipe/multiplex status before starting a
                            new connection */
  bit pipewait:1;       /* wait for multiplex status before starting a new
                           connection */
  bit suppress_connect_headers:1; /* suppress proxy CONNECT response headers
                                      from user callbacks */
  bit dns_shuffle_addresses:1; /* whether to shuffle addresses before use */
  bit stream_depends_e:1; /* set or don't set the Exclusive bit */
  bit haproxyprotocol:1; /* whether to send HAProxy PROXY protocol v1
                             header */
  bit abstract_unix_socket:1;
  bit disallow_username_in_url:1; /* disallow username in url */
  bit doh:1; /* DNS-over-HTTPS enabled */
  bit doh_get:1; /* use GET for DoH requests, instead of POST */
  bit http09_allowed:1; /* allow HTTP/0.9 responses */
};

struct Names {
  struct curl_hash *hostcache;
  enum {
    HCACHE_NONE,    /* not pointing to anything */
    HCACHE_GLOBAL,  /* points to the (shrug) global one */
    HCACHE_MULTI,   /* points to a shared one in the multi handle */
    HCACHE_SHARED   /* points to a shared one in a shared object */
  } hostcachetype;
};

/*
 * The 'connectdata' struct MUST have all the connection oriented stuff as we
1764
1765
1766
1767
1768
1769
1770
1771
1772


1773
1774
1775
1776
1777
1778
1779
1773
1774
1775
1776
1777
1778
1779


1780
1781
1782
1783
1784
1785
1786
1787
1788







-
-
+
+







struct Curl_easy {
  /* first, two fields for the linked list of these */
  struct Curl_easy *next;
  struct Curl_easy *prev;

  struct connectdata *conn;
  struct curl_llist_element connect_queue;
  struct curl_llist_element pipeline_queue;
  struct curl_llist_element sh_queue; /* list per Curl_sh_entry */
  struct curl_llist_element sh_queue; /* list per Curl_sh_entry */
  struct curl_llist_element conn_queue; /* list per connectdata */

  CURLMstate mstate;  /* the handle's state */
  CURLcode result;   /* previous result */

  struct Curl_message msg; /* A single posted message. */

  /* Array with the plain socket numbers this handle takes care of, in no
1805
1806
1807
1808
1809
1810
1811

1812

1813
1814
1815
1816
1817
1818
1819
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830







+

+







                                  is to be used or not. */
#ifdef USE_ALTSVC
  struct altsvcinfo *asi;      /* the alt-svc cache */
#endif
  struct Progress progress;    /* for all the progress meter data */
  struct UrlState state;       /* struct for fields used for state info and
                                  other dynamic purposes */
#ifndef CURL_DISABLE_FTP
  struct WildcardData wildcard; /* wildcard download state info */
#endif
  struct PureInfo info;        /* stats, reports and info data */
  struct curl_tlssessioninfo tsi; /* Information about the TLS session, only
                                     valid after a client has asked for it */
#if defined(CURL_DOES_CONVERSIONS) && defined(HAVE_ICONV)
  iconv_t outbound_cd;         /* for translating to the network encoding */
  iconv_t inbound_cd;          /* for translating from the network encoding */
  iconv_t utf8_cd;             /* for translating to UTF8 */
Changes to jni/curl/lib/vauth/cleartext.c.
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
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







-
+


















+
+
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 * RFC4616 PLAIN authentication
 * Draft   LOGIN SASL Mechanism <draft-murchison-sasl-login-00.txt>
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) ||       \
  !defined(CURL_DISABLE_POP3)

#include <curl/curl.h>
#include "urldata.h"

#include "vauth/vauth.h"
#include "curl_base64.h"
#include "curl_md5.h"
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
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







-
-
+
+
+







-
-
+
+
+




-
+
+





+
-
-
+
+


-
+

-
+






+
-
-
-
-
-
+
+
+
+
+







 *
 * This is used to generate an already encoded PLAIN message ready
 * for sending to the recipient.
 *
 * Parameters:
 *
 * data    [in]     - The session handle.
 * userp   [in]     - The user name.
 * passwdp [in]     - The user's password.
 * authzid [in]     - The authorization identity.
 * authcid [in]     - The authentication identity.
 * passwd  [in]     - The password.
 * outptr  [in/out] - The address where a pointer to newly allocated memory
 *                    holding the result will be stored upon completion.
 * outlen  [out]    - The length of the output message.
 *
 * Returns CURLE_OK on success.
 */
CURLcode Curl_auth_create_plain_message(struct Curl_easy *data,
                                        const char *userp,
                                        const char *passwdp,
                                        const char *authzid,
                                        const char *authcid,
                                        const char *passwd,
                                        char **outptr, size_t *outlen)
{
  CURLcode result;
  char *plainauth;
  size_t ulen;
  size_t zlen;
  size_t clen;
  size_t plen;
  size_t plainlen;

  *outlen = 0;
  *outptr = NULL;
  zlen = (authzid == NULL ? 0 : strlen(authzid));
  ulen = strlen(userp);
  plen = strlen(passwdp);
  clen = strlen(authcid);
  plen = strlen(passwd);

  /* Compute binary message length. Check for overflows. */
  if((ulen > SIZE_T_MAX/4) || (plen > (SIZE_T_MAX/2 - 2)))
  if(((zlen + clen) > SIZE_T_MAX/4) || (plen > (SIZE_T_MAX/2 - 2)))
    return CURLE_OUT_OF_MEMORY;
  plainlen = 2 * ulen + plen + 2;
  plainlen = zlen + clen + plen + 2;

  plainauth = malloc(plainlen);
  if(!plainauth)
    return CURLE_OUT_OF_MEMORY;

  /* Calculate the reply */
  if(zlen != 0)
  memcpy(plainauth, userp, ulen);
  plainauth[ulen] = '\0';
  memcpy(plainauth + ulen + 1, userp, ulen);
  plainauth[2 * ulen + 1] = '\0';
  memcpy(plainauth + 2 * ulen + 2, passwdp, plen);
    memcpy(plainauth, authzid, zlen);
  plainauth[zlen] = '\0';
  memcpy(plainauth + zlen + 1, authcid, clen);
  plainauth[zlen + clen + 1] = '\0';
  memcpy(plainauth + zlen + clen + 2, passwd, plen);

  /* Base64 encode the reply */
  result = Curl_base64_encode(data, plainauth, plainlen, outptr, outlen);
  free(plainauth);

  return result;
}
153
154
155
156
157
158
159


161
162
163
164
165
166
167
168
169







+
+
CURLcode Curl_auth_create_external_message(struct Curl_easy *data,
                                           const char *user, char **outptr,
                                           size_t *outlen)
{
  /* This is the same formatting as the login message */
  return Curl_auth_create_login_message(data, user, outptr, outlen);
}

#endif /* if no users */
Changes to jni/curl/lib/vauth/digest.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
781
782
783
784
785
786
787
788

789
790
791
792
793
794
795
796
781
782
783
784
785
786
787

788

789
790
791
792
793
794
795







-
+
-







  */

  hashthis = (unsigned char *) aprintf("%s:%s", request, uripath);
  if(!hashthis)
    return CURLE_OUT_OF_MEMORY;

  if(digest->qop && strcasecompare(digest->qop, "auth-int")) {
    /* We don't support auth-int for PUT or POST at the moment.
    /* We don't support auth-int for PUT or POST */
       TODO: replace hash of empty string with entity-body for PUT/POST */
    char hashed[65];
    unsigned char *hashthis2;

    hash(hashbuf, (const unsigned char *)"");
    convert_to_ascii(hashbuf, (unsigned char *)hashed);

    hashthis2 = (unsigned char *)aprintf("%s:%s", hashthis, hashed);
Changes to jni/curl/lib/vauth/krb5_gssapi.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, Steve Holme, <steve_holme@hotmail.com>.
 * Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
 * Copyright (C) 2015, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
368
369
370
371
372
373
374
375

376
377
378
379
380
381
382
383
384

385
386
387
388
389
390
391
368
369
370
371
372
373
374

375
376
377
378
379
380
381
382
383

384
385
386
387
388
389
390
391







-
+








-
+







  /* Free the message buffer */
  free(message);

  return result;
}

/*
 * Curl_auth_gssapi_cleanup()
 * Curl_auth_cleanup_gssapi()
 *
 * This is used to clean up the GSSAPI (Kerberos V5) specific data.
 *
 * Parameters:
 *
 * krb5     [in/out] - The Kerberos 5 data struct being cleaned up.
 *
 */
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5)
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5)
{
  OM_uint32 minor_status;

  /* Free our security context */
  if(krb5->context != GSS_C_NO_CONTEXT) {
    gss_delete_sec_context(&minor_status, &krb5->context, GSS_C_NO_BUFFER);
    krb5->context = GSS_C_NO_CONTEXT;
Changes to jni/curl/lib/vauth/krb5_sspi.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, Steve Holme, <steve_holme@hotmail.com>.
 * Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
470
471
472
473
474
475
476
477

478
479
480
481
482
483
484
485
486

487
488
489
490
491
492
493
470
471
472
473
474
475
476

477
478
479
480
481
482
483
484
485

486
487
488
489
490
491
492
493







-
+








-
+







  free(message);
  free(trailer);

  return result;
}

/*
 * Curl_auth_gssapi_cleanup()
 * Curl_auth_cleanup_gssapi()
 *
 * This is used to clean up the GSSAPI (Kerberos V5) specific data.
 *
 * Parameters:
 *
 * krb5     [in/out] - The Kerberos 5 data struct being cleaned up.
 *
 */
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5)
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5)
{
  /* Free our security context */
  if(krb5->context) {
    s_pSecFn->DeleteSecurityContext(krb5->context);
    free(krb5->context);
    krb5->context = NULL;
  }
Changes to jni/curl/lib/vauth/ntlm.c.
399
400
401
402
403
404
405
406

407
408
409
410
411
412
413
399
400
401
402
403
404
405

406
407
408
409
410
411
412
413







-
+







                                         domain are empty */
  (void)userp;
  (void)passwdp;
  (void)service,
  (void)hostname,

  /* Clean up any former leftovers and initialise to defaults */
  Curl_auth_ntlm_cleanup(ntlm);
  Curl_auth_cleanup_ntlm(ntlm);

#if defined(USE_NTRESPONSES) && defined(USE_NTLM2SESSION)
#define NTLM2FLAG NTLMFLAG_NEGOTIATE_NTLM2_KEY
#else
#define NTLM2FLAG 0
#endif
  msnprintf((char *)ntlmbuf, NTLM_BUFSIZE,
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
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







-
+





-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+









                                   size - domoff);
  if(result)
    return CURLE_CONV_FAILED;

  /* Return with binary blob encoded into base64 */
  result = Curl_base64_encode(data, (char *)ntlmbuf, size, outptr, outlen);

  Curl_auth_ntlm_cleanup(ntlm);
  Curl_auth_cleanup_ntlm(ntlm);

  return result;
}

/*
* Curl_auth_ntlm_cleanup()
*
* This is used to clean up the NTLM specific data.
*
* Parameters:
*
* ntlm    [in/out] - The NTLM data struct being cleaned up.
*
*/
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm)
 * Curl_auth_cleanup_ntlm()
 *
 * This is used to clean up the NTLM specific data.
 *
 * Parameters:
 *
 * ntlm    [in/out] - The NTLM data struct being cleaned up.
 *
 */
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm)
{
  /* Free the target info */
  Curl_safefree(ntlm->target_info);

  /* Reset any variables */
  ntlm->target_info_len = 0;
}

#endif /* USE_NTLM && !USE_WINDOWS_SSPI */
Changes to jni/curl/lib/vauth/ntlm_sspi.c.
91
92
93
94
95
96
97
98

99
100
101
102
103
104
105
91
92
93
94
95
96
97

98
99
100
101
102
103
104
105







-
+







  SecBuffer type_1_buf;
  SecBufferDesc type_1_desc;
  SECURITY_STATUS status;
  unsigned long attrs;
  TimeStamp expiry; /* For Windows 9x compatibility of SSPI calls */

  /* Clean up any former leftovers and initialise to defaults */
  Curl_auth_ntlm_cleanup(ntlm);
  Curl_auth_cleanup_ntlm(ntlm);

  /* Query the security package for NTLM */
  status = s_pSecFn->QuerySecurityPackageInfo((TCHAR *) TEXT(SP_NAME_NTLM),
                                              &SecurityPackage);
  if(status != SEC_E_OK)
    return CURLE_NOT_BUILT_IN;

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
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







-
+





-
+








-
+







    return CURLE_RECV_ERROR;
  }

  /* Base64 encode the response */
  result = Curl_base64_encode(data, (char *) ntlm->output_token,
                              type_3_buf.cbBuffer, outptr, outlen);

  Curl_auth_ntlm_cleanup(ntlm);
  Curl_auth_cleanup_ntlm(ntlm);

  return result;
}

/*
 * Curl_auth_ntlm_cleanup()
 * Curl_auth_cleanup_ntlm()
 *
 * This is used to clean up the NTLM specific data.
 *
 * Parameters:
 *
 * ntlm    [in/out] - The NTLM data struct being cleaned up.
 *
 */
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm)
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm)
{
  /* Free our security context */
  if(ntlm->context) {
    s_pSecFn->DeleteSecurityContext(ntlm->context);
    free(ntlm->context);
    ntlm->context = NULL;
  }
Changes to jni/curl/lib/vauth/oauth2.c.
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
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







-
+

















+
+
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 * RFC6749 OAuth 2.0 Authorization Framework
 *
 ***************************************************************************/

#include "curl_setup.h"

#if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
  !defined(CURL_DISABLE_POP3)

#include <curl/curl.h>
#include "urldata.h"

#include "vauth/vauth.h"
#include "curl_base64.h"
#include "warnless.h"
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







































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







-
-
+
+


















-
-
-
-
+
+


-
+











+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
 * This is used to generate an already encoded OAuth 2.0 message ready for
 * sending to the recipient.
 *
 * Parameters:
 *
 * data[in]         - The session handle.
 * user[in]         - The user name.
 * host[in]         - The host name(for OAUTHBEARER).
 * port[in]         - The port(for OAUTHBEARER when not Port 80).
 * host[in]         - The host name.
 * port[in]         - The port(when not Port 80).
 * bearer[in]       - The bearer token.
 * outptr[in / out] - The address where a pointer to newly allocated memory
 *                    holding the result will be stored upon completion.
 * outlen[out]      - The length of the output message.
 *
 * Returns CURLE_OK on success.
 */
CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_easy *data,
                                               const char *user,
                                               const char *host,
                                               const long port,
                                               const char *bearer,
                                               char **outptr, size_t *outlen)
{
  CURLcode result = CURLE_OK;
  char *oauth = NULL;

  /* Generate the message */
  if(host == NULL && (port == 0 || port == 80))
    oauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
  else if(port == 0 || port == 80)
    oauth = aprintf("user=%s\1host=%s\1auth=Bearer %s\1\1", user, host,
  if(port == 0 || port == 80)
    oauth = aprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1", user, host,
                    bearer);
  else
    oauth = aprintf("user=%s\1host=%s\1port=%ld\1auth=Bearer %s\1\1", user,
    oauth = aprintf("n,a=%s,\1host=%s\1port=%ld\1auth=Bearer %s\1\1", user,
                    host, port, bearer);
  if(!oauth)
    return CURLE_OUT_OF_MEMORY;

  /* Base64 encode the reply */
  result = Curl_base64_encode(data, oauth, strlen(oauth), outptr, outlen);

  free(oauth);

  return result;
}

/*
 * Curl_auth_create_xoauth_bearer_message()
 *
 * This is used to generate an already encoded XOAuth 2.0 message ready for
 * sending to the recipient.
 *
 * Parameters:
 *
 * data[in]         - The session handle.
 * user[in]         - The user name.
 * bearer[in]       - The bearer token.
 * outptr[in / out] - The address where a pointer to newly allocated memory
 *                    holding the result will be stored upon completion.
 * outlen[out]      - The length of the output message.
 *
 * Returns CURLE_OK on success.
 */
CURLcode Curl_auth_create_xoauth_bearer_message(struct Curl_easy *data,
                                               const char *user,
                                               const char *bearer,
                                               char **outptr, size_t *outlen)
{
  CURLcode result = CURLE_OK;

  /* Generate the message */
  char *xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
  if(!xoauth)
    return CURLE_OUT_OF_MEMORY;

  /* Base64 encode the reply */
  result = Curl_base64_encode(data, xoauth, strlen(xoauth), outptr, outlen);

  free(xoauth);

  return result;
}
#endif /* disabled, no users */

Changes to jni/curl/lib/vauth/spnego_gssapi.c.
93
94
95
96
97
98
99
100

101
102
103
104
105
106
107
93
94
95
96
97
98
99

100
101
102
103
104
105
106
107







-
+







  (void) user;
  (void) password;

  if(nego->context && nego->status == GSS_S_COMPLETE) {
    /* We finished successfully our part of authentication, but server
     * rejected it (since we're again here). Exit with an error since we
     * can't invent anything better */
    Curl_auth_spnego_cleanup(nego);
    Curl_auth_cleanup_spnego(nego);
    return CURLE_LOGIN_DENIED;
  }

  if(!nego->spn) {
    /* Generate our SPN */
    char *spn = Curl_auth_build_spn(service, NULL, host);
    if(!spn)
166
167
168
169
170
171
172
173

174
175
176
177
178
179
180
166
167
168
169
170
171
172

173
174
175
176
177
178
179
180







-
+







  if(GSS_ERROR(major_status)) {
    if(output_token.value)
      gss_release_buffer(&unused_status, &output_token);

    Curl_gss_log_error(data, "gss_init_sec_context() failed: ",
                       major_status, minor_status);

    return CURLE_OUT_OF_MEMORY;
    return CURLE_LOGIN_DENIED;
  }

  if(!output_token.value || !output_token.length) {
    if(output_token.value)
      gss_release_buffer(&unused_status, &output_token);

    return CURLE_OUT_OF_MEMORY;
234
235
236
237
238
239
240
241

242
243
244
245
246
247
248
249
250

251
252
253
254
255
256
257
234
235
236
237
238
239
240

241
242
243
244
245
246
247
248
249

250
251
252
253
254
255
256
257







-
+








-
+







    return CURLE_REMOTE_ACCESS_DENIED;
  }

  return CURLE_OK;
}

/*
 * Curl_auth_spnego_cleanup()
 * Curl_auth_cleanup_spnego()
 *
 * This is used to clean up the SPNEGO (Negotiate) specific data.
 *
 * Parameters:
 *
 * nego     [in/out] - The Negotiate data struct being cleaned up.
 *
 */
void Curl_auth_spnego_cleanup(struct negotiatedata *nego)
void Curl_auth_cleanup_spnego(struct negotiatedata *nego)
{
  OM_uint32 minor_status;

  /* Free our security context */
  if(nego->context != GSS_C_NO_CONTEXT) {
    gss_delete_sec_context(&minor_status, &nego->context, GSS_C_NO_BUFFER);
    nego->context = GSS_C_NO_CONTEXT;
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
269
270
271
272
273
274
275

276
277
278
279
280
281
282







-







  if(nego->spn != GSS_C_NO_NAME) {
    gss_release_name(&minor_status, &nego->spn);
    nego->spn = GSS_C_NO_NAME;
  }

  /* Reset any variables */
  nego->status = 0;
  nego->state = GSS_AUTHNONE;
  nego->noauthpersist = FALSE;
  nego->havenoauthpersist = FALSE;
  nego->havenegdata = FALSE;
  nego->havemultiplerequests = FALSE;
}

#endif /* HAVE_GSSAPI && USE_SPNEGO */
Changes to jni/curl/lib/vauth/spnego_sspi.c.
103
104
105
106
107
108
109
110

111
112
113
114
115
116
117
103
104
105
106
107
108
109

110
111
112
113
114
115
116
117







-
+







  (void) data;
#endif

  if(nego->context && nego->status == SEC_E_OK) {
    /* We finished successfully our part of authentication, but server
     * rejected it (since we're again here). Exit with an error since we
     * can't invent anything better */
    Curl_auth_spnego_cleanup(nego);
    Curl_auth_cleanup_spnego(nego);
    return CURLE_LOGIN_DENIED;
  }

  if(!nego->spn) {
    /* Generate our SPN */
    nego->spn = Curl_auth_build_spn(service, host, NULL);
    if(!nego->spn)
303
304
305
306
307
308
309
310

311
312
313
314
315
316
317
318
319

320
321
322
323
324
325
326
303
304
305
306
307
308
309

310
311
312
313
314
315
316
317
318

319
320
321
322
323
324
325
326







-
+








-
+







    return CURLE_REMOTE_ACCESS_DENIED;
  }

  return CURLE_OK;
}

/*
 * Curl_auth_spnego_cleanup()
 * Curl_auth_cleanup_spnego()
 *
 * This is used to clean up the SPNEGO (Negotiate) specific data.
 *
 * Parameters:
 *
 * nego     [in/out] - The Negotiate data struct being cleaned up.
 *
 */
void Curl_auth_spnego_cleanup(struct negotiatedata *nego)
void Curl_auth_cleanup_spnego(struct negotiatedata *nego)
{
  /* Free our security context */
  if(nego->context) {
    s_pSecFn->DeleteSecurityContext(nego->context);
    free(nego->context);
    nego->context = NULL;
  }
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
339
340
341
342
343
344
345

346
347
348
349
350
351
352







-







  /* Free the SPN and output token */
  Curl_safefree(nego->spn);
  Curl_safefree(nego->output_token);

  /* Reset any variables */
  nego->status = 0;
  nego->token_max = 0;
  nego->state = GSS_AUTHNONE;
  nego->noauthpersist = FALSE;
  nego->havenoauthpersist = FALSE;
  nego->havenegdata = FALSE;
  nego->havemultiplerequests = FALSE;
}

#endif /* USE_WINDOWS_SSPI && USE_SPNEGO */
Changes to jni/curl/lib/vauth/vauth.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2016, Steve Holme, <steve_holme@hotmail.com>.
 * Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
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
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







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+








  /* Return our newly allocated SPN */
  return tchar_spn;
}
#endif /* USE_WINDOWS_SSPI */

/*
* Curl_auth_user_contains_domain()
*
* This is used to test if the specified user contains a Windows domain name as
* follows:
*
* User\Domain (Down-level Logon Name)
* User/Domain (curl Down-level format - for compatibility with existing code)
* User@Domain (User Principal Name)
*
* Note: The user name may be empty when using a GSS-API library or Windows SSPI
* as the user and domain are either obtained from the credentials cache when
* using GSS-API or via the currently logged in user's credentials when using
* Windows SSPI.
*
* Parameters:
*
* user  [in] - The user name.
*
* Returns TRUE on success; otherwise FALSE.
*/
 * Curl_auth_user_contains_domain()
 *
 * This is used to test if the specified user contains a Windows domain name as
 * follows:
 *
 * Domain\User (Down-level Logon Name)
 * Domain/User (curl Down-level format - for compatibility with existing code)
 * User@Domain (User Principal Name)
 *
 * Note: The user name may be empty when using a GSS-API library or Windows
 * SSPI as the user and domain are either obtained from the credentials cache
 * when using GSS-API or via the currently logged in user's credentials when
 * using Windows SSPI.
 *
 * Parameters:
 *
 * user  [in] - The user name.
 *
 * Returns TRUE on success; otherwise FALSE.
 */
bool Curl_auth_user_contains_domain(const char *user)
{
  bool valid = FALSE;

  if(user && *user) {
    /* Check we have a domain name or UPN present */
    char *p = strpbrk(user, "\\/@");
Changes to jni/curl/lib/vauth/vauth.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_VAUTH_H
#define HEADER_CURL_VAUTH_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2014 - 2017, Steve Holme, <steve_holme@hotmail.com>.
 * Copyright (C) 2014 - 2019, Steve Holme, <steve_holme@hotmail.com>.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
56
57
58
59
60
61
62
63
64



65
66
67
68
69
70
71
56
57
58
59
60
61
62


63
64
65
66
67
68
69
70
71
72







-
-
+
+
+







#endif

/* This is used to test if the user contains a Windows domain name */
bool Curl_auth_user_contains_domain(const char *user);

/* This is used to generate a base64 encoded PLAIN cleartext message */
CURLcode Curl_auth_create_plain_message(struct Curl_easy *data,
                                        const char *userp,
                                        const char *passwdp,
                                        const char *authzid,
                                        const char *authcid,
                                        const char *passwd,
                                        char **outptr, size_t *outlen);

/* This is used to generate a base64 encoded LOGIN cleartext message */
CURLcode Curl_auth_create_login_message(struct Curl_easy *data,
                                        const char *valuep, char **outptr,
                                        size_t *outlen);

137
138
139
140
141
142
143
144

145
146
147
148
149
150
151
152
153







154
155
156
157
158
159
160
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







-
+









+
+
+
+
+
+
+







CURLcode Curl_auth_create_ntlm_type3_message(struct Curl_easy *data,
                                             const char *userp,
                                             const char *passwdp,
                                             struct ntlmdata *ntlm,
                                             char **outptr, size_t *outlen);

/* This is used to clean up the NTLM specific data */
void Curl_auth_ntlm_cleanup(struct ntlmdata *ntlm);
void Curl_auth_cleanup_ntlm(struct ntlmdata *ntlm);
#endif /* USE_NTLM */

/* This is used to generate a base64 encoded OAuth 2.0 message */
CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_easy *data,
                                               const char *user,
                                               const char *host,
                                               const long port,
                                               const char *bearer,
                                               char **outptr, size_t *outlen);

/* This is used to generate a base64 encoded XOAuth 2.0 message */
CURLcode Curl_auth_create_xoauth_bearer_message(struct Curl_easy *data,
                                                const char *user,
                                                const char *bearer,
                                                char **outptr, size_t *outlen);

#if defined(USE_KERBEROS5)
/* This is used to evaluate if GSSAPI (Kerberos V5) is supported */
bool Curl_auth_is_gssapi_supported(void);

/* This is used to generate a base64 encoded GSSAPI (Kerberos V5) user token
   message */
CURLcode Curl_auth_create_gssapi_user_message(struct Curl_easy *data,
172
173
174
175
176
177
178
179

180
181
182
183
184
185
186
180
181
182
183
184
185
186

187
188
189
190
191
192
193
194







-
+







CURLcode Curl_auth_create_gssapi_security_message(struct Curl_easy *data,
                                                  const char *input,
                                                  struct kerberos5data *krb5,
                                                  char **outptr,
                                                  size_t *outlen);

/* This is used to clean up the GSSAPI specific data */
void Curl_auth_gssapi_cleanup(struct kerberos5data *krb5);
void Curl_auth_cleanup_gssapi(struct kerberos5data *krb5);
#endif /* USE_KERBEROS5 */

#if defined(USE_SPNEGO)
/* This is used to evaluate if SPNEGO (Negotiate) is supported */
bool Curl_auth_is_spnego_supported(void);

/* This is used to decode a base64 encoded SPNEGO (Negotiate) challenge
196
197
198
199
200
201
202
203

204
205
206
207
204
205
206
207
208
209
210

211
212
213
214
215







-
+




/* This is used to generate a base64 encoded SPNEGO (Negotiate) response
   message */
CURLcode Curl_auth_create_spnego_message(struct Curl_easy *data,
                                         struct negotiatedata *nego,
                                         char **outptr, size_t *outlen);

/* This is used to clean up the SPNEGO specifiec data */
void Curl_auth_spnego_cleanup(struct negotiatedata *nego);
void Curl_auth_cleanup_spnego(struct negotiatedata *nego);

#endif /* USE_SPNEGO */

#endif /* HEADER_CURL_VAUTH_H */
Changes to jni/curl/lib/version.c.
27
28
29
30
31
32
33
34

35
36
37
38
39
40
41
27
28
29
30
31
32
33

34
35
36
37
38
39
40
41







-
+







#include "vtls/vtls.h"
#include "http2.h"
#include "ssh.h"
#include "curl_printf.h"

#ifdef USE_ARES
#  if defined(CURL_STATICLIB) && !defined(CARES_STATICLIB) && \
     (defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__))
     (defined(WIN32) || defined(__SYMBIAN32__))
#    define CARES_STATICLIB
#  endif
#  include <ares.h>
#endif

#ifdef USE_LIBIDN2
#include <idn2.h>
270
271
272
273
274
275
276
277

278
279
280
281
282
283
284
270
271
272
273
274
275
276

277
278
279
280
281
282
283
284







-
+







#endif
#ifdef USE_LIBRTMP
  "rtmp",
#endif
#ifndef CURL_DISABLE_RTSP
  "rtsp",
#endif
#if defined(USE_LIBSSH) || defined(USE_LIBSSH2)
#if defined(USE_SSH)
  "scp",
  "sftp",
#endif
#if !defined(CURL_DISABLE_SMB) && defined(USE_NTLM) && \
   (CURL_SIZEOF_CURL_OFF_T > 4) && \
   (!defined(USE_WINDOWS_SSPI) || defined(USE_WIN32_CRYPTO))
  "smb",
386
387
388
389
390
391
392
393

394
395
396



397

398
399
400
401
402
403
404
386
387
388
389
390
391
392

393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408







-
+



+
+
+

+







  0,    /* brotli_ver_num */
  NULL, /* brotli version */
};

curl_version_info_data *curl_version_info(CURLversion stamp)
{
  static bool initialized;
#if defined(USE_LIBSSH) || defined(USE_LIBSSH2)
#if defined(USE_SSH)
  static char ssh_buffer[80];
#endif
#ifdef USE_SSL
#ifdef CURL_WITH_MULTI_SSL
  static char ssl_buffer[200];
#else
  static char ssl_buffer[80];
#endif
#endif
#ifdef HAVE_BROTLI
  static char brotli_buffer[80];
#endif

  if(initialized)
    return &version_info;
Changes to jni/curl/lib/vtls/cyassl.c.
75
76
77
78
79
80
81

82
83
84
85
86
87
88
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89







+







#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "strcase.h"
#include "x509asn1.h"
#include "curl_printf.h"
#include "multiif.h"

#include <cyassl/openssl/ssl.h>
#include <cyassl/ssl.h>
#ifdef HAVE_CYASSL_ERROR_SSL_H
#include <cyassl/error-ssl.h>
#else
#include <cyassl/error.h>
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
139
140
141
142
143
144
145

146
147
148
149
150
151
152







-







 * This function loads all the client/CA certificates and CRLs. Setup the TLS
 * layer and do all necessary magic.
 */
static CURLcode
cyassl_connect_step1(struct connectdata *conn,
                     int sockindex)
{
  char error_buffer[CYASSL_MAX_ERROR_SZ];
  char *ciphers;
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
  SSL_METHOD* req_method = NULL;
  curl_socket_t sockfd = conn->sock[sockindex];
#ifdef HAVE_SNI
  bool sni = FALSE;
415
416
417
418
419
420
421

422
423
424
425
426
427
428
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429







+







  if(SSL_SET_OPTION(primary.sessionid)) {
    void *ssl_sessionid = NULL;

    Curl_ssl_sessionid_lock(conn);
    if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL, sockindex)) {
      /* we got a session id, use it! */
      if(!SSL_set_session(BACKEND->handle, ssl_sessionid)) {
        char error_buffer[CYASSL_MAX_ERROR_SZ];
        Curl_ssl_sessionid_unlock(conn);
        failf(data, "SSL: SSL_set_session failed: %s",
              ERR_error_string(SSL_get_error(BACKEND->handle, 0),
              error_buffer));
        return CURLE_SSL_CONNECT_ERROR;
      }
      /* Informational message */
595
596
597
598
599
600
601


602
603
604
605
606
607
608
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611







+
+







              !memcmp(protocol, NGHTTP2_PROTO_VERSION_ID,
                      NGHTTP2_PROTO_VERSION_ID_LEN))
        conn->negnpn = CURL_HTTP_VERSION_2;
#endif
      else
        infof(data, "ALPN, unrecognized protocol %.*s\n", protocol_len,
              protocol);
      Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                          BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
    }
    else if(rc == SSL_ALPN_NOT_FOUND)
      infof(data, "ALPN, server did not agree to a protocol\n");
    else {
      failf(data, "ALPN, failure getting protocol, error %d", rc);
      return CURLE_SSL_CONNECT_ERROR;
    }
Changes to jni/curl/lib/vtls/gskit.c.
730
731
732
733
734
735
736
737
738
739
740
741
742

743
744
745
746
747
748
749
730
731
732
733
734
735
736

737
738
739
740

741
742
743
744
745
746
747
748







-




-
+









static ssize_t gskit_recv(struct connectdata *conn, int num, char *buf,
                           size_t buffersize, CURLcode *curlcode)
{
  struct ssl_connect_data *connssl = &conn->ssl[num];
  struct Curl_easy *data = conn->data;
  int buffsize;
  int nread;
  CURLcode cc = CURLE_RECV_ERROR;

  if(pipe_ssloverssl(conn, num, SOS_READ) >= 0) {
    buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
    int buffsize = buffersize > (size_t) INT_MAX? INT_MAX: (int) buffersize;
    cc = gskit_status(data, gsk_secure_soc_read(BACKEND->handle,
                                                buf, buffsize, &nread),
                      "gsk_secure_soc_read()", CURLE_RECV_ERROR);
  }
  switch(cc) {
  case CURLE_OK:
    break;
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
801
802
803
804
805
806
807

808
809
810
811
812
813
814







-







  const char * const keyringlabel = SSL_SET_OPTION(cert);
  const long int ssl_version = SSL_CONN_CONFIG(version);
  const bool verifypeer = SSL_CONN_CONFIG(verifypeer);
  const char * const hostname = SSL_IS_PROXY()? conn->http_proxy.host.name:
    conn->host.name;
  const char *sni;
  unsigned int protoflags = 0;
  long timeout;
  Qso_OverlappedIO_t commarea;
  int sockpair[2];
  static const int sobufsize = CURL_MAX_WRITE_SIZE;

  /* Create SSL environment, start (preferably asynchronous) handshake. */

  BACKEND->handle = (gsk_handle) NULL;
910
911
912
913
914
915
916
917

918
919
920
921
922
923
924
908
909
910
911
912
913
914

915
916
917
918
919
920
921
922







-
+







      result = CURLE_OK;
  }

  /* Set session parameters. */
  if(!result) {
    /* Compute the handshake timeout. Since GSKit granularity is 1 second,
       we round up the required value. */
    timeout = Curl_timeleft(data, NULL, TRUE);
    long timeout = Curl_timeleft(data, NULL, TRUE);
    if(timeout < 0)
      result = CURLE_OPERATION_TIMEDOUT;
    else
      result = set_numeric(data, BACKEND->handle, GSK_HANDSHAKE_TIMEOUT,
                           (timeout + 999) / 1000);
  }
  if(!result)
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031

1032
1033
1034
1035
1036
1037
1038
1015
1016
1017
1018
1019
1020
1021

1022
1023
1024
1025
1026
1027

1028
1029
1030
1031
1032
1033
1034
1035







-






-
+








static CURLcode gskit_connect_step2(struct connectdata *conn, int sockindex,
                                    bool nonblocking)
{
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  Qso_OverlappedIO_t cstat;
  long timeout_ms;
  struct timeval stmv;
  CURLcode result;

  /* Poll or wait for end of SSL asynchronous handshake. */

  for(;;) {
    timeout_ms = nonblocking? 0: Curl_timeleft(data, NULL, TRUE);
    long timeout_ms = nonblocking? 0: Curl_timeleft(data, NULL, TRUE);
    if(timeout_ms < 0)
      timeout_ms = 0;
    stmv.tv_sec = timeout_ms / 1000;
    stmv.tv_usec = (timeout_ms - stmv.tv_sec * 1000) * 1000;
    switch(QsoWaitForIOCompletion(BACKEND->iocport, &cstat, &stmv)) {
    case 1:             /* Operation complete. */
      break;
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089


1090
1091
1092
1093
1094
1095
1096
1070
1071
1072
1073
1074
1075
1076

1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094







-









+
+







  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  const gsk_cert_data_elem *cdev;
  int cdec;
  const gsk_cert_data_elem *p;
  const char *cert = (const char *) NULL;
  const char *certend;
  const char *ptr;
  int i;
  CURLcode result;

  /* SSL handshake done: gather certificate info and verify host. */

  if(gskit_status(data, gsk_attribute_get_cert_info(BACKEND->handle,
                                                    GSK_PARTNER_CERT_INFO,
                                                    &cdev, &cdec),
                  "gsk_attribute_get_cert_info()", CURLE_SSL_CONNECT_ERROR) ==
     CURLE_OK) {
    int i;

    infof(data, "Server certificate:\n");
    p = cdev;
    for(i = 0; i++ < cdec; p++)
      switch(p->cert_data_id) {
      case CERT_BODY_DER:
        cert = p->cert_data_p;
        certend = cert + cdev->cert_data_l;
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1154
1155
1156
1157
1158
1159
1160

1161
1162
1163
1164
1165
1166
1167







-








static CURLcode gskit_connect_common(struct connectdata *conn, int sockindex,
                                     bool nonblocking, bool *done)
{
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  long timeout_ms;
  Qso_OverlappedIO_t cstat;
  CURLcode result = CURLE_OK;

  *done = connssl->state == ssl_connection_complete;
  if(*done)
    return CURLE_OK;

  /* Step 1: create session, start handshake. */
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272

1273
1274

1275
1276
1277
1278
1279
1280
1281


1282
1283
1284
1285
1286
1287
1288
1255
1256
1257
1258
1259
1260
1261

1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288







-







+


+







+
+







}


static int Curl_gskit_shutdown(struct connectdata *conn, int sockindex)
{
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  struct Curl_easy *data = conn->data;
  ssize_t nread;
  int what;
  int rc;
  char buf[120];

  if(!BACKEND->handle)
    return 0;

#ifndef CURL_DISABLE_FTP
  if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
    return 0;
#endif

  close_one(connssl, conn, sockindex);
  rc = 0;
  what = SOCKET_READABLE(conn->sock[sockindex],
                         SSL_SHUTDOWN_TIMEOUT);

  for(;;) {
    ssize_t nread;

    if(what < 0) {
      /* anything that gets here is fatally bad */
      failf(data, "select/poll on SSL socket, errno: %d", SOCKERRNO);
      rc = -1;
      break;
    }

Changes to jni/curl/lib/vtls/gtls.c.
51
52
53
54
55
56
57

58
59
60
61
62
63
64
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65







+







#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "strcase.h"
#include "warnless.h"
#include "x509asn1.h"
#include "multiif.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* Enable GnuTLS debugging by defining GTLSDEBUG */
/*#define GTLSDEBUG */
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
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







+
+
-
-
+
+
-

-












-
+







                          bool duringconnect,
                          bool nonblocking)
{
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  gnutls_session_t session = BACKEND->session;
  curl_socket_t sockfd = conn->sock[sockindex];

  for(;;) {
  time_t timeout_ms;
  int rc;
    time_t timeout_ms;
    int rc;
  int what;

  for(;;) {
    /* check allowed time left */
    timeout_ms = Curl_timeleft(data, NULL, duringconnect);

    if(timeout_ms < 0) {
      /* no need to continue if time already is up */
      failf(data, "SSL connection timeout");
      return CURLE_OPERATION_TIMEDOUT;
    }

    /* if ssl is expecting something, check if it's available. */
    if(connssl->connecting_state == ssl_connect_2_reading
       || connssl->connecting_state == ssl_connect_2_writing) {

      int what;
      curl_socket_t writefd = ssl_connect_2_writing ==
        connssl->connecting_state?sockfd:CURL_SOCKET_BAD;
      curl_socket_t readfd = ssl_connect_2_reading ==
        connssl->connecting_state?sockfd:CURL_SOCKET_BAD;

      what = Curl_socket_check(readfd, CURL_SOCKET_BAD, writefd,
                               nonblocking?0:
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
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







-










+
+







  /* Scratch */
  size_t len1 = 0, len2 = 0;
  unsigned char *buff1 = NULL;

  gnutls_pubkey_t key = NULL;

  /* Result is returned to caller */
  int ret = 0;
  CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;

  /* if a path wasn't specified, don't pin */
  if(NULL == pinnedpubkey)
    return CURLE_OK;

  if(NULL == cert)
    return result;

  do {
    int ret;

    /* Begin Gyrations to get the public key     */
    gnutls_pubkey_init(&key);

    ret = gnutls_pubkey_import_x509(key, cert, 0);
    if(ret < 0)
      break; /* failed */

1274
1275
1276
1277
1278
1279
1280
1281
1282

1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293



1294
1295
1296
1297



1298
1299
1300
1301
1302
1303
1304
1276
1277
1278
1279
1280
1281
1282


1283


1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296



1297
1298
1299
1300
1301
1302
1303
1304
1305
1306







-
-
+
-
-









+
+
+

-
-
-
+
+
+







  if(!rc) {
#ifdef ENABLE_IPV6
    #define use_addr in6_addr
#else
    #define use_addr in_addr
#endif
    unsigned char addrbuf[sizeof(struct use_addr)];
    unsigned char certaddr[sizeof(struct use_addr)];
    size_t addrlen = 0, certaddrlen;
    size_t addrlen = 0;
    int i;
    int ret = 0;

    if(Curl_inet_pton(AF_INET, hostname, addrbuf) > 0)
      addrlen = 4;
#ifdef ENABLE_IPV6
    else if(Curl_inet_pton(AF_INET6, hostname, addrbuf) > 0)
      addrlen = 16;
#endif

    if(addrlen) {
      unsigned char certaddr[sizeof(struct use_addr)];
      int i;

      for(i = 0; ; i++) {
        certaddrlen = sizeof(certaddr);
        ret = gnutls_x509_crt_get_subject_alt_name(x509_cert, i, certaddr,
                                                   &certaddrlen, NULL);
        size_t certaddrlen = sizeof(certaddr);
        int ret = gnutls_x509_crt_get_subject_alt_name(x509_cert, i, certaddr,
                                                       &certaddrlen, NULL);
        /* If this happens, it wasn't an IP address. */
        if(ret == GNUTLS_E_SHORT_MEMORY_BUFFER)
          continue;
        if(ret < 0)
          break;
        if(ret != GNUTLS_SAN_IPADDRESS)
          continue;
1445
1446
1447
1448
1449
1450
1451



1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473



1474
1475
1476
1477
1478
1479
1480
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468


1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486







+
+
+












-
-








+
+
+







      if(proto.size == ALPN_HTTP_1_1_LENGTH &&
         !memcmp(ALPN_HTTP_1_1, proto.data, ALPN_HTTP_1_1_LENGTH)) {
        conn->negnpn = CURL_HTTP_VERSION_1_1;
      }
    }
    else
      infof(data, "ALPN, server did not agree to a protocol\n");

    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
#endif

  conn->ssl[sockindex].state = ssl_connection_complete;
  conn->recv[sockindex] = gtls_recv;
  conn->send[sockindex] = gtls_send;

  if(SSL_SET_OPTION(primary.sessionid)) {
    /* we always unconditionally get the session id here, as even if we
       already got it from the cache and asked to use it in the connection, it
       might've been rejected and then a new one is in use now and we need to
       detect that. */
    bool incache;
    void *ssl_sessionid;
    void *connect_sessionid;
    size_t connect_idsize = 0;

    /* get the session ID data size */
    gnutls_session_get_data(session, NULL, &connect_idsize);
    connect_sessionid = malloc(connect_idsize); /* get a buffer for it */

    if(connect_sessionid) {
      bool incache;
      void *ssl_sessionid;

      /* extract session ID to the allocated buffer */
      gnutls_session_get_data(session, connect_sessionid, &connect_idsize);

      Curl_ssl_sessionid_lock(conn);
      incache = !(Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL,
                                        sockindex));
      if(incache) {
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639

1640
1641
1642
1643
1644
1645
1646

1647
1648




1649
1650
1651
1652
1653
1654
1655
1633
1634
1635
1636
1637
1638
1639

1640
1641


1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664







-


-
-

+







+


+
+
+
+







/*
 * This function is called to shut down the SSL layer but keep the
 * socket open (CCC - Clear Command Channel)
 */
static int Curl_gtls_shutdown(struct connectdata *conn, int sockindex)
{
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  ssize_t result;
  int retval = 0;
  struct Curl_easy *data = conn->data;
  bool done = FALSE;
  char buf[120];

#ifndef CURL_DISABLE_FTP
  /* This has only been tested on the proftpd server, and the mod_tls code
     sends a close notify alert without waiting for a close notify alert in
     response. Thus we wait for a close notify alert from the server, but
     we do not send one. Let's hope other servers do the same... */

  if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
      gnutls_bye(BACKEND->session, GNUTLS_SHUT_WR);
#endif

  if(BACKEND->session) {
    ssize_t result;
    bool done = FALSE;
    char buf[120];

    while(!done) {
      int what = SOCKET_READABLE(conn->sock[sockindex],
                                 SSL_SHUTDOWN_TIMEOUT);
      if(what > 0) {
        /* Something to read, let's do it and hope that it is the close
           notify alert from the server */
        result = gnutls_record_recv(BACKEND->session,
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1763
1764
1765
1766
1767
1768
1769






1770
1771
1772
1773
1774
1775
1776







-
-
-
-
-
-







  static bool ssl_seeded = FALSE;

  /* Quickly add a bit of entropy */
  gcry_fast_random_poll();

  if(!ssl_seeded || data->set.str[STRING_SSL_RANDOM_FILE] ||
     data->set.str[STRING_SSL_EGDSOCKET]) {

    /* TODO: to a good job seeding the RNG
       This may involve the gcry_control function and these options:
       GCRYCTL_SET_RANDOM_SEED_FILE
       GCRYCTL_SET_RNDEGD_SOCKET
    */
    ssl_seeded = TRUE;
  }
  return 0;
}
#endif

/* data might be NULL! */
Changes to jni/curl/lib/vtls/mbedtls.c.
50
51
52
53
54
55
56

57
58
59
60
61
62
63
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64







+







#include "sendf.h"
#include "inet_pton.h"
#include "mbedtls.h"
#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "multiif.h"
#include "polarssl_threadlock.h"

/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
#include "memdebug.h"

338
339
340
341
342
343
344

345

346
347
348
349
350
351
352
339
340
341
342
343
344
345
346

347
348
349
350
351
352
353
354







+
-
+








  /* Load the client private key */
  mbedtls_pk_init(&BACKEND->pk);

  if(SSL_SET_OPTION(key)) {
    ret = mbedtls_pk_parse_keyfile(&BACKEND->pk, SSL_SET_OPTION(key),
                                   SSL_SET_OPTION(key_passwd));
    if(ret == 0 && !(mbedtls_pk_can_do(&BACKEND->pk, MBEDTLS_PK_RSA) ||
    if(ret == 0 && !mbedtls_pk_can_do(&BACKEND->pk, MBEDTLS_PK_RSA))
                     mbedtls_pk_can_do(&BACKEND->pk, MBEDTLS_PK_ECKEY)))
      ret = MBEDTLS_ERR_PK_TYPE_MISMATCH;

    if(ret) {
#ifdef MBEDTLS_ERROR_C
      mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
#endif /* MBEDTLS_ERROR_C */
      failf(data, "Error reading private key %s - mbedTLS: (-0x%04X) %s",
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
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







-
-
-
-
-
-
-














+
+







  struct Curl_easy *data = conn->data;
  struct ssl_connect_data* connssl = &conn->ssl[sockindex];
  const mbedtls_x509_crt *peercert;
  const char * const pinnedpubkey = SSL_IS_PROXY() ?
        data->set.str[STRING_SSL_PINNEDPUBLICKEY_PROXY] :
        data->set.str[STRING_SSL_PINNEDPUBLICKEY_ORIG];

#ifdef HAS_ALPN
  const char *next_protocol;
#endif

  char errorbuf[128];
  errorbuf[0] = 0;

  conn->recv[sockindex] = mbed_recv;
  conn->send[sockindex] = mbed_send;

  ret = mbedtls_ssl_handshake(&BACKEND->ssl);

  if(ret == MBEDTLS_ERR_SSL_WANT_READ) {
    connssl->connecting_state = ssl_connect_2_reading;
    return CURLE_OK;
  }
  else if(ret == MBEDTLS_ERR_SSL_WANT_WRITE) {
    connssl->connecting_state = ssl_connect_2_writing;
    return CURLE_OK;
  }
  else if(ret) {
    char errorbuf[128];
    errorbuf[0] = 0;
#ifdef MBEDTLS_ERROR_C
    mbedtls_strerror(ret, errorbuf, sizeof(errorbuf));
#endif /* MBEDTLS_ERROR_C */
    failf(data, "ssl_handshake returned - mbedTLS: (-0x%04X) %s",
          -ret, errorbuf);
    return CURLE_SSL_CONNECT_ERROR;
  }
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
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







-
+



















+
+








    mbedtls_x509_crt_free(p);
    free(p);
  }

#ifdef HAS_ALPN
  if(conn->bits.tls_enable_alpn) {
    next_protocol = mbedtls_ssl_get_alpn_protocol(&BACKEND->ssl);
    const char *next_protocol = mbedtls_ssl_get_alpn_protocol(&BACKEND->ssl);

    if(next_protocol) {
      infof(data, "ALPN, server accepted to use %s\n", next_protocol);
#ifdef USE_NGHTTP2
      if(!strncmp(next_protocol, NGHTTP2_PROTO_VERSION_ID,
                  NGHTTP2_PROTO_VERSION_ID_LEN) &&
         !next_protocol[NGHTTP2_PROTO_VERSION_ID_LEN]) {
        conn->negnpn = CURL_HTTP_VERSION_2;
      }
      else
#endif
        if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH) &&
           !next_protocol[ALPN_HTTP_1_1_LENGTH]) {
          conn->negnpn = CURL_HTTP_VERSION_1_1;
        }
    }
    else {
      infof(data, "ALPN, server did not agree to a protocol\n");
    }
    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
#endif

  connssl->connecting_state = ssl_connect_3;
  infof(data, "SSL connected\n");

  return CURLE_OK;
Changes to jni/curl/lib/vtls/mesalink.c.
264
265
266
267
268
269
270
271

272
273
274
275
276
277
278
264
265
266
267
268
269
270

271
272
273
274
275
276
277
278







-
+







  conn->send[sockindex] = mesalink_send;

  ret = SSL_connect(BACKEND->handle);
  if(ret != SSL_SUCCESS) {
    char error_buffer[MESALINK_MAX_ERROR_SZ];
    int detail = SSL_get_error(BACKEND->handle, ret);

    if(SSL_ERROR_WANT_CONNECT == detail) {
    if(SSL_ERROR_WANT_CONNECT == detail || SSL_ERROR_WANT_READ == detail) {
      connssl->connecting_state = ssl_connect_2_reading;
      return CURLE_OK;
    }
    else {
      failf(data,
            "SSL_connect failed with error %d: %s",
            detail,
Changes to jni/curl/lib/vtls/nss.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
34
35
36
37
38
39
40

41
42
43
44
45
46
47
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48







+







#include "formdata.h" /* for the boundary function */
#include "url.h" /* for the ssl config check function */
#include "connect.h"
#include "strcase.h"
#include "select.h"
#include "vtls.h"
#include "llist.h"
#include "multiif.h"
#include "curl_printf.h"
#include "nssg.h"
#include <nspr.h>
#include <nss.h>
#include <ssl.h>
#include <sslerr.h>
#include <secerr.h>
373
374
375
376
377
378
379
380

381
382
383
384
385
386
387
374
375
376
377
378
379
380

381
382
383
384
385
386
387
388







-
+







{
  struct_stat st;

  if(filename == NULL)
    return 0;

  if(stat(filename, &st) == 0)
    if(S_ISREG(st.st_mode))
    if(S_ISREG(st.st_mode) || S_ISFIFO(st.st_mode) || S_ISCHR(st.st_mode))
      return 1;

  return 0;
}

/* Check if the given string is filename or nickname of a certificate.  If the
 * given string is recognized as filename, return NULL.  If the given string is
839
840
841
842
843
844
845


846
847
848
849
850
851
852
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855







+
+







    }
    else
#endif
    if(buflen == ALPN_HTTP_1_1_LENGTH &&
       !memcmp(ALPN_HTTP_1_1, buf, ALPN_HTTP_1_1_LENGTH)) {
      conn->negnpn = CURL_HTTP_VERSION_1_1;
    }
    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
}

#if NSSVERNUM >= 0x030f04 /* 3.15.4 */
static SECStatus CanFalseStartCallback(PRFileDesc *sock, void *client_data,
                                       PRBool *canFalseStart)
{
1301
1302
1303
1304
1305
1306
1307


1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327


1328

1329
1330
1331
1332
1333
1334
1335
1336
1337


1338

1339
1340
1341
1342
1343
1344
1345
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334

1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346

1347
1348
1349
1350
1351
1352
1353
1354







+
+




















+
+
-
+









+
+
-
+







  *pmod = NULL;
}

/* data might be NULL */
static CURLcode nss_init_core(struct Curl_easy *data, const char *cert_dir)
{
  NSSInitParameters initparams;
  PRErrorCode err;
  const char *err_name;

  if(nss_context != NULL)
    return CURLE_OK;

  memset((void *) &initparams, '\0', sizeof(initparams));
  initparams.length = sizeof(initparams);

  if(cert_dir) {
    char *certpath = aprintf("sql:%s", cert_dir);
    if(!certpath)
      return CURLE_OUT_OF_MEMORY;

    infof(data, "Initializing NSS with certpath: %s\n", certpath);
    nss_context = NSS_InitContext(certpath, "", "", "", &initparams,
            NSS_INIT_READONLY | NSS_INIT_PK11RELOAD);
    free(certpath);

    if(nss_context != NULL)
      return CURLE_OK;

    err = PR_GetError();
    err_name = nss_error_to_name(err);
    infof(data, "Unable to initialize NSS database\n");
    infof(data, "Unable to initialize NSS database: %d (%s)\n", err, err_name);
  }

  infof(data, "Initializing NSS with certpath: none\n");
  nss_context = NSS_InitContext("", "", "", "", &initparams, NSS_INIT_READONLY
         | NSS_INIT_NOCERTDB   | NSS_INIT_NOMODDB       | NSS_INIT_FORCEOPEN
         | NSS_INIT_NOROOTINIT | NSS_INIT_OPTIMIZESPACE | NSS_INIT_PK11RELOAD);
  if(nss_context != NULL)
    return CURLE_OK;

  err = PR_GetError();
  err_name = nss_error_to_name(err);
  infof(data, "Unable to initialize NSS\n");
  failf(data, "Unable to initialize NSS: %d (%s)", err, err_name);
  return CURLE_SSL_CACERT_BADFILE;
}

/* data might be NULL */
static CURLcode nss_init(struct Curl_easy *data)
{
  char *cert_dir;
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1827
1828
1829
1830
1831
1832
1833

1834
1835
1836
1837
1838
1839
1840







-







  };

  BACKEND->data = data;

  /* list of all NSS objects we need to destroy in Curl_nss_close() */
  Curl_llist_init(&BACKEND->obj_list, nss_destroy_object);

  /* FIXME. NSS doesn't support multiple databases open at the same time. */
  PR_Lock(nss_initlock);
  result = nss_init(conn->data);
  if(result) {
    PR_Unlock(nss_initlock);
    goto error;
  }

Changes to jni/curl/lib/vtls/openssl.c.
44
45
46
47
48
49
50

51
52
53
54
55
56
57
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58







+







#include "openssl.h"
#include "connect.h"
#include "slist.h"
#include "select.h"
#include "vtls.h"
#include "strcase.h"
#include "hostcheck.h"
#include "multiif.h"
#include "curl_printf.h"
#include <openssl/ssl.h>
#include <openssl/rand.h>
#include <openssl/x509v3.h>
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
1303
1304
1305
1306
1307
1308
1309

1310
1311
1312
1313
1314
1315
1316

1317
1318
1319
1320
1321
1322
1323
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326







+







+







                    to be at least 256 bytes long. */
  unsigned long sslerror;
  ssize_t nread;
  int buffsize;
  int err;
  bool done = FALSE;

#ifndef CURL_DISABLE_FTP
  /* This has only been tested on the proftpd server, and the mod_tls code
     sends a close notify alert without waiting for a close notify alert in
     response. Thus we wait for a close notify alert from the server, but
     we do not send one. Let's hope other servers do the same... */

  if(data->set.ftp_ccc == CURLFTPSSL_CCC_ACTIVE)
      (void)SSL_shutdown(BACKEND->handle);
#endif

  if(BACKEND->handle) {
    buffsize = (int)sizeof(buf);
    while(!done) {
      int what = SOCKET_READABLE(conn->sock[sockindex],
                                 SSL_SHUTDOWN_TIMEOUT);
      if(what > 0) {
2913
2914
2915
2916
2917
2918
2919



2920
2921
2922
2923
2924
2925
2926
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932







+
+
+







        if(len == ALPN_HTTP_1_1_LENGTH &&
           !memcmp(ALPN_HTTP_1_1, neg_protocol, ALPN_HTTP_1_1_LENGTH)) {
          conn->negnpn = CURL_HTTP_VERSION_1_1;
        }
      }
      else
        infof(data, "ALPN, server did not agree to a protocol\n");

      Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                          BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
    }
#endif

    return CURLE_OK;
  }
}

3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235
3236
3237
3225
3226
3227
3228
3229
3230
3231





3232
3233
3234
3235
3236
3237
3238







-
-
-
-
-







#else
        print_pubkey_BN(dh, p, i);
        print_pubkey_BN(dh, g, i);
        print_pubkey_BN(dh, pub_key, i);
#endif
        break;
      }
#if 0
      case EVP_PKEY_EC: /* symbol not present in OpenSSL 0.9.6 */
        /* left TODO */
        break;
#endif
      }
      EVP_PKEY_free(pubkey);
    }

    if(psig) {
      for(j = 0; j < psig->length; j++)
        BIO_printf(mem, "%02x:", psig->data[j]);
3752
3753
3754
3755
3756
3757
3758

3759


3760
3761
3762
3763
3764
3765
3766
3753
3754
3755
3756
3757
3758
3759
3760
3761
3762
3763
3764
3765
3766
3767
3768
3769
3770







+

+
+







  nread = (ssize_t)SSL_read(BACKEND->handle, buf, buffsize);
  if(nread <= 0) {
    /* failed SSL_read */
    int err = SSL_get_error(BACKEND->handle, (int)nread);

    switch(err) {
    case SSL_ERROR_NONE: /* this is not an error */
      break;
    case SSL_ERROR_ZERO_RETURN: /* no more data */
      /* close_notify alert */
      connclose(conn, "TLS close_notify");
      break;
    case SSL_ERROR_WANT_READ:
    case SSL_ERROR_WANT_WRITE:
      /* there's data pending, re-invoke SSL_read() */
      *curlcode = CURLE_AGAIN;
      return -1;
    default:
3815
3816
3817
3818
3819
3820
3821
3822





3823
3824
3825
3826
3827
3828
3829
3819
3820
3821
3822
3823
3824
3825

3826
3827
3828
3829
3830
3831
3832
3833
3834
3835
3836
3837







-
+
+
+
+
+







        sub[0] = (char) (minor_ver + 'a' - 1);
      }
    }
    else
      sub[0]='\0';
  }

  return msnprintf(buffer, size, "%s/%lx.%lx.%lx%s",
  return msnprintf(buffer, size, "%s/%lx.%lx.%lx%s"
#ifdef OPENSSL_FIPS
                   "-fips"
#endif
                   ,
                   OSSL_PACKAGE,
                   (ssleay_value>>28)&0xf,
                   (ssleay_value>>20)&0xff,
                   (ssleay_value>>12)&0xff,
                   sub);
#endif /* OPENSSL_IS_BORINGSSL */
}
Changes to jni/curl/lib/vtls/polarssl.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2012 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2012 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010 - 2011, Hoi-Ho Chan, <hoiho.chan@gmail.com>
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
51
52
53
54
55
56
57

58
59
60
61
62
63
64
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65







+







#include "polarssl.h"
#include "vtls.h"
#include "parsedate.h"
#include "connect.h" /* for the connect timeout */
#include "select.h"
#include "strcase.h"
#include "polarssl_threadlock.h"
#include "multiif.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* See https://tls.mbed.org/discussions/generic/
   howto-determine-exact-buffer-len-for-mbedtls_pk_write_pubkey_der
589
590
591
592
593
594
595


596
597
598
599
600
601
602
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605







+
+







#endif
        if(!strncmp(next_protocol, ALPN_HTTP_1_1, ALPN_HTTP_1_1_LENGTH)) {
          conn->negnpn = CURL_HTTP_VERSION_1_1;
        }
    }
    else
      infof(data, "ALPN, server did not agree to a protocol\n");
    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
#endif

  connssl->connecting_state = ssl_connect_3;
  infof(data, "SSL connected\n");

  return CURLE_OK;
904
905
906
907
908
909
910
911

912
913
914
915
916
917
918
919
920
907
908
909
910
911
912
913

914


915
916
917
918
919
920
921







-
+
-
-








  Curl_polarssl_init,                /* init */
  Curl_polarssl_cleanup,             /* cleanup */
  Curl_polarssl_version,             /* version */
  Curl_none_check_cxn,               /* check_cxn */
  Curl_none_shutdown,                /* shutdown */
  Curl_polarssl_data_pending,        /* data_pending */
  /* This might cause libcurl to use a weeker random!
  /* This might cause libcurl to use a weeker random! */
   * TODO: use Polarssl's CTR-DRBG or HMAC-DRBG
  */
  Curl_none_random,                  /* random */
  Curl_none_cert_status_request,     /* cert_status_request */
  Curl_polarssl_connect,             /* connect */
  Curl_polarssl_connect_nonblocking, /* connect_nonblocking */
  Curl_polarssl_get_internals,       /* get_internals */
  Curl_polarssl_close,               /* close_one */
  Curl_none_close_all,               /* close_all */
Changes to jni/curl/lib/vtls/polarssl_threadlock.c.
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
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







-
+
+

-
+
-
-
-
-
+
+
+
-
-
-
+
+

















-





-

+
+



-
-
+
-



+

-







-




-

+
+



-
-
+
-



+

-








+
-
-
+
+
-






-
-
+
-






+

-





+
-
-
+
+
-






-
-
+
-






+

-




 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if (defined(USE_POLARSSL) || defined(USE_MBEDTLS)) && \
    (defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32))
    ((defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
     (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)))

#if defined(USE_THREADS_POSIX)
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
#  ifdef HAVE_PTHREAD_H
#    include <pthread.h>
#  endif
#elif defined(USE_THREADS_WIN32)
#  include <pthread.h>
#  define POLARSSL_MUTEX_T pthread_mutex_t
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
#  ifdef HAVE_PROCESS_H
#    include <process.h>
#  endif
#  include <process.h>
#  define POLARSSL_MUTEX_T HANDLE
#endif

#include "polarssl_threadlock.h"
#include "curl_printf.h"
#include "curl_memory.h"
/* The last #include file should be: */
#include "memdebug.h"

/* number of thread locks */
#define NUMT                    2

/* This array will store all of the mutexes available to PolarSSL. */
static POLARSSL_MUTEX_T *mutex_buf = NULL;

int Curl_polarsslthreadlock_thread_setup(void)
{
  int i;
  int ret;

  mutex_buf = calloc(NUMT * sizeof(POLARSSL_MUTEX_T), 1);
  if(!mutex_buf)
    return 0;     /* error, no number of threads defined */

#ifdef HAVE_PTHREAD_H
  for(i = 0;  i < NUMT;  i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_init(&mutex_buf[i], NULL);
    if(ret)
      return 0; /* pthread_mutex_init failed */
  }
#elif defined(HAVE_PROCESS_H)
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
  for(i = 0;  i < NUMT;  i++) {
    mutex_buf[i] = CreateMutex(0, FALSE, 0);
    if(mutex_buf[i] == 0)
      return 0;  /* CreateMutex failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
#endif /* HAVE_PTHREAD_H */

  return 1; /* OK */
}

int Curl_polarsslthreadlock_thread_cleanup(void)
{
  int i;
  int ret;

  if(!mutex_buf)
    return 0; /* error, no threads locks defined */

#ifdef HAVE_PTHREAD_H
  for(i = 0; i < NUMT; i++) {
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
    ret = pthread_mutex_destroy(&mutex_buf[i]);
    if(ret)
      return 0; /* pthread_mutex_destroy failed */
  }
#elif defined(HAVE_PROCESS_H)
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
  for(i = 0; i < NUMT; i++) {
    ret = CloseHandle(mutex_buf[i]);
    if(!ret)
      return 0; /* CloseHandle failed */
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
#endif /* HAVE_PTHREAD_H */
  free(mutex_buf);
  mutex_buf = NULL;

  return 1; /* OK */
}

int Curl_polarsslthreadlock_lock_function(int n)
{
  if(n < NUMT) {
  int ret;
#ifdef HAVE_PTHREAD_H
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
  if(n < NUMT) {
    ret = pthread_mutex_lock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
  }
#elif defined(HAVE_PROCESS_H)
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
  if(n < NUMT) {
    ret = (WaitForSingleObject(mutex_buf[n], INFINITE) == WAIT_FAILED?1:0);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_lock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
#endif /* HAVE_PTHREAD_H */
  return 1; /* OK */
}

int Curl_polarsslthreadlock_unlock_function(int n)
{
  if(n < NUMT) {
  int ret;
#ifdef HAVE_PTHREAD_H
    int ret;
#if defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)
  if(n < NUMT) {
    ret = pthread_mutex_unlock(&mutex_buf[n]);
    if(ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_unlock failed */
    }
  }
#elif defined(HAVE_PROCESS_H)
#elif defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H)
  if(n < NUMT) {
    ret = ReleaseMutex(mutex_buf[n]);
    if(!ret) {
      DEBUGF(fprintf(stderr,
                     "Error: polarsslthreadlock_unlock_function failed\n"));
      return 0; /* pthread_mutex_lock failed */
    }
#endif /* USE_THREADS_POSIX && HAVE_PTHREAD_H */
  }
#endif /* HAVE_PTHREAD_H */
  return 1; /* OK */
}

#endif /* USE_POLARSSL || USE_MBEDTLS */
Changes to jni/curl/lib/vtls/polarssl_threadlock.h.
22
23
24
25
26
27
28
29

30
31

32
33
34
35
36
37
38
39
40
41
42
22
23
24
25
26
27
28

29


30




31
32
33
34
35
36
37







-
+
-
-
+
-
-
-
-







 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "curl_setup.h"

#if (defined USE_POLARSSL) || (defined USE_MBEDTLS)

#if defined(USE_THREADS_POSIX)
#if (defined(USE_THREADS_POSIX) && defined(HAVE_PTHREAD_H)) || \
#  define POLARSSL_MUTEX_T       pthread_mutex_t
#elif defined(USE_THREADS_WIN32)
    (defined(USE_THREADS_WIN32) && defined(HAVE_PROCESS_H))
#  define POLARSSL_MUTEX_T       HANDLE
#endif

#if defined(USE_THREADS_POSIX) || defined(USE_THREADS_WIN32)

int Curl_polarsslthreadlock_thread_setup(void);
int Curl_polarsslthreadlock_thread_cleanup(void);
int Curl_polarsslthreadlock_lock_function(int n);
int Curl_polarsslthreadlock_unlock_function(int n);

#else
Changes to jni/curl/lib/vtls/schannel.c.
54
55
56
57
58
59
60

61
62
63
64
65
66
67
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







+







#include "strerror.h"
#include "select.h" /* for the socket readyness */
#include "inet_pton.h" /* for IP addr SNI check */
#include "curl_multibyte.h"
#include "warnless.h"
#include "x509asn1.h"
#include "curl_printf.h"
#include "multiif.h"
#include "system_win32.h"

 /* The last #include file should be: */
#include "curl_memory.h"
#include "memdebug.h"

/* ALPN requires version 8.1 of the Windows SDK, which was
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
519
520
521
522
523
524
525

526
527
528
529
530
531
532







-







#ifdef HAS_MANUAL_VERIFY_API
      if(BACKEND->use_manual_cred_validation)
        schannel_cred.dwFlags = SCH_CRED_MANUAL_CRED_VALIDATION;
      else
#endif
        schannel_cred.dwFlags = SCH_CRED_AUTO_CRED_VALIDATION;

      /* TODO s/data->set.ssl.no_revoke/SSL_SET_OPTION(no_revoke)/g */
      if(data->set.ssl.no_revoke) {
        schannel_cred.dwFlags |= SCH_CRED_IGNORE_NO_REVOCATION_CHECK |
          SCH_CRED_IGNORE_REVOCATION_OFFLINE;

        DEBUGF(infof(data, "schannel: disabled server certificate revocation "
                     "checks\n"));
      }
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
864
865
866
867
868
869
870

871
872
873
874
875

876
877
878
879
880
881
882







-





-







schannel_connect_step2(struct connectdata *conn, int sockindex)
{
  int i;
  ssize_t nread = -1, written = -1;
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  unsigned char *reallocated_buffer;
  size_t reallocated_length;
  SecBuffer outbuf[3];
  SecBufferDesc outbuf_desc;
  SecBuffer inbuf[2];
  SecBufferDesc inbuf_desc;
  SECURITY_STATUS sspi_status = SEC_E_OK;
  TCHAR *host_name;
  CURLcode result;
  bool doread;
  char * const hostname = SSL_IS_PROXY() ? conn->http_proxy.host.name :
    conn->host.name;
  const char *pubkey_ptr;

  doread = (connssl->connecting_state != ssl_connect_2_writing) ? TRUE : FALSE;
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
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







-
+















+







    }
  }

  /* if we need a bigger buffer to read a full message, increase buffer now */
  if(BACKEND->encdata_length - BACKEND->encdata_offset <
     CURL_SCHANNEL_BUFFER_FREE_SIZE) {
    /* increase internal encrypted data buffer */
    reallocated_length = BACKEND->encdata_offset +
    size_t reallocated_length = BACKEND->encdata_offset +
      CURL_SCHANNEL_BUFFER_FREE_SIZE;
    reallocated_buffer = realloc(BACKEND->encdata_buffer,
                                 reallocated_length);

    if(reallocated_buffer == NULL) {
      failf(data, "schannel: unable to re-allocate memory");
      return CURLE_OUT_OF_MEMORY;
    }
    else {
      BACKEND->encdata_buffer = reallocated_buffer;
      BACKEND->encdata_length = reallocated_length;
    }
  }

  for(;;) {
    TCHAR *host_name;
    if(doread) {
      /* read encrypted handshake data from socket */
      result = Curl_read_plain(conn->sock[sockindex],
                               (char *) (BACKEND->encdata_buffer +
                                         BACKEND->encdata_offset),
                               BACKEND->encdata_length -
                               BACKEND->encdata_offset,
1265
1266
1267
1268
1269
1270
1271


1272
1273
1274
1275
1276
1277
1278
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279







+
+







         !memcmp(ALPN_HTTP_1_1, alpn_result.ProtocolId,
           ALPN_HTTP_1_1_LENGTH)) {
        conn->negnpn = CURL_HTTP_VERSION_1_1;
      }
    }
    else
      infof(data, "ALPN, server did not agree to a protocol\n");
    Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                        BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);
  }
#endif

  /* save the current session data for possible re-use */
  if(SSL_SET_OPTION(primary.sessionid)) {
    bool incache;
    struct curl_schannel_cred *old_cred = NULL;
2125
2126
2127
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148






2149
2150
2151
2152
2153
2154
2155
2126
2127
2128
2129
2130
2131
2132

2133
2134
2135




2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157







-



-
-
-
-









+
+
+
+
+
+







  CryptReleaseContext(hCryptProv, 0UL);
  return CURLE_OK;
}

static CURLcode pkp_pin_peer_pubkey(struct connectdata *conn, int sockindex,
                                    const char *pinnedpubkey)
{
  SECURITY_STATUS sspi_status;
  struct Curl_easy *data = conn->data;
  struct ssl_connect_data *connssl = &conn->ssl[sockindex];
  CERT_CONTEXT *pCertContextServer = NULL;
  const char *x509_der;
  DWORD x509_der_len;
  curl_X509certificate x509_parsed;
  curl_asn1Element *pubkey;

  /* Result is returned to caller */
  CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;

  /* if a path wasn't specified, don't pin */
  if(!pinnedpubkey)
    return CURLE_OK;

  do {
    SECURITY_STATUS sspi_status;
    const char *x509_der;
    DWORD x509_der_len;
    curl_X509certificate x509_parsed;
    curl_asn1Element *pubkey;

    sspi_status =
      s_pSecFn->QueryContextAttributes(&BACKEND->ctxt->ctxt_handle,
                                       SECPKG_ATTR_REMOTE_CERT_CONTEXT,
                                       &pCertContextServer);

    if((sspi_status != SEC_E_OK) || (pCertContextServer == NULL)) {
      char buffer[STRERROR_LEN];
Changes to jni/curl/lib/vtls/sectransp.c.
27
28
29
30
31
32
33

34
35
36
37
38
39
40
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41







+







 */

#include "curl_setup.h"

#include "urldata.h" /* for the Curl_easy definition */
#include "curl_base64.h"
#include "strtok.h"
#include "multiif.h"

#ifdef USE_SECTRANSP

#ifdef __clang__
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wtautological-pointer-compare"
#endif /* __clang__ */
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1899
1900
1901
1902
1903
1904
1905

1906
1907
1908
1909
1910
1911
1912







-







    return CURLE_SSL_CIPHER;
  }

#if CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7
  /* We want to enable 1/n-1 when using a CBC cipher unless the user
     specifically doesn't want us doing that: */
  if(SSLSetSessionOption != NULL) {
    /* TODO s/data->set.ssl.enable_beast/SSL_SET_OPTION(enable_beast)/g */
    SSLSetSessionOption(BACKEND->ssl_ctx, kSSLSessionOptionSendOneByteRecord,
                      !data->set.ssl.enable_beast);
    SSLSetSessionOption(BACKEND->ssl_ctx, kSSLSessionOptionFalseStart,
                      data->set.ssl.falsestart); /* false start support */
  }
#endif /* CURL_BUILD_MAC_10_9 || CURL_BUILD_IOS_7 */

2646
2647
2648
2649
2650
2651
2652



2653
2654
2655
2656
2657
2658
2659
2646
2647
2648
2649
2650
2651
2652
2653
2654
2655
2656
2657
2658
2659
2660
2661
2662







+
+
+







#endif
        if(chosenProtocol &&
           !CFStringCompare(chosenProtocol, CFSTR(ALPN_HTTP_1_1), 0)) {
          conn->negnpn = CURL_HTTP_VERSION_1_1;
        }
        else
          infof(data, "ALPN, server did not agree to a protocol\n");

        Curl_multiuse_state(conn, conn->negnpn == CURL_HTTP_VERSION_2 ?
                            BUNDLE_MULTIPLEX : BUNDLE_NO_MULTIUSE);

        /* chosenProtocol is a reference to the string within alpnArr
           and doesn't need to be freed separately */
        if(alpnArr)
          CFRelease(alpnArr);
      }
    }
2956
2957
2958
2959
2960
2961
2962

2963
2964

2965
2966
2967
2968
2969
2970
2971
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976







+


+







  int what;
  int rc;
  char buf[120];

  if(!BACKEND->ssl_ctx)
    return 0;

#ifndef CURL_DISABLE_FTP
  if(data->set.ftp_ccc != CURLFTPSSL_CCC_ACTIVE)
    return 0;
#endif

  Curl_sectransp_close(conn, sockindex);

  rc = 0;

  what = SOCKET_READABLE(conn->sock[sockindex], SSL_SHUTDOWN_TIMEOUT);

Changes to jni/curl/lib/vtls/vtls.c.
494
495
496
497
498
499
500
501
502
503

504
505
506
507
508
509
510
494
495
496
497
498
499
500

501
502
503
504
505
506
507
508
509
510







-


+








  return CURLE_OK;
}


void Curl_ssl_close_all(struct Curl_easy *data)
{
  size_t i;
  /* kill the session ID cache if not shared */
  if(data->state.session && !SSLSESSION_SHARED(data)) {
    size_t i;
    for(i = 0; i < data->set.general_ssl.max_ssl_sessions; i++)
      /* the single-killer function handles empty table slots */
      Curl_ssl_kill_session(&data->state.session[i]);

    /* free the cache data */
    Curl_safefree(data->state.session);
  }
640
641
642
643
644
645
646
647
648
649
650
651

652
653
654
655
656
657
658
640
641
642
643
644
645
646

647
648
649
650
651
652
653
654
655
656
657
658







-




+







                           int connindex)
{
  return Curl_ssl->data_pending(conn, connindex);
}

void Curl_ssl_free_certinfo(struct Curl_easy *data)
{
  int i;
  struct curl_certinfo *ci = &data->info.certs;

  if(ci->num_of_certs) {
    /* free all individual lists used */
    int i;
    for(i = 0; i<ci->num_of_certs; i++) {
      curl_slist_free_all(ci->certinfo[i]);
      ci->certinfo[i] = NULL;
    }

    free(ci->certinfo); /* free the actual array too */
    ci->certinfo = NULL;
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
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







-
-
-

-
-
-
-









+
+
+
+
+








CURLcode Curl_pin_peer_pubkey(struct Curl_easy *data,
                              const char *pinnedpubkey,
                              const unsigned char *pubkey, size_t pubkeylen)
{
  FILE *fp;
  unsigned char *buf = NULL, *pem_ptr = NULL;
  long filesize;
  size_t size, pem_len;
  CURLcode pem_read;
  CURLcode result = CURLE_SSL_PINNEDPUBKEYNOTMATCH;
  CURLcode encode;
  size_t encodedlen, pinkeylen;
  char *encoded, *pinkeycopy, *begin_pos, *end_pos;
  unsigned char *sha256sumdigest = NULL;

  /* if a path wasn't specified, don't pin */
  if(!pinnedpubkey)
    return CURLE_OK;
  if(!pubkey || !pubkeylen)
    return result;

  /* only do this if pinnedpubkey starts with "sha256//", length 8 */
  if(strncmp(pinnedpubkey, "sha256//", 8) == 0) {
    CURLcode encode;
    size_t encodedlen, pinkeylen;
    char *encoded, *pinkeycopy, *begin_pos, *end_pos;
    unsigned char *sha256sumdigest;

    if(!Curl_ssl->sha256sum) {
      /* without sha256 support, this cannot match */
      return result;
    }

    /* compute sha256sum of public key */
    sha256sumdigest = malloc(CURL_SHA256_DIGEST_LENGTH);
891
892
893
894
895
896
897




898
899
900
901
902
903
904
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906







+
+
+
+







  }

  fp = fopen(pinnedpubkey, "rb");
  if(!fp)
    return result;

  do {
    long filesize;
    size_t size, pem_len;
    CURLcode pem_read;

    /* Determine the file's size */
    if(fseek(fp, 0, SEEK_END))
      break;
    filesize = ftell(fp);
    if(fseek(fp, 0, SEEK_SET))
      break;
    if(filesize < 0 || filesize > MAX_PINNED_PUBKEY_SIZE)
1235
1236
1237
1238
1239
1240
1241

1242
1243
1244
1245
1246

1247
1248
1249
1250
1251

1252
1253
1254
1255
1256
1257
1258
1259

1260
1261
1262
1263
1264
1265
1266

1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291

1292
1293
1294
1295
1296
1297
1298
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248

1249
1250
1251
1252
1253

1254
1255
1256
1257
1258
1259
1260
1261

1262
1263
1264
1265
1266
1267
1268

1269
1270
1271
1272
1273
1274
1275

1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301







+




-
+




-
+







-
+






-
+






-


















+







  static size_t total;
  const struct Curl_ssl *current;

  current = Curl_ssl == &Curl_ssl_multi ? available_backends[0] : Curl_ssl;

  if(current != selected) {
    char *p = backends;
    char *end = backends + sizeof(backends);
    int i;

    selected = current;

    for(i = 0; available_backends[i]; i++) {
    for(i = 0; available_backends[i] && p < (end - 4); i++) {
      if(i)
        *(p++) = ' ';
      if(selected != available_backends[i])
        *(p++) = '(';
      p += available_backends[i]->version(p, backends + sizeof(backends) - p);
      p += available_backends[i]->version(p, end - p - 2);
      if(selected != available_backends[i])
        *(p++) = ')';
    }
    *p = '\0';
    total = p - backends;
  }

  if(size < total)
  if(size > total)
    memcpy(buffer, backends, total + 1);
  else {
    memcpy(buffer, backends, size - 1);
    buffer[size - 1] = '\0';
  }

  return total;
  return CURLMIN(size - 1, total);
}

static int multissl_init(const struct Curl_ssl *backend)
{
  const char *env;
  char *env_tmp;
  int i;

  if(Curl_ssl != &Curl_ssl_multi)
    return 1;

  if(backend) {
    Curl_ssl = backend;
    return 0;
  }

  if(!available_backends[0])
    return 1;

  env = env_tmp = curl_getenv("CURL_SSL_BACKEND");
#ifdef CURL_DEFAULT_SSL_BACKEND
  if(!env)
    env = CURL_DEFAULT_SSL_BACKEND;
#endif
  if(env) {
    int i;
    for(i = 0; available_backends[i]; i++) {
      if(strcasecompare(env, available_backends[i]->info.name)) {
        Curl_ssl = available_backends[i];
        curl_free(env_tmp);
        return 0;
      }
    }
Changes to jni/curl/lib/wildcard.c.
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
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







-
+















+
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include "curl_setup.h"

#ifndef CURL_DISABLE_FTP

#include "wildcard.h"
#include "llist.h"
#include "fileinfo.h"
/* The last 3 #include files should be in this order */
#include "curl_printf.h"
#include "curl_memory.h"
63
64
65
66
67
68
69


65
66
67
68
69
70
71
72
73







+
+
  wc->path = NULL;
  free(wc->pattern);
  wc->pattern = NULL;

  wc->customptr = NULL;
  wc->state = CURLWC_INIT;
}

#endif /* if disabled */
Changes to jni/curl/lib/wildcard.h.
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
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









-
+














-
+

+







#ifndef HEADER_CURL_WILDCARD_H
#define HEADER_CURL_WILDCARD_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2010 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 2010 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/

#include <curl/curl.h>
#include "curl_setup.h"

#ifndef CURL_DISABLE_FTP
#include "llist.h"

/* list of wildcard process states */
typedef enum {
  CURLWC_CLEAR = 0,
  CURLWC_INIT = 1,
  CURLWC_MATCHING, /* library is trying to get list of addresses for
54
55
56
57
58
59
60





61
55
56
57
58
59
60
61
62
63
64
65
66
67







+
+
+
+
+

};

CURLcode Curl_wildcard_init(struct WildcardData *wc);
void Curl_wildcard_dtor(struct WildcardData *wc);

struct Curl_easy;

#else
/* FTP is disabled */
#define Curl_wildcard_dtor(x)
#endif

#endif /* HEADER_CURL_WILDCARD_H */
Changes to jni/curl/lib/x509asn1.c.
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
262
263
264
265
266
267
268


269
270
271
272
273
274
275







-
-







 */
static ssize_t
utf8asn1str(char **to, int type, const char *from, const char *end)
{
  size_t inlength = end - from;
  int size = 1;
  size_t outlength;
  int charsize;
  unsigned int wc;
  char *buf;

  *to = NULL;
  switch(type) {
  case CURL_ASN1_BMP_STRING:
    size = 2;
    break;
301
302
303
304
305
306
307



308
309
310
311
312
313
314
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315







+
+
+







    /* Just copy. */
    outlength = inlength;
    if(outlength)
      memcpy(buf, from, outlength);
  }
  else {
    for(outlength = 0; from < end;) {
      int charsize;
      unsigned int wc;

      wc = 0;
      switch(size) {
      case 4:
        wc = (wc << 8) | *(const unsigned char *) from++;
        wc = (wc << 8) | *(const unsigned char *) from++;
        /* FALLTHROUGH */
      case 2:
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
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







-
-
-








+
+
+








-
+
+


+







static void do_pubkey(struct Curl_easy *data, int certnum,
                      const char *algo, curl_asn1Element *param,
                      curl_asn1Element *pubkey)
{
  curl_asn1Element elem;
  curl_asn1Element pk;
  const char *p;
  const char *q;
  unsigned long len;
  unsigned int i;

  /* Generate all information records for the public key. */

  /* Get the public key (single element). */
  if(!getASN1Element(&pk, pubkey->beg + 1, pubkey->end))
    return;

  if(strcasecompare(algo, "rsaEncryption")) {
    const char *q;
    unsigned long len;

    p = getASN1Element(&elem, pk.beg, pk.end);
    if(!p)
      return;

    /* Compute key length. */
    for(q = elem.beg; !*q && q < elem.end; q++)
      ;
    len = (unsigned long)((elem.end - q) * 8);
    if(len)
    if(len) {
      unsigned int i;
      for(i = *(unsigned char *) q; !(i & 0x80); i <<= 1)
        len--;
    }
    if(len > 32)
      elem.beg = q;     /* Strip leading zero bytes. */
    if(!certnum)
      infof(data, "   RSA Public Key (%lu bits)\n", len);
    if(data->set.ssl.certinfo) {
      q = curl_maprintf("%lu", len);
      if(q) {
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1055
1056
1057
1058
1059
1060
1061


1062
1063
1064
1065
1066
1067
1068







-
-







  if(data->set.ssl.certinfo)
    Curl_ssl_push_certinfo(data, certnum, "Public Key Algorithm", ccp);
  if(!certnum)
    infof(data, "   Public Key Algorithm: %s\n", ccp);
  do_pubkey(data, certnum, ccp, &param, &cert.subjectPublicKey);
  free((char *) ccp);

/* TODO: extensions. */

  /* Signature. */
  ccp = ASN1tostr(&cert.signature, 0);
  if(!ccp)
    return CURLE_OUT_OF_MEMORY;
  if(data->set.ssl.certinfo)
    Curl_ssl_push_certinfo(data, certnum, "Signature", ccp);
  if(!certnum)
Changes to jni/curl/m4/curl-functions.m4.
2908
2909
2910
2911
2912
2913
2914



































































































































































































2915
2916
2917
2918
2919
2920
2921
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927
2928
2929
2930
2931
2932
2933
2934
2935
2936
2937
2938
2939
2940
2941
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976
2977
2978
2979
2980
2981
2982
2983
2984
2985
2986
2987
2988
2989
2990
2991
2992
2993
2994
2995
2996
2997
2998
2999
3000
3001
3002
3003
3004
3005
3006
3007
3008
3009
3010
3011
3012
3013
3014
3015
3016
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055
3056
3057
3058
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077
3078
3079
3080
3081
3082
3083
3084
3085
3086
3087
3088
3089
3090
3091
3092
3093
3094
3095
3096
3097
3098
3099
3100
3101
3102
3103
3104
3105
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115
3116







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







    curl_cv_func_gethostname="yes"
  else
    AC_MSG_RESULT([no])
    curl_cv_func_gethostname="no"
  fi
])

dnl CURL_CHECK_FUNC_GETPEERNAME
dnl -------------------------------------------------
dnl Verify if getpeername is available, prototyped, and
dnl can be compiled. If all of these are true, and
dnl usage has not been previously disallowed with
dnl shell variable curl_disallow_getpeername, then
dnl HAVE_GETPEERNAME will be defined.

AC_DEFUN([CURL_CHECK_FUNC_GETPEERNAME], [
  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
  AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
  AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  #
  tst_links_getpeername="unknown"
  tst_proto_getpeername="unknown"
  tst_compi_getpeername="unknown"
  tst_allow_getpeername="unknown"
  #
  AC_MSG_CHECKING([if getpeername can be linked])
  AC_LINK_IFELSE([
    AC_LANG_PROGRAM([[
      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket
    ]],[[
      if(0 != getpeername(0, (void *)0, (void *)0))
        return 1;
    ]])
  ],[
    AC_MSG_RESULT([yes])
    tst_links_getpeername="yes"
  ],[
    AC_MSG_RESULT([no])
    tst_links_getpeername="no"
  ])
  #
  if test "$tst_links_getpeername" = "yes"; then
    AC_MSG_CHECKING([if getpeername is prototyped])
    AC_EGREP_CPP([getpeername],[
      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket
    ],[
      AC_MSG_RESULT([yes])
      tst_proto_getpeername="yes"
    ],[
      AC_MSG_RESULT([no])
      tst_proto_getpeername="no"
    ])
  fi
  #
  if test "$tst_proto_getpeername" = "yes"; then
    AC_MSG_CHECKING([if getpeername is compilable])
    AC_COMPILE_IFELSE([
      AC_LANG_PROGRAM([[
        $curl_includes_winsock2
        $curl_includes_bsdsocket
        $curl_includes_sys_socket
      ]],[[
        if(0 != getpeername(0, (void *)0, (void *)0))
          return 1;
      ]])
    ],[
      AC_MSG_RESULT([yes])
      tst_compi_getpeername="yes"
    ],[
      AC_MSG_RESULT([no])
      tst_compi_getpeername="no"
    ])
  fi
  #
  if test "$tst_compi_getpeername" = "yes"; then
    AC_MSG_CHECKING([if getpeername usage allowed])
    if test "x$curl_disallow_getpeername" != "xyes"; then
      AC_MSG_RESULT([yes])
      tst_allow_getpeername="yes"
    else
      AC_MSG_RESULT([no])
      tst_allow_getpeername="no"
    fi
  fi
  #
  AC_MSG_CHECKING([if getpeername might be used])
  if test "$tst_links_getpeername" = "yes" &&
     test "$tst_proto_getpeername" = "yes" &&
     test "$tst_compi_getpeername" = "yes" &&
     test "$tst_allow_getpeername" = "yes"; then
    AC_MSG_RESULT([yes])
    AC_DEFINE_UNQUOTED(HAVE_GETPEERNAME, 1,
      [Define to 1 if you have the getpeername function.])
    curl_cv_func_getpeername="yes"
  else
    AC_MSG_RESULT([no])
    curl_cv_func_getpeername="no"
  fi
])

dnl CURL_CHECK_FUNC_GETSOCKNAME
dnl -------------------------------------------------
dnl Verify if getsockname is available, prototyped, and
dnl can be compiled. If all of these are true, and
dnl usage has not been previously disallowed with
dnl shell variable curl_disallow_getsockname, then
dnl HAVE_GETSOCKNAME will be defined.

AC_DEFUN([CURL_CHECK_FUNC_GETSOCKNAME], [
  AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl
  AC_REQUIRE([CURL_INCLUDES_UNISTD])dnl
  AC_REQUIRE([CURL_PREPROCESS_CALLCONV])dnl
  AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl
  #
  tst_links_getsockname="unknown"
  tst_proto_getsockname="unknown"
  tst_compi_getsockname="unknown"
  tst_allow_getsockname="unknown"
  #
  AC_MSG_CHECKING([if getsockname can be linked])
  AC_LINK_IFELSE([
    AC_LANG_PROGRAM([[
      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket
    ]],[[
      if(0 != getsockname(0, (void *)0, (void *)0))
        return 1;
    ]])
  ],[
    AC_MSG_RESULT([yes])
    tst_links_getsockname="yes"
  ],[
    AC_MSG_RESULT([no])
    tst_links_getsockname="no"
  ])
  #
  if test "$tst_links_getsockname" = "yes"; then
    AC_MSG_CHECKING([if getsockname is prototyped])
    AC_EGREP_CPP([getsockname],[
      $curl_includes_winsock2
      $curl_includes_bsdsocket
      $curl_includes_sys_socket
    ],[
      AC_MSG_RESULT([yes])
      tst_proto_getsockname="yes"
    ],[
      AC_MSG_RESULT([no])
      tst_proto_getsockname="no"
    ])
  fi
  #
  if test "$tst_proto_getsockname" = "yes"; then
    AC_MSG_CHECKING([if getsockname is compilable])
    AC_COMPILE_IFELSE([
      AC_LANG_PROGRAM([[
        $curl_includes_winsock2
        $curl_includes_bsdsocket
        $curl_includes_sys_socket
      ]],[[
        if(0 != getsockname(0, (void *)0, (void *)0))
          return 1;
      ]])
    ],[
      AC_MSG_RESULT([yes])
      tst_compi_getsockname="yes"
    ],[
      AC_MSG_RESULT([no])
      tst_compi_getsockname="no"
    ])
  fi
  #
  if test "$tst_compi_getsockname" = "yes"; then
    AC_MSG_CHECKING([if getsockname usage allowed])
    if test "x$curl_disallow_getsockname" != "xyes"; then
      AC_MSG_RESULT([yes])
      tst_allow_getsockname="yes"
    else
      AC_MSG_RESULT([no])
      tst_allow_getsockname="no"
    fi
  fi
  #
  AC_MSG_CHECKING([if getsockname might be used])
  if test "$tst_links_getsockname" = "yes" &&
     test "$tst_proto_getsockname" = "yes" &&
     test "$tst_compi_getsockname" = "yes" &&
     test "$tst_allow_getsockname" = "yes"; then
    AC_MSG_RESULT([yes])
    AC_DEFINE_UNQUOTED(HAVE_GETSOCKNAME, 1,
      [Define to 1 if you have the getsockname function.])
    curl_cv_func_getsockname="yes"
  else
    AC_MSG_RESULT([no])
    curl_cv_func_getsockname="no"
  fi
])

dnl CURL_CHECK_FUNC_GETIFADDRS
dnl -------------------------------------------------
dnl Verify if getifaddrs is available, prototyped, can
dnl be compiled and seems to work. If all of these are
dnl true, and usage has not been previously disallowed
dnl with shell variable curl_disallow_getifaddrs, then
Changes to jni/curl/packages/Makefile.in.
435
436
437
438
439
440
441
442

443
444

445
446
447
448
449
450
451
435
436
437
438
439
440
441

442
443

444
445
446
447
448
449
450
451







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu packages/Makefile
	  $(AUTOMAKE) --foreign packages/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/packages/OS400/ccsidcurl.c.
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
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







-
+









-
-
+
+







  ***  If `cstr' is non-zero, conversion is set up to stop whenever a
  ***   null character is encountered.
  ***  See iconv_open() IBM description in "National Language Support API".
  **/

  makeOS400IconvCode(fromcode, ccsidin);
  makeOS400IconvCode(tocode, ccsidout);
  memset(tocode + 13, 0, sizeof tocode - 13);   /* Dest. code id format. */
  memset(tocode + 13, 0, sizeof(tocode) - 13);   /* Dest. code id format. */

  if(cstr)
    fromcode[18] = '1';                         /* Set null-terminator flag. */

  return iconv_open(tocode, fromcode);
}


static int
convert(char * d, size_t dlen, int dccsid,
        const char * s, int slen, int sccsid)
convert(char *d, size_t dlen, int dccsid,
        const char *s, int slen, int sccsid)

{
  int i;
  iconv_t cd;
  size_t lslen;

  /**
157
158
159
160
161
162
163
164

165
166
167
168


169
170
171
172
173
174
175
157
158
159
160
161
162
163

164
165
166


167
168
169
170
171
172
173
174
175







-
+


-
-
+
+








  iconv_close(cd);
  return i;
}


static char *
dynconvert(int dccsid, const char * s, int slen, int sccsid)
dynconvert(int dccsid, const char *s, int slen, int sccsid)

{
  char * d;
  char * cp;
  char *d;
  char *cp;
  size_t dlen;
  int l;
  static const char nullbyte = 0;

  /* Like convert, but the destination is allocated and returned. */

  dlen = (size_t) (slen < 0? strlen(s): slen) + 1;
209
210
211
212
213
214
215
216

217
218
219

220
221
222
223

224
225
226
227
228
229
230
209
210
211
212
213
214
215

216
217
218

219
220
221
222

223
224
225
226
227
228
229
230







-
+


-
+



-
+







    }

  return d;
}


static struct curl_slist *
slist_convert(int dccsid, struct curl_slist * from, int sccsid)
slist_convert(int dccsid, struct curl_slist *from, int sccsid)

{
  struct curl_slist * to = (struct curl_slist *) NULL;
  struct curl_slist *to = (struct curl_slist *) NULL;

  for(; from; from = from->next) {
    struct curl_slist *nl;
    char * cp = dynconvert(dccsid, from->data, -1, sccsid);
    char *cp = dynconvert(dccsid, from->data, -1, sccsid);

    if(!cp) {
      curl_slist_free_all(to);
      return (struct curl_slist *) NULL;
    }
    nl = Curl_slist_append_nodup(to, cp);
    if(!nl) {
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
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







-
-
+
+









-
+
+










-
+



-
-
+
+









char *
curl_version_ccsid(unsigned int ccsid)

{
  int i;
  char * aversion;
  char * eversion;
  char *aversion;
  char *eversion;

  aversion = curl_version();

  if(!aversion)
    return aversion;

  i = strlen(aversion) + 1;
  i *= MAX_CONV_EXPANSION;

  if(!(eversion = Curl_thread_buffer(LK_CURL_VERSION, i)))
  eversion = Curl_thread_buffer(LK_CURL_VERSION, i);
  if(!eversion)
    return (char *) NULL;

  if(convert(eversion, i, ccsid, aversion, -1, ASCII_CCSID) < 0)
    return (char *) NULL;

  return eversion;
}


char *
curl_easy_escape_ccsid(CURL * handle, const char * string, int length,
curl_easy_escape_ccsid(CURL *handle, const char *string, int length,
                       unsigned int sccsid, unsigned int dccsid)

{
  char * s;
  char * d;
  char *s;
  char *d;

  if(!string) {
    errno = EINVAL;
    return (char *) NULL;
    }

  s = dynconvert(ASCII_CCSID, string, length? length: -1, sccsid);
291
292
293
294
295
296
297
298
299


300
301
302
303
304


305
306
307
308
309
310
311
292
293
294
295
296
297
298


299
300
301
302
303


304
305
306
307
308
309
310
311
312







-
-
+
+



-
-
+
+







  s = dynconvert(dccsid, d, -1, ASCII_CCSID);
  free(d);
  return s;
}


char *
curl_easy_unescape_ccsid(CURL * handle, const char * string, int length,
                         int * outlength,
curl_easy_unescape_ccsid(CURL *handle, const char *string, int length,
                         int *outlength,
                         unsigned int sccsid, unsigned int dccsid)

{
  char * s;
  char * d;
  char *s;
  char *d;

  if(!string) {
    errno = EINVAL;
    return (char *) NULL;
    }

  s = dynconvert(ASCII_CCSID, string, length? length: -1, sccsid);
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
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







-
-
+
+


-
+


















-
+


-
+


















-
+







    *outlength = strlen(s);

  return s;
}


struct curl_slist *
curl_slist_append_ccsid(struct curl_slist * list,
                        const char * data, unsigned int ccsid)
curl_slist_append_ccsid(struct curl_slist *list,
                        const char *data, unsigned int ccsid)

{
  char * s;
  char *s;

  s = (char *) NULL;

  if(!data)
    return curl_slist_append(list, data);

  s = dynconvert(ASCII_CCSID, data, -1, ccsid);

  if(!s)
    return (struct curl_slist *) NULL;

  list = curl_slist_append(list, s);
  free(s);
  return list;
}


time_t
curl_getdate_ccsid(const char * p, const time_t * unused, unsigned int ccsid)
curl_getdate_ccsid(const char *p, const time_t * unused, unsigned int ccsid)

{
  char * s;
  char *s;
  time_t t;

  if(!p)
    return curl_getdate(p, unused);

  s = dynconvert(ASCII_CCSID, p, -1, ccsid);

  if(!s)
    return (time_t) -1;

  t = curl_getdate(s, unused);
  free(s);
  return t;
}


static int
convert_version_info_string(const char * * stringp,
                            char * * bufp, int * left, unsigned int ccsid)
                            char * * bufp, int *left, unsigned int ccsid)

{
  /* Helper for curl_version_info_ccsid(): convert a string if defined.
     Result is stored in the `*left'-byte buffer at `*bufp'.
     `*bufp' and `*left' are updated accordingly.
     Return 0 if ok, else -1. */

399
400
401
402
403
404
405
406

407
408
409
410
411
412
413
400
401
402
403
404
405
406

407
408
409
410
411
412
413
414







-
+









curl_version_info_data *
curl_version_info_ccsid(CURLversion stamp, unsigned int ccsid)

{
  curl_version_info_data * p;
  char * cp;
  char *cp;
  int n;
  int nproto;
  curl_version_info_data * id;

  /* The assertion below is possible, because although the second operand
     is an enum member, the first is a #define. In that case, the OS/400 C
     compiler seems to compare string values after substitution. */
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
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







-
+






-
+


-
+







  n *= MAX_CONV_EXPANSION;

  if(nproto)
    n += nproto * sizeof(const char *);

  cp = Curl_thread_buffer(LK_VERSION_INFO_DATA, n);
  id = (curl_version_info_data *) Curl_thread_buffer(LK_VERSION_INFO,
                                                     sizeof *id);
                                                     sizeof(*id));

  if(!id || !cp)
    return (curl_version_info_data *) NULL;

  /* Copy data and convert strings. */

  memcpy((char *) id, (char *) p, sizeof *p);
  memcpy((char *) id, (char *) p, sizeof(*p));

  if(id->protocols) {
    int i = nproto * sizeof id->protocols[0];
    int i = nproto * sizeof(id->protocols[0]);

    id->protocols = (const char * const *) cp;
    memcpy(cp, (char *) p->protocols, i);
    cp += i;
    n -= i;

    for(i = 0; id->protocols[i]; i++)
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
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







-
-
+
+








-
+
+














-
-
+
+








-
+
+














-
-
+
+








-
+
+









const char *
curl_easy_strerror_ccsid(CURLcode error, unsigned int ccsid)

{
  int i;
  const char * s;
  char * buf;
  const char *s;
  char *buf;

  s = curl_easy_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  if(!(buf = Curl_thread_buffer(LK_EASY_STRERROR, i)))
  buf = Curl_thread_buffer(LK_EASY_STRERROR, i);
  if(!buf)
    return (const char *) NULL;

  if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
    return (const char *) NULL;

  return (const char *) buf;
}


const char *
curl_share_strerror_ccsid(CURLSHcode error, unsigned int ccsid)

{
  int i;
  const char * s;
  char * buf;
  const char *s;
  char *buf;

  s = curl_share_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  if(!(buf = Curl_thread_buffer(LK_SHARE_STRERROR, i)))
  buf = Curl_thread_buffer(LK_SHARE_STRERROR, i);
  if(!buf)
    return (const char *) NULL;

  if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
    return (const char *) NULL;

  return (const char *) buf;
}


const char *
curl_multi_strerror_ccsid(CURLMcode error, unsigned int ccsid)

{
  int i;
  const char * s;
  char * buf;
  const char *s;
  char *buf;

  s = curl_multi_strerror(error);

  if(!s)
    return s;

  i = MAX_CONV_EXPANSION * (strlen(s) + 1);

  if(!(buf = Curl_thread_buffer(LK_MULTI_STRERROR, i)))
  buf = Curl_thread_buffer(LK_MULTI_STRERROR, i);
  if(!buf)
    return (const char *) NULL;

  if(convert(buf, i, ccsid, s, -1, ASCII_CCSID) < 0)
    return (const char *) NULL;

  return (const char *) buf;
}
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
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







-
+



-
+

















-
+
















-
+



-
+
+


-
-
-
+
+
+







    }
    free((char *) info);
  }
}


CURLcode
curl_easy_getinfo_ccsid(CURL * curl, CURLINFO info, ...)
curl_easy_getinfo_ccsid(CURL *curl, CURLINFO info, ...)

{
  va_list arg;
  void * paramp;
  void *paramp;
  CURLcode ret;
  unsigned int ccsid;
  char * * cpp;
  struct Curl_easy * data;
  struct curl_slist * * slp;
  struct curl_certinfo * cipf;
  struct curl_certinfo * cipt;

  /* WARNING: unlike curl_easy_getinfo(), the strings returned by this
     procedure have to be free'ed. */

  data = (struct Curl_easy *) curl;
  va_start(arg, info);
  paramp = va_arg(arg, void *);
  ret = Curl_getinfo(data, info, paramp);

  if(ret == CURLE_OK)
    switch ((int) info & CURLINFO_TYPEMASK) {
    switch((int) info & CURLINFO_TYPEMASK) {

    case CURLINFO_STRING:
      ccsid = va_arg(arg, unsigned int);
      cpp = (char * *) paramp;

      if(*cpp) {
        *cpp = dynconvert(ccsid, *cpp, -1, ASCII_CCSID);

        if(!*cpp)
          ret = CURLE_OUT_OF_MEMORY;
      }

      break;

    case CURLINFO_SLIST:
      ccsid = va_arg(arg, unsigned int);
      switch (info) {
      switch(info) {
      case CURLINFO_CERTINFO:
        cipf = *(struct curl_certinfo * *) paramp;
        if(cipf) {
          if(!(cipt = (struct curl_certinfo *) malloc(sizeof *cipt)))
          cipt = (struct curl_certinfo *) malloc(sizeof(*cipt));
          if(!cipt)
            ret = CURLE_OUT_OF_MEMORY;
          else {
            cipt->certinfo = (struct curl_slist * *)
                             calloc(cipf->num_of_certs +
                                    1, sizeof(struct curl_slist *));
            cipt->certinfo = (struct curl_slist **)
              calloc(cipf->num_of_certs +
                     1, sizeof(struct curl_slist *));
            if(!cipt->certinfo)
              ret = CURLE_OUT_OF_MEMORY;
            else {
              int i;

              cipt->num_of_certs = cipf->num_of_certs;
              for(i = 0; i < cipf->num_of_certs; i++)
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
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







-
-
-
+
+
+
+

+













-
+








      case CURLINFO_TLS_SESSION:
      case CURLINFO_TLS_SSL_PTR:
      case CURLINFO_SOCKET:
        break;

      default:
        slp = (struct curl_slist * *) paramp;
        if(*slp)
          if(!(*slp = slist_convert(ccsid, *slp, ASCII_CCSID)))
        slp = (struct curl_slist **) paramp;
        if(*slp) {
          *slp = slist_convert(ccsid, *slp, ASCII_CCSID);
          if(!*slp)
            ret = CURLE_OUT_OF_MEMORY;
        }
        break;
      }
    }

  va_end(arg);
  return ret;
}


static int
Curl_is_formadd_string(CURLformoption option)

{
  switch (option) {
  switch(option) {

  case CURLFORM_FILENAME:
  case CURLFORM_CONTENTTYPE:
  case CURLFORM_BUFFER:
  case CURLFORM_FILE:
  case CURLFORM_FILECONTENT:
  case CURLFORM_COPYCONTENTS:
741
742
743
744
745
746
747
748
749


750
751
752
753
754
755
756
748
749
750
751
752
753
754


755
756
757
758
759
760
761
762
763







-
-
+
+








static int
Curl_formadd_convert(struct curl_forms * forms,
                     int formx, int lengthx, unsigned int ccsid)

{
  int l;
  char * cp;
  char * cp2;
  char *cp;
  char *cp2;

  if(formx < 0 || !forms[formx].value)
    return 0;

  if(lengthx >= 0)
    l = (int) forms[lengthx].value;
  else
791
792
793
794
795
796
797
798

799
800
801
802
803
804
805
798
799
800
801
802
803
804

805
806
807
808
809
810
811
812







-
+







  va_list arg;
  CURLformoption option;
  CURLFORMcode result;
  struct curl_forms * forms;
  struct curl_forms * lforms;
  struct curl_forms * tforms;
  unsigned int lformlen;
  const char * value;
  const char *value;
  unsigned int ccsid;
  int nargs;
  int namex;
  int namelengthx;
  int contentx;
  int lengthx;
  unsigned int contentccsid;
819
820
821
822
823
824
825
826

827
828
829
830
831
832
833
826
827
828
829
830
831
832

833
834
835
836
837
838
839
840







-
+







     list is such a point, but CURLFORM_CONTENTTYPE is also used here as a
     natural separator between content data definitions; this seems to be
     in accordance with FormAdd() behavior. */

  /* Allocate the local curl_forms array. */

  lformlen = ALLOC_GRANULE;
  lforms = malloc(lformlen * sizeof *lforms);
  lforms = malloc(lformlen * sizeof(*lforms));

  if(!lforms)
    return CURL_FORMADD_MEMORY;

  /* Process the arguments, copying them into local array, latching conversion
     indexes and converting when needed. */

841
842
843
844
845
846
847
848

849
850
851
852
853
854
855
848
849
850
851
852
853
854

855
856
857
858
859
860
861
862







-
+







  va_start(arg, last_post);

  for(;;) {
    /* Make sure there is still room for an item in local array. */

    if(nargs >= lformlen) {
      lformlen += ALLOC_GRANULE;
      tforms = realloc(lforms, lformlen * sizeof *lforms);
      tforms = realloc(lforms, lformlen * sizeof(*lforms));

      if(!tforms) {
        result = CURL_FORMADD_MEMORY;
        break;
        }

      lforms = tforms;
871
872
873
874
875
876
877
878

879
880
881
882
883
884
885
878
879
880
881
882
883
884

885
886
887
888
889
890
891
892







-
+








      if(option == CURLFORM_END)
        break;
      }

    /* Dispatch by option. */

    switch (option) {
    switch(option) {

    case CURLFORM_END:
      forms = (struct curl_forms *) NULL;       /* Leave array mode. */
      continue;

    case CURLFORM_ARRAY:
      if(!forms) {
1061
1062
1063
1064
1065
1066
1067
1068

1069
1070
1071
1072

1073
1074
1075
1076
1077
1078
1079
1068
1069
1070
1071
1072
1073
1074

1075
1076
1077
1078

1079
1080
1081
1082
1083
1084
1085
1086







-
+



-
+







  curl_formget_callback append;
  void *                arg;
  unsigned int          ccsid;
}   cfcdata;


static size_t
Curl_formget_callback_ccsid(void * arg, const char * buf, size_t len)
Curl_formget_callback_ccsid(void *arg, const char *buf, size_t len)

{
  cfcdata * p;
  char * b;
  char *b;
  int l;
  size_t ret;

  p = (cfcdata *) arg;

  if((long) len <= 0)
    return (*p->append)(p->arg, buf, len);
1093
1094
1095
1096
1097
1098
1099
1100

1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114

1115
1116
1117
1118
1119
1120
1121



1122
1123
1124
1125
1126
1127
1128
1100
1101
1102
1103
1104
1105
1106

1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120

1121
1122
1123
1124
1125



1126
1127
1128
1129
1130
1131
1132
1133
1134
1135







-
+













-
+




-
-
-
+
+
+







  ret = (*p->append)(p->arg, b, l);
  free(b);
  return ret == l? len: -1;
}


int
curl_formget_ccsid(struct curl_httppost * form, void * arg,
curl_formget_ccsid(struct curl_httppost *form, void *arg,
                   curl_formget_callback append, unsigned int ccsid)

{
  cfcdata lcfc;

  lcfc.append = append;
  lcfc.arg = arg;
  lcfc.ccsid = ccsid;
  return curl_formget(form, (void *) &lcfc, Curl_formget_callback_ccsid);
}


CURLcode
curl_easy_setopt_ccsid(CURL * curl, CURLoption tag, ...)
curl_easy_setopt_ccsid(CURL *curl, CURLoption tag, ...)

{
  CURLcode result;
  va_list arg;
  struct Curl_easy * data;
  char * s;
  char * cp;
  struct Curl_easy *data;
  char *s;
  char *cp;
  unsigned int ccsid;
  curl_off_t pfsize;
  static char testwarn = 1;

  /* Warns if this procedure has not been updated when the dupstring enum
     changes.
     We (try to) do it only once: there is no need to issue several times
1137
1138
1139
1140
1141
1142
1143
1144

1145
1146
1147
1148
1149

1150
1151
1152
1153
1154
1155
1156
1144
1145
1146
1147
1148
1149
1150

1151
1152
1153
1154
1155

1156
1157
1158
1159
1160
1161
1162
1163







-
+




-
+







       (int) STRING_LASTZEROTERMINATED != (int) STRING_ALTSVC + 1 ||
#else
       (int) STRING_LASTZEROTERMINATED != (int) STRING_DOH + 1 ||
#endif
       (int) STRING_LAST != (int) STRING_COPYPOSTFIELDS + 1)
      curl_mfprintf(stderr,
       "*** WARNING: curl_easy_setopt_ccsid() should be reworked ***\n");
    }
  }

  data = (struct Curl_easy *) curl;
  va_start(arg, tag);

  switch (tag) {
  switch(tag) {

  case CURLOPT_ABSTRACT_UNIX_SOCKET:
  case CURLOPT_ALTSVC:
  case CURLOPT_CAINFO:
  case CURLOPT_CAPATH:
  case CURLOPT_COOKIE:
  case CURLOPT_COOKIEFILE:
1231
1232
1233
1234
1235
1236
1237
1238
1239


1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257

1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275

1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288

1289
1290
1291
1292
1293
1294
1295
1296

1297
1298
1299
1300

1301
1302
1303
1304
1305
1306
1307


1308

1309
1310


1311
1312
1313
1314
1315
1316
1317
1238
1239
1240
1241
1242
1243
1244


1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263

1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281

1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294

1295
1296
1297
1298
1299
1300
1301
1302

1303
1304
1305
1306

1307
1308
1309
1310
1311
1312
1313
1314
1315
1316

1317
1318

1319
1320
1321
1322
1323
1324
1325
1326
1327







-
-
+
+

















-
+

















-
+












-
+







-
+



-
+







+
+
-
+

-
+
+








    if(s) {
      s = dynconvert(ASCII_CCSID, s, -1, ccsid);

      if(!s) {
        result = CURLE_OUT_OF_MEMORY;
        break;
        }
      }
      }
    }

    result = curl_easy_setopt(curl, tag, s);
    free(s);
    break;

  case CURLOPT_COPYPOSTFIELDS:
    /* Special case: byte count may have been given by CURLOPT_POSTFIELDSIZE
       prior to this call. In this case, convert the given byte count and
       replace the length according to the conversion result. */
    s = va_arg(arg, char *);
    ccsid = va_arg(arg, unsigned int);

    pfsize = data->set.postfieldsize;

    if(!s || !pfsize || ccsid == NOCONV_CCSID || ccsid == ASCII_CCSID) {
      result = curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, s);
      break;
      }
    }

    if(pfsize == -1) {
      /* Data is null-terminated. */
      s = dynconvert(ASCII_CCSID, s, -1, ccsid);

      if(!s) {
        result = CURLE_OUT_OF_MEMORY;
        break;
        }
      }
    else {
      /* Data length specified. */
      size_t len;

      if(pfsize < 0 || pfsize > SIZE_MAX) {
        result = CURLE_OUT_OF_MEMORY;
        break;
        }
      }

      len = pfsize;
      pfsize = len * MAX_CONV_EXPANSION;

      if(pfsize > SIZE_MAX)
        pfsize = SIZE_MAX;

      cp = malloc(pfsize);

      if(!cp) {
        result = CURLE_OUT_OF_MEMORY;
        break;
        }
      }

      pfsize = convert(cp, pfsize, ASCII_CCSID, s, len, ccsid);

      if(pfsize < 0) {
        free(cp);
        result = CURLE_OUT_OF_MEMORY;
        break;
        }
      }

      data->set.postfieldsize = pfsize;         /* Replace data size. */
      s = cp;
      }
    }

    result = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, s);
    data->set.str[STRING_COPYPOSTFIELDS] = s;   /* Give to library. */
    break;

  case CURLOPT_ERRORBUFFER:                     /* This is an output buffer. */
  default:
  {
    long val = va_arg(arg, long);
    result = Curl_vsetopt(data, tag, arg);
    result = curl_easy_setopt(curl, tag, val);
    break;
    }
  }
  }

  va_end(arg);
  return result;
}


char *
Changes to jni/curl/packages/OS400/curl.inc.in.
1412
1413
1414
1415
1416
1417
1418


1419
1420
1421
1422
1423
1424
1425
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427







+
+







     d                 c                   10284
     d  CURLOPT_HTTP09_ALLOWED...
     d                 c                   00285
     d  CURLOPT_ALTSVC_CTRL...
     d                 c                   00286
     d  CURLOPT_ALTSVC...
     d                 c                   10287
     d  CURLOPT_MAXAGE_CONN...
     d                 c                   00288
      *
      /if not defined(CURL_NO_OLDIES)
     d  CURLOPT_FILE   c                   10001
     d  CURLOPT_INFILE...
     d                 c                   10009
     d  CURLOPT_SSLKEYPASSWD...
     d                 c                   10026
Changes to jni/curl/packages/OS400/os400sys.c.
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
385
386
387
388
389
390
391

392
393
394
395
396
397
398







-









int
Curl_gsk_environment_open(gsk_handle * my_env_handle)

{
  struct Curl_gsk_descriptor * p;
  gsk_handle h;
  int rc;

  if(!my_env_handle)
    return GSK_OS400_ERROR_INVALID_POINTER;
  p = (struct Curl_gsk_descriptor *) malloc(sizeof *p);
  if(!p)
    return GSK_INSUFFICIENT_STORAGE;
Changes to jni/curl/packages/vms/Makefile.in.
381
382
383
384
385
386
387
388

389
390

391
392
393
394
395
396
397
381
382
383
384
385
386
387

388
389

390
391
392
393
394
395
396
397







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu packages/vms/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign packages/vms/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu packages/vms/Makefile
	  $(AUTOMAKE) --foreign packages/vms/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/packages/vms/curl_crtl_init.c.
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
179
180
181
182
183
184
185

186
187
188
189
190
191
192







-







    int status;
    char unix_shell_name[255];
    int use_unix_settings = 1;

    status = sys_trnlnm("GNV$UNIX_SHELL",
                        unix_shell_name, sizeof unix_shell_name -1);
    if (!$VMS_STATUS_SUCCESS(status)) {
        unix_shell_name[0] = 0;
        use_unix_settings = 0;
    }

    /* ACCESS should check ACLs or it is lying. */
    set_feature_default("DECC$ACL_ACCESS_CHECK", ENABLE);

    /* We always want the new parse style */
Changes to jni/curl/packages/vms/generate_config_vms_h_curl.com.
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
324
325
326
327
328
329
330



331
332
333
334
335
336
337







-
-
-







$! configure defaults to USE_*, a real configure on VMS chooses different.
$write cvh "#ifdef USE_ARES"
$write cvh "#undef USE_ARES"
$write cvh "#endif"
$write cvh "#ifdef USE_CYASSL"
$write cvh "#undef USE_CYASSL"
$write cvh "#endif"
$write cvh "#ifdef USE_DARWINSSL"
$write cvh "#undef USE_DARWINSSL"
$write cvh "#endif"
$write cvh "#ifdef USE_GNUTLS"
$write cvh "#undef USE_GNUTLS"
$write cvh "#endif"
$write cvh "#ifdef USE_GNUTLS_NETTLE"
$write cvh "#undef USE_GNUTLS_NETTLE"
$write cvh "#endif"
$write cvh "#ifdef USE_LIBRTMP"
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
348
349
350
351
352
353
354



355
356
357
358
359
360
361
362
363



364
365
366
367
368
369
370







-
-
-









-
-
-







$write cvh "#endif"
$write cvh "#ifdef USE_OPENLDAP"
$write cvh "#undef USE_OPENLDAP"
$write cvh "#endif"
$write cvh "#ifdef USE_POLARSSL"
$write cvh "#undef USE_POLARSSL"
$write cvh "#endif"
$write cvh "#ifdef USE_SCHANNEL"
$write cvh "#undef USE_SCHANNEL"
$write cvh "#endif"
$write cvh "#ifdef USE_THREADS_POSIX"
$write cvh "#undef USE_THREADS_POSIX"
$write cvh "#endif"
$write cvh "#ifdef USE_TLS_SRP"
$write cvh "#undef USE_TLS_SRP"
$write cvh "#endif"
$write cvh "#ifdef USE_UNIX_SOCKETS"
$write cvh "#undef USE_UNIX_SOCKETS"
$write cvh "#endif"
$write cvh "#ifdef USE_WINDOWS_SSPI"
$write cvh "#undef USE_WINDOWS_SSPI"
$write cvh "#endif"
$!
$write cvh "#ifndef HAVE_OLD_GSSMIT"
$write cvh "#define gss_nt_service_name GSS_C_NT_HOSTBASED_SERVICE"
$write cvh "#endif"
$!
$!
$! Note:
Changes to jni/curl/projects/README.
147
148
149
150
151
152
153
154
155
156
157
158
159






147
148
149
150
151
152
153






154
155
156
157
158
159







-
-
-
-
-
-
+
+
+
+
+
+
   can be edited directly, the templates for the project files (which are
   stored in the git repositoty) will need to be modified rather than the
   generated project files that Visual Studio uses.

Legacy Windows and SSL
======================

   Some of the project configurations allow the use of WinSSL (specifically
   Schannel from Windows SSPI), the native SSL library in Windows. However,
   WinSSL in Windows <= XP is unable to connect to servers that no longer
   support the legacy handshakes and algorithms used by those versions. If
   you will be using curl in one of those earlier versions of Windows you
   should choose another SSL backend such as OpenSSL.
   Some of the project configurations allow the use of Schannel, the native
   SSL library in Windows which forms part of Windows SSPI. However, Schannel
   in Windows <= XP is unable to connect to servers that no longer support the
   legacy handshakes and algorithms used by those versions. If you will be
   using curl in one of those earlier versions of Windows you should choose
   another SSL backend such as OpenSSL.
Changes to jni/curl/projects/Windows/VC10/lib/libcurl.vcxproj.
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
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







-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+







    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
    <RootNamespace>libcurl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
2334
2335
2336
2337
2338
2339
2340

2341
2342
2343
2344
2345
2346
2347
2334
2335
2336
2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348







+







    <ClCompile Include="..\..\..\..\lib\cookie.c" />
    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ctype.c" />
    <ClCompile Include="..\..\..\..\lib\curl_des.c" />
    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
    <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
    <ClCompile Include="..\..\..\..\lib\curl_path.c" />
    <ClCompile Include="..\..\..\..\lib\curl_range.c" />
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2394
2395
2396
2397
2398
2399
2400

2401
2402
2403
2404
2405
2406
2407







-







    <ClCompile Include="..\..\..\..\lib\multi.c" />
    <ClCompile Include="..\..\..\..\lib\netrc.c" />
    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />
    <ClCompile Include="..\..\..\..\lib\nonblock.c" />
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pipeline.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
2474
2475
2476
2477
2478
2479
2480

2481
2482
2483
2484
2485
2486
2487
2474
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488







+







    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
    <ClInclude Include="..\..\..\..\lib\curl_des.h" />
    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
    <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544
2545
2546
2533
2534
2535
2536
2537
2538
2539

2540
2541
2542
2543
2544
2545
2546







-







    <ClInclude Include="..\..\..\..\lib\multihandle.h" />
    <ClInclude Include="..\..\..\..\lib\multiif.h" />
    <ClInclude Include="..\..\..\..\lib\netrc.h" />
    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />
    <ClInclude Include="..\..\..\..\lib\nonblock.h" />
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pipeline.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
Changes to jni/curl/projects/Windows/VC10/src/curl.vcxproj.
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
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







-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+




-
+







    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
    <RootNamespace>curl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
  </ImportGroup>
Changes to jni/curl/projects/Windows/VC11/lib/libcurl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
    <RootNamespace>libcurl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
2390
2391
2392
2393
2394
2395
2396

2397
2398
2399
2400
2401
2402
2403
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404







+







    <ClCompile Include="..\..\..\..\lib\cookie.c" />
    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ctype.c" />
    <ClCompile Include="..\..\..\..\lib\curl_des.c" />
    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
    <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
    <ClCompile Include="..\..\..\..\lib\curl_path.c" />
    <ClCompile Include="..\..\..\..\lib\curl_range.c" />
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2450
2451
2452
2453
2454
2455
2456

2457
2458
2459
2460
2461
2462
2463







-







    <ClCompile Include="..\..\..\..\lib\multi.c" />
    <ClCompile Include="..\..\..\..\lib\netrc.c" />
    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />
    <ClCompile Include="..\..\..\..\lib\nonblock.c" />
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pipeline.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
2530
2531
2532
2533
2534
2535
2536

2537
2538
2539
2540
2541
2542
2543
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544







+







    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
    <ClInclude Include="..\..\..\..\lib\curl_des.h" />
    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
    <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2589
2590
2591
2592
2593
2594
2595

2596
2597
2598
2599
2600
2601
2602







-







    <ClInclude Include="..\..\..\..\lib\multihandle.h" />
    <ClInclude Include="..\..\..\..\lib\multiif.h" />
    <ClInclude Include="..\..\..\..\lib\netrc.h" />
    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />
    <ClInclude Include="..\..\..\..\lib\nonblock.h" />
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pipeline.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
Changes to jni/curl/projects/Windows/VC11/src/curl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
    <RootNamespace>curl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v110</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
Changes to jni/curl/projects/Windows/VC12/lib/libcurl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
    <RootNamespace>libcurl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
2390
2391
2392
2393
2394
2395
2396

2397
2398
2399
2400
2401
2402
2403
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404







+







    <ClCompile Include="..\..\..\..\lib\cookie.c" />
    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ctype.c" />
    <ClCompile Include="..\..\..\..\lib\curl_des.c" />
    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
    <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
    <ClCompile Include="..\..\..\..\lib\curl_path.c" />
    <ClCompile Include="..\..\..\..\lib\curl_range.c" />
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2450
2451
2452
2453
2454
2455
2456

2457
2458
2459
2460
2461
2462
2463







-







    <ClCompile Include="..\..\..\..\lib\multi.c" />
    <ClCompile Include="..\..\..\..\lib\netrc.c" />
    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />
    <ClCompile Include="..\..\..\..\lib\nonblock.c" />
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pipeline.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
2530
2531
2532
2533
2534
2535
2536

2537
2538
2539
2540
2541
2542
2543
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544







+







    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
    <ClInclude Include="..\..\..\..\lib\curl_des.h" />
    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
    <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2589
2590
2591
2592
2593
2594
2595

2596
2597
2598
2599
2600
2601
2602







-







    <ClInclude Include="..\..\..\..\lib\multihandle.h" />
    <ClInclude Include="..\..\..\..\lib\multiif.h" />
    <ClInclude Include="..\..\..\..\lib\netrc.h" />
    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />
    <ClInclude Include="..\..\..\..\lib\nonblock.h" />
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pipeline.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
Changes to jni/curl/projects/Windows/VC12/src/curl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
    <RootNamespace>curl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v120</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
Changes to jni/curl/projects/Windows/VC14/lib/libcurl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
    <RootNamespace>libcurl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
2390
2391
2392
2393
2394
2395
2396

2397
2398
2399
2400
2401
2402
2403
2390
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404







+







    <ClCompile Include="..\..\..\..\lib\cookie.c" />
    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ctype.c" />
    <ClCompile Include="..\..\..\..\lib\curl_des.c" />
    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
    <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
    <ClCompile Include="..\..\..\..\lib\curl_path.c" />
    <ClCompile Include="..\..\..\..\lib\curl_range.c" />
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2459
2460
2461
2462
2463
2450
2451
2452
2453
2454
2455
2456

2457
2458
2459
2460
2461
2462
2463







-







    <ClCompile Include="..\..\..\..\lib\multi.c" />
    <ClCompile Include="..\..\..\..\lib\netrc.c" />
    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />
    <ClCompile Include="..\..\..\..\lib\nonblock.c" />
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pipeline.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
2530
2531
2532
2533
2534
2535
2536

2537
2538
2539
2540
2541
2542
2543
2530
2531
2532
2533
2534
2535
2536
2537
2538
2539
2540
2541
2542
2543
2544







+







    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
    <ClInclude Include="..\..\..\..\lib\curl_des.h" />
    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
    <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
2588
2589
2590
2591
2592
2593
2594
2595
2596
2597
2598
2599
2600
2601
2602
2589
2590
2591
2592
2593
2594
2595

2596
2597
2598
2599
2600
2601
2602







-







    <ClInclude Include="..\..\..\..\lib\multihandle.h" />
    <ClInclude Include="..\..\..\..\lib\multiif.h" />
    <ClInclude Include="..\..\..\..\lib\netrc.h" />
    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />
    <ClInclude Include="..\..\..\..\lib\nonblock.h" />
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pipeline.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
Changes to jni/curl/projects/Windows/VC14/src/curl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
    <RootNamespace>curl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v140</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
Changes to jni/curl/projects/Windows/VC15/lib/libcurl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{DA6F56B4-06A4-441D-AD70-AC5A7D51FADB}</ProjectGuid>
    <RootNamespace>libcurl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>StaticLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>DynamicLibrary</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
2362
2363
2364
2365
2366
2367
2368

2369
2370
2371
2372
2373
2374
2375
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376







+







    <ClCompile Include="..\..\..\..\lib\cookie.c" />
    <ClCompile Include="..\..\..\..\lib\curl_addrinfo.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ctype.c" />
    <ClCompile Include="..\..\..\..\lib\curl_des.c" />
    <ClCompile Include="..\..\..\..\lib\curl_endian.c" />
    <ClCompile Include="..\..\..\..\lib\curl_fnmatch.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gethostname.c" />
    <ClCompile Include="..\..\..\..\lib\curl_get_line.c" />
    <ClCompile Include="..\..\..\..\lib\curl_gssapi.c" />
    <ClCompile Include="..\..\..\..\lib\curl_memrchr.c" />
    <ClCompile Include="..\..\..\..\lib\curl_multibyte.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_core.c" />
    <ClCompile Include="..\..\..\..\lib\curl_ntlm_wb.c" />
    <ClCompile Include="..\..\..\..\lib\curl_path.c" />
    <ClCompile Include="..\..\..\..\lib\curl_range.c" />
2421
2422
2423
2424
2425
2426
2427
2428
2429
2430
2431
2432
2433
2434
2435
2422
2423
2424
2425
2426
2427
2428

2429
2430
2431
2432
2433
2434
2435







-







    <ClCompile Include="..\..\..\..\lib\multi.c" />
    <ClCompile Include="..\..\..\..\lib\netrc.c" />
    <ClCompile Include="..\..\..\..\lib\non-ascii.c" />
    <ClCompile Include="..\..\..\..\lib\nonblock.c" />
    <ClCompile Include="..\..\..\..\lib\openldap.c" />
    <ClCompile Include="..\..\..\..\lib\parsedate.c" />
    <ClCompile Include="..\..\..\..\lib\pingpong.c" />
    <ClCompile Include="..\..\..\..\lib\pipeline.c" />
    <ClCompile Include="..\..\..\..\lib\pop3.c" />
    <ClCompile Include="..\..\..\..\lib\progress.c" />
    <ClCompile Include="..\..\..\..\lib\psl.c" />
    <ClCompile Include="..\..\..\..\lib\rand.c" />
    <ClCompile Include="..\..\..\..\lib\rtsp.c" />
    <ClCompile Include="..\..\..\..\lib\security.c" />
    <ClCompile Include="..\..\..\..\lib\select.c" />
2502
2503
2504
2505
2506
2507
2508

2509
2510
2511
2512
2513
2514
2515
2502
2503
2504
2505
2506
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516







+







    <ClInclude Include="..\..\..\..\lib\curl_addrinfo.h" />
    <ClInclude Include="..\..\..\..\lib\curl_base64.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ctype.h" />
    <ClInclude Include="..\..\..\..\lib\curl_des.h" />
    <ClInclude Include="..\..\..\..\lib\curl_endian.h" />
    <ClInclude Include="..\..\..\..\lib\curl_fnmatch.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gethostname.h" />
    <ClInclude Include="..\..\..\..\lib\curl_get_line.h" />
    <ClInclude Include="..\..\..\..\lib\curl_gssapi.h" />
    <ClInclude Include="..\..\..\..\lib\curl_hmac.h" />
    <ClInclude Include="..\..\..\..\lib\curl_ldap.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md4.h" />
    <ClInclude Include="..\..\..\..\lib\curl_md5.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memory.h" />
    <ClInclude Include="..\..\..\..\lib\curl_memrchr.h" />
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572
2573
2574
2561
2562
2563
2564
2565
2566
2567

2568
2569
2570
2571
2572
2573
2574







-







    <ClInclude Include="..\..\..\..\lib\multihandle.h" />
    <ClInclude Include="..\..\..\..\lib\multiif.h" />
    <ClInclude Include="..\..\..\..\lib\netrc.h" />
    <ClInclude Include="..\..\..\..\lib\non-ascii.h" />
    <ClInclude Include="..\..\..\..\lib\nonblock.h" />
    <ClInclude Include="..\..\..\..\lib\parsedate.h" />
    <ClInclude Include="..\..\..\..\lib\pingpong.h" />
    <ClInclude Include="..\..\..\..\lib\pipeline.h" />
    <ClInclude Include="..\..\..\..\lib\pop3.h" />
    <ClInclude Include="..\..\..\..\lib\progress.h" />
    <ClInclude Include="..\..\..\..\lib\psl.h" />
    <ClInclude Include="..\..\..\..\lib\rand.h" />
    <ClInclude Include="..\..\..\..\lib\rtsp.h" />
    <ClInclude Include="..\..\..\..\lib\select.h" />
    <ClInclude Include="..\..\..\..\lib\sendf.h" />
Changes to jni/curl/projects/Windows/VC15/src/curl.vcxproj.
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
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







-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+





-
+







    <ProjectGuid>{5228E9CE-A216-422F-A5E6-58E95E2DD71D}</ProjectGuid>
    <RootNamespace>curl</RootNamespace>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|Win32'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL - LIB LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL - DLL LibSSH2|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL Windows SSPI - DLL WinIDN|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL OpenSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Debug - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Debug - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - LIB wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='DLL Release - DLL wolfSSL|x64'" Label="Configuration">
    <ConfigurationType>Application</ConfigurationType>
    <UseOfMfc>false</UseOfMfc>
    <CharacterSet>MultiByte</CharacterSet>
    <CharacterSet>Unicode</CharacterSet>
    <PlatformToolset>v141</PlatformToolset>
  </PropertyGroup>
  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
  <ImportGroup Label="ExtensionSettings">
  </ImportGroup>
  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='LIB Release - DLL Windows SSPI|Win32'" Label="PropertySheets">
    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1216
1217
1218
1219
1220
1221
1222

1223
1224
1225
1226
1227
1228
1229







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1246
1247
1248
1249
1250
1251
1252

1253
1254
1255
1256
1257
1258
1259







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1277
1278
1279
1280
1281
1282
1283

1284
1285
1286
1287
1288
1289
1290







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1308
1309
1310
1311
1312
1313
1314

1315
1316
1317
1318
1319
1320
1321







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1338
1339
1340
1341
1342
1343
1344

1345
1346
1347
1348
1349
1350
1351







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1368
1369
1370
1371
1372
1373
1374

1375
1376
1377
1378
1379
1380
1381







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1399
1400
1401
1402
1403
1404
1405

1406
1407
1408
1409
1410
1411
1412







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1430
1431
1432
1433
1434
1435
1436

1437
1438
1439
1440
1441
1442
1443







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1460
1461
1462
1463
1464
1465
1466

1467
1468
1469
1470
1471
1472
1473







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1491
1492
1493
1494
1495
1496
1497

1498
1499
1500
1501
1502
1503
1504







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1521
1522
1523
1524
1525
1526
1527

1528
1529
1530
1531
1532
1533
1534







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1551
1552
1553
1554
1555
1556
1557

1558
1559
1560
1561
1562
1563
1564







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1582
1583
1584
1585
1586
1587
1588

1589
1590
1591
1592
1593
1594
1595







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1613
1614
1615
1616
1617
1618
1619

1620
1621
1622
1623
1624
1625
1626







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1820
1821
1822
1823
1824
1825
1826

1827
1828
1829
1830
1831
1832
1833







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1851
1852
1853
1854
1855
1856
1857

1858
1859
1860
1861
1862
1863
1864







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1940
1941
1942
1943
1944
1945
1946

1947
1948
1949
1950
1951
1952
1953







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
1971
1972
1973
1974
1975
1976
1977

1978
1979
1980
1981
1982
1983
1984







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2060
2061
2062
2063
2064
2065
2066

2067
2068
2069
2070
2071
2072
2073







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2110
2111
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121
2122
2123
2124
2091
2092
2093
2094
2095
2096
2097

2098
2099
2100
2101
2102
2103
2104







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214
2180
2181
2182
2183
2184
2185
2186

2187
2188
2189
2190
2191
2192
2193







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2211
2212
2213
2214
2215
2216
2217

2218
2219
2220
2221
2222
2223
2224







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2322
2323
2324
2325
2326
2327
2328
2329
2330
2331
2332
2333
2334
2335
2336
2300
2301
2302
2303
2304
2305
2306

2307
2308
2309
2310
2311
2312
2313







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2354
2355
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2331
2332
2333
2334
2335
2336
2337

2338
2339
2340
2341
2342
2343
2344







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2444
2445
2446
2447
2448
2449
2450
2451
2452
2453
2454
2455
2456
2457
2458
2420
2421
2422
2423
2424
2425
2426

2427
2428
2429
2430
2431
2432
2433







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2475
2476
2477
2478
2479
2480
2481
2482
2483
2484
2485
2486
2487
2488
2489
2450
2451
2452
2453
2454
2455
2456

2457
2458
2459
2460
2461
2462
2463







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2507
2508
2509
2510
2511
2512
2513
2514
2515
2516
2517
2518
2519
2520
2521
2481
2482
2483
2484
2485
2486
2487

2488
2489
2490
2491
2492
2493
2494







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553
2512
2513
2514
2515
2516
2517
2518

2519
2520
2521
2522
2523
2524
2525







-







      <HeaderFileName>
      </HeaderFileName>
    </Midl>
    <ClCompile>
      <Optimization>Disabled</Optimization>
      <AdditionalIncludeDirectories>..\..\..\..\include;..\..\..\..\lib;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
      <PreprocessorDefinitions>_DEBUG;_CONSOLE;DEBUGBUILD;CURL_STATICLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
      <MinimalRebuild>true</MinimalRebuild>
      <BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
      <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
      <WarningLevel>Level4</WarningLevel>
      <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
    </ClCompile>
    <ResourceCompile>
      <PreprocessorDefinitions>_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
Changes to jni/curl/projects/Windows/VC6/lib/libcurl.dsp.
785
786
787
788
789
790
791




792
793
794
795
796
797
798
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802







+
+
+
+







SOURCE=..\..\..\..\lib\curl_fnmatch.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_gethostname.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_get_line.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_gssapi.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_memrchr.c
# End Source File
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1024
1025
1026
1027
1028
1029
1030




1031
1032
1033
1034
1035
1036
1037







-
-
-
-








SOURCE=..\..\..\..\lib\parsedate.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pingpong.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pipeline.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pop3.c
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\progress.c
1341
1342
1343
1344
1345
1346
1347




1348
1349
1350
1351
1352
1353
1354
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358







+
+
+
+







SOURCE=..\..\..\..\lib\curl_fnmatch.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_gethostname.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_get_line.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_gssapi.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\curl_hmac.h
# End Source File
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1576
1577
1578
1579
1580
1581
1582




1583
1584
1585
1586
1587
1588
1589







-
-
-
-








SOURCE=..\..\..\..\lib\parsedate.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pingpong.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pipeline.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\pop3.h
# End Source File
# Begin Source File

SOURCE=..\..\..\..\lib\progress.h
Changes to jni/curl/projects/Windows/VC7.1/lib/libcurl.vcproj.
1296
1297
1298
1299
1300
1301
1302



1303
1304
1305
1306
1307
1308
1309
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312







+
+
+







			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c">
			</File>
			<File
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1477
1478
1479
1480
1481
1482
1483



1484
1485
1486
1487
1488
1489
1490







-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
1639
1640
1641
1642
1643
1644
1645



1646
1647
1648
1649
1650
1651
1652
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655







+
+
+







			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h">
			</File>
			<File
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1817
1818
1819
1820
1821
1822
1823



1824
1825
1826
1827
1828
1829
1830







-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.h">
Changes to jni/curl/projects/Windows/VC7/lib/libcurl.vcproj.
1150
1151
1152
1153
1154
1155
1156



1157
1158
1159
1160
1161
1162
1163
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166







+
+
+







			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c">
			</File>
			<File
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1331
1332
1333
1334
1335
1336
1337



1338
1339
1340
1341
1342
1343
1344







-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c">
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.c">
1493
1494
1495
1496
1497
1498
1499



1500
1501
1502
1503
1504
1505
1506
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509







+
+
+







			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h">
			</File>
			<File
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1671
1672
1673
1674
1675
1676
1677



1678
1679
1680
1681
1682
1683
1684







-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.h">
			</File>
			<File
				RelativePath="..\..\..\..\lib\psl.h">
Changes to jni/curl/projects/Windows/VC8/lib/libcurl.vcproj.
3671
3672
3673
3674
3675
3676
3677




3678
3679
3680
3681
3682
3683
3684
3671
3672
3673
3674
3675
3676
3677
3678
3679
3680
3681
3682
3683
3684
3685
3686
3687
3688







+
+
+
+







			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c"
3907
3908
3909
3910
3911
3912
3913
3914
3915
3916
3917
3918
3919
3920
3921
3922
3923
3924
3911
3912
3913
3914
3915
3916
3917




3918
3919
3920
3921
3922
3923
3924







-
-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c"
4127
4128
4129
4130
4131
4132
4133




4134
4135
4136
4137
4138
4139
4140
4127
4128
4129
4130
4131
4132
4133
4134
4135
4136
4137
4138
4139
4140
4141
4142
4143
4144







+
+
+
+







			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h"
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
4373
4374
4375
4376
4363
4364
4365
4366
4367
4368
4369




4370
4371
4372
4373
4374
4375
4376







-
-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.h"
Changes to jni/curl/projects/Windows/VC9/lib/libcurl.vcproj.
3612
3613
3614
3615
3616
3617
3618




3619
3620
3621
3622
3623
3624
3625
3612
3613
3614
3615
3616
3617
3618
3619
3620
3621
3622
3623
3624
3625
3626
3627
3628
3629







+
+
+
+







			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_memrchr.c"
3848
3849
3850
3851
3852
3853
3854
3855
3856
3857
3858
3859
3860
3861
3862
3863
3864
3865
3852
3853
3854
3855
3856
3857
3858




3859
3860
3861
3862
3863
3864
3865







-
-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.c"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.c"
4068
4069
4070
4071
4072
4073
4074




4075
4076
4077
4078
4079
4080
4081
4068
4069
4070
4071
4072
4073
4074
4075
4076
4077
4078
4079
4080
4081
4082
4083
4084
4085







+
+
+
+







			<File
				RelativePath="..\..\..\..\lib\curl_fnmatch.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gethostname.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_get_line.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_gssapi.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\curl_hmac.h"
4300
4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4313
4314
4315
4316
4317
4304
4305
4306
4307
4308
4309
4310




4311
4312
4313
4314
4315
4316
4317







-
-
-
-







			<File
				RelativePath="..\..\..\..\lib\parsedate.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pingpong.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pipeline.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\pop3.h"
			>
			</File>
			<File
				RelativePath="..\..\..\..\lib\progress.h"
Changes to jni/curl/projects/build-openssl.bat.
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
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








-
+



















-
+


+















-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+
+







@echo off
rem ***************************************************************************
rem *                                  _   _ ____  _
rem *  Project                     ___| | | |  _ \| |
rem *                             / __| | | | |_) | |
rem *                            | (__| |_| |  _ <| |___
rem *                             \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) 2012 - 2018, Steve Holme, <steve_holme@hotmail.com>.
rem * Copyright (C) 2012 - 2019, Steve Holme, <steve_holme@hotmail.com>.
rem *
rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms
rem * are also available at https://curl.haxx.se/docs/copyright.html.
rem *
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
rem * copies of the Software, and permit persons to whom the Software is
rem * furnished to do so, under the terms of the COPYING file.
rem *
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
rem * KIND, either express or implied.
rem *
rem ***************************************************************************

:begin
  rem Check we are running on a Windows NT derived OS
  if not "%OS%" == "Windows_NT" goto nodos

  rem Set our variables
  setlocal
  setlocal ENABLEDELAYEDEXPANSION
  set VC_VER=
  set BUILD_PLATFORM=
  set BUILD_CONFIG=

  rem Ensure we have the required arguments
  if /i "%~1" == "" goto syntax

  rem Calculate the program files directory
  if defined PROGRAMFILES (
    set "PF=%PROGRAMFILES%"
    set OS_PLATFORM=x86
  )
  if defined PROGRAMFILES(x86) (
    set "PF=%PROGRAMFILES(x86)%"
    set OS_PLATFORM=x64
  )

:parseArgs
  if "%~1" == "" goto prerequisites
  if not "%~1" == "" (

  if /i "%~1" == "vc6" (
    set VC_VER=6.0
    set VC_DESC=VC6
    set "VC_PATH=Microsoft Visual Studio\VC98"
  ) else if /i "%~1" == "vc7" (
    set VC_VER=7.0
    set VC_DESC=VC7
    set "VC_PATH=Microsoft Visual Studio .NET\Vc7"
  ) else if /i "%~1" == "vc7.1" (
    set VC_VER=7.1
    set VC_DESC=VC7.1
    set "VC_PATH=Microsoft Visual Studio .NET 2003\Vc7"
  ) else if /i "%~1" == "vc8" (
    set VC_VER=8.0
    set VC_DESC=VC8
    set "VC_PATH=Microsoft Visual Studio 8\VC"
  ) else if /i "%~1" == "vc9" (
    set VC_VER=9.0
    set VC_DESC=VC9
    set "VC_PATH=Microsoft Visual Studio 9.0\VC"
  ) else if /i "%~1" == "vc10" (
    set VC_VER=10.0
    set VC_DESC=VC10
    set "VC_PATH=Microsoft Visual Studio 10.0\VC"
  ) else if /i "%~1" == "vc11" (
    set VC_VER=11.0
    set VC_DESC=VC11
    set "VC_PATH=Microsoft Visual Studio 11.0\VC"
  ) else if /i "%~1" == "vc12" (
    set VC_VER=12.0
    set VC_DESC=VC12
    set "VC_PATH=Microsoft Visual Studio 12.0\VC"
  ) else if /i "%~1" == "vc14" (
    set VC_VER=14.0
    set VC_DESC=VC14
    set "VC_PATH=Microsoft Visual Studio 14.0\VC"
  ) else if /i "%~1" == "vc14.1" (
    set VC_VER=14.1
    set VC_DESC=VC14.1
    if /i "%~1" == "vc6" (
      set VC_VER=6.0
      set VC_DESC=VC6
      set "VC_PATH=Microsoft Visual Studio\VC98"
    ) else if /i "%~1" == "vc7" (
      set VC_VER=7.0
      set VC_DESC=VC7
      set "VC_PATH=Microsoft Visual Studio .NET\Vc7"
    ) else if /i "%~1" == "vc7.1" (
      set VC_VER=7.1
      set VC_DESC=VC7.1
      set "VC_PATH=Microsoft Visual Studio .NET 2003\Vc7"
    ) else if /i "%~1" == "vc8" (
      set VC_VER=8.0
      set VC_DESC=VC8
      set "VC_PATH=Microsoft Visual Studio 8\VC"
    ) else if /i "%~1" == "vc9" (
      set VC_VER=9.0
      set VC_DESC=VC9
      set "VC_PATH=Microsoft Visual Studio 9.0\VC"
    ) else if /i "%~1" == "vc10" (
      set VC_VER=10.0
      set VC_DESC=VC10
      set "VC_PATH=Microsoft Visual Studio 10.0\VC"
    ) else if /i "%~1" == "vc11" (
      set VC_VER=11.0
      set VC_DESC=VC11
      set "VC_PATH=Microsoft Visual Studio 11.0\VC"
    ) else if /i "%~1" == "vc12" (
      set VC_VER=12.0
      set VC_DESC=VC12
      set "VC_PATH=Microsoft Visual Studio 12.0\VC"
    ) else if /i "%~1" == "vc14" (
      set VC_VER=14.0
      set VC_DESC=VC14
      set "VC_PATH=Microsoft Visual Studio 14.0\VC"
    ) else if /i "%~1" == "vc14.1" (
      set VC_VER=14.1
      set VC_DESC=VC14.1

    rem Determine the VC14.1 path based on the installed edition in descending
    rem order (Enterprise, then Professional and finally Community)
    if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" (
      set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC"
    ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" (
      set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC"
    ) else (
      set "VC_PATH=Microsoft Visual Studio\2017\Community\VC"
    )
  ) else if /i "%~1%" == "x86" (
    set BUILD_PLATFORM=x86
  ) else if /i "%~1%" == "x64" (
    set BUILD_PLATFORM=x64
  ) else if /i "%~1%" == "debug" (
    set BUILD_CONFIG=debug
  ) else if /i "%~1%" == "release" (
    set BUILD_CONFIG=release
  ) else if /i "%~1" == "-?" (
    goto syntax
  ) else if /i "%~1" == "-h" (
    goto syntax
  ) else if /i "%~1" == "-help" (
    goto syntax
  ) else if /i "%~1" == "-VSpath" (
    if "%~2" == "" (
      echo.
      echo Error. Please provide VS Path.
      goto error
    ) else (
      set "ABS_VC_PATH=%~2\VC"
      shift
    )
  ) else if /i "%~1" == "-perlpath" (
    if "%~2" == "" (
      echo.
      echo Error. Please provide Perl root Path.
      goto error
    ) else (
      set "PERL_PATH=%~2"
      shift
    )
  ) else (
    if not defined START_DIR (
      set START_DIR=%~1%
    ) else (
      goto unknown
    )
  )
      rem Determine the VC14.1 path based on the installed edition in descending
      rem order (Enterprise, then Professional and finally Community)
      if exist "%PF%\Microsoft Visual Studio\2017\Enterprise\VC" (
        set "VC_PATH=Microsoft Visual Studio\2017\Enterprise\VC"
      ) else if exist "%PF%\Microsoft Visual Studio\2017\Professional\VC" (
        set "VC_PATH=Microsoft Visual Studio\2017\Professional\VC"
      ) else (
        set "VC_PATH=Microsoft Visual Studio\2017\Community\VC"
      )
    ) else if /i "%~1%" == "x86" (
      set BUILD_PLATFORM=x86
    ) else if /i "%~1%" == "x64" (
      set BUILD_PLATFORM=x64
    ) else if /i "%~1%" == "debug" (
      set BUILD_CONFIG=debug
    ) else if /i "%~1%" == "release" (
      set BUILD_CONFIG=release
    ) else if /i "%~1" == "-?" (
      goto syntax
    ) else if /i "%~1" == "-h" (
      goto syntax
    ) else if /i "%~1" == "-help" (
      goto syntax
    ) else if /i "%~1" == "-VSpath" (
      if "%~2" == "" (
        echo.
        echo Error. Please provide VS Path.
        goto error
      ) else (
        set "ABS_VC_PATH=%~2\VC"
        shift
      )
    ) else if /i "%~1" == "-perlpath" (
      if "%~2" == "" (
        echo.
        echo Error. Please provide Perl root Path.
        goto error
      ) else (
        set "PERL_PATH=%~2"
        shift
      )
    ) else (
      if not defined START_DIR (
        set START_DIR=%~1%
      ) else (
        goto unknown
      )
    )

  shift & goto parseArgs
    shift & goto parseArgs
  )

:prerequisites
  rem Compiler is a required parameter
  if not defined VC_VER goto syntax

  rem Default the start directory if one isn't specified
  if not defined START_DIR set START_DIR=..\..\openssl
171
172
173
174
175
176
177
178
179
180

181
182
183
184
185
186
187
188
172
173
174
175
176
177
178



179

180
181
182
183
184
185
186







-
-
-
+
-







  ) else (
    set "PATH=%PERL_PATH%\Perl\bin;%PATH%"
  )

  rem Check the start directory exists
  if not exist "%START_DIR%" goto noopenssl

  rem Check that OpenSSL is not unsupported version 1.1.0
  if not exist "%START_DIR%\ms\do_ms.bat" goto unsupported

:setup
:configure
  if "%BUILD_PLATFORM%" == "" (
    if "%VC_VER%" == "6.0" (
      set BUILD_PLATFORM=x86
    ) else if "%VC_VER%" == "7.0" (
      set BUILD_PLATFORM=x86
    ) else if "%VC_VER%" == "7.1" (
      set BUILD_PLATFORM=x86
201
202
203
204
205
206
207






208
209
210
211
212
213
214
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218







+
+
+
+
+
+







    if "%VC_VER%" == "9.0" set VCVARS_PLATFORM=%BUILD_PLATFORM%
    if "%VC_VER%" == "10.0" set VCVARS_PLATFORM=%BUILD_PLATFORM%
    if "%VC_VER%" == "11.0" set VCVARS_PLATFORM=amd64
    if "%VC_VER%" == "12.0" set VCVARS_PLATFORM=amd64
    if "%VC_VER%" == "14.0" set VCVARS_PLATFORM=amd64
    if "%VC_VER%" == "14.1" set VCVARS_PLATFORM=amd64
  )

  if exist "%START_DIR%\ms\do_ms.bat" (
    set LEGACY_BUILD=TRUE
  ) else (
    set LEGACY_BUILD=FALSE
  )

:start
  echo.
  set SAVED_PATH=%CD%

  if "%VC_VER%" == "6.0" (
    call "%ABS_VC_PATH%\bin\vcvars32"
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
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







-
+
-
-
-
-
+
+

-
-
+
+
-
-

-
-
+
+
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+

-
+
-
-
-
+
+
-
-
-

-
+
-
-
-
-
+
+

-
-
+
+
-
-

-
-
+
+
-
-
-
-
-
-
+
+
-
-
-
+
-
-
+
+
+

-
-
+
+
-
-
+
-
-
-








-
+
-
-
-
-
+
+

-
-
+
+
-
-

-
-
+
+
-
-
-
-
-
-
+
+
-
-
-
-
-
+
+
+
+

-
+
-
-
-
+
+
-
-
-

-
+
-
-
-
-
+
+

-
-
+
+
-
-

-
-
+
+
-
-
-
-
-
-
+
+
-
-
-
+
-
-
+
+
+

-
-
+
+
-
-
+
-
-
-


+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  goto %BUILD_PLATFORM%

:x64
  rem Calculate our output directory
  set OUTDIR=build\Win64\%VC_DESC%
  if not exist %OUTDIR% md %OUTDIR%

  if "%BUILD_CONFIG%" == "release" goto x64release
  if not "%BUILD_CONFIG%" == "release" (

:x64debug
  rem Configuring 64-bit Debug Build
  perl Configure debug-VC-WIN64A --prefix=%CD%
    rem Configuring 64-bit Static Library Debug Build
    call :configure x64 debug static %LEGACY_BUILD%

  rem Perform the build
  call ms\do_win64a
    rem Perform the build
    call :build x64 static %LEGACY_BUILD%
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  rem Move the output directories
  if exist "%OUTDIR%\LIB Debug" (
    rem Perform the install
    call :install debug static %LEGACY_BUILD%
    copy /y out32.dbg\* "%OUTDIR%\LIB Debug" 1>nul
    rd out32.dbg /s /q
  ) else (
    move out32.dbg "%OUTDIR%\LIB Debug" 1>nul
  )
  if exist "%OUTDIR%\DLL Debug" (

    rem Configuring 64-bit Shared Library Debug Build
    copy /y out32dll.dbg\* "%OUTDIR%\DLL Debug" 1>nul
    rd out32dll.dbg /s /q
  ) else (
    move out32dll.dbg "%OUTDIR%\DLL Debug" 1>nul
  )
    call :configure x64 debug shared %LEGACY_BUILD%

    rem Perform the build
    call :build x64 shared %LEGACY_BUILD%

  rem Move the PDB files
    rem Perform the install
  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul

    call :install debug shared %LEGACY_BUILD%
  )
  rem Remove the intermediate directories
  rd tmp32.dbg /s /q
  rd tmp32dll.dbg /s /q

  if "%BUILD_CONFIG%" == "debug" goto success
  if not "%BUILD_CONFIG%" == "debug" (

:x64release
  rem Configuring 64-bit Release Build
  perl Configure VC-WIN64A --prefix=%CD%
    rem Configuring 64-bit Static Library Release Build
    call :configure x64 release static %LEGACY_BUILD%

  rem Perform the build
  call ms\do_win64a
    rem Perform the build
    call :build x64 static %LEGACY_BUILD%
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  rem Move the output directories
  if exist "%OUTDIR%\LIB Release" (
    rem Perform the install
    call :install release static %LEGACY_BUILD%
    copy /y out32\* "%OUTDIR%\LIB Release" 1>nul
    rd out32 /s /q
  ) else (
    move out32 "%OUTDIR%\LIB Release" 1>nul
  )
  if exist "%OUTDIR%\DLL Release" (

    rem Configuring 64-bit Shared Library Release Build
    copy /y out32dll\* "%OUTDIR%\DLL Release" 1>nul
    rd out32dll /s /q
  ) else (
    call :configure x64 release shared %LEGACY_BUILD%
    move out32dll "%OUTDIR%\DLL Release" 1>nul
  )

    rem Perform the build
    call :build x64 shared %LEGACY_BUILD%

  rem Move the PDB files
  move tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
    rem Perform the install
    call :install release shared %LEGACY_BUILD%
  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul

  )
  rem Remove the intermediate directories
  rd tmp32 /s /q
  rd tmp32dll /s /q

  goto success

:x86
  rem Calculate our output directory
  set OUTDIR=build\Win32\%VC_DESC%
  if not exist %OUTDIR% md %OUTDIR%

  if "%BUILD_CONFIG%" == "release" goto x86release
  if not "%BUILD_CONFIG%" == "release" (

:x86debug
  rem Configuring 32-bit Debug Build
  perl Configure debug-VC-WIN32 no-asm --prefix=%CD%
    rem Configuring 32-bit Static Library Debug Build
    call :configure x86 debug static %LEGACY_BUILD%

  rem Perform the build
  call ms\do_ms
    rem Perform the build
    call :build x86 static %LEGACY_BUILD%
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  rem Move the output directories
  if exist "%OUTDIR%\LIB Debug" (
    rem Perform the install
    call :install debug static %LEGACY_BUILD%
    copy /y out32.dbg\* "%OUTDIR%\LIB Debug" 1>nul
    rd out32.dbg /s /q
  ) else (
    move out32.dbg "%OUTDIR%\LIB Debug" 1>nul
  )
  if exist "%OUTDIR%\DLL Debug" (

    rem Configuring 32-bit Shared Library Debug Build
    copy /y out32dll.dbg\* "%OUTDIR%\DLL Debug" 1>nul
    rd out32dll.dbg /s /q
  ) else (
    move out32dll.dbg "%OUTDIR%\DLL Debug" 1>nul
  )
    call :configure x86 debug shared %LEGACY_BUILD%

    rem Perform the build
    call :build x86 shared %LEGACY_BUILD%

  rem Move the PDB files
    rem Perform the install
  move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul
  move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul

    call :install debug shared %LEGACY_BUILD%
  )
  rem Remove the intermediate directories
  rd tmp32.dbg /s /q
  rd tmp32dll.dbg /s /q

  if "%BUILD_CONFIG%" == "debug" goto success
  if not "%BUILD_CONFIG%" == "debug" (

:x86release
  rem Configuring 32-bit Release Build
  perl Configure VC-WIN32 no-asm --prefix=%CD%
    rem Configuring 32-bit Static Library Release Build
    call :configure x86 release static %LEGACY_BUILD%

  rem Perform the build
  call ms\do_ms
    rem Perform the build
    call :build x86 static %LEGACY_BUILD%
  nmake -f ms\nt.mak
  nmake -f ms\ntdll.mak

  rem Move the output directories
  if exist "%OUTDIR%\LIB Release" (
    rem Perform the install
    call :install release static %LEGACY_BUILD%
    copy /y out32\* "%OUTDIR%\LIB Release" 1>nul
    rd out32 /s /q
  ) else (
    move out32 "%OUTDIR%\LIB Release" 1>nul
  )
  if exist "%OUTDIR%\DLL Release" (

    rem Configuring 32-bit Shared Library Release Build
    copy /y out32dll\* "%OUTDIR%\DLL Release" 1>nul
    rd out32dll /s /q
  ) else (
    call :configure x86 release shared %LEGACY_BUILD%
    move out32dll "%OUTDIR%\DLL Release" 1>nul
  )

    rem Perform the build
    call :build x86 shared %LEGACY_BUILD%

  rem Move the PDB files
  move tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul
    rem Perform the install
    call :install release shared %LEGACY_BUILD%
  move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul

  )
  rem Remove the intermediate directories
  rd tmp32 /s /q
  rd tmp32dll /s /q

  goto success

rem Function to configure the build.
rem
rem %1 - Platform (x86 or x64)
rem %2 - Configuration (release or debug)
rem %3 - Build Type (static or shared)
rem %4 - Build type (TRUE for legacy aka pre v1.1.0; otherwise FALSE)
rem
:configure
  setlocal

  if "%1" == "" exit /B 1
  if "%2" == "" exit /B 1
  if "%3" == "" exit /B 1
  if "%4" == "" exit /B 1

  if "%4" == "TRUE" (
    rem Calculate the build directory
    set build_dir=%cd%

    rem Calculate the configure options
    if "%1" == "x86" (
      if "%2" == "debug" (
        set options=debug-VC-WIN32
      ) else if "%2" == "release" (
        set options=VC-WIN32
      ) else (
        exit /B 1
      )

      set options=!options! no-asm
    ) else if "%1" == "x64" (
      if "%2" == "debug" (
        set options=debug-VC-WIN64A
      ) else if "%2" == "release" (
        set options=VC-WIN64A
      ) else (
        exit /B 1
      )
    ) else (
      exit /B 1
    )
  ) else if "%4" == "FALSE" (
    rem Has configure already been ran?
    if exist makefile (
      rem Clean up the previous build
      nmake clean

      rem Remove the old makefile
      del makefile 1>nul
    )

    rem Calculate the build directory
    set build_dir=%cd%\build\tmp

    rem Calculate the configure options
    if "%1" == "x86" (
      set options=VC-WIN32
    ) else if "%1" == "x64" (
      set options=VC-WIN64A
    ) else (
      exit /B 1
    )

    if "%2" == "debug" (
      set options=!options! --debug
    ) else if "%2" == "release" (
      set options=!options! --release
    ) else (
      exit /B 1
    )

    if "%3" == "static" (
      set options=!options! no-shared
    ) else if not "%3" == "shared" (
      exit /B 1
    )

    set options=!options! no-asm
  ) else (
    exit /B 1
  )

  set options=%options% --prefix=%build_dir%

  rem Run the configure
  perl Configure %options%

  exit /B %ERRORLEVEL

rem Main build function.
rem
rem %1 - Platform (x86 or x64)
rem %2 - Build Type (static or shared)
rem %3 - Build type (TRUE for legacy aka pre v1.1.0; otherwise FALSE)
rem
:build
  setlocal

  if "%1" == "" exit /B 1
  if "%2" == "" exit /B 1
  if "%3" == "" exit /B 1

  if "%3" == "TRUE" (
    if "%1" == "x86" (
      call ms\do_ms.bat
    ) else if "%1" == "x64" (
      call ms\do_win64a.bat
    ) else (
      exit /B 1
    )

    if "%2" == "static" (
      nmake -f ms\nt.mak
    ) else if "%2" == "shared" (
      nmake -f ms\ntdll.mak
    ) else (
      exit /B 1
    )
  ) else if "%2" == "FALSE" (
    nmake
  ) else (
    exit /B 1
  )

  exit /B 0

rem Main installation function.
rem
rem %1 - Configuration (release or debug)
rem %2 - Build Type (static or shared)
rem %3 - Build type (TRUE for legacy aka pre v1.1.0; otherwise FALSE)
rem
:install
  setlocal

  if "%1" == "" exit /B 1
  if "%2" == "" exit /B 1
  if "%3" == "" exit /B 1

  rem Copy the generated files to our directory structure
  if "%3" == "TRUE" (
    if "%1" == "debug" (
      if "%2" == "static" (
        rem Move the output directories
        if exist "%OUTDIR%\LIB Debug" (
          copy /y out32.dbg\* "%OUTDIR%\LIB Debug" 1>nul
          rd out32.dbg /s /q
        ) else (
          move out32.dbg "%OUTDIR%\LIB Debug" 1>nul
        )

        rem Move the PDB files
        move tmp32.dbg\lib.pdb "%OUTDIR%\LIB Debug" 1>nul

        rem Remove the intermediate directories
        rd tmp32.dbg /s /q
      ) else if "%2" == "shared" (
        if exist "%OUTDIR%\DLL Debug" (
          copy /y out32dll.dbg\* "%OUTDIR%\DLL Debug" 1>nul
          rd out32dll.dbg /s /q
        ) else (
          move out32dll.dbg "%OUTDIR%\DLL Debug" 1>nul
        )

        rem Move the PDB files
        move tmp32dll.dbg\lib.pdb "%OUTDIR%\DLL Debug" 1>nul

        rem Remove the intermediate directories
        rd tmp32dll.dbg /s /q
      ) else (
        exit /B 1
      )
    ) else if "%1" == "release" (
      if "%2" == "static" (
        rem Move the output directories
        if exist "%OUTDIR%\LIB Release" (
          copy /y out32\* "%OUTDIR%\LIB Release" 1>nul
          rd out32 /s /q
        ) else (
          move out32 "%OUTDIR%\LIB Release" 1>nul
        )

        rem Move the PDB files
        move tmp32\lib.pdb "%OUTDIR%\LIB Release" 1>nul

        rem Remove the intermediate directories
        rd tmp32 /s /q
      ) else if "%2" == "shared" (
        if exist "%OUTDIR%\DLL Release" (
          copy /y out32dll\* "%OUTDIR%\DLL Release" 1>nul
          rd out32dll /s /q
        ) else (
          move out32dll "%OUTDIR%\DLL Release" 1>nul
        )

        rem Move the PDB files
        move tmp32dll\lib.pdb "%OUTDIR%\DLL Release" 1>nul

        rem Remove the intermediate directories
        rd tmp32dll /s /q
      ) else (
        exit /B 1
      )
    )
  ) else if "%3" == "FALSE" (
    rem Calculate the build directory
    set build_dir=%cd%\build\tmp

    rem Perform the installation
    nmake install_sw

    rem Move the output directories
    if "%1" == "debug" (
      if "%2" == "static" (
        if not exist "%OUTDIR%\LIB Debug" (
          mkdir "%OUTDIR%\LIB Debug" 1>nul
        )

        move !build_dir!\lib\*.lib "%OUTDIR%\LIB Debug" 1>nul
        move !build_dir!\bin\*.exe "%OUTDIR%\LIB Debug" 1>nul
      ) else if "%2" == "shared" (
        if not exist "%OUTDIR%\DLL Debug" (
          mkdir "%OUTDIR%\DLL Debug" 1>nul
        )

        move !build_dir!\lib\*.lib "%OUTDIR%\DLL Debug" 1>nul
        move !build_dir!\bin\*.dll "%OUTDIR%\DLL Debug" 1>nul
        move !build_dir!\bin\*.exe "%OUTDIR%\DLL Debug" 1>nul
        move !build_dir!\bin\*.pdb "%OUTDIR%\DLL Debug" 1>nul
      ) else (
        exit /B 1
      )
    ) else if "%1" == "release" (
      if "%2" == "static" (
        if not exist "%OUTDIR%\LIB Release" (
          mkdir "%OUTDIR%\LIB Release" 1>nul
        )

        move !build_dir!\lib\*.lib "%OUTDIR%\LIB Release" 1>nul
        move !build_dir!\bin\*.exe "%OUTDIR%\LIB Release" 1>nul
      ) else if "%2" == "shared" (
        if not exist "%OUTDIR%\DLL Release" (
          mkdir "%OUTDIR%\DLL Release" 1>nul
        )
  
        move !build_dir!\lib\*.lib "%OUTDIR%\DLL Release" 1>nul
        move !build_dir!\bin\*.dll "%OUTDIR%\DLL Release" 1>nul
        move !build_dir!\bin\*.exe "%OUTDIR%\DLL Release" 1>nul
      ) else (
        exit /B 1
      )
    ) else (
      exit /B 1
    )

    rem Remove the output directories
    rd !build_dir! /s /q
  ) else (
    exit /B 1
  )

  exit /B 0

:syntax
  rem Display the help
  echo.
  echo Usage: build-openssl ^<compiler^> [platform] [configuration] [directory] [-VSpath] ["VSpath"] [-perlpath] ["perlpath"]
  echo.
  echo Compiler:
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
664
665
666
667
668
669
670








671
672
673
674
675
676
677
678







-
-
-
-
-
-
-
-








  goto error

:noopenssl
  echo.
  echo Error: Cannot locate OpenSSL source directory
  goto error

:unsupported
  echo.
  echo Error: Unsupported OpenSSL version.
  echo The pre-generated project files and this build script only support the
  echo LTS version of OpenSSL ^(v1.0.2^). The next version of this build script
  echo will support OpenSSL v1.1.0.
  goto error

:error
  if "%OS%" == "Windows_NT" endlocal
  exit /B 1

:success
  cd /d %SAVED_PATH%
  endlocal
  exit /B 0
Changes to jni/curl/projects/checksrc.bat.
139
140
141
142
143
144
145
146

147
148
149
150
151
152
153
139
140
141
142
143
144
145

146
147
148
149
150
151
152
153







-
+







      for /f "delims=" %%i in ('dir "%SRC_DIR%\tests\server\*.h.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\tests\server" "%%i"
    )
  )

  if "%CHECK_EXAMPLES%" == "TRUE" (
    rem Check the docs\examples directory
    if exist %SRC_DIR%\docs\examples (
      for /f "delims=" %%i in ('dir "%SRC_DIR%\docs\examples\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\docs\examples" "%%i"
      for /f "delims=" %%i in ('dir "%SRC_DIR%\docs\examples\*.c.*" /b 2^>NUL') do @perl "%SRC_DIR%\lib\checksrc.pl" "-D%SRC_DIR%\docs\examples" -ASNPRINTF "%%i"
    )
  )

  goto success

:syntax
  rem Display the help
Changes to jni/curl/scripts/Makefile.in.
369
370
371
372
373
374
375
376

377
378

379
380
381
382
383
384
385
369
370
371
372
373
374
375

376
377

378
379
380
381
382
383
384
385







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu scripts/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign scripts/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu scripts/Makefile
	  $(AUTOMAKE) --foreign scripts/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/src/tool_cb_prg.c.
217
218
219
220
221
222
223
224

225
226
227
228
229
230
231
217
218
219
220
221
222
223

224
225
226
227
228
229
230
231







-
+







    struct ttysize ts;
    if(!ioctl(STDIN_FILENO, TIOCGSIZE, &ts))
      cols = ts.ts_cols;
#elif defined(TIOCGWINSZ)
    struct winsize ts;
    if(!ioctl(STDIN_FILENO, TIOCGWINSZ, &ts))
      cols = ts.ws_col;
#elif defined(_WIN32)
#elif defined(WIN32)
    {
      HANDLE  stderr_hnd = GetStdHandle(STD_ERROR_HANDLE);
      CONSOLE_SCREEN_BUFFER_INFO console_info;

      if((stderr_hnd != INVALID_HANDLE_VALUE) &&
         GetConsoleScreenBufferInfo(stderr_hnd, &console_info)) {
        /*
Changes to jni/curl/src/tool_cb_wrt.c.
77
78
79
80
81
82
83

84
85
86
87
88
89
90
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91







+







  size_t rc;
  struct OutStruct *outs = userdata;
  struct OperationConfig *config = outs->config;
  size_t bytes = sz * nmemb;
  bool is_tty = config->global->isatty;
#ifdef WIN32
  CONSOLE_SCREEN_BUFFER_INFO console_info;
  intptr_t fhnd;
#endif

  /*
   * Once that libcurl has called back tool_write_cb() the returned value
   * is checked against the amount that was intended to be written, if
   * it does not match then it fails with CURLE_WRITE_ERROR. So at this
   * point returning a value different from sz*nmemb indicates failure.
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
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







-
+
+

-
+
-



-














-
-







            "Use \"--output -\" to tell curl to output it to your terminal "
            "anyway, or consider \"--output <FILE>\" to save to a file.\n");
      config->synthetic_error = ERR_BINARY_TERMINAL;
      return failure;
    }
  }

#ifdef _WIN32
#ifdef WIN32
  fhnd = _get_osfhandle(fileno(outs->stream));
  if(isatty(fileno(outs->stream)) &&
     GetConsoleScreenBufferInfo(
     GetConsoleScreenBufferInfo((HANDLE)fhnd, &console_info)) {
       (HANDLE)_get_osfhandle(fileno(outs->stream)), &console_info)) {
    DWORD in_len = (DWORD)(sz * nmemb);
    wchar_t* wc_buf;
    DWORD wc_len;
    intptr_t fhnd;

    /* calculate buffer size for wide characters */
    wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len,  NULL, 0);
    wc_buf = (wchar_t*) malloc(wc_len * sizeof(wchar_t));
    if(!wc_buf)
      return failure;

    /* calculate buffer size for multi-byte characters */
    wc_len = MultiByteToWideChar(CP_UTF8, 0, buffer, in_len, wc_buf, wc_len);
    if(!wc_len) {
      free(wc_buf);
      return failure;
    }

    fhnd = _get_osfhandle(fileno(outs->stream));

    if(!WriteConsoleW(
        (HANDLE) fhnd,
        wc_buf,
        wc_len,
        &wc_len,
        NULL)) {
      free(wc_buf);
Changes to jni/curl/src/tool_cfgable.c.
30
31
32
33
34
35
36
37

38
39
40
41


42
43
44
45
46
47
48
30
31
32
33
34
35
36

37
38
39


40
41
42
43
44
45
46
47
48







-
+


-
-
+
+







{
  memset(config, 0, sizeof(struct OperationConfig));

  config->postfieldsize = -1;
  config->use_httpget = FALSE;
  config->create_dirs = FALSE;
  config->maxredirs = DEFAULT_MAXREDIRS;
  config->proto = CURLPROTO_ALL; /* FIXME: better to read from library */
  config->proto = CURLPROTO_ALL;
  config->proto_present = FALSE;
  config->proto_redir = CURLPROTO_ALL & /* All except FILE, SCP and SMB */
                        ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB |
                          CURLPROTO_SMBS);
    ~(CURLPROTO_FILE | CURLPROTO_SCP | CURLPROTO_SMB |
      CURLPROTO_SMBS);
  config->proto_redir_present = FALSE;
  config->proto_default = NULL;
  config->tcp_nodelay = TRUE; /* enabled by default */
  config->happy_eyeballs_timeout_ms = CURL_HET_DEFAULT;
  config->http09_allowed = TRUE;
}

Changes to jni/curl/src/tool_doswin.c.
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
595
596
597
598
599
600
601

602
603
604
605
606
607
608







-







        --blen;
        if(!(flags & SANITIZE_ALLOW_TRUNCATE) || truncate_dryrun(base, blen))
          return SANITIZE_ERR_INVALID_PATH;
        base[blen] = '\0';
      }
      memmove(base + 1, base, blen + 1);
      base[0] = '_';
      ++blen;
    }
  }
#endif

  *sanitized = strdup(fname);
  return (*sanitized ? SANITIZE_ERR_OK : SANITIZE_ERR_OUT_OF_MEMORY);
}
Changes to jni/curl/src/tool_formparse.c.
343
344
345
346
347
348
349

350

351
352
353
354
355
356
357
358
359
360
361
362
343
344
345
346
347
348
349
350

351
352
353
354


355
356
357
358
359
360
361







+
-
+



-
-







 * helper function to get a word from form param
 * after call get_parm_word, str either point to string end
 * or point to any of end chars.
 */
static char *get_param_word(char **str, char **end_pos, char endchar)
{
  char *ptr = *str;
  /* the first non-space char is here */
  char *word_begin = NULL;
  char *word_begin = ptr;
  char *ptr2;
  char *escape = NULL;

  /* the first non-space char is here */
  word_begin = ptr;
  if(*ptr == '"') {
    ++ptr;
    while(*ptr) {
      if(*ptr == '\\') {
        if(ptr[1] == '\\' || ptr[1] == '"') {
          /* remember the first escape position */
          if(!escape)
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
563
564
565
566
567
568
569

570
571
572
573
574
575
576







-







        hdrfile = get_param_word(&p, &endpos, endchar);
        /* If not quoted, strip trailing spaces. */
        if(hdrfile == tp)
          while(endpos > hdrfile && ISSPACE(endpos[-1]))
            endpos--;
        sep = *p;
        *endpos = '\0';
        /* TODO: maybe special fopen for VMS? */
        fp = fopen(hdrfile, FOPEN_READTEXT);
        if(!fp)
          warnf(config->global, "Cannot read from %s: %s\n", hdrfile,
                strerror(errno));
        else {
          int i = read_field_headers(config, hdrfile, fp, &headers);

Changes to jni/curl/src/tool_getparam.c.
511
512
513
514
515
516
517

518
519
520
521
522

523
524
525
526
527
528
529
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531







+





+







  *usedarg = FALSE; /* default is that we don't use the arg */

  if(('-' != flag[0]) || ('-' == flag[1])) {
    /* this should be a long name */
    const char *word = ('-' == flag[0]) ? flag + 2 : flag;
    size_t fnam = strlen(word);
    int numhits = 0;
    bool noflagged = FALSE;

    if(!strncmp(word, "no-", 3)) {
      /* disable this option but ignore the "no-" part when looking for it */
      word += 3;
      toggle = FALSE;
      noflagged = TRUE;
    }

    for(j = 0; j < sizeof(aliases)/sizeof(aliases[0]); j++) {
      if(curl_strnequal(aliases[j].lname, word, fnam)) {
        longopt = TRUE;
        numhits++;
        if(curl_strequal(aliases[j].lname, word)) {
539
540
541
542
543
544
545



546
547
548
549
550
551
552
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557







+
+
+







    if(numhits > 1) {
      /* this is at least the second match! */
      return PARAM_OPTION_AMBIGUOUS;
    }
    if(hit < 0) {
      return PARAM_OPTION_UNKNOWN;
    }
    if(noflagged && (aliases[hit].desc != ARG_BOOL))
      /* --no- prefixed an option that isn't boolean! */
      return PARAM_NO_NOT_BOOLEAN;
  }
  else {
    flag++; /* prefixed with one dash, pass it */
    hit = -1;
    parse = flag;
  }

Changes to jni/curl/src/tool_getparam.h.
1
2
3
4
5
6
7
8
9
10

11
12
13
14
15
16
17
1
2
3
4
5
6
7
8
9

10
11
12
13
14
15
16
17









-
+







#ifndef HEADER_CURL_TOOL_GETPARAM_H
#define HEADER_CURL_TOOL_GETPARAM_H
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
38
39
40
41
42
43
44

45
46
47
48
49
50
51
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52







+







  PARAM_NEGATIVE_NUMERIC,
  PARAM_LIBCURL_DOESNT_SUPPORT,
  PARAM_LIBCURL_UNSUPPORTED_PROTOCOL,
  PARAM_NO_MEM,
  PARAM_NEXT_OPERATION,
  PARAM_NO_PREFIX,
  PARAM_NUMBER_TOO_LARGE,
  PARAM_NO_NOT_BOOLEAN,
  PARAM_LAST
} ParameterError;

struct GlobalConfig;
struct OperationConfig;

ParameterError getparameter(const char *flag, char *nextarg, bool *usedarg,
Changes to jni/curl/src/tool_help.c.
16
17
18
19
20
21
22



23
24
25
26
27
28
29
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32







+
+
+







 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "tool_setup.h"
#ifdef HAVE_STRCASECMP
#include <strings.h>
#endif

#include "tool_panykey.h"
#include "tool_help.h"
#include "tool_libinfo.h"
#include "tool_version.h"

#include "memdebug.h" /* keep this as LAST include */
588
589
590
591
592
593
594




595
596
597
598
599
600
601
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608







+
+
+
+







#ifdef USE_METALINK
    featp[numfeat++] = (char *)"Metalink";
#endif
    qsort(&featp[0], numfeat, sizeof(char *), featcomp);
    for(i = 0; i< numfeat; i++)
      printf(" %s", featp[i]);
    puts(""); /* newline */
  }
  if(strcmp(CURL_VERSION, curlinfo->version)) {
    printf("WARNING: curl and libcurl versions do not match. "
           "Functionality may be affected.\n");
  }
}

void tool_list_engines(CURL *curl)
{
  struct curl_slist *engines = NULL;

Changes to jni/curl/src/tool_helpers.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
62
63
64
65
66
67
68


69
70
71
72
73
74
75
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77







+
+







    return "a specified protocol is unsupported by libcurl";
  case PARAM_NO_MEM:
    return "out of memory";
  case PARAM_NO_PREFIX:
    return "the given option can't be reversed with a --no- prefix";
  case PARAM_NUMBER_TOO_LARGE:
    return "too large number";
  case PARAM_NO_NOT_BOOLEAN:
    return "used '--no-' for option that isn't a boolean";
  default:
    return "unknown error";
  }
}

int SetHTTPrequest(struct OperationConfig *config, HttpReq req, HttpReq *store)
{
Changes to jni/curl/src/tool_hugehelp.c.
179
180
181
182
183
184
185
186
187


188
189
190
191
192
193
194
179
180
181
182
183
184
185


186
187
188
189
190
191
192
193
194







-
-
+
+







"              This option enables the alt-svc parser in curl. If the file name\n"
"              points to an existing alt-svc cache file, that will be used. Af-\n"
, stdout);
 fputs(
"              ter  a  completed  transfer, the cache will be saved to the file\n"
"              name again if it has been modified.\n"
"\n"
"              Specifiy a \"\" file name (zero length)  to  avoid  loading/saving\n"
"              and make curl just handle the cache in memory.\n"
"              Specify a \"\" file name (zero length) to avoid loading/saving and\n"
"              make curl just handle the cache in memory.\n"
"\n"
"              If  this  option  is used several times, curl will load contents\n"
"              from all the files but the the last one will be used for saving.\n"
"\n"
"              Added in 7.64.1.\n"
"\n"
"       --anyauth\n"
427
428
429
430
431
432
433
434
435


436
437
438
439
440
441
442





443
444
445
446
447
448
449
427
428
429
430
431
432
433


434
435
436
437





438
439
440
441
442
443
444
445
446
447
448
449







-
-
+
+


-
-
-
-
-
+
+
+
+
+







, stdout);
 fputs(
"              without the initial double dashes and if so, the colon or equals\n"
"              characters can be used as separators. If the option is specified\n"
"              with one or two dashes, there can be no colon or equals  charac-\n"
"              ter between the option and its parameter.\n"
"\n"
"              If the parameter is to contain whitespace, the parameter must be\n"
"              enclosed within quotes. Within double quotes, the following  es-\n"
"              If  the  parameter  contains whitespace (or starts with : or =),\n"
"              the parameter must be  enclosed  within  quotes.  Within  double\n"
, stdout);
 fputs(
"              cape sequences are available: \\\\, \\\", \\t, \\n, \\r and \\v. A back-\n"
"              slash preceding any other letter is ignored. If the first column\n"
"              of  a  config line is a '#' character, the rest of the line will\n"
"              be treated as a comment. Only write one option per physical line\n"
"              in the config file.\n"
"              quotes,  the  following  escape sequences are available: \\\\, \\\",\n"
"              \\t, \\n, \\r and \\v. A backslash preceding any other letter is ig-\n"
"              nored.  If the first column of a config line is a '#' character,\n"
"              the rest of the line will be treated as a  comment.  Only  write\n"
"              one option per physical line in the config file.\n"
"\n"
"              Specify  the  filename  to -K, --config as '-' to make curl read\n"
"              the file from stdin.\n"
"\n"
, stdout);
 fputs(
"              Note that to be able to specify a URL in the  config  file,  you\n"
4301
4302
4303
4304
4305
4306
4307
4308
4309


4310
4311
4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323












4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336













4337
4338
4339
4340
4341
4342



4343
4344
4345
4346
4347
4348
4349
4350
4351
4352
4353












4354
4355
4356
4357
4358




4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369












4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384

















4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411



























4412
4413

4414
4415
4416
4417



4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443





























4444
4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462


















4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493































4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521































4522
4523
4524
4525
4526
4527







4528
4529
4530
4531
4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548




















4549
4550
4551
4552


4553
4554


4555
4556
4557
4558
4559
4560
4561
4562
4563










4564
4565
4566
4567
4568
4569
4570
4571
4572









4573
4574
4575
4576
4577
4578
4579
4580
4581
4582
4583
4584













4585
4586
4587
4588




4589
4590
4591
4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611























4612
4613
4614
4615
4616
4617
4618






4619
4620
4621
4622
4623
4624
4625
4626
4627










4628
4629

4630
4631
4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642













4643
4644
4645
4646
4647
4648
4649
4650
4651









4652
4653
4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665














4666
4667
4668
4669
4670
4671
4672
4673
4674









4675
4676
4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741


































































4742
4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788

















































4789
4790
4791
4792
4793
4794
4795






4796
4797
4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815



















4816
4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853







































4854
4855

4856
4857
4858


4859
4860
4861
4862
4863
4864
4865
4866
4867









4868
4869
4870


4871
4872
4873


4874
4875
4876





4877
4878
4879
4880
4881
4882






4883
4884

4885
4886
4887
4888
4889
4890
4891
4892









4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919




























4920
4921
4922
4923
4924
4925







4926
4927
4928
4929
4930
4931





4932
4933
4934
4935
4936
4937
4938







4939
4940
4941
4942
4943
4944
4945
4946
4947









4948
4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965


















4966
4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998


































4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058



























































5059
5060
5061
5062
5063
5064
5065
5066








5067
5068
5069



5070
5071
5072
5073
5074
5075
5076
5077








5078
5079

5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103



























5104
5105
5106


5107
5108
5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124

















5125
5126
5127
5128
5129
5130
5131
5132
5133










5134
5135
5136
5137
5138
5139






5140
5141

5142
5143

5144
5145

5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167

























5168
5169
5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186




















5187
5188
5189
5190
5191
5192
5193







5194
5195

5196
5197

5198
5199
5200
5201
5202
5203
5204
5205
5206
5207
5208












5209
5210
5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230






















5231
5232
5233
5234
5235





5236
5237
5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257























5258
5259
5260
5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276





















5277
5278
5279
5280
5281
5282
5283
5284
5285







5286
5287
5288
5289



5290
5291
5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311




























5312
5313
5314
5315
5316
5317
5318
5319
5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333






















5334
5335

5336
5337

5338
5339
5340
5341



5342
5343
5344
5345
5346
5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368



























5369
5370
5371
5372
5373
5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401































5402
5403
5404
5405
5406




5407
5408
5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430

























5431
5432
5433
5434
5435
5436
5437
5438
5439
5440









5441
5442

5443
5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456















5457
5458

5459
5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491

































5492
5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508

















5509
5510
5511
5512
5513
5514
5515
5516
5517
5518
5519











5520
5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553



































5554
5555
5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
















5571
5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584














5585
5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601
















5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628




























5629
5630
5631
5632
5633
5634
5635
5636
5637
5638









5639
5640
5641
5642




5643
5644
5645
5646
5647
5648
5649
5650
5651
5652












5653
5654
5655


5656
5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693





































5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712




















5713
5714
5715
5716
5717
5718
5719
5720
5721
5722
5723










5724
5725
5726
5727
5728
5729
5730
5731








5732
5733
5734


5735
5736


5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750
5751















5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795















































5796
5797
5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820



























5821
5822
5823
5824
5825
5826





5827
5828
5829
5830
5831
5832
5833
5834
5835
5836
5837











5838
5839
5840
5841
5842
5843





5844
5845
5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857














5858
5859
5860
5861
5862
5863






5864
5865
5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881

















5882
5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918





































5919
5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930












5931
5932
5933
5934
5935
5936
5937







5938
5939
5940



5941
5942
5943
5944
5945
5946
5947
5948
5949








5950
5951
5952



5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965













5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980
5981















5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000
6001




















6002
6003
6004
6005
6006
6007
6008
6009
6010











6011
6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039





























6040
6041
6042

6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053
6054












6055
6056
6057


6058
6059
6060
6061


6062
6063
6064
6065
6066
6067
6068
6069
6070













6071
6072
6073
6074




6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090

















6091
6092
6093
6094



6095
6096

6097
6098


6099
6100
6101
6102





6103
6104
6105
6106
6107
6108
6109







6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145






































6146
6147
6148
6149
6150





6151
6152
6153
6154
6155
6156
6157
6158
6159








6160
6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196





































6197
6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212

















6213
6214
6215
6216
6217



6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247































6248
6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276





























6277
6278
6279
6280








6281
6282
6283
6284
6285
6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306

























6307
6308
6309
6310




6311
6312

6313
6314
6315
6316
6317
6318
6319





6320
6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344

























6345
6346

6347
6348
6349
6350
6351
6352
6353
6354
6355
6356












6357
6358
6359
6360
6361



6362
6363
6364


6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387
























6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402















6403
6404
6405

6406
6407
6408
6409
6410






6411
6412
6413



6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431
6432
6433



















6434
6435
6436
6437
6438



6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460
6461
6462
6463
6464


























6465
6466
6467
6468
6469
6470
6471
6472
6473












6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492
6493
6494




















6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505













6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529
6530
























6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542
6543













6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562
6563




















6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
6576













6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600



























6601
6602
6603
6604
6605
6606






6607
6608
6609
6610



6611
6612
6613
6614
6615
6616
6617
6618








6619
6620
6621
6622



6623
6624
6625
6626
6627






6628
6629
6630
6631


6632
6633
6634

6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658





























6659
6660
6661

6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676
6677















6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715
6716







































6717
6718

6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729













6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740
6741











6742
6743

6744
6745
6746
6747
6748
6749
6750
6751
6752



6753
6754
6755
6756
6757
6758







6759
6760

6761
6762
6763
6764
6765
6766
6767
6768
6769
6770
















6771
6772
6773
6774
6775





6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796
6797
6798
6799























6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822
6823
6824
6825
6826
6827
6828
6829


























6830
6831
6832
6833
6834
6835
6836
6837
6838










6839
6840
6841
6842
6843
6844
6845
6846
6847
6848
6849
6850












6851
6852
6853
6854
6855
6856
6857







6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876
6877
6878
6879
6880
6881
6882
6883

























6884
6885
6886
6887
6888





6889
6890
6891
6892
6893
6894
6895







6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912
6913
6914
6915
6916
6917
6918
6919
6920
























6921
6922
6923
6924
6925
6926








6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937
6938
6939
6940
6941
6942

















6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
6982
6983
6984
6985












































6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996
6997
6998
6999
7000
7001















7002
7003
7004
7005
7006
7007
7008
7009
7010
7011











7012
7013
7014
7015
7016




7017
7018
7019
7020
7021
7022
7023
7024
7025
7026
7027
7028
7029













7030
7031
7032
7033
7034
7035
7036
7037
7038
7039
7040
7041
7042












7043
7044
7045
7046
7047
7048
7049









7050
7051
7052


7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070
7071
7072
7073
7074
7075























7076
7077
7078





7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089
7090
7091
7092














7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110

















7111
7112

7113
7114
7115


7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141




























7142
7143
7144
7145
7146
7147
7148
7149









7150
7151
7152
7153
7154





7155
7156
7157
7158
7159
7160
7161
7162
7163
7164









7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
































7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209















7210
7211
7212
7213
7214
7215
7216







7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231














7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242












7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
















7259
7260
7261
7262
7263
7264
7265
7266









7267
7268
7269
7270
7271
7272
7273
7274
7275









7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299























7300
7301
7302
7303
7304
7305







7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341





































7342
7343
7344
7345


7346
7347
7348
7349
7350
7351
7352
7353
7354
7355











7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383



























7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400


















7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431































7432
7433
7434
7435
7436
7437
7438






7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467



























7468
7469
7470
7471
7472
7473
7474
7475
7476












7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501

























7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512












7513
7514
7515
7516
7517
7518
7519






7520
7521
7522
7523
7524
7525
7526
7527
7528









7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554


























7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567














7568
7569
7570
7571
7572
7573
7574
7575
7576
7577








7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597





















7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615

















7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652






































7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695












































7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713


















7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745






























7746
7747
7748
7749
7750
7751
7752
7753







7754
7755
7756
7757
7758
7759
7760
7761
7762









7763
7764
7765
7766
7767
7768
7769
7770











7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795























7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826































7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840

















7841
7842


7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854












7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901















































7902
7903
7904
7905
7906
7907
7908







7909
7910


7911
7912
7913
7914
7915




7916
7917
7918
7919
7920
7921
7922
7923
7924
7925











7926
7927
7928
7929
7930
7931
7932
7933








7934
7935
7936
7937
7938
7939






7940
7941
7942




7943
7944
7945



7946
7947
7948
7949
7950
7951





7952
7953
7954
7955




7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968












7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986


















7987
7988
7989
7990
7991
7992
7993
7994







7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107



















































































































8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130


























8131
8132
8133


8134
8135

8136
8137
8138
8139
8140





8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158

















8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198








































8199
8200
8201
8202
8203
8204
8205
8206
4301
4302
4303
4304
4305
4306
4307


4308
4309
4310
4311












4312
4313
4314
4315
4316
4317
4318
4319
4320
4321
4322
4323













4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336






4337
4338
4339











4340
4341
4342
4343
4344
4345
4346
4347
4348
4349
4350
4351





4352
4353
4354
4355











4356
4357
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367















4368
4369
4370
4371
4372
4373
4374
4375
4376
4377
4378
4379
4380
4381
4382
4383
4384



























4385
4386
4387
4388
4389
4390
4391
4392
4393
4394
4395
4396
4397
4398
4399
4400
4401
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411


4412




4413
4414
4415


























4416
4417
4418
4419
4420
4421
4422
4423
4424
4425
4426
4427
4428
4429
4430
4431
4432
4433
4434
4435
4436
4437
4438
4439
4440
4441
4442
4443
4444



















4445
4446
4447
4448
4449
4450
4451
4452
4453
4454
4455
4456
4457
4458
4459
4460
4461
4462































4463
4464
4465
4466
4467
4468
4469
4470
4471
4472
4473
4474
4475
4476
4477
4478
4479
4480
4481
4482
4483
4484
4485
4486
4487
4488
4489
4490
4491
4492
4493




























4494
4495
4496
4497
4498
4499
4500
4501
4502
4503
4504
4505
4506
4507
4508
4509
4510
4511
4512
4513
4514
4515
4516
4517
4518
4519
4520
4521
4522
4523
4524






4525
4526
4527
4528
4529
4530
4531





















4532
4533
4534
4535
4536
4537
4538
4539
4540
4541
4542
4543
4544
4545
4546
4547
4548
4549
4550
4551




4552
4553


4554
4555









4556
4557
4558
4559
4560
4561
4562
4563
4564
4565









4566
4567
4568
4569
4570
4571
4572
4573
4574












4575
4576
4577
4578
4579
4580
4581
4582
4583
4584
4585
4586
4587




4588
4589
4590
4591























4592
4593
4594
4595
4596
4597
4598
4599
4600
4601
4602
4603
4604
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614







4615
4616
4617
4618
4619
4620









4621
4622
4623
4624
4625
4626
4627
4628
4629
4630


4631













4632
4633
4634
4635
4636
4637
4638
4639
4640
4641
4642
4643
4644









4645
4646
4647
4648
4649
4650
4651
4652
4653














4654
4655
4656
4657
4658
4659
4660
4661
4662
4663
4664
4665
4666
4667









4668
4669
4670
4671
4672
4673
4674
4675
4676



































































4677
4678
4679
4680
4681
4682
4683
4684
4685
4686
4687
4688
4689
4690
4691
4692
4693
4694
4695
4696
4697
4698
4699
4700
4701
4702
4703
4704
4705
4706
4707
4708
4709
4710
4711
4712
4713
4714
4715
4716
4717
4718
4719
4720
4721
4722
4723
4724
4725
4726
4727
4728
4729
4730
4731
4732
4733
4734
4735
4736
4737
4738
4739
4740
4741
4742















































4743
4744
4745
4746
4747
4748
4749
4750
4751
4752
4753
4754
4755
4756
4757
4758
4759
4760
4761
4762
4763
4764
4765
4766
4767
4768
4769
4770
4771
4772
4773
4774
4775
4776
4777
4778
4779
4780
4781
4782
4783
4784
4785
4786
4787
4788
4789
4790
4791







4792
4793
4794
4795
4796
4797




















4798
4799
4800
4801
4802
4803
4804
4805
4806
4807
4808
4809
4810
4811
4812
4813
4814
4815
4816






































4817
4818
4819
4820
4821
4822
4823
4824
4825
4826
4827
4828
4829
4830
4831
4832
4833
4834
4835
4836
4837
4838
4839
4840
4841
4842
4843
4844
4845
4846
4847
4848
4849
4850
4851
4852
4853
4854
4855


4856



4857
4858









4859
4860
4861
4862
4863
4864
4865
4866
4867



4868
4869



4870
4871



4872
4873
4874
4875
4876






4877
4878
4879
4880
4881
4882


4883








4884
4885
4886
4887
4888
4889
4890
4891
4892



























4893
4894
4895
4896
4897
4898
4899
4900
4901
4902
4903
4904
4905
4906
4907
4908
4909
4910
4911
4912
4913
4914
4915
4916
4917
4918
4919
4920






4921
4922
4923
4924
4925
4926
4927






4928
4929
4930
4931
4932







4933
4934
4935
4936
4937
4938
4939









4940
4941
4942
4943
4944
4945
4946
4947
4948


















4949
4950
4951
4952
4953
4954
4955
4956
4957
4958
4959
4960
4961
4962
4963
4964
4965
4966

































4967
4968
4969
4970
4971
4972
4973
4974
4975
4976
4977
4978
4979
4980
4981
4982
4983
4984
4985
4986
4987
4988
4989
4990
4991
4992
4993
4994
4995
4996
4997
4998
4999
5000




























































5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
5019
5020
5021
5022
5023
5024
5025
5026
5027
5028
5029
5030
5031
5032
5033
5034
5035
5036
5037
5038
5039
5040
5041
5042
5043
5044
5045
5046
5047
5048
5049
5050
5051
5052
5053
5054
5055
5056
5057
5058
5059








5060
5061
5062
5063
5064
5065
5066
5067



5068
5069
5070








5071
5072
5073
5074
5075
5076
5077
5078


5079
























5080
5081
5082
5083
5084
5085
5086
5087
5088
5089
5090
5091
5092
5093
5094
5095
5096
5097
5098
5099
5100
5101
5102
5103
5104
5105
5106



5107
5108


















5109
5110
5111
5112
5113
5114
5115
5116
5117
5118
5119
5120
5121
5122
5123
5124
5125









5126
5127
5128
5129
5130
5131
5132
5133
5134
5135






5136
5137
5138
5139
5140
5141


5142


5143


5144






















5145
5146
5147
5148
5149
5150
5151
5152
5153
5154
5155
5156
5157
5158
5159
5160
5161
5162
5163
5164
5165
5166
5167
5168
5169



















5170
5171
5172
5173
5174
5175
5176
5177
5178
5179
5180
5181
5182
5183
5184
5185
5186
5187
5188
5189







5190
5191
5192
5193
5194
5195
5196


5197


5198











5199
5200
5201
5202
5203
5204
5205
5206
5207
5208
5209
5210






















5211
5212
5213
5214
5215
5216
5217
5218
5219
5220
5221
5222
5223
5224
5225
5226
5227
5228
5229
5230
5231
5232





5233
5234
5235
5236
5237






















5238
5239
5240
5241
5242
5243
5244
5245
5246
5247
5248
5249
5250
5251
5252
5253
5254
5255
5256
5257
5258
5259
5260



















5261
5262
5263
5264
5265
5266
5267
5268
5269
5270
5271
5272
5273
5274
5275
5276
5277
5278
5279
5280
5281









5282
5283
5284
5285
5286
5287
5288




5289
5290
5291






















5292
5293
5294
5295
5296
5297
5298
5299
5300
5301
5302
5303
5304
5305
5306
5307
5308
5309
5310
5311
5312
5313
5314
5315
5316
5317
5318
5319






















5320
5321
5322
5323
5324
5325
5326
5327
5328
5329
5330
5331
5332
5333
5334
5335
5336
5337
5338
5339
5340
5341


5342


5343




5344
5345
5346



























5347
5348
5349
5350
5351
5352
5353
5354
5355
5356
5357
5358
5359
5360
5361
5362
5363
5364
5365
5366
5367
5368
5369
5370
5371
5372
5373

































5374
5375
5376
5377
5378
5379
5380
5381
5382
5383
5384
5385
5386
5387
5388
5389
5390
5391
5392
5393
5394
5395
5396
5397
5398
5399
5400
5401
5402
5403
5404





5405
5406
5407
5408
























5409
5410
5411
5412
5413
5414
5415
5416
5417
5418
5419
5420
5421
5422
5423
5424
5425
5426
5427
5428
5429
5430
5431
5432
5433










5434
5435
5436
5437
5438
5439
5440
5441
5442


5443














5444
5445
5446
5447
5448
5449
5450
5451
5452
5453
5454
5455
5456
5457
5458


5459

































5460
5461
5462
5463
5464
5465
5466
5467
5468
5469
5470
5471
5472
5473
5474
5475
5476
5477
5478
5479
5480
5481
5482
5483
5484
5485
5486
5487
5488
5489
5490
5491
5492

















5493
5494
5495
5496
5497
5498
5499
5500
5501
5502
5503
5504
5505
5506
5507
5508
5509











5510
5511
5512
5513
5514
5515
5516
5517
5518
5519
5520


































5521
5522
5523
5524
5525
5526
5527
5528
5529
5530
5531
5532
5533
5534
5535
5536
5537
5538
5539
5540
5541
5542
5543
5544
5545
5546
5547
5548
5549
5550
5551
5552
5553
5554
5555

















5556
5557
5558
5559
5560
5561
5562
5563
5564
5565
5566
5567
5568
5569
5570
5571














5572
5573
5574
5575
5576
5577
5578
5579
5580
5581
5582
5583
5584
5585

















5586
5587
5588
5589
5590
5591
5592
5593
5594
5595
5596
5597
5598
5599
5600
5601



























5602
5603
5604
5605
5606
5607
5608
5609
5610
5611
5612
5613
5614
5615
5616
5617
5618
5619
5620
5621
5622
5623
5624
5625
5626
5627
5628
5629










5630
5631
5632
5633
5634
5635
5636
5637
5638




5639
5640
5641
5642










5643
5644
5645
5646
5647
5648
5649
5650
5651
5652
5653
5654



5655
5656






































5657
5658
5659
5660
5661
5662
5663
5664
5665
5666
5667
5668
5669
5670
5671
5672
5673
5674
5675
5676
5677
5678
5679
5680
5681
5682
5683
5684
5685
5686
5687
5688
5689
5690
5691
5692
5693



















5694
5695
5696
5697
5698
5699
5700
5701
5702
5703
5704
5705
5706
5707
5708
5709
5710
5711
5712
5713











5714
5715
5716
5717
5718
5719
5720
5721
5722
5723








5724
5725
5726
5727
5728
5729
5730
5731



5732
5733


5734
5735















5736
5737
5738
5739
5740
5741
5742
5743
5744
5745
5746
5747
5748
5749
5750












































5751
5752
5753
5754
5755
5756
5757
5758
5759
5760
5761
5762
5763
5764
5765
5766
5767
5768
5769
5770
5771
5772
5773
5774
5775
5776
5777
5778
5779
5780
5781
5782
5783
5784
5785
5786
5787
5788
5789
5790
5791
5792
5793
5794
5795
5796
5797

























5798
5799
5800
5801
5802
5803
5804
5805
5806
5807
5808
5809
5810
5811
5812
5813
5814
5815
5816
5817
5818
5819
5820
5821
5822
5823
5824






5825
5826
5827
5828
5829











5830
5831
5832
5833
5834
5835
5836
5837
5838
5839
5840






5841
5842
5843
5844
5845














5846
5847
5848
5849
5850
5851
5852
5853
5854
5855
5856
5857
5858
5859






5860
5861
5862
5863
5864
5865


















5866
5867
5868
5869
5870
5871
5872
5873
5874
5875
5876
5877
5878
5879
5880
5881
5882





































5883
5884
5885
5886
5887
5888
5889
5890
5891
5892
5893
5894
5895
5896
5897
5898
5899
5900
5901
5902
5903
5904
5905
5906
5907
5908
5909
5910
5911
5912
5913
5914
5915
5916
5917
5918
5919












5920
5921
5922
5923
5924
5925
5926
5927
5928
5929
5930
5931







5932
5933
5934
5935
5936
5937
5938



5939
5940
5941









5942
5943
5944
5945
5946
5947
5948
5949



5950
5951
5952













5953
5954
5955
5956
5957
5958
5959
5960
5961
5962
5963
5964
5965
















5966
5967
5968
5969
5970
5971
5972
5973
5974
5975
5976
5977
5978
5979
5980




















5981
5982
5983
5984
5985
5986
5987
5988
5989
5990
5991
5992
5993
5994
5995
5996
5997
5998
5999
6000









6001
6002
6003
6004
6005
6006
6007
6008
6009
6010
6011





























6012
6013
6014
6015
6016
6017
6018
6019
6020
6021
6022
6023
6024
6025
6026
6027
6028
6029
6030
6031
6032
6033
6034
6035
6036
6037
6038
6039
6040



6041












6042
6043
6044
6045
6046
6047
6048
6049
6050
6051
6052
6053



6054
6055




6056
6057









6058
6059
6060
6061
6062
6063
6064
6065
6066
6067
6068
6069
6070




6071
6072
6073
6074
















6075
6076
6077
6078
6079
6080
6081
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091




6092
6093
6094


6095


6096
6097




6098
6099
6100
6101
6102







6103
6104
6105
6106
6107
6108
6109




































6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147





6148
6149
6150
6151
6152









6153
6154
6155
6156
6157
6158
6159
6160





































6161
6162
6163
6164
6165
6166
6167
6168
6169
6170
6171
6172
6173
6174
6175
6176
6177
6178
6179
6180
6181
6182
6183
6184
6185
6186
6187
6188
6189
6190
6191
6192
6193
6194
6195
6196
6197
















6198
6199
6200
6201
6202
6203
6204
6205
6206
6207
6208
6209
6210
6211
6212
6213
6214





6215
6216
6217






























6218
6219
6220
6221
6222
6223
6224
6225
6226
6227
6228
6229
6230
6231
6232
6233
6234
6235
6236
6237
6238
6239
6240
6241
6242
6243
6244
6245
6246
6247
6248





























6249
6250
6251
6252
6253
6254
6255
6256
6257
6258
6259
6260
6261
6262
6263
6264
6265
6266
6267
6268
6269
6270
6271
6272
6273
6274
6275
6276
6277




6278
6279
6280
6281
6282
6283
6284
6285


























6286
6287
6288
6289
6290
6291
6292
6293
6294
6295
6296
6297
6298
6299
6300
6301
6302
6303
6304
6305
6306
6307
6308
6309
6310




6311
6312
6313
6314


6315







6316
6317
6318
6319
6320

























6321
6322
6323
6324
6325
6326
6327
6328
6329
6330
6331
6332
6333
6334
6335
6336
6337
6338
6339
6340
6341
6342
6343
6344
6345


6346










6347
6348
6349
6350
6351
6352
6353
6354
6355
6356
6357
6358





6359
6360
6361



6362
6363























6364
6365
6366
6367
6368
6369
6370
6371
6372
6373
6374
6375
6376
6377
6378
6379
6380
6381
6382
6383
6384
6385
6386
6387















6388
6389
6390
6391
6392
6393
6394
6395
6396
6397
6398
6399
6400
6401
6402



6403





6404
6405
6406
6407
6408
6409



6410
6411
6412




















6413
6414
6415
6416
6417
6418
6419
6420
6421
6422
6423
6424
6425
6426
6427
6428
6429
6430
6431





6432
6433
6434


























6435
6436
6437
6438
6439
6440
6441
6442
6443
6444
6445
6446
6447
6448
6449
6450
6451
6452
6453
6454
6455
6456
6457
6458
6459
6460









6461
6462
6463
6464
6465
6466
6467
6468
6469
6470
6471
6472





















6473
6474
6475
6476
6477
6478
6479
6480
6481
6482
6483
6484
6485
6486
6487
6488
6489
6490
6491
6492











6493
6494
6495
6496
6497
6498
6499
6500
6501
6502
6503
6504
6505

























6506
6507
6508
6509
6510
6511
6512
6513
6514
6515
6516
6517
6518
6519
6520
6521
6522
6523
6524
6525
6526
6527
6528
6529













6530
6531
6532
6533
6534
6535
6536
6537
6538
6539
6540
6541
6542




















6543
6544
6545
6546
6547
6548
6549
6550
6551
6552
6553
6554
6555
6556
6557
6558
6559
6560
6561
6562













6563
6564
6565
6566
6567
6568
6569
6570
6571
6572
6573
6574
6575
























6576
6577
6578
6579
6580
6581
6582
6583
6584
6585
6586
6587
6588
6589
6590
6591
6592
6593
6594
6595
6596
6597
6598
6599
6600
6601
6602






6603
6604
6605
6606
6607
6608




6609
6610
6611








6612
6613
6614
6615
6616
6617
6618
6619




6620
6621
6622





6623
6624
6625
6626
6627
6628




6629
6630



6631
























6632
6633
6634
6635
6636
6637
6638
6639
6640
6641
6642
6643
6644
6645
6646
6647
6648
6649
6650
6651
6652
6653
6654
6655
6656
6657
6658
6659
6660



6661
















6662
6663
6664
6665
6666
6667
6668
6669
6670
6671
6672
6673
6674
6675
6676







































6677
6678
6679
6680
6681
6682
6683
6684
6685
6686
6687
6688
6689
6690
6691
6692
6693
6694
6695
6696
6697
6698
6699
6700
6701
6702
6703
6704
6705
6706
6707
6708
6709
6710
6711
6712
6713
6714
6715


6716











6717
6718
6719
6720
6721
6722
6723
6724
6725
6726
6727
6728
6729












6730
6731
6732
6733
6734
6735
6736
6737
6738
6739
6740


6741









6742
6743
6744






6745
6746
6747
6748
6749
6750
6751


6752










6753
6754
6755
6756
6757
6758
6759
6760
6761
6762
6763
6764
6765
6766
6767
6768





6769
6770
6771
6772
6773
























6774
6775
6776
6777
6778
6779
6780
6781
6782
6783
6784
6785
6786
6787
6788
6789
6790
6791
6792
6793
6794
6795
6796






























6797
6798
6799
6800
6801
6802
6803
6804
6805
6806
6807
6808
6809
6810
6811
6812
6813
6814
6815
6816
6817
6818
6819
6820
6821
6822









6823
6824
6825
6826
6827
6828
6829
6830
6831
6832












6833
6834
6835
6836
6837
6838
6839
6840
6841
6842
6843
6844







6845
6846
6847
6848
6849
6850
6851


























6852
6853
6854
6855
6856
6857
6858
6859
6860
6861
6862
6863
6864
6865
6866
6867
6868
6869
6870
6871
6872
6873
6874
6875
6876





6877
6878
6879
6880
6881







6882
6883
6884
6885
6886
6887
6888

























6889
6890
6891
6892
6893
6894
6895
6896
6897
6898
6899
6900
6901
6902
6903
6904
6905
6906
6907
6908
6909
6910
6911
6912






6913
6914
6915
6916
6917
6918
6919
6920
















6921
6922
6923
6924
6925
6926
6927
6928
6929
6930
6931
6932
6933
6934
6935
6936
6937











































6938
6939
6940
6941
6942
6943
6944
6945
6946
6947
6948
6949
6950
6951
6952
6953
6954
6955
6956
6957
6958
6959
6960
6961
6962
6963
6964
6965
6966
6967
6968
6969
6970
6971
6972
6973
6974
6975
6976
6977
6978
6979
6980
6981
















6982
6983
6984
6985
6986
6987
6988
6989
6990
6991
6992
6993
6994
6995
6996










6997
6998
6999
7000
7001
7002
7003
7004
7005
7006
7007





7008
7009
7010
7011













7012
7013
7014
7015
7016
7017
7018
7019
7020
7021
7022
7023
7024













7025
7026
7027
7028
7029
7030
7031
7032
7033
7034
7035
7036







7037
7038
7039
7040
7041
7042
7043
7044
7045



7046
7047























7048
7049
7050
7051
7052
7053
7054
7055
7056
7057
7058
7059
7060
7061
7062
7063
7064
7065
7066
7067
7068
7069
7070



7071
7072
7073
7074
7075














7076
7077
7078
7079
7080
7081
7082
7083
7084
7085
7086
7087
7088
7089


















7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106


7107



7108
7109


























7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137








7138
7139
7140
7141
7142
7143
7144
7145
7146





7147
7148
7149
7150
7151










7152
7153
7154
7155
7156
7157
7158
7159
7160































7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192














7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207







7208
7209
7210
7211
7212
7213
7214















7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228











7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
















7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256








7257
7258
7259
7260
7261
7262
7263
7264
7265









7266
7267
7268
7269
7270
7271
7272
7273
7274
























7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297






7298
7299
7300
7301
7302
7303
7304




































7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341




7342
7343










7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354




























7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381

















7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399































7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430







7431
7432
7433
7434
7435
7436





























7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463









7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475

























7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500











7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512







7513
7514
7515
7516
7517
7518









7519
7520
7521
7522
7523
7524
7525
7526
7527


























7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553













7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567










7568
7569
7570
7571
7572
7573
7574
7575




















7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596


















7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613





































7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651











































7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695


















7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
































7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743








7744
7745
7746
7747
7748
7749
7750









7751
7752
7753
7754
7755
7756
7757
7758
7759








7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770

























7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793































7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824














7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841


7842
7843












7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855















































7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902







7903
7904
7905
7906
7907
7908
7909


7910
7911





7912
7913
7914
7915










7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926








7927
7928
7929
7930
7931
7932
7933
7934






7935
7936
7937
7938
7939
7940



7941
7942
7943
7944



7945
7946
7947






7948
7949
7950
7951
7952




7953
7954
7955
7956













7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968


















7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986








7987
7988
7989
7990
7991
7992
7993

















































































































7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108























8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134



8135
8136


8137





8138
8139
8140
8141
8142


















8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159








































8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199

8200
8201
8202
8203
8204
8205
8206







-
-
+
+


-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
+
-
-
+
+
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
+
-
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
-
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-







 */
#ifdef USE_MANUAL
#include "tool_hugehelp.h"
#include <zlib.h>
#include "memdebug.h" /* keep this as LAST include */
static const unsigned char hugehelpgz[] = {
  /* This mumbo-jumbo is the huge help text compressed with gzip.
     Thanks to this operation, the size of this data shrank from 165911
     to 46657 bytes. You can disable the use of compressed help
     Thanks to this operation, the size of this data shrank from 165936
     to 46660 bytes. You can disable the use of compressed help
     texts by NOT passing -c to the mkhelp.pl tool. */
  0x1f, 0x8b, 0x08, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x03, 0xed, 0xbd,
  0x6b, 0x77, 0xdc, 0xc6, 0x95, 0x36, 0xfa, 0xdd, 0xbf, 0x02, 0xc3, 0xac,
  0xbc, 0x24, 0x27, 0xdd, 0xcd, 0x8b, 0x6e, 0x16, 0x2d, 0x67, 0x2c, 0x4b,
  0x94, 0xcd, 0x31, 0x25, 0xf2, 0x65, 0x53, 0xb6, 0x73, 0x62, 0x2f, 0x2d,
  0x74, 0x37, 0x48, 0x22, 0xea, 0x06, 0x3a, 0x00, 0x9a, 0x97, 0xe4, 0xcd,
  0xf9, 0xed, 0xa7, 0x9e, 0x7d, 0xa9, 0x2a, 0xa0, 0x0a, 0x4d, 0xda, 0xb1,
  0x32, 0x73, 0xce, 0x9c, 0xcc, 0x1a, 0x4b, 0x22, 0x81, 0x42, 0x5d, 0x76,
  0xed, 0xfb, 0x7e, 0x76, 0x92, 0xdc, 0xf7, 0xbf, 0x0f, 0xf4, 0xff, 0x1f,
  0xcc, 0xff, 0xcc, 0x9f, 0x9f, 0x25, 0xc9, 0x69, 0x55, 0xfe, 0x25, 0x9b,
  0x36, 0xf1, 0x67, 0x3f, 0x7c, 0xf8, 0x3f, 0x09, 0xff, 0x9f, 0x79, 0xe7,
  0x27, 0xf3, 0xe7, 0x67, 0x6b, 0xc7, 0xde, 0x49, 0xdc, 0x0b, 0xff, 0xe7,
  0xc3, 0x76, 0x72, 0xdf, 0x0b, 0xff, 0x27, 0xd9, 0xa2, 0x17, 0x3e, 0xc8,
  0x17, 0x5e, 0xe0, 0xef, 0x1f, 0x3e, 0xac, 0xff, 0xc8, 0x4f, 0x98, 0x15,
  0x7b, 0x77, 0xdc, 0xc6, 0x95, 0x2f, 0xfa, 0xbf, 0x3f, 0x05, 0xc2, 0xac,
  0x1c, 0x92, 0x93, 0xee, 0xe6, 0x43, 0x2f, 0x8b, 0x91, 0x33, 0x96, 0x25,
  0xca, 0xe6, 0x98, 0x12, 0x79, 0xd8, 0x94, 0xed, 0x9c, 0xd8, 0x4b, 0x0b,
  0xdd, 0x0d, 0x92, 0x88, 0xba, 0x81, 0x0e, 0x80, 0xe6, 0x23, 0x99, 0xdc,
  0xcf, 0x7e, 0xeb, 0xb7, 0x1f, 0x55, 0x05, 0x54, 0xa1, 0x49, 0x3b, 0x56,
  0x66, 0xee, 0x99, 0x9b, 0x59, 0x63, 0x49, 0x24, 0x50, 0xa8, 0xc7, 0xae,
  0xfd, 0xde, 0xbf, 0x9d, 0x24, 0xf7, 0xfd, 0xef, 0x03, 0xfd, 0xff, 0x07,
  0xf3, 0x3f, 0xf3, 0xe7, 0x67, 0x49, 0x72, 0x5a, 0x95, 0x7f, 0xc9, 0xa6,
  0x4d, 0xfc, 0xd9, 0x0f, 0x1f, 0xfe, 0x33, 0xe1, 0xff, 0x33, 0xef, 0xfc,
  0x68, 0xfe, 0xfc, 0x6c, 0xed, 0xd8, 0x3b, 0x89, 0x7b, 0xe1, 0x3f, 0x3f,
  0x6c, 0x27, 0xf7, 0xbd, 0xf0, 0x9f, 0xc9, 0x16, 0xbd, 0xf0, 0x41, 0xbe,
  0xf0, 0x02, 0x7f, 0xff, 0xf0, 0x61, 0xfd, 0x47, 0x7e, 0xc4, 0xac, 0xf0,
  0xfe, 0xb3, 0x83, 0xf7, 0x7e, 0xfa, 0x80, 0xbf, 0x9a, 0x9f, 0x7c, 0xf6,
  0xd9, 0xbb, 0x97, 0x6f, 0x0f, 0xf5, 0xd5, 0xe9, 0xaa, 0x9a, 0x27, 0xc3,
  0xa4, 0xa9, 0xd2, 0xa2, 0xbe, 0xc8, 0xaa, 0x24, 0x4d, 0xde, 0x9f, 0x1d,
  0x7f, 0xf6, 0xd9, 0xf8, 0x4f, 0xef, 0x4e, 0x4e, 0xc7, 0x47, 0xe3, 0xd6,
  0x63, 0x7f, 0x2e, 0x97, 0x4d, 0x5e, 0x16, 0xb5, 0x99, 0xbe, 0x79, 0xa8,
  0xfe, 0xf9, 0xb3, 0xcf, 0x5e, 0x1f, 0x8e, 0x5f, 0x9d, 0x1d, 0x9d, 0x9e,
  0x1f, 0x9d, 0xbc, 0x6b, 0x3d, 0x99, 0xe4, 0x75, 0x62, 0x86, 0x6a, 0xca,
  0x72, 0x6e, 0xfe, 0xe3, 0x46, 0x9f, 0xa5, 0x4d, 0x9a, 0x5c, 0x54, 0xe5,
  0x22, 0x29, 0x2b, 0xfc, 0x22, 0x4d, 0xea, 0xac, 0xba, 0xce, 0xaa, 0x41,
  0xb2, 0xaa, 0xf3, 0xe2, 0x32, 0x29, 0x8b, 0x2c, 0x29, 0x2f, 0x92, 0xe6,
  0x2a, 0xd3, 0xe1, 0xea, 0xd5, 0x72, 0x59, 0x56, 0x4d, 0x36, 0x4b, 0x96,
  0x55, 0xd9, 0x94, 0xd3, 0x72, 0x5e, 0x27, 0x5b, 0xaf, 0x8f, 0x5e, 0x9d,
  0x0f, 0x92, 0x37, 0x47, 0xc7, 0x87, 0xe6, 0xbf, 0xe7, 0xa7, 0xf4, 0x9f,
  0x9f, 0x1d, 0xbc, 0xf7, 0xe3, 0x07, 0xfc, 0xd5, 0xfc, 0xe4, 0xb3, 0xcf,
  0xde, 0xbd, 0x7c, 0x7b, 0xa8, 0xaf, 0x4e, 0x57, 0xd5, 0x3c, 0x19, 0x26,
  0x4d, 0x95, 0x16, 0xf5, 0x45, 0x56, 0x25, 0x69, 0xf2, 0xfe, 0xec, 0xf8,
  0xb3, 0xcf, 0xc6, 0x7f, 0x7a, 0x77, 0x72, 0x3a, 0x3e, 0x1a, 0xb7, 0x1e,
  0xfb, 0x73, 0xb9, 0x6c, 0xf2, 0xb2, 0xa8, 0xcd, 0xf4, 0xcd, 0x43, 0xf5,
  0x4f, 0x9f, 0x7d, 0xf6, 0xfa, 0x70, 0xfc, 0xea, 0xec, 0xe8, 0xf4, 0xfc,
  0xe8, 0xe4, 0x5d, 0xeb, 0xc9, 0x24, 0xaf, 0x13, 0x33, 0x54, 0x53, 0x96,
  0x73, 0xf3, 0x1f, 0x37, 0xfa, 0x2c, 0x6d, 0xd2, 0xe4, 0xa2, 0x2a, 0x17,
  0x49, 0x59, 0xe1, 0x17, 0x69, 0x52, 0x67, 0xd5, 0x75, 0x56, 0x0d, 0x92,
  0x55, 0x9d, 0x17, 0x97, 0x49, 0x59, 0x64, 0x49, 0x79, 0x91, 0x34, 0x57,
  0x99, 0x0e, 0x57, 0xaf, 0x96, 0xcb, 0xb2, 0x6a, 0xb2, 0x59, 0xb2, 0xac,
  0xca, 0xa6, 0x9c, 0x96, 0xf3, 0x3a, 0xd9, 0x7a, 0x7d, 0xf4, 0xea, 0x7c,
  0x90, 0xbc, 0x39, 0x3a, 0x3e, 0x34, 0xff, 0x3d, 0x3f, 0xa5, 0xff, 0x8c,
  0xf1, 0x20, 0xf9, 0xe6, 0xe4, 0xf4, 0xdb, 0xc3, 0xb3, 0x41, 0xf2, 0xed,
  0x39, 0x7e, 0x86, 0xff, 0x9a, 0x1f, 0x26, 0x47, 0x6f, 0x5f, 0x9e, 0x0e,
  0x74, 0x38, 0xfc, 0x03, 0x3f, 0x3c, 0x7e, 0x6d, 0x7e, 0xc8, 0x7f, 0xe0,
  0x9f, 0xa7, 0x27, 0xa7, 0x8f, 0xe4, 0x0f, 0xfc, 0xf3, 0xec, 0xfc, 0xad,
  0xf9, 0xed, 0xd9, 0xf9, 0xd8, 0xfc, 0x77, 0xfc, 0x0a, 0xff, 0xa1, 0xaf,
  0x8c, 0xdf, 0x7e, 0x4d, 0xff, 0x19, 0xdb, 0xe1, 0xc6, 0x6f, 0xf9, 0xe7,
  0x07, 0xc9, 0xd7, 0x27, 0xa7, 0xdf, 0x1c, 0x9e, 0x0d, 0x92, 0x6f, 0xce,
  0xf1, 0x33, 0xfc, 0xd7, 0xfc, 0x30, 0x39, 0x7a, 0xfb, 0xf2, 0x74, 0xa0,
  0xc3, 0xe1, 0x1f, 0xf8, 0xe1, 0xf1, 0x6b, 0xf3, 0x43, 0xfe, 0x03, 0xff,
  0xf4, 0xa5, 0xf3, 0xc3, 0xe3, 0x77, 0x87, 0xe7, 0x49, 0x5a, 0xcc, 0x92,
  0x73, 0xf3, 0xfc, 0xf6, 0x28, 0x39, 0xbf, 0xca, 0x92, 0x69, 0xb9, 0x58,
  0xe0, 0x47, 0x66, 0x47, 0x66, 0x59, 0x9d, 0x5f, 0x16, 0x66, 0x29, 0x66,
  0xe5, 0x37, 0x65, 0xf5, 0x31, 0x49, 0x6e, 0xf2, 0xe6, 0xaa, 0x5c, 0x35,
  0x3a, 0xdc, 0xca, 0xec, 0x46, 0x92, 0x17, 0x4d, 0x56, 0xa5, 0x53, 0xec,
  0xf4, 0xe8, 0xb3, 0xd6, 0xae, 0x96, 0x17, 0x66, 0x0f, 0x6b, 0xb3, 0x69,
  0x93, 0x55, 0x3d, 0x2f, 0xd3, 0x19, 0xb6, 0xca, 0xbc, 0x72, 0xb1, 0x32,
  0x9b, 0x5c, 0xe5, 0xd3, 0x8f, 0x75, 0x32, 0xcf, 0x3f, 0x66, 0xd8, 0xa8,
  0xdb, 0x3b, 0xdd, 0xb8, 0x01, 0x0f, 0x9a, 0xae, 0xcc, 0x9e, 0x16, 0x43,
  0x1d, 0xae, 0xc9, 0xa7, 0x29, 0x3e, 0x40, 0x3b, 0x97, 0xac, 0x96, 0x18,
  0x8d, 0x77, 0x2c, 0x59, 0x96, 0xb5, 0x79, 0x69, 0x3c, 0x3e, 0x36, 0x33,
  0x3c, 0x3d, 0x39, 0x7d, 0x24, 0x7f, 0xe0, 0x9f, 0x67, 0xe7, 0x6f, 0xcd,
  0x6f, 0xcf, 0xce, 0xc7, 0xe6, 0xbf, 0xe3, 0x57, 0xf8, 0x0f, 0x7d, 0x65,
  0xfc, 0xf6, 0x2b, 0xfa, 0xcf, 0xd8, 0x0e, 0x37, 0x7e, 0xcb, 0x3f, 0xa7,
  0x2f, 0x9d, 0x1f, 0x1e, 0xbf, 0x3b, 0x3c, 0x4f, 0xd2, 0x62, 0x96, 0x9c,
  0x9b, 0xe7, 0xb7, 0x47, 0xc9, 0xf9, 0x55, 0x96, 0x4c, 0xcb, 0xc5, 0x02,
  0x3f, 0x32, 0x3b, 0x32, 0xcb, 0xea, 0xfc, 0xb2, 0x30, 0x4b, 0x31, 0x2b,
  0xbf, 0x29, 0xab, 0x8f, 0x49, 0x72, 0x93, 0x37, 0x57, 0xe5, 0xaa, 0xd1,
  0xe1, 0x56, 0x66, 0x37, 0x92, 0xbc, 0x68, 0xb2, 0x2a, 0x9d, 0x62, 0xa7,
  0x47, 0x9f, 0xb5, 0x76, 0xb5, 0xbc, 0x30, 0x7b, 0x58, 0x9b, 0x4d, 0x9b,
  0xac, 0xea, 0x79, 0x99, 0xce, 0xb0, 0x55, 0xe6, 0x95, 0x8b, 0x95, 0xd9,
  0xe4, 0x2a, 0x9f, 0x7e, 0xac, 0x93, 0x79, 0xfe, 0x31, 0xc3, 0x46, 0xdd,
  0xde, 0xe9, 0xc6, 0x0d, 0x78, 0xd0, 0x74, 0x65, 0xf6, 0xb4, 0x18, 0xea,
  0x2f, 0x8a, 0x8c, 0xe6, 0x51, 0x0f, 0xcc, 0x3f, 0xca, 0x8f, 0x79, 0x66,
  0xfe, 0x72, 0x91, 0xcf, 0xb3, 0x84, 0x4f, 0xd4, 0x0e, 0x87, 0xa3, 0x4d,
  0xaa, 0xac, 0x5e, 0x2d, 0x32, 0xb3, 0x7b, 0x6f, 0xb3, 0x26, 0x9d, 0xe7,
  0xc5, 0x47, 0xf3, 0x57, 0x2c, 0x7c, 0x51, 0x56, 0xd9, 0x28, 0x79, 0x59,
  0x27, 0x77, 0xe5, 0xca, 0x2c, 0x78, 0x3e, 0x37, 0x67, 0x9e, 0x25, 0x93,
  0x70, 0x4d, 0x3e, 0x4d, 0xf1, 0x01, 0xda, 0xb9, 0x64, 0xb5, 0xc4, 0x68,
  0xbc, 0x63, 0xc9, 0xb2, 0xac, 0xcd, 0x4b, 0xe3, 0xf1, 0xb1, 0x99, 0x79,
  0x51, 0x64, 0x34, 0x8f, 0x7a, 0x60, 0xfe, 0x51, 0x7e, 0xcc, 0x33, 0xf3,
  0x97, 0x8b, 0x7c, 0x9e, 0x25, 0x7c, 0xa2, 0x76, 0x38, 0x1c, 0x6d, 0x52,
  0x6c, 0x5e, 0xde, 0x0c, 0x70, 0xd2, 0x49, 0xb1, 0x5a, 0x4c, 0xcc, 0x00,
  0xe5, 0x85, 0x1b, 0x2e, 0x6d, 0x56, 0x66, 0x38, 0x7e, 0x7a, 0x91, 0x9a,
  0x35, 0x99, 0x77, 0xab, 0xe4, 0x2a, 0x33, 0x6b, 0xae, 0x97, 0x79, 0xf1,
  0x6f, 0xed, 0x7d, 0x31, 0x5b, 0xbb, 0x2c, 0x6f, 0xb2, 0xca, 0xec, 0xec,
  0xe4, 0x2e, 0x31, 0x9b, 0x30, 0x61, 0x22, 0xbc, 0x30, 0x44, 0x96, 0xa4,
  0x66, 0x08, 0x4b, 0x80, 0xc3, 0x2a, 0x9b, 0xa7, 0x20, 0x26, 0xfb, 0x8d,
  0x91, 0x39, 0xc4, 0xcc, 0x52, 0x9b, 0xbc, 0xba, 0xf5, 0x68, 0x9b, 0x5e,
  0x9e, 0x99, 0x95, 0xe4, 0xf3, 0xda, 0x1c, 0x03, 0x2e, 0x85, 0x3c, 0x83,
  0x43, 0x05, 0xfd, 0x1b, 0xda, 0xbc, 0x2b, 0x9a, 0xf4, 0x96, 0x3e, 0x2f,
  0xb4, 0x39, 0x9c, 0x65, 0xcb, 0xac, 0x98, 0x65, 0x45, 0x33, 0x4a, 0xfe,
  0x54, 0xae, 0x36, 0xcd, 0xb7, 0x2f, 0x72, 0xb3, 0x07, 0xa9, 0x0c, 0x65,
  0x65, 0xf5, 0x6a, 0x91, 0x99, 0xdd, 0x7b, 0x9b, 0x35, 0xe9, 0x3c, 0x2f,
  0x3e, 0x9a, 0xbf, 0x62, 0xe1, 0x8b, 0xb2, 0xca, 0x46, 0xc9, 0xcb, 0x3a,
  0xb9, 0x2b, 0x57, 0x66, 0xc1, 0xf3, 0xb9, 0x39, 0xf3, 0x2c, 0x99, 0x64,
  0xf3, 0xf2, 0x66, 0x80, 0x93, 0x4e, 0x8a, 0xd5, 0x62, 0x62, 0x06, 0x28,
  0x2f, 0xdc, 0x70, 0x69, 0xb3, 0x32, 0xc3, 0xf1, 0xd3, 0x8b, 0xd4, 0xac,
  0xc9, 0xbc, 0x5b, 0x25, 0x57, 0x99, 0x59, 0x73, 0xbd, 0xcc, 0x8b, 0xdf,
  0xb4, 0xf7, 0xc5, 0x6c, 0xed, 0xb2, 0xbc, 0xc9, 0x2a, 0xb3, 0xb3, 0x93,
  0xbb, 0xc4, 0x6c, 0xc2, 0x84, 0x89, 0xf0, 0xc2, 0x10, 0x59, 0x92, 0x9a,
  0x21, 0x2c, 0x01, 0x0e, 0xab, 0x6c, 0x9e, 0x82, 0x98, 0xec, 0x37, 0x46,
  0xe6, 0x10, 0x33, 0x4b, 0x6d, 0xf2, 0xea, 0xd6, 0xa3, 0x6d, 0x7a, 0x79,
  0x66, 0x56, 0x92, 0xcf, 0x6b, 0x73, 0x0c, 0xb8, 0x14, 0xf2, 0x0c, 0x0e,
  0x15, 0xf4, 0x6f, 0x68, 0xf3, 0xae, 0x68, 0xd2, 0x5b, 0xfa, 0xbc, 0xd0,
  0xbe, 0x6c, 0x88, 0x60, 0x5a, 0xe5, 0x4b, 0xef, 0x28, 0xca, 0xc2, 0x9c,
  0x79, 0x72, 0xf6, 0xe6, 0x55, 0xf2, 0xe8, 0xf9, 0xe7, 0x4f, 0xdd, 0x99,
  0x9b, 0x01, 0x92, 0x69, 0x5a, 0x98, 0x15, 0x67, 0xd3, 0xfc, 0xe2, 0x2e,
  0x59, 0xac, 0xe6, 0x4d, 0xbe, 0x34, 0xbb, 0x8f, 0xcb, 0x87, 0x0b, 0xb4,
  0x4c, 0xab, 0xa6, 0x06, 0x11, 0xd0, 0x0f, 0x68, 0xed, 0x37, 0x55, 0xde,
  0xe0, 0x22, 0xd1, 0xef, 0xcc, 0x0c, 0xb3, 0xa6, 0xd6, 0xe1, 0x40, 0x6b,
  0xe6, 0x3b, 0x13, 0x43, 0x5b, 0x66, 0x6b, 0xd3, 0xda, 0x7c, 0xf4, 0xe0,
  0x33, 0xc7, 0x41, 0xae, 0x9a, 0x66, 0x79, 0xb0, 0xb3, 0x53, 0xe7, 0x4d,
  0x36, 0xfa, 0xbb, 0xb9, 0x87, 0x83, 0xe6, 0xa6, 0x1c, 0x34, 0x57, 0x55,
  0x96, 0xfd, 0x63, 0x64, 0x68, 0xd8, 0x3e, 0x69, 0xbe, 0x7b, 0x27, 0x13,
  0xbb, 0xcc, 0x1a, 0xf3, 0x85, 0xbf, 0xae, 0xb2, 0x02, 0x23, 0x9a, 0x79,
  0xa4, 0xf3, 0xe5, 0x55, 0x6a, 0x8e, 0x33, 0x33, 0xd4, 0x88, 0x9b, 0x6d,
  0x08, 0x06, 0xb3, 0xe2, 0xbb, 0xfd, 0xe7, 0x9f, 0xc3, 0x8f, 0x5e, 0xd0,
  0x37, 0xcd, 0x7f, 0x47, 0xd9, 0x6d, 0xba, 0x30, 0x6b, 0xc3, 0xa7, 0x76,
  0x40, 0x62, 0x7f, 0xde, 0x1b, 0xee, 0xed, 0xee, 0xfe, 0x3c, 0x6a, 0x6e,
  0xe6, 0x70, 0x96, 0x2d, 0xb3, 0x62, 0x96, 0x15, 0xcd, 0x28, 0xf9, 0x53,
  0xb9, 0xda, 0x34, 0xdf, 0xbe, 0xc8, 0xcd, 0x1e, 0xa4, 0x32, 0x94, 0xf9,
  0xb2, 0x21, 0x82, 0x69, 0x95, 0x2f, 0xbd, 0xa3, 0x28, 0x0b, 0x73, 0xe6,
  0xc9, 0xd9, 0x9b, 0x57, 0xc9, 0xa3, 0xe7, 0x9f, 0x3f, 0x75, 0x67, 0x6e,
  0x06, 0x48, 0xa6, 0x69, 0x61, 0x56, 0x9c, 0x4d, 0xf3, 0x8b, 0xbb, 0x64,
  0xb1, 0x9a, 0x37, 0xf9, 0xd2, 0xec, 0x3e, 0x2e, 0x1f, 0x2e, 0xd0, 0x32,
  0xad, 0x9a, 0x1a, 0x44, 0x40, 0x3f, 0xa0, 0xb5, 0xdf, 0x54, 0x79, 0x83,
  0x8b, 0x44, 0xbf, 0x33, 0x33, 0xcc, 0x9a, 0x5a, 0x87, 0x03, 0xad, 0x99,
  0xef, 0x4c, 0x0c, 0x6d, 0x99, 0xad, 0x4d, 0x6b, 0xf3, 0xd1, 0x83, 0xcf,
  0x1c, 0x07, 0xb9, 0x6a, 0x9a, 0xe5, 0xc1, 0xce, 0x4e, 0x9d, 0x37, 0xd9,
  0xe8, 0xef, 0xe6, 0x1e, 0x0e, 0x9a, 0x9b, 0x72, 0xd0, 0x5c, 0x55, 0x59,
  0xf6, 0x8f, 0x91, 0xa1, 0x61, 0xfb, 0xa4, 0xf9, 0xee, 0x9d, 0x4c, 0xec,
  0x32, 0x6b, 0xcc, 0x17, 0xfe, 0xba, 0xca, 0x0a, 0x8c, 0x68, 0xe6, 0x91,
  0xce, 0x97, 0x57, 0xa9, 0x39, 0xce, 0xcc, 0x50, 0x23, 0x6e, 0xb6, 0x21,
  0x18, 0xcc, 0x8a, 0xef, 0xf6, 0x9f, 0x7f, 0x0a, 0x3f, 0x7a, 0x41, 0xdf,
  0x34, 0xff, 0x1d, 0x65, 0xb7, 0xe9, 0xc2, 0xac, 0x0d, 0x9f, 0xda, 0x01,
  0x89, 0xfd, 0x79, 0x6f, 0xb8, 0xb7, 0xbb, 0xfb, 0xd3, 0xa8, 0xb9, 0x6d,
  0x9b, 0x87, 0x3d, 0xbf, 0xbb, 0xeb, 0xde, 0xc0, 0xa3, 0x5b, 0x58, 0x6f,
  0x32, 0x37, 0x24, 0x83, 0x8f, 0xff, 0x2d, 0xab, 0xca, 0x7a, 0xfb, 0x61,
  0x23, 0xa5, 0xc3, 0xbf, 0xb5, 0xbf, 0xfb, 0x2e, 0xab, 0x89, 0x66, 0xdc,
  0x5a, 0x93, 0xb4, 0x32, 0x74, 0x5b, 0x36, 0x8e, 0x3d, 0x0d, 0xcc, 0xa5,
  0x6c, 0xec, 0xce, 0x98, 0x3b, 0x67, 0x9e, 0x36, 0x8c, 0x2d, 0x9d, 0x83,
  0xa7, 0xd5, 0x49, 0x91, 0xdd, 0xda, 0x5b, 0x6e, 0x6e, 0x7f, 0x96, 0x4e,
  0xaf, 0x92, 0xd2, 0x10, 0x7f, 0x15, 0x39, 0x02, 0x7f, 0x42, 0x69, 0x35,
  0xbd, 0xca, 0xaf, 0xcd, 0x6e, 0x3c, 0x7f, 0xfe, 0x74, 0x68, 0xfe, 0xf3,
  0xfc, 0xe7, 0x9d, 0xeb, 0x72, 0x6e, 0x36, 0xe7, 0xf1, 0xcf, 0x3b, 0x38,
  0xe2, 0xbf, 0xa7, 0x83, 0xc9, 0x60, 0xfa, 0x8f, 0xd1, 0x55, 0xb3, 0x98,
  0xf7, 0x12, 0x4e, 0x5a, 0x98, 0xff, 0x5f, 0x94, 0xab, 0xa2, 0xb1, 0xc4,
  0x62, 0x68, 0xae, 0xf1, 0x98, 0x93, 0xb9, 0xae, 0xe6, 0x8e, 0x82, 0xb4,
  0x41, 0x43, 0xb8, 0x75, 0xe6, 0x82, 0xba, 0xeb, 0xd8, 0x4c, 0xaf, 0xb0,
  0x7e, 0x43, 0x3d, 0xa9, 0x6c, 0x42, 0x93, 0xa7, 0xb8, 0x99, 0x86, 0x41,
  0x80, 0x61, 0xd1, 0x58, 0xfc, 0xb5, 0xdc, 0x3c, 0x58, 0x56, 0xb3, 0xac,
  0x1a, 0x75, 0xa7, 0x61, 0xaf, 0xac, 0xf7, 0xcd, 0x44, 0x25, 0x0a, 0x7e,
  0x40, 0x13, 0x5b, 0xe4, 0xb7, 0x66, 0x04, 0x62, 0x98, 0x05, 0x4d, 0x9c,
  0x47, 0x4b, 0x30, 0x63, 0xfa, 0x8c, 0xbe, 0xef, 0xae, 0xac, 0x99, 0x7a,
  0x6b, 0xe9, 0xf4, 0x51, 0xb7, 0xf8, 0xc4, 0x1c, 0xde, 0xd2, 0xbc, 0xb5,
  0x02, 0x5f, 0xa5, 0x6b, 0x8d, 0x61, 0x0c, 0x43, 0xb8, 0x34, 0xe7, 0x62,
  0xce, 0x02, 0x54, 0x8c, 0xa3, 0xba, 0x4b, 0xde, 0x19, 0x82, 0x61, 0x66,
  0xe4, 0x11, 0xfb, 0x3c, 0x6b, 0x9a, 0x7b, 0x8f, 0xc9, 0x51, 0xec, 0xc1,
  0x5e, 0x40, 0xb4, 0x7d, 0xcf, 0x1b, 0x3a, 0x3b, 0xd8, 0x6f, 0x3f, 0xfc,
  0x83, 0x61, 0xd2, 0xee, 0xba, 0x98, 0xaf, 0xff, 0xfd, 0x1f, 0x1e, 0xd5,
  0xdd, 0xe0, 0xb7, 0x79, 0x71, 0x5d, 0x7e, 0x34, 0x5b, 0x44, 0x52, 0x34,
  0x6d, 0xef, 0x26, 0xf8, 0xd0, 0x62, 0xd9, 0x58, 0xf1, 0x04, 0x72, 0x34,
  0x3f, 0x9a, 0xa4, 0x93, 0xf9, 0x5d, 0x72, 0x95, 0x5e, 0x67, 0x58, 0xef,
  0x1e, 0xf6, 0xfc, 0xee, 0xae, 0x7b, 0x03, 0x8f, 0x6e, 0x61, 0xbd, 0xc9,
  0xdc, 0x90, 0x0c, 0x3e, 0xfe, 0xb7, 0xac, 0x2a, 0xeb, 0xed, 0x87, 0x8d,
  0x94, 0x0e, 0xff, 0xd6, 0xfe, 0xee, 0xbb, 0xac, 0x26, 0x9a, 0x71, 0x6b,
  0x4d, 0xd2, 0xca, 0xd0, 0x6d, 0xd9, 0x38, 0xf6, 0x34, 0x30, 0x97, 0xb2,
  0xb1, 0x3b, 0x63, 0xee, 0x9c, 0x79, 0xda, 0x30, 0xb6, 0x74, 0x0e, 0x9e,
  0x56, 0x27, 0x45, 0x76, 0x6b, 0x6f, 0xb9, 0xb9, 0xfd, 0x59, 0x3a, 0xbd,
  0x4a, 0x4a, 0x43, 0xfc, 0x55, 0xe4, 0x08, 0xfc, 0x09, 0xa5, 0xd5, 0xf4,
  0x2a, 0xbf, 0x36, 0xbb, 0xf1, 0xfc, 0xf9, 0xd3, 0xa1, 0xf9, 0xcf, 0xf3,
  0x9f, 0x76, 0xae, 0xcb, 0xb9, 0xd9, 0x9c, 0xc7, 0x3f, 0xed, 0xe0, 0x88,
  0xff, 0x9e, 0x0e, 0x26, 0x83, 0xe9, 0x3f, 0x46, 0x57, 0xcd, 0x62, 0xde,
  0x4b, 0x38, 0x69, 0x61, 0xfe, 0x7f, 0x51, 0xae, 0x8a, 0xc6, 0x12, 0x8b,
  0xa1, 0xb9, 0xc6, 0x63, 0x4e, 0xe6, 0xba, 0x9a, 0x3b, 0x0a, 0xd2, 0x06,
  0x0d, 0xe1, 0xd6, 0x99, 0x0b, 0xea, 0xae, 0x63, 0x33, 0xbd, 0xc2, 0xfa,
  0x0d, 0xf5, 0xa4, 0xb2, 0x09, 0x4d, 0x9e, 0xe2, 0x66, 0x1a, 0x06, 0x01,
  0x86, 0x45, 0x63, 0xf1, 0xd7, 0x72, 0xf3, 0x60, 0x59, 0xcd, 0xb2, 0x6a,
  0xd4, 0x9d, 0x86, 0xbd, 0xb2, 0xde, 0x37, 0x13, 0x95, 0x28, 0xf8, 0x01,
  0x4d, 0x6c, 0x91, 0xdf, 0x9a, 0x11, 0x88, 0x61, 0x16, 0x34, 0x71, 0x1e,
  0x2d, 0xc1, 0x8c, 0xe9, 0x33, 0xfa, 0xbe, 0xbb, 0xb2, 0x66, 0xea, 0xad,
  0xa5, 0xd3, 0x47, 0xdd, 0xe2, 0x13, 0x73, 0x78, 0x4b, 0xf3, 0xd6, 0x0a,
  0x7c, 0x95, 0xae, 0x35, 0x86, 0x31, 0x0c, 0xe1, 0xd2, 0x9c, 0x8b, 0x39,
  0x0b, 0x50, 0x31, 0x8e, 0xea, 0x2e, 0x79, 0x67, 0x08, 0x86, 0x99, 0x91,
  0x47, 0xec, 0xf3, 0xac, 0x69, 0xee, 0x3d, 0x26, 0x47, 0xb1, 0x07, 0x7b,
  0x01, 0xd1, 0xf6, 0x3d, 0x6f, 0xe8, 0xec, 0x60, 0xbf, 0xfd, 0xf0, 0xf7,
  0x86, 0x49, 0xbb, 0xeb, 0x62, 0xbe, 0xfe, 0xf7, 0x7f, 0x78, 0x54, 0x77,
  0x83, 0xdf, 0xe6, 0xc5, 0x75, 0xf9, 0xd1, 0x6c, 0x11, 0x49, 0xd1, 0xb4,
  0xbd, 0x9b, 0xe0, 0x43, 0x8b, 0x65, 0x63, 0xc5, 0x13, 0xc8, 0xd1, 0xfc,
  0x68, 0x92, 0x4e, 0xe6, 0x77, 0xc9, 0x55, 0x7a, 0x9d, 0x61, 0xbd, 0x4b,
  0xd2, 0xd0, 0x29, 0x76, 0xc0, 0x88, 0x8d, 0x39, 0xf1, 0x31, 0x61, 0x0c,
  0xb3, 0x72, 0x35, 0x31, 0xcc, 0xe5, 0xaf, 0xab, 0xb2, 0xe1, 0x8d, 0x49,
  0x43, 0xa7, 0xd8, 0x01, 0x23, 0x36, 0xe6, 0xc4, 0xc7, 0x84, 0x31, 0xcc,
  0xaf, 0xcb, 0x7c, 0xd6, 0x92, 0xc5, 0x57, 0x19, 0x18, 0x1a, 0x3e, 0x4c,
  0x42, 0xca, 0x30, 0x54, 0xcc, 0x94, 0x2e, 0x5a, 0xde, 0x40, 0xdc, 0x19,
  0x56, 0x98, 0xce, 0xeb, 0x32, 0x49, 0x2e, 0x4b, 0xdc, 0x12, 0x62, 0xc0,
  0x44, 0xe6, 0xe6, 0x50, 0xae, 0x52, 0x48, 0x35, 0x23, 0xc0, 0xec, 0x3d,
  0xca, 0xd5, 0xc4, 0x30, 0x97, 0xbf, 0xae, 0xca, 0x86, 0x37, 0x26, 0xbd,
  0x2e, 0xf3, 0x59, 0x4b, 0x16, 0x5f, 0x65, 0x60, 0x68, 0xf8, 0x30, 0x09,
  0x29, 0xc3, 0x50, 0x31, 0x53, 0xba, 0x68, 0x79, 0x03, 0x71, 0x67, 0x58,
  0xa8, 0x32, 0xe2, 0xc5, 0x74, 0x52, 0xe9, 0x7c, 0xc0, 0xd2, 0x0b, 0xef,
  0xc8, 0x56, 0x25, 0x9b, 0xff, 0x6b, 0x73, 0x90, 0x6c, 0xfe, 0xc7, 0x26,
  0xd1, 0xc3, 0xe6, 0xbf, 0x6f, 0xba, 0x73, 0x36, 0xca, 0xd8, 0x75, 0x3e,
  0xcb, 0x98, 0x24, 0x8e, 0x4e, 0xaf, 0x9f, 0x26, 0x7f, 0x83, 0xee, 0x60,
  0x78, 0x6d, 0x76, 0xab, 0x04, 0xa9, 0x6b, 0x33, 0x6f, 0x27, 0x86, 0xe9,
  0xa6, 0x4b, 0x28, 0x11, 0x59, 0x35, 0x35, 0xd4, 0x9b, 0x5e, 0x1a, 0x7a,
  0x35, 0xb2, 0x58, 0x87, 0xc3, 0xf8, 0x78, 0x85, 0x97, 0x65, 0x18, 0x64,
  0x52, 0xa4, 0x0b, 0x73, 0x23, 0x8e, 0x31, 0xa3, 0xbc, 0x08, 0x0f, 0xf3,
  0xcf, 0x17, 0xd9, 0xe7, 0xbb, 0x07, 0x07, 0x8f, 0x7e, 0xbf, 0xff, 0x24,
  0x6b, 0xae, 0x76, 0x7f, 0xde, 0xb1, 0x8f, 0x1c, 0x5d, 0xd0, 0xb6, 0x2b,
  0xf9, 0xe9, 0x24, 0x8c, 0x94, 0xb7, 0x52, 0xc2, 0xbc, 0x6f, 0xfe, 0x9e,
  0x5d, 0xe4, 0xb7, 0x03, 0xd5, 0x97, 0xf8, 0xce, 0xa5, 0x86, 0xd4, 0xcc,
  0xf9, 0x81, 0x45, 0xe8, 0x70, 0x97, 0xab, 0xac, 0x36, 0x3b, 0x79, 0x73,
  0x95, 0x36, 0x89, 0x1d, 0x80, 0x4f, 0x76, 0x91, 0x5f, 0x5e, 0x35, 0xc9,
  0x4d, 0x0a, 0x61, 0x73, 0xd4, 0xf0, 0x10, 0x90, 0xf2, 0x46, 0xc4, 0x5c,
  0xa4, 0x46, 0x56, 0xe0, 0x0c, 0x49, 0xa4, 0x4f, 0x9c, 0x86, 0xd1, 0x18,
  0x32, 0xe7, 0x03, 0x71, 0xea, 0xd4, 0x24, 0xad, 0x71, 0x69, 0x0b, 0xc3,
  0x1c, 0x1a, 0xa3, 0x23, 0xac, 0xf0, 0xaf, 0x2b, 0xa3, 0x05, 0xd0, 0x1e,
  0xc8, 0x44, 0x49, 0x50, 0xbe, 0xc1, 0x71, 0xe2, 0x6c, 0xac, 0xf0, 0x32,
  0x87, 0x34, 0x90, 0x63, 0xb6, 0x6f, 0xd4, 0xe6, 0xc2, 0x19, 0xce, 0x64,
  0x29, 0x63, 0x03, 0x4c, 0x76, 0x83, 0xd7, 0x49, 0x73, 0x4c, 0x6b, 0x28,
  0x0a, 0xac, 0x0e, 0x98, 0xc9, 0x7b, 0x8b, 0x35, 0x9b, 0x96, 0x7e, 0x84,
  0x4a, 0xd2, 0x51, 0x7c, 0xe8, 0xb5, 0x59, 0x69, 0x88, 0xcc, 0xcc, 0xd6,
  0x30, 0x63, 0xac, 0x0c, 0x2c, 0x96, 0x76, 0x85, 0x88, 0xdc, 0x8c, 0x89,
  0x1f, 0xe6, 0x0d, 0x64, 0x0c, 0xe9, 0xb0, 0x66, 0xbe, 0x66, 0x53, 0x48,
  0x11, 0x35, 0x8c, 0xda, 0x5b, 0x3f, 0x89, 0x47, 0xf3, 0x6c, 0x72, 0x6d,
  0x61, 0x3a, 0xaf, 0xcb, 0x24, 0xb9, 0x2c, 0x71, 0x4b, 0x88, 0x01, 0x13,
  0x99, 0x9b, 0x43, 0xb9, 0x4a, 0x21, 0xd5, 0x8c, 0x00, 0xb3, 0xf7, 0xa0,
  0xca, 0x88, 0x17, 0xd3, 0x49, 0xa5, 0xf3, 0x01, 0x4b, 0x2f, 0xbc, 0x23,
  0x5b, 0x95, 0x6c, 0xfe, 0xaf, 0xcd, 0x41, 0xb2, 0xf9, 0xef, 0x9b, 0x44,
  0x0f, 0x9b, 0xff, 0xb6, 0xe9, 0xce, 0xd9, 0x28, 0x63, 0xd7, 0xf9, 0x2c,
  0x63, 0x92, 0x38, 0x3a, 0xbd, 0x7e, 0x9a, 0xfc, 0x0d, 0xba, 0x83, 0xe1,
  0xb5, 0xd9, 0xad, 0x12, 0xa4, 0xae, 0xcd, 0xbc, 0x9d, 0x18, 0xa6, 0x9b,
  0x2e, 0xa1, 0x44, 0x64, 0xd5, 0xd4, 0x50, 0x6f, 0x7a, 0x69, 0xe8, 0xd5,
  0xc8, 0x62, 0x1d, 0x0e, 0xe3, 0xe3, 0x15, 0x5e, 0x96, 0x61, 0x90, 0x49,
  0x91, 0x2e, 0xcc, 0x8d, 0x38, 0xc6, 0x8c, 0xf2, 0x22, 0x3c, 0xcc, 0x3f,
  0x5f, 0x64, 0x9f, 0xef, 0x1e, 0x1c, 0x3c, 0xfa, 0xdd, 0xfe, 0x93, 0xac,
  0xb9, 0xda, 0xfd, 0x69, 0xc7, 0x3e, 0x72, 0x74, 0x41, 0xdb, 0xae, 0xe4,
  0xa7, 0x93, 0x30, 0x52, 0xde, 0x4a, 0x09, 0xf3, 0xbe, 0xf9, 0x7b, 0x76,
  0x91, 0xdf, 0x0e, 0x54, 0x5f, 0xe2, 0x3b, 0x97, 0x1a, 0x52, 0x33, 0xe7,
  0x07, 0x16, 0xa1, 0xc3, 0x5d, 0xae, 0xb2, 0xda, 0xec, 0xe4, 0xcd, 0x55,
  0xda, 0x24, 0x76, 0x00, 0x3e, 0xd9, 0x45, 0x7e, 0x79, 0xd5, 0x24, 0x37,
  0x29, 0x84, 0xcd, 0x51, 0xc3, 0x43, 0x40, 0xca, 0x1b, 0x11, 0x73, 0x91,
  0x1a, 0x59, 0x81, 0x33, 0x24, 0x91, 0x3e, 0x71, 0x1a, 0x46, 0x63, 0xc8,
  0x9c, 0x0f, 0xc4, 0xa9, 0x53, 0x93, 0xb4, 0xc6, 0xa5, 0x2d, 0x0c, 0x73,
  0x68, 0x8c, 0x8e, 0xb0, 0xc2, 0xbf, 0xae, 0x8c, 0x16, 0x40, 0x7b, 0x20,
  0x13, 0x25, 0x41, 0xf9, 0x06, 0xc7, 0x89, 0xb3, 0xb1, 0xc2, 0xcb, 0x1c,
  0xd2, 0x40, 0x8e, 0xd9, 0xbe, 0x51, 0x9b, 0x0b, 0x67, 0x38, 0x93, 0xa5,
  0x8c, 0x0d, 0x30, 0xd9, 0x0d, 0x5e, 0x27, 0xcd, 0x31, 0xad, 0xa1, 0x28,
  0xb0, 0x3a, 0x60, 0x26, 0xef, 0x2d, 0xd6, 0x6c, 0x5a, 0xfa, 0x11, 0x2a,
  0x49, 0x47, 0xf1, 0xa1, 0xd7, 0x66, 0xa5, 0x21, 0x32, 0x33, 0x5b, 0xc3,
  0x8c, 0xb1, 0x32, 0xb0, 0x58, 0xda, 0x15, 0x22, 0x72, 0x33, 0x26, 0x7e,
  0x98, 0x37, 0x90, 0x31, 0xa4, 0xc3, 0x9a, 0xf9, 0x9a, 0x4d, 0x21, 0x45,
  0xd4, 0x30, 0x6a, 0x6f, 0xfd, 0x24, 0x1e, 0xcd, 0xb3, 0xc9, 0xb5, 0xd1,
  0x52, 0x8c, 0x42, 0x9a, 0xd9, 0xb7, 0x48, 0x9e, 0x4f, 0xa1, 0x1b, 0xcd,
  0xb4, 0x14, 0xa3, 0x90, 0x66, 0xf6, 0x2d, 0x92, 0xe7, 0x53, 0xe8, 0x46,
  0x73, 0x73, 0x5f, 0xa6, 0x65, 0x55, 0x41, 0xdf, 0xc7, 0x09, 0x4e, 0x98,
  0x89, 0x2e, 0x32, 0xa3, 0x46, 0xf8, 0xdb, 0x99, 0x43, 0xa0, 0x19, 0xfe,
  0x62, 0xf4, 0x12, 0xe2, 0x20, 0x46, 0x7f, 0x20, 0x9e, 0x4f, 0x0b, 0xa7,
  0xd9, 0x61, 0xec, 0xe9, 0x34, 0x5b, 0x36, 0x75, 0x6c, 0x4d, 0x7a, 0xe0,
  0x66, 0x3a, 0x55, 0x86, 0x9d, 0xf7, 0x95, 0x2e, 0xda, 0x57, 0x2b, 0xf4,
  0x49, 0xef, 0x52, 0x3d, 0xc6, 0xe8, 0x61, 0xb5, 0xdd, 0xb5, 0x86, 0x68,
  0xc3, 0xb0, 0x31, 0xda, 0xf3, 0x05, 0x26, 0x8a, 0x87, 0x6b, 0xbe, 0xa9,
  0xc4, 0x9a, 0x71, 0x90, 0xac, 0x69, 0xf3, 0x77, 0x21, 0xba, 0xcc, 0x7e,
  0xda, 0xc1, 0xcd, 0x57, 0xed, 0x99, 0xe2, 0xf3, 0x50, 0xf1, 0x8d, 0x24,
  0x9f, 0xd5, 0x57, 0x46, 0xf9, 0xaa, 0xe5, 0x66, 0xe7, 0x0b, 0x43, 0x33,
  0xd7, 0x38, 0xdf, 0x65, 0x96, 0xcd, 0x46, 0xc9, 0xc9, 0x05, 0xb8, 0x6a,
  0x65, 0x26, 0xdd, 0xd0, 0xaf, 0x21, 0x55, 0xcc, 0xbe, 0xcd, 0x48, 0x89,
  0xb7, 0x57, 0x8b, 0xa7, 0xe2, 0x49, 0x07, 0xe2, 0xe4, 0xa9, 0xf9, 0x89,
  0x99, 0xed, 0xbc, 0x2d, 0x82, 0xe8, 0x1e, 0x1a, 0xee, 0x8d, 0xe9, 0x4d,
  0xb2, 0x84, 0x28, 0x71, 0x92, 0x35, 0x37, 0x59, 0x66, 0x87, 0xab, 0x33,
  0x23, 0xf6, 0x70, 0x68, 0xac, 0xf9, 0x11, 0x33, 0xc4, 0xd6, 0x9e, 0x9e,
  0x9d, 0x7c, 0x73, 0x76, 0x38, 0x1e, 0x27, 0x6f, 0x0f, 0xcf, 0x0f, 0xcf,
  0x5a, 0x3b, 0x5d, 0x94, 0xd5, 0x82, 0x4e, 0x74, 0x96, 0xd7, 0xcb, 0x79,
  0xcd, 0x7d, 0x99, 0x96, 0x55, 0x05, 0x7d, 0x1f, 0x27, 0x38, 0x61, 0x26,
  0xba, 0xc8, 0x8c, 0x1a, 0xe1, 0x6f, 0x67, 0x0e, 0x81, 0x66, 0xf8, 0x8b,
  0xd1, 0x4b, 0x88, 0x83, 0x18, 0xfd, 0x81, 0x78, 0x3e, 0x2d, 0x9c, 0x66,
  0x87, 0xb1, 0xa7, 0xd3, 0x6c, 0xd9, 0xd4, 0xb1, 0x35, 0xe9, 0x81, 0x9b,
  0xe9, 0x54, 0x19, 0x76, 0xde, 0x57, 0xba, 0x68, 0x5f, 0xad, 0xd0, 0x27,
  0xbd, 0x4b, 0xf5, 0x18, 0xa3, 0x87, 0xd5, 0x76, 0xd7, 0x1a, 0xa2, 0x0d,
  0xc3, 0xc6, 0x68, 0xcf, 0x17, 0x98, 0x28, 0x1e, 0xae, 0xf9, 0xa6, 0x12,
  0x6b, 0xc6, 0x41, 0xb2, 0xa6, 0xcd, 0xdf, 0x85, 0xe8, 0x32, 0xfb, 0x69,
  0x07, 0x37, 0x5f, 0xb5, 0x67, 0x8a, 0xcf, 0x43, 0xc5, 0x37, 0x92, 0x7c,
  0x56, 0x5f, 0x19, 0xe5, 0xab, 0x96, 0x9b, 0x9d, 0x2f, 0x0c, 0xcd, 0x5c,
  0xe3, 0x7c, 0x97, 0x59, 0x36, 0x1b, 0x25, 0x27, 0x17, 0xe0, 0xaa, 0x95,
  0x99, 0x74, 0x43, 0xbf, 0x86, 0x54, 0x31, 0xfb, 0x36, 0x23, 0x25, 0xde,
  0x5e, 0x2d, 0x9e, 0x8a, 0x27, 0x1d, 0x88, 0x93, 0xa7, 0xe6, 0x27, 0x66,
  0xb6, 0xf3, 0xb6, 0x08, 0xa2, 0x7b, 0x68, 0xb8, 0x37, 0xa6, 0x37, 0xc9,
  0x12, 0xa2, 0xc4, 0x49, 0xd6, 0xdc, 0x64, 0x99, 0x1d, 0xae, 0xce, 0x8c,
  0xd8, 0xc3, 0xa1, 0xb1, 0xe6, 0x47, 0xcc, 0x10, 0x5b, 0x7b, 0x7a, 0x76,
  0xf2, 0xf5, 0xd9, 0xe1, 0x78, 0x9c, 0xbc, 0x3d, 0x3c, 0x3f, 0x3c, 0x6b,
  0xed, 0x74, 0x51, 0x56, 0x0b, 0x3a, 0xd1, 0x59, 0x5e, 0x2f, 0xe7, 0xe9,
  0x7a, 0x87, 0xa3, 0x36, 0x2b, 0xb9, 0xac, 0x70, 0xb3, 0x16, 0x19, 0xa4,
  0xc2, 0x6c, 0x45, 0x9c, 0xcc, 0x88, 0x23, 0x73, 0x7c, 0xa2, 0xf1, 0x82,
  0x99, 0x90, 0x9a, 0x5c, 0x5c, 0xba, 0x9d, 0x36, 0x1c, 0x47, 0x24, 0x29,
  0x44, 0xa9, 0x3d, 0x0f, 0xa8, 0x9e, 0x64, 0xdc, 0x0c, 0xdc, 0xcf, 0x78,
  0x9b, 0x58, 0xb4, 0x19, 0x9a, 0xcd, 0x17, 0xc4, 0xec, 0xcc, 0x9f, 0x4e,
  0xdb, 0xcc, 0x2e, 0x8c, 0xaa, 0x6d, 0xa4, 0x2b, 0x5b, 0x0a, 0xdd, 0x39,
  0xe9, 0x6c, 0xad, 0x7e, 0x6c, 0xc8, 0x10, 0xac, 0x19, 0x03, 0xf2, 0x54,
  0xf8, 0x0b, 0x96, 0x89, 0x19, 0x9d, 0x04, 0xbc, 0x4f, 0x1e, 0x5b, 0x62,
  0x0a, 0x99, 0x39, 0xd9, 0x19, 0x0f, 0x5f, 0xaf, 0x2e, 0xe8, 0x22, 0x27,
  0x5b, 0x46, 0x33, 0x7f, 0x6b, 0xac, 0x25, 0x63, 0xb1, 0x0c, 0x92, 0xd3,
  0x6d, 0x7a, 0x6f, 0x6f, 0x77, 0xff, 0x31, 0x33, 0x82, 0x91, 0x0e, 0xf7,
  0xc6, 0x63, 0xc4, 0x7b, 0x1f, 0x71, 0xbc, 0xfc, 0x10, 0x06, 0x1f, 0x25,
  0x7b, 0x6f, 0xf9, 0x27, 0x8f, 0x3f, 0x7f, 0xf2, 0xec, 0xa9, 0xfc, 0xb0,
  0x4d, 0xe0, 0x76, 0xfe, 0x44, 0x1d, 0x64, 0xf9, 0xc1, 0x14, 0x34, 0x33,
  0x31, 0xab, 0x5b, 0xe4, 0x85, 0xb9, 0x26, 0xe6, 0x5a, 0x09, 0xaf, 0x02,
  0x3d, 0x9b, 0xc9, 0x5f, 0x30, 0x67, 0x93, 0x73, 0x6d, 0x9b, 0x94, 0xe6,
  0x65, 0x43, 0xb2, 0x86, 0x97, 0xdb, 0x43, 0x62, 0x35, 0xa1, 0xc1, 0x44,
  0xd2, 0x09, 0x18, 0x2c, 0xec, 0x2a, 0xa3, 0x00, 0x67, 0xd1, 0xaf, 0x59,
  0xa9, 0x68, 0xde, 0x30, 0x73, 0x33, 0x32, 0x11, 0x62, 0x2e, 0xdc, 0x77,
  0xc3, 0x0a, 0x88, 0x43, 0xde, 0xe4, 0x35, 0xb1, 0x86, 0x9b, 0x72, 0x35,
  0x37, 0x56, 0x0c, 0x1e, 0x58, 0x2d, 0xe9, 0x05, 0xf3, 0xa9, 0xa5, 0xe3,
  0x01, 0x46, 0x63, 0x01, 0xed, 0x74, 0x47, 0x31, 0x53, 0x33, 0xff, 0x5c,
  0x1a, 0x52, 0xe2, 0xe9, 0x8c, 0xba, 0x12, 0x82, 0x78, 0x5f, 0x40, 0x89,
  0xb8, 0xf3, 0xc4, 0xb4, 0x4f, 0x4f, 0xc6, 0xe7, 0xd0, 0x00, 0x4e, 0xdf,
  0x9f, 0x9b, 0x81, 0x8c, 0x0a, 0x50, 0x37, 0x86, 0x28, 0xf1, 0x62, 0x91,
  0x91, 0x09, 0xa9, 0xc3, 0x19, 0xda, 0xcb, 0x89, 0x51, 0x91, 0x5a, 0xa3,
  0x9f, 0xe4, 0x39, 0xb2, 0x8d, 0x8d, 0x2b, 0xa8, 0x16, 0x36, 0xcb, 0x70,
  0xfb, 0x4e, 0xb2, 0xf5, 0xc7, 0x6d, 0x43, 0xb3, 0xc3, 0xd2, 0xee, 0xce,
  0x70, 0x28, 0xaf, 0x9a, 0x6f, 0xd7, 0xf9, 0x22, 0x9f, 0xa7, 0x95, 0x37,
  0x75, 0xe6, 0xa8, 0xb8, 0x9f, 0x96, 0xaf, 0x4c, 0x0d, 0xd5, 0xd0, 0xb4,
  0x9d, 0x29, 0x89, 0x3d, 0x24, 0xae, 0xe4, 0x8e, 0x6a, 0x06, 0x85, 0x80,
  0x1d, 0x8e, 0xda, 0xac, 0xe4, 0xb2, 0xc2, 0xcd, 0x5a, 0x64, 0x90, 0x0a,
  0xb3, 0x15, 0x71, 0x32, 0x23, 0x8e, 0xcc, 0xf1, 0x89, 0xc6, 0x0b, 0x66,
  0x42, 0x6a, 0x72, 0x71, 0xe9, 0x76, 0xda, 0x70, 0x1c, 0x91, 0xa4, 0x10,
  0xa5, 0xf6, 0x3c, 0xa0, 0x7a, 0x92, 0x71, 0x33, 0x70, 0x3f, 0xe3, 0x6d,
  0x62, 0xd1, 0x66, 0x68, 0x36, 0x5f, 0x10, 0xb3, 0x33, 0x7f, 0x3a, 0x6d,
  0x33, 0xbb, 0x30, 0xaa, 0xb6, 0x91, 0xae, 0x6c, 0x29, 0x74, 0xe7, 0xa4,
  0xb3, 0xb5, 0xfa, 0xb1, 0x21, 0x43, 0xb0, 0x66, 0x0c, 0xc8, 0x53, 0xe1,
  0x2f, 0x58, 0x26, 0x66, 0x74, 0x12, 0xf0, 0x3e, 0x79, 0x6c, 0x89, 0x29,
  0x64, 0xe6, 0x64, 0x67, 0x3c, 0x7c, 0xbd, 0xba, 0xa0, 0x8b, 0x9c, 0x6c,
  0x19, 0xcd, 0xfc, 0xad, 0xb1, 0x96, 0x8c, 0xc5, 0x32, 0x48, 0x4e, 0xb7,
  0xe9, 0xbd, 0xbd, 0xdd, 0xfd, 0xc7, 0xcc, 0x08, 0x46, 0x3a, 0xdc, 0x1b,
  0x8f, 0x11, 0xef, 0x7d, 0xc4, 0xf1, 0xf2, 0x43, 0x18, 0x7c, 0x94, 0xec,
  0xbd, 0xe5, 0x9f, 0x3c, 0xfe, 0xfc, 0xc9, 0xb3, 0xa7, 0xf2, 0xc3, 0x36,
  0x81, 0xdb, 0xf9, 0x13, 0x75, 0x90, 0xe5, 0x07, 0x53, 0xd0, 0xcc, 0xc4,
  0xac, 0x6e, 0x91, 0x17, 0xe6, 0x9a, 0x98, 0x6b, 0x25, 0xbc, 0x0a, 0xf4,
  0x6c, 0x26, 0x7f, 0xc1, 0x9c, 0x4d, 0xce, 0xb5, 0x6d, 0x52, 0x9a, 0x97,
  0x0d, 0xc9, 0x1a, 0x5e, 0x6e, 0x0f, 0x89, 0xd5, 0x84, 0x06, 0x13, 0x49,
  0x27, 0x60, 0xb0, 0xb0, 0xab, 0x8c, 0x02, 0x9c, 0x45, 0xbf, 0x66, 0xa5,
  0xa2, 0x79, 0xc3, 0xcc, 0xcd, 0xc8, 0x44, 0x88, 0xb9, 0x70, 0xdf, 0x0d,
  0x2b, 0x20, 0x0e, 0x79, 0x93, 0xd7, 0xc4, 0x1a, 0x6e, 0xca, 0xd5, 0xdc,
  0x58, 0x31, 0x78, 0x60, 0xb5, 0xa4, 0x17, 0xcc, 0xa7, 0x96, 0x8e, 0x07,
  0x18, 0x8d, 0x05, 0xb4, 0xd3, 0x1d, 0xc5, 0x4c, 0xcd, 0xfc, 0x73, 0x69,
  0x48, 0x89, 0xa7, 0x33, 0xea, 0x4a, 0x08, 0xe2, 0x7d, 0x01, 0x25, 0xe2,
  0xce, 0x13, 0xd3, 0x3e, 0x3d, 0x19, 0x9f, 0x43, 0x03, 0x38, 0x7d, 0x7f,
  0x6e, 0x06, 0x32, 0x2a, 0x40, 0xdd, 0x18, 0xa2, 0xc4, 0x8b, 0x45, 0x46,
  0x26, 0xa4, 0x0e, 0x67, 0x68, 0x2f, 0x27, 0x46, 0x45, 0x6a, 0x8d, 0x7e,
  0x92, 0xe7, 0xc8, 0x36, 0x36, 0xae, 0xa0, 0x5a, 0xd8, 0x2c, 0xc3, 0xed,
  0x3b, 0xc9, 0xd6, 0x1f, 0xb7, 0x0d, 0xcd, 0x0e, 0x4b, 0xbb, 0x3b, 0xc3,
  0xa1, 0xbc, 0x6a, 0xbe, 0x5d, 0xe7, 0x8b, 0x7c, 0x9e, 0x56, 0xde, 0xd4,
  0x99, 0xa3, 0xe2, 0x7e, 0x5a, 0xbe, 0x32, 0x35, 0x54, 0x43, 0xd3, 0x76,
  0xa6, 0x24, 0xf6, 0x90, 0xb8, 0x92, 0x3b, 0xaa, 0x19, 0x14, 0x02, 0xd2,
  0x34, 0xe6, 0x65, 0x6e, 0xb7, 0x0e, 0x67, 0x06, 0x76, 0xd5, 0xda, 0xa8,
  0xee, 0xb9, 0x05, 0x1b, 0x07, 0x89, 0x44, 0x9e, 0x0a, 0xbb, 0x75, 0xc9,
  0xc6, 0x24, 0xad, 0x36, 0x12, 0xcb, 0x8b, 0xf9, 0x6e, 0xe2, 0x86, 0x54,
  0xd9, 0xe5, 0xca, 0xac, 0x20, 0xe1, 0xdd, 0xc5, 0x4a, 0x7f, 0xe7, 0xad,
  0x54, 0x07, 0x18, 0x4e, 0xf0, 0x48, 0x5e, 0xb3, 0x99, 0x79, 0x61, 0xec,
  0x16, 0x5c, 0x1a, 0xd5, 0x5f, 0x49, 0xa3, 0x11, 0x8a, 0x89, 0x10, 0x8c,
  0xa7, 0xd7, 0x9a, 0xab, 0xd2, 0x64, 0x86, 0xd1, 0x10, 0xfb, 0xc7, 0x93,
  0x43, 0x73, 0x64, 0xc3, 0x61, 0x6d, 0xf6, 0x1f, 0xba, 0xf7, 0x52, 0x6c,
  0xfa, 0x13, 0x72, 0x98, 0x58, 0xdf, 0xca, 0x89, 0xe8, 0xc0, 0x24, 0x36,
  0xf9, 0x5d, 0x62, 0xa1, 0x46, 0x51, 0xbd, 0x31, 0x1f, 0x4e, 0xcd, 0x91,
  0x99, 0x0b, 0xf7, 0x16, 0x1b, 0xc5, 0xbe, 0x91, 0xc4, 0xaa, 0xcd, 0x44,
  0x19, 0x39, 0xee, 0x7d, 0xea, 0x74, 0x99, 0xd9, 0x2c, 0xc7, 0x6f, 0xcd,
  0xfd, 0x32, 0x12, 0x6e, 0x95, 0x91, 0xed, 0x21, 0x9b, 0xba, 0x70, 0x9b,
  0x49, 0x66, 0x6c, 0x7d, 0x55, 0xc2, 0x4c, 0xdc, 0x60, 0x5e, 0x3c, 0xc4,
  0xb7, 0x36, 0x48, 0x9e, 0x2f, 0x12, 0xfd, 0x96, 0x7c, 0xca, 0xac, 0x63,
  0xe6, 0xeb, 0x66, 0x03, 0x23, 0x68, 0xee, 0x3c, 0x23, 0x81, 0x78, 0x35,
  0xcf, 0xbd, 0xb2, 0x0a, 0x8f, 0x11, 0xa9, 0x4b, 0x28, 0x53, 0xc2, 0xc3,
  0x49, 0x18, 0xd2, 0x95, 0xad, 0x79, 0x6a, 0x03, 0xb3, 0xb7, 0x78, 0xf2,
  0xf2, 0x4a, 0x1f, 0xf5, 0x04, 0x6b, 0x6a, 0x16, 0x07, 0xe1, 0x00, 0x7b,
  0x7a, 0xa6, 0x7c, 0xbf, 0xac, 0x98, 0x99, 0xcd, 0x4b, 0x43, 0xcb, 0x1b,
  0xac, 0xb2, 0xca, 0xb4, 0x31, 0x6b, 0xcc, 0x12, 0x3b, 0xce, 0x7e, 0xa6,
  0xd2, 0x9e, 0x8d, 0x9d, 0xb4, 0xec, 0x57, 0x7d, 0xef, 0xd4, 0xdc, 0x46,
  0x8d, 0x69, 0x8f, 0x8c, 0xe8, 0xac, 0x41, 0xc7, 0xba, 0xf3, 0x44, 0xde,
  0x46, 0xd4, 0x6d, 0x36, 0x7c, 0x1f, 0xc9, 0xc6, 0xea, 0xec, 0x7c, 0x4d,
  0xe4, 0x23, 0x82, 0xcc, 0xae, 0xcc, 0xac, 0x68, 0x96, 0xa7, 0x44, 0x27,
  0x7c, 0x34, 0xa4, 0x8c, 0x38, 0x8b, 0x30, 0xa2, 0x07, 0xdf, 0x75, 0x0d,
  0xba, 0xf9, 0xdc, 0x17, 0x49, 0x3a, 0xa7, 0xe1, 0x89, 0x59, 0xfb, 0x31,
  0xad, 0x63, 0x78, 0x9d, 0xe0, 0xfa, 0x19, 0xb3, 0x01, 0x77, 0x71, 0x78,
  0x98, 0x97, 0xb9, 0xdd, 0x3a, 0x9c, 0x19, 0xd8, 0x55, 0x6b, 0xa3, 0xba,
  0xe7, 0x16, 0x6c, 0x1c, 0x24, 0x12, 0x79, 0x2a, 0xec, 0xd6, 0x25, 0x1b,
  0x93, 0xb4, 0xda, 0x48, 0x2c, 0x2f, 0xe6, 0xbb, 0x89, 0x1b, 0x52, 0x65,
  0x97, 0x2b, 0xb3, 0x82, 0x84, 0x77, 0x17, 0x2b, 0xfd, 0xad, 0xb7, 0x52,
  0x1d, 0x60, 0x38, 0xc1, 0x23, 0x79, 0xcd, 0x66, 0xe6, 0x85, 0xb1, 0x5b,
  0x70, 0x69, 0x54, 0x7f, 0x25, 0x8d, 0x46, 0x28, 0x26, 0x42, 0x30, 0x9e,
  0x5e, 0x6b, 0xae, 0x4a, 0x93, 0x19, 0x46, 0x43, 0xec, 0x1f, 0x4f, 0x0e,
  0xcd, 0x91, 0x0d, 0x87, 0xb5, 0xd9, 0x7f, 0xe8, 0xde, 0x4b, 0xb1, 0xe9,
  0x4f, 0xc8, 0x61, 0x62, 0x7d, 0x2b, 0x27, 0xa2, 0x03, 0x93, 0xd8, 0xe4,
  0x77, 0x89, 0x85, 0x1a, 0x45, 0xf5, 0xc6, 0x7c, 0x38, 0x35, 0x47, 0x66,
  0x2e, 0xdc, 0x5b, 0x6c, 0x14, 0xfb, 0x46, 0x12, 0xab, 0x36, 0x13, 0x65,
  0xe4, 0xb8, 0xf7, 0xa9, 0xd3, 0x65, 0x66, 0xb3, 0x1c, 0xbf, 0x35, 0xf7,
  0xcb, 0x48, 0xb8, 0x55, 0x46, 0xb6, 0x87, 0x6c, 0xea, 0xc2, 0x6d, 0x26,
  0x99, 0xb1, 0xf5, 0x55, 0x09, 0x33, 0x71, 0x83, 0x79, 0xf1, 0x10, 0xdf,
  0xda, 0x20, 0x79, 0xbe, 0x48, 0xf4, 0x5b, 0xf2, 0x29, 0xb3, 0x8e, 0x99,
  0xaf, 0x9b, 0x0d, 0x8c, 0xa0, 0xb9, 0xf3, 0x8c, 0x04, 0xe2, 0xd5, 0x3c,
  0xf7, 0xca, 0x2a, 0x3c, 0x46, 0xa4, 0x2e, 0xa1, 0x4c, 0x09, 0x0f, 0x27,
  0x61, 0x48, 0x57, 0xb6, 0xe6, 0xa9, 0x0d, 0xcc, 0xde, 0xe2, 0xc9, 0xcb,
  0x2b, 0x7d, 0xd4, 0x13, 0xac, 0xa9, 0x59, 0x1c, 0x84, 0x03, 0xec, 0xe9,
  0x99, 0xf2, 0xfd, 0xb2, 0x62, 0x66, 0x36, 0x2f, 0x0d, 0x2d, 0x6f, 0xb0,
  0xca, 0x2a, 0xd3, 0xc6, 0xac, 0x31, 0x4b, 0xec, 0x38, 0xfb, 0x99, 0x4a,
  0x7b, 0x36, 0x76, 0xd2, 0xb2, 0x5f, 0xf5, 0xbd, 0x53, 0x73, 0x1b, 0x35,
  0xa6, 0x3d, 0x32, 0xa2, 0xb3, 0x06, 0x1d, 0xeb, 0xce, 0x13, 0x79, 0x1b,
  0x51, 0xb7, 0xd9, 0xf0, 0x7d, 0x24, 0x1b, 0xab, 0xb3, 0xf3, 0x35, 0x91,
  0x8f, 0x08, 0x32, 0xbb, 0x32, 0xb3, 0xa2, 0x59, 0x9e, 0x12, 0x9d, 0xf0,
  0xd1, 0x90, 0x32, 0xe2, 0x2c, 0xc2, 0x88, 0x1e, 0x7c, 0xd7, 0x35, 0xe8,
  0xe6, 0x73, 0x5f, 0x24, 0xe9, 0x9c, 0x86, 0x27, 0x66, 0xed, 0xc7, 0xb4,
  0x8e, 0xe1, 0x75, 0x82, 0xeb, 0x67, 0xcc, 0x06, 0xdc, 0xc5, 0xe1, 0xc9,
  0xf1, 0xb5, 0x77, 0x8d, 0x60, 0xb9, 0x17, 0xd0, 0x53, 0x06, 0xe4, 0x1d,
  0x99, 0x94, 0xa5, 0x31, 0x93, 0xdd, 0xd2, 0x20, 0x0f, 0xb2, 0x02, 0xd4,
  0x2e, 0x27, 0x6a, 0x58, 0xc2, 0xd2, 0xf2, 0xdb, 0x3b, 0x63, 0x2e, 0xa5,
  0x72, 0x7c, 0xed, 0x5d, 0x23, 0x58, 0xee, 0x05, 0xf4, 0x94, 0x01, 0x79,
  0x47, 0x26, 0x65, 0x69, 0xcc, 0x64, 0xb7, 0x34, 0xc8, 0x83, 0xac, 0x00,
  0xb5, 0xcb, 0x89, 0x1a, 0x96, 0xb0, 0xb4, 0xfc, 0xf6, 0xce, 0x98, 0x4b,
  0xe9, 0x65, 0x9a, 0x5b, 0x7a, 0x93, 0x9b, 0x31, 0x4b, 0xf4, 0xe1, 0xa2,
  0x94, 0xe7, 0x71, 0x54, 0x50, 0x81, 0x84, 0x6f, 0xad, 0x6a, 0xbe, 0x3e,
  0x66, 0x55, 0x86, 0xf3, 0x10, 0xef, 0x90, 0x71, 0xa1, 0x36, 0xea, 0x70,
  0x97, 0x69, 0x6e, 0xe9, 0x4d, 0x6e, 0xc6, 0x2c, 0xd1, 0x87, 0x8b, 0x52,
  0x9e, 0xc7, 0x51, 0x41, 0x05, 0x12, 0xbe, 0xb5, 0xaa, 0xf9, 0xfa, 0x98,
  0x55, 0x19, 0xce, 0x43, 0xbc, 0x43, 0xc6, 0x85, 0xda, 0xa8, 0xc3, 0x4d,
  0x48, 0x51, 0x86, 0xce, 0x49, 0xcc, 0x97, 0x34, 0x48, 0x33, 0xe2, 0xc6,
  0x28, 0xf9, 0xa6, 0xbc, 0xc9, 0xc8, 0x57, 0x48, 0xfa, 0x7d, 0x0e, 0x6f,
  0x97, 0x51, 0x05, 0x6f, 0xb2, 0x64, 0x61, 0x54, 0x4f, 0xb3, 0x9b, 0xa4,
  0x7d, 0xd0, 0xcf, 0x3c, 0xf3, 0xd0, 0x50, 0xf8, 0x0d, 0xef, 0x92, 0x5d,
  0x13, 0x52, 0x94, 0xa1, 0x73, 0x12, 0xf3, 0x25, 0x0d, 0xd2, 0x8c, 0xb8,
  0x31, 0x4a, 0xbe, 0x2d, 0x6f, 0x32, 0xf2, 0x15, 0x92, 0x7e, 0x9f, 0xc3,
  0xdb, 0x65, 0x54, 0xc1, 0x9b, 0x2c, 0x59, 0x18, 0xd5, 0xd3, 0xec, 0x26,
  0x69, 0x1f, 0xf4, 0x33, 0xcf, 0x3c, 0x34, 0x14, 0x7e, 0xc3, 0xbb, 0x64,
  0x57, 0x61, 0x8f, 0xf2, 0x82, 0xaf, 0x44, 0xb2, 0x45, 0xea, 0xcd, 0x14,
  0xbb, 0xb5, 0x6c, 0xdc, 0x2a, 0xec, 0x86, 0xdc, 0xa4, 0xb5, 0x77, 0xb9,
  0x32, 0x32, 0x4d, 0x9f, 0x8d, 0xf6, 0x9e, 0x8f, 0x76, 0x47, 0xc6, 0x10,
  0xc9, 0xae, 0xf3, 0x72, 0x55, 0x9b, 0x4f, 0x63, 0x1a, 0xee, 0x9d, 0x0c,
  0xb7, 0xb2, 0x29, 0x2f, 0x2f, 0xe7, 0xac, 0xf3, 0xec, 0x94, 0x17, 0x17,
  0xac, 0xfb, 0x18, 0x4d, 0xcf, 0xea, 0xcf, 0x6c, 0x01, 0x61, 0x67, 0xe4,
  0xba, 0x31, 0x4b, 0x0d, 0x4d, 0xe4, 0x91, 0x73, 0x5e, 0x0c, 0x87, 0xe9,
  0xa4, 0x6e, 0x60, 0x4c, 0x0d, 0x57, 0x45, 0x7e, 0x3b, 0xac, 0xcb, 0xe9,
  0x47, 0x73, 0x28, 0x2f, 0x96, 0x69, 0x73, 0xf5, 0xc7, 0x8e, 0x4b, 0x78,
  0x0b, 0xb2, 0x64, 0x3b, 0x49, 0x5e, 0xb1, 0x5a, 0x89, 0x9d, 0xa8, 0xf8,
  0xbe, 0x99, 0xd3, 0x94, 0x51, 0x92, 0xf7, 0x66, 0x14, 0x43, 0xcb, 0x0b,
  0x73, 0xa8, 0x09, 0x0f, 0x36, 0x50, 0x56, 0xda, 0x19, 0x8e, 0x1c, 0x8e,
  0x10, 0x23, 0xe4, 0xb7, 0x33, 0x57, 0xa7, 0xac, 0x3e, 0x1a, 0x45, 0xfb,
  0x9d, 0x31, 0x19, 0x0f, 0xf0, 0x6f, 0xc3, 0xc2, 0x1a, 0xda, 0x72, 0x91,
  0xac, 0x66, 0x46, 0xcc, 0x8c, 0x61, 0x91, 0xa7, 0x93, 0x61, 0x67, 0x38,
  0xf9, 0xbe, 0x7c, 0x34, 0x51, 0x5b, 0x43, 0x49, 0x29, 0xd9, 0xfc, 0xca,
  0xd8, 0x7f, 0x57, 0x7c, 0xec, 0x34, 0x20, 0xaf, 0xd1, 0x50, 0xe8, 0xa5,
  0x85, 0x3d, 0xca, 0x0b, 0xbe, 0x12, 0xc9, 0x16, 0xa9, 0x37, 0x53, 0xec,
  0xd6, 0xb2, 0x71, 0xab, 0xb0, 0x1b, 0x72, 0x93, 0xd6, 0xde, 0xe5, 0xca,
  0xc8, 0x34, 0x7d, 0x36, 0xda, 0x7b, 0x3e, 0xda, 0x1d, 0x19, 0x43, 0x24,
  0xbb, 0xce, 0xcb, 0x55, 0x6d, 0x3e, 0x8d, 0x69, 0xb8, 0x77, 0x32, 0xdc,
  0xca, 0xa6, 0xbc, 0xbc, 0x9c, 0xb3, 0xce, 0xb3, 0x53, 0x5e, 0x5c, 0xb0,
  0xee, 0x63, 0x34, 0x3d, 0xab, 0x3f, 0xb3, 0x05, 0x84, 0x9d, 0x91, 0xeb,
  0xc6, 0x2c, 0x35, 0x34, 0x91, 0x47, 0xce, 0x79, 0x31, 0x1c, 0xa6, 0x93,
  0xba, 0x81, 0x31, 0x35, 0x5c, 0x15, 0xf9, 0xed, 0xb0, 0x2e, 0xa7, 0x1f,
  0xcd, 0xa1, 0xbc, 0x58, 0xa6, 0xcd, 0xd5, 0x1f, 0x3b, 0x2e, 0xe1, 0x2d,
  0xc8, 0x92, 0xed, 0x24, 0x79, 0xc5, 0x6a, 0x25, 0x76, 0xa2, 0xe2, 0xfb,
  0x66, 0x4e, 0x53, 0x46, 0x49, 0xde, 0x9b, 0x51, 0x0c, 0x2d, 0x2f, 0xcc,
  0xa1, 0x26, 0x3c, 0xd8, 0x40, 0x59, 0x69, 0x67, 0x38, 0x72, 0x38, 0x42,
  0x8c, 0x90, 0xdf, 0xce, 0x5c, 0x9d, 0xb2, 0xfa, 0x68, 0x14, 0xed, 0x77,
  0xc6, 0x64, 0x3c, 0xc0, 0xbf, 0x0d, 0x0b, 0x6b, 0x68, 0xcb, 0x45, 0xb2,
  0x9a, 0x19, 0x31, 0x33, 0x86, 0x45, 0x9e, 0x4e, 0x86, 0x9d, 0xe1, 0xe4,
  0xfb, 0xf2, 0xd1, 0x44, 0x6d, 0x0d, 0x25, 0xa5, 0x64, 0xf3, 0x4b, 0x63,
  0xff, 0x5d, 0xf1, 0xb1, 0xd3, 0x80, 0xbc, 0x46, 0x43, 0xa1, 0x97, 0xc6,
  0x82, 0x28, 0x9a, 0xee, 0x70, 0x57, 0x24, 0xaa, 0x21, 0x65, 0xd8, 0xd8,
  0x25, 0x22, 0x11, 0x0f, 0x90, 0xb5, 0x3f, 0x47, 0x9f, 0x75, 0x5e, 0x7b,
  0xe9, 0xce, 0xf4, 0xc9, 0x23, 0x73, 0xa6, 0xfe, 0x46, 0xcf, 0x9b, 0x61,
  0xb1, 0x20, 0x8a, 0xa6, 0x3b, 0xdc, 0x15, 0x89, 0x6a, 0x48, 0x19, 0x36,
  0x76, 0x89, 0x48, 0xc4, 0x03, 0x64, 0xed, 0xcf, 0xd1, 0x67, 0x9d, 0xd7,
  0x5e, 0xba, 0x33, 0x7d, 0xf2, 0xc8, 0x9c, 0xa9, 0xbf, 0xd1, 0xf3, 0x66,
  0x58, 0x5f, 0x4f, 0x93, 0x17, 0xa4, 0x7d, 0x83, 0x4c, 0xa3, 0x1b, 0x3c,
  0x7d, 0x3d, 0x4d, 0x5e, 0x90, 0xf6, 0x0d, 0x32, 0x8d, 0x6e, 0xf0, 0x78,
  0x3b, 0xf9, 0xfe, 0xe5, 0xd9, 0xbb, 0xa3, 0x77, 0x5f, 0x1f, 0xf0, 0x47,
  0xde, 0x4e, 0x7e, 0x78, 0x79, 0xf6, 0xee, 0xe8, 0xdd, 0x37, 0x07, 0xfc,
  0x51, 0xa1, 0x34, 0xf3, 0xb7, 0xec, 0x76, 0x09, 0x3f, 0x18, 0x66, 0x6b,
  0x85, 0xd2, 0xcc, 0xdf, 0xb2, 0xdb, 0x25, 0xfc, 0x60, 0x98, 0xad, 0x11,
  0x65, 0x49, 0xf2, 0xba, 0x24, 0x7b, 0x84, 0x18, 0x26, 0x04, 0x56, 0x67,
  0x44, 0x59, 0x92, 0xbc, 0x2e, 0xc9, 0x1e, 0x21, 0x86, 0x09, 0x81, 0xd5,
  0x19, 0xce, 0x88, 0x96, 0xd9, 0xaa, 0xe3, 0xfb, 0xb5, 0x0c, 0xdb, 0x0d,
  0xcc, 0xd7, 0x93, 0x37, 0x59, 0xe7, 0x68, 0xf8, 0x23, 0xbb, 0x8f, 0x49,
  0x5f, 0x1a, 0x41, 0x5a, 0x92, 0x99, 0xaf, 0x33, 0xef, 0x7e, 0xa9, 0x34,
  0xc6, 0x2e, 0xdb, 0xf9, 0x66, 0xbc, 0x5b, 0x73, 0x6d, 0xb0, 0x4b, 0x3a,
  0xd8, 0xd4, 0xb0, 0xa3, 0x4c, 0x14, 0x07, 0x62, 0x75, 0x64, 0x36, 0x08,
  0x2b, 0x1b, 0x25, 0x2f, 0x2f, 0xba, 0x47, 0x09, 0xdd, 0x05, 0x5a, 0xbd,
  0x4a, 0xc1, 0x99, 0x53, 0x84, 0xd9, 0xcb, 0xcb, 0x23, 0xea, 0x30, 0xb5,
  0x39, 0x9f, 0x99, 0x4a, 0x7a, 0x7c, 0xa6, 0x33, 0x1c, 0x99, 0x9e, 0xc4,
  0x38, 0x23, 0x5a, 0x66, 0xab, 0x8e, 0xef, 0xd7, 0x32, 0x6c, 0x37, 0x30,
  0x5f, 0x4f, 0xde, 0x64, 0x9d, 0xa3, 0xe1, 0x8f, 0xec, 0x3e, 0x26, 0x7d,
  0x69, 0x04, 0x69, 0x49, 0x66, 0xbe, 0xce, 0xbc, 0xfb, 0xa5, 0xd2, 0x18,
  0xbb, 0x6c, 0xe7, 0x9b, 0xf1, 0x6e, 0xcd, 0xb5, 0xc1, 0x2e, 0xe9, 0x60,
  0x53, 0xc3, 0x8e, 0x32, 0x51, 0x1c, 0x88, 0xd5, 0x91, 0xd9, 0x20, 0xac,
  0x6c, 0x94, 0xbc, 0xbc, 0xe8, 0x1e, 0x25, 0x74, 0x17, 0x68, 0xf5, 0x2a,
  0x05, 0x67, 0x4e, 0x11, 0x66, 0x2f, 0x2f, 0x8f, 0xa8, 0xc3, 0xd4, 0xe6,
  0x7c, 0x66, 0x2a, 0xe9, 0xf1, 0x99, 0xce, 0x70, 0x64, 0x7a, 0x12, 0x9b,
  0x81, 0x52, 0x98, 0xe3, 0x40, 0x61, 0xfa, 0x19, 0x46, 0xbd, 0x28, 0x67,
  0x64, 0x47, 0x04, 0xfb, 0x33, 0xb6, 0x0e, 0x9f, 0x8d, 0x0d, 0xb7, 0xea,
  0x66, 0xa0, 0x14, 0xe6, 0x38, 0x50, 0x98, 0x7e, 0x86, 0x51, 0x2f, 0xca,
  0x19, 0xd9, 0x11, 0xc1, 0xfe, 0x8c, 0xd9, 0xc2, 0x80, 0xc7, 0x67, 0x63,
  0xc3, 0x2d, 0x3b, 0xd9, 0x82, 0xef, 0xcf, 0x90, 0x41, 0x71, 0xd9, 0x5c,
  0x6d, 0x33, 0xb3, 0x65, 0xcf, 0x46, 0x02, 0x55, 0xc5, 0x2c, 0x7a, 0xc7,
  0x4c, 0xc6, 0x53, 0xf2, 0x3d, 0x97, 0x00, 0xb9, 0x9e, 0x49, 0xfb, 0xfc,
  0xcb, 0xaa, 0x6e, 0xc8, 0x22, 0x12, 0x15, 0x80, 0x57, 0x63, 0x66, 0xb7,
  0xc8, 0x16, 0x65, 0x75, 0x17, 0x4c, 0xe6, 0x88, 0x14, 0x10, 0x18, 0x9f,
  0x72, 0x62, 0xa0, 0x05, 0x92, 0x91, 0xea, 0x16, 0x84, 0x21, 0x00, 0xbf,
  0xba, 0xb5, 0x05, 0x49, 0x71, 0x32, 0x4c, 0xc8, 0xd8, 0xe0, 0xce, 0x69,
  0x64, 0x0b, 0xae, 0x3f, 0x43, 0x05, 0xc5, 0x65, 0x73, 0xb5, 0xed, 0xdc,
  0x1a, 0x50, 0x53, 0xcc, 0x82, 0x77, 0xcc, 0x44, 0x68, 0xdd, 0x45, 0x97,
  0xd4, 0xc9, 0xed, 0x4c, 0x9a, 0xe7, 0x5f, 0x56, 0x75, 0x43, 0xd6, 0x90,
  0x88, 0x7f, 0x5e, 0x89, 0x99, 0xd9, 0x22, 0x5b, 0x94, 0xd5, 0x5d, 0x30,
  0x91, 0x23, 0x52, 0x3e, 0x60, 0x78, 0xca, 0x69, 0x81, 0x0e, 0x48, 0x3e,
  0xaa, 0x4b, 0x10, 0x46, 0x00, 0x7c, 0xea, 0xd6, 0x0e, 0x24, 0xa5, 0xc9,
  0x30, 0x20, 0x63, 0x7f, 0x3b, 0x87, 0xad, 0x1a, 0x50, 0xe4, 0xe8, 0x61,
  0xdb, 0x5e, 0xac, 0xa9, 0x89, 0xb8, 0x70, 0xf0, 0xff, 0xf3, 0x14, 0x5c,
  0xa7, 0xc8, 0x5a, 0x27, 0x44, 0xd2, 0x83, 0x97, 0xb6, 0x8e, 0xdc, 0x9f,
  0xab, 0x46, 0x14, 0x39, 0x7b, 0xd8, 0xbe, 0x17, 0x8b, 0x6a, 0x22, 0x6e,
  0x1c, 0xfc, 0xff, 0x3c, 0x05, 0xe7, 0x29, 0xb2, 0xd6, 0x29, 0x91, 0x04,
  0xe1, 0xa5, 0xad, 0x23, 0xf9, 0xa7, 0x8f, 0x47, 0x7b, 0x2d, 0x92, 0x2f,
  0xee, 0x10, 0x2c, 0x88, 0xf3, 0x91, 0x73, 0xa3, 0x3c, 0xd6, 0x3c, 0x67,
  0xb3, 0x8f, 0x17, 0xf9, 0xe5, 0xaa, 0xca, 0x58, 0x8b, 0xa3, 0xf8, 0x82,
  0x86, 0x15, 0xa0, 0x18, 0x5d, 0x95, 0xe4, 0x8d, 0x37, 0x02, 0x35, 0x9b,
  0x5f, 0x0c, 0x22, 0x9b, 0xcb, 0x37, 0x00, 0xd3, 0x27, 0xc6, 0x69, 0x4c,
  0x15, 0x1a, 0xac, 0xc8, 0x44, 0x91, 0x5d, 0x18, 0xa6, 0x92, 0xc0, 0x1d,
  0x9d, 0x4c, 0xe7, 0x69, 0xbe, 0x20, 0x52, 0x15, 0x77, 0xeb, 0x28, 0x76,
  0x35, 0x60, 0x64, 0xe0, 0xed, 0x09, 0xcc, 0xdf, 0xaa, 0x86, 0x74, 0x26,
  0x8a, 0x56, 0xed, 0x99, 0x8d, 0xcb, 0xab, 0x6c, 0xfa, 0x51, 0x19, 0x98,
  0xaa, 0x9d, 0x5d, 0x5a, 0x46, 0x9c, 0x81, 0x6c, 0x6c, 0xf3, 0xd4, 0xaa,
  0x3e, 0x1e, 0xed, 0xb5, 0xc8, 0xbd, 0xb8, 0x43, 0xa0, 0x20, 0xce, 0x43,
  0xce, 0x8d, 0xe2, 0x58, 0xf3, 0x9c, 0xcd, 0x2e, 0x5e, 0xe4, 0x97, 0xab,
  0x2a, 0x63, 0x0d, 0x8e, 0x62, 0x0b, 0x1a, 0x52, 0x80, 0x52, 0x74, 0x55,
  0x92, 0x27, 0xde, 0x08, 0xd3, 0x6c, 0x7e, 0x31, 0xe8, 0x0c, 0x47, 0xe6,
  0x0b, 0x51, 0x3f, 0xa6, 0x4f, 0x4c, 0xd3, 0x98, 0x29, 0x34, 0x58, 0x91,
  0x89, 0x12, 0xbb, 0x30, 0x0c, 0x25, 0x81, 0x2b, 0x3a, 0x99, 0xce, 0xd3,
  0x7c, 0x41, 0x64, 0x2a, 0xae, 0xd6, 0x51, 0xec, 0x5a, 0xc0, 0xc0, 0xc0,
  0xdb, 0x13, 0x98, 0xbe, 0x55, 0x0d, 0xc9, 0x4c, 0xa7, 0xaa, 0x9a, 0x33,
  0x1b, 0x96, 0x57, 0xd9, 0xf4, 0xa3, 0x32, 0x2f, 0x55, 0x39, 0xbb, 0x74,
  0x8c, 0x18, 0x03, 0xd9, 0xd7, 0xe6, 0xa9, 0x55, 0x8d, 0x6b, 0x52, 0xd7,
  0x39, 0xdc, 0x67, 0x30, 0x07, 0x57, 0x53, 0xb2, 0x12, 0xe9, 0xc2, 0x18,
  0xea, 0x56, 0x0e, 0x98, 0x18, 0x96, 0x5a, 0xcc, 0x86, 0x4d, 0x95, 0x2f,
  0xfb, 0x66, 0xc7, 0xa7, 0xd2, 0x56, 0x50, 0x6b, 0xb1, 0xd8, 0xc9, 0x18,
  0xc6, 0x55, 0xa9, 0xeb, 0x1c, 0x2e, 0x34, 0x98, 0x84, 0xab, 0x29, 0x59,
  0x8a, 0x74, 0x69, 0x0c, 0x85, 0x2b, 0x17, 0x4c, 0x0c, 0x5b, 0x2d, 0x66,
  0xc3, 0xa6, 0xca, 0x97, 0x7d, 0xb3, 0xe3, 0x53, 0x69, 0x2b, 0xa9, 0xb5,
  0x58, 0xed, 0x64, 0x10, 0x33, 0x01, 0x4f, 0x93, 0xce, 0x6e, 0x76, 0x86,
  0x66, 0xf3, 0x78, 0x9a, 0x74, 0x76, 0xb3, 0x4b, 0x94, 0xb4, 0xb7, 0x03,
  0xf8, 0x83, 0x72, 0xa3, 0x2f, 0xb0, 0xb1, 0x44, 0xee, 0x4e, 0x63, 0x1a,
  0x89, 0xe0, 0x32, 0x56, 0x5c, 0x3e, 0x25, 0x25, 0x28, 0xbf, 0xcc, 0x10,
  0xcb, 0x31, 0xb2, 0xac, 0x99, 0x1b, 0xd5, 0x28, 0xa4, 0x71, 0xf3, 0x9b,
  0xe3, 0xbd, 0x1d, 0xc0, 0x27, 0x94, 0x1b, 0x9d, 0x81, 0x0d, 0x26, 0x72,
  0x79, 0x1a, 0xf3, 0x48, 0x84, 0x97, 0xb1, 0xe4, 0xf2, 0x29, 0x29, 0x42,
  0xf9, 0x65, 0x86, 0x78, 0x8e, 0x91, 0x67, 0xcd, 0xdc, 0xa8, 0x47, 0x9e,
  0x64, 0xb4, 0x27, 0x5e, 0x64, 0x97, 0x65, 0x03, 0x8d, 0x24, 0x20, 0x93,
  0xf7, 0xc4, 0xeb, 0x2d, 0x4d, 0xa8, 0xea, 0xef, 0xeb, 0x65, 0x39, 0xeb,
  0xe4, 0xe6, 0xd3, 0xac, 0xfa, 0x8b, 0xd7, 0xa1, 0x6e, 0xcc, 0xcd, 0xea,
  0x9e, 0xba, 0x19, 0x6d, 0x9a, 0x91, 0xfd, 0x45, 0xca, 0xa3, 0xea, 0xae,
  0xaa, 0xf4, 0x83, 0x2d, 0x40, 0x4f, 0x6e, 0x6e, 0xf2, 0x69, 0xa6, 0x2e,
  0x39, 0xf1, 0x53, 0xcf, 0xf3, 0x90, 0xdd, 0x2f, 0x70, 0x27, 0xcd, 0x4b,
  0xac, 0x97, 0xc3, 0x83, 0x72, 0x93, 0x43, 0x6f, 0x17, 0xc6, 0x47, 0x6a,
  0x99, 0x88, 0x84, 0xb4, 0xca, 0xc9, 0x5d, 0x64, 0x86, 0x93, 0x79, 0x86,
  0x17, 0xde, 0x9b, 0x37, 0xbd, 0x2f, 0xa6, 0x8c, 0x33, 0x61, 0xe8, 0x72,
  0x5d, 0xa4, 0xf9, 0x3c, 0xb2, 0x4f, 0xc4, 0xcc, 0x2e, 0x33, 0xf2, 0xac,
  0xf1, 0x19, 0xac, 0xb0, 0xe9, 0x88, 0xbd, 0x85, 0x8c, 0x2a, 0xcb, 0xd8,
  0xa6, 0x20, 0x03, 0xe4, 0xf6, 0xce, 0x6e, 0x2f, 0x29, 0x6e, 0x7c, 0x76,
  0xf2, 0x77, 0x3e, 0x3e, 0xef, 0x7a, 0xa6, 0x18, 0x35, 0x5d, 0x22, 0xc8,
  0xd4, 0xbd, 0xa1, 0x30, 0xbf, 0x10, 0xa7, 0xdc, 0x56, 0x2f, 0x72, 0x26,
  0x3e, 0x74, 0x1b, 0xdf, 0x23, 0x86, 0x04, 0x9e, 0x26, 0x57, 0x98, 0xc7,
  0x11, 0x2e, 0xdc, 0xe5, 0xe7, 0x46, 0xc6, 0x1a, 0x91, 0x4c, 0x6c, 0xb4,
  0x45, 0xb1, 0xa5, 0x61, 0x5f, 0x36, 0xca, 0x04, 0xaf, 0xaf, 0xf0, 0x3a,
  0x32, 0xb6, 0xe8, 0xce, 0xc6, 0xf8, 0x39, 0xcc, 0x3f, 0xe8, 0xca, 0x2c,
  0x69, 0x06, 0x09, 0xeb, 0x76, 0xcc, 0xac, 0xa6, 0xec, 0x07, 0x16, 0x3d,
  0x82, 0xc5, 0x0d, 0x4d, 0xf5, 0x62, 0x9e, 0x5e, 0x92, 0x8b, 0xed, 0xb2,
  0xec, 0xb2, 0x6c, 0xa0, 0x8d, 0x04, 0x64, 0xf2, 0x9e, 0xf8, 0xbc, 0xa5,
  0x09, 0x55, 0xfb, 0x7d, 0x9d, 0x2c, 0x67, 0x7d, 0xdc, 0x7c, 0x9a, 0xd5,
  0x7e, 0xf1, 0x38, 0xd4, 0x8d, 0xb9, 0x59, 0xdd, 0x53, 0x37, 0xa3, 0x4d,
  0x33, 0xb2, 0xbd, 0x48, 0x71, 0x54, 0xbd, 0x55, 0x15, 0x7e, 0xb0, 0x04,
  0xe8, 0xc8, 0xcd, 0x4d, 0x3e, 0xcd, 0xd4, 0x1d, 0x27, 0x3e, 0xea, 0x79,
  0x1e, 0xb2, 0xfa, 0x05, 0xee, 0xa4, 0x79, 0x89, 0x75, 0x72, 0x78, 0x4f,
  0x6e, 0x72, 0xe8, 0xec, 0xc2, 0xf4, 0x48, 0x25, 0x13, 0x71, 0x90, 0x56,
  0x39, 0xb9, 0x8a, 0xcc, 0x70, 0x32, 0x4f, 0xcf, 0xa2, 0xf7, 0xef, 0x18,
  0xcf, 0x9b, 0xde, 0x17, 0x33, 0xc6, 0x99, 0x2f, 0x74, 0xb9, 0x2e, 0xd2,
  0x7c, 0x1e, 0xd9, 0x27, 0x62, 0x64, 0x97, 0x19, 0x79, 0xd5, 0xf8, 0x0c,
  0x56, 0xd8, 0x74, 0xc4, 0xdd, 0x42, 0x26, 0x95, 0x65, 0x6c, 0x4f, 0x90,
  0xf1, 0x71, 0x7b, 0x67, 0xb7, 0x97, 0x94, 0x36, 0x3e, 0x3b, 0xf9, 0x3b,
  0x1f, 0x9f, 0x77, 0x3d, 0x53, 0x8c, 0x9a, 0x2e, 0x11, 0x60, 0xea, 0xde,
  0x50, 0x98, 0x5e, 0x88, 0x51, 0x6e, 0xab, 0x07, 0x39, 0x13, 0xff, 0xb9,
  0x8d, 0xed, 0x11, 0x43, 0x02, 0x4f, 0x93, 0x2b, 0xcc, 0xe3, 0x08, 0x07,
  0xee, 0xf2, 0x72, 0x23, 0x5f, 0x8d, 0x38, 0x26, 0x1e, 0xda, 0xa2, 0xd8,
  0xd2, 0xb0, 0x2f, 0x1b, 0x61, 0x82, 0xc7, 0x57, 0x78, 0x1d, 0x19, 0x5a,
  0x74, 0x67, 0x63, 0xbc, 0x1c, 0xa6, 0x1f, 0xf4, 0x64, 0x96, 0x32, 0x83,
  0x84, 0xf5, 0x3a, 0x66, 0x56, 0x53, 0xf6, 0x01, 0x8b, 0x0e, 0xc1, 0xa2,
  0x86, 0xa6, 0x7a, 0x31, 0x4f, 0x2f, 0xc9, 0xbd, 0x76, 0xd9, 0xbd, 0xa1,
  0x45, 0x29, 0x81, 0xbe, 0xba, 0x34, 0xec, 0x1d, 0xab, 0x16, 0xd7, 0x56,
  0x9d, 0x6c, 0x19, 0x22, 0x9b, 0xaf, 0x48, 0xdc, 0x9f, 0x98, 0xe5, 0x8d,
  0xc7, 0xdf, 0x6c, 0xfb, 0xec, 0x8d, 0x76, 0xf7, 0x21, 0xcc, 0x0d, 0xdc,
  0x7b, 0x43, 0x8b, 0x52, 0x82, 0x7d, 0x75, 0x69, 0x38, 0x3c, 0x56, 0x2d,
  0xee, 0xad, 0x3a, 0xd9, 0x32, 0x44, 0x36, 0x5f, 0x91, 0xc8, 0x3f, 0x31,
  0xcb, 0x1b, 0x8f, 0xbf, 0xdd, 0xf6, 0xd9, 0x1b, 0xed, 0xee, 0x43, 0x98,
  0x1b, 0xb8, 0x13, 0x19, 0xe2, 0x5f, 0xf3, 0x79, 0xb4, 0x19, 0x9c, 0xb5,
  0xf0, 0x7c, 0x6d, 0x4e, 0xe9, 0x12, 0xab, 0x80, 0x3b, 0x74, 0x64, 0xaf,
  0x3e, 0x9e, 0x54, 0xaf, 0x2c, 0x13, 0x76, 0x4b, 0x49, 0x58, 0xd5, 0x2b,
  0x72, 0x50, 0x91, 0x4c, 0xee, 0x0e, 0x67, 0x98, 0xbd, 0x61, 0x45, 0xab,
  0x89, 0x8c, 0xf0, 0xaf, 0xf8, 0x3c, 0xda, 0x0c, 0xce, 0x5a, 0x77, 0xbe,
  0x26, 0xa7, 0x74, 0x89, 0x55, 0xc0, 0x15, 0x3a, 0xb2, 0x57, 0x1f, 0x4f,
  0xaa, 0x47, 0x96, 0x09, 0xbb, 0xa5, 0x20, 0xac, 0xea, 0x15, 0x39, 0xa7,
  0x48, 0x1e, 0x77, 0x87, 0x33, 0xcc, 0xde, 0xb0, 0xa2, 0x55, 0x81, 0x3f,
  0xad, 0x0e, 0x9d, 0x93, 0x35, 0x87, 0xb3, 0xa8, 0xe0, 0x02, 0x87, 0x1d,
  0x6c, 0x75, 0x50, 0xc3, 0x53, 0x74, 0x6c, 0xec, 0x65, 0xf7, 0x12, 0x1a,
  0x02, 0x7f, 0x5a, 0x3d, 0x3a, 0x27, 0x8b, 0x0e, 0x67, 0x51, 0xc1, 0x0d,
  0x0e, 0x5b, 0xd8, 0xea, 0xa1, 0x86, 0xa7, 0xe8, 0xd8, 0xd8, 0xcb, 0xee,
  0x25, 0x34, 0x5a, 0x1a, 0xb1, 0x1b, 0x23, 0x46, 0x8d, 0x70, 0xc6, 0x85,
  0xeb, 0xe1, 0xde, 0x5b, 0xf5, 0xca, 0xf0, 0x17, 0x98, 0x0f, 0xc2, 0x3c,
  0x40, 0x8f, 0xdd, 0xd9, 0x31, 0x7b, 0x31, 0x92, 0xc6, 0xe3, 0x23, 0xdb,
  0xbf, 0xf5, 0x05, 0xa1, 0x43, 0xf3, 0x4f, 0xd1, 0x88, 0xdf, 0xcc, 0x18,
  0x65, 0xa4, 0x96, 0x05, 0x1a, 0xd9, 0xf9, 0xf1, 0x38, 0x76, 0x98, 0xed,
  0x18, 0x15, 0xde, 0x07, 0xb3, 0x85, 0x2b, 0x91, 0x5d, 0xab, 0x25, 0x0c,
  0x03, 0x2f, 0x4e, 0xe5, 0xfb, 0xfc, 0x96, 0x19, 0x02, 0x5a, 0x6c, 0x33,
  0x0d, 0x8d, 0xd8, 0x8d, 0x11, 0xa1, 0x46, 0x30, 0xe3, 0xc2, 0xf5, 0x70,
  0xef, 0xad, 0x7a, 0x65, 0xf8, 0x0b, 0x4c, 0x07, 0x61, 0x1e, 0xa0, 0xc7,
  0xee, 0xec, 0x98, 0xbd, 0x18, 0x49, 0xe3, 0xf1, 0x91, 0xed, 0x5f, 0xfb,
  0x82, 0xd0, 0xa1, 0xf9, 0xa7, 0x68, 0xc4, 0x6f, 0x66, 0x0c, 0x32, 0x52,
  0xc9, 0x02, 0x6d, 0xec, 0xfc, 0x78, 0x1c, 0x3b, 0xcc, 0x76, 0x7c, 0x0a,
  0xef, 0x83, 0xd9, 0xc2, 0x8d, 0xc8, 0x6e, 0xd5, 0x12, 0x46, 0x81, 0x17,
  0xa3, 0xf2, 0xfd, 0x7d, 0xcb, 0x0c, 0xc1, 0x2c, 0xb6, 0x97, 0x39, 0xf8,
  0x0d, 0x06, 0x06, 0x61, 0x0d, 0xed, 0xc4, 0xba, 0x50, 0x5f, 0xbd, 0xf4,
  0xc7, 0x25, 0x9f, 0x69, 0xf7, 0x22, 0x78, 0xbf, 0xdf, 0xaa, 0xb7, 0x2d,
  0x0f, 0x33, 0xa3, 0x9c, 0x1e, 0xbe, 0x25, 0xfb, 0x35, 0x35, 0x74, 0xf3,
  0x73, 0x00, 0x1c, 0x0c, 0x0c, 0xc2, 0x1a, 0x1a, 0x8a, 0x75, 0xa3, 0xbe,
  0x7a, 0xe9, 0x8f, 0x4b, 0x7e, 0xd3, 0xee, 0x45, 0xf0, 0x7e, 0xbf, 0x55,
  0x4e, 0xdd, 0x95, 0x1a, 0xdb, 0x9e, 0xac, 0xf2, 0x79, 0x2b, 0x26, 0xe0,
  0x6f, 0x5b, 0x1e, 0x66, 0x46, 0x39, 0x3d, 0x7c, 0x4b, 0x36, 0x6c, 0x6a,
  0xe8, 0xe6, 0x9d, 0xba, 0x2c, 0x35, 0xbe, 0x3d, 0x59, 0xe5, 0xf3, 0x56,
  0x5c, 0xc0, 0x99, 0xdd, 0x14, 0x5c, 0x66, 0xd2, 0xa2, 0xa9, 0x71, 0x84,
  0x2b, 0x27, 0x17, 0x71, 0x97, 0xd0, 0x9a, 0xbb, 0xa5, 0x78, 0xb7, 0x57,
  0x75, 0xcb, 0x89, 0xa4, 0x72, 0x79, 0xde, 0x90, 0xa6, 0x0d, 0xdb, 0xd6,
  0x1b, 0x33, 0x38, 0x21, 0x9a, 0x16, 0xc4, 0xc0, 0x65, 0x91, 0xff, 0x4d,
  0xf4, 0xd0, 0xac, 0xb8, 0xce, 0xab, 0xb2, 0x80, 0xa6, 0x6b, 0xcc, 0xdf,
  0x2a, 0x27, 0xb6, 0x0c, 0x0d, 0xcc, 0x30, 0x8e, 0xcd, 0x57, 0xef, 0xcf,
  0x8e, 0x3f, 0xbc, 0x7a, 0xf9, 0xe1, 0xeb, 0xf7, 0xef, 0x5e, 0x1f, 0x1f,
  0x6e, 0x76, 0x86, 0x83, 0xdf, 0x2f, 0x17, 0x67, 0x7d, 0x0d, 0xeb, 0x83,
  0x2e, 0x89, 0x99, 0x22, 0x8f, 0x7c, 0x99, 0x5f, 0x1b, 0x86, 0x46, 0xc6,
  0x04, 0xf9, 0xe9, 0xe9, 0x6f, 0xe4, 0xd9, 0x92, 0x0d, 0xef, 0x0c, 0x37,
  0x59, 0x41, 0x4f, 0x1b, 0xb5, 0x34, 0x66, 0xbd, 0x2a, 0x62, 0xb9, 0xeb,
  0x4c, 0x6e, 0x0a, 0x2c, 0x33, 0x69, 0xd1, 0xd4, 0x38, 0xba, 0x95, 0x93,
  0x7b, 0xb8, 0x4b, 0x68, 0xcd, 0xdd, 0x52, 0x3c, 0xdb, 0xab, 0xba, 0xe5,
  0x40, 0x52, 0xb9, 0x3c, 0x6f, 0x48, 0xcb, 0x86, 0x5d, 0xeb, 0x8d, 0x19,
  0x9c, 0x10, 0x4d, 0x0b, 0x62, 0xe0, 0xb2, 0xc8, 0xff, 0x26, 0x3a, 0x68,
  0x56, 0x5c, 0xe7, 0x55, 0x59, 0x40, 0xcb, 0x35, 0xa6, 0x6f, 0x95, 0x13,
  0x5b, 0x86, 0xfa, 0x65, 0x18, 0xc7, 0xe6, 0xab, 0xf7, 0x67, 0xc7, 0x1f,
  0x5e, 0xbd, 0xfc, 0xf0, 0xd5, 0xfb, 0x77, 0xaf, 0x8f, 0x0f, 0x37, 0x3b,
  0xc3, 0xc1, 0xe7, 0x97, 0x8b, 0xa3, 0xbe, 0x86, 0xe5, 0x41, 0x97, 0xc4,
  0x4c, 0x91, 0x47, 0xbe, 0xcc, 0xaf, 0x0d, 0x43, 0x23, 0x43, 0x82, 0x7c,
  0xf4, 0xf4, 0x37, 0xf2, 0x6a, 0xc9, 0x86, 0x77, 0x86, 0x9b, 0xac, 0xa0,
  0xa7, 0x8d, 0x5a, 0xda, 0xb2, 0x5e, 0x15, 0xb1, 0xda, 0x75, 0x82, 0x11,
  0x0d, 0x1b, 0x5a, 0x54, 0x31, 0x83, 0xf9, 0xe2, 0x19, 0x89, 0x9e, 0xbb,
  0x7e, 0xd5, 0x18, 0x2b, 0x49, 0x03, 0x04, 0x46, 0x6b, 0x2b, 0x3f, 0x6a,
  0x04, 0x23, 0x5a, 0x36, 0xb4, 0xa8, 0x62, 0x06, 0x13, 0xc6, 0x33, 0x14,
  0x3d, 0x97, 0xfd, 0xaa, 0x31, 0x96, 0x92, 0x06, 0x09, 0x8c, 0xd6, 0x56,
  0x7e, 0xd4, 0x4c, 0x03, 0x63, 0x66, 0xbd, 0x8c, 0x1c, 0x77, 0xed, 0x94,
  0xd1, 0x59, 0xb2, 0x89, 0x91, 0x0c, 0xfd, 0x0e, 0x65, 0x92, 0xd3, 0xaa,
  0x31, 0x36, 0x4e, 0x96, 0xd3, 0xc5, 0xd0, 0x48, 0x2a, 0xd4, 0x56, 0x72,
  0xd0, 0x05, 0x5a, 0xb6, 0xd1, 0x35, 0xb1, 0x07, 0xa4, 0xe1, 0x67, 0xb7,
  0x19, 0xdd, 0x3c, 0x79, 0xeb, 0xd5, 0xaa, 0xa2, 0xdb, 0xfc, 0x83, 0xd1,
  0x46, 0xc0, 0xfd, 0x5e, 0x93, 0x87, 0xcf, 0xbc, 0xa0, 0x0f, 0x19, 0x31,
  0xd3, 0x15, 0x79, 0xe5, 0x1c, 0xb1, 0xd5, 0x94, 0xbc, 0x29, 0xe4, 0xfb,
  0x96, 0x81, 0x31, 0xb1, 0x5e, 0x46, 0x8e, 0xbb, 0x76, 0x9a, 0xe8, 0x2c,
  0xd9, 0xc4, 0x48, 0x86, 0x7e, 0x87, 0x32, 0xc9, 0x69, 0xd5, 0x18, 0xfb,
  0x26, 0xcb, 0xe9, 0x62, 0x68, 0x14, 0x15, 0x3a, 0x2b, 0x39, 0xe7, 0x02,
  0x0d, 0xdb, 0xe8, 0x9a, 0xd8, 0x03, 0xd2, 0xee, 0xb3, 0xdb, 0x8c, 0x6e,
  0x9e, 0xbc, 0xf5, 0x6a, 0x55, 0xd1, 0x6d, 0xfe, 0xde, 0x68, 0x23, 0xe0,
  0x7e, 0xaf, 0xc9, 0xbb, 0x67, 0x5e, 0xd0, 0x87, 0x8c, 0x98, 0xe9, 0x8a,
  0xbc, 0x72, 0x8e, 0xb8, 0x6a, 0x4a, 0x9e, 0x14, 0xf2, 0x7b, 0x9d, 0xbe,
  0x3c, 0xff, 0x26, 0xaa, 0xcc, 0xba, 0x94, 0x1e, 0x21, 0x45, 0x52, 0xcc,
  0xeb, 0x46, 0x2e, 0xc8, 0xbb, 0xf1, 0x38, 0xa1, 0x84, 0x91, 0x79, 0x3e,
  0x3a, 0x7d, 0x79, 0xfe, 0x6d, 0x54, 0x99, 0x75, 0x69, 0x3d, 0x42, 0x8a,
  0xa4, 0x9c, 0xd7, 0x8d, 0x5c, 0x90, 0x77, 0xe3, 0x71, 0x42, 0x49, 0x23,
  0xf3, 0x7c, 0x52, 0xa5, 0xf8, 0x26, 0x7e, 0x8c, 0x9f, 0x1a, 0xb2, 0xee,
  0x0c, 0x77, 0xfa, 0xdd, 0xab, 0xf1, 0xef, 0xf6, 0xf6, 0xa0, 0xc9, 0xaf,
  0xcc, 0xbe, 0x6c, 0x99, 0x57, 0x8a, 0xda, 0xdc, 0xcc, 0xc5, 0xa8, 0x2e,
  0xb7, 0x49, 0x6c, 0xd7, 0xa2, 0x0e, 0xa4, 0xd7, 0x46, 0xda, 0x12, 0x1d,
  0x29, 0x51, 0x9b, 0xe3, 0x0c, 0xf6, 0x84, 0x18, 0x9d, 0x64, 0xd4, 0x18,
  0x7e, 0x61, 0xe4, 0xf5, 0x3c, 0x54, 0xc8, 0xb7, 0xf2, 0x93, 0xb1, 0x2a,
  0xf5, 0x53, 0xf3, 0x57, 0x38, 0x0b, 0xb6, 0xb1, 0xb2, 0xf6, 0x0d, 0xd3,
  0x55, 0x8d, 0x59, 0x1b, 0x3d, 0x87, 0x09, 0x43, 0x69, 0x34, 0x21, 0x57,
  0x28, 0xba, 0x97, 0xcb, 0xa5, 0x2a, 0x11, 0x39, 0x4c, 0xd2, 0xe9, 0xc7,
  0x9b, 0xb4, 0x9a, 0xb1, 0x4d, 0x64, 0x28, 0x66, 0x92, 0xcf, 0xf3, 0xe6,
  0x8e, 0x6d, 0xdb, 0xae, 0x5d, 0xcd, 0x31, 0x52, 0x6c, 0xa0, 0xb9, 0x47,
  0x97, 0xc6, 0xec, 0x87, 0xf6, 0x09, 0x15, 0x3f, 0x6f, 0x7c, 0xb3, 0x96,
  0xa9, 0x52, 0x7c, 0x13, 0x3f, 0xc6, 0x4f, 0x0d, 0x59, 0x77, 0x86, 0x3b,
  0xfd, 0xf6, 0xd5, 0xf8, 0xb7, 0x7b, 0x7b, 0xd0, 0xe2, 0x57, 0x66, 0x5f,
  0xb6, 0xcc, 0x2b, 0x45, 0x6d, 0x6e, 0xe6, 0x62, 0x54, 0x97, 0xdb, 0x24,
  0xb6, 0x6b, 0x51, 0x07, 0xd2, 0x6b, 0x23, 0x6d, 0x89, 0x8e, 0x94, 0xa8,
  0xcd, 0x71, 0x06, 0x7b, 0x42, 0x8c, 0x4e, 0xb2, 0x69, 0x0c, 0xbf, 0x30,
  0xf2, 0x7a, 0x1e, 0x2a, 0xe4, 0x5b, 0xf9, 0xc9, 0x58, 0x72, 0x51, 0xd2,
  0xa9, 0xf9, 0x2b, 0x1c, 0x05, 0xdb, 0x58, 0x59, 0xfb, 0x86, 0xe9, 0xaa,
  0xc6, 0xac, 0x8d, 0x9e, 0xc3, 0x7c, 0xa1, 0x14, 0x9a, 0x90, 0x2b, 0x14,
  0xdd, 0xcb, 0xe5, 0xd2, 0x94, 0x88, 0x1c, 0x26, 0xe9, 0xf4, 0xe3, 0x4d,
  0x5a, 0xcd, 0xd8, 0x1e, 0x32, 0x14, 0x33, 0xc9, 0xe7, 0x79, 0x73, 0xc7,
  0x76, 0x6d, 0xd7, 0xa6, 0xe6, 0xf8, 0x28, 0x36, 0xd0, 0xdc, 0xa3, 0x4b,
  0x63, 0xf2, 0x43, 0xfb, 0x84, 0x8a, 0x9f, 0x37, 0xbe, 0x49, 0x4b, 0x2a,
  0x52, 0x63, 0x55, 0x1c, 0xfb, 0xed, 0x40, 0x3c, 0x36, 0x7c, 0x8f, 0x68,
  0x9a, 0x8e, 0x76, 0x95, 0x0d, 0xfa, 0x4c, 0x4a, 0xc9, 0x27, 0xa9, 0xef,
  0x54, 0xa4, 0xc6, 0xaa, 0x38, 0xf6, 0xdb, 0x81, 0x78, 0x6c, 0xf8, 0x1e,
  0xd1, 0x34, 0x1d, 0xed, 0x2a, 0x1b, 0xf4, 0x99, 0x94, 0x92, 0x4f, 0x52,
  0xdf, 0x19, 0x29, 0xbf, 0x48, 0x22, 0x2a, 0x22, 0x65, 0x10, 0x25, 0xdf,
  0x65, 0x77, 0xc6, 0x86, 0xce, 0x0b, 0xc7, 0x29, 0xd9, 0xc6, 0xcf, 0x60,
  0xe1, 0xb1, 0x2e, 0x9a, 0xab, 0x43, 0x3d, 0x93, 0x98, 0x08, 0x4b, 0x92,
  0xd0, 0x89, 0xc0, 0xef, 0xab, 0x1e, 0x8e, 0x21, 0x36, 0xeb, 0x16, 0x4b,
  0xa6, 0x2f, 0x85, 0x87, 0x38, 0x36, 0x3f, 0x2f, 0x8a, 0x6c, 0x2e, 0xc7,
  0x77, 0xbe, 0xee, 0x00, 0xec, 0xb3, 0x66, 0xca, 0x3f, 0xf0, 0x8d, 0xee,
  0x0c, 0xf7, 0x8c, 0x03, 0xfc, 0x69, 0xa3, 0x32, 0x49, 0x33, 0x87, 0x8c,
  0x8c, 0x94, 0x5f, 0x24, 0x11, 0x15, 0x91, 0xb2, 0x87, 0x92, 0x6f, 0xb3,
  0x3b, 0x63, 0x3f, 0xe7, 0x85, 0xe3, 0x94, 0x6c, 0xdf, 0x67, 0xb0, 0xee,
  0x58, 0x17, 0xcd, 0xd5, 0x99, 0x9e, 0x49, 0x3c, 0x84, 0x25, 0x49, 0xe8,
  0x40, 0xe0, 0xf7, 0x55, 0x0f, 0xc7, 0x10, 0x9b, 0x75, 0x8b, 0x25, 0xd3,
  0x97, 0xc2, 0x43, 0x1c, 0x9b, 0x9f, 0x17, 0x45, 0x36, 0x97, 0xe3, 0x3b,
  0x5f, 0x77, 0x00, 0xf6, 0x59, 0x33, 0xe5, 0xef, 0xf9, 0x46, 0x77, 0x86,
  0x7b, 0xc6, 0xc1, 0xfd, 0xb4, 0x51, 0x99, 0xa4, 0x59, 0x43, 0xc6, 0x2a,
  0xda, 0xb5, 0xbf, 0x1a, 0xf5, 0x7e, 0x26, 0xb8, 0x4d, 0x95, 0x3b, 0xf4,
  0xf6, 0x99, 0xb3, 0x53, 0x94, 0x0e, 0x19, 0x67, 0x2c, 0x47, 0xfc, 0x07,
  0x55, 0xb4, 0x6b, 0x7f, 0x35, 0xea, 0xfd, 0x4c, 0x70, 0x9b, 0x2a, 0x77,
  0xe8, 0xed, 0x33, 0x67, 0xc7, 0x28, 0x1d, 0x32, 0xce, 0x58, 0x8e, 0xf8,
  0x0b, 0xab, 0x59, 0x51, 0x10, 0xa3, 0x33, 0x9c, 0xaf, 0x65, 0xab, 0x0c,
  0x93, 0x75, 0x6c, 0x1a, 0x3d, 0xb5, 0xac, 0xc8, 0x67, 0x54, 0x95, 0xe6,
  0xac, 0x5b, 0xe7, 0xb9, 0xc5, 0xca, 0x46, 0xf7, 0x9a, 0x08, 0x37, 0xf7,
  0x36, 0x66, 0x3b, 0x76, 0xd1, 0x03, 0xcd, 0x24, 0x34, 0x59, 0x7b, 0x2d,
  0xce, 0xb6, 0x84, 0x26, 0x2e, 0xfd, 0xc2, 0xb0, 0xb1, 0x7f, 0x5e, 0x40,
  0x33, 0x33, 0x24, 0xe6, 0x17, 0xca, 0x2c, 0xa1, 0xc5, 0x96, 0xa0, 0x7e,
  0xab, 0x12, 0x19, 0x93, 0xb0, 0x6e, 0xd8, 0x25, 0x27, 0x0d, 0xb0, 0xe2,
  0xc8, 0xfe, 0xe4, 0xd0, 0x0c, 0x80, 0x4b, 0x50, 0xdc, 0x8e, 0x07, 0x1b,
  0xc9, 0x56, 0x36, 0xba, 0x34, 0xe3, 0x6d, 0x60, 0x9c, 0xbd, 0x03, 0xfc,
  0x77, 0x9f, 0xfe, 0xfb, 0x68, 0x43, 0xd3, 0xfb, 0xfc, 0xad, 0x87, 0x34,
  0xef, 0xca, 0x22, 0x8e, 0xc9, 0x39, 0xe1, 0x3e, 0x60, 0x3f, 0x73, 0x1f,
  0xe3, 0x61, 0x9d, 0xf5, 0x98, 0x77, 0x39, 0x54, 0xb7, 0x74, 0x1b, 0x16,
  0xec, 0x8f, 0xb8, 0xce, 0xd8, 0x29, 0x62, 0x56, 0x36, 0x35, 0xea, 0x21,
  0xb9, 0x12, 0xf5, 0x56, 0x4d, 0x3f, 0x54, 0xd9, 0x55, 0x5a, 0x5f, 0x25,
  0xab, 0x86, 0x89, 0xd0, 0xd0, 0x6d, 0x77, 0xb8, 0xe5, 0x3c, 0x77, 0xde,
  0x36, 0xf9, 0xf4, 0x48, 0xed, 0x3e, 0x77, 0x8a, 0x1c, 0x05, 0x99, 0x97,
  0x37, 0xfa, 0xcc, 0x50, 0xf2, 0xed, 0x62, 0x6a, 0x81, 0x39, 0x4d, 0xf2,
  0x9b, 0xe0, 0x31, 0x3f, 0x9a, 0xbd, 0x80, 0x36, 0x89, 0x64, 0x40, 0xc3,
  0xe2, 0x2e, 0xcc, 0x8e, 0xc1, 0xa2, 0x9b, 0xd3, 0xb9, 0xc1, 0x76, 0xa5,
  0x79, 0x07, 0xa6, 0xa9, 0xe8, 0x79, 0xf9, 0x85, 0x78, 0x70, 0xe5, 0xdf,
  0x24, 0x4f, 0x45, 0xfb, 0xaa, 0x39, 0xe2, 0xdd, 0x55, 0xbd, 0xee, 0x27,
  0x6d, 0x65, 0x90, 0x56, 0xd3, 0x91, 0xc5, 0x72, 0xd0, 0x44, 0xe9, 0x3a,
  0xbf, 0x24, 0x5b, 0x23, 0xe6, 0xc0, 0x60, 0xc7, 0xd4, 0x3f, 0x75, 0x49,
  0xcc, 0x8c, 0x87, 0xf0, 0x99, 0xae, 0xea, 0x07, 0xdc, 0x11, 0x8f, 0xe9,
  0xf2, 0x3b, 0xd6, 0x67, 0xcc, 0x91, 0x7d, 0x7f, 0x03, 0xba, 0x54, 0x78,
  0xe7, 0x11, 0xc6, 0x2b, 0xef, 0x66, 0x8d, 0x79, 0xa0, 0x33, 0x71, 0x91,
  0x6c, 0xa5, 0x1f, 0xd3, 0x51, 0x72, 0xf2, 0x6a, 0x7c, 0x8a, 0x4f, 0x18,
  0xea, 0x28, 0x2e, 0xcd, 0x2c, 0x8e, 0xc7, 0x9d, 0xe1, 0xb2, 0xdb, 0x26,
  0x2b, 0xea, 0x98, 0x93, 0x32, 0xdc, 0x66, 0x8d, 0x24, 0x68, 0x8a, 0x8d,
  0x4c, 0xd6, 0x58, 0xfa, 0x14, 0x1b, 0x47, 0xa8, 0x17, 0x79, 0x18, 0x09,
  0x5f, 0xb5, 0xe0, 0x43, 0x4b, 0x73, 0xf3, 0x67, 0xdb, 0xd6, 0x55, 0x33,
  0x50, 0x5a, 0xb0, 0x21, 0xc3, 0x7a, 0x75, 0x09, 0x1b, 0xa4, 0x56, 0xbb,
  0xd1, 0x7e, 0xc1, 0xec, 0x46, 0xa8, 0x2a, 0xc8, 0xb2, 0xad, 0x37, 0xd1,
  0x58, 0x4d, 0xc8, 0xa6, 0x22, 0x15, 0xa9, 0x28, 0xdd, 0xa8, 0xc8, 0xa8,
  0xa0, 0xcc, 0xd1, 0x9c, 0x82, 0x6c, 0xd3, 0xcc, 0xa8, 0xa0, 0xb3, 0x88,
  0x12, 0xc0, 0x87, 0xa2, 0x86, 0xd3, 0x85, 0x64, 0x8b, 0x46, 0xfc, 0x3f,
  0x34, 0xd0, 0x94, 0x55, 0x34, 0x50, 0x3d, 0x05, 0x2b, 0x72, 0xf8, 0x4a,
  0xa1, 0x30, 0xb3, 0xa9, 0x8e, 0xf1, 0xec, 0xfd, 0xff, 0xa6, 0x58, 0x99,
  0x8d, 0x8f, 0x48, 0x63, 0x28, 0x55, 0x10, 0x33, 0xd8, 0xc0, 0x75, 0x8e,
  0xbd, 0xc7, 0x7b, 0x6d, 0x5f, 0x36, 0x11, 0x9b, 0x31, 0x00, 0xb2, 0xe4,
  0x05, 0xfe, 0x7b, 0x2f, 0x57, 0xa6, 0xf4, 0x15, 0x7a, 0x5e, 0x62, 0x9e,
  0xcc, 0x3b, 0xc5, 0x17, 0x93, 0xb4, 0x19, 0x74, 0x20, 0xbd, 0x88, 0xdc,
  0x46, 0xe0, 0x7b, 0x83, 0xe4, 0x35, 0x92, 0xb2, 0x0f, 0xdf, 0x7d, 0x43,
  0x34, 0x70, 0xba, 0xb7, 0x4f, 0x11, 0x26, 0x6b, 0x3d, 0xcc, 0xe8, 0x23,
  0x35, 0x3b, 0x12, 0x38, 0x42, 0x1c, 0x2a, 0xbe, 0x24, 0x13, 0x06, 0xc4,
  0x46, 0x11, 0x1a, 0xa4, 0x0c, 0xa2, 0xd9, 0xa7, 0x93, 0x5f, 0x81, 0x21,
  0x7a, 0x38, 0x90, 0x1d, 0x14, 0xc7, 0xcc, 0xc7, 0xec, 0xce, 0xfd, 0x8d,
  0x76, 0xd5, 0xdb, 0x6a, 0xf7, 0xf0, 0x0b, 0x6f, 0x93, 0xfe, 0x7c, 0x80,
  0x2c, 0x25, 0xa3, 0xa5, 0xce, 0x7e, 0xfe, 0x75, 0x12, 0x31, 0xbe, 0xf3,
  0x11, 0x67, 0x0b, 0xf9, 0xb9, 0x34, 0x1f, 0x88, 0xc3, 0xff, 0xcc, 0xe2,
  0x25, 0x25, 0x1e, 0xd9, 0xf2, 0x20, 0xf8, 0xb4, 0xb0, 0x2a, 0xc9, 0x90,
  0x93, 0xc0, 0x28, 0x29, 0xac, 0xbb, 0xf7, 0xd3, 0x72, 0x1e, 0xc8, 0xba,
  0x96, 0xe1, 0x4a, 0xfa, 0xfc, 0xbe, 0xc8, 0x37, 0x32, 0xe6, 0x98, 0xd9,
  0x88, 0x16, 0xdd, 0xbd, 0x0e, 0x56, 0xa7, 0x26, 0xf5, 0xcb, 0x49, 0x46,
  0xbc, 0xc9, 0x2f, 0x52, 0xa8, 0x9b, 0xa6, 0xc6, 0x9a, 0xd2, 0x28, 0x71,
  0x1a, 0x6f, 0x4c, 0xfd, 0x37, 0x67, 0xab, 0x7b, 0x6b, 0x0e, 0x1d, 0x7e,
  0x26, 0xbb, 0x6b, 0x03, 0xdf, 0xd3, 0x64, 0x98, 0x5c, 0x95, 0xab, 0x7e,
  0x2e, 0x09, 0xa5, 0x61, 0x1c, 0x83, 0xb3, 0x0e, 0xc4, 0x1b, 0x25, 0xd9,
  0x55, 0x2d, 0x5f, 0x3e, 0x93, 0x1f, 0x2c, 0xd1, 0x0d, 0x6f, 0x4b, 0x36,
  0x62, 0x47, 0xd1, 0x70, 0x00, 0x54, 0xae, 0x50, 0x7e, 0x8d, 0xad, 0x53,
  0xda, 0x71, 0x8e, 0xcd, 0xb6, 0xea, 0x5b, 0x16, 0xf8, 0xb3, 0x80, 0x4f,
  0xec, 0xdf, 0x22, 0x04, 0x19, 0xa5, 0x45, 0xf8, 0xc6, 0x25, 0x38, 0x4c,
  0x0a, 0x0c, 0x12, 0x21, 0x25, 0x13, 0x7d, 0x7e, 0xf7, 0x20, 0x83, 0x4e,
  0x15, 0x10, 0xb5, 0xdb, 0x3c, 0x63, 0x2e, 0xb0, 0x76, 0xba, 0x04, 0x62,
  0xd8, 0x78, 0x83, 0xb4, 0x12, 0xa6, 0x5d, 0xf8, 0x5e, 0xf3, 0xe9, 0x47,
  0xab, 0x59, 0x51, 0x00, 0xa3, 0x33, 0x9c, 0xaf, 0x65, 0xab, 0x0c, 0x93,
  0x75, 0x6c, 0x1a, 0x3d, 0xb5, 0xac, 0xc8, 0x5f, 0x54, 0x95, 0xe6, 0xac,
  0x5b, 0xe7, 0xb9, 0xc5, 0xca, 0x46, 0xf7, 0x9a, 0x08, 0x37, 0xf7, 0x36,
  0x66, 0x3b, 0x76, 0xd1, 0x03, 0xcd, 0x24, 0x34, 0x59, 0x7b, 0x2d, 0xce,
  0xb6, 0x84, 0x26, 0x2e, 0xfd, 0xc2, 0xb0, 0xb1, 0x7f, 0x5e, 0x40, 0x33,
  0x33, 0x24, 0xe6, 0x17, 0xca, 0x2c, 0xa1, 0xc5, 0x96, 0xa0, 0x7e, 0xab,
  0x12, 0x19, 0x93, 0xb0, 0x2e, 0xd8, 0x25, 0x27, 0x0c, 0xb0, 0xe2, 0xc8,
  0xbe, 0xe4, 0xd0, 0x0c, 0x80, 0x3b, 0x50, 0x5c, 0x8e, 0x07, 0x1b, 0xc9,
  0x56, 0x36, 0xba, 0x34, 0xe3, 0x6d, 0x60, 0x9c, 0xbd, 0x03, 0xfc, 0x77,
  0x9f, 0xfe, 0xfb, 0x68, 0x43, 0x53, 0xfb, 0xfc, 0xad, 0x87, 0x34, 0xef,
  0xca, 0x22, 0x8e, 0xc7, 0x39, 0xe1, 0x3e, 0x60, 0x1f, 0x73, 0x1f, 0xe3,
  0x61, 0x9d, 0xf5, 0x98, 0x77, 0x39, 0x54, 0xb7, 0x74, 0x1b, 0x16, 0xec,
  0x8f, 0xb8, 0xce, 0xd8, 0x21, 0x62, 0x56, 0x36, 0x35, 0xea, 0x21, 0xb9,
  0x11, 0xf5, 0x56, 0x4d, 0x3f, 0x54, 0xd9, 0x55, 0x5a, 0x5f, 0x25, 0xab,
  0x86, 0x89, 0xd0, 0xd0, 0x6d, 0x77, 0xb8, 0xe5, 0x3c, 0x77, 0x9e, 0x36,
  0xf9, 0xf4, 0x48, 0xed, 0x3e, 0x77, 0x8a, 0x1c, 0x01, 0x99, 0x97, 0x37,
  0xfa, 0xcc, 0x50, 0x72, 0xed, 0x62, 0x6a, 0x81, 0x39, 0x4d, 0xf2, 0x9b,
  0xe0, 0x31, 0x3f, 0x92, 0xbd, 0x80, 0x36, 0x89, 0x44, 0x40, 0xc3, 0xe2,
  0x2e, 0xcc, 0x8e, 0xc1, 0xa2, 0x9b, 0xd3, 0xb9, 0xc1, 0x76, 0xa5, 0x79,
  0x07, 0xa6, 0xa9, 0xe8, 0x79, 0xf9, 0x85, 0x78, 0x6f, 0xe5, 0xdf, 0x24,
  0x4f, 0x45, 0xfb, 0xaa, 0x39, 0xda, 0xdd, 0x55, 0xbd, 0xee, 0x27, 0x6d,
  0x65, 0x90, 0x56, 0xd3, 0x91, 0xc5, 0x72, 0xc0, 0x44, 0xe9, 0x3a, 0xbf,
  0x24, 0x5b, 0x23, 0xe6, 0xc0, 0x60, 0xa7, 0xd4, 0x3f, 0x75, 0x49, 0xcc,
  0x8c, 0x87, 0xf0, 0x97, 0xae, 0xea, 0x07, 0xdc, 0x11, 0x8f, 0xe9, 0xf2,
  0x3b, 0xd6, 0x5f, 0xcc, 0x51, 0x7d, 0x7f, 0x03, 0xba, 0x54, 0x78, 0xe7,
  0x11, 0xc6, 0x2b, 0xef, 0x66, 0x8d, 0x79, 0xa0, 0x33, 0x71, 0x91, 0x6c,
  0xa5, 0x1f, 0xd3, 0x51, 0x72, 0xf2, 0x6a, 0x7c, 0x8a, 0x4f, 0x18, 0xea,
  0x28, 0x2e, 0xcd, 0x2c, 0x8e, 0xc7, 0x9d, 0xe1, 0xb2, 0xdb, 0x26, 0x2b,
  0xea, 0x98, 0x83, 0x32, 0xdc, 0x66, 0x8d, 0x22, 0x68, 0x7a, 0x8d, 0x4c,
  0xd6, 0x58, 0xfa, 0x14, 0x17, 0x47, 0x98, 0x17, 0x39, 0x18, 0x09, 0x5f,
  0xb5, 0xe0, 0x43, 0x4b, 0x73, 0xf3, 0x67, 0xdb, 0xd6, 0x55, 0x33, 0x50,
  0x5a, 0xb0, 0xe1, 0xc2, 0x7a, 0x75, 0x09, 0x1b, 0xa4, 0x56, 0xbb, 0xd1,
  0x7e, 0xc1, 0xec, 0x46, 0xa8, 0x2a, 0xc8, 0xb2, 0xad, 0x27, 0xd1, 0x58,
  0x4d, 0xc8, 0xa4, 0x22, 0x15, 0xa9, 0x28, 0xdd, 0xa8, 0xc8, 0xa6, 0xa0,
  0xac, 0xd1, 0x9c, 0x02, 0x6c, 0xd3, 0xcc, 0xa8, 0xa0, 0xb3, 0x88, 0x12,
  0xc0, 0x87, 0xa2, 0x86, 0xd3, 0x85, 0x64, 0x8a, 0x46, 0xfc, 0x3f, 0x34,
  0xd0, 0x94, 0x55, 0x34, 0x50, 0x3d, 0x05, 0x2a, 0x72, 0xf8, 0x49, 0xa1,
  0x30, 0xb3, 0xa9, 0x8e, 0xf1, 0xec, 0xfd, 0xff, 0xba, 0x58, 0x99, 0x8d,
  0x8f, 0x48, 0x63, 0x28, 0x55, 0x10, 0x33, 0xd8, 0xc0, 0x75, 0x8e, 0xbd,
  0xc7, 0x7b, 0x6d, 0x3f, 0x36, 0x11, 0x9b, 0x31, 0x00, 0xb2, 0xe4, 0x05,
  0xfe, 0x7b, 0x2f, 0x57, 0xa6, 0xd4, 0x15, 0x7a, 0x5e, 0xe2, 0x9d, 0xcc,
  0x3b, 0xc5, 0x17, 0x93, 0xb4, 0x19, 0x74, 0x20, 0xbd, 0x88, 0xdc, 0x46,
  0xe0, 0x7b, 0x83, 0xe4, 0x35, 0x12, 0xb2, 0x0f, 0xdf, 0x7d, 0x4d, 0x34,
  0x70, 0xba, 0xb7, 0x4f, 0xd1, 0x25, 0x6b, 0x3d, 0xcc, 0xe8, 0x23, 0x35,
  0x3b, 0x12, 0x38, 0x3a, 0x1c, 0x2a, 0xbe, 0x24, 0x13, 0x06, 0xc4, 0x46,
  0x11, 0x16, 0xa4, 0xec, 0xa1, 0xd9, 0xa7, 0x93, 0x5f, 0x81, 0x21, 0x7a,
  0x38, 0x90, 0x1d, 0x14, 0xc7, 0xcc, 0xc7, 0xec, 0xce, 0xfd, 0x8d, 0x76,
  0xd5, 0xdb, 0x6a, 0xf7, 0xf0, 0x0b, 0x6f, 0x93, 0xfe, 0x7c, 0x80, 0x0c,
  0x25, 0xa3, 0xa5, 0xce, 0x7e, 0xfa, 0x65, 0x12, 0x31, 0xbe, 0xf3, 0x11,
  0x67, 0x0b, 0xf9, 0xb9, 0x34, 0x17, 0x88, 0x43, 0xff, 0xcc, 0xe2, 0x25,
  0x1d, 0x1e, 0x99, 0xf2, 0x20, 0xf8, 0xb4, 0xb0, 0x2a, 0xc9, 0x90, 0x13,
  0xc0, 0x28, 0x21, 0xac, 0xbb, 0xf7, 0xd3, 0x72, 0x1e, 0xc8, 0xba, 0x96,
  0xe1, 0x4a, 0xfa, 0xfc, 0xbe, 0xc8, 0x37, 0x32, 0xe6, 0x98, 0xd9, 0x88,
  0x16, 0xdd, 0xbd, 0x0e, 0x56, 0xa7, 0x26, 0xf5, 0xcb, 0x49, 0x46, 0xbc,
  0xc9, 0x2f, 0x52, 0x98, 0x9b, 0xa6, 0xc6, 0x9a, 0xd2, 0x28, 0x71, 0x1a,
  0x6f, 0x4c, 0xfd, 0x37, 0x67, 0xab, 0x7b, 0x6b, 0x0e, 0x1d, 0x7e, 0x26,
  0xbb, 0x6b, 0x03, 0xdf, 0xd3, 0x64, 0x98, 0x5c, 0x95, 0xab, 0x7e, 0x2e,
  0xc9, 0xa4, 0x61, 0x0c, 0x83, 0x33, 0x0e, 0xc4, 0x1b, 0x25, 0x99, 0x55,
  0x2d, 0x5f, 0x3e, 0x93, 0x1f, 0x2c, 0xd1, 0x0d, 0x6f, 0x4b, 0x36, 0x62,
  0x47, 0xd1, 0x70, 0xf0, 0x53, 0xae, 0x50, 0x7e, 0x8d, 0xad, 0x53, 0xda,
  0x71, 0x8e, 0xcd, 0xb6, 0xea, 0x5b, 0x16, 0xf8, 0xb3, 0x80, 0x4f, 0xec,
  0x37, 0x11, 0x82, 0x8c, 0xd2, 0x22, 0x7c, 0xe3, 0x12, 0xfb, 0x20, 0x05,
  0x06, 0x49, 0x90, 0x92, 0x85, 0x3e, 0xbf, 0x7b, 0x90, 0x41, 0xa7, 0x0a,
  0x88, 0xda, 0x6d, 0x9e, 0x31, 0x17, 0x58, 0x3b, 0x5d, 0x02, 0x31, 0x6c,
  0xbc, 0x41, 0x4a, 0x09, 0xd3, 0x2e, 0x7c, 0xaf, 0xf9, 0xf4, 0x23, 0x45,
  0x5e, 0x44, 0x42, 0xf9, 0xeb, 0xd3, 0xbc, 0x3d, 0xce, 0x38, 0x8d, 0x1c,
  0x0a, 0xbe, 0x88, 0x84, 0xf2, 0xd7, 0xa7, 0xb9, 0x7b, 0x9c, 0x75, 0x1a,
  0x39, 0x02, 0xb2, 0x25, 0xe1, 0x14, 0x06, 0x4d, 0x42, 0x3a, 0xe7, 0x05,
  0xeb, 0x6c, 0xbd, 0x5e, 0x06, 0x33, 0xd7, 0x0f, 0xaf, 0x8f, 0xce, 0x92,
  0x2d, 0x68, 0xe0, 0x5d, 0x23, 0x57, 0xc5, 0xfb, 0x4e, 0xd6, 0x4c, 0x77,
  0x96, 0x1f, 0xf3, 0x1d, 0x63, 0x6c, 0xce, 0x26, 0xdb, 0xd6, 0x88, 0xa2,
  0xcf, 0x81, 0x0a, 0xad, 0x61, 0xaa, 0x96, 0x29, 0x99, 0xa6, 0x81, 0xeb,
  0xd1, 0x99, 0xaa, 0x5c, 0xe5, 0x62, 0x6d, 0x54, 0xde, 0x26, 0x26, 0x68,
  0x0a, 0xd1, 0x70, 0x86, 0x04, 0x05, 0x76, 0x32, 0xf6, 0x4b, 0x1b, 0x1b,
  0xbb, 0x7b, 0x57, 0x39, 0x03, 0x52, 0x1c, 0x39, 0xec, 0xc0, 0xd1, 0xb4,
  0x3d, 0x11, 0x17, 0x4e, 0xfb, 0x1d, 0x20, 0xe1, 0x12, 0x9b, 0xb2, 0x84,
  0x48, 0x9a, 0xc1, 0x0d, 0xd8, 0x1d, 0x8e, 0x34, 0xb9, 0x8d, 0xd1, 0xce,
  0x46, 0x62, 0x53, 0x4c, 0xcd, 0x2e, 0x73, 0x0e, 0xb5, 0xcd, 0xe9, 0x35,
  0x24, 0x76, 0xb1, 0xaa, 0xad, 0x1f, 0x33, 0xb5, 0xe7, 0x35, 0x8a, 0x31,
  0x54, 0xef, 0x38, 0xad, 0xce, 0x65, 0x74, 0x63, 0xba, 0x59, 0xbe, 0xb5,
  0x2e, 0x93, 0xa2, 0xa3, 0xda, 0xf8, 0x69, 0x23, 0xf1, 0x52, 0x14, 0x5b,
  0x99, 0x8a, 0xb9, 0x4b, 0x22, 0xf2, 0x84, 0x80, 0x91, 0xc8, 0xf6, 0x0e,
  0xcf, 0xb2, 0x79, 0xbe, 0xc8, 0xc9, 0xf6, 0xf2, 0xa7, 0x30, 0x8c, 0x05,
  0x09, 0xdd, 0x94, 0x7e, 0x0a, 0xa7, 0xa4, 0x69, 0xbf, 0x29, 0x7e, 0x6d,
  0xa6, 0x44, 0x1e, 0x31, 0xce, 0xca, 0x8c, 0x5b, 0xcd, 0xed, 0x09, 0xd9,
  0xc4, 0xe1, 0x35, 0xd1, 0x63, 0x7b, 0x97, 0xfa, 0x54, 0x79, 0xe7, 0x12,
  0xd1, 0x4b, 0xcf, 0x4c, 0x2d, 0x59, 0x7e, 0x9c, 0xd6, 0x7b, 0x7b, 0x5d,
  0x41, 0x57, 0x3b, 0x8a, 0x12, 0xfb, 0x3d, 0xb5, 0x84, 0xf9, 0xfe, 0xec,
  0x28, 0xd9, 0x42, 0xa1, 0xc8, 0xb3, 0x27, 0x7b, 0xfb, 0xdb, 0x7e, 0x76,
  0x89, 0x32, 0x80, 0x50, 0x6e, 0xde, 0x71, 0x58, 0xd6, 0xbb, 0x80, 0xf3,
  0x72, 0x9a, 0x8a, 0xc6, 0xe1, 0x86, 0x9e, 0x65, 0xd7, 0xf9, 0x14, 0x75,
  0x3a, 0x08, 0xca, 0x83, 0x07, 0x4f, 0x32, 0x33, 0xc9, 0x60, 0xc7, 0x5d,
  0x56, 0x2f, 0xcf, 0xde, 0x98, 0x48, 0x56, 0x53, 0x46, 0xee, 0xb4, 0xa1,
  0x81, 0x46, 0xf6, 0xce, 0x9f, 0xb5, 0x44, 0x09, 0xd2, 0x1e, 0x4f, 0x10,
  0xd6, 0xc5, 0x55, 0x34, 0xa4, 0x63, 0x0c, 0x5c, 0xe0, 0x67, 0x38, 0x94,
  0xcd, 0x12, 0xd6, 0x6b, 0xe3, 0xc7, 0xc8, 0x42, 0xe9, 0x1e, 0xa0, 0xcc,
  0x69, 0x03, 0x82, 0xa4, 0x20, 0xe1, 0x9e, 0xba, 0x41, 0xed, 0xee, 0xfb,
  0x9a, 0x50, 0x7b, 0xd4, 0xd0, 0x53, 0x4e, 0x84, 0x63, 0x34, 0x97, 0xf8,
  0x90, 0xff, 0x22, 0x27, 0x53, 0x9b, 0x7d, 0xca, 0xf1, 0xe0, 0xec, 0xc5,
  0x6b, 0x38, 0x61, 0x45, 0x41, 0xf9, 0x6d, 0xaa, 0x8f, 0x07, 0x72, 0xdc,
  0xbc, 0xbe, 0xa3, 0x42, 0x88, 0xa4, 0x90, 0xfa, 0x1b, 0xd9, 0xf3, 0x63,
  0x98, 0x27, 0x79, 0x7a, 0x3e, 0x8a, 0xa3, 0x87, 0x94, 0x62, 0x9b, 0xc6,
  0x11, 0xfa, 0x8a, 0x55, 0xf0, 0x9b, 0x23, 0x9a, 0x96, 0xb3, 0x8e, 0xc9,
  0x8e, 0x4d, 0xf0, 0x04, 0x1e, 0x71, 0x3f, 0x0e, 0x55, 0x12, 0xc7, 0x8b,
  0x7b, 0xb2, 0x41, 0xa9, 0xec, 0x5e, 0xff, 0x45, 0x3c, 0x30, 0xe6, 0x51,
  0x23, 0x16, 0xf8, 0xab, 0x38, 0xe0, 0x3d, 0x3e, 0xa7, 0x57, 0x81, 0xc4,
  0xae, 0xad, 0x32, 0xe4, 0x74, 0x35, 0x24, 0x8c, 0x27, 0xb4, 0x71, 0xa1,
  0x45, 0x83, 0xd4, 0x41, 0x4a, 0x09, 0xa0, 0x54, 0x84, 0x8e, 0x3a, 0x47,
  0x8e, 0x1d, 0x73, 0x5d, 0xb6, 0x8e, 0x39, 0x48, 0x99, 0x9c, 0xbe, 0xf9,
  0x51, 0xb9, 0x65, 0xcc, 0x80, 0x27, 0x47, 0xd4, 0x17, 0x36, 0x43, 0xcc,
  0x58, 0x14, 0xc8, 0x56, 0xcb, 0x25, 0xf3, 0x93, 0xdd, 0x44, 0x14, 0x0e,
  0xdf, 0x76, 0x09, 0x8d, 0xd8, 0xea, 0x8d, 0x17, 0xf4, 0xbb, 0x6e, 0xac,
  0xa9, 0x64, 0x4b, 0xe6, 0x8f, 0x3f, 0xf1, 0xaf, 0x99, 0xc7, 0x9a, 0x7f,
  0x01, 0xd9, 0x92, 0x70, 0x0a, 0x83, 0x26, 0x21, 0x9d, 0xf3, 0x82, 0x75,
  0xb6, 0x5e, 0x2f, 0x83, 0x99, 0xeb, 0x87, 0xd7, 0x47, 0x67, 0xc9, 0x16,
  0x34, 0xf0, 0xae, 0x91, 0xab, 0xe2, 0x7d, 0x27, 0x6b, 0xa6, 0x3b, 0xcb,
  0x8f, 0xf9, 0x8e, 0x31, 0x36, 0x67, 0x93, 0x6d, 0x6b, 0x44, 0xd1, 0xe7,
  0x40, 0x85, 0xd6, 0x30, 0x55, 0xcb, 0x94, 0x4c, 0xd3, 0xc0, 0xf5, 0xe8,
  0x4c, 0x55, 0xae, 0x70, 0xb1, 0x36, 0x2a, 0x6f, 0x13, 0x13, 0x34, 0x85,
  0x68, 0x38, 0x3b, 0x82, 0x02, 0x3b, 0x19, 0xfb, 0xa5, 0x8d, 0x8d, 0xdd,
  0xbd, 0xab, 0x9c, 0xfd, 0x28, 0x8e, 0x1c, 0x76, 0xe0, 0x68, 0xca, 0x9e,
  0x88, 0x0b, 0xa7, 0xfd, 0x0e, 0x90, 0x6c, 0x89, 0x4d, 0x59, 0x42, 0x24,
  0xcd, 0xe0, 0x06, 0xec, 0x0e, 0x47, 0x9a, 0xdc, 0xc6, 0x68, 0x67, 0x23,
  0xb1, 0xe9, 0xa5, 0x66, 0x97, 0x39, 0x7f, 0xda, 0x06, 0xbe, 0x0c, 0x89,
  0x5d, 0xac, 0x6a, 0xeb, 0xc7, 0x4c, 0xed, 0x79, 0x8d, 0x62, 0x0c, 0xd5,
  0x3b, 0x4e, 0xab, 0x73, 0x19, 0xdd, 0x98, 0x6e, 0x96, 0x6f, 0xad, 0xcb,
  0xa4, 0xe8, 0xa8, 0x36, 0x7e, 0xdc, 0x48, 0xbc, 0xf4, 0xc4, 0x56, 0x96,
  0x62, 0xee, 0x12, 0x88, 0x3c, 0x21, 0x60, 0x24, 0xb2, 0xbd, 0xc3, 0xb3,
  0x6c, 0x9e, 0x2f, 0x72, 0xb2, 0xbd, 0xfc, 0x29, 0x0c, 0x63, 0x01, 0x42,
  0x37, 0xa5, 0x1f, 0xc3, 0x29, 0x69, 0xca, 0x6f, 0x8a, 0x5f, 0x9b, 0x29,
  0x91, 0x47, 0x8c, 0x33, 0x32, 0xe3, 0x56, 0x73, 0x7b, 0x42, 0x36, 0x69,
  0x78, 0x4d, 0xe4, 0xd8, 0xde, 0xa5, 0x3e, 0x55, 0xde, 0xb9, 0x44, 0xf4,
  0xd2, 0x33, 0x53, 0x4b, 0x96, 0x1f, 0xa7, 0xf5, 0xde, 0x5e, 0x57, 0xd0,
  0xd5, 0x8e, 0xa2, 0xc4, 0x7e, 0x4f, 0x2d, 0x61, 0xbe, 0x3f, 0x3b, 0x4a,
  0xb6, 0x50, 0x24, 0xf2, 0xec, 0xc9, 0xde, 0xfe, 0xb6, 0x9f, 0x59, 0xa2,
  0x0c, 0x20, 0x94, 0x9b, 0x77, 0x1c, 0x92, 0xf5, 0x2e, 0xe0, 0xbc, 0x9c,
  0xa6, 0xa2, 0x71, 0xb8, 0xa1, 0x67, 0xd9, 0x75, 0x3e, 0x45, 0x8d, 0x0e,
  0x02, 0xf2, 0xe0, 0xc1, 0x93, 0xcc, 0x4c, 0x32, 0xd8, 0x71, 0x97, 0xd1,
  0xcb, 0xb3, 0x37, 0x26, 0x92, 0xd5, 0x94, 0x91, 0x37, 0x6d, 0x68, 0xa0,
  0x91, 0xbd, 0xf3, 0x67, 0x2d, 0x51, 0x82, 0xb4, 0xc7, 0x13, 0x84, 0x75,
  0x71, 0x05, 0x0d, 0xe9, 0x18, 0x03, 0x17, 0xf8, 0x19, 0x0e, 0x65, 0xb3,
  0x84, 0xf5, 0xda, 0xd8, 0x31, 0x32, 0x50, 0xba, 0x07, 0x28, 0x73, 0xda,
  0x80, 0x20, 0x29, 0x48, 0xb8, 0xa7, 0x6e, 0x50, 0xbb, 0xfb, 0xbe, 0x26,
  0xd4, 0x1e, 0x35, 0xf4, 0x94, 0x13, 0xe1, 0x18, 0xcd, 0x25, 0x3e, 0xe4,
  0xbf, 0xc8, 0xc9, 0xd4, 0x66, 0x9f, 0x72, 0x3c, 0x38, 0x7b, 0xf1, 0x1a,
  0x4e, 0x58, 0x51, 0x50, 0x7e, 0x9b, 0xea, 0xe3, 0x81, 0x1c, 0x37, 0xaf,
  0xef, 0xa8, 0x10, 0x22, 0x29, 0xa4, 0xfe, 0x46, 0xf6, 0xfc, 0x18, 0xe6,
  0x49, 0x9e, 0x9e, 0x8f, 0xe2, 0xe8, 0x21, 0xa5, 0xd8, 0xa6, 0x70, 0x84,
  0xbe, 0x62, 0x15, 0xfc, 0xe6, 0x88, 0xa6, 0xe5, 0xac, 0x63, 0xb2, 0x63,
  0x13, 0x3c, 0x81, 0x47, 0xdc, 0x8f, 0x43, 0x95, 0xc4, 0xf1, 0xe2, 0x9e,
  0x6c, 0x50, 0x2a, 0xbb, 0xd7, 0x7f, 0x16, 0x0f, 0x8c, 0x79, 0xd4, 0x88,
  0x05, 0xfe, 0x22, 0x0e, 0x78, 0x8f, 0xcf, 0xe9, 0x55, 0x20, 0xb1, 0x6b,
  0xab, 0x0c, 0x39, 0x5d, 0x0d, 0xc9, 0xe2, 0x09, 0x6d, 0x5c, 0x68, 0xd1,
  0x20, 0x6d, 0x90, 0x52, 0x02, 0x90, 0xf3, 0xd5, 0xb9, 0x9b, 0xec, 0xd8,
  0x31, 0xd7, 0x65, 0xeb, 0x98, 0x83, 0x94, 0xc9, 0xe9, 0x9b, 0x1f, 0x94,
  0x5b, 0xc6, 0x0c, 0x78, 0x72, 0x44, 0xfd, 0xc1, 0x66, 0x87, 0x19, 0x8b,
  0x02, 0x99, 0x6a, 0xb9, 0x64, 0x7d, 0xb2, 0x9b, 0x88, 0xc2, 0xe1, 0xdb,
  0x2e, 0x99, 0x11, 0x5b, 0xbd, 0xf1, 0x82, 0x7e, 0xd7, 0x8d, 0x35, 0x95,
  0x6c, 0xc9, 0xfc, 0xf1, 0x47, 0xfe, 0x35, 0xf3, 0x58, 0xf3, 0xaf, 0xe6,
  0x6a, 0xb5, 0x98, 0x98, 0xf3, 0x2c, 0x9a, 0x3f, 0x6e, 0x24, 0x1c, 0x6c,
  0xbd, 0x90, 0xfd, 0x5c, 0x63, 0x76, 0xe6, 0x5a, 0xaf, 0xa3, 0xbe, 0xc5,
  0xd6, 0xae, 0xf1, 0xec, 0xb4, 0x76, 0xc0, 0xe5, 0xe7, 0x99, 0xc3, 0x63,
  0x35, 0x57, 0xab, 0xc5, 0xc4, 0x9c, 0x67, 0xd1, 0xfc, 0x71, 0x23, 0xe1,
  0x60, 0xeb, 0x85, 0xec, 0xe7, 0x1a, 0xb3, 0x33, 0xd7, 0x9a, 0x1d, 0xf5,
  0x2d, 0xb6, 0x76, 0x8d, 0x67, 0xa7, 0xf5, 0x03, 0x2e, 0x47, 0xcf, 0x1c,
  0x1e, 0xfb, 0xb2, 0x03, 0x55, 0xef, 0xbd, 0x21, 0xcf, 0x9f, 0xde, 0xfe,
  0xe9, 0xa7, 0xe7, 0x8f, 0x1e, 0xa7, 0xcf, 0xd2, 0xe9, 0xd3, 0x8b, 0xcf,
  0xd3, 0x27, 0xb3, 0x27, 0xcf, 0x9e, 0xef, 0x7f, 0xfe, 0x24, 0x7d, 0xf6,
  0xf8, 0x22, 0x7d, 0xba, 0x97, 0xed, 0x3d, 0xbf, 0xd8, 0x7f, 0x34, 0x9b,
  0x5f, 0x76, 0xa0, 0xea, 0xbd, 0x37, 0xe4, 0xf9, 0xe3, 0xdb, 0x3f, 0xfd,
  0xf8, 0xfc, 0xd1, 0xe3, 0xf4, 0x59, 0x3a, 0x7d, 0x7a, 0xf1, 0x79, 0xfa,
  0x64, 0xf6, 0xe4, 0xd9, 0xf3, 0xfd, 0xcf, 0x9f, 0xa4, 0xcf, 0x1e, 0x5f,
  0xa4, 0x4f, 0xf7, 0xb2, 0xbd, 0xe7, 0x17, 0xfb, 0x8f, 0x66, 0xb3, 0x8b,
  0xec, 0xf3, 0xd9, 0xb3, 0x74, 0x63, 0x44, 0xe6, 0x97, 0x4e, 0x3d, 0x64,
  0xb5, 0x1a, 0x78, 0x4b, 0x93, 0xf1, 0x37, 0x2f, 0x87, 0x7b, 0xc9, 0x55,
  0x5d, 0x64, 0x9f, 0xcf, 0x9e, 0xa5, 0x1b, 0x23, 0x32, 0xbf, 0x74, 0xea,
  0x21, 0xab, 0xd5, 0xc0, 0x5b, 0x9a, 0x8c, 0xbf, 0x7d, 0x39, 0xdc, 0x4b,
  0xae, 0xb2, 0x5b, 0xbd, 0x60, 0xec, 0xd1, 0xb4, 0x99, 0x77, 0x99, 0xe4,
  0x56, 0xf7, 0x2f, 0x56, 0x8b, 0x05, 0x91, 0x39, 0x0d, 0x5f, 0x09, 0x69,
  0xc0, 0xbc, 0x8b, 0xba, 0xad, 0x9c, 0x5b, 0x67, 0xfd, 0x87, 0x07, 0xea,
  0xb3, 0xc7, 0xba, 0xba, 0x97, 0xff, 0xd8, 0xbc, 0x33, 0x7f, 0x9b, 0x4e,
  0x8d, 0x92, 0x64, 0xf6, 0x44, 0x1e, 0x1c, 0x1b, 0xd3, 0xd6, 0xb0, 0xe9,
  0x41, 0x22, 0x7f, 0x81, 0x97, 0xd8, 0x1b, 0xe3, 0x9b, 0xaa, 0x5c, 0x2d,
  0x4f, 0xcb, 0x79, 0x3e, 0xbd, 0x5b, 0x37, 0x9c, 0xff, 0x58, 0xeb, 0x17,
  0x87, 0xcc, 0xc2, 0xf3, 0x3a, 0xfb, 0x17, 0x9a, 0x56, 0x1e, 0x3b, 0x7e,
  0x80, 0x6d, 0x35, 0x9c, 0xe6, 0xcb, 0x2b, 0xc4, 0x79, 0x5f, 0x50, 0xa6,
  0x1f, 0x42, 0x33, 0xfc, 0x83, 0xb8, 0x4d, 0x25, 0x49, 0x41, 0x54, 0x3c,
  0x85, 0xf3, 0xd4, 0xb7, 0x45, 0xe3, 0xca, 0xb5, 0x0c, 0x4e, 0xdd, 0x54,
  0x92, 0x5d, 0x9a, 0x07, 0x7e, 0x3c, 0xf7, 0x21, 0xbe, 0xed, 0xaa, 0x6d,
  0xb3, 0xf3, 0x42, 0x7e, 0x35, 0x4a, 0xce, 0x28, 0x4e, 0xbe, 0x5a, 0xb2,
  0x79, 0x41, 0xfe, 0x7c, 0xfe, 0x5d, 0xf7, 0xa2, 0x61, 0xf2, 0x42, 0x31,
  0x5c, 0x8c, 0x67, 0x76, 0xf4, 0xfd, 0xd9, 0xf1, 0x41, 0x77, 0x9f, 0xa8,
  0xe0, 0xa8, 0x3e, 0xd8, 0xd9, 0xa1, 0x90, 0xcf, 0x55, 0x7a, 0x7b, 0x3b,
  0xaa, 0xb3, 0x9d, 0x59, 0x39, 0xad, 0x77, 0xea, 0x7a, 0xae, 0xbb, 0xd1,
  0xae, 0xff, 0xfb, 0x04, 0xde, 0xdc, 0x72, 0x41, 0x6c, 0x2b, 0x9b, 0x0d,
  0x76, 0xab, 0x17, 0x8c, 0x3d, 0x9a, 0x36, 0xeb, 0x2e, 0x93, 0xbc, 0xea,
  0xfe, 0xc5, 0x6a, 0xa1, 0x20, 0xb2, 0xa6, 0xe1, 0x2b, 0x21, 0x0d, 0x98,
  0x77, 0x51, 0xb7, 0x95, 0xf3, 0xea, 0xac, 0xff, 0xf0, 0x40, 0x7d, 0xf6,
  0x58, 0x57, 0xf7, 0xf2, 0x1f, 0x9b, 0x77, 0xe6, 0x6f, 0xd3, 0xa9, 0x51,
  0x92, 0xcc, 0x9e, 0xc8, 0x83, 0x63, 0x63, 0xda, 0x1a, 0x36, 0x3d, 0x48,
  0xe4, 0x2f, 0xf0, 0x12, 0x7b, 0x63, 0x7c, 0x5d, 0x95, 0xab, 0xe5, 0x69,
  0x39, 0xcf, 0xa7, 0x77, 0xeb, 0x86, 0xf3, 0x1f, 0x6b, 0xfd, 0xe2, 0x90,
  0x59, 0x78, 0x5e, 0x67, 0xff, 0x42, 0xd3, 0xca, 0x63, 0xc7, 0x0f, 0xb0,
  0xad, 0x86, 0xd3, 0x7c, 0x79, 0x85, 0x38, 0xef, 0x0b, 0xca, 0xf2, 0x43,
  0x68, 0x86, 0x7f, 0x10, 0xb7, 0xa9, 0xc6, 0x72, 0x23, 0x6b, 0x39, 0x4f,
  0x7d, 0x5b, 0x34, 0xae, 0x5c, 0x4b, 0xe0, 0xd4, 0x4d, 0x25, 0x99, 0xa5,
  0x79, 0xe0, 0xc7, 0x73, 0x1f, 0xe2, 0xdb, 0xae, 0xda, 0x36, 0x3b, 0x2f,
  0xe4, 0x57, 0xa3, 0xe4, 0x8c, 0xe2, 0xe4, 0xab, 0x25, 0x9b, 0x17, 0xe4,
  0xcf, 0xe7, 0xdf, 0x75, 0x2f, 0x1a, 0x26, 0x2f, 0x14, 0xc3, 0x85, 0x78,
  0x66, 0x47, 0xdf, 0x9f, 0x1d, 0x1f, 0x74, 0xf7, 0x89, 0x8a, 0x8d, 0xea,
  0x83, 0x9d, 0x1d, 0x0a, 0xf9, 0x5c, 0xa5, 0xb7, 0xb7, 0xa3, 0x3a, 0xdb,
  0x99, 0x95, 0xd3, 0x7a, 0xa7, 0xae, 0xe7, 0xba, 0x1b, 0xed, 0xda, 0xbf,
  0x4f, 0xe0, 0xcd, 0x2d, 0x17, 0xc4, 0xb6, 0xb2, 0xd9, 0xb0, 0xae, 0x83,
  0xdc, 0xa0, 0xf1, 0x2b, 0xcd, 0x3c, 0x38, 0x94, 0x9c, 0x34, 0x92, 0x73,
  0xeb, 0x3a, 0xc8, 0x0d, 0x1a, 0xbf, 0xd2, 0xcc, 0x83, 0x43, 0xc9, 0x4b,
  0x23, 0x39, 0x37, 0x34, 0xbb, 0x3b, 0x1e, 0x7f, 0x9b, 0xe8, 0xcb, 0xb4,
  0xbd, 0x36, 0x24, 0x6e, 0xf3, 0x72, 0x06, 0x11, 0x35, 0x2c, 0x15, 0x86,
  0xfd, 0x85, 0xef, 0xd0, 0x81, 0x3a, 0x5d, 0xf2, 0x1f, 0x52, 0xbf, 0x92,
  0x37, 0x6b, 0x93, 0xf9, 0x9e, 0x76, 0x1c, 0x20, 0x76, 0x11, 0xf1, 0xf8,
  0xbf, 0x3a, 0xc1, 0xd2, 0xc4, 0x3d, 0xe9, 0x3c, 0x42, 0xdd, 0x02, 0x75,
  0x43, 0xbd, 0x97, 0x65, 0x65, 0x84, 0xc7, 0xa2, 0x8e, 0x79, 0x41, 0xf5,
  0x96, 0xd7, 0xac, 0xf6, 0xd5, 0x9c, 0x8f, 0x68, 0x86, 0x29, 0xbc, 0xc1,
  0xcd, 0x31, 0x52, 0x1e, 0xe3, 0xc8, 0x3f, 0xac, 0x68, 0x7c, 0x4b, 0x0f,
  0xaf, 0xcf, 0x8b, 0xb6, 0x2a, 0x5c, 0xf0, 0x83, 0xc4, 0xb1, 0x99, 0xac,
  0x14, 0x97, 0x05, 0x16, 0x02, 0xe5, 0xff, 0x93, 0x98, 0x80, 0x0e, 0x51,
  0x55, 0xa5, 0xa7, 0xd4, 0x0e, 0xbf, 0x23, 0xe3, 0xd2, 0x48, 0xc7, 0xfc,
  0x52, 0xc3, 0xeb, 0xd1, 0x3c, 0x3b, 0x56, 0x2b, 0x1b, 0xca, 0x5f, 0x96,
  0x92, 0x70, 0x08, 0x05, 0xa4, 0xb0, 0x51, 0x6a, 0x89, 0x64, 0x68, 0x72,
  0x3a, 0x50, 0xab, 0x12, 0x3e, 0xb8, 0x09, 0xa8, 0xfb, 0x71, 0x8f, 0x23,
  0x8d, 0x4a, 0xef, 0x25, 0x0d, 0x2f, 0xee, 0x0b, 0x2f, 0xb1, 0x0d, 0x5a,
  0x19, 0xb9, 0x19, 0xcc, 0x33, 0x5d, 0x6b, 0x8f, 0xf2, 0x6e, 0xad, 0xce,
  0x17, 0x2b, 0x73, 0xed, 0xae, 0x47, 0xd3, 0xef, 0x75, 0x6f, 0x73, 0x2a,
  0xac, 0x4e, 0x29, 0xb7, 0x3f, 0x26, 0xda, 0x4b, 0x2f, 0x48, 0x8b, 0x01,
  0x43, 0x99, 0xd7, 0xd8, 0xd4, 0x49, 0xad, 0x56, 0x22, 0x85, 0xc0, 0x70,
  0x20, 0x23, 0xf6, 0x90, 0x75, 0x8e, 0x72, 0xfa, 0x79, 0xe9, 0x14, 0x2c,
  0x43, 0x78, 0x86, 0x17, 0x52, 0x45, 0xe2, 0x28, 0xe0, 0xdb, 0x5c, 0x97,
  0xc4, 0x49, 0x84, 0x5c, 0x5f, 0xc7, 0xd9, 0x5e, 0xfc, 0x33, 0x12, 0x5f,
  0x13, 0x8d, 0x91, 0x3b, 0x7e, 0x86, 0xf3, 0x8b, 0xb9, 0x86, 0x24, 0x33,
  0x9f, 0x8b, 0x1d, 0x73, 0x2a, 0xe3, 0x95, 0xc2, 0x4f, 0x2e, 0x34, 0x50,
  0xcf, 0x76, 0x5d, 0x4a, 0xda, 0x26, 0x26, 0x8a, 0x79, 0xf2, 0x1c, 0xbb,
  0xa4, 0x6e, 0x8b, 0x3a, 0x5b, 0xc6, 0x48, 0x5a, 0xbb, 0x7c, 0xfd, 0x3a,
  0x8c, 0x56, 0xba, 0xcd, 0x8c, 0x59, 0xaf, 0x41, 0xed, 0x03, 0x4d, 0xa4,
  0xca, 0xf4, 0x0b, 0x45, 0xd9, 0x9d, 0x94, 0xce, 0x23, 0x96, 0x93, 0xaa,
  0xf9, 0xfd, 0xde, 0x04, 0x34, 0xcf, 0xdf, 0x9e, 0x72, 0x5c, 0xd8, 0x65,
  0xee, 0x01, 0xf2, 0xe0, 0x94, 0x36, 0xdf, 0xc3, 0x3f, 0xc8, 0xf6, 0x73,
  0x42, 0x2d, 0x5d, 0x9d, 0xaf, 0x98, 0xce, 0x4b, 0xad, 0x8f, 0x30, 0xef,
  0x73, 0x89, 0xed, 0x28, 0xf9, 0x21, 0x52, 0x78, 0xcb, 0x23, 0x5e, 0x38,
  0x0d, 0x22, 0xab, 0x43, 0x3d, 0x7e, 0x99, 0x79, 0x55, 0xc1, 0x50, 0x29,
  0xac, 0xc9, 0x78, 0x90, 0xfc, 0xf4, 0xd3, 0x20, 0x81, 0x25, 0xfc, 0x53,
  0x63, 0xfe, 0xdf, 0x90, 0xd8, 0x4f, 0x5c, 0x8b, 0xf4, 0xd3, 0x35, 0x6c,
  0x3b, 0xf8, 0x8d, 0x83, 0x24, 0xec, 0x39, 0x82, 0x44, 0xac, 0x4d, 0xb7,
  0x9d, 0x6f, 0x5c, 0xfa, 0xcc, 0x19, 0x58, 0x14, 0x05, 0xf1, 0x92, 0x8a,
  0x43, 0xb3, 0xbb, 0xe3, 0xf1, 0x37, 0x89, 0xbe, 0x4c, 0xdb, 0x6b, 0x43,
  0xe2, 0x36, 0x2f, 0x67, 0x10, 0x51, 0xc3, 0x52, 0x61, 0xd8, 0x7f, 0xf0,
  0x1d, 0x3a, 0x50, 0xa7, 0x4b, 0xfe, 0x43, 0x6a, 0x57, 0xf2, 0x66, 0x6d,
  0x22, 0xdf, 0xd3, 0x8e, 0x03, 0xc4, 0x2e, 0x22, 0x1e, 0xff, 0x57, 0x27,
  0x58, 0x9a, 0xb8, 0x27, 0x9d, 0x47, 0xa8, 0x5b, 0x9c, 0x6e, 0xa8, 0xf7,
  0xb2, 0xac, 0x8c, 0xf0, 0x58, 0xd4, 0x31, 0x2f, 0xa8, 0xde, 0xf2, 0x9a,
  0xd5, 0xbe, 0x9a, 0x73, 0x11, 0xcd, 0x30, 0x85, 0x37, 0xb8, 0x39, 0x46,
  0xca, 0x61, 0x1c, 0xf9, 0x87, 0x15, 0x8d, 0x6f, 0xe9, 0xe1, 0xf5, 0x79,
  0xd1, 0x56, 0x85, 0x0b, 0x7e, 0x90, 0x38, 0x36, 0x93, 0x95, 0xc2, 0xb2,
  0xc0, 0x42, 0xa0, 0xdc, 0x7f, 0x12, 0x13, 0xd0, 0x21, 0xaa, 0xaa, 0xf4,
  0x94, 0xda, 0xe1, 0xb7, 0x64, 0x5c, 0x1a, 0xe9, 0x98, 0x5f, 0x6a, 0x78,
  0xbd, 0x27, 0xc7, 0x0e, 0xa2, 0xab, 0xa1, 0xdc, 0x65, 0x29, 0x07, 0x87,
  0x50, 0x40, 0x0a, 0x1b, 0xa5, 0x96, 0x48, 0x76, 0x26, 0xa7, 0x03, 0xb5,
  0xaa, 0xe0, 0x83, 0x9b, 0x80, 0x9a, 0x1f, 0xf7, 0x38, 0xd2, 0xa8, 0xf4,
  0x5e, 0xd2, 0xf0, 0xe2, 0xbe, 0xf0, 0x12, 0xdb, 0xa0, 0x95, 0x91, 0x9b,
  0xc1, 0x3c, 0xd3, 0xb5, 0xf6, 0x28, 0xe7, 0xd6, 0xea, 0x7c, 0xb1, 0x12,
  0xd7, 0xee, 0x7a, 0x34, 0xf5, 0x5e, 0xf7, 0x36, 0xa7, 0xa2, 0xea, 0x94,
  0xf2, 0xfa, 0x63, 0xa2, 0xbd, 0xf4, 0x82, 0xb4, 0x18, 0x30, 0x94, 0x79,
  0x8d, 0x4d, 0x9b, 0xd4, 0x4a, 0x25, 0x52, 0x08, 0x0c, 0x07, 0x32, 0x62,
  0x0f, 0x19, 0xe7, 0x28, 0xa5, 0x9f, 0x97, 0x4e, 0xc1, 0x32, 0x84, 0x67,
  0x78, 0x21, 0x55, 0x23, 0x8e, 0x02, 0xbe, 0xcd, 0x35, 0x49, 0x9c, 0x44,
  0xc8, 0xb5, 0x75, 0x9c, 0xed, 0xc5, 0x3f, 0x23, 0xf1, 0x35, 0xd1, 0x18,
  0xb9, 0xe3, 0x67, 0x38, 0xbf, 0x98, 0x6b, 0x48, 0xb2, 0xf2, 0xb9, 0xd0,
  0x31, 0xa7, 0x12, 0x5e, 0x29, 0xfa, 0xe4, 0x22, 0x03, 0xf5, 0x6c, 0xd7,
  0xa5, 0xa4, 0x6c, 0x62, 0xa2, 0x98, 0x27, 0xcf, 0xb1, 0x4b, 0xea, 0xb6,
  0xa0, 0xb3, 0x65, 0x8c, 0xa4, 0xb5, 0xcb, 0xd5, 0xaf, 0xc3, 0x68, 0xa5,
  0xdb, 0xcc, 0x98, 0xf5, 0x1a, 0xd4, 0x3d, 0xd0, 0x44, 0xaa, 0x4c, 0xbf,
  0x50, 0x94, 0xdd, 0x49, 0xe9, 0x3c, 0x62, 0xf9, 0xa8, 0x9a, 0xdb, 0xef,
  0x4d, 0x40, 0x73, 0xfc, 0xed, 0x29, 0xf7, 0x64, 0x6f, 0x66, 0x89, 0x7b,
  0x24, 0x71, 0x76, 0xa6, 0x3b, 0x46, 0xf2, 0x37, 0x50, 0xc5, 0x46, 0xcd,
  0x53, 0x3f, 0xc0, 0x9c, 0xbe, 0xd8, 0x8e, 0xf9, 0x89, 0xdd, 0x48, 0x4a,
  0x51, 0xb8, 0xa7, 0xf3, 0xb2, 0xd6, 0xf8, 0x0b, 0x94, 0x0b, 0xae, 0xbb,
  0x35, 0xdc, 0xe0, 0x7b, 0xf9, 0x01, 0x1f, 0x4d, 0x67, 0x38, 0x7e, 0x6a,
  0x20, 0x53, 0xbc, 0x70, 0xca, 0x86, 0xd8, 0xaa, 0xae, 0x58, 0x18, 0xda,
  0x86, 0xb5, 0x26, 0x0f, 0x92, 0x1f, 0x7f, 0x1c, 0x24, 0xc6, 0x48, 0xee,
  0x0c, 0xf7, 0x63, 0x63, 0x7e, 0x6a, 0x68, 0xf1, 0x47, 0x2e, 0x58, 0xfa,
  0xf1, 0x1a, 0x46, 0x20, 0x1c, 0xcc, 0xf5, 0x1c, 0xd1, 0x23, 0x56, 0xb3,
  0xdb, 0x5e, 0x39, 0xae, 0x87, 0x5e, 0x93, 0x9a, 0xe5, 0xec, 0x76, 0x4e,
  0xc5, 0x34, 0x07, 0xb6, 0x5a, 0x14, 0x62, 0x9d, 0x30, 0x71, 0xd2, 0xbd,
  0x91, 0x60, 0x69, 0x8e, 0x61, 0xb5, 0x28, 0x42, 0x41, 0xc9, 0x79, 0xc0,
  0x44, 0x82, 0x74, 0xbb, 0x89, 0xdb, 0x6f, 0xfe, 0x6e, 0xd3, 0x91, 0xcb,
  0x27, 0x39, 0xb0, 0xf9, 0xdb, 0x4d, 0x47, 0x48, 0xb1, 0xbd, 0xab, 0x32,
  0x40, 0x7d, 0xf8, 0x8d, 0x72, 0x53, 0x7a, 0x10, 0xb7, 0x3c, 0x8c, 0x9f,
  0x69, 0x9d, 0x30, 0x19, 0x95, 0x1c, 0x13, 0x35, 0x1c, 0xf3, 0x04, 0x0e,
  0x74, 0xae, 0xf6, 0x2a, 0x9d, 0x7d, 0x88, 0xa2, 0xb7, 0xe5, 0xd5, 0x5d,
  0x96, 0xf4, 0x24, 0xaa, 0x72, 0x4f, 0x4c, 0x69, 0xf5, 0x30, 0x99, 0x9b,
  0x09, 0x87, 0x4b, 0xc1, 0x4c, 0x4f, 0xe0, 0x5c, 0xe7, 0x32, 0xb0, 0xae,
  0x8d, 0xf4, 0x8c, 0x35, 0xb7, 0xd3, 0xbb, 0x20, 0xa3, 0x5e, 0xfe, 0xd6,
  0x68, 0xb6, 0x0f, 0x59, 0x56, 0x20, 0x80, 0x16, 0x77, 0x34, 0xd3, 0xd9,
  0x1c, 0x6e, 0xda, 0x70, 0x97, 0xa4, 0xc4, 0x04, 0x29, 0xf3, 0x36, 0x07,
  0xdb, 0xe5, 0x17, 0x06, 0x9f, 0xf4, 0xf2, 0xde, 0x4a, 0x3f, 0xa3, 0xd1,
  0xd5, 0xb0, 0xa3, 0x08, 0x55, 0x03, 0xf5, 0xf2, 0x7d, 0x61, 0x31, 0x11,
  0x9f, 0x12, 0x65, 0x3e, 0x92, 0x75, 0xa1, 0x03, 0x90, 0xc3, 0xc3, 0x45,
  0x80, 0x86, 0x43, 0x82, 0x13, 0x59, 0x32, 0x04, 0x08, 0xc8, 0x83, 0x92,
  0x0b, 0xee, 0x50, 0xf0, 0xb5, 0x9c, 0x07, 0x2c, 0x55, 0xb2, 0xfd, 0xb4,
  0xa6, 0x1a, 0x77, 0x18, 0xb8, 0x13, 0x37, 0x85, 0xe0, 0x06, 0x8c, 0x4b,
  0x18, 0x77, 0xa6, 0x24, 0x6a, 0xe3, 0x96, 0x57, 0x77, 0x35, 0x32, 0x39,
  0x64, 0x36, 0xc1, 0xed, 0xe9, 0x4d, 0x30, 0x96, 0xbd, 0x47, 0x51, 0x0f,
  0xf8, 0x00, 0x98, 0x5f, 0x8b, 0x75, 0x9a, 0x19, 0x6d, 0x0e, 0x37, 0x6d,
  0x2c, 0x4c, 0xf2, 0x65, 0x82, 0x5c, 0x7a, 0x9b, 0x9c, 0xed, 0x92, 0x0f,
  0x83, 0x4f, 0x7a, 0x49, 0x71, 0xa5, 0x9f, 0xee, 0xe8, 0x8a, 0xdb, 0x51,
  0x9d, 0xaa, 0x51, 0x7c, 0xf9, 0xbe, 0xf0, 0x9f, 0x88, 0xc3, 0x89, 0xd2,
  0x22, 0xc9, 0xf4, 0xd0, 0x01, 0xc8, 0x1b, 0xe2, 0xc2, 0x43, 0xc3, 0x21,
  0xe1, 0x8c, 0x2c, 0x19, 0x1b, 0x04, 0x24, 0x41, 0x99, 0x07, 0x77, 0xa8,
  0x04, 0x5b, 0xce, 0x03, 0x7e, 0x2b, 0xa9, 0x80, 0x5a, 0x6c, 0x8d, 0x0b,
  0x72, 0xbc, 0x4c, 0x29, 0x4d, 0x41, 0x32, 0x62, 0xa4, 0x74, 0x2c, 0x62,
  0xe8, 0x41, 0xcc, 0x05, 0x6a, 0x0e, 0xe6, 0xf3, 0x65, 0xb2, 0xd1, 0xaf,
  0xec, 0x6c, 0x74, 0xdf, 0xa0, 0x24, 0x47, 0xe7, 0xc5, 0x94, 0xb2, 0x78,
  0x0e, 0x40, 0x8a, 0x9b, 0x42, 0x00, 0x05, 0xc6, 0x25, 0x79, 0x65, 0xa6,
  0x94, 0xc3, 0x20, 0xe9, 0x32, 0x52, 0x53, 0x16, 0xb1, 0x02, 0x21, 0x03,
  0x9a, 0xc8, 0x96, 0x24, 0xcb, 0x0d, 0xff, 0xca, 0x39, 0x6b, 0x5c, 0xb9,
  0x25, 0x22, 0x74, 0x9b, 0x73, 0x80, 0xeb, 0x48, 0xf0, 0xde, 0x25, 0x52,
  0x79, 0xf4, 0xe1, 0x52, 0x91, 0x72, 0xf2, 0x50, 0x93, 0x80, 0x62, 0x81,
  0x03, 0x1d, 0x08, 0xf3, 0xf9, 0x22, 0xd9, 0xe8, 0xd7, 0x84, 0x36, 0xba,
  0x6f, 0x50, 0x06, 0xa4, 0x73, 0x71, 0x4a, 0xbd, 0x3c, 0x4d, 0x64, 0x4b,
  0xe6, 0x3d, 0x1d, 0x44, 0xdb, 0xf5, 0x6d, 0x14, 0x96, 0xe0, 0x7b, 0xe2,
  0x75, 0x56, 0xe9, 0x60, 0xef, 0xf7, 0x72, 0x4e, 0x70, 0x1c, 0x5a, 0xd2,
  0x42, 0x5a, 0x4f, 0xb0, 0x3b, 0x7b, 0xdb, 0xb6, 0x08, 0x92, 0x30, 0x35,
  0x32, 0xe9, 0x86, 0x7f, 0xe5, 0x84, 0x36, 0x2e, 0xe9, 0x12, 0xf9, 0xba,
  0xcd, 0x09, 0xc2, 0x75, 0x24, 0xb2, 0xef, 0xb2, 0xac, 0x3c, 0xfa, 0x70,
  0x79, 0x4a, 0x39, 0xb9, 0xaf, 0x49, 0x7a, 0xb1, 0xb4, 0xf3, 0x9e, 0x0e,
  0x42, 0xf1, 0xfa, 0x36, 0x2a, 0x4e, 0xf0, 0x3d, 0x71, 0x49, 0xab, 0xe8,
  0xb0, 0x37, 0x7a, 0x39, 0x27, 0x9c, 0x0e, 0xad, 0x75, 0x21, 0x95, 0x28,
  0x38, 0xf9, 0x5a, 0x54, 0x81, 0x8d, 0xab, 0x92, 0xd3, 0x85, 0x36, 0x0e,
  0x50, 0x9f, 0x27, 0x57, 0x93, 0xd6, 0xa8, 0x68, 0x07, 0x9d, 0xe1, 0x28,
  0x19, 0xeb, 0xdb, 0x93, 0xb7, 0x87, 0xed, 0x24, 0x5b, 0xfa, 0x49, 0xcc,
  0xbf, 0x6a, 0x58, 0xd5, 0x1b, 0xc3, 0x5f, 0x98, 0x06, 0xd2, 0x40, 0x61,
  0x63, 0xda, 0x32, 0xd3, 0xba, 0xcc, 0x9a, 0xe5, 0xcd, 0x2a, 0x9f, 0x6d,
  0x6d, 0x83, 0x46, 0x50, 0x55, 0x32, 0xa4, 0x52, 0x26, 0xb6, 0xfe, 0xea,
  0xd8, 0x9d, 0xbd, 0x6d, 0x5b, 0x1d, 0x49, 0x60, 0x1b, 0x9c, 0x99, 0x2d,
  0x7a, 0xc2, 0xc6, 0x55, 0xc9, 0xb9, 0x44, 0x1b, 0x07, 0x28, 0xdc, 0x93,
  0xdb, 0x48, 0x6b, 0x54, 0x18, 0x84, 0xce, 0x70, 0x94, 0xa9, 0xf5, 0xcd,
  0xc9, 0xdb, 0xc3, 0x76, 0x06, 0x2e, 0xfd, 0x24, 0xe6, 0x7c, 0x35, 0xec,
  0xea, 0x8d, 0xe1, 0x30, 0x4c, 0x03, 0x69, 0xa0, 0xcd, 0x31, 0x6d, 0x99,
  0x69, 0x5d, 0x66, 0xcd, 0xf2, 0x66, 0x95, 0xcf, 0xb6, 0xb6, 0x41, 0x23,
  0x64, 0x8b, 0x75, 0xf0, 0x2a, 0x6b, 0x56, 0x55, 0xc1, 0x3e, 0x71, 0xcc,
  0xbd, 0x6b, 0x47, 0x19, 0x01, 0xcc, 0xd2, 0xcc, 0xb7, 0xff, 0x05, 0x1a,
  0x28, 0x37, 0x19, 0x52, 0x8d, 0x13, 0x9b, 0x86, 0x75, 0xb2, 0xc5, 0x0a,
  0x87, 0xb3, 0x94, 0x78, 0xc0, 0x6d, 0x30, 0x01, 0x4d, 0x89, 0xa0, 0x83,
  0xa7, 0xb5, 0x04, 0x22, 0xca, 0xdf, 0x89, 0xe4, 0xe5, 0xe9, 0xe9, 0xeb,
  0x97, 0xe7, 0x2f, 0xed, 0xda, 0x48, 0x06, 0x13, 0x67, 0x21, 0x25, 0xd8,
  0xb0, 0x24, 0x28, 0x46, 0x78, 0x72, 0xf3, 0xf7, 0xef, 0xc7, 0x87, 0x67,
  0xdd, 0x83, 0x3d, 0x3d, 0x3b, 0x01, 0xee, 0xd0, 0xef, 0x7f, 0x7a, 0xb9,
  0x5c, 0xce, 0x35, 0xee, 0xf7, 0x3a, 0x6d, 0xd2, 0xcd, 0xe0, 0x56, 0xef,
  0x6f, 0x63, 0x7e, 0x37, 0x76, 0x7e, 0x17, 0x22, 0xc7, 0xc8, 0x9a, 0x4f,
  0x3e, 0xe0, 0x40, 0xab, 0xa9, 0x66, 0xd8, 0xda, 0xdd, 0xa0, 0x0d, 0xa0,
  0x7a, 0x95, 0x35, 0xab, 0xaa, 0x60, 0x87, 0x39, 0xe6, 0xde, 0x35, 0xb2,
  0x8c, 0x74, 0x66, 0x51, 0xe7, 0x3b, 0x07, 0x04, 0x33, 0x87, 0x53, 0x98,
  0x78, 0x40, 0x63, 0xee, 0x9e, 0xd8, 0xbc, 0x0f, 0x3a, 0x78, 0x5a, 0x4b,
  0x20, 0xbf, 0xfc, 0x9d, 0x48, 0x5e, 0x9e, 0x9e, 0xbe, 0x7e, 0x79, 0xfe,
  0xd2, 0xae, 0x8d, 0x04, 0x34, 0x31, 0x17, 0xd2, 0x90, 0x0d, 0x1f, 0x82,
  0xd6, 0x84, 0x27, 0x37, 0x7f, 0xf7, 0x7e, 0x7c, 0x78, 0xd6, 0x3d, 0xd8,
  0xd3, 0xb3, 0x13, 0x00, 0x12, 0xfd, 0xee, 0xc7, 0x97, 0xcb, 0xe5, 0x5c,
  0x83, 0x82, 0xaf, 0xd3, 0x26, 0xdd, 0x0c, 0x6e, 0xf5, 0xfe, 0x36, 0xe6,
  0x77, 0x63, 0xe7, 0x77, 0x21, 0x42, 0x8e, 0x4c, 0xfd, 0xe4, 0x03, 0x0e,
  0x04, 0xd9, 0xfe, 0x85, 0x30, 0xd4, 0x41, 0x2b, 0x57, 0x4c, 0x37, 0x6b,
  0x6e, 0xec, 0xe8, 0x6c, 0xba, 0x6a, 0x94, 0xe4, 0x89, 0xbe, 0x50, 0xac,
  0xdd, 0xdd, 0x97, 0xe0, 0x78, 0x5c, 0xa4, 0x84, 0xb9, 0x00, 0x61, 0x05,
  0x18, 0x42, 0xa3, 0x2c, 0xe8, 0x91, 0xcc, 0x96, 0xb9, 0x58, 0x84, 0xa6,
  0x66, 0x19, 0x47, 0x4e, 0x08, 0x3b, 0x80, 0xa7, 0x14, 0x6c, 0xc8, 0xef,
  0xcc, 0x6d, 0x1c, 0x26, 0x87, 0x52, 0xd4, 0x46, 0x0b, 0x37, 0x3f, 0x08,
  0x1e, 0x6a, 0xac, 0x85, 0x20, 0xcc, 0x3e, 0xce, 0x2b, 0x3c, 0x3c, 0x8d,
  0x8d, 0xae, 0x0c, 0xe2, 0x0a, 0x56, 0xf3, 0x10, 0xa6, 0x8d, 0x4d, 0x27,
  0x03, 0x69, 0x23, 0x92, 0xd7, 0x34, 0x4c, 0x2f, 0x41, 0x5e, 0xe6, 0x51,
  0xa3, 0x40, 0x1b, 0xbb, 0x08, 0xff, 0xda, 0xd9, 0x1b, 0xed, 0x6e, 0x84,
  0x93, 0xc7, 0x65, 0x21, 0x2c, 0x14, 0x1b, 0x38, 0x03, 0x37, 0x6c, 0xca,
  0xf2, 0xde, 0xf9, 0x31, 0x0b, 0x33, 0x2a, 0xe8, 0xd2, 0x8c, 0x1f, 0x9d,
  0xca, 0xf0, 0x24, 0x48, 0xf4, 0x40, 0x72, 0x6e, 0xa5, 0x4c, 0xd1, 0xf0,
  0xc4, 0xa2, 0xbc, 0xc1, 0x4a, 0x0c, 0xa9, 0xcd, 0xe7, 0x2d, 0xd0, 0x9a,
  0x8d, 0xf8, 0x36, 0x17, 0x84, 0x0f, 0x95, 0x75, 0x77, 0x3b, 0x1a, 0x9c,
  0x56, 0xfd, 0xd2, 0x57, 0xe2, 0x6c, 0x56, 0x2b, 0x19, 0x8a, 0x96, 0x12,
  0x7c, 0xcc, 0x00, 0xc3, 0xe5, 0x02, 0xbe, 0x37, 0xf7, 0x93, 0x2f, 0x86,
  0x9a, 0x01, 0x32, 0xc4, 0x20, 0x50, 0x3c, 0x5f, 0x70, 0x49, 0x7a, 0x60,
  0xae, 0xbf, 0x4d, 0x6f, 0xf3, 0xc5, 0x6a, 0x41, 0x1f, 0x03, 0x6d, 0xcb,
  0x63, 0x12, 0x32, 0x20, 0xc7, 0x21, 0x67, 0xa0, 0x10, 0x91, 0x6f, 0xd6,
  0x89, 0x67, 0xb4, 0xc7, 0x84, 0x8c, 0x11, 0xc9, 0x23, 0xb7, 0xbc, 0x82,
  0x52, 0x35, 0x11, 0x53, 0xa8, 0x3b, 0x06, 0xbf, 0xd1, 0x16, 0x52, 0xa4,
  0x15, 0xd4, 0xa5, 0xcd, 0xc9, 0x89, 0xb0, 0x73, 0xc6, 0x44, 0x10, 0xf5,
  0xcd, 0x4b, 0x49, 0xcd, 0xaa, 0xbc, 0x9c, 0xd9, 0x7b, 0x03, 0xfd, 0x30,
  0x2f, 0x56, 0x66, 0x9f, 0xd9, 0x5d, 0xcc, 0x71, 0x86, 0x88, 0x52, 0x93,
  0xdd, 0x52, 0xe2, 0xfc, 0x98, 0xea, 0x21, 0x34, 0xcb, 0xf4, 0xd9, 0xe8,
  0xd1, 0xfe, 0x68, 0x77, 0xd0, 0xb2, 0xd9, 0x05, 0x3a, 0xc2, 0xdc, 0xae,
  0xb4, 0x9a, 0x6a, 0xfa, 0xad, 0xdd, 0x0d, 0xda, 0x00, 0xca, 0x9e, 0xed,
  0x5f, 0x48, 0xe9, 0x38, 0x99, 0x26, 0x92, 0xe9, 0x66, 0xcd, 0x8d, 0x91,
  0x9d, 0x4d, 0x57, 0x8d, 0x92, 0x3c, 0xd1, 0x17, 0xaa, 0xb8, 0xbb, 0xfb,
  0x12, 0x1c, 0x8f, 0x0b, 0xa3, 0x30, 0x17, 0x20, 0x10, 0x01, 0x43, 0x68,
  0x94, 0x22, 0x3d, 0x92, 0xd9, 0x32, 0x17, 0x8b, 0xd0, 0xd4, 0x2c, 0xe3,
  0xb0, 0x0a, 0x81, 0x0a, 0xf0, 0x94, 0x82, 0x0d, 0xf9, 0xad, 0xb9, 0x8d,
  0xc3, 0xe4, 0x50, 0xaa, 0xdd, 0x68, 0xe1, 0xe6, 0x07, 0xc1, 0x43, 0x8d,
  0x35, 0x1f, 0x84, 0xdd, 0xc7, 0x79, 0x85, 0x07, 0xb4, 0xb1, 0xd1, 0x15,
  0x01, 0x5c, 0xda, 0x6a, 0x1e, 0xc2, 0xb4, 0xb1, 0xe9, 0x64, 0x3d, 0x6d,
  0x44, 0x92, 0x9e, 0x86, 0xe9, 0x25, 0xc8, 0xcb, 0x3c, 0x6a, 0xb4, 0x6b,
  0x63, 0x34, 0xe1, 0x5f, 0x3b, 0x7b, 0xa3, 0xdd, 0x8d, 0x70, 0xf2, 0xb8,
  0x2c, 0x04, 0x92, 0x62, 0xa3, 0x6a, 0xe0, 0x86, 0x4d, 0x59, 0xde, 0x3b,
  0x3f, 0x66, 0x61, 0x46, 0x3f, 0x5d, 0x9a, 0xf1, 0xa3, 0x53, 0x19, 0x9e,
  0x04, 0x59, 0x20, 0xc8, 0xdc, 0xad, 0x94, 0x29, 0x1a, 0x9e, 0x58, 0x94,
  0x37, 0x58, 0x89, 0x21, 0xb5, 0xf9, 0xbc, 0x85, 0x66, 0xb3, 0x11, 0xdf,
  0xe6, 0x82, 0x80, 0xa3, 0xb2, 0xee, 0x6e, 0x47, 0x23, 0xd7, 0xaa, 0x7c,
  0xfa, 0x1a, 0x9e, 0x4d, 0x79, 0x25, 0x2b, 0xd2, 0x52, 0x82, 0x0f, 0x26,
  0x60, 0xb8, 0x5c, 0xc0, 0xf7, 0xe6, 0x7e, 0x66, 0xc6, 0x50, 0xd3, 0x43,
  0x86, 0x18, 0x04, 0x5a, 0xe9, 0x0b, 0xae, 0x55, 0x0f, 0x6c, 0xf9, 0xb7,
  0xe9, 0x6d, 0xbe, 0x58, 0x2d, 0xe8, 0x63, 0xa0, 0x6d, 0x79, 0x4c, 0xe2,
  0x09, 0xe4, 0x55, 0xe4, 0xf4, 0x14, 0x22, 0xf2, 0xcd, 0x3a, 0xf1, 0x2c,
  0xfa, 0x98, 0x90, 0x31, 0x22, 0x79, 0xe4, 0x96, 0x47, 0xca, 0x02, 0x05,
  0x1c, 0xea, 0x8e, 0x37, 0xc0, 0xe8, 0x07, 0x29, 0x72, 0x0e, 0xea, 0xd2,
  0x26, 0xec, 0x44, 0xd8, 0x39, 0x83, 0x25, 0x88, 0x0e, 0xe7, 0xe5, 0xab,
  0x66, 0x55, 0x5e, 0xce, 0xec, 0xbd, 0x81, 0xfe, 0x98, 0x17, 0x2b, 0xb3,
  0xcf, 0xec, 0x4b, 0xe6, 0x20, 0x04, 0x7e, 0x15, 0x78, 0x08, 0x29, 0xab,
  0x7e, 0x4c, 0xc5, 0x12, 0x9a, 0x82, 0xfa, 0x6c, 0xf4, 0x68, 0x7f, 0xb4,
  0x3b, 0x68, 0x19, 0xf4, 0x82, 0x29, 0x61, 0x6e, 0xd7, 0x34, 0x5f, 0xd8,
  0x69, 0xbe, 0xb0, 0x65, 0xa5, 0xa3, 0x7f, 0x99, 0x6f, 0x86, 0x92, 0xbe,
  0x17, 0xe9, 0x2d, 0x1d, 0x5f, 0xf4, 0x58, 0xcb, 0xe4, 0xc5, 0xb7, 0x27,
  0xe3, 0xf3, 0xbd, 0x83, 0xd3, 0x93, 0x33, 0xf3, 0x5f, 0xfc, 0x7d, 0x9f,
  0xfe, 0xbe, 0x1f, 0x18, 0x8e, 0x6f, 0x24, 0x49, 0x56, 0xeb, 0x71, 0x48,
  0x43, 0x21, 0x8d, 0x86, 0x77, 0x33, 0xf1, 0x06, 0x82, 0xef, 0x94, 0xd8,
  0xe0, 0xd4, 0x16, 0x2e, 0x76, 0x8f, 0xd8, 0xfb, 0x94, 0xe6, 0xd1, 0x8d,
  0x7a, 0xd3, 0xd1, 0xbf, 0xcc, 0x71, 0x43, 0x19, 0xe1, 0x8b, 0xf4, 0x96,
  0x8e, 0x2f, 0x7a, 0xac, 0x65, 0xf2, 0xe2, 0x9b, 0x93, 0xf1, 0xf9, 0xde,
  0xc1, 0xe9, 0xc9, 0x99, 0xf9, 0x2f, 0xfe, 0xbe, 0x4f, 0x7f, 0xdf, 0x0f,
  0xac, 0xca, 0x37, 0x92, 0x41, 0xab, 0xc5, 0x3a, 0xa4, 0xa1, 0x90, 0x46,
  0xc3, 0xbb, 0x99, 0x78, 0x03, 0x41, 0x2f, 0x27, 0x36, 0x38, 0xb5, 0x15,
  0x8d, 0xdd, 0x23, 0xf6, 0x3e, 0xa5, 0x49, 0x76, 0xa3, 0x24, 0x4c, 0xe4,
  0xcb, 0x1b, 0xd5, 0xa6, 0xa4, 0x16, 0x5e, 0xab, 0xec, 0xbb, 0xbe, 0x6e,
  0x92, 0x30, 0x57, 0x2f, 0x6f, 0x54, 0x9b, 0x92, 0x92, 0x77, 0x2d, 0xa6,
  0xef, 0xba, 0xb3, 0xb9, 0x5c, 0x59, 0x4a, 0x70, 0x14, 0x96, 0x8e, 0xd2,
  0xbf, 0xda, 0xbf, 0x9a, 0xce, 0x8d, 0x92, 0x9f, 0x21, 0x5d, 0x64, 0x96,
  0x71, 0x0c, 0x05, 0x3f, 0x89, 0xd9, 0x1e, 0xe6, 0xfa, 0x49, 0x55, 0x42,
  0x90, 0x43, 0x48, 0x14, 0xa9, 0x81, 0x1b, 0x33, 0x1b, 0x33, 0xc7, 0xdc,
  0x68, 0xe1, 0xbc, 0x1d, 0x45, 0x16, 0x14, 0x01, 0x30, 0x5c, 0x9c, 0xef,
  0xae, 0x63, 0x96, 0xfa, 0x1c, 0xc5, 0xab, 0xa3, 0xdc, 0xb0, 0xf6, 0xaf,
  0xa6, 0x73, 0xa3, 0xdd, 0x67, 0xc8, 0x25, 0x99, 0x65, 0x1c, 0x60, 0xc1,
  0x4f, 0x62, 0x86, 0x89, 0xb9, 0x7e, 0x52, 0xb2, 0x10, 0x24, 0x18, 0x12,
  0x45, 0x6a, 0x54, 0xc7, 0xcc, 0xc6, 0xcc, 0x31, 0x37, 0x9a, 0x38, 0x6f,
  0x47, 0x91, 0x05, 0x15, 0x02, 0x8c, 0x23, 0xe7, 0x3b, 0xb1, 0xa8, 0x48,
  0xa7, 0xa2, 0x5a, 0x7c, 0xaa, 0xaa, 0x7f, 0x77, 0x72, 0x9e, 0xa4, 0x17,
  0x17, 0x0a, 0x01, 0x80, 0xca, 0x03, 0x68, 0xac, 0x3b, 0x4b, 0x96, 0x64,
  0x69, 0x13, 0xcb, 0xce, 0x10, 0x7d, 0xe4, 0xfc, 0x78, 0xbc, 0x03, 0x2f,
  0x15, 0xe7, 0xb9, 0x8d, 0xdf, 0x1d, 0x0d, 0x5a, 0xee, 0x68, 0x3f, 0xbb,
  0x65, 0x1b, 0x92, 0x32, 0xae, 0x50, 0xa4, 0x9e, 0x2c, 0x74, 0xc0, 0x32,
  0xc8, 0x9b, 0xa3, 0x23, 0xdd, 0x90, 0x82, 0xaf, 0x0d, 0x3a, 0xda, 0x8d,
  0x44, 0x03, 0xa3, 0x64, 0xfa, 0x2e, 0x96, 0xcd, 0x5d, 0x58, 0x16, 0x4a,
  0x9f, 0xca, 0xed, 0xdf, 0x9d, 0x9c, 0x27, 0xe9, 0xc5, 0x85, 0x62, 0x03,
  0xa0, 0x2c, 0x01, 0x1a, 0xeb, 0xce, 0x92, 0x25, 0x59, 0xda, 0xc4, 0x52,
  0x37, 0x44, 0x1f, 0x39, 0x3f, 0x1e, 0xef, 0xc0, 0x85, 0xc5, 0x49, 0x70,
  0xe3, 0x77, 0x47, 0x83, 0x96, 0xaf, 0xda, 0x4f, 0x7d, 0xd9, 0x86, 0xa4,
  0x8c, 0x2b, 0x14, 0xa9, 0x27, 0x0b, 0x1d, 0xe2, 0x0c, 0x92, 0xea, 0xe8,
  0x48, 0x37, 0xa4, 0x1a, 0x6c, 0x83, 0x8e, 0x76, 0x23, 0xd1, 0xa8, 0x29,
  0xd9, 0xc5, 0x8b, 0x65, 0x73, 0x17, 0xd6, 0x8b, 0x92, 0x6f, 0x03, 0x38,
  0xee, 0x0b, 0xc0, 0xad, 0x40, 0xe9, 0xd8, 0x80, 0x49, 0x82, 0x65, 0xd1,
  0x92, 0x36, 0x46, 0x3c, 0xec, 0xfe, 0x06, 0x8d, 0x4a, 0x83, 0x9a, 0xbf,
  0x63, 0x4c, 0x22, 0xda, 0x49, 0x16, 0xcb, 0xe0, 0xe7, 0x0f, 0x79, 0x83,
  0x27, 0x76, 0x78, 0x33, 0x31, 0x5b, 0x8a, 0xa6, 0xd4, 0x01, 0x06, 0x53,
  0x56, 0xf9, 0x25, 0x52, 0x01, 0xba, 0xd5, 0x61, 0x6e, 0x22, 0x81, 0xf3,
  0x09, 0xca, 0x58, 0xdd, 0x6c, 0x78, 0xde, 0x82, 0x26, 0xc8, 0xc1, 0xa7,
  0xcc, 0xd0, 0x4a, 0xed, 0x19, 0x9d, 0x0e, 0xf8, 0x4f, 0x13, 0xd1, 0xe3,
  0x59, 0xd9, 0x33, 0xab, 0x83, 0xdc, 0x71, 0x71, 0x1e, 0xad, 0xee, 0xd1,
  0xbb, 0x44, 0x80, 0x37, 0x47, 0x8d, 0x32, 0x70, 0x8e, 0x0c, 0x75, 0x87,
  0x2c, 0x50, 0x3a, 0x36, 0x60, 0x96, 0x60, 0x59, 0xb4, 0xa4, 0x8d, 0x11,
  0x0f, 0xbb, 0xbf, 0x41, 0xa3, 0xd2, 0xa0, 0xe6, 0xef, 0x18, 0x93, 0x88,
  0x76, 0x92, 0xc5, 0xd2, 0xfb, 0xf9, 0x43, 0xde, 0xe0, 0x89, 0x1d, 0xde,
  0x4c, 0xcc, 0xd6, 0xa9, 0x29, 0x75, 0x80, 0xc1, 0x94, 0x55, 0x7e, 0x89,
  0x3c, 0x81, 0x6e, 0xe9, 0x98, 0x9b, 0x48, 0xe0, 0x99, 0x82, 0x32, 0x56,
  0x37, 0x1b, 0x9e, 0x2b, 0xa1, 0x09, 0x12, 0xf4, 0x29, 0x6d, 0xb4, 0x52,
  0x93, 0x46, 0xa7, 0x03, 0xfe, 0xd3, 0x44, 0xf4, 0x78, 0x56, 0xf6, 0xcc,
  0xea, 0x20, 0x77, 0x5c, 0x10, 0x48, 0x4b, 0x7f, 0xf4, 0x2e, 0x11, 0x12,
  0xce, 0x51, 0xa3, 0x0c, 0x9c, 0xc3, 0x46, 0xdd, 0xe1, 0x18, 0xb1, 0xcd,
  0x63, 0x60, 0x36, 0xc3, 0x11, 0xb4, 0xb0, 0x63, 0x63, 0x6f, 0xff, 0xd9,
  0x68, 0xd7, 0xfc, 0x9f, 0x39, 0x14, 0xd1, 0x8f, 0x08, 0x15, 0xca, 0xa1,
  0xff, 0xd8, 0x27, 0xb3, 0xdb, 0x2e, 0x49, 0xb2, 0x00, 0x2a, 0xab, 0xcb,
  0x8d, 0xb5, 0xa5, 0xaa, 0x2d, 0x91, 0x82, 0x83, 0xb4, 0xe2, 0x24, 0x9d,
  0xc9, 0x4f, 0xf4, 0x8e, 0x57, 0xab, 0x79, 0x24, 0x73, 0xcf, 0xf3, 0x14,
  0x43, 0x3b, 0x9b, 0x5f, 0x8b, 0x9f, 0xf8, 0x5b, 0xf0, 0x26, 0x2e, 0xd5,
  0x1b, 0xb5, 0xf2, 0x9e, 0x9e, 0xb7, 0xdc, 0x7e, 0xaf, 0xc4, 0x64, 0x23,
  0xce, 0x3c, 0x34, 0x97, 0xe1, 0x45, 0x79, 0x71, 0x51, 0x67, 0x4d, 0x57,
  0x00, 0xbd, 0x92, 0x47, 0x76, 0xce, 0x08, 0xc7, 0x90, 0x38, 0x95, 0x16,
  0xd5, 0x24, 0x6d, 0xf4, 0x9d, 0x44, 0x12, 0xcd, 0x98, 0x6d, 0xf1, 0x70,
  0xa3, 0x48, 0x1d, 0x81, 0xff, 0x7b, 0x4d, 0x02, 0xe1, 0xe2, 0x77, 0xc5,
  0x74, 0x21, 0x6b, 0x99, 0xe1, 0x5a, 0x44, 0xd2, 0x75, 0xc1, 0xd7, 0xf4,
  0x4a, 0x7c, 0xcc, 0x97, 0x4b, 0x98, 0x37, 0x0c, 0x64, 0x46, 0x64, 0x6b,
  0x63, 0x64, 0x14, 0xaa, 0x25, 0x52, 0xd6, 0x84, 0x40, 0xa3, 0x24, 0x4f,
  0x45, 0xe6, 0x4f, 0xb2, 0x8b, 0x30, 0xce, 0xc3, 0x79, 0x8b, 0x3e, 0x7a,
  0x8d, 0x94, 0xe2, 0xce, 0x80, 0x54, 0x53, 0xa4, 0xca, 0x62, 0x2e, 0x3c,
  0x5c, 0x07, 0xa9, 0xef, 0x1b, 0x44, 0xee, 0xbf, 0xab, 0xbf, 0xb2, 0xae,
  0xb6, 0xf1, 0xd1, 0xff, 0x75, 0xe8, 0xb0, 0x86, 0x2c, 0x98, 0x0f, 0x57,
  0x70, 0x04, 0xad, 0xfa, 0xd8, 0xd8, 0xdb, 0x7f, 0x36, 0xda, 0x35, 0xff,
  0x67, 0x0e, 0x45, 0xf4, 0x23, 0x82, 0x8b, 0x72, 0xb0, 0x40, 0xf6, 0xc9,
  0xec, 0xb6, 0x4b, 0x92, 0x2c, 0x80, 0xca, 0xea, 0x72, 0x63, 0x6d, 0x0d,
  0x6b, 0x4b, 0xa4, 0xe0, 0x20, 0xad, 0x38, 0x49, 0x67, 0xf2, 0x13, 0xbd,
  0xe3, 0xd5, 0x6a, 0x1e, 0x49, 0xeb, 0xf3, 0xdc, 0xc8, 0xd0, 0xce, 0xe6,
  0xd7, 0xe2, 0x44, 0xfe, 0x06, 0xbc, 0x89, 0xeb, 0xf8, 0x46, 0xad, 0xa4,
  0xa8, 0xe7, 0x2d, 0x9f, 0xe0, 0x2b, 0x31, 0xd9, 0x88, 0x33, 0x0f, 0xcd,
  0x65, 0x78, 0x51, 0x5e, 0x5c, 0xd4, 0x59, 0xd3, 0x15, 0x40, 0xaf, 0xe4,
  0x91, 0x9d, 0x33, 0x02, 0x38, 0x24, 0x4e, 0xa5, 0x15, 0x37, 0x49, 0x1b,
  0x96, 0x27, 0x91, 0x2c, 0x34, 0x66, 0x5b, 0x3c, 0xdc, 0x28, 0x52, 0x64,
  0xe0, 0xff, 0x5e, 0x33, 0x44, 0xb8, 0x2a, 0x5e, 0xc1, 0x5e, 0xa8, 0xdc,
  0x8a, 0x71, 0x5c, 0x44, 0xd2, 0x75, 0x51, 0xd9, 0xf4, 0x4a, 0x7c, 0xcc,
  0x97, 0x4b, 0x98, 0x37, 0x8c, 0x70, 0x46, 0x64, 0x6b, 0x03, 0x68, 0x14,
  0xc7, 0x25, 0x52, 0xd6, 0x6c, 0x41, 0xa3, 0x24, 0x4f, 0x45, 0xe6, 0x4f,
  0xb2, 0x8b, 0x30, 0x08, 0xc4, 0x49, 0x8d, 0x3e, 0xac, 0x8d, 0xd4, 0xe8,
  0xce, 0x00, 0x61, 0x53, 0xa4, 0xca, 0x62, 0x2e, 0x3c, 0xc0, 0x07, 0x29,
  0xfe, 0x1b, 0x44, 0xee, 0xbf, 0x2b, 0xce, 0xb2, 0x7e, 0xb8, 0xf1, 0xd1,
  0xff, 0x39, 0x74, 0x20, 0x44, 0x16, 0xe5, 0x87, 0xcb, 0x5d, 0x62, 0xc5,
  0xb4, 0xc4, 0xea, 0x83, 0xcc, 0x2d, 0x1c, 0xbe, 0x32, 0xe7, 0xb5, 0x41,
  0x53, 0x71, 0xd9, 0x24, 0x65, 0xa7, 0xe2, 0x82, 0xec, 0x1e, 0x68, 0x12,
  0xa4, 0x0d, 0xed, 0xa0, 0xbc, 0x3f, 0x10, 0x0d, 0x0c, 0x45, 0xc9, 0x2e,
  0x44, 0x59, 0x23, 0xdd, 0x8e, 0x46, 0x0a, 0xe3, 0xfc, 0xb2, 0x12, 0x51,
  0x16, 0x77, 0xf2, 0x02, 0x2a, 0x23, 0x2b, 0x30, 0x41, 0xd5, 0x85, 0x96,
  0xba, 0x32, 0xa8, 0xc9, 0xaa, 0xf9, 0x17, 0x86, 0x47, 0x2a, 0xd0, 0x2f,
  0xa1, 0xd5, 0x79, 0x44, 0x3d, 0x65, 0xa2, 0x06, 0x24, 0xe7, 0xf0, 0x2f,
  0xc6, 0xca, 0x7e, 0xa1, 0x6e, 0x8a, 0xbe, 0xfa, 0x7f, 0x75, 0x6a, 0xa0,
  0x4e, 0x82, 0x8c, 0x30, 0xa2, 0x0d, 0x0b, 0x43, 0xa3, 0x5b, 0xcd, 0xfe,
  0x94, 0x94, 0x74, 0x19, 0xc2, 0xfb, 0xec, 0xde, 0xf9, 0x0b, 0xc2, 0xb6,
  0xf1, 0xaa, 0xbc, 0x6d, 0x79, 0xe4, 0x08, 0x81, 0xa8, 0x39, 0x8f, 0x50,
  0x73, 0xee, 0xa4, 0x8c, 0xa1, 0x46, 0x43, 0x1e, 0xc8, 0xdc, 0xbc, 0x18,
  0x72, 0xfd, 0xb4, 0x3e, 0x4b, 0xf1, 0x32, 0x80, 0xb3, 0x09, 0x39, 0xf2,
  0x11, 0xb1, 0x19, 0xde, 0x48, 0xee, 0x04, 0xa9, 0xb5, 0xf4, 0xd9, 0x98,
  0xa7, 0x9c, 0xdd, 0x8d, 0xe4, 0x23, 0xe4, 0x8f, 0xc3, 0x3d, 0xf6, 0xd1,
  0xe8, 0xce, 0xc5, 0x00, 0x3f, 0xa5, 0x5a, 0x53, 0x7b, 0xc9, 0xd8, 0xb7,
  0xd1, 0x64, 0x1c, 0x97, 0xc8, 0x22, 0xba, 0xac, 0xf7, 0xac, 0x3c, 0xea,
  0xb9, 0x51, 0xde, 0x65, 0x8d, 0x64, 0x87, 0xf0, 0xe4, 0xb5, 0xfc, 0x8a,
  0x4a, 0xb8, 0x8e, 0x2e, 0x3a, 0xc3, 0x11, 0x2a, 0x5c, 0xd6, 0xb4, 0x8b,
  0xf2, 0x25, 0x4c, 0xcb, 0x50, 0x58, 0x70, 0x77, 0x0e, 0xcc, 0x35, 0xd8,
  0x50, 0xd7, 0x2b, 0xaf, 0x20, 0x9e, 0x9d, 0xa0, 0xd3, 0x81, 0x9b, 0xa8,
  0x99, 0xc5, 0x68, 0x92, 0x75, 0x5f, 0xbd, 0x90, 0x82, 0x10, 0xe8, 0x67,
  0x3c, 0x00, 0xeb, 0x8c, 0x02, 0xf4, 0xee, 0x6b, 0x9a, 0x9b, 0x12, 0x29,
  0x1c, 0xf4, 0x0a, 0x47, 0x91, 0x25, 0x53, 0xcd, 0xd4, 0x33, 0xa2, 0x13,
  0x35, 0x5c, 0x58, 0xec, 0xa2, 0x9b, 0x94, 0x28, 0xcd, 0x8e, 0x1f, 0x2b,
  0x6f, 0xf0, 0x52, 0x1c, 0x87, 0x13, 0x47, 0xce, 0x0e, 0x25, 0x27, 0xea,
  0x92, 0x95, 0x87, 0x40, 0xf3, 0x46, 0xb0, 0x6c, 0x36, 0x5e, 0xfd, 0x28,
  0x01, 0xcf, 0xd8, 0x4d, 0xe1, 0x2d, 0xbc, 0xb9, 0x2a, 0xe7, 0x59, 0x2c,
  0x0a, 0xe2, 0x55, 0xf5, 0x12, 0x86, 0x0b, 0x32, 0x77, 0xc9, 0xa1, 0x7c,
  0x4d, 0x49, 0xc1, 0xad, 0xe8, 0x88, 0xd1, 0xef, 0xb2, 0x14, 0x35, 0x45,
  0x36, 0x2f, 0xfe, 0x7a, 0x10, 0x64, 0xaa, 0x9b, 0x7b, 0x3e, 0x29, 0x6b,
  0x4b, 0x2f, 0xa8, 0x9d, 0x85, 0x04, 0xb9, 0x49, 0x2b, 0x62, 0xcc, 0x02,
  0x86, 0xa5, 0x38, 0xa1, 0x7e, 0x5a, 0x20, 0x54, 0xc1, 0x6e, 0x49, 0x43,
  0x43, 0xe6, 0x16, 0x0e, 0x5f, 0x99, 0xf3, 0xda, 0xa0, 0xa9, 0xb8, 0x54,
  0x93, 0xb2, 0x53, 0x8e, 0x41, 0x76, 0x0f, 0x34, 0x09, 0xd2, 0x86, 0x76,
  0x50, 0xf7, 0x1f, 0x88, 0x06, 0xc6, 0xa8, 0x64, 0xff, 0xa2, 0xac, 0x91,
  0x6e, 0x47, 0x23, 0x55, 0x73, 0x7e, 0xcd, 0x89, 0x28, 0x8b, 0x3b, 0x79,
  0x01, 0x95, 0x91, 0x15, 0x98, 0xa0, 0x24, 0x43, 0xeb, 0x60, 0x19, 0xed,
  0x64, 0xd5, 0xfc, 0x0b, 0x63, 0x27, 0x15, 0xe8, 0x97, 0x60, 0xec, 0x3c,
  0xa2, 0x9e, 0x32, 0x51, 0x03, 0xab, 0x73, 0xf8, 0x17, 0x63, 0x65, 0xbf,
  0x50, 0x37, 0x45, 0x1f, 0x30, 0x80, 0x3a, 0x35, 0x50, 0x44, 0x41, 0x46,
  0x18, 0xd1, 0x86, 0xc5, 0xa7, 0xd1, 0xad, 0x66, 0x58, 0x9d, 0x94, 0x74,
  0x19, 0x02, 0x02, 0xed, 0xde, 0xf9, 0x0b, 0x02, 0xbd, 0xf1, 0xca, 0xbf,
  0x6d, 0xed, 0xe4, 0x08, 0x51, 0xaa, 0x39, 0x8f, 0x50, 0x73, 0x62, 0xa5,
  0x8c, 0xa1, 0x46, 0x43, 0x1e, 0xc8, 0xdc, 0xbc, 0x18, 0x72, 0x71, 0xb5,
  0x3e, 0x4b, 0xc1, 0x34, 0xa0, 0xb6, 0x09, 0x39, 0xf2, 0x11, 0xb1, 0x19,
  0xde, 0x48, 0x62, 0x05, 0xa9, 0xb5, 0xf4, 0xd9, 0x98, 0x1b, 0x9d, 0x7d,
  0x91, 0xe4, 0x40, 0xe4, 0x8f, 0xc3, 0x41, 0xf6, 0xd1, 0xe8, 0xce, 0xc5,
  0x00, 0x3f, 0xa5, 0x42, 0x54, 0x7b, 0xc9, 0xd8, 0xb7, 0xd1, 0x64, 0x1c,
  0xb4, 0xc8, 0x22, 0xba, 0xac, 0xf7, 0xac, 0x3c, 0xea, 0xb9, 0x51, 0xde,
  0x65, 0x8d, 0xa4, 0x8e, 0xf0, 0xe4, 0xb5, 0x36, 0x8b, 0xea, 0xbb, 0x8e,
  0x2e, 0x3a, 0xc3, 0x11, 0x5c, 0x5c, 0xd6, 0xb4, 0xab, 0xf5, 0x25, 0x86,
  0xcb, 0x18, 0x59, 0xf0, 0x85, 0x0e, 0xcc, 0x35, 0xd8, 0x50, 0xbf, 0x2c,
  0xaf, 0x20, 0x9e, 0xba, 0xa0, 0xd3, 0x81, 0x9b, 0xa8, 0x99, 0xc5, 0x68,
  0x92, 0x75, 0x5f, 0xbd, 0x90, 0x02, 0x1d, 0xe8, 0xa7, 0x43, 0x00, 0x04,
  0x8d, 0xa2, 0xf7, 0xee, 0x6b, 0x9a, 0xb8, 0x12, 0xa9, 0x2a, 0xf4, 0xaa,
  0x4a, 0x91, 0x42, 0x53, 0xcd, 0xd4, 0x33, 0xa2, 0x13, 0x35, 0x5c, 0x58,
  0xec, 0xa2, 0x9b, 0x94, 0x28, 0xcd, 0x8e, 0x1f, 0xab, 0x7d, 0xf0, 0xf2,
  0x1f, 0x87, 0x13, 0x47, 0xce, 0x0e, 0x3e, 0x27, 0x9a, 0xa6, 0x24, 0x0f,
  0x81, 0xe6, 0x8d, 0x60, 0xd9, 0x6c, 0xbc, 0xe2, 0x52, 0x42, 0xa4, 0xb1,
  0x9b, 0xc2, 0x5b, 0x78, 0x73, 0x55, 0xce, 0xb3, 0x58, 0x88, 0xc4, 0x2b,
  0xf9, 0x25, 0x70, 0x17, 0xa4, 0xf5, 0x92, 0xb7, 0xf9, 0x9a, 0x32, 0x86,
  0x5b, 0xa1, 0x13, 0xa3, 0xdf, 0x65, 0x29, 0x0a, 0x8e, 0x6c, 0xd2, 0xfc,
  0xf5, 0x20, 0x48, 0x63, 0x37, 0xf7, 0x7c, 0x52, 0xd6, 0x96, 0x5e, 0x50,
  0x58, 0x0b, 0x09, 0x72, 0x93, 0x56, 0xc4, 0x98, 0x05, 0x25, 0x4b, 0x01,
  0x44, 0xfd, 0x9c, 0x41, 0xa8, 0x82, 0xdd, 0x7a, 0x87, 0x1c, 0xc5, 0xe8,
  0x86, 0x4c, 0x8c, 0x02, 0x00, 0x37, 0x2d, 0xd1, 0x0e, 0x86, 0x14, 0xfc,
  0x8e, 0x7a, 0x73, 0x43, 0x26, 0x46, 0x01, 0x80, 0xcb, 0x96, 0x68, 0x07,
  0x43, 0x0a, 0xcc, 0xd5, 0x15, 0x21, 0xde, 0x4a, 0x51, 0xba, 0xb9, 0x87,
  0x57, 0x90, 0xe9, 0x79, 0xb3, 0x4a, 0x9b, 0x87, 0xe5, 0x64, 0xf7, 0xf1,
  0x26, 0x66, 0x4e, 0x7e, 0xca, 0x69, 0x1f, 0x34, 0x43, 0x4f, 0xa0, 0xd0,
  0x3f, 0xc8, 0x17, 0xb8, 0x6b, 0xff, 0xe7, 0x1e, 0xc6, 0x74, 0x4a, 0xc0,
  0x7d, 0x57, 0x6d, 0xe4, 0x27, 0x2a, 0xbb, 0x15, 0x79, 0xa2, 0xc5, 0x6d,
  0x3c, 0xa6, 0x8a, 0xfb, 0xa3, 0x48, 0x2c, 0x9f, 0x02, 0x60, 0x66, 0x3a,
  0xf3, 0x3b, 0x37, 0xa0, 0x57, 0x15, 0xab, 0x49, 0xdc, 0x1e, 0x2a, 0x9e,
  0xfd, 0x42, 0x90, 0x98, 0xb4, 0x31, 0x36, 0x2a, 0x38, 0x7f, 0xf3, 0x60,
  0x43, 0x41, 0x46, 0x2d, 0x6a, 0x92, 0x70, 0x11, 0xa9, 0xcb, 0xd2, 0x12,
  0x0f, 0xf1, 0x17, 0xd3, 0xf5, 0xef, 0x0e, 0x07, 0xc4, 0xed, 0xbd, 0x2f,
  0xbf, 0x7f, 0x79, 0xfc, 0xfe, 0x70, 0xef, 0x8b, 0x04, 0xff, 0xda, 0xe7,
  0x7f, 0xed, 0x6f, 0xc4, 0x8e, 0xcb, 0x30, 0xaa, 0xcd, 0x2f, 0x37, 0x93,
  0xfa, 0x6e, 0x31, 0x29, 0xe7, 0xf6, 0xc0, 0x64, 0x2b, 0x34, 0x56, 0x36,
  0x10, 0x29, 0x6e, 0xab, 0xb3, 0xc5, 0x4f, 0xde, 0x65, 0xd9, 0xb5, 0xe4,
  0x15, 0x2a, 0xbb, 0xa1, 0x20, 0x9d, 0x5f, 0x2e, 0xdc, 0x50, 0x31, 0xb5,
  0xf2, 0x30, 0x09, 0xd7, 0xf5, 0xe5, 0x7a, 0x92, 0x50, 0xd2, 0x8b, 0x5d,
  0x47, 0x38, 0x07, 0x8b, 0x17, 0x87, 0xdc, 0xec, 0x33, 0x8c, 0x30, 0xa1,
  0xcc, 0x70, 0x27, 0xba, 0x52, 0x16, 0x5e, 0x9a, 0x5f, 0x17, 0x03, 0x01,
  0x80, 0x1b, 0x77, 0x02, 0x31, 0xb0, 0x59, 0x65, 0x96, 0xf5, 0xd2, 0xaa,
  0xf1, 0x6e, 0x77, 0xb8, 0x89, 0xe8, 0x2e, 0x1e, 0x02, 0xd7, 0x31, 0x40,
  0xbf, 0x86, 0x9a, 0x81, 0xe1, 0x5c, 0x1d, 0x30, 0x46, 0x67, 0xd0, 0xac,
  0xd5, 0x9f, 0x91, 0x78, 0x18, 0xcf, 0x16, 0x2d, 0x52, 0xe0, 0x16, 0x93,
  0x56, 0xd4, 0x8f, 0x7d, 0xcd, 0x21, 0xc2, 0x0a, 0xe3, 0xbd, 0x98, 0xcd,
  0xa1, 0x8c, 0x92, 0x45, 0x90, 0x80, 0x55, 0x18, 0x4d, 0x72, 0xcb, 0xb0,
  0xf7, 0x6d, 0x1f, 0xf6, 0x43, 0x8f, 0x4f, 0xdc, 0x12, 0x8d, 0x0d, 0x9a,
  0xf6, 0xc4, 0x0a, 0xce, 0xaf, 0x5a, 0x82, 0x46, 0x55, 0x3e, 0xad, 0x61,
  0xe6, 0x10, 0xac, 0x48, 0x0e, 0x1e, 0x86, 0xc9, 0x14, 0x09, 0x9a, 0xf3,
  0x34, 0x00, 0x9c, 0xa1, 0xbb, 0xa6, 0x88, 0x17, 0x88, 0xe5, 0x5b, 0xc2,
  0x37, 0xdf, 0xbf, 0x9b, 0x67, 0xdb, 0x6a, 0x18, 0xa8, 0xb0, 0xdb, 0x79,
  0x5b, 0xfe, 0xcd, 0xcc, 0x3b, 0x95, 0x8f, 0xc4, 0x64, 0xa6, 0x88, 0xc0,
  0xde, 0x99, 0x3b, 0xfe, 0xc2, 0x95, 0xe0, 0x3e, 0xd7, 0x68, 0xd9, 0xc6,
  0x14, 0xe7, 0x85, 0x5e, 0x46, 0xd9, 0xd8, 0x01, 0xe9, 0x88, 0x76, 0x11,
  0x48, 0x68, 0x0f, 0x56, 0xc6, 0x90, 0x72, 0x29, 0x49, 0x38, 0x96, 0xc4,
  0x44, 0xec, 0x74, 0x59, 0x78, 0x57, 0xa7, 0xea, 0x11, 0x44, 0x87, 0xb7,
  0x59, 0x35, 0x05, 0x9a, 0xc4, 0xd4, 0xe8, 0xa5, 0xc4, 0x4f, 0x2f, 0xc4,
  0x3d, 0x85, 0x74, 0x29, 0x49, 0x7c, 0x6f, 0x43, 0xbf, 0x90, 0xf8, 0x55,
  0x3a, 0xeb, 0x25, 0x31, 0x4a, 0x6f, 0x98, 0x1a, 0xc2, 0x18, 0x59, 0xa4,
  0x3b, 0x15, 0x90, 0x6d, 0xf6, 0xa1, 0x75, 0x64, 0x14, 0x4e, 0x08, 0x92,
  0xf2, 0x68, 0x87, 0xf5, 0x45, 0xef, 0x34, 0x85, 0x5c, 0x68, 0x2e, 0x8c,
  0x5b, 0xe6, 0xa2, 0x43, 0x40, 0x03, 0x20, 0xf8, 0xa7, 0xfe, 0x0c, 0x44,
  0x7b, 0x3a, 0x04, 0xd1, 0x41, 0xd1, 0x92, 0xe2, 0x4e, 0x41, 0xa3, 0xb6,
  0x48, 0x6c, 0xb2, 0x72, 0xa8, 0xd0, 0x82, 0xa4, 0x79, 0x85, 0xf5, 0xc6,
  0xf3, 0xf2, 0x06, 0x31, 0x98, 0x36, 0xd0, 0xa7, 0x62, 0xfa, 0x70, 0xda,
  0x1c, 0xf3, 0xe5, 0x21, 0x74, 0x25, 0xfe, 0xec, 0x48, 0x21, 0x26, 0xa2,
  0x14, 0xa0, 0x15, 0xb3, 0xdd, 0x62, 0xa3, 0xd4, 0x25, 0x49, 0x34, 0xec,
  0x4c, 0x66, 0xfd, 0xc2, 0xe1, 0x6c, 0xc5, 0x04, 0x1b, 0xad, 0x78, 0x52,
  0x36, 0x57, 0x5e, 0xaa, 0x29, 0xb0, 0xfb, 0xe0, 0xe7, 0xb9, 0x58, 0x35,
  0x64, 0x04, 0xa8, 0x19, 0xd8, 0x48, 0x36, 0xb1, 0x38, 0x8b, 0x82, 0xc4,
  0x86, 0x8f, 0xc0, 0x78, 0xc3, 0x12, 0x2d, 0x4e, 0x2d, 0x72, 0x64, 0x0b,
  0x4a, 0x06, 0x07, 0x5d, 0x1a, 0x03, 0x98, 0x60, 0x04, 0xcd, 0x37, 0x91,
  0x8b, 0x54, 0xd7, 0x80, 0x8c, 0xa3, 0xac, 0x53, 0xb3, 0xb1, 0x01, 0xaa,
  0x04, 0x61, 0x21, 0x15, 0xfe, 0x91, 0x6e, 0x31, 0xc2, 0x8d, 0xc3, 0x67,
  0x62, 0xe8, 0x0b, 0x58, 0xed, 0x13, 0x39, 0x9a, 0x9a, 0xee, 0x2f, 0xe8,
  0x21, 0xe2, 0x14, 0xb1, 0xfa, 0x6b, 0xcf, 0x85, 0xfd, 0xa7, 0x8d, 0x9a,
  0xc0, 0xc8, 0xab, 0x6a, 0xc6, 0xc9, 0x25, 0xa4, 0x61, 0x9b, 0xfb, 0x4e,
  0xdb, 0x1d, 0x32, 0xae, 0xd4, 0xc5, 0xdf, 0xc8, 0xaa, 0xe8, 0xfa, 0xb0,
  0x96, 0x33, 0x52, 0xfb, 0xf4, 0x1d, 0x52, 0x94, 0x3c, 0xbc, 0xcb, 0xba,
  0x94, 0xdb, 0x48, 0xc3, 0x83, 0xc9, 0x38, 0x2e, 0x13, 0xc3, 0xc1, 0xe9,
  0xde, 0x7f, 0x3f, 0xc0, 0xd2, 0x02, 0x64, 0x63, 0x1f, 0xce, 0xc2, 0xe7,
  0xab, 0x2b, 0x82, 0xc2, 0x95, 0x8a, 0x75, 0x73, 0x0f, 0xaf, 0x20, 0xd3,
  0xf3, 0x66, 0x95, 0x36, 0x0f, 0x4b, 0xd8, 0xee, 0xe3, 0x4d, 0xcc, 0x9c,
  0xfc, 0x7c, 0xd4, 0x3e, 0xcc, 0x86, 0x9e, 0x28, 0xa2, 0x7f, 0x90, 0x2f,
  0x70, 0xd7, 0xfe, 0xf3, 0x1e, 0xc6, 0x74, 0x4a, 0x88, 0x7e, 0x57, 0x6d,
  0x48, 0x28, 0xaa, 0xc9, 0x15, 0x79, 0xa2, 0x95, 0x6f, 0x3c, 0xa6, 0x8a,
  0xfb, 0xa3, 0x48, 0xa0, 0x9f, 0xa2, 0x63, 0x66, 0x3a, 0xf3, 0x3b, 0x37,
  0xa0, 0x57, 0x32, 0xab, 0x19, 0xde, 0x1e, 0x5c, 0x9e, 0xfd, 0x42, 0x90,
  0xb5, 0xb4, 0x31, 0x36, 0x2a, 0x38, 0x7f, 0xf3, 0x60, 0x43, 0xd1, 0x47,
  0x2d, 0x9c, 0x92, 0x70, 0x11, 0x29, 0xda, 0xd2, 0xfa, 0x0f, 0xf5, 0xd5,
  0xe3, 0xfa, 0x77, 0x87, 0x03, 0x14, 0xf7, 0xde, 0x17, 0xdf, 0xbd, 0x3c,
  0x7e, 0x7f, 0xb8, 0xf7, 0x87, 0x04, 0xff, 0xda, 0xe7, 0x7f, 0xed, 0x6f,
  0xc4, 0x8e, 0xcb, 0x30, 0xaa, 0xcd, 0x2f, 0x36, 0x93, 0xfa, 0x6e, 0x31,
  0x29, 0xe7, 0xf6, 0xc0, 0x64, 0x2b, 0x34, 0x90, 0x36, 0x10, 0x29, 0x6e,
  0x4b, 0xb7, 0xc5, 0x55, 0xde, 0x65, 0xd9, 0xb5, 0x24, 0x1d, 0x2a, 0xbb,
  0xa1, 0x08, 0x9e, 0x5f, 0x4b, 0xdc, 0x50, 0xa5, 0xb5, 0xf2, 0x30, 0x89,
  0xe5, 0xf5, 0x25, 0x82, 0x92, 0x50, 0xd2, 0x8b, 0x5d, 0x47, 0x38, 0x07,
  0x8b, 0x17, 0x07, 0xe9, 0xec, 0x33, 0x8c, 0x30, 0xdb, 0xcc, 0x70, 0x27,
  0xba, 0x52, 0x16, 0x77, 0x9a, 0x5f, 0x17, 0x03, 0x01, 0x68, 0x1c, 0x77,
  0x82, 0x3f, 0xb0, 0x59, 0x65, 0x96, 0xf5, 0xd2, 0xaa, 0xf1, 0x6e, 0x77,
  0xb8, 0x89, 0xe8, 0x2e, 0x1e, 0x34, 0xd7, 0x31, 0xd0, 0xc0, 0x86, 0x9a,
  0x9e, 0xe1, 0x5c, 0x1d, 0x30, 0x46, 0x67, 0xd0, 0xac, 0xd5, 0x9f, 0x91,
  0x78, 0xe0, 0xcf, 0x16, 0x46, 0x52, 0x70, 0x18, 0x93, 0x56, 0x48, 0x90,
  0x7d, 0xcd, 0x21, 0xf4, 0x0a, 0x03, 0xc1, 0x98, 0xcd, 0xa1, 0x74, 0x93,
  0x45, 0x90, 0x9d, 0x55, 0x18, 0x4d, 0x72, 0xcb, 0xb0, 0xf7, 0x6d, 0x1f,
  0x13, 0x44, 0x8f, 0x4f, 0xdc, 0x12, 0x8d, 0x8d, 0xa8, 0xf6, 0xc4, 0x0a,
  0xce, 0xaf, 0x5a, 0x82, 0x46, 0x55, 0x3e, 0x2d, 0x70, 0xe6, 0xf8, 0xac,
  0x48, 0x0e, 0x1e, 0x86, 0xc9, 0x14, 0xd9, 0x9b, 0xf3, 0x34, 0x40, 0xa2,
  0xa1, 0xbb, 0xa6, 0x70, 0x18, 0x08, 0xf4, 0x5b, 0xc2, 0x37, 0xdf, 0xbf,
  0x9b, 0x67, 0xdb, 0x6a, 0x18, 0xa8, 0xb0, 0xdb, 0x79, 0x5b, 0xfe, 0xcd,
  0xcc, 0x3b, 0x95, 0x8f, 0xc4, 0x64, 0xa6, 0x88, 0xc0, 0xde, 0x99, 0x3b,
  0xfe, 0xc2, 0x65, 0xe2, 0x3e, 0xd7, 0x68, 0xd9, 0xc6, 0x14, 0x04, 0x86,
  0x5e, 0x46, 0xa9, 0xda, 0x01, 0xe9, 0x88, 0x76, 0x11, 0x48, 0x68, 0x0f,
  0x6f, 0xc6, 0x90, 0x72, 0x29, 0x19, 0x3a, 0x96, 0xc4, 0x44, 0xec, 0x74,
  0x59, 0x78, 0x57, 0xa7, 0xea, 0x11, 0x44, 0x87, 0xb7, 0x59, 0x35, 0x05,
  0xd4, 0xc4, 0xd4, 0xe8, 0xa5, 0xc4, 0x4f, 0x2f, 0xc4, 0x3d, 0x85, 0x5c,
  0x2a, 0xc9, 0x8a, 0x6f, 0xe3, 0xc2, 0x90, 0xf8, 0x55, 0x3a, 0xeb, 0x25,
  0x31, 0xca, 0x7d, 0x98, 0x1a, 0xc2, 0x18, 0x59, 0x08, 0x3c, 0x15, 0x90,
  0x6d, 0xf6, 0xa1, 0x45, 0x66, 0x14, 0x4e, 0x08, 0x32, 0xf6, 0x68, 0x87,
  0xf5, 0x45, 0xef, 0x34, 0x85, 0x5c, 0x68, 0x2e, 0x0c, 0x68, 0xe6, 0xa2,
  0x43, 0x80, 0x0a, 0x20, 0x5c, 0xa8, 0xfe, 0xf4, 0x44, 0x7b, 0x3a, 0x84,
  0xdf, 0x41, 0xd1, 0x92, 0xe2, 0x4e, 0xd1, 0xa4, 0xb6, 0x48, 0x6c, 0xb2,
  0x72, 0xa8, 0x98, 0x83, 0xa4, 0x79, 0x85, 0xc5, 0xc8, 0xf3, 0xf2, 0x06,
  0x31, 0x98, 0x36, 0x02, 0xa8, 0x82, 0xfd, 0x70, 0x4e, 0x1d, 0xf3, 0xe5,
  0x21, 0x74, 0x25, 0xfe, 0xec, 0x48, 0xa3, 0xb5, 0x51, 0x0a, 0xd0, 0x72,
  0xda, 0x6e, 0x25, 0x52, 0xea, 0x32, 0x28, 0x1a, 0x76, 0x26, 0xb3, 0x7e,
  0xe1, 0x00, 0xb8, 0x62, 0x82, 0x8d, 0x56, 0x3c, 0x29, 0x9b, 0x2b, 0x2f,
  0x0f, 0x15, 0xa0, 0x7e, 0xf0, 0xf3, 0x5c, 0xac, 0x1a, 0x32, 0x02, 0xd4,
  0x0c, 0x6c, 0x24, 0xd5, 0x58, 0x9c, 0x45, 0x41, 0xd6, 0xc3, 0x47, 0x80,
  0xbf, 0x61, 0x89, 0x16, 0xc0, 0x16, 0x09, 0xb4, 0x05, 0x65, 0x8a, 0x83,
  0x2e, 0x8d, 0x01, 0x4c, 0xf8, 0x82, 0xe6, 0x9b, 0x48, 0x54, 0xaa, 0x6b,
  0x60, 0xc9, 0x51, 0x4a, 0xaa, 0xd9, 0xd8, 0x00, 0x72, 0x82, 0x40, 0x92,
  0x0a, 0xff, 0x48, 0xb7, 0x18, 0xfe, 0xc6, 0x01, 0x37, 0x31, 0x2e, 0x06,
  0xac, 0xf6, 0x89, 0x1c, 0x4d, 0x4d, 0xf7, 0x17, 0xf4, 0x10, 0x71, 0x8a,
  0x58, 0xfd, 0xb5, 0xe7, 0xc2, 0xfe, 0xd3, 0x46, 0x4d, 0x60, 0xe4, 0x55,
  0x35, 0x03, 0xe8, 0x12, 0x04, 0xb1, 0x4d, 0x8c, 0xa7, 0xed, 0x0e, 0x19,
  0x57, 0xea, 0xe2, 0x6f, 0xb1, 0x38, 0xef, 0x6a, 0x39, 0x23, 0xb5, 0x4f,
  0xdf, 0x21, 0x45, 0xc9, 0x03, 0xc2, 0xac, 0x4b, 0xb9, 0x8d, 0x34, 0x3c,
  0x98, 0x8c, 0xe3, 0x32, 0x31, 0x90, 0x9c, 0xee, 0xfd, 0xf7, 0x03, 0x2c,
  0x2d, 0xa4, 0x36, 0xf6, 0xe1, 0x2c, 0x7c, 0xde, 0x60, 0x5e, 0x24, 0xe1,
  0x0d, 0xe6, 0x45, 0x12, 0xbe, 0x43, 0x43, 0xfb, 0x75, 0x2c, 0x50, 0xa9,
  0x02, 0xdc, 0x70, 0xf8, 0xbf, 0xac, 0x8a, 0x69, 0x47, 0x46, 0x95, 0x03,
  0x0f, 0x76, 0x53, 0xa2, 0xb2, 0x56, 0x42, 0x74, 0x89, 0x9e, 0x3e, 0x24,
  0x08, 0x37, 0x28, 0xfa, 0x44, 0x81, 0x06, 0xc4, 0xdb, 0xdc, 0xab, 0x92,
  0xbd, 0xca, 0xcd, 0x09, 0x55, 0xd3, 0x2b, 0x02, 0x0b, 0x20, 0x3f, 0x52,
  0xa6, 0xce, 0xd1, 0x40, 0x11, 0x16, 0xcf, 0x3f, 0x0d, 0x2b, 0xba, 0x58,
  0x0e, 0x76, 0x04, 0x40, 0x90, 0xb2, 0x50, 0x26, 0xdd, 0x37, 0xcf, 0x30,
  0x79, 0xeb, 0x0a, 0x7b, 0x9e, 0xcd, 0x6b, 0x27, 0x20, 0xed, 0x3b, 0x4e,
  0x3b, 0x34, 0xb4, 0x5f, 0xc7, 0x02, 0x95, 0x2a, 0xc0, 0x0d, 0x87, 0xff,
  0xcb, 0xaa, 0x98, 0x76, 0x64, 0x54, 0x39, 0xf0, 0xf0, 0x38, 0x25, 0x2a,
  0x6b, 0x25, 0x44, 0x97, 0xe8, 0xe9, 0x43, 0x02, 0x7f, 0x83, 0x8a, 0x50,
  0x54, 0x6f, 0x40, 0xbc, 0xcd, 0xbd, 0x12, 0xda, 0xab, 0xdc, 0x9c, 0x50,
  0x35, 0xbd, 0x22, 0x24, 0x01, 0xf2, 0x23, 0x65, 0xea, 0x1c, 0x0d, 0x14,
  0x61, 0xf1, 0xfc, 0xd3, 0xb0, 0xa2, 0x8b, 0xe5, 0x60, 0x47, 0x40, 0x0b,
  0x29, 0x0b, 0x65, 0xd2, 0x7d, 0xf3, 0x0c, 0x33, 0xbb, 0xae, 0xb0, 0xe7,
  0xd9, 0xbc, 0x76, 0x02, 0xd2, 0xbe, 0xe3, 0x24, 0x25, 0x19, 0xe1, 0x05,
  0x52, 0x92, 0x11, 0x5e, 0x90, 0x4f, 0x96, 0x45, 0x71, 0x1e, 0xbd, 0xe1,
  0x34, 0x13, 0xa3, 0xe6, 0xc8, 0x64, 0x60, 0x57, 0x82, 0x4e, 0xee, 0x14,
  0x46, 0x46, 0x46, 0xe8, 0x22, 0xc9, 0x04, 0x92, 0xa7, 0xb4, 0xfb, 0x26,
  0xf9, 0x64, 0x59, 0x14, 0xe7, 0xd1, 0x1b, 0x4e, 0x33, 0x31, 0x6a, 0x8e,
  0x4c, 0x06, 0x76, 0x25, 0xe8, 0xe4, 0x4e, 0x31, 0x66, 0x64, 0x84, 0x2e,
  0xcc, 0x4c, 0x20, 0x79, 0x4a, 0xbb, 0x6f, 0x02, 0x60, 0xa3, 0x5b, 0x95,
  0x18, 0x35, 0xba, 0x55, 0xb9, 0xc2, 0xaa, 0x33, 0xa9, 0xc0, 0x91, 0x81,
  0x0a, 0x69, 0x6a, 0xf7, 0x81, 0xf8, 0xd7, 0x70, 0x78, 0xd1, 0x04, 0x19,
  0x59, 0xde, 0x59, 0xb7, 0x49, 0x60, 0x7e, 0x21, 0x30, 0x3c, 0x6f, 0x15,
  0x74, 0xef, 0x1a, 0x65, 0x3a, 0xc9, 0xf1, 0x1b, 0xf6, 0xe2, 0xbd, 0x3a,
  0xc3, 0xdf, 0x72, 0x0b, 0x42, 0x44, 0xa5, 0xb6, 0xd4, 0xbf, 0x83, 0x73,
  0x60, 0xdf, 0x7e, 0xdf, 0xad, 0xb4, 0xdc, 0x3a, 0x19, 0xef, 0x3c, 0x7a,
  0xbe, 0xbb, 0x1d, 0x49, 0x4b, 0x36, 0xdf, 0xf0, 0xe1, 0x08, 0x1f, 0xef,
  0x8e, 0x76, 0xb7, 0x3b, 0xb3, 0xc1, 0x76, 0xaf, 0xc1, 0x48, 0x51, 0x10,
  0x2b, 0xde, 0x3a, 0x93, 0x0a, 0x1c, 0x19, 0x28, 0x9f, 0xa6, 0x3e, 0x20,
  0x88, 0x7f, 0x0d, 0x87, 0x17, 0x4d, 0x90, 0xae, 0xe5, 0x9d, 0x75, 0x9b,
  0x04, 0xe6, 0x17, 0x82, 0xd1, 0xf3, 0x56, 0xd1, 0xf8, 0xae, 0x51, 0xc3,
  0x93, 0x1c, 0xbf, 0x61, 0x2f, 0xde, 0xab, 0x33, 0xfc, 0x2d, 0xb7, 0x08,
  0x45, 0x54, 0x87, 0x4b, 0x8d, 0x3d, 0x38, 0x41, 0xf6, 0xed, 0x77, 0xdd,
  0x32, 0xcc, 0xad, 0x93, 0xf1, 0xce, 0xa3, 0xe7, 0xbb, 0xdb, 0x91, 0x9c,
  0x65, 0xf3, 0x0d, 0x1f, 0xa7, 0xf0, 0xf1, 0xee, 0x68, 0x77, 0xbb, 0x33,
  0x1b, 0x6c, 0xf7, 0x1a, 0x00, 0x15, 0x45, 0x57, 0xb7, 0x42, 0x83, 0x92,
  0x75, 0x2b, 0x34, 0x28, 0xdf, 0xd8, 0xd5, 0x63, 0x49, 0x6a, 0xb4, 0x5f,
  0x2f, 0x7a, 0x96, 0x5d, 0x1b, 0x52, 0x8b, 0xa6, 0xa8, 0x1d, 0xe7, 0xb5,
  0x91, 0x5d, 0xb1, 0x96, 0xe4, 0x4d, 0xfb, 0xc5, 0xa4, 0x67, 0xd9, 0xb5,
  0x18, 0x36, 0x90, 0x64, 0x2a, 0x5b, 0x50, 0x90, 0xdd, 0x4e, 0xfb, 0xa5,
  0x47, 0x20, 0x2c, 0x39, 0xd7, 0x21, 0x12, 0x6d, 0xa9, 0xcd, 0xa4, 0x2a,
  0xca, 0xbd, 0xa3, 0x98, 0xfe, 0x27, 0x77, 0xb6, 0xbc, 0x6c, 0x81, 0x3a,
  0x3e, 0xf3, 0xcf, 0x14, 0x9a, 0xfe, 0x30, 0xad, 0xa7, 0x79, 0xce, 0xf6,
  0x4c, 0x8f, 0x19, 0xa3, 0x49, 0x8d, 0x04, 0x13, 0x47, 0xc5, 0xd2, 0x79,
  0xca, 0xa1, 0x5a, 0x87, 0x47, 0x1a, 0x0c, 0x0b, 0x65, 0xd5, 0x90, 0xd8,
  0xba, 0x71, 0xc5, 0x86, 0x47, 0x4f, 0x16, 0x81, 0x50, 0xb6, 0xfa, 0x65,
  0xdd, 0x55, 0xa3, 0xcc, 0x5d, 0x60, 0x44, 0xb2, 0x65, 0x15, 0x96, 0xf0,
  0x21, 0xfd, 0x92, 0x92, 0x9a, 0xd3, 0xa6, 0x2e, 0xb1, 0x4f, 0xb1, 0x4d,
  0x25, 0x0f, 0x05, 0x81, 0xd0, 0x5a, 0x03, 0xca, 0xde, 0x7d, 0xc9, 0x05,
  0xfa, 0xca, 0xcb, 0xdc, 0x69, 0x19, 0x40, 0x69, 0x44, 0x11, 0x64, 0x0c,
  0xfd, 0x84, 0xc2, 0xe3, 0x5c, 0x2c, 0x85, 0x85, 0x48, 0x27, 0x09, 0x72,
  0x7b, 0x70, 0x8e, 0x88, 0xf4, 0x91, 0x00, 0xd2, 0x90, 0xdd, 0xad, 0x08,
  0x7e, 0xd4, 0xc0, 0xac, 0x8f, 0x10, 0x3a, 0x89, 0x82, 0x8a, 0xec, 0x06,
  0xdc, 0xb8, 0x16, 0x55, 0xa2, 0xaa, 0x72, 0xf8, 0x8d, 0x6c, 0x72, 0x01,
  0xab, 0x63, 0x48, 0xb4, 0x84, 0x70, 0x9e, 0x45, 0xca, 0xb7, 0xa7, 0x74,
  0x3b, 0x6b, 0x9b, 0x96, 0x5d, 0x10, 0xca, 0x24, 0x20, 0xe4, 0x82, 0xbd,
  0xa1, 0x36, 0x00, 0x34, 0x39, 0xc5, 0x96, 0x6d, 0xda, 0xe9, 0x1f, 0xd0,
  0xda, 0x39, 0x85, 0x99, 0x11, 0xcc, 0xca, 0x96, 0x81, 0x59, 0xf7, 0x87,
  0x4b, 0x76, 0x6e, 0x87, 0x37, 0x37, 0x37, 0x43, 0x5c, 0x38, 0xe4, 0xe4,
  0x48, 0x25, 0xc5, 0xa8, 0x85, 0x11, 0x4d, 0x76, 0x25, 0x9b, 0x9c, 0x60,
  0x22, 0x61, 0x7c, 0xc3, 0xcb, 0x8f, 0xaa, 0x26, 0x79, 0x43, 0x25, 0x7b,
  0x42, 0x5c, 0xf4, 0x9a, 0x94, 0xce, 0xc9, 0x74, 0x48, 0xc3, 0x51, 0x47,
  0x54, 0xe4, 0xf6, 0xb9, 0xb5, 0x00, 0x61, 0x6a, 0xda, 0x64, 0x28, 0x51,
  0x21, 0xb5, 0x68, 0xfe, 0xda, 0x71, 0x5e, 0x8b, 0x61, 0x03, 0x49, 0xa6,
  0xb2, 0x05, 0xd5, 0xda, 0xed, 0x9c, 0x60, 0x7a, 0x04, 0xc2, 0x92, 0x73,
  0x1d, 0x22, 0xd1, 0x96, 0xda, 0x4c, 0xaa, 0xa2, 0xc4, 0x3c, 0x8a, 0xe9,
  0x7f, 0x72, 0x67, 0xcb, 0xcb, 0x16, 0xda, 0xe3, 0x33, 0xff, 0x4c, 0xa1,
  0xe9, 0x0f, 0xd3, 0x7a, 0x9a, 0xe7, 0x6c, 0xcf, 0xf4, 0x98, 0x31, 0x9a,
  0xf1, 0x48, 0x18, 0x72, 0x54, 0x49, 0x9d, 0xa7, 0x1c, 0xaa, 0x75, 0x40,
  0xa5, 0xc1, 0xb0, 0x50, 0x56, 0x0d, 0x89, 0xad, 0x1b, 0x57, 0x6c, 0x78,
  0x34, 0x6b, 0x11, 0x6c, 0x65, 0xab, 0x5f, 0xd6, 0x5d, 0x35, 0xca, 0xdc,
  0x05, 0x86, 0x2b, 0x5b, 0x56, 0x61, 0x7d, 0x1f, 0x72, 0x33, 0x29, 0xe3,
  0x39, 0x6d, 0xea, 0x12, 0xfb, 0x14, 0xdb, 0x54, 0xf2, 0x50, 0x10, 0x3a,
  0xad, 0x35, 0xa0, 0xec, 0xdd, 0x97, 0x7c, 0xa0, 0x2f, 0x07, 0x2e, 0x5d,
  0xa7, 0x65, 0x00, 0xa5, 0x11, 0x45, 0x90, 0xc1, 0xf5, 0x13, 0x0a, 0x8f,
  0x73, 0x25, 0x15, 0x16, 0x22, 0x2d, 0x26, 0xc8, 0xed, 0xc1, 0x39, 0x22,
  0xd2, 0x60, 0x02, 0x30, 0x44, 0x76, 0xb7, 0x22, 0xe0, 0x52, 0x03, 0xb3,
  0x3e, 0x82, 0xee, 0x24, 0x0a, 0x2a, 0xb2, 0x1b, 0x70, 0xe3, 0x5a, 0x54,
  0x89, 0xaa, 0xca, 0xe1, 0x37, 0xb2, 0xc9, 0x05, 0xac, 0x8e, 0x21, 0x0b,
  0x13, 0xc2, 0x79, 0x16, 0xa9, 0xed, 0x9e, 0xd2, 0xed, 0xac, 0x6d, 0xce,
  0x76, 0x41, 0xf0, 0x93, 0xc0, 0x97, 0x0b, 0xf6, 0x86, 0xfa, 0x03, 0xd0,
  0xe4, 0x14, 0x74, 0xb6, 0x69, 0xa7, 0x7f, 0x40, 0x6b, 0xe7, 0xfc, 0x66,
  0x86, 0x37, 0x2b, 0x5b, 0x06, 0x66, 0xdd, 0x1f, 0x2e, 0xd9, 0xb9, 0x1d,
  0xde, 0xdc, 0xdc, 0x0c, 0x71, 0xe1, 0x90, 0x93, 0x23, 0x65, 0x16, 0xa3,
  0x16, 0x78, 0x34, 0xd9, 0x95, 0x6c, 0x72, 0x82, 0x89, 0x84, 0xf1, 0x0d,
  0x2f, 0x45, 0xaa, 0x9a, 0xe4, 0x0d, 0xd5, 0xf3, 0x09, 0x71, 0xd1, 0x6b,
  0x52, 0x57, 0x27, 0xd3, 0x21, 0x0d, 0x47, 0x1d, 0x51, 0x91, 0xdb, 0xe7,
  0xd6, 0x02, 0xf8, 0xa9, 0x69, 0x93, 0xa1, 0x7e, 0xdd, 0x7c, 0x62, 0x71,
  0x90, 0x0c, 0xbf, 0x49, 0x36, 0x5e, 0xc9, 0x6a, 0xcf, 0xcd, 0x13, 0x07,
  0xed, 0xb5, 0xf0, 0xc3, 0x61, 0x30, 0xc7, 0xbc, 0xbb, 0xf1, 0x30, 0xf8,
  0x37, 0x9f, 0x58, 0x1c, 0x24, 0xc3, 0x6f, 0x93, 0x8d, 0x57, 0xb2, 0xda,
  0x73, 0xf3, 0xc4, 0x41, 0x7b, 0x2d, 0xfc, 0x70, 0x18, 0xcc, 0x31, 0xef,
  0x6e, 0x3c, 0x0c, 0x21, 0xb1, 0xf7, 0x22, 0x53, 0x13, 0x15, 0x97, 0x35,
  0xc4, 0xde, 0x8b, 0x4c, 0xdd, 0x55, 0x5c, 0xd6, 0x4c, 0x13, 0x71, 0xd6,
  0x21, 0xed, 0x85, 0xdd, 0x5a, 0x8c, 0x79, 0x46, 0x4b, 0x4f, 0x6b, 0xe9,
  0xd3, 0x44, 0x9c, 0x75, 0x48, 0x7b, 0x61, 0xb7, 0x16, 0xc3, 0x9a, 0xd1,
  0xd2, 0xd3, 0x5a, 0x1a, 0xee, 0x4c, 0xf8, 0x86, 0xaf, 0xb9, 0x8e, 0x55,
  0x7a, 0x73, 0xff, 0x1d, 0xf7, 0x6e, 0xa2, 0x50, 0xef, 0x9c, 0x5c, 0x5d,
  0x1e, 0xec, 0x30, 0xfc, 0x3b, 0x36, 0xcf, 0x32, 0x32, 0x53, 0x69, 0x77,
  0xe1, 0xea, 0xa5, 0xd8, 0x30, 0x15, 0xbd, 0xf4, 0xab, 0x35, 0xa5, 0x66,
  0xce, 0x29, 0xec, 0x56, 0xd1, 0x8a, 0x7c, 0x74, 0xd0, 0x4b, 0x69, 0x59,
  0x96, 0xaa, 0x1e, 0xc0, 0x68, 0xdc, 0xea, 0x06, 0xf6, 0x72, 0x0a, 0x2d,
  0xb3, 0x63, 0xcf, 0x5b, 0xa6, 0x00, 0xdd, 0xc6, 0x32, 0x38, 0x39, 0xce,
  0x81, 0xab, 0xaa, 0x18, 0x64, 0xe2, 0xb2, 0xca, 0x2a, 0x10, 0x3a, 0x25,
  0xba, 0x0f, 0x35, 0x4b, 0x39, 0x26, 0xac, 0x0d, 0x43, 0x79, 0xf5, 0xcd,
  0x11, 0x25, 0x6c, 0x1b, 0x46, 0x5a, 0x08, 0x4e, 0x03, 0xcf, 0x9f, 0x3b,
  0x1b, 0x59, 0xa3, 0xf6, 0x12, 0xac, 0x84, 0xab, 0x1e, 0xd3, 0x24, 0x86,
  0x73, 0xaa, 0x36, 0x47, 0xa2, 0xc6, 0x85, 0xe4, 0xa5, 0x8a, 0x8d, 0x20,
  0x97, 0xd7, 0x86, 0x77, 0x53, 0x57, 0x05, 0x10, 0xdd, 0x2f, 0xfa, 0xba,
  0xe2, 0x89, 0xa4, 0xb5, 0x44, 0x70, 0x49, 0x59, 0x0b, 0x32, 0xc4, 0x1d,
  0xbd, 0x72, 0xa7, 0xa8, 0x2c, 0xcc, 0x7b, 0x93, 0xcf, 0xc7, 0x1b, 0xb9,
  0xd1, 0x99, 0x74, 0x3c, 0x29, 0x76, 0xeb, 0x32, 0xdf, 0x63, 0xc0, 0xe5,
  0x56, 0xf0, 0xa5, 0xc5, 0x3c, 0xb7, 0xaa, 0xea, 0xc1, 0xcd, 0xfd, 0x9f,
  0xc4, 0x33, 0xe1, 0x1b, 0xbe, 0xe6, 0x3a, 0x56, 0xe9, 0xcd, 0xfd, 0x77,
  0xdc, 0xbb, 0x89, 0x42, 0xbd, 0x73, 0x72, 0x75, 0x79, 0x78, 0xc4, 0xf0,
  0xef, 0xd8, 0x24, 0xcc, 0xc8, 0x4c, 0xa5, 0x0f, 0x86, 0x2b, 0xa6, 0x62,
  0xc3, 0x54, 0xf4, 0xd2, 0x2f, 0xd7, 0xd4, 0xa1, 0x39, 0xa7, 0xb0, 0x5b,
  0x45, 0x2b, 0xf2, 0xd1, 0x81, 0x35, 0xa5, 0x65, 0x59, 0xaa, 0x7a, 0x00,
  0xa3, 0x71, 0xab, 0x1b, 0xd8, 0xcb, 0x29, 0xb4, 0xcc, 0x8e, 0x3d, 0x6f,
  0x99, 0x82, 0x80, 0x1b, 0x4b, 0xef, 0xe4, 0x38, 0x07, 0xae, 0xaa, 0x02,
  0x94, 0x89, 0xcb, 0x2a, 0xab, 0x40, 0xe8, 0x94, 0x05, 0x3f, 0xd4, 0x14,
  0xe6, 0x98, 0xb0, 0x36, 0x0c, 0xe5, 0xd5, 0xd7, 0x47, 0x94, 0xcd, 0x6d,
  0x18, 0x69, 0x21, 0x20, 0x0e, 0x3c, 0x7f, 0x6e, 0x79, 0x64, 0x8d, 0xda,
  0x4b, 0xb0, 0x12, 0x2e, 0x89, 0x4c, 0x93, 0x18, 0x00, 0xaa, 0xda, 0x1c,
  0x89, 0x1a, 0x17, 0x92, 0xb4, 0x2a, 0x36, 0x82, 0x5c, 0x5e, 0x1b, 0xde,
  0x4d, 0x5d, 0x89, 0x40, 0x74, 0xbf, 0xe8, 0xeb, 0x0a, 0x36, 0x92, 0xd6,
  0x12, 0xc1, 0x25, 0x65, 0x2d, 0x48, 0x1f, 0x77, 0xf4, 0xca, 0x2d, 0xa4,
  0xb2, 0x30, 0xef, 0x4d, 0x3e, 0x1f, 0xef, 0xf0, 0x46, 0x67, 0xd2, 0xf1,
  0xa4, 0xd8, 0xad, 0xcb, 0x7c, 0x8f, 0x01, 0xd7, 0x62, 0xc1, 0x97, 0x16,
  0xf3, 0xdc, 0xda, 0xc4, 0x48, 0xc3, 0x8c, 0xff, 0x03, 0x12, 0x8a, 0xe4,
  0x90, 0x50, 0x24, 0x77, 0x0d, 0xcf, 0x83, 0xe6, 0xa1, 0x25, 0x91, 0xfe,
  0x68, 0x8a, 0xd6, 0x27, 0x09, 0xaf, 0xf1, 0xe1, 0x60, 0xff, 0x7d, 0x09,
  0x6d, 0xe9, 0x2b, 0x71, 0x54, 0x21, 0xd5, 0xbd, 0xf6, 0xac, 0x11, 0xa9,
  0x87, 0xa5, 0xb9, 0x6b, 0x19, 0x10, 0xb6, 0x21, 0x3e, 0x1c, 0x47, 0x38,
  0xbd, 0xdd, 0x63, 0x8a, 0x03, 0xba, 0x7c, 0xcd, 0xdd, 0xc2, 0xfe, 0xad,
  0xbb, 0x79, 0x5f, 0xde, 0xbf, 0x7b, 0xbf, 0x74, 0xfb, 0xd6, 0xef, 0x1e,
  0x77, 0x69, 0xd0, 0x44, 0xd9, 0x2f, 0x3d, 0x07, 0x1d, 0x25, 0x7b, 0xb0,
  0xf5, 0x65, 0x1d, 0x75, 0x6d, 0x2e, 0xe3, 0x19, 0x99, 0x5f, 0xfe, 0x56,
  0xa7, 0x4e, 0xc4, 0x48, 0x16, 0x3d, 0x26, 0x1f, 0x1f, 0x8e, 0xc3, 0x8a,
  0xae, 0xe1, 0x79, 0xd0, 0x3c, 0xb4, 0x5e, 0xd2, 0x1f, 0x4d, 0xa1, 0xfc,
  0x24, 0x21, 0x36, 0x3e, 0x1c, 0xec, 0xbf, 0x2f, 0xa0, 0x2d, 0x7d, 0x29,
  0x8e, 0x2a, 0xe4, 0xc1, 0xd7, 0x9e, 0x35, 0x22, 0xc5, 0xb2, 0x34, 0x77,
  0xad, 0x11, 0xc2, 0x36, 0xc4, 0x87, 0xe3, 0x08, 0xa7, 0xb7, 0x7b, 0x4c,
  0x71, 0x80, 0x9d, 0xaf, 0xb9, 0x8d, 0xd8, 0x6f, 0xba, 0x9b, 0xf7, 0xc5,
  0xfd, 0xbb, 0xf7, 0x73, 0xb7, 0x6f, 0xfd, 0xee, 0x71, 0xfb, 0x06, 0x4d,
  0x96, 0xfd, 0xc2, 0x73, 0xd0, 0x51, 0xb2, 0x07, 0x5b, 0x5f, 0xd6, 0x51,
  0xd7, 0xe6, 0x32, 0x9e, 0x91, 0xf9, 0xc5, 0xaf, 0x75, 0xea, 0x44, 0x8c,
  0x64, 0xd1, 0x63, 0xf2, 0xf1, 0xe1, 0x38, 0xac, 0x48, 0x67, 0xef, 0x63,
  0x2f, 0x8a, 0x1e, 0x4e, 0x23, 0x08, 0x7e, 0xf1, 0xb4, 0x61, 0x62, 0x9e,
  0x74, 0xf6, 0x3e, 0xbc, 0xa2, 0xe8, 0xe1, 0x34, 0x82, 0xc0, 0x14, 0x4f,
  0x1b, 0x26, 0xe6, 0x09, 0xa5, 0x79, 0x0e, 0xe3, 0xc3, 0x69, 0xad, 0x9f,
  0x28, 0xe2, 0xc1, 0xfa, 0xbe, 0x52, 0xc1, 0xff, 0xf0, 0xc5, 0x51, 0x5a,
  0x91, 0xeb, 0x0c, 0xe8, 0x67, 0x84, 0x70, 0x08, 0x66, 0x2b, 0xf4, 0x1b,
  0xea, 0xf5, 0x11, 0xa4, 0x47, 0xee, 0x14, 0xa5, 0x2a, 0xc1, 0xf6, 0xa0,
  0xbd, 0x61, 0x40, 0xb3, 0x23, 0x61, 0xa0, 0xa7, 0x9c, 0xf7, 0x9e, 0xb1,
  0x50, 0x9a, 0xe7, 0x30, 0x3e, 0x9c, 0x16, 0x02, 0x8a, 0x22, 0x1e, 0xac,
  0xef, 0x4b, 0x15, 0xfc, 0x0f, 0x5f, 0x1c, 0xa5, 0x15, 0xb9, 0x96, 0x81,
  0x7e, 0x46, 0x08, 0x87, 0x60, 0xb6, 0x42, 0xbf, 0xa1, 0x5e, 0x1f, 0x81,
  0x81, 0xe4, 0x16, 0x52, 0xaa, 0x12, 0x6c, 0x0f, 0xda, 0x1b, 0x06, 0xa8,
  0x3b, 0x12, 0x06, 0x7a, 0xca, 0x79, 0xef, 0x19, 0xeb, 0xd9, 0xa1, 0x2d,
  0x43, 0xf4, 0xec, 0xfe, 0x6f, 0x5a, 0x1f, 0xd1, 0xb3, 0x23, 0x03, 0x44,
  0x9e, 0x1d, 0xba, 0x2f, 0x44, 0xcf, 0xee, 0xff, 0x4b, 0xeb, 0x23, 0x7a,
  0x76, 0x64, 0x80, 0x08, 0x43, 0xcd, 0x50, 0xdd, 0x94, 0x57, 0x9f, 0x50,
  0x18, 0x6a, 0xc6, 0xf0, 0xa6, 0xa4, 0xfb, 0x84, 0xaa, 0x15, 0x20, 0xe2,
  0x41, 0x02, 0x44, 0x7c, 0xcf, 0xec, 0x08, 0x60, 0x00, 0x4a, 0x11, 0xe2,
  0xad, 0x73, 0x41, 0x04, 0x65, 0x34, 0xf7, 0x2f, 0x9d, 0x32, 0x33, 0xc4,
  0x7b, 0x66, 0x47, 0xe8, 0x03, 0x50, 0x8a, 0x10, 0x6f, 0x9d, 0x0b, 0x5c,
  0x22, 0x87, 0x42, 0xb2, 0x23, 0x22, 0xc2, 0x35, 0x94, 0x6a, 0x29, 0x33,
  0x4e, 0x94, 0x01, 0xf9, 0xf5, 0x8b, 0x46, 0x85, 0x50, 0x15, 0xd9, 0xde,
  0x28, 0xc3, 0xbc, 0x7f, 0xe1, 0x94, 0x99, 0x21, 0x16, 0x39, 0x14, 0x92,
  0x92, 0x94, 0x7b, 0x9f, 0xb7, 0x24, 0xa5, 0x7b, 0x67, 0x9d, 0x8c, 0x1c,
  0x67, 0x9c, 0x90, 0xe6, 0x3b, 0x30, 0xe9, 0x25, 0x2e, 0xa4, 0x46, 0xbf,
  0x8e, 0x30, 0xb5, 0x09, 0xaf, 0x06, 0x75, 0xc5, 0x9c, 0x5b, 0xe4, 0x95,
  0x47, 0x52, 0x82, 0x39, 0xa2, 0x66, 0x62, 0x1d, 0x25, 0x93, 0xaa, 0xbc,
  0xa9, 0x49, 0x1d, 0x55, 0x03, 0x35, 0xe5, 0x14, 0xd8, 0xab, 0xa0, 0xea,
  0xd9, 0x6c, 0xef, 0xdc, 0x42, 0xbd, 0x7e, 0x7b, 0xfe, 0xf6, 0x98, 0xfb,
  0x37, 0x70, 0x01, 0x2e, 0xea, 0x8c, 0x64, 0xce, 0xab, 0xc9, 0xc2, 0x58,
  0xd2, 0x46, 0x3b, 0x69, 0x98, 0x95, 0x29, 0x77, 0x0c, 0xaa, 0x0b, 0x28,
  0xa4, 0x27, 0x01, 0xe1, 0x65, 0x2c, 0x3e, 0x23, 0x8a, 0xa4, 0x07, 0x35,
  0xe5, 0x69, 0xc0, 0xbf, 0x5c, 0xd7, 0x35, 0x76, 0x32, 0x65, 0xc4, 0x90,
  0x1e, 0xf5, 0x06, 0x47, 0x81, 0x47, 0x82, 0xdb, 0xe7, 0xa9, 0x69, 0xd4,
  0x66, 0x8c, 0x50, 0xa3, 0xad, 0x87, 0x06, 0x5a, 0x97, 0xed, 0x31, 0x42,
  0xc0, 0x58, 0x69, 0x5b, 0xd3, 0x0a, 0x2a, 0x67, 0xad, 0xe6, 0xe5, 0xba,
  0x85, 0xf8, 0xca, 0x17, 0xf4, 0x10, 0xe8, 0x43, 0x12, 0x48, 0x5a, 0x55,
  0x70, 0xe6, 0xb1, 0x56, 0x3d, 0x88, 0xe4, 0xdc, 0x8b, 0x42, 0xa2, 0xde,
  0x7c, 0x1b, 0xda, 0x6c, 0x99, 0x7a, 0xda, 0x16, 0x01, 0x63, 0x7b, 0x37,
  0x38, 0xa2, 0x24, 0x32, 0x08, 0x15, 0x55, 0x73, 0xd3, 0x69, 0x1a, 0x62,
  0x33, 0xa3, 0x53, 0xd7, 0xaf, 0x94, 0x9c, 0xe3, 0x81, 0x7a, 0x17, 0x55,
  0xb0, 0x5d, 0xcf, 0x90, 0xda, 0xb5, 0x89, 0x50, 0x7b, 0x99, 0xb0, 0xb8,
  0x08, 0x7d, 0x8b, 0xfa, 0x44, 0x94, 0x6d, 0x7f, 0x57, 0xe8, 0x7f, 0x14,
  0xff, 0xd7, 0xc0, 0x0b, 0xaf, 0xe5, 0xf0, 0x40, 0xf9, 0xf1, 0x42, 0x17,
  0x59, 0x5f, 0x64, 0xd5, 0x25, 0x97, 0x21, 0x30, 0xea, 0x6b, 0x14, 0xa8,
  0x1d, 0x11, 0x11, 0xae, 0xa1, 0x54, 0x4b, 0x99, 0x71, 0xa2, 0x0c, 0xc8,
  0xaf, 0x5f, 0x34, 0x2a, 0xbe, 0xaa, 0xc8, 0xf6, 0x96, 0xa4, 0xdc, 0xfb,
  0xbc, 0x25, 0x29, 0xdd, 0x3b, 0xeb, 0x64, 0xe4, 0x38, 0xe3, 0x84, 0x34,
  0xdf, 0x81, 0x49, 0x2f, 0x71, 0x95, 0x35, 0x1a, 0x79, 0x84, 0xa9, 0x4d,
  0x78, 0x35, 0x28, 0x3a, 0xe6, 0xdc, 0x22, 0xaf, 0x76, 0x92, 0x12, 0xcc,
  0x11, 0x35, 0x13, 0xeb, 0x28, 0x99, 0x54, 0xe5, 0x4d, 0x4d, 0xea, 0xa8,
  0x1a, 0xa8, 0x29, 0xa7, 0xc0, 0x5e, 0x05, 0x25, 0xd1, 0x66, 0x7b, 0xe7,
  0x16, 0x07, 0xf6, 0x9b, 0xf3, 0xb7, 0xc7, 0xdc, 0xd8, 0x81, 0xab, 0x73,
  0x51, 0x84, 0x24, 0x73, 0x5e, 0x4d, 0x16, 0xc6, 0x92, 0x36, 0xda, 0x49,
  0xc3, 0xac, 0x4c, 0xb9, 0x63, 0x50, 0x42, 0x4c, 0x21, 0x3d, 0x09, 0x08,
  0x2f, 0x63, 0xf1, 0x19, 0x51, 0x24, 0x3d, 0x1c, 0x2a, 0x4f, 0x03, 0xfe,
  0xf9, 0xba, 0xae, 0xb1, 0x93, 0x29, 0x23, 0x86, 0xf4, 0xa8, 0x37, 0x38,
  0x0a, 0x3c, 0x12, 0xdc, 0x3e, 0x4f, 0x4d, 0xa3, 0xfe, 0x63, 0x04, 0x29,
  0x6d, 0x3d, 0x34, 0xd0, 0xba, 0x6c, 0xf3, 0x11, 0x42, 0xcd, 0x4a, 0xdb,
  0x9a, 0x56, 0x50, 0x56, 0x6b, 0x35, 0x2f, 0xd7, 0x46, 0xc4, 0x57, 0xbe,
  0xa0, 0x87, 0x40, 0x1f, 0x92, 0x40, 0xd2, 0xaa, 0x82, 0x33, 0x8f, 0xb5,
  0xea, 0x41, 0x24, 0xe7, 0x5e, 0x14, 0x12, 0xf5, 0xe6, 0xdb, 0xd0, 0x66,
  0xcb, 0xd4, 0xd3, 0x7e, 0x09, 0x18, 0xdb, 0xbb, 0xc1, 0x11, 0x25, 0x91,
  0x11, 0xaa, 0xa8, 0x98, 0x82, 0x4e, 0xd3, 0x10, 0x9b, 0x19, 0x9d, 0xda,
  0x81, 0xa5, 0xe4, 0x1c, 0x0f, 0xd4, 0xbb, 0xa8, 0x82, 0xed, 0x9a, 0x89,
  0xd4, 0xae, 0x7f, 0x84, 0xda, 0xcb, 0x04, 0xd4, 0x45, 0xd0, 0x5c, 0xd4,
  0x40, 0xa2, 0x6c, 0xfb, 0xbb, 0x42, 0xff, 0xa3, 0xf8, 0xbf, 0x06, 0x5e,
  0x78, 0x2d, 0x87, 0x07, 0xca, 0x8f, 0x17, 0xba, 0xc8, 0xfa, 0x22, 0xab,
  0x2e, 0xb9, 0x0c, 0x81, 0x21, 0x61, 0xa3, 0x28, 0x16, 0x69, 0xe2, 0xa1,
  0xb4, 0x25, 0xc9, 0xff, 0x1a, 0xb2, 0x44, 0x25, 0x57, 0xd5, 0x0a, 0xf5,
  0x22, 0x4d, 0x3c, 0x20, 0xb6, 0x24, 0xf9, 0x5f, 0x43, 0x96, 0xa8, 0xe4,
  0xaa, 0x5a, 0xa1, 0xb8, 0x55, 0xfc, 0xe9, 0x9b, 0xc3, 0x19, 0xb3, 0x95,
  0x59, 0x5a, 0x98, 0x9d, 0x30, 0x37, 0x36, 0xcc, 0x8f, 0x99, 0xcf, 0xbf,
  0x9c, 0x97, 0xab, 0xfa, 0x6e, 0x33, 0x91, 0x96, 0x3d, 0xd2, 0xe5, 0xa2,
  0x91, 0x5c, 0x1e, 0x9c, 0xa5, 0x39, 0xdf, 0x55, 0xf1, 0x51, 0x85, 0x22,
  0x2a, 0x15, 0x6a, 0x76, 0xd4, 0x76, 0x86, 0xdb, 0xf4, 0x3e, 0xf6, 0xbf,
  0xfc, 0xb1, 0xa3, 0xbb, 0x4c, 0xee, 0x7f, 0x36, 0x9c, 0x1f, 0x66, 0x39,
  0xbb, 0x90, 0x4c, 0xcc, 0x6c, 0x4e, 0x5a, 0x91, 0x3a, 0x3b, 0x20, 0x84,
  0x07, 0x23, 0xed, 0x6a, 0xc8, 0xc1, 0xa5, 0x6e, 0x10, 0xbf, 0xe9, 0x29,
  0x3e, 0x71, 0x92, 0x87, 0x03, 0x4a, 0x0e, 0x1c, 0x8f, 0x51, 0x4a, 0x6c,
  0x8b, 0x1b, 0xbf, 0xca, 0x6d, 0x94, 0x9c, 0x9a, 0xfd, 0x0a, 0xd0, 0x24,
  0x10, 0xc9, 0xb6, 0xc3, 0xa5, 0x3e, 0xae, 0xa9, 0xff, 0x13, 0xca, 0x2a,
  0xa7, 0x4a, 0x81, 0xa4, 0x65, 0x99, 0x07, 0x96, 0x26, 0x59, 0xea, 0x54,
  0x7e, 0xa2, 0xc6, 0xbc, 0x75, 0xba, 0x03, 0x48, 0x1d, 0xc8, 0x1d, 0x48,
  0x6c, 0x50, 0x6b, 0x98, 0xc3, 0x16, 0xd6, 0x26, 0xfe, 0xaa, 0xaf, 0x18,
  0x0d, 0xbb, 0x11, 0x63, 0x01, 0xde, 0x95, 0xa7, 0x84, 0x3f, 0x8f, 0xa3,
  0x44, 0x42, 0x93, 0x9c, 0x51, 0xba, 0x26, 0x1b, 0xcd, 0xbf, 0xd9, 0x9e,
  0xac, 0x71, 0x06, 0x57, 0x57, 0x00, 0xf5, 0xbb, 0x5f, 0x1d, 0x3a, 0xad,
  0x63, 0x80, 0xfc, 0xfa, 0x11, 0xf9, 0x1c, 0xa8, 0xf3, 0x2d, 0x6b, 0x7a,
  0x2f, 0xe2, 0x4f, 0xdf, 0x1c, 0xce, 0x98, 0xad, 0xcc, 0xd2, 0xc2, 0xec,
  0x84, 0xb9, 0xb1, 0x61, 0x7e, 0xcc, 0x7c, 0xfe, 0xc5, 0xbc, 0x5c, 0xd5,
  0x77, 0x9b, 0x89, 0xf4, 0xf2, 0x91, 0xf6, 0x17, 0x8d, 0xe4, 0xf2, 0xe0,
  0x2c, 0xcd, 0xf9, 0xae, 0x8a, 0x8f, 0x2a, 0x14, 0x51, 0xa9, 0x50, 0xb3,
  0xa3, 0xb6, 0x33, 0xdc, 0xa6, 0xf7, 0xb1, 0xff, 0xe5, 0x8f, 0x1d, 0xdd,
  0x65, 0x72, 0xff, 0xb3, 0xe1, 0xfc, 0x30, 0xcb, 0xd9, 0x85, 0x64, 0x62,
  0x66, 0x73, 0xd2, 0x8a, 0xd4, 0xd9, 0x01, 0x21, 0x3c, 0x18, 0x86, 0x57,
  0x43, 0x0e, 0x2e, 0x75, 0x83, 0xf8, 0x4d, 0x4f, 0xf1, 0x89, 0x93, 0x3c,
  0x1c, 0x50, 0x72, 0xc8, 0x79, 0x0c, 0x61, 0x62, 0x7b, 0xdf, 0xf8, 0x25,
  0x70, 0xa3, 0xe4, 0xd4, 0xec, 0x57, 0x00, 0x35, 0x81, 0x48, 0xb6, 0x1d,
  0x2e, 0xf5, 0x41, 0x4f, 0xfd, 0x9f, 0x50, 0x56, 0x39, 0x55, 0x0a, 0x24,
  0x2d, 0xcb, 0x3c, 0xb0, 0x34, 0xc9, 0x52, 0xa7, 0xf2, 0x13, 0x35, 0xe6,
  0xad, 0xd3, 0x1d, 0x28, 0xeb, 0x80, 0xf5, 0x40, 0x62, 0x83, 0x5a, 0xc3,
  0x1c, 0xb6, 0xb0, 0x36, 0xf1, 0x97, 0x7d, 0x95, 0x6a, 0xd8, 0x8d, 0x18,
  0x0b, 0xf0, 0xae, 0x3c, 0x25, 0xfc, 0x79, 0x1c, 0x25, 0x12, 0x9a, 0xe4,
  0x8c, 0xd2, 0x35, 0xd9, 0x68, 0xfe, 0xcd, 0xf6, 0x64, 0x8d, 0x33, 0xb8,
  0xba, 0x02, 0xa8, 0xdf, 0xfd, 0xea, 0xa0, 0x6b, 0x1d, 0x03, 0xe4, 0xd7,
  0x8f, 0xc8, 0xe7, 0x40, 0x2d, 0x71, 0x59, 0xd3, 0x1b, 0x9e, 0xd3, 0x4f,
  0xd8, 0x81, 0x38, 0x8c, 0x90, 0x4f, 0xcb, 0x02, 0xcc, 0xe6, 0xd9, 0x25,
  0x2f, 0xf9, 0xc5, 0xf1, 0xe1, 0x77, 0x87, 0xc7, 0x81, 0x68, 0xfb, 0x7a,
  0xc3, 0x73, 0xfa, 0x09, 0x3b, 0x10, 0x87, 0x11, 0xf2, 0x69, 0x59, 0x80,
  0xd9, 0x3c, 0xbb, 0xe4, 0x25, 0xbf, 0x38, 0x3e, 0xfc, 0xfe, 0xf0, 0x38,
  0x10, 0x6d, 0xdf, 0x8c, 0xc7, 0x3b, 0x1f, 0xb3, 0x6a, 0x42, 0xfd, 0x51,
  0xb1, 0x3c, 0xb8, 0x2b, 0xf1, 0xa4, 0x4d, 0xc3, 0xf2, 0x38, 0xbe, 0x76,
  0xb4, 0x23, 0xfe, 0x4b, 0x56, 0x55, 0x98, 0xd4, 0x21, 0x9f, 0x14, 0xb4,
  0x75, 0x2a, 0x0b, 0x92, 0x7c, 0x3f, 0x92, 0x5f, 0xd3, 0x2a, 0x9b, 0x71,
  0xfb, 0xd0, 0x30, 0xd3, 0x8f, 0x00, 0x36, 0xd0, 0x22, 0x03, 0xc7, 0xcc,
  0x3c, 0xde, 0xf9, 0x98, 0x55, 0x13, 0x6a, 0x9c, 0x8a, 0xe5, 0xc1, 0x5d,
  0x89, 0x27, 0x6d, 0x1a, 0x96, 0xc7, 0xf1, 0xb5, 0xd5, 0x1d, 0xf1, 0x5f,
  0xb2, 0xaa, 0xc2, 0xa4, 0x0e, 0xf9, 0xa4, 0x40, 0xb1, 0x53, 0x59, 0x90,
  0xe4, 0xfb, 0x91, 0xfc, 0x9a, 0x56, 0xd9, 0x8c, 0xfb, 0x8a, 0x86, 0x99,
  0x7e, 0x84, 0xbe, 0x81, 0xde, 0x19, 0x38, 0x66, 0xce, 0xf6, 0xa6, 0x20,
  0x93, 0x5d, 0x44, 0xf0, 0xc6, 0x92, 0x2a, 0xdc, 0x93, 0xd7, 0xf2, 0xcd,
  0x1a, 0x37, 0x03, 0xbb, 0xc4, 0xd0, 0x6b, 0x6c, 0x47, 0x9c, 0x7c, 0x3b,
  0xd9, 0xde, 0x14, 0x64, 0xb2, 0x8b, 0x08, 0xde, 0x58, 0x52, 0x11, 0x7b,
  0xf2, 0x5a, 0xbe, 0x59, 0xe3, 0x66, 0x60, 0x97, 0x18, 0x5d, 0x8d, 0xed,
  0x7c, 0x39, 0x1e, 0xbe, 0x3e, 0x3c, 0x3e, 0xfc, 0xfa, 0xe5, 0xf9, 0x21,
  0x88, 0x93, 0xef, 0x86, 0x2f, 0xc7, 0xc3, 0xd7, 0x87, 0xc7, 0x87, 0xdf,
  0xbc, 0x3c, 0x3f, 0x64, 0x50, 0x71, 0x45, 0x1a, 0x8e, 0x2b, 0x22, 0x56,
  0x23, 0x8e, 0x2b, 0x0c, 0x71, 0x5c, 0x11, 0xb1, 0x72, 0xf9, 0x5b, 0xd9,
  0x2e, 0x7f, 0x27, 0x1b, 0xc3, 0x32, 0x1b, 0xa8, 0xf4, 0xe8, 0x9c, 0x4c,
  0xfd, 0x51, 0x1c, 0xe2, 0x69, 0x0a, 0xd3, 0xa5, 0x69, 0x35, 0x30, 0xee,
  0x66, 0xa3, 0x19, 0x61, 0x25, 0x53, 0x0d, 0x56, 0x90, 0xce, 0x6f, 0xd0,
  0x23, 0xed, 0x7d, 0x81, 0x74, 0xf7, 0xdc, 0x56, 0x74, 0xf2, 0xea, 0x7d,
  0xaf, 0x8d, 0xdb, 0xd9, 0xd6, 0x01, 0x13, 0x40, 0x7c, 0x5c, 0x5f, 0xd1,
  0x62, 0x6c, 0x0a, 0xf1, 0xbe, 0xa6, 0x07, 0x3b, 0x48, 0xdf, 0x0e, 0xa0,
  0x9c, 0xfa, 0xb3, 0xc8, 0xef, 0x22, 0xb8, 0x21, 0x74, 0x67, 0xea, 0xe9,
  0x55, 0xb6, 0xb0, 0x88, 0x58, 0xc8, 0x20, 0xa0, 0x58, 0x35, 0x57, 0x40,
  0x0a, 0x72, 0x0f, 0xb1, 0x81, 0x49, 0x46, 0x36, 0x2f, 0xc5, 0xcd, 0xae,
  0x03, 0xce, 0x4f, 0x79, 0x39, 0xc0, 0xfd, 0x47, 0x38, 0x04, 0x99, 0x35,
  0x54, 0xe6, 0x3b, 0xa2, 0x1c, 0x40, 0x2f, 0xb4, 0x1f, 0x86, 0xf2, 0xa5,
  0x18, 0x96, 0xd9, 0x80, 0xac, 0x47, 0x4b, 0x65, 0x6a, 0x9c, 0xe2, 0xe0,
  0x50, 0x53, 0x98, 0x2e, 0x4d, 0xab, 0xb3, 0x71, 0x37, 0x1b, 0xcd, 0x08,
  0x2b, 0x99, 0x6a, 0xb0, 0x82, 0x74, 0x7e, 0x83, 0xe6, 0x69, 0xef, 0x0b,
  0xa4, 0xbb, 0xe7, 0xb6, 0xdc, 0x93, 0x57, 0xef, 0x7b, 0x6d, 0xdc, 0xce,
  0xb6, 0x0e, 0x98, 0xd0, 0xe3, 0xe3, 0xfa, 0x8a, 0x56, 0x6a, 0x53, 0x88,
  0xf7, 0x35, 0x3d, 0xd8, 0x81, 0x01, 0x77, 0xe8, 0xe5, 0xd4, 0xb8, 0x45,
  0x7e, 0x17, 0x01, 0x15, 0xa1, 0x3b, 0x53, 0x4f, 0xaf, 0xb2, 0x85, 0x85,
  0xcb, 0x42, 0x06, 0x01, 0xc5, 0xaa, 0xb9, 0xf4, 0x51, 0x60, 0x7d, 0x88,
  0x0d, 0x4c, 0x32, 0xb2, 0x79, 0x29, 0x6e, 0x76, 0x1d, 0x70, 0x7e, 0xca,
  0xcb, 0x41, 0x53, 0x00, 0x84, 0x43, 0x90, 0x59, 0x43, 0x35, 0xc0, 0x23,
  0xca, 0x01, 0xf4, 0x42, 0xfb, 0x61, 0x28, 0x5f, 0x3a, 0xfc, 0x75, 0xd5,
  0x02, 0x0b, 0x32, 0x6e, 0x11, 0xd1, 0x4b, 0x72, 0x6f, 0xd1, 0x8f, 0xb8,
  0x91, 0x5f, 0x57, 0x2d, 0xb0, 0x38, 0xe2, 0x16, 0xf4, 0xbc, 0x24, 0xf7,
  0x16, 0xfd, 0x88, 0xfb, 0x88, 0x88, 0x5e, 0x8c, 0x19, 0xfe, 0x12, 0x3f,
  0x54, 0xd7, 0x11, 0x45, 0x54, 0xe5, 0xca, 0x1f, 0xa9, 0x0a, 0x27, 0x96,
  0x59, 0xbd, 0x86, 0x69, 0xb8, 0xc9, 0x32, 0x73, 0x60, 0x7c, 0xf3, 0x99,
  0x1c, 0x0e, 0xfd, 0x48, 0xba, 0x01, 0x8c, 0x5c, 0x6d, 0x46, 0xd4, 0xdd,
  0xee, 0xb1, 0x8c, 0x56, 0xcb, 0x00, 0x40, 0xb5, 0xeb, 0x5f, 0xc3, 0xc6,
  0x0e, 0xb6, 0x1c, 0x6e, 0x98, 0x2d, 0x03, 0xdc, 0xec, 0xad, 0x37, 0x0a,
  0x83, 0x6f, 0xf5, 0x3f, 0xbf, 0xed, 0x99, 0xd7, 0xa5, 0xe8, 0xf0, 0xf4,
  0x8c, 0x1b, 0x9d, 0x1f, 0xe3, 0x2f, 0x12, 0x1d, 0xab, 0x63, 0x30, 0x74,
  0xd2, 0x84, 0x03, 0x09, 0x23, 0x19, 0x85, 0x57, 0x6c, 0xc0, 0x5b, 0x13,
  0x06, 0x39, 0x47, 0x54, 0xf0, 0xce, 0xe5, 0x3a, 0xd0, 0x06, 0x07, 0x09,
  0xfa, 0xb6, 0x39, 0x2a, 0x4d, 0x05, 0x73, 0x10, 0xa4, 0x20, 0x9a, 0x05,
  0x27, 0xba, 0x6a, 0x14, 0xe3, 0x04, 0xbf, 0x84, 0x52, 0x28, 0xe4, 0xd3,
  0xc3, 0x79, 0x5d, 0xd1, 0x13, 0x86, 0xc4, 0x5b, 0x49, 0x45, 0x6d, 0x55,
  0x53, 0x33, 0x8f, 0x91, 0x5b, 0x27, 0x7f, 0x82, 0x9d, 0xca, 0x84, 0x7e,
  0x19, 0xc6, 0x2c, 0xa8, 0x86, 0xdc, 0xea, 0xfd, 0x9a, 0x3c, 0xce, 0xc9,
  0xb1, 0x36, 0x29, 0x7e, 0x20, 0xe8, 0x40, 0x12, 0x17, 0x46, 0x56, 0x7f,
  0x59, 0xf8, 0xfd, 0xbc, 0x5a, 0x36, 0x42, 0xad, 0xd9, 0x62, 0xd9, 0x9d,
  0x84, 0xb6, 0x59, 0x69, 0xbb, 0x90, 0x10, 0x62, 0x4a, 0xb8, 0xae, 0x64,
  0x7e, 0x4c, 0x58, 0xcb, 0xa0, 0xcc, 0xbb, 0xab, 0xb4, 0x88, 0xdc, 0x39,
  0xb3, 0xf1, 0xb6, 0x3d, 0x19, 0x2d, 0x54, 0x8e, 0x2d, 0xa2, 0x68, 0x83,
  0x36, 0xba, 0xe8, 0x52, 0xc6, 0x18, 0x33, 0x0c, 0x2c, 0x47, 0xec, 0x41,
  0xc1, 0x88, 0xe8, 0xc5, 0x98, 0xe1, 0xcf, 0xf1, 0x43, 0x75, 0x1d, 0x51,
  0x44, 0x55, 0xae, 0xe2, 0x91, 0xaa, 0x70, 0x62, 0x99, 0xd5, 0x6b, 0x98,
  0x86, 0x9b, 0x2c, 0x33, 0x07, 0x06, 0x3f, 0x9f, 0xc9, 0xe1, 0xd0, 0x8f,
  0xa4, 0x55, 0xc0, 0xc8, 0xd5, 0x66, 0x44, 0xdd, 0xed, 0x1e, 0xcb, 0x68,
  0xf5, 0x13, 0x00, 0x8e, 0xbb, 0xfe, 0x35, 0xec, 0xfa, 0x60, 0xcb, 0xe1,
  0x86, 0xd9, 0x32, 0x00, 0xd5, 0xde, 0x7a, 0xa3, 0x18, 0xf9, 0x56, 0xff,
  0xf3, 0xfb, 0xa1, 0x79, 0xed, 0x8b, 0x0e, 0x4f, 0xcf, 0xb8, 0x03, 0xfa,
  0x31, 0xfe, 0x22, 0xd1, 0xb1, 0x3a, 0x86, 0x51, 0x27, 0x1d, 0x3a, 0x90,
  0x30, 0x92, 0x51, 0x78, 0xc5, 0x06, 0xbc, 0x35, 0x61, 0x90, 0x73, 0x44,
  0x05, 0x0c, 0x5d, 0xae, 0x03, 0x6d, 0x70, 0x90, 0xa0, 0x6f, 0xbb, 0xa6,
  0xd2, 0x54, 0x30, 0x07, 0x81, 0x11, 0xa2, 0x59, 0x70, 0xa2, 0xab, 0x46,
  0x31, 0x4e, 0xf0, 0x4b, 0x28, 0x85, 0x42, 0x3e, 0x3d, 0x9c, 0xd7, 0x15,
  0x3d, 0x61, 0x48, 0xbc, 0x95, 0x54, 0xd4, 0x6f, 0x35, 0x35, 0xf3, 0x18,
  0xb9, 0x75, 0xf2, 0x27, 0xd8, 0xa9, 0x4c, 0xd0, 0x98, 0x61, 0xcc, 0x82,
  0x0a, 0xcc, 0xad, 0xde, 0xaf, 0xc9, 0xe3, 0x9c, 0x1c, 0x6b, 0x93, 0xe2,
  0x07, 0x02, 0x1d, 0x24, 0x71, 0x61, 0x64, 0xf5, 0x97, 0x85, 0xdf, 0xe8,
  0xab, 0x65, 0x23, 0xd4, 0x9a, 0x2d, 0x96, 0xdd, 0x49, 0x68, 0x9b, 0x95,
  0xb6, 0x0b, 0x09, 0x21, 0xa6, 0x04, 0xfa, 0x4a, 0xe6, 0xc7, 0x84, 0xb5,
  0x0c, 0xca, 0xbc, 0xbb, 0x4a, 0x8b, 0xc8, 0x9d, 0x33, 0x1b, 0x6f, 0xfb,
  0x96, 0xd1, 0x42, 0xe5, 0xd8, 0x22, 0x8a, 0x36, 0x68, 0xa3, 0x0b, 0x3d,
  0x65, 0x8c, 0x31, 0xc3, 0xc0, 0x72, 0xc4, 0x1e, 0x64, 0x2a, 0xbc, 0x39,
  0xd4, 0xbc, 0x47, 0xe8, 0xad, 0x8c, 0x51, 0x15, 0x73, 0x17, 0x2f, 0x22,
  0xa6, 0xc2, 0x9b, 0x43, 0x3d, 0x7a, 0x84, 0xde, 0xca, 0x18, 0x55, 0x31,
  0x77, 0xf1, 0x22, 0x22, 0x2d, 0x12, 0xec, 0x4b, 0xf4, 0xb3, 0xbe, 0x73,
  0xaa, 0x81, 0xf1, 0xa0, 0x6d, 0xd1, 0xec, 0xb7, 0x5d, 0x24, 0xc3, 0x3a,
  0x27, 0x09, 0x7c, 0xb3, 0xab, 0xdd, 0x52, 0x1b, 0x2e, 0x8c, 0x30, 0xdf,
  0xa6, 0xe9, 0xc2, 0x55, 0x63, 0xa3, 0xa6, 0xa0, 0x9d, 0xe0, 0xfb, 0xaf,
  0xd2, 0x22, 0xc1, 0xbe, 0x44, 0x3f, 0xeb, 0x3b, 0xa7, 0x1a, 0x18, 0x0f,
  0xf7, 0x16, 0x5d, 0x80, 0xdb, 0x45, 0x32, 0xac, 0x73, 0x92, 0xc0, 0x37,
  0xbb, 0xda, 0x2d, 0xb5, 0xe1, 0xc2, 0x08, 0xf3, 0x6d, 0x9a, 0x2e, 0x5c,
  0x35, 0x36, 0x6a, 0x0a, 0xda, 0x09, 0xbe, 0xff, 0x9a, 0x26, 0x47, 0x5a,
  0x27, 0xbd, 0x41, 0x97, 0x1e, 0xf8, 0x40, 0x97, 0xda, 0x88, 0x89, 0x69,
  0x69, 0x72, 0xa4, 0x75, 0xd2, 0x1b, 0x74, 0xe9, 0x01, 0x01, 0x74, 0xa9,
  0xfd, 0x96, 0x98, 0x96, 0x27, 0x99, 0xf9, 0x62, 0x8e, 0x7e, 0x74, 0x2d,
  0x5f, 0x7d, 0xf7, 0xfb, 0xb5, 0xa1, 0xbf, 0xe9, 0x95, 0x9a, 0x52, 0x78,
  0x71, 0x01, 0xd5, 0xc0, 0xeb, 0xe3, 0xe8, 0xb5, 0x83, 0x1a, 0x9e, 0x92,
  0x6c, 0x47, 0xc8, 0x91, 0x32, 0x10, 0x93, 0xb2, 0x0a, 0xcb, 0x54, 0xa7,
  0x16, 0xf2, 0x48, 0x1f, 0x4d, 0xeb, 0xeb, 0xf8, 0x0d, 0xaf, 0xaf, 0xa3,
  0x37, 0x5c, 0xff, 0xa0, 0x9b, 0xee, 0x75, 0xd7, 0xec, 0xbb, 0xeb, 0xe3,
  0xef, 0x7b, 0xb0, 0x1b, 0xbc, 0x1b, 0xae, 0xab, 0x23, 0x6a, 0xf7, 0xee,
  0x38, 0x5f, 0x72, 0x39, 0x23, 0x7b, 0xcd, 0xe5, 0x9e, 0x47, 0x7d, 0xf8,
  0x7e, 0x53, 0x5c, 0xbe, 0xe7, 0xe6, 0xfb, 0x72, 0xb9, 0x4f, 0x5f, 0x8e,
  0xbf, 0xef, 0x5c, 0x6b, 0xef, 0x22, 0xc7, 0x90, 0x2e, 0xa8, 0x55, 0x65,
  0xa5, 0xf0, 0xb7, 0x18, 0x2b, 0x4a, 0xef, 0xf5, 0xf5, 0x43, 0xe8, 0xdd,
  0x4c, 0x24, 0xa0, 0xf7, 0x60, 0x8f, 0xd7, 0xd1, 0xbb, 0x7f, 0x50, 0x2d,
  0xf9, 0x93, 0x25, 0x3e, 0xc5, 0x17, 0xdc, 0xd2, 0x1a, 0x65, 0x18, 0x11,
  0x52, 0x27, 0x4a, 0x47, 0xb4, 0x8f, 0x48, 0x3b, 0x4c, 0xf7, 0xa3, 0x79,
  0xfe, 0x12, 0x42, 0xa7, 0x17, 0x02, 0x3a, 0xd7, 0x13, 0xfd, 0xc5, 0x84,
  0x2e, 0x17, 0x24, 0xa0, 0x73, 0xb2, 0x5a, 0x4f, 0x07, 0x1e, 0x81, 0x7b,
  0x54, 0xeb, 0x97, 0x6a, 0x47, 0x76, 0xc8, 0xe2, 0x7e, 0x38, 0xf1, 0xeb,
  0x50, 0x17, 0x22, 0x28, 0x1f, 0x03, 0x5b, 0x0f, 0x5b, 0x4d, 0x43, 0x97,
  0xbb, 0xad, 0xce, 0xf6, 0x0b, 0x14, 0xc8, 0xda, 0x92, 0x94, 0x66, 0x63,
  0xff, 0x40, 0x66, 0x93, 0x05, 0xef, 0xd7, 0xfc, 0xfb, 0x3d, 0x25, 0xdb,
  0xb0, 0x4f, 0x3a, 0x89, 0x58, 0x05, 0x79, 0x9d, 0x21, 0x17, 0x83, 0xd0,
  0x79, 0x92, 0x99, 0x2f, 0xe6, 0x68, 0x54, 0xd7, 0xf2, 0xd5, 0x77, 0xbf,
  0x5f, 0x1b, 0xfa, 0x9b, 0x5e, 0xa9, 0x29, 0x85, 0x17, 0x17, 0x50, 0x0d,
  0xbc, 0x06, 0x8f, 0x5e, 0x9f, 0xa8, 0xe1, 0x29, 0xc9, 0x76, 0x84, 0x1c,
  0x29, 0x03, 0x31, 0x29, 0xab, 0xb0, 0x4c, 0x75, 0x6a, 0xf1, 0x90, 0xf4,
  0xd1, 0xb4, 0xbe, 0x8e, 0xdf, 0xf0, 0xfa, 0x3a, 0x7a, 0xc3, 0xf5, 0x0f,
  0xba, 0xe9, 0x5e, 0xdb, 0xcd, 0xbe, 0xbb, 0x3e, 0xfe, 0xae, 0x07, 0xd8,
  0xc1, 0xbb, 0xe1, 0xba, 0x3a, 0xa2, 0x76, 0xef, 0x8e, 0xf3, 0x25, 0x97,
  0x33, 0xb2, 0xd7, 0x5c, 0xee, 0x79, 0xd4, 0x87, 0xef, 0x77, 0xcb, 0xe5,
  0x7b, 0x6e, 0xbe, 0x2f, 0x97, 0xfb, 0xf4, 0xe5, 0xf8, 0xbb, 0xce, 0xb5,
  0xf6, 0x2e, 0x72, 0x0c, 0x06, 0x83, 0x7a, 0x58, 0x56, 0x8a, 0x8d, 0x8b,
  0xb1, 0xa2, 0xf4, 0x5e, 0x5f, 0x3f, 0x84, 0xde, 0xcd, 0x44, 0x02, 0x7a,
  0x0f, 0xf6, 0x78, 0x1d, 0xbd, 0xfb, 0x07, 0xd5, 0x05, 0x22, 0xf0, 0x28,
  0xbe, 0xe0, 0x5e, 0xd7, 0x28, 0xc3, 0x88, 0x90, 0x3a, 0x51, 0x3a, 0xa2,
  0x7d, 0x44, 0xda, 0x61, 0xba, 0x1f, 0xcd, 0xf3, 0xe7, 0x10, 0x3a, 0xbd,
  0x10, 0xd0, 0xb9, 0x9e, 0xe8, 0xcf, 0x26, 0x74, 0xb9, 0x20, 0x01, 0x9d,
  0x93, 0xd5, 0x7a, 0x3a, 0xf0, 0x08, 0xdc, 0xa3, 0x5a, 0xbf, 0x54, 0x3b,
  0xb2, 0x43, 0x16, 0x14, 0xc4, 0x89, 0x5f, 0x07, 0xb7, 0x10, 0x81, 0x00,
  0x19, 0xd8, 0x7a, 0xd8, 0x6a, 0x1a, 0xba, 0xdc, 0x6d, 0x75, 0xb6, 0x5f,
  0xa0, 0x40, 0xd6, 0x96, 0xa4, 0x34, 0x1b, 0xfb, 0x07, 0x32, 0x9b, 0x2c,
  0x78, 0xbf, 0xe6, 0xdf, 0x6f, 0x36, 0xd9, 0xc6, 0x84, 0xd2, 0x49, 0xc4,
  0x2a, 0xc8, 0xeb, 0x0c, 0xb9, 0x18, 0x04, 0x15, 0xd6, 0xbd, 0xa7, 0x50,
  0xf3, 0x48, 0x1f, 0x80, 0xa2, 0x32, 0x34, 0x46, 0x48, 0x98, 0xaa, 0xdc,
  0x0e, 0x05, 0x37, 0x84, 0x20, 0xeb, 0x59, 0x7d, 0xa8, 0x25, 0x84, 0xaa,
  0xc0, 0xba, 0xf7, 0x14, 0x6a, 0x1e, 0xe9, 0x03, 0x50, 0x54, 0x86, 0xc6,
  0x08, 0x09, 0x53, 0x95, 0xdb, 0xa1, 0xe0, 0x86, 0x40, 0x62, 0x3d, 0xab,
  0x0f, 0xb5, 0x84, 0x50, 0x75, 0x25, 0x18, 0x91, 0x26, 0x52, 0xc2, 0x08,
  0xc7, 0x3d, 0x89, 0xde, 0x48, 0xd1, 0x6b, 0x14, 0xe8, 0xac, 0xdd, 0x75,
  0xa5, 0x29, 0x5b, 0x0e, 0xb3, 0xa7, 0x1d, 0x30, 0xe1, 0x59, 0x51, 0x0f,
  0x5d, 0xb3, 0xf4, 0x17, 0xf6, 0xaf, 0x81, 0x7d, 0xf1, 0xfa, 0xdd, 0xb8,
  0xa3, 0x52, 0xd4, 0x19, 0x17, 0x70, 0x5c, 0x12, 0xdf, 0x30, 0xbf, 0xb7,
  0x45, 0x57, 0xb5, 0x6b, 0x4f, 0x28, 0x43, 0x86, 0x20, 0xf6, 0xe6, 0x13,
  0xa3, 0x4e, 0xd5, 0xaa, 0x94, 0x0a, 0xaf, 0xc8, 0xc4, 0xa3, 0xe8, 0x35,
  0xd6, 0xe0, 0x66, 0x27, 0x65, 0xe7, 0xf0, 0x0e, 0xc5, 0xa0, 0x86, 0x58,
  0x40, 0x60, 0x9e, 0xda, 0x27, 0x79, 0xc9, 0xb0, 0xe8, 0x02, 0x04, 0x66,
  0xdb, 0x4c, 0x41, 0x35, 0xb4, 0x83, 0xc6, 0x42, 0x4d, 0x5b, 0x02, 0x5d,
  0x24, 0x79, 0x5d, 0xdb, 0xd1, 0x2d, 0xe6, 0x3d, 0xd6, 0x2d, 0x5c, 0x5e,
  0x3f, 0x1e, 0xe2, 0xf1, 0x44, 0x8d, 0x45, 0xfe, 0xe1, 0x53, 0xfa, 0xe1,
  0xa8, 0xbb, 0xd1, 0x41, 0x99, 0x8b, 0x34, 0x33, 0xb5, 0x9e, 0xd3, 0x55,
  0x31, 0x43, 0xf7, 0x0b, 0x4c, 0x5b, 0x7b, 0x19, 0x00, 0xb0, 0xd0, 0xb5,
  0x8f, 0xb1, 0xb8, 0x44, 0x86, 0x84, 0x82, 0x82, 0xae, 0x8a, 0x72, 0xf8,
  0xdd, 0xa1, 0x3f, 0x7a, 0x14, 0x39, 0x74, 0x3b, 0xe3, 0x17, 0xb2, 0xcc,
  0x07, 0x1c, 0xf9, 0x24, 0xe7, 0x36, 0x53, 0x2f, 0xf2, 0xe5, 0x50, 0xdf,
  0x2b, 0xc1, 0x88, 0x34, 0x91, 0x12, 0x46, 0x38, 0xee, 0x49, 0xf4, 0x46,
  0x8a, 0x5e, 0xa3, 0x28, 0x68, 0xed, 0x96, 0x2c, 0x4d, 0xd9, 0x72, 0x98,
  0x3d, 0xed, 0x20, 0x0d, 0xcf, 0x8a, 0x7a, 0xe8, 0xba, 0xa8, 0xbf, 0xb0,
  0x7f, 0x0d, 0xec, 0x8b, 0xd7, 0xef, 0xc6, 0x1d, 0x95, 0xa2, 0xce, 0xb8,
  0x80, 0xe3, 0x92, 0xf8, 0x86, 0xf9, 0xbd, 0x2d, 0xba, 0xaa, 0x5d, 0xdf,
  0x42, 0x19, 0x32, 0x44, 0xb8, 0x37, 0x9f, 0x18, 0x75, 0xaa, 0x56, 0xa5,
  0x54, 0x78, 0x45, 0x26, 0x1e, 0x45, 0xaf, 0xb1, 0x06, 0x37, 0x3b, 0x29,
  0x3b, 0x87, 0x77, 0x28, 0x86, 0x43, 0xc4, 0x02, 0x02, 0xf3, 0xd4, 0x06,
  0xca, 0x4b, 0xc6, 0x4c, 0x17, 0x94, 0x30, 0xdb, 0x83, 0x0a, 0xaa, 0xa1,
  0x1d, 0x34, 0x16, 0x6a, 0xda, 0x12, 0x5c, 0x23, 0xc9, 0xeb, 0xda, 0x8e,
  0x6e, 0x31, 0xef, 0xb1, 0x6e, 0xe1, 0xf2, 0xfa, 0xf1, 0x10, 0x8f, 0x27,
  0x6a, 0x2c, 0xf2, 0x0f, 0x9f, 0xd2, 0x0f, 0x47, 0xdd, 0x8d, 0x0e, 0xca,
  0x5c, 0xa4, 0xcb, 0xa9, 0xf5, 0x9c, 0xae, 0x8a, 0x19, 0x5a, 0x63, 0x60,
  0xda, 0xda, 0xe8, 0x00, 0x68, 0x86, 0xae, 0xb7, 0x8c, 0x05, 0x2d, 0x32,
  0x24, 0x14, 0x14, 0x74, 0x55, 0x94, 0xc3, 0xef, 0x0e, 0xfd, 0xd1, 0xa3,
  0xc8, 0xa1, 0xdb, 0x19, 0xbf, 0x90, 0x65, 0x3e, 0xe0, 0xc8, 0x27, 0x39,
  0xf7, 0xa0, 0x7a, 0x91, 0x2f, 0x87, 0xfa, 0x16, 0x0b, 0x8f, 0x45, 0xfa,
  0x51, 0x84, 0xfa, 0x63, 0x22, 0x85, 0xd0, 0x49, 0xa0, 0x2d, 0x91, 0xfd,
  0x38, 0x15, 0x3f, 0x29, 0x34, 0x23, 0x9a, 0x56, 0x93, 0xb9, 0xe2, 0x74,
  0x02, 0x6d, 0xe5, 0xef, 0xc4, 0xea, 0xb2, 0x34, 0x83, 0xda, 0xf7, 0xc3,
  0x68, 0x0d, 0x06, 0xcd, 0xc4, 0xbe, 0x7b, 0xef, 0xf9, 0x39, 0x7a, 0x58,
  0x62, 0xe1, 0xb1, 0x48, 0x3f, 0x8a, 0x50, 0x7f, 0x4c, 0xa4, 0x10, 0x3a,
  0x09, 0xb4, 0xf3, 0xb1, 0x1f, 0xa7, 0xe2, 0x27, 0x85, 0x66, 0x44, 0xd3,
  0x6a, 0x32, 0x57, 0x9c, 0x4e, 0xb8, 0xac, 0xfc, 0x9d, 0x58, 0x5d, 0x96,
  0x66, 0x50, 0xfb, 0x7e, 0x18, 0xad, 0xc1, 0xa0, 0x99, 0xd8, 0x77, 0xef,
  0x3d, 0x3f, 0x47, 0x0f, 0xeb, 0xce, 0x4f, 0xf7, 0xec, 0xbf, 0xc7, 0xf9,
  0x3d, 0xfd, 0x24, 0xe7, 0xf7, 0xf4, 0xbf, 0xcd, 0xf9, 0x3d, 0xfd, 0xe7,
  0xcf, 0xef, 0x71, 0xf7, 0xfc, 0x9e, 0xfe, 0x77, 0x39, 0x3f, 0x6d, 0x73,
  0xa6, 0xa7, 0x97, 0x05, 0xe7, 0x37, 0x96, 0xd4, 0x0e, 0xc5, 0xc7, 0xc3,
  0x66, 0xeb, 0x5b, 0x1c, 0x48, 0x91, 0x64, 0x44, 0xf6, 0x54, 0x6b, 0x3e,
  0x77, 0x7e, 0xba, 0x67, 0xff, 0x3d, 0xce, 0xef, 0xe9, 0x27, 0x39, 0xbf,
  0xa7, 0xff, 0x6d, 0xce, 0xef, 0xe9, 0x3f, 0x7f, 0x7e, 0x8f, 0xbb, 0xe7,
  0xf7, 0xf4, 0xbf, 0xcb, 0xf9, 0x69, 0x0f, 0x34, 0x3d, 0xbd, 0x2c, 0x38,
  0xbf, 0xb1, 0xa4, 0x76, 0x28, 0x78, 0x1e, 0x36, 0x5b, 0xdf, 0xe2, 0x40,
  0x8a, 0x24, 0x23, 0xb2, 0xa7, 0x5a, 0xf3, 0x61, 0x19, 0xbe, 0xb1, 0xa7,
  0xa9, 0x88, 0x34, 0xc6, 0xd2, 0x21, 0x8f, 0x4e, 0x13, 0xfb, 0x79, 0xef,
  0x10, 0x1c, 0x14, 0x96, 0xb8, 0x77, 0xa3, 0x6e, 0xe4, 0x1a, 0xbe, 0x45,
  0x2c, 0x23, 0x34, 0xf6, 0xf4, 0x0d, 0x91, 0xde, 0x57, 0x3a, 0xe4, 0xd1,
  0x69, 0x62, 0x3f, 0xef, 0x1d, 0x82, 0x43, 0xbb, 0x12, 0xf7, 0x6e, 0xd4,
  0x8d, 0x5c, 0xc3, 0xb7, 0x68, 0x36, 0x80, 0x4b, 0x20, 0x6b, 0x57, 0xb8,
  0x1b, 0x03, 0xb4, 0x32, 0x9b, 0x77, 0xf0, 0x02, 0xfb, 0x35, 0xe4, 0xc7,
  0xb3, 0x01, 0x5c, 0x02, 0x59, 0xbb, 0xc2, 0xdd, 0x18, 0xda, 0x95, 0xd9,
  0xbc, 0x83, 0x17, 0xd8, 0xaf, 0x21, 0x3f, 0xfe, 0xc7, 0x68, 0x41, 0x1a,
  0x75, 0x55, 0x76, 0x93, 0x8a, 0x85, 0x0e, 0xbc, 0xad, 0x7b, 0xf0, 0xb1,
  0xff, 0x18, 0x2d, 0x48, 0xa3, 0xe6, 0xc9, 0x6e, 0x52, 0xb1, 0xd0, 0x81,
  0xb7, 0x75, 0x0f, 0x3e, 0xb6, 0xbe, 0xa6, 0x5b, 0x7a, 0x84, 0xd3, 0xe1,
  0xfd, 0x47, 0x56, 0x5e, 0x11, 0xd6, 0xce, 0x8b, 0xf7, 0x67, 0xa1, 0xef,
  0xcd, 0x2c, 0xd5, 0x96, 0xe6, 0x39, 0x88, 0x42, 0x73, 0x5e, 0x43, 0x18,
  0xf7, 0x43, 0x42, 0x6b, 0x37, 0xd7, 0xf1, 0xe4, 0xdb, 0x6d, 0xcf, 0x0b,
  0x44, 0x91, 0x85, 0x32, 0x72, 0xd1, 0xb8, 0x34, 0x56, 0xab, 0xbf, 0xeb,
  0x81, 0x7f, 0xc2, 0x2e, 0x2f, 0x3d, 0x73, 0x80, 0xd8, 0xec, 0x1c, 0x49,
  0xa4, 0xa8, 0xb6, 0x0a, 0xda, 0x4c, 0x42, 0x19, 0xcc, 0x6b, 0x01, 0x6f,
  0x03, 0xd4, 0x85, 0x4a, 0x42, 0x9a, 0xd8, 0x27, 0x6c, 0x1e, 0xf3, 0x9a,
  0x74, 0xc1, 0xd5, 0x62, 0x29, 0xe5, 0xbd, 0xf7, 0x94, 0x37, 0x92, 0x89,
  0xbd, 0x9d, 0xfc, 0x40, 0xb5, 0x8b, 0xec, 0x63, 0x97, 0x52, 0x1f, 0xb5,
  0xba, 0x6d, 0x7d, 0x83, 0x06, 0xb0, 0x7a, 0xf0, 0xc7, 0xa2, 0x78, 0x50,
  0x9d, 0xca, 0x7d, 0xae, 0x49, 0x51, 0x10, 0x73, 0xf0, 0x40, 0x4f, 0x27,
  0x96, 0x52, 0x03, 0xde, 0x67, 0xf9, 0x68, 0x14, 0x03, 0x1b, 0xca, 0x04,
  0x97, 0x39, 0x61, 0xd2, 0x0c, 0xe3, 0x67, 0x5e, 0x37, 0x43, 0x8d, 0xa4,
  0xd6, 0xa9, 0x76, 0xd1, 0x62, 0x9d, 0x3d, 0x01, 0x2c, 0xc5, 0x32, 0xf4,
  0x55, 0x7b, 0x25, 0x4f, 0x80, 0x40, 0x67, 0x58, 0x6c, 0xa4, 0xe2, 0xda,
  0xd6, 0xbe, 0x4c, 0xee, 0xda, 0x94, 0x30, 0x9c, 0x84, 0x85, 0x6c, 0x9a,
  0x21, 0xcd, 0x2b, 0xfe, 0x37, 0x3a, 0xfc, 0x9e, 0xda, 0x08, 0xd6, 0xbc,
  0x7c, 0xcf, 0x43, 0x70, 0x53, 0xfc, 0xca, 0x8b, 0xd1, 0x67, 0xeb, 0x32,
  0xa3, 0x39, 0xe5, 0xf6, 0x2a, 0xf3, 0x8b, 0x89, 0x2d, 0xf8, 0x22, 0x07,
  0x07, 0xd8, 0xfd, 0x62, 0x16, 0x27, 0x09, 0xa2, 0x01, 0x54, 0x18, 0x81,
  0xf5, 0x75, 0xe4, 0xd2, 0x23, 0x9c, 0x0e, 0xef, 0x3f, 0xb2, 0xf2, 0x8a,
  0xb0, 0x76, 0x5e, 0xbc, 0x3f, 0x0b, 0x7d, 0x6f, 0x66, 0xa9, 0xb6, 0x34,
  0xcf, 0xe1, 0x17, 0x9a, 0xf3, 0x1a, 0xc2, 0xb8, 0x1f, 0x12, 0x94, 0xbb,
  0xb9, 0x8e, 0x27, 0xdf, 0x6c, 0x7b, 0x5e, 0x20, 0x8a, 0x2c, 0x94, 0x91,
  0x8b, 0xc6, 0xa5, 0xb1, 0x5a, 0xfd, 0x5d, 0x0f, 0xfc, 0x13, 0x76, 0x79,
  0xe9, 0x99, 0x43, 0xcb, 0x66, 0xe7, 0x48, 0x22, 0x45, 0xb5, 0x55, 0xd0,
  0x83, 0x12, 0xca, 0x60, 0x5e, 0x0b, 0xb2, 0x1b, 0xa0, 0x2e, 0x54, 0x12,
  0xd2, 0xc4, 0x3e, 0x61, 0x67, 0x99, 0xd7, 0xa4, 0x0b, 0xae, 0x16, 0x4b,
  0x29, 0xef, 0xbd, 0xa7, 0xbc, 0x91, 0x4c, 0xec, 0xed, 0xe4, 0x7b, 0xaa,
  0x5d, 0x64, 0x1f, 0xbb, 0x94, 0xfa, 0xa8, 0xd5, 0x6d, 0xeb, 0x1b, 0x34,
  0x80, 0xd5, 0x03, 0x4e, 0x16, 0xc5, 0x83, 0xea, 0x54, 0xee, 0x73, 0x4d,
  0x8a, 0x22, 0x9c, 0x83, 0x07, 0x7a, 0x3a, 0xb1, 0x94, 0x1a, 0xf0, 0x3e,
  0xcb, 0x47, 0xa3, 0x00, 0xd9, 0x50, 0x26, 0xb8, 0xcc, 0x09, 0x93, 0x66,
  0x8c, 0x3f, 0xf3, 0xba, 0x19, 0x6a, 0x24, 0xb5, 0x4e, 0xb5, 0x8b, 0x16,
  0xeb, 0xec, 0x09, 0x60, 0x29, 0x96, 0xa1, 0xaf, 0xda, 0x2b, 0x79, 0x02,
  0x04, 0x3a, 0xc3, 0x62, 0x23, 0x15, 0xd7, 0xb6, 0xf6, 0x65, 0x72, 0xd7,
  0xa6, 0x84, 0xe1, 0x24, 0x2c, 0x64, 0xd3, 0x0c, 0x69, 0x5e, 0xf1, 0x6f,
  0xe8, 0xf0, 0x7b, 0x6a, 0x23, 0x58, 0xf3, 0xf2, 0x3d, 0x0f, 0xc1, 0x4d,
  0xf1, 0x2b, 0x2f, 0x46, 0x9f, 0xad, 0xcb, 0x8c, 0xe6, 0x94, 0xdb, 0xab,
  0xcc, 0x2f, 0x26, 0xb6, 0xc8, 0x8c, 0x1c, 0x1c, 0x60, 0xf7, 0x8b, 0x59,
  0x9c, 0x24, 0x88, 0x06, 0x7d, 0x78, 0x08, 0x2c, 0x40, 0x76, 0x6b, 0x43,
  0xc0, 0x8d, 0x56, 0x82, 0xc8, 0xca, 0x9d, 0x88, 0x09, 0x0b, 0xe6, 0x5f,
  0x57, 0xbc, 0xeb, 0x25, 0x4c, 0xfb, 0x5c, 0x21, 0xbb, 0xe4, 0xa8, 0xf8,
  0xba, 0xe4, 0xdc, 0x0e, 0x0e, 0x19, 0xf7, 0xd8, 0xb6, 0x48, 0x64, 0x64,
  0x98, 0x17, 0x4d, 0x55, 0x2e, 0xef, 0x92, 0xaf, 0x53, 0x2c, 0x8b, 0x94,
  0xe9, 0x34, 0x5b, 0x04, 0x15, 0x5b, 0xdc, 0x75, 0x5b, 0x74, 0x5b, 0xee,
  0xc0, 0xad, 0x2b, 0x24, 0x6d, 0x9c, 0xb7, 0xc5, 0xf0, 0x01, 0xb3, 0x5f,
  0x10, 0xbf, 0x52, 0x4d, 0xc1, 0x19, 0xc9, 0xe3, 0xf1, 0x71, 0x68, 0x3e,
  0x05, 0xc8, 0x6e, 0x6d, 0x08, 0xb8, 0xd1, 0x4a, 0x40, 0x57, 0xb9, 0xe1,
  0x30, 0x61, 0xc1, 0xfc, 0xeb, 0x8a, 0x77, 0xbd, 0x84, 0x69, 0x9f, 0x2b,
  0x64, 0x97, 0x1c, 0x15, 0x5f, 0x97, 0x9c, 0xdb, 0xc1, 0x21, 0xe3, 0x56,
  0xda, 0x16, 0x89, 0x8c, 0x0c, 0xf3, 0xa2, 0xa9, 0xca, 0xe5, 0x5d, 0xf2,
  0x4d, 0x8a, 0x65, 0x91, 0x32, 0x9d, 0x66, 0x8b, 0xa0, 0x62, 0x8b, 0x9b,
  0x6b, 0x8b, 0x6e, 0xcb, 0x8d, 0xb6, 0x75, 0x85, 0xa4, 0x8d, 0xf3, 0xb6,
  0x18, 0x3e, 0x60, 0xf6, 0x0b, 0xe2, 0x57, 0xaa, 0x29, 0x38, 0x23, 0x79,
  0x3c, 0x3e, 0x0e, 0xcd, 0x27, 0x6d, 0xe9, 0xb3, 0xb6, 0x54, 0x9f, 0x46,
  0x1b, 0x76, 0x03, 0x12, 0x32, 0xf8, 0x8b, 0xe8, 0x65, 0x96, 0x75, 0x67,
  0x73, 0x85, 0xb2, 0x50, 0x04, 0xf5, 0x69, 0x75, 0xb7, 0x84, 0x49, 0x2e,
  0xb5, 0xa9, 0x7c, 0xf7, 0x30, 0x3f, 0x86, 0x3f, 0x5d, 0x5b, 0x0d, 0xfc,
  0xbe, 0xf6, 0x50, 0xc4, 0x49, 0x80, 0xc1, 0x17, 0x03, 0x38, 0x60, 0x60,
  0x3e, 0x89, 0x40, 0x03, 0xa7, 0x9f, 0x11, 0xc8, 0x49, 0x6f, 0x77, 0x2f,
  0xe9, 0xd9, 0xd5, 0xe9, 0x0b, 0x41, 0xbe, 0x1b, 0x2a, 0x76, 0x46, 0xef,
  0x01, 0x8a, 0x60, 0x6c, 0xab, 0x48, 0x95, 0x37, 0xa4, 0x98, 0xad, 0x2b,
  0xb8, 0x6c, 0xdb, 0x80, 0x14, 0xc0, 0x07, 0x45, 0x80, 0xb0, 0xc2, 0xc9,
  0x0f, 0x7b, 0xbb, 0xbb, 0xf7, 0x42, 0xe7, 0x88, 0x81, 0xb8, 0x16, 0x41,
  0x07, 0x3c, 0x8a, 0x63, 0x0a, 0xb6, 0xd4, 0x3b, 0xcd, 0xa5, 0x8e, 0xa7,
  0x0b, 0x36, 0x66, 0x3e, 0x69, 0x91, 0x6c, 0xdc, 0x15, 0x64, 0x5e, 0xc7,
  0x08, 0x53, 0x84, 0xa3, 0x63, 0x58, 0xd8, 0x21, 0xcd, 0xb1, 0x3e, 0x68,
  0xbd, 0x13, 0x6d, 0xa6, 0x8c, 0x09, 0xe1, 0x25, 0xd1, 0xfa, 0x46, 0xc9,
  0xd7, 0x77, 0xce, 0x54, 0xf6, 0x3c, 0x44, 0x34, 0x2b, 0xba, 0x61, 0x32,
  0x69, 0xbf, 0x9f, 0xb5, 0xa5, 0xfa, 0x34, 0xda, 0xb0, 0x1b, 0x90, 0x90,
  0xc1, 0x5f, 0x44, 0x2f, 0xb3, 0xac, 0x3b, 0x9b, 0x2b, 0x94, 0x85, 0xc2,
  0xab, 0x4f, 0xab, 0xbb, 0x25, 0x4c, 0x72, 0xa9, 0x4d, 0xe5, 0xbb, 0x87,
  0xf9, 0x31, 0x36, 0xea, 0xda, 0x6a, 0xe0, 0xf7, 0xb5, 0x07, 0x31, 0x4e,
  0x02, 0x0c, 0xbe, 0x18, 0x60, 0x05, 0x03, 0xf3, 0x49, 0x04, 0x1a, 0x38,
  0xfd, 0x8c, 0x40, 0x4e, 0x7a, 0x5b, 0x7f, 0x49, 0x43, 0xaf, 0x4e, 0xd3,
  0x08, 0xf2, 0xdd, 0x50, 0xb1, 0x33, 0x80, 0x02, 0x29, 0x82, 0xb1, 0xad,
  0x22, 0x55, 0xde, 0x90, 0x62, 0xb6, 0xae, 0xe0, 0xb2, 0x3d, 0x05, 0x52,
  0x00, 0x1f, 0x14, 0x01, 0xc2, 0x0a, 0x27, 0x3f, 0xec, 0xed, 0xee, 0xde,
  0x0b, 0x9d, 0x23, 0x06, 0xe2, 0x5a, 0x04, 0x1d, 0xf0, 0x28, 0x8e, 0x29,
  0xd8, 0x52, 0xef, 0x34, 0x97, 0x3a, 0x9e, 0x2e, 0xd8, 0x98, 0xf9, 0xa4,
  0x45, 0xb2, 0x71, 0x57, 0x90, 0x79, 0x1d, 0x23, 0x4c, 0x11, 0x8e, 0x8e,
  0x61, 0x61, 0x87, 0x34, 0xc7, 0xfa, 0xa0, 0xf5, 0x4e, 0xb4, 0xd3, 0x32,
  0x26, 0x84, 0x97, 0x44, 0xeb, 0x1b, 0x25, 0x5f, 0xdd, 0x39, 0x53, 0xd9,
  0xf3, 0x10, 0xd1, 0xac, 0xe8, 0x86, 0xc9, 0xfc, 0x47, 0xeb, 0xf0, 0x8a,
  0xe2, 0xf0, 0x38, 0xbf, 0x61, 0xc6, 0x42, 0xc3, 0x1a, 0x06, 0xb4, 0xac,
  0x69, 0x54, 0x42, 0xd9, 0x88, 0xfb, 0x88, 0xec, 0x6a, 0xd3, 0x3a, 0xe8,
  0x3d, 0xe4, 0xb5, 0x11, 0x62, 0xa1, 0xb2, 0x16, 0xe6, 0xb8, 0x0d, 0x76,
  0xd4, 0x4e, 0xce, 0x7c, 0xd6, 0xd6, 0x0c, 0x50, 0x71, 0x3c, 0xa4, 0xba,
  0xe2, 0x2e, 0x98, 0x02, 0x4a, 0x91, 0xc1, 0xbb, 0xc8, 0xb2, 0x2f, 0x0b,
  0xcf, 0xe5, 0x01, 0x90, 0x2d, 0x4e, 0x88, 0xd1, 0x12, 0xa4, 0x0e, 0xb6,
  0xab, 0xcf, 0x58, 0x15, 0x90, 0x5e, 0x6f, 0xfa, 0xac, 0xf4, 0x20, 0x9d,
  0xff, 0xd1, 0x3a, 0xbc, 0xa2, 0x38, 0x3c, 0xce, 0xbf, 0x31, 0x63, 0xa1,
  0x61, 0x0d, 0x03, 0x5a, 0xd6, 0x34, 0x2a, 0xa1, 0x6c, 0xc4, 0x7d, 0x44,
  0x6c, 0xd5, 0x59, 0xc7, 0x77, 0xc2, 0xce, 0x93, 0x10, 0x2d, 0x82, 0x13,
  0x76, 0xb5, 0x69, 0x1d, 0xb4, 0x17, 0xf2, 0x3a, 0x05, 0xb1, 0x50, 0x59,
  0x8b, 0x64, 0xdc, 0x06, 0x3b, 0x6a, 0x27, 0x67, 0x3e, 0x6b, 0x6b, 0x06,
  0x6b, 0x9d, 0x63, 0x8e, 0xeb, 0xa7, 0x29, 0x69, 0x80, 0x94, 0x2f, 0xd6,
  0xa8, 0x38, 0x1e, 0x52, 0x5d, 0x71, 0x17, 0x4c, 0x01, 0xa5, 0xc8, 0xe0,
  0x5d, 0x64, 0xd9, 0x97, 0x85, 0xe7, 0xf2, 0x00, 0xc8, 0x16, 0x27, 0xc4,
  0x68, 0x09, 0x52, 0x07, 0xbe, 0xd5, 0x67, 0xac, 0x8a, 0x39, 0xaf, 0x37,
  0x7d, 0x56, 0x7a, 0x90, 0x4e, 0xb6, 0xea, 0xac, 0xe3, 0x3b, 0x61, 0xe7,
  0xd6, 0x8c, 0x92, 0x30, 0x48, 0xa4, 0x41, 0x37, 0xf2, 0xa8, 0xf9, 0x94,
  0xa3, 0x1a, 0xa5, 0x73, 0xbc, 0x73, 0xfb, 0x2d, 0x5e, 0x49, 0xed, 0x50,
  0xd2, 0xc0, 0xb4, 0xb9, 0x95, 0x98, 0x19, 0xb5, 0xb6, 0x19, 0x53, 0xa1,
  0x49, 0x88, 0x16, 0xc1, 0x89, 0xb5, 0xce, 0x31, 0xc7, 0xf5, 0xd3, 0x94,
  0x34, 0x40, 0xca, 0x17, 0x6b, 0x6b, 0x46, 0x49, 0x18, 0x24, 0xd2, 0x83,
  0x1b, 0x79, 0xd4, 0x7c, 0xca, 0x51, 0x8d, 0xd2, 0x39, 0xde, 0x19, 0x5b,
  0x92, 0x57, 0x52, 0x3b, 0x94, 0x34, 0x30, 0x6d, 0xee, 0x16, 0x66, 0x46,
  0xad, 0x6d, 0xc6, 0x54, 0xe8, 0x84, 0xf4, 0x0a, 0x97, 0xcd, 0x93, 0x00,
  0x6e, 0xa9, 0x57, 0xe4, 0x32, 0xe6, 0xe1, 0x2d, 0x30, 0x19, 0xdf, 0x49,
  0x2e, 0xe8, 0x86, 0x6b, 0x4a, 0x0a, 0x53, 0xa3, 0x41, 0x69, 0x60, 0x1a,
  0x26, 0x74, 0x38, 0x54, 0x19, 0xbe, 0xaa, 0xbc, 0xd0, 0xf4, 0xc6, 0x55,
  0x6e, 0x4e, 0xb5, 0xd8, 0x20, 0xbc, 0xc4, 0xd5, 0x84, 0x81, 0x38, 0x1b,
  0xfd, 0x68, 0xb0, 0xd8, 0xd5, 0xdc, 0x73, 0x87, 0xc6, 0x1b, 0x6c, 0xb7,
  0xe2, 0x4f, 0x83, 0xa4, 0x75, 0x21, 0x54, 0x89, 0xe3, 0xbc, 0x76, 0x57,
  0x93, 0xce, 0xe7, 0x16, 0x75, 0xa0, 0xba, 0xfa, 0x34, 0xdc, 0x7c, 0xea,
  0x49, 0x35, 0xf0, 0x1b, 0xc2, 0xb8, 0x7c, 0x97, 0x74, 0x01, 0xaf, 0x09,
  0x27, 0xc0, 0x60, 0x97, 0xe3, 0xaa, 0x4a, 0x65, 0x91, 0x4c, 0x22, 0x68,
  0xba, 0x92, 0xf1, 0x96, 0xde, 0x51, 0x31, 0x8e, 0xfd, 0x34, 0x51, 0x77,
  0x80, 0x8b, 0x06, 0x8c, 0xc0, 0x92, 0xb4, 0x6d, 0xa1, 0x63, 0x6c, 0xe1,
  0xb4, 0xca, 0x97, 0x0d, 0xa7, 0x01, 0x48, 0xce, 0xf1, 0x7d, 0x2a, 0xd8,
  0xe5, 0xbc, 0x9c, 0xa4, 0x7c, 0x47, 0x6c, 0xca, 0x8f, 0x3a, 0x19, 0x5b,
  0x50, 0xbd, 0x60, 0x6f, 0x20, 0xcf, 0x48, 0xab, 0x01, 0xb3, 0xe4, 0xe1,
  0x01, 0xf5, 0x45, 0x47, 0xf0, 0x71, 0xdd, 0x07, 0xed, 0x27, 0x18, 0x15,
  0x6f, 0x78, 0x31, 0x90, 0xdb, 0xab, 0xc5, 0xca, 0x94, 0x31, 0x55, 0x7b,
  0x77, 0x2a, 0x50, 0x83, 0x08, 0x5d, 0x60, 0xb6, 0xca, 0xda, 0x09, 0x54,
  0x9b, 0x12, 0x9a, 0x95, 0x66, 0x6e, 0x94, 0xc4, 0x63, 0x31, 0xfa, 0x25,
  0x04, 0x1a, 0x4d, 0x0e, 0x02, 0x34, 0xae, 0x24, 0xf3, 0x0c, 0x8c, 0xc2,
  0x7f, 0x43, 0x85, 0x0b, 0x05, 0xa4, 0x92, 0x9b, 0x9c, 0x26, 0xa5, 0x7a,
  0x7b, 0xc5, 0x78, 0x03, 0x21, 0xc5, 0x5f, 0xb0, 0x8e, 0x46, 0x1e, 0x43,
  0x3e, 0x93, 0x35, 0x3b, 0xe3, 0xe3, 0x6b, 0xef, 0xb7, 0x38, 0x9a, 0xfd,
  0x13, 0xd2, 0x2b, 0x5c, 0x36, 0x4f, 0x02, 0xb8, 0xa5, 0x5e, 0x91, 0xcb,
  0x98, 0x87, 0xb7, 0xc0, 0x64, 0x7c, 0x27, 0xb9, 0xa0, 0x1b, 0xae, 0x29,
  0x29, 0x4c, 0x8d, 0x06, 0xa5, 0x81, 0x69, 0x98, 0xd0, 0xe1, 0x50, 0x65,
  0xf8, 0xaa, 0xf2, 0x42, 0xd3, 0x1b, 0x57, 0xb9, 0x39, 0xd5, 0x62, 0x83,
  0xf0, 0x12, 0x57, 0x13, 0x86, 0xe2, 0x6c, 0xf4, 0xa3, 0xc1, 0x62, 0x57,
  0x73, 0xcf, 0x1d, 0x1a, 0xef, 0xbe, 0xdd, 0x8a, 0x3f, 0x0d, 0x92, 0xd6,
  0x85, 0x50, 0x25, 0x8e, 0xf3, 0xda, 0x5d, 0x4d, 0x3a, 0x9f, 0x5b, 0xd4,
  0x81, 0xea, 0xea, 0xd3, 0x70, 0xf3, 0xa9, 0x61, 0xd5, 0xc0, 0xef, 0x16,
  0xe3, 0xf2, 0x5d, 0xd2, 0x05, 0xbc, 0x26, 0x9c, 0x00, 0x83, 0x5d, 0x8e,
  0xab, 0x2a, 0x95, 0x45, 0x32, 0x89, 0x40, 0xed, 0x4a, 0xc6, 0x5b, 0x7a,
  0x47, 0xc5, 0x38, 0xf6, 0xd3, 0x44, 0xdd, 0x01, 0x2e, 0x1a, 0x30, 0x02,
  0x4b, 0xd2, 0xb6, 0x85, 0x8e, 0xb1, 0x85, 0xd3, 0x2a, 0x5f, 0x36, 0x9c,
  0x06, 0x20, 0x39, 0xc7, 0xf7, 0xa9, 0x60, 0x97, 0xf3, 0x72, 0x92, 0xf2,
  0x1d, 0xb1, 0x29, 0x3f, 0xea, 0x64, 0x6c, 0xe1, 0xf8, 0x82, 0xbd, 0x81,
  0x3c, 0x23, 0x7d, 0x08, 0xcc, 0x92, 0x87, 0x07, 0xd4, 0x34, 0x1d, 0xc1,
  0xc7, 0x75, 0x1f, 0xb4, 0x9f, 0x60, 0x54, 0xbc, 0xe1, 0xc5, 0x40, 0x6e,
  0xaf, 0x16, 0x2b, 0x53, 0xc6, 0x54, 0xed, 0xdd, 0xa9, 0x40, 0x0d, 0x22,
  0x74, 0x81, 0xd9, 0x2a, 0x6b, 0x27, 0x50, 0x6d, 0x4a, 0x68, 0x56, 0x3a,
  0xbd, 0x51, 0x12, 0x8f, 0x05, 0xf0, 0x97, 0x10, 0x68, 0x34, 0x39, 0x08,
  0xb8, 0xb9, 0x92, 0xcc, 0x33, 0x30, 0x0a, 0xff, 0x0d, 0x15, 0x2e, 0x14,
  0x90, 0x4a, 0x6e, 0x72, 0x9a, 0x94, 0xea, 0xed, 0x15, 0xe3, 0x0d, 0x84,
  0x14, 0x7f, 0xc1, 0x3a, 0x1a, 0x79, 0x0c, 0xf9, 0x4c, 0xd6, 0xec, 0x8c,
  0x0f, 0xbe, 0xbd, 0xdf, 0xe2, 0x68, 0xf6, 0xd3, 0x71, 0xf1, 0x44, 0x6c,
  0xad, 0x86, 0x1e, 0x0f, 0x97, 0xfa, 0x96, 0x21, 0x16, 0x29, 0x0a, 0x4b,
  0x29, 0xd6, 0x4f, 0x90, 0x91, 0xda, 0xe5, 0x8e, 0x79, 0x41, 0xbc, 0x60,
  0x0d, 0x37, 0x05, 0xa9, 0x5f, 0xf3, 0x3b, 0xaa, 0xd5, 0xe0, 0x33, 0x27,
  0x0d, 0x54, 0xdc, 0xf4, 0x4a, 0x50, 0x59, 0x33, 0xf5, 0x7e, 0x39, 0xcb,
  0x74, 0x5c, 0x3c, 0x11, 0x5b, 0xab, 0xa1, 0xc7, 0xc3, 0xa5, 0xbe, 0x65,
  0x88, 0x45, 0x8a, 0xc2, 0x52, 0x8a, 0xf5, 0x13, 0x64, 0xa4, 0x36, 0xb2,
  0x63, 0x5e, 0x10, 0x2f, 0x58, 0xc3, 0x4d, 0x41, 0xea, 0xd7, 0xfc, 0x8e,
  0x6a, 0x35, 0xf8, 0xcc, 0x49, 0x03, 0x15, 0x37, 0xbd, 0x12, 0x54, 0xd6,
  0x4c, 0xbd, 0x5f, 0xce, 0xb2, 0x74, 0x1e, 0xeb, 0x13, 0x81, 0x09, 0xc3,
  0x6d, 0xca, 0xac, 0x0d, 0xe8, 0x21, 0x85, 0x84, 0x29, 0x24, 0xf5, 0x98,
  0x93, 0xef, 0x0a, 0x29, 0x94, 0xd6, 0x19, 0xd2, 0xad, 0x8a, 0x98, 0x86,
  0xe8, 0x5c, 0x43, 0x0f, 0x50, 0x49, 0xed, 0x54, 0x0a, 0xf5, 0x09, 0x07,
  0xce, 0x55, 0xa6, 0x90, 0xee, 0xff, 0xf6, 0xd8, 0x3e, 0x40, 0x14, 0x40,
  0x21, 0xf3, 0xee, 0x70, 0xe2, 0xba, 0xe4, 0x72, 0x49, 0x12, 0x32, 0x5a,
  0xcd, 0x80, 0x89, 0x71, 0xda, 0x09, 0x98, 0xe4, 0xb6, 0xdc, 0x43, 0x4e,
  0x6e, 0x60, 0xce, 0xb1, 0x0c, 0x4f, 0xfa, 0x3a, 0xd3, 0x84, 0x21, 0xb2,
  0x2d, 0xf8, 0x00, 0x1a, 0x5b, 0x43, 0x8a, 0xd1, 0x84, 0xcf, 0x30, 0x93,
  0xd9, 0xdf, 0xef, 0x01, 0x15, 0x91, 0x0e, 0xe1, 0x42, 0x63, 0x74, 0xd9,
  0xeb, 0xf4, 0x22, 0x53, 0x3c, 0x51, 0x61, 0xdf, 0xe5, 0xd4, 0x6c, 0x21,
  0xc5, 0x45, 0x09, 0xab, 0x07, 0xda, 0x51, 0x60, 0xb4, 0x32, 0xd7, 0x04,
  0x97, 0xb4, 0x22, 0x17, 0x17, 0x41, 0xd8, 0x6d, 0x3d, 0xcf, 0x97, 0xea,
  0x13, 0x1e, 0x24, 0x99, 0x64, 0xf3, 0x00, 0xf8, 0x97, 0x4e, 0x65, 0x35,
  0x8c, 0x58, 0x43, 0xb6, 0x8d, 0xb9, 0xa0, 0xc2, 0xce, 0xa1, 0xf8, 0x6f,
  0x75, 0x46, 0x7f, 0xbc, 0xbb, 0x47, 0x93, 0x7d, 0xbc, 0xfb, 0x6c, 0xbb,
  0x2d, 0x95, 0xe7, 0x75, 0x36, 0xa4, 0x5c, 0xae, 0xb8, 0x76, 0x7a, 0xde,
  0xf1, 0xbf, 0x93, 0x26, 0x8a, 0x97, 0x24, 0x01, 0x6c, 0xb6, 0xaa, 0x34,
  0x2b, 0x12, 0xed, 0xfb, 0x60, 0x2d, 0xd6, 0x57, 0x00, 0x23, 0x0c, 0xa4,
  0xbc, 0x7b, 0x87, 0x93, 0x48, 0x20, 0x93, 0x78, 0x9f, 0x52, 0x7a, 0x55,
  0x5a, 0x83, 0xf1, 0x3e, 0xd0, 0x73, 0x30, 0x13, 0x39, 0x1b, 0x38, 0xd6,
  0xc8, 0x53, 0x8d, 0x3c, 0xae, 0x14, 0x92, 0x80, 0x59, 0xbb, 0xd1, 0xae,
  0xe5, 0x3b, 0x6f, 0x72, 0x63, 0xd9, 0x5f, 0x51, 0x83, 0xde, 0xba, 0x4e,
  0x2f, 0xb3, 0xb0, 0xee, 0xdb, 0x30, 0x24, 0x63, 0x32, 0x71, 0x03, 0xb9,
  0x8a, 0x30, 0xd9, 0x91, 0x91, 0xc5, 0xfb, 0x2e, 0x75, 0x1c, 0xd2, 0x5d,
  0x8e, 0x00, 0xc3, 0xdc, 0x32, 0x63, 0xf4, 0x92, 0xd7, 0x5e, 0xeb, 0xc3,
  0xbe, 0xce, 0x87, 0xe8, 0xc3, 0x45, 0xc8, 0x51, 0xdc, 0x15, 0x87, 0xdb,
  0xe2, 0xc4, 0xfa, 0x9d, 0x18, 0x55, 0xdb, 0x1c, 0xee, 0xc9, 0xd8, 0xb0,
  0x20, 0xd7, 0xa5, 0x97, 0x32, 0xe3, 0xcc, 0xcf, 0x7e, 0x34, 0xba, 0xe8,
  0xd2, 0x79, 0xac, 0x89, 0x04, 0x26, 0x0c, 0xb7, 0x29, 0xb3, 0x36, 0xa0,
  0x87, 0x14, 0x12, 0xa6, 0x90, 0xd4, 0x63, 0x4e, 0xbe, 0x2b, 0xa4, 0x50,
  0x5a, 0x67, 0x48, 0xb7, 0x2a, 0x62, 0x1a, 0xa2, 0xad, 0x0d, 0x3d, 0x40,
  0x25, 0xb5, 0x53, 0x29, 0xd4, 0x27, 0x1c, 0x38, 0x57, 0x99, 0x42, 0xba,
  0xff, 0xdb, 0x63, 0xfb, 0x00, 0x51, 0x00, 0x85, 0xcc, 0xbb, 0xc3, 0x89,
  0xeb, 0x92, 0xcb, 0x25, 0x49, 0xc8, 0x68, 0x35, 0x03, 0x26, 0xc6, 0x69,
  0x27, 0x60, 0x92, 0xdb, 0x72, 0x0f, 0x39, 0xb9, 0x81, 0x39, 0xc7, 0x32,
  0x3c, 0xe9, 0xeb, 0x4c, 0x13, 0x86, 0xc8, 0xb6, 0xe0, 0x03, 0x68, 0x6c,
  0x0d, 0x29, 0x46, 0x13, 0x3e, 0xc3, 0x4c, 0x66, 0x7f, 0xbf, 0x07, 0x54,
  0x44, 0xda, 0x87, 0x0b, 0x8d, 0xd1, 0x65, 0xaf, 0xd3, 0x8b, 0x4c, 0xf1,
  0x44, 0x85, 0x7d, 0x97, 0x53, 0xb3, 0x85, 0x14, 0x17, 0x25, 0xac, 0x1e,
  0x68, 0x47, 0x81, 0xd1, 0xca, 0x5c, 0x13, 0x5c, 0xd2, 0x8a, 0x5c, 0x5c,
  0x04, 0x61, 0xb7, 0xf5, 0x3c, 0x5f, 0xaa, 0x4f, 0x78, 0x90, 0x64, 0x92,
  0xcd, 0x33, 0xbf, 0x93, 0x53, 0x59, 0x0d, 0x23, 0xd6, 0x90, 0xed, 0x71,
  0x2e, 0xa8, 0xb0, 0x73, 0x28, 0xfe, 0x5b, 0x9d, 0xd1, 0x1f, 0xef, 0xee,
  0xd1, 0x64, 0x1f, 0xef, 0x3e, 0xdb, 0x6e, 0x4b, 0xe5, 0x79, 0x9d, 0x0d,
  0x29, 0x97, 0x2b, 0xae, 0x9d, 0x9e, 0x77, 0xfc, 0xef, 0xa4, 0x89, 0xe2,
  0x25, 0x49, 0x00, 0x9b, 0xad, 0x2a, 0xcd, 0x8a, 0x44, 0x6f, 0x3f, 0x58,
  0x8b, 0xf5, 0x15, 0xc0, 0x08, 0x03, 0x29, 0xef, 0xde, 0xe1, 0x24, 0x12,
  0xc8, 0x24, 0xde, 0xa7, 0x94, 0x5e, 0x95, 0xbe, 0x61, 0xbc, 0x0f, 0xf4,
  0x1c, 0xcc, 0x44, 0xce, 0x06, 0x8e, 0x75, 0xf9, 0x54, 0x23, 0x8f, 0x2b,
  0x85, 0x24, 0x60, 0xd6, 0xee, 0xc2, 0x6b, 0xf9, 0xce, 0x9b, 0xdc, 0x58,
  0xf6, 0x57, 0xd4, 0xbd, 0xb7, 0xae, 0xd3, 0xcb, 0x2c, 0xac, 0xfb, 0x36,
  0x0c, 0xc9, 0x98, 0x4c, 0xdc, 0x5d, 0xae, 0x22, 0xc0, 0x76, 0x64, 0x64,
  0xf1, 0xbe, 0x4b, 0x1d, 0x87, 0xb4, 0x9e, 0x23, 0xc0, 0x30, 0xb7, 0xcc,
  0x18, 0xbd, 0xe4, 0xb5, 0xd7, 0x17, 0xb1, 0xaf, 0x2d, 0x22, 0x9a, 0x74,
  0x11, 0x72, 0x14, 0xb7, 0xcc, 0xe1, 0x9e, 0x39, 0xb1, 0x66, 0x28, 0x46,
  0xd5, 0x36, 0x87, 0x7b, 0x32, 0x36, 0x2c, 0xc8, 0xb5, 0xf0, 0xa5, 0xcc,
  0x38, 0xf3, 0xb3, 0x1f, 0x8c, 0x2e, 0x3a, 0x7a, 0x6e, 0x7f, 0xbc, 0xfd,
  0xb0, 0x3e, 0x8a, 0xfb, 0x1d, 0xdd, 0x0c, 0x29, 0xaa, 0xe2, 0xfe, 0x27,
  0x53, 0xe5, 0x0b, 0xfe, 0x47, 0x8f, 0xfb, 0x81, 0x4a, 0x31, 0x93, 0xa3,
  0xe8, 0xb9, 0xfd, 0xf1, 0xf6, 0xc3, 0x5a, 0x25, 0xee, 0x77, 0x74, 0x33,
  0xa4, 0xa8, 0x8a, 0xfb, 0x9f, 0x4c, 0x95, 0x2f, 0xf9, 0x1f, 0x3d, 0xee,
  0x07, 0x2a, 0xc5, 0x4c, 0x8e, 0xde, 0xbe, 0x24, 0xa4, 0x25, 0x07, 0x7c,
  0xec, 0x27, 0x73, 0xf9, 0xa5, 0x6b, 0xd4, 0x37, 0x12, 0xaa, 0x6a, 0x14,
  0xf7, 0xce, 0x42, 0xd5, 0x72, 0x62, 0x5d, 0x0b, 0x84, 0x9c, 0xc3, 0x60,
  0xb7, 0x2f, 0x09, 0x69, 0xc9, 0x01, 0x1f, 0xfb, 0xc9, 0x5c, 0x7e, 0xe9,
  0x1a, 0x35, 0x95, 0x84, 0xaa, 0x1a, 0xc5, 0xbd, 0xb3, 0x50, 0xb5, 0x9c,
  0x58, 0xe7, 0xc2, 0x5c, 0xaa, 0xcb, 0x19, 0xc1, 0xdb, 0xc0, 0x30, 0x05,
  0x22, 0x4d, 0x72, 0x9c, 0x71, 0x0f, 0x99, 0x64, 0xf3, 0xcb, 0xcd, 0x48,
  0x73, 0xb4, 0xc6, 0xc2, 0x35, 0x30, 0x1c, 0xf2, 0x38, 0xe3, 0x36, 0x31,
  0xc9, 0xe6, 0x57, 0x9b, 0x91, 0x22, 0xb7, 0xcd, 0x17, 0x1e, 0xea, 0x76,
  0xed, 0x5a, 0x50, 0x6d, 0x7e, 0x81, 0x5c, 0x5d, 0x60, 0x8c, 0xf0, 0x37,
  0xe5, 0x0c, 0x38, 0xed, 0x54, 0x02, 0x8c, 0x3d, 0x75, 0x4b, 0x02, 0x9b,
  0xd7, 0x4e, 0xd8, 0xe1, 0x96, 0xcf, 0x00, 0x24, 0xef, 0xac, 0x5b, 0xf5,
  0xb9, 0xcd, 0xa0, 0x08, 0x0e, 0x19, 0xed, 0x0c, 0x62, 0x23, 0x7d, 0xb1,
  0x5d, 0x03, 0x4f, 0x9e, 0x13, 0x4f, 0x86, 0xdc, 0x83, 0xd3, 0x69, 0x0e,
  0xcd, 0x85, 0xae, 0xbe, 0xf9, 0xe5, 0xe5, 0x65, 0x34, 0xab, 0xc8, 0x6c,
  0x01, 0x0e, 0x1e, 0x6b, 0xbe, 0xc8, 0xd2, 0x86, 0xf4, 0x0d, 0xc8, 0xf9,
  0xfe, 0x9c, 0x62, 0xa7, 0xbb, 0x47, 0x9e, 0xf1, 0x56, 0xf1, 0xc2, 0x2f,
  0xdb, 0x88, 0x53, 0x01, 0x11, 0x01, 0xd3, 0x00, 0x80, 0x2e, 0xe9, 0x67,
  0xd6, 0xff, 0x74, 0x91, 0x1a, 0xa2, 0xb8, 0x93, 0x58, 0xee, 0x9c, 0xd2,
  0xec, 0x99, 0x83, 0x64, 0x8b, 0x80, 0x87, 0xcd, 0x35, 0x63, 0x95, 0x13,
  0xbb, 0xd1, 0x45, 0x83, 0x73, 0x80, 0x13, 0x86, 0x9e, 0x07, 0x20, 0x9f,
  0xcd, 0x05, 0x4f, 0xb4, 0x95, 0x84, 0x4b, 0xf1, 0xee, 0x7a, 0x45, 0xfc,
  0x84, 0x6f, 0x51, 0x55, 0xd4, 0x06, 0xa4, 0x9c, 0x75, 0x61, 0x18, 0xbe,
  0x5f, 0xc8, 0xaf, 0xf1, 0xeb, 0xba, 0x05, 0xc9, 0x84, 0x30, 0xdc, 0x68,
  0x87, 0x2e, 0x09, 0x27, 0xda, 0x4f, 0x81, 0xee, 0x42, 0x4c, 0xa6, 0x4c,
  0xd0, 0x9e, 0x6c, 0xff, 0xd1, 0xe7, 0x9f, 0x8f, 0xa2, 0xf0, 0x9f, 0x5c,
  0xb5, 0x6c, 0x88, 0x10, 0x3b, 0xe5, 0xa0, 0x22, 0x07, 0x16, 0xf4, 0x17,
  0xdf, 0x07, 0x85, 0x31, 0xde, 0xfe, 0x02, 0x88, 0x3e, 0x60, 0x8e, 0xab,
  0x79, 0x68, 0xde, 0x53, 0xac, 0x6f, 0x01, 0xb5, 0x42, 0xb8, 0x18, 0xa9,
  0x57, 0xe0, 0x1a, 0x8b, 0xbc, 0x47, 0xa5, 0xcb, 0x24, 0x25, 0x8e, 0xb3,
  0x27, 0x05, 0x31, 0x4f, 0x52, 0x38, 0x39, 0x1b, 0xd6, 0x68, 0x0d, 0x94,
  0x91, 0xdb, 0xe6, 0x0b, 0x0f, 0x78, 0xbb, 0x76, 0xfd, 0xa9, 0x36, 0xff,
  0x80, 0x5c, 0x5d, 0x60, 0x8c, 0xf0, 0x37, 0xe5, 0x0c, 0x38, 0xed, 0x54,
  0x02, 0x8c, 0x3d, 0x75, 0x4b, 0x02, 0x9b, 0xd7, 0x4e, 0xd8, 0xe1, 0x7e,
  0xd0, 0x80, 0x24, 0xef, 0xac, 0x5b, 0xf5, 0xb9, 0xcd, 0xa0, 0x08, 0x0e,
  0x19, 0xed, 0x0c, 0x62, 0x23, 0x4d, 0xb3, 0x5d, 0x77, 0x4f, 0x9e, 0x13,
  0x4f, 0x86, 0xdc, 0x83, 0xd3, 0x69, 0x0e, 0xcd, 0x85, 0xae, 0xbe, 0xf9,
  0xe5, 0xe5, 0x65, 0x34, 0xab, 0xc8, 0x6c, 0x01, 0x0e, 0x1e, 0x6b, 0xbe,
  0xc8, 0xd2, 0x86, 0xf4, 0x0d, 0xc8, 0xf9, 0xfe, 0x9c, 0x62, 0xa7, 0xbb,
  0x47, 0x9e, 0xf1, 0x56, 0xf1, 0xc2, 0x2f, 0xdb, 0x88, 0x53, 0x01, 0x11,
  0x01, 0xd3, 0x00, 0x80, 0x2e, 0xe9, 0x67, 0xd6, 0xff, 0x74, 0x91, 0x1a,
  0xa2, 0xb8, 0x93, 0x58, 0xee, 0x9c, 0xd2, 0xec, 0x99, 0x83, 0x64, 0x8b,
  0x80, 0x87, 0xcd, 0x35, 0x63, 0x95, 0x13, 0xbb, 0xd1, 0x62, 0x83, 0x73,
  0x80, 0xb1, 0xcf, 0x2c, 0x0f, 0x5c, 0x2e, 0x78, 0xa2, 0x7d, 0x26, 0x5c,
  0x8a, 0x77, 0xd7, 0x2b, 0xe2, 0x27, 0x7c, 0x8b, 0xaa, 0xa2, 0x36, 0x20,
  0xe5, 0xac, 0x0b, 0xc3, 0xf0, 0xfd, 0x42, 0x7e, 0x8d, 0x5f, 0xd7, 0x2d,
  0x48, 0x26, 0x84, 0xe1, 0x46, 0x3b, 0x74, 0x49, 0x38, 0xd1, 0x7e, 0x0a,
  0x74, 0x17, 0x62, 0x32, 0x65, 0x82, 0xde, 0x65, 0xfb, 0x8f, 0x3e, 0xff,
  0x7c, 0x14, 0x85, 0xff, 0xe4, 0xaa, 0x65, 0x43, 0x84, 0xd8, 0x29, 0x07,
  0x15, 0x39, 0xb0, 0xa0, 0xbf, 0xf8, 0x3e, 0x28, 0x8c, 0xaa, 0xaa, 0xca,
  0x05, 0x10, 0x7d, 0xc0, 0x1c, 0x57, 0xf3, 0xd0, 0xbc, 0xa7, 0x58, 0xdf,
  0x02, 0x6a, 0x85, 0x70, 0x31, 0x52, 0xaf, 0xc0, 0x35, 0x16, 0x79, 0x8f,
  0x4a, 0x97, 0x49, 0x4a, 0x1c, 0x67, 0x4f, 0x0a, 0x62, 0x9e, 0xa4, 0x70,
  0x72, 0x36, 0xac, 0xd1, 0x1a, 0x28, 0xf5, 0x9b, 0x13, 0x2d, 0x78, 0x3b,
  0x36, 0x7b, 0xaa, 0x24, 0x37, 0x13, 0x0d, 0x37, 0x4e, 0x32, 0x0b, 0x3b,
  0xc0, 0x0d, 0xa9, 0x3a, 0xc0, 0x30, 0x5c, 0x49, 0x5d, 0xa0, 0x54, 0x0a,
  0xfa, 0xcd, 0x89, 0x16, 0xbc, 0x1d, 0x9b, 0x3d, 0x55, 0x92, 0x9b, 0x89,
  0x86, 0x1b, 0x27, 0x99, 0x85, 0x1d, 0xe0, 0x9e, 0x53, 0x1d, 0x60, 0x18,
  0xae, 0xa4, 0x2e, 0x50, 0x2a, 0x85, 0x1e, 0x0f, 0xe6, 0x03, 0x9d, 0xe1,
  0xa8, 0x70, 0xf8, 0x32, 0x6b, 0xc2, 0xf2, 0x1e, 0x2f, 0xb1, 0x76, 0xcd,
  0xe0, 0x31, 0x9b, 0x48, 0xaa, 0x93, 0x92, 0x17, 0xe2, 0xbd, 0x4f, 0x66,
  0xf9, 0x85, 0x5e, 0x52, 0xdb, 0x17, 0xe1, 0x2b, 0x3a, 0x8d, 0x17, 0xb2,
  0xf5, 0x52, 0xad, 0xf7, 0x55, 0x14, 0xfa, 0x4b, 0xb2, 0x7b, 0x09, 0x87,
  0xaa, 0x69, 0x8c, 0x5a, 0xed, 0x78, 0x37, 0x25, 0x57, 0x13, 0xd2, 0x90,
  0x94, 0xb4, 0xf0, 0x06, 0x73, 0x9a, 0xe4, 0x3c, 0x86, 0x3d, 0xf1, 0xc2,
  0x0e, 0x2a, 0x4d, 0x3e, 0x90, 0xdf, 0x8e, 0xa9, 0xc4, 0x76, 0x42, 0xe1,
  0x0d, 0x20, 0xcc, 0x07, 0x3a, 0xc3, 0x51, 0xe1, 0xf0, 0x65, 0xd6, 0x84,
  0xe5, 0x3d, 0x5e, 0x62, 0xed, 0x9a, 0xc1, 0x63, 0x36, 0x91, 0x54, 0x27,
  0x25, 0x2f, 0xc4, 0x7b, 0x9f, 0xcc, 0xf2, 0x0b, 0xbd, 0xa4, 0xb6, 0x69,
  0xc2, 0x97, 0x74, 0x1a, 0x2f, 0x64, 0xeb, 0xa5, 0x5a, 0xef, 0xcb, 0x28,
  0xf4, 0x97, 0x64, 0xf7, 0x12, 0x0e, 0x55, 0xd3, 0x18, 0xb5, 0xda, 0xf1,
  0x6e, 0x4a, 0xae, 0x66, 0x88, 0x7e, 0x2e, 0x69, 0xe1, 0x0d, 0xe6, 0x34,
  0xc9, 0x79, 0x0c, 0x7b, 0xe2, 0x85, 0x1d, 0x54, 0x3a, 0x80, 0x20, 0xbf,
  0x1d, 0x53, 0x89, 0xed, 0x84, 0xc2, 0x77, 0x83, 0x3f, 0x98, 0xa7, 0x03,
  0xab, 0x07, 0xef, 0x7a, 0xfb, 0x14, 0x9e, 0xbd, 0x1f, 0xcc, 0x12, 0xa0,
  0xbb, 0xc1, 0x1f, 0xcc, 0xd3, 0x81, 0xd5, 0x83, 0x77, 0xbd, 0x7d, 0x0a,
  0xcf, 0xde, 0x0f, 0x66, 0x09, 0xd0, 0x04, 0x6f, 0xb1, 0xcb, 0x8b, 0xf6,
  0x09, 0xde, 0x62, 0x97, 0x17, 0xed, 0xbb, 0xcb, 0x65, 0xa5, 0xd6, 0x5d,
  0xdd, 0xe5, 0xb2, 0x52, 0xeb, 0x2e, 0xed, 0x3a, 0x49, 0xb1, 0x54, 0x57,
  0xe0, 0x4c, 0x94, 0x75, 0x59, 0x66, 0x3c, 0x4b, 0x42, 0x9b, 0xd0, 0x5d,
  0x85, 0xaf, 0xb2, 0xa9, 0x56, 0x53, 0x28, 0x96, 0x64, 0x94, 0xd3, 0xa7,
  0x62, 0x7d, 0xa8, 0xa4, 0xeb, 0x9d, 0x5b, 0x31, 0x75, 0x8b, 0xa3, 0xf3,
  0xa2, 0x5d, 0x16, 0x9c, 0x3c, 0xb6, 0xf0, 0x04, 0x46, 0x91, 0x93, 0x42,
  0x87, 0xd1, 0x0e, 0xa6, 0x19, 0xb9, 0x5b, 0xea, 0xfc, 0x6f, 0xac, 0x94,
  0x49, 0x36, 0xad, 0xa2, 0x86, 0x91, 0x83, 0x23, 0x03, 0x8e, 0x7d, 0xf2,
  0x1a, 0xfd, 0x35, 0x59, 0x94, 0x83, 0xde, 0x02, 0x3e, 0xed, 0xe7, 0x7b,
  0xb3, 0x44, 0x82, 0x1a, 0x57, 0x65, 0x97, 0x2b, 0x48, 0x39, 0xda, 0xa7,
  0x2d, 0x45, 0x09, 0xd5, 0x27, 0x96, 0xf9, 0x92, 0x7a, 0x78, 0x18, 0x7b,
  0x2e, 0x48, 0x21, 0x37, 0x6f, 0x71, 0xe7, 0xcc, 0x55, 0x61, 0xb6, 0xab,
  0x59, 0x21, 0xf2, 0x27, 0x30, 0x29, 0x86, 0x7f, 0xfd, 0x85, 0x5c, 0x7f,
  0xa5, 0x2c, 0x9d, 0xdb, 0x51, 0xcc, 0xac, 0xe9, 0x9d, 0x5d, 0x04, 0xb6,
  0x4b, 0x46, 0xc9, 0x26, 0x84, 0xef, 0x85, 0xf4, 0x8d, 0x46, 0x19, 0x00,
  0xda, 0x75, 0x92, 0x62, 0xa9, 0xae, 0xc0, 0x99, 0x28, 0xeb, 0xb2, 0xcc,
  0x78, 0x96, 0x84, 0x36, 0xa1, 0xbb, 0x0a, 0x5f, 0x65, 0x53, 0xad, 0xa6,
  0x50, 0x2c, 0xc9, 0x28, 0xa7, 0x4f, 0xc5, 0x9a, 0x54, 0x49, 0x4b, 0x3c,
  0xb7, 0x62, 0x6a, 0x25, 0x47, 0xe7, 0x45, 0xbb, 0x2c, 0x38, 0x79, 0x6c,
  0xe1, 0x09, 0x8c, 0x22, 0x27, 0x85, 0x0e, 0xa3, 0xed, 0x4d, 0x33, 0x72,
  0xb7, 0xd4, 0xf9, 0xdf, 0x58, 0x29, 0x93, 0x6c, 0x5a, 0x45, 0x0d, 0x23,
  0x07, 0x47, 0x06, 0x1c, 0xfb, 0xe4, 0x35, 0x9a, 0x6f, 0xb2, 0x28, 0x07,
  0xbd, 0x05, 0x7c, 0xda, 0xcf, 0xf7, 0x66, 0x89, 0x04, 0x35, 0xae, 0xca,
  0x2e, 0x57, 0x90, 0x72, 0xb4, 0x4f, 0x5b, 0x8a, 0x12, 0xaa, 0x4f, 0x2c,
  0xf3, 0x25, 0x35, 0xf8, 0x30, 0xf6, 0x5c, 0x90, 0x42, 0x6e, 0xde, 0xe2,
  0xb6, 0x9a, 0xab, 0xc2, 0x6c, 0x57, 0xb3, 0x42, 0xe4, 0x4f, 0x60, 0x52,
  0x0c, 0xff, 0xfa, 0x0b, 0xb9, 0xfe, 0x4a, 0x59, 0x3a, 0xb7, 0xa4, 0x98,
  0x59, 0xd3, 0x3b, 0xbb, 0x08, 0x6c, 0x97, 0x8c, 0x92, 0x4d, 0x08, 0xdf,
  0x0b, 0xe9, 0x1b, 0x8d, 0x32, 0x00, 0xee, 0xbf, 0x06, 0x47, 0xcc, 0x1f,
  0x10, 0x1a, 0x9c, 0x66, 0x0e, 0xdd, 0x94, 0x36, 0x85, 0x92, 0x3c, 0x83,
  0xb7, 0x58, 0x83, 0x23, 0xe6, 0x0b, 0x84, 0x06, 0xa7, 0x99, 0x43, 0x37,
  0xa5, 0x4d, 0xa1, 0x24, 0xcf, 0xe0, 0x56, 0x13, 0x50, 0xa0, 0xea, 0x4e,
  0x5b, 0x4d, 0x40, 0x81, 0xaa, 0x3b, 0xf9, 0xf0, 0x91, 0xd2, 0x03, 0x64,
  0x3e, 0x7c, 0x24, 0x6b, 0x60, 0x08, 0x63, 0x62, 0xa9, 0x5c, 0xf5, 0x23,
  0x58, 0x38, 0x69, 0xcd, 0x55, 0x05, 0x75, 0xd8, 0x7a, 0x94, 0x84, 0x00,
  0x6b, 0xd5, 0x7f, 0xb1, 0x06, 0x2f, 0x38, 0x5f, 0x04, 0x55, 0x88, 0xe0,
  0x54, 0x0f, 0x38, 0x3b, 0x82, 0x1a, 0xb9, 0x09, 0x43, 0x53, 0xd3, 0x43,
  0xab, 0x86, 0x58, 0x45, 0xdc, 0x34, 0xac, 0x13, 0x7b, 0xbf, 0x29, 0x17,
  0x37, 0x06, 0x65, 0xe3, 0xec, 0x7c, 0x62, 0xd5, 0x7c, 0x4d, 0x2c, 0x00,
  0xa4, 0xe5, 0x21, 0x50, 0xa9, 0xaa, 0xd4, 0x70, 0xcc, 0xbf, 0x2c, 0x2f,
  0x7b, 0xb0, 0x06, 0xb9, 0x5b, 0x8c, 0xb1, 0x15, 0xc2, 0xf6, 0x54, 0x44,
  0x87, 0xc3, 0x37, 0x89, 0xcc, 0xe7, 0xcb, 0xaf, 0x5a, 0xc3, 0x69, 0x3f,
  0x07, 0x1f, 0xae, 0x5c, 0xa0, 0x2f, 0xa6, 0x97, 0xf9, 0x3d, 0x9b, 0xc0,
  0x58, 0xff, 0x36, 0x83, 0xb7, 0xbe, 0x2a, 0x33, 0x39, 0xbb, 0x82, 0x4c,
  0x60, 0xdb, 0x7d, 0xc8, 0xac, 0xab, 0x8e, 0x36, 0x9a, 0x50, 0x8d, 0xb7,
  0x7f, 0xda, 0x24, 0xd7, 0xff, 0xb3, 0xbc, 0x2a, 0xf0, 0x0f, 0x7c, 0x01,
  0x1f, 0xf8, 0x72, 0x6f, 0x2f, 0x3a, 0xf3, 0xde, 0xf9, 0xf2, 0x84, 0x75,
  0xc6, 0x10, 0x46, 0x92, 0x95, 0xe9, 0xf1, 0xb6, 0x96, 0xe9, 0x3f, 0xa2,
  0x62, 0xb2, 0xd0, 0xcd, 0x46, 0x77, 0x88, 0x60, 0xba, 0xbc, 0x57, 0x39,
  0xe1, 0x2d, 0xca, 0x12, 0x73, 0x2b, 0x1f, 0xe6, 0x21, 0xe6, 0x83, 0xd1,
  0xd5, 0x70, 0x24, 0xfd, 0x8b, 0xdf, 0x40, 0x78, 0xe6, 0xee, 0xcb, 0x17,
  0x57, 0xab, 0xcb, 0x8c, 0xf8, 0x66, 0x73, 0xdb, 0x6c, 0x3c, 0x68, 0xe5,
  0xf0, 0x52, 0xb0, 0x9b, 0x82, 0xa3, 0xe9, 0x8d, 0x97, 0x49, 0x48, 0x45,
  0x02, 0x2d, 0x15, 0x82, 0x03, 0xdf, 0xb0, 0x94, 0xb4, 0x0f, 0x7d, 0xb7,
  0xdc, 0x86, 0x95, 0xd1, 0x01, 0x6f, 0x9a, 0xc0, 0x41, 0xb8, 0x02, 0xf4,
  0x35, 0x2b, 0xb8, 0xc9, 0x26, 0x5f, 0x7e, 0x05, 0xdf, 0xd6, 0x2d, 0xc1,
  0xea, 0xb3, 0x56, 0x8b, 0xad, 0xdb, 0x21, 0x94, 0xfd, 0xc4, 0x5b, 0x44,
  0x77, 0x90, 0xb2, 0xea, 0x1f, 0xd6, 0x2b, 0xff, 0xf1, 0x86, 0xbc, 0x28,
  0xcb, 0xb5, 0x23, 0xaa, 0xef, 0x86, 0xf6, 0xc4, 0xcb, 0x1f, 0xe4, 0xac,
  0x3a, 0x57, 0xda, 0xc8, 0x04, 0x41, 0x72, 0xa6, 0x25, 0x2e, 0x63, 0xa5,
  0xe6, 0xf0, 0x90, 0x49, 0x27, 0x6f, 0x95, 0x38, 0x5f, 0x0e, 0xb4, 0xc2,
  0x26, 0xd2, 0x48, 0xc5, 0xad, 0x81, 0xaf, 0x23, 0x21, 0x03, 0xe1, 0xaf,
  0x5f, 0xd8, 0xd7, 0xf1, 0x1f, 0x73, 0x9b, 0x09, 0xa8, 0x7a, 0xcd, 0x6a,
  0x90, 0x76, 0xa7, 0xef, 0xec, 0x50, 0xf8, 0xc9, 0xb6, 0xda, 0xdd, 0x1c,
  0xb0, 0xa2, 0xfd, 0xc5, 0x26, 0xb9, 0x71, 0x35, 0x2e, 0x4c, 0x1d, 0x8c,
  0x88, 0xc7, 0xcd, 0xca, 0x40, 0xad, 0x45, 0x02, 0x24, 0xb7, 0x38, 0xa2,
  0xc0, 0x80, 0xa8, 0x5c, 0xf5, 0x23, 0x58, 0x38, 0x69, 0xcd, 0x55, 0x05,
  0x75, 0xd8, 0x97, 0x94, 0x84, 0x00, 0x6b, 0xd5, 0x7f, 0xb1, 0x06, 0x2f,
  0x38, 0x5f, 0x04, 0x55, 0x88, 0xe0, 0x54, 0x0f, 0x38, 0x3b, 0x82, 0xba,
  0xbc, 0x09, 0x43, 0x53, 0xd3, 0x43, 0xab, 0x86, 0x58, 0x45, 0xdc, 0x34,
  0xac, 0x13, 0x7b, 0xbf, 0x29, 0x17, 0x37, 0x06, 0x65, 0xe3, 0xec, 0x7c,
  0x62, 0xd5, 0x7c, 0x4d, 0x2c, 0x00, 0xa4, 0xe5, 0x21, 0x50, 0xa9, 0xaa,
  0xd4, 0x70, 0xcc, 0xbf, 0x2c, 0x2f, 0x7b, 0xb0, 0x06, 0xb9, 0x95, 0x8c,
  0xb1, 0x15, 0xc2, 0xde, 0x55, 0x44, 0x87, 0xc3, 0x37, 0x89, 0xcc, 0xe7,
  0x8b, 0x2f, 0x5b, 0xc3, 0x69, 0x3f, 0x07, 0x1f, 0xae, 0x5c, 0xa0, 0x2f,
  0xa6, 0x97, 0xf9, 0x3d, 0x9b, 0xc0, 0x58, 0xff, 0x36, 0x83, 0xb7, 0xbe,
  0x2a, 0x33, 0x39, 0xbb, 0x82, 0x4c, 0x60, 0xdb, 0x9a, 0xc8, 0xac, 0xab,
  0x8e, 0x36, 0x9a, 0x50, 0x8d, 0xb7, 0x7f, 0xda, 0x24, 0xd7, 0xff, 0xa3,
  0xbc, 0x2a, 0xf0, 0x0f, 0x7c, 0x01, 0x1f, 0xf8, 0x62, 0x6f, 0x2f, 0x3a,
  0xf3, 0xde, 0xf9, 0xf2, 0x84, 0x75, 0xc6, 0x10, 0x46, 0x92, 0x95, 0xe9,
  0xf1, 0xb6, 0x96, 0xe9, 0x3f, 0xa2, 0x62, 0xb2, 0xd0, 0xcd, 0x46, 0x77,
  0x88, 0x60, 0xba, 0xbc, 0x57, 0x39, 0xe1, 0x2d, 0xca, 0x12, 0x73, 0x2b,
  0x1f, 0xe6, 0x21, 0xe6, 0x83, 0xd1, 0xd5, 0x70, 0x24, 0xfd, 0x8b, 0xdf,
  0x40, 0x78, 0xe6, 0xee, 0x8b, 0x17, 0x57, 0xab, 0xcb, 0x8c, 0xf8, 0x66,
  0x73, 0xdb, 0x6c, 0x3c, 0x68, 0xe5, 0xf0, 0x52, 0xb0, 0x9b, 0x82, 0xa3,
  0xe9, 0x8d, 0x97, 0x49, 0x48, 0x45, 0x02, 0x2d, 0x15, 0x82, 0x03, 0xdf,
  0xb0, 0x94, 0xb4, 0x49, 0x7d, 0xb7, 0xdc, 0x86, 0x95, 0xd1, 0x01, 0x6f,
  0x9a, 0xc0, 0x41, 0xb8, 0x02, 0xf4, 0x35, 0x2b, 0xb8, 0xc9, 0x26, 0x5f,
  0x7c, 0x09, 0xdf, 0xd6, 0x2d, 0xc1, 0xea, 0xb3, 0x56, 0x8b, 0xad, 0xdb,
  0x21, 0x94, 0xfd, 0xc4, 0x5b, 0x44, 0x77, 0x90, 0xb2, 0xea, 0x1f, 0xd6,
  0x2b, 0xff, 0xf1, 0x86, 0xbc, 0x28, 0xcb, 0xb5, 0x23, 0xaa, 0xef, 0x86,
  0xf6, 0xc4, 0xcb, 0x1f, 0xe4, 0xac, 0x3a, 0x57, 0xda, 0xc8, 0x04, 0x41,
  0x72, 0xa6, 0x25, 0x2e, 0x63, 0xa5, 0xe6, 0xf0, 0x90, 0x49, 0x9b, 0x6f,
  0x95, 0x38, 0x5f, 0x0c, 0xb4, 0xc2, 0x26, 0xd2, 0x48, 0xc5, 0xad, 0x81,
  0xaf, 0x23, 0x21, 0x03, 0xe1, 0xaf, 0x7f, 0xb0, 0xaf, 0xe3, 0x3f, 0xe6,
  0x36, 0x13, 0x50, 0xf5, 0x9a, 0xd5, 0x20, 0xed, 0x4e, 0xdf, 0xd9, 0xa1,
  0xf0, 0x93, 0xed, 0x8f, 0xb4, 0x39, 0x60, 0x45, 0xfb, 0x0f, 0x9b, 0xe4,
  0xc6, 0xd5, 0xb8, 0x30, 0x75, 0x2d, 0x22, 0x1e, 0x37, 0x2b, 0x03, 0xb5,
  0x16, 0x09, 0x90, 0xdc, 0xd6, 0x88, 0x66, 0xdf, 0x33, 0x71, 0xcc, 0x5c,
  0xd9, 0xf7, 0x4c, 0x1c, 0x33, 0xd7, 0xa9, 0xff, 0xb4, 0x61, 0x27, 0xff,
  0xd3, 0x86, 0x9b, 0xfe, 0x4f, 0x1b, 0x6e, 0x01, 0x3f, 0x6d, 0x00, 0x9d,
  0x11, 0x8b, 0x08, 0x0d, 0xe2, 0x5f, 0x7a, 0xe8, 0x9b, 0xfc, 0x55, 0xf7,
  0x51, 0xef, 0x9b, 0xde, 0x27, 0x37, 0x36, 0xd7, 0x6d, 0x9a, 0x1f, 0x1b,
  0xca, 0x2f, 0x6c, 0x43, 0x53, 0xb7, 0x87, 0x86, 0x5d, 0xb7, 0xb6, 0xc9,
  0x6d, 0x0b, 0x8c, 0xb3, 0xa0, 0x77, 0xb5, 0xf7, 0x00, 0x76, 0x1c, 0xc6,
  0x2c, 0xf7, 0x6b, 0xf2, 0x7a, 0x11, 0x58, 0x70, 0x47, 0x3d, 0x07, 0xed,
  0x7a, 0x1c, 0xc8, 0x23, 0xfb, 0x7a, 0x20, 0x7f, 0xfe, 0xb7, 0xf9, 0x02,
  0xe9, 0xff, 0x34, 0x86, 0xdc, 0x6a, 0xc2, 0x75, 0x91, 0x64, 0x38, 0xca,
  0x53, 0x2e, 0x38, 0x6a, 0xc9, 0xe2, 0xef, 0x82, 0x8b, 0x7b, 0x98, 0x24,
  0x82, 0xf4, 0xf5, 0x45, 0x4e, 0x4d, 0xba, 0xcc, 0xaa, 0xe6, 0x6c, 0xa1,
  0xee, 0x40, 0x2a, 0x50, 0xba, 0x29, 0x75, 0xce, 0xaa, 0xc9, 0x44, 0x17,
  0xe3, 0xb5, 0xd5, 0x01, 0xab, 0x9f, 0xa4, 0xa1, 0x88, 0xcf, 0xcb, 0xaa,
  0xfe, 0x72, 0xa3, 0x42, 0xcf, 0xd3, 0xe4, 0xb2, 0x32, 0x1a, 0xec, 0x17,
  0x20, 0xad, 0x95, 0x39, 0x2c, 0x77, 0x4f, 0x6f, 0x87, 0x8b, 0x3b, 0x33,
  0xef, 0xcd, 0x5f, 0x44, 0x19, 0x1e, 0x4b, 0x9b, 0x51, 0xf0, 0xdc, 0x30,
  0xc7, 0x45, 0xd2, 0xcd, 0x1c, 0xe0, 0xab, 0xeb, 0x5d, 0x4a, 0xf9, 0xfd,
  0xa7, 0xfe, 0xe3, 0x86, 0x9d, 0xfc, 0x8f, 0x1b, 0x6e, 0xfa, 0x3f, 0x6e,
  0xb8, 0x05, 0xfc, 0xb8, 0x01, 0x74, 0x46, 0x2c, 0x22, 0x34, 0x88, 0x7f,
  0xee, 0xa1, 0x6f, 0xf2, 0x57, 0xdd, 0x47, 0xbd, 0x6f, 0x7a, 0x9f, 0xdc,
  0xd8, 0x5c, 0xb7, 0x69, 0x7e, 0x6c, 0x08, 0x90, 0x46, 0x69, 0x77, 0x0f,
  0x0d, 0xbb, 0x6e, 0x6d, 0x93, 0xdb, 0x16, 0x18, 0x67, 0x41, 0x63, 0x6b,
  0xef, 0x01, 0xec, 0xb8, 0xeb, 0xd9, 0xe4, 0xf5, 0x22, 0xb0, 0xe0, 0x8e,
  0x7a, 0x0e, 0xda, 0x12, 0x39, 0x90, 0x47, 0xf6, 0xf5, 0x40, 0xfe, 0xfc,
  0x6f, 0xf3, 0x05, 0xd2, 0xff, 0x69, 0x0c, 0xb9, 0xd5, 0x84, 0xeb, 0x22,
  0xc9, 0x70, 0x94, 0xa7, 0x5c, 0x70, 0xd4, 0x92, 0xc5, 0xdf, 0x05, 0x17,
  0xf7, 0x30, 0x49, 0x04, 0xe9, 0xeb, 0x8b, 0x9c, 0x3a, 0x78, 0x99, 0x55,
  0xcd, 0xd9, 0x42, 0xdd, 0x81, 0x54, 0xa0, 0x74, 0x53, 0x6a, 0xac, 0x55,
  0x93, 0x89, 0x2e, 0xc6, 0xab, 0xb4, 0x27, 0xe3, 0x7d, 0xe8, 0x27, 0x69,
  0x28, 0xe2, 0xf3, 0xb2, 0xaa, 0xbf, 0xd8, 0xa8, 0xd0, 0x10, 0x35, 0xb9,
  0xac, 0x8c, 0x06, 0xfb, 0x07, 0x90, 0xd6, 0xca, 0x1c, 0x96, 0xbb, 0xa7,
  0xb7, 0xc3, 0xc5, 0x9d, 0x99, 0xf7, 0xe6, 0xcf, 0xa2, 0x0c, 0x8f, 0xa5,
  0xcd, 0x28, 0x78, 0x6e, 0x98, 0xe3, 0x22, 0xe9, 0x66, 0x0e, 0xf0, 0xd5,
  0xf5, 0x2e, 0xa5, 0xfc, 0xfe, 0x8b, 0x18, 0xfa, 0x5b, 0xb0, 0x10, 0x8f,
  0x97, 0x31, 0xf4, 0xb7, 0x60, 0x21, 0x1e, 0xe7, 0x25, 0x53, 0xed, 0xcb,
  0x93, 0xef, 0xbe, 0xd0, 0x01, 0x7e, 0xda, 0xf8, 0x71, 0xc8, 0x3f, 0xa5,
  0x32, 0xda, 0x83, 0xe4, 0xe4, 0x3b, 0x50, 0xf7, 0x2f, 0x63, 0x60, 0xeb,
  0x3e, 0xf0, 0x15, 0xff, 0x85, 0x28, 0x7b, 0xdd, 0xb0, 0xe7, 0x2e, 0xe3,
  0xe0, 0x4b, 0xb4, 0xee, 0xa5, 0xba, 0x1e, 0xb2, 0xc2, 0x97, 0x4b, 0x54,
  0xeb, 0x68, 0xd9, 0x68, 0xc3, 0x65, 0xa3, 0x14, 0x35, 0x4a, 0x27, 0x25,
  0x67, 0xdf, 0x37, 0x21, 0x64, 0x34, 0x41, 0xd6, 0xd2, 0xd9, 0x8a, 0xef,
  0x6a, 0x49, 0x8e, 0x0b, 0x52, 0x87, 0x75, 0x77, 0xe1, 0x2d, 0x24, 0x05,
  0xae, 0x65, 0xed, 0x1c, 0x46, 0x7a, 0x03, 0x38, 0xcc, 0x1f, 0xfe, 0x1b,
  0xe9, 0x65, 0xb6, 0x2b, 0x35, 0x9a, 0x8c, 0xa5, 0x55, 0xa6, 0x8d, 0x63,
  0xa4, 0x9b, 0x1d, 0x37, 0x2f, 0xfb, 0x22, 0x16, 0x0a, 0x90, 0xe8, 0xa4,
  0xf3, 0x92, 0xa9, 0xf6, 0xc5, 0xc9, 0xb7, 0x7f, 0xd0, 0x01, 0x7e, 0xdc,
  0xf8, 0x61, 0xc8, 0x3f, 0xa5, 0x32, 0xda, 0x83, 0xe4, 0xe4, 0x5b, 0x50,
  0xf7, 0xcf, 0x63, 0x60, 0xeb, 0x3e, 0xf0, 0x25, 0xff, 0x85, 0x28, 0x7b,
  0xdd, 0xb0, 0xe7, 0x2e, 0xe3, 0xe0, 0x0b, 0xf4, 0xf5, 0xa5, 0xba, 0x1e,
  0xb2, 0xc2, 0x97, 0x4b, 0x54, 0xeb, 0x68, 0xd9, 0x68, 0xc3, 0x65, 0xa3,
  0x14, 0x35, 0x4a, 0x27, 0x25, 0x67, 0xdf, 0x37, 0x21, 0x64, 0x34, 0x41,
  0xd6, 0xd2, 0xd9, 0x8a, 0xef, 0x6a, 0x49, 0x8e, 0x0b, 0x52, 0x87, 0x75,
  0x77, 0xe1, 0x2d, 0x24, 0x05, 0xae, 0x65, 0xed, 0x1c, 0x46, 0x7a, 0x03,
  0x38, 0xcc, 0x1f, 0xfe, 0x1b, 0xe9, 0x65, 0xb6, 0x65, 0x35, 0xfa, 0x8c,
  0xa5, 0x55, 0xa6, 0x8d, 0x63, 0xa4, 0xd5, 0x1d, 0x05, 0x98, 0x0c, 0xc1,
  0x44, 0x42, 0x01, 0x12, 0x9d, 0x94, 0xdc, 0xef, 0x8b, 0x72, 0x2e, 0xcd,
  0xe4, 0x7e, 0x5f, 0x94, 0x73, 0xe9, 0x5f, 0x5e, 0x1b, 0xaa, 0xe7, 0x03,
  0xb6, 0x0d, 0xe4, 0x8c, 0xc6, 0x81, 0xad, 0x90, 0x48, 0x85, 0x7c, 0x36,
  0xa2, 0x72, 0x48, 0x34, 0x91, 0xbd, 0x71, 0xd2, 0xd6, 0x8c, 0x70, 0xb4,
  0x98, 0xf0, 0xbf, 0x80, 0xd1, 0x3f, 0xc9, 0xc8, 0xf9, 0x64, 0xab, 0x23,
  0x87, 0xe2, 0x1c, 0x8e, 0x78, 0x70, 0x12, 0x7b, 0x6f, 0xf4, 0xe2, 0x70,
  0x1a, 0x84, 0x56, 0x48, 0x02, 0x60, 0xe9, 0x5b, 0xa8, 0x84, 0x92, 0x39,
  0xae, 0x0d, 0x5f, 0x20, 0x5e, 0xe2, 0x8b, 0xa5, 0x3b, 0xac, 0x6a, 0x44,
  0x78, 0xdb, 0x92, 0xdf, 0x89, 0x2f, 0x59, 0x1f, 0x4b, 0x45, 0xdf, 0x92,
  0xc3, 0x1a, 0x05, 0x2f, 0xfc, 0x28, 0x79, 0x3a, 0xc3, 0xbd, 0x03, 0xaf,
  0x79, 0x0f, 0xff, 0x2c, 0x3e, 0xbc, 0x8f, 0x8d, 0xa2, 0x01, 0xe2, 0x5a,
  0xb6, 0x7f, 0xcd, 0xf8, 0xfb, 0x76, 0xfc, 0xcf, 0x22, 0x70, 0x24, 0x0c,
  0x18, 0x12, 0xff, 0x2c, 0x50, 0x40, 0x25, 0x6b, 0x4b, 0xbd, 0xa8, 0xd6,
  0x93, 0xd1, 0xf2, 0x21, 0x28, 0x12, 0x32, 0x43, 0x95, 0x70, 0xb8, 0x21,
  0xec, 0x7d, 0xc0, 0x28, 0x8e, 0x64, 0x06, 0xd2, 0x3a, 0xcc, 0x36, 0x76,
  0x4d, 0x44, 0xe9, 0x4e, 0xcf, 0x84, 0x55, 0x2e, 0x80, 0x4c, 0x3a, 0x3b,
  0x70, 0xdd, 0x1e, 0x19, 0x5b, 0x21, 0xf7, 0x13, 0xda, 0x5d, 0xfd, 0x6a,
  0x50, 0x49, 0xd8, 0xc2, 0xfd, 0x0d, 0x3e, 0x65, 0x58, 0x31, 0x23, 0x12,
  0x91, 0x8d, 0x22, 0x37, 0x61, 0x6b, 0x53, 0x9c, 0x2a, 0xf8, 0x10, 0x9a,
  0x24, 0x52, 0x76, 0x12, 0xd5, 0x28, 0xa7, 0x04, 0x25, 0x21, 0xbe, 0x9c,
  0x61, 0x44, 0xeb, 0x38, 0x20, 0xd6, 0x6e, 0xef, 0x04, 0xe3, 0xe7, 0x10,
  0x7c, 0x8e, 0xda, 0xcd, 0x8c, 0x75, 0xd5, 0xc2, 0xcc, 0x09, 0x8d, 0x64,
  0x6f, 0x8b, 0x65, 0x30, 0xb6, 0x4d, 0x29, 0x45, 0x50, 0x2e, 0xc5, 0xe6,
  0x97, 0xdb, 0x9b, 0x76, 0x69, 0xfd, 0x66, 0x91, 0xda, 0x31, 0xb6, 0x2d,
  0xa2, 0x06, 0x21, 0x6d, 0x07, 0x54, 0xf2, 0x2c, 0x2d, 0x90, 0xfb, 0x90,
  0x0d, 0xe9, 0x40, 0xa3, 0xc0, 0x72, 0x75, 0x23, 0xde, 0x4e, 0x98, 0x58,
  0x05, 0xdd, 0x4e, 0x86, 0x40, 0x61, 0x12, 0x4f, 0xe7, 0x0d, 0xb2, 0xe3,
  0xa9, 0x7e, 0x81, 0x41, 0xf0, 0xea, 0x03, 0x4f, 0x1f, 0x8f, 0x5c, 0x4f,
  0x04, 0x72, 0xa8, 0xb7, 0x80, 0xb8, 0x44, 0x3c, 0x8f, 0xc6, 0x3a, 0xd5,
  0x7b, 0xf3, 0xcb, 0x2d, 0x16, 0x58, 0xce, 0x9f, 0xe6, 0x7d, 0x7b, 0x33,
  0xf9, 0x29, 0x5e, 0x4a, 0x9a, 0xf0, 0xbb, 0x9e, 0x85, 0x20, 0x64, 0x7b,
  0xdf, 0x1b, 0xc9, 0x8b, 0x49, 0x39, 0xbb, 0xfb, 0x23, 0x85, 0x9d, 0xe4,
  0x95, 0x17, 0x3b, 0xf4, 0xa3, 0x8e, 0xca, 0xdc, 0x37, 0x10, 0x8d, 0x62,
  0x8e, 0x8a, 0xfe, 0xfc, 0x0a, 0x8f, 0xab, 0xc5, 0xb0, 0x99, 0x8c, 0x46,
  0x86, 0x09, 0xd5, 0x0b, 0xea, 0x52, 0xb5, 0x46, 0xb0, 0x30, 0x0c, 0x1c,
  0xcd, 0x6b, 0x43, 0xf5, 0x7c, 0xc0, 0xb6, 0xbb, 0x9c, 0xd1, 0x38, 0xb0,
  0x15, 0x12, 0xa9, 0x90, 0xcf, 0x46, 0x54, 0x0e, 0x89, 0x26, 0xb2, 0x37,
  0x4e, 0x7a, 0x99, 0x11, 0x8e, 0x16, 0x13, 0xfe, 0x1f, 0x60, 0xf4, 0x4f,
  0x32, 0x72, 0x3e, 0xd9, 0xea, 0xc8, 0xa1, 0x38, 0x87, 0x23, 0x1e, 0x9c,
  0xc4, 0xde, 0x1b, 0xbd, 0x38, 0x9c, 0x06, 0xa1, 0x15, 0x92, 0x00, 0x58,
  0xfa, 0x06, 0x2a, 0xa1, 0x64, 0x8e, 0x6b, 0xc3, 0x17, 0x88, 0x97, 0xf8,
  0x62, 0xe9, 0x0e, 0xab, 0x1a, 0x11, 0xde, 0xb6, 0xe4, 0xb7, 0xe2, 0x4b,
  0xd6, 0xc7, 0x52, 0xd1, 0xb7, 0xe4, 0xb0, 0x46, 0xc1, 0x0b, 0x3f, 0x48,
  0x9e, 0xce, 0x70, 0xef, 0xc0, 0x6b, 0xde, 0xc3, 0x3f, 0x8b, 0x0f, 0xef,
  0x63, 0xa3, 0x68, 0x80, 0xb8, 0x96, 0xed, 0x5f, 0x33, 0xfe, 0xbe, 0x1d,
  0xff, 0xb3, 0x08, 0x1c, 0x09, 0x03, 0x86, 0xc4, 0x3f, 0x0b, 0x14, 0x50,
  0xc9, 0xda, 0x52, 0x2f, 0xaa, 0xf5, 0x64, 0xb4, 0x7c, 0x08, 0x8a, 0x84,
  0xcc, 0x50, 0x25, 0x1c, 0x6e, 0x08, 0x7b, 0x1f, 0x30, 0x8a, 0x23, 0x99,
  0x81, 0xb4, 0x0e, 0xb3, 0x8d, 0x5d, 0x13, 0x51, 0x5a, 0xd7, 0x33, 0x61,
  0x95, 0x0b, 0x20, 0x93, 0xce, 0x0e, 0x5c, 0x2b, 0x48, 0xc6, 0x56, 0xc8,
  0xfd, 0x84, 0x76, 0x57, 0xbf, 0x1a, 0x54, 0x12, 0xb6, 0x70, 0x7f, 0x83,
  0x4f, 0x19, 0x56, 0xcc, 0x88, 0x44, 0x5e, 0x9f, 0xc2, 0xcd, 0xad, 0x4d,
  0x71, 0xaa, 0xe0, 0x43, 0xe8, 0xa0, 0x48, 0xd9, 0x49, 0x54, 0xa3, 0x9c,
  0x12, 0x94, 0x84, 0xf8, 0x72, 0x86, 0x11, 0xad, 0xe3, 0x80, 0x58, 0xbb,
  0xbd, 0x13, 0x8c, 0x9f, 0x43, 0xf0, 0x39, 0x6a, 0x37, 0x33, 0xd6, 0x55,
  0x0b, 0x33, 0x27, 0x34, 0x92, 0xbd, 0x2d, 0x96, 0xc1, 0xd8, 0x36, 0xa5,
  0x14, 0x41, 0xb9, 0x14, 0x9b, 0x5f, 0x6c, 0x6f, 0xda, 0xa5, 0xf5, 0x9b,
  0x45, 0x41, 0x23, 0x44, 0x0d, 0x42, 0xda, 0xf6, 0xa8, 0xe4, 0x59, 0x5a,
  0x20, 0xf7, 0x21, 0x1b, 0xd2, 0x81, 0x46, 0x81, 0xe5, 0xea, 0x46, 0xbc,
  0x9d, 0x30, 0xb1, 0x0a, 0xba, 0x9d, 0x0c, 0x81, 0xc2, 0x24, 0x9e, 0xce,
  0x1b, 0x64, 0xc7, 0x53, 0xfd, 0x02, 0x83, 0xe0, 0xd5, 0x07, 0x9e, 0x3e,
  0x1e, 0xb9, 0x9e, 0x08, 0xe4, 0x50, 0x6f, 0x01, 0x71, 0x89, 0x78, 0x1e,
  0x8d, 0x75, 0xaa, 0xf7, 0xe6, 0x17, 0x5b, 0x2c, 0xb0, 0x9c, 0x3f, 0xcd,
  0xfb, 0xf6, 0x66, 0xf2, 0x63, 0xbc, 0x94, 0x34, 0xe1, 0x77, 0x3d, 0x0b,
  0x41, 0xc8, 0xf6, 0xbe, 0x37, 0x92, 0x17, 0x93, 0x72, 0x76, 0xf7, 0x47,
  0x0a, 0x3b, 0xc9, 0x2b, 0x2f, 0x76, 0xe8, 0x47, 0x1d, 0x95, 0xb9, 0x6f,
  0x20, 0x1a, 0xc5, 0x1c, 0x15, 0xfd, 0xf9, 0x25, 0x1e, 0x57, 0x8b, 0x61,
  0x33, 0x19, 0x8d, 0x0c, 0x13, 0xaa, 0x17, 0xd4, 0xa5, 0x6a, 0x8d, 0x60,
  0x61, 0x18, 0x38, 0x12, 0xb1, 0x50, 0x52, 0x04, 0xc9, 0x83, 0x3c, 0x3b,
  0x6a, 0x65, 0xb3, 0x13, 0x92, 0x7f, 0x55, 0x7d, 0x31, 0x4a, 0x5e, 0xda,
  0x89, 0x58, 0x28, 0x29, 0x82, 0xe4, 0x41, 0x9e, 0x1d, 0xb5, 0xb2, 0xd9,
  0x09, 0xc9, 0xbf, 0xaa, 0xbe, 0x1c, 0x25, 0x2f, 0x6d, 0x96, 0x4c, 0x16,
  0x81, 0x8e, 0xc6, 0x35, 0x66, 0xd9, 0xe1, 0x55, 0x61, 0x7f, 0x3e, 0xc9,
  0xc5, 0xcd, 0x3e, 0x2b, 0x5b, 0x70, 0x94, 0x0c, 0x75, 0x60, 0x84, 0x7b,
  0x1c, 0x40, 0x6c, 0x5a, 0x56, 0x1c, 0x23, 0x62, 0x77, 0xba, 0xb5, 0x5f,
  0x64, 0x6a, 0xc3, 0x43, 0xc1, 0xab, 0x52, 0x36, 0x3a, 0x48, 0x9e, 0xd9,
  0x2f, 0x45, 0x20, 0xdc, 0xd9, 0xe2, 0xaf, 0x93, 0xcf, 0x87, 0x78, 0xca,
  0xeb, 0x93, 0x2a, 0x74, 0xdf, 0xce, 0xe0, 0x18, 0x88, 0x52, 0x38, 0xa4,
  0xc4, 0xa4, 0x48, 0x0d, 0x0c, 0x49, 0x82, 0x49, 0x5a, 0x67, 0x4f, 0x1f,
  0xab, 0x7a, 0xc9, 0xbb, 0x54, 0xab, 0xff, 0xb6, 0xe5, 0x84, 0x65, 0x39,
  0xe4, 0x2d, 0xa8, 0x7b, 0x11, 0xa8, 0x94, 0x17, 0xca, 0x19, 0x7a, 0x62,
  0x71, 0xde, 0x2b, 0xa4, 0xa9, 0x51, 0x24, 0x2f, 0x1b, 0x2a, 0xe2, 0x79,
  0xf6, 0xd4, 0x9b, 0xf4, 0x3d, 0xee, 0x8a, 0x0e, 0x27, 0x95, 0x15, 0x76,
  0x57, 0xa4, 0xf6, 0xfa, 0x22, 0xec, 0x68, 0x4a, 0xce, 0x5b, 0xc6, 0xe3,
  0x92, 0x35, 0x5a, 0x07, 0xe3, 0x7d, 0xd7, 0xc8, 0xbf, 0x04, 0x5f, 0x28,
  0xe1, 0x74, 0x3f, 0xbd, 0x96, 0xa8, 0x3d, 0x13, 0x49, 0xdf, 0xe7, 0x49,
  0x30, 0x61, 0xdf, 0x4f, 0xd7, 0x08, 0x22, 0x5c, 0xac, 0x2a, 0x92, 0x3e,
  0x2c, 0x99, 0x2c, 0x02, 0x1d, 0x8d, 0x6b, 0xcc, 0xb2, 0xc3, 0xab, 0xc2,
  0xfe, 0x7c, 0x92, 0x8b, 0x9b, 0x7d, 0x56, 0xb6, 0xe0, 0x28, 0x19, 0xea,
  0xc0, 0x08, 0xf7, 0x38, 0x80, 0xd8, 0xb4, 0xac, 0x38, 0x46, 0xc4, 0xee,
  0x74, 0x6b, 0xbf, 0xc8, 0xd4, 0x86, 0x87, 0x82, 0x57, 0xa5, 0x6c, 0x74,
  0x90, 0x3c, 0xb3, 0x5f, 0x8a, 0x40, 0xb8, 0xb3, 0xc5, 0x5f, 0x27, 0x9f,
  0x0f, 0xf1, 0x94, 0xd7, 0x44, 0x55, 0xe8, 0xbe, 0x9d, 0xc1, 0x31, 0x10,
  0xa5, 0x70, 0x48, 0x89, 0x49, 0x91, 0x1a, 0x18, 0x92, 0x04, 0x93, 0xb4,
  0xce, 0x9e, 0x3e, 0x56, 0xf5, 0x92, 0x77, 0xa9, 0x56, 0xff, 0x6d, 0xcb,
  0x09, 0xcb, 0x72, 0xc8, 0x5b, 0x50, 0xf7, 0x22, 0x50, 0x29, 0x2f, 0x94,
  0x33, 0xf4, 0xc4, 0xe2, 0xbc, 0x57, 0x48, 0x53, 0xa3, 0x48, 0x5e, 0x36,
  0x54, 0xc4, 0xf3, 0xec, 0xa9, 0x37, 0xe9, 0x7b, 0xdc, 0x15, 0x1d, 0x4e,
  0x2a, 0x2b, 0xec, 0xae, 0x48, 0xed, 0x75, 0xf3, 0xdd, 0xe0, 0x5e, 0xc2,
  0xd7, 0xc1, 0x78, 0x5c, 0xb2, 0x46, 0xeb, 0x60, 0xbc, 0xef, 0x1a, 0xf9,
  0x97, 0xe0, 0x0f, 0x4a, 0x38, 0xdd, 0x4f, 0xaf, 0x25, 0x6a, 0xcf, 0x44,
  0xd2, 0xf7, 0x79, 0x12, 0x4c, 0xd8, 0xf7, 0xd3, 0x35, 0x82, 0x08, 0x17,
  0xab, 0x8a, 0xa4, 0x8f, 0x3c, 0xc6, 0x4a, 0x82, 0x96, 0x06, 0x89, 0x9e,
  0xf2, 0x18, 0x2b, 0x09, 0x5a, 0x1a, 0x24, 0x7a, 0xfa, 0xdb, 0x97, 0xef,
  0xde, 0xbf, 0x3c, 0x7e, 0x78, 0xb3, 0x9c, 0x56, 0xff, 0xb5, 0xd1, 0xfa,
  0xc6, 0x6d, 0xae, 0x1a, 0x38, 0x40, 0xc0, 0x39, 0xd2, 0x3e, 0x39, 0xfc,
  0xcf, 0x73, 0xaa, 0x40, 0x0e, 0x02, 0x88, 0x84, 0x26, 0xd0, 0xcd, 0xd6,
  0x43, 0x9d, 0x16, 0xe8, 0x0a, 0x49, 0x22, 0x71, 0x64, 0x1c, 0xce, 0xbc,
  0x95, 0x10, 0xb9, 0x97, 0xb9, 0x99, 0xd6, 0xd2, 0xaa, 0x70, 0x43, 0xdf,
  0xc7, 0xeb, 0x1b, 0x92, 0xaf, 0x6d, 0x4b, 0xb3, 0x63, 0x54, 0x6e, 0x6b,
  0xc9, 0x6d, 0xea, 0x95, 0xb6, 0x73, 0x16, 0x81, 0xd6, 0xf2, 0xbe, 0x95,
  0x17, 0x17, 0x0e, 0x88, 0xa6, 0x1b, 0xe1, 0x7b, 0xf5, 0xaa, 0xbf, 0xca,
  0xf5, 0x53, 0x82, 0x88, 0x76, 0x92, 0xc0, 0x69, 0x1b, 0x1d, 0x77, 0x1f,
  0x36, 0x25, 0x97, 0x80, 0xbf, 0x90, 0xb9, 0xc5, 0x77, 0xd5, 0x4c, 0xd0,
  0xaf, 0xd6, 0x57, 0x15, 0x97, 0xba, 0xb0, 0x8e, 0x0f, 0xcf, 0x68, 0xb3,
  0x4e, 0x5f, 0x8e, 0xc7, 0x56, 0x16, 0xd6, 0x92, 0x96, 0x30, 0x08, 0x8c,
  0x31, 0x52, 0x23, 0xfd, 0x6e, 0x20, 0xa3, 0xc4, 0x36, 0x50, 0x95, 0x74,
  0xfe, 0xf6, 0xe5, 0xbb, 0xf7, 0x2f, 0x8f, 0x1f, 0xde, 0x2c, 0xa7, 0xd5,
  0x7f, 0x6d, 0xb4, 0xbe, 0x71, 0x9b, 0xab, 0x06, 0x0e, 0x10, 0x70, 0x8e,
  0xb4, 0x4f, 0x0e, 0xff, 0xf3, 0x9c, 0x2a, 0x90, 0x83, 0x00, 0x22, 0xa1,
  0x09, 0x74, 0xb3, 0xf5, 0x50, 0xa7, 0x05, 0xba, 0x42, 0x92, 0x48, 0x1c,
  0x19, 0x87, 0x33, 0x6f, 0x25, 0x44, 0xee, 0x65, 0x6e, 0xa6, 0xb5, 0xb4,
  0x2a, 0xdc, 0xd0, 0xf7, 0xf1, 0xfa, 0x86, 0xe4, 0x6b, 0xdb, 0xd2, 0xec,
  0x18, 0x95, 0xdb, 0x5a, 0x72, 0x9b, 0x7a, 0xa5, 0xbd, 0x9e, 0x45, 0xa0,
  0xb5, 0xbc, 0x6f, 0xe5, 0xc5, 0x85, 0x03, 0xa2, 0xe9, 0x46, 0xf8, 0x5e,
  0xbd, 0xea, 0xaf, 0x72, 0xfd, 0x94, 0x20, 0xa2, 0x9d, 0x24, 0x70, 0xda,
  0x46, 0xc7, 0xdd, 0x87, 0x4d, 0xc9, 0x25, 0xe0, 0x2f, 0x64, 0x6e, 0xf1,
  0x5d, 0x35, 0x13, 0xf4, 0xab, 0xf5, 0x55, 0xc5, 0xa5, 0x2e, 0xac, 0xe3,
  0xc3, 0x33, 0xda, 0xac, 0xd3, 0x97, 0xe3, 0xb1, 0x95, 0x85, 0xb5, 0xa4,
  0x25, 0x0c, 0x02, 0x63, 0x8c, 0xd4, 0x48, 0xbf, 0x1b, 0xc8, 0x28, 0xb1,
  0x0d, 0x54, 0x25, 0x9d, 0x93, 0x62, 0x3f, 0xc6, 0xe6, 0x3b, 0x5f, 0x2d,
  0x4e, 0x8a, 0xfd, 0x18, 0x9b, 0xef, 0x7c, 0xb5, 0x30, 0x17, 0xc6, 0x68,
  0xbc, 0xb3, 0xcd, 0x5a, 0x42, 0xb1, 0x5d, 0xc2, 0x03, 0xe7, 0x12, 0x4d,
  0x8a, 0xce, 0x1a, 0xb4, 0x87, 0xb3, 0x1f, 0x6b, 0x0c, 0x09, 0x5c, 0x9e,
  0x83, 0xd7, 0x3e, 0xf2, 0xeb, 0x20, 0xee, 0x4c, 0xdf, 0x18, 0x1f, 0x9d,
  0x1f, 0x9a, 0xed, 0x7b, 0x7f, 0xfe, 0xed, 0x86, 0xa4, 0x2e, 0x74, 0x61,
  0x27, 0xc8, 0x69, 0x8f, 0xce, 0xa7, 0xd7, 0xb6, 0x38, 0xb5, 0x62, 0x47,
  0x8a, 0xb1, 0x16, 0x62, 0x1a, 0xb8, 0xfb, 0xe8, 0x68, 0xcd, 0x29, 0x3d,
  0x19, 0x3d, 0xe9, 0x9e, 0x52, 0x3f, 0x8a, 0x33, 0xe3, 0xfa, 0x06, 0xe4,
  0x2e, 0x60, 0xc1, 0xc8, 0x9e, 0xda, 0x71, 0x3d, 0x45, 0x28, 0xc8, 0x46,
  0xa0, 0x33, 0x94, 0xb5, 0x1b, 0x01, 0x95, 0x53, 0x84, 0x3d, 0x2f, 0x2e,
  0x4e, 0x90, 0xc6, 0x16, 0x85, 0x47, 0xbc, 0xbd, 0x1c, 0x0e, 0x35, 0x27,
  0x96, 0x56, 0x33, 0x5b, 0x89, 0x19, 0xea, 0x87, 0x9a, 0xeb, 0x87, 0x4e,
  0x45, 0x86, 0x04, 0xb4, 0x53, 0x49, 0xab, 0x3e, 0x36, 0x6c, 0x39, 0xe0,
  0xf2, 0xf9, 0xe2, 0x18, 0xd3, 0xe4, 0x45, 0xa7, 0xe6, 0x25, 0x16, 0x2c,
  0x79, 0x6d, 0xf6, 0x63, 0x1c, 0x16, 0x19, 0xfb, 0x2a, 0xf9, 0x22, 0x2f,
  0xf8, 0xcf, 0x38, 0xbd, 0x93, 0xc8, 0xad, 0xca, 0x39, 0x3b, 0x10, 0xe5,
  0x0d, 0x4e, 0xe2, 0xe4, 0x0a, 0x13, 0x5b, 0xf9, 0x90, 0x52, 0x08, 0x94,
  0xcc, 0x85, 0x31, 0x1a, 0xef, 0x6c, 0xb3, 0x96, 0x50, 0x6c, 0x97, 0xf0,
  0xc0, 0xb9, 0x44, 0x93, 0xa2, 0xb3, 0x06, 0xed, 0xe1, 0xec, 0xc7, 0x1a,
  0x43, 0x02, 0x97, 0xe7, 0xe0, 0xb5, 0x8f, 0xfc, 0x3a, 0x88, 0x3b, 0xd3,
  0x37, 0xc6, 0x47, 0xe7, 0x87, 0x66, 0xfb, 0xde, 0x9f, 0x7f, 0xb3, 0x21,
  0xa9, 0x0b, 0x5d, 0xd8, 0x09, 0x72, 0xda, 0xa3, 0xf3, 0xe9, 0xb5, 0x2d,
  0x4e, 0xad, 0xd8, 0x91, 0x62, 0xac, 0x85, 0x98, 0x06, 0xee, 0x3e, 0x3a,
  0x5a, 0x73, 0x4a, 0x4f, 0x46, 0x4f, 0xba, 0xa7, 0xd4, 0x8f, 0xe2, 0xcc,
  0xb8, 0xbe, 0x01, 0xb9, 0x0b, 0x58, 0x30, 0xb2, 0xa7, 0x76, 0x5c, 0x4f,
  0x11, 0x0a, 0xb2, 0x11, 0xe8, 0x0c, 0x65, 0xed, 0x46, 0x40, 0xe5, 0x14,
  0x61, 0xcf, 0x8b, 0x8b, 0x13, 0xa4, 0xb1, 0x45, 0xe1, 0x11, 0x6f, 0x2f,
  0x87, 0x43, 0xcd, 0x89, 0xa5, 0xd5, 0xcc, 0x56, 0x62, 0x86, 0xfa, 0xa1,
  0xe6, 0xfa, 0xa1, 0x53, 0x91, 0x21, 0x01, 0xed, 0x54, 0xd2, 0xaa, 0x8f,
  0x0d, 0x5b, 0x0e, 0xb8, 0x7c, 0xbe, 0x38, 0xc6, 0x34, 0x79, 0xd1, 0xa9,
  0x79, 0x89, 0x05, 0x4b, 0x5e, 0x9b, 0xfd, 0x18, 0x87, 0x45, 0xc6, 0xbe,
  0x4a, 0xbe, 0xc8, 0x0b, 0xfe, 0x33, 0x4e, 0xef, 0x24, 0x72, 0xab, 0x72,
  0xce, 0x0e, 0x44, 0x79, 0x83, 0x93, 0x38, 0xb9, 0xc2, 0xc4, 0x56, 0x3e,
  0xec, 0x13, 0x6a, 0xe7, 0x1d, 0x76, 0xa3, 0xda, 0x1a, 0x6f, 0x5b, 0x4f,
  0xeb, 0x39, 0x45, 0x14, 0x69, 0xb4, 0x48, 0xe1, 0x90, 0x07, 0x38, 0x28,
  0xea, 0x65, 0x0c, 0xf4, 0xc6, 0xbb, 0xbd, 0xa1, 0xc5, 0x44, 0x8c, 0x7a,
  0x7a, 0x33, 0xeb, 0x81, 0x70, 0x23, 0xb7, 0x16, 0x25, 0x91, 0x91, 0x0d,
  0xc8, 0x65, 0x4a, 0xaf, 0x7e, 0x78, 0xed, 0xf5, 0xa0, 0xd1, 0x3c, 0x35,
  0xa6, 0x17, 0x51, 0x48, 0xfb, 0x40, 0xd2, 0x32, 0x97, 0x6c, 0x39, 0xa2,
  0xa0, 0xea, 0x2c, 0xcb, 0x96, 0x16, 0xf1, 0x3b, 0xa7, 0xba, 0x96, 0xbc,
  0xa6, 0x20, 0xaa, 0xa0, 0xad, 0x53, 0x97, 0xb5, 0x9e, 0xd9, 0x09, 0xeb,
  0xb0, 0x35, 0x95, 0xf8, 0x7f, 0xf4, 0xd4, 0x42, 0x18, 0x77, 0xef, 0xd9,
  0xa3, 0xcf, 0x8d, 0x6c, 0xbe, 0x23, 0x08, 0x6e, 0xb7, 0x65, 0x0c, 0x91,
  0xdb, 0x0f, 0x7f, 0x27, 0x46, 0x8d, 0xa6, 0xf7, 0x0a, 0x82, 0x41, 0x52,
  0xc3, 0x8c, 0x20, 0x07, 0x95, 0xd4, 0x13, 0x87, 0xf0, 0x2f, 0x66, 0x13,
  0x65, 0xc3, 0x24, 0xe9, 0x8e, 0xf6, 0x89, 0x13, 0xc4, 0x46, 0x1e, 0x01,
  0xa3, 0x6f, 0x07, 0x1a, 0x8c, 0x19, 0x96, 0x72, 0x76, 0x78, 0x7e, 0x66,
  0xfe, 0x18, 0x9f, 0x9f, 0x9c, 0xf5, 0x00, 0x16, 0x36, 0x8c, 0x8c, 0x81,
  0x4d, 0xd3, 0x74, 0x15, 0xda, 0xe6, 0x36, 0x98, 0x19, 0x65, 0x42, 0x33,
  0xdb, 0xa9, 0xa3, 0xf8, 0x57, 0x1e, 0x0c, 0x56, 0x3d, 0x6a, 0x2d, 0xf4,
  0xc2, 0xc8, 0x87, 0xb5, 0x0b, 0xe3, 0x33, 0x5f, 0x4f, 0x21, 0xb4, 0x60,
  0x10, 0x23, 0x56, 0x6c, 0x19, 0x3d, 0xcd, 0xd6, 0x18, 0x6d, 0x70, 0xfe,
  0x3b, 0x74, 0x77, 0xed, 0xda, 0xdc, 0x03, 0xf2, 0xc7, 0xa9, 0xb9, 0xdc,
  0xb3, 0xc4, 0x35, 0x31, 0x37, 0x9c, 0x56, 0xcb, 0xef, 0x37, 0x92, 0x2d,
  0x72, 0x20, 0x8b, 0x5e, 0x72, 0x0f, 0xfd, 0x1a, 0x5d, 0x68, 0xdb, 0x2d,
  0xb8, 0x2e, 0x17, 0x19, 0x7b, 0xf8, 0x39, 0x39, 0x57, 0x99, 0x13, 0xcb,
  0x16, 0x86, 0x6b, 0x4d, 0x62, 0x10, 0x14, 0x16, 0x59, 0x0b, 0xa7, 0xbc,
  0x69, 0x6b, 0xf8, 0x4b, 0xa1, 0x0e, 0x3e, 0x97, 0xcc, 0x58, 0xaa, 0x0d,
  0x41, 0x96, 0x6d, 0xea, 0xac, 0x3c, 0xc8, 0xad, 0x36, 0xf3, 0xde, 0xeb,
  0x32, 0x19, 0xe0, 0x20, 0xc4, 0x39, 0x0b, 0xb5, 0x97, 0x6b, 0xe1, 0x2f,
  0xa4, 0x14, 0x02, 0x25, 0xfb, 0x84, 0x7a, 0x7d, 0x87, 0xdd, 0xa8, 0xb6,
  0xc6, 0xdb, 0xd6, 0xd3, 0x7a, 0x4e, 0x11, 0x45, 0x1a, 0x2d, 0x52, 0x38,
  0xe4, 0x01, 0x0e, 0x8a, 0x7a, 0x19, 0x03, 0xbd, 0xf1, 0x6e, 0x6f, 0x68,
  0x31, 0x11, 0xa3, 0x9e, 0xde, 0xcc, 0x7a, 0x20, 0xdc, 0xc8, 0xad, 0x45,
  0x49, 0x64, 0x64, 0x03, 0x72, 0x99, 0xd2, 0xab, 0xef, 0x5f, 0x7b, 0x3d,
  0x68, 0x34, 0x4f, 0x8d, 0xe9, 0x45, 0x14, 0xd2, 0x3e, 0x90, 0xb4, 0xcc,
  0x25, 0x5b, 0x8e, 0x28, 0xa8, 0x3a, 0xcb, 0xb2, 0xa5, 0x45, 0xfc, 0xce,
  0xa9, 0xae, 0x25, 0xaf, 0x29, 0x88, 0x2a, 0x68, 0xeb, 0xd4, 0x65, 0xad,
  0x67, 0x76, 0xc2, 0x3a, 0x6c, 0x4d, 0x25, 0xfe, 0x1f, 0x3d, 0xb5, 0x10,
  0xc6, 0xdd, 0x7b, 0xf6, 0xe8, 0x73, 0x23, 0x9b, 0xef, 0x08, 0x82, 0xdb,
  0x6d, 0x19, 0x43, 0xe4, 0xf6, 0xc3, 0xdf, 0x89, 0x51, 0xa3, 0xe9, 0xbd,
  0x82, 0x60, 0x90, 0xd4, 0x30, 0x23, 0xc8, 0x41, 0x25, 0xf5, 0xc4, 0x21,
  0xfc, 0x8b, 0xd9, 0x44, 0xd9, 0x30, 0x49, 0xba, 0xa3, 0x7d, 0xe2, 0x04,
  0xb1, 0x91, 0x47, 0xc0, 0xe8, 0xdb, 0x81, 0x06, 0x63, 0x86, 0xa5, 0x9c,
  0x1d, 0x9e, 0x9f, 0x99, 0x3f, 0xc6, 0xe7, 0x27, 0x67, 0x3d, 0x80, 0x85,
  0x0d, 0x23, 0x63, 0x60, 0xd3, 0x34, 0x5d, 0x85, 0xb6, 0xb9, 0x0d, 0x66,
  0x46, 0x99, 0xd0, 0xcc, 0x76, 0xea, 0x28, 0xfe, 0x95, 0x07, 0x83, 0x55,
  0x8f, 0x5a, 0x0b, 0xbd, 0x30, 0xf2, 0x61, 0xed, 0xc2, 0xf8, 0xcc, 0xd7,
  0x53, 0x08, 0x2d, 0x18, 0xc4, 0x88, 0x15, 0x5b, 0x46, 0x4f, 0xb3, 0x35,
  0x46, 0x1b, 0x9c, 0xff, 0x0e, 0xdd, 0x5d, 0xbb, 0x36, 0xf7, 0x80, 0xfc,
  0x71, 0x6a, 0x2e, 0xf7, 0x2c, 0x71, 0x4d, 0xcc, 0x0d, 0xa7, 0xd5, 0xf2,
  0xfb, 0x8d, 0x64, 0x8b, 0x1c, 0xc8, 0xa2, 0x97, 0xdc, 0x43, 0xbf, 0x46,
  0x17, 0xda, 0x76, 0x0b, 0xae, 0xcb, 0x45, 0xc6, 0x1e, 0x7e, 0x4e, 0xce,
  0x55, 0xe6, 0xc4, 0xb2, 0x85, 0xe1, 0x5a, 0x93, 0x18, 0x04, 0x85, 0x45,
  0xd6, 0xc2, 0x29, 0x6f, 0xda, 0x1a, 0xfe, 0x52, 0xa8, 0x83, 0xcf, 0x25,
  0x33, 0x96, 0x6a, 0x43, 0x90, 0x65, 0x9b, 0x3a, 0x2b, 0x0f, 0x72, 0xab,
  0xcd, 0xbc, 0xf7, 0xba, 0x4c, 0x06, 0x38, 0x08, 0x71, 0xce, 0x42, 0xed,
  0xe5, 0x5a, 0xf8, 0x0b, 0x9a, 0x63, 0x43, 0xba, 0x84, 0xdf, 0x56, 0xf3,
  0x68, 0x8e, 0x0d, 0xe9, 0x12, 0x7e, 0x5b, 0xcd, 0x53, 0x79, 0x2a, 0x1a,
  0x56, 0xa3, 0x72, 0x41, 0xe0, 0x67, 0x58, 0xda, 0x96, 0x23, 0xe7, 0x10,
  0xcd, 0xaa, 0xcb, 0x74, 0x5b, 0xfa, 0x5c, 0xc8, 0x66, 0x55, 0x69, 0x4b,
  0x5c, 0xa3, 0xa2, 0x4e, 0x81, 0xfc, 0x9a, 0x6e, 0x58, 0xbf, 0x39, 0x68,
  0x4d, 0xf2, 0xbe, 0x10, 0xb0, 0x96, 0xc2, 0xd8, 0x16, 0x94, 0xff, 0x30,
  0xb3, 0x9b, 0x06, 0x0c, 0x23, 0xa4, 0x6d, 0xb1, 0xd0, 0x9a, 0x95, 0xac,
  0xd0, 0x13, 0xd4, 0x71, 0x88, 0x85, 0x47, 0x3e, 0x64, 0xca, 0x26, 0x50,
  0x49, 0x23, 0xe3, 0x39, 0xbb, 0x64, 0xda, 0x74, 0x57, 0x4a, 0xc0, 0x0a,
  0xc1, 0x42, 0x4f, 0xfd, 0x43, 0x63, 0x96, 0x46, 0xd6, 0x8f, 0xe3, 0x05,
  0x0d, 0xe3, 0x1b, 0xb4, 0x60, 0x2a, 0x64, 0xad, 0xd1, 0x5c, 0xf1, 0x42,
  0x54, 0x9e, 0x8a, 0x86, 0xd5, 0xa8, 0x5c, 0x10, 0xf8, 0x19, 0x96, 0xb6,
  0xe5, 0xc8, 0x39, 0x44, 0xb3, 0xea, 0x32, 0xdd, 0x96, 0x3e, 0x17, 0xb2,
  0x59, 0x55, 0xda, 0x12, 0xd7, 0xa8, 0xa8, 0x53, 0x20, 0xbf, 0xa6, 0x1b,
  0xd6, 0xaf, 0x0e, 0x5a, 0x93, 0xbc, 0x2f, 0x04, 0xac, 0xa5, 0x30, 0xb6,
  0x05, 0xe5, 0x3f, 0xcc, 0xec, 0xa6, 0x01, 0xc3, 0x08, 0x69, 0x5b, 0x2c,
  0xb4, 0x66, 0x25, 0x2b, 0xf4, 0x04, 0x75, 0x1c, 0x62, 0xe1, 0x91, 0x0f,
  0x99, 0xb2, 0x09, 0x54, 0xd2, 0xc8, 0x78, 0xce, 0x2e, 0x99, 0x36, 0xdd,
  0x95, 0x12, 0xb0, 0x42, 0xb0, 0xd0, 0x53, 0xff, 0xd0, 0x98, 0xa5, 0x91,
  0xf5, 0xe3, 0x78, 0x41, 0xc3, 0xf8, 0x06, 0x2d, 0x98, 0x0a, 0x59, 0x6b,
  0x40, 0x24, 0xb4, 0x47, 0x7c, 0x0b, 0x9d, 0x41, 0xd5, 0xc0, 0xd1, 0x1a,
  0xd4, 0x2f, 0x1f, 0xcc, 0xa1, 0x45, 0x92, 0xed, 0x12, 0xf9, 0xf6, 0xea,
  0x7a, 0x8b, 0x6d, 0x89, 0x40, 0xcf, 0x70, 0x64, 0x0a, 0xd4, 0xa8, 0xb4,
  0x95, 0x17, 0x39, 0xc0, 0x7b, 0xca, 0x6a, 0x07, 0x55, 0x2a, 0x80, 0xb2,
  0x34, 0x57, 0xbc, 0x10, 0x10, 0x09, 0xed, 0x11, 0xdf, 0x42, 0x67, 0x50,
  0x35, 0x70, 0xb4, 0x06, 0xf5, 0xcb, 0x07, 0x73, 0x68, 0x91, 0x64, 0xbb,
  0x44, 0xbe, 0xbd, 0xba, 0xde, 0x62, 0x5b, 0x22, 0xd0, 0x33, 0x1c, 0x99,
  0x02, 0x35, 0x2a, 0x6d, 0xe5, 0x45, 0x0e, 0xf0, 0x9e, 0xb2, 0xda, 0x41,
  0x33, 0x56, 0x65, 0x39, 0xa7, 0x8e, 0x37, 0xaa, 0xba, 0xc5, 0xfa, 0x14,
  0x93, 0x0a, 0xc6, 0xf5, 0x97, 0x66, 0xf0, 0x76, 0xe7, 0x59, 0xaf, 0x87,
  0x1b, 0xa4, 0xa9, 0x87, 0xd4, 0x30, 0x8a, 0x75, 0x49, 0xe3, 0x8c, 0x10,
  0xca, 0x78, 0x6c, 0xab, 0x63, 0xda, 0xb1, 0x53, 0x7b, 0x6e, 0xd0, 0xb9,
  0x92, 0xca, 0x47, 0xf9, 0xf7, 0x3d, 0xe5, 0x75, 0xda, 0xef, 0x84, 0xf0,
  0x98, 0xcc, 0xae, 0x0c, 0x38, 0x3b, 0xa4, 0x7d, 0x33, 0xc9, 0x72, 0x68,
  0x7f, 0xad, 0xce, 0x9a, 0xd5, 0x32, 0x94, 0xf3, 0xae, 0xe0, 0xd3, 0x8e,
  0xa8, 0x41, 0x51, 0x6f, 0x8a, 0x00, 0x32, 0x70, 0xdb, 0xef, 0x83, 0xd6,
  0x77, 0x6f, 0x23, 0x69, 0x02, 0x81, 0x74, 0xef, 0x2b, 0xbe, 0x57, 0xf1,
  0x82, 0xbe, 0xb9, 0xc9, 0x86, 0xd1, 0x2f, 0x76, 0x37, 0x48, 0x83, 0xd6,
  0x95, 0x0a, 0xa0, 0xec, 0x8c, 0x55, 0x59, 0xce, 0xa9, 0xe3, 0x8d, 0xaa,
  0x6e, 0xb1, 0x3e, 0xc5, 0xa4, 0x82, 0x71, 0xfd, 0xa5, 0x19, 0xbc, 0xdd,
  0x79, 0xd6, 0xeb, 0xe1, 0x06, 0x69, 0xea, 0x21, 0x35, 0x8c, 0x62, 0x5d,
  0xd2, 0x38, 0x23, 0x84, 0x32, 0x1e, 0xdb, 0xea, 0x98, 0x76, 0xec, 0xd4,
  0x9e, 0x1b, 0x74, 0xae, 0xa4, 0xf2, 0x51, 0xfe, 0x7d, 0x4f, 0x79, 0x9d,
  0xf6, 0x3b, 0x21, 0x3c, 0x26, 0xb3, 0x2b, 0x03, 0xce, 0x0e, 0x69, 0xdf,
  0x4c, 0xb2, 0x1c, 0xda, 0x5f, 0xab, 0xb3, 0x66, 0xb5, 0x0c, 0xe5, 0xbc,
  0x2b, 0xf8, 0xb4, 0x23, 0x6a, 0x50, 0xd4, 0x9b, 0x22, 0x80, 0x0c, 0xdc,
  0xf6, 0xfb, 0xa0, 0xf5, 0xdd, 0xdb, 0x48, 0x9a, 0x40, 0x20, 0xdd, 0xfb,
  0x8a, 0xef, 0x55, 0xbc, 0xa0, 0x6f, 0x6e, 0xb2, 0x61, 0xf4, 0x8b, 0xdd,
  0x0d, 0xd2, 0xa0, 0xb5, 0xf1, 0x81, 0xe0, 0x83, 0xe9, 0xdb, 0x66, 0x5f,
  0xbc, 0xf9, 0x86, 0x77, 0x46, 0xeb, 0x51, 0xa4, 0x8e, 0x10, 0xa7, 0xb3,
  0xc6, 0x07, 0x82, 0x0f, 0xa6, 0x6f, 0x9b, 0x7d, 0xf1, 0xe6, 0x1b, 0xde,
  0x19, 0xad, 0x47, 0x91, 0x3a, 0x42, 0x9c, 0xce, 0x16, 0x5a, 0xb4, 0xd3,
  0xfd, 0xdd, 0xfe, 0xac, 0x77, 0xe9, 0x6b, 0x66, 0xb5, 0xb1, 0xf7, 0x7c,
  0x85, 0x16, 0xed, 0x74, 0x7f, 0xb7, 0x3f, 0xeb, 0x5d, 0xfa, 0x9a, 0x59,
  0x6d, 0xec, 0x3d, 0xdf, 0x1f, 0xed, 0x3d, 0xfd, 0x7c, 0xb4, 0x47, 0x0d,
  0x7f, 0xb4, 0xf7, 0xf4, 0xf3, 0xd1, 0x1e, 0x35, 0x78, 0xf5, 0xe6, 0xe6,
  0x1a, 0x91, 0x7a, 0x03, 0x45, 0xda, 0xdc, 0x26, 0xfd, 0x40, 0xb7, 0xfc,
  0x85, 0xc5, 0xdd, 0x08, 0xcf, 0x8d, 0xb8, 0xd9, 0x4c, 0xf0, 0x8d, 0x85,
  0xd1, 0x69, 0xf2, 0x22, 0x88, 0x83, 0x0c, 0x5d, 0x56, 0x11, 0xd3, 0xe2,
  0x32, 0x07, 0x19, 0x29, 0xf8, 0xa4, 0xb7, 0x4f, 0xda, 0x27, 0xcf, 0xf6,
  0xfd, 0xa0, 0xdb, 0x19, 0x9f, 0x91, 0xb2, 0xf4, 0xa9, 0xa8, 0x91, 0x8e,
  0xab, 0xdb, 0xef, 0x07, 0x6c, 0xf3, 0x17, 0x5b, 0x7d, 0x40, 0x4d, 0xb1,
  0x97, 0xae, 0x8b, 0x96, 0x43, 0xa8, 0x4a, 0x5d, 0x60, 0x1e, 0xc1, 0x59,
  0xe1, 0x07, 0x7d, 0x0c, 0xab, 0x44, 0x9b, 0x0e, 0xeb, 0x70, 0x04, 0x37,
  0xe4, 0x2a, 0x71, 0x6c, 0x5f, 0x37, 0x1d, 0x59, 0x83, 0xe7, 0x5d, 0x04,
  0x25, 0x8b, 0x6c, 0xc4, 0x4c, 0x5a, 0x87, 0xc3, 0x3b, 0x7f, 0xf8, 0x83,
  0xe3, 0x48, 0xdc, 0x6d, 0x9c, 0x5a, 0x5c, 0x3c, 0x21, 0x04, 0x53, 0x8e,
  0x55, 0x33, 0x58, 0xfe, 0xc6, 0xc1, 0x9f, 0xc9, 0x39, 0xfc, 0xf3, 0xf0,
  0xcf, 0xe6, 0x9f, 0x3f, 0x6f, 0xe8, 0xa5, 0x66, 0x30, 0x2c, 0x57, 0x30,
  0xe2, 0x10, 0x07, 0xe9, 0x80, 0x06, 0x49, 0xbb, 0x5b, 0x2b, 0x69, 0x06,
  0xe7, 0xaf, 0x4e, 0xf9, 0x32, 0x56, 0x1c, 0xf6, 0x26, 0x6a, 0x06, 0x1f,
  0x22, 0xb5, 0x1e, 0x2c, 0x9c, 0x1a, 0x4d, 0x30, 0x9d, 0xd8, 0xbd, 0xf4,
  0x5e, 0x19, 0xb8, 0xa4, 0x86, 0x1b, 0xe6, 0x00, 0xa9, 0xd1, 0x6f, 0x2f,
  0xe1, 0x5f, 0xe1, 0x2a, 0x70, 0xc3, 0x77, 0x55, 0x91, 0x96, 0x46, 0xba,
  0x40, 0xd2, 0x32, 0x6c, 0xc0, 0x5e, 0x87, 0x1b, 0x33, 0xa5, 0x41, 0x22,
  0xa8, 0xb0, 0x5c, 0x1b, 0xd1, 0x28, 0x78, 0x61, 0x01, 0x43, 0x45, 0xb9,
  0x6d, 0x95, 0xd7, 0x1f, 0xb1, 0x3e, 0x29, 0xf3, 0xf1, 0x72, 0x85, 0x30,
  0x9f, 0xcf, 0xac, 0xd6, 0x77, 0xa7, 0x30, 0x31, 0xb6, 0x70, 0xcf, 0xdb,
  0x59, 0x27, 0x1d, 0xf4, 0xd8, 0x15, 0x4e, 0x20, 0x8a, 0x74, 0x25, 0x8f,
  0x55, 0xd9, 0x03, 0x00, 0xd8, 0x24, 0x15, 0xe6, 0xd4, 0xe8, 0xb9, 0x96,
  0x34, 0x3c, 0x30, 0x24, 0x54, 0x91, 0x83, 0x58, 0x20, 0xfd, 0xb6, 0xbb,
  0x52, 0x0b, 0x8d, 0x5b, 0xe0, 0x28, 0x66, 0x50, 0x26, 0x0b, 0x29, 0x46,
  0xad, 0xa4, 0x50, 0x3e, 0x51, 0x99, 0x69, 0xcc, 0x06, 0x5a, 0x0f, 0xcf,
  0x37, 0x03, 0x41, 0x5e, 0xd5, 0xe9, 0x3e, 0x8b, 0xda, 0x0a, 0x74, 0xd1,
  0x9c, 0x32, 0x3a, 0x67, 0x9f, 0x3a, 0x36, 0x9f, 0x76, 0x1d, 0x7f, 0x1a,
  0x6e, 0xad, 0x8d, 0xc6, 0x6e, 0x0a, 0xea, 0x1a, 0x9c, 0x84, 0x06, 0x0d,
  0x4d, 0x7f, 0x11, 0x43, 0xae, 0xf5, 0x84, 0xea, 0xfe, 0x6e, 0xe8, 0x4a,
  0x41, 0x2f, 0x64, 0xda, 0xe4, 0x61, 0xbe, 0xbc, 0x7f, 0x03, 0x71, 0x6c,
  0x8a, 0xc6, 0xdb, 0xe2, 0x2c, 0x56, 0xc2, 0xd4, 0xab, 0xcb, 0x4b, 0x42,
  0xa2, 0x08, 0x33, 0xf3, 0xa8, 0x62, 0x51, 0x0a, 0x07, 0x04, 0xe6, 0xdf,
  0x30, 0x72, 0x9a, 0xb9, 0xee, 0x86, 0x2b, 0x8b, 0x14, 0x86, 0x53, 0xbb,
  0x86, 0x1d, 0xbd, 0xa5, 0xb3, 0x68, 0xf1, 0x26, 0xd7, 0xdb, 0x69, 0x32,
  0x55, 0x36, 0xd4, 0x89, 0x76, 0xf9, 0x20, 0x52, 0x83, 0x82, 0x0c, 0x58,
  0x5e, 0xbd, 0xb9, 0xb9, 0x46, 0xa4, 0xde, 0x40, 0x91, 0x36, 0xb7, 0x49,
  0x3f, 0xd0, 0x2d, 0x7f, 0x61, 0x71, 0x37, 0xc2, 0x73, 0x23, 0x6e, 0x36,
  0x13, 0x7c, 0x63, 0x61, 0x74, 0x9a, 0xbc, 0x08, 0xe2, 0x20, 0x43, 0x97,
  0x55, 0xc4, 0xb4, 0xb8, 0xcc, 0x41, 0x46, 0x0a, 0x3e, 0xe9, 0xed, 0x93,
  0xf6, 0xc9, 0xb3, 0x7d, 0x3f, 0xe8, 0x76, 0xc6, 0x67, 0xa4, 0x2c, 0x7d,
  0x2a, 0x6a, 0xa4, 0xe3, 0xea, 0xf6, 0xfb, 0x01, 0xdb, 0xfc, 0xd9, 0x56,
  0x1f, 0x50, 0x53, 0xec, 0xa5, 0xeb, 0xa2, 0xe5, 0x10, 0xaa, 0x52, 0x17,
  0x98, 0x47, 0x70, 0x56, 0xf8, 0x41, 0x1f, 0xc3, 0x2a, 0xd1, 0xa6, 0xc3,
  0x3a, 0x1c, 0xc1, 0x0d, 0xb9, 0x4a, 0x1c, 0xdb, 0xd7, 0x4d, 0x47, 0xd6,
  0xe0, 0x79, 0x17, 0x41, 0xc9, 0x22, 0x1b, 0x31, 0x93, 0xd6, 0xe1, 0xf0,
  0xce, 0xef, 0x7f, 0xef, 0x38, 0x12, 0x77, 0x1b, 0xa7, 0x16, 0x17, 0x4f,
  0x08, 0xc1, 0x94, 0x63, 0xd5, 0x0c, 0x96, 0xbf, 0x71, 0xf0, 0x67, 0x72,
  0x0e, 0xff, 0x34, 0xfc, 0xb3, 0xf9, 0xe7, 0x4f, 0x1b, 0x7a, 0xa9, 0x19,
  0x0c, 0xcb, 0x15, 0x8c, 0x38, 0xc4, 0x41, 0x3a, 0xa0, 0x41, 0xd2, 0xee,
  0xd6, 0x4a, 0x9a, 0xc1, 0xf9, 0xab, 0x53, 0xbe, 0x8c, 0x15, 0x87, 0xbd,
  0x89, 0x9a, 0xc1, 0x87, 0x48, 0xad, 0x07, 0x0b, 0xa7, 0x46, 0x13, 0x4c,
  0x27, 0x76, 0x2f, 0xbd, 0x57, 0x06, 0x2e, 0xa9, 0xe1, 0x86, 0x39, 0x40,
  0x6a, 0xf4, 0xdb, 0x4b, 0xf8, 0x57, 0xb8, 0x0a, 0xdc, 0xf0, 0x5d, 0x55,
  0xa4, 0xa5, 0x91, 0x2e, 0x90, 0xb4, 0x0c, 0x1b, 0xb0, 0xd7, 0xe1, 0xc6,
  0x4c, 0x69, 0x90, 0x08, 0x2a, 0x2c, 0xd7, 0x46, 0x34, 0x0a, 0x5e, 0x58,
  0xc0, 0x50, 0x51, 0x6e, 0x5b, 0xe5, 0xf5, 0x47, 0xac, 0x4f, 0xca, 0x7c,
  0xbc, 0x5c, 0x21, 0xcc, 0xe7, 0x33, 0xab, 0xf5, 0xdd, 0x29, 0x4c, 0x8c,
  0x2d, 0xdc, 0xf3, 0x76, 0xd6, 0x49, 0x07, 0x3d, 0x76, 0x85, 0x13, 0x88,
  0x22, 0x5d, 0xc9, 0x63, 0x55, 0xf6, 0x00, 0x00, 0x36, 0x49, 0x85, 0x39,
  0x35, 0x7a, 0xae, 0x25, 0x0d, 0x0f, 0x0c, 0x09, 0x55, 0xe4, 0x20, 0x16,
  0x48, 0xbf, 0xed, 0xae, 0xd4, 0x42, 0xe3, 0x16, 0x38, 0x8a, 0x19, 0x94,
  0xc9, 0x42, 0x8a, 0x51, 0x2b, 0x29, 0x94, 0x4f, 0x54, 0x66, 0x1a, 0xb3,
  0x81, 0xd6, 0xc3, 0xf3, 0xcd, 0x40, 0x90, 0x57, 0x75, 0xba, 0xcf, 0xa2,
  0xb6, 0x02, 0x5d, 0x34, 0xa7, 0x8c, 0xce, 0xd9, 0xa7, 0x8e, 0xcd, 0xa7,
  0x5d, 0xc7, 0x9f, 0x86, 0x5b, 0x6b, 0xa3, 0xb1, 0x9b, 0x82, 0xba, 0x06,
  0x27, 0xa1, 0x41, 0x43, 0xd3, 0x5f, 0xc4, 0x90, 0x6b, 0x3d, 0xa1, 0xba,
  0xbf, 0x1b, 0xba, 0x52, 0xd0, 0x0b, 0x99, 0x36, 0x79, 0x98, 0x2f, 0xef,
  0xdf, 0x40, 0x1c, 0x9b, 0xa2, 0xf1, 0xb6, 0x38, 0x8b, 0x95, 0x30, 0xf5,
  0xea, 0xf2, 0x92, 0x90, 0x28, 0xc2, 0xcc, 0x3c, 0xaa, 0x58, 0x94, 0xc2,
  0x01, 0x81, 0xf9, 0x37, 0x8c, 0x9c, 0x66, 0xae, 0xbb, 0xe1, 0xca, 0x22,
  0x85, 0xe1, 0xd4, 0xae, 0x61, 0x47, 0x6f, 0xe9, 0x2c, 0x5a, 0xbc, 0xc9,
  0xf5, 0x76, 0x9a, 0x4c, 0x95, 0x0d, 0x75, 0xa2, 0x5d, 0x3e, 0x88, 0xd4,
  0xe6, 0x88, 0xe4, 0x6b, 0xe8, 0xe7, 0x7d, 0x6b, 0xdd, 0x8d, 0xf0, 0xb0,
  0x59, 0x20, 0x29, 0x84, 0x91, 0x18, 0x36, 0x8f, 0x71, 0xcf, 0x2a, 0x0b,
  0x24, 0xc5, 0x7a, 0xa5, 0xf0, 0xa3, 0xae, 0xd4, 0xbc, 0xa0, 0xed, 0x58,
  0xe7, 0x17, 0x70, 0xac, 0xd0, 0xd7, 0x96, 0x1e, 0x8f, 0xf6, 0x83, 0x83,
  0xad, 0xe7, 0xc3, 0xe9, 0x74, 0x3a, 0x24, 0x3d, 0xe0, 0x05, 0x2b, 0x27,
  0x3b, 0xa2, 0x1c, 0xf4, 0xf8, 0x0c, 0xc6, 0x99, 0xec, 0xf7, 0xab, 0x57,
  0xaf, 0x44, 0x8f, 0x39, 0xbf, 0xea, 0x68, 0x14, 0x16, 0xe4, 0x49, 0x34,
  0xaa, 0x58, 0xf7, 0xbf, 0xfa, 0x6a, 0xd5, 0xcc, 0xa8, 0x49, 0x30, 0x58,
  0x86, 0xb2, 0x5e, 0x5b, 0x23, 0xdb, 0x01, 0xe2, 0x44, 0xaf, 0xf6, 0x81,
  0xcb, 0x4c, 0x34, 0x63, 0x07, 0x47, 0xb3, 0xe4, 0xbe, 0x20, 0xf4, 0xa2,
  0x8c, 0xdd, 0xed, 0x3c, 0xca, 0x53, 0xf5, 0xd1, 0xb2, 0x74, 0x82, 0x75,
  0x2c, 0x93, 0x4d, 0x47, 0xa1, 0xcf, 0xa6, 0xb9, 0x64, 0x80, 0xa5, 0xf2,
  0xad, 0xee, 0xd8, 0xf7, 0x9c, 0x87, 0x6c, 0x75, 0xfb, 0x48, 0x9e, 0xf6,
  0x1e, 0x49, 0x74, 0xf3, 0x61, 0x55, 0x61, 0xdb, 0xb7, 0x5e, 0x11, 0x8a,
  0xe7, 0x2b, 0xb9, 0x10, 0xaf, 0xae, 0x90, 0xbf, 0x45, 0xc8, 0x16, 0x66,
  0xca, 0x35, 0x33, 0x01, 0x91, 0x1f, 0xe3, 0xf1, 0xf1, 0xce, 0xf9, 0xf1,
  0x38, 0xc8, 0x78, 0xbf, 0x83, 0xcb, 0x98, 0x7b, 0x4b, 0xb7, 0x5c, 0x9e,
  0xbc, 0x45, 0x84, 0x99, 0x5c, 0x5e, 0xb4, 0x29, 0x9c, 0xbf, 0x12, 0x85,
  0x18, 0x59, 0x15, 0x5a, 0x0c, 0x63, 0x65, 0x77, 0x91, 0x15, 0x54, 0x44,
  0xa0, 0x20, 0x03, 0x96, 0x39, 0x22, 0xf9, 0x1a, 0xfa, 0x79, 0xdf, 0x5a,
  0x77, 0x23, 0x3c, 0x6c, 0x16, 0x48, 0x0a, 0x61, 0x24, 0x86, 0xcd, 0x63,
  0xdc, 0xb3, 0xca, 0x02, 0x49, 0xb1, 0x5e, 0x29, 0xfc, 0xa8, 0x2b, 0x35,
  0x2f, 0x68, 0x3b, 0xd6, 0xf9, 0x05, 0x1c, 0x2b, 0xf4, 0xb5, 0xa5, 0xc7,
  0xa3, 0xfd, 0xe0, 0x60, 0xeb, 0xf9, 0x70, 0x3a, 0x9d, 0x0e, 0x49, 0x0f,
  0x78, 0xc1, 0xca, 0xc9, 0x8e, 0x28, 0x07, 0x3d, 0x3e, 0x83, 0x71, 0x26,
  0xfb, 0xfd, 0xea, 0xd5, 0x2b, 0xd1, 0x63, 0xce, 0xaf, 0x3a, 0x1a, 0x85,
  0x05, 0x79, 0x12, 0x8d, 0x2a, 0xd6, 0xfd, 0xaf, 0xbe, 0x5a, 0x35, 0x33,
  0x6a, 0x12, 0x0c, 0x96, 0xa1, 0xac, 0xd7, 0xd6, 0xc8, 0x76, 0x80, 0x38,
  0xd1, 0xab, 0x7d, 0xe0, 0x32, 0x13, 0xcd, 0xd8, 0xc1, 0xd1, 0x2c, 0xb9,
  0x2f, 0x08, 0xbd, 0x28, 0x63, 0x77, 0x3b, 0x8f, 0xf2, 0x54, 0x7d, 0xb4,
  0x2c, 0x9d, 0x60, 0x1d, 0xcb, 0x64, 0xd3, 0x51, 0xe8, 0xb3, 0x69, 0x2e,
  0x19, 0x60, 0xa9, 0x7c, 0xab, 0x3b, 0xf6, 0x3d, 0xe7, 0x21, 0x5b, 0xdd,
  0x3e, 0x92, 0xa7, 0xbd, 0x47, 0x12, 0xdd, 0x7c, 0x58, 0x55, 0xd8, 0xf6,
  0xad, 0x57, 0x84, 0xe2, 0xf9, 0x4a, 0x2e, 0xc4, 0xab, 0x2b, 0xe4, 0x6f,
  0x11, 0xb2, 0x85, 0x99, 0x72, 0xcd, 0x4c, 0x40, 0xe4, 0xc7, 0x78, 0x7c,
  0xbc, 0x73, 0x7e, 0x3c, 0x0e, 0x32, 0xde, 0xef, 0xe0, 0x32, 0xe6, 0xde,
  0xd2, 0x2d, 0x97, 0x27, 0x6f, 0x11, 0x61, 0x26, 0x97, 0x17, 0x6d, 0x0a,
  0xe7, 0xaf, 0x44, 0x21, 0x46, 0x56, 0x85, 0x16, 0xc3, 0x58, 0xd9, 0x5d,
  0x64, 0x05, 0x15, 0x91, 0x43, 0x84, 0xd3, 0x0d, 0xa0, 0x84, 0xd8, 0x3a,
  0x0e, 0x11, 0x4e, 0x37, 0x80, 0x12, 0x62, 0xeb, 0xe4, 0xdd, 0xcb, 0x73,
  0x94, 0xb7, 0x34, 0x92, 0xe2, 0x01, 0x17, 0x50, 0xe8, 0x19, 0xbf, 0xb1,
  0xb8, 0x04, 0x14, 0xb5, 0x49, 0xa7, 0xae, 0x47, 0x88, 0x2a, 0xeb, 0x7c,
  0x7c, 0xb5, 0x12, 0xde, 0xba, 0xed, 0x37, 0x5b, 0x2a, 0xd2, 0xa1, 0x4b,
  0xf3, 0xdd, 0xd3, 0xd8, 0x8b, 0x9e, 0x06, 0x6f, 0x40, 0xfc, 0x3a, 0x9c,
  0x09, 0x2b, 0xd7, 0x8d, 0x96, 0x2a, 0x7e, 0x9d, 0xfe, 0xbc, 0xbc, 0xcc,
  0xe1, 0x09, 0xa4, 0xf3, 0xf2, 0x03, 0x6f, 0x81, 0x9b, 0x94, 0x77, 0xa7,
  0xe6, 0x52, 0x9c, 0x36, 0x68, 0x2c, 0x5f, 0x11, 0xc8, 0x09, 0xbb, 0xa7,
  0xb6, 0x3d, 0x91, 0x96, 0x40, 0x86, 0x15, 0x86, 0x84, 0xc4, 0x98, 0x4f,
  0x8d, 0x89, 0x30, 0x45, 0xf6, 0x07, 0x95, 0x03, 0xd6, 0xed, 0x14, 0xdb,
  0xbc, 0x85, 0xfc, 0xa8, 0x1e, 0xd2, 0x3a, 0x8c, 0x55, 0x90, 0xa6, 0x20,
  0x79, 0xf7, 0xf2, 0x1c, 0xe5, 0x2d, 0x8d, 0xa4, 0x78, 0xc0, 0x05, 0x14,
  0x7a, 0xc6, 0x6f, 0x2c, 0x2e, 0x01, 0x45, 0x6d, 0xd2, 0xa9, 0xeb, 0x11,
  0xa2, 0xca, 0x3a, 0x1f, 0x5f, 0xad, 0x84, 0xb7, 0x6e, 0xfb, 0xcd, 0x96,
  0x8a, 0x74, 0xe8, 0xd2, 0x7c, 0xf7, 0x34, 0xf6, 0xa2, 0xa7, 0xc1, 0x1b,
  0x10, 0xbf, 0x0e, 0x67, 0xc2, 0xca, 0x75, 0xa3, 0xa5, 0x8a, 0x5f, 0xa7,
  0x3f, 0x2f, 0x2f, 0x73, 0x78, 0x02, 0xe9, 0xbc, 0xfc, 0xc0, 0x5b, 0xe0,
  0x26, 0xe5, 0xdd, 0xa9, 0xb9, 0x14, 0xa7, 0x0d, 0x1a, 0xcb, 0x57, 0x04,
  0x72, 0xc2, 0xee, 0xa9, 0x6d, 0x4f, 0xa4, 0x25, 0x90, 0x61, 0x85, 0x21,
  0x21, 0x31, 0xe6, 0x53, 0x63, 0x22, 0x4c, 0x91, 0xfd, 0x41, 0xe5, 0x80,
  0x75, 0x3b, 0xc5, 0x36, 0x6f, 0x21, 0x3f, 0xaa, 0x87, 0xb4, 0x0e, 0x63,
  0x2b, 0x5c, 0xeb, 0x87, 0x7f, 0xda, 0x12, 0x1e, 0xdf, 0xc0, 0x22, 0xbb,
  0x0c, 0x84, 0xae, 0x45, 0xa1, 0x88, 0x40, 0xed, 0x91, 0x8a, 0x4a, 0xe5,
  0xfd, 0xd2, 0xf2, 0xd7, 0x47, 0x3a, 0x87, 0x85, 0x35, 0x9c, 0x0d, 0xa2,
  0x30, 0xf5, 0x83, 0x6e, 0x97, 0x2f, 0x06, 0x02, 0x6c, 0xe3, 0x43, 0xb7,
  0xd0, 0x78, 0x34, 0xd1, 0xb7, 0x33, 0xdc, 0x37, 0x87, 0xae, 0xab, 0x40,
  0x07, 0xb2, 0xa7, 0xd5, 0x71, 0x80, 0xe3, 0x90, 0x88, 0x41, 0xdd, 0xa0,
  0x39, 0xe9, 0x4d, 0x8f, 0x91, 0xc3, 0x4a, 0xec, 0xb9, 0x03, 0x29, 0xe7,
  0xfb, 0xc1, 0x5a, 0x60, 0x66, 0xb3, 0x54, 0x81, 0xf6, 0xa2, 0x01, 0xfa,
  0x15, 0xa4, 0x29, 0xc8, 0x0a, 0xd7, 0xfa, 0xe1, 0x9f, 0xb6, 0x84, 0xc7,
  0xd7, 0xb0, 0xc8, 0x2e, 0x03, 0xa1, 0x6b, 0x51, 0x28, 0x22, 0x50, 0x7b,
  0xa4, 0xa2, 0x52, 0x79, 0xbf, 0xb4, 0xfc, 0xf5, 0x91, 0xce, 0x61, 0x61,
  0x0d, 0x67, 0x83, 0x28, 0x4c, 0xfd, 0xa0, 0xdb, 0xe5, 0x8b, 0x81, 0x00,
  0xdb, 0xf8, 0xd0, 0x2d, 0x34, 0x1e, 0x4d, 0xf4, 0xed, 0x0c, 0xf7, 0xf5,
  0xa1, 0xeb, 0x2a, 0xd0, 0x81, 0xec, 0x69, 0x75, 0x1c, 0xe0, 0x38, 0x24,
  0x62, 0x50, 0x37, 0x68, 0x4e, 0x7a, 0xd3, 0x63, 0xe4, 0xb0, 0x12, 0x7b,
  0xee, 0x40, 0xca, 0xf9, 0x7e, 0xb0, 0x16, 0x98, 0xd9, 0x2c, 0x55, 0xa0,
  0xff, 0xd8, 0x74, 0x4d, 0x73, 0x46, 0xbd, 0xd0, 0x7c, 0x31, 0xd0, 0x5e,
  0x17, 0x7a, 0x1a, 0xb8, 0x09, 0xbb, 0xef, 0xf6, 0x40, 0x6e, 0xdf, 0x33,
  0x9f, 0x6f, 0x0f, 0x5f, 0xbe, 0xb6, 0x30, 0x02, 0xbf, 0x2e, 0xa8, 0xc3,
  0xbd, 0x68, 0x80, 0xfe, 0xdf, 0x37, 0x5d, 0xd3, 0x9c, 0x51, 0x2f, 0x34,
  0x5f, 0x0c, 0xb4, 0xd7, 0x85, 0x9e, 0x06, 0x6e, 0xc2, 0xee, 0xbb, 0x3d,
  0x3e, 0x11, 0x75, 0x8d, 0x11, 0xe6, 0x24, 0x21, 0x0e, 0xf4, 0xf8, 0x45,
  0xac, 0xef, 0x6b, 0x92, 0x71, 0x73, 0x84, 0x95, 0x3a, 0x4a, 0xe8, 0x74,
  0x90, 0xdb, 0xf7, 0xcc, 0xe7, 0x9b, 0xc3, 0x97, 0xaf, 0x2d, 0x8c, 0xc0,
  0x2f, 0x0b, 0xea, 0xb0, 0x4f, 0x44, 0x5d, 0x63, 0x84, 0x39, 0x49, 0x88,
  0x94, 0x50, 0x89, 0x56, 0x8c, 0xba, 0x56, 0x67, 0x7c, 0x43, 0x7a, 0x7b,
  0x04, 0xf4, 0x7a, 0x46, 0xfc, 0xec, 0x03, 0xf1, 0x58, 0x43, 0x53, 0xe6,
  0xda, 0x2a, 0x8f, 0x90, 0x2f, 0x89, 0x90, 0xe7, 0xe5, 0xa4, 0xbc, 0xb8,
  0x58, 0x23, 0xdd, 0x19, 0x91, 0x91, 0x6a, 0xa0, 0x98, 0x60, 0x36, 0xb0,
  0x8d, 0x78, 0x6f, 0xc2, 0x88, 0x9d, 0x95, 0xb9, 0x6a, 0x1b, 0x52, 0x98,
  0x20, 0xdd, 0xe9, 0x03, 0xc1, 0xe3, 0x17, 0xa6, 0xab, 0xcd, 0xa0, 0x26,
  0x1e, 0x15, 0xe6, 0xb3, 0x3b, 0x46, 0xd3, 0x84, 0x2c, 0xde, 0x7d, 0x9d,
  0xfc, 0xfd, 0x1f, 0x7f, 0xfe, 0x39, 0x02, 0xfa, 0x0f, 0x87, 0xdf, 0x15,
  0x57, 0x16, 0x9a, 0xa7, 0x15, 0x2c, 0xda, 0xe2, 0xb3, 0x73, 0xa2, 0x09,
  0xc7, 0x33, 0x9a, 0x3a, 0x9b, 0x5f, 0x8c, 0xbc, 0x9c, 0xca, 0x50, 0x2c,
  0xc2, 0x84, 0xd2, 0x0f, 0x52, 0x13, 0x37, 0x94, 0x82, 0x73, 0xf9, 0x2e,
  0xc0, 0xb2, 0xa9, 0x73, 0x8e, 0x4b, 0x99, 0xb6, 0x60, 0xba, 0x7c, 0x12,
  0x01, 0x7e, 0x8c, 0xeb, 0x6e, 0xd3, 0x0d, 0xa6, 0xbf, 0x3f, 0x3b, 0xb2,
  0xae, 0x4e, 0x9f, 0x2b, 0x5f, 0x19, 0x4a, 0xbd, 0x1b, 0x66, 0x77, 0xd9,
  0xc4, 0x70, 0x89, 0x5a, 0x81, 0x1f, 0x86, 0x8b, 0x3a, 0x79, 0xb1, 0x30,
  0x03, 0x3d, 0x7e, 0x11, 0xeb, 0xfb, 0x9a, 0x64, 0xdc, 0x1c, 0x61, 0xa5,
  0x8e, 0x12, 0x3a, 0x1d, 0x25, 0x54, 0xa2, 0x15, 0xa3, 0xae, 0xd5, 0x19,
  0xdf, 0x90, 0xde, 0x1e, 0x01, 0xbd, 0x9e, 0x11, 0x3f, 0xfb, 0x40, 0x3c,
  0xd6, 0xd0, 0x94, 0xb9, 0xb6, 0xca, 0x23, 0xe4, 0x4b, 0x22, 0xe4, 0x79,
  0x39, 0x29, 0x2f, 0x2e, 0xd6, 0x48, 0x77, 0x46, 0x64, 0xa4, 0x1a, 0x28,
  0x26, 0x98, 0x0d, 0x6c, 0x23, 0xde, 0x9b, 0x30, 0x62, 0x67, 0x65, 0xae,
  0xda, 0x86, 0x14, 0x26, 0x48, 0x77, 0xfa, 0x40, 0xf0, 0xf8, 0x85, 0xe9,
  0x6a, 0x33, 0xa8, 0x89, 0x47, 0x85, 0xf9, 0xec, 0x8e, 0xd1, 0x34, 0x21,
  0x8b, 0x77, 0x5f, 0x27, 0x7f, 0xff, 0xc7, 0x9f, 0x7f, 0x8a, 0x80, 0xfe,
  0xc3, 0xe1, 0x77, 0xc5, 0x95, 0x85, 0xe6, 0x69, 0x05, 0x8b, 0xb6, 0xf8,
  0xec, 0x9c, 0x68, 0xc2, 0xf1, 0x8c, 0xa6, 0xce, 0xe6, 0x17, 0x23, 0x2f,
  0xa7, 0x32, 0x14, 0x8b, 0x30, 0xa1, 0xf4, 0x83, 0xd4, 0xc4, 0x0d, 0xa5,
  0xe0, 0x5c, 0xbe, 0x0b, 0xb0, 0x6c, 0xea, 0x9c, 0xe3, 0x52, 0xa6, 0x2d,
  0x98, 0x2e, 0x9f, 0x44, 0x80, 0x1f, 0xe3, 0xba, 0xdb, 0x74, 0x83, 0xe9,
  0xef, 0xcf, 0x8e, 0xac, 0xab, 0xd3, 0xe7, 0xca, 0x57, 0x86, 0x52, 0xef,
  0x34, 0x9e, 0xf7, 0x40, 0x76, 0x7c, 0x8b, 0xd7, 0x12, 0x7d, 0xcd, 0x42,
  0x86, 0x5e, 0x96, 0x95, 0xd9, 0xa1, 0x85, 0x54, 0xe3, 0x4a, 0x49, 0x72,
  0xdb, 0x99, 0x91, 0x50, 0x81, 0x49, 0xe0, 0x0e, 0xb8, 0x7e, 0x2c, 0x1a,
  0x37, 0xe1, 0x9f, 0x79, 0xe8, 0x5c, 0xa4, 0xac, 0xaf, 0x8c, 0xf2, 0x68,
  0x66, 0x6f, 0x8c, 0x6c, 0x58, 0xeb, 0xf5, 0x40, 0x48, 0xaa, 0x52, 0xe8,
  0xb6, 0x28, 0x8c, 0x80, 0x2d, 0x43, 0x64, 0x0b, 0xcb, 0x30, 0x1d, 0x7f,
  0x45, 0xb6, 0xb9, 0xa7, 0x0f, 0xb8, 0x26, 0x2d, 0x7d, 0xc3, 0x7d, 0xd5,
  0x05, 0xb0, 0x1b, 0x34, 0x71, 0xd9, 0xab, 0x28, 0xd8, 0xc8, 0xb5, 0xed,
  0xae, 0xef, 0x89, 0xb5, 0xa6, 0x72, 0x70, 0x29, 0x17, 0xe9, 0xcc, 0x16,
  0xd2, 0xfb, 0x68, 0x7d, 0x54, 0x86, 0x98, 0xa2, 0x2e, 0x32, 0x9b, 0x8f,
  0xa4, 0xd9, 0x34, 0xa5, 0x55, 0xb9, 0x31, 0x89, 0xe1, 0x76, 0x71, 0x5d,
  0x6a, 0xa4, 0x08, 0x70, 0x35, 0xac, 0x38, 0xf4, 0xa9, 0xac, 0x5c, 0x3c,
  0x0f, 0xd1, 0x58, 0xef, 0xb9, 0xe0, 0xe5, 0x5c, 0x92, 0xd9, 0x2f, 0xf6,
  0x03, 0x21, 0x14, 0x53, 0x4b, 0x2d, 0x86, 0x21, 0xc1, 0xdb, 0x94, 0x5e,
  0x01, 0x1e, 0xc2, 0x07, 0x7e, 0x28, 0x07, 0xde, 0x19, 0x0e, 0xb1, 0x96,
  0xa7, 0x4f, 0x9e, 0x3c, 0xe1, 0x58, 0xcb, 0xc6, 0x11, 0x7d, 0xf8, 0xec,
  0xf0, 0xd5, 0xc9, 0xdb, 0xb7, 0x87, 0xef, 0x5e, 0x1f, 0xbe, 0xd6, 0x8c,
  0x0f, 0x6f, 0x25, 0x8e, 0x3a, 0xc2, 0x15, 0x21, 0x4b, 0xd0, 0xec, 0xf3,
  0xde, 0x93, 0xdd, 0xe1, 0xfe, 0x93, 0xdd, 0xc4, 0xd0, 0x62, 0x6a, 0xeb,
  0xd4, 0xd2, 0x79, 0x0a, 0xfb, 0xf6, 0x6a, 0x65, 0x54, 0x35, 0xa0, 0x69,
  0x36, 0xc0, 0xdc, 0x20, 0xd7, 0x2b, 0xbc, 0x3d, 0x59, 0x03, 0x3b, 0x3a,
  0x92, 0x19, 0x30, 0xda, 0xb0, 0xc0, 0x68, 0x2e, 0x60, 0x29, 0xba, 0x0f,
  0x11, 0xe8, 0xfe, 0x2e, 0x3e, 0x34, 0x4a, 0xde, 0x18, 0xed, 0xe3, 0xa2,
  0xbc, 0x65, 0x5a, 0x7c, 0x75, 0x65, 0x94, 0xd2, 0x2c, 0x0c, 0x55, 0xb6,
  0xdf, 0xc7, 0xeb, 0x8f, 0xf8, 0xf5, 0x7f, 0x61, 0x8c, 0xfe, 0xc9, 0xf3,
  0xb6, 0x61, 0x69, 0x2e, 0x32, 0x41, 0xb1, 0x6b, 0x49, 0x62, 0x0f, 0x08,
  0xeb, 0x98, 0xcd, 0xf1, 0x6f, 0x5f, 0x9e, 0xe2, 0x69, 0x63, 0x96, 0x9f,
  0xfc, 0xf8, 0x27, 0x57, 0xe6, 0x79, 0xbd, 0xa7, 0xd9, 0x8c, 0x52, 0xc9,
  0x4a, 0xfd, 0xe9, 0x8a, 0x30, 0xe8, 0xed, 0x94, 0x59, 0x6b, 0x10, 0xaa,
  0x90, 0xa1, 0x15, 0x22, 0x03, 0xd5, 0x6c, 0x1d, 0xb7, 0x8e, 0x92, 0x43,
  0xab, 0x6a, 0xb9, 0xe2, 0xb1, 0xba, 0x7e, 0xc3, 0xca, 0x31, 0x8d, 0xdb,
  0x9c, 0x5b, 0x2d, 0xe4, 0xc5, 0x8c, 0xfb, 0xb5, 0xb6, 0x1c, 0xb3, 0x4d,
  0xb5, 0xca, 0x62, 0x5e, 0xd3, 0xb5, 0x18, 0x3b, 0x50, 0x6a, 0xab, 0x7c,
  0x91, 0x56, 0x39, 0x77, 0x65, 0x07, 0x81, 0xdf, 0x70, 0x0b, 0x49, 0x4e,
  0x95, 0xa2, 0xd8, 0x97, 0x45, 0x73, 0x84, 0xb3, 0x26, 0x82, 0x65, 0x9e,
  0x4f, 0xe5, 0x4a, 0x31, 0xac, 0x91, 0xc4, 0x28, 0x79, 0xb3, 0xd6, 0x1d,
  0xd3, 0xd3, 0xb6, 0xfd, 0x6f, 0x15, 0x8a, 0x68, 0x09, 0x2e, 0x54, 0xdc,
  0x37, 0x47, 0xc7, 0x87, 0xdb, 0xc9, 0x9b, 0xac, 0x91, 0x12, 0x27, 0xcd,
  0x30, 0x86, 0xc8, 0xff, 0x37, 0x52, 0xb0, 0x2c, 0x0e, 0xa0, 0xd4, 0x08,
  0x47, 0x73, 0xc1, 0xc4, 0x07, 0x47, 0xca, 0x86, 0xd6, 0x4b, 0xf1, 0xe1,
  0xd0, 0x12, 0x11, 0x8f, 0xd3, 0xdc, 0x32, 0x8d, 0x6f, 0xca, 0xc9, 0x47,
  0xf2, 0x6e, 0x15, 0xe7, 0x61, 0xe4, 0x21, 0x9e, 0x95, 0x7e, 0x0a, 0x01,
  0x26, 0x2d, 0x39, 0xcf, 0x1a, 0x2f, 0xce, 0xeb, 0xe5, 0x1c, 0xdc, 0x20,
  0x8a, 0xf2, 0x32, 0xcf, 0x5c, 0x65, 0x1f, 0x51, 0x3e, 0x37, 0x50, 0x17,
  0x86, 0xd9, 0x5d, 0x36, 0x31, 0x5c, 0xa2, 0x56, 0xe0, 0x87, 0xe1, 0xa2,
  0x4e, 0x5e, 0x2c, 0x0c, 0x8d, 0xe7, 0x3d, 0x90, 0x1d, 0xdf, 0xe0, 0xb5,
  0x44, 0x5f, 0xb3, 0x90, 0xa1, 0x97, 0x65, 0x65, 0x76, 0x68, 0x21, 0xd5,
  0xb8, 0x52, 0x92, 0xdc, 0x76, 0x66, 0x24, 0x54, 0x60, 0x12, 0xb8, 0x03,
  0xae, 0x1f, 0x8b, 0xc6, 0x4d, 0xf8, 0x67, 0x1e, 0x3a, 0x17, 0x29, 0xeb,
  0x2b, 0xa3, 0x3c, 0x9a, 0xd9, 0x1b, 0x23, 0x1b, 0xd6, 0x7a, 0x3d, 0x10,
  0x92, 0xaa, 0x14, 0xba, 0x2d, 0x0a, 0x23, 0x60, 0xcb, 0x10, 0xd9, 0xc2,
  0x32, 0x4c, 0xc7, 0x5f, 0x91, 0x6d, 0xee, 0xe9, 0x03, 0xae, 0x49, 0x4b,
  0xdf, 0x70, 0x5f, 0x75, 0x01, 0xec, 0x06, 0x4d, 0x5c, 0xf6, 0x2a, 0x0a,
  0x36, 0x72, 0x6d, 0xbb, 0xeb, 0x7b, 0x62, 0xad, 0xa9, 0x1c, 0x5c, 0xca,
  0x45, 0x3a, 0xb3, 0x85, 0xf4, 0x3e, 0x5a, 0x1f, 0x95, 0x21, 0xa6, 0xa8,
  0x8b, 0xcc, 0xe6, 0x23, 0x69, 0x36, 0x4d, 0x69, 0x55, 0x6e, 0x4c, 0x62,
  0xb8, 0x5d, 0x5c, 0x97, 0x1a, 0x29, 0x02, 0x5c, 0x0d, 0x2b, 0x0e, 0x7d,
  0x2a, 0x2b, 0x17, 0xcf, 0x43, 0x34, 0xd6, 0x7b, 0x2e, 0x78, 0x39, 0x97,
  0x64, 0xf6, 0x8b, 0xfd, 0x40, 0x08, 0xc5, 0xd4, 0x52, 0x8b, 0x61, 0x48,
  0xf0, 0x36, 0xa5, 0x57, 0x80, 0x87, 0xf0, 0x81, 0x1f, 0xca, 0x81, 0x77,
  0x86, 0x43, 0xac, 0xe5, 0xe9, 0x93, 0x27, 0x4f, 0x38, 0xd6, 0xb2, 0x71,
  0x44, 0x1f, 0x3e, 0x3b, 0x7c, 0x75, 0xf2, 0xf6, 0xed, 0xe1, 0xbb, 0xd7,
  0x87, 0xaf, 0x35, 0xe3, 0xc3, 0x5b, 0x89, 0xa3, 0x8e, 0x70, 0x45, 0xc8,
  0x12, 0x34, 0xfb, 0xbc, 0xf7, 0x64, 0x77, 0xb8, 0xff, 0x64, 0x37, 0x31,
  0xb4, 0x98, 0xda, 0x3a, 0xb5, 0x74, 0x9e, 0xc2, 0xbe, 0xbd, 0x5a, 0x19,
  0x55, 0x0d, 0x68, 0x9a, 0x0d, 0x30, 0x37, 0xc8, 0xf5, 0x0a, 0x6f, 0x4f,
  0xd6, 0xc0, 0x8e, 0x8e, 0x64, 0x06, 0x8c, 0x36, 0x2c, 0x30, 0x9a, 0x0b,
  0x58, 0x8a, 0xee, 0x43, 0x04, 0xba, 0xbf, 0x8b, 0x0f, 0x8d, 0x92, 0x37,
  0x46, 0xfb, 0xb8, 0x28, 0x6f, 0x99, 0x16, 0x5f, 0x5d, 0x19, 0xa5, 0x34,
  0x0b, 0x43, 0x95, 0xed, 0xf7, 0xf1, 0xfa, 0x23, 0x7e, 0xfd, 0x5f, 0x18,
  0xa3, 0x7f, 0xf2, 0xbc, 0x6d, 0x58, 0x9a, 0x8b, 0x4c, 0x50, 0xec, 0x5a,
  0x92, 0xd8, 0x03, 0xc2, 0x3a, 0x66, 0x73, 0xfc, 0x9b, 0x97, 0xa7, 0x78,
  0xda, 0x98, 0xe5, 0x27, 0x3f, 0xfc, 0xc9, 0x95, 0x79, 0x5e, 0xef, 0x69,
  0x36, 0xa3, 0x54, 0xb2, 0x52, 0x7f, 0xba, 0x22, 0x0c, 0x7a, 0x3b, 0x65,
  0xd6, 0x1a, 0x84, 0x2a, 0x64, 0x68, 0x85, 0xc8, 0x40, 0x35, 0x5b, 0xc7,
  0xad, 0xa3, 0xe4, 0xd0, 0xaa, 0x5a, 0xae, 0x78, 0xac, 0xae, 0xdf, 0xb0,
  0x72, 0x4c, 0xe3, 0x36, 0xe7, 0x56, 0x0b, 0x79, 0x31, 0xe3, 0x7e, 0xad,
  0x2d, 0xc7, 0x6c, 0x53, 0xad, 0xb2, 0x98, 0xd7, 0x74, 0x2d, 0xc6, 0x0e,
  0x94, 0xda, 0x2a, 0x5f, 0xa4, 0x55, 0xce, 0x5d, 0xd9, 0x41, 0xe0, 0x37,
  0xdc, 0x42, 0x92, 0x53, 0xa5, 0x28, 0xf6, 0x65, 0xd1, 0x1c, 0xe1, 0xac,
  0x89, 0x60, 0x99, 0xe7, 0x53, 0xb9, 0x52, 0x0c, 0x6b, 0x24, 0x31, 0x4a,
  0xde, 0xac, 0x75, 0xc7, 0xf4, 0xb4, 0x6d, 0xff, 0x5b, 0x85, 0x22, 0x5a,
  0x82, 0x0b, 0x15, 0xf7, 0xcd, 0xd1, 0xf1, 0xe1, 0x76, 0xf2, 0x26, 0x6b,
  0xa4, 0xc4, 0x49, 0x33, 0x8c, 0x21, 0xf2, 0x7f, 0x43, 0x0a, 0x96, 0xc5,
  0x01, 0x94, 0x1a, 0xe1, 0x68, 0x2e, 0x98, 0xf8, 0xe0, 0x48, 0xd9, 0xd0,
  0x7a, 0x29, 0x3e, 0x1c, 0x5a, 0x22, 0xe2, 0x71, 0x9a, 0x5b, 0xa6, 0xf1,
  0x4d, 0x39, 0xf9, 0x48, 0xde, 0xad, 0xe2, 0x3c, 0x8c, 0x3c, 0xc4, 0xb3,
  0xd2, 0x4f, 0x21, 0xc0, 0xa4, 0x25, 0xe7, 0x59, 0xe3, 0xc5, 0x79, 0xbd,
  0x9c, 0x83, 0x1b, 0x44, 0x51, 0x5e, 0xe6, 0x99, 0xab, 0xec, 0x23, 0xca,
  0xe7, 0x06, 0xea, 0x62, 0xf4, 0x10, 0x43, 0xc5, 0x7a, 0xbd, 0x8d, 0xfb,
  0x46, 0x37, 0x0e, 0x69, 0x27, 0xfc, 0xe7, 0xce, 0x97, 0x51, 0xf0, 0x31,
  0xa3, 0x87, 0x18, 0x2a, 0xd6, 0xeb, 0x6d, 0xdc, 0xb7, 0xba, 0x71, 0x48,
  0x3b, 0xe1, 0x3f, 0x77, 0xbe, 0x8a, 0x82, 0x8f, 0x09, 0xa1, 0x1f, 0x52,
  0x2b, 0x59, 0x79, 0x83, 0x28, 0x8a, 0x5b, 0x8b, 0x8b, 0x90, 0x57, 0xb5,
  0xb3, 0x45, 0x09, 0x11, 0xf5, 0x95, 0x7c, 0x77, 0x6a, 0xee, 0xfe, 0x49,
  0xda, 0x17, 0xa9, 0xfe, 0x80, 0x12, 0x70, 0x27, 0x5d, 0xb8, 0x79, 0xad,
  0xcd, 0x32, 0x4e, 0x62, 0x9d, 0xc2, 0x98, 0x2b, 0x4b, 0xa7, 0x5a, 0xd6,
  0xa6, 0x90, 0xad, 0x9f, 0x6a, 0xba, 0xbe, 0xce, 0x17, 0x8f, 0x5d, 0x09,
  0x5a, 0x34, 0xf9, 0x52, 0xb8, 0x8a, 0xac, 0x8e, 0xba, 0xfc, 0xa5, 0xbc,
  0x4d, 0x42, 0x7b, 0xd4, 0x69, 0x94, 0x9d, 0x32, 0xac, 0x43, 0xaf, 0xa0,
  0xd0, 0x71, 0x65, 0x17, 0x41, 0xff, 0x57, 0x0c, 0x51, 0x19, 0xd1, 0x96,
  0xe4, 0xeb, 0x3e, 0x0b, 0xea, 0xea, 0xec, 0xfe, 0x67, 0xda, 0x96, 0x68,
  0xa8, 0x2e, 0x9a, 0xbd, 0x23, 0x9d, 0x12, 0x7d, 0x36, 0x50, 0xf5, 0x3e,
  0xfd, 0x98, 0x53, 0x21, 0xe2, 0x8a, 0xd4, 0xb9, 0xb4, 0xd0, 0x7a, 0x2b,
  0x9e, 0xa6, 0xc3, 0x56, 0x9f, 0x21, 0xe2, 0xf1, 0xa7, 0x3e, 0xed, 0x93,
  0x21, 0xcb, 0xe0, 0x34, 0x00, 0xec, 0xa9, 0xce, 0x67, 0x4e, 0x15, 0x0d,
  0xf6, 0xb6, 0xa8, 0xa2, 0x86, 0x7a, 0x48, 0xd2, 0x15, 0x23, 0x50, 0xcc,
  0x19, 0xf5, 0x21, 0x26, 0x97, 0x9f, 0xf6, 0xb7, 0xdf, 0xac, 0x32, 0x86,
  0x83, 0x1f, 0x19, 0x4b, 0x74, 0x81, 0x92, 0x00, 0x4a, 0xb3, 0x95, 0x25,
  0xcb, 0xf6, 0x18, 0xde, 0x76, 0x99, 0x5f, 0xc7, 0xb2, 0x2c, 0x90, 0x1f,
  0x21, 0x13, 0xa3, 0x2c, 0x0d, 0xd7, 0x45, 0x55, 0xd3, 0x8e, 0x6d, 0x48,
  0x9b, 0xfd, 0xd2, 0xc0, 0x01, 0x94, 0x9d, 0x0d, 0x6e, 0xf0, 0x1c, 0x1a,
  0x2b, 0x00, 0xbd, 0x0a, 0xee, 0x5b, 0xfb, 0xad, 0xd1, 0x7c, 0x0e, 0x36,
  0x2c, 0x88, 0x39, 0xf9, 0x55, 0x19, 0x23, 0xdc, 0xa7, 0x1c, 0xe9, 0xa4,
  0x3c, 0x8c, 0xb6, 0xe3, 0x12, 0xcd, 0xbd, 0x51, 0xc6, 0x65, 0x0b, 0x6e,
  0xc2, 0xb4, 0x66, 0x5b, 0x00, 0xc3, 0x15, 0xa3, 0x21, 0x48, 0x3b, 0xa6,
  0x21, 0xf4, 0x43, 0x6a, 0x25, 0x2b, 0x6f, 0x10, 0x45, 0x71, 0x6b, 0x71,
  0x11, 0xf2, 0xaa, 0x76, 0xb6, 0x28, 0x21, 0xa2, 0xbe, 0x92, 0xef, 0x4e,
  0xcd, 0xdd, 0x3f, 0x49, 0xfb, 0x22, 0xd5, 0x1f, 0x50, 0x02, 0xee, 0xa4,
  0x0b, 0x37, 0xaf, 0xb5, 0x59, 0xc6, 0x49, 0xac, 0x53, 0x18, 0x73, 0x65,
  0xe9, 0x54, 0xcb, 0xda, 0x14, 0xb2, 0xf5, 0x53, 0x4d, 0xd7, 0xd7, 0xf9,
  0xe2, 0xb1, 0x2b, 0x41, 0x8b, 0x26, 0x5f, 0x0a, 0x57, 0x91, 0xd5, 0x51,
  0x97, 0xbf, 0x94, 0xb7, 0x49, 0x68, 0x8f, 0x3a, 0x8d, 0xb2, 0x53, 0x86,
  0x75, 0xe8, 0x15, 0x14, 0x3a, 0xae, 0xec, 0x22, 0xe8, 0xff, 0x8a, 0x21,
  0x2a, 0x23, 0xda, 0x92, 0x7c, 0xdd, 0x67, 0x41, 0x5d, 0x9d, 0xdd, 0xff,
  0x4c, 0xdb, 0x12, 0x0d, 0xd5, 0x45, 0xb3, 0x77, 0xa4, 0x53, 0xa2, 0xcf,
  0x06, 0xaa, 0xde, 0xa7, 0x1f, 0x73, 0x2a, 0x44, 0x5c, 0x91, 0x3a, 0x97,
  0x16, 0x5a, 0x6f, 0xc5, 0xd3, 0x74, 0xd8, 0xea, 0x33, 0x44, 0x3c, 0xfe,
  0xd4, 0xa7, 0x7d, 0x32, 0x64, 0x19, 0x9c, 0x06, 0x80, 0x3d, 0xd5, 0xf9,
  0xcc, 0xa9, 0xa2, 0xc1, 0xde, 0x16, 0x55, 0xd4, 0x50, 0x0f, 0x49, 0xba,
  0x62, 0x04, 0x8a, 0x39, 0xa3, 0x3e, 0xc4, 0xe4, 0xf2, 0xd3, 0xfe, 0xf6,
  0x9b, 0x55, 0xc6, 0x70, 0xf0, 0x23, 0x63, 0x89, 0x2e, 0x50, 0x12, 0x40,
  0x69, 0xb6, 0xb2, 0x64, 0xd9, 0x1e, 0xc3, 0xdb, 0x2e, 0xf3, 0xeb, 0x58,
  0x96, 0x05, 0xf2, 0x23, 0x64, 0x62, 0x94, 0xa5, 0xe1, 0xba, 0xa8, 0x6a,
  0xda, 0xb1, 0x0d, 0x69, 0xb3, 0x5f, 0x1a, 0x38, 0x80, 0xb2, 0xb3, 0xc1,
  0x0d, 0x9e, 0x43, 0x63, 0x05, 0xa0, 0x57, 0xc1, 0x7d, 0x6b, 0xbf, 0x31,
  0x9a, 0xcf, 0xc1, 0x86, 0x05, 0x31, 0x27, 0xbf, 0x2a, 0x63, 0x84, 0xfb,
  0x94, 0x23, 0x9d, 0x94, 0x87, 0xd1, 0x76, 0x5c, 0xa2, 0xb9, 0x37, 0xca,
  0xb8, 0x6c, 0xc1, 0x4d, 0x98, 0xd6, 0x6c, 0x0b, 0x60, 0xb8, 0x62, 0x34,
  0x04, 0x69, 0xc7, 0x94, 0x7e, 0x18, 0xbe, 0xa2, 0x8f, 0x0f, 0xbf, 0xa1,
  0xe1, 0xfe, 0xb0, 0x61, 0x1d, 0xbe, 0xdd, 0x5f, 0x1d, 0x84, 0xfd, 0x73,
  0x9d, 0xdf, 0x90, 0x0d, 0x8f, 0x95, 0x56, 0x65, 0x50, 0x22, 0x89, 0x4c,
  0x90, 0x5b, 0x53, 0x99, 0x2b, 0xb2, 0xa3, 0x07, 0x2e, 0x9d, 0x6f, 0x8a,
  0xf4, 0xe3, 0xf0, 0x15, 0x7d, 0x7c, 0xf8, 0x2d, 0x0d, 0xf7, 0xc5, 0x86,
  0x75, 0xf8, 0x76, 0x7f, 0x75, 0x10, 0xf6, 0xcf, 0x75, 0x7e, 0x43, 0x36,
  0x3c, 0x56, 0x5a, 0x95, 0x41, 0x89, 0x24, 0x32, 0x41, 0x6e, 0x4d, 0x65,
  0xae, 0xc8, 0x8e, 0x1e, 0xb8, 0x74, 0xbe, 0x29, 0x9a, 0xbe, 0xc6, 0xad,
  0x46, 0x8a, 0x2c, 0x09, 0x4c, 0x67, 0x36, 0x2c, 0x2f, 0x86, 0x94, 0x21,
  0x6d, 0x98, 0xff, 0x47, 0x24, 0x23, 0x79, 0xb7, 0x8e, 0x00, 0x42, 0x08,
  0xa6, 0xaf, 0x71, 0xab, 0x91, 0x22, 0x4b, 0x02, 0xd3, 0x99, 0x0d, 0xcb,
  0x8b, 0x21, 0x65, 0x48, 0x1b, 0xe6, 0xff, 0x11, 0xc9, 0x48, 0xde, 0xad,
  0x23, 0x80, 0x10, 0x82, 0xbb, 0x9e, 0xcd, 0x62, 0xaa, 0x39, 0x17, 0x32,
  0x42, 0xeb, 0x10, 0xc2, 0xd7, 0x42, 0x0b, 0x3e, 0xc8, 0x03, 0xf1, 0xca,
  0xd3, 0xeb, 0xb6, 0xf9, 0x13, 0x90, 0xb9, 0xa4, 0x20, 0x22, 0xf0, 0xa7,
  0xee, 0x7a, 0x36, 0x8b, 0xa9, 0xe6, 0x5c, 0xc8, 0x08, 0xad, 0x43, 0x08,
  0x5f, 0x0b, 0x2d, 0xf8, 0x20, 0x0f, 0xc4, 0x2b, 0x4f, 0xaf, 0xdb, 0xe6,
  0x4f, 0x40, 0xe6, 0x92, 0x82, 0x88, 0xc0, 0x9f, 0x46, 0xe5, 0x11, 0x03,
  0xd6, 0xde, 0x69, 0xd5, 0x64, 0xc3, 0x2d, 0xd8, 0x95, 0x4b, 0xfe, 0xe7,
  0xd5, 0x92, 0x54, 0x56, 0x40, 0x68, 0x06, 0xde, 0x17, 0x2d, 0x12, 0xa1,
  0xd6, 0x3e, 0x46, 0xf8, 0x3f, 0x19, 0xed, 0x0e, 0x82, 0x40, 0x7d, 0x43,
  0xc6, 0x7e, 0xe1, 0xb2, 0x84, 0xcc, 0xc3, 0xc4, 0x23, 0x87, 0xb1, 0xea,
  0xda, 0xba, 0xb9, 0x03, 0xbf, 0xb6, 0xc5, 0xb4, 0x94, 0x5a, 0xec, 0xea,
  0x1e, 0x5c, 0x4e, 0x0f, 0x6d, 0xa1, 0xb0, 0x4d, 0xae, 0xa2, 0x8d, 0xa1,
  0x8e, 0x4a, 0xc6, 0xd6, 0x57, 0xc3, 0x6e, 0xf7, 0x48, 0xdb, 0x04, 0xcc,
  0xaf, 0xde, 0xf0, 0xda, 0x79, 0xf5, 0x7a, 0x9a, 0x08, 0xbc, 0xfe, 0xa5,
  0x51, 0x79, 0xc4, 0x80, 0xb5, 0x77, 0x5a, 0x35, 0xd9, 0x70, 0x0b, 0x76,
  0xe5, 0x92, 0xff, 0x79, 0xb5, 0x24, 0x95, 0x15, 0x10, 0x9a, 0x81, 0xf7,
  0x45, 0x8b, 0x44, 0xa8, 0xb5, 0x8f, 0x11, 0xfe, 0x4f, 0x46, 0xbb, 0x83,
  0x20, 0x50, 0xdf, 0x90, 0xb1, 0x5f, 0xb8, 0x2c, 0x21, 0xf3, 0x30, 0xf1,
  0xc8, 0x61, 0xac, 0xba, 0xb6, 0x6e, 0xee, 0xc0, 0xaf, 0x6d, 0x31, 0x2d,
  0xa5, 0x16, 0xbb, 0xba, 0x07, 0x97, 0xd3, 0x43, 0x5b, 0x28, 0x6c, 0x93,
  0xab, 0x68, 0x63, 0xa8, 0xa3, 0x92, 0xb1, 0xf5, 0xe5, 0xb0, 0xdb, 0x3d,
  0xd2, 0x36, 0x01, 0xf3, 0xab, 0x37, 0xbc, 0x76, 0x5e, 0xbd, 0x9e, 0x26,
  0x02, 0xaf, 0x7f, 0xa9, 0xfd, 0x66, 0x86, 0x66, 0x53, 0xa5, 0xd1, 0xe9,
  0x30, 0xc3, 0x0f, 0x19, 0xb0, 0x43, 0xa1, 0x3c, 0xeb, 0xfe, 0x3d, 0x63,
  0x5c, 0xdb, 0x67, 0xd8, 0x31, 0x8b, 0xe6, 0xaf, 0x8d, 0x6b, 0x9c, 0x7c,
  0xf6, 0x9b, 0x19, 0x9a, 0x4d, 0x95, 0x46, 0xa7, 0xc3, 0x0c, 0x3f, 0x64,
  0xc0, 0x0e, 0x85, 0xf2, 0xac, 0xfb, 0xf7, 0x8c, 0x71, 0x6d, 0x9f, 0x61,
  0xc7, 0x2c, 0x9a, 0xbf, 0x36, 0xae, 0x71, 0xf2, 0x81, 0xc8, 0xd6, 0xbb,
  0x4b, 0xdd, 0x3d, 0x03, 0x57, 0x01, 0x27, 0x28, 0x34, 0xe7, 0x9b, 0xfa,
  0x94, 0xdf, 0xde, 0xf5, 0xa6, 0x16, 0xf7, 0xe4, 0xfc, 0xd2, 0xb5, 0x79,
  0x03, 0xc5, 0x7e, 0xf8, 0xce, 0x1c, 0xc3, 0x41, 0xf2, 0x9f, 0x65, 0xc6,
  0x20, 0xb2, 0xf5, 0xee, 0x52, 0x77, 0xcf, 0xc0, 0x55, 0xc0, 0x09, 0x0a,
  0xcd, 0xf9, 0xa6, 0x3e, 0xe5, 0xb7, 0x77, 0xbd, 0xa9, 0xc5, 0x3d, 0x39,
  0xbf, 0x74, 0x6d, 0xde, 0x40, 0xb1, 0x1f, 0xbe, 0x33, 0xc7, 0x70, 0x90,
  0xfc, 0x47, 0x99, 0x71, 0xcd, 0xea, 0x3d, 0x25, 0xab, 0xdf, 0xbf, 0x3c,
  0x7b, 0x77, 0xf4, 0xee, 0xeb, 0x03, 0xcb, 0xe3, 0xc0, 0xef, 0xba, 0x5d,
  0x35, 0xab, 0xf7, 0x94, 0xac, 0xfe, 0xf0, 0xf2, 0xec, 0xdd, 0xd1, 0xbb,
  0x6f, 0x0e, 0x2c, 0x8f, 0x03, 0xbf, 0xeb, 0x76, 0x91, 0xb0, 0xbc, 0x9b,
  0x7e, 0xcb, 0x6d, 0xca, 0xe1, 0xfd, 0xe9, 0x83, 0xb5, 0x46, 0x2c, 0x93,
  0xd8, 0x33, 0x3b, 0x2f, 0xab, 0x8c, 0xe3, 0x22, 0x6c, 0x8b, 0x6a, 0xe5,
  0x84, 0x94, 0x6b, 0x92, 0xa8, 0x6c, 0xca, 0xf9, 0x2c, 0x06, 0xd8, 0x30,
  0x3c, 0xc6, 0x99, 0xcc, 0xcb, 0x56, 0x5f, 0x26, 0x10, 0xe5, 0x9c, 0x8e,
  0xbf, 0xf4, 0x29, 0xc0, 0x6b, 0xaf, 0x04, 0x5b, 0xaa, 0x8c, 0x74, 0xd7,
  0x23, 0x33, 0x8f, 0xd3, 0x70, 0x82, 0x7e, 0x34, 0xdc, 0x55, 0xa2, 0xa6,
  0x23, 0xab, 0x73, 0x72, 0x36, 0xd8, 0x2d, 0xd1, 0x1c, 0xaf, 0x88, 0x1f,
  0x84, 0xf7, 0x6a, 0x9a, 0xae, 0xf8, 0xbe, 0x30, 0x3a, 0x99, 0xfc, 0xd4,
  0xd5, 0x65, 0xd8, 0x1d, 0x78, 0x70, 0x9a, 0xb3, 0xcb, 0x73, 0x66, 0x7d,
  0x9e, 0x0d, 0x44, 0x8f, 0x65, 0x99, 0x3f, 0x21, 0x4a, 0xa2, 0x38, 0x24,
  0xf3, 0xcc, 0x55, 0x25, 0x59, 0x5d, 0xe7, 0x8a, 0x75, 0x9d, 0xf9, 0x32,
  0x00, 0xdb, 0xa3, 0x3e, 0x74, 0xf8, 0x8d, 0x3a, 0x75, 0x10, 0xbc, 0x22,
  0x24, 0x2c, 0xef, 0xa6, 0xdf, 0x72, 0x9b, 0x72, 0x78, 0x7f, 0xfa, 0x60,
  0xad, 0x11, 0xcb, 0x24, 0xf6, 0xcc, 0xce, 0xcb, 0x2a, 0xe3, 0xb8, 0x08,
  0xdb, 0xa2, 0x5a, 0x39, 0x21, 0xe5, 0x9a, 0x24, 0x2a, 0x9b, 0x72, 0x3e,
  0x8b, 0x01, 0x36, 0x0c, 0x8f, 0x71, 0x26, 0xf3, 0xb2, 0xd5, 0x97, 0x09,
  0x44, 0x39, 0xa7, 0xe3, 0x2f, 0x7d, 0x0a, 0xf0, 0xda, 0x2b, 0xc1, 0x96,
  0x2a, 0x23, 0xdd, 0xf5, 0xc8, 0xcc, 0xe3, 0x34, 0x9c, 0xa0, 0x1f, 0x0d,
  0x77, 0x95, 0xa8, 0xe9, 0xc8, 0xea, 0x9c, 0x9c, 0x0d, 0x76, 0x4b, 0x34,
  0xc7, 0x2b, 0xe2, 0x07, 0xe1, 0xbd, 0x9a, 0xa6, 0x2b, 0xbe, 0x2f, 0x8c,
  0x4e, 0x26, 0x3f, 0x75, 0x75, 0x19, 0x76, 0x07, 0x1e, 0x9c, 0xe6, 0xec,
  0xf2, 0x9c, 0x59, 0x9f, 0x67, 0x03, 0xd1, 0x63, 0x59, 0xe6, 0x4f, 0x88,
  0x92, 0x28, 0x0e, 0xc9, 0x3c, 0x73, 0x55, 0x49, 0x56, 0xd7, 0xb9, 0x62,
  0x5d, 0x67, 0xbe, 0x0c, 0xc0, 0xf6, 0xa8, 0x0f, 0x1d, 0x7e, 0xa3, 0x4e,
  0x1d, 0x04, 0xaf, 0x48, 0x02, 0xab, 0x59, 0xd2, 0x02, 0xb7, 0xb3, 0x1d,
  0x13, 0x99, 0xa9, 0x87, 0xf2, 0x14, 0x78, 0x4f, 0x19, 0xe3, 0x8d, 0xf9,
  0x09, 0xac, 0x66, 0x49, 0x0b, 0xdc, 0xce, 0x76, 0x4c, 0x64, 0xa6, 0x1e,
  0xca, 0x53, 0xe0, 0x3d, 0x65, 0x8c, 0x37, 0xe6, 0x57, 0xc0, 0x98, 0xaf,
  0x9b, 0x3d, 0x5e, 0xae, 0x26, 0x8b, 0xd9, 0x93, 0xe4, 0x85, 0xf9, 0x4f,
  0xa0, 0x64, 0x51, 0xce, 0xe8, 0xf8, 0x95, 0x51, 0xb4, 0x90, 0xe0, 0x02,
  0x79, 0xc1, 0x90, 0x37, 0x5e, 0xdf, 0x86, 0x47, 0xfb, 0x66, 0xa6, 0xb7,
  0xa9, 0x42, 0x5b, 0x1a, 0x8d, 0xf0, 0x32, 0x6f, 0x38, 0x4f, 0xaf, 0x07,
  0x15, 0x30, 0xe6, 0xeb, 0x66, 0x8f, 0x97, 0xab, 0xc9, 0x62, 0xf6, 0x24,
  0x79, 0x61, 0xfe, 0x13, 0x28, 0x59, 0x94, 0x33, 0x3a, 0x7e, 0x65, 0x14,
  0x2d, 0x24, 0xb8, 0x40, 0x5e, 0x30, 0xe4, 0x8d, 0xd7, 0xb7, 0xe1, 0xd1,
  0xbe, 0x99, 0xe9, 0x6d, 0xaa, 0xd0, 0x96, 0x46, 0x23, 0xbc, 0xcc, 0x1b,
  0xce, 0xd3, 0xeb, 0xc1, 0x0d, 0xf2, 0x52, 0x1b, 0xe8, 0xcc, 0xf7, 0xf6,
  0x3f, 0x4f, 0x50, 0x7c, 0xf0, 0xf6, 0xf5, 0x93, 0x64, 0x7a, 0x95, 0x4d,
  0x37, 0xc8, 0x4b, 0x6d, 0xa0, 0x33, 0xdf, 0xdb, 0xff, 0x3c, 0x41, 0xf1,
  0xc1, 0xdb, 0xd7, 0x4f, 0x92, 0xe9, 0x55, 0x36, 0xfd, 0x58, 0xaf, 0x16,
  0xca, 0x8e, 0xb1, 0xa7, 0x0d, 0xa3, 0x45, 0x07, 0x88, 0x0f, 0x66, 0xe2,
  0xf3, 0x7c, 0x8a, 0xd2, 0xbf, 0x41, 0x2b, 0x3a, 0x75, 0xa1, 0xd1, 0x29,
  0xcf, 0x0e, 0xb5, 0x62, 0x83, 0xd2, 0x05, 0x38, 0xa7, 0x26, 0x12, 0xbc,
  0x30, 0x7b, 0x60, 0x3e, 0x5e, 0x73, 0x93, 0xe7, 0xb5, 0x2e, 0xdb, 0x67,
  0x6d, 0xaf, 0x37, 0x2e, 0xf6, 0xee, 0xe8, 0x79, 0x4f, 0x47, 0x76, 0xca,
  0x4c, 0xb1, 0x20, 0xf5, 0x30, 0xf8, 0xb5, 0xda, 0x8e, 0xec, 0x01, 0x68,
  0xf9, 0x98, 0x24, 0x00, 0xa1, 0x34, 0x8c, 0x17, 0x7c, 0x1c, 0x4f, 0xee,
  0xe0, 0x09, 0xce, 0x33, 0xe0, 0x2c, 0xb6, 0x8c, 0x30, 0x29, 0x98, 0xb4,
  0x28, 0x4d, 0xc8, 0x46, 0x01, 0x2d, 0xc2, 0x19, 0x85, 0x60, 0x43, 0xa5,
  0xcd, 0xd6, 0x7f, 0xab, 0xcb, 0xc6, 0xb1, 0x18, 0x29, 0xa1, 0xf5, 0xd0,
  0x1c, 0xb4, 0x96, 0x90, 0xf0, 0xda, 0x60, 0x53, 0x04, 0x44, 0x66, 0xbf,
  0xcb, 0x71, 0x69, 0x77, 0x1c, 0x35, 0xa3, 0x11, 0x92, 0xf3, 0x1c, 0xcd,
  0x53, 0xd9, 0xa2, 0x2e, 0x6f, 0x8a, 0xcb, 0x0a, 0xfe, 0x11, 0x2a, 0x0a,
  0x4b, 0x63, 0xb1, 0x8c, 0x98, 0x59, 0x9c, 0x5c, 0xac, 0xc8, 0x12, 0xa2,
  0xe1, 0x75, 0xd7, 0x04, 0x3d, 0xd3, 0xe8, 0xe8, 0x52, 0xd1, 0x48, 0xc2,
  0xa0, 0x03, 0x8f, 0x4a, 0x09, 0x61, 0x41, 0xa3, 0x2e, 0x70, 0x2d, 0x43,
  0x3f, 0xd6, 0xab, 0x85, 0xb2, 0x63, 0xec, 0x69, 0xc3, 0x68, 0xd1, 0x01,
  0xe2, 0x83, 0x99, 0xf8, 0x3c, 0x9f, 0xa2, 0xf4, 0x6f, 0xd0, 0x8a, 0x4e,
  0x5d, 0x68, 0x74, 0xca, 0xb3, 0x43, 0xad, 0xd8, 0xa0, 0x74, 0x01, 0xce,
  0xa9, 0x89, 0x04, 0x2f, 0xcc, 0x1e, 0x98, 0x8f, 0xd7, 0xdc, 0xe4, 0x79,
  0xad, 0xcb, 0xf6, 0x59, 0xdb, 0xeb, 0x8d, 0x8b, 0xbd, 0x3b, 0x7a, 0xde,
  0xd3, 0x91, 0x9d, 0x32, 0x53, 0x2c, 0x48, 0x3d, 0x0c, 0x7e, 0xad, 0xb6,
  0x23, 0x7b, 0x00, 0x5a, 0x3e, 0x26, 0x09, 0x40, 0x28, 0x0d, 0xe3, 0x05,
  0x1f, 0xc7, 0x93, 0x3b, 0x78, 0x82, 0xf3, 0x0c, 0x38, 0x8b, 0x2d, 0x23,
  0x4c, 0x0a, 0x26, 0x2d, 0x4a, 0x13, 0xb2, 0x51, 0x40, 0x8b, 0x70, 0x46,
  0x21, 0xd8, 0x50, 0x69, 0xb3, 0xf5, 0xdf, 0xea, 0xb2, 0x71, 0x2c, 0x46,
  0x4a, 0x68, 0x3d, 0x34, 0x07, 0xad, 0x25, 0x24, 0xbc, 0x36, 0xd8, 0x14,
  0x01, 0x91, 0xd9, 0xef, 0x72, 0x5c, 0xda, 0x1d, 0x47, 0xcd, 0x68, 0x84,
  0xe4, 0x3c, 0x47, 0xf3, 0x54, 0xb6, 0xa8, 0xcb, 0x9b, 0xe2, 0xb2, 0x82,
  0x7f, 0x84, 0x8a, 0xc2, 0xd2, 0x58, 0x2c, 0x23, 0x66, 0x16, 0x27, 0x17,
  0x2b, 0xb2, 0x84, 0x68, 0x78, 0xdd, 0x35, 0x41, 0xcf, 0x34, 0x3a, 0xba,
  0x54, 0x34, 0x92, 0x30, 0xe8, 0xc0, 0xa3, 0x52, 0x42, 0x58, 0xd0, 0xa8,
  0x0b, 0x5c, 0xcb, 0x90, 0x03, 0x6d, 0xed, 0xde, 0x68, 0x57, 0x73, 0xad,
  0x0e, 0xb4, 0xb5, 0x7b, 0xa3, 0x5d, 0xcd, 0xb5, 0x8a, 0xd8, 0xf2, 0xde,
  0x59, 0xef, 0x0e, 0xe4, 0xbc, 0xcd, 0x1b, 0x7d, 0x2d, 0x50, 0x3c, 0xf0,
  0x35, 0x49, 0x92, 0x69, 0x1d, 0x34, 0xbe, 0xe5, 0x29, 0xdc, 0x9c, 0x2d,
  0x61, 0x6e, 0x4d, 0x4f, 0x1a, 0x9f, 0xd9, 0x31, 0x71, 0x84, 0x65, 0xb3,
  0xd6, 0x40, 0x6b, 0x99, 0x97, 0xdf, 0x78, 0x8d, 0xa7, 0xbb, 0x27, 0xf1,
  0x1c, 0xfc, 0x6b, 0xbf, 0x4b, 0xbd, 0xe6, 0xd7, 0x0f, 0xa1, 0xde, 0xc8,
  0x5a, 0xf6, 0xd6, 0x4e, 0xa3, 0x55, 0xf2, 0xb1, 0x3b, 0x70, 0x9f, 0xdb,
  0xd5, 0x46, 0x91, 0x32, 0x1f, 0xbd, 0x5f, 0x61, 0x78, 0x3b, 0x84, 0xab,
  0xa7, 0x37, 0x50, 0x37, 0x53, 0x56, 0x43, 0xe8, 0xfe, 0xf3, 0x6c, 0x16,
  0xe8, 0x62, 0xb1, 0xc3, 0x20, 0x9e, 0x9d, 0xd7, 0x35, 0x94, 0x64, 0xe8,
  0xc7, 0x44, 0xe8, 0x88, 0x3f, 0xd1, 0x92, 0xac, 0x73, 0x20, 0x96, 0xff,
  0x4f, 0x44, 0xb2, 0x6f, 0x55, 0x7d, 0xa1, 0x99, 0xbd, 0xe4, 0xfd, 0x92,
  0x28, 0x19, 0x91, 0xf2, 0xc6, 0x6b, 0xb5, 0x90, 0xd0, 0xe4, 0x18, 0xa9,
  0x25, 0x36, 0x3b, 0xf6, 0x94, 0xf9, 0x0d, 0x95, 0xb4, 0xf0, 0xb3, 0xd6,
  0x4f, 0xd5, 0xa8, 0xa8, 0x75, 0x3d, 0xde, 0x18, 0x66, 0x5f, 0xe7, 0x18,
  0xc3, 0x07, 0xe6, 0x0b, 0x6a, 0x34, 0x56, 0x19, 0xa0, 0x95, 0x94, 0x0f,
  0xdc, 0x73, 0x8e, 0x05, 0xd9, 0x76, 0x7b, 0x33, 0xd7, 0xef, 0x2d, 0xe2,
  0xa8, 0xc9, 0x5d, 0x17, 0xee, 0x0e, 0x42, 0x60, 0x10, 0x49, 0x8a, 0x1e,
  0xc7, 0x83, 0xfb, 0x17, 0x04, 0x40, 0x60, 0x39, 0x3b, 0xdb, 0xb4, 0x10,
  0x96, 0x57, 0x33, 0x7a, 0x18, 0x71, 0xef, 0x0e, 0xa2, 0xb3, 0x03, 0xb9,
  0xf9, 0xc4, 0xdf, 0x42, 0xd5, 0x7b, 0x1e, 0x21, 0xae, 0x5f, 0x75, 0x17,
  0xf6, 0xd7, 0xc5, 0x53, 0x8d, 0xb5, 0x96, 0xce, 0x97, 0xc5, 0x48, 0xbf,
  0xf0, 0xa0, 0xfd, 0xe9, 0x1e, 0xb3, 0xed, 0xf6, 0xf0, 0xeb, 0xf6, 0xa7,
  0xbb, 0x37, 0x3e, 0x2f, 0xf3, 0xf7, 0xa7, 0x7b, 0x96, 0x6b, 0x7b, 0x47,
  0x70, 0xdd, 0xba, 0x76, 0x4e, 0x1f, 0x72, 0x6d, 0x5e, 0xac, 0x2c, 0x25,
  0x91, 0x1b, 0xa9, 0xb8, 0x73, 0x83, 0xe4, 0x88, 0x31, 0x95, 0x29, 0x31,
  0x42, 0x5e, 0x3f, 0xe6, 0xd2, 0x3e, 0x71, 0xb9, 0xa9, 0xbb, 0x31, 0x52,
  0xfc, 0x9b, 0x4f, 0x81, 0xec, 0xe4, 0x9c, 0x7d, 0x50, 0xd6, 0x6d, 0xeb,
  0x8c, 0x15, 0x79, 0x33, 0x93, 0x97, 0x4b, 0x54, 0xe7, 0x19, 0x1e, 0x75,
  0x6b, 0x3b, 0xa1, 0xc6, 0x7a, 0x89, 0x1b, 0x0d, 0x8e, 0x5a, 0x9d, 0x18,
  0xd9, 0x25, 0x49, 0xbf, 0xdd, 0xe9, 0xd0, 0xe8, 0x8c, 0xbc, 0x36, 0x47,
  0x9a, 0x7b, 0xc5, 0x3a, 0xeb, 0x7e, 0x72, 0x99, 0x5f, 0x06, 0x88, 0xee,
  0x93, 0xbb, 0x26, 0x52, 0x81, 0x82, 0x55, 0x63, 0x17, 0xb6, 0x6a, 0x49,
  0x70, 0x7b, 0xfc, 0x74, 0xb4, 0xbb, 0x3d, 0x40, 0x4b, 0xe8, 0x25, 0xed,
  0x00, 0x4a, 0x04, 0xac, 0x5e, 0x87, 0x0a, 0x99, 0xfc, 0x12, 0xc2, 0x8e,
  0x1c, 0x0b, 0x91, 0x4c, 0x10, 0x38, 0xd6, 0x24, 0xc3, 0x4a, 0xd3, 0x97,
  0x04, 0xe9, 0xb2, 0x5d, 0x1d, 0x97, 0x0f, 0xa8, 0xcb, 0x14, 0xb9, 0xc5,
  0x22, 0xb6, 0xbc, 0x77, 0xd6, 0xbb, 0x03, 0x39, 0x6f, 0xf3, 0x46, 0x5f,
  0x0b, 0x14, 0x0f, 0x7c, 0x4d, 0x92, 0x64, 0x5a, 0x07, 0x8d, 0x6f, 0x79,
  0x0a, 0x37, 0x67, 0x4b, 0x98, 0x5b, 0xd3, 0x93, 0xc6, 0x67, 0x76, 0x4c,
  0x1c, 0x61, 0xd9, 0xac, 0x35, 0xd0, 0x5a, 0xe6, 0xe5, 0x37, 0x5e, 0xe3,
  0xe9, 0xee, 0x49, 0x3c, 0x07, 0xff, 0xda, 0xef, 0x52, 0xaf, 0xf9, 0xf5,
  0x43, 0xa8, 0x37, 0xb2, 0x96, 0xbd, 0xb5, 0xd3, 0x68, 0x95, 0x7c, 0xec,
  0x0e, 0xdc, 0xe7, 0x76, 0xb5, 0x51, 0xa4, 0xcc, 0x47, 0xef, 0x57, 0x18,
  0xde, 0x0e, 0xe1, 0xea, 0xe9, 0x0d, 0xd4, 0xcd, 0x94, 0xd5, 0x10, 0xba,
  0xff, 0x3c, 0x9b, 0x05, 0xba, 0x58, 0xec, 0x30, 0x88, 0x67, 0xe7, 0x75,
  0x0d, 0x25, 0x19, 0xfa, 0x31, 0x11, 0x3a, 0xe2, 0x4f, 0xb4, 0x24, 0xeb,
  0x1c, 0x88, 0xe5, 0xff, 0x13, 0x91, 0xec, 0x5b, 0x55, 0x5f, 0x68, 0x66,
  0x2f, 0x79, 0xbf, 0x24, 0x4a, 0x46, 0xa4, 0xbc, 0xf1, 0x5a, 0x2d, 0x24,
  0x34, 0x39, 0x46, 0x6a, 0x89, 0xcd, 0x8e, 0x3d, 0x65, 0x7e, 0x43, 0x25,
  0x2d, 0xfc, 0xac, 0xf5, 0x53, 0x35, 0x2a, 0x6a, 0x5d, 0x8f, 0x37, 0x86,
  0xd9, 0xd7, 0x39, 0xc6, 0xf0, 0x81, 0xf9, 0x82, 0x1a, 0x8d, 0x55, 0x06,
  0x68, 0x25, 0xe5, 0x03, 0xf7, 0x9c, 0x63, 0x41, 0xb6, 0xdd, 0xde, 0xcc,
  0xf5, 0x7b, 0x8b, 0x38, 0x6a, 0x72, 0xd7, 0x85, 0xbb, 0x83, 0x10, 0x18,
  0x44, 0x92, 0xa2, 0xc7, 0xf1, 0xe0, 0xfe, 0x05, 0x01, 0x10, 0x58, 0xce,
  0xce, 0x36, 0x2d, 0x84, 0xe5, 0xd5, 0x8c, 0x1e, 0x46, 0xdc, 0xbb, 0x83,
  0xe8, 0xec, 0x40, 0x6e, 0x3e, 0xf1, 0xb7, 0x50, 0xf5, 0x9e, 0x47, 0x88,
  0xeb, 0x17, 0xdd, 0x85, 0xfd, 0x75, 0xf1, 0x54, 0x63, 0xad, 0xa5, 0xf3,
  0x65, 0x31, 0xd2, 0x2f, 0x3c, 0x68, 0x7f, 0xba, 0xc7, 0x6c, 0xbb, 0x3d,
  0xfc, 0xb2, 0xfd, 0xe9, 0xee, 0x8d, 0xcf, 0xcb, 0xfc, 0xfd, 0xe9, 0x9e,
  0xe5, 0xda, 0xde, 0x11, 0x5c, 0xb7, 0xae, 0x9d, 0xd3, 0x87, 0x5c, 0x9b,
  0x17, 0x2b, 0x4b, 0x49, 0xe4, 0x46, 0x2a, 0xee, 0xdc, 0x20, 0x39, 0x62,
  0x4c, 0x65, 0x4a, 0x8c, 0x90, 0xd7, 0x8f, 0xb9, 0xb4, 0x4f, 0x5c, 0x6e,
  0xea, 0x6e, 0x8c, 0x14, 0xff, 0xe6, 0x53, 0x20, 0x3b, 0x39, 0x67, 0x1f,
  0x94, 0x75, 0xdb, 0x3a, 0x63, 0x45, 0xde, 0xcc, 0xe4, 0xe5, 0x12, 0xd5,
  0x79, 0x86, 0x47, 0xdd, 0xda, 0x4e, 0xa8, 0xb1, 0x5e, 0xe2, 0x46, 0x83,
  0xa3, 0x56, 0x27, 0x46, 0x76, 0x49, 0xd2, 0x6f, 0x77, 0x3a, 0x34, 0x3a,
  0x23, 0xaf, 0xcd, 0x91, 0xe6, 0x5e, 0xb1, 0xce, 0xba, 0x9f, 0x5c, 0xe6,
  0x97, 0x01, 0xa2, 0xfb, 0xe4, 0xae, 0x89, 0x54, 0xa0, 0x60, 0xd5, 0xd8,
  0x85, 0xad, 0x5a, 0x12, 0xdc, 0x1e, 0x3f, 0x1d, 0xed, 0x6e, 0x0f, 0xd0,
  0x12, 0x7a, 0x49, 0x3b, 0x80, 0x12, 0x01, 0xab, 0xd7, 0xa1, 0x42, 0x26,
  0xbf, 0x84, 0xb0, 0x23, 0xc7, 0x42, 0x24, 0x13, 0x04, 0x8e, 0x35, 0xc9,
  0xb0, 0xd2, 0xf4, 0x25, 0x41, 0xba, 0x6c, 0x57, 0xc7, 0xe5, 0x03, 0xea,
  0x32, 0x45, 0x6e, 0xb1, 0xae, 0xdf, 0x5a, 0x9c, 0x65, 0xae, 0x05, 0xbc,
  0xba, 0x7e, 0x6b, 0x71, 0x96, 0xb9, 0x16, 0xf0, 0x9e, 0x24, 0x57, 0x65,
  0x5b, 0x78, 0x80, 0x74, 0x07, 0xa0, 0x98, 0x82, 0x70, 0xcb, 0x20, 0x2c,
  0xda, 0x7e, 0x71, 0x4a, 0x4e, 0x15, 0xfe, 0x82, 0xd8, 0xbe, 0x6c, 0x61,
  0x58, 0x8e, 0x07, 0x03, 0x15, 0xae, 0x44, 0xee, 0xbb, 0x30, 0x08, 0x11,
  0xbd, 0xac, 0xdb, 0xcb, 0x61, 0xd4, 0xb6, 0x2e, 0x9c, 0xe2, 0xca, 0x8e,
  0x46, 0xa3, 0x48, 0x25, 0xfd, 0x75, 0x9e, 0xdd, 0xb4, 0xbc, 0x80, 0x32,
  0xb3, 0x81, 0xed, 0xcd, 0xc0, 0xc6, 0xe7, 0x35, 0x76, 0xc8, 0x0c, 0x39,
  0x29, 0x6d, 0xf7, 0xf1, 0x35, 0x17, 0xd9, 0x7f, 0xda, 0xdb, 0xe6, 0x8f,
  0xbc, 0xcd, 0x75, 0xac, 0x14, 0x8d, 0x31, 0x59, 0x1d, 0x94, 0xfc, 0x00,
  0xc6, 0x58, 0x75, 0x97, 0x50, 0xcf, 0x00, 0xa7, 0xa4, 0x12, 0x5f, 0xe1,
  0xd4, 0xe7, 0xbc, 0x66, 0x48, 0x54, 0x86, 0x34, 0x09, 0x03, 0x55, 0xfc,
  0x99, 0xf6, 0x9d, 0x17, 0x07, 0x9d, 0x72, 0x27, 0xc3, 0xda, 0xa7, 0xb0,
  0x27, 0xc9, 0x55, 0xd9, 0x16, 0x1e, 0x20, 0xdd, 0x01, 0x28, 0xa6, 0x20,
  0xdc, 0x32, 0x08, 0x8b, 0xb6, 0x5f, 0x9c, 0x92, 0x53, 0x85, 0xbf, 0x20,
  0xb6, 0x2f, 0x5b, 0x18, 0x96, 0xe3, 0xc1, 0x40, 0x85, 0x2b, 0x91, 0xfb,
  0x2e, 0x0c, 0x42, 0x44, 0x2f, 0xeb, 0xf6, 0x72, 0x18, 0xb5, 0xad, 0x0b,
  0xa7, 0xb8, 0xb2, 0xa3, 0xd1, 0x28, 0x52, 0x49, 0x7f, 0x9d, 0x67, 0x37,
  0x2d, 0x2f, 0xa0, 0xcc, 0x6c, 0x60, 0x7b, 0x33, 0xb0, 0xf1, 0x79, 0x8d,
  0x1d, 0x32, 0x43, 0x4e, 0x4a, 0xdb, 0x7d, 0x7c, 0xcd, 0x45, 0xf6, 0x9f,
  0xf6, 0xb6, 0xf9, 0x23, 0x6f, 0x73, 0x1d, 0x2b, 0x45, 0x63, 0x4c, 0x56,
  0x07, 0x25, 0x3f, 0x80, 0x31, 0x56, 0xdd, 0x25, 0xd4, 0x33, 0xc0, 0x29,
  0xa9, 0xc4, 0x57, 0x38, 0xf5, 0x39, 0xaf, 0x19, 0x12, 0x95, 0x21, 0x4d,
  0xc2, 0x40, 0x15, 0x7f, 0xa6, 0x7d, 0xe7, 0xc5, 0x41, 0xa7, 0xdc, 0xc9,
  0xb0, 0xf6, 0x29, 0x6c, 0x60, 0x12, 0xb2, 0x8a, 0x83, 0x4e, 0x56, 0x60,
  0x81, 0x49, 0xc8, 0x2a, 0x0e, 0x3a, 0x59, 0x81, 0x91, 0xac, 0x07, 0x39,
  0x11, 0xaf, 0x69, 0x82, 0x17, 0xa4, 0x77, 0x9d, 0x2c, 0x12, 0x5d, 0x60,
  0x3c, 0xd4, 0xa4, 0xe7, 0xea, 0x07, 0x80, 0xfc, 0x95, 0x4c, 0xee, 0xb4,
  0x11, 0x93, 0xb8, 0x81, 0x1c, 0xd4, 0x6b, 0x57, 0x3d, 0x75, 0xa5, 0x71,
  0x0e, 0xce, 0xc7, 0x39, 0xd4, 0x18, 0x37, 0x8c, 0x56, 0x26, 0x83, 0xd7,
  0x3e, 0x46, 0x6f, 0x50, 0xe5, 0x6c, 0x2b, 0x2f, 0x69, 0x60, 0x6e, 0xf7,
  0x11, 0x3d, 0x62, 0x56, 0xfd, 0xb8, 0xe0, 0x1e, 0x0d, 0x67, 0x56, 0x88,
  0x24, 0xeb, 0x41, 0x4e, 0xc4, 0x6b, 0x9a, 0xe0, 0x05, 0xe9, 0x5d, 0x27,
  0x8b, 0x44, 0x17, 0x18, 0x0f, 0x35, 0xe9, 0xb9, 0xfa, 0x01, 0x20, 0x7f,
  0x25, 0x93, 0x3b, 0x6d, 0xc4, 0x24, 0x6e, 0x20, 0x07, 0xf5, 0xda, 0x55,
  0x4f, 0x5d, 0x69, 0x9c, 0x83, 0xf3, 0x71, 0x0e, 0x35, 0xc6, 0x0d, 0xa3,
  0x95, 0xc9, 0xe0, 0xb5, 0x8f, 0xd1, 0x1b, 0x54, 0x39, 0xdb, 0xca, 0x4b,
  0x1a, 0x98, 0xdb, 0x7d, 0x44, 0x8f, 0x98, 0x55, 0x3f, 0x2e, 0xb8, 0x47,
  0xc3, 0x99, 0x15, 0x62, 0xde, 0x74, 0xf7, 0xa5, 0x70, 0x56, 0x6a, 0x65,
  0x79, 0xd3, 0xdd, 0x97, 0xc2, 0x59, 0xa9, 0x95, 0xed, 0xe2, 0x28, 0x58,
  0x34, 0x2a, 0xec, 0xfe, 0xe8, 0x2a, 0xbd, 0xbd, 0x1d, 0xd5, 0xd9, 0x8e,
  0xa1, 0xda, 0x7a, 0xa7, 0xae, 0xe7, 0xf8, 0x68, 0x4d, 0xc0, 0x4f, 0x6b,
  0xbb, 0x38, 0x0a, 0x16, 0x8d, 0x0a, 0xbb, 0x3f, 0xba, 0x4a, 0x6f, 0x6f,
  0x47, 0x75, 0xb6, 0x63, 0xa8, 0xb6, 0xde, 0xa9, 0xeb, 0x39, 0x3e, 0x5a,
  0x13, 0xf0, 0xd3, 0xda, 0x5e, 0x76, 0xb7, 0x77, 0x96, 0x80, 0x84, 0x19,
  0x7b, 0xd9, 0xdd, 0xde, 0x59, 0x02, 0x12, 0x66, 0x3c, 0x4d, 0xf1, 0x6a,
  0x8b, 0xd9, 0xba, 0x66, 0x76, 0xdc, 0x9b, 0xa2, 0x9b, 0xad, 0xc8, 0x98,
  0xb7, 0x84, 0xde, 0xec, 0x17, 0xfa, 0x31, 0x6b, 0x70, 0x79, 0x21, 0x76,
  0x1c, 0x07, 0xe5, 0x0d, 0x94, 0xdb, 0xaa, 0x2f, 0xab, 0x5c, 0xee, 0xaa,
  0x17, 0x95, 0x31, 0x9b, 0x62, 0x73, 0xaf, 0x8d, 0x7c, 0x70, 0x88, 0x1e,
  0xdc, 0xff, 0x85, 0xdb, 0xd6, 0x47, 0xd0, 0x66, 0xfa, 0x3c, 0x26, 0xde,
  0xd2, 0x90, 0xa5, 0x7e, 0xe0, 0xb0, 0xcd, 0x6e, 0x6e, 0x6e, 0x46, 0xeb,
  0x5c, 0x26, 0xff, 0x74, 0xf8, 0xad, 0x3d, 0xdc, 0x89, 0xa1, 0xda, 0x63,
  0x63, 0x47, 0xdc, 0x26, 0x1e, 0xbc, 0x84, 0xed, 0x43, 0xa2, 0x31, 0x81,
  0x4f, 0x53, 0xbc, 0xda, 0x62, 0xb6, 0xae, 0x99, 0x1d, 0xf7, 0xa6, 0xe8,
  0x66, 0x2b, 0x32, 0xe6, 0x2d, 0xa1, 0x37, 0xfb, 0x85, 0x7e, 0xcc, 0x1a,
  0x5c, 0x5e, 0x88, 0x1d, 0xc7, 0x41, 0x79, 0x03, 0xe5, 0xb6, 0xea, 0xcb,
  0x2a, 0x97, 0xbb, 0xea, 0x45, 0x65, 0xcc, 0xa6, 0xd8, 0xdc, 0x6b, 0x23,
  0x1f, 0x1c, 0xa2, 0x07, 0xf7, 0x7f, 0xe1, 0xb6, 0xf5, 0x11, 0xb4, 0x99,
  0x3e, 0x8f, 0x89, 0xb7, 0x34, 0x64, 0xa9, 0x1f, 0x38, 0x6c, 0xb3, 0x9b,
  0x9b, 0x9b, 0xd1, 0x3a, 0x97, 0xc9, 0x3f, 0x1d, 0x7e, 0x6b, 0x0f, 0x77,
  0x62, 0xa8, 0xf6, 0xd8, 0xd8, 0x11, 0xb7, 0x89, 0x07, 0x2f, 0x61, 0xfb,
  0xe4, 0xfb, 0xb3, 0x37, 0xb6, 0xed, 0xad, 0x16, 0xf6, 0xc3, 0xe9, 0x54,
  0x87, 0xee, 0xf1, 0x2c, 0x67, 0xc8, 0x0f, 0xe0, 0xd5, 0xbe, 0x7a, 0x79,
  0xfa, 0xe1, 0xdd, 0xe1, 0xf9, 0x87, 0xb3, 0x97, 0x3f, 0x60, 0x0b, 0xd9,
  0x90, 0x68, 0x4c, 0x20, 0xf9, 0xee, 0xec, 0x8d, 0x6d, 0x7b, 0xab, 0x85,
  0xfd, 0x70, 0x3a, 0xd5, 0xa1, 0x7b, 0x3c, 0xcb, 0x19, 0xf2, 0x03, 0x78,
  0xb5, 0xaf, 0x5e, 0x9e, 0x7e, 0x78, 0x77, 0x78, 0xfe, 0xe1, 0xec, 0xe5,
  0x20, 0x34, 0xf2, 0x0a, 0xae, 0xc8, 0xaa, 0x2c, 0xd1, 0xc2, 0xea, 0x2d,
  0x55, 0x2c, 0xe5, 0x05, 0x21, 0x3b, 0x44, 0x9b, 0x2a, 0x5b, 0xb8, 0x1a,
  0x99, 0xa7, 0x99, 0xcb, 0x41, 0xd2, 0xda, 0xaf, 0x8f, 0xc6, 0x72, 0xc8,
  0xe6, 0xa3, 0xb2, 0xba, 0x04, 0x15, 0xee, 0xbc, 0x16, 0xfe, 0x19, 0x1d,
  0x6e, 0x47, 0x02, 0xaa, 0x40, 0x3f, 0xba, 0xae, 0x2e, 0x00, 0x96, 0xb0,
  0xae, 0x9d, 0xbc, 0xdf, 0x8f, 0xcc, 0x23, 0xcd, 0xc7, 0xc4, 0x00, 0x97,
  0xd7, 0x8f, 0xd7, 0x18, 0x03, 0x4d, 0x4b, 0x7f, 0x92, 0x8e, 0x4e, 0x44,
  0x41, 0x64, 0x76, 0xfa, 0x61, 0x72, 0x2e, 0x0c, 0x9b, 0xdf, 0x0d, 0x22,
  0xb5, 0xd7, 0x04, 0xe6, 0x5d, 0xda, 0x2a, 0x76, 0xaa, 0xad, 0x41, 0x7c,
  0x7f, 0x7d, 0x23, 0x35, 0xd5, 0x83, 0xba, 0x66, 0x47, 0x5f, 0x85, 0xfa,
  0xf0, 0x69, 0xa8, 0x4b, 0xa2, 0xc5, 0x9a, 0xb7, 0xe6, 0xa7, 0xb2, 0xe6,
  0xa7, 0xff, 0xd4, 0x9a, 0x9f, 0xfe, 0x13, 0x6b, 0x7e, 0xfc, 0x1b, 0xaf,
  0xf9, 0x71, 0x74, 0xcd, 0xde, 0x57, 0x86, 0x7f, 0xc1, 0x9a, 0xff, 0xb2,
  0xf7, 0xd8, 0x42, 0x36, 0x08, 0x8d, 0xbc, 0x82, 0x2b, 0xb2, 0x2a, 0x4b,
  0xb4, 0xb0, 0x7a, 0x4b, 0x15, 0x4b, 0x79, 0x41, 0xc8, 0x0e, 0xd1, 0xa6,
  0xca, 0x16, 0xae, 0x46, 0xe6, 0x69, 0xe6, 0x72, 0x90, 0xb4, 0xf6, 0xeb,
  0xa3, 0xb1, 0x1c, 0xb2, 0xf9, 0xa8, 0xac, 0x2e, 0x41, 0x85, 0x3b, 0xaf,
  0x85, 0x7f, 0x46, 0x87, 0xdb, 0x91, 0x80, 0x2a, 0xd0, 0x8f, 0xae, 0xab,
  0x0b, 0x80, 0x25, 0xac, 0x6b, 0x27, 0xef, 0xf7, 0x23, 0xf3, 0x48, 0xf3,
  0x31, 0x31, 0xc0, 0xe5, 0xf5, 0xe3, 0x35, 0xc6, 0x40, 0xd3, 0xd2, 0x9f,
  0xa4, 0xa3, 0x13, 0x51, 0x10, 0x99, 0x9d, 0x7e, 0x98, 0x9c, 0x0b, 0xc3,
  0xe6, 0x77, 0x83, 0x48, 0xed, 0x35, 0x81, 0x79, 0x97, 0xb6, 0x8a, 0x9d,
  0x6a, 0x6b, 0x10, 0xdf, 0x5f, 0xdf, 0x48, 0x4d, 0xf5, 0xa0, 0xae, 0xd9,
  0xd1, 0x57, 0xa1, 0x3e, 0x7c, 0x1a, 0xea, 0x92, 0x68, 0xb1, 0xe6, 0xad,
  0xf9, 0xa9, 0xac, 0xf9, 0xe9, 0x3f, 0xb5, 0xe6, 0xa7, 0xff, 0xc4, 0x9a,
  0x1f, 0xff, 0xca, 0x6b, 0x7e, 0x1c, 0x5d, 0xb3, 0xf7, 0x95, 0xe1, 0x5f,
  0x2a, 0x3e, 0x0e, 0xcd, 0x7c, 0x21, 0x85, 0xa5, 0xe1, 0x52, 0x1d, 0x57,
  0x99, 0x5b, 0x3d, 0x3e, 0xc8, 0xad, 0xe8, 0xb0, 0x4d, 0xbd, 0xfe, 0x51,
  0xa9, 0x54, 0x8b, 0x72, 0x74, 0xb1, 0xb7, 0x0f, 0xb6, 0xe7, 0x75, 0xce,
  0x51, 0x6a, 0x58, 0x4f, 0x61, 0xdb, 0xc0, 0x31, 0xb6, 0x21, 0xb3, 0xd1,
  0x61, 0x37, 0xb4, 0xe5, 0x03, 0xdd, 0xf4, 0x34, 0x84, 0x58, 0x99, 0x92,
  0x61, 0x4d, 0x77, 0xd2, 0x86, 0xdf, 0x5c, 0x17, 0xe6, 0xfc, 0xc2, 0xc2,
  0xcf, 0xe8, 0xc0, 0x1c, 0x92, 0x80, 0xbb, 0x39, 0xe4, 0x19, 0xe7, 0x77,
  0x4b, 0x0c, 0x68, 0x64, 0x73, 0x65, 0x64, 0x30, 0xc7, 0xc0, 0xb9, 0x45,
  0xb8, 0x9d, 0x64, 0xd2, 0x99, 0xa0, 0x38, 0x5a, 0xaf, 0xb2, 0xbb, 0xcd,
  0x40, 0x61, 0x98, 0xce, 0x4b, 0xf0, 0x1b, 0xe8, 0x75, 0x6b, 0x34, 0x91,
  0x89, 0xeb, 0x76, 0xc5, 0xf2, 0xa2, 0xd3, 0xfe, 0xca, 0x97, 0x1b, 0x1f,
  0xb3, 0x6c, 0x99, 0xce, 0xa9, 0xaa, 0x1f, 0x61, 0xd7, 0xbe, 0x1e, 0x3d,
  0xad, 0xbc, 0x2c, 0xcd, 0x59, 0xa6, 0x37, 0x5a, 0x49, 0x2f, 0xc4, 0xe7,
  0xf8, 0x20, 0x91, 0xa4, 0x9f, 0xe4, 0x33, 0x2a, 0xb3, 0x8b, 0xb7, 0x6c,
  0x70, 0x78, 0xf0, 0x76, 0x12, 0x64, 0x78, 0x4e, 0x04, 0x7e, 0xc2, 0x7e,
  0x42, 0x21, 0xac, 0x90, 0x15, 0x70, 0x9d, 0x23, 0x1b, 0xa8, 0x0b, 0x7b,
  0xb0, 0xe6, 0xbf, 0xac, 0x8a, 0x8f, 0x43, 0x33, 0x5f, 0x48, 0x61, 0x69,
  0xb8, 0x54, 0xc7, 0x55, 0xe6, 0x56, 0x8f, 0x0f, 0x72, 0x2b, 0x3a, 0x6c,
  0x53, 0xaf, 0x7f, 0x54, 0x2a, 0xd5, 0xa2, 0x1c, 0x5d, 0xec, 0xed, 0x83,
  0xed, 0x79, 0x9d, 0x73, 0x94, 0x1a, 0xd6, 0x53, 0xd8, 0x36, 0x70, 0x8c,
  0x6d, 0xc8, 0x6c, 0x74, 0xd8, 0x0d, 0x6d, 0xf9, 0x40, 0x37, 0x3d, 0x0d,
  0x21, 0x56, 0xa6, 0x64, 0x58, 0xd3, 0x9d, 0xb4, 0xe1, 0x37, 0xd7, 0x85,
  0x39, 0xbf, 0xb0, 0xf0, 0x33, 0x3a, 0x30, 0x87, 0x24, 0xe0, 0x6e, 0x0e,
  0x79, 0xc6, 0xf9, 0xdd, 0x12, 0x03, 0x1a, 0xd9, 0x5c, 0x19, 0x19, 0xcc,
  0x31, 0x70, 0x6e, 0x11, 0x6e, 0x27, 0x99, 0x74, 0x26, 0x28, 0x8e, 0xd6,
  0xab, 0xec, 0x6e, 0x33, 0x50, 0x18, 0xa6, 0xf3, 0x12, 0xfc, 0x06, 0x7a,
  0xdd, 0x1a, 0x4d, 0x64, 0xe2, 0xba, 0x5d, 0xb1, 0xbc, 0xe8, 0xb4, 0xbf,
  0xf2, 0xe5, 0xc6, 0xc7, 0x2c, 0x5b, 0xa6, 0x73, 0xaa, 0xea, 0x47, 0xd8,
  0xb5, 0xaf, 0x47, 0x4f, 0x2b, 0x2f, 0x4b, 0x73, 0x96, 0xe9, 0x8d, 0x56,
  0xd2, 0x0b, 0xf1, 0x39, 0x3e, 0x48, 0x24, 0xe9, 0x27, 0xf9, 0x8c, 0xca,
  0xec, 0xe2, 0x2d, 0x1b, 0x1c, 0x1e, 0xbc, 0x9d, 0x04, 0x19, 0x9e, 0x13,
  0x6a, 0xdf, 0xe7, 0xd7, 0x09, 0xd0, 0xa6, 0x05, 0xda, 0xce, 0x07, 0x88,
  0x27, 0x4a, 0x2b, 0xff, 0xa0, 0x6e, 0x50, 0xd7, 0xc0, 0x80, 0xa4, 0x14,
  0xbb, 0x95, 0xf5, 0xdf, 0xf3, 0x57, 0xa7, 0x1f, 0xbe, 0x3b, 0x3c, 0x3c,
  0x3d, 0x7a, 0x7d, 0x7c, 0x28, 0x17, 0xc6, 0xfe, 0xe8, 0xdd, 0xf9, 0xf7,
  0xc7, 0xda, 0xa2, 0x4a, 0x69, 0x31, 0x20, 0x78, 0x41, 0x1c, 0x67, 0xa6,
  0x3c, 0xa0, 0x4e, 0x3c, 0x45, 0x93, 0xbc, 0x3c, 0xfa, 0xd1, 0x68, 0xad,
  0xa7, 0xc3, 0xf7, 0x3f, 0x06, 0x6d, 0x10, 0xbc, 0xf4, 0xf6, 0xde, 0x8e,
  0xe0, 0x86, 0x10, 0xc9, 0x76, 0x74, 0x6b, 0xef, 0xcb, 0xf6, 0xf9, 0x8d,
  0xc5, 0xa0, 0x19, 0x6e, 0x55, 0x58, 0x85, 0x81, 0x5f, 0xd4, 0x56, 0x23,
  0x5e, 0x46, 0xcd, 0xd3, 0x5d, 0xed, 0xe0, 0xb4, 0xd6, 0x5f, 0xfa, 0x79,
  0xdb, 0x66, 0xfc, 0x98, 0xdd, 0x11, 0x7c, 0x5c, 0xf2, 0x02, 0xff, 0x8d,
  0x77, 0xd8, 0x3a, 0xad, 0xf2, 0x6b, 0xe8, 0x7f, 0xe6, 0x59, 0x8e, 0x26,
  0xe1, 0xd1, 0x91, 0xed, 0x37, 0x26, 0x11, 0x2d, 0x0c, 0x42, 0x41, 0x6f,
  0x1a, 0x94, 0x08, 0x2b, 0x88, 0x8a, 0xe6, 0x33, 0xf6, 0x75, 0xf0, 0x78,
  0x34, 0xa0, 0xd9, 0x9e, 0x51, 0xf2, 0xfa, 0xf0, 0x6c, 0x90, 0x9c, 0x1e,
  0xbe, 0xe5, 0x1c, 0xf9, 0xc3, 0x77, 0xdf, 0x70, 0x0b, 0x36, 0xed, 0xac,
  0x45, 0x41, 0xd8, 0x30, 0x4f, 0xcc, 0xdb, 0x13, 0xf3, 0x2e, 0x25, 0xc5,
  0xd5, 0xb5, 0x91, 0xae, 0x9f, 0x10, 0xbb, 0x83, 0xd7, 0xf6, 0xc2, 0xfc,
  0x27, 0xb6, 0x55, 0xc6, 0x8e, 0xf8, 0x36, 0xb2, 0x5d, 0xa2, 0x98, 0xd9,
  0xb0, 0xbd, 0x18, 0x05, 0xd8, 0x0d, 0xde, 0x31, 0xb3, 0x21, 0x61, 0x00,
  0x81, 0x9f, 0xb0, 0x9f, 0x50, 0x08, 0x2b, 0x64, 0x05, 0x5c, 0xe7, 0xc8,
  0x06, 0xea, 0xc2, 0x9e, 0xda, 0xf7, 0xf9, 0x75, 0x02, 0xb4, 0x69, 0x81,
  0xb6, 0xf3, 0x01, 0xe2, 0x89, 0xd2, 0xca, 0x3f, 0xa8, 0x1b, 0xd4, 0x35,
  0x30, 0x20, 0x29, 0xc5, 0x6e, 0x65, 0xfd, 0xf7, 0xfc, 0xd5, 0xe9, 0x87,
  0x6f, 0x0f, 0x0f, 0x4f, 0x8f, 0x5e, 0x1f, 0x1f, 0xca, 0x85, 0xb1, 0x3f,
  0x7a, 0x77, 0xfe, 0xdd, 0xb1, 0xb6, 0xa8, 0x52, 0x5a, 0x0c, 0x08, 0x5e,
  0x10, 0xc7, 0x99, 0x29, 0x0f, 0xa8, 0x13, 0x4f, 0xd1, 0x24, 0x2f, 0x8f,
  0x7e, 0x30, 0x5a, 0xeb, 0xe9, 0xf0, 0xfd, 0x0f, 0x41, 0x1b, 0x04, 0x2f,
  0xbd, 0xbd, 0xb7, 0x23, 0xb8, 0x21, 0x44, 0xb2, 0x1d, 0xdd, 0xda, 0xfb,
  0xb2, 0x7d, 0x7e, 0x65, 0x31, 0x68, 0x86, 0x5b, 0x15, 0x56, 0x61, 0xe0,
  0x17, 0xb5, 0xd5, 0x88, 0x97, 0x51, 0xf3, 0x74, 0x57, 0x3b, 0x38, 0xad,
  0xf5, 0x97, 0x7e, 0xde, 0xb6, 0x19, 0x3f, 0x66, 0x77, 0x04, 0x1f, 0x97,
  0xbc, 0xc0, 0x7f, 0xe3, 0x1d, 0xb6, 0x4e, 0xab, 0xfc, 0x1a, 0xfa, 0x9f,
  0x79, 0x96, 0xa3, 0x49, 0x78, 0x74, 0x64, 0xfb, 0x8d, 0x49, 0x44, 0x0b,
  0x83, 0x50, 0xd0, 0x9b, 0x06, 0x25, 0xc2, 0x0a, 0xa2, 0xa2, 0xf9, 0x8c,
  0x7d, 0x1d, 0x3c, 0x1e, 0x0d, 0x68, 0xb6, 0x67, 0x94, 0xbc, 0x3e, 0x3c,
  0x1b, 0x24, 0xa7, 0x87, 0x6f, 0x39, 0x47, 0xfe, 0xf0, 0xdd, 0xd7, 0xdc,
  0x82, 0x4d, 0x3b, 0x6b, 0x51, 0x10, 0x36, 0xcc, 0x13, 0xf3, 0xf6, 0xc4,
  0xbc, 0x4b, 0x49, 0x71, 0x75, 0x6d, 0xa4, 0xeb, 0x27, 0xc4, 0xee, 0xe0,
  0xb5, 0xbd, 0x30, 0xff, 0x89, 0x6d, 0x95, 0xb1, 0x23, 0xbe, 0x89, 0x6c,
  0x59, 0x37, 0x88, 0xcc, 0x3e, 0x42, 0x2f, 0xe1, 0x66, 0x99, 0x12, 0xfe,
  0x83, 0x15, 0x6b, 0x3e, 0x37, 0x00, 0x5d, 0x12, 0x16, 0xb2, 0xdb, 0x8c,
  0x58, 0x61, 0x66, 0x95, 0x4b, 0xfd, 0x92, 0x0b, 0xbd, 0x18, 0x85, 0x6a,
  0x96, 0xcf, 0xa8, 0xf2, 0xdb, 0x7c, 0xa3, 0xac, 0x66, 0x11, 0xdc, 0x5b,
  0xb3, 0x71, 0x2a, 0x32, 0xd8, 0xdd, 0xa1, 0xa9, 0x5f, 0xda, 0x69, 0x6d,
  0x9e, 0x4f, 0x2a, 0xa3, 0x70, 0xb9, 0x46, 0x01, 0xda, 0x0d, 0x6e, 0xf9,
  0x71, 0x5a, 0xef, 0xed, 0x45, 0x5a, 0x9d, 0x6b, 0x39, 0xd4, 0x40, 0x73,
  0xf8, 0x4e, 0xbf, 0x7b, 0x35, 0xfe, 0xdd, 0xde, 0x1e, 0xa5, 0x4c, 0x6e,
  0x21, 0xb5, 0xed, 0xd9, 0x93, 0xbd, 0xfd, 0xed, 0x98, 0xbe, 0x17, 0xe4,
  0x97, 0x28, 0x66, 0x36, 0x6c, 0x2f, 0x46, 0x01, 0x76, 0x83, 0x77, 0xcc,
  0x6c, 0x48, 0x18, 0x40, 0xd6, 0x0d, 0x22, 0xb3, 0x8f, 0xd0, 0x4b, 0xb8,
  0x59, 0xa6, 0x84, 0xff, 0x60, 0xc5, 0x9a, 0xcf, 0x0d, 0x40, 0x97, 0x84,
  0x85, 0xec, 0x36, 0x23, 0x56, 0x98, 0x59, 0xe5, 0x52, 0xbf, 0xe4, 0x42,
  0x2f, 0x46, 0xa1, 0x9a, 0xe5, 0x33, 0xaa, 0xfc, 0x36, 0xdf, 0x28, 0xab,
  0x59, 0x04, 0xf7, 0xd6, 0x6c, 0x9c, 0x8a, 0x0c, 0x76, 0x77, 0x68, 0xea,
  0x97, 0x76, 0x5a, 0x9b, 0xe7, 0x93, 0xca, 0x28, 0x5c, 0xae, 0x51, 0x80,
  0x76, 0x83, 0x5b, 0x7e, 0x9c, 0xd6, 0x7b, 0x7b, 0x91, 0x56, 0xe7, 0x5a,
  0x0e, 0x35, 0xd0, 0x1c, 0xbe, 0xd3, 0x6f, 0x5f, 0x8d, 0x7f, 0xbb, 0xb7,
  0x47, 0x29, 0x93, 0x5b, 0x48, 0x6d, 0x7b, 0xf6, 0x64, 0x6f, 0x7f, 0x3b,
  0xa6, 0xef, 0x05, 0x39, 0x00, 0xa4, 0xff, 0x2d, 0xbd, 0xfd, 0xa6, 0x80,
  0x00, 0x90, 0xfe, 0xb7, 0xf4, 0xf6, 0x9b, 0x02, 0x62, 0x92, 0x1e, 0x6d,
  0x07, 0x9e, 0x65, 0x48, 0x27, 0x42, 0x0d, 0x98, 0x8d, 0x7c, 0x50, 0x9e,
  0x55, 0x10, 0xa6, 0xf5, 0x2a, 0x61, 0x37, 0x78, 0xfe, 0x07, 0x1b, 0x96,
  0x10, 0xfc, 0x8c, 0x53, 0x8a, 0x56, 0x7b, 0xf3, 0x26, 0x02, 0xed, 0xba,
  0xe2, 0xfd, 0x75, 0x51, 0x52, 0x94, 0x03, 0xa5, 0x61, 0x79, 0xe3, 0xda,
  0xcc, 0x75, 0x82, 0x89, 0x88, 0x25, 0x06, 0xee, 0x38, 0x99, 0xd1, 0x46,
  0xc2, 0x27, 0x0e, 0x12, 0x4d, 0xdd, 0xa8, 0x76, 0xff, 0xbd, 0x2b, 0xdd,
  0x1e, 0x35, 0x48, 0xb2, 0x22, 0xf1, 0xba, 0x61, 0x2e, 0xdb, 0x46, 0x74,
  0xc4, 0x4f, 0x7a, 0x89, 0xaa, 0x49, 0xf2, 0x62, 0x6e, 0x5e, 0x9c, 0xc7,
  0xcb, 0x74, 0x0e, 0xb9, 0x33, 0xcf, 0x77, 0xc6, 0xb8, 0xcf, 0xaa, 0xb2,
  0xee, 0x14, 0x14, 0x68, 0xd3, 0x75, 0xf6, 0x81, 0xd0, 0x30, 0x02, 0x43,
  0x1a, 0x26, 0x6b, 0xe2, 0xd0, 0x64, 0x77, 0x02, 0x0c, 0x8f, 0x4d, 0xaa,
  0x6b, 0xd8, 0x1c, 0x24, 0x9b, 0xe8, 0x45, 0x83, 0x3f, 0xa9, 0x09, 0x3b,
  0x1a, 0x47, 0xe4, 0xe9, 0x7c, 0x13, 0x1d, 0x42, 0xba, 0xb8, 0xc3, 0x42,
  0x6b, 0x9b, 0x86, 0xfb, 0xf1, 0x68, 0xb8, 0xce, 0x54, 0x19, 0x2d, 0xf3,
  0x10, 0x24, 0xd7, 0x5a, 0xd2, 0x66, 0x28, 0x4d, 0x5c, 0xaa, 0x21, 0xeb,
  0xa0, 0x6b, 0x8a, 0x1d, 0xae, 0x0d, 0xb3, 0xd2, 0x97, 0x8d, 0xf8, 0x1b,
  0xcb, 0x15, 0x3e, 0x86, 0x5f, 0xda, 0xdd, 0xd6, 0xf9, 0x3b, 0x3b, 0xc3,
  0xe9, 0x61, 0xf9, 0xe7, 0xac, 0xaf, 0x47, 0xdb, 0x56, 0xbe, 0xe4, 0x4a,
  0x52, 0x7f, 0x49, 0x04, 0x5f, 0x8e, 0xda, 0x87, 0x19, 0x9b, 0x71, 0x52,
  0x26, 0xe7, 0xb7, 0x9a, 0x13, 0x85, 0x20, 0x0c, 0xa4, 0xdd, 0xd8, 0xa0,
  0x58, 0xaa, 0xd3, 0x1e, 0xb2, 0xb9, 0xfd, 0x2a, 0x11, 0xff, 0x01, 0x15,
  0x51, 0xdc, 0x54, 0x80, 0x56, 0x2c, 0x1c, 0x40, 0xeb, 0x3c, 0xeb, 0x03,
  0xdc, 0x51, 0xf4, 0x45, 0x73, 0x48, 0x73, 0xe9, 0x83, 0xa6, 0x99, 0x4b,
  0x95, 0x4e, 0x6b, 0x28, 0x81, 0x5f, 0xb5, 0xf0, 0xf1, 0xde, 0xbf, 0xfd,
  0x93, 0x27, 0x27, 0xad, 0xeb, 0x18, 0x85, 0x23, 0x52, 0x52, 0xfd, 0x60,
  0x5c, 0xa9, 0x4e, 0x49, 0x10, 0x65, 0x17, 0x0f, 0x49, 0x88, 0xbc, 0x30,
  0xfc, 0x34, 0x0b, 0x80, 0x75, 0xda, 0x2d, 0x44, 0x17, 0xd2, 0x20, 0xd2,
  0x55, 0xdc, 0x24, 0xf4, 0xae, 0xed, 0x5f, 0xeb, 0xfb, 0xdf, 0x87, 0xd0,
  0x98, 0xa4, 0x47, 0xdb, 0x81, 0x67, 0x19, 0xd2, 0x89, 0x50, 0x03, 0x66,
  0x23, 0x1f, 0x94, 0x67, 0x15, 0x84, 0x69, 0xbd, 0x4a, 0xd8, 0x0d, 0x9e,
  0xff, 0xc1, 0x86, 0x25, 0x04, 0x3f, 0xe3, 0x94, 0xa2, 0xd5, 0xde, 0xbc,
  0x89, 0x40, 0xbb, 0xae, 0x78, 0x7f, 0x5d, 0x94, 0x14, 0xe5, 0x40, 0x69,
  0x58, 0xde, 0xb8, 0x36, 0x73, 0x9d, 0x60, 0x22, 0x62, 0x89, 0x81, 0x3b,
  0x4e, 0x66, 0xb4, 0x91, 0xf0, 0x89, 0x83, 0x44, 0x53, 0x37, 0xaa, 0xdd,
  0x7f, 0xef, 0x4a, 0xb7, 0x47, 0x0d, 0x92, 0xac, 0x48, 0xbc, 0x6e, 0x98,
  0xcb, 0xb6, 0x11, 0x1d, 0xf1, 0x93, 0x5e, 0xa2, 0x6a, 0x92, 0xbc, 0x98,
  0x9b, 0x17, 0xe7, 0xf1, 0x32, 0x9d, 0x43, 0xee, 0xcc, 0xf3, 0xad, 0x31,
  0xee, 0xb3, 0xaa, 0xac, 0x3b, 0x05, 0x05, 0xda, 0x74, 0x9d, 0x7d, 0x20,
  0x34, 0x8c, 0xc0, 0x90, 0x86, 0xc9, 0x9a, 0x38, 0x34, 0xd9, 0x9d, 0x00,
  0xc3, 0x63, 0x93, 0xea, 0x1a, 0x36, 0x07, 0xc9, 0x26, 0x7a, 0xd1, 0xe0,
  0x4f, 0x6a, 0xc2, 0x8e, 0xc6, 0x11, 0x79, 0x3a, 0xdf, 0x44, 0x87, 0x90,
  0x2e, 0xee, 0xb0, 0xd0, 0xda, 0xa6, 0xe1, 0x7e, 0x3c, 0x1a, 0xae, 0x33,
  0x55, 0x46, 0xcb, 0x3c, 0x04, 0xc9, 0xb5, 0x96, 0xb4, 0x19, 0x4a, 0x13,
  0x97, 0x6a, 0xc8, 0x3a, 0xe8, 0x9a, 0x62, 0x87, 0x6b, 0xc3, 0xac, 0xf4,
  0x65, 0x23, 0xfe, 0xca, 0x72, 0x85, 0x8f, 0xe1, 0xe7, 0x76, 0xb7, 0x75,
  0xfe, 0xce, 0xce, 0x70, 0x7a, 0x58, 0xfe, 0x39, 0xeb, 0xeb, 0xd1, 0xb6,
  0x95, 0x2f, 0xb9, 0x92, 0xd4, 0x5f, 0x12, 0xc1, 0x97, 0xa3, 0xf6, 0x61,
  0xc6, 0x66, 0x9c, 0x94, 0xc9, 0xf9, 0xad, 0xe6, 0x44, 0x21, 0x08, 0x03,
  0x69, 0x37, 0x36, 0x28, 0x96, 0xea, 0xb4, 0x87, 0x6c, 0x6e, 0xbf, 0x4a,
  0xc4, 0x7f, 0x40, 0x45, 0x14, 0x37, 0x15, 0xa0, 0x15, 0x0b, 0x07, 0xd0,
  0x3a, 0xcf, 0xfa, 0x00, 0x77, 0x14, 0x7d, 0xd1, 0x1c, 0xd2, 0x5c, 0xfa,
  0xa0, 0x69, 0xe6, 0x52, 0xa5, 0xd3, 0x1a, 0x4a, 0xe0, 0x57, 0x2d, 0x7c,
  0xbc, 0xf7, 0x9b, 0x7f, 0xf2, 0xe4, 0xa4, 0x75, 0x1d, 0xa3, 0x70, 0x44,
  0x4a, 0xaa, 0x1f, 0x8c, 0x2b, 0xd5, 0x29, 0x09, 0xa2, 0xec, 0xe2, 0x21,
  0x09, 0x91, 0x17, 0x86, 0x9f, 0x66, 0x01, 0xb0, 0x4e, 0xbb, 0x85, 0xe8,
  0x42, 0x1a, 0x44, 0xba, 0x8a, 0x9b, 0x84, 0xde, 0xb5, 0xfd, 0x6b, 0x7d,
  0xff, 0xfb, 0x10, 0x3a, 0x66, 0xd7, 0x3f, 0x86, 0xd6, 0x06, 0xae, 0xa4,
  0x31, 0xbb, 0xfe, 0x31, 0xb4, 0x36, 0x70, 0x25, 0x9d, 0x74, 0x6d, 0x09,
  0xb8, 0x5a, 0x01, 0x51, 0x34, 0xa3, 0x92, 0x37, 0x04, 0xce, 0x63, 0xc9,
  0xd5, 0x23, 0x6b, 0x20, 0x0d, 0x9c, 0x16, 0x94, 0x1c, 0xcd, 0xdd, 0x02,
  0x93, 0xae, 0x2d, 0x01, 0x57, 0x2b, 0x20, 0x8a, 0x66, 0x54, 0xf2, 0x86,
  0x30, 0x18, 0x32, 0xc8, 0x66, 0xec, 0xca, 0xa4, 0x23, 0xb1, 0xf3, 0xc4,
  0xdd, 0x93, 0x79, 0x31, 0xc2, 0xba, 0xb9, 0xd1, 0x81, 0x6e, 0x3f, 0x31,
  0x43, 0xdc, 0xe4, 0xb3, 0xe6, 0x8a, 0xfa, 0x77, 0xa8, 0x29, 0x53, 0x4b,
  0x0d, 0x31, 0xbc, 0xca, 0x79, 0x58, 0x21, 0x33, 0x89, 0x7b, 0xdc, 0xf8,
  0xc4, 0x68, 0x4f, 0x13, 0xc6, 0xd2, 0x81, 0x63, 0x8d, 0x8e, 0x81, 0x9c,
  0xd0, 0x3b, 0xac, 0x9a, 0x59, 0x14, 0x89, 0xd4, 0x5c, 0xa2, 0x0b, 0x74,
  0xe6, 0x08, 0x5d, 0xea, 0x5a, 0xca, 0x32, 0xb2, 0x57, 0x84, 0xdb, 0xf5,
  0x7c, 0x64, 0x08, 0xed, 0xef, 0x36, 0xb5, 0x07, 0x25, 0x40, 0xd2, 0xbc,
  0x7c, 0x7b, 0x73, 0x43, 0x3f, 0xe6, 0x21, 0xaa, 0x3b, 0x7d, 0xde, 0xb0,
  0xb6, 0x05, 0xbf, 0xfe, 0x76, 0x53, 0x1d, 0x9b, 0xa8, 0xad, 0xbe, 0x4c,
  0xe5, 0xd7, 0x8c, 0xab, 0xb0, 0x79, 0xc9, 0x0f, 0x7d, 0xa3, 0x0f, 0x85,
  0xfd, 0x2f, 0xe1, 0x66, 0x67, 0xb7, 0xba, 0x26, 0xde, 0xd4, 0x07, 0x48,
  0xc0, 0x79, 0x2c, 0xb9, 0x7a, 0x64, 0x0d, 0xa4, 0x81, 0xd3, 0x82, 0x92,
  0xa3, 0xb9, 0x5b, 0x00, 0x06, 0x43, 0x06, 0xd9, 0x8c, 0x5d, 0x99, 0x74,
  0x24, 0x76, 0x9e, 0xb8, 0x7b, 0x32, 0x2f, 0x46, 0x58, 0x37, 0x37, 0x3a,
  0xd0, 0xed, 0x27, 0x66, 0x88, 0x9b, 0x7c, 0xd6, 0x5c, 0x51, 0xff, 0x0e,
  0x35, 0x65, 0x6a, 0xa9, 0x21, 0x86, 0x57, 0x39, 0x0f, 0x2b, 0x64, 0x26,
  0x71, 0x8f, 0x1b, 0x9f, 0x18, 0xed, 0x69, 0xc2, 0x58, 0x3a, 0x70, 0xac,
  0xd1, 0x31, 0x90, 0x13, 0x7a, 0x87, 0x55, 0x33, 0x8b, 0x22, 0x91, 0x9a,
  0x4b, 0x74, 0x81, 0xce, 0x1c, 0xa1, 0x4b, 0x5d, 0x4b, 0x59, 0x46, 0xf6,
  0x8a, 0x70, 0xbb, 0x9e, 0x8f, 0x0c, 0xa1, 0xfd, 0xed, 0xa6, 0xf6, 0xa0,
  0x04, 0x48, 0x9a, 0x97, 0x6f, 0x6f, 0x6e, 0xe8, 0xc7, 0x3c, 0x44, 0x75,
  0xa7, 0xcf, 0x1b, 0xd6, 0xb6, 0xe0, 0xd7, 0xdf, 0x6e, 0xaa, 0x63, 0x13,
  0xb5, 0xd5, 0x97, 0xa9, 0xfc, 0x9a, 0x71, 0x15, 0x36, 0x2f, 0xf9, 0xa1,
  0xe6, 0xfe, 0x6e, 0x90, 0x3c, 0x5a, 0xd0, 0xa1, 0xec, 0x7d, 0x13, 0x45,
  0x1f, 0xe1, 0xc4, 0x32, 0x98, 0x4b, 0x9a, 0x15, 0x30, 0xfc, 0x13, 0xac,
  0x24, 0xda, 0x33, 0xa6, 0x4c, 0x5b, 0x37, 0xc2, 0xb5, 0x49, 0x4e, 0x7a,
  0xaf, 0xf5, 0xa1, 0xb0, 0xff, 0x25, 0xdc, 0xec, 0xec, 0x56, 0xd7, 0xc4,
  0x9b, 0xfa, 0x00, 0xc9, 0xdc, 0xdf, 0x0e, 0x92, 0x47, 0x0b, 0x3a, 0x94,
  0x75, 0x95, 0x19, 0x1c, 0xd5, 0x12, 0x5a, 0xfd, 0x2c, 0x53, 0x44, 0xe1,
  0x05, 0xb9, 0x23, 0x91, 0x59, 0xb1, 0x94, 0xd2, 0x79, 0x90, 0xea, 0xd0,
  0xc2, 0x15, 0xd6, 0x73, 0x3c, 0x40, 0x2d, 0x75, 0xca, 0x20, 0x0b, 0x73,
  0xbe, 0x24, 0x8b, 0xc6, 0x76, 0xbd, 0xf2, 0xa6, 0x84, 0x0a, 0xb8, 0x69,
  0xbd, 0xaf, 0xa3, 0xe8, 0x23, 0x9c, 0x58, 0x06, 0x73, 0x49, 0xb3, 0x02,
  0x86, 0x7f, 0x82, 0x95, 0x44, 0x7b, 0xc6, 0x94, 0x69, 0xeb, 0x46, 0xb8,
  0x22, 0x4e, 0x99, 0x4f, 0x28, 0x12, 0xe7, 0x94, 0xce, 0x93, 0xd7, 0xcd,
  0x30, 0x82, 0x0d, 0xc9, 0x41, 0x9b, 0xd3, 0x93, 0xd3, 0x47, 0xdb, 0xb6,
  0x72, 0x8f, 0xd1, 0xd8, 0xa4, 0x98, 0x3a, 0xd1, 0xdc, 0x60, 0x5b, 0x66,
  0xad, 0x58, 0xae, 0x54, 0xd2, 0x13, 0x1a, 0x83, 0xd3, 0x4c, 0x9b, 0x6f,
  0xd0, 0xf7, 0xc8, 0x43, 0xef, 0x52, 0xca, 0xbd, 0xbe, 0x69, 0xee, 0x5a,
  0x32, 0x4f, 0x40, 0x6a, 0xd8, 0x67, 0x21, 0x04, 0x85, 0x64, 0xe1, 0x08,
  0x7e, 0xc3, 0x90, 0x4a, 0x85, 0x92, 0x76, 0xfb, 0x01, 0xe4, 0x39, 0x77,
  0x26, 0xc9, 0x49, 0x0a, 0x91, 0xf4, 0x0f, 0xa9, 0xc8, 0x71, 0x0f, 0x52,
  0x04, 0x41, 0x0b, 0xa7, 0x58, 0xde, 0xda, 0x80, 0x2a, 0xdc, 0x9b, 0x20,
  0x36, 0xc9, 0x49, 0xaf, 0xae, 0x32, 0x83, 0xa3, 0x5a, 0x42, 0xab, 0x9f,
  0x65, 0x8a, 0x28, 0xbc, 0x20, 0x77, 0x24, 0x32, 0x2b, 0x96, 0x52, 0x3a,
  0x0f, 0x52, 0x1d, 0x5a, 0xb8, 0xc2, 0x7a, 0x8e, 0x07, 0xa8, 0xa5, 0x4e,
  0x19, 0x64, 0x61, 0xce, 0x97, 0x64, 0xd1, 0xd8, 0xae, 0x57, 0xde, 0x94,
  0x50, 0x01, 0x37, 0x4d, 0xc4, 0x29, 0xf3, 0x09, 0x45, 0xe2, 0x9c, 0xd2,
  0x79, 0xf2, 0xba, 0x19, 0x46, 0xb0, 0x21, 0x39, 0x68, 0x73, 0x7a, 0x72,
  0xfa, 0x68, 0xdb, 0x56, 0xee, 0x31, 0x1a, 0x9b, 0x14, 0x53, 0x27, 0x9a,
  0x1b, 0x6c, 0xcb, 0xac, 0x15, 0xcb, 0x95, 0x4a, 0x7a, 0x42, 0x63, 0x70,
  0x9a, 0x69, 0xf3, 0x0d, 0xfa, 0x1e, 0x79, 0xe8, 0x5d, 0x4a, 0xb9, 0xd7,
  0x37, 0xcd, 0x5d, 0x4b, 0xe6, 0x09, 0x48, 0x0d, 0xfb, 0x2c, 0x84, 0xa0,
  0x90, 0x2c, 0x1c, 0xc1, 0x6f, 0x18, 0x52, 0xa9, 0x50, 0xd2, 0x6e, 0x3f,
  0x80, 0x3c, 0xe7, 0xce, 0x24, 0x39, 0x49, 0x21, 0x92, 0xfe, 0x21, 0x15,
  0x39, 0xee, 0x41, 0x8a, 0x20, 0x68, 0xe1, 0x14, 0xcb, 0x5b, 0x1b, 0x50,
  0x5b, 0xc6, 0x5f, 0x1d, 0xf5, 0xf6, 0x8c, 0xb6, 0x18, 0xf8, 0x2d, 0x13,
  0x4a, 0x3a, 0x1c, 0xa5, 0xc9, 0xbb, 0xe3, 0xf1, 0xb9, 0x1f, 0xf5, 0x21,
  0x3d, 0x2c, 0x48, 0x7b, 0x6c, 0x83, 0x40, 0x79, 0xb9, 0x03, 0xc7, 0x47,
  0xe3, 0xf3, 0x51, 0x0c, 0xdd, 0xfd, 0x20, 0x19, 0x23, 0x33, 0xff, 0x8d,
  0x85, 0x7b, 0x13, 0x64, 0xcb, 0xf8, 0xab, 0xa3, 0xde, 0x9e, 0xd1, 0x16,
  0x03, 0xbf, 0x65, 0x42, 0x49, 0x87, 0xa3, 0x34, 0x79, 0x77, 0x3c, 0x3e,
  0xf7, 0xa3, 0x3e, 0xa4, 0x87, 0x05, 0x69, 0x8f, 0x6d, 0x10, 0x28, 0x2f,
  0x77, 0xe0, 0xf8, 0x68, 0x7c, 0x3e, 0x8a, 0xa1, 0xbb, 0x1f, 0x24, 0x63,
  0x97, 0xc4, 0xc1, 0x5d, 0x84, 0xa9, 0xa6, 0x8c, 0x43, 0x59, 0x94, 0x38,
  0x66, 0xc6, 0xcd, 0x2b, 0xbf, 0x81, 0x6e, 0x40, 0xa9, 0x98, 0xe2, 0x17,
  0x9c, 0xd2, 0x28, 0xe9, 0x90, 0x1a, 0xd6, 0xa9, 0x57, 0x93, 0xa1, 0x87,
  0xba, 0xc6, 0xfa, 0x0e, 0xb5, 0xf3, 0x31, 0xd4, 0x6b, 0x24, 0xd4, 0xc7,
  0xd0, 0x28, 0xdc, 0x12, 0x7a, 0x62, 0x42, 0x12, 0xbc, 0xbc, 0x96, 0x77,
  0x7a, 0x9a, 0x64, 0x84, 0xcf, 0x49, 0x7e, 0x21, 0x3c, 0xfd, 0x20, 0xa2,
  0xc2, 0x46, 0x74, 0xf6, 0x51, 0xfa, 0xbf, 0xb5, 0xb3, 0x9b, 0x11, 0x65,
  0xf3, 0x50, 0xc4, 0xd6, 0x05, 0x16, 0x3d, 0x2a, 0x54, 0x38, 0x3f, 0xa1,
  0x3a, 0x6e, 0x48, 0xcd, 0x4e, 0x22, 0x3b, 0xeb, 0x3e, 0xc0, 0xd0, 0x7c,
  0xc6, 0x98, 0x79, 0x75, 0x1b, 0x34, 0x8f, 0x0b, 0xa4, 0xc1, 0x72, 0xb8,
  0x59, 0x08, 0x3c, 0x19, 0x3d, 0x27, 0xc9, 0x3e, 0xb4, 0x56, 0x2a, 0xdb,
  0xf0, 0x47, 0x4e, 0x8e, 0xa4, 0xc0, 0xd6, 0x20, 0x06, 0xe6, 0x14, 0x83,
  0x20, 0xb1, 0x40, 0x0d, 0x45, 0xf2, 0xfe, 0xe8, 0xf5, 0xb1, 0xdd, 0x2f,
  0xd9, 0x1f, 0x4a, 0xb7, 0xb3, 0x4b, 0x45, 0x0a, 0xbc, 0x32, 0x4d, 0x3a,
  0x91, 0x20, 0x4a, 0xb3, 0x2a, 0x72, 0xf3, 0xfd, 0x84, 0x55, 0xd7, 0x0b,
  0x64, 0x7d, 0x57, 0xd4, 0xe3, 0x5b, 0xc5, 0xd8, 0x66, 0x6d, 0x5b, 0x5e,
  0x64, 0xe6, 0xbf, 0xf1, 0x92, 0x38, 0xb8, 0x8b, 0x30, 0xd5, 0x94, 0x71,
  0x28, 0x8b, 0x12, 0xc7, 0xcc, 0xb8, 0x79, 0xe5, 0x37, 0xd0, 0x0d, 0x28,
  0x15, 0x53, 0xfc, 0x03, 0xa7, 0x34, 0x4a, 0x3a, 0xa4, 0x86, 0x75, 0xea,
  0xd5, 0x64, 0xe8, 0xa1, 0xae, 0xb1, 0xbe, 0x43, 0xed, 0x7c, 0x0c, 0xf5,
  0x1a, 0x09, 0xf5, 0x31, 0x34, 0x0a, 0xb7, 0x84, 0x9e, 0x98, 0x90, 0x04,
  0x2f, 0xaf, 0xe5, 0x9d, 0x9e, 0x26, 0x19, 0xe1, 0x73, 0x92, 0x5f, 0x08,
  0x4f, 0x3f, 0x88, 0xa8, 0xb0, 0x11, 0x9d, 0x7d, 0x94, 0xfe, 0x6f, 0xed,
  0xec, 0x66, 0x44, 0xd9, 0x3c, 0x14, 0xb1, 0x75, 0x81, 0x45, 0x8f, 0x0a,
  0x15, 0xce, 0x4f, 0xa8, 0x8e, 0x1b, 0x52, 0xb3, 0x93, 0xc8, 0xce, 0xba,
  0x0f, 0x30, 0x34, 0x9f, 0x31, 0x66, 0x5e, 0xdd, 0x06, 0xcd, 0xe3, 0x02,
  0x69, 0xb0, 0x1c, 0x6e, 0x16, 0x02, 0x4f, 0x46, 0xcf, 0x49, 0xb2, 0x0f,
  0xad, 0x95, 0xca, 0x36, 0xfc, 0x81, 0x93, 0x23, 0x29, 0xb0, 0x35, 0x88,
  0x81, 0x39, 0xc5, 0x20, 0x48, 0x2c, 0x50, 0x43, 0x91, 0xbc, 0x3f, 0x7a,
  0x7d, 0x6c, 0xf7, 0x4b, 0xf6, 0x87, 0xd2, 0xed, 0xec, 0x52, 0x91, 0x02,
  0xaf, 0x4c, 0x93, 0x4e, 0x24, 0x88, 0xd2, 0xac, 0x8a, 0xdc, 0x7c, 0x3f,
  0x61, 0xd5, 0xf5, 0x02, 0x59, 0xdf, 0x15, 0xf5, 0xf8, 0x56, 0x31, 0xb6,
  0x59, 0xdb, 0x96, 0x57, 0xf9, 0x4c, 0x6e, 0xea, 0x47, 0x0d, 0x37, 0xf6,
  0xe5, 0x33, 0xb9, 0xa9, 0x1f, 0x35, 0xdc, 0xd8, 0x93, 0xab, 0xb8, 0x16,
  0x65, 0x61, 0xaf, 0x0d, 0x85, 0x48, 0x88, 0xa8, 0x02, 0x5c, 0x64, 0xc4,
  0xd1, 0x0e, 0x95, 0x3a, 0x05, 0xca, 0x45, 0xc6, 0x50, 0xd2, 0x2e, 0x85,
  0xa6, 0x0d, 0xc9, 0x51, 0x56, 0x52, 0x22, 0xb5, 0xf5, 0xe6, 0xec, 0xe4,
  0xe4, 0x2a, 0xae, 0x45, 0x59, 0xd8, 0x6b, 0x43, 0x21, 0x12, 0x22, 0xaa,
  0x00, 0x17, 0x19, 0x71, 0xb4, 0x43, 0xa5, 0x4e, 0x81, 0x72, 0x91, 0x31,
  0x94, 0xb4, 0x4b, 0xa1, 0x69, 0x43, 0x72, 0x94, 0x95, 0x94, 0x48, 0x6d,
  0xed, 0xf0, 0xfc, 0x84, 0x1a, 0x63, 0xd3, 0xd0, 0x49, 0x44, 0xdf, 0xe4,
  0xb7, 0x6a, 0xbf, 0xbb, 0x77, 0x3b, 0xd7, 0x6c, 0xab, 0xde, 0xd6, 0xe6,
  0xbd, 0x39, 0x3b, 0x79, 0x3b, 0x3c, 0x3f, 0xa1, 0xc6, 0xd8, 0x34, 0x74,
  0xdb, 0x24, 0x50, 0x68, 0x7a, 0xfa, 0x56, 0xd0, 0xea, 0xa0, 0x60, 0x4d,
  0x84, 0x1c, 0x0f, 0x86, 0x96, 0xa6, 0x29, 0x14, 0x46, 0x1b, 0x79, 0xa2,
  0x12, 0xd1, 0x37, 0xf9, 0xad, 0xda, 0xef, 0xee, 0xdd, 0xce, 0x35, 0xdb,
  0xaa, 0xb7, 0xb5, 0xf9, 0x36, 0x09, 0x14, 0x9a, 0x9e, 0xbe, 0x15, 0xb4,
  0x01, 0x94, 0x75, 0x4f, 0x56, 0xf5, 0x5d, 0x22, 0x85, 0x68, 0x35, 0x27,
  0x46, 0x36, 0xa1, 0x3b, 0x5f, 0x91, 0xbd, 0x2c, 0xa8, 0x09, 0x0a, 0x74,
  0xb8, 0x02, 0xa4, 0x29, 0xcd, 0xed, 0x4d, 0xab, 0xaa, 0xbc, 0x51, 0xb9,
  0x45, 0x65, 0xa2, 0xe6, 0x18, 0xcd, 0xd4, 0x71, 0x4e, 0xd5, 0x5d, 0x2f,
  0x3a, 0x28, 0x58, 0x13, 0x21, 0xc7, 0x83, 0xa1, 0xa5, 0x69, 0x0a, 0x85,
  0xd1, 0x46, 0x9e, 0x68, 0x00, 0x65, 0xdd, 0x93, 0x55, 0x7d, 0x97, 0x48,
  0x21, 0x5a, 0xcd, 0x89, 0x91, 0x4d, 0xe8, 0xce, 0x57, 0x64, 0x2f, 0x0b,
  0x6a, 0x82, 0x02, 0x1d, 0xae, 0x00, 0x69, 0x4a, 0x73, 0x7b, 0xd3, 0xaa,
  0x2a, 0x6f, 0x54, 0x6e, 0x51, 0x99, 0xa8, 0x39, 0x46, 0x33, 0x75, 0x9c,
  0x12, 0x84, 0x80, 0x1b, 0x69, 0x97, 0xe1, 0xb5, 0xea, 0xdf, 0x93, 0x76,
  0x7d, 0xbe, 0x66, 0x8b, 0x0e, 0x9b, 0x6a, 0x55, 0x87, 0x0d, 0xcb, 0x35,
  0x4f, 0xe7, 0x98, 0x42, 0xc3, 0x48, 0x30, 0xf5, 0xde, 0x19, 0x08, 0x00,
  0x1b, 0xf0, 0x3a, 0xa8, 0x35, 0x94, 0xad, 0xe6, 0xd1, 0x26, 0x25, 0x7f,
  0x08, 0x6e, 0xb0, 0xc0, 0xb2, 0x42, 0xa9, 0x47, 0xcb, 0x47, 0x4a, 0x31,
  0x75, 0x3d, 0xfb, 0xf2, 0x86, 0x7b, 0xf5, 0x69, 0x06, 0x28, 0x01, 0x2f,
  0x11, 0x37, 0xc0, 0x4f, 0x03, 0x5d, 0x52, 0x11, 0x55, 0x72, 0x54, 0xb3,
  0x53, 0x75, 0xd7, 0x8b, 0x04, 0x21, 0xe0, 0x46, 0xda, 0x65, 0x78, 0xad,
  0xfa, 0xf7, 0xa4, 0x5d, 0x9f, 0xaf, 0xd9, 0xa2, 0xc3, 0xa6, 0x5a, 0xd5,
  0x61, 0xc3, 0x72, 0xcd, 0xd3, 0x39, 0xa6, 0xd0, 0x30, 0x12, 0x4c, 0xbd,
  0x77, 0x06, 0x02, 0xc0, 0x06, 0xbc, 0x0e, 0x6a, 0x0d, 0x65, 0xab, 0x79,
  0xb4, 0x49, 0xc9, 0xef, 0x83, 0x1b, 0x2c, 0xb0, 0xac, 0x50, 0xea, 0xd1,
  0xf2, 0x91, 0x52, 0x4c, 0x5d, 0xcf, 0xbe, 0xbc, 0xe1, 0x5e, 0x7d, 0x9a,
  0x01, 0x4a, 0xc0, 0x4b, 0xc4, 0x0d, 0xf0, 0xd3, 0x40, 0x97, 0x54, 0x44,
  0xcf, 0x56, 0x53, 0x3a, 0x25, 0x84, 0xe8, 0xd0, 0x0a, 0x70, 0xc2, 0x18,
  0x8f, 0x5a, 0x10, 0x8e, 0xa1, 0x5d, 0x6a, 0x2d, 0x7b, 0x5c, 0xba, 0x5a,
  0x16, 0x3f, 0x65, 0xbb, 0x1b, 0x41, 0x95, 0x44, 0xe6, 0x4e, 0xc6, 0x6a,
  0x65, 0xd5, 0x35, 0x39, 0x11, 0x04, 0xb2, 0xed, 0x55, 0x23, 0xec, 0x0a,
  0x00, 0xdb, 0x04, 0x2d, 0x2c, 0x51, 0x7a, 0xa0, 0xe0, 0x81, 0x7c, 0x29,
  0x4a, 0xfe, 0x75, 0x5a, 0x1b, 0xb6, 0xd4, 0x1e, 0x71, 0x7b, 0x8d, 0x3f,
  0x79, 0xa5, 0x49, 0xd8, 0xde, 0xe9, 0xb5, 0xf2, 0x7d, 0x7b, 0x4e, 0xee,
  0xe8, 0xc2, 0x6f, 0x62, 0x24, 0xd9, 0x14, 0xde, 0x9e, 0x0b, 0x97, 0x22,
  0x98, 0xb6, 0x4b, 0x6e, 0x55, 0x8e, 0x4c, 0xd9, 0x59, 0xac, 0x06, 0x47,
  0x7b, 0xbf, 0x35, 0x89, 0x7e, 0x34, 0xd9, 0xd2, 0x2a, 0x31, 0x5b, 0xb5,
  0x70, 0x2c, 0xbf, 0x3a, 0xb0, 0x65, 0x6c, 0xe0, 0x69, 0x9d, 0xe1, 0x1e,
  0xfd, 0xf8, 0x63, 0xd2, 0x6e, 0xd6, 0xba, 0xdd, 0x57, 0x39, 0x2f, 0x09,
  0xec, 0xb3, 0xd2, 0x9f, 0x6e, 0x50, 0x83, 0xc3, 0x34, 0x67, 0x14, 0x02,
  0x4a, 0xf7, 0x25, 0xdf, 0x8b, 0x78, 0x89, 0x8c, 0xf5, 0x77, 0xa5, 0x45,
  0x19, 0x94, 0x70, 0xe1, 0x32, 0x2e, 0x90, 0xd1, 0x4c, 0x05, 0x61, 0x61,
  0x5a, 0x12, 0x31, 0x5c, 0x4d, 0x96, 0xe0, 0x20, 0x08, 0xe5, 0xaf, 0xfa,
  0x9b, 0xe5, 0xda, 0x79, 0xd7, 0x57, 0x08, 0x06, 0x08, 0xa8, 0xeb, 0xbd,
  0x0d, 0x65, 0x19, 0x27, 0x80, 0xd6, 0x45, 0x02, 0x9f, 0xe1, 0xe7, 0x39,
  0xe7, 0x6d, 0x5a, 0x65, 0xe2, 0x6b, 0x10, 0xf5, 0x29, 0x06, 0x20, 0x08,
  0x80, 0x0f, 0x49, 0xc2, 0x1e, 0xd1, 0x09, 0xa7, 0xde, 0x8d, 0x71, 0xe8,
  0x6c, 0x9d, 0x33, 0xe3, 0x9c, 0xed, 0xb0, 0x7b, 0x7d, 0x09, 0xfd, 0x09,
  0xf5, 0xf2, 0x04, 0x30, 0x55, 0xb2, 0x53, 0x4b, 0x1a, 0x8d, 0xb2, 0xb4,
  0xf9, 0x83, 0xde, 0xdb, 0x51, 0x3b, 0x80, 0x05, 0x2a, 0x88, 0xc5, 0x2c,
  0x95, 0x99, 0xd0, 0xc1, 0x00, 0x08, 0x14, 0xd5, 0xc7, 0xda, 0xbf, 0x08,
  0xbe, 0x5d, 0x8d, 0x6a, 0xb3, 0x3e, 0x4d, 0x65, 0xeb, 0xdc, 0x45, 0x3c,
  0x00, 0xa5, 0x75, 0x57, 0x16, 0x49, 0x37, 0xe4, 0xa7, 0x74, 0x18, 0x56,
  0xec, 0xdb, 0x32, 0x26, 0xe9, 0x90, 0x1e, 0xab, 0xfb, 0xf2, 0x43, 0x5c,
  0x98, 0x4b, 0x3a, 0x2d, 0xf8, 0x1b, 0xa6, 0x4e, 0x32, 0x0b, 0x90, 0x20,
  0x35, 0x29, 0x02, 0xd9, 0x8f, 0xf2, 0xfc, 0xee, 0xd5, 0xf2, 0x43, 0x7d,
  0x84, 0x47, 0x60, 0xfe, 0x7d, 0xfa, 0xfe, 0x7c, 0xdb, 0xf5, 0xa3, 0x17,
  0x6a, 0xf5, 0x73, 0xda, 0xa5, 0xd6, 0x2d, 0x4c, 0xdb, 0x67, 0x04, 0x00,
  0xe1, 0x53, 0x92, 0xbd, 0x23, 0x17, 0x03, 0x2e, 0x96, 0x47, 0xbb, 0x7b,
  0xc6, 0x8e, 0xda, 0xdd, 0xa7, 0xe6, 0xb4, 0x8f, 0x76, 0x1f, 0xd9, 0xa2,
  0x69, 0x7d, 0x2a, 0x84, 0xb4, 0xe7, 0x17, 0xc9, 0x6b, 0x42, 0xb4, 0xff,
  0xe8, 0xf6, 0x96, 0x7e, 0xdc, 0x4e, 0xc5, 0x1e, 0xda, 0xf2, 0x25, 0x7f,
  0x9a, 0x51, 0xb9, 0xef, 0xed, 0x37, 0x85, 0xe2, 0x56, 0x05, 0x17, 0x0b,
  0x95, 0x1c, 0xd5, 0xec, 0xb3, 0xd5, 0x94, 0x4e, 0x09, 0x21, 0x3a, 0xb4,
  0x02, 0x9c, 0x30, 0xc6, 0xa3, 0x16, 0x84, 0x63, 0x68, 0x97, 0x5a, 0xcb,
  0x1e, 0x97, 0xae, 0x96, 0xc5, 0x4f, 0xd9, 0xee, 0x46, 0x50, 0x25, 0x91,
  0xb9, 0x93, 0xb1, 0x5a, 0x59, 0x75, 0x4d, 0x4e, 0x04, 0x81, 0x6c, 0x7b,
  0xd5, 0x08, 0xbb, 0x02, 0xc0, 0x36, 0x41, 0x0b, 0x4b, 0x94, 0x1e, 0x28,
  0x78, 0x20, 0x5f, 0x8a, 0x92, 0x7f, 0x95, 0xd6, 0x86, 0x2d, 0xb5, 0x47,
  0xdc, 0x5e, 0xe3, 0x4f, 0x5e, 0x69, 0x12, 0xb6, 0x77, 0x7a, 0xad, 0x7c,
  0xdf, 0x9e, 0x93, 0x3b, 0xba, 0xf0, 0x9b, 0x18, 0x49, 0x36, 0x85, 0xb7,
  0xe7, 0xc2, 0xa5, 0x08, 0xa6, 0xed, 0x92, 0x5b, 0x95, 0x23, 0x53, 0x76,
  0x16, 0xab, 0xc1, 0xd1, 0xde, 0x6f, 0x4d, 0xa2, 0x1f, 0x4d, 0xb6, 0xb4,
  0x4a, 0xcc, 0x56, 0x2d, 0x1c, 0xcb, 0xaf, 0x0e, 0x6c, 0x19, 0x1b, 0x78,
  0x5a, 0x67, 0xb8, 0x47, 0x3f, 0xfc, 0x90, 0xb4, 0x9b, 0xb5, 0x6e, 0xf7,
  0x55, 0xce, 0x4b, 0x02, 0xfb, 0xac, 0xf4, 0xa7, 0x1b, 0xd4, 0xe0, 0x30,
  0xcd, 0x19, 0x85, 0x80, 0xd2, 0x7d, 0xc9, 0xf7, 0x22, 0x5e, 0x22, 0x63,
  0xfd, 0x5d, 0x69, 0x51, 0x06, 0x25, 0x5c, 0xb8, 0x8c, 0x0b, 0x64, 0x34,
  0x53, 0x41, 0x58, 0x98, 0x96, 0x44, 0x0c, 0x57, 0x93, 0x25, 0x38, 0x08,
  0x42, 0xf9, 0xab, 0xfe, 0x66, 0xb9, 0x76, 0xde, 0xf5, 0x15, 0x82, 0x01,
  0x02, 0xea, 0x7a, 0x6f, 0x43, 0x59, 0xc6, 0x09, 0xa0, 0x75, 0x91, 0xc0,
  0x67, 0xf8, 0x79, 0xce, 0x79, 0x9b, 0x56, 0x99, 0xf8, 0x1a, 0x44, 0x7d,
  0x8a, 0x01, 0x08, 0x02, 0xe0, 0x43, 0x92, 0xb0, 0x47, 0x74, 0xc2, 0xa9,
  0x77, 0x63, 0x1c, 0x3a, 0x5b, 0xe7, 0xcc, 0x38, 0x67, 0x3b, 0xec, 0x5e,
  0x5f, 0x42, 0x7f, 0x42, 0xbd, 0x3c, 0x01, 0x4c, 0x95, 0xec, 0xd4, 0x92,
  0x46, 0xa3, 0x2c, 0x6d, 0x7e, 0xaf, 0xf7, 0x76, 0xd4, 0x0e, 0x60, 0x81,
  0x0a, 0x62, 0x31, 0x4b, 0x65, 0x26, 0x74, 0x30, 0x00, 0x02, 0x45, 0xf5,
  0xb1, 0xf6, 0x2f, 0x82, 0x6f, 0x57, 0xa3, 0xda, 0xac, 0x4f, 0x53, 0xd9,
  0x3a, 0x77, 0x11, 0x0f, 0x40, 0x69, 0xdd, 0x95, 0x45, 0xd2, 0x0d, 0xf9,
  0x29, 0x1d, 0x86, 0x15, 0xfb, 0xb6, 0x8c, 0x49, 0x3a, 0xa4, 0xc7, 0xea,
  0xbe, 0xfc, 0x10, 0x17, 0xe6, 0x92, 0x4e, 0x0b, 0xfe, 0x86, 0xa9, 0x93,
  0xcc, 0x02, 0x24, 0x48, 0x4d, 0x8a, 0x40, 0xf6, 0xa3, 0x3c, 0xbf, 0x7b,
  0xb5, 0xfc, 0x50, 0x1f, 0xe1, 0x11, 0x98, 0x7f, 0x9f, 0xbe, 0x3f, 0xdf,
  0x76, 0xfd, 0xe8, 0x85, 0x5a, 0xfd, 0x9c, 0x76, 0xa9, 0x75, 0x0b, 0xd3,
  0xf6, 0x19, 0x01, 0x40, 0xf8, 0x94, 0x64, 0xef, 0xc8, 0xc5, 0x80, 0x8b,
  0xe5, 0xd1, 0xee, 0x9e, 0xb1, 0xa3, 0x76, 0xf7, 0xa9, 0x39, 0xed, 0xa3,
  0xdd, 0x47, 0xb6, 0x68, 0x5a, 0x9f, 0x0a, 0x21, 0xed, 0xf9, 0x45, 0xf2,
  0x9a, 0x10, 0xed, 0x3f, 0xba, 0xbd, 0xa5, 0x1f, 0xb7, 0x53, 0xb1, 0x87,
  0xb6, 0x7c, 0xc9, 0x9f, 0x66, 0x54, 0xee, 0x7b, 0xfb, 0x4d, 0xa1, 0xb8,
  0x55, 0xc1, 0xc5, 0x82, 0xd4, 0xfc, 0x17, 0x18, 0x03, 0xa3, 0xbe, 0x36,
  0x56, 0x4d, 0x17, 0x46, 0xc9, 0xef, 0x63, 0x65, 0x28, 0x05, 0x4b, 0xb7,
  0x52, 0xf3, 0x5f, 0x60, 0x0c, 0x8c, 0xfa, 0xda, 0x58, 0x35, 0x5d, 0x18,
  0x25, 0xbf, 0x8f, 0x95, 0xa1, 0x14, 0x2c, 0xdd, 0x6e, 0x8e, 0x02, 0x16,
  0x84, 0xac, 0x99, 0x1e, 0xe3, 0xfa, 0x08, 0xa8, 0x0b, 0x8f, 0x76, 0x6f,
  0x7d, 0xa5, 0xb8, 0x45, 0x10, 0x46, 0xd4, 0x09, 0x43, 0xd2, 0xcc, 0xfb,
  0xd0, 0x09, 0x01, 0xee, 0x77, 0x80, 0xbc, 0x0e, 0x73, 0x25, 0x68, 0x7f,
  0x9b, 0xa3, 0x80, 0x05, 0x21, 0x6b, 0xa6, 0xc7, 0xb8, 0x3e, 0x02, 0xea,
  0xc2, 0xa3, 0xdd, 0x5b, 0x5f, 0x29, 0x6e, 0x11, 0x84, 0x11, 0x75, 0xc2,
  0x90, 0x34, 0xf3, 0x3e, 0x74, 0x42, 0x80, 0xfb, 0x1d, 0x20, 0xaf, 0xc3,
  0x5c, 0x09, 0xda, 0x5f, 0xfd, 0xeb, 0xbe, 0xe4, 0x76, 0xf0, 0xbf, 0x1e,
  0xb5, 0x25, 0x25, 0xdc, 0xc3, 0x3a, 0xe6, 0x0b, 0xf9, 0x4b, 0xe0, 0xab,
  0xf5, 0xaf, 0xfb, 0x92, 0xdb, 0xc1, 0xff, 0x7a, 0xd4, 0x96, 0x94, 0x70,
  0x0f, 0xeb, 0x98, 0x2f, 0xe4, 0x2f, 0x81, 0xaf, 0x92, 0x7a, 0x92, 0x42,
  0x31, 0xa6, 0x66, 0x12, 0xdb, 0xd6, 0x7d, 0x42, 0x06, 0x1f, 0x86, 0xb0,
  0xd3, 0x12, 0x25, 0x45, 0x9a, 0x3d, 0x0b, 0x83, 0xee, 0xd2, 0x46, 0x4b,
  0x3e, 0x8c, 0xfa, 0xfb, 0x0d, 0xa9, 0x2e, 0x18, 0x7c, 0x42, 0x73, 0x22,
  0x6c, 0x7d, 0xb1, 0x55, 0x89, 0xcb, 0x65, 0xec, 0xee, 0x8a, 0x68, 0x80,
  0x68, 0x55, 0x4f, 0xbb, 0xcc, 0xb0, 0x33, 0x17, 0xa3, 0x56, 0x34, 0xa4,
  0xb8, 0xd5, 0x52, 0x54, 0x17, 0x98, 0xa8, 0xd8, 0x8a, 0x01, 0xdb, 0xa8,
  0xdc, 0x94, 0x19, 0xdd, 0x35, 0x34, 0x31, 0xb2, 0x35, 0x51, 0x0e, 0x5d,
  0xa4, 0x9e, 0xa4, 0x50, 0x8c, 0xa9, 0x99, 0xc4, 0xb6, 0x75, 0x9f, 0x90,
  0xc1, 0x87, 0x21, 0xec, 0xb4, 0x44, 0x49, 0x91, 0x66, 0xcf, 0xc2, 0xa0,
  0xbb, 0xb4, 0xd1, 0x92, 0x0f, 0xa3, 0xfe, 0x7e, 0x43, 0xaa, 0x0b, 0x06,
  0x9f, 0xd0, 0x9c, 0x08, 0x5b, 0x5f, 0x6c, 0x55, 0xe2, 0x72, 0x19, 0xbb,
  0xbb, 0x22, 0x1a, 0x20, 0x5a, 0xd5, 0xd3, 0x2e, 0x33, 0xec, 0xcc, 0xc5,
  0xa8, 0x15, 0x0d, 0x29, 0x6e, 0xb5, 0x14, 0xd5, 0x05, 0x26, 0x2a, 0xb6,
  0x62, 0xc0, 0x36, 0x2a, 0x37, 0x65, 0x46, 0x77, 0x0d, 0x4d, 0x8c, 0x6c,
  0x4d, 0x94, 0x43, 0x17, 0x04, 0x06, 0x2b, 0x99, 0x15, 0x11, 0x89, 0xc6,
  0x10, 0x18, 0xac, 0x64, 0x56, 0x44, 0x24, 0x1a, 0x67, 0x55, 0x84, 0x8b,
  0x5c, 0x22, 0x51, 0x3c, 0x23, 0x9d, 0x5f, 0xfa, 0xc6, 0x3e, 0x1e, 0xd0,
  0xdf, 0x9e, 0xec, 0x3e, 0xdf, 0x57, 0x44, 0x83, 0xc3, 0xf3, 0x37, 0x5d,
  0x67, 0x5e, 0x65, 0xe8, 0x89, 0xff, 0x3b, 0xcc, 0xd2, 0xea, 0xca, 0x18,
  0x17, 0x80, 0x55, 0x19, 0x02, 0xab, 0x7f, 0xb8, 0xbb, 0x1b, 0x4b, 0xb4,
  0xf8, 0x84, 0xa5, 0xe4, 0x8f, 0x1e, 0xb7, 0x63, 0x70, 0x50, 0xe9, 0x87,
  0xd8, 0xf1, 0x7e, 0xd4, 0x4f, 0xa6, 0x2f, 0xe7, 0x9f, 0x73, 0xc0, 0xd0,
  0xf2, 0x46, 0x2b, 0xc8, 0x1e, 0x64, 0xc9, 0xc4, 0xba, 0xc3, 0x74, 0x5c,
  0xea, 0x92, 0x4c, 0xb4, 0xc5, 0x36, 0x44, 0x73, 0xb7, 0xcd, 0x7e, 0x6b,
  0x7c, 0x88, 0x3a, 0x43, 0x11, 0x8b, 0x17, 0x23, 0x22, 0x5a, 0x64, 0x5b,
  0x4b, 0x9d, 0x51, 0x95, 0x01, 0x9e, 0x89, 0xd5, 0x3e, 0x69, 0xb1, 0x73,
  0x3f, 0xc4, 0x14, 0x6d, 0x41, 0x35, 0x5d, 0x4a, 0xc1, 0x19, 0xff, 0x1b,
  0xa2, 0xb8, 0x95, 0xf0, 0xba, 0xff, 0x24, 0xb2, 0x71, 0x24, 0xb0, 0x7f,
  0xc1, 0xc6, 0xb5, 0xf7, 0xcd, 0x29, 0x47, 0xec, 0xc2, 0x23, 0x83, 0x57,
  0x22, 0x05, 0x21, 0xf4, 0x4f, 0xad, 0x2d, 0x60, 0x7f, 0xf1, 0x5a, 0xb0,
  0xdd, 0xa3, 0x75, 0x40, 0x75, 0xee, 0xad, 0x7b, 0xd6, 0x32, 0xb6, 0x89,
  0x4f, 0xed, 0x95, 0x0c, 0x5c, 0x97, 0x04, 0x48, 0x8f, 0x85, 0x34, 0x81,
  0x22, 0x5f, 0x03, 0x45, 0x20, 0xbb, 0x20, 0x12, 0xd9, 0x32, 0xa3, 0xa5,
  0xfb, 0x89, 0x06, 0x1e, 0x71, 0x5b, 0x1b, 0x15, 0x65, 0xc5, 0x5a, 0x3c,
  0x65, 0xa4, 0x68, 0xbe, 0x04, 0x3a, 0x40, 0x1d, 0xf5, 0xb3, 0xb4, 0x3b,
  0xbd, 0xd3, 0x5e, 0xaa, 0x4f, 0x76, 0x20, 0x72, 0x4c, 0xde, 0xd7, 0x3d,
  0xb6, 0x69, 0x5c, 0x61, 0x01, 0x2d, 0xcc, 0x75, 0x1a, 0xc2, 0x1e, 0x55,
  0xe9, 0xaa, 0x70, 0x79, 0xec, 0x32, 0x2e, 0xfe, 0xfd, 0x59, 0x38, 0xd2,
  0xe6, 0x04, 0x45, 0xd5, 0x65, 0xbf, 0x3f, 0x7b, 0xf3, 0x27, 0x35, 0xbb,
  0xb7, 0x07, 0x7d, 0x96, 0xb0, 0xce, 0xd6, 0x2f, 0x95, 0xf2, 0x92, 0xf7,
  0xa4, 0x62, 0xbc, 0xb5, 0xf1, 0xee, 0x1f, 0x61, 0x9e, 0x37, 0xc3, 0x9e,
  0x26, 0x5b, 0x08, 0xb3, 0x99, 0xa7, 0xc6, 0x62, 0xd2, 0x3d, 0x1a, 0x3d,
  0x21, 0x8f, 0xc8, 0x9b, 0x57, 0x4f, 0x1e, 0xed, 0xef, 0x19, 0xab, 0x75,
  0xab, 0xc3, 0x2d, 0xb6, 0xef, 0x5d, 0x66, 0xfb, 0xbc, 0xb3, 0xdb, 0x25,
  0x68, 0x6f, 0xeb, 0xf0, 0xc7, 0xd3, 0x77, 0x9d, 0x45, 0xd2, 0x09, 0x04,
  0x81, 0xd4, 0x35, 0x6b, 0x74, 0xd2, 0x36, 0x20, 0x29, 0xe9, 0x6e, 0x1b,
  0x86, 0x2a, 0xdf, 0x54, 0x39, 0xf4, 0xdc, 0x0d, 0xec, 0xc7, 0xc6, 0x71,
  0x59, 0xcc, 0x8c, 0xf4, 0x3f, 0x01, 0x9c, 0x57, 0xb6, 0x61, 0x64, 0xc9,
  0xbd, 0xab, 0xeb, 0xbf, 0x26, 0x6f, 0x07, 0x74, 0x55, 0x8a, 0x30, 0x25,
  0xe5, 0x2d, 0xfd, 0x90, 0xd0, 0x53, 0x01, 0x84, 0xc0, 0x35, 0x66, 0x2b,
  0x58, 0x39, 0x70, 0xef, 0xc2, 0x34, 0x6b, 0xdf, 0xb6, 0x5b, 0x6a, 0x5e,
  0x42, 0x1e, 0x9f, 0x17, 0xe4, 0xd0, 0xee, 0x8b, 0x85, 0xf0, 0xca, 0x39,
  0x59, 0x15, 0xe1, 0x22, 0x97, 0x48, 0x14, 0xcf, 0x48, 0xe7, 0x97, 0xbe,
  0xb1, 0x8f, 0x07, 0xf4, 0xb7, 0x27, 0xbb, 0xcf, 0xf7, 0x15, 0xd1, 0xe0,
  0xf0, 0xfc, 0x4d, 0xd7, 0x99, 0x57, 0x19, 0x7a, 0xe2, 0xff, 0x0e, 0xb3,
  0xb4, 0xba, 0x32, 0xc6, 0x05, 0x60, 0x55, 0x86, 0xc0, 0xea, 0x1f, 0xee,
  0xee, 0xc6, 0x12, 0x2d, 0x3e, 0x61, 0x29, 0xf9, 0xa3, 0xc7, 0xed, 0x18,
  0x1c, 0x54, 0xfa, 0x21, 0x76, 0xbc, 0x1f, 0xf5, 0x93, 0xe9, 0xcb, 0xf9,
  0xe7, 0x1c, 0x30, 0xb4, 0xbc, 0xd1, 0x0a, 0xb2, 0x07, 0x59, 0x32, 0xb1,
  0xee, 0x30, 0x1d, 0x97, 0xba, 0x24, 0x13, 0x6d, 0xb1, 0x0d, 0xd1, 0xdc,
  0x6d, 0xb3, 0xdf, 0x1a, 0x1f, 0xa2, 0xce, 0x50, 0xc4, 0xe2, 0xc5, 0x88,
  0x88, 0x16, 0xd9, 0xd6, 0x52, 0x67, 0x54, 0x65, 0x80, 0x67, 0x62, 0xb5,
  0x4f, 0x5a, 0xec, 0xdc, 0x0f, 0x31, 0x45, 0x5b, 0x50, 0x4d, 0x97, 0x52,
  0x70, 0xc6, 0xff, 0x86, 0x28, 0x6e, 0x25, 0xbc, 0xee, 0x3f, 0x89, 0x6c,
  0x1c, 0x09, 0xec, 0x9f, 0xb1, 0x71, 0xed, 0x7d, 0x73, 0xca, 0x11, 0xbb,
  0xf0, 0xc8, 0xe0, 0x95, 0x48, 0x41, 0x08, 0xfd, 0x53, 0x6b, 0x0b, 0xd8,
  0x9f, 0xbd, 0x16, 0x6c, 0xf7, 0x68, 0x1d, 0x50, 0x9d, 0x7b, 0xeb, 0x9e,
  0xb5, 0x8c, 0x6d, 0xe2, 0x53, 0x7b, 0x25, 0x03, 0xd7, 0x25, 0x01, 0xd2,
  0x63, 0x21, 0x4d, 0xa0, 0xc8, 0xd7, 0x40, 0x11, 0xc8, 0x2e, 0x88, 0x44,
  0xb6, 0xcc, 0x68, 0xe9, 0x7e, 0xa2, 0x81, 0x47, 0xdc, 0xd6, 0x46, 0x45,
  0x59, 0xb1, 0x16, 0x4f, 0x19, 0x29, 0x9a, 0x2f, 0x81, 0x0e, 0x50, 0x47,
  0xfd, 0x2c, 0xed, 0x4e, 0xef, 0xb4, 0x97, 0xea, 0x93, 0x1d, 0x88, 0x1c,
  0x93, 0xf7, 0x75, 0x8f, 0x6d, 0x1a, 0x57, 0x58, 0x40, 0x0b, 0x73, 0x9d,
  0x86, 0xb0, 0x47, 0x55, 0xba, 0x2a, 0x5c, 0x1e, 0xbb, 0x8c, 0x8b, 0x7f,
  0x7f, 0x16, 0x8e, 0xb4, 0x39, 0x41, 0x51, 0x75, 0xd9, 0xef, 0xce, 0xde,
  0xfc, 0x49, 0xcd, 0xee, 0xed, 0x41, 0x9f, 0x25, 0xac, 0xb3, 0xf5, 0x4b,
  0xa5, 0xbc, 0xe4, 0x3d, 0xa9, 0x18, 0x6f, 0x6d, 0xbc, 0xfb, 0x47, 0x98,
  0xe7, 0xcd, 0xb0, 0xa7, 0xc9, 0x16, 0xc2, 0x6c, 0xe6, 0xa9, 0xb1, 0x98,
  0x74, 0x8f, 0x46, 0x4f, 0xc8, 0x23, 0xf2, 0xe6, 0xd5, 0x93, 0x47, 0xfb,
  0x7b, 0xc6, 0x6a, 0xdd, 0xea, 0x70, 0x8b, 0xed, 0x7b, 0x97, 0xd9, 0x3e,
  0xef, 0xec, 0x76, 0x09, 0xda, 0xdb, 0x3a, 0xfc, 0xe1, 0xf4, 0x5d, 0x67,
  0x91, 0x74, 0x02, 0x41, 0x20, 0x75, 0xcd, 0x1a, 0x9d, 0xb4, 0x0d, 0x48,
  0x4a, 0xba, 0xdb, 0x86, 0xa1, 0xca, 0x37, 0x55, 0x0e, 0x3d, 0x77, 0x03,
  0xfb, 0xb1, 0x71, 0x5c, 0x16, 0x33, 0x23, 0xfd, 0x4f, 0x00, 0xe7, 0x95,
  0x6d, 0x18, 0x59, 0x72, 0xef, 0xea, 0xfa, 0xaf, 0xc9, 0xdb, 0x01, 0x5d,
  0x95, 0x22, 0x4c, 0x49, 0x79, 0x4b, 0x3f, 0x24, 0xf4, 0x54, 0x00, 0x21,
  0x70, 0x8d, 0xd9, 0x0a, 0x56, 0x0e, 0xdc, 0xbb, 0x30, 0xcd, 0xda, 0xb7,
  0xed, 0x96, 0x9a, 0x97, 0x90, 0xc7, 0xe7, 0x05, 0x39, 0xb4, 0xfb, 0x62,
  0x21, 0xbc, 0x72, 0x8e, 0x84, 0xd0, 0xe3, 0x5b, 0xea, 0xd4, 0xdf, 0xf6,
  0x12, 0x42, 0x8f, 0x6f, 0xa9, 0x53, 0x7f, 0xdb, 0x6b, 0xfd, 0x4c, 0xfa,
  0xbb, 0x86, 0x3a, 0x48, 0x51, 0x8f, 0x75, 0xd8, 0xa6, 0x47, 0x9d, 0x61,
  0x91, 0xb7, 0x93, 0xd8, 0xe9, 0x2a, 0x52, 0xe5, 0xf8, 0xa0, 0x0d, 0x74,
  0x16, 0xf1, 0x81, 0x53, 0xc8, 0x9f, 0xba, 0x73, 0xa5, 0x45, 0x1b, 0x13,
  0x12, 0x85, 0xcf, 0x6c, 0x01, 0x65, 0xb7, 0xd4, 0x70, 0xd1, 0xa8, 0x88,
  0x4f, 0x1f, 0x45, 0x6a, 0xb8, 0x68, 0x31, 0xa2, 0xdb, 0x55, 0xbe, 0x12,
  0xc0, 0x12, 0x5a, 0x94, 0xde, 0x81, 0x17, 0x84, 0x40, 0x0c, 0x82, 0xcc,
  0xa8, 0xcd, 0xef, 0x36, 0xa3, 0xd1, 0x37, 0x0e, 0x4a, 0xf0, 0x5a, 0xc5,
  0xab, 0x83, 0x3b, 0x42, 0x81, 0x09, 0x89, 0x34, 0x50, 0x24, 0x82, 0x07,
  0x79, 0xbb, 0x99, 0xd8, 0x60, 0x44, 0xd7, 0xda, 0xbf, 0x37, 0x34, 0x91,
  0x37, 0xf1, 0x58, 0x04, 0x07, 0x23, 0xba, 0x26, 0xa8, 0x0d, 0x4d, 0xb4,
  0x88, 0xef, 0xc9, 0xe7, 0x11, 0xe2, 0x7b, 0x77, 0x72, 0x7e, 0x78, 0x20,
  0x79, 0xd4, 0x0e, 0x39, 0x43, 0x2d, 0x05, 0xce, 0x25, 0xe3, 0xb6, 0xcf,
  0x5c, 0x59, 0x44, 0xf8, 0x8e, 0x7c, 0xee, 0x83, 0xc8, 0x95, 0xa7, 0xa4,
  0x6e, 0xdc, 0x12, 0xf6, 0xf4, 0x36, 0xbd, 0x68, 0x9a, 0x54, 0x16, 0x2c,
  0x96, 0x01, 0x07, 0x25, 0x71, 0xfc, 0x21, 0x8a, 0x02, 0x50, 0x25, 0xc8,
  0x5a, 0x3f, 0x93, 0xfe, 0xae, 0xa1, 0x0e, 0x52, 0xd4, 0x63, 0x1d, 0xb6,
  0xe9, 0x51, 0x67, 0x58, 0xe4, 0xed, 0x24, 0x76, 0xba, 0x8a, 0x54, 0x39,
  0x3e, 0x68, 0x03, 0x9d, 0x45, 0x7c, 0xe0, 0x14, 0xf2, 0xa7, 0xee, 0x5c,
  0x69, 0xd1, 0xc6, 0x84, 0x44, 0xe1, 0x33, 0x5b, 0x40, 0xd9, 0x2d, 0x35,
  0x5c, 0x34, 0x2a, 0xe2, 0xd3, 0x47, 0x91, 0x1a, 0x2e, 0x5a, 0x8c, 0xe8,
  0x76, 0x95, 0xaf, 0x04, 0xb0, 0x84, 0x16, 0xa5, 0x77, 0xe0, 0x05, 0x21,
  0x10, 0x83, 0x20, 0x33, 0x6a, 0xf3, 0xdb, 0xcd, 0x68, 0xf4, 0x8d, 0x83,
  0x12, 0xbc, 0x56, 0xf1, 0xea, 0xe0, 0x8e, 0x50, 0x60, 0x42, 0x22, 0x0d,
  0x14, 0x89, 0xe0, 0x41, 0xde, 0x6e, 0x26, 0x36, 0x18, 0xd1, 0xb5, 0xf6,
  0xef, 0x0d, 0x4d, 0xe4, 0x4d, 0x3c, 0x16, 0xc1, 0xc1, 0x88, 0xae, 0x09,
  0x6a, 0x43, 0x13, 0x2d, 0xe2, 0x7b, 0xf2, 0x79, 0x84, 0xf8, 0xde, 0x9d,
  0x9c, 0x1f, 0x1e, 0x48, 0x1e, 0xb5, 0x43, 0xce, 0x50, 0x4b, 0x81, 0x73,
  0xc9, 0xb8, 0xed, 0x33, 0x57, 0x16, 0x11, 0xbe, 0x23, 0x9f, 0xfb, 0x20,
  0x72, 0xe5, 0x29, 0xa9, 0x1b, 0xb7, 0x84, 0x3d, 0xbd, 0x4d, 0x2f, 0x9a,
  0x26, 0x95, 0x05, 0x8b, 0x65, 0xc0, 0x41, 0x49, 0x1c, 0x7f, 0x88, 0xa2,
  0x00, 0x54, 0x09, 0xb2, 0x21, 0x01, 0x9a, 0xca, 0x22, 0x37, 0x20, 0x22,
  0x96, 0x65, 0x64, 0x71, 0x69, 0x69, 0x30, 0x7a, 0x2f, 0x86, 0x0d, 0x03,
  0x86, 0x04, 0x68, 0x2a, 0x8b, 0xdc, 0x80, 0x88, 0x58, 0x96, 0x91, 0xc5,
  0xa5, 0xa5, 0xc1, 0xe8, 0xbd, 0x18, 0x36, 0x0c, 0xa4, 0x08, 0xdd, 0x1b,
  0x69, 0x3a, 0x4d, 0xf6, 0x88, 0x85, 0xe4, 0x5b, 0x27, 0xe2, 0x5c, 0x20,
  0xb1, 0x7b, 0xa9, 0xc4, 0x38, 0x83, 0x17, 0xb0, 0x07, 0x29, 0x04, 0x6e,
  0x40, 0x1b, 0x59, 0x54, 0x22, 0x81, 0xaa, 0xa1, 0x56, 0x1a, 0x8c, 0x4a,
  0x29, 0x42, 0xf7, 0x46, 0x9a, 0x4e, 0x93, 0x3d, 0x62, 0x21, 0xf9, 0xd6,
  0x89, 0x38, 0x17, 0x48, 0xec, 0x5e, 0x2a, 0x31, 0xce, 0xe0, 0x05, 0xec,
  0x41, 0x0a, 0x81, 0x1b, 0xd0, 0x46, 0x16, 0x95, 0x48, 0xa0, 0x6a, 0xa8,
  0x6b, 0xa5, 0x50, 0xfe, 0x9e, 0x54, 0x21, 0xc6, 0x04, 0x4e, 0xc7, 0x4d,
  0xe5, 0x4c, 0x6e, 0x55, 0xd8, 0x28, 0xd7, 0x06, 0x7b, 0x2b, 0xe1, 0x4a,
  0x52, 0x17, 0xe2, 0xa8, 0x8d, 0x7e, 0x3d, 0xb2, 0xa8, 0xd4, 0x10, 0x7d,
  0x53, 0x23, 0xb8, 0xfd, 0x92, 0x01, 0xd2, 0xf9, 0xc8, 0x98, 0xcd, 0xb9,
  0x28, 0xdc, 0x7c, 0xe2, 0xc9, 0x6e, 0x8f, 0x2d, 0xcb, 0x1a, 0xef, 0x38,
  0x6b, 0xba, 0x71, 0xee, 0xe1, 0x9e, 0xc5, 0xeb, 0xc8, 0xa9, 0x10, 0x56,
  0x90, 0x9f, 0x3e, 0x5d, 0x88, 0x69, 0x31, 0x90, 0x33, 0x5a, 0x9b, 0x78,
  0xf8, 0xd6, 0x06, 0x7d, 0xf1, 0x14, 0x05, 0x26, 0xe4, 0x49, 0x56, 0x95,
  0xe0, 0x4d, 0x63, 0x0f, 0x20, 0xbe, 0x79, 0x73, 0x55, 0xce, 0xfd, 0xe8,
  0x77, 0xd8, 0x53, 0x1b, 0x85, 0x6a, 0x89, 0x0f, 0x56, 0xa4, 0x25, 0x42,
  0x72, 0x2a, 0xd8, 0x74, 0x72, 0xb8, 0x4d, 0x50, 0xea, 0x9b, 0xfc, 0xa5,
  0x9c, 0x88, 0x0f, 0x06, 0x85, 0x6e, 0x97, 0x51, 0xd4, 0x0f, 0x42, 0x87,
  0x34, 0xb2, 0xca, 0xd0, 0xd9, 0x6c, 0xc5, 0xae, 0x55, 0xcc, 0x47, 0x92,
  0xa7, 0xb9, 0x51, 0x2c, 0x42, 0x1e, 0xc9, 0x65, 0xc9, 0xcd, 0x62, 0xe1,
  0xaf, 0x61, 0x38, 0xeb, 0xb0, 0xa0, 0x71, 0xbf, 0x8b, 0xec, 0x90, 0x4e,
  0xe1, 0x0f, 0x31, 0x43, 0x4b, 0x21, 0x35, 0x83, 0x73, 0xb9, 0x0c, 0xf3,
  0x74, 0xda, 0xac, 0x64, 0xe3, 0xbb, 0xb3, 0x2b, 0xd5, 0x45, 0x6a, 0xde,
  0x25, 0xc8, 0x68, 0xca, 0x43, 0x9a, 0x1a, 0xba, 0x4b, 0xa7, 0x77, 0xaa,
  0x2c, 0x38, 0xc9, 0x2a, 0xe0, 0x6f, 0x0e, 0x60, 0x3a, 0x58, 0xac, 0x9d,
  0x04, 0xa2, 0x9d, 0x79, 0xdd, 0xd3, 0xd9, 0xe1, 0x37, 0xb5, 0x53, 0xfc,
  0xfe, 0x3c, 0xec, 0x74, 0x56, 0x90, 0xba, 0xd6, 0x55, 0xcf, 0x9a, 0x14,
  0x7b, 0x7c, 0x4f, 0xcd, 0x7e, 0xcb, 0x23, 0xc0, 0x41, 0x41, 0xc2, 0x90,
  0x42, 0x45, 0x0c, 0x45, 0xc1, 0x35, 0xd5, 0x01, 0x39, 0x52, 0xa1, 0x1e,
  0xf1, 0x56, 0xbe, 0xa2, 0xa9, 0x10, 0x5b, 0xc4, 0xae, 0x6c, 0xd1, 0x11,
  0x5b, 0x9a, 0x8f, 0x39, 0x69, 0xec, 0xc9, 0xe7, 0x4f, 0x1e, 0x6f, 0xb7,
  0xd3, 0x06, 0xb7, 0x23, 0xd9, 0xdb, 0x74, 0xe1, 0x04, 0x7e, 0x9d, 0x24,
  0x7b, 0x8e, 0x76, 0x7a, 0x1c, 0x92, 0x13, 0xbf, 0x66, 0xce, 0xfd, 0x75,
  0xe0, 0x61, 0xa7, 0x4e, 0x55, 0x12, 0xfb, 0x0c, 0xf2, 0x07, 0xa8, 0xab,
  0x6a, 0xc6, 0xaf, 0x6f, 0x89, 0x22, 0xe4, 0xb8, 0xb7, 0xab, 0xe5, 0x61,
  0x1c, 0x70, 0xd2, 0xd2, 0x34, 0xf7, 0x6d, 0x1b, 0x09, 0xb3, 0x31, 0x09,
  0x95, 0x06, 0xa3, 0xd2, 0x5a, 0x29, 0x94, 0xbf, 0x27, 0x55, 0x88, 0x31,
  0x81, 0xd3, 0x71, 0x53, 0x39, 0x93, 0x5b, 0x15, 0x36, 0xca, 0xb5, 0xc1,
  0xde, 0x4a, 0xb8, 0x92, 0xd4, 0x85, 0x38, 0x6a, 0xa3, 0x5f, 0x8f, 0x2c,
  0x2a, 0x35, 0x44, 0xdf, 0xd4, 0x08, 0x6e, 0xbf, 0x64, 0x80, 0x74, 0x3e,
  0x32, 0x66, 0x73, 0x2e, 0x0a, 0x37, 0x9f, 0x78, 0xb2, 0xdb, 0x63, 0xcb,
  0xb2, 0xc6, 0x3b, 0xce, 0x9a, 0x6e, 0x9c, 0x7b, 0xb8, 0x67, 0xf1, 0x3a,
  0x72, 0x2a, 0x84, 0x15, 0xe4, 0xa7, 0x4f, 0x17, 0x62, 0x5a, 0x0c, 0xe4,
  0x8c, 0xd6, 0x26, 0x1e, 0xbe, 0xb5, 0x41, 0x5f, 0x3c, 0x45, 0x81, 0x09,
  0x79, 0x92, 0x55, 0x25, 0x78, 0xd3, 0xd8, 0x03, 0x88, 0x6f, 0xde, 0x5c,
  0x95, 0x73, 0x3f, 0xfa, 0x1d, 0xf6, 0xd4, 0x46, 0xa1, 0x5a, 0xe2, 0x83,
  0x15, 0x69, 0x89, 0x90, 0x9c, 0x0a, 0x36, 0x9d, 0x1c, 0x6e, 0x13, 0x94,
  0xfa, 0x26, 0x7f, 0x29, 0x27, 0xe2, 0x83, 0x41, 0xa1, 0xdb, 0x65, 0x14,
  0xf5, 0x83, 0xd0, 0x21, 0x8d, 0xac, 0x32, 0x74, 0x36, 0x5b, 0xb1, 0x6b,
  0x15, 0xf3, 0x91, 0xe4, 0x69, 0x6e, 0x14, 0x8b, 0x90, 0x47, 0x72, 0x59,
  0x72, 0xb3, 0x58, 0xf8, 0x6b, 0x18, 0xce, 0x3a, 0x2c, 0x68, 0xdc, 0xef,
  0x22, 0x3b, 0xa4, 0x53, 0xf8, 0x43, 0xcc, 0xd0, 0x52, 0x48, 0xcd, 0xe0,
  0x5c, 0x2e, 0xc3, 0x3c, 0x9d, 0x36, 0x2b, 0xd9, 0xf8, 0xee, 0xec, 0x4a,
  0x75, 0x91, 0x9a, 0x77, 0x09, 0x32, 0x9a, 0xf2, 0x90, 0xa6, 0x86, 0xee,
  0xd2, 0xe9, 0x9d, 0x2a, 0x0b, 0x4e, 0xb2, 0x0a, 0xf8, 0x9b, 0x03, 0x98,
  0x0e, 0x16, 0x6b, 0x27, 0x81, 0x68, 0x67, 0x5e, 0xf7, 0x74, 0x76, 0xf8,
  0x55, 0xed, 0x14, 0xbf, 0x3f, 0x0f, 0x3b, 0x9d, 0x15, 0xa4, 0xae, 0x75,
  0xd5, 0xb3, 0x26, 0xc5, 0x1e, 0xdf, 0x53, 0xb3, 0xdf, 0xf2, 0x08, 0x70,
  0x50, 0x90, 0x30, 0xa4, 0x50, 0x11, 0x43, 0x51, 0x70, 0x4d, 0x75, 0x40,
  0x8e, 0x54, 0xa8, 0x47, 0xbc, 0x95, 0xaf, 0x68, 0x2a, 0xc4, 0x16, 0xb1,
  0x2b, 0x5b, 0x74, 0xc4, 0x96, 0xe6, 0x63, 0x4e, 0x1a, 0x7b, 0xf2, 0xf9,
  0x93, 0xc7, 0xdb, 0xed, 0xb4, 0xc1, 0xed, 0x48, 0xf6, 0x36, 0x5d, 0x38,
  0x81, 0x5f, 0x27, 0xc9, 0x9e, 0xa3, 0x9d, 0x1e, 0x87, 0xe4, 0xc4, 0xaf,
  0x99, 0x73, 0x7f, 0x1d, 0x78, 0xd8, 0xa9, 0x53, 0x95, 0xc4, 0x3e, 0x83,
  0xfc, 0x01, 0xea, 0xaa, 0x9a, 0xf1, 0xeb, 0x5b, 0xa2, 0x08, 0x39, 0xee,
  0xed, 0x6a, 0x79, 0x18, 0x07, 0x9c, 0xb4, 0x34, 0xcd, 0x7d, 0xdb, 0x46,
  0xc2, 0x6c, 0x4c, 0x82, 0xd2, 0xce, 0x93, 0xa2, 0x2a, 0x1a, 0x0c, 0x5a,
  0x4a, 0x3b, 0x4f, 0x8a, 0xaa, 0x68, 0x30, 0x68, 0xdd, 0x5c, 0x7a, 0x42,
  0x41, 0xfc, 0x22, 0x8c, 0x18, 0x2d, 0x62, 0x27, 0x89, 0x81, 0xda, 0x52,
  0x4d, 0xba, 0x94, 0xff, 0xbb, 0x8d, 0xa4, 0x31, 0x18, 0x27, 0x11, 0xa4,
  0xa2, 0x23, 0x48, 0x86, 0x94, 0x9c, 0x0b, 0x89, 0xc7, 0x40, 0x20, 0x2f,
  0xb4, 0x93, 0x0c, 0xab, 0x1e, 0xa5, 0xa4, 0x37, 0xb0, 0x8d, 0xae, 0xbd,
  0xe3, 0x25, 0xc1, 0xb7, 0x0f, 0xa4, 0x43, 0xfd, 0x20, 0xa9, 0xe2, 0x09,
  0xb4, 0x26, 0xd6, 0x5b, 0x90, 0xa2, 0xd4, 0xa6, 0xb0, 0x1d, 0xdd, 0x3a,
  0x14, 0xfd, 0xbb, 0xa5, 0xca, 0xb0, 0x04, 0x8d, 0xbf, 0xda, 0xd9, 0x87,
  0x9e, 0xd9, 0x93, 0x25, 0xc5, 0x18, 0x5b, 0xe4, 0x49, 0x09, 0x1b, 0x49,
  0xce, 0x93, 0x2d, 0x9a, 0xf0, 0xce, 0xce, 0xf6, 0xfd, 0x93, 0x96, 0x27,
  0xef, 0x9b, 0xe4, 0x29, 0xbb, 0x36, 0x18, 0x7b, 0xde, 0x02, 0x57, 0xb9,
  0x59, 0xe0, 0xab, 0x38, 0x32, 0x46, 0x88, 0xe7, 0x34, 0xc2, 0x4a, 0x14,
  0x13, 0x14, 0x15, 0x87, 0x4e, 0x7c, 0xc9, 0x4b, 0xa3, 0xe5, 0xb5, 0x57,
  0x2e, 0x26, 0x2f, 0x03, 0x7f, 0x09, 0x03, 0xa1, 0xc4, 0x28, 0x82, 0x62,
  0x4a, 0x5e, 0x1a, 0x2a, 0x0c, 0xf5, 0xcd, 0x56, 0x9f, 0x72, 0x6f, 0x7d,
  0x6c, 0xe6, 0xfa, 0xd5, 0x8d, 0x74, 0x35, 0x5a, 0x2e, 0xf9, 0x48, 0x31,
  0x83, 0x3c, 0x6a, 0xd3, 0x2b, 0xb9, 0xe9, 0xf2, 0x28, 0x00, 0x4f, 0xe5,
  0x07, 0xbd, 0xd6, 0xd9, 0x91, 0xc2, 0x74, 0xb1, 0xde, 0xd4, 0x47, 0xc8,
  0x63, 0x1a, 0x9e, 0xfa, 0xd1, 0xad, 0x9b, 0xd1, 0x4b, 0xb9, 0xbf, 0xf3,
  0x45, 0x0b, 0xe9, 0x2d, 0xad, 0x42, 0xaf, 0x3b, 0xcd, 0xcd, 0xd2, 0x37,
  0x37, 0x31, 0x27, 0xe0, 0x8e, 0x09, 0xff, 0xb4, 0xb5, 0x9d, 0x03, 0xbe,
  0xa6, 0x04, 0x99, 0x11, 0xd3, 0xd5, 0xa9, 0xc3, 0x5a, 0x58, 0xac, 0xed,
  0x36, 0xd0, 0x15, 0xab, 0x7b, 0xd5, 0xe8, 0xf7, 0x64, 0xe1, 0x75, 0x3d,
  0x13, 0xe2, 0x6a, 0xd3, 0x41, 0xdb, 0xbe, 0x86, 0x67, 0x6d, 0x5f, 0x83,
  0x2d, 0x3c, 0x8f, 0x6b, 0x68, 0x9c, 0x7d, 0x59, 0x27, 0xef, 0xf4, 0xb1,
  0x64, 0x6b, 0x7c, 0xfa, 0xee, 0xf0, 0x9b, 0x93, 0xed, 0xfb, 0x7c, 0x94,
  0x3e, 0xff, 0xb7, 0x8b, 0x4a, 0x35, 0x49, 0x58, 0xe6, 0x4e, 0xb6, 0xc9,
  0x37, 0xe3, 0xf1, 0xf0, 0xe5, 0xe9, 0x11, 0x19, 0x02, 0xe3, 0xb1, 0xf9,
  0x4b, 0x1f, 0x6e, 0xf3, 0x48, 0xba, 0x31, 0x0d, 0xbf, 0x27, 0x45, 0x4f,
  0x37, 0x97, 0x9e, 0x50, 0x10, 0xbf, 0x08, 0x23, 0x46, 0x8b, 0xd8, 0x49,
  0x62, 0xa0, 0xb6, 0x54, 0x93, 0x2e, 0xe5, 0xff, 0x6e, 0x23, 0x69, 0x0c,
  0xc6, 0x49, 0x04, 0xa9, 0xe8, 0x08, 0x92, 0x21, 0x25, 0xe7, 0x42, 0xe2,
  0x31, 0x10, 0xc8, 0x0b, 0xed, 0x24, 0xc3, 0xaa, 0x47, 0x29, 0xe9, 0x0d,
  0x6c, 0xa3, 0x6b, 0xef, 0x78, 0x49, 0xf0, 0xed, 0x03, 0xe9, 0x50, 0x3f,
  0x48, 0xaa, 0x78, 0x02, 0xad, 0x89, 0xf5, 0x16, 0xa4, 0x28, 0xb5, 0x29,
  0x6c, 0x47, 0xb7, 0x0e, 0x45, 0xff, 0x6e, 0xa9, 0x32, 0x2c, 0x41, 0xe3,
  0xaf, 0x76, 0xf6, 0xa1, 0x67, 0xf6, 0x64, 0x49, 0x31, 0xc6, 0x16, 0x79,
  0x52, 0xc2, 0x46, 0x92, 0xf3, 0x64, 0x8b, 0x26, 0xbc, 0xb3, 0xb3, 0x7d,
  0xff, 0xa4, 0xe5, 0xc9, 0xfb, 0x26, 0x79, 0xca, 0xae, 0x0d, 0xc6, 0x9e,
  0xb7, 0xc0, 0x55, 0x6e, 0x16, 0xf8, 0x2a, 0x8e, 0x8c, 0x11, 0xe2, 0x39,
  0x8d, 0xb0, 0x12, 0xc5, 0x04, 0x45, 0xc5, 0xa1, 0x13, 0x5f, 0xf2, 0xd2,
  0x68, 0x79, 0xed, 0x95, 0x8b, 0xc9, 0xcb, 0xc0, 0x5f, 0xc2, 0x40, 0x28,
  0x31, 0x8a, 0xa0, 0x98, 0x92, 0x97, 0x86, 0x0a, 0x43, 0x7d, 0xb3, 0xd5,
  0xa7, 0xdc, 0x5b, 0x1f, 0x9b, 0xb9, 0x7e, 0x75, 0x23, 0x5d, 0x8d, 0x96,
  0x4b, 0x3e, 0x52, 0xcc, 0x20, 0x8f, 0xda, 0xf4, 0x4a, 0x6e, 0xba, 0x3c,
  0x0a, 0xc0, 0x53, 0xf9, 0x41, 0xaf, 0x75, 0x76, 0xa4, 0x30, 0x5d, 0xac,
  0x37, 0xf5, 0x11, 0xf2, 0x98, 0x86, 0xa7, 0x7e, 0x74, 0xeb, 0x66, 0xf4,
  0x52, 0xee, 0xef, 0x7c, 0xd1, 0x42, 0x7a, 0x4b, 0xab, 0xd0, 0xeb, 0x4e,
  0x73, 0xb3, 0xf4, 0xcd, 0x4d, 0xcc, 0x09, 0xb8, 0x63, 0xc2, 0x3f, 0x6d,
  0x6d, 0xe7, 0x80, 0xaf, 0x29, 0x41, 0x66, 0xc4, 0x74, 0x75, 0xea, 0xb0,
  0x16, 0x16, 0x6b, 0xbb, 0x0d, 0x74, 0xc5, 0xea, 0x5e, 0x35, 0xfa, 0x3d,
  0x59, 0x78, 0x5d, 0xcf, 0x84, 0xb8, 0xda, 0x74, 0xd0, 0xb6, 0xaf, 0xe1,
  0x59, 0xdb, 0xd7, 0x60, 0x0b, 0xcf, 0xe3, 0x1a, 0x1a, 0x67, 0x5f, 0xd6,
  0xc9, 0x3b, 0x7d, 0x2c, 0xd9, 0x1a, 0x9f, 0xbe, 0x3b, 0xfc, 0xfa, 0x64,
  0xfb, 0x3e, 0x1f, 0xa5, 0xcf, 0xff, 0xed, 0xa2, 0x52, 0x4d, 0x12, 0x96,
  0xb9, 0x93, 0x6d, 0xf2, 0xf5, 0x78, 0x3c, 0x7c, 0x79, 0x7a, 0x44, 0x86,
  0xc0, 0x78, 0x6c, 0xfe, 0xd2, 0x87, 0xdb, 0x3c, 0x92, 0x6e, 0x4c, 0xc3,
  0xef, 0x48, 0xd1, 0x53, 0xde, 0x4f, 0xf6, 0x16, 0xdc, 0x80, 0x44, 0x8d,
  0x79, 0x3f, 0xd9, 0x5b, 0x70, 0x03, 0x12, 0x35, 0x72, 0x42, 0x1e, 0xb5,
  0x7e, 0xd3, 0xda, 0x7d, 0x7c, 0xa0, 0x6b, 0xf2, 0x9c, 0x1e, 0xed, 0xd0,
  0xb7, 0x90, 0x3a, 0x4d, 0x0b, 0x8a, 0xbb, 0x0f, 0x56, 0x61, 0x2f, 0x3c,
  0x68, 0x3d, 0x94, 0x62, 0x4a, 0x0c, 0x5a, 0x93, 0xb7, 0x8d, 0xed, 0x07,
  0x9c, 0x90, 0x47, 0xad, 0xdf, 0xb4, 0x76, 0x1f, 0x1f, 0xe8, 0x9a, 0x3c,
  0xa7, 0x47, 0x3b, 0xf4, 0x2d, 0xa4, 0x4e, 0xd3, 0x82, 0xe2, 0xee, 0x83,
  0x55, 0xd8, 0x0b, 0x0f, 0x5a, 0x0f, 0xa5, 0x98, 0x12, 0x83, 0xd6, 0xe4,
  0x6d, 0x63, 0xfb, 0x41, 0x9c, 0x20, 0x5e, 0x27, 0x01, 0xbb, 0x78, 0xad,
  0x0c, 0x23, 0xd4, 0xa0, 0x1c, 0x42, 0x21, 0x16, 0x3b, 0xde, 0x37, 0x32,
  0xd2, 0x18, 0x48, 0x0b, 0xbd, 0xce, 0xc7, 0x62, 0x6f, 0x75, 0x9d, 0x22,
  0x9b, 0xc3, 0x55, 0x72, 0xb0, 0x49, 0x19, 0x3a, 0x45, 0xb9, 0xba, 0xbc,
  0x0a, 0xfd, 0x0f, 0x9d, 0x8e, 0x98, 0xa2, 0x49, 0x11, 0x3d, 0x99, 0x59,
  0x71, 0x82, 0x78, 0x9d, 0x04, 0xec, 0xe2, 0xb5, 0x32, 0x8c, 0x50, 0x83,
  0x72, 0x08, 0x85, 0x58, 0xec, 0x78, 0xdf, 0xc8, 0x48, 0x63, 0x20, 0x2d,
  0xf4, 0x3a, 0x1f, 0x8b, 0xbd, 0xd5, 0x75, 0x8a, 0x6c, 0x0e, 0x57, 0xc9,
  0xc1, 0x26, 0x65, 0xe8, 0x14, 0xe5, 0xea, 0xf2, 0x2a, 0xf4, 0x3f, 0x74,
  0x3a, 0x62, 0x8a, 0x26, 0x45, 0xf4, 0x64, 0x66, 0x19, 0x90, 0x20, 0xbd,
  0xa8, 0x7a, 0x4f, 0x95, 0x21, 0x38, 0xc4, 0xea, 0x0d, 0x67, 0xfe, 0xcc,
  0xfe, 0x25, 0x7d, 0xa4, 0xd6, 0x68, 0x20, 0x13, 0x0e, 0x9c, 0x92, 0x1b,
  0xad, 0x68, 0xe6, 0x0b, 0xf9, 0x6b, 0x5a, 0xdc, 0x91, 0xbb, 0x54, 0xfc,
  0xf7, 0x54, 0xb0, 0x69, 0x69, 0xba, 0x4d, 0xe8, 0x4d, 0x35, 0x25, 0x43,
  0x9f, 0x53, 0x50, 0xb9, 0x52, 0xb3, 0x9f, 0x66, 0xa9, 0xfb, 0xf5, 0xc2,
  0xc8, 0x68, 0x32, 0xeb, 0x86, 0xc5, 0x40, 0xc7, 0x18, 0x18, 0x73, 0x58,
  0xc2, 0x64, 0x69, 0x23, 0xc9, 0x6c, 0x42, 0x05, 0x31, 0x56, 0xc4, 0x6d,
  0x1c, 0xb7, 0xd2, 0x49, 0x5d, 0xce, 0x57, 0x8d, 0xc4, 0x1e, 0xe1, 0x18,
  0x45, 0x45, 0xcc, 0xb6, 0xcd, 0x22, 0xa2, 0xa1, 0x5d, 0x06, 0x6a, 0x2c,
  0x71, 0xdf, 0xb5, 0x32, 0x1c, 0xb9, 0x40, 0x0b, 0x47, 0x12, 0xc5, 0x3f,
  0x81, 0x8d, 0xf5, 0x06, 0x5a, 0x52, 0x5a, 0xd2, 0x75, 0x19, 0x6f, 0xb2,
  0x8d, 0xf3, 0xd3, 0x73, 0x6a, 0x6d, 0x8f, 0x3a, 0xd8, 0xc1, 0xb9, 0x5b,
  0x99, 0xea, 0x6d, 0xb5, 0x31, 0x2c, 0x80, 0x8e, 0x93, 0x89, 0xa6, 0x0a,
  0x4c, 0x70, 0x4d, 0x26, 0x77, 0xf6, 0x5b, 0xfc, 0x99, 0x94, 0x52, 0x79,
  0xac, 0x22, 0xfc, 0x50, 0xf4, 0x14, 0x77, 0x1c, 0xa3, 0x75, 0xc9, 0x28,
  0xed, 0x2f, 0x75, 0x86, 0xfe, 0x3e, 0xa3, 0xb4, 0xb3, 0xf8, 0x19, 0xb3,
  0x8a, 0xef, 0x41, 0xa6, 0x48, 0x16, 0x24, 0x9d, 0xe9, 0x88, 0x1e, 0x0a,
  0x08, 0x18, 0x81, 0x74, 0xbb, 0x2a, 0x55, 0x8f, 0xe0, 0x6f, 0x4b, 0xb9,
  0xf5, 0x1e, 0xdf, 0x50, 0xef, 0x33, 0xb6, 0x76, 0xa7, 0x5c, 0xdf, 0x1d,
  0xd3, 0x1d, 0xce, 0xe8, 0x01, 0x1b, 0xe2, 0xd6, 0xef, 0x7e, 0x18, 0x58,
  0x76, 0xb4, 0x18, 0xc6, 0x5f, 0xa9, 0xa7, 0x16, 0xe9, 0x8b, 0x17, 0x66,
  0x06, 0x24, 0x48, 0x2f, 0xaa, 0xde, 0x53, 0x65, 0x08, 0x0e, 0xb1, 0x7a,
  0xc3, 0x99, 0x3f, 0xb3, 0x7f, 0x49, 0x1f, 0xa9, 0x35, 0x1a, 0xc8, 0x84,
  0x03, 0xa7, 0xe4, 0x46, 0x2b, 0x9a, 0xf9, 0x42, 0xfe, 0x9a, 0x16, 0x77,
  0xe4, 0x2e, 0x15, 0xff, 0x3d, 0x15, 0x6c, 0x5a, 0x9a, 0x6e, 0x13, 0x7a,
  0x53, 0x4d, 0xc9, 0xd0, 0xe7, 0x14, 0x54, 0xae, 0xd4, 0xec, 0xa7, 0x59,
  0xea, 0x7e, 0xbd, 0x30, 0x32, 0x9a, 0xcc, 0xba, 0x61, 0x31, 0xd0, 0x31,
  0x06, 0xc6, 0x1c, 0x96, 0x30, 0x59, 0xda, 0x48, 0x32, 0x9b, 0x50, 0x41,
  0x8c, 0x15, 0x71, 0x1b, 0xc7, 0xad, 0x74, 0x52, 0x97, 0xf3, 0x55, 0x23,
  0xb1, 0x47, 0x38, 0x46, 0x51, 0x11, 0xb3, 0x6d, 0xb3, 0x88, 0x68, 0x68,
  0x97, 0x81, 0x1a, 0x4b, 0xdc, 0x77, 0xad, 0x0c, 0x47, 0x2e, 0xd0, 0xc2,
  0x91, 0x44, 0xf1, 0x4f, 0x60, 0x63, 0xbd, 0x81, 0x96, 0x94, 0x96, 0x74,
  0x5d, 0xc6, 0x9b, 0x6c, 0xe3, 0xfc, 0xf4, 0x9c, 0x5a, 0xdb, 0xa3, 0x0e,
  0x76, 0x70, 0xee, 0x56, 0xa6, 0x7a, 0x5b, 0x6d, 0x0c, 0x0b, 0xa0, 0xe3,
  0x64, 0xa2, 0xa9, 0x02, 0x13, 0x5c, 0x93, 0xc9, 0x9d, 0xfd, 0x16, 0x7f,
  0x26, 0xa5, 0x54, 0x1e, 0xab, 0x08, 0x3f, 0x14, 0x3d, 0xc5, 0x1d, 0xc7,
  0x68, 0x5d, 0x32, 0x4a, 0xfb, 0x4b, 0x9d, 0xa1, 0xbf, 0xcb, 0x28, 0xed,
  0x2c, 0x7e, 0xc6, 0xac, 0xe2, 0x7b, 0x90, 0x29, 0x92, 0x05, 0x49, 0x67,
  0x3a, 0xa2, 0x87, 0x02, 0x02, 0x46, 0x20, 0xdd, 0xae, 0x4a, 0xd5, 0x23,
  0xf8, 0xdb, 0x52, 0x6e, 0xbd, 0xc7, 0x37, 0xd4, 0xfb, 0x8c, 0xad, 0xdd,
  0x29, 0xd7, 0x77, 0xc7, 0x74, 0x87, 0x33, 0x7a, 0xc0, 0x86, 0xb8, 0xf5,
  0xbb, 0x1f, 0x06, 0x96, 0x1d, 0x2d, 0x86, 0xf1, 0x57, 0xea, 0xa9, 0x45,
  0xfa, 0xe2, 0x85, 0x19, 0x72, 0xfd, 0x20, 0x7f, 0x31, 0x1f, 0xf9, 0x3e,
  0x2f, 0x8c, 0x6e, 0x58, 0x6f, 0xfb, 0x8a, 0x52, 0x78, 0x77, 0xab, 0xcd,
  0xda, 0xd8, 0x61, 0x86, 0xed, 0xb8, 0x44, 0x3d, 0x68, 0xce, 0x1c, 0xb2,
  0x51, 0x17, 0x68, 0xe2, 0x02, 0xca, 0xb6, 0x09, 0xe2, 0xdd, 0x32, 0x28,
  0xc8, 0xf5, 0x83, 0xfc, 0xc5, 0x7c, 0xe4, 0x87, 0xbc, 0x30, 0xba, 0x61,
  0xbd, 0xed, 0x2b, 0x4a, 0xe1, 0xdd, 0xad, 0x36, 0x6b, 0x63, 0x87, 0x19,
  0xb6, 0xe3, 0x12, 0xf5, 0xa0, 0x39, 0x73, 0xc8, 0x46, 0x5d, 0xa0, 0x89,
  0x0b, 0x28, 0xdb, 0x26, 0x88, 0x77, 0xcb, 0xa0, 0xe0, 0x85, 0xab, 0x00,
  0x78, 0xe1, 0x2a, 0x40, 0x66, 0x25, 0x17, 0x82, 0xd0, 0x60, 0x26, 0x82,
  0x96, 0x56, 0x2e, 0xc2, 0x6f, 0xa1, 0x9a, 0xfc, 0xe8, 0x66, 0x56, 0x44,
  0xfa, 0x5f, 0x13, 0x67, 0xeb, 0x46, 0xb1, 0xb0, 0xbb, 0xb4, 0xc6, 0xad,
  0x27, 0x66, 0x65, 0xcd, 0x72, 0x6b, 0x6f, 0x9b, 0xf1, 0xae, 0xa5, 0xef,
  0x99, 0x95, 0x5c, 0x08, 0x42, 0x83, 0x99, 0x08, 0x5a, 0x5a, 0xb9, 0x08,
  0xbf, 0x85, 0x6a, 0xf2, 0xa3, 0x9b, 0x59, 0x11, 0xe9, 0x7f, 0x4d, 0x9c,
  0x72, 0xe9, 0xc4, 0x7d, 0xe8, 0xc5, 0x41, 0x6e, 0x61, 0x92, 0xbc, 0x62,
  0xad, 0x1b, 0xc5, 0xc2, 0xee, 0xd2, 0x1a, 0xb7, 0x9e, 0x98, 0x95, 0x35,
  0xcb, 0xad, 0xbd, 0x6d, 0xc6, 0xbb, 0x96, 0xbe, 0xcb, 0xa5, 0x13, 0xf7,
  0xa1, 0x17, 0x07, 0xb9, 0x85, 0x49, 0xf2, 0x8a, 0x21, 0x34, 0xc9, 0xdb,
  0x45, 0x19, 0xfe, 0x04, 0xff, 0x44, 0xa5, 0x77, 0x17, 0x7c, 0x89, 0x59,
  0x59, 0x90, 0x54, 0x45, 0xad, 0x6a, 0xec, 0x7a, 0x07, 0x28, 0xeb, 0x67,
  0x09, 0x14, 0x48, 0x2a, 0x45, 0x44, 0xdc, 0xc5, 0xba, 0xc4, 0xa5, 0x6f,
  0x90, 0xd4, 0x2a, 0x9b, 0x9d, 0x9b, 0xcf, 0x86, 0x60, 0x20, 0x97, 0x55,
  0x08, 0x4d, 0xf2, 0x76, 0x51, 0x86, 0x3f, 0xc1, 0x3f, 0x51, 0xe9, 0xdd,
  0x05, 0x5f, 0x62, 0x56, 0x16, 0x24, 0x55, 0x51, 0xab, 0x1a, 0xbb, 0xde,
  0x01, 0xca, 0xfa, 0x59, 0x02, 0x05, 0x92, 0x4a, 0x11, 0x11, 0x77, 0xb1,
  0x2e, 0x71, 0xe9, 0x1b, 0x24, 0xb5, 0xca, 0x66, 0xe7, 0xe6, 0xb3, 0x21,
  0x18, 0xc8, 0x65, 0x55, 0x1a, 0x11, 0x59, 0x45, 0xb0, 0xf2, 0xc4, 0xa4,
  0x69, 0x44, 0x64, 0x15, 0xc1, 0xca, 0x13, 0x93, 0x82, 0x54, 0xfd, 0xac,
  0xb8, 0xce, 0xab, 0xb2, 0x20, 0x3c, 0xc2, 0xeb, 0xb4, 0xca, 0x29, 0xd2,
  0xbf, 0xf1, 0xed, 0xc9, 0xdb, 0xc3, 0x0d, 0xdf, 0x27, 0x72, 0x91, 0x8b,
  0x23, 0xfd, 0x2a, 0x44, 0x5c, 0xb6, 0xa7, 0x19, 0x71, 0x1a, 0x1a, 0x99,
  0x6e, 0x94, 0x1c, 0x1c, 0xeb, 0xb5, 0xdc, 0x24, 0xa8, 0xf5, 0x1a, 0x20,
  0x37, 0xba, 0xa4, 0xa4, 0x00, 0x48, 0x0b, 0x36, 0x25, 0x2e, 0x12, 0x80,
  0xd1, 0x4e, 0x19, 0x1e, 0x1e, 0x10, 0x35, 0xcc, 0x28, 0xfd, 0x46, 0x60,
  0x89, 0xd7, 0x2c, 0x0c, 0x9a, 0x3e, 0x13, 0x40, 0x5f, 0x37, 0xe8, 0xcd,
  0xc5, 0x1d, 0x0c, 0x9b, 0xcd, 0x16, 0xd5, 0x25, 0x9b, 0x35, 0x8c, 0xf1,
  0x66, 0x53, 0xb7, 0x97, 0xd2, 0x45, 0x1d, 0x07, 0x08, 0xbb, 0xb3, 0xf6,
  0x7c, 0x9a, 0xa9, 0x9a, 0x3f, 0xe1, 0x46, 0xe7, 0xc1, 0xdd, 0xed, 0x3b,
  0xe0, 0xdb, 0x77, 0xdb, 0xb5, 0xee, 0x42, 0xc0, 0x9a, 0xd4, 0x55, 0x74,
  0xb5, 0x1b, 0xbb, 0xb6, 0xa3, 0xf4, 0xc0, 0xa3, 0x0f, 0xbd, 0x8a, 0xe6,
  0xf3, 0xe5, 0x54, 0xa0, 0x83, 0x6c, 0x5c, 0x55, 0x72, 0x29, 0x05, 0x7e,
  0x82, 0x85, 0x94, 0xc6, 0x4c, 0x94, 0xe9, 0x63, 0xb8, 0x3e, 0x70, 0xc2,
  0x01, 0xe3, 0x4f, 0x2a, 0x44, 0x5b, 0x6e, 0x54, 0x83, 0x9b, 0xc2, 0x8f,
  0x21, 0xd3, 0x77, 0x06, 0x7e, 0xf5, 0xf3, 0x20, 0xe9, 0x81, 0x2b, 0x75,
  0xa9, 0x28, 0xf6, 0xb4, 0x18, 0xaf, 0x93, 0x11, 0x1f, 0x2d, 0xc2, 0x93,
  0xa2, 0x5e, 0x86, 0xfa, 0xf1, 0xc1, 0x20, 0x91, 0xad, 0xd4, 0xfb, 0x86,
  0xf0, 0x73, 0xc3, 0x00, 0x8b, 0x6c, 0xd4, 0x58, 0xa1, 0x55, 0xcc, 0x58,
  0x26, 0xa2, 0x57, 0x81, 0x40, 0xf2, 0xc6, 0xac, 0x6b, 0xbd, 0x8d, 0x66,
  0x65, 0x02, 0xb9, 0x5e, 0xaf, 0xaa, 0x6b, 0x2a, 0x52, 0x95, 0x4e, 0x3d,
  0x0c, 0x7d, 0x68, 0x8f, 0xc3, 0x9d, 0x43, 0x4c, 0xca, 0xb7, 0xa6, 0x88,
  0xcc, 0xcd, 0x6a, 0x25, 0xd8, 0xdc, 0xdf, 0xc8, 0x3c, 0x64, 0x7e, 0x6a,
  0xeb, 0x58, 0xc8, 0x92, 0x20, 0x49, 0xbf, 0xac, 0x09, 0x63, 0xb3, 0xa9,
  0x20, 0x55, 0x3f, 0x2b, 0xae, 0xf3, 0xaa, 0x2c, 0x08, 0x8f, 0xf0, 0x3a,
  0xad, 0x72, 0x8a, 0xf4, 0x6f, 0x7c, 0x73, 0xf2, 0xf6, 0x70, 0xc3, 0xf7,
  0x89, 0x5c, 0xe4, 0xe2, 0x48, 0xbf, 0x0a, 0x11, 0x97, 0xed, 0x69, 0x46,
  0x9c, 0x86, 0x46, 0xa6, 0x1b, 0x25, 0x07, 0xc7, 0x7a, 0x2d, 0x37, 0x09,
  0x6a, 0xbd, 0x06, 0xc8, 0x8d, 0x2e, 0x29, 0x29, 0x00, 0xd2, 0x82, 0x4d,
  0x89, 0x8b, 0x04, 0x60, 0xb4, 0x53, 0x86, 0x87, 0x07, 0x44, 0x0d, 0x33,
  0x4a, 0xbf, 0x11, 0x58, 0xe2, 0x35, 0x0b, 0x83, 0xa6, 0xcf, 0x04, 0xd0,
  0xd7, 0x0d, 0x7a, 0x73, 0x71, 0x07, 0xc3, 0x66, 0xb3, 0x45, 0x75, 0xc9,
  0x66, 0x0d, 0x63, 0xbc, 0xd9, 0xd4, 0xed, 0xa5, 0x74, 0x51, 0xc7, 0x01,
  0xc2, 0xee, 0xac, 0x3d, 0x9f, 0x66, 0xaa, 0xe6, 0x4f, 0xb8, 0xd1, 0x79,
  0x70, 0x77, 0xfb, 0x0e, 0xf8, 0xf6, 0xdd, 0x76, 0xad, 0xbb, 0x10, 0xb0,
  0x26, 0x75, 0x15, 0x5d, 0xed, 0xc6, 0xae, 0xed, 0x28, 0x3d, 0xf0, 0xe8,
  0x43, 0xaf, 0xa2, 0xf9, 0x7c, 0x39, 0x15, 0xe8, 0x20, 0x1b, 0x57, 0x95,
  0x5c, 0x4a, 0x81, 0x9f, 0x60, 0x21, 0xa5, 0x31, 0x13, 0x65, 0xfa, 0x18,
  0xae, 0x0f, 0x9c, 0x70, 0xc0, 0xf8, 0x93, 0x0a, 0xd1, 0x96, 0x1b, 0xd5,
  0xe0, 0xa6, 0xf0, 0x63, 0xc8, 0xf4, 0x9d, 0x81, 0x5f, 0xfd, 0x3c, 0x48,
  0x7a, 0xe0, 0x4a, 0x5d, 0x2a, 0x8a, 0x3d, 0x2d, 0xc6, 0xeb, 0x64, 0xc4,
  0x47, 0x8b, 0xf0, 0xa4, 0xa8, 0x97, 0xa1, 0x7e, 0x7c, 0x30, 0x48, 0x64,
  0x2b, 0xf5, 0xbe, 0x21, 0xfc, 0xdc, 0x30, 0xc0, 0x22, 0x1b, 0x35, 0x56,
  0x68, 0x15, 0x33, 0x96, 0x89, 0xe8, 0x55, 0x20, 0x90, 0xbc, 0x31, 0xeb,
  0x5a, 0x6f, 0xa3, 0x59, 0x99, 0x40, 0xae, 0xd7, 0xab, 0xea, 0x9a, 0x8a,
  0x54, 0xa5, 0x53, 0x0f, 0x43, 0x1f, 0xda, 0xe3, 0x70, 0xe7, 0x10, 0x93,
  0xf2, 0xad, 0x29, 0x22, 0x73, 0xb3, 0x5a, 0x09, 0x36, 0xf7, 0xd7, 0x32,
  0x0f, 0x99, 0x9f, 0xda, 0x3a, 0x16, 0xb2, 0x24, 0x48, 0xd2, 0x2f, 0x6b,
  0xc2, 0xd8, 0x6c, 0xaa, 0x74, 0xea, 0xfe, 0x32, 0x4c, 0xeb, 0x69, 0x9e,
  0xd2, 0xa9, 0xfb, 0xcb, 0x30, 0xad, 0xa7, 0x79, 0xae, 0xbd, 0x5f, 0x10,
  0x1f, 0xcc, 0x90, 0x0e, 0x1b, 0x05, 0xb4, 0xb1, 0xe7, 0xa1, 0x3d, 0x17,
  0x6b, 0xef, 0x17, 0xc4, 0x07, 0x33, 0xa4, 0xc3, 0x46, 0x01, 0x6d, 0xec,
  0x66, 0x25, 0x3b, 0x77, 0x39, 0xe3, 0x24, 0xe5, 0xa6, 0x60, 0xc8, 0x5f,
  0xa1, 0xd2, 0x38, 0x8d, 0x1d, 0x46, 0xdb, 0xe1, 0x28, 0x9c, 0x61, 0x8f,
  0x69, 0x6b, 0xac, 0xef, 0x3d, 0xdf, 0xfc, 0xd6, 0x2d, 0x18, 0x02, 0x1c,
  0xbc, 0x6e, 0x48, 0x80, 0x9a, 0x67, 0xf6, 0xfd, 0x67, 0xd6, 0x45, 0xc3,
  0x9f, 0x76, 0x8c, 0x13, 0x86, 0x67, 0x8a, 0x99, 0x26, 0x63, 0xa3, 0x3a,
  0x69, 0x77, 0x3c, 0x3a, 0x82, 0x97, 0xc7, 0xa7, 0xef, 0x08, 0x14, 0x0b,
  0x38, 0xcb, 0x05, 0xf9, 0xc7, 0xf8, 0x67, 0xa4, 0x22, 0x93, 0x9d, 0x0c,
  0xed, 0x63, 0x16, 0xd6, 0x43, 0x73, 0xc7, 0xcc, 0x8b, 0x88, 0x69, 0xc5,
  0xa9, 0x6d, 0x05, 0xb5, 0xc4, 0x49, 0xac, 0xe9, 0x22, 0x8a, 0x9f, 0x9a,
  0x17, 0xdd, 0xe5, 0x98, 0x6f, 0x8e, 0x12, 0xfb, 0x69, 0x85, 0x64, 0xb7,
  0x79, 0x68, 0xcf, 0x85, 0x59, 0xc9, 0xce, 0x5d, 0xce, 0x38, 0x49, 0xb9,
  0x29, 0x18, 0xf2, 0x57, 0xa8, 0x34, 0x4e, 0x63, 0x87, 0xd1, 0x76, 0x38,
  0x0a, 0x67, 0xd8, 0x63, 0xda, 0x1a, 0xeb, 0x7b, 0xcf, 0x37, 0xbf, 0x75,
  0x0b, 0x86, 0x00, 0x07, 0xaf, 0x1b, 0x12, 0xa0, 0xe6, 0x99, 0x7d, 0xff,
  0x99, 0x75, 0xd1, 0xf0, 0xa7, 0x1d, 0xe3, 0x84, 0xe1, 0x99, 0x62, 0xa6,
  0xc9, 0xd8, 0xa8, 0x4e, 0xda, 0x1d, 0x8f, 0x8e, 0xe0, 0xe5, 0xf1, 0xe9,
  0x3b, 0x02, 0xc5, 0x02, 0xce, 0x72, 0x41, 0xfe, 0x31, 0xfe, 0x19, 0xa9,
  0xc8, 0x64, 0x27, 0x43, 0xfb, 0x98, 0x85, 0xf5, 0xd0, 0xdc, 0x31, 0xf3,
  0x22, 0x62, 0x5a, 0x71, 0x6a, 0x5b, 0x41, 0x2d, 0x71, 0x12, 0x6b, 0xba,
  0x88, 0xe2, 0xa7, 0xe6, 0x45, 0x77, 0x39, 0xe6, 0x9b, 0xa3, 0xc4, 0x7e,
  0x5a, 0x21, 0xd9, 0x6d, 0x21, 0x12, 0xbf, 0xdd, 0xc5, 0x15, 0x43, 0x96,
  0x0c, 0x69, 0xad, 0x01, 0x3f, 0x6f, 0x32, 0x8b, 0x3d, 0x26, 0x76, 0x9d,
  0x85, 0x48, 0xfc, 0x76, 0x17, 0x57, 0x0c, 0x59, 0x32, 0xa4, 0xb5, 0x06,
  0xfc, 0xbc, 0xc9, 0x2c, 0xf6, 0x98, 0xd8, 0x75, 0x16, 0x37, 0x51, 0xbb,
  0xdd, 0x70, 0x9e, 0x06, 0x21, 0x4d, 0x68, 0x41, 0x7b, 0x7d, 0x0f, 0xea,
  0x55, 0xb1, 0x2c, 0xda, 0xd8, 0x5b, 0x76, 0xb3, 0x3b, 0x45, 0x60, 0x6a,
  0x80, 0x76, 0xe7, 0xf5, 0xa0, 0xb2, 0x30, 0x9c, 0xc7, 0x68, 0xcd, 0x01,
  0xc5, 0x4d, 0xd4, 0x6e, 0x37, 0x9c, 0xa7, 0x41, 0x48, 0x13, 0x5a, 0xd0,
  0x5e, 0xdf, 0x83, 0x7a, 0x55, 0x2c, 0x8b, 0x36, 0xf6, 0x96, 0xdd, 0xec,
  0x4e, 0x11, 0x98, 0x1a, 0xa0, 0xdd, 0x79, 0x3d, 0xa8, 0x2c, 0x0c, 0xe7,
  0xbf, 0x1b, 0xf0, 0x77, 0x27, 0x2b, 0x70, 0x88, 0xce, 0x17, 0xe4, 0x74,
  0x59, 0x69, 0xe2, 0x27, 0xf0, 0x3d, 0xf1, 0x80, 0x31, 0xf4, 0x11, 0x8a,
  0x38, 0xb3, 0x74, 0x61, 0xb4, 0x82, 0x42, 0x0b, 0x05, 0xe0, 0xf7, 0x45,
  0x31, 0x5a, 0x73, 0xc0, 0xef, 0x06, 0xfc, 0xdd, 0xc9, 0x0a, 0x1c, 0xa2,
  0xf3, 0x05, 0x39, 0x5d, 0x56, 0x9a, 0xf8, 0x09, 0x7c, 0x4f, 0x3c, 0x60,
  0x42, 0x67, 0x77, 0xc2, 0xab, 0x54, 0x58, 0x96, 0xd3, 0x16, 0x3a, 0xc5,
  0x03, 0xfc, 0x0d, 0x62, 0xa3, 0x3c, 0xb8, 0x8c, 0x1e, 0xed, 0x1f, 0xd2,
  0x62, 0x22, 0x1a, 0xb7, 0xd1, 0x36, 0x81, 0x0c, 0x32, 0xcc, 0x83, 0xd8,
  0x4e, 0xc1, 0xe8, 0x72, 0x73, 0xb5, 0x2a, 0x3e, 0x9a, 0x29, 0x84, 0xf5,
  0xcb, 0x9a, 0xec, 0x9b, 0x53, 0x33, 0xf7, 0x94, 0xe1, 0xb1, 0xb5, 0x36,
  0x94, 0x5e, 0x07, 0xb8, 0xf1, 0x35, 0x79, 0xf1, 0x04, 0xee, 0xb7, 0x65,
  0x7c, 0xc5, 0x66, 0x37, 0xb3, 0xcd, 0x23, 0xd3, 0xc6, 0x6d, 0x60, 0x34,
  0x9d, 0xdd, 0x79, 0x1b, 0xa4, 0x8f, 0x37, 0x9b, 0x24, 0x97, 0x5e, 0x3e,
  0x15, 0x2b, 0x71, 0x8a, 0xf9, 0x04, 0xef, 0x8c, 0x98, 0x20, 0x01, 0x3b,
  0x5c, 0xd5, 0x5c, 0x05, 0x26, 0xc7, 0x4a, 0x60, 0x2b, 0x5e, 0xa7, 0x9a,
  0xc8, 0x4c, 0xda, 0xc5, 0xf4, 0xeb, 0xe8, 0x40, 0xdc, 0xb5, 0xae, 0xf0,
  0x5e, 0xd2, 0x50, 0x6a, 0xd7, 0xb0, 0x1a, 0x2d, 0x24, 0x5b, 0x4d, 0xec,
  0x22, 0x7c, 0xcb, 0x95, 0x72, 0x65, 0x85, 0x1d, 0x7c, 0xc1, 0xfc, 0x81,
  0xf8, 0xc1, 0xbf, 0x70, 0x97, 0xdc, 0x5a, 0xbc, 0x8d, 0xb2, 0x3f, 0xec,
  0x6c, 0x52, 0xd1, 0xcb, 0x0d, 0xfd, 0x56, 0xa1, 0xef, 0x42, 0x56, 0xf8,
  0x2e, 0xc2, 0x09, 0x69, 0xa5, 0x41, 0x1d, 0x75, 0xb2, 0x86, 0x11, 0x7a,
  0x65, 0xde, 0x1d, 0x3e, 0xf6, 0x0e, 0x5c, 0xcf, 0xfc, 0x27, 0xac, 0xf2,
  0x7e, 0x20, 0x07, 0x24, 0xb5, 0xcf, 0x5a, 0xee, 0x8a, 0xed, 0xd8, 0xe3,
  0xda, 0xfa, 0xf5, 0x2c, 0xd0, 0x26, 0xb1, 0x2a, 0xbb, 0x0b, 0xb9, 0x60,
  0x11, 0x30, 0x41, 0xae, 0x84, 0xfd, 0x24, 0x2c, 0x10, 0x1f, 0x94, 0x09,
  0xe7, 0xb3, 0x28, 0xe4, 0x82, 0x1e, 0xac, 0x34, 0x90, 0x94, 0x1b, 0x80,
  0x93, 0x50, 0xac, 0x97, 0xa3, 0xd7, 0x86, 0xc2, 0xa0, 0xa9, 0xc2, 0x61,
  0xfb, 0x35, 0x50, 0xfc, 0xa3, 0x47, 0x4b, 0x68, 0xd4, 0x36, 0xa6, 0x4b,
  0x0c, 0x7d, 0x84, 0x22, 0xce, 0x2c, 0x5d, 0x18, 0xad, 0xa0, 0xd0, 0x42,
  0x01, 0xf8, 0x7d, 0x91, 0xd0, 0xd9, 0x9d, 0xf0, 0x2a, 0x15, 0x96, 0xe5,
  0xb4, 0x85, 0x4e, 0xf1, 0x00, 0x7f, 0x83, 0xd8, 0x28, 0x0f, 0x2e, 0xa3,
  0x47, 0xfb, 0x87, 0xb4, 0x98, 0x88, 0xc6, 0x6d, 0xb4, 0x4d, 0x20, 0x83,
  0x0c, 0xf3, 0x20, 0xb6, 0x53, 0x30, 0xba, 0xdc, 0x5c, 0xad, 0x8a, 0x8f,
  0x66, 0x0a, 0x61, 0xfd, 0xb2, 0x26, 0xfb, 0xe6, 0xd4, 0xcc, 0x3d, 0x65,
  0x78, 0x6c, 0xad, 0x0d, 0xa5, 0xd7, 0x01, 0x6e, 0x7c, 0x4d, 0x5e, 0x3c,
  0x81, 0xfb, 0x6d, 0x19, 0x5f, 0xb1, 0xd9, 0xcd, 0x6c, 0xf3, 0xc8, 0xb4,
  0x71, 0x1b, 0x18, 0x4d, 0x67, 0x77, 0xde, 0x06, 0xe9, 0xe3, 0xcd, 0x26,
  0xc9, 0xa5, 0x97, 0x4f, 0xc5, 0x4a, 0x9c, 0x62, 0x3e, 0xc1, 0x3b, 0x23,
  0x26, 0x48, 0xc0, 0x0e, 0x57, 0x35, 0x57, 0x81, 0xc9, 0xb1, 0x12, 0xd8,
  0x8a, 0xd7, 0xa9, 0x26, 0x32, 0x93, 0x76, 0x31, 0xfd, 0x3a, 0x3a, 0x10,
  0x77, 0xad, 0x2b, 0xbc, 0x97, 0x34, 0x94, 0xda, 0x35, 0xac, 0x46, 0x0b,
  0xc9, 0x56, 0x13, 0xbb, 0x08, 0xdf, 0x72, 0xa5, 0x5c, 0x59, 0x61, 0x07,
  0x5f, 0x30, 0x7f, 0x20, 0x7e, 0xf0, 0x2f, 0xdc, 0x25, 0xb7, 0x16, 0x6f,
  0xa3, 0xec, 0x0f, 0x3b, 0x9b, 0x54, 0xf4, 0x72, 0x43, 0xbf, 0x55, 0xe8,
  0xbb, 0x90, 0x15, 0xbe, 0x8b, 0x70, 0x42, 0x5a, 0x69, 0x50, 0x47, 0x9d,
  0xac, 0x61, 0x84, 0x5e, 0x99, 0x77, 0x87, 0x8f, 0xbd, 0x03, 0xd7, 0x33,
  0xff, 0x09, 0xab, 0xbc, 0x1f, 0xc8, 0x01, 0x49, 0xed, 0xb3, 0x96, 0xbb,
  0x62, 0x3b, 0xf6, 0xb8, 0xb6, 0x7e, 0x39, 0x0b, 0xb4, 0x49, 0xac, 0xca,
  0xee, 0x42, 0x2e, 0x58, 0x04, 0x4c, 0x90, 0x2b, 0x61, 0x3f, 0x09, 0x0b,
  0xc4, 0x07, 0x65, 0xc2, 0xf9, 0x2c, 0x0a, 0xb9, 0xa0, 0x07, 0x2b, 0x0d,
  0x24, 0xe5, 0x06, 0xe0, 0x24, 0x14, 0xeb, 0xe5, 0xe8, 0xb5, 0xa1, 0x30,
  0x68, 0xaa, 0x70, 0xd8, 0x7e, 0x05, 0x14, 0xff, 0xe8, 0xd1, 0x12, 0x1a,
  0xe6, 0xfd, 0x0c, 0xc6, 0xbc, 0x07, 0xc4, 0x05, 0x64, 0xbe, 0x91, 0x57,
  0x27, 0xc1, 0x01, 0x77, 0xe9, 0x56, 0x11, 0x77, 0x47, 0x40, 0x99, 0xa4,
  0x52, 0xdb, 0xab, 0x95, 0x59, 0x2d, 0xce, 0x99, 0xbb, 0xcb, 0x30, 0x8b,
  0x2a, 0xa1, 0xaa, 0x51, 0x41, 0x03, 0x89, 0x50, 0x37, 0xe3, 0x00, 0x59,
  0x8e, 0x5d, 0xd8, 0x75, 0x66, 0xae, 0x21, 0x57, 0x0a, 0x4d, 0xaa, 0xf2,
  0x63, 0xc6, 0x24, 0x47, 0x96, 0x05, 0x41, 0x25, 0xa9, 0x12, 0xc5, 0x11,
  0xc7, 0x7c, 0x3e, 0xb3, 0x69, 0x8b, 0x41, 0xd0, 0x95, 0xbb, 0xd9, 0x09,
  0xc6, 0x82, 0xe3, 0x85, 0xb9, 0x83, 0x38, 0x50, 0xcc, 0x77, 0x3e, 0xae,
  0x29, 0x90, 0xd9, 0xe2, 0xf7, 0x5e, 0x88, 0x40, 0x2c, 0xd6, 0x9e, 0x4b,
  0xdf, 0xba, 0xf5, 0x36, 0x45, 0xb3, 0xff, 0xde, 0xdb, 0x53, 0xf7, 0xef,
  0x7d, 0xe4, 0x48, 0x1f, 0xde, 0xa4, 0xce, 0xd0, 0x12, 0x39, 0xc0, 0x92,
  0x17, 0x86, 0xa8, 0xd8, 0x15, 0x86, 0x58, 0x56, 0xd7, 0xcb, 0x45, 0xcd,
  0x16, 0x87, 0x6a, 0x71, 0xcc, 0xb8, 0x72, 0x30, 0x61, 0x83, 0x0d, 0x7a,
  0x38, 0x17, 0x36, 0xcc, 0x5c, 0xfb, 0x53, 0x81, 0x5b, 0x27, 0x7c, 0x09,
  0x43, 0x30, 0xe1, 0x15, 0x77, 0xee, 0x1b, 0x36, 0x3c, 0x49, 0x01, 0xc7,
  0xb5, 0x8d, 0xe9, 0x92, 0x79, 0x3f, 0x83, 0x31, 0xef, 0x01, 0x71, 0x01,
  0x99, 0x6f, 0xe4, 0xd5, 0x49, 0x70, 0xc0, 0x5d, 0xba, 0x55, 0xc4, 0xdd,
  0x11, 0x50, 0x26, 0xa9, 0xd4, 0xf6, 0x6a, 0x65, 0x56, 0x8b, 0x73, 0xe6,
  0xee, 0x32, 0xcc, 0xa2, 0x4a, 0xa8, 0x6a, 0x54, 0xd0, 0x40, 0x22, 0xd4,
  0xcd, 0x38, 0x40, 0x96, 0x63, 0x17, 0x76, 0x9d, 0x99, 0x6b, 0xc8, 0x95,
  0x42, 0x93, 0xaa, 0xfc, 0x98, 0x31, 0xc9, 0x91, 0x65, 0x41, 0x50, 0x49,
  0xaa, 0x44, 0x71, 0xc4, 0x31, 0x9f, 0xcf, 0x6c, 0xda, 0x62, 0x10, 0x74,
  0xe5, 0x6e, 0x76, 0x82, 0xb1, 0xe0, 0x78, 0x61, 0xee, 0x20, 0x0e, 0x14,
  0xf3, 0x9d, 0x8f, 0x6b, 0x0a, 0x64, 0xb6, 0xf8, 0xbd, 0x17, 0x22, 0x10,
  0x8b, 0xb5, 0xe7, 0xd2, 0xb7, 0x6e, 0xbd, 0x4d, 0xd1, 0xec, 0xbf, 0xf7,
  0xf6, 0xd4, 0xfd, 0x7b, 0x1f, 0x39, 0xd2, 0x87, 0x37, 0xa9, 0x33, 0xb4,
  0x44, 0x0e, 0xb0, 0xe4, 0x85, 0x21, 0x2a, 0x76, 0x85, 0x21, 0x96, 0xd5,
  0xf5, 0x72, 0x51, 0xb3, 0xc5, 0xa1, 0x5a, 0x1c, 0x33, 0xae, 0x1c, 0x4c,
  0xd8, 0x60, 0x83, 0x1e, 0xce, 0x85, 0x0d, 0x33, 0xd7, 0xfe, 0x54, 0xe0,
  0xd6, 0x09, 0x5f, 0xc2, 0x10, 0x4c, 0x78, 0xc5, 0x9d, 0xfb, 0x86, 0x0d,
  0xe9, 0x10, 0xc8, 0x4e, 0x5e, 0xbb, 0x04, 0xb5, 0x7f, 0x47, 0x22, 0xb0,
  0x51, 0x68, 0x1b, 0x64, 0x81, 0xf1, 0x97, 0x02, 0x95, 0x93, 0x1b, 0x8f,
  0xd9, 0x3a, 0x11, 0xc6, 0x93, 0xb0, 0x20, 0x32, 0x80, 0x2a, 0xf6, 0x25,
  0x4f, 0x52, 0xc0, 0x71, 0x3a, 0x04, 0xb2, 0x93, 0xd7, 0x2e, 0x41, 0xed,
  0x02, 0x23, 0xc1, 0x27, 0x87, 0x30, 0x57, 0x22, 0x86, 0xa0, 0x42, 0x66,
  0xd0, 0x1a, 0x73, 0x41, 0x91, 0xe6, 0x74, 0x2d, 0xb1, 0xaa, 0x53, 0x4d,
  0xc5, 0x52, 0x30, 0x4a, 0x8b, 0x6d, 0x17, 0xb1, 0xd6, 0x31, 0x23, 0x41,
  0x48, 0xd4, 0xe6, 0x88, 0xfa, 0x23, 0xdb, 0x73, 0xac, 0xa5, 0x83, 0x93,
  0x75, 0xc2, 0xf6, 0x6a, 0xa4, 0x6d, 0x18, 0xcd, 0x26, 0x71, 0x0f, 0x0d,
  0xdf, 0x90, 0x08, 0x6c, 0x14, 0xda, 0x06, 0x59, 0x60, 0xfc, 0xa5, 0x40,
  0xe5, 0xe4, 0xc6, 0x63, 0xb6, 0x4e, 0x84, 0xf1, 0x24, 0x2c, 0x88, 0x0c,
  0xa0, 0x8a, 0x7d, 0x89, 0xc0, 0x48, 0xf0, 0xc9, 0x21, 0xcc, 0x95, 0x88,
  0x21, 0xa8, 0x90, 0x19, 0xb4, 0xc6, 0x5c, 0x50, 0xa4, 0x39, 0x5d, 0x4b,
  0xac, 0xea, 0x54, 0x53, 0xb1, 0x14, 0x8c, 0xd2, 0x62, 0xdb, 0x45, 0xac,
  0x75, 0xcc, 0x48, 0x10, 0x12, 0xb5, 0x39, 0xa2, 0xfe, 0xc8, 0xf6, 0x1c,
  0xbc, 0xbf, 0x1f, 0x7c, 0xbe, 0xab, 0x15, 0xee, 0x08, 0x72, 0xf9, 0xcf,
  0xc0, 0x39, 0x95, 0x44, 0xb4, 0x08, 0x3c, 0x67, 0x7e, 0x6a, 0x1f, 0x0d,
  0x39, 0x20, 0xc1, 0x5c, 0x22, 0xdd, 0xe5, 0x11, 0x62, 0xdd, 0x6d, 0xc8,
  0x6b, 0xe9, 0xe0, 0x64, 0x9d, 0xb0, 0xbd, 0x1a, 0x69, 0x1b, 0x46, 0xb3,
  0x49, 0xdc, 0x43, 0x03, 0xef, 0xef, 0x07, 0x9f, 0xef, 0x6a, 0x85, 0x3b,
  0x82, 0x5c, 0xfe, 0x33, 0x70, 0x4e, 0x25, 0x11, 0x2d, 0x02, 0xcf, 0x99,
  0x29, 0xe7, 0x4d, 0x6a, 0x7a, 0x9c, 0x07, 0x75, 0x2c, 0xdb, 0x73, 0xe6,
  0x09, 0x1e, 0x39, 0x0c, 0xce, 0x54, 0xaf, 0xd0, 0xb8, 0x9c, 0x30, 0xec,
  0x22, 0x6e, 0x08, 0xbc, 0x16, 0xf1, 0x5d, 0x70, 0x02, 0x9b, 0x90, 0x9b,
  0xed, 0x19, 0x47, 0x1d, 0x73, 0x98, 0xb4, 0xe9, 0x1c, 0xcd, 0x85, 0xd9,
  0xa0, 0x86, 0x17, 0x3a, 0x65, 0xb3, 0xf7, 0x6b, 0xef, 0xc9, 0xf3, 0xd1,
  0xe3, 0xd6, 0x3d, 0x69, 0xe6, 0x8b, 0xe1, 0xcd, 0xe4, 0x9e, 0x90, 0xc7,
  0xf9, 0xf1, 0x5b, 0x4a, 0xf9, 0x50, 0x76, 0x43, 0x5d, 0x1b, 0xd4, 0xfb,
  0x0c, 0xaf, 0x0e, 0x7b, 0x09, 0xaf, 0xc8, 0xe4, 0x0c, 0x73, 0xb8, 0x23,
  0xbe, 0x7d, 0x5b, 0x31, 0x2a, 0xc6, 0xbe, 0x20, 0xd4, 0x25, 0x18, 0x91,
  0xbc, 0xd8, 0xa8, 0xf8, 0x9e, 0xe7, 0xd1, 0xc2, 0x1e, 0xcd, 0xac, 0xcd,
  0x6e, 0xb3, 0xe9, 0x8a, 0xe2, 0xd3, 0x50, 0x0f, 0x01, 0xfa, 0xb4, 0xde,
  0x6f, 0xee, 0xf9, 0xca, 0xc5, 0x3b, 0x6e, 0x7e, 0xd0, 0xdd, 0x0c, 0xd7,
  0xba, 0x47, 0x16, 0xcf, 0xab, 0x0f, 0x73, 0xbf, 0x29, 0x15, 0x8a, 0x7e,
  0xd7, 0xfe, 0x55, 0x10, 0x22, 0xa6, 0x84, 0x7e, 0x08, 0x44, 0x43, 0x4f,
  0xf9, 0x65, 0xc1, 0x2a, 0xc0, 0xdb, 0x7c, 0x5a, 0x95, 0x75, 0x79, 0xc1,
  0x99, 0x6a, 0x9e, 0x6e, 0x70, 0x74, 0x34, 0x4e, 0x6e, 0xb2, 0x89, 0x56,
  0xc5, 0x8e, 0x42, 0x1f, 0x32, 0x73, 0x11, 0xc4, 0x45, 0xaa, 0x3c, 0x6b,
  0xb0, 0x6b, 0x1a, 0x09, 0x05, 0xa8, 0x13, 0x35, 0xb1, 0x12, 0x04, 0x15,
  0x52, 0xe1, 0xd1, 0x07, 0x70, 0x4e, 0xa2, 0x69, 0x99, 0x95, 0x91, 0x78,
  0x38, 0x4f, 0x40, 0xc5, 0x0a, 0xd3, 0x09, 0xc9, 0xf0, 0x49, 0x2a, 0x1d,
  0x9f, 0xda, 0x47, 0x43, 0x0e, 0x48, 0x30, 0x97, 0x48, 0x77, 0x79, 0x84,
  0x58, 0x77, 0x1b, 0x72, 0xca, 0x79, 0x93, 0x9a, 0x1e, 0xe7, 0x41, 0x1d,
  0xcb, 0xf6, 0x9c, 0x79, 0x82, 0x47, 0x0e, 0x83, 0x33, 0xd5, 0x2b, 0x34,
  0x2e, 0x27, 0x0c, 0xbb, 0x88, 0x1b, 0x02, 0xaf, 0x45, 0x7c, 0x17, 0x9c,
  0xc0, 0x26, 0xe4, 0x66, 0x7b, 0xc6, 0x51, 0xc7, 0x1c, 0x26, 0x6d, 0x3a,
  0x47, 0x73, 0x61, 0x36, 0xa8, 0xe1, 0x85, 0x4e, 0xd9, 0xec, 0xfd, 0xda,
  0x7b, 0xf2, 0x7c, 0xf4, 0xb8, 0x75, 0x4f, 0x9a, 0xf9, 0x62, 0x78, 0x33,
  0xb9, 0x27, 0xe4, 0x71, 0x7e, 0xfc, 0x96, 0x52, 0x3e, 0x94, 0xdd, 0x50,
  0xd7, 0x06, 0xf5, 0x3e, 0xc3, 0xab, 0xc3, 0x5e, 0xc2, 0x2b, 0x32, 0x39,
  0xc3, 0x1c, 0xee, 0x88, 0x6f, 0xdf, 0x56, 0x8c, 0x8a, 0xb1, 0x2f, 0x08,
  0x75, 0x09, 0x46, 0x24, 0x2f, 0x36, 0x2a, 0xbe, 0xe7, 0x79, 0xb4, 0xb0,
  0x47, 0x33, 0x6b, 0xb3, 0xdb, 0x6c, 0xba, 0xa2, 0xf8, 0x34, 0xd4, 0x43,
  0x80, 0x3e, 0xad, 0xf7, 0x9b, 0x7b, 0xbe, 0x72, 0xf1, 0x8e, 0x9b, 0x1f,
  0x74, 0x37, 0xc3, 0xb5, 0xee, 0x91, 0xc5, 0xf3, 0xea, 0xc3, 0xdc, 0x6f,
  0x4a, 0x85, 0xa2, 0xdf, 0xb5, 0x7f, 0x15, 0x84, 0x88, 0x29, 0xa1, 0x1f,
  0x02, 0xd1, 0xd0, 0x53, 0x7e, 0x59, 0xb0, 0x0a, 0xf0, 0x36, 0x9f, 0x56,
  0x65, 0x5d, 0x5e, 0x70, 0xa6, 0x9a, 0xa7, 0x1b, 0x1c, 0x1d, 0x8d, 0x93,
  0x9b, 0x6c, 0xa2, 0x55, 0xb1, 0xa3, 0xd0, 0x87, 0xcc, 0x5c, 0x04, 0x71,
  0x91, 0x2a, 0xcf, 0x1a, 0xec, 0x9a, 0x46, 0x42, 0x01, 0xea, 0x44, 0x4d,
  0x96, 0xd8, 0x37, 0x60, 0xd8, 0x0e, 0x94, 0x14, 0xf1, 0x57, 0x7e, 0x84,
  0xa7, 0x2c, 0xa8, 0x55, 0x99, 0x64, 0xe8, 0x49, 0x08, 0x76, 0xe0, 0xb7,
  0xc9, 0xa1, 0x8e, 0x80, 0xb3, 0xb2, 0xa2, 0x0c, 0x24, 0xaf, 0xfb, 0x09,
  0xda, 0x04, 0xae, 0x2a, 0xb8, 0x8a, 0x09, 0x6f, 0x34, 0xe4, 0xa7, 0x37,
  0x57, 0x25, 0xf7, 0x8a, 0xa2, 0x6d, 0x86, 0x68, 0xa2, 0x1a, 0x5b, 0x2e,
  0xac, 0x04, 0x41, 0x85, 0x54, 0x78, 0xf4, 0x01, 0x9c, 0x93, 0x68, 0x5a,
  0x66, 0x65, 0x24, 0x1e, 0xce, 0x13, 0x50, 0xb1, 0xc2, 0x74, 0x42, 0x32,
  0x7c, 0x92, 0x4a, 0x87, 0x25, 0xf6, 0x0d, 0x18, 0xb6, 0x03, 0x25, 0x45,
  0xeb, 0x11, 0x7c, 0x7d, 0x69, 0x90, 0xad, 0xf2, 0xc6, 0x3f, 0xa8, 0x28,
  0x36, 0xa1, 0x9c, 0x87, 0x2b, 0x29, 0x95, 0x14, 0x85, 0xd7, 0xf9, 0x65,
  0x4f, 0x2b, 0x4c, 0x76, 0x19, 0x11, 0xb4, 0x03, 0x89, 0x27, 0xba, 0xb4,
  0x34, 0x23, 0x11, 0x9a, 0x15, 0xdf, 0xd2, 0xa0, 0xc1, 0x2b, 0xfe, 0x15,
  0x3a, 0x60, 0x7b, 0xa8, 0xef, 0x17, 0x25, 0xae, 0xfc, 0xb2, 0xd6, 0x9b,
  0x6b, 0x95, 0x3f, 0x6f, 0x2e, 0xf6, 0x0a, 0x44, 0x43, 0xaf, 0x2e, 0xf2,
  0x1a, 0x00, 0x50, 0xdc, 0xa7, 0xf3, 0xc5, 0x1d, 0xf5, 0x1a, 0xc9, 0x8a,
  0xe4, 0xa3, 0x78, 0xc1, 0x58, 0xdb, 0x02, 0x1e, 0xc7, 0xd3, 0x8e, 0x74,
  0xf9, 0x57, 0xb7, 0xc4, 0x0f, 0xf6, 0x87, 0x93, 0x2c, 0x45, 0x37, 0x96,
  0x17, 0x0d, 0x14, 0xa6, 0x78, 0x65, 0x0a, 0x57, 0x63, 0x44, 0x6a, 0x53,
  0xbe, 0xe6, 0x77, 0xcf, 0x49, 0xd7, 0xc2, 0xd1, 0x9e, 0xbc, 0x7c, 0x7f,
  0xfe, 0x6d, 0xb2, 0x3f, 0xda, 0x7d, 0x50, 0x65, 0x0a, 0x31, 0x84, 0xd6,
  0x18, 0x7a, 0x78, 0xd4, 0xd4, 0xb5, 0xf8, 0xcb, 0xaa, 0x68, 0x37, 0x7b,
  0x88, 0xf9, 0xe6, 0x45, 0x7f, 0x52, 0xf1, 0x0b, 0x87, 0xcb, 0x24, 0x6b,
  0xa7, 0x56, 0xfb, 0xed, 0x80, 0x86, 0x43, 0x32, 0xe1, 0xaa, 0xfb, 0xc2,
  0x98, 0x75, 0x14, 0x9e, 0xa3, 0x35, 0x59, 0x41, 0x0f, 0xd2, 0x24, 0x6d,
  0x6a, 0xbc, 0x02, 0xef, 0x3e, 0xdf, 0x29, 0xdb, 0xc8, 0x93, 0xf4, 0xd8,
  0xb3, 0x37, 0xaf, 0x3a, 0xc3, 0x3d, 0x7d, 0xf6, 0x64, 0xf7, 0x13, 0x26,
  0xe9, 0x95, 0xf0, 0x8e, 0x88, 0x17, 0x21, 0x8a, 0x9a, 0xf3, 0x43, 0x85,
  0xba, 0x55, 0xf5, 0x33, 0x94, 0xf2, 0x90, 0x5f, 0x58, 0x5f, 0x37, 0x33,
  0x64, 0x6b, 0x69, 0xe3, 0x2a, 0xce, 0xc5, 0xc0, 0x8a, 0xfe, 0xfe, 0x8f,
  0xb0, 0xac, 0xf6, 0xcf, 0x3f, 0x53, 0x34, 0x80, 0xda, 0xdf, 0xd9, 0x2c,
  0x7f, 0x65, 0x32, 0xb5, 0x13, 0xc7, 0xb8, 0xce, 0x9b, 0xbf, 0xdb, 0x4c,
  0x6c, 0x93, 0x1a, 0xaa, 0xc4, 0x0a, 0x22, 0xd4, 0x9a, 0xcf, 0x29, 0x78,
  0x06, 0x3a, 0x3b, 0x3d, 0x56, 0xc2, 0x11, 0x4f, 0x3d, 0x8d, 0x40, 0x77,
  0x41, 0x5a, 0xb7, 0xcc, 0xfa, 0x9a, 0x4c, 0x69, 0xb7, 0x15, 0xc1, 0xef,
  0xfc, 0x95, 0x1f, 0xe1, 0x29, 0x0b, 0x6a, 0x55, 0x26, 0x19, 0x7a, 0x12,
  0x82, 0x1d, 0xf8, 0x6d, 0x72, 0xa8, 0x23, 0xe0, 0xac, 0xac, 0x28, 0x03,
  0xc9, 0xeb, 0x7e, 0x82, 0x36, 0x81, 0xab, 0x0a, 0xae, 0x62, 0xc2, 0x1b,
  0x0d, 0xf9, 0xe9, 0xcd, 0x55, 0xc9, 0xbd, 0xa2, 0x68, 0x9b, 0x21, 0x9a,
  0xa8, 0xc6, 0x96, 0xcb, 0x7a, 0x04, 0x5f, 0x5f, 0x1a, 0x64, 0xab, 0xbc,
  0xf1, 0x0f, 0x2a, 0x8a, 0x4d, 0x28, 0xe7, 0xe1, 0x4a, 0x4a, 0x25, 0x45,
  0xe1, 0x75, 0x7e, 0xd9, 0xd3, 0x0a, 0x93, 0x5d, 0x46, 0x04, 0xed, 0x40,
  0xe2, 0x89, 0x2e, 0x2d, 0xcd, 0x48, 0x84, 0x66, 0xc5, 0xb7, 0x34, 0x68,
  0xf0, 0x8a, 0x7f, 0x85, 0x0e, 0xd8, 0x1e, 0xea, 0xfb, 0x59, 0x89, 0x2b,
  0x3f, 0xaf, 0xf5, 0xe6, 0x5a, 0xe5, 0xcf, 0x9b, 0x8b, 0xbd, 0x02, 0xd1,
  0xd0, 0xab, 0x8b, 0xbc, 0x06, 0x00, 0x14, 0xf7, 0xe9, 0x7c, 0x71, 0x47,
  0xbd, 0x46, 0xb2, 0x22, 0xf9, 0x28, 0x5e, 0x30, 0xd6, 0xb6, 0x80, 0xc7,
  0xf1, 0xb4, 0x23, 0x5d, 0xfe, 0xd5, 0x2d, 0xf1, 0x83, 0xfd, 0xe1, 0x24,
  0x4b, 0xd1, 0x8d, 0xe5, 0x45, 0x03, 0x85, 0x29, 0x5e, 0x99, 0xc2, 0xd5,
  0x18, 0x91, 0xda, 0x94, 0xaf, 0xf8, 0xdd, 0x73, 0xd2, 0xb5, 0x70, 0xb4,
  0x27, 0x2f, 0xdf, 0x9f, 0x7f, 0x93, 0xec, 0x8f, 0x76, 0x1f, 0x54, 0x99,
  0x42, 0x0c, 0xa1, 0x35, 0x86, 0x1e, 0x1e, 0x35, 0x75, 0x2d, 0xfe, 0xb2,
  0x2a, 0xda, 0xcd, 0x1e, 0x62, 0xbe, 0x79, 0xd1, 0x9f, 0x54, 0xfc, 0xc2,
  0xe1, 0x32, 0xc9, 0xda, 0xa9, 0xd5, 0x7e, 0x3b, 0xa0, 0xe1, 0x90, 0x4c,
  0xb8, 0xea, 0xbe, 0x30, 0x66, 0x1d, 0x85, 0xe7, 0x68, 0x4d, 0x56, 0xd0,
  0x83, 0x34, 0x49, 0x9b, 0x1a, 0xaf, 0xc0, 0xbb, 0xcf, 0x77, 0xca, 0x36,
  0xf2, 0x24, 0x3d, 0xf6, 0xec, 0xcd, 0xab, 0xce, 0x70, 0x4f, 0x9f, 0x3d,
  0xd9, 0xfd, 0x84, 0x49, 0x7a, 0x25, 0xbc, 0x23, 0xe2, 0x45, 0x88, 0xa2,
  0xe6, 0x7c, 0x5f, 0xa1, 0x6e, 0x55, 0xfd, 0x0c, 0xa5, 0x3c, 0xe4, 0x17,
  0xd6, 0xd7, 0xcd, 0x0c, 0xd9, 0x5a, 0xda, 0xb8, 0x8a, 0x73, 0x31, 0xb0,
  0xa2, 0xbf, 0xff, 0x23, 0x2c, 0xab, 0xfd, 0xf3, 0x4f, 0x14, 0x0d, 0xa0,
  0x52, 0x37, 0x39, 0xbc, 0xd9, 0x9c, 0x5a, 0x45, 0x2b, 0x80, 0x2e, 0x4a,
  0xd5, 0xcb, 0x79, 0xd1, 0xe3, 0xbb, 0x94, 0x04, 0xa2, 0xbf, 0x9b, 0x13,
  0x18, 0x34, 0x37, 0xe5, 0x3f, 0xda, 0x7e, 0x4c, 0xa3, 0x61, 0x60, 0xbe,
  0x1f, 0x7e, 0xb7, 0x87, 0x8a, 0xa0, 0x8d, 0xee, 0x10, 0x9c, 0xdc, 0x6f,
  0x4f, 0xd5, 0x2a, 0x48, 0xeb, 0xd0, 0x74, 0xf5, 0x83, 0xa8, 0x36, 0x1e,
  0x40, 0x6b, 0xfc, 0xc7, 0x08, 0xff, 0xfd, 0xf3, 0xde, 0xf0, 0xc9, 0xcf,
  0xf6, 0xa3, 0xbf, 0xdb, 0xfb, 0xf0, 0xbb, 0xfd, 0x8d, 0x58, 0xc1, 0x97,
  0x2b, 0xfd, 0xf7, 0x12, 0x14, 0xa1, 0xd0, 0x16, 0x77, 0x52, 0xa5, 0x21,
  0x01, 0x46, 0xd7, 0x16, 0x8f, 0x9a, 0xec, 0x46, 0xf0, 0x91, 0xe0, 0xb7,
  0xf6, 0x77, 0x36, 0xcb, 0x5f, 0x99, 0x4c, 0xed, 0xc4, 0x31, 0xae, 0xf3,
  0xe6, 0x6f, 0x37, 0x13, 0xdb, 0xa4, 0x86, 0x2a, 0xb1, 0x82, 0x08, 0xb5,
  0xe6, 0x73, 0x0a, 0x9e, 0x81, 0xce, 0x4e, 0x8f, 0x95, 0x70, 0xc4, 0x53,
  0x4f, 0x23, 0xd0, 0x5d, 0x90, 0xd6, 0x2d, 0xb3, 0xbe, 0x26, 0x53, 0xda,
  0x6d, 0x45, 0xf0, 0xbb, 0xd4, 0x4d, 0x0e, 0x6f, 0x36, 0xa7, 0x56, 0xd1,
  0x0a, 0xa0, 0x8b, 0x52, 0xf5, 0x72, 0x5e, 0xf4, 0xf8, 0x2e, 0x25, 0x81,
  0xe8, 0xef, 0xe6, 0x04, 0x06, 0xcd, 0x4d, 0xf9, 0x8f, 0xb6, 0x1f, 0xd3,
  0x68, 0x18, 0x98, 0xef, 0x87, 0xdf, 0xee, 0xa1, 0x22, 0x68, 0xa3, 0x3b,
  0x04, 0x27, 0xf7, 0xdb, 0x53, 0xb5, 0x0a, 0xd2, 0x3a, 0x34, 0x5d, 0xfd,
  0x20, 0xaa, 0x8d, 0x07, 0xd0, 0x1a, 0xff, 0x31, 0xc2, 0x7f, 0xff, 0xbc,
  0x37, 0x7c, 0xf2, 0x93, 0xfd, 0xe8, 0x6f, 0xf7, 0x3e, 0xfc, 0x76, 0x7f,
  0x23, 0x56, 0xf0, 0xe5, 0x4a, 0xff, 0xbd, 0x04, 0x45, 0x28, 0xb4, 0xc5,
  0x1a, 0xb1, 0xb3, 0xd8, 0x69, 0xaa, 0xda, 0x1a, 0x4f, 0x99, 0xc3, 0x4d,
  0xc9, 0xef, 0x2b, 0x40, 0x02, 0x6e, 0x88, 0xd4, 0x0f, 0x04, 0xbc, 0xb0,
  0xc8, 0xda, 0xe4, 0x01, 0xb4, 0x14, 0x85, 0xd8, 0x08, 0x77, 0x43, 0xd2,
  0xa2, 0x8c, 0x3c, 0x4b, 0x93, 0xce, 0xa6, 0x4f, 0x26, 0xf6, 0x27, 0x45,
  0x16, 0x14, 0x62, 0x69, 0xcd, 0x26, 0x5b, 0x6f, 0xca, 0x0e, 0xca, 0x96,
  0xf3, 0x9f, 0xe5, 0x03, 0xaf, 0x5c, 0x43, 0x6f, 0x09, 0x5d, 0xe9, 0x20,
  0xf3, 0xe8, 0x2f, 0x04, 0x14, 0xe6, 0xb9, 0x39, 0x59, 0xaa, 0x98, 0x01,
  0xf3, 0xda, 0x85, 0x5f, 0xe8, 0x67, 0x12, 0x7a, 0x41, 0x85, 0x3f, 0xf5,
  0x65, 0x2b, 0x23, 0xbc, 0x2c, 0x9d, 0xa0, 0x6b, 0x5d, 0xab, 0x09, 0x90,
  0xed, 0xe8, 0x32, 0x71, 0x60, 0x53, 0x69, 0xdd, 0xb3, 0x21, 0xfe, 0x56,
  0x78, 0x9b, 0x20, 0x1b, 0x45, 0x9b, 0xb3, 0xbe, 0x61, 0xd7, 0x10, 0xb9,
  0xa3, 0x4d, 0x36, 0xf4, 0x6a, 0x62, 0xa9, 0x04, 0x97, 0x7e, 0xca, 0x2b,
  0xe4, 0x60, 0x89, 0x86, 0xf5, 0x86, 0x41, 0x2c, 0x12, 0x12, 0x6a, 0x76,
  0x67, 0xb8, 0x21, 0x43, 0xb1, 0x8e, 0x6c, 0xed, 0x83, 0xba, 0x08, 0x84,
  0xdb, 0x18, 0x52, 0xdb, 0x1c, 0x6e, 0x26, 0x5b, 0xd6, 0xb0, 0x9b, 0xa5,
  0xf5, 0xd5, 0x76, 0xcc, 0x0b, 0xe9, 0x1c, 0x7f, 0x8e, 0x51, 0x4d, 0xc4,
  0xf3, 0x00, 0x91, 0xc9, 0x1c, 0xaa, 0x5f, 0x81, 0x3d, 0x61, 0x4c, 0x0d,
  0xa4, 0x08, 0x0e, 0x6d, 0x1c, 0xb9, 0xf5, 0x93, 0x21, 0x4c, 0x45, 0xc6,
  0xd2, 0xfd, 0x4f, 0x8a, 0xc2, 0x84, 0x41, 0x2d, 0x7a, 0x96, 0x93, 0xbc,
  0x86, 0x5c, 0x00, 0xe5, 0x84, 0x28, 0xe2, 0x77, 0xc9, 0x8b, 0xe5, 0x55,
  0x65, 0x34, 0xbf, 0xb0, 0xce, 0x6a, 0xfc, 0x6d, 0xc2, 0xc0, 0x97, 0xe6,
  0x9d, 0x54, 0x69, 0x48, 0x80, 0xd1, 0xb5, 0xc5, 0xa3, 0x26, 0xbb, 0x11,
  0x7c, 0x24, 0xf8, 0xad, 0x46, 0xec, 0x2c, 0x76, 0x9a, 0xaa, 0xb6, 0xc6,
  0x53, 0xe6, 0x70, 0x53, 0xf2, 0xfb, 0x0a, 0x90, 0x80, 0x1b, 0x22, 0xf5,
  0x03, 0x01, 0x2f, 0x2c, 0xb2, 0x36, 0x79, 0x00, 0x2d, 0x45, 0x21, 0x36,
  0xc2, 0xdd, 0x90, 0xb4, 0x28, 0x23, 0xcf, 0xd2, 0xa4, 0xb3, 0xe9, 0x93,
  0x89, 0xfd, 0x49, 0x91, 0x05, 0x85, 0x58, 0x5a, 0xb3, 0xc9, 0xd6, 0x9b,
  0xb2, 0x83, 0xb2, 0xe5, 0xfc, 0x67, 0xf9, 0xc0, 0x2b, 0xd7, 0xd0, 0x5b,
  0x42, 0x57, 0x3a, 0xc8, 0x3c, 0xfa, 0x0b, 0x01, 0x85, 0x79, 0x6e, 0x4e,
  0x96, 0x2a, 0x66, 0xc0, 0xbc, 0x76, 0xe1, 0x17, 0xfa, 0x99, 0x84, 0x5e,
  0x50, 0xe1, 0x4f, 0x7d, 0xd9, 0xca, 0x08, 0x2f, 0x4b, 0x27, 0xe8, 0x5a,
  0xd7, 0x6a, 0x02, 0x64, 0x3b, 0xba, 0x4c, 0x1c, 0xd8, 0x54, 0x5a, 0xf7,
  0x6c, 0x88, 0xbf, 0x15, 0xde, 0x26, 0xc8, 0x46, 0xd1, 0xe6, 0xac, 0x6f,
  0xd8, 0x35, 0x44, 0xee, 0x68, 0x93, 0x0d, 0xbd, 0x9a, 0x58, 0x2a, 0xc1,
  0xa5, 0x9f, 0xf2, 0x0a, 0x39, 0x58, 0xa2, 0x61, 0xbd, 0x61, 0x10, 0x8b,
  0x84, 0x84, 0x9a, 0xdd, 0x19, 0x6e, 0xc8, 0x50, 0xac, 0x23, 0x5b, 0xfb,
  0xa0, 0x2e, 0x02, 0xe1, 0x36, 0x86, 0xd4, 0x36, 0x87, 0x9b, 0xc9, 0x96,
  0x35, 0xec, 0x66, 0x69, 0x7d, 0xb5, 0x1d, 0xf3, 0x42, 0x3a, 0xc7, 0x9f,
  0x63, 0x54, 0x13, 0xf1, 0x3c, 0x40, 0x64, 0x32, 0x87, 0xea, 0x57, 0x60,
  0x4f, 0x18, 0x53, 0x03, 0x29, 0x82, 0x43, 0x1b, 0x47, 0x6e, 0xfd, 0x64,
  0x08, 0x53, 0x91, 0xb1, 0x74, 0xff, 0x83, 0xa2, 0x30, 0x61, 0x50, 0x8b,
  0x29, 0x7e, 0xc6, 0x52, 0x86, 0x07, 0x36, 0xf8, 0x09, 0xf1, 0xf1, 0x90,
  0x3f, 0x32, 0x4c, 0xeb, 0x61, 0xa0, 0xe5, 0x20, 0x8c, 0xe8, 0x87, 0x4c,
  0xa1, 0x74, 0xc2, 0x16, 0x41, 0xee, 0x22, 0x42, 0x6a, 0xc5, 0x94, 0xda,
  0x77, 0x27, 0x3b, 0xa3, 0xd1, 0x0e, 0xf8, 0xd5, 0x8e, 0xf9, 0x43, 0x2c,
  0x19, 0xca, 0xb4, 0xed, 0x76, 0xb8, 0x32, 0x14, 0x8e, 0x6f, 0xc1, 0xfd,
  0x23, 0xdd, 0x20, 0xbd, 0x8e, 0x41, 0x7f, 0x5d, 0x51, 0xf6, 0x69, 0x65,
  0x34, 0xc9, 0x8a, 0xcb, 0x78, 0x17, 0x1d, 0x01, 0x19, 0xf4, 0x95, 0x62,
  0xaf, 0x7a, 0x2d, 0x60, 0x11, 0x9d, 0x5e, 0x69, 0x30, 0xe9, 0xc8, 0xf3,
  0x82, 0x45, 0xe4, 0x8d, 0xa2, 0x74, 0x51, 0xfd, 0x74, 0xba, 0xd6, 0x96,
  0x7b, 0xbc, 0xdf, 0xf6, 0x79, 0x2c, 0xf3, 0xc2, 0x58, 0x17, 0x46, 0x2f,
  0x26, 0x34, 0x4e, 0x64, 0xdf, 0x85, 0xf5, 0x3b, 0xec, 0x48, 0x0b, 0xbb,
  0x9e, 0xe5, 0x24, 0xaf, 0x21, 0x17, 0x40, 0x39, 0x21, 0x8a, 0xf8, 0x5d,
  0xf2, 0x62, 0x79, 0x55, 0x19, 0xcd, 0x2f, 0xac, 0xb3, 0x1a, 0x7f, 0x93,
  0x30, 0xf0, 0xa5, 0x79, 0x8a, 0x9f, 0xb1, 0x94, 0xe1, 0x81, 0x0d, 0x7e,
  0x42, 0x7c, 0x3c, 0xe4, 0x8f, 0x0c, 0xd3, 0x7a, 0x18, 0x68, 0x39, 0x08,
  0x23, 0xfa, 0x21, 0x53, 0x28, 0x9d, 0xb0, 0x45, 0x90, 0xbb, 0x88, 0x90,
  0x5a, 0x31, 0xa5, 0xf6, 0xdd, 0xc9, 0xce, 0x68, 0xb4, 0x03, 0x7e, 0xb5,
  0x63, 0xfe, 0x10, 0x4b, 0x86, 0x32, 0x6d, 0xbb, 0x1d, 0xae, 0x0c, 0x85,
  0xe3, 0x5b, 0x70, 0xff, 0x48, 0x37, 0x48, 0xaf, 0x63, 0xd0, 0x5f, 0x57,
  0x94, 0x7d, 0x5a, 0x19, 0x4d, 0xb2, 0xe2, 0x32, 0xde, 0x45, 0x47, 0x40,
  0x06, 0x7d, 0xa5, 0xd8, 0xab, 0x5e, 0x0b, 0x58, 0x44, 0xa7, 0x57, 0x1a,
  0x4c, 0x3a, 0xf2, 0xbc, 0x60, 0x11, 0x79, 0xa3, 0x28, 0x5d, 0x54, 0x3f,
  0x9d, 0xae, 0xb5, 0xe5, 0x1e, 0xef, 0xb7, 0x7d, 0x1e, 0xcb, 0xbc, 0x30,
  0xd6, 0x85, 0xd1, 0x8b, 0x09, 0x8d, 0x13, 0xd9, 0x77, 0x61, 0xfd, 0x0e,
  0xce, 0xac, 0x14, 0x99, 0xc8, 0x53, 0x36, 0xbc, 0x16, 0x56, 0x1c, 0xbf,
  0xdf, 0x0a, 0x04, 0x25, 0x7f, 0x64, 0x1b, 0x43, 0x78, 0xf9, 0xb9, 0xcb,
  0xcc, 0xf6, 0xc6, 0x10, 0xb4, 0x97, 0x94, 0x93, 0x7f, 0x48, 0x71, 0x97,
  0xb4, 0xe5, 0x98, 0xc7, 0xc3, 0xfa, 0x1b, 0xec, 0x65, 0xf2, 0xa6, 0x60,
  0xd6, 0x0c, 0x40, 0x53, 0xb3, 0xf3, 0xaf, 0x0f, 0xcf, 0x44, 0x3b, 0xa1,
  0x92, 0x70, 0xd7, 0x00, 0x35, 0xec, 0x0f, 0x0c, 0x23, 0xe6, 0xe9, 0x63,
  0xdb, 0x91, 0xbc, 0xbe, 0x4a, 0xf7, 0x9f, 0x3c, 0x95, 0x69, 0x2b, 0x5a,
  0x16, 0xd9, 0x48, 0x9b, 0xfc, 0xab, 0x9d, 0x1d, 0x0e, 0x94, 0xc3, 0x30,
  0x0d, 0x78, 0x42, 0x2a, 0x7d, 0xd5, 0x37, 0xbf, 0xd8, 0x8c, 0xa6, 0xc8,
  0x59, 0xa7, 0xad, 0xb6, 0xe1, 0x84, 0xe7, 0x99, 0xf2, 0xea, 0x5a, 0x9d,
  0x14, 0x06, 0xbe, 0xbf, 0x96, 0xa1, 0x0f, 0xd2, 0x35, 0x0d, 0x06, 0x04,
  0x5f, 0x42, 0x9a, 0x30, 0x25, 0x5a, 0x8a, 0x0a, 0xe4, 0x4e, 0x6f, 0x77,
  0x28, 0xe5, 0x8c, 0x9a, 0xbf, 0x4e, 0x43, 0x10, 0x13, 0x4d, 0x78, 0xc3,
  0x81, 0x78, 0x23, 0x4b, 0xda, 0x27, 0xa0, 0xaa, 0x81, 0xeb, 0x07, 0xca,
  0xd3, 0x88, 0x0b, 0xbb, 0x63, 0xe8, 0x30, 0x57, 0x93, 0x20, 0x43, 0x41,
  0xbe, 0x69, 0x61, 0x36, 0xc9, 0x9a, 0xf7, 0x12, 0x03, 0xdd, 0x75, 0x31,
  0x92, 0xa0, 0x62, 0xaf, 0xb1, 0xb7, 0x01, 0x81, 0xd5, 0x48, 0x40, 0xcc,
  0x8a, 0x9d, 0x02, 0xc4, 0x1b, 0x73, 0x2e, 0x39, 0xc3, 0x2e, 0x99, 0xb3,
  0x45, 0xd0, 0x27, 0xb8, 0x07, 0x86, 0x14, 0x76, 0x40, 0x07, 0x62, 0x68,
  0x04, 0x1d, 0x0f, 0xe0, 0x5f, 0x7e, 0x3e, 0xda, 0x3d, 0x50, 0x4c, 0xd6,
  0x41, 0xf2, 0x4d, 0xb1, 0xc2, 0x79, 0x60, 0xd1, 0xdf, 0x8c, 0xbf, 0x0b,
  0x8a, 0xab, 0xf0, 0xc6, 0xe3, 0x47, 0x78, 0xe3, 0xdd, 0x98, 0x9f, 0xba,
  0x29, 0xe7, 0x17, 0xe6, 0xcd, 0x9d, 0x57, 0x77, 0xa9, 0xf9, 0x23, 0xf6,
  0xf8, 0x33, 0x3c, 0x6e, 0x08, 0x6f, 0xd6, 0x04, 0xdd, 0xc8, 0x13, 0x69,
  0xdd, 0x73, 0x90, 0x9c, 0x96, 0xf3, 0xb4, 0x22, 0x27, 0x35, 0x13, 0xdf,
  0x3b, 0xd2, 0xc2, 0xae, 0x33, 0x2b, 0x45, 0x26, 0xf2, 0x94, 0x0d, 0xaf,
  0x85, 0x15, 0xc7, 0xef, 0xb7, 0x02, 0x41, 0xc9, 0x1f, 0xd9, 0xc6, 0x10,
  0x5e, 0x7e, 0xee, 0x32, 0xb3, 0xbd, 0x31, 0x04, 0xed, 0x25, 0xe5, 0xe4,
  0x1f, 0x52, 0xdc, 0x25, 0x6d, 0x39, 0xe6, 0xf1, 0xb0, 0xfe, 0x06, 0x7b,
  0x99, 0xbc, 0x29, 0x98, 0x35, 0x03, 0xd0, 0xd4, 0xec, 0xfc, 0xeb, 0xc3,
  0x33, 0xd1, 0x4e, 0xa8, 0x24, 0xdc, 0x35, 0x40, 0x0d, 0xfb, 0x03, 0xc3,
  0x88, 0x79, 0xfa, 0xd8, 0x76, 0x24, 0xaf, 0xaf, 0xd2, 0xfd, 0x27, 0x4f,
  0x65, 0xda, 0x8a, 0x96, 0x45, 0x36, 0xd2, 0x26, 0xff, 0x6a, 0x67, 0x87,
  0x03, 0xe5, 0x30, 0x4c, 0x03, 0x9e, 0x90, 0x4a, 0x5f, 0xf5, 0xcd, 0x3f,
  0x6c, 0x46, 0x53, 0xe4, 0xac, 0xd3, 0x56, 0xdb, 0x70, 0xc2, 0xf3, 0x4c,
  0x79, 0x75, 0xad, 0x4e, 0x0a, 0x03, 0xdf, 0x5f, 0xcb, 0xd0, 0x07, 0xe9,
  0x9a, 0x06, 0x03, 0x82, 0x2f, 0x21, 0x4d, 0x98, 0x12, 0x2d, 0x45, 0x05,
  0x72, 0xa7, 0xb7, 0x3b, 0x94, 0x72, 0x46, 0xcd, 0x5f, 0xa7, 0x21, 0x88,
  0x89, 0x26, 0xbc, 0xe1, 0x40, 0xbc, 0x91, 0x25, 0xed, 0x13, 0x50, 0xd5,
  0xc0, 0xf5, 0x03, 0xe5, 0x69, 0xc4, 0x85, 0xdd, 0x31, 0x74, 0x98, 0xab,
  0x49, 0x90, 0xa1, 0x20, 0xdf, 0xb4, 0x30, 0x9b, 0x64, 0xcd, 0x7b, 0x89,
  0x81, 0xee, 0xba, 0x18, 0x49, 0x50, 0xb1, 0xd7, 0xd8, 0xdb, 0x80, 0xc0,
  0x6a, 0x24, 0x20, 0x66, 0xc5, 0x4e, 0x01, 0xe2, 0x8d, 0x39, 0x97, 0x9c,
  0x61, 0x97, 0xcc, 0xd9, 0x22, 0xe8, 0x13, 0xdc, 0x03, 0x43, 0x0a, 0x3b,
  0xa0, 0x03, 0x31, 0x34, 0x82, 0x8e, 0x07, 0xf0, 0x2f, 0x3f, 0x1f, 0xed,
  0x1e, 0x28, 0x26, 0xeb, 0x20, 0xf9, 0xba, 0x58, 0xe1, 0x3c, 0xb0, 0xe8,
  0xaf, 0xc7, 0xdf, 0x06, 0xc5, 0x55, 0x78, 0xe3, 0xf1, 0x23, 0xbc, 0xf1,
  0x6e, 0xcc, 0x4f, 0xdd, 0x94, 0xf3, 0x0b, 0xf3, 0xe6, 0xce, 0xab, 0xbb,
  0xd4, 0xfc, 0x11, 0x7b, 0xfc, 0x19, 0x1e, 0x37, 0x84, 0x37, 0x6b, 0x82,
  0x9a, 0x19, 0x3f, 0x7e, 0x1c, 0x99, 0xf1, 0xa0, 0x67, 0x42, 0xa3, 0x7f,
  0x7e, 0x46, 0x27, 0xe4, 0xf6, 0xc3, 0xdf, 0x26, 0xe9, 0xf4, 0x23, 0x51,
  0x22, 0xe5, 0xb1, 0x5b, 0x88, 0xe1, 0x4f, 0xc9, 0xcd, 0x19, 0x79, 0xe0,
  0x21, 0x9d, 0x8c, 0x2a, 0x82, 0x5e, 0x6b, 0xa8, 0xa4, 0xfd, 0xd9, 0xfe,
  0xa3, 0xbd, 0x9d, 0xa7, 0xa3, 0xc7, 0xa3, 0x7d, 0x9b, 0x57, 0x66, 0x08,
  0xeb, 0x1a, 0x7d, 0x33, 0x10, 0xc8, 0x8f, 0xf8, 0xbe, 0x29, 0xa3, 0x22,
  0x2f, 0xcc, 0x38, 0x88, 0xf9, 0xdb, 0x9f, 0x90, 0xd3, 0xc8, 0x65, 0x94,
  0xa4, 0x80, 0x99, 0xf0, 0x0b, 0x94, 0x46, 0x91, 0x16, 0x81, 0xc0, 0x6b,
  0xc0, 0x24, 0xd4, 0xd1, 0x81, 0x66, 0xc6, 0x94, 0xea, 0x39, 0xc9, 0x8d,
  0xc1, 0xdc, 0x94, 0x2b, 0xf2, 0xa8, 0xc3, 0x7d, 0xa3, 0x40, 0xeb, 0xa4,
  0x20, 0xd1, 0x3a, 0x70, 0xc5, 0x22, 0x7e, 0x31, 0x9e, 0x3c, 0x65, 0xef,
  0x4e, 0x5a, 0xcd, 0xdc, 0xe1, 0x88, 0x6d, 0xc8, 0x19, 0x4b, 0x0d, 0x4e,
  0x8c, 0x21, 0x53, 0x4c, 0xa1, 0x85, 0x7c, 0x6b, 0xec, 0x8c, 0x6b, 0xf2,
  0x6e, 0xe4, 0x89, 0xb4, 0xee, 0x39, 0x48, 0x4e, 0xcb, 0x79, 0x5a, 0x91,
  0x93, 0x9a, 0x89, 0x6f, 0xcd, 0x8c, 0x1f, 0x3f, 0x8e, 0xcc, 0x78, 0xd0,
  0x33, 0xa1, 0xd1, 0x3f, 0x3f, 0xa3, 0x13, 0x72, 0xfb, 0xe1, 0x6f, 0x93,
  0x74, 0xfa, 0x91, 0x28, 0x91, 0xf2, 0xd8, 0x2d, 0xc4, 0xf0, 0xa7, 0xe4,
  0xe6, 0x8c, 0x3c, 0xf0, 0x90, 0x4e, 0x46, 0x15, 0x41, 0xaf, 0x35, 0x54,
  0xd2, 0xfe, 0x6c, 0xff, 0xd1, 0xde, 0xce, 0xd3, 0xd1, 0xe3, 0xd1, 0xbe,
  0xcd, 0x2b, 0x33, 0x84, 0x75, 0x8d, 0xbe, 0x19, 0x08, 0xe4, 0x47, 0x7c,
  0xdf, 0x94, 0x51, 0x91, 0x17, 0x66, 0x1c, 0xc4, 0xfc, 0xed, 0x4f, 0xc8,
  0x69, 0xe4, 0x32, 0x4a, 0x52, 0xc0, 0x4c, 0xf8, 0x05, 0x4a, 0xa3, 0x48,
  0x8b, 0x40, 0xe0, 0x35, 0x60, 0x12, 0xea, 0xe8, 0x40, 0x33, 0x63, 0x4a,
  0xf5, 0x9c, 0xe4, 0xc6, 0x60, 0x6e, 0xca, 0x15, 0x79, 0xd4, 0xe1, 0xbe,
  0x51, 0xa0, 0x75, 0x52, 0x90, 0x68, 0x1d, 0xb8, 0x62, 0x11, 0xbf, 0x18,
  0x4f, 0x9e, 0xb2, 0x77, 0x27, 0xad, 0x66, 0xee, 0x70, 0xc4, 0x36, 0xe4,
  0x19, 0xc7, 0x3a, 0x84, 0xc3, 0xcc, 0x80, 0x7a, 0x6c, 0xbd, 0xfe, 0x9a,
  0xe0, 0xe0, 0xd0, 0xd0, 0xe5, 0x07, 0x5c, 0x33, 0xc1, 0xee, 0x0f, 0x5a,
  0x77, 0xc0, 0xee, 0x5a, 0x3d, 0xd5, 0xdd, 0x89, 0x0b, 0x8e, 0x38, 0x2a,
  0x96, 0xd8, 0xbb, 0xed, 0xb2, 0x83, 0xfd, 0xc2, 0xb3, 0x98, 0xf7, 0xe5,
  0x1e, 0x57, 0x84, 0x00, 0x50, 0xb4, 0x11, 0x28, 0xf8, 0x5f, 0x9d, 0xc6,
  0x9e, 0x2a, 0x05, 0x83, 0xca, 0xa5, 0x6e, 0xe7, 0x43, 0x19, 0xf3, 0x57,
  0x53, 0xd9, 0xa3, 0xdf, 0x9e, 0xca, 0xf6, 0x1f, 0x4a, 0x65, 0x8e, 0xc8,
  0x70, 0xcf, 0xd6, 0x90, 0x18, 0x68, 0x4c, 0x3b, 0x9e, 0xc7, 0xa9, 0xcc,
  0x27, 0x33, 0x32, 0x51, 0x63, 0x84, 0xd6, 0xa2, 0x33, 0x4b, 0x66, 0x3d,
  0x54, 0xc6, 0x20, 0x55, 0x4c, 0x63, 0xeb, 0x49, 0x8c, 0x69, 0x8c, 0xbb,
  0x52, 0xaf, 0xa1, 0xb2, 0xb6, 0x07, 0x7e, 0x3d, 0x9d, 0x39, 0x72, 0x78,
  0x30, 0x95, 0x69, 0x1f, 0x1b, 0xe6, 0x3a, 0x3d, 0x24, 0xd6, 0xa2, 0xb1,
  0x35, 0x0d, 0xff, 0xf6, 0x9e, 0xc7, 0xa8, 0xec, 0xd1, 0x43, 0xa8, 0xcc,
  0x1c, 0xe8, 0x1c, 0xb2, 0xb7, 0x45, 0x65, 0x8f, 0x7f, 0x5b, 0x2a, 0x03,
  0x48, 0x4e, 0xb7, 0xd8, 0x32, 0x79, 0xf9, 0xcf, 0x9e, 0x63, 0x4a, 0xc3,
  0xea, 0xa8, 0x41, 0x0d, 0xe2, 0x2f, 0xe3, 0x14, 0x9d, 0x0b, 0x7d, 0xef,
  0x89, 0xb5, 0x61, 0x69, 0xf6, 0x7e, 0xf1, 0x89, 0xed, 0x77, 0xe2, 0x83,
  0x46, 0xf5, 0x63, 0xa7, 0xed, 0x9f, 0xd5, 0x79, 0x7e, 0xb0, 0xb3, 0xf3,
  0x33, 0x39, 0x21, 0x0e, 0x20, 0xfb, 0x7e, 0x0e, 0xba, 0xde, 0x46, 0xf4,
  0xe3, 0xf1, 0xc9, 0xab, 0xef, 0xc6, 0xe2, 0xfc, 0x15, 0x25, 0x46, 0x95,
  0x8c, 0xa5, 0x06, 0x27, 0xc6, 0x90, 0x29, 0xa6, 0xd0, 0x42, 0xbe, 0x31,
  0x76, 0xc6, 0x35, 0xf9, 0x8c, 0x63, 0x1d, 0xc2, 0x61, 0x66, 0x40, 0x3d,
  0xb6, 0x5e, 0x7f, 0x4d, 0x70, 0x70, 0x68, 0xe8, 0xf2, 0x03, 0xae, 0x99,
  0x60, 0xf7, 0x07, 0xad, 0x3b, 0x60, 0x77, 0xad, 0x9e, 0xea, 0xee, 0xc4,
  0x05, 0x47, 0x1c, 0x15, 0x4b, 0xec, 0xdd, 0x76, 0xd9, 0xc1, 0x7e, 0xe1,
  0x59, 0xcc, 0xfb, 0x72, 0x8f, 0x2b, 0x42, 0x00, 0x28, 0xda, 0x08, 0x14,
  0xfc, 0xaf, 0x4e, 0x63, 0x4f, 0x95, 0x82, 0x41, 0xe5, 0x52, 0xb7, 0xf3,
  0xa1, 0x8c, 0xf9, 0x8b, 0xa9, 0xec, 0xd1, 0xaf, 0x4f, 0x65, 0xfb, 0x0f,
  0xa5, 0x32, 0x47, 0x64, 0xb8, 0x67, 0x6b, 0x48, 0x0c, 0x34, 0xa6, 0x1d,
  0xcf, 0xe3, 0x54, 0xe6, 0x93, 0x19, 0x99, 0xa8, 0x31, 0x42, 0x6b, 0xd1,
  0x99, 0x25, 0xb3, 0x1e, 0x2a, 0x63, 0x90, 0x2a, 0xa6, 0xb1, 0xf5, 0x24,
  0xc6, 0x34, 0xc6, 0x5d, 0xa9, 0xd7, 0x50, 0x59, 0xdb, 0x03, 0xbf, 0x9e,
  0xce, 0x1c, 0x39, 0x3c, 0x98, 0xca, 0xb4, 0x8f, 0x0d, 0x73, 0x9d, 0x1e,
  0x12, 0x6b, 0xd1, 0xd8, 0x9a, 0x86, 0x7f, 0x7b, 0xcf, 0x63, 0x54, 0xf6,
  0xe8, 0x21, 0x54, 0x66, 0x0e, 0x74, 0x0e, 0xd9, 0xdb, 0xa2, 0xb2, 0xc7,
  0xbf, 0x2e, 0x95, 0x01, 0x24, 0xa7, 0x5b, 0x6c, 0x99, 0xbc, 0xfc, 0x67,
  0xcf, 0x31, 0xa5, 0x61, 0x75, 0xd4, 0xa0, 0x06, 0xf1, 0xe7, 0x71, 0x8a,
  0xce, 0x85, 0xbe, 0xf7, 0xc4, 0xda, 0xb0, 0x34, 0x7b, 0x3f, 0xfb, 0xc4,
  0xf6, 0x3b, 0xf1, 0x41, 0xa3, 0xfa, 0xb1, 0xd3, 0xf6, 0xcf, 0xea, 0x3c,
  0x3f, 0xd8, 0xd9, 0xf9, 0x89, 0x9c, 0x10, 0x07, 0x90, 0x7d, 0x3f, 0x05,
  0x1c, 0xc2, 0xb3, 0x43, 0xc8, 0x87, 0xca, 0x87, 0x03, 0xbd, 0x99, 0xbb,
  0x25, 0x0e, 0x6f, 0x07, 0xea, 0x81, 0xa5, 0xbc, 0x1d, 0x61, 0xc6, 0x84,
  0x92, 0xc6, 0xd7, 0x59, 0x9c, 0xbb, 0x32, 0x6a, 0x2f, 0x20, 0x16, 0x4f,
  0x44, 0x66, 0x62, 0x6d, 0xff, 0xc2, 0x7b, 0x71, 0xab, 0xb9, 0xaa, 0xa8,
  0x38, 0x82, 0x1e, 0xdd, 0xd6, 0xf8, 0xcb, 0xba, 0xd9, 0xc9, 0xbc, 0xbe,
  0x25, 0x34, 0xd9, 0x65, 0x95, 0xf5, 0x74, 0x9a, 0x3e, 0xbf, 0xf2, 0x7e,
  0xab, 0xae, 0x28, 0x87, 0x2a, 0xee, 0xb6, 0x4b, 0xd0, 0xd1, 0xbc, 0xfd,
  0xc6, 0x7b, 0x41, 0x0e, 0x1a, 0xe0, 0x7f, 0xa9, 0x8c, 0xc5, 0x82, 0x93,
  0xcc, 0xa9, 0xcf, 0x68, 0xa3, 0x8d, 0x39, 0x6e, 0xef, 0x5c, 0x63, 0xc8,
  0x5a, 0x0a, 0x61, 0xd0, 0xfa, 0xa2, 0x7e, 0x6c, 0x86, 0xec, 0x3a, 0x36,
  0xf8, 0x17, 0x29, 0x7e, 0xc3, 0x7f, 0x7f, 0x82, 0xef, 0x52, 0x84, 0x82,
  0xfe, 0x75, 0x85, 0x7f, 0x4a, 0x70, 0x5e, 0x20, 0x98, 0xfc, 0x53, 0x9e,
  0xc6, 0x37, 0xda, 0xaf, 0xb7, 0xb1, 0xf0, 0x00, 0xef, 0xca, 0x00, 0x62,
  0x5d, 0x6f, 0x23, 0xfa, 0xf1, 0xf8, 0xe4, 0xd5, 0xb7, 0x63, 0x71, 0xfe,
  0x8a, 0x12, 0xa3, 0x4a, 0x0e, 0xe1, 0xd9, 0x21, 0xe4, 0x43, 0xe5, 0xc3,
  0x81, 0xde, 0xcc, 0xdd, 0x12, 0x87, 0xb7, 0x03, 0xf5, 0xc0, 0x52, 0xde,
  0x8e, 0x30, 0x63, 0x42, 0x49, 0xe3, 0xeb, 0x2c, 0xce, 0x5d, 0x19, 0xb5,
  0x17, 0x10, 0x8b, 0x27, 0x22, 0x33, 0xb1, 0xb6, 0x7f, 0xe1, 0xbd, 0xb8,
  0xd5, 0x5c, 0x55, 0x54, 0x1c, 0x41, 0x8f, 0x6e, 0x6b, 0xfc, 0x65, 0xdd,
  0xec, 0x64, 0x5e, 0xdf, 0x10, 0x9a, 0xec, 0xb2, 0xca, 0x7a, 0x3a, 0x4d,
  0x9f, 0x5f, 0x79, 0xbf, 0x55, 0x57, 0x94, 0x43, 0x15, 0x77, 0xdb, 0x25,
  0xe8, 0x68, 0xde, 0x7e, 0xe3, 0xbd, 0x20, 0x07, 0x0d, 0xf0, 0xbf, 0x54,
  0xc6, 0x62, 0xc1, 0x49, 0xe6, 0xd4, 0x67, 0xb4, 0xd1, 0xc6, 0x1c, 0xb7,
  0x77, 0xae, 0x31, 0x64, 0x2d, 0x85, 0x30, 0x68, 0x7d, 0x51, 0x3f, 0x36,
  0x43, 0x76, 0x1d, 0x1b, 0xfc, 0x8b, 0x14, 0xbf, 0xe1, 0xbf, 0x3f, 0xc1,
  0x77, 0x29, 0x42, 0x41, 0xff, 0xba, 0xc2, 0x3f, 0x25, 0x38, 0x2f, 0x10,
  0x88, 0x56, 0xed, 0xc3, 0xb8, 0x05, 0x79, 0x13, 0x96, 0x0b, 0xd3, 0xc8,
  0x8f, 0xe3, 0x0a, 0x57, 0xe6, 0xa3, 0x34, 0x6a, 0xd1, 0xbd, 0xdf, 0x2c,
  0xcb, 0x45, 0x1c, 0xe5, 0x00, 0x06, 0xd4, 0x1c, 0x2a, 0x02, 0xa3, 0xcc,
  0xad, 0x20, 0x64, 0xde, 0x7b, 0xbb, 0x9f, 0x87, 0x5e, 0xdb, 0xf7, 0x5a,
  0x10, 0xe6, 0xa0, 0x0a, 0x29, 0xaf, 0x80, 0x92, 0xb3, 0x27, 0xae, 0x0e,
  0x22, 0xf6, 0xd9, 0x48, 0xd5, 0x18, 0x8c, 0xe9, 0x59, 0xc6, 0xd6, 0xd7,
  0x84, 0x0d, 0x69, 0xe1, 0x13, 0x69, 0xbb, 0xf5, 0x03, 0x7c, 0x0f, 0xb9,
  0x24, 0xd6, 0xc2, 0x31, 0xc3, 0xd1, 0xf1, 0x80, 0xbf, 0x53, 0x83, 0x6d,
  0x89, 0xd9, 0x7c, 0xe5, 0x70, 0xaf, 0x7e, 0xff, 0x78, 0x17, 0xa7, 0xaa,
  0xa3, 0xa0, 0x1d, 0xcc, 0x5c, 0x7d, 0xed, 0xbf, 0x7f, 0x94, 0x8e, 0xfe,
  0x85, 0x40, 0x46, 0x4f, 0xda, 0x66, 0xf9, 0xef, 0xe4, 0x8e, 0x5f, 0x02,
  0x6e, 0x65, 0x38, 0x49, 0xab, 0x48, 0x01, 0x82, 0x68, 0x88, 0x0a, 0xd2,
  0xa1, 0x08, 0x17, 0xfa, 0x16, 0x77, 0x56, 0x90, 0xac, 0x72, 0xfb, 0x43,
  0x33, 0x54, 0x12, 0xb6, 0x6b, 0xb0, 0x0e, 0x6f, 0xbf, 0xbd, 0xea, 0x20,
  0x40, 0x96, 0x4a, 0xe7, 0x03, 0x84, 0xc2, 0x22, 0xf8, 0x43, 0x74, 0x36,
  0xad, 0x8f, 0xcc, 0xaa, 0xf4, 0xc6, 0x33, 0xc9, 0x19, 0xda, 0xfd, 0x82,
  0x1d, 0xdf, 0x36, 0x87, 0x01, 0x29, 0xd6, 0x08, 0x69, 0xc6, 0xb4, 0x8f,
  0x7a, 0x5a, 0x65, 0x12, 0x62, 0x00, 0x4e, 0x20, 0x85, 0x2f, 0x01, 0xb0,
  0x67, 0xd4, 0x8e, 0xcb, 0x4c, 0x0b, 0x0f, 0xed, 0xaa, 0x15, 0x59, 0x82,
  0xe0, 0x24, 0x46, 0x91, 0xac, 0x5e, 0x97, 0xb8, 0xa3, 0xed, 0x6e, 0x53,
  0xc1, 0x9e, 0xc0, 0xab, 0x5a, 0x02, 0x2a, 0xe9, 0xd1, 0x0c, 0xdb, 0x82,
  0xb6, 0x6d, 0xe6, 0xdb, 0x79, 0xb7, 0x99, 0xf9, 0xd6, 0xf0, 0xcb, 0xf2,
  0xcb, 0xe1, 0xb6, 0xba, 0x3e, 0x81, 0xfb, 0x58, 0x93, 0x2d, 0x44, 0x93,
  0x45, 0xc0, 0xf3, 0x8a, 0xbc, 0x36, 0x22, 0xbe, 0xa8, 0x88, 0x81, 0x32,
  0x4c, 0xfe, 0x29, 0x4f, 0xe3, 0x1b, 0xed, 0xd7, 0xdb, 0x58, 0x78, 0x80,
  0x77, 0x65, 0x00, 0x31, 0x44, 0xab, 0xf6, 0x61, 0xdc, 0x82, 0xbc, 0x09,
  0xcb, 0x85, 0x69, 0xe4, 0xc7, 0x71, 0x85, 0x2b, 0xf3, 0x51, 0x1a, 0xb5,
  0xe8, 0xde, 0x6f, 0x96, 0xe5, 0x22, 0x8e, 0x72, 0x00, 0x03, 0x6a, 0x0e,
  0x15, 0x81, 0x51, 0xe6, 0x56, 0x10, 0x32, 0xef, 0xbd, 0xdd, 0xcf, 0x43,
  0xaf, 0xed, 0x7b, 0x2d, 0x08, 0x73, 0x50, 0x85, 0x94, 0x57, 0x40, 0xc9,
  0xd9, 0x13, 0x57, 0x07, 0x11, 0xfb, 0x6c, 0xa4, 0x6a, 0x0c, 0xc6, 0xf4,
  0x2c, 0x63, 0xeb, 0x6b, 0xc2, 0x86, 0xb4, 0xf0, 0x89, 0xb4, 0xdd, 0xfa,
  0x01, 0xbe, 0x87, 0x5c, 0x12, 0x6b, 0xe1, 0x98, 0xe1, 0xe8, 0x78, 0xc0,
  0xdf, 0xa9, 0xc1, 0xb6, 0xc4, 0x6c, 0xbe, 0x74, 0xb8, 0x57, 0xbf, 0x7b,
  0xbc, 0x8b, 0x53, 0xd5, 0x51, 0xd0, 0x0e, 0x66, 0xae, 0xbe, 0xf6, 0xdf,
  0x3d, 0x4a, 0x47, 0xff, 0x42, 0x20, 0xa3, 0x27, 0x6d, 0xb3, 0xfc, 0xb7,
  0x72, 0xc7, 0x2f, 0x01, 0xb7, 0x32, 0x9c, 0xa4, 0x55, 0xa4, 0x00, 0x41,
  0x34, 0x44, 0x05, 0xe9, 0x50, 0x84, 0x0b, 0x7d, 0x8b, 0x3b, 0x2b, 0x48,
  0x56, 0xb9, 0xfd, 0xa1, 0x19, 0x2a, 0x09, 0xdb, 0x35, 0x58, 0x87, 0xb7,
  0xdf, 0x5e, 0x75, 0x10, 0x20, 0x4b, 0xa5, 0xf3, 0x01, 0x42, 0x61, 0x11,
  0xfc, 0x21, 0x3a, 0x9b, 0xd6, 0x47, 0x66, 0x55, 0x7a, 0xe3, 0x99, 0xe4,
  0x0c, 0xed, 0x7e, 0xc1, 0x8e, 0x6f, 0x9b, 0xc3, 0x80, 0x14, 0x6b, 0x84,
  0x34, 0x63, 0xda, 0x47, 0x3d, 0xad, 0x32, 0x09, 0x31, 0x00, 0x27, 0x90,
  0xc2, 0x97, 0x00, 0xd8, 0x33, 0x6a, 0xc7, 0x65, 0xa6, 0x85, 0x87, 0x76,
  0xd5, 0x8a, 0x2c, 0x41, 0x70, 0x12, 0xa3, 0x48, 0x56, 0xaf, 0x4b, 0xdc,
  0xd1, 0x76, 0xb7, 0xa9, 0x60, 0x4f, 0xe0, 0x55, 0x2d, 0x01, 0x95, 0xf4,
  0x68, 0x86, 0x6d, 0x41, 0xdb, 0x36, 0xf3, 0xed, 0xbc, 0xdb, 0xcc, 0x7c,
  0x6b, 0xf8, 0x45, 0xf9, 0xc5, 0x70, 0x5b, 0x5d, 0x9f, 0xc0, 0x7d, 0xac,
  0xc9, 0x16, 0xa2, 0xc9, 0x22, 0xe0, 0x79, 0x45, 0x5e, 0x1b, 0x11, 0x5f,
  0x54, 0xc4, 0x40, 0x19, 0x8c, 0x82, 0xeb, 0x14, 0x34, 0x14, 0xe1, 0x99,
  0x55, 0x88, 0x74, 0x0a, 0xbf, 0x83, 0x7f, 0xc7, 0xec, 0xd6, 0x05, 0x27,
  0x18, 0x05, 0xd7, 0x29, 0x68, 0x28, 0xc2, 0x33, 0xab, 0x10, 0xe9, 0x14,
  0x7e, 0x07, 0xff, 0x8e, 0xd9, 0xad, 0x0b, 0x4e, 0x90, 0xa2, 0x9a, 0x48,
  0x84, 0x81, 0x05, 0x88, 0x98, 0x9d, 0xca, 0xe5, 0xb2, 0x2d, 0x9b, 0x50,
  0x5e, 0xab, 0xbc, 0xe1, 0x85, 0x32, 0x95, 0x3f, 0xde, 0x9b, 0x3c, 0x6f,
  0xd9, 0xcf, 0x85, 0x78, 0x45, 0x70, 0xf9, 0xa8, 0x98, 0x82, 0x01, 0x8c,
  0xa7, 0x57, 0xd9, 0x42, 0x1a, 0xaf, 0xf4, 0x94, 0x22, 0xf7, 0xd6, 0xed,
  0x48, 0x51, 0x4d, 0x24, 0xc2, 0xc0, 0x02, 0x44, 0xcc, 0x4e, 0xe5, 0x72,
  0xd9, 0x96, 0x4d, 0x28, 0xaf, 0x55, 0xde, 0xf0, 0x42, 0x99, 0xca, 0x1f,
  0xef, 0x4d, 0x9e, 0xb7, 0xec, 0xe7, 0x42, 0xbc, 0x22, 0xb8, 0x7c, 0x54,
  0x4c, 0xc1, 0x00, 0xc6, 0xd3, 0xab, 0x6c, 0x21, 0x8d, 0x57, 0x7a, 0x4a,
  0x91, 0x7b, 0xeb, 0x76, 0xdb, 0x73, 0xe2, 0xec, 0xb2, 0x8b, 0x66, 0x39,
  0x5a, 0x94, 0x7f, 0x33, 0xdb, 0x9c, 0xa2, 0x93, 0x5b, 0x70, 0x25, 0x8c,
  0xb6, 0xe7, 0xc4, 0xd9, 0x65, 0x17, 0xcd, 0x72, 0xb4, 0x28, 0xff, 0x66,
  0xb6, 0x39, 0x45, 0x27, 0xb7, 0xe0, 0x4a, 0x18, 0x59, 0x5f, 0xf0, 0xb9,
  0x20, 0x46, 0x50, 0x58, 0xab, 0xd2, 0xb1, 0xef, 0x44, 0x81, 0xa6, 0xb9,
  0x62, 0x3c, 0x49, 0x5e, 0x99, 0x19, 0x1f, 0x7e, 0x78, 0xff, 0x6e, 0xfc,
  0xac, 0x2f, 0xf8, 0x5c, 0x10, 0x23, 0x28, 0xac, 0x55, 0xe9, 0xd8, 0x77,
  0xa2, 0x40, 0xd3, 0x5c, 0x31, 0x9e, 0x24, 0xaf, 0xcc, 0x8c, 0x0f, 0x3f,
  0xbc, 0x7f, 0x37, 0x7e, 0x7f, 0xda, 0x25, 0xec, 0xd3, 0x93, 0xb3, 0xf3,
  0xfe, 0xb4, 0x4b, 0xd8, 0xa7, 0x27, 0x67, 0xe7, 0x87, 0xaf, 0x3f, 0x9c,
  0x9e, 0x9d, 0x9c, 0x9f, 0xbc, 0x3a, 0x39, 0x4e, 0xb6, 0xf6, 0xb6, 0xd7,
  0x96, 0x48, 0x59, 0x97, 0x86, 0x87, 0xb7, 0xa7, 0xf3, 0x67, 0x9e, 0x65,
  0x67, 0xb1, 0x85, 0xf5, 0x84, 0xa3, 0xfd, 0x20, 0xd4, 0xd5, 0xae, 0xed,
  0x63, 0xdf, 0x06, 0x89, 0x37, 0x62, 0xeb, 0x69, 0x72, 0xb9, 0xe2, 0x9b,
  0xe2, 0xc2, 0xe5, 0x8c, 0x34, 0x19, 0x28, 0x5c, 0x1a, 0xb0, 0xf3, 0xaa,
  0x6b, 0xd6, 0xfa, 0xf7, 0x9e, 0x74, 0x75, 0x16, 0x9c, 0x01, 0x29, 0x60,
  0x8e, 0x2a, 0xea, 0xf5, 0x64, 0xc1, 0x90, 0x1c, 0x84, 0xe3, 0x6c, 0xdf,
  0xc3, 0xd7, 0x1f, 0x4e, 0xcf, 0x4e, 0xce, 0x4f, 0x5e, 0x9d, 0x1c, 0x27,
  0x5b, 0x7b, 0xdb, 0x6b, 0x4b, 0xa4, 0xac, 0x4b, 0xc3, 0xc3, 0xdb, 0xd3,
  0xf9, 0x33, 0xcf, 0xb2, 0xb3, 0xd8, 0xc2, 0x7a, 0xc2, 0xd1, 0xbe, 0x17,
  0xea, 0x6a, 0xd7, 0xf6, 0xb1, 0x6f, 0x83, 0xc4, 0x1b, 0xb1, 0xf5, 0x34,
  0xb9, 0x5c, 0xf1, 0x4d, 0x71, 0xe1, 0x72, 0x46, 0x9a, 0x0c, 0x14, 0x2e,
  0x0d, 0xd8, 0x79, 0xd5, 0x35, 0x6b, 0xfd, 0x7b, 0x4f, 0xba, 0x3a, 0x0b,
  0xce, 0x80, 0x14, 0x30, 0x47, 0x15, 0xf5, 0x7a, 0xb2, 0x60, 0x48, 0x0e,
  0xc2, 0x71, 0xb6, 0x6f, 0x10, 0xca, 0xbd, 0x84, 0x50, 0xa8, 0x24, 0x95,
  0x20, 0x94, 0x7b, 0x09, 0xa1, 0x50, 0x49, 0x2a, 0x6b, 0x74, 0x46, 0x94,
  0x9e, 0x86, 0xdd, 0x89, 0xe4, 0x15, 0xb4, 0x30, 0x97, 0x1e, 0x99, 0x32,
  0x11, 0x0a, 0xa1, 0x61, 0x7f, 0x25, 0xa2, 0x6b, 0x1e, 0xc0, 0x6f, 0x3d,
  0xae, 0x4a, 0xa5, 0x45, 0x41, 0x58, 0x92, 0x5f, 0xbe, 0xa0, 0xfe, 0x8c,
  0x35, 0x3a, 0x23, 0x4a, 0x4f, 0xc3, 0xee, 0x44, 0xf2, 0x0a, 0x5a, 0x98,
  0x4b, 0x8f, 0x4c, 0x99, 0x08, 0x85, 0xd0, 0xb0, 0xbf, 0x12, 0xd1, 0x35,
  0x0f, 0xe0, 0xb7, 0x1e, 0x57, 0xa5, 0xd2, 0xa2, 0x20, 0x2c, 0xc9, 0x2f,
  0x37, 0xde, 0xa4, 0x30, 0x1c, 0x94, 0x32, 0x42, 0xd3, 0x8b, 0x70, 0xd8,
  0x43, 0x8d, 0xce, 0x30, 0xce, 0x06, 0xdd, 0x48, 0x52, 0x5f, 0x14, 0xa4,
  0x65, 0xec, 0x2f, 0xe6, 0x1e, 0x42, 0xe6, 0x4d, 0x84, 0xbb, 0x7c, 0x80,
  0xb3, 0x1f, 0x30, 0x41, 0x4b, 0x58, 0x6a, 0x4d, 0x86, 0xbe, 0x43, 0x3c,
  0xf1, 0x7d, 0x5c, 0x34, 0x21, 0xb8, 0xde, 0xdd, 0x6a, 0xbc, 0xa9, 0x68,
  0x5f, 0x50, 0x7f, 0xc6, 0x1b, 0x6f, 0x52, 0x18, 0x0e, 0x4a, 0x19, 0xa1,
  0xe9, 0x45, 0x38, 0xec, 0xa1, 0x46, 0x67, 0x18, 0x67, 0x83, 0x6e, 0x24,
  0xa9, 0x2f, 0x0a, 0xd2, 0x32, 0xf6, 0x17, 0x73, 0x0f, 0x21, 0xf3, 0x26,
  0xc2, 0x5d, 0x3e, 0xc0, 0xd9, 0x0f, 0x98, 0xa0, 0x25, 0x2c, 0xb5, 0x26,
  0x43, 0xdf, 0x21, 0x9e, 0xf8, 0x3e, 0x2e, 0x9a, 0x10, 0x5c, 0xef, 0x6e,
  0x35, 0xde, 0x54, 0xb4, 0x48, 0xd2, 0xc8, 0x96, 0xee, 0xe6, 0x92, 0xac,
  0x91, 0xa4, 0x91, 0x2d, 0xdd, 0xcd, 0x25, 0x59, 0x63, 0x8b, 0xd7, 0x05,
  0xc3, 0xc3, 0xe2, 0xf7, 0x02, 0xfe, 0xc2, 0xe8, 0xee, 0x07, 0x92, 0xab,
  0xc4, 0xc9, 0x3b, 0x5c, 0xfb, 0x4e, 0x60, 0x82, 0xaf, 0x4e, 0x23, 0xd8,
  0x0b, 0xae, 0x12, 0x9e, 0xd8, 0xad, 0x36, 0xf3, 0xdd, 0x1d, 0xed, 0x26,
  0xb1, 0xc5, 0xeb, 0x82, 0xe1, 0x61, 0xf1, 0x7b, 0x01, 0x7f, 0x61, 0x74,
  0xf7, 0x03, 0xc9, 0x55, 0xe2, 0xe4, 0x1d, 0xae, 0x7d, 0x27, 0x30, 0xc1,
  0xe3, 0xb7, 0x5f, 0x0b, 0x0a, 0xe1, 0xd7, 0x63, 0xc6, 0x69, 0x60, 0xcb,
  0x5b, 0x5f, 0x19, 0xc5, 0xb1, 0x9e, 0xd8, 0x99, 0x09, 0x5e, 0x8a, 0xd9,
  0xfd, 0x21, 0xb5, 0xc5, 0x65, 0x75, 0xff, 0x9a, 0x07, 0x11, 0xc9, 0xa4,
  0x57, 0xa7, 0x11, 0xec, 0x05, 0x57, 0x09, 0x4f, 0xec, 0x56, 0x9b, 0xf9,
  0x05, 0xeb, 0xe6, 0x52, 0xd5, 0x6e, 0x9e, 0xd2, 0xdf, 0x95, 0x97, 0x3c,
  0x5a, 0x8f, 0x79, 0xb5, 0x1f, 0xdc, 0x86, 0xdf, 0xec, 0x1e, 0x68, 0x68,
  0xd6, 0xb2, 0xf0, 0xee, 0x66, 0x9c, 0xda, 0xb7, 0x68, 0xeb, 0x32, 0x94,
  0xca, 0x90, 0x3f, 0x78, 0x9e, 0x5d, 0x90, 0x02, 0x47, 0xd5, 0x6b, 0x03,
  0xfa, 0x25, 0x05, 0xbe, 0x6c, 0x6e, 0x53, 0x14, 0x00, 0x89, 0xc6, 0x48,
  0xa7, 0xbe, 0x42, 0xac, 0x58, 0x69, 0xdd, 0x3d, 0xf8, 0x03, 0xb5, 0x4d,
  0x65, 0x98, 0x58, 0x16, 0xcd, 0x02, 0x7b, 0x40, 0x20, 0x6e, 0xb9, 0xc6,
  0xb6, 0xbc, 0x9b, 0x34, 0x47, 0x39, 0xdc, 0x1d, 0x57, 0xd2, 0x05, 0x86,
  0x1a, 0x29, 0x51, 0x33, 0x18, 0x04, 0x2e, 0x89, 0x53, 0x69, 0x9a, 0x3a,
  0x1e, 0x39, 0xf4, 0x2b, 0xd1, 0x8a, 0x42, 0xce, 0x38, 0x4c, 0x92, 0xd7,
  0x59, 0x71, 0xa7, 0x9c, 0xd1, 0xe5, 0x1f, 0x11, 0x82, 0xc5, 0x35, 0xbb,
  0xaa, 0xd9, 0xeb, 0xcc, 0xb8, 0x40, 0x35, 0xc9, 0x40, 0x3b, 0xc5, 0x70,
  0x4a, 0xed, 0x39, 0xc7, 0xee, 0xff, 0x97, 0x76, 0x1b, 0xa4, 0x86, 0xda,
  0xdf, 0x8b, 0x2d, 0x02, 0x4a, 0xd0, 0xc8, 0x1c, 0x7d, 0x4f, 0x47, 0x5c,
  0xbb, 0x0d, 0xdb, 0x03, 0xac, 0x81, 0x0c, 0xa3, 0x7a, 0x35, 0xf9, 0x0b,
  0x03, 0x6e, 0x27, 0x30, 0xd0, 0x2b, 0xd9, 0x06, 0xc9, 0x57, 0x33, 0x9c,
  0xcd, 0x3c, 0xc0, 0xd1, 0x24, 0x73, 0xa3, 0x8b, 0xd8, 0x70, 0x14, 0x33,
  0x54, 0xa4, 0xeb, 0x36, 0x09, 0xd0, 0x94, 0xd6, 0x95, 0x28, 0x1d, 0x7c,
  0xd6, 0xc3, 0x28, 0x87, 0x17, 0xe0, 0x4c, 0x9c, 0x06, 0xd5, 0x11, 0x61,
  0xbc, 0x97, 0x9c, 0x7a, 0x67, 0x13, 0x41, 0xf1, 0x78, 0xef, 0x58, 0xca,
  0xef, 0xea, 0xc1, 0x1f, 0xf0, 0x47, 0xb8, 0x86, 0x56, 0xf4, 0x04, 0xdb,
  0xac, 0x37, 0x1d, 0x8f, 0x13, 0xf3, 0xa0, 0xd7, 0xfb, 0x3e, 0xf0, 0xa5,
  0x63, 0xa6, 0xeb, 0xc7, 0x26, 0xc6, 0xf3, 0x90, 0x0f, 0xbc, 0x2f, 0x14,
  0x55, 0x4c, 0xa9, 0x7b, 0x69, 0x81, 0xce, 0x6f, 0xd2, 0xaa, 0xa0, 0x4c,
  0xee, 0x8e, 0x76, 0x93, 0xf1, 0xdb, 0xaf, 0x04, 0x85, 0xf0, 0xab, 0x31,
  0xe3, 0x34, 0xb0, 0xe5, 0xad, 0xaf, 0x8c, 0xe2, 0x58, 0x4f, 0xec, 0xcc,
  0x04, 0x2f, 0xc5, 0xec, 0x7e, 0x9f, 0xda, 0xe2, 0xb2, 0xba, 0x7f, 0xcd,
  0x83, 0x88, 0x64, 0xd2, 0x82, 0x75, 0x73, 0xa9, 0x6a, 0x37, 0x4f, 0xe9,
  0xef, 0xca, 0x4b, 0x1e, 0xad, 0xc7, 0xbc, 0xda, 0x0f, 0x6e, 0xc3, 0xaf,
  0x76, 0x0f, 0x34, 0x34, 0x6b, 0x59, 0x78, 0x77, 0x33, 0x4e, 0xed, 0x5b,
  0xb4, 0x75, 0x19, 0x4a, 0x65, 0xc8, 0x1f, 0x3c, 0xcf, 0x2e, 0x48, 0x81,
  0xa3, 0xea, 0xb5, 0x01, 0xfd, 0x92, 0x02, 0x5f, 0x36, 0xb7, 0x29, 0x0a,
  0x80, 0x44, 0x63, 0xa4, 0x53, 0x5f, 0x21, 0x56, 0xac, 0xb4, 0xee, 0x1e,
  0xfc, 0x9e, 0xda, 0xa6, 0x32, 0x4c, 0x2c, 0x8b, 0x66, 0x81, 0x3d, 0x20,
  0x10, 0xb7, 0x5c, 0x63, 0x5b, 0xde, 0x4d, 0x9a, 0xa3, 0x1c, 0xee, 0x8e,
  0x2b, 0xe9, 0x02, 0x43, 0x8d, 0x94, 0xa8, 0x19, 0x0c, 0x02, 0x97, 0xc4,
  0xa9, 0x34, 0x4d, 0x1d, 0x8f, 0x1c, 0xfa, 0x95, 0x68, 0x45, 0x21, 0x67,
  0x1c, 0x26, 0xc9, 0xeb, 0xac, 0xb8, 0x53, 0xce, 0xe8, 0xf2, 0x8f, 0x08,
  0xc1, 0xe2, 0x9a, 0x5d, 0xd5, 0xec, 0x75, 0x66, 0x5c, 0xa0, 0x9a, 0x64,
  0xa0, 0x9d, 0x62, 0x38, 0xa5, 0xf6, 0x9c, 0x63, 0xf7, 0xff, 0x0b, 0xbb,
  0x0d, 0x52, 0x43, 0xed, 0xef, 0xc5, 0x16, 0x01, 0x25, 0x68, 0x64, 0x8e,
  0xbe, 0xa7, 0x23, 0xae, 0xdd, 0x86, 0xed, 0x01, 0xd6, 0x40, 0x86, 0x51,
  0xbd, 0x9a, 0xfc, 0x85, 0x01, 0xb7, 0x13, 0x18, 0xe8, 0x95, 0x6c, 0x83,
  0xe4, 0xab, 0x19, 0xce, 0x66, 0x1e, 0xe0, 0x68, 0x92, 0xb9, 0xd1, 0x45,
  0x6c, 0x38, 0x8a, 0x19, 0x2a, 0xd2, 0x75, 0x9b, 0x04, 0x68, 0x4a, 0xeb,
  0x4a, 0x94, 0x0e, 0x3e, 0xeb, 0x61, 0x94, 0xc3, 0x0b, 0x70, 0x26, 0x4e,
  0x83, 0xea, 0x88, 0x30, 0xde, 0x4b, 0x4e, 0xbd, 0xb3, 0x89, 0xa0, 0x78,
  0xbc, 0x77, 0x2c, 0xe5, 0x77, 0xf5, 0xe0, 0xf7, 0xf8, 0x23, 0x5c, 0x43,
  0x2b, 0x7a, 0x82, 0x6d, 0xd6, 0x9b, 0x8e, 0xc7, 0x89, 0x79, 0xd0, 0xeb,
  0x7d, 0x1f, 0xf8, 0xc2, 0x31, 0xd3, 0xf5, 0x63, 0x13, 0xe3, 0x79, 0xc8,
  0x07, 0xde, 0x17, 0x8a, 0x2a, 0xa6, 0xd4, 0xbd, 0xb4, 0x40, 0xe7, 0x37,
  0x69, 0x55, 0x50, 0xa6, 0xb7, 0x6f, 0x4e, 0x00, 0x8e, 0x62, 0x29, 0x3d,
  0x10, 0xd2, 0x0b, 0xe4, 0xc8, 0x56, 0x99, 0xc3, 0x65, 0xc5, 0x49, 0x32,
  0x6f, 0xdf, 0x9c, 0x00, 0x1c, 0xc5, 0x52, 0x7a, 0x20, 0xa4, 0x17, 0xc8,
  0x91, 0xad, 0x32, 0x87, 0xcb, 0x8a, 0x93, 0x64, 0xd0, 0x19, 0x81, 0x7a,
  0xd6, 0x94, 0xcd, 0x65, 0xd9, 0x30, 0xe8, 0x34, 0x92, 0x6a, 0xa1, 0x2f,
  0xe8, 0x8c, 0x40, 0x3d, 0x6b, 0xca, 0xe6, 0xb2, 0x6c, 0x18, 0x74, 0x1a,
  0x54, 0xf0, 0xb4, 0x79, 0x9b, 0xac, 0xaa, 0x26, 0x46, 0xb3, 0x87, 0x8f,
  0x91, 0x56, 0x4b, 0x04, 0xf1, 0x24, 0xdd, 0x89, 0x03, 0xa2, 0x1e, 0x93,
  0x91, 0xcf, 0x71, 0x5e, 0x14, 0x39, 0x6e, 0x5c, 0xcc, 0x2d, 0xbd, 0x2e,
  0x73, 0x24, 0xd7, 0x58, 0x6f, 0x05, 0x29, 0x41, 0x8e, 0x4a, 0xce, 0xc3,
  0xae, 0x09, 0x64, 0xa4, 0xd8, 0x8c, 0x14, 0xb1, 0x52, 0xe0, 0x0f, 0xa4,
  0x84, 0x21, 0x72, 0x1c, 0x78, 0x45, 0x38, 0x7c, 0xbb, 0x75, 0x38, 0x4a,
  0x5b, 0x48, 0x19, 0xf4, 0xcc, 0xd0, 0x64, 0x91, 0x36, 0x7a, 0x5f, 0x3c,
  0x8e, 0x88, 0x19, 0x12, 0x28, 0x41, 0x01, 0xdb, 0x61, 0x6a, 0x11, 0x81,
  0xba, 0xb8, 0xd2, 0xed, 0xd6, 0xd0, 0x56, 0xa2, 0xda, 0xec, 0x4a, 0xa7,
  0x2c, 0x8e, 0xee, 0x61, 0xe2, 0xb7, 0x77, 0x9a, 0xcf, 0xb5, 0x96, 0x81,
  0x2f, 0xa9, 0xc2, 0xd6, 0x6c, 0x74, 0xde, 0xd0, 0x81, 0x75, 0xf2, 0x49,
  0x35, 0xcd, 0x52, 0xbc, 0x1e, 0x8b, 0xc5, 0x2a, 0xec, 0x63, 0x27, 0x41,
  0x34, 0x01, 0x42, 0x27, 0x6e, 0xcf, 0x40, 0x4b, 0xa4, 0x46, 0x88, 0xbb,
  0x83, 0xb1, 0xf6, 0xbd, 0xfe, 0x03, 0x48, 0xdb, 0x45, 0x58, 0x2d, 0xee,
  0x8d, 0xdb, 0xb1, 0xf8, 0x2a, 0x86, 0x60, 0x8a, 0xd9, 0xd0, 0x30, 0x81,
  0xe5, 0x1a, 0x6f, 0x96, 0x73, 0xf8, 0xb4, 0x12, 0x51, 0x7d, 0x44, 0x07,
  0x49, 0xb5, 0xd0, 0x17, 0x2a, 0x78, 0xda, 0xbc, 0x4d, 0x56, 0x55, 0x13,
  0xa3, 0xd9, 0xc3, 0xc7, 0x48, 0xab, 0x25, 0x82, 0x78, 0x92, 0xee, 0xc4,
  0x01, 0x51, 0x8f, 0xc9, 0xc8, 0xe7, 0x38, 0x2f, 0x8a, 0x1c, 0x37, 0x2e,
  0xe6, 0x96, 0x5e, 0x97, 0x39, 0x92, 0x6b, 0xac, 0xb7, 0x82, 0x94, 0x20,
  0x47, 0x25, 0xe7, 0x61, 0xd7, 0x04, 0x32, 0x52, 0x6c, 0x46, 0x8a, 0x58,
  0x29, 0xf0, 0x07, 0x52, 0xc2, 0x10, 0x39, 0x0e, 0xbc, 0x22, 0x1c, 0xbe,
  0xdd, 0x3a, 0x1c, 0xa5, 0x2d, 0xa4, 0x0c, 0x7a, 0x66, 0x68, 0xb2, 0x48,
  0x1b, 0xbd, 0x2f, 0x1e, 0x47, 0xc4, 0x0c, 0x09, 0x94, 0xa0, 0x80, 0xed,
  0x30, 0xb5, 0x88, 0x40, 0x5d, 0x5c, 0xe9, 0x76, 0x6b, 0x68, 0x2b, 0x51,
  0x6d, 0x76, 0xa5, 0x53, 0x16, 0x47, 0xf7, 0x30, 0xf1, 0xdb, 0x3b, 0xcd,
  0xe7, 0x5a, 0xcb, 0xc0, 0x97, 0x54, 0x61, 0x6b, 0x36, 0x3a, 0x6f, 0xe8,
  0xc0, 0x3a, 0xf9, 0xa4, 0x9a, 0x66, 0x29, 0x5e, 0x8f, 0xc5, 0x62, 0x15,
  0xf6, 0xb1, 0x93, 0x20, 0x9a, 0x00, 0xa1, 0x13, 0xb7, 0x67, 0xa0, 0x25,
  0x52, 0x23, 0xc4, 0xdd, 0xc1, 0x58, 0xfb, 0x5e, 0xff, 0x01, 0xa4, 0xed,
  0x22, 0xac, 0x16, 0xf7, 0xc6, 0xed, 0x58, 0x7c, 0x15, 0x43, 0x30, 0xc5,
  0xfe, 0x09, 0xe7, 0xbb, 0xc9, 0xde, 0x85, 0x89, 0xdc, 0x46, 0x17, 0x78,
  0x14, 0xdb, 0xc9, 0x58, 0x42, 0x5d, 0x37, 0xd6, 0x8b, 0x45, 0xf5, 0x02,
  0xf0, 0xf3, 0x0e, 0xd2, 0x06, 0xea, 0x86, 0xf5, 0x65, 0x1f, 0xf1, 0xde,
  0xc9, 0xb6, 0xbd, 0xe7, 0x32, 0x27, 0x1a, 0x91, 0xaa, 0x57, 0x0b, 0x49,
  0x61, 0xf6, 0xbe, 0xc4, 0x06, 0x51, 0xb0, 0x8f, 0x04, 0x79, 0xa4, 0x50,
  0xee, 0xfc, 0x24, 0x05, 0x55, 0x7c, 0x6e, 0x17, 0x3f, 0xed, 0x88, 0x47,
  0x85, 0xf8, 0x24, 0x7d, 0x08, 0x13, 0xcb, 0xd7, 0x82, 0x09, 0xf4, 0x1c,
  0x46, 0x0c, 0x47, 0x63, 0xd6, 0xc9, 0x0e, 0xd5, 0x9f, 0x73, 0x07, 0xf4,
  0x78, 0x4e, 0xda, 0x58, 0xee, 0x9b, 0xf6, 0x49, 0x27, 0x3e, 0xad, 0x09,
  0x81, 0x9e, 0x8b, 0x8d, 0x9b, 0x01, 0xdd, 0xae, 0xc9, 0xfc, 0xf0, 0x3e,
  0xc7, 0x18, 0x1a, 0xd2, 0x2e, 0x59, 0xc6, 0x75, 0xff, 0xf4, 0x7f, 0x7b,
  0x3b, 0x88, 0x31, 0x69, 0x9c, 0x55, 0xbf, 0xaf, 0xa2, 0xfd, 0x99, 0x17,
  0xe6, 0x46, 0xaf, 0x5b, 0x14, 0x3d, 0xf4, 0x6b, 0x16, 0x15, 0xac, 0x8a,
  0x96, 0x41, 0xfb, 0x1d, 0x9c, 0x09, 0x7f, 0x66, 0x4d, 0xc4, 0xa7, 0x67,
  0x09, 0x66, 0xc4, 0x35, 0x2d, 0x5c, 0xbd, 0x65, 0xd8, 0x07, 0x7f, 0xe9,
  0x4a, 0xee, 0xdf, 0x46, 0x22, 0x0d, 0xfc, 0xf7, 0xcf, 0x07, 0xe4, 0x4c,
  0x9b, 0xfd, 0xdc, 0x3b, 0x8f, 0xc3, 0x81, 0xcc, 0xe5, 0x13, 0x4c, 0x23,
  0x5f, 0x5e, 0xc1, 0x59, 0xf2, 0x22, 0x56, 0x01, 0xe3, 0x6d, 0x84, 0x3c,
  0xf6, 0xdb, 0x7f, 0xbf, 0x9a, 0x3b, 0xac, 0x99, 0x35, 0xdf, 0x97, 0xc7,
  0x7e, 0xf3, 0xef, 0xf3, 0xdd, 0xbd, 0xd7, 0x79, 0x42, 0x8c, 0xea, 0xb5,
  0xa4, 0x19, 0x47, 0x78, 0xe2, 0xaf, 0x66, 0x8a, 0x92, 0xba, 0x1c, 0x72,
  0x45, 0xf9, 0x58, 0xb4, 0x21, 0x82, 0xb0, 0x45, 0xe2, 0x8a, 0xbf, 0x09,
  0x07, 0x23, 0xd6, 0x1c, 0x6e, 0x8e, 0x74, 0x28, 0x79, 0xc1, 0x7f, 0xee,
  0x7c, 0x15, 0x3b, 0x23, 0xad, 0x06, 0x81, 0x14, 0xd4, 0x96, 0x26, 0xd4,
  0x25, 0x83, 0xeb, 0xf7, 0x45, 0xe3, 0xb5, 0xfd, 0x1d, 0xb0, 0x59, 0xb6,
  0xa7, 0x36, 0x5e, 0x8d, 0x35, 0x52, 0x91, 0x1d, 0xd2, 0x6c, 0x4e, 0x0b,
  0x78, 0x6d, 0x53, 0x79, 0xa0, 0x78, 0x64, 0xde, 0x17, 0x6b, 0x0b, 0x94,
  0x12, 0x71, 0x30, 0xfa, 0xdd, 0x28, 0x1d, 0x96, 0xe8, 0xb7, 0x03, 0xe9,
  0x63, 0x62, 0x46, 0x03, 0x55, 0x49, 0x2a, 0xa3, 0x84, 0x10, 0xe4, 0x38,
  0x43, 0xc4, 0x15, 0x69, 0x3a, 0x4f, 0x19, 0xf6, 0x94, 0xba, 0x89, 0x15,
  0xbe, 0x3a, 0x79, 0xf7, 0xee, 0xf0, 0x55, 0x37, 0xe4, 0x66, 0x7b, 0x3e,
  0x3a, 0x55, 0x3f, 0x68, 0xa3, 0x47, 0x9f, 0x27, 0x88, 0x74, 0x89, 0xb9,
  0xf0, 0xf7, 0xa9, 0xc7, 0x4e, 0x2a, 0x68, 0xa9, 0xfc, 0x4b, 0x56, 0x49,
  0x04, 0x49, 0x53, 0x28, 0x20, 0x52, 0x74, 0x15, 0xd0, 0xc3, 0xd4, 0x43,
  0x5f, 0xe1, 0x0e, 0x56, 0x35, 0x35, 0x6d, 0x22, 0x45, 0x94, 0x8c, 0x4c,
  0x99, 0x05, 0x25, 0x3e, 0xcf, 0x66, 0x3b, 0x92, 0x57, 0xac, 0xdf, 0xee,
  0xa3, 0x65, 0x86, 0xde, 0x42, 0xed, 0xc6, 0xb0, 0xbc, 0xe0, 0x8e, 0x9e,
  0x8b, 0xb4, 0xfa, 0x88, 0xa0, 0xb0, 0x57, 0xc5, 0x41, 0x75, 0x7c, 0x84,
  0x02, 0x3c, 0x9b, 0xc5, 0xca, 0xc3, 0xc9, 0x77, 0xed, 0x27, 0xad, 0xcb,
  0x6c, 0x68, 0x98, 0xc0, 0x72, 0x8d, 0x37, 0xcb, 0x39, 0x7c, 0x5a, 0x89,
  0xa8, 0x3e, 0xa2, 0x03, 0xff, 0x84, 0xf3, 0xdd, 0x64, 0xef, 0xc2, 0x44,
  0x6e, 0xa3, 0x0b, 0x3c, 0x8a, 0xed, 0x64, 0x2c, 0xa1, 0xae, 0x1b, 0xeb,
  0xc5, 0xa2, 0x7a, 0x01, 0xf8, 0x79, 0x07, 0x69, 0x03, 0x75, 0xc3, 0xfa,
  0xb2, 0x8f, 0x78, 0xef, 0x64, 0xdb, 0xde, 0x73, 0x99, 0x13, 0x8d, 0x48,
  0xd5, 0xab, 0x85, 0xa4, 0x30, 0x7b, 0x5f, 0x62, 0x83, 0x28, 0xd8, 0x47,
  0x82, 0x3c, 0x52, 0x28, 0x77, 0x7e, 0x92, 0x82, 0x2a, 0x3e, 0xb7, 0x8b,
  0x9f, 0x76, 0xc4, 0xa3, 0x42, 0x7c, 0x92, 0x3e, 0x84, 0x89, 0xe5, 0x6b,
  0xc1, 0x04, 0x7a, 0x0e, 0x23, 0x86, 0xa3, 0x31, 0xeb, 0x64, 0x87, 0xea,
  0xcf, 0xb9, 0x03, 0x7a, 0x3c, 0x27, 0x6d, 0x2c, 0xf7, 0x4d, 0xfb, 0xa4,
  0x13, 0x9f, 0xd6, 0x84, 0x40, 0xcf, 0xc5, 0xc6, 0xcd, 0x80, 0x6e, 0xd7,
  0x64, 0x7e, 0x78, 0x9f, 0x63, 0x0c, 0x0d, 0x69, 0x97, 0x2c, 0xe3, 0xba,
  0x7f, 0xfa, 0xbf, 0xbd, 0x1d, 0xc4, 0x98, 0x34, 0xce, 0xaa, 0xdf, 0x57,
  0xd1, 0xfe, 0xcc, 0x0b, 0x73, 0xa3, 0xd7, 0x2d, 0x8a, 0x1e, 0xfa, 0x25,
  0x8b, 0x0a, 0x56, 0x45, 0xcb, 0xa0, 0xfd, 0x0e, 0xce, 0x84, 0x3f, 0xb3,
  0x26, 0xe2, 0xd3, 0xb3, 0x04, 0x33, 0xe2, 0x9a, 0x16, 0xae, 0xde, 0x32,
  0xec, 0x83, 0x3f, 0x77, 0x25, 0xf7, 0x6f, 0x23, 0x91, 0x06, 0xfe, 0xfb,
  0xe7, 0x03, 0x72, 0xa6, 0xcd, 0x7e, 0xea, 0x9d, 0xc7, 0xe1, 0x40, 0xe6,
  0xf2, 0x09, 0xa6, 0x91, 0x2f, 0xaf, 0xe0, 0x2c, 0x79, 0x11, 0xab, 0x80,
  0xf1, 0x36, 0x42, 0x1e, 0xfb, 0xf5, 0xbf, 0x5f, 0xcd, 0x1d, 0xd6, 0xcc,
  0x9a, 0xef, 0xcb, 0x63, 0xbf, 0xfa, 0xf7, 0xf9, 0xee, 0xde, 0xeb, 0x3c,
  0x21, 0x46, 0xf5, 0x5a, 0xd2, 0x8c, 0x23, 0x3c, 0xf1, 0x17, 0x33, 0x45,
  0x49, 0x5d, 0x0e, 0xb9, 0xa2, 0x7c, 0x2c, 0xda, 0x10, 0x41, 0xd8, 0x22,
  0x71, 0xc5, 0x5f, 0x85, 0x83, 0x11, 0x6b, 0x0e, 0x37, 0x47, 0x3a, 0x94,
  0xbc, 0xe0, 0x3f, 0x77, 0xbe, 0x8c, 0x9d, 0x91, 0x56, 0x83, 0x40, 0x0a,
  0x6a, 0x4b, 0x13, 0xea, 0x92, 0xc1, 0xf5, 0xfb, 0xa2, 0xf1, 0xda, 0xfe,
  0x0e, 0xd8, 0x2c, 0xdb, 0x53, 0x1b, 0xaf, 0xc6, 0x1a, 0xa9, 0xc8, 0x0e,
  0x69, 0x36, 0xa7, 0x05, 0xbc, 0xb6, 0xa9, 0x3c, 0x50, 0x3c, 0x32, 0xef,
  0x8b, 0xb5, 0x05, 0x4a, 0x89, 0x38, 0x18, 0xfd, 0x6e, 0x94, 0x0e, 0x4b,
  0xf4, 0x9b, 0x81, 0xf4, 0x31, 0x31, 0xa3, 0x81, 0xaa, 0x24, 0x95, 0x51,
  0x42, 0x08, 0x72, 0x9c, 0x21, 0xe2, 0x8a, 0x34, 0x9d, 0xa7, 0x0c, 0x7b,
  0x4a, 0xdd, 0xc4, 0x0a, 0x5f, 0x9d, 0xbc, 0x7b, 0x77, 0xf8, 0xaa, 0x1b,
  0x72, 0xb3, 0x3d, 0x1f, 0x9d, 0xaa, 0x1f, 0xb4, 0xd1, 0xa3, 0xcf, 0x13,
  0x44, 0xba, 0xc4, 0x5c, 0xf8, 0xfb, 0xd4, 0x63, 0x27, 0x15, 0xb4, 0x54,
  0xfe, 0x25, 0xab, 0x24, 0x82, 0xa4, 0x29, 0x14, 0x10, 0x29, 0xba, 0x0a,
  0xe8, 0x61, 0xea, 0xa1, 0xaf, 0x70, 0x07, 0xab, 0x9a, 0x9a, 0x36, 0x91,
  0x22, 0x4a, 0x46, 0xa6, 0xcc, 0x82, 0x12, 0x9f, 0x67, 0xb3, 0x1d, 0xc9,
  0x2b, 0xd6, 0x6f, 0xf7, 0xd1, 0x32, 0x43, 0x6f, 0xa1, 0x76, 0x63, 0x58,
  0x5e, 0x70, 0x47, 0xcf, 0x45, 0x5a, 0x7d, 0x44, 0x50, 0xd8, 0xab, 0xe2,
  0x64, 0xa4, 0x05, 0xde, 0x81, 0x96, 0xd7, 0xe1, 0xf5, 0x22, 0xbb, 0xc1,
  0x67, 0x18, 0x13, 0x03, 0x65, 0xde, 0x21, 0xac, 0x3e, 0x43, 0x39, 0xb3,
  0xa0, 0x3a, 0x3e, 0x42, 0x01, 0x9e, 0xcd, 0x62, 0xe5, 0xe1, 0xe4, 0xbb,
  0x6f, 0xfe, 0x4e, 0xca, 0xcb, 0x71, 0x54, 0x0b, 0x86, 0xad, 0x27, 0x70,
  0x5c, 0x74, 0x82, 0xe2, 0xd2, 0x8c, 0x60, 0xaf, 0xbe, 0x15, 0x78, 0xbb,
  0x4e, 0x58, 0x2a, 0x68, 0xbc, 0x23, 0x75, 0x2b, 0x16, 0xf3, 0x8e, 0x1c,
  0x04, 0x7d, 0x10, 0x21, 0x0e, 0xa7, 0x8a, 0xfc, 0xd0, 0x75, 0x6b, 0x08,
  0x3d, 0xdd, 0xb4, 0x27, 0x7e, 0x36, 0x06, 0x5e, 0x35, 0xdd, 0x15, 0x7c,
  0xc2, 0x30, 0xb1, 0x27, 0x5d, 0xec, 0x55, 0xc2, 0x0c, 0x25, 0x57, 0x23,
  0xf0, 0xc8, 0x2e, 0x29, 0x09, 0x1d, 0x0f, 0xd3, 0x65, 0x0d, 0xd4, 0x5c,
  0x30, 0x54, 0xaa, 0xcf, 0x1a, 0x68, 0x0f, 0x72, 0xea, 0xc9, 0x33, 0x43,
  0x96, 0x99, 0xee, 0xbd, 0xe2, 0x8b, 0xb0, 0x2f, 0x5f, 0x2e, 0xb0, 0xf9,
  0x73, 0xb9, 0x6a, 0x82, 0x70, 0x1c, 0x90, 0x96, 0xb8, 0xcc, 0xfe, 0xab,
  0x61, 0xd8, 0x94, 0x28, 0x9d, 0xf9, 0x67, 0x4a, 0x0c, 0x9c, 0xcc, 0xfe,
  0xf6, 0x93, 0xd6, 0x65, 0x32, 0xd2, 0x02, 0xef, 0x40, 0xcb, 0xeb, 0xf0,
  0x7a, 0x91, 0xdd, 0xe0, 0x33, 0x8c, 0x89, 0x81, 0x32, 0xef, 0x10, 0x56,
  0x9f, 0xa1, 0x9c, 0xd9, 0x37, 0x7f, 0x27, 0xe5, 0xe5, 0x38, 0xaa, 0x05,
  0xc3, 0xd6, 0x13, 0x38, 0x2e, 0x3a, 0x41, 0x71, 0x69, 0x46, 0xb0, 0x57,
  0xdf, 0x08, 0xbc, 0x5d, 0x27, 0x2c, 0x15, 0x34, 0xde, 0x91, 0xba, 0x15,
  0x8b, 0x79, 0x47, 0x0e, 0x82, 0x3e, 0x88, 0x10, 0x87, 0x53, 0x45, 0x7e,
  0xe8, 0xba, 0x35, 0x84, 0x9e, 0x6e, 0xda, 0x13, 0x3f, 0x1b, 0x03, 0xaf,
  0x9a, 0xee, 0x0a, 0x3e, 0x61, 0x98, 0xd8, 0x93, 0x2e, 0xf6, 0x2a, 0x61,
  0x86, 0x92, 0xab, 0x11, 0x78, 0x64, 0x97, 0x94, 0x84, 0x8e, 0x87, 0xe9,
  0xb2, 0x06, 0x6a, 0x2e, 0x18, 0x2a, 0xd5, 0x67, 0x0d, 0xb4, 0x07, 0x39,
  0xf5, 0xe4, 0x99, 0x21, 0xcb, 0x4c, 0xf7, 0x5e, 0xf1, 0x45, 0xd8, 0x97,
  0x2f, 0x17, 0xd8, 0xfc, 0xb9, 0x5c, 0x35, 0x41, 0x38, 0x0e, 0x48, 0x4b,
  0x5c, 0x66, 0xff, 0xe5, 0x30, 0x6c, 0x4a, 0x94, 0xce, 0xfc, 0x33, 0x25,
  0xba, 0x31, 0xf7, 0x3f, 0xee, 0x9f, 0xb5, 0x38, 0x52, 0x5a, 0xde, 0x10,
  0xb3, 0x6a, 0x68, 0xc7, 0x1c, 0xa9, 0xee, 0x90, 0x5f, 0xa1, 0x4b, 0x0b,
  0xf6, 0x15, 0x65, 0x11, 0xeb, 0x00, 0x35, 0x08, 0xed, 0xaf, 0xc3, 0xfd,
  0x8c, 0x95, 0x03, 0xcf, 0x53, 0xd6, 0x27, 0x94, 0x3e, 0x32, 0x7c, 0x23,
  0x3f, 0xf4, 0xdb, 0x4b, 0xa6, 0xf5, 0x6d, 0xe6, 0x9d, 0x68, 0xb4, 0xcf,
  0x7d, 0x8a, 0x19, 0x44, 0xfb, 0xb6, 0xb7, 0xbe, 0xfd, 0xf0, 0xcf, 0x06,
  0xb0, 0x73, 0x0f, 0x93, 0xba, 0x0e, 0x52, 0xd1, 0x61, 0x2a, 0x76, 0x65,
  0x30, 0x31, 0xdc, 0x20, 0x5d, 0xd4, 0x93, 0xc8, 0x6b, 0x65, 0xb0, 0x2b,
  0x27, 0xf2, 0xc5, 0x70, 0x24, 0xec, 0x1d, 0x83, 0x77, 0x94, 0x40, 0xce,
  0xc3, 0x44, 0xf2, 0xbd, 0x22, 0xb8, 0x55, 0x8d, 0xd9, 0xcd, 0x56, 0xb2,
  0xc5, 0x58, 0x0f, 0xdc, 0xb8, 0x48, 0x69, 0x62, 0xf2, 0x4f, 0xaa, 0x2b,
  0x54, 0x01, 0xd6, 0x52, 0x56, 0xe8, 0x2b, 0xad, 0x4d, 0x78, 0x88, 0x54,
  0x06, 0x4e, 0x66, 0x7f, 0xdd, 0x98, 0xfb, 0x1f, 0xf7, 0xcf, 0x5a, 0x1c,
  0x29, 0x2d, 0x6f, 0x88, 0x59, 0x35, 0xb4, 0x63, 0x8e, 0x54, 0x77, 0xc8,
  0xaf, 0xd0, 0xa5, 0x05, 0xfb, 0x8a, 0xb2, 0x88, 0x75, 0x80, 0x1a, 0x84,
  0xf6, 0xd7, 0xe1, 0x7e, 0xc6, 0xca, 0x81, 0xe7, 0x29, 0xeb, 0x13, 0x4a,
  0x1f, 0x19, 0xbe, 0x91, 0x1f, 0xfa, 0xf5, 0x25, 0xd3, 0xfa, 0x36, 0xf3,
  0x4e, 0x34, 0xda, 0xe7, 0x3e, 0xc5, 0x0c, 0xa2, 0x7d, 0xdb, 0x5b, 0xdf,
  0x7e, 0xf8, 0x67, 0x03, 0xd8, 0xb9, 0x87, 0x49, 0x5d, 0x07, 0xa9, 0xe8,
  0x30, 0x15, 0xbb, 0x32, 0x98, 0x18, 0x6e, 0x90, 0x2e, 0xea, 0x49, 0xe4,
  0xb5, 0x32, 0xd8, 0x95, 0x13, 0xf9, 0x62, 0x38, 0x12, 0xf6, 0x8e, 0xc1,
  0x3b, 0x4a, 0x20, 0xe7, 0x61, 0x22, 0xf9, 0x5e, 0x11, 0xdc, 0xaa, 0xc6,
  0xec, 0x66, 0x2b, 0xd9, 0x62, 0xac, 0x07, 0x6e, 0x5c, 0xa4, 0x34, 0x31,
  0x0a, 0xb6, 0xa4, 0x5b, 0xd2, 0xd5, 0xda, 0xa8, 0x70, 0x17, 0xd6, 0x25,
  0xa3, 0x3b, 0xf2, 0xa4, 0xa7, 0x7e, 0xf3, 0x6b, 0xf1, 0xf0, 0x4c, 0xea,
  0xf9, 0x27, 0xd5, 0x15, 0xaa, 0x00, 0x6b, 0x29, 0x2b, 0xf4, 0x95, 0xd6,
  0xf6, 0xc1, 0xac, 0x4d, 0xa3, 0xe6, 0x34, 0x5d, 0xc1, 0x6c, 0xee, 0xcd,
  0xa4, 0xee, 0xa6, 0x52, 0x7b, 0x5e, 0x89, 0x48, 0x2e, 0x35, 0x8d, 0xf6,
  0xff, 0xc1, 0x4c, 0x6a, 0x3f, 0x91, 0x3a, 0xa5, 0x34, 0xea, 0x48, 0x16,
  0xb5, 0x6c, 0xb4, 0x64, 0x3d, 0x4a, 0x0f, 0xb9, 0x75, 0x99, 0xd4, 0x7e,
  0x2a, 0xf5, 0xba, 0x5c, 0x6a, 0xaa, 0x2d, 0x5e, 0x93, 0x49, 0xfd, 0xeb,
  0x12, 0xa9, 0xfb, 0x32, 0xa9, 0x7f, 0x79, 0x2a, 0xf5, 0x6f, 0x9b, 0x49,
  0xfd, 0x5b, 0xe6, 0xf4, 0xd2, 0xed, 0xc1, 0x89, 0xe4, 0x53, 0xa9, 0x51,
  0x79, 0x71, 0x1f, 0xba, 0x68, 0x3b, 0x0d, 0xc4, 0x0b, 0xd6, 0xca, 0x30,
  0xac, 0xd1, 0x78, 0x8a, 0x7b, 0x11, 0xe8, 0x3c, 0x42, 0x2b, 0x91, 0x3c,
  0x26, 0x3c, 0x44, 0x2a, 0x05, 0x5b, 0xd2, 0x2d, 0xe9, 0x6a, 0x6d, 0x54,
  0xb8, 0x0b, 0xeb, 0x92, 0xd1, 0x1d, 0x79, 0xd2, 0x53, 0xbf, 0xfa, 0xb5,
  0x78, 0x78, 0x26, 0x75, 0xfb, 0x60, 0xd6, 0xa6, 0x51, 0x73, 0x9a, 0xae,
  0x32, 0x3f, 0x9a, 0xfa, 0x28, 0x76, 0xd3, 0xeb, 0x7a, 0x3e, 0xa4, 0x19,
  0xa0, 0x74, 0x34, 0xb0, 0x12, 0x1d, 0x9f, 0xe9, 0x3c, 0xf7, 0xdb, 0xb3,
  0x9c, 0x66, 0x5e, 0xef, 0x3d, 0x72, 0xb6, 0xba, 0xfc, 0x65, 0x85, 0xb2,
  0xc6, 0x98, 0xdd, 0x2e, 0x75, 0x1c, 0x63, 0xe1, 0x32, 0x0a, 0x55, 0xc1,
  0xaf, 0x91, 0x97, 0x34, 0xb3, 0xfd, 0xd5, 0x6c, 0x48, 0xc2, 0x76, 0x4b,
  0x0d, 0x6a, 0x54, 0xa8, 0x8a, 0xd9, 0x5f, 0x07, 0xc9, 0x10, 0x54, 0xa3,
  0x60, 0x36, 0xf7, 0x66, 0x52, 0x77, 0x53, 0xa9, 0x3d, 0xaf, 0x44, 0x24,
  0x97, 0x9a, 0x46, 0xfb, 0xbf, 0x30, 0x93, 0xda, 0x4f, 0xa4, 0x4e, 0x29,
  0x8d, 0x3a, 0x92, 0x45, 0x2d, 0x1b, 0x2d, 0x59, 0x8f, 0xd2, 0x43, 0x6e,
  0x5d, 0x26, 0xb5, 0x9f, 0x4a, 0xbd, 0x2e, 0x97, 0x9a, 0x6a, 0x8b, 0xd7,
  0x64, 0x52, 0xff, 0xb2, 0x44, 0xea, 0xbe, 0x4c, 0xea, 0x9f, 0x9f, 0x4a,
  0xfd, 0xeb, 0x66, 0x52, 0xff, 0x9a, 0x39, 0xbd, 0x74, 0x7b, 0x70, 0x22,
  0xf9, 0x54, 0x6a, 0x54, 0x5e, 0xdc, 0x87, 0x2e, 0xda, 0x4e, 0x03, 0xf1,
  0x28, 0xd3, 0xae, 0xe9, 0x16, 0xee, 0x8d, 0x1e, 0x71, 0xa1, 0xab, 0x86,
  0x74, 0x64, 0x9e, 0x01, 0x38, 0x0d, 0x7d, 0x9f, 0xc1, 0x81, 0x5d, 0x26,
  0x82, 0xb5, 0x32, 0x0c, 0x6b, 0x34, 0x9e, 0xe2, 0x5e, 0x04, 0x3a, 0x8f,
  0x17, 0xb7, 0x2f, 0xd2, 0x77, 0x46, 0xc9, 0x19, 0xd4, 0x47, 0xa3, 0xac,
  0x9b, 0x19, 0xc9, 0xe0, 0xf2, 0xbb, 0xd8, 0x70, 0x6d, 0x3c, 0x4a, 0x43,
  0x3f, 0xef, 0xcf, 0x8e, 0xc3, 0x28, 0x2f, 0x45, 0x0f, 0x0e, 0x76, 0x76,
  0x28, 0xcf, 0xe8, 0x2a, 0xbd, 0xbd, 0x1d, 0xd5, 0xd9, 0xce, 0xac, 0x9c,
  0xd6, 0x3b, 0x38, 0x41, 0xfd, 0xf2, 0x55, 0xb3, 0x98, 0x7f, 0xf2, 0x6b,
  0x60, 0x4e, 0x14, 0x92, 0xed, 0x21, 0x0a, 0x9e, 0xff, 0xe8, 0xa7, 0xa0,
  0x2c, 0x9b, 0xca, 0xf5, 0x82, 0xf3, 0xb4, 0xd6, 0xce, 0xc4, 0x3e, 0xfc,
  0x29, 0x66, 0x42, 0x25, 0xc6, 0x51, 0x9e, 0xd0, 0x9a, 0x03, 0x3d, 0xf6,
  0x29, 0xbe, 0x7f, 0xbd, 0xd7, 0xf7, 0x59, 0xea, 0x81, 0x48, 0x4f, 0xfc,
  0x86, 0x1f, 0x7e, 0x6f, 0x1d, 0x34, 0x5c, 0x8e, 0xfd, 0x02, 0xff, 0x3d,
  0xd0, 0x4a, 0x24, 0x8f, 0xcc, 0x8f, 0xa6, 0x3e, 0x8a, 0xdd, 0xf4, 0xba,
  0x9e, 0x0f, 0x69, 0x06, 0x28, 0x1d, 0x0d, 0xac, 0x44, 0xc7, 0x67, 0x3a,
  0xcf, 0xfd, 0xfa, 0x2c, 0xa7, 0x99, 0xd7, 0x7b, 0x8f, 0x9c, 0xad, 0x2e,
  0x7f, 0x59, 0xa1, 0xac, 0x31, 0x66, 0xb7, 0x4b, 0x1d, 0xc7, 0x58, 0xb8,
  0x8c, 0x42, 0x55, 0xf0, 0x6b, 0xe4, 0x25, 0xcd, 0x6c, 0x7f, 0x35, 0x1b,
  0x92, 0xb0, 0xdd, 0x52, 0x83, 0x1a, 0x15, 0xaa, 0x62, 0xf6, 0xd7, 0x41,
  0x32, 0x04, 0xd5, 0x28, 0xca, 0xb4, 0x6b, 0xba, 0x85, 0x7b, 0xa3, 0x47,
  0x5c, 0xe8, 0xaa, 0x21, 0x1d, 0x99, 0x67, 0x00, 0x4e, 0x43, 0xdf, 0x67,
  0x70, 0x60, 0x97, 0xc9, 0xc5, 0xed, 0x8b, 0xf4, 0x9d, 0x51, 0x72, 0x06,
  0xf5, 0xd1, 0x28, 0xeb, 0x66, 0x46, 0x32, 0xb8, 0xfc, 0x2e, 0x36, 0x5c,
  0x1b, 0x8f, 0xd2, 0xd0, 0xcf, 0xfb, 0xb3, 0xe3, 0x30, 0xca, 0x4b, 0xd1,
  0x83, 0x83, 0x9d, 0x1d, 0xca, 0x33, 0xba, 0x4a, 0x6f, 0x6f, 0x47, 0x75,
  0xb6, 0x33, 0x2b, 0xa7, 0xf5, 0x0e, 0x4e, 0x50, 0xbf, 0x7c, 0xd5, 0x2c,
  0xe6, 0x9f, 0xfc, 0x1a, 0x98, 0x13, 0x85, 0x64, 0x7b, 0x88, 0x82, 0xe7,
  0x3f, 0xfa, 0x29, 0x28, 0xcb, 0xa6, 0x72, 0xbd, 0xe0, 0x3c, 0xad, 0xb5,
  0x33, 0xb1, 0x0f, 0x7f, 0x8a, 0x99, 0x50, 0x89, 0x71, 0x94, 0x27, 0xb4,
  0xd0, 0x1d, 0x5e, 0xd7, 0x5c, 0xa9, 0xd5, 0x30, 0xab, 0xd5, 0x36, 0x58,
  0xfb, 0x3a, 0x6b, 0xb6, 0xe7, 0x5a, 0xbc, 0x83, 0x5e, 0x40, 0x03, 0x46,
  0xb3, 0x11, 0x44, 0x5b, 0x02, 0x1b, 0x1f, 0x2a, 0x22, 0x16, 0xa3, 0x3f,
  0x30, 0x20, 0x07, 0x3e, 0x6e, 0x0c, 0x74, 0x01, 0x88, 0x79, 0xd7, 0xc3,
  0x7a, 0xa9, 0xb1, 0x43, 0x04, 0x0b, 0x83, 0x6d, 0xcf, 0xbb, 0x58, 0x27,
  0xe6, 0x40, 0x8f, 0x7d, 0x8a, 0xef, 0x5f, 0xef, 0xf5, 0x7d, 0x96, 0x7a,
  0x20, 0xd2, 0x13, 0xbf, 0xe2, 0x87, 0xdf, 0x5b, 0x07, 0x0d, 0x97, 0x63,
  0xbf, 0xc0, 0x7f, 0x0f, 0x74, 0x87, 0xd7, 0x35, 0x57, 0x6a, 0x35, 0xcc,
  0x6a, 0xb5, 0x0d, 0xd6, 0xbe, 0xce, 0x9a, 0xed, 0xb9, 0x16, 0xef, 0xa0,
  0x17, 0xd0, 0x80, 0xd1, 0x6c, 0x04, 0xd1, 0x96, 0xc0, 0xc6, 0x87, 0x8a,
  0x4c, 0x73, 0xb1, 0xe6, 0x86, 0x1b, 0x45, 0x9c, 0x39, 0x3d, 0x2b, 0x27,
  0xc9, 0x4b, 0x7c, 0xca, 0x47, 0x51, 0x99, 0x58, 0xdf, 0x51, 0x0c, 0x1a,
  0x5c, 0x54, 0x1f, 0x2f, 0x17, 0xd0, 0xbb, 0xe2, 0x07, 0xc9, 0xc6, 0xf0,
  0x7d, 0x72, 0xb0, 0x11, 0x6c, 0xd1, 0x49, 0x21, 0x2d, 0x0f, 0xc8, 0xcb,
  0x53, 0x51, 0x0d, 0x2f, 0xf5, 0x50, 0xf1, 0xa5, 0xf1, 0x15, 0xb0, 0x56,
  0x9c, 0x0a, 0x6d, 0xe1, 0xc2, 0x2f, 0x83, 0xc0, 0x13, 0xcd, 0x53, 0x4a,
  0xb0, 0xb4, 0xc7, 0x07, 0xd8, 0x27, 0x5c, 0x15, 0x0e, 0xfd, 0x97, 0x74,
  0x06, 0xc6, 0x2f, 0x97, 0x60, 0x3e, 0x22, 0x78, 0xd3, 0xd0, 0xe5, 0x60,
  0x9b, 0xe3, 0xd2, 0x88, 0xcb, 0xb2, 0xae, 0xf3, 0x09, 0x40, 0x3e, 0xb3,
  0x86, 0xf4, 0x9a, 0x3a, 0xe3, 0x3c, 0x1c, 0xee, 0x31, 0x88, 0xbd, 0xf4,
  0x00, 0xe1, 0xea, 0x10, 0x15, 0x88, 0x57, 0xca, 0x0d, 0xa9, 0x9c, 0x4b,
  0xc5, 0xcc, 0x8e, 0x59, 0xdb, 0x75, 0x8e, 0xe1, 0x99, 0xe0, 0xd2, 0x64,
  0x52, 0xe5, 0xd9, 0x45, 0xb2, 0x28, 0x79, 0xeb, 0x49, 0xd9, 0x08, 0x92,
  0x3c, 0x00, 0x2a, 0x80, 0x36, 0xb9, 0xc8, 0xd1, 0xac, 0x81, 0xb9, 0x46,
  0x89, 0xbb, 0x94, 0x35, 0xe7, 0xb2, 0x82, 0xab, 0x0c, 0xd1, 0xf2, 0xeb,
  0x4c, 0x8e, 0x35, 0x55, 0x44, 0xe5, 0x9e, 0x6c, 0xc6, 0xca, 0x42, 0xd3,
  0x52, 0x9e, 0x3c, 0xa1, 0x99, 0x58, 0x68, 0x05, 0x7c, 0x31, 0xd1, 0x2e,
  0xd3, 0x69, 0xab, 0xea, 0x78, 0xf4, 0xc9, 0x78, 0xbc, 0xe7, 0x79, 0xfd,
  0x05, 0x19, 0xe4, 0xed, 0x4e, 0x37, 0xfd, 0xf9, 0xd4, 0xed, 0xa4, 0x5a,
  0xd1, 0xfb, 0xef, 0xcb, 0xa4, 0xbe, 0x00, 0x26, 0xf4, 0xbb, 0xae, 0x64,
  0x8f, 0xa4, 0x24, 0x23, 0xf5, 0x8a, 0x33, 0x9d, 0xec, 0xea, 0x1a, 0x2a,
  0x8c, 0x26, 0x7c, 0x09, 0x3f, 0x18, 0xfa, 0x3e, 0xe8, 0xad, 0xeb, 0x12,
  0xad, 0xfb, 0x53, 0xab, 0xbd, 0xcc, 0x6a, 0x2a, 0x25, 0x60, 0xbf, 0x70,
  0x8a, 0x19, 0x84, 0x9d, 0x04, 0x81, 0xa1, 0xcb, 0x59, 0xd5, 0x9a, 0x54,
  0x88, 0xc5, 0xe8, 0x0f, 0x0c, 0xc8, 0x81, 0x8f, 0x1b, 0x03, 0x5d, 0x00,
  0x62, 0xde, 0xf5, 0xb0, 0x5e, 0x6a, 0xec, 0x10, 0xc1, 0xc2, 0x60, 0xdb,
  0xf3, 0x2e, 0xd6, 0x09, 0xd3, 0x5c, 0xac, 0xb9, 0xe1, 0x46, 0x11, 0x67,
  0x4e, 0xcf, 0xca, 0x49, 0xf2, 0x12, 0x9f, 0xf2, 0x51, 0x54, 0x26, 0xd6,
  0x77, 0x14, 0x83, 0x06, 0x17, 0xd5, 0xc7, 0xcb, 0x05, 0xf4, 0xae, 0xf8,
  0x41, 0xb2, 0x31, 0x7c, 0x9f, 0x1c, 0x6c, 0x04, 0x5b, 0x74, 0x52, 0x48,
  0xcb, 0x03, 0xf2, 0xf2, 0x54, 0x54, 0xc3, 0x4b, 0x3d, 0x54, 0x7c, 0x69,
  0x7c, 0x05, 0xac, 0x15, 0xa7, 0x42, 0x5b, 0xb8, 0xf0, 0xcb, 0x20, 0xf0,
  0x44, 0xf3, 0x94, 0x12, 0x2c, 0xed, 0xf1, 0x01, 0xf6, 0x09, 0x57, 0x85,
  0x43, 0xff, 0x25, 0x9d, 0x81, 0xf1, 0xcb, 0x25, 0x98, 0x8f, 0x08, 0xde,
  0x34, 0x74, 0x39, 0xd8, 0xe6, 0xb8, 0x34, 0xe2, 0xb2, 0xac, 0xeb, 0x7c,
  0x02, 0x90, 0xcf, 0xac, 0x21, 0xbd, 0xa6, 0xce, 0x38, 0x0f, 0x87, 0x7b,
  0x0c, 0x62, 0x2f, 0x3d, 0x40, 0xb8, 0x3a, 0x44, 0x05, 0xe2, 0x95, 0x72,
  0x43, 0x2a, 0xe7, 0x52, 0x31, 0xb3, 0x63, 0xd6, 0x76, 0x9d, 0x63, 0x78,
  0x26, 0xb8, 0x34, 0x99, 0x54, 0x79, 0x76, 0x91, 0x2c, 0x4a, 0xde, 0x7a,
  0x52, 0x36, 0x82, 0x24, 0x0f, 0x80, 0x0a, 0xa0, 0x4d, 0x2e, 0x72, 0x34,
  0x6b, 0x60, 0xae, 0x51, 0xe2, 0x2e, 0x65, 0xcd, 0xb9, 0xac, 0xe0, 0x2a,
  0x43, 0xb4, 0xfc, 0x3a, 0x93, 0x63, 0x4d, 0x15, 0x51, 0xb9, 0x27, 0x9b,
  0xb1, 0xb2, 0xd0, 0xb4, 0x94, 0x27, 0x4f, 0x68, 0x26, 0x16, 0x5a, 0x01,
  0x5f, 0x4c, 0xb4, 0xcb, 0x74, 0xda, 0xaa, 0x3a, 0x1e, 0x7d, 0x32, 0x1e,
  0xef, 0x79, 0x5e, 0x7f, 0x46, 0x06, 0x79, 0xbb, 0xd3, 0x4d, 0x7f, 0x3e,
  0x75, 0x3b, 0xa9, 0x56, 0xf4, 0xfe, 0xfb, 0x32, 0xa9, 0x2f, 0x80, 0x09,
  0xfd, 0xae, 0x2b, 0xd9, 0x23, 0x29, 0xc9, 0x48, 0xbd, 0xe2, 0x4c, 0x27,
  0xed, 0xe7, 0x54, 0x1b, 0x3d, 0xc7, 0x8b, 0x4f, 0x3b, 0xd0, 0x3b, 0x38,
  0x15, 0xe3, 0x91, 0x51, 0xba, 0xa1, 0x04, 0x7f, 0xfe, 0x2c, 0x68, 0x62,
  0xc6, 0xbc, 0x5c, 0x19, 0xa7, 0x0e, 0x66, 0x68, 0x3c, 0xb5, 0x7a, 0x83,
  0xfb, 0x16, 0xef, 0xa8, 0xfb, 0x54, 0x5f, 0xec, 0x89, 0xa1, 0x42, 0x22,
  0x45, 0x86, 0xef, 0xc6, 0xe3, 0x30, 0xb9, 0xba, 0x30, 0x0a, 0x79, 0x79,
  0x59, 0xe4, 0x7f, 0x93, 0xe6, 0x32, 0xdd, 0xb4, 0xc8, 0x56, 0x72, 0xbb,
  0xa4, 0x47, 0x26, 0x04, 0xbc, 0x4a, 0xc9, 0x01, 0x21, 0x7f, 0x13, 0x10,
  0x2b, 0x88, 0x1d, 0xca, 0x52, 0x22, 0xf4, 0x1d, 0xd9, 0x4a, 0x6e, 0x1a,
  0xcf, 0x3d, 0x44, 0x5a, 0x81, 0x7e, 0x45, 0xfb, 0xf8, 0x2c, 0x54, 0x9e,
  0xb0, 0x07, 0x02, 0x9b, 0xf1, 0xdf, 0x20, 0x19, 0xbd, 0xed, 0x30, 0xf4,
  0xb0, 0x63, 0xb2, 0x5b, 0xe6, 0xa0, 0x71, 0x70, 0x2e, 0xc1, 0x55, 0xcc,
  0x62, 0xe2, 0xc5, 0xba, 0xdf, 0xa9, 0x7b, 0xc0, 0x43, 0xf0, 0xb9, 0x6a,
  0x61, 0xad, 0x81, 0x78, 0x89, 0x80, 0x73, 0xd9, 0xd1, 0x1f, 0x80, 0xca,
  0x05, 0xd7, 0xb5, 0x82, 0x2a, 0xcb, 0x94, 0xa9, 0xd1, 0x00, 0x37, 0xb0,
  0xcc, 0x18, 0x4a, 0xcb, 0xd6, 0x90, 0x88, 0x5e, 0x8e, 0x0b, 0x1b, 0xed,
  0x81, 0xb7, 0x44, 0xab, 0x0a, 0x58, 0x9c, 0x13, 0x2d, 0x2a, 0x6c, 0x78,
  0x6f, 0xf1, 0x36, 0x3a, 0x2b, 0x51, 0x39, 0x8e, 0x85, 0xf4, 0x81, 0xf9,
  0x4a, 0xd5, 0x85, 0x4a, 0x13, 0x5d, 0xd2, 0x72, 0x00, 0xd7, 0x76, 0x8a,
  0x9c, 0x16, 0x21, 0x7e, 0x6d, 0xdb, 0xb6, 0xa9, 0x2d, 0xc3, 0x18, 0x3c,
  0x31, 0x20, 0x2d, 0x81, 0xd4, 0x20, 0x35, 0x60, 0x65, 0xec, 0x10, 0x40,
  0x5f, 0x72, 0x41, 0x8a, 0x3d, 0x93, 0x01, 0xb8, 0x0f, 0xb3, 0x5c, 0xf1,
  0x4e, 0x0d, 0x97, 0xca, 0x65, 0xbb, 0x8b, 0xbd, 0x93, 0x41, 0x7a, 0xda,
  0x9d, 0xff, 0xcf, 0xa8, 0x61, 0xf0, 0x24, 0x05, 0xc4, 0x4e, 0x28, 0x27,
  0x28, 0x34, 0x06, 0x3f, 0x04, 0xe7, 0xfe, 0xdc, 0xa4, 0xb6, 0xf3, 0x02,
  0xbd, 0xd5, 0x4d, 0x46, 0x8d, 0xdd, 0xa4, 0x81, 0xd7, 0x69, 0xa8, 0xc5,
  0x41, 0x94, 0x3f, 0x72, 0xf2, 0x34, 0x7a, 0x3e, 0xf5, 0x20, 0x94, 0x64,
  0xa8, 0x46, 0x9e, 0x65, 0x82, 0x2e, 0xf4, 0x07, 0xd7, 0xf8, 0xe0, 0x53,
  0x1b, 0x60, 0x7b, 0x86, 0x37, 0xbf, 0xf0, 0xe4, 0xf1, 0x1f, 0x1f, 0x52,
  0xd2, 0x45, 0x57, 0x2d, 0xc1, 0xab, 0x6d, 0x04, 0xbf, 0x08, 0xd3, 0x8b,
  0x5f, 0x18, 0xea, 0xb2, 0x48, 0x61, 0x3d, 0x65, 0x6f, 0xc8, 0x06, 0xc3,
  0xbb, 0xba, 0x86, 0x0a, 0xa3, 0x09, 0x5f, 0xc2, 0x0f, 0x86, 0xbe, 0x0f,
  0x7a, 0xeb, 0xba, 0x44, 0xeb, 0xfe, 0xd4, 0x6a, 0x2f, 0xb3, 0x9a, 0x4a,
  0x09, 0xd8, 0x2f, 0x9c, 0x62, 0x06, 0x61, 0x27, 0x41, 0x60, 0xe8, 0x72,
  0x56, 0xb5, 0x26, 0x55, 0xfb, 0x39, 0xd5, 0x46, 0xcf, 0xf1, 0xe2, 0xd3,
  0x0e, 0xf4, 0x0e, 0x4e, 0xc5, 0x78, 0x64, 0x94, 0x6e, 0x28, 0xc1, 0x9f,
  0x3f, 0x0b, 0x9a, 0x98, 0x31, 0x2f, 0x57, 0xc6, 0xa9, 0x83, 0x19, 0x1a,
  0x4f, 0xad, 0xde, 0xe0, 0xbe, 0xc5, 0x3b, 0xea, 0x3e, 0xd5, 0x17, 0x7b,
  0x62, 0xa8, 0x90, 0x48, 0x91, 0xe1, 0xbb, 0xf1, 0x38, 0x4c, 0xae, 0x2e,
  0x8c, 0x42, 0x5e, 0x5e, 0x16, 0xf9, 0xdf, 0xa4, 0xb9, 0x4c, 0x37, 0x2d,
  0xb2, 0x95, 0xdc, 0x2e, 0xe9, 0x91, 0x09, 0x01, 0xaf, 0x52, 0x72, 0x40,
  0xc8, 0xdf, 0x04, 0xc4, 0x0a, 0x62, 0x87, 0xb2, 0x94, 0x08, 0x7d, 0x47,
  0xb6, 0x92, 0x9b, 0xc6, 0x73, 0x0f, 0x91, 0x56, 0xa0, 0x5f, 0xd1, 0x3e,
  0x3e, 0x0b, 0x95, 0x27, 0xec, 0x81, 0xc0, 0x66, 0xfc, 0x37, 0x48, 0x46,
  0x6f, 0x3b, 0x0c, 0x3d, 0xec, 0x98, 0xec, 0x96, 0x39, 0x68, 0x1c, 0x9c,
  0x4b, 0x70, 0x15, 0xb3, 0x98, 0x78, 0xb1, 0xee, 0x77, 0xea, 0x1e, 0xf0,
  0x10, 0x7c, 0xae, 0x5a, 0x58, 0x6b, 0x20, 0x5e, 0x22, 0xe0, 0x5c, 0x76,
  0xf4, 0x07, 0xa0, 0x72, 0xc1, 0x75, 0xad, 0xa0, 0xca, 0x32, 0x65, 0x6a,
  0x34, 0xc0, 0x0d, 0x2c, 0x33, 0x86, 0xd2, 0xb2, 0x35, 0x24, 0xa2, 0x97,
  0xe3, 0xc2, 0x46, 0x7b, 0xe0, 0x2d, 0xd1, 0xaa, 0x02, 0x16, 0xe7, 0x44,
  0x8b, 0x0a, 0x1b, 0xde, 0x5b, 0xbc, 0x8d, 0xce, 0x4a, 0x54, 0x8e, 0x63,
  0x21, 0x7d, 0x60, 0xbe, 0x52, 0x75, 0xa1, 0xd2, 0x44, 0x97, 0xb4, 0x1c,
  0xc0, 0xb5, 0x9d, 0x22, 0xa7, 0x45, 0x88, 0x5f, 0xdb, 0xb6, 0x6d, 0x6a,
  0xcb, 0x30, 0x06, 0x4f, 0x0c, 0x48, 0x4b, 0x20, 0x35, 0x48, 0x0d, 0x58,
  0x19, 0x3b, 0x04, 0xd0, 0x97, 0x5c, 0x90, 0x62, 0xcf, 0x64, 0x00, 0xee,
  0xc3, 0x2c, 0x57, 0xbc, 0x53, 0xc3, 0xa5, 0x72, 0xd9, 0xee, 0x62, 0xef,
  0x64, 0x90, 0x9e, 0x76, 0xe7, 0xff, 0x33, 0x6a, 0x18, 0x3c, 0x49, 0x01,
  0xcb, 0x3d, 0x0c, 0x4e, 0x30, 0x22, 0x15, 0x1a, 0xde, 0xf0, 0xf3, 0x49,
  0xd6, 0xdc, 0x64, 0x99, 0x58, 0xb9, 0xba, 0x8d, 0x1e, 0x0f, 0xb0, 0xfc,
  0xb0, 0x37, 0xc7, 0x63, 0x20, 0x98, 0xbc, 0xe0, 0x28, 0x8c, 0x41, 0x6a,
  0x9d, 0x01, 0x1a, 0xc8, 0x0c, 0xae, 0x5f, 0xac, 0x93, 0x89, 0x0b, 0xcb,
  0xf2, 0xf7, 0xb1, 0x2f, 0x5e, 0xfe, 0x69, 0xab, 0xd6, 0x44, 0x53, 0x75,
  0xe4, 0x41, 0xdf, 0xaf, 0x6d, 0xaf, 0xb1, 0x5c, 0xdb, 0x98, 0xc7, 0xaf,
  0xcd, 0xe6, 0xf4, 0xf0, 0x3d, 0x3d, 0x6b, 0xd0, 0x69, 0xb1, 0xe3, 0xe2,
  0x9d, 0xd1, 0x70, 0x68, 0x1f, 0x97, 0x61, 0xf7, 0x85, 0xfc, 0x36, 0x5d,
  0x9a, 0x9f, 0x21, 0x0e, 0x46, 0x70, 0x98, 0xb3, 0x2c, 0x16, 0x8b, 0xef,
  0xb1, 0x13, 0xca, 0x09, 0x0a, 0x8d, 0xc1, 0x0f, 0xc1, 0xb9, 0x3f, 0x37,
  0xa9, 0xed, 0xbc, 0x40, 0x6f, 0x75, 0x93, 0x51, 0x63, 0x37, 0x69, 0xe0,
  0x75, 0x1a, 0x6a, 0x71, 0x10, 0xe5, 0x8f, 0x9c, 0x3c, 0x8d, 0x9e, 0x4f,
  0x3d, 0x08, 0x25, 0x19, 0xaa, 0x91, 0x67, 0x99, 0xa0, 0x0b, 0xfd, 0xde,
  0x35, 0x3e, 0xf8, 0xd4, 0x06, 0xd8, 0x9e, 0xe1, 0xcd, 0x2f, 0x3c, 0x79,
  0xfc, 0xc7, 0x87, 0x94, 0x74, 0xd1, 0x55, 0x4b, 0xf0, 0x6a, 0x1b, 0xc1,
  0x2f, 0xc2, 0xf4, 0xe2, 0x17, 0x86, 0xba, 0x2c, 0x52, 0x58, 0x4f, 0xd9,
  0x1b, 0xb2, 0xc1, 0xf0, 0x72, 0x0f, 0x83, 0x13, 0x8c, 0x48, 0x85, 0x86,
  0x37, 0xfc, 0x7c, 0x92, 0x35, 0x37, 0x59, 0x26, 0x56, 0xae, 0x6e, 0xa3,
  0xc7, 0x03, 0x2c, 0x3f, 0xec, 0xcd, 0xf1, 0x18, 0x08, 0x26, 0x2f, 0x38,
  0x6c, 0x7e, 0x27, 0x10, 0x4c, 0xe7, 0x13, 0x42, 0xe4, 0x5a, 0xe3, 0x2c,
  0xd6, 0xdd, 0xa1, 0x16, 0xd0, 0x19, 0xf5, 0xc8, 0x68, 0x60, 0x58, 0x02,
  0x0c, 0x3e, 0xa5, 0x09, 0xb0, 0x5a, 0xc1, 0xe7, 0xd7, 0x84, 0xc8, 0xbb,
  0xad, 0x35, 0x86, 0x8d, 0x9f, 0xcf, 0x19, 0x89, 0x8d, 0x4a, 0x79, 0xba,
  0xf3, 0x97, 0xbc, 0x35, 0x6d, 0xf8, 0xc5, 0x89, 0x5f, 0xf8, 0x1e, 0x76,
  0x99, 0x7a, 0x0a, 0x04, 0x6e, 0x22, 0xc1, 0xad, 0xd1, 0x57, 0x04, 0xbd,
  0x55, 0x3e, 0x60, 0x3b, 0x23, 0xf6, 0x45, 0xe3, 0x62, 0x79, 0x0b, 0xad,
  0x5b, 0x2b, 0xfe, 0xf6, 0x48, 0x3c, 0x6a, 0x6b, 0x8c, 0x36, 0x18, 0xe3,
  0x57, 0xa7, 0xdb, 0xc9, 0x69, 0x07, 0x94, 0x84, 0xca, 0x59, 0x20, 0x4c,
  0x7d, 0x46, 0x2c, 0xad, 0xa8, 0x18, 0x9c, 0xaf, 0x1f, 0xc0, 0x42, 0x21,
  0x51, 0x2d, 0x0c, 0x25, 0x85, 0x3b, 0x7f, 0x73, 0xc6, 0xd4, 0x59, 0xcb,
  0x4b, 0x02, 0xa3, 0x61, 0x7c, 0x0a, 0x31, 0x29, 0xfd, 0x5b, 0x6a, 0x4c,
  0x0a, 0x63, 0x90, 0x5a, 0x67, 0x80, 0x06, 0x32, 0x83, 0xeb, 0x17, 0xeb,
  0x64, 0xe2, 0xc2, 0xb2, 0xfc, 0x7d, 0xec, 0x8b, 0x97, 0x7f, 0xda, 0xaa,
  0x35, 0xd1, 0x54, 0x1d, 0x79, 0xd0, 0xf7, 0x6b, 0xdb, 0x6b, 0x2c, 0xd7,
  0x36, 0xe6, 0xf1, 0x6b, 0xb3, 0x39, 0x3d, 0x7c, 0x4f, 0xcf, 0x1a, 0x74,
  0x5a, 0xec, 0xb8, 0x78, 0x67, 0x34, 0x1c, 0xda, 0xc7, 0x65, 0xd8, 0x7d,
  0x21, 0xbf, 0x4d, 0x97, 0xe6, 0x67, 0x88, 0x83, 0x11, 0x1c, 0xe6, 0x2c,
  0x8b, 0xc5, 0xe2, 0x3b, 0x9b, 0xdf, 0x09, 0x04, 0xd3, 0xf9, 0x84, 0x10,
  0xb9, 0xd6, 0x38, 0x8b, 0x75, 0x77, 0xa8, 0x05, 0x74, 0x46, 0x3d, 0x32,
  0x1a, 0x18, 0x96, 0x00, 0x83, 0x4f, 0x69, 0x02, 0xac, 0x56, 0xf0, 0xf9,
  0x35, 0x21, 0xf2, 0x6e, 0x6b, 0x8d, 0x61, 0xe3, 0xe7, 0x73, 0x46, 0x62,
  0xa3, 0x52, 0x9e, 0xee, 0xfc, 0x25, 0x6f, 0x4d, 0x1b, 0x7e, 0x71, 0xe2,
  0x17, 0xbe, 0x87, 0x5d, 0xa6, 0x9e, 0x02, 0x81, 0x9b, 0x48, 0x70, 0x6b,
  0xe8, 0x12, 0x45, 0x5a, 0xdc, 0xfb, 0x45, 0x1c, 0xd1, 0x0a, 0xc5, 0x31,
  0x0f, 0xd2, 0xfb, 0x38, 0xaa, 0xa0, 0xa9, 0xd6, 0x1e, 0x12, 0x8f, 0x74,
  0x61, 0xab, 0x59, 0x2e, 0x75, 0x9a, 0x77, 0x61, 0x15, 0x97, 0x59, 0x11,
  0x36, 0x5d, 0xa0, 0x8f, 0x42, 0x90, 0x0b, 0x51, 0xcf, 0x46, 0x5d, 0xe0,
  0x5f, 0xcf, 0x51, 0x2e, 0x93, 0xf3, 0x1b, 0x9b, 0xf5, 0x80, 0x03, 0x92,
  0xc9, 0x3f, 0xa1, 0xe2, 0xb1, 0x8f, 0xe0, 0x89, 0x97, 0x08, 0x4e, 0x34,
  0x24, 0xe3, 0x96, 0x77, 0xd8, 0x0e, 0xf3, 0x60, 0x5d, 0x5f, 0xed, 0x1b,
  0xf4, 0x15, 0x41, 0x6f, 0x95, 0x0f, 0xd8, 0xce, 0x88, 0x7d, 0xd1, 0xb8,
  0x58, 0xde, 0x42, 0xeb, 0xd6, 0x8a, 0xbf, 0x3d, 0x12, 0x8f, 0xda, 0x1a,
  0xa3, 0x0d, 0xc6, 0xf8, 0xd5, 0xe9, 0x76, 0x72, 0xda, 0x01, 0x25, 0xa1,
  0x72, 0x16, 0x08, 0x53, 0x9f, 0x11, 0x4b, 0x2b, 0x2a, 0x06, 0xe7, 0xeb,
  0x07, 0xb0, 0x50, 0x48, 0x54, 0x0b, 0x43, 0x49, 0xe1, 0xce, 0x5f, 0x9d,
  0x31, 0x75, 0xd6, 0xf2, 0x92, 0xc0, 0x68, 0x18, 0x9f, 0x42, 0x4c, 0x4a,
  0xff, 0x96, 0x1a, 0x13, 0xba, 0x44, 0x91, 0x16, 0xf7, 0x7e, 0x11, 0x47,
  0xce, 0xb1, 0x3f, 0xfa, 0x9c, 0x4c, 0x14, 0x23, 0xac, 0x23, 0x48, 0xa2,
  0x9c, 0x32, 0x21, 0xcd, 0x1a, 0x3b, 0xa3, 0x89, 0x16, 0x3e, 0x72, 0x8a,
  0xff, 0xf0, 0x7f, 0x83, 0xd2, 0xfe, 0xba, 0x0a, 0x63, 0x56, 0x5b, 0x44,
  0x50, 0x6f, 0xb8, 0xf7, 0x2e, 0xfa, 0x40, 0xc0, 0x78, 0x9f, 0xe4, 0x0d,
  0x01, 0x7a, 0xab, 0x0d, 0xd9, 0xbe, 0x98, 0x78, 0x83, 0x5b, 0xb3, 0xbd,
  0x09, 0x92, 0x5a, 0x38, 0x0a, 0x61, 0x54, 0xf0, 0xff, 0x8d, 0x6f, 0xe9,
  0x00, 0x5c, 0xd5, 0x42, 0x19, 0x00, 0x5f, 0x1f, 0xbe, 0x39, 0x39, 0x3b,
  0x6c, 0x57, 0xba, 0x35, 0xd4, 0x7b, 0x88, 0x02, 0xdc, 0xdd, 0xd9, 0x11,
  0x20, 0x17, 0xd7, 0x5d, 0xe3, 0x95, 0xbc, 0xc8, 0x61, 0xf4, 0x27, 0xa7,
  0x3f, 0xbc, 0xb6, 0x93, 0xcb, 0x89, 0x69, 0xd2, 0xa4, 0x5c, 0x3b, 0x79,
  0xd9, 0xe7, 0xae, 0x68, 0x87, 0x12, 0xb0, 0x3d, 0x02, 0x3b, 0xe0, 0xe0,
  0xbd, 0x4e, 0x8f, 0xd2, 0x0a, 0x38, 0x19, 0x44, 0x8b, 0xbc, 0x09, 0xfe,
  0xb9, 0xae, 0x51, 0xb4, 0x6d, 0x87, 0x0d, 0xf4, 0x5e, 0x12, 0xfd, 0x04,
  0x7d, 0x24, 0xb6, 0x28, 0x40, 0xaf, 0x80, 0x83, 0x35, 0x4a, 0xec, 0x47,
  0xdc, 0x57, 0xb8, 0x08, 0x8f, 0xdc, 0x20, 0xf4, 0x95, 0x18, 0xc3, 0x46,
  0xdb, 0x67, 0x76, 0xfe, 0xb3, 0xbc, 0x83, 0xc3, 0x85, 0xfa, 0xd4, 0x6a,
  0xdb, 0x9d, 0x01, 0x83, 0x94, 0x49, 0x88, 0xc3, 0xdf, 0xc7, 0x48, 0x54,
  0xd8, 0x7c, 0x76, 0xab, 0xde, 0x1e, 0x78, 0x33, 0xb5, 0xdb, 0x26, 0x13,
  0xde, 0xfc, 0xc3, 0x66, 0x22, 0x45, 0x10, 0xc4, 0xf0, 0x38, 0xdf, 0xa7,
  0xa7, 0xdd, 0x9e, 0xeb, 0xbe, 0xb4, 0x7d, 0x5f, 0xce, 0x92, 0x2e, 0xba,
  0xa7, 0x49, 0x9c, 0x0b, 0x58, 0x49, 0x22, 0x0b, 0xf5, 0x41, 0x5c, 0x31,
  0xdc, 0x22, 0xb1, 0x0e, 0x11, 0xa7, 0x3a, 0xce, 0x40, 0x20, 0x88, 0x43,
  0xe7, 0x5e, 0xe5, 0xb7, 0xc8, 0x51, 0x86, 0x43, 0x41, 0x22, 0x05, 0xdb,
  0x27, 0xf7, 0x3b, 0x37, 0xba, 0xb9, 0x2b, 0x1a, 0x5c, 0x54, 0xe6, 0x29,
  0xd3, 0xb2, 0x8a, 0xc1, 0x30, 0x70, 0xaf, 0x21, 0x8f, 0x76, 0x6b, 0x42,
  0x29, 0x78, 0xfe, 0xe4, 0x39, 0x84, 0x3b, 0xe5, 0xe5, 0x18, 0xea, 0xc2,
  0xb4, 0x42, 0x71, 0xcc, 0x83, 0xf4, 0x3e, 0x8e, 0x2a, 0x68, 0xaa, 0xb5,
  0x87, 0xc4, 0x23, 0x5d, 0xd8, 0x6a, 0x96, 0x4b, 0x9d, 0xe6, 0x5d, 0x58,
  0xc5, 0x65, 0x56, 0x84, 0x4d, 0x17, 0xe8, 0xa3, 0x10, 0xe4, 0x42, 0xd4,
  0xb3, 0x51, 0x17, 0xf8, 0xd7, 0x73, 0x94, 0xcb, 0xe4, 0xfc, 0xc6, 0x66,
  0x3d, 0xe0, 0x80, 0x64, 0xf2, 0x4f, 0xa8, 0x78, 0xec, 0x23, 0x78, 0xe2,
  0x25, 0x82, 0x13, 0x0d, 0xc9, 0xb8, 0xe5, 0x1d, 0xb6, 0xc3, 0x3c, 0x58,
  0xd7, 0x57, 0xfb, 0x86, 0x73, 0xec, 0x8f, 0x3e, 0x27, 0x13, 0xc5, 0x08,
  0xeb, 0x08, 0x92, 0x28, 0xa7, 0x4c, 0x48, 0xb3, 0xc6, 0xce, 0x68, 0xa2,
  0x85, 0x8f, 0x9c, 0xe2, 0x3f, 0xfc, 0xdf, 0xa0, 0xb4, 0xbf, 0xae, 0xc2,
  0x98, 0xd5, 0x16, 0x11, 0xd4, 0x1b, 0xee, 0xbd, 0x8b, 0x3e, 0x10, 0x30,
  0xde, 0x27, 0x79, 0x43, 0x80, 0xde, 0x6a, 0x43, 0xb6, 0x2f, 0x26, 0xde,
  0xe0, 0xd6, 0x6c, 0x6f, 0x82, 0xa4, 0x16, 0x8e, 0x42, 0x18, 0x15, 0xfc,
  0x7f, 0xe3, 0x5b, 0x3a, 0x00, 0x57, 0xb5, 0x50, 0x06, 0xc0, 0x57, 0x87,
  0x6f, 0x4e, 0xce, 0x0e, 0xdb, 0x95, 0x6e, 0x0d, 0xf5, 0x1e, 0xa2, 0x00,
  0x77, 0x77, 0x76, 0x04, 0xc8, 0xc5, 0x75, 0xd7, 0x78, 0x25, 0x2f, 0x72,
  0x18, 0xfd, 0xc9, 0xe9, 0xf7, 0xaf, 0xed, 0xe4, 0x72, 0x62, 0x9a, 0x34,
  0x29, 0xd7, 0x4e, 0x5e, 0xf6, 0xb9, 0x2b, 0xda, 0xa1, 0x04, 0x6c, 0x8f,
  0xc0, 0x0e, 0x38, 0x78, 0xaf, 0xd3, 0xa3, 0xb4, 0x02, 0x4e, 0x06, 0xd1,
  0x22, 0x6f, 0x82, 0x7f, 0xae, 0x6b, 0x14, 0x6d, 0xdb, 0x61, 0x03, 0xbd,
  0x97, 0x44, 0x3f, 0x41, 0x1f, 0x89, 0x2d, 0x0a, 0xd0, 0x2b, 0xe0, 0x60,
  0x8d, 0x12, 0xfb, 0x11, 0xf7, 0x15, 0x2e, 0xc2, 0x23, 0x37, 0x08, 0x7d,
  0x25, 0xc6, 0xb0, 0xd1, 0xf6, 0x99, 0x9d, 0xff, 0x2c, 0xef, 0xe0, 0x70,
  0xa1, 0x3e, 0xb5, 0xda, 0x76, 0x67, 0xc0, 0x20, 0x65, 0x12, 0xe2, 0xf0,
  0xf7, 0x31, 0x12, 0x15, 0x36, 0x9f, 0xdd, 0xaa, 0xb7, 0x07, 0xde, 0x4c,
  0xed, 0xb6, 0xc9, 0x84, 0x37, 0x7f, 0xbf, 0x99, 0x48, 0x11, 0x04, 0x31,
  0x33, 0x02, 0x4e, 0x4b, 0x31, 0x43, 0x9e, 0x73, 0x14, 0xd9, 0x44, 0xc6,
  0x91, 0x2e, 0xb2, 0x93, 0x6c, 0xce, 0x5d, 0x90, 0xc6, 0xde, 0x10, 0x6b,
  0x4b, 0xf8, 0xfa, 0x93, 0xde, 0x47, 0xac, 0x34, 0x98, 0x23, 0x48, 0x3f,
  0xba, 0x5a, 0xfb, 0xa4, 0xef, 0x5e, 0x0e, 0x9c, 0xba, 0x2a, 0x68, 0x18,
  0x4c, 0x0b, 0x16, 0xcd, 0xdf, 0xf0, 0xed, 0xac, 0xca, 0xeb, 0x8f, 0xc9,
  0x3c, 0xce, 0xf7, 0xe9, 0x69, 0xb7, 0xe7, 0xba, 0x2f, 0x6d, 0xdf, 0x97,
  0xb3, 0xa4, 0x8b, 0xee, 0x69, 0x12, 0xe7, 0x02, 0x56, 0x92, 0xc8, 0x42,
  0x7d, 0x10, 0x57, 0x0c, 0xb7, 0x48, 0xac, 0x43, 0xc4, 0xa9, 0x8e, 0x33,
  0x10, 0x08, 0xe2, 0xd0, 0xb9, 0x57, 0xf9, 0x2d, 0x72, 0x94, 0xe1, 0x50,
  0x90, 0x48, 0xc1, 0xf6, 0xc9, 0xfd, 0xce, 0x8d, 0x6e, 0xee, 0x8a, 0x06,
  0xd6, 0xbf, 0x6f, 0xdb, 0x0e, 0xd4, 0x91, 0xf4, 0x62, 0x78, 0x80, 0xf3,
  0x62, 0x95, 0xb5, 0xfa, 0x92, 0xeb, 0x68, 0x17, 0x14, 0x9e, 0x00, 0x0a,
  0x6a, 0xac, 0x4a, 0x0c, 0xdd, 0x61, 0x97, 0x41, 0x4b, 0x13, 0xa9, 0xf0,
  0x17, 0x22, 0x08, 0x45, 0x26, 0x9d, 0x08, 0x01, 0xfe, 0x8a, 0x43, 0x56,
  0xd5, 0xaf, 0x51, 0xf2, 0xbe, 0xa0, 0xec, 0x34, 0x21, 0x4c, 0x11, 0x24,
  0x79, 0x61, 0x16, 0x62, 0xd6, 0x6a, 0x44, 0x49, 0x84, 0x4b, 0xfd, 0xb5,
  0xcd, 0x9c, 0x84, 0x8b, 0x76, 0xa2, 0x86, 0x74, 0xad, 0xb5, 0xeb, 0x8f,
  0x17, 0x95, 0x79, 0xca, 0xb4, 0xac, 0x62, 0x30, 0x0c, 0xdc, 0x6b, 0xc8,
  0xa3, 0xdd, 0x9a, 0x50, 0x0a, 0x9e, 0x3f, 0x79, 0x0e, 0xe1, 0x4e, 0x79,
  0x39, 0x86, 0xba, 0xf0, 0x8c, 0x80, 0xd3, 0x52, 0xcc, 0x90, 0xe7, 0x1c,
  0x45, 0x36, 0x91, 0x71, 0xa4, 0x8b, 0xec, 0x24, 0x9b, 0x73, 0x17, 0xa4,
  0xb1, 0x37, 0xc4, 0xda, 0x12, 0xbe, 0xfe, 0xa4, 0xf7, 0x11, 0x2b, 0x0d,
  0xe6, 0x08, 0xd2, 0x8f, 0xae, 0xd6, 0x3e, 0xe9, 0xbb, 0x97, 0x03, 0xa7,
  0xae, 0x0a, 0x1a, 0x06, 0xd3, 0x82, 0x45, 0xf3, 0x37, 0x7c, 0x3b, 0xab,
  0xe5, 0x6b, 0xc9, 0x9b, 0xb0, 0xff, 0x17, 0xf7, 0x2f, 0xc2, 0x5d, 0x30,
  0xa7, 0x44, 0x63, 0x23, 0x2e, 0x9c, 0xcd, 0xe7, 0x43, 0x06, 0x88, 0x06,
  0x5c, 0x2e, 0xb4, 0x7f, 0x2e, 0xc0, 0xa5, 0xac, 0x2e, 0x35, 0x8d, 0x60,
  0x19, 0x05, 0xa2, 0x87, 0xea, 0x88, 0x09, 0x8d, 0x51, 0x91, 0x2c, 0xa4,
  0x3e, 0x49, 0xa3, 0x4d, 0xa8, 0x37, 0x73, 0xfe, 0x12, 0xda, 0x1c, 0x5e,
  0x52, 0x5f, 0xc7, 0x9e, 0x10, 0x72, 0x71, 0x7a, 0x75, 0x59, 0x2d, 0xb9,
  0x6b, 0x58, 0xac, 0xa5, 0x99, 0x6f, 0x5a, 0xf1, 0xa3, 0x7a, 0xba, 0x75,
  0xd6, 0xf0, 0x64, 0xf8, 0xdd, 0xa3, 0xd7, 0xad, 0x0e, 0xc4, 0xd8, 0x0a,
  0x18, 0x87, 0xf1, 0xe1, 0x5c, 0xff, 0x63, 0x5c, 0x58, 0x27, 0x58, 0xec,
  0x50, 0xce, 0x02, 0x99, 0x28, 0xae, 0x2f, 0xfd, 0x2e, 0x3e, 0x9c, 0x8c,
  0xc2, 0xaa, 0x2c, 0x8f, 0xa1, 0x03, 0x13, 0xa9, 0x68, 0x7f, 0x6c, 0x10,
  0xc3, 0x65, 0x56, 0xd9, 0xcf, 0x84, 0x99, 0x83, 0x57, 0x8b, 0x72, 0x86,
  0x42, 0xa7, 0xec, 0xfe, 0xbd, 0xc0, 0x93, 0xee, 0xe2, 0x48, 0x8d, 0x58,
  0x6d, 0xe1, 0x22, 0xcd, 0xe2, 0x68, 0x9c, 0x09, 0xe2, 0xea, 0xbc, 0x33,
  0xf1, 0xe1, 0xdc, 0x52, 0xb5, 0x8b, 0x9f, 0xbc, 0xe9, 0x2f, 0xa1, 0x48,
  0xca, 0x69, 0xe3, 0xad, 0x00, 0x0f, 0xc4, 0x87, 0x63, 0xce, 0x1b, 0x59,
  0x19, 0xaa, 0x86, 0xc8, 0xe4, 0x5c, 0xbf, 0x32, 0x7e, 0x30, 0x38, 0x64,
  0xf3, 0x43, 0x87, 0xab, 0xd9, 0x3a, 0xe1, 0xfe, 0x95, 0xc5, 0x4e, 0x98,
  0x66, 0xd0, 0x3d, 0x60, 0x6e, 0x24, 0x44, 0x78, 0xbf, 0x78, 0x7c, 0x18,
  0x1f, 0xce, 0x9e, 0xb0, 0x00, 0xf9, 0xae, 0x39, 0x60, 0xf9, 0x4a, 0xb0,
  0x0b, 0x73, 0xc3, 0x22, 0x8d, 0x0a, 0x3c, 0xcd, 0x3e, 0x70, 0x3b, 0xcd,
  0xb4, 0xba, 0xcc, 0x9a, 0x0f, 0xeb, 0x37, 0x64, 0x2e, 0x85, 0xfa, 0x77,
  0x0b, 0x6a, 0xc3, 0x6b, 0x99, 0x85, 0x60, 0x67, 0xa6, 0x52, 0xb8, 0x6e,
  0x34, 0x40, 0xfa, 0x3d, 0x1b, 0x3c, 0x3d, 0x64, 0xef, 0xbe, 0x97, 0x28,
  0x4a, 0x8b, 0x91, 0xa7, 0x79, 0xa1, 0xf8, 0x28, 0xc2, 0x63, 0xbc, 0x29,
  0xf2, 0xfa, 0x63, 0xb2, 0xf5, 0x6f, 0xdb, 0xb6, 0x03, 0x75, 0x24, 0xbd,
  0x18, 0x1e, 0xe0, 0xbc, 0x58, 0x65, 0xad, 0xbe, 0xe4, 0x3a, 0xda, 0x05,
  0x85, 0x27, 0x80, 0x82, 0x1a, 0xab, 0x12, 0x43, 0x77, 0xd8, 0x65, 0xd0,
  0xd2, 0x44, 0x2a, 0xfc, 0x85, 0x08, 0x42, 0x91, 0x49, 0x27, 0x42, 0x80,
  0xbf, 0xe2, 0x90, 0x55, 0xf5, 0x6b, 0x94, 0xbc, 0x2f, 0x28, 0x3b, 0x4d,
  0x08, 0x53, 0x04, 0x49, 0x5e, 0x98, 0x85, 0x98, 0xb5, 0x1a, 0x51, 0x12,
  0xe1, 0x52, 0x7f, 0x6d, 0x33, 0x27, 0xe1, 0xa2, 0x9d, 0xa8, 0x21, 0x5d,
  0x6b, 0xed, 0xfa, 0x63, 0xf9, 0x5a, 0xf2, 0x26, 0xec, 0xff, 0xc5, 0xfd,
  0x8b, 0x70, 0x17, 0xcc, 0x29, 0xd1, 0xd8, 0x88, 0x0b, 0x67, 0xf3, 0xf9,
  0x90, 0x01, 0xa2, 0x01, 0x97, 0x0b, 0xed, 0x9f, 0x0b, 0x70, 0x29, 0xab,
  0x4b, 0x4d, 0x23, 0x58, 0x46, 0x81, 0xe8, 0xa1, 0x3a, 0x62, 0x42, 0x63,
  0x54, 0x24, 0x0b, 0xa9, 0x4f, 0xd2, 0x68, 0x13, 0xea, 0xcd, 0x9c, 0xbf,
  0x84, 0x36, 0x87, 0x97, 0xd4, 0xd7, 0xb1, 0x27, 0x84, 0x5c, 0x9c, 0x5e,
  0x5d, 0x56, 0x4b, 0xee, 0x1a, 0x16, 0x6b, 0x69, 0xe6, 0x9b, 0x56, 0xfc,
  0xa8, 0x9e, 0x6e, 0x9d, 0x35, 0x3c, 0x19, 0x7e, 0xf7, 0xe8, 0x75, 0xab,
  0x03, 0x31, 0xb6, 0x02, 0xc6, 0x61, 0x7c, 0x38, 0xd7, 0xff, 0x18, 0x17,
  0xd6, 0x09, 0x16, 0x3b, 0x94, 0xb3, 0x40, 0x26, 0x8a, 0xeb, 0x4b, 0xbf,
  0x8b, 0x0f, 0x27, 0xa3, 0xb0, 0x2a, 0xcb, 0x63, 0xe8, 0xc0, 0x44, 0x2a,
  0xda, 0x1f, 0x1b, 0xc4, 0x70, 0x99, 0x55, 0xf6, 0x33, 0x61, 0xe6, 0xe0,
  0xd5, 0xa2, 0x9c, 0xa1, 0xd0, 0x29, 0xbb, 0x7f, 0x2f, 0xf0, 0xa4, 0xbb,
  0x38, 0x52, 0x23, 0x56, 0x5b, 0xb8, 0x48, 0xb3, 0x38, 0x1a, 0x67, 0x82,
  0xb8, 0x3a, 0xef, 0x4c, 0x7c, 0x38, 0xb7, 0x54, 0xed, 0xe2, 0x27, 0x6f,
  0xfa, 0x4b, 0x28, 0x92, 0x72, 0xda, 0x78, 0x2b, 0xc0, 0x03, 0xf1, 0xe1,
  0x98, 0xf3, 0x46, 0x56, 0x86, 0xaa, 0x21, 0x32, 0x39, 0xd7, 0xaf, 0x8c,
  0x26, 0x31, 0x50, 0x9f, 0x75, 0xf1, 0xac, 0xc5, 0x47, 0xd4, 0x1d, 0x59,
  0x2d, 0xe1, 0x43, 0xa4, 0xf1, 0x81, 0x4f, 0xc7, 0xfc, 0xb8, 0x1e, 0x37,
  0xaf, 0x49, 0x0a, 0xeb, 0x6c, 0xb7, 0x46, 0xff, 0xa4, 0x93, 0x10, 0xb1,
  0xc8, 0x93, 0x98, 0xfa, 0x41, 0x7b, 0x23, 0xbb, 0xb3, 0x5b, 0xde, 0xcc,
  0x2c, 0x46, 0x8a, 0xf9, 0xab, 0x7e, 0x57, 0x65, 0x3f, 0x01, 0xe3, 0x6b,
  0x3b, 0x54, 0x64, 0xf5, 0xf0, 0x60, 0x17, 0x8a, 0xee, 0xdb, 0xfb, 0xe9,
  0x1f, 0x0c, 0x0e, 0xd9, 0xfc, 0xd0, 0xe1, 0x6a, 0xb6, 0x4e, 0xb8, 0x7f,
  0x65, 0xb1, 0x13, 0xa6, 0x19, 0x74, 0x0f, 0x98, 0x1b, 0x09, 0x11, 0xde,
  0x2f, 0x1e, 0x1f, 0xc6, 0x87, 0xb3, 0x27, 0x2c, 0x40, 0xbe, 0x6b, 0x0e,
  0x58, 0xbe, 0x12, 0xec, 0xc2, 0xdc, 0xb0, 0x48, 0xa3, 0x02, 0x4f, 0xb3,
  0x0f, 0xdc, 0x4e, 0x33, 0xad, 0x2e, 0xb3, 0xe6, 0xc3, 0xfa, 0x0d, 0x99,
  0x4b, 0xa1, 0xfe, 0xdd, 0x82, 0xda, 0xf0, 0x5a, 0x66, 0x21, 0xd8, 0x99,
  0xa9, 0x14, 0xae, 0x1b, 0x0d, 0x90, 0x7e, 0xcf, 0x06, 0x4f, 0x0f, 0xd9,
  0xbb, 0xef, 0x25, 0x8a, 0xd2, 0x62, 0xe4, 0x69, 0x5e, 0x28, 0x3e, 0x8a,
  0xa2, 0x09, 0x15, 0xa4, 0xe0, 0xe3, 0x55, 0xc6, 0xc9, 0xa0, 0xb4, 0xbd,
  0x72, 0x18, 0xfd, 0x5b, 0x23, 0x4f, 0xbb, 0x29, 0x32, 0x77, 0xf7, 0x5b,
  0xb7, 0x87, 0x5b, 0xd4, 0xcf, 0xee, 0xe4, 0xab, 0x9d, 0xeb, 0x30, 0xcb,
  0xe0, 0xb5, 0x15, 0x42, 0x40, 0x16, 0x13, 0x0f, 0xa4, 0x5c, 0x6f, 0x1d,
  0x19, 0xf5, 0xee, 0x71, 0xb5, 0xb8, 0xe7, 0x8a, 0x9b, 0x07, 0xdc, 0xaa,
  0x18, 0xe2, 0xc1, 0xae, 0x2a, 0xb8, 0x97, 0x72, 0x89, 0x7b, 0x76, 0xbe,
  0x6f, 0x06, 0x2d, 0x1a, 0x5c, 0x37, 0x13, 0x9f, 0xfa, 0xfc, 0xc9, 0xb8,
  0xad, 0x35, 0xba, 0x5e, 0x83, 0x3f, 0xec, 0xcc, 0xe2, 0xc3, 0x59, 0xf2,
  0xd4, 0xf7, 0x64, 0x7b, 0x06, 0x9e, 0x73, 0x93, 0xbb, 0x24, 0x18, 0xbb,
  0x32, 0xa4, 0x0d, 0xbd, 0xde, 0xbf, 0x88, 0x3d, 0xc0, 0x80, 0x9f, 0x17,
  0xbe, 0xc9, 0x8e, 0x2f, 0x1a, 0xc9, 0xbb, 0xa6, 0xbe, 0xc3, 0x0b, 0x69,
  0xdb, 0x03, 0xe7, 0x56, 0x9b, 0x14, 0x98, 0xa5, 0x2c, 0x35, 0xca, 0xde,
  0xa4, 0x26, 0x3b, 0xa2, 0xc5, 0x12, 0x12, 0xd9, 0x0c, 0xed, 0x0b, 0xc2,
  0x64, 0x72, 0xfe, 0x24, 0xa7, 0x32, 0xd1, 0xa6, 0x52, 0x68, 0x51, 0x94,
  0x10, 0x6d, 0xe4, 0x59, 0x67, 0x62, 0x46, 0xe8, 0xe3, 0x09, 0x77, 0x44,
  0x08, 0x1b, 0x98, 0x76, 0xb2, 0xca, 0xa0, 0x7e, 0x74, 0xa0, 0x84, 0xb3,
  0xf0, 0x18, 0x6f, 0x8a, 0x49, 0x0c, 0xd4, 0x67, 0x5d, 0x3c, 0x6b, 0xf1,
  0x11, 0x75, 0x47, 0x56, 0x4b, 0xf8, 0x10, 0x69, 0x7c, 0xe0, 0xd3, 0x31,
  0x3f, 0xae, 0xc7, 0xcd, 0x6b, 0x92, 0xc2, 0x3a, 0xdb, 0xad, 0xd1, 0x3f,
  0xe9, 0x24, 0x44, 0x2c, 0xf2, 0x24, 0xa6, 0x7e, 0xd0, 0xde, 0xc8, 0xee,
  0xec, 0x96, 0x37, 0x33, 0x8b, 0x91, 0x62, 0xfe, 0xaa, 0xdf, 0x55, 0xd9,
  0x4f, 0xc0, 0xf8, 0xda, 0x0e, 0x15, 0x59, 0x3d, 0x3c, 0xd8, 0x85, 0xa2,
  0xfb, 0xf6, 0x7e, 0xba, 0x68, 0x42, 0x05, 0x29, 0xf8, 0x78, 0x95, 0x71,
  0x32, 0x28, 0x6d, 0xaf, 0x1c, 0x46, 0xff, 0xd6, 0xc8, 0xd3, 0x6e, 0x8a,
  0xcc, 0xdd, 0xfd, 0xd6, 0xed, 0xe1, 0x16, 0xf5, 0xb3, 0x3b, 0xf9, 0x6a,
  0xe7, 0x3a, 0xcc, 0x32, 0x78, 0x6d, 0x85, 0x10, 0x90, 0xc5, 0xc4, 0x03,
  0x29, 0xd7, 0x5b, 0x47, 0x46, 0xbd, 0x7b, 0x5c, 0x2d, 0xee, 0xb9, 0xe2,
  0xe6, 0x01, 0xb7, 0x2a, 0x86, 0x78, 0xb0, 0xab, 0x0a, 0xee, 0xa5, 0x5c,
  0xe2, 0x9e, 0x9d, 0xef, 0x9b, 0x41, 0x8b, 0x06, 0xd7, 0xcd, 0xc4, 0xa7,
  0x3e, 0x7f, 0x32, 0x6e, 0x6b, 0x8d, 0xae, 0xd7, 0xe0, 0x0f, 0x3b, 0xb3,
  0xf8, 0x70, 0x96, 0x3c, 0xf5, 0x3d, 0xd9, 0x9e, 0x81, 0xe7, 0xdc, 0xe4,
  0x2e, 0x09, 0xc6, 0xae, 0x0c, 0x69, 0x43, 0xaf, 0xf7, 0xcf, 0x62, 0x0f,
  0x30, 0xe0, 0xe7, 0x85, 0x6f, 0xb2, 0xe3, 0x8b, 0x46, 0xf2, 0xae, 0xa9,
  0xcb, 0x99, 0xdf, 0x0d, 0xd8, 0x5b, 0x7e, 0x35, 0xe0, 0x2d, 0xb8, 0x34,
  0x8b, 0xa7, 0x3f, 0xa2, 0x95, 0x13, 0x89, 0x5a, 0x9a, 0x54, 0xba, 0xbf,
  0x9d, 0x9c, 0x49, 0xec, 0x13, 0x3a, 0xdd, 0x9d, 0xb9, 0xf7, 0x3c, 0xc0,
  0x56, 0x3e, 0x32, 0xc2, 0x90, 0x33, 0xe5, 0xa1, 0x20, 0x01, 0x6d, 0x3c,
  0x16, 0x49, 0xde, 0x96, 0x88, 0x29, 0xbb, 0xcb, 0x76, 0xf6, 0x46, 0x7b,
  0x03, 0xee, 0x0a, 0x5b, 0x89, 0xb2, 0xa8, 0xf9, 0x70, 0x30, 0x54, 0x53,
  0x0b, 0x73, 0x8c, 0x4f, 0x77, 0x1d, 0x11, 0x67, 0xf8, 0x70, 0x1d, 0xba,
  0x8d, 0xc9, 0xf7, 0xec, 0x2c, 0x9a, 0x9b, 0xf4, 0x2e, 0x54, 0xd3, 0x77,
  0x87, 0x8f, 0x9f, 0x3f, 0x6f, 0xc9, 0xf3, 0xda, 0xc3, 0x88, 0x7e, 0xb2,
  0xbb, 0x4b, 0x6b, 0x0b, 0x0a, 0x85, 0xcd, 0x2f, 0x86, 0xcf, 0xe9, 0xc5,
  0xf6, 0x6b, 0x75, 0x66, 0x8e, 0x60, 0xd6, 0xff, 0xde, 0x10, 0xbf, 0x89,
  0x7c, 0x8e, 0x1c, 0x2e, 0xbd, 0x6f, 0x3d, 0xc7, 0xe7, 0x22, 0x6f, 0xd1,
  0xc3, 0xbc, 0x8f, 0xe5, 0xc5, 0x05, 0x5c, 0x5d, 0x78, 0x52, 0x21, 0x5f,
  0x6e, 0xd2, 0x6a, 0x16, 0x2e, 0x77, 0x77, 0x30, 0xdc, 0xeb, 0x5b, 0x2e,
  0x85, 0x9b, 0x29, 0x2b, 0x0c, 0xe7, 0x09, 0x4b, 0xd2, 0x98, 0x11, 0x5c,
  0x35, 0xd3, 0x1d, 0x68, 0xcf, 0xcc, 0x68, 0xef, 0xf9, 0xf3, 0x01, 0x66,
  0xf6, 0xe4, 0xf9, 0xf3, 0xde, 0x2a, 0x69, 0xef, 0x33, 0x37, 0xa5, 0xf3,
  0x4f, 0xe1, 0x75, 0x47, 0x34, 0x35, 0xac, 0x95, 0xf8, 0x77, 0xf0, 0x9b,
  0xe4, 0xcb, 0xe4, 0xdd, 0xc9, 0xf9, 0xa1, 0xe7, 0xba, 0xa1, 0xfb, 0xc5,
  0x31, 0x45, 0x0f, 0x82, 0x96, 0x82, 0xb4, 0x4b, 0xea, 0x53, 0x44, 0xa6,
  0xb1, 0x31, 0xb5, 0x42, 0x6b, 0x93, 0x2a, 0x38, 0xd4, 0x69, 0xf8, 0x6f,
  0x61, 0xca, 0x04, 0xb9, 0xb0, 0x2f, 0xf3, 0xc6, 0x47, 0x04, 0xda, 0x32,
  0x87, 0xbd, 0x4d, 0x2e, 0x10, 0xce, 0xfc, 0x92, 0x68, 0xcb, 0x66, 0x8d,
  0x92, 0x07, 0xce, 0x0e, 0xc5, 0x3f, 0xca, 0xe5, 0x66, 0x50, 0x75, 0x90,
  0xcd, 0xe1, 0x37, 0x10, 0x49, 0xc8, 0x2f, 0x0c, 0xe9, 0x49, 0xb9, 0x2e,
  0x64, 0xd0, 0x72, 0x0f, 0xe4, 0x94, 0x00, 0x13, 0xfd, 0x8f, 0x47, 0x02,
  0x2e, 0xe4, 0xef, 0xa2, 0x4c, 0x0d, 0x2d, 0x57, 0xc2, 0x30, 0x3e, 0x12,
  0xef, 0x66, 0xed, 0x7c, 0xa2, 0xd6, 0x7d, 0x57, 0xe0, 0x1c, 0x02, 0xa8,
  0x3b, 0xf6, 0xf2, 0xcf, 0xb2, 0xa5, 0xe6, 0x59, 0x16, 0xed, 0x71, 0x0c,
  0x2d, 0x5f, 0xe4, 0x97, 0xab, 0x2a, 0x9e, 0x93, 0x48, 0xfd, 0xb0, 0x24,
  0x15, 0x42, 0x11, 0xd1, 0xd3, 0x9b, 0xb4, 0xca, 0xb4, 0x81, 0x57, 0x71,
  0x67, 0xef, 0xb6, 0x9a, 0xc9, 0x5a, 0x24, 0x03, 0xb8, 0xfa, 0xc0, 0xd4,
  0x46, 0x5d, 0x93, 0xd1, 0x63, 0xe0, 0x44, 0x90, 0x14, 0x1e, 0x81, 0x65,
  0x4f, 0x1b, 0x57, 0xa6, 0x24, 0x1e, 0x46, 0x1c, 0xf6, 0x25, 0xf5, 0x8b,
  0x4d, 0x64, 0x0b, 0xc2, 0x4c, 0xc0, 0xcd, 0xb9, 0x73, 0xee, 0xe3, 0x59,
  0x72, 0xc7, 0x5c, 0x95, 0x5e, 0x0b, 0x84, 0x10, 0xc9, 0x00, 0x9c, 0x87,
  0xce, 0x93, 0x99, 0x10, 0x1f, 0x92, 0x79, 0xfe, 0xa6, 0x98, 0x97, 0xe9,
  0xac, 0x96, 0xe6, 0xec, 0x12, 0x71, 0xa7, 0xcd, 0x62, 0x34, 0x2b, 0x39,
  0xda, 0x20, 0xed, 0x03, 0x27, 0xcd, 0x67, 0x9c, 0x6c, 0x69, 0x23, 0x71,
  0xa5, 0x50, 0xcf, 0x4b, 0xc2, 0x5c, 0x0a, 0x94, 0xc2, 0xa8, 0x11, 0xe8,
  0xf7, 0x1c, 0x9a, 0xbd, 0xa0, 0x77, 0x3e, 0x2d, 0x8b, 0xe1, 0x4f, 0xfd,
  0x00, 0x21, 0x24, 0x31, 0x5d, 0x15, 0xc8, 0xe3, 0xa3, 0xff, 0xeb, 0xf0,
  0x53, 0x86, 0xa5, 0xaa, 0xf4, 0xc6, 0x56, 0xd3, 0xfd, 0xc0, 0x58, 0x88,
  0xef, 0xf0, 0x42, 0xda, 0xf6, 0xc0, 0xb9, 0xd5, 0x26, 0x05, 0x66, 0x29,
  0x4b, 0x8d, 0xb2, 0x37, 0xa9, 0xc9, 0x8e, 0x68, 0xb1, 0x84, 0x44, 0x36,
  0x43, 0xfb, 0x82, 0x30, 0x99, 0x9c, 0x3f, 0xc9, 0xa9, 0x4c, 0xb4, 0xa9,
  0x14, 0x5a, 0x14, 0x25, 0x44, 0x1b, 0x79, 0xd6, 0x99, 0x98, 0x11, 0xfa,
  0x78, 0xc2, 0x1d, 0x11, 0xc2, 0x06, 0xa6, 0x9d, 0xac, 0x32, 0xa8, 0x1f,
  0x1d, 0x28, 0xe1, 0xec, 0x72, 0xe6, 0x77, 0x03, 0xf6, 0x96, 0x5f, 0x0d,
  0x78, 0x0b, 0x2e, 0xcd, 0xe2, 0xe9, 0x8f, 0x68, 0xe5, 0x44, 0xa2, 0x96,
  0x26, 0x95, 0xee, 0x6f, 0x27, 0x67, 0x12, 0xfb, 0x84, 0x4e, 0x77, 0x67,
  0xee, 0x3d, 0x0f, 0xb0, 0x95, 0x8f, 0x8c, 0x30, 0xe4, 0x4c, 0x79, 0x28,
  0x48, 0x40, 0x1b, 0x8f, 0x45, 0x92, 0xb7, 0x25, 0x62, 0xca, 0xee, 0xb2,
  0x9d, 0xbd, 0xd1, 0xde, 0x80, 0xbb, 0xc2, 0x56, 0xa2, 0x2c, 0x6a, 0x3e,
  0x1c, 0x0c, 0xd5, 0xd4, 0xc2, 0x1c, 0xe3, 0xd3, 0x5d, 0x47, 0xc4, 0x19,
  0x3e, 0x5c, 0x87, 0x6e, 0x63, 0xf2, 0x3d, 0x3b, 0x8b, 0xe6, 0x26, 0xbd,
  0x0b, 0xd5, 0xf4, 0xdd, 0xe1, 0xe3, 0xe7, 0xcf, 0x5b, 0xf2, 0xbc, 0xf6,
  0x30, 0xa2, 0x9f, 0xec, 0xee, 0xd2, 0xda, 0x82, 0x42, 0x61, 0xf3, 0x8b,
  0xe1, 0x73, 0x7a, 0xb1, 0xfd, 0x5a, 0x9d, 0x99, 0x23, 0x98, 0xf5, 0xbf,
  0x37, 0xc4, 0x6f, 0x22, 0x9f, 0x23, 0x87, 0x4b, 0xef, 0x5b, 0xcf, 0xf1,
  0xb9, 0xc8, 0x5b, 0xf4, 0x30, 0xef, 0x63, 0x79, 0x71, 0x01, 0x57, 0x17,
  0x9e, 0x54, 0xc8, 0x97, 0x9b, 0xb4, 0x9a, 0x85, 0xcb, 0xdd, 0x1d, 0x0c,
  0xf7, 0xfa, 0x96, 0x4b, 0xe1, 0x66, 0xca, 0x0a, 0xc3, 0x79, 0xc2, 0x92,
  0x34, 0x66, 0x04, 0x57, 0xcd, 0x74, 0x07, 0xda, 0x33, 0x33, 0xda, 0x7b,
  0xfe, 0x7c, 0x80, 0x99, 0x3d, 0x79, 0xfe, 0xbc, 0xb7, 0x4a, 0xda, 0xfb,
  0xcc, 0x4d, 0xe9, 0xfc, 0x53, 0x78, 0xdd, 0x11, 0x4d, 0x0d, 0x6b, 0x25,
  0xfe, 0x1d, 0xfc, 0x26, 0xf9, 0x22, 0x79, 0x77, 0x72, 0x7e, 0xe8, 0xb9,
  0x6e, 0xe8, 0x7e, 0x71, 0x4c, 0xd1, 0x83, 0xa0, 0xa5, 0x20, 0xed, 0x92,
  0xfa, 0x14, 0x91, 0x69, 0x6c, 0x4c, 0xad, 0xd0, 0xda, 0xa4, 0x0a, 0x0e,
  0x75, 0x1a, 0xfe, 0x26, 0x4c, 0x99, 0x20, 0x17, 0xf6, 0x65, 0xde, 0xf8,
  0x88, 0x40, 0x5b, 0xe6, 0xb0, 0xb7, 0xc9, 0x05, 0xc2, 0x99, 0x5f, 0x12,
  0x6d, 0xd9, 0xac, 0x51, 0xf2, 0xc0, 0xd9, 0xa1, 0xf8, 0x47, 0xb9, 0xdc,
  0x0c, 0xaa, 0x0e, 0xb2, 0x39, 0xfc, 0x06, 0x22, 0x09, 0xf9, 0x85, 0x21,
  0x3d, 0x29, 0xd7, 0x85, 0x0c, 0x5a, 0xee, 0x81, 0x9c, 0x12, 0x60, 0xa2,
  0xff, 0xf1, 0x48, 0xc0, 0x85, 0xfc, 0x5d, 0x94, 0xa9, 0xa1, 0xe5, 0x4a,
  0x18, 0xc6, 0x47, 0xe2, 0xdd, 0xac, 0x9d, 0x4f, 0xd4, 0xba, 0xef, 0x0a,
  0x9c, 0x43, 0x00, 0x75, 0xc7, 0x5e, 0xfe, 0x59, 0xb6, 0xd4, 0x3c, 0xcb,
  0xa2, 0x3d, 0x8e, 0xa1, 0xe5, 0x8b, 0xfc, 0x72, 0x55, 0xc5, 0x73, 0x12,
  0xa9, 0x1f, 0x96, 0xa4, 0x42, 0x28, 0x22, 0x7a, 0x7a, 0x93, 0x56, 0x99,
  0x36, 0xf0, 0x2a, 0xee, 0xec, 0xdd, 0x56, 0x33, 0x59, 0x8b, 0x64, 0x00,
  0x57, 0x1f, 0x98, 0xda, 0xa8, 0x6b, 0x32, 0x7a, 0x0c, 0x9c, 0x08, 0x92,
  0xc2, 0x23, 0xb0, 0xec, 0x69, 0xe3, 0xca, 0x94, 0xc4, 0xc3, 0x88, 0xc3,
  0xbe, 0xa4, 0x7e, 0xb1, 0x89, 0x6c, 0x41, 0x98, 0x09, 0xb8, 0x39, 0x77,
  0xce, 0x7d, 0x3c, 0x4b, 0xee, 0x98, 0xab, 0xd2, 0x6b, 0x81, 0x10, 0x22,
  0x19, 0x80, 0xf3, 0xd0, 0x79, 0x32, 0x13, 0xe2, 0x43, 0x32, 0xcf, 0xdf,
  0x14, 0xf3, 0x32, 0x9d, 0xd5, 0xd2, 0x9c, 0x5d, 0x22, 0xee, 0xb4, 0x59,
  0x8c, 0x66, 0x25, 0x47, 0x1b, 0xa4, 0x7d, 0xe0, 0xa4, 0xf9, 0x8c, 0x93,
  0x12, 0x2e, 0xb2, 0xf0, 0x0d, 0xe9, 0x5c, 0x6c, 0x78, 0x34, 0x4e, 0x27,
  0xe9, 0x41, 0x81, 0x47, 0x69, 0xf7, 0x69, 0x08, 0x2b, 0xa4, 0x6d, 0x14,
  0xbd, 0x39, 0x50, 0x2c, 0x4e, 0xd0, 0xa6, 0x32, 0x28, 0x76, 0x12, 0xf2,
  0x39, 0x72, 0xcf, 0x76, 0x32, 0xed, 0xe1, 0x0d, 0x66, 0xa4, 0xa2, 0x48,
  0x27, 0x3f, 0x02, 0xdb, 0xc3, 0xa4, 0xcc, 0x5c, 0xef, 0xe9, 0xb7, 0xe6,
  0x97, 0x9f, 0x67, 0x0c, 0x4d, 0x8f, 0x08, 0x56, 0x95, 0xbc, 0x78, 0x7f,
  0x76, 0xdc, 0x53, 0x43, 0x38, 0xa6, 0x33, 0xc0, 0x66, 0x6d, 0x9c, 0x65,
  0x04, 0x94, 0x55, 0x25, 0xa7, 0xe9, 0x65, 0xb6, 0xe1, 0x63, 0x93, 0xb5,
  0xc0, 0x09, 0xc5, 0x01, 0x11, 0xf3, 0x12, 0xf9, 0x2d, 0x05, 0xc0, 0xc4,
  0x5d, 0xdc, 0xd8, 0xaf, 0xfc, 0xbb, 0x98, 0xa7, 0xb2, 0x77, 0xab, 0x0a,
  0x11, 0x7f, 0xda, 0xf9, 0x48, 0x9b, 0x1c, 0xc5, 0x05, 0xe8, 0xa0, 0x4a,
  0x4a, 0xfb, 0x1f, 0xaa, 0x55, 0x4a, 0x97, 0xa0, 0xa1, 0x64, 0xe3, 0x0b,
  0xb8, 0xe8, 0x37, 0x74, 0x9a, 0xc3, 0x2c, 0x8c, 0xc2, 0xe9, 0x56, 0x20,
  0x72, 0xec, 0xbb, 0x93, 0x3a, 0xce, 0x7d, 0x8e, 0xb2, 0x70, 0xbc, 0x28,
  0x03, 0xd4, 0x6b, 0x4d, 0xc1, 0xe6, 0xa0, 0x0d, 0x12, 0xea, 0x39, 0x90,
  0x42, 0xc1, 0x10, 0x9f, 0xc8, 0x72, 0x4f, 0x8e, 0x65, 0x7e, 0x07, 0x12,
  0x2d, 0x6d, 0x24, 0xae, 0x14, 0xea, 0x79, 0x49, 0x98, 0x4b, 0x81, 0x52,
  0x18, 0x35, 0x02, 0xfd, 0x9e, 0x43, 0xb3, 0x17, 0xf4, 0xce, 0xa7, 0x65,
  0x31, 0xfc, 0xa9, 0x1f, 0x20, 0x84, 0x24, 0xa6, 0xab, 0x02, 0x79, 0x7c,
  0xf4, 0x7f, 0x0e, 0x3f, 0x65, 0x58, 0xaa, 0x4a, 0x6f, 0x6c, 0x35, 0xdd,
  0xf7, 0x8c, 0x85, 0x28, 0xe1, 0x22, 0x0b, 0xdf, 0x90, 0xce, 0xc5, 0x86,
  0x47, 0xe3, 0x74, 0x92, 0x1e, 0x14, 0x78, 0x94, 0x76, 0x9f, 0x86, 0xb0,
  0x42, 0xda, 0x46, 0xd1, 0x9b, 0x03, 0xc5, 0xe2, 0x04, 0x6d, 0x2a, 0x83,
  0x62, 0x27, 0x21, 0x9f, 0x23, 0xf7, 0x6c, 0x27, 0xd3, 0x1e, 0xde, 0x60,
  0x46, 0x2a, 0x8a, 0x74, 0xf2, 0x23, 0xb0, 0x3d, 0x4c, 0xca, 0xcc, 0xf5,
  0x9e, 0x7e, 0x6b, 0x7e, 0xf9, 0x79, 0xc6, 0xd0, 0xf4, 0x88, 0x60, 0x55,
  0xc9, 0x8b, 0xf7, 0x67, 0xc7, 0x3d, 0x35, 0x84, 0x63, 0x3a, 0x03, 0x6c,
  0xd6, 0xc6, 0x59, 0x46, 0x40, 0x59, 0x55, 0x72, 0x9a, 0x5e, 0x66, 0x1b,
  0x3e, 0x36, 0x59, 0x0b, 0x9c, 0x50, 0x1c, 0x10, 0x31, 0x2f, 0x91, 0xdf,
  0x52, 0x00, 0x4c, 0xdc, 0xc5, 0x8d, 0xfd, 0xca, 0xbf, 0x8b, 0x79, 0x2a,
  0x7b, 0xb7, 0xaa, 0x10, 0xf1, 0xa7, 0x9d, 0x8f, 0xb4, 0xc9, 0x51, 0x5c,
  0x8d, 0x61, 0x5d, 0x48, 0xa7, 0xd6, 0xca, 0x1c, 0x8a, 0x2d, 0x36, 0x9d,
  0xa3, 0xd9, 0x87, 0x75, 0x63, 0x61, 0x8d, 0xb3, 0x12, 0x0d, 0x22, 0x30,
  0xa5, 0xb4, 0xb0, 0x0e, 0xe7, 0xd6, 0xc9, 0x7e, 0x72, 0x14, 0x3d, 0x17,
  0x21, 0x7a, 0x39, 0x90, 0x0e, 0x36, 0x43, 0x43, 0x1d, 0x85, 0x14, 0x87,
  0x7b, 0xc7, 0xea, 0xd1, 0xde, 0x7f, 0x7a, 0x6d, 0x11, 0xbc, 0xc6, 0x06,
  0x3d, 0x60, 0xac, 0xde, 0x74, 0x1b, 0xaa, 0xdd, 0xa0, 0x23, 0x0c, 0x5a,
  0x2b, 0xb8, 0x32, 0x52, 0x11, 0x96, 0x51, 0xbf, 0xe2, 0xd0, 0x8b, 0x1c,
  0xbf, 0xe2, 0x7a, 0xc6, 0xe1, 0xeb, 0xdc, 0x08, 0x91, 0x3a, 0x97, 0x4e,
  0xd9, 0x46, 0x6f, 0xe4, 0x96, 0x3e, 0x7a, 0x11, 0xb9, 0xae, 0x75, 0x18,
  0x02, 0xc7, 0x4d, 0xa5, 0xd8, 0xc1, 0xbe, 0x62, 0x63, 0x3a, 0x86, 0x22,
  0x80, 0x0e, 0xaa, 0xa4, 0xb4, 0xff, 0xa1, 0x5a, 0xa5, 0x74, 0x09, 0x1a,
  0x4a, 0x36, 0xfe, 0x00, 0x17, 0xfd, 0x86, 0x4e, 0x73, 0x98, 0x85, 0x51,
  0x38, 0xdd, 0x0a, 0x44, 0x8e, 0x7d, 0x77, 0x52, 0xc7, 0xb9, 0xcf, 0x51,
  0x16, 0x8e, 0x17, 0x65, 0x80, 0x7a, 0xad, 0x29, 0xd8, 0x1c, 0xb4, 0x41,
  0x42, 0x3d, 0x07, 0x52, 0x28, 0x18, 0xe2, 0x13, 0x59, 0xee, 0xc9, 0xb1,
  0xcc, 0xef, 0x40, 0xa2, 0x31, 0xac, 0x0b, 0xe9, 0xd4, 0x5a, 0x99, 0x43,
  0xb1, 0xc5, 0xa6, 0x73, 0x34, 0xfb, 0xb0, 0x6e, 0x2c, 0xac, 0x71, 0x56,
  0xa2, 0x41, 0x04, 0xa6, 0x94, 0x16, 0xd6, 0xe1, 0xdc, 0x3a, 0xd9, 0x4f,
  0x8e, 0xa2, 0xe7, 0x22, 0x44, 0x2f, 0x07, 0xd2, 0xc1, 0x66, 0x68, 0xa8,
  0xa3, 0x90, 0xe2, 0x70, 0xef, 0x58, 0x3d, 0xda, 0xfb, 0x0f, 0xaf, 0x2d,
  0x82, 0xd7, 0xd8, 0xa0, 0x07, 0x8c, 0xd5, 0x9b, 0x6e, 0x43, 0xb5, 0x1b,
  0xfa, 0x52, 0x71, 0x14, 0x44, 0xde, 0x6a, 0x0b, 0xa9, 0x73, 0x56, 0x48,
  0x7b, 0x6b, 0x41, 0xdb, 0x17, 0xcc, 0x0b, 0xa4, 0x7e, 0x44, 0x76, 0xc7,
  0x82, 0xe5, 0x50, 0x5e, 0x4d, 0x9d, 0xd8, 0x9c, 0x71, 0xe9, 0x30, 0x13,
  0x18, 0x9b, 0xb6, 0xb7, 0x2f, 0x67, 0x83, 0x74, 0xe3, 0x84, 0x66, 0x52,
  0xb6, 0xc9, 0x07, 0x07, 0x57, 0x18, 0xe0, 0x8d, 0xeb, 0x35, 0xa7, 0x66,
  0x74, 0x84, 0x41, 0x6b, 0x05, 0x57, 0x46, 0x2a, 0xc2, 0x32, 0xea, 0x57,
  0x1c, 0x7a, 0x91, 0xe3, 0x57, 0x5c, 0xcf, 0x38, 0x7c, 0x9d, 0x1b, 0x21,
  0x52, 0xe7, 0xd2, 0x29, 0xdb, 0xe8, 0x8d, 0xdc, 0xd2, 0x47, 0x2f, 0x22,
  0xd7, 0xb5, 0x0e, 0x43, 0xe0, 0xb8, 0xa9, 0x14, 0x3b, 0xd8, 0x57, 0x6c,
  0xd8, 0x51, 0x67, 0x09, 0xda, 0xa0, 0x24, 0x2e, 0x70, 0xef, 0x5a, 0x0b,
  0x6b, 0xae, 0x34, 0x3a, 0x2e, 0xc7, 0x84, 0xe0, 0x41, 0x51, 0x0a, 0xec,
  0x49, 0x2c, 0xc6, 0x4e, 0x09, 0x3e, 0x78, 0xc4, 0x97, 0x83, 0x9c, 0xd2,
  0x91, 0xfc, 0x7e, 0xe8, 0x9a, 0x44, 0x6c, 0xdd, 0x65, 0x46, 0xc3, 0x76,
  0x59, 0x21, 0x64, 0x48, 0x45, 0x4a, 0x22, 0x13, 0xee, 0x7c, 0x58, 0xb7,
  0x8a, 0x35, 0xc8, 0x08, 0xf1, 0x42, 0x8f, 0xbc, 0xe9, 0x46, 0x0b, 0xa0,
  0x4c, 0xcc, 0x22, 0xbb, 0x05, 0xbc, 0x74, 0xff, 0x70, 0xa1, 0x92, 0xfd,
  0xc3, 0xcb, 0xb3, 0x77, 0x47, 0xef, 0xbe, 0x39, 0x00, 0xf8, 0x59, 0x56,
  0x4d, 0xd1, 0xa4, 0x37, 0xf9, 0xcb, 0x6a, 0x96, 0x4f, 0x99, 0x53, 0x48,
  0xff, 0xd3, 0x56, 0xb9, 0x48, 0x26, 0x0e, 0x56, 0xc3, 0x5c, 0x82, 0xea,
  0x10, 0x49, 0xf6, 0x45, 0xb1, 0x4b, 0x55, 0x5e, 0xae, 0xec, 0xd6, 0x4f,
  0x49, 0x15, 0xa1, 0x38, 0x01, 0xc5, 0x4f, 0xc1, 0x8f, 0x98, 0x68, 0xcd,
  0xe8, 0x50, 0x14, 0x5e, 0x1f, 0x1f, 0x27, 0x21, 0x4a, 0x2c, 0x67, 0x98,
  0x4c, 0xc7, 0x50, 0x44, 0x5f, 0x2a, 0x8e, 0x82, 0xc8, 0x5b, 0x6d, 0x21,
  0x75, 0xce, 0x0a, 0x69, 0x6f, 0x2d, 0x68, 0xfb, 0x82, 0x79, 0x81, 0xd4,
  0x8f, 0xc8, 0xee, 0x58, 0xb0, 0x1c, 0xca, 0xab, 0xa9, 0x13, 0x9b, 0x33,
  0x2e, 0x1d, 0x66, 0x02, 0x63, 0xd3, 0xf6, 0xf6, 0xe5, 0x6c, 0x90, 0x6e,
  0x9c, 0xd0, 0x4c, 0xca, 0x36, 0xf9, 0xe0, 0xe0, 0x0a, 0x03, 0xbc, 0x71,
  0xbd, 0xe6, 0xd4, 0x0c, 0x3b, 0xea, 0x2c, 0x41, 0x1b, 0x94, 0xc4, 0x05,
  0xee, 0x5d, 0x6b, 0x61, 0xcd, 0x95, 0x46, 0xc7, 0xe5, 0x98, 0x10, 0x3c,
  0x28, 0x4a, 0x81, 0x3d, 0x89, 0xc5, 0xd8, 0x29, 0xc1, 0x07, 0x8f, 0xf8,
  0x72, 0x90, 0x53, 0x3a, 0x92, 0xdf, 0x0d, 0x5d, 0x93, 0x88, 0xad, 0xbb,
  0xcc, 0x68, 0xd8, 0x2e, 0x2b, 0x84, 0x0c, 0xa9, 0x48, 0x49, 0x64, 0xc2,
  0x9d, 0x0f, 0xeb, 0x56, 0xb1, 0x06, 0x19, 0x21, 0x5e, 0xe8, 0x91, 0x37,
  0xdd, 0x68, 0x01, 0x94, 0x89, 0x59, 0x64, 0xb7, 0x80, 0x97, 0xee, 0x1f,
  0x2e, 0x54, 0xb2, 0xbf, 0x7f, 0x79, 0xf6, 0xee, 0xe8, 0xdd, 0xd7, 0x07,
  0x0a, 0x7d, 0x71, 0x05, 0x2c, 0x0d, 0x64, 0x53, 0x52, 0x11, 0xee, 0x33,
  0xc2, 0x1f, 0xdc, 0xa6, 0xc5, 0xf5, 0x8c, 0xe9, 0xfa, 0x43, 0x98, 0xea,
  0x49, 0x79, 0xc8, 0x94, 0x3d, 0x48, 0x27, 0x9c, 0x57, 0x33, 0xb2, 0x85,
  0x0c, 0x93, 0x2c, 0x2f, 0x1a, 0xa8, 0x47, 0x2d, 0x49, 0xda, 0xee, 0x79,
  0xb2, 0x2e, 0x86, 0x70, 0xc5, 0x56, 0x4e, 0x0b, 0x4d, 0x84, 0x43, 0x96,
  0x94, 0xd3, 0x6a, 0xe8, 0x91, 0xf5, 0x42, 0xea, 0x93, 0x13, 0x8d, 0x9e,
  0xcd, 0xb2, 0xd4, 0x36, 0xfe, 0xad, 0xc1, 0x2d, 0x43, 0x76, 0x71, 0x93,
  0x55, 0x62, 0x7c, 0xda, 0xd2, 0x5a, 0xc3, 0xec, 0x46, 0xc9, 0xb8, 0x34,
  0xcf, 0x87, 0x1a, 0x96, 0xed, 0x26, 0xd7, 0x6a, 0x4c, 0xcd, 0x39, 0xb6,
  0x36, 0xf1, 0x8a, 0x1a, 0xed, 0x50, 0x50, 0xae, 0xbd, 0xde, 0x48, 0x2f,
  0x5b, 0xd0, 0xff, 0x24, 0xb3, 0x0a, 0xc5, 0x9d, 0xc6, 0x7e, 0x40, 0x21,
  0x1b, 0x43, 0xc3, 0x4e, 0x37, 0xa8, 0x49, 0x18, 0x3a, 0xec, 0x7a, 0x23,
  0xdd, 0xd3, 0x27, 0xd2, 0xcf, 0x63, 0xef, 0x2e, 0x38, 0xda, 0x7e, 0xcb,
  0x00, 0x3f, 0xcb, 0xaa, 0x29, 0x9a, 0xf4, 0x26, 0x7f, 0x59, 0xcd, 0xf2,
  0x29, 0x73, 0x0a, 0xe9, 0x7f, 0xda, 0x2a, 0x17, 0xc9, 0xc4, 0xc1, 0x6a,
  0x98, 0x4b, 0x50, 0x1d, 0x22, 0xc9, 0xbe, 0x28, 0x76, 0xa9, 0xca, 0xcb,
  0x95, 0xdd, 0xfa, 0x29, 0xa9, 0x22, 0x14, 0x27, 0xa0, 0xf8, 0x29, 0xf8,
  0x11, 0x13, 0xad, 0x19, 0x1d, 0x8a, 0xc2, 0xeb, 0xe3, 0xe3, 0x24, 0x44,
  0x89, 0xe5, 0x0c, 0x53, 0xa1, 0x2f, 0xae, 0x80, 0xa5, 0x81, 0x6c, 0x4a,
  0x2a, 0xc2, 0x7d, 0x46, 0xf8, 0x83, 0xdb, 0xb4, 0xb8, 0x9e, 0x31, 0x5d,
  0xbf, 0x0f, 0x53, 0x3d, 0x29, 0x0f, 0x99, 0xb2, 0x07, 0xe9, 0x84, 0xf3,
  0x6a, 0x46, 0xb6, 0x90, 0x61, 0x92, 0xe5, 0x45, 0x03, 0xf5, 0xa8, 0x25,
  0x49, 0xdb, 0x3d, 0x4f, 0xd6, 0xc5, 0x10, 0xae, 0xd8, 0xca, 0x69, 0xa1,
  0x89, 0x70, 0xc8, 0x92, 0x72, 0x5a, 0x0d, 0x3d, 0xb2, 0x5e, 0x48, 0x7d,
  0x72, 0xa2, 0xd1, 0xb3, 0x59, 0x96, 0xda, 0xc6, 0xbf, 0x35, 0xb8, 0x65,
  0x6b, 0x6b, 0x93, 0x8a, 0xdd, 0xe9, 0x79, 0x4e, 0xa5, 0x0b, 0x92, 0x8d,
  0xa6, 0x72, 0xe9, 0x5a, 0x06, 0x0d, 0x33, 0x88, 0x90, 0x9f, 0x30, 0xc2,
  0x97, 0x3c, 0xe4, 0x17, 0x8f, 0xfb, 0x2f, 0x8b, 0xb8, 0x19, 0x38, 0xe7,
  0x42, 0x4e, 0x38, 0x37, 0x4d, 0x50, 0xbc, 0x76, 0x31, 0xda, 0x8e, 0x26,
  0x4f, 0xf1, 0x1c, 0x44, 0x22, 0xd5, 0xe9, 0xb5, 0xcb, 0x08, 0xeb, 0x65,
  0x7c, 0xda, 0x41, 0xac, 0x2b, 0xa3, 0xe9, 0x40, 0xad, 0x57, 0x49, 0x87,
  0x4a, 0x13, 0x9b, 0xd8, 0xd3, 0x24, 0x7e, 0x2c, 0xb3, 0x55, 0xa8, 0x1f,
  0xc8, 0x2e, 0x6e, 0xb2, 0x4a, 0x8c, 0x4f, 0x5b, 0x5a, 0x6b, 0x98, 0xdd,
  0x28, 0x19, 0x97, 0xe6, 0xf9, 0x50, 0xc3, 0xb2, 0xdd, 0xe4, 0x5a, 0x8d,
  0xa9, 0x39, 0xc7, 0xd6, 0x26, 0x5e, 0x51, 0xa3, 0x1d, 0x0a, 0xca, 0xb5,
  0xd7, 0x1b, 0xe9, 0x65, 0x0b, 0xfa, 0x9f, 0x64, 0x56, 0xa1, 0xb8, 0xd3,
  0xd8, 0x0f, 0x28, 0x64, 0x63, 0x68, 0xd8, 0xe9, 0x06, 0x35, 0x09, 0x43,
  0x87, 0x5d, 0x6f, 0xa4, 0x7b, 0xfa, 0x44, 0xfa, 0x79, 0xec, 0xdd, 0x05,
  0x47, 0xdb, 0x6f, 0x79, 0x6d, 0x6d, 0x52, 0xb1, 0x3b, 0x3d, 0xcf, 0xa9,
  0x74, 0x41, 0xb2, 0xd1, 0x54, 0x2e, 0x5d, 0xcb, 0xa0, 0x61, 0x06, 0x11,
  0xf2, 0x13, 0x46, 0xf8, 0x92, 0x87, 0xfc, 0xe2, 0x71, 0xff, 0x65, 0x11,
  0x0e, 0x27, 0x65, 0x50, 0x12, 0xad, 0xea, 0x65, 0xc2, 0x12, 0xb9, 0xc9,
  0x8b, 0xeb, 0x92, 0x7e, 0x23, 0xd1, 0xa6, 0x48, 0x0e, 0x8b, 0x03, 0x65,
  0x8c, 0x6d, 0x84, 0xbf, 0xab, 0xea, 0xa0, 0xd1, 0x32, 0x03, 0xb3, 0x16,
  0x37, 0x03, 0xe7, 0x5c, 0xc8, 0x09, 0xe7, 0xa6, 0x09, 0x8a, 0xd7, 0x2e,
  0x46, 0xdb, 0xd1, 0xe4, 0x29, 0x9e, 0x83, 0x48, 0xa4, 0x3a, 0xbd, 0x76,
  0xae, 0x97, 0xf3, 0xfb, 0x8b, 0xb8, 0x96, 0x22, 0x5d, 0x52, 0xe0, 0xcb,
  0x04, 0xe2, 0x1d, 0x24, 0xda, 0x2e, 0xd9, 0xbc, 0x38, 0xaf, 0x33, 0x69,
  0xe1, 0xca, 0x75, 0x72, 0x2a, 0x70, 0x44, 0xde, 0xe4, 0xd6, 0xf7, 0xd3,
  0x2f, 0x49, 0x6c, 0xef, 0x36, 0xbb, 0xd7, 0xce, 0x7e, 0x45, 0x80, 0x99,
  0x93, 0x35, 0x71, 0x83, 0xa7, 0x57, 0x65, 0x29, 0xc9, 0x5d, 0x7d, 0xcc,
  0x36, 0x21, 0x95, 0x86, 0x60, 0x22, 0x7a, 0xf4, 0x07, 0x8b, 0xa9, 0xe5,
  0x62, 0x90, 0x41, 0x06, 0xb0, 0x8f, 0xbf, 0xd7, 0x02, 0xbe, 0x6c, 0xcb,
  0x36, 0x9e, 0x8f, 0x15, 0xce, 0xc2, 0x5c, 0x43, 0x50, 0x40, 0xe2, 0x02,
  0x2c, 0xba, 0xe3, 0xdb, 0x23, 0xa9, 0x97, 0xfe, 0xa6, 0x44, 0x85, 0x1d,
  0x67, 0xa8, 0xb9, 0xbc, 0x45, 0xa2, 0x1a, 0x32, 0x9b, 0x8a, 0x76, 0x40,
  0x83, 0x66, 0x9a, 0x37, 0xc4, 0x40, 0x7e, 0xbf, 0xbf, 0xdb, 0xc7, 0xe4,
  0x31, 0x90, 0x16, 0x7e, 0xe2, 0x36, 0xd6, 0xd6, 0xfe, 0x22, 0x31, 0xe8,
  0xea, 0x06, 0x20, 0x43, 0x56, 0x4b, 0xf8, 0xe9, 0x86, 0xa0, 0x97, 0xb4,
  0xee, 0xdb, 0xff, 0xb8, 0x55, 0xfc, 0x6b, 0x1b, 0xbb, 0xf5, 0xf4, 0x75,
  0x73, 0xfc, 0xeb, 0xcc, 0x3b, 0x63, 0x0c, 0x14, 0xcb, 0x40, 0x53, 0x5e,
  0xa2, 0x7e, 0x12, 0x4f, 0x69, 0x77, 0x3a, 0x03, 0xd9, 0xf5, 0xd4, 0xc0,
  0x4b, 0xf1, 0x22, 0xf3, 0x90, 0x25, 0x1b, 0x9b, 0x76, 0xb1, 0x4c, 0x22,
  0x2c, 0x6b, 0xa0, 0x37, 0x40, 0xf3, 0x58, 0x6c, 0x12, 0x2d, 0x7f, 0x8d,
  0x34, 0xe5, 0x32, 0x84, 0x24, 0x11, 0x46, 0xca, 0xc6, 0x78, 0x2a, 0xe9,
  0x9c, 0xb4, 0x21, 0xf8, 0x52, 0x5b, 0x30, 0x52, 0x5a, 0xda, 0x30, 0xea,
  0xed, 0x8f, 0x36, 0x24, 0x10, 0x8c, 0x33, 0x1f, 0x65, 0x7d, 0x83, 0xdf,
  0xde, 0x48, 0xb6, 0xc0, 0x55, 0xb7, 0xad, 0xf2, 0x1a, 0x16, 0x05, 0x6b,
  0xdf, 0x0f, 0xb6, 0x61, 0x52, 0x96, 0x90, 0xdd, 0xec, 0x5a, 0xe8, 0xaf,
  0x19, 0x61, 0xbd, 0x8c, 0x4f, 0x3b, 0x88, 0x75, 0x65, 0x34, 0x1d, 0xa8,
  0xf5, 0x2a, 0xe9, 0x50, 0x69, 0x62, 0x13, 0x7b, 0x9a, 0xc4, 0x8f, 0x65,
  0xb6, 0x0a, 0xf5, 0xc3, 0xe1, 0xa4, 0x0c, 0x4a, 0xa2, 0x55, 0xbd, 0x4c,
  0x58, 0x22, 0x37, 0x79, 0x71, 0x5d, 0xd2, 0x6f, 0x24, 0xda, 0x14, 0xc9,
  0x61, 0x71, 0xa0, 0x8c, 0xb1, 0x8d, 0xf0, 0x77, 0x55, 0x1d, 0x34, 0x5a,
  0x66, 0x60, 0xd6, 0xc2, 0xf5, 0x72, 0x7e, 0x7f, 0x11, 0xd7, 0x52, 0xa4,
  0x4b, 0x0a, 0x7c, 0x99, 0x40, 0xbc, 0x83, 0x44, 0xdb, 0x25, 0x9b, 0x17,
  0xe7, 0x75, 0x26, 0x2d, 0x5c, 0xb9, 0x4e, 0x4e, 0x05, 0x8e, 0xc8, 0x9b,
  0xdc, 0xfa, 0x7e, 0xfa, 0x25, 0x89, 0xed, 0xdd, 0x66, 0xf7, 0xda, 0xd9,
  0xaf, 0x08, 0x30, 0x73, 0xb2, 0x26, 0x6e, 0xf0, 0xf4, 0xaa, 0x2c, 0x25,
  0xb9, 0xab, 0x8f, 0xd9, 0x26, 0xa4, 0xd2, 0x10, 0x4c, 0x44, 0x8f, 0xfe,
  0x60, 0x31, 0xb5, 0x5c, 0x0c, 0x32, 0xc8, 0x00, 0xf6, 0xf1, 0xf7, 0x5a,
  0xc0, 0x97, 0x6d, 0xd9, 0xc6, 0xf3, 0xb1, 0xc2, 0x59, 0x98, 0x6b, 0x08,
  0x0a, 0x48, 0x5c, 0x80, 0x45, 0x77, 0x7c, 0x7b, 0x24, 0xf5, 0xd2, 0xdf,
  0x94, 0xa8, 0xb0, 0xe3, 0x0c, 0x35, 0x97, 0xb7, 0x48, 0x54, 0x43, 0x66,
  0x53, 0xd1, 0x0e, 0x68, 0xd0, 0x4c, 0xf3, 0x86, 0x18, 0xc8, 0xef, 0xf6,
  0x77, 0xfb, 0x98, 0x3c, 0x06, 0xd2, 0xc2, 0x4f, 0xdc, 0xc6, 0xda, 0xda,
  0x5f, 0x24, 0x06, 0x5d, 0xdd, 0x00, 0x64, 0xc8, 0x6a, 0x09, 0x3f, 0xdd,
  0x10, 0xf4, 0x92, 0xd6, 0x7d, 0xfb, 0x1f, 0xb7, 0x8a, 0x7f, 0x69, 0x63,
  0xb7, 0x9e, 0xbe, 0x6e, 0x8e, 0x7f, 0x9d, 0x79, 0x67, 0x8c, 0x81, 0x62,
  0x19, 0x68, 0xca, 0x4b, 0xd4, 0x4f, 0xe2, 0x29, 0xed, 0x4e, 0x67, 0x20,
  0xbb, 0x9e, 0x1a, 0x78, 0x29, 0x5e, 0x64, 0x1e, 0xb2, 0x64, 0x63, 0xd3,
  0x2e, 0x96, 0x49, 0x84, 0x65, 0x0d, 0xf4, 0x06, 0x68, 0x1e, 0x8b, 0x4d,
  0xc6, 0xca, 0xab, 0x8c, 0xfc, 0x5f, 0xcd, 0xd3, 0x6a, 0x4e, 0x67, 0x7c,
  0xb1, 0x9a, 0xc7, 0xcc, 0x1c, 0xdc, 0x6d, 0x09, 0x0e, 0xe5, 0x75, 0xbd,
  0x12, 0x23, 0xd0, 0xa2, 0xae, 0x58, 0x18, 0xbe, 0x64, 0x6e, 0xe6, 0x43,
  0xa2, 0xe5, 0xaf, 0x91, 0xa6, 0x5c, 0x86, 0x90, 0x24, 0xc2, 0x48, 0xd9,
  0x18, 0x4f, 0x25, 0x9d, 0x93, 0x36, 0x04, 0x5f, 0x6a, 0x0b, 0x46, 0x4a,
  0x4b, 0x1b, 0x46, 0xbd, 0xfd, 0xd1, 0x86, 0x04, 0x82, 0x71, 0xe6, 0xa3,
  0xac, 0x6f, 0xf0, 0xdb, 0x1b, 0xc9, 0x16, 0xb8, 0xea, 0xb6, 0x55, 0x5e,
  0xc3, 0xa2, 0x60, 0xed, 0xfb, 0xc1, 0x36, 0x4c, 0xca, 0x12, 0xb2, 0x9b,
  0x9f, 0xae, 0xe7, 0x48, 0x3d, 0xe9, 0x55, 0x4f, 0xc8, 0x3b, 0x2c, 0x8a,
  0xaf, 0x6d, 0x82, 0xc7, 0x76, 0x94, 0x9c, 0xce, 0x25, 0x26, 0xa5, 0x4d,
  0xbf, 0xb0, 0x09, 0x03, 0x92, 0x55, 0x9d, 0xe1, 0x36, 0x4e, 0x4e, 0xcf,
  0x8f, 0x4e, 0xde, 0x8d, 0x93, 0x7f, 0xdf, 0x58, 0x5b, 0xff, 0xd5, 0xc6,
  0xec, 0xfd, 0x71, 0xe0, 0xce, 0x24, 0x79, 0x21, 0x7e, 0x86, 0x3e, 0xdb,
  0xd8, 0x53, 0xe2, 0xa7, 0x46, 0x7a, 0x1b, 0xfe, 0xaa, 0x6f, 0x0a, 0xde,
  0x99, 0x9c, 0x56, 0x07, 0xa2, 0x2d, 0xd0, 0x96, 0x2d, 0xc6, 0x5d, 0xd7,
  0x88, 0x66, 0x66, 0xef, 0x6c, 0x96, 0xce, 0xf0, 0x71, 0x0e, 0x2c, 0x9c,
  0xaf, 0x95, 0xeb, 0x29, 0x2f, 0xd0, 0x16, 0xdf, 0x90, 0x5a, 0xca, 0x16,
  0xf4, 0x96, 0x34, 0x2e, 0x15, 0x45, 0xab, 0x8e, 0xa4, 0x10, 0x7e, 0x73,
  0x78, 0x0e, 0x27, 0x0d, 0x95, 0x7e, 0xba, 0x09, 0x92, 0xab, 0x4b, 0x14,
  0x9f, 0xd4, 0x2a, 0x67, 0x5a, 0xf1, 0x49, 0x5d, 0xcf, 0x6f, 0x97, 0xf3,
  0xb4, 0x88, 0xd6, 0xb8, 0x19, 0x8d, 0x16, 0x8d, 0xdc, 0x4b, 0x87, 0x87,
  0xaa, 0xbe, 0x13, 0xaf, 0x65, 0x06, 0x63, 0x15, 0x9d, 0xbe, 0x3f, 0x17,
  0x5d, 0x0b, 0xfd, 0xd5, 0x58, 0x79, 0x95, 0x91, 0xff, 0xab, 0x79, 0x5a,
  0xcd, 0xe9, 0x8c, 0x2f, 0x56, 0xf3, 0x98, 0x99, 0x83, 0xbb, 0x2d, 0xc1,
  0xa1, 0xbc, 0xae, 0x57, 0x62, 0x04, 0x5a, 0xd4, 0x15, 0x0b, 0xc3, 0x97,
  0xcc, 0xcd, 0x7c, 0xe8, 0xd3, 0xf5, 0x1c, 0xa9, 0x27, 0xbd, 0xea, 0x09,
  0x79, 0x87, 0x45, 0xf1, 0xb5, 0x4d, 0xf0, 0xd8, 0x8e, 0x92, 0xd3, 0xb9,
  0xc4, 0xa4, 0xb4, 0xe9, 0x17, 0x36, 0x61, 0x40, 0xb2, 0xaa, 0x33, 0xdc,
  0xc6, 0xc9, 0xe9, 0xf9, 0xd1, 0xc9, 0xbb, 0x71, 0xf2, 0x6f, 0x1b, 0x6b,
  0xeb, 0xbf, 0xda, 0x98, 0xbd, 0x3f, 0x0c, 0xdc, 0x99, 0x24, 0x2f, 0xc4,
  0xcf, 0xd0, 0x67, 0x1b, 0x7b, 0x4a, 0xfc, 0xd4, 0x48, 0x6f, 0xc3, 0x5f,
  0xf5, 0x4d, 0xc1, 0x3b, 0x93, 0xd3, 0xea, 0x40, 0xb4, 0x05, 0xda, 0xb2,
  0xc5, 0xb8, 0xeb, 0x1a, 0xd1, 0xcc, 0xec, 0x9d, 0xcd, 0xd2, 0x19, 0x3e,
  0xce, 0x81, 0x85, 0xf3, 0xb5, 0x72, 0x3d, 0xe5, 0x05, 0xda, 0xe2, 0x1b,
  0x52, 0x4b, 0xd9, 0x82, 0xde, 0x92, 0xc6, 0xa5, 0xa2, 0x68, 0xd5, 0x91,
  0x14, 0xc2, 0xaf, 0x0f, 0xcf, 0xe1, 0xa4, 0xa1, 0xd2, 0x4f, 0x37, 0x41,
  0x3f, 0xd5, 0xeb, 0xc3, 0xe3, 0xc3, 0xf3, 0xc3, 0xae, 0xe5, 0x3e, 0x61,
  0x84, 0x47, 0xaa, 0x85, 0x69, 0xb2, 0xe9, 0x55, 0x51, 0xce, 0xcb, 0xcb,
  0x5c, 0x9a, 0x59, 0x26, 0x3f, 0x64, 0x93, 0xd7, 0x2f, 0xbf, 0x87, 0x3e,
  0x01, 0x9f, 0xd3, 0xe9, 0xd9, 0xc9, 0xe9, 0x9b, 0xa3, 0x77, 0xaf, 0x07,
  0xc9, 0xab, 0x93, 0xd3, 0x3f, 0x0d, 0x92, 0xb7, 0x27, 0xdf, 0x1f, 0x46,
  0x72, 0xa0, 0x81, 0xbc, 0x1e, 0x50, 0x8c, 0x6d, 0x2c, 0xe7, 0x0c, 0xef,
  0x82, 0x43, 0x16, 0x9e, 0x10, 0x79, 0x49, 0x59, 0x23, 0x68, 0xba, 0xcc,
  0x77, 0xcd, 0x6c, 0x9d, 0x91, 0xa1, 0xdf, 0x1e, 0xbe, 0x7c, 0x3d, 0x08,
  0xb0, 0xb1, 0xd1, 0xa5, 0xc3, 0x7c, 0x0c, 0xeb, 0xb3, 0x8b, 0x26, 0x44,
  0x65, 0xb6, 0x3e, 0x48, 0x43, 0xe0, 0x20, 0x17, 0xdf, 0x58, 0x43, 0xb0,
  0x54, 0xba, 0x3e, 0xeb, 0xcb, 0x9c, 0x10, 0x98, 0xf7, 0xde, 0xf6, 0xb1,
  0x5e, 0x47, 0x5f, 0x28, 0x6b, 0xbe, 0x9a, 0x2d, 0x08, 0x46, 0x94, 0x77,
  0xaf, 0x55, 0x5a, 0xcc, 0x21, 0x38, 0xbb, 0xba, 0x07, 0x46, 0x67, 0xd0,
  0xaa, 0x9f, 0x27, 0x7e, 0xc4, 0xae, 0xc7, 0x54, 0xfa, 0xef, 0x51, 0x3f,
  0x1c, 0xe4, 0xfe, 0x8c, 0x19, 0x3f, 0x5a, 0xa0, 0x53, 0xd7, 0x6b, 0xd8,
  0x82, 0xd1, 0x2d, 0x58, 0x46, 0xd8, 0x3c, 0xdd, 0xa0, 0x81, 0xb6, 0x22,
  0xf9, 0x91, 0x7f, 0x2c, 0x69, 0x3a, 0x91, 0xcc, 0xee, 0xd5, 0x85, 0x21,
  0xcb, 0x8c, 0x73, 0xaa, 0xf8, 0x98, 0xac, 0x5b, 0x20, 0x19, 0x1e, 0xa9,
  0x72, 0x75, 0x89, 0xe2, 0x93, 0x5a, 0xe5, 0x4c, 0x2b, 0x3e, 0xa9, 0xeb,
  0xf9, 0xed, 0x72, 0x9e, 0x16, 0xd1, 0x1a, 0x37, 0xa3, 0xd1, 0xa2, 0x91,
  0x7b, 0xe9, 0xf0, 0x50, 0xd5, 0x77, 0xe2, 0xb5, 0xcc, 0x60, 0xac, 0xa2,
  0xd3, 0xf7, 0xe7, 0xe2, 0xa7, 0x7a, 0x7d, 0x78, 0x7c, 0x78, 0x7e, 0xd8,
  0xb5, 0xdc, 0x27, 0x8c, 0xf0, 0x48, 0xb5, 0x30, 0x4d, 0x36, 0xbd, 0x2a,
  0xca, 0x79, 0x79, 0x99, 0x4b, 0x33, 0xcb, 0xe4, 0xfb, 0x6c, 0xf2, 0xfa,
  0xe5, 0x77, 0xd0, 0x27, 0xe0, 0x73, 0x3a, 0x3d, 0x3b, 0x39, 0x7d, 0x73,
  0xf4, 0xee, 0xf5, 0x20, 0x79, 0x75, 0x72, 0xfa, 0xa7, 0x41, 0xf2, 0xf6,
  0xe4, 0xbb, 0xc3, 0x48, 0x0e, 0x34, 0x90, 0xd7, 0x03, 0x8a, 0xb1, 0x8d,
  0xe5, 0x9c, 0xe1, 0x5d, 0x70, 0xc8, 0xc2, 0x13, 0x22, 0x2f, 0x29, 0x6b,
  0x04, 0x4d, 0x97, 0xf9, 0xae, 0x99, 0xad, 0x33, 0x32, 0xf4, 0x9b, 0xc3,
  0x97, 0xaf, 0x07, 0x01, 0x36, 0x36, 0xba, 0x74, 0x98, 0x8f, 0x61, 0x7d,
  0x76, 0xd1, 0x84, 0xa8, 0xcc, 0xd6, 0x07, 0x69, 0x08, 0x1c, 0xe4, 0xe2,
  0x1b, 0x6b, 0x08, 0x96, 0x4a, 0xd7, 0x67, 0x7d, 0x99, 0x13, 0x02, 0xf3,
  0xde, 0xdb, 0x3e, 0xd6, 0xeb, 0xe8, 0x0b, 0x65, 0xcd, 0x57, 0xb3, 0x05,
  0xc1, 0x88, 0xf2, 0xee, 0xb5, 0x4a, 0x8b, 0x39, 0x04, 0x67, 0x57, 0xf7,
  0xc0, 0xe8, 0x0c, 0x5a, 0xf5, 0xf3, 0xc4, 0x8f, 0xd8, 0xf5, 0x98, 0x4a,
  0x53, 0x62, 0x9d, 0x82, 0xa5, 0x37, 0x46, 0x1d, 0x33, 0x0c, 0xa0, 0xa4,
  0x3e, 0xab, 0x36, 0x9b, 0xf0, 0x3d, 0x24, 0x58, 0x67, 0x44, 0xdf, 0xd7,
  0xff, 0x3d, 0xea, 0x87, 0x83, 0xdc, 0x9f, 0x31, 0xe3, 0x47, 0x0b, 0x74,
  0x23, 0x56, 0x88, 0x1f, 0xf1, 0xe0, 0xf8, 0x9b, 0x42, 0x75, 0x43, 0x81,
  0x2f, 0xcb, 0x08, 0xd8, 0x40, 0xb8, 0xd0, 0x93, 0x86, 0x95, 0x14, 0xe2,
  0x11, 0x4d, 0x10, 0x7a, 0x1b, 0xb2, 0x2d, 0xed, 0xa7, 0x05, 0x2b, 0xf7,
  0xea, 0x7a, 0x0d, 0x5b, 0x30, 0xba, 0x05, 0xcb, 0x08, 0x9b, 0xa7, 0x1b,
  0x34, 0xd0, 0x56, 0x24, 0x3f, 0xf0, 0x8f, 0x25, 0x4d, 0x27, 0x92, 0xd9,
  0x14, 0xdd, 0x54, 0xe6, 0x10, 0x6f, 0x77, 0xee, 0xfa, 0x21, 0xfa, 0xbe,
  0xbc, 0x47, 0xbb, 0xb7, 0xce, 0xc7, 0x0e, 0x6d, 0xa2, 0x4e, 0x86, 0x02,
  0x53, 0x4d, 0xd5, 0x7d, 0xc1, 0xd6, 0x6d, 0xbd, 0xe9, 0x61, 0x8c, 0xbe,
  0xd7, 0xd6, 0x56, 0xb9, 0x5b, 0x16, 0x75, 0x7c, 0x64, 0xae, 0x43, 0x04,
  0x2f, 0x66, 0x56, 0x52, 0x53, 0x5c, 0x4a, 0x47, 0x20, 0xbd, 0x8a, 0x76,
  0xdf, 0x8c, 0x15, 0x7e, 0x18, 0x4d, 0xa2, 0xa3, 0x5f, 0xa6, 0xee, 0xd1,
  0xf7, 0x7c, 0x3a, 0x38, 0xb3, 0xb3, 0xc3, 0xf3, 0xb3, 0x51, 0xb2, 0xe5,
  0x03, 0xa1, 0x3e, 0x1d, 0xed, 0x86, 0x41, 0x1b, 0x34, 0xa8, 0x8e, 0x7e,
  0x95, 0x3a, 0x57, 0xf7, 0x7c, 0x95, 0x78, 0x03, 0xbe, 0x1b, 0x26, 0x1a,
  0x7b, 0xf0, 0x47, 0xbb, 0xb1, 0xef, 0xf9, 0x4d, 0xb0, 0x5b, 0xdf, 0xc3,
  0x2f, 0xd6, 0xac, 0xf2, 0xdb, 0xc3, 0xe3, 0x48, 0xdb, 0x98, 0xef, 0xcf,
  0xde, 0xfc, 0xa9, 0xbd, 0xca, 0x47, 0x8f, 0x23, 0x5f, 0xfd, 0x2d, 0x1d,
  0xea, 0x59, 0x5d, 0xce, 0x8d, 0xc2, 0x42, 0x65, 0x1e, 0x54, 0xe5, 0x71,
  0x60, 0x44, 0x00, 0x92, 0xd1, 0xff, 0x3c, 0x90, 0xbf, 0xfc, 0x3c, 0x1a,
  0x8d, 0xfe, 0x18, 0x62, 0x79, 0x93, 0x8f, 0xc6, 0x2e, 0x57, 0x9e, 0xed,
  0x5a, 0xe0, 0x54, 0x55, 0x43, 0x65, 0x44, 0x88, 0x5a, 0x2c, 0xd3, 0xbc,
  0xa2, 0x76, 0x33, 0x51, 0x81, 0x8b, 0x25, 0xb9, 0x52, 0x30, 0xab, 0xcd,
  0x09, 0x4c, 0x16, 0x5f, 0xd7, 0xad, 0x7a, 0x5b, 0xea, 0xae, 0xbd, 0x8e,
  0xde, 0xb3, 0xc0, 0x11, 0xc2, 0x2d, 0x3f, 0xf0, 0xd9, 0x0a, 0xfe, 0x59,
  0xb6, 0x75, 0x9c, 0xac, 0x2d, 0x54, 0x76, 0xc8, 0xea, 0x67, 0x76, 0xfa,
  0x51, 0xef, 0x85, 0x14, 0x52, 0xbe, 0x92, 0x90, 0x3a, 0x39, 0x92, 0x53,
  0x12, 0x2b, 0xd4, 0x12, 0x35, 0x6b, 0xa6, 0x3b, 0x58, 0x67, 0xdd, 0xd2,
  0x00, 0xad, 0x0a, 0x17, 0x38, 0x91, 0xfc, 0x84, 0x47, 0x2a, 0xb1, 0xe5,
  0xe4, 0x16, 0xaf, 0x66, 0xc1, 0x55, 0xf9, 0x7a, 0x9a, 0x3a, 0xeb, 0x07,
  0x21, 0x37, 0x6b, 0x35, 0xdb, 0xf1, 0x1b, 0x43, 0x68, 0x17, 0x85, 0x80,
  0x1d, 0x7a, 0xa5, 0x6c, 0xa1, 0xda, 0x4f, 0xdc, 0x59, 0x29, 0x09, 0x89,
  0xbd, 0xba, 0x30, 0x64, 0x99, 0x71, 0x4e, 0x15, 0x1f, 0x93, 0x75, 0x0b,
  0x24, 0xc3, 0x23, 0x75, 0x4a, 0xac, 0x53, 0xb0, 0xf4, 0xc6, 0xa8, 0x63,
  0x86, 0x01, 0x94, 0xd4, 0x67, 0xd5, 0x66, 0x13, 0xbe, 0x87, 0x04, 0xeb,
  0x8c, 0xe8, 0xfb, 0x7a, 0xc4, 0x0a, 0xf1, 0x23, 0x1e, 0x1c, 0x7f, 0x53,
  0xa8, 0x6e, 0x28, 0xf0, 0x65, 0x19, 0x01, 0x1b, 0x08, 0x17, 0x7a, 0xd2,
  0xb0, 0x92, 0x42, 0x3c, 0xa2, 0x09, 0x42, 0x6f, 0x43, 0xb6, 0xa5, 0xfd,
  0xb4, 0x60, 0xe5, 0x9e, 0xa2, 0x9b, 0xca, 0x1c, 0xe2, 0xed, 0xce, 0x5d,
  0x3f, 0x44, 0xdf, 0x97, 0xf7, 0x68, 0xf7, 0xd6, 0xf9, 0xd8, 0xa1, 0x4d,
  0xd4, 0xc9, 0x50, 0x60, 0xaa, 0xa9, 0xba, 0x2f, 0xd8, 0xba, 0xad, 0x37,
  0x3d, 0x8c, 0xd1, 0xf7, 0xda, 0xda, 0x2a, 0x77, 0xcb, 0xa2, 0x8e, 0x8f,
  0xcc, 0x75, 0x88, 0xe0, 0xc5, 0xcc, 0x4a, 0x6a, 0x8a, 0x4b, 0xe9, 0x08,
  0xa4, 0x57, 0xd1, 0xee, 0x9b, 0xb1, 0xc2, 0x0f, 0xa3, 0x49, 0x74, 0xf4,
  0xcb, 0xd4, 0x3d, 0xfa, 0x9e, 0x4f, 0x07, 0x67, 0x76, 0x76, 0x78, 0x7e,
  0x36, 0x4a, 0xb6, 0x7c, 0x20, 0xd4, 0xa7, 0xa3, 0xdd, 0x30, 0x68, 0x83,
  0x06, 0xd5, 0xd1, 0xaf, 0x52, 0xe7, 0xea, 0x9e, 0xaf, 0x12, 0x6f, 0xc0,
  0x77, 0xc3, 0x44, 0x63, 0x0f, 0xfe, 0x68, 0x37, 0xf6, 0x3d, 0xbf, 0x09,
  0x76, 0xeb, 0x7b, 0xf8, 0xc5, 0x9a, 0x55, 0x7e, 0x73, 0x78, 0x1c, 0x69,
  0x1b, 0xf3, 0xdd, 0xd9, 0x9b, 0x3f, 0xb5, 0x57, 0xf9, 0xe8, 0x71, 0xe4,
  0xab, 0xbf, 0xa6, 0x43, 0x3d, 0xab, 0xcb, 0xb9, 0x51, 0x58, 0xa8, 0xcc,
  0x83, 0xaa, 0x3c, 0x0e, 0x8c, 0x08, 0x40, 0x32, 0xfa, 0x9f, 0x07, 0xf2,
  0x97, 0x9f, 0x46, 0xa3, 0xd1, 0x1f, 0x43, 0x2c, 0x6f, 0xf2, 0xd1, 0xd8,
  0xe5, 0xca, 0xb3, 0x5d, 0x0b, 0x9c, 0xaa, 0x6a, 0xa8, 0x8c, 0x08, 0x51,
  0x8b, 0x65, 0x9a, 0x57, 0xd4, 0x6e, 0x26, 0x2a, 0x70, 0xb1, 0x24, 0x57,
  0x0a, 0x66, 0xb5, 0x39, 0x81, 0xc9, 0xe2, 0xeb, 0xba, 0x55, 0x6f, 0x4b,
  0xdd, 0xb5, 0xd7, 0xd1, 0x7b, 0x16, 0x38, 0x42, 0xb8, 0xe5, 0x07, 0x3e,
  0x5b, 0xc1, 0x3f, 0xcb, 0xb6, 0x8e, 0x93, 0xb5, 0x85, 0xca, 0x0e, 0x59,
  0xfd, 0xcc, 0x4e, 0x3f, 0xea, 0xbd, 0x90, 0x42, 0xca, 0x57, 0x12, 0x52,
  0x27, 0x47, 0x72, 0x4a, 0x62, 0x85, 0x5a, 0xa2, 0x66, 0xcd, 0x74, 0x07,
  0x14, 0x04, 0xc9, 0x7d, 0xd1, 0x92, 0x08, 0xea, 0xa1, 0xf3, 0x0f, 0x5d,
  0xdb, 0x3a, 0x47, 0x80, 0x8d, 0x04, 0x5e, 0x5b, 0x8d, 0x78, 0xac, 0x34,
  0x94, 0x87, 0x5f, 0xdb, 0x84, 0x0d, 0xaa, 0x43, 0xdf, 0xfc, 0xf7, 0x4d,
  0x28, 0xc2, 0xf4, 0x7a, 0xb4, 0xfa, 0x5d, 0x09, 0x17, 0x86, 0x0d, 0x9e,
  0x8a, 0xe8, 0x0d, 0x76, 0x53, 0x2c, 0xf1, 0x29, 0x2f, 0xf5, 0x89, 0x87,
  0x96, 0x30, 0x4a, 0x7e, 0xc8, 0xe7, 0xb3, 0x69, 0x5a, 0x51, 0x7a, 0x58,
  0x28, 0x5e, 0x85, 0x4c, 0xf8, 0x3e, 0xd5, 0x25, 0x7d, 0xd5, 0x5d, 0x1e,
  0xed, 0x53, 0x12, 0xa7, 0xfa, 0x48, 0x55, 0x90, 0x3d, 0x0c, 0x04, 0xbf,
  0xeb, 0xac, 0x5b, 0x1a, 0xa0, 0x55, 0xe1, 0x02, 0x27, 0x92, 0x9f, 0xf0,
  0x48, 0x25, 0xb6, 0x9c, 0xdc, 0xe2, 0xd5, 0x2c, 0xb8, 0x2a, 0x5f, 0x4f,
  0x53, 0x67, 0xfd, 0x20, 0xe4, 0x66, 0xad, 0x66, 0x3b, 0x7e, 0x63, 0x08,
  0xed, 0xa2, 0x10, 0xb0, 0x43, 0xaf, 0x94, 0x2d, 0x54, 0xfb, 0x89, 0x3b,
  0x2b, 0x25, 0x21, 0x91, 0x82, 0x20, 0xb9, 0x2f, 0x5a, 0x12, 0x41, 0x3d,
  0x74, 0xfe, 0xa1, 0x6b, 0x5b, 0xe7, 0x08, 0xb0, 0x91, 0xc0, 0x6b, 0xab,
  0x11, 0x8f, 0x95, 0x86, 0xf2, 0xf0, 0x2b, 0x9b, 0xb0, 0x41, 0x75, 0xe8,
  0x9b, 0xff, 0xb6, 0x09, 0x45, 0x98, 0x5e, 0x8f, 0x56, 0xbf, 0x2b, 0xe1,
  0xc2, 0xb0, 0xc1, 0x53, 0x11, 0xbd, 0xc1, 0x6e, 0x8a, 0x25, 0x3e, 0xe5,
  0x7b, 0xfa, 0x41, 0x09, 0xf9, 0xe8, 0x1e, 0x43, 0xd4, 0xb5, 0x9b, 0x43,
  0xb4, 0xcf, 0x55, 0xe3, 0x10, 0xc3, 0xc7, 0x61, 0x2c, 0x25, 0x5f, 0x5e,
  0x3f, 0x26, 0xf7, 0xd5, 0xd3, 0x01, 0xff, 0xeb, 0x29, 0x03, 0x17, 0x36,
  0xed, 0xc8, 0x0a, 0xdb, 0x31, 0xac, 0xf5, 0x1f, 0x9d, 0x6a, 0x09, 0x6c,
  0xd0, 0xd3, 0xc0, 0x03, 0xea, 0xe6, 0x59, 0x6a, 0x65, 0x9b, 0x79, 0x47,
  0xa5, 0x3e, 0xf1, 0xd0, 0x12, 0x46, 0xc9, 0xf7, 0xf9, 0x7c, 0x36, 0x4d,
  0x2b, 0x4a, 0x0f, 0x0b, 0xc5, 0xab, 0x90, 0x09, 0xdf, 0xa7, 0xba, 0xa4,
  0xaf, 0xba, 0xcb, 0xa3, 0x7d, 0x4a, 0xe2, 0x54, 0x1f, 0xa9, 0x0a, 0xb2,
  0x87, 0x81, 0xe0, 0x77, 0x4f, 0x3f, 0x28, 0x21, 0x1f, 0xdd, 0x63, 0x88,
  0xba, 0x76, 0x73, 0x88, 0xf6, 0xb9, 0x6a, 0x1c, 0x62, 0xf8, 0x38, 0x8c,
  0x67, 0x8b, 0x1d, 0x31, 0xfc, 0xeb, 0xcf, 0x93, 0x0a, 0x5d, 0x31, 0x9b,
  0xfa, 0xe7, 0x75, 0x05, 0xc7, 0x46, 0xe7, 0x7f, 0x36, 0x0a, 0x0b, 0xbb,
  0xe2, 0x1f, 0xb2, 0x59, 0xcc, 0xee, 0x6b, 0xa8, 0x00, 0xa0, 0xb0, 0x1d,
  0xb2, 0x7e, 0xf0, 0x9d, 0x35, 0x1f, 0x7a, 0x7e, 0xcf, 0x87, 0xf8, 0x48,
  0x2d, 0x18, 0xda, 0x8d, 0x52, 0x85, 0x5f, 0xc4, 0x6c, 0xc6, 0x79, 0xfa,
  0x78, 0xb4, 0xfb, 0xf0, 0xc4, 0x6b, 0x67, 0x7c, 0x33, 0x26, 0x1f, 0xff,
  0x84, 0xa8, 0x44, 0x52, 0xc4, 0xca, 0x3e, 0x9a, 0x5b, 0xdb, 0xcf, 0x01,
  0x58, 0x32, 0x2d, 0x5e, 0x6e, 0x36, 0x80, 0x6a, 0x88, 0x2a, 0x63, 0x1c,
  0xd6, 0xc1, 0x0e, 0x1c, 0x15, 0x1d, 0x77, 0x8b, 0xf0, 0x44, 0x04, 0x45,
  0xf9, 0xc7, 0xc0, 0x67, 0x50, 0x2e, 0x77, 0x88, 0x3a, 0xa7, 0xb3, 0xc3,
  0xa5, 0xe4, 0xcb, 0xeb, 0xc7, 0xe4, 0xbe, 0x7a, 0x3a, 0xe0, 0x7f, 0x3d,
  0x65, 0xe0, 0xc2, 0xa6, 0x1d, 0x59, 0x61, 0x3b, 0x86, 0xb5, 0xfe, 0xa3,
  0x53, 0x2d, 0x81, 0x0d, 0x7a, 0x1a, 0x78, 0x40, 0xdd, 0x3c, 0x4b, 0xad,
  0x6c, 0x33, 0xef, 0xe8, 0x6c, 0xb1, 0x23, 0x86, 0x7f, 0xfd, 0x79, 0x52,
  0xa1, 0x2b, 0x66, 0x53, 0xff, 0xb4, 0xae, 0xe0, 0xd8, 0xe8, 0xfc, 0xcf,
  0x46, 0x61, 0x61, 0x57, 0xfc, 0x43, 0x36, 0x8b, 0xd9, 0x7d, 0x0d, 0x15,
  0x00, 0x14, 0xb6, 0x43, 0xd6, 0x0f, 0xbe, 0xb3, 0xe6, 0x43, 0xcf, 0xef,
  0xf9, 0x10, 0x1f, 0xa9, 0x05, 0x43, 0xbb, 0x51, 0xaa, 0xf0, 0x8b, 0x98,
  0xcd, 0x38, 0x4f, 0x1f, 0x8f, 0x76, 0x1f, 0x9e, 0x78, 0xed, 0x8c, 0x6f,
  0x37, 0xef, 0xc7, 0x87, 0xaf, 0x09, 0xdb, 0x20, 0x8d, 0xb5, 0xea, 0xc9,
  0xc9, 0x2d, 0x27, 0xbd, 0x67, 0x9a, 0xb2, 0xe4, 0x8c, 0x20, 0x99, 0x4b,
  0xd0, 0xce, 0x4e, 0x92, 0x8b, 0x8c, 0x65, 0x1c, 0x16, 0xa6, 0xb0, 0x1e,
  0x27, 0x2f, 0xfe, 0x02, 0x60, 0x12, 0x5e, 0xf5, 0x2c, 0x43, 0xdf, 0xa7,
  0x17, 0x9c, 0x05, 0x13, 0x20, 0x8d, 0xb9, 0x0e, 0x51, 0xf5, 0x3c, 0xcb,
  0x96, 0x52, 0x17, 0xb8, 0x28, 0x57, 0x05, 0xbb, 0x45, 0xcd, 0xd9, 0xa8,
  0x27, 0x90, 0x5d, 0xcf, 0x04, 0xaf, 0x70, 0xa7, 0x81, 0xc3, 0xb4, 0xa7,
  0x49, 0x11, 0x61, 0x8e, 0x25, 0x94, 0x7a, 0xee, 0x30, 0x05, 0xdc, 0xb6,
  0xf0, 0xae, 0x6c, 0xe5, 0x4d, 0xc7, 0x85, 0x1e, 0x34, 0x6c, 0x23, 0x97,
  0x3a, 0x7a, 0x26, 0x19, 0xbb, 0x88, 0x27, 0x93, 0xce, 0x2f, 0xcb, 0xca,
  0x8c, 0xb7, 0xb0, 0xa5, 0x8c, 0x8c, 0xf7, 0x50, 0x6f, 0x77, 0xdb, 0x3c,
  0x86, 0x45, 0xe1, 0x5c, 0x87, 0x41, 0x21, 0xf0, 0x8c, 0x2b, 0xbc, 0xc1,
  0x16, 0x78, 0x9f, 0xc8, 0x63, 0x82, 0xf0, 0x20, 0xcb, 0xb4, 0xb1, 0xd4,
  0x65, 0xd3, 0x7e, 0xf0, 0x16, 0x06, 0xe6, 0xe6, 0xdf, 0xb2, 0xaa, 0xec,
  0xba, 0x73, 0x54, 0x75, 0xd7, 0x70, 0x80, 0x3f, 0xf7, 0x7f, 0x65, 0xa3,
  0xb0, 0xbd, 0xfd, 0xd8, 0x0d, 0x58, 0xa4, 0xb7, 0xe4, 0xa2, 0xea, 0x25,
  0x07, 0x76, 0xd8, 0x62, 0x3b, 0xf0, 0x58, 0xc5, 0x2c, 0x9f, 0x18, 0xac,
  0x2b, 0x8d, 0xe1, 0xbc, 0x24, 0x7b, 0xd2, 0xe2, 0xc0, 0x22, 0xbb, 0x3b,
  0x0c, 0x3d, 0x52, 0x1a, 0xb7, 0xed, 0x96, 0x45, 0x7e, 0xc2, 0x14, 0xcb,
  0x84, 0x11, 0xb7, 0xc5, 0x5d, 0x8b, 0xe8, 0x7b, 0xdb, 0xf8, 0xf1, 0xbc,
  0x44, 0x94, 0x92, 0x89, 0x81, 0xbe, 0x1f, 0xe2, 0xd8, 0xc1, 0x48, 0xa8,
  0x40, 0x88, 0x6a, 0xd0, 0xb2, 0x4f, 0x98, 0x5a, 0xb0, 0x50, 0x35, 0x19,
  0x50, 0xbd, 0xd8, 0x03, 0x76, 0xe1, 0xc6, 0x91, 0x37, 0x83, 0x1c, 0x56,
  0x1e, 0x87, 0x15, 0x05, 0x1a, 0x62, 0xd0, 0x86, 0x1b, 0x96, 0xcd, 0xa6,
  0xf2, 0x4d, 0xaa, 0xef, 0xa1, 0x2e, 0x5d, 0x52, 0x44, 0x1f, 0x51, 0xd5,
  0x06, 0xda, 0xf6, 0x85, 0x6a, 0x9f, 0xb0, 0x1c, 0xb2, 0x33, 0xd3, 0xc2,
  0x9f, 0x2b, 0x1d, 0x80, 0x19, 0x23, 0x2f, 0x67, 0x54, 0x35, 0xc5, 0xed,
  0x63, 0xfa, 0xf0, 0x65, 0x64, 0x2e, 0x9b, 0xf0, 0x54, 0xde, 0xe6, 0x8b,
  0xd5, 0x82, 0xde, 0x1f, 0x70, 0x7d, 0xe4, 0x02, 0x52, 0x4b, 0x0f, 0x95,
  0xb2, 0x0b, 0x1b, 0xa5, 0xa8, 0x98, 0x33, 0x03, 0xbc, 0x8d, 0x88, 0xb6,
  0xe1, 0x8c, 0x1f, 0xbc, 0xc5, 0x7d, 0x27, 0xe8, 0xa0, 0xfe, 0xcb, 0xe9,
  0xc6, 0xe4, 0xe3, 0x9f, 0x10, 0x95, 0x48, 0x8a, 0x58, 0xd9, 0x47, 0x73,
  0x6b, 0xfb, 0x39, 0x00, 0x4b, 0xa6, 0xc5, 0xcb, 0xcd, 0x06, 0x50, 0x0d,
  0x51, 0x65, 0x8c, 0xc3, 0x3a, 0xd8, 0x81, 0xa3, 0xa2, 0xe3, 0x6e, 0x11,
  0x9e, 0x88, 0xa0, 0x28, 0xff, 0x18, 0xf8, 0x0c, 0xca, 0xe5, 0x0e, 0x51,
  0xe7, 0x74, 0x76, 0xf8, 0xe6, 0xfd, 0xf8, 0xf0, 0x35, 0x61, 0x1b, 0xa4,
  0xb1, 0x56, 0x3d, 0x39, 0xb9, 0xe5, 0xa4, 0xf7, 0x4c, 0x53, 0x96, 0x9c,
  0x11, 0x24, 0x73, 0x09, 0xda, 0xd9, 0x49, 0x72, 0x91, 0xb1, 0x8c, 0xc3,
  0xc2, 0x14, 0xd6, 0xe3, 0xe4, 0xc5, 0x9f, 0x01, 0x4c, 0xc2, 0xab, 0x9e,
  0x65, 0xe8, 0xfb, 0xf4, 0x82, 0xb3, 0x60, 0x02, 0xa4, 0x31, 0xd7, 0x21,
  0xaa, 0x9e, 0x67, 0xd9, 0x52, 0xea, 0x02, 0x17, 0xe5, 0xaa, 0x60, 0xb7,
  0xa8, 0x39, 0x1b, 0xf5, 0x04, 0xb2, 0xeb, 0x99, 0xe0, 0x15, 0xee, 0x34,
  0x70, 0x98, 0xf6, 0x34, 0x29, 0x22, 0xcc, 0xb1, 0x84, 0x52, 0xcf, 0x1d,
  0xa6, 0x80, 0xdb, 0x16, 0xde, 0x95, 0xad, 0xbc, 0xe9, 0xb8, 0xd0, 0x83,
  0x86, 0x6d, 0xe4, 0x52, 0x47, 0xcf, 0x24, 0x63, 0x17, 0xf1, 0x64, 0xd2,
  0xf9, 0x65, 0x59, 0x99, 0xf1, 0x16, 0xb6, 0x94, 0x91, 0xf1, 0x1e, 0xea,
  0xed, 0x6e, 0x9b, 0xc7, 0xb0, 0x28, 0x9c, 0xeb, 0x30, 0x28, 0x04, 0x9e,
  0x71, 0x85, 0x37, 0xd8, 0x02, 0xef, 0x13, 0x79, 0x4c, 0x10, 0x1e, 0x64,
  0x99, 0x36, 0x96, 0xba, 0x6c, 0xda, 0x0f, 0xde, 0xc2, 0xc0, 0xdc, 0xfc,
  0x5b, 0x56, 0x95, 0x5d, 0x77, 0x8e, 0xaa, 0xee, 0x1a, 0x0e, 0xf0, 0xe7,
  0xfe, 0xaf, 0x6c, 0x14, 0xb6, 0xb7, 0x1f, 0xbb, 0x01, 0x8b, 0xf4, 0x96,
  0x5c, 0x54, 0xbd, 0xe4, 0xc0, 0x0e, 0x5b, 0x6c, 0x07, 0x1e, 0xab, 0x98,
  0xe5, 0x13, 0x83, 0x75, 0xa5, 0x31, 0x9c, 0x97, 0x64, 0x4f, 0x5a, 0x1c,
  0x58, 0x64, 0x77, 0x87, 0xa1, 0x47, 0x4a, 0xe3, 0xb6, 0xdd, 0xb2, 0xc8,
  0x4f, 0x98, 0x62, 0x99, 0x30, 0xe2, 0xb6, 0xb8, 0x6b, 0x11, 0x7d, 0x6f,
  0x1b, 0x3f, 0x9e, 0x97, 0x88, 0x52, 0x32, 0x31, 0xd0, 0xf7, 0x43, 0x1c,
  0x3b, 0x18, 0x09, 0x15, 0x08, 0x51, 0x0d, 0x5a, 0xf6, 0x09, 0x53, 0x0b,
  0x16, 0xaa, 0x26, 0x03, 0xaa, 0x17, 0x7b, 0xc0, 0x2e, 0xdc, 0x38, 0xf2,
  0x66, 0x90, 0xc3, 0xca, 0xe3, 0xb0, 0xa2, 0x40, 0x43, 0x0c, 0xda, 0x70,
  0xc3, 0xb2, 0xd9, 0x54, 0xbe, 0x49, 0xf5, 0x3d, 0xd4, 0xa5, 0x4b, 0x8a,
  0xe8, 0x23, 0xaa, 0xda, 0x40, 0xdb, 0xbe, 0x50, 0xed, 0x13, 0x96, 0x43,
  0x76, 0x66, 0x5a, 0xf8, 0x73, 0xa5, 0x03, 0x30, 0x63, 0xe4, 0xe5, 0x8c,
  0xaa, 0xa6, 0xb8, 0x7d, 0x4c, 0x1f, 0xbe, 0x8c, 0xcc, 0x65, 0x13, 0x9e,
  0x33, 0x79, 0x61, 0x34, 0xba, 0x3f, 0x86, 0x93, 0x08, 0x59, 0x07, 0xd1,
  0x25, 0xf2, 0x9c, 0xb3, 0x99, 0x67, 0x45, 0x0a, 0xb9, 0x41, 0x55, 0x95,
  0x33, 0xea, 0xe7, 0x50, 0x02, 0x1c, 0x41, 0xf3, 0x15, 0x8a, 0xc7, 0x52,
  0x9d, 0xf3, 0x97, 0xc5, 0x92, 0xd0, 0xfd, 0x25, 0xe3, 0xdc, 0xad, 0x96,
  0x81, 0xcc, 0xb7, 0x7c, 0xc2, 0xaa, 0xa3, 0xe6, 0xf3, 0xbb, 0x92, 0x13,
  0x23, 0xb6, 0x2d, 0xfc, 0xe5, 0xb2, 0xc7, 0xd6, 0x8d, 0x25, 0x5d, 0x08,
  0xe2, 0x4d, 0x1b, 0x89, 0x97, 0x05, 0x42, 0x84, 0x15, 0x53, 0x86, 0x4b,
  0x3a, 0xc0, 0xa6, 0xf0, 0xf1, 0x0d, 0xb4, 0x54, 0xef, 0xf1, 0xed, 0x6d,
  0x40, 0xe1, 0x9e, 0x41, 0xcc, 0x20, 0x8c, 0x6c, 0x2d, 0x3f, 0xde, 0xa5,
  0x3a, 0xc8, 0x27, 0xb7, 0x1d, 0xa3, 0x79, 0x14, 0x45, 0x4c, 0xd4, 0xca,
  0xdd, 0x74, 0x52, 0x72, 0x08, 0x8e, 0x37, 0x2c, 0xf5, 0x36, 0x53, 0xa3,
  0x08, 0xd2, 0x54, 0xf4, 0x26, 0xc5, 0xe6, 0x96, 0x45, 0x98, 0xda, 0x40,
  0xb9, 0x98, 0x5e, 0x1b, 0x51, 0x0d, 0x94, 0x52, 0x3f, 0x3c, 0xa3, 0xfc,
  0x63, 0x33, 0x75, 0xaf, 0x74, 0xd0, 0x59, 0xb9, 0xe2, 0x40, 0x66, 0x16,
  0xca, 0xdb, 0x7c, 0xb1, 0x5a, 0xd0, 0xfb, 0x03, 0xae, 0x8f, 0x5c, 0x40,
  0x6a, 0xe9, 0xa1, 0x52, 0x76, 0x61, 0xa3, 0x14, 0x15, 0x73, 0x66, 0x80,
  0xb7, 0x11, 0xd1, 0x36, 0x9c, 0xf1, 0x83, 0xb7, 0xb8, 0xef, 0x04, 0x1d,
  0xd4, 0x7f, 0x39, 0x7d, 0x26, 0x2f, 0x8c, 0x46, 0xf7, 0xc7, 0x70, 0x12,
  0x21, 0xeb, 0x20, 0xba, 0x44, 0x9e, 0x73, 0x36, 0xf3, 0xac, 0x48, 0x21,
  0x37, 0xa8, 0xaa, 0x72, 0x46, 0xfd, 0x1c, 0x4a, 0x80, 0x23, 0x68, 0xbe,
  0x42, 0xf1, 0x58, 0xaa, 0x73, 0xfe, 0xb2, 0x58, 0x12, 0xba, 0xbf, 0x64,
  0x9c, 0xbb, 0xd5, 0x32, 0x90, 0xf9, 0x96, 0x4f, 0x58, 0x75, 0xd4, 0x7c,
  0x7e, 0x57, 0x72, 0x62, 0xc4, 0xb6, 0x85, 0xbf, 0x5c, 0xf6, 0xd8, 0xba,
  0xb1, 0xa4, 0x0b, 0x41, 0xbc, 0x69, 0x23, 0xf1, 0xb2, 0x40, 0x88, 0xb0,
  0x62, 0xca, 0x70, 0x49, 0x07, 0xd8, 0x14, 0x3e, 0xbe, 0x81, 0x96, 0xea,
  0x3d, 0xbe, 0xbd, 0x0d, 0x28, 0xdc, 0x33, 0x88, 0x19, 0x84, 0x91, 0xad,
  0xe5, 0xc7, 0xbb, 0x54, 0x07, 0xf9, 0xe4, 0xb6, 0x63, 0x34, 0x8f, 0xa2,
  0x88, 0x89, 0x5a, 0xb9, 0x9b, 0x4e, 0x4a, 0x0e, 0xc1, 0xf1, 0x86, 0xa5,
  0xde, 0x66, 0x6a, 0x14, 0x41, 0x9a, 0x8a, 0xde, 0xa4, 0xd8, 0xdc, 0xb2,
  0x44, 0xc6, 0x72, 0xde, 0x7d, 0x5c, 0x29, 0x23, 0xb2, 0xf2, 0x39, 0xde,
  0xe1, 0x7b, 0x5d, 0x27, 0x7b, 0xe6, 0x18, 0xf2, 0x62, 0xd5, 0x58, 0x04,
  0x3b, 0xfa, 0xa0, 0x52, 0x68, 0x74, 0xf7, 0xc1, 0xe7, 0xad, 0x60, 0x11,
  0x5e, 0x50, 0x7b, 0x01, 0x42, 0xbe, 0x27, 0xa4, 0x93, 0x8b, 0x83, 0xc7,
  0x97, 0xb2, 0x11, 0x57, 0x91, 0x8d, 0xc2, 0x4a, 0x85, 0x79, 0x76, 0x6b,
  0x36, 0x9b, 0x51, 0x96, 0x12, 0x2b, 0x1c, 0x9c, 0x50, 0x93, 0x0c, 0x61,
  0xee, 0x62, 0x10, 0xc9, 0xfc, 0x69, 0x31, 0x71, 0xdb, 0x7a, 0x8a, 0xf8,
  0x08, 0x53, 0x1b, 0x28, 0x17, 0xd3, 0x6b, 0x23, 0xaa, 0x81, 0x52, 0xea,
  0x87, 0x67, 0x94, 0x7f, 0x6c, 0xa6, 0xee, 0x95, 0x0e, 0x3a, 0x2b, 0x57,
  0x1c, 0xc8, 0xcc, 0x82, 0xc8, 0x58, 0xce, 0xbb, 0x8f, 0x2b, 0x65, 0x44,
  0x56, 0x3e, 0xc7, 0x3b, 0x7c, 0xaf, 0xeb, 0x64, 0xcf, 0x1c, 0x43, 0x5e,
  0xac, 0x1a, 0x8b, 0x60, 0x47, 0x1f, 0x54, 0x0a, 0x8d, 0xee, 0x3e, 0xf8,
  0xbc, 0x15, 0x2c, 0xc2, 0x0b, 0x6a, 0x2f, 0x40, 0xc8, 0xf7, 0x84, 0x74,
  0x72, 0x71, 0xf0, 0xf8, 0x52, 0x36, 0xe2, 0x2a, 0xb2, 0x51, 0x58, 0xa9,
  0x5c, 0xd9, 0xc8, 0x95, 0x64, 0xe0, 0x08, 0x09, 0x17, 0xff, 0x37, 0xb8,
  0xda, 0x75, 0x5a, 0xcf, 0x87, 0x79, 0x97, 0x97, 0x1f, 0x52, 0x36, 0xa1,
  0xcd, 0x05, 0xb2, 0x54, 0x68, 0x86, 0x18, 0xbf, 0x1c, 0x1f, 0x77, 0xc0,
  0xbe, 0xd6, 0xa2, 0x2f, 0xef, 0xb5, 0xd5, 0x9e, 0x4f, 0x05, 0x11, 0xc9,
  0x90, 0xbd, 0x7d, 0xbd, 0xe3, 0xea, 0x03, 0xfe, 0xba, 0x43, 0xa2, 0x0d,
  0x27, 0xc3, 0x10, 0x47, 0xa8, 0xda, 0xe0, 0x1e, 0x7f, 0x49, 0x04, 0x27,
  0x87, 0x9e, 0xd8, 0x91, 0x14, 0xa0, 0xfb, 0x22, 0xe9, 0x8c, 0x3b, 0xa9,
  0x2b, 0x1f, 0x43, 0x1a, 0xa0, 0x09, 0xe6, 0x30, 0x86, 0xe7, 0x63, 0xe3,
  0x50, 0xa2, 0x4f, 0xd6, 0xf4, 0x34, 0x12, 0x82, 0x1a, 0x11, 0x5b, 0x96,
  0x63, 0x61, 0x0c, 0x97, 0x57, 0x03, 0xf4, 0xf3, 0x10, 0x2b, 0x9d, 0x43,
  0xad, 0x17, 0xdc, 0x67, 0x50, 0x67, 0xe0, 0x8d, 0xd9, 0xe5, 0x93, 0xf4,
  0x43, 0xce, 0x1c, 0xff, 0xeb, 0x2a, 0xcf, 0xa8, 0x21, 0xa6, 0xe1, 0x37,
  0xc9, 0x6b, 0xce, 0x0c, 0x93, 0x7e, 0x7d, 0xdc, 0x18, 0x94, 0x9a, 0x87,
  0xe2, 0x51, 0x3b, 0x81, 0xc0, 0x02, 0x30, 0x13, 0xc2, 0x3d, 0x7c, 0x4b,
  0x93, 0x7e, 0x85, 0x49, 0x2f, 0xcc, 0x45, 0x27, 0xfb, 0xdd, 0x03, 0x19,
  0x30, 0xcf, 0x6e, 0xcd, 0x66, 0x33, 0xca, 0x52, 0x62, 0x85, 0x83, 0x13,
  0x6a, 0x92, 0x21, 0xcc, 0x5d, 0x0c, 0x22, 0x99, 0x3f, 0x2d, 0x26, 0x6e,
  0x5b, 0x4f, 0x11, 0x9f, 0x2b, 0x1b, 0xb9, 0x92, 0x0c, 0x1c, 0x21, 0xe1,
  0xe2, 0xff, 0x06, 0x57, 0xbb, 0x4e, 0xeb, 0xf9, 0x30, 0xef, 0xf2, 0xf2,
  0x43, 0xca, 0x26, 0xb4, 0xb9, 0x40, 0x96, 0x0a, 0xcd, 0x10, 0xe3, 0x97,
  0xe3, 0xe3, 0x0e, 0xd8, 0xd7, 0x5a, 0xf4, 0xe5, 0xbd, 0xb6, 0xda, 0xf3,
  0xa9, 0x20, 0x22, 0x19, 0xb2, 0xb7, 0xaf, 0x77, 0x5c, 0x7d, 0xc0, 0x5f,
  0x77, 0x48, 0xb4, 0xe1, 0x64, 0x18, 0xe2, 0x08, 0x55, 0x1b, 0xdc, 0xe3,
  0x2f, 0x89, 0xe0, 0xe4, 0xd0, 0x13, 0x3b, 0x92, 0x02, 0x74, 0x5f, 0x24,
  0x9d, 0x71, 0x27, 0x75, 0xe5, 0x63, 0x48, 0x03, 0x34, 0xc1, 0x1c, 0xc6,
  0xf0, 0x7c, 0x6c, 0x1c, 0x4a, 0xf4, 0xc9, 0x9a, 0x9e, 0x46, 0x42, 0x50,
  0x23, 0x62, 0xcb, 0x72, 0x2c, 0x8c, 0xe1, 0xf2, 0x6a, 0x80, 0x7e, 0x1e,
  0x62, 0xa5, 0x73, 0xa8, 0xf5, 0x82, 0xfb, 0x0c, 0xea, 0x0c, 0xbc, 0x31,
  0xbb, 0x7c, 0x92, 0x7e, 0xc8, 0x99, 0xe3, 0x7f, 0x5d, 0xe5, 0x19, 0x35,
  0xd3, 0xa4, 0x01, 0xcd, 0xe4, 0xe7, 0x2b, 0x99, 0xd6, 0x1f, 0xc3, 0x5c,
  0xfd, 0x41, 0xab, 0x4d, 0x13, 0xd9, 0x8c, 0x62, 0x09, 0x34, 0xe8, 0xf1,
  0x55, 0xa4, 0xf3, 0x9d, 0xba, 0x99, 0x81, 0xff, 0xad, 0x8a, 0x39, 0x26,
  0x89, 0xa1, 0xb4, 0x25, 0x5d, 0x77, 0x6f, 0x9a, 0x18, 0x6a, 0x4c, 0x70,
  0x40, 0xe4, 0xbb, 0xb6, 0x76, 0x87, 0xd4, 0x2c, 0xf9, 0x0a, 0x6c, 0xe3,
  0x1a, 0xe8, 0x85, 0xe8, 0x40, 0xfe, 0x56, 0xc1, 0x8d, 0xc0, 0x2b, 0xa6,
  0x8d, 0x6c, 0x9d, 0xdb, 0x3a, 0xac, 0x84, 0x6b, 0x4c, 0xc8, 0x10, 0xda,
  0xa4, 0xac, 0x15, 0x39, 0xd9, 0x2c, 0xd2, 0xbc, 0xde, 0xba, 0x4f, 0x84,
  0xc5, 0x75, 0x2f, 0xdc, 0x49, 0xdb, 0x7b, 0xc0, 0x2d, 0x87, 0xef, 0xc5,
  0x39, 0xe1, 0x37, 0xc2, 0x3e, 0xcd, 0xbf, 0x18, 0xe9, 0xc4, 0x0b, 0x19,
  0x58, 0x20, 0x27, 0x98, 0x92, 0x36, 0xf7, 0x51, 0x12, 0x9a, 0x5a, 0xa0,
  0xc4, 0x34, 0xfc, 0x26, 0x79, 0xcd, 0x99, 0x61, 0xd2, 0xaf, 0x8f, 0x1b,
  0x83, 0x52, 0xf3, 0x50, 0x3c, 0x6a, 0x27, 0x10, 0x58, 0x00, 0x66, 0x42,
  0xb8, 0x87, 0x6f, 0x69, 0xd2, 0xaf, 0x30, 0xe9, 0x85, 0xb9, 0xe8, 0x64,
  0xbf, 0x7b, 0x20, 0x63, 0x9a, 0x34, 0xa0, 0x99, 0xfc, 0x7c, 0x25, 0xd3,
  0xfa, 0x63, 0x98, 0xab, 0x3f, 0x68, 0xb5, 0x69, 0x22, 0x9b, 0x51, 0x2c,
  0x81, 0x06, 0x3d, 0xbe, 0x8a, 0x74, 0xbe, 0x53, 0x37, 0x33, 0xf0, 0xbf,
  0x55, 0x31, 0xc7, 0x24, 0x31, 0x94, 0xb6, 0xa4, 0xeb, 0xee, 0x4d, 0x13,
  0x43, 0x8d, 0x09, 0x0e, 0x88, 0x7c, 0xd7, 0xd6, 0xee, 0x90, 0x9a, 0x25,
  0x5f, 0x81, 0x6d, 0x5c, 0x03, 0xbd, 0x10, 0x1d, 0xc8, 0xdf, 0x2a, 0xb8,
  0x11, 0x78, 0xc5, 0xb4, 0x91, 0xad, 0x73, 0x5b, 0x87, 0x95, 0x70, 0x8d,
  0x09, 0x19, 0x42, 0x9b, 0x94, 0xb5, 0x22, 0x27, 0x9b, 0x45, 0x9a, 0xd7,
  0x5b, 0xf7, 0x89, 0xb0, 0xb8, 0xee, 0x85, 0x3b, 0x69, 0x7b, 0x0f, 0xb8,
  0x1f, 0x16, 0x98, 0x2e, 0xd2, 0x40, 0xcf, 0x90, 0xd3, 0x4a, 0x40, 0x12,
  0xa6, 0x73, 0xc3, 0xeb, 0x23, 0x06, 0xa7, 0xb6, 0x4e, 0x04, 0x1e, 0xd8,
  0xa0, 0xcb, 0x4e, 0xeb, 0x15, 0x54, 0x90, 0xf9, 0x0a, 0xdf, 0x66, 0x28,
  0x2d, 0x0b, 0xe5, 0xa4, 0xb5, 0xdd, 0x51, 0xf8, 0x33, 0x0b, 0x98, 0x82,
  0x3b, 0xea, 0x21, 0xc1, 0xad, 0xb4, 0xd1, 0xaa, 0x82, 0xa4, 0x75, 0xd1,
  0xc4, 0x46, 0x3d, 0xb3, 0x83, 0x55, 0x38, 0xf0, 0xbb, 0x92, 0xfb, 0x06,
  0x38, 0xca, 0x59, 0x74, 0x3a, 0xad, 0x96, 0xe3, 0x69, 0x13, 0x75, 0xa6,
  0x11, 0x17, 0x23, 0x21, 0xe3, 0xcf, 0x4d, 0xa5, 0x87, 0x56, 0x3c, 0x53,
  0x86, 0x79, 0xab, 0xd1, 0xf7, 0x51, 0x11, 0xc4, 0x3d, 0x3a, 0xed, 0xc8,
  0x59, 0x71, 0xb0, 0x3d, 0xc5, 0xe5, 0xee, 0xb5, 0xa6, 0xc4, 0x68, 0x35,
  0x45, 0x2c, 0x53, 0xf9, 0x21, 0x8d, 0xc8, 0x5b, 0xad, 0xc7, 0xff, 0x95,
  0xf2, 0xf0, 0x49, 0xbb, 0x9b, 0x96, 0x60, 0xdb, 0xfd, 0xaa, 0x0b, 0x95,
  0x3e, 0xec, 0x46, 0xf5, 0x54, 0x15, 0xfc, 0xcf, 0xbc, 0x51, 0xe9, 0xc3,
  0xae, 0x54, 0xda, 0xba, 0x53, 0x3d, 0xed, 0xe3, 0x7b, 0x67, 0xfc, 0x1b,
  0xde, 0x32, 0x9b, 0x80, 0xf1, 0xd0, 0x3b, 0xa6, 0x34, 0xf1, 0x3f, 0xfb,
  0x96, 0x7d, 0xde, 0xd1, 0x02, 0x09, 0x28, 0x72, 0x4d, 0xd3, 0x3a, 0x3f,
  0xe5, 0xf0, 0xbd, 0x38, 0x27, 0xfc, 0x46, 0xd8, 0xa7, 0xf9, 0x67, 0x23,
  0x9d, 0x78, 0x21, 0x03, 0x0b, 0xe4, 0x04, 0x53, 0xd2, 0xe6, 0x3e, 0x4a,
  0x42, 0x53, 0x0b, 0xf4, 0xc3, 0x02, 0xd3, 0x45, 0x1a, 0xe8, 0x19, 0x72,
  0x5a, 0x09, 0x48, 0xc2, 0x74, 0x6e, 0x78, 0x7d, 0xc4, 0xe0, 0xd4, 0xd6,
  0x89, 0xc0, 0x03, 0x1b, 0x74, 0xd9, 0x69, 0xbd, 0x82, 0x0a, 0x32, 0x5f,
  0xe1, 0xdb, 0x0c, 0xa5, 0x65, 0xa1, 0x9c, 0xb4, 0xb6, 0x3b, 0x0a, 0x7f,
  0x66, 0x01, 0x53, 0x70, 0x47, 0x3d, 0x24, 0xb8, 0x95, 0x36, 0x5a, 0x55,
  0x90, 0xb4, 0x2e, 0x9a, 0xd8, 0xa8, 0x67, 0x76, 0xb0, 0x0a, 0x07, 0x7e,
  0x57, 0x72, 0xdf, 0x00, 0x47, 0x39, 0x8b, 0x4e, 0xa7, 0xd5, 0x72, 0x3c,
  0x6d, 0xa2, 0xce, 0x34, 0xe2, 0x62, 0x24, 0x64, 0xfc, 0xb9, 0xa9, 0xf4,
  0xd0, 0x8a, 0x67, 0xca, 0x30, 0x6f, 0x35, 0xfa, 0x3e, 0x2a, 0x82, 0xb8,
  0x47, 0xa7, 0x1d, 0x39, 0x2b, 0x0e, 0xb6, 0xa7, 0xb8, 0xdc, 0xbd, 0xd6,
  0x94, 0x18, 0xad, 0xa6, 0x88, 0x65, 0x2a, 0x3f, 0xa4, 0x11, 0x79, 0xab,
  0xf5, 0xf8, 0xbf, 0x52, 0x1e, 0x3e, 0x69, 0x77, 0xd3, 0x12, 0x6c, 0xbb,
  0x5f, 0x74, 0xa1, 0xd2, 0x87, 0xdd, 0xa8, 0x9e, 0xaa, 0x82, 0xff, 0x99,
  0x37, 0x2a, 0x7d, 0xd8, 0x95, 0x4a, 0x5b, 0x77, 0xaa, 0xa7, 0x7d, 0x7c,
  0x47, 0x05, 0xc9, 0xe0, 0xd0, 0xb5, 0x76, 0x2c, 0xa6, 0x5b, 0xbc, 0x73,
  0x1d, 0x63, 0x10, 0x45, 0x43, 0x34, 0xa5, 0x1e, 0xed, 0x13, 0x7b, 0x1c,
  0x5a, 0x5f, 0xbd, 0x76, 0xe4, 0xc0, 0x49, 0xa5, 0x48, 0xb9, 0x0e, 0xe8,
  0x61, 0x24, 0xea, 0x83, 0xae, 0xe9, 0xd2, 0xc8, 0xf5, 0x65, 0x4e, 0xda,
  0x81, 0x51, 0x5c, 0x00, 0xd2, 0xf8, 0xcd, 0x78, 0x3c, 0x7c, 0x79, 0x7a,
  0x04, 0xc0, 0xde, 0x61, 0x48, 0x51, 0x1e, 0x64, 0x6e, 0xe9, 0xcf, 0x31,
  0x66, 0x17, 0xf4, 0xa7, 0x9b, 0xb4, 0xbf, 0x6e, 0xf4, 0xdc, 0xee, 0xb6,
  0xbe, 0xac, 0x93, 0x56, 0x3a, 0xa5, 0x4e, 0xca, 0xe2, 0xed, 0x43, 0xdb,
  0xef, 0x8c, 0x7f, 0xc5, 0x5b, 0x66, 0x13, 0x30, 0x1e, 0x7a, 0xc7, 0x94,
  0x26, 0xfe, 0x67, 0xdf, 0xb2, 0xcf, 0x3b, 0x5a, 0x20, 0x01, 0x45, 0xae,
  0x69, 0x5a, 0xe7, 0xe7, 0xa8, 0x20, 0x19, 0x1c, 0xba, 0xd6, 0x8e, 0xc5,
  0x74, 0x8b, 0x77, 0xae, 0x63, 0x0c, 0xa2, 0x68, 0x88, 0xa6, 0xd4, 0xa3,
  0x7d, 0x62, 0x8f, 0x43, 0xeb, 0xab, 0xd7, 0x8e, 0x1c, 0x38, 0xa9, 0x14,
  0x29, 0xd7, 0x01, 0x3d, 0x8c, 0x44, 0x7d, 0xd0, 0x35, 0x5d, 0x1a, 0xb9,
  0xbe, 0xcc, 0x49, 0x3b, 0x30, 0x8a, 0x0b, 0x40, 0x1a, 0xbf, 0x1e, 0x8f,
  0x87, 0x2f, 0x4f, 0x8f, 0x00, 0xd8, 0x3b, 0x0c, 0x29, 0xca, 0x83, 0xcc,
  0x2d, 0xfd, 0x39, 0xc6, 0xec, 0x82, 0xfe, 0x74, 0x93, 0xf6, 0xd7, 0x8d,
  0x56, 0xf4, 0x59, 0x4a, 0x69, 0x86, 0x51, 0x0a, 0xae, 0x45, 0x0f, 0x04,
  0xb9, 0xa7, 0x04, 0x35, 0x02, 0x90, 0x90, 0xbd, 0xe7, 0x4f, 0xf7, 0xcc,
  0xad, 0xb8, 0x63, 0xfc, 0x3b, 0x79, 0xf9, 0xf1, 0xe8, 0xd1, 0xce, 0xe3,
  0xd1, 0x63, 0xf0, 0x34, 0x09, 0x0a, 0x91, 0x51, 0x27, 0xc3, 0x1b, 0x6e,
  0x17, 0xc9, 0xbe, 0x60, 0x21, 0xf6, 0xee, 0xf0, 0x55, 0xc2, 0x29, 0x7a,
  0x84, 0x88, 0x96, 0x50, 0xb1, 0x10, 0x2a, 0x8f, 0x24, 0x8e, 0x4d, 0x69,
  0x02, 0x60, 0xa5, 0x72, 0x84, 0x4c, 0xac, 0x81, 0x31, 0x16, 0x6c, 0x87,
  0x9a, 0x12, 0x54, 0x9a, 0x5f, 0xd8, 0x89, 0x80, 0xdd, 0xb1, 0x55, 0x21,
  0xfb, 0x82, 0x39, 0x86, 0x95, 0x36, 0xde, 0x96, 0x78, 0x1b, 0x76, 0x4f,
  0x9e, 0xdb, 0xdd, 0xd6, 0x97, 0x75, 0xd2, 0x4a, 0xa7, 0xd4, 0x49, 0x59,
  0xbc, 0x7d, 0x68, 0xdb, 0x8a, 0x3e, 0x4b, 0x29, 0xcd, 0x30, 0x4a, 0xc1,
  0xb5, 0xe8, 0x81, 0x20, 0xf7, 0x94, 0xa0, 0x46, 0x00, 0x12, 0xb2, 0xf7,
  0xfc, 0xe9, 0x9e, 0xb9, 0x15, 0x77, 0x8c, 0x7f, 0x27, 0x2f, 0x3f, 0x1e,
  0x3d, 0xda, 0x79, 0x3c, 0x7a, 0x0c, 0x9e, 0x26, 0x41, 0x21, 0x32, 0xea,
  0x64, 0x78, 0xc3, 0xed, 0x22, 0xd9, 0x17, 0x2c, 0xc4, 0xde, 0x1d, 0xbe,
  0x4a, 0x38, 0x45, 0x8f, 0x10, 0xd1, 0x12, 0x2a, 0x16, 0x42, 0xe5, 0x91,
  0xc4, 0xb1, 0x29, 0x4d, 0x00, 0xac, 0x54, 0x8e, 0x90, 0x89, 0x35, 0x30,
  0xc6, 0x82, 0xed, 0x50, 0x53, 0x82, 0x4a, 0xf3, 0x0b, 0x3b, 0x11, 0xb0,
  0x1a, 0xed, 0xe3, 0xfe, 0xf3, 0x51, 0xf3, 0xa5, 0xc7, 0x00, 0x72, 0x1e,
  0xca, 0xc0, 0xce, 0x11, 0x86, 0xa8, 0x09, 0x86, 0x70, 0xb5, 0x4c, 0x17,
  0xd6, 0x24, 0xb9, 0xf8, 0xeb, 0xac, 0x18, 0xfd, 0x52, 0x7b, 0x2a, 0xa2,
  0x10, 0x7b, 0x66, 0x93, 0x4e, 0x5d, 0x18, 0x99, 0xd8, 0x4a, 0x7d, 0x0b,
  0x12, 0x13, 0xa9, 0xeb, 0x09, 0x60, 0x12, 0xc0, 0x65, 0x66, 0x0b, 0xca,
  0x1b, 0xca, 0x8e, 0x1f, 0xf9, 0x99, 0x8e, 0x1e, 0x29, 0xc1, 0xc0, 0xc7,
  0x78, 0xac, 0x2a, 0x4b, 0xe7, 0x32, 0x2b, 0xef, 0x3b, 0xe1, 0x2f, 0xa9,
  0xc5, 0x36, 0x98, 0x6d, 0x1d, 0xa6, 0x9f, 0x39, 0x94, 0x54, 0x9d, 0x82,
  0x4d, 0x47, 0x71, 0x6d, 0x1c, 0x96, 0x95, 0x11, 0x27, 0xf9, 0x32, 0x9d,
  0x27, 0x0f, 0xc8, 0xa1, 0xee, 0x3f, 0xfc, 0x7b, 0x9a, 0x74, 0xd2, 0xec,
  0xf5, 0x76, 0xae, 0x61, 0x74, 0x0a, 0x7e, 0xd3, 0x15, 0x79, 0x21, 0x97,
  0xeb, 0x19, 0x0c, 0x15, 0xe2, 0x8e, 0x9b, 0x29, 0xc5, 0x75, 0x13, 0x05,
  0x8c, 0x25, 0x69, 0x3d, 0x4c, 0xd3, 0x72, 0xb1, 0x74, 0x21, 0x03, 0x1d,
  0x56, 0x6a, 0xfb, 0xb6, 0xbb, 0x8c, 0x30, 0xc6, 0xdc, 0xb9, 0xff, 0xfb,
  0xf4, 0x01, 0x9c, 0xf7, 0xb7, 0x60, 0x86, 0x50, 0xe1, 0xd8, 0xcf, 0xf0,
  0xcb, 0x95, 0x39, 0xd9, 0xc2, 0x64, 0x8b, 0xc2, 0xdd, 0x59, 0x1b, 0xdc,
  0x4f, 0x03, 0xa8, 0x11, 0x2f, 0x15, 0x45, 0xc7, 0x88, 0x40, 0xb0, 0x21,
  0x0f, 0xc0, 0xcd, 0xed, 0x28, 0x7e, 0x21, 0x4e, 0xd0, 0xff, 0x04, 0x35,
  0xf0, 0x49, 0x62, 0xcf, 0xea, 0x21, 0xea, 0x20, 0x43, 0x4c, 0x73, 0xb3,
  0xe1, 0x00, 0xa7, 0xc9, 0x99, 0x5c, 0xff, 0xbf, 0x36, 0xf8, 0xff, 0x26,
  0x6d, 0xf0, 0x9f, 0xb9, 0xa5, 0x43, 0xc9, 0xdf, 0xe4, 0x6b, 0x69, 0x33,
  0x48, 0x24, 0xdf, 0x3e, 0x9a, 0x58, 0x3d, 0xbf, 0x1b, 0x79, 0xd0, 0x6c,
  0x8c, 0x07, 0xfe, 0xb0, 0x2b, 0x1a, 0x92, 0xc2, 0xff, 0x8c, 0x2b, 0xfa,
  0xa0, 0x9b, 0xf9, 0xff, 0xfb, 0x3e, 0xfe, 0xbb, 0xdd, 0xc3, 0x08, 0x41,
  0x3b, 0xb6, 0x2a, 0x64, 0x5f, 0x30, 0xc7, 0xb0, 0xd2, 0xc6, 0xdb, 0x12,
  0x6f, 0xc3, 0xee, 0x49, 0xa3, 0x7d, 0xdc, 0x7f, 0x3e, 0x6a, 0xbe, 0xf4,
  0x18, 0x40, 0xce, 0x43, 0x19, 0xd8, 0x39, 0xc2, 0x10, 0x35, 0xc1, 0x10,
  0xae, 0x96, 0xe9, 0xc2, 0x9a, 0x24, 0x17, 0x7f, 0x9d, 0x15, 0xa3, 0x9f,
  0x6b, 0x4f, 0x45, 0x14, 0x62, 0xcf, 0x6c, 0xd2, 0xa9, 0x0b, 0x23, 0x13,
  0x5b, 0xa9, 0x6f, 0x41, 0x62, 0x22, 0x75, 0x3d, 0x01, 0x4c, 0x02, 0xb8,
  0xcc, 0x6c, 0x41, 0x79, 0x43, 0xd9, 0xf1, 0x23, 0x3f, 0xd3, 0xd1, 0x23,
  0x25, 0x18, 0xf8, 0x18, 0x8f, 0x55, 0x65, 0xe9, 0x5c, 0x66, 0xe5, 0x7d,
  0x27, 0xfc, 0x25, 0xb5, 0xd8, 0x06, 0xb3, 0xad, 0xc3, 0xf4, 0x33, 0x87,
  0x92, 0xaa, 0x53, 0xb0, 0xe9, 0x28, 0xae, 0x8d, 0xc3, 0xb2, 0x32, 0xe2,
  0x24, 0x5f, 0xa6, 0xf3, 0xe4, 0x01, 0x39, 0xd4, 0xfd, 0x87, 0x7f, 0x4f,
  0x93, 0x4e, 0x9a, 0xbd, 0xde, 0xce, 0x35, 0x8c, 0x4e, 0xc1, 0x6f, 0xba,
  0x22, 0x2f, 0xe4, 0x72, 0x3d, 0x83, 0xa1, 0x42, 0xdc, 0x71, 0x33, 0xa5,
  0xb8, 0x6e, 0xa2, 0x80, 0xb1, 0x24, 0xad, 0x87, 0x69, 0x5a, 0x2e, 0x96,
  0x2e, 0x64, 0xa0, 0xc3, 0x4a, 0x6d, 0xdf, 0x76, 0x97, 0x11, 0xc6, 0x98,
  0x3b, 0xf7, 0x7f, 0x9f, 0x3e, 0x80, 0xf3, 0xfe, 0x1a, 0xcc, 0x10, 0x2a,
  0x1c, 0xfb, 0x19, 0x7e, 0xbe, 0x32, 0x27, 0x5b, 0x98, 0x6c, 0x51, 0xb8,
  0x3b, 0x6b, 0x83, 0xfb, 0x69, 0x00, 0x35, 0xe2, 0xa5, 0xa2, 0xe8, 0x18,
  0x11, 0x08, 0x36, 0xe4, 0x01, 0xb8, 0xb9, 0x1d, 0xc5, 0x2f, 0xc4, 0x09,
  0xfa, 0x9f, 0xa0, 0x06, 0x3e, 0x49, 0xec, 0x59, 0x3d, 0x44, 0x1d, 0x64,
  0x88, 0x69, 0x6e, 0x36, 0x1c, 0xe0, 0x34, 0x39, 0x93, 0xeb, 0xff, 0xd7,
  0x06, 0xff, 0xbf, 0xa4, 0x0d, 0xfe, 0x33, 0xb7, 0x74, 0x28, 0xf9, 0x9b,
  0x7c, 0x2d, 0x6d, 0x06, 0x89, 0xe4, 0xdb, 0x47, 0x13, 0xab, 0xe7, 0x77,
  0xea, 0x60, 0x5b, 0x86, 0xcc, 0x6e, 0x90, 0x9d, 0xc4, 0x9d, 0x8e, 0xc8,
  0xd2, 0xde, 0x76, 0xaa, 0x0f, 0xca, 0x8e, 0x78, 0xeb, 0x8e, 0x4e, 0xbf,
  0x7f, 0x4a, 0x68, 0x23, 0xe3, 0x6e, 0xd0, 0xbe, 0x4a, 0x8e, 0x5f, 0xbf,
  0x3c, 0xfd, 0x05, 0xb7, 0xfd, 0x4f, 0xe4, 0x66, 0x5d, 0x66, 0xd9, 0x6c,
  0xc8, 0xf1, 0x91, 0x17, 0xf4, 0x8f, 0x68, 0x60, 0x51, 0x51, 0x04, 0x88,
  0x6c, 0x11, 0x36, 0x09, 0xe3, 0xb5, 0xf4, 0xb2, 0x51, 0x53, 0x0a, 0xc1,
  0x23, 0x0f, 0x9a, 0x8d, 0xf1, 0xc0, 0x1f, 0x76, 0x45, 0x43, 0x52, 0xf8,
  0x9f, 0x71, 0x45, 0x1f, 0x74, 0x33, 0xff, 0x7f, 0xdf, 0xc7, 0x7f, 0xb7,
  0x7b, 0x18, 0x21, 0x48, 0x1d, 0x6c, 0xcb, 0x90, 0xd9, 0x0d, 0xb2, 0x93,
  0xb8, 0xd3, 0x11, 0x59, 0xda, 0xdb, 0x4e, 0xf5, 0x41, 0xd9, 0x11, 0x6f,
  0xdd, 0xd1, 0xe9, 0x77, 0x4f, 0x09, 0x6d, 0x64, 0xdc, 0x0d, 0xda, 0x57,
  0xc9, 0xf1, 0xeb, 0x97, 0xa7, 0x3f, 0xe3, 0xb6, 0xff, 0x89, 0xdc, 0xac,
  0xcb, 0x2c, 0x9b, 0x0d, 0x39, 0x3e, 0xf2, 0x82, 0xfe, 0x11, 0x0d, 0x2c,
  0xf6, 0x58, 0x52, 0xcf, 0xd5, 0xc0, 0xc7, 0x52, 0x16, 0xb3, 0x6d, 0x51,
  0x01, 0xf9, 0xdb, 0x44, 0x2a, 0x12, 0x67, 0xc7, 0xf5, 0xbe, 0x04, 0xfe,
  0x97, 0xc5, 0x50, 0xf4, 0x9e, 0xe1, 0x8c, 0xa3, 0x68, 0xd2, 0xc7, 0x9d,
  0x5b, 0x0a, 0x87, 0x76, 0x18, 0xa5, 0xeb, 0xd1, 0x2e, 0xfc, 0xef, 0xc4,
  0x41, 0xb2, 0xe6, 0x13, 0xa2, 0x0a, 0x74, 0x3f, 0xdf, 0x97, 0x36, 0xb0,
  0x76, 0x2b, 0xfd, 0x93, 0x68, 0xed, 0x20, 0x22, 0x81, 0xb3, 0x55, 0x15,
  0xb6, 0x10, 0x4c, 0xfd, 0xdd, 0xe1, 0x48, 0x39, 0xcf, 0xd7, 0x7e, 0xa2,
  0xbd, 0x97, 0xe6, 0xf3, 0xad, 0xed, 0x8c, 0x64, 0x29, 0x0e, 0x5a, 0x59,
  0x19, 0xfe, 0x94, 0x6c, 0x3c, 0x70, 0x2f, 0x51, 0xd7, 0x3e, 0xd7, 0xce,
  0x4b, 0xc9, 0xfe, 0x9f, 0xc2, 0xac, 0x31, 0xef, 0xf5, 0xfb, 0xda, 0x90,
  0x96, 0x45, 0x53, 0x51, 0xb7, 0x05, 0x0d, 0x95, 0xd6, 0x8a, 0x5e, 0xbe,
  0xf2, 0x5a, 0xb9, 0xa6, 0x94, 0x10, 0x4d, 0xbb, 0x16, 0x82, 0x42, 0xf2,
  0xfd, 0xce, 0x9a, 0xe9, 0xc8, 0x9e, 0x2c, 0x01, 0xb5, 0x99, 0x5f, 0x4d,
  0x8d, 0x8a, 0xab, 0xed, 0x68, 0xcd, 0x0a, 0x2b, 0xc5, 0xf7, 0x1b, 0x0e,
  0x7b, 0x7c, 0x15, 0x1a, 0xf1, 0xef, 0x49, 0x27, 0xff, 0x0d, 0xd3, 0x67,
  0xd7, 0x37, 0x3f, 0x0b, 0x4b, 0xe5, 0xd5, 0x1d, 0x63, 0xb9, 0x42, 0x6a,
  0xd8, 0x19, 0x15, 0x99, 0x53, 0x87, 0xd4, 0xbc, 0xb9, 0x03, 0xda, 0xc2,
  0x8d, 0xd4, 0xfd, 0x74, 0xf9, 0xfd, 0xf8, 0xf8, 0x11, 0x6d, 0xeb, 0xf9,
  0xf1, 0xd8, 0xc7, 0x11, 0xaf, 0xa9, 0x67, 0x2e, 0xd5, 0x79, 0x7d, 0x7d,
  0xf8, 0x72, 0x7c, 0x3e, 0x0a, 0x96, 0x68, 0xd6, 0x18, 0x26, 0x86, 0x30,
  0xc1, 0x30, 0x13, 0x1e, 0x1f, 0x9b, 0xb5, 0xde, 0x01, 0x26, 0x50, 0xea,
  0xc7, 0x30, 0x39, 0x9e, 0x9b, 0x8e, 0x0e, 0x3b, 0x37, 0xe5, 0x2c, 0xe6,
  0x26, 0xab, 0xc2, 0xd4, 0x0b, 0xb3, 0x77, 0x93, 0x7c, 0x8e, 0x15, 0x98,
  0x79, 0x19, 0x6b, 0x68, 0x21, 0xc9, 0xe1, 0x54, 0x8d, 0x5c, 0xce, 0x91,
  0x52, 0x86, 0xcf, 0xb4, 0xfd, 0x10, 0x48, 0xbc, 0x94, 0x12, 0xed, 0xfe,
  0x82, 0x4b, 0xa3, 0x77, 0x94, 0xe8, 0x83, 0x63, 0xa7, 0xaa, 0x7b, 0xc5,
  0xc5, 0x60, 0xb6, 0x22, 0x83, 0x71, 0x5c, 0x00, 0x56, 0x11, 0xa6, 0xb5,
  0xa6, 0xf5, 0x47, 0x4d, 0xee, 0xa7, 0xa6, 0x82, 0x48, 0x9e, 0x59, 0x9b,
  0x5b, 0xd7, 0xb5, 0x84, 0xcc, 0x41, 0x53, 0xed, 0x2f, 0xaa, 0x40, 0x82,
  0x24, 0x70, 0x38, 0x00, 0x8a, 0x6c, 0xbe, 0xbd, 0xe6, 0xc4, 0x35, 0x42,
  0xee, 0x37, 0x3d, 0xc4, 0x68, 0xf1, 0xa6, 0x53, 0xc9, 0xf4, 0x2a, 0x33,
  0x42, 0x64, 0xe4, 0x55, 0xb0, 0x3f, 0x78, 0x43, 0x3e, 0x0b, 0x60, 0xce,
  0x22, 0xdb, 0xf3, 0x8b, 0x37, 0xe4, 0xf1, 0xe3, 0x70, 0x43, 0xaa, 0xec,
  0xaf, 0xb3, 0x18, 0x28, 0x34, 0xe5, 0xda, 0x53, 0x9a, 0x3f, 0xa7, 0xc7,
  0x9f, 0x31, 0xb2, 0x35, 0xa6, 0xba, 0x83, 0xde, 0x2e, 0x9a, 0x2f, 0xec,
  0x40, 0xc3, 0x60, 0x61, 0x23, 0x00, 0x19, 0xf6, 0x62, 0x56, 0x70, 0x41,
  0x2a, 0x8a, 0x00, 0x91, 0x2d, 0xc2, 0x26, 0x61, 0xbc, 0x96, 0x5e, 0x36,
  0x6a, 0x4a, 0x21, 0xd8, 0x1e, 0x4b, 0xea, 0xb9, 0x1a, 0xf8, 0x58, 0xca,
  0x62, 0xb6, 0x2d, 0x2a, 0x20, 0x7f, 0x9b, 0x48, 0x45, 0xe2, 0xec, 0xb8,
  0xde, 0x97, 0xc0, 0xff, 0xb2, 0x18, 0x8a, 0xde, 0x33, 0x9c, 0x71, 0x14,
  0x4d, 0xfa, 0xb8, 0x73, 0x4b, 0xe1, 0xd0, 0x0e, 0xa3, 0x74, 0x3d, 0xda,
  0x85, 0xff, 0x9d, 0x38, 0x48, 0xd6, 0x7c, 0x42, 0x54, 0x81, 0xee, 0xe7,
  0xfb, 0xd2, 0x06, 0xd6, 0x6e, 0xa5, 0x7f, 0x12, 0xad, 0x1d, 0x44, 0x24,
  0x70, 0xb6, 0xaa, 0xc2, 0x16, 0x82, 0xa9, 0xbf, 0x3b, 0x1c, 0x29, 0xe7,
  0xf9, 0xda, 0x4f, 0xb4, 0xf7, 0xd2, 0x7c, 0xbe, 0xb5, 0x9d, 0x91, 0x2c,
  0xc5, 0x41, 0x2b, 0x2b, 0xc3, 0x9f, 0x92, 0x8d, 0x07, 0xee, 0x25, 0xea,
  0xda, 0xe7, 0xda, 0x79, 0x29, 0xd9, 0xff, 0x53, 0x98, 0x35, 0xe6, 0xbd,
  0x7e, 0x5f, 0x1b, 0xd2, 0xb2, 0x68, 0x2a, 0xea, 0xb6, 0xa0, 0xa1, 0xd2,
  0x5a, 0xd1, 0xcb, 0x57, 0x5e, 0x2b, 0xd7, 0x94, 0x12, 0xa2, 0x69, 0xd7,
  0x42, 0x50, 0x48, 0xbe, 0xdf, 0x59, 0x33, 0x1d, 0xd9, 0x93, 0x25, 0xa0,
  0x36, 0xf3, 0xab, 0xa9, 0x51, 0x71, 0xb5, 0x1d, 0xad, 0x59, 0x61, 0xa5,
  0xf8, 0x7e, 0xc3, 0x61, 0x8f, 0xaf, 0x42, 0x23, 0xfe, 0x3d, 0xe9, 0xe4,
  0xbf, 0x62, 0xfa, 0xec, 0xfa, 0xe6, 0x67, 0x61, 0xa9, 0xbc, 0xba, 0x63,
  0x2c, 0x57, 0x48, 0x0d, 0x3b, 0xa3, 0x22, 0x73, 0xea, 0x90, 0x9a, 0x37,
  0x77, 0x40, 0x5b, 0xb8, 0x91, 0xba, 0x9f, 0x2e, 0xbf, 0x1f, 0x1f, 0x3f,
  0xa2, 0x6d, 0x3d, 0x3f, 0x1e, 0xfb, 0x38, 0xe2, 0x35, 0xf5, 0xcc, 0xa5,
  0x3a, 0xaf, 0xaf, 0x0e, 0x5f, 0x8e, 0xcf, 0x47, 0xc1, 0x12, 0xcd, 0x1a,
  0xc3, 0xc4, 0x10, 0x26, 0x18, 0x66, 0xc2, 0xe3, 0x63, 0xb3, 0xd6, 0x3b,
  0xc0, 0x04, 0x4a, 0xfd, 0x18, 0x26, 0xc7, 0x73, 0xd3, 0xd1, 0x61, 0xe7,
  0xa6, 0x9c, 0xc5, 0xdc, 0x64, 0x55, 0x98, 0x7a, 0x61, 0xf6, 0x6e, 0x92,
  0xcf, 0xb1, 0x02, 0x33, 0x2f, 0x63, 0x0d, 0x2d, 0x24, 0x39, 0x9c, 0xaa,
  0x91, 0xcb, 0x39, 0x52, 0xca, 0xf0, 0x99, 0xb6, 0x1f, 0x02, 0x89, 0x97,
  0x52, 0xa2, 0xdd, 0x5f, 0x70, 0x69, 0xf4, 0x8e, 0x12, 0x7d, 0x70, 0xec,
  0x54, 0x75, 0xaf, 0xb8, 0x18, 0xcc, 0x56, 0x64, 0x30, 0x8e, 0x0b, 0xc0,
  0x2a, 0xc2, 0xb4, 0xd6, 0xb4, 0xfe, 0xa8, 0xc9, 0xfd, 0xd4, 0x54, 0x10,
  0xc9, 0x33, 0x6b, 0x73, 0xeb, 0xba, 0x96, 0x90, 0x39, 0x68, 0xaa, 0xfd,
  0x45, 0x15, 0x48, 0x90, 0x04, 0x0e, 0x07, 0x40, 0x91, 0xcd, 0xb7, 0xd7,
  0x9c, 0xb8, 0x46, 0xc8, 0xfd, 0xa6, 0x87, 0x18, 0x2d, 0xde, 0x74, 0x2a,
  0x99, 0x5e, 0x65, 0x46, 0x88, 0x8c, 0xbc, 0x0a, 0xf6, 0x07, 0x6f, 0xc8,
  0x67, 0x01, 0xcc, 0x59, 0x64, 0x7b, 0x7e, 0xf6, 0x86, 0x3c, 0x7e, 0x1c,
  0x6e, 0x48, 0x95, 0xfd, 0x75, 0x16, 0x03, 0x85, 0xa6, 0x5c, 0x7b, 0x4a,
  0xf3, 0xe7, 0xf4, 0xf8, 0x33, 0x46, 0xb6, 0xc6, 0x54, 0x77, 0xd0, 0xdb,
  0x45, 0xf3, 0x85, 0x1d, 0x68, 0x18, 0x2c, 0x6c, 0x04, 0x20, 0xc3, 0x5e,
  0xaf, 0xf7, 0x5e, 0x1e, 0x87, 0x3d, 0x90, 0x2c, 0x4e, 0xf9, 0xc8, 0x5a,
  0x0d, 0x12, 0xd9, 0x9c, 0xd4, 0x21, 0x04, 0xa5, 0x74, 0xf6, 0xf2, 0x0c,
  0x87, 0x17, 0xcd, 0xd2, 0x2e, 0x6c, 0x2d, 0x75, 0xec, 0x06, 0x9b, 0xd1,
  0xb3, 0xf4, 0xf3, 0x4a, 0x3b, 0xa5, 0xac, 0x5f, 0x7d, 0x98, 0x55, 0x86,
  0xcc, 0x0a, 0x2e, 0xe8, 0xf5, 0xde, 0xcb, 0xe3, 0xb0, 0x07, 0x92, 0xc5,
  0x29, 0x1f, 0x59, 0xab, 0x41, 0x22, 0x9b, 0x93, 0x3a, 0x84, 0xa0, 0x94,
  0xf6, 0x23, 0x9c, 0x30, 0x4a, 0xe8, 0x4c, 0xd2, 0x41, 0xb9, 0x77, 0x1b,
  0x5c, 0x69, 0x9e, 0x6c, 0x44, 0xc8, 0x3c, 0x68, 0x5b, 0x5a, 0x91, 0x51,
  0xbb, 0x60, 0xe1, 0xe0, 0x1a, 0x1d, 0x95, 0x2d, 0xe0, 0x12, 0x32, 0x4a,
  0xdc, 0x0e, 0x6e, 0x7b, 0xd1, 0x18, 0x6b, 0xfe, 0x3a, 0x9b, 0x53, 0x21,
  0x6b, 0x56, 0x4c, 0xab, 0xbb, 0xa5, 0x8f, 0x62, 0x3e, 0xfb, 0x67, 0xf6,
  0x5f, 0x2b, 0x20, 0xa4, 0x9f, 0xf7, 0x9e, 0x61, 0x76, 0xdb, 0xa1, 0xfe,
  0x85, 0x7a, 0x44, 0x19, 0x8f, 0x71, 0x17, 0x21, 0x85, 0x1b, 0x3f, 0x27,
  0x1a, 0xb6, 0x8c, 0x72, 0x6e, 0x86, 0x0a, 0x94, 0x92, 0xf2, 0x8b, 0xd0,
  0x81, 0x8c, 0xcd, 0xb5, 0x19, 0xcf, 0x0f, 0x3e, 0xf9, 0xfd, 0x01, 0x6f,
  0xd7, 0xf5, 0x7e, 0xc0, 0x13, 0xc6, 0xc7, 0xdb, 0xc9, 0x1b, 0xf8, 0x68,
  0xce, 0x5e, 0x9e, 0xe1, 0xf0, 0xa2, 0x59, 0xda, 0x85, 0xad, 0xa5, 0x8e,
  0xdd, 0x60, 0x33, 0x7a, 0x96, 0x7e, 0x5e, 0x69, 0xa7, 0x94, 0xf5, 0xab,
  0x0f, 0xb3, 0xca, 0xd0, 0x7e, 0x84, 0x13, 0x46, 0x09, 0x9d, 0x49, 0x3a,
  0x28, 0xf7, 0x6e, 0x83, 0x2b, 0xcd, 0x93, 0x8d, 0x08, 0x99, 0x07, 0x6d,
  0x4b, 0x2b, 0x32, 0x6a, 0x17, 0x2c, 0x1c, 0x5c, 0xa3, 0xa3, 0xb2, 0x05,
  0x5c, 0x42, 0x46, 0x89, 0xdb, 0xc1, 0x6d, 0x2f, 0x1a, 0x63, 0xcd, 0x5f,
  0x67, 0x73, 0x2a, 0x64, 0xcd, 0x8a, 0x69, 0x75, 0xb7, 0xf4, 0x51, 0xcc,
  0x67, 0xff, 0xcc, 0xfe, 0x6b, 0x05, 0x84, 0xf4, 0xf3, 0xde, 0x33, 0xcc,
  0x6e, 0x3b, 0xd4, 0xbf, 0x50, 0x8f, 0x28, 0xe3, 0x31, 0xee, 0x22, 0xa4,
  0x70, 0xe3, 0xe7, 0x44, 0xc3, 0x96, 0x51, 0xce, 0xcd, 0x50, 0x81, 0x52,
  0x52, 0x7e, 0x11, 0x3a, 0x90, 0xb1, 0xb9, 0x36, 0xe3, 0xf9, 0xc1, 0x27,
  0xda, 0x4e, 0x78, 0x5c, 0x57, 0xed, 0xd3, 0xb4, 0xcf, 0x8e, 0x28, 0xbf,
  0x55, 0xab, 0xc8, 0xe3, 0x34, 0x48, 0x71, 0xa2, 0x0a, 0x58, 0x7a, 0xdb,
  0xd5, 0x22, 0x8e, 0x0d, 0x6b, 0xe5, 0x04, 0x2e, 0xf5, 0x2c, 0x4d, 0x56,
  0xb9, 0x00, 0x2d, 0x40, 0xfe, 0x99, 0xa7, 0xaf, 0xf7, 0xfb, 0x10, 0xb9,
  0x47, 0xf2, 0x6b, 0x2a, 0xd6, 0x9d, 0x65, 0x04, 0x6a, 0xad, 0x98, 0x81,
  0x89, 0xed, 0xd8, 0x4d, 0xd9, 0x8b, 0x70, 0x4f, 0x3f, 0xdd, 0x7b, 0xf6,
  0x74, 0x7b, 0x5d, 0x8b, 0x62, 0x34, 0x31, 0x41, 0x11, 0x22, 0x93, 0x10,
  0xfe, 0xb5, 0x3f, 0xf2, 0x37, 0x28, 0x71, 0x4d, 0x1e, 0xa4, 0x98, 0x34,
  0x94, 0x70, 0x46, 0xdc, 0x80, 0x24, 0x68, 0x23, 0x2c, 0xee, 0x3d, 0x88,
  0x85, 0xd7, 0xd5, 0x94, 0xf6, 0x96, 0x13, 0x29, 0x77, 0x8d, 0xc2, 0x00,
  0x92, 0x9b, 0x8c, 0xc4, 0xe1, 0x23, 0x9d, 0x03, 0x4b, 0x4f, 0xbf, 0x4f,
  0x21, 0x4f, 0x96, 0xfe, 0x3e, 0x6a, 0xff, 0xcb, 0x0f, 0x66, 0xba, 0x01,
  0x7e, 0xcd, 0x29, 0x3f, 0xfa, 0x17, 0x9c, 0xf2, 0xa3, 0xf5, 0xa7, 0xfc,
  0xe8, 0xa1, 0xa7, 0xfc, 0xec, 0xc9, 0xd3, 0xcf, 0x7f, 0xc5, 0x29, 0x7b,
  0x3b, 0xfc, 0x5f, 0x76, 0xca, 0x1e, 0xa5, 0xfd, 0xba, 0x53, 0x96, 0xa4,
  0x90, 0x6e, 0xe1, 0x99, 0x24, 0xbf, 0x50, 0xfa, 0x1e, 0x20, 0x03, 0x38,
  0x5d, 0x9f, 0x9f, 0x0d, 0xeb, 0x49, 0xa4, 0x0b, 0x1f, 0x77, 0xff, 0x82,
  0x1e, 0x16, 0x31, 0xb2, 0x1d, 0x84, 0x02, 0x69, 0xb8, 0xcb, 0x39, 0xba,
  0x48, 0x6d, 0x0e, 0x37, 0xd5, 0x3d, 0xa2, 0x65, 0x62, 0x8a, 0xff, 0xc3,
  0x9f, 0x33, 0x47, 0xfd, 0x2f, 0x44, 0x8f, 0x0a, 0x73, 0x66, 0xbc, 0xac,
  0xa7, 0xf6, 0xa6, 0xdd, 0xcd, 0x8d, 0x99, 0xc0, 0x39, 0x48, 0xd1, 0xec,
  0x37, 0x41, 0xb8, 0xb6, 0x08, 0x36, 0xea, 0xa8, 0x99, 0x18, 0xa5, 0xd0,
  0x48, 0x81, 0x02, 0x49, 0x3d, 0x77, 0xf3, 0x4c, 0x0a, 0x25, 0xb1, 0x68,
  0x50, 0x06, 0x4c, 0xf9, 0xae, 0x4b, 0x58, 0x9a, 0xa6, 0x74, 0x32, 0x96,
  0x6c, 0xdb, 0xf5, 0xb2, 0x3d, 0x19, 0xee, 0x91, 0x69, 0x6e, 0xc9, 0x94,
  0x70, 0x9b, 0xb2, 0x45, 0x04, 0xd4, 0x64, 0x0d, 0xa7, 0x7f, 0xda, 0x4d,
  0xb8, 0xeb, 0x69, 0xd2, 0x12, 0x4b, 0x40, 0xa3, 0x86, 0x3d, 0xed, 0x8e,
  0x3d, 0x9c, 0x0b, 0xcb, 0xc8, 0x61, 0xa4, 0xf0, 0x77, 0xdb, 0xe0, 0x48,
  0xbf, 0x3f, 0xe0, 0xed, 0xba, 0xde, 0x0f, 0x78, 0xc2, 0xf8, 0x78, 0x3b,
  0x79, 0x03, 0x1f, 0x4d, 0xdb, 0x09, 0x8f, 0xeb, 0xaa, 0x7d, 0x9a, 0xf6,
  0xd9, 0x11, 0xe5, 0xb7, 0x6a, 0x15, 0x79, 0x9c, 0x06, 0x29, 0x4e, 0x54,
  0x01, 0x4b, 0x6f, 0xbb, 0x5a, 0xc4, 0xb1, 0x61, 0xad, 0x9c, 0xc0, 0xa5,
  0x9e, 0xa5, 0xc9, 0x2a, 0x17, 0xa0, 0x05, 0xc8, 0x3f, 0xf3, 0xf4, 0xf5,
  0x7e, 0x1f, 0x22, 0xf7, 0x48, 0x7e, 0x4d, 0xc5, 0xba, 0xb3, 0x8c, 0x40,
  0xad, 0x15, 0x33, 0x30, 0xb1, 0x1d, 0xbb, 0x29, 0x7b, 0x11, 0xee, 0xe9,
  0xa7, 0x7b, 0xcf, 0x9e, 0x6e, 0xaf, 0x6b, 0x51, 0x8c, 0x26, 0x26, 0x28,
  0x42, 0x64, 0x12, 0xc2, 0xbf, 0xf6, 0x47, 0xfe, 0x06, 0x25, 0xae, 0xc9,
  0x83, 0x14, 0x93, 0x86, 0x12, 0xce, 0x88, 0x1b, 0x90, 0x04, 0x6d, 0x84,
  0xc5, 0xbd, 0x07, 0xb1, 0xf0, 0xba, 0x9a, 0xd2, 0xde, 0x72, 0x22, 0xe5,
  0xae, 0x51, 0x18, 0x40, 0x72, 0x93, 0x91, 0x38, 0x7c, 0xa4, 0x73, 0x60,
  0xe9, 0xe9, 0xf7, 0x29, 0xe4, 0xc9, 0xd2, 0xdf, 0x47, 0xed, 0x7f, 0xf9,
  0xc1, 0x4c, 0x37, 0xc0, 0x2f, 0x39, 0xe5, 0x47, 0xff, 0x82, 0x53, 0x7e,
  0xb4, 0xfe, 0x94, 0x1f, 0x3d, 0xf4, 0x94, 0x9f, 0x3d, 0x79, 0xfa, 0xf9,
  0x2f, 0x38, 0x65, 0x6f, 0x87, 0xff, 0xcb, 0x4e, 0xd9, 0xa3, 0xb4, 0x5f,
  0x76, 0xca, 0x92, 0x14, 0xd2, 0x2d, 0x3c, 0x93, 0xe4, 0x17, 0x4a, 0xdf,
  0x03, 0x64, 0x00, 0xa7, 0xeb, 0xf3, 0xb3, 0x61, 0x3d, 0x89, 0x74, 0xe1,
  0xe3, 0xee, 0x5f, 0xd0, 0xc3, 0x22, 0x46, 0xb6, 0x83, 0x50, 0x20, 0x0d,
  0x77, 0x39, 0x47, 0x17, 0xa9, 0xcd, 0xe1, 0xa6, 0xba, 0x47, 0xb4, 0x4c,
  0x4c, 0xf1, 0x7f, 0xf8, 0x73, 0xe6, 0xa8, 0xff, 0x85, 0xe8, 0x51, 0x61,
  0xce, 0x8c, 0x97, 0xf5, 0xd4, 0xde, 0xb4, 0xbb, 0xb9, 0x31, 0x13, 0x38,
  0x07, 0x29, 0x9a, 0xfd, 0x26, 0x08, 0xd7, 0x16, 0xc1, 0x46, 0x1d, 0x35,
  0x13, 0xa3, 0x14, 0x1a, 0x29, 0x50, 0x20, 0xa9, 0xe7, 0x6e, 0x9e, 0x49,
  0xa1, 0x24, 0x16, 0x0d, 0xca, 0x80, 0x29, 0xdf, 0x75, 0x09, 0x4b, 0xd3,
  0x94, 0x4e, 0xc6, 0x92, 0x6d, 0xbb, 0x5e, 0xb6, 0x27, 0xc3, 0x3d, 0x32,
  0xcd, 0x2d, 0x99, 0x12, 0x6e, 0x53, 0xb6, 0x88, 0x80, 0x9a, 0xac, 0xe1,
  0x03, 0x9d, 0xa0, 0xe0, 0x12, 0x32, 0x5d, 0x16, 0xd4, 0xee, 0x3f, 0xe3,
  0xb2, 0x09, 0x75, 0x67, 0xee, 0xaf, 0x0d, 0x40, 0x72, 0x6d, 0x63, 0x5b,
  0x89, 0x78, 0x79, 0x72, 0xaf, 0x71, 0xba, 0xb3, 0xd5, 0x62, 0xa9, 0xa0,
  0x6f, 0xa8, 0xe2, 0xc8, 0xa9, 0x5c, 0x48, 0x0a, 0xbf, 0x63, 0x3d, 0xd2,
  0xd3, 0xca, 0xf3, 0x32, 0x49, 0x72, 0x1b, 0x7b, 0xac, 0xf4, 0xac, 0x04,
  0xc0, 0x80, 0x17, 0x40, 0x89, 0x6b, 0x54, 0x32, 0x01, 0x1c, 0xa9, 0xec,
  0x22, 0x48, 0x3d, 0xa0, 0x16, 0x0a, 0x14, 0x9d, 0xcc, 0x26, 0xab, 0x4b,
  0xad, 0x9d, 0xb6, 0x9d, 0xbe, 0xda, 0x54, 0x49, 0x75, 0x26, 0x40, 0x53,
  0xc9, 0xb4, 0xf3, 0x7a, 0x08, 0x22, 0xd1, 0xa0, 0xc7, 0xdd, 0x74, 0x5d,
  0x72, 0x58, 0xb0, 0x70, 0x22, 0xf6, 0xd6, 0xca, 0xe9, 0x27, 0xad, 0x0e,
  0x4c, 0x91, 0x1e, 0x42, 0x3e, 0xa9, 0x34, 0xd3, 0xe5, 0xf0, 0x22, 0x05,
  0x04, 0x63, 0x50, 0x40, 0x2b, 0x09, 0xa1, 0x72, 0x05, 0xce, 0x5f, 0x9d,
  0x26, 0x6f, 0x52, 0xe9, 0xbb, 0x92, 0x6c, 0x19, 0x0e, 0xfc, 0xec, 0xf1,
  0xde, 0xa3, 0xed, 0xb5, 0x7a, 0x78, 0x1b, 0x56, 0x88, 0xbe, 0x55, 0x94,
  0xb1, 0xc4, 0xdc, 0xf3, 0x55, 0x55, 0x24, 0x8a, 0x57, 0x62, 0xbe, 0xf4,
  0xe1, 0xdd, 0xc9, 0xeb, 0xc3, 0xe3, 0x97, 0x7f, 0xb2, 0xd5, 0xf1, 0xd8,
  0x04, 0xad, 0xb0, 0xfc, 0x60, 0xcc, 0xd7, 0xbb, 0x0f, 0x75, 0x66, 0xe6,
  0xf4, 0x4f, 0xbb, 0x09, 0x77, 0x3d, 0x4d, 0x5a, 0x62, 0x09, 0x68, 0xd4,
  0xb0, 0xa7, 0xdd, 0xb1, 0x87, 0x73, 0x61, 0x19, 0x39, 0x8c, 0x14, 0xfe,
  0x6e, 0x1b, 0x1c, 0x69, 0xa0, 0x13, 0x14, 0x5c, 0x42, 0xa6, 0xcb, 0x82,
  0xda, 0xfd, 0x67, 0x5c, 0x36, 0xa1, 0xee, 0xcc, 0xfd, 0xb5, 0x01, 0x48,
  0xae, 0x6d, 0x6c, 0x2b, 0x11, 0x2f, 0x4f, 0xee, 0x35, 0x4e, 0x77, 0xb6,
  0x5a, 0x2c, 0x15, 0xf4, 0x0d, 0x55, 0x1c, 0x39, 0x95, 0x0b, 0x49, 0xe1,
  0x77, 0xac, 0x47, 0x7a, 0x5a, 0x79, 0x5e, 0x26, 0x49, 0x6e, 0x63, 0x8f,
  0x95, 0x9e, 0x95, 0x00, 0x18, 0xf0, 0x02, 0x28, 0x71, 0x8d, 0x4a, 0x26,
  0x80, 0x23, 0x95, 0x5d, 0x04, 0xa9, 0x07, 0xd4, 0x42, 0x81, 0xa2, 0x93,
  0xd9, 0x64, 0x75, 0xa9, 0xb5, 0xd3, 0xb6, 0xd3, 0x57, 0x9b, 0x2a, 0xa9,
  0xce, 0x04, 0x68, 0x2a, 0x99, 0x76, 0x5e, 0x0f, 0x41, 0x24, 0x1a, 0xf4,
  0xb8, 0x9b, 0xae, 0x4b, 0x0e, 0x0b, 0x16, 0x4e, 0xc4, 0xde, 0x5a, 0x39,
  0xfd, 0xa4, 0xd5, 0x81, 0x29, 0xd2, 0x43, 0xc8, 0x27, 0x95, 0x66, 0xba,
  0x1c, 0x5e, 0xa4, 0x80, 0x60, 0x0c, 0x0a, 0x68, 0x25, 0x21, 0x54, 0xae,
  0xc0, 0xf9, 0xab, 0xd3, 0xe4, 0x4d, 0x2a, 0x7d, 0x57, 0x92, 0x2d, 0xc3,
  0x81, 0x9f, 0x3d, 0xde, 0x7b, 0xb4, 0xbd, 0x56, 0x0f, 0x6f, 0xc3, 0x0a,
  0xd1, 0xb7, 0x8a, 0x32, 0x96, 0x98, 0x7b, 0xbe, 0xaa, 0x8a, 0x44, 0xf1,
  0x4a, 0xcc, 0x97, 0x3e, 0xbc, 0x3b, 0x79, 0x7d, 0x78, 0xfc, 0xf2, 0x4f,
  0xdc, 0x6c, 0x3d, 0xda, 0x46, 0x85, 0x52, 0xd0, 0x1d, 0xef, 0x32, 0x6b,
  0x63, 0x0a, 0x70, 0x9e, 0xf4, 0x1a, 0x60, 0x1c, 0xeb, 0xa0, 0xdc, 0x1d,
  0xed, 0x4b, 0x77, 0x05, 0x81, 0x87, 0x77, 0x3c, 0xcb, 0xeb, 0xf4, 0x90,
  0x0a, 0x7c, 0x16, 0xd7, 0x20, 0x86, 0x95, 0x28, 0x00, 0x30, 0xc8, 0xa7,
  0x39, 0xac, 0x15, 0xb9, 0xd6, 0x39, 0xc2, 0xf0, 0x17, 0x6d, 0xf8, 0x3d,
  0x2a, 0x52, 0xc4, 0x2f, 0xd6, 0x87, 0x95, 0xdb, 0xbc, 0xbf, 0x21, 0x61,
  0x91, 0xcd, 0x8b, 0xac, 0x19, 0xca, 0xc4, 0x5e, 0x98, 0x3f, 0xbf, 0xbc,
  0x4e, 0xe7, 0x41, 0xe9, 0x2b, 0x9a, 0xcb, 0x29, 0x65, 0x5a, 0x56, 0x84,
  0x37, 0xbd, 0xce, 0x12, 0x63, 0xdb, 0x62, 0x41, 0x9f, 0x34, 0x57, 0x25,
  0xe8, 0xa4, 0x70, 0x7e, 0xfe, 0xa7, 0xd3, 0xc3, 0x2f, 0x5f, 0x80, 0x91,
  0xfd, 0x11, 0x39, 0xf6, 0x75, 0x8b, 0xaf, 0x25, 0x68, 0x66, 0x1d, 0xac,
  0xe1, 0xc7, 0xd7, 0x47, 0xe3, 0xd3, 0xe3, 0x93, 0x57, 0x5f, 0xbe, 0xf8,
  0x11, 0x36, 0xa5, 0x11, 0x1e, 0x77, 0xde, 0xbb, 0xf6, 0x67, 0x16, 0x2d,
  0x3e, 0x04, 0x4e, 0x38, 0xfc, 0xe1, 0xc3, 0xe1, 0xbb, 0xef, 0xbf, 0x7c,
  0x71, 0x9d, 0x56, 0x03, 0xac, 0x8f, 0xdf, 0xee, 0xe9, 0xdd, 0xd8, 0x22,
  0x35, 0xa8, 0xe7, 0x93, 0xf9, 0xc7, 0x3a, 0xff, 0x5b, 0x96, 0x98, 0xd7,
  0xe7, 0xab, 0x10, 0xae, 0xf9, 0x5c, 0xfa, 0x01, 0x19, 0xd9, 0x0d, 0x73,
  0xe8, 0xeb, 0xe3, 0xef, 0x00, 0x09, 0x6a, 0xfd, 0xa4, 0x0b, 0x6e, 0x40,
  0x93, 0xfc, 0xf1, 0xc9, 0xde, 0xfe, 0xb6, 0x6b, 0x7b, 0x48, 0x90, 0xc2,
  0x66, 0xc6, 0x1f, 0x83, 0xea, 0x90, 0xbf, 0x49, 0x9d, 0x8b, 0xeb, 0x02,
  0xd2, 0x38, 0x8b, 0x8a, 0x04, 0x86, 0xba, 0x9c, 0x08, 0x15, 0x80, 0xf2,
  0x5f, 0xd1, 0x35, 0xb2, 0x22, 0x78, 0xa5, 0xc0, 0xe3, 0x76, 0xfe, 0xc6,
  0xc3, 0xf2, 0xf8, 0xda, 0x91, 0x9e, 0x99, 0x8e, 0x78, 0xed, 0xd6, 0xca,
  0xc7, 0x4f, 0x18, 0xcb, 0xe9, 0x9a, 0x94, 0xb4, 0xd9, 0x46, 0xa4, 0x09,
  0xfd, 0xc4, 0xf7, 0xd9, 0xcb, 0xf1, 0xa1, 0x4a, 0x97, 0x92, 0x31, 0xe8,
  0x68, 0x95, 0x4a, 0x78, 0x5a, 0x3a, 0x7d, 0x8f, 0x0f, 0x2f, 0x5f, 0xa0,
  0xc6, 0x32, 0xab, 0x13, 0xf5, 0xef, 0x78, 0xde, 0x9b, 0x79, 0x76, 0x99,
  0x4e, 0xef, 0x2c, 0x92, 0x2e, 0x1d, 0xc8, 0xac, 0x7b, 0x3b, 0xc9, 0xc3,
  0x37, 0x85, 0x31, 0x67, 0x44, 0xf0, 0x25, 0xb1, 0x67, 0x86, 0x8c, 0x30,
  0xd7, 0xd5, 0x3a, 0x7d, 0x78, 0x6a, 0x16, 0x14, 0x43, 0xc5, 0x25, 0x36,
  0xb5, 0x2b, 0x9d, 0xdb, 0x5b, 0xdc, 0xa1, 0x3e, 0x90, 0x0d, 0x35, 0x65,
  0xb6, 0x3a, 0x1e, 0x9b, 0xa0, 0x15, 0x96, 0x1f, 0x8c, 0xf9, 0x7a, 0xf7,
  0xa1, 0xce, 0xcc, 0x9c, 0x9b, 0xad, 0x47, 0xdb, 0xa8, 0x50, 0x0a, 0xba,
  0xe3, 0x5d, 0x66, 0x6d, 0x4c, 0x01, 0xce, 0x93, 0x5e, 0x03, 0x8c, 0x63,
  0x1d, 0x94, 0xbb, 0xa3, 0x7d, 0xe9, 0xae, 0x20, 0xf0, 0xf0, 0x8e, 0x67,
  0x79, 0x9d, 0x1e, 0x52, 0x81, 0xcf, 0xe2, 0x1a, 0xc4, 0xb0, 0x12, 0x05,
  0x00, 0x06, 0xf9, 0x34, 0x87, 0xb5, 0x22, 0xd7, 0x3a, 0x47, 0x18, 0xfe,
  0xa2, 0x0d, 0xbf, 0x47, 0x45, 0x8a, 0xf8, 0xc5, 0xfa, 0xb0, 0x72, 0x9b,
  0xf7, 0x37, 0x24, 0x2c, 0xb2, 0x79, 0x91, 0x35, 0x43, 0x99, 0xd8, 0x0b,
  0xf3, 0xe7, 0x17, 0xd7, 0xe9, 0x3c, 0x28, 0x7d, 0x45, 0x73, 0x39, 0xa5,
  0x4c, 0xcb, 0x8a, 0xf0, 0xa6, 0xd7, 0x59, 0x62, 0x6c, 0x5b, 0x2c, 0xe8,
  0x93, 0xe6, 0xaa, 0x04, 0x9d, 0x14, 0xce, 0xcf, 0xff, 0x74, 0x7a, 0xf8,
  0xc5, 0x0b, 0x30, 0xb2, 0x3f, 0x22, 0xc7, 0xbe, 0x6e, 0xf1, 0xb5, 0x04,
  0xcd, 0xac, 0x83, 0x35, 0xfc, 0xf0, 0xfa, 0x68, 0x7c, 0x7a, 0x7c, 0xf2,
  0xea, 0x8b, 0x17, 0x3f, 0xc0, 0xa6, 0x34, 0xc2, 0xe3, 0xce, 0x7b, 0xd7,
  0xfe, 0xcc, 0xa2, 0xc5, 0x87, 0xc0, 0x09, 0x87, 0xdf, 0x7f, 0x38, 0x7c,
  0xf7, 0xdd, 0x17, 0x2f, 0xae, 0xd3, 0x6a, 0x80, 0xf5, 0xf1, 0xdb, 0x3d,
  0xbd, 0x1b, 0x5b, 0xa4, 0x06, 0xf5, 0x7c, 0x32, 0xff, 0x58, 0xe7, 0x7f,
  0xcb, 0x12, 0xf3, 0xfa, 0x7c, 0x15, 0xc2, 0x35, 0x9f, 0x4b, 0x3f, 0x20,
  0x23, 0xbb, 0x61, 0x0e, 0x7d, 0x75, 0xfc, 0x2d, 0x20, 0x41, 0xad, 0x9f,
  0x74, 0xc1, 0x0d, 0x68, 0x92, 0x3f, 0x3e, 0xd9, 0xdb, 0xdf, 0x76, 0x6d,
  0x0f, 0x09, 0x52, 0xd8, 0xcc, 0xf8, 0x63, 0x50, 0x1d, 0xf2, 0x37, 0xa9,
  0x73, 0x71, 0x5d, 0x40, 0x1a, 0x67, 0x51, 0x91, 0xc0, 0x50, 0x97, 0x13,
  0xa1, 0x02, 0x50, 0xfe, 0x2b, 0xba, 0x46, 0x56, 0x04, 0xaf, 0x14, 0x78,
  0xdc, 0xce, 0xdf, 0x78, 0x58, 0x1e, 0x5f, 0x39, 0xd2, 0x33, 0xd3, 0x11,
  0xaf, 0xdd, 0x5a, 0xf9, 0xf8, 0x09, 0x63, 0x39, 0x5d, 0x93, 0x92, 0x36,
  0xdb, 0x88, 0x34, 0xa1, 0x9f, 0xf8, 0x3e, 0x7b, 0x39, 0x3e, 0x54, 0xe9,
  0x52, 0x32, 0x06, 0x1d, 0xad, 0x52, 0x09, 0x4f, 0x4b, 0xa7, 0xef, 0xf1,
  0xe1, 0xe5, 0x0b, 0xd4, 0x58, 0x66, 0x75, 0xa2, 0xfe, 0x1d, 0xcf, 0x7b,
  0x33, 0xcf, 0x2e, 0xd3, 0xe9, 0x9d, 0x45, 0xd2, 0xa5, 0x03, 0x99, 0x75,
  0x6f, 0x27, 0x79, 0xf8, 0xa6, 0x30, 0xe6, 0x8c, 0x08, 0xbe, 0x24, 0xf6,
  0xcc, 0x90, 0x11, 0xe6, 0xba, 0x5a, 0xa7, 0x0f, 0x4f, 0xcd, 0x82, 0x62,
  0x5d, 0xbb, 0xa7, 0x8f, 0xdb, 0x1e, 0xf3, 0xbf, 0xd1, 0x25, 0x07, 0xda,
  0x10, 0x39, 0x65, 0x5f, 0xe0, 0xaf, 0x71, 0xbc, 0x71, 0xea, 0x53, 0x44,
  0x6e, 0x0b, 0xee, 0xbb, 0xcb, 0xe0, 0xee, 0x58, 0xb6, 0xc5, 0x89, 0x93,
  0xf6, 0x1d, 0x80, 0xad, 0x6e, 0x9c, 0x3b, 0x3d, 0x8e, 0xe5, 0x65, 0x9d,
  0xda, 0x86, 0x3c, 0x33, 0xdb, 0xf2, 0xa7, 0x67, 0x3c, 0x5b, 0x88, 0x88,
  0xdf, 0x47, 0x1c, 0x9b, 0x92, 0x8c, 0xf0, 0x02, 0x63, 0x81, 0x25, 0x42,
  0x27, 0x31, 0x3b, 0xf5, 0x47, 0x8d, 0xfa, 0x50, 0x87, 0x97, 0x52, 0x10,
  0xa8, 0xb8, 0xc4, 0xa6, 0x76, 0xa5, 0x73, 0x7b, 0x8b, 0x3b, 0xd4, 0x07,
  0xb2, 0xa1, 0xa6, 0xac, 0x6b, 0xf7, 0xf4, 0x71, 0xdb, 0x63, 0xfe, 0x37,
  0xba, 0xe4, 0x40, 0x1b, 0x22, 0xa7, 0xec, 0x0b, 0xfc, 0x35, 0x8e, 0x37,
  0x4e, 0x7d, 0x8a, 0xc8, 0x6d, 0xc1, 0x7d, 0x77, 0x19, 0xdc, 0x1d, 0xcb,
  0xb6, 0x38, 0x71, 0xd2, 0xbe, 0x03, 0xb0, 0xd5, 0x8d, 0x73, 0xa7, 0xc7,
  0xb1, 0xbc, 0xac, 0x53, 0xdb, 0x90, 0x67, 0x66, 0x5b, 0xfe, 0xf4, 0x8c,
  0xa6, 0xe8, 0x21, 0x46, 0xcc, 0xa8, 0x43, 0xb8, 0x01, 0xce, 0x6e, 0x57,
  0xc7, 0x01, 0x27, 0x68, 0x20, 0xa4, 0x66, 0xe1, 0x73, 0xcd, 0x34, 0x6b,
  0xd5, 0x4a, 0x51, 0xec, 0x45, 0x66, 0xba, 0x03, 0xd8, 0x8c, 0xd4, 0x5c,
  0x7b, 0xd5, 0x49, 0x0a, 0x7c, 0xcc, 0x2b, 0x93, 0x74, 0x04, 0x9a, 0xd0,
  0xd6, 0x02, 0x0b, 0x11, 0x1c, 0x76, 0x06, 0xbd, 0xef, 0xeb, 0x5c, 0xdd,
  0x91, 0x52, 0x66, 0x4c, 0x8c, 0x20, 0x12, 0x8a, 0x64, 0x12, 0x97, 0x9f,
  0x77, 0x76, 0x23, 0x52, 0x65, 0xd9, 0x70, 0x12, 0x7f, 0x57, 0x44, 0x01,
  0x3c, 0x59, 0x53, 0xe7, 0x5b, 0x23, 0xf8, 0x6d, 0xb9, 0xb6, 0x86, 0xae,
  0xa7, 0x51, 0xde, 0x58, 0x95, 0x2d, 0x02, 0x2d, 0x62, 0x01, 0x9e, 0x2d,
  0x40, 0x15, 0xbb, 0x3e, 0x95, 0x3e, 0x84, 0x22, 0xf0, 0xb1, 0x1d, 0x2e,
  0x71, 0x53, 0x16, 0x94, 0x47, 0x4a, 0x6c, 0x83, 0xc1, 0x8a, 0xec, 0xc6,
  0x1f, 0xcc, 0xd9, 0x1d, 0x76, 0xc0, 0x4f, 0xe9, 0xed, 0x36, 0x36, 0x13,
  0xea, 0x72, 0x92, 0x17, 0xdf, 0x1f, 0x9e, 0x8d, 0x8f, 0x4e, 0xde, 0xfd,
  0x31, 0x6a, 0x0e, 0xcb, 0x2f, 0x6d, 0xc7, 0x2b, 0xad, 0xe8, 0x73, 0x6d,
  0x87, 0xe0, 0x05, 0x53, 0x5f, 0x0b, 0x77, 0xaf, 0xc9, 0x0b, 0x3c, 0x12,
  0x74, 0x33, 0x9a, 0x66, 0xcb, 0x86, 0xf4, 0x25, 0xb5, 0xa5, 0x5d, 0x67,
  0x45, 0xea, 0x77, 0x41, 0x36, 0xdc, 0xee, 0x40, 0xff, 0xb6, 0x67, 0xff,
  0xb6, 0x1f, 0x81, 0xb3, 0xe2, 0xdf, 0x3c, 0x0a, 0x36, 0x28, 0x9e, 0xb0,
  0xe3, 0xc5, 0xcb, 0x57, 0x4b, 0xae, 0x06, 0x03, 0x68, 0x03, 0x03, 0xbc,
  0xf8, 0x0b, 0x08, 0xf0, 0xe9, 0xd1, 0xf9, 0xd4, 0x7f, 0xd1, 0x3c, 0x7c,
  0xbd, 0xe7, 0x55, 0xb0, 0xd8, 0xe7, 0xf6, 0x62, 0xcf, 0xed, 0x85, 0xcf,
  0xed, 0xc7, 0x9e, 0xdb, 0x0f, 0x9f, 0x7b, 0x14, 0x7b, 0xce, 0x5b, 0xaf,
  0x67, 0xc6, 0xcb, 0xce, 0xad, 0xb3, 0x8c, 0x5b, 0xff, 0x7a, 0x34, 0x72,
  0xc7, 0xff, 0x99, 0xf5, 0x56, 0x74, 0x7b, 0x76, 0x7a, 0x86, 0xbd, 0xda,
  0xf5, 0xfd, 0x66, 0xfd, 0xcb, 0x4e, 0x4b, 0x70, 0xa3, 0x26, 0x76, 0x5c,
  0xcc, 0xe6, 0x7b, 0x7b, 0x8f, 0x86, 0xd3, 0x7c, 0x79, 0x05, 0xa9, 0xf3,
  0x42, 0x5b, 0x58, 0x61, 0xf3, 0xb1, 0x58, 0xf9, 0xc5, 0x0a, 0x26, 0x79,
  0xa8, 0x87, 0x1c, 0x8f, 0xb7, 0x13, 0x0f, 0x97, 0x45, 0xa0, 0x08, 0xe9,
  0x95, 0x84, 0xdf, 0x71, 0xa8, 0x2c, 0xa1, 0x83, 0x39, 0x28, 0x75, 0xb1,
  0x67, 0x0b, 0x11, 0xf1, 0xfb, 0x88, 0x63, 0x53, 0x92, 0x11, 0x5e, 0x60,
  0x2c, 0xb0, 0x44, 0xe8, 0x24, 0x66, 0xa7, 0xfe, 0xa8, 0x51, 0x1f, 0xea,
  0xf0, 0x52, 0x0a, 0xc2, 0x14, 0x3d, 0xc4, 0x88, 0x19, 0x75, 0x08, 0x37,
  0xc0, 0xd9, 0xed, 0xea, 0x38, 0xe0, 0x04, 0x0d, 0x84, 0xd4, 0x2c, 0x7c,
  0xae, 0x99, 0x66, 0xad, 0x5a, 0x29, 0x8a, 0xbd, 0xc8, 0x4c, 0x77, 0x00,
  0x9b, 0x91, 0x9a, 0x6b, 0xaf, 0x3a, 0x49, 0x81, 0x8f, 0x79, 0x65, 0x92,
  0x8e, 0x40, 0x13, 0xda, 0x5a, 0x60, 0x21, 0x82, 0xc3, 0xce, 0xa0, 0xf7,
  0x7d, 0x9d, 0xab, 0x3b, 0x52, 0xca, 0x8c, 0x89, 0x11, 0x44, 0x42, 0x91,
  0x4c, 0xe2, 0xf2, 0xf3, 0xce, 0x6e, 0x44, 0xaa, 0x2c, 0x1b, 0x4e, 0xe2,
  0xef, 0x8a, 0x28, 0x80, 0x27, 0x6b, 0xea, 0x7c, 0x6b, 0x04, 0xbf, 0x2d,
  0xd7, 0xd6, 0xd0, 0xf5, 0x34, 0xca, 0x1b, 0xab, 0xb2, 0x45, 0xa0, 0x45,
  0x2c, 0xc0, 0xb3, 0x05, 0xa8, 0x62, 0xd7, 0xa7, 0xd2, 0x87, 0x50, 0x04,
  0x3e, 0xb6, 0xc3, 0x25, 0x6e, 0xca, 0x82, 0xf2, 0x48, 0x89, 0x6d, 0x30,
  0x58, 0x91, 0xdd, 0xf8, 0x83, 0x39, 0xbb, 0xc3, 0x0e, 0xf8, 0x29, 0xbd,
  0xdd, 0xc6, 0x66, 0x42, 0x5d, 0x4e, 0xf2, 0xe2, 0xbb, 0xc3, 0xb3, 0xf1,
  0xd1, 0xc9, 0xbb, 0x3f, 0x46, 0xcd, 0x61, 0xf9, 0xa5, 0xed, 0x78, 0xa5,
  0x15, 0x7d, 0xae, 0xed, 0x10, 0xbc, 0x60, 0xea, 0x6b, 0xe1, 0xee, 0x35,
  0x79, 0x81, 0x47, 0x82, 0x6e, 0x46, 0xd3, 0x6c, 0xd9, 0x90, 0xbe, 0xa4,
  0xb6, 0xb4, 0xeb, 0xac, 0x48, 0xfd, 0x2e, 0xc8, 0x86, 0xdb, 0x1d, 0xe8,
  0xdf, 0xf6, 0xec, 0xdf, 0xf6, 0x23, 0x70, 0x56, 0xfc, 0x9b, 0x47, 0xc1,
  0x06, 0xc5, 0x13, 0x76, 0xbc, 0x78, 0xf9, 0x6a, 0xc9, 0xd5, 0x60, 0x00,
  0x6d, 0x60, 0x80, 0x17, 0x7f, 0x01, 0x01, 0x3e, 0x3d, 0x3a, 0x9f, 0xfa,
  0x2f, 0x9a, 0x87, 0xaf, 0xf7, 0xbc, 0x0a, 0x16, 0xfb, 0xdc, 0x5e, 0xec,
  0xb9, 0xbd, 0xf0, 0xb9, 0xfd, 0xd8, 0x73, 0xfb, 0xe1, 0x73, 0x8f, 0x62,
  0xcf, 0x79, 0xeb, 0xf5, 0xcc, 0x78, 0xd9, 0xb9, 0x75, 0x96, 0x71, 0xeb,
  0x5f, 0x8f, 0x46, 0xee, 0xf8, 0x3f, 0xb3, 0xde, 0x8a, 0x6e, 0xcf, 0x4e,
  0xcf, 0xb0, 0x57, 0xbb, 0xbe, 0xdf, 0xac, 0x7f, 0xd9, 0x69, 0x09, 0x6e,
  0xee, 0x1b, 0xf3, 0x9e, 0x4c, 0x80, 0x49, 0x57, 0x67, 0xa5, 0xd3, 0x94,
  0xb1, 0x19, 0x3d, 0x54, 0x43, 0xef, 0x5d, 0xd7, 0x2e, 0x61, 0xf9, 0xeb,
  0x2b, 0x8a, 0xe5, 0x85, 0x1e, 0x54, 0x45, 0x67, 0x75, 0x3c, 0x9c, 0x55,
  0xb9, 0xcb, 0x22, 0x26, 0x2a, 0xdf, 0x9f, 0x1d, 0x07, 0xaa, 0xa5, 0x6d,
  0xc7, 0x4e, 0xad, 0x96, 0xaf, 0xd2, 0xdb, 0xdb, 0x51, 0x9d, 0xed, 0x18,
  0x7e, 0x52, 0xef, 0x90, 0xbf, 0x57, 0x3e, 0x7d, 0xd5, 0x2c, 0xe6, 0x9f,
  0x96, 0x61, 0x20, 0x1d, 0x0d, 0x8a, 0xac, 0x11, 0xb7, 0xe6, 0xbf, 0x7f,
  0x0c, 0x0b, 0x4b, 0x69, 0xc5, 0xdd, 0xa4, 0x35, 0x68, 0xbe, 0x28, 0x78,
  0xe2, 0x86, 0xdc, 0xfc, 0x35, 0xdb, 0x5f, 0x50, 0x9b, 0xbd, 0xf7, 0x94,
  0xd4, 0xc4, 0x8e, 0x8b, 0xd9, 0x7c, 0x6f, 0xef, 0xd1, 0x70, 0x9a, 0x2f,
  0xaf, 0x20, 0x75, 0x5e, 0x68, 0x0b, 0x2b, 0x6c, 0x3e, 0x16, 0x2b, 0xbf,
  0x58, 0xc1, 0x24, 0x0f, 0xf5, 0x90, 0xe3, 0xf1, 0x76, 0xe2, 0xe1, 0xb2,
  0x08, 0x14, 0x21, 0xbd, 0x92, 0xf0, 0x3b, 0x0e, 0x95, 0x25, 0x74, 0x30,
  0x07, 0xa5, 0x2e, 0xd6, 0x7d, 0x63, 0xde, 0x93, 0x09, 0x30, 0xe9, 0xea,
  0xac, 0x74, 0x9a, 0x32, 0x36, 0xa3, 0x87, 0x6a, 0xe8, 0xbd, 0xeb, 0xda,
  0x25, 0x2c, 0x7f, 0x7d, 0x45, 0xb1, 0xbc, 0xd0, 0x83, 0xaa, 0xe8, 0xac,
  0x8e, 0x87, 0xb3, 0x2a, 0x77, 0x59, 0xc4, 0x44, 0xe5, 0xfb, 0xb3, 0xe3,
  0x40, 0xb5, 0xb4, 0xed, 0xd8, 0xa9, 0xd5, 0xf2, 0x55, 0x7a, 0x7b, 0x3b,
  0xaa, 0xb3, 0x1d, 0xc3, 0x4f, 0xea, 0x1d, 0xf2, 0xf7, 0xca, 0xa7, 0xaf,
  0x9a, 0xc5, 0xfc, 0xd3, 0x32, 0x0c, 0xa4, 0xa3, 0x41, 0x91, 0x35, 0xe2,
  0xd6, 0xfc, 0xf7, 0x8f, 0x61, 0x61, 0x29, 0xad, 0xb8, 0x9b, 0xb4, 0x06,
  0xff, 0x12, 0x8f, 0xd8, 0x18, 0x9f, 0x9d, 0x6e, 0x0c, 0x24, 0x52, 0x6d,
  0xbe, 0x30, 0x34, 0xff, 0x4e, 0xc8, 0xc2, 0x42, 0x0b, 0x8d, 0x27, 0x8f,
  0x25, 0xa9, 0x8c, 0xe7, 0xc8, 0x8d, 0xa4, 0xc2, 0xd0, 0x09, 0xfd, 0xd2,
  0x25, 0xd6, 0x55, 0xad, 0x66, 0x37, 0xc6, 0xf6, 0x69, 0x2f, 0x90, 0xb3,
  0x5d, 0x06, 0x9c, 0xc1, 0xb0, 0x46, 0xa5, 0x71, 0xd8, 0x6e, 0x68, 0x72,
  0x8e, 0x79, 0x8e, 0x3a, 0xde, 0xf1, 0xb2, 0xfa, 0x28, 0x78, 0xff, 0xe2,
  0xe3, 0xa7, 0x8b, 0x15, 0xb4, 0x60, 0x6d, 0x5d, 0x34, 0xeb, 0x16, 0x14,
  0xdf, 0xa2, 0x5d, 0xb3, 0x6c, 0xd8, 0x20, 0x91, 0x3b, 0xd0, 0xd7, 0x67,
  0x54, 0x5a, 0x7f, 0x42, 0x3b, 0xf9, 0xa6, 0x58, 0xe1, 0x50, 0x68, 0x20,
  0x1d, 0x47, 0x86, 0xb9, 0x07, 0x8f, 0xe2, 0x71, 0xe7, 0xf4, 0x75, 0xf3,
  0x22, 0xc7, 0xee, 0x3a, 0x8b, 0xd3, 0x21, 0x91, 0x3e, 0xaf, 0x90, 0x7b,
  0x11, 0x92, 0x10, 0x58, 0xac, 0xde, 0x4a, 0x2a, 0xc5, 0x8f, 0xf0, 0x4e,
  0x64, 0xa4, 0x81, 0x27, 0x61, 0x51, 0xee, 0xac, 0x3d, 0xcc, 0xfb, 0xfb,
  0x17, 0xe4, 0xaf, 0x87, 0xde, 0x8e, 0x26, 0x1b, 0x63, 0x49, 0x9a, 0x8c,
  0xf9, 0xa0, 0x05, 0x39, 0x40, 0xb3, 0xde, 0x25, 0x69, 0x70, 0xbe, 0xbd,
  0x28, 0xb7, 0x2a, 0x6f, 0x59, 0x8e, 0x4a, 0xb1, 0xb4, 0x80, 0xf4, 0x1e,
  0xb4, 0xd0, 0xd6, 0x4a, 0x21, 0x1e, 0xa2, 0x4c, 0x35, 0xe2, 0xed, 0xf6,
  0xc4, 0x21, 0x89, 0x3f, 0xb3, 0x7a, 0xd6, 0x8a, 0x19, 0x3e, 0x63, 0x4d,
  0x45, 0x01, 0x85, 0xb7, 0xc4, 0xed, 0x8d, 0x51, 0xb4, 0x57, 0xc1, 0x9a,
  0x3a, 0xd8, 0x50, 0x48, 0x40, 0x76, 0xc5, 0xf9, 0xff, 0xbd, 0x73, 0xdd,
  0xeb, 0xcc, 0xf5, 0x5f, 0x30, 0xd5, 0xfd, 0x5f, 0xb7, 0xab, 0xfb, 0xff,
  0x05, 0xbb, 0xfa, 0xe8, 0x57, 0xee, 0xea, 0xa3, 0xdf, 0x7c, 0x57, 0x5d,
  0x03, 0x65, 0x95, 0x8f, 0x79, 0xbb, 0x23, 0x0a, 0x27, 0x5f, 0xa3, 0xf7,
  0xee, 0x04, 0xea, 0xa1, 0xa8, 0x09, 0x28, 0x3d, 0xcf, 0xa8, 0x95, 0x6c,
  0x67, 0xe5, 0x8d, 0x45, 0xcd, 0xb0, 0xf8, 0xef, 0xe2, 0x78, 0x16, 0x2c,
  0xcd, 0x17, 0x05, 0x4f, 0xdc, 0x90, 0x9b, 0xbf, 0x66, 0xfb, 0x0b, 0x6a,
  0xb3, 0xf7, 0x9e, 0xf2, 0x5f, 0xe2, 0x11, 0x1b, 0xe3, 0xb3, 0xd3, 0x8d,
  0x81, 0x44, 0xaa, 0xcd, 0x17, 0x86, 0xe6, 0xdf, 0x09, 0x59, 0x58, 0x68,
  0xa1, 0xf1, 0xe4, 0xb1, 0x24, 0x95, 0xf1, 0x1c, 0xb9, 0x91, 0x54, 0x18,
  0x3a, 0xa1, 0x5f, 0xba, 0xc4, 0xba, 0xaa, 0xd5, 0xec, 0xc6, 0xd8, 0x3e,
  0xed, 0x05, 0x72, 0xb6, 0xcb, 0x80, 0x33, 0x18, 0xd6, 0xa8, 0x34, 0x0e,
  0xdb, 0x0d, 0x4d, 0xce, 0x31, 0xcf, 0x51, 0xc7, 0x3b, 0x5e, 0x56, 0x1f,
  0x05, 0xef, 0x5f, 0x7c, 0xfc, 0x74, 0xb1, 0x82, 0x16, 0xac, 0xad, 0x8b,
  0x66, 0xdd, 0x82, 0xe2, 0x5b, 0xb4, 0x6b, 0x96, 0x0d, 0x1b, 0x24, 0x72,
  0x07, 0xfa, 0xfa, 0x8c, 0x4a, 0xeb, 0x4f, 0x68, 0x27, 0x5f, 0x17, 0x2b,
  0x1c, 0x0a, 0x0d, 0xa4, 0xe3, 0xc8, 0x30, 0xf7, 0xe0, 0x51, 0x3c, 0xee,
  0x9c, 0xbe, 0x6e, 0x5e, 0xe4, 0xd8, 0x5d, 0x67, 0x71, 0x3a, 0x24, 0xd2,
  0xe7, 0x15, 0x72, 0x2f, 0x42, 0x12, 0x02, 0x8b, 0xd5, 0x5b, 0x49, 0xa5,
  0xf8, 0x11, 0xde, 0x89, 0x8c, 0x34, 0xf0, 0x24, 0x2c, 0xca, 0x9d, 0xb5,
  0x87, 0x79, 0x7f, 0xff, 0x82, 0xfc, 0xf5, 0xd0, 0xdb, 0xd1, 0x64, 0x63,
  0x2c, 0x49, 0x93, 0x31, 0x1f, 0xb4, 0x20, 0x07, 0x68, 0xd6, 0xbb, 0x24,
  0x0d, 0xce, 0xb7, 0x17, 0xe5, 0x56, 0xe5, 0x2d, 0xcb, 0x51, 0x29, 0x96,
  0x16, 0x90, 0xde, 0x83, 0x16, 0xda, 0x5a, 0x29, 0xc4, 0x43, 0x94, 0xa9,
  0x46, 0xbc, 0xdd, 0x9e, 0x38, 0x24, 0xf1, 0x67, 0x56, 0xcf, 0x5a, 0x31,
  0xc3, 0x67, 0xac, 0xa9, 0x28, 0xa0, 0xf0, 0x96, 0xb8, 0xbd, 0x31, 0x8a,
  0xf6, 0x2a, 0x58, 0x53, 0x07, 0x1b, 0x0a, 0x09, 0xc8, 0xae, 0x38, 0xff,
  0xbf, 0x77, 0xae, 0x7b, 0x9d, 0xb9, 0xfe, 0x0b, 0xa6, 0xba, 0xff, 0xcb,
  0x76, 0x75, 0xff, 0xbf, 0x60, 0x57, 0x1f, 0xfd, 0xc2, 0x5d, 0x7d, 0xf4,
  0xab, 0xef, 0xaa, 0x6b, 0xa0, 0xac, 0xf2, 0x31, 0x6f, 0x77, 0x44, 0xe1,
  0xe4, 0x6b, 0xf4, 0xde, 0x9d, 0x40, 0x3d, 0x14, 0x35, 0x01, 0xa5, 0xe7,
  0x5e, 0x30, 0xfb, 0xaf, 0x4b, 0xd8, 0x4d, 0x86, 0x27, 0x0e, 0x92, 0x77,
  0xe3, 0x31, 0x27, 0x1b, 0x8c, 0x29, 0x60, 0xd2, 0xb5, 0xa4, 0xe1, 0x82,
  0x20, 0xcd, 0x66, 0x0b, 0x02, 0xf3, 0xc4, 0xcc, 0xd0, 0x11, 0x16, 0xbf,
  0xb7, 0x48, 0xa7, 0xf8, 0xf1, 0xee, 0x68, 0xcf, 0x6d, 0xce, 0xf6, 0x2f,
  0x80, 0xb9, 0x71, 0xd1, 0x8c, 0xa8, 0xce, 0x1d, 0x01, 0xa4, 0x45, 0x7c,
  0x16, 0xf2, 0xb9, 0x7d, 0x34, 0xb7, 0x42, 0x3d, 0xaa, 0xce, 0xf4, 0x43,
  0x9f, 0x52, 0x7f, 0x1b, 0x09, 0x48, 0x61, 0x0c, 0xeb, 0x36, 0xa1, 0xc8,
  0x2b, 0xa3, 0x34, 0x84, 0x17, 0xbf, 0xeb, 0xb2, 0xe7, 0x16, 0xd4, 0xbf,
  0x34, 0x9e, 0xe4, 0xc5, 0x6e, 0xfe, 0xcb, 0xe2, 0x49, 0x0f, 0xd2, 0x8a,
  0xfd, 0x2b, 0x53, 0x0d, 0xb5, 0x71, 0x4c, 0x1c, 0x9d, 0xd6, 0xb9, 0x13,
  0x90, 0xff, 0x4f, 0xc0, 0x55, 0x33, 0x26, 0x1d, 0xc4, 0xd7, 0x0f, 0xe5,
  0x19, 0xb5, 0x92, 0xed, 0xac, 0xbc, 0xb1, 0xa8, 0x19, 0x16, 0xff, 0x5d,
  0x1c, 0xcf, 0x82, 0xc5, 0x0b, 0x66, 0xff, 0x55, 0x09, 0xbb, 0xc9, 0xf0,
  0xc4, 0x41, 0xf2, 0x6e, 0x3c, 0xe6, 0x64, 0x83, 0x31, 0x05, 0x4c, 0xba,
  0x96, 0x34, 0x5c, 0x10, 0xa4, 0xd9, 0x6c, 0x41, 0x60, 0x9e, 0x98, 0x19,
  0x3a, 0xc2, 0xe2, 0xf7, 0x16, 0xe9, 0x14, 0x3f, 0xde, 0x1d, 0xed, 0xb9,
  0xcd, 0xd9, 0xfe, 0x19, 0x30, 0x37, 0x2e, 0x9a, 0x11, 0xd5, 0xb9, 0x23,
  0x80, 0xb4, 0x88, 0xcf, 0x42, 0x3e, 0xb7, 0x8f, 0xe6, 0x56, 0xa8, 0x47,
  0xd5, 0x99, 0x7e, 0xe8, 0x53, 0xea, 0x6f, 0x23, 0x01, 0x29, 0x8c, 0x61,
  0xdd, 0x26, 0x14, 0x79, 0x65, 0x94, 0x86, 0xf0, 0xe2, 0x77, 0x5d, 0xf6,
  0xdc, 0x82, 0xfa, 0xe7, 0xc6, 0x93, 0xbc, 0xd8, 0xcd, 0x7f, 0x59, 0x3c,
  0xe9, 0x41, 0x5a, 0xb1, 0x7f, 0x65, 0xaa, 0xa1, 0x36, 0x8e, 0x89, 0xa3,
  0xd3, 0x3a, 0x77, 0x02, 0xf2, 0xff, 0x09, 0xb8, 0x6a, 0xc6, 0xa4, 0x83,
  0x5d, 0xe7, 0xd5, 0xe7, 0xac, 0x8d, 0x10, 0x5d, 0xa2, 0xd4, 0x5c, 0x5b,
  0x8b, 0xa7, 0xa0, 0x05, 0xed, 0xbc, 0xca, 0x9a, 0x29, 0x6e, 0x55, 0xe8,
  0x67, 0x5c, 0x65, 0x38, 0x21, 0xbb, 0x84, 0x7d, 0x8b, 0x33, 0xc6, 0xfd,
  0xc8, 0xef, 0x93, 0x11, 0x4f, 0xdb, 0xeb, 0x4d, 0xa7, 0xd9, 0x30, 0xad,
  0xa7, 0x79, 0x1e, 0x6f, 0x5c, 0xa7, 0xd1, 0x1f, 0x84, 0xdb, 0xc9, 0x6f,
  0x87, 0x1e, 0xd9, 0xf0, 0xb4, 0x6b, 0x1f, 0xda, 0xbc, 0x10, 0x24, 0x0c,
  0x4c, 0xb7, 0x5c, 0x35, 0x97, 0xa5, 0xba, 0xf0, 0x06, 0x11, 0x77, 0x00,
  0xf8, 0xfa, 0xa1, 0xbc, 0xeb, 0xbc, 0xfa, 0x9c, 0xb5, 0x11, 0xa2, 0x4b,
  0x94, 0x9a, 0x6b, 0x6b, 0xf1, 0x14, 0xb4, 0xa0, 0x9d, 0x57, 0x59, 0x33,
  0xc5, 0xad, 0x0a, 0xfd, 0x8c, 0xab, 0x0c, 0x27, 0x64, 0x97, 0xb0, 0x6f,
  0x71, 0xc6, 0xb8, 0x1f, 0xf9, 0x7d, 0x32, 0xe2, 0x69, 0x7b, 0xbd, 0xe9,
  0x34, 0x1b, 0xa6, 0xf5, 0x34, 0xcf, 0xe3, 0x8d, 0xeb, 0x34, 0xfa, 0x83,
  0x70, 0x3b, 0xf9, 0xed, 0xd0, 0x23, 0x1b, 0x9e, 0x76, 0xed, 0x43, 0x9b,
  0x7c, 0xf1, 0x74, 0xc4, 0xe6, 0x74, 0xa6, 0x55, 0xbe, 0x24, 0x94, 0x3d,
  0xbf, 0xe9, 0xcd, 0xc0, 0xf6, 0x84, 0x25, 0x13, 0x5b, 0x62, 0x26, 0xdc,
  0x22, 0xf5, 0x7d, 0x80, 0x40, 0xb0, 0x31, 0xdc, 0x80, 0x33, 0xc3, 0xf6,
  0x0a, 0x31, 0xef, 0x02, 0x1b, 0xd5, 0x8b, 0x56, 0x70, 0xbf, 0xed, 0xfe,
  0xe0, 0x9b, 0x3a, 0x2f, 0x0d, 0x09, 0xdd, 0x29, 0xfe, 0x26, 0xc1, 0xa1,
  0x6b, 0x50, 0x02, 0x2a, 0xa2, 0xb9, 0x83, 0x70, 0xaa, 0x95, 0x52, 0x9f,
  0x7f, 0x95, 0xdd, 0x72, 0xf5, 0x58, 0xa8, 0x6c, 0x8a, 0x7a, 0x7b, 0x45,
  0xdd, 0x69, 0xf0, 0xec, 0xcb, 0xf1, 0xab, 0xa3, 0xa3, 0x56, 0xad, 0x19,
  0x36, 0x8f, 0xc1, 0xfb, 0x08, 0x10, 0xa0, 0x06, 0x88, 0x21, 0x42, 0x35,
  0x17, 0x82, 0x84, 0x81, 0xe9, 0x96, 0xab, 0xe6, 0xb2, 0x54, 0x17, 0xde,
  0x20, 0xe2, 0x0e, 0x80, 0x2f, 0x9e, 0x8e, 0xd8, 0x9c, 0xce, 0xb4, 0xca,
  0x97, 0x84, 0xb2, 0xe7, 0x37, 0xbd, 0x19, 0xd8, 0x9e, 0xb0, 0x64, 0x62,
  0x4b, 0xcc, 0x84, 0x5b, 0xa4, 0xbe, 0x0f, 0x10, 0x08, 0x36, 0x86, 0x1b,
  0x70, 0x66, 0xd8, 0x5e, 0x21, 0xe6, 0x5d, 0x60, 0xa3, 0x7a, 0xd1, 0x0a,
  0xee, 0xb7, 0xdd, 0x1f, 0x7c, 0x53, 0xe7, 0xa5, 0x21, 0xa1, 0x3b, 0xc5,
  0xdf, 0x24, 0x38, 0x74, 0x0d, 0x4a, 0x40, 0x45, 0x34, 0x77, 0x10, 0x4e,
  0xb5, 0x52, 0xea, 0xf3, 0xaf, 0xb2, 0x5b, 0xae, 0x1e, 0x0b, 0x95, 0x4d,
  0x51, 0x6f, 0xaf, 0xa8, 0x3b, 0x0d, 0x9e, 0x7d, 0x39, 0x7e, 0x75, 0x74,
  0xb1, 0xd8, 0x1b, 0x77, 0xc2, 0x32, 0xd7, 0x8f, 0xfc, 0xad, 0x86, 0x13,
  0xe4, 0xda, 0xa7, 0x2c, 0xe5, 0xbc, 0x8e, 0x55, 0x61, 0xa6, 0x99, 0x03,
  0x5a, 0xe6, 0x6a, 0xb5, 0x48, 0x8b, 0x4f, 0x0f, 0x9e, 0x11, 0x4f, 0xe1,
  0x96, 0xdd, 0xe2, 0x7b, 0xe5, 0xc7, 0x77, 0x42, 0x5a, 0x8b, 0xc0, 0x8e,
  0x9f, 0x56, 0xd2, 0x94, 0x8a, 0x71, 0x62, 0x04, 0x37, 0x1c, 0x5d, 0x93,
  0x81, 0xe2, 0xc5, 0x23, 0x9b, 0xb5, 0x6a, 0xc8, 0x88, 0x21, 0x79, 0x85,
  0x91, 0x44, 0x9a, 0x53, 0x8b, 0xf3, 0x7c, 0x6d, 0x8d, 0xcc, 0x5e, 0x57,
  0x54, 0xd2, 0x47, 0xfe, 0x95, 0x37, 0xc0, 0xbf, 0x00, 0xf7, 0xd2, 0xbf,
  0x5c, 0x80, 0x9e, 0x1b, 0x40, 0xf9, 0xf1, 0xae, 0xc5, 0xce, 0xfd, 0x97,
  0x80, 0xfc, 0x0b, 0x1b, 0xbf, 0xdf, 0x88, 0x03, 0xd3, 0x3f, 0xe0, 0x26,
  0xb5, 0x60, 0x17, 0xfe, 0xb5, 0x94, 0x16, 0xc1, 0x81, 0xf0, 0x98, 0x98,
  0x7f, 0xa6, 0xab, 0x22, 0xbf, 0xa5, 0x34, 0x6e, 0xa3, 0x4a, 0xbc, 0x00,
  0x28, 0x7b, 0x0f, 0xe0, 0xf8, 0x2b, 0x56, 0x6c, 0x12, 0xcd, 0x4a, 0xa7,
  0x55, 0xbc, 0x37, 0x2f, 0x27, 0xb3, 0x72, 0x81, 0xa8, 0x3e, 0x8f, 0x31,
  0xf0, 0x91, 0x5f, 0x89, 0xad, 0x47, 0xb2, 0x02, 0x8a, 0xac, 0x81, 0xe1,
  0xb7, 0xd6, 0x9f, 0xdd, 0x8e, 0x11, 0x9c, 0x53, 0x87, 0xa7, 0x25, 0x52,
  0x85, 0xd7, 0xf4, 0x0f, 0x65, 0x37, 0xbf, 0x97, 0x98, 0xeb, 0x03, 0x86,
  0xc2, 0x7f, 0xed, 0xda, 0x8c, 0x08, 0xfd, 0x88, 0xd4, 0x27, 0xd0, 0xf9,
  0x58, 0x02, 0x83, 0xed, 0x8e, 0xe0, 0x7a, 0x8b, 0xe4, 0x5d, 0x7f, 0x24,
  0x75, 0xaf, 0x70, 0x41, 0x1b, 0xe9, 0xfb, 0x15, 0xca, 0xee, 0x4e, 0x93,
  0x93, 0x91, 0xd7, 0x6f, 0xb1, 0xd5, 0x83, 0x85, 0x50, 0x98, 0xf2, 0x39,
  0xc8, 0x7f, 0x47, 0x63, 0x9a, 0xf3, 0x30, 0xe3, 0xd6, 0x35, 0xf6, 0x60,
  0x56, 0x87, 0xf2, 0x0e, 0x8a, 0x6b, 0xe0, 0xdf, 0x04, 0xa0, 0xa2, 0xce,
  0xaa, 0xf6, 0x22, 0xa4, 0x59, 0x4f, 0x57, 0x7d, 0xf1, 0xa2, 0x4e, 0x57,
  0xe8, 0xf5, 0xaa, 0xf3, 0xaa, 0x98, 0x10, 0xdb, 0xdd, 0x7c, 0x35, 0x90,
  0xe5, 0x75, 0x2b, 0x88, 0x74, 0x7b, 0x17, 0xfd, 0x4c, 0xd4, 0x28, 0xc6,
  0xd4, 0xaa, 0x35, 0xc3, 0xe6, 0x31, 0x78, 0x1f, 0x01, 0x02, 0xd4, 0x00,
  0x31, 0x44, 0xa8, 0x26, 0x16, 0x7b, 0xe3, 0x4e, 0x58, 0xe6, 0xfa, 0x91,
  0xbf, 0xd5, 0x70, 0x82, 0x5c, 0xfb, 0x94, 0xa5, 0x9c, 0xd7, 0xb1, 0x2a,
  0xcc, 0x34, 0x73, 0x40, 0xcb, 0x5c, 0xad, 0x16, 0x69, 0xf1, 0xe9, 0xc1,
  0x33, 0xe2, 0x29, 0xdc, 0xb2, 0x5b, 0x7c, 0xaf, 0xfc, 0xf8, 0x4e, 0x48,
  0x6b, 0x11, 0xd8, 0xf1, 0xd3, 0x4a, 0x9a, 0x52, 0x31, 0x4e, 0x8c, 0xe0,
  0x86, 0xa3, 0x6b, 0x32, 0x50, 0xbc, 0x78, 0x64, 0xb3, 0x56, 0x0d, 0x19,
  0x31, 0x24, 0xaf, 0x30, 0x92, 0x48, 0x73, 0x6a, 0x71, 0x9e, 0xaf, 0xad,
  0x91, 0xd9, 0xeb, 0x8a, 0x4a, 0xfa, 0xc8, 0xbf, 0xf2, 0x06, 0xf8, 0x17,
  0xe0, 0x5e, 0xfa, 0x97, 0x0b, 0xd0, 0x73, 0x03, 0x28, 0x3f, 0xde, 0xb5,
  0xd8, 0xb9, 0xff, 0x12, 0x90, 0x7f, 0x61, 0xe3, 0x77, 0x1b, 0x71, 0x60,
  0xfa, 0x07, 0xdc, 0xa4, 0x16, 0xec, 0xc2, 0xbf, 0x96, 0xd2, 0x22, 0x38,
  0x10, 0x1e, 0x13, 0xf3, 0xcf, 0x74, 0x55, 0xe4, 0xb7, 0x94, 0xc6, 0x6d,
  0x54, 0x89, 0x17, 0x00, 0x65, 0xef, 0x01, 0x1c, 0x7f, 0xc5, 0x8a, 0x4d,
  0xa2, 0x59, 0xe9, 0xb4, 0x8a, 0xf7, 0xe6, 0xe5, 0x64, 0x56, 0x2e, 0x10,
  0xd5, 0xe7, 0x31, 0x06, 0x3e, 0xf2, 0x2b, 0xb1, 0xf5, 0x48, 0x56, 0x40,
  0x91, 0x35, 0x30, 0xfc, 0xd6, 0xfa, 0xb3, 0xdb, 0x31, 0x82, 0x73, 0xea,
  0xf0, 0xb4, 0x44, 0xaa, 0xf0, 0x9a, 0xfe, 0xa1, 0xec, 0xe6, 0xf7, 0x12,
  0x73, 0x7d, 0xc0, 0x50, 0xf8, 0xaf, 0x5d, 0x9b, 0x11, 0xa1, 0x1f, 0x91,
  0xfa, 0x04, 0x3a, 0x1f, 0x4b, 0x60, 0xb0, 0xdd, 0x11, 0x5c, 0x6f, 0x91,
  0xbc, 0xeb, 0x8f, 0xa4, 0xee, 0x15, 0x2e, 0x68, 0x23, 0x7d, 0xbf, 0x42,
  0xd9, 0xdd, 0x69, 0x72, 0x32, 0xf2, 0xfa, 0x2d, 0xb6, 0x7a, 0xb0, 0x10,
  0x0a, 0x53, 0x3e, 0x07, 0xf9, 0xef, 0x68, 0x4c, 0x73, 0x1e, 0x66, 0xdc,
  0xba, 0xc6, 0x1e, 0xcc, 0xea, 0x50, 0xde, 0x41, 0x71, 0x0d, 0xfc, 0x9b,
  0x00, 0x54, 0xd4, 0x59, 0xd5, 0x5e, 0x84, 0x34, 0xeb, 0xe9, 0xaa, 0x2f,
  0x5e, 0xd4, 0xe9, 0x0a, 0xbd, 0x5e, 0x75, 0x5e, 0x15, 0x13, 0x62, 0xbb,
  0xd5, 0x43, 0x89, 0x0d, 0xe0, 0xd1, 0x91, 0x9d, 0x63, 0x5b, 0x4b, 0xf2,
  0xc1, 0x72, 0x53, 0x5a, 0xa9, 0xe4, 0x0b, 0x70, 0x03, 0xf3, 0x79, 0x2b,
  0x5b, 0x7a, 0x25, 0x5d, 0xe9, 0xa4, 0x40, 0x63, 0xcb, 0x28, 0xeb, 0xac,
  0xb4, 0xf1, 0xe5, 0x01, 0xb4, 0xb9, 0x02, 0xcf, 0xf6, 0x83, 0x92, 0x46,
  0x41, 0x5d, 0xda, 0x69, 0x2b, 0xe0, 0x1c, 0x5b, 0xa9, 0x62, 0xb7, 0xc1,
  0x43, 0xbe, 0xad, 0x6a, 0xa7, 0xb9, 0xe1, 0x79, 0xe1, 0x93, 0x7b, 0xe0,
  0xd3, 0x96, 0xf6, 0x26, 0xc2, 0x96, 0x92, 0x97, 0x82, 0x99, 0x9b, 0xc1,
  0xcd, 0xd3, 0xfd, 0xce, 0xc8, 0xff, 0x0e, 0xa7, 0xc8, 0x6f, 0x07, 0x48,
  0xeb, 0x77, 0xdd, 0xde, 0xab, 0xf6, 0xdb, 0x98, 0xa7, 0x56, 0x82, 0xca,
  0xcc, 0x28, 0xa5, 0x10, 0xf9, 0x94, 0x14, 0x6e, 0x0c, 0x6f, 0x22, 0x95,
  0x26, 0xd3, 0x4b, 0x94, 0xd6, 0x4d, 0xf0, 0x79, 0xd2, 0x25, 0x81, 0xf3,
  0x2c, 0x85, 0xa3, 0x31, 0x46, 0x9e, 0xac, 0x16, 0x21, 0x1c, 0x06, 0x4e,
  0x0b, 0x7c, 0x34, 0xd4, 0xbd, 0x29, 0xda, 0xaa, 0xc3, 0x2f, 0x14, 0x02,
  0x9b, 0xaf, 0x06, 0xb2, 0xbc, 0x6e, 0x05, 0x91, 0x6e, 0xef, 0xa2, 0x9f,
  0x89, 0x1a, 0xc5, 0xb8, 0x7a, 0x28, 0xb1, 0x01, 0x3c, 0x3a, 0xb2, 0x73,
  0x6c, 0x6b, 0x49, 0x3e, 0x58, 0x6e, 0x4a, 0x2b, 0x95, 0x7c, 0x01, 0x6e,
  0x60, 0x3e, 0x6f, 0x65, 0x4b, 0xaf, 0xa4, 0x2b, 0x9d, 0x14, 0x68, 0x6c,
  0x19, 0x65, 0x9d, 0x95, 0x36, 0xbe, 0x3c, 0x80, 0x36, 0x57, 0xe0, 0xd9,
  0x7e, 0x50, 0xd2, 0x28, 0xa8, 0x4b, 0x3b, 0x6d, 0x05, 0x9c, 0x63, 0x2b,
  0x55, 0xec, 0x36, 0x78, 0xc8, 0xb7, 0x55, 0xed, 0x34, 0x37, 0x3c, 0x2f,
  0x7c, 0x72, 0x0f, 0x7c, 0xda, 0xd2, 0xde, 0x44, 0xd8, 0x52, 0xf2, 0x52,
  0x30, 0x73, 0x33, 0xb8, 0x79, 0xba, 0xdf, 0x19, 0xf9, 0xdf, 0xe1, 0x14,
  0xf9, 0xed, 0x00, 0x69, 0xfd, 0xae, 0xdb, 0x7b, 0xd5, 0x7e, 0x1b, 0xf3,
  0xd4, 0x4a, 0x50, 0x99, 0x19, 0xa5, 0x14, 0x22, 0x9f, 0x92, 0xc2, 0x8d,
  0xe1, 0x4d, 0xa4, 0xd2, 0x64, 0x7a, 0x89, 0xd2, 0xba, 0x09, 0x3e, 0x4f,
  0xba, 0x24, 0x70, 0x9e, 0xa5, 0x70, 0x34, 0xc6, 0xc8, 0x93, 0xd5, 0x22,
  0x84, 0xc3, 0xc0, 0x69, 0x81, 0x8f, 0x86, 0xba, 0x37, 0x45, 0x5b, 0x75,
  0x47, 0x0b, 0xaf, 0xb3, 0x6d, 0x84, 0x84, 0xce, 0x0a, 0xa5, 0x22, 0xc0,
  0xf7, 0xa1, 0xcd, 0x0b, 0x96, 0x70, 0x72, 0x88, 0x37, 0xc2, 0xc1, 0xfe,
  0x20, 0xfd, 0x19, 0x72, 0xbf, 0xd7, 0x19, 0xb5, 0x0c, 0x0e, 0xe8, 0x4a,
  0x28, 0x4f, 0x80, 0xab, 0xa9, 0xaa, 0x77, 0x24, 0x6d, 0x3c, 0xa0, 0xb4,
  0xab, 0x9a, 0x99, 0x6c, 0x5c, 0xce, 0xcb, 0xc9, 0xc4, 0x2c, 0x7c, 0xc3,
  0x53, 0x4a, 0xcd, 0x97, 0x03, 0x2f, 0x9a, 0x3f, 0x0f, 0x63, 0x59, 0x5d,
  0x52, 0x4c, 0x63, 0xc0, 0xd9, 0x28, 0x02, 0xfd, 0x0c, 0x81, 0xac, 0xe5,
  0x53, 0xf2, 0x7d, 0x45, 0x7a, 0x8d, 0xc8, 0x19, 0xc9, 0x8b, 0x15, 0xc2,
  0xc0, 0xc2, 0xbc, 0x2c, 0x67, 0xa9, 0x26, 0xc4, 0x4f, 0x75, 0x82, 0x9c,
  0x61, 0x94, 0xf4, 0x25, 0xc9, 0xb5, 0x1a, 0x6d, 0x0c, 0xb4, 0xcf, 0x52,
  0xf8, 0x85, 0x42, 0xe0, 0x68, 0xe1, 0x75, 0xb6, 0x8d, 0x90, 0xd0, 0x59,
  0xa1, 0x54, 0x04, 0xf8, 0x3e, 0xb4, 0x79, 0xc1, 0x12, 0x4e, 0x0e, 0xf1,
  0x46, 0x38, 0xd8, 0xef, 0xa5, 0x3f, 0x43, 0xee, 0xf7, 0x3a, 0xa3, 0x96,
  0xc1, 0x01, 0x5d, 0x09, 0xe5, 0x09, 0x70, 0x35, 0x55, 0xf5, 0x8e, 0xa4,
  0x8d, 0x07, 0x94, 0x76, 0x55, 0x33, 0x93, 0x8d, 0xcb, 0x79, 0x39, 0x99,
  0x98, 0x85, 0x6f, 0x78, 0x4a, 0xa9, 0xf9, 0x72, 0xe0, 0x45, 0xf3, 0xe7,
  0x61, 0x2c, 0xab, 0x4b, 0x8a, 0x69, 0x0c, 0x38, 0x1b, 0x45, 0xa0, 0x9f,
  0x21, 0x90, 0xb5, 0x7c, 0x4a, 0xbe, 0xaf, 0x48, 0xaf, 0x11, 0x39, 0x23,
  0x5e, 0x87, 0x5e, 0x55, 0xda, 0x85, 0xf6, 0x82, 0x36, 0xfe, 0x8e, 0x3f,
  0xf6, 0x06, 0xf8, 0xef, 0xfe, 0x3f, 0x36, 0xc8, 0xf1, 0x7a, 0xb0, 0xb3,
  0x73, 0x73, 0x73, 0x33, 0x12, 0x24, 0xf9, 0x91, 0x39, 0xb2, 0xcf, 0xc2,
  0x7a, 0x1f, 0xa0, 0x2f, 0xf5, 0x7c, 0xe0, 0x3c, 0xd9, 0xc8, 0x17, 0x97,
  0x7f, 0xde, 0x1b, 0xee, 0xed, 0xee, 0xee, 0xfe, 0x3c, 0x5a, 0x62, 0x8b,
  0x2f, 0x68, 0x58, 0xf3, 0x5f, 0x7f, 0xd8, 0x1d, 0x9e, 0xc9, 0x4e, 0x14,
  0xd0, 0x4e, 0x36, 0xd2, 0x22, 0x37, 0x14, 0x0c, 0x4a, 0xce, 0x84, 0x7c,
  0xe0, 0x31, 0x19, 0x8e, 0x1f, 0xa5, 0xfd, 0xd5, 0xb3, 0xdc, 0x1f, 0x08,
  0xce, 0xd3, 0x27, 0x8f, 0xf6, 0xf7, 0x13, 0x56, 0x39, 0xb8, 0x28, 0x85,
  0x43, 0x98, 0xa8, 0x47, 0x96, 0x06, 0xaa, 0x2c, 0xcb, 0xa6, 0x80, 0x65,
  0xaa, 0xb8, 0x3f, 0x63, 0x79, 0xd1, 0x93, 0xc8, 0xc5, 0x11, 0x43, 0x23,
  0x28, 0x81, 0x12, 0x57, 0xce, 0xee, 0xdc, 0xc0, 0x86, 0xca, 0x2b, 0xf0,
  0x56, 0xee, 0x75, 0xd6, 0x08, 0xc4, 0x04, 0xb4, 0x95, 0x88, 0xd6, 0x66,
  0x0b, 0x4c, 0x48, 0xc8, 0x11, 0x08, 0x60, 0x51, 0x4a, 0x1b, 0x4f, 0x8a,
  0xd7, 0x5d, 0xac, 0x2a, 0xe9, 0xe1, 0x40, 0xe1, 0xcd, 0x9b, 0xf4, 0xae,
  0x25, 0xec, 0xcd, 0x8e, 0xbf, 0x30, 0xff, 0xe9, 0x6b, 0xbc, 0x9d, 0x6a,
  0x0f, 0xca, 0x8b, 0xac, 0x99, 0x5e, 0x05, 0x98, 0xb6, 0xc4, 0xbe, 0xa1,
  0xba, 0x5f, 0x99, 0xd5, 0x58, 0xc8, 0xd8, 0xbe, 0xfe, 0x56, 0xae, 0x1a,
  0xcf, 0x0c, 0x0a, 0x34, 0x73, 0xca, 0x47, 0xe6, 0x76, 0xb7, 0xcc, 0x13,
  0x23, 0xca, 0x91, 0xa7, 0xd5, 0x61, 0x2a, 0xc8, 0x14, 0xcb, 0x6b, 0xad,
  0x79, 0xb1, 0x42, 0x18, 0x58, 0x98, 0x97, 0xe5, 0x2c, 0xd5, 0x84, 0xf8,
  0xa9, 0x4e, 0x90, 0x33, 0x8c, 0x92, 0xbe, 0x24, 0xb9, 0x56, 0xa3, 0x8d,
  0x81, 0xf6, 0x59, 0xca, 0xeb, 0xd0, 0xab, 0x4a, 0xbb, 0xd0, 0x5e, 0xd0,
  0xc6, 0xdf, 0xf1, 0xc7, 0xde, 0x00, 0xff, 0xdd, 0xff, 0xc7, 0x06, 0x39,
  0x5e, 0x0f, 0x76, 0x76, 0x6e, 0x6e, 0x6e, 0x46, 0x82, 0x24, 0x3f, 0x32,
  0x47, 0xf6, 0x59, 0x58, 0xef, 0x03, 0xf4, 0xa5, 0x9e, 0x0f, 0x9c, 0x27,
  0x1b, 0xf9, 0xe2, 0xf2, 0xcf, 0x7b, 0xc3, 0xbd, 0xdd, 0xdd, 0xdd, 0x9f,
  0x46, 0x4b, 0x6c, 0xf1, 0x05, 0x0d, 0x6b, 0xfe, 0xeb, 0x0f, 0xbb, 0xc3,
  0x33, 0xd9, 0x89, 0x02, 0xda, 0xc9, 0x46, 0x5a, 0xe4, 0x86, 0x82, 0x41,
  0xc9, 0x99, 0x90, 0x0f, 0x3c, 0x26, 0xc3, 0xf1, 0xa3, 0xb4, 0xbf, 0x7a,
  0x96, 0xfb, 0x03, 0xc1, 0x79, 0xfa, 0xe4, 0xd1, 0xfe, 0x7e, 0xc2, 0x2a,
  0x07, 0x17, 0xa5, 0x70, 0x08, 0x13, 0xf5, 0xc8, 0xd2, 0x40, 0x95, 0x65,
  0xd9, 0x14, 0xb0, 0x4c, 0x15, 0xf7, 0x67, 0x2c, 0x2f, 0x7a, 0x12, 0xb9,
  0x38, 0x62, 0x68, 0x04, 0x25, 0x50, 0xe2, 0xca, 0xd9, 0x9d, 0x1b, 0xd8,
  0x50, 0x79, 0x05, 0xde, 0xca, 0xbd, 0xce, 0x1a, 0x81, 0x98, 0x80, 0xb6,
  0x12, 0xd1, 0xda, 0x6c, 0x81, 0x09, 0x09, 0x39, 0x02, 0x01, 0x2c, 0x4a,
  0x69, 0xe3, 0x49, 0xf1, 0xba, 0x8b, 0x55, 0x25, 0x3d, 0x1c, 0x28, 0xbc,
  0x79, 0x93, 0xde, 0xb5, 0x84, 0xbd, 0xd9, 0xf1, 0x17, 0xe6, 0x3f, 0x7d,
  0x8d, 0xb7, 0x53, 0xed, 0x41, 0x79, 0x91, 0x35, 0xd3, 0xab, 0x00, 0xd3,
  0x96, 0xd8, 0x37, 0x54, 0xf7, 0x2b, 0xb3, 0x1a, 0x0b, 0x19, 0xdb, 0xd7,
  0xdf, 0xca, 0x55, 0xe3, 0x99, 0x41, 0x81, 0x66, 0x4e, 0xf9, 0xc8, 0xdc,
  0x16, 0x9c, 0x5e, 0x65, 0x0b, 0xe1, 0x97, 0x5b, 0x9a, 0x28, 0xb5, 0x21,
  0x44, 0xb8, 0x11, 0x8a, 0xb4, 0x8d, 0x0b, 0xf9, 0x8d, 0x59, 0xcc, 0xb6,
  0x54, 0xdb, 0x59, 0x29, 0x27, 0xad, 0x1e, 0x2e, 0x57, 0xb0, 0x1a, 0x27,
  0xa9, 0x88, 0x13, 0x2d, 0x03, 0xed, 0xcb, 0x67, 0x04, 0x4f, 0xcc, 0x2a,
  0x92, 0x62, 0xf0, 0xbf, 0x0c, 0x45, 0xf7, 0x11, 0xa1, 0x4a, 0x61, 0x65,
  0x73, 0x63, 0x5f, 0x1f, 0xbd, 0x3a, 0xa7, 0xd2, 0xb7, 0x01, 0x25, 0xc9,
  0x0f, 0xa8, 0xde, 0x2d, 0x6c, 0xc3, 0x71, 0x4a, 0xfe, 0x11, 0x22, 0x54,
  0x69, 0x52, 0x98, 0xba, 0xc4, 0x1a, 0x87, 0xb1, 0xaa, 0xd5, 0x2b, 0x5e,
  0x03, 0x95, 0x48, 0xc6, 0x60, 0x4b, 0x4b, 0xb4, 0xe9, 0x48, 0x8f, 0x9f,
  0x8c, 0x76, 0x79, 0x8d, 0xae, 0xc3, 0xa7, 0xd6, 0x67, 0x90, 0x1b, 0xa9,
  0x16, 0xb8, 0xcb, 0x34, 0x1e, 0x29, 0xb4, 0xd3, 0x19, 0x24, 0x8c, 0xed,
  0xca, 0x05, 0xd4, 0xfa, 0x5b, 0x2f, 0x47, 0x6a, 0xad, 0x66, 0xea, 0x37,
  0x5c, 0x07, 0x59, 0x76, 0x40, 0x39, 0x11, 0x14, 0x28, 0x6d, 0x6d, 0x95,
  0xa0, 0x2b, 0xc4, 0x8a, 0x64, 0x88, 0x26, 0x12, 0xf1, 0x60, 0x35, 0x59,
  0x31, 0x70, 0x9d, 0x35, 0x4a, 0x48, 0x01, 0x91, 0x58, 0x52, 0x75, 0xd0,
  0x6a, 0x44, 0x17, 0xd3, 0x4f, 0x82, 0x86, 0x25, 0xc3, 0xaf, 0xa5, 0x93,
  0x28, 0xeb, 0xc9, 0xb1, 0x82, 0x0f, 0x1c, 0xe5, 0xb6, 0xe6, 0xb6, 0xb1,
  0xdd, 0xaa, 0x0a, 0xe7, 0x08, 0xee, 0x42, 0x3e, 0xf6, 0xa6, 0xdb, 0x72,
  0xee, 0x96, 0x79, 0x62, 0x44, 0x39, 0xf2, 0xb4, 0x3a, 0x4c, 0x05, 0x99,
  0x62, 0x79, 0xad, 0xd5, 0x82, 0xd3, 0xab, 0x6c, 0x21, 0xfc, 0x72, 0x4b,
  0x13, 0xa5, 0x36, 0x84, 0x08, 0x37, 0x42, 0x91, 0xb6, 0x71, 0x21, 0xbf,
  0x31, 0x8b, 0xd9, 0x96, 0x6a, 0x3b, 0x2b, 0xe5, 0xa4, 0xd5, 0xc3, 0xe5,
  0x0a, 0x56, 0xe3, 0x24, 0x15, 0x71, 0xa2, 0x65, 0xa0, 0x7d, 0xf9, 0x8c,
  0xe0, 0x89, 0x59, 0x45, 0x52, 0x0c, 0xfe, 0x97, 0xa1, 0xe8, 0x3e, 0x22,
  0x54, 0x29, 0xac, 0x6c, 0x6e, 0xec, 0xeb, 0xa3, 0x57, 0xe7, 0x54, 0xfa,
  0x36, 0xa0, 0x24, 0xf9, 0x01, 0xd5, 0xbb, 0x85, 0x6d, 0x38, 0x4e, 0xc9,
  0x3f, 0x42, 0x84, 0x2a, 0x4d, 0x0a, 0x53, 0x97, 0x58, 0xe3, 0x30, 0x56,
  0xb5, 0x7a, 0xc5, 0x6b, 0xa0, 0x12, 0xc9, 0x18, 0x6c, 0x69, 0x89, 0x36,
  0x1d, 0xe9, 0xf1, 0x93, 0xd1, 0x2e, 0xaf, 0xd1, 0x75, 0xf8, 0xd4, 0xfa,
  0x0c, 0x72, 0x23, 0xd5, 0x02, 0x77, 0x99, 0xc6, 0x23, 0x85, 0x76, 0x3a,
  0x83, 0x84, 0xb1, 0x5d, 0xb9, 0x80, 0x5a, 0x7f, 0xeb, 0xe5, 0x48, 0xad,
  0xd5, 0x4c, 0xfd, 0x86, 0xeb, 0x20, 0xcb, 0x0e, 0x28, 0x27, 0x82, 0x02,
  0xa5, 0xad, 0xad, 0x12, 0x74, 0x85, 0x58, 0x91, 0x0c, 0xd1, 0x44, 0x22,
  0x1e, 0xac, 0x26, 0x2b, 0x06, 0xae, 0xb3, 0x46, 0x09, 0x29, 0x20, 0x12,
  0x4b, 0xaa, 0x0e, 0x5a, 0x8d, 0xe8, 0x62, 0xfa, 0x49, 0xd0, 0xb0, 0x64,
  0xd6, 0x5c, 0xd1, 0x61, 0x88, 0x51, 0x37, 0xa5, 0x24, 0x88, 0x3b, 0xdb,
  0x19, 0x29, 0x95, 0x15, 0x12, 0x25, 0x90, 0xb1, 0x47, 0xfe, 0xa9, 0x8d,
  0x2f, 0xe0, 0x0e, 0xff, 0xf2, 0xe5, 0x46, 0xeb, 0x46, 0xc6, 0x7a, 0x73,
  0xd4, 0xcc, 0xdd, 0xda, 0x96, 0x8c, 0xf0, 0x34, 0xf0, 0xfd, 0xec, 0xb6,
  0x61, 0xb9, 0x7f, 0x41, 0xfd, 0x35, 0x8b, 0x47, 0xfb, 0x49, 0x7d, 0x67,
  0x94, 0x88, 0x85, 0xbf, 0x09, 0xdd, 0x76, 0xaa, 0xd1, 0x20, 0x40, 0xab,
  0x0f, 0x11, 0xf3, 0xad, 0xf7, 0x78, 0xe5, 0x25, 0xbd, 0x22, 0x9d, 0x4b,
  0x34, 0x4b, 0xe7, 0x01, 0x3d, 0x7a, 0x91, 0x25, 0xc9, 0x5c, 0x6c, 0x32,
  0x4f, 0x8b, 0x8f, 0x36, 0x9d, 0x92, 0x47, 0x1a, 0xa0, 0xf9, 0x1d, 0xd7,
  0x8f, 0xb9, 0x1f, 0x4a, 0xda, 0x0e, 0x49, 0xc6, 0xa0, 0x47, 0x0c, 0xf4,
  0xd2, 0x45, 0x5a, 0xa1, 0xb0, 0x88, 0xf6, 0x4c, 0x52, 0x1e, 0x7b, 0xdb,
  0x00, 0x53, 0xc3, 0x58, 0xdb, 0x31, 0x36, 0x14, 0x61, 0x44, 0x50, 0x9c,
  0x15, 0x69, 0xf3, 0x46, 0x7b, 0xfa, 0xdd, 0xfc, 0x76, 0x51, 0xc5, 0x95,
  0x9e, 0x84, 0xe1, 0xda, 0xe6, 0xbf, 0x07, 0x1a, 0xfa, 0xe8, 0xe3, 0xdf,
  0x56, 0x7a, 0xd8, 0x96, 0xae, 0x36, 0x58, 0xe2, 0x37, 0xe9, 0x63, 0xf5,
  0xce, 0x05, 0x69, 0x62, 0xb1, 0xc5, 0x51, 0x72, 0xe2, 0xcc, 0xc9, 0x62,
  0x40, 0x40, 0x98, 0x4d, 0x35, 0x15, 0x63, 0x92, 0xfe, 0x3e, 0xd4, 0x5e,
  0xdb, 0xb1, 0x1d, 0xa0, 0x9e, 0x35, 0x48, 0x86, 0xba, 0xb3, 0x62, 0xa0,
  0x35, 0xbb, 0x81, 0xe2, 0x97, 0x30, 0x9f, 0x33, 0x1b, 0x8b, 0xa6, 0x69,
  0x1c, 0xc4, 0x4c, 0x83, 0x7c, 0x4c, 0x5e, 0x44, 0xbc, 0x5b, 0x0e, 0x87,
  0x34, 0x6d, 0x9b, 0x3c, 0xf7, 0x78, 0x2d, 0x71, 0xcc, 0xb9, 0x91, 0x8b,
  0x1c, 0x71, 0x76, 0x68, 0xd7, 0x86, 0xa5, 0x95, 0xc5, 0x20, 0x40, 0x75,
  0x41, 0xd4, 0x90, 0x3d, 0x4e, 0xc8, 0x04, 0x5a, 0x48, 0x77, 0x52, 0xdb,
  0xe2, 0x30, 0xe5, 0xf7, 0x94, 0x36, 0xfd, 0x2f, 0xdf, 0xd3, 0x48, 0x91,
  0x3b, 0x1d, 0xe8, 0x61, 0x18, 0x2a, 0x1c, 0x70, 0x01, 0x4f, 0xb0, 0xa4,
  0x93, 0x42, 0x6f, 0xa4, 0x80, 0xcc, 0xe4, 0x5c, 0x3e, 0x59, 0xfb, 0x36,
  0xe6, 0x15, 0x5a, 0x52, 0x78, 0xfe, 0x0f, 0x41, 0xea, 0x31, 0xea, 0x66,
  0xa0, 0x2f, 0xe3, 0x36, 0x52, 0xf2, 0x91, 0xd9, 0x61, 0x68, 0x2a, 0x14,
  0xc5, 0x47, 0x8e, 0x94, 0x4b, 0x49, 0x84, 0x3e, 0x91, 0x15, 0x6c, 0xd5,
  0x97, 0x16, 0x71, 0xc9, 0x9c, 0x4f, 0x88, 0x98, 0x36, 0x63, 0x40, 0xcd,
  0x5a, 0x5b, 0x3a, 0xda, 0xf6, 0xad, 0x97, 0x22, 0x47, 0x6a, 0x24, 0x78,
  0x19, 0x8e, 0xc6, 0x68, 0xfb, 0xd8, 0x20, 0xdb, 0x45, 0x3d, 0xd2, 0x32,
  0x83, 0x57, 0x2a, 0x08, 0xe1, 0x77, 0x3e, 0xd0, 0xa7, 0xb9, 0x0b, 0xd7,
  0x39, 0xef, 0x3d, 0x43, 0x18, 0x4d, 0xaa, 0x3c, 0xbb, 0x80, 0x06, 0x42,
  0x2b, 0x92, 0xcc, 0xb1, 0xc0, 0x6b, 0x94, 0xa5, 0x15, 0x89, 0x3f, 0x28,
  0x07, 0x28, 0x1b, 0xcc, 0xc9, 0x73, 0xc4, 0x3c, 0xd1, 0x76, 0x1a, 0x61,
  0x08, 0x5d, 0x54, 0x48, 0xd1, 0x22, 0x52, 0xad, 0x64, 0x88, 0x66, 0x65,
  0xf8, 0x95, 0x74, 0x12, 0x65, 0x3d, 0x39, 0x56, 0xf0, 0x81, 0xa3, 0xdc,
  0xd6, 0xdc, 0x36, 0xb6, 0x5b, 0x55, 0xe1, 0x1c, 0xc1, 0x5d, 0xc8, 0xc7,
  0xde, 0x74, 0x5b, 0xce, 0x9a, 0x2b, 0x3a, 0x0c, 0x31, 0xea, 0xa6, 0x94,
  0x04, 0x71, 0x67, 0x3b, 0x23, 0xa5, 0xb2, 0x42, 0xa2, 0x04, 0x32, 0xf6,
  0xc8, 0x3f, 0xb5, 0xf1, 0x07, 0xb8, 0xc3, 0xbf, 0x78, 0xb9, 0xd1, 0xba,
  0x91, 0xb1, 0xde, 0x1c, 0x35, 0x73, 0xb7, 0xb6, 0x25, 0x23, 0x3c, 0x0d,
  0x7c, 0x3f, 0xbb, 0x6d, 0x58, 0xee, 0x5f, 0x50, 0x7f, 0xcd, 0xe2, 0xd1,
  0x7e, 0x52, 0xdf, 0x19, 0x25, 0x62, 0xe1, 0x6f, 0x42, 0xb7, 0x9d, 0x6a,
  0x34, 0x08, 0xd0, 0xea, 0x43, 0xc4, 0x7c, 0xeb, 0x3d, 0x5e, 0x79, 0x49,
  0xaf, 0x48, 0xe7, 0x12, 0xcd, 0xd2, 0x79, 0x40, 0x8f, 0x5e, 0x64, 0x49,
  0x32, 0x17, 0x9b, 0xcc, 0xd3, 0xe2, 0xa3, 0x4d, 0xa7, 0xe4, 0x91, 0x06,
  0x68, 0x7e, 0xc7, 0xf5, 0x63, 0xee, 0x87, 0x92, 0xb6, 0x43, 0x92, 0x31,
  0xe8, 0x11, 0x03, 0xbd, 0x74, 0x91, 0x56, 0x28, 0x2c, 0xa2, 0x3d, 0x93,
  0x94, 0xc7, 0xde, 0x36, 0xc0, 0xd4, 0x30, 0xd6, 0x76, 0x8c, 0x0d, 0x45,
  0x18, 0x11, 0x14, 0x67, 0x45, 0xda, 0xbc, 0xd1, 0x9e, 0x7e, 0x37, 0xbf,
  0x5e, 0x54, 0x71, 0xa5, 0x27, 0x61, 0xb8, 0xb6, 0xf9, 0xef, 0x81, 0x86,
  0x3e, 0xfa, 0xf8, 0xb7, 0x95, 0x1e, 0xb6, 0xa5, 0xab, 0x0d, 0x96, 0xf8,
  0x4d, 0xfa, 0x58, 0xbd, 0x73, 0x41, 0x9a, 0x58, 0x6c, 0x71, 0x94, 0x9c,
  0x38, 0x73, 0xb2, 0x18, 0x10, 0x10, 0x66, 0x53, 0x4d, 0xc5, 0x98, 0xa4,
  0xbf, 0x0f, 0xb5, 0xd7, 0x76, 0x6c, 0x07, 0xa8, 0x67, 0x0d, 0x92, 0xa1,
  0xee, 0xac, 0x18, 0x68, 0xcd, 0x6e, 0xa0, 0xf8, 0x25, 0xcc, 0xe7, 0xcc,
  0xc6, 0xa2, 0x69, 0x1a, 0x07, 0x31, 0xd3, 0x20, 0x1f, 0x93, 0x17, 0x11,
  0xef, 0x96, 0xc3, 0x21, 0x4d, 0xdb, 0x26, 0xcf, 0x3d, 0x5e, 0x4b, 0x1c,
  0x73, 0x6e, 0xe4, 0x22, 0x47, 0x9c, 0x1d, 0xda, 0xb5, 0x61, 0x69, 0x65,
  0x31, 0x08, 0x50, 0x5d, 0x10, 0x35, 0x64, 0x8f, 0x13, 0x32, 0x81, 0x16,
  0xd2, 0x9d, 0xd4, 0xb6, 0x38, 0x4c, 0xf9, 0x3d, 0xa5, 0x4d, 0xff, 0xcb,
  0xf7, 0x34, 0x52, 0xe4, 0x4e, 0x07, 0x7a, 0x18, 0x86, 0x0a, 0x07, 0x5c,
  0xc0, 0x13, 0x2c, 0xe9, 0xa4, 0xd0, 0x1b, 0x29, 0x20, 0x33, 0x39, 0x97,
  0x4f, 0xd6, 0xbe, 0x8d, 0x79, 0x85, 0x96, 0x14, 0x9e, 0xff, 0x43, 0x90,
  0x7a, 0x8c, 0xba, 0x19, 0xe8, 0xcb, 0xb8, 0x8d, 0x94, 0x7c, 0x64, 0x76,
  0x18, 0x9a, 0x0a, 0x45, 0xf1, 0x91, 0x23, 0xe5, 0x52, 0x12, 0xa1, 0x4f,
  0x64, 0x05, 0x5b, 0xf5, 0xa5, 0x45, 0x5c, 0x32, 0xe7, 0x13, 0x22, 0xa6,
  0xcd, 0x18, 0x50, 0xb3, 0xd6, 0x96, 0x8e, 0xb6, 0x7d, 0xeb, 0xa5, 0xc8,
  0x91, 0x1a, 0x09, 0x5e, 0x86, 0xa3, 0x31, 0xda, 0x3e, 0x36, 0xc8, 0x76,
  0x51, 0x8f, 0xb4, 0xcc, 0xe0, 0x95, 0x0a, 0x42, 0xf8, 0x9d, 0x0f, 0xf4,
  0x69, 0xee, 0xc2, 0x75, 0xce, 0x7b, 0xcf, 0x10, 0x46, 0x93, 0x2a, 0xcf,
  0x2e, 0xa0, 0x81, 0xd0, 0x8a, 0x24, 0x73, 0x2c, 0xf0, 0x1a, 0x65, 0x69,
  0x45, 0xe2, 0x0f, 0xca, 0x01, 0xca, 0x06, 0x73, 0xf2, 0x1c, 0x31, 0x4f,
  0x51, 0x97, 0x59, 0xf1, 0x78, 0x82, 0xba, 0x0a, 0xdc, 0x62, 0xdb, 0xa9,
  0x8a, 0xbe, 0xc8, 0x6c, 0x55, 0xb4, 0x1b, 0xaf, 0xd9, 0x49, 0x1c, 0xaf,
  0x15, 0xbb, 0xf4, 0x5d, 0x56, 0x19, 0xf9, 0x57, 0xd6, 0xc9, 0xf7, 0x4f,
  0x34, 0xf9, 0x4a, 0xfa, 0xed, 0x8a, 0x2a, 0x62, 0x4b, 0xdd, 0x28, 0x49,
  0x98, 0xa7, 0x1e, 0x84, 0x2f, 0x38, 0x65, 0x9b, 0xb9, 0x97, 0xbe, 0x2e,
  0x0a, 0x09, 0x1b, 0xe9, 0x45, 0xf7, 0xca, 0x99, 0x9f, 0x18, 0xf2, 0x43,
  0x9f, 0xf3, 0x68, 0x6f, 0x15, 0xd7, 0x22, 0xd3, 0x68, 0x57, 0x20, 0x16,
  0xf8, 0xf2, 0xcc, 0x59, 0x4e, 0x1a, 0x52, 0x72, 0x8c, 0x74, 0xb2, 0x13,
  0x4f, 0xce, 0x73, 0xb8, 0x7b, 0x24, 0xb5, 0x20, 0x54, 0x01, 0x39, 0x41,
  0x59, 0xd4, 0x1a, 0x87, 0x0a, 0xdc, 0x09, 0x0c, 0x43, 0x8f, 0xac, 0xaf,
  0xa0, 0x89, 0x41, 0x43, 0x20, 0x23, 0xbf, 0x47, 0xbd, 0x67, 0xf9, 0xf8,
  0xee, 0xfc, 0xf8, 0xad, 0x98, 0xce, 0x8e, 0xcd, 0x89, 0x56, 0xe3, 0xcc,
  0x62, 0x61, 0x3b, 0x4c, 0x55, 0x61, 0x25, 0xb0, 0x6e, 0x86, 0x16, 0x15,
  0x71, 0x1d, 0x3a, 0xb6, 0x6d, 0x20, 0x49, 0x08, 0x95, 0x94, 0xab, 0x88,
  0xd1, 0xa5, 0x9b, 0x1a, 0xf1, 0x64, 0x83, 0x08, 0x6b, 0x3a, 0x7b, 0x72,
  0x95, 0x18, 0x89, 0x62, 0x18, 0x8d, 0xd7, 0x59, 0x2b, 0xe4, 0x58, 0xa5,
  0xcd, 0x94, 0x49, 0xbc, 0x2f, 0xf3, 0x4a, 0xc0, 0x62, 0x18, 0x0d, 0x3c,
  0x79, 0x5d, 0xde, 0x14, 0xc3, 0x63, 0x54, 0x1d, 0x26, 0xc7, 0xe5, 0xa5,
  0xd9, 0xaa, 0x77, 0xa4, 0xb0, 0x74, 0x4f, 0xed, 0xfd, 0xe9, 0xbb, 0x64,
  0x0b, 0x72, 0x37, 0x39, 0xb5, 0x48, 0x53, 0x78, 0x72, 0x5b, 0xec, 0x8b,
  0x9a, 0x75, 0x12, 0x99, 0xcd, 0x20, 0x39, 0xfc, 0xf1, 0xe5, 0xdb, 0xd3,
  0xe3, 0xc3, 0x9f, 0xd8, 0xc4, 0x08, 0x96, 0x83, 0x1f, 0x7f, 0xe5, 0xd9,
  0x5c, 0x14, 0xa1, 0x41, 0xa6, 0x90, 0x99, 0x47, 0x14, 0x66, 0x82, 0xe9,
  0x93, 0x59, 0xa3, 0x92, 0xe0, 0x78, 0x7c, 0x7a, 0x34, 0x54, 0x98, 0x28,
  0xee, 0xc5, 0x96, 0x17, 0x30, 0x90, 0x48, 0x1e, 0x09, 0x8c, 0xfb, 0x77,
  0x61, 0x30, 0x4a, 0x6f, 0xc4, 0x20, 0x79, 0xa7, 0x09, 0x48, 0x03, 0x3a,
  0x71, 0x5c, 0xc1, 0xd7, 0xf9, 0x25, 0x05, 0x94, 0x3a, 0xc9, 0x33, 0x20,
  0x0e, 0x9a, 0xc2, 0x34, 0x48, 0xe2, 0xa7, 0x16, 0x3a, 0x0e, 0x23, 0xab,
  0xce, 0xe6, 0xec, 0xbe, 0xec, 0x95, 0x90, 0xc4, 0x0c, 0xe8, 0x18, 0x91,
  0x1d, 0x1e, 0x84, 0xca, 0x24, 0x5b, 0x7c, 0x72, 0xe7, 0xf7, 0xee, 0xb1,
  0x34, 0xc2, 0x72, 0x41, 0xb4, 0x09, 0xcb, 0xf6, 0x0f, 0x92, 0x8d, 0xe1,
  0x2a, 0x39, 0xd8, 0xf8, 0x84, 0x2a, 0x82, 0xef, 0xe9, 0x8d, 0xb4, 0x02,
  0x91, 0x78, 0x99, 0xba, 0x82, 0x19, 0x9d, 0x81, 0xfd, 0xd5, 0xea, 0x6d,
  0x63, 0x8f, 0xb9, 0xb9, 0xea, 0x22, 0x7d, 0xa9, 0x20, 0xe5, 0x32, 0x02,
  0xe2, 0x50, 0x10, 0x5f, 0xca, 0x38, 0x6e, 0x6a, 0x34, 0x54, 0x74, 0x49,
  0x67, 0x37, 0x3e, 0x58, 0xfc, 0x06, 0xc5, 0x26, 0xc5, 0x82, 0x2a, 0x67,
  0x1b, 0xe8, 0x1c, 0x4e, 0x31, 0x88, 0x1a, 0x79, 0xa7, 0xe1, 0x70, 0xb4,
  0x57, 0x9b, 0x7f, 0xdc, 0x94, 0xf8, 0xea, 0x86, 0x28, 0x55, 0xe0, 0xd5,
  0x1b, 0xac, 0xc0, 0x42, 0x31, 0xc6, 0xec, 0xcd, 0x8d, 0xdf, 0x7c, 0xb1,
  0xa9, 0x70, 0xf9, 0xfa, 0x64, 0x97, 0xe1, 0xd0, 0x7b, 0x12, 0xe2, 0x53,
  0xb5, 0x5a, 0x4e, 0x5f, 0x32, 0x4a, 0x8d, 0xd4, 0x9c, 0x65, 0x24, 0xbc,
  0xb9, 0x2b, 0x16, 0x23, 0xbb, 0x71, 0x08, 0xb1, 0xab, 0x72, 0xb4, 0x66,
  0x2e, 0x73, 0xfd, 0x77, 0x9d, 0xab, 0xd7, 0x39, 0x12, 0x41, 0x09, 0xd7,
  0xb4, 0x9d, 0x46, 0x18, 0x42, 0x17, 0x15, 0x52, 0xb4, 0x88, 0x54, 0x2b,
  0x19, 0xa2, 0x59, 0x59, 0xd4, 0x65, 0x56, 0x3c, 0x9e, 0xa0, 0xae, 0x02,
  0xb7, 0xd8, 0x76, 0xaa, 0xa2, 0x2f, 0x32, 0x5b, 0x15, 0xed, 0xc6, 0x6b,
  0x76, 0x12, 0xc7, 0x6b, 0xc5, 0x2e, 0x7d, 0x9b, 0x55, 0x46, 0xfe, 0x95,
  0x75, 0xf2, 0xdd, 0x13, 0x4d, 0xbe, 0x92, 0x7e, 0xbb, 0xa2, 0x8a, 0xd8,
  0x52, 0x37, 0x4a, 0x12, 0xe6, 0xa9, 0x07, 0xe1, 0x0b, 0x4e, 0xd9, 0x66,
  0xee, 0xa5, 0xaf, 0x8b, 0x42, 0xc2, 0x46, 0x7a, 0xd1, 0xbd, 0x72, 0xe6,
  0x27, 0x86, 0xfc, 0xd0, 0xe7, 0x3c, 0xda, 0x5b, 0xc5, 0xb5, 0xc8, 0x34,
  0xda, 0x15, 0x88, 0x05, 0xbe, 0x3c, 0x73, 0x96, 0x93, 0x86, 0x94, 0x1c,
  0x23, 0x9d, 0xec, 0xc4, 0x93, 0xf3, 0x1c, 0xee, 0x1e, 0x49, 0x2d, 0x08,
  0x55, 0x40, 0x4e, 0x50, 0x16, 0xb5, 0xc6, 0xa1, 0x02, 0x77, 0x02, 0xc3,
  0xd0, 0x23, 0xeb, 0x2b, 0x68, 0x62, 0xd0, 0x10, 0xc8, 0xc8, 0xef, 0x51,
  0xef, 0x59, 0x3e, 0xbe, 0x3b, 0x3f, 0x7e, 0x2b, 0xa6, 0xb3, 0x63, 0x73,
  0xa2, 0xd5, 0x38, 0xb3, 0x58, 0xd8, 0x0e, 0x53, 0x55, 0x58, 0x09, 0xac,
  0x9b, 0xa1, 0x45, 0x45, 0x5c, 0x87, 0x8e, 0x6d, 0x1b, 0x48, 0x12, 0x42,
  0x25, 0xe5, 0x2a, 0x62, 0x74, 0xe9, 0xa6, 0x46, 0x3c, 0xd9, 0x20, 0xc2,
  0x9a, 0xce, 0x9e, 0x5c, 0x25, 0x46, 0xa2, 0x18, 0x46, 0xe3, 0x75, 0xd6,
  0x0a, 0x39, 0x56, 0x69, 0x33, 0x65, 0x12, 0xef, 0xcb, 0xbc, 0x12, 0xb0,
  0x18, 0x46, 0x03, 0x4f, 0x5e, 0x97, 0x37, 0xc5, 0xf0, 0x18, 0x55, 0x87,
  0xc9, 0x71, 0x79, 0x69, 0xb6, 0xea, 0x1d, 0x29, 0x2c, 0xdd, 0x53, 0x7b,
  0x7f, 0xfa, 0x2e, 0xd9, 0x82, 0xdc, 0x4d, 0x4e, 0x2d, 0xd2, 0x14, 0x9e,
  0xdc, 0x16, 0xfb, 0xa2, 0x66, 0x9d, 0x44, 0x66, 0x33, 0x48, 0x0e, 0x7f,
  0x78, 0xf9, 0xf6, 0xf4, 0xf8, 0xf0, 0x47, 0x36, 0x31, 0x82, 0xe5, 0xe0,
  0xc7, 0x5f, 0x7a, 0x36, 0x17, 0x45, 0x68, 0x90, 0x29, 0x64, 0xe6, 0x11,
  0x85, 0x99, 0x60, 0xfa, 0x64, 0xd6, 0xa8, 0x24, 0x38, 0x1e, 0x9f, 0x1e,
  0x0d, 0x15, 0x26, 0x8a, 0x7b, 0xb1, 0xe5, 0x05, 0x0c, 0x24, 0x92, 0x47,
  0x02, 0xe3, 0xfe, 0x6d, 0x18, 0x8c, 0xd2, 0x1b, 0x31, 0x48, 0xde, 0x69,
  0x02, 0xd2, 0x80, 0x4e, 0x1c, 0x57, 0xf0, 0x75, 0x7e, 0x49, 0x01, 0xa5,
  0x4e, 0xf2, 0x0c, 0x88, 0x83, 0xa6, 0x30, 0x0d, 0x92, 0xf8, 0xa9, 0x85,
  0x8e, 0xc3, 0xc8, 0xaa, 0xb3, 0x39, 0xbb, 0x2f, 0x7b, 0x25, 0x24, 0x31,
  0x03, 0x3a, 0x46, 0x64, 0x87, 0x07, 0xa1, 0x32, 0xc9, 0x16, 0x9f, 0xdc,
  0xf9, 0xbd, 0x7b, 0x2c, 0x8d, 0xb0, 0x5c, 0x10, 0x6d, 0xc2, 0xb2, 0xfd,
  0x83, 0x64, 0x63, 0xb8, 0x4a, 0x0e, 0x36, 0x3e, 0xa1, 0x8a, 0xe0, 0x7b,
  0x7a, 0x23, 0xad, 0x40, 0x24, 0x5e, 0xa6, 0xae, 0x60, 0x46, 0x67, 0x60,
  0x7f, 0xb5, 0x7a, 0xdb, 0xd8, 0x63, 0x6e, 0xae, 0xba, 0x48, 0x5f, 0x2a,
  0x48, 0xb9, 0x8c, 0x80, 0x38, 0x14, 0xc4, 0x97, 0x32, 0x8e, 0x9b, 0x1a,
  0x0d, 0x15, 0x5d, 0xd2, 0xd9, 0x8d, 0x0f, 0x16, 0xbf, 0x41, 0xb1, 0x49,
  0xb1, 0xa0, 0xca, 0xd9, 0x06, 0x3a, 0x87, 0x53, 0x0c, 0xa2, 0x46, 0xde,
  0x69, 0x38, 0x1c, 0xed, 0xd5, 0xe6, 0x1f, 0x37, 0x25, 0xbe, 0xba, 0x21,
  0x4a, 0x15, 0x78, 0xf5, 0x06, 0x2b, 0xb0, 0x50, 0x8c, 0x31, 0x7b, 0x73,
  0xe3, 0x37, 0x5f, 0x6c, 0x2a, 0x5c, 0xbe, 0x3e, 0xd9, 0x65, 0x38, 0xf4,
  0x9e, 0x84, 0xf8, 0x54, 0xad, 0x96, 0xd3, 0x97, 0x8c, 0x52, 0x23, 0x35,
  0x67, 0x19, 0x09, 0x6f, 0xee, 0x8a, 0xc5, 0xc8, 0x6e, 0x1c, 0x42, 0xec,
  0xaa, 0x1c, 0xad, 0x99, 0xcb, 0x5c, 0xff, 0x4d, 0xe7, 0xea, 0x75, 0x8e,
  0xc1, 0x68, 0xc2, 0xcd, 0x07, 0xfb, 0xf4, 0x21, 0x8a, 0x7b, 0x91, 0x71,
  0x4c, 0x9a, 0x70, 0xb4, 0x70, 0x68, 0xd0, 0xa9, 0xc8, 0xa1, 0xb8, 0x56,
  0xe8, 0xbe, 0x6c, 0x2c, 0x8e, 0x21, 0x46, 0xde, 0xac, 0xd0, 0x9c, 0x82,
  0xdb, 0x3a, 0xa3, 0xeb, 0x55, 0xdf, 0x4d, 0x55, 0xd7, 0xae, 0xa3, 0x3c,
  0x96, 0xb6, 0x9a, 0x17, 0x0d, 0x75, 0x82, 0x1e, 0x14, 0x75, 0x40, 0x6c,
  0xbb, 0x41, 0x88, 0x61, 0xc1, 0x8d, 0x73, 0x14, 0x32, 0xdf, 0x46, 0x9f,
  0xda, 0xb1, 0x52, 0x2d, 0x0e, 0x8c, 0x62, 0x67, 0x7b, 0x45, 0x76, 0xed,
  0xde, 0x4c, 0xe2, 0xcb, 0x26, 0x50, 0xf1, 0xfe, 0x6a, 0x26, 0xda, 0x26,
  0xb7, 0x4f, 0x41, 0x3d, 0x98, 0x0b, 0x86, 0xd8, 0xf9, 0xc5, 0xd3, 0xde,
  0xa2, 0x61, 0x91, 0xef, 0xe5, 0x56, 0xd5, 0xa1, 0x9d, 0xf5, 0x5a, 0x02,
  0x67, 0x7e, 0x3c, 0x4a, 0x0a, 0x84, 0xd8, 0x71, 0x28, 0x36, 0x8a, 0x86,
  0xe7, 0x35, 0x69, 0x20, 0x27, 0xef, 0x7e, 0x3d, 0x8a, 0xb7, 0x16, 0xa7,
  0x26, 0x0b, 0x1c, 0xb2, 0x93, 0x15, 0xb1, 0x87, 0x9d, 0xa2, 0x69, 0x3a,
  0x04, 0x72, 0x2f, 0xe9, 0x3e, 0xe8, 0xd8, 0x91, 0xd0, 0x2a, 0x49, 0x8f,
  0x47, 0x15, 0xb7, 0x5e, 0xbe, 0xc3, 0x93, 0x55, 0x5a, 0x71, 0x53, 0xd2,
  0xe2, 0xa3, 0xe6, 0x8e, 0x61, 0xe4, 0xec, 0x36, 0x9b, 0xae, 0x9a, 0x76,
  0xe1, 0x8b, 0x37, 0x27, 0x81, 0x73, 0xa1, 0x29, 0x6d, 0xd1, 0x45, 0x50,
  0x63, 0xf4, 0x54, 0xb1, 0x38, 0x0e, 0x36, 0xb6, 0x35, 0x88, 0x9b, 0x8a,
  0x44, 0x50, 0xc2, 0x75, 0x30, 0x9a, 0x70, 0xf3, 0xc1, 0x3e, 0x7d, 0x88,
  0xe2, 0x5e, 0x64, 0x1c, 0x93, 0x26, 0x1c, 0x2d, 0x1c, 0x1a, 0x74, 0x2a,
  0x72, 0x28, 0xae, 0x15, 0xba, 0x2f, 0x1b, 0x8b, 0x63, 0x88, 0x91, 0x37,
  0x2b, 0x34, 0xa7, 0xe0, 0xb6, 0xce, 0xe8, 0x7a, 0xd5, 0x77, 0x53, 0xd5,
  0xb5, 0xeb, 0x28, 0x8f, 0xa5, 0xad, 0xe6, 0x45, 0x43, 0x9d, 0xa0, 0x07,
  0x45, 0x1d, 0x10, 0xdb, 0x6e, 0x10, 0x62, 0x58, 0x70, 0xe3, 0x1c, 0x85,
  0xcc, 0xb7, 0xd1, 0xa7, 0x76, 0xac, 0x54, 0x8b, 0x03, 0xa3, 0xd8, 0xd9,
  0x5e, 0x91, 0x5d, 0xbb, 0x37, 0x93, 0xf8, 0xb2, 0x09, 0x54, 0xbc, 0xbf,
  0x9a, 0x89, 0xb6, 0xc9, 0xed, 0x53, 0x50, 0x0f, 0xe6, 0x82, 0x21, 0x76,
  0x7e, 0xf1, 0xb4, 0xb7, 0x68, 0x58, 0xe4, 0x3b, 0xb9, 0x55, 0x75, 0x68,
  0x67, 0xbd, 0x96, 0xc0, 0x99, 0x1f, 0x8f, 0x92, 0x02, 0x21, 0x76, 0x1c,
  0x8a, 0x8d, 0xa2, 0xe1, 0x79, 0x4d, 0x1a, 0xc8, 0xc9, 0xbb, 0x5f, 0x8f,
  0xe2, 0xad, 0xc5, 0xa9, 0xc9, 0x02, 0x87, 0xec, 0x64, 0x45, 0xec, 0x61,
  0xa7, 0x68, 0x9a, 0x0e, 0x81, 0xdc, 0x4b, 0xba, 0x0f, 0x3a, 0x76, 0x24,
  0xb4, 0x4a, 0xd2, 0xe3, 0x51, 0xc5, 0xad, 0x97, 0xef, 0xf0, 0x64, 0x95,
  0x56, 0xdc, 0x94, 0xb4, 0xf8, 0xa8, 0xb9, 0x63, 0x18, 0x39, 0xbb, 0xcd,
  0xa6, 0xab, 0xa6, 0x5d, 0xf8, 0xe2, 0xcd, 0x49, 0xe0, 0x5c, 0x68, 0x4a,
  0x5b, 0x74, 0x11, 0xd4, 0x18, 0x3d, 0x55, 0x2c, 0x8e, 0x83, 0x8d, 0x6d,
  0x0e, 0xcf, 0xbf, 0x88, 0xc5, 0x67, 0x75, 0xca, 0x55, 0xc6, 0x1e, 0x55,
  0x97, 0xaa, 0x10, 0xfd, 0xbc, 0xa1, 0xd1, 0x2a, 0xfa, 0xf5, 0x37, 0xec,
  0x7b, 0xf3, 0x3e, 0x6e, 0x7b, 0x91, 0x89, 0x5b, 0xae, 0x0e, 0xae, 0x72,
  0xf0, 0x65, 0x6a, 0xca, 0x6a, 0x18, 0x94, 0x6d, 0xa8, 0xac, 0xaf, 0xea,
  0xe6, 0x07, 0xee, 0xd0, 0xa3, 0xd3, 0xeb, 0xa7, 0x9e, 0x37, 0x1b, 0x12,
  0x8f, 0x7e, 0x64, 0x39, 0x7e, 0xb0, 0x8a, 0x8f, 0xd5, 0xe4, 0xb1, 0xf9,
  0xe3, 0x3b, 0xfc, 0x71, 0xc1, 0x7e, 0x01, 0x81, 0xd2, 0x62, 0x3f, 0x6c,
  0x48, 0xda, 0x28, 0x85, 0x4e, 0xfc, 0x7a, 0x6a, 0xaa, 0x6b, 0x40, 0x79,
  0x12, 0x70, 0xb7, 0x1c, 0x04, 0x0a, 0x59, 0x35, 0x3a, 0xcc, 0x80, 0x4b,
  0x06, 0xc3, 0x20, 0xa5, 0xfc, 0x8f, 0x70, 0xa2, 0x18, 0x87, 0x69, 0x40,
  0x3e, 0xa7, 0x31, 0x37, 0x8c, 0x2b, 0x63, 0x55, 0x63, 0x66, 0xab, 0xfe,
  0x86, 0x40, 0x85, 0xad, 0x5f, 0xa5, 0x8e, 0xe0, 0x0b, 0x5b, 0x28, 0x00,
  0x02, 0x74, 0x09, 0x1d, 0xec, 0x9e, 0xc6, 0x45, 0x63, 0x7e, 0x96, 0xf7,
  0x4c, 0xa1, 0x7f, 0xc9, 0x24, 0xdd, 0xe5, 0x8f, 0x10, 0x6a, 0xb2, 0xff,
  0xbd, 0xd7, 0x54, 0x33, 0xc9, 0x37, 0x5e, 0xbb, 0x34, 0x41, 0x61, 0xd3,
  0xa3, 0x76, 0x55, 0xe3, 0xfc, 0xa8, 0xe5, 0x0e, 0xac, 0x96, 0xf4, 0xcc,
  0x73, 0xc1, 0x4d, 0xb1, 0x80, 0xb5, 0x4f, 0x6c, 0xe1, 0x23, 0xfb, 0x64,
  0x90, 0xd2, 0x94, 0x2d, 0x10, 0xfa, 0xb2, 0x92, 0x91, 0xc1, 0x7b, 0xa0,
  0x59, 0xe1, 0x73, 0xc3, 0xf8, 0x70, 0x33, 0x68, 0x6f, 0x90, 0xb2, 0x9c,
  0xbe, 0xf5, 0x6f, 0x41, 0xb4, 0xb3, 0xbe, 0x2b, 0xa6, 0x57, 0xaf, 0xdf,
  0x8d, 0xe3, 0xaf, 0x77, 0x17, 0x47, 0x4f, 0x1b, 0x2d, 0x04, 0xb4, 0xc0,
  0x26, 0xa7, 0x60, 0xd7, 0xc1, 0x7d, 0xf6, 0xd2, 0xfb, 0x6d, 0x7c, 0xb8,
  0xf6, 0x2b, 0xd6, 0x15, 0x08, 0xcd, 0x82, 0xb9, 0xb8, 0x28, 0x9e, 0x94,
  0x1f, 0x3e, 0x4c, 0x71, 0x17, 0xd8, 0xeb, 0x11, 0x1f, 0xae, 0xb9, 0x42,
  0xb4, 0x88, 0xda, 0x42, 0xd3, 0x88, 0x95, 0x97, 0x80, 0xd6, 0xa5, 0x6b,
  0x6a, 0xb3, 0xa1, 0x7f, 0xfc, 0x92, 0x63, 0x3e, 0x46, 0x67, 0xf1, 0x48,
  0x70, 0x31, 0xd8, 0x21, 0x1b, 0xa7, 0x71, 0xb1, 0x5f, 0x43, 0xaa, 0x73,
  0xbc, 0xce, 0x54, 0x3a, 0x10, 0x62, 0xa5, 0x1f, 0x55, 0x7d, 0x4b, 0x32,
  0x7b, 0xb2, 0xff, 0xcd, 0xd7, 0xa1, 0xf4, 0x7c, 0xfd, 0xae, 0xe7, 0x73,
  0xf8, 0xcd, 0x50, 0x6b, 0x88, 0x44, 0x23, 0xf0, 0x14, 0xfa, 0x70, 0x2f,
  0x04, 0x00, 0x35, 0x3e, 0x01, 0x45, 0x47, 0xbd, 0x87, 0x4b, 0x00, 0x16,
  0x9a, 0xff, 0x58, 0xfb, 0xa0, 0x64, 0x33, 0xc7, 0x3f, 0xc5, 0x29, 0xe2,
  0x0d, 0xe2, 0xa6, 0xa2, 0xc3, 0xf3, 0x2f, 0x62, 0xf1, 0x59, 0x9d, 0x72,
  0x95, 0xb1, 0x47, 0xd5, 0xa5, 0x2a, 0x44, 0x3f, 0x6f, 0x68, 0xb4, 0x8a,
  0x7e, 0xfd, 0x0d, 0xfb, 0xde, 0xbc, 0x8f, 0xdb, 0x5e, 0x64, 0xe2, 0x96,
  0xab, 0x83, 0xab, 0x1c, 0x7c, 0x99, 0x9a, 0xb2, 0x1a, 0x06, 0x65, 0x1b,
  0x2a, 0xeb, 0xab, 0xba, 0xf9, 0x81, 0x3b, 0xf4, 0xe8, 0xf4, 0xfa, 0xa9,
  0xe7, 0xcd, 0x86, 0xc4, 0xa3, 0x1f, 0x59, 0x8e, 0x1f, 0xac, 0xe2, 0x63,
  0x35, 0x79, 0x6c, 0xfe, 0xf8, 0x16, 0x7f, 0x5c, 0xb0, 0x5f, 0x40, 0xa0,
  0xb4, 0xd8, 0x0f, 0x1b, 0x92, 0x36, 0x4a, 0xa1, 0x13, 0xbf, 0x9e, 0x9a,
  0xea, 0x1a, 0x50, 0x9e, 0x04, 0xdc, 0x2d, 0x07, 0x81, 0x42, 0x56, 0x8d,
  0x0e, 0x33, 0xe0, 0x92, 0xc1, 0x30, 0x48, 0x29, 0xff, 0x23, 0x9c, 0x28,
  0xc6, 0x61, 0x1a, 0x90, 0xcf, 0x69, 0xcc, 0x0d, 0xe3, 0xca, 0x58, 0xd5,
  0x98, 0xd9, 0xaa, 0xbf, 0x21, 0x50, 0x61, 0xeb, 0x57, 0xa9, 0x23, 0xf8,
  0xc2, 0x16, 0x0a, 0x80, 0x00, 0x5d, 0x42, 0x07, 0xbb, 0xa7, 0x71, 0xd1,
  0x98, 0x9f, 0xe5, 0x3d, 0x53, 0xe8, 0x5f, 0x32, 0x49, 0x77, 0xf9, 0x23,
  0x84, 0x9a, 0xec, 0x7f, 0xef, 0x35, 0xd5, 0x4c, 0xf2, 0x8d, 0xd7, 0x2e,
  0x4d, 0x50, 0xd8, 0xf4, 0xa8, 0x5d, 0xd5, 0x38, 0x3f, 0x6a, 0xb9, 0x03,
  0xab, 0x25, 0x3d, 0xf3, 0x5c, 0x70, 0x53, 0x2c, 0x60, 0xed, 0x13, 0x5b,
  0xf8, 0xc8, 0x3e, 0x19, 0xa4, 0x34, 0x65, 0x0b, 0x84, 0xbe, 0xac, 0x64,
  0x64, 0xf0, 0x1e, 0x68, 0x56, 0xf8, 0xdc, 0x30, 0x3e, 0xdc, 0x0c, 0xda,
  0x1b, 0xa4, 0x2c, 0xa7, 0x6f, 0xfd, 0x26, 0x88, 0x76, 0xd6, 0x77, 0xc5,
  0xf4, 0xea, 0xf5, 0xbb, 0x71, 0xfc, 0xf5, 0xee, 0xe2, 0xe8, 0x69, 0xa3,
  0x85, 0x80, 0x16, 0xd8, 0xe4, 0x14, 0xec, 0x3a, 0xb8, 0xcf, 0x5e, 0x7a,
  0xbf, 0x8d, 0x0f, 0xd7, 0x7e, 0xc5, 0xba, 0x02, 0xa1, 0x59, 0x30, 0x17,
  0x17, 0xc5, 0x93, 0xf2, 0xc3, 0x87, 0x29, 0xee, 0x02, 0x7b, 0x3d, 0xe2,
  0xc3, 0x35, 0x57, 0x88, 0x16, 0x51, 0x5b, 0x68, 0x1a, 0xb1, 0xf2, 0x12,
  0xd0, 0xba, 0x74, 0x4d, 0x6d, 0x36, 0xf4, 0x8f, 0x9f, 0x73, 0xcc, 0xc7,
  0xe8, 0x2c, 0x1e, 0x09, 0x2e, 0x06, 0x3b, 0x64, 0xe3, 0x34, 0x2e, 0xf6,
  0x6b, 0x48, 0x75, 0x8e, 0xd7, 0x99, 0x4a, 0x07, 0x42, 0xac, 0xf4, 0xa3,
  0xaa, 0x6f, 0x49, 0x66, 0x4f, 0xf6, 0xbf, 0xfe, 0x2a, 0x94, 0x9e, 0xaf,
  0xdf, 0xf5, 0x7c, 0x0e, 0xbf, 0x19, 0x6a, 0x0d, 0x91, 0x68, 0x04, 0x9e,
  0x9c, 0xe1, 0x97, 0x9c, 0x71, 0x14, 0xf7, 0x54, 0x14, 0xe1, 0xed, 0x75,
  0x67, 0x14, 0x1f, 0x0e, 0xfc, 0x2d, 0x06, 0x44, 0x03, 0xb6, 0xb0, 0xcf,
  0x7f, 0xec, 0xec, 0xdb, 0xd4, 0x34, 0x5b, 0x08, 0x46, 0xd7, 0xd4, 0x48,
  0xf0, 0x50, 0x41, 0x28, 0xf2, 0xdb, 0x31, 0xe5, 0x13, 0xf4, 0x50, 0x33,
  0x25, 0x1e, 0x70, 0xc6, 0x81, 0x9d, 0x1c, 0xe6, 0xa9, 0x9a, 0x58, 0x74,
  0x26, 0x63, 0x76, 0xdf, 0xdd, 0x47, 0x4c, 0x79, 0x24, 0x9b, 0x6e, 0x1d,
  0xda, 0xde, 0x5b, 0xa3, 0x24, 0x41, 0xb8, 0x3e, 0x98, 0x48, 0xf5, 0x85,
  0x64, 0x6b, 0x62, 0xc4, 0xb5, 0x07, 0x9e, 0xc1, 0x2a, 0xf6, 0x63, 0x4e,
  0x42, 0x1f, 0xee, 0x85, 0x00, 0xa0, 0xc6, 0x27, 0xa0, 0xe8, 0xa8, 0xf7,
  0x70, 0x09, 0xc0, 0x42, 0xf3, 0x1f, 0x6b, 0x1f, 0x94, 0x6c, 0xe6, 0xf8,
  0xa7, 0x38, 0x45, 0x9c, 0x33, 0xfc, 0x92, 0x33, 0x8e, 0xe2, 0x9e, 0x8a,
  0x22, 0xbc, 0xbd, 0xee, 0x8c, 0xe2, 0xc3, 0x81, 0xbf, 0xc5, 0x80, 0x68,
  0xc0, 0x16, 0xf6, 0xf9, 0x8f, 0x9d, 0x7d, 0x9b, 0x9a, 0x66, 0x0b, 0xc1,
  0xe8, 0x9a, 0x1a, 0x09, 0x1e, 0x2a, 0x08, 0x45, 0x7e, 0x3b, 0xa6, 0x7c,
  0x82, 0x1e, 0x6a, 0xa6, 0xc4, 0x03, 0xce, 0x38, 0xb0, 0x93, 0xc3, 0x3c,
  0xde, 0x8f, 0x0f, 0xf7, 0xe4, 0xf3, 0x27, 0x8f, 0xb7, 0xb7, 0x5d, 0x86,
  0x3b, 0x27, 0xc8, 0x4c, 0xa8, 0x0c, 0x23, 0x07, 0xe7, 0xe2, 0x66, 0xb0,
  0x66, 0x8b, 0xaf, 0x88, 0x31, 0x58, 0x9f, 0x51, 0x7c, 0x38, 0xc8, 0x31,
  0x7d, 0x0f, 0x87, 0x08, 0x13, 0x9c, 0x18, 0xba, 0x35, 0x84, 0x21, 0x6c,
  0x32, 0x7e, 0xc0, 0xc6, 0x5c, 0x7a, 0xb9, 0x02, 0x39, 0x52, 0x9c, 0x87,
  0x11, 0x8e, 0x25, 0x0e, 0x17, 0xa7, 0x2a, 0x69, 0xc3, 0x44, 0xd0, 0x53,
  0x16, 0x7b, 0xf4, 0x07, 0x95, 0x3c, 0x5d, 0x69, 0x83, 0xca, 0xd3, 0xd5,
  0x64, 0x6e, 0x64, 0xd0, 0x18, 0x1d, 0xb5, 0x6f, 0x93, 0xe3, 0x5c, 0x3a,
  0x8d, 0xb2, 0x0e, 0x2e, 0xc9, 0x0d, 0x7d, 0x32, 0x87, 0xd6, 0xdd, 0x26,
  0x55, 0x13, 0x8b, 0xce, 0x64, 0xcc, 0xee, 0xbb, 0xfb, 0x88, 0x29, 0x8f,
  0x64, 0xd3, 0xad, 0x43, 0xdb, 0x7b, 0x6b, 0x94, 0x24, 0x08, 0xd7, 0x07,
  0x13, 0xa9, 0xbe, 0x90, 0x6c, 0x4d, 0x8c, 0xb8, 0xf6, 0xc0, 0x33, 0x58,
  0xc5, 0x7e, 0xcc, 0xc9, 0xfb, 0xf1, 0xe1, 0x9e, 0x7c, 0xfe, 0xe4, 0xf1,
  0xf6, 0xb6, 0xcb, 0x70, 0xe7, 0x04, 0x99, 0x09, 0x95, 0x61, 0xe4, 0xe0,
  0x5c, 0xdc, 0x0c, 0xd6, 0x6c, 0xf1, 0x15, 0x31, 0x06, 0xeb, 0x33, 0x8a,
  0x0f, 0x07, 0x39, 0xa6, 0xef, 0xe1, 0x10, 0x61, 0x82, 0x13, 0x43, 0xb7,
  0x86, 0x30, 0x84, 0x4d, 0xc6, 0x0f, 0xd8, 0x98, 0x4b, 0x2f, 0x57, 0x20,
  0x47, 0x8a, 0xf3, 0x30, 0xc2, 0xb1, 0xc4, 0xe1, 0xe2, 0x54, 0x25, 0x6d,
  0x34, 0xc9, 0xf5, 0x74, 0x65, 0x9b, 0xa2, 0xb5, 0x25, 0x1b, 0x4b, 0xfe,
  0x10, 0x7a, 0x77, 0x0f, 0xfb, 0x16, 0x76, 0x9b, 0xd5, 0xa1, 0x19, 0xf7,
  0x16, 0x71, 0x5b, 0x23, 0xb0, 0x1f, 0x7c, 0xf4, 0xb6, 0xa5, 0x67, 0x3b,
  0x65, 0xd7, 0xea, 0x9d, 0x37, 0xd0, 0x3b, 0x09, 0x7a, 0x03, 0xb1, 0x8c,
  0xe4, 0x05, 0x6b, 0x98, 0xfd, 0x3d, 0x1e, 0xb5, 0x04, 0xda, 0xd7, 0x45,
  0x49, 0xab, 0x27, 0xbf, 0x7f, 0x7a, 0x81, 0xbc, 0x64, 0x4e, 0xc2, 0x9c,
  0x67, 0xd4, 0xa6, 0x1e, 0xfc, 0x31, 0xc4, 0x22, 0xa8, 0xd8, 0x3f, 0xc9,
  0x63, 0x88, 0xef, 0x43, 0x3c, 0xf8, 0x94, 0x5b, 0x97, 0x12, 0x96, 0x0a,
  0x98, 0x08, 0x7a, 0xca, 0x62, 0x8f, 0xfe, 0xa0, 0x92, 0xa7, 0x2b, 0x6d,
  0x50, 0x79, 0xba, 0x9a, 0xcc, 0x8d, 0x0c, 0x1a, 0xa3, 0xa3, 0xf6, 0x6d,
  0x72, 0x9c, 0x4b, 0xa7, 0x51, 0xd6, 0xc1, 0x25, 0xb9, 0xa1, 0x4f, 0xe6,
  0xd0, 0xba, 0xdb, 0x84, 0x26, 0xb9, 0x9e, 0xae, 0x6c, 0x53, 0xb4, 0xb6,
  0x64, 0x63, 0xc9, 0x1f, 0x42, 0xef, 0xee, 0x61, 0xdf, 0xc2, 0x6e, 0xb3,
  0x3a, 0x34, 0xe3, 0xde, 0x22, 0x6e, 0x6b, 0x04, 0xf6, 0x83, 0x8f, 0xde,
  0xb6, 0xf4, 0x6c, 0xa7, 0xec, 0x5a, 0xbd, 0xf3, 0x06, 0x7a, 0x27, 0x41,
  0x6f, 0x20, 0x96, 0x91, 0xbc, 0x60, 0x0d, 0xb3, 0xbf, 0xc7, 0xa3, 0x96,
  0x40, 0xfb, 0xba, 0x28, 0x69, 0xf5, 0xe4, 0xf7, 0x4f, 0x2f, 0x90, 0x97,
  0xcc, 0x49, 0x98, 0xf3, 0x8c, 0xda, 0xd4, 0x83, 0x3f, 0x86, 0x58, 0x04,
  0x15, 0xfb, 0x27, 0x79, 0x0c, 0xf1, 0x7d, 0x88, 0x07, 0x9f, 0x72, 0xeb,
  0x7b, 0x81, 0x18, 0xc3, 0x83, 0x7d, 0x5e, 0x86, 0x76, 0x6e, 0x03, 0x9e,
  0x20, 0x29, 0xb5, 0xc5, 0x5d, 0xe2, 0xc5, 0x79, 0xb4, 0xc8, 0xba, 0x6e,
  0x7d, 0x29, 0x70, 0xdd, 0xa0, 0xe6, 0x32, 0xd0, 0x49, 0x1a, 0xb2, 0x89,
  0x37, 0x78, 0x46, 0x1b, 0x54, 0x54, 0xaa, 0xf1, 0x73, 0xca, 0xbe, 0x52,
  0xab, 0x81, 0xf5, 0x6e, 0x1d, 0x5b, 0x3c, 0x94, 0x69, 0x24, 0xa6, 0xae,
  0x73, 0xdc, 0xf8, 0x4a, 0x33, 0xb9, 0x36, 0x34, 0x05, 0xa0, 0xd3, 0x78,
  0x57, 0xc6, 0x94, 0x21, 0x23, 0x75, 0xd6, 0x9c, 0x16, 0x41, 0x1d, 0x83,
  0x71, 0x6a, 0x66, 0xc8, 0xe1, 0x46, 0x54, 0xa1, 0xb5, 0x1b, 0x00, 0x84,
  0x53, 0x32, 0x6f, 0x5b, 0x66, 0x9f, 0x7e, 0xc2, 0x45, 0xfd, 0x90, 0xde,
  0xdd, 0xe4, 0xcd, 0x2a, 0x64, 0xba, 0x13, 0x45, 0x05, 0xa4, 0xba, 0x74,
  0x12, 0xd3, 0x38, 0x0c, 0x57, 0x3c, 0x4e, 0x66, 0x1e, 0x12, 0x3e, 0xd1,
  0x4a, 0xae, 0xb6, 0x3c, 0x02, 0xce, 0xcf, 0x79, 0x79, 0x13, 0x64, 0x88,
  0xc3, 0xc2, 0xb0, 0xb3, 0x6b, 0x97, 0xfe, 0x98, 0xb7, 0x7f, 0xff, 0x77,
  0xfd, 0xe5, 0x07, 0xec, 0xd4, 0x3f, 0x74, 0xa7, 0x34, 0xe9, 0x2e, 0x0d,
  0x8a, 0xa3, 0xc9, 0xb6, 0x4e, 0x7e, 0x4f, 0xbb, 0xf2, 0x17, 0x64, 0x35,
  0xf1, 0xd6, 0x00, 0x97, 0x84, 0x06, 0xfc, 0xfd, 0xc8, 0xea, 0xd1, 0x32,
  0x48, 0x8a, 0x6a, 0x4f, 0x52, 0xf6, 0x27, 0x77, 0x81, 0x4b, 0x0a, 0x64,
  0xf8, 0x53, 0x31, 0x20, 0x80, 0x55, 0x63, 0xd2, 0xa5, 0xd4, 0x4e, 0x1e,
  0xad, 0x02, 0xf9, 0x14, 0x7f, 0xaa, 0x04, 0x65, 0xc4, 0xd8, 0x32, 0x66,
  0xe6, 0x30, 0xf4, 0xf8, 0xe7, 0x71, 0xc3, 0x42, 0x93, 0x5a, 0xc4, 0x9b,
  0xd2, 0x02, 0x9e, 0x31, 0xe3, 0xa0, 0x01, 0xae, 0x1a, 0xe2, 0x13, 0xc5,
  0x7c, 0xa0, 0xa9, 0x86, 0xcd, 0xb2, 0x19, 0x99, 0x41, 0x20, 0x41, 0xf4,
  0x65, 0x6e, 0xd5, 0x64, 0x73, 0x34, 0x7e, 0xff, 0x77, 0x4e, 0x04, 0xfc,
  0x47, 0xa8, 0xfb, 0x9e, 0x9c, 0x1f, 0x1e, 0xd0, 0x94, 0x7e, 0x3f, 0xac,
  0xef, 0x16, 0x93, 0x72, 0x2e, 0x17, 0x0f, 0x9b, 0x6f, 0x36, 0x50, 0x7f,
  0x52, 0xc2, 0x52, 0x61, 0x2f, 0x10, 0x63, 0x78, 0xb0, 0xcf, 0xcb, 0xd0,
  0xce, 0x6d, 0xc0, 0x13, 0x24, 0xa5, 0xb6, 0xb8, 0x4b, 0xbc, 0x38, 0x8f,
  0x16, 0x59, 0xd7, 0xad, 0x2f, 0x05, 0xae, 0x1b, 0xd4, 0x5c, 0x06, 0x3a,
  0x49, 0x43, 0x36, 0xf1, 0x06, 0xcf, 0x68, 0x83, 0x8a, 0x4a, 0x35, 0x7e,
  0x4e, 0xd9, 0x57, 0x6a, 0x35, 0xb0, 0xde, 0xad, 0x63, 0x8b, 0x87, 0x32,
  0x8d, 0xc4, 0xd4, 0x75, 0x8e, 0x1b, 0x5f, 0x6a, 0x26, 0xd7, 0x86, 0xa6,
  0x00, 0x74, 0x1a, 0xef, 0xca, 0x98, 0x32, 0x64, 0xa4, 0xce, 0x9a, 0xd3,
  0x22, 0xa8, 0x63, 0x30, 0x4e, 0xcd, 0x0c, 0x39, 0xdc, 0x88, 0x2a, 0xb4,
  0x76, 0x03, 0x80, 0x70, 0x4a, 0xe6, 0x6d, 0xcb, 0xec, 0xd3, 0x4f, 0xb8,
  0xa8, 0x1f, 0xd2, 0xbb, 0x9b, 0xbc, 0x59, 0x85, 0x4c, 0x77, 0xa2, 0xa8,
  0x80, 0x54, 0x97, 0x4e, 0x62, 0x1a, 0x87, 0xe1, 0x8a, 0xc7, 0xc9, 0xcc,
  0x43, 0xc2, 0x27, 0x5a, 0xc9, 0xd5, 0x96, 0x47, 0xc0, 0xf9, 0x39, 0x2f,
  0x6f, 0x82, 0x0c, 0x71, 0x58, 0x18, 0x76, 0x76, 0xed, 0xd2, 0x1f, 0xf3,
  0xf6, 0xef, 0xfe, 0xae, 0xbf, 0xfc, 0x80, 0x9d, 0xfa, 0x87, 0xee, 0x94,
  0x26, 0xdd, 0xa5, 0x41, 0x71, 0x34, 0xd9, 0xd6, 0xc9, 0xef, 0x68, 0x57,
  0xfe, 0x82, 0xac, 0x26, 0xde, 0x1a, 0xe0, 0x92, 0xd0, 0x80, 0xbf, 0x1b,
  0x59, 0x3d, 0x5a, 0x06, 0x49, 0x51, 0xed, 0x49, 0xca, 0xfe, 0xe4, 0x2e,
  0x70, 0x49, 0x81, 0x0c, 0x7f, 0x2c, 0x06, 0x04, 0xb0, 0x6a, 0x4c, 0xba,
  0x94, 0xda, 0xc9, 0xa3, 0x55, 0x20, 0x9f, 0xe2, 0x8f, 0x95, 0xa0, 0x8c,
  0x18, 0x5b, 0xc6, 0xcc, 0x1c, 0x86, 0x1e, 0xff, 0x3c, 0x6e, 0x58, 0x68,
  0x52, 0x8b, 0x78, 0x53, 0x5a, 0xc0, 0x33, 0x66, 0x1c, 0x34, 0xc0, 0x55,
  0x43, 0x7c, 0xa2, 0x98, 0x0f, 0x34, 0xd5, 0xb0, 0x59, 0x36, 0x23, 0x33,
  0x08, 0x24, 0x88, 0xbe, 0xcc, 0xad, 0x9a, 0x6c, 0x8e, 0xc6, 0xef, 0xfe,
  0xc6, 0x54, 0x42, 0xb1, 0xba, 0xa1, 0x07, 0x5b, 0x30, 0x88, 0x22, 0xd2,
  0xc3, 0x0e, 0x2b, 0xa7, 0x53, 0xaa, 0x26, 0x43, 0xe1, 0x82, 0xb9, 0x79,
  0xbf, 0x4f, 0x14, 0x89, 0x80, 0xbb, 0xee, 0x49, 0x7f, 0x45, 0xf1, 0xa8,
  0x6a, 0x7f, 0xaa, 0x68, 0x08, 0x68, 0x3d, 0x1d, 0x5b, 0x9e, 0x1e, 0x05,
  0x7c, 0x00, 0xbf, 0x30, 0xd3, 0xfc, 0x40, 0xf5, 0x62, 0x62, 0xe6, 0xbe,
  0xe2, 0x9f, 0x0d, 0xcf, 0xe9, 0x67, 0x9a, 0x47, 0x23, 0x25, 0xc6, 0xc8,
  0xcc, 0x90, 0x1a, 0xe0, 0x41, 0x58, 0x96, 0x98, 0xc4, 0x52, 0xf3, 0xa8,
  0x53, 0x71, 0x11, 0x4a, 0x64, 0xbd, 0xd5, 0x1f, 0x32, 0x82, 0xe1, 0xcc,
  0xaf, 0xb3, 0xf5, 0xa3, 0x51, 0x5f, 0x0f, 0xc3, 0x98, 0x17, 0xa9, 0x24,
  0xb3, 0x71, 0xf6, 0x9a, 0xbd, 0x4f, 0x0a, 0x86, 0x44, 0xb9, 0xcd, 0xe6,
  0xb4, 0x47, 0xf7, 0x0d, 0x87, 0x3d, 0xd5, 0xaa, 0x0d, 0xc9, 0xfc, 0x81,
  0x7f, 0x2d, 0xbf, 0xb0, 0x1a, 0x46, 0x03, 0x44, 0x20, 0xa4, 0x1c, 0x61,
  0xe4, 0x7b, 0xd6, 0x5a, 0x6a, 0x88, 0x42, 0xd8, 0x16, 0x87, 0x2b, 0x4f,
  0x06, 0x89, 0x8b, 0x6e, 0x6b, 0x52, 0x5f, 0x82, 0x40, 0xf8, 0xfa, 0xe1,
  0x6c, 0x94, 0xdc, 0x86, 0xa6, 0x8e, 0xa8, 0x19, 0x69, 0xc9, 0xe9, 0x87,
  0x34, 0x4f, 0xd4, 0xb1, 0x2c, 0xe0, 0xb5, 0x8d, 0xc4, 0x99, 0x93, 0x08,
  0xb7, 0xa7, 0xe0, 0xe8, 0x7f, 0x7a, 0xd1, 0x76, 0x76, 0x6d, 0x0d, 0xbd,
  0x28, 0xbb, 0xd1, 0x45, 0x18, 0xea, 0x6e, 0xfd, 0x70, 0x9c, 0x7f, 0xff,
  0x74, 0xb4, 0xbb, 0x1d, 0x1c, 0x6a, 0xb3, 0xfc, 0x40, 0x7d, 0xaf, 0x3f,
  0x20, 0x4b, 0x95, 0xce, 0x4c, 0xa3, 0x0a, 0xf4, 0x03, 0xda, 0x59, 0xae,
  0x59, 0x5e, 0x2d, 0x31, 0x0e, 0x91, 0xf9, 0xbc, 0x64, 0x83, 0xed, 0xbe,
  0x65, 0xb4, 0xf3, 0x41, 0x7d, 0xe8, 0x8c, 0xad, 0x76, 0xe7, 0xa7, 0xc7,
  0xc1, 0xc4, 0x90, 0x80, 0xf2, 0x81, 0x22, 0xd7, 0x96, 0x98, 0x8c, 0xdc,
  0xcb, 0xaa, 0x7c, 0xea, 0xb7, 0x41, 0xa4, 0x07, 0x88, 0xa4, 0x18, 0x11,
  0x10, 0xa1, 0xec, 0x28, 0xf4, 0x69, 0xe7, 0x7f, 0xe4, 0xff, 0xf5, 0x42,
  0x56, 0x36, 0xdd, 0x91, 0x4e, 0xdb, 0x4c, 0x14, 0x99, 0x35, 0x2e, 0x03,
  0xe1, 0xe8, 0x9e, 0x75, 0x12, 0xb6, 0xf2, 0x3e, 0xa3, 0x54, 0xcd, 0xf3,
  0xb4, 0xb6, 0x13, 0xe4, 0x15, 0xb8, 0xde, 0xdf, 0x84, 0x28, 0x75, 0x15,
  0xc0, 0xd7, 0x26, 0x91, 0xa8, 0x11, 0xc7, 0x9a, 0x2e, 0xca, 0x51, 0xcf,
  0xce, 0x70, 0xe2, 0x70, 0x77, 0x67, 0xfa, 0x37, 0x84, 0xd7, 0x1c, 0x06,
  0x1f, 0xbb, 0x6e, 0x05, 0xde, 0xd8, 0x2d, 0x09, 0xe2, 0x91, 0x72, 0xbe,
  0xce, 0x89, 0x80, 0xff, 0x08, 0x75, 0xdf, 0x93, 0xf3, 0xc3, 0x03, 0x9a,
  0xd2, 0xef, 0x86, 0xf5, 0xdd, 0x62, 0x52, 0xce, 0xe5, 0xe2, 0x61, 0xf3,
  0xcd, 0x06, 0xea, 0xcf, 0x98, 0x4a, 0x28, 0x56, 0x37, 0xf4, 0x60, 0x0b,
  0x06, 0x51, 0x44, 0x7a, 0xd8, 0x61, 0xe5, 0x74, 0x4a, 0xd5, 0x64, 0x28,
  0x5c, 0x30, 0x37, 0xef, 0x77, 0x89, 0x22, 0x11, 0x70, 0xd7, 0x3d, 0xe9,
  0xaf, 0x28, 0x1e, 0x55, 0xed, 0x4f, 0x15, 0x0d, 0x01, 0xad, 0xa7, 0x63,
  0xcb, 0xd3, 0xa3, 0x80, 0x0f, 0xe0, 0x17, 0x66, 0x9a, 0x1f, 0xa8, 0x5e,
  0x4c, 0xcc, 0xdc, 0x57, 0xfc, 0xb3, 0xe1, 0x39, 0xfd, 0x4c, 0xf3, 0x68,
  0xa4, 0xc4, 0x18, 0x99, 0x19, 0x52, 0x03, 0x3c, 0x08, 0xcb, 0x12, 0x93,
  0x58, 0x6a, 0x1e, 0x75, 0x2a, 0x2e, 0x42, 0x89, 0xac, 0xb7, 0xfa, 0x43,
  0x46, 0x30, 0x9c, 0xf9, 0x75, 0xb6, 0x7e, 0x34, 0xea, 0xeb, 0x61, 0x18,
  0xf3, 0x22, 0x95, 0x64, 0x36, 0xce, 0x5e, 0xb3, 0xf7, 0x49, 0xc1, 0x90,
  0x28, 0xb7, 0xd9, 0x9c, 0xf6, 0xe8, 0xbe, 0xe1, 0xb0, 0xa7, 0x5a, 0xb5,
  0x21, 0x99, 0x3f, 0xf0, 0xaf, 0xe5, 0x17, 0x56, 0xc3, 0x68, 0x80, 0x08,
  0x84, 0x94, 0x23, 0x8c, 0x7c, 0xcf, 0x5a, 0x4b, 0x0d, 0x51, 0x08, 0xdb,
  0xe2, 0x70, 0xe5, 0xc9, 0x20, 0x71, 0xd1, 0x6d, 0x4d, 0xea, 0x4b, 0x10,
  0x08, 0x5f, 0x3f, 0x9c, 0x8d, 0x92, 0xdb, 0xd0, 0xd4, 0x11, 0x35, 0x23,
  0x2d, 0x39, 0xfd, 0x90, 0xe6, 0x89, 0x3a, 0x96, 0x05, 0xbc, 0xb6, 0x91,
  0x38, 0x73, 0x12, 0xe1, 0xf6, 0x14, 0x1c, 0xfd, 0x0f, 0x2f, 0xda, 0xce,
  0xae, 0xad, 0xa1, 0x17, 0x65, 0x37, 0xba, 0x08, 0x43, 0xdd, 0xad, 0x1f,
  0x8e, 0xf3, 0xef, 0x9f, 0x8e, 0x76, 0xb7, 0x83, 0x43, 0x6d, 0x96, 0x1f,
  0xa8, 0xef, 0xf5, 0x07, 0x64, 0xa9, 0xd2, 0x99, 0x69, 0x54, 0x81, 0x7e,
  0x40, 0x3b, 0xcb, 0x35, 0xcb, 0xab, 0x25, 0xc6, 0x21, 0x32, 0x9f, 0x97,
  0x6c, 0xb0, 0xdd, 0xb7, 0x8c, 0x76, 0x3e, 0xa8, 0x0f, 0x9d, 0xb1, 0xd5,
  0xee, 0xfc, 0xf4, 0x38, 0x98, 0x18, 0x12, 0x50, 0x3e, 0x50, 0xe4, 0xda,
  0x12, 0x93, 0x91, 0x7b, 0x59, 0x95, 0x4f, 0xfd, 0x36, 0x88, 0xf4, 0x00,
  0x91, 0x14, 0x23, 0x02, 0x22, 0x94, 0x1d, 0x85, 0x3e, 0xed, 0xfc, 0x8f,
  0xfc, 0xbf, 0x5e, 0xc8, 0xca, 0xa6, 0x3b, 0xd2, 0x69, 0x9b, 0x89, 0x22,
  0xb3, 0xc6, 0x65, 0x20, 0x1c, 0xdd, 0xb3, 0x4e, 0xc2, 0x56, 0xde, 0x67,
  0x94, 0xaa, 0x79, 0x9e, 0xd6, 0x76, 0x82, 0xbc, 0x02, 0xd7, 0xfb, 0x9b,
  0x10, 0xa5, 0xae, 0x02, 0xf8, 0xda, 0x24, 0x12, 0x35, 0xe2, 0x58, 0xd3,
  0xcd, 0xb7, 0x85, 0x68, 0xc1, 0x03, 0x8f, 0x22, 0x06, 0x73, 0xcf, 0xad,
  0xdd, 0x6a, 0x77, 0xbc, 0xec, 0x39, 0x67, 0x5b, 0x9d, 0xcf, 0x1c, 0x0d,
  0x3f, 0x4b, 0x5c, 0xc9, 0x3e, 0x27, 0xf7, 0x51, 0x5f, 0x76, 0xcb, 0x7a,
  0xe6, 0x77, 0x49, 0x14, 0x55, 0x7b, 0xcd, 0xe7, 0x9f, 0xec, 0x46, 0xe8,
  0x9f, 0xd2, 0x87, 0x3f, 0xe4, 0x4b, 0x8f, 0x67, 0x79, 0x5d, 0xe8, 0xa5,
  0x6c, 0x82, 0x73, 0x8c, 0x91, 0x72, 0xa1, 0xbd, 0x69, 0x38, 0x57, 0xe9,
  0xde, 0xcd, 0x9c, 0x52, 0xf5, 0x71, 0xc2, 0x0e, 0x01, 0xbf, 0x40, 0xdc,
  0xd8, 0xb7, 0xa2, 0xa5, 0x89, 0x83, 0xe0, 0xe8, 0xf4, 0xfa, 0x71, 0x18,
  0x88, 0x4a, 0x22, 0xee, 0x32, 0x7f, 0x49, 0xfb, 0xcf, 0x7b, 0x97, 0xc4,
  0x38, 0xfa, 0xb2, 0x24, 0x5e, 0x80, 0xdf, 0xfc, 0x42, 0x16, 0xa2, 0xeb,
  0xf0, 0x27, 0x7a, 0xcf, 0x92, 0xdc, 0x22, 0xee, 0x9d, 0x89, 0xf9, 0xd6,
  0x07, 0x8b, 0xcc, 0x6c, 0x64, 0x33, 0x7f, 0x1a, 0xdf, 0x36, 0x8a, 0x89,
  0xc3, 0x6c, 0xa6, 0xbe, 0xd1, 0x42, 0xa4, 0x3c, 0x95, 0xb8, 0x46, 0x9d,
  0x44, 0x14, 0xec, 0x0e, 0x7d, 0x3d, 0x8a, 0xce, 0x41, 0xfb, 0x4f, 0xd6,
  0x45, 0x39, 0xea, 0xd9, 0x19, 0x4e, 0x1c, 0xee, 0xee, 0x4c, 0xff, 0x86,
  0xf0, 0x9a, 0xc3, 0xe0, 0x63, 0xd7, 0xad, 0xc0, 0x1b, 0xbb, 0x25, 0x41,
  0x3c, 0x52, 0xce, 0xb7, 0xf9, 0xb6, 0x10, 0x2d, 0x78, 0xe0, 0x51, 0xc4,
  0x60, 0xee, 0xb9, 0xb5, 0x5b, 0xed, 0x8e, 0x97, 0x3d, 0xe7, 0x6c, 0xab,
  0xf3, 0x99, 0xa3, 0xe1, 0x67, 0x89, 0x2b, 0xd9, 0xe7, 0xe4, 0x3e, 0xea,
  0xcb, 0x6e, 0x59, 0xcf, 0xfc, 0x2e, 0x89, 0xa2, 0x6a, 0xaf, 0xf9, 0xfc,
  0x93, 0xdd, 0x08, 0xfd, 0x53, 0xfa, 0xf0, 0x87, 0x7c, 0xe9, 0xf1, 0x2c,
  0xaf, 0x0b, 0xbd, 0x94, 0x4d, 0x70, 0x8e, 0x31, 0x52, 0x2e, 0xb4, 0x37,
  0x0d, 0xe7, 0x2a, 0xdd, 0xbb, 0x99, 0x53, 0xaa, 0x3e, 0x4e, 0xd8, 0x21,
  0xe0, 0x17, 0x88, 0x1b, 0xfb, 0x56, 0xb4, 0x34, 0x71, 0x10, 0x1c, 0x9d,
  0x5e, 0x3f, 0x0e, 0x03, 0x51, 0x49, 0xc4, 0x5d, 0xe6, 0x2f, 0x69, 0xff,
  0x79, 0xef, 0x92, 0x18, 0x47, 0x5f, 0x96, 0xc4, 0x0b, 0xf0, 0x9b, 0x5f,
  0xc8, 0x42, 0x74, 0x1d, 0xfe, 0x44, 0xef, 0x59, 0x92, 0x5b, 0xc4, 0xbd,
  0x33, 0x31, 0xdf, 0xfa, 0x60, 0x91, 0x99, 0x8d, 0x6c, 0xe6, 0x4f, 0xe3,
  0xdb, 0x46, 0x31, 0x71, 0x98, 0xcd, 0xd4, 0x37, 0x5a, 0x88, 0x94, 0xa7,
  0x12, 0xd7, 0xa8, 0x93, 0x88, 0x82, 0xdd, 0xa1, 0xaf, 0x47, 0xd1, 0x39,
  0x68, 0xff, 0xc9, 0xda, 0xce, 0xc1, 0x4c, 0xc1, 0xfd, 0x90, 0xaf, 0x0b,
  0x76, 0x0e, 0x66, 0x0a, 0xee, 0x87, 0x7c, 0x5d, 0x20, 0xfa, 0x2e, 0x4a,
  0xe9, 0x09, 0x6b, 0x67, 0x73, 0xcf, 0x1c, 0xf8, 0x0a, 0xdc, 0x3f, 0x0b,
  0x44, 0xdf, 0x45, 0x29, 0x3d, 0x61, 0xed, 0x6c, 0xee, 0x99, 0x03, 0x5f,
  0x81, 0xfb, 0x67, 0x41, 0xd7, 0xe8, 0x43, 0x5d, 0xcf, 0x41, 0xea, 0xf9,
  0xba, 0x46, 0x1f, 0xea, 0x7a, 0x0e, 0x52, 0xcf, 0x2f, 0xee, 0xcc, 0x94,
  0xea, 0x5e, 0xc8, 0x08, 0x5f, 0x80, 0xf2, 0x73, 0x7a, 0x5c, 0x9e, 0xc1,
  0xbc, 0x59, 0x93, 0x4f, 0x73, 0x99, 0x21, 0xfd, 0x86, 0x21, 0x81, 0xef,
  0x23, 0x46, 0xc8, 0x61, 0xfa, 0xbc, 0x0b, 0xf4, 0x09, 0x9f, 0xb0, 0xca,
  0xc2, 0x08, 0x3d, 0x99, 0xc5, 0x12, 0xbc, 0x87, 0x10, 0x5a, 0x23, 0x61,
  0x10, 0x17, 0xdd, 0x6e, 0x6f, 0x08, 0x0a, 0x11, 0x83, 0x0d, 0xd1, 0xdd,
  0xff, 0x40, 0x9a, 0x00, 0xc7, 0xa3, 0xb5, 0xeb, 0xb2, 0xed, 0x2b, 0x9e,
  0x0a, 0x6d, 0x68, 0x4c, 0x79, 0x78, 0x0c, 0x61, 0x38, 0x8f, 0x40, 0x1e,
  0x27, 0x91, 0x32, 0x7e, 0x6a, 0x71, 0x43, 0x39, 0xd8, 0xee, 0xa8, 0xb7,
  0x4a, 0xa9, 0x28, 0xe5, 0x7e, 0xe0, 0xf4, 0x8b, 0xa4, 0xd7, 0xc5, 0xea,
  0xd2, 0x3d, 0x9a, 0xed, 0x81, 0x6a, 0x75, 0xaa, 0xaa, 0x49, 0x8e, 0x0d,
  0xa1, 0xd6, 0x11, 0xe3, 0x9f, 0xa2, 0x1b, 0x04, 0x65, 0x9a, 0xa5, 0xeb,
  0xc5, 0x9d, 0x99, 0x52, 0xdd, 0x0b, 0x19, 0xe1, 0x0b, 0x50, 0x7e, 0x4e,
  0x8f, 0xcb, 0x33, 0x98, 0x37, 0x6b, 0xf2, 0x69, 0x2e, 0x33, 0xa4, 0xdf,
  0x30, 0x24, 0xf0, 0x7d, 0xc4, 0x08, 0x39, 0x4c, 0x9f, 0x77, 0x81, 0x3e,
  0xe1, 0x13, 0x56, 0x59, 0x18, 0xa1, 0x27, 0xb3, 0x58, 0x82, 0xf7, 0x10,
  0x42, 0x6b, 0x24, 0x0c, 0xe2, 0xa2, 0xdb, 0xed, 0x0d, 0x41, 0x21, 0x62,
  0xb0, 0x21, 0xba, 0xfb, 0x1f, 0x48, 0x13, 0xe0, 0x78, 0xb4, 0x76, 0x5d,
  0xb6, 0x7d, 0xc5, 0x53, 0xa1, 0x0d, 0x8d, 0x29, 0x0f, 0x8f, 0x21, 0x0c,
  0xe7, 0x11, 0xc8, 0xe3, 0x24, 0x52, 0xc6, 0x4f, 0x2d, 0x6e, 0x28, 0x07,
  0xdb, 0x1d, 0xf5, 0x56, 0x29, 0x15, 0xa5, 0xdc, 0x0f, 0x9c, 0x7e, 0x91,
  0xf4, 0xba, 0x58, 0x5d, 0xba, 0x47, 0xb3, 0x3d, 0x50, 0xad, 0x4e, 0x55,
  0x35, 0xc9, 0xb1, 0x21, 0xd4, 0x3a, 0x62, 0xfc, 0x53, 0x74, 0x83, 0xa0,
  0x4c, 0xb3, 0x74, 0xfd, 0x70, 0x3a, 0x1d, 0xe9, 0x92, 0x44, 0xd6, 0xd6,
  0x87, 0xd3, 0xe9, 0x48, 0x97, 0x24, 0xb2, 0xb6, 0x2e, 0x09, 0xd0, 0xa7,
  0xec, 0x90, 0x92, 0x11, 0x2a, 0x91, 0x9d, 0x83, 0x30, 0xb5, 0x2c, 0xeb,
  0xdc, 0xc9, 0xd7, 0x90, 0x71, 0xfd, 0x53, 0xd7, 0xbb, 0x87, 0x45, 0x75,
  0xb8, 0xd0, 0x7d, 0x82, 0x31, 0xca, 0x18, 0x64, 0x0d, 0xca, 0xa3, 0xbc,
  0x35, 0xf4, 0xf1, 0xa8, 0x4f, 0xc5, 0xa2, 0x24, 0xfb, 0xb5, 0x15, 0x37,
  0xa2, 0x64, 0x41, 0xf9, 0xc5, 0x56, 0xed, 0xc0, 0x53, 0x51, 0x2c, 0x37,
  0xb3, 0x11, 0x83, 0xed, 0x18, 0xbe, 0x52, 0x57, 0x8d, 0x33, 0x14, 0xec,
  0x8b, 0x2c, 0x0a, 0x47, 0xdf, 0x7b, 0x37, 0x00, 0x50, 0xf5, 0xc1, 0x62,
  0xf8, 0x73, 0xe0, 0x86, 0xda, 0x56, 0xa7, 0x0b, 0x23, 0xcf, 0x89, 0x19,
  0x30, 0xd4, 0x98, 0x63, 0x5c, 0xfa, 0x74, 0xc4, 0x47, 0x47, 0xa3, 0x49,
  0x18, 0x38, 0x59, 0x37, 0x9a, 0xd6, 0x08, 0xda, 0xa1, 0x28, 0x94, 0x7a,
  0xcf, 0x4d, 0x03, 0x06, 0x48, 0xf4, 0x8b, 0x7a, 0x89, 0x65, 0x4f, 0xf9,
  0x93, 0x6b, 0x56, 0xe0, 0x19, 0xef, 0xeb, 0xbf, 0xe8, 0xb3, 0x88, 0xf8,
  0xa7, 0x25, 0xfd, 0x3f, 0x79, 0xd8, 0xd6, 0x69, 0x06, 0x7b, 0x38, 0x16,
  0xda, 0x17, 0xb8, 0x73, 0xc0, 0x58, 0x29, 0x12, 0x09, 0x2e, 0xbd, 0x06,
  0x0b, 0xdc, 0xf4, 0xc2, 0xd9, 0x34, 0x86, 0x77, 0xd6, 0xab, 0x8a, 0x9b,
  0x8a, 0xdf, 0xaf, 0xe3, 0xa9, 0x07, 0xc9, 0x8e, 0x07, 0x48, 0xb9, 0x76,
  0xe7, 0x87, 0x9e, 0x59, 0xd9, 0x25, 0xd2, 0xe6, 0xea, 0xb4, 0xb4, 0xf0,
  0xe1, 0x37, 0x9a, 0x15, 0x8f, 0xf6, 0x90, 0x39, 0xfd, 0xb3, 0x72, 0xad,
  0x2b, 0xc9, 0x48, 0x54, 0x59, 0x09, 0xf3, 0x20, 0x66, 0xbf, 0x5e, 0x94,
  0xb5, 0xa4, 0xd5, 0xfd, 0x77, 0xb6, 0x4f, 0x94, 0xed, 0x45, 0x59, 0x08,
  0x23, 0xf9, 0xea, 0xff, 0xde, 0x40, 0x71, 0x26, 0x51, 0xb1, 0x2c, 0x73,
  0x90, 0x5c, 0x31, 0x10, 0xdb, 0xf2, 0x86, 0x6c, 0x4b, 0xe7, 0x87, 0x8c,
  0xd7, 0xdd, 0x26, 0x91, 0x0c, 0x74, 0x72, 0x5d, 0xa9, 0x53, 0x85, 0x8d,
  0x08, 0xf5, 0x8c, 0xb0, 0x6b, 0x64, 0xf4, 0x70, 0x86, 0xfc, 0xf4, 0x51,
  0x7c, 0x0d, 0x34, 0xa3, 0x4f, 0xbc, 0x86, 0x7e, 0xbf, 0xd0, 0x28, 0xf1,
  0xb1, 0x1c, 0xd7, 0x0f, 0x27, 0x79, 0xf2, 0xec, 0x4a, 0xf2, 0x5b, 0x15,
  0xb5, 0x00, 0x7b, 0xe1, 0x07, 0x4e, 0xd8, 0x59, 0x7b, 0x8f, 0xc5, 0x43,
  0x2f, 0x68, 0x62, 0x35, 0x17, 0x98, 0xb6, 0x2d, 0x87, 0xe8, 0x96, 0x41,
  0x28, 0x7c, 0x48, 0x97, 0x4b, 0x91, 0x36, 0xf7, 0x93, 0x7c, 0xc2, 0x70,
  0x6d, 0xdc, 0x9c, 0x13, 0xed, 0x61, 0x08, 0x18, 0xaf, 0x29, 0xcb, 0x8f,
  0xec, 0x54, 0xe5, 0x14, 0x6c, 0x14, 0x43, 0x86, 0xf8, 0xb0, 0x01, 0xc9,
  0xcf, 0xf5, 0xde, 0xec, 0x8c, 0xc7, 0xdf, 0xee, 0x64, 0xcd, 0x54, 0xa5,
  0xde, 0x8e, 0xcb, 0xfe, 0x13, 0xeb, 0xfb, 0x7e, 0x2d, 0x96, 0x24, 0x2f,
  0xf5, 0xe9, 0x02, 0xf1, 0x5b, 0xbf, 0xf6, 0x03, 0x68, 0x9f, 0x36, 0xa1,
  0x6d, 0x8b, 0x7e, 0x82, 0x65, 0x02, 0xe5, 0x56, 0x3f, 0xd2, 0x76, 0x29,
  0xd0, 0xa4, 0xb7, 0x18, 0x29, 0xd2, 0xd8, 0xa9, 0xf7, 0xdf, 0x6c, 0xb7,
  0xb8, 0xe8, 0x52, 0xe0, 0x5a, 0x41, 0xca, 0xcf, 0x6a, 0xf9, 0x5f, 0x72,
  0x9e, 0xe4, 0xd9, 0xe1, 0xd8, 0x2f, 0x25, 0x48, 0xdd, 0x3f, 0xe1, 0x25,
  0x7c, 0x18, 0xec, 0xa6, 0xb8, 0x7f, 0xc6, 0x0f, 0x9e, 0xf0, 0xc3, 0x66,
  0x2c, 0x81, 0x01, 0xf2, 0xa1, 0xe9, 0x24, 0x68, 0xce, 0xe4, 0x9e, 0x16,
  0x74, 0x5f, 0xd4, 0x04, 0x5c, 0xe6, 0xc5, 0x43, 0x9c, 0x7b, 0x36, 0x45,
  0x07, 0xfe, 0x56, 0x34, 0x96, 0xb6, 0x83, 0x4a, 0x02, 0x70, 0x2d, 0xb9,
  0xc2, 0x97, 0xe5, 0xbd, 0xb3, 0x4b, 0x05, 0x5e, 0x17, 0x62, 0xc1, 0x73,
  0xbe, 0x4f, 0x95, 0x7e, 0x90, 0xc7, 0x93, 0x4f, 0x57, 0xc8, 0x3f, 0x8e,
  0xf4, 0x99, 0x0d, 0xdc, 0x58, 0x46, 0xdf, 0xe3, 0x5a, 0xab, 0x6b, 0x84,
  0xe5, 0x7b, 0xce, 0xc2, 0xea, 0xf5, 0xf7, 0x6d, 0x36, 0x52, 0xaf, 0xe7,
  0x25, 0x01, 0xfa, 0x94, 0x1d, 0x52, 0x32, 0x42, 0x25, 0xb2, 0x73, 0x10,
  0xa6, 0x96, 0x65, 0x9d, 0x3b, 0xf9, 0x1a, 0x32, 0xae, 0x7f, 0xea, 0x7a,
  0xf7, 0xb0, 0xa8, 0x0e, 0x17, 0xba, 0x4f, 0x30, 0x46, 0x19, 0x83, 0xac,
  0x41, 0x79, 0x94, 0xb7, 0x86, 0x3e, 0x1e, 0xf5, 0xa9, 0x58, 0x94, 0x64,
  0xbf, 0xb6, 0xe2, 0x46, 0x94, 0x2c, 0x28, 0xbf, 0xd8, 0xaa, 0x1d, 0x78,
  0x2a, 0x8a, 0xe5, 0x66, 0x36, 0x62, 0xb0, 0x1d, 0xc3, 0x57, 0xea, 0xaa,
  0x71, 0x86, 0x82, 0x7d, 0x91, 0x45, 0xe1, 0xe8, 0x7b, 0xef, 0x06, 0x00,
  0xaa, 0x3e, 0x58, 0x0c, 0x7f, 0x0e, 0xdc, 0x50, 0xdb, 0xea, 0x74, 0x61,
  0xe4, 0x39, 0x31, 0x03, 0x86, 0x1a, 0x73, 0x8c, 0x4b, 0x9f, 0x8e, 0xf8,
  0xe8, 0x68, 0x34, 0x09, 0x03, 0x27, 0xeb, 0x46, 0xd3, 0x1a, 0x41, 0x3b,
  0x14, 0x85, 0x52, 0xef, 0xb9, 0x69, 0xc0, 0x00, 0x89, 0x7e, 0x51, 0x2f,
  0xb1, 0xec, 0x29, 0x7f, 0x72, 0xcd, 0x0a, 0x3c, 0xe3, 0x7d, 0xfd, 0x17,
  0x7d, 0x16, 0x11, 0xff, 0xb4, 0xa4, 0xff, 0x27, 0x0f, 0xdb, 0x3a, 0xcd,
  0x60, 0x0f, 0xc7, 0x42, 0xfb, 0x02, 0x77, 0x0e, 0x18, 0x2b, 0x45, 0x22,
  0xc1, 0xa5, 0xd7, 0x60, 0x81, 0x9b, 0x5e, 0x38, 0x9b, 0xc6, 0xf0, 0xce,
  0x7a, 0x55, 0x71, 0x53, 0xf1, 0xfb, 0x75, 0x3c, 0xf5, 0x20, 0xd9, 0xf1,
  0x00, 0x29, 0xd7, 0xee, 0xfc, 0xd0, 0x33, 0x2b, 0xbb, 0x44, 0xda, 0x5c,
  0x9d, 0x96, 0x16, 0x3e, 0xfc, 0x4a, 0xb3, 0xe2, 0xd1, 0x1e, 0x32, 0xa7,
  0x7f, 0x56, 0xae, 0x75, 0x25, 0x19, 0x89, 0x2a, 0x2b, 0x61, 0x1e, 0xc4,
  0xec, 0xd7, 0x8b, 0xb2, 0x96, 0xb4, 0xba, 0xff, 0xce, 0xf6, 0x89, 0xb2,
  0xbd, 0x28, 0x0b, 0x61, 0x24, 0x5f, 0xfd, 0xdf, 0x1b, 0x28, 0xce, 0x24,
  0x2a, 0x96, 0x65, 0x0e, 0x92, 0x2b, 0x06, 0x62, 0x5b, 0xde, 0x90, 0x6d,
  0xe9, 0xfc, 0x90, 0xf1, 0xba, 0xdb, 0x24, 0x92, 0x81, 0x4e, 0xae, 0x2b,
  0x75, 0xaa, 0xb0, 0x11, 0xa1, 0x9e, 0x11, 0x76, 0x8d, 0x8c, 0x1e, 0xce,
  0x90, 0x9f, 0x3e, 0x8a, 0xaf, 0x81, 0x66, 0xf4, 0x89, 0xd7, 0xd0, 0xef,
  0x17, 0x1a, 0x25, 0x3e, 0x96, 0xe3, 0xfa, 0xe1, 0x24, 0x4f, 0x9e, 0x5d,
  0x49, 0x7e, 0xab, 0xa2, 0x16, 0x60, 0x2f, 0xfc, 0xc0, 0x09, 0x3b, 0x6b,
  0xef, 0xb1, 0x78, 0xe8, 0x05, 0x4d, 0xac, 0xe6, 0x02, 0xd3, 0xb6, 0xe5,
  0x10, 0xdd, 0x32, 0x08, 0x85, 0x0f, 0xe9, 0x72, 0x29, 0xd2, 0xe6, 0x7e,
  0x92, 0x4f, 0x18, 0xae, 0x8d, 0x9b, 0x73, 0xa2, 0x3d, 0x0c, 0x01, 0xe3,
  0x35, 0x65, 0xf9, 0x91, 0x9d, 0xaa, 0x9c, 0x82, 0x8d, 0x62, 0xc8, 0x10,
  0x1f, 0x36, 0x20, 0xf9, 0xb9, 0xde, 0x9b, 0x9d, 0xf1, 0xf8, 0x9b, 0x9d,
  0xac, 0x99, 0xaa, 0xd4, 0xdb, 0x71, 0xd9, 0x7f, 0x62, 0x7d, 0xdf, 0xaf,
  0xc5, 0x92, 0xe4, 0xa5, 0x3e, 0x5d, 0x20, 0x7e, 0xeb, 0xd7, 0x7e, 0x00,
  0xed, 0xd3, 0x26, 0xb4, 0x6d, 0xd1, 0x4f, 0xb0, 0x4c, 0xa0, 0xdc, 0xea,
  0x47, 0xda, 0x2e, 0x05, 0x9a, 0xf4, 0x16, 0x23, 0x45, 0x1a, 0x3b, 0xf5,
  0xfe, 0x9b, 0xed, 0x16, 0x17, 0x5d, 0x0a, 0x5c, 0x2b, 0x48, 0xf9, 0x59,
  0x2d, 0xff, 0x4b, 0xce, 0x93, 0x3c, 0x3b, 0x1c, 0xfb, 0xa5, 0x04, 0xa9,
  0xfb, 0x27, 0xbc, 0x84, 0x0f, 0x83, 0xdd, 0x14, 0xf7, 0xcf, 0xf8, 0xc1,
  0x13, 0x7e, 0xd8, 0x8c, 0x25, 0x30, 0x40, 0x3e, 0x34, 0x9d, 0x04, 0xcd,
  0x99, 0xdc, 0xd3, 0x82, 0xee, 0x8b, 0x9a, 0x80, 0xcb, 0xbc, 0x78, 0x88,
  0x73, 0xcf, 0xa6, 0xe8, 0xc0, 0xdf, 0x8a, 0xc6, 0xd2, 0x76, 0x50, 0x49,
  0x00, 0xae, 0x25, 0x57, 0xf8, 0xb2, 0xbc, 0x77, 0x76, 0xa9, 0xc0, 0xeb,
  0x42, 0x2c, 0x78, 0xce, 0xf7, 0xa9, 0xd2, 0x0f, 0xf2, 0x78, 0xf2, 0xe9,
  0x0a, 0xf9, 0xc7, 0x91, 0x3e, 0xb3, 0x81, 0x1b, 0xcb, 0xe8, 0x7b, 0x5c,
  0x6b, 0x75, 0x8d, 0xb0, 0x7c, 0xcf, 0x59, 0x58, 0xbd, 0xfe, 0xbe, 0xcd,
  0x46, 0xea, 0xf5, 0x7c, 0x6e, 0xed, 0x80, 0x7b, 0x45, 0x92, 0x11, 0x67,
  0x73, 0x6b, 0x07, 0xdc, 0x2b, 0x92, 0x8c, 0x38, 0x5b, 0xea, 0xf6, 0x80,
  0x2e, 0x88, 0x4c, 0x98, 0x4c, 0x07, 0x7a, 0x31, 0x06, 0xc9, 0x83, 0x49,
  0x81, 0x42, 0x0d, 0xba, 0xb5, 0x0e, 0x2c, 0x94, 0xce, 0x12, 0xb1, 0x76,
  0xfe, 0x65, 0x2a, 0x9e, 0x8a, 0x9b, 0xb4, 0xbe, 0x6f, 0x76, 0x29, 0xf7,
  0x97, 0xea, 0xec, 0x02, 0xe7, 0x11, 0xb5, 0x34, 0x0a, 0xca, 0x8e, 0x7a,
  0x90, 0x38, 0xcf, 0x05, 0x04, 0xcb, 0x86, 0xf6, 0xfc, 0xdd, 0xaa, 0x1d,
  0x7f, 0x7e, 0x80, 0xc0, 0x8b, 0x1a, 0xe4, 0x34, 0x55, 0x9a, 0xf9, 0xc3,
  0x4b, 0xdd, 0x1e, 0xd0, 0x05, 0x91, 0x09, 0x93, 0xe9, 0x40, 0x2f, 0xc6,
  0x20, 0x79, 0x30, 0x29, 0x50, 0xa8, 0x41, 0xb7, 0xd6, 0x81, 0x85, 0xd2,
  0x59, 0x22, 0xd6, 0xce, 0xbf, 0x4c, 0xc5, 0x53, 0x71, 0x93, 0xd6, 0xf7,
  0xcd, 0x2e, 0xe5, 0xfe, 0x52, 0x9d, 0x5d, 0xe0, 0x3c, 0xa2, 0x96, 0x46,
  0x41, 0xd9, 0x51, 0x0f, 0x12, 0xe7, 0xb9, 0x80, 0x60, 0xd9, 0xd0, 0x9e,
  0xbf, 0x5b, 0xb5, 0xe3, 0xcf, 0x0f, 0x10, 0x78, 0x51, 0x83, 0x9c, 0xa6,
  0x4a, 0x33, 0x7f, 0xf8, 0xf5, 0xf9, 0x04, 0x17, 0x9e, 0x53, 0xd4, 0xa0,
  0xaf, 0xcf, 0x27, 0xb8, 0xf0, 0x9c, 0xa2, 0x06, 0x95, 0xb4, 0x7b, 0x71,
  0x14, 0x62, 0xfd, 0xa1, 0xae, 0x10, 0xca, 0xd0, 0x57, 0x27, 0xb9, 0xcd,
  0x92, 0x76, 0x2f, 0x8e, 0x42, 0xac, 0x3f, 0xd4, 0x15, 0x42, 0x19, 0xfa,
  0xea, 0x24, 0xb7, 0xb9, 0x6e, 0x1d, 0x16, 0xc1, 0x31, 0x9d, 0x79, 0x5d,
  0x75, 0xeb, 0xb0, 0x08, 0x8e, 0xe9, 0xcc, 0xeb, 0xf2, 0x7e, 0x2d, 0x90,
  0x4e, 0xc0, 0x4b, 0x5f, 0x07, 0xa4, 0x36, 0x3b, 0x30, 0x8d, 0x1d, 0x84,
  0x8b, 0xd3, 0x28, 0xd1, 0xdc, 0xef, 0x52, 0x44, 0x73, 0xee, 0xe8, 0x01,
  0x88, 0x55, 0xd0, 0x36, 0x12, 0xc2, 0x5d, 0xb6, 0xf8, 0x90, 0x94, 0xb7,
  0x47, 0x29, 0xb6, 0x0f, 0x21, 0x22, 0x38, 0x3c, 0x23, 0x77, 0x95, 0xc0,
  0xde, 0xaf, 0x05, 0xd2, 0x09, 0x78, 0xe9, 0xeb, 0x80, 0xd4, 0x66, 0x07,
  0xa6, 0xb1, 0x83, 0x70, 0x71, 0x1a, 0x25, 0x9a, 0xfb, 0x5d, 0x8a, 0x68,
  0xce, 0x1d, 0x3d, 0x00, 0xb1, 0x0a, 0xda, 0x46, 0x42, 0xb8, 0xcb, 0x16,
  0x1f, 0x92, 0xf2, 0xf6, 0x28, 0xc5, 0xf6, 0x21, 0x44, 0x04, 0x87, 0x67,
  0xca, 0xd5, 0x28, 0xe3, 0x2f, 0x53, 0x7d, 0xa6, 0x75, 0x9a, 0x66, 0x1c,
  0x7f, 0xc2, 0xeb, 0xae, 0x9c, 0x83, 0xac, 0x50, 0xe8, 0x93, 0xc3, 0xfb,
  0x5c, 0xed, 0x14, 0x94, 0x40, 0x54, 0x82, 0x72, 0x48, 0xa9, 0x39, 0x2d,
  0xc2, 0x12, 0x1a, 0xfe, 0x14, 0x9f, 0x84, 0xc2, 0x6b, 0x1f, 0xac, 0x1f,
  0x4e, 0x81, 0xf9, 0x3f, 0x21, 0xc6, 0xe2, 0x6d, 0x6a, 0xee, 0x40, 0xac,
  0x3e, 0xa0, 0x4e, 0x49, 0x0a, 0xb9, 0x66, 0x08, 0x1c, 0x30, 0x69, 0xf7,
  0xb1, 0x6c, 0xba, 0x5d, 0x93, 0xeb, 0x26, 0x52, 0x42, 0x62, 0xd4, 0x7a,
  0x8a, 0x6f, 0xb3, 0xb0, 0x30, 0x16, 0x75, 0x4a, 0xd5, 0x23, 0x38, 0xe5,
  0xec, 0xb6, 0xe1, 0xf8, 0x02, 0xfd, 0x0e, 0x73, 0xc9, 0x8d, 0x5e, 0x87,
  0x90, 0xb6, 0x83, 0x6f, 0x8c, 0x54, 0x55, 0x48, 0x1d, 0x2b, 0x7d, 0xcd,
  0xe4, 0xae, 0x12, 0x58, 0xb9, 0x1a, 0x65, 0xfc, 0x65, 0xaa, 0xcf, 0xb4,
  0x4e, 0xd3, 0x8c, 0xe3, 0x4f, 0x78, 0xdd, 0x95, 0x73, 0x90, 0x15, 0x0a,
  0x7d, 0x72, 0x78, 0x9f, 0xab, 0x9d, 0x82, 0x12, 0x88, 0x4a, 0x50, 0x0e,
  0x29, 0x35, 0xa7, 0x45, 0x58, 0x42, 0xc3, 0x9f, 0xe2, 0x93, 0x50, 0x78,
  0xed, 0x83, 0xf5, 0xc3, 0x29, 0x30, 0xff, 0x27, 0xc4, 0x58, 0xbc, 0x4d,
  0xcd, 0x1d, 0x88, 0xd5, 0x07, 0xd4, 0x29, 0x49, 0x21, 0xd7, 0x0c, 0x81,
  0x03, 0x26, 0xed, 0x3e, 0x96, 0x4d, 0xb7, 0x6b, 0x72, 0xdd, 0x44, 0x4a,
  0x48, 0x8c, 0x5a, 0x4f, 0xf1, 0x6d, 0x16, 0x16, 0xc6, 0xa2, 0x4e, 0xa9,
  0x7a, 0x04, 0xa7, 0x9c, 0xdd, 0x36, 0x1c, 0x5f, 0xa0, 0xdf, 0x61, 0x2e,
  0xb9, 0xd1, 0xeb, 0x10, 0xd2, 0x76, 0xf0, 0x8d, 0x91, 0xaa, 0x0a, 0xa9,
  0x63, 0xa5, 0xaf, 0x59, 0x7f, 0xdd, 0xed, 0xec, 0x72, 0x54, 0x56, 0x39,
  0xfa, 0xeb, 0x6e, 0x67, 0x97, 0xa3, 0xb2, 0xca, 0x21, 0x6f, 0x28, 0x91,
  0x53, 0x07, 0x03, 0xdd, 0x0f, 0x88, 0x9f, 0xc0, 0x7a, 0x8c, 0x0d, 0xa7,
  0x91, 0xb5, 0x24, 0xe1, 0xd0, 0x5a, 0x30, 0xf4, 0x82, 0xe8, 0x15, 0xbf,
  0xb3, 0xa3, 0x0a, 0x74, 0x42, 0xac, 0xbe, 0x5c, 0x6b, 0x70, 0x6c, 0x07,
  0x47, 0x4d, 0x79, 0xb1, 0xab, 0x75, 0x0b, 0x45, 0x0c, 0xd6, 0x10, 0x5e,
  0xc5, 0x95, 0xec, 0x81, 0x2f, 0x2a, 0xaf, 0xeb, 0x15, 0x1d, 0xd8, 0x9b,
  0xa3, 0xe3, 0x43, 0x9b, 0xd5, 0xf6, 0x7f, 0xef, 0x8c, 0xb0, 0xe5, 0xd5,
  0x34, 0xc8, 0xe1, 0xe3, 0x1a, 0x52, 0xaf, 0x20, 0x58, 0x8a, 0x4c, 0xbf,
  0xe4, 0x0d, 0x25, 0x72, 0xea, 0x60, 0xa0, 0xfb, 0x01, 0xf1, 0x13, 0x58,
  0x8f, 0xb1, 0xe1, 0x34, 0xb2, 0x96, 0x24, 0x1c, 0x5a, 0x0b, 0x86, 0x5e,
  0x10, 0xbd, 0xe2, 0x77, 0x76, 0x54, 0x81, 0x4e, 0x88, 0xd5, 0x97, 0x6b,
  0x0d, 0x8e, 0xed, 0xe0, 0xa8, 0x29, 0x2f, 0x76, 0xb5, 0x6e, 0xa1, 0x88,
  0xc1, 0x1a, 0xc2, 0xab, 0xb8, 0x92, 0x3d, 0xf0, 0x45, 0xe5, 0x75, 0xbd,
  0xa2, 0x03, 0x7b, 0x73, 0x74, 0x7c, 0x68, 0xb3, 0xda, 0xfe, 0x9f, 0x9d,
  0x11, 0xb6, 0xbc, 0x9a, 0x06, 0x39, 0x7c, 0x5c, 0x43, 0xea, 0x15, 0x04,
  0x4b, 0x91, 0xe9, 0xb7, 0x03, 0xee, 0x77, 0x47, 0x3f, 0x6e, 0x55, 0x98,
  0x1b, 0x70, 0xbf, 0x3b, 0xfa, 0x71, 0xab, 0xc2, 0xf4, 0xf0, 0xdd, 0xf7,
  0x47, 0x67, 0x27, 0xef, 0xde, 0x1e, 0xbe, 0x3b, 0xff, 0xcc, 0x63, 0x77,
  0x31, 0x34, 0xf7, 0x3a, 0x4c, 0x2e, 0xc8, 0x11, 0x0e, 0xba, 0xa1, 0x22,
  0x40, 0xee, 0xa9, 0x60, 0x56, 0x2a, 0xff, 0x1a, 0xf9, 0xc3, 0x79, 0x0f,
  0xa9, 0x67, 0x1f, 0x99, 0x24, 0x4b, 0x78, 0x76, 0x66, 0x88, 0xab, 0x8e,
  0x38, 0x16, 0x60, 0xfb, 0x85, 0x02, 0x50, 0xfe, 0x16, 0x00, 0xbe, 0x94,
  0x1e, 0xbe, 0xfb, 0xee, 0xe8, 0xec, 0xe4, 0xdd, 0xdb, 0xc3, 0x77, 0xe7,
  0x9f, 0x79, 0xec, 0x2e, 0x86, 0xe6, 0x5e, 0x87, 0xc9, 0x05, 0x39, 0xc2,
  0x41, 0x37, 0x54, 0x04, 0xc8, 0x3d, 0x15, 0xcc, 0x4a, 0xe5, 0x5f, 0x23,
  0x7f, 0x38, 0xef, 0x21, 0xf5, 0xec, 0x23, 0x93, 0x64, 0x09, 0xcf, 0xce,
  0x0c, 0x71, 0xd5, 0x11, 0xc7, 0x02, 0x6c, 0xbf, 0x50, 0x00, 0xca, 0xdf,
  0x02, 0xc0, 0x97, 0x52, 0x81, 0x51, 0x3b, 0xf6, 0x99, 0xdd, 0x12, 0x0e,
  0x0a, 0x8c, 0xda, 0xb1, 0xcf, 0xec, 0x96, 0x70, 0x10, 0xd0, 0xc5, 0x4a,
  0x5b, 0x93, 0x70, 0xc4, 0xfd, 0x5e, 0x0a, 0x40, 0x8b, 0x24, 0xba, 0x1a,
  0xae, 0x60, 0x68, 0x5c, 0xc7, 0x71, 0x2e, 0x45, 0xd7, 0xe8, 0x0b, 0x33,
  0x02, 0xba, 0x58, 0x69, 0x6b, 0x12, 0x8e, 0xb8, 0xdf, 0x4b, 0x01, 0x68,
  0x91, 0x44, 0x57, 0xc3, 0x15, 0x0c, 0x8d, 0xeb, 0x38, 0xce, 0xa5, 0xe8,
  0x1a, 0x7d, 0x61, 0x26, 0xe1, 0xe5, 0x80, 0x3a, 0x80, 0x00, 0xbf, 0xb5,
  0x69, 0xb7, 0x77, 0x81, 0xb7, 0x8a, 0x3f, 0xab, 0xb3, 0xe8, 0x60, 0x67,
  0x09, 0x2f, 0x07, 0xd4, 0x01, 0x04, 0xf8, 0xad, 0x4d, 0xbb, 0xbd, 0x0b,
  0xbc, 0x55, 0xfc, 0x59, 0x9d, 0x45, 0x07, 0x3b, 0x3b, 0x3f, 0x53, 0x57,
  0xdd, 0x3f, 0x4a, 0x5b, 0xdd, 0x10, 0xfc, 0xb1, 0xf6, 0xa6, 0xe1, 0x4a,
  0xe7, 0x27, 0xea, 0xaa, 0xfb, 0x47, 0x69, 0xab, 0x1b, 0x82, 0x3f, 0xd6,
  0xde, 0x34, 0x5c, 0xc9, 0x90, 0x56, 0x17, 0x82, 0x6e, 0xed, 0x76, 0x92,
  0x1b, 0xf8, 0xc3, 0xe9, 0xd9, 0xc9, 0x0f, 0x7f, 0xfa, 0x95, 0x3f, 0xe1,
  0x86, 0xb4, 0xba, 0x10, 0x74, 0x6b, 0xb7, 0x93, 0xdc, 0xc0, 0x1f, 0x4e,
  0xcf, 0x4e, 0x7e, 0xfc, 0xd3, 0x6f, 0xfc, 0x09, 0x2f, 0xd9, 0xec, 0xcf,
  0xc8, 0xc1, 0xd4, 0xc1, 0x7f, 0xfe, 0xcd, 0xbf, 0xd6, 0x1e, 0x7e, 0xe0,
  0xf5, 0x7e, 0x8f, 0x29, 0x64, 0x5c, 0xbc, 0xcd, 0x10, 0xd7, 0x2e, 0x25,
  0x3a, 0xf1, 0x7c, 0x1c, 0x36, 0x19, 0x88, 0x44, 0x5c, 0xdd, 0x26, 0xd0,
  0x34, 0x04, 0xbc, 0x1d, 0x71, 0x49, 0xb1, 0xcb, 0xe0, 0xd5, 0xaa, 0x72,
  0x25, 0x9b, 0xfd, 0x19, 0x39, 0x98, 0x3a, 0xf8, 0x4f, 0xbf, 0xfa, 0xd7,
  0xda, 0xc3, 0x0f, 0xbc, 0xde, 0xef, 0x31, 0x85, 0x8c, 0x8b, 0xb7, 0x19,
  0xe2, 0xda, 0xa5, 0x44, 0x27, 0x9e, 0x8f, 0xc3, 0x26, 0x03, 0x91, 0x88,
  0xab, 0xdb, 0x04, 0x9a, 0x86, 0x80, 0xb7, 0x23, 0x2e, 0x29, 0x76, 0x19,
  0xbc, 0x5a, 0x55, 0x8e, 0xca, 0x71, 0xae, 0x2d, 0xa7, 0x7c, 0x54, 0xbb,
  0x54, 0x8e, 0x73, 0x6d, 0x39, 0xe5, 0xa3, 0xda, 0xfd, 0x78, 0x79, 0x7c,
  0xfc, 0x9b, 0x6e, 0x02, 0x75, 0x26, 0x75, 0x6b, 0x19, 0x5a, 0x0d, 0x55,
  0x7b, 0x9b, 0xaf, 0xc7, 0xe0, 0x7c, 0x77, 0x22, 0xb3, 0x79, 0x41, 0xca,
  0xf1, 0xb0, 0xce, 0x8c, 0x4a, 0x9b, 0x22, 0xde, 0xaf, 0x80, 0xc2, 0x98,
  0x1f, 0x2f, 0x8f, 0x8f, 0x7f, 0xd5, 0x4d, 0xa0, 0xce, 0xa4, 0x6e, 0x2d,
  0x43, 0xab, 0xa1, 0x6a, 0x6f, 0xf3, 0xf5, 0x18, 0x9c, 0xef, 0x4e, 0x64,
  0x36, 0x2f, 0x48, 0x39, 0x1e, 0xd6, 0x99, 0x51, 0x69, 0x53, 0xc4, 0xfb,
  0x15, 0x50, 0x18, 0x13, 0xab, 0x77, 0x38, 0x71, 0x32, 0xc0, 0x37, 0xa6,
  0x58, 0xbd, 0xc3, 0x89, 0x93, 0x01, 0xbe, 0x31, 0x3d, 0x44, 0xc9, 0x02,
  0x64, 0x42, 0x51, 0x5e, 0x25, 0xef, 0x26, 0x97, 0xc5, 0x51, 0xdd, 0x42,
  0x69, 0x71, 0x89, 0xb8, 0x4f, 0x32, 0xf7, 0xe9, 0xbd, 0x88, 0xb4, 0x61,
  0x65, 0x74, 0x08, 0xc8, 0xdb, 0x2a, 0xaf, 0x3f, 0x52, 0x51, 0x07, 0x6e,
  0x28, 0x29, 0x48, 0x5a, 0xbf, 0x0f, 0x95, 0x97, 0xe6, 0x34, 0x62, 0x88,
  0x11, 0x57, 0x4d, 0x97, 0xd7, 0xb1, 0xd9, 0x51, 0x3f, 0x1b, 0x16, 0xc5,
  0x70, 0xa3, 0xb2, 0x13, 0x3a, 0x6d, 0x95, 0x76, 0x09, 0x28, 0x33, 0x27,
  0x51, 0xd5, 0x16, 0x67, 0x20, 0x56, 0x96, 0x3e, 0xd0, 0x72, 0x63, 0xdb,
  0xdf, 0x3c, 0x6f, 0xea, 0x6c, 0x7e, 0x11, 0xaf, 0xb0, 0x8f, 0x72, 0x0b,
  0xa9, 0xf0, 0xb7, 0x8d, 0xa2, 0xfd, 0x46, 0xf4, 0x19, 0x61, 0xd2, 0x20,
  0xb4, 0x10, 0xfa, 0xeb, 0x84, 0x0e, 0x5b, 0x79, 0x06, 0xb7, 0xae, 0xbd,
  0x4f, 0xe2, 0x55, 0xb3, 0x72, 0x9e, 0x98, 0x9e, 0xed, 0x97, 0xb3, 0xb0,
  0x60, 0xca, 0x70, 0x24, 0x1f, 0xbf, 0x43, 0x25, 0xef, 0xf0, 0x36, 0x51,
  0x87, 0x28, 0x59, 0x80, 0x4c, 0x28, 0xca, 0xab, 0xe4, 0xdd, 0xe4, 0xb2,
  0x38, 0xaa, 0x5b, 0x28, 0x2d, 0x2e, 0x11, 0xf7, 0x49, 0xe6, 0x3e, 0xbd,
  0x17, 0x91, 0x36, 0xac, 0x8c, 0x0e, 0x01, 0x79, 0x5b, 0xe5, 0xf5, 0x47,
  0x2a, 0xea, 0xc0, 0x0d, 0x25, 0x05, 0x49, 0xeb, 0xf7, 0xa1, 0xf2, 0xd2,
  0x9c, 0x46, 0x0c, 0x31, 0xe2, 0xaa, 0xe9, 0xf2, 0x3a, 0x36, 0x3b, 0xea,
  0x67, 0xc3, 0xa2, 0x18, 0x6e, 0x54, 0x76, 0x42, 0xa7, 0xad, 0xd2, 0x2e,
  0x01, 0x65, 0xe6, 0x24, 0xaa, 0xda, 0xe2, 0x0c, 0xc4, 0xca, 0xd2, 0x07,
  0x5a, 0x6e, 0x6c, 0xfb, 0x9b, 0xe7, 0x4d, 0x9d, 0xcd, 0x2f, 0xe2, 0x15,
  0xf6, 0x51, 0x6e, 0x21, 0x15, 0xfe, 0xb6, 0x51, 0xb4, 0xdf, 0x88, 0x3e,
  0x23, 0x4c, 0x1a, 0x84, 0x16, 0x42, 0x7f, 0x9d, 0xd0, 0x61, 0x2b, 0xcf,
  0xe0, 0xd6, 0xb5, 0xf7, 0x49, 0xbc, 0x6a, 0x56, 0xce, 0x13, 0xd3, 0xb3,
  0xfd, 0x62, 0x16, 0x16, 0x4c, 0x19, 0x8e, 0xe4, 0xe3, 0x77, 0xa8, 0xe4,
  0xe0, 0x10, 0x3e, 0xa7, 0xd6, 0x33, 0xf2, 0x9b, 0x87, 0x0c, 0x47, 0xa0,
  0xe9, 0x35, 0x72, 0xa3, 0x65, 0xaa, 0x49, 0x83, 0xec, 0xde, 0x26, 0x11,
  0xbf, 0x38, 0x2b, 0xe1, 0x84, 0xb5, 0x13, 0xd6, 0x49, 0x78, 0x13, 0x5f,
  0x37, 0xd1, 0xde, 0x99, 0x46, 0x62, 0xc3, 0xe6, 0x31, 0xb8, 0xe0, 0x19,
  0x44, 0xc6, 0x1f, 0xcf, 0xce, 0x93, 0xb4, 0x55, 0x9e, 0x23, 0xeb, 0x71,
  0x0a, 0xa5, 0x95, 0xc5, 0x82, 0x70, 0xd1, 0xf4, 0x1b, 0xff, 0xca, 0xc8,
  0x5d, 0xb0, 0x25, 0xed, 0xa4, 0x84, 0xdb, 0xb2, 0x50, 0x17, 0x69, 0x47,
  0xb8, 0x25, 0x09, 0xfd, 0xe3, 0x14, 0x7f, 0x81, 0x50, 0x27, 0x46, 0x44,
  0xb1, 0x12, 0x5b, 0x77, 0x20, 0xc5, 0xb2, 0x54, 0x5f, 0x37, 0xd1, 0x32,
  0x63, 0x0d, 0x6e, 0x19, 0x11, 0x38, 0x2f, 0xeb, 0x18, 0x9c, 0xe6, 0x04,
  0x59, 0xf3, 0x19, 0x35, 0xe0, 0xe0, 0x2b, 0x6f, 0xfe, 0x7b, 0x7e, 0xf2,
  0xea, 0xe4, 0xd8, 0xfc, 0xe5, 0xf0, 0xcd, 0xd1, 0x8f, 0x4e, 0x2b, 0x60,
  0x80, 0x8a, 0x56, 0x81, 0x8c, 0xeb, 0x3d, 0x6e, 0xd9, 0x10, 0xe7, 0x20,
  0x22, 0xfd, 0x90, 0x53, 0xe2, 0xba, 0x14, 0x6a, 0xb9, 0xa5, 0xc7, 0xe7,
  0xa4, 0x83, 0x78, 0xab, 0x1b, 0xb8, 0x00, 0x2f, 0x41, 0x8b, 0xe6, 0x91,
  0x6d, 0x31, 0x85, 0xdb, 0x64, 0xd4, 0x48, 0xf9, 0x6c, 0x4e, 0xb2, 0x51,
  0xdd, 0x27, 0x73, 0x85, 0x25, 0x6a, 0x4d, 0xae, 0xac, 0x6c, 0x77, 0xca,
  0xc6, 0xef, 0x7c, 0xdc, 0x69, 0x35, 0xe1, 0x81, 0xb7, 0x1a, 0x0d, 0xd7,
  0x1d, 0xde, 0x26, 0x0a, 0x1c, 0xc2, 0xe7, 0xd4, 0x7a, 0x46, 0x7e, 0xf3,
  0x90, 0xe1, 0x08, 0x34, 0xbd, 0x46, 0x6e, 0xb4, 0x4c, 0x35, 0x69, 0x90,
  0xdd, 0xdb, 0x24, 0xe2, 0x17, 0x67, 0x25, 0x9c, 0xb0, 0x76, 0xc2, 0x3a,
  0x09, 0x6f, 0xe2, 0xeb, 0x26, 0xda, 0x3b, 0xd3, 0x48, 0x6c, 0xd8, 0x3c,
  0x06, 0x17, 0x3c, 0x83, 0xc8, 0xf8, 0xe3, 0xd9, 0x79, 0x92, 0xb6, 0xca,
  0x73, 0x64, 0x3d, 0x4e, 0xa1, 0xb4, 0xb2, 0x58, 0x10, 0x2e, 0x9a, 0x7e,
  0xe3, 0x5f, 0x19, 0xb9, 0x0b, 0xb6, 0xa4, 0x9d, 0x94, 0x70, 0x5b, 0x16,
  0xea, 0x22, 0xed, 0x08, 0xb7, 0x24, 0xa1, 0x7f, 0x9c, 0xe2, 0x2f, 0x10,
  0xea, 0xc4, 0x88, 0x28, 0x56, 0x62, 0xeb, 0x0e, 0xa4, 0x58, 0x96, 0xea,
  0xeb, 0x26, 0x5a, 0x66, 0xac, 0xc1, 0x2d, 0x23, 0x02, 0xe7, 0x65, 0x1d,
  0x83, 0xd3, 0x9c, 0x20, 0x6b, 0x3e, 0xa3, 0x06, 0x1c, 0x7c, 0xe5, 0xcd,
  0x7f, 0xcf, 0x4f, 0x5e, 0x9d, 0x1c, 0x9b, 0xbf, 0x1c, 0xbe, 0x39, 0xfa,
  0xc1, 0x69, 0x05, 0x0c, 0x50, 0xd1, 0x2a, 0x90, 0x71, 0xbd, 0xc7, 0x2d,
  0x1b, 0xe2, 0x1c, 0x44, 0xa4, 0x1f, 0x72, 0x4a, 0x5c, 0x97, 0x42, 0x2d,
  0xb7, 0xf4, 0xf8, 0x9c, 0x74, 0x10, 0x6f, 0x75, 0x03, 0x17, 0xe0, 0x25,
  0x68, 0xd1, 0x3c, 0xb2, 0x2d, 0xa6, 0x70, 0x9b, 0x8c, 0x1a, 0x29, 0x9f,
  0xcd, 0x49, 0x36, 0xaa, 0xfb, 0x64, 0xae, 0xb0, 0x44, 0xad, 0xc9, 0x95,
  0x95, 0xed, 0x4e, 0xd9, 0xf8, 0x9d, 0x8f, 0x3b, 0xad, 0x26, 0x3c, 0xf0,
  0x5f, 0xa4, 0x6d, 0x57, 0xdc, 0x54, 0x19, 0x71, 0x45, 0x02, 0xaa, 0x83,
  0x22, 0xe0, 0xa3, 0x7c, 0x74, 0x28, 0x82, 0x2a, 0x74, 0xec, 0x88, 0xed,
  0x35, 0xc9, 0x06, 0x48, 0x2e, 0x1f, 0xe5, 0x56, 0x40, 0x8f, 0xf7, 0x20,
  0x7e, 0x84, 0x5a, 0xa3, 0xe5, 0x82, 0x52, 0xa7, 0x84, 0x3f, 0x28, 0xbb,
  0x8a, 0xa3, 0x18, 0xc2, 0x51, 0xcf, 0xbd, 0x96, 0xcb, 0x2c, 0x15, 0x24,
  0xf8, 0xb4, 0x0c, 0x4d, 0x2b, 0x9c, 0x81, 0x28, 0xfb, 0x6d, 0x8d, 0xa3,
  0xee, 0xfb, 0x34, 0x4c, 0x54, 0xd9, 0x03, 0xf7, 0xe9, 0x20, 0xeb, 0x9a,
  0x5b, 0x8e, 0xaf, 0x1b, 0x03, 0x1a, 0xe1, 0x5f, 0x57, 0xf9, 0x75, 0x4a,
  0x56, 0xa3, 0xe1, 0xfa, 0x8b, 0xb4, 0xed, 0x8a, 0x9b, 0x2a, 0x23, 0xae,
  0x48, 0x40, 0x75, 0x50, 0x04, 0x7c, 0x94, 0x8f, 0x0e, 0x45, 0x50, 0x85,
  0x8e, 0x1d, 0xb1, 0xbd, 0x26, 0xd9, 0x00, 0xc9, 0xe5, 0xa3, 0xdc, 0x0a,
  0xe8, 0xf1, 0x1e, 0xc4, 0x8f, 0x50, 0x6b, 0xb4, 0x5c, 0x50, 0xea, 0x94,
  0xf0, 0x07, 0x65, 0x57, 0x71, 0x14, 0x43, 0x38, 0xea, 0xb9, 0xd7, 0x72,
  0x99, 0xa5, 0x82, 0x04, 0x9f, 0x96, 0xa1, 0x69, 0x85, 0x33, 0x10, 0x65,
  0xbf, 0xad, 0x71, 0xd4, 0x7d, 0x9f, 0x86, 0x89, 0x2a, 0x7b, 0xe0, 0x3e,
  0xb5, 0x65, 0xe6, 0xb2, 0x68, 0x9f, 0xf2, 0xce, 0x18, 0xe9, 0xaf, 0x1a,
  0x24, 0x6d, 0x8f, 0xf2, 0xe4, 0xd7, 0x0c, 0xf2, 0xa4, 0x33, 0xc6, 0xd5,
  0xaf, 0x1a, 0x64, 0xa8, 0x02, 0xc2, 0x28, 0xc6, 0x3f, 0x1e, 0x9d, 0x27,
  0xaf, 0x4e, 0x5e, 0xbb, 0x0b, 0x76, 0x6e, 0xb3, 0xb7, 0xd3, 0x64, 0xb2,
  0x2a, 0x0c, 0x0d, 0xa2, 0x47, 0x0a, 0x35, 0x38, 0xc5, 0x30, 0x9c, 0xa6,
  0x88, 0x1c, 0x9c, 0x5a, 0x2b, 0xd6, 0xf2, 0x8a, 0xa1, 0x88, 0x90, 0x57,
  0xc3, 0x48, 0x4a, 0x5e, 0x8d, 0x2e, 0x9e, 0x5e, 0x00, 0xe8, 0xe8, 0x52,
  0xa5, 0x2f, 0x6e, 0x25, 0xb0, 0xee, 0xd2, 0x4a, 0xab, 0x4a, 0x27, 0x29,
  0xc0, 0x8c, 0x0a, 0xae, 0x8d, 0x34, 0xb2, 0x33, 0x02, 0x3d, 0xac, 0xc3,
  0xf9, 0x08, 0xc4, 0x46, 0x77, 0xce, 0x1b, 0x9d, 0x8a, 0x9f, 0x49, 0xb8,
  0xa7, 0xb9, 0xfe, 0x2d, 0x4a, 0x97, 0xb6, 0x53, 0x24, 0xfc, 0x90, 0xd7,
  0x3d, 0xd3, 0xb2, 0x38, 0x52, 0x89, 0x0b, 0x97, 0xb3, 0xcf, 0xcd, 0x67,
  0x03, 0x89, 0x6d, 0x87, 0xb0, 0xdf, 0xd9, 0x97, 0x50, 0x82, 0x51, 0xd1,
  0xd9, 0x6f, 0x20, 0x79, 0x65, 0xf9, 0xdf, 0x3c, 0x05, 0xfd, 0x91, 0xd5,
  0xc7, 0xcc, 0xca, 0xe7, 0xd4, 0xd1, 0x75, 0xc6, 0x17, 0xa2, 0xbe, 0x33,
  0x42, 0xfd, 0x96, 0x0c, 0x72, 0xd8, 0x4f, 0x02, 0xe7, 0xe4, 0xde, 0x7c,
  0x2c, 0x5a, 0x59, 0x62, 0x71, 0xa3, 0xa8, 0x2d, 0xce, 0xb2, 0x1d, 0x0d,
  0x72, 0x5e, 0x0b, 0x2d, 0x91, 0xe6, 0xfe, 0xe6, 0x35, 0x3a, 0xcc, 0x46,
  0x3c, 0x17, 0x2e, 0xf1, 0x80, 0xe1, 0x1b, 0xb8, 0xdc, 0xba, 0x64, 0xb7,
  0xa6, 0xd7, 0x3e, 0xcc, 0x82, 0xfd, 0x20, 0x33, 0x89, 0xf6, 0x6b, 0xc8,
  0xbd, 0x53, 0x82, 0xba, 0x74, 0x57, 0x81, 0xa9, 0x16, 0xc7, 0xac, 0xa4,
  0x0d, 0x1c, 0x50, 0x26, 0x2f, 0x5a, 0x5d, 0xa7, 0x80, 0x7a, 0xa0, 0x96,
  0x65, 0x69, 0xc1, 0x95, 0x86, 0x7a, 0x02, 0xf1, 0x9a, 0x3b, 0x57, 0xf3,
  0xf4, 0x84, 0xff, 0x78, 0xa5, 0x1a, 0x9b, 0x94, 0x0d, 0xf9, 0x8c, 0x85,
  0x85, 0x8c, 0x58, 0x37, 0x25, 0x61, 0x74, 0x40, 0x06, 0xd1, 0xfa, 0x88,
  0x41, 0x86, 0x9b, 0x50, 0x77, 0x7c, 0x9c, 0x4f, 0x7b, 0xbe, 0xc2, 0x90,
  0x4e, 0xee, 0x23, 0xbe, 0x4f, 0x5e, 0xb7, 0x50, 0x9e, 0xf5, 0x46, 0x7b,
  0xd6, 0xa5, 0x0b, 0xcf, 0xb3, 0x4f, 0x23, 0xda, 0x27, 0x3f, 0x17, 0x5f,
  0x44, 0x86, 0xa2, 0x45, 0x51, 0x9e, 0xab, 0x6c, 0x39, 0x97, 0x95, 0xc9,
  0x4f, 0x28, 0x70, 0x4c, 0xde, 0x04, 0xda, 0xe5, 0xa9, 0xce, 0xd2, 0xa8,
  0xc3, 0xbe, 0x29, 0xf8, 0x5c, 0x3e, 0x8b, 0xe6, 0x4c, 0xac, 0x3a, 0x10,
  0xee, 0x46, 0x6e, 0xe9, 0x4d, 0x9a, 0x41, 0xd3, 0x8f, 0x90, 0xe0, 0x48,
  0xa8, 0x0e, 0xfa, 0x6f, 0x79, 0x23, 0x40, 0xba, 0xeb, 0xb8, 0x92, 0xb1,
  0xda, 0x55, 0xc5, 0x45, 0xbb, 0x0e, 0xdb, 0x91, 0xf2, 0xd8, 0xd3, 0xa2,
  0x91, 0xfc, 0xbf, 0x0a, 0x90, 0x7c, 0x23, 0xc3, 0x8b, 0xca, 0x00, 0x7d,
  0xb2, 0xbc, 0x68, 0x04, 0xfb, 0x8b, 0xfb, 0x20, 0xf1, 0xfe, 0x5c, 0xa5,
  0xc5, 0x65, 0xc6, 0xfe, 0x17, 0x0f, 0x9e, 0x92, 0x7b, 0x68, 0xb1, 0x38,
  0x34, 0x77, 0x9d, 0x9c, 0x3c, 0xbd, 0xe8, 0x13, 0x6e, 0x1f, 0xf6, 0x76,
  0xed, 0x3e, 0x70, 0x7b, 0x1c, 0xaa, 0x4e, 0xc1, 0x2e, 0xfc, 0x40, 0x88,
  0x84, 0x37, 0x29, 0xb7, 0xcf, 0xd4, 0x26, 0xd3, 0xce, 0x68, 0xb1, 0x61,
  0x1e, 0x44, 0xd6, 0xc2, 0x3c, 0x69, 0x42, 0x72, 0x40, 0x16, 0x0c, 0xf4,
  0x01, 0x4e, 0xf5, 0xe4, 0xf2, 0x46, 0x11, 0x57, 0x03, 0x32, 0xe8, 0x2d,
  0x83, 0xe4, 0x38, 0x2b, 0xf1, 0xde, 0xeb, 0x2c, 0x06, 0x9b, 0xa1, 0xb8,
  0x55, 0x5e, 0x36, 0x87, 0x03, 0x0d, 0xf1, 0xd6, 0xb3, 0x67, 0xd7, 0x73,
  0x43, 0x84, 0x72, 0xfa, 0x72, 0x3c, 0x56, 0x32, 0x79, 0x15, 0x52, 0x84,
  0x44, 0x8f, 0x08, 0x41, 0x47, 0x8a, 0xa4, 0x23, 0xaa, 0xa2, 0x0c, 0xd2,
  0x49, 0x32, 0xd8, 0x63, 0x9e, 0xf6, 0x9a, 0x19, 0x33, 0x69, 0x13, 0xb2,
  0x5e, 0xa6, 0x2b, 0x5d, 0xf1, 0xcd, 0xfa, 0x9d, 0xfc, 0x2c, 0x9a, 0xae,
  0xc2, 0x01, 0x4b, 0xec, 0x33, 0x15, 0x23, 0x2b, 0x8f, 0x27, 0xd5, 0xf0,
  0x76, 0xd9, 0xee, 0x88, 0xbd, 0xf7, 0x28, 0x5c, 0xf4, 0xf7, 0xbc, 0xaa,
  0xc1, 0x3f, 0xb5, 0xe8, 0xef, 0x23, 0x8b, 0x7e, 0xec, 0x2e, 0x0e, 0x7f,
  0x2c, 0xd9, 0xdf, 0x7f, 0xa6, 0x05, 0x21, 0x86, 0x8e, 0xe9, 0x7b, 0xee,
  0x83, 0xde, 0x17, 0xcd, 0x73, 0x43, 0xaa, 0x3f, 0x08, 0xbf, 0xe5, 0x5d,
  0x5e, 0xef, 0x53, 0x4f, 0xec, 0xa7, 0x8c, 0xfa, 0x0d, 0x0b, 0xd4, 0xe8,
  0xf4, 0xcc, 0x65, 0x02, 0xe6, 0xa3, 0xa6, 0x1c, 0xd4, 0xf0, 0x1b, 0xe4,
  0x4f, 0x35, 0x56, 0x97, 0xec, 0x7c, 0x4a, 0x67, 0xe1, 0x7d, 0xe7, 0xa9,
  0x75, 0xa3, 0xec, 0xec, 0x6b, 0x00, 0xfd, 0x25, 0xf1, 0xe2, 0x79, 0xb6,
  0x20, 0xca, 0x9c, 0x65, 0x40, 0xeb, 0x71, 0xee, 0x3f, 0xae, 0xb9, 0xbb,
  0xa8, 0x52, 0x42, 0x5b, 0x9e, 0xa7, 0x77, 0x11, 0xb0, 0x2d, 0xf1, 0x14,
  0xb3, 0xb9, 0x92, 0x62, 0xf6, 0x05, 0x6c, 0x05, 0xd2, 0x04, 0xc4, 0x6d,
  0x06, 0x3f, 0x2c, 0x4e, 0xb4, 0xbc, 0xb0, 0xae, 0x5a, 0xf9, 0x6a, 0x00,
  0x07, 0x50, 0x4b, 0xdb, 0x32, 0xbe, 0x32, 0xa2, 0x25, 0xc4, 0xb1, 0xe1,
  0xf6, 0x9e, 0xb9, 0x23, 0xb2, 0xe7, 0x00, 0xc7, 0x16, 0x43, 0x84, 0x78,
  0xbb, 0xa7, 0xbc, 0x44, 0xe3, 0x01, 0xd2, 0x42, 0x04, 0x51, 0xba, 0x3c,
  0xb4, 0x9a, 0x2b, 0x4f, 0x41, 0xdc, 0x63, 0x6e, 0x7c, 0x0a, 0x66, 0x27,
  0x80, 0xbb, 0xa3, 0xe4, 0x84, 0xbc, 0x70, 0x2d, 0x88, 0xf1, 0x0b, 0x26,
  0x7d, 0x57, 0x34, 0xda, 0x26, 0xdc, 0xe7, 0xee, 0x84, 0x75, 0x4e, 0x9a,
  0xfc, 0xb2, 0xa3, 0x4c, 0xd6, 0x0a, 0x14, 0xf5, 0x36, 0x67, 0xc9, 0xd9,
  0xe1, 0xf9, 0x19, 0xc5, 0x79, 0x89, 0x01, 0x04, 0x20, 0xa9, 0x69, 0xb5,
  0x6d, 0x41, 0x82, 0x84, 0x9d, 0x39, 0x3d, 0xc4, 0x31, 0x08, 0xc6, 0x2f,
  0xb3, 0xe7, 0xcd, 0xff, 0xd4, 0xf7, 0xb8, 0xfa, 0x25, 0xd3, 0x5a, 0x13,
  0x17, 0xd1, 0x69, 0x23, 0xab, 0xed, 0xef, 0xbb, 0x2c, 0x24, 0x6e, 0x69,
  0xca, 0x62, 0x4e, 0x32, 0xc9, 0x47, 0x92, 0xdd, 0xa2, 0xc5, 0x17, 0xda,
  0xc2, 0x0a, 0x0f, 0x71, 0x36, 0x76, 0x59, 0x45, 0x44, 0xae, 0x7c, 0x5a,
  0xe5, 0x3f, 0x4f, 0xc1, 0xa1, 0xa8, 0xf1, 0xd7, 0xf8, 0xa7, 0xcc, 0x3d,
  0xa5, 0x02, 0x30, 0x79, 0xbc, 0xbb, 0x1b, 0x81, 0x1d, 0x4e, 0x27, 0x86,
  0xa9, 0x8a, 0x36, 0x27, 0x55, 0x3d, 0xf4, 0x16, 0x7b, 0x4d, 0x49, 0xbd,
  0xac, 0x61, 0x6a, 0x0c, 0x2f, 0xe0, 0xc6, 0xc4, 0x8e, 0x85, 0x46, 0xc5,
  0x3e, 0xf3, 0x98, 0x1f, 0xa8, 0xca, 0x48, 0x37, 0xad, 0xc3, 0x5c, 0xb8,
  0x04, 0x49, 0x7b, 0x66, 0xa6, 0x1e, 0x18, 0xb3, 0xf8, 0xbf, 0x83, 0x99,
  0x05, 0xfc, 0x7b, 0xff, 0x49, 0x48, 0x11, 0xe3, 0xf3, 0x93, 0x33, 0xa1,
  0xb0, 0x50, 0x34, 0xf3, 0x8e, 0xd0, 0x23, 0x0e, 0x6d, 0x65, 0x10, 0x42,
  0xee, 0xcc, 0x2c, 0x3e, 0x80, 0x45, 0x31, 0xf5, 0xbe, 0xca, 0x1c, 0x80,
  0xda, 0x66, 0xc9, 0xd2, 0xbe, 0x17, 0x44, 0x00, 0xc5, 0xeb, 0xd5, 0x7b,
  0xe9, 0xbd, 0xc4, 0xd7, 0xec, 0x84, 0xef, 0x2f, 0x57, 0xaf, 0x83, 0x8e,
  0xa4, 0x8e, 0x1d, 0x78, 0xbf, 0x92, 0x0e, 0x6b, 0xfb, 0xfb, 0x75, 0x69,
  0x91, 0x2f, 0xd1, 0x89, 0x83, 0x64, 0x66, 0x0e, 0x2f, 0xeb, 0xb4, 0x56,
  0x31, 0xf5, 0x98, 0x04, 0x9f, 0x60, 0xc8, 0x62, 0x49, 0x6c, 0x4a, 0xd9,
  0x17, 0x36, 0x0d, 0x60, 0xdd, 0xcb, 0x6a, 0x26, 0xe9, 0x2b, 0x22, 0x38,
  0xd5, 0x58, 0x70, 0x7a, 0xb6, 0x93, 0xfa, 0xa7, 0x27, 0x67, 0xe7, 0x56,
  0xe6, 0xe3, 0xb3, 0xf4, 0x83, 0xce, 0xed, 0x41, 0xbf, 0x14, 0xc1, 0x9f,
  0x10, 0xc9, 0x46, 0x9d, 0x3b, 0x3f, 0x8b, 0x42, 0x10, 0xc8, 0x91, 0xd0,
  0x38, 0x3a, 0xd0, 0x80, 0xda, 0xac, 0xce, 0x4a, 0x86, 0xf3, 0xb1, 0xfc,
  0x86, 0x3d, 0xe8, 0x24, 0x68, 0x7a, 0x90, 0xc1, 0x9c, 0x72, 0xfb, 0x68,
  0x2f, 0xa4, 0x0c, 0xd8, 0xd0, 0x67, 0x87, 0xe3, 0x73, 0x9e, 0x39, 0xfe,
  0x16, 0xcc, 0x9c, 0xeb, 0x43, 0xe5, 0x87, 0xa1, 0x13, 0xd5, 0x52, 0x06,
  0x32, 0xd0, 0x8c, 0xb5, 0x41, 0xe3, 0xdb, 0x02, 0x77, 0x6f, 0xc7, 0x1e,
  0x79, 0xd9, 0x86, 0xc4, 0x34, 0x85, 0x4e, 0xe8, 0x7e, 0xd3, 0x0f, 0x36,
  0xe4, 0x2b, 0x1b, 0x46, 0x2d, 0xe3, 0xeb, 0xd0, 0x82, 0x5f, 0x7f, 0xf4,
  0xd8, 0x8d, 0xb0, 0x84, 0xa4, 0x92, 0x01, 0x8e, 0xb4, 0x39, 0x26, 0x7e,
  0x38, 0x54, 0x52, 0x21, 0x61, 0xc1, 0x44, 0xc1, 0xcf, 0xb9, 0x71, 0x9e,
  0x48, 0x89, 0xfa, 0xb1, 0x55, 0x15, 0xbc, 0xa9, 0xe0, 0xc7, 0x9a, 0xf2,
  0x43, 0xda, 0x46, 0x87, 0xe4, 0x1e, 0x31, 0xa5, 0x7f, 0x8d, 0x6c, 0x41,
  0x9b, 0xb6, 0xc8, 0x6b, 0xf7, 0xe5, 0x82, 0x51, 0xb6, 0xf2, 0x62, 0x95,
  0x91, 0x8e, 0x96, 0x56, 0x73, 0xf4, 0x7a, 0x30, 0x4c, 0xa4, 0xe2, 0xfa,
  0xb1, 0x9b, 0x22, 0x06, 0x4b, 0xed, 0x7d, 0x43, 0xe4, 0xcf, 0xd1, 0xf1,
  0xa1, 0x3b, 0x2a, 0xee, 0x13, 0x41, 0x97, 0xd8, 0xe9, 0xfa, 0x68, 0x68,
  0x6d, 0xc5, 0xc4, 0x28, 0x39, 0x45, 0xa7, 0x62, 0xd2, 0x99, 0xea, 0xff,
  0x70, 0xa3, 0xf1, 0x25, 0x21, 0x0f, 0xbc, 0x11, 0x9b, 0x54, 0xee, 0x9c,
  0x17, 0xe6, 0x64, 0xe9, 0x27, 0xf8, 0xab, 0x87, 0x69, 0x1e, 0x2c, 0xf7,
  0xb9, 0x7b, 0xb9, 0x36, 0x2b, 0x31, 0x16, 0x7a, 0xf7, 0x91, 0xc7, 0x42,
  0x57, 0xc6, 0x7c, 0xa7, 0x21, 0x2c, 0x6b, 0xc6, 0x5d, 0x96, 0x66, 0x31,
  0x33, 0x1e, 0xe1, 0x42, 0x9f, 0x69, 0xb1, 0x70, 0x6f, 0x28, 0x16, 0x06,
  0x1d, 0x64, 0x5d, 0x73, 0xcb, 0xf1, 0x75, 0x63, 0x40, 0x23, 0xfc, 0xeb,
  0x2a, 0xbf, 0x4e, 0xa9, 0xb6, 0xcc, 0x5c, 0x16, 0xed, 0x53, 0xde, 0x19,
  0x23, 0xfd, 0x45, 0x83, 0xa4, 0xed, 0x51, 0x9e, 0xfc, 0x92, 0x41, 0x9e,
  0x74, 0xc6, 0xb8, 0xfa, 0x45, 0x83, 0x0c, 0x55, 0x40, 0x18, 0xc5, 0xf8,
  0x87, 0xa3, 0xf3, 0xe4, 0xd5, 0xc9, 0x6b, 0x77, 0xc1, 0xce, 0x6d, 0xf6,
  0x76, 0x9a, 0x4c, 0x56, 0x85, 0xa1, 0x41, 0xf4, 0x48, 0xa1, 0x06, 0xa7,
  0x18, 0x86, 0xd3, 0x14, 0x91, 0x83, 0x53, 0x6b, 0xc5, 0x5a, 0x5e, 0x31,
  0x14, 0x11, 0xf2, 0x6a, 0x18, 0x49, 0xc9, 0xab, 0xd1, 0xc5, 0xd3, 0x0b,
  0x00, 0x1d, 0x5d, 0xaa, 0xf4, 0xc5, 0xad, 0x04, 0xd6, 0x5d, 0x5a, 0x69,
  0x55, 0xe9, 0x24, 0x05, 0x98, 0x51, 0xc1, 0xb5, 0x91, 0x46, 0x76, 0x46,
  0xa0, 0x87, 0x75, 0x38, 0x1f, 0x81, 0xd8, 0xe8, 0xce, 0x79, 0xa3, 0x53,
  0xf1, 0x33, 0x09, 0xf7, 0x34, 0xd7, 0xbf, 0x45, 0xe9, 0xd2, 0x76, 0x8a,
  0x84, 0x1f, 0xf2, 0xba, 0x67, 0x5a, 0x16, 0x47, 0x2a, 0x71, 0xe1, 0x72,
  0xf6, 0xb9, 0xf9, 0x6c, 0x20, 0xb1, 0xed, 0x10, 0xf6, 0x3b, 0xfb, 0x12,
  0x4a, 0x30, 0x2a, 0x3a, 0xfb, 0x0d, 0x24, 0xaf, 0x2c, 0xff, 0x9b, 0xa7,
  0xa0, 0x3f, 0xb2, 0xfa, 0x98, 0x59, 0xf9, 0x9c, 0x3a, 0xba, 0xce, 0xf8,
  0x42, 0xd4, 0x77, 0x46, 0xa8, 0xdf, 0x92, 0x41, 0x0e, 0xfb, 0x49, 0xe0,
  0x9c, 0xdc, 0x9b, 0x8f, 0x45, 0x2b, 0x4b, 0x2c, 0x6e, 0x14, 0xb5, 0xc5,
  0x59, 0xb6, 0xa3, 0x41, 0xce, 0x6b, 0xa1, 0x25, 0xd2, 0xdc, 0xdf, 0xbc,
  0x46, 0x87, 0xd9, 0x88, 0xe7, 0xc2, 0x25, 0x1e, 0x30, 0x7c, 0x03, 0x97,
  0x5b, 0x97, 0xec, 0xd6, 0xf4, 0xda, 0x87, 0x59, 0xb0, 0x1f, 0x64, 0x26,
  0xd1, 0x7e, 0x0d, 0xb9, 0x77, 0x4a, 0x50, 0x97, 0xee, 0x2a, 0x30, 0xd5,
  0xe2, 0x98, 0x95, 0xb4, 0x81, 0x03, 0xca, 0xe4, 0x45, 0xab, 0xeb, 0x14,
  0x50, 0x0f, 0xd4, 0xb2, 0x2c, 0x2d, 0xb8, 0xd2, 0x50, 0x4f, 0x20, 0x5e,
  0x73, 0xe7, 0x6a, 0x9e, 0x9e, 0xf0, 0x1f, 0xaf, 0x54, 0x63, 0x93, 0xb2,
  0x21, 0x9f, 0xb1, 0xb0, 0x90, 0x11, 0xeb, 0xa6, 0x24, 0x8c, 0x0e, 0xc8,
  0x20, 0x5a, 0x1f, 0x31, 0xc8, 0x70, 0x13, 0xea, 0x8e, 0x8f, 0xf3, 0x69,
  0xcf, 0x57, 0x18, 0xd2, 0xc9, 0x7d, 0xc4, 0xf7, 0xc9, 0xeb, 0x16, 0xca,
  0xb3, 0xde, 0x68, 0xcf, 0xba, 0x74, 0xe1, 0x79, 0xf6, 0x69, 0x44, 0xfb,
  0xe4, 0xe7, 0xe2, 0x8b, 0xc8, 0x50, 0xb4, 0x28, 0xca, 0x73, 0x95, 0x2d,
  0xe7, 0xb2, 0x32, 0xf9, 0x09, 0x05, 0x8e, 0xc9, 0x9b, 0x40, 0xbb, 0x3c,
  0xd5, 0x59, 0x1a, 0x75, 0xd8, 0x37, 0x05, 0x9f, 0xcb, 0x67, 0xd1, 0x9c,
  0x89, 0x55, 0x07, 0xc2, 0xdd, 0xc8, 0x2d, 0xbd, 0x49, 0x33, 0x68, 0xfa,
  0x11, 0x12, 0x1c, 0x09, 0xd5, 0x41, 0xff, 0x2d, 0x6f, 0x04, 0x48, 0x77,
  0x1d, 0x57, 0x32, 0x56, 0xbb, 0xaa, 0xb8, 0x68, 0xd7, 0x61, 0x3b, 0x52,
  0x1e, 0x7b, 0x5a, 0x34, 0x92, 0xff, 0x57, 0x01, 0x92, 0x6f, 0x64, 0x78,
  0x51, 0x19, 0xa0, 0x4f, 0x96, 0x17, 0x8d, 0x60, 0x7f, 0x71, 0x1f, 0x24,
  0xde, 0x9f, 0xab, 0xb4, 0xb8, 0xcc, 0xd8, 0xff, 0xe2, 0xc1, 0x53, 0x72,
  0x0f, 0x2d, 0x16, 0x87, 0xe6, 0xae, 0x93, 0x93, 0xa7, 0x17, 0x7d, 0xc2,
  0xed, 0xc3, 0xde, 0xae, 0xdd, 0x07, 0x6e, 0x8f, 0x43, 0xd5, 0x29, 0xd8,
  0x85, 0xef, 0x09, 0x91, 0xf0, 0x26, 0xe5, 0xf6, 0x99, 0xda, 0x64, 0xda,
  0x19, 0x2d, 0x36, 0xcc, 0x83, 0xc8, 0x5a, 0x98, 0x27, 0x4d, 0x48, 0x0e,
  0xc8, 0x82, 0x81, 0x3e, 0xc0, 0xa9, 0x9e, 0x5c, 0xde, 0x28, 0xe2, 0x6a,
  0x40, 0x06, 0xbd, 0x65, 0x90, 0x1c, 0x67, 0x25, 0xde, 0x7b, 0x9d, 0xc5,
  0x60, 0x33, 0x14, 0xb7, 0xca, 0xcb, 0xe6, 0x70, 0xa0, 0x21, 0xde, 0x7a,
  0xf6, 0xec, 0x7a, 0x6e, 0x88, 0x50, 0x4e, 0x5f, 0x8e, 0xc7, 0x4a, 0x26,
  0xaf, 0x42, 0x8a, 0x90, 0xe8, 0x11, 0x21, 0xe8, 0x48, 0x91, 0x74, 0x44,
  0x55, 0x94, 0x41, 0x3a, 0x49, 0x06, 0x7b, 0xcc, 0xd3, 0x5e, 0x33, 0x63,
  0x26, 0x6d, 0x42, 0xd6, 0xcb, 0x74, 0xa5, 0x2b, 0xbe, 0x59, 0xbf, 0x93,
  0x9f, 0x45, 0xd3, 0x55, 0x38, 0x60, 0x89, 0x7d, 0xa6, 0x62, 0x64, 0xe5,
  0xf1, 0xa4, 0x1a, 0xde, 0x2e, 0xdb, 0x1d, 0xb1, 0xf7, 0x1e, 0x85, 0x8b,
  0xfe, 0x8e, 0x57, 0x35, 0xf8, 0xa7, 0x16, 0xfd, 0x5d, 0x64, 0xd1, 0x8f,
  0xdd, 0xc5, 0xe1, 0x8f, 0x25, 0xfb, 0xfb, 0xcf, 0xb4, 0x20, 0xc4, 0xd0,
  0x31, 0x7d, 0xcf, 0x7d, 0xd0, 0xfb, 0xa2, 0x79, 0x6e, 0x48, 0xf5, 0x07,
  0xe1, 0xb7, 0xbc, 0xcb, 0xeb, 0x7d, 0xea, 0x89, 0xfd, 0x94, 0x51, 0xbf,
  0x61, 0x81, 0x1a, 0x9d, 0x9e, 0xb9, 0x4c, 0xc0, 0x7c, 0xd4, 0x94, 0x83,
  0x1a, 0x7e, 0x83, 0xfc, 0xa9, 0xc6, 0xea, 0x92, 0x9d, 0x4f, 0xe9, 0x2c,
  0xbc, 0xef, 0x3c, 0xb5, 0x6e, 0x94, 0x9d, 0x7d, 0x0d, 0xa0, 0xbf, 0x24,
  0x5e, 0x3c, 0xcf, 0x16, 0x44, 0x99, 0xb3, 0x0c, 0x68, 0x3d, 0xce, 0xfd,
  0xc7, 0x35, 0x77, 0x17, 0x55, 0x4a, 0x68, 0xcb, 0xf3, 0xf4, 0x2e, 0x02,
  0xb6, 0x25, 0x9e, 0x62, 0x36, 0x57, 0x52, 0xcc, 0xbe, 0x80, 0xad, 0x40,
  0x9a, 0x80, 0xb8, 0xcd, 0xe0, 0x87, 0xc5, 0x89, 0x96, 0x17, 0xd6, 0x55,
  0x2b, 0x5f, 0x0d, 0xe0, 0x00, 0x6a, 0x69, 0x5b, 0xc6, 0x57, 0x46, 0xb4,
  0x84, 0x38, 0x36, 0xdc, 0xde, 0x33, 0x77, 0x44, 0xf6, 0x1c, 0xe0, 0xd8,
  0x62, 0x88, 0x10, 0x6f, 0xf7, 0x94, 0x97, 0x68, 0x3c, 0x40, 0x5a, 0x88,
  0x20, 0x4a, 0x97, 0x87, 0x56, 0x73, 0xe5, 0x29, 0x88, 0x7b, 0xcc, 0x8d,
  0x4f, 0xc1, 0xec, 0x04, 0x70, 0x77, 0x94, 0x9c, 0x90, 0x17, 0xae, 0x05,
  0x31, 0x7e, 0xc1, 0xa4, 0xef, 0x8a, 0x46, 0xdb, 0x84, 0xfb, 0xdc, 0x9d,
  0xb0, 0xce, 0x49, 0x93, 0x5f, 0x76, 0x94, 0xc9, 0x5a, 0x81, 0xa2, 0xde,
  0xe6, 0x2c, 0x39, 0x3b, 0x3c, 0x3f, 0xa3, 0x38, 0x2f, 0x31, 0x80, 0x00,
  0x24, 0x35, 0xad, 0xb6, 0x2d, 0x48, 0x90, 0xb0, 0x33, 0xa7, 0x87, 0x38,
  0x06, 0xc1, 0xf8, 0x65, 0xf6, 0xbc, 0xf9, 0x9f, 0xfa, 0x1e, 0x57, 0xbf,
  0x64, 0x5a, 0x6b, 0xe2, 0x22, 0x3a, 0x6d, 0x64, 0xb5, 0xfd, 0x7d, 0x97,
  0x85, 0xc4, 0x2d, 0x4d, 0x59, 0xcc, 0x49, 0x26, 0xf9, 0x48, 0xb2, 0x5b,
  0xb4, 0xf8, 0x42, 0x5b, 0x58, 0xe1, 0x21, 0xce, 0xc6, 0x2e, 0xab, 0x88,
  0xc8, 0x95, 0x4f, 0xab, 0xfc, 0xe7, 0x29, 0x38, 0x14, 0x35, 0xfe, 0x1a,
  0xff, 0x94, 0xb9, 0xa7, 0x54, 0x00, 0x26, 0x8f, 0x77, 0x77, 0x23, 0xb0,
  0xc3, 0xe9, 0xc4, 0x30, 0x55, 0xd1, 0xe6, 0xa4, 0xaa, 0x87, 0xde, 0x62,
  0xaf, 0x29, 0xa9, 0x97, 0x35, 0x4c, 0x8d, 0xe1, 0x05, 0xdc, 0x98, 0xd8,
  0xb1, 0xd0, 0xa8, 0xd8, 0x67, 0x1e, 0xf3, 0x3d, 0x55, 0x19, 0xe9, 0xa6,
  0x75, 0x98, 0x0b, 0x97, 0x20, 0x69, 0xcf, 0xcc, 0xd4, 0x03, 0x63, 0x16,
  0xff, 0x77, 0x30, 0xb3, 0x80, 0x7f, 0xef, 0x3f, 0x09, 0x29, 0x62, 0x7c,
  0x7e, 0x72, 0x26, 0x14, 0x16, 0x8a, 0x66, 0xde, 0x11, 0x7a, 0xc4, 0xa1,
  0xad, 0x0c, 0x42, 0xc8, 0x9d, 0x99, 0xc5, 0x07, 0xb0, 0x28, 0xa6, 0xde,
  0x57, 0x99, 0x03, 0x50, 0xdb, 0x2c, 0x59, 0xda, 0x77, 0x82, 0x08, 0xa0,
  0x78, 0xbd, 0x7a, 0x2f, 0xbd, 0x97, 0xf8, 0x9a, 0x9d, 0xf0, 0xfd, 0xe5,
  0xea, 0x75, 0xd0, 0x91, 0xd4, 0xb1, 0x03, 0xef, 0x57, 0xd2, 0x61, 0x6d,
  0x7f, 0xbf, 0x2e, 0x2d, 0xf2, 0x25, 0x3a, 0x71, 0x90, 0xcc, 0xcc, 0xe1,
  0x65, 0x9d, 0xd6, 0x2a, 0xa6, 0x1e, 0x93, 0xe0, 0x13, 0x0c, 0x59, 0x2c,
  0x89, 0x4d, 0x29, 0xfb, 0xc2, 0xa6, 0x01, 0xac, 0x7b, 0x59, 0xcd, 0x24,
  0x7d, 0x45, 0x04, 0xa7, 0x1a, 0x0b, 0x4e, 0xcf, 0x76, 0x52, 0xff, 0xf4,
  0xe4, 0xec, 0xdc, 0xca, 0x7c, 0x7c, 0x96, 0x7e, 0xd0, 0xb9, 0x3d, 0xe8,
  0x97, 0x22, 0xf8, 0x13, 0x22, 0xd9, 0xa8, 0x73, 0xe7, 0x67, 0x51, 0x08,
  0x02, 0x39, 0x12, 0x1a, 0x47, 0x07, 0x1a, 0x50, 0x9b, 0xd5, 0x59, 0xc9,
  0x70, 0x3e, 0x96, 0xdf, 0xb0, 0x07, 0x9d, 0x04, 0x4d, 0x0f, 0x32, 0x98,
  0x53, 0x6e, 0x1f, 0xed, 0x85, 0x94, 0x01, 0x1b, 0xfa, 0xec, 0x70, 0x7c,
  0xce, 0x33, 0xc7, 0xdf, 0x82, 0x99, 0x73, 0x7d, 0xa8, 0xfc, 0x30, 0x74,
  0xa2, 0x5a, 0xca, 0x40, 0x06, 0x9a, 0xb1, 0x36, 0x68, 0x7c, 0x5b, 0xe0,
  0xee, 0xed, 0xd8, 0x23, 0x2f, 0xdb, 0x90, 0x98, 0xa6, 0xd0, 0x09, 0xdd,
  0x6f, 0xfa, 0xc1, 0x86, 0x7c, 0x65, 0xc3, 0xa8, 0x65, 0x7c, 0x1d, 0x5a,
  0xf0, 0xeb, 0x8f, 0x1e, 0xbb, 0x11, 0x96, 0x90, 0x54, 0x32, 0xc0, 0x91,
  0x36, 0xc7, 0xc4, 0x0f, 0x87, 0x4a, 0x2a, 0x24, 0x2c, 0x98, 0x28, 0xf8,
  0x39, 0x37, 0xce, 0x13, 0x29, 0x51, 0x3f, 0xb6, 0xaa, 0x82, 0x37, 0x15,
  0xfc, 0x58, 0x53, 0x7e, 0x48, 0xdb, 0xe8, 0x90, 0xdc, 0x23, 0xa6, 0xf4,
  0xaf, 0x90, 0x2d, 0x68, 0xd3, 0x16, 0x79, 0xed, 0xbe, 0x5c, 0x30, 0xca,
  0x56, 0x5e, 0xac, 0x32, 0xd2, 0xd1, 0xd2, 0x6a, 0x8e, 0x5e, 0x0f, 0x86,
  0x89, 0x54, 0x5c, 0x3f, 0x76, 0x53, 0xc4, 0x60, 0xa9, 0xbd, 0x6f, 0x88,
  0xfc, 0x39, 0x3a, 0x3e, 0x74, 0x47, 0xc5, 0x7d, 0x22, 0xe8, 0x12, 0x3b,
  0x5d, 0x1f, 0x0d, 0xad, 0xad, 0x98, 0x18, 0x25, 0xa7, 0xe8, 0x54, 0x4c,
  0x3a, 0x53, 0xfd, 0xef, 0x6e, 0x34, 0xbe, 0x24, 0xe4, 0x81, 0x37, 0x62,
  0x93, 0xca, 0x9d, 0xf3, 0xc2, 0x9c, 0x2c, 0xfd, 0x04, 0x7f, 0xf5, 0x30,
  0xcd, 0x83, 0xe5, 0x3e, 0x77, 0x2f, 0xd7, 0x66, 0x25, 0xc6, 0x42, 0xef,
  0x3e, 0xf2, 0x58, 0xe8, 0xca, 0x98, 0xef, 0x34, 0x84, 0x65, 0xcd, 0xb8,
  0xcb, 0xd2, 0x2c, 0x66, 0xc6, 0x23, 0x5c, 0xe8, 0x33, 0x2d, 0x16, 0xee,
  0x0d, 0xc5, 0xc2, 0xe0, 0xe5, 0xc4, 0x36, 0x10, 0x42, 0x92, 0x30, 0x14,
  0x2f, 0x27, 0xb6, 0x81, 0x10, 0x92, 0x84, 0xa1, 0xc8, 0x99, 0xb1, 0x0a,
  0x70, 0xda, 0xb9, 0xcd, 0xb5, 0xf7, 0x63, 0xc0, 0xb4, 0xb5, 0x16, 0x2f,
  0xaa, 0xbb, 0xb9, 0x9d, 0xb6, 0xcb, 0x8f, 0x99, 0x12, 0x2d, 0xd9, 0x58,
  0xf9, 0xd5, 0x9a, 0x9d, 0x64, 0x27, 0x0b, 0xee, 0x1d, 0x9c, 0x06, 0x88,
  0x07, 0x18, 0xf9, 0xee, 0x2b, 0xff, 0x8f, 0x9f, 0xb8, 0xa1, 0x2e, 0x08,
  0xbc, 0x47, 0xf9, 0xfa, 0xcb, 0x96, 0x53, 0xce, 0x76, 0x92, 0xc8, 0xed,
  0x93, 0x6c, 0x36, 0x72, 0xed, 0x79, 0xe4, 0x4a, 0x79, 0xdf, 0x78, 0x26,
  0xa6, 0x2f, 0x6c, 0xdf, 0xe2, 0xce, 0x25, 0xdf, 0x8f, 0x38, 0xaa, 0xcc,
  0x7e, 0x33, 0x6e, 0x54, 0x23, 0xbf, 0x11, 0x10, 0xc6, 0x2b, 0xf1, 0xcb,
  0xa0, 0xdf, 0x67, 0x80, 0xb8, 0xb8, 0x5a, 0x48, 0x0e, 0xaf, 0xf7, 0xa5,
  0xcf, 0xc5, 0x93, 0x81, 0xe2, 0xf3, 0xc2, 0x81, 0x14, 0x79, 0x0b, 0x81,
  0xa2, 0x2b, 0x56, 0xb3, 0x86, 0xf2, 0x0d, 0x73, 0x9c, 0xa6, 0x36, 0x05,
  0x38, 0xc4, 0xd8, 0x03, 0x72, 0x19, 0xd8, 0xac, 0x28, 0xbb, 0xea, 0x51,
  0x28, 0xb5, 0x08, 0x58, 0x3c, 0x0b, 0xf2, 0x18, 0xff, 0xca, 0x36, 0x0d,
  0x0a, 0x5d, 0xe2, 0x55, 0xf6, 0x17, 0x52, 0x24, 0x47, 0xb6, 0x47, 0xa3,
  0x06, 0x94, 0xd3, 0x62, 0x95, 0x7a, 0xb6, 0xfc, 0xe3, 0xe7, 0xe2, 0xa1,
  0x12, 0x37, 0x88, 0xf6, 0x04, 0xef, 0x86, 0x17, 0x9f, 0xec, 0x59, 0x5f,
  0x25, 0x52, 0x66, 0xa5, 0x0e, 0xc4, 0x4f, 0x9c, 0x05, 0xfc, 0xf1, 0xf8,
  0xdb, 0xe4, 0xed, 0xeb, 0x27, 0x48, 0xe8, 0xb9, 0xcc, 0xaa, 0x65, 0x85,
  0x24, 0x4e, 0xa5, 0xe1, 0x93, 0xef, 0xbc, 0xc1, 0xf6, 0x5d, 0xf6, 0x85,
  0x82, 0x23, 0x0a, 0x33, 0x13, 0x7b, 0xc1, 0x1c, 0x21, 0x0a, 0x9f, 0x2f,
  0x07, 0x12, 0x6c, 0x51, 0x1c, 0x3f, 0x45, 0xab, 0x22, 0xad, 0xa5, 0xdb,
  0x67, 0xbd, 0xcd, 0xc0, 0x9e, 0x3c, 0x72, 0x0c, 0xac, 0xba, 0x5b, 0xa2,
  0x39, 0x33, 0x56, 0x01, 0x4e, 0x3b, 0xb7, 0xb9, 0xf6, 0x7e, 0x0c, 0x98,
  0xb6, 0xd6, 0xe2, 0x45, 0x75, 0x37, 0xb7, 0xd3, 0x76, 0xf9, 0x31, 0x53,
  0xa2, 0x25, 0x1b, 0x2b, 0xbf, 0x5a, 0xb3, 0x93, 0xec, 0x64, 0xc1, 0xbd,
  0x83, 0xd3, 0x00, 0xf1, 0x00, 0x23, 0xdf, 0x7d, 0xe5, 0xff, 0xf1, 0x13,
  0x37, 0xd4, 0x05, 0x81, 0xf7, 0x28, 0x5f, 0x7f, 0xd9, 0x72, 0xca, 0xd9,
  0x4e, 0x12, 0xb9, 0x7d, 0x92, 0xcd, 0x46, 0xae, 0x3d, 0x8f, 0x5c, 0x29,
  0xef, 0x1b, 0xcf, 0xc4, 0xf4, 0x85, 0xed, 0x5b, 0xdc, 0xb9, 0xe4, 0xfb,
  0x11, 0x47, 0x95, 0xd9, 0x6f, 0xc6, 0x8d, 0x6a, 0xe4, 0x37, 0x02, 0xc2,
  0x78, 0x25, 0x7e, 0x19, 0xf4, 0xfb, 0x0c, 0x10, 0x17, 0x57, 0x0b, 0xc9,
  0xe1, 0xf5, 0xbe, 0xf4, 0xb9, 0x78, 0x32, 0x50, 0x7c, 0x5e, 0x38, 0x90,
  0x22, 0x6f, 0x21, 0x50, 0x74, 0xc5, 0x6a, 0xd6, 0x50, 0xbe, 0x61, 0x8e,
  0xd3, 0xd4, 0xa6, 0x00, 0x87, 0x18, 0x7b, 0x40, 0x2e, 0x03, 0x9b, 0x15,
  0x65, 0x57, 0x3d, 0x0a, 0xa5, 0x16, 0x01, 0x8b, 0x67, 0x41, 0x1e, 0xe3,
  0x5f, 0xd9, 0xa6, 0x41, 0xa1, 0x4b, 0xbc, 0xca, 0xfe, 0x42, 0x8a, 0xe4,
  0xc8, 0xf6, 0x68, 0xd4, 0x80, 0x72, 0x5a, 0xac, 0x52, 0xcf, 0x96, 0x7f,
  0xfc, 0x5c, 0x3c, 0x54, 0xe2, 0x06, 0xd1, 0x9e, 0xe0, 0xdd, 0xf0, 0xe2,
  0x93, 0x3d, 0xeb, 0xab, 0x44, 0xca, 0xac, 0xd4, 0x81, 0xf8, 0x89, 0xb3,
  0x80, 0x3f, 0x1e, 0x7f, 0x93, 0xbc, 0x7d, 0xfd, 0x04, 0x09, 0x3d, 0x97,
  0x59, 0xb5, 0xac, 0x90, 0xc4, 0xa9, 0x34, 0x7c, 0xf2, 0xad, 0x37, 0xd8,
  0xbe, 0xcb, 0xbe, 0x50, 0x70, 0x44, 0x61, 0x66, 0x62, 0x2f, 0x98, 0x23,
  0x44, 0xe1, 0xf3, 0xe5, 0x40, 0x82, 0x2d, 0x8a, 0xe3, 0xa7, 0x68, 0x55,
  0xa4, 0xb5, 0x74, 0xfb, 0xac, 0xb7, 0x19, 0xd8, 0x93, 0x47, 0x8e, 0x81,
  0x55, 0x77, 0x4b, 0x34, 0x57, 0x29, 0x2e, 0x61, 0x16, 0x44, 0x6e, 0xd4,
  0x13, 0x66, 0x9a, 0xaf, 0xf8, 0xde, 0x43, 0x87, 0x0d, 0x5f, 0x23, 0xf5,
  0x9c, 0xdc, 0xa5, 0xde, 0x7b, 0x4f, 0x7c, 0xaf, 0x02, 0xe0, 0x71, 0x29,
  0x51, 0x8a, 0x5b, 0x62, 0x90, 0x86, 0xe2, 0x3d, 0xfb, 0xd4, 0x3e, 0x0b,
  0xb9, 0x4a, 0x71, 0x09, 0xb3, 0x20, 0x72, 0xa3, 0x9e, 0x30, 0xd3, 0x7c,
  0xc5, 0xf7, 0x1e, 0x3a, 0x6c, 0xf8, 0x1a, 0xa9, 0xe7, 0xe4, 0x2e, 0xf5,
  0xde, 0x7b, 0xe2, 0x7b, 0x15, 0x00, 0x8f, 0x4b, 0x89, 0x52, 0xdc, 0x12,
  0xbf, 0x51, 0x5e, 0x78, 0x2d, 0x8c, 0x7a, 0xde, 0x10, 0xe5, 0x57, 0x0d,
  0x04, 0x55, 0xcc, 0x58, 0xdf, 0xf1, 0xf6, 0xde, 0x7b, 0xe5, 0x79, 0xdb,
  0x83, 0x34, 0x14, 0xef, 0xd9, 0xa7, 0xf6, 0x59, 0xf8, 0x8d, 0xf2, 0xc2,
  0x6b, 0x61, 0xd4, 0xf3, 0x86, 0x28, 0xbf, 0x6a, 0x20, 0xa8, 0x62, 0xc6,
  0x69, 0x42, 0xbd, 0x0d, 0x2c, 0x61, 0xd2, 0xa2, 0xa8, 0x85, 0xa6, 0xe7,
  0xfa, 0x8e, 0xb7, 0xf7, 0xde, 0x2b, 0xcf, 0xdb, 0x4e, 0x13, 0xea, 0x6d,
  0x60, 0x09, 0x93, 0x16, 0x45, 0x2d, 0x34, 0x3d, 0x37, 0x0b, 0xcb, 0xe8,
  0xd3, 0x6e, 0x1e, 0xb4, 0xf2, 0xc0, 0xcc, 0x47, 0x10, 0xd1, 0xab, 0xce,
  0xa4, 0xff, 0xea, 0x65, 0xd2, 0x57, 0x04, 0x44, 0xb4, 0xee, 0x7d, 0x64,
  0x4f, 0xee, 0x0c, 0xba, 0xd1, 0x5e, 0x16, 0xf9, 0xdf, 0x32, 0x2f, 0x17,
  0x66, 0x61, 0x19, 0x7d, 0xda, 0xcd, 0x83, 0x56, 0x1e, 0x98, 0xf9, 0x08,
  0x22, 0x7a, 0xd5, 0x99, 0xf4, 0x5f, 0xbd, 0x4c, 0xfa, 0x8a, 0x80, 0x88,
  0xd6, 0xbd, 0x8f, 0xec, 0xc9, 0x9d, 0x41, 0x37, 0xda, 0xcb, 0x22, 0xff,
  0x5b, 0xe6, 0xe5, 0x82, 0x69, 0xfb, 0x29, 0xef, 0xf1, 0x7d, 0x61, 0x18,
  0xdc, 0x71, 0x94, 0x98, 0x22, 0x82, 0xa7, 0xee, 0x81, 0x47, 0x42, 0xb5,
  0x4c, 0xdb, 0x4f, 0x79, 0x8f, 0xef, 0x0b, 0xc3, 0xe0, 0x8e, 0xa3, 0xc4,
  0x14, 0x11, 0x3c, 0x75, 0x0f, 0x3c, 0x12, 0xaa, 0xe5, 0x16, 0xbd, 0x9c,
  0xfb, 0x80, 0x06, 0xdb, 0x08, 0xdd, 0x67, 0xad, 0xb4, 0xfa, 0xa7, 0x8f,
  0x45, 0xe7, 0x52, 0xdd, 0x18, 0x92, 0x17, 0x1b, 0x31, 0x27, 0x40, 0xc6,
  0x2e, 0x9b, 0x7e, 0x2a, 0x62, 0x4f, 0x8e, 0xd2, 0xb6, 0xa0, 0xb2, 0xed,
  0xbc, 0xf0, 0xd7, 0x9b, 0xbc, 0x90, 0x44, 0xf7, 0xe0, 0xf5, 0xa7, 0x3d,
  0xee, 0xc7, 0x9a, 0x65, 0xe6, 0x21, 0xd1, 0x92, 0xf7, 0xfc, 0x33, 0x77,
  0x13, 0x1c, 0x02, 0xed, 0xc0, 0xe1, 0xde, 0x0e, 0x7c, 0xcc, 0x52, 0xbd,
  0x4b, 0xec, 0x42, 0xc9, 0xb8, 0xd7, 0x41, 0x04, 0x59, 0xfe, 0xc2, 0x7e,
  0x7e, 0x5e, 0x82, 0x9b, 0x7a, 0xdf, 0x63, 0x92, 0x7a, 0x43, 0xbd, 0x2a,
  0x9c, 0x71, 0x50, 0xb4, 0x3a, 0xcc, 0xbb, 0xa7, 0x9f, 0x0b, 0x6d, 0xa8,
  0xbc, 0xb4, 0xc6, 0x6a, 0xdf, 0x1b, 0xcf, 0x76, 0x7d, 0x65, 0x75, 0x86,
  0xa8, 0x2c, 0x97, 0xf1, 0xf7, 0xbe, 0xc0, 0x94, 0x71, 0x34, 0x47, 0xb3,
  0xf6, 0xb9, 0xb6, 0x80, 0x57, 0x34, 0x43, 0xf7, 0xd8, 0x7e, 0x8b, 0xe9,
  0x9e, 0xfb, 0xea, 0x53, 0x72, 0xf4, 0xda, 0x7b, 0xf0, 0x91, 0x5b, 0x60,
  0x3a, 0x87, 0x36, 0x70, 0xc7, 0x7e, 0xaa, 0x5a, 0x9a, 0xcf, 0x7b, 0x8f,
  0x32, 0x65, 0xbc, 0x2b, 0x19, 0x75, 0x8b, 0xb6, 0x3f, 0x78, 0x86, 0xc9,
  0xe1, 0xd5, 0x95, 0x91, 0x6a, 0xd3, 0x86, 0x72, 0x42, 0x0b, 0x8d, 0x71,
  0xdc, 0xa2, 0x97, 0x73, 0x1f, 0xd0, 0x60, 0x1b, 0xa1, 0xfb, 0xac, 0x95,
  0x56, 0xff, 0xf4, 0xb1, 0xe8, 0x5c, 0xaa, 0x1b, 0x43, 0xf2, 0x62, 0x23,
  0xe6, 0x04, 0xc8, 0xd8, 0x65, 0xd3, 0x4f, 0x45, 0xec, 0xc9, 0x51, 0xda,
  0x16, 0x54, 0xb6, 0x9d, 0x17, 0xfe, 0x7a, 0x93, 0x17, 0x92, 0xe8, 0x1e,
  0xbc, 0xfe, 0xb4, 0xc7, 0xfd, 0x58, 0xb3, 0xcc, 0x3c, 0x24, 0x5a, 0xf2,
  0x9e, 0x7f, 0xe6, 0x6e, 0x82, 0x43, 0xa0, 0x1d, 0x38, 0xdc, 0xdb, 0x81,
  0x8f, 0x59, 0xaa, 0x77, 0x89, 0x5d, 0x28, 0x19, 0xf7, 0x3a, 0x88, 0x20,
  0xcb, 0x5f, 0xd8, 0xcf, 0xcf, 0x4b, 0x70, 0x53, 0xef, 0x7b, 0x4c, 0x52,
  0x6f, 0xa8, 0x57, 0x85, 0x33, 0x0e, 0x8a, 0x56, 0x87, 0x79, 0xf7, 0xf4,
  0x73, 0xa1, 0x0d, 0x95, 0x97, 0xd6, 0x58, 0xed, 0x7b, 0xe3, 0xd9, 0xae,
  0xaf, 0xac, 0xce, 0x10, 0x95, 0xe5, 0x32, 0xfe, 0xde, 0x17, 0x98, 0x32,
  0x8e, 0xe6, 0x68, 0xd6, 0x3e, 0xd7, 0x16, 0xf0, 0x8a, 0x66, 0xe8, 0x1e,
  0xdb, 0x6f, 0x31, 0xdd, 0x73, 0x5f, 0x7d, 0x4a, 0x8e, 0x5e, 0x7b, 0x0f,
  0x3e, 0x72, 0x0b, 0x4c, 0xe7, 0xd0, 0x06, 0xee, 0xd8, 0x4f, 0x55, 0x4b,
  0xf3, 0x79, 0xef, 0x51, 0xa6, 0x8c, 0x77, 0x25, 0xa3, 0x6e, 0xd1, 0xf6,
  0x07, 0xcf, 0x30, 0x39, 0xbc, 0xba, 0x32, 0x52, 0x6d, 0xda, 0x50, 0x4e,
  0x68, 0xa1, 0x31, 0xae, 0xee, 0xd9, 0x3f, 0x7b, 0xba, 0xe6, 0x59, 0x11,
  0x75, 0xcf, 0xfe, 0xd9, 0xd3, 0x35, 0xcf, 0x8a, 0xd0, 0xac, 0xad, 0xa8,
  0xf7, 0xde, 0x7b, 0x16, 0x5e, 0x73, 0x35, 0x07, 0xb4, 0x4c, 0xc1, 0x5c,
  0x35, 0xdc, 0xb4, 0x64, 0x0b, 0xe5, 0xd1, 0xff, 0xa1, 0x8e, 0xc1, 0x0a,
  0x78, 0x82, 0xf5, 0x7f, 0xf8, 0xf3, 0xfd, 0xdc, 0xaf, 0x75, 0x60, 0xaf,
  0x60, 0x95, 0x51, 0x9c, 0x60, 0xda, 0x6a, 0x17, 0xe1, 0x72, 0x84, 0x68,
  0x77, 0xbc, 0x11, 0xf8, 0xcc, 0x8d, 0x1e, 0xb1, 0x2a, 0x1c, 0xe7, 0x60,
  0x23, 0x50, 0xd0, 0x08, 0x66, 0x3e, 0xf4, 0x24, 0x78, 0xbe, 0x78, 0xa0,
  0x3c, 0x1f, 0xea, 0x6e, 0xe7, 0x1a, 0xd4, 0x57, 0x2b, 0x36, 0xb9, 0xed,
  0x8a, 0x9c, 0x83, 0xcd, 0x7b, 0x6d, 0xdf, 0x71, 0x2f, 0x9a, 0x1b, 0xa9,
  0x8d, 0xaf, 0xcc, 0x6c, 0xd9, 0x26, 0xb7, 0xfd, 0x03, 0xa8, 0x5e, 0xfa,
  0xa6, 0x2a, 0xf1, 0x57, 0x85, 0x08, 0xd9, 0x4a, 0x7b, 0x52, 0x33, 0x25,
  0x89, 0xdc, 0xfb, 0x8c, 0xa8, 0x36, 0x48, 0x71, 0x32, 0xa7, 0x74, 0x95,
  0x4d, 0x3f, 0xea, 0x95, 0x91, 0x41, 0x5c, 0xea, 0xb9, 0xf7, 0xd6, 0x63,
  0xbb, 0xb5, 0x64, 0xd0, 0x9c, 0x1d, 0x76, 0xad, 0x00, 0xf7, 0x28, 0x53,
  0xcd, 0xd9, 0xf9, 0xf8, 0xf4, 0x00, 0x73, 0xe6, 0xb8, 0xa1, 0xb9, 0x10,
  0xaf, 0xc6, 0xd9, 0x5f, 0xa5, 0xce, 0xac, 0x76, 0x4f, 0x3f, 0xed, 0x79,
  0x7a, 0x2c, 0x8e, 0xbd, 0x23, 0x42, 0x6a, 0x36, 0xe7, 0xe0, 0xbf, 0xc4,
  0x44, 0xb3, 0x2a, 0xd4, 0xbf, 0xcf, 0xfe, 0x2f, 0xcc, 0x8c, 0xb8, 0x21,
  0x62, 0xcb, 0xee, 0xe1, 0xcf, 0x9d, 0x4d, 0x73, 0xb5, 0x2a, 0x3e, 0x5a,
  0x7d, 0x51, 0x70, 0xf4, 0xf4, 0x80, 0xdd, 0x0b, 0xcf, 0xf5, 0x6a, 0x78,
  0x7e, 0x50, 0x9b, 0xf7, 0x34, 0x10, 0x0f, 0x85, 0x36, 0x9c, 0xe7, 0x98,
  0xa7, 0xe1, 0xaf, 0x2b, 0x6f, 0x0f, 0x9e, 0xef, 0x5a, 0xf1, 0x2b, 0x90,
  0x3c, 0x1f, 0xb3, 0x3b, 0x47, 0x75, 0x9a, 0x63, 0xb1, 0xcc, 0x0b, 0xb8,
  0x20, 0xdc, 0x23, 0x6e, 0x80, 0xbd, 0x96, 0x10, 0xe8, 0xaa, 0x1b, 0x75,
  0x93, 0x36, 0x2b, 0x4f, 0xc4, 0x3c, 0x67, 0xda, 0x19, 0x23, 0xea, 0xb8,
  0x10, 0x7a, 0xcd, 0x0b, 0xf5, 0xb6, 0x75, 0x5c, 0x68, 0xfa, 0xd2, 0x8f,
  0x3f, 0xb2, 0x1c, 0x29, 0x15, 0x18, 0x49, 0x42, 0x57, 0xb6, 0xf9, 0x93,
  0x61, 0xba, 0xac, 0x7a, 0xe0, 0x0a, 0x53, 0xbc, 0xa7, 0xca, 0xd0, 0x9f,
  0x52, 0xb1, 0x6f, 0xe8, 0xf2, 0xc4, 0xa2, 0xe7, 0x65, 0x21, 0x31, 0x5b,
  0x24, 0x6f, 0x92, 0xeb, 0x93, 0xc1, 0xa6, 0xd9, 0x15, 0x66, 0x66, 0xf0,
  0xf2, 0xfd, 0xf9, 0xb7, 0x27, 0x67, 0xe3, 0x64, 0x07, 0xb5, 0xed, 0xe7,
  0x67, 0x47, 0x5f, 0xbf, 0x3f, 0x37, 0xff, 0xd4, 0x91, 0x5e, 0xa7, 0x45,
  0x6e, 0xa4, 0xd3, 0xb8, 0xc9, 0x0a, 0x43, 0x2b, 0x97, 0xda, 0xa3, 0x89,
  0x72, 0x50, 0x20, 0x8f, 0xcb, 0x4a, 0x21, 0x4d, 0x90, 0x8e, 0x52, 0xce,
  0x5d, 0x32, 0x01, 0x7b, 0xb0, 0x91, 0xe3, 0x57, 0x3a, 0xcb, 0x39, 0xef,
  0x14, 0xe5, 0x6b, 0xda, 0x4e, 0x72, 0xfe, 0xed, 0xcb, 0x77, 0xdf, 0x8d,
  0xb5, 0x83, 0xc7, 0x0f, 0x3f, 0xfc, 0xd0, 0x0d, 0xee, 0xfa, 0x7d, 0xb8,
  0x3f, 0xfb, 0x6c, 0x7c, 0x78, 0x98, 0xbc, 0x3c, 0x1e, 0x9f, 0x7c, 0xe6,
  0x70, 0x1c, 0xb6, 0xf6, 0xb6, 0x8d, 0x92, 0x76, 0x99, 0x35, 0xe6, 0x2f,
  0x9f, 0x7d, 0xf6, 0xff, 0x00, 0x41, 0x7c, 0x59, 0x3a, 0x17, 0x88, 0x02,
  0x9a, 0xb5, 0x15, 0xf5, 0xde, 0x7b, 0xcf, 0xc2, 0x6b, 0xae, 0xe6, 0x80,
  0x96, 0x29, 0x98, 0xab, 0x86, 0x9b, 0x96, 0x6c, 0xa1, 0x3c, 0xfa, 0xdf,
  0xd5, 0x31, 0x58, 0x01, 0x4f, 0xb0, 0xfe, 0x77, 0x7f, 0xbe, 0x9f, 0xfb,
  0xb5, 0x0e, 0xec, 0x15, 0xac, 0x32, 0x8a, 0x13, 0x4c, 0x5b, 0xed, 0x22,
  0x5c, 0x8e, 0x10, 0xed, 0x8e, 0x37, 0x02, 0x9f, 0xb9, 0xd1, 0x23, 0x56,
  0x85, 0xe3, 0x1c, 0x6c, 0x04, 0x0a, 0x1a, 0xc1, 0xcc, 0x87, 0x9e, 0x04,
  0xcf, 0x17, 0x0f, 0x94, 0xe7, 0x43, 0xdd, 0xed, 0x5c, 0x83, 0xfa, 0x6a,
  0xc5, 0x26, 0xb7, 0x5d, 0x91, 0x73, 0xb0, 0x79, 0xaf, 0xed, 0x3b, 0xee,
  0x45, 0x73, 0x23, 0xb5, 0xf1, 0x95, 0x99, 0x2d, 0xdb, 0xe4, 0xb6, 0x7f,
  0x00, 0xd5, 0x4b, 0xdf, 0x54, 0x25, 0xfe, 0xaa, 0x10, 0x21, 0x5b, 0x69,
  0x4f, 0x6a, 0xa6, 0x24, 0x91, 0x7b, 0x9f, 0x11, 0xd5, 0x06, 0x29, 0x4e,
  0xe6, 0x94, 0xae, 0xb2, 0xe9, 0x47, 0xbd, 0x32, 0x32, 0x88, 0x4b, 0x3d,
  0xf7, 0xde, 0x7a, 0x6c, 0xb7, 0x96, 0x0c, 0x9a, 0xb3, 0xc3, 0xae, 0x15,
  0xe0, 0x1e, 0x65, 0xaa, 0x39, 0x3b, 0x1f, 0x9f, 0x1e, 0x60, 0xce, 0x1c,
  0x37, 0x34, 0x17, 0xe2, 0xd5, 0x38, 0xfb, 0xab, 0xd4, 0x99, 0xd5, 0xee,
  0xe9, 0xa7, 0x3d, 0x4f, 0x8f, 0xc5, 0xb1, 0x77, 0x44, 0x48, 0xcd, 0xe6,
  0x1c, 0xfc, 0x97, 0x98, 0x68, 0x56, 0x85, 0xfa, 0xf7, 0xd9, 0xff, 0x85,
  0x99, 0x11, 0x37, 0x44, 0x6c, 0xd9, 0x3d, 0xfc, 0xb9, 0xb3, 0x69, 0xae,
  0x56, 0xc5, 0x47, 0xab, 0x2f, 0x0a, 0x8e, 0x9e, 0x1e, 0xb0, 0x7b, 0xe1,
  0xb9, 0x5e, 0x0d, 0xcf, 0x0f, 0x6a, 0xf3, 0x9e, 0x06, 0xe2, 0xa1, 0xd0,
  0x86, 0xf3, 0x1c, 0xf3, 0x34, 0xfc, 0x75, 0xe5, 0xed, 0xc1, 0xf3, 0x5d,
  0x2b, 0x7e, 0x05, 0x92, 0xe7, 0x63, 0x76, 0xe7, 0xa8, 0x4e, 0x73, 0x2c,
  0x96, 0x79, 0x01, 0x17, 0x84, 0x7b, 0xc4, 0x0d, 0xb0, 0xd7, 0x12, 0x02,
  0x5d, 0x75, 0xa3, 0x6e, 0xd2, 0x66, 0xe5, 0x89, 0x98, 0xe7, 0x4c, 0x3b,
  0x63, 0x44, 0x1d, 0x17, 0x42, 0xaf, 0x79, 0xa1, 0xde, 0xb6, 0x8e, 0x0b,
  0x4d, 0x5f, 0xfa, 0xe1, 0x07, 0x96, 0x23, 0xa5, 0x02, 0x23, 0x49, 0xe8,
  0xca, 0x36, 0x7f, 0x32, 0x4c, 0x97, 0x55, 0x0f, 0x5c, 0x61, 0x8a, 0xf7,
  0x54, 0x19, 0xfa, 0x53, 0x2a, 0xf6, 0x0d, 0x5d, 0x9e, 0x58, 0xf4, 0xbc,
  0x2c, 0x24, 0x66, 0x8b, 0xe4, 0x4d, 0x72, 0x7d, 0x32, 0xd8, 0x34, 0xbb,
  0xc2, 0xcc, 0x0c, 0x5e, 0xbe, 0x3f, 0xff, 0xe6, 0xe4, 0x6c, 0x9c, 0xec,
  0xa0, 0xb6, 0xfd, 0xfc, 0xec, 0xe8, 0xab, 0xf7, 0xe7, 0xe6, 0x9f, 0x3a,
  0xd2, 0xeb, 0xb4, 0xc8, 0x8d, 0x74, 0x1a, 0x37, 0x59, 0x61, 0x68, 0xe5,
  0x52, 0x7b, 0x34, 0x51, 0x0e, 0x0a, 0xe4, 0x71, 0x59, 0x29, 0xa4, 0x09,
  0xd2, 0x51, 0xca, 0xb9, 0x4b, 0x26, 0x60, 0x0f, 0x36, 0x72, 0xfc, 0x4a,
  0x67, 0x39, 0xe7, 0x9d, 0xa2, 0x7c, 0x4d, 0xdb, 0x49, 0xce, 0xbf, 0x79,
  0xf9, 0xee, 0xdb, 0xb1, 0x76, 0xf0, 0xf8, 0xfe, 0xfb, 0xef, 0xbb, 0xc1,
  0x5d, 0xbf, 0x0f, 0xf7, 0x67, 0x9f, 0x8d, 0x0f, 0x0f, 0x93, 0x97, 0xc7,
  0xe3, 0x93, 0xcf, 0x1c, 0x8e, 0xc3, 0xd6, 0xde, 0xb6, 0x51, 0xd2, 0x2e,
  0xb3, 0xc6, 0xfc, 0xe5, 0xb3, 0xcf, 0xfe, 0x5f, 0xd7, 0x18, 0xeb, 0x8e,
  0x30, 0x88, 0x02, 0x00,
  0x00,
};
#define BUF_SIZE 0x10000
static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int size)
{
  (void) opaque;
  /* not a typo, keep it calloc() */
  return (voidpf) calloc(items, size);
Changes to jni/curl/src/tool_main.c.
233
234
235
236
237
238
239
240

241
242
243
244
245
246
247
233
234
235
236
237
238
239

240
241
242
243
244
245
246
247







-
+








  /* Free the config structures */
  config_free(config->last);
  config->first = NULL;
  config->last = NULL;
}

#ifdef _WIN32
#ifdef WIN32
/* TerminalSettings for Windows */
static struct TerminalSettings {
  HANDLE hStdOut;
  DWORD dwOutputMode;
} TerminalSettings;

static void configure_terminal(void)
271
272
273
274
275
276
277
278

279
280
281
282
283
284
285
271
272
273
274
275
276
277

278
279
280
281
282
283
284
285







-
+







}
#else
#define configure_terminal()
#endif

static void restore_terminal(void)
{
#ifdef _WIN32
#ifdef WIN32
  /* Restore Console output mode and codepage to whatever they were
   * when Curl started */
  SetConsoleMode(TerminalSettings.hStdOut, TerminalSettings.dwOutputMode);
#endif
}

/*
Changes to jni/curl/src/tool_metalink.c.
69
70
71
72
73
74
75
76

77
78
79
80
81
82
83
69
70
71
72
73
74
75

76
77
78
79
80
81
82
83







-
+







   The library's headers are even backward-compatible with OpenSSL's
   headers as long as we define COMMON_DIGEST_FOR_OPENSSL first.

   These functions are available on Tiger and later, as well as iOS 2.0
   and later. If you're building for an older cat, well, sorry. */
#  define COMMON_DIGEST_FOR_OPENSSL
#  include <CommonCrypto/CommonDigest.h>
#elif defined(_WIN32)
#elif defined(WIN32)
/* For Windows: If no other crypto library is provided, we fallback
   to the hash functions provided within the Microsoft Windows CryptoAPI */
#  include <wincrypt.h>
/* Custom structure in order to store the required provider and hash handle */
struct win32_crypto_hash {
  HCRYPTPROV hCryptProv;
  HCRYPTHASH hHash;
376
377
378
379
380
381
382
383

384
385
386
387
388
389
390
376
377
378
379
380
381
382

383
384
385
386
387
388
389
390







-
+







}

static void SHA256_Final(unsigned char digest[32], SHA256_CTX *ctx)
{
  sha256_finish(ctx, digest);
}

#elif defined(_WIN32)
#elif defined(WIN32)

static void win32_crypto_final(struct win32_crypto_hash *ctx,
                               unsigned char *digest,
                               unsigned int digestLen)
{
  unsigned long length;
  CryptGetHashParam(ctx->hHash, HP_HASHVAL, NULL, &length, 0);
Changes to jni/curl/src/tool_operate.c.
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
97
98
99
100
101
102
103

104
105
106
107
108
109
110







-







  "could not\nestablish a secure connection to it. To learn more about "    \
  "this situation and\nhow to fix it, please visit the web page mentioned " \
  "above.\n"

static bool is_fatal_error(CURLcode code)
{
  switch(code) {
  /* TODO: Should CURLE_PEER_FAILED_VERIFICATION be a critical error? */
  case CURLE_FAILED_INIT:
  case CURLE_OUT_OF_MEMORY:
  case CURLE_UNKNOWN_OPTION:
  case CURLE_FUNCTION_NOT_FOUND:
  case CURLE_BAD_FUNCTION_ARGUMENT:
    /* critical error */
    return TRUE;
822
823
824
825
826
827
828

829

830
831
832
833
834
835
836
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837







+

+







          my_setopt(curl, CURLOPT_TCP_NODELAY, 0L);

        if(config->tcp_fastopen)
          my_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L);

        /* where to store */
        my_setopt(curl, CURLOPT_WRITEDATA, &outs);
#ifndef CURL_DISABLE_RTSP
        my_setopt(curl, CURLOPT_INTERLEAVEDATA, &outs);
#endif
        if(metalink || !config->use_metalink)
          /* what call to write */
          my_setopt(curl, CURLOPT_WRITEFUNCTION, tool_write_cb);
#ifdef USE_METALINK
        else
          /* Set Metalink specific write callback function to parse
             XML data progressively. */
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
873
874
875
876
877
878
879


880
881
882
883
884
885
886







-
-







          my_setopt(curl, CURLOPT_NOBODY, 1L);

        if(config->oauth_bearer)
          my_setopt_str(curl, CURLOPT_XOAUTH2_BEARER, config->oauth_bearer);

#if !defined(CURL_DISABLE_PROXY)
        {
          /* TODO: Make this a run-time check instead of compile-time one. */

          my_setopt_str(curl, CURLOPT_PROXY, config->proxy);
          /* new in libcurl 7.5 */
          if(config->proxy)
            my_setopt_enum(curl, CURLOPT_PROXYTYPE, config->proxyver);

          my_setopt_str(curl, CURLOPT_PROXYUSERPWD, config->proxyuserpwd);

1014
1015
1016
1017
1018
1019
1020

1021

1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035

1036
1037

1038
1039
1040
1041
1042
1043
1044
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038

1039
1040
1041
1042
1043
1044
1045
1046







+

+














+

-
+







            my_setopt(curl, CURLOPT_TRANSFER_ENCODING, 1L);
          /* new in libcurl 7.64.0 */
          my_setopt(curl, CURLOPT_HTTP09_ALLOWED,
                    config->http09_allowed ? 1L : 0L);

        } /* (built_in_protos & CURLPROTO_HTTP) */

#ifndef CURL_DISABLE_FTP
        my_setopt_str(curl, CURLOPT_FTPPORT, config->ftpport);
#endif
        my_setopt(curl, CURLOPT_LOW_SPEED_LIMIT,
                  config->low_speed_limit);
        my_setopt(curl, CURLOPT_LOW_SPEED_TIME, config->low_speed_time);
        my_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE,
                  config->sendpersecond);
        my_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE,
                  config->recvpersecond);

        if(config->use_resume)
          my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, config->resume_from);
        else
          my_setopt(curl, CURLOPT_RESUME_FROM_LARGE, CURL_OFF_T_C(0));

        my_setopt_str(curl, CURLOPT_KEYPASSWD, config->key_passwd);
#ifndef CURL_DISABLE_PROXY
        my_setopt_str(curl, CURLOPT_PROXY_KEYPASSWD, config->proxy_key_passwd);

#endif
        if(built_in_protos & (CURLPROTO_SCP|CURLPROTO_SFTP)) {

          /* SSH and SSL private key uses same command-line option */
          /* new in libcurl 7.16.1 */
          my_setopt_str(curl, CURLOPT_SSH_PRIVATE_KEYFILE, config->key);
          /* new in libcurl 7.16.1 */
          my_setopt_str(curl, CURLOPT_SSH_PUBLIC_KEYFILE, config->pubkey);
1236
1237
1238
1239
1240
1241
1242

1243
1244

1245
1246
1247
1248
1249
1250
1251
1238
1239
1240
1241
1242
1243
1244
1245
1246

1247
1248
1249
1250
1251
1252
1253
1254







+

-
+







        my_setopt(curl, CURLOPT_TIMEVALUE_LARGE, config->condtime);
        my_setopt_str(curl, CURLOPT_CUSTOMREQUEST, config->customrequest);
        customrequest_helper(config, config->httpreq, config->customrequest);
        my_setopt(curl, CURLOPT_STDERR, global->errors);

        /* three new ones in libcurl 7.3: */
        my_setopt_str(curl, CURLOPT_INTERFACE, config->iface);
#ifndef CURL_DISABLE_FTP
        my_setopt_str(curl, CURLOPT_KRBLEVEL, config->krblevel);

#endif
        progressbarinit(&progressbar, config);
        if((global->progressmode == CURL_PROGRESS_BAR) &&
           !global->noprogress && !global->mute) {
          /* we want the alternative style, then we have to implement it
             ourselves! */
          my_setopt(curl, CURLOPT_XFERINFOFUNCTION, tool_progress_cb);
          my_setopt(curl, CURLOPT_XFERINFODATA, &progressbar);
1259
1260
1261
1262
1263
1264
1265

1266
1267
1268

1269
1270
1271
1272
1273
1274
1275
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271

1272
1273
1274
1275
1276
1277
1278
1279







+


-
+







        if(config->dns_interface)
          my_setopt_str(curl, CURLOPT_DNS_INTERFACE, config->dns_interface);
        if(config->dns_ipv4_addr)
          my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP4, config->dns_ipv4_addr);
        if(config->dns_ipv6_addr)
        my_setopt_str(curl, CURLOPT_DNS_LOCAL_IP6, config->dns_ipv6_addr);

#ifndef CURL_DISABLE_TELNET
        /* new in libcurl 7.6.2: */
        my_setopt_slist(curl, CURLOPT_TELNETOPTIONS, config->telnet_options);

#endif
        /* new in libcurl 7.7: */
        my_setopt_str(curl, CURLOPT_RANDOM_FILE, config->random_file);
        my_setopt_str(curl, CURLOPT_EGDSOCKET, config->egd_file);
        my_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS,
                  (long)(config->connecttimeout * 1000));

        if(config->doh_url)
1364
1365
1366
1367
1368
1369
1370

1371
1372
1373

1374
1375

1376
1377
1378
1379
1380
1381

1382
1383
1384
1385
1386
1387

1388
1389
1390
1391

1392
1393
1394
1395
1396
1397
1398
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377

1378
1379
1380
1381
1382
1383
1384
1385
1386

1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397

1398
1399
1400
1401
1402
1403
1404
1405







+


-
+


+





-
+






+



-
+







                        config->proxy_service_name);

        /* new in curl 7.43.0 */
        if(config->service_name)
          my_setopt_str(curl, CURLOPT_SERVICE_NAME,
                        config->service_name);

#ifndef CURL_DISABLE_FTP
        /* curl 7.13.0 */
        my_setopt_str(curl, CURLOPT_FTP_ACCOUNT, config->ftp_account);

#endif
        my_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, config->ignorecl?1L:0L);

#ifndef CURL_DISABLE_FTP
        /* curl 7.14.2 */
        my_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, config->ftp_skip_ip?1L:0L);

        /* curl 7.15.1 */
        my_setopt(curl, CURLOPT_FTP_FILEMETHOD, (long)config->ftp_filemethod);

#endif
        /* curl 7.15.2 */
        if(config->localport) {
          my_setopt(curl, CURLOPT_LOCALPORT, config->localport);
          my_setopt_str(curl, CURLOPT_LOCALPORTRANGE, config->localportrange);
        }

#ifndef CURL_DISABLE_FTP
        /* curl 7.15.5 */
        my_setopt_str(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER,
                      config->ftp_alternative_to_user);

#endif
        /* curl 7.16.0 */
        if(config->disable_sessionid)
          /* disable it */
          my_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0L);

        /* curl 7.16.2 */
        if(config->raw) {
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1663
1664
1665
1666
1667
1668
1669




1670
1671
1672
1673
1674
1675
1676







-
-
-
-







                case 504: /* Gateway Timeout */
                  retry = RETRY_HTTP;
                  /*
                   * At this point, we have already written data to the output
                   * file (or terminal). If we write to a file, we must rewind
                   * or close/re-open the file so that the next attempt starts
                   * over from the beginning.
                   *
                   * TODO: similar action for the upload case. We might need
                   * to start over reading from a previous point if we have
                   * uploaded something when this was returned.
                   */
                  break;
                }
              }
            } /* if CURLE_OK */
            else if(result) {
              long protocol;
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1753
1754
1755
1756
1757
1758
1759


1760
1761
1762
1763
1764
1765
1766







-
-







          } /* if retry_numretries */
          else if(metalink) {
            /* Metalink: Decide to try the next resource or
               not. Basically, we want to try the next resource if
               download was not successful. */
            long response;
            if(CURLE_OK == result) {
              /* TODO We want to try next resource when download was
                 not successful. How to know that? */
              char *effective_url = NULL;
              curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &effective_url);
              if(effective_url &&
                 curl_strnequal(effective_url, "http", 4)) {
                /* This was HTTP(S) */
                curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response);
                if(response != 200 && response != 206) {
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939
1940
1941
1926
1927
1928
1929
1930
1931
1932



1933
1934
1935
1936
1937
1938
1939







-
-
-







          if(is_fatal_error(result)) {
            break;
          }
          if(!metalink_next_res)
            break;
          mlres = mlres->next;
          if(mlres == NULL)
            /* TODO If metalink_next_res is 1 and mlres is NULL,
             * set res to error code
             */
            break;
        }
        else if(urlnum > 1) {
          /* when url globbing, exit loop upon critical error */
          if(is_fatal_error(result))
            break;
        }
Changes to jni/curl/src/tool_urlglob.c.
549
550
551
552
553
554
555
556
557

558
559
560
561
562
563
564
549
550
551
552
553
554
555


556
557
558
559
560
561
562
563







-
-
+







        break;
      default:
        printf("internal error: invalid pattern type (%d)\n", (int)pat->type);
        return CURLE_FAILED_INIT;
      }
    }
    if(carry) {         /* first pattern ptr has run into overflow, done! */
      /* TODO: verify if this should actually return CURLE_OK. */
      return CURLE_OK; /* CURLE_OK to match previous behavior */
      return CURLE_OK;
    }
  }

  for(i = 0; i < glob->size; ++i) {
    pat = &glob->pattern[i];
    switch(pat->type) {
    case UPTSet:
Changes to jni/curl/src/tool_version.h.
21
22
23
24
25
26
27
28

29
30
31
32
33
34
21
22
23
24
25
26
27

28
29
30
31
32
33
34







-
+






 * KIND, either express or implied.
 *
 ***************************************************************************/
#include <curl/curlver.h>

#define CURL_NAME "curl"
#define CURL_COPYRIGHT LIBCURL_COPYRIGHT
#define CURL_VERSION "7.64.1"
#define CURL_VERSION "7.65.0"
#define CURL_VERSION_MAJOR LIBCURL_VERSION_MAJOR
#define CURL_VERSION_MINOR LIBCURL_VERSION_MINOR
#define CURL_VERSION_PATCH LIBCURL_VERSION_PATCH
#define CURL_ID CURL_NAME " " CURL_VERSION " (" OS ") "

#endif /* HEADER_CURL_TOOL_VERSION_H */
Changes to jni/curl/tests/FILEFORMAT.
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
152
153
154
155
156
157
158


159
160
161
162
163
164
165







-
-








For HTTP/HTTPS:
auth_required   if this is set and a POST/PUT is made without auth, the
                server will NOT wait for the full request body to get sent
idle            do nothing after receiving the request, just "sit idle"
stream          continuously send data to the client, never-ending
writedelay: [secs] delay this amount between reply packets
pipe: [num]     tell the server to expect this many HTTP requests before
                sending back anything, to allow pipelining tests
skip: [num]     instructs the server to ignore reading this many bytes from a PUT
                or POST request

rtp: part [num] channel [num] size [num]
               stream a fake RTP packet for the given part on a chosen channel
               with the given payload size

184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
182
183
184
185
186
187
188

189
190
191
192
193
194
195







-








file
ftp
ftp-ipv6
ftps
http
http-ipv6
http-pipe
http-proxy
http-unix
https
httptls+srp
httptls+srp-ipv6
http/2
imap
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
347
348
349
350
351
352
353

354
355
356
357
358
359
360







-







             a response from the test FTP server
%FTPTIME3  - Even longer than %FTPTIME2
%GOPHER6PORT  - IPv6 port number of the Gopher server
%GOPHERPORT   - Port number of the Gopher server
%HOST6IP      - IPv6 address of the host running this test
%HOSTIP       - IPv4 address of the host running this test
%HTTP6PORT    - IPv6 port number of the HTTP server
%HTTPPIPEPORT - Port number of the HTTP pipelining server
%HTTPUNIXPATH - Path to the Unix socket of the HTTP server
%HTTPPORT     - Port number of the HTTP server
%HTTPSPORT    - Port number of the HTTPS server
%HTTPTLS6PORT - IPv6 port number of the HTTP TLS server
%HTTPTLSPORT  - Port number of the HTTP TLS server
%IMAP6PORT - IPv6 port number of the IMAP server
%IMAPPORT  - Port number of the IMAP server
Changes to jni/curl/tests/Makefile.in.
470
471
472
473
474
475
476
477

478
479

480
481
482
483
484
485
486
470
471
472
473
474
475
476

477
478

479
480
481
482
483
484
485
486







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu tests/Makefile
	  $(AUTOMAKE) --foreign tests/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/tests/data/Makefile.in.
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
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







-
+













-
+












-
+


-
+







test262 test263 test264 test265 test266 test267 test268 test269 test270 \
test271 test272 test273 test274 test275 test276 test277 test278 test279 \
test280 test281 test282 test283 test284 test285 test286 test287 test288 \
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
\
test340 \
\
test350 test351 test352 test353 test354 test355 test356 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test500 test501 test502 test503 test504 test505 test506 test507 test508 \
test509 test510 test511 test512 test513 test514 test515 test516 test517 \
test518 test519 test520 test521 test522 test523 test524 test525 test526 \
test527 test528 test529 test530 test531 test532 test533 test534 test535 \
test536 test537 test538 test539 test540 test541 test542 test543 test544 \
        test537 test538 test539 test540 test541 test542 test543 test544 \
test545 test546 test547 test548 test549 test550 test551 test552 test553 \
test554 test555 test556 test557 test558 test559 test560 test561 test562 \
test563 test564 test565 test566 test567 test568 test569 test570 test571 \
test572 test573 test574 test575 test576 test577 test578 test579 test580 \
test581 test582 test583 test584 test585 test586 test587 test588 test589 \
test590 test591 test592 test593 test594 test595 test596 test597 test598 \
test599 test600 test601 test602 test603 test604 test605 test606 test607 \
test608 test609 test610 test611 test612 test613 test614 test615 test616 \
test617 test618 test619 test620 test621 test622 test623 test624 test625 \
test626 test627 test628 test629 test630 test631 test632 test633 test634 \
test635 test636 test637 test638 test639 test640 test641 test642 \
test643 test644 test645 test646 test647 test648 test649 test650 test651 \
test652 test653 test654 test655 test656 test658 test659 \
test652 test653 test654 test655 test656 test658 test659 test660 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 \
test709 test710 test711 test712 test713 test714 test715 test716 test717 \
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 \
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
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







-
+












-
+







test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
test1516 test1517 test1518 test1519 test1520 test1521 test1522 \
\
test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
test1533 test1534 test1535 test1536 test1537 test1538 \
test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558          test1560 test1561 test1562 \
test1558 test1559 test1560 test1561 test1562 \
\
test1590 test1591 test1592 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1620 test1621 \
\
test1650 test1651 test1652 test1653 test1654 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 \
test1900 test1901 test1902 test1903 test1904 test1905 test1906 \
\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
556
557
558
559
560
561
562
563

564
565

566
567
568
569
570
571
572
556
557
558
559
560
561
562

563
564

565
566
567
568
569
570
571
572







-
+

-
+







	  case '$(am__configure_deps)' in \
	    *$$dep*) \
	      ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
	        && { if test -f $@; then exit 0; else break; fi; }; \
	      exit 1;; \
	  esac; \
	done; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu tests/data/Makefile'; \
	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/data/Makefile'; \
	$(am__cd) $(top_srcdir) && \
	  $(AUTOMAKE) --gnu tests/data/Makefile
	  $(AUTOMAKE) --foreign tests/data/Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
	@case '$?' in \
	  *config.status*) \
	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
	  *) \
	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \
	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \
Changes to jni/curl/tests/data/Makefile.inc.
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
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







-
+













-
+












-
+


-
+







test262 test263 test264 test265 test266 test267 test268 test269 test270 \
test271 test272 test273 test274 test275 test276 test277 test278 test279 \
test280 test281 test282 test283 test284 test285 test286 test287 test288 \
test289 test290 test291 test292 test293 test294 test295 test296 test297 \
test298 test299 test300 test301 test302 test303 test304 test305 test306 \
test307 test308 test309 test310 test311 test312 test313 test314 test315 \
test316 test317 test318 test319 test320 test321 test322 test323 test324 \
test325 test326 test327 test328 test329 test330 test331 \
test325 test326 test327 test328 test329 test330 test331 test332 test333 \
\
test340 \
\
test350 test351 test352 test353 test354 test355 test356 \
test393 test394 test395 \
\
test400 test401 test402 test403 test404 test405 test406 test407 test408 \
test409 \
\
test500 test501 test502 test503 test504 test505 test506 test507 test508 \
test509 test510 test511 test512 test513 test514 test515 test516 test517 \
test518 test519 test520 test521 test522 test523 test524 test525 test526 \
test527 test528 test529 test530 test531 test532 test533 test534 test535 \
test536 test537 test538 test539 test540 test541 test542 test543 test544 \
        test537 test538 test539 test540 test541 test542 test543 test544 \
test545 test546 test547 test548 test549 test550 test551 test552 test553 \
test554 test555 test556 test557 test558 test559 test560 test561 test562 \
test563 test564 test565 test566 test567 test568 test569 test570 test571 \
test572 test573 test574 test575 test576 test577 test578 test579 test580 \
test581 test582 test583 test584 test585 test586 test587 test588 test589 \
test590 test591 test592 test593 test594 test595 test596 test597 test598 \
test599 test600 test601 test602 test603 test604 test605 test606 test607 \
test608 test609 test610 test611 test612 test613 test614 test615 test616 \
test617 test618 test619 test620 test621 test622 test623 test624 test625 \
test626 test627 test628 test629 test630 test631 test632 test633 test634 \
test635 test636 test637 test638 test639 test640 test641 test642 \
test643 test644 test645 test646 test647 test648 test649 test650 test651 \
test652 test653 test654 test655 test656 test658 test659 \
test652 test653 test654 test655 test656 test658 test659 test660 \
\
test700 test701 test702 test703 test704 test705 test706 test707 test708 \
test709 test710 test711 test712 test713 test714 test715 \
test709 test710 test711 test712 test713 test714 test715 test716 test717 \
\
test800 test801 test802 test803 test804 test805 test806 test807 test808 \
test809 test810 test811 test812 test813 test814 test815 test816 test817 \
test818 test819 test820 test821 test822 test823 test824 test825 test826 \
test827 test828 test829 test830 test831 test832 test833 test834 test835 \
test836 test837 test838 test839 test840 test841 test842 test843 test844 \
test845 test846 test847 \
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
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







-
+












-
+







test1508 test1509 test1510 test1511 test1512 test1513 test1514 test1515 \
test1516 test1517 test1518 test1519 test1520 test1521 test1522 \
\
test1525 test1526 test1527 test1528 test1529 test1530 test1531 test1532 \
test1533 test1534 test1535 test1536 test1537 test1538 \
test1540 test1541 \
test1550 test1551 test1552 test1553 test1554 test1555 test1556 test1557 \
test1558          test1560 test1561 test1562 \
test1558 test1559 test1560 test1561 test1562 \
\
test1590 test1591 test1592 \
\
test1600 test1601 test1602 test1603 test1604 test1605 test1606 test1607 \
test1608 test1609 test1620 test1621 \
\
test1650 test1651 test1652 test1653 test1654 \
\
test1700 test1701 test1702 \
\
test1800 test1801 \
\
test1900 test1901 test1902 test1903 test1904 test1905 \
test1900 test1901 test1902 test1903 test1904 test1905 test1906 \
\
test2000 test2001 test2002 test2003 test2004 test2005 test2006 test2007 \
test2008 test2009 test2010 test2011 test2012 test2013 test2014 test2015 \
test2016 test2017 test2018 test2019 test2020 test2021 test2022 test2023 \
test2024 test2025 test2026 test2027 test2028 test2029 test2030 test2031 \
test2032 test2033 test2034 test2035 test2036 test2037 test2038 test2039 \
test2040 test2041 test2042 test2043 test2044 test2045 test2046 test2047 \
Changes to jni/curl/tests/data/test1002.
63
64
65
66
67
68
69
70

71
72
73
74
75
76
77
63
64
65
66
67
68
69

70
71
72
73
74
75
76
77







-
+







http
</server>
<features>
!SSPI
crypto
</features>
 <name>
HTTP POST --digest with PUT and resumed upload and modified method, twice
HTTP PUT with Digest auth, resumed upload and modified method, twice
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/1002.upload1 -T log/1002 http://%HOSTIP:%HTTPPORT/1002.upload2 -T log/1002 -u auser:apasswd --digest -x  http://%HOSTIP:%HTTPPORT -C 2 -X GET
</command>
<file name="log/1002">
test
</file>
Changes to jni/curl/tests/data/test1400.
46
47
48
49
50
51
52

53
54
55
56
57

58
59
60
61
62
63
64
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66







+





+







Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
<stripfile>
s/(USERAGENT, \")[^\"]+/${1}stripped/
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# CURLOPT_INTERLEAVEDATA requires RTSP protocol
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_HTTP09_ALLOWED/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
<file name="log/test1400.c" mode="text">
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
79
80
81
82
83
84
85

86
87
88
89
90
91
92







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
Changes to jni/curl/tests/data/test1401.
57
58
59
60
61
62
63

64
65
66
67
68
69
70
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71







+







</protocol>
<stripfile>
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
<file name="log/test1401.c" mode="text">
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
97
98
99
100
101
102
103

104
105
106
107
108
109
110







-







                                           (long)CURLPROTO_HTTP);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
Changes to jni/curl/tests/data/test1402.
55
56
57
58
59
60
61

62
63
64
65
66
67
68
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69







+







# curl's default user-agent varies with version, libraries etc.
s/(USERAGENT, \")[^\"]+/${1}stripped/
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
<file name="log/test1402.c" mode="text">
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
85
86
87
88
89
90
91

92
93
94
95
96
97
98







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
Changes to jni/curl/tests/data/test1403.
52
53
54
55
56
57
58

59
60
61
62
63
64
65
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66







+







# curl's default user-agent varies with version, libraries etc.
s/(USERAGENT, \")[^\"]+/${1}stripped/
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
<file name="log/test1403.c" mode="text">
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
 ************************************************************************/
#include <curl/curl.h>
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
80
81
82
83
84
85
86

87
88
89
90
91
92
93







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
Changes to jni/curl/tests/data/test1404.
90
91
92
93
94
95
96

97
98
99
100
101
102
103
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104







+







# curl's default user-agent varies with version, libraries etc.
s/(USERAGENT, \")[^\"]+/${1}stripped/
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
# CURL_DOES_CONVERSION generates an extra comment.
$_ = '' if /\/\* "value" \*\//
</stripfile>
<file name="log/test1404.c" mode="text">
/********* Sample code generated by the curl command line tool **********
 * All curl_easy_setopt() options are documented at:
 * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
151
152
153
154
155
156
157

158
159
160
161
162
163
164







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
Changes to jni/curl/tests/data/test1405.
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
92
93
94
95
96
97
98

99
100
101
102
103
104
105







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
124
125
126
127
128
129
130

131
132
133
134
135
136
137
138
139

140
141
142
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143







+









+




  return (int)ret;
}
/**** End of sample code ****/
</file>
<stripfile>
# CURLOPT_USERAGENT and CURLOPT_MAXREDIRS requires HTTP protocol
# CURLOPT_INTERLEAVEDATA requires RTSP (HTTP) protocol
# support, IOW depends on configuration - just ignore these.
$_ = '' if /CURLOPT_USERAGENT/
$_ = '' if /CURLOPT_MAXREDIRS/
# CURLOPT_SSL_VERIFYPEER, SSH_KNOWNHOSTS and HTTP_VERSION vary with
# configurations - just ignore them
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_HTTP09_ALLOWED/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
</verify>
</testcase>
Changes to jni/curl/tests/data/test1407.
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
65
66
67
68
69
70
71

72
73
74
75
76
77
78







-







  curl_easy_setopt(hnd, CURLOPT_TCP_KEEPALIVE, 1L);

  /* Here is a list of options the curl code used that cannot get generated
     as source easily. You may select to either not use them or implement
     them yourself.

  CURLOPT_WRITEDATA set to a objectpointer
  CURLOPT_INTERLEAVEDATA set to a objectpointer
  CURLOPT_WRITEFUNCTION set to a functionpointer
  CURLOPT_READDATA set to a objectpointer
  CURLOPT_READFUNCTION set to a functionpointer
  CURLOPT_SEEKDATA set to a objectpointer
  CURLOPT_SEEKFUNCTION set to a functionpointer
  CURLOPT_ERRORBUFFER set to a objectpointer
  CURLOPT_STDERR set to a objectpointer
91
92
93
94
95
96
97

98
99
100
101
102
103

104
105
106
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107







+






+




  return (int)ret;
}
/**** End of sample code ****/
</file>
<stripfile>
# These options vary with configurations - just ignore them
# CURLOPT_INTERLEAVEDATA requires RTSP (HTTP) protocol
$_ = '' if /CURLOPT_USERAGENT/
$_ = '' if /CURLOPT_MAXREDIRS/
$_ = '' if /CURLOPT_SSL_VERIFYPEER/
$_ = '' if /CURLOPT_SSH_KNOWNHOSTS/
$_ = '' if /CURLOPT_HTTP_VERSION/
$_ = '' if /CURLOPT_HTTP09_ALLOWED/
$_ = '' if /CURLOPT_INTERLEAVEDATA/
</stripfile>
</verify>
</testcase>
Changes to jni/curl/tests/data/test1506.
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
84
85
86
87
88
89
90



91
92
93

94
95
96







-
-
-



-



</strip>
<file name="log/stderr1506" mode="text">
* Connection #0 to host server1.example.com left intact
* Connection #1 to host server2.example.com left intact
* Connection #2 to host server3.example.com left intact
* Closing connection 0
* Connection #3 to host server4.example.com left intact
* Closing connection
* Closing connection
* Closing connection
</file>
<stripfile>
$_ = '' if (($_ !~ /left intact/) && ($_ !~ /Closing connection/))
s/^(\* Closing connection) [123](?=\r?\n)/$1/
</stripfile>
</verify>
</testcase>
Added jni/curl/tests/data/test1559.












































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
CURLOPT_URL
</keywords>
</info>

<reply>
</reply>

<client>
<server>
none
</server>

# require HTTP so that CURLOPT_POSTFIELDS works as assumed
<features>
http
</features>
<tool>
lib1559
</tool>

<name>
Set excessive URL lengths
</name>
</client>

#
# Verify that the test runs to completion without crashing
<verify>
<errorcode>
0
</errorcode>
<stdout>
CURLOPT_URL 10000000 bytes URL == 43
CURLOPT_POSTFIELDS 10000000 bytes data == 0
CURLUPART_URL 10000000 bytes URL == 3
CURLUPART_SCHEME 10000000 bytes scheme == 3
CURLUPART_USER 10000000 bytes user == 3
</stdout>
</verify>

</testcase>
Changes to jni/curl/tests/data/test1560.
27
28
29
30
31
32
33












34
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46







+
+
+
+
+
+
+
+
+
+
+
+

URL API
 </name>
<tool>
lib1560
</tool>
</client>

<verify>
<stdout>
we got [fe80::20c:29ff:fe9c:409b]
we got https://[::1]/hello.html
we got https://example.com/hello.html
we got https://[fe80::20c:29ff:fe9c:409b%25eth0]/hello.html
we got [fe80::20c:29ff:fe9c:409b]
we got eth0
we got https://[fe80::20c:29ff:fe9c:409b%25clown]/hello.html
success
</stdout>
</verify>
</testcase>
Added jni/curl/tests/data/test1906.




















































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
CURLOPT_CURLU
CURLOPT_PORT
</keywords>
</info>

# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Content-Type: text/html
Funny-head: yesyes swsclose

</data>
</reply>

# Client-side
<client>
<server>
http
</server>
 <name>
CURLOPT_CURLU and CURLOPT_PORT
 </name>
<tool>
lib1906
</tool>

# The tool does two requesets, the first sets CURLOPT_PORT to 1
# the second resets the port again and expects that request to work.
<command>
http://%HOSTIP:%HTTPPORT/1906
</command>
</client>

# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /1906 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test196.
1
2
3
4

5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
12




+







<testcase>
<info>
<keywords>
FTP
retry
</keywords>
</info>

# Server-side
<reply>
<servercmd>
REPLY PASS 430 temporarily not available
Changes to jni/curl/tests/data/test197.
1
2
3
4
5

6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
13





+







<testcase>
<info>
<keywords>
HTTP
HTTP GET
retry
</keywords>
</info>
#
# Server-side
<reply>
<data nocheck="yes">
HTTP/1.1 503 OK swsbounce
Changes to jni/curl/tests/data/test198.
1
2
3
4
5

6
7
8
9
10
11
12
1
2
3
4
5
6
7
8
9
10
11
12
13





+







<testcase>
<info>
<keywords>
HTTP
HTTP GET
retry
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 503 OK swsbounce
Changes to jni/curl/tests/data/test2100.

cannot compute difference between binary files

Added jni/curl/tests/data/test332.













































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
TFTP
TFTP RRQ
FAILURE
</keywords>
</info>

<reply>
<data>
a chunk of
data
returned
 to client
</data>
</reply>

#
# Client-side
<client>
<server>
tftp
</server>
 <name>
TFTP retrieve with blksize 400
 </name>
 <command>
tftp://%HOSTIP:%TFTPPORT//332 --tftp-blksize 400
</command>
</client>

#
# Verify pseudo protocol after the test has been "shot"
<verify>
<protocol>
opcode: 1
mode: octet
tsize: 0
blksize: 400
timeout: 6
filename: /332
</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test333.



































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
command-line
</keywords>
</info>

#
# Server-side
<reply>
</reply>

#
# Client-side
<client>
<server>
none
</server>
 <name>
Try a non-boolean command line option with --no-
 </name>
 <command>
--no-proxy "hey" http://%HOSTIP:%HTTPPORT/333
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
# detected the bad --no- prefix
<errorcode>
2
</errorcode>
</verify>
</testcase>
Deleted jni/curl/tests/data/test536.
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










































































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
<testcase>
<info>
<keywords>
HTTP
HTTP GET
pipelining
multi
</keywords>
</info>

<reply>
<data>
HTTP/1.1 404 Badness
Date: Thu, 09 Nov 2010 14:49:00 GMT
ETag: "21025-dc7-39462498"
Content-Length: 6
Content-Type: text/html
Funny-head: yesyes

hejsan
</data>
<data1>
HTTP/1.1 200 Fine
Date: Thu, 09 Nov 2010 14:49:00 GMT
Content-Length: 13
Connection: close
Content-Type: text/html

fine content
</data1>

<datacheck>
fine content
Finished!
</datacheck>

<servercmd>
pipe: 1
</servercmd>
</reply>

# Client-side
<client>
<server>
http
</server>
# tool is what to use instead of 'curl'
<tool>
lib536
</tool>

 <name>
HTTP GET multi two files with FAILONERROR and pipelining
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/536 http://%HOSTIP:%HTTPPORT/5360001
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
GET /536 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

GET /5360001 HTTP/1.1
Host: %HOSTIP:%HTTPPORT
Accept: */*

</protocol>
</verify>
</testcase>
Added jni/curl/tests/data/test660.


































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
IMAP
CONNECT_ONLY
</keywords>
</info>

# Client-side
<client>
<server>
imap
</server>
<tool>
lib597
</tool>
 <name>
IMAP CONNECT_ONLY option
 </name>

<command>
imap://%HOSTIP:%IMAPPORT/660
</command>

</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test702.
8
9
10
11
12
13
14




15
16
17
18
19
20
21
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25







+
+
+
+







FAILURE
</keywords>
</info>
# Server-side
<reply>
<data>
</data>
# 91 is socks4 failure
<servercmd>
response 91
</servercmd>
</reply>

# Client-side
<client>
<server>
socks4
</server>
Changes to jni/curl/tests/data/test703.
8
9
10
11
12
13
14




15
16
17
18
19
20
21
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25







+
+
+
+







FAILURE
</keywords>
</info>
# Server-side
<reply>
<data>
</data>
# 1 is socks5 failure
<servercmd>
response 1
</servercmd>
</reply>

# Client-side
<client>
<server>
socks5
</server>
Changes to jni/curl/tests/data/test709.
30
31
32
33
34
35
36
37

38
39
40
41
42
43
44
30
31
32
33
34
35
36

37
38
39
40
41
42
43
44







-
+







# Client-side
<client>
<server>
http
socks5
</server>
<setenv>
http_proxy=socks5://%HOSTIP:%SOCKSPORT 
http_proxy=socks5://%HOSTIP:%SOCKSPORT
</setenv>
 <name>
HTTP GET via SOCKS5 set in http_proxy environment variable
 </name>
 <command>
http://%HOSTIP:%HTTPPORT/709
</command>
Changes to jni/curl/tests/data/test711.
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
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







+
+










-
+







</info>
#
# Server-side
<reply>
<data>
silly content
</data>
<servercmd>
</servercmd>
</reply>

#
# Client-side
<client>
<server>
ftp
socks5
</server>
<setenv>
all_proxy=socks5://%HOSTIP:%SOCKSPORT 
all_proxy=socks5://%HOSTIP:%SOCKSPORT
</setenv>
 <name>
FTP fetch with all_proxy set to socks5
 </name>
 <command>
ftp://%HOSTIP:%FTPPORT/711
</command>
Added jni/curl/tests/data/test716.












































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
HTTP
SOCKS5
all_proxy
</keywords>
</info>
#
# Server-side
<reply>
# method 2 is SOCKS5 asking for user+password
<servercmd>
method 2
</servercmd>
</reply>

#
# Client-side
<client>
<server>
socks5
</server>
<features>
http
</features>
<name>
SOCKS5 proxy with too long user name
</name>

# it should never connect to the target server
 <command>
http://hohoho.example.com:99/716 -x socks5://AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA:b@%HOSTIP:%SOCKSPORT
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<errorcode>
43
</errorcode>
</verify>
</testcase>
Added jni/curl/tests/data/test717.

































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
<testcase>
<info>
<keywords>
HTTP
SOCKS5
all_proxy
</keywords>
</info>
#
# Server-side
<reply>
<data>
HTTP/1.1 200 OK
Date: Thu, 09 Nov 2010 14:49:00 GMT
Server: test-server/fake
Last-Modified: Tue, 13 Jun 2000 12:10:00 GMT
ETag: "21025-dc7-39462498"
Accept-Ranges: bytes
Content-Length: 6
Connection: close
Content-Type: text/html
Funny-head: yesyes

-foo-
</data>
# method 2 is SOCKS5 asking for user+password
<servercmd>
method 2
user uz3r
password p4ssworm
backendport %HTTPPORT
</servercmd>
</reply>

#
# Client-side
<client>
<server>
socks5
http
</server>
<name>
SOCKS5 proxy auth
</name>

# target a port that won't work without the SOCKS magic
 <command>
http://%HOSTIP:1/717 -x socks5://uz3r:p4ssworm@%HOSTIP:%SOCKSPORT
</command>
</client>

#
# Verify data after the test has been "shot"
<verify>
<strip>
^User-Agent:.*
</strip>
<protocol>
GET /717 HTTP/1.1
Host: %HOSTIP:1
Accept: */*

</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test819.
10
11
12
13
14
15
16
17

18
19
20
21
22
23
24
10
11
12
13
14
15
16

17
18
19
20
21
22
23
24







-
+








#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTHENTICATE +
REPLY dXNlcgB1c2VyAHNlY3JldA== A002 OK AUTHENTICATE completed
REPLY AHVzZXIAc2VjcmV0 A002 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

43
44
45
46
47
48
49
50

51
52
53
54
55
56
43
44
45
46
47
48
49

50
51
52
53
54
55
56







-
+







#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
A003 SELECT 819
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test825.
43
44
45
46
47
48
49
50

51
52
53
54
55
56
43
44
45
46
47
48
49

50
51
52
53
54
55
56







-
+






</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE PLAIN dXNlcgB1c2VyAHNlY3JldA==
A002 AUTHENTICATE PLAIN AHVzZXIAc2VjcmV0
A003 SELECT 825
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test833.
14
15
16
17
18
19
20
21

22
23
24
25
26
27
28
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28







-
+







# Server-side
<reply>
<servercmd>
AUTH CRAM-MD5 PLAIN
REPLY "AUTHENTICATE CRAM-MD5" + Rubbish
REPLY * A002 NO AUTH exchange cancelled by client
REPLY "AUTHENTICATE PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== A003 OK AUTHENTICATE completed
REPLY AHVzZXIAc2VjcmV0 A003 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

52
53
54
55
56
57
58
59

60
61
62
63
64
65
52
53
54
55
56
57
58

59
60
61
62
63
64
65







-
+






# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE CRAM-MD5
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
A004 SELECT 833
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test834.
14
15
16
17
18
19
20
21

22
23
24
25
26
27
28
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28







-
+







<reply>
<servercmd>
AUTH NTLM PLAIN
REPLY "AUTHENTICATE NTLM" +
REPLY TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= + Rubbish
REPLY * A002 NO AUTH exchange cancelled by client
REPLY "AUTHENTICATE PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== A003 OK AUTHENTICATE completed
REPLY AHVzZXIAc2VjcmV0 A003 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

63
64
65
66
67
68
69
70

71
72
73
74
75
76
63
64
65
66
67
68
69

70
71
72
73
74
75
76







-
+






<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
A004 SELECT 834
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test835.
14
15
16
17
18
19
20
21

22
23
24
25
26
27
28
14
15
16
17
18
19
20

21
22
23
24
25
26
27
28







-
+







# Server-side
<reply>
<servercmd>
AUTH DIGEST-MD5 PLAIN
REPLY "AUTHENTICATE DIGEST-MD5" + Rubbish
REPLY * A002 NO AUTH exchange cancelled by client
REPLY "AUTHENTICATE PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== A003 OK AUTHENTICATE completed
REPLY AHVzZXIAc2VjcmV0 A003 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

54
55
56
57
58
59
60
61

62
63
64
65
66
67
54
55
56
57
58
59
60

61
62
63
64
65
66
67







-
+






# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE DIGEST-MD5
*
A003 AUTHENTICATE PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
A004 SELECT 835
A005 FETCH 1 BODY[]
A006 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test842.
11
12
13
14
15
16
17
18

19
20
21
22
23
24
25
11
12
13
14
15
16
17

18
19
20
21
22
23
24
25







-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTHENTICATE +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== A002 OK AUTHENTICATE completed
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== A002 OK AUTHENTICATE completed
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

49
50
51
52
53
54
55
56

57
58
59
60
61
62
49
50
51
52
53
54
55

56
57
58
59
60
61
62







-
+







#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A003 SELECT 842
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test843.
49
50
51
52
53
54
55
56

57
58
59
60
61
62
49
50
51
52
53
54
55

56
57
58
59
60
61
62







-
+






</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A002 AUTHENTICATE OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A003 SELECT 843
A004 FETCH 1 BODY[]
A005 LOGOUT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test844.
11
12
13
14
15
16
17

18

19
20
21
22
23
24
25
11
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26







+
-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTHENTICATE +
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0=
REPLY AQ== A002 NO Authentication failed
</servercmd>
</reply>

#
# Client-side
<client>
48
49
50
51
52
53
54
55

56
57
58
59
49
50
51
52
53
54
55

56
57
58
59
60







-
+




</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "LOGOUT"
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test845.
48
49
50
51
52
53
54
55

56
57
58
59
48
49
50
51
52
53
54

55
56
57
58
59







-
+




67
</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "LOGOUT"
<protocol>
A001 CAPABILITY
A002 AUTHENTICATE OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
A002 AUTHENTICATE OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMwFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test865.
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26







-
+








#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTH +
REPLY dXNlcgB1c2VyAHNlY3JldA== +OK Login successful
REPLY AHVzZXIAc2VjcmV0 +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

45
46
47
48
49
50
51
52

53
54
55
56
57
45
46
47
48
49
50
51

52
53
54
55
56
57







-
+






#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
RETR 865
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test871.
44
45
46
47
48
49
50
51

52
53
54
55
56
44
45
46
47
48
49
50

51
52
53
54
55
56







-
+





</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH PLAIN dXNlcgB1c2VyAHNlY3JldA==
AUTH PLAIN AHVzZXIAc2VjcmV0
RETR 871
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test879.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







# Server-side
<reply>
<servercmd>
AUTH CRAM-MD5 PLAIN
REPLY "AUTH CRAM-MD5" + Rubbish
REPLY * -ERR AUTH exchange cancelled by client
REPLY "AUTH PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== +OK Login successful
REPLY AHVzZXIAc2VjcmV0 +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

54
55
56
57
58
59
60
61

62
63
64
65
66
54
55
56
57
58
59
60

61
62
63
64
65
66







-
+





# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH CRAM-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
RETR 879
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test880.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







<reply>
<servercmd>
AUTH NTLM PLAIN
REPLY "AUTH NTLM" +
REPLY TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= + Rubbish
REPLY * -ERR AUTH exchange cancelled by client
REPLY "AUTH PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== +OK Login successful
REPLY AHVzZXIAc2VjcmV0 +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

65
66
67
68
69
70
71
72

73
74
75
76
77
65
66
67
68
69
70
71

72
73
74
75
76
77







-
+





<verify>
<protocol>
CAPA
AUTH NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
RETR 880
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test881.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







# Server-side
<reply>
<servercmd>
AUTH DIGEST-MD5 PLAIN
REPLY "AUTH DIGEST-MD5" + Rubbish
REPLY * -ERR AUTH exchange cancelled by client
REPLY "AUTH PLAIN" +
REPLY dXNlcgB1c2VyAHNlY3JldA== +OK Login successful
REPLY AHVzZXIAc2VjcmV0 +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

56
57
58
59
60
61
62
63

64
65
66
67
68
56
57
58
59
60
61
62

63
64
65
66
67
68







-
+





# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH DIGEST-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
RETR 881
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test887.
13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
13
14
15
16
17
18
19

20
21
22
23
24
25
26
27







-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +OK Login successful
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== +OK Login successful
</servercmd>
<data>
From: me@somewhere
To: fake@nowhere

body

51
52
53
54
55
56
57
58

59
60
61
62
63
51
52
53
54
55
56
57

58
59
60
61
62
63







-
+






#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
RETR 887
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test888.
50
51
52
53
54
55
56
57

58
59
60
61
62
50
51
52
53
54
55
56

57
58
59
60
61
62







-
+





</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
CAPA
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
RETR 888
QUIT
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test889.
13
14
15
16
17
18
19
20

21
22
23
24
25
26
27
13
14
15
16
17
18
19

20
21
22
23
24
25
26
27







-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH +
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== + eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
REPLY AQ== -ERR Authentication failed
</servercmd>
</reply>

#
# Client-side
<client>
50
51
52
53
54
55
56
57

58
59
60
61
50
51
52
53
54
55
56

57
58
59
60
61







-
+




</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "QUIT"
<protocol>
CAPA
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test890.
49
50
51
52
53
54
55
56

57
58
59
60
49
50
51
52
53
54
55

56
57
58
59
60







-
+




67
</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "QUIT"
<protocol>
CAPA
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwMQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test903.
11
12
13
14
15
16
17
18

19
20
21
22
23
24
25
11
12
13
14
15
16
17

18
19
20
21
22
23
24
25







-
+








#
# Server-side
<reply>
<servercmd>
AUTH PLAIN
REPLY AUTH 334 PLAIN supported
REPLY dXNlcgB1c2VyAHNlY3JldA== 235 Authenticated
REPLY AHVzZXIAc2VjcmV0 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>
38
39
40
41
42
43
44
45

46
47
48
49
50
51
52
53
54
55
56
38
39
40
41
42
43
44

45
46
47
48
49
50
51
52
53
54
55
56







-
+












#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 903
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>
Changes to jni/curl/tests/data/test919.
37
38
39
40
41
42
43
44

45
46
47
48
49
50
51
37
38
39
40
41
42
43

44
45
46
47
48
49
50
51







-
+







</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 919
AUTH PLAIN dXNlcgB1c2VyAHNlY3JldA==
AUTH PLAIN AHVzZXIAc2VjcmV0
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
Changes to jni/curl/tests/data/test935.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







# Server-side
<reply>
<servercmd>
AUTH CRAM-MD5 PLAIN
REPLY "AUTH CRAM-MD5" 334 Rubbish
REPLY * 501 AUTH exchange cancelled by client
REPLY "AUTH PLAIN" 334 PLAIN supported
REPLY dXNlcgB1c2VyAHNlY3JldA== 235 Authenticated
REPLY AHVzZXIAc2VjcmV0 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>
47
48
49
50
51
52
53
54

55
56
57
58
59
60
61
62
63
64
65
47
48
49
50
51
52
53

54
55
56
57
58
59
60
61
62
63
64
65







-
+











# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 935
AUTH CRAM-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>
Changes to jni/curl/tests/data/test936.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







<reply>
<servercmd>
AUTH NTLM PLAIN
REPLY "AUTH NTLM" 334 NTLM supported
REPLY TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA= 334 Rubbish
REPLY * 501 AUTH exchange cancelled by client
REPLY "AUTH PLAIN" 334 PLAIN supported
REPLY dXNlcgB1c2VyAHNlY3JldA== 235 Authenticated
REPLY AHVzZXIAc2VjcmV0 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>
58
59
60
61
62
63
64
65

66
67
68
69
70
71
72
73
74
75
76
58
59
60
61
62
63
64

65
66
67
68
69
70
71
72
73
74
75
76







-
+











<verify>
<protocol>
EHLO 936
AUTH NTLM
TlRMTVNTUAABAAAABoIIAAAAAAAAAAAAAAAAAAAAAAA=
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>
Changes to jni/curl/tests/data/test937.
15
16
17
18
19
20
21
22

23
24
25
26
27
28
29
15
16
17
18
19
20
21

22
23
24
25
26
27
28
29







-
+







# Server-side
<reply>
<servercmd>
AUTH DIGEST-MD5 PLAIN
REPLY "AUTH DIGEST-MD5" 334 Rubbish
REPLY * 501 AUTH exchange cancelled by client
REPLY "AUTH PLAIN" 334 PLAIN supported
REPLY dXNlcgB1c2VyAHNlY3JldA== 235 Authenticated
REPLY AHVzZXIAc2VjcmV0 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>
49
50
51
52
53
54
55
56

57
58
59
60
61
62
63
64
65
66
67
49
50
51
52
53
54
55

56
57
58
59
60
61
62
63
64
65
66
67







-
+











# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 937
AUTH DIGEST-MD5
*
AUTH PLAIN
dXNlcgB1c2VyAHNlY3JldA==
AHVzZXIAc2VjcmV0
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>
Changes to jni/curl/tests/data/test946.
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26







-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH 334 OAUTHBEARER supported
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 235 Authenticated
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 235 Authenticated
</servercmd>
</reply>

#
# Client-side
<client>
<server>
44
45
46
47
48
49
50
51

52
53
54
55
56
57
58
59
60
61
62
44
45
46
47
48
49
50

51
52
53
54
55
56
57
58
59
60
61
62







-
+












#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 946
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
.
</upload>
</verify>
</testcase>
Changes to jni/curl/tests/data/test947.
43
44
45
46
47
48
49
50

51
52
53
54
55
56
57
43
44
45
46
47
48
49

50
51
52
53
54
55
56
57







-
+







</client>

#
# Verify data after the test has been "shot"
<verify>
<protocol>
EHLO 947
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
MAIL FROM:<sender@example.com>
RCPT TO:<recipient@example.com>
DATA
QUIT
</protocol>
<upload>
mail body
Changes to jni/curl/tests/data/test948.
12
13
14
15
16
17
18
19

20
21
22
23
24
25
26
12
13
14
15
16
17
18

19
20
21
22
23
24
25
26







-
+








#
# Server-side
<reply>
<servercmd>
AUTH OAUTHBEARER
REPLY AUTH 334 OAUTHBEARER supported
REPLY dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
REPLY bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ== 334 eyJzdGF0dXMiOiJpbnZhbGlkX3Rva2VuIiwic2NvcGUiOiJleGFtcGxlX3Njb3BlIiwib3BlbmlkLWNvbmZpZ3VyYXRpb24iOiJodHRwczovL2V4YW1wbGUuY29tLy53ZWxsLWtub3duL29wZW5pZC1jb25maWd1cmF0aW9uIn0
REPLY AQ== 535 Username and Password not accepted. Learn more at\r\n535 http://support.example.com/mail/oauth
</servercmd>
</reply>

#vi
# Client-side
<client>
52
53
54
55
56
57
58
59

60
61
62
63
52
53
54
55
56
57
58

59
60
61
62
63







-
+




</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "QUIT"
<protocol>
EHLO 948
AUTH OAUTHBEARER
dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/data/test949.
51
52
53
54
55
56
57
58

59
60
61
62
51
52
53
54
55
56
57

58
59
60
61
62







-
+




67
</errorcode>
#
# The multi interface considers a broken "CONNECT" as a prematurely broken
# transfer and such a connection will not get a "QUIT"
<protocol>
EHLO 949
AUTH OAUTHBEARER dXNlcj11c2VyAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AUTH OAUTHBEARER bixhPXVzZXIsAWhvc3Q9MTI3LjAuMC4xAXBvcnQ9OTAwNQFhdXRoPUJlYXJlciBtRl85LkI1Zi00LjFKcU0BAQ==
AQ==
</protocol>
</verify>
</testcase>
Changes to jni/curl/tests/getpart.pm.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
Changes to jni/curl/tests/libtest/Makefile.in.
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
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







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+

-
+







	lib509$(EXEEXT) lib510$(EXEEXT) lib511$(EXEEXT) \
	lib512$(EXEEXT) lib513$(EXEEXT) lib514$(EXEEXT) \
	lib515$(EXEEXT) lib516$(EXEEXT) lib517$(EXEEXT) \
	lib518$(EXEEXT) lib519$(EXEEXT) lib520$(EXEEXT) \
	lib521$(EXEEXT) lib523$(EXEEXT) lib524$(EXEEXT) \
	lib525$(EXEEXT) lib526$(EXEEXT) lib527$(EXEEXT) \
	lib529$(EXEEXT) lib530$(EXEEXT) lib532$(EXEEXT) \
	lib533$(EXEEXT) lib536$(EXEEXT) lib537$(EXEEXT) \
	lib539$(EXEEXT) lib540$(EXEEXT) lib541$(EXEEXT) \
	lib542$(EXEEXT) lib543$(EXEEXT) lib544$(EXEEXT) \
	lib545$(EXEEXT) lib547$(EXEEXT) lib548$(EXEEXT) \
	lib549$(EXEEXT) lib552$(EXEEXT) lib553$(EXEEXT) \
	lib554$(EXEEXT) lib555$(EXEEXT) lib556$(EXEEXT) \
	lib557$(EXEEXT) lib558$(EXEEXT) lib559$(EXEEXT) \
	lib560$(EXEEXT) lib562$(EXEEXT) lib564$(EXEEXT) \
	lib565$(EXEEXT) lib566$(EXEEXT) lib567$(EXEEXT) \
	lib568$(EXEEXT) lib569$(EXEEXT) lib570$(EXEEXT) \
	lib571$(EXEEXT) lib572$(EXEEXT) lib573$(EXEEXT) \
	lib574$(EXEEXT) lib575$(EXEEXT) lib576$(EXEEXT) \
	lib578$(EXEEXT) lib579$(EXEEXT) lib582$(EXEEXT) \
	lib583$(EXEEXT) lib585$(EXEEXT) lib586$(EXEEXT) \
	lib587$(EXEEXT) lib589$(EXEEXT) lib590$(EXEEXT) \
	lib591$(EXEEXT) lib597$(EXEEXT) lib598$(EXEEXT) \
	lib599$(EXEEXT) lib643$(EXEEXT) lib644$(EXEEXT) \
	lib645$(EXEEXT) lib650$(EXEEXT) lib651$(EXEEXT) \
	lib652$(EXEEXT) lib653$(EXEEXT) lib654$(EXEEXT) \
	lib655$(EXEEXT) lib658$(EXEEXT) lib659$(EXEEXT) \
	lib1156$(EXEEXT) lib1500$(EXEEXT) lib1501$(EXEEXT) \
	lib1502$(EXEEXT) lib1503$(EXEEXT) lib1504$(EXEEXT) \
	lib1505$(EXEEXT) lib1506$(EXEEXT) lib1507$(EXEEXT) \
	lib1508$(EXEEXT) lib1509$(EXEEXT) lib1510$(EXEEXT) \
	lib1511$(EXEEXT) lib1512$(EXEEXT) lib1513$(EXEEXT) \
	lib1514$(EXEEXT) lib1515$(EXEEXT) lib1517$(EXEEXT) \
	lib1518$(EXEEXT) lib1520$(EXEEXT) lib1521$(EXEEXT) \
	lib1522$(EXEEXT) lib1525$(EXEEXT) lib1526$(EXEEXT) \
	lib1527$(EXEEXT) lib1528$(EXEEXT) lib1529$(EXEEXT) \
	lib1530$(EXEEXT) lib1531$(EXEEXT) lib1532$(EXEEXT) \
	lib1533$(EXEEXT) lib1534$(EXEEXT) lib1535$(EXEEXT) \
	lib1536$(EXEEXT) lib1537$(EXEEXT) lib1538$(EXEEXT) \
	lib1540$(EXEEXT) lib1541$(EXEEXT) lib1550$(EXEEXT) \
	lib1551$(EXEEXT) lib1552$(EXEEXT) lib1553$(EXEEXT) \
	lib1554$(EXEEXT) lib1555$(EXEEXT) lib1556$(EXEEXT) \
	lib1557$(EXEEXT) lib1558$(EXEEXT) lib1560$(EXEEXT) \
	lib533$(EXEEXT) lib537$(EXEEXT) lib539$(EXEEXT) \
	lib540$(EXEEXT) lib541$(EXEEXT) lib542$(EXEEXT) \
	lib543$(EXEEXT) lib544$(EXEEXT) lib545$(EXEEXT) \
	lib547$(EXEEXT) lib548$(EXEEXT) lib549$(EXEEXT) \
	lib552$(EXEEXT) lib553$(EXEEXT) lib554$(EXEEXT) \
	lib555$(EXEEXT) lib556$(EXEEXT) lib557$(EXEEXT) \
	lib558$(EXEEXT) lib559$(EXEEXT) lib560$(EXEEXT) \
	lib562$(EXEEXT) lib564$(EXEEXT) lib565$(EXEEXT) \
	lib566$(EXEEXT) lib567$(EXEEXT) lib568$(EXEEXT) \
	lib569$(EXEEXT) lib570$(EXEEXT) lib571$(EXEEXT) \
	lib572$(EXEEXT) lib573$(EXEEXT) lib574$(EXEEXT) \
	lib575$(EXEEXT) lib576$(EXEEXT) lib578$(EXEEXT) \
	lib579$(EXEEXT) lib582$(EXEEXT) lib583$(EXEEXT) \
	lib585$(EXEEXT) lib586$(EXEEXT) lib587$(EXEEXT) \
	lib589$(EXEEXT) lib590$(EXEEXT) lib591$(EXEEXT) \
	lib597$(EXEEXT) lib598$(EXEEXT) lib599$(EXEEXT) \
	lib643$(EXEEXT) lib644$(EXEEXT) lib645$(EXEEXT) \
	lib650$(EXEEXT) lib651$(EXEEXT) lib652$(EXEEXT) \
	lib653$(EXEEXT) lib654$(EXEEXT) lib655$(EXEEXT) \
	lib658$(EXEEXT) lib659$(EXEEXT) lib1156$(EXEEXT) \
	lib1500$(EXEEXT) lib1501$(EXEEXT) lib1502$(EXEEXT) \
	lib1503$(EXEEXT) lib1504$(EXEEXT) lib1505$(EXEEXT) \
	lib1506$(EXEEXT) lib1507$(EXEEXT) lib1508$(EXEEXT) \
	lib1509$(EXEEXT) lib1510$(EXEEXT) lib1511$(EXEEXT) \
	lib1512$(EXEEXT) lib1513$(EXEEXT) lib1514$(EXEEXT) \
	lib1515$(EXEEXT) lib1517$(EXEEXT) lib1518$(EXEEXT) \
	lib1520$(EXEEXT) lib1521$(EXEEXT) lib1522$(EXEEXT) \
	lib1525$(EXEEXT) lib1526$(EXEEXT) lib1527$(EXEEXT) \
	lib1528$(EXEEXT) lib1529$(EXEEXT) lib1530$(EXEEXT) \
	lib1531$(EXEEXT) lib1532$(EXEEXT) lib1533$(EXEEXT) \
	lib1534$(EXEEXT) lib1535$(EXEEXT) lib1536$(EXEEXT) \
	lib1537$(EXEEXT) lib1538$(EXEEXT) lib1540$(EXEEXT) \
	lib1541$(EXEEXT) lib1550$(EXEEXT) lib1551$(EXEEXT) \
	lib1552$(EXEEXT) lib1553$(EXEEXT) lib1554$(EXEEXT) \
	lib1555$(EXEEXT) lib1556$(EXEEXT) lib1557$(EXEEXT) \
	lib1558$(EXEEXT) lib1559$(EXEEXT) lib1560$(EXEEXT) \
	lib1591$(EXEEXT) lib1592$(EXEEXT) lib1900$(EXEEXT) \
	lib1905$(EXEEXT) lib2033$(EXEEXT)
	lib1905$(EXEEXT) lib1906$(EXEEXT) lib2033$(EXEEXT)
@USE_CPPFLAG_CURL_STATICLIB_TRUE@am__append_1 = -DCURL_STATICLIB
@CURL_LT_SHLIB_USE_NO_UNDEFINED_TRUE@am__append_2 = -no-undefined
@CURL_LT_SHLIB_USE_MIMPURE_TEXT_TRUE@am__append_3 = -mimpure-text
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_4 = -DCURL_HIDDEN_SYMBOLS
@DOING_CURL_SYMBOL_HIDING_TRUE@am__append_5 = $(CFLAG_CURL_SYMBOL_HIDING)

# Build a stub gssapi implementation for testing
517
518
519
520
521
522
523




524
525
526
527
528
529
530
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534







+
+
+
+







am__objects_120 = first.$(OBJEXT)
am__objects_121 = testutil.$(OBJEXT)
am__objects_122 = ../../lib/warnless.$(OBJEXT)
am_lib1558_OBJECTS = lib1558.$(OBJEXT) $(am__objects_120) \
	$(am__objects_121) $(am__objects_122)
lib1558_OBJECTS = $(am_lib1558_OBJECTS)
lib1558_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_lib1559_OBJECTS = lib1559.$(OBJEXT) $(am__objects_120) \
	$(am__objects_121) $(am__objects_122)
lib1559_OBJECTS = $(am_lib1559_OBJECTS)
lib1559_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_lib1560_OBJECTS = lib1560.$(OBJEXT) $(am__objects_120) \
	$(am__objects_121) $(am__objects_122)
lib1560_OBJECTS = $(am_lib1560_OBJECTS)
lib1560_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_123 = lib1591-first.$(OBJEXT)
am__objects_124 = lib1591-testutil.$(OBJEXT)
am__objects_125 = ../../lib/lib1591-warnless.$(OBJEXT)
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
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







-
-
-
+
+
+
+
+
+
+
+
+
+

-
+


-
-
-
-
-
+
+
+
+
+


-
-
+
+



-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
+
+



-
-
+
+



-
-
-
-
-
+
+
+
+
+


-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
-
-
+
+
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
+
+



-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
+
+
+
+
+


-
-
-
-
-
-
-







am__objects_132 = lib1905-first.$(OBJEXT)
am__objects_133 = lib1905-testutil.$(OBJEXT)
am__objects_134 = ../../lib/lib1905-warnless.$(OBJEXT)
am_lib1905_OBJECTS = lib1905-lib1905.$(OBJEXT) $(am__objects_132) \
	$(am__objects_133) $(am__objects_134)
lib1905_OBJECTS = $(am_lib1905_OBJECTS)
lib1905_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_135 = lib2033-first.$(OBJEXT)
am__objects_136 = lib2033-testutil.$(OBJEXT)
am__objects_137 = ../../lib/lib2033-warnless.$(OBJEXT)
am__objects_135 = lib1906-first.$(OBJEXT)
am__objects_136 = lib1906-testutil.$(OBJEXT)
am__objects_137 = ../../lib/lib1906-warnless.$(OBJEXT)
am_lib1906_OBJECTS = lib1906-lib1906.$(OBJEXT) $(am__objects_135) \
	$(am__objects_136) $(am__objects_137)
lib1906_OBJECTS = $(am_lib1906_OBJECTS)
lib1906_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_138 = lib2033-first.$(OBJEXT)
am__objects_139 = lib2033-testutil.$(OBJEXT)
am__objects_140 = ../../lib/lib2033-warnless.$(OBJEXT)
am_lib2033_OBJECTS = lib2033-libntlmconnect.$(OBJEXT) \
	$(am__objects_135) $(am__objects_136) $(am__objects_137)
	$(am__objects_138) $(am__objects_139) $(am__objects_140)
lib2033_OBJECTS = $(am_lib2033_OBJECTS)
lib2033_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_138 = lib500-first.$(OBJEXT)
am__objects_139 = lib500-testutil.$(OBJEXT)
am__objects_140 = lib500-testtrace.$(OBJEXT)
am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_138) \
	$(am__objects_139) $(am__objects_140)
am__objects_141 = lib500-first.$(OBJEXT)
am__objects_142 = lib500-testutil.$(OBJEXT)
am__objects_143 = lib500-testtrace.$(OBJEXT)
am_lib500_OBJECTS = lib500-lib500.$(OBJEXT) $(am__objects_141) \
	$(am__objects_142) $(am__objects_143)
lib500_OBJECTS = $(am_lib500_OBJECTS)
lib500_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_141 = lib501-first.$(OBJEXT)
am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_141)
am__objects_144 = lib501-first.$(OBJEXT)
am_lib501_OBJECTS = lib501-lib501.$(OBJEXT) $(am__objects_144)
lib501_OBJECTS = $(am_lib501_OBJECTS)
lib501_LDADD = $(LDADD)
lib501_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_142 = lib502-first.$(OBJEXT)
am__objects_143 = lib502-testutil.$(OBJEXT)
am__objects_144 = ../../lib/lib502-warnless.$(OBJEXT)
am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_142) \
	$(am__objects_143) $(am__objects_144)
am__objects_145 = lib502-first.$(OBJEXT)
am__objects_146 = lib502-testutil.$(OBJEXT)
am__objects_147 = ../../lib/lib502-warnless.$(OBJEXT)
am_lib502_OBJECTS = lib502-lib502.$(OBJEXT) $(am__objects_145) \
	$(am__objects_146) $(am__objects_147)
lib502_OBJECTS = $(am_lib502_OBJECTS)
lib502_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_145 = lib503-first.$(OBJEXT)
am__objects_146 = lib503-testutil.$(OBJEXT)
am__objects_147 = ../../lib/lib503-warnless.$(OBJEXT)
am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_145) \
	$(am__objects_146) $(am__objects_147)
am__objects_148 = lib503-first.$(OBJEXT)
am__objects_149 = lib503-testutil.$(OBJEXT)
am__objects_150 = ../../lib/lib503-warnless.$(OBJEXT)
am_lib503_OBJECTS = lib503-lib503.$(OBJEXT) $(am__objects_148) \
	$(am__objects_149) $(am__objects_150)
lib503_OBJECTS = $(am_lib503_OBJECTS)
lib503_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_148 = lib504-first.$(OBJEXT)
am__objects_149 = lib504-testutil.$(OBJEXT)
am__objects_150 = ../../lib/lib504-warnless.$(OBJEXT)
am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_148) \
	$(am__objects_149) $(am__objects_150)
am__objects_151 = lib504-first.$(OBJEXT)
am__objects_152 = lib504-testutil.$(OBJEXT)
am__objects_153 = ../../lib/lib504-warnless.$(OBJEXT)
am_lib504_OBJECTS = lib504-lib504.$(OBJEXT) $(am__objects_151) \
	$(am__objects_152) $(am__objects_153)
lib504_OBJECTS = $(am_lib504_OBJECTS)
lib504_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_151 = lib505-first.$(OBJEXT)
am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_151)
am__objects_154 = lib505-first.$(OBJEXT)
am_lib505_OBJECTS = lib505-lib505.$(OBJEXT) $(am__objects_154)
lib505_OBJECTS = $(am_lib505_OBJECTS)
lib505_LDADD = $(LDADD)
lib505_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_152 = lib506-first.$(OBJEXT)
am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_152)
am__objects_155 = lib506-first.$(OBJEXT)
am_lib506_OBJECTS = lib506-lib506.$(OBJEXT) $(am__objects_155)
lib506_OBJECTS = $(am_lib506_OBJECTS)
lib506_LDADD = $(LDADD)
lib506_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_153 = lib507-first.$(OBJEXT)
am__objects_154 = lib507-testutil.$(OBJEXT)
am__objects_155 = ../../lib/lib507-warnless.$(OBJEXT)
am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_153) \
	$(am__objects_154) $(am__objects_155)
am__objects_156 = lib507-first.$(OBJEXT)
am__objects_157 = lib507-testutil.$(OBJEXT)
am__objects_158 = ../../lib/lib507-warnless.$(OBJEXT)
am_lib507_OBJECTS = lib507-lib507.$(OBJEXT) $(am__objects_156) \
	$(am__objects_157) $(am__objects_158)
lib507_OBJECTS = $(am_lib507_OBJECTS)
lib507_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_156 = lib508-first.$(OBJEXT)
am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_156)
am__objects_159 = lib508-first.$(OBJEXT)
am_lib508_OBJECTS = lib508-lib508.$(OBJEXT) $(am__objects_159)
lib508_OBJECTS = $(am_lib508_OBJECTS)
lib508_LDADD = $(LDADD)
lib508_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_157 = lib509-first.$(OBJEXT)
am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_157)
am__objects_160 = lib509-first.$(OBJEXT)
am_lib509_OBJECTS = lib509-lib509.$(OBJEXT) $(am__objects_160)
lib509_OBJECTS = $(am_lib509_OBJECTS)
lib509_LDADD = $(LDADD)
lib509_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_158 = lib510-first.$(OBJEXT)
am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_158)
am__objects_161 = lib510-first.$(OBJEXT)
am_lib510_OBJECTS = lib510-lib510.$(OBJEXT) $(am__objects_161)
lib510_OBJECTS = $(am_lib510_OBJECTS)
lib510_LDADD = $(LDADD)
lib510_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_159 = lib511-first.$(OBJEXT)
am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_159)
am__objects_162 = lib511-first.$(OBJEXT)
am_lib511_OBJECTS = lib511-lib511.$(OBJEXT) $(am__objects_162)
lib511_OBJECTS = $(am_lib511_OBJECTS)
lib511_LDADD = $(LDADD)
lib511_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_160 = lib512-first.$(OBJEXT)
am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_160)
am__objects_163 = lib512-first.$(OBJEXT)
am_lib512_OBJECTS = lib512-lib512.$(OBJEXT) $(am__objects_163)
lib512_OBJECTS = $(am_lib512_OBJECTS)
lib512_LDADD = $(LDADD)
lib512_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_161 = lib513-first.$(OBJEXT)
am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_161)
am__objects_164 = lib513-first.$(OBJEXT)
am_lib513_OBJECTS = lib513-lib513.$(OBJEXT) $(am__objects_164)
lib513_OBJECTS = $(am_lib513_OBJECTS)
lib513_LDADD = $(LDADD)
lib513_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_162 = lib514-first.$(OBJEXT)
am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_162)
am__objects_165 = lib514-first.$(OBJEXT)
am_lib514_OBJECTS = lib514-lib514.$(OBJEXT) $(am__objects_165)
lib514_OBJECTS = $(am_lib514_OBJECTS)
lib514_LDADD = $(LDADD)
lib514_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_163 = lib515-first.$(OBJEXT)
am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_163)
am__objects_166 = lib515-first.$(OBJEXT)
am_lib515_OBJECTS = lib515-lib515.$(OBJEXT) $(am__objects_166)
lib515_OBJECTS = $(am_lib515_OBJECTS)
lib515_LDADD = $(LDADD)
lib515_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_164 = lib516-first.$(OBJEXT)
am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_164)
am__objects_167 = lib516-first.$(OBJEXT)
am_lib516_OBJECTS = lib516-lib516.$(OBJEXT) $(am__objects_167)
lib516_OBJECTS = $(am_lib516_OBJECTS)
lib516_LDADD = $(LDADD)
lib516_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_165 = lib517-first.$(OBJEXT)
am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_165)
am__objects_168 = lib517-first.$(OBJEXT)
am_lib517_OBJECTS = lib517-lib517.$(OBJEXT) $(am__objects_168)
lib517_OBJECTS = $(am_lib517_OBJECTS)
lib517_LDADD = $(LDADD)
lib517_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_166 = lib518-first.$(OBJEXT)
am__objects_167 = ../../lib/lib518-warnless.$(OBJEXT)
am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_166) \
	$(am__objects_167)
am__objects_169 = lib518-first.$(OBJEXT)
am__objects_170 = ../../lib/lib518-warnless.$(OBJEXT)
am_lib518_OBJECTS = lib518-lib518.$(OBJEXT) $(am__objects_169) \
	$(am__objects_170)
lib518_OBJECTS = $(am_lib518_OBJECTS)
lib518_LDADD = $(LDADD)
lib518_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_168 = lib519-first.$(OBJEXT)
am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_168)
am__objects_171 = lib519-first.$(OBJEXT)
am_lib519_OBJECTS = lib519-lib519.$(OBJEXT) $(am__objects_171)
lib519_OBJECTS = $(am_lib519_OBJECTS)
lib519_LDADD = $(LDADD)
lib519_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_169 = lib520-first.$(OBJEXT)
am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_169)
am__objects_172 = lib520-first.$(OBJEXT)
am_lib520_OBJECTS = lib520-lib520.$(OBJEXT) $(am__objects_172)
lib520_OBJECTS = $(am_lib520_OBJECTS)
lib520_LDADD = $(LDADD)
lib520_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_170 = lib521-first.$(OBJEXT)
am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_170)
am__objects_173 = lib521-first.$(OBJEXT)
am_lib521_OBJECTS = lib521-lib521.$(OBJEXT) $(am__objects_173)
lib521_OBJECTS = $(am_lib521_OBJECTS)
lib521_LDADD = $(LDADD)
lib521_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_171 = lib523-first.$(OBJEXT)
am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_171)
am__objects_174 = lib523-first.$(OBJEXT)
am_lib523_OBJECTS = lib523-lib523.$(OBJEXT) $(am__objects_174)
lib523_OBJECTS = $(am_lib523_OBJECTS)
lib523_LDADD = $(LDADD)
lib523_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_172 = lib524-first.$(OBJEXT)
am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_172)
am__objects_175 = lib524-first.$(OBJEXT)
am_lib524_OBJECTS = lib524-lib524.$(OBJEXT) $(am__objects_175)
lib524_OBJECTS = $(am_lib524_OBJECTS)
lib524_LDADD = $(LDADD)
lib524_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_173 = lib525-first.$(OBJEXT)
am__objects_174 = lib525-testutil.$(OBJEXT)
am__objects_175 = ../../lib/lib525-warnless.$(OBJEXT)
am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_173) \
	$(am__objects_174) $(am__objects_175)
am__objects_176 = lib525-first.$(OBJEXT)
am__objects_177 = lib525-testutil.$(OBJEXT)
am__objects_178 = ../../lib/lib525-warnless.$(OBJEXT)
am_lib525_OBJECTS = lib525-lib525.$(OBJEXT) $(am__objects_176) \
	$(am__objects_177) $(am__objects_178)
lib525_OBJECTS = $(am_lib525_OBJECTS)
lib525_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_176 = lib526-first.$(OBJEXT)
am__objects_177 = lib526-testutil.$(OBJEXT)
am__objects_178 = ../../lib/lib526-warnless.$(OBJEXT)
am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_176) \
	$(am__objects_177) $(am__objects_178)
am__objects_179 = lib526-first.$(OBJEXT)
am__objects_180 = lib526-testutil.$(OBJEXT)
am__objects_181 = ../../lib/lib526-warnless.$(OBJEXT)
am_lib526_OBJECTS = lib526-lib526.$(OBJEXT) $(am__objects_179) \
	$(am__objects_180) $(am__objects_181)
lib526_OBJECTS = $(am_lib526_OBJECTS)
lib526_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_179 = lib527-first.$(OBJEXT)
am__objects_180 = lib527-testutil.$(OBJEXT)
am__objects_181 = ../../lib/lib527-warnless.$(OBJEXT)
am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_179) \
	$(am__objects_180) $(am__objects_181)
am__objects_182 = lib527-first.$(OBJEXT)
am__objects_183 = lib527-testutil.$(OBJEXT)
am__objects_184 = ../../lib/lib527-warnless.$(OBJEXT)
am_lib527_OBJECTS = lib527-lib526.$(OBJEXT) $(am__objects_182) \
	$(am__objects_183) $(am__objects_184)
lib527_OBJECTS = $(am_lib527_OBJECTS)
lib527_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_182 = lib529-first.$(OBJEXT)
am__objects_183 = lib529-testutil.$(OBJEXT)
am__objects_184 = ../../lib/lib529-warnless.$(OBJEXT)
am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_182) \
	$(am__objects_183) $(am__objects_184)
am__objects_185 = lib529-first.$(OBJEXT)
am__objects_186 = lib529-testutil.$(OBJEXT)
am__objects_187 = ../../lib/lib529-warnless.$(OBJEXT)
am_lib529_OBJECTS = lib529-lib525.$(OBJEXT) $(am__objects_185) \
	$(am__objects_186) $(am__objects_187)
lib529_OBJECTS = $(am_lib529_OBJECTS)
lib529_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_185 = lib530-first.$(OBJEXT)
am__objects_186 = lib530-testutil.$(OBJEXT)
am__objects_187 = ../../lib/lib530-warnless.$(OBJEXT)
am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_185) \
	$(am__objects_186) $(am__objects_187)
am__objects_188 = lib530-first.$(OBJEXT)
am__objects_189 = lib530-testutil.$(OBJEXT)
am__objects_190 = ../../lib/lib530-warnless.$(OBJEXT)
am_lib530_OBJECTS = lib530-lib530.$(OBJEXT) $(am__objects_188) \
	$(am__objects_189) $(am__objects_190)
lib530_OBJECTS = $(am_lib530_OBJECTS)
lib530_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_188 = lib532-first.$(OBJEXT)
am__objects_189 = lib532-testutil.$(OBJEXT)
am__objects_190 = ../../lib/lib532-warnless.$(OBJEXT)
am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_188) \
	$(am__objects_189) $(am__objects_190)
am__objects_191 = lib532-first.$(OBJEXT)
am__objects_192 = lib532-testutil.$(OBJEXT)
am__objects_193 = ../../lib/lib532-warnless.$(OBJEXT)
am_lib532_OBJECTS = lib532-lib526.$(OBJEXT) $(am__objects_191) \
	$(am__objects_192) $(am__objects_193)
lib532_OBJECTS = $(am_lib532_OBJECTS)
lib532_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_191 = lib533-first.$(OBJEXT)
am__objects_192 = lib533-testutil.$(OBJEXT)
am__objects_193 = ../../lib/lib533-warnless.$(OBJEXT)
am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_191) \
	$(am__objects_192) $(am__objects_193)
am__objects_194 = lib533-first.$(OBJEXT)
am__objects_195 = lib533-testutil.$(OBJEXT)
am__objects_196 = ../../lib/lib533-warnless.$(OBJEXT)
am_lib533_OBJECTS = lib533-lib533.$(OBJEXT) $(am__objects_194) \
	$(am__objects_195) $(am__objects_196)
lib533_OBJECTS = $(am_lib533_OBJECTS)
lib533_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_194 = lib536-first.$(OBJEXT)
am__objects_195 = lib536-testutil.$(OBJEXT)
am__objects_196 = ../../lib/lib536-warnless.$(OBJEXT)
am_lib536_OBJECTS = lib536-lib536.$(OBJEXT) $(am__objects_194) \
	$(am__objects_195) $(am__objects_196)
lib536_OBJECTS = $(am_lib536_OBJECTS)
lib536_DEPENDENCIES = $(am__DEPENDENCIES_1)
am__objects_197 = lib537-first.$(OBJEXT)
am__objects_198 = ../../lib/lib537-warnless.$(OBJEXT)
am_lib537_OBJECTS = lib537-lib537.$(OBJEXT) $(am__objects_197) \
	$(am__objects_198)
lib537_OBJECTS = $(am_lib537_OBJECTS)
lib537_LDADD = $(LDADD)
lib537_DEPENDENCIES = $(am__DEPENDENCIES_1)
1138
1139
1140
1141
1142
1143
1144

1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162

1163
1164
1165
1166
1167
1168
1169







+













-







	../../lib/$(DEPDIR)/lib1555-warnless.Po \
	../../lib/$(DEPDIR)/lib1556-warnless.Po \
	../../lib/$(DEPDIR)/lib1557-warnless.Po \
	../../lib/$(DEPDIR)/lib1591-warnless.Po \
	../../lib/$(DEPDIR)/lib1592-warnless.Po \
	../../lib/$(DEPDIR)/lib1900-warnless.Po \
	../../lib/$(DEPDIR)/lib1905-warnless.Po \
	../../lib/$(DEPDIR)/lib1906-warnless.Po \
	../../lib/$(DEPDIR)/lib2033-warnless.Po \
	../../lib/$(DEPDIR)/lib502-warnless.Po \
	../../lib/$(DEPDIR)/lib503-warnless.Po \
	../../lib/$(DEPDIR)/lib504-warnless.Po \
	../../lib/$(DEPDIR)/lib507-warnless.Po \
	../../lib/$(DEPDIR)/lib518-warnless.Po \
	../../lib/$(DEPDIR)/lib525-warnless.Po \
	../../lib/$(DEPDIR)/lib526-warnless.Po \
	../../lib/$(DEPDIR)/lib527-warnless.Po \
	../../lib/$(DEPDIR)/lib529-warnless.Po \
	../../lib/$(DEPDIR)/lib530-warnless.Po \
	../../lib/$(DEPDIR)/lib532-warnless.Po \
	../../lib/$(DEPDIR)/lib533-warnless.Po \
	../../lib/$(DEPDIR)/lib536-warnless.Po \
	../../lib/$(DEPDIR)/lib537-warnless.Po \
	../../lib/$(DEPDIR)/lib540-warnless.Po \
	../../lib/$(DEPDIR)/lib552-warnless.Po \
	../../lib/$(DEPDIR)/lib555-warnless.Po \
	../../lib/$(DEPDIR)/lib556-warnless.Po \
	../../lib/$(DEPDIR)/lib560-warnless.Po \
	../../lib/$(DEPDIR)/lib564-warnless.Po \
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249









1250
1251
1252
1253
1254
1255
1256
1240
1241
1242
1243
1244
1245
1246







1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262







-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+







	./$(DEPDIR)/lib1553-first.Po ./$(DEPDIR)/lib1553-lib1553.Po \
	./$(DEPDIR)/lib1553-testutil.Po ./$(DEPDIR)/lib1554-first.Po \
	./$(DEPDIR)/lib1554-lib1554.Po ./$(DEPDIR)/lib1555-first.Po \
	./$(DEPDIR)/lib1555-lib1555.Po ./$(DEPDIR)/lib1555-testutil.Po \
	./$(DEPDIR)/lib1556-first.Po ./$(DEPDIR)/lib1556-lib1556.Po \
	./$(DEPDIR)/lib1556-testutil.Po ./$(DEPDIR)/lib1557-first.Po \
	./$(DEPDIR)/lib1557-lib1557.Po ./$(DEPDIR)/lib1557-testutil.Po \
	./$(DEPDIR)/lib1558.Po ./$(DEPDIR)/lib1560.Po \
	./$(DEPDIR)/lib1591-first.Po ./$(DEPDIR)/lib1591-lib1591.Po \
	./$(DEPDIR)/lib1591-testutil.Po ./$(DEPDIR)/lib1592-first.Po \
	./$(DEPDIR)/lib1592-lib1592.Po ./$(DEPDIR)/lib1592-testutil.Po \
	./$(DEPDIR)/lib1900-first.Po ./$(DEPDIR)/lib1900-lib1900.Po \
	./$(DEPDIR)/lib1900-testutil.Po ./$(DEPDIR)/lib1905-first.Po \
	./$(DEPDIR)/lib1905-lib1905.Po ./$(DEPDIR)/lib1905-testutil.Po \
	./$(DEPDIR)/lib1558.Po ./$(DEPDIR)/lib1559.Po \
	./$(DEPDIR)/lib1560.Po ./$(DEPDIR)/lib1591-first.Po \
	./$(DEPDIR)/lib1591-lib1591.Po ./$(DEPDIR)/lib1591-testutil.Po \
	./$(DEPDIR)/lib1592-first.Po ./$(DEPDIR)/lib1592-lib1592.Po \
	./$(DEPDIR)/lib1592-testutil.Po ./$(DEPDIR)/lib1900-first.Po \
	./$(DEPDIR)/lib1900-lib1900.Po ./$(DEPDIR)/lib1900-testutil.Po \
	./$(DEPDIR)/lib1905-first.Po ./$(DEPDIR)/lib1905-lib1905.Po \
	./$(DEPDIR)/lib1905-testutil.Po ./$(DEPDIR)/lib1906-first.Po \
	./$(DEPDIR)/lib1906-lib1906.Po ./$(DEPDIR)/lib1906-testutil.Po \
	./$(DEPDIR)/lib2033-first.Po \
	./$(DEPDIR)/lib2033-libntlmconnect.Po \
	./$(DEPDIR)/lib2033-testutil.Po ./$(DEPDIR)/lib500-first.Po \
	./$(DEPDIR)/lib500-lib500.Po ./$(DEPDIR)/lib500-testtrace.Po \
	./$(DEPDIR)/lib500-testutil.Po ./$(DEPDIR)/lib501-first.Po \
	./$(DEPDIR)/lib501-lib501.Po ./$(DEPDIR)/lib502-first.Po \
	./$(DEPDIR)/lib502-lib502.Po ./$(DEPDIR)/lib502-testutil.Po \
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
































































1355
1356

1357
1358
1359
1360
1361
1362
1363
1289
1290
1291
1292
1293
1294
1295

































































1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359


1360
1361
1362
1363
1364
1365
1366
1367







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+







	./$(DEPDIR)/lib527-lib526.Po ./$(DEPDIR)/lib527-testutil.Po \
	./$(DEPDIR)/lib529-first.Po ./$(DEPDIR)/lib529-lib525.Po \
	./$(DEPDIR)/lib529-testutil.Po ./$(DEPDIR)/lib530-first.Po \
	./$(DEPDIR)/lib530-lib530.Po ./$(DEPDIR)/lib530-testutil.Po \
	./$(DEPDIR)/lib532-first.Po ./$(DEPDIR)/lib532-lib526.Po \
	./$(DEPDIR)/lib532-testutil.Po ./$(DEPDIR)/lib533-first.Po \
	./$(DEPDIR)/lib533-lib533.Po ./$(DEPDIR)/lib533-testutil.Po \
	./$(DEPDIR)/lib536-first.Po ./$(DEPDIR)/lib536-lib536.Po \
	./$(DEPDIR)/lib536-testutil.Po ./$(DEPDIR)/lib537-first.Po \
	./$(DEPDIR)/lib537-lib537.Po ./$(DEPDIR)/lib539-first.Po \
	./$(DEPDIR)/lib539-lib539.Po ./$(DEPDIR)/lib540-first.Po \
	./$(DEPDIR)/lib540-lib540.Po ./$(DEPDIR)/lib540-testutil.Po \
	./$(DEPDIR)/lib541-first.Po ./$(DEPDIR)/lib541-lib541.Po \
	./$(DEPDIR)/lib542-first.Po ./$(DEPDIR)/lib542-lib542.Po \
	./$(DEPDIR)/lib543-first.Po ./$(DEPDIR)/lib543-lib543.Po \
	./$(DEPDIR)/lib544-first.Po ./$(DEPDIR)/lib544-lib544.Po \
	./$(DEPDIR)/lib545-first.Po ./$(DEPDIR)/lib545-lib544.Po \
	./$(DEPDIR)/lib547-first.Po ./$(DEPDIR)/lib547-lib547.Po \
	./$(DEPDIR)/lib548-first.Po ./$(DEPDIR)/lib548-lib547.Po \
	./$(DEPDIR)/lib549-first.Po ./$(DEPDIR)/lib549-lib549.Po \
	./$(DEPDIR)/lib552-first.Po ./$(DEPDIR)/lib552-lib552.Po \
	./$(DEPDIR)/lib553-first.Po ./$(DEPDIR)/lib553-lib553.Po \
	./$(DEPDIR)/lib554-first.Po ./$(DEPDIR)/lib554-lib554.Po \
	./$(DEPDIR)/lib555-first.Po ./$(DEPDIR)/lib555-lib555.Po \
	./$(DEPDIR)/lib555-testutil.Po ./$(DEPDIR)/lib556-first.Po \
	./$(DEPDIR)/lib556-lib556.Po ./$(DEPDIR)/lib557-first.Po \
	./$(DEPDIR)/lib557-lib557.Po ./$(DEPDIR)/lib558-first.Po \
	./$(DEPDIR)/lib558-lib558.Po ./$(DEPDIR)/lib559-first.Po \
	./$(DEPDIR)/lib559-lib559.Po ./$(DEPDIR)/lib560-first.Po \
	./$(DEPDIR)/lib560-lib560.Po ./$(DEPDIR)/lib560-testutil.Po \
	./$(DEPDIR)/lib562-first.Po ./$(DEPDIR)/lib562-lib562.Po \
	./$(DEPDIR)/lib564-first.Po ./$(DEPDIR)/lib564-lib564.Po \
	./$(DEPDIR)/lib564-testutil.Po ./$(DEPDIR)/lib565-first.Po \
	./$(DEPDIR)/lib565-lib510.Po ./$(DEPDIR)/lib566-first.Po \
	./$(DEPDIR)/lib566-lib566.Po ./$(DEPDIR)/lib567-first.Po \
	./$(DEPDIR)/lib567-lib567.Po ./$(DEPDIR)/lib568-first.Po \
	./$(DEPDIR)/lib568-lib568.Po ./$(DEPDIR)/lib569-first.Po \
	./$(DEPDIR)/lib569-lib569.Po ./$(DEPDIR)/lib570-first.Po \
	./$(DEPDIR)/lib570-lib570.Po ./$(DEPDIR)/lib571-first.Po \
	./$(DEPDIR)/lib571-lib571.Po ./$(DEPDIR)/lib572-first.Po \
	./$(DEPDIR)/lib572-lib572.Po ./$(DEPDIR)/lib573-first.Po \
	./$(DEPDIR)/lib573-lib573.Po ./$(DEPDIR)/lib573-testtrace.Po \
	./$(DEPDIR)/lib573-testutil.Po ./$(DEPDIR)/lib574-first.Po \
	./$(DEPDIR)/lib574-lib574.Po ./$(DEPDIR)/lib575-first.Po \
	./$(DEPDIR)/lib575-lib575.Po ./$(DEPDIR)/lib575-testutil.Po \
	./$(DEPDIR)/lib576-first.Po ./$(DEPDIR)/lib576-lib576.Po \
	./$(DEPDIR)/lib578-first.Po ./$(DEPDIR)/lib578-lib578.Po \
	./$(DEPDIR)/lib579-first.Po ./$(DEPDIR)/lib579-lib579.Po \
	./$(DEPDIR)/lib582-first.Po ./$(DEPDIR)/lib582-lib582.Po \
	./$(DEPDIR)/lib582-testutil.Po ./$(DEPDIR)/lib583-first.Po \
	./$(DEPDIR)/lib583-lib583.Po ./$(DEPDIR)/lib585-first.Po \
	./$(DEPDIR)/lib585-lib500.Po ./$(DEPDIR)/lib585-testtrace.Po \
	./$(DEPDIR)/lib585-testutil.Po ./$(DEPDIR)/lib586-first.Po \
	./$(DEPDIR)/lib586-lib586.Po ./$(DEPDIR)/lib587-first.Po \
	./$(DEPDIR)/lib587-lib554.Po ./$(DEPDIR)/lib589-first.Po \
	./$(DEPDIR)/lib589-lib589.Po ./$(DEPDIR)/lib590-first.Po \
	./$(DEPDIR)/lib590-lib590.Po ./$(DEPDIR)/lib591-first.Po \
	./$(DEPDIR)/lib591-lib591.Po ./$(DEPDIR)/lib591-testutil.Po \
	./$(DEPDIR)/lib597-first.Po ./$(DEPDIR)/lib597-lib597.Po \
	./$(DEPDIR)/lib597-testutil.Po ./$(DEPDIR)/lib598-first.Po \
	./$(DEPDIR)/lib598-lib598.Po ./$(DEPDIR)/lib599-first.Po \
	./$(DEPDIR)/lib599-lib599.Po ./$(DEPDIR)/lib643-first.Po \
	./$(DEPDIR)/lib643-lib643.Po ./$(DEPDIR)/lib644-first.Po \
	./$(DEPDIR)/lib644-lib643.Po ./$(DEPDIR)/lib645-first.Po \
	./$(DEPDIR)/lib645-lib643.Po ./$(DEPDIR)/lib650-first.Po \
	./$(DEPDIR)/lib650-lib650.Po ./$(DEPDIR)/lib651-first.Po \
	./$(DEPDIR)/lib651-lib651.Po ./$(DEPDIR)/lib652-first.Po \
	./$(DEPDIR)/lib652-lib652.Po ./$(DEPDIR)/lib653-first.Po \
	./$(DEPDIR)/lib653-lib653.Po ./$(DEPDIR)/lib654-first.Po \
	./$(DEPDIR)/lib654-lib654.Po ./$(DEPDIR)/lib655-first.Po \
	./$(DEPDIR)/lib655-lib655.Po ./$(DEPDIR)/lib658-first.Po \
	./$(DEPDIR)/lib658-lib658.Po ./$(DEPDIR)/lib658-testutil.Po \
	./$(DEPDIR)/lib537-first.Po ./$(DEPDIR)/lib537-lib537.Po \
	./$(DEPDIR)/lib539-first.Po ./$(DEPDIR)/lib539-lib539.Po \
	./$(DEPDIR)/lib540-first.Po ./$(DEPDIR)/lib540-lib540.Po \
	./$(DEPDIR)/lib540-testutil.Po ./$(DEPDIR)/lib541-first.Po \
	./$(DEPDIR)/lib541-lib541.Po ./$(DEPDIR)/lib542-first.Po \
	./$(DEPDIR)/lib542-lib542.Po ./$(DEPDIR)/lib543-first.Po \
	./$(DEPDIR)/lib543-lib543.Po ./$(DEPDIR)/lib544-first.Po \
	./$(DEPDIR)/lib544-lib544.Po ./$(DEPDIR)/lib545-first.Po \
	./$(DEPDIR)/lib545-lib544.Po ./$(DEPDIR)/lib547-first.Po \
	./$(DEPDIR)/lib547-lib547.Po ./$(DEPDIR)/lib548-first.Po \
	./$(DEPDIR)/lib548-lib547.Po ./$(DEPDIR)/lib549-first.Po \
	./$(DEPDIR)/lib549-lib549.Po ./$(DEPDIR)/lib552-first.Po \
	./$(DEPDIR)/lib552-lib552.Po ./$(DEPDIR)/lib553-first.Po \
	./$(DEPDIR)/lib553-lib553.Po ./$(DEPDIR)/lib554-first.Po \
	./$(DEPDIR)/lib554-lib554.Po ./$(DEPDIR)/lib555-first.Po \
	./$(DEPDIR)/lib555-lib555.Po ./$(DEPDIR)/lib555-testutil.Po \
	./$(DEPDIR)/lib556-first.Po ./$(DEPDIR)/lib556-lib556.Po \
	./$(DEPDIR)/lib557-first.Po ./$(DEPDIR)/lib557-lib557.Po \
	./$(DEPDIR)/lib558-first.Po ./$(DEPDIR)/lib558-lib558.Po \
	./$(DEPDIR)/lib559-first.Po ./$(DEPDIR)/lib559-lib559.Po \
	./$(DEPDIR)/lib560-first.Po ./$(DEPDIR)/lib560-lib560.Po \
	./$(DEPDIR)/lib560-testutil.Po ./$(DEPDIR)/lib562-first.Po \
	./$(DEPDIR)/lib562-lib562.Po ./$(DEPDIR)/lib564-first.Po \
	./$(DEPDIR)/lib564-lib564.Po ./$(DEPDIR)/lib564-testutil.Po \
	./$(DEPDIR)/lib565-first.Po ./$(DEPDIR)/lib565-lib510.Po \
	./$(DEPDIR)/lib566-first.Po ./$(DEPDIR)/lib566-lib566.Po \
	./$(DEPDIR)/lib567-first.Po ./$(DEPDIR)/lib567-lib567.Po \
	./$(DEPDIR)/lib568-first.Po ./$(DEPDIR)/lib568-lib568.Po \
	./$(DEPDIR)/lib569-first.Po ./$(DEPDIR)/lib569-lib569.Po \
	./$(DEPDIR)/lib570-first.Po ./$(DEPDIR)/lib570-lib570.Po \
	./$(DEPDIR)/lib571-first.Po ./$(DEPDIR)/lib571-lib571.Po \
	./$(DEPDIR)/lib572-first.Po ./$(DEPDIR)/lib572-lib572.Po \
	./$(DEPDIR)/lib573-first.Po ./$(DEPDIR)/lib573-lib573.Po \
	./$(DEPDIR)/lib573-testtrace.Po ./$(DEPDIR)/lib573-testutil.Po \
	./$(DEPDIR)/lib574-first.Po ./$(DEPDIR)/lib574-lib574.Po \
	./$(DEPDIR)/lib575-first.Po ./$(DEPDIR)/lib575-lib575.Po \
	./$(DEPDIR)/lib575-testutil.Po ./$(DEPDIR)/lib576-first.Po \
	./$(DEPDIR)/lib576-lib576.Po ./$(DEPDIR)/lib578-first.Po \
	./$(DEPDIR)/lib578-lib578.Po ./$(DEPDIR)/lib579-first.Po \
	./$(DEPDIR)/lib579-lib579.Po ./$(DEPDIR)/lib582-first.Po \
	./$(DEPDIR)/lib582-lib582.Po ./$(DEPDIR)/lib582-testutil.Po \
	./$(DEPDIR)/lib583-first.Po ./$(DEPDIR)/lib583-lib583.Po \
	./$(DEPDIR)/lib585-first.Po ./$(DEPDIR)/lib585-lib500.Po \
	./$(DEPDIR)/lib585-testtrace.Po ./$(DEPDIR)/lib585-testutil.Po \
	./$(DEPDIR)/lib586-first.Po ./$(DEPDIR)/lib586-lib586.Po \
	./$(DEPDIR)/lib587-first.Po ./$(DEPDIR)/lib587-lib554.Po \
	./$(DEPDIR)/lib589-first.Po ./$(DEPDIR)/lib589-lib589.Po \
	./$(DEPDIR)/lib590-first.Po ./$(DEPDIR)/lib590-lib590.Po \
	./$(DEPDIR)/lib591-first.Po ./$(DEPDIR)/lib591-lib591.Po \
	./$(DEPDIR)/lib591-testutil.Po ./$(DEPDIR)/lib597-first.Po \
	./$(DEPDIR)/lib597-lib597.Po ./$(DEPDIR)/lib597-testutil.Po \
	./$(DEPDIR)/lib598-first.Po ./$(DEPDIR)/lib598-lib598.Po \
	./$(DEPDIR)/lib599-first.Po ./$(DEPDIR)/lib599-lib599.Po \
	./$(DEPDIR)/lib643-first.Po ./$(DEPDIR)/lib643-lib643.Po \
	./$(DEPDIR)/lib644-first.Po ./$(DEPDIR)/lib644-lib643.Po \
	./$(DEPDIR)/lib645-first.Po ./$(DEPDIR)/lib645-lib643.Po \
	./$(DEPDIR)/lib650-first.Po ./$(DEPDIR)/lib650-lib650.Po \
	./$(DEPDIR)/lib651-first.Po ./$(DEPDIR)/lib651-lib651.Po \
	./$(DEPDIR)/lib652-first.Po ./$(DEPDIR)/lib652-lib652.Po \
	./$(DEPDIR)/lib653-first.Po ./$(DEPDIR)/lib653-lib653.Po \
	./$(DEPDIR)/lib654-first.Po ./$(DEPDIR)/lib654-lib654.Po \
	./$(DEPDIR)/lib655-first.Po ./$(DEPDIR)/lib655-lib655.Po \
	./$(DEPDIR)/lib658-first.Po ./$(DEPDIR)/lib658-lib658.Po \
	./$(DEPDIR)/lib658-testutil.Po ./$(DEPDIR)/lib659-first.Po \
	./$(DEPDIR)/lib659-first.Po ./$(DEPDIR)/lib659-lib659.Po \
	./$(DEPDIR)/lib659-testutil.Po \
	./$(DEPDIR)/lib659-lib659.Po ./$(DEPDIR)/lib659-testutil.Po \
	./$(DEPDIR)/libauthretry-first.Po \
	./$(DEPDIR)/libauthretry-libauthretry.Po \
	./$(DEPDIR)/libhostname_la-sethostname.Plo \
	./$(DEPDIR)/libntlmconnect-first.Po \
	./$(DEPDIR)/libntlmconnect-libntlmconnect.Po \
	./$(DEPDIR)/libntlmconnect-testutil.Po \
	./$(DEPDIR)/libstubgss_la-stub_gssapi.Plo \
1395
1396
1397
1398
1399
1400
1401
1402

1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466












1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486



















































1487
1488
1489
1490
1491
1492
1493
1399
1400
1401
1402
1403
1404
1405

1406



















































1407












1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497







-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+




















+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







	$(lib1528_SOURCES) $(lib1529_SOURCES) $(lib1530_SOURCES) \
	$(lib1531_SOURCES) $(lib1532_SOURCES) $(lib1533_SOURCES) \
	$(lib1534_SOURCES) $(lib1535_SOURCES) $(lib1536_SOURCES) \
	$(lib1537_SOURCES) $(lib1538_SOURCES) $(lib1540_SOURCES) \
	$(lib1541_SOURCES) $(lib1550_SOURCES) $(lib1551_SOURCES) \
	$(lib1552_SOURCES) $(lib1553_SOURCES) $(lib1554_SOURCES) \
	$(lib1555_SOURCES) $(lib1556_SOURCES) $(lib1557_SOURCES) \
	$(lib1558_SOURCES) $(lib1560_SOURCES) $(lib1591_SOURCES) \
	$(lib1558_SOURCES) $(lib1559_SOURCES) $(lib1560_SOURCES) \
	$(lib1592_SOURCES) $(lib1900_SOURCES) $(lib1905_SOURCES) \
	$(lib2033_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
	$(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \
	$(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \
	$(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \
	$(lib511_SOURCES) $(lib512_SOURCES) $(lib513_SOURCES) \
	$(lib514_SOURCES) $(lib515_SOURCES) $(lib516_SOURCES) \
	$(lib517_SOURCES) $(lib518_SOURCES) $(lib519_SOURCES) \
	$(lib520_SOURCES) $(lib521_SOURCES) $(lib523_SOURCES) \
	$(lib524_SOURCES) $(lib525_SOURCES) $(lib526_SOURCES) \
	$(lib527_SOURCES) $(lib529_SOURCES) $(lib530_SOURCES) \
	$(lib532_SOURCES) $(lib533_SOURCES) $(lib536_SOURCES) \
	$(lib537_SOURCES) $(lib539_SOURCES) $(lib540_SOURCES) \
	$(lib541_SOURCES) $(lib542_SOURCES) $(lib543_SOURCES) \
	$(lib544_SOURCES) $(lib545_SOURCES) $(lib547_SOURCES) \
	$(lib548_SOURCES) $(lib549_SOURCES) $(lib552_SOURCES) \
	$(lib553_SOURCES) $(lib554_SOURCES) $(lib555_SOURCES) \
	$(lib556_SOURCES) $(lib557_SOURCES) $(lib558_SOURCES) \
	$(lib559_SOURCES) $(lib560_SOURCES) $(lib562_SOURCES) \
	$(lib564_SOURCES) $(lib565_SOURCES) $(lib566_SOURCES) \
	$(lib567_SOURCES) $(lib568_SOURCES) $(lib569_SOURCES) \
	$(lib570_SOURCES) $(lib571_SOURCES) $(lib572_SOURCES) \
	$(lib573_SOURCES) $(lib574_SOURCES) $(lib575_SOURCES) \
	$(lib576_SOURCES) $(lib578_SOURCES) $(lib579_SOURCES) \
	$(lib582_SOURCES) $(lib583_SOURCES) $(lib585_SOURCES) \
	$(lib586_SOURCES) $(lib587_SOURCES) $(lib589_SOURCES) \
	$(lib590_SOURCES) $(lib591_SOURCES) $(lib597_SOURCES) \
	$(lib598_SOURCES) $(lib599_SOURCES) $(lib643_SOURCES) \
	$(lib644_SOURCES) $(lib645_SOURCES) $(lib650_SOURCES) \
	$(lib651_SOURCES) $(lib652_SOURCES) $(lib653_SOURCES) \
	$(lib654_SOURCES) $(lib655_SOURCES) $(lib658_SOURCES) \
	$(lib659_SOURCES) $(libauthretry_SOURCES) \
	$(libntlmconnect_SOURCES)
DIST_SOURCES = $(libhostname_la_SOURCES) \
	$(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \
	$(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \
	$(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \
	$(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \
	$(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \
	$(lib1510_SOURCES) $(lib1511_SOURCES) $(lib1512_SOURCES) \
	$(lib1513_SOURCES) $(lib1514_SOURCES) $(lib1515_SOURCES) \
	$(lib1517_SOURCES) $(lib1518_SOURCES) $(lib1520_SOURCES) \
	$(lib1522_SOURCES) $(lib1525_SOURCES) $(lib1526_SOURCES) \
	$(lib1527_SOURCES) $(lib1528_SOURCES) $(lib1529_SOURCES) \
	$(lib1530_SOURCES) $(lib1531_SOURCES) $(lib1532_SOURCES) \
	$(lib1533_SOURCES) $(lib1534_SOURCES) $(lib1535_SOURCES) \
	$(lib1536_SOURCES) $(lib1537_SOURCES) $(lib1538_SOURCES) \
	$(lib1540_SOURCES) $(lib1541_SOURCES) $(lib1550_SOURCES) \
	$(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \
	$(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \
	$(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1560_SOURCES) \
	$(lib1591_SOURCES) $(lib1592_SOURCES) $(lib1900_SOURCES) \
	$(lib1905_SOURCES) $(lib2033_SOURCES) $(lib500_SOURCES) \
	$(lib501_SOURCES) $(lib502_SOURCES) $(lib503_SOURCES) \
	$(lib504_SOURCES) $(lib505_SOURCES) $(lib506_SOURCES) \
	$(lib507_SOURCES) $(lib508_SOURCES) $(lib509_SOURCES) \
	$(lib510_SOURCES) $(lib511_SOURCES) $(lib512_SOURCES) \
	$(lib513_SOURCES) $(lib514_SOURCES) $(lib515_SOURCES) \
	$(lib516_SOURCES) $(lib517_SOURCES) $(lib518_SOURCES) \
	$(lib519_SOURCES) $(lib520_SOURCES) $(lib521_SOURCES) \
	$(lib523_SOURCES) $(lib524_SOURCES) $(lib525_SOURCES) \
	$(lib526_SOURCES) $(lib527_SOURCES) $(lib529_SOURCES) \
	$(lib530_SOURCES) $(lib532_SOURCES) $(lib533_SOURCES) \
	$(lib536_SOURCES) $(lib537_SOURCES) $(lib539_SOURCES) \
	$(lib1905_SOURCES) $(lib1906_SOURCES) $(lib2033_SOURCES) \
	$(lib500_SOURCES) $(lib501_SOURCES) $(lib502_SOURCES) \
	$(lib503_SOURCES) $(lib504_SOURCES) $(lib505_SOURCES) \
	$(lib506_SOURCES) $(lib507_SOURCES) $(lib508_SOURCES) \
	$(lib509_SOURCES) $(lib510_SOURCES) $(lib511_SOURCES) \
	$(lib512_SOURCES) $(lib513_SOURCES) $(lib514_SOURCES) \
	$(lib515_SOURCES) $(lib516_SOURCES) $(lib517_SOURCES) \
	$(lib518_SOURCES) $(lib519_SOURCES) $(lib520_SOURCES) \
	$(lib521_SOURCES) $(lib523_SOURCES) $(lib524_SOURCES) \
	$(lib525_SOURCES) $(lib526_SOURCES) $(lib527_SOURCES) \
	$(lib529_SOURCES) $(lib530_SOURCES) $(lib532_SOURCES) \
	$(lib533_SOURCES) $(lib537_SOURCES) $(lib539_SOURCES) \
	$(lib540_SOURCES) $(lib541_SOURCES) $(lib542_SOURCES) \
	$(lib543_SOURCES) $(lib544_SOURCES) $(lib545_SOURCES) \
	$(lib547_SOURCES) $(lib548_SOURCES) $(lib549_SOURCES) \
	$(lib552_SOURCES) $(lib553_SOURCES) $(lib554_SOURCES) \
	$(lib555_SOURCES) $(lib556_SOURCES) $(lib557_SOURCES) \
	$(lib558_SOURCES) $(lib559_SOURCES) $(lib560_SOURCES) \
	$(lib562_SOURCES) $(lib564_SOURCES) $(lib565_SOURCES) \
	$(lib566_SOURCES) $(lib567_SOURCES) $(lib568_SOURCES) \
	$(lib569_SOURCES) $(lib570_SOURCES) $(lib571_SOURCES) \
	$(lib572_SOURCES) $(lib573_SOURCES) $(lib574_SOURCES) \
	$(lib575_SOURCES) $(lib576_SOURCES) $(lib578_SOURCES) \
	$(lib579_SOURCES) $(lib582_SOURCES) $(lib583_SOURCES) \
	$(lib585_SOURCES) $(lib586_SOURCES) $(lib587_SOURCES) \
	$(lib589_SOURCES) $(lib590_SOURCES) $(lib591_SOURCES) \
	$(lib597_SOURCES) $(lib598_SOURCES) $(lib599_SOURCES) \
	$(lib643_SOURCES) $(lib644_SOURCES) $(lib645_SOURCES) \
	$(lib650_SOURCES) $(lib651_SOURCES) $(lib652_SOURCES) \
	$(lib653_SOURCES) $(lib654_SOURCES) $(lib655_SOURCES) \
	$(lib658_SOURCES) $(lib659_SOURCES) $(libauthretry_SOURCES) \
	$(libntlmconnect_SOURCES)
DIST_SOURCES = $(libhostname_la_SOURCES) \
	$(am__libstubgss_la_SOURCES_DIST) $(chkdecimalpoint_SOURCES) \
	$(chkhostname_SOURCES) $(lib1156_SOURCES) $(lib1500_SOURCES) \
	$(lib1501_SOURCES) $(lib1502_SOURCES) $(lib1503_SOURCES) \
	$(lib1504_SOURCES) $(lib1505_SOURCES) $(lib1506_SOURCES) \
	$(lib1507_SOURCES) $(lib1508_SOURCES) $(lib1509_SOURCES) \
	$(lib1510_SOURCES) $(lib1511_SOURCES) $(lib1512_SOURCES) \
	$(lib1513_SOURCES) $(lib1514_SOURCES) $(lib1515_SOURCES) \
	$(lib1517_SOURCES) $(lib1518_SOURCES) $(lib1520_SOURCES) \
	$(lib1522_SOURCES) $(lib1525_SOURCES) $(lib1526_SOURCES) \
	$(lib1527_SOURCES) $(lib1528_SOURCES) $(lib1529_SOURCES) \
	$(lib1530_SOURCES) $(lib1531_SOURCES) $(lib1532_SOURCES) \
	$(lib1533_SOURCES) $(lib1534_SOURCES) $(lib1535_SOURCES) \
	$(lib1536_SOURCES) $(lib1537_SOURCES) $(lib1538_SOURCES) \
	$(lib1540_SOURCES) $(lib1541_SOURCES) $(lib1550_SOURCES) \
	$(lib1551_SOURCES) $(lib1552_SOURCES) $(lib1553_SOURCES) \
	$(lib1554_SOURCES) $(lib1555_SOURCES) $(lib1556_SOURCES) \
	$(lib1557_SOURCES) $(lib1558_SOURCES) $(lib1559_SOURCES) \
	$(lib1560_SOURCES) $(lib1591_SOURCES) $(lib1592_SOURCES) \
	$(lib1900_SOURCES) $(lib1905_SOURCES) $(lib1906_SOURCES) \
	$(lib2033_SOURCES) $(lib500_SOURCES) $(lib501_SOURCES) \
	$(lib502_SOURCES) $(lib503_SOURCES) $(lib504_SOURCES) \
	$(lib505_SOURCES) $(lib506_SOURCES) $(lib507_SOURCES) \
	$(lib508_SOURCES) $(lib509_SOURCES) $(lib510_SOURCES) \
	$(lib511_SOURCES) $(lib512_SOURCES) $(lib513_SOURCES) \
	$(lib514_SOURCES) $(lib515_SOURCES) $(lib516_SOURCES) \
	$(lib517_SOURCES) $(lib518_SOURCES) $(lib519_SOURCES) \
	$(lib520_SOURCES) $(lib521_SOURCES) $(lib523_SOURCES) \
	$(lib524_SOURCES) $(lib525_SOURCES) $(lib526_SOURCES) \
	$(lib527_SOURCES) $(lib529_SOURCES) $(lib530_SOURCES) \
	$(lib532_SOURCES) $(lib533_SOURCES) $(lib537_SOURCES) \
	$(lib539_SOURCES) $(lib540_SOURCES) $(lib541_SOURCES) \
	$(lib542_SOURCES) $(lib543_SOURCES) $(lib544_SOURCES) \
	$(lib545_SOURCES) $(lib547_SOURCES) $(lib548_SOURCES) \
	$(lib549_SOURCES) $(lib552_SOURCES) $(lib553_SOURCES) \
	$(lib554_SOURCES) $(lib555_SOURCES) $(lib556_SOURCES) \
	$(lib557_SOURCES) $(lib558_SOURCES) $(lib559_SOURCES) \
	$(lib560_SOURCES) $(lib562_SOURCES) $(lib564_SOURCES) \
	$(lib565_SOURCES) $(lib566_SOURCES) $(lib567_SOURCES) \
	$(lib568_SOURCES) $(lib569_SOURCES) $(lib570_SOURCES) \
	$(lib571_SOURCES) $(lib572_SOURCES) $(lib573_SOURCES) \
	$(lib574_SOURCES) $(lib575_SOURCES) $(lib576_SOURCES) \
	$(lib578_SOURCES) $(lib579_SOURCES) $(lib582_SOURCES) \
	$(lib583_SOURCES) $(lib585_SOURCES) $(lib586_SOURCES) \
	$(lib587_SOURCES) $(lib589_SOURCES) $(lib590_SOURCES) \
	$(lib591_SOURCES) $(lib597_SOURCES) $(lib598_SOURCES) \
	$(lib599_SOURCES) $(lib643_SOURCES) $(lib644_SOURCES) \
	$(lib645_SOURCES) $(lib650_SOURCES) $(lib651_SOURCES) \
	$(lib652_SOURCES) $(lib653_SOURCES) $(lib654_SOURCES) \
	$(lib655_SOURCES) $(lib658_SOURCES) $(lib659_SOURCES) \
	$(libauthretry_SOURCES) $(libntlmconnect_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1868
1869
1870
1871
1872
1873
1874



1875
1876
1877
1878
1879
1880
1881







-
-
-







lib530_CPPFLAGS = $(AM_CPPFLAGS) -DLIB530
lib532_SOURCES = lib526.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib532_LDADD = $(TESTUTIL_LIBS)
lib532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB532
lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib533_LDADD = $(TESTUTIL_LIBS)
lib533_CPPFLAGS = $(AM_CPPFLAGS)
lib536_SOURCES = lib536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib536_LDADD = $(TESTUTIL_LIBS)
lib536_CPPFLAGS = $(AM_CPPFLAGS)
lib537_SOURCES = lib537.c $(SUPPORTFILES) $(WARNLESS)
lib537_CPPFLAGS = $(AM_CPPFLAGS)
lib539_SOURCES = lib539.c $(SUPPORTFILES)
lib539_CPPFLAGS = $(AM_CPPFLAGS)
lib540_SOURCES = lib540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib540_LDADD = $(TESTUTIL_LIBS)
lib540_CPPFLAGS = $(AM_CPPFLAGS)
2127
2128
2129
2130
2131
2132
2133


2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147



2148
2149
2150
2151
2152
2153
2154
2128
2129
2130
2131
2132
2133
2134
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160







+
+














+
+
+







lib1556_LDADD = $(TESTUTIL_LIBS)
lib1556_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1556
lib1557_SOURCES = lib1557.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1557_LDADD = $(TESTUTIL_LIBS)
lib1557_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1557
lib1558_SOURCES = lib1558.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1558_LDADD = $(TESTUTIL_LIBS)
lib1559_SOURCES = lib1559.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1559_LDADD = $(TESTUTIL_LIBS)
lib1560_SOURCES = lib1560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1560_LDADD = $(TESTUTIL_LIBS)
lib1591_SOURCES = lib1591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1591_LDADD = $(TESTUTIL_LIBS)
lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591
lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1592_LDADD = $(TESTUTIL_LIBS)
lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592
lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1900_LDADD = $(TESTUTIL_LIBS)
lib1900_CPPFLAGS = $(AM_CPPFLAGS)
lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1905_LDADD = $(TESTUTIL_LIBS)
lib1905_CPPFLAGS = $(AM_CPPFLAGS)
lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)
lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING
@BUILD_LIBHOSTNAME_FALSE@noinst_LTLIBRARIES = $(am__append_6)

# Makefile.inc provides the source defines (TESTUTIL, SUPPORTFILES,
# noinst_PROGRAMS, lib*_SOURCES, and lib*_CFLAGS)
2515
2516
2517
2518
2519
2520
2521




2522
2523
2524
2525
2526
2527
2528
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536
2537
2538







+
+
+
+







	$(AM_V_CCLD)$(LINK) $(lib1557_OBJECTS) $(lib1557_LDADD) $(LIBS)
../../lib/warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1558$(EXEEXT): $(lib1558_OBJECTS) $(lib1558_DEPENDENCIES) $(EXTRA_lib1558_DEPENDENCIES) 
	@rm -f lib1558$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1558_OBJECTS) $(lib1558_LDADD) $(LIBS)

lib1559$(EXEEXT): $(lib1559_OBJECTS) $(lib1559_DEPENDENCIES) $(EXTRA_lib1559_DEPENDENCIES) 
	@rm -f lib1559$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1559_OBJECTS) $(lib1559_LDADD) $(LIBS)

lib1560$(EXEEXT): $(lib1560_OBJECTS) $(lib1560_DEPENDENCIES) $(EXTRA_lib1560_DEPENDENCIES) 
	@rm -f lib1560$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1560_OBJECTS) $(lib1560_LDADD) $(LIBS)
../../lib/lib1591-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

2543
2544
2545
2546
2547
2548
2549






2550
2551
2552
2553
2554
2555
2556
2553
2554
2555
2556
2557
2558
2559
2560
2561
2562
2563
2564
2565
2566
2567
2568
2569
2570
2571
2572







+
+
+
+
+
+







	$(AM_V_CCLD)$(LINK) $(lib1900_OBJECTS) $(lib1900_LDADD) $(LIBS)
../../lib/lib1905-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1905$(EXEEXT): $(lib1905_OBJECTS) $(lib1905_DEPENDENCIES) $(EXTRA_lib1905_DEPENDENCIES) 
	@rm -f lib1905$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1905_OBJECTS) $(lib1905_LDADD) $(LIBS)
../../lib/lib1906-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib1906$(EXEEXT): $(lib1906_OBJECTS) $(lib1906_DEPENDENCIES) $(EXTRA_lib1906_DEPENDENCIES) 
	@rm -f lib1906$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib1906_OBJECTS) $(lib1906_LDADD) $(LIBS)
../../lib/lib2033-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib2033$(EXEEXT): $(lib2033_OBJECTS) $(lib2033_DEPENDENCIES) $(EXTRA_lib2033_DEPENDENCIES) 
	@rm -f lib2033$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib2033_OBJECTS) $(lib2033_LDADD) $(LIBS)

2697
2698
2699
2700
2701
2702
2703
2704
2705
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2713
2714
2715
2716
2717
2718
2719






2720
2721
2722
2723
2724
2725
2726







-
-
-
-
-
-







	$(AM_V_CCLD)$(LINK) $(lib532_OBJECTS) $(lib532_LDADD) $(LIBS)
../../lib/lib533-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib533$(EXEEXT): $(lib533_OBJECTS) $(lib533_DEPENDENCIES) $(EXTRA_lib533_DEPENDENCIES) 
	@rm -f lib533$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib533_OBJECTS) $(lib533_LDADD) $(LIBS)
../../lib/lib536-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib536$(EXEEXT): $(lib536_OBJECTS) $(lib536_DEPENDENCIES) $(EXTRA_lib536_DEPENDENCIES) 
	@rm -f lib536$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib536_OBJECTS) $(lib536_LDADD) $(LIBS)
../../lib/lib537-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

lib537$(EXEEXT): $(lib537_OBJECTS) $(lib537_DEPENDENCIES) $(EXTRA_lib537_DEPENDENCIES) 
	@rm -f lib537$(EXEEXT)
	$(AM_V_CCLD)$(LINK) $(lib537_OBJECTS) $(lib537_LDADD) $(LIBS)

3025
3026
3027
3028
3029
3030
3031

3032
3033
3034
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3035
3036
3037
3038
3039
3040
3041
3042
3043
3044
3045
3046
3047
3048
3049
3050
3051
3052
3053
3054
3055

3056
3057
3058
3059
3060
3061
3062







+













-







@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1555-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1556-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1557-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1591-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1592-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1900-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1905-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib1906-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib2033-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib502-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib503-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib504-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib507-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib518-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib525-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib526-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib527-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib529-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib530-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib532-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib533-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib536-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib537-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib540-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib552-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib555-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib556-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib560-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/lib564-warnless.Po@am__quote@ # am--include-marker
3190
3191
3192
3193
3194
3195
3196

3197
3198
3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209



3210
3211
3212
3213
3214
3215
3216
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230







+













+
+
+







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-lib1556.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1556-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-lib1557.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1557-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1558.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1559.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1560.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-lib1591.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1591-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-lib1592.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1592-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-lib1900.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1900-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-lib1905.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1905-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-lib1906.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib1906-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-libntlmconnect.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib2033-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-lib500.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testtrace.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib500-testutil.Po@am__quote@ # am--include-marker
3281
3282
3283
3284
3285
3286
3287
3288
3289
3290
3291
3292
3293
3294
3295
3296
3297
3295
3296
3297
3298
3299
3300
3301



3302
3303
3304
3305
3306
3307
3308







-
-
-







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib530-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-lib526.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib532-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-lib533.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib533-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib536-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib536-lib536.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib536-testutil.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib537-lib537.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib539-lib539.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-first.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-lib540.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lib540-testutil.Po@am__quote@ # am--include-marker
6071
6072
6073
6074
6075
6076
6077
























































6078
6079
6080
6081
6082
6083
6084
6082
6083
6084
6085
6086
6087
6088
6089
6090
6091
6092
6093
6094
6095
6096
6097
6098
6099
6100
6101
6102
6103
6104
6105
6106
6107
6108
6109
6110
6111
6112
6113
6114
6115
6116
6117
6118
6119
6120
6121
6122
6123
6124
6125
6126
6127
6128
6129
6130
6131
6132
6133
6134
6135
6136
6137
6138
6139
6140
6141
6142
6143
6144
6145
6146
6147
6148
6149
6150
6151







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







../../lib/lib1905-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1905-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1905-warnless.Tpo -c -o ../../lib/lib1905-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1905-warnless.Tpo ../../lib/$(DEPDIR)/lib1905-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1905-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1905_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1905-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib1906-lib1906.o: lib1906.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-lib1906.o -MD -MP -MF $(DEPDIR)/lib1906-lib1906.Tpo -c -o lib1906-lib1906.o `test -f 'lib1906.c' || echo '$(srcdir)/'`lib1906.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-lib1906.Tpo $(DEPDIR)/lib1906-lib1906.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib1906.c' object='lib1906-lib1906.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-lib1906.o `test -f 'lib1906.c' || echo '$(srcdir)/'`lib1906.c

lib1906-lib1906.obj: lib1906.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-lib1906.obj -MD -MP -MF $(DEPDIR)/lib1906-lib1906.Tpo -c -o lib1906-lib1906.obj `if test -f 'lib1906.c'; then $(CYGPATH_W) 'lib1906.c'; else $(CYGPATH_W) '$(srcdir)/lib1906.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-lib1906.Tpo $(DEPDIR)/lib1906-lib1906.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib1906.c' object='lib1906-lib1906.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-lib1906.obj `if test -f 'lib1906.c'; then $(CYGPATH_W) 'lib1906.c'; else $(CYGPATH_W) '$(srcdir)/lib1906.c'; fi`

lib1906-first.o: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-first.o -MD -MP -MF $(DEPDIR)/lib1906-first.Tpo -c -o lib1906-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-first.Tpo $(DEPDIR)/lib1906-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib1906-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c

lib1906-first.obj: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-first.obj -MD -MP -MF $(DEPDIR)/lib1906-first.Tpo -c -o lib1906-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-first.Tpo $(DEPDIR)/lib1906-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib1906-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`

lib1906-testutil.o: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-testutil.o -MD -MP -MF $(DEPDIR)/lib1906-testutil.Tpo -c -o lib1906-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-testutil.Tpo $(DEPDIR)/lib1906-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib1906-testutil.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c

lib1906-testutil.obj: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib1906-testutil.obj -MD -MP -MF $(DEPDIR)/lib1906-testutil.Tpo -c -o lib1906-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib1906-testutil.Tpo $(DEPDIR)/lib1906-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib1906-testutil.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib1906-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`

../../lib/lib1906-warnless.o: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-warnless.Tpo -c -o ../../lib/lib1906-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-warnless.Tpo ../../lib/$(DEPDIR)/lib1906-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1906-warnless.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c

../../lib/lib1906-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib1906-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib1906-warnless.Tpo -c -o ../../lib/lib1906-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib1906-warnless.Tpo ../../lib/$(DEPDIR)/lib1906-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib1906-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib1906_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib1906-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib2033-libntlmconnect.o: libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib2033-libntlmconnect.o -MD -MP -MF $(DEPDIR)/lib2033-libntlmconnect.Tpo -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib2033-libntlmconnect.Tpo $(DEPDIR)/lib2033-libntlmconnect.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='libntlmconnect.c' object='lib2033-libntlmconnect.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib2033_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib2033-libntlmconnect.o `test -f 'libntlmconnect.c' || echo '$(srcdir)/'`libntlmconnect.c

7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7412
7413
7414
7415
7416
7417
7418
























































7419
7420
7421
7422
7423
7424
7425







-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







../../lib/lib533-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib533-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib533-warnless.Tpo -c -o ../../lib/lib533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib533-warnless.Tpo ../../lib/$(DEPDIR)/lib533-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib533-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib533_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib533-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib536-lib536.o: lib536.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-lib536.o -MD -MP -MF $(DEPDIR)/lib536-lib536.Tpo -c -o lib536-lib536.o `test -f 'lib536.c' || echo '$(srcdir)/'`lib536.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-lib536.Tpo $(DEPDIR)/lib536-lib536.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib536.c' object='lib536-lib536.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-lib536.o `test -f 'lib536.c' || echo '$(srcdir)/'`lib536.c

lib536-lib536.obj: lib536.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-lib536.obj -MD -MP -MF $(DEPDIR)/lib536-lib536.Tpo -c -o lib536-lib536.obj `if test -f 'lib536.c'; then $(CYGPATH_W) 'lib536.c'; else $(CYGPATH_W) '$(srcdir)/lib536.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-lib536.Tpo $(DEPDIR)/lib536-lib536.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib536.c' object='lib536-lib536.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-lib536.obj `if test -f 'lib536.c'; then $(CYGPATH_W) 'lib536.c'; else $(CYGPATH_W) '$(srcdir)/lib536.c'; fi`

lib536-first.o: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-first.o -MD -MP -MF $(DEPDIR)/lib536-first.Tpo -c -o lib536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-first.Tpo $(DEPDIR)/lib536-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib536-first.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-first.o `test -f 'first.c' || echo '$(srcdir)/'`first.c

lib536-first.obj: first.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-first.obj -MD -MP -MF $(DEPDIR)/lib536-first.Tpo -c -o lib536-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-first.Tpo $(DEPDIR)/lib536-first.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='first.c' object='lib536-first.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-first.obj `if test -f 'first.c'; then $(CYGPATH_W) 'first.c'; else $(CYGPATH_W) '$(srcdir)/first.c'; fi`

lib536-testutil.o: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-testutil.o -MD -MP -MF $(DEPDIR)/lib536-testutil.Tpo -c -o lib536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-testutil.Tpo $(DEPDIR)/lib536-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib536-testutil.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-testutil.o `test -f 'testutil.c' || echo '$(srcdir)/'`testutil.c

lib536-testutil.obj: testutil.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib536-testutil.obj -MD -MP -MF $(DEPDIR)/lib536-testutil.Tpo -c -o lib536-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib536-testutil.Tpo $(DEPDIR)/lib536-testutil.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='testutil.c' object='lib536-testutil.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib536-testutil.obj `if test -f 'testutil.c'; then $(CYGPATH_W) 'testutil.c'; else $(CYGPATH_W) '$(srcdir)/testutil.c'; fi`

../../lib/lib536-warnless.o: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib536-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/lib536-warnless.Tpo -c -o ../../lib/lib536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib536-warnless.Tpo ../../lib/$(DEPDIR)/lib536-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib536-warnless.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib536-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c

../../lib/lib536-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ../../lib/lib536-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/lib536-warnless.Tpo -c -o ../../lib/lib536-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/lib536-warnless.Tpo ../../lib/$(DEPDIR)/lib536-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/lib536-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib536_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ../../lib/lib536-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

lib537-lib537.o: lib537.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT lib537-lib537.o -MD -MP -MF $(DEPDIR)/lib537-lib537.Tpo -c -o lib537-lib537.o `test -f 'lib537.c' || echo '$(srcdir)/'`lib537.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/lib537-lib537.Tpo $(DEPDIR)/lib537-lib537.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='lib537.c' object='lib537-lib537.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(lib537_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o lib537-lib537.o `test -f 'lib537.c' || echo '$(srcdir)/'`lib537.c

9692
9693
9694
9695
9696
9697
9698

9699
9700
9701
9702
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9703
9704
9705
9706
9707
9708
9709
9710
9711
9712
9713
9714
9715
9716
9717
9718
9719
9720
9721
9722
9723

9724
9725
9726
9727
9728
9729
9730







+













-







	-rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib526-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib527-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib529-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib530-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib532-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib533-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib536-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib537-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib540-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib552-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib555-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib556-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib560-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib564-warnless.Po
9857
9858
9859
9860
9861
9862
9863

9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876



9877
9878
9879
9880
9881
9882
9883
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
9898







+













+
+
+







	-rm -f ./$(DEPDIR)/lib1556-first.Po
	-rm -f ./$(DEPDIR)/lib1556-lib1556.Po
	-rm -f ./$(DEPDIR)/lib1556-testutil.Po
	-rm -f ./$(DEPDIR)/lib1557-first.Po
	-rm -f ./$(DEPDIR)/lib1557-lib1557.Po
	-rm -f ./$(DEPDIR)/lib1557-testutil.Po
	-rm -f ./$(DEPDIR)/lib1558.Po
	-rm -f ./$(DEPDIR)/lib1559.Po
	-rm -f ./$(DEPDIR)/lib1560.Po
	-rm -f ./$(DEPDIR)/lib1591-first.Po
	-rm -f ./$(DEPDIR)/lib1591-lib1591.Po
	-rm -f ./$(DEPDIR)/lib1591-testutil.Po
	-rm -f ./$(DEPDIR)/lib1592-first.Po
	-rm -f ./$(DEPDIR)/lib1592-lib1592.Po
	-rm -f ./$(DEPDIR)/lib1592-testutil.Po
	-rm -f ./$(DEPDIR)/lib1900-first.Po
	-rm -f ./$(DEPDIR)/lib1900-lib1900.Po
	-rm -f ./$(DEPDIR)/lib1900-testutil.Po
	-rm -f ./$(DEPDIR)/lib1905-first.Po
	-rm -f ./$(DEPDIR)/lib1905-lib1905.Po
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po
9948
9949
9950
9951
9952
9953
9954
9955
9956
9957
9958
9959
9960
9961
9962
9963
9964
9963
9964
9965
9966
9967
9968
9969



9970
9971
9972
9973
9974
9975
9976







-
-
-







	-rm -f ./$(DEPDIR)/lib530-testutil.Po
	-rm -f ./$(DEPDIR)/lib532-first.Po
	-rm -f ./$(DEPDIR)/lib532-lib526.Po
	-rm -f ./$(DEPDIR)/lib532-testutil.Po
	-rm -f ./$(DEPDIR)/lib533-first.Po
	-rm -f ./$(DEPDIR)/lib533-lib533.Po
	-rm -f ./$(DEPDIR)/lib533-testutil.Po
	-rm -f ./$(DEPDIR)/lib536-first.Po
	-rm -f ./$(DEPDIR)/lib536-lib536.Po
	-rm -f ./$(DEPDIR)/lib536-testutil.Po
	-rm -f ./$(DEPDIR)/lib537-first.Po
	-rm -f ./$(DEPDIR)/lib537-lib537.Po
	-rm -f ./$(DEPDIR)/lib539-first.Po
	-rm -f ./$(DEPDIR)/lib539-lib539.Po
	-rm -f ./$(DEPDIR)/lib540-first.Po
	-rm -f ./$(DEPDIR)/lib540-lib540.Po
	-rm -f ./$(DEPDIR)/lib540-testutil.Po
10176
10177
10178
10179
10180
10181
10182

10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
10198
10199
10200
10201
10202
10203
10204
10205
10206
10207
10208

10209
10210
10211
10212
10213
10214
10215







+













-







	-rm -f ../../lib/$(DEPDIR)/lib1555-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1556-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1557-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1591-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1592-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1900-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1905-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib1906-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib2033-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib502-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib503-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib504-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib507-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib518-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib525-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib526-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib527-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib529-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib530-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib532-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib533-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib536-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib537-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib540-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib552-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib555-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib556-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib560-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/lib564-warnless.Po
10341
10342
10343
10344
10345
10346
10347

10348
10349
10350
10351
10352
10353
10354
10355
10356
10357
10358
10359
10360



10361
10362
10363
10364
10365
10366
10367
10353
10354
10355
10356
10357
10358
10359
10360
10361
10362
10363
10364
10365
10366
10367
10368
10369
10370
10371
10372
10373
10374
10375
10376
10377
10378
10379
10380
10381
10382
10383







+













+
+
+







	-rm -f ./$(DEPDIR)/lib1556-first.Po
	-rm -f ./$(DEPDIR)/lib1556-lib1556.Po
	-rm -f ./$(DEPDIR)/lib1556-testutil.Po
	-rm -f ./$(DEPDIR)/lib1557-first.Po
	-rm -f ./$(DEPDIR)/lib1557-lib1557.Po
	-rm -f ./$(DEPDIR)/lib1557-testutil.Po
	-rm -f ./$(DEPDIR)/lib1558.Po
	-rm -f ./$(DEPDIR)/lib1559.Po
	-rm -f ./$(DEPDIR)/lib1560.Po
	-rm -f ./$(DEPDIR)/lib1591-first.Po
	-rm -f ./$(DEPDIR)/lib1591-lib1591.Po
	-rm -f ./$(DEPDIR)/lib1591-testutil.Po
	-rm -f ./$(DEPDIR)/lib1592-first.Po
	-rm -f ./$(DEPDIR)/lib1592-lib1592.Po
	-rm -f ./$(DEPDIR)/lib1592-testutil.Po
	-rm -f ./$(DEPDIR)/lib1900-first.Po
	-rm -f ./$(DEPDIR)/lib1900-lib1900.Po
	-rm -f ./$(DEPDIR)/lib1900-testutil.Po
	-rm -f ./$(DEPDIR)/lib1905-first.Po
	-rm -f ./$(DEPDIR)/lib1905-lib1905.Po
	-rm -f ./$(DEPDIR)/lib1905-testutil.Po
	-rm -f ./$(DEPDIR)/lib1906-first.Po
	-rm -f ./$(DEPDIR)/lib1906-lib1906.Po
	-rm -f ./$(DEPDIR)/lib1906-testutil.Po
	-rm -f ./$(DEPDIR)/lib2033-first.Po
	-rm -f ./$(DEPDIR)/lib2033-libntlmconnect.Po
	-rm -f ./$(DEPDIR)/lib2033-testutil.Po
	-rm -f ./$(DEPDIR)/lib500-first.Po
	-rm -f ./$(DEPDIR)/lib500-lib500.Po
	-rm -f ./$(DEPDIR)/lib500-testtrace.Po
	-rm -f ./$(DEPDIR)/lib500-testutil.Po
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10448
10449
10450
10451
10452
10453
10454



10455
10456
10457
10458
10459
10460
10461







-
-
-







	-rm -f ./$(DEPDIR)/lib530-testutil.Po
	-rm -f ./$(DEPDIR)/lib532-first.Po
	-rm -f ./$(DEPDIR)/lib532-lib526.Po
	-rm -f ./$(DEPDIR)/lib532-testutil.Po
	-rm -f ./$(DEPDIR)/lib533-first.Po
	-rm -f ./$(DEPDIR)/lib533-lib533.Po
	-rm -f ./$(DEPDIR)/lib533-testutil.Po
	-rm -f ./$(DEPDIR)/lib536-first.Po
	-rm -f ./$(DEPDIR)/lib536-lib536.Po
	-rm -f ./$(DEPDIR)/lib536-testutil.Po
	-rm -f ./$(DEPDIR)/lib537-first.Po
	-rm -f ./$(DEPDIR)/lib537-lib537.Po
	-rm -f ./$(DEPDIR)/lib539-first.Po
	-rm -f ./$(DEPDIR)/lib539-lib539.Po
	-rm -f ./$(DEPDIR)/lib540-first.Po
	-rm -f ./$(DEPDIR)/lib540-lib540.Po
	-rm -f ./$(DEPDIR)/lib540-testutil.Po
Changes to jni/curl/tests/libtest/Makefile.inc.
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
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







-
+














-
+
-

-
+








# These are all libcurl test programs
noinst_PROGRAMS = chkhostname libauthretry libntlmconnect                \
 chkdecimalpoint                                                         \
 lib500 lib501 lib502 lib503 lib504 lib505 lib506 lib507 lib508 lib509   \
 lib510 lib511 lib512 lib513 lib514 lib515 lib516 lib517 lib518 lib519   \
 lib520 lib521 lib523 lib524 lib525 lib526 lib527 lib529 lib530 lib532   \
 lib533 lib536 lib537 lib539 lib540 lib541 lib542 lib543 lib544 lib545   \
 lib533        lib537 lib539 lib540 lib541 lib542 lib543 lib544 lib545   \
 lib547 lib548 lib549 lib552 lib553 lib554 lib555 lib556 lib557 lib558   \
 lib559 lib560 lib562 lib564 lib565 lib566 lib567 lib568 lib569 lib570   \
 lib571 lib572 lib573 lib574 lib575 lib576        lib578 lib579 lib582   \
 lib583 lib585 lib586 lib587 lib589 lib590 lib591 lib597 lib598 lib599   \
 lib643 lib644 lib645 lib650 lib651 lib652 lib653 lib654 lib655 lib658   \
 lib659 \
 lib1156 \
 lib1500 lib1501 lib1502 lib1503 lib1504 lib1505 lib1506 lib1507 lib1508 \
 lib1509 lib1510 lib1511 lib1512 lib1513 lib1514 lib1515         lib1517 \
 lib1518         lib1520 lib1521 lib1522 \
 lib1525 lib1526 lib1527 lib1528 lib1529 lib1530 lib1531 lib1532 lib1533 \
 lib1534 lib1535 lib1536 lib1537 lib1538 \
 lib1540 lib1541 \
 lib1550 lib1551 lib1552 lib1553 lib1554 lib1555 lib1556 lib1557 \
 lib1558 \
 lib1558 lib1559 lib1560 \
 lib1560 \
 lib1591 lib1592 \
 lib1900 lib1905 \
 lib1900 lib1905 lib1906 \
 lib2033

chkdecimalpoint_SOURCES = chkdecimalpoint.c ../../lib/mprintf.c \
 ../../lib/curl_ctype.c
chkdecimalpoint_LDADD =
chkdecimalpoint_CPPFLAGS = $(AM_CPPFLAGS) -DCURL_STATICLIB \
 -DCURLX_NO_MEMORY_CALLBACKS
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
155
156
157
158
159
160
161




162
163
164
165
166
167
168







-
-
-
-







lib532_LDADD = $(TESTUTIL_LIBS)
lib532_CPPFLAGS = $(AM_CPPFLAGS) -DLIB532

lib533_SOURCES = lib533.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib533_LDADD = $(TESTUTIL_LIBS)
lib533_CPPFLAGS = $(AM_CPPFLAGS)

lib536_SOURCES = lib536.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib536_LDADD = $(TESTUTIL_LIBS)
lib536_CPPFLAGS = $(AM_CPPFLAGS)

lib537_SOURCES = lib537.c $(SUPPORTFILES) $(WARNLESS)
lib537_CPPFLAGS = $(AM_CPPFLAGS)

lib539_SOURCES = lib539.c $(SUPPORTFILES)
lib539_CPPFLAGS = $(AM_CPPFLAGS)

lib540_SOURCES = lib540.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
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
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







+
+
+



















+
+
+
+





lib1557_SOURCES = lib1557.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1557_LDADD = $(TESTUTIL_LIBS)
lib1557_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1557

lib1558_SOURCES = lib1558.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1558_LDADD = $(TESTUTIL_LIBS)

lib1559_SOURCES = lib1559.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1559_LDADD = $(TESTUTIL_LIBS)

lib1560_SOURCES = lib1560.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1560_LDADD = $(TESTUTIL_LIBS)

lib1591_SOURCES = lib1591.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1591_LDADD = $(TESTUTIL_LIBS)
lib1591_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1591

lib1592_SOURCES = lib1592.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1592_LDADD = $(TESTUTIL_LIBS)
lib1592_CPPFLAGS = $(AM_CPPFLAGS) -DLIB1592

lib1900_SOURCES = lib1900.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1900_LDADD = $(TESTUTIL_LIBS)
lib1900_CPPFLAGS = $(AM_CPPFLAGS)

lib1905_SOURCES = lib1905.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1905_LDADD = $(TESTUTIL_LIBS)
lib1905_CPPFLAGS = $(AM_CPPFLAGS)

lib1906_SOURCES = lib1906.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib1906_LDADD = $(TESTUTIL_LIBS)
lib1906_CPPFLAGS = $(AM_CPPFLAGS)

lib2033_SOURCES = libntlmconnect.c $(SUPPORTFILES) $(TESTUTIL) $(WARNLESS)
lib2033_LDADD = $(TESTUTIL_LIBS)
lib2033_CPPFLAGS = $(AM_CPPFLAGS) -DUSE_PIPELINING
Changes to jni/curl/tests/libtest/lib1156.c.
84
85
86
87
88
89
90
91

92
93
94
95
96
97
98
99

100
101
102
103
104
105
106
84
85
86
87
88
89
90

91
92
93
94
95
96
97
98

99
100
101
102
103
104
105
106







-
+







-
+








static int onetest(CURL *curl, const char *url, const testparams *p)
{
  CURLcode res;
  unsigned int replyselector;
  char urlbuf[256];

  replyselector = p->flags & F_CONTENTRANGE? 1: 0;
  replyselector = (p->flags & F_CONTENTRANGE)? 1: 0;
  if(p->flags & F_HTTP416)
    replyselector += 2;
  msnprintf(urlbuf, sizeof(urlbuf), "%s%04u", url, replyselector);
  test_setopt(curl, CURLOPT_URL, urlbuf);
  test_setopt(curl, CURLOPT_RESUME_FROM, (p->flags & F_RESUME)? 3: 0);
  test_setopt(curl, CURLOPT_RANGE, !(p->flags & F_RESUME)?
                                   "3-1000000": (char *) NULL);
  test_setopt(curl, CURLOPT_FAILONERROR, p->flags & F_FAIL? 1: 0);
  test_setopt(curl, CURLOPT_FAILONERROR, (p->flags & F_FAIL)? 1: 0);
  hasbody = 0;
  res = curl_easy_perform(curl);
  if(res != p->result) {
    fprintf(stderr, "bad error code (%d): resume=%s, fail=%s, http416=%s, "
                    "content-range=%s, expected=%d\n", res,
                    (p->flags & F_RESUME)? "yes": "no",
                    (p->flags & F_FAIL)? "yes": "no",
Changes to jni/curl/tests/libtest/lib1522.c.
28
29
30
31
32
33
34

35
36
37
38
39
40
41

42

43
44
45
46
47
48
49
28
29
30
31
32
33
34
35
36
37
38

39
40
41
42
43
44
45
46
47
48
49
50
51







+



-



+

+







#include "memdebug.h"

static char g_Data[40 * 1024]; /* POST 40KB */

static int sockopt_callback(void *clientp, curl_socket_t curlfd,
                            curlsocktype purpose)
{
#if defined(SOL_SOCKET) && defined(SO_SNDBUF)
  int sndbufsize = 4 * 1024; /* 4KB send buffer */
  (void) clientp;
  (void) purpose;
#if defined(SOL_SOCKET) && defined(SO_SNDBUF)
  setsockopt(curlfd, SOL_SOCKET, SO_SNDBUF,
             (const char *)&sndbufsize, sizeof(sndbufsize));
#else
  (void)clientp;
  (void)curlfd;
  (void)purpose;
#endif
  return CURL_SOCKOPT_OK;
}

int test(char *URL)
{
  CURLcode code;
78
79
80
81
82
83
84

85
86
87
80
81
82
83
84
85
86
87
88
89
90







+



  }
  else {
    printf("curl_easy_perform() failed. e = %d\n", code);
  }

  curl_slist_free_all(pHeaderList);
  curl_easy_cleanup(pCurl);
  curl_global_cleanup();

  return 0;
}
Added jni/curl/tests/libtest/lib1559.c.














































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "test.h"

#include "testutil.h"
#include "warnless.h"
#include "memdebug.h"

#define EXCESSIVE 10*1000*1000
int test(char *URL)
{
  CURLcode res = 0;
  CURL *curl = NULL;
  char *longurl = malloc(EXCESSIVE);
  CURLU *u;
  (void)URL;

  memset(longurl, 'a', EXCESSIVE);
  longurl[EXCESSIVE-1] = 0;

  global_init(CURL_GLOBAL_ALL);
  easy_init(curl);

  res = curl_easy_setopt(curl, CURLOPT_URL, longurl);
  printf("CURLOPT_URL %d bytes URL == %d\n",
         EXCESSIVE, (int)res);

  res = curl_easy_setopt(curl, CURLOPT_POSTFIELDS, longurl);
  printf("CURLOPT_POSTFIELDS %d bytes data == %d\n",
         EXCESSIVE, (int)res);

  u = curl_url();
  if(u) {
    CURLUcode uc = curl_url_set(u, CURLUPART_URL, longurl, 0);
    printf("CURLUPART_URL %d bytes URL == %d\n",
           EXCESSIVE, (int)uc);
    uc = curl_url_set(u, CURLUPART_SCHEME, longurl, CURLU_NON_SUPPORT_SCHEME);
    printf("CURLUPART_SCHEME %d bytes scheme == %d\n",
           EXCESSIVE, (int)uc);
    uc = curl_url_set(u, CURLUPART_USER, longurl, 0);
    printf("CURLUPART_USER %d bytes user == %d\n",
           EXCESSIVE, (int)uc);
    curl_url_cleanup(u);
  }

  free(longurl);

  curl_easy_cleanup(curl);
  curl_global_cleanup();

  return 0;

test_cleanup:

  curl_easy_cleanup(curl);
  curl_global_cleanup();

  return res; /* return the final return code */
}
Changes to jni/curl/tests/libtest/lib1560.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
95
96
97
98
99
100
101
102


103
104
105
106
107
108
109
95
96
97
98
99
100
101

102
103
104
105
106
107
108
109
110







-
+
+








struct setcase {
  const char *in;
  const char *set;
  const char *out;
  unsigned int urlflags;
  unsigned int setflags;
  CURLUcode ucode;
  CURLUcode ucode; /* for the main URL set */
  CURLUcode pcode; /* for updating parts */
};

struct testcase {
  const char *in;
  const char *out;
  unsigned int urlflags;
  unsigned int getflags;
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
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







+
+
+













-
+
+
+
+
+
+
+







  {"file://C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"file:///C:\\programs\\foo",
   "file | [11] | [12] | [13] | [14] | [15] | C:\\programs\\foo | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
#endif
  /* URL without host name */
  {"http://a:b@/x", "",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_NO_HOST},
  {"boing:80",
   "https | [11] | [12] | [13] | boing | 80 | / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"http://[fd00:a41::50]:8080",
   "http | [11] | [12] | [13] | [fd00:a41::50] | 8080 | / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"http://[fd00:a41::50]/",
   "http | [11] | [12] | [13] | [fd00:a41::50] | [15] | / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"http://[fd00:a41::50]",
   "http | [11] | [12] | [13] | [fd00:a41::50] | [15] | / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"https://[::1%252]:1234",
   "https | [11] | [12] | [13] | [::1%252] | 1234 | / | [16] | [17]",
   "https | [11] | [12] | [13] | [::1] | 1234 | / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},

  /* here's "bad" zone id */
  {"https://[fe80::20c:29ff:fe9c:409b%eth0]:1234",
   "https | [11] | [12] | [13] | [fe80::20c:29ff:fe9c:409b] | 1234 "
   "| / | [16] | [17]",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_OK},
  {"https://127.0.0.1:443",
   "https | [11] | [12] | [13] | 127.0.0.1 | [15] | / | [16] | [17]",
   0, CURLU_NO_DEFAULT_PORT, CURLUE_OK},
  {"http://%3a:%3a@ex%0ample/%3f+?+%3f+%23#+%23%3f%g7",
   "http | : | : | [13] | [6] | [15] | /?+ |  ? # | +#?%g7",
   0, CURLU_URLDECODE, CURLUE_OK},
268
269
270
271
272
273
274




















275
276
277
278
279
280
281
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







  {"http:////user:password@example.com:1234/path/html?query=name#anchor",
   "",
   CURLU_DEFAULT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
  {NULL, NULL, 0, 0, CURLUE_OK},
};

static struct urltestcase get_url_list[] = {
  /* 40 bytes scheme is the max allowed */
  {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA://hostname/path",
   "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa://hostname/path",
   CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_OK},
  /* 41 bytes scheme is not allowed */
  {"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA://hostname/path",
   "",
   CURLU_NON_SUPPORT_SCHEME, 0, CURLUE_MALFORMED_INPUT},
  {"https://[fe80::20c:29ff:fe9c:409b%]:1234",
   "",
   0, 0, CURLUE_MALFORMED_INPUT},
  {"https://[fe80::20c:29ff:fe9c:409b%25]:1234",
   "https://[fe80::20c:29ff:fe9c:409b%2525]:1234/",
   0, 0, CURLUE_OK},
  {"https://[fe80::20c:29ff:fe9c:409b%eth0]:1234",
   "https://[fe80::20c:29ff:fe9c:409b%25eth0]:1234/",
   0, 0, CURLUE_OK},
  {"https://[::%25fakeit]/moo",
   "https://[::%25fakeit]/moo",
   0, 0, CURLUE_OK},
  {"smtp.example.com/path/html",
   "smtp://smtp.example.com/path/html",
   CURLU_GUESS_SCHEME, 0, CURLUE_OK},
  {"https.example.com/path/html",
   "http://https.example.com/path/html",
   CURLU_GUESS_SCHEME, 0, CURLUE_OK},
  {"dict.example.com/path/html",
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
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+



-
+



-
+



-
+



-
+



-
+



-
+
+
+
+
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
+



-
-
+
+







    return 1;
  }
  return 0;
}

/* !checksrc! disable SPACEBEFORECOMMA 1 */
static struct setcase set_parts_list[] = {
  {"https://example.com/",
   /* Set a 41 bytes scheme. That's too long so the old scheme remains set. */
   "scheme=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbc,",
   "https://example.com/",
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_MALFORMED_INPUT},
  {"https://example.com/",
   /* set a 40 bytes scheme */
   "scheme=bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb,",
   "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb://example.com/",
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_OK},
  {"https://[::1%25fake]:1234/",
   "zoneid=NULL,",
   "https://[::1]:1234/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://host:1234/",
   "port=NULL,",
   "https://host/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://host:1234/",
   "port=\"\",",
   "https://host:1234/",
   0, 0, CURLUE_OK, CURLUE_BAD_PORT_NUMBER},
  {"https://host:1234/",
   "port=56 78,",
   "https://host:1234/",
   0, 0, CURLUE_OK, CURLUE_MALFORMED_INPUT},
  {"https://host:1234/",
   "port=0,",
   "https://host:1234/",
   0, 0, CURLUE_OK, CURLUE_BAD_PORT_NUMBER},
  {"https://host:1234/",
   "port=65535,",
   "https://host:65535/",
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://host:1234/",
   "port=65536,",
   "https://host:1234/",
   0, 0, CURLUE_OK, CURLUE_BAD_PORT_NUMBER},
  {"https://host/",
   "path=%4A%4B%4C,",
   "https://host/%4a%4b%4c",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://host/mooo?q#f",
   "path=NULL,query=NULL,fragment=NULL,",
   "https://host/",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"https://user:secret@host/",
   "user=NULL,password=NULL,",
   "https://host/",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_OK, CURLUE_OK},
  {NULL,
   "scheme=https,user=   @:,host=foobar,",
   "https://%20%20%20%40%3a@foobar/",
   0, CURLU_URLENCODE, CURLUE_OK},
   0, CURLU_URLENCODE, CURLUE_OK, CURLUE_OK},
  {NULL,
   "scheme=https,host=  ,path= ,user= ,password= ,query= ,fragment= ,",
   "https://%20:%20@%20%20/%20?+#%20",
   0, CURLU_URLENCODE, CURLUE_OK},
   0, CURLU_URLENCODE, CURLUE_OK, CURLUE_OK},
  {NULL,
   "scheme=https,host=foobar,path=/this /path /is /here,",
   "https://foobar/this%20/path%20/is%20/here",
   0, CURLU_URLENCODE, CURLUE_OK},
   0, CURLU_URLENCODE, CURLUE_OK, CURLUE_OK},
  {NULL,
   "scheme=https,host=foobar,path=\xc3\xa4\xc3\xb6\xc3\xbc,",
   "https://foobar/%c3%a4%c3%b6%c3%bc",
   0, CURLU_URLENCODE, CURLUE_OK, CURLUE_OK},
  {"imap://user:secret;opt@host/",
   "options=updated,scheme=imaps,password=p4ssw0rd,",
   "imaps://user:p4ssw0rd;updated@host/",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_NO_HOST, CURLUE_OK},
  {"imap://user:secret;optit@host/",
   "scheme=https,",
   "https://user:secret@host/",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_NO_HOST, CURLUE_OK},
  {"file:///file#anchor",
   "scheme=https,host=example,",
   "https://example/file#anchor",
   0, 0, CURLUE_NO_HOST},
   0, 0, CURLUE_NO_HOST, CURLUE_OK},
  {NULL, /* start fresh! */
   "scheme=file,host=127.0.0.1,path=/no,user=anonymous,",
   "file:///no",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {NULL, /* start fresh! */
   "scheme=ftp,host=127.0.0.1,path=/no,user=anonymous,",
   "ftp://anonymous@127.0.0.1/no",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {NULL, /* start fresh! */
   "scheme=https,host=example.com,",
   "https://example.com/",
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK},
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_OK},
  {"http://user:foo@example.com/path?query#frag",
   "fragment=changed,",
   "http://user:foo@example.com/path?query#changed",
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK},
   0, CURLU_NON_SUPPORT_SCHEME, CURLUE_OK, CURLUE_OK},
  {"http://example.com/",
   "scheme=foo,", /* not accepted */
   "http://example.com/",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_UNSUPPORTED_SCHEME},
  {"http://example.com/",
   "scheme=https,path=/hello,fragment=snippet,",
   "https://example.com/hello#snippet",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,port=1922,",
   "http://foo@example.com:1922/",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,password=bar,",
   "http://foo:bar@example.com:80/",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "user=foo,",
   "http://foo@example.com:80/",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com",
   "host=www.example.com,",
   "http://www.example.com/",
   0, 0, CURLUE_OK},
   0, 0, CURLUE_OK, CURLUE_OK},
  {"http://example.com:80",
   "scheme=ftp,",
   "ftp://example.com:80/",
   0, 0, CURLUE_OK},
  {NULL, NULL, NULL, 0, 0, 0}
   0, 0, CURLUE_OK, CURLUE_OK},
  {NULL, NULL, NULL, 0, 0, 0, 0}
};

static CURLUPart part2id(char *part)
{
  if(!strcmp("url", part))
    return CURLUPART_URL;
  if(!strcmp("scheme", part))
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
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







+
+



-
+


+

















+
+
+

-
+
+
+

-
+
+
+






-
+







    return CURLUPART_PORT;
  if(!strcmp("path", part))
    return CURLUPART_PATH;
  if(!strcmp("query", part))
    return CURLUPART_QUERY;
  if(!strcmp("fragment", part))
    return CURLUPART_FRAGMENT;
  if(!strcmp("zoneid", part))
    return CURLUPART_ZONEID;
  return 9999; /* bad input => bad output */
}

static void updateurl(CURLU *u, const char *cmd, unsigned int setflags)
static CURLUcode updateurl(CURLU *u, const char *cmd, unsigned int setflags)
{
  const char *p = cmd;
  CURLUcode uc;

  /* make sure the last command ends with a comma too! */
  while(p) {
    char *e = strchr(p, ',');
    if(e) {
      size_t n = e-p;
      char buf[80];
      char part[80];
      char value[80];
      memcpy(buf, p, n);
      buf[n] = 0;
      if(2 == sscanf(buf, "%79[^=]=%79[^,]", part, value)) {
        CURLUPart what = part2id(part);
#if 0
        /* for debugging this */
        fprintf(stderr, "%s = %s [%d]\n", part, value, (int)what);
#endif
        if(what > CURLUPART_ZONEID)
          fprintf(stderr, "UNKNOWN part '%s'\n", part);

        if(!strcmp("NULL", value))
          curl_url_set(u, what, NULL, setflags);
          uc = curl_url_set(u, what, NULL, setflags);
        else if(!strcmp("\"\"", value))
          uc = curl_url_set(u, what, "", setflags);
        else
          curl_url_set(u, what, value, setflags);
          uc = curl_url_set(u, what, value, setflags);
        if(uc)
          return uc;
      }
      p = e + 1;
      continue;
    }
    break;
  }

  return CURLUE_OK;
}

static struct redircase set_url_list[] = {
  {"file://localhost/path?query#frag",
   "foo#another",
   "file:///foo#another",
   0, 0, 0},
623
624
625
626
627
628
629
630









631
632
633
634
635
636
637
705
706
707
708
709
710
711

712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727







-
+
+
+
+
+
+
+
+
+







    }
    if(set_parts_list[i].in)
      rc = curl_url_set(urlp, CURLUPART_URL, set_parts_list[i].in,
                        set_parts_list[i].urlflags);
    else
      rc = CURLUE_OK;
    if(!rc) {
      updateurl(urlp, set_parts_list[i].set, set_parts_list[i].setflags);
      CURLUcode uc = updateurl(urlp, set_parts_list[i].set,
                               set_parts_list[i].setflags);

      if(uc != set_parts_list[i].pcode) {
        fprintf(stderr, "updateurl\nin: %s\nreturned %d (expected %d)\n",
                set_parts_list[i].set, (int)uc, set_parts_list[i].pcode);
        error++;
      }

      rc = curl_url_get(urlp, CURLUPART_URL, &url, 0);

      if(rc) {
        fprintf(stderr, "%s:%d Get URL returned %d\n",
                __FILE__, __LINE__, (int)rc);
        error++;
      }
784
785
786
787
788
789
790
791































































































































792
793
794



795
796
797
798
799
800
801
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021








+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+



+
+
+







        curl_free(url);
      }
    }
    curl_url_cleanup(urlp);
  }
  return error;
}

static int scopeid(void)
{
  CURLU *u;
  int error = 0;
  CURLUcode rc;
  char *url;

  u = curl_url();
  rc = curl_url_set(u, CURLUPART_URL,
                    "https://[fe80::20c:29ff:fe9c:409b%25eth0]/hello.html", 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_set returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }

  rc = curl_url_get(u, CURLUPART_HOST, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_HOST returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_set(u, CURLUPART_HOST, "[::1]", 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_set CURLUPART_HOST returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }

  rc = curl_url_get(u, CURLUPART_URL, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_URL returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_set(u, CURLUPART_HOST, "example.com", 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_set CURLUPART_HOST returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }

  rc = curl_url_get(u, CURLUPART_URL, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_URL returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_set(u, CURLUPART_HOST,
                    "[fe80::20c:29ff:fe9c:409b%25eth0]", 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_set CURLUPART_HOST returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }

  rc = curl_url_get(u, CURLUPART_URL, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_URL returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_get(u, CURLUPART_HOST, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_HOST returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_get(u, CURLUPART_ZONEID, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_ZONEID returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  rc = curl_url_set(u, CURLUPART_ZONEID, "clown", 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_set CURLUPART_ZONEID returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }

  rc = curl_url_get(u, CURLUPART_URL, &url, 0);
  if(rc != CURLUE_OK) {
    fprintf(stderr, "%s:%d curl_url_get CURLUPART_URL returned %d\n",
            __FILE__, __LINE__, (int)rc);
    error++;
  }
  else {
    printf("we got %s\n", url);
    curl_free(url);
  }

  curl_url_cleanup(u);

  return error;
}

int test(char *URL)
{
  (void)URL; /* not used */

  if(scopeid())
    return 6;

  if(append())
    return 5;

  if(set_url())
    return 1;

Changes to jni/curl/tests/libtest/lib1905.c.
84
85
86
87
88
89
90

91
92
93
84
85
86
87
88
89
90
91
92
93
94







+



  curl_easy_setopt(ch, CURLOPT_SHARE, NULL);

  curl_multi_remove_handle(cm, ch);
  cleanup:
  curl_easy_cleanup(ch);
  curl_share_cleanup(sh);
  curl_multi_cleanup(cm);
  curl_global_cleanup();

  return 0;
}
Added jni/curl/tests/libtest/lib1906.c.








































































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
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "test.h"

#include "testutil.h"
#include "warnless.h"
#include "memdebug.h"

int test(char *URL)
{
  char *url_after;
  CURLU *curlu = curl_url();
  CURL *curl = curl_easy_init();
  CURLcode curl_code;
  char error_buffer[CURL_ERROR_SIZE] = "";

  curl_url_set(curlu, CURLUPART_URL, URL, CURLU_DEFAULT_SCHEME);
  curl_easy_setopt(curl, CURLOPT_CURLU, curlu);
  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, error_buffer);
  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
  /* set a port number that makes this reqeuest fail */
  curl_easy_setopt(curl, CURLOPT_PORT, 1L);
  curl_code = curl_easy_perform(curl);
  if(!curl_code)
    fprintf(stderr, "failure expected, "
            "curl_easy_perform returned %ld: <%s>, <%s>\n",
            (long) curl_code, curl_easy_strerror(curl_code), error_buffer);

  /* print the used url */
  curl_url_get(curlu, CURLUPART_URL, &url_after, 0);
  fprintf(stderr, "curlu now: <%s>\n", url_after);
  curl_free(url_after);

  /* now reset CURLOP_PORT to go back to originally set port number */
  curl_easy_setopt(curl, CURLOPT_PORT, 0L);

  curl_code = curl_easy_perform(curl);
  if(curl_code)
    fprintf(stderr, "success expected, "
            "curl_easy_perform returned %ld: <%s>, <%s>\n",
            (long) curl_code, curl_easy_strerror(curl_code), error_buffer);

  /* print url */
  curl_url_get(curlu, CURLUPART_URL, &url_after, 0);
  fprintf(stderr, "curlu now: <%s>\n", url_after);
  curl_free(url_after);

  curl_easy_cleanup(curl);
  curl_url_cleanup(curlu);
  curl_global_cleanup();

  return 0;
}
Changes to jni/curl/tests/libtest/lib509.c.
16
17
18
19
20
21
22


23
24
25
26
27
28
29
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31







+
+







 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "test.h"

#include <string.h>

/*
 * This test uses these funny custom memory callbacks for the only purpose
 * of verifying that curl_global_init_mem() functionality is present in
 * libcurl and that it works unconditionally no matter how libcurl is built,
 * nothing more.
 *
Deleted jni/curl/tests/libtest/lib536.c.
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














































































































































-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2011, 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "test.h"

#include <fcntl.h>

#include "testutil.h"
#include "warnless.h"
#include "memdebug.h"

#define TEST_HANG_TIMEOUT 60 * 1000

static int perform(CURLM *multi)
{
  int handles;
  fd_set fdread, fdwrite, fdexcep;
  int res = 0;

  for(;;) {
    struct timeval interval;
    int maxfd = -99;

    interval.tv_sec = 0;
    interval.tv_usec = 100000L; /* 100 ms */

    res_multi_perform(multi, &handles);
    if(res)
      return res;

    res_test_timedout();
    if(res)
      return res;

    if(!handles)
      break; /* done */

    FD_ZERO(&fdread);
    FD_ZERO(&fdwrite);
    FD_ZERO(&fdexcep);

    res_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd);
    if(res)
      return res;

    /* At this point, maxfd is guaranteed to be greater or equal than -1. */

    res_select_test(maxfd + 1, &fdread, &fdwrite, &fdexcep, &interval);
    if(res)
      return res;

    res_test_timedout();
    if(res)
      return res;
  }

  return 0; /* success */
}

int test(char *URL)
{
  CURLM *multi = NULL;
  CURL *easy = NULL;
  int res = 0;

  start_test_timing();

  global_init(CURL_GLOBAL_ALL);

  multi_init(multi);

  easy_init(easy);

  multi_setopt(multi, CURLMOPT_PIPELINING, 1L);

  easy_setopt(easy, CURLOPT_WRITEFUNCTION, fwrite);
  easy_setopt(easy, CURLOPT_FAILONERROR, 1L);
  easy_setopt(easy, CURLOPT_URL, URL);

  res_multi_add_handle(multi, easy);
  if(res) {
    printf("curl_multi_add_handle() 1 failed\n");
    goto test_cleanup;
  }

  res = perform(multi);
  if(res) {
    printf("retrieve 1 failed\n");
    goto test_cleanup;
  }

  curl_multi_remove_handle(multi, easy);

  curl_easy_reset(easy);

  easy_setopt(easy, CURLOPT_FAILONERROR, 1L);
  easy_setopt(easy, CURLOPT_URL, libtest_arg2);

  res_multi_add_handle(multi, easy);
  if(res) {
    printf("curl_multi_add_handle() 2 failed\n");
    goto test_cleanup;
  }

  res = perform(multi);
  if(res) {
    printf("retrieve 2 failed\n");
    goto test_cleanup;
  }

  curl_multi_remove_handle(multi, easy);

test_cleanup:

  /* undocumented cleanup sequence - type UB */

  curl_easy_cleanup(easy);
  curl_multi_cleanup(multi);
  curl_global_cleanup();

  printf("Finished!\n");

  return res;
}
Changes to jni/curl/tests/libtest/lib557.c.
118
119
120
121
122
123
124
125

126
127
128
129
130
131
132
118
119
120
121
122
123
124

125
126
127
128
129
130
131
132







-
+







static struct siglong_st  sl_test[SLONG_TESTS_ARRSZ];
static struct curloff_st  co_test[COFFT_TESTS_ARRSZ];


static int test_unsigned_short_formatting(void)
{
  int i, j;
  int num_ushort_tests;
  int num_ushort_tests = 0;
  int failed = 0;

#if (SIZEOF_SHORT == 1)

  i = 1; us_test[i].num = 0xFFU; us_test[i].expected = "256";
  i++; us_test[i].num = 0xF0U; us_test[i].expected = "240";
  i++; us_test[i].num = 0x0FU; us_test[i].expected = "15";
225
226
227
228
229
230
231
232

233
234
235
236
237
238
239
225
226
227
228
229
230
231

232
233
234
235
236
237
238
239







-
+







  return failed;
}


static int test_signed_short_formatting(void)
{
  int i, j;
  int num_sshort_tests;
  int num_sshort_tests = 0;
  int failed = 0;

#if (SIZEOF_SHORT == 1)

  i = 1; ss_test[i].num = 0x7F; ss_test[i].expected = "127";

  i++; ss_test[i].num = 0x70; ss_test[i].expected = "112";
395
396
397
398
399
400
401
402

403
404
405
406
407
408
409
395
396
397
398
399
400
401

402
403
404
405
406
407
408
409







-
+







  return failed;
}


static int test_unsigned_int_formatting(void)
{
  int i, j;
  int num_uint_tests;
  int num_uint_tests = 0;
  int failed = 0;

#if (SIZEOF_INT == 2)

  i = 1; ui_test[i].num = 0xFFFFU; ui_test[i].expected = "65535";
  i++; ui_test[i].num = 0xFF00U; ui_test[i].expected = "65280";
  i++; ui_test[i].num = 0x00FFU; ui_test[i].expected = "255";
545
546
547
548
549
550
551
552

553
554
555
556
557
558
559
545
546
547
548
549
550
551

552
553
554
555
556
557
558
559







-
+







  return failed;
}


static int test_signed_int_formatting(void)
{
  int i, j;
  int num_sint_tests;
  int num_sint_tests = 0;
  int failed = 0;

#if (SIZEOF_INT == 2)

  i = 1; si_test[i].num = 0x7FFF; si_test[i].expected = "32767";
  i++; si_test[i].num = 0x7FFE; si_test[i].expected = "32766";
  i++; si_test[i].num = 0x7FFD; si_test[i].expected = "32765";
773
774
775
776
777
778
779
780

781
782
783
784
785
786
787
773
774
775
776
777
778
779

780
781
782
783
784
785
786
787







-
+







  return failed;
}


static int test_unsigned_long_formatting(void)
{
  int i, j;
  int num_ulong_tests;
  int num_ulong_tests = 0;
  int failed = 0;

#if (SIZEOF_LONG == 2)

  i = 1; ul_test[i].num = 0xFFFFUL; ul_test[i].expected = "65535";
  i++; ul_test[i].num = 0xFF00UL; ul_test[i].expected = "65280";
  i++; ul_test[i].num = 0x00FFUL; ul_test[i].expected = "255";
922
923
924
925
926
927
928
929

930
931
932
933
934
935
936
922
923
924
925
926
927
928

929
930
931
932
933
934
935
936







-
+







  return failed;
}


static int test_signed_long_formatting(void)
{
  int i, j;
  int num_slong_tests;
  int num_slong_tests = 0;
  int failed = 0;

#if (SIZEOF_LONG == 2)

  i = 1; sl_test[i].num = 0x7FFFL; sl_test[i].expected = "32767";
  i++; sl_test[i].num = 0x7FFEL; sl_test[i].expected = "32766";
  i++; sl_test[i].num = 0x7FFDL; sl_test[i].expected = "32765";
1150
1151
1152
1153
1154
1155
1156
1157

1158
1159
1160
1161
1162
1163
1164
1150
1151
1152
1153
1154
1155
1156

1157
1158
1159
1160
1161
1162
1163
1164







-
+







  return failed;
}


static int test_curl_off_t_formatting(void)
{
  int i, j;
  int num_cofft_tests;
  int num_cofft_tests = 0;
  int failed = 0;

#if (SIZEOF_CURL_OFF_T == 2)

  i = 1; co_test[i].num = MPRNT_OFF_T_C(0x7FFF); co_test[i].expected = "32767";
  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFE); co_test[i].expected = "32766";
  i++; co_test[i].num = MPRNT_OFF_T_C(0x7FFD); co_test[i].expected = "32765";
Changes to jni/curl/tests/python_dependencies/impacket/nmb.py.


1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
9
+
+







from __future__ import print_function
from __future__ import absolute_import
# Copyright (c) 2003-2016 CORE Security Technologies
#
# This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#

36
37
38
39
40
41
42
43

44
45
46
47
48
49
50
38
39
40
41
42
43
44

45
46
47
48
49
50
51
52







-
+







import re
import select
import errno
from random import randint
from struct import pack, unpack
import time

from structure import Structure
from .structure import Structure

CVS_REVISION = '$Revision: 526 $'

# Taken from socket module reference
INADDR_ANY = '0.0.0.0'
BROADCAST_ADDR = '<broadcast>'

450
451
452
453
454
455
456
457

458
459
460
461
462
463
464
452
453
454
455
456
457
458

459
460
461
462
463
464
465
466







-
+







            try:
                s.bind(( INADDR_ANY, randint(10000, 60000) ))
                s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
                has_bind = 1
            except socket.error:
                pass
        if not has_bind:
            raise NetBIOSError, ( 'Cannot bind to a good UDP port', ERRCLASS_OS, errno.EAGAIN )
            raise NetBIOSError( 'Cannot bind to a good UDP port', ERRCLASS_OS, errno.EAGAIN)
        self.__sock = s

    # Set the default NetBIOS domain nameserver.
    def set_nameserver(self, nameserver):
        self.__nameserver = nameserver

    # Return the default NetBIOS domain nameserver, or None if none is specified.
527
528
529
530
531
532
533
534

535
536
537
538
539
540

541
542

543
544
545
546
547
548
549
529
530
531
532
533
534
535

536
537
538
539
540
541

542
543

544
545
546
547
548
549
550
551







-
+





-
+

-
+







                    
                    res = NetBIOSPacket(data)
                    if res.get_trn_id() == p.get_trn_id():
                        if res.get_rcode():
                            if res.get_rcode() == 0x03:
                                return None
                            else:
                                raise NetBIOSError, ( 'Negative name query response', ERRCLASS_QUERY, res.get_rcode() )
                                raise NetBIOSError( 'Negative name query response', ERRCLASS_QUERY, res.get_rcode())
                        
                        if res.get_ancount() != 1:
                            raise NetBIOSError( 'Malformed response')
                        
                        return NBPositiveNameQueryResponse(res.get_answers())
            except select.error, ex:
            except select.error as ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    raise NetBIOSError, ( 'Error occurs while waiting for response', ERRCLASS_OS, ex[0] )
                    raise NetBIOSError( 'Error occurs while waiting for response', ERRCLASS_OS, ex[0])
                raise


    def __querynodestatus(self, nbname, destaddr, type, scope, timeout):
        self._setup_connection(destaddr)
        trn_id = randint(1, 32000)
        p = NetBIOSPacket()
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
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







-
-
+
+






-
+

-
+



-
+

-
-
-
+
+
+







                        # Retry again until tries == 0
                        tries -= 1
                    else:
                        raise NetBIOSTimeout
                else:
                    try:
                        data, _ = self.__sock.recvfrom(65536, 0)
                    except Exception, e:
                        raise NetBIOSError, "recvfrom error: %s" % str(e)
                    except Exception as e:
                        raise NetBIOSError("recvfrom error: %s" % str(e))
                    self.__sock.close()
                    res = NetBIOSPacket(data)
                    if res.get_trn_id() == p.get_trn_id():
                        if res.get_rcode():
                            if res.get_rcode() == 0x03:
                                # I'm just guessing here
                                raise NetBIOSError, "Cannot get data from server"
                                raise NetBIOSError("Cannot get data from server")
                            else:
                                raise NetBIOSError, ( 'Negative name query response', ERRCLASS_QUERY, res.get_rcode() )
                                raise NetBIOSError( 'Negative name query response', ERRCLASS_QUERY, res.get_rcode())
                        answ = NBNodeStatusResponse(res.get_answers())
                        self.mac = answ.get_mac()
                        return answ.get_node_names()
            except select.error, ex:
            except select.error as ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    raise NetBIOSError, ( 'Error occurs while waiting for response', ERRCLASS_OS, ex[0] )
            except socket.error, ex:
                raise NetBIOSError, 'Connection error: %s' % str(ex)
                    raise NetBIOSError( 'Error occurs while waiting for response', ERRCLASS_OS, ex[0])
            except socket.error as ex:
                raise NetBIOSError('Connection error: %s' % str(ex))

# Perform first and second level encoding of name as specified in RFC 1001 (Section 4)
def encode_name(name, type, scope):
    if name == '*':
        name += '\0' * 15
    elif len(name) > 15:
        name = name[:15] + chr(type)
837
838
839
840
841
842
843
844

845
846
847
848
849
850
851
839
840
841
842
843
844
845

846
847
848
849
850
851
852
853







-
+









    def _setup_connection(self, peer):
        try:
            af, socktype, proto, canonname, sa = socket.getaddrinfo(peer[0], peer[1], 0, socket.SOCK_STREAM)[0]
            sock = socket.socket(af, socktype, proto)
            sock.connect(sa)
        except socket.error, e:
        except socket.error as e:
            raise socket.error("Connection error (%s:%s)" % (peer[0], peer[1]), e)
        return sock

    def send_packet(self, data):
        p = NetBIOSSessionPacket()
        p.set_type(NETBIOS_SESSION_MESSAGE)
        p.set_trailer(data)
862
863
864
865
866
867
868
869

870
871
872
873
874
875
876
864
865
866
867
868
869
870

871
872
873
874
875
876
877
878







-
+







        p.set_type(NETBIOS_SESSION_REQUEST)
        p.set_trailer(remote_name + myname)

        self._sock.send(p.rawData())
        while 1:
            p = self.recv_packet(timeout)
            if p.get_type() == NETBIOS_SESSION_NEGATIVE_RESPONSE:
                raise NetBIOSError, ( 'Cannot request session', ERRCLASS_SESSION, ord(p.get_trailer()[0]) )
                raise NetBIOSError( 'Cannot request session', ERRCLASS_SESSION, ord(p.get_trailer()[0]))
            elif p.get_type() == NETBIOS_SESSION_POSITIVE_RESPONSE:
                break
            else:
                # Ignore all other messages, most probably keepalive messages
                pass

    def polling_read(self, read_length, timeout):
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
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







-
+



-
+

-
+
















-
+



-
+

-
+







                    else:
                        time.sleep(CHUNK_TIME)
                        time_left -= CHUNK_TIME
                        continue

                received = self._sock.recv(bytes_left)
                if len(received) == 0:
                    raise NetBIOSError, ( 'Error while reading from remote', ERRCLASS_OS, None)
                    raise NetBIOSError( 'Error while reading from remote', ERRCLASS_OS, None)

                data = data + received
                bytes_left = read_length - len(data)
            except select.error, ex:
            except select.error as ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    raise NetBIOSError, ( 'Error occurs while reading from remote', ERRCLASS_OS, ex[0] )
                    raise NetBIOSError( 'Error occurs while reading from remote', ERRCLASS_OS, ex[0])

        return data

    def non_polling_read(self, read_length, timeout):
        data = ''
        bytes_left = read_length

        while bytes_left > 0:
            try:
                ready, _, _ = select.select([self._sock.fileno() ], [ ], [ ], timeout)

                if not ready:
                        raise NetBIOSTimeout

                received = self._sock.recv(bytes_left)
                if len(received) == 0:
                    raise NetBIOSError, ( 'Error while reading from remote', ERRCLASS_OS, None)
                    raise NetBIOSError( 'Error while reading from remote', ERRCLASS_OS, None)

                data = data + received
                bytes_left = read_length - len(data)
            except select.error, ex:
            except select.error as ex:
                if ex[0] != errno.EINTR and ex[0] != errno.EAGAIN:
                    raise NetBIOSError, ( 'Error occurs while reading from remote', ERRCLASS_OS, ex[0] )
                    raise NetBIOSError( 'Error occurs while reading from remote', ERRCLASS_OS, ex[0])

        return data

    def __read(self, timeout = None):
        data = self.read_function(4, timeout)
        type, flags, length = unpack('>ccH', data)
        if ord(type) == NETBIOS_SESSION_MESSAGE:
970
971
972
973
974
975
976
977

978
979
980
972
973
974
975
976
977
978

979
980
981
982







-
+



                continue
            else:
                return addrs
        raise Exception("Host not found")
                
    
    n = get_netbios_host_by_name("some-host")
    print n
    print(n)

if __name__ == '__main__':
    main()
Changes to jni/curl/tests/python_dependencies/impacket/ntlm.py.

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
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
+



















-
-
+
+







from __future__ import print_function
# Copyright (c) 2003-2016 CORE Security Technologies:
#
# This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
import base64
import struct
import calendar
import time
import hashlib
import random
import string
import binascii

from impacket.structure import Structure
from impacket import LOG


# This is important. NTLMv2 is not negotiated by the client or server. 
# It is used if set locally on both sides. Change this item if you don't want to use 
# This is important. NTLMv2 is not negotiated by the client or server.
# It is used if set locally on both sides. Change this item if you don't want to use
# NTLMv2 by default and fall back to NTLMv1 (with EXTENDED_SESSION_SECURITY or not)
# Check the following links:
# http://davenport.sourceforge.net/ntlm.html
# http://blogs.msdn.com/b/openspecification/archive/2010/04/20/ntlm-keys-and-sundry-stuff.aspx
# http://social.msdn.microsoft.com/Forums/en-US/os_interopscenarios/thread/c8f488ed-1b96-4e06-bd65-390aa41138d1/
# So I'm setting a global variable to control this, this can also be set programmatically

205
206
207
208
209
210
211
212

213
214
215
216
217
218
219
206
207
208
209
210
211
212

213
214
215
216
217
218
219
220







-
+







        if data is not None:
            self.fromString(data)

    def __setitem__(self,key,value):
        self.fields[key] = (len(value),value)

    def __getitem__(self, key):
        if self.fields.has_key(key):
        if key in self.fields:
           return self.fields[key]
        return None

    def __delitem__(self, key):
        del self.fields[key]

    def __len__(self):
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
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







-
+


-
+





-
+














-
+















-
+
















-
+







            tInfo = tInfo[struct.calcsize('<H'):]
            content = tInfo[:length]
            self.fields[fType]=(length,content)
            tInfo = tInfo[length:]

    def dump(self):
        for i in self.fields.keys():
            print "%s: {%r}" % (i,self[i])
            print("%s: {%r}" % (i,self[i]))

    def getData(self):
        if self.fields.has_key(NTLMSSP_AV_EOL):
        if NTLMSSP_AV_EOL in self.fields:
            del self.fields[NTLMSSP_AV_EOL]
        ans = ''
        for i in self.fields.keys():
            ans+= struct.pack('<HH', i, self[i][0])
            ans+= self[i][1]
 

        # end with a NTLMSSP_AV_EOL
        ans += struct.pack('<HH', NTLMSSP_AV_EOL, 0)

        return ans

class NTLMAuthMixin:
    def get_os_version(self):
        if self['os_version'] == '':
            return None
        else:
            mayor_v = struct.unpack('B',self['os_version'][0])[0]
            minor_v = struct.unpack('B',self['os_version'][1])[0]
            build_v = struct.unpack('H',self['os_version'][2:4])
            return (mayor_v,minor_v,build_v)
        

class NTLMAuthNegotiate(Structure, NTLMAuthMixin):

    structure = (
        ('','"NTLMSSP\x00'),
        ('message_type','<L=1'),
        ('flags','<L'),
        ('domain_len','<H-domain_name'),
        ('domain_max_len','<H-domain_name'),
        ('domain_offset','<L=0'),
        ('host_len','<H-host_name'),
        ('host_maxlen','<H-host_name'),
        ('host_offset','<L=0'),
        ('os_version',':'),
        ('host_name',':'),
        ('domain_name',':'))
                                                                                

    def __init__(self):
        Structure.__init__(self)
        self['flags']= (
               NTLMSSP_NEGOTIATE_128     |
               NTLMSSP_NEGOTIATE_KEY_EXCH|
               # NTLMSSP_LM_KEY      |
               NTLMSSP_NEGOTIATE_NTLM    |
               NTLMSSP_NEGOTIATE_UNICODE     |
               # NTLMSSP_ALWAYS_SIGN |
               NTLMSSP_NEGOTIATE_SIGN        |
               NTLMSSP_NEGOTIATE_SEAL        |
               # NTLMSSP_TARGET      |
               0)
        self['host_name']=''
        self['domain_name']=''
        self['os_version']=''
    

    def getData(self):
        if len(self.fields['host_name']) > 0:
            self['flags'] |= NTLMSSP_NEGOTIATE_OEM_WORKSTATION_SUPPLIED
        if len(self.fields['domain_name']) > 0:
            self['flags'] |= NTLMSSP_NEGOTIATE_OEM_DOMAIN_SUPPLIED
        if len(self.fields['os_version']) > 0:
            self['flags'] |= NTLMSSP_NEGOTIATE_VERSION
338
339
340
341
342
343
344
345

346
347
348
349
350
351
352
339
340
341
342
343
344
345

346
347
348
349
350
351
352
353







-
+







        ('domain_offset','<L=40'),
        ('flags','<L=0'),
        ('challenge','8s'),
        ('reserved','8s=""'),
        ('TargetInfoFields_len','<H-TargetInfoFields'),
        ('TargetInfoFields_max_len','<H-TargetInfoFields'),
        ('TargetInfoFields_offset','<L'),
        ('VersionLen','_-Version','self.checkVersion(self["flags"])'), 
        ('VersionLen','_-Version','self.checkVersion(self["flags"])'),
        ('Version',':'),
        ('domain_name',':'),
        ('TargetInfoFields',':'))

    def checkVersion(self, flags):
        if flags is not None:
           if flags & NTLMSSP_NEGOTIATE_VERSION == 0:
361
362
363
364
365
366
367
368

369
370
371
372

373
374
375
376
377
378
379
362
363
364
365
366
367
368

369
370
371
372

373
374
375
376
377
378
379
380







-
+



-
+








    def fromString(self,data):
        Structure.fromString(self,data)
        # Just in case there's more data after the TargetInfoFields
        self['TargetInfoFields'] = self['TargetInfoFields'][:self['TargetInfoFields_len']]
        # We gotta process the TargetInfoFields
        #if self['TargetInfoFields_len'] > 0:
        #    av_pairs = AV_PAIRS(self['TargetInfoFields'][:self['TargetInfoFields_len']]) 
        #    av_pairs = AV_PAIRS(self['TargetInfoFields'][:self['TargetInfoFields_len']])
        #    self['TargetInfoFields'] = av_pairs

        return self
        

class NTLMAuthChallengeResponse(Structure, NTLMAuthMixin):

    structure = (
        ('','"NTLMSSP\x00'),
        ('message_type','<L=3'),
        ('lanman_len','<H-lanman'),
        ('lanman_max_len','<H-lanman'),
390
391
392
393
394
395
396
397

398
399
400
401
402
403
404
391
392
393
394
395
396
397

398
399
400
401
402
403
404
405







-
+







        ('host_len','<H-host_name'),
        ('host_max_len','<H-host_name'),
        ('host_offset','<L'),
        ('session_key_len','<H-session_key'),
        ('session_key_max_len','<H-session_key'),
        ('session_key_offset','<L'),
        ('flags','<L'),
        ('VersionLen','_-Version','self.checkVersion(self["flags"])'), 
        ('VersionLen','_-Version','self.checkVersion(self["flags"])'),
        ('Version',':=""'),
        ('MICLen','_-MIC','self.checkMIC(self["flags"])'),
        ('MIC',':=""'),
        ('domain_name',':'),
        ('user_name',':'),
        ('host_name',':'),
        ('lanman',':'),
420
421
422
423
424
425
426
427

428
429
430
431
432
433
434
421
422
423
424
425
426
427

428
429
430
431
432
433
434
435







-
+







           NTLMSSP_NEGOTIATE_UNICODE     |
           # NTLMSSP_ALWAYS_SIGN |
           NTLMSSP_NEGOTIATE_SIGN        |
           NTLMSSP_NEGOTIATE_SEAL        |
           # NTLMSSP_TARGET      |
           0)
        # Here we do the stuff
        if username and ( lmhash != '' or nthash != ''):            
        if username and ( lmhash != '' or nthash != ''):
            self['lanman'] = get_ntlmv1_response(lmhash, challenge)
            self['ntlm'] = get_ntlmv1_response(nthash, challenge)
        elif (username and password):
            lmhash = compute_lmhash(password)
            nthash = compute_nthash(password)
            self['lanman']=get_ntlmv1_response(lmhash, challenge)
            self['ntlm']=get_ntlmv1_response(nthash, challenge)    # This is not used for LM_KEY nor NTLM_KEY
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
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







-
+












-
+














-
-
+
+


-
+



-
+








    def checkMIC(self, flags):
        # TODO: Find a proper way to check the MIC is in there
        if flags is not None:
           if flags & NTLMSSP_NEGOTIATE_VERSION == 0:
              return 0
        return 16
                                                                                

    def getData(self):
        self['domain_offset']=64+self.checkMIC(self["flags"])+self.checkVersion(self["flags"])
        self['user_offset']=64+self.checkMIC(self["flags"])+self.checkVersion(self["flags"])+len(self['domain_name'])
        self['host_offset']=self['user_offset']+len(self['user_name'])
        self['lanman_offset']=self['host_offset']+len(self['host_name'])
        self['ntlm_offset']=self['lanman_offset']+len(self['lanman'])
        self['session_key_offset']=self['ntlm_offset']+len(self['ntlm'])
        return Structure.getData(self)

    def fromString(self,data):
        Structure.fromString(self,data)
        # [MS-NLMP] page 27
        # Payload data can be present in any order within the Payload field, 
        # Payload data can be present in any order within the Payload field,
        # with variable-length padding before or after the data

        domain_offset = self['domain_offset']
        domain_end = self['domain_len'] + domain_offset
        self['domain_name'] = data[ domain_offset : domain_end ]

        host_offset = self['host_offset']
        host_end    = self['host_len'] + host_offset
        self['host_name'] = data[ host_offset: host_end ]

        user_offset = self['user_offset']
        user_end    = self['user_len'] + user_offset
        self['user_name'] = data[ user_offset: user_end ]

        ntlm_offset = self['ntlm_offset'] 
        ntlm_end    = self['ntlm_len'] + ntlm_offset 
        ntlm_offset = self['ntlm_offset']
        ntlm_end    = self['ntlm_len'] + ntlm_offset
        self['ntlm'] = data[ ntlm_offset : ntlm_end ]

        lanman_offset = self['lanman_offset'] 
        lanman_offset = self['lanman_offset']
        lanman_end    = self['lanman_len'] + lanman_offset
        self['lanman'] = data[ lanman_offset : lanman_end]

        #if len(data) >= 36: 
        #if len(data) >= 36:
        #    self['os_version'] = data[32:36]
        #else:
        #    self['os_version'] = ''

class ImpacketStructure(Structure):
    def set_parent(self, other):
        self.parent = other
603
604
605
606
607
608
609
610

611
612
613
614

615
616
617
618
619
620
621
604
605
606
607
608
609
610

611
612
613
614

615
616
617
618
619
620
621
622







-
+



-
+







            domain = user.decode(encoding)

    ntlmChallenge = NTLMAuthChallenge(type2)

    # Let's start with the original flags sent in the type1 message
    responseFlags = type1['flags']

    # Token received and parsed. Depending on the authentication 
    # Token received and parsed. Depending on the authentication
    # method we will create a valid ChallengeResponse
    ntlmChallengeResponse = NTLMAuthChallengeResponse(user, password, ntlmChallenge['challenge'])

    clientChallenge = "".join([random.choice(string.digits+string.letters) for i in xrange(8)])
    clientChallenge = "".join([random.choice(string.digits+string.letters) for i in range(8)])

    serverName = ntlmChallenge['TargetInfoFields']

    ntResponse, lmResponse, sessionBaseKey = computeResponse(ntlmChallenge['flags'], ntlmChallenge['challenge'], clientChallenge, serverName, domain, user, password, lmhash, nthash, use_ntlmv2 )

    # Let's check the return flags
    if (ntlmChallenge['flags'] & NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY) == 0:
643
644
645
646
647
648
649
650

651
652
653
654
655
656
657
644
645
646
647
648
649
650

651
652
653
654
655
656
657
658







-
+







    if user == '' and password == '' and lmhash == '' and nthash == '':
      keyExchangeKey = '\x00'*16

    # If we set up key exchange, let's fill the right variables
    if ntlmChallenge['flags'] & NTLMSSP_NEGOTIATE_KEY_EXCH:
       # not exactly what I call random tho :\
       # exportedSessionKey = this is the key we should use to sign
       exportedSessionKey = "".join([random.choice(string.digits+string.letters) for i in xrange(16)])
       exportedSessionKey = "".join([random.choice(string.digits+string.letters) for i in range(16)])
       #exportedSessionKey = "A"*16
       #print "keyExchangeKey %r" % keyExchangeKey
       # Let's generate the right session key based on the challenge flags
       #if responseFlags & NTLMSSP_NTLM2_KEY:
           # Extended session security enabled
       #    if responseFlags & NTLMSSP_KEY_128:
               # Full key
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
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







-
+










-
+



-
+

-
+


















-
+













-
+










+
+






-
+







       # [MS-NLMP] page 46
       exportedSessionKey        = keyExchangeKey

    ntlmChallengeResponse['flags'] = responseFlags
    ntlmChallengeResponse['domain_name'] = domain.encode('utf-16le')
    ntlmChallengeResponse['lanman'] = lmResponse
    ntlmChallengeResponse['ntlm'] = ntResponse
    if encryptedRandomSessionKey is not None: 
    if encryptedRandomSessionKey is not None:
        ntlmChallengeResponse['session_key'] = encryptedRandomSessionKey

    return ntlmChallengeResponse, exportedSessionKey


# NTLMv1 Algorithm

def generateSessionKeyV1(password, lmhash, nthash):
    if POW:
        hash = POW.Digest(POW.MD4_DIGEST)
    else:        
    else:
        hash = MD4.new()
    hash.update(NTOWFv1(password, lmhash, nthash))
    return hash.digest()
    

def computeResponseNTLMv1(flags, serverChallenge, clientChallenge, serverName, domain, user, password, lmhash='', nthash='', use_ntlmv2 = USE_NTLMv2):
    if (user == '' and password == ''): 
    if (user == '' and password == ''):
        # Special case for anonymous authentication
        lmResponse = ''
        ntResponse = ''
    else:
        lmhash = LMOWFv1(password, lmhash, nthash)
        nthash = NTOWFv1(password, lmhash, nthash)
        if flags & NTLMSSP_NEGOTIATE_LM_KEY:
           ntResponse = ''
           lmResponse = get_ntlmv1_response(lmhash, serverChallenge)
        elif flags & NTLMSSP_NEGOTIATE_EXTENDED_SESSIONSECURITY:
           md5 = hashlib.new('md5')
           chall = (serverChallenge + clientChallenge)
           md5.update(chall)
           ntResponse = ntlmssp_DES_encrypt(nthash, md5.digest()[:8])
           lmResponse = clientChallenge + '\x00'*16
        else:
           ntResponse = get_ntlmv1_response(nthash,serverChallenge)
           lmResponse = get_ntlmv1_response(lmhash, serverChallenge)
   

    sessionBaseKey = generateSessionKeyV1(password, lmhash, nthash)
    return ntResponse, lmResponse, sessionBaseKey

def compute_lmhash(password):
    # This is done according to Samba's encryption specification (docs/html/ENCRYPTION.html)
    password = password.upper()
    lmhash  = __DES_block(password[:7], KNOWN_DES_INPUT)
    lmhash += __DES_block(password[7:14], KNOWN_DES_INPUT)
    return lmhash

def NTOWFv1(password, lmhash = '', nthash=''):
    if nthash != '':
       return nthash
    return compute_nthash(password)   
    return compute_nthash(password)

def LMOWFv1(password, lmhash = '', nthash=''):
    if lmhash != '':
       return lmhash
    return compute_lmhash(password)

def compute_nthash(password):
    # This is done according to Samba's encryption specification (docs/html/ENCRYPTION.html)
    try:
        password = unicode(password).encode('utf_16le')
    except NameError:  # unicode() was removed in Python 3
        password = str(password).encode('utf_16le')
    except UnicodeDecodeError:
        import sys
        password = password.decode(sys.getfilesystemencoding()).encode('utf_16le')

    if POW:
        hash = POW.Digest(POW.MD4_DIGEST)
    else:        
    else:
        hash = MD4.new()
    hash.update(password)
    return hash.digest()

def get_ntlmv1_response(key, challenge):
    return ntlmssp_DES_encrypt(key, challenge)

776
777
778
779
780
781
782
783

784
785
786
787
788
789
790
779
780
781
782
783
784
785

786
787
788
789
790
791
792
793







-
+







       messageSignature['Checksum'] = struct.pack('<i',binascii.crc32(message))
       messageSignature['RandomPad'] = 0
       messageSignature['RandomPad'] = handle(struct.pack('<i',messageSignature['RandomPad']))
       messageSignature['Checksum'] = struct.unpack('<i',handle(messageSignature['Checksum']))[0]
       messageSignature['SeqNum'] = handle('\x00\x00\x00\x00')
       messageSignature['SeqNum'] = struct.unpack('<i',messageSignature['SeqNum'])[0] ^ seqNum
       messageSignature['RandomPad'] = 0
       

   return messageSignature

def SEAL(flags, signingKey, sealingKey, messageToSign, messageToEncrypt, seqNum, handle):
   sealedMessage = handle(messageToEncrypt)
   signature = MAC(flags, handle, signingKey, seqNum, messageToSign)
   return sealedMessage, signature

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
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







-
+














-
+







          keyExchangeKey = LMOWFv1(password,lmhash)[:8] + '\x00'*8
       else:
          keyExchangeKey = sessionBaseKey
   else:
       raise "Can't create a valid KXKEY!"

   return keyExchangeKey
      

def hmac_md5(key, data):
    if POW:
        h = POW.Hmac(POW.MD5_DIGEST, key)
        h.update(data)
        result = h.mac()
    else:
        import hmac
        h = hmac.new(key)
        h.update(data)
        result = h.digest()
    return result

def NTOWFv2( user, password, domain, hash = ''):
    if hash != '':
       theHash = hash 
       theHash = hash
    else:
       theHash = compute_nthash(password)
    return hmac_md5(theHash, user.upper().encode('utf-16le') + domain.encode('utf-16le'))

def LMOWFv2( user, password, domain, lmhash = ''):
    return NTOWFv2( user, password, domain, lmhash)

903
904
905
906
907
908
909
910

911
912
913
914
915
916
917
906
907
908
909
910
911
912

913
914
915
916
917
918
919
920







-
+







    if av_pairs[NTLMSSP_AV_TIME] is not None:
       aTime = av_pairs[NTLMSSP_AV_TIME][1]
    else:
       aTime = struct.pack('<q', (116444736000000000 + calendar.timegm(time.gmtime()) * 10000000) )
       #aTime = '\x00'*8
       av_pairs[NTLMSSP_AV_TIME] = aTime
    serverName = av_pairs.getData()
          

    ######################
    #aTime = '\x00'*8
    ######################
    temp = responseServerVersion + hiResponseServerVersion + '\x00' * 6 + aTime + clientChallenge + '\x00' * 4 + serverName + '\x00' * 4

    ntProofStr = hmac_md5(responseKeyNT, serverChallenge + temp)

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
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








-
+






-
+





-
+

















-
    @classmethod
    def get_instace(cls,msg_64):
        msg = None
        msg_type = 0
        if msg_64 != '':
            msg = base64.b64decode(msg_64[5:]) # Remove the 'NTLM '
            msg_type = ord(msg[8])
    

        for _cls in NTLM_HTTP.__subclasses__():
            if msg_type == _cls.MSG_TYPE:
                instance = _cls()
                instance.fromString(msg)
                return instance

    

class NTLM_HTTP_AuthRequired(NTLM_HTTP):
    commonHdr = ()
    # Message 0 means the first HTTP request e.g. 'GET /bla.png'
    MSG_TYPE = 0

    def fromString(self,data): 
    def fromString(self,data):
        pass


class NTLM_HTTP_AuthNegotiate(NTLM_HTTP, NTLMAuthNegotiate):
    commonHdr = ()
    MSG_TYPE = 1

    def __init__(self):
        NTLMAuthNegotiate.__init__(self)


class NTLM_HTTP_AuthChallengeResponse(NTLM_HTTP, NTLMAuthChallengeResponse):
    commonHdr = ()
    MSG_TYPE = 3

    def __init__(self):
        NTLMAuthChallengeResponse.__init__(self)

Changes to jni/curl/tests/python_dependencies/impacket/smb.py.
625
626
627
628
629
630
631
632

633
634

635
636
637
638
639
640
641
625
626
627
628
629
630
631

632
633

634
635
636
637
638
639
640
641







-
+

-
+








    def __repr__(self):
        return '<SharedFile instance: shortname="' + self.__shortname + '", longname="' + self.__longname + '", filesize=' + str(self.__filesize) + '>'

    @staticmethod
    def __convert_smbtime(t):
        x = t >> 32
        y = t & 0xffffffffL
        y = t & 0xffffffff
        geo_cal_offset = 11644473600.0  # = 369.0 * 365.25 * 24 * 60 * 60 - (3.0 * 24 * 60 * 60 + 6.0 * 60 * 60)
        return (x * 4.0 * (1 << 30) + (y & 0xfff00000L)) * 1.0e-7 - geo_cal_offset
        return (x * 4.0 * (1 << 30) + (y & 0xfff00000)) * 1.0e-7 - geo_cal_offset


# Contain information about a SMB machine
class SMBMachine:
    def __init__(self, nbname, nbt_type, comment):
        self.__nbname = nbname
        self.__type = nbt_type
672
673
674
675
676
677
678
679

680
681

682
683
684

685
686
687
688
689
690
691
672
673
674
675
676
677
678

679
680

681
682
683

684
685
686
687
688
689
690
691







-
+

-
+


-
+







        ('Mid','<H=0'),
        ('Data','*:'),
    )

    def __init__(self, **kargs):
        Structure.__init__(self, **kargs)

        if self.fields.has_key('Flags2') is False:
        if ('Flags2' in self.fields) is False:
             self['Flags2'] = 0
        if self.fields.has_key('Flags1') is False:
        if ('Flags1' in self.fields) is False:
             self['Flags1'] = 0

        if not kargs.has_key('data'):
        if 'data' not in kargs:
            self['Data'] = []

    def addCommand(self, command):
        if len(self['Data']) == 0:
            self['Command'] = command.command
        else:
            self['Data'][-1]['Parameters']['AndXCommand'] = command.command
705
706
707
708
709
710
711
712

713
714

715
716
717
718
719
720
721
705
706
707
708
709
710
711

712
713

714
715
716
717
718
719
720
721







-
+

-
+







            if (self['ErrorClass'] == 0x00 and
                self['ErrorCode']  == 0x00):
                    return 1
            elif self.isMoreData():
                return 1
            elif self.isMoreProcessingRequired():
                return 1
            raise SessionError, ("SMB Library Error", self['ErrorClass'] + (self['_reserved'] << 8), self['ErrorCode'], self['Flags2'] & SMB.FLAGS2_NT_STATUS)
            raise SessionError("SMB Library Error", self['ErrorClass'] + (self['_reserved'] << 8), self['ErrorCode'], self['Flags2'] & SMB.FLAGS2_NT_STATUS)
        else:
            raise UnsupportedFeature, ("Unexpected answer from server: Got %d, Expected %d" % (self['Command'], cmd))
            raise UnsupportedFeature("Unexpected answer from server: Got %d, Expected %d" % (self['Command'], cmd))


class SMBCommand(Structure):
    structure = (
        ('WordCount', 'B=len(Parameters)/2'),
        ('_ParametersLength','_-Parameters','WordCount*2'),
        ('Parameters',':'),             # default set by constructor
2546
2547
2548
2549
2550
2551
2552
2553

2554
2555
2556
2557
2558
2559
2560
2546
2547
2548
2549
2550
2551
2552

2553
2554
2555
2556
2557
2558
2559
2560







-
+







    def isValidAnswer(s, cmd):
        while 1:
            if s.rawData():
                if s.get_command() == cmd:
                    if s.get_error_class() == 0x00 and s.get_error_code() == 0x00:
                        return 1
                    else:
                        raise SessionError, ( "SMB Library Error", s.get_error_class()+ (s.get_reserved() << 8), s.get_error_code() , s.get_flags2() & SMB.FLAGS2_NT_STATUS )
                        raise SessionError( "SMB Library Error", s.get_error_class()+ (s.get_reserved() << 8), s.get_error_code() , s.get_flags2() & SMB.FLAGS2_NT_STATUS)
                else:
                    break
        return 0

    def neg_session(self, extended_security = True, negPacket = None):
        def parsePacket(smb):
            if smb.isValidAnswer(SMB.SMB_COM_NEGOTIATE):
2579
2580
2581
2582
2583
2584
2585
2586

2587
2588
2589
2590
2591
2592
2593
2579
2580
2581
2582
2583
2584
2585

2586
2587
2588
2589
2590
2591
2592
2593







-
+








                # If not, let's try the old way
                else:
                    if self._dialects_data['ServerName'] is not None:
                        self.__server_name = self._dialects_data['ServerName']

                    if self._dialects_parameters['DialectIndex'] == 0xffff:
                        raise UnsupportedFeature,"Remote server does not know NT LM 0.12"
                        raise UnsupportedFeature("Remote server does not know NT LM 0.12")
                    return 1
            else:
                return 0

        if negPacket is None:
            smb = NewSMBPacket()
            negSession = SMBCommand(SMB.SMB_COM_NEGOTIATE)
2730
2731
2732
2733
2734
2735
2736
2737

2738
2739
2740
2741
2742
2743
2744
2730
2731
2732
2733
2734
2735
2736

2737
2738
2739
2740
2741
2742
2743
2744







-
+







    def get_session_key(self):
        return self._SigningSessionKey

    def set_session_key(self, key):
        self._SigningSessionKey = key

    def get_encryption_key(self):
        if self._dialects_data.fields.has_key('Challenge'):
        if 'Challenge' in self._dialects_data.fields:
            return self._dialects_data['Challenge']
        else:
            return None

    def get_server_time(self):
        timestamp = self._dialects_parameters['HighDateTime']
        timestamp <<= 32
3237
3238
3239
3240
3241
3242
3243
3244

3245
3246
3247
3248
3249
3250
3251
3237
3238
3239
3240
3241
3242
3243

3244
3245
3246
3247
3248
3249
3250
3251







-
+







                   try:
                       self.__server_dns_domain_name = av_pairs[ntlm.NTLMSSP_AV_DNS_DOMAINNAME][1].decode('utf-16le')
                   except:
                       # For some reason, we couldn't decode Unicode here.. silently discard the operation
                       pass

            # Parse Version to know the target Operating system name. Not provided elsewhere anymore
            if ntlmChallenge.fields.has_key('Version'):
            if 'Version' in ntlmChallenge.fields:
                version = ntlmChallenge['Version']

                if len(version) >= 4:
                   self.__server_os_major, self.__server_os_minor, self.__server_os_build = unpack('<BBH',version[:4])

            type3, exportedSessionKey = ntlm.getNTLMSSPType3(auth, respToken['ResponseToken'], user, password, domain, lmhash, nthash, use_ntlmv2 = use_ntlmv2)

Changes to jni/curl/tests/python_dependencies/impacket/smb3.py.

1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
+







from __future__ import print_function
# Copyright (c) 2003-2016 CORE Security Technologies
#
# This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Author: Alberto Solino (@agsolino)
227
228
229
230
231
232
233
234

235
236
237
238



239
240

241
242
243
244
245
246
247
228
229
230
231
232
233
234

235
236



237
238
239
240

241
242
243
244
245
246
247
248







-
+

-
-
-
+
+
+

-
+







            self._NetBIOSSession = session
            # We should increase the SequenceWindow since a packet was already received.
            self._Connection['SequenceWindow'] += 1
            # Let's negotiate again using the same connection
            self.negotiateSession(preferredDialect)

    def printStatus(self):
        print "CONNECTION"
        print("CONNECTION")
        for i in self._Connection.items():
            print "%-40s : %s" % i
        print
        print "SESSION"
            print("%-40s : %s" % i)
        print()
        print("SESSION")
        for i in self._Session.items():
            print "%-40s : %s" % i
            print("%-40s : %s" % i)

    def getServerName(self):
        return self._Session['ServerName']

    def getServerIP(self):
        return self._Connection['ServerIP']

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
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







-
+









-
+







        # Check this is not a CANCEL request. If so, don't consume sequece numbers
        if packet['Command'] is not SMB2_CANCEL:
            packet['MessageID'] = self._Connection['SequenceWindow']
            self._Connection['SequenceWindow'] += 1
        packet['SessionID'] = self._Session['SessionID']

        # Default the credit charge to 1 unless set by the caller
        if packet.fields.has_key('CreditCharge') is False:
        if ('CreditCharge' in packet.fields) is False:
            packet['CreditCharge'] = 1

        # Standard credit request after negotiating protocol
        if self._Connection['SequenceWindow'] > 3:
            packet['CreditRequestResponse'] = 127

        messageId = packet['MessageID']

        if self._Session['SigningActivated'] is True and self._Connection['SequenceWindow'] > 2:
            if packet['TreeID'] > 0 and self._Session['TreeConnectTable'].has_key(packet['TreeID']) is True:
            if packet['TreeID'] > 0 and (packet['TreeID'] in self._Session['TreeConnectTable']) is True:
                if self._Session['TreeConnectTable'][packet['TreeID']]['EncryptData'] is False:
                    packet['Flags'] = SMB2_FLAGS_SIGNED
                    self.signSMB(packet)
            elif packet['TreeID'] == 0:
                packet['Flags'] = SMB2_FLAGS_SIGNED
                self.signSMB(packet)

346
347
348
349
350
351
352
353

354
355
356
357
358
359
360
347
348
349
350
351
352
353

354
355
356
357
358
359
360
361







-
+







            packet = str(transformHeader) + cipherText

        self._NetBIOSSession.send_packet(str(packet))
        return messageId

    def recvSMB(self, packetID = None):
        # First, verify we don't have the packet already
        if self._Connection['OutstandingResponses'].has_key(packetID):
        if packetID in self._Connection['OutstandingResponses']:
            return self._Connection['OutstandingResponses'].pop(packetID) 

        data = self._NetBIOSSession.recv_packet(self._timeout) 

        if data.get_trailer().startswith('\xfdSMB'):
            # Packet is encrypted
            transformHeader = SMB2_TRANSFORM_HEADER(data.get_trailer())
723
724
725
726
727
728
729
730

731
732
733
734
735
736
737
724
725
726
727
728
729
730

731
732
733
734
735
736
737
738







-
+







                   try:
                       self._Session['ServerDNSDomainName'] = av_pairs[ntlm.NTLMSSP_AV_DNS_DOMAINNAME][1].decode('utf-16le')
                   except:
                       # For some reason, we couldn't decode Unicode here.. silently discard the operation
                       pass 

                # Parse Version to know the target Operating system name. Not provided elsewhere anymore
                if ntlmChallenge.fields.has_key('Version'):
                if 'Version' in ntlmChallenge.fields:
                    version = ntlmChallenge['Version']

                    if len(version) >= 4:
                        self._Session['ServerOS'] = "Windows %d.%d Build %d" % (ord(version[0]), ord(version[1]), struct.unpack('<H',version[2:4])[0])
                        self._Session["ServerOSMajor"] = ord(version[0])
                        self._Session["ServerOSMinor"] = ord(version[1])
                        self._Session["ServerOSBuild"] = struct.unpack('<H',version[2:4])[0]
781
782
783
784
785
786
787
788

789
790
791
792
793
794
795
782
783
784
785
786
787
788

789
790
791
792
793
794
795
796







-
+







    def connectTree(self, share):

        # Just in case this came with the full path (maybe an SMB1 client), let's just leave 
        # the sharename, we'll take care of the rest

        #print self._Session['TreeConnectTable']
        share = share.split('\\')[-1]
        if self._Session['TreeConnectTable'].has_key(share):
        if share in self._Session['TreeConnectTable']:
            # Already connected, no need to reconnect
            treeEntry =  self._Session['TreeConnectTable'][share]
            treeEntry['NumberOfUses'] += 1
            self._Session['TreeConnectTable'][treeEntry['TreeConnectId']]['NumberOfUses'] += 1
            return treeEntry['TreeConnectId']

        #path = share
833
834
835
836
837
838
839
840

841
842
843

844
845
846
847
848
849
850
834
835
836
837
838
839
840

841
842
843

844
845
846
847
848
849
850
851







-
+


-
+








           self._Session['TreeConnectTable'][packet['TreeID']] = treeEntry
           self._Session['TreeConnectTable'][share]            = treeEntry

           return packet['TreeID'] 

    def disconnectTree(self, treeId):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        if self._Session['TreeConnectTable'].has_key(treeId):
        if treeId in self._Session['TreeConnectTable']:
            # More than 1 use? descrease it and return, if not, send the packet
            if self._Session['TreeConnectTable'][treeId]['NumberOfUses'] > 1:
                treeEntry =  self._Session['TreeConnectTable'][treeId]
                treeEntry['NumberOfUses'] -= 1
                self._Session['TreeConnectTable'][treeEntry['ShareName']]['NumberOfUses'] -= 1
                return True

858
859
860
861
862
863
864
865

866
867
868
869
870
871
872
859
860
861
862
863
864
865

866
867
868
869
870
871
872
873







-
+







        if packet.isValidAnswer(STATUS_SUCCESS):
            shareName = self._Session['TreeConnectTable'][treeId]['ShareName']
            del(self._Session['TreeConnectTable'][shareName])
            del(self._Session['TreeConnectTable'][treeId])
            return True

    def create(self, treeId, fileName, desiredAccess, shareMode, creationOptions, creationDisposition, fileAttributes, impersonationLevel = SMB2_IL_IMPERSONATION, securityFlags = 0, oplockLevel = SMB2_OPLOCK_LEVEL_NONE, createContexts = None):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        fileName = string.replace(fileName, '/', '\\')
        if len(fileName) > 0:
            fileName = ntpath.normpath(fileName)
            if fileName[0] == '\\':
                fileName = fileName[1:]
881
882
883
884
885
886
887
888

889
890
891
892
893
894
895
882
883
884
885
886
887
888

889
890
891
892
893
894
895
896







-
+







        fileEntry['LeaseState'] = SMB2_LEASE_NONE
        self.GlobalFileTable[pathName] = fileEntry 

        if self._Connection['Dialect'] == SMB2_DIALECT_30 and self._Connection['SupportsDirectoryLeasing'] is True:
           # Is this file NOT on the root directory?
           if len(fileName.split('\\')) > 2:
               parentDir = ntpath.dirname(pathName)
           if self.GlobalFileTable.has_key(parentDir):
           if parentDir in self.GlobalFileTable:
               LOG.critical("Don't know what to do now! :-o")
               raise
           else:
               parentEntry = copy.deepcopy(FILE)
               parentEntry['LeaseKey']   = uuid.generate()
               parentEntry['LeaseState'] = SMB2_LEASE_NONE 
               self.GlobalFileTable[parentDir] = parentEntry 
953
954
955
956
957
958
959
960

961
962

963
964
965
966
967
968
969
954
955
956
957
958
959
960

961
962

963
964
965
966
967
968
969
970







-
+

-
+








            # The client MUST generate a handle for the Open, and it MUST 
            # return success and the generated handle to the calling application.
            # In our case, str(FileID)
            return str(createResponse['FileID'])

    def close(self, treeId, fileId):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_CLOSE
        packet['TreeID']  = treeId

        smbClose = SMB2Close()
984
985
986
987
988
989
990
991

992
993

994
995
996
997
998
999
1000
985
986
987
988
989
990
991

992
993

994
995
996
997
998
999
1000
1001







-
+

-
+








    def read(self, treeId, fileId, offset = 0, bytesToRead = 0, waitAnswer = True):
        # IMPORTANT NOTE: As you can see, this was coded as a recursive function
        # Hence, you can exhaust the memory pretty easy ( large bytesToRead )
        # This function should NOT be used for reading files directly, but another higher
        # level function should be used that will break the read into smaller pieces

        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_READ
        packet['TreeID']  = treeId

        if self._Connection['MaxReadSize'] < bytesToRead:
1026
1027
1028
1029
1030
1031
1032
1033

1034
1035

1036
1037
1038
1039
1040
1041
1042
1027
1028
1029
1030
1031
1032
1033

1034
1035

1036
1037
1038
1039
1040
1041
1042
1043







-
+

-
+







       
    def write(self, treeId, fileId, data, offset = 0, bytesToWrite = 0, waitAnswer = True):
        # IMPORTANT NOTE: As you can see, this was coded as a recursive function
        # Hence, you can exhaust the memory pretty easy ( large bytesToWrite )
        # This function should NOT be used for writing directly to files, but another higher
        # level function should be used that will break the writes into smaller pieces

        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_WRITE
        packet['TreeID']  = treeId

        if self._Connection['MaxWriteSize'] < bytesToWrite:
1067
1068
1069
1070
1071
1072
1073
1074

1075
1076

1077
1078
1079
1080
1081
1082
1083
1068
1069
1070
1071
1072
1073
1074

1075
1076

1077
1078
1079
1080
1081
1082
1083
1084







-
+

-
+







            writeResponse = SMB2Write_Response(ans['Data'])
            bytesWritten = writeResponse['Count']
            if bytesWritten < bytesToWrite:
                bytesWritten += self.write(treeId, fileId, data[bytesWritten:], offset+bytesWritten, bytesToWrite-bytesWritten, waitAnswer)
            return bytesWritten

    def queryDirectory(self, treeId, fileId, searchString = '*', resumeIndex = 0, informationClass = FILENAMES_INFORMATION, maxBufferSize = None, enumRestart = False, singleEntry = False):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_QUERY_DIRECTORY
        packet['TreeID']  = treeId

        queryDirectory = SMB2QueryDirectory()
1120
1121
1122
1123
1124
1125
1126
1127

1128
1129
1130
1131
1132

1133
1134
1135
1136
1137
1138
1139
1121
1122
1123
1124
1125
1126
1127

1128
1129
1130
1131
1132

1133
1134
1135
1136
1137
1138
1139
1140







-
+




-
+








        smbCancel = SMB2Cancel()

        packet['Data']      = smbCancel
        self.sendSMB(packet)

    def ioctl(self, treeId, fileId = None, ctlCode = -1, flags = 0, inputBlob = '',  maxInputResponse = None, maxOutputResponse = None, waitAnswer = 1):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if fileId is None:
            fileId = '\xff'*16
        else:
            if self._Session['OpenTable'].has_key(fileId) is False:
            if (fileId in self._Session['OpenTable']) is False:
                raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command']            = SMB2_IOCTL
        packet['TreeID']             = treeId
       
        smbIoctl = SMB2Ioctl()
1161
1162
1163
1164
1165
1166
1167
1168

1169
1170

1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189

1190
1191

1192
1193
1194
1195
1196
1197
1198
1162
1163
1164
1165
1166
1167
1168

1169
1170

1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189

1190
1191

1192
1193
1194
1195
1196
1197
1198
1199







-
+

-
+


















-
+

-
+







        ans = self.recvSMB(packetID)

        if ans.isValidAnswer(STATUS_SUCCESS):
            smbIoctlResponse = SMB2Ioctl_Response(ans['Data'])
            return smbIoctlResponse['Buffer']

    def flush(self,treeId, fileId):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_FLUSH
        packet['TreeID']  = treeId

        smbFlush = SMB2Flush()
        smbFlush['FileID'] = fileId

        packet['Data'] = smbFlush

        packetID = self.sendSMB(packet)
        ans = self.recvSMB(packetID)

        if ans.isValidAnswer(STATUS_SUCCESS):
            return True

    def lock(self, treeId, fileId, locks, lockSequence = 0):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_LOCK
        packet['TreeID']  = treeId

        smbLock = SMB2Lock()
1244
1245
1246
1247
1248
1249
1250
1251

1252
1253

1254
1255
1256
1257
1258
1259
1260
1245
1246
1247
1248
1249
1250
1251

1252
1253

1254
1255
1256
1257
1258
1259
1260
1261







-
+

-
+







            self._Session['SigningRequired']   = False
            self._Session['SigningKey']        = ''
            self._Session['SessionKey']        = ''
            self._Session['SigningActivated']  = False
            return True

    def queryInfo(self, treeId, fileId, inputBlob = '', infoType = SMB2_0_INFO_FILE, fileInfoClass = SMB2_FILE_STANDARD_INFO, additionalInformation = 0, flags = 0 ):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_QUERY_INFO
        packet['TreeID']  = treeId

        queryInfo = SMB2QueryInfo()
1276
1277
1278
1279
1280
1281
1282
1283

1284
1285

1286
1287
1288
1289
1290
1291
1292
1277
1278
1279
1280
1281
1282
1283

1284
1285

1286
1287
1288
1289
1290
1291
1292
1293







-
+

-
+







        ans = self.recvSMB(packetID)

        if ans.isValidAnswer(STATUS_SUCCESS):
            queryResponse = SMB2QueryInfo_Response(ans['Data'])
            return queryResponse['Buffer']

    def setInfo(self, treeId, fileId, inputBlob = '', infoType = SMB2_0_INFO_FILE, fileInfoClass = SMB2_FILE_STANDARD_INFO, additionalInformation = 0 ):
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if self._Session['OpenTable'].has_key(fileId) is False:
        if (fileId in self._Session['OpenTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)

        packet = self.SMB_PACKET()
        packet['Command'] = SMB2_SET_INFO
        packet['TreeID']  = treeId

        setInfo = SMB2SetInfo()
1381
1382
1383
1384
1385
1386
1387
1388

1389
1390
1391
1392
1393
1394
1395
1382
1383
1384
1385
1386
1387
1388

1389
1390
1391
1392
1393
1394
1395
1396







-
+







                    nextOffset = 1
                    while nextOffset != 0:
                        fileInfo = smb.SMBFindFileFullDirectoryInfo(smb.SMB.FLAGS2_UNICODE)
                        fileInfo.fromString(res)
                        files.append(smb.SharedFile(fileInfo['CreationTime'],fileInfo['LastAccessTime'],fileInfo['LastChangeTime'],fileInfo['EndOfFile'],fileInfo['AllocationSize'],fileInfo['ExtFileAttributes'],fileInfo['FileName'].decode('utf-16le'), fileInfo['FileName'].decode('utf-16le')))
                        nextOffset = fileInfo['NextEntryOffset']
                        res = res[nextOffset:]
                except SessionError, e:
                except SessionError as e:
                    if (e.get_error_code()) != STATUS_NO_MORE_FILES:
                        raise
                    break 
        finally:
            if fileId is not None:
                self.close(treeId, fileId)
            self.disconnectTree(treeId) 
1508
1509
1510
1511
1512
1513
1514
1515

1516
1517
1518
1519
1520
1521
1522
1509
1510
1511
1512
1513
1514
1515

1516
1517
1518
1519
1520
1521
1522
1523







-
+







        finally:
            if fileId is not None:
                self.close(treeId, fileId)
            self.disconnectTree(treeId)

    def waitNamedPipe(self, treeId, pipename, timeout = 5):
        pipename = ntpath.basename(pipename)
        if self._Session['TreeConnectTable'].has_key(treeId) is False:
        if (treeId in self._Session['TreeConnectTable']) is False:
            raise SessionError(STATUS_INVALID_PARAMETER)
        if len(pipename) > 0xffff:
            raise SessionError(STATUS_INVALID_PARAMETER)

        pipeWait = FSCTL_PIPE_WAIT_STRUCTURE()
        pipeWait['Timeout']          = timeout*100000
        pipeWait['NameLength']       = len(pipename)*2
Changes to jni/curl/tests/python_dependencies/impacket/smbserver.py.
49
50
51
52
53
54
55






56
57
58
59
60
61
62
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68







+
+
+
+
+
+







    STATUS_FILE_IS_A_DIRECTORY, STATUS_NOT_IMPLEMENTED, STATUS_INVALID_HANDLE, STATUS_OBJECT_NAME_COLLISION, \
    STATUS_NO_SUCH_FILE, STATUS_CANCELLED, STATUS_OBJECT_NAME_NOT_FOUND, STATUS_SUCCESS, STATUS_ACCESS_DENIED, \
    STATUS_NOT_SUPPORTED, STATUS_INVALID_DEVICE_REQUEST, STATUS_FS_DRIVER_REQUIRED, STATUS_INVALID_INFO_CLASS

# These ones not defined in nt_errors
STATUS_SMB_BAD_UID = 0x005B0002
STATUS_SMB_BAD_TID = 0x00050002

try:
    unicode        # Python 2
except NameError:
    unicode = str  # Python 3


# Utility functions
# and general functions.
# There are some common functions that can be accessed from more than one SMB
# command (or either TRANSACTION). That's why I'm putting them here
# TODO: Return NT ERROR Codes

76
77
78
79
80
81
82
83

84
85
86
87
88
89
90
82
83
84
85
86
87
88

89
90
91
92
93
94
95
96







-
+







        try:
            if len(ntresponse) > 24:
                # Extended Security - NTLMv2
                ret_value = {'hash_string':'%s::%s:%s:%s:%s' % (username, domain, hexlify(challenge), hexlify(ntresponse)[:32], hexlify(ntresponse)[32:]), 'hash_version':'ntlmv2'}
            else:
                # NTLMv1
                ret_value = {'hash_string':'%s::%s:%s:%s:%s' % (username, domain, hexlify(lmresponse), hexlify(ntresponse), hexlify(challenge)), 'hash_version':'ntlm'}
        except Exception, e:
        except Exception as e:
            LOG.error("outputToJohnFormat: %s" % e)
            pass

    return ret_value

def writeJohnOutputToFile(hash_string, hash_version, file_name):
    fn_data = os.path.splitext(file_name)
179
180
181
182
183
184
185
186

187
188
189
190
191
192
193
185
186
187
188
189
190
191

192
193
194
195
196
197
198
199







-
+







    else:
       mode = os.O_RDONLY

    try:
        if sys.platform == 'win32':
            mode |= os.O_BINARY
        fid = os.open(pathName, mode)
    except Exception, e:
    except Exception as e:
        LOG.error("openFile: %s,%s" % (pathName, mode) ,e)
        fid = 0
        errorCode = STATUS_ACCESS_DENIED

    return fid, mode, pathName, errorCode

def queryFsInformation(path, filename, level=0):
438
439
440
441
442
443
444
445

446
447
448
449
450
451
452
444
445
446
447
448
449
450

451
452
453
454
455
456
457
458







-
+







            # UNSUPPORTED
            return None, STATUS_NOT_SUPPORTED

        return infoRecord, errorCode
    else:
        # NOT FOUND
        return None, STATUS_OBJECT_NAME_NOT_FOUND
  except Exception, e:
  except Exception as e:
      LOG.error('queryPathInfo: %s' % e)
      raise

def queryDiskInformation(path):
# TODO: Do something useful here :)
# For now we just return fake values
   totalUnits = 65535
482
483
484
485
486
487
488
489

490
491
492
493
494
495
496
488
489
490
491
492
493
494

495
496
497
498
499
500
501
502







-
+







                    # NetShareInfo1 len == 20
                    entry = smb.NetShareInfo1()
                    entry['NetworkName'] = i + '\x00'*(13-len(i))
                    entry['Type']        = int(shares[i]['share type'])
                    # (beto) If offset == 0 it crashes explorer.exe on windows 7
                    entry['RemarkOffsetLow'] = 20 * len(shares) + len(tailData)
                    respData += entry.getData()
                    if shares[i].has_key('comment'):
                    if 'comment' in shares[i]:
                        tailData += shares[i]['comment'] + '\x00'
                    else:
                        tailData += '\x00'
                respData += tailData
            else:
                # We don't support other info levels
                errorCode = STATUS_NOT_SUPPORTED
507
508
509
510
511
512
513
514

515
516
517
518
519
520
521
513
514
515
516
517
518
519

520
521
522
523
524
525
526
527







-
+







            respParameters = smb.SMBNetShareGetInfoResponse()
            shares = getShares(connId, smbServer)
            share = shares[request['ShareName'].upper()]
            shareInfo = smb.NetShareInfo1()
            shareInfo['NetworkName'] = request['ShareName'].upper() + '\x00'
            shareInfo['Type']        = int(share['share type'])
            respData = shareInfo.getData()
            if share.has_key('comment'):
            if 'comment' in share:
                shareInfo['RemarkOffsetLow'] = len(respData)
                respData += share['comment'] + '\x00'
            respParameters['TotalBytesAvailable'] = len(respData)

        else:
            # We don't know how to handle anything else
            errorCode = STATUS_NOT_SUPPORTED
534
535
536
537
538
539
540
541

542
543
544
545
546
547
548
540
541
542
543
544
545
546

547
548
549
550
551
552
553
554







-
+







        errorCode = STATUS_SUCCESS
        SMBCommand  = smb.SMBCommand(recvPacket['Data'][0])
        transParameters= smb.SMBTransaction_Parameters(SMBCommand['Parameters'])

        # Extract the FID
        fid = struct.unpack('<H', transParameters['Setup'][2:])[0]

        if connData['OpenedFiles'].has_key(fid):
        if fid in connData['OpenedFiles']:
            fileHandle = connData['OpenedFiles'][fid]['FileHandle']
            if fileHandle != PIPE_FILE_DESCRIPTOR:
                os.write(fileHandle,data)
                respData = os.read(fileHandle,data)
            else:
                sock = connData['OpenedFiles'][fid]['Socket']
                sock.send(data)
562
563
564
565
566
567
568
569

570
571
572
573
574
575
576
568
569
570
571
572
573
574

575
576
577
578
579
580
581
582







-
+







        connData = smbServer.getConnectionData(connId)

        respSetup = ''
        respParameters = ''
        respData = ''
        errorCode = STATUS_SUCCESS
        setPathInfoParameters = smb.SMBSetPathInformation_Parameters(flags = recvPacket['Flags2'], data = parameters)
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            path     = connData['ConnectedShares'][recvPacket['Tid']]['path']
            fileName = decodeSMBString(recvPacket['Flags2'], setPathInfoParameters['FileName'])
            fileName = os.path.normpath(fileName.replace('\\','/'))
            if len(fileName) > 0 and (fileName[0] == '/' or fileName[0] == '\\') and path != '':
               # strip leading '/'
               fileName = fileName[1:]
            pathName = os.path.join(path,fileName)
615
616
617
618
619
620
621
622
623


624
625
626
627
628
629
630
621
622
623
624
625
626
627


628
629
630
631
632
633
634
635
636







-
-
+
+








        respSetup = ''
        respParameters = ''
        respData = ''
        errorCode = STATUS_SUCCESS
        setFileInfoParameters = smb.SMBSetFileInformation_Parameters(parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            if connData['OpenedFiles'].has_key(setFileInfoParameters['FID']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            if setFileInfoParameters['FID'] in connData['OpenedFiles']:
                fileName = connData['OpenedFiles'][setFileInfoParameters['FID']]['FileName']
                informationLevel = setFileInfoParameters['InformationLevel']
                if informationLevel == smb.SMB_SET_FILE_DISPOSITION_INFO:
                    infoRecord = smb.SMBSetFileDispositionInfo(parameters)
                    if infoRecord['DeletePending'] > 0:
                       # Mark this file for removal after closed
                       connData['OpenedFiles'][setFileInfoParameters['FID']]['DeleteOnClose'] = True
671
672
673
674
675
676
677
678
679


680
681
682
683
684
685
686
677
678
679
680
681
682
683


684
685
686
687
688
689
690
691
692







-
-
+
+








        respSetup = ''
        respParameters = ''
        respData = ''

        queryFileInfoParameters = smb.SMBQueryFileInformation_Parameters(parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            if connData['OpenedFiles'].has_key(queryFileInfoParameters['FID']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            if queryFileInfoParameters['FID'] in connData['OpenedFiles']:
                fileName = connData['OpenedFiles'][queryFileInfoParameters['FID']]['FileName']

                infoRecord, errorCode = queryFileInformation('', fileName, queryFileInfoParameters['InformationLevel'])

                if infoRecord is not None:
                    respParameters = smb.SMBQueryFileInformationResponse_Parameters()
                    respData = infoRecord
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
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







-
+



-
+

















-
+

















-
-
+
+







        respSetup = ''
        respParameters = ''
        respData = ''
        errorCode = 0

        queryPathInfoParameters = smb.SMBQueryPathInformation_Parameters(flags = recvPacket['Flags2'], data = parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            path = connData['ConnectedShares'][recvPacket['Tid']]['path']
            try:
               infoRecord, errorCode = queryPathInformation(path, decodeSMBString(recvPacket['Flags2'], queryPathInfoParameters['FileName']), queryPathInfoParameters['InformationLevel'])
            except Exception, e:
            except Exception as e:
               smbServer.log("queryPathInformation: %s" % e,logging.ERROR)

            if infoRecord is not None:
                respParameters = smb.SMBQueryPathInformationResponse_Parameters()
                respData = infoRecord
        else:
            errorCode = STATUS_SMB_BAD_TID

        smbServer.setConnectionData(connId, connData)

        return respSetup, respParameters, respData, errorCode

    @staticmethod
    def queryFsInformation(connId, smbServer, recvPacket, parameters, data, maxDataCount = 0):
        connData = smbServer.getConnectionData(connId)
        errorCode = 0
        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            data = queryFsInformation(connData['ConnectedShares'][recvPacket['Tid']]['path'], '', struct.unpack('<H',parameters)[0])

        smbServer.setConnectionData(connId, connData)

        return '','', data, errorCode

    @staticmethod
    def findNext2(connId, smbServer, recvPacket, parameters, data, maxDataCount):
        connData = smbServer.getConnectionData(connId)

        respSetup = ''
        respParameters = ''
        respData = ''
        errorCode = STATUS_SUCCESS
        findNext2Parameters = smb.SMBFindNext2_Parameters(flags = recvPacket['Flags2'], data = parameters)

        sid = findNext2Parameters['SID']
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
            if connData['SIDs'].has_key(sid):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            if sid in connData['SIDs']:
                searchResult = connData['SIDs'][sid]
                respParameters = smb.SMBFindNext2Response_Parameters()
                endOfSearch = 1
                searchCount = 1
                totalData = 0
                for i in enumerate(searchResult):
                    data = i[1].getData()
786
787
788
789
790
791
792
793

794
795
796
797
798
799
800
792
793
794
795
796
797
798

799
800
801
802
803
804
805
806







-
+







        connData = smbServer.getConnectionData(connId)

        respSetup = ''
        respParameters = ''
        respData = ''
        findFirst2Parameters = smb.SMBFindFirst2_Parameters( recvPacket['Flags2'], data = parameters)

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            path = connData['ConnectedShares'][recvPacket['Tid']]['path']

            searchResult, searchCount, errorCode = findFirst2(path,
                          decodeSMBString( recvPacket['Flags2'], findFirst2Parameters['FileName'] ),
                          findFirst2Parameters['InformationLevel'],
                          findFirst2Parameters['SearchAttributes'] )

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
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







-
+











-
+







            # Call the handler for this TRANSACTION
            if transParameters['SetupCount'] == 0:
                # No subcommand, let's play with the Name
                command = decodeSMBString(recvPacket['Flags2'],transData['Name'])
            else:
                command = struct.unpack('<H', transParameters['Setup'][:2])[0]

            if transCommands.has_key(command):
            if command in transCommands:
               # Call the TRANS subcommand
               setup = ''
               parameters = ''
               data = ''
               try:
                   setup, parameters, data, errorCode = transCommands[command](connId,
                                smbServer,
                                recvPacket,
                                transData['Trans_Parameters'],
                                transData['Trans_Data'],
                                transParameters['MaxDataCount'])
               except Exception, e:
               except Exception as e:
                   #print 'Transaction: %s' % e,e
                   smbServer.log('Transaction: (%r,%s)' % (command, e), logging.ERROR)
                   errorCode = STATUS_ACCESS_DENIED
                   #raise

               if setup == '' and parameters == '' and data == '':
                   # Something wen't wrong
1014
1015
1016
1017
1018
1019
1020
1021

1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033

1034
1035
1036
1037
1038
1039
1040
1020
1021
1022
1023
1024
1025
1026

1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038

1039
1040
1041
1042
1043
1044
1045
1046







-
+











-
+







                dataOffset = NTTransParameters['DataOffset'] - 73 - NTTransParameters['SetupLength']
                NTTransData['NT_Trans_Data'] = SMBCommand['Data'][dataOffset:dataOffset + dataCount]
            else:
                NTTransData['NT_Trans_Data'] = ''

            # Call the handler for this TRANSACTION
            command = NTTransParameters['Function']
            if transCommands.has_key(command):
            if command in transCommands:
               # Call the NT TRANS subcommand
               setup = ''
               parameters = ''
               data = ''
               try:
                   setup, parameters, data, errorCode = transCommands[command](connId,
                                smbServer,
                                recvPacket,
                                NTTransData['NT_Trans_Parameters'],
                                NTTransData['NT_Trans_Data'],
                                NTTransParameters['MaxDataCount'])
               except Exception, e:
               except Exception as e:
                   smbServer.log('NTTransaction: (0x%x,%s)' % (command, e), logging.ERROR)
                   errorCode = STATUS_ACCESS_DENIED
                   #raise

               if setup == '' and parameters == '' and data == '':
                   # Something wen't wrong
                   respParameters = ''
1153
1154
1155
1156
1157
1158
1159
1160

1161
1162
1163
1164
1165
1166
1167
1168
1169

1170
1171
1172
1173
1174
1175
1176
1159
1160
1161
1162
1163
1164
1165

1166
1167
1168
1169
1170
1171
1172
1173
1174

1175
1176
1177
1178
1179
1180
1181
1182







-
+








-
+







                dataOffset = trans2Parameters['DataOffset'] - 63 - trans2Parameters['SetupLength']
                trans2Data['Trans_Data'] = SMBCommand['Data'][dataOffset:dataOffset + dataCount]
            else:
                trans2Data['Trans_Data'] = ''

            # Call the handler for this TRANSACTION
            command = struct.unpack('<H', trans2Parameters['Setup'])[0]
            if transCommands.has_key(command):
            if command in transCommands:
               # Call the TRANS2 subcommand
               try:
                   setup, parameters, data, errorCode = transCommands[command](connId,
                                smbServer,
                                recvPacket,
                                trans2Data['Trans_Parameters'],
                                trans2Data['Trans_Data'],
                                trans2Parameters['MaxDataCount'])
               except Exception, e:
               except Exception as e:
                   smbServer.log('Transaction2: (0x%x,%s)' % (command, e), logging.ERROR)
                   #import traceback
                   #traceback.print_exc()
                   raise

               if setup == '' and parameters == '' and data == '':
                   # Something wen't wrong
1278
1279
1280
1281
1282
1283
1284
1285

1286
1287
1288
1289
1290
1291
1292
1293

1294
1295
1296
1297
1298
1299
1300
1301

1302
1303
1304
1305
1306
1307
1308
1284
1285
1286
1287
1288
1289
1290

1291
1292
1293
1294
1295
1296
1297
1298

1299
1300
1301
1302
1303
1304
1305
1306

1307
1308
1309
1310
1311
1312
1313
1314







-
+







-
+







-
+








        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_CLOSE)
        respParameters        = ''
        respData              = ''

        comClose =  smb.SMBClose_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(comClose['FID']):
        if comClose['FID'] in connData['OpenedFiles']:
             errorCode = STATUS_SUCCESS
             fileHandle = connData['OpenedFiles'][comClose['FID']]['FileHandle']
             try:
                 if fileHandle == PIPE_FILE_DESCRIPTOR:
                     connData['OpenedFiles'][comClose['FID']]['Socket'].close()
                 elif fileHandle != VOID_FILE_DESCRIPTOR:
                     os.close(fileHandle)
             except Exception, e:
             except Exception as e:
                 smbServer.log("comClose %s" % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
             else:
                 # Check if the file was marked for removal
                 if connData['OpenedFiles'][comClose['FID']]['DeleteOnClose'] is True:
                     try:
                         os.remove(connData['OpenedFiles'][comClose['FID']]['FileName'])
                     except Exception, e:
                     except Exception as e:
                         smbServer.log("comClose %s" % e, logging.ERROR)
                         errorCode = STATUS_ACCESS_DENIED
                 del(connData['OpenedFiles'][comClose['FID']])
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
1322
1323
1324
1325
1326
1327
1328
1329

1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343

1344
1345
1346
1347
1348
1349
1350
1328
1329
1330
1331
1332
1333
1334

1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348

1349
1350
1351
1352
1353
1354
1355
1356







-
+













-
+







        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_WRITE)
        respParameters        = smb.SMBWriteResponse_Parameters()
        respData              = ''

        comWriteParameters =  smb.SMBWrite_Parameters(SMBCommand['Parameters'])
        comWriteData = smb.SMBWrite_Data(SMBCommand['Data'])

        if connData['OpenedFiles'].has_key(comWriteParameters['Fid']):
        if comWriteParameters['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][comWriteParameters['Fid']]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     # TODO: Handle big size files
                     # If we're trying to write past the file end we just skip the write call (Vista does this)
                     if os.lseek(fileHandle, 0, 2) >= comWriteParameters['Offset']:
                         os.lseek(fileHandle,comWriteParameters['Offset'],0)
                         os.write(fileHandle,comWriteData['Data'])
                 else:
                     sock = connData['OpenedFiles'][comWriteParameters['Fid']]['Socket']
                     sock.send(comWriteData['Data'])
                 respParameters['Count']    = comWriteParameters['Count']
             except Exception, e:
             except Exception as e:
                 smbServer.log('smbComWrite: %s' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE


        if errorCode > 0:
1363
1364
1365
1366
1367
1368
1369
1370

1371
1372
1373
1374
1375

1376
1377
1378
1379
1380
1381
1382
1369
1370
1371
1372
1373
1374
1375

1376
1377
1378
1379
1380

1381
1382
1383
1384
1385
1386
1387
1388







-
+




-
+








        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_FLUSH)
        respParameters        = ''
        respData              = ''

        comFlush =  smb.SMBFlush_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(comFlush['FID']):
        if comFlush['FID'] in connData['OpenedFiles']:
             errorCode = STATUS_SUCCESS
             fileHandle = connData['OpenedFiles'][comFlush['FID']]['FileHandle']
             try:
                 os.fsync(fileHandle)
             except Exception, e:
             except Exception as e:
                 smbServer.log("comFlush %s" % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''
1396
1397
1398
1399
1400
1401
1402
1403

1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420

1421
1422
1423
1424
1425
1426
1427
1402
1403
1404
1405
1406
1407
1408

1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425

1426
1427
1428
1429
1430
1431
1432
1433







-
+
















-
+







        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_CREATE_DIRECTORY)
        respParameters        = ''
        respData              = ''

        comCreateDirectoryData=  smb.SMBCreateDirectory_Data(flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             errorCode = STATUS_SUCCESS
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             fileName = os.path.normpath(decodeSMBString(recvPacket['Flags2'],comCreateDirectoryData['DirectoryName']).replace('\\','/'))
             if len(fileName) > 0:
                if fileName[0] == '/' or fileName[0] == '\\':
                    # strip leading '/'
                    fileName = fileName[1:]
             pathName = os.path.join(path,fileName)
             if os.path.exists(pathName):
                errorCode = STATUS_OBJECT_NAME_COLLISION

             # TODO: More checks here in the future.. Specially when we support
             # user access
             else:
                 try:
                     os.mkdir(pathName)
                 except Exception, e:
                 except Exception as e:
                     smbServer.log("smbComCreateDirectory: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID


        if errorCode > 0:
1440
1441
1442
1443
1444
1445
1446
1447

1448
1449
1450
1451
1452
1453
1454
1446
1447
1448
1449
1450
1451
1452

1453
1454
1455
1456
1457
1458
1459
1460







-
+








        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_RENAME)
        respParameters        = ''
        respData              = ''

        comRenameData      =  smb.SMBRename_Data(flags = recvPacket['Flags2'], data = SMBCommand['Data'])
        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             errorCode = STATUS_SUCCESS
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             oldFileName = os.path.normpath(decodeSMBString(recvPacket['Flags2'],comRenameData['OldFileName']).replace('\\','/'))
             newFileName = os.path.normpath(decodeSMBString(recvPacket['Flags2'],comRenameData['NewFileName']).replace('\\','/'))
             if len(oldFileName) > 0 and (oldFileName[0] == '/' or oldFileName[0] == '\\'):
                # strip leading '/'
                oldFileName = oldFileName[1:]
1462
1463
1464
1465
1466
1467
1468
1469

1470
1471
1472
1473
1474
1475
1476
1468
1469
1470
1471
1472
1473
1474

1475
1476
1477
1478
1479
1480
1481
1482







-
+







                errorCode = STATUS_NO_SUCH_FILE

             # TODO: More checks here in the future.. Specially when we support
             # user access
             else:
                 try:
                     os.rename(oldPathName,newPathName)
                 except OSError, e:
                 except OSError as e:
                     smbServer.log("smbComRename: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID


        if errorCode > 0:
1490
1491
1492
1493
1494
1495
1496
1497

1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513

1514
1515
1516
1517
1518
1519
1520
1496
1497
1498
1499
1500
1501
1502

1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518

1519
1520
1521
1522
1523
1524
1525
1526







-
+















-
+







        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_DELETE)
        respParameters        = ''
        respData              = ''

        comDeleteData         =  smb.SMBDelete_Data(flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             errorCode = STATUS_SUCCESS
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             fileName = os.path.normpath(decodeSMBString(recvPacket['Flags2'],comDeleteData['FileName']).replace('\\','/'))
             if len(fileName) > 0 and (fileName[0] == '/' or fileName[0] == '\\'):
                # strip leading '/'
                fileName = fileName[1:]
             pathName = os.path.join(path,fileName)
             if os.path.exists(pathName) is not True:
                errorCode = STATUS_NO_SUCH_FILE

             # TODO: More checks here in the future.. Specially when we support
             # user access
             else:
                 try:
                     os.remove(pathName)
                 except OSError, e:
                 except OSError as e:
                     smbServer.log("smbComDelete: %s" % e, logging.ERROR)
                     errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID

        if errorCode > 0:
            respParameters = ''
1534
1535
1536
1537
1538
1539
1540
1541

1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557

1558
1559
1560
1561
1562
1563
1564
1540
1541
1542
1543
1544
1545
1546

1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562

1563
1564
1565
1566
1567
1568
1569
1570







-
+















-
+







        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_DELETE_DIRECTORY)
        respParameters        = ''
        respData              = ''

        comDeleteDirectoryData=  smb.SMBDeleteDirectory_Data(flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             errorCode = STATUS_SUCCESS
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             fileName = os.path.normpath(decodeSMBString(recvPacket['Flags2'],comDeleteDirectoryData['DirectoryName']).replace('\\','/'))
             if len(fileName) > 0 and (fileName[0] == '/' or fileName[0] == '\\'):
                # strip leading '/'
                fileName = fileName[1:]
             pathName = os.path.join(path,fileName)
             if os.path.exists(pathName) is not True:
                errorCode = STATUS_NO_SUCH_FILE

             # TODO: More checks here in the future.. Specially when we support
             # user access
             else:
                 try:
                     os.rmdir(pathName)
                 except OSError, e:
                 except OSError as e:
                     smbServer.log("smbComDeleteDirectory: %s" % e,logging.ERROR)
                     if e.errno == errno.ENOTEMPTY:
                         errorCode = STATUS_DIRECTORY_NOT_EMPTY
                     else:
                         errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID
1589
1590
1591
1592
1593
1594
1595
1596

1597
1598
1599
1600
1601
1602

1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614

1615
1616
1617
1618
1619
1620
1621
1595
1596
1597
1598
1599
1600
1601

1602
1603
1604
1605
1606
1607

1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619

1620
1621
1622
1623
1624
1625
1626
1627







-
+





-
+











-
+







            writeAndX =  smb.SMBWriteAndX_Parameters(SMBCommand['Parameters'])
            writeAndXData = smb.SMBWriteAndX_Data()
        writeAndXData['DataLength'] = writeAndX['DataLength']
        writeAndXData['DataOffset'] = writeAndX['DataOffset']
        writeAndXData.fromString(SMBCommand['Data'])


        if connData['OpenedFiles'].has_key(writeAndX['Fid']):
        if writeAndX['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][writeAndX['Fid']]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = writeAndX['Offset']
                     if writeAndX.fields.has_key('HighOffset'):
                     if 'HighOffset' in writeAndX.fields:
                         offset += (writeAndX['HighOffset'] << 32)
                     # If we're trying to write past the file end we just skip the write call (Vista does this)
                     if os.lseek(fileHandle, 0, 2) >= offset:
                         os.lseek(fileHandle,offset,0)
                         os.write(fileHandle,writeAndXData['Data'])
                 else:
                     sock = connData['OpenedFiles'][writeAndX['Fid']]['Socket']
                     sock.send(writeAndXData['Data'])

                 respParameters['Count']    = writeAndX['DataLength']
                 respParameters['Available']= 0xff
             except Exception, e:
             except Exception as e:
                 smbServer.log('smbComWriteAndx: %s' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''
1633
1634
1635
1636
1637
1638
1639
1640

1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654

1655
1656
1657
1658
1659
1660
1661
1639
1640
1641
1642
1643
1644
1645

1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659

1660
1661
1662
1663
1664
1665
1666
1667







-
+













-
+








        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_READ)
        respParameters        = smb.SMBReadResponse_Parameters()
        respData              = smb.SMBReadResponse_Data()

        comReadParameters =  smb.SMBRead_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(comReadParameters['Fid']):
        if comReadParameters['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][comReadParameters['Fid']]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     # TODO: Handle big size files
                     os.lseek(fileHandle,comReadParameters['Offset'],0)
                     content = os.read(fileHandle,comReadParameters['Count'])
                 else:
                     sock = connData['OpenedFiles'][comReadParameters['Fid']]['Socket']
                     content = sock.recv(comReadParameters['Count'])
                 respParameters['Count']    = len(content)
                 respData['DataLength']     = len(content)
                 respData['Data']           = content
             except Exception, e:
             except Exception as e:
                 smbServer.log('smbComRead: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''
1676
1677
1678
1679
1680
1681
1682
1683

1684
1685
1686
1687
1688
1689

1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701

1702
1703
1704
1705
1706
1707
1708
1682
1683
1684
1685
1686
1687
1688

1689
1690
1691
1692
1693
1694

1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706

1707
1708
1709
1710
1711
1712
1713
1714







-
+





-
+











-
+







        respData              = ''

        if SMBCommand['WordCount'] == 0x0A:
            readAndX =  smb.SMBReadAndX_Parameters2(SMBCommand['Parameters'])
        else:
            readAndX =  smb.SMBReadAndX_Parameters(SMBCommand['Parameters'])

        if connData['OpenedFiles'].has_key(readAndX['Fid']):
        if readAndX['Fid'] in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][readAndX['Fid']]['FileHandle']
             errorCode = 0
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = readAndX['Offset']
                     if readAndX.fields.has_key('HighOffset'):
                     if 'HighOffset' in readAndX.fields:
                         offset += (readAndX['HighOffset'] << 32)
                     os.lseek(fileHandle,offset,0)
                     content = os.read(fileHandle,readAndX['MaxCount'])
                 else:
                     sock = connData['OpenedFiles'][readAndX['Fid']]['Socket']
                     content = sock.recv(readAndX['MaxCount'])
                 respParameters['Remaining']    = 0xffff
                 respParameters['DataCount']    = len(content)
                 respParameters['DataOffset']   = 59
                 respParameters['DataCount_Hi'] = 0
                 respData = content
             except Exception, e:
             except Exception as e:
                 smbServer.log('smbComReadAndX: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        if errorCode > 0:
            respParameters = ''
1721
1722
1723
1724
1725
1726
1727
1728

1729
1730
1731
1732
1733
1734
1735
1727
1728
1729
1730
1731
1732
1733

1734
1735
1736
1737
1738
1739
1740
1741







-
+







        respSMBCommand = smb.SMBCommand(smb.SMB.SMB_COM_QUERY_INFORMATION)
        respParameters = smb.SMBQueryInformationResponse_Parameters()
        respData       = ''

        queryInformation= smb.SMBQueryInformation_Data(flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            fileSize, lastWriteTime, fileAttributes = queryFsInformation(
                connData['ConnectedShares'][recvPacket['Tid']]['path'],
                decodeSMBString(recvPacket['Flags2'],queryInformation['FileName']))

            respParameters['FileSize']       = fileSize
            respParameters['LastWriteTime']  = lastWriteTime
            respParameters['FileAttributes'] = fileAttributes
1751
1752
1753
1754
1755
1756
1757
1758

1759
1760
1761
1762
1763
1764
1765
1757
1758
1759
1760
1761
1762
1763

1764
1765
1766
1767
1768
1769
1770
1771







-
+







        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb.SMBCommand(smb.SMB.SMB_COM_QUERY_INFORMATION_DISK)
        respParameters = smb.SMBQueryInformationDiskResponse_Parameters()
        respData       = ''

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            totalUnits, freeUnits = queryDiskInformation(
                        connData['ConnectedShares'][recvPacket['Tid']]['path'])

            respParameters['TotalUnits']    = totalUnits
            respParameters['BlocksPerUnit'] = 1
            respParameters['BlockSize']     = 1
            respParameters['FreeUnits']     = freeUnits
1803
1804
1805
1806
1807
1808
1809
1810

1811
1812
1813
1814
1815
1816
1817
1809
1810
1811
1812
1813
1814
1815

1816
1817
1818
1819
1820
1821
1822
1823







-
+








        respSMBCommand = smb.SMBCommand(smb.SMB.SMB_COM_TREE_DISCONNECT)

        # Check if the Tid matches the Tid trying to disconnect
        respParameters = ''
        respData = ''

        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
            smbServer.log("Disconnecting Share(%d:%s)" % (recvPacket['Tid'],connData['ConnectedShares'][recvPacket['Tid']]['shareName']))
            del(connData['ConnectedShares'][recvPacket['Tid']])
            errorCode = STATUS_SUCCESS
        else:
            # STATUS_SMB_BAD_TID
            errorCode = STATUS_SMB_BAD_TID

1850
1851
1852
1853
1854
1855
1856
1857

1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876

1877
1878
1879
1880
1881
1882
1883
1856
1857
1858
1859
1860
1861
1862

1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881

1882
1883
1884
1885
1886
1887
1888
1889







-
+


















-
+








        respSMBCommand        = smb.SMBCommand(smb.SMB.SMB_COM_QUERY_INFORMATION2)
        respParameters        = smb.SMBQueryInformation2Response_Parameters()
        respData              = ''

        queryInformation2 = smb.SMBQueryInformation2_Parameters(SMBCommand['Parameters'])
        errorCode = 0xFF
        if connData['OpenedFiles'].has_key(queryInformation2['Fid']):
        if queryInformation2['Fid'] in connData['OpenedFiles']:
             errorCode = STATUS_SUCCESS
             pathName = connData['OpenedFiles'][queryInformation2['Fid']]['FileName']
             try:
                 (mode, ino, dev, nlink, uid, gid, size, atime, mtime, ctime) = os.stat(pathName)
                 respParameters['CreateDate']         = getSMBDate(ctime)
                 respParameters['CreationTime']       = getSMBTime(ctime)
                 respParameters['LastAccessDate']     = getSMBDate(atime)
                 respParameters['LastAccessTime']     = getSMBTime(atime)
                 respParameters['LastWriteDate']      = getSMBDate(mtime)
                 respParameters['LastWriteTime']      = getSMBTime(mtime)
                 respParameters['FileDataSize']       = size
                 respParameters['FileAllocationSize'] = size
                 attribs = 0
                 if os.path.isdir(pathName):
                     attribs = smb.SMB_FILE_ATTRIBUTE_DIRECTORY
                 if os.path.isfile(pathName):
                     attribs = smb.SMB_FILE_ATTRIBUTE_NORMAL
                 respParameters['FileAttributes'] = attribs
             except Exception, e:
             except Exception as e:
                 smbServer.log('smbComQueryInformation2 %s' % e,logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED

        if errorCode > 0:
            respParameters = ''
            respData       = ''

1900
1901
1902
1903
1904
1905
1906
1907

1908
1909
1910
1911
1912
1913
1914

1915
1916
1917
1918
1919
1920
1921
1906
1907
1908
1909
1910
1911
1912

1913
1914
1915
1916
1917
1918
1919

1920
1921
1922
1923
1924
1925
1926
1927







-
+






-
+







        ntCreateAndXData       = smb.SMBNtCreateAndX_Data( flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        #if ntCreateAndXParameters['CreateFlags'] & 0x10:  # NT_CREATE_REQUEST_EXTENDED_RESPONSE
        #    respParameters        = smb.SMBNtCreateAndXExtendedResponse_Parameters()
        #    respParameters['VolumeGUID'] = '\x00'

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             # If we have a rootFid, the path is relative to that fid
             errorCode = STATUS_SUCCESS
             if ntCreateAndXParameters['RootFid'] > 0:
                 path = connData['OpenedFiles'][ntCreateAndXParameters['RootFid']]['FileName']
                 LOG.debug("RootFid present %s!" % path)
             else:
                 if connData['ConnectedShares'][recvPacket['Tid']].has_key('path'):
                 if 'path' in connData['ConnectedShares'][recvPacket['Tid']]:
                     path = connData['ConnectedShares'][recvPacket['Tid']]['path']
                 else:
                     path = 'NONE'
                     errorCode = STATUS_ACCESS_DENIED

             deleteOnClose = False

1943
1944
1945
1946
1947
1948
1949
1950

1951
1952
1953
1954
1955
1956
1957
1949
1950
1951
1952
1953
1954
1955

1956
1957
1958
1959
1960
1961
1962
1963







-
+







                     mode |= os.O_TRUNC | os.O_CREAT
             elif createDisposition & smb.FILE_CREATE == smb.FILE_CREATE:
                 if os.path.exists(pathName) is True:
                     errorCode = STATUS_OBJECT_NAME_COLLISION
                 else:
                     mode |= os.O_CREAT
             elif createDisposition & smb.FILE_OPEN == smb.FILE_OPEN:
                 if os.path.exists(pathName) is not True and smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)) is not True:
                 if os.path.exists(pathName) is not True and (unicode(pathName) in smbServer.getRegisteredNamedPipes()) is not True:
                     errorCode = STATUS_NO_SUCH_FILE

             if errorCode == STATUS_SUCCESS:
                 desiredAccess = ntCreateAndXParameters['AccessMask']
                 if (desiredAccess & smb.FILE_READ_DATA) or (desiredAccess & smb.GENERIC_READ):
                     mode |= os.O_RDONLY
                 if (desiredAccess & smb.FILE_WRITE_DATA) or (desiredAccess & smb.GENERIC_WRITE):
1965
1966
1967
1968
1969
1970
1971
1972

1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992

1993
1994
1995
1996
1997
1998

1999
2000
2001
2002
2003
2004
2005
1971
1972
1973
1974
1975
1976
1977

1978
1979
1980
1981
1982
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997

1998
1999
2000
2001
2002
2003

2004
2005
2006
2007
2008
2009
2010
2011







-
+



















-
+





-
+







                 createOptions =  ntCreateAndXParameters['CreateOptions']
                 if mode & os.O_CREAT == os.O_CREAT:
                     if createOptions & smb.FILE_DIRECTORY_FILE == smb.FILE_DIRECTORY_FILE:
                         try:
                             # Let's create the directory
                             os.mkdir(pathName)
                             mode = os.O_RDONLY
                         except Exception, e:
                         except Exception as e:
                             smbServer.log("NTCreateAndX: %s,%s,%s" % (pathName,mode,e),logging.ERROR)
                             errorCode = STATUS_ACCESS_DENIED
                 if createOptions & smb.FILE_NON_DIRECTORY_FILE == smb.FILE_NON_DIRECTORY_FILE:
                     # If the file being opened is a directory, the server MUST fail the request with
                     # STATUS_FILE_IS_A_DIRECTORY in the Status field of the SMB Header in the server
                     # response.
                     if os.path.isdir(pathName) is True:
                        errorCode = STATUS_FILE_IS_A_DIRECTORY

                 if createOptions & smb.FILE_DELETE_ON_CLOSE == smb.FILE_DELETE_ON_CLOSE:
                     deleteOnClose = True

                 if errorCode == STATUS_SUCCESS:
                     try:
                         if os.path.isdir(pathName) and sys.platform == 'win32':
                            fid = VOID_FILE_DESCRIPTOR
                         else:
                            if sys.platform == 'win32':
                               mode |= os.O_BINARY
                            if smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)):
                            if unicode(pathName) in smbServer.getRegisteredNamedPipes():
                                fid = PIPE_FILE_DESCRIPTOR
                                sock = socket.socket()
                                sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                            else:
                                fid = os.open(pathName, mode)
                     except Exception, e:
                     except Exception as e:
                         smbServer.log("NTCreateAndX: %s,%s,%s" % (pathName,mode,e),logging.ERROR)
                         #print e
                         fid = 0
                         errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID

2070
2071
2072
2073
2074
2075
2076
2077

2078
2079
2080
2081
2082
2083
2084
2076
2077
2078
2079
2080
2081
2082

2083
2084
2085
2086
2087
2088
2089
2090







-
+







        respParameters        = smb.SMBOpenAndXResponse_Parameters()
        respData              = ''

        openAndXParameters = smb.SMBOpenAndX_Parameters(SMBCommand['Parameters'])
        openAndXData       = smb.SMBOpenAndX_Data( flags = recvPacket['Flags2'], data = SMBCommand['Data'])

        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['Tid']):
        if recvPacket['Tid'] in connData['ConnectedShares']:
             path = connData['ConnectedShares'][recvPacket['Tid']]['path']
             openedFile, mode, pathName, errorCode = openFile(path,
                     decodeSMBString(recvPacket['Flags2'],openAndXData['FileName']),
                     openAndXParameters['DesiredAccess'],
                     openAndXParameters['FileAttributes'],
                     openAndXParameters['OpenMode'])
        else:
2219
2220
2221
2222
2223
2224
2225
2226

2227
2228
2229
2230
2231
2232
2233
2225
2226
2227
2228
2229
2230
2231

2232
2233
2234
2235
2236
2237
2238
2239







-
+







               blob =  SPNEGO_NegTokenInit(sessionSetupData['SecurityBlob'])
               token = blob['MechToken']
               if len(blob['MechTypes'][0]) > 0:
                   # Is this GSSAPI NTLM or something else we don't support?
                   mechType = blob['MechTypes'][0]
                   if mechType != TypesMech['NTLMSSP - Microsoft NTLM Security Support Provider']:
                       # Nope, do we know it?
                       if MechTypes.has_key(mechType):
                       if mechType in MechTypes:
                           mechStr = MechTypes[mechType]
                       else:
                           mechStr = hexlify(mechType)
                       smbServer.log("Unsupported MechType '%s'" % mechStr, logging.CRITICAL)
                       # We don't know the token, we answer back again saying
                       # we just support NTLM.
                       # ToDo: Build this into a SPNEGO_NegTokenResp()
2427
2428
2429
2430
2431
2432
2433
2434

2435
2436
2437
2438
2439
2440
2441
2433
2434
2435
2436
2437
2438
2439

2440
2441
2442
2443
2444
2445
2446
2447







-
+







                    _dialects_parameters['ChallengeLength'] = 0

           else:
                    resp['Flags2'] = smb.SMB.FLAGS2_NT_STATUS | smb.SMB.FLAGS2_UNICODE
                    _dialects_parameters = smb.SMBNTLMDialect_Parameters()
                    _dialects_data= smb.SMBNTLMDialect_Data()
                    _dialects_data['Payload'] = ''
                    if connData.has_key('EncryptionKey'):
                    if 'EncryptionKey' in connData:
                        _dialects_data['Challenge'] = connData['EncryptionKey']
                        _dialects_parameters['ChallengeLength'] = len(str(_dialects_data))
                    else:
                        # TODO: Handle random challenges, now one that can be used with rainbow tables
                        _dialects_data['Challenge'] = '\x11\x22\x33\x44\x55\x66\x77\x88'
                        _dialects_parameters['ChallengeLength'] = 8
                    _dialects_parameters['Capabilities']    = smb.SMB.CAP_USE_NT_ERRORS | smb.SMB.CAP_NT_SMBS
2459
2460
2461
2462
2463
2464
2465
2466

2467
2468
2469
2470
2471
2472
2473
2465
2466
2467
2468
2469
2470
2471

2472
2473
2474
2475
2476
2477
2478
2479







-
+









           respSMBCommand['Data']           = _dialects_data
           respSMBCommand['Parameters']     = _dialects_parameters
           connData['_dialects_data']       = _dialects_data
           connData['_dialects_parameters'] = _dialects_parameters

        except Exception, e:
        except Exception as e:
           # No NTLM throw an error
           smbServer.log('smbComNegotiate: %s' % e, logging.ERROR)
           respSMBCommand['Data'] = struct.pack('<H',0xffff)


        smbServer.setConnectionData(connId, connData)

2566
2567
2568
2569
2570
2571
2572
2573

2574
2575
2576
2577
2578
2579
2580
2572
2573
2574
2575
2576
2577
2578

2579
2580
2581
2582
2583
2584
2585
2586







-
+







           blob =  SPNEGO_NegTokenInit(securityBlob)
           token = blob['MechToken']
           if len(blob['MechTypes'][0]) > 0:
               # Is this GSSAPI NTLM or something else we don't support?
               mechType = blob['MechTypes'][0]
               if mechType != TypesMech['NTLMSSP - Microsoft NTLM Security Support Provider']:
                   # Nope, do we know it?
                   if MechTypes.has_key(mechType):
                   if mechType in MechTypes:
                       mechStr = MechTypes[mechType]
                   else:
                       mechStr = hexlify(mechType)
                   smbServer.log("Unsupported MechType '%s'" % mechStr, logging.CRITICAL)
                   # We don't know the token, we answer back again saying
                   # we just support NTLM.
                   # ToDo: Build this into a SPNEGO_NegTokenResp()
2777
2778
2779
2780
2781
2782
2783
2784

2785
2786
2787

2788
2789
2790
2791
2792
2793
2794
2783
2784
2785
2786
2787
2788
2789

2790
2791
2792

2793
2794
2795
2796
2797
2798
2799
2800







-
+


-
+








        respSMBCommand        = smb2.SMB2Create_Response()

        ntCreateRequest       = smb2.SMB2Create(recvPacket['Data'])

        respSMBCommand['Buffer'] = '\x00'
        # Get the Tid associated
        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
        if recvPacket['TreeID'] in connData['ConnectedShares']:
             # If we have a rootFid, the path is relative to that fid
             errorCode = STATUS_SUCCESS
             if connData['ConnectedShares'][recvPacket['TreeID']].has_key('path'):
             if 'path' in connData['ConnectedShares'][recvPacket['TreeID']]:
                 path = connData['ConnectedShares'][recvPacket['TreeID']]['path']
             else:
                 path = 'NONE'
                 errorCode = STATUS_ACCESS_DENIED

             deleteOnClose = False

2816
2817
2818
2819
2820
2821
2822
2823

2824
2825
2826
2827
2828
2829
2830
2822
2823
2824
2825
2826
2827
2828

2829
2830
2831
2832
2833
2834
2835
2836







-
+







                     mode |= os.O_TRUNC | os.O_CREAT
             elif createDisposition & smb2.FILE_CREATE == smb2.FILE_CREATE:
                 if os.path.exists(pathName) is True:
                     errorCode = STATUS_OBJECT_NAME_COLLISION
                 else:
                     mode |= os.O_CREAT
             elif createDisposition & smb2.FILE_OPEN == smb2.FILE_OPEN:
                 if os.path.exists(pathName) is not True and smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)) is not True:
                 if os.path.exists(pathName) is not True and (unicode(pathName) in smbServer.getRegisteredNamedPipes()) is not True:
                     errorCode = STATUS_NO_SUCH_FILE

             if errorCode == STATUS_SUCCESS:
                 desiredAccess = ntCreateRequest['DesiredAccess']
                 if (desiredAccess & smb2.FILE_READ_DATA) or (desiredAccess & smb2.GENERIC_READ):
                     mode |= os.O_RDONLY
                 if (desiredAccess & smb2.FILE_WRITE_DATA) or (desiredAccess & smb2.GENERIC_WRITE):
2838
2839
2840
2841
2842
2843
2844
2845

2846
2847
2848
2849
2850
2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865

2866
2867
2868
2869
2870
2871

2872
2873
2874
2875
2876
2877
2878
2844
2845
2846
2847
2848
2849
2850

2851
2852
2853
2854
2855
2856
2857
2858
2859
2860
2861
2862
2863
2864
2865
2866
2867
2868
2869
2870

2871
2872
2873
2874
2875
2876

2877
2878
2879
2880
2881
2882
2883
2884







-
+



















-
+





-
+







                 createOptions =  ntCreateRequest['CreateOptions']
                 if mode & os.O_CREAT == os.O_CREAT:
                     if createOptions & smb2.FILE_DIRECTORY_FILE == smb2.FILE_DIRECTORY_FILE:
                         try:
                             # Let's create the directory
                             os.mkdir(pathName)
                             mode = os.O_RDONLY
                         except Exception, e:
                         except Exception as e:
                             smbServer.log("SMB2_CREATE: %s,%s,%s" % (pathName,mode,e),logging.ERROR)
                             errorCode = STATUS_ACCESS_DENIED
                 if createOptions & smb2.FILE_NON_DIRECTORY_FILE == smb2.FILE_NON_DIRECTORY_FILE:
                     # If the file being opened is a directory, the server MUST fail the request with
                     # STATUS_FILE_IS_A_DIRECTORY in the Status field of the SMB Header in the server
                     # response.
                     if os.path.isdir(pathName) is True:
                        errorCode = STATUS_FILE_IS_A_DIRECTORY

                 if createOptions & smb2.FILE_DELETE_ON_CLOSE == smb2.FILE_DELETE_ON_CLOSE:
                     deleteOnClose = True

                 if errorCode == STATUS_SUCCESS:
                     try:
                         if os.path.isdir(pathName) and sys.platform == 'win32':
                            fid = VOID_FILE_DESCRIPTOR
                         else:
                            if sys.platform == 'win32':
                               mode |= os.O_BINARY
                            if smbServer.getRegisteredNamedPipes().has_key(unicode(pathName)):
                            if unicode(pathName) in smbServer.getRegisteredNamedPipes():
                                fid = PIPE_FILE_DESCRIPTOR
                                sock = socket.socket()
                                sock.connect(smbServer.getRegisteredNamedPipes()[unicode(pathName)])
                            else:
                                fid = os.open(pathName, mode)
                     except Exception, e:
                     except Exception as e:
                         smbServer.log("SMB2_CREATE: %s,%s,%s" % (pathName,mode,e),logging.ERROR)
                         #print e
                         fid = 0
                         errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_SMB_BAD_TID

2935
2936
2937
2938
2939
2940
2941
2942

2943
2944
2945
2946
2947
2948
2949

2950
2951
2952
2953
2954
2955
2956
2957
2958
2959
2960

2961
2962
2963
2964
2965
2966
2967
2968
2969
2970
2971

2972
2973
2974
2975
2976
2977
2978
2941
2942
2943
2944
2945
2946
2947

2948
2949
2950
2951
2952
2953
2954

2955
2956
2957
2958
2959
2960
2961
2962
2963
2964
2965

2966
2967
2968
2969
2970
2971
2972
2973
2974
2975
2976

2977
2978
2979
2980
2981
2982
2983
2984







-
+






-
+










-
+










-
+








        respSMBCommand        = smb2.SMB2Close_Response()

        closeRequest = smb2.SMB2Close(recvPacket['Data'])

        if str(closeRequest['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(closeRequest['FileID'])
        else:
            fileID = str(closeRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
        if fileID in connData['OpenedFiles']:
             errorCode = STATUS_SUCCESS
             fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
             pathName = connData['OpenedFiles'][fileID]['FileName']
             infoRecord = None
             try:
                 if fileHandle == PIPE_FILE_DESCRIPTOR:
                     connData['OpenedFiles'][fileID]['Socket'].close()
                 elif fileHandle != VOID_FILE_DESCRIPTOR:
                     os.close(fileHandle)
                     infoRecord, errorCode = queryFileInformation(os.path.dirname(pathName), os.path.basename(pathName), smb2.SMB2_FILE_NETWORK_OPEN_INFO)
             except Exception, e:
             except Exception as e:
                 smbServer.log("SMB2_CLOSE %s" % e, logging.ERROR)
                 errorCode = STATUS_INVALID_HANDLE
             else:
                 # Check if the file was marked for removal
                 if connData['OpenedFiles'][fileID]['DeleteOnClose'] is True:
                     try:
                         if os.path.isdir(pathName):
                             shutil.rmtree(connData['OpenedFiles'][fileID]['FileName'])
                         else:
                             os.remove(connData['OpenedFiles'][fileID]['FileName'])
                     except Exception, e:
                     except Exception as e:
                         smbServer.log("SMB2_CLOSE %s" % e, logging.ERROR)
                         errorCode = STATUS_ACCESS_DENIED

                 # Now fill out the response
                 if infoRecord is not None:
                     respSMBCommand['CreationTime']   = infoRecord['CreationTime']
                     respSMBCommand['LastAccessTime'] = infoRecord['LastAccessTime']
3000
3001
3002
3003
3004
3005
3006
3007

3008
3009
3010
3011
3012
3013
3014
3015


3016
3017
3018
3019
3020
3021
3022
3006
3007
3008
3009
3010
3011
3012

3013
3014
3015
3016
3017
3018
3019


3020
3021
3022
3023
3024
3025
3026
3027
3028







-
+






-
-
+
+







        errorCode = STATUS_SUCCESS

        respSMBCommand['OutputBufferOffset'] = 0x48
        respSMBCommand['Buffer'] = '\x00'

        if str(queryInfo['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(queryInfo['FileID'])
        else:
            fileID = str(queryInfo['FileID'])

        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
            if connData['OpenedFiles'].has_key(fileID):
        if recvPacket['TreeID'] in connData['ConnectedShares']:
            if fileID in connData['OpenedFiles']:
                fileName = connData['OpenedFiles'][fileID]['FileName']

                if queryInfo['InfoType'] == smb2.SMB2_0_INFO_FILE:
                    if queryInfo['FileInfoClass'] == smb2.SMB2_FILE_INTERNAL_INFO:
                        # No need to call queryFileInformation, we have the data here
                        infoRecord = smb2.FileInternalInformation()
                        infoRecord['IndexNumber'] = fileID
3051
3052
3053
3054
3055
3056
3057
3058

3059
3060
3061
3062
3063
3064
3065

3066
3067

3068
3069
3070
3071
3072
3073
3074
3057
3058
3059
3060
3061
3062
3063

3064
3065
3066
3067
3068
3069
3070

3071
3072

3073
3074
3075
3076
3077
3078
3079
3080







-
+






-
+

-
+








        setInfo = smb2.SMB2SetInfo(recvPacket['Data'])

        errorCode = STATUS_SUCCESS

        if str(setInfo['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(setInfo['FileID'])
        else:
            fileID = str(setInfo['FileID'])

        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
        if recvPacket['TreeID'] in connData['ConnectedShares']:
            path     = connData['ConnectedShares'][recvPacket['TreeID']]['path']
            if connData['OpenedFiles'].has_key(fileID):
            if fileID in connData['OpenedFiles']:
                pathName = connData['OpenedFiles'][fileID]['FileName']

                if setInfo['InfoType'] == smb2.SMB2_0_INFO_FILE:
                    # The file information is being set
                    informationLevel = setInfo['FileInfoClass']
                    if informationLevel == smb2.SMB2_FILE_DISPOSITION_INFO:
                        infoRecord = smb.SMBSetFileDispositionInfo(setInfo['Buffer'])
3100
3101
3102
3103
3104
3105
3106
3107

3108
3109
3110
3111
3112
3113
3114
3106
3107
3108
3109
3110
3111
3112

3113
3114
3115
3116
3117
3118
3119
3120







-
+







                        renameInfo = smb2.FILE_RENAME_INFORMATION_TYPE_2(setInfo['Buffer'])
                        newPathName = os.path.join(path,renameInfo['FileName'].decode('utf-16le').replace('\\', '/'))
                        if renameInfo['ReplaceIfExists'] == 0 and os.path.exists(newPathName):
                            return [smb2.SMB2Error()], None, STATUS_OBJECT_NAME_COLLISION
                        try:
                             os.rename(pathName,newPathName)
                             connData['OpenedFiles'][fileID]['FileName'] = newPathName
                        except Exception, e:
                        except Exception as e:
                             smbServer.log("smb2SetInfo: %s" % e, logging.ERROR)
                             errorCode = STATUS_ACCESS_DENIED
                    else:
                        smbServer.log('Unknown level for set file info! 0x%x' % informationLevel, logging.ERROR)
                        # UNSUPPORTED
                        errorCode =  STATUS_NOT_SUPPORTED
                #elif setInfo['InfoType'] == smb2.SMB2_0_INFO_FILESYSTEM:
3141
3142
3143
3144
3145
3146
3147
3148

3149
3150
3151
3152
3153
3154
3155

3156
3157
3158
3159
3160
3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171

3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191

3192
3193
3194
3195
3196
3197
3198

3199
3200
3201
3202
3203
3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214

3215
3216
3217
3218
3219
3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230

3231
3232
3233
3234
3235

3236
3237
3238
3239
3240
3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254

3255
3256
3257
3258
3259
3260
3261

3262
3263
3264
3265
3266
3267
3268

3269
3270
3271
3272
3273
3274
3275
3147
3148
3149
3150
3151
3152
3153

3154
3155
3156
3157
3158
3159
3160

3161
3162
3163
3164
3165
3166
3167
3168
3169
3170
3171
3172
3173
3174
3175
3176

3177
3178
3179
3180
3181
3182
3183
3184
3185
3186
3187
3188
3189
3190
3191
3192
3193
3194
3195
3196

3197
3198
3199
3200
3201
3202
3203

3204
3205
3206
3207
3208
3209
3210
3211
3212
3213
3214
3215
3216
3217
3218
3219

3220
3221
3222
3223
3224
3225
3226
3227
3228
3229
3230
3231
3232
3233
3234
3235

3236
3237
3238
3239
3240

3241
3242
3243
3244
3245
3246
3247
3248
3249
3250
3251
3252
3253
3254
3255
3256
3257
3258
3259

3260
3261
3262
3263
3264
3265
3266

3267
3268
3269
3270
3271
3272
3273

3274
3275
3276
3277
3278
3279
3280
3281







-
+






-
+















-
+



















-
+






-
+















-
+















-
+




-
+


















-
+






-
+






-
+







        respSMBCommand = smb2.SMB2Write_Response()
        writeRequest   = smb2.SMB2Write(recvPacket['Data'])

        respSMBCommand['Buffer'] = '\x00'

        if str(writeRequest['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(writeRequest['FileID'])
        else:
            fileID = str(writeRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
        if fileID in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = writeRequest['Offset']
                     # If we're trying to write past the file end we just skip the write call (Vista does this)
                     if os.lseek(fileHandle, 0, 2) >= offset:
                         os.lseek(fileHandle,offset,0)
                         os.write(fileHandle,writeRequest['Buffer'])
                 else:
                     sock = connData['OpenedFiles'][fileID]['Socket']
                     sock.send(writeRequest['Buffer'])

                 respSMBCommand['Count']    = writeRequest['Length']
                 respSMBCommand['Remaining']= 0xff
             except Exception, e:
             except Exception as e:
                 smbServer.log('SMB2_WRITE: %s' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        smbServer.setConnectionData(connId, connData)
        return [respSMBCommand], None, errorCode

    @staticmethod
    def smb2Read(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb2.SMB2Read_Response()
        readRequest   = smb2.SMB2Read(recvPacket['Data'])

        respSMBCommand['Buffer'] = '\x00'

        if str(readRequest['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(readRequest['FileID'])
        else:
            fileID = str(readRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID):
        if fileID in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][fileID]['FileHandle']
             errorCode = 0
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     offset = readRequest['Offset']
                     os.lseek(fileHandle,offset,0)
                     content = os.read(fileHandle,readRequest['Length'])
                 else:
                     sock = connData['OpenedFiles'][fileID]['Socket']
                     content = sock.recv(readRequest['Length'])

                 respSMBCommand['DataOffset']   = 0x50
                 respSMBCommand['DataLength']   = len(content)
                 respSMBCommand['DataRemaining']= 0
                 respSMBCommand['Buffer']       = content
             except Exception, e:
             except Exception as e:
                 smbServer.log('SMB2_READ: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        smbServer.setConnectionData(connId, connData)
        return [respSMBCommand], None, errorCode

    @staticmethod
    def smb2Flush(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb2.SMB2Flush_Response()
        flushRequest   = smb2.SMB2Flush(recvPacket['Data'])

        if connData['OpenedFiles'].has_key(str(flushRequest['FileID'])):
        if str(flushRequest['FileID']) in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][str(flushRequest['FileID'])]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 os.fsync(fileHandle)
             except Exception, e:
             except Exception as e:
                 smbServer.log("SMB2_FLUSH %s" % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_HANDLE

        smbServer.setConnectionData(connId, connData)
        return [respSMBCommand], None, errorCode


    @staticmethod
    def smb2QueryDirectory(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)
        respSMBCommand = smb2.SMB2QueryDirectory_Response()
        queryDirectoryRequest   = smb2.SMB2QueryDirectory(recvPacket['Data'])

        respSMBCommand['Buffer'] = '\x00'

        # The server MUST locate the tree connection, as specified in section 3.3.5.2.11.
        if connData['ConnectedShares'].has_key(recvPacket['TreeID']) is False:
        if (recvPacket['TreeID'] in connData['ConnectedShares']) is False:
            return [smb2.SMB2Error()], None, STATUS_NETWORK_NAME_DELETED

        # Next, the server MUST locate the open for the directory to be queried
        # If no open is found, the server MUST fail the request with STATUS_FILE_CLOSED
        if str(queryDirectoryRequest['FileID']) == '\xff'*16:
            # Let's take the data from the lastRequest
            if  connData['LastRequest'].has_key('SMB2_CREATE'):
            if  'SMB2_CREATE' in connData['LastRequest']:
                fileID = connData['LastRequest']['SMB2_CREATE']['FileID']
            else:
                fileID = str(queryDirectoryRequest['FileID'])
        else:
            fileID = str(queryDirectoryRequest['FileID'])

        if connData['OpenedFiles'].has_key(fileID) is False:
        if (fileID in connData['OpenedFiles']) is False:
            return [smb2.SMB2Error()], None, STATUS_FILE_CLOSED

        # If the open is not an open to a directory, the request MUST be failed
        # with STATUS_INVALID_PARAMETER.
        if os.path.isdir(connData['OpenedFiles'][fileID]['FileName']) is False:
            return [smb2.SMB2Error()], None, STATUS_INVALID_PARAMETER

3379
3380
3381
3382
3383
3384
3385
3386

3387
3388
3389
3390
3391
3392
3393
3385
3386
3387
3388
3389
3390
3391

3392
3393
3394
3395
3396
3397
3398
3399







-
+








    @staticmethod
    def smb2TreeDisconnect(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb2.SMB2TreeDisconnect_Response()

        if connData['ConnectedShares'].has_key(recvPacket['TreeID']):
        if recvPacket['TreeID'] in connData['ConnectedShares']:
            smbServer.log("Disconnecting Share(%d:%s)" % (recvPacket['TreeID'],connData['ConnectedShares'][recvPacket['TreeID']]['shareName']))
            del(connData['ConnectedShares'][recvPacket['TreeID']])
            errorCode = STATUS_SUCCESS
        else:
            # STATUS_SMB_BAD_TID
            errorCode = STATUS_SMB_BAD_TID

3416
3417
3418
3419
3420
3421
3422
3423

3424
3425
3426
3427
3428
3429
3430
3422
3423
3424
3425
3426
3427
3428

3429
3430
3431
3432
3433
3434
3435
3436







-
+







    def smb2Ioctl(connId, smbServer, recvPacket):
        connData = smbServer.getConnectionData(connId)

        respSMBCommand = smb2.SMB2Ioctl_Response()
        ioctlRequest   = smb2.SMB2Ioctl(recvPacket['Data'])

        ioctls = smbServer.getIoctls()
        if ioctls.has_key(ioctlRequest['CtlCode']):
        if ioctlRequest['CtlCode'] in ioctls:
            outputData, errorCode = ioctls[ioctlRequest['CtlCode']](connId, smbServer, ioctlRequest)
            if errorCode == STATUS_SUCCESS:
                respSMBCommand['CtlCode']      = ioctlRequest['CtlCode']
                respSMBCommand['FileID']       = ioctlRequest['FileID']
                respSMBCommand['InputOffset']  = 0
                respSMBCommand['InputCount']   = 0
                respSMBCommand['OutputOffset'] = 0x70
3471
3472
3473
3474
3475
3476
3477
3478

3479
3480
3481
3482
3483
3484
3485
3486
3487
3488

3489
3490
3491
3492
3493
3494
3495
3477
3478
3479
3480
3481
3482
3483

3484
3485
3486
3487
3488
3489
3490
3491
3492
3493

3494
3495
3496
3497
3498
3499
3500
3501







-
+









-
+








   @staticmethod
   def fsctlPipeTransceive(connId, smbServer, ioctlRequest):
        connData = smbServer.getConnectionData(connId)

        ioctlResponse = ''

        if connData['OpenedFiles'].has_key(str(ioctlRequest['FileID'])):
        if str(ioctlRequest['FileID']) in connData['OpenedFiles']:
             fileHandle = connData['OpenedFiles'][str(ioctlRequest['FileID'])]['FileHandle']
             errorCode = STATUS_SUCCESS
             try:
                 if fileHandle != PIPE_FILE_DESCRIPTOR:
                     errorCode = STATUS_INVALID_DEVICE_REQUEST
                 else:
                     sock = connData['OpenedFiles'][str(ioctlRequest['FileID'])]['Socket']
                     sock.sendall(ioctlRequest['Buffer'])
                     ioctlResponse = sock.recv(ioctlRequest['MaxOutputResponse'])
             except Exception, e:
             except Exception as e:
                 smbServer.log('fsctlPipeTransceive: %s ' % e, logging.ERROR)
                 errorCode = STATUS_ACCESS_DENIED
        else:
            errorCode = STATUS_INVALID_DEVICE_REQUEST

        smbServer.setConnectionData(connId, connData)
        return ioctlResponse, errorCode
3547
3548
3549
3550
3551
3552
3553
3554

3555
3556
3557
3558
3559
3560
3561
3553
3554
3555
3556
3557
3558
3559

3560
3561
3562
3563
3564
3565
3566
3567







-
+







                   self.__request.send(r.rawData())
                else:
                   resp = self.__SMB.processRequest(self.__connId, p.get_trailer())
                   # Send all the packets recevied. Except for big transactions this should be
                   # a single packet
                   for i in resp:
                       session.send_packet(str(i))
            except Exception, e:
            except Exception as e:
                self.__SMB.log("Handle: %s" % e)
                #import traceback
                #traceback.print_exc()
                break

    def finish(self):
        # Thread/process is dying, we should tell the main SMB thread to remove all this thread data
3730
3731
3732
3733
3734
3735
3736
3737

3738
3739
3740
3741
3742
3743
3744
3745
3746
3747
3748
3749
3750

3751
3752
3753
3754
3755
3756

3757
3758
3759
3760
3761
3762
3763
3736
3737
3738
3739
3740
3741
3742

3743
3744
3745
3746
3747
3748
3749
3750
3751
3752
3753
3754
3755

3756
3757
3758
3759
3760
3761

3762
3763
3764
3765
3766
3767
3768
3769







-
+












-
+





-
+







        self.__activeConnections[connId] = data
        #print "setConnectionData"
        #print self.__activeConnections

    def getConnectionData(self, connId, checkStatus = True):
        conn = self.__activeConnections[connId]
        if checkStatus is True:
            if conn.has_key('Authenticated') is not True:
            if ('Authenticated' in conn) is not True:
                # Can't keep going further
                raise Exception("User not Authenticated!")
        return conn

    def getRegisteredNamedPipes(self):
        return self.__registeredNamedPipes

    def registerNamedPipe(self, pipeName, address):
        self.__registeredNamedPipes[unicode(pipeName)] = address
        return True

    def unregisterNamedPipe(self, pipeName):
        if self.__registeredNamedPipes.has_key(pipeName):
        if pipeName in self.__registeredNamedPipes:
            del(self.__registeredNamedPipes[unicode(pipeName)])
            return True
        return False

    def unregisterTransaction(self, transCommand):
        if self.__smbTransCommands.has_key(transCommand):
        if transCommand in self.__smbTransCommands:
           del(self.__smbTransCommands[transCommand])

    def hookTransaction(self, transCommand, callback):
        # If you call this function, callback will replace
        # the current Transaction sub command.
        # (don't get confused with the Transaction smbCommand)
        # If the transaction sub command doesn't not exist, it is added
3784
3785
3786
3787
3788
3789
3790
3791

3792
3793
3794
3795
3796
3797
3798
3799
3800

3801
3802
3803
3804
3805
3806

3807
3808
3809
3810
3811
3812
3813
3814
3815

3816
3817
3818
3819
3820
3821

3822
3823
3824
3825
3826
3827
3828
3829
3830

3831
3832
3833
3834
3835
3836
3837
3790
3791
3792
3793
3794
3795
3796

3797
3798
3799
3800
3801
3802
3803
3804
3805

3806
3807
3808
3809
3810
3811

3812
3813
3814
3815
3816
3817
3818
3819
3820

3821
3822
3823
3824
3825
3826

3827
3828
3829
3830
3831
3832
3833
3834
3835

3836
3837
3838
3839
3840
3841
3842
3843







-
+








-
+





-
+








-
+





-
+








-
+







        # WHERE:
        #
        # respSetup: the setup response of the transaction
        # respParameters: the parameters response of the transaction
        # respData: the data reponse of the transaction
        # errorCode: the NT error code

        if self.__smbTransCommands.has_key(transCommand):
        if transCommand in self.__smbTransCommands:
           originalCommand = self.__smbTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbTransCommands[transCommand] = callback
        return originalCommand

    def unregisterTransaction2(self, transCommand):
        if self.__smbTrans2Commands.has_key(transCommand):
        if transCommand in self.__smbTrans2Commands:
           del(self.__smbTrans2Commands[transCommand])

    def hookTransaction2(self, transCommand, callback):
        # Here we should add to __smbTrans2Commands
        # Same description as Transaction
        if self.__smbTrans2Commands.has_key(transCommand):
        if transCommand in self.__smbTrans2Commands:
           originalCommand = self.__smbTrans2Commands[transCommand]
        else:
           originalCommand = None

        self.__smbTrans2Commands[transCommand] = callback
        return originalCommand

    def unregisterNTTransaction(self, transCommand):
        if self.__smbNTTransCommands.has_key(transCommand):
        if transCommand in self.__smbNTTransCommands:
           del(self.__smbNTTransCommands[transCommand])

    def hookNTTransaction(self, transCommand, callback):
        # Here we should add to __smbNTTransCommands
        # Same description as Transaction
        if self.__smbNTTransCommands.has_key(transCommand):
        if transCommand in self.__smbNTTransCommands:
           originalCommand = self.__smbNTTransCommands[transCommand]
        else:
           originalCommand = None

        self.__smbNTTransCommands[transCommand] = callback
        return originalCommand

    def unregisterSmbCommand(self, smbCommand):
        if self.__smbCommands.has_key(smbCommand):
        if smbCommand in self.__smbCommands:
           del(self.__smbCommands[smbCommand])

    def hookSmbCommand(self, smbCommand, callback):
        # Here we should add to self.__smbCommands
        # If you call this function, callback will replace
        # the current smbCommand.
        # If smbCommand doesn't not exist, it is added
3862
3863
3864
3865
3866
3867
3868
3869

3870
3871
3872
3873
3874
3875
3876
3877
3878

3879
3880
3881
3882

3883
3884
3885
3886
3887
3888
3889
3868
3869
3870
3871
3872
3873
3874

3875
3876
3877
3878
3879
3880
3881
3882
3883

3884
3885
3886
3887

3888
3889
3890
3891
3892
3893
3894
3895







-
+








-
+



-
+







        # callback(connId, smbServer, SMBCommand, recvPacket, transCommands)
        #
        # WHERE:
        #
        # transCommands: a list of transaction subcommands already registered
        #

        if self.__smbCommands.has_key(smbCommand):
        if smbCommand in self.__smbCommands:
           originalCommand = self.__smbCommands[smbCommand]
        else:
           originalCommand = None

        self.__smbCommands[smbCommand] = callback
        return originalCommand

    def unregisterSmb2Command(self, smb2Command):
        if self.__smb2Commands.has_key(smb2Command):
        if smb2Command in self.__smb2Commands:
           del(self.__smb2Commands[smb2Command])

    def hookSmb2Command(self, smb2Command, callback):
        if self.__smb2Commands.has_key(smb2Command):
        if smb2Command in self.__smb2Commands:
           originalCommand = self.__smb2Commands[smb2Command]
        else:
           originalCommand = None

        self.__smb2Commands[smb2Command] = callback
        return originalCommand

3965
3966
3967
3968
3969
3970
3971
3972

3973
3974
3975
3976
3977
3978

3979
3980
3981
3982
3983
3984
3985
3971
3972
3973
3974
3975
3976
3977

3978
3979
3980
3981
3982
3983

3984
3985
3986
3987
3988
3989
3990
3991







-
+





-
+







                    respCommands, respPackets, errorCode = self.__smbCommands[packet['Command']](
                                  connId,
                                  self,
                                  SMBCommand,
                                  packet,
                                  self.__smbTransCommands)
                else:
                    if self.__smbCommands.has_key(packet['Command']):
                    if packet['Command'] in self.__smbCommands:
                       if self.__SMB2Support is True:
                           if packet['Command'] == smb.SMB.SMB_COM_NEGOTIATE:
                               try:
                                   respCommands, respPackets, errorCode = self.__smb2Commands[smb2.SMB2_NEGOTIATE](connId, self, packet, True)
                                   isSMB2 = True
                               except Exception, e:
                               except Exception as e:
                                   self.log('SMB2_NEGOTIATE: %s' % e, logging.ERROR)
                                   # If something went wrong, let's fallback to SMB1
                                   respCommands, respPackets, errorCode = self.__smbCommands[packet['Command']](
                                       connId,
                                       self,
                                       SMBCommand,
                                       packet)
4002
4003
4004
4005
4006
4007
4008
4009

4010
4011
4012
4013
4014
4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028

4029
4030
4031
4032
4033
4034
4035
4008
4009
4010
4011
4012
4013
4014

4015
4016
4017
4018
4019
4020
4021
4022
4023
4024
4025
4026
4027
4028
4029
4030
4031
4032
4033

4034
4035
4036
4037
4038
4039
4040
4041







-
+


















-
+








                compoundedPacketsResponse.append((respCommands, respPackets, errorCode))
                compoundedPackets.append(packet)

            else:
                done = False
                while not done:
                    if self.__smb2Commands.has_key(packet['Command']):
                    if packet['Command'] in self.__smb2Commands:
                       if self.__SMB2Support is True:
                           respCommands, respPackets, errorCode = self.__smb2Commands[packet['Command']](
                                   connId,
                                   self,
                                   packet)
                       else:
                           respCommands, respPackets, errorCode = self.__smb2Commands[255](connId, self, packet)
                    else:
                       respCommands, respPackets, errorCode = self.__smb2Commands[255](connId, self, packet)
                    # Let's store the result for this compounded packet
                    compoundedPacketsResponse.append((respCommands, respPackets, errorCode))
                    compoundedPackets.append(packet)
                    if packet['NextCommand'] != 0:
                        data = data[packet['NextCommand']:]
                        packet = smb2.SMB2Packet(data = data)
                    else:
                        done = True

        except Exception, e:
        except Exception as e:
            #import traceback
            #traceback.print_exc()
            # Something wen't wrong, defaulting to Bad user ID
            self.log('processRequest (0x%x,%s)' % (packet['Command'],e), logging.ERROR)
            raise

        # We prepare the response packet to commands don't need to bother about that.
Changes to jni/curl/tests/python_dependencies/impacket/spnego.py.

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
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
+















-
+



















-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


-
+




-
+







from __future__ import print_function
# Copyright (c) 2003-2016 CORE Security Technologies
#
# This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#
# Author: Alberto Solino (beto@coresecurity.com)
#
# Description:
#   SPNEGO functions used by SMB, SMB2/3 and DCERPC
#

from struct import pack, unpack, calcsize

############### GSS Stuff ################
GSS_API_SPNEGO_UUID              = '\x2b\x06\x01\x05\x05\x02' 
GSS_API_SPNEGO_UUID              = '\x2b\x06\x01\x05\x05\x02'
ASN1_SEQUENCE                    = 0x30
ASN1_AID                         = 0x60
ASN1_OID                         = 0x06
ASN1_OCTET_STRING                = 0x04
ASN1_MECH_TYPE                   = 0xa0
ASN1_MECH_TOKEN                  = 0xa2
ASN1_SUPPORTED_MECH              = 0xa1
ASN1_RESPONSE_TOKEN              = 0xa2
ASN1_ENUMERATED                  = 0x0a
MechTypes = {
'+\x06\x01\x04\x01\x827\x02\x02\x1e': 'SNMPv2-SMI::enterprises.311.2.2.30',
'+\x06\x01\x04\x01\x827\x02\x02\n': 'NTLMSSP - Microsoft NTLM Security Support Provider',
'*\x86H\x82\xf7\x12\x01\x02\x02': 'MS KRB5 - Microsoft Kerberos 5',
'*\x86H\x86\xf7\x12\x01\x02\x02': 'KRB5 - Kerberos 5',
'*\x86H\x86\xf7\x12\x01\x02\x02\x03': 'KRB5 - Kerberos 5 - User to User'
}
TypesMech = dict((v,k) for k, v in MechTypes.iteritems())

def asn1encode(data = ''):
        #res = asn1.SEQUENCE(str).encode()
        #import binascii
        #print '\nalex asn1encode str: %s\n' % binascii.hexlify(str)
        if 0 <= len(data) <= 0x7F:
            res = pack('B', len(data)) + data
        elif 0x80 <= len(data) <= 0xFF:
            res = pack('BB', 0x81, len(data)) + data
        elif 0x100 <= len(data) <= 0xFFFF:
            res = pack('!BH', 0x82, len(data)) + data
        elif 0x10000 <= len(data) <= 0xffffff:
            res = pack('!BBH', 0x83, len(data) >> 16, len(data) & 0xFFFF) + data
        elif 0x1000000 <= len(data) <= 0xffffffff:
            res = pack('!BL', 0x84, len(data)) + data
        else:
            raise Exception('Error in asn1encode')
        return str(res)
    #res = asn1.SEQUENCE(str).encode()
    #import binascii
    #print '\nalex asn1encode str: %s\n' % binascii.hexlify(str)
    if 0 <= len(data) <= 0x7F:
        res = pack('B', len(data)) + data
    elif 0x80 <= len(data) <= 0xFF:
        res = pack('BB', 0x81, len(data)) + data
    elif 0x100 <= len(data) <= 0xFFFF:
        res = pack('!BH', 0x82, len(data)) + data
    elif 0x10000 <= len(data) <= 0xffffff:
        res = pack('!BBH', 0x83, len(data) >> 16, len(data) & 0xFFFF) + data
    elif 0x1000000 <= len(data) <= 0xffffffff:
        res = pack('!BL', 0x84, len(data)) + data
    else:
        raise Exception('Error in asn1encode')
    return str(res)

def asn1decode(data = ''):
        len1 = unpack('B', data[:1])[0]
        data = data[1:]
        if len1 == 0x81:
            pad = calcsize('B')
            len2 = unpack('B',data[:pad])[0]
            data = data[pad:]
            ans = data[:len2]
        elif len1 == 0x82:
            pad = calcsize('H')
            len2 = unpack('!H', data[:pad])[0]
            data = data[pad:]
            ans = data[:len2]
        elif len1 == 0x83:
            pad = calcsize('B') + calcsize('!H')
            len2, len3 = unpack('!BH', data[:pad])
            data = data[pad:]
            ans = data[:len2 << 16 + len3]
        elif len1 == 0x84:
            pad = calcsize('!L')
            len2 = unpack('!L', data[:pad])[0]
            data = data[pad:]
            ans = data[:len2]
        # 1 byte length, string <= 0x7F
	else:
            pad = 0
            ans = data[:len1]
        return ans, len(ans)+pad+1
    len1 = unpack('B', data[:1])[0]
    data = data[1:]
    if len1 == 0x81:
        pad = calcsize('B')
        len2 = unpack('B',data[:pad])[0]
        data = data[pad:]
        ans = data[:len2]
    elif len1 == 0x82:
        pad = calcsize('H')
        len2 = unpack('!H', data[:pad])[0]
        data = data[pad:]
        ans = data[:len2]
    elif len1 == 0x83:
        pad = calcsize('B') + calcsize('!H')
        len2, len3 = unpack('!BH', data[:pad])
        data = data[pad:]
        ans = data[:len2 << 16 + len3]
    elif len1 == 0x84:
        pad = calcsize('!L')
        len2 = unpack('!L', data[:pad])[0]
        data = data[pad:]
        ans = data[:len2]
    # 1 byte length, string <= 0x7F
    else:
        pad = 0
        ans = data[:len1]
    return ans, len(ans)+pad+1

class GSSAPI:
# Generic GSSAPI Header Format 
# Generic GSSAPI Header Format
    def __init__(self, data = None):
        self.fields = {}
        self['UUID'] = GSS_API_SPNEGO_UUID
        if data:
             self.fromString(data)
            self.fromString(data)
        pass

    def __setitem__(self,key,value):
        self.fields[key] = value

    def __getitem__(self, key):
        return self.fields[key]
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
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







-
+

-
+




-
+




-
+


-
+




-
+







        # GSSAPI OID
        # UUID data (BER Encoded)
        # Payload
        next_byte = unpack('B',data[:1])[0]
        if next_byte != ASN1_AID:
            raise Exception('Unknown AID=%x' % next_byte)
        data = data[1:]
        decode_data, total_bytes = asn1decode(data) 
        decode_data, total_bytes = asn1decode(data)
        # Now we should have a OID tag
       	next_byte = unpack('B',decode_data[:1])[0]
        next_byte = unpack('B',decode_data[:1])[0]
        if next_byte !=  ASN1_OID:
            raise Exception('OID tag not found %x' % next_byte)
        decode_data = decode_data[1:]
        # Now the OID contents, should be SPNEGO UUID
        uuid, total_bytes = asn1decode(decode_data)                
        uuid, total_bytes = asn1decode(decode_data)
        self['OID'] = uuid
        # the rest should be the data
        self['Payload'] = decode_data[total_bytes:]
        #pass
        

    def dump(self):
        for i in self.fields.keys():
            print "%s: {%r}" % (i,self[i])
            print("%s: {%r}" % (i,self[i]))

    def getData(self):
        ans = pack('B',ASN1_AID)
        ans += asn1encode(
               pack('B',ASN1_OID) + 
               pack('B',ASN1_OID) +
               asn1encode(self['UUID']) +
               self['Payload'] )
        return ans

class SPNEGO_NegTokenResp:
    # http://tools.ietf.org/html/rfc4178#page-9
    # NegTokenResp ::= SEQUENCE {
159
160
161
162
163
164
165
166

167
168
169
170
171
172
173
160
161
162
163
164
165
166

167
168
169
170
171
172
173
174







-
+







    # This structure is not prepended by a GSS generic header!
    SPNEGO_NEG_TOKEN_RESP = 0xa1
    SPNEGO_NEG_TOKEN_TARG = 0xa0

    def __init__(self, data = None):
        self.fields = {}
        if data:
             self.fromString(data)
            self.fromString(data)
        pass

    def __setitem__(self,key,value):
        self.fields[key] = value

    def __getitem__(self, key):
        return self.fields[key]
194
195
196
197
198
199
200
201

202
203
204
205
206
207
208
195
196
197
198
199
200
201

202
203
204
205
206
207
208
209







-
+







        decode_data = decode_data[1:]
        decode_data, total_bytes = asn1decode(decode_data)
        next_byte = unpack('B',decode_data[:1])[0]

        if next_byte != ASN1_MECH_TYPE:
            # MechType not found, could be an AUTH answer
            if next_byte != ASN1_RESPONSE_TOKEN:
               raise Exception('MechType/ResponseToken tag not found %x' % next_byte)
                raise Exception('MechType/ResponseToken tag not found %x' % next_byte)
        else:
            decode_data2 = decode_data[1:]
            decode_data2, total_bytes = asn1decode(decode_data2)
            next_byte = unpack('B', decode_data2[:1])[0]
            if next_byte != ASN1_ENUMERATED:
                raise Exception('Enumerated tag not found %x' % next_byte)
            item, total_bytes2 = asn1decode(decode_data)
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
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







-
-
+
+


-
+






-
+


-
+





-
+


-
+
















-
+

-
+

-
+






-
+





-
+


















-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+







            raise Exception('Octet string token tag not found %x' % next_byte)
        decode_data = decode_data[1:]
        decode_data, total_bytes = asn1decode(decode_data)
        self['ResponseToken'] = decode_data

    def dump(self):
        for i in self.fields.keys():
            print "%s: {%r}" % (i,self[i])
        
            print("%s: {%r}" % (i,self[i]))

    def getData(self):
        ans = pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_RESP)
        if self.fields.has_key('NegResult') and self.fields.has_key('SupportedMech'):
        if 'NegResult' in self.fields and 'SupportedMech' in self.fields:
            # Server resp
            ans += asn1encode(
               pack('B', ASN1_SEQUENCE) +
               asn1encode(
               pack('B',SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_TARG) +
               asn1encode(
               pack('B',ASN1_ENUMERATED) + 
               pack('B',ASN1_ENUMERATED) +
               asn1encode( self['NegResult'] )) +
               pack('B',ASN1_SUPPORTED_MECH) +
               asn1encode( 
               asn1encode(
               pack('B',ASN1_OID) +
               asn1encode(self['SupportedMech'])) +
               pack('B',ASN1_RESPONSE_TOKEN ) +
               asn1encode(
               pack('B', ASN1_OCTET_STRING) + asn1encode(self['ResponseToken']))))
        elif self.fields.has_key('NegResult'):
        elif 'NegResult' in self.fields:
            # Server resp
            ans += asn1encode(
               pack('B', ASN1_SEQUENCE) + 
               pack('B', ASN1_SEQUENCE) +
               asn1encode(
               pack('B', SPNEGO_NegTokenResp.SPNEGO_NEG_TOKEN_TARG) +
               asn1encode(
               pack('B',ASN1_ENUMERATED) +
               asn1encode( self['NegResult'] ))))
        else:
            # Client resp
            ans += asn1encode(
               pack('B', ASN1_SEQUENCE) +
               asn1encode(
               pack('B', ASN1_RESPONSE_TOKEN) +
               asn1encode(
               pack('B', ASN1_OCTET_STRING) + asn1encode(self['ResponseToken']))))
        return ans

class SPNEGO_NegTokenInit(GSSAPI):
    # http://tools.ietf.org/html/rfc4178#page-8 
    # http://tools.ietf.org/html/rfc4178#page-8
    # NegTokeInit :: = SEQUENCE {
    #   mechTypes	[0] MechTypeList,
    #   mechTypes       [0] MechTypeList,
    #   reqFlags        [1] ContextFlags OPTIONAL,
    #   mechToken       [2] OCTET STRING OPTIONAL,	
    #   mechToken       [2] OCTET STRING OPTIONAL,
    #   mechListMIC     [3] OCTET STRING OPTIONAL,
    # }
    SPNEGO_NEG_TOKEN_INIT = 0xa0
    def fromString(self, data = 0):
        GSSAPI.fromString(self, data)
        payload = self['Payload']
        next_byte = unpack('B', payload[:1])[0] 
        next_byte = unpack('B', payload[:1])[0]
        if next_byte != SPNEGO_NegTokenInit.SPNEGO_NEG_TOKEN_INIT:
            raise Exception('NegTokenInit not found %x' % next_byte)
        payload = payload[1:]
        decode_data, total_bytes = asn1decode(payload)
        # Now we should have a SEQUENCE Tag
	next_byte = unpack('B', decode_data[:1])[0]
        next_byte = unpack('B', decode_data[:1])[0]
        if next_byte != ASN1_SEQUENCE:
            raise Exception('SEQUENCE tag not found %x' % next_byte)
        decode_data = decode_data[1:]
        decode_data, total_bytes2 = asn1decode(decode_data)
        next_byte = unpack('B',decode_data[:1])[0]
        if next_byte != ASN1_MECH_TYPE:
            raise Exception('MechType tag not found %x' % next_byte)
        decode_data = decode_data[1:]
        remaining_data = decode_data
        decode_data, total_bytes3 = asn1decode(decode_data)
        next_byte = unpack('B', decode_data[:1])[0]
        if next_byte != ASN1_SEQUENCE:
            raise Exception('SEQUENCE tag not found %x' % next_byte)
        decode_data = decode_data[1:]
        decode_data, total_bytes4 = asn1decode(decode_data)
        # And finally we should have the MechTypes
        self['MechTypes'] = []
        while decode_data:
           next_byte = unpack('B', decode_data[:1])[0]
           if next_byte != ASN1_OID:    
             # Not a valid OID, there must be something else we won't unpack
             break
           decode_data = decode_data[1:]
           item, total_bytes = asn1decode(decode_data)
           self['MechTypes'].append(item)
           decode_data = decode_data[total_bytes:]
            next_byte = unpack('B', decode_data[:1])[0]
            if next_byte != ASN1_OID:
            # Not a valid OID, there must be something else we won't unpack
                break
            decode_data = decode_data[1:]
            item, total_bytes = asn1decode(decode_data)
            self['MechTypes'].append(item)
            decode_data = decode_data[total_bytes:]

        # Do we have MechTokens as well?
        decode_data = remaining_data[total_bytes3:]
        if len(decode_data) > 0:
            next_byte = unpack('B', decode_data[:1])[0]
            if next_byte == ASN1_MECH_TOKEN:
                # We have tokens in here!
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
349
350
351
352
353
354
355

356
357
358
359
360
361
362
363
364
365
366

367
368
369
370
371
372








-
+










-
+





-
        mechTypes = ''
        for i in self['MechTypes']:
            mechTypes += pack('B', ASN1_OID)
            mechTypes += asn1encode(i)

        mechToken = ''
        # Do we have tokens to send?
        if self.fields.has_key('MechToken'):
        if 'MechToken' in self.fields:
            mechToken = pack('B', ASN1_MECH_TOKEN) + asn1encode(
                pack('B', ASN1_OCTET_STRING) + asn1encode(
                    self['MechToken']))

        ans = pack('B',SPNEGO_NegTokenInit.SPNEGO_NEG_TOKEN_INIT)
        ans += asn1encode(
               pack('B', ASN1_SEQUENCE) +
               asn1encode(
               pack('B', ASN1_MECH_TYPE) +
               asn1encode(
               pack('B', ASN1_SEQUENCE) + 
               pack('B', ASN1_SEQUENCE) +
               asn1encode(mechTypes)) + mechToken ))


        self['Payload'] = ans
        return GSSAPI.getData(self)
     
Changes to jni/curl/tests/python_dependencies/impacket/structure.py.

1
2
3
4
5
6
7
1
2
3
4
5
6
7
8
+







from __future__ import print_function
# Copyright (c) 2003-2016 CORE Security Technologies
#
# This software is provided under under a slightly modified version
# of the Apache Software License. See the accompanying LICENSE file
# for more information.
#

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
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







-
+




-
+





-
+










-
-
+
+















-
+


-
+





-
+







        self.alignment = alignment

    def setData(self, data):
        self.data = data

    def packField(self, fieldName, format = None):
        if self.debug:
            print "packField( %s | %s )" % (fieldName, format)
            print("packField( %s | %s )" % (fieldName, format))

        if format is None:
            format = self.formatForField(fieldName)

        if self.fields.has_key(fieldName):
        if fieldName in self.fields:
            ans = self.pack(format, self.fields[fieldName], field = fieldName)
        else:
            ans = self.pack(format, None, field = fieldName)

        if self.debug:
            print "\tanswer %r" % ans
            print("\tanswer %r" % ans)

        return ans

    def getData(self):
        if self.data is not None:
            return self.data
        data = ''
        for field in self.commonHdr+self.structure:
            try:
                data += self.packField(field[0], field[1])
            except Exception, e:
                if self.fields.has_key(field[0]):
            except Exception as e:
                if field[0] in self.fields:
                    e.args += ("When packing field '%s | %s | %r' in %s" % (field[0], field[1], self[field[0]], self.__class__),)
                else:
                    e.args += ("When packing field '%s | %s' in %s" % (field[0], field[1], self.__class__),)
                raise
            if self.alignment:
                if len(data) % self.alignment:
                    data += ('\x00'*self.alignment)[:-(len(data) % self.alignment)]
            
        #if len(data) % self.alignment: data += ('\x00'*self.alignment)[:-(len(data) % self.alignment)]
        return data

    def fromString(self, data):
        self.rawData = data
        for field in self.commonHdr+self.structure:
            if self.debug:
                print "fromString( %s | %s | %r )" % (field[0], field[1], data)
                print("fromString( %s | %s | %r )" % (field[0], field[1], data))
            size = self.calcUnpackSize(field[1], data, field[0])
            if self.debug:
                print "  size = %d" % size
                print("  size = %d" % size)
            dataClassOrCode = str
            if len(field) > 2:
                dataClassOrCode = field[2]
            try:
                self[field[0]] = self.unpack(field[1], data[:size], dataClassOrCode = dataClassOrCode, field = field[0])
            except Exception,e:
            except Exception as e:
                e.args += ("When unpacking field '%s | %s | %r[:%d]'" % (field[0], field[1], data, size),)
                raise

            size = self.calcPackSize(field[1], self[field[0]], field[0])
            if self.alignment and size % self.alignment:
                size += self.alignment - (size % self.alignment)
            data = data[size:]
171
172
173
174
175
176
177
178

179
180
181
182
183
184
185
172
173
174
175
176
177
178

179
180
181
182
183
184
185
186







-
+








    def __len__(self):
        # XXX: improve
        return len(self.getData())

    def pack(self, format, data, field = None):
        if self.debug:
            print "  pack( %s | %r | %s)" %  (format, data, field)
            print("  pack( %s | %r | %s)" %  (format, data, field))

        if field:
            addressField = self.findAddressFieldFor(field)
            if (addressField is not None) and (data is None):
                return ''

        # void specifier
202
203
204
205
206
207
208
209

210
211
212
213
214
215
216
203
204
205
206
207
208
209

210
211
212
213
214
215
216
217







-
+








        # address specifier
        two = format.split('&')
        if len(two) == 2:
            try:
                return self.pack(two[0], data)
            except:
                if (self.fields.has_key(two[1])) and (self[two[1]] is not None):
                if (two[1] in self.fields) and (self[two[1]] is not None):
                    return self.pack(two[0], id(self[two[1]]) & ((1<<(calcsize(two[0])*8))-1) )
                else:
                    return self.pack(two[0], 0)

        # length specifier
        two = format.split('-')
        if len(two) == 2:
224
225
226
227
228
229
230
231

232
233
234
235
236
237
238
225
226
227
228
229
230
231

232
233
234
235
236
237
238
239







-
+







        if len(two) == 2:
            answer = ''
            for each in data:
                answer += self.pack(two[1], each)
            if two[0]:
                if two[0].isdigit():
                    if int(two[0]) != len(data):
                        raise Exception, "Array field has a constant size, and it doesn't match the actual value"
                        raise Exception("Array field has a constant size, and it doesn't match the actual value")
                else:
                    return self.pack(two[0], len(data))+answer
            return answer

        # "printf" string specifier
        if format[:1] == '%':
            # format string like specifier
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
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







-
+










-
+




















-
+







                data = '\0\0'
            elif len(data) % 2:
                data += '\0'
            l = pack('<L', len(data)/2)
            return '%s\0\0\0\0%s%s' % (l,l,data)
                    
        if data is None:
            raise Exception, "Trying to pack None"
            raise Exception("Trying to pack None")
        
        # literal specifier
        if format[:1] == ':':
            return str(data)

        # struct like specifier
        return pack(format, data)

    def unpack(self, format, data, dataClassOrCode = str, field = None):
        if self.debug:
            print "  unpack( %s | %r )" %  (format, data)
            print("  unpack( %s | %r )" %  (format, data))

        if field:
            addressField = self.findAddressFieldFor(field)
            if addressField is not None:
                if not self[addressField]:
                    return

        # void specifier
        if format[:1] == '_':
            if dataClassOrCode != str:
                fields = {'self':self, 'inputDataLeft':data}
                fields.update(self.fields)
                return eval(dataClassOrCode, {}, fields)
            else:
                return None

        # quote specifier
        if format[:1] == "'" or format[:1] == '"':
            answer = format[1:]
            if answer != data:
                raise Exception, "Unpacked data doesn't match constant value '%r' should be '%r'" % (data, answer)
                raise Exception("Unpacked data doesn't match constant value '%r' should be '%r'" % (data, answer))
            return answer

        # address specifier
        two = format.split('&')
        if len(two) == 2:
            return self.unpack(two[0],data)

330
331
332
333
334
335
336
337

338
339
340
341
342
343

344
345
346
347
348
349
350
331
332
333
334
335
336
337

338
339
340
341
342
343

344
345
346
347
348
349
350
351







-
+





-
+







        if format[:1] == '%':
            # format string like specifier
            return format % data

        # asciiz specifier
        if format == 'z':
            if data[-1] != '\x00':
                raise Exception, ("%s 'z' field is not NUL terminated: %r" % (field, data))
                raise Exception("%s 'z' field is not NUL terminated: %r" % (field, data))
            return data[:-1] # remove trailing NUL

        # unicode specifier
        if format == 'u':
            if data[-2:] != '\x00\x00':
                raise Exception, ("%s 'u' field is not NUL-NUL terminated: %r" % (field, data))
                raise Exception("%s 'u' field is not NUL-NUL terminated: %r" % (field, data))
            return data[:-2] # remove trailing NUL

        # DCE-RPC/NDR string specifier
        if format == 'w':
            l = unpack('<L', data[:4])[0]
            return data[12:12+l*2]

388
389
390
391
392
393
394
395

396
397
398
399
400
401
402
389
390
391
392
393
394
395

396
397
398
399
400
401
402
403







-
+








        # array specifier
        two = format.split('*')
        if len(two) == 2:
            answer = 0
            if two[0].isdigit():
                    if int(two[0]) != len(data):
                        raise Exception, "Array field has a constant size, and it doesn't match the actual value"
                        raise Exception("Array field has a constant size, and it doesn't match the actual value")
            elif two[0]:
                answer += self.calcPackSize(two[0], len(data))

            for each in data:
                answer += self.calcPackSize(two[1], each)
            return answer

424
425
426
427
428
429
430
431

432
433
434
435
436
437
438
425
426
427
428
429
430
431

432
433
434
435
436
437
438
439







-
+







            return len(data)

        # struct like specifier
        return calcsize(format)

    def calcUnpackSize(self, format, data, field = None):
        if self.debug:
            print "  calcUnpackSize( %s | %s | %r)" %  (field, format, data)
            print("  calcUnpackSize( %s | %s | %r)" %  (field, format, data))

        # void specifier
        if format[:1] == '_':
            return 0

        addressField = self.findAddressFieldFor(field)
        if addressField is not None:
483
484
485
486
487
488
489
490

491
492
493
494
495
496
497
484
485
486
487
488
489
490

491
492
493
494
495
496
497
498







-
+







            else:
                while answer < len(data):
                    answer += self.calcUnpackSize(two[1], data[answer:])
            return answer

        # "printf" string specifier
        if format[:1] == '%':
            raise Exception, "Can't guess the size of a printf like specifier for unpacking"
            raise Exception("Can't guess the size of a printf like specifier for unpacking")

        # asciiz specifier
        if format[:1] == 'z':
            return data.index('\x00')+1

        # asciiz specifier
        if format[:1] == 'u':
516
517
518
519
520
521
522
523

524
525
526
527
528
529
530
517
518
519
520
521
522
523

524
525
526
527
528
529
530
531







-
+








        return self.calcPackSize(format, self[fieldName])

    def formatForField(self, fieldName):
        for field in self.commonHdr+self.structure:
            if field[0] == fieldName:
                return field[1]
        raise Exception, ("Field %s not found" % fieldName)
        raise Exception("Field %s not found" % fieldName)

    def findAddressFieldFor(self, fieldName):
        descriptor = '&%s' % fieldName
        l = len(descriptor)
        for field in self.commonHdr+self.structure:
            if field[1][-l:] == descriptor:
                return field[0]
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
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







-
+







-
+

-
+






-
+

-
+











-
-
+
+

-
+




-
-
+
+


-
+


-
-
+
+







    def clear(self):
        for field in self.commonHdr + self.structure:
            self[field[0]] = self.zeroValue(field[1])

    def dump(self, msg = None, indent = 0):
        if msg is None: msg = self.__class__.__name__
        ind = ' '*indent
        print "\n%s" % msg
        print("\n%s" % msg)
        fixedFields = []
        for field in self.commonHdr+self.structure:
            i = field[0] 
            if i in self.fields:
                fixedFields.append(i)
                if isinstance(self[i], Structure):
                    self[i].dump('%s%s:{' % (ind,i), indent = indent + 4)
                    print "%s}" % ind
                    print("%s}" % ind)
                else:
                    print "%s%s: {%r}" % (ind,i,self[i])
                    print("%s%s: {%r}" % (ind,i,self[i]))
        # Do we have remaining fields not defined in the structures? let's 
        # print them
        remainingFields = list(set(self.fields) - set(fixedFields))
        for i in remainingFields:
            if isinstance(self[i], Structure):
                self[i].dump('%s%s:{' % (ind,i), indent = indent + 4)
                print "%s}" % ind
                print("%s}" % ind)
            else:
                print "%s%s: {%r}" % (ind,i,self[i])
                print("%s%s: {%r}" % (ind,i,self[i]))


class _StructureTest:
    alignment = 0
    def create(self,data = None):
        if data is not None:
            return self.theClass(data, alignment = self.alignment)
        else:
            return self.theClass(alignment = self.alignment)

    def run(self):
        print
        print "-"*70
        print()
        print("-"*70)
        testName = self.__class__.__name__
        print "starting test: %s....." % testName
        print("starting test: %s....." % testName)
        a = self.create()
        self.populate(a)
        a.dump("packing.....")
        a_str = str(a)
        print "packed: %r" % a_str
        print "unpacking....."
        print("packed: %r" % a_str)
        print("unpacking.....")
        b = self.create(a_str)
        b.dump("unpacked.....")
        print "repacking....."
        print("repacking.....")
        b_str = str(b)
        if b_str != a_str:
            print "ERROR: original packed and repacked don't match"
            print "packed: %r" % b_str
            print("ERROR: original packed and repacked don't match")
            print("packed: %r" % b_str)

class _Test_simple(_StructureTest):
    class theClass(Structure):
        commonHdr = ()
        structure = (
                ('int1', '!L'),
                ('len1','!L-z1'),
728
729
730
731
732
733
734
735

736
737
738
739
740
741
742
743
729
730
731
732
733
734
735

736
737
738
739
740
741
742
743
744







-
+








        
if __name__ == '__main__':
    _Test_simple().run()

    try:
        _Test_fixedLength().run()
    except:
        print "cannot repack because length is bogus"
        print("cannot repack because length is bogus")

    _Test_simple_aligned4().run()
    _Test_nested().run()
    _Test_Optional().run()
    _Test_Optional_sparse().run()
    _Test_AsciiZArray().run()
    _Test_UnpackCode().run()
    _Test_AAA().run()
Changes to jni/curl/tests/python_dependencies/impacket/uuid.py.
13
14
15
16
17
18
19





20
21
22

23
24
25
26
27
28
29
13
14
15
16
17
18
19
20
21
22
23
24
25
26

27
28
29
30
31
32
33
34







+
+
+
+
+


-
+







#

import re

from random import randrange
from struct import pack, unpack

try:
    long        # Python 2
except NameError:
    long = int  # Python 3

def generate():
    # UHm... crappy Python has an maximum integer of 2**31-1.
    top = (1L<<31)-1
    top = (1<<31)-1
    return pack("IIII", randrange(top), randrange(top), randrange(top), randrange(top))

def bin_to_string(uuid):
    uuid1, uuid2, uuid3 = unpack('<LHH', uuid[:8])
    uuid4, uuid5, uuid6 = unpack('>HHL', uuid[8:16])
    return '%08X-%04X-%04X-%04X-%04X%08X' % (uuid1, uuid2, uuid3, uuid4, uuid5, uuid6)

45
46
47
48
49
50
51
52

53
54
55
56
57
58





59
60
61

62
63
64
65
66
67
68
50
51
52
53
54
55
56

57
58





59
60
61
62
63
64
65

66
67
68
69
70
71
72
73







-
+

-
-
-
-
-
+
+
+
+
+


-
+







def bin_to_uuidtup(bin):
    assert len(bin) == 20
    uuidstr = bin_to_string(bin[:16])
    maj, min = unpack("<HH", bin[16:])
    return uuidstr, "%d.%d" % (maj, min)

#input: string
#output: tuple (uuid,version) 
#output: tuple (uuid,version)
#if version is not found in the input string "1.0"  is returned
#example: 
#           "00000000-0000-0000-0000-000000000000 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
#           "10000000-2000-3000-4000-500000000000 version 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
#           "10000000-2000-3000-4000-500000000000 v 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0') 
#           "10000000-2000-3000-4000-500000000000" returns ('00000000-0000-0000-0000-000000000000','1.0') 
#example:
#           "00000000-0000-0000-0000-000000000000 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
#           "10000000-2000-3000-4000-500000000000 version 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
#           "10000000-2000-3000-4000-500000000000 v 3.0" returns ('00000000-0000-0000-0000-000000000000','3.0')
#           "10000000-2000-3000-4000-500000000000" returns ('00000000-0000-0000-0000-000000000000','1.0')
def string_to_uuidtup(s):
    g =  re.search("([A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}).*?([0-9]{1,5}\.[0-9]{1,5})",s+" 1.0")
    if g: 
    if g:
        (u,v) = g.groups()
        return (u,v)
    return

def uuidtup_to_string(tup):
    uuid, (maj, min) = tup
    return "%s v%d.%d" % (uuid, maj, min)
Changes to jni/curl/tests/runtests.1.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH runtests.pl 1 "May 05, 2017" "Curl 7.64.1" "runtests"
.TH runtests.pl 1 "May 05, 2017" "Curl 7.65.0" "runtests"

.SH NAME
runtests.pl \- run one or more test cases
.SH SYNOPSIS
.B runtests.pl [options] [test number] [!test number] [key word] [!key word]
.SH DESCRIPTION
\fIruntests.pl\fP runs one, several or all the existing test cases in curl's
Changes to jni/curl/tests/runtests.pl.
272
273
274
275
276
277
278
279

280
281
282
283
284
285
286
272
273
274
275
276
277
278

279
280
281
282
283
284
285
286







-
+







my %disabled;           # disabled test cases

my $sshdid;      # for socks server, ssh daemon version id
my $sshdvernum;  # for socks server, ssh daemon version number
my $sshdverstr;  # for socks server, ssh daemon version string
my $sshderror;   # for socks server, ssh daemon version error

my $defserverlogslocktimeout = 20; # timeout to await server logs lock removal
my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal
my $defpostcommanddelay = 0; # delay between command and postcheck sections

my $timestats;   # time stamping and stats generation
my $fullstats;   # show time stats for every single test
my %timeprepini; # timestamp for each test preparation start
my %timesrvrini; # timestamp for each test required servers verification start
my %timesrvrend; # timestamp for each test required servers verification end
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2008
2009
2010
2011
2012
2013
2014

2015
2016
2017
2018
2019
2020
2021







-







#######################################################################
# Start the ssh (scp/sftp) server
#
sub runsshserver {
    my ($id, $verbose, $ipv6) = @_;
    my $ip=$HOSTIP;
    my $port = $SSHPORT;
    my $socksport = $SOCKSPORT;
    my $proto = 'ssh';
    my $ipvnum = 4;
    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
    my $server;
    my $srvrname;
    my $pidfile;
    my $logfile;
2042
2043
2044
2045
2046
2047
2048
2049

2050
2051
2052
2053
2054
2055
2056
2041
2042
2043
2044
2045
2046
2047

2048
2049
2050
2051
2052
2053
2054
2055







-
+







    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);

    $flags .= "--verbose " if($verbose);
    $flags .= "--debugprotocol " if($debugprotocol);
    $flags .= "--pidfile \"$pidfile\" ";
    $flags .= "--id $idnum " if($idnum > 1);
    $flags .= "--ipv$ipvnum --addr \"$ip\" ";
    $flags .= "--sshport $port --socksport $socksport ";
    $flags .= "--sshport $port ";
    $flags .= "--user \"$USER\"";

    my $cmd = "$perl $srcdir/sshserver.pl $flags";
    my ($sshpid, $pid2) = startnew($cmd, $pidfile, 60, 0);

    # on loaded systems sshserver start up can take longer than the timeout
    # passed to startnew, when this happens startnew completes without being
2135
2136
2137
2138
2139
2140
2141
2142
2143
2144
2145
2146
2147
2148

2149
2150
2151
2152
2153
2154
2155
2156

2157
2158
2159
2160
2161
2162
2163
2164
2165
2166
2167

2168
2169
2170
2171
2172

2173
2174
2175

2176
2177
2178
2179
2180
2181
2182
2183
2184
2185

2186
2187
2188
2189
2190
2191
2192
2193
2194
2195
2196
2197
2198
2199
2200
2201
2202
2203
2204
2205
2206
2207
2208
2209
2210
2211
2212
2213
2214

2215
2216

2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243

2244
2245
2246
2247
2248
2249
2250
2134
2135
2136
2137
2138
2139
2140







2141








2142











2143





2144



2145










2146





























2147
2148

2149
2150
2151




2152
2153
2154
2155
2156











2157
2158
2159
2160

2161
2162
2163
2164
2165
2166
2167
2168







-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
+
-
-
-
+
-
-
-
-
-
-
-
-
-
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+

-
+


-
-
-
-





-
-
-
-
-
-
-
-
-
-
-




-
+







    }
    unlink($pidfile) if(-f $pidfile);

    $srvrname = servername_str($proto, $ipvnum, $idnum);

    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);

    # The ssh server must be already running
    if(!$run{'ssh'}) {
        logmsg "RUN: SOCKS server cannot find running SSH server\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

    # start our socks server, get commands from the FTP cmd file
    # Find out ssh daemon canonical file name
    my $sshd = find_sshd();
    if(!$sshd) {
        logmsg "RUN: SOCKS server cannot find $sshdexe\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

    my $cmd="server/socksd".
    # Find out ssh daemon version info
    ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
    if(!$sshdid) {
        # Not an OpenSSH or SunSSH ssh daemon
        logmsg "$sshderror\n" if($verbose);
        logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }
    logmsg "ssh server found $sshd is $sshdverstr\n" if($verbose);

        " --port $port ".
    # Find out ssh client canonical file name
    my $ssh = find_ssh();
    if(!$ssh) {
        logmsg "RUN: SOCKS server cannot find $sshexe\n";
        $doesntrun{$pidfile} = 1;
        " --pidfile $pidfile".
        return (0,0);
    }

        " --backend $HOSTIP".
    # Find out ssh client version info
    my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
    if(!$sshid) {
        # Not an OpenSSH or SunSSH ssh client
        logmsg "$ssherror\n" if($verbose);
        logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

        " --config $FTPDCMD";
    # Verify minimum ssh client version
    if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
       (($sshid =~ /SunSSH/)  && ($sshvernum < 100))) {
        logmsg "ssh client found $ssh is $sshverstr\n";
        logmsg "SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }
    logmsg "ssh client found $ssh is $sshverstr\n" if($verbose);

    # Verify if ssh client and ssh daemon versions match
    if(($sshdid ne $sshid) || ($sshdvernum != $sshvernum)) {
        # Our test harness might work with slightly mismatched versions
        logmsg "Warning: version mismatch: sshd $sshdverstr - ssh $sshverstr\n"
            if($verbose);
    }

    # Config file options for ssh client are previously set from sshserver.pl
    if(! -e $sshconfig) {
        logmsg "RUN: SOCKS server cannot find $sshconfig\n";
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

    $sshlog  = server_logfilename($LOGDIR, 'socks', $ipvnum, $idnum);

    # start our socks server
    my $cmd="\"$ssh\" -N -F $sshconfig $ip > $sshlog 2>&1";
    my ($sshpid, $pid2) = startnew($cmd, $pidfile, 30, 1); # fake pidfile
    my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);

    if($sshpid <= 0 || !pidexists($sshpid)) {
    if($sockspid <= 0 || !pidexists($sockspid)) {
        # it is NOT alive
        logmsg "RUN: failed to start the $srvrname server\n";
        display_sshlog();
        display_sshconfig();
        display_sshdlog();
        display_sshdconfig();
        stopserver($server, "$pid2");
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }

    # Ugly hack but ssh doesn't support pid files. PID is from fake pidfile.
    my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
    if(!$pid3) {
        logmsg "RUN: $srvrname server failed verification\n";
        # failed to talk to it properly. Kill the server and return failure
        stopserver($server, "$sshpid $pid2");
        $doesntrun{$pidfile} = 1;
        return (0,0);
    }
    $pid2 = $pid3;

    if($verbose) {
        logmsg "RUN: $srvrname server is now running PID $pid2\n";
    }

    return ($pid2, $sshpid);
    return ($pid2, $sockspid);
}

#######################################################################
# start the dict server
#
sub rundictserver {
    my ($verbose, $alt, $port) = @_;
3638
3639
3640
3641
3642
3643
3644

3645
3646
3647
3648
3649
3650
3651
3556
3557
3558
3559
3560
3561
3562
3563
3564
3565
3566
3567
3568
3569
3570







+







                        }
                        if($debug_build || ($has_shared ne "yes")) {
                            # print "Skipping LD_PRELOAD due to no release shared build\n";
                            next;
                        }
                    }
                    $ENV{$var} = "$content";
                    print "setenv $var = $content\n" if($verbose);
                }
            }
        }
    }

    if(!$why) {
        my @precheck = getpart("client", "precheck");
3753
3754
3755
3756
3757
3758
3759
3760

3761
3762
3763
3764
3765
3766
3767
3672
3673
3674
3675
3676
3677
3678

3679
3680
3681
3682
3683
3684
3685
3686







-
+







      if($hash{'nonewline'}) {
          # cut off the final newline from the final line of the upload data
          chomp($upload[$#upload]);
      }
    }

    # if this section exists, it might be FTP server instructions:
    my @ftpservercmd = getpart("reply", "servercmd");
    my @ftpservercmd = fixarray ( getpart("reply", "servercmd") );

    my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout

    # name of the test
    my @testname= getpart("client", "name");
    my $testname = $testname[0];
    $testname =~ s/\n//g;
4970
4971
4972
4973
4974
4975
4976
4977

4978
4979
4980
4981
4982
4983
4984
4985

4986
4987
4988
4989
4990
4991
4992
4993








4994
4995
4996
4997
4998
4999
5000
5001
5002
5003
5004
5005
5006
5007
5008
5009
5010
5011
5012
5013
5014
5015
5016
5017
5018
4889
4890
4891
4892
4893
4894
4895

4896
4897
4898
4899
4900
4901
4902
4903
4904
4905








4906
4907
4908
4909
4910
4911
4912
4913


















4914
4915
4916
4917
4918
4919
4920







-
+








+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-







                if($pid <= 0) {
                    return "failed starting TFTP-IPv6 server";
                }
                printf("* pid tftp-ipv6 => %d %d\n", $pid, $pid2) if($verbose);
                $run{'tftp-ipv6'}="$pid $pid2";
            }
        }
        elsif($what eq "sftp" || $what eq "scp" || $what eq "socks4" || $what eq "socks5" ) {
        elsif($what eq "sftp" || $what eq "scp") {
            if(!$run{'ssh'}) {
                ($pid, $pid2) = runsshserver("", $verbose);
                if($pid <= 0) {
                    return "failed starting SSH server";
                }
                printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
                $run{'ssh'}="$pid $pid2";
            }
        }
            if($what eq "socks4" || $what eq "socks5") {
                if(!$run{'socks'}) {
                    ($pid, $pid2) = runsocksserver("", $verbose);
                    if($pid <= 0) {
                        return "failed starting socks server";
                    }
                    printf ("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
                    $run{'socks'}="$pid $pid2";
        elsif($what eq "socks4" || $what eq "socks5" ) {
            if(!$run{'socks'}) {
                ($pid, $pid2) = runsocksserver("", $verbose);
                if($pid <= 0) {
                    return "failed starting socks server";
                }
                printf ("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
                $run{'socks'}="$pid $pid2";
                }
            }
            if($what eq "socks5") {
                if(!$sshdid) {
                    # Not an OpenSSH or SunSSH ssh daemon
                    logmsg "Not OpenSSH or SunSSH; socks5 tests need at least OpenSSH 3.7\n";
                    return "failed starting socks5 server";
                }
                elsif(($sshdid =~ /OpenSSH/) && ($sshdvernum < 370)) {
                    # Need OpenSSH 3.7 for socks5 - https://www.openssh.com/txt/release-3.7
                    logmsg "$sshdverstr insufficient; socks5 tests need at least OpenSSH 3.7\n";
                    return "failed starting socks5 server";
                }
                elsif(($sshdid =~ /SunSSH/)  && ($sshdvernum < 100)) {
                    # Need SunSSH 1.0 for socks5
                    logmsg "$sshdverstr insufficient; socks5 tests need at least SunSSH 1.0\n";
                    return "failed starting socks5 server";
                }
            }
        }
        elsif($what eq "http-unix") {
            if($torture && $run{'http-unix'} &&
               !responsive_http_server("http", $verbose, "unix", $HTTPUNIXPATH)) {
                stopserver('http-unix');
            }
Changes to jni/curl/tests/server/Makefile.in.
87
88
89
90
91
92
93
94

95
96
97
98
99
100
101
87
88
89
90
91
92
93

94
95
96
97
98
99
100
101







-
+







PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
@DOING_NATIVE_WINDOWS_TRUE@am__append_1 = -DCURL_STATICLIB
noinst_PROGRAMS = getpart$(EXEEXT) resolve$(EXEEXT) rtspd$(EXEEXT) \
	sockfilt$(EXEEXT) sws$(EXEEXT) tftpd$(EXEEXT) \
	fake_ntlm$(EXEEXT)
	fake_ntlm$(EXEEXT) socksd$(EXEEXT)
subdir = tests/server
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ax_compile_check_sizeof.m4 \
	$(top_srcdir)/m4/curl-compilers.m4 \
	$(top_srcdir)/m4/curl-confopts.m4 \
	$(top_srcdir)/m4/curl-functions.m4 \
	$(top_srcdir)/m4/curl-openssl.m4 \
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
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







-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+




-
+

-
-
-
+
+
+






-
+




-
+


-
-
-
+
+
+







	sockfilt-sockfilt.$(OBJEXT) \
	../../lib/sockfilt-inet_pton.$(OBJEXT)
sockfilt_OBJECTS = $(am_sockfilt_OBJECTS)
sockfilt_DEPENDENCIES =
sockfilt_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(sockfilt_CFLAGS) \
	$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
am__objects_16 = ../../lib/sws-mprintf.$(OBJEXT) \
am__objects_16 = ../../lib/socksd-mprintf.$(OBJEXT) \
	../../lib/socksd-nonblock.$(OBJEXT) \
	../../lib/socksd-strtoofft.$(OBJEXT) \
	../../lib/socksd-warnless.$(OBJEXT) \
	../../lib/socksd-curl_ctype.$(OBJEXT)
am__objects_17 = socksd-getpart.$(OBJEXT) \
	../../lib/socksd-base64.$(OBJEXT) \
	../../lib/socksd-memdebug.$(OBJEXT)
am__objects_18 = socksd-util.$(OBJEXT)
am_socksd_OBJECTS = $(am__objects_16) $(am__objects_2) \
	$(am__objects_17) $(am__objects_18) socksd-socksd.$(OBJEXT) \
	../../lib/socksd-inet_pton.$(OBJEXT)
socksd_OBJECTS = $(am_socksd_OBJECTS)
socksd_DEPENDENCIES =
socksd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(socksd_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
am__objects_19 = ../../lib/sws-mprintf.$(OBJEXT) \
	../../lib/sws-nonblock.$(OBJEXT) \
	../../lib/sws-strtoofft.$(OBJEXT) \
	../../lib/sws-warnless.$(OBJEXT) \
	../../lib/sws-curl_ctype.$(OBJEXT)
am__objects_17 = sws-getpart.$(OBJEXT) ../../lib/sws-base64.$(OBJEXT) \
am__objects_20 = sws-getpart.$(OBJEXT) ../../lib/sws-base64.$(OBJEXT) \
	../../lib/sws-memdebug.$(OBJEXT)
am__objects_18 = sws-util.$(OBJEXT)
am_sws_OBJECTS = $(am__objects_16) $(am__objects_2) $(am__objects_17) \
	$(am__objects_18) sws-sws.$(OBJEXT) \
am__objects_21 = sws-util.$(OBJEXT)
am_sws_OBJECTS = $(am__objects_19) $(am__objects_2) $(am__objects_20) \
	$(am__objects_21) sws-sws.$(OBJEXT) \
	../../lib/sws-inet_pton.$(OBJEXT)
sws_OBJECTS = $(am_sws_OBJECTS)
sws_DEPENDENCIES =
sws_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(sws_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
am__objects_19 = ../../lib/tftpd-mprintf.$(OBJEXT) \
am__objects_22 = ../../lib/tftpd-mprintf.$(OBJEXT) \
	../../lib/tftpd-nonblock.$(OBJEXT) \
	../../lib/tftpd-strtoofft.$(OBJEXT) \
	../../lib/tftpd-warnless.$(OBJEXT) \
	../../lib/tftpd-curl_ctype.$(OBJEXT)
am__objects_20 = tftpd-getpart.$(OBJEXT) \
am__objects_23 = tftpd-getpart.$(OBJEXT) \
	../../lib/tftpd-base64.$(OBJEXT) \
	../../lib/tftpd-memdebug.$(OBJEXT)
am__objects_21 = tftpd-util.$(OBJEXT)
am_tftpd_OBJECTS = $(am__objects_19) $(am__objects_2) \
	$(am__objects_20) $(am__objects_21) tftpd-tftpd.$(OBJEXT)
am__objects_24 = tftpd-util.$(OBJEXT)
am_tftpd_OBJECTS = $(am__objects_22) $(am__objects_2) \
	$(am__objects_23) $(am__objects_24) tftpd-tftpd.$(OBJEXT)
tftpd_OBJECTS = $(am_tftpd_OBJECTS)
tftpd_DEPENDENCIES =
tftpd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(tftpd_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
287
288
289
290
291
292
293








294
295
296
297
298
299
300
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325







+
+
+
+
+
+
+
+







	../../lib/$(DEPDIR)/sockfilt-curl_ctype.Po \
	../../lib/$(DEPDIR)/sockfilt-inet_pton.Po \
	../../lib/$(DEPDIR)/sockfilt-memdebug.Po \
	../../lib/$(DEPDIR)/sockfilt-mprintf.Po \
	../../lib/$(DEPDIR)/sockfilt-nonblock.Po \
	../../lib/$(DEPDIR)/sockfilt-strtoofft.Po \
	../../lib/$(DEPDIR)/sockfilt-warnless.Po \
	../../lib/$(DEPDIR)/socksd-base64.Po \
	../../lib/$(DEPDIR)/socksd-curl_ctype.Po \
	../../lib/$(DEPDIR)/socksd-inet_pton.Po \
	../../lib/$(DEPDIR)/socksd-memdebug.Po \
	../../lib/$(DEPDIR)/socksd-mprintf.Po \
	../../lib/$(DEPDIR)/socksd-nonblock.Po \
	../../lib/$(DEPDIR)/socksd-strtoofft.Po \
	../../lib/$(DEPDIR)/socksd-warnless.Po \
	../../lib/$(DEPDIR)/sws-base64.Po \
	../../lib/$(DEPDIR)/sws-curl_ctype.Po \
	../../lib/$(DEPDIR)/sws-inet_pton.Po \
	../../lib/$(DEPDIR)/sws-memdebug.Po \
	../../lib/$(DEPDIR)/sws-mprintf.Po \
	../../lib/$(DEPDIR)/sws-nonblock.Po \
	../../lib/$(DEPDIR)/sws-strtoofft.Po \
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
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







+
+
-
-
-
+
+
+




















-
-
+
+


-
+







	./$(DEPDIR)/fake_ntlm-getpart.Po ./$(DEPDIR)/fake_ntlm-util.Po \
	./$(DEPDIR)/getpart-getpart.Po ./$(DEPDIR)/getpart-testpart.Po \
	./$(DEPDIR)/resolve-getpart.Po ./$(DEPDIR)/resolve-resolve.Po \
	./$(DEPDIR)/resolve-util.Po ./$(DEPDIR)/rtspd-getpart.Po \
	./$(DEPDIR)/rtspd-rtspd.Po ./$(DEPDIR)/rtspd-util.Po \
	./$(DEPDIR)/sockfilt-getpart.Po \
	./$(DEPDIR)/sockfilt-sockfilt.Po ./$(DEPDIR)/sockfilt-util.Po \
	./$(DEPDIR)/socksd-getpart.Po ./$(DEPDIR)/socksd-socksd.Po \
	./$(DEPDIR)/socksd-util.Po ./$(DEPDIR)/sws-getpart.Po \
	./$(DEPDIR)/sws-getpart.Po ./$(DEPDIR)/sws-sws.Po \
	./$(DEPDIR)/sws-util.Po ./$(DEPDIR)/tftpd-getpart.Po \
	./$(DEPDIR)/tftpd-tftpd.Po ./$(DEPDIR)/tftpd-util.Po
	./$(DEPDIR)/sws-sws.Po ./$(DEPDIR)/sws-util.Po \
	./$(DEPDIR)/tftpd-getpart.Po ./$(DEPDIR)/tftpd-tftpd.Po \
	./$(DEPDIR)/tftpd-util.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
	$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
	$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo "  CC      " $@;
am__v_CC_1 = 
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
	$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
	$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo "  CCLD    " $@;
am__v_CCLD_1 = 
SOURCES = $(fake_ntlm_SOURCES) $(getpart_SOURCES) $(resolve_SOURCES) \
	$(rtspd_SOURCES) $(sockfilt_SOURCES) $(sws_SOURCES) \
	$(tftpd_SOURCES)
	$(rtspd_SOURCES) $(sockfilt_SOURCES) $(socksd_SOURCES) \
	$(sws_SOURCES) $(tftpd_SOURCES)
DIST_SOURCES = $(fake_ntlm_SOURCES) $(getpart_SOURCES) \
	$(resolve_SOURCES) $(rtspd_SOURCES) $(sockfilt_SOURCES) \
	$(sws_SOURCES) $(tftpd_SOURCES)
	$(socksd_SOURCES) $(sws_SOURCES) $(tftpd_SOURCES)
am__can_run_installinfo = \
  case $$AM_UPDATE_INFO_DIR in \
    n|no|NO) false;; \
    *) (install-info --version) >/dev/null 2>&1;; \
  esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
659
660
661
662
663
664
665






666
667
668
669
670
671
672
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705







+
+
+
+
+
+







sockfilt_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h \
 sockfilt.c \
 ../../lib/inet_pton.c

sockfilt_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
sockfilt_CFLAGS = $(AM_CFLAGS)
socksd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h socksd.c \
 ../../lib/inet_pton.c

socksd_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
socksd_CFLAGS = $(AM_CFLAGS)
sws_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h \
 sws.c \
 ../../lib/inet_pton.c

sws_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
sws_CFLAGS = $(AM_CFLAGS)
826
827
828
829
830
831
832




















833
834
835
836
837
838
839
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







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sockfilt-inet_pton.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

sockfilt$(EXEEXT): $(sockfilt_OBJECTS) $(sockfilt_DEPENDENCIES) $(EXTRA_sockfilt_DEPENDENCIES) 
	@rm -f sockfilt$(EXEEXT)
	$(AM_V_CCLD)$(sockfilt_LINK) $(sockfilt_OBJECTS) $(sockfilt_LDADD) $(LIBS)
../../lib/socksd-mprintf.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-curl_ctype.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-base64.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-memdebug.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/socksd-inet_pton.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)

socksd$(EXEEXT): $(socksd_OBJECTS) $(socksd_DEPENDENCIES) $(EXTRA_socksd_DEPENDENCIES) 
	@rm -f socksd$(EXEEXT)
	$(AM_V_CCLD)$(socksd_LINK) $(socksd_OBJECTS) $(socksd_LDADD) $(LIBS)
../../lib/sws-mprintf.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-nonblock.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-strtoofft.$(OBJEXT): ../../lib/$(am__dirstamp) \
	../../lib/$(DEPDIR)/$(am__dirstamp)
../../lib/sws-warnless.$(OBJEXT): ../../lib/$(am__dirstamp) \
908
909
910
911
912
913
914








915
916
917
918
919
920
921
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982







+
+
+
+
+
+
+
+







@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-curl_ctype.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-inet_pton.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-nonblock.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sockfilt-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-base64.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-curl_ctype.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-inet_pton.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-nonblock.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-strtoofft.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/socksd-warnless.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-base64.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-curl_ctype.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-inet_pton.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-memdebug.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-mprintf.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-nonblock.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../../lib/$(DEPDIR)/sws-strtoofft.Po@am__quote@ # am--include-marker
937
938
939
940
941
942
943



944
945
946
947
948
949
950
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014







+
+
+







@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/resolve-util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-getpart.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-rtspd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rtspd-util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-getpart.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-sockfilt.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockfilt-util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socksd-getpart.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socksd-socksd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socksd-util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-getpart.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-sws.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sws-util.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-getpart.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-tftpd.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftpd-util.Po@am__quote@ # am--include-marker

1674
1675
1676
1677
1678
1679
1680


























































































































































1681
1682
1683
1684
1685
1686
1687
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905







+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+







../../lib/sockfilt-inet_pton.obj: ../../lib/inet_pton.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -MT ../../lib/sockfilt-inet_pton.obj -MD -MP -MF ../../lib/$(DEPDIR)/sockfilt-inet_pton.Tpo -c -o ../../lib/sockfilt-inet_pton.obj `if test -f '../../lib/inet_pton.c'; then $(CYGPATH_W) '../../lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/inet_pton.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sockfilt-inet_pton.Tpo ../../lib/$(DEPDIR)/sockfilt-inet_pton.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/inet_pton.c' object='../../lib/sockfilt-inet_pton.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sockfilt_CFLAGS) $(CFLAGS) -c -o ../../lib/sockfilt-inet_pton.obj `if test -f '../../lib/inet_pton.c'; then $(CYGPATH_W) '../../lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/inet_pton.c'; fi`

../../lib/socksd-mprintf.o: ../../lib/mprintf.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-mprintf.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-mprintf.Tpo -c -o ../../lib/socksd-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-mprintf.Tpo ../../lib/$(DEPDIR)/socksd-mprintf.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/mprintf.c' object='../../lib/socksd-mprintf.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c

../../lib/socksd-mprintf.obj: ../../lib/mprintf.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-mprintf.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-mprintf.Tpo -c -o ../../lib/socksd-mprintf.obj `if test -f '../../lib/mprintf.c'; then $(CYGPATH_W) '../../lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/mprintf.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-mprintf.Tpo ../../lib/$(DEPDIR)/socksd-mprintf.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/mprintf.c' object='../../lib/socksd-mprintf.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-mprintf.obj `if test -f '../../lib/mprintf.c'; then $(CYGPATH_W) '../../lib/mprintf.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/mprintf.c'; fi`

../../lib/socksd-nonblock.o: ../../lib/nonblock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-nonblock.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-nonblock.Tpo -c -o ../../lib/socksd-nonblock.o `test -f '../../lib/nonblock.c' || echo '$(srcdir)/'`../../lib/nonblock.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-nonblock.Tpo ../../lib/$(DEPDIR)/socksd-nonblock.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/nonblock.c' object='../../lib/socksd-nonblock.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-nonblock.o `test -f '../../lib/nonblock.c' || echo '$(srcdir)/'`../../lib/nonblock.c

../../lib/socksd-nonblock.obj: ../../lib/nonblock.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-nonblock.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-nonblock.Tpo -c -o ../../lib/socksd-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-nonblock.Tpo ../../lib/$(DEPDIR)/socksd-nonblock.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/nonblock.c' object='../../lib/socksd-nonblock.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-nonblock.obj `if test -f '../../lib/nonblock.c'; then $(CYGPATH_W) '../../lib/nonblock.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/nonblock.c'; fi`

../../lib/socksd-strtoofft.o: ../../lib/strtoofft.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-strtoofft.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-strtoofft.Tpo -c -o ../../lib/socksd-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-strtoofft.Tpo ../../lib/$(DEPDIR)/socksd-strtoofft.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/strtoofft.c' object='../../lib/socksd-strtoofft.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-strtoofft.o `test -f '../../lib/strtoofft.c' || echo '$(srcdir)/'`../../lib/strtoofft.c

../../lib/socksd-strtoofft.obj: ../../lib/strtoofft.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-strtoofft.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-strtoofft.Tpo -c -o ../../lib/socksd-strtoofft.obj `if test -f '../../lib/strtoofft.c'; then $(CYGPATH_W) '../../lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strtoofft.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-strtoofft.Tpo ../../lib/$(DEPDIR)/socksd-strtoofft.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/strtoofft.c' object='../../lib/socksd-strtoofft.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-strtoofft.obj `if test -f '../../lib/strtoofft.c'; then $(CYGPATH_W) '../../lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/strtoofft.c'; fi`

../../lib/socksd-warnless.o: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-warnless.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-warnless.Tpo -c -o ../../lib/socksd-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-warnless.Tpo ../../lib/$(DEPDIR)/socksd-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/socksd-warnless.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-warnless.o `test -f '../../lib/warnless.c' || echo '$(srcdir)/'`../../lib/warnless.c

../../lib/socksd-warnless.obj: ../../lib/warnless.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-warnless.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-warnless.Tpo -c -o ../../lib/socksd-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-warnless.Tpo ../../lib/$(DEPDIR)/socksd-warnless.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/warnless.c' object='../../lib/socksd-warnless.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-warnless.obj `if test -f '../../lib/warnless.c'; then $(CYGPATH_W) '../../lib/warnless.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/warnless.c'; fi`

../../lib/socksd-curl_ctype.o: ../../lib/curl_ctype.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-curl_ctype.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-curl_ctype.Tpo -c -o ../../lib/socksd-curl_ctype.o `test -f '../../lib/curl_ctype.c' || echo '$(srcdir)/'`../../lib/curl_ctype.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-curl_ctype.Tpo ../../lib/$(DEPDIR)/socksd-curl_ctype.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/curl_ctype.c' object='../../lib/socksd-curl_ctype.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-curl_ctype.o `test -f '../../lib/curl_ctype.c' || echo '$(srcdir)/'`../../lib/curl_ctype.c

../../lib/socksd-curl_ctype.obj: ../../lib/curl_ctype.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-curl_ctype.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-curl_ctype.Tpo -c -o ../../lib/socksd-curl_ctype.obj `if test -f '../../lib/curl_ctype.c'; then $(CYGPATH_W) '../../lib/curl_ctype.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_ctype.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-curl_ctype.Tpo ../../lib/$(DEPDIR)/socksd-curl_ctype.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/curl_ctype.c' object='../../lib/socksd-curl_ctype.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-curl_ctype.obj `if test -f '../../lib/curl_ctype.c'; then $(CYGPATH_W) '../../lib/curl_ctype.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/curl_ctype.c'; fi`

socksd-getpart.o: getpart.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-getpart.o -MD -MP -MF $(DEPDIR)/socksd-getpart.Tpo -c -o socksd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-getpart.Tpo $(DEPDIR)/socksd-getpart.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='getpart.c' object='socksd-getpart.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-getpart.o `test -f 'getpart.c' || echo '$(srcdir)/'`getpart.c

socksd-getpart.obj: getpart.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-getpart.obj -MD -MP -MF $(DEPDIR)/socksd-getpart.Tpo -c -o socksd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-getpart.Tpo $(DEPDIR)/socksd-getpart.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='getpart.c' object='socksd-getpart.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-getpart.obj `if test -f 'getpart.c'; then $(CYGPATH_W) 'getpart.c'; else $(CYGPATH_W) '$(srcdir)/getpart.c'; fi`

../../lib/socksd-base64.o: ../../lib/base64.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-base64.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-base64.Tpo -c -o ../../lib/socksd-base64.o `test -f '../../lib/base64.c' || echo '$(srcdir)/'`../../lib/base64.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-base64.Tpo ../../lib/$(DEPDIR)/socksd-base64.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/base64.c' object='../../lib/socksd-base64.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-base64.o `test -f '../../lib/base64.c' || echo '$(srcdir)/'`../../lib/base64.c

../../lib/socksd-base64.obj: ../../lib/base64.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-base64.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-base64.Tpo -c -o ../../lib/socksd-base64.obj `if test -f '../../lib/base64.c'; then $(CYGPATH_W) '../../lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/base64.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-base64.Tpo ../../lib/$(DEPDIR)/socksd-base64.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/base64.c' object='../../lib/socksd-base64.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-base64.obj `if test -f '../../lib/base64.c'; then $(CYGPATH_W) '../../lib/base64.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/base64.c'; fi`

../../lib/socksd-memdebug.o: ../../lib/memdebug.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-memdebug.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-memdebug.Tpo -c -o ../../lib/socksd-memdebug.o `test -f '../../lib/memdebug.c' || echo '$(srcdir)/'`../../lib/memdebug.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-memdebug.Tpo ../../lib/$(DEPDIR)/socksd-memdebug.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/memdebug.c' object='../../lib/socksd-memdebug.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-memdebug.o `test -f '../../lib/memdebug.c' || echo '$(srcdir)/'`../../lib/memdebug.c

../../lib/socksd-memdebug.obj: ../../lib/memdebug.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-memdebug.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-memdebug.Tpo -c -o ../../lib/socksd-memdebug.obj `if test -f '../../lib/memdebug.c'; then $(CYGPATH_W) '../../lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/memdebug.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-memdebug.Tpo ../../lib/$(DEPDIR)/socksd-memdebug.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/memdebug.c' object='../../lib/socksd-memdebug.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-memdebug.obj `if test -f '../../lib/memdebug.c'; then $(CYGPATH_W) '../../lib/memdebug.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/memdebug.c'; fi`

socksd-util.o: util.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-util.o -MD -MP -MF $(DEPDIR)/socksd-util.Tpo -c -o socksd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-util.Tpo $(DEPDIR)/socksd-util.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='util.c' object='socksd-util.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-util.o `test -f 'util.c' || echo '$(srcdir)/'`util.c

socksd-util.obj: util.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-util.obj -MD -MP -MF $(DEPDIR)/socksd-util.Tpo -c -o socksd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-util.Tpo $(DEPDIR)/socksd-util.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='util.c' object='socksd-util.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-util.obj `if test -f 'util.c'; then $(CYGPATH_W) 'util.c'; else $(CYGPATH_W) '$(srcdir)/util.c'; fi`

socksd-socksd.o: socksd.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-socksd.o -MD -MP -MF $(DEPDIR)/socksd-socksd.Tpo -c -o socksd-socksd.o `test -f 'socksd.c' || echo '$(srcdir)/'`socksd.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-socksd.Tpo $(DEPDIR)/socksd-socksd.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socksd.c' object='socksd-socksd.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-socksd.o `test -f 'socksd.c' || echo '$(srcdir)/'`socksd.c

socksd-socksd.obj: socksd.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT socksd-socksd.obj -MD -MP -MF $(DEPDIR)/socksd-socksd.Tpo -c -o socksd-socksd.obj `if test -f 'socksd.c'; then $(CYGPATH_W) 'socksd.c'; else $(CYGPATH_W) '$(srcdir)/socksd.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/socksd-socksd.Tpo $(DEPDIR)/socksd-socksd.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='socksd.c' object='socksd-socksd.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o socksd-socksd.obj `if test -f 'socksd.c'; then $(CYGPATH_W) 'socksd.c'; else $(CYGPATH_W) '$(srcdir)/socksd.c'; fi`

../../lib/socksd-inet_pton.o: ../../lib/inet_pton.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-inet_pton.o -MD -MP -MF ../../lib/$(DEPDIR)/socksd-inet_pton.Tpo -c -o ../../lib/socksd-inet_pton.o `test -f '../../lib/inet_pton.c' || echo '$(srcdir)/'`../../lib/inet_pton.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-inet_pton.Tpo ../../lib/$(DEPDIR)/socksd-inet_pton.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/inet_pton.c' object='../../lib/socksd-inet_pton.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-inet_pton.o `test -f '../../lib/inet_pton.c' || echo '$(srcdir)/'`../../lib/inet_pton.c

../../lib/socksd-inet_pton.obj: ../../lib/inet_pton.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -MT ../../lib/socksd-inet_pton.obj -MD -MP -MF ../../lib/$(DEPDIR)/socksd-inet_pton.Tpo -c -o ../../lib/socksd-inet_pton.obj `if test -f '../../lib/inet_pton.c'; then $(CYGPATH_W) '../../lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/inet_pton.c'; fi`
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/socksd-inet_pton.Tpo ../../lib/$(DEPDIR)/socksd-inet_pton.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/inet_pton.c' object='../../lib/socksd-inet_pton.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(socksd_CFLAGS) $(CFLAGS) -c -o ../../lib/socksd-inet_pton.obj `if test -f '../../lib/inet_pton.c'; then $(CYGPATH_W) '../../lib/inet_pton.c'; else $(CYGPATH_W) '$(srcdir)/../../lib/inet_pton.c'; fi`

../../lib/sws-mprintf.o: ../../lib/mprintf.c
@am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -MT ../../lib/sws-mprintf.o -MD -MP -MF ../../lib/$(DEPDIR)/sws-mprintf.Tpo -c -o ../../lib/sws-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c
@am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) ../../lib/$(DEPDIR)/sws-mprintf.Tpo ../../lib/$(DEPDIR)/sws-mprintf.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='../../lib/mprintf.c' object='../../lib/sws-mprintf.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@	$(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(sws_CFLAGS) $(CFLAGS) -c -o ../../lib/sws-mprintf.o `test -f '../../lib/mprintf.c' || echo '$(srcdir)/'`../../lib/mprintf.c

2138
2139
2140
2141
2142
2143
2144








2145
2146
2147
2148
2149
2150
2151
2356
2357
2358
2359
2360
2361
2362
2363
2364
2365
2366
2367
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377







+
+
+
+
+
+
+
+







	-rm -f ../../lib/$(DEPDIR)/sockfilt-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-strtoofft.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-base64.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-strtoofft.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/sws-base64.Po
	-rm -f ../../lib/$(DEPDIR)/sws-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/sws-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/sws-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/sws-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/sws-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/sws-strtoofft.Po
2167
2168
2169
2170
2171
2172
2173



2174
2175
2176
2177
2178
2179
2180
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409







+
+
+







	-rm -f ./$(DEPDIR)/resolve-util.Po
	-rm -f ./$(DEPDIR)/rtspd-getpart.Po
	-rm -f ./$(DEPDIR)/rtspd-rtspd.Po
	-rm -f ./$(DEPDIR)/rtspd-util.Po
	-rm -f ./$(DEPDIR)/sockfilt-getpart.Po
	-rm -f ./$(DEPDIR)/sockfilt-sockfilt.Po
	-rm -f ./$(DEPDIR)/sockfilt-util.Po
	-rm -f ./$(DEPDIR)/socksd-getpart.Po
	-rm -f ./$(DEPDIR)/socksd-socksd.Po
	-rm -f ./$(DEPDIR)/socksd-util.Po
	-rm -f ./$(DEPDIR)/sws-getpart.Po
	-rm -f ./$(DEPDIR)/sws-sws.Po
	-rm -f ./$(DEPDIR)/sws-util.Po
	-rm -f ./$(DEPDIR)/tftpd-getpart.Po
	-rm -f ./$(DEPDIR)/tftpd-tftpd.Po
	-rm -f ./$(DEPDIR)/tftpd-util.Po
	-rm -f Makefile
2254
2255
2256
2257
2258
2259
2260








2261
2262
2263
2264
2265
2266
2267
2483
2484
2485
2486
2487
2488
2489
2490
2491
2492
2493
2494
2495
2496
2497
2498
2499
2500
2501
2502
2503
2504







+
+
+
+
+
+
+
+







	-rm -f ../../lib/$(DEPDIR)/sockfilt-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-strtoofft.Po
	-rm -f ../../lib/$(DEPDIR)/sockfilt-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-base64.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-strtoofft.Po
	-rm -f ../../lib/$(DEPDIR)/socksd-warnless.Po
	-rm -f ../../lib/$(DEPDIR)/sws-base64.Po
	-rm -f ../../lib/$(DEPDIR)/sws-curl_ctype.Po
	-rm -f ../../lib/$(DEPDIR)/sws-inet_pton.Po
	-rm -f ../../lib/$(DEPDIR)/sws-memdebug.Po
	-rm -f ../../lib/$(DEPDIR)/sws-mprintf.Po
	-rm -f ../../lib/$(DEPDIR)/sws-nonblock.Po
	-rm -f ../../lib/$(DEPDIR)/sws-strtoofft.Po
2283
2284
2285
2286
2287
2288
2289



2290
2291
2292
2293
2294
2295
2296
2520
2521
2522
2523
2524
2525
2526
2527
2528
2529
2530
2531
2532
2533
2534
2535
2536







+
+
+







	-rm -f ./$(DEPDIR)/resolve-util.Po
	-rm -f ./$(DEPDIR)/rtspd-getpart.Po
	-rm -f ./$(DEPDIR)/rtspd-rtspd.Po
	-rm -f ./$(DEPDIR)/rtspd-util.Po
	-rm -f ./$(DEPDIR)/sockfilt-getpart.Po
	-rm -f ./$(DEPDIR)/sockfilt-sockfilt.Po
	-rm -f ./$(DEPDIR)/sockfilt-util.Po
	-rm -f ./$(DEPDIR)/socksd-getpart.Po
	-rm -f ./$(DEPDIR)/socksd-socksd.Po
	-rm -f ./$(DEPDIR)/socksd-util.Po
	-rm -f ./$(DEPDIR)/sws-getpart.Po
	-rm -f ./$(DEPDIR)/sws-sws.Po
	-rm -f ./$(DEPDIR)/sws-util.Po
	-rm -f ./$(DEPDIR)/tftpd-getpart.Po
	-rm -f ./$(DEPDIR)/tftpd-tftpd.Po
	-rm -f ./$(DEPDIR)/tftpd-util.Po
	-rm -f Makefile
Changes to jni/curl/tests/server/Makefile.inc.
1

2
3
4
5
6
7
8

1
2
3
4
5
6
7
8
-
+







noinst_PROGRAMS = getpart resolve rtspd sockfilt sws tftpd fake_ntlm
noinst_PROGRAMS = getpart resolve rtspd sockfilt sws tftpd fake_ntlm socksd

CURLX_SRCS = \
 ../../lib/mprintf.c \
 ../../lib/nonblock.c \
 ../../lib/strtoofft.c \
 ../../lib/warnless.c \
 ../../lib/curl_ctype.c
45
46
47
48
49
50
51






52
53
54
55
56
57
58
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64







+
+
+
+
+
+








sockfilt_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h \
 sockfilt.c \
 ../../lib/inet_pton.c
sockfilt_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
sockfilt_CFLAGS = $(AM_CFLAGS)

socksd_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h socksd.c \
 ../../lib/inet_pton.c
socksd_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
socksd_CFLAGS = $(AM_CFLAGS)

sws_SOURCES = $(CURLX_SRCS) $(CURLX_HDRS) $(USEFUL) $(UTIL) \
 server_sockaddr.h \
 sws.c \
 ../../lib/inet_pton.c
sws_LDADD = @CURL_NETWORK_AND_TIME_LIBS@
sws_CFLAGS = $(AM_CFLAGS)
Added jni/curl/tests/server/socksd.c.












































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
 * furnished to do so, under the terms of the COPYING file.
 *
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 * KIND, either express or implied.
 *
 ***************************************************************************/
#include "server_setup.h"
#include <stdlib.h>

/* Function
 *
 * Accepts a TCP connection on a custom port (IPv4 or IPv6). Connects to a
 * given addr + port backend (that is NOT extracted form the client's
 * request). The backend server default to connect to can be set with
 * --backend and --backendport.
 *
 * Read commands from FILE (set with --config). The commands control how to
 * act and is reset to defaults each client TCP connect.
 *
 * Config file keywords:
 *
 * "version [number: 5]" - requires the communication to use this version.
 * "nmethods_min [number: 1]" - the minimum numberf NMETHODS the client must
 *                              state
 * "nmethods_max [number: 3]" - the minimum numberf NMETHODS the client must
 *                              state
 * "user [string]" - the user name that must match (if method is 2)
 * "password [string]" - the password that must match (if method is 2)
 * "backend [IPv4]" - numerical IPv4 address of backend to connect to
 * "backendport [number:0]" - TCP port of backend to connect to. 0 means use
                              the client's specified port number.
 * "method [number: 0]" - connect method to respond with:
 *                        0 - no auth
 *                        1 - GSSAPI (not supported)
 *                        2 - user + password
 * "response [number]" - the decimal number to repsond to a connect
 *                       SOCKS5: 0 is OK, SOCKS4: 90 is ok
 *
 */

/* based on sockfilt.c */

#ifdef HAVE_SIGNAL_H
#include <signal.h>
#endif
#ifdef HAVE_NETINET_IN_H
#include <netinet/in.h>
#endif
#ifdef HAVE_NETINET_IN6_H
#include <netinet/in6.h>
#endif
#ifdef HAVE_ARPA_INET_H
#include <arpa/inet.h>
#endif
#ifdef HAVE_NETDB_H
#include <netdb.h>
#endif

#define ENABLE_CURLX_PRINTF
/* make the curlx header define all printf() functions to use the curlx_*
   versions instead */
#include "curlx.h" /* from the private lib dir */
#include "getpart.h"
#include "inet_pton.h"
#include "util.h"
#include "server_sockaddr.h"
#include "warnless.h"

/* include memdebug.h last */
#include "memdebug.h"

#ifdef USE_WINSOCK
#undef  EINTR
#define EINTR    4 /* errno.h value */
#undef  EAGAIN
#define EAGAIN  11 /* errno.h value */
#undef  ENOMEM
#define ENOMEM  12 /* errno.h value */
#undef  EINVAL
#define EINVAL  22 /* errno.h value */
#endif

#define DEFAULT_PORT 8905

#ifndef DEFAULT_LOGFILE
#define DEFAULT_LOGFILE "log/socksd.log"
#endif

#ifndef DEFAULT_CONFIG
#define DEFAULT_CONFIG "socksd.config"
#endif

static const char *backendaddr = "127.0.0.1";
static unsigned short backendport = 0; /* default is use client's */

struct configurable {
  unsigned char version; /* initial version byte in the request must match
                            this */
  unsigned char nmethods_min; /* minimum number of nmethods to expect */
  unsigned char nmethods_max; /* maximum number of nmethods to expect */
  unsigned char responseversion;
  unsigned char responsemethod;
  unsigned char reqcmd;
  unsigned char connectrep;
  unsigned short port; /* backend port */
  char addr[32]; /* backend IPv4 numerical */
  char user[256];
  char password[256];
};

#define CONFIG_VERSION 5
#define CONFIG_NMETHODS_MIN 1 /* unauth, gssapi, auth */
#define CONFIG_NMETHODS_MAX 3
#define CONFIG_RESPONSEVERSION CONFIG_VERSION
#define CONFIG_RESPONSEMETHOD 0 /* no auth */
#define CONFIG_REQCMD 1 /* CONNECT */
#define CONFIG_PORT backendport
#define CONFIG_ADDR backendaddr
#define CONFIG_CONNECTREP 0

static struct configurable config;

const char *serverlogfile = DEFAULT_LOGFILE;
static const char *configfile = DEFAULT_CONFIG;

#ifdef ENABLE_IPV6
static bool use_ipv6 = FALSE;
#endif
static const char *ipv_inuse = "IPv4";
static unsigned short port = DEFAULT_PORT;

static void resetdefaults(void)
{
  logmsg("Reset to defaults");
  config.version = CONFIG_VERSION;
  config.nmethods_min = CONFIG_NMETHODS_MIN;
  config.nmethods_max = CONFIG_NMETHODS_MAX;
  config.responseversion = CONFIG_RESPONSEVERSION;
  config.responsemethod = CONFIG_RESPONSEMETHOD;
  config.reqcmd = CONFIG_REQCMD;
  config.connectrep = CONFIG_CONNECTREP;
  config.port = CONFIG_PORT;
  strcpy(config.addr, CONFIG_ADDR);
  strcpy(config.user, "user");
  strcpy(config.password, "password");
}

static unsigned char byteval(char *value)
{
  unsigned long num = strtoul(value, NULL, 10);
  return num & 0xff;
}

static unsigned short shortval(char *value)
{
  unsigned long num = strtoul(value, NULL, 10);
  return num & 0xffff;
}

static void getconfig(void)
{
  FILE *fp = fopen(configfile, FOPEN_READTEXT);
  resetdefaults();
  if(fp) {
    char buffer[512];
    logmsg("parse config file");
    while(fgets(buffer, sizeof(buffer), fp)) {
      char key[32];
      char value[32];
      if(2 == sscanf(buffer, "%31s %31s", key, value)) {
        if(!strcmp(key, "version")) {
          config.version = byteval(value);
          logmsg("version [%d] set", config.version);
        }
        else if(!strcmp(key, "nmethods_min")) {
          config.nmethods_min = byteval(value);
          logmsg("nmethods_min [%d] set", config.nmethods_min);
        }
        else if(!strcmp(key, "nmethods_max")) {
          config.nmethods_max = byteval(value);
          logmsg("nmethods_max [%d] set", config.nmethods_max);
        }
        else if(!strcmp(key, "backend")) {
          strcpy(config.addr, value);
          logmsg("backend [%s] set", config.addr);
        }
        else if(!strcmp(key, "backendport")) {
          config.port = shortval(value);
          logmsg("backendport [%d] set", config.port);
        }
        else if(!strcmp(key, "user")) {
          strcpy(config.user, value);
          logmsg("user [%s] set", config.user);
        }
        else if(!strcmp(key, "password")) {
          strcpy(config.password, value);
          logmsg("password [%s] set", config.password);
        }
        /* Methods:
           o  X'00' NO AUTHENTICATION REQUIRED
           o  X'01' GSSAPI
           o  X'02' USERNAME/PASSWORD
        */
        else if(!strcmp(key, "method")) {
          config.responsemethod = byteval(value);
          logmsg("method [%d] set", config.responsemethod);
        }
        else if(!strcmp(key, "response")) {
          config.connectrep = byteval(value);
          logmsg("response [%d] set", config.connectrep);
        }
      }
    }
    fclose(fp);
  }
}


/* do-nothing macro replacement for systems which lack siginterrupt() */

#ifndef HAVE_SIGINTERRUPT
#define siginterrupt(x,y) do {} while(0)
#endif

/* vars used to keep around previous signal handlers */

typedef RETSIGTYPE (*SIGHANDLER_T)(int);

#ifdef SIGHUP
static SIGHANDLER_T old_sighup_handler  = SIG_ERR;
#endif

#ifdef SIGPIPE
static SIGHANDLER_T old_sigpipe_handler = SIG_ERR;
#endif

#ifdef SIGALRM
static SIGHANDLER_T old_sigalrm_handler = SIG_ERR;
#endif

#ifdef SIGINT
static SIGHANDLER_T old_sigint_handler  = SIG_ERR;
#endif

#if defined(SIGBREAK) && defined(WIN32)
static SIGHANDLER_T old_sigbreak_handler = SIG_ERR;
#endif

/* var which if set indicates that the program should finish execution */

SIG_ATOMIC_T got_exit_signal = 0;

/* if next is set indicates the first signal handled in exit_signal_handler */

static volatile int exit_signal = 0;

/* signal handler that will be triggered to indicate that the program
  should finish its execution in a controlled manner as soon as possible.
  The first time this is called it will set got_exit_signal to one and
  store in exit_signal the signal that triggered its execution. */

static RETSIGTYPE exit_signal_handler(int signum)
{
  int old_errno = errno;
  if(got_exit_signal == 0) {
    got_exit_signal = 1;
    exit_signal = signum;
  }
  (void)signal(signum, exit_signal_handler);
  errno = old_errno;
}

static void install_signal_handlers(void)
{
#ifdef SIGHUP
  /* ignore SIGHUP signal */
  old_sighup_handler = signal(SIGHUP, SIG_IGN);
  if(old_sighup_handler == SIG_ERR)
    logmsg("cannot install SIGHUP handler: %s", strerror(errno));
#endif
#ifdef SIGPIPE
  /* ignore SIGPIPE signal */
  old_sigpipe_handler = signal(SIGPIPE, SIG_IGN);
  if(old_sigpipe_handler == SIG_ERR)
    logmsg("cannot install SIGPIPE handler: %s", strerror(errno));
#endif
#ifdef SIGALRM
  /* ignore SIGALRM signal */
  old_sigalrm_handler = signal(SIGALRM, SIG_IGN);
  if(old_sigalrm_handler == SIG_ERR)
    logmsg("cannot install SIGALRM handler: %s", strerror(errno));
#endif
#ifdef SIGINT
  /* handle SIGINT signal with our exit_signal_handler */
  old_sigint_handler = signal(SIGINT, exit_signal_handler);
  if(old_sigint_handler == SIG_ERR)
    logmsg("cannot install SIGINT handler: %s", strerror(errno));
  else
    siginterrupt(SIGINT, 1);
#endif
#if defined(SIGBREAK) && defined(WIN32)
  /* handle SIGBREAK signal with our exit_signal_handler */
  old_sigbreak_handler = signal(SIGBREAK, exit_signal_handler);
  if(old_sigbreak_handler == SIG_ERR)
    logmsg("cannot install SIGBREAK handler: %s", strerror(errno));
  else
    siginterrupt(SIGBREAK, 1);
#endif
}

static void restore_signal_handlers(void)
{
#ifdef SIGHUP
  if(SIG_ERR != old_sighup_handler)
    (void)signal(SIGHUP, old_sighup_handler);
#endif
#ifdef SIGPIPE
  if(SIG_ERR != old_sigpipe_handler)
    (void)signal(SIGPIPE, old_sigpipe_handler);
#endif
#ifdef SIGALRM
  if(SIG_ERR != old_sigalrm_handler)
    (void)signal(SIGALRM, old_sigalrm_handler);
#endif
#ifdef SIGINT
  if(SIG_ERR != old_sigint_handler)
    (void)signal(SIGINT, old_sigint_handler);
#endif
#if defined(SIGBREAK) && defined(WIN32)
  if(SIG_ERR != old_sigbreak_handler)
    (void)signal(SIGBREAK, old_sigbreak_handler);
#endif
}

static void loghex(unsigned char *buffer, ssize_t len)
{
  char data[1200];
  ssize_t i;
  unsigned char *ptr = buffer;
  char *optr = data;
  ssize_t width = 0;
  int left = sizeof(data);

  for(i = 0; i<len && (left >= 0); i++) {
    msnprintf(optr, left, "%02x", ptr[i]);
    width += 2;
    optr += 2;
    left -= 2;
  }
  if(width)
    logmsg("'%s'", data);
}

/* RFC 1928, SOCKS5 byte index */
#define SOCKS5_VERSION 0
#define SOCKS5_NMETHODS 1 /* number of methods that is listed */

/* in the request: */
#define SOCKS5_REQCMD 1
#define SOCKS5_RESERVED 2
#define SOCKS5_ATYP 3
#define SOCKS5_DSTADDR 4

/* connect response */
#define SOCKS5_REP 1
#define SOCKS5_BNDADDR 4

/* auth request */
#define SOCKS5_ULEN 1
#define SOCKS5_UNAME 2

#define SOCKS4_CD 1
#define SOCKS4_DSTPORT 2

/* connect to a given IPv4 address, not the one asked for */
static curl_socket_t socksconnect(unsigned short connectport,
                                  const char *connectaddr)
{
  int rc;
  srvr_sockaddr_union_t me;
  curl_socket_t sock = socket(AF_INET, SOCK_STREAM, 0);
  if(sock == CURL_SOCKET_BAD)
    return CURL_SOCKET_BAD;
  memset(&me.sa4, 0, sizeof(me.sa4));
  me.sa4.sin_family = AF_INET;
  me.sa4.sin_port = htons(connectport);
  me.sa4.sin_addr.s_addr = INADDR_ANY;
  Curl_inet_pton(AF_INET, connectaddr, &me.sa4.sin_addr);

  rc = connect(sock, &me.sa, sizeof(me.sa4));

  if(rc) {
    int error = SOCKERRNO;
    logmsg("Error connecting to %s:%hu: (%d) %s",
           connectaddr, connectport, error, strerror(error));
    return CURL_SOCKET_BAD;
  }
  logmsg("Connected fine to %s:%d", connectaddr, connectport);
  return sock;
}

static curl_socket_t socks4(curl_socket_t fd,
                            unsigned char *buffer,
                            ssize_t rc)
{
  unsigned char response[256 + 16];
  curl_socket_t connfd;
  unsigned char cd;
  unsigned short s4port;

  if(buffer[SOCKS4_CD] != 1) {
    logmsg("SOCKS4 CD is not 1: %d", buffer[SOCKS4_CD]);
    return CURL_SOCKET_BAD;
  }
  if(rc < 9) {
    logmsg("SOCKS4 connect message too short: %d", rc);
    return CURL_SOCKET_BAD;
  }
  if(!config.port)
    s4port = (unsigned short)((buffer[SOCKS4_DSTPORT]<<8) |
                              (buffer[SOCKS4_DSTPORT + 1]));
  else
    s4port = config.port;

  connfd = socksconnect(s4port, config.addr);
  if(connfd == CURL_SOCKET_BAD) {
    /* failed */
    cd = 91;
  }
  else {
    /* success */
    cd = 90;
  }
  response[0] = 0; /* reply version 0 */
  response[1] = cd; /* result */
  /* copy port and address from connect request */
  memcpy(&response[2], &buffer[SOCKS4_DSTPORT], 6);
  rc = (send)(fd, (char *)response, 8, 0);
  if(rc != 8) {
    logmsg("Sending SOCKS4 response failed!");
    return CURL_SOCKET_BAD;
  }
  logmsg("Sent %d bytes", rc);
  loghex(response, rc);

  if(cd == 90)
    /* now do the transfer */
    return connfd;

  if(connfd != CURL_SOCKET_BAD)
    sclose(connfd);

  return CURL_SOCKET_BAD;
}

static curl_socket_t sockit(curl_socket_t fd)
{
  unsigned char buffer[256 + 16];
  unsigned char response[256 + 16];
  ssize_t rc;
  unsigned char len;
  unsigned char type;
  unsigned char rep = 0;
  unsigned char *address;
  unsigned short socksport;
  curl_socket_t connfd = CURL_SOCKET_BAD;
  unsigned short s5port;

  getconfig();

  rc = recv(fd, (char *)buffer, sizeof(buffer), 0);

  logmsg("READ %d bytes", rc);
  loghex(buffer, rc);

  if(buffer[SOCKS5_VERSION] == 4)
    return socks4(fd, buffer, rc);

  if(buffer[SOCKS5_VERSION] != config.version) {
    logmsg("VERSION byte not %d", config.version);
    return CURL_SOCKET_BAD;
  }
  if((buffer[SOCKS5_NMETHODS] < config.nmethods_min) ||
     (buffer[SOCKS5_NMETHODS] > config.nmethods_max)) {
    logmsg("NMETHODS byte not within %d - %d ",
           config.nmethods_min, config.nmethods_max);
    return CURL_SOCKET_BAD;
  }
  /* after NMETHODS follows that many bytes listing the methods the client
     says it supports */
  if(rc != (buffer[SOCKS5_NMETHODS] + 2)) {
    logmsg("Expected %d bytes, got %d", buffer[SOCKS5_NMETHODS] + 2, rc);
    return CURL_SOCKET_BAD;
  }
  logmsg("Incoming request deemed fine!");

  /* respond with two bytes: VERSION + METHOD */
  response[0] = config.responseversion;
  response[1] = config.responsemethod;
  rc = (send)(fd, (char *)response, 2, 0);
  if(rc != 2) {
    logmsg("Sending response failed!");
    return CURL_SOCKET_BAD;
  }
  logmsg("Sent %d bytes", rc);
  loghex(response, rc);

  /* expect the request or auth */
  rc = recv(fd, (char *)buffer, sizeof(buffer), 0);

  logmsg("READ %d bytes", rc);
  loghex(buffer, rc);

  if(config.responsemethod == 2) {
    /* RFC 1929 authentication
       +----+------+----------+------+----------+
       |VER | ULEN |  UNAME   | PLEN |  PASSWD  |
       +----+------+----------+------+----------+
       | 1  |  1   | 1 to 255 |  1   | 1 to 255 |
       +----+------+----------+------+----------+
    */
    unsigned char ulen;
    unsigned char plen;
    bool login = TRUE;
    if(rc < 5) {
      logmsg("Too short auth input: %d", rc);
      return CURL_SOCKET_BAD;
    }
    if(buffer[SOCKS5_VERSION] != 1) {
      logmsg("Auth VERSION byte not 1, got %d", buffer[SOCKS5_VERSION]);
      return CURL_SOCKET_BAD;
    }
    ulen = buffer[SOCKS5_ULEN];
    if(rc < 4 + ulen) {
      logmsg("Too short packet for username: %d", rc);
      return CURL_SOCKET_BAD;
    }
    plen = buffer[SOCKS5_ULEN + ulen + 1];
    if(rc < 3 + ulen + plen) {
      logmsg("Too short packet for ulen %d plen %d: %d", ulen, plen, rc);
      return CURL_SOCKET_BAD;
    }
    if((ulen != strlen(config.user)) ||
       (plen != strlen(config.password)) ||
       memcmp(&buffer[SOCKS5_UNAME], config.user, ulen) ||
       memcmp(&buffer[SOCKS5_UNAME + ulen + 1], config.password, plen)) {
      /* no match! */
      logmsg("mismatched credentials!");
      login = FALSE;
    }
    response[0] = 1;
    response[1] = login ? 0 : 1;
    rc = (send)(fd, (char *)response, 2, 0);
    if(rc != 2) {
      logmsg("Sending auth response failed!");
      return CURL_SOCKET_BAD;
    }
    logmsg("Sent %d bytes", rc);
    loghex(response, rc);
    if(!login)
      return CURL_SOCKET_BAD;

    /* expect the request */
    rc = recv(fd, (char *)buffer, sizeof(buffer), 0);

    logmsg("READ %d bytes", rc);
    loghex(buffer, rc);
  }
  if(rc < 6) {
    logmsg("Too short for request: %d", rc);
    return CURL_SOCKET_BAD;
  }

  if(buffer[SOCKS5_VERSION] != config.version) {
    logmsg("Request VERSION byte not %d", config.version);
    return CURL_SOCKET_BAD;
  }
  /* 1 == CONNECT */
  if(buffer[SOCKS5_REQCMD] != config.reqcmd) {
    logmsg("Request COMMAND byte not %d", config.reqcmd);
    return CURL_SOCKET_BAD;
  }
  /* reserved, should be zero */
  if(buffer[SOCKS5_RESERVED] != 0) {
    logmsg("Request COMMAND byte not %d", config.reqcmd);
    return CURL_SOCKET_BAD;
  }
  /* ATYP:
     o  IP V4 address: X'01'
     o  DOMAINNAME: X'03'
     o  IP V6 address: X'04'
  */
  type = buffer[SOCKS5_ATYP];
  address = &buffer[SOCKS5_DSTADDR];
  switch(type) {
  case 1:
    /* 4 bytes IPv4 address */
    len = 4;
    break;
  case 3:
    /* The first octet of the address field contains the number of octets of
       name that follow */
    len = buffer[SOCKS5_DSTADDR];
    len++;
    break;
  case 4:
    /* 16 bytes IPv6 address */
    len = 16;
    break;
  default:
    logmsg("Unknown ATYP %d", type);
    return CURL_SOCKET_BAD;
  }
  if(rc < (4 + len + 2)) {
    logmsg("Request too short: %d, expected %d", rc, 4 + len + 2);
    return CURL_SOCKET_BAD;
  }

  if(!config.port) {
    unsigned char *portp = &buffer[SOCKS5_DSTADDR + len];
    s5port = (unsigned short)((portp[0]<<8) | (portp[1]));
  }
  else
    s5port = config.port;

  if(!config.connectrep)
    connfd = socksconnect(s5port, config.addr);

  if(connfd == CURL_SOCKET_BAD) {
    /* failed */
    rep = 1;
  }
  else {
    rep = config.connectrep;
  }

  /* */
  response[SOCKS5_VERSION] = config.responseversion;

  /*
    o  REP    Reply field:
    o  X'00' succeeded
    o  X'01' general SOCKS server failure
    o  X'02' connection not allowed by ruleset
    o  X'03' Network unreachable
    o  X'04' Host unreachable
    o  X'05' Connection refused
    o  X'06' TTL expired
    o  X'07' Command not supported
    o  X'08' Address type not supported
    o  X'09' to X'FF' unassigned
  */
  response[SOCKS5_REP] = rep;
  response[SOCKS5_RESERVED] = 0; /* must be zero */
  response[SOCKS5_ATYP] = type; /* address type */

  /* mirror back the original addr + port */

  /* address or hostname */
  memcpy(&response[SOCKS5_BNDADDR], address, len);

  /* port number */
  memcpy(&response[SOCKS5_BNDADDR + len],
         &buffer[SOCKS5_DSTADDR + len], sizeof(socksport));

  rc = (send)(fd, (char *)response, len + 6, 0);
  if(rc != (len + 6)) {
    logmsg("Sending connect response failed!");
    return CURL_SOCKET_BAD;
  }
  logmsg("Sent %d bytes", rc);
  loghex(response, rc);

  if(!rep)
    return connfd;

  if(connfd != CURL_SOCKET_BAD)
    sclose(connfd);

  return CURL_SOCKET_BAD;
}

struct perclient {
  size_t fromremote;
  size_t fromclient;
  curl_socket_t remotefd;
  curl_socket_t clientfd;
  bool used;
};

/* return non-zero when transfer is done */
static int tunnel(struct perclient *cp, fd_set *fds)
{
  ssize_t nread;
  ssize_t nwrite;
  char buffer[512];
  if(FD_ISSET(cp->clientfd, fds)) {
    /* read from client, send to remote */
    nread = recv(cp->clientfd, buffer, sizeof(buffer), 0);
    if(nread > 0) {
      nwrite = send(cp->remotefd, (char *)buffer,
                    (SEND_TYPE_ARG3)nread, 0);
      if(nwrite != nread)
        return 1;
      cp->fromclient += nwrite;
    }
    else
      return 1;
  }
  if(FD_ISSET(cp->remotefd, fds)) {
    /* read from remote, send to client */
    nread = recv(cp->remotefd, buffer, sizeof(buffer), 0);
    if(nread > 0) {
      nwrite = send(cp->clientfd, (char *)buffer,
                    (SEND_TYPE_ARG3)nread, 0);
      if(nwrite != nread)
        return 1;
      cp->fromremote += nwrite;
    }
    else
      return 1;
  }
  return 0;
}

/*
  sockfdp is a pointer to an established stream or CURL_SOCKET_BAD

  if sockfd is CURL_SOCKET_BAD, listendfd is a listening socket we must
  accept()
*/
static bool incoming(curl_socket_t listenfd)
{
  fd_set fds_read;
  fd_set fds_write;
  fd_set fds_err;
  curl_socket_t sockfd = CURL_SOCKET_BAD;
  int maxfd = -99;
  ssize_t rc;
  int error = 0;
  int clients = 0; /* connected clients */
  struct perclient c[2];

  memset(c, 0, sizeof(c));
  if(got_exit_signal) {
    logmsg("signalled to die, exiting...");
    return FALSE;
  }

#ifdef HAVE_GETPPID
  /* As a last resort, quit if socks5 process becomes orphan. */
  if(getppid() <= 1) {
    logmsg("process becomes orphan, exiting");
    return FALSE;
  }
#endif

  do {
    int i;

    FD_ZERO(&fds_read);
    FD_ZERO(&fds_write);
    FD_ZERO(&fds_err);

    sockfd = listenfd;
    /* there's always a socket to wait for */
    FD_SET(sockfd, &fds_read);
    maxfd = (int)sockfd;

    for(i = 0; i < 2; i++) {
      if(c[i].used) {
        curl_socket_t fd = c[i].clientfd;
        FD_SET(fd, &fds_read);
        if((int)fd > maxfd)
          maxfd = (int)fd;
        fd = c[i].remotefd;
        FD_SET(fd, &fds_read);
        if((int)fd > maxfd)
          maxfd = (int)fd;
      }
    }

    do {
      /* select() blocking behavior call on blocking descriptors please */
      rc = select(maxfd + 1, &fds_read, &fds_write, &fds_err, NULL);
      if(got_exit_signal) {
        logmsg("signalled to die, exiting...");
        return FALSE;
      }
    } while((rc == -1) && ((error = errno) == EINTR));

    if(rc < 0) {
      logmsg("select() failed with error: (%d) %s",
             error, strerror(error));
      return FALSE;
    }

    if((clients < 2) && FD_ISSET(sockfd, &fds_read)) {
      curl_socket_t newfd = accept(sockfd, NULL, NULL);
      if(CURL_SOCKET_BAD == newfd) {
        error = SOCKERRNO;
        logmsg("accept(%d, NULL, NULL) failed with error: (%d) %s",
               sockfd, error, strerror(error));
      }
      else {
        curl_socket_t remotefd;
        logmsg("====> Client connect, fd %d. Read config from %s",
               newfd, configfile);
        remotefd = sockit(newfd); /* SOCKS until done */
        if(remotefd == CURL_SOCKET_BAD) {
          logmsg("====> Client disconnect");
          sclose(newfd);
        }
        else {
          struct perclient *cp = &c[0];
          logmsg("====> Tunnel transfer");

          if(c[0].used)
            cp = &c[1];
          cp->fromremote = 0;
          cp->fromclient = 0;
          cp->clientfd = newfd;
          cp->remotefd = remotefd;
          cp->used = TRUE;
          clients++;
        }

      }
    }
    for(i = 0; i < 2; i++) {
      struct perclient *cp = &c[i];
      if(cp->used) {
        if(tunnel(cp, &fds_read)) {
          logmsg("SOCKS transfer completed. Bytes: < %zu > %zu",
                 cp->fromremote, cp->fromclient);
          sclose(cp->clientfd);
          sclose(cp->remotefd);
          cp->used = FALSE;
          clients--;
        }
      }
    }
  } while(clients);

  return TRUE;
}

static curl_socket_t sockdaemon(curl_socket_t sock,
                                unsigned short *listenport)
{
  /* passive daemon style */
  srvr_sockaddr_union_t listener;
  int flag;
  int rc;
  int totdelay = 0;
  int maxretr = 10;
  int delay = 20;
  int attempt = 0;
  int error = 0;

  do {
    attempt++;
    flag = 1;
    rc = setsockopt(sock, SOL_SOCKET, SO_REUSEADDR,
         (void *)&flag, sizeof(flag));
    if(rc) {
      error = SOCKERRNO;
      logmsg("setsockopt(SO_REUSEADDR) failed with error: (%d) %s",
             error, strerror(error));
      if(maxretr) {
        rc = wait_ms(delay);
        if(rc) {
          /* should not happen */
          error = errno;
          logmsg("wait_ms() failed with error: (%d) %s",
                 error, strerror(error));
          sclose(sock);
          return CURL_SOCKET_BAD;
        }
        if(got_exit_signal) {
          logmsg("signalled to die, exiting...");
          sclose(sock);
          return CURL_SOCKET_BAD;
        }
        totdelay += delay;
        delay *= 2; /* double the sleep for next attempt */
      }
    }
  } while(rc && maxretr--);

  if(rc) {
    logmsg("setsockopt(SO_REUSEADDR) failed %d times in %d ms. Error: (%d) %s",
           attempt, totdelay, error, strerror(error));
    logmsg("Continuing anyway...");
  }

  /* When the specified listener port is zero, it is actually a
     request to let the system choose a non-zero available port. */

#ifdef ENABLE_IPV6
  if(!use_ipv6) {
#endif
    memset(&listener.sa4, 0, sizeof(listener.sa4));
    listener.sa4.sin_family = AF_INET;
    listener.sa4.sin_addr.s_addr = INADDR_ANY;
    listener.sa4.sin_port = htons(*listenport);
    rc = bind(sock, &listener.sa, sizeof(listener.sa4));
#ifdef ENABLE_IPV6
  }
  else {
    memset(&listener.sa6, 0, sizeof(listener.sa6));
    listener.sa6.sin6_family = AF_INET6;
    listener.sa6.sin6_addr = in6addr_any;
    listener.sa6.sin6_port = htons(*listenport);
    rc = bind(sock, &listener.sa, sizeof(listener.sa6));
  }
#endif /* ENABLE_IPV6 */
  if(rc) {
    error = SOCKERRNO;
    logmsg("Error binding socket on port %hu: (%d) %s",
           *listenport, error, strerror(error));
    sclose(sock);
    return CURL_SOCKET_BAD;
  }

  if(!*listenport) {
    /* The system was supposed to choose a port number, figure out which
       port we actually got and update the listener port value with it. */
    curl_socklen_t la_size;
    srvr_sockaddr_union_t localaddr;
#ifdef ENABLE_IPV6
    if(!use_ipv6)
#endif
      la_size = sizeof(localaddr.sa4);
#ifdef ENABLE_IPV6
    else
      la_size = sizeof(localaddr.sa6);
#endif
    memset(&localaddr.sa, 0, (size_t)la_size);
    if(getsockname(sock, &localaddr.sa, &la_size) < 0) {
      error = SOCKERRNO;
      logmsg("getsockname() failed with error: (%d) %s",
             error, strerror(error));
      sclose(sock);
      return CURL_SOCKET_BAD;
    }
    switch(localaddr.sa.sa_family) {
    case AF_INET:
      *listenport = ntohs(localaddr.sa4.sin_port);
      break;
#ifdef ENABLE_IPV6
    case AF_INET6:
      *listenport = ntohs(localaddr.sa6.sin6_port);
      break;
#endif
    default:
      break;
    }
    if(!*listenport) {
      /* Real failure, listener port shall not be zero beyond this point. */
      logmsg("Apparently getsockname() succeeded, with listener port zero.");
      logmsg("A valid reason for this failure is a binary built without");
      logmsg("proper network library linkage. This might not be the only");
      logmsg("reason, but double check it before anything else.");
      sclose(sock);
      return CURL_SOCKET_BAD;
    }
  }

  /* start accepting connections */
  rc = listen(sock, 5);
  if(0 != rc) {
    error = SOCKERRNO;
    logmsg("listen(%d, 5) failed with error: (%d) %s",
           sock, error, strerror(error));
    sclose(sock);
    return CURL_SOCKET_BAD;
  }

  return sock;
}


int main(int argc, char *argv[])
{
  curl_socket_t sock = CURL_SOCKET_BAD;
  curl_socket_t msgsock = CURL_SOCKET_BAD;
  int wrotepidfile = 0;
  const char *pidname = ".socksd.pid";
  bool juggle_again;
  int error;
  int arg = 1;

  while(argc>arg) {
    if(!strcmp("--version", argv[arg])) {
      printf("socksd IPv4%s\n",
#ifdef ENABLE_IPV6
             "/IPv6"
#else
             ""
#endif
             );
      return 0;
    }
    else if(!strcmp("--pidfile", argv[arg])) {
      arg++;
      if(argc>arg)
        pidname = argv[arg++];
    }
    else if(!strcmp("--config", argv[arg])) {
      arg++;
      if(argc>arg)
        configfile = argv[arg++];
    }
    else if(!strcmp("--backend", argv[arg])) {
      arg++;
      if(argc>arg)
        backendaddr = argv[arg++];
    }
    else if(!strcmp("--backendport", argv[arg])) {
      arg++;
      if(argc>arg)
        backendport = (unsigned short)atoi(argv[arg++]);
    }
    else if(!strcmp("--logfile", argv[arg])) {
      arg++;
      if(argc>arg)
        serverlogfile = argv[arg++];
    }
    else if(!strcmp("--ipv6", argv[arg])) {
#ifdef ENABLE_IPV6
      ipv_inuse = "IPv6";
      use_ipv6 = TRUE;
#endif
      arg++;
    }
    else if(!strcmp("--ipv4", argv[arg])) {
      /* for completeness, we support this option as well */
#ifdef ENABLE_IPV6
      ipv_inuse = "IPv4";
      use_ipv6 = FALSE;
#endif
      arg++;
    }
    else if(!strcmp("--port", argv[arg])) {
      arg++;
      if(argc>arg) {
        char *endptr;
        unsigned long ulnum = strtoul(argv[arg], &endptr, 10);
        if((endptr != argv[arg] + strlen(argv[arg])) ||
           ((ulnum != 0UL) && ((ulnum < 1025UL) || (ulnum > 65535UL)))) {
          fprintf(stderr, "socksd: invalid --port argument (%s)\n",
                  argv[arg]);
          return 0;
        }
        port = curlx_ultous(ulnum);
        arg++;
      }
    }
    else {
      puts("Usage: socksd [option]\n"
           " --backend [ipv4 addr]\n"
           " --backendport [TCP port]\n"
           " --config [file]\n"
           " --version\n"
           " --logfile [file]\n"
           " --pidfile [file]\n"
           " --ipv4\n"
           " --ipv6\n"
           " --bindonly\n"
           " --port [port]\n");
      return 0;
    }
  }

#ifdef WIN32
  win32_init();
  atexit(win32_cleanup);

  setmode(fileno(stdin), O_BINARY);
  setmode(fileno(stdout), O_BINARY);
  setmode(fileno(stderr), O_BINARY);
#endif

  install_signal_handlers();

#ifdef ENABLE_IPV6
  if(!use_ipv6)
#endif
    sock = socket(AF_INET, SOCK_STREAM, 0);
#ifdef ENABLE_IPV6
  else
    sock = socket(AF_INET6, SOCK_STREAM, 0);
#endif

  if(CURL_SOCKET_BAD == sock) {
    error = SOCKERRNO;
    logmsg("Error creating socket: (%d) %s",
           error, strerror(error));
    goto socks5_cleanup;
  }

  {
    /* passive daemon style */
    sock = sockdaemon(sock, &port);
    if(CURL_SOCKET_BAD == sock) {
      goto socks5_cleanup;
    }
    msgsock = CURL_SOCKET_BAD; /* no stream socket yet */
  }

  logmsg("Running %s version", ipv_inuse);
  logmsg("Listening on port %hu", port);

  wrotepidfile = write_pidfile(pidname);
  if(!wrotepidfile) {
    goto socks5_cleanup;
  }

  do {
    juggle_again = incoming(sock);
  } while(juggle_again);

socks5_cleanup:

  if((msgsock != sock) && (msgsock != CURL_SOCKET_BAD))
    sclose(msgsock);

  if(sock != CURL_SOCKET_BAD)
    sclose(sock);

  if(wrotepidfile)
    unlink(pidname);

  restore_signal_handlers();

  if(got_exit_signal) {
    logmsg("============> socksd exits with signal (%d)", exit_signal);
    /*
     * To properly set the return status of the process we
     * must raise the same signal SIGINT or SIGTERM that we
     * caught and let the old handler take care of it.
     */
    raise(exit_signal);
  }

  logmsg("============> socksd quits");
  return 0;
}
Changes to jni/curl/tests/server/sws.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
107
108
109
110
111
112
113


114
115
116
117
118
119

120
121
122
123
124
125
126







-
-






-







                     there's an Authorization header */
  bool auth;      /* Authorization header present in the incoming request */
  size_t cl;      /* Content-Length of the incoming request */
  bool digest;    /* Authorization digest header found */
  bool ntlm;      /* Authorization ntlm header found */
  int writedelay; /* if non-zero, delay this number of seconds between
                     writes in the response */
  int pipe;       /* if non-zero, expect this many requests to do a "piped"
                     request/response */
  int skip;       /* if non-zero, the server is instructed to not read this
                     many bytes from a PUT/POST request. Ie the client sends N
                     bytes said in Content-Length, but the server only reads N
                     - skip bytes. */
  int rcmd;       /* doing a special command, see defines above */
  int prot_version;  /* HTTP version * 10 */
  bool pipelining;   /* true if request is pipelined */
  int callcount;  /* times ProcessRequest() gets called */
  bool connmon;   /* monitor the state of the connection, log disconnects */
  bool upgrade;   /* test case allows upgrade to http2 */
  bool upgrade_request; /* upgrade request found and allowed */
  bool close;     /* similar to swsclose in response: close connection after
                     response is sent */
  int done_processing;
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
419
420
421
422
423
424
425








426
427
428
429
430
431
432







-
-
-
-
-
-
-
-







        logmsg("enabled upgrade to http2");
        req->upgrade = TRUE;
      }
      else if(!strncmp(CMD_SWSCLOSE, cmd, strlen(CMD_SWSCLOSE))) {
        logmsg("swsclose: close this connection after response");
        req->close = TRUE;
      }
      else if(1 == sscanf(cmd, "pipe: %d", &num)) {
        logmsg("instructed to allow a pipe size of %d", num);
        if(num < 0)
          logmsg("negative pipe size ignored");
        else if(num > 0)
          req->pipe = num-1; /* decrease by one since we don't count the
                                first request in this number */
      }
      else if(1 == sscanf(cmd, "skip: %d", &num)) {
        logmsg("instructed to skip this number of bytes %d", num);
        req->skip = num;
      }
      else if(1 == sscanf(cmd, "writedelay: %d", &num)) {
        logmsg("instructed to delay %d secs between packets", num);
        req->writedelay = num;
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
691
692
693
694
695
696
697





698
699
700
701
702
703
704







-
-
-
-
-







      msnprintf(logbuf, sizeof(logbuf),
                "Requested GOPHER test number %ld part %ld",
                req->testno, req->partno);
      logmsg("%s", logbuf);
    }
  }

  if(req->pipe)
    /* we do have a full set, advance the checkindex to after the end of the
       headers, for the pipelining case mostly */
    req->checkindex += (end - line) + strlen(end_of_headers);

  /* **** Persistence ****
   *
   * If the request is a HTTP/1.0 one, we close the connection unconditionally
   * when we're done.
   *
   * If the request is a HTTP/1.1 one, we MUST check for a "Connection:"
   * header that might say "close". If it does, we close a connection when
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
824
825
826
827
828
829
830


831
832
833
834
835
836
837
838
839
840













841
842
843
844
845
846
847







-
-
+









-
-
-
-
-
-
-
-
-
-
-
-
-







       authentication negotiation to work in the test suite. */
    req->partno += 1;
    logmsg("Received Basic request, sending back data %ld", req->partno);
  }
  if(strstr(req->reqbuf, "Connection: close"))
    req->open = FALSE; /* close connection after this request */

  if(!req->pipe &&
     req->open &&
  if(req->open &&
     req->prot_version >= 11 &&
     end &&
     req->reqbuf + req->offset > end + strlen(end_of_headers) &&
     !req->cl &&
     (!strncmp(req->reqbuf, "GET", strlen("GET")) ||
      !strncmp(req->reqbuf, "HEAD", strlen("HEAD")))) {
    /* If we have a persistent connection, HTTP version >= 1.1
       and GET/HEAD request, enable pipelining. */
    req->checkindex = (end - req->reqbuf) + strlen(end_of_headers);
    req->pipelining = TRUE;
  }

  while(req->pipe) {
    if(got_exit_signal)
      return 1; /* done */
    /* scan for more header ends within this chunk */
    line = &req->reqbuf[req->checkindex];
    end = strstr(line, end_of_headers);
    if(!end)
      break;
    req->checkindex += (end - line) + strlen(end_of_headers);
    req->pipe--;
  }

  /* If authentication is required and no auth was provided, end now. This
     makes the server NOT wait for PUT/POST data and you can then make the
     test case send a rejection before any such data has been sent. Test case
     154 uses this.*/
  if(req->auth_req && !req->auth) {
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
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







-
-
-
-
-
-
+
+
-









-







  if(res)
    logmsg("Error closing file %s error: %d %s",
           dumpfile, error, strerror(error));
}

static void init_httprequest(struct httprequest *req)
{
  /* Pipelining is already set, so do not initialize it here. Only initialize
     checkindex and offset if pipelining is not set, since in a pipeline they
     need to be inherited from the previous request. */
  if(!req->pipelining) {
    req->checkindex = 0;
    req->offset = 0;
  req->checkindex = 0;
  req->offset = 0;
  }
  req->testno = DOCNUMBER_NOTHING;
  req->partno = 0;
  req->connect_request = FALSE;
  req->open = TRUE;
  req->auth_req = FALSE;
  req->auth = FALSE;
  req->cl = 0;
  req->digest = FALSE;
  req->ntlm = FALSE;
  req->pipe = 0;
  req->skip = 0;
  req->writedelay = 0;
  req->rcmd = RCMD_NORMALREQ;
  req->prot_version = 0;
  req->callcount = 0;
  req->connect_port = 0;
  req->done_processing = 0;
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
951
952
953
954
955
956
957











958
959
960
961
962
963
964







-
-
-
-
-
-
-
-
-
-
-







  char *reqbuf = req->reqbuf;
  ssize_t got = 0;
  int overflow = 0;

  char *pipereq = NULL;
  size_t pipereq_length = 0;

  if(req->pipelining) {
    pipereq = reqbuf + req->checkindex;
    pipereq_length = req->offset - req->checkindex;

    /* Now that we've got the pipelining info we can reset the
       pipelining-related vars which were skipped in init_httprequest */
    req->pipelining = FALSE;
    req->checkindex = 0;
    req->offset = 0;
  }

  if(req->offset >= REQBUFSIZ-1) {
    /* buffer is already full; do nothing */
    overflow = 1;
  }
  else {
    if(pipereq_length && pipereq) {
      memmove(reqbuf, pipereq, pipereq_length);
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078

1079
1080
1081
1082
1083
1084
1085
1000
1001
1002
1003
1004
1005
1006





1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025

1026
1027
1028
1029
1030
1031
1032
1033







-
-
-
-
-



















-
+








    req->offset += (size_t)got;
    reqbuf[req->offset] = '\0';

    req->done_processing = ProcessRequest(req);
    if(got_exit_signal)
      return -1;
    if(req->done_processing && req->pipe) {
      logmsg("Waiting for another piped request");
      req->done_processing = 0;
      req->pipe--;
    }
  }

  if(overflow || (req->offset == REQBUFSIZ-1 && got > 0)) {
    logmsg("Request would overflow buffer, closing connection");
    /* dump request received so far to external file anyway */
    reqbuf[REQBUFSIZ-1] = '\0';
    fail = 1;
  }
  else if(req->offset > REQBUFSIZ-1) {
    logmsg("Request buffer overflow, closing connection");
    /* dump request received so far to external file anyway */
    reqbuf[REQBUFSIZ-1] = '\0';
    fail = 1;
  }
  else
    reqbuf[req->offset] = '\0';

  /* at the end of a request dump it to an external file */
  if(fail || req->done_processing)
    storerequest(reqbuf, req->pipelining ? req->checkindex : req->offset);
    storerequest(reqbuf, req->offset);
  if(got_exit_signal)
    return -1;

  return fail ? -1 : 1;
}

/* returns -1 on failure */
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1542
1543
1544
1545
1546
1547
1548

1549
1550
1551
1552
1553
1554
1555







-







            /* Disable the Nagle algorithm */
            curl_socklen_t flag = 1;
            if(0 != setsockopt(datafd, IPPROTO_TCP, TCP_NODELAY,
                               (void *)&flag, sizeof(flag)))
              logmsg("====> TCP_NODELAY for client DATA connection failed");
          }
#endif
          req2.pipelining = FALSE;
          init_httprequest(&req2);
          while(!req2.done_processing) {
            err = get_request(datafd, &req2);
            if(err < 0) {
              /* this socket must be closed, done or not */
              break;
            }
2277
2278
2279
2280
2281
2282
2283
2284
2285
2286
2287
2288
2289
2290
2291
2224
2225
2226
2227
2228
2229
2230

2231
2232
2233
2234
2235
2236
2237







-







  if(!wrotepidfile)
    goto sws_cleanup;

  /* initialization of httprequest struct is done before get_request(), but
     the pipelining struct field must be initialized previously to FALSE
     every time a new connection arrives. */

  req.pipelining = FALSE;
  init_httprequest(&req);

  for(;;) {
    fd_set input;
    fd_set output;
    struct timeval timeout = {0, 250000L}; /* 250 ms */
    curl_socket_t maxfd = (curl_socket_t)-1;
Changes to jni/curl/tests/server/util.c.
146
147
148
149
150
151
152
153
154


155
156
157
158
159
160
161
146
147
148
149
150
151
152


153
154
155
156
157
158
159
160
161







-
-
+
+







#ifdef WIN32
/* use instead of perror() on generic windows */
void win32_perror(const char *msg)
{
  char buf[512];
  DWORD err = SOCKERRNO;

  if(!FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
                    LANG_NEUTRAL, buf, sizeof(buf), NULL))
  if(!FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err,
                     LANG_NEUTRAL, buf, sizeof(buf), NULL))
    msnprintf(buf, sizeof(buf), "Unknown error %lu (%#lx)", err, err);
  if(msg)
    fprintf(stderr, "%s: ", msg);
  fprintf(stderr, "%s\n", buf);
}
#endif  /* WIN32 */

Changes to jni/curl/tests/sshserver.pl.
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
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








-
+














-
+







#!/usr/bin/env perl
#***************************************************************************
#                                  _   _ ____  _
#  Project                     ___| | | |  _ \| |
#                             / __| | | | |_) | |
#                            | (__| |_| |  _ <| |___
#                             \___|\___/|_| \_\_____|
#
# Copyright (C) 1998 - 2014, Daniel Stenberg, <daniel@haxx.se>, et al.
# Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at https://curl.haxx.se/docs/copyright.html.
#
# You may opt to use, copy, modify, merge, publish, distribute and/or sell
# copies of the Software, and permit persons to whom the Software is
# furnished to do so, under the terms of the COPYING file.
#
# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
# KIND, either express or implied.
#
#***************************************************************************

# Starts sshd for use in the SCP, SFTP and SOCKS curl test harness tests.
# Starts sshd for use in the SCP and SFTP curl test harness tests.
# Also creates the ssh configuration files needed for these tests.

use strict;
use warnings;
use Cwd;
use Cwd 'abs_path';

77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
77
78
79
80
81
82
83

84
85
86
87
88
89
90







-







use pathhelp;

#***************************************************************************

my $verbose = 0;              # set to 1 for debugging
my $debugprotocol = 0;        # set to 1 for protocol debugging
my $port = 8999;              # our default SCP/SFTP server port
my $socksport = $port + 1;    # our default SOCKS4/5 server port
my $listenaddr = '127.0.0.1'; # default address on which to listen
my $ipvnum = 4;               # default IP version of listener address
my $idnum = 1;                # default ssh daemon instance number
my $proto = 'ssh';            # protocol the ssh daemon speaks
my $path = getcwd();          # current working directory
my $logdir = $path .'/log';   # directory for log files
my $username = $ENV{USER};    # default user
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
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







-
-
-
-
-
-
-
-
















-
+



-







        if($ARGV[1]) {
            if($ARGV[1] =~ /^(\d+)$/) {
                $port = $1;
                shift @ARGV;
            }
        }
    }
    elsif($ARGV[0] eq '--socksport') {
        if($ARGV[1]) {
            if($ARGV[1] =~ /^(\d+)$/) {
                $socksport = $1;
                shift @ARGV;
            }
        }
    }
    else {
        print STDERR "\nWarning: sshserver.pl unknown parameter: $ARGV[0]\n";
    }
    shift @ARGV;
}


#***************************************************************************
# Default ssh daemon pid file name
#
if(!$pidfile) {
    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
}


#***************************************************************************
# ssh, socks and sftp server log file names
# ssh and sftp server log file names
#
$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
$sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum);
$sshlog  = server_logfilename($logdir, 'socks', $ipvnum, $idnum);


#***************************************************************************
# Logging level for ssh server and client
#
my $loglevel = $debugprotocol?'DEBUG3':'DEBUG2';

222
223
224
225
226
227
228
229

230
231
232
233
234
235
236
212
213
214
215
216
217
218

219
220
221
222
223
224
225
226







-
+







#***************************************************************************
# Find out ssh daemon version info
#
my ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
if(!$sshdid) {
    # Not an OpenSSH or SunSSH ssh daemon
    logmsg $sshderror if($verbose);
    logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
    exit 1;
}
logmsg "ssh server found $sshd is $sshdverstr" if($verbose);


#***************************************************************************
#  ssh daemon command line options we might use and version support
251
252
253
254
255
256
257
258

259
260
261
262
263
264
265
241
242
243
244
245
246
247

248
249
250
251
252
253
254
255







-
+









#***************************************************************************
# Verify minimum ssh daemon version
#
if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
   (($sshdid =~ /SunSSH/)  && ($sshdvernum < 100))) {
    logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
    exit 1;
}


#***************************************************************************
# Find out sftp server plugin canonical file name
#
306
307
308
309
310
311
312
313

314
315
316
317
318
319
320
296
297
298
299
300
301
302

303
304
305
306
307
308
309
310







-
+







#***************************************************************************
# Find out ssh client version info
#
my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
if(!$sshid) {
    # Not an OpenSSH or SunSSH ssh client
    logmsg $ssherror if($verbose);
    logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
    exit 1;
}
logmsg "ssh client found $ssh is $sshverstr" if($verbose);


#***************************************************************************
#  ssh client command line options we might use and version support
337
338
339
340
341
342
343
344

345
346
347
348
349
350
351
327
328
329
330
331
332
333

334
335
336
337
338
339
340
341







-
+









#***************************************************************************
# Verify minimum ssh client version
#
if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
   (($sshid =~ /SunSSH/)  && ($sshvernum < 100))) {
    logmsg 'SCP, SFTP and SOCKS tests require OpenSSH 2.9.9 or later';
    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
    exit 1;
}


#***************************************************************************
#  ssh keygen command line options we actually use and version support
#
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
850
851
852
853
854
855
856

857
858
859
860
861
862
863







-







push @cfgarr, '#';
push @cfgarr, "Port $port";
push @cfgarr, "HostName $listenaddr";
push @cfgarr, "User $username";
push @cfgarr, 'Protocol 2';
push @cfgarr, '#';
push @cfgarr, "BindAddress $listenaddr";
push @cfgarr, "DynamicForward $socksport";
push @cfgarr, '#';
push @cfgarr, "IdentityFile $identity_config";
push @cfgarr, "UserKnownHostsFile $knownhosts_config";
push @cfgarr, '#';
push @cfgarr, 'BatchMode yes';
push @cfgarr, 'ChallengeResponseAuthentication no';
push @cfgarr, 'CheckHostIP no';
Changes to jni/curl/tests/testcurl.1.
16
17
18
19
20
21
22
23

24
25
26
27
28
29
30
16
17
18
19
20
21
22

23
24
25
26
27
28
29
30







-
+







.\" * furnished to do so, under the terms of the COPYING file.
.\" *
.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
.\" * KIND, either express or implied.
.\" *
.\" **************************************************************************
.\"
.TH testcurl.pl 1 "October 22, 2016" "Curl 7.64.1" "testcurl"
.TH testcurl.pl 1 "October 22, 2016" "Curl 7.65.0" "testcurl"

.SH NAME
testcurl.pl \- (automatically) test curl
.SH SYNOPSIS
.B testcurl.pl [options] [dir] > output
.SH DESCRIPTION
\fItestcurl.pl\fP is the master script to use for automatic testing of curl
Changes to jni/curl/tests/unit/unit1304.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
203
204
205
206
207
208
209
210
211
212
213
214
203
204
205
206
207
208
209




210







-
-
-
-

  fail_unless(strncmp(password, "none", 4) == 0,
              "password should be 'none'");
  fail_unless(password_changed, "password should have been changed");
  abort_unless(login != NULL, "returned NULL!");
  fail_unless(strncmp(login, "none", 4) == 0, "login should be 'none'");
  fail_unless(!login_changed, "login should not have been changed");

  /* TODO:
   * Test over the size limit password / login!
   * Test files with a bad format
   */
UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1398.c.
1
2
3
4
5
6
7
8

9
10
11
12
13
14
15
1
2
3
4
5
6
7

8
9
10
11
12
13
14
15







-
+







/***************************************************************************
 *                                  _   _ ____  _
 *  Project                     ___| | | |  _ \| |
 *                             / __| | | | |_) | |
 *                            | (__| |_| |  _ <| |___
 *                             \___|\___/|_| \_\_____|
 *
 * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
 * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
 *
 * This software is licensed as described in the file COPYING, which
 * you should have received as part of this distribution. The terms
 * are also available at https://curl.haxx.se/docs/copyright.html.
 *
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 * copies of the Software, and permit persons to whom the Software is
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
70
71
72
73
74
75
76

77
78
79
80
81
82
83







-







/* larger width that string length */
rc = curl_msnprintf(output, 8, "%8s", str);
fail_unless(rc == 8, "return code should be 8");
fail_unless(!strcmp(output, "     bu"), "wrong output");

/* output a number in a limited output */
rc = curl_msnprintf(output, 4, "%d", 10240);
/* TODO: this should return 5 to be POSIX/msnprintf compliant! */
fail_unless(rc == 4, "return code should be 4");
fail_unless(!strcmp(output, "102"), "wrong output");

/* padded strings */
rc = curl_msnprintf(output, 16, "%8s%8s", str, str);
fail_unless(rc == 16, "return code should be 16");
fail_unless(!strcmp(output, "     bug     bu"), "wrong output");
Changes to jni/curl/tests/unit/unit1607.c.
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
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







-
-
-


-









-
-
-
-
-
-
-
-
-
-
-
-








/* retrieves ip address and port from a sockaddr structure.
   note it calls Curl_inet_ntop which sets errno on fail, not SOCKERRNO. */
bool getaddressinfo(struct sockaddr *sa, char *addr, long *port);

#include "memdebug.h" /* LAST include file */

static struct Curl_easy *easy;
static struct curl_hash *hostcache;

static void unit_stop(void)
{
  curl_easy_cleanup(easy);
  curl_global_cleanup();
}

static CURLcode unit_setup(void)
{
  int res = CURLE_OK;

  global_init(CURL_GLOBAL_ALL);

  easy = curl_easy_init();
  if(!easy) {
    curl_global_cleanup();
    return CURLE_OUT_OF_MEMORY;
  }

  hostcache = Curl_global_host_cache_init();
  if(!hostcache) {
    unit_stop();
    return CURLE_OUT_OF_MEMORY;
  }

  return res;
}

struct testcase {
  /* host:port:address[,address]... */
  const char *optval;

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
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







-
+







+
+
+
+
+
-
-
-
-
+
+
+
+
+
+







  },
};

UNITTEST_START
  int i;
  int testnum = sizeof(tests) / sizeof(struct testcase);

  for(i = 0; i < testnum; ++i, curl_easy_reset(easy)) {
  for(i = 0; i < testnum; ++i) {
    int j;
    int addressnum = sizeof(tests[i].address) / sizeof(*tests[i].address);
    struct Curl_addrinfo *addr;
    struct Curl_dns_entry *dns;
    struct curl_slist *list;
    void *entry_id;
    bool problem = false;
    struct Curl_multi *multi;
    struct Curl_easy *easy = curl_easy_init();
    if(!easy) {
      curl_global_cleanup();
      return CURLE_OUT_OF_MEMORY;

    Curl_hostcache_clean(easy, hostcache);
    easy->dns.hostcache = hostcache;
    easy->dns.hostcachetype = HCACHE_GLOBAL;
    }

    /* create a multi handle and add the easy handle to it so that the
       hostcache is setup */
    multi = curl_multi_init();
    curl_multi_add_handle(multi, easy);

    list = curl_slist_append(NULL, tests[i].optval);
    if(!list)
        goto unit_test_abort;
    curl_easy_setopt(easy, CURLOPT_RESOLVE, list);

    Curl_loadhostpairs(easy);
210
211
212
213
214
215
216
217


218
219
220
221
222
223
224
225
201
202
203
204
205
206
207

208
209
210
211
212
213
214
215
216
217







-
+
+








        problem = true;
        break;
      }

      addr = addr->ai_next;
    }

    Curl_hostcache_clean(easy, easy->dns.hostcache);
    curl_easy_cleanup(easy);
    curl_multi_cleanup(multi);
    curl_slist_free_all(list);

    if(problem) {
      unitfail++;
      continue;
    }
  }
UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1608.c.
61
62
63
64
65
66
67

68
69
70
71
72
73
61
62
63
64
65
66
67
68
69
70
71
72
73
74







+






    if(CURLE_OK != Curl_shuffle_addr(easy, &addrhead))
      break;
    if(addrhead != addrs)
      break;
  }

  curl_easy_cleanup(easy);
  curl_global_cleanup();

  abort_unless(addrhead != addrs, "addresses are not being reordered");

  return 0;
}
UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1609.c.
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
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







-
-
-


-









-
-
-
-
-
-
-
-
-
-
-
-








/* retrieves ip address and port from a sockaddr structure.
   note it calls Curl_inet_ntop which sets errno on fail, not SOCKERRNO. */
bool getaddressinfo(struct sockaddr *sa, char *addr, long *port);

#include "memdebug.h" /* LAST include file */

static struct Curl_easy *easy;
static struct curl_hash *hostcache;

static void unit_stop(void)
{
  curl_easy_cleanup(easy);
  curl_global_cleanup();
}

static CURLcode unit_setup(void)
{
  int res = CURLE_OK;

  global_init(CURL_GLOBAL_ALL);

  easy = curl_easy_init();
  if(!easy) {
    curl_global_cleanup();
    return CURLE_OUT_OF_MEMORY;
  }

  hostcache = Curl_global_host_cache_init();
  if(!hostcache) {
    unit_stop();
    return CURLE_OUT_OF_MEMORY;
  }

  return res;
}

struct testcase {
  /* host:port:address[,address]... */
  const char *optval;

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
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







+






-
-
-

-
+







+
+
+
+
+
+
+
+
+
+







  },
  { "test.com:80:127.0.0.2",
    "test.com", 80, { "127.0.0.2", }
  },
};

UNITTEST_START
{
  int i;
  int testnum = sizeof(tests) / sizeof(struct testcase);

/* important: we setup cache outside of the loop
  and also clean cache after the loop. In contrast,for example,
  test 1607 sets up and cleans cache on each iteration. */
  Curl_hostcache_clean(easy, hostcache);
  easy->dns.hostcache = hostcache;
  easy->dns.hostcachetype = HCACHE_GLOBAL;

  for(i = 0; i < testnum; ++i, curl_easy_reset(easy)) {
  for(i = 0; i < testnum; ++i) {
    int j;
    int addressnum = sizeof (tests[i].address) / sizeof (*tests[i].address);
    struct Curl_addrinfo *addr;
    struct Curl_dns_entry *dns;
    struct curl_slist *list;
    void *entry_id;
    bool problem = false;
    struct Curl_multi *multi;
    struct Curl_easy *easy = curl_easy_init();
    if(!easy) {
      curl_global_cleanup();
      return CURLE_OUT_OF_MEMORY;
    }
    /* create a multi handle and add the easy handle to it so that the
       hostcache is setup */
    multi = curl_multi_init();
    curl_multi_add_handle(multi, easy);

    list = curl_slist_append(NULL, tests[i].optval);
    if(!list)
        goto unit_test_abort;

    curl_easy_setopt(easy, CURLOPT_RESOLVE, list);

201
202
203
204
205
206
207



208
209
210
211
212
213
214
215

216
217
218
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209

210


211







+
+
+







-
+
-
-

        problem = true;
        break;
      }

      addr = addr->ai_next;
    }

    curl_easy_cleanup(easy);
    Curl_hash_destroy(&multi->hostcache);
    curl_multi_cleanup(multi);
    curl_slist_free_all(list);

    if(problem) {
      unitfail++;
      continue;
    }
  }

}
  Curl_hostcache_clean(easy, easy->dns.hostcache);

UNITTEST_STOP
Changes to jni/curl/tests/unit/unit1621.c.
31
32
33
34
35
36
37
38



39
40
41
42
43
44
45
31
32
33
34
35
36
37

38
39
40
41
42
43
44
45
46
47







-
+
+
+







  return CURLE_OK;
}

static void unit_stop(void)
{
}

#ifdef __MINGW32__
#if defined(__MINGW32__)  || \
  (!defined(HAVE_FSETXATTR) && \
  (!defined(__FreeBSD_version) || (__FreeBSD_version < 500000)))
UNITTEST_START
{
  return 0;
}
UNITTEST_STOP
#else

Changes to jni/curl/tests/unit/unit1653.c.
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
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







-
+















-
+





  free_and_clear(ipv6port);
  curl_url_cleanup(u);

  /* Incorrect zone index syntax */
  u = curl_url();
  if(!u)
    goto fail;
  ipv6port = strdup("[fe80::250:56ff:fea7:da15%!25eth3]:80");
  ipv6port = strdup("[fe80::250:56ff:fea7:da15!25eth3]:80");
  if(!ipv6port)
    goto fail;
  ret = Curl_parse_port(u, ipv6port);
  fail_unless(ret != CURLUE_OK, "Curl_parse_port returned non-error");
  free_and_clear(ipv6port);
  curl_url_cleanup(u);

  /* Non percent-encoded zone index */
  u = curl_url();
  if(!u)
    goto fail;
  ipv6port = strdup("[fe80::250:56ff:fea7:da15%eth3]:80");
  if(!ipv6port)
    goto fail;
  ret = Curl_parse_port(u, ipv6port);
  fail_unless(ret != CURLUE_OK, "Curl_parse_port returned non-error");
  fail_unless(ret == CURLUE_OK, "Curl_parse_port returned error");
  fail:
  free(ipv6port);
  curl_url_cleanup(u);
}
UNITTEST_STOP
Changes to jni/curl/winbuild/Makefile.vc.
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
164
165
166
167
168
169
170






171
172
173
174
175
176
177







-
-
-
-
-
-







!ENDIF

!IF "$(WITH_MBEDTLS)"=="dll" || "$(WITH_MBEDTLS)"=="static"
USE_MBEDTLS = true
MBEDTLS     = $(WITH_MBEDTLS)
!ENDIF

!IF ( "$(USE_SSL)"=="true" && "$(USE_WINSSL)"=="true" ) \
 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \
 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WINSSL)"=="true" )
!ERROR SSL, MBEDTLS and WINSSL are mutual exclusive options.
!ENDIF

!IF "$(WITH_CARES)"=="dll"
USE_CARES = true
CARES     = dll
!ELSEIF "$(WITH_CARES)"=="static"
USE_CARES = true
CARES     = static
!ENDIF
Changes to jni/curl/winbuild/MakefileBuild.vc.
474
475
476
477
478
479
480






481
482
483
484
485
486
487
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493







+
+
+
+
+
+







LFLAGS = $(LFLAGS) $(NGHTTP2_LFLAGS) $(NGHTTP2_LIBS)
!ENDIF

!IF "$(GEN_PDB)"=="true"
CFLAGS = $(CFLAGS) $(CFLAGS_PDB) /Fd"$(LIB_DIROBJ)\$(PDB)"
LFLAGS = $(LFLAGS) $(LFLAGS_PDB)
!ENDIF

!IF ( "$(USE_SSL)"=="true" && "$(USE_WINSSL)"=="true" ) \
 || ( "$(USE_SSL)"=="true" && "$(USE_MBEDTLS)"=="true" ) \
 || ( "$(USE_MBEDTLS)"=="true" && "$(USE_WINSSL)"=="true" )
CFLAGS = $(CFLAGS) /DCURL_WITH_MULTI_SSL
!ENDIF

LIB_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-lib
CURL_DIROBJ = ..\builds\$(CONFIG_NAME_LIB)-obj-curl
DIRDIST = ..\builds\$(CONFIG_NAME_LIB)\

#
# curl.exe
Changes to jni/curl/winbuild/gen_resp_file.bat.
1
2
























3
4

5
6
7




8


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
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+


+
-
-
-
+
+
+
+

@echo OFF
@if exist %OUTFILE% (
@echo off
rem ***************************************************************************
rem *                                  _   _ ____  _
rem *  Project                     ___| | | |  _ \| |
rem *                             / __| | | | |_) | |
rem *                            | (__| |_| |  _ <| |___
rem *                             \___|\___/|_| \_\_____|
rem *
rem * Copyright (C) 2011 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
rem *
rem * This software is licensed as described in the file COPYING, which
rem * you should have received as part of this distribution. The terms
rem * are also available at https://curl.haxx.se/docs/copyright.html.
rem *
rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell
rem * copies of the Software, and permit persons to whom the Software is
rem * furnished to do so, under the terms of the COPYING file.
rem *
rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
rem * KIND, either express or implied.
rem *
rem ***************************************************************************

if exist %OUTFILE% (
    del %OUTFILE%
)

@echo %MACRO_NAME% = \> %OUTFILE%
@for %%i in (%*) do @echo		%DIROBJ%/%%i \>>  %OUTFILE%
@echo. >>  %OUTFILE%
echo %MACRO_NAME% = \> %OUTFILE%
for %%i in (%*) do echo		%DIROBJ%/%%i \>>  %OUTFILE%
echo. >>  %OUTFILE%

:END